Frontend:
- Add translate button click handler in submission-modal-enhanced.js
- Display loading state during translation (⏳ Translating...)
- Update French textarea with translated content
- Auto-update word counts after translation
- Show success message with DeepL attribution
Backend:
- Add POST /api/submissions/:id/translate endpoint
- Integrate Translation.service (DeepL)
- Save translations to SubmissionTracking.documents
- Mark translations as 'translatedBy: deepl', 'approved: false'
- Return translated text with caching metadata
Complete Translation Flow:
1. User clicks 'Translate EN → FR' button
2. Frontend sends English text to /api/submissions/:id/translate
3. Backend calls DeepL API via Translation.service
4. Translation cached for 24 hours
5. Result saved to submission.documents[docType].versions[]
6. French textarea populated with translation
7. User can review/edit before saving submission
Next: Configure DEEPL_API_KEY in .env to enable translations
82 lines
No EOL
2 KiB
JSON
82 lines
No EOL
2 KiB
JSON
{
|
|
"version": "1.0.0",
|
|
"session_id": "2025-10-07-001",
|
|
"started": "2025-10-07T19:04:07.677Z",
|
|
"message_count": 1,
|
|
"token_estimate": 0,
|
|
"last_framework_activity": {
|
|
"ContextPressureMonitor": {
|
|
"message": 1,
|
|
"tokens": 0,
|
|
"timestamp": "2025-10-07T19:04:07.677Z",
|
|
"last_level": "NORMAL",
|
|
"last_score": 0
|
|
},
|
|
"InstructionPersistenceClassifier": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_classification": null
|
|
},
|
|
"CrossReferenceValidator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_validation": null
|
|
},
|
|
"BoundaryEnforcer": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_check": null
|
|
},
|
|
"MetacognitiveVerifier": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_verification": null
|
|
},
|
|
"PluralisticDeliberationOrchestrator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_deliberation": null
|
|
},
|
|
"FileEditHook": {
|
|
"timestamp": "2025-10-23T22:18:49.684Z",
|
|
"file": "/home/theflow/projects/tractatus/src/routes/submissions.routes.js",
|
|
"result": "passed"
|
|
},
|
|
"FileWriteHook": {
|
|
"timestamp": "2025-10-23T22:16:03.430Z",
|
|
"file": "/home/theflow/projects/tractatus/src/services/Translation.service.js",
|
|
"result": "passed"
|
|
}
|
|
},
|
|
"staleness_thresholds": {
|
|
"messages": 20,
|
|
"tokens": 30000
|
|
},
|
|
"alerts": [],
|
|
"last_updated": "2025-10-23T22:18:49.684Z",
|
|
"initialized": true,
|
|
"framework_components": {
|
|
"CrossReferenceValidator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": "2025-10-23T22:19:02.223Z",
|
|
"last_validation": "2025-10-23T22:19:02.223Z",
|
|
"validations_performed": 797
|
|
},
|
|
"BashCommandValidator": {
|
|
"message": 0,
|
|
"tokens": 0,
|
|
"timestamp": null,
|
|
"last_validation": "2025-10-23T22:19:02.224Z",
|
|
"validations_performed": 435,
|
|
"blocks_issued": 38
|
|
}
|
|
},
|
|
"action_count": 435,
|
|
"auto_compact_events": []
|
|
} |