@nac3/forge-cli 0.2.1-alpha.60 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +5 -1
  2. package/dist/agents/bridge.d.ts.map +1 -1
  3. package/dist/agents/bridge.js +27 -0
  4. package/dist/agents/bridge.js.map +1 -1
  5. package/dist/agents/config_resolver.d.ts.map +1 -1
  6. package/dist/agents/config_resolver.js +15 -15
  7. package/dist/agents/config_resolver.js.map +1 -1
  8. package/dist/agents/runner.d.ts +8 -0
  9. package/dist/agents/runner.d.ts.map +1 -1
  10. package/dist/agents/runner.js +58 -11
  11. package/dist/agents/runner.js.map +1 -1
  12. package/dist/agents/system_prompt.d.ts.map +1 -1
  13. package/dist/agents/system_prompt.js +2 -1
  14. package/dist/agents/system_prompt.js.map +1 -1
  15. package/dist/bin/yf.d.ts.map +1 -1
  16. package/dist/bin/yf.js +18 -0
  17. package/dist/bin/yf.js.map +1 -1
  18. package/dist/chat/claude.d.ts +13 -0
  19. package/dist/chat/claude.d.ts.map +1 -1
  20. package/dist/chat/claude.js +95 -10
  21. package/dist/chat/claude.js.map +1 -1
  22. package/dist/chat/claude_cli.d.ts +10 -0
  23. package/dist/chat/claude_cli.d.ts.map +1 -1
  24. package/dist/chat/claude_cli.js +97 -16
  25. package/dist/chat/claude_cli.js.map +1 -1
  26. package/dist/chat/completion_hallucination_detector.d.ts +11 -0
  27. package/dist/chat/completion_hallucination_detector.d.ts.map +1 -1
  28. package/dist/chat/completion_hallucination_detector.js +37 -2
  29. package/dist/chat/completion_hallucination_detector.js.map +1 -1
  30. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  31. package/dist/chat/doctrine_digest.js +10 -6
  32. package/dist/chat/doctrine_digest.js.map +1 -1
  33. package/dist/chat/panel.d.ts.map +1 -1
  34. package/dist/chat/panel.js +923 -50
  35. package/dist/chat/panel.js.map +1 -1
  36. package/dist/chat/refusal_detector.d.ts.map +1 -1
  37. package/dist/chat/refusal_detector.js +2 -1
  38. package/dist/chat/refusal_detector.js.map +1 -1
  39. package/dist/chat/server.d.ts +1 -0
  40. package/dist/chat/server.d.ts.map +1 -1
  41. package/dist/chat/server.js +960 -73
  42. package/dist/chat/server.js.map +1 -1
  43. package/dist/chat/session_projects.d.ts +31 -0
  44. package/dist/chat/session_projects.d.ts.map +1 -0
  45. package/dist/chat/session_projects.js +36 -0
  46. package/dist/chat/session_projects.js.map +1 -0
  47. package/dist/chat/session_store.d.ts +32 -0
  48. package/dist/chat/session_store.d.ts.map +1 -0
  49. package/dist/chat/session_store.js +58 -0
  50. package/dist/chat/session_store.js.map +1 -0
  51. package/dist/chat/tooling_section.d.ts +11 -0
  52. package/dist/chat/tooling_section.d.ts.map +1 -0
  53. package/dist/chat/tooling_section.js +70 -0
  54. package/dist/chat/tooling_section.js.map +1 -0
  55. package/dist/chat/tools/app_backend_dispatch.d.ts.map +1 -1
  56. package/dist/chat/tools/app_backend_dispatch.js +44 -1
  57. package/dist/chat/tools/app_backend_dispatch.js.map +1 -1
  58. package/dist/chat/tools/fs_editor.d.ts.map +1 -1
  59. package/dist/chat/tools/fs_editor.js +53 -3
  60. package/dist/chat/tools/fs_editor.js.map +1 -1
  61. package/dist/chat/tools/graph.js +2 -2
  62. package/dist/chat/tools/graph.js.map +1 -1
  63. package/dist/chat/tools/keys.d.ts.map +1 -1
  64. package/dist/chat/tools/keys.js +5 -18
  65. package/dist/chat/tools/keys.js.map +1 -1
  66. package/dist/chat/tools/nac3_invoke.d.ts.map +1 -1
  67. package/dist/chat/tools/nac3_invoke.js +16 -7
  68. package/dist/chat/tools/nac3_invoke.js.map +1 -1
  69. package/dist/chat/tools/shell.d.ts +6 -0
  70. package/dist/chat/tools/shell.d.ts.map +1 -1
  71. package/dist/chat/tools/shell.js +39 -0
  72. package/dist/chat/tools/shell.js.map +1 -1
  73. package/dist/chat/tools/workflow.d.ts +20 -0
  74. package/dist/chat/tools/workflow.d.ts.map +1 -1
  75. package/dist/chat/tools/workflow.js +98 -0
  76. package/dist/chat/tools/workflow.js.map +1 -1
  77. package/dist/chat/tools.d.ts.map +1 -1
  78. package/dist/chat/tools.js +79 -1
  79. package/dist/chat/tools.js.map +1 -1
  80. package/dist/chat/turn_control.d.ts +42 -0
  81. package/dist/chat/turn_control.d.ts.map +1 -0
  82. package/dist/chat/turn_control.js +53 -0
  83. package/dist/chat/turn_control.js.map +1 -0
  84. package/dist/commands/brain.js +1 -1
  85. package/dist/commands/chat.d.ts.map +1 -1
  86. package/dist/commands/chat.js +61 -10
  87. package/dist/commands/chat.js.map +1 -1
  88. package/dist/commands/graph.js +9 -9
  89. package/dist/commands/graph.js.map +1 -1
  90. package/dist/commands/keys_setup.d.ts +10 -28
  91. package/dist/commands/keys_setup.d.ts.map +1 -1
  92. package/dist/commands/keys_setup.js +54 -228
  93. package/dist/commands/keys_setup.js.map +1 -1
  94. package/dist/commands/license.d.ts.map +1 -1
  95. package/dist/commands/license.js +52 -28
  96. package/dist/commands/license.js.map +1 -1
  97. package/dist/commands/mcp.d.ts.map +1 -1
  98. package/dist/commands/mcp.js +62 -6
  99. package/dist/commands/mcp.js.map +1 -1
  100. package/dist/commands/mobile.d.ts +1 -1
  101. package/dist/commands/mobile.d.ts.map +1 -1
  102. package/dist/commands/mobile.js +32 -28
  103. package/dist/commands/mobile.js.map +1 -1
  104. package/dist/commands/onboard.d.ts +19 -0
  105. package/dist/commands/onboard.d.ts.map +1 -0
  106. package/dist/commands/onboard.js +126 -0
  107. package/dist/commands/onboard.js.map +1 -0
  108. package/dist/commands/pending.d.ts.map +1 -1
  109. package/dist/commands/pending.js +25 -1
  110. package/dist/commands/pending.js.map +1 -1
  111. package/dist/commands/projects.js +25 -1
  112. package/dist/commands/projects.js.map +1 -1
  113. package/dist/commands/review-screens.js +28 -1
  114. package/dist/commands/review-screens.js.map +1 -1
  115. package/dist/commands/workflow.d.ts +18 -0
  116. package/dist/commands/workflow.d.ts.map +1 -0
  117. package/dist/commands/workflow.js +253 -0
  118. package/dist/commands/workflow.js.map +1 -0
  119. package/dist/core/brain_config.d.ts +2 -0
  120. package/dist/core/brain_config.d.ts.map +1 -1
  121. package/dist/core/brain_config.js +18 -3
  122. package/dist/core/brain_config.js.map +1 -1
  123. package/dist/core/cf_tunnel.d.ts.map +1 -1
  124. package/dist/core/cf_tunnel.js +8 -2
  125. package/dist/core/cf_tunnel.js.map +1 -1
  126. package/dist/core/cost_router.d.ts.map +1 -1
  127. package/dist/core/cost_router.js +11 -2
  128. package/dist/core/cost_router.js.map +1 -1
  129. package/dist/core/desktop_open.d.ts +16 -0
  130. package/dist/core/desktop_open.d.ts.map +1 -0
  131. package/dist/core/desktop_open.js +114 -0
  132. package/dist/core/desktop_open.js.map +1 -0
  133. package/dist/core/keys_envelope.d.ts.map +1 -1
  134. package/dist/core/keys_envelope.js +5 -1
  135. package/dist/core/keys_envelope.js.map +1 -1
  136. package/dist/core/limits_config.d.ts +5 -0
  137. package/dist/core/limits_config.d.ts.map +1 -1
  138. package/dist/core/limits_config.js +5 -0
  139. package/dist/core/limits_config.js.map +1 -1
  140. package/dist/core/logger.d.ts.map +1 -1
  141. package/dist/core/logger.js +3 -0
  142. package/dist/core/logger.js.map +1 -1
  143. package/dist/core/pairing.d.ts +6 -0
  144. package/dist/core/pairing.d.ts.map +1 -1
  145. package/dist/core/pairing.js +41 -2
  146. package/dist/core/pairing.js.map +1 -1
  147. package/dist/core/provider_keys.d.ts.map +1 -1
  148. package/dist/core/provider_keys.js +25 -12
  149. package/dist/core/provider_keys.js.map +1 -1
  150. package/dist/core/provider_models.js +1 -1
  151. package/dist/deploy/cloudflare.d.ts.map +1 -1
  152. package/dist/deploy/cloudflare.js +13 -2
  153. package/dist/deploy/cloudflare.js.map +1 -1
  154. package/dist/design/yujin_design_resolver.d.ts +16 -0
  155. package/dist/design/yujin_design_resolver.d.ts.map +1 -1
  156. package/dist/design/yujin_design_resolver.js +103 -20
  157. package/dist/design/yujin_design_resolver.js.map +1 -1
  158. package/dist/docs/doctrine/default-design-system.md +32 -0
  159. package/dist/docs/doctrine/office-tools.md +20 -0
  160. package/dist/docs/doctrine/pizarron.md +40 -0
  161. package/dist/docs/doctrine/verb-composition.md +16 -0
  162. package/dist/docs/doctrine/workflow-kinds.md +39 -22
  163. package/dist/docs/doctrine/workflow.md +12 -4
  164. package/dist/license/auto_sync.d.ts +22 -0
  165. package/dist/license/auto_sync.d.ts.map +1 -0
  166. package/dist/license/auto_sync.js +91 -0
  167. package/dist/license/auto_sync.js.map +1 -0
  168. package/dist/license/handle_key.d.ts +32 -0
  169. package/dist/license/handle_key.d.ts.map +1 -0
  170. package/dist/license/handle_key.js +56 -0
  171. package/dist/license/handle_key.js.map +1 -0
  172. package/dist/license/hito4_client.d.ts.map +1 -1
  173. package/dist/license/hito4_client.js +63 -25
  174. package/dist/license/hito4_client.js.map +1 -1
  175. package/dist/llm/gemini_client.d.ts.map +1 -1
  176. package/dist/llm/gemini_client.js +5 -2
  177. package/dist/llm/gemini_client.js.map +1 -1
  178. package/dist/llm/managed_client.d.ts.map +1 -1
  179. package/dist/llm/managed_client.js +14 -9
  180. package/dist/llm/managed_client.js.map +1 -1
  181. package/dist/mcp/plan_bridges.d.ts +17 -0
  182. package/dist/mcp/plan_bridges.d.ts.map +1 -0
  183. package/dist/mcp/plan_bridges.js +119 -0
  184. package/dist/mcp/plan_bridges.js.map +1 -0
  185. package/dist/migrate/ai-apply.d.ts.map +1 -1
  186. package/dist/migrate/ai-apply.js +25 -2
  187. package/dist/migrate/ai-apply.js.map +1 -1
  188. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  189. package/dist/nac3/internal_manifest.js +200 -10
  190. package/dist/nac3/internal_manifest.js.map +1 -1
  191. package/dist/nac3/verb_tier_map.d.ts.map +1 -1
  192. package/dist/nac3/verb_tier_map.js +3 -0
  193. package/dist/nac3/verb_tier_map.js.map +1 -1
  194. package/dist/onboarding/concierge_client.d.ts +34 -0
  195. package/dist/onboarding/concierge_client.d.ts.map +1 -0
  196. package/dist/onboarding/concierge_client.js +80 -0
  197. package/dist/onboarding/concierge_client.js.map +1 -0
  198. package/dist/onboarding/next_step.d.ts +32 -0
  199. package/dist/onboarding/next_step.d.ts.map +1 -0
  200. package/dist/onboarding/next_step.js +60 -0
  201. package/dist/onboarding/next_step.js.map +1 -0
  202. package/dist/pending/store.d.ts +7 -0
  203. package/dist/pending/store.d.ts.map +1 -1
  204. package/dist/pending/store.js +19 -0
  205. package/dist/pending/store.js.map +1 -1
  206. package/dist/pending/types.d.ts +20 -0
  207. package/dist/pending/types.d.ts.map +1 -1
  208. package/dist/pending/types.js.map +1 -1
  209. package/dist/reader/parsers/epub.d.ts.map +1 -1
  210. package/dist/reader/parsers/epub.js +6 -1
  211. package/dist/reader/parsers/epub.js.map +1 -1
  212. package/dist/relay/board_snapshot.d.ts +69 -0
  213. package/dist/relay/board_snapshot.d.ts.map +1 -0
  214. package/dist/relay/board_snapshot.js +149 -0
  215. package/dist/relay/board_snapshot.js.map +1 -0
  216. package/dist/relay/command_consumer.d.ts +97 -0
  217. package/dist/relay/command_consumer.d.ts.map +1 -0
  218. package/dist/relay/command_consumer.js +135 -0
  219. package/dist/relay/command_consumer.js.map +1 -0
  220. package/dist/relay/mock_relay.d.ts +34 -0
  221. package/dist/relay/mock_relay.d.ts.map +1 -0
  222. package/dist/relay/mock_relay.js +93 -0
  223. package/dist/relay/mock_relay.js.map +1 -0
  224. package/dist/relay/relay_client.d.ts +28 -0
  225. package/dist/relay/relay_client.d.ts.map +1 -0
  226. package/dist/relay/relay_client.js +80 -0
  227. package/dist/relay/relay_client.js.map +1 -0
  228. package/dist/relay/relay_publisher.d.ts +59 -0
  229. package/dist/relay/relay_publisher.d.ts.map +1 -0
  230. package/dist/relay/relay_publisher.js +101 -0
  231. package/dist/relay/relay_publisher.js.map +1 -0
  232. package/dist/relay/types.d.ts +54 -0
  233. package/dist/relay/types.d.ts.map +1 -0
  234. package/dist/relay/types.js +8 -0
  235. package/dist/relay/types.js.map +1 -0
  236. package/dist/semantic_graph/ast_extract.d.ts +5 -0
  237. package/dist/semantic_graph/ast_extract.d.ts.map +1 -1
  238. package/dist/semantic_graph/ast_extract.js +46 -0
  239. package/dist/semantic_graph/ast_extract.js.map +1 -1
  240. package/dist/semantic_graph/derive.d.ts +12 -0
  241. package/dist/semantic_graph/derive.d.ts.map +1 -1
  242. package/dist/semantic_graph/derive.js +325 -6
  243. package/dist/semantic_graph/derive.js.map +1 -1
  244. package/dist/semantic_graph/store.d.ts +9 -0
  245. package/dist/semantic_graph/store.d.ts.map +1 -1
  246. package/dist/semantic_graph/store.js +23 -1
  247. package/dist/semantic_graph/store.js.map +1 -1
  248. package/dist/semantic_graph/types.d.ts +1 -1
  249. package/dist/semantic_graph/types.d.ts.map +1 -1
  250. package/dist/support/github_dispatcher.d.ts.map +1 -1
  251. package/dist/support/github_dispatcher.js +30 -2
  252. package/dist/support/github_dispatcher.js.map +1 -1
  253. package/dist/tasks/supervisor.d.ts +88 -0
  254. package/dist/tasks/supervisor.d.ts.map +1 -0
  255. package/dist/tasks/supervisor.js +308 -0
  256. package/dist/tasks/supervisor.js.map +1 -0
  257. package/dist/tasks/task_type.d.ts +11 -0
  258. package/dist/tasks/task_type.d.ts.map +1 -0
  259. package/dist/tasks/task_type.js +21 -0
  260. package/dist/tasks/task_type.js.map +1 -0
  261. package/dist/vault/store.d.ts.map +1 -1
  262. package/dist/vault/store.js +6 -1
  263. package/dist/vault/store.js.map +1 -1
  264. package/dist/version.d.ts +3 -5
  265. package/dist/version.d.ts.map +1 -1
  266. package/dist/version.js +3 -5
  267. package/dist/version.js.map +1 -1
  268. package/dist/voice/providers/google.d.ts.map +1 -1
  269. package/dist/voice/providers/google.js +6 -4
  270. package/dist/voice/providers/google.js.map +1 -1
  271. package/dist/workflow/config.d.ts +43 -0
  272. package/dist/workflow/config.d.ts.map +1 -0
  273. package/dist/workflow/config.js +199 -0
  274. package/dist/workflow/config.js.map +1 -0
  275. package/dist/workflow/instances.d.ts +40 -0
  276. package/dist/workflow/instances.d.ts.map +1 -0
  277. package/dist/workflow/instances.js +122 -0
  278. package/dist/workflow/instances.js.map +1 -0
  279. package/dist/workflow/multi_view.d.ts +27 -0
  280. package/dist/workflow/multi_view.d.ts.map +1 -0
  281. package/dist/workflow/multi_view.js +76 -0
  282. package/dist/workflow/multi_view.js.map +1 -0
  283. package/dist/workflow/orchestrator.d.ts +111 -0
  284. package/dist/workflow/orchestrator.d.ts.map +1 -0
  285. package/dist/workflow/orchestrator.js +241 -0
  286. package/dist/workflow/orchestrator.js.map +1 -0
  287. package/docs/doctrine/default-design-system.md +32 -0
  288. package/docs/doctrine/office-tools.md +20 -0
  289. package/docs/doctrine/pizarron.md +40 -0
  290. package/docs/doctrine/verb-composition.md +16 -0
  291. package/docs/doctrine/workflow-kinds.md +39 -22
  292. package/docs/doctrine/workflow.md +12 -4
  293. package/package.json +2 -1
  294. package/src/i18n/catalogs/ar.json +223 -210
  295. package/src/i18n/catalogs/de.json +223 -210
  296. package/src/i18n/catalogs/en.json +223 -210
  297. package/src/i18n/catalogs/es.json +223 -210
  298. package/src/i18n/catalogs/fr.json +223 -210
  299. package/src/i18n/catalogs/hi.json +223 -210
  300. package/src/i18n/catalogs/it.json +223 -210
  301. package/src/i18n/catalogs/ja.json +223 -210
  302. package/src/i18n/catalogs/pt.json +223 -210
  303. package/src/i18n/catalogs/zh.json +223 -210
@@ -1,210 +1,223 @@
1
- {
2
- "panel.brand": "Yujin Forge",
3
- "panel.brand.kanji": "侑",
4
- "panel.tagline": "Assistant de developpement vocal",
5
- "panel.input.placeholder": "Demande a Yujin",
6
- "panel.button.send": "Envoyer",
7
- "panel.button.mic": "Parler (maintenir)",
8
- "panel.button.mic.recording": "Appuyer pour arreter l'enregistrement",
9
- "panel.button.tts": "Voix activee",
10
- "panel.button.keys": "Cles",
11
- "panel.button.minimise": "Reduire",
12
- "panel.button.maximise": "Agrandir",
13
- "panel.button.close": "Fermer",
14
- "panel.button.language": "Langue",
15
- "panel.trace.title": "Trace des actions",
16
- "panel.trace.count.one": "{n} appel d'outil",
17
- "panel.trace.count.other": "{n} appels d'outils",
18
- "panel.trace.empty.kanji": "空",
19
- "panel.trace.empty.body": "Yujin Forge affiche ici chaque outil qu'il invoque pour te repondre : lecture du manifest, recherche dans le SPEC, edition de composants, lecture de documents. Pose une question qui necessite de les consulter.",
20
- "panel.trace.badge.tool": "OUTIL",
21
- "panel.trace.badge.voice": "VOIX",
22
- "panel.trace.badge.error": "ERREUR",
23
- "panel.stream.empty.kanji": "侑仁",
24
- "panel.stream.empty.body": "Yujin Forge en ligne. Demande des changements au projet.",
25
- "panel.status.no_audio": "Aucun audio capture. Le micro n'a probablement rien recu.",
26
- "panel.status.did_not_catch": "Je n'ai pas compris. Essayons a nouveau.",
27
- "panel.status.mic_denied": "Permission micro refusee ou indisponible : {error}",
28
- "panel.status.voice_failed": "La voix a echoue : {error}",
29
- "panel.status.voice_reply_failed": "Impossible de lire la reponse : {error}",
30
- "panel.status.audio_play_error": "Impossible de lire l'audio : {error}",
31
- "panel.status.reading": "Lecture de {filename}...",
32
- "panel.status.ingest_failed": "L'ingestion a echoue : {error}",
33
- "panel.status.read_failed": "Impossible de lire la specification : {error}",
34
- "panel.drop.title": "Depose la specification ici",
35
- "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
36
- "panel.ingest.spec_attached": "Specification jointe : {filename}, {kb} KB",
37
- "panel.ingest.read_label": "Lue.",
38
- "panel.ingest.title_label": "Titre : {title}",
39
- "panel.ingest.no_title": "(sans titre)",
40
- "panel.ingest.format_label": "Format : {format} / {sections} section(s) / {kb} KB",
41
- "panel.ingest.first_lines": "Premieres lignes :",
42
- "panel.ingest.action_done": "Action {tool} terminee.",
43
- "vault.modal.title": "Identifiants (vault)",
44
- "vault.modal.aria.close": "Fermer la modale des identifiants",
45
- "vault.tab.list": "Slots charges",
46
- "vault.tab.add": "Ajouter",
47
- "vault.list.loading": "Chargement...",
48
- "vault.list.empty": "Tu n'as encore charge aucune cle. Clique sur \"Ajouter\" pour commencer.",
49
- "vault.add.slot_label": "Nom du slot",
50
- "vault.add.slot_hint": "Lettres minuscules, chiffres, soulignement, tiret. Doit commencer par une lettre.",
51
- "vault.add.value_label": "Valeur en clair (masquee)",
52
- "vault.add.value_hint": "Affichee une seule fois lors de la sauvegarde. Apres, tu peux la remplacer mais pas la relire.",
53
- "vault.add.button_save": "Enregistrer",
54
- "vault.add.button_cancel": "Annuler",
55
- "vault.add.success": "Slot {slot} enregistre.",
56
- "vault.add.overwrite": "Slot {slot} ecrase.",
57
- "manual.intro": "Yujin Forge -- manuel utilisateur",
58
- "manual.section.welcome": "Bienvenue",
59
- "manual.section.install": "Installation",
60
- "manual.section.first_run": "Premiere execution",
61
- "manual.section.voice": "Commandes vocales",
62
- "manual.section.spec_ingest": "Ingestion de specifications",
63
- "manual.section.troubleshooting": "Depannage",
64
- "manual.section.support": "Support",
65
- "lang.name.es": "Espagnol",
66
- "lang.name.en": "Anglais",
67
- "lang.name.pt": "Portugais",
68
- "lang.name.fr": "Francais",
69
- "lang.name.ja": "Japonais",
70
- "lang.name.zh": "Chinois",
71
- "lang.name.hi": "Hindi",
72
- "lang.name.ar": "Arabe",
73
- "lang.name.de": "Allemand",
74
- "lang.name.it": "Italien",
75
- "recap.fallback_period": ".",
76
- "recap.empty": "Il n'y a rien a resumer pour l'instant.",
77
- "error_ui.severity.info": "INFO",
78
- "error_ui.severity.warning": "ATTENTION",
79
- "error_ui.severity.error": "ERREUR",
80
- "error_ui.severity.fatal": "FATAL",
81
- "error_ui.label.what": "Que s'est-il passe",
82
- "error_ui.label.why": "Pourquoi",
83
- "error_ui.label.fix": "Comment debloquer",
84
- "error_ui.label.cmd": "Commande",
85
- "error_ui.label.docs": "Docs locales",
86
- "error_ui.label.retry": "Reessayer dans",
87
- "error_ui.copy_btn": "Copier la commande",
88
- "error_ui.unknown.what": "Forge a rencontre une erreur interne (code inconnu).",
89
- "error_ui.unknown.why": "Le code {code} n'est pas dans le catalogue. C'est un bug.",
90
- "error_ui.unknown.fix": "Ouvrez un issue sur https://github.com/yujinapp/yujin-forge/issues avec le code + le traceback.",
91
- "error.cap_frontier_exhausted.what": "Cap mensuel de tokens du tier frontier epuise (gros modele).",
92
- "error.cap_frontier_exhausted.why": "Votre plan {plan} permet jusqu'a {cap} tokens/mois en frontier. Vous avez utilise {used}. Reset au debut du prochain mois UTC.",
93
- "error.cap_frontier_exhausted.fix": "Passez au BYOK Anthropic direct: ignore le cap mensuel du worker. Votre cout devient ce qu'Anthropic facture.",
94
- "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
95
- "error.cap_eco_exhausted.what": "Cap mensuel de tokens du tier eco epuise (petit modele).",
96
- "error.cap_eco_exhausted.why": "Votre plan {plan} permet jusqu'a {cap} tokens/mois en eco. Vous avez utilise {used}. Reset au debut du prochain mois UTC.",
97
- "error.cap_eco_exhausted.fix": "Passez au BYOK direct ou montez de plan. BYOK ignore le cap du worker.",
98
- "error.cap_eco_exhausted.cmd": "yf brain config --eco-provider google_ai --eco-model gemini-2.5-flash-lite",
99
- "error.tier_not_in_plan.what": "Le tier {tier} n'est pas active sur votre plan.",
100
- "error.tier_not_in_plan.why": "Votre plan {plan} n'inclut pas le tier {tier}. Vous etes probablement en free-public ou votre licence a expire.",
101
- "error.tier_not_in_plan.fix": "Activez une licence payante ou passez au BYOK direct (votre cout, sans cap du worker).",
102
- "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
103
- "error.response_truncated.what": "La reponse du modele a ete coupee avant la fin.",
104
- "error.response_truncated.why": "Limite managed_max_tokens_per_turn = {limit} tokens atteinte en plein turn. Le modele a arrete de generer.",
105
- "error.response_truncated.fix": "Augmentez la limite via yf limits. S'applique au prochain turn sans redemarrer le chat.",
106
- "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
107
- "error.response_truncated.banner": "[Reponse tronquee par max_tokens={max}. Augmentez la limite avec: yf limits set managed_max_tokens_per_turn {suggested}]",
108
- "error.modal_trace_stale.what": "Le modal d'approbation a expire ou est orphelin.",
109
- "error.modal_trace_stale.why": "Le trace_id {trace_id} n'a pas d'approval en attente dans le dispatcher. Probable race condition entre invoke et etat du panel, ou cancel precedent a laisse le trace zombie.",
110
- "error.modal_trace_stale.fix": "Reinvoquez le verb depuis le chat: demarre un nouveau trace propre. Si ca persiste, lancez yf doctor pour verifier le panel.",
111
- "error.modal_trace_stale.cmd": "yf doctor",
112
- "error.byok_key_missing.what": "API key manquante pour le provider {provider}.",
113
- "error.byok_key_missing.why": "Vous avez configure {provider} comme provider du tier {tier} mais le slot byok_{slot} n'est pas dans le Vault chiffre.",
114
- "error.byok_key_missing.fix": "Configurez la key avec yf keys set (atomique, mode 0600, jamais journalise).",
115
- "error.byok_key_missing.cmd": "yf keys set {slot}",
116
- "error.worker_unreachable.what": "Impossible d'atteindre le worker yujin.app.",
117
- "error.worker_unreachable.why": "Timeout reseau ou worker en panne (HTTP {status}). Reessaye {attempts} fois.",
118
- "error.worker_unreachable.fix": "Verifiez votre internet. Si OK, passez temporairement au BYOK direct pour eviter la dependance au worker.",
119
- "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
120
- "error.vault_decrypt_failed.what": "Impossible de dechiffrer une cle du Vault.",
121
- "error.vault_decrypt_failed.why": "La master key est incorrecte ou le fichier du Vault est corrompu. Peut arriver si vous avez deplace la config entre machines sans migrer la master ou par disk error.",
122
- "error.vault_decrypt_failed.fix": "Recuperez la copie du serveur (rechiffre avec votre master locale) si vous avez le server backup actif.",
123
- "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
124
- "error.shell_exec_rejected.what": "Vous avez rejete le modal R8 de yujin.shell.exec.",
125
- "error.shell_exec_rejected.why": "La commande {command} a ete classee comme {classification}. shell.exec demande toujours approbation par securite, meme si la commande est read-only.",
126
- "error.shell_exec_rejected.fix": "Si la commande etait read-only (yf projects active, git status, ls), utilisez le verb natif equivalent. Si elle etait necessaire et vous avez rejete par erreur, reinvoquez.",
127
- "error.project_not_registered.what": "Aucun projet adopter enregistre.",
128
- "error.project_not_registered.why": "Le verb invoque necessite un project root actif mais ~/.yujin-forge/projects.json n'a pas d'entrees.",
129
- "error.project_not_registered.fix": "Creez-en un avec yujin.project.init ou enregistrez un existant avec yf projects add.",
130
- "error.project_not_registered.cmd": "yf projects scan",
131
- "panel.button.agents": "Agents",
132
- "panel.agents.title": "Agents",
133
- "panel.agents.subtitle": "Director et sous-agents enregistres dans ce projet",
134
- "panel.agents.empty.title": "Aucun agent pour l'instant",
135
- "panel.agents.empty.body": "Executez `yf agent install --defaults` pour enregistrer le Director et ses 4 sous-agents (Analyste, Coder, Tester, Scaffolder).",
136
- "panel.agents.legend.eco": "Eco",
137
- "panel.agents.legend.managed": "Managed",
138
- "panel.agents.legend.frontier": "Frontier",
139
- "panel.agents.status.disabled": "Runtime des agents non demarre",
140
- "panel.agents.event.running": "En cours",
141
- "panel.agents.event.idle": "En attente",
142
- "panel.agents.tick.live": "Connecte",
143
- "panel.agents.tick.lost": "Connexion perdue",
144
- "workflow.phase.i": "Triage et intention",
145
- "workflow.phase.ii": "Clarification (fonctionnel + 4 NFR + blocs)",
146
- "workflow.phase.iii": "Specifications (RFP + Arch + Design + approbations)",
147
- "workflow.phase.iv": "Bootstrap",
148
- "workflow.phase.v": "Developpement par blocs",
149
- "workflow.phase.vi": "Deploiement + post-lancement",
150
- "wizard.title": "Bienvenue dans Yujin Forge",
151
- "wizard.close": "Fermer",
152
- "wizard.intro": "Pour commencer, choisissez comment Forge se connecte a votre modele IA. Vous pourrez modifier ce choix plus tard depuis Settings.",
153
- "wizard.back": "Retour",
154
- "wizard.start": "Commencer",
155
- "wizard.plan.badge": "Recommande",
156
- "wizard.plan.title": "Plan Claude",
157
- "wizard.plan.desc": "Abonnement mensuel Claude. Option la moins chere pour usage regulier. Forge utilise votre session claude -p.",
158
- "wizard.plan.price": "Forfait mensuel (Plan)",
159
- "wizard.plan.step.title": "Connecter votre Plan Claude",
160
- "wizard.plan.step.1": "Ouvrez un nouveau terminal.",
161
- "wizard.plan.step.2": "Lancez la commande claude (sans arguments) et completez la connexion dans le navigateur.",
162
- "wizard.plan.step.3": "Revenez ici et cliquez sur Je suis connecte pour verifier.",
163
- "wizard.plan.done": "Je suis connecte",
164
- "wizard.byok.title": "Cle API Console (BYOK)",
165
- "wizard.byok.desc": "Votre propre cle Anthropic Console. Paiement a l usage. Plus flexible mais cout variable.",
166
- "wizard.byok.price": "Paiement a l usage (Console)",
167
- "wizard.byok.step.title": "Collez votre cle API Anthropic",
168
- "wizard.byok.step.intro": "Votre cle commence par sk-ant- et est obtenue sur console.anthropic.com. Forge la stocke chiffree dans le Vault local; elle ne quitte jamais votre machine.",
169
- "wizard.byok.test": "Valider et enregistrer",
170
- "wizard.skip.title": "Je suis deja configure",
171
- "wizard.skip.desc": "Sauter l assistant. Vous pourrez le rouvrir depuis Settings.",
172
- "wizard.done.kanji": "Termine",
173
- "wizard.done.title": "Termine",
174
- "wizard.done.msg": "Forge est configure. Commencez a discuter.",
175
- "pizarron.button.read": "Lire",
176
- "pizarron.button.copy": "Copier",
177
- "pizarron.button.edit": "Modifier",
178
- "pizarron.graph.refresh": "Actualiser",
179
- "pizarron.graph.regenerating": "Regeneration...",
180
- "pizarron.graph.detail.hint": "Touchez un noeud pour le detail.",
181
- "pizarron.graph.detail.empty": "Aucun detail pour ce noeud.",
182
- "pizarron.graph.detail.weight": "poids",
183
- "startup.tab.graph": "Graphe visuel",
184
- "startup.tab.graphSem": "Graphe semantique",
185
- "startup.tab.pendings": "En attente",
186
- "startup.tab.workflow": "Workflow",
187
- "settings.startupTabs": "Onglets a l'ouverture (graphe, en attente, workflow)",
188
- "graph.term.nodes": "noeuds",
189
- "graph.term.edges": "aretes",
190
- "coding.read": "Lecture de {x}",
191
- "coding.read_bare": "Lecture d'un fichier",
192
- "coding.edit": "Modification de {x}",
193
- "coding.edit_bare": "Modification d'un fichier",
194
- "coding.write": "Ecriture de {x}",
195
- "coding.write_bare": "Ecriture d'un fichier",
196
- "coding.notebook_bare": "Modification du notebook",
197
- "coding.bash": "Execution : {x}",
198
- "coding.bash_bare": "Execution d'une commande",
199
- "coding.grep": "Recherche \"{x}\"",
200
- "coding.grep_bare": "Recherche dans le code",
201
- "coding.glob": "Liste de {x}",
202
- "coding.glob_bare": "Liste des fichiers",
203
- "coding.web_bare": "Lecture du web",
204
- "coding.websearch": "Recherche web : {x}",
205
- "coding.websearch_bare": "Recherche web",
206
- "coding.task": "Sous-agent : {x}",
207
- "coding.task_bare": "Lancement d'un sous-agent",
208
- "coding.todo": "Mise a jour de sa liste de taches",
209
- "coding.verb_bare": "Execution d'un verbe yujin"
210
- }
1
+ {
2
+ "panel.brand": "Yujin Forge",
3
+ "panel.brand.kanji": "侑",
4
+ "panel.tagline": "Assistant de developpement vocal",
5
+ "panel.input.placeholder": "Demande a Yujin",
6
+ "panel.button.send": "Envoyer",
7
+ "panel.button.mic": "Parler (maintenir)",
8
+ "panel.button.mic.recording": "Appuyer pour arreter l'enregistrement",
9
+ "panel.button.tts": "Voix activee",
10
+ "panel.button.keys": "Cles",
11
+ "panel.button.minimise": "Reduire",
12
+ "panel.button.maximise": "Agrandir",
13
+ "panel.button.close": "Fermer",
14
+ "panel.button.language": "Langue",
15
+ "panel.trace.title": "Trace des actions",
16
+ "panel.trace.count.one": "{n} appel d'outil",
17
+ "panel.trace.count.other": "{n} appels d'outils",
18
+ "panel.trace.empty.kanji": "空",
19
+ "panel.trace.empty.body": "Yujin Forge affiche ici chaque outil qu'il invoque pour te repondre : lecture du manifest, recherche dans le SPEC, edition de composants, lecture de documents. Pose une question qui necessite de les consulter.",
20
+ "panel.trace.badge.tool": "OUTIL",
21
+ "panel.trace.badge.voice": "VOIX",
22
+ "panel.trace.badge.error": "ERREUR",
23
+ "panel.stream.empty.kanji": "侑仁",
24
+ "panel.stream.empty.body": "Yujin Forge en ligne. Demande des changements au projet.",
25
+ "panel.status.no_audio": "Aucun audio capture. Le micro n'a probablement rien recu.",
26
+ "panel.status.did_not_catch": "Je n'ai pas compris. Essayons a nouveau.",
27
+ "panel.status.mic_denied": "Permission micro refusee ou indisponible : {error}",
28
+ "panel.status.voice_failed": "La voix a echoue : {error}",
29
+ "panel.status.voice_reply_failed": "Impossible de lire la reponse : {error}",
30
+ "panel.status.audio_play_error": "Impossible de lire l'audio : {error}",
31
+ "panel.status.reading": "Lecture de {filename}...",
32
+ "panel.status.ingest_failed": "L'ingestion a echoue : {error}",
33
+ "panel.status.read_failed": "Impossible de lire la specification : {error}",
34
+ "panel.drop.title": "Depose la specification ici",
35
+ "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
36
+ "panel.ingest.spec_attached": "Specification jointe : {filename}, {kb} KB",
37
+ "panel.ingest.read_label": "Lue.",
38
+ "panel.ingest.title_label": "Titre : {title}",
39
+ "panel.ingest.no_title": "(sans titre)",
40
+ "panel.ingest.format_label": "Format : {format} / {sections} section(s) / {kb} KB",
41
+ "panel.ingest.first_lines": "Premieres lignes :",
42
+ "panel.ingest.action_done": "Action {tool} terminee.",
43
+ "vault.modal.title": "Identifiants (vault)",
44
+ "vault.modal.aria.close": "Fermer la modale des identifiants",
45
+ "vault.tab.list": "Slots charges",
46
+ "vault.tab.add": "Ajouter",
47
+ "vault.list.loading": "Chargement...",
48
+ "vault.list.empty": "Tu n'as encore charge aucune cle. Clique sur \"Ajouter\" pour commencer.",
49
+ "vault.add.slot_label": "Nom du slot",
50
+ "vault.add.slot_hint": "Lettres minuscules, chiffres, soulignement, tiret. Doit commencer par une lettre.",
51
+ "vault.add.value_label": "Valeur en clair (masquee)",
52
+ "vault.add.value_hint": "Affichee une seule fois lors de la sauvegarde. Apres, tu peux la remplacer mais pas la relire.",
53
+ "vault.add.button_save": "Enregistrer",
54
+ "vault.add.button_cancel": "Annuler",
55
+ "vault.add.success": "Slot {slot} enregistre.",
56
+ "vault.add.overwrite": "Slot {slot} ecrase.",
57
+ "manual.intro": "Yujin Forge -- manuel utilisateur",
58
+ "manual.section.welcome": "Bienvenue",
59
+ "manual.section.install": "Installation",
60
+ "manual.section.first_run": "Premiere execution",
61
+ "manual.section.voice": "Commandes vocales",
62
+ "manual.section.spec_ingest": "Ingestion de specifications",
63
+ "manual.section.troubleshooting": "Depannage",
64
+ "manual.section.support": "Support",
65
+ "lang.name.es": "Espagnol",
66
+ "lang.name.en": "Anglais",
67
+ "lang.name.pt": "Portugais",
68
+ "lang.name.fr": "Francais",
69
+ "lang.name.ja": "Japonais",
70
+ "lang.name.zh": "Chinois",
71
+ "lang.name.hi": "Hindi",
72
+ "lang.name.ar": "Arabe",
73
+ "lang.name.de": "Allemand",
74
+ "lang.name.it": "Italien",
75
+ "recap.fallback_period": ".",
76
+ "recap.empty": "Il n'y a rien a resumer pour l'instant.",
77
+ "error_ui.severity.info": "INFO",
78
+ "error_ui.severity.warning": "ATTENTION",
79
+ "error_ui.severity.error": "ERREUR",
80
+ "error_ui.severity.fatal": "FATAL",
81
+ "error_ui.label.what": "Que s'est-il passe",
82
+ "error_ui.label.why": "Pourquoi",
83
+ "error_ui.label.fix": "Comment debloquer",
84
+ "error_ui.label.cmd": "Commande",
85
+ "error_ui.label.docs": "Docs locales",
86
+ "error_ui.label.retry": "Reessayer dans",
87
+ "error_ui.copy_btn": "Copier la commande",
88
+ "error_ui.unknown.what": "Forge a rencontre une erreur interne (code inconnu).",
89
+ "error_ui.unknown.why": "Le code {code} n'est pas dans le catalogue. C'est un bug.",
90
+ "error_ui.unknown.fix": "Ouvrez un issue sur https://github.com/yujinapp/yujin-forge/issues avec le code + le traceback.",
91
+ "error.cap_frontier_exhausted.what": "Cap mensuel de tokens du tier frontier epuise (gros modele).",
92
+ "error.cap_frontier_exhausted.why": "Votre plan {plan} permet jusqu'a {cap} tokens/mois en frontier. Vous avez utilise {used}. Reset au debut du prochain mois UTC.",
93
+ "error.cap_frontier_exhausted.fix": "Passez au BYOK Anthropic direct: ignore le cap mensuel du worker. Votre cout devient ce qu'Anthropic facture.",
94
+ "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
95
+ "error.cap_eco_exhausted.what": "Cap mensuel de tokens du tier eco epuise (petit modele).",
96
+ "error.cap_eco_exhausted.why": "Votre plan {plan} permet jusqu'a {cap} tokens/mois en eco. Vous avez utilise {used}. Reset au debut du prochain mois UTC.",
97
+ "error.cap_eco_exhausted.fix": "Passez au BYOK direct ou montez de plan. BYOK ignore le cap du worker.",
98
+ "error.cap_eco_exhausted.cmd": "yf brain config --eco-provider google_ai --eco-model gemini-2.5-flash-lite",
99
+ "error.tier_not_in_plan.what": "Le tier {tier} n'est pas active sur votre plan.",
100
+ "error.tier_not_in_plan.why": "Votre plan {plan} n'inclut pas le tier {tier}. Vous etes probablement en free-public ou votre licence a expire.",
101
+ "error.tier_not_in_plan.fix": "Activez une licence payante ou passez au BYOK direct (votre cout, sans cap du worker).",
102
+ "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
103
+ "error.response_truncated.what": "La reponse du modele a ete coupee avant la fin.",
104
+ "error.response_truncated.why": "Limite managed_max_tokens_per_turn = {limit} tokens atteinte en plein turn. Le modele a arrete de generer.",
105
+ "error.response_truncated.fix": "Augmentez la limite via yf limits. S'applique au prochain turn sans redemarrer le chat.",
106
+ "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
107
+ "error.response_truncated.banner": "[Reponse tronquee par max_tokens={max}. Augmentez la limite avec: yf limits set managed_max_tokens_per_turn {suggested}]",
108
+ "error.modal_trace_stale.what": "Le modal d'approbation a expire ou est orphelin.",
109
+ "error.modal_trace_stale.why": "Le trace_id {trace_id} n'a pas d'approval en attente dans le dispatcher. Probable race condition entre invoke et etat du panel, ou cancel precedent a laisse le trace zombie.",
110
+ "error.modal_trace_stale.fix": "Reinvoquez le verb depuis le chat: demarre un nouveau trace propre. Si ca persiste, lancez yf doctor pour verifier le panel.",
111
+ "error.modal_trace_stale.cmd": "yf doctor",
112
+ "error.byok_key_missing.what": "API key manquante pour le provider {provider}.",
113
+ "error.byok_key_missing.why": "Vous avez configure {provider} comme provider du tier {tier} mais le slot byok_{slot} n'est pas dans le Vault chiffre.",
114
+ "error.byok_key_missing.fix": "Configurez la key avec yf keys set (atomique, mode 0600, jamais journalise).",
115
+ "error.byok_key_missing.cmd": "yf keys set {slot}",
116
+ "error.worker_unreachable.what": "Impossible d'atteindre le worker yujin.app.",
117
+ "error.worker_unreachable.why": "Timeout reseau ou worker en panne (HTTP {status}). Reessaye {attempts} fois.",
118
+ "error.worker_unreachable.fix": "Verifiez votre internet. Si OK, passez temporairement au BYOK direct pour eviter la dependance au worker.",
119
+ "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
120
+ "error.vault_decrypt_failed.what": "Impossible de dechiffrer une cle du Vault.",
121
+ "error.vault_decrypt_failed.why": "La master key est incorrecte ou le fichier du Vault est corrompu. Peut arriver si vous avez deplace la config entre machines sans migrer la master ou par disk error.",
122
+ "error.vault_decrypt_failed.fix": "Recuperez la copie du serveur (rechiffre avec votre master locale) si vous avez le server backup actif.",
123
+ "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
124
+ "error.shell_exec_rejected.what": "Vous avez rejete le modal R8 de yujin.shell.exec.",
125
+ "error.shell_exec_rejected.why": "La commande {command} a ete classee comme {classification}. shell.exec demande toujours approbation par securite, meme si la commande est read-only.",
126
+ "error.shell_exec_rejected.fix": "Si la commande etait read-only (yf projects active, git status, ls), utilisez le verb natif equivalent. Si elle etait necessaire et vous avez rejete par erreur, reinvoquez.",
127
+ "error.project_not_registered.what": "Aucun projet adopter enregistre.",
128
+ "error.project_not_registered.why": "Le verb invoque necessite un project root actif mais ~/.yujin-forge/projects.json n'a pas d'entrees.",
129
+ "error.project_not_registered.fix": "Creez-en un avec yujin.project.init ou enregistrez un existant avec yf projects add.",
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "Agents",
132
+ "panel.agents.title": "Agents",
133
+ "panel.agents.subtitle": "Director et sous-agents enregistres dans ce projet",
134
+ "panel.agents.empty.title": "Aucun agent pour l'instant",
135
+ "panel.agents.empty.body": "Executez `yf agent install --defaults` pour enregistrer le Director et ses 4 sous-agents (Analyste, Coder, Tester, Scaffolder).",
136
+ "panel.agents.legend.eco": "Eco",
137
+ "panel.agents.legend.managed": "Managed",
138
+ "panel.agents.legend.frontier": "Frontier",
139
+ "panel.agents.status.disabled": "Runtime des agents non demarre",
140
+ "panel.agents.event.running": "En cours",
141
+ "panel.agents.event.idle": "En attente",
142
+ "panel.agents.tick.live": "Connecte",
143
+ "panel.agents.tick.lost": "Connexion perdue",
144
+ "workflow.phase.i": "Triage et intention",
145
+ "workflow.phase.ii": "Clarification (fonctionnel + 4 NFR + blocs)",
146
+ "workflow.phase.iii": "Specifications (RFP + Arch + Design + approbations)",
147
+ "workflow.phase.iv": "Bootstrap",
148
+ "workflow.phase.v": "Developpement par blocs",
149
+ "workflow.phase.vi": "Deploiement + post-lancement",
150
+ "wizard.title": "Bienvenue dans Yujin Forge",
151
+ "wizard.close": "Fermer",
152
+ "wizard.intro": "Pour commencer, choisissez comment Forge se connecte a votre modele IA. Vous pourrez modifier ce choix plus tard depuis Settings.",
153
+ "wizard.back": "Retour",
154
+ "wizard.start": "Commencer",
155
+ "wizard.plan.badge": "Recommande",
156
+ "wizard.plan.title": "Plan Claude",
157
+ "wizard.plan.desc": "Abonnement mensuel Claude. Option la moins chere pour usage regulier. Forge utilise votre session claude -p.",
158
+ "wizard.plan.price": "Forfait mensuel (Plan)",
159
+ "wizard.plan.step.title": "Connecter votre Plan Claude",
160
+ "wizard.plan.step.1": "Ouvrez un nouveau terminal.",
161
+ "wizard.plan.step.2": "Lancez la commande claude (sans arguments) et completez la connexion dans le navigateur.",
162
+ "wizard.plan.step.3": "Revenez ici et cliquez sur Je suis connecte pour verifier.",
163
+ "wizard.plan.done": "Je suis connecte",
164
+ "wizard.byok.title": "Cle API Console (BYOK)",
165
+ "wizard.byok.desc": "Votre propre cle Anthropic Console. Paiement a l usage. Plus flexible mais cout variable.",
166
+ "wizard.byok.price": "Paiement a l usage (Console)",
167
+ "wizard.byok.step.title": "Collez votre cle API Anthropic",
168
+ "wizard.byok.step.intro": "Votre cle commence par sk-ant- et est obtenue sur console.anthropic.com. Forge la stocke chiffree dans le Vault local; elle ne quitte jamais votre machine.",
169
+ "wizard.byok.test": "Valider et enregistrer",
170
+ "wizard.skip.title": "Je suis deja configure",
171
+ "wizard.skip.desc": "Sauter l assistant. Vous pourrez le rouvrir depuis Settings.",
172
+ "wizard.done.kanji": "Termine",
173
+ "wizard.done.title": "Termine",
174
+ "wizard.done.msg": "Forge est configure. Commencez a discuter.",
175
+ "pizarron.button.read": "Lire",
176
+ "pizarron.button.copy": "Copier",
177
+ "pizarron.button.edit": "Modifier",
178
+ "pizarron.graph.refresh": "Actualiser",
179
+ "pizarron.graph.regenerating": "Regeneration...",
180
+ "pizarron.graph.detail.hint": "Touchez un noeud pour le detail.",
181
+ "pizarron.graph.detail.empty": "Aucun detail pour ce noeud.",
182
+ "pizarron.graph.detail.weight": "poids",
183
+ "startup.tab.graph": "Graphe visuel",
184
+ "startup.tab.graphSem": "Graphe semantique",
185
+ "startup.tab.pendings": "En attente",
186
+ "startup.tab.workflow": "Workflow",
187
+ "settings.startupTabs": "Onglets a l'ouverture (graphe, en attente, workflow)",
188
+ "graph.term.nodes": "noeuds",
189
+ "graph.term.edges": "aretes",
190
+ "coding.read": "Lecture de {x}",
191
+ "coding.read_bare": "Lecture d'un fichier",
192
+ "coding.edit": "Modification de {x}",
193
+ "coding.edit_bare": "Modification d'un fichier",
194
+ "coding.write": "Ecriture de {x}",
195
+ "coding.write_bare": "Ecriture d'un fichier",
196
+ "coding.notebook_bare": "Modification du notebook",
197
+ "coding.bash": "Execution : {x}",
198
+ "coding.bash_bare": "Execution d'une commande",
199
+ "coding.grep": "Recherche \"{x}\"",
200
+ "coding.grep_bare": "Recherche dans le code",
201
+ "coding.glob": "Liste de {x}",
202
+ "coding.glob_bare": "Liste des fichiers",
203
+ "coding.web_bare": "Lecture du web",
204
+ "coding.websearch": "Recherche web : {x}",
205
+ "coding.websearch_bare": "Recherche web",
206
+ "coding.task": "Sous-agent : {x}",
207
+ "coding.task_bare": "Lancement d'un sous-agent",
208
+ "coding.todo": "Mise a jour de sa liste de taches",
209
+ "coding.verb_bare": "Execution d'un verbe yujin",
210
+ "panel.button.stop": "Arreter",
211
+ "panel.status.stopping": "Arret en cours...",
212
+ "panel.status.noActiveTurn": "Aucun tour n'etait en cours.",
213
+ "panel.status.interruptFailed": "Impossible d'envoyer l'interruption.",
214
+ "panel.status.turnInterrupted": "Tour interrompu.",
215
+ "panel.label.interrupted": "(interrompu)",
216
+ "panel.queue.label": "En file",
217
+ "panel.queue.remove": "Retirer de la file",
218
+ "panel.project.switchHint": "Changer de projet",
219
+ "panel.project.title": "Projets",
220
+ "panel.project.add": "Ajouter un projet...",
221
+ "panel.project.addPrompt": "Chemin absolu du projet a ajouter :",
222
+ "panel.project.switching": "Changement de projet..."
223
+ }