agent-nuvira 3.3.13 → 3.3.14

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 (387) hide show
  1. package/README.md +67 -1
  2. package/dist/agents/agents/planner.d.ts.map +1 -1
  3. package/dist/agents/agents/planner.js +9 -0
  4. package/dist/agents/agents/planner.js.map +1 -1
  5. package/dist/agents/orchestrator.d.ts +31 -0
  6. package/dist/agents/orchestrator.d.ts.map +1 -1
  7. package/dist/agents/orchestrator.js +74 -126
  8. package/dist/agents/orchestrator.js.map +1 -1
  9. package/dist/cli/chat.d.ts +89 -0
  10. package/dist/cli/chat.d.ts.map +1 -1
  11. package/dist/cli/chat.js +765 -33
  12. package/dist/cli/chat.js.map +1 -1
  13. package/dist/cli/cli-program.d.ts.map +1 -1
  14. package/dist/cli/cli-program.js +12 -0
  15. package/dist/cli/cli-program.js.map +1 -1
  16. package/dist/cli/config.d.ts +12 -0
  17. package/dist/cli/config.d.ts.map +1 -1
  18. package/dist/cli/config.js +86 -0
  19. package/dist/cli/config.js.map +1 -1
  20. package/dist/cli/decisions.d.ts +28 -0
  21. package/dist/cli/decisions.d.ts.map +1 -0
  22. package/dist/cli/decisions.js +140 -0
  23. package/dist/cli/decisions.js.map +1 -0
  24. package/dist/cli/doctor.d.ts +6 -0
  25. package/dist/cli/doctor.d.ts.map +1 -1
  26. package/dist/cli/doctor.js +46 -0
  27. package/dist/cli/doctor.js.map +1 -1
  28. package/dist/cli/failover-runner.d.ts.map +1 -1
  29. package/dist/cli/failover-runner.js +19 -1
  30. package/dist/cli/failover-runner.js.map +1 -1
  31. package/dist/cli/feedback.d.ts.map +1 -1
  32. package/dist/cli/feedback.js +5 -1
  33. package/dist/cli/feedback.js.map +1 -1
  34. package/dist/cli/hooks.d.ts +30 -0
  35. package/dist/cli/hooks.d.ts.map +1 -0
  36. package/dist/cli/hooks.js +224 -0
  37. package/dist/cli/hooks.js.map +1 -0
  38. package/dist/cli/knowledge.d.ts +9 -1
  39. package/dist/cli/knowledge.d.ts.map +1 -1
  40. package/dist/cli/knowledge.js +93 -2
  41. package/dist/cli/knowledge.js.map +1 -1
  42. package/dist/cli/loop-executor.d.ts.map +1 -1
  43. package/dist/cli/loop-executor.js +47 -12
  44. package/dist/cli/loop-executor.js.map +1 -1
  45. package/dist/cli/model.d.ts +20 -0
  46. package/dist/cli/model.d.ts.map +1 -1
  47. package/dist/cli/model.js +294 -14
  48. package/dist/cli/model.js.map +1 -1
  49. package/dist/cli/rate.d.ts +78 -0
  50. package/dist/cli/rate.d.ts.map +1 -0
  51. package/dist/cli/rate.js +294 -0
  52. package/dist/cli/rate.js.map +1 -0
  53. package/dist/config/process-env.d.ts.map +1 -1
  54. package/dist/config/process-env.js +10 -0
  55. package/dist/config/process-env.js.map +1 -1
  56. package/dist/enterprise/vault.d.ts.map +1 -1
  57. package/dist/enterprise/vault.js +5 -21
  58. package/dist/enterprise/vault.js.map +1 -1
  59. package/dist/gateway/hook-contract.d.ts +33 -0
  60. package/dist/gateway/hook-contract.d.ts.map +1 -1
  61. package/dist/gateway/hook-contract.js +97 -0
  62. package/dist/gateway/hook-contract.js.map +1 -1
  63. package/dist/inference/gemini-adapter.d.ts.map +1 -1
  64. package/dist/inference/gemini-adapter.js +4 -0
  65. package/dist/inference/gemini-adapter.js.map +1 -1
  66. package/dist/inference/interface.d.ts +37 -0
  67. package/dist/inference/interface.d.ts.map +1 -1
  68. package/dist/inference/native-tools.d.ts +16 -1
  69. package/dist/inference/native-tools.d.ts.map +1 -1
  70. package/dist/inference/native-tools.js +34 -10
  71. package/dist/inference/native-tools.js.map +1 -1
  72. package/dist/inference/route-resolver.d.ts +30 -0
  73. package/dist/inference/route-resolver.d.ts.map +1 -1
  74. package/dist/inference/route-resolver.js +158 -1
  75. package/dist/inference/route-resolver.js.map +1 -1
  76. package/dist/inference/tools.d.ts +16 -1
  77. package/dist/inference/tools.d.ts.map +1 -1
  78. package/dist/inference/tools.js +51 -18
  79. package/dist/inference/tools.js.map +1 -1
  80. package/dist/learning/acceptance-model.d.ts +247 -0
  81. package/dist/learning/acceptance-model.d.ts.map +1 -0
  82. package/dist/learning/acceptance-model.js +708 -0
  83. package/dist/learning/acceptance-model.js.map +1 -0
  84. package/dist/learning/auto-router.d.ts +68 -24
  85. package/dist/learning/auto-router.d.ts.map +1 -1
  86. package/dist/learning/auto-router.js +301 -96
  87. package/dist/learning/auto-router.js.map +1 -1
  88. package/dist/learning/autonomy-policy.d.ts +12 -16
  89. package/dist/learning/autonomy-policy.d.ts.map +1 -1
  90. package/dist/learning/autonomy-policy.js +50 -48
  91. package/dist/learning/autonomy-policy.js.map +1 -1
  92. package/dist/learning/behavioural-labels.d.ts +86 -0
  93. package/dist/learning/behavioural-labels.d.ts.map +1 -0
  94. package/dist/learning/behavioural-labels.js +166 -0
  95. package/dist/learning/behavioural-labels.js.map +1 -0
  96. package/dist/learning/capability-evidence.d.ts +167 -0
  97. package/dist/learning/capability-evidence.d.ts.map +1 -0
  98. package/dist/learning/capability-evidence.js +210 -0
  99. package/dist/learning/capability-evidence.js.map +1 -0
  100. package/dist/learning/capability-readiness.d.ts +64 -0
  101. package/dist/learning/capability-readiness.d.ts.map +1 -0
  102. package/dist/learning/capability-readiness.js +74 -0
  103. package/dist/learning/capability-readiness.js.map +1 -0
  104. package/dist/learning/capability-types.d.ts +169 -0
  105. package/dist/learning/capability-types.d.ts.map +1 -0
  106. package/dist/learning/capability-types.js +20 -0
  107. package/dist/learning/capability-types.js.map +1 -0
  108. package/dist/learning/catalog-feed.d.ts +89 -0
  109. package/dist/learning/catalog-feed.d.ts.map +1 -0
  110. package/dist/learning/catalog-feed.js +211 -0
  111. package/dist/learning/catalog-feed.js.map +1 -0
  112. package/dist/learning/cli-intent-effects.d.ts +60 -0
  113. package/dist/learning/cli-intent-effects.d.ts.map +1 -0
  114. package/dist/learning/cli-intent-effects.js +153 -0
  115. package/dist/learning/cli-intent-effects.js.map +1 -0
  116. package/dist/learning/command-adaptation.d.ts +41 -0
  117. package/dist/learning/command-adaptation.d.ts.map +1 -0
  118. package/dist/learning/command-adaptation.js +122 -0
  119. package/dist/learning/command-adaptation.js.map +1 -0
  120. package/dist/learning/consent-picture.d.ts +42 -0
  121. package/dist/learning/consent-picture.d.ts.map +1 -0
  122. package/dist/learning/consent-picture.js +53 -0
  123. package/dist/learning/consent-picture.js.map +1 -0
  124. package/dist/learning/context-budget.d.ts +37 -6
  125. package/dist/learning/context-budget.d.ts.map +1 -1
  126. package/dist/learning/context-budget.js +38 -9
  127. package/dist/learning/context-budget.js.map +1 -1
  128. package/dist/learning/decision-log.d.ts +114 -0
  129. package/dist/learning/decision-log.d.ts.map +1 -0
  130. package/dist/learning/decision-log.js +296 -0
  131. package/dist/learning/decision-log.js.map +1 -0
  132. package/dist/learning/deliverable-class.d.ts.map +1 -1
  133. package/dist/learning/deliverable-class.js +19 -0
  134. package/dist/learning/deliverable-class.js.map +1 -1
  135. package/dist/learning/deliverable-corpus.d.ts +117 -0
  136. package/dist/learning/deliverable-corpus.d.ts.map +1 -0
  137. package/dist/learning/deliverable-corpus.js +176 -0
  138. package/dist/learning/deliverable-corpus.js.map +1 -0
  139. package/dist/learning/error-repair.d.ts +22 -1
  140. package/dist/learning/error-repair.d.ts.map +1 -1
  141. package/dist/learning/error-repair.js +37 -0
  142. package/dist/learning/error-repair.js.map +1 -1
  143. package/dist/learning/exhaustion-report.d.ts +136 -0
  144. package/dist/learning/exhaustion-report.d.ts.map +1 -0
  145. package/dist/learning/exhaustion-report.js +239 -0
  146. package/dist/learning/exhaustion-report.js.map +1 -0
  147. package/dist/learning/failure-bookkeeping.d.ts +16 -0
  148. package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
  149. package/dist/learning/failure-bookkeeping.js +51 -5
  150. package/dist/learning/failure-bookkeeping.js.map +1 -1
  151. package/dist/learning/gate-friction.d.ts +39 -0
  152. package/dist/learning/gate-friction.d.ts.map +1 -0
  153. package/dist/learning/gate-friction.js +91 -0
  154. package/dist/learning/gate-friction.js.map +1 -0
  155. package/dist/learning/harness-narration.d.ts +34 -0
  156. package/dist/learning/harness-narration.d.ts.map +1 -0
  157. package/dist/learning/harness-narration.js +58 -0
  158. package/dist/learning/harness-narration.js.map +1 -0
  159. package/dist/learning/hub-skill-catalog.d.ts.map +1 -1
  160. package/dist/learning/hub-skill-catalog.js +1 -2
  161. package/dist/learning/hub-skill-catalog.js.map +1 -1
  162. package/dist/learning/hybrid-router.d.ts +65 -0
  163. package/dist/learning/hybrid-router.d.ts.map +1 -1
  164. package/dist/learning/hybrid-router.js +186 -0
  165. package/dist/learning/hybrid-router.js.map +1 -1
  166. package/dist/learning/knowledge-base.d.ts +229 -3
  167. package/dist/learning/knowledge-base.d.ts.map +1 -1
  168. package/dist/learning/knowledge-base.js +593 -24
  169. package/dist/learning/knowledge-base.js.map +1 -1
  170. package/dist/learning/knowledge-eval.d.ts +171 -0
  171. package/dist/learning/knowledge-eval.d.ts.map +1 -0
  172. package/dist/learning/knowledge-eval.js +196 -0
  173. package/dist/learning/knowledge-eval.js.map +1 -0
  174. package/dist/learning/knowledge-turn.d.ts +92 -0
  175. package/dist/learning/knowledge-turn.d.ts.map +1 -0
  176. package/dist/learning/knowledge-turn.js +190 -0
  177. package/dist/learning/knowledge-turn.js.map +1 -0
  178. package/dist/learning/learned-commands.d.ts +64 -0
  179. package/dist/learning/learned-commands.d.ts.map +1 -0
  180. package/dist/learning/learned-commands.js +108 -0
  181. package/dist/learning/learned-commands.js.map +1 -0
  182. package/dist/learning/lexical-search.d.ts +50 -0
  183. package/dist/learning/lexical-search.d.ts.map +1 -0
  184. package/dist/learning/lexical-search.js +111 -0
  185. package/dist/learning/lexical-search.js.map +1 -0
  186. package/dist/learning/machine-facts.d.ts +71 -0
  187. package/dist/learning/machine-facts.d.ts.map +1 -0
  188. package/dist/learning/machine-facts.js +164 -0
  189. package/dist/learning/machine-facts.js.map +1 -0
  190. package/dist/learning/markdown-outline.d.ts +73 -0
  191. package/dist/learning/markdown-outline.d.ts.map +1 -0
  192. package/dist/learning/markdown-outline.js +136 -0
  193. package/dist/learning/markdown-outline.js.map +1 -0
  194. package/dist/learning/model-first-router.d.ts +33 -1
  195. package/dist/learning/model-first-router.d.ts.map +1 -1
  196. package/dist/learning/model-first-router.js +123 -9
  197. package/dist/learning/model-first-router.js.map +1 -1
  198. package/dist/learning/model-identity.d.ts +80 -0
  199. package/dist/learning/model-identity.d.ts.map +1 -0
  200. package/dist/learning/model-identity.js +115 -0
  201. package/dist/learning/model-identity.js.map +1 -0
  202. package/dist/learning/model-registry.d.ts +141 -2
  203. package/dist/learning/model-registry.d.ts.map +1 -1
  204. package/dist/learning/model-registry.js +324 -38
  205. package/dist/learning/model-registry.js.map +1 -1
  206. package/dist/learning/model-scoring.d.ts.map +1 -1
  207. package/dist/learning/model-scoring.js +8 -1
  208. package/dist/learning/model-scoring.js.map +1 -1
  209. package/dist/learning/model-selection.d.ts.map +1 -1
  210. package/dist/learning/model-selection.js +41 -0
  211. package/dist/learning/model-selection.js.map +1 -1
  212. package/dist/learning/outcome-observation.d.ts +49 -0
  213. package/dist/learning/outcome-observation.d.ts.map +1 -0
  214. package/dist/learning/outcome-observation.js +95 -0
  215. package/dist/learning/outcome-observation.js.map +1 -0
  216. package/dist/learning/pair-entitlement.d.ts +184 -0
  217. package/dist/learning/pair-entitlement.d.ts.map +1 -0
  218. package/dist/learning/pair-entitlement.js +214 -0
  219. package/dist/learning/pair-entitlement.js.map +1 -0
  220. package/dist/learning/provider-fallback.d.ts +23 -1
  221. package/dist/learning/provider-fallback.d.ts.map +1 -1
  222. package/dist/learning/provider-fallback.js +24 -0
  223. package/dist/learning/provider-fallback.js.map +1 -1
  224. package/dist/learning/reasoning-trace.d.ts +65 -1
  225. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  226. package/dist/learning/reasoning-trace.js +123 -1
  227. package/dist/learning/reasoning-trace.js.map +1 -1
  228. package/dist/learning/requirement-probe.d.ts +55 -0
  229. package/dist/learning/requirement-probe.d.ts.map +1 -0
  230. package/dist/learning/requirement-probe.js +77 -0
  231. package/dist/learning/requirement-probe.js.map +1 -0
  232. package/dist/learning/resilient-call.d.ts +20 -1
  233. package/dist/learning/resilient-call.d.ts.map +1 -1
  234. package/dist/learning/resilient-call.js +42 -4
  235. package/dist/learning/resilient-call.js.map +1 -1
  236. package/dist/learning/response-usability.d.ts +85 -0
  237. package/dist/learning/response-usability.d.ts.map +1 -0
  238. package/dist/learning/response-usability.js +135 -0
  239. package/dist/learning/response-usability.js.map +1 -0
  240. package/dist/learning/router-bandit.d.ts +132 -0
  241. package/dist/learning/router-bandit.d.ts.map +1 -1
  242. package/dist/learning/router-bandit.js +253 -0
  243. package/dist/learning/router-bandit.js.map +1 -1
  244. package/dist/learning/routing-history.d.ts +41 -2
  245. package/dist/learning/routing-history.d.ts.map +1 -1
  246. package/dist/learning/routing-history.js.map +1 -1
  247. package/dist/learning/run-trace.d.ts +21 -0
  248. package/dist/learning/run-trace.d.ts.map +1 -1
  249. package/dist/learning/run-trace.js +38 -0
  250. package/dist/learning/run-trace.js.map +1 -1
  251. package/dist/learning/session-grant.d.ts +75 -0
  252. package/dist/learning/session-grant.d.ts.map +1 -0
  253. package/dist/learning/session-grant.js +112 -0
  254. package/dist/learning/session-grant.js.map +1 -0
  255. package/dist/learning/task-model-continuity.d.ts +73 -0
  256. package/dist/learning/task-model-continuity.d.ts.map +1 -0
  257. package/dist/learning/task-model-continuity.js +87 -0
  258. package/dist/learning/task-model-continuity.js.map +1 -0
  259. package/dist/learning/turn-feedback.d.ts +93 -0
  260. package/dist/learning/turn-feedback.d.ts.map +1 -0
  261. package/dist/learning/turn-feedback.js +127 -0
  262. package/dist/learning/turn-feedback.js.map +1 -0
  263. package/dist/learning/turn-report.d.ts +104 -2
  264. package/dist/learning/turn-report.d.ts.map +1 -1
  265. package/dist/learning/turn-report.js +161 -6
  266. package/dist/learning/turn-report.js.map +1 -1
  267. package/dist/learning/verdict-routing.d.ts +51 -0
  268. package/dist/learning/verdict-routing.d.ts.map +1 -0
  269. package/dist/learning/verdict-routing.js +122 -0
  270. package/dist/learning/verdict-routing.js.map +1 -0
  271. package/dist/mcp/client.d.ts.map +1 -1
  272. package/dist/mcp/client.js +5 -0
  273. package/dist/mcp/client.js.map +1 -1
  274. package/dist/mcp/manager.d.ts +10 -0
  275. package/dist/mcp/manager.d.ts.map +1 -1
  276. package/dist/mcp/manager.js +20 -0
  277. package/dist/mcp/manager.js.map +1 -1
  278. package/dist/mcp/mcp-discovery.d.ts +34 -0
  279. package/dist/mcp/mcp-discovery.d.ts.map +1 -0
  280. package/dist/mcp/mcp-discovery.js +71 -0
  281. package/dist/mcp/mcp-discovery.js.map +1 -0
  282. package/dist/mcp/mcp-schema-cache.d.ts +17 -0
  283. package/dist/mcp/mcp-schema-cache.d.ts.map +1 -1
  284. package/dist/mcp/mcp-schema-cache.js +47 -3
  285. package/dist/mcp/mcp-schema-cache.js.map +1 -1
  286. package/dist/mcp/types.d.ts +28 -0
  287. package/dist/mcp/types.d.ts.map +1 -1
  288. package/dist/mcp/types.js.map +1 -1
  289. package/dist/tools/ask-user.d.ts.map +1 -1
  290. package/dist/tools/ask-user.js +4 -0
  291. package/dist/tools/ask-user.js.map +1 -1
  292. package/dist/tools/capability-registry.d.ts +150 -0
  293. package/dist/tools/capability-registry.d.ts.map +1 -0
  294. package/dist/tools/capability-registry.js +400 -0
  295. package/dist/tools/capability-registry.js.map +1 -0
  296. package/dist/tools/child-agent-runtime.d.ts.map +1 -1
  297. package/dist/tools/child-agent-runtime.js +19 -5
  298. package/dist/tools/child-agent-runtime.js.map +1 -1
  299. package/dist/tools/coding-tools.d.ts +17 -5
  300. package/dist/tools/coding-tools.d.ts.map +1 -1
  301. package/dist/tools/coding-tools.js +80 -11
  302. package/dist/tools/coding-tools.js.map +1 -1
  303. package/dist/tools/command-memo.d.ts +116 -0
  304. package/dist/tools/command-memo.d.ts.map +1 -0
  305. package/dist/tools/command-memo.js +202 -0
  306. package/dist/tools/command-memo.js.map +1 -0
  307. package/dist/tools/git-tool.d.ts.map +1 -1
  308. package/dist/tools/git-tool.js +13 -3
  309. package/dist/tools/git-tool.js.map +1 -1
  310. package/dist/tools/harness-directive.d.ts +42 -0
  311. package/dist/tools/harness-directive.d.ts.map +1 -0
  312. package/dist/tools/harness-directive.js +45 -0
  313. package/dist/tools/harness-directive.js.map +1 -0
  314. package/dist/tools/loop-skill-hint.d.ts +74 -174
  315. package/dist/tools/loop-skill-hint.d.ts.map +1 -1
  316. package/dist/tools/loop-skill-hint.js +110 -536
  317. package/dist/tools/loop-skill-hint.js.map +1 -1
  318. package/dist/tools/mcp-client-tool.d.ts +2 -0
  319. package/dist/tools/mcp-client-tool.d.ts.map +1 -1
  320. package/dist/tools/mcp-client-tool.js +3 -0
  321. package/dist/tools/mcp-client-tool.js.map +1 -1
  322. package/dist/tools/modality/shared.d.ts +1 -4
  323. package/dist/tools/modality/shared.d.ts.map +1 -1
  324. package/dist/tools/modality/shared.js +7 -22
  325. package/dist/tools/modality/shared.js.map +1 -1
  326. package/dist/tools/plan-store.d.ts +20 -2
  327. package/dist/tools/plan-store.d.ts.map +1 -1
  328. package/dist/tools/plan-store.js +51 -7
  329. package/dist/tools/plan-store.js.map +1 -1
  330. package/dist/tools/registry.d.ts +76 -3
  331. package/dist/tools/registry.d.ts.map +1 -1
  332. package/dist/tools/registry.js +486 -26
  333. package/dist/tools/registry.js.map +1 -1
  334. package/dist/tools/remediation-ladder.d.ts.map +1 -1
  335. package/dist/tools/remediation-ladder.js +8 -0
  336. package/dist/tools/remediation-ladder.js.map +1 -1
  337. package/dist/tools/run-cli.d.ts.map +1 -1
  338. package/dist/tools/run-cli.js +29 -4
  339. package/dist/tools/run-cli.js.map +1 -1
  340. package/dist/tools/run-terminal.d.ts +11 -0
  341. package/dist/tools/run-terminal.d.ts.map +1 -1
  342. package/dist/tools/run-terminal.js +265 -10
  343. package/dist/tools/run-terminal.js.map +1 -1
  344. package/dist/tools/tool-loop.d.ts +321 -13
  345. package/dist/tools/tool-loop.d.ts.map +1 -1
  346. package/dist/tools/tool-loop.js +867 -66
  347. package/dist/tools/tool-loop.js.map +1 -1
  348. package/dist/utils/atomic-store.d.ts +53 -0
  349. package/dist/utils/atomic-store.d.ts.map +1 -0
  350. package/dist/utils/atomic-store.js +178 -0
  351. package/dist/utils/atomic-store.js.map +1 -0
  352. package/dist/utils/binary-probe.d.ts +25 -0
  353. package/dist/utils/binary-probe.d.ts.map +1 -0
  354. package/dist/utils/binary-probe.js +48 -0
  355. package/dist/utils/binary-probe.js.map +1 -0
  356. package/dist/utils/workspace-path.d.ts +50 -0
  357. package/dist/utils/workspace-path.d.ts.map +1 -0
  358. package/dist/utils/workspace-path.js +86 -0
  359. package/dist/utils/workspace-path.js.map +1 -0
  360. package/dist/web-dashboard/chat-console.d.ts +24 -0
  361. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  362. package/dist/web-dashboard/chat-console.js +38 -0
  363. package/dist/web-dashboard/chat-console.js.map +1 -1
  364. package/dist/web-dashboard/project-context.d.ts +27 -2
  365. package/dist/web-dashboard/project-context.d.ts.map +1 -1
  366. package/dist/web-dashboard/project-context.js +32 -2
  367. package/dist/web-dashboard/project-context.js.map +1 -1
  368. package/dist/web-dashboard/server.d.ts +11 -0
  369. package/dist/web-dashboard/server.d.ts.map +1 -1
  370. package/dist/web-dashboard/server.js +362 -11
  371. package/dist/web-dashboard/server.js.map +1 -1
  372. package/dist/web-dashboard/src/types.d.ts +170 -1
  373. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  374. package/dist/web-dashboard/workspace-guard.d.ts +11 -2
  375. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  376. package/dist/web-dashboard/workspace-guard.js +24 -12
  377. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  378. package/dist/web-dashboard/workspace-resolution.d.ts +87 -0
  379. package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -0
  380. package/dist/web-dashboard/workspace-resolution.js +105 -0
  381. package/dist/web-dashboard/workspace-resolution.js.map +1 -0
  382. package/package.json +1 -1
  383. package/src/web-dashboard/public/assets/index-zjbdJnO-.js +210 -0
  384. package/src/web-dashboard/public/assets/index-zjbdJnO-.js.map +1 -0
  385. package/src/web-dashboard/public/index.html +1 -1
  386. package/src/web-dashboard/public/assets/index-DhiuR4S2.js +0 -210
  387. package/src/web-dashboard/public/assets/index-DhiuR4S2.js.map +0 -1
@@ -0,0 +1,224 @@
1
+ /**
2
+ * HooksCommand — `nuvira hooks` — the declarative lifecycle hooks, from the CLI.
3
+ *
4
+ * A hook here is a RULE, not code: it binds to one of nuvira's four lifecycle
5
+ * seams (`before_tool_call`, `after_tool_call`, `failed_tool_call`,
6
+ * `on_session_end`) and its only possible actions are `deny`, `notify` and
7
+ * `scan-args` — a fixed, native allow-list. Installing one can therefore never
8
+ * execute third-party code. See `docs/HOOKS.md` and
9
+ * `src/gateway/hook-contract.ts`.
10
+ *
11
+ * This is the CLI face of the same `<config-dir>/hooks.json` the dashboard's
12
+ * Hooks page edits, and the same contract the runtime reads live. Both surfaces
13
+ * share `hook-contract.ts`, so the vocabulary cannot drift.
14
+ *
15
+ * Subcommands:
16
+ * nuvira hooks list — built-in + user hooks, with state
17
+ * nuvira hooks add --id … --label … … — declare a hook
18
+ * nuvira hooks remove <id> — remove a user hook
19
+ * nuvira hooks enable <id> — turn a hook on (also a built-in)
20
+ * nuvira hooks disable <id> — turn a hook off
21
+ *
22
+ * The built-in starter set (block `rm -rf`, catch secrets in writes/commands)
23
+ * ships DISABLED; `enable` on a built-in materializes it into the file.
24
+ */
25
+ import { Command } from 'commander';
26
+ import { BaseCommand } from './commands.js';
27
+ import { logger } from '../utils/logger.js';
28
+ import { HOOK_ACTION_KINDS, HOOK_EVENTS, builtinHookById, hookDeclarationsFile, listHookDeclarations, readHookDeclarations, setHookDeclarations, } from '../gateway/hook-contract.js';
29
+ /** Repeatable `--arg key=glob` collector. */
30
+ function collectArg(value, previous) {
31
+ previous.push(value);
32
+ return previous;
33
+ }
34
+ /** `key=glob` lines → the `argsMatch` record. Blank / malformed entries drop. */
35
+ function parseArgsMatch(values) {
36
+ const out = {};
37
+ for (const raw of values) {
38
+ const eq = raw.indexOf('=');
39
+ if (eq <= 0)
40
+ continue;
41
+ const key = raw.slice(0, eq).trim();
42
+ const glob = raw.slice(eq + 1).trim();
43
+ if (key && glob)
44
+ out[key] = glob;
45
+ }
46
+ return Object.keys(out).length > 0 ? out : undefined;
47
+ }
48
+ /** A one-line, human summary of what a declaration matches and does. */
49
+ function describeHook(hook) {
50
+ const when = hook.when ?? {};
51
+ const parts = [];
52
+ if (when.tool)
53
+ parts.push(`tool ${when.tool}`);
54
+ if (when.surface)
55
+ parts.push(`surface ${when.surface}`);
56
+ if (when.cwdPrefix)
57
+ parts.push(`cwd ${when.cwdPrefix}*`);
58
+ if (when.argsMatch)
59
+ for (const [k, v] of Object.entries(when.argsMatch))
60
+ parts.push(`${k}=${v}`);
61
+ const target = parts.length > 0 ? parts.join(' · ') : 'every call';
62
+ switch (hook.action.kind) {
63
+ case 'deny':
64
+ return `${target} → deny${hook.action.reason ? `: ${hook.action.reason}` : ''}`;
65
+ case 'notify':
66
+ return `${target} → notify: ${hook.action.message}`;
67
+ case 'scan-args':
68
+ return `${target} → scan args for secrets${hook.action.denyOnHit ? ' (deny on hit)' : ''}`;
69
+ }
70
+ }
71
+ export class HooksCommand extends BaseCommand {
72
+ create() {
73
+ const cmd = new Command('hooks')
74
+ .description('Declarative lifecycle hooks — list/add/remove the rules that deny, notify or secret-scan tool calls (the same hooks.json the dashboard Hooks page edits; a hook is data, never code)')
75
+ .option('-v, --verbose', 'verbose output');
76
+ cmd
77
+ .command('list')
78
+ .description('List built-in and user hooks with their seam, action and state')
79
+ .action(() => {
80
+ const all = listHookDeclarations();
81
+ logger.highlight('\n🪝 Hooks');
82
+ if (all.length === 0) {
83
+ logger.info(' No hooks declared.');
84
+ console.log('');
85
+ return;
86
+ }
87
+ for (const hook of all) {
88
+ const state = hook.enabled ? '✅ enabled ' : '⭕ disabled';
89
+ const source = hook.source === 'builtin' ? 'builtin' : 'user';
90
+ console.log(` ${state} ${hook.id} [${source}] (${hook.event})`);
91
+ console.log(` ${hook.label}`);
92
+ console.log(` ${describeHook(hook)}`);
93
+ }
94
+ console.log('');
95
+ logger.info(` File: ${hookDeclarationsFile()}`);
96
+ console.log('');
97
+ });
98
+ cmd
99
+ .command('add')
100
+ .description('Declare a new hook (it is enabled unless --disabled is given)')
101
+ .requiredOption('--id <id>', 'unique id: lowercase letters, digits and hyphens')
102
+ .requiredOption('--label <label>', 'human label')
103
+ .requiredOption('--event <event>', `seam: ${HOOK_EVENTS.join(' | ')}`)
104
+ .requiredOption('--action <kind>', `action: ${HOOK_ACTION_KINDS.join(' | ')}`)
105
+ .option('--tool <glob>', 'tool-name glob to match (e.g. run_terminal, run_*)')
106
+ .option('--surface <glob>', 'surface glob to match (e.g. cli-chat)')
107
+ .option('--cwd <prefix>', 'only match calls whose cwd starts with this prefix')
108
+ .option('--arg <key=glob>', 'shallow arg matcher, repeatable (e.g. --arg "command=*rm -rf*")', collectArg, [])
109
+ .option('--reason <text>', 'reason shown when a deny (or deny-on-hit) blocks the call')
110
+ .option('--message <text>', 'notify message ({tool} / {surface} / {event} interpolated)')
111
+ .option('--deny-on-hit', 'scan-args: block the call when a secret shape is found')
112
+ .option('--disabled', 'add it switched off (the dashboard adds them on by default)')
113
+ .action((opts) => {
114
+ const id = String(opts.id ?? '');
115
+ const label = String(opts.label ?? '');
116
+ const event = String(opts.event ?? '');
117
+ const kind = String(opts.action ?? '');
118
+ if (!HOOK_EVENTS.includes(event)) {
119
+ logger.error(`Unknown --event '${event}'. Choose one of: ${HOOK_EVENTS.join(', ')}`);
120
+ return;
121
+ }
122
+ if (!HOOK_ACTION_KINDS.includes(kind)) {
123
+ logger.error(`Unknown --action '${kind}'. Choose one of: ${HOOK_ACTION_KINDS.join(', ')}`);
124
+ return;
125
+ }
126
+ const when = {
127
+ ...(typeof opts.tool === 'string' && opts.tool ? { tool: opts.tool } : {}),
128
+ ...(typeof opts.surface === 'string' && opts.surface ? { surface: opts.surface } : {}),
129
+ ...(typeof opts.cwd === 'string' && opts.cwd ? { cwdPrefix: opts.cwd } : {}),
130
+ ...(parseArgsMatch(opts.arg ?? []) ? { argsMatch: parseArgsMatch(opts.arg ?? []) } : {}),
131
+ };
132
+ const reason = typeof opts.reason === 'string' && opts.reason ? opts.reason : undefined;
133
+ const message = typeof opts.message === 'string' && opts.message ? opts.message : undefined;
134
+ const action = kind === 'deny'
135
+ ? { kind: 'deny', ...(reason ? { reason } : {}) }
136
+ : kind === 'notify'
137
+ ? { kind: 'notify', message: message ?? 'hook fired: {tool}' }
138
+ : { kind: 'scan-args', denyOnHit: Boolean(opts.denyOnHit), ...(reason ? { reason } : {}) };
139
+ const declaration = {
140
+ id,
141
+ label,
142
+ event,
143
+ enabled: !opts.disabled,
144
+ ...(Object.keys(when).length > 0 ? { when } : {}),
145
+ action,
146
+ source: 'user',
147
+ updatedAt: Date.now(),
148
+ };
149
+ const user = readHookDeclarations();
150
+ if (user.some((h) => h.id === id)) {
151
+ logger.error(`A hook with id '${id}' already exists. Remove it, or use 'enable'/'disable'.`);
152
+ console.log('');
153
+ return;
154
+ }
155
+ const saved = setHookDeclarations([...user, declaration]);
156
+ if (!saved.ok) {
157
+ logger.error(`Rejected: ${saved.error}`);
158
+ console.log('');
159
+ return;
160
+ }
161
+ logger.success(`➕ Added hook '${id}' (${declaration.enabled ? 'enabled' : 'disabled'}).`);
162
+ logger.info(` In force on the next tool call. Inspect it: nuvira hooks list`);
163
+ console.log('');
164
+ });
165
+ cmd
166
+ .command('remove <id>')
167
+ .description('Remove a user hook (a built-in cannot be deleted — disable it instead)')
168
+ .action((id) => {
169
+ const user = readHookDeclarations();
170
+ if (!user.some((h) => h.id === id)) {
171
+ if (builtinHookById(id)) {
172
+ logger.warn(`'${id}' is a built-in default and cannot be removed. Turn it off with: nuvira hooks disable ${id}`);
173
+ }
174
+ else {
175
+ logger.warn(`No user hook '${id}'.`);
176
+ }
177
+ console.log('');
178
+ return;
179
+ }
180
+ const isBuiltin = Boolean(builtinHookById(id));
181
+ const saved = setHookDeclarations(user.filter((h) => h.id !== id));
182
+ if (!saved.ok) {
183
+ logger.error(saved.error);
184
+ console.log('');
185
+ return;
186
+ }
187
+ logger.success(isBuiltin
188
+ ? `↺ Reset built-in '${id}' to its default (disabled).`
189
+ : `🗑️ Removed hook '${id}'.`);
190
+ console.log('');
191
+ });
192
+ const setEnabled = (enabled) => (id) => {
193
+ const user = readHookDeclarations();
194
+ const existing = user.find((h) => h.id === id);
195
+ let next;
196
+ if (existing) {
197
+ next = user.map((h) => (h.id === id ? { ...h, enabled, updatedAt: Date.now() } : h));
198
+ }
199
+ else {
200
+ const builtin = builtinHookById(id);
201
+ if (!builtin) {
202
+ logger.warn(`No hook '${id}'. Declare it first: nuvira hooks add --id ${id} …`);
203
+ console.log('');
204
+ return;
205
+ }
206
+ // Enabling a built-in materializes it into the file so the runtime —
207
+ // which follows the user set — actually sees it.
208
+ next = [...user, { ...builtin, enabled, updatedAt: Date.now() }];
209
+ }
210
+ const saved = setHookDeclarations(next);
211
+ if (!saved.ok) {
212
+ logger.error(saved.error);
213
+ console.log('');
214
+ return;
215
+ }
216
+ logger.success(`${enabled ? '✅ Enabled' : '⭕ Disabled'} '${id}'.`);
217
+ console.log('');
218
+ };
219
+ cmd.command('enable <id>').description('Turn a hook on (works on a built-in too)').action(setEnabled(true));
220
+ cmd.command('disable <id>').description('Turn a hook off').action(setEnabled(false));
221
+ return cmd;
222
+ }
223
+ }
224
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/cli/hooks.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,18 @@
10
10
  *
11
11
  * Subcommands:
12
12
  * nuvira knowledge add <tag> <path...> — ingest files/folders under a tag
13
+ * nuvira knowledge sync <tag> <path...> — re-sync folders (hash-gated; prunes vanished files)
13
14
  * nuvira knowledge query <tag> "<question>" — retrieve the tag's relevant passages
15
+ * nuvira knowledge toc <tag> [doc] — documents and their headings
16
+ * nuvira knowledge read <tag> <doc> — one document or section, VERBATIM
17
+ * nuvira knowledge remove <tag> <doc> — remove one document from a tag
14
18
  * nuvira knowledge list — list tags, documents and chunk counts
15
19
  * nuvira knowledge stats <tag> — details for one tag
16
- * nuvira knowledge forget <tag> — remove a tag's vectors
20
+ * nuvira knowledge forget <tag> — remove a tag's vectors and stored text
21
+ *
22
+ * `query` answers "where is it mentioned"; `read` answers "what does it say".
23
+ * They are different jobs — a spec-driven build needs a section verbatim, not
24
+ * the six most similar paragraphs of it.
17
25
  */
18
26
  import { Command } from 'commander';
19
27
  import { BaseCommand } from './commands.js';
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/cli/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAY5C,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,MAAM,IAAI,OAAO;CA6GlB"}
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/cli/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAiB5C,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,MAAM,IAAI,OAAO;CAiMlB"}
@@ -10,10 +10,18 @@
10
10
  *
11
11
  * Subcommands:
12
12
  * nuvira knowledge add <tag> <path...> — ingest files/folders under a tag
13
+ * nuvira knowledge sync <tag> <path...> — re-sync folders (hash-gated; prunes vanished files)
13
14
  * nuvira knowledge query <tag> "<question>" — retrieve the tag's relevant passages
15
+ * nuvira knowledge toc <tag> [doc] — documents and their headings
16
+ * nuvira knowledge read <tag> <doc> — one document or section, VERBATIM
17
+ * nuvira knowledge remove <tag> <doc> — remove one document from a tag
14
18
  * nuvira knowledge list — list tags, documents and chunk counts
15
19
  * nuvira knowledge stats <tag> — details for one tag
16
- * nuvira knowledge forget <tag> — remove a tag's vectors
20
+ * nuvira knowledge forget <tag> — remove a tag's vectors and stored text
21
+ *
22
+ * `query` answers "where is it mentioned"; `read` answers "what does it say".
23
+ * They are different jobs — a spec-driven build needs a section verbatim, not
24
+ * the six most similar paragraphs of it.
17
25
  */
18
26
  import { Command } from 'commander';
19
27
  import { basename } from 'node:path';
@@ -21,7 +29,7 @@ import { existsSync } from 'node:fs';
21
29
  import { BaseCommand } from './commands.js';
22
30
  import { logger } from '../utils/logger.js';
23
31
  import { formatCount } from '../utils/format.js';
24
- import { ingestKnowledge, queryKnowledge, listKnowledgeTags, getKnowledgeTag, forgetKnowledgeTag, normalizeKnowledgeTag, } from '../learning/knowledge-base.js';
32
+ import { ingestKnowledge, queryKnowledge, listKnowledgeTags, getKnowledgeTag, forgetKnowledgeTag, normalizeKnowledgeTag, listKnowledgeSections, readKnowledgeDocument, removeKnowledgeDocument, syncKnowledgeTag, MAX_READ_CHARS, } from '../learning/knowledge-base.js';
25
33
  export class KnowledgeCommand extends BaseCommand {
26
34
  create() {
27
35
  const cmd = new Command('knowledge')
@@ -42,6 +50,9 @@ export class KnowledgeCommand extends BaseCommand {
42
50
  try {
43
51
  const result = await ingestKnowledge(tag, paths);
44
52
  logger.success(` Ingested ${result.files} document(s) / ${result.chunks} chunk(s) under '${result.tag}'.`);
53
+ if (result.unchanged > 0) {
54
+ logger.info(` ${result.unchanged} document(s) unchanged — not re-embedded (use 'sync' to prune removed files).`);
55
+ }
45
56
  for (const s of result.skipped) {
46
57
  logger.warn(` Skipped ${basename(s.path)}: ${s.reason}`);
47
58
  }
@@ -75,6 +86,86 @@ export class KnowledgeCommand extends BaseCommand {
75
86
  logger.info('The data part of an answer comes from these passages; the general part from the model / web-research.');
76
87
  console.log('');
77
88
  });
89
+ cmd
90
+ .command('toc <tag> [doc]')
91
+ .description("List a tag's documents and the headings in each")
92
+ .action(async (tag, doc) => {
93
+ const docs = listKnowledgeSections(tag, doc);
94
+ if (docs.length === 0) {
95
+ logger.warn(`No documents under '${normalizeKnowledgeTag(tag)}'. Add some: nuvira knowledge add <tag> <files...>`);
96
+ console.log('');
97
+ return;
98
+ }
99
+ logger.highlight(`\n📚 ${normalizeKnowledgeTag(tag)}`);
100
+ for (const d of docs) {
101
+ console.log(` 📄 ${d.title} (${d.chunks} chunk${d.chunks === 1 ? '' : 's'}) — ${d.path}`);
102
+ if (d.sections.length === 0) {
103
+ console.log(' (no headings — read the whole document)');
104
+ continue;
105
+ }
106
+ for (const s of d.sections) {
107
+ console.log(` ${' '.repeat(Math.max(0, s.level - 1))}§ ${s.headingPath ? `${s.headingPath} > ` : ''}${s.title}`);
108
+ }
109
+ }
110
+ console.log('');
111
+ logger.info("Read one verbatim: nuvira knowledge read <tag> <doc> --section \"<heading>\"");
112
+ console.log('');
113
+ });
114
+ cmd
115
+ .command('read <tag> <doc>')
116
+ .description('Print a document, or one named section, VERBATIM (not a summary)')
117
+ .option('-s, --section <heading>', 'section heading to read (default: the whole document)')
118
+ .action(async (tag, doc, opts) => {
119
+ const read = readKnowledgeDocument(tag, doc, opts.section);
120
+ if (!read.ok) {
121
+ logger.warn(read.reason);
122
+ console.log('');
123
+ return;
124
+ }
125
+ logger.highlight(`\n📖 ${read.path}${read.headingPath ? ` — §${read.headingPath}` : ''}`);
126
+ console.log('');
127
+ console.log(read.text);
128
+ if (read.truncated) {
129
+ console.log('');
130
+ logger.warn(` [truncated at ${MAX_READ_CHARS} characters — read a section instead]`);
131
+ }
132
+ console.log('');
133
+ });
134
+ cmd
135
+ .command('remove <tag> <doc>')
136
+ .description('Remove ONE document from a tag (its chunks, stored text and manifest row)')
137
+ .action(async (tag, doc) => {
138
+ const removed = await removeKnowledgeDocument(tag, doc);
139
+ if (removed)
140
+ logger.success(`🗑️ Removed '${doc}' from '${normalizeKnowledgeTag(tag)}'.`);
141
+ else
142
+ logger.warn(`No document '${doc}' under '${normalizeKnowledgeTag(tag)}'.`);
143
+ console.log('');
144
+ });
145
+ cmd
146
+ .command('sync <tag> <paths...>')
147
+ .description("Bring a tag up to date with its folders — hash-gated, prunes files that vanished")
148
+ .action(async (tag, paths) => {
149
+ const missing = paths.filter((p) => !existsSync(p));
150
+ if (missing.length > 0) {
151
+ logger.error(`Path not found: ${missing.join(', ')}`);
152
+ return;
153
+ }
154
+ const normalized = normalizeKnowledgeTag(tag);
155
+ logger.info(`🔄 Syncing '${normalized}' from ${paths.length} path(s) ...`);
156
+ try {
157
+ const result = await syncKnowledgeTag(tag, paths);
158
+ logger.success(` ${result.added} added, ${result.changed} changed, ${result.unchanged} unchanged, ${result.chunks} chunk(s) written.`);
159
+ for (const p of result.removed)
160
+ logger.warn(` Removed ${basename(p)}: no longer present under a synced path.`);
161
+ for (const s of result.skipped)
162
+ logger.warn(` Skipped ${basename(s.path)}: ${s.reason}`);
163
+ }
164
+ catch (err) {
165
+ logger.error(`Failed to sync: ${err instanceof Error ? err.message : String(err)}`);
166
+ }
167
+ console.log('');
168
+ });
78
169
  cmd
79
170
  .command('list')
80
171
  .description('List knowledge tags with document and chunk counts')
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/cli/knowledge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/cli/knowledge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop-executor.d.ts","sourceRoot":"","sources":["../../src/cli/loop-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop-executor.d.ts","sourceRoot":"","sources":["../../src/cli/loop-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWrD,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAsGxC,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnD,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,0BAA0B,EAAE,gBAAgB,CAAC;IAC/D,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,sEAAsE;IACtE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,WAAW,EAAE,CAAC;CAC5D;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gDAAgD;IAChD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAeD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,EAC5B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CA+kC7B"}
@@ -45,6 +45,13 @@ import { noteServedRoute } from '../tools/loop-route-feed.js';
45
45
  import { getAutoRouter, isAutoProvider, governanceVerdict, adminBudgetVerdict } from '../learning/auto-router.js';
46
46
  import { buildDeepFailoverPool, createFailoverExclusionFilter } from '../learning/resilient-call.js';
47
47
  import { recordActionFailure } from '../learning/failure-bookkeeping.js';
48
+ // P1/P2 (fix_model_routing) — the shared definition of "this response carries
49
+ // nothing usable". An empty completion is a FAILURE, not an answer, and must
50
+ // advance the candidate walk instead of being returned to the caller.
51
+ import { assertUsableModelResponse, isUnusableModelResponseError } from '../learning/response-usability.js';
52
+ // P6 (fix_model_routing) — the bandit is told about step-level failures too, so
53
+ // an arm that answers with nothing stops being sampled back up.
54
+ import { getRouterBandit } from '../learning/router-bandit.js';
48
55
  import { recordRegistrySuccess, getProviderFallback, classifyFallbackError, isRetryableError, } from '../learning/provider-fallback.js';
49
56
  import { resolveThreadBudgetChars } from '../learning/context-budget.js';
50
57
  import { buildLoopProjectContext } from '../tools/loop-project-context.js';
@@ -533,29 +540,35 @@ export async function runLoopExecutor(goal, configManager, opts = {}) {
533
540
  }
534
541
  }
535
542
  // ── Skill hint (chat/execute parity) ────────────────────────────────────
536
- // MODE-DEPENDENT (see resolveSkillHintMode): `match` (default) injects ONE
537
- // keyword-matched skill only when the goal really matches; `catalog`
538
- // (opt-in — ~24K chars) hands the model the full list to choose from; `off`
539
- // injects nothing. Best-effort: a failure returns '' and the prompt is
540
- // unchanged.
543
+ // MODE-DEPENDENT (see resolveSkillHintMode): `pointer` (default) injects a
544
+ // bounded discovery pointer (the MODEL picks a skill via the skill tool /
545
+ // capability search — the harness no longer keyword-matches); `catalog`
546
+ // (opt-in — ~24K chars) hands the model the full list; `off` injects nothing.
547
+ // Best-effort: a failure returns '' and the prompt is unchanged.
541
548
  let skillHint = '';
542
549
  if (!opts.skipSkillHint) {
543
550
  try {
544
- const { buildConfiguredSkillHint, markLoopSkillUsed } = await import('../tools/loop-skill-hint.js');
545
- const injected = {
546
- value: null,
547
- };
548
- skillHint = await buildConfiguredSkillHint(goal, configManager, injected);
549
- await markLoopSkillUsed(injected.value);
551
+ const { buildConfiguredSkillHint } = await import('../tools/loop-skill-hint.js');
552
+ skillHint = await buildConfiguredSkillHint(configManager);
550
553
  }
551
554
  catch {
552
555
  skillHint = ''; // best-effort — never breaks the turn
553
556
  }
554
557
  }
558
+ // Machine facts — the host stated once (OS / arch / shell / installed package
559
+ // managers). One detection per process; best-effort (a failure injects nothing).
560
+ let machineBlock = '';
561
+ try {
562
+ const { buildMachineFactsBlock } = await import('../learning/machine-facts.js');
563
+ machineBlock = buildMachineFactsBlock();
564
+ }
565
+ catch {
566
+ machineBlock = '';
567
+ }
555
568
  const { runToolLoop } = await import('../tools/tool-loop.js');
556
569
  const { getTool, TOOL_CONTRACT_JSON } = await import('../tools/registry.js');
557
570
  const head = [
558
- { role: 'system', content: buildExecuteLoopSystemPrompt(TOOL_CONTRACT_JSON) + skillHint },
571
+ { role: 'system', content: buildExecuteLoopSystemPrompt(TOOL_CONTRACT_JSON) + machineBlock + skillHint },
559
572
  ...(projectContext ? [{ role: 'user', content: `[Project context]\n${projectContext}` }] : []),
560
573
  ];
561
574
  let thread = [...head, { role: 'user', content: goal }];
@@ -723,6 +736,16 @@ export async function runLoopExecutor(goal, configManager, opts = {}) {
723
736
  // it several steps earlier.
724
737
  servedRoute = noteServedRoute(servedRoute, servedRouteFrom(route));
725
738
  const resp = await tryOnce(prov, mdl, nextMessages, schemas, abort);
739
+ // ── P1/P2 — AN UNUSABLE RESPONSE IS A FAILURE, NOT AN ANSWER ─────
740
+ // A provider that resolves HTTP 200 with neither answer text nor a tool
741
+ // call used to be returned from here as the step's response: the walk
742
+ // only reacts to THROWN errors, so the SAME model was re-asked and the
743
+ // turn eventually ended as "bounded" with zero work done while healthy
744
+ // models sat configured and unused. Validating here turns that into what
745
+ // it is — a candidate-level failure — so the catch below books it
746
+ // (`empty-response`: the pair rests, its siblings stay routable) and the
747
+ // walk continues to a DIFFERENT model IN THIS SAME STEP.
748
+ assertUsableModelResponse(resp);
726
749
  // ── ANSWER-QUALITY GATE ──────────────────────────────────────────
727
750
  // A reply that is the model's own REASONING, or its narration of the
728
751
  // tool contract, is not a deliverable — and it never THROWS, so this
@@ -791,6 +814,18 @@ export async function runLoopExecutor(goal, configManager, opts = {}) {
791
814
  catch {
792
815
  // Best-effort — bookkeeping must never mask the generation error.
793
816
  }
817
+ // P6 — an empty completion is NEGATIVE evidence for the arm itself, at
818
+ // a granularity the task-level reward can never reach: the turn does
819
+ // not fail, it just moves on, so without this the prior kept sampling
820
+ // the same dead model back to the top of the ranking.
821
+ if (isUnusableModelResponseError(err)) {
822
+ try {
823
+ getRouterBandit().penalizeModel(cand.model !== 'default' ? cand.model : model);
824
+ }
825
+ catch {
826
+ // Best-effort — learning must never mask the generation error.
827
+ }
828
+ }
794
829
  // ── PINNED-RUN GATE ──────────────────────────────────────────────
795
830
  // Leaving a provider the user EXPLICITLY asked for is only justified
796
831
  // by a failure another provider can plausibly answer — the same