@zhixuan92/multi-model-agent-core 4.6.0 → 4.7.0

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 (315) hide show
  1. package/README.md +7 -8
  2. package/dist/bounded-execution/file-artifact-check.d.ts +4 -11
  3. package/dist/bounded-execution/file-artifact-check.d.ts.map +1 -1
  4. package/dist/bounded-execution/file-artifact-check.js +7 -22
  5. package/dist/bounded-execution/file-artifact-check.js.map +1 -1
  6. package/dist/bounded-execution/progress-watchdog.d.ts.map +1 -1
  7. package/dist/bounded-execution/progress-watchdog.js +60 -27
  8. package/dist/bounded-execution/progress-watchdog.js.map +1 -1
  9. package/dist/bounded-execution/stall-watchdog.d.ts.map +1 -1
  10. package/dist/bounded-execution/stall-watchdog.js +29 -12
  11. package/dist/bounded-execution/stall-watchdog.js.map +1 -1
  12. package/dist/bounded-execution/wall-clock-guard.d.ts +4 -0
  13. package/dist/bounded-execution/wall-clock-guard.d.ts.map +1 -1
  14. package/dist/bounded-execution/wall-clock-guard.js +1 -1
  15. package/dist/bounded-execution/wall-clock-guard.js.map +1 -1
  16. package/dist/config/canonical-model-identity.d.ts.map +1 -1
  17. package/dist/config/canonical-model-identity.js.map +1 -1
  18. package/dist/config/config-resolver.d.ts +1 -41
  19. package/dist/config/config-resolver.d.ts.map +1 -1
  20. package/dist/config/config-resolver.js +1 -43
  21. package/dist/config/config-resolver.js.map +1 -1
  22. package/dist/config/load.d.ts +0 -2
  23. package/dist/config/load.d.ts.map +1 -1
  24. package/dist/config/load.js +0 -4
  25. package/dist/config/load.js.map +1 -1
  26. package/dist/config/model-profile-registry.d.ts.map +1 -1
  27. package/dist/config/model-profile-registry.js +13 -7
  28. package/dist/config/model-profile-registry.js.map +1 -1
  29. package/dist/config/schema.d.ts +1 -19
  30. package/dist/config/schema.d.ts.map +1 -1
  31. package/dist/config/schema.js +12 -38
  32. package/dist/config/schema.js.map +1 -1
  33. package/dist/error-codes.d.ts +0 -1
  34. package/dist/error-codes.d.ts.map +1 -1
  35. package/dist/error-codes.js +0 -1
  36. package/dist/error-codes.js.map +1 -1
  37. package/dist/events/cloud-events.d.ts +0 -1
  38. package/dist/events/cloud-events.d.ts.map +1 -1
  39. package/dist/events/cloud-events.js +1 -1
  40. package/dist/events/cloud-events.js.map +1 -1
  41. package/dist/events/event-builder.js +1 -2
  42. package/dist/events/event-builder.js.map +1 -1
  43. package/dist/events/event-emitter.d.ts +2 -1
  44. package/dist/events/event-emitter.d.ts.map +1 -1
  45. package/dist/events/event-emitter.js +6 -1
  46. package/dist/events/event-emitter.js.map +1 -1
  47. package/dist/events/observability-events.d.ts +0 -26
  48. package/dist/events/observability-events.d.ts.map +1 -1
  49. package/dist/events/observability-events.js +1 -11
  50. package/dist/events/observability-events.js.map +1 -1
  51. package/dist/events/telemetry-types.d.ts +0 -7
  52. package/dist/events/telemetry-types.d.ts.map +1 -1
  53. package/dist/events/telemetry-types.js +1 -1
  54. package/dist/events/telemetry-types.js.map +1 -1
  55. package/dist/index.d.ts +4 -5
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +3 -3
  58. package/dist/index.js.map +1 -1
  59. package/dist/intake/resolve.d.ts.map +1 -1
  60. package/dist/intake/resolve.js +0 -1
  61. package/dist/intake/resolve.js.map +1 -1
  62. package/dist/lifecycle/handlers/{annotator.d.ts → annotate-stage.d.ts} +1 -1
  63. package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -0
  64. package/dist/lifecycle/handlers/{annotator.js → annotate-stage.js} +13 -1
  65. package/dist/lifecycle/handlers/annotate-stage.js.map +1 -0
  66. package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +1 -1
  67. package/dist/lifecycle/handlers/git-commit-handler.js +15 -0
  68. package/dist/lifecycle/handlers/git-commit-handler.js.map +1 -1
  69. package/dist/lifecycle/handlers/{task-executor.d.ts → implement-stage.d.ts} +1 -1
  70. package/dist/lifecycle/handlers/implement-stage.d.ts.map +1 -0
  71. package/dist/lifecycle/handlers/{task-executor.js → implement-stage.js} +31 -2
  72. package/dist/lifecycle/handlers/implement-stage.js.map +1 -0
  73. package/dist/lifecycle/handlers/{review-handler.d.ts → review-stage.d.ts} +1 -1
  74. package/dist/lifecycle/handlers/review-stage.d.ts.map +1 -0
  75. package/dist/lifecycle/handlers/{review-handler.js → review-stage.js} +18 -1
  76. package/dist/lifecycle/handlers/review-stage.js.map +1 -0
  77. package/dist/lifecycle/handlers/{rework-handler.d.ts → rework-stage.d.ts} +1 -1
  78. package/dist/lifecycle/handlers/rework-stage.d.ts.map +1 -0
  79. package/dist/lifecycle/handlers/{rework-handler.js → rework-stage.js} +17 -1
  80. package/dist/lifecycle/handlers/rework-stage.js.map +1 -0
  81. package/dist/lifecycle/lifecycle-context.d.ts +10 -4
  82. package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
  83. package/dist/lifecycle/lifecycle-dispatcher.d.ts +1 -1
  84. package/dist/lifecycle/lifecycle-dispatcher.d.ts.map +1 -1
  85. package/dist/lifecycle/lifecycle-dispatcher.js +1 -1
  86. package/dist/lifecycle/lifecycle-dispatcher.js.map +1 -1
  87. package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
  88. package/dist/lifecycle/lifecycle-driver.js +22 -2
  89. package/dist/lifecycle/lifecycle-driver.js.map +1 -1
  90. package/dist/lifecycle/normalize-output-targets.d.ts +2 -0
  91. package/dist/lifecycle/normalize-output-targets.d.ts.map +1 -0
  92. package/dist/lifecycle/normalize-output-targets.js +14 -0
  93. package/dist/lifecycle/normalize-output-targets.js.map +1 -0
  94. package/dist/lifecycle/perform-implementation.d.ts.map +1 -1
  95. package/dist/lifecycle/perform-implementation.js +63 -26
  96. package/dist/lifecycle/perform-implementation.js.map +1 -1
  97. package/dist/lifecycle/rework-budget.d.ts +3 -0
  98. package/dist/lifecycle/rework-budget.d.ts.map +1 -0
  99. package/dist/lifecycle/rework-budget.js +9 -0
  100. package/dist/lifecycle/rework-budget.js.map +1 -0
  101. package/dist/lifecycle/stage-io.d.ts +3 -2
  102. package/dist/lifecycle/stage-io.d.ts.map +1 -1
  103. package/dist/lifecycle/stage-io.js.map +1 -1
  104. package/dist/lifecycle/stage-plan-builder.js +4 -4
  105. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  106. package/dist/lifecycle/stage-plan-types.d.ts +1 -4
  107. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  108. package/dist/lifecycle/task-completion-summary.d.ts.map +1 -1
  109. package/dist/lifecycle/task-completion-summary.js +0 -1
  110. package/dist/lifecycle/task-completion-summary.js.map +1 -1
  111. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  112. package/dist/lifecycle/task-executor.js +2 -1
  113. package/dist/lifecycle/task-executor.js.map +1 -1
  114. package/dist/lifecycle/task-runner.d.ts +5 -1
  115. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  116. package/dist/lifecycle/task-runner.js +92 -46
  117. package/dist/lifecycle/task-runner.js.map +1 -1
  118. package/dist/providers/agent-resolver.d.ts.map +1 -0
  119. package/dist/{escalation → providers}/agent-resolver.js +1 -1
  120. package/dist/providers/agent-resolver.js.map +1 -0
  121. package/dist/providers/assemble-run-result.js +0 -2
  122. package/dist/providers/assemble-run-result.js.map +1 -1
  123. package/dist/providers/claude-session.d.ts +12 -0
  124. package/dist/providers/claude-session.d.ts.map +1 -1
  125. package/dist/providers/claude-session.js +38 -1
  126. package/dist/providers/claude-session.js.map +1 -1
  127. package/dist/providers/codex-cli-session.d.ts +16 -1
  128. package/dist/providers/codex-cli-session.d.ts.map +1 -1
  129. package/dist/providers/codex-cli-session.js +75 -6
  130. package/dist/providers/codex-cli-session.js.map +1 -1
  131. package/dist/providers/normalize-claude.js +1 -1
  132. package/dist/providers/normalize-claude.js.map +1 -1
  133. package/dist/providers/provider-factory.d.ts +8 -0
  134. package/dist/providers/provider-factory.d.ts.map +1 -1
  135. package/dist/providers/provider-factory.js +64 -3
  136. package/dist/providers/provider-factory.js.map +1 -1
  137. package/dist/providers/run-annotator-turn.d.ts.map +1 -1
  138. package/dist/providers/run-annotator-turn.js +2 -1
  139. package/dist/providers/run-annotator-turn.js.map +1 -1
  140. package/dist/providers/run-worker-turn.d.ts +1 -1
  141. package/dist/providers/run-worker-turn.d.ts.map +1 -1
  142. package/dist/providers/run-worker-turn.js +0 -1
  143. package/dist/providers/run-worker-turn.js.map +1 -1
  144. package/dist/providers/runner-types.d.ts +5 -6
  145. package/dist/providers/runner-types.d.ts.map +1 -1
  146. package/dist/providers/stall-detector.d.ts +1 -1
  147. package/dist/providers/stall-detector.d.ts.map +1 -1
  148. package/dist/providers/stall-detector.js +1 -1
  149. package/dist/providers/stall-detector.js.map +1 -1
  150. package/dist/reporting/derive-investigate-status.d.ts +1 -1
  151. package/dist/reporting/derive-investigate-status.d.ts.map +1 -1
  152. package/dist/reporting/headline-templates/investigate.d.ts +1 -1
  153. package/dist/reporting/headline-templates/investigate.d.ts.map +1 -1
  154. package/dist/reporting/headline-templates/research.d.ts.map +1 -1
  155. package/dist/reporting/headline-templates/research.js +0 -1
  156. package/dist/reporting/headline-templates/research.js.map +1 -1
  157. package/dist/reporting/terminal-status-deriver.d.ts +1 -1
  158. package/dist/reporting/terminal-status-deriver.d.ts.map +1 -1
  159. package/dist/reporting/terminal-status-deriver.js +1 -4
  160. package/dist/reporting/terminal-status-deriver.js.map +1 -1
  161. package/dist/review/run-reviewer.d.ts.map +1 -1
  162. package/dist/review/run-reviewer.js +4 -3
  163. package/dist/review/run-reviewer.js.map +1 -1
  164. package/dist/stores/batch-registry.d.ts +15 -1
  165. package/dist/stores/batch-registry.d.ts.map +1 -1
  166. package/dist/stores/batch-registry.js +27 -0
  167. package/dist/stores/batch-registry.js.map +1 -1
  168. package/dist/tool-surface/tool-surface-registry.d.ts +1 -1
  169. package/dist/tool-surface/tool-surface-registry.d.ts.map +1 -1
  170. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  171. package/dist/tools/audit/tool-config.js +0 -1
  172. package/dist/tools/audit/tool-config.js.map +1 -1
  173. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  174. package/dist/tools/debug/tool-config.js +0 -1
  175. package/dist/tools/debug/tool-config.js.map +1 -1
  176. package/dist/tools/delegate/schema.d.ts +1 -1
  177. package/dist/tools/delegate/schema.d.ts.map +1 -1
  178. package/dist/tools/delegate/schema.js +2 -1
  179. package/dist/tools/delegate/schema.js.map +1 -1
  180. package/dist/tools/delegate/tool-config.d.ts +0 -1
  181. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  182. package/dist/tools/delegate/tool-config.js +0 -2
  183. package/dist/tools/delegate/tool-config.js.map +1 -1
  184. package/dist/tools/execute-plan/schema.d.ts +1 -1
  185. package/dist/tools/execute-plan/schema.d.ts.map +1 -1
  186. package/dist/tools/execute-plan/schema.js +2 -2
  187. package/dist/tools/execute-plan/schema.js.map +1 -1
  188. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  189. package/dist/tools/execute-plan/tool-config.js +0 -1
  190. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  191. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  192. package/dist/tools/investigate/tool-config.js +0 -1
  193. package/dist/tools/investigate/tool-config.js.map +1 -1
  194. package/dist/tools/register-context-block/tool-config.d.ts.map +1 -1
  195. package/dist/tools/register-context-block/tool-config.js +0 -1
  196. package/dist/tools/register-context-block/tool-config.js.map +1 -1
  197. package/dist/tools/research/tool-config.d.ts.map +1 -1
  198. package/dist/tools/research/tool-config.js +0 -1
  199. package/dist/tools/research/tool-config.js.map +1 -1
  200. package/dist/tools/retry/tool-config.d.ts.map +1 -1
  201. package/dist/tools/retry/tool-config.js +0 -1
  202. package/dist/tools/retry/tool-config.js.map +1 -1
  203. package/dist/tools/review/tool-config.d.ts.map +1 -1
  204. package/dist/tools/review/tool-config.js +0 -1
  205. package/dist/tools/review/tool-config.js.map +1 -1
  206. package/dist/types/config.d.ts +0 -1
  207. package/dist/types/config.d.ts.map +1 -1
  208. package/dist/types/enums.d.ts +0 -3
  209. package/dist/types/enums.d.ts.map +1 -1
  210. package/dist/types/enums.js +3 -3
  211. package/dist/types/enums.js.map +1 -1
  212. package/dist/types/run-result.d.ts +14 -1
  213. package/dist/types/run-result.d.ts.map +1 -1
  214. package/dist/types/task-spec.d.ts +1 -1
  215. package/dist/types/task-spec.d.ts.map +1 -1
  216. package/package.json +1 -1
  217. package/dist/bounded-execution/cost-meter.d.ts +0 -20
  218. package/dist/bounded-execution/cost-meter.d.ts.map +0 -1
  219. package/dist/bounded-execution/cost-meter.js +0 -21
  220. package/dist/bounded-execution/cost-meter.js.map +0 -1
  221. package/dist/bounded-execution/error-classifier.d.ts +0 -11
  222. package/dist/bounded-execution/error-classifier.d.ts.map +0 -1
  223. package/dist/bounded-execution/error-classifier.js +0 -23
  224. package/dist/bounded-execution/error-classifier.js.map +0 -1
  225. package/dist/bounded-execution/idle-guard.d.ts +0 -8
  226. package/dist/bounded-execution/idle-guard.d.ts.map +0 -1
  227. package/dist/bounded-execution/idle-guard.js +0 -18
  228. package/dist/bounded-execution/idle-guard.js.map +0 -1
  229. package/dist/bounded-execution/index.d.ts +0 -10
  230. package/dist/bounded-execution/index.d.ts.map +0 -1
  231. package/dist/bounded-execution/index.js +0 -11
  232. package/dist/bounded-execution/index.js.map +0 -1
  233. package/dist/bounded-execution/safety-max-turns.d.ts +0 -17
  234. package/dist/bounded-execution/safety-max-turns.d.ts.map +0 -1
  235. package/dist/bounded-execution/safety-max-turns.js +0 -17
  236. package/dist/bounded-execution/safety-max-turns.js.map +0 -1
  237. package/dist/cleanup/batch-retention-sweeper.d.ts +0 -7
  238. package/dist/cleanup/batch-retention-sweeper.d.ts.map +0 -1
  239. package/dist/cleanup/batch-retention-sweeper.js +0 -10
  240. package/dist/cleanup/batch-retention-sweeper.js.map +0 -1
  241. package/dist/cleanup/context-block-gc-sweeper.d.ts +0 -8
  242. package/dist/cleanup/context-block-gc-sweeper.d.ts.map +0 -1
  243. package/dist/cleanup/context-block-gc-sweeper.js +0 -12
  244. package/dist/cleanup/context-block-gc-sweeper.js.map +0 -1
  245. package/dist/cleanup/index.d.ts +0 -5
  246. package/dist/cleanup/index.d.ts.map +0 -1
  247. package/dist/cleanup/index.js +0 -6
  248. package/dist/cleanup/index.js.map +0 -1
  249. package/dist/cleanup/project-idle-cleanup.d.ts +0 -7
  250. package/dist/cleanup/project-idle-cleanup.d.ts.map +0 -1
  251. package/dist/cleanup/project-idle-cleanup.js +0 -15
  252. package/dist/cleanup/project-idle-cleanup.js.map +0 -1
  253. package/dist/cleanup/shutdown-coordinator.d.ts +0 -7
  254. package/dist/cleanup/shutdown-coordinator.d.ts.map +0 -1
  255. package/dist/cleanup/shutdown-coordinator.js +0 -13
  256. package/dist/cleanup/shutdown-coordinator.js.map +0 -1
  257. package/dist/config/index.d.ts +0 -8
  258. package/dist/config/index.d.ts.map +0 -1
  259. package/dist/config/index.js +0 -9
  260. package/dist/config/index.js.map +0 -1
  261. package/dist/config/pricing-table.d.ts +0 -16
  262. package/dist/config/pricing-table.d.ts.map +0 -1
  263. package/dist/config/pricing-table.js +0 -51
  264. package/dist/config/pricing-table.js.map +0 -1
  265. package/dist/escalation/agent-resolver.d.ts.map +0 -1
  266. package/dist/escalation/agent-resolver.js.map +0 -1
  267. package/dist/escalation/delegate-with-escalation.d.ts +0 -52
  268. package/dist/escalation/delegate-with-escalation.d.ts.map +0 -1
  269. package/dist/escalation/delegate-with-escalation.js +0 -201
  270. package/dist/escalation/delegate-with-escalation.js.map +0 -1
  271. package/dist/escalation/escalation-policy.d.ts +0 -18
  272. package/dist/escalation/escalation-policy.d.ts.map +0 -1
  273. package/dist/escalation/escalation-policy.js +0 -33
  274. package/dist/escalation/escalation-policy.js.map +0 -1
  275. package/dist/escalation/fallback-helpers.d.ts +0 -22
  276. package/dist/escalation/fallback-helpers.d.ts.map +0 -1
  277. package/dist/escalation/fallback-helpers.js +0 -47
  278. package/dist/escalation/fallback-helpers.js.map +0 -1
  279. package/dist/escalation/fallback-types.d.ts +0 -60
  280. package/dist/escalation/fallback-types.d.ts.map +0 -1
  281. package/dist/escalation/fallback-types.js +0 -11
  282. package/dist/escalation/fallback-types.js.map +0 -1
  283. package/dist/escalation/fallback.d.ts +0 -5
  284. package/dist/escalation/fallback.d.ts.map +0 -1
  285. package/dist/escalation/fallback.js +0 -387
  286. package/dist/escalation/fallback.js.map +0 -1
  287. package/dist/escalation/index.d.ts +0 -3
  288. package/dist/escalation/index.d.ts.map +0 -1
  289. package/dist/escalation/index.js +0 -4
  290. package/dist/escalation/index.js.map +0 -1
  291. package/dist/escalation/policy.d.ts +0 -37
  292. package/dist/escalation/policy.d.ts.map +0 -1
  293. package/dist/escalation/policy.js +0 -67
  294. package/dist/escalation/policy.js.map +0 -1
  295. package/dist/escalation/types.d.ts +0 -15
  296. package/dist/escalation/types.d.ts.map +0 -1
  297. package/dist/escalation/types.js +0 -2
  298. package/dist/escalation/types.js.map +0 -1
  299. package/dist/events/running-headline-sink.d.ts +0 -27
  300. package/dist/events/running-headline-sink.d.ts.map +0 -1
  301. package/dist/events/running-headline-sink.js +0 -156
  302. package/dist/events/running-headline-sink.js.map +0 -1
  303. package/dist/lifecycle/handlers/annotator.d.ts.map +0 -1
  304. package/dist/lifecycle/handlers/annotator.js.map +0 -1
  305. package/dist/lifecycle/handlers/review-handler.d.ts.map +0 -1
  306. package/dist/lifecycle/handlers/review-handler.js.map +0 -1
  307. package/dist/lifecycle/handlers/rework-handler.d.ts.map +0 -1
  308. package/dist/lifecycle/handlers/rework-handler.js.map +0 -1
  309. package/dist/lifecycle/handlers/task-executor.d.ts.map +0 -1
  310. package/dist/lifecycle/handlers/task-executor.js.map +0 -1
  311. package/dist/lifecycle/metadata-repair.d.ts +0 -15
  312. package/dist/lifecycle/metadata-repair.d.ts.map +0 -1
  313. package/dist/lifecycle/metadata-repair.js +0 -33
  314. package/dist/lifecycle/metadata-repair.js.map +0 -1
  315. /package/dist/{escalation → providers}/agent-resolver.d.ts +0 -0
package/README.md CHANGED
@@ -228,14 +228,13 @@ mmagent logs --follow --batch=<id> # tail + filter
228
228
 
229
229
  As of 3.4.0 every task-execution event the worker emits to the verbose stderr stream is also written to the JSONL log via a single `emit(TaskEvent)` writer — schema parity across both sinks. Crash/disconnect events (`startup`, `request_start`, `request_complete`, `shutdown`, `error`) are written unconditionally; per-task events (`heartbeat`, `stage_change`, `tool_call`, `turn_complete`, etc.) flow through the same writer.
230
230
 
231
- ## What's new in 4.6.0
232
-
233
- - **`isLlmStage: boolean` on the internal `StageEntryInternal` shape** (required, no default compile-time enforced). `rollupByTier` filters out non-LLM stages (synthetic review, commit) before computing tier rollup, so synthetic placeholders no longer corrupt `tierUsage.<tier>.model` under last-seen semantics.
234
- - **`StageModelMissingError` + `safeBuild` wrapper** around stage builders. Missing-model errors drop the offending stage with a `validation_warnings` diagnostic; the rest of the event ships.
235
- - **Tier-uniformity invariant.** Two LLM stages on the same tier with different models trigger an `R-TIER-MODEL-DIVERGENCE` diagnostic and the tier is omitted from `tierUsage`.
236
- - **`RunAnnotatorResult` and `RunReviewerResult` carry full token attribution** (`inputTokens`, `outputTokens`, `cachedReadTokens`, `cachedNonReadTokens`) plus `model` read from `turn.usage` and `turn.model` on the `Session.send` return.
237
- - **Cross-tier reviewer policy** via `invertedReviewerTier()` helper exported from `review/run-reviewer.ts`. Single-tier deployments fall back to the implementer tier.
238
- - **`buildSyntheticReviewStage(findings)`** continues to emit `costUSD: 0` and `model: 'custom'` with `isLlmStage: false`.
231
+ ## What's new in 4.7.0
232
+
233
+ - **BREAKING: USD cost caps removed across the entire surface.** `defaults.maxCostUSD`, `tasks[].maxCostUSD`, `TaskSpec.maxCostUSD`, `RunOptions.maxCostUSD`, `DEFAULT_MAX_COST_USD`, `MAX_COST_PRESTOP_RATIO`, `pricingSchema`, `CostCheckEvent`, `'cost_exceeded'` terminal status, `'cost_cap'` incomplete reason all deleted. Reported cost (`actualCostUSD`, `costUSD`) is unchanged; only the *cap* is gone. Migration: drop `maxCostUSD` everywhere.
234
+ - **Polling headline now reflects live stage + counts.** The server's `recordHeartbeat` callback writes a structured per-task snapshot (`stageLabel`, `stageDone`, `stageTotal`, `toolReads`/`toolWrites`/`toolTotal`). `/batch/:id` 202 responses advance through `Implementing Review Annotating → Committing` instead of staying frozen on the seed value.
235
+ - **`outputTargets` contract.** `/delegate` and `/execute-plan` tasks accept an optional `outputTargets: string[]`; missing paths post-run produce a `severity: high` finding (`missing_output_targets`).
236
+ - **Module removal:** `packages/core/src/escalation/` deleted entirely. Write routes now go through `ctx.getSession(tier)` directly. Also deleted: `RunningHeadlineSink`, `cleanup/` folder, `body-size.ts` middleware, dormant bounded-execution helpers (`IdleGuard`, `CostMeter`, etc.), and `config/pricing-table.ts`.
237
+ - **From 4.6.0, still relevant:** `isLlmStage` flag + `StageModelMissingError` defensive build, tier-uniformity invariant in `rollupByTier`, full token attribution on `RunAnnotatorResult` / `RunReviewerResult`, cross-tier reviewer policy via `invertedReviewerTier()`.
239
238
 
240
239
  Full history: [CHANGELOG](https://github.com/zhixuan312/multi-model-agent/blob/master/CHANGELOG.md).
241
240
 
@@ -1,14 +1,7 @@
1
- export interface FilePathPartition {
2
- outputTargets: string[];
3
- }
4
1
  /**
5
- * Partition filePaths into existing (inputs) and non-existing (output targets).
6
- * Output targets are resolved to absolute paths.
2
+ * Returns the subset of `outputTargets` that do NOT exist on disk.
3
+ * Empty array means all targets exist. Caller decides whether non-empty
4
+ * is a failure (typically yes — surface as a structured finding).
7
5
  */
8
- export declare function partitionFilePaths(filePaths: string[] | undefined, cwd: string): FilePathPartition;
9
- /**
10
- * Check whether any output targets are still missing on disk.
11
- * Returns true if any target does not exist.
12
- */
13
- export declare function checkOutputTargets(outputTargets: string[]): boolean;
6
+ export declare function checkOutputTargets(outputTargets: string[]): string[];
14
7
  //# sourceMappingURL=file-artifact-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-artifact-check.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/file-artifact-check.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,GACV,iBAAiB,CAWnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAGnE"}
1
+ {"version":3,"file":"file-artifact-check.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/file-artifact-check.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEpE"}
@@ -1,28 +1,13 @@
1
+ // Post-task verifier for declared output files.
2
+ // Callers set ctx.outputTargets in task-runner; the implementer stage handler
3
+ // invokes checkOutputTargets() post-task to verify each path exists on disk.
1
4
  import { existsSync } from 'fs';
2
- import { resolve } from 'path';
3
5
  /**
4
- * Partition filePaths into existing (inputs) and non-existing (output targets).
5
- * Output targets are resolved to absolute paths.
6
- */
7
- export function partitionFilePaths(filePaths, cwd) {
8
- if (!filePaths || filePaths.length === 0)
9
- return { outputTargets: [] };
10
- const outputTargets = [];
11
- for (const fp of filePaths) {
12
- const abs = resolve(cwd, fp);
13
- if (!existsSync(abs)) {
14
- outputTargets.push(abs);
15
- }
16
- }
17
- return { outputTargets };
18
- }
19
- /**
20
- * Check whether any output targets are still missing on disk.
21
- * Returns true if any target does not exist.
6
+ * Returns the subset of `outputTargets` that do NOT exist on disk.
7
+ * Empty array means all targets exist. Caller decides whether non-empty
8
+ * is a failure (typically yes — surface as a structured finding).
22
9
  */
23
10
  export function checkOutputTargets(outputTargets) {
24
- if (outputTargets.length === 0)
25
- return false;
26
- return outputTargets.some(t => !existsSync(t));
11
+ return outputTargets.filter((p) => !existsSync(p));
27
12
  }
28
13
  //# sourceMappingURL=file-artifact-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-artifact-check.js","sourceRoot":"","sources":["../../src/bounded-execution/file-artifact-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAM/B;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA+B,EAC/B,GAAW;IAEX,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAEvE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAuB;IACxD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"file-artifact-check.js","sourceRoot":"","sources":["../../src/bounded-execution/file-artifact-check.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,8EAA8E;AAC9E,6EAA6E;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAuB;IACxD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress-watchdog.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/progress-watchdog.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/C,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,uBAAuB,GAAG,MAAM,IAAI,CA8E9E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAqCf"}
1
+ {"version":3,"file":"progress-watchdog.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/progress-watchdog.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/C,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5B;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,uBAAuB,GAAG,MAAM,IAAI,CAwF9E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -1,7 +1,27 @@
1
1
  // packages/core/src/bounded-execution/progress-watchdog.ts
2
- import { spawnSync } from 'node:child_process';
2
+ import { spawn } from 'node:child_process';
3
3
  import { getRealFilesChanged } from '../lifecycle/real-diff.js';
4
4
  import { normalizeScopeEntry, isInScope } from '../lifecycle/scope-match.js';
5
+ async function gitDiffNameOnly(cwd, preSha) {
6
+ return new Promise((resolve) => {
7
+ let out = '';
8
+ let settled = false;
9
+ const done = (v) => { if (!settled) {
10
+ settled = true;
11
+ resolve(v);
12
+ } };
13
+ const child = spawn('git', ['diff', '--name-only', `${preSha}..`], { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
14
+ child.stdout.on('data', (b) => { out += b.toString('utf8'); });
15
+ child.on('error', () => done([]));
16
+ child.on('exit', (code) => {
17
+ if (code !== 0) {
18
+ done([]);
19
+ return;
20
+ }
21
+ done(out.split('\n').filter(Boolean));
22
+ });
23
+ });
24
+ }
5
25
  /**
6
26
  * Starts the progress watchdog. Returns a disposer that MUST be called in a
7
27
  * finally{} block. Mirrors startStallWatchdog(): same shape, single function
@@ -37,6 +57,7 @@ export function startProgressWatchdog(ctx) {
37
57
  // because git diff is heavier than just checking idle time. Total cost: a
38
58
  // few git invocations per task — negligible.
39
59
  const pollIntervalMs = Math.min(30_000, Math.max(5_000, Math.floor(ctx.config.thrashWallClockMs / 60)));
60
+ let pollInFlight = false;
40
61
  const interval = setInterval(() => {
41
62
  if (ctx.state2.fired)
42
63
  return;
@@ -49,32 +70,44 @@ export function startProgressWatchdog(ctx) {
49
70
  // point grepping git every 30s during the first few minutes of a task).
50
71
  if (wallClockMs < ctx.config.thrashSoftWallClockMs)
51
72
  return;
52
- // Synchronous git diff via spawnSync — same pattern real-diff uses.
53
- const cwd = ctx.state.cwd ?? '';
54
- const preSha = ctx.state.preTaskHeadSha;
55
- const r = spawnSync('git', ['diff', '--name-only', `${preSha}..`], { cwd, encoding: 'utf8' });
56
- const diffEmpty = r.status === 0 && r.stdout.trim().length === 0;
57
- if (!diffEmpty)
58
- return; // diff is non-empty; not thrashing
59
- // Signal 2: soft warn (fires once per task)
60
- if (!warned && wallClockMs >= ctx.config.thrashSoftWallClockMs) {
61
- warned = true;
62
- ctx.emit({ event: 'progress_watchdog_warn', ts: ts(), wallClockMs, ...meta });
63
- }
64
- // Signal 1: hard thrash wall-clock exceeded + diff still empty → abort
65
- if (wallClockMs >= ctx.config.thrashWallClockMs) {
66
- ctx.state2.fired = true;
67
- ctx.state.thrashingDetected = true;
68
- ctx.state.preStopReason = 'thrashing';
69
- ctx.controller.abort();
70
- ctx.emit({
71
- event: 'progress_watchdog_fired_thrash',
72
- ts: ts(),
73
- wallClockMs,
74
- threshold: 'wallclock',
75
- ...meta,
76
- });
77
- }
73
+ if (pollInFlight)
74
+ return; // skip tick if previous diff still running
75
+ pollInFlight = true;
76
+ void (async () => {
77
+ try {
78
+ const cwd = ctx.state.cwd ?? '';
79
+ const preSha = ctx.state.preTaskHeadSha;
80
+ const files = await gitDiffNameOnly(cwd, preSha);
81
+ const diffEmpty = files.length === 0;
82
+ if (!diffEmpty)
83
+ return; // diff is non-empty; not thrashing
84
+ // Signal 2: soft warn (fires once per task)
85
+ if (!warned && wallClockMs >= ctx.config.thrashSoftWallClockMs) {
86
+ warned = true;
87
+ ctx.emit({ event: 'progress_watchdog_warn', ts: ts(), wallClockMs, ...meta });
88
+ }
89
+ // Signal 1: hard thrash — wall-clock exceeded + diff still empty → abort
90
+ if (wallClockMs >= ctx.config.thrashWallClockMs) {
91
+ ctx.state2.fired = true;
92
+ ctx.state.thrashingDetected = true;
93
+ ctx.state.preStopReason = 'thrashing';
94
+ ctx.controller.abort();
95
+ ctx.emit({
96
+ event: 'progress_watchdog_fired_thrash',
97
+ ts: ts(),
98
+ wallClockMs,
99
+ threshold: 'wallclock',
100
+ ...meta,
101
+ });
102
+ }
103
+ }
104
+ catch {
105
+ // non-fatal: continue polling
106
+ }
107
+ finally {
108
+ pollInFlight = false;
109
+ }
110
+ })();
78
111
  }, pollIntervalMs);
79
112
  return () => {
80
113
  clearInterval(interval);
@@ -1 +1 @@
1
- {"version":3,"file":"progress-watchdog.js","sourceRoot":"","sources":["../../src/bounded-execution/progress-watchdog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress-watchdog.js","sourceRoot":"","sources":["../../src/bounded-execution/progress-watchdog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stall-watchdog.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/stall-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA0B/D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9E,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAmDxE"}
1
+ {"version":3,"file":"stall-watchdog.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/stall-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAsC/D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9E,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAqDxE"}
@@ -15,10 +15,22 @@
15
15
  * Returns a disposer; the orchestrator MUST call it in a finally{} block
16
16
  * so the timer is cleared on the success path too.
17
17
  */
18
+ // RESET_EVENTS: any event that proves a task is making real progress.
19
+ // MUST be names actually emitted by the providers (see codex-cli-session.ts
20
+ // + claude-session.ts). The previous values (runner_turn_*) were aspirational
21
+ // — never wired anywhere — so the watchdog was acting as a dumb deadline
22
+ // timer regardless of stage progress.
18
23
  const RESET_EVENTS = new Set([
19
- 'runner_turn_started',
20
- 'runner_response_received',
21
- 'runner_turn_completed',
24
+ // codex CLI
25
+ 'codex_turn_started',
26
+ 'codex_turn_completed',
27
+ 'codex_agent_message',
28
+ 'codex_command_completed',
29
+ // claude SDK
30
+ 'claude_turn_started',
31
+ 'claude_turn_completed',
32
+ 'claude_text_emission',
33
+ 'claude_tool_call',
22
34
  ]);
23
35
  export function startStallWatchdog(ctx) {
24
36
  ctx.bus?.emit({
@@ -28,12 +40,20 @@ export function startStallWatchdog(ctx) {
28
40
  ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
29
41
  stallTimeoutMs: ctx.timing.stallTimeoutMs,
30
42
  });
31
- ctx.bus?.on((event) => {
43
+ const busHandler = (event) => {
32
44
  const eventName = typeof event.event === 'string' ? event.event : '';
33
- if (RESET_EVENTS.has(eventName)) {
34
- ctx.stall.lastEventAtMs = Date.now();
35
- }
36
- });
45
+ if (!RESET_EVENTS.has(eventName))
46
+ return;
47
+ // Filter by task identity — the bus is process-wide and shared across all
48
+ // in-flight tasks. Without this filter, every task's progress events reset
49
+ // every other task's idle timer, and the watchdog never fires under load.
50
+ if (ctx.batchId !== undefined && event['batchId'] !== ctx.batchId)
51
+ return;
52
+ if (ctx.taskIndex !== undefined && event['taskIndex'] !== ctx.taskIndex)
53
+ return;
54
+ ctx.stall.lastEventAtMs = Date.now();
55
+ };
56
+ ctx.bus?.on(busHandler);
37
57
  // Poll interval: fine enough to fire promptly, coarse enough to avoid
38
58
  // burning CPU on idle batches. Clamped to [1s, 5s].
39
59
  const pollIntervalMs = Math.min(5_000, Math.max(1_000, Math.floor(ctx.timing.stallTimeoutMs / 60)));
@@ -60,10 +80,7 @@ export function startStallWatchdog(ctx) {
60
80
  }, pollIntervalMs);
61
81
  return () => {
62
82
  clearInterval(interval);
63
- // EventEmitter has no off() in v4. The captured `ctx` becomes garbage
64
- // after the orchestrator returns and the listener is no longer
65
- // reachable in a way that matters. Adding off() is a follow-up if
66
- // listener accumulation shows up in profiling.
83
+ ctx.bus?.off(busHandler);
67
84
  };
68
85
  }
69
86
  //# sourceMappingURL=stall-watchdog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stall-watchdog.js","sourceRoot":"","sources":["../../src/bounded-execution/stall-watchdog.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;IACnC,qBAAqB;IACrB,0BAA0B;IAC1B,uBAAuB;CACxB,CAAC,CAAC;AAUH,MAAM,UAAU,kBAAkB,CAAC,GAAyB;IAC1D,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;QACZ,KAAK,EAAE,sBAAsB;QAC7B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;QAChE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc;KAC1C,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAC5D,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO;QAC5B,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;QACpD,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC7B,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;gBACZ,KAAK,EAAE,sBAAsB;gBAC7B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC1D,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChE,MAAM;gBACN,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,cAAc,CAAC,CAAC;IAEnB,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,sEAAsE;QACtE,+DAA+D;QAC/D,kEAAkE;QAClE,+CAA+C;IACjD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stall-watchdog.js","sourceRoot":"","sources":["../../src/bounded-execution/stall-watchdog.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,sEAAsE;AACtE,4EAA4E;AAC5E,8EAA8E;AAC9E,yEAAyE;AACzE,sCAAsC;AACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;IACnC,YAAY;IACZ,oBAAoB;IACpB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,aAAa;IACb,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,kBAAkB;CACnB,CAAC,CAAC;AAUH,MAAM,UAAU,kBAAkB,CAAC,GAAyB;IAC1D,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;QACZ,KAAK,EAAE,sBAAsB;QAC7B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;QAChE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc;KAC1C,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,KAA8B,EAAE,EAAE;QACpD,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO;QACzC,0EAA0E;QAC1E,2EAA2E;QAC3E,0EAA0E;QAC1E,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,OAAO;YAAE,OAAO;QAC1E,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,SAAS;YAAE,OAAO;QAChF,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC;IACF,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAExB,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAC5D,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO;QAC5B,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;QACpD,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC7B,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;gBACZ,KAAK,EAAE,sBAAsB;gBAC7B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC1D,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChE,MAAM;gBACN,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,cAAc,CAAC,CAAC;IAEnB,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,7 @@
1
+ export declare class GuardError extends Error {
2
+ errorCode: string;
3
+ constructor(message: string, errorCode: string);
4
+ }
1
5
  export declare class WallClockGuard {
2
6
  private budgetMs;
3
7
  private startedAtMs;
@@ -1 +1 @@
1
- {"version":3,"file":"wall-clock-guard.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/wall-clock-guard.ts"],"names":[],"mappings":"AAOA,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,WAAW,CAAS;gBAER,QAAQ,EAAE,MAAM;IAKpC,YAAY,IAAI,IAAI;IASpB,SAAS,IAAI,MAAM;CAGpB"}
1
+ {"version":3,"file":"wall-clock-guard.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/wall-clock-guard.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;IACC,SAAS,EAAE,MAAM;gBAAzC,OAAO,EAAE,MAAM,EAAS,SAAS,EAAE,MAAM;CAItD;AAED,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,WAAW,CAAS;gBAER,QAAQ,EAAE,MAAM;IAKpC,YAAY,IAAI,IAAI;IASpB,SAAS,IAAI,MAAM;CAGpB"}
@@ -1,4 +1,4 @@
1
- class GuardError extends Error {
1
+ export class GuardError extends Error {
2
2
  errorCode;
3
3
  constructor(message, errorCode) {
4
4
  super(message);
@@ -1 +1 @@
1
- {"version":3,"file":"wall-clock-guard.js","sourceRoot":"","sources":["../../src/bounded-execution/wall-clock-guard.ts"],"names":[],"mappings":"AAAA,MAAM,UAAW,SAAQ,KAAK;IACQ;IAApC,YAAY,OAAe,EAAS,SAAiB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,cAAS,GAAT,SAAS,CAAQ;QAEnD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,cAAc;IAGL;IAFZ,WAAW,CAAS;IAE5B,YAAoB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAClC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;IAED,YAAY;QACV,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAClB,+BAA+B,IAAI,CAAC,QAAQ,KAAK,EACjD,kBAAkB,CACnB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF"}
1
+ {"version":3,"file":"wall-clock-guard.js","sourceRoot":"","sources":["../../src/bounded-execution/wall-clock-guard.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACC;IAApC,YAAY,OAAe,EAAS,SAAiB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,cAAS,GAAT,SAAS,CAAQ;QAEnD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,cAAc;IAGL;IAFZ,WAAW,CAAS;IAE5B,YAAoB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAClC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;IAED,YAAY;QACV,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAClB,+BAA+B,IAAI,CAAC,QAAQ,KAAK,EACjD,kBAAkB,CACnB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-model-identity.d.ts","sourceRoot":"","sources":["../../src/config/canonical-model-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAkCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAO3E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAIlF"}
1
+ {"version":3,"file":"canonical-model-identity.d.ts","sourceRoot":"","sources":["../../src/config/canonical-model-identity.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAkCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAO3E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAIlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-model-identity.js","sourceRoot":"","sources":["../../src/config/canonical-model-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonical-model-identity.js","sourceRoot":"","sources":["../../src/config/canonical-model-identity.ts"],"names":[],"mappings":"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"}
@@ -1,49 +1,9 @@
1
1
  import type { MultiModelConfig } from '../types.js';
2
- export type Pricing = {
3
- inputUSDPerMillion: number;
4
- outputUSDPerMillion: number;
5
- cachedReadUSDPerMillion: number;
6
- cachedNonReadUSDPerMillion: number;
7
- };
8
- export type MainAgentModelResolution = {
9
- kind: 'shipped';
10
- model: string;
11
- pricing: Pricing;
12
- } | {
13
- kind: 'shipped_overrides_user';
14
- model: string;
15
- pricing: Pricing;
16
- warning: string;
17
- } | {
18
- kind: 'user_for_unknown';
19
- model: string;
20
- pricing: Pricing;
21
- } | {
22
- kind: 'fail';
23
- reason: string;
24
- };
25
2
  /**
26
3
  * Return the names of agents carrying an inline `apiKey` instead of using
27
4
  * `apiKeyEnv`. The schema permits both, but plaintext API keys in a config
28
5
  * file are a backup/dotfile/git footgun — serve surfaces this once at
29
- * startup so the operator can react. Applies to any agent (claude/codex)
30
- * that has been configured against a non-default backend (`baseUrl` set)
31
- * and chosen to inline the key.
6
+ * startup so the operator can react.
32
7
  */
33
8
  export declare function collectInlineApiKeyOffenders(config: MultiModelConfig): string[];
34
- /**
35
- * Resolve pricing for the main agent model.
36
- *
37
- * Four cases per spec contract:
38
- * 1. Known model + no user pricing → shipped pricing.
39
- * 2. Known model + user pricing → shipped pricing WINS; caller should emit a one-time boot warning.
40
- * 3. Unknown model + user pricing → user pricing as the delta-calculation baseline.
41
- * 4. Unknown model + no user pricing → fail-loud at boot.
42
- */
43
- export declare function resolveMainAgentModel(modelId: string, userPricing: Pricing | undefined, shippedPricing: Map<string, Pricing>): MainAgentModelResolution;
44
- /**
45
- * Parse a user-supplied pricing object through the pricing schema.
46
- * Returns the validated Pricing or a ZodError.
47
- */
48
- export declare function validateUserPricing(raw: unknown): Pricing;
49
9
  //# sourceMappingURL=config-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-resolver.d.ts","sourceRoot":"","sources":["../../src/config/config-resolver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,MAAM,OAAO,GAAG;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpF;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAQ/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,wBAAwB,CAgB1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"config-resolver.d.ts","sourceRoot":"","sources":["../../src/config/config-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAQ/E"}
@@ -1,15 +1,8 @@
1
- // packages/core/src/config/config-resolver.ts
2
- // Layered-defaults resolution per architecture.md:58.
3
- // Extracted from load.ts; file-IO stays there, the resolution helpers
4
- // (decide-which-source-wins) live here.
5
- import { pricingSchema } from './schema.js';
6
1
  /**
7
2
  * Return the names of agents carrying an inline `apiKey` instead of using
8
3
  * `apiKeyEnv`. The schema permits both, but plaintext API keys in a config
9
4
  * file are a backup/dotfile/git footgun — serve surfaces this once at
10
- * startup so the operator can react. Applies to any agent (claude/codex)
11
- * that has been configured against a non-default backend (`baseUrl` set)
12
- * and chosen to inline the key.
5
+ * startup so the operator can react.
13
6
  */
14
7
  export function collectInlineApiKeyOffenders(config) {
15
8
  const offenders = [];
@@ -20,39 +13,4 @@ export function collectInlineApiKeyOffenders(config) {
20
13
  }
21
14
  return offenders;
22
15
  }
23
- /**
24
- * Resolve pricing for the main agent model.
25
- *
26
- * Four cases per spec contract:
27
- * 1. Known model + no user pricing → shipped pricing.
28
- * 2. Known model + user pricing → shipped pricing WINS; caller should emit a one-time boot warning.
29
- * 3. Unknown model + user pricing → user pricing as the delta-calculation baseline.
30
- * 4. Unknown model + no user pricing → fail-loud at boot.
31
- */
32
- export function resolveMainAgentModel(modelId, userPricing, shippedPricing) {
33
- const known = shippedPricing.get(modelId);
34
- if (known && !userPricing)
35
- return { kind: 'shipped', model: modelId, pricing: known };
36
- if (known && userPricing) {
37
- return {
38
- kind: 'shipped_overrides_user',
39
- model: modelId,
40
- pricing: known,
41
- warning: `user supplied pricing for known model '${modelId}'; ignoring user value in favor of shipped pricing`,
42
- };
43
- }
44
- if (!known && userPricing)
45
- return { kind: 'user_for_unknown', model: modelId, pricing: userPricing };
46
- return {
47
- kind: 'fail',
48
- reason: `mainAgentModel '${modelId}' is unknown to shipped pricing; supply 'mainAgentPricing' in config or use a shipped model id.`,
49
- };
50
- }
51
- /**
52
- * Parse a user-supplied pricing object through the pricing schema.
53
- * Returns the validated Pricing or a ZodError.
54
- */
55
- export function validateUserPricing(raw) {
56
- return pricingSchema.parse(raw);
57
- }
58
16
  //# sourceMappingURL=config-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-resolver.js","sourceRoot":"","sources":["../../src/config/config-resolver.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,sDAAsD;AACtD,sEAAsE;AACtE,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgB5C;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAwB;IACnE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,IAAI,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,WAAgC,EAChC,cAAoC;IAEpC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtF,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,0CAA0C,OAAO,oDAAoD;SAC/G,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACrG,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,mBAAmB,OAAO,iGAAiG;KACpI,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"config-resolver.js","sourceRoot":"","sources":["../../src/config/config-resolver.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAwB;IACnE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,IAAI,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,6 +1,4 @@
1
1
  import type { MultiModelConfig } from '../types.js';
2
- export { collectInlineApiKeyOffenders, resolveMainAgentModel, validateUserPricing, } from './config-resolver.js';
3
- export type { Pricing, MainAgentModelResolution } from './config-resolver.js';
4
2
  /**
5
3
  * Load the auth token for the HTTP server.
6
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAU9E;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkBjE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgBhF"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkBjE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgBhF"}
@@ -2,10 +2,6 @@ import fs from 'fs';
2
2
  import path from 'path';
3
3
  import os from 'os';
4
4
  import { multiModelConfigSchema } from './schema.js';
5
- // Re-export resolution helpers + types so existing callers that import them
6
- // from './load.js' keep working. The canonical home is './config-resolver.js'
7
- // per architecture.md:58.
8
- export { collectInlineApiKeyOffenders, resolveMainAgentModel, validateUserPricing, } from './config-resolver.js';
9
5
  const TOKEN_REGEX = /^[A-Za-z0-9_\-+=/.]+$/;
10
6
  function expandTilde(p) {
11
7
  if (p.startsWith('~/'))
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAA2B;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oEAAoE,YAAY,GAAG,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,+DAA+D,YAAY,GAAG,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2FAA2F,YAAY,GAAG,CAAC,CAAC;IAC9H,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACvC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjD,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChG,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-profile-registry.d.ts","sourceRoot":"","sources":["../../src/config/model-profile-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+J5D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4B7D;AAsBD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCjB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE1D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AA2J9D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAI1C,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAS9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAErE"}
1
+ {"version":3,"file":"model-profile-registry.d.ts","sourceRoot":"","sources":["../../src/config/model-profile-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+J5D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4B7D;AAsBD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCjB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE1D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAsK9D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAI1C,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAM9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAErE"}
@@ -391,6 +391,14 @@ const PROFILE_ENTRIES = (() => {
391
391
  // Return sorted by prefix length descending (longest prefix wins on lookup)
392
392
  return [...resolved.values()].sort((a, b) => b.prefix.length - a.prefix.length);
393
393
  })();
394
+ // Precompute lowercase prefixes once at module load. findModelProfile is in the
395
+ // hot path for telemetry normalization and cost compute; lowercasing each
396
+ // prefix per call would re-allocate N strings per lookup.
397
+ const PROFILE_LOOKUP = Object.freeze(PROFILE_ENTRIES.map(e => Object.freeze({
398
+ entry: Object.freeze(e),
399
+ prefixLc: e.prefix.toLowerCase(),
400
+ })));
401
+ const FROZEN_DEFAULT_PROFILE = Object.freeze({ ...DEFAULT_PROFILE });
394
402
  /**
395
403
  * Used for model COST/PROFILE lookup only — NOT a telemetry allowlist.
396
404
  * Adding/removing entries here does NOT affect what telemetry accepts.
@@ -401,14 +409,12 @@ export const ALL_MODEL_IDS = Object.freeze(PROFILE_ENTRIES
401
409
  .map(p => p.prefix)
402
410
  .filter((id) => typeof id === 'string' && id.length > 0));
403
411
  export function findModelProfile(modelId) {
404
- const canonical = extractCanonicalModelName(modelId);
405
- const normalized = canonical.toLowerCase();
406
- for (const entry of PROFILE_ENTRIES) {
407
- if (normalized.startsWith(entry.prefix.toLowerCase())) {
408
- return { ...entry };
409
- }
412
+ const normalized = extractCanonicalModelName(modelId).toLowerCase();
413
+ for (const { entry, prefixLc } of PROFILE_LOOKUP) {
414
+ if (normalized.startsWith(prefixLc))
415
+ return entry;
410
416
  }
411
- return { ...DEFAULT_PROFILE };
417
+ return FROZEN_DEFAULT_PROFILE;
412
418
  }
413
419
  export function getEffectiveCostTier(config) {
414
420
  return config.costTier ?? findModelProfile(config.model).defaultCost;