@nac3/forge-cli 0.2.0-alpha.59z.123 → 0.2.0-alpha.59z.158

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 (154) hide show
  1. package/dist/agents/bridge.d.ts +69 -0
  2. package/dist/agents/bridge.d.ts.map +1 -0
  3. package/dist/agents/bridge.js +295 -0
  4. package/dist/agents/bridge.js.map +1 -0
  5. package/dist/agents/cli_real.d.ts +38 -0
  6. package/dist/agents/cli_real.d.ts.map +1 -0
  7. package/dist/agents/cli_real.js +46 -0
  8. package/dist/agents/cli_real.js.map +1 -0
  9. package/dist/agents/config_schema.d.ts +1 -1
  10. package/dist/agents/config_schema.d.ts.map +1 -1
  11. package/dist/agents/config_schema.js +16 -0
  12. package/dist/agents/config_schema.js.map +1 -1
  13. package/dist/agents/defaults.d.ts.map +1 -1
  14. package/dist/agents/defaults.js.map +1 -1
  15. package/dist/agents/delegate.d.ts +36 -0
  16. package/dist/agents/delegate.d.ts.map +1 -0
  17. package/dist/agents/delegate.js +68 -0
  18. package/dist/agents/delegate.js.map +1 -0
  19. package/dist/agents/iterative_step.d.ts +95 -0
  20. package/dist/agents/iterative_step.d.ts.map +1 -0
  21. package/dist/agents/iterative_step.js +249 -0
  22. package/dist/agents/iterative_step.js.map +1 -0
  23. package/dist/agents/llm_step.d.ts +50 -0
  24. package/dist/agents/llm_step.d.ts.map +1 -0
  25. package/dist/agents/llm_step.js +28 -0
  26. package/dist/agents/llm_step.js.map +1 -0
  27. package/dist/agents/real_step_factory.d.ts +95 -0
  28. package/dist/agents/real_step_factory.d.ts.map +1 -0
  29. package/dist/agents/real_step_factory.js +51 -0
  30. package/dist/agents/real_step_factory.js.map +1 -0
  31. package/dist/agents/runner.d.ts +14 -0
  32. package/dist/agents/runner.d.ts.map +1 -1
  33. package/dist/agents/runner.js +10 -1
  34. package/dist/agents/runner.js.map +1 -1
  35. package/dist/agents/runtime.d.ts +115 -0
  36. package/dist/agents/runtime.d.ts.map +1 -0
  37. package/dist/agents/runtime.js +429 -0
  38. package/dist/agents/runtime.js.map +1 -0
  39. package/dist/agents/system_prompt.d.ts +36 -0
  40. package/dist/agents/system_prompt.d.ts.map +1 -0
  41. package/dist/agents/system_prompt.js +101 -0
  42. package/dist/agents/system_prompt.js.map +1 -0
  43. package/dist/agents/types.d.ts +12 -1
  44. package/dist/agents/types.d.ts.map +1 -1
  45. package/dist/agents/types.js.map +1 -1
  46. package/dist/bin/yf.d.ts.map +1 -1
  47. package/dist/bin/yf.js +9 -0
  48. package/dist/bin/yf.js.map +1 -1
  49. package/dist/chat/claude_cli.d.ts +42 -0
  50. package/dist/chat/claude_cli.d.ts.map +1 -0
  51. package/dist/chat/claude_cli.js +299 -0
  52. package/dist/chat/claude_cli.js.map +1 -0
  53. package/dist/chat/graph_snapshot.d.ts +38 -0
  54. package/dist/chat/graph_snapshot.d.ts.map +1 -0
  55. package/dist/chat/graph_snapshot.js +159 -0
  56. package/dist/chat/graph_snapshot.js.map +1 -0
  57. package/dist/chat/ingest_session.d.ts +24 -4
  58. package/dist/chat/ingest_session.d.ts.map +1 -1
  59. package/dist/chat/ingest_session.js +139 -4
  60. package/dist/chat/ingest_session.js.map +1 -1
  61. package/dist/chat/panel.d.ts.map +1 -1
  62. package/dist/chat/panel.js +1358 -0
  63. package/dist/chat/panel.js.map +1 -1
  64. package/dist/chat/server.d.ts +21 -0
  65. package/dist/chat/server.d.ts.map +1 -1
  66. package/dist/chat/server.js +904 -4
  67. package/dist/chat/server.js.map +1 -1
  68. package/dist/chat/tools/nac3_invoke.d.ts +5 -0
  69. package/dist/chat/tools/nac3_invoke.d.ts.map +1 -1
  70. package/dist/chat/tools/nac3_invoke.js +1 -0
  71. package/dist/chat/tools/nac3_invoke.js.map +1 -1
  72. package/dist/chat/tools.d.ts.map +1 -1
  73. package/dist/chat/tools.js +12 -0
  74. package/dist/chat/tools.js.map +1 -1
  75. package/dist/commands/agent.d.ts +12 -1
  76. package/dist/commands/agent.d.ts.map +1 -1
  77. package/dist/commands/agent.js +92 -1
  78. package/dist/commands/agent.js.map +1 -1
  79. package/dist/commands/chat.d.ts +10 -0
  80. package/dist/commands/chat.d.ts.map +1 -1
  81. package/dist/commands/chat.js +12 -1
  82. package/dist/commands/chat.js.map +1 -1
  83. package/dist/commands/director.d.ts +37 -0
  84. package/dist/commands/director.d.ts.map +1 -0
  85. package/dist/commands/director.js +290 -0
  86. package/dist/commands/director.js.map +1 -0
  87. package/dist/core/pilot_setup.d.ts +14 -1
  88. package/dist/core/pilot_setup.d.ts.map +1 -1
  89. package/dist/core/pilot_setup.js +62 -1
  90. package/dist/core/pilot_setup.js.map +1 -1
  91. package/dist/design/yujin_design_resolver.d.ts +77 -0
  92. package/dist/design/yujin_design_resolver.d.ts.map +1 -0
  93. package/dist/design/yujin_design_resolver.js +113 -0
  94. package/dist/design/yujin_design_resolver.js.map +1 -0
  95. package/dist/docs/doctrine/default-design-system.md +120 -0
  96. package/dist/docs/doctrine/language-sovereignty.md +143 -0
  97. package/dist/docs/doctrine/testing-policy.md +211 -0
  98. package/dist/nac3/approval_queue.d.ts +8 -0
  99. package/dist/nac3/approval_queue.d.ts.map +1 -1
  100. package/dist/nac3/approval_queue.js.map +1 -1
  101. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  102. package/dist/nac3/internal_manifest.js +178 -0
  103. package/dist/nac3/internal_manifest.js.map +1 -1
  104. package/dist/office/excel.d.ts +22 -0
  105. package/dist/office/excel.d.ts.map +1 -1
  106. package/dist/office/excel.js +82 -0
  107. package/dist/office/excel.js.map +1 -1
  108. package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
  109. package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
  110. package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
  111. package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
  112. package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
  113. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
  114. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
  115. package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
  116. package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
  117. package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
  118. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
  119. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
  120. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
  121. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
  122. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
  123. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
  124. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
  125. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
  126. package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
  127. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
  128. package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
  129. package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
  130. package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
  131. package/dist/version.d.ts +1 -1
  132. package/dist/version.js +1 -1
  133. package/dist/workflow/graph.d.ts +59 -0
  134. package/dist/workflow/graph.d.ts.map +1 -0
  135. package/dist/workflow/graph.js +137 -0
  136. package/dist/workflow/graph.js.map +1 -0
  137. package/dist/workflow/state.d.ts +34 -0
  138. package/dist/workflow/state.d.ts.map +1 -1
  139. package/dist/workflow/state.js.map +1 -1
  140. package/docs/doctrine/default-design-system.md +120 -0
  141. package/docs/doctrine/language-sovereignty.md +143 -0
  142. package/docs/doctrine/testing-policy.md +211 -0
  143. package/package.json +102 -100
  144. package/src/i18n/catalogs/ar.json +20 -1
  145. package/src/i18n/catalogs/de.json +20 -1
  146. package/src/i18n/catalogs/en.json +20 -21
  147. package/src/i18n/catalogs/es.json +20 -21
  148. package/src/i18n/catalogs/fr.json +20 -1
  149. package/src/i18n/catalogs/hi.json +20 -1
  150. package/src/i18n/catalogs/it.json +20 -1
  151. package/src/i18n/catalogs/ja.json +20 -1
  152. package/src/i18n/catalogs/pt.json +20 -1
  153. package/src/i18n/catalogs/zh.json +20 -1
  154. package/templates/sumi-context.template.md +57 -0
package/package.json CHANGED
@@ -1,100 +1,102 @@
1
- {
2
- "name": "@nac3/forge-cli",
3
- "version": "0.2.0-alpha.59z.123",
4
- "description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
5
- "license": "SEE LICENSE IN LICENSE",
6
- "author": "Pablo Kuschnirof <pablo@rpaforce.com>",
7
- "homepage": "https://github.com/yujinapp/yujin-forge#readme",
8
- "bugs": {
9
- "url": "https://github.com/yujinapp/yujin-forge/issues"
10
- },
11
- "bin": {
12
- "yf": "./dist/bin/yf.js"
13
- },
14
- "type": "module",
15
- "exports": {
16
- ".": "./dist/index.js"
17
- },
18
- "dependencies": {
19
- "@anthropic-ai/sdk": "^0.32.1",
20
- "@aws-sdk/client-ecs": "^3.1053.0",
21
- "commander": "12.1.0",
22
- "dotenv": "^17.4.2",
23
- "kleur": "4.1.5",
24
- "mammoth": "^1.8.0",
25
- "node-html-parser": "6.1.13",
26
- "pdfjs-dist": "^4.10.38",
27
- "prompts": "2.4.2",
28
- "typescript": "5.7.2",
29
- "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
30
- },
31
- "devDependencies": {
32
- "@playwright/test": "^1.60.0",
33
- "@types/node": "22.10.2",
34
- "@types/prompts": "2.4.9",
35
- "acorn": "^8.16.0",
36
- "pixelmatch": "^7.2.0",
37
- "pngjs": "^7.0.0",
38
- "tsx": "4.19.2",
39
- "vitest": "2.1.8"
40
- },
41
- "engines": {
42
- "node": ">=18.17",
43
- "pnpm": ">=9"
44
- },
45
- "files": [
46
- "dist",
47
- "templates",
48
- "docs/manuals",
49
- "docs/SQ.md",
50
- "docs/SQ_BY_STEP.yaml",
51
- "docs/doctrine",
52
- "src/i18n/catalogs",
53
- "README.md",
54
- "LICENSE"
55
- ],
56
- "keywords": [
57
- "nac",
58
- "nac-3",
59
- "react",
60
- "framework",
61
- "claude-code",
62
- "yujin",
63
- "voice",
64
- "whisper",
65
- "elevenlabs",
66
- "tts",
67
- "stt",
68
- "document-reader",
69
- "pdf",
70
- "docx",
71
- "epub",
72
- "spec-ingest",
73
- "scaffolding",
74
- "accessibility",
75
- "voice-first",
76
- "adip"
77
- ],
78
- "repository": {
79
- "type": "git",
80
- "url": "git+https://github.com/yujinapp/yujin-forge.git"
81
- },
82
- "publishConfig": {
83
- "access": "public",
84
- "tag": "alpha"
85
- },
86
- "scripts": {
87
- "build": "tsc && node scripts/copy_qa_assets.mjs",
88
- "dev": "tsx watch src/bin/yf.ts",
89
- "typecheck": "tsc --noEmit",
90
- "typecheck:all": "pnpm typecheck && pnpm --filter @yujin/hito4-server typecheck && pnpm --filter @yujin/forge-mobile typecheck",
91
- "test": "vitest run",
92
- "test:watch": "vitest",
93
- "lint": "tsc --noEmit",
94
- "yf": "tsx src/bin/yf.ts",
95
- "catalog:lint": "node scripts/catalog_lint.mjs",
96
- "pairing:check": "node scripts/check_pairing_sync.mjs",
97
- "brain-matrix:gate": "node scripts/brain_matrix_gate.mjs",
98
- "hito4:lint": "node scripts/hito4_lint_bundle.mjs"
99
- }
100
- }
1
+ {
2
+ "name": "@nac3/forge-cli",
3
+ "version": "0.2.0-alpha.59z.158",
4
+ "description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "author": "Pablo Kuschnirof <pablo@rpaforce.com>",
7
+ "homepage": "https://github.com/yujinapp/yujin-forge#readme",
8
+ "bugs": {
9
+ "url": "https://github.com/yujinapp/yujin-forge/issues"
10
+ },
11
+ "bin": {
12
+ "yf": "./dist/bin/yf.js"
13
+ },
14
+ "type": "module",
15
+ "exports": {
16
+ ".": "./dist/index.js"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc && node scripts/copy_qa_assets.mjs",
20
+ "dev": "tsx watch src/bin/yf.ts",
21
+ "typecheck": "tsc --noEmit",
22
+ "typecheck:all": "pnpm typecheck && pnpm --filter @yujin/hito4-server typecheck && pnpm --filter @yujin/forge-mobile typecheck",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "lint": "tsc --noEmit",
26
+ "yf": "tsx src/bin/yf.ts",
27
+ "catalog:lint": "node scripts/catalog_lint.mjs",
28
+ "pairing:check": "node scripts/check_pairing_sync.mjs",
29
+ "brain-matrix:gate": "node scripts/brain_matrix_gate.mjs",
30
+ "hito4:lint": "node scripts/hito4_lint_bundle.mjs",
31
+ "prepublishOnly": "pnpm run build && pnpm run typecheck && pnpm run catalog:lint && pnpm run test && pnpm run brain-matrix:gate && pnpm run hito4:lint"
32
+ },
33
+ "dependencies": {
34
+ "@anthropic-ai/sdk": "^0.32.1",
35
+ "@aws-sdk/client-ecs": "^3.1053.0",
36
+ "commander": "12.1.0",
37
+ "dotenv": "^17.4.2",
38
+ "kleur": "4.1.5",
39
+ "mammoth": "^1.8.0",
40
+ "node-html-parser": "6.1.13",
41
+ "pdfjs-dist": "^4.10.38",
42
+ "prompts": "2.4.2",
43
+ "typescript": "5.7.2",
44
+ "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
45
+ },
46
+ "devDependencies": {
47
+ "@playwright/test": "^1.60.0",
48
+ "@types/node": "22.10.2",
49
+ "@types/prompts": "2.4.9",
50
+ "acorn": "^8.16.0",
51
+ "pixelmatch": "^7.2.0",
52
+ "pngjs": "^7.0.0",
53
+ "tsx": "4.19.2",
54
+ "vitest": "2.1.8"
55
+ },
56
+ "engines": {
57
+ "node": ">=18.17",
58
+ "pnpm": ">=9"
59
+ },
60
+ "packageManager": "pnpm@11.3.0",
61
+ "files": [
62
+ "dist",
63
+ "templates",
64
+ "docs/manuals",
65
+ "docs/SQ.md",
66
+ "docs/SQ_BY_STEP.yaml",
67
+ "docs/doctrine",
68
+ "src/i18n/catalogs",
69
+ "README.md",
70
+ "LICENSE"
71
+ ],
72
+ "keywords": [
73
+ "nac",
74
+ "nac-3",
75
+ "react",
76
+ "framework",
77
+ "claude-code",
78
+ "yujin",
79
+ "voice",
80
+ "whisper",
81
+ "elevenlabs",
82
+ "tts",
83
+ "stt",
84
+ "document-reader",
85
+ "pdf",
86
+ "docx",
87
+ "epub",
88
+ "spec-ingest",
89
+ "scaffolding",
90
+ "accessibility",
91
+ "voice-first",
92
+ "adip"
93
+ ],
94
+ "repository": {
95
+ "type": "git",
96
+ "url": "git+https://github.com/yujinapp/yujin-forge.git"
97
+ },
98
+ "publishConfig": {
99
+ "access": "public",
100
+ "tag": "alpha"
101
+ }
102
+ }
@@ -127,5 +127,24 @@
127
127
  "error.project_not_registered.what": "لا يوجد مشروع adopter مسجل.",
128
128
  "error.project_not_registered.why": "يتطلب verb المستدعى project root نشط لكن ~/.yujin-forge/projects.json ليس به إدخالات.",
129
129
  "error.project_not_registered.fix": "أنشئ واحدا بـ yujin.project.init أو سجل واحدا موجودا بـ yf projects add.",
130
- "error.project_not_registered.cmd": "yf projects scan"
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "الوكلاء",
132
+ "panel.agents.title": "الوكلاء",
133
+ "panel.agents.subtitle": "المدير والوكلاء الفرعيون المسجلون في هذا المشروع",
134
+ "panel.agents.empty.title": "لا يوجد وكلاء بعد",
135
+ "panel.agents.empty.body": "قم بتشغيل `yf agent install --defaults` لتسجيل المدير ووكلائه الفرعيين الأربعة (المحلل، المبرمج، المختبر، المُجهز).",
136
+ "panel.agents.legend.eco": "اقتصادي",
137
+ "panel.agents.legend.managed": "مُدار",
138
+ "panel.agents.legend.frontier": "حدود",
139
+ "panel.agents.status.disabled": "وقت تشغيل الوكلاء غير مُشغّل",
140
+ "panel.agents.event.running": "قيد التشغيل",
141
+ "panel.agents.event.idle": "خامل",
142
+ "panel.agents.tick.live": "متصل",
143
+ "panel.agents.tick.lost": "الاتصال مفقود",
144
+ "workflow.phase.i": "الفرز والنية",
145
+ "workflow.phase.ii": "التوضيح (الوظيفي + 4 NFR + الكتل)",
146
+ "workflow.phase.iii": "المواصفات (RFP + المعمارية + التصميم + الموافقات)",
147
+ "workflow.phase.iv": "التهيئة",
148
+ "workflow.phase.v": "تطوير الكتل",
149
+ "workflow.phase.vi": "النشر + ما بعد الإطلاق"
131
150
  }
@@ -127,5 +127,24 @@
127
127
  "error.project_not_registered.what": "Kein Adopter-Projekt registriert.",
128
128
  "error.project_not_registered.why": "Das aufgerufene Verb benoetigt einen aktiven Project-Root, aber ~/.yujin-forge/projects.json hat keine Eintraege.",
129
129
  "error.project_not_registered.fix": "Erstellen Sie eines mit yujin.project.init oder registrieren Sie ein existierendes mit yf projects add.",
130
- "error.project_not_registered.cmd": "yf projects scan"
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "Agenten",
132
+ "panel.agents.title": "Agenten",
133
+ "panel.agents.subtitle": "Director und Sub-Agenten registriert in diesem Projekt",
134
+ "panel.agents.empty.title": "Noch keine Agenten",
135
+ "panel.agents.empty.body": "Fuehre `yf agent install --defaults` aus, um den Director und seine 4 Sub-Agenten (Analyst, Coder, Tester, Scaffolder) zu registrieren.",
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 nicht gestartet",
140
+ "panel.agents.event.running": "Laeuft",
141
+ "panel.agents.event.idle": "Inaktiv",
142
+ "panel.agents.tick.live": "Verbunden",
143
+ "panel.agents.tick.lost": "Verbindung verloren",
144
+ "workflow.phase.i": "Triage und Intention",
145
+ "workflow.phase.ii": "Klaerung (funktional + 4 NFR + Bloecke)",
146
+ "workflow.phase.iii": "Spezifikationen (RFP + Arch + Design + Genehmigungen)",
147
+ "workflow.phase.iv": "Bootstrap",
148
+ "workflow.phase.v": "Blockentwicklung",
149
+ "workflow.phase.vi": "Deploy + Post-Launch"
131
150
  }
@@ -12,7 +12,6 @@
12
12
  "panel.button.maximise": "Maximise",
13
13
  "panel.button.close": "Close",
14
14
  "panel.button.language": "Language",
15
-
16
15
  "panel.trace.title": "Action trace",
17
16
  "panel.trace.count.one": "{n} tool call",
18
17
  "panel.trace.count.other": "{n} tool calls",
@@ -21,10 +20,8 @@
21
20
  "panel.trace.badge.tool": "TOOL",
22
21
  "panel.trace.badge.voice": "VOICE",
23
22
  "panel.trace.badge.error": "ERROR",
24
-
25
23
  "panel.stream.empty.kanji": "侑仁",
26
24
  "panel.stream.empty.body": "Yujin Forge online. Ask for changes to the project.",
27
-
28
25
  "panel.status.no_audio": "No audio captured. The microphone probably did not pick up anything.",
29
26
  "panel.status.did_not_catch": "Did not catch that. Try again.",
30
27
  "panel.status.mic_denied": "Microphone permission denied or unavailable: {error}",
@@ -34,10 +31,8 @@
34
31
  "panel.status.reading": "Reading {filename}...",
35
32
  "panel.status.ingest_failed": "Ingest failed: {error}",
36
33
  "panel.status.read_failed": "Could not read the specification: {error}",
37
-
38
34
  "panel.drop.title": "Drop the specification here",
39
35
  "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
40
-
41
36
  "panel.ingest.spec_attached": "Spec attached: {filename}, {kb} KB",
42
37
  "panel.ingest.read_label": "Read.",
43
38
  "panel.ingest.title_label": "Title: {title}",
@@ -45,7 +40,6 @@
45
40
  "panel.ingest.format_label": "Format: {format} / {sections} section(s) / {kb} KB",
46
41
  "panel.ingest.first_lines": "First lines:",
47
42
  "panel.ingest.action_done": "Action {tool} completed.",
48
-
49
43
  "vault.modal.aria.close": "Close credentials modal",
50
44
  "vault.modal.title": "Credentials (vault)",
51
45
  "vault.tab.list": "Loaded slots",
@@ -60,7 +54,6 @@
60
54
  "vault.add.button_cancel": "Cancel",
61
55
  "vault.add.success": "Slot {slot} saved.",
62
56
  "vault.add.overwrite": "Slot {slot} overwritten.",
63
-
64
57
  "manual.intro": "Yujin Forge -- user manual",
65
58
  "manual.section.welcome": "Welcome",
66
59
  "manual.section.install": "Installation",
@@ -69,7 +62,6 @@
69
62
  "manual.section.spec_ingest": "Specification ingest",
70
63
  "manual.section.troubleshooting": "Troubleshooting",
71
64
  "manual.section.support": "Support",
72
-
73
65
  "lang.name.es": "Spanish",
74
66
  "lang.name.en": "English",
75
67
  "lang.name.pt": "Portuguese",
@@ -80,10 +72,8 @@
80
72
  "lang.name.ar": "Arabic",
81
73
  "lang.name.de": "German",
82
74
  "lang.name.it": "Italian",
83
-
84
75
  "recap.fallback_period": ".",
85
76
  "recap.empty": "There is nothing to recap yet.",
86
-
87
77
  "error_ui.severity.info": "INFO",
88
78
  "error_ui.severity.warning": "WARNING",
89
79
  "error_ui.severity.error": "ERROR",
@@ -98,54 +88,63 @@
98
88
  "error_ui.unknown.what": "Forge encountered an internal error (unknown code).",
99
89
  "error_ui.unknown.why": "The code {code} is not in the catalog. This is a bug.",
100
90
  "error_ui.unknown.fix": "Open an issue at https://github.com/yujinapp/yujin-forge/issues with the code + the traceback.",
101
-
102
91
  "error.cap_frontier_exhausted.what": "Monthly frontier tier token cap reached (large model).",
103
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.",
104
93
  "error.cap_frontier_exhausted.fix": "Switch to direct Anthropic BYOK: bypasses the worker monthly cap. Your cost becomes whatever Anthropic charges directly.",
105
94
  "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
106
-
107
95
  "error.cap_eco_exhausted.what": "Monthly eco tier token cap reached (small model).",
108
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.",
109
97
  "error.cap_eco_exhausted.fix": "Switch to direct BYOK or upgrade your plan. BYOK bypasses the worker cap.",
110
98
  "error.cap_eco_exhausted.cmd": "yf brain config --eco-provider google_ai --eco-model gemini-2.5-flash-lite",
111
-
112
99
  "error.tier_not_in_plan.what": "Tier {tier} is not enabled on your plan.",
113
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.",
114
101
  "error.tier_not_in_plan.fix": "Activate a paid license, or switch to direct BYOK (your cost, no worker cap).",
115
102
  "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
116
-
117
103
  "error.response_truncated.what": "The model response was cut off before finishing.",
118
104
  "error.response_truncated.why": "The managed_max_tokens_per_turn = {limit} tokens limit was reached mid-turn. The model stopped generating.",
119
105
  "error.response_truncated.fix": "Raise the limit via yf limits. Applies to the next turn without restarting the chat.",
120
106
  "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
121
107
  "error.response_truncated.banner": "[Response truncated by max_tokens={max}. Raise the limit with: yf limits set managed_max_tokens_per_turn {suggested}]",
122
-
123
108
  "error.modal_trace_stale.what": "The approval modal expired or is orphaned.",
124
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.",
125
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.",
126
111
  "error.modal_trace_stale.cmd": "yf doctor",
127
-
128
112
  "error.byok_key_missing.what": "Missing API key for provider {provider}.",
129
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.",
130
114
  "error.byok_key_missing.fix": "Configure the key with yf keys set (atomic, mode 0600, never logged).",
131
115
  "error.byok_key_missing.cmd": "yf keys set {slot}",
132
-
133
116
  "error.worker_unreachable.what": "Could not reach the yujin.app worker.",
134
117
  "error.worker_unreachable.why": "Network timeout or worker down (HTTP {status}). Retried {attempts} times.",
135
118
  "error.worker_unreachable.fix": "Check your internet. If it is OK, switch temporarily to direct BYOK to avoid the worker dependency.",
136
119
  "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
137
-
138
120
  "error.vault_decrypt_failed.what": "Could not decrypt a key from the Vault.",
139
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.",
140
122
  "error.vault_decrypt_failed.fix": "Pull the server copy (re-encrypts with your local master) if you have server backup active.",
141
123
  "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
142
-
143
124
  "error.shell_exec_rejected.what": "You rejected the R8 modal for yujin.shell.exec.",
144
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.",
145
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.",
146
-
147
127
  "error.project_not_registered.what": "No adopter project registered.",
148
128
  "error.project_not_registered.why": "The verb you invoked needs an active project root but ~/.yujin-forge/projects.json has no entries.",
149
129
  "error.project_not_registered.fix": "Create one with yujin.project.init or register an existing one with yf projects add.",
150
- "error.project_not_registered.cmd": "yf projects scan"
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"
151
150
  }
@@ -12,7 +12,6 @@
12
12
  "panel.button.maximise": "Maximizar",
13
13
  "panel.button.close": "Cerrar",
14
14
  "panel.button.language": "Idioma",
15
-
16
15
  "panel.trace.title": "Trace de acciones",
17
16
  "panel.trace.count.one": "{n} llamada a herramienta",
18
17
  "panel.trace.count.other": "{n} llamadas a herramientas",
@@ -21,10 +20,8 @@
21
20
  "panel.trace.badge.tool": "TOOL",
22
21
  "panel.trace.badge.voice": "VOZ",
23
22
  "panel.trace.badge.error": "ERROR",
24
-
25
23
  "panel.stream.empty.kanji": "侑仁",
26
24
  "panel.stream.empty.body": "Yujin Forge en linea. Pedile cambios al proyecto.",
27
-
28
25
  "panel.status.no_audio": "No se capturo audio. Probablemente el microfono no recibio nada.",
29
26
  "panel.status.did_not_catch": "No te entendi. Probemos de nuevo.",
30
27
  "panel.status.mic_denied": "Permiso de microfono denegado o no disponible: {error}",
@@ -34,10 +31,8 @@
34
31
  "panel.status.reading": "Leyendo {filename}...",
35
32
  "panel.status.ingest_failed": "La ingesta fallo: {error}",
36
33
  "panel.status.read_failed": "No pude leer la especificacion: {error}",
37
-
38
34
  "panel.drop.title": "Solta la especificacion aca",
39
35
  "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
40
-
41
36
  "panel.ingest.spec_attached": "Especificacion adjunta: {filename}, {kb} KB",
42
37
  "panel.ingest.read_label": "Leida.",
43
38
  "panel.ingest.title_label": "Titulo: {title}",
@@ -45,7 +40,6 @@
45
40
  "panel.ingest.format_label": "Formato: {format} / {sections} seccion(es) / {kb} KB",
46
41
  "panel.ingest.first_lines": "Primeras lineas:",
47
42
  "panel.ingest.action_done": "Accion {tool} completada.",
48
-
49
43
  "vault.modal.title": "Credenciales (vault)",
50
44
  "vault.modal.aria.close": "Cerrar modal de credenciales",
51
45
  "vault.tab.list": "Slots cargados",
@@ -60,7 +54,6 @@
60
54
  "vault.add.button_cancel": "Cancelar",
61
55
  "vault.add.success": "Slot {slot} guardado.",
62
56
  "vault.add.overwrite": "Slot {slot} sobrescrito.",
63
-
64
57
  "manual.intro": "Yujin Forge -- manual de usuario",
65
58
  "manual.section.welcome": "Bienvenida",
66
59
  "manual.section.install": "Instalacion",
@@ -69,7 +62,6 @@
69
62
  "manual.section.spec_ingest": "Ingesta de especificaciones",
70
63
  "manual.section.troubleshooting": "Solucion de problemas",
71
64
  "manual.section.support": "Soporte",
72
-
73
65
  "lang.name.es": "Espanol",
74
66
  "lang.name.en": "English",
75
67
  "lang.name.pt": "Portugues",
@@ -80,10 +72,8 @@
80
72
  "lang.name.ar": "Arabi",
81
73
  "lang.name.de": "Deutsch",
82
74
  "lang.name.it": "Italiano",
83
-
84
75
  "recap.fallback_period": ".",
85
76
  "recap.empty": "No hay nada que recordar todavia.",
86
-
87
77
  "error_ui.severity.info": "INFO",
88
78
  "error_ui.severity.warning": "ATENCION",
89
79
  "error_ui.severity.error": "ERROR",
@@ -98,54 +88,63 @@
98
88
  "error_ui.unknown.what": "Forge encontro un error interno (codigo desconocido).",
99
89
  "error_ui.unknown.why": "El codigo {code} no esta en el catalogo. Es un bug.",
100
90
  "error_ui.unknown.fix": "Abri un issue en https://github.com/yujinapp/yujin-forge/issues con el codigo + traceback.",
101
-
102
91
  "error.cap_frontier_exhausted.what": "Se agoto el cap mensual de tokens del tier frontier (modelo grande).",
103
92
  "error.cap_frontier_exhausted.why": "Tu plan {plan} permite hasta {cap} tokens/mes en frontier. Usaste {used}. Resetea al inicio del proximo mes UTC.",
104
93
  "error.cap_frontier_exhausted.fix": "Pasa a BYOK Anthropic directo: bypassea el cap mensual del worker. Tu costo pasa a ser lo que cobra Anthropic.",
105
94
  "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
106
-
107
95
  "error.cap_eco_exhausted.what": "Se agoto el cap mensual de tokens del tier eco (modelo chico).",
108
96
  "error.cap_eco_exhausted.why": "Tu plan {plan} permite hasta {cap} tokens/mes en eco. Usaste {used}. Resetea al inicio del proximo mes UTC.",
109
97
  "error.cap_eco_exhausted.fix": "Pasa a BYOK directo o sube de plan. BYOK bypassea el cap del worker.",
110
98
  "error.cap_eco_exhausted.cmd": "yf brain config --eco-provider google_ai --eco-model gemini-2.5-flash-lite",
111
-
112
99
  "error.tier_not_in_plan.what": "El tier {tier} no esta habilitado en tu plan.",
113
100
  "error.tier_not_in_plan.why": "Tu plan {plan} no incluye el tier {tier}. Probablemente sos free-public o tu license expiro.",
114
101
  "error.tier_not_in_plan.fix": "Activa una licencia paga o pasa a BYOK directo (tu costo, sin cap del worker).",
115
102
  "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
116
-
117
103
  "error.response_truncated.what": "La respuesta del modelo se corto antes de terminar.",
118
104
  "error.response_truncated.why": "Limite managed_max_tokens_per_turn = {limit} tokens alcanzado a mitad del turno. El modelo paro de generar.",
119
105
  "error.response_truncated.fix": "Subi el limite via yf limits. Aplica al proximo turno sin reiniciar el chat.",
120
106
  "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
121
107
  "error.response_truncated.banner": "[Respuesta truncada por max_tokens={max}. Subi el limite con: yf limits set managed_max_tokens_per_turn {suggested}]",
122
-
123
108
  "error.modal_trace_stale.what": "El modal de aprobacion expiro o quedo huerfano.",
124
109
  "error.modal_trace_stale.why": "El trace_id {trace_id} no tiene approval pendiente en el dispatcher. Probable race condition entre invoke y panel state, o cancel previo dejo el trace zombie.",
125
110
  "error.modal_trace_stale.fix": "Reintenta el verbo desde el chat: arranca un nuevo trace limpio. Si persiste, corre yf doctor para chequear el panel.",
126
111
  "error.modal_trace_stale.cmd": "yf doctor",
127
-
128
112
  "error.byok_key_missing.what": "Falta la API key para el provider {provider}.",
129
113
  "error.byok_key_missing.why": "Configuraste {provider} como provider del tier {tier} pero el slot byok_{slot} no esta en el Vault encriptado.",
130
114
  "error.byok_key_missing.fix": "Configura la key con yf keys set (atomico, mode 0600, nunca se logguea).",
131
115
  "error.byok_key_missing.cmd": "yf keys set {slot}",
132
-
133
116
  "error.worker_unreachable.what": "No pude alcanzar el worker yujin.app.",
134
117
  "error.worker_unreachable.why": "Network timeout o worker caido (HTTP {status}). Reintente {attempts} veces.",
135
118
  "error.worker_unreachable.fix": "Chequea tu internet. Si esta OK, pasa temporalmente a BYOK directo para no depender del worker.",
136
119
  "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
137
-
138
120
  "error.vault_decrypt_failed.what": "No pude desencriptar una clave del Vault.",
139
121
  "error.vault_decrypt_failed.why": "La master key es incorrecta o el archivo del Vault esta corrupto. Puede pasar si moviste config entre maquinas sin migrar la master o por disk error.",
140
122
  "error.vault_decrypt_failed.fix": "Traete la copia del server (re-encripta con tu master local) si tenes server backup activo.",
141
123
  "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
142
-
143
124
  "error.shell_exec_rejected.what": "Rechazaste el modal R8 de yujin.shell.exec.",
144
125
  "error.shell_exec_rejected.why": "El comando {command} se clasifico como {classification}. shell.exec siempre pide aprobacion por seguridad, aunque sea read-only.",
145
126
  "error.shell_exec_rejected.fix": "Si el comando era read-only (yf projects active, git status, ls), usa el verb nativo equivalente. Si era necesario y lo rechazaste por error, reinvoca.",
146
-
147
127
  "error.project_not_registered.what": "No hay proyecto adopter registrado.",
148
128
  "error.project_not_registered.why": "El verb que invocaste requiere project root activo pero ~/.yujin-forge/projects.json no tiene entradas.",
149
129
  "error.project_not_registered.fix": "Crea uno con yujin.project.init o registra uno existente con yf projects add.",
150
- "error.project_not_registered.cmd": "yf projects scan"
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "Agentes",
132
+ "panel.agents.title": "Agentes",
133
+ "panel.agents.subtitle": "Director + sub-agentes registrados en este proyecto",
134
+ "panel.agents.empty.title": "Aun no hay agentes",
135
+ "panel.agents.empty.body": "Corre `yf agent install --defaults` para registrar el Director y los 4 sub-agentes (Analista, 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 de agentes no iniciado",
140
+ "panel.agents.event.running": "Corriendo",
141
+ "panel.agents.event.idle": "En espera",
142
+ "panel.agents.tick.live": "Conectado",
143
+ "panel.agents.tick.lost": "Conexion perdida",
144
+ "workflow.phase.i": "Triage e intencion",
145
+ "workflow.phase.ii": "Clarificacion (funcional + 4 NFR + bloques)",
146
+ "workflow.phase.iii": "Especificaciones (RFP + Arch + Design + aprobaciones)",
147
+ "workflow.phase.iv": "Bootstrap",
148
+ "workflow.phase.v": "Desarrollo por bloques",
149
+ "workflow.phase.vi": "Deploy + post-lanzamiento"
151
150
  }
@@ -127,5 +127,24 @@
127
127
  "error.project_not_registered.what": "Aucun projet adopter enregistre.",
128
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
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"
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"
131
150
  }
@@ -127,5 +127,24 @@
127
127
  "error.project_not_registered.what": "कोई adopter प्रोजेक्ट पंजीकृत नहीं।",
128
128
  "error.project_not_registered.why": "invoked verb को सक्रिय project root की आवश्यकता है लेकिन ~/.yujin-forge/projects.json में कोई entries नहीं हैं।",
129
129
  "error.project_not_registered.fix": "yujin.project.init के साथ एक बनाएं या yf projects add के साथ एक मौजूदा पंजीकृत करें।",
130
- "error.project_not_registered.cmd": "yf projects scan"
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "एजेंट",
132
+ "panel.agents.title": "एजेंट",
133
+ "panel.agents.subtitle": "इस परियोजना में पंजीकृत निदेशक और उप-एजेंट",
134
+ "panel.agents.empty.title": "अभी तक कोई एजेंट नहीं",
135
+ "panel.agents.empty.body": "निदेशक और इसके 4 उप-एजेंटों (विश्लेषक, कोडर, परीक्षक, स्कैफोल्डर) को पंजीकृत करने के लिए `yf agent install --defaults` चलाएं।",
136
+ "panel.agents.legend.eco": "इको",
137
+ "panel.agents.legend.managed": "प्रबंधित",
138
+ "panel.agents.legend.frontier": "फ्रंटियर",
139
+ "panel.agents.status.disabled": "एजेंट रनटाइम प्रारंभ नहीं हुआ",
140
+ "panel.agents.event.running": "चल रहा है",
141
+ "panel.agents.event.idle": "निष्क्रिय",
142
+ "panel.agents.tick.live": "जुड़ा हुआ",
143
+ "panel.agents.tick.lost": "कनेक्शन खो गया",
144
+ "workflow.phase.i": "ट्रायेज और इरादा",
145
+ "workflow.phase.ii": "स्पष्टीकरण (कार्यात्मक + 4 NFR + ब्लॉक)",
146
+ "workflow.phase.iii": "विशिष्टीकरण (RFP + आर्क + डिज़ाइन + अनुमोदन)",
147
+ "workflow.phase.iv": "बूटस्ट्रैप",
148
+ "workflow.phase.v": "ब्लॉक विकास",
149
+ "workflow.phase.vi": "परिनियोजन + लॉन्च के बाद"
131
150
  }
@@ -127,5 +127,24 @@
127
127
  "error.project_not_registered.what": "Nessun progetto adopter registrato.",
128
128
  "error.project_not_registered.why": "Il verb invocato richiede un project root attivo ma ~/.yujin-forge/projects.json non ha voci.",
129
129
  "error.project_not_registered.fix": "Creane uno con yujin.project.init o registrane uno esistente con yf projects add.",
130
- "error.project_not_registered.cmd": "yf projects scan"
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "Agenti",
132
+ "panel.agents.title": "Agenti",
133
+ "panel.agents.subtitle": "Director e sub-agenti registrati in questo progetto",
134
+ "panel.agents.empty.title": "Nessun agente ancora",
135
+ "panel.agents.empty.body": "Esegui `yf agent install --defaults` per registrare il Director e i suoi 4 sub-agenti (Analista, 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 degli agenti non avviato",
140
+ "panel.agents.event.running": "In esecuzione",
141
+ "panel.agents.event.idle": "Inattivo",
142
+ "panel.agents.tick.live": "Connesso",
143
+ "panel.agents.tick.lost": "Connessione persa",
144
+ "workflow.phase.i": "Triage e intento",
145
+ "workflow.phase.ii": "Chiarimento (funzionale + 4 NFR + blocchi)",
146
+ "workflow.phase.iii": "Specifiche (RFP + Arch + Design + approvazioni)",
147
+ "workflow.phase.iv": "Bootstrap",
148
+ "workflow.phase.v": "Sviluppo a blocchi",
149
+ "workflow.phase.vi": "Deploy + post-lancio"
131
150
  }