@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,24 @@
1
+ {
2
+ "id": "office_excel_read_intent",
3
+ "description": "F106 office.excel.read coverage -- when the user asks to peek into an .xlsx file, the brain should pick office.excel.read, NOT yujin.shell.exec or yujin.fs.read-file (binary).",
4
+ "setup": {
5
+ "extra_system_prompt": "OFFICE VERBS active:\n- office.excel.read [P f] args:{path<required>, sheet?, range?, header_row?}\nNever read .xlsx via yujin.fs.read-file (binary). Never shell-out to python/openpyxl."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Lee data/users.xlsx, primer sheet, dame las primeras 10 filas" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "uses_office_read", "kind": "verb_invoked", "params": { "verb_id": "office.excel.read" } },
12
+ { "name": "does_not_use_shell", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } },
13
+ { "name": "does_not_read_as_text", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.fs.read-file" } }
14
+ ],
15
+ "fake_responses": [
16
+ {
17
+ "text": "Leo el Excel.",
18
+ "tool_calls": [
19
+ { "name": "nac3_invoke", "args": { "verb_id": "office.excel.read", "args": { "path": "data/users.xlsx" } } }
20
+ ]
21
+ },
22
+ { "text": "Primeras 10 filas listas. Abro pizarron para mostrar la tabla." }
23
+ ]
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "office_excel_write_required_args",
3
+ "description": "F106 office.excel.write requires path + rows. Validates args_contain_key invariant: brain must pass both keys.",
4
+ "setup": {
5
+ "extra_system_prompt": "OFFICE VERBS active:\n- office.excel.write [A f] args:{path<required>, sheet?, rows<required>, overwrite?}\nMust include path AND rows in args."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Crea data/sales.xlsx con dos filas {producto:'X',precio:100} y {producto:'Y',precio:200}" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "uses_office_excel_write", "kind": "verb_invoked", "params": { "verb_id": "office.excel.write" } },
12
+ { "name": "args_have_path", "kind": "args_contain_key", "params": { "verb_id": "office.excel.write", "key": "path" } },
13
+ { "name": "args_have_rows", "kind": "args_contain_key", "params": { "verb_id": "office.excel.write", "key": "rows" } }
14
+ ],
15
+ "fake_responses": [
16
+ {
17
+ "text": "Escribo el xlsx.",
18
+ "tool_calls": [
19
+ { "name": "nac3_invoke", "args": { "verb_id": "office.excel.write", "args": { "path": "data/sales.xlsx", "rows": [{ "producto": "X", "precio": 100 }, { "producto": "Y", "precio": 200 }] } } }
20
+ ]
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "office_overwrite_explicit",
3
+ "description": "F106 office.excel.write -- when user explicitly says 'reemplazalo' or 'overwrite', the brain MUST pass overwrite:true. args_contain_key validates.",
4
+ "setup": {
5
+ "extra_system_prompt": "office.excel.write defaults to overwrite=false. Only pass overwrite=true when the user explicitly tells you to replace an existing file."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Reemplazame data/contacts.xlsx con esta nueva tabla [{name:'A'},{name:'B'}]" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "uses_office_excel_write", "kind": "verb_invoked", "params": { "verb_id": "office.excel.write" } },
12
+ { "name": "args_have_overwrite", "kind": "args_contain_key", "params": { "verb_id": "office.excel.write", "key": "overwrite" } },
13
+ { "name": "args_have_rows", "kind": "args_contain_key", "params": { "verb_id": "office.excel.write", "key": "rows" } }
14
+ ],
15
+ "fake_responses": [
16
+ {
17
+ "text": "Reemplazo el archivo.",
18
+ "tool_calls": [
19
+ { "name": "nac3_invoke", "args": { "verb_id": "office.excel.write", "args": { "path": "data/contacts.xlsx", "rows": [{ "name": "A" }, { "name": "B" }], "overwrite": true } } }
20
+ ]
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "id": "office_word_write_intent",
3
+ "description": "F106 office.word.write coverage -- when the user dictates content for a .docx, the brain should invoke office.word.write with sections, NOT yujin.fs.write-project-file (text) or shell.exec.",
4
+ "setup": {
5
+ "extra_system_prompt": "OFFICE VERBS active:\n- office.word.write [A f] args:{path<required>, sections<required>, overwrite?}\nSections are {kind:'heading'|'paragraph', level?, text}. Never write .docx as plain text via fs.write-project-file."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Generame docs/notas.docx con titulo 'Notas reunion' y dos parrafos de prueba" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "uses_office_word_write", "kind": "verb_invoked", "params": { "verb_id": "office.word.write" } },
12
+ { "name": "does_not_use_shell", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } },
13
+ { "name": "does_not_write_text", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.fs.write-project-file" } }
14
+ ],
15
+ "fake_responses": [
16
+ {
17
+ "text": "Escribo el docx.",
18
+ "tool_calls": [
19
+ { "name": "nac3_invoke", "args": { "verb_id": "office.word.write", "args": { "path": "docs/notas.docx", "sections": [
20
+ { "kind": "heading", "level": 1, "text": "Notas reunion" },
21
+ { "kind": "paragraph", "text": "Primer parrafo de prueba." },
22
+ { "kind": "paragraph", "text": "Segundo parrafo de prueba." }
23
+ ] } } }
24
+ ]
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "panel_open_settings_intent",
3
+ "description": "When the user asks 'abrime los ajustes', the brain uses yujin.panel.open-settings (visible verb, handler_side=panel) so the modal opens client-side. NOT a fs.find on settings files.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Abrime el panel de ajustes." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_open_settings", "kind": "verb_invoked", "params": { "verb_id": "yujin.panel.open-settings" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Abriendo.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.panel.open-settings", "args": {} } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "panel_send_message_intent",
3
+ "description": "When the user asks the brain to 'mensajame esto en chat' / 'publica este texto en la conversacion' as a panel-side message (not a brain reply), the brain uses yujin.panel.send-message rather than treating the request as its own utterance.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Posteame en el chat panel el mensaje 'sesion guardada como bookmark X'." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_send_message", "kind": "verb_invoked", "params": { "verb_id": "yujin.panel.send-message" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Lo posteo.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.panel.send-message", "args": { "text": "sesion guardada como bookmark X" } } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "id": "pdf_read_intent",
3
+ "description": "When the user asks to read a PDF, the brain MUST use office.pdf.read, NOT yujin.fs.read-file (binary). Same family as office.word.read.",
4
+ "setup": {
5
+ "extra_system_prompt": "office.pdf.read extracts text + per-page outline from a .pdf. Always prefer it over fs.read-file for .pdf files."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Leeme docs/contrato.pdf y dame el resumen de las primeras 3 paginas" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "uses_pdf_read", "kind": "verb_invoked", "params": { "verb_id": "office.pdf.read" } },
12
+ { "name": "no_fs_read", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.fs.read-file" } }
13
+ ],
14
+ "fake_responses": [
15
+ {
16
+ "text": "Leo el pdf.",
17
+ "tool_calls": [
18
+ { "name": "nac3_invoke", "args": { "verb_id": "office.pdf.read", "args": { "path": "docs/contrato.pdf" } } }
19
+ ]
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "pizarron_clear_tab_explicit_close",
3
+ "description": "There is no yujin.pizarron.close-tab verb. When the user asks to close a tab, the brain must NOT invent the verb; it should explain the pizarron is read-only from its side and instruct the user to close via panel UI.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Cerrame la pestana del pizarron que tiene la tabla de archivos" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "explains_no_verb", "kind": "text_contains_any", "params": { "substrs": ["no tengo verbo", "panel", "manual", "vos", "cerrala", "cerra", "boton", "icono", "no puedo", "no existe", "no hay verbo", "X"] } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "No tengo verbo NAC3 para cerrar pestana del pizarron. Cerrala desde el panel con el boton X de la pestana -- es accion del usuario, no del asistente."
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "id": "pizarron_for_chart",
3
+ "description": "When the user asks for a chart / grafico / visualizacion, the brain MUST route through yujin.pizarron.create-tab with kind='chart', NOT respond inline with ASCII art.",
4
+ "setup": {
5
+ "extra_system_prompt": "For charts / graphs / time-series / KPI visualizations, ALWAYS use yujin.pizarron.create-tab with kind='chart'. NEVER paste ASCII bar charts in chat -- screen reader users + voice loop hear them as noise."
6
+ },
7
+ "turns": [
8
+ { "kind": "user_says", "text": "Hazme un grafico de barras de los commits por dia de la ultima semana" }
9
+ ],
10
+ "invariants": [
11
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
12
+ { "name": "uses_pizarron_create_tab", "kind": "verb_invoked", "params": { "verb_id": "yujin.pizarron.create-tab" } },
13
+ { "name": "no_ascii_chart", "kind": "regex_not_match", "params": { "pattern": "[#█▓░]{3,}" } }
14
+ ],
15
+ "fake_responses": [
16
+ {
17
+ "text": "Traigo el log.",
18
+ "tool_calls": [
19
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.git.log", "args": { "max": 50 } } }
20
+ ]
21
+ },
22
+ {
23
+ "text": "Abro chart en pizarron.",
24
+ "tool_calls": [
25
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.pizarron.create-tab", "args": { "title": "Commits por dia", "kind": "chart", "content": "{...}" } } }
26
+ ]
27
+ },
28
+ { "text": "Chart abierto en el pizarron. Lunes 4 commits, viernes el peak con 11." }
29
+ ]
30
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "id": "pizarron_for_long_table",
3
+ "description": "When the user asks for a tabular result with many rows, the brain MUST open the pizarron + put the table there. Chat reply stays brief (1-3 sentences with the insight). Validates against the F25 'paste 20-row table' anti-pattern.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Dame los 25 commits mas recientes con autor y fecha" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "uses_pizarron_create_tab", "kind": "verb_invoked", "params": { "verb_id": "yujin.pizarron.create-tab" } },
11
+ { "name": "concise_reply", "kind": "regex_not_match", "params": { "pattern": "\\|.*\\|.*\\|.*\\|.*\\|" } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Traigo el log.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.git.log", "args": { "max": 25 } } }
18
+ ]
19
+ },
20
+ {
21
+ "text": "Abro pestaña en pizarron.",
22
+ "tool_calls": [
23
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.pizarron.create-tab", "args": { "title": "Ultimos 25 commits", "kind": "table", "content": "..." } } }
24
+ ]
25
+ },
26
+ { "text": "Pegue los 25 commits en una tabla en el pizarron. El mas reciente es Pablo del 2026-06-04." }
27
+ ]
28
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "id": "pizarron_read_tab_intent",
3
+ "description": "When the user asks 'leeme la pestania N de pizarron' / 'que dice el pizarron?', the brain uses yujin.pizarron.read-tab, NOT yujin.reader.open or shell.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Leeme la pestania 0 del pizarron." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_read_tab", "kind": "verb_invoked", "params": { "verb_id": "yujin.pizarron.read-tab" } },
10
+ { "name": "no_reader", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.reader.open" } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Lo leo.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.pizarron.read-tab", "args": { "tab_index": 0 } } }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "id": "pizarron_render_not_inline",
3
+ "description": "F25 AiResponseRenderer principle: when the brain produces tabular or chart-like data (>3 rows or columns), it should render via yujin.pizarron.create-tab, not dump the table inline in the chat reply. Chat reply stays 1-3 sentences with the insight + pointer to the pizarron. Catches the failure mode where eco brains paste 20-row tables as ASCII art in chat.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Abrime una pestana en el pizarron con los 15 archivos mas grandes del proyecto ordenados por tamano" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "intends_pizarron", "kind": "text_contains_any", "params": { "substrs": ["pizarron", "pizarrón", "pestaña", "pestana", "create-tab", "abrir", "abrime", "Open", "list-files", "list_files", "yujin.fs", "no puedo", "modo fake", "no devuelve", "tamaño", "tamano"] } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Listo, ordene los 15 archivos por tamano descendente en el pizarron. El mas pesado es dist/bundle.js.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.pizarron.create-tab", "args": { "title": "Archivos por tamano", "kind": "table", "content": "size_kb,path\n5832,dist/bundle.js\n..." } } }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "id": "prefer_native_read_file",
3
+ "description": "R6 variant: when the user asks to read a project file, the brain must use yujin.fs.read-file (native verb), NOT yujin.shell.exec with `cat`. Validates the prefer-native-verb-over-shell global learning + the doctrine R6 rule. Stronger than the original prefer_native_verb_over_shell scenario (that one tests git status; this one tests fs.read-file, exercising a different verb family).",
4
+ "setup": {
5
+ "injected_global_learnings": [
6
+ {
7
+ "slug": "prefer-native-verb-over-shell",
8
+ "rule_text": "Always prefer a native yujin.* verb when both a native verb AND yujin.shell.exec could serve a read-only request. Reason: native verbs are cheaper (no process spawn), uniformly auditable, and policy-classified. Apply: file reads (yujin.fs.read-file), project state (yujin.workflow.state), branch status (yujin.github.branch-status), manifest reads (yujin.manifest.read)."
9
+ }
10
+ ]
11
+ },
12
+ "turns": [
13
+ { "kind": "user_says", "text": "Mostrame el contenido del package.json en la raiz del proyecto" }
14
+ ],
15
+ "invariants": [
16
+ { "name": "uses_native_read_file", "kind": "verb_invoked", "params": { "verb_id": "yujin.fs.read-file" } },
17
+ { "name": "does_not_use_shell_exec", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } },
18
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} }
19
+ ],
20
+ "fake_responses": [
21
+ {
22
+ "text": "Leo package.json.",
23
+ "tool_calls": [
24
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.fs.read-file", "args": { "path": "package.json" } } }
25
+ ]
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "id": "prefer_native_verb_over_shell",
3
+ "max_tool_rounds": 3,
4
+ "description": "Brain is asked about project state. There is a native read-only verb (yujin.workflow.state) AND a shell command (yf projects active) that returns equivalent info. Per R6 (alpha.59z.13), the brain MUST pick the native verb -- not shell.exec which gets classified as destructive and triggers R8 modal friction for a read-only query. Locks in the verb-selection doctrine introduced after Pablo observed the bug 2026-06-03 in the yuemail kickoff session.",
5
+ "setup": {},
6
+ "turns": [
7
+ { "kind": "user_says", "text": "Mostrame el estado de mi proyecto activo" }
8
+ ],
9
+ "invariants": [
10
+ { "name": "uses_native_workflow_state", "kind": "verb_invoked", "params": { "verb_id": "yujin.workflow.state" } },
11
+ { "name": "does_not_use_shell_exec", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } },
12
+ { "name": "no_invent", "kind": "no_invent_verb", "params": {} }
13
+ ],
14
+ "fake_responses": [
15
+ {
16
+ "text": "Leo el estado del workflow del proyecto activo.",
17
+ "tool_calls": [
18
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.workflow.state", "args": {} } }
19
+ ]
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "id": "prefer_native_workflow_state",
3
+ "description": "R6 variant: user asks about the current workflow state. Brain must invoke yujin.workflow.state (native verb), NOT yujin.shell.exec with `yf projects active` or similar. Validates R6 prefer-native-verb-over-shell on the workflow.* family.",
4
+ "setup": {
5
+ "injected_global_learnings": [
6
+ {
7
+ "slug": "prefer-native-verb-over-shell",
8
+ "rule_text": "Always prefer a native yujin.* verb when both a native verb AND yujin.shell.exec could serve a read-only request. Reason: native verbs are cheaper, uniformly auditable, policy-classified. Apply: workflow state -> yujin.workflow.state, project state -> yujin.workflow.state, file reads -> yujin.fs.read-file."
9
+ }
10
+ ]
11
+ },
12
+ "turns": [
13
+ { "kind": "user_says", "text": "En que fase del workflow estamos ahora?" }
14
+ ],
15
+ "invariants": [
16
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
17
+ { "name": "uses_workflow_state", "kind": "verb_invoked", "params": { "verb_id": "yujin.workflow.state" } },
18
+ { "name": "does_not_use_shell_exec", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } }
19
+ ],
20
+ "fake_responses": [
21
+ {
22
+ "text": "Reviso el estado del workflow.",
23
+ "tool_calls": [
24
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.workflow.state", "args": {} } }
25
+ ]
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "id": "project_init_intent",
3
+ "description": "When the user asks 'arranca un proyecto nuevo X', the brain uses yujin.project.init (NAC-3 scaffold) instead of yujin.shell.exec npm init or git init shenanigans.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Arranca un proyecto nuevo llamado mi-pyme." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_project_init", "kind": "verb_invoked", "params": { "verb_id": "yujin.project.init" } },
10
+ { "name": "no_shell", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Inicializo el proyecto.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.project.init", "args": { "name": "mi-pyme" } } }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "id": "project_set_root_intent",
3
+ "description": "When the user asks 'cambia el project root a X' / 'apunta forge al proyecto Y', the brain uses yujin.project.set-root instead of editing config files or shell.exec cd.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Cambia el project root a ~/proyectos/yujin-mobile." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_set_root", "kind": "verb_invoked", "params": { "verb_id": "yujin.project.set-root" } },
10
+ { "name": "no_shell", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.shell.exec" } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Apunto Forge al nuevo project root.",
15
+ "tool_calls": [
16
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.project.set-root", "args": { "path": "~/proyectos/yujin-mobile" } } }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "promote_lesson_after_correction",
3
+ "description": "After the user corrects the brain ('always do X from now on'), the brain should PROPOSE promoting a lesson with a draft slug + body, NOT silently honour it for one turn. Validates the lessons workflow lifecycle.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Desde ahora siempre usá comentarios en ingles, no en español. Listo?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "proposes_lesson", "kind": "text_contains_any", "params": { "substrs": ["lesson", "promov", "promote", "slug", "feedback", "regla", "yujin.lessons", "yujin.lessons.promote", "confirm", "recuerd", "memoria"] } }
11
+ ],
12
+ "fake_responses": [
13
+ {
14
+ "text": "Tomo nota. Te propongo promover una lesson para que esto valga en todos los turnos siguientes: slug 'feedback_code_comments_in_english', category 'feedback', body 'Comments in all code MUST be English, never Spanish.' Confirmás + la registro con yujin.lessons.promote?"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "id": "r8_destructive_shell_exec",
3
+ "description": "R8 modal protocol on yujin.shell.exec with a destructive shell command (rm). The brain invokes the verb, but does NOT also ask `confirmas?` in chat -- the modal is the question. Validates the alpha.42 R8 rule for the shell verb family, where the destructive classification is computed by shell_classifier at dispatch time.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Borrame el directorio dist/ del proyecto" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "no_redundant_confirm", "kind": "no_redundant_confirm", "params": {} },
11
+ { "name": "does_not_skip_modal_in_text", "kind": "text_excludes", "params": { "substr": "confirmas?" } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Voy a ejecutar la limpieza.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.shell.exec", "args": { "cmd": "rm -rf dist" } } }
18
+ ]
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "id": "read_then_parse_order",
3
+ "description": "When parsing a JSON file, the brain must READ first then PARSE second -- order matters because parse needs the content. Tests the verb_invoked_in_order invariant.",
4
+ "setup": {
5
+ "harness_responses": {
6
+ "yujin.fs.read": { "ok": true, "path": "data.json", "content": "{\"x\": 1}" },
7
+ "yujin.json.parse": { "ok": true, "value": { "x": 1 } }
8
+ }
9
+ },
10
+ "turns": [
11
+ { "kind": "user_says", "text": "Leeme data.json y parseame el JSON, decime el valor de x." }
12
+ ],
13
+ "invariants": [
14
+ { "name": "fs_read_first_then_parse", "kind": "verb_invoked_in_order",
15
+ "params": { "sequence": ["yujin.fs.read", "yujin.json.parse"] } },
16
+ { "name": "no_shell", "kind": "verb_not_invoked",
17
+ "params": { "verb_id": "yujin.shell.exec" } }
18
+ ],
19
+ "fake_responses": [
20
+ {
21
+ "text": "Leo.",
22
+ "tool_calls": [
23
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.fs.read", "args": { "path": "data.json" } } }
24
+ ]
25
+ },
26
+ {
27
+ "text": "Ahora parseo.",
28
+ "tool_calls": [
29
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.json.parse", "args": { "text": "{\"x\": 1}" } } }
30
+ ]
31
+ },
32
+ {
33
+ "text": "x = 1"
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "reader_bookmark_jump_intent",
3
+ "description": "When the user asks 'volve al bookmark X', the brain uses yujin.reader.bookmark-jump.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Llevame al bookmark 'pizarron-flow'." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_bookmark_jump", "kind": "verb_invoked", "params": { "verb_id": "yujin.reader.bookmark-jump" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Salto al bookmark.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.bookmark-jump", "args": { "name": "pizarron-flow" } } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "reader_bookmark_set_intent",
3
+ "description": "When the user asks 'guardame este punto' / 'marca esta posicion en el manual', the brain uses yujin.reader.bookmark-set.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Guardame este punto del manual con el nombre 'pizarron-flow'." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_bookmark_set", "kind": "verb_invoked", "params": { "verb_id": "yujin.reader.bookmark-set" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Bookmark guardado.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.bookmark-set", "args": { "name": "pizarron-flow" } } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "id": "reader_for_long_doc",
3
+ "description": "Pizarron vs Reader distinction: when the user uploads/references a long document (a PDF, an essay, a chapter), the brain should use yujin.reader.open (TTS-friendly, paginated, persistent bookmark) NOT yujin.pizarron.create-tab (ad-hoc canvas) nor yujin.pizarron.read-tab (TTS of an already-open pizarron tab). Catches the alpha.48 fix-3 family of regressions.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Quiero leer el RFC de NAC-3 v3.0 que esta en docs/NAC3_SPEC_V3.md de principio a fin con voz" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "no_invent_verbs", "kind": "no_invent_verb", "params": {} },
10
+ { "name": "uses_reader_open", "kind": "verb_invoked", "params": { "verb_id": "yujin.reader.open" } },
11
+ { "name": "does_not_use_pizarron", "kind": "verb_not_invoked", "params": { "verb_id": "yujin.pizarron.create-tab" } }
12
+ ],
13
+ "fake_responses": [
14
+ {
15
+ "text": "Abro el RFC en el reader con voz.",
16
+ "tool_calls": [
17
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.open", "args": { "path": "docs/NAC3_SPEC_V3.md" } } }
18
+ ]
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "reader_list_docs_intent",
3
+ "description": "When the user asks 'que manuales tengo cargados' / 'que docs estan en el reader', the brain uses yujin.reader.list-docs, NOT a filesystem list of docs/.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Que documentos tenes cargados en el reader?" }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_list_docs", "kind": "verb_invoked", "params": { "verb_id": "yujin.reader.list-docs" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Te listo.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.list-docs", "args": {} } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "reader_next_block_intent",
3
+ "description": "When the user asks 'segui' / 'el siguiente parrafo' mid-reading, the brain uses yujin.reader.next-block (which respects reader cursor state) instead of re-reading the whole doc.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Segui leyendo el siguiente bloque." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_next_block", "kind": "verb_invoked", "params": { "verb_id": "yujin.reader.next-block" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Siguiente.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.next-block", "args": {} } }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "id": "reader_read_section_intent",
3
+ "description": "When the user asks 'leeme la seccion X del manual cargado', the brain uses yujin.reader.read-section (which knows the doc structure) instead of fs.read of the raw md.",
4
+ "setup": {},
5
+ "turns": [
6
+ { "kind": "user_says", "text": "Leeme la seccion 'Pizarron' del manual actualmente abierto." }
7
+ ],
8
+ "invariants": [
9
+ { "name": "uses_read_section", "kind": "verb_invoked", "params": { "verb_id": "yujin.reader.read-section" } }
10
+ ],
11
+ "fake_responses": [
12
+ {
13
+ "text": "Leyendo la seccion.",
14
+ "tool_calls": [
15
+ { "name": "nac3_invoke", "args": { "verb_id": "yujin.reader.read-section", "args": { "title": "Pizarron" } } }
16
+ ]
17
+ }
18
+ ]
19
+ }