@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,213 @@
1
+ /**
2
+ * turn_classifier.ts -- Gemini mini-prompt that decides tier for
3
+ * a turn the reasoning_gate flagged as ambiguous (alpha.55).
4
+ *
5
+ * Why eco-model for the classifier itself: the question
6
+ * "simple verb invocation or complex reasoning?" is a routing
7
+ * decision, not a content decision. Gemini Flash Lite handles it
8
+ * in ~400 ms for fractions of a cent. The verdict gates whether
9
+ * the EXPENSIVE turn (full LLM call) goes to eco or frontier.
10
+ *
11
+ * Fallback path when Gemini is not reachable or the key is
12
+ * missing: the gate's own (low-confidence) tier suggestion is
13
+ * returned with a "classifier_unreachable" signal so the cost log
14
+ * shows what happened. The chat NEVER blocks on classifier
15
+ * availability.
16
+ *
17
+ * Cache: LRU keyed by sha256 of the user text + previous tier.
18
+ * 50 entries / 5 min TTL. Saves the classifier call on repeated
19
+ * short prompts ("hola", "ok", "si").
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import { createHash } from 'node:crypto';
24
+ const SYSTEM_PROMPT = ('You are a routing classifier inside a developer tool. Given a ' +
25
+ 'user message, decide which class it belongs to:\n' +
26
+ ' - "simple": a short request invoking one tool or asking a ' +
27
+ 'trivial question. Examples: "abrime una tab", "show me the ' +
28
+ 'budget", "list pipelines", "hola", "leeme la tabla".\n' +
29
+ ' - "complex": requires reasoning, design, code generation, or ' +
30
+ 'a multi-step plan. Examples: "design the architecture for X", ' +
31
+ '"implement a new feature", "refactor this module", "write a ' +
32
+ 'function that does Y".\n' +
33
+ ' - "destructive": modifies persistent state (delete files, drop ' +
34
+ 'tables, commit + push, send emails, deploy). Examples: "borra ' +
35
+ 'esos archivos", "git push --force", "send the email now".\n\n' +
36
+ 'Reply with exactly one word: simple, complex, or destructive. ' +
37
+ 'No punctuation, no extra text.');
38
+ const CACHE_MAX = 50;
39
+ const CACHE_TTL_MS = 5 * 60 * 1000;
40
+ const _cache = new Map();
41
+ function cacheKey(text, prev) {
42
+ const h = createHash('sha256');
43
+ h.update(prev || '');
44
+ h.update('|');
45
+ h.update(text);
46
+ return h.digest('hex');
47
+ }
48
+ function cacheGet(key) {
49
+ const e = _cache.get(key);
50
+ if (!e)
51
+ return null;
52
+ if (Date.now() - e.ts > CACHE_TTL_MS) {
53
+ _cache.delete(key);
54
+ return null;
55
+ }
56
+ /* Move to end -> LRU touch. */
57
+ _cache.delete(key);
58
+ _cache.set(key, e);
59
+ return { ...e.result, cached: true };
60
+ }
61
+ function cacheSet(key, result) {
62
+ if (_cache.size >= CACHE_MAX) {
63
+ /* Drop oldest (first inserted) -- Map iteration order is
64
+ * insertion order. */
65
+ const first = _cache.keys().next().value;
66
+ if (first !== undefined)
67
+ _cache.delete(first);
68
+ }
69
+ _cache.set(key, { ts: Date.now(), result: { ...result, cached: false } });
70
+ }
71
+ /** Test hook -- clear cache between specs. */
72
+ export function _resetClassifierCache() {
73
+ _cache.clear();
74
+ }
75
+ /* ----- classifier core ------------------------------------- */
76
+ function parseVerdict(text) {
77
+ const t = (text || '').trim().toLowerCase();
78
+ /* Gemini sometimes wraps the word in markdown or punctuation. */
79
+ const stripped = t.replace(/[^a-z]/g, '');
80
+ if (stripped === 'simple')
81
+ return 'simple';
82
+ if (stripped === 'complex')
83
+ return 'complex';
84
+ if (stripped === 'destructive')
85
+ return 'destructive';
86
+ /* Substring fallback for noisy output. */
87
+ if (stripped.includes('simple'))
88
+ return 'simple';
89
+ if (stripped.includes('complex'))
90
+ return 'complex';
91
+ if (stripped.includes('destructive'))
92
+ return 'destructive';
93
+ return null;
94
+ }
95
+ function verdictToTier(v, gate_tier) {
96
+ if (v === 'simple')
97
+ return 'eco';
98
+ if (v === 'complex')
99
+ return 'frontier';
100
+ /* destructive routes to frontier so the user gets the best
101
+ * judgment before persistent changes. */
102
+ if (v === 'destructive')
103
+ return 'frontier';
104
+ /* null -> gate fallback. */
105
+ return gate_tier;
106
+ }
107
+ async function callGemini(text, apiKey, model, fetchImpl, timeoutMs) {
108
+ const url = 'https://generativelanguage.googleapis.com/v1beta/models/' +
109
+ encodeURIComponent(model) +
110
+ ':generateContent?key=' + encodeURIComponent(apiKey);
111
+ const body = {
112
+ systemInstruction: { parts: [{ text: SYSTEM_PROMPT }] },
113
+ contents: [{
114
+ role: 'user',
115
+ parts: [{ text: text.slice(0, 2000) }],
116
+ }],
117
+ generationConfig: {
118
+ maxOutputTokens: 8,
119
+ temperature: 0.0,
120
+ },
121
+ };
122
+ const controller = new AbortController();
123
+ const t = setTimeout(() => controller.abort(), timeoutMs);
124
+ try {
125
+ const r = await fetchImpl(url, {
126
+ method: 'POST',
127
+ headers: { 'content-type': 'application/json' },
128
+ body: JSON.stringify(body),
129
+ signal: controller.signal,
130
+ });
131
+ if (!r.ok) {
132
+ throw new Error('gemini http ' + r.status);
133
+ }
134
+ const j = await r.json();
135
+ const candidate = j.candidates && j.candidates[0];
136
+ const part = candidate?.content?.parts && candidate.content.parts[0];
137
+ return (part && typeof part.text === 'string') ? part.text : '';
138
+ }
139
+ finally {
140
+ clearTimeout(t);
141
+ }
142
+ }
143
+ /**
144
+ * Run the classifier. Never throws -- on any failure, returns
145
+ * the gate's fallback tier with a "classifier_unreachable"
146
+ * signal and confidence 0.50.
147
+ */
148
+ export async function classifyTurn(input) {
149
+ const text = typeof input.text === 'string' ? input.text : '';
150
+ const key = cacheKey(text, input.previous_tier);
151
+ const cached = cacheGet(key);
152
+ if (cached)
153
+ return cached;
154
+ const signals = [];
155
+ const apiKey = input.api_key ?? null;
156
+ if (!apiKey) {
157
+ signals.push('classifier_no_api_key');
158
+ const r = {
159
+ tier: input.gate_tier,
160
+ confidence: 0.50,
161
+ verdict: null,
162
+ signals,
163
+ cached: false,
164
+ };
165
+ cacheSet(key, r);
166
+ return r;
167
+ }
168
+ const fetchImpl = input.fetchImpl ?? fetch;
169
+ const model = input.model ?? 'gemini-2.5-flash-lite';
170
+ const timeoutMs = input.timeoutMs ?? 2500;
171
+ let raw = '';
172
+ try {
173
+ raw = await callGemini(text, apiKey, model, fetchImpl, timeoutMs);
174
+ }
175
+ catch (err) {
176
+ const msg = err instanceof Error ? err.message : String(err);
177
+ signals.push('classifier_unreachable[' + msg.slice(0, 60) + ']');
178
+ const r = {
179
+ tier: input.gate_tier,
180
+ confidence: 0.50,
181
+ verdict: null,
182
+ signals,
183
+ cached: false,
184
+ };
185
+ cacheSet(key, r);
186
+ return r;
187
+ }
188
+ const verdict = parseVerdict(raw);
189
+ if (!verdict) {
190
+ signals.push('classifier_unparseable[' + raw.slice(0, 30) + ']');
191
+ const r = {
192
+ tier: input.gate_tier,
193
+ confidence: 0.50,
194
+ verdict: null,
195
+ signals,
196
+ cached: false,
197
+ };
198
+ cacheSet(key, r);
199
+ return r;
200
+ }
201
+ signals.push('classifier_verdict[' + verdict + ']');
202
+ const tier = verdictToTier(verdict, input.gate_tier);
203
+ const r = {
204
+ tier,
205
+ confidence: verdict === 'destructive' ? 0.95 : 0.88,
206
+ verdict,
207
+ signals,
208
+ cached: false,
209
+ };
210
+ cacheSet(key, r);
211
+ return r;
212
+ }
213
+ //# sourceMappingURL=turn_classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn_classifier.js","sourceRoot":"","sources":["../../src/core/turn_classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface WhatsNewEntry {
2
+ version: string;
3
+ date: string;
4
+ summary: string;
5
+ bullets: string[];
6
+ }
7
+ export declare const CATALOG: WhatsNewEntry[];
8
+ export interface WhatsNewResult {
9
+ current_version: string;
10
+ last_seen_version: string | null;
11
+ entries: WhatsNewEntry[];
12
+ }
13
+ declare function lastSeenPath(): string;
14
+ export declare function readLastSeen(): Promise<string | null>;
15
+ export declare function writeLastSeen(version: string): Promise<void>;
16
+ /**
17
+ * Parse a semver-ish version into a comparable tuple.
18
+ * "0.2.0-alpha.59k" -> [0, 2, 0, "alpha", 59, "k"]
19
+ * Releases without prerelease ("1.0.0") sort AFTER any prerelease
20
+ * of the same base.
21
+ */
22
+ export declare function parseVersion(v: string): {
23
+ base: [number, number, number];
24
+ preLabel: string | null;
25
+ preNum: number;
26
+ preTail: string;
27
+ };
28
+ /** Returns negative when a < b, positive when a > b, 0 when equal. */
29
+ export declare function compareVersions(a: string, b: string): number;
30
+ /**
31
+ * Returns the cumulative list of WhatsNewEntry that the user has
32
+ * not seen yet. Entries strictly greater than last_seen and
33
+ * <= current_version. When last_seen is null, returns the latest
34
+ * entry only (avoid wall-of-text on a fresh install).
35
+ */
36
+ export declare function computeWhatsNew(currentVersion: string): Promise<WhatsNewResult>;
37
+ /** Test seam. */
38
+ export declare const _internal: {
39
+ lastSeenPath: typeof lastSeenPath;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=whats_new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whats_new.d.ts","sourceRoot":"","sources":["../../src/core/whats_new.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAK,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAID,eAAO,MAAM,OAAO,EAAE,aAAa,EAqFlC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,iBAAS,YAAY,IAAI,MAAM,CAI9B;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ3D;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG;IACvC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAI,MAAM,CAAC;IACjB,OAAO,EAAG,MAAM,CAAC;CAClB,CAaA;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoB5D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED,iBAAiB;AACjB,eAAO,MAAM,SAAS;;CAAmB,CAAC"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * "What's new" notification (alpha.59l).
3
+ *
4
+ * Tracks the version Pablo (or any user) last opened the panel with.
5
+ * On boot, the server compares with the currently installed version
6
+ * and returns the cumulative bullet list of changes between the two,
7
+ * so the panel can show a one-shot dismissable banner.
8
+ *
9
+ * Storage:
10
+ * ~/.yujin-forge/last_seen_version -- plain text file with the
11
+ * version string. Atomic
12
+ * tmp+rename write. Missing
13
+ * file = "never seen" -> show
14
+ * everything from CATALOG.
15
+ *
16
+ * Catalog lives inline (`CATALOG` below). Adding a new entry is a
17
+ * one-line edit per alpha. Versions are compared by tuple of
18
+ * [major, minor, patch, pre_label, pre_num] so 0.2.0-alpha.59k <
19
+ * 0.2.0-alpha.59l < 0.2.0-alpha.60 < 0.2.0.
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import { promises as fs } from 'node:fs';
24
+ import path from 'node:path';
25
+ import os from 'node:os';
26
+ /* The catalog is ordered newest-first. Sumi adds an entry at the
27
+ * top with every shipped alpha that has a user-visible change. */
28
+ export const CATALOG = [
29
+ {
30
+ version: '0.2.0-alpha.59l',
31
+ date: '2026-06-01',
32
+ summary: 'First-run "what changed" banner',
33
+ bullets: [
34
+ 'New: this banner. Shown once per version upgrade.',
35
+ 'Dismiss to mark seen. Re-shown only on the next yf upgrade.',
36
+ ],
37
+ },
38
+ {
39
+ version: '0.2.0-alpha.59k',
40
+ date: '2026-06-01',
41
+ summary: 'Server-side cost meter (billing-grade caps)',
42
+ bullets: [
43
+ 'Authoritative monthly token counter lives in Cloudflare KV.',
44
+ 'Worker enforces plan cap (free-public 200k eco, paid 2M, etc) before upstream call.',
45
+ '429 monthly_cap_reached when usage projection >= cap.',
46
+ 'New endpoint GET /v1/cost-meter/<handle> exposes the row + caps for the budget UI.',
47
+ ],
48
+ },
49
+ {
50
+ version: '0.2.0-alpha.59j',
51
+ date: '2026-06-01',
52
+ summary: 'ANSI rendering + reader bookmarks + audit detail',
53
+ bullets: [
54
+ 'Shell pizarron tabs strip ANSI escapes + collapse \\r progress bars.',
55
+ 'Settings -> Reader bookmarks lists every persisted bookmark; click jumps the reader.',
56
+ 'Audit log row click opens a detail modal with full JSON + copy button.',
57
+ ],
58
+ },
59
+ {
60
+ version: '0.2.0-alpha.59i',
61
+ date: '2026-06-01',
62
+ summary: 'Approval mid-stream + shell kill button',
63
+ bullets: [
64
+ 'Approval modal now appears mid-turn via SSE, not after the call.',
65
+ 'Shell pizarron tabs gain a stop button to kill the running process (SIGTERM -> SIGKILL).',
66
+ ],
67
+ },
68
+ {
69
+ version: '0.2.0-alpha.59h',
70
+ date: '2026-06-01',
71
+ summary: 'xAI + Mistral + Cohere runtime clients',
72
+ bullets: [
73
+ 'Brain provider catalog now covers 8/8 runtimes wired.',
74
+ 'BYOK keys for xAI / Mistral / Cohere can be set via yf keys set.',
75
+ ],
76
+ },
77
+ {
78
+ version: '0.2.0-alpha.59g',
79
+ date: '2026-05-31',
80
+ summary: 'Audit log viewer + DeepSeek client',
81
+ bullets: [
82
+ 'Settings -> Audit log shows the last 200 entries with kind + approval-mode filters.',
83
+ 'DeepSeek wired as a runtime brain provider.',
84
+ ],
85
+ },
86
+ {
87
+ version: '0.2.0-alpha.59f',
88
+ date: '2026-05-31',
89
+ summary: 'Shell live stream via SSE',
90
+ bullets: [
91
+ 'Shell.exec output streams progressively into the pizarron tab as it runs.',
92
+ ],
93
+ },
94
+ {
95
+ version: '0.2.0-alpha.59e',
96
+ date: '2026-05-31',
97
+ summary: 'SSE streaming + autonomous multi-step',
98
+ bullets: [
99
+ 'Chat turns now stream tool rounds via Server-Sent Events.',
100
+ 'Autonomous mode lifts the tool-rounds cap to 50 with loop detection.',
101
+ ],
102
+ },
103
+ {
104
+ version: '0.2.0-alpha.59d',
105
+ date: '2026-05-31',
106
+ summary: 'shell.exec verb + Danger Zone',
107
+ bullets: [
108
+ 'yujin.shell.exec runs commands with safe / destructive / elevation / network classification.',
109
+ 'Danger Zone toggle auto-approves everything for velocity (audit-logged as bypass).',
110
+ 'Audit log persists every gated action to ~/.yujin-forge/cache/audit_log.jsonl.',
111
+ ],
112
+ },
113
+ ];
114
+ function lastSeenPath() {
115
+ const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
116
+ const base = process.env.YF_CONFIG_DIR || path.join(home, '.yujin-forge');
117
+ return path.join(base, 'last_seen_version');
118
+ }
119
+ export async function readLastSeen() {
120
+ try {
121
+ const raw = await fs.readFile(lastSeenPath(), 'utf-8');
122
+ const trimmed = raw.trim();
123
+ return trimmed.length > 0 ? trimmed : null;
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ export async function writeLastSeen(version) {
130
+ const p = lastSeenPath();
131
+ await fs.mkdir(path.dirname(p), { recursive: true });
132
+ const tmp = p + '.tmp';
133
+ await fs.writeFile(tmp, version, 'utf-8');
134
+ await fs.rename(tmp, p);
135
+ }
136
+ /**
137
+ * Parse a semver-ish version into a comparable tuple.
138
+ * "0.2.0-alpha.59k" -> [0, 2, 0, "alpha", 59, "k"]
139
+ * Releases without prerelease ("1.0.0") sort AFTER any prerelease
140
+ * of the same base.
141
+ */
142
+ export function parseVersion(v) {
143
+ const m = /^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z]+)\.(\d+)([a-zA-Z]*))?$/.exec(v);
144
+ if (!m) {
145
+ return { base: [0, 0, 0], preLabel: null, preNum: 0, preTail: '' };
146
+ }
147
+ const base = [Number(m[1]), Number(m[2]), Number(m[3])];
148
+ if (!m[4])
149
+ return { base, preLabel: null, preNum: 0, preTail: '' };
150
+ return {
151
+ base,
152
+ preLabel: m[4],
153
+ preNum: Number(m[5]),
154
+ preTail: m[6] || '',
155
+ };
156
+ }
157
+ /** Returns negative when a < b, positive when a > b, 0 when equal. */
158
+ export function compareVersions(a, b) {
159
+ const pa = parseVersion(a);
160
+ const pb = parseVersion(b);
161
+ for (let i = 0; i < 3; i++) {
162
+ const ai = pa.base[i] ?? 0;
163
+ const bi = pb.base[i] ?? 0;
164
+ if (ai !== bi)
165
+ return ai - bi;
166
+ }
167
+ /* Release (no preLabel) > any prerelease of same base. */
168
+ if (pa.preLabel === null && pb.preLabel !== null)
169
+ return 1;
170
+ if (pa.preLabel !== null && pb.preLabel === null)
171
+ return -1;
172
+ if (pa.preLabel === null && pb.preLabel === null)
173
+ return 0;
174
+ /* Both have preLabel. Compare label alphabetically. */
175
+ const la = pa.preLabel ?? '';
176
+ const lb = pb.preLabel ?? '';
177
+ if (la !== lb)
178
+ return la < lb ? -1 : 1;
179
+ if (pa.preNum !== pb.preNum)
180
+ return pa.preNum - pb.preNum;
181
+ /* Both have same preLabel + preNum. Compare tail alphabetically. */
182
+ if (pa.preTail !== pb.preTail)
183
+ return pa.preTail < pb.preTail ? -1 : 1;
184
+ return 0;
185
+ }
186
+ /**
187
+ * Returns the cumulative list of WhatsNewEntry that the user has
188
+ * not seen yet. Entries strictly greater than last_seen and
189
+ * <= current_version. When last_seen is null, returns the latest
190
+ * entry only (avoid wall-of-text on a fresh install).
191
+ */
192
+ export async function computeWhatsNew(currentVersion) {
193
+ const lastSeen = await readLastSeen();
194
+ if (!lastSeen) {
195
+ /* Fresh install -- show only the latest entry (avoid scaring
196
+ * a first-time user with the full 9-entry backlog). */
197
+ const newest = CATALOG[0];
198
+ return {
199
+ current_version: currentVersion,
200
+ last_seen_version: null,
201
+ entries: newest ? [newest] : [],
202
+ };
203
+ }
204
+ if (compareVersions(lastSeen, currentVersion) >= 0) {
205
+ /* Already at or past current. Nothing to show. */
206
+ return { current_version: currentVersion, last_seen_version: lastSeen, entries: [] };
207
+ }
208
+ const entries = CATALOG.filter((e) => compareVersions(e.version, lastSeen) > 0 &&
209
+ compareVersions(e.version, currentVersion) <= 0);
210
+ return { current_version: currentVersion, last_seen_version: lastSeen, entries };
211
+ }
212
+ /** Test seam. */
213
+ export const _internal = { lastSeenPath };
214
+ //# sourceMappingURL=whats_new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whats_new.js","sourceRoot":"","sources":["../../src/core/whats_new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Deploy adapter abstraction.
3
+ *
4
+ * Forge supports multiple cloud targets. Each one is encapsulated
5
+ * as a DeployAdapter implementation. The tier-aware selector
6
+ * picks the right adapter for a project based on:
7
+ *
8
+ * - workflow.tier (Simple / Medium / Full)
9
+ * - workflow.clarification.nfr_quantitative.volume
10
+ * - workflow.clarification.nfr_quantitative.parallelism
11
+ * - workflow.clarification.nfr_structural.persistence
12
+ * - workflow.clarification.nfr_structural.workers
13
+ *
14
+ * Rules of thumb (codified in pickDeployAdapter):
15
+ * - Simple tier + no queue + no workers -> Cloudflare Pages/Workers
16
+ * - Medium tier OR has queue OR has workers -> Cloudflare Pages + R2 + Queues
17
+ * - Full tier OR persistent stateful workers OR custom infra -> AWS ECS Fargate
18
+ *
19
+ * The user can override via `yf operate deploy-guided --adapter <id>`.
20
+ *
21
+ * Adapter contract:
22
+ * - id: short slug ("cloudflare" | "aws" | "vercel" | ...).
23
+ * - description: one-liner for the picker UX.
24
+ * - tierFit(): which tiers this adapter is appropriate for.
25
+ * - readyToRun(): credentials check (e.g. wrangler logged in).
26
+ * - plan(input): dry-run -> { resources, estimated_cost_usd }.
27
+ * - apply(input): real deploy -> { url, logs, deployed_at }.
28
+ *
29
+ * For alpha.19 only `cloudflare` is wired end-to-end. `aws` keeps
30
+ * the existing imperative path; the adapter is a thin shell over
31
+ * it. `vercel` is a stub for future.
32
+ *
33
+ * ASCII-only.
34
+ */
35
+ import type { WorkflowState } from '../workflow/state.js';
36
+ export type DeployAdapterId = 'cloudflare' | 'aws' | 'vercel';
37
+ export type Tier = 'simple' | 'medium' | 'full';
38
+ export interface DeployPlan {
39
+ resources: string[];
40
+ estimated_cost_usd: number;
41
+ estimated_minutes: number;
42
+ notes: string[];
43
+ }
44
+ export interface DeployResult {
45
+ url: string;
46
+ deployed_at: string;
47
+ build_seconds: number;
48
+ logs_tail: string[];
49
+ }
50
+ export interface DeployInput {
51
+ /** Absolute path to the build output (dist/ or .next/ or similar). */
52
+ buildDir: string;
53
+ /** Project slug (Cloudflare project name / AWS service name). */
54
+ projectSlug: string;
55
+ /** Optional env vars to expose. */
56
+ env?: Record<string, string>;
57
+ /** Tenant / user handle for multi-tenant adapters. */
58
+ userHandle?: string;
59
+ }
60
+ export interface DeployAdapter {
61
+ id: DeployAdapterId;
62
+ description: string;
63
+ tierFit(): Tier[];
64
+ /** Cheap check -- does the local env have what this adapter
65
+ * needs (credentials, CLI tools)? Returns ok + reason. */
66
+ readyToRun(): Promise<{
67
+ ok: boolean;
68
+ reason?: string;
69
+ }>;
70
+ /** Dry-run plan: lists resources + cost estimate. No network
71
+ * writes beyond auth pings. */
72
+ plan(input: DeployInput): Promise<DeployPlan>;
73
+ /** Real deploy. Should be idempotent: re-running with the same
74
+ * input updates an existing deployment rather than creating
75
+ * a duplicate. */
76
+ apply(input: DeployInput): Promise<DeployResult>;
77
+ }
78
+ export interface AdapterSelection {
79
+ adapter: DeployAdapterId;
80
+ reason: string;
81
+ alternatives: DeployAdapterId[];
82
+ }
83
+ /**
84
+ * Pick the right adapter for a workflow snapshot.
85
+ *
86
+ * Conservative heuristic: bias toward Cloudflare for simple +
87
+ * medium projects (cheap + fast + edge), AWS for heavy or
88
+ * stateful workloads. Adapters that fail readyToRun() are not
89
+ * filtered out here -- the caller is expected to surface the
90
+ * "not ready" message after the pick + offer a fallback.
91
+ */
92
+ export declare function pickDeployAdapter(wf: Partial<WorkflowState>, override?: DeployAdapterId): AdapterSelection;
93
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/deploy/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9D,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAY,MAAM,EAAE,CAAC;IAC9B,kBAAkB,EAAG,MAAM,CAAC;IAC5B,iBAAiB,EAAI,MAAM,CAAC;IAC5B,KAAK,EAAgB,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAY,MAAM,CAAC;IACtB,WAAW,EAAI,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAM,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,QAAQ,EAAK,MAAM,CAAC;IACpB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,GAAG,CAAC,EAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAW,eAAe,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,IAAM,IAAI,EAAE,CAAC;IACpB;+DAC2D;IAC3D,UAAU,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD;oCACgC;IAChC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C;;uBAEmB;IACnB,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAClD;AAMD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAK,eAAe,CAAC;IAC5B,MAAM,EAAM,MAAM,CAAC;IACnB,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAcD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,EAC1B,QAAQ,CAAC,EAAE,eAAe,GACzB,gBAAgB,CAmClB"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pick the right adapter for a workflow snapshot.
3
+ *
4
+ * Conservative heuristic: bias toward Cloudflare for simple +
5
+ * medium projects (cheap + fast + edge), AWS for heavy or
6
+ * stateful workloads. Adapters that fail readyToRun() are not
7
+ * filtered out here -- the caller is expected to surface the
8
+ * "not ready" message after the pick + offer a fallback.
9
+ */
10
+ export function pickDeployAdapter(wf, override) {
11
+ if (override) {
12
+ return {
13
+ adapter: override,
14
+ reason: 'explicit override',
15
+ alternatives: ['cloudflare', 'aws', 'vercel']
16
+ .filter((a) => a !== override),
17
+ };
18
+ }
19
+ const tier = (wf.tier ?? 'simple');
20
+ const nfrS = (wf.clarification?.nfr_structural ?? {});
21
+ const nfrQ = (wf.clarification?.nfr_quantitative ?? {});
22
+ /* Hard signals that push to AWS. */
23
+ const persistentWorkers = nfrS.workers === true
24
+ || (typeof nfrS.persistence === 'string' && /postgres|mysql|mssql/.test(nfrS.persistence));
25
+ const heavyParallelism = typeof nfrQ.parallelism === 'string'
26
+ && /high|heavy|many/i.test(nfrQ.parallelism);
27
+ if (tier === 'full' || persistentWorkers || heavyParallelism) {
28
+ return {
29
+ adapter: 'aws',
30
+ reason: 'tier=' + tier + (persistentWorkers ? '; persistent workers' : '')
31
+ + (heavyParallelism ? '; heavy parallelism' : ''),
32
+ alternatives: ['cloudflare', 'vercel'],
33
+ };
34
+ }
35
+ /* Simple + medium default to Cloudflare. */
36
+ return {
37
+ adapter: 'cloudflare',
38
+ reason: 'tier=' + tier + ' (cheap edge + fast deploys)',
39
+ alternatives: ['vercel', 'aws'],
40
+ };
41
+ }
42
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/deploy/adapter.ts"],"names":[],"mappings":"AAuGA;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAA0B,EAC1B,QAA0B;IAE1B,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAG,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAuB;iBACjE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;SACjC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAS,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,IAAI,EAAE,CAAsB,CAAC;IAC3E,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,IAAI,EAAE,CAAwB,CAAC;IAE/E,oCAAoC;IACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI;WAC1C,CAAC,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7F,MAAM,gBAAgB,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;WACxD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,IAAI,KAAK,MAAM,IAAI,iBAAiB,IAAI,gBAAgB,EAAE,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;kBACtE,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,YAAY,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;SACvC,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,8BAA8B;QACvD,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;KAChC,CAAC;AACJ,CAAC"}