@nac3/forge-cli 0.2.0-alpha.9 → 1.0.0

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 (1157) hide show
  1. package/README.md +21 -2
  2. package/dist/a11y/helpers.d.ts +88 -0
  3. package/dist/a11y/helpers.d.ts.map +1 -0
  4. package/dist/a11y/helpers.js +109 -0
  5. package/dist/a11y/helpers.js.map +1 -0
  6. package/dist/agents/bridge.d.ts +69 -0
  7. package/dist/agents/bridge.d.ts.map +1 -0
  8. package/dist/agents/bridge.js +322 -0
  9. package/dist/agents/bridge.js.map +1 -0
  10. package/dist/agents/cli_real.d.ts +38 -0
  11. package/dist/agents/cli_real.d.ts.map +1 -0
  12. package/dist/agents/cli_real.js +46 -0
  13. package/dist/agents/cli_real.js.map +1 -0
  14. package/dist/agents/config_resolver.d.ts +16 -0
  15. package/dist/agents/config_resolver.d.ts.map +1 -0
  16. package/dist/agents/config_resolver.js +133 -0
  17. package/dist/agents/config_resolver.js.map +1 -0
  18. package/dist/agents/config_schema.d.ts +42 -0
  19. package/dist/agents/config_schema.d.ts.map +1 -0
  20. package/dist/agents/config_schema.js +220 -0
  21. package/dist/agents/config_schema.js.map +1 -0
  22. package/dist/agents/defaults.d.ts +21 -0
  23. package/dist/agents/defaults.d.ts.map +1 -0
  24. package/dist/agents/defaults.js +56 -0
  25. package/dist/agents/defaults.js.map +1 -0
  26. package/dist/agents/delegate.d.ts +36 -0
  27. package/dist/agents/delegate.d.ts.map +1 -0
  28. package/dist/agents/delegate.js +68 -0
  29. package/dist/agents/delegate.js.map +1 -0
  30. package/dist/agents/iterative_step.d.ts +95 -0
  31. package/dist/agents/iterative_step.d.ts.map +1 -0
  32. package/dist/agents/iterative_step.js +249 -0
  33. package/dist/agents/iterative_step.js.map +1 -0
  34. package/dist/agents/llm_step.d.ts +50 -0
  35. package/dist/agents/llm_step.d.ts.map +1 -0
  36. package/dist/agents/llm_step.js +28 -0
  37. package/dist/agents/llm_step.js.map +1 -0
  38. package/dist/agents/real_step_factory.d.ts +95 -0
  39. package/dist/agents/real_step_factory.d.ts.map +1 -0
  40. package/dist/agents/real_step_factory.js +51 -0
  41. package/dist/agents/real_step_factory.js.map +1 -0
  42. package/dist/agents/runner.d.ts +116 -0
  43. package/dist/agents/runner.d.ts.map +1 -0
  44. package/dist/agents/runner.js +221 -0
  45. package/dist/agents/runner.js.map +1 -0
  46. package/dist/agents/runtime.d.ts +115 -0
  47. package/dist/agents/runtime.d.ts.map +1 -0
  48. package/dist/agents/runtime.js +429 -0
  49. package/dist/agents/runtime.js.map +1 -0
  50. package/dist/agents/store.d.ts +33 -0
  51. package/dist/agents/store.d.ts.map +1 -0
  52. package/dist/agents/store.js +210 -0
  53. package/dist/agents/store.js.map +1 -0
  54. package/dist/agents/system_prompt.d.ts +36 -0
  55. package/dist/agents/system_prompt.d.ts.map +1 -0
  56. package/dist/agents/system_prompt.js +102 -0
  57. package/dist/agents/system_prompt.js.map +1 -0
  58. package/dist/agents/types.d.ts +123 -0
  59. package/dist/agents/types.d.ts.map +1 -0
  60. package/dist/agents/types.js +39 -0
  61. package/dist/agents/types.js.map +1 -0
  62. package/dist/bin/yf.d.ts.map +1 -1
  63. package/dist/bin/yf.js +119 -2
  64. package/dist/bin/yf.js.map +1 -1
  65. package/dist/chat/claude.d.ts +102 -1
  66. package/dist/chat/claude.d.ts.map +1 -1
  67. package/dist/chat/claude.js +215 -40
  68. package/dist/chat/claude.js.map +1 -1
  69. package/dist/chat/claude_cli.d.ts +155 -0
  70. package/dist/chat/claude_cli.d.ts.map +1 -0
  71. package/dist/chat/claude_cli.js +679 -0
  72. package/dist/chat/claude_cli.js.map +1 -0
  73. package/dist/chat/completion_hallucination_detector.d.ts +51 -0
  74. package/dist/chat/completion_hallucination_detector.d.ts.map +1 -0
  75. package/dist/chat/completion_hallucination_detector.js +131 -0
  76. package/dist/chat/completion_hallucination_detector.js.map +1 -0
  77. package/dist/chat/doctrine_digest.d.ts +31 -0
  78. package/dist/chat/doctrine_digest.d.ts.map +1 -0
  79. package/dist/chat/doctrine_digest.js +121 -0
  80. package/dist/chat/doctrine_digest.js.map +1 -0
  81. package/dist/chat/graph_auto_ingest.d.ts +46 -0
  82. package/dist/chat/graph_auto_ingest.d.ts.map +1 -0
  83. package/dist/chat/graph_auto_ingest.js +177 -0
  84. package/dist/chat/graph_auto_ingest.js.map +1 -0
  85. package/dist/chat/graph_component_watcher.d.ts +34 -0
  86. package/dist/chat/graph_component_watcher.d.ts.map +1 -0
  87. package/dist/chat/graph_component_watcher.js +225 -0
  88. package/dist/chat/graph_component_watcher.js.map +1 -0
  89. package/dist/chat/graph_snapshot.d.ts +38 -0
  90. package/dist/chat/graph_snapshot.d.ts.map +1 -0
  91. package/dist/chat/graph_snapshot.js +159 -0
  92. package/dist/chat/graph_snapshot.js.map +1 -0
  93. package/dist/chat/ingest_session.d.ts +24 -4
  94. package/dist/chat/ingest_session.d.ts.map +1 -1
  95. package/dist/chat/ingest_session.js +143 -4
  96. package/dist/chat/ingest_session.js.map +1 -1
  97. package/dist/chat/panel.d.ts.map +1 -1
  98. package/dist/chat/panel.js +10483 -1455
  99. package/dist/chat/panel.js.map +1 -1
  100. package/dist/chat/panel_queue.d.ts +43 -0
  101. package/dist/chat/panel_queue.d.ts.map +1 -0
  102. package/dist/chat/panel_queue.js +46 -0
  103. package/dist/chat/panel_queue.js.map +1 -0
  104. package/dist/chat/project_context_inject.d.ts +10 -0
  105. package/dist/chat/project_context_inject.d.ts.map +1 -0
  106. package/dist/chat/project_context_inject.js +119 -0
  107. package/dist/chat/project_context_inject.js.map +1 -0
  108. package/dist/chat/project_slug.d.ts +17 -0
  109. package/dist/chat/project_slug.d.ts.map +1 -0
  110. package/dist/chat/project_slug.js +103 -0
  111. package/dist/chat/project_slug.js.map +1 -0
  112. package/dist/chat/refusal_detector.d.ts +14 -0
  113. package/dist/chat/refusal_detector.d.ts.map +1 -0
  114. package/dist/chat/refusal_detector.js +139 -0
  115. package/dist/chat/refusal_detector.js.map +1 -0
  116. package/dist/chat/semantic_graph_ingest.d.ts +39 -0
  117. package/dist/chat/semantic_graph_ingest.d.ts.map +1 -0
  118. package/dist/chat/semantic_graph_ingest.js +90 -0
  119. package/dist/chat/semantic_graph_ingest.js.map +1 -0
  120. package/dist/chat/semantic_graph_inject.d.ts +31 -0
  121. package/dist/chat/semantic_graph_inject.d.ts.map +1 -0
  122. package/dist/chat/semantic_graph_inject.js +63 -0
  123. package/dist/chat/semantic_graph_inject.js.map +1 -0
  124. package/dist/chat/server.d.ts +99 -2
  125. package/dist/chat/server.d.ts.map +1 -1
  126. package/dist/chat/server.js +4613 -452
  127. package/dist/chat/server.js.map +1 -1
  128. package/dist/chat/session_projects.d.ts +31 -0
  129. package/dist/chat/session_projects.d.ts.map +1 -0
  130. package/dist/chat/session_projects.js +36 -0
  131. package/dist/chat/session_projects.js.map +1 -0
  132. package/dist/chat/session_store.d.ts +32 -0
  133. package/dist/chat/session_store.d.ts.map +1 -0
  134. package/dist/chat/session_store.js +58 -0
  135. package/dist/chat/session_store.js.map +1 -0
  136. package/dist/chat/spec_extract.d.ts +1 -2
  137. package/dist/chat/spec_extract.d.ts.map +1 -1
  138. package/dist/chat/spec_extract.js +41 -56
  139. package/dist/chat/spec_extract.js.map +1 -1
  140. package/dist/chat/spec_plan.d.ts +1 -2
  141. package/dist/chat/spec_plan.d.ts.map +1 -1
  142. package/dist/chat/spec_plan.js +36 -57
  143. package/dist/chat/spec_plan.js.map +1 -1
  144. package/dist/chat/tooling_section.d.ts +11 -0
  145. package/dist/chat/tooling_section.d.ts.map +1 -0
  146. package/dist/chat/tooling_section.js +70 -0
  147. package/dist/chat/tooling_section.js.map +1 -0
  148. package/dist/chat/tools/app_backend_dispatch.d.ts +39 -0
  149. package/dist/chat/tools/app_backend_dispatch.d.ts.map +1 -0
  150. package/dist/chat/tools/app_backend_dispatch.js +282 -0
  151. package/dist/chat/tools/app_backend_dispatch.js.map +1 -0
  152. package/dist/chat/tools/fs_editor.d.ts +11 -0
  153. package/dist/chat/tools/fs_editor.d.ts.map +1 -0
  154. package/dist/chat/tools/fs_editor.js +212 -0
  155. package/dist/chat/tools/fs_editor.js.map +1 -0
  156. package/dist/chat/tools/git.d.ts +24 -0
  157. package/dist/chat/tools/git.d.ts.map +1 -1
  158. package/dist/chat/tools/git.js +78 -0
  159. package/dist/chat/tools/git.js.map +1 -1
  160. package/dist/chat/tools/graph.d.ts +43 -0
  161. package/dist/chat/tools/graph.d.ts.map +1 -0
  162. package/dist/chat/tools/graph.js +174 -0
  163. package/dist/chat/tools/graph.js.map +1 -0
  164. package/dist/chat/tools/keys.d.ts +9 -0
  165. package/dist/chat/tools/keys.d.ts.map +1 -0
  166. package/dist/chat/tools/keys.js +156 -0
  167. package/dist/chat/tools/keys.js.map +1 -0
  168. package/dist/chat/tools/misc_verbs.d.ts +36 -0
  169. package/dist/chat/tools/misc_verbs.d.ts.map +1 -0
  170. package/dist/chat/tools/misc_verbs.js +405 -0
  171. package/dist/chat/tools/misc_verbs.js.map +1 -0
  172. package/dist/chat/tools/nac3_invoke.d.ts +58 -0
  173. package/dist/chat/tools/nac3_invoke.d.ts.map +1 -0
  174. package/dist/chat/tools/nac3_invoke.js +896 -0
  175. package/dist/chat/tools/nac3_invoke.js.map +1 -0
  176. package/dist/chat/tools/pending.d.ts +69 -0
  177. package/dist/chat/tools/pending.d.ts.map +1 -0
  178. package/dist/chat/tools/pending.js +167 -0
  179. package/dist/chat/tools/pending.js.map +1 -0
  180. package/dist/chat/tools/pizarron.d.ts +40 -0
  181. package/dist/chat/tools/pizarron.d.ts.map +1 -0
  182. package/dist/chat/tools/pizarron.js +123 -0
  183. package/dist/chat/tools/pizarron.js.map +1 -0
  184. package/dist/chat/tools/project_lifecycle.d.ts +24 -0
  185. package/dist/chat/tools/project_lifecycle.d.ts.map +1 -0
  186. package/dist/chat/tools/project_lifecycle.js +212 -0
  187. package/dist/chat/tools/project_lifecycle.js.map +1 -0
  188. package/dist/chat/tools/reader.d.ts.map +1 -1
  189. package/dist/chat/tools/reader.js +144 -1
  190. package/dist/chat/tools/reader.js.map +1 -1
  191. package/dist/chat/tools/shell.d.ts +64 -0
  192. package/dist/chat/tools/shell.d.ts.map +1 -0
  193. package/dist/chat/tools/shell.js +292 -0
  194. package/dist/chat/tools/shell.js.map +1 -0
  195. package/dist/chat/tools/wiring.d.ts +28 -0
  196. package/dist/chat/tools/wiring.d.ts.map +1 -0
  197. package/dist/chat/tools/wiring.js +116 -0
  198. package/dist/chat/tools/wiring.js.map +1 -0
  199. package/dist/chat/tools/workflow.d.ts +75 -0
  200. package/dist/chat/tools/workflow.d.ts.map +1 -0
  201. package/dist/chat/tools/workflow.js +561 -0
  202. package/dist/chat/tools/workflow.js.map +1 -0
  203. package/dist/chat/tools.d.ts +42 -0
  204. package/dist/chat/tools.d.ts.map +1 -1
  205. package/dist/chat/tools.js +525 -16
  206. package/dist/chat/tools.js.map +1 -1
  207. package/dist/chat/turn_control.d.ts +42 -0
  208. package/dist/chat/turn_control.d.ts.map +1 -0
  209. package/dist/chat/turn_control.js +53 -0
  210. package/dist/chat/turn_control.js.map +1 -0
  211. package/dist/chat/wiring_inject.d.ts +18 -0
  212. package/dist/chat/wiring_inject.d.ts.map +1 -0
  213. package/dist/chat/wiring_inject.js +78 -0
  214. package/dist/chat/wiring_inject.js.map +1 -0
  215. package/dist/chat/workflow_inject.d.ts +52 -0
  216. package/dist/chat/workflow_inject.d.ts.map +1 -0
  217. package/dist/chat/workflow_inject.js +346 -0
  218. package/dist/chat/workflow_inject.js.map +1 -0
  219. package/dist/chat/yujin_splash.d.ts +27 -0
  220. package/dist/chat/yujin_splash.d.ts.map +1 -0
  221. package/dist/chat/yujin_splash.js +147 -0
  222. package/dist/chat/yujin_splash.js.map +1 -0
  223. package/dist/commands/agent.d.ts +33 -0
  224. package/dist/commands/agent.d.ts.map +1 -0
  225. package/dist/commands/agent.js +281 -0
  226. package/dist/commands/agent.js.map +1 -0
  227. package/dist/commands/approve.d.ts +32 -0
  228. package/dist/commands/approve.d.ts.map +1 -0
  229. package/dist/commands/approve.js +198 -0
  230. package/dist/commands/approve.js.map +1 -0
  231. package/dist/commands/block.d.ts +28 -0
  232. package/dist/commands/block.d.ts.map +1 -0
  233. package/dist/commands/block.js +189 -0
  234. package/dist/commands/block.js.map +1 -0
  235. package/dist/commands/bootstrap.d.ts +35 -0
  236. package/dist/commands/bootstrap.d.ts.map +1 -0
  237. package/dist/commands/bootstrap.js +205 -0
  238. package/dist/commands/bootstrap.js.map +1 -0
  239. package/dist/commands/brain.d.ts +17 -0
  240. package/dist/commands/brain.d.ts.map +1 -0
  241. package/dist/commands/brain.js +129 -0
  242. package/dist/commands/brain.js.map +1 -0
  243. package/dist/commands/chat.d.ts +10 -0
  244. package/dist/commands/chat.d.ts.map +1 -1
  245. package/dist/commands/chat.js +265 -22
  246. package/dist/commands/chat.js.map +1 -1
  247. package/dist/commands/clarify.d.ts +30 -0
  248. package/dist/commands/clarify.d.ts.map +1 -0
  249. package/dist/commands/clarify.js +671 -0
  250. package/dist/commands/clarify.js.map +1 -0
  251. package/dist/commands/director.d.ts +37 -0
  252. package/dist/commands/director.d.ts.map +1 -0
  253. package/dist/commands/director.js +290 -0
  254. package/dist/commands/director.js.map +1 -0
  255. package/dist/commands/discover.d.ts +30 -0
  256. package/dist/commands/discover.d.ts.map +1 -0
  257. package/dist/commands/discover.js +178 -0
  258. package/dist/commands/discover.js.map +1 -0
  259. package/dist/commands/doctor.d.ts +18 -0
  260. package/dist/commands/doctor.d.ts.map +1 -1
  261. package/dist/commands/doctor.js +120 -4
  262. package/dist/commands/doctor.js.map +1 -1
  263. package/dist/commands/doctrine.d.ts +24 -0
  264. package/dist/commands/doctrine.d.ts.map +1 -0
  265. package/dist/commands/doctrine.js +106 -0
  266. package/dist/commands/doctrine.js.map +1 -0
  267. package/dist/commands/doctrines.d.ts +21 -0
  268. package/dist/commands/doctrines.d.ts.map +1 -0
  269. package/dist/commands/doctrines.js +158 -0
  270. package/dist/commands/doctrines.js.map +1 -0
  271. package/dist/commands/graph.d.ts +29 -0
  272. package/dist/commands/graph.d.ts.map +1 -0
  273. package/dist/commands/graph.js +362 -0
  274. package/dist/commands/graph.js.map +1 -0
  275. package/dist/commands/keys_setup.d.ts +11 -11
  276. package/dist/commands/keys_setup.d.ts.map +1 -1
  277. package/dist/commands/keys_setup.js +149 -109
  278. package/dist/commands/keys_setup.js.map +1 -1
  279. package/dist/commands/legacy-audit.d.ts +34 -0
  280. package/dist/commands/legacy-audit.d.ts.map +1 -0
  281. package/dist/commands/legacy-audit.js +270 -0
  282. package/dist/commands/legacy-audit.js.map +1 -0
  283. package/dist/commands/lessons.d.ts +28 -0
  284. package/dist/commands/lessons.d.ts.map +1 -0
  285. package/dist/commands/lessons.js +309 -0
  286. package/dist/commands/lessons.js.map +1 -0
  287. package/dist/commands/license.d.ts.map +1 -1
  288. package/dist/commands/license.js +94 -15
  289. package/dist/commands/license.js.map +1 -1
  290. package/dist/commands/limits.d.ts +15 -0
  291. package/dist/commands/limits.d.ts.map +1 -0
  292. package/dist/commands/limits.js +51 -0
  293. package/dist/commands/limits.js.map +1 -0
  294. package/dist/commands/manifest-cli.d.ts +12 -0
  295. package/dist/commands/manifest-cli.d.ts.map +1 -0
  296. package/dist/commands/manifest-cli.js +42 -0
  297. package/dist/commands/manifest-cli.js.map +1 -0
  298. package/dist/commands/mcp.d.ts +24 -0
  299. package/dist/commands/mcp.d.ts.map +1 -0
  300. package/dist/commands/mcp.js +219 -0
  301. package/dist/commands/mcp.js.map +1 -0
  302. package/dist/commands/mobile.d.ts +15 -0
  303. package/dist/commands/mobile.d.ts.map +1 -1
  304. package/dist/commands/mobile.js +50 -43
  305. package/dist/commands/mobile.js.map +1 -1
  306. package/dist/commands/nac3.d.ts +22 -0
  307. package/dist/commands/nac3.d.ts.map +1 -0
  308. package/dist/commands/nac3.js +125 -0
  309. package/dist/commands/nac3.js.map +1 -0
  310. package/dist/commands/onboard.d.ts +19 -0
  311. package/dist/commands/onboard.d.ts.map +1 -0
  312. package/dist/commands/onboard.js +126 -0
  313. package/dist/commands/onboard.js.map +1 -0
  314. package/dist/commands/operate.d.ts +22 -0
  315. package/dist/commands/operate.d.ts.map +1 -0
  316. package/dist/commands/operate.js +523 -0
  317. package/dist/commands/operate.js.map +1 -0
  318. package/dist/commands/pending.d.ts +22 -0
  319. package/dist/commands/pending.d.ts.map +1 -0
  320. package/dist/commands/pending.js +365 -0
  321. package/dist/commands/pending.js.map +1 -0
  322. package/dist/commands/projects.js +25 -1
  323. package/dist/commands/projects.js.map +1 -1
  324. package/dist/commands/qa.d.ts +24 -0
  325. package/dist/commands/qa.d.ts.map +1 -0
  326. package/dist/commands/qa.js +349 -0
  327. package/dist/commands/qa.js.map +1 -0
  328. package/dist/commands/review-screens.js +28 -1
  329. package/dist/commands/review-screens.js.map +1 -1
  330. package/dist/commands/spec.d.ts +38 -0
  331. package/dist/commands/spec.d.ts.map +1 -0
  332. package/dist/commands/spec.js +256 -0
  333. package/dist/commands/spec.js.map +1 -0
  334. package/dist/commands/support.d.ts +22 -0
  335. package/dist/commands/support.d.ts.map +1 -0
  336. package/dist/commands/support.js +165 -0
  337. package/dist/commands/support.js.map +1 -0
  338. package/dist/commands/test_agent.d.ts +22 -0
  339. package/dist/commands/test_agent.d.ts.map +1 -0
  340. package/dist/commands/test_agent.js +100 -0
  341. package/dist/commands/test_agent.js.map +1 -0
  342. package/dist/commands/triage.d.ts +34 -0
  343. package/dist/commands/triage.d.ts.map +1 -0
  344. package/dist/commands/triage.js +228 -0
  345. package/dist/commands/triage.js.map +1 -0
  346. package/dist/commands/vault-inventory.d.ts +30 -0
  347. package/dist/commands/vault-inventory.d.ts.map +1 -0
  348. package/dist/commands/vault-inventory.js +222 -0
  349. package/dist/commands/vault-inventory.js.map +1 -0
  350. package/dist/commands/vault.d.ts.map +1 -1
  351. package/dist/commands/vault.js +5 -0
  352. package/dist/commands/vault.js.map +1 -1
  353. package/dist/commands/voice.d.ts.map +1 -1
  354. package/dist/commands/voice.js +47 -4
  355. package/dist/commands/voice.js.map +1 -1
  356. package/dist/commands/wiring.d.ts +19 -0
  357. package/dist/commands/wiring.d.ts.map +1 -0
  358. package/dist/commands/wiring.js +135 -0
  359. package/dist/commands/wiring.js.map +1 -0
  360. package/dist/commands/workflow-coverage.d.ts +30 -0
  361. package/dist/commands/workflow-coverage.d.ts.map +1 -0
  362. package/dist/commands/workflow-coverage.js +138 -0
  363. package/dist/commands/workflow-coverage.js.map +1 -0
  364. package/dist/commands/workflow.d.ts +18 -0
  365. package/dist/commands/workflow.d.ts.map +1 -0
  366. package/dist/commands/workflow.js +253 -0
  367. package/dist/commands/workflow.js.map +1 -0
  368. package/dist/core/ansi_strip.d.ts +39 -0
  369. package/dist/core/ansi_strip.d.ts.map +1 -0
  370. package/dist/core/ansi_strip.js +71 -0
  371. package/dist/core/ansi_strip.js.map +1 -0
  372. package/dist/core/atomic_write.d.ts +17 -0
  373. package/dist/core/atomic_write.d.ts.map +1 -0
  374. package/dist/core/atomic_write.js +51 -0
  375. package/dist/core/atomic_write.js.map +1 -0
  376. package/dist/core/audit_log.d.ts +43 -0
  377. package/dist/core/audit_log.d.ts.map +1 -0
  378. package/dist/core/audit_log.js +80 -0
  379. package/dist/core/audit_log.js.map +1 -0
  380. package/dist/core/brain_config.d.ts +52 -0
  381. package/dist/core/brain_config.d.ts.map +1 -0
  382. package/dist/core/brain_config.js +157 -0
  383. package/dist/core/brain_config.js.map +1 -0
  384. package/dist/core/budget.d.ts +96 -0
  385. package/dist/core/budget.d.ts.map +1 -0
  386. package/dist/core/budget.js +328 -0
  387. package/dist/core/budget.js.map +1 -0
  388. package/dist/core/cf_tunnel.d.ts.map +1 -1
  389. package/dist/core/cf_tunnel.js +8 -2
  390. package/dist/core/cf_tunnel.js.map +1 -1
  391. package/dist/core/cost_meter.d.ts +35 -0
  392. package/dist/core/cost_meter.d.ts.map +1 -0
  393. package/dist/core/cost_meter.js +111 -0
  394. package/dist/core/cost_meter.js.map +1 -0
  395. package/dist/core/cost_router.d.ts +106 -0
  396. package/dist/core/cost_router.d.ts.map +1 -0
  397. package/dist/core/cost_router.js +598 -0
  398. package/dist/core/cost_router.js.map +1 -0
  399. package/dist/core/desktop_open.d.ts +16 -0
  400. package/dist/core/desktop_open.d.ts.map +1 -0
  401. package/dist/core/desktop_open.js +114 -0
  402. package/dist/core/desktop_open.js.map +1 -0
  403. package/dist/core/doctrine_resolver.d.ts +23 -0
  404. package/dist/core/doctrine_resolver.d.ts.map +1 -0
  405. package/dist/core/doctrine_resolver.js +108 -0
  406. package/dist/core/doctrine_resolver.js.map +1 -0
  407. package/dist/core/error_catalog.d.ts +80 -0
  408. package/dist/core/error_catalog.d.ts.map +1 -0
  409. package/dist/core/error_catalog.js +168 -0
  410. package/dist/core/error_catalog.js.map +1 -0
  411. package/dist/core/error_formatter.d.ts +30 -0
  412. package/dist/core/error_formatter.d.ts.map +1 -0
  413. package/dist/core/error_formatter.js +155 -0
  414. package/dist/core/error_formatter.js.map +1 -0
  415. package/dist/core/incomplete_detector.d.ts +51 -0
  416. package/dist/core/incomplete_detector.d.ts.map +1 -0
  417. package/dist/core/incomplete_detector.js +140 -0
  418. package/dist/core/incomplete_detector.js.map +1 -0
  419. package/dist/core/keys_envelope.d.ts.map +1 -1
  420. package/dist/core/keys_envelope.js +19 -10
  421. package/dist/core/keys_envelope.js.map +1 -1
  422. package/dist/core/learnings_client.d.ts +104 -0
  423. package/dist/core/learnings_client.d.ts.map +1 -0
  424. package/dist/core/learnings_client.js +262 -0
  425. package/dist/core/learnings_client.js.map +1 -0
  426. package/dist/core/limits_config.d.ts +81 -0
  427. package/dist/core/limits_config.d.ts.map +1 -0
  428. package/dist/core/limits_config.js +302 -0
  429. package/dist/core/limits_config.js.map +1 -0
  430. package/dist/core/logger.d.ts.map +1 -1
  431. package/dist/core/logger.js +3 -0
  432. package/dist/core/logger.js.map +1 -1
  433. package/dist/core/pairing.d.ts +7 -0
  434. package/dist/core/pairing.d.ts.map +1 -1
  435. package/dist/core/pairing.js +64 -14
  436. package/dist/core/pairing.js.map +1 -1
  437. package/dist/core/pilot_setup.d.ts +29 -3
  438. package/dist/core/pilot_setup.d.ts.map +1 -1
  439. package/dist/core/pilot_setup.js +130 -3
  440. package/dist/core/pilot_setup.js.map +1 -1
  441. package/dist/core/provider_keys.d.ts +35 -0
  442. package/dist/core/provider_keys.d.ts.map +1 -0
  443. package/dist/core/provider_keys.js +280 -0
  444. package/dist/core/provider_keys.js.map +1 -0
  445. package/dist/core/provider_models.d.ts +27 -0
  446. package/dist/core/provider_models.d.ts.map +1 -0
  447. package/dist/core/provider_models.js +169 -0
  448. package/dist/core/provider_models.js.map +1 -0
  449. package/dist/core/reasoning_gate.d.ts +72 -0
  450. package/dist/core/reasoning_gate.d.ts.map +1 -0
  451. package/dist/core/reasoning_gate.js +205 -0
  452. package/dist/core/reasoning_gate.js.map +1 -0
  453. package/dist/core/shell_classifier.d.ts +49 -0
  454. package/dist/core/shell_classifier.d.ts.map +1 -0
  455. package/dist/core/shell_classifier.js +159 -0
  456. package/dist/core/shell_classifier.js.map +1 -0
  457. package/dist/core/sq_resolver.d.ts +14 -0
  458. package/dist/core/sq_resolver.d.ts.map +1 -0
  459. package/dist/core/sq_resolver.js +230 -0
  460. package/dist/core/sq_resolver.js.map +1 -0
  461. package/dist/core/truncation_detector.d.ts +68 -0
  462. package/dist/core/truncation_detector.d.ts.map +1 -0
  463. package/dist/core/truncation_detector.js +115 -0
  464. package/dist/core/truncation_detector.js.map +1 -0
  465. package/dist/core/turn_classifier.d.ts +70 -0
  466. package/dist/core/turn_classifier.d.ts.map +1 -0
  467. package/dist/core/turn_classifier.js +324 -0
  468. package/dist/core/turn_classifier.js.map +1 -0
  469. package/dist/core/vad_config.d.ts +34 -0
  470. package/dist/core/vad_config.d.ts.map +1 -0
  471. package/dist/core/vad_config.js +95 -0
  472. package/dist/core/vad_config.js.map +1 -0
  473. package/dist/core/whats_new.d.ts +42 -0
  474. package/dist/core/whats_new.d.ts.map +1 -0
  475. package/dist/core/whats_new.js +214 -0
  476. package/dist/core/whats_new.js.map +1 -0
  477. package/dist/core/wizard_state.d.ts +15 -0
  478. package/dist/core/wizard_state.d.ts.map +1 -0
  479. package/dist/core/wizard_state.js +86 -0
  480. package/dist/core/wizard_state.js.map +1 -0
  481. package/dist/deploy/adapter.d.ts +93 -0
  482. package/dist/deploy/adapter.d.ts.map +1 -0
  483. package/dist/deploy/adapter.js +42 -0
  484. package/dist/deploy/adapter.js.map +1 -0
  485. package/dist/deploy/aws_adapter.d.ts +28 -0
  486. package/dist/deploy/aws_adapter.d.ts.map +1 -0
  487. package/dist/deploy/aws_adapter.js +98 -0
  488. package/dist/deploy/aws_adapter.js.map +1 -0
  489. package/dist/deploy/cloudflare.d.ts +24 -0
  490. package/dist/deploy/cloudflare.d.ts.map +1 -0
  491. package/dist/deploy/cloudflare.js +180 -0
  492. package/dist/deploy/cloudflare.js.map +1 -0
  493. package/dist/design/yujin_design_resolver.d.ts +93 -0
  494. package/dist/design/yujin_design_resolver.d.ts.map +1 -0
  495. package/dist/design/yujin_design_resolver.js +196 -0
  496. package/dist/design/yujin_design_resolver.js.map +1 -0
  497. package/dist/docs/LIMITED_RESPONSIBILITY.md +216 -0
  498. package/dist/docs/PRIVACY_POLICY.md +169 -0
  499. package/dist/docs/SQ.md +1397 -0
  500. package/dist/docs/SQ_BY_STEP.yaml +147 -0
  501. package/dist/docs/doctrine/accessibility.md +78 -0
  502. package/dist/docs/doctrine/agent-orchestrator.md +76 -0
  503. package/dist/docs/doctrine/byok-vs-managed.md +81 -0
  504. package/dist/docs/doctrine/cost-router-escalation.md +103 -0
  505. package/dist/docs/doctrine/default-design-system.md +152 -0
  506. package/dist/docs/doctrine/explain-results.md +90 -0
  507. package/dist/docs/doctrine/expo-eas-builds.md +177 -0
  508. package/dist/docs/doctrine/g-doc.md +46 -0
  509. package/dist/docs/doctrine/gates.md +21 -0
  510. package/dist/docs/doctrine/language-sovereignty.md +143 -0
  511. package/dist/docs/doctrine/lessons-workflow.md +68 -0
  512. package/dist/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
  513. package/dist/docs/doctrine/nac3-attrs.md +23 -0
  514. package/dist/docs/doctrine/office-tools.md +122 -0
  515. package/dist/docs/doctrine/pizarron.md +52 -0
  516. package/dist/docs/doctrine/r8-modal.md +60 -0
  517. package/dist/docs/doctrine/safety-refusals.md +73 -0
  518. package/dist/docs/doctrine/testing-policy.md +211 -0
  519. package/dist/docs/doctrine/verb-composition.md +84 -0
  520. package/dist/docs/doctrine/verification-honesty.md +95 -0
  521. package/dist/docs/doctrine/workflow-kinds.md +69 -0
  522. package/dist/docs/doctrine/workflow-phases.md +108 -0
  523. package/dist/docs/doctrine/workflow.md +66 -0
  524. package/dist/docs/doctrine/yf-commands.md +49 -0
  525. package/dist/json/query.d.ts +38 -0
  526. package/dist/json/query.d.ts.map +1 -0
  527. package/dist/json/query.js +177 -0
  528. package/dist/json/query.js.map +1 -0
  529. package/dist/license/auto_sync.d.ts +22 -0
  530. package/dist/license/auto_sync.d.ts.map +1 -0
  531. package/dist/license/auto_sync.js +91 -0
  532. package/dist/license/auto_sync.js.map +1 -0
  533. package/dist/license/handle_key.d.ts +32 -0
  534. package/dist/license/handle_key.d.ts.map +1 -0
  535. package/dist/license/handle_key.js +56 -0
  536. package/dist/license/handle_key.js.map +1 -0
  537. package/dist/license/hito4_client.d.ts +7 -0
  538. package/dist/license/hito4_client.d.ts.map +1 -1
  539. package/dist/license/hito4_client.js +113 -25
  540. package/dist/license/hito4_client.js.map +1 -1
  541. package/dist/license/sync.d.ts +59 -0
  542. package/dist/license/sync.d.ts.map +1 -0
  543. package/dist/license/sync.js +148 -0
  544. package/dist/license/sync.js.map +1 -0
  545. package/dist/llm/cohere_client.d.ts +81 -0
  546. package/dist/llm/cohere_client.d.ts.map +1 -0
  547. package/dist/llm/cohere_client.js +195 -0
  548. package/dist/llm/cohere_client.js.map +1 -0
  549. package/dist/llm/deepseek_client.d.ts +63 -0
  550. package/dist/llm/deepseek_client.d.ts.map +1 -0
  551. package/dist/llm/deepseek_client.js +188 -0
  552. package/dist/llm/deepseek_client.js.map +1 -0
  553. package/dist/llm/gemini_client.d.ts +78 -0
  554. package/dist/llm/gemini_client.d.ts.map +1 -0
  555. package/dist/llm/gemini_client.js +192 -0
  556. package/dist/llm/gemini_client.js.map +1 -0
  557. package/dist/llm/managed_client.d.ts +70 -0
  558. package/dist/llm/managed_client.d.ts.map +1 -0
  559. package/dist/llm/managed_client.js +256 -0
  560. package/dist/llm/managed_client.js.map +1 -0
  561. package/dist/llm/mistral_client.d.ts +54 -0
  562. package/dist/llm/mistral_client.d.ts.map +1 -0
  563. package/dist/llm/mistral_client.js +174 -0
  564. package/dist/llm/mistral_client.js.map +1 -0
  565. package/dist/llm/multi_provider_client.d.ts +57 -0
  566. package/dist/llm/multi_provider_client.d.ts.map +1 -0
  567. package/dist/llm/multi_provider_client.js +109 -0
  568. package/dist/llm/multi_provider_client.js.map +1 -0
  569. package/dist/llm/openai_client.d.ts +77 -0
  570. package/dist/llm/openai_client.d.ts.map +1 -0
  571. package/dist/llm/openai_client.js +200 -0
  572. package/dist/llm/openai_client.js.map +1 -0
  573. package/dist/llm/xai_client.d.ts +51 -0
  574. package/dist/llm/xai_client.d.ts.map +1 -0
  575. package/dist/llm/xai_client.js +174 -0
  576. package/dist/llm/xai_client.js.map +1 -0
  577. package/dist/mcp/blocklist.d.ts +19 -0
  578. package/dist/mcp/blocklist.d.ts.map +1 -0
  579. package/dist/mcp/blocklist.js +118 -0
  580. package/dist/mcp/blocklist.js.map +1 -0
  581. package/dist/mcp/bridge_registry.d.ts +77 -0
  582. package/dist/mcp/bridge_registry.d.ts.map +1 -0
  583. package/dist/mcp/bridge_registry.js +220 -0
  584. package/dist/mcp/bridge_registry.js.map +1 -0
  585. package/dist/mcp/config.d.ts +25 -0
  586. package/dist/mcp/config.d.ts.map +1 -0
  587. package/dist/mcp/config.js +116 -0
  588. package/dist/mcp/config.js.map +1 -0
  589. package/dist/mcp/forge_panel_server.d.ts +46 -0
  590. package/dist/mcp/forge_panel_server.d.ts.map +1 -0
  591. package/dist/mcp/forge_panel_server.js +166 -0
  592. package/dist/mcp/forge_panel_server.js.map +1 -0
  593. package/dist/mcp/lan_scan.d.ts +36 -0
  594. package/dist/mcp/lan_scan.d.ts.map +1 -0
  595. package/dist/mcp/lan_scan.js +130 -0
  596. package/dist/mcp/lan_scan.js.map +1 -0
  597. package/dist/mcp/plan_bridges.d.ts +17 -0
  598. package/dist/mcp/plan_bridges.d.ts.map +1 -0
  599. package/dist/mcp/plan_bridges.js +119 -0
  600. package/dist/mcp/plan_bridges.js.map +1 -0
  601. package/dist/mcp/protocol_client.d.ts +63 -0
  602. package/dist/mcp/protocol_client.d.ts.map +1 -0
  603. package/dist/mcp/protocol_client.js +340 -0
  604. package/dist/mcp/protocol_client.js.map +1 -0
  605. package/dist/mcp/state.d.ts +38 -0
  606. package/dist/mcp/state.d.ts.map +1 -0
  607. package/dist/mcp/state.js +144 -0
  608. package/dist/mcp/state.js.map +1 -0
  609. package/dist/migrate/ai-apply.d.ts.map +1 -1
  610. package/dist/migrate/ai-apply.js +25 -2
  611. package/dist/migrate/ai-apply.js.map +1 -1
  612. package/dist/migrate/ai-decorator.d.ts.map +1 -1
  613. package/dist/migrate/ai-decorator.js +55 -143
  614. package/dist/migrate/ai-decorator.js.map +1 -1
  615. package/dist/nac3/approval_queue.d.ts +44 -0
  616. package/dist/nac3/approval_queue.d.ts.map +1 -0
  617. package/dist/nac3/approval_queue.js +105 -0
  618. package/dist/nac3/approval_queue.js.map +1 -0
  619. package/dist/nac3/backend_tools.d.ts +89 -0
  620. package/dist/nac3/backend_tools.d.ts.map +1 -0
  621. package/dist/nac3/backend_tools.js +271 -0
  622. package/dist/nac3/backend_tools.js.map +1 -0
  623. package/dist/nac3/dispatch_log.d.ts +35 -0
  624. package/dist/nac3/dispatch_log.d.ts.map +1 -0
  625. package/dist/nac3/dispatch_log.js +126 -0
  626. package/dist/nac3/dispatch_log.js.map +1 -0
  627. package/dist/nac3/internal_manifest.d.ts +62 -0
  628. package/dist/nac3/internal_manifest.d.ts.map +1 -0
  629. package/dist/nac3/internal_manifest.js +2651 -0
  630. package/dist/nac3/internal_manifest.js.map +1 -0
  631. package/dist/nac3/manifest_lazy.d.ts +71 -0
  632. package/dist/nac3/manifest_lazy.d.ts.map +1 -0
  633. package/dist/nac3/manifest_lazy.js +141 -0
  634. package/dist/nac3/manifest_lazy.js.map +1 -0
  635. package/dist/nac3/verb_tier_map.d.ts +80 -0
  636. package/dist/nac3/verb_tier_map.d.ts.map +1 -0
  637. package/dist/nac3/verb_tier_map.js +162 -0
  638. package/dist/nac3/verb_tier_map.js.map +1 -0
  639. package/dist/office/excel.d.ts +132 -0
  640. package/dist/office/excel.d.ts.map +1 -0
  641. package/dist/office/excel.js +358 -0
  642. package/dist/office/excel.js.map +1 -0
  643. package/dist/office/pdf.d.ts +35 -0
  644. package/dist/office/pdf.d.ts.map +1 -0
  645. package/dist/office/pdf.js +70 -0
  646. package/dist/office/pdf.js.map +1 -0
  647. package/dist/office/word.d.ts +64 -0
  648. package/dist/office/word.d.ts.map +1 -0
  649. package/dist/office/word.js +243 -0
  650. package/dist/office/word.js.map +1 -0
  651. package/dist/onboarding/concierge_client.d.ts +34 -0
  652. package/dist/onboarding/concierge_client.d.ts.map +1 -0
  653. package/dist/onboarding/concierge_client.js +80 -0
  654. package/dist/onboarding/concierge_client.js.map +1 -0
  655. package/dist/onboarding/next_step.d.ts +32 -0
  656. package/dist/onboarding/next_step.d.ts.map +1 -0
  657. package/dist/onboarding/next_step.js +60 -0
  658. package/dist/onboarding/next_step.js.map +1 -0
  659. package/dist/pending/store.d.ts +79 -0
  660. package/dist/pending/store.d.ts.map +1 -0
  661. package/dist/pending/store.js +293 -0
  662. package/dist/pending/store.js.map +1 -0
  663. package/dist/pending/types.d.ts +131 -0
  664. package/dist/pending/types.d.ts.map +1 -0
  665. package/dist/pending/types.js +60 -0
  666. package/dist/pending/types.js.map +1 -0
  667. package/dist/qa/brain_matrix/ab_runner.d.ts +44 -0
  668. package/dist/qa/brain_matrix/ab_runner.d.ts.map +1 -0
  669. package/dist/qa/brain_matrix/ab_runner.js +144 -0
  670. package/dist/qa/brain_matrix/ab_runner.js.map +1 -0
  671. package/dist/qa/brain_matrix/brains.json +80 -0
  672. package/dist/qa/brain_matrix/compare.d.ts +27 -0
  673. package/dist/qa/brain_matrix/compare.d.ts.map +1 -0
  674. package/dist/qa/brain_matrix/compare.js +122 -0
  675. package/dist/qa/brain_matrix/compare.js.map +1 -0
  676. package/dist/qa/brain_matrix/fake_brain.d.ts +36 -0
  677. package/dist/qa/brain_matrix/fake_brain.d.ts.map +1 -0
  678. package/dist/qa/brain_matrix/fake_brain.js +27 -0
  679. package/dist/qa/brain_matrix/fake_brain.js.map +1 -0
  680. package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_intent.json +22 -0
  681. package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_no_speak_default.json +23 -0
  682. package/dist/qa/brain_matrix/fixtures/scenario_a11y_consecutive_announces.json +37 -0
  683. package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_action.json +22 -0
  684. package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
  685. package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
  686. package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_with_shortcut.json +22 -0
  687. package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
  688. package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
  689. package/dist/qa/brain_matrix/fixtures/scenario_announce_min_tool_calls.json +23 -0
  690. package/dist/qa/brain_matrix/fixtures/scenario_app_invoke_happy_path.json +65 -0
  691. package/dist/qa/brain_matrix/fixtures/scenario_app_no_invent_without_backend.json +18 -0
  692. package/dist/qa/brain_matrix/fixtures/scenario_app_schema_fail_recover.json +48 -0
  693. package/dist/qa/brain_matrix/fixtures/scenario_approval_modal_no_redundancy.json +21 -0
  694. package/dist/qa/brain_matrix/fixtures/scenario_args_redacted_in_audit.json +17 -0
  695. package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent.json +19 -0
  696. package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent_en.json +19 -0
  697. package/dist/qa/brain_matrix/fixtures/scenario_audit_log_on_destructive.json +18 -0
  698. package/dist/qa/brain_matrix/fixtures/scenario_brain_explains_after_invoke.json +28 -0
  699. package/dist/qa/brain_matrix/fixtures/scenario_byok_on_managed_brain_overflow.json +28 -0
  700. package/dist/qa/brain_matrix/fixtures/scenario_byok_required_policy.json +35 -0
  701. package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
  702. package/dist/qa/brain_matrix/fixtures/scenario_concise_no_loop.json +23 -0
  703. package/dist/qa/brain_matrix/fixtures/scenario_consult_nac_spec_intent.json +19 -0
  704. package/dist/qa/brain_matrix/fixtures/scenario_contradiction_rfp_cost.json +38 -0
  705. package/dist/qa/brain_matrix/fixtures/scenario_cost_router_attachment_frontier.json +24 -0
  706. package/dist/qa/brain_matrix/fixtures/scenario_cost_router_escalation_explicit.json +23 -0
  707. package/dist/qa/brain_matrix/fixtures/scenario_cost_router_idle_reset.json +24 -0
  708. package/dist/qa/brain_matrix/fixtures/scenario_csv_via_excel_read.json +22 -0
  709. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
  710. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
  711. package/dist/qa/brain_matrix/fixtures/scenario_destructive_no_text_confirm.json +20 -0
  712. package/dist/qa/brain_matrix/fixtures/scenario_diff_explains_changes.json +32 -0
  713. package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
  714. package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
  715. package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
  716. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_after_unknown_intent.json +17 -0
  717. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_a11y.json +24 -0
  718. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_agent_orchestrator.json +24 -0
  719. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_byok_vs_managed.json +24 -0
  720. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_cost_router.json +24 -0
  721. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
  722. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_g_doc.json +24 -0
  723. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_gates.json +23 -0
  724. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_intent_en.json +19 -0
  725. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
  726. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_lessons_workflow.json +24 -0
  727. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_mcp_lifecycle.json +24 -0
  728. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_nac3_attrs.json +24 -0
  729. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_office.json +24 -0
  730. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_pizarron.json +23 -0
  731. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_r8_modal.json +23 -0
  732. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
  733. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow.json +23 -0
  734. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow_phases.json +24 -0
  735. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_yf_commands.json +24 -0
  736. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_explain_results.json +22 -0
  737. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_safety_refusals.json +22 -0
  738. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_verb_composition.json +22 -0
  739. package/dist/qa/brain_matrix/fixtures/scenario_eco_defers_complex.json +17 -0
  740. package/dist/qa/brain_matrix/fixtures/scenario_eco_short_query.json +27 -0
  741. package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent.json +20 -0
  742. package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent_en.json +20 -0
  743. package/dist/qa/brain_matrix/fixtures/scenario_env_no_secret_leak.json +21 -0
  744. package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression.json +35 -0
  745. package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression_en.json +21 -0
  746. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_handles_csv_refusal.json +28 -0
  747. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent.json +20 -0
  748. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent_en.json +20 -0
  749. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_then_list.json +34 -0
  750. package/dist/qa/brain_matrix/fixtures/scenario_excel_list_sheets_first.json +22 -0
  751. package/dist/qa/brain_matrix/fixtures/scenario_excel_sheet_named.json +23 -0
  752. package/dist/qa/brain_matrix/fixtures/scenario_explain_voice_yes.json +22 -0
  753. package/dist/qa/brain_matrix/fixtures/scenario_explains_forge_error.json +39 -0
  754. package/dist/qa/brain_matrix/fixtures/scenario_focus_after_modal_open.json +29 -0
  755. package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent.json +21 -0
  756. package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent_en.json +20 -0
  757. package/dist/qa/brain_matrix/fixtures/scenario_fs_find_with_glob.json +22 -0
  758. package/dist/qa/brain_matrix/fixtures/scenario_fs_mkdir_intent.json +20 -0
  759. package/dist/qa/brain_matrix/fixtures/scenario_fs_move_intent.json +20 -0
  760. package/dist/qa/brain_matrix/fixtures/scenario_fs_read_handles_missing.json +28 -0
  761. package/dist/qa/brain_matrix/fixtures/scenario_fs_stat_before_read.json +22 -0
  762. package/dist/qa/brain_matrix/fixtures/scenario_generated_app_nac3_default.json +24 -0
  763. package/dist/qa/brain_matrix/fixtures/scenario_git_branch_list_intent.json +20 -0
  764. package/dist/qa/brain_matrix/fixtures/scenario_git_diff_intent.json +20 -0
  765. package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent.json +20 -0
  766. package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent_en.json +20 -0
  767. package/dist/qa/brain_matrix/fixtures/scenario_git_pull_intent.json +19 -0
  768. package/dist/qa/brain_matrix/fixtures/scenario_git_push_intent.json +20 -0
  769. package/dist/qa/brain_matrix/fixtures/scenario_git_show_metadata_only.json +22 -0
  770. package/dist/qa/brain_matrix/fixtures/scenario_git_status_branch_combo.json +44 -0
  771. package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent.json +20 -0
  772. package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent_en.json +20 -0
  773. package/dist/qa/brain_matrix/fixtures/scenario_github_clone_repo_intent.json +20 -0
  774. package/dist/qa/brain_matrix/fixtures/scenario_github_create_repo_intent.json +20 -0
  775. package/dist/qa/brain_matrix/fixtures/scenario_id_format_in_reply.json +27 -0
  776. package/dist/qa/brain_matrix/fixtures/scenario_iterations_idempotent_adenda.json +27 -0
  777. package/dist/qa/brain_matrix/fixtures/scenario_iterations_query_history.json +29 -0
  778. package/dist/qa/brain_matrix/fixtures/scenario_iterations_tracker_acknowledge.json +28 -0
  779. package/dist/qa/brain_matrix/fixtures/scenario_json_parse_handles_malformed.json +34 -0
  780. package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent.json +30 -0
  781. package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent_en.json +30 -0
  782. package/dist/qa/brain_matrix/fixtures/scenario_json_query_extract.json +23 -0
  783. package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent.json +20 -0
  784. package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent_en.json +20 -0
  785. package/dist/qa/brain_matrix/fixtures/scenario_keys_set_intent.json +20 -0
  786. package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent.json +20 -0
  787. package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent_en.json +20 -0
  788. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
  789. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
  790. package/dist/qa/brain_matrix/fixtures/scenario_lazy_complex_verb.json +27 -0
  791. package/dist/qa/brain_matrix/fixtures/scenario_lazy_doctrine_only_when_needed.json +17 -0
  792. package/dist/qa/brain_matrix/fixtures/scenario_lazy_simple_verb.json +21 -0
  793. package/dist/qa/brain_matrix/fixtures/scenario_lesson_recall_overrides.json +22 -0
  794. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_restart_app_intent.json +19 -0
  795. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent.json +19 -0
  796. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent_en.json +19 -0
  797. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent.json +20 -0
  798. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent_en.json +20 -0
  799. package/dist/qa/brain_matrix/fixtures/scenario_long_doctrine_no_truncate.json +23 -0
  800. package/dist/qa/brain_matrix/fixtures/scenario_manifest_read_intent.json +19 -0
  801. package/dist/qa/brain_matrix/fixtures/scenario_manual_open_intent.json +19 -0
  802. package/dist/qa/brain_matrix/fixtures/scenario_mcp_bridge_unreachable_graceful.json +39 -0
  803. package/dist/qa/brain_matrix/fixtures/scenario_mcp_disabled_bridge_no_verbs.json +18 -0
  804. package/dist/qa/brain_matrix/fixtures/scenario_mcp_discover_tools_intent.json +19 -0
  805. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invariant_1_no_verbs.json +19 -0
  806. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
  807. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
  808. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
  809. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_two_hop.json +68 -0
  810. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_with_auth_loaded.json +76 -0
  811. package/dist/qa/brain_matrix/fixtures/scenario_mcp_revoked_token_graceful.json +33 -0
  812. package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_intent.json +21 -0
  813. package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_no_token_arg.json +27 -0
  814. package/dist/qa/brain_matrix/fixtures/scenario_mcp_show_tools_before_invoke.json +44 -0
  815. package/dist/qa/brain_matrix/fixtures/scenario_mcp_toggle_intent.json +20 -0
  816. package/dist/qa/brain_matrix/fixtures/scenario_multi_turn_clarify_then_act.json +24 -0
  817. package/dist/qa/brain_matrix/fixtures/scenario_nac3_attrs_doctrine.json +53 -0
  818. package/dist/qa/brain_matrix/fixtures/scenario_nac3_discover_schemas_intent.json +19 -0
  819. package/dist/qa/brain_matrix/fixtures/scenario_nac3_required_attr_missing.json +19 -0
  820. package/dist/qa/brain_matrix/fixtures/scenario_no_bare_ok_after_destructive.json +27 -0
  821. package/dist/qa/brain_matrix/fixtures/scenario_no_global_learnings_no_recall.json +20 -0
  822. package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
  823. package/dist/qa/brain_matrix/fixtures/scenario_no_id_leak_in_reply.json +24 -0
  824. package/dist/qa/brain_matrix/fixtures/scenario_no_invent_verb.json +18 -0
  825. package/dist/qa/brain_matrix/fixtures/scenario_no_loop_after_repeated_fail.json +42 -0
  826. package/dist/qa/brain_matrix/fixtures/scenario_no_password_echo.json +28 -0
  827. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_all_current.json +28 -0
  828. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent.json +20 -0
  829. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent_en.json +20 -0
  830. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_then_explain.json +35 -0
  831. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_read_intent.json +24 -0
  832. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
  833. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_write_required_args.json +23 -0
  834. package/dist/qa/brain_matrix/fixtures/scenario_office_overwrite_explicit.json +23 -0
  835. package/dist/qa/brain_matrix/fixtures/scenario_office_word_write_intent.json +27 -0
  836. package/dist/qa/brain_matrix/fixtures/scenario_panel_open_settings_intent.json +19 -0
  837. package/dist/qa/brain_matrix/fixtures/scenario_panel_send_message_intent.json +19 -0
  838. package/dist/qa/brain_matrix/fixtures/scenario_pdf_read_intent.json +22 -0
  839. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_clear_tab_explicit_close.json +17 -0
  840. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_chart.json +30 -0
  841. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_long_table.json +28 -0
  842. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_read_tab_intent.json +20 -0
  843. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_render_not_inline.json +20 -0
  844. package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_read_file.json +28 -0
  845. package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_verb_over_shell.json +22 -0
  846. package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_workflow_state.json +28 -0
  847. package/dist/qa/brain_matrix/fixtures/scenario_project_init_intent.json +20 -0
  848. package/dist/qa/brain_matrix/fixtures/scenario_project_set_root_intent.json +20 -0
  849. package/dist/qa/brain_matrix/fixtures/scenario_promote_lesson_after_correction.json +17 -0
  850. package/dist/qa/brain_matrix/fixtures/scenario_r8_destructive_shell_exec.json +21 -0
  851. package/dist/qa/brain_matrix/fixtures/scenario_read_then_parse_order.json +36 -0
  852. package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_jump_intent.json +19 -0
  853. package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_set_intent.json +19 -0
  854. package/dist/qa/brain_matrix/fixtures/scenario_reader_for_long_doc.json +21 -0
  855. package/dist/qa/brain_matrix/fixtures/scenario_reader_list_docs_intent.json +19 -0
  856. package/dist/qa/brain_matrix/fixtures/scenario_reader_next_block_intent.json +19 -0
  857. package/dist/qa/brain_matrix/fixtures/scenario_reader_read_section_intent.json +19 -0
  858. package/dist/qa/brain_matrix/fixtures/scenario_reader_recap_intent.json +19 -0
  859. package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent.json +20 -0
  860. package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent_en.json +20 -0
  861. package/dist/qa/brain_matrix/fixtures/scenario_refuses_blanket_chmod_777.json +17 -0
  862. package/dist/qa/brain_matrix/fixtures/scenario_refuses_bypass_approval_modal.json +18 -0
  863. package/dist/qa/brain_matrix/fixtures/scenario_refuses_delete_critical_en.json +18 -0
  864. package/dist/qa/brain_matrix/fixtures/scenario_refuses_disable_vault_encryption.json +18 -0
  865. package/dist/qa/brain_matrix/fixtures/scenario_refuses_drop_database.json +17 -0
  866. package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main.json +17 -0
  867. package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main_en.json +17 -0
  868. package/dist/qa/brain_matrix/fixtures/scenario_refuses_leak_vault_en.json +18 -0
  869. package/dist/qa/brain_matrix/fixtures/scenario_refuses_modify_node_modules.json +17 -0
  870. package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks.json +17 -0
  871. package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks_en.json +17 -0
  872. package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_delete_critical.json +18 -0
  873. package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_leak_vault.json +18 -0
  874. package/dist/qa/brain_matrix/fixtures/scenario_respects_global_learnings.json +28 -0
  875. package/dist/qa/brain_matrix/fixtures/scenario_respects_workflow_gate_g2.json +39 -0
  876. package/dist/qa/brain_matrix/fixtures/scenario_revoke_lesson_request.json +21 -0
  877. package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
  878. package/dist/qa/brain_matrix/fixtures/scenario_sq9b_deploy_checks_git_status.json +25 -0
  879. package/dist/qa/brain_matrix/fixtures/scenario_sq9b_install_checks_node_version.json +25 -0
  880. package/dist/qa/brain_matrix/fixtures/scenario_sq9b_publish_checks_gh_cli.json +25 -0
  881. package/dist/qa/brain_matrix/fixtures/scenario_sq_rules_active.json +30 -0
  882. package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
  883. package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
  884. package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent.json +20 -0
  885. package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent_en.json +20 -0
  886. package/dist/qa/brain_matrix/fixtures/scenario_truncated_response_retry.json +22 -0
  887. package/dist/qa/brain_matrix/fixtures/scenario_unknown_command_clarify.json +23 -0
  888. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_compose.json +23 -0
  889. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_handles_invalid.json +27 -0
  890. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent.json +20 -0
  891. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent_en.json +20 -0
  892. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_then_inspect_query.json +28 -0
  893. package/dist/qa/brain_matrix/fixtures/scenario_url_then_stringify_order.json +34 -0
  894. package/dist/qa/brain_matrix/fixtures/scenario_user_just_greets.json +17 -0
  895. package/dist/qa/brain_matrix/fixtures/scenario_user_overrides_proceeds.json +24 -0
  896. package/dist/qa/brain_matrix/fixtures/scenario_user_revokes_in_middle.json +22 -0
  897. package/dist/qa/brain_matrix/fixtures/scenario_voice_open_pizarron.json +21 -0
  898. package/dist/qa/brain_matrix/fixtures/scenario_word_outline_extraction.json +22 -0
  899. package/dist/qa/brain_matrix/fixtures/scenario_word_overwrite_explicit.json +20 -0
  900. package/dist/qa/brain_matrix/fixtures/scenario_word_section_count.json +28 -0
  901. package/dist/qa/brain_matrix/fixtures/scenario_workflow_doctrine.json +53 -0
  902. package/dist/qa/brain_matrix/fixtures/scenario_workflow_done_specs.json +32 -0
  903. package/dist/qa/brain_matrix/fixtures/scenario_workflow_intent_capture.json +22 -0
  904. package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_jump_block.json +26 -0
  905. package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_v_step_15.json +41 -0
  906. package/dist/qa/brain_matrix/fixtures/scenario_workflow_run_step_intent.json +19 -0
  907. package/dist/qa/brain_matrix/fixtures/scenario_workflow_set_intent.json +20 -0
  908. package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_injection.json +32 -0
  909. package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_recovers_after_clarify.json +25 -0
  910. package/dist/qa/brain_matrix/fixtures/scenario_workflow_step_1_intake.json +24 -0
  911. package/dist/qa/brain_matrix/fixtures/scenario_yf_command_doctrine.json +56 -0
  912. package/dist/qa/brain_matrix/fixtures/scenario_yf_doctrine_list_intent.json +19 -0
  913. package/dist/qa/brain_matrix/fixtures/scenario_yf_qa_compare_intent.json +17 -0
  914. package/dist/qa/brain_matrix/invariants.d.ts +18 -0
  915. package/dist/qa/brain_matrix/invariants.d.ts.map +1 -0
  916. package/dist/qa/brain_matrix/invariants.js +333 -0
  917. package/dist/qa/brain_matrix/invariants.js.map +1 -0
  918. package/dist/qa/brain_matrix/report.d.ts +12 -0
  919. package/dist/qa/brain_matrix/report.d.ts.map +1 -0
  920. package/dist/qa/brain_matrix/report.js +131 -0
  921. package/dist/qa/brain_matrix/report.js.map +1 -0
  922. package/dist/qa/brain_matrix/runner.d.ts +31 -0
  923. package/dist/qa/brain_matrix/runner.d.ts.map +1 -0
  924. package/dist/qa/brain_matrix/runner.js +561 -0
  925. package/dist/qa/brain_matrix/runner.js.map +1 -0
  926. package/dist/qa/brain_matrix/types.d.ts +180 -0
  927. package/dist/qa/brain_matrix/types.d.ts.map +1 -0
  928. package/dist/qa/brain_matrix/types.js +2 -0
  929. package/dist/qa/brain_matrix/types.js.map +1 -0
  930. package/dist/qa/brain_matrix/validate_scenario.d.ts +23 -0
  931. package/dist/qa/brain_matrix/validate_scenario.d.ts.map +1 -0
  932. package/dist/qa/brain_matrix/validate_scenario.js +128 -0
  933. package/dist/qa/brain_matrix/validate_scenario.js.map +1 -0
  934. package/dist/reader/parsers/epub.d.ts.map +1 -1
  935. package/dist/reader/parsers/epub.js +6 -1
  936. package/dist/reader/parsers/epub.js.map +1 -1
  937. package/dist/relay/board_snapshot.d.ts +69 -0
  938. package/dist/relay/board_snapshot.d.ts.map +1 -0
  939. package/dist/relay/board_snapshot.js +149 -0
  940. package/dist/relay/board_snapshot.js.map +1 -0
  941. package/dist/relay/command_consumer.d.ts +91 -0
  942. package/dist/relay/command_consumer.d.ts.map +1 -0
  943. package/dist/relay/command_consumer.js +129 -0
  944. package/dist/relay/command_consumer.js.map +1 -0
  945. package/dist/relay/mock_relay.d.ts +34 -0
  946. package/dist/relay/mock_relay.d.ts.map +1 -0
  947. package/dist/relay/mock_relay.js +93 -0
  948. package/dist/relay/mock_relay.js.map +1 -0
  949. package/dist/relay/relay_client.d.ts +28 -0
  950. package/dist/relay/relay_client.d.ts.map +1 -0
  951. package/dist/relay/relay_client.js +80 -0
  952. package/dist/relay/relay_client.js.map +1 -0
  953. package/dist/relay/relay_publisher.d.ts +59 -0
  954. package/dist/relay/relay_publisher.d.ts.map +1 -0
  955. package/dist/relay/relay_publisher.js +101 -0
  956. package/dist/relay/relay_publisher.js.map +1 -0
  957. package/dist/relay/types.d.ts +54 -0
  958. package/dist/relay/types.d.ts.map +1 -0
  959. package/dist/relay/types.js +8 -0
  960. package/dist/relay/types.js.map +1 -0
  961. package/dist/semantic_graph/ast_extract.d.ts +20 -0
  962. package/dist/semantic_graph/ast_extract.d.ts.map +1 -0
  963. package/dist/semantic_graph/ast_extract.js +208 -0
  964. package/dist/semantic_graph/ast_extract.js.map +1 -0
  965. package/dist/semantic_graph/derive.d.ts +48 -0
  966. package/dist/semantic_graph/derive.d.ts.map +1 -0
  967. package/dist/semantic_graph/derive.js +604 -0
  968. package/dist/semantic_graph/derive.js.map +1 -0
  969. package/dist/semantic_graph/llm_claim.d.ts +21 -0
  970. package/dist/semantic_graph/llm_claim.d.ts.map +1 -0
  971. package/dist/semantic_graph/llm_claim.js +164 -0
  972. package/dist/semantic_graph/llm_claim.js.map +1 -0
  973. package/dist/semantic_graph/npm_enrich.d.ts +49 -0
  974. package/dist/semantic_graph/npm_enrich.d.ts.map +1 -0
  975. package/dist/semantic_graph/npm_enrich.js +173 -0
  976. package/dist/semantic_graph/npm_enrich.js.map +1 -0
  977. package/dist/semantic_graph/render.d.ts +28 -0
  978. package/dist/semantic_graph/render.d.ts.map +1 -0
  979. package/dist/semantic_graph/render.js +70 -0
  980. package/dist/semantic_graph/render.js.map +1 -0
  981. package/dist/semantic_graph/store.d.ts +53 -0
  982. package/dist/semantic_graph/store.d.ts.map +1 -0
  983. package/dist/semantic_graph/store.js +382 -0
  984. package/dist/semantic_graph/store.js.map +1 -0
  985. package/dist/semantic_graph/types.d.ts +59 -0
  986. package/dist/semantic_graph/types.d.ts.map +1 -0
  987. package/dist/semantic_graph/types.js +17 -0
  988. package/dist/semantic_graph/types.js.map +1 -0
  989. package/dist/support/github_dispatcher.d.ts +36 -0
  990. package/dist/support/github_dispatcher.d.ts.map +1 -0
  991. package/dist/support/github_dispatcher.js +320 -0
  992. package/dist/support/github_dispatcher.js.map +1 -0
  993. package/dist/support/reports.d.ts +31 -0
  994. package/dist/support/reports.d.ts.map +1 -0
  995. package/dist/support/reports.js +162 -0
  996. package/dist/support/reports.js.map +1 -0
  997. package/dist/tasks/supervisor.d.ts +88 -0
  998. package/dist/tasks/supervisor.d.ts.map +1 -0
  999. package/dist/tasks/supervisor.js +308 -0
  1000. package/dist/tasks/supervisor.js.map +1 -0
  1001. package/dist/tasks/task_type.d.ts +11 -0
  1002. package/dist/tasks/task_type.d.ts.map +1 -0
  1003. package/dist/tasks/task_type.js +21 -0
  1004. package/dist/tasks/task_type.js.map +1 -0
  1005. package/dist/telemetry/usage.d.ts +67 -0
  1006. package/dist/telemetry/usage.d.ts.map +1 -0
  1007. package/dist/telemetry/usage.js +208 -0
  1008. package/dist/telemetry/usage.js.map +1 -0
  1009. package/dist/test_agent/gemini_user.d.ts +9 -0
  1010. package/dist/test_agent/gemini_user.d.ts.map +1 -0
  1011. package/dist/test_agent/gemini_user.js +58 -0
  1012. package/dist/test_agent/gemini_user.js.map +1 -0
  1013. package/dist/test_agent/profiles.d.ts +23 -0
  1014. package/dist/test_agent/profiles.d.ts.map +1 -0
  1015. package/dist/test_agent/profiles.js +117 -0
  1016. package/dist/test_agent/profiles.js.map +1 -0
  1017. package/dist/test_agent/runner.d.ts +56 -0
  1018. package/dist/test_agent/runner.d.ts.map +1 -0
  1019. package/dist/test_agent/runner.js +134 -0
  1020. package/dist/test_agent/runner.js.map +1 -0
  1021. package/dist/test_agent/target_http.d.ts +22 -0
  1022. package/dist/test_agent/target_http.d.ts.map +1 -0
  1023. package/dist/test_agent/target_http.js +51 -0
  1024. package/dist/test_agent/target_http.js.map +1 -0
  1025. package/dist/test_agent/types.d.ts +117 -0
  1026. package/dist/test_agent/types.d.ts.map +1 -0
  1027. package/dist/test_agent/types.js +22 -0
  1028. package/dist/test_agent/types.js.map +1 -0
  1029. package/dist/vault/store.d.ts.map +1 -1
  1030. package/dist/vault/store.js +20 -2
  1031. package/dist/vault/store.js.map +1 -1
  1032. package/dist/version.d.ts +3 -5
  1033. package/dist/version.d.ts.map +1 -1
  1034. package/dist/version.js +3 -5
  1035. package/dist/version.js.map +1 -1
  1036. package/dist/voice/config.d.ts +12 -0
  1037. package/dist/voice/config.d.ts.map +1 -1
  1038. package/dist/voice/config.js +25 -2
  1039. package/dist/voice/config.js.map +1 -1
  1040. package/dist/voice/providers/google.d.ts +9 -0
  1041. package/dist/voice/providers/google.d.ts.map +1 -1
  1042. package/dist/voice/providers/google.js +158 -30
  1043. package/dist/voice/providers/google.js.map +1 -1
  1044. package/dist/voice/router.d.ts +10 -0
  1045. package/dist/voice/router.d.ts.map +1 -1
  1046. package/dist/voice/router.js +39 -20
  1047. package/dist/voice/router.js.map +1 -1
  1048. package/dist/voice/types.d.ts +5 -2
  1049. package/dist/voice/types.d.ts.map +1 -1
  1050. package/dist/voice/types.js.map +1 -1
  1051. package/dist/wiring/discover.d.ts +14 -0
  1052. package/dist/wiring/discover.d.ts.map +1 -0
  1053. package/dist/wiring/discover.js +383 -0
  1054. package/dist/wiring/discover.js.map +1 -0
  1055. package/dist/wiring/store.d.ts +19 -0
  1056. package/dist/wiring/store.d.ts.map +1 -0
  1057. package/dist/wiring/store.js +182 -0
  1058. package/dist/wiring/store.js.map +1 -0
  1059. package/dist/wiring/types.d.ts +61 -0
  1060. package/dist/wiring/types.d.ts.map +1 -0
  1061. package/dist/wiring/types.js +36 -0
  1062. package/dist/wiring/types.js.map +1 -0
  1063. package/dist/workflow/config.d.ts +43 -0
  1064. package/dist/workflow/config.d.ts.map +1 -0
  1065. package/dist/workflow/config.js +199 -0
  1066. package/dist/workflow/config.js.map +1 -0
  1067. package/dist/workflow/definitions.d.ts +60 -0
  1068. package/dist/workflow/definitions.d.ts.map +1 -0
  1069. package/dist/workflow/definitions.js +178 -0
  1070. package/dist/workflow/definitions.js.map +1 -0
  1071. package/dist/workflow/definitions_client.d.ts +12 -0
  1072. package/dist/workflow/definitions_client.d.ts.map +1 -0
  1073. package/dist/workflow/definitions_client.js +81 -0
  1074. package/dist/workflow/definitions_client.js.map +1 -0
  1075. package/dist/workflow/evolution.d.ts +10 -0
  1076. package/dist/workflow/evolution.d.ts.map +1 -0
  1077. package/dist/workflow/evolution.js +62 -0
  1078. package/dist/workflow/evolution.js.map +1 -0
  1079. package/dist/workflow/graph.d.ts +59 -0
  1080. package/dist/workflow/graph.d.ts.map +1 -0
  1081. package/dist/workflow/graph.js +137 -0
  1082. package/dist/workflow/graph.js.map +1 -0
  1083. package/dist/workflow/instances.d.ts +40 -0
  1084. package/dist/workflow/instances.d.ts.map +1 -0
  1085. package/dist/workflow/instances.js +122 -0
  1086. package/dist/workflow/instances.js.map +1 -0
  1087. package/dist/workflow/multi_view.d.ts +27 -0
  1088. package/dist/workflow/multi_view.d.ts.map +1 -0
  1089. package/dist/workflow/multi_view.js +76 -0
  1090. package/dist/workflow/multi_view.js.map +1 -0
  1091. package/dist/workflow/orchestrator.d.ts +111 -0
  1092. package/dist/workflow/orchestrator.d.ts.map +1 -0
  1093. package/dist/workflow/orchestrator.js +241 -0
  1094. package/dist/workflow/orchestrator.js.map +1 -0
  1095. package/dist/workflow/phase_inference.d.ts +56 -0
  1096. package/dist/workflow/phase_inference.d.ts.map +1 -0
  1097. package/dist/workflow/phase_inference.js +107 -0
  1098. package/dist/workflow/phase_inference.js.map +1 -0
  1099. package/dist/workflow/select.d.ts +28 -0
  1100. package/dist/workflow/select.d.ts.map +1 -0
  1101. package/dist/workflow/select.js +38 -0
  1102. package/dist/workflow/select.js.map +1 -0
  1103. package/dist/workflow/state.d.ts +290 -0
  1104. package/dist/workflow/state.d.ts.map +1 -0
  1105. package/dist/workflow/state.js +213 -0
  1106. package/dist/workflow/state.js.map +1 -0
  1107. package/dist/workflow/view.d.ts +47 -0
  1108. package/dist/workflow/view.d.ts.map +1 -0
  1109. package/dist/workflow/view.js +103 -0
  1110. package/dist/workflow/view.js.map +1 -0
  1111. package/docs/SQ.md +1397 -0
  1112. package/docs/SQ_BY_STEP.yaml +147 -0
  1113. package/docs/doctrine/accessibility.md +78 -0
  1114. package/docs/doctrine/agent-orchestrator.md +76 -0
  1115. package/docs/doctrine/byok-vs-managed.md +81 -0
  1116. package/docs/doctrine/cost-router-escalation.md +103 -0
  1117. package/docs/doctrine/default-design-system.md +152 -0
  1118. package/docs/doctrine/explain-results.md +90 -0
  1119. package/docs/doctrine/expo-eas-builds.md +177 -0
  1120. package/docs/doctrine/g-doc.md +46 -0
  1121. package/docs/doctrine/gates.md +21 -0
  1122. package/docs/doctrine/language-sovereignty.md +143 -0
  1123. package/docs/doctrine/lessons-workflow.md +68 -0
  1124. package/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
  1125. package/docs/doctrine/nac3-attrs.md +23 -0
  1126. package/docs/doctrine/office-tools.md +122 -0
  1127. package/docs/doctrine/pizarron.md +52 -0
  1128. package/docs/doctrine/r8-modal.md +60 -0
  1129. package/docs/doctrine/safety-refusals.md +73 -0
  1130. package/docs/doctrine/testing-policy.md +211 -0
  1131. package/docs/doctrine/verb-composition.md +84 -0
  1132. package/docs/doctrine/verification-honesty.md +95 -0
  1133. package/docs/doctrine/workflow-kinds.md +69 -0
  1134. package/docs/doctrine/workflow-phases.md +108 -0
  1135. package/docs/doctrine/workflow.md +66 -0
  1136. package/docs/doctrine/yf-commands.md +49 -0
  1137. package/package.json +20 -3
  1138. package/src/i18n/catalogs/ar.json +223 -86
  1139. package/src/i18n/catalogs/de.json +223 -86
  1140. package/src/i18n/catalogs/en.json +223 -86
  1141. package/src/i18n/catalogs/es.json +223 -86
  1142. package/src/i18n/catalogs/fr.json +223 -86
  1143. package/src/i18n/catalogs/hi.json +223 -86
  1144. package/src/i18n/catalogs/it.json +223 -86
  1145. package/src/i18n/catalogs/ja.json +223 -86
  1146. package/src/i18n/catalogs/pt.json +223 -86
  1147. package/src/i18n/catalogs/zh.json +223 -86
  1148. package/templates/nextjs-app/README.md +48 -0
  1149. package/templates/nextjs-app/next.config.js +8 -0
  1150. package/templates/nextjs-app/package.json +33 -0
  1151. package/templates/nextjs-app/src/app/globals.css +43 -0
  1152. package/templates/nextjs-app/src/app/layout.tsx +29 -0
  1153. package/templates/nextjs-app/src/app/page.tsx +63 -0
  1154. package/templates/nextjs-app/src/nac/manifest.ts +36 -0
  1155. package/templates/nextjs-app/tsconfig.json +21 -0
  1156. package/templates/nextjs-app/yujin.forge.json +11 -0
  1157. package/templates/sumi-context.template.md +57 -0
@@ -0,0 +1,896 @@
1
+ import { findVerb, findVerbByAlias, validateArgs, suggestVerbs, manifest, } from '../../nac3/internal_manifest.js';
2
+ import { resolveManifestMode } from '../../nac3/manifest_lazy.js';
3
+ import { getDoctrines, listDoctrineSlugs } from '../../core/doctrine_resolver.js';
4
+ import { logDispatch, newTraceId, redactArgs, } from '../../nac3/dispatch_log.js';
5
+ import { enqueueApproval } from '../../nac3/approval_queue.js';
6
+ import { VERSION as FORGE_VERSION } from '../../version.js';
7
+ /* alpha.42 -- policies that REQUIRE panel-side approval before
8
+ * the legacy handler runs. The dispatcher pushes a pending row
9
+ * and returns an envelope; the panel modal handles the rest. */
10
+ const POLICIES_NEED_APPROVAL = new Set(['destructive', 'approval-required']);
11
+ export const NAC3_INVOKE_SPEC = {
12
+ name: 'nac3_invoke',
13
+ description: 'Invoke a NAC3 verb from the internal manifest. The manifest '
14
+ + 'lives in the system prompt. ALWAYS pick verb_id from there.\n\n'
15
+ + 'Rules:\n'
16
+ + ' - If no verb matches what the user asked, REPLY in chat '
17
+ + '"No tengo verbo NAC3 para X" -- do NOT improvise.\n'
18
+ + ' - Args must satisfy the verb schema. Read the schema in '
19
+ + 'the manifest before composing args.\n'
20
+ + ' - Check the verb policy before dispatching. Destructive / '
21
+ + 'approval-required verbs need a clear user signal first.\n'
22
+ + ' - On is_error=true: tell the user what failed; do not '
23
+ + 'paper over it. Past-tense ("listo", "guardado") is allowed '
24
+ + 'only after is_error=false.\n'
25
+ + ' - When the result carries nac3_panel_dispatch=true, the '
26
+ + 'panel will execute the verb; treat that as success.',
27
+ input_schema: {
28
+ type: 'object',
29
+ properties: {
30
+ verb_id: {
31
+ type: 'string',
32
+ description: 'Stable verb id from the manifest, e.g. yujin.pizarron.create-tab.',
33
+ },
34
+ args: {
35
+ type: 'object',
36
+ description: 'Arguments for the verb. Must satisfy the verb schema.',
37
+ },
38
+ idempotency_key: {
39
+ type: 'string',
40
+ description: 'Optional. Same key on retry -> server may dedupe.',
41
+ },
42
+ },
43
+ required: ['verb_id'],
44
+ },
45
+ requires_approval: false,
46
+ };
47
+ export async function runNac3Invoke(rawArgs, ctx, opts) {
48
+ const trace_id = newTraceId();
49
+ const startedAt = Date.now();
50
+ const m = manifest();
51
+ const baseEntry = {
52
+ trace_id,
53
+ panel_session_id: opts.panelSessionId,
54
+ forge_version: FORGE_VERSION,
55
+ llm_turn_id: opts.llmTurnId,
56
+ user_text_hash: opts.userTextHash,
57
+ manifest_version: m.version,
58
+ };
59
+ const verb_id = typeof rawArgs.verb_id === 'string' ? rawArgs.verb_id.trim() : '';
60
+ const args = (rawArgs.args && typeof rawArgs.args === 'object' && !Array.isArray(rawArgs.args))
61
+ ? rawArgs.args
62
+ : {};
63
+ if (!verb_id) {
64
+ await logDispatch({
65
+ ts: new Date().toISOString(),
66
+ kind: 'schema-fail',
67
+ ...baseEntry,
68
+ result_ok: false,
69
+ result_error: 'verb_id missing',
70
+ duration_ms: Date.now() - startedAt,
71
+ });
72
+ return {
73
+ tool: NAC3_INVOKE_SPEC.name,
74
+ is_error: true,
75
+ result: { error: 'verb_id is required (string).' },
76
+ display: 'nac3_invoke <- missing verb_id',
77
+ };
78
+ }
79
+ /* alpha.59z.38 NAC-3 v3.x backend tools (task #23 slice 2) --
80
+ * app.* namespace dispatcher. These verbs are NOT in the
81
+ * internal manifest; they come from the adopter app's
82
+ * yujin.forge.json nac3_backend.tools[] section + surface via
83
+ * buildBackendToolsSection at prompt build time. Resolving here
84
+ * before findVerb so the rest of the pipeline (gate, R8,
85
+ * legacy aliasing) skips entirely. */
86
+ if (verb_id.startsWith('app.')) {
87
+ const toolId = verb_id.slice(4);
88
+ const { runAppBackendTool } = await import('./app_backend_dispatch.js');
89
+ return await runAppBackendTool({
90
+ toolId,
91
+ args,
92
+ baseEntry,
93
+ startedAt,
94
+ /* PND-052 (sec 2.5) -- use the dispatcher's project root, not
95
+ * process.cwd(). The panel server's cwd is not guaranteed to be
96
+ * the active project, so cwd would read the wrong (or no)
97
+ * yujin.forge.json backend catalogue. */
98
+ projectRoot: ctx.projectRoot,
99
+ });
100
+ }
101
+ let verb = findVerb(verb_id);
102
+ let alias_used;
103
+ if (!verb) {
104
+ /* Tolerate the LLM passing a legacy tool name as verb_id. */
105
+ verb = findVerbByAlias(verb_id);
106
+ if (verb) {
107
+ alias_used = verb_id;
108
+ await logDispatch({
109
+ ts: new Date().toISOString(),
110
+ kind: 'deprecated-alias',
111
+ ...baseEntry,
112
+ verb_id: verb.id,
113
+ alias_used: verb_id,
114
+ args_sample: redactArgs(args),
115
+ result_ok: undefined,
116
+ duration_ms: Date.now() - startedAt,
117
+ });
118
+ }
119
+ }
120
+ if (!verb) {
121
+ const closest = suggestVerbs(verb_id, 3);
122
+ await logDispatch({
123
+ ts: new Date().toISOString(),
124
+ kind: 'verb-not-found',
125
+ ...baseEntry,
126
+ verb_id,
127
+ closest_verbs: closest,
128
+ args_sample: redactArgs(args),
129
+ result_ok: false,
130
+ result_error: 'verb not found',
131
+ duration_ms: Date.now() - startedAt,
132
+ });
133
+ return {
134
+ tool: NAC3_INVOKE_SPEC.name,
135
+ is_error: true,
136
+ result: {
137
+ error: 'No NAC3 verb with id "' + verb_id + '". Pick from the manifest.',
138
+ closest_verbs: closest,
139
+ hint: 'The full manifest is in your system prompt. If you genuinely need a new verb, say so to the user instead of guessing.',
140
+ },
141
+ display: 'nac3_invoke <- unknown verb ' + verb_id,
142
+ };
143
+ }
144
+ /* Schema validation. */
145
+ const schemaErr = validateArgs(verb, args);
146
+ if (schemaErr) {
147
+ await logDispatch({
148
+ ts: new Date().toISOString(),
149
+ kind: 'schema-fail',
150
+ ...baseEntry,
151
+ verb_id: verb.id,
152
+ args_sample: redactArgs(args),
153
+ result_ok: false,
154
+ result_error: schemaErr,
155
+ duration_ms: Date.now() - startedAt,
156
+ });
157
+ /* alpha.59x mitigation #1 -- auto-recovery on schema fail in
158
+ * lazy manifest mode. The LLM saw only the stub (no schema),
159
+ * so missing/wrong args are likely "I forgot to call
160
+ * discover-schemas first". Return the schema inline so the
161
+ * next round can compose args correctly without an extra
162
+ * discovery call. In eager mode the schema is already in the
163
+ * system prompt -- still safe to repeat, costs ~200 tokens
164
+ * and saves a regression turn. */
165
+ const lazyHint = resolveManifestMode() === 'lazy'
166
+ ? ('Lazy manifest mode: call yujin.nac3.discover-schemas '
167
+ + 'before invoking complex verbs to avoid this round-trip. '
168
+ + 'Schema for "' + verb.id + '" included below; retry with '
169
+ + 'compliant args.')
170
+ : 'Schema for "' + verb.id + '" repeated below; retry with compliant args.';
171
+ return {
172
+ tool: NAC3_INVOKE_SPEC.name,
173
+ is_error: true,
174
+ result: {
175
+ error: 'Args do not match the verb schema: ' + schemaErr,
176
+ verb_id: verb.id,
177
+ schema: verb.schema,
178
+ description: verb.description,
179
+ policy: verb.policy,
180
+ side_effects: verb.side_effects,
181
+ hint: lazyHint,
182
+ },
183
+ display: 'nac3_invoke <- schema fail (' + verb.id + ')',
184
+ };
185
+ }
186
+ /* alpha.59z.0 meta-verb -- discover-doctrine. Handled inline
187
+ * because it is pure markdown read (no side effects, no
188
+ * legacy alias). */
189
+ if (verb.id === 'yujin.doctrine.discover') {
190
+ const raw = args.slugs;
191
+ const slugs = Array.isArray(raw)
192
+ ? raw.filter((x) => typeof x === 'string')
193
+ : [];
194
+ let payload;
195
+ if (slugs.length === 0) {
196
+ const available = await listDoctrineSlugs();
197
+ payload = { ok: true, available };
198
+ }
199
+ else {
200
+ const got = await getDoctrines(slugs);
201
+ payload = { doctrines: got };
202
+ }
203
+ await logDispatch({
204
+ ts: new Date().toISOString(),
205
+ kind: 'invoke',
206
+ ...baseEntry,
207
+ verb_id: verb.id,
208
+ args_sample: redactArgs(args),
209
+ policy: verb.policy,
210
+ side_effects_declared: verb.side_effects,
211
+ side_effects_actual: ['none'],
212
+ result_ok: true,
213
+ duration_ms: Date.now() - startedAt,
214
+ });
215
+ return {
216
+ tool: NAC3_INVOKE_SPEC.name,
217
+ is_error: false,
218
+ result: payload,
219
+ display: 'nac3_invoke -> doctrine:' + slugs.length,
220
+ };
221
+ }
222
+ /* alpha.59x meta-verb -- discover-schemas. Handled inline
223
+ * because it is pure manifest introspection (no side effects,
224
+ * no legacy alias) and we want the schema lookup to be as
225
+ * cheap as a manifest read. */
226
+ if (verb.id === 'yujin.nac3.discover-schemas') {
227
+ const verbIdsRaw = args.verb_ids;
228
+ const verbIds = Array.isArray(verbIdsRaw)
229
+ ? verbIdsRaw.filter((x) => typeof x === 'string')
230
+ : [];
231
+ const out = {};
232
+ for (const id of verbIds) {
233
+ const v = findVerb(id) ?? findVerbByAlias(id);
234
+ if (v) {
235
+ out[id] = {
236
+ id: v.id,
237
+ role: v.role,
238
+ action: v.action,
239
+ label: v.label,
240
+ description: v.description ?? '',
241
+ schema: v.schema,
242
+ policy: v.policy,
243
+ side_effects: v.side_effects,
244
+ handler_side: v.handler_side,
245
+ /* Same fields as the stub plus the schema -- the LLM can
246
+ * copy/paste into args confidently. */
247
+ };
248
+ }
249
+ else {
250
+ const closest = suggestVerbs(id, 3);
251
+ out[id] = { error: 'unknown verb_id', closest_verbs: closest };
252
+ }
253
+ }
254
+ await logDispatch({
255
+ ts: new Date().toISOString(),
256
+ kind: 'invoke',
257
+ ...baseEntry,
258
+ verb_id: verb.id,
259
+ args_sample: redactArgs(args),
260
+ policy: verb.policy,
261
+ side_effects_declared: verb.side_effects,
262
+ side_effects_actual: ['none'],
263
+ result_ok: true,
264
+ duration_ms: Date.now() - startedAt,
265
+ });
266
+ return {
267
+ tool: NAC3_INVOKE_SPEC.name,
268
+ is_error: false,
269
+ result: {
270
+ verbs: out,
271
+ manifest_mode: resolveManifestMode(),
272
+ manifest_version: m.version,
273
+ },
274
+ display: 'nac3_invoke -> schemas:' + verbIds.length,
275
+ };
276
+ }
277
+ /* alpha.59z.26 F101 slice 2 -- MCP bridge meta verbs.
278
+ *
279
+ * list-bridges : real, queries the registry from slice 1.
280
+ * show-tools : slice 2 stub returns the bridge endpoint +
281
+ * "tool catalogue load deferred to slice 4".
282
+ * discover-tools : slice 2 stub returns a placeholder; slice 4
283
+ * wires the on-demand schema fetch.
284
+ * toggle : slice 2 stub (requires persistent enabled-
285
+ * state file; ships in slice 4 alongside the
286
+ * proxy dispatcher).
287
+ * set-creds : slice 2 stub (requires CredentialVault per-
288
+ * bridge slot; ships in slice 4).
289
+ *
290
+ * Per the MCP-opcional invariants documented in F101_MCP_BRIDGE,
291
+ * these verbs only appear in the LLM-visible stub when the
292
+ * registry discovered >=1 bridge. findVerb/validateArgs still
293
+ * resolve them; the gate is on the prompt-side. */
294
+ if (verb.id === 'yujin.mcp.list-bridges') {
295
+ const { getActiveBridges } = await import('../../mcp/bridge_registry.js');
296
+ const bridges = await getActiveBridges({ projectRoot: process.cwd() });
297
+ const payload = {
298
+ ok: true,
299
+ bridges: bridges.map((b) => ({
300
+ id: b.id,
301
+ endpoint: b.endpoint,
302
+ source: b.source,
303
+ enabled: b.enabled,
304
+ display_name: b.display_name ?? b.id,
305
+ })),
306
+ count: bridges.length,
307
+ };
308
+ await logDispatch({
309
+ ts: new Date().toISOString(),
310
+ kind: 'invoke',
311
+ ...baseEntry,
312
+ verb_id: verb.id,
313
+ args_sample: {},
314
+ policy: verb.policy,
315
+ side_effects_declared: verb.side_effects,
316
+ side_effects_actual: ['none'],
317
+ result_ok: true,
318
+ duration_ms: Date.now() - startedAt,
319
+ });
320
+ return {
321
+ tool: NAC3_INVOKE_SPEC.name,
322
+ is_error: false,
323
+ result: payload,
324
+ display: 'nac3_invoke -> bridges:' + bridges.length,
325
+ };
326
+ }
327
+ if (verb.id === 'yujin.mcp.show-tools') {
328
+ /* F101 slice 4 FULL: delegate to the MCPClient appropriate
329
+ * for the bridge protocol (http_rest / stdio / sse). The
330
+ * http_rest path preserves slice 4 minimal behaviour. */
331
+ const bridgeId = String(args.bridge_id ?? '');
332
+ const { getActiveBridges } = await import('../../mcp/bridge_registry.js');
333
+ const bridges = await getActiveBridges({ projectRoot: process.cwd() });
334
+ const bridge = bridges.find((b) => b.id === bridgeId);
335
+ if (!bridge) {
336
+ await logDispatch({
337
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
338
+ verb_id: verb.id, args_sample: redactArgs(args),
339
+ policy: verb.policy, side_effects_declared: verb.side_effects,
340
+ side_effects_actual: ['none'], result_ok: false,
341
+ result_error: 'unknown_bridge_id:' + bridgeId,
342
+ duration_ms: Date.now() - startedAt,
343
+ });
344
+ return {
345
+ tool: NAC3_INVOKE_SPEC.name, is_error: true,
346
+ result: { ok: false, error: 'unknown_bridge_id', bridge_id: bridgeId, available: bridges.map((b) => b.id) },
347
+ display: 'nac3_invoke <- bridge not found',
348
+ };
349
+ }
350
+ const { getMCPClient } = await import('../../mcp/protocol_client.js');
351
+ const client = getMCPClient(bridge);
352
+ const listResult = await client.listTools();
353
+ const sideActual = client.transport === 'stdio' ? ['process'] : ['network'];
354
+ await logDispatch({
355
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
356
+ verb_id: verb.id, args_sample: redactArgs(args),
357
+ policy: verb.policy, side_effects_declared: verb.side_effects,
358
+ side_effects_actual: sideActual,
359
+ result_ok: listResult.ok,
360
+ result_error: listResult.ok ? undefined : (listResult.detail || listResult.error),
361
+ duration_ms: Date.now() - startedAt,
362
+ });
363
+ return {
364
+ tool: NAC3_INVOKE_SPEC.name,
365
+ is_error: false,
366
+ result: listResult.ok
367
+ ? { ok: true, bridge_id: bridgeId, endpoint: bridge.endpoint, transport: client.transport, tools: listResult.tools, count: listResult.count }
368
+ : { ok: false, bridge_id: bridgeId, transport: client.transport, error: listResult.error, detail: listResult.detail },
369
+ display: listResult.ok
370
+ ? 'nac3_invoke -> tools:' + listResult.count + ' via ' + client.transport
371
+ : 'nac3_invoke <- ' + listResult.error + ' (' + client.transport + ')',
372
+ };
373
+ }
374
+ if (verb.id === 'yujin.mcp.invoke-tool') {
375
+ /* Slice 4 real: POST <endpoint>/tools/<tool_slug>/invoke with
376
+ * the args body. Bridge response is forwarded verbatim. Audit
377
+ * trail records bridge_id + bridge_endpoint + tool_slug so
378
+ * MCP-proxied invocations are queryable separately from native
379
+ * dispatch. R8 modal already triggered upstream by the gate
380
+ * since the verb policy is approval-required. */
381
+ const bridgeId = String(args.bridge_id ?? '');
382
+ const toolSlug = String(args.tool_slug ?? '');
383
+ const toolArgs = args.args ?? {};
384
+ const { getActiveBridges } = await import('../../mcp/bridge_registry.js');
385
+ const bridges = await getActiveBridges({ projectRoot: process.cwd() });
386
+ const bridge = bridges.find((b) => b.id === bridgeId);
387
+ if (!bridge) {
388
+ await logDispatch({
389
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
390
+ verb_id: verb.id, args_sample: redactArgs(args),
391
+ policy: verb.policy, side_effects_declared: verb.side_effects,
392
+ side_effects_actual: ['none'], result_ok: false,
393
+ result_error: 'unknown_bridge_id:' + bridgeId,
394
+ duration_ms: Date.now() - startedAt,
395
+ });
396
+ return {
397
+ tool: NAC3_INVOKE_SPEC.name, is_error: true,
398
+ result: { ok: false, error: 'unknown_bridge_id', bridge_id: bridgeId, available: bridges.map((b) => b.id) },
399
+ display: 'nac3_invoke <- bridge not found',
400
+ };
401
+ }
402
+ /* F101 slice 5 sub-slice 2 -- attach Authorization: Bearer
403
+ * <token> when the per-bridge Vault slot has a value. Slot
404
+ * name follows the canonical mcp_<bridge_id>_token pattern.
405
+ * The header is only relevant to the http_rest + sse transports;
406
+ * the stdio client ignores it (auth on stdio happens via env
407
+ * vars set at spawn time). */
408
+ const credsSlot = 'mcp_' + bridgeId.toLowerCase().replace(/[^a-z0-9_-]/g, '_') + '_token';
409
+ const authHeaders = {};
410
+ try {
411
+ const { getKey } = await import('../../core/provider_keys.js');
412
+ const token = await getKey(credsSlot);
413
+ if (token)
414
+ authHeaders['authorization'] = 'Bearer ' + token;
415
+ }
416
+ catch { /* swallow -- proceed without auth */ }
417
+ /* F101 slice 4 FULL: dispatch via MCPClient picked by bridge
418
+ * protocol. http_rest preserves slice 4 minimal; stdio + sse
419
+ * add real MCP transport support. */
420
+ const { getMCPClient } = await import('../../mcp/protocol_client.js');
421
+ const client = getMCPClient(bridge);
422
+ const invokeResult = await client.invokeTool(toolSlug, toolArgs, authHeaders);
423
+ let toolResult = null;
424
+ let invokeError;
425
+ if (invokeResult.ok) {
426
+ toolResult = invokeResult.response;
427
+ }
428
+ else {
429
+ invokeError = invokeResult.detail || invokeResult.error;
430
+ toolResult = invokeResult.partial_response ?? null;
431
+ }
432
+ await logDispatch({
433
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
434
+ verb_id: verb.id,
435
+ args_sample: redactArgs({
436
+ bridge_id: bridgeId,
437
+ bridge_endpoint: bridge.endpoint,
438
+ tool_slug: toolSlug,
439
+ /* Args from the tool are NOT redacted into the audit log
440
+ * field because they could carry per-tool semantics (file
441
+ * paths, query strings) that operators need to see. The
442
+ * redactor handles standard secret patterns. */
443
+ ...(typeof toolArgs === 'object' && toolArgs !== null ? toolArgs : {}),
444
+ }),
445
+ policy: verb.policy, side_effects_declared: verb.side_effects,
446
+ side_effects_actual: invokeError ? ['network'] : ['network', 'external-api'],
447
+ result_ok: !invokeError,
448
+ result_error: invokeError,
449
+ duration_ms: Date.now() - startedAt,
450
+ });
451
+ return {
452
+ tool: NAC3_INVOKE_SPEC.name,
453
+ /* PND-052 (sec 2.4) -- reflect the real outcome (was hard-coded
454
+ * false, so a failed MCP tool call looked successful). */
455
+ is_error: !!invokeError,
456
+ result: {
457
+ ok: !invokeError,
458
+ bridge_id: bridgeId,
459
+ tool_slug: toolSlug,
460
+ ...(invokeError ? { error: 'bridge_invoke_failed', detail: invokeError, partial_response: toolResult } : { response: toolResult }),
461
+ },
462
+ display: invokeError
463
+ ? 'nac3_invoke <- mcp:' + bridgeId + '/' + toolSlug + ' failed'
464
+ : 'nac3_invoke -> mcp:' + bridgeId + '/' + toolSlug,
465
+ };
466
+ }
467
+ if (verb.id === 'yujin.mcp.toggle') {
468
+ /* F101 slice 5 sub-slice 1: persistent enabled-state writer.
469
+ * Writes to ~/.yujin-forge/mcp-state.json atomically + busts
470
+ * the discovery cache so the next chat turn sees the new
471
+ * state. R8 modal already fired upstream (approval-required
472
+ * policy). */
473
+ const bridgeId = String(args.bridge_id ?? '');
474
+ const enabled = Boolean(args.enabled);
475
+ const { getActiveBridges, resetBridgeCache } = await import('../../mcp/bridge_registry.js');
476
+ const bridges = await getActiveBridges({ projectRoot: process.cwd() });
477
+ const bridge = bridges.find((b) => b.id === bridgeId);
478
+ if (!bridge) {
479
+ await logDispatch({
480
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
481
+ verb_id: verb.id, args_sample: redactArgs(args),
482
+ policy: verb.policy, side_effects_declared: verb.side_effects,
483
+ side_effects_actual: ['none'], result_ok: false,
484
+ result_error: 'unknown_bridge_id:' + bridgeId,
485
+ duration_ms: Date.now() - startedAt,
486
+ });
487
+ return {
488
+ tool: NAC3_INVOKE_SPEC.name, is_error: true,
489
+ result: { ok: false, error: 'unknown_bridge_id', bridge_id: bridgeId, available: bridges.map((b) => b.id) },
490
+ display: 'nac3_invoke <- bridge not found',
491
+ };
492
+ }
493
+ const { setBridgeEnabled } = await import('../../mcp/state.js');
494
+ await setBridgeEnabled(bridgeId, enabled);
495
+ resetBridgeCache();
496
+ await logDispatch({
497
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
498
+ verb_id: verb.id, args_sample: redactArgs(args),
499
+ policy: verb.policy, side_effects_declared: verb.side_effects,
500
+ side_effects_actual: ['filesystem'], result_ok: true,
501
+ duration_ms: Date.now() - startedAt,
502
+ });
503
+ return {
504
+ tool: NAC3_INVOKE_SPEC.name, is_error: false,
505
+ result: {
506
+ ok: true, bridge_id: bridgeId, enabled,
507
+ message: 'Bridge ' + bridgeId + ' set to ' + (enabled ? 'enabled' : 'disabled') + '. The next chat turn will reflect this change.',
508
+ },
509
+ display: 'nac3_invoke -> mcp toggle ' + bridgeId + '=' + (enabled ? 'on' : 'off'),
510
+ };
511
+ }
512
+ if (verb.id === 'yujin.mcp.set-creds') {
513
+ /* F101 slice 5 sub-slice 2: write a per-bridge bearer token
514
+ * to CredentialVault under the dynamic slot
515
+ * mcp_<bridge_id>_token. R8 modal already fired upstream
516
+ * (destructive policy).
517
+ *
518
+ * The verb args include creds_slot for back-compat with the
519
+ * slice 2 schema, but the canonical slot name is the dynamic
520
+ * mcp_<bridge_id>_token pattern. If creds_slot does not match
521
+ * this pattern we reject -- the bridge_id MUST be in the slot
522
+ * name for the invoke-tool handler to find it without an extra
523
+ * args field. The set-creds verb does NOT carry the secret
524
+ * token itself in its args (LLM should not see it); the
525
+ * actual token must come via a separate `yf keys set <slot>`
526
+ * step. The verb just records the binding + verifies the
527
+ * slot exists. */
528
+ const bridgeId = String(args.bridge_id ?? '');
529
+ const credsSlot = String(args.creds_slot ?? '');
530
+ const expected = 'mcp_' + bridgeId.toLowerCase().replace(/[^a-z0-9_-]/g, '_') + '_token';
531
+ if (credsSlot !== expected) {
532
+ await logDispatch({
533
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
534
+ verb_id: verb.id, args_sample: redactArgs(args),
535
+ policy: verb.policy, side_effects_declared: verb.side_effects,
536
+ side_effects_actual: ['none'], result_ok: false,
537
+ result_error: 'creds_slot mismatch; expected ' + expected,
538
+ duration_ms: Date.now() - startedAt,
539
+ });
540
+ return {
541
+ tool: NAC3_INVOKE_SPEC.name, is_error: true,
542
+ result: {
543
+ ok: false,
544
+ error: 'creds_slot_mismatch',
545
+ expected_slot: expected,
546
+ received_slot: credsSlot,
547
+ hint: 'Slot name MUST be mcp_<bridge_id>_token. The token itself must be loaded separately via `yf keys set ' + expected + '` so the LLM never sees it.',
548
+ },
549
+ display: 'nac3_invoke <- mcp creds slot mismatch',
550
+ };
551
+ }
552
+ const { hasKey } = await import('../../core/provider_keys.js');
553
+ const present = await hasKey(expected);
554
+ await logDispatch({
555
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
556
+ verb_id: verb.id, args_sample: redactArgs(args),
557
+ policy: verb.policy, side_effects_declared: verb.side_effects,
558
+ side_effects_actual: ['filesystem'], result_ok: true,
559
+ duration_ms: Date.now() - startedAt,
560
+ });
561
+ return {
562
+ tool: NAC3_INVOKE_SPEC.name, is_error: false,
563
+ result: {
564
+ ok: true,
565
+ bridge_id: bridgeId,
566
+ slot: expected,
567
+ token_present: present,
568
+ message: present
569
+ ? 'Binding confirmed. invoke-tool calls to ' + bridgeId + ' will send Authorization: Bearer <slot value>.'
570
+ : 'Slot ' + expected + ' is empty. Run `yf keys set ' + expected + '` to load the token; invoke-tool will then attach the header automatically.',
571
+ },
572
+ display: 'nac3_invoke -> mcp creds ' + bridgeId + ' (token ' + (present ? 'loaded' : 'pending') + ')',
573
+ };
574
+ }
575
+ if (verb.id === 'yujin.mcp.discover-tools') {
576
+ /* Slice 4 full ships the on-demand schema fetch for
577
+ * MCP-proxied tools via the stdio/SSE protocol client. Until
578
+ * then the brain calls show-tools which returns the full
579
+ * catalogue (slice 4 minimal). */
580
+ const payload = {
581
+ ok: false,
582
+ deferred_to: 'F101 slice 4 full (MCP stdio/SSE client)',
583
+ message: 'discover-tools is the lazy variant of show-tools. Until the protocol client ships, use show-tools which returns the full catalogue eagerly.',
584
+ args_received: args,
585
+ };
586
+ await logDispatch({
587
+ ts: new Date().toISOString(), kind: 'invoke', ...baseEntry,
588
+ verb_id: verb.id, args_sample: redactArgs(args),
589
+ policy: verb.policy, side_effects_declared: verb.side_effects,
590
+ side_effects_actual: ['none'], result_ok: false,
591
+ duration_ms: Date.now() - startedAt,
592
+ });
593
+ return {
594
+ tool: NAC3_INVOKE_SPEC.name, is_error: false, result: payload,
595
+ display: 'nac3_invoke -> mcp-stub (' + verb.id + ')',
596
+ };
597
+ }
598
+ /* Policy gate (server-enforced side; the panel double-gates
599
+ * visible-policy verbs). */
600
+ if (verb.policy === 'byok-required') {
601
+ /* Stub: read the BYOK key catalogue and check at least one
602
+ * brain key exists. The detailed enforcement is up to the
603
+ * verb handler. */
604
+ /* Intentionally not implemented yet; alpha.40 ships the
605
+ * dispatch surface and uses byok-required as documentation. */
606
+ }
607
+ if (verb.policy === 'project-root-gated') {
608
+ /* For args carrying a 'path' or 'subdir', defence-in-depth.
609
+ * The legacy handlers already enforce this; we just log. */
610
+ }
611
+ /* alpha.42 -- destructive / approval-required GATE.
612
+ *
613
+ * The dispatcher does NOT run the legacy handler here. Instead
614
+ * it enqueues a pending approval row keyed by trace_id and
615
+ * returns an envelope. The panel intercept opens a modal; the
616
+ * user clicks Approve / Reject; the panel POSTs the decision
617
+ * to /api/forge/nac3-approve or /nac3-reject. The endpoint
618
+ * resolves the row and runs the actual handler (or logs the
619
+ * rejection).
620
+ *
621
+ * Approval is bypassed when:
622
+ * - opts.approval_bypass === true (already-approved re-entry
623
+ * from the approve endpoint; would otherwise loop).
624
+ * Nothing else is exempt -- destructive ALWAYS hits the modal.
625
+ */
626
+ if (POLICIES_NEED_APPROVAL.has(verb.policy)
627
+ && verb.handler_side === 'server'
628
+ && !opts.approval_bypass) {
629
+ /* alpha.59d -- Danger Zone master toggle. When ON, the
630
+ * modal is skipped + the call proceeds with approval_mode=
631
+ * 'danger_zone_bypass' so the audit log still records the
632
+ * invocation cleanly. */
633
+ let dangerZoneBypass = false;
634
+ try {
635
+ const { readLimitsConfig } = await import('../../core/limits_config.js');
636
+ const lim = await readLimitsConfig();
637
+ if (lim.danger_zone && lim.danger_zone.auto_approve_all === true) {
638
+ dangerZoneBypass = true;
639
+ }
640
+ }
641
+ catch { /* swallow */ }
642
+ /* Resolve the alias OR fall back to verb_id (alpha.59d
643
+ * native handlers like yujin.shell.exec). */
644
+ const alias = (verb.deprecated_aliases && verb.deprecated_aliases[0]) || verb.id;
645
+ if (!alias) {
646
+ return {
647
+ tool: NAC3_INVOKE_SPEC.name,
648
+ is_error: true,
649
+ result: { error: 'destructive verb "' + verb.id + '" has no legacy implementation' },
650
+ display: 'nac3_invoke <- no impl ' + verb.id,
651
+ };
652
+ }
653
+ if (dangerZoneBypass) {
654
+ /* Skip the modal, dispatch directly with the audit
655
+ * approval_mode set. */
656
+ const argsWithMode = {
657
+ ...args,
658
+ approval_mode: 'danger_zone_bypass',
659
+ };
660
+ try {
661
+ const r = await opts.legacyRun(alias, argsWithMode, ctx);
662
+ await logDispatch({
663
+ ts: new Date().toISOString(),
664
+ kind: 'invoke',
665
+ ...baseEntry,
666
+ verb_id: verb.id,
667
+ alias_used: alias,
668
+ args_sample: redactArgs(args),
669
+ policy: verb.policy,
670
+ side_effects_declared: verb.side_effects,
671
+ result_ok: !r.is_error,
672
+ result_error: r.is_error ? String(r.result?.error ?? 'error') : undefined,
673
+ duration_ms: Date.now() - startedAt,
674
+ });
675
+ return r;
676
+ }
677
+ catch (err) {
678
+ return {
679
+ tool: NAC3_INVOKE_SPEC.name,
680
+ is_error: true,
681
+ result: { error: 'danger zone handler threw: ' + (err instanceof Error ? err.message : String(err)) },
682
+ display: 'nac3_invoke <- danger zone error',
683
+ };
684
+ }
685
+ }
686
+ enqueueApproval({
687
+ trace_id,
688
+ verb,
689
+ args,
690
+ ctx,
691
+ legacy_alias: alias,
692
+ legacy_run: opts.legacyRun,
693
+ created_at: Date.now(),
694
+ agent_slug: opts.agentSlug,
695
+ });
696
+ await logDispatch({
697
+ ts: new Date().toISOString(),
698
+ kind: 'invoke',
699
+ ...baseEntry,
700
+ verb_id: verb.id,
701
+ alias_used: alias,
702
+ args_sample: redactArgs(args),
703
+ policy: verb.policy,
704
+ side_effects_declared: verb.side_effects,
705
+ result_ok: true,
706
+ duration_ms: Date.now() - startedAt,
707
+ /* mark as awaiting -- the row will be paired later with the
708
+ approve/reject decision in nac3_approvals.jsonl. */
709
+ result_error: 'awaiting_user_approval',
710
+ });
711
+ /* alpha.59d.2 -- attach a classification block so the panel
712
+ * modal can render a coloured risk badge + reasons. For
713
+ * shell.exec the bucket comes from shell_classifier (rich
714
+ * signal); for other verbs we synthesise a bucket from the
715
+ * policy + side_effects so the modal still gets a chip. */
716
+ let classification;
717
+ if (verb.id === 'yujin.shell.exec') {
718
+ try {
719
+ const { classifyShellCommand } = await import('../../core/shell_classifier.js');
720
+ const cmd = typeof args.command === 'string'
721
+ ? args.command
722
+ : '';
723
+ const sc = classifyShellCommand(cmd);
724
+ classification = { bucket: sc.bucket, reasons: sc.reasons };
725
+ }
726
+ catch {
727
+ classification = { bucket: 'approval', reasons: ['classifier unavailable'] };
728
+ }
729
+ }
730
+ else if (verb.policy === 'destructive') {
731
+ classification = {
732
+ bucket: 'destructive',
733
+ reasons: ['policy=destructive', 'side_effects=' + (verb.side_effects || []).join(',')],
734
+ };
735
+ }
736
+ else {
737
+ classification = {
738
+ bucket: 'approval',
739
+ reasons: ['policy=' + verb.policy, 'side_effects=' + (verb.side_effects || []).join(',')],
740
+ };
741
+ }
742
+ return {
743
+ tool: NAC3_INVOKE_SPEC.name,
744
+ is_error: false,
745
+ result: {
746
+ nac3_panel_approval_required: true,
747
+ trace_id,
748
+ verb: {
749
+ id: verb.id,
750
+ action: verb.action,
751
+ role: verb.role,
752
+ label: verb.label,
753
+ policy: verb.policy,
754
+ side_effects: verb.side_effects,
755
+ },
756
+ args,
757
+ classification,
758
+ },
759
+ display: 'nac3_invoke -> awaiting approval (' + verb.id + ' [' + classification.bucket + '])',
760
+ };
761
+ }
762
+ /* Dispatch. */
763
+ if (verb.handler_side === 'panel') {
764
+ /* Return an envelope the panel will pick up from tool_rounds. */
765
+ await logDispatch({
766
+ ts: new Date().toISOString(),
767
+ kind: 'invoke',
768
+ ...baseEntry,
769
+ verb_id: verb.id,
770
+ alias_used,
771
+ args_sample: redactArgs(args),
772
+ policy: verb.policy,
773
+ side_effects_declared: verb.side_effects,
774
+ side_effects_actual: ['dom'],
775
+ result_ok: true,
776
+ duration_ms: Date.now() - startedAt,
777
+ });
778
+ return {
779
+ tool: NAC3_INVOKE_SPEC.name,
780
+ is_error: false,
781
+ result: {
782
+ nac3_panel_dispatch: true,
783
+ trace_id,
784
+ verb: {
785
+ id: verb.id,
786
+ action: verb.action,
787
+ role: verb.role,
788
+ policy: verb.policy,
789
+ side_effects: verb.side_effects,
790
+ },
791
+ args,
792
+ },
793
+ display: 'nac3_invoke -> panel:' + verb.action + ' (' + verb.id + ')',
794
+ };
795
+ }
796
+ /* handler_side === 'server': route to a handler. alpha.59d --
797
+ * prefer the verb_id directly (the dispatcher's switch knows
798
+ * yujin.* verbs natively); fall back to the legacy alias for
799
+ * pre-alpha.41 surfaces. */
800
+ let alias = verb.deprecated_aliases && verb.deprecated_aliases[0];
801
+ if (!alias) {
802
+ /* No legacy alias declared -- try the verb_id itself as a
803
+ * native handler name. tools.ts adds cases for yujin.* verbs
804
+ * introduced in alpha.59d (mkdir / move / project.init /
805
+ * project.set-root / shell.exec). */
806
+ alias = verb.id;
807
+ }
808
+ /* Forward the dispatcher-resolved approval mode to the handler
809
+ * via args.approval_mode so audit rows capture how the invocation
810
+ * was approved (auto / user / danger_zone). PND-052 (sec 2.1) --
811
+ * was `_approval_mode` (underscore), which no handler ever read,
812
+ * so every audit row defaulted to 'user_approved' regardless of
813
+ * the real mode. The handlers + panel audit read `approval_mode`. */
814
+ const argsWithMode = { ...args };
815
+ if (typeof args.approval_mode !== 'string') {
816
+ argsWithMode.approval_mode = verb.policy === 'unrestricted' ? 'auto_approved' : 'user_approved';
817
+ }
818
+ let r;
819
+ try {
820
+ r = await opts.legacyRun(alias, argsWithMode, ctx);
821
+ }
822
+ catch (err) {
823
+ await logDispatch({
824
+ ts: new Date().toISOString(),
825
+ kind: 'invoke',
826
+ ...baseEntry,
827
+ verb_id: verb.id,
828
+ alias_used: alias,
829
+ args_sample: redactArgs(args),
830
+ policy: verb.policy,
831
+ side_effects_declared: verb.side_effects,
832
+ result_ok: false,
833
+ result_error: err instanceof Error ? err.message : String(err),
834
+ duration_ms: Date.now() - startedAt,
835
+ });
836
+ return {
837
+ tool: NAC3_INVOKE_SPEC.name,
838
+ is_error: true,
839
+ result: {
840
+ error: 'verb handler threw: ' + (err instanceof Error ? err.message : String(err)),
841
+ verb_id: verb.id,
842
+ },
843
+ display: 'nac3_invoke <- handler threw',
844
+ };
845
+ }
846
+ await logDispatch({
847
+ ts: new Date().toISOString(),
848
+ kind: 'invoke',
849
+ ...baseEntry,
850
+ verb_id: verb.id,
851
+ alias_used: alias,
852
+ args_sample: redactArgs(args),
853
+ policy: verb.policy,
854
+ side_effects_declared: verb.side_effects,
855
+ side_effects_actual: verb.side_effects,
856
+ result_ok: !r.is_error,
857
+ result_error: r.is_error
858
+ ? (typeof r.result === 'object' && r.result && 'error' in r.result
859
+ ? String(r.result.error)
860
+ : 'unknown')
861
+ : undefined,
862
+ duration_ms: Date.now() - startedAt,
863
+ });
864
+ /* panel_consume = the server-side handler ran (e.g. read a file
865
+ * from disk) and the result is meant to materialise a UI update
866
+ * in the panel. Wrap as a panel-dispatch envelope so the panel
867
+ * intercept sees the canonical shape (same as handler_side=
868
+ * panel verbs above). */
869
+ if (!r.is_error && verb.panel_consume) {
870
+ return {
871
+ tool: NAC3_INVOKE_SPEC.name,
872
+ is_error: false,
873
+ result: {
874
+ nac3_panel_dispatch: true,
875
+ trace_id,
876
+ verb: {
877
+ id: verb.id,
878
+ action: verb.action,
879
+ role: verb.role,
880
+ policy: verb.policy,
881
+ side_effects: verb.side_effects,
882
+ },
883
+ args,
884
+ server_payload: r.result,
885
+ },
886
+ display: 'nac3_invoke -> panel(consume):' + verb.action + ' (' + verb.id + ')',
887
+ };
888
+ }
889
+ return {
890
+ tool: NAC3_INVOKE_SPEC.name,
891
+ is_error: r.is_error ?? false,
892
+ result: r.result,
893
+ display: 'nac3_invoke -> ' + verb.id + (r.is_error ? ' (error)' : ' (ok)'),
894
+ };
895
+ }
896
+ //# sourceMappingURL=nac3_invoke.js.map