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
@@ -1,753 +1 @@
1
- // Deferred-tool catalog: measured-usage ordering, kind/bucket classification,
2
- // tool_search ranking + auto-selection, and the session tool-surface
3
- // application/selection logic. Pure module (session objects passed in).
4
- import { clean } from './session-text.mjs';
5
- import { mergePendingDeferredToolDelta } from './deferred-tool-delta.mjs';
6
- import {
7
- applyInitialDeferredToolManifestToBp2,
8
- stripDeferredToolManifestBlock,
9
- } from '../runtime/agent/orchestrator/context/collect.mjs';
10
- import { getMcpServerInstructionsMap, getMcpTools } from '../runtime/agent/orchestrator/mcp/client.mjs';
11
- import { filterMcpToolsForSession } from './extension-scopes.mjs';
12
- import { isDeferredToolAvailable } from './deferred-tool-availability.mjs';
13
- import {
14
- isResponsesFreeformTool,
15
- toResponsesCustomTool,
16
- } from '../runtime/agent/orchestrator/providers/custom-tool-wire.mjs';
17
- import {
18
- DEFERRED_DEFAULT_FULL_TOOLS,
19
- DEFERRED_DEFAULT_LEAD_TOOLS,
20
- DEFERRED_DEFAULT_READONLY_TOOLS,
21
- DEFERRED_SELECT_ALIASES,
22
- MEASURED_TOOL_USAGE,
23
- READONLY_TOOL_NAMES,
24
- } from './tool-catalog-data.mjs';
25
- import {
26
- toolKind,
27
- measuredToolUsage,
28
- parseToolSelection,
29
- routeToolRank,
30
- sortedCatalogByMeasuredUsage,
31
- activeToolForSurface,
32
- deferredProviderMode,
33
- nativeProviderFamily,
34
- } from './tool-catalog-schema.mjs';
35
- import { filterModelEditTools } from '../runtime/shared/edit-tool-dialect.mjs';
36
- export {
37
- toolKind,
38
- toolSchemaBucket,
39
- estimateToolSchemaBreakdown,
40
- measuredToolUsage,
41
- parseToolSelection,
42
- sortedCatalogByMeasuredUsage,
43
- } from './tool-catalog-schema.mjs';
44
- export { snapshotProviderRequestTools } from './provider-request-snapshot.mjs';
45
- export {
46
- DEFERRED_DEFAULT_FULL_TOOLS,
47
- DEFERRED_DEFAULT_LEAD_TOOLS,
48
- DEFERRED_DEFAULT_READONLY_TOOLS,
49
- MEASURED_TOOL_USAGE,
50
- } from './tool-catalog-data.mjs';
51
-
52
- // Provider modes whose whole catalog is the active surface (no deferred pool).
53
- const FIXED_SURFACE_MODES = new Set(['full', 'manifest', 'canonical']);
54
-
55
- function isMcpToolName(name) {
56
- return typeof name === 'string' && name.startsWith('mcp__');
57
- }
58
-
59
- function toolParameters(tool) {
60
- if (tool?.inputSchema && typeof tool.inputSchema === 'object') return tool.inputSchema;
61
- return { type: 'object', properties: {} };
62
- }
63
-
64
- // The rendered BP2 manifest text, or '' when no system message carries one.
65
- function renderedDeferredManifest(session) {
66
- const system = session.messages?.find(
67
- (message) =>
68
- message?.role === 'system' &&
69
- typeof message.content === 'string' &&
70
- message.content.includes('<available-deferred-tools>')
71
- );
72
- return system?.content ?? '';
73
- }
74
-
75
- export function filterDisallowedTools(tools, disallowed = []) {
76
- // Old session catalogs must not resurrect the separate staging schema.
77
- const deny = new Set(['git_stage', ...(Array.isArray(disallowed) ? disallowed : [])].map(clean).filter(Boolean));
78
- return (tools || []).filter((tool) => !deny.has(clean(tool?.name)));
79
- }
80
-
81
- export function sortedNamesByMeasuredUsage(names) {
82
- // Canonical route order first; measured usage orders the unrouted tail.
83
- return [...(names || [])].sort((a, b) => {
84
- const ar = routeToolRank(a);
85
- const br = routeToolRank(b);
86
- if (ar !== br) return ar - br;
87
- const au = measuredToolUsage(a);
88
- const bu = measuredToolUsage(b);
89
- if (bu !== au) return bu - au;
90
- return String(a).localeCompare(String(b));
91
- });
92
- }
93
-
94
- export function defaultDeferredToolNames(catalog, mode) {
95
- const available = new Set((catalog || []).map((tool) => clean(tool?.name)).filter(Boolean));
96
- if (mode === 'lead') {
97
- return new Set(DEFERRED_DEFAULT_LEAD_TOOLS.filter((name) => available.has(name)));
98
- }
99
- if (mode === 'readonly') {
100
- return new Set(DEFERRED_DEFAULT_READONLY_TOOLS.filter((name) => available.has(name)));
101
- }
102
- return new Set(DEFERRED_DEFAULT_FULL_TOOLS.filter((name) => available.has(name)));
103
- }
104
-
105
- export function compactToolSearchDescription(value, max = 220) {
106
- const text = clean(value).replace(/\s+/g, ' ');
107
- return text.length > max ? `${text.slice(0, max - 1)}…` : text;
108
- }
109
-
110
- // Late-announcement lines stay skill-manifest shaped but much tighter than the
111
- // BP1 pool (first sentence, hard 80-char cap): the reminder is transient
112
- // discovery only — the full description/schema arrives when the tool loads.
113
- function lateAnnouncementDescription(value) {
114
- const text = clean(value).replace(/\s+/g, ' ');
115
- const sentence = text.split(/(?<=[.!?])\s+/, 1)[0] || text;
116
- return sentence.length > 80 ? `${sentence.slice(0, 79)}…` : sentence;
117
- }
118
-
119
- export function toolRow(tool, activeNames = new Set()) {
120
- const name = clean(tool?.name);
121
- return {
122
- name,
123
- kind: toolKind(tool),
124
- usage: measuredToolUsage(name),
125
- active: activeNames.has(name),
126
- description: compactToolSearchDescription(tool?.description),
127
- };
128
- }
129
-
130
- function providerSupportsResponsesCustomTools(provider) {
131
- const p = clean(provider).toLowerCase();
132
- if (!p) return true;
133
- return p === 'openai' || p === 'openai-oauth';
134
- }
135
-
136
- function openAILoadableToolSpec(tool, provider = '') {
137
- if (providerSupportsResponsesCustomTools(provider) && isResponsesFreeformTool(tool))
138
- return toResponsesCustomTool(tool);
139
- return {
140
- type: 'function',
141
- name: clean(tool?.name),
142
- description: clean(tool?.description),
143
- defer_loading: true,
144
- parameters: toolParameters(tool),
145
- };
146
- }
147
-
148
- export function toolSearchNativePayload(catalog, names, provider = '') {
149
- const selected = new Set((names || []).map(clean).filter(Boolean));
150
- if (!selected.size) return null;
151
- const tools = [];
152
- const refs = [];
153
- for (const tool of catalog || []) {
154
- const name = clean(tool?.name);
155
- if (!name || !selected.has(name)) continue;
156
- refs.push(name);
157
- tools.push(openAILoadableToolSpec(tool, provider));
158
- }
159
- if (!refs.length) return null;
160
- return {
161
- provider: clean(provider).toLowerCase(),
162
- toolReferences: refs,
163
- openaiTools: tools,
164
- summary: `Loaded deferred tools: ${refs.join(', ')}`,
165
- };
166
- }
167
-
168
- // Schemas for tools that are ALREADY active. They are deliberately NOT added
169
- // to toolReferences/openaiTools: re-announcing them would rewrite the request
170
- // tools array and break the cached prefix. The caller only ever sees names
171
- // otherwise, so the parameter contract (enums, limits) rides in the RESULT.
172
- function activeToolSchemas(catalog, session, names) {
173
- const wanted = new Set((names || []).map(clean).filter(Boolean));
174
- if (!wanted.size) return [];
175
- const seen = new Set();
176
- const specs = [];
177
- for (const pool of [Array.isArray(session?.tools) ? session.tools : [], catalog || []]) {
178
- for (const tool of pool) {
179
- const name = clean(tool?.name);
180
- if (!name || !wanted.has(name) || seen.has(name)) continue;
181
- seen.add(name);
182
- specs.push({ name, description: clean(tool?.description), parameters: toolParameters(tool) });
183
- }
184
- }
185
- return specs;
186
- }
187
-
188
- // Plain case-insensitive substring filter over name + description. No scores,
189
- // no aliases, no auto-selection: tool_search only lists and (via select)
190
- // loads. Empty query matches every row.
191
- export function toolSearchMatches(row, query) {
192
- const raw = clean(query).toLowerCase();
193
- if (!raw) return true;
194
- const haystack = `${clean(row?.name)} ${clean(row?.description)}`.toLowerCase();
195
- return haystack.includes(raw);
196
- }
197
-
198
- function expandSelectionNames(names) {
199
- const out = [];
200
- for (const raw of names || []) {
201
- const key = clean(raw);
202
- if (!key) continue;
203
- const alias = DEFERRED_SELECT_ALIASES[key.toLowerCase()];
204
- if (alias) out.push(...alias);
205
- else out.push(key);
206
- }
207
- return [...new Set(out)];
208
- }
209
-
210
- function storedDeferredToolNames(session) {
211
- for (const source of [session?.deferredDiscoveredTools, session?.deferredSelectedTools]) {
212
- const names = parseToolSelection(source);
213
- if (names.length) return names;
214
- }
215
- return [];
216
- }
217
-
218
- function canonicalDeferredToolNames(catalog, names) {
219
- const byName = new Map();
220
- for (const tool of catalog || []) {
221
- const name = clean(tool?.name);
222
- if (!name) continue;
223
- byName.set(name, name);
224
- byName.set(name.toLowerCase(), name);
225
- }
226
- const out = [];
227
- for (const raw of expandSelectionNames(names)) {
228
- const name = clean(raw);
229
- const canonical = byName.get(name) || byName.get(name.toLowerCase());
230
- if (canonical) out.push(canonical);
231
- }
232
- return sortedNamesByMeasuredUsage(new Set(out));
233
- }
234
-
235
- function setDeferredToolState(session, names) {
236
- if (!session) return [];
237
- const selected = sortedNamesByMeasuredUsage(new Set(parseToolSelection(names)));
238
- session.deferredDiscoveredTools = selected;
239
- session.deferredSelectedTools = selected;
240
- return selected;
241
- }
242
-
243
- function deferredPoolToolNames(session) {
244
- if (!session || FIXED_SURFACE_MODES.has(session.deferredProviderMode)) return [];
245
- const catalog = Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : [];
246
- const active = new Set([
247
- ...(session.tools || []).map((tool) => clean(tool?.name)).filter(Boolean),
248
- ...parseToolSelection(session.deferredCallableTools),
249
- ]);
250
- const out = [];
251
- for (const tool of catalog) {
252
- const name = clean(tool?.name);
253
- if (name && !active.has(name)) out.push(name);
254
- }
255
- return sortedNamesByMeasuredUsage(out);
256
- }
257
-
258
- // Definition history combines the boot catalog with refreshed MCP definitions.
259
- // Selection separately checks current availability. Native request snapshots
260
- // expose only discovered definitions; the union never eagerly exposes the pool.
261
- export function deferredCatalogUnion(session) {
262
- const boot = filterDisallowedTools(
263
- Array.isArray(session?.deferredToolCatalog) ? session.deferredToolCatalog : [],
264
- session?.disallowedTools
265
- );
266
- const late = filterDisallowedTools(
267
- Array.isArray(session?.deferredLateToolCatalog) ? session.deferredLateToolCatalog : [],
268
- session?.disallowedTools
269
- );
270
- if (!late.length) return boot;
271
- const byName = new Map();
272
- // Refreshed definitions win same-name collisions without rewriting boot
273
- // metadata. Only selected, available schemas reach the next native request.
274
- for (const tool of boot) {
275
- const name = clean(tool?.name);
276
- if (name && !byName.has(name)) byName.set(name, tool);
277
- }
278
- for (const tool of late) {
279
- const name = clean(tool?.name);
280
- if (name) byName.set(name, tool);
281
- }
282
- return [...byName.values()];
283
- }
284
-
285
- export function isReadonlySelectable(tool) {
286
- const name = clean(tool?.name);
287
- if (READONLY_TOOL_NAMES.has(name)) return true;
288
- const annotations = tool?.annotations || {};
289
- if (annotations.destructiveHint === true) return false;
290
- if (annotations.readOnlyHint === true) return true;
291
- return false;
292
- }
293
-
294
- export function applyDeferredToolSurface(session, mode, extraTools = [], options = {}) {
295
- if (!session || !Array.isArray(session.tools)) return session;
296
- const providerMode = deferredProviderMode(options.provider || session.provider);
297
- const byName = new Map();
298
- // Rebuild from the full catalog, not just its eager projection. Current
299
- // definitions still take precedence over retained definitions.
300
- const candidates = filterDisallowedTools(
301
- filterModelEditTools(
302
- [...session.tools, ...(extraTools || []), ...deferredCatalogUnion(session)],
303
- options.model || session.model
304
- ),
305
- [...(session.disallowedTools || []), ...(options.disallowed || [])]
306
- );
307
- for (const tool of candidates) {
308
- const name = clean(tool?.name);
309
- if (!name || byName.has(name)) continue;
310
- byName.set(name, activeToolForSurface(tool));
311
- }
312
- const catalog = sortedCatalogByMeasuredUsage([...byName.values()]);
313
- const defaultNames = defaultDeferredToolNames(catalog, mode);
314
- const storedNames = providerMode === 'native' ? [] : storedDeferredToolNames(session);
315
- const fixedSurface = FIXED_SURFACE_MODES.has(providerMode);
316
- let selectedNames = fixedSurface
317
- ? sortedNamesByMeasuredUsage(catalog.map((tool) => clean(tool?.name)).filter(Boolean))
318
- : [];
319
- if (!fixedSurface) {
320
- selectedNames = storedNames.length ? canonicalDeferredToolNames(catalog, storedNames) : [];
321
- if (!selectedNames.length || providerMode === 'native') selectedNames = sortedNamesByMeasuredUsage(defaultNames);
322
- }
323
- const selected = new Set(selectedNames);
324
- session.deferredToolCatalog = catalog;
325
- session.deferredToolUsage = MEASURED_TOOL_USAGE;
326
- session.deferredDefaultTools = sortedNamesByMeasuredUsage(defaultNames);
327
- session.deferredProviderMode = providerMode;
328
- session.deferredNativeTools = providerMode === 'native';
329
- session.deferredSurfaceMode = mode;
330
- session.tools.length = 0;
331
- const active = [];
332
- for (const tool of catalog) {
333
- if (!selected.has(clean(tool?.name))) continue;
334
- if (mode === 'readonly' && !isReadonlySelectable(tool)) continue;
335
- session.tools.push(tool);
336
- active.push(clean(tool?.name));
337
- }
338
- session.deferredCallableTools = sortedNamesByMeasuredUsage(active);
339
- if (providerMode === 'native') {
340
- const discovered = canonicalDeferredToolNames(catalog, session.deferredDiscoveredTools || []);
341
- session.deferredSelectedTools = active;
342
- session.deferredDiscoveredTools = discovered.filter((name) => !selected.has(name));
343
- } else {
344
- setDeferredToolState(session, active);
345
- }
346
- if (!session.deferredToolBp2Applied && session.messages?.some((m) => m?.role === 'system')) {
347
- if (!session.mcpServerInstructions || typeof session.mcpServerInstructions !== 'object') {
348
- session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
349
- }
350
- applyInitialDeferredToolManifestToBp2(session, deferredPoolToolNames(session));
351
- }
352
- if (!Array.isArray(session.deferredAnnouncedTools) && session.deferredToolBp2Applied) {
353
- // Seed the announced set with everything already advertised in the BP2
354
- // manifest, so the turn-boundary MCP delta (reconcileDeferredMcpToolCatalog)
355
- // only announces genuinely new, late-connecting tools and never re-announces
356
- // the startup pool.
357
- session.deferredAnnouncedTools = deferredPoolToolNames(session);
358
- }
359
- return session;
360
- }
361
-
362
- export function rebuildDeferredToolSurfaceForProvider(session, provider) {
363
- if (!session || !Array.isArray(session.tools)) return session;
364
- const previousMode = session.deferredProviderMode;
365
- const previousFamily = nativeProviderFamily(session.provider);
366
- const nextFamily = nativeProviderFamily(provider);
367
- const preserveNativeState = previousFamily && previousFamily === nextFamily;
368
- const discovered = preserveNativeState
369
- ? canonicalDeferredToolNames(deferredCatalogUnion(session), session.deferredDiscoveredTools || [])
370
- : [];
371
- const catalog = deferredCatalogUnion(session).slice();
372
- session.deferredDiscoveredTools = discovered;
373
- applyDeferredToolSurface(session, session.deferredSurfaceMode || 'lead', catalog, { provider });
374
- if (session.deferredProviderMode === 'native' && discovered.length) {
375
- session.deferredDiscoveredTools = discovered;
376
- session.deferredCallableTools = sortedNamesByMeasuredUsage(
377
- new Set([...(session.deferredCallableTools || []), ...discovered])
378
- );
379
- session.deferredSelectedTools = session.deferredCallableTools.slice();
380
- }
381
- if (previousMode && previousMode !== session.deferredProviderMode) {
382
- if (session.deferredProviderMode === 'native') {
383
- session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
384
- applyInitialDeferredToolManifestToBp2(session, deferredPoolToolNames(session), { rebuild: true });
385
- const rendered = renderedDeferredManifest(session);
386
- session.deferredAnnouncedTools = deferredPoolToolNames(session).filter((name) => rendered.includes(name));
387
- } else if (previousMode === 'native') {
388
- for (const system of session.messages?.filter((message) => message?.role === 'system') || []) {
389
- if (typeof system.content === 'string') system.content = stripDeferredToolManifestBlock(system.content);
390
- }
391
- session.messages = session.messages.filter(
392
- (message) => message?.role !== 'system' || String(message.content || '').trim()
393
- );
394
- session.deferredAnnouncedTools = [];
395
- session.deferredToolBp2Applied = true;
396
- delete session.deferredToolBp1Applied;
397
- }
398
- }
399
- return session;
400
- }
401
-
402
- // FIRST-TURN deferred-surface refresh (turn-time deferred manifest).
403
- // An MCP server may finish its handshake BETWEEN session-create and the first
404
- // user send. Fold those LIVE MCP tools into the boot deferred catalog + the
405
- // provider-visible first-turn surface. Native providers rebuild the initial BP2
406
- // <available-deferred-tools> manifest IN PLACE and pre-mark names announced.
407
- // Manifest/canonical providers update their active fixed surface directly; the
408
- // canonical path never emits a deferred manifest or late reminder. Fully sync
409
- // and idempotent: no genuinely-new MCP name => no-op / no mutation.
410
- export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
411
- if (!session || !Array.isArray(session.messages)) return false;
412
- if (session.deferredProviderMode === 'full') return false;
413
- const live = filterDisallowedTools(Array.isArray(liveMcpTools) ? liveMcpTools : [], session.disallowedTools);
414
- const byName = new Map();
415
- for (const tool of Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : []) {
416
- const name = clean(tool?.name);
417
- if (name && !byName.has(name)) byName.set(name, tool);
418
- }
419
- let added = false;
420
- for (const tool of live) {
421
- const name = clean(tool?.name);
422
- if (!name || !isMcpToolName(name) || byName.has(name)) continue;
423
- byName.set(name, activeToolForSurface(tool));
424
- added = true;
425
- }
426
- if (!added) return false;
427
- session.deferredToolCatalog = sortedCatalogByMeasuredUsage([...byName.values()]);
428
- if (session.deferredProviderMode === 'manifest' || session.deferredProviderMode === 'canonical') {
429
- const next = session.deferredToolCatalog.filter(
430
- (tool) => session.deferredSurfaceMode !== 'readonly' || isReadonlySelectable(tool)
431
- );
432
- session.tools.splice(0, session.tools.length, ...next);
433
- session.deferredCallableTools = next.map((tool) => clean(tool?.name)).filter(Boolean);
434
- if (session.deferredProviderMode === 'canonical') {
435
- setDeferredToolState(session, session.deferredCallableTools);
436
- }
437
- session.updatedAt = Date.now();
438
- return true;
439
- }
440
- // Refresh MCP server instructions so a newly-connected server's block is
441
- // included when BP2 is re-rendered below.
442
- session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
443
- const applied = applyInitialDeferredToolManifestToBp2(session, deferredPoolToolNames(session), { rebuild: true });
444
- if (!applied) return false;
445
- // Pre-mark ONLY the names that ACTUALLY landed in the rebuilt BP2 manifest as
446
- // announced; anything the manifest could not advertise stays un-announced so
447
- // the turn-boundary late reminder can still surface it.
448
- const rendered = renderedDeferredManifest(session);
449
- session.deferredAnnouncedTools = deferredPoolToolNames(session).filter((name) => rendered.includes(name));
450
- session.updatedAt = Date.now();
451
- return true;
452
- }
453
-
454
- /**
455
- * Request-boundary reconciliation (full snapshot + delta).
456
- * Merge currently-connected MCP tools into session.deferredLateToolCatalog (a
457
- * SEPARATE pool from the boot-frozen session.deferredToolCatalog) so tools from
458
- * servers that finished their handshake AFTER this session was created become
459
- * reachable through loading and direct-call discovery. Native boot metadata
460
- * stays unchanged; discovered schemas travel through native search history or
461
- * deferred request definitions, never by promotion into the eager prefix.
462
- * Late additions/removals are merged into one persistent typed delta. The ask
463
- * boundary attaches that delta to the next real prompt and acknowledges it only
464
- * after the provider accepts the turn; a catalog change never creates a turn.
465
- * Loaded definitions survive a disconnect for replay, but are not availability
466
- * grants. The current scoped names separately govern loading and dispatch.
467
- * Returns the announced names, or null when nothing was announced.
468
- */
469
- export function reconcileDeferredMcpToolCatalog(session, liveMcpTools) {
470
- if (!session || !Array.isArray(session.tools)) return null;
471
- const live = filterDisallowedTools(Array.isArray(liveMcpTools) ? liveMcpTools : [], session.disallowedTools);
472
- const hadSnapshot = Array.isArray(session.deferredMcpToolNames);
473
- const previousNames = new Set(
474
- hadSnapshot
475
- ? session.deferredMcpToolNames
476
- : [...(session.deferredToolCatalog || []), ...(session.deferredLateToolCatalog || [])]
477
- .map((tool) => clean(tool?.name))
478
- .filter(isMcpToolName)
479
- );
480
- session.deferredMcpToolNames = [...new Set(live.map((tool) => clean(tool?.name)).filter(isMcpToolName))];
481
- if (FIXED_SURFACE_MODES.has(session.deferredProviderMode)) {
482
- const byName = new Map();
483
- for (const tool of Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : []) {
484
- const name = clean(tool?.name);
485
- if (name && !isMcpToolName(name)) byName.set(name, tool);
486
- }
487
- for (const tool of live) {
488
- const name = clean(tool?.name);
489
- if (name && isMcpToolName(name)) byName.set(name, activeToolForSurface(tool));
490
- }
491
- const catalog = sortedCatalogByMeasuredUsage([...byName.values()]);
492
- const next = catalog.filter((tool) => session.deferredSurfaceMode !== 'readonly' || isReadonlySelectable(tool));
493
- const before = JSON.stringify((session.tools || []).map((tool) => activeToolForSurface(tool)));
494
- const after = JSON.stringify(next);
495
- session.deferredToolCatalog = catalog;
496
- session.tools.splice(0, session.tools.length, ...next);
497
- session.deferredCallableTools = next.map((tool) => clean(tool?.name)).filter(Boolean);
498
- if (before !== after) session.updatedAt = Date.now();
499
- return before === after ? null : session.deferredCallableTools;
500
- }
501
- const lateCatalog = Array.isArray(session.deferredLateToolCatalog) ? session.deferredLateToolCatalog : [];
502
- const active = new Set([
503
- ...(session.tools || []).map((tool) => clean(tool?.name)).filter(Boolean),
504
- ...parseToolSelection(session.deferredCallableTools),
505
- ...parseToolSelection(session.deferredDiscoveredTools),
506
- ]);
507
-
508
- const liveMcpByName = new Map();
509
- for (const tool of live) {
510
- const name = clean(tool?.name);
511
- if (!name || !isMcpToolName(name) || liveMcpByName.has(name)) continue;
512
- liveMcpByName.set(name, activeToolForSurface(tool));
513
- }
514
-
515
- // Rebuild the LATE pool only (boot catalog stays frozen). It holds live MCP
516
- // tools — INCLUDING ones whose name also exists in the boot catalog, so a
517
- // reconnect's fresher schema is reachable via deferredCatalogUnion (which
518
- // prefers the late entry). Keep an entry only while its server is still
519
- // connected OR the tool is already loaded, including native history-only
520
- // discoveries. Availability is determined by deferredMcpToolNames, not this pool.
521
- const nextByName = new Map();
522
- for (const tool of lateCatalog) {
523
- const name = clean(tool?.name);
524
- if (!name || nextByName.has(name)) continue;
525
- if (!liveMcpByName.has(name) && !active.has(name)) continue;
526
- nextByName.set(name, tool);
527
- }
528
- for (const [name, tool] of liveMcpByName) nextByName.set(name, tool);
529
- session.deferredLateToolCatalog = sortedCatalogByMeasuredUsage([...nextByName.values()]);
530
-
531
- // A promoted (active) MCP tool survives its server disconnecting; on reconnect
532
- // re-link the active session.tools entry to the fresh server tool so its
533
- // schema/handler track the live connection. Swap ONLY when the serialized
534
- // surface actually changed, so a steady reconnect never perturbs the tools
535
- // request param or its cache hash.
536
- for (let i = 0; i < session.tools.length; i += 1) {
537
- const name = clean(session.tools[i]?.name);
538
- if (!name || !isMcpToolName(name) || !liveMcpByName.has(name)) continue;
539
- const freshTool = liveMcpByName.get(name);
540
- if (JSON.stringify(freshTool) !== JSON.stringify(session.tools[i])) session.tools[i] = freshTool;
541
- }
542
-
543
- const nextNames = new Set(session.deferredMcpToolNames);
544
- const startupNames = new Set(Array.isArray(session.deferredAnnouncedTools) ? session.deferredAnnouncedTools : []);
545
- const added = [];
546
- for (const tool of liveMcpByName.values()) {
547
- const name = clean(tool?.name);
548
- if (!name || !isMcpToolName(name)) continue;
549
- if (previousNames.has(name) || (!hadSnapshot && (active.has(name) || startupNames.has(name)))) continue;
550
- added.push({ name, description: lateAnnouncementDescription(tool?.description) });
551
- }
552
- const removed = [];
553
- for (const name of previousNames) {
554
- if (nextNames.has(name)) continue;
555
- removed.push(name);
556
- }
557
- if (!added.length && !removed.length) return null;
558
- mergePendingDeferredToolDelta(session, { added, removed });
559
- session.updatedAt = Date.now();
560
- return [...added.map((entry) => entry.name), ...removed];
561
- }
562
-
563
- export function scopedMcpToolsFor(session, config = null) {
564
- return filterMcpToolsForSession(getMcpTools(session?.mcpScopeId), session?.cwd || null, config);
565
- }
566
-
567
- export function refreshDeferredMcpToolCatalog(session, config = null) {
568
- if (!session?.deferredProviderMode) return null;
569
- return reconcileDeferredMcpToolCatalog(session, scopedMcpToolsFor(session, config));
570
- }
571
-
572
- export function selectDeferredTools(session, names, mode, { exact = false } = {}) {
573
- // Resolve against the union of the boot-frozen catalog and the late-connected
574
- // MCP catalog so load_tool can load a late tool. Native providers register it
575
- // independently; canonical fallback providers already expose the full array.
576
- const catalog = resolvableCatalog(session);
577
- const surfaceActive = new Set((session?.tools || []).map((tool) => clean(tool?.name)).filter(Boolean));
578
- const active = new Set([...surfaceActive, ...parseToolSelection(session?.deferredCallableTools)]);
579
- const native = session?.deferredProviderMode === 'native' || session?.deferredNativeTools === true;
580
- const discovered = new Set(Array.isArray(session?.deferredDiscoveredTools) ? session.deferredDiscoveredTools : []);
581
- const activateOnSurface = !native;
582
- const byName = new Map();
583
- for (const tool of catalog) {
584
- const name = clean(tool?.name);
585
- if (!name) continue;
586
- byName.set(name, tool);
587
- byName.set(name.toLowerCase(), tool);
588
- }
589
- const added = [];
590
- const already = [];
591
- const blocked = [];
592
- const missing = [];
593
- for (const rawName of exact ? [...new Set(names)] : expandSelectionNames(names)) {
594
- const requestedName = clean(rawName);
595
- const tool = byName.get(requestedName) || byName.get(requestedName.toLowerCase());
596
- const name = clean(tool?.name);
597
- if (!tool || !isDeferredToolAvailable(session, name)) {
598
- missing.push(requestedName);
599
- continue;
600
- }
601
- if (mode === 'readonly' && !isReadonlySelectable(tool)) {
602
- blocked.push({ name, reason: 'readonly mode' });
603
- continue;
604
- }
605
- if (active.has(name) || (!activateOnSurface && discovered.has(name))) {
606
- already.push(name);
607
- continue;
608
- }
609
- if (activateOnSurface) {
610
- session.tools.push(tool);
611
- active.add(name);
612
- discovered.delete(name);
613
- } else {
614
- discovered.add(name);
615
- active.add(name);
616
- }
617
- added.push(name);
618
- }
619
- if (native) {
620
- session.deferredCallableTools = sortedNamesByMeasuredUsage(active);
621
- session.deferredDiscoveredTools = sortedNamesByMeasuredUsage([...discovered]);
622
- session.deferredSelectedTools = sortedNamesByMeasuredUsage(active);
623
- } else {
624
- setDeferredToolState(session, active);
625
- }
626
- return { added, already, blocked, missing, native };
627
- }
628
-
629
- // Split live MCP servers into "still connecting" (pending) and "failed" so the
630
- // loader can tell the model to retry next turn instead of treating a missing
631
- // tool as a permanent zero result. `mcpStatus` is a getter plumbed from the
632
- // runtime; absent in unit tests, where these lists are simply empty.
633
- function pendingAndFailedMcpServers(mcpStatus) {
634
- const empty = { pending: [], failed: [] };
635
- let status = null;
636
- try {
637
- status = typeof mcpStatus === 'function' ? mcpStatus() : mcpStatus;
638
- } catch {
639
- return empty;
640
- }
641
- const servers = Array.isArray(status?.servers) ? status.servers : [];
642
- const pending = [];
643
- const failed = [];
644
- for (const row of servers) {
645
- const name = clean(row?.name);
646
- if (!name) continue;
647
- if (row?.status === 'disconnected') pending.push(name);
648
- else if (row?.status === 'failed') failed.push(name);
649
- }
650
- return { pending: [...new Set(pending)].sort(), failed: [...new Set(failed)].sort() };
651
- }
652
-
653
- /** The deferred catalog union, or the session's own allowed tools when nothing is deferred. */
654
- function resolvableCatalog(session) {
655
- const union = deferredCatalogUnion(session);
656
- if (union.length) return union;
657
- return filterDisallowedTools(Array.isArray(session?.tools) ? session.tools : [], session?.disallowedTools);
658
- }
659
-
660
- // Pure loader. Input is exact deferred-tool names/aliases; output reports
661
- // loaded / already-active / missing / blocked tools PLUS pending/failed MCP
662
- // servers. No listing, no ranking, no substring filter. `options.mcpStatus` is
663
- // the runtime getter for per-server status.
664
- export function renderToolSearch(args = {}, session, mode = 'full', options = {}) {
665
- const catalog = resolvableCatalog(session);
666
- const requestedNames = parseToolSelection(args.names);
667
- const { pending: pendingMcpServers, failed: failedMcpServers } = pendingAndFailedMcpServers(options?.mcpStatus);
668
- const mcpFields = {
669
- ...(pendingMcpServers.length ? { pendingMcpServers } : {}),
670
- ...(failedMcpServers.length ? { failedMcpServers } : {}),
671
- };
672
-
673
- if (!requestedNames.length) {
674
- const strayQuery = clean(args.query || args.q || args.text);
675
- return JSON.stringify(
676
- {
677
- error: strayQuery
678
- ? `load_tool is a loader, not a search: "${strayQuery}" is not an exact tool name. Pass names:["exact_tool_name", ...] (deferred tool names/aliases). No keyword search.`
679
- : 'load_tool requires names:["exact_tool_name", ...] (deferred tool names/aliases).',
680
- loaded: [],
681
- alreadyActive: [],
682
- missing: [],
683
- ...mcpFields,
684
- activeTools: sortedNamesByMeasuredUsage(
685
- (session?.tools || []).map((tool) => clean(tool?.name)).filter(Boolean)
686
- ),
687
- discoveredTools: sortedNamesByMeasuredUsage(session?.deferredDiscoveredTools || []),
688
- },
689
- null,
690
- 2
691
- );
692
- }
693
-
694
- // Native loads update only the callable registry and provider-native history
695
- // payload. Canonical fallback providers already carry the complete array.
696
- const toolSelection = selectDeferredTools(session, requestedNames, mode);
697
- const nextActiveNames = new Set([
698
- ...(session?.tools || []).map((tool) => clean(tool?.name)).filter(Boolean),
699
- ...parseToolSelection(session?.deferredCallableTools),
700
- ]);
701
- const loaded = toolSelection.added || [];
702
- const alreadyActive = toolSelection.already || [];
703
- const missing = toolSelection.missing || [];
704
- const blocked = toolSelection.blocked || [];
705
- // Native discovery is history-driven: an explicit re-selection must emit
706
- // the tool reference/spec again even when the callable registry already has
707
- // the name. Other agent runtimes treat repeated selection as a
708
- // harmless reference refresh; suppressing it leaves declaration-gated
709
- // harnesses with "already active" text but no callable schema.
710
- const nativeToolSearchBase = toolSelection.native
711
- ? toolSearchNativePayload(catalog, [...loaded, ...alreadyActive], session?.provider) || {
712
- provider: clean(session?.provider).toLowerCase(),
713
- toolReferences: [],
714
- openaiTools: [],
715
- summary: '',
716
- }
717
- : null;
718
- const alreadyActiveSchemas = toolSelection.native ? [] : activeToolSchemas(catalog, session, alreadyActive);
719
- const nativeSummary = [
720
- ...(loaded.length ? [`Loaded deferred tools: ${loaded.join(', ')}`] : []),
721
- ...(alreadyActive.length ? [`Already active: ${alreadyActive.join(', ')}`] : []),
722
- ].join('\n');
723
- const nativeToolSearch = nativeToolSearchBase
724
- ? { ...nativeToolSearchBase, summary: nativeSummary || nativeToolSearchBase.summary }
725
- : null;
726
- const notes = [];
727
- if (missing.length && pendingMcpServers.length) {
728
- notes.push('Some requested names may belong to an MCP server still connecting — retry next turn.');
729
- }
730
- if (missing.length && failedMcpServers.length) {
731
- notes.push('Some requested names may belong to a failed MCP server; those tools are unavailable.');
732
- }
733
- return JSON.stringify(
734
- {
735
- // `selected` retained for back-compat consumers (mode is always 'select').
736
- selected: { mode: 'select', tools: toolSelection },
737
- ...(nativeToolSearch ? { nativeToolSearch } : {}),
738
- loaded,
739
- alreadyActive,
740
- ...(alreadyActiveSchemas.length ? { alreadyActiveSchemas } : {}),
741
- missing,
742
- ...(blocked.length ? { blocked } : {}),
743
- ...mcpFields,
744
- activeTools: sortedNamesByMeasuredUsage(
745
- [...nextActiveNames].filter((name) => isDeferredToolAvailable(session, name))
746
- ),
747
- discoveredTools: sortedNamesByMeasuredUsage(session?.deferredDiscoveredTools || []),
748
- ...(notes.length ? { note: notes.join(' ') } : {}),
749
- },
750
- null,
751
- 2
752
- );
753
- }
1
+ export * from '../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';