@nac3/forge-cli 0.2.0-alpha.5 → 0.2.0-alpha.59z.119

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 (768) hide show
  1. package/README.md +16 -1
  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/config_resolver.d.ts +16 -0
  7. package/dist/agents/config_resolver.d.ts.map +1 -0
  8. package/dist/agents/config_resolver.js +133 -0
  9. package/dist/agents/config_resolver.js.map +1 -0
  10. package/dist/agents/config_schema.d.ts +42 -0
  11. package/dist/agents/config_schema.d.ts.map +1 -0
  12. package/dist/agents/config_schema.js +204 -0
  13. package/dist/agents/config_schema.js.map +1 -0
  14. package/dist/agents/defaults.d.ts +21 -0
  15. package/dist/agents/defaults.d.ts.map +1 -0
  16. package/dist/agents/defaults.js +56 -0
  17. package/dist/agents/defaults.js.map +1 -0
  18. package/dist/agents/runner.d.ts +94 -0
  19. package/dist/agents/runner.d.ts.map +1 -0
  20. package/dist/agents/runner.js +165 -0
  21. package/dist/agents/runner.js.map +1 -0
  22. package/dist/agents/store.d.ts +33 -0
  23. package/dist/agents/store.d.ts.map +1 -0
  24. package/dist/agents/store.js +210 -0
  25. package/dist/agents/store.js.map +1 -0
  26. package/dist/agents/types.d.ts +112 -0
  27. package/dist/agents/types.d.ts.map +1 -0
  28. package/dist/agents/types.js +39 -0
  29. package/dist/agents/types.js.map +1 -0
  30. package/dist/bin/yf.d.ts.map +1 -1
  31. package/dist/bin/yf.js +86 -2
  32. package/dist/bin/yf.js.map +1 -1
  33. package/dist/chat/claude.d.ts +53 -15
  34. package/dist/chat/claude.d.ts.map +1 -1
  35. package/dist/chat/claude.js +152 -27
  36. package/dist/chat/claude.js.map +1 -1
  37. package/dist/chat/graph_auto_ingest.d.ts +46 -0
  38. package/dist/chat/graph_auto_ingest.d.ts.map +1 -0
  39. package/dist/chat/graph_auto_ingest.js +162 -0
  40. package/dist/chat/graph_auto_ingest.js.map +1 -0
  41. package/dist/chat/graph_component_watcher.d.ts +30 -0
  42. package/dist/chat/graph_component_watcher.d.ts.map +1 -0
  43. package/dist/chat/graph_component_watcher.js +220 -0
  44. package/dist/chat/graph_component_watcher.js.map +1 -0
  45. package/dist/chat/panel.d.ts.map +1 -1
  46. package/dist/chat/panel.js +5819 -1455
  47. package/dist/chat/panel.js.map +1 -1
  48. package/dist/chat/project_slug.d.ts +6 -0
  49. package/dist/chat/project_slug.d.ts.map +1 -0
  50. package/dist/chat/project_slug.js +78 -0
  51. package/dist/chat/project_slug.js.map +1 -0
  52. package/dist/chat/semantic_graph_ingest.d.ts +31 -0
  53. package/dist/chat/semantic_graph_ingest.d.ts.map +1 -0
  54. package/dist/chat/semantic_graph_ingest.js +84 -0
  55. package/dist/chat/semantic_graph_ingest.js.map +1 -0
  56. package/dist/chat/semantic_graph_inject.d.ts +25 -0
  57. package/dist/chat/semantic_graph_inject.d.ts.map +1 -0
  58. package/dist/chat/semantic_graph_inject.js +64 -0
  59. package/dist/chat/semantic_graph_inject.js.map +1 -0
  60. package/dist/chat/server.d.ts +50 -0
  61. package/dist/chat/server.d.ts.map +1 -1
  62. package/dist/chat/server.js +1905 -54
  63. package/dist/chat/server.js.map +1 -1
  64. package/dist/chat/spec_extract.d.ts +1 -2
  65. package/dist/chat/spec_extract.d.ts.map +1 -1
  66. package/dist/chat/spec_extract.js +18 -59
  67. package/dist/chat/spec_extract.js.map +1 -1
  68. package/dist/chat/spec_plan.d.ts +1 -2
  69. package/dist/chat/spec_plan.d.ts.map +1 -1
  70. package/dist/chat/spec_plan.js +15 -60
  71. package/dist/chat/spec_plan.js.map +1 -1
  72. package/dist/chat/tools/app_backend_dispatch.d.ts +39 -0
  73. package/dist/chat/tools/app_backend_dispatch.d.ts.map +1 -0
  74. package/dist/chat/tools/app_backend_dispatch.js +239 -0
  75. package/dist/chat/tools/app_backend_dispatch.js.map +1 -0
  76. package/dist/chat/tools/audit_consumers.d.ts +66 -0
  77. package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
  78. package/dist/chat/tools/audit_consumers.js +231 -0
  79. package/dist/chat/tools/audit_consumers.js.map +1 -0
  80. package/dist/chat/tools/fs_editor.d.ts +11 -0
  81. package/dist/chat/tools/fs_editor.d.ts.map +1 -0
  82. package/dist/chat/tools/fs_editor.js +162 -0
  83. package/dist/chat/tools/fs_editor.js.map +1 -0
  84. package/dist/chat/tools/git.d.ts +24 -0
  85. package/dist/chat/tools/git.d.ts.map +1 -1
  86. package/dist/chat/tools/git.js +78 -0
  87. package/dist/chat/tools/git.js.map +1 -1
  88. package/dist/chat/tools/keys.d.ts +9 -0
  89. package/dist/chat/tools/keys.d.ts.map +1 -0
  90. package/dist/chat/tools/keys.js +152 -0
  91. package/dist/chat/tools/keys.js.map +1 -0
  92. package/dist/chat/tools/misc_verbs.d.ts +36 -0
  93. package/dist/chat/tools/misc_verbs.d.ts.map +1 -0
  94. package/dist/chat/tools/misc_verbs.js +405 -0
  95. package/dist/chat/tools/misc_verbs.js.map +1 -0
  96. package/dist/chat/tools/nac3_invoke.d.ts +53 -0
  97. package/dist/chat/tools/nac3_invoke.d.ts.map +1 -0
  98. package/dist/chat/tools/nac3_invoke.js +886 -0
  99. package/dist/chat/tools/nac3_invoke.js.map +1 -0
  100. package/dist/chat/tools/pizarron.d.ts +40 -0
  101. package/dist/chat/tools/pizarron.d.ts.map +1 -0
  102. package/dist/chat/tools/pizarron.js +123 -0
  103. package/dist/chat/tools/pizarron.js.map +1 -0
  104. package/dist/chat/tools/project_lifecycle.d.ts +24 -0
  105. package/dist/chat/tools/project_lifecycle.d.ts.map +1 -0
  106. package/dist/chat/tools/project_lifecycle.js +184 -0
  107. package/dist/chat/tools/project_lifecycle.js.map +1 -0
  108. package/dist/chat/tools/reader.d.ts.map +1 -1
  109. package/dist/chat/tools/reader.js +144 -1
  110. package/dist/chat/tools/reader.js.map +1 -1
  111. package/dist/chat/tools/shell.d.ts +58 -0
  112. package/dist/chat/tools/shell.d.ts.map +1 -0
  113. package/dist/chat/tools/shell.js +253 -0
  114. package/dist/chat/tools/shell.js.map +1 -0
  115. package/dist/chat/tools/workflow.d.ts +45 -0
  116. package/dist/chat/tools/workflow.d.ts.map +1 -0
  117. package/dist/chat/tools/workflow.js +404 -0
  118. package/dist/chat/tools/workflow.js.map +1 -0
  119. package/dist/chat/tools.d.ts +27 -0
  120. package/dist/chat/tools.d.ts.map +1 -1
  121. package/dist/chat/tools.js +362 -13
  122. package/dist/chat/tools.js.map +1 -1
  123. package/dist/chat/workflow_inject.d.ts +52 -0
  124. package/dist/chat/workflow_inject.d.ts.map +1 -0
  125. package/dist/chat/workflow_inject.js +346 -0
  126. package/dist/chat/workflow_inject.js.map +1 -0
  127. package/dist/commands/agent.d.ts +22 -0
  128. package/dist/commands/agent.d.ts.map +1 -0
  129. package/dist/commands/agent.js +190 -0
  130. package/dist/commands/agent.js.map +1 -0
  131. package/dist/commands/approve.d.ts +32 -0
  132. package/dist/commands/approve.d.ts.map +1 -0
  133. package/dist/commands/approve.js +198 -0
  134. package/dist/commands/approve.js.map +1 -0
  135. package/dist/commands/block.d.ts +28 -0
  136. package/dist/commands/block.d.ts.map +1 -0
  137. package/dist/commands/block.js +189 -0
  138. package/dist/commands/block.js.map +1 -0
  139. package/dist/commands/bootstrap.d.ts +35 -0
  140. package/dist/commands/bootstrap.d.ts.map +1 -0
  141. package/dist/commands/bootstrap.js +205 -0
  142. package/dist/commands/bootstrap.js.map +1 -0
  143. package/dist/commands/brain.d.ts +17 -0
  144. package/dist/commands/brain.d.ts.map +1 -0
  145. package/dist/commands/brain.js +129 -0
  146. package/dist/commands/brain.js.map +1 -0
  147. package/dist/commands/chat.d.ts +3 -0
  148. package/dist/commands/chat.d.ts.map +1 -1
  149. package/dist/commands/chat.js +112 -1
  150. package/dist/commands/chat.js.map +1 -1
  151. package/dist/commands/clarify.d.ts +30 -0
  152. package/dist/commands/clarify.d.ts.map +1 -0
  153. package/dist/commands/clarify.js +671 -0
  154. package/dist/commands/clarify.js.map +1 -0
  155. package/dist/commands/discover.d.ts +30 -0
  156. package/dist/commands/discover.d.ts.map +1 -0
  157. package/dist/commands/discover.js +178 -0
  158. package/dist/commands/discover.js.map +1 -0
  159. package/dist/commands/doctor.js +26 -4
  160. package/dist/commands/doctor.js.map +1 -1
  161. package/dist/commands/doctrine.d.ts +24 -0
  162. package/dist/commands/doctrine.d.ts.map +1 -0
  163. package/dist/commands/doctrine.js +106 -0
  164. package/dist/commands/doctrine.js.map +1 -0
  165. package/dist/commands/doctrines.d.ts +21 -0
  166. package/dist/commands/doctrines.d.ts.map +1 -0
  167. package/dist/commands/doctrines.js +158 -0
  168. package/dist/commands/doctrines.js.map +1 -0
  169. package/dist/commands/graph.d.ts +21 -0
  170. package/dist/commands/graph.d.ts.map +1 -0
  171. package/dist/commands/graph.js +363 -0
  172. package/dist/commands/graph.js.map +1 -0
  173. package/dist/commands/keys_setup.d.ts.map +1 -1
  174. package/dist/commands/keys_setup.js +80 -0
  175. package/dist/commands/keys_setup.js.map +1 -1
  176. package/dist/commands/legacy-audit.d.ts +34 -0
  177. package/dist/commands/legacy-audit.d.ts.map +1 -0
  178. package/dist/commands/legacy-audit.js +270 -0
  179. package/dist/commands/legacy-audit.js.map +1 -0
  180. package/dist/commands/lessons.d.ts +28 -0
  181. package/dist/commands/lessons.d.ts.map +1 -0
  182. package/dist/commands/lessons.js +309 -0
  183. package/dist/commands/lessons.js.map +1 -0
  184. package/dist/commands/license.d.ts.map +1 -1
  185. package/dist/commands/license.js +56 -1
  186. package/dist/commands/license.js.map +1 -1
  187. package/dist/commands/limits.d.ts +15 -0
  188. package/dist/commands/limits.d.ts.map +1 -0
  189. package/dist/commands/limits.js +51 -0
  190. package/dist/commands/limits.js.map +1 -0
  191. package/dist/commands/manifest-cli.d.ts +12 -0
  192. package/dist/commands/manifest-cli.d.ts.map +1 -0
  193. package/dist/commands/manifest-cli.js +42 -0
  194. package/dist/commands/manifest-cli.js.map +1 -0
  195. package/dist/commands/mcp.d.ts +24 -0
  196. package/dist/commands/mcp.d.ts.map +1 -0
  197. package/dist/commands/mcp.js +163 -0
  198. package/dist/commands/mcp.js.map +1 -0
  199. package/dist/commands/nac3.d.ts +22 -0
  200. package/dist/commands/nac3.d.ts.map +1 -0
  201. package/dist/commands/nac3.js +125 -0
  202. package/dist/commands/nac3.js.map +1 -0
  203. package/dist/commands/operate.d.ts +22 -0
  204. package/dist/commands/operate.d.ts.map +1 -0
  205. package/dist/commands/operate.js +523 -0
  206. package/dist/commands/operate.js.map +1 -0
  207. package/dist/commands/qa.d.ts +24 -0
  208. package/dist/commands/qa.d.ts.map +1 -0
  209. package/dist/commands/qa.js +349 -0
  210. package/dist/commands/qa.js.map +1 -0
  211. package/dist/commands/spec.d.ts +38 -0
  212. package/dist/commands/spec.d.ts.map +1 -0
  213. package/dist/commands/spec.js +256 -0
  214. package/dist/commands/spec.js.map +1 -0
  215. package/dist/commands/support.d.ts +22 -0
  216. package/dist/commands/support.d.ts.map +1 -0
  217. package/dist/commands/support.js +165 -0
  218. package/dist/commands/support.js.map +1 -0
  219. package/dist/commands/triage.d.ts +34 -0
  220. package/dist/commands/triage.d.ts.map +1 -0
  221. package/dist/commands/triage.js +228 -0
  222. package/dist/commands/triage.js.map +1 -0
  223. package/dist/commands/vault-inventory.d.ts +30 -0
  224. package/dist/commands/vault-inventory.d.ts.map +1 -0
  225. package/dist/commands/vault-inventory.js +222 -0
  226. package/dist/commands/vault-inventory.js.map +1 -0
  227. package/dist/commands/vault.d.ts.map +1 -1
  228. package/dist/commands/vault.js +5 -0
  229. package/dist/commands/vault.js.map +1 -1
  230. package/dist/commands/voice.d.ts.map +1 -1
  231. package/dist/commands/voice.js +47 -4
  232. package/dist/commands/voice.js.map +1 -1
  233. package/dist/commands/workflow-coverage.d.ts +30 -0
  234. package/dist/commands/workflow-coverage.d.ts.map +1 -0
  235. package/dist/commands/workflow-coverage.js +138 -0
  236. package/dist/commands/workflow-coverage.js.map +1 -0
  237. package/dist/core/ansi_strip.d.ts +39 -0
  238. package/dist/core/ansi_strip.d.ts.map +1 -0
  239. package/dist/core/ansi_strip.js +71 -0
  240. package/dist/core/ansi_strip.js.map +1 -0
  241. package/dist/core/audit_log.d.ts +43 -0
  242. package/dist/core/audit_log.d.ts.map +1 -0
  243. package/dist/core/audit_log.js +80 -0
  244. package/dist/core/audit_log.js.map +1 -0
  245. package/dist/core/brain_config.d.ts +33 -0
  246. package/dist/core/brain_config.d.ts.map +1 -0
  247. package/dist/core/brain_config.js +132 -0
  248. package/dist/core/brain_config.js.map +1 -0
  249. package/dist/core/budget.d.ts +96 -0
  250. package/dist/core/budget.d.ts.map +1 -0
  251. package/dist/core/budget.js +300 -0
  252. package/dist/core/budget.js.map +1 -0
  253. package/dist/core/cost_meter.d.ts +35 -0
  254. package/dist/core/cost_meter.d.ts.map +1 -0
  255. package/dist/core/cost_meter.js +111 -0
  256. package/dist/core/cost_meter.js.map +1 -0
  257. package/dist/core/cost_router.d.ts +106 -0
  258. package/dist/core/cost_router.d.ts.map +1 -0
  259. package/dist/core/cost_router.js +465 -0
  260. package/dist/core/cost_router.js.map +1 -0
  261. package/dist/core/doctrine_resolver.d.ts +23 -0
  262. package/dist/core/doctrine_resolver.d.ts.map +1 -0
  263. package/dist/core/doctrine_resolver.js +108 -0
  264. package/dist/core/doctrine_resolver.js.map +1 -0
  265. package/dist/core/error_catalog.d.ts +80 -0
  266. package/dist/core/error_catalog.d.ts.map +1 -0
  267. package/dist/core/error_catalog.js +168 -0
  268. package/dist/core/error_catalog.js.map +1 -0
  269. package/dist/core/error_formatter.d.ts +30 -0
  270. package/dist/core/error_formatter.d.ts.map +1 -0
  271. package/dist/core/error_formatter.js +155 -0
  272. package/dist/core/error_formatter.js.map +1 -0
  273. package/dist/core/incomplete_detector.d.ts +51 -0
  274. package/dist/core/incomplete_detector.d.ts.map +1 -0
  275. package/dist/core/incomplete_detector.js +140 -0
  276. package/dist/core/incomplete_detector.js.map +1 -0
  277. package/dist/core/learnings_client.d.ts +104 -0
  278. package/dist/core/learnings_client.d.ts.map +1 -0
  279. package/dist/core/learnings_client.js +262 -0
  280. package/dist/core/learnings_client.js.map +1 -0
  281. package/dist/core/limits_config.d.ts +76 -0
  282. package/dist/core/limits_config.d.ts.map +1 -0
  283. package/dist/core/limits_config.js +297 -0
  284. package/dist/core/limits_config.js.map +1 -0
  285. package/dist/core/provider_keys.d.ts +35 -0
  286. package/dist/core/provider_keys.d.ts.map +1 -0
  287. package/dist/core/provider_keys.js +260 -0
  288. package/dist/core/provider_keys.js.map +1 -0
  289. package/dist/core/reasoning_gate.d.ts +72 -0
  290. package/dist/core/reasoning_gate.d.ts.map +1 -0
  291. package/dist/core/reasoning_gate.js +192 -0
  292. package/dist/core/reasoning_gate.js.map +1 -0
  293. package/dist/core/shell_classifier.d.ts +49 -0
  294. package/dist/core/shell_classifier.d.ts.map +1 -0
  295. package/dist/core/shell_classifier.js +159 -0
  296. package/dist/core/shell_classifier.js.map +1 -0
  297. package/dist/core/sq_resolver.d.ts +14 -0
  298. package/dist/core/sq_resolver.d.ts.map +1 -0
  299. package/dist/core/sq_resolver.js +230 -0
  300. package/dist/core/sq_resolver.js.map +1 -0
  301. package/dist/core/truncation_detector.d.ts +68 -0
  302. package/dist/core/truncation_detector.d.ts.map +1 -0
  303. package/dist/core/truncation_detector.js +115 -0
  304. package/dist/core/truncation_detector.js.map +1 -0
  305. package/dist/core/turn_classifier.d.ts +62 -0
  306. package/dist/core/turn_classifier.d.ts.map +1 -0
  307. package/dist/core/turn_classifier.js +213 -0
  308. package/dist/core/turn_classifier.js.map +1 -0
  309. package/dist/core/whats_new.d.ts +42 -0
  310. package/dist/core/whats_new.d.ts.map +1 -0
  311. package/dist/core/whats_new.js +214 -0
  312. package/dist/core/whats_new.js.map +1 -0
  313. package/dist/deploy/adapter.d.ts +93 -0
  314. package/dist/deploy/adapter.d.ts.map +1 -0
  315. package/dist/deploy/adapter.js +42 -0
  316. package/dist/deploy/adapter.js.map +1 -0
  317. package/dist/deploy/aws_adapter.d.ts +28 -0
  318. package/dist/deploy/aws_adapter.d.ts.map +1 -0
  319. package/dist/deploy/aws_adapter.js +98 -0
  320. package/dist/deploy/aws_adapter.js.map +1 -0
  321. package/dist/deploy/cloudflare.d.ts +24 -0
  322. package/dist/deploy/cloudflare.d.ts.map +1 -0
  323. package/dist/deploy/cloudflare.js +169 -0
  324. package/dist/deploy/cloudflare.js.map +1 -0
  325. package/dist/docs/LIMITED_RESPONSIBILITY.md +216 -0
  326. package/dist/docs/PRIVACY_POLICY.md +169 -0
  327. package/dist/docs/SQ.md +1397 -0
  328. package/dist/docs/SQ_BY_STEP.yaml +147 -0
  329. package/dist/docs/doctrine/accessibility.md +78 -0
  330. package/dist/docs/doctrine/agent-orchestrator.md +76 -0
  331. package/dist/docs/doctrine/byok-vs-managed.md +81 -0
  332. package/dist/docs/doctrine/cost-router-escalation.md +73 -0
  333. package/dist/docs/doctrine/explain-results.md +90 -0
  334. package/dist/docs/doctrine/g-doc.md +46 -0
  335. package/dist/docs/doctrine/gates.md +21 -0
  336. package/dist/docs/doctrine/lessons-workflow.md +68 -0
  337. package/dist/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
  338. package/dist/docs/doctrine/nac3-attrs.md +23 -0
  339. package/dist/docs/doctrine/office-tools.md +102 -0
  340. package/dist/docs/doctrine/pizarron.md +52 -0
  341. package/dist/docs/doctrine/r8-modal.md +60 -0
  342. package/dist/docs/doctrine/safety-refusals.md +73 -0
  343. package/dist/docs/doctrine/verb-composition.md +68 -0
  344. package/dist/docs/doctrine/workflow-phases.md +108 -0
  345. package/dist/docs/doctrine/workflow.md +58 -0
  346. package/dist/docs/doctrine/yf-commands.md +49 -0
  347. package/dist/json/query.d.ts +38 -0
  348. package/dist/json/query.d.ts.map +1 -0
  349. package/dist/json/query.js +177 -0
  350. package/dist/json/query.js.map +1 -0
  351. package/dist/license/hito4_client.d.ts +19 -0
  352. package/dist/license/hito4_client.d.ts.map +1 -1
  353. package/dist/license/hito4_client.js +110 -0
  354. package/dist/license/hito4_client.js.map +1 -1
  355. package/dist/license/index.d.ts.map +1 -1
  356. package/dist/license/index.js +7 -0
  357. package/dist/license/index.js.map +1 -1
  358. package/dist/license/sync.d.ts +54 -0
  359. package/dist/license/sync.d.ts.map +1 -0
  360. package/dist/license/sync.js +138 -0
  361. package/dist/license/sync.js.map +1 -0
  362. package/dist/llm/cohere_client.d.ts +81 -0
  363. package/dist/llm/cohere_client.d.ts.map +1 -0
  364. package/dist/llm/cohere_client.js +195 -0
  365. package/dist/llm/cohere_client.js.map +1 -0
  366. package/dist/llm/deepseek_client.d.ts +63 -0
  367. package/dist/llm/deepseek_client.d.ts.map +1 -0
  368. package/dist/llm/deepseek_client.js +188 -0
  369. package/dist/llm/deepseek_client.js.map +1 -0
  370. package/dist/llm/gemini_client.d.ts +78 -0
  371. package/dist/llm/gemini_client.d.ts.map +1 -0
  372. package/dist/llm/gemini_client.js +189 -0
  373. package/dist/llm/gemini_client.js.map +1 -0
  374. package/dist/llm/managed_client.d.ts +70 -0
  375. package/dist/llm/managed_client.d.ts.map +1 -0
  376. package/dist/llm/managed_client.js +251 -0
  377. package/dist/llm/managed_client.js.map +1 -0
  378. package/dist/llm/mistral_client.d.ts +54 -0
  379. package/dist/llm/mistral_client.d.ts.map +1 -0
  380. package/dist/llm/mistral_client.js +174 -0
  381. package/dist/llm/mistral_client.js.map +1 -0
  382. package/dist/llm/multi_provider_client.d.ts +57 -0
  383. package/dist/llm/multi_provider_client.d.ts.map +1 -0
  384. package/dist/llm/multi_provider_client.js +109 -0
  385. package/dist/llm/multi_provider_client.js.map +1 -0
  386. package/dist/llm/openai_client.d.ts +77 -0
  387. package/dist/llm/openai_client.d.ts.map +1 -0
  388. package/dist/llm/openai_client.js +200 -0
  389. package/dist/llm/openai_client.js.map +1 -0
  390. package/dist/llm/xai_client.d.ts +51 -0
  391. package/dist/llm/xai_client.d.ts.map +1 -0
  392. package/dist/llm/xai_client.js +174 -0
  393. package/dist/llm/xai_client.js.map +1 -0
  394. package/dist/mcp/bridge_registry.d.ts +77 -0
  395. package/dist/mcp/bridge_registry.d.ts.map +1 -0
  396. package/dist/mcp/bridge_registry.js +220 -0
  397. package/dist/mcp/bridge_registry.js.map +1 -0
  398. package/dist/mcp/config.d.ts +25 -0
  399. package/dist/mcp/config.d.ts.map +1 -0
  400. package/dist/mcp/config.js +116 -0
  401. package/dist/mcp/config.js.map +1 -0
  402. package/dist/mcp/protocol_client.d.ts +63 -0
  403. package/dist/mcp/protocol_client.d.ts.map +1 -0
  404. package/dist/mcp/protocol_client.js +340 -0
  405. package/dist/mcp/protocol_client.js.map +1 -0
  406. package/dist/mcp/state.d.ts +38 -0
  407. package/dist/mcp/state.d.ts.map +1 -0
  408. package/dist/mcp/state.js +144 -0
  409. package/dist/mcp/state.js.map +1 -0
  410. package/dist/migrate/ai-decorator.d.ts.map +1 -1
  411. package/dist/migrate/ai-decorator.js +33 -145
  412. package/dist/migrate/ai-decorator.js.map +1 -1
  413. package/dist/nac3/approval_queue.d.ts +36 -0
  414. package/dist/nac3/approval_queue.d.ts.map +1 -0
  415. package/dist/nac3/approval_queue.js +105 -0
  416. package/dist/nac3/approval_queue.js.map +1 -0
  417. package/dist/nac3/backend_tools.d.ts +89 -0
  418. package/dist/nac3/backend_tools.d.ts.map +1 -0
  419. package/dist/nac3/backend_tools.js +271 -0
  420. package/dist/nac3/backend_tools.js.map +1 -0
  421. package/dist/nac3/dispatch_log.d.ts +35 -0
  422. package/dist/nac3/dispatch_log.d.ts.map +1 -0
  423. package/dist/nac3/dispatch_log.js +126 -0
  424. package/dist/nac3/dispatch_log.js.map +1 -0
  425. package/dist/nac3/internal_manifest.d.ts +62 -0
  426. package/dist/nac3/internal_manifest.d.ts.map +1 -0
  427. package/dist/nac3/internal_manifest.js +1846 -0
  428. package/dist/nac3/internal_manifest.js.map +1 -0
  429. package/dist/nac3/manifest_lazy.d.ts +71 -0
  430. package/dist/nac3/manifest_lazy.d.ts.map +1 -0
  431. package/dist/nac3/manifest_lazy.js +141 -0
  432. package/dist/nac3/manifest_lazy.js.map +1 -0
  433. package/dist/nac3/verb_tier_map.d.ts +80 -0
  434. package/dist/nac3/verb_tier_map.d.ts.map +1 -0
  435. package/dist/nac3/verb_tier_map.js +159 -0
  436. package/dist/nac3/verb_tier_map.js.map +1 -0
  437. package/dist/office/excel.d.ts +110 -0
  438. package/dist/office/excel.d.ts.map +1 -0
  439. package/dist/office/excel.js +276 -0
  440. package/dist/office/excel.js.map +1 -0
  441. package/dist/office/pdf.d.ts +35 -0
  442. package/dist/office/pdf.d.ts.map +1 -0
  443. package/dist/office/pdf.js +70 -0
  444. package/dist/office/pdf.js.map +1 -0
  445. package/dist/office/word.d.ts +64 -0
  446. package/dist/office/word.d.ts.map +1 -0
  447. package/dist/office/word.js +243 -0
  448. package/dist/office/word.js.map +1 -0
  449. package/dist/qa/brain_matrix/ab_runner.d.ts +44 -0
  450. package/dist/qa/brain_matrix/ab_runner.d.ts.map +1 -0
  451. package/dist/qa/brain_matrix/ab_runner.js +144 -0
  452. package/dist/qa/brain_matrix/ab_runner.js.map +1 -0
  453. package/dist/qa/brain_matrix/brains.json +80 -0
  454. package/dist/qa/brain_matrix/compare.d.ts +27 -0
  455. package/dist/qa/brain_matrix/compare.d.ts.map +1 -0
  456. package/dist/qa/brain_matrix/compare.js +122 -0
  457. package/dist/qa/brain_matrix/compare.js.map +1 -0
  458. package/dist/qa/brain_matrix/fake_brain.d.ts +36 -0
  459. package/dist/qa/brain_matrix/fake_brain.d.ts.map +1 -0
  460. package/dist/qa/brain_matrix/fake_brain.js +27 -0
  461. package/dist/qa/brain_matrix/fake_brain.js.map +1 -0
  462. package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_intent.json +22 -0
  463. package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_no_speak_default.json +23 -0
  464. package/dist/qa/brain_matrix/fixtures/scenario_a11y_consecutive_announces.json +37 -0
  465. package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_action.json +22 -0
  466. package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_with_shortcut.json +22 -0
  467. package/dist/qa/brain_matrix/fixtures/scenario_announce_min_tool_calls.json +23 -0
  468. package/dist/qa/brain_matrix/fixtures/scenario_app_invoke_happy_path.json +65 -0
  469. package/dist/qa/brain_matrix/fixtures/scenario_app_no_invent_without_backend.json +18 -0
  470. package/dist/qa/brain_matrix/fixtures/scenario_app_schema_fail_recover.json +48 -0
  471. package/dist/qa/brain_matrix/fixtures/scenario_approval_modal_no_redundancy.json +21 -0
  472. package/dist/qa/brain_matrix/fixtures/scenario_args_redacted_in_audit.json +17 -0
  473. package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent.json +19 -0
  474. package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent_en.json +19 -0
  475. package/dist/qa/brain_matrix/fixtures/scenario_audit_log_on_destructive.json +18 -0
  476. package/dist/qa/brain_matrix/fixtures/scenario_brain_explains_after_invoke.json +28 -0
  477. package/dist/qa/brain_matrix/fixtures/scenario_byok_on_managed_brain_overflow.json +28 -0
  478. package/dist/qa/brain_matrix/fixtures/scenario_byok_required_policy.json +35 -0
  479. package/dist/qa/brain_matrix/fixtures/scenario_concise_no_loop.json +23 -0
  480. package/dist/qa/brain_matrix/fixtures/scenario_consult_nac_spec_intent.json +19 -0
  481. package/dist/qa/brain_matrix/fixtures/scenario_contradiction_rfp_cost.json +38 -0
  482. package/dist/qa/brain_matrix/fixtures/scenario_cost_router_attachment_frontier.json +24 -0
  483. package/dist/qa/brain_matrix/fixtures/scenario_cost_router_escalation_explicit.json +23 -0
  484. package/dist/qa/brain_matrix/fixtures/scenario_cost_router_idle_reset.json +24 -0
  485. package/dist/qa/brain_matrix/fixtures/scenario_csv_via_excel_read.json +22 -0
  486. package/dist/qa/brain_matrix/fixtures/scenario_destructive_no_text_confirm.json +20 -0
  487. package/dist/qa/brain_matrix/fixtures/scenario_diff_explains_changes.json +32 -0
  488. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_after_unknown_intent.json +17 -0
  489. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_a11y.json +24 -0
  490. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_agent_orchestrator.json +24 -0
  491. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_byok_vs_managed.json +24 -0
  492. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_cost_router.json +24 -0
  493. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_g_doc.json +24 -0
  494. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_gates.json +23 -0
  495. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_intent_en.json +19 -0
  496. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_lessons_workflow.json +24 -0
  497. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_mcp_lifecycle.json +24 -0
  498. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_nac3_attrs.json +24 -0
  499. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_office.json +24 -0
  500. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_pizarron.json +23 -0
  501. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_r8_modal.json +23 -0
  502. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow.json +23 -0
  503. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow_phases.json +24 -0
  504. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_yf_commands.json +24 -0
  505. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_explain_results.json +22 -0
  506. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_safety_refusals.json +22 -0
  507. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_verb_composition.json +22 -0
  508. package/dist/qa/brain_matrix/fixtures/scenario_eco_defers_complex.json +17 -0
  509. package/dist/qa/brain_matrix/fixtures/scenario_eco_short_query.json +27 -0
  510. package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent.json +20 -0
  511. package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent_en.json +20 -0
  512. package/dist/qa/brain_matrix/fixtures/scenario_env_no_secret_leak.json +21 -0
  513. package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression.json +35 -0
  514. package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression_en.json +21 -0
  515. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_handles_csv_refusal.json +28 -0
  516. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent.json +20 -0
  517. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent_en.json +20 -0
  518. package/dist/qa/brain_matrix/fixtures/scenario_excel_append_then_list.json +34 -0
  519. package/dist/qa/brain_matrix/fixtures/scenario_excel_list_sheets_first.json +22 -0
  520. package/dist/qa/brain_matrix/fixtures/scenario_excel_sheet_named.json +23 -0
  521. package/dist/qa/brain_matrix/fixtures/scenario_explain_voice_yes.json +22 -0
  522. package/dist/qa/brain_matrix/fixtures/scenario_explains_forge_error.json +39 -0
  523. package/dist/qa/brain_matrix/fixtures/scenario_focus_after_modal_open.json +29 -0
  524. package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent.json +21 -0
  525. package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent_en.json +20 -0
  526. package/dist/qa/brain_matrix/fixtures/scenario_fs_find_with_glob.json +22 -0
  527. package/dist/qa/brain_matrix/fixtures/scenario_fs_mkdir_intent.json +20 -0
  528. package/dist/qa/brain_matrix/fixtures/scenario_fs_move_intent.json +20 -0
  529. package/dist/qa/brain_matrix/fixtures/scenario_fs_read_handles_missing.json +28 -0
  530. package/dist/qa/brain_matrix/fixtures/scenario_fs_stat_before_read.json +22 -0
  531. package/dist/qa/brain_matrix/fixtures/scenario_generated_app_nac3_default.json +24 -0
  532. package/dist/qa/brain_matrix/fixtures/scenario_git_branch_list_intent.json +20 -0
  533. package/dist/qa/brain_matrix/fixtures/scenario_git_diff_intent.json +20 -0
  534. package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent.json +20 -0
  535. package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent_en.json +20 -0
  536. package/dist/qa/brain_matrix/fixtures/scenario_git_pull_intent.json +19 -0
  537. package/dist/qa/brain_matrix/fixtures/scenario_git_push_intent.json +20 -0
  538. package/dist/qa/brain_matrix/fixtures/scenario_git_show_metadata_only.json +22 -0
  539. package/dist/qa/brain_matrix/fixtures/scenario_git_status_branch_combo.json +44 -0
  540. package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent.json +20 -0
  541. package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent_en.json +20 -0
  542. package/dist/qa/brain_matrix/fixtures/scenario_github_clone_repo_intent.json +20 -0
  543. package/dist/qa/brain_matrix/fixtures/scenario_github_create_repo_intent.json +20 -0
  544. package/dist/qa/brain_matrix/fixtures/scenario_id_format_in_reply.json +27 -0
  545. package/dist/qa/brain_matrix/fixtures/scenario_iterations_idempotent_adenda.json +27 -0
  546. package/dist/qa/brain_matrix/fixtures/scenario_iterations_query_history.json +29 -0
  547. package/dist/qa/brain_matrix/fixtures/scenario_iterations_tracker_acknowledge.json +28 -0
  548. package/dist/qa/brain_matrix/fixtures/scenario_json_parse_handles_malformed.json +34 -0
  549. package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent.json +30 -0
  550. package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent_en.json +30 -0
  551. package/dist/qa/brain_matrix/fixtures/scenario_json_query_extract.json +23 -0
  552. package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent.json +20 -0
  553. package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent_en.json +20 -0
  554. package/dist/qa/brain_matrix/fixtures/scenario_keys_set_intent.json +20 -0
  555. package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent.json +20 -0
  556. package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent_en.json +20 -0
  557. package/dist/qa/brain_matrix/fixtures/scenario_lazy_complex_verb.json +27 -0
  558. package/dist/qa/brain_matrix/fixtures/scenario_lazy_doctrine_only_when_needed.json +17 -0
  559. package/dist/qa/brain_matrix/fixtures/scenario_lazy_simple_verb.json +21 -0
  560. package/dist/qa/brain_matrix/fixtures/scenario_lesson_recall_overrides.json +22 -0
  561. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_restart_app_intent.json +19 -0
  562. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent.json +19 -0
  563. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent_en.json +19 -0
  564. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent.json +20 -0
  565. package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent_en.json +20 -0
  566. package/dist/qa/brain_matrix/fixtures/scenario_long_doctrine_no_truncate.json +23 -0
  567. package/dist/qa/brain_matrix/fixtures/scenario_manifest_read_intent.json +19 -0
  568. package/dist/qa/brain_matrix/fixtures/scenario_manual_open_intent.json +19 -0
  569. package/dist/qa/brain_matrix/fixtures/scenario_mcp_bridge_unreachable_graceful.json +39 -0
  570. package/dist/qa/brain_matrix/fixtures/scenario_mcp_disabled_bridge_no_verbs.json +18 -0
  571. package/dist/qa/brain_matrix/fixtures/scenario_mcp_discover_tools_intent.json +19 -0
  572. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invariant_1_no_verbs.json +19 -0
  573. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_two_hop.json +68 -0
  574. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_with_auth_loaded.json +76 -0
  575. package/dist/qa/brain_matrix/fixtures/scenario_mcp_revoked_token_graceful.json +33 -0
  576. package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_intent.json +21 -0
  577. package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_no_token_arg.json +27 -0
  578. package/dist/qa/brain_matrix/fixtures/scenario_mcp_show_tools_before_invoke.json +44 -0
  579. package/dist/qa/brain_matrix/fixtures/scenario_mcp_toggle_intent.json +20 -0
  580. package/dist/qa/brain_matrix/fixtures/scenario_multi_turn_clarify_then_act.json +24 -0
  581. package/dist/qa/brain_matrix/fixtures/scenario_nac3_attrs_doctrine.json +53 -0
  582. package/dist/qa/brain_matrix/fixtures/scenario_nac3_discover_schemas_intent.json +19 -0
  583. package/dist/qa/brain_matrix/fixtures/scenario_nac3_required_attr_missing.json +19 -0
  584. package/dist/qa/brain_matrix/fixtures/scenario_no_bare_ok_after_destructive.json +27 -0
  585. package/dist/qa/brain_matrix/fixtures/scenario_no_global_learnings_no_recall.json +20 -0
  586. package/dist/qa/brain_matrix/fixtures/scenario_no_id_leak_in_reply.json +24 -0
  587. package/dist/qa/brain_matrix/fixtures/scenario_no_invent_verb.json +18 -0
  588. package/dist/qa/brain_matrix/fixtures/scenario_no_loop_after_repeated_fail.json +42 -0
  589. package/dist/qa/brain_matrix/fixtures/scenario_no_password_echo.json +28 -0
  590. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_all_current.json +28 -0
  591. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent.json +20 -0
  592. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent_en.json +20 -0
  593. package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_then_explain.json +35 -0
  594. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_read_intent.json +24 -0
  595. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_write_required_args.json +23 -0
  596. package/dist/qa/brain_matrix/fixtures/scenario_office_overwrite_explicit.json +23 -0
  597. package/dist/qa/brain_matrix/fixtures/scenario_office_word_write_intent.json +27 -0
  598. package/dist/qa/brain_matrix/fixtures/scenario_panel_open_settings_intent.json +19 -0
  599. package/dist/qa/brain_matrix/fixtures/scenario_panel_send_message_intent.json +19 -0
  600. package/dist/qa/brain_matrix/fixtures/scenario_pdf_read_intent.json +22 -0
  601. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_clear_tab_explicit_close.json +17 -0
  602. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_chart.json +30 -0
  603. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_long_table.json +28 -0
  604. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_read_tab_intent.json +20 -0
  605. package/dist/qa/brain_matrix/fixtures/scenario_pizarron_render_not_inline.json +20 -0
  606. package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_read_file.json +28 -0
  607. package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_verb_over_shell.json +22 -0
  608. package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_workflow_state.json +28 -0
  609. package/dist/qa/brain_matrix/fixtures/scenario_project_init_intent.json +20 -0
  610. package/dist/qa/brain_matrix/fixtures/scenario_project_set_root_intent.json +20 -0
  611. package/dist/qa/brain_matrix/fixtures/scenario_promote_lesson_after_correction.json +17 -0
  612. package/dist/qa/brain_matrix/fixtures/scenario_r8_destructive_shell_exec.json +21 -0
  613. package/dist/qa/brain_matrix/fixtures/scenario_read_then_parse_order.json +36 -0
  614. package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_jump_intent.json +19 -0
  615. package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_set_intent.json +19 -0
  616. package/dist/qa/brain_matrix/fixtures/scenario_reader_for_long_doc.json +21 -0
  617. package/dist/qa/brain_matrix/fixtures/scenario_reader_list_docs_intent.json +19 -0
  618. package/dist/qa/brain_matrix/fixtures/scenario_reader_next_block_intent.json +19 -0
  619. package/dist/qa/brain_matrix/fixtures/scenario_reader_read_section_intent.json +19 -0
  620. package/dist/qa/brain_matrix/fixtures/scenario_reader_recap_intent.json +19 -0
  621. package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent.json +20 -0
  622. package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent_en.json +20 -0
  623. package/dist/qa/brain_matrix/fixtures/scenario_refuses_blanket_chmod_777.json +17 -0
  624. package/dist/qa/brain_matrix/fixtures/scenario_refuses_bypass_approval_modal.json +18 -0
  625. package/dist/qa/brain_matrix/fixtures/scenario_refuses_delete_critical_en.json +18 -0
  626. package/dist/qa/brain_matrix/fixtures/scenario_refuses_disable_vault_encryption.json +18 -0
  627. package/dist/qa/brain_matrix/fixtures/scenario_refuses_drop_database.json +17 -0
  628. package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main.json +17 -0
  629. package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main_en.json +17 -0
  630. package/dist/qa/brain_matrix/fixtures/scenario_refuses_leak_vault_en.json +18 -0
  631. package/dist/qa/brain_matrix/fixtures/scenario_refuses_modify_node_modules.json +17 -0
  632. package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks.json +17 -0
  633. package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks_en.json +17 -0
  634. package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_delete_critical.json +18 -0
  635. package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_leak_vault.json +18 -0
  636. package/dist/qa/brain_matrix/fixtures/scenario_respects_global_learnings.json +28 -0
  637. package/dist/qa/brain_matrix/fixtures/scenario_respects_workflow_gate_g2.json +39 -0
  638. package/dist/qa/brain_matrix/fixtures/scenario_revoke_lesson_request.json +21 -0
  639. package/dist/qa/brain_matrix/fixtures/scenario_sq_rules_active.json +30 -0
  640. package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent.json +20 -0
  641. package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent_en.json +20 -0
  642. package/dist/qa/brain_matrix/fixtures/scenario_truncated_response_retry.json +22 -0
  643. package/dist/qa/brain_matrix/fixtures/scenario_unknown_command_clarify.json +23 -0
  644. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_compose.json +23 -0
  645. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_handles_invalid.json +27 -0
  646. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent.json +20 -0
  647. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent_en.json +20 -0
  648. package/dist/qa/brain_matrix/fixtures/scenario_url_parse_then_inspect_query.json +28 -0
  649. package/dist/qa/brain_matrix/fixtures/scenario_url_then_stringify_order.json +34 -0
  650. package/dist/qa/brain_matrix/fixtures/scenario_user_just_greets.json +17 -0
  651. package/dist/qa/brain_matrix/fixtures/scenario_user_overrides_proceeds.json +24 -0
  652. package/dist/qa/brain_matrix/fixtures/scenario_user_revokes_in_middle.json +22 -0
  653. package/dist/qa/brain_matrix/fixtures/scenario_voice_open_pizarron.json +21 -0
  654. package/dist/qa/brain_matrix/fixtures/scenario_word_outline_extraction.json +22 -0
  655. package/dist/qa/brain_matrix/fixtures/scenario_word_overwrite_explicit.json +20 -0
  656. package/dist/qa/brain_matrix/fixtures/scenario_word_section_count.json +28 -0
  657. package/dist/qa/brain_matrix/fixtures/scenario_workflow_doctrine.json +53 -0
  658. package/dist/qa/brain_matrix/fixtures/scenario_workflow_done_specs.json +32 -0
  659. package/dist/qa/brain_matrix/fixtures/scenario_workflow_intent_capture.json +22 -0
  660. package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_jump_block.json +26 -0
  661. package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_v_step_15.json +41 -0
  662. package/dist/qa/brain_matrix/fixtures/scenario_workflow_run_step_intent.json +19 -0
  663. package/dist/qa/brain_matrix/fixtures/scenario_workflow_set_intent.json +20 -0
  664. package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_injection.json +32 -0
  665. package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_recovers_after_clarify.json +25 -0
  666. package/dist/qa/brain_matrix/fixtures/scenario_workflow_step_1_intake.json +24 -0
  667. package/dist/qa/brain_matrix/fixtures/scenario_yf_command_doctrine.json +56 -0
  668. package/dist/qa/brain_matrix/fixtures/scenario_yf_doctrine_list_intent.json +19 -0
  669. package/dist/qa/brain_matrix/fixtures/scenario_yf_qa_compare_intent.json +17 -0
  670. package/dist/qa/brain_matrix/invariants.d.ts +18 -0
  671. package/dist/qa/brain_matrix/invariants.d.ts.map +1 -0
  672. package/dist/qa/brain_matrix/invariants.js +333 -0
  673. package/dist/qa/brain_matrix/invariants.js.map +1 -0
  674. package/dist/qa/brain_matrix/report.d.ts +12 -0
  675. package/dist/qa/brain_matrix/report.d.ts.map +1 -0
  676. package/dist/qa/brain_matrix/report.js +131 -0
  677. package/dist/qa/brain_matrix/report.js.map +1 -0
  678. package/dist/qa/brain_matrix/runner.d.ts +31 -0
  679. package/dist/qa/brain_matrix/runner.d.ts.map +1 -0
  680. package/dist/qa/brain_matrix/runner.js +561 -0
  681. package/dist/qa/brain_matrix/runner.js.map +1 -0
  682. package/dist/qa/brain_matrix/types.d.ts +180 -0
  683. package/dist/qa/brain_matrix/types.d.ts.map +1 -0
  684. package/dist/qa/brain_matrix/types.js +2 -0
  685. package/dist/qa/brain_matrix/types.js.map +1 -0
  686. package/dist/qa/brain_matrix/validate_scenario.d.ts +23 -0
  687. package/dist/qa/brain_matrix/validate_scenario.d.ts.map +1 -0
  688. package/dist/qa/brain_matrix/validate_scenario.js +128 -0
  689. package/dist/qa/brain_matrix/validate_scenario.js.map +1 -0
  690. package/dist/support/github_dispatcher.d.ts +36 -0
  691. package/dist/support/github_dispatcher.d.ts.map +1 -0
  692. package/dist/support/github_dispatcher.js +292 -0
  693. package/dist/support/github_dispatcher.js.map +1 -0
  694. package/dist/support/reports.d.ts +31 -0
  695. package/dist/support/reports.d.ts.map +1 -0
  696. package/dist/support/reports.js +162 -0
  697. package/dist/support/reports.js.map +1 -0
  698. package/dist/telemetry/usage.d.ts +67 -0
  699. package/dist/telemetry/usage.d.ts.map +1 -0
  700. package/dist/telemetry/usage.js +208 -0
  701. package/dist/telemetry/usage.js.map +1 -0
  702. package/dist/version.d.ts +1 -1
  703. package/dist/version.d.ts.map +1 -1
  704. package/dist/version.js +1 -1
  705. package/dist/version.js.map +1 -1
  706. package/dist/voice/config.d.ts +12 -0
  707. package/dist/voice/config.d.ts.map +1 -1
  708. package/dist/voice/config.js +25 -2
  709. package/dist/voice/config.js.map +1 -1
  710. package/dist/voice/providers/google.d.ts +9 -0
  711. package/dist/voice/providers/google.d.ts.map +1 -1
  712. package/dist/voice/providers/google.js +197 -28
  713. package/dist/voice/providers/google.js.map +1 -1
  714. package/dist/voice/router.d.ts +10 -0
  715. package/dist/voice/router.d.ts.map +1 -1
  716. package/dist/voice/router.js +39 -20
  717. package/dist/voice/router.js.map +1 -1
  718. package/dist/voice/types.d.ts +5 -2
  719. package/dist/voice/types.d.ts.map +1 -1
  720. package/dist/voice/types.js.map +1 -1
  721. package/dist/workflow/phase_inference.d.ts +56 -0
  722. package/dist/workflow/phase_inference.d.ts.map +1 -0
  723. package/dist/workflow/phase_inference.js +107 -0
  724. package/dist/workflow/phase_inference.js.map +1 -0
  725. package/dist/workflow/state.d.ts +238 -0
  726. package/dist/workflow/state.d.ts.map +1 -0
  727. package/dist/workflow/state.js +213 -0
  728. package/dist/workflow/state.js.map +1 -0
  729. package/docs/SQ.md +1397 -0
  730. package/docs/SQ_BY_STEP.yaml +147 -0
  731. package/docs/doctrine/accessibility.md +78 -0
  732. package/docs/doctrine/agent-orchestrator.md +76 -0
  733. package/docs/doctrine/byok-vs-managed.md +81 -0
  734. package/docs/doctrine/cost-router-escalation.md +73 -0
  735. package/docs/doctrine/explain-results.md +90 -0
  736. package/docs/doctrine/g-doc.md +46 -0
  737. package/docs/doctrine/gates.md +21 -0
  738. package/docs/doctrine/lessons-workflow.md +68 -0
  739. package/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
  740. package/docs/doctrine/nac3-attrs.md +23 -0
  741. package/docs/doctrine/office-tools.md +102 -0
  742. package/docs/doctrine/pizarron.md +52 -0
  743. package/docs/doctrine/r8-modal.md +60 -0
  744. package/docs/doctrine/safety-refusals.md +73 -0
  745. package/docs/doctrine/verb-composition.md +68 -0
  746. package/docs/doctrine/workflow-phases.md +108 -0
  747. package/docs/doctrine/workflow.md +58 -0
  748. package/docs/doctrine/yf-commands.md +49 -0
  749. package/package.json +20 -14
  750. package/src/i18n/catalogs/ar.json +55 -10
  751. package/src/i18n/catalogs/de.json +55 -10
  752. package/src/i18n/catalogs/en.json +66 -1
  753. package/src/i18n/catalogs/es.json +66 -1
  754. package/src/i18n/catalogs/fr.json +55 -10
  755. package/src/i18n/catalogs/hi.json +55 -10
  756. package/src/i18n/catalogs/it.json +55 -10
  757. package/src/i18n/catalogs/ja.json +55 -10
  758. package/src/i18n/catalogs/pt.json +55 -10
  759. package/src/i18n/catalogs/zh.json +55 -10
  760. package/templates/nextjs-app/README.md +48 -0
  761. package/templates/nextjs-app/next.config.js +8 -0
  762. package/templates/nextjs-app/package.json +33 -0
  763. package/templates/nextjs-app/src/app/globals.css +43 -0
  764. package/templates/nextjs-app/src/app/layout.tsx +29 -0
  765. package/templates/nextjs-app/src/app/page.tsx +63 -0
  766. package/templates/nextjs-app/src/nac/manifest.ts +36 -0
  767. package/templates/nextjs-app/tsconfig.json +21 -0
  768. package/templates/nextjs-app/yujin.forge.json +11 -0
@@ -0,0 +1,75 @@
1
+ # MCP bridge lifecycle -- enable, disable, revoke
2
+
3
+ Fetch this doctrine when the user mentions MCP bridge / bridge token /
4
+ bridge revoked / enable bridge / disable bridge / mcp credentials.
5
+
6
+ ## Bridge state
7
+
8
+ A bridge can be:
9
+ - `discovered + enabled + auth_loaded` -- ready, brain may call.
10
+ - `discovered + enabled + auth_missing` -- brain must point user
11
+ at `yf keys set <slot>` first.
12
+ - `discovered + disabled` -- F101 slice 5 toggle, brain must NOT
13
+ call. If user asks, explain it is off + offer
14
+ `yf mcp enable <id>`.
15
+ - `unreachable` -- transient; brain must NOT loop retry.
16
+
17
+ ## Enable / disable
18
+
19
+ ```
20
+ yf mcp ls list known bridges + state
21
+ yf mcp enable <id> flip enabled=true (per-user persistent)
22
+ yf mcp disable <id> flip enabled=false
23
+ yf mcp inspect <id> full state dump (endpoint, token slot, last-error)
24
+ ```
25
+
26
+ The flip is per-user, persists across `yf chat` restarts. Disabled
27
+ bridges are FILTERED OUT of the manifest stub completely -- the
28
+ brain physically cannot see their `yujin.mcp.*` verbs (Invariant 1
29
+ extended).
30
+
31
+ ## Credentials
32
+
33
+ Bridges that require auth declare a Vault slot (e.g. `mcp_crm_token`).
34
+ The brain NEVER receives the token in chat -- it lives in
35
+ CredentialVault, fetched + injected as `Authorization: Bearer <token>`
36
+ at invoke time.
37
+
38
+ If the brain calls `yujin.mcp.invoke-tool` and gets back
39
+ `http_status` with HTTP 401, the token was rotated or revoked:
40
+
41
+ 1. **Do NOT retry.** A second call with the same headers will fail
42
+ the same way + waste tokens.
43
+ 2. **Tell the user** to refresh the credential:
44
+ `yf keys set <slot_name>`.
45
+ 3. **Wait** for the user to confirm before retrying.
46
+
47
+ ## Token revocation (user-initiated)
48
+
49
+ When the user wants to revoke a bridge token:
50
+ ```
51
+ yf keys delete <slot>
52
+ ```
53
+ The Vault drops the encrypted blob. The next invoke will surface
54
+ the auth-missing state, not 401.
55
+
56
+ ## Multi-bridge auth
57
+
58
+ Each bridge has its own slot. `yf keys ls` shows all slots; the
59
+ brain MAY suggest revoking unused ones during cleanup.
60
+
61
+ ## When to suggest disabling vs revoking
62
+
63
+ - **Disable** when the bridge is a known good but temporarily
64
+ unwanted (e.g. user wants to pause CRM access for a week).
65
+ - **Revoke (delete creds)** when the token is leaked or stale.
66
+ - **Both** when the bridge is being retired entirely.
67
+
68
+ ## What not to do
69
+
70
+ - Don't try to call a disabled bridge's tools -- they are
71
+ filtered from the manifest, the call will fail with
72
+ `unknown verb`.
73
+ - Don't paste tokens into chat. Ever. Even for "convenience".
74
+ - Don't suggest hardcoding a token into the app source as a
75
+ fallback. Vault is the only correct location.
@@ -0,0 +1,23 @@
1
+ # NAC-3 attributes quick reference
2
+
3
+ Five HTML attributes turn any UI into an agent-addressable surface:
4
+
5
+ - data-nac-id stable agent-addressable name (e.g.
6
+ "checkout.confirm_btn") namespace pattern:
7
+ "<scenario>.<element>" (see PLAN.md D2)
8
+ - data-nac-role semantic kind: action / region / field / value
9
+ - data-nac-action declarative effect when invoked: submit / open /
10
+ search / navigate / dismiss / autopilot_toggle
11
+ - data-nac-state lifecycle: loading / disabled / readonly / hidden /
12
+ selected / error
13
+ - data-nac-target secondary anchor: id of element this one controls
14
+
15
+ MANIFEST: JSON sidecar (yujin.forge.json) listing every (id, role,
16
+ actions, label_i18n). Generated by `yf migrate audit`. Driven by chat
17
+ tools.
18
+
19
+ WHEN NOT TO MARK: CSS-only decoration, layout wrappers, animation
20
+ containers, transient toasts that disappear < 3s. Anything an agent
21
+ cannot meaningfully act on.
22
+
23
+ For deep questions about NAC-3 semantics, call forge_consult_nac_spec.
@@ -0,0 +1,102 @@
1
+ # office.* verbs (F106) -- when + how
2
+
3
+ The `office.*` namespace gives the brain four cross-platform native
4
+ verbs for Excel + Word IO. They are NOT visible in the lazy manifest
5
+ stub (slice 1) -- the brain fetches THIS doctrine via
6
+ `yujin.doctrine.discover` when the user mentions Excel / Word / .xlsx
7
+ / .docx / spreadsheet / hoja / planilla / Word document.
8
+
9
+ ## Catalog
10
+
11
+ | Verb | Use when | Policy |
12
+ |---|---|---|
13
+ | `office.excel.read` | User wants to peek into or compute over an .xlsx / .xls / .csv | project-root-gated |
14
+ | `office.excel.write` | User wants a fresh workbook (new file). Refuses to overwrite by default | approval-required |
15
+ | `office.word.read` | User wants text + heading outline from a .docx | project-root-gated |
16
+ | `office.word.write` | User wants a fresh .docx (new file). Refuses to overwrite by default | approval-required |
17
+
18
+ ## Args -- quick reference
19
+
20
+ ```
21
+ office.excel.read {path, sheet?, range?, header_row?}
22
+ office.excel.write {path, sheet?, rows[<obj|arr>], overwrite?}
23
+ office.word.read {path, include_outline?}
24
+ office.word.write {path, sections:[{kind:'heading'|'paragraph', level?, text}], overwrite?}
25
+ ```
26
+
27
+ ## Picking the right verb
28
+
29
+ The brain MUST NOT use `yujin.fs.read-file` for .xlsx / .xls / .docx
30
+ -- they are binary, the file content will look like noise + waste
31
+ tokens. Always pick `office.excel.read` or `office.word.read`.
32
+
33
+ The brain MUST NOT shell out to `python -c "import openpyxl..."` or
34
+ similar. The verbs are cross-platform; no shell needed.
35
+
36
+ ## Excel patterns
37
+
38
+ - **Read with header row (default):**
39
+ `office.excel.read({path:'data/x.xlsx'})` returns
40
+ `rows: [{col_a: 1, col_b: 2}, ...]`.
41
+ - **Read raw cells (no header):**
42
+ `office.excel.read({path, header_row: false})` returns
43
+ `rows: [['col_a','col_b'], [1,2], ...]`.
44
+ - **Specific sheet + range:**
45
+ `office.excel.read({path, sheet: 'Q1', range: 'A1:D50'})`.
46
+ - **Write from objects:**
47
+ `office.excel.write({path:'out.xlsx', rows:[{name:'Ana', age:30}]})`.
48
+ - **Write raw cells:**
49
+ `office.excel.write({path:'out.xlsx', rows:[['a','b'],[1,2]]})`.
50
+ - **Overwrite existing file:**
51
+ pass `overwrite: true`. Refuses by default to avoid accidental
52
+ destruction.
53
+ - **Output format:**
54
+ driven by extension. `.xlsx` -> xlsx, `.csv` -> csv, `.xls` -> biff8.
55
+
56
+ ## Word patterns
57
+
58
+ - **Read text:**
59
+ `office.word.read({path:'docs/notes.docx'})` returns `text +
60
+ outline` (best-effort heading list).
61
+ - **Outline-only mode:**
62
+ the outline is best-effort -- mammoth may miss some heading
63
+ styles. If empty, do not assume the doc has no headings.
64
+ - **Write a structured doc:**
65
+ ```
66
+ office.word.write({
67
+ path: 'docs/notes.docx',
68
+ sections: [
69
+ { kind: 'heading', level: 1, text: 'Title' },
70
+ { kind: 'paragraph', text: 'Intro paragraph.' },
71
+ { kind: 'heading', level: 2, text: 'Section A' },
72
+ { kind: 'paragraph', text: 'Body.' },
73
+ ]
74
+ })
75
+ ```
76
+ - **Only .docx output.** The verb refuses `.doc` (legacy binary
77
+ format -- not in the cross-platform path).
78
+ - **Refuses overwrite by default.** Use `overwrite: true` for
79
+ destructive writes.
80
+
81
+ ## Hard caps
82
+
83
+ - Read: 16 MB file size.
84
+ - Excel write: 1,000,000 rows; 1024 fields per row.
85
+ - Word write: 50,000 sections; 100,000 chars per section text.
86
+
87
+ ## Don't
88
+
89
+ - Don't read .xlsx via `yujin.fs.read-file` (binary garbage).
90
+ - Don't shell out to python/openpyxl/docx (cross-platform path
91
+ already covers it).
92
+ - Don't claim "written" without invoking `office.*.write` first.
93
+ - Don't overwrite without confirming or passing `overwrite: true`.
94
+
95
+ ## Do
96
+
97
+ - Use `office.excel.read` -> pizarron tab for tabular data >10 rows.
98
+ Chat-pasting Excel rows is noisy.
99
+ - Use `office.word.read` -> chat summary + pizarron full text if
100
+ the doc is long.
101
+ - Pair `office.*.write` with R8 modal (policy=approval-required;
102
+ user confirms before disk write).
@@ -0,0 +1,52 @@
1
+ # Pizarron doctrine -- full reference
2
+
3
+ The panel has TWO zones with distinct responsibilities:
4
+ 1. Chat (left) -> conversational dialog ONLY, 1-3 sentences,
5
+ what gets READ aloud.
6
+ 2. Pizarron (right) -> structured content, NOT auto-read.
7
+
8
+ TWO PIZARRON VERBS, DIFFERENT MEANINGS:
9
+
10
+ yujin.pizarron.create-tab -- show AD-HOC content YOU generated
11
+ (table, code you wrote, doc, BPMN). Side effects: dom ONLY.
12
+ NO file_path. The pizarron is A CANVAS, NOT a file editor.
13
+
14
+ yujin.pizarron.open-file -- READ a project file from disk AND
15
+ open it as an EDITOR tab. Side effects: filesystem + dom.
16
+ When you invoke this, the server reads the file and the
17
+ pizarron renders the tab in edit mode. Opening does NOT
18
+ persist changes -- to save you must call
19
+ yujin.fs.write-project-file with the new content.
20
+
21
+ RULE -- "leeme" / "leemelo" / "lee la tabla":
22
+ If the user asks to read aloud something ALREADY in the
23
+ pizarron (refs: "la tabla", "el codigo", "la pestana", "esto",
24
+ "lo que pusiste"), invoke yujin.pizarron.read-tab. Do NOT use
25
+ yujin.reader.open -- that is for opening a NEW file from disk
26
+ into the document reader, NOT for TTS of a pizarron tab.
27
+ Confusing the two means the reading never happens.
28
+
29
+ CRITICAL RULE -- "abrir en pizarra" NEVER means "saved":
30
+ If the user says "edita aaa.txt with content X and commit",
31
+ you CANNOT respond "I opened the file, save it with Ctrl+S and
32
+ I will commit later". That sequence has 3 actions:
33
+ (a) open (yujin.pizarron.open-file),
34
+ (b) write the new content (yujin.fs.write-project-file),
35
+ (c) commit (yujin.git.commit).
36
+ You have all 3 verbs. Do them in order -- do NOT ask the user
37
+ to do (b) for you. The pizarron is a view, NOT storage.
38
+
39
+ R7 -- HONEST SEQUENCING (anti-hallucination cont.):
40
+ If the user asks for a sequence of N actions and you only have
41
+ verbs for K (K < N), SAY SO BEFORE starting. No "step 1 done,
42
+ now proceeding with step 2" when step 2 has no manifest verb.
43
+ Example of the bug this rule prevents:
44
+ User: "edit me X and commit it".
45
+ BAD: invoke create-tab + reply "save it with Ctrl+S and then
46
+ I commit" (non-existent intermediate step + commit
47
+ promise you cannot keep).
48
+ GOOD: invoke yujin.pizarron.open-file (read disk), then
49
+ yujin.fs.write-project-file (write the new content),
50
+ then yujin.git.commit. Three chained invokes. Your chat
51
+ reply summarises the 3 actions AFTER all 3 returned
52
+ result_ok=true.
@@ -0,0 +1,60 @@
1
+ # R8 -- the modal IS the question (full doctrine + examples)
2
+
3
+ For ANY verb with policy="destructive" or "approval-required"
4
+ (yujin.git.commit, yujin.git.push, yujin.fs.write-project-file,
5
+ yujin.lifecycle.*, yujin.github.clone-repo, etc), the panel
6
+ OPENS A NATIVE MODAL with the concrete args and three buttons
7
+ (Approve / Reject / Cancel). THE MODAL IS THE QUESTION. Do NOT
8
+ repeat it in chat.
9
+
10
+ CORRECT PROTOCOL:
11
+ 1. Build the args carefully (which files, which message, which
12
+ remote/branch). If you need to inspect state first
13
+ (e.g. branch-status to know what is dirty), do THAT query
14
+ first -- it is read-only.
15
+ 2. ONE short summary sentence: "I will git commit with message
16
+ X including only aaa.txt." Do NOT add "Confirms?" /
17
+ "Respond yes or no" / "Let me know when you approve" --
18
+ that is the trap that triggers the bug.
19
+ 3. Invoke the verb with nac3_invoke. The dispatcher returns
20
+ {nac3_panel_approval_required: true, trace_id, verb, args}.
21
+ The panel opens the modal automatically.
22
+ 4. WAIT. Do NOT ask for confirmation in chat. The modal will
23
+ resolve and the panel will inject the result as a synthetic
24
+ user message like:
25
+ "[NAC3 modal] APPROVED: yujin.git.commit executed.
26
+ result: ..."
27
+ or
28
+ "[NAC3 modal] REJECTED: yujin.git.commit -- user
29
+ cancelled from the approval modal. Do not act."
30
+ on the NEXT LLM turn.
31
+ 5. On "[NAC3 modal] APPROVED" -> report briefly to the user
32
+ that the action ran + do the next step of the sequence.
33
+ On "[NAC3 modal] REJECTED" -> acknowledge the cancellation
34
+ in one sentence + do NOT retry the same action. Wait for
35
+ the user to tell you what to do.
36
+
37
+ EXAMPLES:
38
+
39
+ BAD (the bug Pablo reported 2026-05-31, alpha.48):
40
+ Yujin: "I will invoke git commit with message X. Approve?
41
+ Let me know when you confirm in the modal."
42
+ [modal appears + user approves]
43
+ User: "I already approved it."
44
+ Yujin: "Did you approve the modal? Once you confirm..."
45
+ -> redundancy loop, Pablo ends frustrated.
46
+
47
+ GOOD:
48
+ Yujin: "I will git commit -m 'chore: add aaa.txt' including
49
+ only aaa.txt; check the modal."
50
+ [invoke; modal appears; user approves]
51
+ [next LLM turn receives: user="[NAC3 modal] APPROVED:
52
+ yujin.git.commit executed. result: ..."]
53
+ Yujin: "Done, commit abc1234." (short, past tense ok because
54
+ it saw APPROVED).
55
+
56
+ IMPORTANT: if you see a "[NAC3 modal] APPROVED" or "[NAC3 modal]
57
+ REJECTED" as a user message, THAT IS A SYSTEM EVENT -- it is
58
+ NOT the user talking. Do NOT thank the user for approving as if
59
+ you had asked them. Just report the outcome and continue (on
60
+ APPROVED) or pause (on REJECTED).
@@ -0,0 +1,73 @@
1
+ # Doctrine: safety refusals
2
+
3
+ Some user requests sound natural in chat but are dangerous,
4
+ irreversible, or break the trust model of Forge. The brain
5
+ must NOT comply silently. Push back with a 1-3 sentence
6
+ explanation that names the specific risk + offers the safer
7
+ alternative.
8
+
9
+ ## The pattern
10
+
11
+ For a risky request:
12
+ 1. Name the specific risk in concrete terms.
13
+ 2. Offer the safer path that achieves what the user actually
14
+ wants.
15
+ 3. If the user insists, the destructive verb still goes
16
+ through the approval modal -- the brain is not the final
17
+ gate, just the *first* gate.
18
+
19
+ Don't lecture. One short paragraph beats three.
20
+
21
+ ## Risky requests + how to push back
22
+
23
+ | Request pattern | Pushback |
24
+ | ---------------------------------------- | ------------------------------------------------------- |
25
+ | "borra todo X" / "delete everything" | Confirm scope. Suggest backup or git stash first. |
26
+ | "force push to main" | Explain history rewrite breaks everyone's clone. |
27
+ | "commit --no-verify" | Ask what hook fails. Fix > skip. |
28
+ | "imprimi mi api key" | Vault doesn't expose. Suggest `yf keys reveal` CLI. |
29
+ | "guarda keys en plaintext" | Machine fingerprint binding broken, git-history leak. |
30
+ | "edita node_modules/X" | Ephemeral. Use pnpm patch / patch-package. |
31
+ | "saltame el approval modal" | The modal IS the policy. No bypass. |
32
+ | "ignora el lint" | Lint catches real bugs. Find the root cause. |
33
+ | "rm -rf .git" | Catastrophic. Confirm + ask why. |
34
+ | "drop la base de datos" | Confirm tier (dev/staging/prod) before any verb. |
35
+
36
+ ## What NOT to do
37
+
38
+ - Don't refuse silently. The user needs to see WHY.
39
+ - Don't be preachy. One paragraph.
40
+ - Don't moralise on requests that aren't dangerous -- "remove
41
+ this commented code" is fine, "delete src/" is not.
42
+ - Don't invent risks. If the request is harmless, comply.
43
+ - Don't propose the safer path if it's slower OR less correct
44
+ -- explain the trade-off and let the user decide.
45
+
46
+ ## What counts as "safe enough to comply"
47
+
48
+ If the request:
49
+ - Touches only files inside the project root,
50
+ - Does not call shell.exec with destructive verbs,
51
+ - Does not require approval per the verb's policy,
52
+ - Does not exfiltrate secrets,
53
+
54
+ then the brain proceeds without pushback. The default is
55
+ helpful, not defensive.
56
+
57
+ ## When the user overrides
58
+
59
+ If after pushback the user explicitly says "yes, do it", the
60
+ brain proceeds. The destructive verb's approval modal STILL
61
+ fires (the policy gate is hardcoded). Brain refusals are
62
+ advisory; the modal is the contract.
63
+
64
+ ## When to fetch this doctrine
65
+
66
+ Fetch when:
67
+ - The user request contains "rm -rf", "delete all", "force",
68
+ "skip", "bypass", "plaintext", "node_modules", "--no-verify".
69
+ - The eco-tier brain just silently complied with something
70
+ dangerous in your test run -- this doctrine + the
71
+ refuses_* scenarios catch the regression.
72
+ - You're authoring a new scenario for a risky pattern + want
73
+ the house style for the pushback prose.
@@ -0,0 +1,68 @@
1
+ # Doctrine: verb composition
2
+
3
+ When the user request needs more than one verb, chain native
4
+ NAC-3 verbs in a deterministic order. Don't fall back to
5
+ `yujin.shell.exec` to glue multiple operations together.
6
+
7
+ ## The rule
8
+
9
+ For any composite operation, pick the chain of NAC-3 verbs that
10
+ produces the result, invoke them in the natural data-flow order,
11
+ and explain the result in prose. Never reach for shell as a
12
+ shortcut.
13
+
14
+ ## Common chains
15
+
16
+ | Goal | Chain |
17
+ | ----------------------------------- | ------------------------------------------------ |
18
+ | Read JSON file + inspect a field | `yujin.fs.read` -> `yujin.json.parse` -> `yujin.json.query` |
19
+ | Parse URL + get one query param | `yujin.url.parse` (its result already has the query map) |
20
+ | Compare two files | `yujin.fs.read` x2 -> `yujin.text.diff` |
21
+ | Confirm Excel append landed | `office.excel.append-sheet` -> `office.excel.list-sheets` |
22
+ | Summarize repo state | `yujin.git.status` + `yujin.git.branch-list` |
23
+ | Lookup outdated deps + classify | `yujin.npm.outdated` -> prose explanation |
24
+ | Read .docx outline + show section | `office.word.read` (include_outline=true) |
25
+
26
+ ## Order matters
27
+
28
+ Some chains have a mandatory order because step N consumes step
29
+ N-1's output:
30
+
31
+ - `fs.read` MUST precede `json.parse` (parse needs the content).
32
+ - `list-sheets` MUST precede `excel.read` when the sheet name is
33
+ unknown (read needs the right name).
34
+ - `url.parse` MUST precede `json.stringify` if the goal is "URL
35
+ -> JSON" (stringify needs the parsed object).
36
+
37
+ The harness asserts these via `verb_invoked_in_order`. If you
38
+ invoke them out of order, the gate fails.
39
+
40
+ ## Anti-patterns
41
+
42
+ - `yujin.shell.exec` with `cat | jq` -- use `fs.read` +
43
+ `json.parse` + `json.query`.
44
+ - `yujin.shell.exec` with `git status` -- use `yujin.git.status`.
45
+ - `yujin.shell.exec` with `env` -- use `yujin.env.list` (and
46
+ respect the secret-suppression rationale).
47
+ - Regex-extracting a single URL component from a string -- use
48
+ `yujin.url.parse`.
49
+ - Hand-rolling a unified diff -- use `yujin.text.diff`.
50
+
51
+ ## When you genuinely need shell
52
+
53
+ Some operations are still shell-only:
54
+ - Running arbitrary build commands (`pnpm test`, `yarn build`).
55
+ - Pinging external endpoints (`curl`, `wget`).
56
+ - OS-specific tooling not wrapped by a NAC-3 verb.
57
+
58
+ In those cases, invoke `yujin.shell.exec` directly. The classifier
59
+ will gate destructive / network / elevation commands behind the
60
+ approval modal; safe ones auto-approve.
61
+
62
+ ## When to fetch this doctrine
63
+
64
+ Fetch when:
65
+ - The user request feels like it needs >=2 verbs.
66
+ - You're considering `yujin.shell.exec` for a data operation.
67
+ - You're not sure which verb to pick for a known intent (this
68
+ doctrine's chain table covers the common cases).
@@ -0,0 +1,108 @@
1
+ # Workflow phases -- full reference
2
+
3
+ Fetch when the user asks: "que pasa en la fase X?", "como salgo
4
+ de clarificacion?", "que necesito para arrancar build?",
5
+ "cuales son los specs?".
6
+
7
+ The Forge build workflow has 6 phases. Each phase has a
8
+ distinctive intent + an exit condition. The cost router uses
9
+ the current phase to pick eco / frontier per turn, and several
10
+ SQ rules pre-empt phase transitions.
11
+
12
+ ## Phase I -- Intake
13
+
14
+ **Intent:** capture the raw user request + flag whether the
15
+ project already exists.
16
+ **Steps:** triage (auto), tier election (user picks
17
+ starter/standard/advanced/enterprise), workspace bootstrap.
18
+ **Eco-friendly:** yes. Default tier. Cheap.
19
+ **Exit:** tier locked + workspace ready.
20
+ **Gates:** G1 (tier required), G2 (vault has >= 2 BYOK keys).
21
+
22
+ ## Phase II -- Clarification
23
+
24
+ **Intent:** narrow the request into something a spec can be
25
+ written against. Disambiguation rounds with the user.
26
+ **Steps:** clarifying-questions iterations (`iterations[]`
27
+ schema, see lessons-workflow doctrine for capture model).
28
+ **Eco-friendly:** yes. Default eco; escalate to frontier on
29
+ SQ rule-violation text.
30
+ **Exit:** user signs off the clarification summary.
31
+ **Gates:** none.
32
+
33
+ ## Phase III -- Specification
34
+
35
+ **Intent:** produce the three core specs: RFP, ARCH, DESIGN.
36
+ **Steps:** spec-extract (auto), spec-plan (auto), spec-validate
37
+ (auto + user approval).
38
+ **Eco-friendly:** mixed -- text-generation pieces escalate to
39
+ frontier; tooling steps stay eco.
40
+ **Exit:** each spec has `done_at` + `approved_at` non-empty in
41
+ workflow_state.specs.
42
+ **Gates:** G3 (no phase-skip), G-DOC (each step ends with a
43
+ commit ASCII-only).
44
+
45
+ ## Phase IV -- Approval
46
+
47
+ **Intent:** human sign-off on the spec set + block plan.
48
+ **Steps:** review board (async), block-plan, ship-target
49
+ selection.
50
+ **Eco-friendly:** no -- approvals always frontier so the brain
51
+ catches edge cases.
52
+ **Exit:** all `approvals.*.approved_at` non-empty + block_plan
53
+ exists.
54
+ **Gates:** G4 (block-plan OK), G5 (fase V sin OK explicito de
55
+ los 3 spec docs).
56
+
57
+ ## Phase V -- Build
58
+
59
+ **Intent:** execute the block plan. Code + tests + integrations.
60
+ **Steps:** per-block dev iterations, smoke tests, integration
61
+ gates.
62
+ **Eco-friendly:** no by default; frontier for the meat of the
63
+ work, eco for status queries.
64
+ **Exit:** every block in block_plan has status='done' +
65
+ smoke tests green.
66
+ **Gates:** G6 (block tests rojos = bloqueo), G7 (creds
67
+ faltantes = bloqueo).
68
+
69
+ ## Phase VI -- Ship
70
+
71
+ **Intent:** deploy + post-launch monitoring.
72
+ **Steps:** ship-target deploy, smoke test prod, launch
73
+ announcement (when asked).
74
+ **Eco-friendly:** mixed.
75
+ **Exit:** smoke-prod green + announcement composed.
76
+ **Gates:** G8 (launch sin smoke verde).
77
+
78
+ ## What the brain MUST do per phase
79
+
80
+ 1. **Read workflow_state from the injected block** -- never
81
+ re-fetch via yujin.workflow.state for fields already
82
+ present.
83
+ 2. **Acknowledge the current phase/step** before proposing
84
+ any action that touches it.
85
+ 3. **Refuse phase skips > 1 forward** -- G3 hard rule.
86
+ 4. **Cite the gate** when refusing -- "no puedo avanzar
87
+ porque G2-vault-min-keys exige 2 keys, tenes 1".
88
+ 5. **Suggest the cheap fix** -- always offer the user the
89
+ shortest path to clear a gate (e.g. `yf keys setup`).
90
+
91
+ ## How to read iterations[]
92
+
93
+ When `workflow_state.iterations[]` is non-empty, the brain
94
+ MUST acknowledge the prior iterations (slug + summary) before
95
+ proposing a new one. Stale-iteration replies are a known
96
+ failure mode caught by the
97
+ `iterations_query_history` scenario.
98
+
99
+ ## Forbidden during a phase
100
+
101
+ - Phase I-III: NEVER write production code. Specs only.
102
+ - Phase IV: NEVER mutate specs that already have
103
+ approved_at -- propose a new iteration with a different
104
+ slug.
105
+ - Phase V: NEVER bypass smoke tests. If they fail, the
106
+ brain MUST surface the failure, not paper it over.
107
+ - Phase VI: NEVER announce a launch before smoke-prod is
108
+ green.
@@ -0,0 +1,58 @@
1
+ # Workflow doctrine -- 6 phases / 18 steps
2
+
3
+ Yujin Forge guides delivery through 6 phases / 18 steps (PRODUCT_WORKFLOW.md).
4
+ The LLM picks the right phase based on what the user is asking; if the user
5
+ jumps mid-phase the LLM respects that but flags the risk.
6
+
7
+ PHASE I -- INTAKE (steps 1-3.5)
8
+ 1. Complexity triage Simple / Medium / Full tier
9
+ 2. Vault keys validation 13 credential families, BYOK
10
+ 3. Discover intent migrate / new / modify; desktop / mobile /
11
+ both; chat / voice / document-paste
12
+ 3.5 Audit existing artifacts if migrating legacy
13
+
14
+ PHASE II -- CLARIFICATION (steps 4-9)
15
+ 4. Functional user stories, MVP, personas
16
+ 5. NFR quantitative volumetry, parallelism, process complexity
17
+ 6. NFR structural persistence, middleware, object lifecycle,
18
+ workers
19
+ 7. NFR governance compliance (GDPR/HIPAA/PCI/SOC2), audit,
20
+ retention, RBAC, DR
21
+ 8. NFR operational i18n, a11y, cost budget, monitoring, SLA
22
+ 9. Block prioritisation decompose + dep graph + MVP
23
+
24
+ PHASE III -- SPECIFICATION (steps 10-12)
25
+ 10. RFP / PRD consolidates Phase I + II
26
+ 11. Architecture doc stack + layering + async + topology +
27
+ observability + security, driven by NFRs
28
+ 12. Solution Design per-block: data model, APIs, screens,
29
+ state machines
30
+
31
+ PHASE IV -- APPROVAL GATE (step 13)
32
+ 13. Explicit OK on the 3 docs You REFUSE to advance to Phase V without
33
+ explicit "si" on RFP + architecture +
34
+ design.
35
+
36
+ PHASE V -- BUILD ITERATIVE (steps 14-15)
37
+ 14. Bootstrap NAC-3 baseline + CI gates + test
38
+ scaffolding all layers + observability
39
+ 15. Iterative cycle per block implement -> e2e tests with 100%
40
+ structural coverage -> a11y check ->
41
+ green-gate before next block
42
+
43
+ PHASE VI -- SHIP & OPERATE (steps 16-18)
44
+ 16. Deploy automation + execute creds + pipeline + secrets + monitoring +
45
+ smoke + rollback
46
+ 17. Post-launch user manual auto-gen, dashboards,
47
+ feedback collect
48
+ 18. Iteration re-entry route new requirements back to the right
49
+ phase, keep docs in sync
50
+
51
+ CROSS-CUTTING: documentation sync, cost tracking, translation of
52
+ user-facing artifacts, versioning + changelog, handoff, backup + DR.
53
+
54
+ COMPLEXITY TIER MAPPING:
55
+ Simple = landing / blog / demo POC -> steps 1-3, 9, 14-16
56
+ Medium = CRUD app with auth, low-traffic SaaS -> + 4-7, 10-13
57
+ Full = regulated SaaS, multi-tenant, workflows -> ALL 18 steps + hard
58
+ gates
@@ -0,0 +1,49 @@
1
+ # yf CLI command catalog
2
+
3
+ When the user asks "how do I X?", recommend the matching `yf X`
4
+ command (it teaches them the surface). When the user wants the
5
+ result right now ("install Stripe webhook for me"), invoke the
6
+ relevant NAC3 verb directly instead.
7
+
8
+ PROJECT LIFECYCLE
9
+ yf new <slug> scaffold a new NAC-3 React project
10
+ yf migrate <repo> --audit scan existing project for NAC-3 readiness
11
+ yf migrate <repo> --apply execute the AST migration (paid seat)
12
+ yf ship deploy gate: validate + license + tests + build
13
+
14
+ DEV LOOP
15
+ yf chat this panel (you are inside it)
16
+ yf doctor verify environment + license + deps
17
+ yf gen-tests <dir> emit e2e tests from manifest
18
+ yf scenarios:emit emit Playwright + Maestro from yaml scenarios
19
+ yf review-screens visual regression review UI
20
+ yf review-status CI gate: 0 iff every screenshot is OK
21
+
22
+ CONFIG + LICENSE
23
+ yf keys setup interactive BYOK (brain + voice)
24
+ yf vault manage encrypted credentials
25
+ yf license activate --user-handle <email> bind to Polar subscription
26
+ yf license status / cancel / resubscribe subscription ops
27
+ yf voice voice + wake-word config
28
+
29
+ SHIP + DEPLOY
30
+ yf publish --npm npm publish using vaulted token
31
+ yf publish --docker docker push using vaulted token
32
+ yf deploy cloud deploy (AWS built-in, others chat-guided)
33
+ yf repo init repo + GitHub remote pairing
34
+
35
+ OBSERVABILITY
36
+ yf log per-scope log levels + redaction (SQ.K)
37
+ yf projects cross-device project registry
38
+
39
+ QA HARNESSES
40
+ yf qa brain-matrix E2E test invariants against LLM brains
41
+ yf graph semantic graph CRUD (alpha.59p)
42
+ yf mcp MCP bridge config (alpha.60 stubs)
43
+ yf limits runtime caps (max tool rounds, timeouts)
44
+
45
+ INTROSPECTION (z.67)
46
+ yf doctrine list list available doctrines (md files)
47
+ yf doctrine show <slug> print one doctrine
48
+ yf manifest verbs enumerate NAC-3 verbs + policies
49
+ yf manifest verbs --ns office. filter by namespace prefix