@nac3/forge-cli 0.2.0-alpha.59z.121 → 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 (161) 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/commands/keys_setup.d.ts +1 -0
  88. package/dist/commands/keys_setup.d.ts.map +1 -1
  89. package/dist/commands/keys_setup.js +61 -11
  90. package/dist/commands/keys_setup.js.map +1 -1
  91. package/dist/core/pilot_setup.d.ts +14 -1
  92. package/dist/core/pilot_setup.d.ts.map +1 -1
  93. package/dist/core/pilot_setup.js +62 -1
  94. package/dist/core/pilot_setup.js.map +1 -1
  95. package/dist/core/provider_keys.d.ts.map +1 -1
  96. package/dist/core/provider_keys.js +12 -5
  97. package/dist/core/provider_keys.js.map +1 -1
  98. package/dist/design/yujin_design_resolver.d.ts +77 -0
  99. package/dist/design/yujin_design_resolver.d.ts.map +1 -0
  100. package/dist/design/yujin_design_resolver.js +113 -0
  101. package/dist/design/yujin_design_resolver.js.map +1 -0
  102. package/dist/docs/doctrine/default-design-system.md +120 -0
  103. package/dist/docs/doctrine/language-sovereignty.md +143 -0
  104. package/dist/docs/doctrine/testing-policy.md +211 -0
  105. package/dist/nac3/approval_queue.d.ts +8 -0
  106. package/dist/nac3/approval_queue.d.ts.map +1 -1
  107. package/dist/nac3/approval_queue.js.map +1 -1
  108. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  109. package/dist/nac3/internal_manifest.js +178 -0
  110. package/dist/nac3/internal_manifest.js.map +1 -1
  111. package/dist/office/excel.d.ts +22 -0
  112. package/dist/office/excel.d.ts.map +1 -1
  113. package/dist/office/excel.js +82 -0
  114. package/dist/office/excel.js.map +1 -1
  115. package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
  116. package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
  117. package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
  118. package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
  119. package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
  120. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
  121. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
  122. package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
  123. package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
  124. package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
  125. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
  126. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
  127. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
  128. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
  129. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
  130. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
  131. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
  132. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
  133. package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
  134. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
  135. package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
  136. package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
  137. package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
  138. package/dist/version.d.ts +1 -1
  139. package/dist/version.js +1 -1
  140. package/dist/workflow/graph.d.ts +59 -0
  141. package/dist/workflow/graph.d.ts.map +1 -0
  142. package/dist/workflow/graph.js +137 -0
  143. package/dist/workflow/graph.js.map +1 -0
  144. package/dist/workflow/state.d.ts +34 -0
  145. package/dist/workflow/state.d.ts.map +1 -1
  146. package/dist/workflow/state.js.map +1 -1
  147. package/docs/doctrine/default-design-system.md +120 -0
  148. package/docs/doctrine/language-sovereignty.md +143 -0
  149. package/docs/doctrine/testing-policy.md +211 -0
  150. package/package.json +102 -100
  151. package/src/i18n/catalogs/ar.json +20 -1
  152. package/src/i18n/catalogs/de.json +20 -1
  153. package/src/i18n/catalogs/en.json +20 -21
  154. package/src/i18n/catalogs/es.json +20 -21
  155. package/src/i18n/catalogs/fr.json +20 -1
  156. package/src/i18n/catalogs/hi.json +20 -1
  157. package/src/i18n/catalogs/it.json +20 -1
  158. package/src/i18n/catalogs/ja.json +20 -1
  159. package/src/i18n/catalogs/pt.json +20 -1
  160. package/src/i18n/catalogs/zh.json +20 -1
  161. package/templates/sumi-context.template.md +57 -0
@@ -0,0 +1,211 @@
1
+ # Testing policy (Forge product principle)
2
+
3
+ **Lock date:** 2026-06-04. Replaces the earlier draft
4
+ `tdd-first.md` which proposed TDD-first universally.
5
+
6
+ Pablo's review: TDD-first as a universal product principle has
7
+ more downsides than upsides. The cost is real (tokens, latency,
8
+ arquitectural lock-in, frustrated UX, ambiguous specs) and only
9
+ pays off in a narrow slice (backends + middleware + finance +
10
+ regulatory + external integrations). For the majority of Forge
11
+ projects (UI / dashboards / CRUDs / demos / glue), TDD-first
12
+ slows down iteration without adding value.
13
+
14
+ This doctrine sets the new rule.
15
+
16
+ ## The rule
17
+
18
+ 1. **Tests are required POST-implementation for every change**
19
+ that lands in a Forge-managed project. The default order is:
20
+ spec -> code -> tests -> scaffold-with-gate.
21
+ 2. **TDD-first is opt-in**, not default. It applies when the
22
+ slice falls into the **TDD-first scope** (see below).
23
+ 3. **The scaffold gate** requires the test suite to be green
24
+ before writing to disk, regardless of order. The order
25
+ determines WHEN tests are authored, not whether they exist.
26
+
27
+ ## TDD-first scope (the narrow slice)
28
+
29
+ Only these domains warrant test-first:
30
+
31
+ - **APIs / backend endpoints with public contract**. The
32
+ request/response shape is the most stable thing about the
33
+ feature; the implementation will rewrite.
34
+ - **Data transformers / validators / parsers** where input
35
+ -> output is the whole point.
36
+ - **Financial / regulatory / mathematical logic** (tax calc,
37
+ retention, currency conversion, legal rules). The test
38
+ is the spec.
39
+ - **External-service integrations** (Stripe webhook, Polar,
40
+ OAuth, NAC bridges to MCP). Tests capture "this payload
41
+ produces this effect" which is the only stable contract
42
+ when the provider changes internals.
43
+
44
+ The Analyst marks the spec extraction with `tdd_first: true`
45
+ when:
46
+
47
+ - The plan contains `endpoints` AND no `components`.
48
+ - OR any extraction tag matches /financial|tax|regulatory|
49
+ integration|webhook|validator|transformer/i.
50
+ - OR the user explicitly passes `--tdd` to `yf spec extract`.
51
+
52
+ When `tdd_first: false` (default), the Tester slot runs AFTER
53
+ the Coder. When true, the Tester slot runs BEFORE the Coder.
54
+
55
+ ## TDD-first explicitly NOT for
56
+
57
+ - UI / frontend / drag-drop / animations / layout.
58
+ - Glue code / scripts / one-off transforms.
59
+ - Demos / prototypes / spikes (always `--mode=spike`).
60
+ - Stateful interactive surfaces (games, audio, sensor).
61
+ - Generated code from templates (Next.js scaffolds, etc.) --
62
+ the template has its own tests; user-added features follow
63
+ the default order.
64
+
65
+ Trying to TDD any of the above is fiction-writing. The tests
66
+ end up tautological (matching implementation) or vacuous
67
+ (asserting things that are trivially true). Forge will not
68
+ force users into that.
69
+
70
+ ## Order of the 5 Director agents (canonical)
71
+
72
+ The Tester is NOT a single-shot slot -- it is re-entrant. It
73
+ runs at every checkpoint where the suite needs to be authored
74
+ or verified. In TDD-first, that's twice. In code-first, that's
75
+ once. The diagram below names the runs explicitly.
76
+
77
+ ### TDD-first mode (Analyst tags `tdd_first: true`)
78
+
79
+ ```
80
+ Director (orchestrator)
81
+ |
82
+ v
83
+ Analyst -- extract spec + tag tdd_first=true
84
+ |
85
+ v
86
+ Tester #1 -- write the test suite (RED). Suite fails because
87
+ no code exists yet.
88
+ |
89
+ v
90
+ Coder -- implement until the suite turns green. Iterates
91
+ with the brain until red->green or max iter cap.
92
+ |
93
+ v
94
+ Tester #2 -- verify green + add edge-case pass (3 boundary
95
+ tests). If any test still red after edge pass,
96
+ back to Coder (capped by max iter).
97
+ |
98
+ v
99
+ Scaffolder -- apply to disk ONLY when Tester #2 reports
100
+ all-green (happy + edge cases).
101
+ ```
102
+
103
+ ### Code-first mode (Analyst tags `tdd_first: false`, the default)
104
+
105
+ ```
106
+ Director (orchestrator)
107
+ |
108
+ v
109
+ Analyst -- extract spec + tag tdd_first=false
110
+ |
111
+ v
112
+ Coder -- implement straight from the plan.
113
+ |
114
+ v
115
+ Tester -- write the test suite POST-implementation +
116
+ verify green + edge-case pass.
117
+ |
118
+ v
119
+ Scaffolder -- apply to disk ONLY when Tester reports
120
+ all-green.
121
+ ```
122
+
123
+ In both modes, the **last Tester pass before Scaffolder is the
124
+ hard gate**. The flag `tdd_first` decides whether there is also
125
+ a FIRST Tester pass that writes red. The Scaffolder gate
126
+ (green-required) is identical in both modes.
127
+
128
+ The bridge ACL stays the same regardless of mode:
129
+ `Director.can_call = [Analyst, Tester, Coder, Scaffolder]`
130
+ and each worker accepts only from Director. Mode is encoded
131
+ in the messages, not in the topology.
132
+
133
+ ## The scaffold gate (regardless of order)
134
+
135
+ `Scaffolder` refuses to write to disk when:
136
+
137
+ - The Tester report does not exist for the slice.
138
+ - Any test in the new suite is red.
139
+
140
+ The gate is enforced in `src/chat/spec_scaffold.ts`. Test
141
+ runner auto-detected from `package.json` / `pyproject.toml` /
142
+ etc.
143
+
144
+ ## Loop protection (when iterating to green)
145
+
146
+ If the Coder iterates more than `agent.director.max_iters_to_green`
147
+ times (default 5) without turning the test suite green, the
148
+ agent stops and reports the failure to the Director, which
149
+ opens an R8 modal with three options for the user:
150
+
151
+ 1. Mark suite as accepted-red (the user knows the tests are
152
+ wrong; accept the implementation as-is). Audit-logged.
153
+ 2. Re-extract spec (back to Analyst with clarification).
154
+ 3. Cancel the slice.
155
+
156
+ This is the answer to "what does the agent do when it cannot
157
+ turn red into green". No silent application. No infinite
158
+ iteration.
159
+
160
+ ## Mitigations against test pathologies
161
+
162
+ Even POST-implementation testing can produce bad suites if
163
+ left to the Tester LLM alone. Required mitigations:
164
+
165
+ - **Contract framing in Tester system prompt**: the prompt
166
+ explicitly says "tests assert CONTRACT (input -> output,
167
+ effect on world), NOT implementation. Internal refactors
168
+ should not break a well-written test."
169
+ - **Edge-case pass**: after the happy-path tests are green,
170
+ the Tester runs a second pass generating 3 edge cases
171
+ (nulls, empty, boundary, error). Adds them to the suite.
172
+ Coder iterates again.
173
+ - **No mocking-of-self**: tests cannot mock the function
174
+ they are testing. Mocking external deps (network, fs) is
175
+ allowed.
176
+ - **Tester report includes coverage line + branch %.**
177
+ Below configurable threshold (default 80% line, 70%
178
+ branch) is logged as a warning, not a block.
179
+
180
+ ## What this doctrine covers + does NOT cover
181
+
182
+ This doctrine covers **functional correctness via tests**.
183
+ It does NOT cover:
184
+
185
+ - **UX quality** -- panel review, manual walkthroughs.
186
+ - **Accessibility** -- separate doctrine `accessibility.md`
187
+ + `yujin.a11y.*` verbs.
188
+ - **Performance** -- separate (future doctrine, not blocking).
189
+ - **Security** -- separate.
190
+ - **Design / aesthetic** -- not testable by code.
191
+
192
+ "100% E2E tests passed" in the Director objective means
193
+ "functional contract passes". Other quality dimensions are
194
+ gated separately or via human review.
195
+
196
+ ## How Sumi enforces this on Forge itself (dogfood)
197
+
198
+ Sumi-self ships every Forge slice with tests. The order
199
+ follows the same rule:
200
+
201
+ - Backend / middleware / integration slice -> TDD-first
202
+ (test then code). The bridge.ts slice was this kind, and
203
+ the bug found by the test is the evidence the order paid
204
+ off there.
205
+ - UI / panel / cosmetic slice -> code-first then test. The
206
+ legal modal opacity fix, the audit log preview, the
207
+ Limites alignment -- all of these were code-first because
208
+ the shape was visual and exploratory.
209
+
210
+ Sumi decides the order per slice. The graph rule #12 reflects
211
+ this.
@@ -13,6 +13,14 @@ export interface PendingApproval {
13
13
  * re-enter runNac3Invoke / runForgeTool from the endpoint. */
14
14
  legacy_run: (n: string, a: Record<string, unknown>, c: ToolContext) => Promise<ToolResult>;
15
15
  created_at: number;
16
+ /** Director sprint -- when the approval was emitted by an agent
17
+ * via the nac3_invoke path inside an iterative step, the bridge
18
+ * carries the agent slug here so the eventual approve/reject
19
+ * endpoint can fire a `agent_run_paused_resolved` SSE event +
20
+ * the panel SVG can clear the amber dashed marker. Optional
21
+ * because chat-side approvals (sidebar voice / human dispatch
22
+ * directo) do NOT carry an agent slug. */
23
+ agent_slug?: string;
16
24
  }
17
25
  /** Push a pending approval and return the trace_id. */
18
26
  export declare function enqueueApproval(p: PendingApproval): void;
@@ -1 +1 @@
1
- {"version":3,"file":"approval_queue.d.ts","sourceRoot":"","sources":["../../src/nac3/approval_queue.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,GAAG,EAAE,WAAW,CAAC;IACjB;;gCAE4B;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;mEAC+D;IAC/D,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3F,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAGxD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASnE;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAQpE;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AA0BD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2CAA2C;AAC3C,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxE"}
1
+ {"version":3,"file":"approval_queue.d.ts","sourceRoot":"","sources":["../../src/nac3/approval_queue.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,GAAG,EAAE,WAAW,CAAC;IACjB;;gCAE4B;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;mEAC+D;IAC/D,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;+CAM2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAGxD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASnE;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAQpE;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AA0BD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2CAA2C;AAC3C,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"approval_queue.js","sourceRoot":"","sources":["../../src/nac3/approval_queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval_queue.js","sourceRoot":"","sources":["../../src/nac3/approval_queue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"internal_manifest.d.ts","sourceRoot":"","sources":["../../src/nac3/internal_manifest.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,SAAS,GACT,mBAAmB,GACnB,aAAa,GACb,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,KAAK,GACL,YAAY,GACZ,SAAS,GACT,SAAS,GACT,cAAc,GACd,KAAK,CAAC;AAEV,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB;;;4BAGwB;IACxB,YAAY,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjC;;;;;;qCAMiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AA6xDD,wBAAgB,QAAQ,IAAI,YAAY,CAOvC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAGzD;AAED;gEACgE;AAChE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAO9D;AAED;;;uDAGuD;AACvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAgCzF;AAED;;sEAEsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,MAAM,EAAE,CAO/D"}
1
+ {"version":3,"file":"internal_manifest.d.ts","sourceRoot":"","sources":["../../src/nac3/internal_manifest.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,SAAS,GACT,mBAAmB,GACnB,aAAa,GACb,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,KAAK,GACL,YAAY,GACZ,SAAS,GACT,SAAS,GACT,cAAc,GACd,KAAK,CAAC;AAEV,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB;;;4BAGwB;IACxB,YAAY,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjC;;;;;;qCAMiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAw9DD,wBAAgB,QAAQ,IAAI,YAAY,CAOvC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAGzD;AAED;gEACgE;AAChE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAO9D;AAED;;;uDAGuD;AACvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAgCzF;AAED;;sEAEsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,MAAM,EAAE,CAO/D"}
@@ -1538,6 +1538,32 @@ const VERBS = [
1538
1538
  visible: false,
1539
1539
  handler_side: 'server',
1540
1540
  },
1541
+ {
1542
+ id: 'office.excel.update-cell',
1543
+ role: 'action',
1544
+ action: 'update_cell',
1545
+ label: 'Actualizar una celda en un Excel',
1546
+ description: 'Mutate ONE cell in an existing .xlsx / .xls workbook without '
1547
+ + 'rewriting the rest of the file. Use this when the user '
1548
+ + 'wants to fix a single value (e.g. "set B2 of Sheet1 to '
1549
+ + '500") -- otherwise office.excel.write replaces the entire '
1550
+ + 'workbook. The cell address follows A1 notation; the sheet '
1551
+ + 'defaults to the first sheet. CSV not supported (use write).',
1552
+ schema: {
1553
+ type: 'object',
1554
+ properties: {
1555
+ path: { type: 'string', description: 'Existing workbook path (xlsx or xls).', minLength: 1, maxLength: 500 },
1556
+ sheet: { type: 'string', description: 'Sheet name. Default first sheet.', maxLength: 100 },
1557
+ cell: { type: 'string', description: 'A1-notation address (e.g. "B2", "AA10").', minLength: 2, maxLength: 10 },
1558
+ value: { type: 'string', description: 'New cell value -- string / number / boolean / null are all accepted at the dispatcher level (the JSON-schema "type:string" here is the manifest-stub minimum; the handler discriminates the JS type at runtime).' },
1559
+ },
1560
+ required: ['path', 'cell'],
1561
+ },
1562
+ policy: 'project-root-gated',
1563
+ side_effects: ['filesystem'],
1564
+ visible: false,
1565
+ handler_side: 'server',
1566
+ },
1541
1567
  {
1542
1568
  id: 'office.excel.append-sheet',
1543
1569
  role: 'action',
@@ -1722,6 +1748,158 @@ const VERBS = [
1722
1748
  visible: false,
1723
1749
  handler_side: 'panel',
1724
1750
  },
1751
+ /* ============================================================
1752
+ * YUJIN DESIGN SYSTEM (Director sprint phase II slice 12)
1753
+ *
1754
+ * Six verbs that surface the default front-end design system
1755
+ * to the Coder + Analyst + Director. The package lives in
1756
+ * yujin-design-system/ at the repo root; the resolver in
1757
+ * src/design/yujin_design_resolver.ts provides the data.
1758
+ *
1759
+ * See docs/doctrine/default-design-system.md for the rule
1760
+ * (Yujin DS is the Forge default; override via R8 modal).
1761
+ * ============================================================ */
1762
+ {
1763
+ id: 'yujin.design.list-templates',
1764
+ role: 'query',
1765
+ action: 'list_templates',
1766
+ label: 'Listar componentes del Yujin Design System',
1767
+ description: 'Return the catalog of Yujin Design System components '
1768
+ + '(card, modal, sidebar, view, button, input, form-field, '
1769
+ + 'table, kanban-card, ...). 30 components grouped by '
1770
+ + 'category (surface / control / display / data). Use '
1771
+ + 'before writing ANY UI so you splice the Yujin template '
1772
+ + 'instead of hand-rolling.',
1773
+ schema: { type: 'object', properties: {}, required: [] },
1774
+ policy: 'unrestricted',
1775
+ side_effects: ['none'],
1776
+ visible: false,
1777
+ handler_side: 'server',
1778
+ },
1779
+ {
1780
+ id: 'yujin.design.get-template',
1781
+ role: 'query',
1782
+ action: 'get_template',
1783
+ label: 'Traer un componente del Yujin DS',
1784
+ description: 'Return one component template: { slug, category, '
1785
+ + 'nac3_id, html, css, variants, props, token_refs }. The '
1786
+ + 'html carries NAC-3 attrs; the css uses --tokens only.',
1787
+ schema: {
1788
+ type: 'object',
1789
+ properties: {
1790
+ slug: { type: 'string', description: 'Component slug, e.g. "card", "modal", "button".', minLength: 1, maxLength: 40 },
1791
+ },
1792
+ required: ['slug'],
1793
+ },
1794
+ policy: 'unrestricted',
1795
+ side_effects: ['none'],
1796
+ visible: false,
1797
+ handler_side: 'server',
1798
+ },
1799
+ {
1800
+ id: 'yujin.design.list-sumie',
1801
+ role: 'query',
1802
+ action: 'list_sumie',
1803
+ label: 'Listar iconos sumi-e disponibles',
1804
+ description: 'Return the catalog of 170 sumi-e icons. Optional `tag` '
1805
+ + 'filter (nature, finance, sales, support, manufacturing, '
1806
+ + 'quality, hr, marketing, platform, ai, mobile, comms, '
1807
+ + 'document, geo, weather, animal, etc).',
1808
+ schema: {
1809
+ type: 'object',
1810
+ properties: {
1811
+ tag: { type: 'string', description: 'Optional domain tag filter.', maxLength: 30 },
1812
+ },
1813
+ required: [],
1814
+ },
1815
+ policy: 'unrestricted',
1816
+ side_effects: ['none'],
1817
+ visible: false,
1818
+ handler_side: 'server',
1819
+ },
1820
+ {
1821
+ id: 'yujin.design.get-icon',
1822
+ role: 'query',
1823
+ action: 'get_icon',
1824
+ label: 'Traer un icono sumi-e por slug',
1825
+ description: 'Return the inline SVG (40x40, stroke=currentColor) for '
1826
+ + 'the sumi-e icon identified by slug. Use only icons from '
1827
+ + 'this catalog; do NOT import third-party icon libraries.',
1828
+ schema: {
1829
+ type: 'object',
1830
+ properties: {
1831
+ slug: { type: 'string', description: 'Sumi-e icon slug.', minLength: 1, maxLength: 40 },
1832
+ },
1833
+ required: ['slug'],
1834
+ },
1835
+ policy: 'unrestricted',
1836
+ side_effects: ['none'],
1837
+ visible: false,
1838
+ handler_side: 'server',
1839
+ },
1840
+ {
1841
+ id: 'yujin.design.tokens',
1842
+ role: 'query',
1843
+ action: 'tokens',
1844
+ label: 'Traer los tokens DTCG del Yujin DS',
1845
+ description: 'Return the full DTCG W3C tokens.json tree (colors, '
1846
+ + 'typography, spacing, radius, shadow). Use to reference '
1847
+ + '--color-* / --font-* / --space-* in CSS; do NOT '
1848
+ + 'hardcode hex / px / font names.',
1849
+ schema: { type: 'object', properties: {}, required: [] },
1850
+ policy: 'unrestricted',
1851
+ side_effects: ['none'],
1852
+ visible: false,
1853
+ handler_side: 'server',
1854
+ },
1855
+ {
1856
+ id: 'yujin.agent.delegate',
1857
+ role: 'action',
1858
+ action: 'delegate_to_agent',
1859
+ label: 'Delegar trabajo a otro agente via bridge',
1860
+ description: 'Director sprint slice 15d. Send a payload to another '
1861
+ + 'agent (must be in your can_call whitelist) via the '
1862
+ + 'inter-agent bridge + wait for its run result. The bridge '
1863
+ + 'cap + loop detector apply. Use when you (the agent) need '
1864
+ + 'another role to do something (Director delegates extraction '
1865
+ + 'to Analyst, etc).',
1866
+ schema: {
1867
+ type: 'object',
1868
+ properties: {
1869
+ to_slug: { type: 'string', description: 'Target agent slug (kebab-case).', minLength: 1, maxLength: 60 },
1870
+ payload: { type: 'string', description: 'The work request. Becomes the target trigger_reason.', minLength: 1, maxLength: 4000 },
1871
+ tokens_used: { type: 'number', description: 'Approx tokens spent producing the payload. Used by the bridge cap.' },
1872
+ },
1873
+ required: ['to_slug', 'payload'],
1874
+ },
1875
+ policy: 'unrestricted',
1876
+ side_effects: ['none'],
1877
+ visible: false,
1878
+ handler_side: 'server',
1879
+ },
1880
+ {
1881
+ id: 'yujin.design.override',
1882
+ role: 'action',
1883
+ action: 'override_design_system',
1884
+ label: 'Override del design system default (R8 modal)',
1885
+ description: 'Persist a per-tenant override away from Yujin Design '
1886
+ + 'System. The user must EXPLICITLY ask ("usa shadcn", '
1887
+ + '"use Material"). Opens an R8 modal; on approve, the '
1888
+ + 'override stays in tenant_config.design_override + '
1889
+ + 'subsequent turns honor the new system.',
1890
+ schema: {
1891
+ type: 'object',
1892
+ properties: {
1893
+ system_id: { type: 'string', description: 'Override id, e.g. "shadcn", "material", "tailwind-only".', minLength: 1, maxLength: 60 },
1894
+ reason: { type: 'string', description: 'Why the user wants to override Yujin DS.', minLength: 1, maxLength: 300 },
1895
+ },
1896
+ required: ['system_id', 'reason'],
1897
+ },
1898
+ policy: 'approval-required',
1899
+ side_effects: ['filesystem'],
1900
+ visible: false,
1901
+ handler_side: 'server',
1902
+ },
1725
1903
  ];
1726
1904
  /* ============================================================
1727
1905
  * Public API