agent-nuvira 3.3.12 → 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 (458) 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/agents/reasoner.d.ts.map +1 -1
  6. package/dist/agents/agents/reasoner.js +13 -0
  7. package/dist/agents/agents/reasoner.js.map +1 -1
  8. package/dist/agents/orchestrator.d.ts +31 -0
  9. package/dist/agents/orchestrator.d.ts.map +1 -1
  10. package/dist/agents/orchestrator.js +103 -135
  11. package/dist/agents/orchestrator.js.map +1 -1
  12. package/dist/cli/chat.d.ts +89 -0
  13. package/dist/cli/chat.d.ts.map +1 -1
  14. package/dist/cli/chat.js +798 -39
  15. package/dist/cli/chat.js.map +1 -1
  16. package/dist/cli/cli-program.d.ts.map +1 -1
  17. package/dist/cli/cli-program.js +20 -0
  18. package/dist/cli/cli-program.js.map +1 -1
  19. package/dist/cli/config.d.ts +12 -0
  20. package/dist/cli/config.d.ts.map +1 -1
  21. package/dist/cli/config.js +107 -3
  22. package/dist/cli/config.js.map +1 -1
  23. package/dist/cli/decisions.d.ts +28 -0
  24. package/dist/cli/decisions.d.ts.map +1 -0
  25. package/dist/cli/decisions.js +140 -0
  26. package/dist/cli/decisions.js.map +1 -0
  27. package/dist/cli/doctor.d.ts +6 -0
  28. package/dist/cli/doctor.d.ts.map +1 -1
  29. package/dist/cli/doctor.js +46 -0
  30. package/dist/cli/doctor.js.map +1 -1
  31. package/dist/cli/execute.d.ts.map +1 -1
  32. package/dist/cli/execute.js +6 -0
  33. package/dist/cli/execute.js.map +1 -1
  34. package/dist/cli/failover-runner.d.ts.map +1 -1
  35. package/dist/cli/failover-runner.js +19 -1
  36. package/dist/cli/failover-runner.js.map +1 -1
  37. package/dist/cli/feedback.d.ts.map +1 -1
  38. package/dist/cli/feedback.js +5 -1
  39. package/dist/cli/feedback.js.map +1 -1
  40. package/dist/cli/hooks.d.ts +30 -0
  41. package/dist/cli/hooks.d.ts.map +1 -0
  42. package/dist/cli/hooks.js +224 -0
  43. package/dist/cli/hooks.js.map +1 -0
  44. package/dist/cli/knowledge.d.ts +31 -0
  45. package/dist/cli/knowledge.d.ts.map +1 -0
  46. package/dist/cli/knowledge.js +223 -0
  47. package/dist/cli/knowledge.js.map +1 -0
  48. package/dist/cli/loop-executor.d.ts.map +1 -1
  49. package/dist/cli/loop-executor.js +92 -18
  50. package/dist/cli/loop-executor.js.map +1 -1
  51. package/dist/cli/model.d.ts +20 -0
  52. package/dist/cli/model.d.ts.map +1 -1
  53. package/dist/cli/model.js +294 -14
  54. package/dist/cli/model.js.map +1 -1
  55. package/dist/cli/omniroute-control.d.ts +88 -0
  56. package/dist/cli/omniroute-control.d.ts.map +1 -0
  57. package/dist/cli/omniroute-control.js +179 -0
  58. package/dist/cli/omniroute-control.js.map +1 -0
  59. package/dist/cli/omniroute.d.ts +21 -0
  60. package/dist/cli/omniroute.d.ts.map +1 -0
  61. package/dist/cli/omniroute.js +67 -0
  62. package/dist/cli/omniroute.js.map +1 -0
  63. package/dist/cli/rate.d.ts +78 -0
  64. package/dist/cli/rate.d.ts.map +1 -0
  65. package/dist/cli/rate.js +294 -0
  66. package/dist/cli/rate.js.map +1 -0
  67. package/dist/config/process-env.d.ts.map +1 -1
  68. package/dist/config/process-env.js +10 -0
  69. package/dist/config/process-env.js.map +1 -1
  70. package/dist/config/types.d.ts +8 -0
  71. package/dist/config/types.d.ts.map +1 -1
  72. package/dist/context/history.d.ts +21 -0
  73. package/dist/context/history.d.ts.map +1 -1
  74. package/dist/context/history.js +50 -0
  75. package/dist/context/history.js.map +1 -1
  76. package/dist/enterprise/vault.d.ts.map +1 -1
  77. package/dist/enterprise/vault.js +5 -21
  78. package/dist/enterprise/vault.js.map +1 -1
  79. package/dist/gateway/hook-contract.d.ts +206 -0
  80. package/dist/gateway/hook-contract.d.ts.map +1 -0
  81. package/dist/gateway/hook-contract.js +449 -0
  82. package/dist/gateway/hook-contract.js.map +1 -0
  83. package/dist/gateway/hooks.d.ts.map +1 -1
  84. package/dist/gateway/hooks.js +14 -0
  85. package/dist/gateway/hooks.js.map +1 -1
  86. package/dist/inference/gemini-adapter.d.ts.map +1 -1
  87. package/dist/inference/gemini-adapter.js +4 -0
  88. package/dist/inference/gemini-adapter.js.map +1 -1
  89. package/dist/inference/interface.d.ts +54 -0
  90. package/dist/inference/interface.d.ts.map +1 -1
  91. package/dist/inference/model-id-validation.d.ts +57 -0
  92. package/dist/inference/model-id-validation.d.ts.map +1 -0
  93. package/dist/inference/model-id-validation.js +127 -0
  94. package/dist/inference/model-id-validation.js.map +1 -0
  95. package/dist/inference/native-tools.d.ts +16 -1
  96. package/dist/inference/native-tools.d.ts.map +1 -1
  97. package/dist/inference/native-tools.js +34 -10
  98. package/dist/inference/native-tools.js.map +1 -1
  99. package/dist/inference/openai-compat-adapter.d.ts.map +1 -1
  100. package/dist/inference/openai-compat-adapter.js +12 -1
  101. package/dist/inference/openai-compat-adapter.js.map +1 -1
  102. package/dist/inference/provider-catalog.d.ts +11 -0
  103. package/dist/inference/provider-catalog.d.ts.map +1 -1
  104. package/dist/inference/provider-catalog.js +80 -0
  105. package/dist/inference/provider-catalog.js.map +1 -1
  106. package/dist/inference/route-resolver.d.ts +32 -8
  107. package/dist/inference/route-resolver.d.ts.map +1 -1
  108. package/dist/inference/route-resolver.js +175 -1
  109. package/dist/inference/route-resolver.js.map +1 -1
  110. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  111. package/dist/inference/tool-call-utils.js +10 -8
  112. package/dist/inference/tool-call-utils.js.map +1 -1
  113. package/dist/inference/tools.d.ts +17 -1
  114. package/dist/inference/tools.d.ts.map +1 -1
  115. package/dist/inference/tools.js +69 -19
  116. package/dist/inference/tools.js.map +1 -1
  117. package/dist/learning/acceptance-model.d.ts +247 -0
  118. package/dist/learning/acceptance-model.d.ts.map +1 -0
  119. package/dist/learning/acceptance-model.js +708 -0
  120. package/dist/learning/acceptance-model.js.map +1 -0
  121. package/dist/learning/auto-router.d.ts +121 -24
  122. package/dist/learning/auto-router.d.ts.map +1 -1
  123. package/dist/learning/auto-router.js +374 -96
  124. package/dist/learning/auto-router.js.map +1 -1
  125. package/dist/learning/autonomy-policy.d.ts +12 -16
  126. package/dist/learning/autonomy-policy.d.ts.map +1 -1
  127. package/dist/learning/autonomy-policy.js +50 -48
  128. package/dist/learning/autonomy-policy.js.map +1 -1
  129. package/dist/learning/behavioural-labels.d.ts +86 -0
  130. package/dist/learning/behavioural-labels.d.ts.map +1 -0
  131. package/dist/learning/behavioural-labels.js +166 -0
  132. package/dist/learning/behavioural-labels.js.map +1 -0
  133. package/dist/learning/capability-evidence.d.ts +167 -0
  134. package/dist/learning/capability-evidence.d.ts.map +1 -0
  135. package/dist/learning/capability-evidence.js +210 -0
  136. package/dist/learning/capability-evidence.js.map +1 -0
  137. package/dist/learning/capability-readiness.d.ts +64 -0
  138. package/dist/learning/capability-readiness.d.ts.map +1 -0
  139. package/dist/learning/capability-readiness.js +74 -0
  140. package/dist/learning/capability-readiness.js.map +1 -0
  141. package/dist/learning/capability-types.d.ts +169 -0
  142. package/dist/learning/capability-types.d.ts.map +1 -0
  143. package/dist/learning/capability-types.js +20 -0
  144. package/dist/learning/capability-types.js.map +1 -0
  145. package/dist/learning/catalog-feed.d.ts +89 -0
  146. package/dist/learning/catalog-feed.d.ts.map +1 -0
  147. package/dist/learning/catalog-feed.js +211 -0
  148. package/dist/learning/catalog-feed.js.map +1 -0
  149. package/dist/learning/cli-intent-effects.d.ts +60 -0
  150. package/dist/learning/cli-intent-effects.d.ts.map +1 -0
  151. package/dist/learning/cli-intent-effects.js +153 -0
  152. package/dist/learning/cli-intent-effects.js.map +1 -0
  153. package/dist/learning/command-adaptation.d.ts +41 -0
  154. package/dist/learning/command-adaptation.d.ts.map +1 -0
  155. package/dist/learning/command-adaptation.js +122 -0
  156. package/dist/learning/command-adaptation.js.map +1 -0
  157. package/dist/learning/consent-picture.d.ts +42 -0
  158. package/dist/learning/consent-picture.d.ts.map +1 -0
  159. package/dist/learning/consent-picture.js +53 -0
  160. package/dist/learning/consent-picture.js.map +1 -0
  161. package/dist/learning/context-budget.d.ts +37 -6
  162. package/dist/learning/context-budget.d.ts.map +1 -1
  163. package/dist/learning/context-budget.js +38 -9
  164. package/dist/learning/context-budget.js.map +1 -1
  165. package/dist/learning/decision-log.d.ts +114 -0
  166. package/dist/learning/decision-log.d.ts.map +1 -0
  167. package/dist/learning/decision-log.js +296 -0
  168. package/dist/learning/decision-log.js.map +1 -0
  169. package/dist/learning/deliverable-class.d.ts.map +1 -1
  170. package/dist/learning/deliverable-class.js +19 -0
  171. package/dist/learning/deliverable-class.js.map +1 -1
  172. package/dist/learning/deliverable-corpus.d.ts +117 -0
  173. package/dist/learning/deliverable-corpus.d.ts.map +1 -0
  174. package/dist/learning/deliverable-corpus.js +176 -0
  175. package/dist/learning/deliverable-corpus.js.map +1 -0
  176. package/dist/learning/error-repair.d.ts +45 -2
  177. package/dist/learning/error-repair.d.ts.map +1 -1
  178. package/dist/learning/error-repair.js +95 -0
  179. package/dist/learning/error-repair.js.map +1 -1
  180. package/dist/learning/exhaustion-report.d.ts +136 -0
  181. package/dist/learning/exhaustion-report.d.ts.map +1 -0
  182. package/dist/learning/exhaustion-report.js +239 -0
  183. package/dist/learning/exhaustion-report.js.map +1 -0
  184. package/dist/learning/failure-bookkeeping.d.ts +16 -0
  185. package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
  186. package/dist/learning/failure-bookkeeping.js +51 -5
  187. package/dist/learning/failure-bookkeeping.js.map +1 -1
  188. package/dist/learning/gate-friction.d.ts +39 -0
  189. package/dist/learning/gate-friction.d.ts.map +1 -0
  190. package/dist/learning/gate-friction.js +91 -0
  191. package/dist/learning/gate-friction.js.map +1 -0
  192. package/dist/learning/harness-narration.d.ts +34 -0
  193. package/dist/learning/harness-narration.d.ts.map +1 -0
  194. package/dist/learning/harness-narration.js +58 -0
  195. package/dist/learning/harness-narration.js.map +1 -0
  196. package/dist/learning/hub-skill-catalog.d.ts.map +1 -1
  197. package/dist/learning/hub-skill-catalog.js +1 -2
  198. package/dist/learning/hub-skill-catalog.js.map +1 -1
  199. package/dist/learning/hybrid-router.d.ts +65 -0
  200. package/dist/learning/hybrid-router.d.ts.map +1 -1
  201. package/dist/learning/hybrid-router.js +186 -0
  202. package/dist/learning/hybrid-router.js.map +1 -1
  203. package/dist/learning/knowledge-base.d.ts +350 -0
  204. package/dist/learning/knowledge-base.d.ts.map +1 -0
  205. package/dist/learning/knowledge-base.js +906 -0
  206. package/dist/learning/knowledge-base.js.map +1 -0
  207. package/dist/learning/knowledge-eval.d.ts +171 -0
  208. package/dist/learning/knowledge-eval.d.ts.map +1 -0
  209. package/dist/learning/knowledge-eval.js +196 -0
  210. package/dist/learning/knowledge-eval.js.map +1 -0
  211. package/dist/learning/knowledge-turn.d.ts +92 -0
  212. package/dist/learning/knowledge-turn.d.ts.map +1 -0
  213. package/dist/learning/knowledge-turn.js +190 -0
  214. package/dist/learning/knowledge-turn.js.map +1 -0
  215. package/dist/learning/learned-commands.d.ts +64 -0
  216. package/dist/learning/learned-commands.d.ts.map +1 -0
  217. package/dist/learning/learned-commands.js +108 -0
  218. package/dist/learning/learned-commands.js.map +1 -0
  219. package/dist/learning/lexical-search.d.ts +50 -0
  220. package/dist/learning/lexical-search.d.ts.map +1 -0
  221. package/dist/learning/lexical-search.js +111 -0
  222. package/dist/learning/lexical-search.js.map +1 -0
  223. package/dist/learning/machine-facts.d.ts +71 -0
  224. package/dist/learning/machine-facts.d.ts.map +1 -0
  225. package/dist/learning/machine-facts.js +164 -0
  226. package/dist/learning/machine-facts.js.map +1 -0
  227. package/dist/learning/markdown-outline.d.ts +73 -0
  228. package/dist/learning/markdown-outline.d.ts.map +1 -0
  229. package/dist/learning/markdown-outline.js +136 -0
  230. package/dist/learning/markdown-outline.js.map +1 -0
  231. package/dist/learning/model-first-router.d.ts +33 -1
  232. package/dist/learning/model-first-router.d.ts.map +1 -1
  233. package/dist/learning/model-first-router.js +123 -9
  234. package/dist/learning/model-first-router.js.map +1 -1
  235. package/dist/learning/model-identity.d.ts +80 -0
  236. package/dist/learning/model-identity.d.ts.map +1 -0
  237. package/dist/learning/model-identity.js +115 -0
  238. package/dist/learning/model-identity.js.map +1 -0
  239. package/dist/learning/model-registry.d.ts +141 -2
  240. package/dist/learning/model-registry.d.ts.map +1 -1
  241. package/dist/learning/model-registry.js +324 -38
  242. package/dist/learning/model-registry.js.map +1 -1
  243. package/dist/learning/model-scoring.d.ts.map +1 -1
  244. package/dist/learning/model-scoring.js +8 -1
  245. package/dist/learning/model-scoring.js.map +1 -1
  246. package/dist/learning/model-selection.d.ts +2 -1
  247. package/dist/learning/model-selection.d.ts.map +1 -1
  248. package/dist/learning/model-selection.js +76 -2
  249. package/dist/learning/model-selection.js.map +1 -1
  250. package/dist/learning/outcome-observation.d.ts +49 -0
  251. package/dist/learning/outcome-observation.d.ts.map +1 -0
  252. package/dist/learning/outcome-observation.js +95 -0
  253. package/dist/learning/outcome-observation.js.map +1 -0
  254. package/dist/learning/pair-entitlement.d.ts +184 -0
  255. package/dist/learning/pair-entitlement.d.ts.map +1 -0
  256. package/dist/learning/pair-entitlement.js +214 -0
  257. package/dist/learning/pair-entitlement.js.map +1 -0
  258. package/dist/learning/project-docs.d.ts +83 -0
  259. package/dist/learning/project-docs.d.ts.map +1 -0
  260. package/dist/learning/project-docs.js +132 -0
  261. package/dist/learning/project-docs.js.map +1 -0
  262. package/dist/learning/provider-fallback.d.ts +23 -1
  263. package/dist/learning/provider-fallback.d.ts.map +1 -1
  264. package/dist/learning/provider-fallback.js +24 -0
  265. package/dist/learning/provider-fallback.js.map +1 -1
  266. package/dist/learning/quota-ledger.d.ts +13 -0
  267. package/dist/learning/quota-ledger.d.ts.map +1 -1
  268. package/dist/learning/quota-ledger.js +28 -0
  269. package/dist/learning/quota-ledger.js.map +1 -1
  270. package/dist/learning/reasoning-trace.d.ts +65 -1
  271. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  272. package/dist/learning/reasoning-trace.js +123 -1
  273. package/dist/learning/reasoning-trace.js.map +1 -1
  274. package/dist/learning/requirement-probe.d.ts +55 -0
  275. package/dist/learning/requirement-probe.d.ts.map +1 -0
  276. package/dist/learning/requirement-probe.js +77 -0
  277. package/dist/learning/requirement-probe.js.map +1 -0
  278. package/dist/learning/resilient-call.d.ts +20 -1
  279. package/dist/learning/resilient-call.d.ts.map +1 -1
  280. package/dist/learning/resilient-call.js +42 -4
  281. package/dist/learning/resilient-call.js.map +1 -1
  282. package/dist/learning/response-usability.d.ts +85 -0
  283. package/dist/learning/response-usability.d.ts.map +1 -0
  284. package/dist/learning/response-usability.js +135 -0
  285. package/dist/learning/response-usability.js.map +1 -0
  286. package/dist/learning/router-bandit.d.ts +132 -0
  287. package/dist/learning/router-bandit.d.ts.map +1 -1
  288. package/dist/learning/router-bandit.js +253 -0
  289. package/dist/learning/router-bandit.js.map +1 -1
  290. package/dist/learning/routing-history.d.ts +41 -2
  291. package/dist/learning/routing-history.d.ts.map +1 -1
  292. package/dist/learning/routing-history.js.map +1 -1
  293. package/dist/learning/run-trace.d.ts +21 -0
  294. package/dist/learning/run-trace.d.ts.map +1 -1
  295. package/dist/learning/run-trace.js +38 -0
  296. package/dist/learning/run-trace.js.map +1 -1
  297. package/dist/learning/seeded-benchmark.d.ts +14 -0
  298. package/dist/learning/seeded-benchmark.d.ts.map +1 -1
  299. package/dist/learning/seeded-benchmark.js +43 -4
  300. package/dist/learning/seeded-benchmark.js.map +1 -1
  301. package/dist/learning/session-grant.d.ts +75 -0
  302. package/dist/learning/session-grant.d.ts.map +1 -0
  303. package/dist/learning/session-grant.js +112 -0
  304. package/dist/learning/session-grant.js.map +1 -0
  305. package/dist/learning/task-model-continuity.d.ts +73 -0
  306. package/dist/learning/task-model-continuity.d.ts.map +1 -0
  307. package/dist/learning/task-model-continuity.js +87 -0
  308. package/dist/learning/task-model-continuity.js.map +1 -0
  309. package/dist/learning/turn-feedback.d.ts +93 -0
  310. package/dist/learning/turn-feedback.d.ts.map +1 -0
  311. package/dist/learning/turn-feedback.js +127 -0
  312. package/dist/learning/turn-feedback.js.map +1 -0
  313. package/dist/learning/turn-report.d.ts +104 -2
  314. package/dist/learning/turn-report.d.ts.map +1 -1
  315. package/dist/learning/turn-report.js +161 -6
  316. package/dist/learning/turn-report.js.map +1 -1
  317. package/dist/learning/verdict-routing.d.ts +51 -0
  318. package/dist/learning/verdict-routing.d.ts.map +1 -0
  319. package/dist/learning/verdict-routing.js +122 -0
  320. package/dist/learning/verdict-routing.js.map +1 -0
  321. package/dist/mcp/client.d.ts.map +1 -1
  322. package/dist/mcp/client.js +5 -0
  323. package/dist/mcp/client.js.map +1 -1
  324. package/dist/mcp/manager.d.ts +10 -0
  325. package/dist/mcp/manager.d.ts.map +1 -1
  326. package/dist/mcp/manager.js +20 -0
  327. package/dist/mcp/manager.js.map +1 -1
  328. package/dist/mcp/mcp-discovery.d.ts +34 -0
  329. package/dist/mcp/mcp-discovery.d.ts.map +1 -0
  330. package/dist/mcp/mcp-discovery.js +71 -0
  331. package/dist/mcp/mcp-discovery.js.map +1 -0
  332. package/dist/mcp/mcp-schema-cache.d.ts +17 -0
  333. package/dist/mcp/mcp-schema-cache.d.ts.map +1 -1
  334. package/dist/mcp/mcp-schema-cache.js +47 -3
  335. package/dist/mcp/mcp-schema-cache.js.map +1 -1
  336. package/dist/mcp/types.d.ts +28 -0
  337. package/dist/mcp/types.d.ts.map +1 -1
  338. package/dist/mcp/types.js.map +1 -1
  339. package/dist/security/secret-scan.d.ts +156 -0
  340. package/dist/security/secret-scan.d.ts.map +1 -0
  341. package/dist/security/secret-scan.js +525 -0
  342. package/dist/security/secret-scan.js.map +1 -0
  343. package/dist/tools/ask-user.d.ts.map +1 -1
  344. package/dist/tools/ask-user.js +4 -0
  345. package/dist/tools/ask-user.js.map +1 -1
  346. package/dist/tools/capability-registry.d.ts +150 -0
  347. package/dist/tools/capability-registry.d.ts.map +1 -0
  348. package/dist/tools/capability-registry.js +400 -0
  349. package/dist/tools/capability-registry.js.map +1 -0
  350. package/dist/tools/child-agent-runtime.d.ts.map +1 -1
  351. package/dist/tools/child-agent-runtime.js +19 -5
  352. package/dist/tools/child-agent-runtime.js.map +1 -1
  353. package/dist/tools/coding-tools.d.ts +17 -5
  354. package/dist/tools/coding-tools.d.ts.map +1 -1
  355. package/dist/tools/coding-tools.js +80 -11
  356. package/dist/tools/coding-tools.js.map +1 -1
  357. package/dist/tools/command-memo.d.ts +116 -0
  358. package/dist/tools/command-memo.d.ts.map +1 -0
  359. package/dist/tools/command-memo.js +202 -0
  360. package/dist/tools/command-memo.js.map +1 -0
  361. package/dist/tools/git-tool.d.ts.map +1 -1
  362. package/dist/tools/git-tool.js +13 -3
  363. package/dist/tools/git-tool.js.map +1 -1
  364. package/dist/tools/harness-directive.d.ts +42 -0
  365. package/dist/tools/harness-directive.d.ts.map +1 -0
  366. package/dist/tools/harness-directive.js +45 -0
  367. package/dist/tools/harness-directive.js.map +1 -0
  368. package/dist/tools/loop-skill-hint.d.ts +74 -174
  369. package/dist/tools/loop-skill-hint.d.ts.map +1 -1
  370. package/dist/tools/loop-skill-hint.js +110 -536
  371. package/dist/tools/loop-skill-hint.js.map +1 -1
  372. package/dist/tools/mcp-client-tool.d.ts +2 -0
  373. package/dist/tools/mcp-client-tool.d.ts.map +1 -1
  374. package/dist/tools/mcp-client-tool.js +3 -0
  375. package/dist/tools/mcp-client-tool.js.map +1 -1
  376. package/dist/tools/modality/shared.d.ts +1 -4
  377. package/dist/tools/modality/shared.d.ts.map +1 -1
  378. package/dist/tools/modality/shared.js +7 -22
  379. package/dist/tools/modality/shared.js.map +1 -1
  380. package/dist/tools/plan-store.d.ts +44 -4
  381. package/dist/tools/plan-store.d.ts.map +1 -1
  382. package/dist/tools/plan-store.js +93 -9
  383. package/dist/tools/plan-store.js.map +1 -1
  384. package/dist/tools/registry.d.ts +76 -3
  385. package/dist/tools/registry.d.ts.map +1 -1
  386. package/dist/tools/registry.js +623 -15
  387. package/dist/tools/registry.js.map +1 -1
  388. package/dist/tools/remediation-ladder.d.ts +91 -0
  389. package/dist/tools/remediation-ladder.d.ts.map +1 -0
  390. package/dist/tools/remediation-ladder.js +316 -0
  391. package/dist/tools/remediation-ladder.js.map +1 -0
  392. package/dist/tools/run-cli.d.ts.map +1 -1
  393. package/dist/tools/run-cli.js +29 -4
  394. package/dist/tools/run-cli.js.map +1 -1
  395. package/dist/tools/run-terminal.d.ts +11 -0
  396. package/dist/tools/run-terminal.d.ts.map +1 -1
  397. package/dist/tools/run-terminal.js +289 -10
  398. package/dist/tools/run-terminal.js.map +1 -1
  399. package/dist/tools/skills-hub.d.ts +7 -0
  400. package/dist/tools/skills-hub.d.ts.map +1 -1
  401. package/dist/tools/skills-hub.js +11 -2
  402. package/dist/tools/skills-hub.js.map +1 -1
  403. package/dist/tools/step-artifact.d.ts +35 -0
  404. package/dist/tools/step-artifact.d.ts.map +1 -0
  405. package/dist/tools/step-artifact.js +154 -0
  406. package/dist/tools/step-artifact.js.map +1 -0
  407. package/dist/tools/tool-loop.d.ts +327 -13
  408. package/dist/tools/tool-loop.d.ts.map +1 -1
  409. package/dist/tools/tool-loop.js +891 -66
  410. package/dist/tools/tool-loop.js.map +1 -1
  411. package/dist/tools/toolsets.js +4 -4
  412. package/dist/tools/toolsets.js.map +1 -1
  413. package/dist/tools/worktree.d.ts +11 -2
  414. package/dist/tools/worktree.d.ts.map +1 -1
  415. package/dist/tools/worktree.js +11 -2
  416. package/dist/tools/worktree.js.map +1 -1
  417. package/dist/utils/atomic-store.d.ts +53 -0
  418. package/dist/utils/atomic-store.d.ts.map +1 -0
  419. package/dist/utils/atomic-store.js +178 -0
  420. package/dist/utils/atomic-store.js.map +1 -0
  421. package/dist/utils/binary-probe.d.ts +25 -0
  422. package/dist/utils/binary-probe.d.ts.map +1 -0
  423. package/dist/utils/binary-probe.js +48 -0
  424. package/dist/utils/binary-probe.js.map +1 -0
  425. package/dist/utils/workspace-path.d.ts +50 -0
  426. package/dist/utils/workspace-path.d.ts.map +1 -0
  427. package/dist/utils/workspace-path.js +86 -0
  428. package/dist/utils/workspace-path.js.map +1 -0
  429. package/dist/web-dashboard/chat-console.d.ts +24 -0
  430. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  431. package/dist/web-dashboard/chat-console.js +38 -0
  432. package/dist/web-dashboard/chat-console.js.map +1 -1
  433. package/dist/web-dashboard/project-context.d.ts +27 -2
  434. package/dist/web-dashboard/project-context.d.ts.map +1 -1
  435. package/dist/web-dashboard/project-context.js +32 -2
  436. package/dist/web-dashboard/project-context.js.map +1 -1
  437. package/dist/web-dashboard/server.d.ts +40 -0
  438. package/dist/web-dashboard/server.d.ts.map +1 -1
  439. package/dist/web-dashboard/server.js +733 -15
  440. package/dist/web-dashboard/server.js.map +1 -1
  441. package/dist/web-dashboard/src/types.d.ts +236 -1
  442. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  443. package/dist/web-dashboard/workspace-guard.d.ts +18 -2
  444. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  445. package/dist/web-dashboard/workspace-guard.js +94 -12
  446. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  447. package/dist/web-dashboard/workspace-resolution.d.ts +87 -0
  448. package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -0
  449. package/dist/web-dashboard/workspace-resolution.js +105 -0
  450. package/dist/web-dashboard/workspace-resolution.js.map +1 -0
  451. package/package.json +1 -1
  452. package/src/web-dashboard/public/assets/index-tK8Y2qHB.css +1 -0
  453. package/src/web-dashboard/public/assets/index-zjbdJnO-.js +210 -0
  454. package/src/web-dashboard/public/assets/index-zjbdJnO-.js.map +1 -0
  455. package/src/web-dashboard/public/index.html +2 -2
  456. package/src/web-dashboard/public/assets/index-BrZcYhy6.js +0 -207
  457. package/src/web-dashboard/public/assets/index-BrZcYhy6.js.map +0 -1
  458. package/src/web-dashboard/public/assets/index-DsWczTa6.css +0 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Gate friction — how much the harness speaks to the model in a turn, summarized
3
+ * from reasoning traces so the dashboard can show the number.
4
+ *
5
+ * Counts every `gate` event (a bounded nudge: plan / verification / deliverable /
6
+ * permission / repeat / action / promise / self-review / diagnosis /
7
+ * malformed-call / prerequisite) and every `refusal` event (a tool declined a
8
+ * call). The per-turn distribution is the number Bundle 37b ("deliver gate text
9
+ * as an acted-on instruction") exists to reduce. This module is the READ side of
10
+ * `scripts/measure-gate-friction.mjs`, so the dashboard and the CLI report the
11
+ * same figure from the same rule.
12
+ *
13
+ * It also counts narration (Bundle 39): a turn whose final answer reuses the
14
+ * harness's own distinctive vocabulary — see `harness-narration.ts`.
15
+ */
16
+ import { detectHarnessNarration } from './harness-narration.js';
17
+ function normalize(raw) {
18
+ const list = Array.isArray(raw)
19
+ ? raw
20
+ : raw && typeof raw === 'object' && Array.isArray(raw.traces)
21
+ ? raw.traces
22
+ : [];
23
+ return list.filter((t) => Boolean(t) && typeof t === 'object');
24
+ }
25
+ function finalText(trace) {
26
+ const steps = trace.steps ?? [];
27
+ for (let i = steps.length - 1; i >= 0; i--) {
28
+ const t = steps[i]?.responsePreview;
29
+ if (t && String(t).trim())
30
+ return String(t);
31
+ }
32
+ return '';
33
+ }
34
+ export function summarizeGateFriction(raw) {
35
+ const traces = normalize(raw);
36
+ const byKey = new Map();
37
+ const perTurn = [];
38
+ let narrated = 0;
39
+ let echoed = 0;
40
+ for (const trace of traces) {
41
+ let total = 0;
42
+ const harnessTexts = [];
43
+ for (const e of trace.events ?? []) {
44
+ if (!e)
45
+ continue;
46
+ if (e.kind === 'gate') {
47
+ const key = `gate:${e.gate || 'unknown'}`;
48
+ byKey.set(key, (byKey.get(key) ?? 0) + 1);
49
+ total += 1;
50
+ if (e.summary)
51
+ harnessTexts.push(e.summary);
52
+ }
53
+ else if (e.kind === 'refusal') {
54
+ const key = `refusal:${e.gate || e.tool || 'unknown'}`;
55
+ byKey.set(key, (byKey.get(key) ?? 0) + 1);
56
+ total += 1;
57
+ if (e.summary)
58
+ harnessTexts.push(e.summary);
59
+ if (e.result)
60
+ harnessTexts.push(e.result);
61
+ }
62
+ }
63
+ perTurn.push(total);
64
+ if (harnessTexts.length > 0) {
65
+ const text = finalText(trace);
66
+ if (text.includes('[harness]'))
67
+ echoed += 1;
68
+ if (detectHarnessNarration(text, harnessTexts).narrated)
69
+ narrated += 1;
70
+ }
71
+ }
72
+ const sorted = [...perTurn].sort((a, b) => a - b);
73
+ const sum = sorted.reduce((n, v) => n + v, 0);
74
+ const at = (p) => (sorted.length ? sorted[Math.min(sorted.length - 1, Math.floor(p * sorted.length))] : 0);
75
+ return {
76
+ traces: traces.length,
77
+ events: sum,
78
+ perTurn: {
79
+ mean: sorted.length ? Math.round((sum / sorted.length) * 100) / 100 : 0,
80
+ median: at(0.5),
81
+ p90: at(0.9),
82
+ max: sorted.length ? sorted[sorted.length - 1] : 0,
83
+ turnsWithAny: perTurn.filter((n) => n > 0).length,
84
+ },
85
+ byGate: [...byKey.entries()]
86
+ .map(([key, count]) => ({ key, count }))
87
+ .sort((a, b) => b.count - a.count),
88
+ narration: { turns: narrated, echoedMarker: echoed },
89
+ };
90
+ }
91
+ //# sourceMappingURL=gate-friction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-friction.js","sourceRoot":"","sources":["../../src/learning/gate-friction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Harness-narration detection — did the model NARRATE the harness back at the
3
+ * user instead of acting on it?
4
+ *
5
+ * WHY THIS EXISTS. Bundle 37b made every gate nudge a marked `[harness]`
6
+ * `system` directive so the model would act on it rather than answer it. That
7
+ * change is only worth having if it is VERIFIABLE on live traces: some turns
8
+ * would still produce prose ABOUT the harness (`"the command guard misfired on a
9
+ * read-only check, so verification was…"`) instead of quietly continuing.
10
+ *
11
+ * HOW IT DETECTS, WITHOUT A PHRASE LIST. It does not look for words like
12
+ * "guard" or "misfire" — that would be a hand-written list of user phrasings,
13
+ * which this codebase forbids. Instead it takes the harness's OWN text (the
14
+ * refusals and gate summaries the trace recorded for that turn) and asks whether
15
+ * the model's answer reuses a DISTINCTIVE token from it: a hyphenated compound
16
+ * (`state-changing`, `read-only`) or a long word (≥10 chars). Those are the
17
+ * tokens that carry the harness's specific vocabulary; a shared one means the
18
+ * model is quoting the loop's language rather than talking about the task.
19
+ *
20
+ * The vocabulary is DERIVED at runtime from the harness's own strings, so it
21
+ * tracks whatever the harness actually says — it can never drift from a list.
22
+ *
23
+ * It is a REPORTER, not a gate: it never changes what the turn does. It exists so
24
+ * "the model stopped narrating the harness" is a measurement (see
25
+ * `scripts/detect-harness-narration.mjs`).
26
+ */
27
+ export interface NarrationVerdict {
28
+ narrated: boolean;
29
+ /** The distinctive tokens the answer shares with the harness text. */
30
+ matches: string[];
31
+ }
32
+ /** The pure check. `harnessTexts` are the harness's own strings for this turn. */
33
+ export declare function detectHarnessNarration(finalText: string, harnessTexts: Array<string | undefined | null>): NarrationVerdict;
34
+ //# sourceMappingURL=harness-narration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-narration.d.ts","sourceRoot":"","sources":["../../src/learning/harness-narration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAiBD,kFAAkF;AAClF,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAC7C,gBAAgB,CASlB"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Harness-narration detection — did the model NARRATE the harness back at the
3
+ * user instead of acting on it?
4
+ *
5
+ * WHY THIS EXISTS. Bundle 37b made every gate nudge a marked `[harness]`
6
+ * `system` directive so the model would act on it rather than answer it. That
7
+ * change is only worth having if it is VERIFIABLE on live traces: some turns
8
+ * would still produce prose ABOUT the harness (`"the command guard misfired on a
9
+ * read-only check, so verification was…"`) instead of quietly continuing.
10
+ *
11
+ * HOW IT DETECTS, WITHOUT A PHRASE LIST. It does not look for words like
12
+ * "guard" or "misfire" — that would be a hand-written list of user phrasings,
13
+ * which this codebase forbids. Instead it takes the harness's OWN text (the
14
+ * refusals and gate summaries the trace recorded for that turn) and asks whether
15
+ * the model's answer reuses a DISTINCTIVE token from it: a hyphenated compound
16
+ * (`state-changing`, `read-only`) or a long word (≥10 chars). Those are the
17
+ * tokens that carry the harness's specific vocabulary; a shared one means the
18
+ * model is quoting the loop's language rather than talking about the task.
19
+ *
20
+ * The vocabulary is DERIVED at runtime from the harness's own strings, so it
21
+ * tracks whatever the harness actually says — it can never drift from a list.
22
+ *
23
+ * It is a REPORTER, not a gate: it never changes what the turn does. It exists so
24
+ * "the model stopped narrating the harness" is a measurement (see
25
+ * `scripts/detect-harness-narration.mjs`).
26
+ */
27
+ /**
28
+ * Tokens specific enough to signal the harness's vocabulary: hyphenated
29
+ * compounds, or long words. Deliberately NOT common prose (which is why a short
30
+ * word can never match).
31
+ */
32
+ function distinctiveTokens(text) {
33
+ const out = new Set();
34
+ for (const raw of String(text ?? '').toLowerCase().split(/[^a-z0-9-]+/)) {
35
+ const t = raw.replace(/^-+|-+$/g, '');
36
+ if (!t)
37
+ continue;
38
+ if (t.length >= 10 || (t.includes('-') && t.length >= 6))
39
+ out.add(t);
40
+ }
41
+ return out;
42
+ }
43
+ /** The pure check. `harnessTexts` are the harness's own strings for this turn. */
44
+ export function detectHarnessNarration(finalText, harnessTexts) {
45
+ const said = distinctiveTokens(finalText);
46
+ if (said.size === 0)
47
+ return { narrated: false, matches: [] };
48
+ const matches = new Set();
49
+ for (const h of harnessTexts) {
50
+ if (!h)
51
+ continue;
52
+ for (const t of distinctiveTokens(h))
53
+ if (said.has(t))
54
+ matches.add(t);
55
+ }
56
+ return { narrated: matches.size > 0, matches: [...matches].sort() };
57
+ }
58
+ //# sourceMappingURL=harness-narration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-narration.js","sourceRoot":"","sources":["../../src/learning/harness-narration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAQH;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACxE,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,YAA8C;IAE9C,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC;YAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACtE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hub-skill-catalog.d.ts","sourceRoot":"","sources":["../../src/learning/hub-skill-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-skill-catalog.d.ts","sourceRoot":"","sources":["../../src/learning/hub-skill-catalog.ts"],"names":[],"mappings":"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"}
@@ -348,8 +348,7 @@ export function findHubSkillMatch(goal, cm, projectRoot = process.cwd(), home =
348
348
  // "s**kill**", which ranked `feature-flags` top for "no skill covers alpaca
349
349
  // husbandry whatsoever". The same class makes `mac` match "machine" and
350
350
  // `arch` match "search". Tokenizing once also keeps this ranking consistent
351
- // with the caller's evidence gate (`hasRealGoalEvidence`), so the scorer
352
- // cannot nominate a skill the gate then rejects.
351
+ // with whole-word matching elsewhere in the skill layer. NOTE: the auto-
353
352
  const tokens = new Set(q.split(/[^a-z0-9]+/).filter((w) => w.length > 0));
354
353
  const scored = skills.map((skill) => {
355
354
  let score = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"hub-skill-catalog.js","sourceRoot":"","sources":["../../src/learning/hub-skill-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-skill-catalog.js","sourceRoot":"","sources":["../../src/learning/hub-skill-catalog.ts"],"names":[],"mappings":"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"}
@@ -76,13 +76,78 @@ export interface HybridRouterOptions {
76
76
  /** Whether to use runtime agent stats to adjust model selection (default: false) */
77
77
  useRuntimeStats?: boolean;
78
78
  }
79
+ /**
80
+ * The requirement UNITS an ask enumerates: its list items.
81
+ *
82
+ * Split on the separators that structure a request (a colon that introduces a
83
+ * list, semicolons, newlines, bullet markers, numbered markers) and keep the
84
+ * substantive ones. Deliberately NOT split on "and" or commas — "PDF, TXT,
85
+ * Markdown" is ONE requirement with three file types, and counting it three
86
+ * times would inflate every ask that mentions a list.
87
+ */
88
+ export declare function requirementUnits(text: string): string[];
89
+ export declare function stripInjectedContext(text: string): string;
90
+ /**
91
+ * MEASURED breadth: how many requirement units, and how many distinct areas of
92
+ * work. Exported so a test (and any future explain surface) can state WHY a
93
+ * level was reached instead of asserting it blindly.
94
+ *
95
+ * Item 9 — measured on the ask, never on the harness's own injected banners (see
96
+ * `stripInjectedContext`).
97
+ */
98
+ export declare function measureTaskBreadth(text: string): {
99
+ units: number;
100
+ areas: number;
101
+ areaNames: string[];
102
+ };
79
103
  /**
80
104
  * Analyze a task description or user goal to determine its complexity level.
81
105
  *
106
+ * Two signals, and the HIGHER one wins:
107
+ * 1. the keyword ladder (vocabulary — what the ask says),
108
+ * 2. the breadth floor (shape — how much separable work it enumerates).
109
+ *
110
+ * B5, measured before/after: the parity task above rated `moderate` on the
111
+ * ladder alone (only `build` matched) and rates `complex` with the shape
112
+ * measured (4 units, 5 areas: ingestion / embeddings / generation+retrieval /
113
+ * frontend / persistence). The floor can only RAISE a level — a task whose words
114
+ * already say `critical` still says `critical`, because size must never talk the
115
+ * router down from urgency.
116
+ *
82
117
  * @param text — The task description or user goal
83
118
  * @returns The detected complexity level
84
119
  */
85
120
  export declare function analyzeComplexity(text: string): ComplexityLevel;
121
+ /**
122
+ * Is this message NOTHING BUT a greeting?
123
+ *
124
+ * B2 — WHY A PREDICATE AND NOT THREE `includes()` CALLS. Both
125
+ * `estimateTaskRequirements` implementations used to decide this with
126
+ * `desc.includes('hello') || desc.includes('hi') || desc.includes('greeting')`,
127
+ * and `'hi'` is a SUBSTRING of `this`, `which`, `anything`, `nothing`,
128
+ * `shift`, `crashing`, `architecture`, `graphify`… Measured against the 160
129
+ * distinct tasks in `~/.nuvira/memory/routing-history.json`: **77 of them**
130
+ * matched the substring while containing no greeting at all, and 81/160 landed
131
+ * on `reasoningNeed: 'low'` (only 2 on `'high'`). `low` is not cosmetic — it
132
+ * flips the candidate weights to cost 0.30 / capabilityFit 0.15 and inverts
133
+ * `capabilityFit` to PREFER small models, so a multi-provider engineering ask
134
+ * was ranked `gemini/gemma-4-26b-a4b-it` (4B active) #1, `local/qwen2.5:0.5b`
135
+ * #2, `gemini/allam-2-7b` #3 — the run that then fell through three providers.
136
+ *
137
+ * The intent is narrow: answering a bare "hi" should not provision a frontier
138
+ * model. A greeting BURIED IN A REAL ASK is not that case, and neither is the
139
+ * word "this". So the test is not "does it contain a greeting word" but "is
140
+ * there nothing here but a greeting and pleasantries": the greeting is removed
141
+ * and what remains must be empty or filler. `"hi"` → true; `"hi there!"` →
142
+ * true; `"hello, how are you?"` → true; `"hi, build me a RAG pipeline"` →
143
+ * false (that is a task that happens to open politely); `"this will work"` →
144
+ * false (no greeting word at all).
145
+ *
146
+ * Shared from here so the two routers cannot drift apart on it again —
147
+ * `model-first-router.ts` and `model-scoring.ts` previously carried two copies
148
+ * of this rule that already disagreed about other phrases.
149
+ */
150
+ export declare function isSmallTalk(text: string): boolean;
86
151
  /**
87
152
  * Build a fallback chain for a given agent type and complexity.
88
153
  * The chain is ordered: primary → secondary → tertiary.
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-router.d.ts","sourceRoot":"","sources":["../../src/learning/hybrid-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hybrid-router.d.ts","sourceRoot":"","sources":["../../src/learning/hybrid-router.ts"],"names":[],"mappings":"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"}
@@ -55,13 +55,199 @@ const COMPLEXITY_KEYWORDS = {
55
55
  /data\s+(loss|breach|corruption)/i,
56
56
  ],
57
57
  };
58
+ /**
59
+ * The separable AREAS of work an ask names.
60
+ *
61
+ * B5 — WHY BREADTH IS MEASURED AT ALL. The keyword ladder below reads
62
+ * VOCABULARY, and vocabulary is a poor proxy for size. The measured case: the
63
+ * parity task *"Build a knowledge base web app where users can: upload documents
64
+ * (PDF, TXT, Markdown); automatically extract embeddings (FAISS or Milvus); query
65
+ * the knowledge base using an LLM (via adapters like Groq, Gemini, DeepSeek); view
66
+ * results in a React dashboard."* names FOUR separable subsystems and eight
67
+ * technologies, and rated `moderate` — because the only keyword that matched was
68
+ * `build`, which is a `moderate` word. `/architecture/` never appears; nobody
69
+ * writes "architect" when they write a requirements list.
70
+ *
71
+ * So the ask's SHAPE is measured too: how many distinct areas of work it names.
72
+ * An ask that spans ingestion, embeddings, retrieval/generation and a UI is not a
73
+ * moderate task whatever verb introduces it. The area set is deliberately coarse
74
+ * (twelve areas, one regex each) — the question is "how many different kinds of
75
+ * work", not "how many words are in my list", and a finer set would start
76
+ * counting synonyms as subsystems.
77
+ *
78
+ * ITEM 9 — MEASURED AGAINST THE REAL CORPUS, AND WHAT IT FOUND. Run over all 500
79
+ goals in `~/.nuvira/memory/routing-history.json`, this set fired on 30 goals with
80
+ ≥ 3 areas (the breadth floor fires on 20). The measurement also found a real
81
+ defect: 66 of those goals carry a bracketed banner the HARNESS itself injects
82
+ (`[Origin: …]` from the gateway, `[Image: …]` from inbound media), and matching
83
+ that scaffolding as if it were the user's requirements inflated the dominant area
84
+ — `integration`, which matches `whatsapp`/`telegram`/`slack` — from 35 genuine
85
+ hits to 98. **63 of 98 were the harness's own text.** The fix is below
86
+ (`stripInjectedContext`); the SET itself stays hand-written on purpose, because a
87
+ learned set can only be validated against a labeled corpus and none exists (the
88
+ same missing ground truth as items 4/13) — what CAN be measured is whether the
89
+ measurer is reading the ask or reading itself, and that is what changed.
90
+ */
91
+ const CAPABILITY_AREA_RE = [
92
+ ['ingestion', /upload|ingest|import|parse|extract\s+(?:text|data|content)|attachment/i],
93
+ ['embeddings', /embedding|vector|faiss|milvus|pinecone|chroma|weaviate|semantic\s+(?:search|index)|training|fine[- ]?tun/i],
94
+ ['generation', /\bllm\b|gpt|claude|gemini|deepseek|groq|openai|anthropic|prompt|rag\b|adapter/i],
95
+ ['retrieval', /retriev|rank|relevance|\bindex(?:ing)?\b|\bsearch\b|quer(?:y|ies)/i],
96
+ ['frontend', /dashboard|front[- ]?end|\bui\b|\bux\b|react|vue|svelte|component|screen|\bpage\b|html|css/i],
97
+ ['backend', /\bapi\b|\bserver\b|endpoint|back[- ]?end|rest\b|graphql|\bservice\b|\broute[s]?\b/i],
98
+ ['persistence', /database|storage|persist|\bschema\b|migration|\bsql\b|postgres|mongo|sqlite|redis|\btable[s]?\b/i],
99
+ ['auth', /auth|login|sign[- ]?up|permission|\brole[s]?\b|session|token|oauth/i],
100
+ ['realtime', /realtime|real[- ]time|websocket|\bsocket\b|stream|pubsub|\bqueue\b|worker|\bjob[s]?\b|cron/i],
101
+ ['testing', /\btest[s]?\b|\bspec[s]?\b|coverage|vitest|jest|pytest|e2e|assertion/i],
102
+ ['deploy', /deploy|docker|kubernetes|\bci\/cd\b|pipeline|container|cloud|\baws\b|\bgcp\b|azure|infrastructure/i],
103
+ ['integration', /webhook|integration|third[- ]party|payment|stripe|\bemail\b|\bsms\b|notification|slack|whatsapp|telegram/i],
104
+ ];
105
+ /**
106
+ * The requirement UNITS an ask enumerates: its list items.
107
+ *
108
+ * Split on the separators that structure a request (a colon that introduces a
109
+ * list, semicolons, newlines, bullet markers, numbered markers) and keep the
110
+ * substantive ones. Deliberately NOT split on "and" or commas — "PDF, TXT,
111
+ * Markdown" is ONE requirement with three file types, and counting it three
112
+ * times would inflate every ask that mentions a list.
113
+ */
114
+ export function requirementUnits(text) {
115
+ return stripInjectedContext(text)
116
+ .split(/[:;\n]|(?:^|\s)[-*\u2022]\s|(?:^|\s)\d+[.)]\s/)
117
+ .map((u) => u.trim())
118
+ // A fragment this short is a label or a lead-in ("Requirements"), not a unit.
119
+ .filter((u) => u.length >= 10);
120
+ }
121
+ /**
122
+ * Item 9 — strip the harness's OWN injected context before measuring an ask.
123
+ *
124
+ * MEASURED over the 500 real goals in `routing-history.json`: 66 carry a bracketed
125
+ * banner this product adds itself — `[Origin: …]` (`gateway/registry.ts`) and
126
+ * `[Image: …]` (`gateway/inbound-media.ts`). Counting those as the user's
127
+ * requirements inflated the dominant area, `integration` (which matches
128
+ * `whatsapp`/`telegram`/`slack`), from **35 genuine hits to 98 — 63 of 98 were the
129
+ * harness's own scaffolding** — and added **64 spurious requirement units**, because
130
+ * a banner's `:` is a list separator. A measurer that counts its own text measures
131
+ * itself, not the ask.
132
+ *
133
+ * Deliberately TARGETED to the known banner prefixes: a blanket `[…⇒` strip also
134
+ * removed genuine user text (measured: it wrongly dropped 12 real `frontend` hits),
135
+ * which would trade one false signal for another.
136
+ */
137
+ const INJECTED_CONTEXT_RE = /\[(?:Origin|Image|Attached|File):[^\]]*\]/g;
138
+ export function stripInjectedContext(text) {
139
+ return (text ?? '').replace(INJECTED_CONTEXT_RE, ' ');
140
+ }
141
+ /**
142
+ * MEASURED breadth: how many requirement units, and how many distinct areas of
143
+ * work. Exported so a test (and any future explain surface) can state WHY a
144
+ * level was reached instead of asserting it blindly.
145
+ *
146
+ * Item 9 — measured on the ask, never on the harness's own injected banners (see
147
+ * `stripInjectedContext`).
148
+ */
149
+ export function measureTaskBreadth(text) {
150
+ const clean = stripInjectedContext(text);
151
+ const areaNames = CAPABILITY_AREA_RE.filter(([, re]) => re.test(clean)).map(([name]) => name);
152
+ return { units: requirementUnits(clean).length, areas: areaNames.length, areaNames };
153
+ }
154
+ /**
155
+ * The breadth FLOOR: the level an ask's size alone justifies, or null.
156
+ *
157
+ * Both thresholds must be met — three or more enumerated requirements spanning
158
+ * three or more areas of work — and requiring BOTH is what keeps this from firing
159
+ * on an ordinary request that merely mentions several technologies ("build a todo
160
+ * app with React and localStorage" is one requirement and one area, so `moderate`
161
+ * stays right) or that enumerates a single area at length ("read a CSV; print a
162
+ * table; write a JSON file" is 4 units but 0 named areas).
163
+ *
164
+ * Measured at both thresholds, then chosen: `areas >= 4` missed a four-component
165
+ * ask that named Stripe + Postgres + React + email (5 units, exactly 3 areas), and
166
+ * every false-positive shape above has units 1 or 2, so the looser area bar costs
167
+ * nothing. It cannot reach `critical` in any case: breadth establishes SIZE, and
168
+ * `critical` is about urgency and blast radius, which size alone does not imply.
169
+ */
170
+ function breadthFloor(text) {
171
+ const { units, areas } = measureTaskBreadth(text);
172
+ if (units >= 3 && areas >= 3)
173
+ return 'complex';
174
+ return null;
175
+ }
176
+ /** Ordering so two levels can be compared (a floor may only RAISE a level). */
177
+ const LEVEL_RANK = {
178
+ trivial: 0,
179
+ simple: 1,
180
+ moderate: 2,
181
+ complex: 3,
182
+ critical: 4,
183
+ };
58
184
  /**
59
185
  * Analyze a task description or user goal to determine its complexity level.
60
186
  *
187
+ * Two signals, and the HIGHER one wins:
188
+ * 1. the keyword ladder (vocabulary — what the ask says),
189
+ * 2. the breadth floor (shape — how much separable work it enumerates).
190
+ *
191
+ * B5, measured before/after: the parity task above rated `moderate` on the
192
+ * ladder alone (only `build` matched) and rates `complex` with the shape
193
+ * measured (4 units, 5 areas: ingestion / embeddings / generation+retrieval /
194
+ * frontend / persistence). The floor can only RAISE a level — a task whose words
195
+ * already say `critical` still says `critical`, because size must never talk the
196
+ * router down from urgency.
197
+ *
61
198
  * @param text — The task description or user goal
62
199
  * @returns The detected complexity level
63
200
  */
64
201
  export function analyzeComplexity(text) {
202
+ const fromKeywords = complexityFromKeywords(text ?? '');
203
+ const floor = breadthFloor(text ?? '');
204
+ if (floor && LEVEL_RANK[floor] > LEVEL_RANK[fromKeywords])
205
+ return floor;
206
+ return fromKeywords;
207
+ }
208
+ /**
209
+ * Is this message NOTHING BUT a greeting?
210
+ *
211
+ * B2 — WHY A PREDICATE AND NOT THREE `includes()` CALLS. Both
212
+ * `estimateTaskRequirements` implementations used to decide this with
213
+ * `desc.includes('hello') || desc.includes('hi') || desc.includes('greeting')`,
214
+ * and `'hi'` is a SUBSTRING of `this`, `which`, `anything`, `nothing`,
215
+ * `shift`, `crashing`, `architecture`, `graphify`… Measured against the 160
216
+ * distinct tasks in `~/.nuvira/memory/routing-history.json`: **77 of them**
217
+ * matched the substring while containing no greeting at all, and 81/160 landed
218
+ * on `reasoningNeed: 'low'` (only 2 on `'high'`). `low` is not cosmetic — it
219
+ * flips the candidate weights to cost 0.30 / capabilityFit 0.15 and inverts
220
+ * `capabilityFit` to PREFER small models, so a multi-provider engineering ask
221
+ * was ranked `gemini/gemma-4-26b-a4b-it` (4B active) #1, `local/qwen2.5:0.5b`
222
+ * #2, `gemini/allam-2-7b` #3 — the run that then fell through three providers.
223
+ *
224
+ * The intent is narrow: answering a bare "hi" should not provision a frontier
225
+ * model. A greeting BURIED IN A REAL ASK is not that case, and neither is the
226
+ * word "this". So the test is not "does it contain a greeting word" but "is
227
+ * there nothing here but a greeting and pleasantries": the greeting is removed
228
+ * and what remains must be empty or filler. `"hi"` → true; `"hi there!"` →
229
+ * true; `"hello, how are you?"` → true; `"hi, build me a RAG pipeline"` →
230
+ * false (that is a task that happens to open politely); `"this will work"` →
231
+ * false (no greeting word at all).
232
+ *
233
+ * Shared from here so the two routers cannot drift apart on it again —
234
+ * `model-first-router.ts` and `model-scoring.ts` previously carried two copies
235
+ * of this rule that already disagreed about other phrases.
236
+ */
237
+ export function isSmallTalk(text) {
238
+ const lower = (text ?? '').toLowerCase();
239
+ // `\b` on both sides: a greeting is a whole word, never a fragment of one.
240
+ const greetingRe = /\b(?:hello|hi|hey|howdy|greetings?|good\s+(?:morning|afternoon|evening))\b/g;
241
+ const stripped = lower.replace(greetingRe, ' ');
242
+ // No greeting word at all — including "this", "which", "anything".
243
+ if (stripped === lower)
244
+ return false;
245
+ // What is left must be punctuation and pleasantries, nothing that names work.
246
+ const fillerRe = /^(?:[\s,.!?~\-—–:;'"()\[\]]|"(?:s|t|re|ll|ve|d|m)"|\b(?:there|again|all|everyone|folks|team|buddy|mate|please|pls|thanks|thank|you|thx|and|ok|okay|k|so|just|now|yes|yeah|yep|sure|whats|what's|up|how|are|is|it|going|doing|was|were|been|im|i'm|am)\b)*$/;
247
+ return fillerRe.test(stripped);
248
+ }
249
+ /** The keyword ladder, unchanged — the vocabulary half of the decision. */
250
+ function complexityFromKeywords(text) {
65
251
  // Check critical first (highest priority)
66
252
  for (const keyword of COMPLEXITY_KEYWORDS.critical) {
67
253
  if (keyword.test(text))