@zhixuan92/multi-model-agent-core 4.3.1 → 4.5.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 (469) hide show
  1. package/README.md +13 -24
  2. package/dist/bounded-execution/cost-compute.d.ts.map +1 -1
  3. package/dist/bounded-execution/cost-compute.js +10 -0
  4. package/dist/bounded-execution/cost-compute.js.map +1 -1
  5. package/dist/bounded-execution/index.d.ts +1 -0
  6. package/dist/bounded-execution/index.d.ts.map +1 -1
  7. package/dist/bounded-execution/index.js +1 -0
  8. package/dist/bounded-execution/index.js.map +1 -1
  9. package/dist/bounded-execution/progress-watchdog.d.ts +43 -0
  10. package/dist/bounded-execution/progress-watchdog.d.ts.map +1 -0
  11. package/dist/bounded-execution/progress-watchdog.js +137 -0
  12. package/dist/bounded-execution/progress-watchdog.js.map +1 -0
  13. package/dist/config/config-resolver.d.ts +6 -4
  14. package/dist/config/config-resolver.d.ts.map +1 -1
  15. package/dist/config/config-resolver.js +7 -6
  16. package/dist/config/config-resolver.js.map +1 -1
  17. package/dist/config/schema.d.ts +12 -76
  18. package/dist/config/schema.d.ts.map +1 -1
  19. package/dist/config/schema.js +15 -18
  20. package/dist/config/schema.js.map +1 -1
  21. package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
  22. package/dist/escalation/delegate-with-escalation.js +35 -38
  23. package/dist/escalation/delegate-with-escalation.js.map +1 -1
  24. package/dist/escalation/escalation-policy.d.ts +1 -1
  25. package/dist/escalation/escalation-policy.d.ts.map +1 -1
  26. package/dist/escalation/escalation-policy.js +0 -1
  27. package/dist/escalation/escalation-policy.js.map +1 -1
  28. package/dist/events/clamp.d.ts.map +1 -1
  29. package/dist/events/clamp.js +17 -6
  30. package/dist/events/clamp.js.map +1 -1
  31. package/dist/events/cloud-events.d.ts +1 -3
  32. package/dist/events/cloud-events.d.ts.map +1 -1
  33. package/dist/events/event-builder.d.ts +3 -1
  34. package/dist/events/event-builder.d.ts.map +1 -1
  35. package/dist/events/event-builder.js +14 -3
  36. package/dist/events/event-builder.js.map +1 -1
  37. package/dist/events/observability-events.d.ts +347 -25
  38. package/dist/events/observability-events.d.ts.map +1 -1
  39. package/dist/events/observability-events.js +135 -0
  40. package/dist/events/observability-events.js.map +1 -1
  41. package/dist/events/running-headline-sink.d.ts +2 -1
  42. package/dist/events/running-headline-sink.d.ts.map +1 -1
  43. package/dist/events/running-headline-sink.js.map +1 -1
  44. package/dist/events/telemetry-types.d.ts +57 -23
  45. package/dist/events/telemetry-types.d.ts.map +1 -1
  46. package/dist/events/telemetry-types.js +18 -14
  47. package/dist/events/telemetry-types.js.map +1 -1
  48. package/dist/index.d.ts +2 -5
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -5
  51. package/dist/index.js.map +1 -1
  52. package/dist/intake/field-inferer.js +5 -5
  53. package/dist/intake/field-inferer.js.map +1 -1
  54. package/dist/intake/source-schema.js +1 -1
  55. package/dist/intake/source-schema.js.map +1 -1
  56. package/dist/intake/types.d.ts +1 -1
  57. package/dist/intake/types.d.ts.map +1 -1
  58. package/dist/intake/verify-command-validator.d.ts +6 -0
  59. package/dist/intake/verify-command-validator.d.ts.map +1 -0
  60. package/dist/intake/verify-command-validator.js +47 -0
  61. package/dist/intake/verify-command-validator.js.map +1 -0
  62. package/dist/lifecycle/findings-parser.d.ts +9 -0
  63. package/dist/lifecycle/findings-parser.d.ts.map +1 -0
  64. package/dist/lifecycle/findings-parser.js +47 -0
  65. package/dist/lifecycle/findings-parser.js.map +1 -0
  66. package/dist/lifecycle/handlers/annotator.d.ts +35 -0
  67. package/dist/lifecycle/handlers/annotator.d.ts.map +1 -0
  68. package/dist/lifecycle/handlers/annotator.js +59 -0
  69. package/dist/lifecycle/handlers/annotator.js.map +1 -0
  70. package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
  71. package/dist/lifecycle/handlers/baseline-handlers.js +30 -37
  72. package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
  73. package/dist/lifecycle/handlers/git-commit-handler.d.ts +1 -16
  74. package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +1 -1
  75. package/dist/lifecycle/handlers/git-commit-handler.js +148 -53
  76. package/dist/lifecycle/handlers/git-commit-handler.js.map +1 -1
  77. package/dist/lifecycle/handlers/read-route-implementer.d.ts +41 -0
  78. package/dist/lifecycle/handlers/read-route-implementer.d.ts.map +1 -0
  79. package/dist/lifecycle/handlers/read-route-implementer.js +84 -0
  80. package/dist/lifecycle/handlers/read-route-implementer.js.map +1 -0
  81. package/dist/lifecycle/handlers/review-handler.d.ts.map +1 -1
  82. package/dist/lifecycle/handlers/review-handler.js +84 -90
  83. package/dist/lifecycle/handlers/review-handler.js.map +1 -1
  84. package/dist/lifecycle/handlers/rework-handler.d.ts.map +1 -1
  85. package/dist/lifecycle/handlers/rework-handler.js +79 -25
  86. package/dist/lifecycle/handlers/rework-handler.js.map +1 -1
  87. package/dist/lifecycle/handlers/task-executor.d.ts +2 -3
  88. package/dist/lifecycle/handlers/task-executor.d.ts.map +1 -1
  89. package/dist/lifecycle/handlers/task-executor.js +90 -8
  90. package/dist/lifecycle/handlers/task-executor.js.map +1 -1
  91. package/dist/lifecycle/handlers/terminal-handlers.d.ts +1 -1
  92. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  93. package/dist/lifecycle/handlers/terminal-handlers.js +4 -1
  94. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  95. package/dist/lifecycle/lifecycle-context.d.ts +14 -0
  96. package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
  97. package/dist/lifecycle/parallel-criteria-routes.d.ts +20 -6
  98. package/dist/lifecycle/parallel-criteria-routes.d.ts.map +1 -1
  99. package/dist/lifecycle/parallel-criteria-routes.js +36 -142
  100. package/dist/lifecycle/parallel-criteria-routes.js.map +1 -1
  101. package/dist/lifecycle/read-only-subtype-spec.d.ts +18 -0
  102. package/dist/lifecycle/read-only-subtype-spec.d.ts.map +1 -0
  103. package/dist/lifecycle/read-only-subtype-spec.js +2 -0
  104. package/dist/lifecycle/read-only-subtype-spec.js.map +1 -0
  105. package/dist/lifecycle/real-diff.d.ts +7 -0
  106. package/dist/lifecycle/real-diff.d.ts.map +1 -0
  107. package/dist/lifecycle/real-diff.js +54 -0
  108. package/dist/lifecycle/real-diff.js.map +1 -0
  109. package/dist/lifecycle/scope-match.d.ts +7 -0
  110. package/dist/lifecycle/scope-match.d.ts.map +1 -0
  111. package/dist/lifecycle/scope-match.js +28 -0
  112. package/dist/lifecycle/scope-match.js.map +1 -0
  113. package/dist/lifecycle/stage-labels.d.ts +22 -0
  114. package/dist/lifecycle/stage-labels.d.ts.map +1 -0
  115. package/dist/lifecycle/stage-labels.js +42 -0
  116. package/dist/lifecycle/stage-labels.js.map +1 -0
  117. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  118. package/dist/lifecycle/stage-plan-builder.js +25 -54
  119. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  120. package/dist/lifecycle/stage-plan-types.d.ts +5 -23
  121. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  122. package/dist/lifecycle/stage-progression.js +14 -14
  123. package/dist/lifecycle/stage-progression.js.map +1 -1
  124. package/dist/lifecycle/stage-stats.js +1 -1
  125. package/dist/lifecycle/stage-stats.js.map +1 -1
  126. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  127. package/dist/lifecycle/task-executor.js +20 -17
  128. package/dist/lifecycle/task-executor.js.map +1 -1
  129. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  130. package/dist/lifecycle/task-runner.js +114 -72
  131. package/dist/lifecycle/task-runner.js.map +1 -1
  132. package/dist/lifecycle/tool-config-types.d.ts +1 -2
  133. package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
  134. package/dist/lifecycle/warm-followup.d.ts +3 -0
  135. package/dist/lifecycle/warm-followup.d.ts.map +1 -0
  136. package/dist/lifecycle/warm-followup.js +16 -0
  137. package/dist/lifecycle/warm-followup.js.map +1 -0
  138. package/dist/lifecycle/worker-output-contract.d.ts +26 -0
  139. package/dist/lifecycle/worker-output-contract.d.ts.map +1 -0
  140. package/dist/lifecycle/worker-output-contract.js +73 -0
  141. package/dist/lifecycle/worker-output-contract.js.map +1 -0
  142. package/dist/providers/assemble-run-result.d.ts +17 -0
  143. package/dist/providers/assemble-run-result.d.ts.map +1 -0
  144. package/dist/providers/assemble-run-result.js +76 -0
  145. package/dist/providers/assemble-run-result.js.map +1 -0
  146. package/dist/providers/brief-preamble.d.ts +4 -0
  147. package/dist/providers/brief-preamble.d.ts.map +1 -0
  148. package/dist/providers/brief-preamble.js +39 -0
  149. package/dist/providers/brief-preamble.js.map +1 -0
  150. package/dist/providers/claude-session.d.ts +23 -0
  151. package/dist/providers/claude-session.d.ts.map +1 -0
  152. package/dist/providers/claude-session.js +185 -0
  153. package/dist/providers/claude-session.js.map +1 -0
  154. package/dist/providers/claude.d.ts +4 -0
  155. package/dist/providers/claude.d.ts.map +1 -0
  156. package/dist/providers/claude.js +35 -0
  157. package/dist/providers/claude.js.map +1 -0
  158. package/dist/providers/codex-cli-event.d.ts +44 -0
  159. package/dist/providers/codex-cli-event.d.ts.map +1 -0
  160. package/dist/providers/codex-cli-event.js +43 -0
  161. package/dist/providers/codex-cli-event.js.map +1 -0
  162. package/dist/providers/codex-cli-launch.d.ts +26 -0
  163. package/dist/providers/codex-cli-launch.d.ts.map +1 -0
  164. package/dist/providers/codex-cli-launch.js +47 -0
  165. package/dist/providers/codex-cli-launch.js.map +1 -0
  166. package/dist/providers/codex-cli-session.d.ts +55 -0
  167. package/dist/providers/codex-cli-session.d.ts.map +1 -0
  168. package/dist/providers/codex-cli-session.js +417 -0
  169. package/dist/providers/codex-cli-session.js.map +1 -0
  170. package/dist/providers/codex.d.ts +4 -0
  171. package/dist/providers/codex.d.ts.map +1 -0
  172. package/dist/providers/codex.js +28 -0
  173. package/dist/providers/codex.js.map +1 -0
  174. package/dist/providers/index.d.ts +0 -12
  175. package/dist/providers/index.d.ts.map +1 -1
  176. package/dist/providers/index.js +1 -13
  177. package/dist/providers/index.js.map +1 -1
  178. package/dist/providers/normalize-claude.d.ts +10 -0
  179. package/dist/providers/normalize-claude.d.ts.map +1 -0
  180. package/dist/providers/normalize-claude.js +89 -0
  181. package/dist/providers/normalize-claude.js.map +1 -0
  182. package/dist/providers/provider-factory.d.ts +1 -9
  183. package/dist/providers/provider-factory.d.ts.map +1 -1
  184. package/dist/providers/provider-factory.js +35 -167
  185. package/dist/providers/provider-factory.js.map +1 -1
  186. package/dist/providers/runner-adapter.d.ts +5 -16
  187. package/dist/providers/runner-adapter.d.ts.map +1 -1
  188. package/dist/providers/runner-adapter.js +6 -0
  189. package/dist/providers/runner-adapter.js.map +1 -1
  190. package/dist/providers/runner-types.d.ts +20 -2
  191. package/dist/providers/runner-types.d.ts.map +1 -1
  192. package/dist/reporting/report-parser-slots/research-report.d.ts +21 -17
  193. package/dist/reporting/report-parser-slots/research-report.d.ts.map +1 -1
  194. package/dist/reporting/report-parser-slots/research-report.js +28 -67
  195. package/dist/reporting/report-parser-slots/research-report.js.map +1 -1
  196. package/dist/review/annotator-engine.d.ts +2 -2
  197. package/dist/review/annotator-engine.d.ts.map +1 -1
  198. package/dist/review/annotator-engine.js +16 -20
  199. package/dist/review/annotator-engine.js.map +1 -1
  200. package/dist/review/annotator-prompt-builder.d.ts +1 -1
  201. package/dist/review/annotator-prompt-builder.d.ts.map +1 -1
  202. package/dist/review/default-engines.d.ts.map +1 -1
  203. package/dist/review/default-engines.js +2 -4
  204. package/dist/review/default-engines.js.map +1 -1
  205. package/dist/review/review-types.d.ts +0 -1
  206. package/dist/review/review-types.d.ts.map +1 -1
  207. package/dist/review/reviewer-engine.d.ts +5 -40
  208. package/dist/review/reviewer-engine.d.ts.map +1 -1
  209. package/dist/review/reviewer-engine.js +19 -49
  210. package/dist/review/reviewer-engine.js.map +1 -1
  211. package/dist/review/reviewer-output-parser.d.ts +1 -6
  212. package/dist/review/reviewer-output-parser.d.ts.map +1 -1
  213. package/dist/review/reviewer-output-parser.js +0 -26
  214. package/dist/review/reviewer-output-parser.js.map +1 -1
  215. package/dist/review/reviewer-prompt-builder.d.ts +1 -6
  216. package/dist/review/reviewer-prompt-builder.d.ts.map +1 -1
  217. package/dist/review/reviewer-prompt-builder.js +0 -6
  218. package/dist/review/reviewer-prompt-builder.js.map +1 -1
  219. package/dist/review/templates/quality-review.d.ts.map +1 -1
  220. package/dist/review/templates/quality-review.js +28 -0
  221. package/dist/review/templates/quality-review.js.map +1 -1
  222. package/dist/review/templates/rework.d.ts.map +1 -1
  223. package/dist/review/templates/rework.js +15 -9
  224. package/dist/review/templates/rework.js.map +1 -1
  225. package/dist/review/templates/shared.d.ts +9 -0
  226. package/dist/review/templates/shared.d.ts.map +1 -1
  227. package/dist/stores/context-block-project-cap.d.ts +1 -1
  228. package/dist/stores/context-block-project-cap.d.ts.map +1 -1
  229. package/dist/stores/context-block-project-cap.js +17 -5
  230. package/dist/stores/context-block-project-cap.js.map +1 -1
  231. package/dist/stores/file-backed-context-block-store.d.ts +7 -0
  232. package/dist/stores/file-backed-context-block-store.d.ts.map +1 -1
  233. package/dist/stores/file-backed-context-block-store.js +8 -0
  234. package/dist/stores/file-backed-context-block-store.js.map +1 -1
  235. package/dist/tool-surface/discover.d.ts +1 -1
  236. package/dist/tool-surface/discover.d.ts.map +1 -1
  237. package/dist/tool-surface/discover.js +0 -1
  238. package/dist/tool-surface/discover.js.map +1 -1
  239. package/dist/tool-surface/openapi-generator.d.ts.map +1 -1
  240. package/dist/tool-surface/openapi-generator.js +0 -2
  241. package/dist/tool-surface/openapi-generator.js.map +1 -1
  242. package/dist/tool-surface/register-all-tools.d.ts.map +1 -1
  243. package/dist/tool-surface/register-all-tools.js +1 -3
  244. package/dist/tool-surface/register-all-tools.js.map +1 -1
  245. package/dist/tools/audit/schema.d.ts +4 -4
  246. package/dist/tools/audit/schema.d.ts.map +1 -1
  247. package/dist/tools/audit/schema.js +4 -4
  248. package/dist/tools/audit/schema.js.map +1 -1
  249. package/dist/tools/audit/skill-audit-criteria.d.ts +9 -0
  250. package/dist/tools/audit/skill-audit-criteria.d.ts.map +1 -0
  251. package/dist/tools/audit/skill-audit-criteria.js +51 -0
  252. package/dist/tools/audit/skill-audit-criteria.js.map +1 -0
  253. package/dist/tools/audit/spec-audit-criteria.d.ts +9 -0
  254. package/dist/tools/audit/spec-audit-criteria.d.ts.map +1 -0
  255. package/dist/tools/audit/spec-audit-criteria.js +52 -0
  256. package/dist/tools/audit/spec-audit-criteria.js.map +1 -0
  257. package/dist/tools/audit/subtypes.d.ts +4 -0
  258. package/dist/tools/audit/subtypes.d.ts.map +1 -0
  259. package/dist/tools/audit/subtypes.js +67 -0
  260. package/dist/tools/audit/subtypes.js.map +1 -0
  261. package/dist/tools/audit/tool-config.d.ts +4 -4
  262. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  263. package/dist/tools/audit/tool-config.js +32 -30
  264. package/dist/tools/audit/tool-config.js.map +1 -1
  265. package/dist/tools/debug/schema.d.ts +3 -0
  266. package/dist/tools/debug/schema.d.ts.map +1 -1
  267. package/dist/tools/debug/schema.js +1 -0
  268. package/dist/tools/debug/schema.js.map +1 -1
  269. package/dist/tools/debug/subtypes.d.ts +4 -0
  270. package/dist/tools/debug/subtypes.d.ts.map +1 -0
  271. package/dist/tools/debug/subtypes.js +25 -0
  272. package/dist/tools/debug/subtypes.js.map +1 -0
  273. package/dist/tools/debug/tool-config.js +1 -1
  274. package/dist/tools/debug/tool-config.js.map +1 -1
  275. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  276. package/dist/tools/delegate/tool-config.js +0 -1
  277. package/dist/tools/delegate/tool-config.js.map +1 -1
  278. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  279. package/dist/tools/execute-plan/tool-config.js +5 -2
  280. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  281. package/dist/tools/index.d.ts +0 -1
  282. package/dist/tools/index.d.ts.map +1 -1
  283. package/dist/tools/index.js +0 -1
  284. package/dist/tools/index.js.map +1 -1
  285. package/dist/tools/investigate/schema.d.ts +3 -0
  286. package/dist/tools/investigate/schema.d.ts.map +1 -1
  287. package/dist/tools/investigate/schema.js +1 -0
  288. package/dist/tools/investigate/schema.js.map +1 -1
  289. package/dist/tools/investigate/subtypes.d.ts +4 -0
  290. package/dist/tools/investigate/subtypes.d.ts.map +1 -0
  291. package/dist/tools/investigate/subtypes.js +25 -0
  292. package/dist/tools/investigate/subtypes.js.map +1 -0
  293. package/dist/tools/investigate/tool-config.js +1 -1
  294. package/dist/tools/investigate/tool-config.js.map +1 -1
  295. package/dist/tools/research/implementer-criteria.d.ts +12 -5
  296. package/dist/tools/research/implementer-criteria.d.ts.map +1 -1
  297. package/dist/tools/research/implementer-criteria.js +40 -9
  298. package/dist/tools/research/implementer-criteria.js.map +1 -1
  299. package/dist/tools/research/schema.d.ts +3 -0
  300. package/dist/tools/research/schema.d.ts.map +1 -1
  301. package/dist/tools/research/schema.js +2 -1
  302. package/dist/tools/research/schema.js.map +1 -1
  303. package/dist/tools/research/subtypes.d.ts +4 -0
  304. package/dist/tools/research/subtypes.d.ts.map +1 -0
  305. package/dist/tools/research/subtypes.js +24 -0
  306. package/dist/tools/research/subtypes.js.map +1 -0
  307. package/dist/tools/research/tool-config.js +2 -2
  308. package/dist/tools/research/tool-config.js.map +1 -1
  309. package/dist/tools/review/schema.d.ts +3 -0
  310. package/dist/tools/review/schema.d.ts.map +1 -1
  311. package/dist/tools/review/schema.js +1 -0
  312. package/dist/tools/review/schema.js.map +1 -1
  313. package/dist/tools/review/subtypes.d.ts +4 -0
  314. package/dist/tools/review/subtypes.d.ts.map +1 -0
  315. package/dist/tools/review/subtypes.js +26 -0
  316. package/dist/tools/review/subtypes.js.map +1 -0
  317. package/dist/tools/review/tool-config.js +1 -1
  318. package/dist/tools/review/tool-config.js.map +1 -1
  319. package/dist/types/config.d.ts +17 -28
  320. package/dist/types/config.d.ts.map +1 -1
  321. package/dist/types/enums.d.ts +3 -7
  322. package/dist/types/enums.d.ts.map +1 -1
  323. package/dist/types/enums.js +4 -4
  324. package/dist/types/enums.js.map +1 -1
  325. package/dist/types/run-result.d.ts +56 -21
  326. package/dist/types/run-result.d.ts.map +1 -1
  327. package/dist/types/stage-stats.d.ts +1 -1
  328. package/dist/types/stage-stats.d.ts.map +1 -1
  329. package/dist/types/task-spec.d.ts +17 -15
  330. package/dist/types/task-spec.d.ts.map +1 -1
  331. package/dist/types.d.ts +1 -1
  332. package/dist/types.d.ts.map +1 -1
  333. package/package.json +9 -3
  334. package/dist/identity/main-model-resolver.d.ts +0 -14
  335. package/dist/identity/main-model-resolver.d.ts.map +0 -1
  336. package/dist/identity/main-model-resolver.js +0 -100
  337. package/dist/identity/main-model-resolver.js.map +0 -1
  338. package/dist/lifecycle/handlers/annotate-completion-handler.d.ts +0 -9
  339. package/dist/lifecycle/handlers/annotate-completion-handler.d.ts.map +0 -1
  340. package/dist/lifecycle/handlers/annotate-completion-handler.js +0 -200
  341. package/dist/lifecycle/handlers/annotate-completion-handler.js.map +0 -1
  342. package/dist/lifecycle/handlers/annotate-criteria-handler.d.ts +0 -3
  343. package/dist/lifecycle/handlers/annotate-criteria-handler.d.ts.map +0 -1
  344. package/dist/lifecycle/handlers/annotate-criteria-handler.js +0 -79
  345. package/dist/lifecycle/handlers/annotate-criteria-handler.js.map +0 -1
  346. package/dist/lifecycle/handlers/execution-context-builder.d.ts +0 -5
  347. package/dist/lifecycle/handlers/execution-context-builder.d.ts.map +0 -1
  348. package/dist/lifecycle/handlers/execution-context-builder.js +0 -17
  349. package/dist/lifecycle/handlers/execution-context-builder.js.map +0 -1
  350. package/dist/lifecycle/parallel-criteria-dispatcher.d.ts +0 -62
  351. package/dist/lifecycle/parallel-criteria-dispatcher.d.ts.map +0 -1
  352. package/dist/lifecycle/parallel-criteria-dispatcher.js +0 -328
  353. package/dist/lifecycle/parallel-criteria-dispatcher.js.map +0 -1
  354. package/dist/providers/anthropic-messages-adapter.d.ts +0 -26
  355. package/dist/providers/anthropic-messages-adapter.d.ts.map +0 -1
  356. package/dist/providers/anthropic-messages-adapter.js +0 -127
  357. package/dist/providers/anthropic-messages-adapter.js.map +0 -1
  358. package/dist/providers/base/research-tools.d.ts +0 -47
  359. package/dist/providers/base/research-tools.d.ts.map +0 -1
  360. package/dist/providers/base/research-tools.js +0 -67
  361. package/dist/providers/base/research-tools.js.map +0 -1
  362. package/dist/providers/base/result-builders.d.ts +0 -82
  363. package/dist/providers/base/result-builders.d.ts.map +0 -1
  364. package/dist/providers/base/result-builders.js +0 -112
  365. package/dist/providers/base/result-builders.js.map +0 -1
  366. package/dist/providers/base/time-check.d.ts +0 -9
  367. package/dist/providers/base/time-check.d.ts.map +0 -1
  368. package/dist/providers/base/time-check.js +0 -18
  369. package/dist/providers/base/time-check.js.map +0 -1
  370. package/dist/providers/base/types.d.ts +0 -53
  371. package/dist/providers/base/types.d.ts.map +0 -1
  372. package/dist/providers/base/types.js +0 -2
  373. package/dist/providers/base/types.js.map +0 -1
  374. package/dist/providers/base/usage-accumulator.d.ts +0 -9
  375. package/dist/providers/base/usage-accumulator.d.ts.map +0 -1
  376. package/dist/providers/base/usage-accumulator.js +0 -20
  377. package/dist/providers/base/usage-accumulator.js.map +0 -1
  378. package/dist/providers/call-cache.d.ts +0 -16
  379. package/dist/providers/call-cache.d.ts.map +0 -1
  380. package/dist/providers/call-cache.js +0 -28
  381. package/dist/providers/call-cache.js.map +0 -1
  382. package/dist/providers/file-tracker.d.ts +0 -80
  383. package/dist/providers/file-tracker.d.ts.map +0 -1
  384. package/dist/providers/file-tracker.js +0 -125
  385. package/dist/providers/file-tracker.js.map +0 -1
  386. package/dist/providers/injection-type.d.ts +0 -22
  387. package/dist/providers/injection-type.d.ts.map +0 -1
  388. package/dist/providers/injection-type.js +0 -34
  389. package/dist/providers/injection-type.js.map +0 -1
  390. package/dist/providers/make-runner-shell.d.ts +0 -4
  391. package/dist/providers/make-runner-shell.d.ts.map +0 -1
  392. package/dist/providers/make-runner-shell.js +0 -70
  393. package/dist/providers/make-runner-shell.js.map +0 -1
  394. package/dist/providers/openai-chat-adapter.d.ts +0 -15
  395. package/dist/providers/openai-chat-adapter.d.ts.map +0 -1
  396. package/dist/providers/openai-chat-adapter.js +0 -86
  397. package/dist/providers/openai-chat-adapter.js.map +0 -1
  398. package/dist/providers/openai-responses-adapter.d.ts +0 -15
  399. package/dist/providers/openai-responses-adapter.d.ts.map +0 -1
  400. package/dist/providers/openai-responses-adapter.js +0 -137
  401. package/dist/providers/openai-responses-adapter.js.map +0 -1
  402. package/dist/providers/openai-usage-interceptor.d.ts +0 -25
  403. package/dist/providers/openai-usage-interceptor.d.ts.map +0 -1
  404. package/dist/providers/openai-usage-interceptor.js +0 -121
  405. package/dist/providers/openai-usage-interceptor.js.map +0 -1
  406. package/dist/providers/prevention.d.ts +0 -44
  407. package/dist/providers/prevention.d.ts.map +0 -1
  408. package/dist/providers/prevention.js +0 -108
  409. package/dist/providers/prevention.js.map +0 -1
  410. package/dist/providers/runner-shell-types.d.ts +0 -91
  411. package/dist/providers/runner-shell-types.d.ts.map +0 -1
  412. package/dist/providers/runner-shell-types.js +0 -2
  413. package/dist/providers/runner-shell-types.js.map +0 -1
  414. package/dist/providers/runner-shell.d.ts +0 -67
  415. package/dist/providers/runner-shell.d.ts.map +0 -1
  416. package/dist/providers/runner-shell.js +0 -518
  417. package/dist/providers/runner-shell.js.map +0 -1
  418. package/dist/providers/scratchpad-salvager.d.ts +0 -19
  419. package/dist/providers/scratchpad-salvager.d.ts.map +0 -1
  420. package/dist/providers/scratchpad-salvager.js +0 -44
  421. package/dist/providers/scratchpad-salvager.js.map +0 -1
  422. package/dist/providers/supervision.d.ts +0 -108
  423. package/dist/providers/supervision.d.ts.map +0 -1
  424. package/dist/providers/supervision.js +0 -272
  425. package/dist/providers/supervision.js.map +0 -1
  426. package/dist/providers/text-scratchpad.d.ts +0 -28
  427. package/dist/providers/text-scratchpad.d.ts.map +0 -1
  428. package/dist/providers/text-scratchpad.js +0 -49
  429. package/dist/providers/text-scratchpad.js.map +0 -1
  430. package/dist/providers/tool-definitions.d.ts +0 -6
  431. package/dist/providers/tool-definitions.d.ts.map +0 -1
  432. package/dist/providers/tool-definitions.js +0 -236
  433. package/dist/providers/tool-definitions.js.map +0 -1
  434. package/dist/providers/tool-implementations.d.ts +0 -38
  435. package/dist/providers/tool-implementations.d.ts.map +0 -1
  436. package/dist/providers/tool-implementations.js +0 -254
  437. package/dist/providers/tool-implementations.js.map +0 -1
  438. package/dist/providers/tool-tracker.d.ts +0 -14
  439. package/dist/providers/tool-tracker.d.ts.map +0 -1
  440. package/dist/providers/tool-tracker.js +0 -13
  441. package/dist/providers/tool-tracker.js.map +0 -1
  442. package/dist/reporting/headline-templates/verify.d.ts +0 -3
  443. package/dist/reporting/headline-templates/verify.d.ts.map +0 -1
  444. package/dist/reporting/headline-templates/verify.js +0 -29
  445. package/dist/reporting/headline-templates/verify.js.map +0 -1
  446. package/dist/reporting/report-parser-slots/verify-report.d.ts +0 -27
  447. package/dist/reporting/report-parser-slots/verify-report.d.ts.map +0 -1
  448. package/dist/reporting/report-parser-slots/verify-report.js +0 -51
  449. package/dist/reporting/report-parser-slots/verify-report.js.map +0 -1
  450. package/dist/review/templates/annotator-verify.d.ts +0 -3
  451. package/dist/review/templates/annotator-verify.d.ts.map +0 -1
  452. package/dist/review/templates/annotator-verify.js +0 -21
  453. package/dist/review/templates/annotator-verify.js.map +0 -1
  454. package/dist/review/templates/quality-review-verify.d.ts +0 -3
  455. package/dist/review/templates/quality-review-verify.d.ts.map +0 -1
  456. package/dist/review/templates/quality-review-verify.js +0 -10
  457. package/dist/review/templates/quality-review-verify.js.map +0 -1
  458. package/dist/tools/verify/implementer-criteria.d.ts +0 -61
  459. package/dist/tools/verify/implementer-criteria.d.ts.map +0 -1
  460. package/dist/tools/verify/implementer-criteria.js +0 -125
  461. package/dist/tools/verify/implementer-criteria.js.map +0 -1
  462. package/dist/tools/verify/schema.d.ts +0 -56
  463. package/dist/tools/verify/schema.d.ts.map +0 -1
  464. package/dist/tools/verify/schema.js +0 -16
  465. package/dist/tools/verify/schema.js.map +0 -1
  466. package/dist/tools/verify/tool-config.d.ts +0 -14
  467. package/dist/tools/verify/tool-config.d.ts.map +0 -1
  468. package/dist/tools/verify/tool-config.js +0 -146
  469. package/dist/tools/verify/tool-config.js.map +0 -1
package/README.md CHANGED
@@ -40,7 +40,7 @@ for (const r of results) {
40
40
  - **Routing engine** — capability filter → agent type → cheapest qualifier
41
41
  - **`runTasks`** — parallel dispatch, returns per-task results with usage, cost, files touched, status, and escalation log
42
42
  - **Reviewed lifecycle** — parallel spec + quality lint review by a different tier, conditional rework when verdicts demand changes, annotator-scored commit gate, file artifact verification
43
- - **Executors** — pure `execute<Tool>(ctx, input)` functions for delegate, audit, review, verify, debug, execute-plan, retry, investigate, research (used by the HTTP server package)
43
+ - **Executors** — pure `execute<Tool>(ctx, input)` functions for delegate, audit, review, debug, execute-plan, retry, investigate, research (used by the HTTP server package)
44
44
  - **Tool schemas** — Zod-validated input shapes for each tool, exportable via `./tool-schemas/*`
45
45
  - **BatchRegistry** — server-wide state machine for pending / awaiting_clarification / complete / failed / expired batches with context-block refcount pinning
46
46
  - **Sandboxed tools** — `readFile`, `writeFile`, `grep`, `glob`, `listFiles`, `runShell` with `cwd-only` confinement
@@ -91,13 +91,13 @@ const engine = createDefaultReviewerEngine();
91
91
 
92
92
  ### AnnotatorEngine
93
93
 
94
- Read-only annotation pass for **non-artifact-producing** tools (`audit`, `review`, `verify`, `debug`, `investigate`). Verdict is always `'annotated'` (success) or `'error'` (transport failure); never gates rework.
94
+ Read-only annotation pass for **non-artifact-producing** tools (`audit`, `review`, `debug`, `investigate`, `research`, `explore`). Verdict is always `'annotated'` (success) or `'error'` (transport failure); never gates rework.
95
95
 
96
96
  | Method | Description |
97
97
  |---|---|
98
- | `annotate(shell, input)` | Runs an annotation pass, re-judging severity and scoring confidence per finding |
98
+ | `annotate(session, input)` | Runs an annotation pass, re-judging severity and scoring confidence per finding |
99
99
 
100
- Accepts a `RunnerShell` and an `AnnotatorInput` (`{ workerOutput, brief, cwd, route, abortSignal?, deadlineMs? }`). Returns `AnnotatorCallResult` with parsed findings, raw assistant text, and cost breakdown.
100
+ Accepts a `Session` (opened via the v4.4 provider boundary) and an `AnnotatorInput` (`{ workerOutput, brief, cwd, route, abortSignal?, deadlineMs? }`). Returns `AnnotatorCallResult` with parsed findings, raw assistant text, and cost breakdown.
101
101
 
102
102
  ```ts
103
103
  import { AnnotatorEngine } from '@zhixuan92/multi-model-agent-core/review';
@@ -137,7 +137,7 @@ Per-tool configuration interface that drives `executeTask`. Each tool exports it
137
137
  ```ts
138
138
  interface ToolConfig<Input, Brief, Report> {
139
139
  name: string; // tool name
140
- category: 'artifact_producing' | 'read_only' | 'research' | 'assist';
140
+ category: 'artifact_producing' | 'read_only' | 'assist';
141
141
  agentType: AgentType; // 'standard' | 'complex'
142
142
  briefSlot: BriefSlotFiller<Input, Brief[]>; // input → briefs
143
143
  buildTaskSpec: (brief: Brief, ctx: ExecutionContext) => TaskSpec;
@@ -160,7 +160,6 @@ Each tool's config lives at `@zhixuan92/multi-model-agent-core/tools/<tool>/tool
160
160
  | delegate | `./tools/delegate/tool-config` |
161
161
  | review | `./tools/review/tool-config` |
162
162
  | audit | `./tools/audit/tool-config` |
163
- | verify | `./tools/verify/tool-config` |
164
163
  | debug | `./tools/debug/tool-config` |
165
164
  | investigate | `./tools/investigate/tool-config` |
166
165
  | research | `./tools/research/tool-config` |
@@ -187,7 +186,7 @@ Each tool's config lives at `@zhixuan92/multi-model-agent-core/tools/<tool>/tool
187
186
  | `./intake/classify` | `classifyDraft` — deterministic classification heuristic |
188
187
  | `./intake/confirm` | `processConfirmations` — clarification resume processing |
189
188
  | `./intake/clarification-store` | `ClarificationStore` — TTL/LRU state for clarification sets |
190
- | `./intake/compilers/*` | Route compilers: `delegate`, `review`, `debug`, `verify`, `audit`, `execute-plan`, `investigate`, `research` |
189
+ | `./intake/compilers/*` | Route compilers: `delegate`, `review`, `debug`, `audit`, `execute-plan`, `investigate`, `research` |
191
190
  | `./reporting/parse-investigation-report` | `parseInvestigationReport`, `parseCitations`, `parseConfidence` (3.4.0) |
192
191
  | `./auto-commit` | `autoCommitFiles` — git commit helper for worker file changes |
193
192
  | `./file-artifact-check` | `partitionFilePaths`, `checkOutputTargets` — output target verification |
@@ -197,7 +196,7 @@ Each tool's config lives at `@zhixuan92/multi-model-agent-core/tools/<tool>/tool
197
196
  | `./review` | `ReviewerEngine`, `AnnotatorEngine` — v4 review surface (see Engine API below) |
198
197
  | `./lifecycle/task-executor` | `executeTask` — generic per-tool orchestrator driven by a `ToolConfig` |
199
198
  | `./lifecycle/executor-output-types` | `ExecutorOutput`, `BatchTimings`, `BatchAggregateCost` |
200
- | `./tools/<tool>/tool-config` | Per-tool `ToolConfig` objects (delegate, review, audit, verify, debug, investigate, research, execute-plan, retry, register-context-block) |
199
+ | `./tools/<tool>/tool-config` | Per-tool `ToolConfig` objects (delegate, review, audit, debug, investigate, research, execute-plan, retry, register-context-block) |
201
200
 
202
201
  ## Diagnostic logging
203
202
 
@@ -229,23 +228,13 @@ mmagent logs --follow --batch=<id> # tail + filter
229
228
 
230
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.
231
230
 
232
- ## What's new in 4.0.5
231
+ ## What's new in 4.5.0
233
232
 
234
- - **`/research` single-task external research route.** New `POST /research` endpoint and `toolConfig` at `tools/research/tool-config.ts`. Schema at `tools/research/schema.ts`, brief compiler at `intake/brief-compiler-slots/research.ts`, report parser at `reporting/report-parser-slots/research-report.ts`, headline template at `reporting/headline-templates/research.ts`. Replaces the 3-worker `/explore` orchestrator.
235
- - **`mma-research` skill + `mma-explore` skill rewrite.** `mma-research` is a thin 1:1 wrapper around `/research`. `mma-explore` is now a main-agent playbook that fans out `mma-investigate` + `mma-research` in parallel; synthesis moves from a worker to the main agent.
236
- - **`/explore` HTTP route removed.** `tools/explore/`, `intake/brief-compiler-slots/explore.ts`, `reporting/parse-explore-report.ts`, `reporting/report-parser-slots/explore-report.ts`, `reporting/headline-templates/explore.ts`, `research/explore-orchestrator.ts`, and the HTTP handler removed. 8 explore-specific telemetry events removed from `observability-events.ts` and `telemetry-types.ts`.
237
-
238
- **Migration from 4.0.4:** library consumers referencing `tools/explore/`, `explore-orchestrator`, or explore-route enums must update to `tools/research/`. `RouteName` drops `'explore_internal' | 'explore_external' | 'explore_synthesize'` and adds `'research'`.
239
-
240
- Full history: [CHANGELOG](https://github.com/zhixuan312/multi-model-agent/blob/master/CHANGELOG.md).
241
-
242
- ## What's new in 4.0.0
243
-
244
- - **Closed enums everywhere.** `reviewPolicy` → `'full' | 'quality_only' | 'diff_only' | 'none'` (removed `'spec_only'` and `'off'`); `agentType` → `'standard' | 'complex'`; `tier` drops `'main'`; `mainModelFamily` drops `'gpt-5'`.
245
- - **4-field `TokenUsage`.** `{inputTokens, outputTokens, cachedReadTokens, cachedNonReadTokens}` — `outputTokens` includes reasoning; `reasoningTokens` and `cachedCreationTokens` removed. SCHEMA_VERSION → 4.
246
- - **Clarification flow removed.** `confirm_clarifications` route, `mma-clarifications` skill, and `proposedInterpretation` field gone. Intake resolves ambiguity by picking the most likely interpretation.
247
- - **Engine API.** New `ReviewerEngine` (gating reviews for artifact-producing tools) + `AnnotatorEngine` (read-only annotation passes) replace ad-hoc review functions. Per-tool executors collapsed into a single `executeTask` orchestrator driven by `ToolConfig` slot objects. See [Engine API](#v4-engine-api) above.
248
- - **Internals.** Declarative `StagePlan` driven by a single `LifecycleDriver`; `RunnerShell` + 3 thin adapters replaces three parallel runner files. `ReadinessClassifier`, `EffortInferer`, `AttemptRecorder`, `RequestPipeline`, `TelemetryFlushWorker`, `CrossTierGuard` removed.
233
+ - **`getRealFilesChanged(state)` helper (`lifecycle/real-diff.ts`).** Derives the canonical written-files list from `git diff --name-only <preTaskHeadSha>` + filtered untracked files (snapshot-diffed against `state.preTaskUntrackedFiles` captured at task entry). Returns `{files, source}` with source `'git_diff' | 'self_report' | 'git_error'`. `git-commit-handler` and the telemetry event-builder both route through this helper, so commit decisions and `filesWrittenCount` cannot disagree with the actual git state.
234
+ - **`progress-watchdog` (`bounded-execution/progress-watchdog.ts`).** New module mirroring the stall-watchdog shape: `startProgressWatchdog(ctx) disposer` arms a setInterval poller (5–30s) that aborts via `controller.abort()` when `wallClockMs > thrashWallClockMs` AND `git diff` empty (signal 1). `recordPostHocSignals` checks turn-count thrash (signal 2) and scope violations against `normalizeScopeEntry` / `isInScope` from `lifecycle/scope-match.ts` (signal 3). Wired around `delegateWithEscalation()` in `task-runner.ts` and `session.send()` in `rework-handler.ts`. Skip gates: `!config.enabled`, `toolCategory !== 'artifact_producing'`, missing `preTaskHeadSha` / `preTaskUntrackedFiles`.
235
+ - **Four new `defaults.*` config fields.** `progressWatchdogEnabled` (default `true`), `thrashTurns` (`25`), `thrashWallClockMs` (`1_200_000`), `thrashSoftTurns` (`10`). All optional.
236
+ - **Per-stage `mainEquivalentCostUSD` on `stageStats`.** Each stage entry carries the per-stage main-model-equivalent cost alongside `costUSD` so the frontend slices per-model savings without re-running rate-card math.
237
+ - **`LifecycleState` watchdog fields.** `preTaskUntrackedFiles`, `preStopReason`, `thrashingDetected`, `scopeViolations[]` all optional, only populated when the watchdog fires.
249
238
 
250
239
  Full history: [CHANGELOG](https://github.com/zhixuan312/multi-model-agent/blob/master/CHANGELOG.md).
251
240
 
@@ -1 +1 @@
1
- {"version":3,"file":"cost-compute.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/cost-compute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAID,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAC3B,QAAQ,GAAG,IAAI,CA8BjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAoB5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAO9D"}
1
+ {"version":3,"file":"cost-compute.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/cost-compute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAID,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAC3B,QAAQ,GAAG,IAAI,CAwCjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAoB5E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAO9D"}
@@ -17,7 +17,17 @@ export function resolveRateCard(model, override) {
17
17
  const output = (reasoning !== undefined && Number.isFinite(reasoning) && reasoning > rawOutput)
18
18
  ? reasoning
19
19
  : rawOutput;
20
+ // Cache-read default: 0.1× input — matches Anthropic's 5-min/1-hour
21
+ // cache-read rate and OpenAI's gpt-5.x 90% discount. Explicit per-model
22
+ // overrides in model-profiles.json take precedence.
20
23
  const cachedRead = override?.cachedReadCostPerMTok ?? profile.cachedReadCostPerMTok ?? input * 0.10;
24
+ // Cache-write default: 1.0× input. Anthropic charges 1.25× (5-min TTL)
25
+ // or 2.0× (1-hour TTL) for cache writes, but the Anthropic premium is
26
+ // encoded on the `claude` parent profile (`cachedNonRead: 3.75` = 1.25×
27
+ // base $3) and inherited by every claude-* model — so this fallback is
28
+ // only reached for non-Anthropic models that don't emit cache writes
29
+ // (OpenAI/codex doesn't emit a cache-write field) or for unknown
30
+ // providers. For those, "no premium" is the safe default.
21
31
  const cachedNonRead = override?.cachedNonReadCostPerMTok ?? profile.cachedNonReadCostPerMTok ?? input;
22
32
  return {
23
33
  inputCostPerMTok: input,
@@ -1 +1 @@
1
- {"version":3,"file":"cost-compute.js","sourceRoot":"","sources":["../../src/bounded-execution/cost-compute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-compute.js","sourceRoot":"","sources":["../../src/bounded-execution/cost-compute.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,5 @@ export * from './file-artifact-check.js';
6
6
  export * from './error-classifier.js';
7
7
  export * from './safety-max-turns.js';
8
8
  export * from './stall-watchdog.js';
9
+ export * from './progress-watchdog.js';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bounded-execution/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
@@ -7,4 +7,5 @@ export * from './file-artifact-check.js';
7
7
  export * from './error-classifier.js';
8
8
  export * from './safety-max-turns.js';
9
9
  export * from './stall-watchdog.js';
10
+ export * from './progress-watchdog.js';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bounded-execution/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bounded-execution/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { LifecycleState } from '../lifecycle/stage-plan-types.js';
2
+ export interface ProgressWatchdogConfig {
3
+ enabled: boolean;
4
+ thrashTurns: number;
5
+ thrashWallClockMs: number;
6
+ thrashSoftWallClockMs: number;
7
+ }
8
+ export interface ProgressWatchdogContext {
9
+ state: LifecycleState;
10
+ controller: AbortController;
11
+ emit: (event: Record<string, unknown>) => void;
12
+ config: ProgressWatchdogConfig;
13
+ taskIndex: number;
14
+ batchId?: string;
15
+ /** State the watchdog mutates: `fired` so post-hoc code knows the abort came from us. */
16
+ state2: {
17
+ fired: boolean;
18
+ };
19
+ }
20
+ /**
21
+ * Starts the progress watchdog. Returns a disposer that MUST be called in a
22
+ * finally{} block. Mirrors startStallWatchdog(): same shape, single function
23
+ * call, returns cleanup. The watchdog polls on a setInterval; when conditions
24
+ * trip, it fires `controller.abort()` to interrupt the in-flight session.send().
25
+ *
26
+ * Post-hoc signals (turn-count thrash detection and scope-violation analysis)
27
+ * are handled by recordPostHocSignals() below, called AFTER session.send()
28
+ * returns. They mutate state for the annotator to consume.
29
+ */
30
+ export declare function startProgressWatchdog(ctx: ProgressWatchdogContext): () => void;
31
+ /**
32
+ * Post-hoc finalization called AFTER session.send() returns. Three things:
33
+ *
34
+ * 1. Turn-count thrash detection (since we can't observe turns mid-flight).
35
+ * If turns > thrashTurns AND real diff is empty AND watchdog didn't already
36
+ * trip mid-flight, mark state.thrashingDetected = true so the annotator
37
+ * surfaces it. No abort (the session already finished); this is informative.
38
+ * 2. Scope-violation analysis. Compute out-of-scope files from the final diff
39
+ * against declared filePaths; populate state.scopeViolations[].
40
+ * 3. Emit observability events for both.
41
+ */
42
+ export declare function recordPostHocSignals(state: LifecycleState, turnsUsed: number, config: ProgressWatchdogConfig, emit: (event: Record<string, unknown>) => void, taskIndex: number, batchId?: string): Promise<void>;
43
+ //# sourceMappingURL=progress-watchdog.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,137 @@
1
+ // packages/core/src/bounded-execution/progress-watchdog.ts
2
+ import { spawnSync } from 'node:child_process';
3
+ import { getRealFilesChanged } from '../lifecycle/real-diff.js';
4
+ import { normalizeScopeEntry, isInScope } from '../lifecycle/scope-match.js';
5
+ /**
6
+ * Starts the progress watchdog. Returns a disposer that MUST be called in a
7
+ * finally{} block. Mirrors startStallWatchdog(): same shape, single function
8
+ * call, returns cleanup. The watchdog polls on a setInterval; when conditions
9
+ * trip, it fires `controller.abort()` to interrupt the in-flight session.send().
10
+ *
11
+ * Post-hoc signals (turn-count thrash detection and scope-violation analysis)
12
+ * are handled by recordPostHocSignals() below, called AFTER session.send()
13
+ * returns. They mutate state for the annotator to consume.
14
+ */
15
+ export function startProgressWatchdog(ctx) {
16
+ const ts = () => new Date().toISOString();
17
+ const meta = {
18
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
19
+ taskIndex: ctx.taskIndex,
20
+ };
21
+ // Three skip conditions evaluated once at arm:
22
+ if (!ctx.config.enabled) {
23
+ ctx.emit({ event: 'progress_watchdog_skipped_disabled', ts: ts(), reason: 'config_disabled', ...meta });
24
+ return () => undefined;
25
+ }
26
+ if (ctx.state.toolCategory !== 'artifact_producing') {
27
+ return () => undefined; // silent no-op for read-only routes
28
+ }
29
+ if (!ctx.state.preTaskHeadSha || !ctx.state.preTaskUntrackedFiles) {
30
+ ctx.emit({ event: 'progress_watchdog_skipped_non_git', ts: ts(), reason: 'non_git_cwd', ...meta });
31
+ return () => undefined;
32
+ }
33
+ ctx.emit({ event: 'progress_watchdog_armed', ts: ts(), toolCategory: ctx.state.toolCategory, ...meta });
34
+ const startedAtMs = Date.now();
35
+ let warned = false;
36
+ // Poll interval clamped to [5s, 30s]. Coarser than stall-watchdog's [1s, 5s]
37
+ // because git diff is heavier than just checking idle time. Total cost: a
38
+ // few git invocations per task — negligible.
39
+ const pollIntervalMs = Math.min(30_000, Math.max(5_000, Math.floor(ctx.config.thrashWallClockMs / 60)));
40
+ const interval = setInterval(() => {
41
+ if (ctx.state2.fired)
42
+ return;
43
+ if (ctx.controller.signal.aborted) {
44
+ ctx.state2.fired = true;
45
+ return;
46
+ }
47
+ const wallClockMs = Date.now() - startedAtMs;
48
+ // Cheap pre-check: only call git when we're past the soft threshold (no
49
+ // point grepping git every 30s during the first few minutes of a task).
50
+ if (wallClockMs < ctx.config.thrashSoftWallClockMs)
51
+ 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
+ }
78
+ }, pollIntervalMs);
79
+ return () => {
80
+ clearInterval(interval);
81
+ ctx.emit({
82
+ event: 'progress_watchdog_disarmed',
83
+ ts: ts(),
84
+ reason: ctx.state2.fired ? 'thrash' : 'normal',
85
+ ...meta,
86
+ });
87
+ };
88
+ }
89
+ /**
90
+ * Post-hoc finalization called AFTER session.send() returns. Three things:
91
+ *
92
+ * 1. Turn-count thrash detection (since we can't observe turns mid-flight).
93
+ * If turns > thrashTurns AND real diff is empty AND watchdog didn't already
94
+ * trip mid-flight, mark state.thrashingDetected = true so the annotator
95
+ * surfaces it. No abort (the session already finished); this is informative.
96
+ * 2. Scope-violation analysis. Compute out-of-scope files from the final diff
97
+ * against declared filePaths; populate state.scopeViolations[].
98
+ * 3. Emit observability events for both.
99
+ */
100
+ export async function recordPostHocSignals(state, turnsUsed, config, emit, taskIndex, batchId) {
101
+ if (!config.enabled)
102
+ return;
103
+ if (state.toolCategory !== 'artifact_producing')
104
+ return;
105
+ if (!state.preTaskHeadSha || !state.preTaskUntrackedFiles)
106
+ return;
107
+ const meta = {
108
+ ...(batchId !== undefined && { batchId }),
109
+ taskIndex,
110
+ };
111
+ const ts = () => new Date().toISOString();
112
+ const realFiles = await getRealFilesChanged(state);
113
+ if (realFiles.source !== 'git_diff')
114
+ return;
115
+ // (1) Post-hoc turn-count thrash (only if watchdog didn't already trip)
116
+ if (!state.thrashingDetected && turnsUsed > config.thrashTurns && realFiles.files.length === 0) {
117
+ state.thrashingDetected = true;
118
+ emit({
119
+ event: 'progress_watchdog_fired_thrash',
120
+ ts: ts(),
121
+ turnsUsed,
122
+ threshold: 'turns_post_hoc',
123
+ ...meta,
124
+ });
125
+ }
126
+ // (2) Scope-violation analysis
127
+ const taskSpec = state.task;
128
+ const declaredScope = (taskSpec?.filePaths ?? []).map((entry) => normalizeScopeEntry(state.cwd ?? '', entry));
129
+ if (declaredScope.length > 0 && realFiles.files.length > 0) {
130
+ const violations = realFiles.files.filter((f) => !isInScope(f, declaredScope));
131
+ if (violations.length > 0) {
132
+ state.scopeViolations = violations;
133
+ emit({ event: 'progress_watchdog_scope_violation', ts: ts(), outOfScope: violations, ...meta });
134
+ }
135
+ }
136
+ }
137
+ //# sourceMappingURL=progress-watchdog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-watchdog.js","sourceRoot":"","sources":["../../src/bounded-execution/progress-watchdog.ts"],"names":[],"mappings":"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"}
@@ -23,10 +23,12 @@ export type MainAgentModelResolution = {
23
23
  reason: string;
24
24
  };
25
25
  /**
26
- * Return the names of openai-compatible agents carrying an inline `apiKey`
27
- * instead of using `apiKeyEnv`. The schema permits both, but plaintext API
28
- * keys in a config file are a backup/dotfile/git footgun — serve surfaces
29
- * this once at startup so the operator can react.
26
+ * Return the names of agents carrying an inline `apiKey` instead of using
27
+ * `apiKeyEnv`. The schema permits both, but plaintext API keys in a config
28
+ * 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.
30
32
  */
31
33
  export declare function collectInlineApiKeyOffenders(config: MultiModelConfig): string[];
32
34
  /**
@@ -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;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAW/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":"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"}
@@ -4,16 +4,17 @@
4
4
  // (decide-which-source-wins) live here.
5
5
  import { pricingSchema } from './schema.js';
6
6
  /**
7
- * Return the names of openai-compatible agents carrying an inline `apiKey`
8
- * instead of using `apiKeyEnv`. The schema permits both, but plaintext API
9
- * keys in a config file are a backup/dotfile/git footgun — serve surfaces
10
- * this once at startup so the operator can react.
7
+ * Return the names of agents carrying an inline `apiKey` instead of using
8
+ * `apiKeyEnv`. The schema permits both, but plaintext API keys in a config
9
+ * 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.
11
13
  */
12
14
  export function collectInlineApiKeyOffenders(config) {
13
15
  const offenders = [];
14
16
  for (const [name, agent] of Object.entries(config.agents)) {
15
- if ((agent.type === 'openai-compatible' || agent.type === 'claude-compatible') &&
16
- typeof agent.apiKey === 'string') {
17
+ if (typeof agent.apiKey === 'string') {
17
18
  offenders.push(name);
18
19
  }
19
20
  }
@@ -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;;;;;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,IACE,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC;YAC1E,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,EAC1D,CAAC;YACD,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":"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"}
@@ -83,26 +83,6 @@ export declare const serverConfigSchema: z.ZodObject<{
83
83
  export declare const multiModelConfigSchema: z.ZodObject<{
84
84
  agents: z.ZodObject<{
85
85
  standard: z.ZodDiscriminatedUnion<[z.ZodObject<{
86
- model: z.ZodString;
87
- effort: z.ZodOptional<z.ZodEnum<{
88
- none: "none";
89
- low: "low";
90
- medium: "medium";
91
- high: "high";
92
- }>>;
93
- inputCostPerMTok: z.ZodOptional<z.ZodNumber>;
94
- outputCostPerMTok: z.ZodOptional<z.ZodNumber>;
95
- timeoutMs: z.ZodOptional<z.ZodNumber>;
96
- sandboxPolicy: z.ZodOptional<z.ZodEnum<{
97
- none: "none";
98
- "cwd-only": "cwd-only";
99
- }>>;
100
- inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
101
- type: z.ZodLiteral<"openai-compatible">;
102
- baseUrl: z.ZodString;
103
- apiKey: z.ZodOptional<z.ZodString>;
104
- apiKeyEnv: z.ZodOptional<z.ZodString>;
105
- }, z.core.$strip>, z.ZodObject<{
106
86
  model: z.ZodString;
107
87
  effort: z.ZodOptional<z.ZodEnum<{
108
88
  none: "none";
@@ -119,24 +99,7 @@ export declare const multiModelConfigSchema: z.ZodObject<{
119
99
  }>>;
120
100
  inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
121
101
  type: z.ZodLiteral<"claude">;
122
- }, z.core.$strict>, z.ZodObject<{
123
- model: z.ZodString;
124
- effort: z.ZodOptional<z.ZodEnum<{
125
- none: "none";
126
- low: "low";
127
- medium: "medium";
128
- high: "high";
129
- }>>;
130
- inputCostPerMTok: z.ZodOptional<z.ZodNumber>;
131
- outputCostPerMTok: z.ZodOptional<z.ZodNumber>;
132
- timeoutMs: z.ZodOptional<z.ZodNumber>;
133
- sandboxPolicy: z.ZodOptional<z.ZodEnum<{
134
- none: "none";
135
- "cwd-only": "cwd-only";
136
- }>>;
137
- inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
138
- type: z.ZodLiteral<"claude-compatible">;
139
- baseUrl: z.ZodString;
102
+ baseUrl: z.ZodOptional<z.ZodString>;
140
103
  apiKey: z.ZodOptional<z.ZodString>;
141
104
  apiKeyEnv: z.ZodOptional<z.ZodString>;
142
105
  }, z.core.$strict>, z.ZodObject<{
@@ -156,28 +119,11 @@ export declare const multiModelConfigSchema: z.ZodObject<{
156
119
  }>>;
157
120
  inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
158
121
  type: z.ZodLiteral<"codex">;
159
- }, z.core.$strict>], "type">;
160
- complex: z.ZodDiscriminatedUnion<[z.ZodObject<{
161
- model: z.ZodString;
162
- effort: z.ZodOptional<z.ZodEnum<{
163
- none: "none";
164
- low: "low";
165
- medium: "medium";
166
- high: "high";
167
- }>>;
168
- inputCostPerMTok: z.ZodOptional<z.ZodNumber>;
169
- outputCostPerMTok: z.ZodOptional<z.ZodNumber>;
170
- timeoutMs: z.ZodOptional<z.ZodNumber>;
171
- sandboxPolicy: z.ZodOptional<z.ZodEnum<{
172
- none: "none";
173
- "cwd-only": "cwd-only";
174
- }>>;
175
- inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
176
- type: z.ZodLiteral<"openai-compatible">;
177
- baseUrl: z.ZodString;
122
+ baseUrl: z.ZodOptional<z.ZodString>;
178
123
  apiKey: z.ZodOptional<z.ZodString>;
179
124
  apiKeyEnv: z.ZodOptional<z.ZodString>;
180
- }, z.core.$strip>, z.ZodObject<{
125
+ }, z.core.$strict>], "type">;
126
+ complex: z.ZodDiscriminatedUnion<[z.ZodObject<{
181
127
  model: z.ZodString;
182
128
  effort: z.ZodOptional<z.ZodEnum<{
183
129
  none: "none";
@@ -194,24 +140,7 @@ export declare const multiModelConfigSchema: z.ZodObject<{
194
140
  }>>;
195
141
  inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
196
142
  type: z.ZodLiteral<"claude">;
197
- }, z.core.$strict>, z.ZodObject<{
198
- model: z.ZodString;
199
- effort: z.ZodOptional<z.ZodEnum<{
200
- none: "none";
201
- low: "low";
202
- medium: "medium";
203
- high: "high";
204
- }>>;
205
- inputCostPerMTok: z.ZodOptional<z.ZodNumber>;
206
- outputCostPerMTok: z.ZodOptional<z.ZodNumber>;
207
- timeoutMs: z.ZodOptional<z.ZodNumber>;
208
- sandboxPolicy: z.ZodOptional<z.ZodEnum<{
209
- none: "none";
210
- "cwd-only": "cwd-only";
211
- }>>;
212
- inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
213
- type: z.ZodLiteral<"claude-compatible">;
214
- baseUrl: z.ZodString;
143
+ baseUrl: z.ZodOptional<z.ZodString>;
215
144
  apiKey: z.ZodOptional<z.ZodString>;
216
145
  apiKeyEnv: z.ZodOptional<z.ZodString>;
217
146
  }, z.core.$strict>, z.ZodObject<{
@@ -231,6 +160,9 @@ export declare const multiModelConfigSchema: z.ZodObject<{
231
160
  }>>;
232
161
  inputTokenSoftLimit: z.ZodOptional<z.ZodNumber>;
233
162
  type: z.ZodLiteral<"codex">;
163
+ baseUrl: z.ZodOptional<z.ZodString>;
164
+ apiKey: z.ZodOptional<z.ZodString>;
165
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
234
166
  }, z.core.$strict>], "type">;
235
167
  }, z.core.$strip>;
236
168
  defaults: z.ZodDefault<z.ZodObject<{
@@ -249,6 +181,10 @@ export declare const multiModelConfigSchema: z.ZodObject<{
249
181
  }>>;
250
182
  largeResponseThresholdChars: z.ZodOptional<z.ZodNumber>;
251
183
  mainModel: z.ZodOptional<z.ZodString>;
184
+ progressWatchdogEnabled: z.ZodOptional<z.ZodBoolean>;
185
+ thrashTurns: z.ZodOptional<z.ZodNumber>;
186
+ thrashWallClockMs: z.ZodOptional<z.ZodNumber>;
187
+ thrashSoftTurns: z.ZodOptional<z.ZodNumber>;
252
188
  }, z.core.$strip>>;
253
189
  diagnostics: z.ZodOptional<z.ZodObject<{
254
190
  log: z.ZodDefault<z.ZodBoolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB;;;;;0BAK0B;AAC1B,eAAO,MAAM,uBAAuB,UAAY,CAAC;AAEjD;;;iEAGiE;AACjE,eAAO,MAAM,wBAAwB,UAAY,CAAC;AAElD;oDACoD;AACpD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;iCAKiC;AACjC,eAAO,MAAM,sBAAsB,MAAO,CAAC;AAE3C;;;yEAGyE;AACzE,eAAO,MAAM,sBAAsB,MAAO,CAAC;AAuE3C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;mBAqC9B,CAAC;AAEJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AASlE,eAAO,MAAM,aAAa;;;;;kBAKf,CAAC;AA4EZ,4DAA4D;AAC5D,eAAO,MAAM,2BAA2B,QAAa,CAAC;AAsCtD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;kBAUpB,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2BxB,CAAC;AAEZ,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,IAAI,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,CAAA;AAEzE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAE1D"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB;;;;;0BAK0B;AAC1B,eAAO,MAAM,uBAAuB,UAAY,CAAC;AAEjD;;;iEAGiE;AACjE,eAAO,MAAM,wBAAwB,UAAY,CAAC;AAElD;oDACoD;AACpD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;iCAKiC;AACjC,eAAO,MAAM,sBAAsB,MAAO,CAAC;AAE3C;;;yEAGyE;AACzE,eAAO,MAAM,sBAAsB,MAAO,CAAC;AAuE3C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;mBAqC9B,CAAC;AAEJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AASlE,eAAO,MAAM,aAAa;;;;;kBAKf,CAAC;AAuEZ,4DAA4D;AAC5D,eAAO,MAAM,2BAA2B,QAAa,CAAC;AAsCtD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;kBAUpB,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2BxB,CAAC;AAEZ,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,IAAI,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,CAAA;AAEzE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAE1D"}
@@ -149,36 +149,29 @@ const baseAgentFields = {
149
149
  sandboxPolicy: sandboxPolicySchema,
150
150
  inputTokenSoftLimit: z.number().int().positive().optional(),
151
151
  };
152
- const openAICompatibleAgentSchema = z.object({
153
- type: z.literal('openai-compatible'),
154
- baseUrl: z.string().min(1, 'baseUrl is required for openai-compatible agents'),
155
- apiKey: z.string().optional(),
156
- apiKeyEnv: z.string().optional(),
157
- ...baseAgentFields,
158
- });
152
+ // v4.4: two provider types only. `claude` covers Anthropic API + any
153
+ // Anthropic-compatible proxy (set baseUrl). `codex` covers ChatGPT
154
+ // subscription + OpenAI API + any OpenAI-compatible endpoint (Groq,
155
+ // DeepSeek, OpenRouter, Together, LM Studio, Ollama — set baseUrl +
156
+ // apiKeyEnv to enable). The compatibility variants from earlier
157
+ // releases have been removed — collapse all of them onto `claude` or
158
+ // `codex` with the appropriate `baseUrl` set.
159
159
  const claudeAgentSchema = z.object({
160
160
  type: z.literal('claude'),
161
- ...baseAgentFields,
162
- }).strict();
163
- // `claude-compatible` targets an Anthropic-format endpoint hosted by another
164
- // vendor (e.g. DeepSeek's https://api.deepseek.com/anthropic). It mirrors
165
- // `openai-compatible`: required baseUrl + apiKey/apiKeyEnv, talks the same
166
- // wire format as the canonical provider.
167
- const claudeCompatibleAgentSchema = z.object({
168
- type: z.literal('claude-compatible'),
169
- baseUrl: z.string().min(1, 'baseUrl is required for claude-compatible agents'),
161
+ baseUrl: z.string().min(1).optional(),
170
162
  apiKey: z.string().optional(),
171
163
  apiKeyEnv: z.string().optional(),
172
164
  ...baseAgentFields,
173
165
  }).strict();
174
166
  const codexAgentSchema = z.object({
175
167
  type: z.literal('codex'),
168
+ baseUrl: z.string().min(1).optional(),
169
+ apiKey: z.string().optional(),
170
+ apiKeyEnv: z.string().optional(),
176
171
  ...baseAgentFields,
177
172
  }).strict();
178
173
  const agentConfigSchema = z.discriminatedUnion('type', [
179
- openAICompatibleAgentSchema,
180
174
  claudeAgentSchema,
181
- claudeCompatibleAgentSchema,
182
175
  codexAgentSchema,
183
176
  ]);
184
177
  // === MultiModelConfig schema ===
@@ -193,6 +186,10 @@ const defaultsSchema = z.object({
193
186
  // in the resolver chain. Headers + per-client auto-detection take
194
187
  // precedence; this is the explicit operator override / last resort.
195
188
  mainModel: z.string().min(1).optional(),
189
+ progressWatchdogEnabled: z.boolean().optional(),
190
+ thrashTurns: z.number().int().positive().optional(),
191
+ thrashWallClockMs: z.number().int().positive().optional(),
192
+ thrashSoftTurns: z.number().int().positive().optional(),
196
193
  }).default(() => ({
197
194
  timeoutMs: DEFAULT_TASK_TIMEOUT_MS,
198
195
  stallTimeoutMs: DEFAULT_STALL_TIMEOUT_MS,