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

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 +5815 -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
package/README.md CHANGED
@@ -7,7 +7,22 @@ loop: read design specs by voice, generate code scaffolds from
7
7
  those specs, decorate vanilla HTML into NAC-3, drive existing apps
8
8
  via voice + chat.
9
9
 
10
- > Status: **v0.2.0-alpha (HITO 0 + HITO 1 closed)**, 2026-05-23.
10
+ > Status: **v0.2.0-alpha.59z.92** (2026-06-04). **100% manifest
11
+ > verb coverage**: every one of the 72 declared NAC-3 verbs has
12
+ > at least one fake-scripted scenario asserting it gets invoked
13
+ > (or refuses to) in the right intent. Brain matrix QA harness
14
+ > at 168 scenarios (+68 since z.61); 22 new verbs in the arc
15
+ > (8 misc + git.status/branch-list + office.excel.append-sheet
16
+ > + 12 others); 8 helper CLIs under `yf qa` (run, scenarios
17
+ > list/show/validate/stats, verbs coverage/sample,
18
+ > brain-matrix-compare); 5 ops docs (SECURITY, CONTRIBUTING,
19
+ > TESTING_GUIDE, DEPLOYMENT, CI_PIPELINE); 2 new doctrines
20
+ > (verb-composition, explain-results); 2 new invariant kinds
21
+ > (min_text_length, verb_invoked_in_order) + structural
22
+ > fixture validator + lefthook pre-commit gate. F101 MCP
23
+ > bridge backend complete (slice 3 panel UI pending); F106
24
+ > office.* + F107 a11y.* verbs shipped; HITO 5 agent
25
+ > orchestrator design draft awaiting Pablo clarification.
11
26
  >
12
27
  > **HITO 0 -- credentials vault.** AES-256-GCM at-rest encryption
13
28
  > with machine fingerprint binding, atomic writes (0o600), one-shot
@@ -0,0 +1,88 @@
1
+ /**
2
+ * F107 accessibility helpers -- screen-reader + voice-first hooks
3
+ * for adopter apps generated by Forge.
4
+ *
5
+ * These are pure helpers (no DOM dependency at this layer) that the
6
+ * panel + mobile adapters consume. They translate semantic intents
7
+ * ("announce this", "focus that element", "describe this element")
8
+ * into payloads the rendering layer can route to:
9
+ * - ARIA live regions for screen readers
10
+ * - Voice TTS for the Forge voice loop
11
+ * - Mobile screen-reader bridges (VoiceOver / TalkBack)
12
+ *
13
+ * The verbs operate on NAC-3 element slugs (declared via
14
+ * data-nac-* attrs in the adopter app) so the brain never has to
15
+ * know about raw DOM identifiers.
16
+ *
17
+ * ASCII-only.
18
+ */
19
+ export type Politeness = 'polite' | 'assertive';
20
+ export interface AnnounceRequest {
21
+ /** Text to announce. */
22
+ text: string;
23
+ /** ARIA live-region politeness. Default 'polite'. */
24
+ politeness?: Politeness;
25
+ /** When set, also speak via TTS (voice loop). Default false. */
26
+ speak?: boolean;
27
+ /** Locale hint (BCP47). Default inherits the user's voice config. */
28
+ locale?: string;
29
+ }
30
+ export interface AnnouncePayload {
31
+ type: 'aria-live';
32
+ text: string;
33
+ politeness: Politeness;
34
+ /** Set when the runtime should also speak the text. */
35
+ speak: boolean;
36
+ locale: string | null;
37
+ }
38
+ export interface FocusRequest {
39
+ /** NAC-3 element slug (the value of data-nac-slug). */
40
+ slug: string;
41
+ /** When set, scrolls the element into view. Default true. */
42
+ scroll?: boolean;
43
+ /** Announce the focus change via screen reader. Default true. */
44
+ announce?: boolean;
45
+ }
46
+ export interface FocusPayload {
47
+ type: 'focus';
48
+ slug: string;
49
+ scroll: boolean;
50
+ announce: boolean;
51
+ }
52
+ export interface LabelRequest {
53
+ /** NAC-3 element slug. */
54
+ slug: string;
55
+ /** Human-readable description (will become aria-label /
56
+ * aria-describedby depending on field). */
57
+ description: string;
58
+ /** Optional shortcut hint (e.g. 'Ctrl+S'). */
59
+ shortcut?: string;
60
+ /** Optional role hint (e.g. 'button', 'textbox'). */
61
+ role?: string;
62
+ }
63
+ export interface LabelPayload {
64
+ type: 'label';
65
+ slug: string;
66
+ /** Sanitised description -- max 500 chars, single line. */
67
+ description: string;
68
+ shortcut: string | null;
69
+ role: string | null;
70
+ }
71
+ export declare function buildAnnouncePayload(req: AnnounceRequest): AnnouncePayload | {
72
+ ok: false;
73
+ error: string;
74
+ };
75
+ export declare function buildFocusPayload(req: FocusRequest): FocusPayload | {
76
+ ok: false;
77
+ error: string;
78
+ };
79
+ export declare function buildLabelPayload(req: LabelRequest): LabelPayload | {
80
+ ok: false;
81
+ error: string;
82
+ };
83
+ /** NAC-3 data-nac-* attr -> ARIA attribute mapping. Used by the
84
+ * panel renderer + mobile adapter to project the semantic layer
85
+ * onto the native a11y tree. */
86
+ export declare const NAC3_TO_ARIA: Record<string, string>;
87
+ export declare function mapNac3ToAria(attrs: Record<string, string>): Record<string, string>;
88
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/a11y/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,uDAAuD;IACvD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb;gDAC4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAOD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiBzG;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAchG;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBhG;AAED;;iCAEiC;AACjC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU/C,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOnF"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * F107 accessibility helpers -- screen-reader + voice-first hooks
3
+ * for adopter apps generated by Forge.
4
+ *
5
+ * These are pure helpers (no DOM dependency at this layer) that the
6
+ * panel + mobile adapters consume. They translate semantic intents
7
+ * ("announce this", "focus that element", "describe this element")
8
+ * into payloads the rendering layer can route to:
9
+ * - ARIA live regions for screen readers
10
+ * - Voice TTS for the Forge voice loop
11
+ * - Mobile screen-reader bridges (VoiceOver / TalkBack)
12
+ *
13
+ * The verbs operate on NAC-3 element slugs (declared via
14
+ * data-nac-* attrs in the adopter app) so the brain never has to
15
+ * know about raw DOM identifiers.
16
+ *
17
+ * ASCII-only.
18
+ */
19
+ const MAX_TEXT = 1000;
20
+ const MAX_DESCRIPTION = 500;
21
+ const MAX_SLUG = 120;
22
+ const SLUG_RE = /^[a-z0-9][a-z0-9._-]*$/i;
23
+ export function buildAnnouncePayload(req) {
24
+ if (typeof req.text !== 'string') {
25
+ return { ok: false, error: 'text must be a string' };
26
+ }
27
+ const t = req.text.trim();
28
+ if (!t)
29
+ return { ok: false, error: 'text is empty' };
30
+ if (t.length > MAX_TEXT) {
31
+ return { ok: false, error: 'text exceeds ' + MAX_TEXT + ' chars' };
32
+ }
33
+ const politeness = req.politeness === 'assertive' ? 'assertive' : 'polite';
34
+ return {
35
+ type: 'aria-live',
36
+ text: t,
37
+ politeness,
38
+ speak: req.speak === true,
39
+ locale: typeof req.locale === 'string' && req.locale ? req.locale : null,
40
+ };
41
+ }
42
+ export function buildFocusPayload(req) {
43
+ if (typeof req.slug !== 'string') {
44
+ return { ok: false, error: 'slug must be a string' };
45
+ }
46
+ const s = req.slug.trim();
47
+ if (!s)
48
+ return { ok: false, error: 'slug is empty' };
49
+ if (s.length > MAX_SLUG)
50
+ return { ok: false, error: 'slug too long' };
51
+ if (!SLUG_RE.test(s))
52
+ return { ok: false, error: 'slug must match [a-z0-9._-]' };
53
+ return {
54
+ type: 'focus',
55
+ slug: s,
56
+ scroll: req.scroll !== false,
57
+ announce: req.announce !== false,
58
+ };
59
+ }
60
+ export function buildLabelPayload(req) {
61
+ if (typeof req.slug !== 'string')
62
+ return { ok: false, error: 'slug must be a string' };
63
+ const s = req.slug.trim();
64
+ if (!s)
65
+ return { ok: false, error: 'slug is empty' };
66
+ if (s.length > MAX_SLUG)
67
+ return { ok: false, error: 'slug too long' };
68
+ if (!SLUG_RE.test(s))
69
+ return { ok: false, error: 'slug must match [a-z0-9._-]' };
70
+ if (typeof req.description !== 'string')
71
+ return { ok: false, error: 'description must be a string' };
72
+ const d = req.description.replace(/\s+/g, ' ').trim();
73
+ if (!d)
74
+ return { ok: false, error: 'description is empty' };
75
+ if (d.length > MAX_DESCRIPTION) {
76
+ return { ok: false, error: 'description exceeds ' + MAX_DESCRIPTION + ' chars' };
77
+ }
78
+ return {
79
+ type: 'label',
80
+ slug: s,
81
+ description: d,
82
+ shortcut: typeof req.shortcut === 'string' && req.shortcut ? req.shortcut : null,
83
+ role: typeof req.role === 'string' && req.role ? req.role : null,
84
+ };
85
+ }
86
+ /** NAC-3 data-nac-* attr -> ARIA attribute mapping. Used by the
87
+ * panel renderer + mobile adapter to project the semantic layer
88
+ * onto the native a11y tree. */
89
+ export const NAC3_TO_ARIA = {
90
+ 'data-nac-slug': 'data-yujin-slug',
91
+ 'data-nac-role': 'role',
92
+ 'data-nac-label': 'aria-label',
93
+ 'data-nac-desc': 'aria-describedby',
94
+ 'data-nac-busy': 'aria-busy',
95
+ 'data-nac-pressed': 'aria-pressed',
96
+ 'data-nac-checked': 'aria-checked',
97
+ 'data-nac-hidden': 'aria-hidden',
98
+ 'data-nac-live': 'aria-live',
99
+ };
100
+ export function mapNac3ToAria(attrs) {
101
+ const out = {};
102
+ for (const [k, v] of Object.entries(attrs)) {
103
+ const target = NAC3_TO_ARIA[k];
104
+ if (target)
105
+ out[target] = v;
106
+ }
107
+ return out;
108
+ }
109
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/a11y/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type AgentConfigKey } from './config_schema.js';
2
+ export interface ResolveOptions {
3
+ /** Override the user config path (test isolation). */
4
+ userConfigPath?: string;
5
+ /** Disable env layer (test isolation). */
6
+ noEnv?: boolean;
7
+ }
8
+ export declare function invalidateAgentConfigCache(): void;
9
+ export declare function getAgentConfig<T extends number | string | boolean>(key: AgentConfigKey, opts?: ResolveOptions): Promise<T>;
10
+ export declare function snapshotAgentConfig(opts?: ResolveOptions): Promise<Array<{
11
+ key: AgentConfigKey;
12
+ value: unknown;
13
+ source: 'env' | 'user' | 'default';
14
+ description: string;
15
+ }>>;
16
+ //# sourceMappingURL=config_resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_resolver.d.ts","sourceRoot":"","sources":["../../src/agents/config_resolver.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAuCD,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AAED,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EACtE,GAAG,EAAE,cAAc,EACnB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,CAAC,CAAC,CA2BZ;AAKD,wBAAsB,mBAAmB,CACvC,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,KAAK,CAAC;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgClH"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Agent config resolver. Walks the override chain:
3
+ * 1. process.env[YF_AGENT_<UPPER_SNAKE>] (highest precedence, dev)
4
+ * 2. project-level override (left out of slice 1 -- TBD when the
5
+ * project store wires in; falls back to user level for now)
6
+ * 3. user-level ~/.yujin-forge/agents/config.json
7
+ * 4. published default (config_schema.ts)
8
+ *
9
+ * Returns the validated, type-coerced value. Invalid overrides
10
+ * log a single warning + fall through to the next layer.
11
+ */
12
+ import { promises as fs } from 'node:fs';
13
+ import os from 'node:os';
14
+ import path from 'node:path';
15
+ import { AGENT_CONFIG_SCHEMA, validateAgentConfigValue, getAgentConfigDefault, getAgentConfigDescriptor, } from './config_schema.js';
16
+ let cachedUserConfig = null;
17
+ let cachedAt = 0;
18
+ const USER_CONFIG_TTL_MS = 5_000; /* re-read after 5s so edits show up without restart */
19
+ function envKeyFor(key) {
20
+ /* `agent.bridge.tokens_per_pair_hourly` ->
21
+ * `YF_AGENT_BRIDGE_TOKENS_PER_PAIR_HOURLY` */
22
+ return 'YF_' + key.replace(/[.\-]/g, '_').toUpperCase();
23
+ }
24
+ function defaultUserConfigPath() {
25
+ return path.join(os.homedir(), '.yujin-forge', 'agents', 'config.json');
26
+ }
27
+ async function loadUserConfig(p) {
28
+ const now = Date.now();
29
+ if (cachedUserConfig !== null && (now - cachedAt) < USER_CONFIG_TTL_MS) {
30
+ return cachedUserConfig;
31
+ }
32
+ try {
33
+ const raw = await fs.readFile(p, 'utf-8');
34
+ const obj = JSON.parse(raw);
35
+ if (obj && typeof obj === 'object' && !Array.isArray(obj)) {
36
+ cachedUserConfig = obj;
37
+ cachedAt = now;
38
+ return cachedUserConfig;
39
+ }
40
+ /* JSON parsed but is array / primitive -- treat as empty. */
41
+ cachedUserConfig = {};
42
+ cachedAt = now;
43
+ return cachedUserConfig;
44
+ }
45
+ catch {
46
+ /* File missing or unreadable -- empty override is the safe default. */
47
+ cachedUserConfig = {};
48
+ cachedAt = now;
49
+ return cachedUserConfig;
50
+ }
51
+ }
52
+ /* Reset the cache. Used by `yf limits set agent.<key>` after a
53
+ * successful write so subsequent reads see the new value. */
54
+ export function invalidateAgentConfigCache() {
55
+ cachedUserConfig = null;
56
+ cachedAt = 0;
57
+ }
58
+ export async function getAgentConfig(key, opts = {}) {
59
+ /* Layer 1 -- env */
60
+ if (!opts.noEnv) {
61
+ const envValue = process.env[envKeyFor(key)];
62
+ if (envValue !== undefined) {
63
+ try {
64
+ return validateAgentConfigValue(key, envValue);
65
+ }
66
+ catch {
67
+ /* fall through; env override invalid */
68
+ console.warn('[agent-config] env override for ' + key + ' invalid, falling through');
69
+ }
70
+ }
71
+ }
72
+ /* Layer 2 -- project override (TBD in a later slice when the
73
+ * project store exposes a `limits_config` row. Skipping for
74
+ * slice 1.) */
75
+ /* Layer 3 -- user config */
76
+ const userConfig = await loadUserConfig(opts.userConfigPath ?? defaultUserConfigPath());
77
+ if (userConfig[key] !== undefined) {
78
+ try {
79
+ return validateAgentConfigValue(key, userConfig[key]);
80
+ }
81
+ catch {
82
+ console.warn('[agent-config] user override for ' + key + ' invalid, falling through');
83
+ }
84
+ }
85
+ /* Layer 4 -- published default */
86
+ return getAgentConfigDefault(key);
87
+ }
88
+ /* Snapshot every key as the resolver would currently see them.
89
+ * Used by `yf agent doctor` + the panel settings tab to show the
90
+ * effective config without surprise. */
91
+ export async function snapshotAgentConfig(opts = {}) {
92
+ const userConfig = await loadUserConfig(opts.userConfigPath ?? defaultUserConfigPath());
93
+ const out = [];
94
+ for (const d of AGENT_CONFIG_SCHEMA) {
95
+ const envValue = opts.noEnv ? undefined : process.env[envKeyFor(d.key)];
96
+ let value;
97
+ let source;
98
+ if (envValue !== undefined) {
99
+ try {
100
+ value = validateAgentConfigValue(d.key, envValue);
101
+ source = 'env';
102
+ }
103
+ catch {
104
+ value = userConfig[d.key] !== undefined
105
+ ? (() => { try {
106
+ return validateAgentConfigValue(d.key, userConfig[d.key]);
107
+ }
108
+ catch {
109
+ return d.default;
110
+ } })()
111
+ : d.default;
112
+ source = userConfig[d.key] !== undefined ? 'user' : 'default';
113
+ }
114
+ }
115
+ else if (userConfig[d.key] !== undefined) {
116
+ try {
117
+ value = validateAgentConfigValue(d.key, userConfig[d.key]);
118
+ source = 'user';
119
+ }
120
+ catch {
121
+ value = d.default;
122
+ source = 'default';
123
+ }
124
+ }
125
+ else {
126
+ value = d.default;
127
+ source = 'default';
128
+ }
129
+ out.push({ key: d.key, value, source, description: getAgentConfigDescriptor(d.key).description });
130
+ }
131
+ return out;
132
+ }
133
+ //# sourceMappingURL=config_resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_resolver.js","sourceRoot":"","sources":["../../src/agents/config_resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Agent orchestrator config schema (HITO 5 slice 1).
3
+ *
4
+ * Source of truth for every threshold / cap / default that the
5
+ * agent runtime + bridge use. Per Pablo's locked decision:
6
+ * NOTHING in src/agents/* may hardcode a number. Every dial
7
+ * lands here, with a published default + a description that the
8
+ * config-file generator uses as the comment.
9
+ *
10
+ * Read order at runtime:
11
+ * 1. process.env override (`YF_AGENT_<UPPER_SNAKE_CASE>`)
12
+ * 2. project-level limits_config row (`agent.<key>` namespace)
13
+ * 3. user-level `~/.yujin-forge/agents/config.json`
14
+ * 4. published default (this file)
15
+ *
16
+ * The published default is the LAST fallback, never inlined into
17
+ * a handler. Handlers call `getAgentConfig(key)` which walks the
18
+ * chain. Invalid types log a warning + fall back to default.
19
+ *
20
+ * Changes to defaults ship as a config-file edit, not a code
21
+ * change in src/agents/*.ts.
22
+ */
23
+ export type AgentConfigKey = 'agent.bridge.tokens_per_pair_hourly' | 'agent.bridge.round_trips_window_seconds' | 'agent.bridge.round_trips_max' | 'agent.bridge.message_ttl_seconds' | 'agent.bridge.inbox_drain_batch' | 'agent.runtime.max_consecutive_rejected_approvals' | 'agent.runtime.run_timeout_seconds' | 'agent.cron.missed_runs_warning_threshold' | 'agent.audit.retention_days' | 'agent.deletion.grace_period_days' | 'agent.web_search.provider' | 'agent.web_search.daily_query_cap';
24
+ export type AgentConfigType = 'number' | 'string' | 'boolean';
25
+ export interface AgentConfigDescriptor {
26
+ key: AgentConfigKey;
27
+ type: AgentConfigType;
28
+ default: number | string | boolean;
29
+ description: string;
30
+ /** Optional enum -- for string keys that must be one of N values. */
31
+ enum?: readonly string[];
32
+ /** Optional bounds for number keys. */
33
+ min?: number;
34
+ max?: number;
35
+ }
36
+ export declare const AGENT_CONFIG_SCHEMA: readonly AgentConfigDescriptor[];
37
+ export declare function getAgentConfigDescriptor(key: AgentConfigKey): AgentConfigDescriptor;
38
+ export declare function getAgentConfigDefault(key: AgentConfigKey): number | string | boolean;
39
+ export declare function validateAgentConfigValue(key: AgentConfigKey, raw: unknown): number | string | boolean;
40
+ export declare function renderDefaultConfigJson(): string;
41
+ export declare function renderConfigDocsMarkdown(): string;
42
+ //# sourceMappingURL=config_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_schema.d.ts","sourceRoot":"","sources":["../../src/agents/config_schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,cAAc,GAEtB,qCAAqC,GACrC,yCAAyC,GACzC,8BAA8B,GAC9B,kCAAkC,GAClC,gCAAgC,GAEhC,kDAAkD,GAClD,mCAAmC,GAEnC,0CAA0C,GAE1C,4BAA4B,GAC5B,kCAAkC,GAElC,2BAA2B,GAC3B,kCAAkC,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAU,cAAc,CAAC;IAC5B,IAAI,EAAS,eAAe,CAAC;IAC7B,OAAO,EAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,IAAI,CAAC,EAAQ,SAAS,MAAM,EAAE,CAAC;IAC/B,uCAAuC;IACvC,GAAG,CAAC,EAAS,MAAM,CAAC;IACpB,GAAG,CAAC,EAAS,MAAM,CAAC;CACrB;AAMD,eAAO,MAAM,mBAAmB,EAAE,SAAS,qBAAqB,EAgGtD,CAAC;AAWX,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,cAAc,GAAG,qBAAqB,CAMnF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAEpF;AAKD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,OAAO,GACX,MAAM,GAAG,MAAM,GAAG,OAAO,CA6B3B;AAMD,wBAAgB,uBAAuB,IAAI,MAAM,CAMhD;AAKD,wBAAgB,wBAAwB,IAAI,MAAM,CAYjD"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Agent orchestrator config schema (HITO 5 slice 1).
3
+ *
4
+ * Source of truth for every threshold / cap / default that the
5
+ * agent runtime + bridge use. Per Pablo's locked decision:
6
+ * NOTHING in src/agents/* may hardcode a number. Every dial
7
+ * lands here, with a published default + a description that the
8
+ * config-file generator uses as the comment.
9
+ *
10
+ * Read order at runtime:
11
+ * 1. process.env override (`YF_AGENT_<UPPER_SNAKE_CASE>`)
12
+ * 2. project-level limits_config row (`agent.<key>` namespace)
13
+ * 3. user-level `~/.yujin-forge/agents/config.json`
14
+ * 4. published default (this file)
15
+ *
16
+ * The published default is the LAST fallback, never inlined into
17
+ * a handler. Handlers call `getAgentConfig(key)` which walks the
18
+ * chain. Invalid types log a warning + fall back to default.
19
+ *
20
+ * Changes to defaults ship as a config-file edit, not a code
21
+ * change in src/agents/*.ts.
22
+ */
23
+ /* The canonical schema. The config-file generator + the runtime
24
+ * validator + the `yf limits` CLI all read from this list. Order
25
+ * matters for the generated config file (it's the section order
26
+ * users see). */
27
+ export const AGENT_CONFIG_SCHEMA = [
28
+ {
29
+ key: 'agent.bridge.tokens_per_pair_hourly',
30
+ type: 'number',
31
+ default: 100_000,
32
+ description: 'Token cap per (agent_a, agent_b) pair per rolling 1-hour window. When exhausted, both ends receive bridge_token_cap_reached + the pair freezes until the window resets.',
33
+ min: 1_000,
34
+ max: 10_000_000,
35
+ },
36
+ {
37
+ key: 'agent.bridge.round_trips_window_seconds',
38
+ type: 'number',
39
+ default: 60,
40
+ description: 'Sliding window in seconds for the round-trip loop detector. Round trips inside this window are counted; outside, ignored.',
41
+ min: 10,
42
+ max: 3600,
43
+ },
44
+ {
45
+ key: 'agent.bridge.round_trips_max',
46
+ type: 'number',
47
+ default: 10,
48
+ description: 'Round trips between an (a,b) pair inside the window that trigger auto-revoke. Pair is closed, status=auto_revoked, manual re-enable required.',
49
+ min: 2,
50
+ max: 1000,
51
+ },
52
+ {
53
+ key: 'agent.bridge.message_ttl_seconds',
54
+ type: 'number',
55
+ default: 86_400,
56
+ description: 'Inbox message expiry. Undelivered messages older than this are marked expired + skipped on next drain.',
57
+ min: 60,
58
+ max: 2_592_000, /* 30 days */
59
+ },
60
+ {
61
+ key: 'agent.bridge.inbox_drain_batch',
62
+ type: 'number',
63
+ default: 20,
64
+ description: 'Max messages an agent drains per wake. Prevents a single agent from blocking the others by processing a huge inbox.',
65
+ min: 1,
66
+ max: 1000,
67
+ },
68
+ {
69
+ key: 'agent.runtime.max_consecutive_rejected_approvals',
70
+ type: 'number',
71
+ default: 3,
72
+ description: 'Consecutive rejected approvals that kill an agent run. Resets to 0 on every accepted approval.',
73
+ min: 1,
74
+ max: 100,
75
+ },
76
+ {
77
+ key: 'agent.runtime.run_timeout_seconds',
78
+ type: 'number',
79
+ default: 1800, /* 30 min */
80
+ description: 'Hard cap per agent run. Run is force-stopped, status=timeout, partial results preserved.',
81
+ min: 10,
82
+ max: 86_400,
83
+ },
84
+ {
85
+ key: 'agent.cron.missed_runs_warning_threshold',
86
+ type: 'number',
87
+ default: 3,
88
+ description: 'How many missed cron ticks before the panel warns the user. Local-only agents only fire while the panel is open; this catches "I closed the laptop for a week".',
89
+ min: 1,
90
+ max: 100,
91
+ },
92
+ {
93
+ key: 'agent.audit.retention_days',
94
+ type: 'number',
95
+ default: 90,
96
+ description: 'How long agent runs + bridge messages stay in audit_log. Matches the global audit-log default.',
97
+ min: 1,
98
+ max: 3650,
99
+ },
100
+ {
101
+ key: 'agent.deletion.grace_period_days',
102
+ type: 'number',
103
+ default: 30,
104
+ description: 'When an agent is deleted, runs move to the deleted/ partition for this many days before purge. Lets the user un-delete.',
105
+ min: 0,
106
+ max: 3650,
107
+ },
108
+ {
109
+ key: 'agent.web_search.provider',
110
+ type: 'string',
111
+ default: 'brave',
112
+ description: 'Web search provider for the default agent:web-search delegate (managed-only). User-created BYOK web-search agents pick their own.',
113
+ enum: ['brave', 'tavily', 'google'],
114
+ },
115
+ {
116
+ key: 'agent.web_search.daily_query_cap',
117
+ type: 'number',
118
+ default: 100,
119
+ description: 'Daily query cap for the managed agent:web-search delegate using the central API key. Per-user. Resets at UTC midnight.',
120
+ min: 1,
121
+ max: 100_000,
122
+ },
123
+ ];
124
+ /* Map for O(1) lookup. */
125
+ const SCHEMA_BY_KEY = (() => {
126
+ const out = {};
127
+ for (const d of AGENT_CONFIG_SCHEMA) {
128
+ out[d.key] = d;
129
+ }
130
+ return out;
131
+ })();
132
+ export function getAgentConfigDescriptor(key) {
133
+ const d = SCHEMA_BY_KEY[key];
134
+ if (!d) {
135
+ throw new Error('Unknown agent config key: ' + String(key));
136
+ }
137
+ return d;
138
+ }
139
+ export function getAgentConfigDefault(key) {
140
+ return getAgentConfigDescriptor(key).default;
141
+ }
142
+ /* Validation -- used by both the runtime config loader + the
143
+ * `yf limits set agent.<key> <value>` CLI. Returns the coerced
144
+ * value on success, throws on failure. */
145
+ export function validateAgentConfigValue(key, raw) {
146
+ const d = getAgentConfigDescriptor(key);
147
+ switch (d.type) {
148
+ case 'number': {
149
+ const n = typeof raw === 'number' ? raw : Number(raw);
150
+ if (!Number.isFinite(n)) {
151
+ throw new Error('agent config ' + key + ' must be a number, got ' + typeof raw);
152
+ }
153
+ if (d.min !== undefined && n < d.min) {
154
+ throw new Error('agent config ' + key + ' below min (' + d.min + '): got ' + n);
155
+ }
156
+ if (d.max !== undefined && n > d.max) {
157
+ throw new Error('agent config ' + key + ' above max (' + d.max + '): got ' + n);
158
+ }
159
+ return n;
160
+ }
161
+ case 'string': {
162
+ const s = String(raw);
163
+ if (d.enum && !d.enum.includes(s)) {
164
+ throw new Error('agent config ' + key + ' must be one of [' + d.enum.join(', ') + '], got ' + JSON.stringify(s));
165
+ }
166
+ return s;
167
+ }
168
+ case 'boolean': {
169
+ if (raw === true || raw === 'true' || raw === 1 || raw === '1')
170
+ return true;
171
+ if (raw === false || raw === 'false' || raw === 0 || raw === '0')
172
+ return false;
173
+ throw new Error('agent config ' + key + ' must be a boolean, got ' + JSON.stringify(raw));
174
+ }
175
+ }
176
+ }
177
+ /* Generates the user-facing config file body (json with a leading
178
+ * comment block listing every key + description + default). The
179
+ * config file lives at `~/.yujin-forge/agents/config.json` and is
180
+ * created on first `yf agent install --defaults`. */
181
+ export function renderDefaultConfigJson() {
182
+ const obj = {};
183
+ for (const d of AGENT_CONFIG_SCHEMA) {
184
+ obj[d.key] = d.default;
185
+ }
186
+ return JSON.stringify(obj, null, 2);
187
+ }
188
+ /* Generates a markdown doc of every key + description + default
189
+ * for inclusion in docs/HITO_5_AGENT_ORCHESTRATOR_DESIGN.md or
190
+ * the user-facing settings panel. */
191
+ export function renderConfigDocsMarkdown() {
192
+ const rows = AGENT_CONFIG_SCHEMA.map((d) => {
193
+ const bounds = d.type === 'number'
194
+ ? ' (range: ' + (d.min ?? '-') + '..' + (d.max ?? '-') + ')'
195
+ : (d.enum ? ' (one of: ' + d.enum.join(', ') + ')' : '');
196
+ return '| `' + d.key + '` | ' + d.type + bounds + ' | ' + JSON.stringify(d.default) + ' | ' + d.description + ' |';
197
+ });
198
+ return [
199
+ '| Key | Type | Default | Description |',
200
+ '|---|---|---|---|',
201
+ ...rows,
202
+ ].join('\n');
203
+ }
204
+ //# sourceMappingURL=config_schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config_schema.js","sourceRoot":"","sources":["../../src/agents/config_schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAmCH;;;iBAGiB;AACjB,MAAM,CAAC,MAAM,mBAAmB,GAAqC;IACnE;QACE,GAAG,EAAU,qCAAqC;QAClD,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,OAAO;QACpB,WAAW,EAAE,yKAAyK;QACtL,GAAG,EAAU,KAAK;QAClB,GAAG,EAAU,UAAU;KACxB;IACD;QACE,GAAG,EAAU,yCAAyC;QACtD,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,EAAE;QACf,WAAW,EAAE,2HAA2H;QACxI,GAAG,EAAU,EAAE;QACf,GAAG,EAAU,IAAI;KAClB;IACD;QACE,GAAG,EAAU,8BAA8B;QAC3C,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,EAAE;QACf,WAAW,EAAE,+IAA+I;QAC5J,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,IAAI;KAClB;IACD;QACE,GAAG,EAAU,kCAAkC;QAC/C,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,MAAM;QACnB,WAAW,EAAE,wGAAwG;QACrH,GAAG,EAAU,EAAE;QACf,GAAG,EAAU,SAAS,EAAE,aAAa;KACtC;IACD;QACE,GAAG,EAAU,gCAAgC;QAC7C,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,EAAE;QACf,WAAW,EAAE,qHAAqH;QAClI,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,IAAI;KAClB;IACD;QACE,GAAG,EAAU,kDAAkD;QAC/D,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,CAAC;QACd,WAAW,EAAE,gGAAgG;QAC7G,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,GAAG;KACjB;IACD;QACE,GAAG,EAAU,mCAAmC;QAChD,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,IAAI,EAAE,YAAY;QAC/B,WAAW,EAAE,0FAA0F;QACvG,GAAG,EAAU,EAAE;QACf,GAAG,EAAU,MAAM;KACpB;IACD;QACE,GAAG,EAAU,0CAA0C;QACvD,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,CAAC;QACd,WAAW,EAAE,iKAAiK;QAC9K,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,GAAG;KACjB;IACD;QACE,GAAG,EAAU,4BAA4B;QACzC,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,EAAE;QACf,WAAW,EAAE,gGAAgG;QAC7G,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,IAAI;KAClB;IACD;QACE,GAAG,EAAU,kCAAkC;QAC/C,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,EAAE;QACf,WAAW,EAAE,yHAAyH;QACtI,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,IAAI;KAClB;IACD;QACE,GAAG,EAAU,2BAA2B;QACxC,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,OAAO;QACpB,WAAW,EAAE,mIAAmI;QAChJ,IAAI,EAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU;KACpD;IACD;QACE,GAAG,EAAU,kCAAkC;QAC/C,IAAI,EAAS,QAAQ;QACrB,OAAO,EAAM,GAAG;QAChB,WAAW,EAAE,wHAAwH;QACrI,GAAG,EAAU,CAAC;QACd,GAAG,EAAU,OAAO;KACrB;CACO,CAAC;AAEX,0BAA0B;AAC1B,MAAM,aAAa,GAAkD,CAAC,GAAG,EAAE;IACzE,MAAM,GAAG,GAAG,EAAmD,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IAC1D,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAmB;IACvD,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AAC/C,CAAC;AAED;;0CAE0C;AAC1C,MAAM,UAAU,wBAAwB,CACtC,GAAmB,EACnB,GAAY;IAEZ,MAAM,CAAC,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,yBAAyB,GAAG,OAAO,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACnH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC5E,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;qDAGqD;AACrD,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAA8C,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;qCAEqC;AACrC,MAAM,UAAU,wBAAwB;IACtC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ;YAChC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG;YAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;IACrH,CAAC,CAAC,CAAC;IACH,OAAO;QACL,wCAAwC;QACxC,mBAAmB;QACnB,GAAG,IAAI;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}