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
@@ -64,7 +64,7 @@ import { scanForInjections, formatScanReport } from '../security/scanner.js';
64
64
  import { withLogCorrelation } from '../enterprise/log.js';
65
65
  import { withAgentAnswerQualityGate } from './answer-quality-gate.js';
66
66
  import { getMetrics } from '../enterprise/metrics.js';
67
- import { getAutoRouter, isAgenticTask, isAutoModel, isAutoProvider, } from '../learning/auto-router.js';
67
+ import { getAutoRouter, isAgentAutoRoute, isAgenticTask, isAutoModel, isAutoProvider, isProviderOwnAuto, } from '../learning/auto-router.js';
68
68
  import { isAgenticCapableModel } from '../learning/model-harness.js';
69
69
  import { weakRouteNotice } from '../learning/agentic-route-gate.js';
70
70
  import { analyzeComplexity } from '../learning/hybrid-router.js';
@@ -166,6 +166,33 @@ export const DEFAULT_USE_TOOL_CALLING = true;
166
166
  export function resolveUseToolCalling(options) {
167
167
  return options.useToolCalling ?? DEFAULT_USE_TOOL_CALLING;
168
168
  }
169
+ /**
170
+ * A5 — the trace-capture context for a pipeline HOUSEKEEPING call (the planner,
171
+ * memory retrieval, trajectory summarization, self-improvement), or `null` when
172
+ * the call must NOT be wrapped again.
173
+ *
174
+ * WHY THIS EXISTS. Those calls all run through `defaultCallLLM`, and each used to
175
+ * be wrapped at its use site with no provider/model:
176
+ * - in AUTO mode `defaultCallLLM` is already traced by `createAutoRoutedLLM`, so
177
+ * the second wrap logged every housekeeping call TWICE — once routed, once
178
+ * `unknown/unknown` (the duplicate the planner already guarded against);
179
+ * - on the EXPLICIT (pinned) path it is raw and must be wrapped — and NAMED, or
180
+ * the step recorded `unknown/unknown` even though `options.provider/model`
181
+ * were known, leaving the trace unable to say which model ran.
182
+ * `null` means "already traced — reuse it". The explicit context carries the
183
+ * audit route when one is known; `resolveAuditRoute` is best-effort and leaves
184
+ * its own `unknown` marker when nothing is known, exactly as before.
185
+ */
186
+ export function housekeepingTraceContext(autoRoutingActive, base, audit) {
187
+ if (autoRoutingActive)
188
+ return null;
189
+ const context = { ...base };
190
+ if (audit?.provider)
191
+ context.provider = audit.provider;
192
+ if (audit?.model)
193
+ context.model = audit.model;
194
+ return context;
195
+ }
169
196
  export class Orchestrator {
170
197
  configManager;
171
198
  /** The module registry used for agent lookups */
@@ -515,7 +542,7 @@ export class Orchestrator {
515
542
  // AutoModelRouter so no call ever sends a literal 'auto' model to a real API.
516
543
  // Matches executeSingleTask's rule: an explicit --model always wins.
517
544
  const autoRoutingActive = (options.autoRouteModels === true && !options.model) ||
518
- isAutoModel(options.model) || isAutoProvider(options.provider);
545
+ isAgentAutoRoute(options.provider, options.model);
519
546
  // Cold-start learning: when auto routing is active but the registry has ZERO
520
547
  // verified providers (fresh install / stale store), fire ONE background probe
521
548
  // pass so later tasks in this pipeline — and the next session — route on
@@ -572,22 +599,27 @@ export class Orchestrator {
572
599
  const defaultCallLLM = autoRoutingActive
573
600
  ? this.createAutoRoutedLLM({ agentType: 'planner', description: goal }, options)
574
601
  : this.createLLMProvider(options);
575
- // P0 reasoning trace: the planner + memory + trajectory calls share the
576
- // raw defaultCallLLM, so wrap AT EACH USE SITE (never at creation) — a
577
- // task fallback re-uses defaultCallLLM and wrapping it here would cause
578
- // every task call to be recorded twice (once as planner, once as task).
602
+ // P0 reasoning trace: the planner + memory + trajectory + self-improver
603
+ // calls share `defaultCallLLM`, so they are wrapped at ONE use-site helper
604
+ // (never at creation) — a task fallback re-uses defaultCallLLM, and wrapping
605
+ // it at creation would record every task call twice (planner and task).
579
606
  //
580
- // FIX: When auto-routing is active, createAutoRoutedLLMFromDecision already
581
- // wraps with withTraceCapture — adding another layer causes DUPLICATE trace
582
- // entries (the same call logged twice with 'unknown/unknown' provider info).
583
- // Only wrap when NOT auto-routing (explicit provider path).
584
- const plannerCallLLM = autoRoutingActive
585
- ? defaultCallLLM
586
- : withTraceCapture(defaultCallLLM, {
587
- traceId: this.activeTraceId ?? '',
588
- agentType: 'planner',
589
- description: goal,
590
- });
607
+ // A5 — THE HOUSEKEEPING STEPS WERE NOT NAMED, AND IN AUTO MODE WERE LOGGED
608
+ // TWICE. Two facts, one helper:
609
+ // - When auto-routing is active `defaultCallLLM` is ALREADY traced by
610
+ // `createAutoRoutedLLM`, so wrapping it again logged each housekeeping
611
+ // call twice (once 'unknown/unknown', once routed). The planner guarded
612
+ // against this; memory/trajectory/self-improver did not.
613
+ // - On the explicit (pinned) path the wrapper carried NO provider/model, so
614
+ // the step recorded `unknown/unknown` even though the pair was known.
615
+ // Reuse the already-traced LLM when auto-routing, and attribute the step to
616
+ // the audit route otherwise. `resolveAuditRoute` is best-effort and leaves
617
+ // its own 'unknown' marker when nothing is known, exactly as before.
618
+ const housekeepingCallLLM = (agentType, description) => {
619
+ const context = housekeepingTraceContext(autoRoutingActive, { traceId: this.activeTraceId ?? '', agentType, description }, this.resolveAuditRoute(options));
620
+ return context ? withTraceCapture(defaultCallLLM, context) : defaultCallLLM;
621
+ };
622
+ const plannerCallLLM = housekeepingCallLLM('planner', goal);
591
623
  // On resume, seed the report with the steps already finished in the original
592
624
  // run (completed/failed) so the final agent breakdown is complete — these
593
625
  // steps are never re-executed, but they still count toward the summary.
@@ -696,11 +728,7 @@ export class Orchestrator {
696
728
  // plus the is_trivial_prompt gate — a one-word goal returns empty
697
729
  // without touching the stores.
698
730
  const { getMemoryManager } = await import('../memory/manager.js');
699
- const memoryResult = await getMemoryManager().buildMemoryBlock(goal, withTraceCapture(defaultCallLLM, {
700
- traceId: this.activeTraceId ?? '',
701
- agentType: 'memory',
702
- description: `Memory retrieval for: ${goal.slice(0, 80)}`,
703
- }));
731
+ const memoryResult = await getMemoryManager().buildMemoryBlock(goal, housekeepingCallLLM('memory', `Memory retrieval for: ${goal.slice(0, 80)}`));
704
732
  // The manager composes the FULL persistent-memory block (provider's
705
733
  // static system block framing the per-field recall). Consume it
706
734
  // directly — the old re-composition here was redundant work.
@@ -770,109 +798,33 @@ export class Orchestrator {
770
798
  // ── 3b. Auto-route models ─────────────────────────────────────────────
771
799
  // `--auto-route` / autoRouteModels enables per-task AutoModelRouter
772
800
  // routing in executeSingleTask (no static map needed).
773
- // ── 3c. Skill guidance (progressive disclosure, industry pattern) ──────
774
- // Level 1 metadata lives in the skill store; when the goal matches a
775
- // skill (findMatch), Level 2 (the methodology) is injected into the
776
- // planner's context so deploy-style goals produce the correct steps
777
- // automatically. Model-selected activation: the skill is a recommendation,
778
- // the planner still owns the final plan. Best-effort — a skill-store
779
- // failure must never break planning.
801
+ // ── 3c. Skill discovery (MODEL-DRIVEN) ──────────────────────────────────
802
+ // This step used to KEYWORD-MATCH one skill to the goal (findMatch +
803
+ // findHubSkillMatch, then the isSkillActivated evidence filter) and inject
804
+ // its methodology. That shipped a hand-written stopword/generic-word/host
805
+ // list that kept getting a case wrong ("blood test report" → the software
806
+ // test-strategy skill; "Windows and Linux" → wsl-setup). Word matching
807
+ // cannot decide what a goal MEANS, so it is gone from the pipeline too:
808
+ // the planner is a MODEL, so it is handed the CATALOG and picks the skill
809
+ // (by name) that fits, and the writer can load one in full with
810
+ // skill_view(name). The disabled gate still applies at catalog build time.
811
+ // Best-effort — a skill-store failure must never break planning.
780
812
  try {
781
- const { getSkillStore } = await import('../learning/skill-store.js');
782
- let matchedSkill = getSkillStore().findMatch(goal);
783
- // P3 — skills.disabled[] gate: a dashboard/CLI-disabled skill is never
784
- // injected, for COMPILED skills too. (The hub path already filters via
785
- // listMatchableHubSkills; this closes the compiled gap so the Agent Hub
786
- // toggle is never cosmetic.)
787
- const { readDisabledSkills } = await import('../learning/hub-skill-catalog.js');
788
- if (matchedSkill && new Set(readDisabledSkills()).has(matchedSkill.id))
789
- matchedSkill = null;
790
- // Activation gate (industry practice: model-selected activation).
791
- // findMatch's threshold is intentionally low (score >= 1) for manual
792
- // discovery; auto-injection must be tighter so a generic "deploy the
793
- // API" goal does NOT get website-deployment methodology. For a
794
- // website-deployment skill (bundled OR hub-installed), require
795
- // hosting-specific intent words.
796
- //
797
- // This pipeline path used to apply ONLY the website-deploy rule and NO
798
- // evidence filter at all — so it was the most exposed injection surface
799
- // (live 2026-09-21: `wsl-setup` methodology injected into a cross-platform
800
- // GUI app plan because the goal named "Windows and Linux"). It now uses
801
- // the SAME `isSkillActivated` predicate as the chat/execute loop, so the
802
- // three surfaces cannot disagree about what a goal is evidence FOR.
803
- const { isSkillActivated } = await import('../tools/loop-skill-hint.js');
804
- if (matchedSkill && !isSkillActivated(goal, matchedSkill))
805
- matchedSkill = null;
806
- if (matchedSkill) {
807
- // Load full methodology from skill_view() (Hermes progressive disclosure)
808
- let fullMethodology = '';
809
- try {
810
- const { getSkillStore } = await import('../learning/skill-store.js');
811
- const store = getSkillStore();
812
- fullMethodology = store.skillView(matchedSkill.name);
813
- }
814
- catch {
815
- // Best-effort — skill_view failure must never break the pipeline
816
- }
817
- vault.setMeta('skillGuidance', {
818
- name: matchedSkill.name,
819
- description: matchedSkill.description,
820
- steps: matchedSkill.steps.map((s) => ({ agentType: s.agentType, description: s.description })),
821
- fullMethodology,
822
- });
813
+ const { buildConfiguredSkillHint } = await import('../tools/loop-skill-hint.js');
814
+ // `skill-view` tail: the pipeline's load path is the writer's skill_view,
815
+ // not the loop's skill tool.
816
+ const skillCatalog = await buildConfiguredSkillHint(this.configManager, { loadHint: 'skill-view' });
817
+ if (skillCatalog) {
818
+ vault.setMeta('skillCatalog', skillCatalog);
823
819
  this.eventBus.emit(EventNames.ORCHESTRATOR_AGENT_UPDATE, {
824
820
  agentType: 'orchestrator',
825
821
  stage: 'skill',
826
- message: `🧠 Matched skill '${matchedSkill.name}' — injecting its methodology into the planner`,
822
+ message: '🧠 Handing the planner the skill catalog — the model picks which skill (if any) a step needs',
827
823
  }, 'orchestrator');
828
- if (options.verbose) {
829
- logger.info(` 🧠 Matched skill '${matchedSkill.name}' — injecting its methodology into the planner`);
830
- }
831
- }
832
- else {
833
- // I7 P0: no compiled skill matched — consult the HUB catalog (installed
834
- // SKILL.md skills). These are first-class runtime capabilities too: a
835
- // fresh `nuvira skills install` is matchable with zero recompilation.
836
- // Same model-selected activation contract: the skill is a
837
- // recommendation, the planner still owns the final plan.
838
- const { findHubSkillMatch } = await import('../learning/hub-skill-catalog.js');
839
- let hubMatch = findHubSkillMatch(goal);
840
- // SAME activation gate as the compiled skill (website-deploy needs
841
- // hosting intent) AND the evidence filter the hub scorer has never had:
842
- // its name/description keyword score is a candidate RANKING, not proof
843
- // the goal asked for the methodology.
844
- if (hubMatch && !isSkillActivated(goal, hubMatch))
845
- hubMatch = null;
846
- if (hubMatch) {
847
- // Load full methodology from skill_view() (Hermes progressive disclosure)
848
- let fullMethodology = '';
849
- try {
850
- const { getSkillStore } = await import('../learning/skill-store.js');
851
- const store = getSkillStore();
852
- fullMethodology = store.skillView(hubMatch.name);
853
- }
854
- catch {
855
- // Best-effort — skill_view failure must never break the pipeline
856
- }
857
- vault.setMeta('skillGuidance', {
858
- name: hubMatch.name,
859
- description: hubMatch.description,
860
- body: hubMatch.body,
861
- fullMethodology,
862
- });
863
- this.eventBus.emit(EventNames.ORCHESTRATOR_AGENT_UPDATE, {
864
- agentType: 'orchestrator',
865
- stage: 'skill',
866
- message: `🧠 Matched hub skill '${hubMatch.name}' — injecting its SKILL.md methodology into the planner`,
867
- }, 'orchestrator');
868
- if (options.verbose) {
869
- logger.info(` 🧠 Matched hub skill '${hubMatch.name}' — injecting its SKILL.md methodology into the planner`);
870
- }
871
- }
872
824
  }
873
825
  }
874
826
  catch {
875
- // Best-effort — skill guidance must never break the pipeline.
827
+ // Best-effort — skill discovery must never break the pipeline.
876
828
  }
877
829
  // ── 4. Planner (or pre-built plan from workflow template) ────────────
878
830
  // When resuming from a checkpoint the plan is already in the vault — skip
@@ -1396,20 +1348,12 @@ export class Orchestrator {
1396
1348
  taskPlan: vault.context.taskPlan,
1397
1349
  };
1398
1350
  const { storeExecutionTrajectory } = await import('../memory/memory-integration.js');
1399
- trajectoryId = await storeExecutionTrajectory(orchestrationSummary, withTraceCapture(defaultCallLLM, {
1400
- traceId: this.activeTraceId ?? '',
1401
- agentType: 'memory',
1402
- description: `Trajectory summarization for: ${goal.slice(0, 80)}`,
1403
- }), vault.context.taskPlan, contextFiles, options.verbose);
1351
+ trajectoryId = await storeExecutionTrajectory(orchestrationSummary, housekeepingCallLLM('memory', `Trajectory summarization for: ${goal.slice(0, 80)}`), vault.context.taskPlan, contextFiles, options.verbose);
1404
1352
  // Self-improvement
1405
1353
  try {
1406
1354
  const { getSelfImprover } = await import('../learning/self-improver.js');
1407
1355
  const improver = getSelfImprover();
1408
- await improver.processRun({ ...orchestrationSummary, trajectoryId }, withTraceCapture(defaultCallLLM, {
1409
- traceId: this.activeTraceId ?? '',
1410
- agentType: 'self-improver',
1411
- description: `Pattern/failure-lesson extraction for: ${goal.slice(0, 80)}`,
1412
- }), options.agentModels, options.verbose);
1356
+ await improver.processRun({ ...orchestrationSummary, trajectoryId }, housekeepingCallLLM('self-improver', `Pattern/failure-lesson extraction for: ${goal.slice(0, 80)}`), options.agentModels, options.verbose);
1413
1357
  if (options.verbose && trajectoryId) {
1414
1358
  logger.info(' Self-improvement stats saved. Run `nuvira learn optimize` to see recommendations.');
1415
1359
  }
@@ -1766,7 +1710,11 @@ export class Orchestrator {
1766
1710
  // configured model BEFORE validating, so the validator is never asked to
1767
1711
  // repair a sentinel and the 'auto is not available on X' warning is not
1768
1712
  // printed for a value the user never chose as a model.
1769
- if (isAutoModel(requestedModel)) {
1713
+ //
1714
+ // A8 EXCEPTION: a CONCRETE provider pinned with `-m auto` means that
1715
+ // provider's own auto (an OmniRoute combo), so the sentinel is NOT ours
1716
+ // to resolve — it must reach the provider as-is.
1717
+ if (isAutoModel(requestedModel) && !isProviderOwnAuto(rawProvider, requestedModel)) {
1770
1718
  requestedModel = config.model || undefined;
1771
1719
  }
1772
1720
  // ALWAYS validate the pair — the model against THIS provider instance,
@@ -2221,7 +2169,7 @@ export class Orchestrator {
2221
2169
  // cheap model while complex tasks get a stronger one. An explicit
2222
2170
  // `--model` always wins over auto routing.
2223
2171
  const autoRouting = (options.autoRouteModels === true && !options.model) ||
2224
- isAutoModel(options.model) || isAutoProvider(options.provider);
2172
+ isAgentAutoRoute(options.provider, options.model);
2225
2173
  const effectiveAgentType = strategy.effectiveAgentType || task.agentType;
2226
2174
  const agentModel = options.model || options.agentModels?.[effectiveAgentType] || options.agentModels?.[task.agentType];
2227
2175
  let taskBoundProvider;
@@ -2422,6 +2370,13 @@ export class Orchestrator {
2422
2370
  // model exists to escalate to (never for a healthy pipeline).
2423
2371
  try {
2424
2372
  vault.context.metadata.lenientFileParsing = true;
2373
+ // Name the task's DECLARED artifacts so a `shrink-scope` repair
2374
+ // can ask for the FIRST one concretely ("produce exactly this
2375
+ // file") instead of a vague "do less". Absent → the narrowed ask
2376
+ // stays generic and never invents a filename.
2377
+ if (task.expectedFiles?.length) {
2378
+ vault.context.metadata.expectedFiles = task.expectedFiles;
2379
+ }
2425
2380
  }
2426
2381
  catch {
2427
2382
  // Best-effort — metadata must never break repair.
@@ -2488,20 +2443,29 @@ export class Orchestrator {
2488
2443
  spl.start();
2489
2444
  }
2490
2445
  }
2491
- // No-op escalation → cap this task's repair budget at 1 (lenient
2492
- // parsing already gives the weak writer its best shot; a second
2493
- // cycle on the same weak model only burns minutes re-running the
2494
- // identical failure). Healthy pipelines keep the configured budget.
2446
+ // No-op escalation → a bounded WEAK-MODEL CLOSE-THE-LOOP ladder.
2447
+ //
2448
+ // This used to cap the budget at 1 because attempt 2 was the SAME
2449
+ // weak model re-running the SAME failure — pure wasted minutes. It is
2450
+ // now 2, because `weakModel: true` changes what attempt 2 IS: a
2451
+ // `shrink-scope` ask for the smallest single unit (see
2452
+ // error-repair.ts). That is the step that turns a stuck loop around:
2453
+ // re-prompt with the failure, then ask for LESS and move the work
2454
+ // forward, then stop honestly at 3. Healthy pipelines keep the
2455
+ // configured budget and the ordinary per-category ladder.
2495
2456
  //
2496
2457
  // 'abort' skips repair entirely: the user chose to fix the provider
2497
2458
  // config, so re-running the weak model is wasted work. The task is
2498
2459
  // marked failed with an actionable message; the pipeline stops.
2499
2460
  const userAborted = this.weakModelChoice === 'abort';
2500
- const effectiveMaxRepairs = noOpEscalation && autoRouting ? 1 : maxRepairs;
2461
+ const weakModelOnly = noOpEscalation && autoRouting;
2462
+ const effectiveMaxRepairs = weakModelOnly ? 2 : maxRepairs;
2501
2463
  const repairEngine = new ErrorRepairEngine({
2502
2464
  maxRepairs: effectiveMaxRepairs,
2503
2465
  repairMode,
2504
2466
  verbose: options.verbose,
2467
+ // Only the weak/no-op-escalation path takes the bounded ladder.
2468
+ weakModel: weakModelOnly,
2505
2469
  fallbackModels: options.repairFallbackModels,
2506
2470
  // LLM AVAILABILITY GUARD: check if the escalated task's provider
2507
2471
  // is rate-limited before retrying. Prevents retry-tool and
@@ -3336,7 +3300,11 @@ export class Orchestrator {
3336
3300
  complexity: decision.complexity,
3337
3301
  provider: decision.provider,
3338
3302
  model: workingModel ?? decision.model,
3339
- score: decision.score,
3303
+ // B2-a — this block runs only when the model was REPAIRED
3304
+ // (`workingModel !== decision.model`), so `decision.score`
3305
+ // describes the model that was replaced. The repaired model was
3306
+ // substituted, never ranked: record it with no score rather than
3307
+ // with a number that belongs to a different model.
3340
3308
  });
3341
3309
  }
3342
3310
  catch {