mixdog 0.9.174 → 1.0.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 (935) hide show
  1. package/README.md +11 -12
  2. package/package.json +2 -2
  3. package/scripts/agent-turn-trace-probe.mjs +1 -1
  4. package/scripts/build-ffmpeg-runtime.sh +16 -0
  5. package/scripts/build-runtime-linux.sh +8 -2
  6. package/scripts/build-runtime-macos.sh +8 -2
  7. package/scripts/computer-task-cost-report.mjs +1 -9
  8. package/scripts/context-renewal-live-check.mjs +2 -1
  9. package/scripts/graph-parity.mjs +78 -55
  10. package/scripts/lib/bench-sandbox.mjs +67 -0
  11. package/scripts/lib/bench-sandbox.test.mjs +54 -0
  12. package/scripts/lib/coverage.mjs +2 -4
  13. package/scripts/lib/run-node-tests.mjs +24 -1
  14. package/scripts/lib/session-bench-fmt.mjs +65 -0
  15. package/scripts/lib/session-bench-render.mjs +394 -0
  16. package/scripts/lib/smoke-loop-shared.mjs +28 -0
  17. package/scripts/lib/smoke-loop-shared.test.mjs +22 -0
  18. package/scripts/lib/trace-row.mjs +40 -0
  19. package/scripts/lib/trace-row.test.mjs +47 -0
  20. package/scripts/lib/trace-stats.mjs +7 -0
  21. package/scripts/lib/trace-stats.test.mjs +7 -1
  22. package/scripts/llm-trace-summary.mjs +2 -44
  23. package/scripts/memory-chunk-quality.mjs +1 -1
  24. package/scripts/memory-layer2-check.mjs +1 -1
  25. package/scripts/pg-memory-diet.mjs +1 -1
  26. package/scripts/plan-runtime-release-tag.mjs +57 -0
  27. package/scripts/prepare-native-assets.mjs +1 -1
  28. package/scripts/provider-contract-test-env.mjs +21 -0
  29. package/scripts/release-paths.mjs +1 -0
  30. package/scripts/routing-corpus.mjs +1 -11
  31. package/scripts/session-diag.mjs +2 -44
  32. package/scripts/smoke-runtime-negative.sh +7 -1
  33. package/scripts/test-data-dir.mjs +19 -0
  34. package/scripts/tidy/sync-engines-manifest.mjs +8 -10
  35. package/scripts/tool-efficiency-diag.mjs +1 -4
  36. package/scripts/voice-runtime-config.json +1 -1
  37. package/src/app.mjs +1 -1
  38. package/src/defaults/skills/code-tidy/SKILL.md +5 -2
  39. package/src/defaults/skills/pptx/SKILL.md +1 -1
  40. package/src/defaults/skills/pptx/references/pictures.md +1 -1
  41. package/src/defaults/skills/pptx/scripts/review-deck.mjs +13 -4
  42. package/src/defaults/skills/skill-creator/scripts/validate-skill.mjs +40 -40
  43. package/src/defaults/skills/xlsx/SKILL.md +1 -0
  44. package/src/headless-exec.mjs +4 -2
  45. package/src/headless-role.mjs +81 -68
  46. package/src/lib/keychain-cjs.cjs +26 -49
  47. package/src/lib/mixdog-debug.cjs +1 -1
  48. package/src/lib/rules-builder.cjs +4 -3
  49. package/src/mixdog-session-runtime.mjs +2 -2
  50. package/src/repl/slash-commands.mjs +1 -1
  51. package/src/repl/stream-sink.mjs +1 -1
  52. package/src/repl/turn-output.mjs +2 -2
  53. package/src/repl.mjs +1 -1
  54. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +1 -1
  55. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +20 -16
  56. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +0 -3
  57. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +23 -22
  58. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +2 -2
  59. package/src/runtime/{shared/llm/index.mjs → agent/orchestrator/maintenance-preset.mjs} +2 -2
  60. package/src/runtime/agent/orchestrator/mcp/client-config.mjs +2 -1
  61. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +7 -36
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +28 -2
  63. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +1 -1
  64. package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +6 -1
  65. package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +1 -47
  66. package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +1 -383
  67. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +2 -59
  68. package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +32 -31
  69. package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
  70. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +10 -1
  71. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +12 -61
  72. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +2 -1
  73. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request.mjs +2 -0
  74. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +30 -67
  75. package/src/runtime/agent/orchestrator/providers/anthropic-recovery-guards.mjs +9 -12
  76. package/src/runtime/agent/orchestrator/providers/anthropic-server-fallback.mjs +3 -1
  77. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/leak-guard.mjs +1 -1
  78. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-stop.mjs +20 -12
  79. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -2
  80. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +4 -3
  81. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +5 -1
  82. package/src/runtime/agent/orchestrator/providers/anthropic-sse-watchdogs.mjs +18 -10
  83. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +20 -16
  84. package/src/runtime/agent/orchestrator/providers/anthropic-thinking-contract.mjs +1 -26
  85. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +9 -13
  86. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +8 -3
  87. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +4 -8
  88. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +21 -30
  89. package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +1 -1
  90. package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +4 -2
  91. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +10 -8
  92. package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +13 -10
  93. package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +29 -0
  94. package/src/runtime/agent/orchestrator/providers/cursor-wire-guards.mjs +0 -1
  95. package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +10 -26
  96. package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +2 -3
  97. package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +7 -3
  98. package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +9 -15
  99. package/src/runtime/agent/orchestrator/providers/cursor.mjs +31 -5
  100. package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +1 -2
  101. package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +1 -4
  102. package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
  103. package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +48 -46
  104. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +18 -19
  105. package/src/runtime/agent/orchestrator/providers/gemini.mjs +3 -26
  106. package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +41 -0
  107. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +5 -19
  108. package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +16 -83
  109. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +26 -8
  110. package/src/runtime/agent/orchestrator/providers/lib/anthropic-models.mjs +8 -0
  111. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +30 -1
  112. package/src/runtime/agent/orchestrator/providers/lib/anthropic-stream-labels.mjs +6 -0
  113. package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +17 -0
  114. package/src/runtime/agent/orchestrator/providers/{anthropic-leaked-toolcall.mjs → lib/leaked-toolcall.mjs} +7 -7
  115. package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +44 -0
  116. package/src/runtime/agent/orchestrator/providers/lib/send-callbacks.mjs +12 -0
  117. package/src/runtime/agent/orchestrator/providers/lib/sse-framing.mjs +9 -8
  118. package/src/runtime/agent/orchestrator/providers/lib/transport-fallback-trace.mjs +25 -0
  119. package/src/runtime/agent/orchestrator/providers/model-catalog-projection.mjs +1 -181
  120. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +1 -796
  121. package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +1 -71
  122. package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +87 -0
  123. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +4 -5
  124. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +4 -5
  125. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +2 -21
  126. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +1 -1
  127. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +2 -3
  128. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +1 -2
  129. package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +4 -8
  130. package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +45 -32
  131. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +2 -2
  132. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +2 -2
  133. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +6 -12
  134. package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +2 -2
  135. package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -2
  136. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +14 -22
  137. package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +25 -34
  138. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +14 -14
  139. package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +3 -1
  140. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +2 -2
  141. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +1 -1
  142. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +2 -13
  143. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +1 -1
  144. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +1 -1
  145. package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +2 -2
  146. package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +2 -44
  147. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -16
  148. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +6 -5
  149. package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +4 -1
  150. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +3 -2
  151. package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +2 -2
  152. package/src/runtime/agent/orchestrator/providers/openai-ws-text-relay.mjs +1 -1
  153. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +6 -4
  154. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +2 -1
  155. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +2 -2
  156. package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -130
  157. package/src/runtime/agent/orchestrator/providers/registry.mjs +20 -16
  158. package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +21 -20
  159. package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +17 -17
  160. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +193 -0
  161. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +421 -0
  162. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-inspection.mjs +17 -17
  163. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-inspection.mjs +1 -1
  164. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-shape.mjs +3 -3
  165. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status.mjs +1 -1
  166. package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +101 -0
  167. package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +145 -0
  168. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/extension-scopes.mjs +5 -5
  169. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/fs-utils.mjs +1 -1
  170. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-control.mjs +2 -2
  171. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-mutations.mjs +2 -2
  172. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-reminder.mjs +1 -1
  173. package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +326 -0
  174. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-storage.mjs +2 -2
  175. package/src/runtime/agent/orchestrator/runtime-core/goal-tasks.mjs +148 -0
  176. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-title.mjs +2 -2
  177. package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +140 -0
  178. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-turns.mjs +1 -1
  179. package/src/runtime/agent/orchestrator/runtime-core/model-capabilities.mjs +140 -0
  180. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/orchestration.mjs +1 -1
  181. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/plugin-mcp.mjs +2 -2
  182. package/src/runtime/agent/orchestrator/runtime-core/session-id.mjs +2 -0
  183. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-route-policy.mjs +2 -2
  184. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-text.mjs +3 -3
  185. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-title.mjs +1 -2
  186. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/skill-tool-loading.mjs +1 -1
  187. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-schema.mjs +1 -1
  188. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +747 -0
  189. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +149 -0
  190. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/agents.mjs +11 -7
  191. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/context.mjs +6 -4
  192. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/packs.mjs +2 -3
  193. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow-ids.mjs +1 -1
  194. package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +255 -0
  195. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +3 -4
  196. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +2 -4
  197. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +1 -1
  198. package/src/runtime/agent/orchestrator/session/context-identity-writer.mjs +162 -0
  199. package/src/runtime/agent/orchestrator/session/context-tool-pairs.mjs +2 -2
  200. package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +87 -0
  201. package/src/runtime/agent/orchestrator/session/context-utils.mjs +3 -245
  202. package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +2 -3
  203. package/src/runtime/agent/orchestrator/session/eager-dispatch/mutation-paths.mjs +54 -0
  204. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +1 -1
  205. package/src/runtime/agent/orchestrator/session/lifecycle-scan.mjs +1 -16
  206. package/src/runtime/agent/orchestrator/session/loop/arg-schema-coerce.mjs +2 -2
  207. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +13 -1
  208. package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +3 -3
  209. package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +4 -4
  210. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +1 -1
  211. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +2 -2
  212. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +1 -1
  213. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +2 -3
  214. package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +2 -2
  215. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +6 -3
  216. package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +1 -1
  217. package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +3 -2
  218. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +6 -10
  219. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -2
  220. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +1 -1
  221. package/src/runtime/agent/orchestrator/session/loop.mjs +5 -6
  222. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +1 -1
  223. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +2 -2
  224. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -2
  225. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +5 -5
  226. package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +40 -64
  227. package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +2 -2
  228. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +24 -16
  229. package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
  230. package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +7 -13
  231. package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +17 -2
  232. package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +139 -0
  233. package/src/runtime/agent/orchestrator/session/manager/pending-spool-sweep.mjs +34 -14
  234. package/src/runtime/agent/orchestrator/session/manager/prefetch-bridge/file-prefetch.mjs +1 -1
  235. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +4 -18
  236. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +1 -1
  237. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +10 -18
  238. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +1 -1
  239. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +2 -2
  240. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +1 -1
  241. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +2 -2
  242. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +6 -10
  243. package/src/runtime/agent/orchestrator/session/manager.mjs +1 -2
  244. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +11 -6
  245. package/src/runtime/agent/orchestrator/session/result-classification.mjs +1 -1
  246. package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +194 -0
  247. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +6 -198
  248. package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +7 -7
  249. package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +0 -19
  250. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +15 -8
  251. package/src/runtime/agent/orchestrator/session/store/listing.mjs +18 -29
  252. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +6 -36
  253. package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +148 -0
  254. package/src/runtime/agent/orchestrator/session/store/save-fault.mjs +3 -3
  255. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +15 -142
  256. package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +3 -3
  257. package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +4 -2
  258. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +1 -1
  259. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +3 -2
  260. package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +9 -22
  261. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +14 -6
  262. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +200 -52
  263. package/src/runtime/agent/orchestrator/session/store-summary-log.mjs +81 -0
  264. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +38 -4
  265. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +5 -2
  266. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +3 -5
  267. package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +54 -0
  268. package/src/runtime/agent/orchestrator/session/store.mjs +5 -9
  269. package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +19 -8
  270. package/src/runtime/agent/orchestrator/session/tool-batch/flush.mjs +1 -1
  271. package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
  272. package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
  273. package/src/runtime/agent/orchestrator/session/transcript-restore/agent-envelope.mjs +489 -0
  274. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +419 -0
  275. package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +358 -0
  276. package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +157 -0
  277. package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +2 -3
  278. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +32 -11
  279. package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -31
  280. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/benign-exit.mjs +7 -3
  281. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +11 -3
  282. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +4 -0
  283. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +13 -7
  284. package/src/runtime/agent/orchestrator/tools/builtin/binary-file.mjs +6 -3
  285. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +11 -5
  286. package/src/runtime/agent/orchestrator/tools/builtin/device-paths.mjs +1 -206
  287. package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +1 -1
  288. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +39 -3
  289. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +5 -7
  290. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-request.mjs +7 -25
  291. package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +27 -1
  292. package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +37 -0
  293. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-insights.mjs +1 -1
  294. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +28 -18
  295. package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +6 -10
  296. package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +15 -17
  297. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +3 -3
  298. package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +1 -399
  299. package/src/runtime/agent/orchestrator/tools/builtin/read-line-collector.mjs +3 -2
  300. package/src/runtime/agent/orchestrator/tools/builtin/read-office-files.mjs +8 -15
  301. package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +5 -8
  302. package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +3 -2
  303. package/src/runtime/agent/orchestrator/tools/builtin/read-source-windows.mjs +2 -2
  304. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +6 -5
  305. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-dispatch.mjs +50 -5
  306. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-render.mjs +1 -1
  307. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-snapshot.mjs +2 -5
  308. package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +11 -1
  309. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +1 -1
  310. package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +3 -35
  311. package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +0 -12
  312. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +50 -0
  313. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +9 -26
  314. package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +2 -1
  315. package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +6 -5
  316. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +8 -3
  317. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +6 -14
  318. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-validation.mjs +3 -9
  319. package/src/runtime/agent/orchestrator/tools/builtin/tool-output-limit.mjs +1 -60
  320. package/src/runtime/agent/orchestrator/tools/builtin.mjs +10 -32
  321. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +2 -2
  322. package/src/runtime/agent/orchestrator/tools/code-graph/modes/calls.mjs +3 -3
  323. package/src/runtime/agent/orchestrator/tools/code-graph/project-root.mjs +3 -7
  324. package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +15 -10
  325. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +6 -10
  326. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +4 -0
  327. package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +3 -3
  328. package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +3 -7
  329. package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +1 -84
  330. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +11 -11
  331. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
  332. package/src/runtime/agent/orchestrator/tools/io-trace.mjs +28 -0
  333. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +38 -5
  334. package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +10 -4
  335. package/src/runtime/agent/orchestrator/tools/patch/apply-patch/codex-batch.mjs +6 -26
  336. package/src/runtime/agent/orchestrator/tools/patch/apply-patch/request.mjs +0 -3
  337. package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-report.mjs +2 -1
  338. package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +3 -10
  339. package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +1 -1
  340. package/src/runtime/agent/orchestrator/tools/patch/mutation-output.mjs +6 -19
  341. package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +5 -15
  342. package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +1 -3
  343. package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +4 -0
  344. package/src/runtime/agent/orchestrator/tools/patch/sequence/run.mjs +1 -3
  345. package/src/runtime/agent/orchestrator/tools/patch/sequence/units.mjs +4 -10
  346. package/src/runtime/agent/orchestrator/tools/patch/sequence.mjs +1 -2
  347. package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +5 -11
  348. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +1 -2
  349. package/src/runtime/agent/orchestrator/tools/patch-manifest-path.mjs +3 -0
  350. package/src/runtime/agent/orchestrator/tools/patch-manifest.json +12 -12
  351. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +87 -12
  352. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +6 -3
  353. package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +1 -1
  354. package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +15 -25
  355. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
  356. package/src/runtime/{shared/llm → agent/orchestrator}/usage-log.mjs +1 -1
  357. package/src/runtime/attachments/pdf-extract.mjs +32 -29
  358. package/src/runtime/attachments/store.mjs +2 -1
  359. package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -2
  360. package/src/runtime/browser-bridge/client.mjs +30 -9
  361. package/src/runtime/channels/data/voice-runtime-manifest.json +21 -21
  362. package/src/runtime/channels/lib/config.mjs +4 -4
  363. package/src/runtime/channels/lib/event-pipeline.mjs +3 -3
  364. package/src/runtime/channels/lib/event-queue.mjs +1 -0
  365. package/src/runtime/channels/lib/executor.mjs +3 -25
  366. package/src/runtime/channels/lib/runtime-paths.mjs +36 -41
  367. package/src/runtime/channels/lib/scheduler.mjs +28 -44
  368. package/src/runtime/{shared → channels/lib}/schedules-db.mjs +3 -3
  369. package/src/runtime/channels/lib/tool-dispatch.mjs +3 -8
  370. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +19 -23
  371. package/src/runtime/channels/lib/voice-transcription.mjs +13 -9
  372. package/src/runtime/channels/lib/webhook/log.mjs +2 -29
  373. package/src/runtime/channels/lib/webhook/request-handler.mjs +4 -5
  374. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +8 -12
  375. package/src/runtime/channels/lib/webhook/signature.mjs +15 -19
  376. package/src/runtime/channels/lib/webhook/untrusted-fence.mjs +9 -0
  377. package/src/runtime/channels/lib/webhook.mjs +1 -1
  378. package/src/runtime/{shared → channels/lib}/webhooks-db.mjs +3 -3
  379. package/src/runtime/channels/lib/whisper-server.mjs +3 -2
  380. package/src/runtime/channels/lib/worker-bootstrap.mjs +19 -21
  381. package/src/runtime/channels/lib/worker-main.mjs +49 -58
  382. package/src/runtime/computer-bridge/client.mjs +7 -10
  383. package/src/runtime/computer-bridge/core-actions.mjs +1 -1
  384. package/src/runtime/computer-bridge/limits.d.mts +0 -1
  385. package/src/runtime/github/client.mjs +11 -6
  386. package/src/runtime/github/commands.mjs +4 -2
  387. package/src/runtime/github/contract.mjs +3 -1
  388. package/src/runtime/local-provider/hugging-face.mjs +3 -3
  389. package/src/runtime/local-provider/registered-models.mjs +3 -1
  390. package/src/runtime/local-provider/request-queue.mjs +24 -29
  391. package/src/runtime/local-provider/serial-chain.mjs +19 -0
  392. package/src/runtime/local-provider/server-process.mjs +2 -10
  393. package/src/runtime/media/adapters/antigravity-image.mjs +2 -2
  394. package/src/runtime/media/adapters/codex-image.mjs +2 -2
  395. package/src/runtime/media/adapters/gemini-image.mjs +2 -1
  396. package/src/runtime/media/adapters/gemini-video.mjs +3 -7
  397. package/src/runtime/media/adapters/xai-media.mjs +3 -7
  398. package/src/runtime/media/bounded-signal.mjs +13 -0
  399. package/src/runtime/media/store.mjs +9 -3
  400. package/src/runtime/memory/data/runtime-manifest.json +11 -11
  401. package/src/runtime/memory/index.mjs +6 -21
  402. package/src/runtime/memory/lib/core-memory-file.mjs +1 -1
  403. package/src/runtime/memory/lib/cycle-scheduler/backlog-probe.mjs +2 -1
  404. package/src/runtime/memory/lib/cycle1/cycle1-plan.mjs +1 -1
  405. package/src/runtime/memory/lib/embedding-idle-lease.mjs +18 -0
  406. package/src/runtime/memory/lib/embedding-provider.mjs +13 -0
  407. package/src/runtime/memory/lib/embedding-worker.mjs +12 -1
  408. package/src/runtime/memory/lib/http-router/ingest-routes.mjs +1 -1
  409. package/src/runtime/memory/lib/http-router/session-routes.mjs +1 -1
  410. package/src/runtime/memory/lib/ingest/transcript-discovery.mjs +1 -1
  411. package/src/runtime/memory/lib/memory-action-handlers/manage-actions.mjs +1 -1
  412. package/src/runtime/memory/lib/memory-cycle1.mjs +24 -1
  413. package/src/runtime/memory/lib/memory-cycle2-quarantine.mjs +99 -0
  414. package/src/runtime/memory/lib/memory-cycle2-review.mjs +8 -2
  415. package/src/runtime/memory/lib/memory-cycle2.mjs +49 -9
  416. package/src/runtime/memory/lib/memory-embed.mjs +3 -2
  417. package/src/runtime/memory/lib/memory-extraction.mjs +1 -2
  418. package/src/runtime/memory/lib/memory-fingerprint.mjs +1 -1
  419. package/src/runtime/memory/lib/memory-ops-policy.mjs +18 -2
  420. package/src/runtime/memory/lib/memory-retrievers.mjs +2 -2
  421. package/src/runtime/memory/lib/memory-text-utils.mjs +1 -1
  422. package/src/runtime/memory/lib/pg/adapter.mjs +3 -3
  423. package/src/runtime/memory/lib/pg/process.mjs +2 -2
  424. package/src/runtime/memory/lib/pg/supervisor.mjs +1 -2
  425. package/src/runtime/memory/lib/query-ranking.mjs +2 -2
  426. package/src/runtime/memory/lib/query-search-plan.mjs +1 -1
  427. package/src/runtime/memory/lib/recall-format.mjs +3 -4
  428. package/src/runtime/memory/lib/runtime-fetcher.mjs +94 -23
  429. package/src/runtime/memory/lib/session-ingest-runtime.mjs +1 -1
  430. package/src/runtime/memory/lib/trace-store.mjs +6 -2
  431. package/src/runtime/office/authoring/pptx-author-action.mjs +8 -3
  432. package/src/runtime/office/authoring/pptx-brief.mjs +3 -3
  433. package/src/runtime/office/authoring/pptx-html-build.mjs +109 -37
  434. package/src/runtime/office/authoring/pptx-html-geometry.mjs +188 -46
  435. package/src/runtime/office/authoring/pptx-html-measure.mjs +60 -21
  436. package/src/runtime/office/authoring/pptx-html-runner.mjs +83 -29
  437. package/src/runtime/office/authoring/pptx-script-normalize.mjs +156 -16
  438. package/src/runtime/office/bench/polish-benchmark.mjs +204 -201
  439. package/src/runtime/office/bench/quality-live-benchmark.mjs +8 -4
  440. package/src/runtime/office/capabilities-catalog.mjs +12 -1
  441. package/src/runtime/office/capabilities-signatures.mjs +31 -11
  442. package/src/runtime/office/capabilities.mjs +39 -20
  443. package/src/runtime/office/com/com-adapter.mjs +16 -14
  444. package/src/runtime/office/com/office-com-host.ps1 +118 -140
  445. package/src/runtime/office/core/excel-snapshot-normalize.mjs +149 -0
  446. package/src/runtime/office/core/office-actions-batch.mjs +4 -7
  447. package/src/runtime/office/core/office-actions-inspect.mjs +17 -14
  448. package/src/runtime/office/core/office-actions-open.mjs +1 -6
  449. package/src/runtime/office/core/office-core.mjs +107 -49
  450. package/src/runtime/office/core/office-finalize/review-stage.mjs +4 -1
  451. package/src/runtime/office/core/office-qa/design-review-stage.mjs +2 -9
  452. package/src/runtime/office/core/office-qa/review-assembly.mjs +9 -7
  453. package/src/runtime/office/core/office-sessions.mjs +10 -149
  454. package/src/runtime/office/design/composition-system.mjs +5 -10
  455. package/src/runtime/office/design/design-system.mjs +1 -2
  456. package/src/runtime/office/design/docx/design-docx/section.mjs +1 -1
  457. package/src/runtime/office/design/docx/design-docx-components.mjs +2 -1
  458. package/src/runtime/office/design/docx/design-docx.mjs +2 -2
  459. package/src/runtime/office/design/xlsx/design-xlsx.mjs +6 -2
  460. package/src/runtime/office/pdf/pdf-analysis.mjs +39 -32
  461. package/src/runtime/office/pdf/pdf-batch-content.mjs +1 -1
  462. package/src/runtime/office/pdf/pdf-writer.mjs +26 -22
  463. package/src/runtime/office/portable/docx-tracked-edits.mjs +6 -6
  464. package/src/runtime/office/portable/font-provisioner.mjs +37 -11
  465. package/src/runtime/office/portable/portable-cells.mjs +2 -6
  466. package/src/runtime/office/portable/portable-chart.mjs +6 -6
  467. package/src/runtime/office/portable/portable-docx-edits.mjs +4 -9
  468. package/src/runtime/office/portable/portable-docx-operations.mjs +16 -13
  469. package/src/runtime/office/portable/portable-docx-parts.mjs +7 -2
  470. package/src/runtime/office/portable/portable-docx-xml.mjs +36 -28
  471. package/src/runtime/office/portable/portable-opc.mjs +11 -13
  472. package/src/runtime/office/portable/portable-package.mjs +3 -4
  473. package/src/runtime/office/portable/portable-pivot.mjs +7 -3
  474. package/src/runtime/office/portable/portable-pptx-charts.mjs +59 -42
  475. package/src/runtime/office/portable/portable-pptx-core.mjs +14 -4
  476. package/src/runtime/office/portable/portable-pptx-package.mjs +5 -4
  477. package/src/runtime/office/portable/portable-pptx-shapes.mjs +25 -8
  478. package/src/runtime/office/portable/portable-sheet-audits.mjs +4 -8
  479. package/src/runtime/office/portable/portable-sheet-page.mjs +2 -2
  480. package/src/runtime/office/portable/portable-sheet-xml.mjs +1 -1
  481. package/src/runtime/office/portable/portable-snapshot-docx.mjs +2 -3
  482. package/src/runtime/office/portable/portable-snapshot-pptx.mjs +3 -1
  483. package/src/runtime/office/portable/portable-soffice.mjs +27 -22
  484. package/src/runtime/office/portable/portable-validation-package.mjs +1 -2
  485. package/src/runtime/office/portable/portable-validation.mjs +9 -3
  486. package/src/runtime/office/portable/portable-xlsx-operations.mjs +2 -49
  487. package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +10 -5
  488. package/src/runtime/office/portable/portable-xlsx-range-layout.mjs +3 -2
  489. package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +189 -98
  490. package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +26 -6
  491. package/src/runtime/office/portable/portable-xml.mjs +1 -4
  492. package/src/runtime/office/portable/text-metrics.mjs +14 -17
  493. package/src/runtime/office/portable/xlsx-contract.mjs +37 -3
  494. package/src/runtime/office/portable/xlsx-formula-engine.mjs +7 -1
  495. package/src/runtime/office/quality/assurance-checklist.mjs +1 -1
  496. package/src/runtime/office/quality/assurance-rendered.mjs +1 -1
  497. package/src/runtime/office/quality/assurance-structure-pptx.mjs +17 -8
  498. package/src/runtime/office/quality/assurance-structure.mjs +0 -2
  499. package/src/runtime/office/quality/design-aesthetics.mjs +2 -9
  500. package/src/runtime/office/quality/design-deck-diversity.mjs +2 -9
  501. package/src/runtime/office/quality/design-review.mjs +3 -3
  502. package/src/runtime/office/quality/pptx-slide-roles.mjs +3 -3
  503. package/src/runtime/office/shared/line-breaks.mjs +3 -1
  504. package/src/runtime/office/tool-defs.mjs +2 -2
  505. package/src/runtime/shared/async-log-appender.mjs +83 -0
  506. package/src/runtime/shared/automation-presence.mjs +9 -0
  507. package/src/runtime/shared/buffered-appender.mjs +10 -7
  508. package/src/runtime/shared/child-spawn-gate.mjs +2 -37
  509. package/src/runtime/shared/code-graph-state.mjs +84 -0
  510. package/src/runtime/shared/config.mjs +71 -89
  511. package/src/runtime/shared/context-inspection.mjs +56 -0
  512. package/src/runtime/shared/context-measurement.mjs +83 -0
  513. package/src/runtime/shared/device-paths.mjs +206 -0
  514. package/src/{standalone → runtime/shared}/fair-call-scheduler/owner-groups.mjs +1 -1
  515. package/src/runtime/shared/fair-call-scheduler.mjs +198 -0
  516. package/src/runtime/shared/file-lock.mjs +85 -55
  517. package/src/runtime/shared/http-request-body.mjs +3 -1
  518. package/src/runtime/shared/llm/anthropic-betas.mjs +46 -0
  519. package/src/runtime/shared/llm/anthropic-effort.mjs +378 -0
  520. package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +29 -0
  521. package/src/runtime/shared/llm/cost.mjs +19 -10
  522. package/src/runtime/shared/llm/model-catalog-projection.mjs +182 -0
  523. package/src/runtime/shared/llm/model-catalog.mjs +799 -0
  524. package/src/runtime/shared/llm/model-pricing-rates.mjs +78 -0
  525. package/src/runtime/shared/llm/provider-catalog-cache.mjs +130 -0
  526. package/src/runtime/shared/llm/usage-accounting.mjs +12 -11
  527. package/src/runtime/shared/llm/usage-context.mjs +7 -0
  528. package/src/runtime/shared/llm/usage-ledger-import.mjs +14 -3
  529. package/src/runtime/shared/llm/usage-ledger-quota.mjs +97 -37
  530. package/src/runtime/shared/llm/usage-ledger-repair.mjs +3 -1
  531. package/src/runtime/shared/llm/usage-ledger-rollup.mjs +6 -10
  532. package/src/runtime/shared/llm/usage-ledger.mjs +6 -7
  533. package/src/runtime/shared/llm/usage-pricing-refresh.mjs +1 -1
  534. package/src/runtime/shared/llm/usage-rollup.mjs +0 -1
  535. package/src/runtime/shared/model-display.mjs +178 -0
  536. package/src/runtime/shared/notify-trace.mjs +14 -3
  537. package/src/runtime/shared/owner-fair-gate.mjs +1 -1
  538. package/src/runtime/shared/pending-json-projection.mjs +17 -0
  539. package/src/runtime/shared/pristine-execution.mjs +4 -3
  540. package/src/runtime/shared/process-lifecycle.mjs +18 -7
  541. package/src/runtime/shared/read-image-resize.mjs +399 -0
  542. package/src/runtime/shared/schedule-model-ref.mjs +2 -2
  543. package/src/runtime/shared/staged-update.mjs +7 -36
  544. package/src/runtime/shared/statusline/ansi.mjs +161 -0
  545. package/src/{ui → runtime/shared/statusline}/statusline-format.mjs +5 -5
  546. package/src/{ui → runtime/shared/statusline}/statusline-segments.mjs +54 -50
  547. package/src/runtime/shared/tool-card-model/background-task.mjs +1 -1
  548. package/src/runtime/shared/tool-card-model/card-detail.mjs +2 -2
  549. package/src/runtime/shared/tool-card-model/card-status.mjs +7 -5
  550. package/src/runtime/shared/tool-card-model/git-result.mjs +10 -0
  551. package/src/runtime/shared/tool-card-model/terminal-status.mjs +6 -2
  552. package/src/runtime/shared/tool-card-model.golden-cases.mjs +2 -1
  553. package/src/runtime/shared/tool-output-limit.mjs +60 -0
  554. package/src/runtime/shared/tool-primitives.mjs +1 -1
  555. package/src/runtime/shared/tool-result-summary.mjs +1 -0
  556. package/src/runtime/shared/tool-status.mjs +35 -2
  557. package/src/runtime/shared/transcript-metadata.mjs +1 -1
  558. package/src/runtime/shared/transcript-writer/transcript-file.mjs +1 -2
  559. package/src/runtime/shared/turn-snapshot-store.mjs +23 -17
  560. package/src/runtime/shared/turn-worktree-snapshot.mjs +8 -4
  561. package/src/runtime/shared/update-checker.mjs +1 -3
  562. package/src/runtime/tidy/apply.mjs +2 -2
  563. package/src/runtime/tidy/function-length.mjs +63 -0
  564. package/src/runtime/tidy/report.mjs +6 -3
  565. package/src/runtime/tidy/runners/shared.mjs +1 -0
  566. package/src/runtime/tidy/runners/shellcheck.mjs +1 -1
  567. package/src/runtime/tidy/tool.mjs +10 -3
  568. package/src/runtime/web-search/index.mjs +6 -17
  569. package/src/runtime/web-search/lib/cache.mjs +8 -54
  570. package/src/runtime/web-search/lib/config.mjs +2 -6
  571. package/src/runtime/web-search/lib/debounced-json-writer.mjs +62 -0
  572. package/src/runtime/web-search/lib/http-fetch.mjs +24 -112
  573. package/src/runtime/web-search/lib/package-version.mjs +10 -0
  574. package/src/runtime/web-search/lib/ssrf-guard.mjs +34 -28
  575. package/src/runtime/web-search/lib/state.mjs +8 -53
  576. package/src/runtime/web-search/lib/web-tools.mjs +5 -5
  577. package/src/session-runtime/agent-tool-routing.mjs +3 -9
  578. package/src/{runtime/shared → session-runtime}/automation-workflow.mjs +4 -4
  579. package/src/session-runtime/boot/apis.mjs +4 -5
  580. package/src/session-runtime/boot/begin.mjs +1 -1
  581. package/src/session-runtime/boot/config.mjs +2 -2
  582. package/src/session-runtime/boot/facade.mjs +2 -2
  583. package/src/session-runtime/boot/infrastructure.mjs +4 -4
  584. package/src/session-runtime/boot/providers.mjs +6 -6
  585. package/src/session-runtime/boot/session.mjs +1 -1
  586. package/src/session-runtime/boot/shared.mjs +5 -7
  587. package/src/session-runtime/boot/tools.mjs +6 -6
  588. package/src/session-runtime/bridge-first-use-gate.mjs +1 -1
  589. package/src/session-runtime/builtin-features.mjs +1 -193
  590. package/src/session-runtime/channel-config-api.mjs +3 -3
  591. package/src/session-runtime/config-helpers.mjs +1 -420
  592. package/src/session-runtime/config-lifecycle.mjs +2 -2
  593. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -2
  594. package/src/session-runtime/cwd-plugins/plugin-status.mjs +1 -1
  595. package/src/session-runtime/deferred-tool-delta.mjs +1 -101
  596. package/src/session-runtime/effort.mjs +1 -145
  597. package/src/session-runtime/goal-facade-api.mjs +1 -1
  598. package/src/session-runtime/goal-state.mjs +1 -325
  599. package/src/session-runtime/goal-tasks.mjs +1 -137
  600. package/src/session-runtime/goal-tool-defs.mjs +1 -140
  601. package/src/session-runtime/hook-payload.mjs +4 -5
  602. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -3
  603. package/src/session-runtime/internal-tool-executor/caller-context.mjs +8 -0
  604. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +3 -2
  605. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +4 -6
  606. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +2 -2
  607. package/src/session-runtime/internal-tool-executor.mjs +1 -1
  608. package/src/session-runtime/lifecycle/inheritance.mjs +1 -1
  609. package/src/session-runtime/lifecycle/session-catalog.mjs +3 -3
  610. package/src/session-runtime/lifecycle/session-switch/resume.mjs +2 -2
  611. package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +1 -1
  612. package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
  613. package/src/session-runtime/lifecycle/shared.mjs +1 -1
  614. package/src/session-runtime/mcp-glue/connect.mjs +1 -1
  615. package/src/session-runtime/mcp-glue/server-catalog.mjs +1 -1
  616. package/src/session-runtime/mcp-glue/server-input.mjs +1 -1
  617. package/src/session-runtime/model-capabilities.mjs +1 -140
  618. package/src/session-runtime/model-recency.mjs +1 -1
  619. package/src/session-runtime/model-route/route-persist.mjs +2 -2
  620. package/src/session-runtime/model-route/route-tuning.mjs +3 -3
  621. package/src/session-runtime/model-route/set-route.mjs +6 -6
  622. package/src/session-runtime/model-route/web-search-route.mjs +5 -5
  623. package/src/session-runtime/model-route-api.mjs +1 -1
  624. package/src/session-runtime/native-web-search/routes.mjs +1 -1
  625. package/src/session-runtime/native-web-search/tool-shape.mjs +2 -2
  626. package/src/session-runtime/output-styles.mjs +2 -2
  627. package/src/session-runtime/prewarm/channel-start.mjs +1 -0
  628. package/src/session-runtime/provider-auth/accounts.mjs +7 -2
  629. package/src/session-runtime/provider-auth/login.mjs +1 -1
  630. package/src/session-runtime/provider-auth-api.mjs +1 -1
  631. package/src/session-runtime/provider-models/model-meta.mjs +1 -1
  632. package/src/session-runtime/provider-models/row-hydration.mjs +3 -3
  633. package/src/session-runtime/provider-usage.mjs +2 -2
  634. package/src/session-runtime/quick-model-rows/model-meta.mjs +1 -1
  635. package/src/session-runtime/quick-model-rows/provider-rows.mjs +1 -1
  636. package/src/session-runtime/quick-model-rows/web-search-rows.mjs +2 -2
  637. package/src/session-runtime/resource-api.mjs +2 -2
  638. package/src/session-runtime/resource-mcp-api.mjs +3 -3
  639. package/src/session-runtime/resource-plugins-api.mjs +3 -3
  640. package/src/session-runtime/resource-recall-api.mjs +2 -2
  641. package/src/session-runtime/resource-scope-decorate.mjs +2 -2
  642. package/src/session-runtime/route-resolution.mjs +3 -3
  643. package/src/session-runtime/route-state.mjs +4 -4
  644. package/src/session-runtime/runtime-bootstrap.mjs +1 -1
  645. package/src/session-runtime/runtime-facade.mjs +1 -1
  646. package/src/session-runtime/runtime-feature-gates.mjs +2 -2
  647. package/src/session-runtime/runtime-modules.mjs +3 -3
  648. package/src/session-runtime/runtime-paths.mjs +6 -2
  649. package/src/session-runtime/runtime-tool-routing.mjs +2 -2
  650. package/src/{runtime/shared → session-runtime}/schedule-session-run.mjs +5 -5
  651. package/src/{standalone → session-runtime/services}/agent-task-status.mjs +1 -1
  652. package/src/{standalone → session-runtime/services}/agent-tool/close-flow/close-all.mjs +2 -2
  653. package/src/{standalone → session-runtime/services}/agent-tool/close-flow.mjs +1 -1
  654. package/src/{standalone → session-runtime/services}/agent-tool/execute.mjs +1 -1
  655. package/src/{standalone → session-runtime/services}/agent-tool/helpers.mjs +6 -6
  656. package/src/session-runtime/services/agent-tool/index-write-queue.mjs +209 -0
  657. package/src/{standalone → session-runtime/services}/agent-tool/job-task-reconcile.mjs +2 -2
  658. package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-lookup.mjs +5 -1
  659. package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-render.mjs +1 -1
  660. package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +101 -0
  661. package/src/{standalone → session-runtime/services}/agent-tool/job-views/spawn-meta.mjs +1 -1
  662. package/src/session-runtime/services/agent-tool/job-views.mjs +59 -0
  663. package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +48 -0
  664. package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/row-settlement.mjs +3 -3
  665. package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index.mjs +10 -2
  666. package/src/{standalone → session-runtime/services}/agent-tool/notify/early-completion.mjs +2 -2
  667. package/src/{standalone → session-runtime/services}/agent-tool/notify.mjs +4 -4
  668. package/src/{standalone → session-runtime/services}/agent-tool/render.mjs +2 -2
  669. package/src/{standalone → session-runtime/services}/agent-tool/send-flow.mjs +6 -2
  670. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/job-start.mjs +2 -2
  671. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-plan.mjs +3 -3
  672. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-prep.mjs +3 -3
  673. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-run.mjs +3 -3
  674. package/src/{standalone → session-runtime/services}/agent-tool/spawn-preset.mjs +1 -1
  675. package/src/session-runtime/services/agent-tool/tag-registry.mjs +121 -0
  676. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/reap-timers.mjs +1 -1
  677. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/scan-admission.mjs +1 -1
  678. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/stale-rows.mjs +1 -1
  679. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/tombstones.mjs +5 -2
  680. package/src/session-runtime/services/agent-tool/tool-def.mjs +60 -0
  681. package/src/{standalone → session-runtime/services}/agent-tool/turn-review.mjs +1 -1
  682. package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-liveness.mjs +1 -1
  683. package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-store.mjs +46 -20
  684. package/src/{standalone → session-runtime/services}/agent-tool/worker-index.mjs +8 -1
  685. package/src/{standalone → session-runtime/services}/agent-tool/worker-rows.mjs +1 -1
  686. package/src/session-runtime/services/agent-tool.mjs +151 -0
  687. package/src/{standalone → session-runtime/services}/agent-watchdog-registry.mjs +1 -1
  688. package/src/{standalone → session-runtime/services}/channel-admin.mjs +8 -10
  689. package/src/{standalone → session-runtime/services}/channel-client.mjs +1 -1
  690. package/src/{standalone → session-runtime/services}/channel-session-router.mjs +1 -1
  691. package/src/{standalone → session-runtime/services}/channel-worker/client-heartbeat.mjs +1 -1
  692. package/src/{standalone → session-runtime/services}/channel-worker/daemon-attach.mjs +1 -1
  693. package/src/{standalone → session-runtime/services}/channel-worker/daemon-spawn.mjs +5 -5
  694. package/src/session-runtime/services/channel-worker.mjs +140 -0
  695. package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +189 -0
  696. package/src/{standalone → session-runtime/services}/daemon-crash-capture/retention.mjs +1 -1
  697. package/src/{standalone → session-runtime/services}/daemon-crash-capture/spawn-capture.mjs +12 -1
  698. package/src/{standalone → session-runtime/services}/daemon-crash-capture.mjs +6 -0
  699. package/src/{standalone → session-runtime/services}/hook-bus/command-handler.mjs +1 -1
  700. package/src/{standalone → session-runtime/services}/hook-bus/event-runner.mjs +1 -1
  701. package/src/{standalone → session-runtime/services}/hook-bus/handler-dispatch.mjs +1 -1
  702. package/src/{standalone → session-runtime/services}/hook-bus/handlers.mjs +5 -4
  703. package/src/{standalone → session-runtime/services}/hook-bus/rule-file.mjs +2 -2
  704. package/src/{standalone → session-runtime/services}/hook-bus/tool-gate.mjs +1 -1
  705. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/client-registry.mjs +1 -1
  706. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/daemon-spawn.mjs +4 -4
  707. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/discovery.mjs +5 -5
  708. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/owner-claim.mjs +2 -2
  709. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/rpc.mjs +0 -4
  710. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/start.mjs +1 -1
  711. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/tool-wire.mjs +1 -1
  712. package/src/session-runtime/services/memory-runtime-proxy.mjs +130 -0
  713. package/src/{standalone → session-runtime/services}/plugin-admin.mjs +6 -6
  714. package/src/session-runtime/services/provider-admin.mjs +576 -0
  715. package/src/{standalone → session-runtime/services}/seeds.mjs +3 -3
  716. package/src/{standalone → session-runtime/services}/usage-dashboard-model.mjs +1 -1
  717. package/src/session-runtime/services/usage-dashboard.mjs +278 -0
  718. package/src/{standalone → session-runtime/services}/usage-stats-hours.mjs +1 -1
  719. package/src/session-runtime/services/usage-stats-model.mjs +657 -0
  720. package/src/session-runtime/services/usage-stats-period.mjs +178 -0
  721. package/src/session-runtime/session-create/materialize.mjs +3 -3
  722. package/src/session-runtime/session-create/session-options.mjs +14 -7
  723. package/src/session-runtime/session-lifecycle.mjs +2 -2
  724. package/src/session-runtime/settings-builtin-tools-api.mjs +1 -1
  725. package/src/session-runtime/setup-tool/executor.mjs +2 -2
  726. package/src/session-runtime/skills-api.mjs +2 -2
  727. package/src/session-runtime/statusline-route.mjs +1 -1
  728. package/src/session-runtime/tool-catalog.mjs +1 -753
  729. package/src/session-runtime/tool-defs.mjs +1 -149
  730. package/src/session-runtime/tool-policy-refresh.mjs +7 -5
  731. package/src/session-runtime/tool-surface.mjs +5 -5
  732. package/src/session-runtime/turn/agent-ops.mjs +2 -2
  733. package/src/session-runtime/turn/session-ops.mjs +2 -2
  734. package/src/session-runtime/turn/share-ops.mjs +4 -3
  735. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +1 -1
  736. package/src/session-runtime/turn/turn-run/turn-settle.mjs +4 -4
  737. package/src/session-runtime/usage-stats-api.mjs +18 -2
  738. package/src/session-runtime/warmup/statusline-usage-warmup.mjs +2 -2
  739. package/src/{runtime/shared → session-runtime}/webhook-session-run.mjs +5 -5
  740. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +2 -2
  741. package/src/session-runtime/workflow-agents-api/agent-route.mjs +4 -4
  742. package/src/session-runtime/workflow-agents-api/onboarding.mjs +2 -2
  743. package/src/session-runtime/workflow-agents-api/shared.mjs +4 -6
  744. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +1 -1
  745. package/src/session-runtime/workflow.mjs +1 -255
  746. package/src/standalone/agent-tool/job-views/session-progress.mjs +1 -101
  747. package/src/standalone/agent-tool/job-views.mjs +1 -59
  748. package/src/standalone/agent-tool/tag-registry.mjs +1 -121
  749. package/src/standalone/agent-tool/tool-def.mjs +1 -60
  750. package/src/standalone/agent-tool.mjs +1 -151
  751. package/src/standalone/channel-worker.mjs +1 -140
  752. package/src/standalone/daemon-agent-control.mjs +1 -1
  753. package/src/standalone/daemon-desktop-runtime.mjs +2 -2
  754. package/src/standalone/daemon-stored-session-views.mjs +1 -1
  755. package/src/standalone/daemon.mjs +38 -5
  756. package/src/standalone/fair-call-scheduler.mjs +1 -198
  757. package/src/standalone/folder-dialog.mjs +12 -8
  758. package/src/standalone/memory-runtime-proxy.mjs +1 -130
  759. package/src/standalone/provider-admin.mjs +1 -576
  760. package/src/standalone/session-client/frame-stream.mjs +1 -1
  761. package/src/standalone/session-client.mjs +2 -2
  762. package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -1
  763. package/src/standalone/session-service/projection/transcript-window.mjs +2 -2
  764. package/src/standalone/usage-dashboard.mjs +1 -278
  765. package/src/standalone/usage-stats-model.mjs +1 -653
  766. package/src/standalone/usage-stats-period.mjs +1 -178
  767. package/src/tui/App.jsx +107 -256
  768. package/src/tui/app/app-view/floating-panel.jsx +3 -12
  769. package/src/tui/app/app-view/welcome-banner.jsx +36 -0
  770. package/src/tui/app/app-view.jsx +18 -45
  771. package/src/tui/app/create-app-pickers.mjs +1 -1
  772. package/src/tui/app/doctor.mjs +15 -1
  773. package/src/tui/app/extension-pickers/mcp-servers-picker.mjs +7 -3
  774. package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +5 -8
  775. package/src/tui/app/model-options.mjs +2 -3
  776. package/src/tui/app/model-picker/model-footer.mjs +1 -1
  777. package/src/tui/app/model-picker/route-selection.mjs +1 -3
  778. package/src/tui/app/mouse-input/button-gestures.mjs +13 -31
  779. package/src/tui/app/mouse-input/wheel-router.mjs +22 -32
  780. package/src/tui/app/picker-enter-latch.mjs +21 -0
  781. package/src/tui/app/picker-index-mode.mjs +34 -0
  782. package/src/tui/app/shell-layout/panel-transition.mjs +7 -12
  783. package/src/tui/app/shell-layout/row-budgets.mjs +4 -9
  784. package/src/tui/app/slash-palette.mjs +31 -0
  785. package/src/tui/app/text-layout.mjs +1 -1
  786. package/src/tui/app/theme-effort-pickers.mjs +1 -1
  787. package/src/tui/app/transcript-window.mjs +1 -5
  788. package/src/tui/app/usage-context-panels/context-model.mjs +1 -1
  789. package/src/tui/app/use-global-key-input.mjs +0 -1
  790. package/src/tui/app/use-interaction-refs.mjs +55 -0
  791. package/src/tui/app/use-onboarding-start.mjs +45 -0
  792. package/src/tui/app/use-panel-transition.mjs +40 -0
  793. package/src/tui/app/use-prompt-draft-flow.mjs +4 -13
  794. package/src/tui/app/use-prompt-layout-rows.mjs +39 -0
  795. package/src/tui/app/use-prompt-queue-history/prompt-history.mjs +1 -1
  796. package/src/tui/app/use-prompt-state.mjs +40 -0
  797. package/src/tui/app/use-selection-paint.mjs +9 -5
  798. package/src/tui/app/use-transcript-scroll-state.mjs +61 -0
  799. package/src/tui/app/use-transcript-window.mjs +0 -1
  800. package/src/tui/app/use-ui-open-request.mjs +18 -0
  801. package/src/tui/app/use-workflow-tab-cycle.mjs +39 -0
  802. package/src/tui/components/ContextInspector.jsx +1 -1
  803. package/src/tui/components/ContextPanel.jsx +1 -1
  804. package/src/tui/components/Picker.jsx +41 -322
  805. package/src/tui/components/PromptInput.jsx +34 -468
  806. package/src/tui/components/StatusLine.jsx +8 -555
  807. package/src/tui/components/TextEntryPanel.jsx +25 -211
  808. package/src/tui/components/ToolExecution.jsx +43 -328
  809. package/src/tui/components/UsagePanel.jsx +1 -1
  810. package/src/tui/components/picker/PickerItemRow.jsx +85 -0
  811. package/src/tui/components/picker/picker-layout.mjs +46 -0
  812. package/src/tui/components/picker/use-picker-input.mjs +165 -0
  813. package/src/tui/components/picker/use-picker-selection.mjs +67 -0
  814. package/src/tui/components/prompt-input/edit-chords.mjs +87 -0
  815. package/src/tui/components/prompt-input/edit-helpers.mjs +15 -12
  816. package/src/tui/components/prompt-input/escape-key.mjs +87 -0
  817. package/src/tui/components/prompt-input/key-handler.mjs +364 -0
  818. package/src/tui/components/status-line/boot-schedule.mjs +83 -0
  819. package/src/tui/components/status-line/local-line.mjs +213 -0
  820. package/src/tui/components/status-line/use-statusline-text.mjs +319 -0
  821. package/src/tui/components/statusline-module-loader.mjs +21 -0
  822. package/src/tui/components/text-entry-layout.mjs +104 -0
  823. package/src/tui/components/text-entry-value.jsx +47 -0
  824. package/src/tui/components/tool-execution/aggregate-card.jsx +141 -0
  825. package/src/tui/components/tool-execution/pending-placeholder.jsx +24 -0
  826. package/src/tui/components/tool-execution/standard-card.jsx +229 -0
  827. package/src/tui/components/tool-output-format.mjs +3 -5
  828. package/src/tui/dist/index.mjs +3616 -3022
  829. package/src/tui/index.jsx +85 -66
  830. package/src/tui/markdown/format-token.mjs +3 -3
  831. package/src/tui/paste-attachments.mjs +1 -1
  832. package/src/tui/prompt-history-store.mjs +17 -6
  833. package/src/tui/session/agent-envelope.mjs +1 -489
  834. package/src/tui/session/context-state.mjs +2 -2
  835. package/src/tui/session/goal-continuation/continuation-queue.mjs +1 -1
  836. package/src/tui/session/goal-continuation/deadline-delivery.mjs +1 -1
  837. package/src/tui/session/goal-continuation/goal-visibility.mjs +1 -1
  838. package/src/tui/session/initial-state.mjs +1 -1
  839. package/src/tui/session/live-share/wire.mjs +3 -0
  840. package/src/tui/session/oauth-flows.mjs +1 -7
  841. package/src/tui/session/session-api/commands.mjs +5 -3
  842. package/src/tui/session/session-api/controls.mjs +1 -1
  843. package/src/tui/session/session-api/intake/submission.mjs +8 -3
  844. package/src/tui/session/session-api/integrations.mjs +1 -1
  845. package/src/tui/session/session-api/routes.mjs +9 -8
  846. package/src/tui/session/session-api/settings.mjs +24 -23
  847. package/src/tui/session/session-api/shared.mjs +13 -2
  848. package/src/tui/session/session-api-ext.mjs +7 -415
  849. package/src/tui/session/session-flow/drain.mjs +86 -82
  850. package/src/tui/session/session-flow/queue.mjs +3 -1
  851. package/src/tui/session/tool-result-status.mjs +1 -354
  852. package/src/tui/session/tool-result-text.mjs +1 -157
  853. package/src/tui/session/transcript-intake.mjs +1 -1
  854. package/src/tui/session/transcript-spill/spill-dir.mjs +4 -1
  855. package/src/tui/session/transcript-spill/spill-writer.mjs +1 -1
  856. package/src/tui/session/tui-steering-persist.mjs +44 -86
  857. package/src/tui/session-local.mjs +8 -5
  858. package/src/tui/statusline-ansi-bridge.mjs +1 -1
  859. package/src/tui/theme.mjs +1 -1
  860. package/src/ui/ansi.mjs +1 -161
  861. package/src/ui/context-inspection.mjs +1 -56
  862. package/src/ui/context-measurement.mjs +1 -83
  863. package/src/ui/markdown.mjs +3 -3
  864. package/src/ui/model-display.mjs +1 -173
  865. package/src/ui/statusline-agents.mjs +22 -21
  866. package/src/ui/statusline.mjs +21 -24
  867. package/src/ui/stream-finalize.mjs +1 -1
  868. package/src/ui/tool-card.mjs +1 -1
  869. package/src/vendor/statusline/src/gateway/route-meta.mjs +157 -29
  870. package/scripts/fixtures/spawn-lease-child-harness.mjs +0 -8
  871. package/scripts/fixtures/spawn-lease-fixture-worker.mjs +0 -37
  872. package/src/runtime/agent/orchestrator/activity-bus.mjs +0 -31
  873. package/src/runtime/shared/child-spawn-remote.mjs +0 -210
  874. package/src/runtime/shared/session-runtime-health.mjs +0 -201
  875. package/src/standalone/agent-tool/lead-worker-index/index-file.mjs +0 -45
  876. package/src/standalone/session-runtime-agent-control-client.mjs +0 -117
  877. package/src/standalone/session-runtime-agent-control.mjs +0 -85
  878. package/src/standalone/session-runtime-host-factory.mjs +0 -22
  879. package/src/standalone/session-runtime-host.mjs +0 -742
  880. package/src/standalone/session-runtime-provider-cooldown.mjs +0 -78
  881. package/src/standalone/session-runtime-proxy.mjs +0 -164
  882. package/src/standalone/session-runtime-record.mjs +0 -18
  883. package/src/standalone/session-runtime-shard-router.mjs +0 -151
  884. package/src/standalone/session-runtime-spawn-leases.mjs +0 -82
  885. package/src/standalone/session-runtime-worker.mjs +0 -678
  886. package/src/standalone/session-runtime-workload.mjs +0 -98
  887. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-cache.mjs +0 -0
  888. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/deferred-tool-availability.mjs +0 -0
  889. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-deadlines.mjs +0 -0
  890. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-runtime.mjs +0 -0
  891. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-store.mjs +0 -0
  892. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-text.mjs +0 -0
  893. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-tool-exec.mjs +0 -0
  894. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-snapshot.mjs +0 -0
  895. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-tools.mjs +0 -0
  896. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-data.mjs +0 -0
  897. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-profile.mjs +0 -0
  898. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/shared-scan-cache.mjs +0 -0
  899. /package/src/{standalone → runtime/shared}/fair-call-scheduler/queue-item.mjs +0 -0
  900. /package/src/runtime/{agent/orchestrator/providers → shared/llm}/provider-model-identities.mjs +0 -0
  901. /package/src/{standalone → runtime/shared}/projects.mjs +0 -0
  902. /package/src/{standalone → session-runtime/services}/agent-tool/execute-send.mjs +0 -0
  903. /package/src/{standalone → session-runtime/services}/agent-tool/execute-spawn.mjs +0 -0
  904. /package/src/{standalone → session-runtime/services}/agent-tool/job-views/agent-list.mjs +0 -0
  905. /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/lead-rows.mjs +0 -0
  906. /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/reap-timers.mjs +0 -0
  907. /package/src/{standalone → session-runtime/services}/agent-tool/provider-init.mjs +0 -0
  908. /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/deferred-spawn.mjs +0 -0
  909. /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow.mjs +0 -0
  910. /package/src/{standalone → session-runtime/services}/agent-tool/tag-maps.mjs +0 -0
  911. /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-lookup.mjs +0 -0
  912. /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-refresh.mjs +0 -0
  913. /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/row-helpers.mjs +0 -0
  914. /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper.mjs +0 -0
  915. /package/src/{standalone → session-runtime/services}/agent-tool/terminal-trace.mjs +0 -0
  916. /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/mutation-batch.mjs +0 -0
  917. /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-shape.mjs +0 -0
  918. /package/src/{standalone → session-runtime/services}/channel-client/daemon-request.mjs +0 -0
  919. /package/src/{standalone → session-runtime/services}/channel-client/notify-stream.mjs +0 -0
  920. /package/src/{standalone → session-runtime/services}/channel-client/reconnect.mjs +0 -0
  921. /package/src/{standalone → session-runtime/services}/channel-client/registration.mjs +0 -0
  922. /package/src/{standalone → session-runtime/services}/daemon-candidate.mjs +0 -0
  923. /package/src/{standalone → session-runtime/services}/daemon-crash-capture/paths.mjs +0 -0
  924. /package/src/{standalone → session-runtime/services}/hook-bus/config-loader.mjs +0 -0
  925. /package/src/{standalone → session-runtime/services}/hook-bus/config.mjs +0 -0
  926. /package/src/{standalone → session-runtime/services}/hook-bus/constants.mjs +0 -0
  927. /package/src/{standalone → session-runtime/services}/hook-bus/event-log.mjs +0 -0
  928. /package/src/{standalone → session-runtime/services}/hook-bus/handler-timeout.mjs +0 -0
  929. /package/src/{standalone → session-runtime/services}/hook-bus/payload.mjs +0 -0
  930. /package/src/{standalone → session-runtime/services}/hook-bus/rule-store.mjs +0 -0
  931. /package/src/{standalone → session-runtime/services}/hook-bus/rules.mjs +0 -0
  932. /package/src/{standalone → session-runtime/services}/hook-bus.mjs +0 -0
  933. /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/calls.mjs +0 -0
  934. /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/state.mjs +0 -0
  935. /package/src/{standalone → session-runtime/services}/sse-frames.mjs +0 -0
@@ -10,24 +10,7 @@ import {
10
10
  toAnthropicMessages,
11
11
  } from './lib/anthropic-request-utils.mjs';
12
12
  import { _capabilitySupported, _defaultContextForModel, _prettyName, modelTier } from './anthropic-model-resolve.mjs';
13
-
14
- // System blocks carry their own cache tier; anything else is the default tier.
15
- const SYSTEM_CACHE_TIERS = new Set(['tier3', 'env']);
16
- const systemCacheTier = (cacheTier) => (SYSTEM_CACHE_TIERS.has(cacheTier) ? cacheTier : 'system');
17
-
18
- /** Non-empty system messages as `{ text, tier }` block items; a non-array yields none. */
19
- export function systemBlockItems(systemMsgs) {
20
- const items = [];
21
- for (const m of Array.isArray(systemMsgs) ? systemMsgs : []) {
22
- const text = typeof m?.content === 'string' ? m.content.trim() : '';
23
- if (text) items.push({ text, tier: systemCacheTier(m?.cacheTier) });
24
- }
25
- return items;
26
- }
27
- /** cacheTier:'env' (volatile session/project environment) is never marked —
28
- * it rides the messages-tail breakpoint; a null TTL leaves the block uncached. */
29
- export const systemBlockTtl = (tier, { tier3Ttl, systemTtl }) =>
30
- ({ tier3: tier3Ttl, env: null, system: systemTtl })[tier];
13
+ import { systemBlockItems, systemBlockTtl } from './lib/anthropic-system-blocks.mjs';
31
14
 
32
15
  // Message lowering lives in the shared request-utils lib (one implementation
33
16
  // for both Anthropic providers); re-exported here for existing importers.
@@ -82,15 +65,6 @@ export function buildSystemBlocks(systemMsgs, systemTtl, tier3Ttl) {
82
65
  });
83
66
  }
84
67
 
85
- // Offline fallback for both Anthropic routes when /v1/models is unavailable:
86
- // the current generation only, one id per family.
87
- export const MODELS = [
88
- { id: 'claude-opus-5-5', name: 'Claude Opus 5.5', provider: 'anthropic', family: 'opus', contextWindow: 1000000 },
89
- { id: 'claude-fable-5-1', name: 'Claude Fable 5.1', provider: 'anthropic', family: 'fable', contextWindow: 1000000 },
90
- { id: 'claude-sonnet-5', name: 'Claude Sonnet 5', provider: 'anthropic', family: 'sonnet', contextWindow: 1000000 },
91
- ];
92
- export const ANTHROPIC_VERSION = '2023-06-01';
93
-
94
68
  export function _normalizeAnthropicModel(raw, provider = 'anthropic') {
95
69
  const id = raw?.id || raw?.name || raw?.model;
96
70
  if (!id) return null;
@@ -110,7 +84,7 @@ export function _normalizeAnthropicModel(raw, provider = 'anthropic') {
110
84
  raw?.max_input_tokens ||
111
85
  raw?.input_token_limit ||
112
86
  raw?.inputTokenLimit ||
113
- _defaultContextForModel(id, family),
87
+ _defaultContextForModel(id),
114
88
  outputTokens: raw?.max_tokens || raw?.max_output_tokens || raw?.output_token_limit || raw?.outputTokenLimit || null,
115
89
  tier: modelTier(dated, versioned),
116
90
  latest: false,
@@ -118,8 +92,6 @@ export function _normalizeAnthropicModel(raw, provider = 'anthropic') {
118
92
  reasoningOptions: effortValues.length ? [{ type: 'effort', values: effortValues }] : [],
119
93
  };
120
94
  }
121
- // Family-based heuristic so new model ids (including custom user-configured
122
- // ones) resolve a sensible max_tokens without requiring a code change.
123
95
  // The API-key provider has no catalog cache of its own — it reads the same
124
96
  // anthropic-oauth-models.json disk cache (read-only) that the OAuth provider
125
97
  // maintains. Both providers hit the same Anthropic /v1/models catalog, so a
@@ -170,21 +142,6 @@ export const _test = {
170
142
  sanitizeInputSchema: (schema, toolName) => sanitizeAnthropicInputSchema(schema, toolName, 'anthropic'),
171
143
  };
172
144
 
173
- // Anthropic forbids oneOf / allOf / anyOf at the TOP level of input_schema.
174
- // Mirror the same sanitizer as anthropic-oauth.mjs so both providers are safe.
175
- // Map the orchestrator-level opts.toolChoice into Anthropic's tool_choice.
176
- // Only 'none' is activated: it lets the hard-cap final turn keep the tool
177
- // DEFINITIONS in-request (so the tools->system->messages prefix — and its
178
- // prompt-cache prefix — stay byte-identical to prior turns) while forbidding
179
- // tool USE, so the model can only emit text. Forced values
180
- // ('required'->{type:'any'}, {name}->{type:'tool'}) are deliberately NOT
181
- // mapped: Anthropic returns a 400 for any forced tool_choice while
182
- // extended/adaptive thinking is enabled, and the only caller that sets
183
- // opts.toolChoice='required' (the forced-first-tool turn) runs with
184
- // effort/thinking active on reasoning models — activating it would convert a
185
- // previously-harmless no-op into a hard 400 on exactly that turn. Attached
186
- // only when the request actually carries tools (see _doSend). Mirrors
187
- // anthropic-oauth.mjs.
188
145
  function deferredAnthropicTools(activeTools, messages, opts) {
189
146
  return sharedDeferredAnthropicTools(activeTools, messages, opts, 'anthropic');
190
147
  }
@@ -197,17 +154,3 @@ export function requestAnthropicTools(tools, messages, opts) {
197
154
  export function _toAnthropicMessagesForTest(messages, availableTools) {
198
155
  return toAnthropicMessages(messages, availableTools);
199
156
  }
200
-
201
- // Applies cache_control markers to the FINAL, already-sanitized Anthropic
202
- // message array — by INVARIANT, never by pre-sanitize index. Because
203
- // sanitizeAnthropicContentPairs has already run (and must NOT run again
204
- // after this), the blocks we mark here are exactly the blocks the provider
205
- // sees, so the cache breakpoint is stable across turns.
206
- // message-anchor: prefer a safe tool_result tail, then a previous real user
207
- // text turn if another slot remains. Synthetic
208
- // synthetic reminder messages and current pure-text prompts
209
- // are excluded so per-call prompt content never becomes a
210
- // 1h prefix key.
211
- // messageTtl === null disables the tail. BP3 (tier3) now rides a system block,
212
- // so it is no longer marked here.
213
- // ANTHROPIC_MSG_SLOTS=0 is honoured upstream by passing messageTtl = null.
@@ -43,21 +43,6 @@ export function createAnthropicMidState(attemptIndex) {
43
43
  };
44
44
  }
45
45
 
46
- /**
47
- * @param {object} deps
48
- * @param {string} deps.label stderr log tag (provider instance name)
49
- * @param {string} deps.outcomeProvider provider id on the canonical outcome stamp
50
- * @param {string} deps.midstreamOwner recovery owner recorded when retries are exhausted
51
- * @param {string} deps.unreachableMessage message of the never-observed loop-exit error
52
- * @param {boolean} [deps.initialResponseErrorTerminal] true when the caller's
53
- * request-level retry already spent the budget for a non-OK initial response,
54
- * so such an error must not earn an extra SSE retry here
55
- * @param {number} deps.maxRetries bounded mid-stream retries for transient stream loss
56
- * @param {AbortSignal|null} deps.totalSignal
57
- * @param {{ recoverNonStreaming: Function, issueNonStreamingFallback: Function, requireTransportRecoveryBudget: Function }} deps.recovery
58
- * @param {Function|null} [deps.onStageChange] receives the display-only 'reconnecting' stage per retry
59
- * @param {boolean} [deps.retry529] false for a background call: an overload mid-stream is not retried
60
- */
61
46
  /**
62
47
  * Empty-stream guard. Invariant: a valid Anthropic SSE response ALWAYS opens
63
48
  * with message_start (which carries usage.input_tokens). A 200 whose body
@@ -87,8 +72,25 @@ export function assertAnthropicStreamNotEmpty(midState, result, label) {
87
72
  }
88
73
  }
89
74
 
75
+ /**
76
+ * @param {object} deps
77
+ * @param {string} deps.label stderr log tag (provider instance name)
78
+ * @param {string} [deps.displayName] provider name in error text (default "Anthropic OAuth")
79
+ * @param {string} deps.outcomeProvider provider id on the canonical outcome stamp
80
+ * @param {string} deps.midstreamOwner recovery owner recorded when retries are exhausted
81
+ * @param {string} deps.unreachableMessage message of the never-observed loop-exit error
82
+ * @param {boolean} [deps.initialResponseErrorTerminal] true when the caller's
83
+ * request-level retry already spent the budget for a non-OK initial response,
84
+ * so such an error must not earn an extra SSE retry here
85
+ * @param {number} deps.maxRetries bounded mid-stream retries for transient stream loss
86
+ * @param {AbortSignal|null} deps.totalSignal
87
+ * @param {{ recoverNonStreaming: Function, issueNonStreamingFallback: Function, requireTransportRecoveryBudget: Function }} deps.recovery
88
+ * @param {Function|null} [deps.onStageChange] receives the display-only 'reconnecting' stage per retry
89
+ * @param {boolean} [deps.retry529] false for a background call: an overload mid-stream is not retried
90
+ */
90
91
  export function createAnthropicMidstreamRecovery({
91
92
  label,
93
+ displayName = 'Anthropic OAuth',
92
94
  outcomeProvider,
93
95
  midstreamOwner,
94
96
  unreachableMessage,
@@ -108,17 +110,22 @@ export function createAnthropicMidstreamRecovery({
108
110
  let firstAttemptClassifier = null;
109
111
  const retry = { retry: true };
110
112
  const settled = (value) => ({ retry: false, value });
113
+ const sleepBackoff = (ms) =>
114
+ _midstreamSleepWithAbort(ms, totalSignal, undefined, `${displayName} mid-stream retry backoff aborted`);
115
+ const abortStream = (controller, err) => {
116
+ try {
117
+ controller?.abort?.(err);
118
+ } catch {
119
+ /* best-effort teardown */
120
+ }
121
+ };
111
122
 
112
123
  // Jittered backoff between streaming attempts; the dead stream is torn
113
124
  // down first so its socket returns to the pool.
114
125
  const retryStreaming = async ({ err, classifier, controller, attemptIndex, message, delayMs = null }) => {
115
126
  firstAttemptError = err;
116
127
  firstAttemptClassifier = classifier;
117
- try {
118
- controller?.abort?.(err);
119
- } catch {
120
- /* best-effort teardown */
121
- }
128
+ abortStream(controller, err);
122
129
  log(message);
123
130
  const waitMs = delayMs ?? midstreamBackoffFor(attemptIndex + 1);
124
131
  emitProviderRetryStage(onStageChange, {
@@ -127,7 +134,7 @@ export function createAnthropicMidstreamRecovery({
127
134
  lastErr: err,
128
135
  delayMs: waitMs,
129
136
  });
130
- await _midstreamSleepWithAbort(waitMs, totalSignal);
137
+ await sleepBackoff(waitMs);
131
138
  return retry;
132
139
  };
133
140
 
@@ -154,9 +161,7 @@ export function createAnthropicMidstreamRecovery({
154
161
  // agent loop retracts any exposed text and replays it with a split-call
155
162
  // notice.
156
163
  if (!midState.userAbort && isToolInputCut(err)) {
157
- try {
158
- controller?.abort?.(err);
159
- } catch {}
164
+ abortStream(controller, err);
160
165
  throw err;
161
166
  }
162
167
  // Acknowledged reset semantics let the owner tombstone this
@@ -173,9 +178,7 @@ export function createAnthropicMidstreamRecovery({
173
178
  // incomplete, never dispatched tool input stays replay-safe.
174
179
  // Every retry branch below relies on this early exit.
175
180
  if (outcome?.replayUnsafe === true) {
176
- try {
177
- controller?.abort?.(err);
178
- } catch {}
181
+ abortStream(controller, err);
179
182
  throw err;
180
183
  }
181
184
  // The request-level retry loop already exhausted its full budget on a
@@ -185,9 +188,7 @@ export function createAnthropicMidstreamRecovery({
185
188
  // A background call never retries an overload, mid-stream included (see
186
189
  // withRetry): nobody waits on it and every retry adds load.
187
190
  if (retry529 === false && Number(err?.httpStatus || err?.status || 0) === 529) {
188
- try {
189
- controller?.abort?.(err);
190
- } catch {}
191
+ abortStream(controller, err);
191
192
  throw err;
192
193
  }
193
194
  const canRetry = attemptIndex < maxRetries;
@@ -288,7 +289,7 @@ export function createAnthropicMidstreamRecovery({
288
289
  lastErr: err,
289
290
  delayMs: waitMs,
290
291
  });
291
- await _midstreamSleepWithAbort(waitMs, totalSignal);
292
+ await sleepBackoff(waitMs);
292
293
  return retry;
293
294
  }
294
295
  if (classifier && !canRetry) {
@@ -91,7 +91,7 @@ export function _normalizeAnthropicModel(raw) {
91
91
  family,
92
92
  provider: 'anthropic-oauth',
93
93
  contextWindow:
94
- raw?.context_window || raw?.max_context_window || raw?.max_input_tokens || _defaultContextForModel(id, family),
94
+ raw?.context_window || raw?.max_context_window || raw?.max_input_tokens || _defaultContextForModel(id),
95
95
  outputTokens: raw?.max_tokens || raw?.max_output_tokens || null,
96
96
  tier,
97
97
  latest: false, // assigned in a second pass once full list is known
@@ -115,7 +115,7 @@ export function _prettyName(id, family) {
115
115
  return `${base} ${v[1]}${minor}`;
116
116
  }
117
117
 
118
- export function _defaultContextForModel(id, _family) {
118
+ export function _defaultContextForModel(id) {
119
119
  const text = String(id || '');
120
120
  const version = text.match(/^claude-[a-z]+-(\d+)(?:-(\d+))?/i);
121
121
  if (Number(version?.[1] || 0) >= 5) return 1000000;
@@ -2,6 +2,7 @@ import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { updateJsonAtomicSync } from '../../../shared/atomic-file.mjs';
4
4
  import { resolvePluginData } from '../../../shared/plugin-paths.mjs';
5
+ import { createNpmVersionSource, maxSemver } from './npm-cli-version.mjs';
5
6
 
6
7
  // Anthropic validates the Claude Code client identity carried by OAuth
7
8
  // requests. This floor ships with Mixdog, while a newer server-advertised
@@ -15,6 +16,9 @@ const CACHE_FILE_NAME = 'anthropic-oauth-cli-version.json';
15
16
  const VERSION_GATE_PATTERN =
16
17
  /Claude Code\s+(\d{1,4}\.\d{1,4}\.\d{1,6})\s+does not support this model;\s*version\s+(\d{1,4}\.\d{1,4}\.\d{1,6})\s+or newer is required\b/i;
17
18
 
19
+ // Effective version = max(floor, learned minimum, live @anthropic-ai/claude-code).
20
+ const liveCliVersion = createNpmVersionSource('@anthropic-ai/claude-code');
21
+
18
22
  let learnedCliVersion = null;
19
23
  let learnedCliVersionLoaded = false;
20
24
 
@@ -86,7 +90,12 @@ function persistLearnedCliVersion(cliVersion) {
86
90
  export function resolveCliVersion() {
87
91
  const explicit = String(process.env.MIXDOG_CLI_VERSION || '').trim();
88
92
  if (explicit) return explicit;
89
- return loadLearnedCliVersion() || DEFAULT_CLI_VERSION;
93
+ return maxSemver(DEFAULT_CLI_VERSION, loadLearnedCliVersion(), liveCliVersion.sync());
94
+ }
95
+
96
+ /** Await before the first request so a cold start never sends a stale floor. */
97
+ export async function warmCliVersion() {
98
+ if (!String(process.env.MIXDOG_CLI_VERSION || '').trim()) await liveCliVersion.warm();
90
99
  }
91
100
 
92
101
  /** The `user-agent` every Claude OAuth request sends for the resolved CLI version. */
@@ -15,8 +15,8 @@ import { boundProviderAuthPath } from '../../../shared/provider-auth-binding.mjs
15
15
  import { resolvePluginData } from '../../../shared/plugin-paths.mjs';
16
16
  import { getLlmDispatcher } from '../../../shared/llm/http-agent.mjs';
17
17
  import { claudeCliUserAgent, resolveCliVersion } from './anthropic-oauth-client-version.mjs';
18
- import { expiryFromAccessToken, scrubOAuthSecrets } from './lib/oauth-token-utils.mjs';
19
- import { createOAuthPkce } from './lib/oauth-pkce.mjs';
18
+ import { expiryFromAccessToken, oauthCredentialStatus, scrubOAuthSecrets } from './lib/oauth-token-utils.mjs';
19
+ import { createOAuthPkce, parseOAuthCodeInput } from './lib/oauth-pkce.mjs';
20
20
 
21
21
  // SSRF guard for the OAuth token endpoint override. Env-supplied URLs must be
22
22
  // https with a valid http(s) URL shape; reject file:/data:/ftp:/etc. and any
@@ -162,8 +162,6 @@ export function describeAnthropicOAuthCredentials() {
162
162
  const hasInferenceScope = Array.isArray(creds.scopes) && creds.scopes.includes('user:inference');
163
163
  const hasRefresh = Boolean(creds.refreshToken);
164
164
  const expiresAt = _normalizeExpiresAt(creds.expiresAt);
165
- const expiring = expiresAt > 0 && expiresAt < Date.now() + TOKEN_REFRESH_SKEW_MS;
166
- const expired = expiresAt > 0 && expiresAt <= Date.now();
167
165
  const detail = creds.path || DEFAULT_CREDENTIALS_PATH;
168
166
  if (!hasInferenceScope) {
169
167
  return {
@@ -176,46 +174,7 @@ export function describeAnthropicOAuthCredentials() {
176
174
  expiresAt,
177
175
  };
178
176
  }
179
- if (!hasRefresh) {
180
- return {
181
- authenticated: expiresAt === 0 || !expired,
182
- usable: expiresAt === 0 || !expired,
183
- refreshable: false,
184
- reauthRequired: expired,
185
- status: expired ? 'Reauth Required' : 'Access Only',
186
- detail: `${detail}; no refresh token`,
187
- expiresAt,
188
- };
189
- }
190
- if (expired)
191
- return {
192
- authenticated: true,
193
- usable: false,
194
- refreshable: true,
195
- reauthRequired: false,
196
- status: 'Refresh Required',
197
- detail,
198
- expiresAt,
199
- };
200
- if (expiring)
201
- return {
202
- authenticated: true,
203
- usable: true,
204
- refreshable: true,
205
- reauthRequired: false,
206
- status: 'Refresh Soon',
207
- detail,
208
- expiresAt,
209
- };
210
- return {
211
- authenticated: true,
212
- usable: true,
213
- refreshable: true,
214
- reauthRequired: false,
215
- status: 'Valid',
216
- detail,
217
- expiresAt,
218
- };
177
+ return oauthCredentialStatus({ hasRefresh, expiresAt, detail, refreshSkewMs: TOKEN_REFRESH_SKEW_MS });
219
178
  } catch (err) {
220
179
  return {
221
180
  authenticated: false,
@@ -303,7 +262,7 @@ async function _refreshOAuthCredentialsUnlocked(creds) {
303
262
  }
304
263
 
305
264
  const controller = new AbortController();
306
- const timeout = setTimeout(() => controller.abort(), 30_000);
265
+ const timeout = setTimeout(() => controller.abort(), OAUTH_TOKEN_TIMEOUT_MS);
307
266
  try {
308
267
  const res = await fetch(TOKEN_URL, {
309
268
  method: 'POST',
@@ -529,26 +488,18 @@ function _oauthParseScopeField(scope) {
529
488
  .filter(Boolean);
530
489
  }
531
490
 
491
+ // A pasted callback URL also names the redirect_uri it came from; every other
492
+ // shape (code#state, code=…, bare code) is the shared parser's.
532
493
  function _parseOAuthCodeInput(input) {
533
- const value = String(input || '').trim();
534
- if (!value) return { code: '', state: '' };
535
494
  try {
536
- const url = new URL(value);
495
+ const url = new URL(String(input || '').trim());
537
496
  const code = url.searchParams.get('code') || '';
538
497
  const state = url.searchParams.get('state') || '';
539
498
  if (code || state) return { code, state, redirectUri: `${url.origin}${url.pathname}` };
540
499
  } catch {
541
500
  /* not a URL */
542
501
  }
543
- if (value.includes('#')) {
544
- const [code, state] = value.split('#', 2);
545
- return { code: String(code || '').trim(), state: String(state || '').trim() };
546
- }
547
- if (value.includes('code=')) {
548
- const params = new URLSearchParams(value.startsWith('?') ? value.slice(1) : value);
549
- return { code: params.get('code') || '', state: params.get('state') || '' };
550
- }
551
- return { code: value, state: '' };
502
+ return parseOAuthCodeInput(input, { allowHashState: true });
552
503
  }
553
504
 
554
505
  async function exchangeAuthorizationCode({ pkce, code, state, redirectUri }) {
@@ -611,7 +562,7 @@ async function exchangeAuthorizationCode({ pkce, code, state, redirectUri }) {
611
562
  };
612
563
  }
613
564
 
614
- export async function beginOAuthLogin() {
565
+ export async function beginOAuthLogin({ openBrowserFn = null } = {}) {
615
566
  const pkce = createOAuthPkce();
616
567
  const state = randomBytes(32).toString('base64url');
617
568
  const buildUrl = (redirectUri) => {
@@ -630,8 +581,8 @@ export async function beginOAuthLogin() {
630
581
  const manualUrl = buildUrl(OAUTH_MANUAL_REDIRECT_URI);
631
582
  const openLoginUrl = async (targetUrl, label = 'login') => {
632
583
  try {
633
- const { openInBrowser } = await import('../../../shared/open-url.mjs');
634
- openInBrowser(targetUrl.toString());
584
+ const openInBrowser = openBrowserFn || (await import('../../../shared/open-url.mjs')).openInBrowser;
585
+ await openInBrowser(targetUrl.toString());
635
586
  } catch (err) {
636
587
  process.stderr.write(
637
588
  `[anthropic-oauth] browser open failed for ${label} URL: ${String(err?.message || err).slice(0, 200)}\n`
@@ -665,9 +616,9 @@ export async function beginOAuthLogin() {
665
616
  }
666
617
  const code = u.searchParams.get('code');
667
618
  if (!code || u.searchParams.get('state') !== state) {
619
+ // Reject this request only; the valid callback may still arrive.
668
620
  res.writeHead(400);
669
621
  res.end('Invalid');
670
- finish(null);
671
622
  return;
672
623
  }
673
624
  try {
@@ -9,9 +9,10 @@ import { promisify } from 'node:util';
9
9
  import { gzip } from 'node:zlib';
10
10
  import { getLlmDispatcher } from '../../../../shared/llm/http-agent.mjs';
11
11
  import { claudeCliUserAgent } from '../anthropic-oauth-client-version.mjs';
12
+ import { ANTHROPIC_VERSION } from '../lib/anthropic-models.mjs';
12
13
 
13
14
  const API_URL = 'https://api.anthropic.com/v1/messages';
14
- export const ANTHROPIC_VERSION = '2023-06-01';
15
+ export { ANTHROPIC_VERSION };
15
16
 
16
17
  const ANTHROPIC_REQ_GZIP_MIN_BYTES = 8 * 1024;
17
18
  let gzipLatchedOff = false;
@@ -12,6 +12,7 @@ import { traceAgentFetch } from '../agent-trace.mjs';
12
12
  import { createAbortController } from '../../../shared/abort-controller.mjs';
13
13
  import { notifyCurrentAnthropicRateLimit } from './admission-scheduler.mjs';
14
14
  import { noteFastModeCapacityError } from './anthropic-fast-mode.mjs';
15
+ import { noteRequestServiceTier } from '../../../shared/llm/usage-context.mjs';
15
16
  import {
16
17
  ANTHROPIC_RETRY_BACKOFF_MS,
17
18
  ANTHROPIC_RETRY_JITTER_RATIO,
@@ -66,6 +67,7 @@ export function createAnthropicOAuthRequest({
66
67
  // provider-visible cache breakpoint off the cached one — the
67
68
  // exact COLD-turn bug this change fixes. Order is fixed:
68
69
  // build → sanitize (once) → mark → prepare image bytes → JSON.stringify.
70
+ noteRequestServiceTier(requestBody?.speed);
69
71
  const response = await postMessages({
70
72
  accessToken,
71
73
  requestBody,
@@ -8,8 +8,10 @@
8
8
  import { traceAgentSse, traceAgentUsage } from '../agent-trace.mjs';
9
9
  import { boundProviderAuthPath } from '../../../shared/provider-auth-binding.mjs';
10
10
  import { resolveAnthropicMaxTokens } from './anthropic-max-tokens.mjs';
11
- import { MODELS, systemBlockItems, systemBlockTtl } from './anthropic-messages.mjs';
11
+ import { MODELS } from './lib/anthropic-models.mjs';
12
+ import { systemBlockItems, systemBlockTtl } from './lib/anthropic-system-blocks.mjs';
12
13
  import { prepareAnthropicImages } from './lib/anthropic-image-input.mjs';
14
+ import { streamCallbacks } from './lib/send-callbacks.mjs';
13
15
  import {
14
16
  _loadModelCache,
15
17
  _setInMemoryCatalog,
@@ -34,7 +36,7 @@ import {
34
36
  beginOAuthLogin,
35
37
  loginOAuth,
36
38
  } from './anthropic-oauth-credentials.mjs';
37
- import { claudeCliUserAgent, learnRequiredCliVersion } from './anthropic-oauth-client-version.mjs';
39
+ import { claudeCliUserAgent, learnRequiredCliVersion, warmCliVersion } from './anthropic-oauth-client-version.mjs';
38
40
  import { createPassthroughSignal } from '../stall-policy.mjs';
39
41
  import { AnthropicFallbackTriggeredError } from './retry-classifier.mjs';
40
42
  import { ANTHROPIC_MAX_MIDSTREAM_RETRIES, parseSSEStream, _classifyMidstreamError } from './anthropic-sse.mjs';
@@ -58,6 +60,13 @@ import {
58
60
  toAnthropicMessages,
59
61
  toAnthropicToolChoice,
60
62
  } from './lib/anthropic-request-utils.mjs';
63
+ import {
64
+ EFFORT_CONFIGURATION_BETA,
65
+ projectEffortConfiguration,
66
+ lowerAnthropicEffortHistory,
67
+ markAnthropicEffortBody,
68
+ usesAnthropicEffortBody,
69
+ } from './effort-configuration.mjs';
61
70
 
62
71
  // SSE progress emits (per-request "Response …" and "Done:" lines). Off by default.
63
72
  const SSE_VERBOSE = process.env.MIXDOG_SSE_VERBOSE === '1';
@@ -75,13 +84,10 @@ const _oauthRefreshes = new Map();
75
84
  const CLAUDE_CODE_SYSTEM_PREFIX = "You are Claude Code, Anthropic's official CLI for Claude.";
76
85
  const OAUTH_BETA_HEADERS =
77
86
  'oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,extended-cache-ttl-2025-04-11';
78
- import {
79
- EFFORT_CONFIGURATION_BETA,
80
- projectEffortConfiguration,
81
- lowerAnthropicEffortHistory,
82
- markAnthropicEffortBody,
83
- usesAnthropicEffortBody,
84
- } from './effort-configuration.mjs';
87
+
88
+ function logQuiet(line) {
89
+ if (!process.env.MIXDOG_QUIET_PROVIDER_LOG) process.stderr.write(`[anthropic-oauth] ${line}\n`);
90
+ }
85
91
 
86
92
  function requiresSystemPrefix(model) {
87
93
  // High-tier Claude OAuth models require the first-party system prefix for
@@ -172,22 +178,6 @@ function resolveMaxTokens(model) {
172
178
 
173
179
  // --- Message conversion ---
174
180
 
175
- // Anthropic's tool spec forbids oneOf / allOf / anyOf at the TOP level of
176
- // input_schema (nested usage inside properties is allowed). External MCP
177
- // servers sometimes emit such schemas.
178
- // Convert them to a flat object schema so the API never sees a 400.
179
- // Map the orchestrator-level opts.toolChoice into Anthropic's tool_choice.
180
- // Only 'none' is activated: it lets the hard-cap final turn keep the tool
181
- // DEFINITIONS in-request (so the tools->system->messages prefix — and its
182
- // prompt-cache prefix — stay byte-identical to prior turns) while forbidding
183
- // tool USE, so the model can only emit text. Forced values
184
- // ('required'->{type:'any'}, {name}->{type:'tool'}) are deliberately NOT
185
- // mapped: Anthropic returns a 400 for any forced tool_choice while
186
- // extended/adaptive thinking is enabled, and the only caller that sets
187
- // opts.toolChoice='required' (the forced-first-tool turn) runs with
188
- // effort/thinking active on reasoning models — activating it would convert a
189
- // previously-harmless no-op into a hard 400 on exactly that turn. Attached
190
- // only when the request actually carries tools (see buildRequestBody).
191
181
  function deferredAnthropicTools(activeTools, messages, opts) {
192
182
  return sharedDeferredAnthropicTools(activeTools, messages, opts, 'anthropic-oauth');
193
183
  }
@@ -195,19 +185,6 @@ function requestAnthropicTools(tools, messages, opts) {
195
185
  return sharedRequestAnthropicTools(tools, messages, opts, 'anthropic-oauth');
196
186
  }
197
187
 
198
- // Applies cache_control markers to the FINAL, already-sanitized Anthropic
199
- // message array — by INVARIANT, never by pre-sanitize index. Because
200
- // sanitizeAnthropicContentPairs has already run (and must NOT run again
201
- // after this), the blocks we mark here are exactly the blocks the provider
202
- // sees, so the cache breakpoint is stable across turns.
203
- // message-anchor: prefer a safe tool_result tail, then a previous real user
204
- // text turn if another slot remains. Synthetic
205
- // <system-reminder> messages and current pure-text prompts
206
- // are excluded so first-turn prompts do not create a fresh
207
- // BP4 write on every new session.
208
- // messageTtl === null disables the tail. BP3 (tier3) now rides a system block,
209
- // so it is no longer marked here.
210
- // ANTHROPIC_MSG_SLOTS=0 is honoured upstream by passing messageTtl = null.
211
188
  // --- Build request body ---
212
189
 
213
190
  // BP3 (tier3) is injected by session/manager as its own `system` role block —
@@ -312,6 +289,7 @@ export class AnthropicOAuthProvider {
312
289
  }
313
290
 
314
291
  async ensureAuth({ forceRefresh = false, reason = 'preemptive' } = {}) {
292
+ await warmCliVersion();
315
293
  if (!this.credentials) {
316
294
  this.credentials = loadCredentials();
317
295
  }
@@ -327,8 +305,7 @@ export class AnthropicOAuthProvider {
327
305
  const fresh = loadCredentials();
328
306
  if (fresh?.accessToken) {
329
307
  this.credentials = fresh;
330
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
331
- process.stderr.write(`[anthropic-oauth] Credentials reloaded from disk (mtime change)\n`);
308
+ logQuiet('Credentials reloaded from disk (mtime change)');
332
309
  }
333
310
  }
334
311
 
@@ -358,8 +335,7 @@ export class AnthropicOAuthProvider {
358
335
  const validAfter = Date.now() + (force ? 0 : TOKEN_REFRESH_SKEW_MS);
359
336
  if (disk?.accessToken && disk.accessToken !== currentToken && (!disk.expiresAt || disk.expiresAt >= validAfter)) {
360
337
  this.credentials = disk;
361
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
362
- process.stderr.write(`[anthropic-oauth] Credentials reloaded from disk\n`);
338
+ logQuiet('Credentials reloaded from disk');
363
339
  return disk;
364
340
  }
365
341
  if (!this.credentials && disk) this.credentials = disk;
@@ -380,36 +356,29 @@ export class AnthropicOAuthProvider {
380
356
  latest.accessToken !== currentToken &&
381
357
  (!latest.expiresAt || latest.expiresAt >= latestValidAfter)
382
358
  ) {
383
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
384
- process.stderr.write(`[anthropic-oauth] Credentials reloaded from disk\n`);
359
+ logQuiet('Credentials reloaded from disk');
385
360
  return latest;
386
361
  }
387
362
 
388
363
  if (!latest?.refreshToken) {
389
364
  if (!force && latest?.accessToken && (!latest.expiresAt || latest.expiresAt > Date.now())) {
390
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
391
- process.stderr.write(
392
- `[anthropic-oauth] WARNING: token expiring but no refresh token; using current token until expiry\n`
393
- );
365
+ logQuiet('WARNING: token expiring but no refresh token; using current token until expiry');
394
366
  return latest;
395
367
  }
396
368
  throw new Error('Anthropic OAuth refresh token not available. Open /providers in mixdog to sign in again.');
397
369
  }
398
370
 
399
371
  try {
400
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
401
- process.stderr.write(`[anthropic-oauth] Token ${reason}, refreshing...\n`);
372
+ logQuiet(`Token ${reason}, refreshing...`);
402
373
  const refreshed = await refreshOAuthCredentials(latest);
403
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
404
- process.stderr.write(
405
- `[anthropic-oauth] Token refreshed, expires in ${Math.round(((refreshed.expiresAt || Date.now()) - Date.now()) / 1000)}s\n`
406
- );
374
+ logQuiet(
375
+ `Token refreshed, expires in ${Math.round(((refreshed.expiresAt || Date.now()) - Date.now()) / 1000)}s`
376
+ );
407
377
  return refreshed;
408
378
  } catch (err) {
409
379
  if (!force && latest?.accessToken && (!latest.expiresAt || latest.expiresAt > Date.now())) {
410
380
  const msg = err instanceof Error ? err.message : String(err);
411
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
412
- process.stderr.write(`[anthropic-oauth] Refresh failed (${msg}); using still-valid current token\n`);
381
+ logQuiet(`Refresh failed (${msg}); using still-valid current token`);
413
382
  return latest;
414
383
  }
415
384
  throw err;
@@ -428,6 +397,7 @@ export class AnthropicOAuthProvider {
428
397
  }
429
398
 
430
399
  async send(messages, model, tools, sendOpts) {
400
+ await warmCliVersion();
431
401
  // Re-warm the kept-alive socket before the turn. preconnect() is a
432
402
  // best-effort no-op while a socket is still hot (TTL gate), but after an
433
403
  // idle gap longer than the keep-alive window it re-opens one in parallel
@@ -441,11 +411,7 @@ export class AnthropicOAuthProvider {
441
411
  // a hard 400. Pairing here closes the gap regardless of caller.
442
412
  messages = sanitizeToolPairs(messages);
443
413
  const opts = sendOpts || {};
444
- const onStageChange = typeof opts.onStageChange === 'function' ? opts.onStageChange : null;
445
- const onStreamDelta = typeof opts.onStreamDelta === 'function' ? opts.onStreamDelta : null;
446
- const onToolCall = typeof opts.onToolCall === 'function' ? opts.onToolCall : null;
447
- const onTextDelta = typeof opts.onTextDelta === 'function' ? opts.onTextDelta : null;
448
- const onTextReset = typeof opts.onTextReset === 'function' ? opts.onTextReset : null;
414
+ const { onStageChange, onStreamDelta, onToolCall, onTextDelta, onTextReset } = streamCallbacks(opts);
449
415
  const externalSignal = opts.signal || null;
450
416
  // Test seam: lets the retry harness drive stream outcomes without a
451
417
  // live OAuth session.
@@ -772,8 +738,7 @@ export class AnthropicOAuthProvider {
772
738
  try {
773
739
  return await this._fetchModelCatalog();
774
740
  } catch (err) {
775
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
776
- process.stderr.write(`[anthropic-oauth] listModels fetch failed (${err.message})\n`);
741
+ logQuiet(`listModels fetch failed (${err.message})`);
777
742
  // Fallback with full API model IDs (the shared offline list). Short
778
743
  // family tokens leaked through here would be accepted by setup and
779
744
  // reintroduce the legacy shape. ANTHROPIC_DEFAULT_<FAMILY>_MODEL
@@ -797,12 +762,10 @@ export class AnthropicOAuthProvider {
797
762
  _modelRefreshInFlight = (async () => {
798
763
  try {
799
764
  const enriched = await this._fetchModelCatalog();
800
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
801
- process.stderr.write(`[anthropic-oauth] catalog refreshed (${enriched.length} models)\n`);
765
+ logQuiet(`catalog refreshed (${enriched.length} models)`);
802
766
  return enriched;
803
767
  } catch (err) {
804
- if (!process.env.MIXDOG_QUIET_PROVIDER_LOG)
805
- process.stderr.write(`[anthropic-oauth] catalog refresh failed (${err.message})\n`);
768
+ logQuiet(`catalog refresh failed (${err.message})`);
806
769
  return null;
807
770
  } finally {
808
771
  _modelRefreshInFlight = null;