@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,28 @@
1
+ {
2
+ "id": "byok_on_managed_brain_overflow",
3
+ "description": "When the managed brain server's KV cost-meter reports overflow, the brain must explain BYOK fallback + point at `yf keys setup`, NOT silently call the managed verb and fail later.",
4
+ "setup": {
5
+ "workflow_state": {
6
+ "phase": "II",
7
+ "step": 8,
8
+ "managed_brain_active": true,
9
+ "managed_brain_kv_overflow": true,
10
+ "byok_keys_configured": 0
11
+ },
12
+ "harness_responses": {
13
+ "yujin.keys.status": { "ok": true, "vault_slots": [], "byok_keys_configured": 0 }
14
+ }
15
+ },
16
+ "turns": [
17
+ { "kind": "user_says", "text": "Mi cap del managed brain se agoto. Como sigo trabajando en este step?" }
18
+ ],
19
+ "invariants": [
20
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
21
+ { "name": "mentions_byok_fallback", "kind": "text_contains_any", "params": { "substrs": ["BYOK", "byok", "yf keys", "vault", "fallback", "tu propia key", "key propia", "anthropic_api_key", "openai_api_key", "google_ai_key", "managed brain", "agotado", "agotada"] } }
22
+ ],
23
+ "fake_responses": [
24
+ {
25
+ "text": "Tu cap del managed brain este mes esta agotado. Hay dos opciones: 1) esperar al reset mensual, 2) configurar BYOK -- cargas tu propia anthropic_api_key con `yf keys setup` y los costos pasan directo a tu cuenta sin cap. Que preferis?"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "id": "byok_required_policy",
3
+ "description": "When the user invokes a feature gated by byok-required policy (e.g. yf chat or yf gen-tests AI enrichment) without any provider key configured, the brain must explain the requirement + point at `yf keys` / vault, NOT silently call the verb and fail later.",
4
+ "setup": {
5
+ "workflow_state": {
6
+ "fase": "I",
7
+ "step": 2,
8
+ "byok_keys_configured": 0
9
+ },
10
+ "harness_responses": {
11
+ "yujin.keys.status": {
12
+ "ok": true,
13
+ "vault_slots": [],
14
+ "byok_keys_configured": 0,
15
+ "providers": {
16
+ "anthropic_api_key": false,
17
+ "openai_api_key": false,
18
+ "google_ai_key": false
19
+ }
20
+ }
21
+ }
22
+ },
23
+ "turns": [
24
+ { "kind": "user_says", "text": "Quiero usar `yf chat` para que el asistente IA me ayude con la spec, pero no tengo ninguna BYOK key configurada todavia. Como sigo?" }
25
+ ],
26
+ "invariants": [
27
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
28
+ { "name": "mentions_byok_or_keys", "kind": "text_contains_any", "params": { "substrs": ["BYOK", "byok", "keys", "key", "anthropic_api_key", "openai_api_key", "google_ai_key", "yf keys", "vault", "configur", "provider", "configurar", "anthropic", "openai", "gemini"] } }
29
+ ],
30
+ "fake_responses": [
31
+ {
32
+ "text": "`yf chat` necesita al menos una BYOK key cargada en el Vault (alguno de anthropic_api_key, openai_api_key, google_ai_key). Ahora veo 0 keys. Antes corre `yf keys setup` y elegi un provider; despues `yf chat` arranca."
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "concise_no_loop",
3
+ "description": "Simple status query should NOT trigger more than 2 tool calls. Validates max_tool_calls invariant against eco-tier looping bias.",
4
+ "setup": {
5
+ "workflow_state": {
6
+ "phase": "II",
7
+ "step": 5,
8
+ "byok_keys_configured": 1
9
+ }
10
+ },
11
+ "turns": [
12
+ { "kind": "user_says", "text": "Que paso estamos?" }
13
+ ],
14
+ "invariants": [
15
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
16
+ { "name": "max_two_calls", "kind": "max_tool_calls", "params": { "max": 2 } }
17
+ ],
18
+ "fake_responses": [
19
+ {
20
+ "text": "Estamos en fase II paso 5. Continuamos con clarificacion."
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "consult_nac_spec_intent",
3
+ "description": "When the user asks 'que dice la spec de NAC sobre X', the brain uses yujin.consult.nac-spec (which proxies to the NAC-3 spec server), NOT shell.exec or fs.read of unrelated paths.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Que dice la spec de NAC-3 sobre el atributo data-on?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_consult_spec", "kind": "verb_invoked", "params": { "verb_id": "yujin.consult.nac-spec" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Consulto la spec.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.consult.nac-spec", "args": { "query": "data-on attribute" } } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "id": "contradiction_rfp_cost",
3
+ "max_tool_rounds": 8,
4
+ "description": "Project has RFP fixing cost cap $500. User asks for 10x traffic capacity. LLM must detect contradiction with RFP and propose adenda flow, not silently change.",
5
+ "setup": {
6
+ "workflow_state": {
7
+ "tier": "full",
8
+ "phase": "V",
9
+ "step": 15,
10
+ "active_block": "scale_to_10x",
11
+ "specs": {
12
+ "rfp": { "done_at": "2026-05-15", "version": 1, "doc_path": "docs/RFP.md (cost cap $500/mo, single-region us-east-1)", "sha256": "rfpv1" },
13
+ "arch": { "done_at": "2026-05-16", "version": 1, "doc_path": "docs/ARCH.md (single-region us-east-1, EC2 t3.small)", "sha256": "archv1" },
14
+ "design": { "done_at": "2026-05-17", "version": 1, "doc_path": "docs/DESIGN.md", "sha256": "designv1" }
15
+ },
16
+ "approvals": {
17
+ "rfp": { "approved_at": "2026-05-18", "version_sha256": "rfpv1" },
18
+ "arch": { "approved_at": "2026-05-18", "version_sha256": "archv1" },
19
+ "design": { "approved_at": "2026-05-18", "version_sha256": "designv1" }
20
+ },
21
+ "blocks_progress": [
22
+ { "block_id": "scale_to_10x", "status": "in_progress" }
23
+ ]
24
+ }
25
+ },
26
+ "turns": [
27
+ { "kind": "user_says", "text": "Necesitamos soportar 10x el trafico actual" }
28
+ ],
29
+ "invariants": [
30
+ { "name": "acknowledges_constraint_or_plan", "kind": "text_contains_any", "params": { "substrs": ["rfp", "cost cap", "$500", "contradic", "constrain", "cuello", "escalar", "tráfico", "trafico", "cambi", "adenda", "plan", "actualiz", "approve", "review"] } },
31
+ { "name": "no_invent", "kind": "no_invent_verb", "params": {} }
32
+ ],
33
+ "fake_responses": [
34
+ {
35
+ "text": "Eso entra en contradiccion con el RFP v1 (cost cap $500, single-region). 10x trafico va a romper el cap a menos que aprobemos una adenda al RFP. Querés que arme la adenda + propague a arch o evaluamos optimizaciones del codigo existente primero?"
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "cost_router_attachment_frontier",
3
+ "description": "Cost router force-escalation: when a user message includes an attachment (file blob, image, large paste), the cost_router escalates eco -> frontier regardless of tier preference (alpha.56). The brain that ends up serving the turn is frontier, so its tier badge in its response reflects that. This scenario uses pre_history to simulate the attachment marker added by the panel.",
4
+ "setup": {
5
+ "pre_history": [
6
+ { "role": "user", "content": "Te paso este archivo:\n[ATTACHMENT: invoice-march-2026.pdf, 4 pages, 230kb]\n\nNecesito que extraigas el total y los items." }
7
+ ]
8
+ },
9
+ "turns": [
10
+ { "kind": "user_says", "text": "Listo, esta arriba" }
11
+ ],
12
+ "invariants": [
13
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
14
+ { "name": "addresses_attachment", "kind": "text_contains_any", "params": { "substrs": ["invoice", "archivo", "attach", "PDF", "pdf", "extraer", "items", "total", "factura", "documento", "leer"] } }
15
+ ],
16
+ "fake_responses": [
17
+ {
18
+ "text": "Para leer el PDF de la factura voy a usar el reader sobre el archivo adjuntado.",
19
+ "tool_calls": [
20
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.open", "args": { "path": "invoice-march-2026.pdf" } } }
21
+ ]
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "cost_router_escalation_explicit",
3
+ "description": "Validates the cost_router escalation path (alpha.59z.7): keywords like `disenia`, `arquitectura`, `refactor estructural` trigger eco -> frontier even on the eco tier. Brain serving the turn ends up being frontier and gives a substantive design answer, not a deferral. This scenario runs on eco brain but the runner's applyCostRouterPreRoute should swap to a frontier substitute before the LLM is called.",
4
+ "setup": {
5
+ "workflow_state": {
6
+ "fase": "II",
7
+ "step": 7,
8
+ "active_sq_rules": ["1.1", "1.2"]
9
+ }
10
+ },
11
+ "turns": [
12
+ { "kind": "user_says", "text": "Disenia la arquitectura de un microservicio de notificaciones que sustenta 10k mensajes por minuto con auditoria + replay" }
13
+ ],
14
+ "invariants": [
15
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
16
+ { "name": "answers_with_design", "kind": "text_contains_any", "params": { "substrs": ["queue", "cola", "redis", "kafka", "rabbit", "broker", "topic", "consumer", "consumidor", "auditor", "replay", "throughput", "10k", "minuto"] } }
17
+ ],
18
+ "fake_responses": [
19
+ {
20
+ "text": "Voy a proponer la arquitectura. Para 10k msg/min con auditoria + replay sugiero: Kafka como broker (particionado por tipo de notificacion), un topic 'notifications.events' con retencion 7 dias para replay, consumers en grupos por canal (email/push/sms), tabla de auditoria escrita por un consumer dedicado que persiste cada evento con timestamp + status + retry count, y un endpoint admin para replay por offset/timestamp. Dejame proponer el diagrama BPMN con los flujos."
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "cost_router_idle_reset",
3
+ "description": "After 1+ min of brain idle, the cost-router should drop back to eco for the next short turn. Brain should not assume frontier inertia survives a long pause.",
4
+ "setup": {
5
+ "workflow_state": {
6
+ "phase": "I",
7
+ "step": 3,
8
+ "minutes_since_last_turn": 5,
9
+ "previous_tier": "frontier"
10
+ }
11
+ },
12
+ "turns": [
13
+ { "kind": "user_says", "text": "ok" }
14
+ ],
15
+ "invariants": [
16
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
17
+ { "name": "short_polite_reply", "kind": "max_turns", "params": { "max": 2 } }
18
+ ],
19
+ "fake_responses": [
20
+ {
21
+ "text": "Listo. Decime el proximo paso cuando quieras."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "id": "csv_via_excel_read",
3
+ "description": "F106 office.excel.read also handles .csv (extension drives format). Brain MUST use it for CSV reads instead of fs.read-file (text) -- this surfaces typed rows + sheet metadata.",
4
+ "setup": {
5
+ "extra_system_prompt": "office.excel.read handles .xlsx / .xls / .csv. For CSV reads prefer it over yujin.fs.read-file -- it returns typed rows + header detection."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Dame los datos de data/users.csv como filas estructuradas" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "uses_office_excel_read", "kind": "verb_invoked", "params": { "verb_id": "office.excel.read" } },
12
+ { "name": "does_not_text_read", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.fs.read-file" } }
13
+ ],
14
+ "fake_responses": [
15
+ {
16
+ "text": "Leo el csv via office.excel.read.",
17
+ "tool_calls": [
18
+ { "name": "nac3_invoke", "args": { "verb_id": "office.excel.read", "args": { "path": "data/users.csv" } } }
19
+ ]
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "id": "destructive_no_text_confirm",
3
+ "description": "R8 protocol negative test: user asks to delete a project from the registry (yujin.project.delete is destructive). The brain invokes the verb directly; the panel will open the modal. The brain text reply MUST NOT include `confirmas?` or `estas seguro?` -- the modal IS the question. This catches eco brains that double-up the confirmation.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Borrame el proyecto `test-old-prototype` del registro" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "no_redundant_confirm", "kind": "no_redundant_confirm", "params": {} }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Voy a borrar el proyecto.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.shell.exec", "args": { "cmd": "rm -rf test-old-prototype" } } }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "diff_explains_changes",
3
+ "description": "After yujin.text.diff, the brain explains WHAT changed in prose -- not just dumps the diff. Tests min_text_length + content guidance.",
4
+ "setup": {
5
+ "harness_responses": {
6
+ "yujin.text.diff": {
7
+ "unified": "--- a\n+++ b\n@@ -1,1 +1,1 @@\n-hola mundo\n+hola universo\n",
8
+ "hunk_count": 1,
9
+ "changed": true
10
+ }
11
+ }
12
+ },
13
+ "turns": [
14
+ { "kind": "user_says", "text": "Cual es la diferencia entre 'hola mundo' y 'hola universo'?" }
15
+ ],
16
+ "invariants": [
17
+ { "name": "uses_diff", "kind": "verb_invoked", "params": { "verb_id": "yujin.text.diff" } },
18
+ { "name": "has_explanation", "kind": "min_text_length", "params": { "min": 40 } },
19
+ { "name": "mentions_words", "kind": "text_contains_any", "params": { "substrs": ["mundo", "universo", "reemplaz", "cambi", "palabra"] } }
20
+ ],
21
+ "fake_responses": [
22
+ {
23
+ "text": "Comparo.",
24
+ "tool_calls": [
25
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.text.diff", "args": { "before": "hola mundo", "after": "hola universo" } } }
26
+ ]
27
+ },
28
+ {
29
+ "text": "La unica diferencia es la segunda palabra: 'mundo' se reemplaza por 'universo'. El resto del texto queda igual."
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "doctrine_after_unknown_intent",
3
+ "description": "When the user's intent doesn't match any obvious doctrine, the brain should NOT spam doctrine.discover calls -- it should ask the user instead. Validates max_tool_calls limits curiosity loops.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "ok" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "max_one_tool_call", "kind": "max_tool_calls", "params": { "max": 1 } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Listo, decime que querés que haga."
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_a11y",
3
+ "description": "When the user asks about screen-reader announcements or focus, the brain fetches the accessibility doctrine + recommends yujin.a11y.* verbs.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Como anuncio un mensaje de error al lector de pantalla?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_a11y_announce", "kind": "text_contains_any", "params": { "substrs": ["yujin.a11y.announce", "a11y.announce", "yujin.a11y", "politeness", "assertive", "live region", "aria-live"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina de accessibility.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["accessibility"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Para anunciar un error usá yujin.a11y.announce({text:'mensaje', politeness:'assertive'}). El politeness assertive interrumpe al lector + es el patron para errores. Si querés que tambien se diga por voz, agregá speak:true."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_agent_orchestrator",
3
+ "description": "When the user asks for an agent / scheduled job / background task, the brain fetches the agent-orchestrator doctrine. HITO 5 not shipped yet -- the brain acknowledges + points at the design doc + manual interim.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Quiero un agente que corra cada noche a las 3am y me deje un resumen de los PRs abiertos" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_not_shipped", "kind": "text_contains_any", "params": { "substrs": ["no esta construido", "no se construyo", "no shipped", "design", "diseño", "HITO 5", "todavia no", "clarif", "interim", "manual", "borrador"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina de agent-orchestrator.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["agent-orchestrator"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Los agentes estan en diseño (HITO 5) pero todavia no shipped -- hay 10 puntos de clarificacion que Pablo tiene que cerrar antes de slice 1. Mientras tanto te propongo el interim manual: armas un script en ~/.yujin-forge/scripts/daily-prs.md que corra `gh pr list --json` + le pegas el output a `yf chat` cuando lo necesitas. Cuando aterricen los agentes, lo migramos."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_byok_vs_managed",
3
+ "description": "When the user asks about BYOK vs managed brain choice, the brain fetches the byok-vs-managed doctrine + explains the trade-off honestly.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Que me conviene mas, BYOK o managed brain?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_both_paths", "kind": "text_contains_any", "params": { "substrs": ["BYOK", "byok", "managed", "cap", "privacidad", "privacy", "Vault", "anthropic_api_key", "google_ai_key", "trade-off", "tradeoff", "ambos"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina de BYOK vs managed.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["byok-vs-managed"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Depende del uso: BYOK te da privacy + sin cap mensual pero requiere cuenta del provider con saldo. Managed te da onboarding sin claves + cap predecible pero el prompt pasa por nuestro Workers. Para uso intensivo conviene BYOK; para arrancar y probar, managed. Podes tenerlos a los dos -- el cost router elige por turno."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_cost_router",
3
+ "description": "When the user asks why the model tier changed, the brain fetches the cost-router-escalation doctrine + explains the trigger.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Por que en el ultimo turno me cambiaste a Sonnet sin avisar?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "explains_escalation", "kind": "text_contains_any", "params": { "substrs": ["escala", "cost router", "router", "SQ", "active_sq_rules", "phase", "fase", "frontier", "eco", "inertia", "trigger"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina del cost router.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["cost-router-escalation"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "El router escala a frontier (Sonnet) cuando detecta active_sq_rules + texto que dispara violacion, fase III+ del workflow, o frontier inertia desde un turno anterior. En tu ultimo turno fue activacion por SQ-defense. Si queres pinearlo manual, `yf brain set eco`."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_g_doc",
3
+ "description": "Brain is asked about the G-DOC generation doctrine (NAC3-first manifest, MCP opt-in, templates carry the example) that applies when scaffolding adopter app code. Should call yujin.doctrine.discover({slugs:['g-doc']}) to fetch the rules, then explain. Validates the alpha.59z.3 G-DOC doctrine on-demand migration.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Cuales son las reglas G-DOC cuando estoy scaffoldeando codigo adopter en step 11 o 14?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_gdoc_rules", "kind": "text_contains_any", "params": { "substrs": ["NAC3-first", "NAC-3 first", "manifest", "MCP", "opt-in", "template", "scaffold"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina G-DOC.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["g-doc"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "G-DOC: cuando scaffoldeo adopter app code, las apps generadas tienen NAC-3 first como default (con su manifest), MCP es opt-in para casos especificos (no default), y los templates llevan ejemplos completos (no placeholders genericos)."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "doctrine_discover_gates",
3
+ "description": "Brain is asked about workflow gates (hard/soft) that block phase transitions. Validates the brain enumerates the right gates -- either by recalling the baked-in gates doctrine OR by invoking yujin.doctrine.discover. alpha.59z.22 U3 relaxed: the gates list is load-bearing for phase transitions and is recalled by frontier brains from the prompt.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Cuales son los gates duros del workflow que me bloquean avanzar de fase?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "mentions_gates", "kind": "text_contains_any", "params": { "substrs": ["G1", "G2", "G5", "tier", "RFP", "block-plan", "smoke", "vault", "no hay", "doctrine", "no information", "no disponible", "no information", "no esta", "fase", "phase"] } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Traigo la doctrina de gates.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["gates"] } } }
17
+ ]
18
+ },
19
+ {
20
+ "text": "Los gates duros (hard) que rechazan el avance son G1 fase I sin tier decidido, G2 sin minimum brain key en vault, G3 fase III sin intent, G4 fase IV sin block-plan OK, G5 fase V sin OK explicito de los 3 spec docs, G6 block completo con tests rojos, G7 fase VI sin todas las creds, G8 launch sin smoke verde."
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "doctrine_discover_intent_en",
3
+ "description": "English variant: 'consult the workflow doctrine' uses yujin.doctrine.discover, not fs.read of the md file.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Consult the workflow doctrine -- I need a refresher on what phase IV requires." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "fetches_doctrine", "kind": "args_contain_key", "params": { "verb_id": "yujin.doctrine.discover", "key": "slugs" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Fetching.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["workflow"] } } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_lessons_workflow",
3
+ "description": "When the user asks how to promote/revoke a lesson, the brain fetches the lessons-workflow doctrine + explains the verb path.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Quiero promover una regla 'siempre commitea con co-author Pablo'. Como hago?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_promote_path", "kind": "text_contains_any", "params": { "substrs": ["lessons.promote", "yujin.lessons", "promover", "promote", "slug", "category", "feedback", "confirm"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina de lessons.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["lessons-workflow"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Para promover, te propongo slug 'feedback_always_co_author_pablo', category=feedback, body=tu regla. Confirmas + invoco yujin.lessons.promote?"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_mcp_lifecycle",
3
+ "description": "When the user asks how to enable/disable an MCP bridge or rotate its token, the brain fetches the mcp-bridge-lifecycle doctrine + answers from the source of truth.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Como deshabilito un MCP bridge sin borrarlo del todo?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_yf_mcp_disable", "kind": "text_contains_any", "params": { "substrs": ["yf mcp disable", "mcp disable", "yf mcp", "disable", "deshabilit", "enabled=false", "toggle"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina mcp-bridge-lifecycle.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["mcp-bridge-lifecycle"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Corré `yf mcp disable <id>`. Persiste el flag enabled=false en tu state local. El bridge queda discovered pero filtrado del manifest stub -- el asistente no puede invocar sus tools. Re-encenderlo es `yf mcp enable <id>`. Si querés revocar el token tambien, `yf keys delete <slot>`."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_nac3_attrs",
3
+ "description": "Brain is asked how to decorate an HTML element so NAC-3 can address it. Should call yujin.doctrine.discover({slugs:['nac3-attrs']}) to fetch the 5-attribute reference + then explain. Validates the doctrine-on-demand pattern from alpha.59z.2 when we pulled the nac3-attrs reference out of the system prompt.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Que atributos HTML tengo que poner en un boton para que el agente NAC-3 lo pueda invocar?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_attrs", "kind": "text_contains_any", "params": { "substrs": ["data-nac-id", "data-nac-role", "data-nac-action", "data-nac-state", "data-nac-target", "nac-id", "nac-role"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina de atributos NAC-3.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["nac3-attrs"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Para que el boton sea agent-addressable necesita: data-nac-id estable (ej 'checkout.confirm_btn'), data-nac-role='action', data-nac-action='submit' (o open/search/navigate segun el efecto), data-nac-state opcional para loading/disabled, y data-nac-target opcional si controla otro elemento."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "doctrine_discover_office",
3
+ "description": "When the user asks how to handle Excel / Word / spreadsheet, the brain should fetch the office-tools doctrine via yujin.doctrine.discover, then recommend office.* verbs (NOT shell.exec, NOT fs.read-file).",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Como leo un archivo Excel con tus verbs? Que opciones tengo?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "calls_doctrine_discover", "kind": "verb_invoked", "params": { "verb_id": "yujin.doctrine.discover" } },
10
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
11
+ { "name": "mentions_office_excel_read", "kind": "text_contains_any", "params": { "substrs": ["office.excel.read", "office.excel", "office.*", "xlsx", "sheet", "rows"] } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo la doctrina de office tools.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["office-tools"] } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Para leer un .xlsx hay office.excel.read({path, sheet?, range?, header_row?}). Por defecto trata la fila 1 como header + devuelve un array de objetos. Si querés celdas crudas, pasá header_row:false. Nunca uses fs.read-file (binario) ni shell-out a python para esto."
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "doctrine_discover_pizarron",
3
+ "description": "Brain is asked about the pizarron tab system (create-tab vs open-file vs read-tab vs reader.open). Validates the brain explains the right verb for each case -- either by recalling the baked-in pizarron doctrine OR by invoking yujin.doctrine.discover. alpha.59z.22 U3 relaxed: pizarron is load-bearing UX, baked-in for frontier brains.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Cual es la diferencia entre pizarron.create-tab y pizarron.open-file? Cuando uso cada uno?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "mentions_pizarron_verbs", "kind": "text_contains_any", "params": { "substrs": ["create-tab", "open-file", "read-tab", "ad-hoc", "disco", "filesystem"] } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Traigo la doctrina pizarron.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.doctrine.discover", "args": { "slugs": ["pizarron"] } } }
17
+ ]
18
+ },
19
+ {
20
+ "text": "yujin.pizarron.create-tab es para contenido ad-hoc que vos generas (tabla, codigo, doc): no toca disco. yujin.pizarron.open-file abre un archivo del proyecto desde disco como editor: filesystem + dom. Para 'leer en voz alta una pestaña' usá yujin.pizarron.read-tab, no yujin.reader.open."
21
+ }
22
+ ]
23
+ }