@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": "Voice-first development assistant",
5
- "panel.input.placeholder": "Ask Yujin",
6
- "panel.button.send": "Send",
7
- "panel.button.mic": "Speak (press and hold)",
8
- "panel.button.mic.recording": "Press to stop recording",
9
- "panel.button.tts": "Voice on",
10
- "panel.button.keys": "Keys",
11
- "panel.button.minimise": "Minimise",
12
- "panel.button.maximise": "Maximise",
13
- "panel.button.close": "Close",
14
- "panel.button.language": "Language",
15
- "panel.trace.title": "Action trace",
16
- "panel.trace.count.one": "{n} tool call",
17
- "panel.trace.count.other": "{n} tool calls",
18
- "panel.trace.empty.kanji": "空",
19
- "panel.trace.empty.body": "Yujin Forge shows every tool it invokes to answer you here: manifest reads, SPEC searches, component edits, document reads. Ask something that requires consulting them.",
20
- "panel.trace.badge.tool": "TOOL",
21
- "panel.trace.badge.voice": "VOICE",
22
- "panel.trace.badge.error": "ERROR",
23
- "panel.stream.empty.kanji": "侑仁",
24
- "panel.stream.empty.body": "Yujin Forge online. Ask for changes to the project.",
25
- "panel.status.no_audio": "No audio captured. The microphone probably did not pick up anything.",
26
- "panel.status.did_not_catch": "Did not catch that. Try again.",
27
- "panel.status.mic_denied": "Microphone permission denied or unavailable: {error}",
28
- "panel.status.voice_failed": "Voice failed: {error}",
29
- "panel.status.voice_reply_failed": "Could not play the reply: {error}",
30
- "panel.status.audio_play_error": "Could not play the audio: {error}",
31
- "panel.status.reading": "Reading {filename}...",
32
- "panel.status.ingest_failed": "Ingest failed: {error}",
33
- "panel.status.read_failed": "Could not read the specification: {error}",
34
- "panel.drop.title": "Drop the specification here",
35
- "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
36
- "panel.ingest.spec_attached": "Spec attached: {filename}, {kb} KB",
37
- "panel.ingest.read_label": "Read.",
38
- "panel.ingest.title_label": "Title: {title}",
39
- "panel.ingest.no_title": "(no title)",
40
- "panel.ingest.format_label": "Format: {format} / {sections} section(s) / {kb} KB",
41
- "panel.ingest.first_lines": "First lines:",
42
- "panel.ingest.action_done": "Action {tool} completed.",
43
- "vault.modal.aria.close": "Close credentials modal",
44
- "vault.modal.title": "Credentials (vault)",
45
- "vault.tab.list": "Loaded slots",
46
- "vault.tab.add": "Add",
47
- "vault.list.loading": "Loading...",
48
- "vault.list.empty": "You have not loaded any key yet. Click \"Add\" to start.",
49
- "vault.add.slot_label": "Slot name",
50
- "vault.add.slot_hint": "Lowercase letters, digits, underscore, hyphen. Must start with a letter.",
51
- "vault.add.value_label": "Plaintext value (masked)",
52
- "vault.add.value_hint": "Shown only once at save. After that you can replace it but not read it back.",
53
- "vault.add.button_save": "Save",
54
- "vault.add.button_cancel": "Cancel",
55
- "vault.add.success": "Slot {slot} saved.",
56
- "vault.add.overwrite": "Slot {slot} overwritten.",
57
- "manual.intro": "Yujin Forge -- user manual",
58
- "manual.section.welcome": "Welcome",
59
- "manual.section.install": "Installation",
60
- "manual.section.first_run": "First run",
61
- "manual.section.voice": "Voice commands",
62
- "manual.section.spec_ingest": "Specification ingest",
63
- "manual.section.troubleshooting": "Troubleshooting",
64
- "manual.section.support": "Support",
65
- "lang.name.es": "Spanish",
66
- "lang.name.en": "English",
67
- "lang.name.pt": "Portuguese",
68
- "lang.name.fr": "French",
69
- "lang.name.ja": "Japanese",
70
- "lang.name.zh": "Chinese",
71
- "lang.name.hi": "Hindi",
72
- "lang.name.ar": "Arabic",
73
- "lang.name.de": "German",
74
- "lang.name.it": "Italian",
75
- "recap.fallback_period": ".",
76
- "recap.empty": "There is nothing to recap yet.",
77
- "error_ui.severity.info": "INFO",
78
- "error_ui.severity.warning": "WARNING",
79
- "error_ui.severity.error": "ERROR",
80
- "error_ui.severity.fatal": "FATAL",
81
- "error_ui.label.what": "What happened",
82
- "error_ui.label.why": "Why",
83
- "error_ui.label.fix": "How to fix",
84
- "error_ui.label.cmd": "Command",
85
- "error_ui.label.docs": "Local docs",
86
- "error_ui.label.retry": "Retry in",
87
- "error_ui.copy_btn": "Copy command",
88
- "error_ui.unknown.what": "Forge encountered an internal error (unknown code).",
89
- "error_ui.unknown.why": "The code {code} is not in the catalog. This is a bug.",
90
- "error_ui.unknown.fix": "Open an issue at https://github.com/yujinapp/yujin-forge/issues with the code + the traceback.",
91
- "error.cap_frontier_exhausted.what": "Monthly frontier tier token cap reached (large model).",
92
- "error.cap_frontier_exhausted.why": "Your plan {plan} allows up to {cap} tokens/month on frontier. You used {used}. Resets at the start of the next UTC month.",
93
- "error.cap_frontier_exhausted.fix": "Switch to direct Anthropic BYOK: bypasses the worker monthly cap. Your cost becomes whatever Anthropic charges directly.",
94
- "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
95
- "error.cap_eco_exhausted.what": "Monthly eco tier token cap reached (small model).",
96
- "error.cap_eco_exhausted.why": "Your plan {plan} allows up to {cap} tokens/month on eco. You used {used}. Resets at the start of the next UTC month.",
97
- "error.cap_eco_exhausted.fix": "Switch to direct BYOK or upgrade your plan. BYOK bypasses the worker cap.",
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": "Tier {tier} is not enabled on your plan.",
100
- "error.tier_not_in_plan.why": "Your plan {plan} does not include the {tier} tier. You are probably on free-public or your license expired.",
101
- "error.tier_not_in_plan.fix": "Activate a paid license, or switch to direct BYOK (your cost, no worker cap).",
102
- "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
103
- "error.response_truncated.what": "The model response was cut off before finishing.",
104
- "error.response_truncated.why": "The managed_max_tokens_per_turn = {limit} tokens limit was reached mid-turn. The model stopped generating.",
105
- "error.response_truncated.fix": "Raise the limit via yf limits. Applies to the next turn without restarting the chat.",
106
- "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
107
- "error.response_truncated.banner": "[Response truncated by max_tokens={max}. Raise the limit with: yf limits set managed_max_tokens_per_turn {suggested}]",
108
- "error.modal_trace_stale.what": "The approval modal expired or is orphaned.",
109
- "error.modal_trace_stale.why": "Trace_id {trace_id} has no pending approval in the dispatcher. Likely race condition between invoke and panel state, or a previous cancel left the trace zombie.",
110
- "error.modal_trace_stale.fix": "Retry the verb from chat: starts a fresh trace. If it persists, run yf doctor to check the panel.",
111
- "error.modal_trace_stale.cmd": "yf doctor",
112
- "error.byok_key_missing.what": "Missing API key for provider {provider}.",
113
- "error.byok_key_missing.why": "You configured {provider} as the {tier} tier provider but the byok_{slot} slot is not in the encrypted Vault.",
114
- "error.byok_key_missing.fix": "Configure the key with yf keys set (atomic, mode 0600, never logged).",
115
- "error.byok_key_missing.cmd": "yf keys set {slot}",
116
- "error.worker_unreachable.what": "Could not reach the yujin.app worker.",
117
- "error.worker_unreachable.why": "Network timeout or worker down (HTTP {status}). Retried {attempts} times.",
118
- "error.worker_unreachable.fix": "Check your internet. If it is OK, switch temporarily to direct BYOK to avoid the worker dependency.",
119
- "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
120
- "error.vault_decrypt_failed.what": "Could not decrypt a key from the Vault.",
121
- "error.vault_decrypt_failed.why": "The master key is incorrect or the Vault file is corrupted. Can happen if you moved config between machines without migrating the master, or due to disk error.",
122
- "error.vault_decrypt_failed.fix": "Pull the server copy (re-encrypts with your local master) if you have server backup active.",
123
- "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
124
- "error.shell_exec_rejected.what": "You rejected the R8 modal for yujin.shell.exec.",
125
- "error.shell_exec_rejected.why": "Command {command} was classified as {classification}. shell.exec always asks for approval for safety, even if the command is read-only.",
126
- "error.shell_exec_rejected.fix": "If the command was read-only (yf projects active, git status, ls), use the equivalent native verb. If it was needed and you rejected by mistake, re-invoke.",
127
- "error.project_not_registered.what": "No adopter project registered.",
128
- "error.project_not_registered.why": "The verb you invoked needs an active project root but ~/.yujin-forge/projects.json has no entries.",
129
- "error.project_not_registered.fix": "Create one with yujin.project.init or register an existing one with 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 and sub-agents registered in this project",
134
- "panel.agents.empty.title": "No agents yet",
135
- "panel.agents.empty.body": "Run `yf agent install --defaults` to register the Director and its 4 sub-agents (Analyst, 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": "Agent runtime not started",
140
- "panel.agents.event.running": "Running",
141
- "panel.agents.event.idle": "Idle",
142
- "panel.agents.tick.live": "Connected",
143
- "panel.agents.tick.lost": "Connection lost",
144
- "workflow.phase.i": "Triage and intent",
145
- "workflow.phase.ii": "Clarification (functional + 4 NFR + blocks)",
146
- "workflow.phase.iii": "Specs (RFP + Arch + Design + approvals)",
147
- "workflow.phase.iv": "Bootstrap",
148
- "workflow.phase.v": "Block development",
149
- "workflow.phase.vi": "Deploy + post-launch",
150
- "wizard.title": "Welcome to Yujin Forge",
151
- "wizard.close": "Close",
152
- "wizard.intro": "To get started, choose how Forge connects to your AI model. You can change this later from Settings.",
153
- "wizard.back": "Back",
154
- "wizard.start": "Get started",
155
- "wizard.plan.badge": "Recommended",
156
- "wizard.plan.title": "Claude Plan",
157
- "wizard.plan.desc": "Monthly Claude subscription. Cheapest option for steady use. Forge uses your claude -p session.",
158
- "wizard.plan.price": "Flat monthly fee (Plan)",
159
- "wizard.plan.step.title": "Connect your Claude Plan",
160
- "wizard.plan.step.1": "Open a new terminal.",
161
- "wizard.plan.step.2": "Run the command claude (no args) and complete the browser login.",
162
- "wizard.plan.step.3": "Come back here and click I am logged in to verify.",
163
- "wizard.plan.done": "I am logged in",
164
- "wizard.byok.title": "Console API key (BYOK)",
165
- "wizard.byok.desc": "Your own Anthropic Console key. Pay per use. More flexible but cost varies.",
166
- "wizard.byok.price": "Pay-per-use (Console)",
167
- "wizard.byok.step.title": "Paste your Anthropic API key",
168
- "wizard.byok.step.intro": "Your key starts with sk-ant- and is obtained at console.anthropic.com. Forge stores it encrypted in the local Vault; it never leaves your machine.",
169
- "wizard.byok.test": "Validate and save",
170
- "wizard.skip.title": "I am already set up",
171
- "wizard.skip.desc": "Skip the wizard. You can open it again later from Settings.",
172
- "wizard.done.kanji": "Done",
173
- "wizard.done.title": "Done",
174
- "wizard.done.msg": "Forge is set up. Start chatting.",
175
- "pizarron.button.read": "Read aloud",
176
- "pizarron.button.copy": "Copy",
177
- "pizarron.button.edit": "Edit",
178
- "pizarron.graph.refresh": "Refresh",
179
- "pizarron.graph.regenerating": "Regenerating...",
180
- "pizarron.graph.detail.hint": "Tap a node to see its detail.",
181
- "pizarron.graph.detail.empty": "No detail for this node.",
182
- "pizarron.graph.detail.weight": "weight",
183
- "startup.tab.graph": "Visual graph",
184
- "startup.tab.graphSem": "Semantic graph",
185
- "startup.tab.pendings": "Pendings",
186
- "startup.tab.workflow": "Workflow",
187
- "settings.startupTabs": "Tabs on open (graph, pendings, workflow)",
188
- "graph.term.nodes": "nodes",
189
- "graph.term.edges": "edges",
190
- "coding.read": "Reading {x}",
191
- "coding.read_bare": "Reading a file",
192
- "coding.edit": "Editing {x}",
193
- "coding.edit_bare": "Editing a file",
194
- "coding.write": "Writing {x}",
195
- "coding.write_bare": "Writing a file",
196
- "coding.notebook_bare": "Editing notebook",
197
- "coding.bash": "Running: {x}",
198
- "coding.bash_bare": "Running a command",
199
- "coding.grep": "Searching \"{x}\"",
200
- "coding.grep_bare": "Searching the code",
201
- "coding.glob": "Listing {x}",
202
- "coding.glob_bare": "Listing files",
203
- "coding.web_bare": "Reading the web",
204
- "coding.websearch": "Searching the web: {x}",
205
- "coding.websearch_bare": "Searching the web",
206
- "coding.task": "Sub-agent: {x}",
207
- "coding.task_bare": "Launching a sub-agent",
208
- "coding.todo": "Updating its task list",
209
- "coding.verb_bare": "Running a yujin verb"
210
- }
1
+ {
2
+ "panel.brand": "Yujin Forge",
3
+ "panel.brand.kanji": "侑",
4
+ "panel.tagline": "Voice-first development assistant",
5
+ "panel.input.placeholder": "Ask Yujin",
6
+ "panel.button.send": "Send",
7
+ "panel.button.mic": "Speak (press and hold)",
8
+ "panel.button.mic.recording": "Press to stop recording",
9
+ "panel.button.tts": "Voice on",
10
+ "panel.button.keys": "Keys",
11
+ "panel.button.minimise": "Minimise",
12
+ "panel.button.maximise": "Maximise",
13
+ "panel.button.close": "Close",
14
+ "panel.button.language": "Language",
15
+ "panel.trace.title": "Action trace",
16
+ "panel.trace.count.one": "{n} tool call",
17
+ "panel.trace.count.other": "{n} tool calls",
18
+ "panel.trace.empty.kanji": "空",
19
+ "panel.trace.empty.body": "Yujin Forge shows every tool it invokes to answer you here: manifest reads, SPEC searches, component edits, document reads. Ask something that requires consulting them.",
20
+ "panel.trace.badge.tool": "TOOL",
21
+ "panel.trace.badge.voice": "VOICE",
22
+ "panel.trace.badge.error": "ERROR",
23
+ "panel.stream.empty.kanji": "侑仁",
24
+ "panel.stream.empty.body": "Yujin Forge online. Ask for changes to the project.",
25
+ "panel.status.no_audio": "No audio captured. The microphone probably did not pick up anything.",
26
+ "panel.status.did_not_catch": "Did not catch that. Try again.",
27
+ "panel.status.mic_denied": "Microphone permission denied or unavailable: {error}",
28
+ "panel.status.voice_failed": "Voice failed: {error}",
29
+ "panel.status.voice_reply_failed": "Could not play the reply: {error}",
30
+ "panel.status.audio_play_error": "Could not play the audio: {error}",
31
+ "panel.status.reading": "Reading {filename}...",
32
+ "panel.status.ingest_failed": "Ingest failed: {error}",
33
+ "panel.status.read_failed": "Could not read the specification: {error}",
34
+ "panel.drop.title": "Drop the specification here",
35
+ "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
36
+ "panel.ingest.spec_attached": "Spec attached: {filename}, {kb} KB",
37
+ "panel.ingest.read_label": "Read.",
38
+ "panel.ingest.title_label": "Title: {title}",
39
+ "panel.ingest.no_title": "(no title)",
40
+ "panel.ingest.format_label": "Format: {format} / {sections} section(s) / {kb} KB",
41
+ "panel.ingest.first_lines": "First lines:",
42
+ "panel.ingest.action_done": "Action {tool} completed.",
43
+ "vault.modal.aria.close": "Close credentials modal",
44
+ "vault.modal.title": "Credentials (vault)",
45
+ "vault.tab.list": "Loaded slots",
46
+ "vault.tab.add": "Add",
47
+ "vault.list.loading": "Loading...",
48
+ "vault.list.empty": "You have not loaded any key yet. Click \"Add\" to start.",
49
+ "vault.add.slot_label": "Slot name",
50
+ "vault.add.slot_hint": "Lowercase letters, digits, underscore, hyphen. Must start with a letter.",
51
+ "vault.add.value_label": "Plaintext value (masked)",
52
+ "vault.add.value_hint": "Shown only once at save. After that you can replace it but not read it back.",
53
+ "vault.add.button_save": "Save",
54
+ "vault.add.button_cancel": "Cancel",
55
+ "vault.add.success": "Slot {slot} saved.",
56
+ "vault.add.overwrite": "Slot {slot} overwritten.",
57
+ "manual.intro": "Yujin Forge -- user manual",
58
+ "manual.section.welcome": "Welcome",
59
+ "manual.section.install": "Installation",
60
+ "manual.section.first_run": "First run",
61
+ "manual.section.voice": "Voice commands",
62
+ "manual.section.spec_ingest": "Specification ingest",
63
+ "manual.section.troubleshooting": "Troubleshooting",
64
+ "manual.section.support": "Support",
65
+ "lang.name.es": "Spanish",
66
+ "lang.name.en": "English",
67
+ "lang.name.pt": "Portuguese",
68
+ "lang.name.fr": "French",
69
+ "lang.name.ja": "Japanese",
70
+ "lang.name.zh": "Chinese",
71
+ "lang.name.hi": "Hindi",
72
+ "lang.name.ar": "Arabic",
73
+ "lang.name.de": "German",
74
+ "lang.name.it": "Italian",
75
+ "recap.fallback_period": ".",
76
+ "recap.empty": "There is nothing to recap yet.",
77
+ "error_ui.severity.info": "INFO",
78
+ "error_ui.severity.warning": "WARNING",
79
+ "error_ui.severity.error": "ERROR",
80
+ "error_ui.severity.fatal": "FATAL",
81
+ "error_ui.label.what": "What happened",
82
+ "error_ui.label.why": "Why",
83
+ "error_ui.label.fix": "How to fix",
84
+ "error_ui.label.cmd": "Command",
85
+ "error_ui.label.docs": "Local docs",
86
+ "error_ui.label.retry": "Retry in",
87
+ "error_ui.copy_btn": "Copy command",
88
+ "error_ui.unknown.what": "Forge encountered an internal error (unknown code).",
89
+ "error_ui.unknown.why": "The code {code} is not in the catalog. This is a bug.",
90
+ "error_ui.unknown.fix": "Open an issue at https://github.com/yujinapp/yujin-forge/issues with the code + the traceback.",
91
+ "error.cap_frontier_exhausted.what": "Monthly frontier tier token cap reached (large model).",
92
+ "error.cap_frontier_exhausted.why": "Your plan {plan} allows up to {cap} tokens/month on frontier. You used {used}. Resets at the start of the next UTC month.",
93
+ "error.cap_frontier_exhausted.fix": "Switch to direct Anthropic BYOK: bypasses the worker monthly cap. Your cost becomes whatever Anthropic charges directly.",
94
+ "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
95
+ "error.cap_eco_exhausted.what": "Monthly eco tier token cap reached (small model).",
96
+ "error.cap_eco_exhausted.why": "Your plan {plan} allows up to {cap} tokens/month on eco. You used {used}. Resets at the start of the next UTC month.",
97
+ "error.cap_eco_exhausted.fix": "Switch to direct BYOK or upgrade your plan. BYOK bypasses the worker cap.",
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": "Tier {tier} is not enabled on your plan.",
100
+ "error.tier_not_in_plan.why": "Your plan {plan} does not include the {tier} tier. You are probably on free-public or your license expired.",
101
+ "error.tier_not_in_plan.fix": "Activate a paid license, or switch to direct BYOK (your cost, no worker cap).",
102
+ "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
103
+ "error.response_truncated.what": "The model response was cut off before finishing.",
104
+ "error.response_truncated.why": "The managed_max_tokens_per_turn = {limit} tokens limit was reached mid-turn. The model stopped generating.",
105
+ "error.response_truncated.fix": "Raise the limit via yf limits. Applies to the next turn without restarting the chat.",
106
+ "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
107
+ "error.response_truncated.banner": "[Response truncated by max_tokens={max}. Raise the limit with: yf limits set managed_max_tokens_per_turn {suggested}]",
108
+ "error.modal_trace_stale.what": "The approval modal expired or is orphaned.",
109
+ "error.modal_trace_stale.why": "Trace_id {trace_id} has no pending approval in the dispatcher. Likely race condition between invoke and panel state, or a previous cancel left the trace zombie.",
110
+ "error.modal_trace_stale.fix": "Retry the verb from chat: starts a fresh trace. If it persists, run yf doctor to check the panel.",
111
+ "error.modal_trace_stale.cmd": "yf doctor",
112
+ "error.byok_key_missing.what": "Missing API key for provider {provider}.",
113
+ "error.byok_key_missing.why": "You configured {provider} as the {tier} tier provider but the byok_{slot} slot is not in the encrypted Vault.",
114
+ "error.byok_key_missing.fix": "Configure the key with yf keys set (atomic, mode 0600, never logged).",
115
+ "error.byok_key_missing.cmd": "yf keys set {slot}",
116
+ "error.worker_unreachable.what": "Could not reach the yujin.app worker.",
117
+ "error.worker_unreachable.why": "Network timeout or worker down (HTTP {status}). Retried {attempts} times.",
118
+ "error.worker_unreachable.fix": "Check your internet. If it is OK, switch temporarily to direct BYOK to avoid the worker dependency.",
119
+ "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
120
+ "error.vault_decrypt_failed.what": "Could not decrypt a key from the Vault.",
121
+ "error.vault_decrypt_failed.why": "The master key is incorrect or the Vault file is corrupted. Can happen if you moved config between machines without migrating the master, or due to disk error.",
122
+ "error.vault_decrypt_failed.fix": "Pull the server copy (re-encrypts with your local master) if you have server backup active.",
123
+ "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
124
+ "error.shell_exec_rejected.what": "You rejected the R8 modal for yujin.shell.exec.",
125
+ "error.shell_exec_rejected.why": "Command {command} was classified as {classification}. shell.exec always asks for approval for safety, even if the command is read-only.",
126
+ "error.shell_exec_rejected.fix": "If the command was read-only (yf projects active, git status, ls), use the equivalent native verb. If it was needed and you rejected by mistake, re-invoke.",
127
+ "error.project_not_registered.what": "No adopter project registered.",
128
+ "error.project_not_registered.why": "The verb you invoked needs an active project root but ~/.yujin-forge/projects.json has no entries.",
129
+ "error.project_not_registered.fix": "Create one with yujin.project.init or register an existing one with 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 and sub-agents registered in this project",
134
+ "panel.agents.empty.title": "No agents yet",
135
+ "panel.agents.empty.body": "Run `yf agent install --defaults` to register the Director and its 4 sub-agents (Analyst, 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": "Agent runtime not started",
140
+ "panel.agents.event.running": "Running",
141
+ "panel.agents.event.idle": "Idle",
142
+ "panel.agents.tick.live": "Connected",
143
+ "panel.agents.tick.lost": "Connection lost",
144
+ "workflow.phase.i": "Triage and intent",
145
+ "workflow.phase.ii": "Clarification (functional + 4 NFR + blocks)",
146
+ "workflow.phase.iii": "Specs (RFP + Arch + Design + approvals)",
147
+ "workflow.phase.iv": "Bootstrap",
148
+ "workflow.phase.v": "Block development",
149
+ "workflow.phase.vi": "Deploy + post-launch",
150
+ "wizard.title": "Welcome to Yujin Forge",
151
+ "wizard.close": "Close",
152
+ "wizard.intro": "To get started, choose how Forge connects to your AI model. You can change this later from Settings.",
153
+ "wizard.back": "Back",
154
+ "wizard.start": "Get started",
155
+ "wizard.plan.badge": "Recommended",
156
+ "wizard.plan.title": "Claude Plan",
157
+ "wizard.plan.desc": "Monthly Claude subscription. Cheapest option for steady use. Forge uses your claude -p session.",
158
+ "wizard.plan.price": "Flat monthly fee (Plan)",
159
+ "wizard.plan.step.title": "Connect your Claude Plan",
160
+ "wizard.plan.step.1": "Open a new terminal.",
161
+ "wizard.plan.step.2": "Run the command claude (no args) and complete the browser login.",
162
+ "wizard.plan.step.3": "Come back here and click I am logged in to verify.",
163
+ "wizard.plan.done": "I am logged in",
164
+ "wizard.byok.title": "Console API key (BYOK)",
165
+ "wizard.byok.desc": "Your own Anthropic Console key. Pay per use. More flexible but cost varies.",
166
+ "wizard.byok.price": "Pay-per-use (Console)",
167
+ "wizard.byok.step.title": "Paste your Anthropic API key",
168
+ "wizard.byok.step.intro": "Your key starts with sk-ant- and is obtained at console.anthropic.com. Forge stores it encrypted in the local Vault; it never leaves your machine.",
169
+ "wizard.byok.test": "Validate and save",
170
+ "wizard.skip.title": "I am already set up",
171
+ "wizard.skip.desc": "Skip the wizard. You can open it again later from Settings.",
172
+ "wizard.done.kanji": "Done",
173
+ "wizard.done.title": "Done",
174
+ "wizard.done.msg": "Forge is set up. Start chatting.",
175
+ "pizarron.button.read": "Read aloud",
176
+ "pizarron.button.copy": "Copy",
177
+ "pizarron.button.edit": "Edit",
178
+ "pizarron.graph.refresh": "Refresh",
179
+ "pizarron.graph.regenerating": "Regenerating...",
180
+ "pizarron.graph.detail.hint": "Tap a node to see its detail.",
181
+ "pizarron.graph.detail.empty": "No detail for this node.",
182
+ "pizarron.graph.detail.weight": "weight",
183
+ "startup.tab.graph": "Visual graph",
184
+ "startup.tab.graphSem": "Semantic graph",
185
+ "startup.tab.pendings": "Pendings",
186
+ "startup.tab.workflow": "Workflow",
187
+ "settings.startupTabs": "Tabs on open (graph, pendings, workflow)",
188
+ "graph.term.nodes": "nodes",
189
+ "graph.term.edges": "edges",
190
+ "coding.read": "Reading {x}",
191
+ "coding.read_bare": "Reading a file",
192
+ "coding.edit": "Editing {x}",
193
+ "coding.edit_bare": "Editing a file",
194
+ "coding.write": "Writing {x}",
195
+ "coding.write_bare": "Writing a file",
196
+ "coding.notebook_bare": "Editing notebook",
197
+ "coding.bash": "Running: {x}",
198
+ "coding.bash_bare": "Running a command",
199
+ "coding.grep": "Searching \"{x}\"",
200
+ "coding.grep_bare": "Searching the code",
201
+ "coding.glob": "Listing {x}",
202
+ "coding.glob_bare": "Listing files",
203
+ "coding.web_bare": "Reading the web",
204
+ "coding.websearch": "Searching the web: {x}",
205
+ "coding.websearch_bare": "Searching the web",
206
+ "coding.task": "Sub-agent: {x}",
207
+ "coding.task_bare": "Launching a sub-agent",
208
+ "coding.todo": "Updating its task list",
209
+ "coding.verb_bare": "Running a yujin verb",
210
+ "panel.button.stop": "Stop",
211
+ "panel.status.stopping": "Stopping...",
212
+ "panel.status.noActiveTurn": "There was no turn in progress.",
213
+ "panel.status.interruptFailed": "Could not send the interruption.",
214
+ "panel.status.turnInterrupted": "Turn interrupted.",
215
+ "panel.label.interrupted": "(interrupted)",
216
+ "panel.queue.label": "Queued",
217
+ "panel.queue.remove": "Remove from queue",
218
+ "panel.project.switchHint": "Switch project",
219
+ "panel.project.title": "Projects",
220
+ "panel.project.add": "Add project...",
221
+ "panel.project.addPrompt": "Absolute path of the project to add:",
222
+ "panel.project.switching": "Switching project..."
223
+ }