mixdog 0.9.173 → 0.9.174

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 (1019) hide show
  1. package/package.json +2 -2
  2. package/scripts/build-tui.mjs +32 -9
  3. package/scripts/computer-task-cost-report.mjs +4 -11
  4. package/scripts/graph-parity.mjs +2 -8
  5. package/scripts/lib/changed-tests.mjs +104 -0
  6. package/scripts/lib/cli-args.mjs +43 -0
  7. package/scripts/lib/cli-args.test.mjs +64 -0
  8. package/scripts/lib/embedding-model-bench-core.mjs +0 -7
  9. package/scripts/lib/run-node-tests.mjs +35 -2
  10. package/scripts/lib/trace-stats.mjs +38 -0
  11. package/scripts/lib/trace-stats.test.mjs +56 -0
  12. package/scripts/llm-trace-summary.mjs +2 -34
  13. package/scripts/native-tool-download.mjs +5 -0
  14. package/scripts/office/author-deck.mjs +8 -14
  15. package/scripts/patch-replay.mjs +1 -11
  16. package/scripts/perf/transcript-runtime-probe.mjs +2 -2
  17. package/scripts/pptx-kit-index.mjs +157 -0
  18. package/scripts/prepare-native-assets.mjs +4 -6
  19. package/scripts/routing-corpus.mjs +1 -11
  20. package/scripts/session-diag.mjs +2 -34
  21. package/scripts/suite-health.mjs +4 -0
  22. package/scripts/test.mjs +32 -2
  23. package/scripts/tidy/sync-engines-manifest.mjs +42 -9
  24. package/scripts/tool-failures.mjs +1 -8
  25. package/scripts/tool-stress.mjs +4 -8
  26. package/scripts/verify-release-assets.mjs +24 -7
  27. package/src/agents/reviewer/AGENT.md +2 -1
  28. package/src/agents/security/AGENT.md +2 -1
  29. package/src/defaults/agents.json +3 -3
  30. package/src/defaults/skills/browser-use/SKILL.md +67 -14
  31. package/src/defaults/skills/code-tidy/SKILL.md +37 -33
  32. package/src/defaults/skills/code-tidy/references/agent-cleanup.md +8 -119
  33. package/src/defaults/skills/code-tidy/references/cleanup-report.md +88 -0
  34. package/src/defaults/skills/code-tidy/references/dead-code.md +2 -7
  35. package/src/defaults/skills/code-tidy/references/test-suite-slop.md +31 -0
  36. package/src/defaults/skills/computer-use/SKILL.md +54 -33
  37. package/src/defaults/skills/docx/SKILL.md +5 -5
  38. package/src/defaults/skills/docx/references/native-authoring.md +86 -29
  39. package/src/defaults/skills/goal-management/SKILL.md +42 -21
  40. package/src/defaults/skills/image/SKILL.md +16 -16
  41. package/src/defaults/skills/local-provider/SKILL.md +1 -2
  42. package/src/defaults/skills/memory-management/SKILL.md +1 -2
  43. package/src/defaults/skills/pdf/SKILL.md +5 -5
  44. package/src/defaults/skills/pptx/SKILL.md +20 -14
  45. package/src/defaults/skills/pptx/references/charts.md +177 -28
  46. package/src/defaults/skills/pptx/references/composition.md +9 -9
  47. package/src/defaults/skills/pptx/references/direction.md +4 -4
  48. package/src/defaults/skills/pptx/references/html.md +108 -0
  49. package/src/defaults/skills/pptx/references/kit-index.md +839 -0
  50. package/src/defaults/skills/pptx/references/kit.md +239 -41
  51. package/src/defaults/skills/pptx/references/pictures.md +10 -2
  52. package/src/defaults/skills/pptx/references/review.md +0 -5
  53. package/src/defaults/skills/setup/SKILL.md +3 -2
  54. package/src/defaults/skills/setup/references/actions.md +16 -22
  55. package/src/defaults/skills/setup/references/surfaces.md +1 -2
  56. package/src/defaults/skills/skill-creator/SKILL.md +16 -19
  57. package/src/defaults/skills/skill-creator/references/design.md +13 -19
  58. package/src/defaults/skills/skill-creator/scripts/validate-skill.mjs +6 -2
  59. package/src/defaults/skills/video/SKILL.md +12 -13
  60. package/src/defaults/skills/xlsx/SKILL.md +9 -8
  61. package/src/defaults/skills/xlsx/references/model-conventions.md +1 -1
  62. package/src/defaults/skills/xlsx/references/report-design.md +14 -5
  63. package/src/lib/keychain-cjs.cjs +48 -69
  64. package/src/lib/rules-builder.cjs +1 -1
  65. package/src/repl/slash-commands.mjs +14 -2
  66. package/src/rules/agent/43-title-agent.md +1 -1
  67. package/src/rules/agent/AGENT.md +1 -1
  68. package/src/rules/lead/LEAD.md +3 -2
  69. package/src/rules/shared/05-tool-calls.md +11 -0
  70. package/src/rules/shared/10-tool-workflow.md +2 -3
  71. package/src/rules/shared/30-exploration.md +1 -2
  72. package/src/rules/shared/40-editing.md +1 -1
  73. package/src/rules/shared/45-destructive.md +3 -3
  74. package/src/rules/shared/70-delivery.md +5 -1
  75. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/turn.mjs +10 -14
  76. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +95 -95
  77. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +19 -96
  78. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +1 -4
  79. package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +1 -4
  80. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +2 -20
  81. package/src/runtime/agent/orchestrator/agent-runtime/title-completion.mjs +3 -0
  82. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +11 -8
  83. package/src/runtime/agent/orchestrator/agent-trace-io.mjs +2 -8
  84. package/src/runtime/agent/orchestrator/agent-trace.mjs +20 -20
  85. package/src/runtime/agent/orchestrator/cache-mtime.mjs +3 -1
  86. package/src/runtime/agent/orchestrator/config-storage.mjs +49 -51
  87. package/src/runtime/agent/orchestrator/config.mjs +10 -2
  88. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +9 -21
  89. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +10 -6
  90. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +15 -32
  91. package/src/runtime/agent/orchestrator/internal-agents.mjs +26 -19
  92. package/src/runtime/agent/orchestrator/internal-tools.mjs +4 -4
  93. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +22 -37
  94. package/src/runtime/agent/orchestrator/mcp/client.mjs +48 -66
  95. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +2 -0
  96. package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +23 -23
  97. package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +8 -2
  98. package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +19 -13
  99. package/src/runtime/agent/orchestrator/providers/anthropic-leaked-toolcall.mjs +0 -8
  100. package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +1 -1
  101. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +7 -27
  102. package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +74 -8
  103. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +7 -1
  104. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +26 -27
  105. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-midstream.mjs +5 -1
  106. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +9 -6
  107. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request.mjs +5 -2
  108. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +46 -101
  109. package/src/runtime/agent/orchestrator/providers/anthropic-recovery-guards.mjs +10 -3
  110. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-delta.mjs +16 -1
  111. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +10 -2
  112. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +7 -3
  113. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-state.mjs +4 -0
  114. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +19 -2
  115. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +15 -3
  116. package/src/runtime/agent/orchestrator/providers/anthropic-thinking-contract.mjs +9 -0
  117. package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +1 -0
  118. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +19 -33
  119. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +1 -5
  120. package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +25 -32
  121. package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +4 -8
  122. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +6 -4
  123. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +17 -14
  124. package/src/runtime/agent/orchestrator/providers/compat-request-policy.mjs +14 -0
  125. package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +3 -3
  126. package/src/runtime/agent/orchestrator/providers/cursor-wire-exec.mjs +3 -2
  127. package/src/runtime/agent/orchestrator/providers/cursor-wire-guards.mjs +3 -33
  128. package/src/runtime/agent/orchestrator/providers/cursor-wire-interactions.mjs +20 -39
  129. package/src/runtime/agent/orchestrator/providers/cursor.mjs +2 -1
  130. package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +3 -34
  131. package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +5 -2
  132. package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +9 -11
  133. package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +8 -31
  134. package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +2 -2
  135. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +47 -12
  136. package/src/runtime/agent/orchestrator/providers/gemini.mjs +3 -3
  137. package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +9 -18
  138. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +40 -43
  139. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +5 -33
  140. package/src/runtime/agent/orchestrator/providers/lib/flat-schema-merge.mjs +37 -0
  141. package/src/runtime/agent/orchestrator/providers/lib/gemini-model-catalog.mjs +4 -4
  142. package/src/runtime/agent/orchestrator/providers/lib/quota-readings.mjs +24 -0
  143. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +63 -12
  144. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +62 -77
  145. package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +3 -0
  146. package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +9 -15
  147. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +2 -0
  148. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +13 -16
  149. package/src/runtime/agent/orchestrator/providers/openai-codex-model.mjs +10 -7
  150. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +4 -29
  151. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +1 -1
  152. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +6 -6
  153. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +4 -2
  154. package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +23 -46
  155. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +3 -12
  156. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +9 -14
  157. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +10 -30
  158. package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +1 -1
  159. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +4 -4
  160. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +2 -6
  161. package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +4 -24
  162. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +13 -17
  163. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +24 -29
  164. package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +11 -3
  165. package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +3 -2
  166. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +0 -2
  167. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +5 -4
  168. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-stamps.mjs +21 -8
  169. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +2 -8
  170. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state.mjs +1 -2
  171. package/src/runtime/agent/orchestrator/providers/openai-oauth-catalog.mjs +8 -8
  172. package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +1 -1
  173. package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +4 -2
  174. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +5 -8
  175. package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +29 -7
  176. package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +3 -3
  177. package/src/runtime/agent/orchestrator/providers/openai-transport-policy.mjs +2 -6
  178. package/src/runtime/agent/orchestrator/providers/openai-turn-state.mjs +9 -11
  179. package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +20 -13
  180. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +3 -2
  181. package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +2 -4
  182. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/attempt-context.mjs +5 -2
  183. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/handshake-failure.mjs +1 -1
  184. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/stream-failure.mjs +9 -16
  185. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts.mjs +0 -2
  186. package/src/runtime/agent/orchestrator/providers/openai-ws-send-outcome.mjs +14 -16
  187. package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +0 -2
  188. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +18 -23
  189. package/src/runtime/agent/orchestrator/providers/openai-ws-warmup.mjs +7 -13
  190. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +5 -16
  191. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +3 -0
  192. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +1 -13
  193. package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +3 -2
  194. package/src/runtime/agent/orchestrator/providers/provider-model-identities.mjs +6 -0
  195. package/src/runtime/agent/orchestrator/providers/registry.mjs +0 -24
  196. package/src/runtime/agent/orchestrator/providers/retry-backoff.mjs +3 -12
  197. package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +132 -15
  198. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +6 -12
  199. package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +39 -0
  200. package/src/runtime/agent/orchestrator/providers/retry-midstream.mjs +16 -5
  201. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +0 -7
  202. package/src/runtime/agent/orchestrator/providers/tool-stream-state.mjs +7 -6
  203. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +5 -8
  204. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +2 -3
  205. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +5 -102
  206. package/src/runtime/agent/orchestrator/session/compact/budget.mjs +3 -4
  207. package/src/runtime/agent/orchestrator/session/compact/constants.mjs +1 -1
  208. package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +148 -48
  209. package/src/runtime/agent/orchestrator/session/compact/json-byte-length.mjs +93 -0
  210. package/src/runtime/agent/orchestrator/session/compact/messages.mjs +1 -0
  211. package/src/runtime/agent/orchestrator/session/compact/observation-supersession.mjs +96 -0
  212. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +33 -7
  213. package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +23 -41
  214. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +45 -33
  215. package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +2 -5
  216. package/src/runtime/agent/orchestrator/session/context-fingerprint.mjs +32 -1
  217. package/src/runtime/agent/orchestrator/session/context-tool-pairs.mjs +7 -7
  218. package/src/runtime/agent/orchestrator/session/context-utils.mjs +864 -109
  219. package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +0 -1
  220. package/src/runtime/agent/orchestrator/session/eager-dispatch/entry.mjs +8 -7
  221. package/src/runtime/agent/orchestrator/session/explicit-skills.mjs +1 -4
  222. package/src/runtime/agent/orchestrator/session/image-strip-recovery.mjs +24 -15
  223. package/src/runtime/agent/orchestrator/session/loop/compact-debug.mjs +0 -14
  224. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +33 -13
  225. package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +3 -3
  226. package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +16 -0
  227. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +5 -2
  228. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +3 -3
  229. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/empty-nudge.mjs +1 -1
  230. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +12 -6
  231. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +1 -1
  232. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +22 -10
  233. package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +24 -24
  234. package/src/runtime/agent/orchestrator/session/loop/request-projection.mjs +6 -45
  235. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +43 -30
  236. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +57 -51
  237. package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +8 -6
  238. package/src/runtime/agent/orchestrator/session/loop/termination.mjs +7 -10
  239. package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +1 -6
  240. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +1 -1
  241. package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +3 -0
  242. package/src/runtime/agent/orchestrator/session/loop/transcript-repair.mjs +7 -15
  243. package/src/runtime/agent/orchestrator/session/loop/usage.mjs +3 -1
  244. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +1 -0
  245. package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +44 -20
  246. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +0 -1
  247. package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +5 -12
  248. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +192 -32
  249. package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +21 -82
  250. package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +21 -29
  251. package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +28 -27
  252. package/src/runtime/agent/orchestrator/session/manager/message-sanitize.mjs +1 -3
  253. package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +17 -6
  254. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +44 -30
  255. package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +4 -0
  256. package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +3 -12
  257. package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +16 -0
  258. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +17 -14
  259. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +20 -34
  260. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +58 -47
  261. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +16 -17
  262. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +11 -13
  263. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +2 -1
  264. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +0 -2
  265. package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +7 -7
  266. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +11 -30
  267. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +50 -20
  268. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +45 -42
  269. package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +29 -33
  270. package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +11 -15
  271. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +8 -6
  272. package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +160 -17
  273. package/src/runtime/agent/orchestrator/session/reduction-metrics.mjs +19 -0
  274. package/src/runtime/agent/orchestrator/session/save-session-worker-stdio.mjs +28 -0
  275. package/src/runtime/agent/orchestrator/session/save-session-worker.mjs +29 -38
  276. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +236 -72
  277. package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +355 -27
  278. package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +10 -6
  279. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +111 -98
  280. package/src/runtime/agent/orchestrator/session/store/lifecycle-read.mjs +10 -16
  281. package/src/runtime/agent/orchestrator/session/store/listing.mjs +92 -69
  282. package/src/runtime/agent/orchestrator/session/store/live-cache-eviction.mjs +5 -1
  283. package/src/runtime/agent/orchestrator/session/store/live-state.mjs +11 -14
  284. package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +1 -1
  285. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +246 -37
  286. package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +58 -26
  287. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +202 -79
  288. package/src/runtime/agent/orchestrator/session/store/serialize.mjs +1 -5
  289. package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +12 -13
  290. package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +2 -1
  291. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +1 -1
  292. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +100 -8
  293. package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +59 -11
  294. package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +17 -12
  295. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +14 -20
  296. package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +7 -0
  297. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +70 -14
  298. package/src/runtime/agent/orchestrator/session/store-summary-locations.mjs +2 -1
  299. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +228 -68
  300. package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +3 -3
  301. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +73 -20
  302. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +22 -21
  303. package/src/runtime/agent/orchestrator/session/store.mjs +168 -109
  304. package/src/runtime/agent/orchestrator/session/synthetic-user-envelope.mjs +6 -1
  305. package/src/runtime/agent/orchestrator/session/thinking-replay-recovery.mjs +18 -17
  306. package/src/runtime/agent/orchestrator/session/token-estimate-floors.mjs +134 -22
  307. package/src/runtime/agent/orchestrator/session/token-estimate.mjs +14 -1
  308. package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +32 -39
  309. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +32 -28
  310. package/src/runtime/agent/orchestrator/stall-policy.mjs +12 -10
  311. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +7 -10
  312. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +73 -105
  313. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +16 -8
  314. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +3 -8
  315. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/result-format.mjs +12 -6
  316. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +3 -17
  317. package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +19 -18
  318. package/src/runtime/agent/orchestrator/tools/builtin/device-paths.mjs +5 -2
  319. package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +54 -46
  320. package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +14 -34
  321. package/src/runtime/agent/orchestrator/tools/builtin/git-command-policy.mjs +18 -15
  322. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +96 -84
  323. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +9 -12
  324. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-chunk-merge.mjs +2 -13
  325. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-context-expander.mjs +14 -20
  326. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-output.mjs +6 -14
  327. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +0 -5
  328. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-pattern-fanout.mjs +8 -13
  329. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-request.mjs +2 -10
  330. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-single-file-rescue.mjs +3 -31
  331. package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +19 -4
  332. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +17 -23
  333. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +9 -4
  334. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +7 -15
  335. package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +45 -37
  336. package/src/runtime/agent/orchestrator/tools/builtin/native-search-runner.mjs +0 -4
  337. package/src/runtime/agent/orchestrator/tools/builtin/native-search-transport.mjs +12 -14
  338. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +12 -17
  339. package/src/runtime/agent/orchestrator/tools/builtin/path-locks.mjs +11 -11
  340. package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +1 -2
  341. package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +10 -4
  342. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +11 -21
  343. package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +29 -16
  344. package/src/runtime/agent/orchestrator/tools/builtin/read-image.mjs +13 -34
  345. package/src/runtime/agent/orchestrator/tools/builtin/read-mode-tool.mjs +115 -193
  346. package/src/runtime/agent/orchestrator/tools/builtin/read-office-files.mjs +91 -92
  347. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +20 -38
  348. package/src/runtime/agent/orchestrator/tools/builtin/read-ranges.mjs +4 -8
  349. package/src/runtime/agent/orchestrator/tools/builtin/read-single-fast-paths.mjs +4 -1
  350. package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +5 -13
  351. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +10 -3
  352. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +80 -72
  353. package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +64 -53
  354. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +29 -63
  355. package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +14 -13
  356. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +184 -15
  357. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +34 -32
  358. package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +4 -7
  359. package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +0 -7
  360. package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +4 -15
  361. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +70 -86
  362. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +12 -2
  363. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +17 -14
  364. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +17 -9
  365. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +1 -76
  366. package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +121 -112
  367. package/src/runtime/agent/orchestrator/tools/builtin/tool-output-limit.mjs +10 -6
  368. package/src/runtime/agent/orchestrator/tools/builtin.mjs +27 -26
  369. package/src/runtime/agent/orchestrator/tools/code-graph/aggregate-roots.mjs +2 -11
  370. package/src/runtime/agent/orchestrator/tools/code-graph/ast-calls.mjs +2 -1
  371. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +68 -103
  372. package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +6 -29
  373. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +15 -14
  374. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/federation.mjs +4 -3
  375. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/work.mjs +2 -1
  376. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +2 -11
  377. package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +9 -12
  378. package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +31 -29
  379. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +74 -93
  380. package/src/runtime/agent/orchestrator/tools/code-graph/source-access.mjs +15 -12
  381. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +3 -8
  382. package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +1 -1
  383. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +16 -16
  384. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +6 -7
  385. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +66 -80
  386. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +7 -6
  387. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +15 -11
  388. package/src/runtime/agent/orchestrator/tools/lib/native-spawn-client.mjs +37 -14
  389. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +4 -14
  390. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promotion-results.mjs +1 -1
  391. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +3 -4
  392. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +0 -3
  393. package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +8 -12
  394. package/src/runtime/agent/orchestrator/tools/patch/apply-patch/codex-batch.mjs +62 -74
  395. package/src/runtime/agent/orchestrator/tools/patch/apply-patch/route.mjs +4 -9
  396. package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-report.mjs +2 -2
  397. package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +77 -82
  398. package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +7 -21
  399. package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +20 -54
  400. package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +1 -5
  401. package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +5 -5
  402. package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +12 -10
  403. package/src/runtime/agent/orchestrator/tools/patch/post-patch-excerpts.mjs +4 -11
  404. package/src/runtime/agent/orchestrator/tools/patch/read-redirects.mjs +12 -20
  405. package/src/runtime/agent/orchestrator/tools/patch/section-coalesce.mjs +2 -2
  406. package/src/runtime/agent/orchestrator/tools/patch/sequence/report.mjs +1 -1
  407. package/src/runtime/agent/orchestrator/tools/patch/sequence/units.mjs +8 -9
  408. package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +6 -6
  409. package/src/runtime/agent/orchestrator/tools/patch/v4a-anchors.mjs +1 -1
  410. package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +3 -18
  411. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +15 -9
  412. package/src/runtime/agent/orchestrator/tools/patch-manifest.json +15 -11
  413. package/src/runtime/agent/orchestrator/tools/patch.mjs +6 -8
  414. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +0 -14
  415. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +37 -20
  416. package/src/runtime/agent/orchestrator/tools/shell-policy-danger-target.mjs +14 -22
  417. package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +19 -25
  418. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +48 -44
  419. package/src/runtime/agent/orchestrator/tools/spawn-binary-fetcher.mjs +3 -3
  420. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +15 -11
  421. package/src/runtime/attachments/store.mjs +188 -16
  422. package/src/runtime/browser-bridge/action-schema.mjs +11 -8
  423. package/src/runtime/browser-bridge/client.mjs +1 -0
  424. package/src/runtime/browser-bridge/tool-defs.mjs +3 -0
  425. package/src/runtime/channels/lib/event-queue.mjs +3 -9
  426. package/src/runtime/channels/lib/executor.mjs +11 -29
  427. package/src/runtime/channels/lib/owned-runtime.mjs +0 -6
  428. package/src/runtime/channels/lib/runtime-paths.mjs +17 -82
  429. package/src/runtime/channels/lib/scheduler.mjs +13 -15
  430. package/src/runtime/channels/lib/status-snapshot.mjs +1 -5
  431. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +27 -24
  432. package/src/runtime/channels/lib/voice-transcription.mjs +56 -29
  433. package/src/runtime/channels/lib/webhook/listener-lifecycle.mjs +1 -1
  434. package/src/runtime/channels/lib/webhook/relay-tunnel/leg-heartbeat.mjs +1 -2
  435. package/src/runtime/channels/lib/webhook/relay-tunnel/local-forward.mjs +1 -2
  436. package/src/runtime/channels/lib/webhook/relay-tunnel.mjs +13 -4
  437. package/src/runtime/channels/lib/webhook/request-handler.mjs +16 -6
  438. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +1 -1
  439. package/src/runtime/channels/lib/webhook/signature.mjs +1 -1
  440. package/src/runtime/channels/lib/webhook.mjs +3 -13
  441. package/src/runtime/channels/lib/whisper-port.mjs +36 -15
  442. package/src/runtime/channels/lib/whisper-server.mjs +18 -28
  443. package/src/runtime/channels/lib/worker-ipc.mjs +2 -3
  444. package/src/runtime/channels/lib/worker-main.mjs +0 -11
  445. package/src/runtime/computer-bridge/action-schema.mjs +38 -18
  446. package/src/runtime/computer-bridge/actions.mjs +2 -0
  447. package/src/runtime/computer-bridge/client.mjs +134 -2
  448. package/src/runtime/computer-bridge/core-actions.mjs +14 -6
  449. package/src/runtime/computer-bridge/error-recovery.mjs +17 -0
  450. package/src/runtime/computer-bridge/pending-continuation.mjs +9 -4
  451. package/src/runtime/computer-bridge/tool-defs.mjs +4 -4
  452. package/src/runtime/github/contract.mjs +30 -30
  453. package/src/runtime/local-provider/context-settings.mjs +3 -1
  454. package/src/runtime/local-provider/data/manifest.json +2 -1
  455. package/src/runtime/local-provider/hugging-face.mjs +29 -25
  456. package/src/runtime/local-provider/managed-runtime.mjs +0 -2
  457. package/src/runtime/local-provider/registered-models.mjs +7 -1
  458. package/src/runtime/media/adapters/xai-media.mjs +14 -2
  459. package/src/runtime/media/catalog.mjs +8 -7
  460. package/src/runtime/media/jobs.mjs +63 -61
  461. package/src/runtime/media/lanes.mjs +2 -2
  462. package/src/runtime/media/store.mjs +53 -6
  463. package/src/runtime/media/tool.mjs +5 -3
  464. package/src/runtime/memory/index.mjs +12 -9
  465. package/src/runtime/memory/lib/agent-ipc.mjs +1 -5
  466. package/src/runtime/memory/lib/cycle1/cycle1-plan.mjs +2 -2
  467. package/src/runtime/memory/lib/embedding-provider.mjs +16 -20
  468. package/src/runtime/memory/lib/embedding-worker.mjs +19 -11
  469. package/src/runtime/memory/lib/http-router/session-routes.mjs +25 -4
  470. package/src/runtime/memory/lib/http-wire.mjs +3 -2
  471. package/src/runtime/memory/lib/ingest/transcript-rows.mjs +1 -1
  472. package/src/runtime/memory/lib/ingest/transcript-tail.mjs +3 -3
  473. package/src/runtime/memory/lib/ingest/transcript-watcher.mjs +2 -10
  474. package/src/runtime/memory/lib/light-ko-morph.mjs +43 -41
  475. package/src/runtime/memory/lib/memory-action-handlers/cycle-actions.mjs +1 -1
  476. package/src/runtime/memory/lib/memory-action-handlers/cycle-backfill-action.mjs +8 -9
  477. package/src/runtime/memory/lib/memory-action-handlers/cycle-rebuild-action.mjs +3 -3
  478. package/src/runtime/memory/lib/memory-cycle.mjs +0 -1
  479. package/src/runtime/memory/lib/memory-cycle1.mjs +3 -3
  480. package/src/runtime/memory/lib/memory-daemon-lifecycle.mjs +4 -12
  481. package/src/runtime/memory/lib/memory-embed.mjs +1 -8
  482. package/src/runtime/memory/lib/memory-ops-policy.mjs +4 -6
  483. package/src/runtime/memory/lib/memory-port-advertiser.mjs +3 -9
  484. package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +8 -9
  485. package/src/runtime/memory/lib/memory-schema/score-params.mjs +1 -1
  486. package/src/runtime/memory/lib/memory-score.mjs +0 -13
  487. package/src/runtime/memory/lib/memory-session-merge.mjs +2 -16
  488. package/src/runtime/memory/lib/memory.mjs +27 -19
  489. package/src/runtime/memory/lib/pg/adapter.mjs +53 -69
  490. package/src/runtime/memory/lib/pg/process.mjs +3 -4
  491. package/src/runtime/memory/lib/pg/supervisor.mjs +7 -9
  492. package/src/runtime/memory/lib/query-handlers.mjs +2 -1
  493. package/src/runtime/memory/lib/query-hybrid-search.mjs +8 -23
  494. package/src/runtime/memory/lib/query-ranking.mjs +8 -11
  495. package/src/runtime/memory/lib/recall-embedding-readiness.mjs +3 -3
  496. package/src/runtime/memory/lib/recall-event-context.mjs +1 -1
  497. package/src/runtime/memory/lib/recall-hybrid/hybrid-sql.mjs +2 -2
  498. package/src/runtime/memory/lib/recall-hybrid/plan.mjs +2 -9
  499. package/src/runtime/memory/lib/recall-order.mjs +12 -0
  500. package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -14
  501. package/src/runtime/memory/lib/session-ingest-runtime.mjs +2 -5
  502. package/src/runtime/memory/lib/trace-store/agent-call-rows.mjs +13 -5
  503. package/src/runtime/memory/lib/trace-store.mjs +15 -28
  504. package/src/runtime/memory/tool-defs.mjs +1 -1
  505. package/src/runtime/office/README.md +22 -3
  506. package/src/runtime/office/authoring/pptx-author-action.mjs +53 -11
  507. package/src/runtime/office/authoring/pptx-html-build.mjs +535 -0
  508. package/src/runtime/office/authoring/pptx-html-geometry.mjs +401 -0
  509. package/src/runtime/office/authoring/pptx-html-measure.mjs +587 -0
  510. package/src/runtime/office/authoring/pptx-html-runner.mjs +256 -0
  511. package/src/runtime/office/authoring/pptx-receipt.mjs +87 -28
  512. package/src/runtime/office/authoring/pptx-review-artifacts.mjs +17 -4
  513. package/src/runtime/office/authoring/pptx-script-normalize.mjs +211 -13
  514. package/src/runtime/office/bench/benchmark.mjs +2 -6
  515. package/src/runtime/office/bench/contract-benchmark.mjs +2 -1
  516. package/src/runtime/office/bench/polish-benchmark.mjs +3 -1
  517. package/src/runtime/office/bench/quality-live-benchmark.mjs +1 -3
  518. package/src/runtime/office/capabilities-aliases.mjs +16 -3
  519. package/src/runtime/office/capabilities-catalog.mjs +32 -5
  520. package/src/runtime/office/capabilities-signatures.mjs +150 -42
  521. package/src/runtime/office/capabilities.mjs +78 -22
  522. package/src/runtime/office/com/com-adapter.mjs +23 -24
  523. package/src/runtime/office/com/office-com-host.ps1 +2725 -521
  524. package/src/runtime/office/com/office-com-session-host.ps1 +117 -57
  525. package/src/runtime/office/com/office-word-formatting.ps1 +68 -10
  526. package/src/runtime/office/core/docx-toc-pages.mjs +23 -0
  527. package/src/runtime/office/core/office-actions-batch.mjs +327 -20
  528. package/src/runtime/office/core/office-actions-inspect.mjs +98 -50
  529. package/src/runtime/office/core/office-actions-open.mjs +9 -0
  530. package/src/runtime/office/core/office-actions-read.mjs +21 -2
  531. package/src/runtime/office/core/office-core.mjs +849 -12
  532. package/src/runtime/office/core/office-documents.mjs +2 -4
  533. package/src/runtime/office/core/office-finalize/commit-stage.mjs +3 -0
  534. package/src/runtime/office/core/office-finalize/review-stage.mjs +11 -2
  535. package/src/runtime/office/core/office-qa/fix-operations.mjs +8 -3
  536. package/src/runtime/office/core/office-qa/preview-stage.mjs +2 -1
  537. package/src/runtime/office/core/office-recalculation.mjs +1 -5
  538. package/src/runtime/office/core/office-render-preview.mjs +13 -1
  539. package/src/runtime/office/core/office-sessionless-actions.mjs +7 -1
  540. package/src/runtime/office/core/office-sessions.mjs +255 -9
  541. package/src/runtime/office/core/office-transactions.mjs +4 -15
  542. package/src/runtime/office/core/pptx-page-cache.mjs +1 -2
  543. package/src/runtime/office/core/snapshot-contract.mjs +4 -2
  544. package/src/runtime/office/core/tabular.mjs +21 -7
  545. package/src/runtime/office/design/composition-system.mjs +1 -1
  546. package/src/runtime/office/design/content-model.mjs +2 -5
  547. package/src/runtime/office/design/design-art-direction.mjs +2 -5
  548. package/src/runtime/office/design/design-discipline.mjs +18 -0
  549. package/src/runtime/office/design/design-system.mjs +13 -6
  550. package/src/runtime/office/design/design-tokens.mjs +1 -1
  551. package/src/runtime/office/design/docx/design-docx/front-matter.mjs +17 -2
  552. package/src/runtime/office/design/docx/design-docx/section.mjs +95 -15
  553. package/src/runtime/office/design/docx/design-docx/writer.mjs +2 -1
  554. package/src/runtime/office/design/docx/design-docx-components.mjs +86 -27
  555. package/src/runtime/office/design/docx/design-docx.mjs +5 -1
  556. package/src/runtime/office/design/docx/document-typography.mjs +36 -4
  557. package/src/runtime/office/design/library/design-library-core.mjs +8 -7
  558. package/src/runtime/office/design/library/design-library.mjs +39 -30
  559. package/src/runtime/office/design/library/design-template-fill.mjs +119 -6
  560. package/src/runtime/office/design/library/design-template-index.mjs +1 -2
  561. package/src/runtime/office/design/library/design-template-induct.mjs +74 -6
  562. package/src/runtime/office/design/library/design-template-inspect.mjs +8 -1
  563. package/src/runtime/office/design/library/templates/mixdog-executive.pptx +0 -0
  564. package/src/runtime/office/design/xlsx/design-xlsx-components.mjs +94 -29
  565. package/src/runtime/office/design/xlsx/design-xlsx.mjs +494 -83
  566. package/src/runtime/office/index.mjs +4 -11
  567. package/src/runtime/office/office-test-support.mjs +7 -0
  568. package/src/runtime/office/pdf/pdf-adapter.mjs +19 -8
  569. package/src/runtime/office/pdf/pdf-batch-content.mjs +17 -9
  570. package/src/runtime/office/pdf/pdf-batch-structure.mjs +171 -7
  571. package/src/runtime/office/pdf/pdf-document.mjs +1 -1
  572. package/src/runtime/office/pdf/pdf-draw.mjs +14 -29
  573. package/src/runtime/office/pdf/pdf-fonts.mjs +94 -28
  574. package/src/runtime/office/pdf/pdf-forms.mjs +45 -8
  575. package/src/runtime/office/pdf/pdf-ocr.mjs +16 -11
  576. package/src/runtime/office/pdf/pdf-render.mjs +75 -72
  577. package/src/runtime/office/pdf/pdf-search.mjs +3 -4
  578. package/src/runtime/office/pdf/pdf-writer.mjs +577 -108
  579. package/src/runtime/office/portable/docx-formatting.mjs +5 -0
  580. package/src/runtime/office/portable/docx-revisions.mjs +4 -5
  581. package/src/runtime/office/portable/docx-tracked-edits.mjs +45 -9
  582. package/src/runtime/office/portable/font-provisioner.mjs +28 -17
  583. package/src/runtime/office/portable/placeholder-scan.mjs +51 -0
  584. package/src/runtime/office/portable/portable-cells.mjs +52 -3
  585. package/src/runtime/office/portable/portable-chart.mjs +133 -24
  586. package/src/runtime/office/portable/portable-docx-edits.mjs +211 -63
  587. package/src/runtime/office/portable/portable-docx-operations.mjs +240 -61
  588. package/src/runtime/office/portable/portable-docx-parts.mjs +210 -35
  589. package/src/runtime/office/portable/portable-docx-styles.mjs +67 -0
  590. package/src/runtime/office/portable/portable-docx-xml.mjs +333 -35
  591. package/src/runtime/office/portable/portable-docx.mjs +17 -1
  592. package/src/runtime/office/portable/portable-opc.mjs +26 -5
  593. package/src/runtime/office/portable/portable-package.mjs +22 -3
  594. package/src/runtime/office/portable/portable-pivot.mjs +84 -19
  595. package/src/runtime/office/portable/portable-pptx-chart.mjs +40 -8
  596. package/src/runtime/office/portable/portable-pptx-charts.mjs +267 -22
  597. package/src/runtime/office/portable/portable-pptx-core.mjs +101 -14
  598. package/src/runtime/office/portable/portable-pptx-deck.mjs +12 -3
  599. package/src/runtime/office/portable/portable-pptx-package.mjs +81 -16
  600. package/src/runtime/office/portable/portable-pptx-shapes.mjs +154 -49
  601. package/src/runtime/office/portable/portable-pptx.mjs +3 -1
  602. package/src/runtime/office/portable/portable-sheet-audits.mjs +116 -51
  603. package/src/runtime/office/portable/portable-sheet-page.mjs +128 -29
  604. package/src/runtime/office/portable/portable-sheet-styles.mjs +35 -4
  605. package/src/runtime/office/portable/portable-sheet-xml.mjs +57 -8
  606. package/src/runtime/office/portable/portable-slide-shapes.mjs +211 -13
  607. package/src/runtime/office/portable/portable-snapshot-docx.mjs +150 -5
  608. package/src/runtime/office/portable/portable-snapshot-pptx.mjs +35 -4
  609. package/src/runtime/office/portable/portable-snapshot-shared.mjs +5 -3
  610. package/src/runtime/office/portable/portable-snapshot-xlsx.mjs +35 -7
  611. package/src/runtime/office/portable/portable-soffice.mjs +132 -118
  612. package/src/runtime/office/portable/portable-validation-package.mjs +115 -4
  613. package/src/runtime/office/portable/portable-validation.mjs +208 -106
  614. package/src/runtime/office/portable/portable-xlsx-cell-values.mjs +0 -2
  615. package/src/runtime/office/portable/portable-xlsx-charts.mjs +115 -27
  616. package/src/runtime/office/portable/portable-xlsx-drawings.mjs +32 -27
  617. package/src/runtime/office/portable/portable-xlsx-operations.mjs +19 -13
  618. package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +76 -2
  619. package/src/runtime/office/portable/portable-xlsx-range-layout.mjs +97 -25
  620. package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +727 -0
  621. package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +228 -72
  622. package/src/runtime/office/portable/portable-xlsx.mjs +5 -2
  623. package/src/runtime/office/portable/portable-xml.mjs +97 -2
  624. package/src/runtime/office/portable/pptx-table-fit.mjs +78 -0
  625. package/src/runtime/office/portable/text-metrics.mjs +102 -24
  626. package/src/runtime/office/portable/xlsx-assertions.mjs +142 -121
  627. package/src/runtime/office/portable/xlsx-audit-support.mjs +15 -12
  628. package/src/runtime/office/portable/xlsx-contract.mjs +52 -9
  629. package/src/runtime/office/portable/xlsx-formula-audit.mjs +36 -27
  630. package/src/runtime/office/portable/xlsx-formula-engine.mjs +38 -15
  631. package/src/runtime/office/portable/xlsx-recalculate.mjs +15 -17
  632. package/src/runtime/office/portable/xlsx-sheet-hygiene.mjs +38 -5
  633. package/src/runtime/office/quality/assurance-checklist.mjs +5 -2
  634. package/src/runtime/office/quality/assurance-structure-docx.mjs +13 -1
  635. package/src/runtime/office/quality/assurance-structure-pptx.mjs +77 -4
  636. package/src/runtime/office/quality/assurance-structure-xlsx.mjs +70 -18
  637. package/src/runtime/office/quality/design-aesthetics-metrics.mjs +1 -1
  638. package/src/runtime/office/quality/design-deck-diversity.mjs +6 -19
  639. package/src/runtime/office/quality/design-review-authored.mjs +25 -8
  640. package/src/runtime/office/quality/design-review-critique.mjs +34 -30
  641. package/src/runtime/office/quality/design-review.mjs +5 -8
  642. package/src/runtime/office/quality/inline-audit.mjs +40 -3
  643. package/src/runtime/office/quality/quality-pipeline.mjs +8 -0
  644. package/src/runtime/office/quality/quality-score.mjs +1 -0
  645. package/src/runtime/office/shared/column-alignments.mjs +30 -0
  646. package/src/runtime/office/shared/column-widths.mjs +45 -0
  647. package/src/runtime/office/shared/korean-particles.mjs +49 -0
  648. package/src/runtime/office/shared/labels.mjs +2 -0
  649. package/src/runtime/office/shared/line-breaks.mjs +34 -0
  650. package/src/runtime/office/shared/page-sizes.mjs +30 -0
  651. package/src/runtime/office/tool-defs.mjs +6 -4
  652. package/src/runtime/shared/agent-reap-state.mjs +8 -4
  653. package/src/runtime/shared/atomic-file.mjs +37 -52
  654. package/src/runtime/shared/background-tasks.mjs +22 -19
  655. package/src/runtime/shared/browser-launch.mjs +90 -0
  656. package/src/runtime/shared/buffered-appender.mjs +1 -2
  657. package/src/runtime/shared/child-spawn-gate.mjs +11 -15
  658. package/src/runtime/shared/child-spawn-remote.mjs +6 -8
  659. package/src/runtime/shared/clean.mjs +13 -0
  660. package/src/runtime/shared/compact-event-label.mjs +11 -0
  661. package/src/runtime/shared/config.mjs +1 -2
  662. package/src/runtime/shared/developer-options.mjs +88 -0
  663. package/src/runtime/shared/edit-tool-dialect.mjs +8 -8
  664. package/src/runtime/shared/err-text.mjs +12 -12
  665. package/src/runtime/shared/file-lock.mjs +260 -126
  666. package/src/runtime/shared/git-runner-worker.mjs +79 -0
  667. package/src/runtime/shared/git-runner.mjs +20 -0
  668. package/src/runtime/shared/idle-gc.mjs +30 -2
  669. package/src/runtime/shared/inline-file-kind.mjs +3 -1
  670. package/src/runtime/shared/listener-leak-warning.mjs +15 -0
  671. package/src/runtime/shared/llm/cost.mjs +15 -11
  672. package/src/runtime/shared/llm/usage-accounting.mjs +15 -6
  673. package/src/runtime/shared/llm/usage-ledger-quota.mjs +759 -0
  674. package/src/runtime/shared/llm/usage-ledger-repair.mjs +195 -98
  675. package/src/runtime/shared/llm/usage-ledger-rollup.mjs +6 -1
  676. package/src/runtime/shared/llm/usage-ledger-worker.mjs +72 -0
  677. package/src/runtime/shared/llm/usage-ledger.mjs +215 -3
  678. package/src/runtime/shared/llm/usage-log.mjs +13 -17
  679. package/src/runtime/shared/llm/usage-pricing-refresh.mjs +114 -16
  680. package/src/runtime/shared/llm/usage-rollup.mjs +4 -77
  681. package/src/runtime/shared/llm/usage-session-history.mjs +1 -231
  682. package/src/runtime/shared/llm/usage-test-support.mjs +33 -0
  683. package/src/runtime/shared/native-asset.mjs +22 -2
  684. package/src/runtime/shared/notify-trace.mjs +6 -3
  685. package/src/runtime/shared/object.mjs +7 -0
  686. package/src/runtime/shared/plugin-metadata.mjs +7 -10
  687. package/src/runtime/shared/plugin-paths.mjs +24 -2
  688. package/src/runtime/shared/pristine-execution.mjs +9 -10
  689. package/src/runtime/shared/process-shutdown.mjs +7 -6
  690. package/src/runtime/shared/read-row-numbers.mjs +63 -0
  691. package/src/runtime/shared/resource-admission.mjs +19 -23
  692. package/src/runtime/shared/service-discovery.mjs +3 -7
  693. package/src/runtime/shared/skill-document.mjs +5 -0
  694. package/src/runtime/shared/staged-update.mjs +3 -5
  695. package/src/runtime/shared/tool-card-model/agent-surface.mjs +15 -14
  696. package/src/runtime/shared/tool-card-model/background-task.mjs +4 -9
  697. package/src/runtime/shared/tool-card-model/displayed-result.mjs +3 -1
  698. package/src/runtime/shared/tool-card-model/inline-text.mjs +1 -3
  699. package/src/runtime/shared/tool-card-model/terminal-status.mjs +10 -8
  700. package/src/runtime/shared/tool-execution-contract.mjs +5 -11
  701. package/src/runtime/shared/tool-primitives.mjs +19 -42
  702. package/src/runtime/shared/tool-result-summary.mjs +7 -4
  703. package/src/runtime/shared/tool-surface.mjs +4 -5
  704. package/src/runtime/shared/tool-work-units.mjs +19 -27
  705. package/src/runtime/shared/transcript-writer/rotation.mjs +11 -14
  706. package/src/runtime/shared/turn-snapshot-store.mjs +14 -18
  707. package/src/runtime/shared/turn-snapshot.mjs +65 -62
  708. package/src/runtime/shared/turn-worktree-snapshot.mjs +12 -84
  709. package/src/runtime/shared/update-checker.mjs +3 -7
  710. package/src/runtime/shared/user-cwd.mjs +15 -23
  711. package/src/runtime/shared/user-data-guard.mjs +4 -4
  712. package/src/runtime/shared/worker-requests.mjs +114 -0
  713. package/src/runtime/tidy/apply.mjs +2 -2
  714. package/src/runtime/tidy/core-install.mjs +2 -3
  715. package/src/runtime/tidy/engines-manifest.json +6 -0
  716. package/src/runtime/tidy/history-comment.mjs +5 -5
  717. package/src/runtime/tidy/install.mjs +2 -2
  718. package/src/runtime/tidy/languages.mjs +13 -11
  719. package/src/runtime/tidy/process.mjs +2 -2
  720. package/src/runtime/tidy/report.mjs +141 -42
  721. package/src/runtime/tidy/resolve.mjs +14 -11
  722. package/src/runtime/tidy/runners/air.mjs +2 -2
  723. package/src/runtime/tidy/runners/biome.mjs +22 -5
  724. package/src/runtime/tidy/runners/clang-format.mjs +2 -2
  725. package/src/runtime/tidy/runners/dotnet-format.mjs +13 -11
  726. package/src/runtime/tidy/runners/dprint.mjs +2 -2
  727. package/src/runtime/tidy/runners/index.mjs +0 -2
  728. package/src/runtime/tidy/runners/mago.mjs +11 -9
  729. package/src/runtime/tidy/runners/ruff.mjs +2 -2
  730. package/src/runtime/tidy/runners/rustfmt.mjs +10 -9
  731. package/src/runtime/tidy/runners/shared.mjs +18 -2
  732. package/src/runtime/tidy/runners/shellcheck.mjs +1 -8
  733. package/src/runtime/tidy/runners/stylua.mjs +2 -2
  734. package/src/runtime/tidy/shadow.mjs +2 -10
  735. package/src/runtime/tidy/structural.mjs +5 -5
  736. package/src/runtime/tidy/tool-defs.mjs +3 -3
  737. package/src/runtime/tidy/worktree.mjs +1 -6
  738. package/src/runtime/web-search/index.mjs +134 -98
  739. package/src/runtime/web-search/lib/http-fetch.mjs +1 -1
  740. package/src/runtime/web-search/lib/ssrf-guard.mjs +49 -2
  741. package/src/runtime/web-search/lib/web-tools.mjs +7 -97
  742. package/src/runtime/web-search/tool-defs.mjs +2 -1
  743. package/src/session-runtime/boot/apis.mjs +29 -6
  744. package/src/session-runtime/boot/facade.mjs +2 -0
  745. package/src/session-runtime/boot/infrastructure.mjs +2 -7
  746. package/src/session-runtime/boot/providers.mjs +0 -2
  747. package/src/session-runtime/boot/session.mjs +0 -1
  748. package/src/session-runtime/config-lifecycle/config-writers.mjs +10 -11
  749. package/src/session-runtime/context-inspection.mjs +14 -9
  750. package/src/session-runtime/context-status-cache.mjs +10 -50
  751. package/src/session-runtime/context-status.mjs +3 -15
  752. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +1 -4
  753. package/src/session-runtime/cwd-plugins.mjs +7 -8
  754. package/src/session-runtime/extension-scopes.mjs +2 -3
  755. package/src/session-runtime/fs-utils.mjs +1 -2
  756. package/src/session-runtime/goal-control.mjs +3 -4
  757. package/src/session-runtime/goal-deadlines.mjs +13 -24
  758. package/src/session-runtime/goal-mutations.mjs +6 -16
  759. package/src/session-runtime/goal-reminder.mjs +4 -4
  760. package/src/session-runtime/goal-runtime.mjs +5 -8
  761. package/src/session-runtime/goal-state.mjs +33 -1
  762. package/src/session-runtime/goal-storage.mjs +7 -2
  763. package/src/session-runtime/goal-tasks.mjs +7 -21
  764. package/src/session-runtime/goal-text.mjs +17 -7
  765. package/src/session-runtime/goal-tool-defs.mjs +11 -6
  766. package/src/session-runtime/goal-tool-exec.mjs +4 -10
  767. package/src/session-runtime/goal-turns.mjs +21 -4
  768. package/src/session-runtime/hook-payload.mjs +2 -1
  769. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +4 -4
  770. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +0 -2
  771. package/src/session-runtime/lifecycle/session-switch/resume.mjs +3 -6
  772. package/src/session-runtime/lifecycle/teardown.mjs +27 -3
  773. package/src/session-runtime/local-provider-settings.mjs +5 -1
  774. package/src/session-runtime/mcp-glue/server-catalog.mjs +2 -2
  775. package/src/session-runtime/mcp-glue/server-input.mjs +11 -14
  776. package/src/session-runtime/mcp-glue.mjs +0 -2
  777. package/src/session-runtime/media-api.mjs +3 -0
  778. package/src/session-runtime/model-capabilities.mjs +2 -6
  779. package/src/session-runtime/model-route/web-search-route.mjs +2 -4
  780. package/src/session-runtime/native-web-search/routes.mjs +2 -10
  781. package/src/session-runtime/notification-bus.mjs +3 -1
  782. package/src/session-runtime/plugin-mcp.mjs +13 -10
  783. package/src/session-runtime/prewarm/channel-start.mjs +6 -1
  784. package/src/session-runtime/provider-models.mjs +7 -1
  785. package/src/session-runtime/provider-readiness.mjs +19 -22
  786. package/src/session-runtime/provider-request-snapshot.mjs +220 -103
  787. package/src/session-runtime/provider-usage.mjs +81 -14
  788. package/src/session-runtime/quick-web-search-models.mjs +6 -6
  789. package/src/session-runtime/resource-mcp-api.mjs +1 -6
  790. package/src/session-runtime/resource-plugins-api.mjs +1 -2
  791. package/src/session-runtime/runtime-facade.mjs +3 -1
  792. package/src/session-runtime/runtime-modules.mjs +1 -0
  793. package/src/session-runtime/self-update.mjs +11 -13
  794. package/src/session-runtime/session-create/materialize.mjs +4 -10
  795. package/src/session-runtime/session-lifecycle.mjs +0 -2
  796. package/src/session-runtime/session-route-policy.mjs +2 -1
  797. package/src/session-runtime/session-text.mjs +6 -5
  798. package/src/session-runtime/session-title.mjs +6 -6
  799. package/src/session-runtime/settings-api.mjs +5 -3
  800. package/src/session-runtime/settings-developer-api.mjs +22 -0
  801. package/src/session-runtime/setup-tool/executor.mjs +16 -5
  802. package/src/session-runtime/setup-tool/ui-requests.mjs +14 -4
  803. package/src/session-runtime/skills-api.mjs +5 -5
  804. package/src/session-runtime/tool-catalog-data.mjs +4 -3
  805. package/src/session-runtime/tool-catalog.mjs +43 -50
  806. package/src/session-runtime/tool-defs.mjs +1 -1
  807. package/src/session-runtime/turn/turn-run/snapshot-tracker.mjs +6 -2
  808. package/src/session-runtime/turn/turn-run/transcript.mjs +1 -2
  809. package/src/session-runtime/usage-stats-api.mjs +75 -4
  810. package/src/session-runtime/workflow/agents.mjs +44 -24
  811. package/src/session-runtime/workflow/context.mjs +3 -1
  812. package/src/session-runtime/workflow/packs.mjs +49 -13
  813. package/src/session-runtime/workflow/shared-scan-cache.mjs +83 -0
  814. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +2 -10
  815. package/src/session-runtime/workflow-agents-api/onboarding.mjs +7 -1
  816. package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +2 -7
  817. package/src/standalone/agent-task-status.mjs +0 -17
  818. package/src/standalone/agent-tool/close-flow.mjs +2 -4
  819. package/src/standalone/agent-tool/execute-send.mjs +2 -13
  820. package/src/standalone/agent-tool/helpers.mjs +21 -18
  821. package/src/standalone/agent-tool/job-task-reconcile.mjs +14 -2
  822. package/src/standalone/agent-tool/job-views/session-progress.mjs +20 -0
  823. package/src/standalone/agent-tool/lead-worker-index/row-settlement.mjs +6 -25
  824. package/src/standalone/agent-tool/provider-init.mjs +2 -7
  825. package/src/standalone/agent-tool/render.mjs +3 -8
  826. package/src/standalone/agent-tool/send-flow.mjs +10 -9
  827. package/src/standalone/agent-tool/spawn-flow/spawn-run.mjs +10 -9
  828. package/src/standalone/agent-tool/tag-registry.mjs +1 -0
  829. package/src/standalone/agent-tool/terminal-reaper/tombstones.mjs +54 -5
  830. package/src/standalone/agent-tool/worker-index/mutation-batch.mjs +1 -5
  831. package/src/standalone/agent-tool.mjs +3 -2
  832. package/src/standalone/agent-watchdog-registry.mjs +28 -17
  833. package/src/standalone/channel-admin.mjs +64 -10
  834. package/src/standalone/channel-binding.mjs +6 -10
  835. package/src/standalone/channel-client/notify-stream.mjs +4 -11
  836. package/src/standalone/channel-client/reconnect.mjs +1 -3
  837. package/src/standalone/channel-transport/call-dispatch.mjs +2 -4
  838. package/src/standalone/channel-transport/client-registry/client-grace.mjs +1 -3
  839. package/src/standalone/channel-transport/client-registry/registration-replays.mjs +3 -7
  840. package/src/standalone/channel-transport/http-routes.mjs +2 -1
  841. package/src/standalone/channel-transport/remote-pointer.mjs +7 -10
  842. package/src/standalone/channel-worker/daemon-attach.mjs +1 -1
  843. package/src/standalone/channel-worker/daemon-spawn.mjs +14 -52
  844. package/src/standalone/daemon-candidate.mjs +81 -0
  845. package/src/standalone/daemon-channels-loader.mjs +4 -4
  846. package/src/standalone/daemon-lag-profiler.mjs +229 -0
  847. package/src/standalone/daemon-stored-session-views.mjs +10 -0
  848. package/src/standalone/daemon.mjs +44 -0
  849. package/src/standalone/folder-dialog.mjs +8 -3
  850. package/src/standalone/hook-bus/command-handler.mjs +1 -1
  851. package/src/standalone/hook-bus/config.mjs +27 -22
  852. package/src/standalone/hook-bus/handlers.mjs +40 -39
  853. package/src/standalone/memory-runtime-proxy/calls.mjs +7 -0
  854. package/src/standalone/memory-runtime-proxy/start.mjs +4 -9
  855. package/src/standalone/memory-runtime-proxy.mjs +1 -0
  856. package/src/standalone/provider-admin.mjs +83 -74
  857. package/src/standalone/seeds.mjs +1 -6
  858. package/src/standalone/session-client.mjs +32 -78
  859. package/src/standalone/session-frame-stream.mjs +43 -9
  860. package/src/standalone/session-protocol.mjs +5 -0
  861. package/src/standalone/session-proxy/projection.mjs +2 -11
  862. package/src/standalone/session-proxy/transport-calls.mjs +2 -5
  863. package/src/standalone/session-proxy.mjs +1 -4
  864. package/src/standalone/session-runtime-host.mjs +29 -46
  865. package/src/standalone/session-runtime-proxy.mjs +5 -5
  866. package/src/standalone/session-runtime-shard-router.mjs +1 -2
  867. package/src/standalone/session-service/agent-tree/agent-rehydrate.mjs +1 -1
  868. package/src/standalone/session-service/agent-tree/agent-turns.mjs +19 -0
  869. package/src/standalone/session-service/agent-tree.mjs +12 -1
  870. package/src/standalone/session-service/projection/address-index.mjs +5 -1
  871. package/src/standalone/session-service/projection/frames.mjs +24 -11
  872. package/src/standalone/session-service/projection/revisions.mjs +52 -16
  873. package/src/standalone/session-service/projection/transcript-window.mjs +258 -0
  874. package/src/standalone/session-service/projection.mjs +12 -2
  875. package/src/standalone/session-service/retention.mjs +44 -6
  876. package/src/standalone/session-service/session-calls/session-views.mjs +80 -16
  877. package/src/standalone/session-service/session-calls.mjs +3 -2
  878. package/src/standalone/session-service/stored-reader.mjs +107 -10
  879. package/src/standalone/session-service/viewers.mjs +73 -7
  880. package/src/standalone/session-service.mjs +9 -0
  881. package/src/standalone/session-state-patch.d.mts +7 -0
  882. package/src/standalone/session-state-patch.mjs +37 -9
  883. package/src/standalone/session-transport/call-lanes.mjs +2 -4
  884. package/src/standalone/usage-dashboard-model.mjs +2 -2
  885. package/src/standalone/usage-dashboard.mjs +1 -4
  886. package/src/tui/App.jsx +0 -1
  887. package/src/tui/app/app-format.mjs +3 -12
  888. package/src/tui/app/app-view/floating-panel.jsx +112 -109
  889. package/src/tui/app/app-view/transcript-viewport/trailing-bands.jsx +6 -12
  890. package/src/tui/app/app-view.jsx +47 -54
  891. package/src/tui/app/clipboard.mjs +16 -2
  892. package/src/tui/app/create-app-pickers.mjs +3 -1
  893. package/src/tui/app/doctor.mjs +157 -51
  894. package/src/tui/app/extension-pickers/skills-pickers/skill-items.mjs +1 -1
  895. package/src/tui/app/maintenance-pickers/developer-picker.mjs +168 -0
  896. package/src/tui/app/maintenance-pickers.mjs +12 -2
  897. package/src/tui/app/model-options.mjs +59 -66
  898. package/src/tui/app/model-picker/model-footer.mjs +21 -18
  899. package/src/tui/app/model-picker/route-selection/effort.mjs +2 -3
  900. package/src/tui/app/mouse-input/button-gestures.mjs +380 -0
  901. package/src/tui/app/onboarding/models-step.mjs +1 -1
  902. package/src/tui/app/onboarding/role-model-picker.mjs +2 -2
  903. package/src/tui/app/onboarding/step-data.mjs +1 -1
  904. package/src/tui/app/project-picker/create-flow.mjs +3 -3
  905. package/src/tui/app/project-picker/picker-state.mjs +1 -5
  906. package/src/tui/app/prompt-submit/provider-prompts.mjs +7 -2
  907. package/src/tui/app/provider-setup/provider-items.mjs +2 -6
  908. package/src/tui/app/provider-usable.mjs +16 -0
  909. package/src/tui/app/settings-picker/settings-navigation.mjs +1 -0
  910. package/src/tui/app/settings-picker/settings-rows.mjs +6 -0
  911. package/src/tui/app/settings-picker/settings-toggles.mjs +21 -14
  912. package/src/tui/app/shell-layout/surfaces.mjs +1 -14
  913. package/src/tui/app/shell-layout/viewport.mjs +1 -2
  914. package/src/tui/app/slash-dispatch/session-commands.mjs +2 -5
  915. package/src/tui/app/transcript-anchor-sync.mjs +1 -1
  916. package/src/tui/app/transcript-row-estimate.mjs +25 -32
  917. package/src/tui/app/transcript-window.mjs +2 -4
  918. package/src/tui/app/use-global-key-input.mjs +2 -8
  919. package/src/tui/app/use-mouse-input.mjs +30 -412
  920. package/src/tui/app/use-prompt-draft-flow.mjs +3 -3
  921. package/src/tui/app/use-prompt-handlers.mjs +1 -0
  922. package/src/tui/app/use-selection-focus.mjs +3 -9
  923. package/src/tui/app/use-selection-geometry.mjs +4 -4
  924. package/src/tui/app/use-selection-paint.mjs +1 -1
  925. package/src/tui/app/use-transcript-activity.mjs +31 -37
  926. package/src/tui/app/use-transcript-scroll.mjs +2 -4
  927. package/src/tui/app/use-transcript-window/selection-shift.mjs +2 -2
  928. package/src/tui/app/use-transcript-window/visible-items.mjs +0 -2
  929. package/src/tui/app/use-welcome-prompt-hint.mjs +11 -2
  930. package/src/tui/components/ContextPanel.jsx +8 -3
  931. package/src/tui/components/ItemRightHintOverprint.jsx +15 -13
  932. package/src/tui/components/Markdown.jsx +5 -20
  933. package/src/tui/components/MarkdownTable.jsx +4 -9
  934. package/src/tui/components/Message.jsx +1 -1
  935. package/src/tui/components/Picker.jsx +23 -25
  936. package/src/tui/components/PromptInput.jsx +35 -61
  937. package/src/tui/components/SlashCommandPalette.jsx +1 -1
  938. package/src/tui/components/Spinner.jsx +5 -6
  939. package/src/tui/components/StatusLine.jsx +34 -49
  940. package/src/tui/components/TextEntryPanel.jsx +24 -68
  941. package/src/tui/components/ToolExecution.jsx +8 -17
  942. package/src/tui/components/TurnDone.jsx +4 -17
  943. package/src/tui/components/UsagePanel.jsx +7 -31
  944. package/src/tui/components/prompt-input/cursor-anchor.mjs +6 -5
  945. package/src/tui/components/prompt-input/edit-helpers.mjs +46 -2
  946. package/src/tui/components/prompt-input/key-signals.mjs +6 -26
  947. package/src/tui/components/prompt-input/mouse-selection.mjs +9 -5
  948. package/src/tui/components/tool-execution/surface-detail.mjs +4 -29
  949. package/src/tui/components/tool-execution/text-format.mjs +9 -12
  950. package/src/tui/components/tool-output-format.mjs +3 -3
  951. package/src/tui/dist/index.mjs +35884 -2629
  952. package/src/tui/index.jsx +4 -5
  953. package/src/tui/markdown/format-token.mjs +9 -16
  954. package/src/tui/markdown/lru.mjs +14 -0
  955. package/src/tui/markdown/measure-rendered-rows.mjs +4 -14
  956. package/src/tui/markdown/render-ansi.mjs +3 -7
  957. package/src/tui/markdown/stream-fence.mjs +3 -7
  958. package/src/tui/markdown/streaming-markdown.mjs +8 -7
  959. package/src/tui/markdown/table-layout.mjs +1 -1
  960. package/src/tui/paste-attachments.mjs +6 -16
  961. package/src/tui/session/agent-envelope.mjs +14 -13
  962. package/src/tui/session/agent-job-feed/agent-job-card.mjs +2 -2
  963. package/src/tui/session/context-state.mjs +3 -1
  964. package/src/tui/session/cross-surface-share.mjs +15 -20
  965. package/src/tui/session/goal-continuation/continuation-queue.mjs +3 -3
  966. package/src/tui/session/goal-continuation/goal-visibility.mjs +4 -1
  967. package/src/tui/session/goal-continuation.mjs +7 -3
  968. package/src/tui/session/goal-turn-state.mjs +2 -2
  969. package/src/tui/session/initial-state.mjs +2 -1
  970. package/src/tui/session/labels.mjs +1 -10
  971. package/src/tui/session/live-share/delta.mjs +1 -1
  972. package/src/tui/session/notification-plan.mjs +8 -5
  973. package/src/tui/session/prompt-history.mjs +7 -5
  974. package/src/tui/session/render-timing.mjs +1 -1
  975. package/src/tui/session/session-api/commands.mjs +12 -15
  976. package/src/tui/session/session-api/controls.mjs +2 -1
  977. package/src/tui/session/session-api/intake/abort.mjs +7 -9
  978. package/src/tui/session/session-api/intake/rewind.mjs +2 -5
  979. package/src/tui/session/session-api/intake/submission.mjs +1 -1
  980. package/src/tui/session/session-api/integrations.mjs +60 -1
  981. package/src/tui/session/session-api/lifecycle/resume.mjs +7 -0
  982. package/src/tui/session/session-api/media.mjs +27 -14
  983. package/src/tui/session/session-api/settings.mjs +2 -0
  984. package/src/tui/session/session-api-ext.mjs +31 -51
  985. package/src/tui/session/session-flow/failed-turn-rewind.mjs +1 -7
  986. package/src/tui/session/session-flow/steering.mjs +10 -0
  987. package/src/tui/session/shared-dir-watch.mjs +69 -0
  988. package/src/tui/session/tool-approval.mjs +2 -3
  989. package/src/tui/session/tool-card-results/grouped-result.mjs +2 -2
  990. package/src/tui/session/tool-card-results/item-patch.mjs +8 -5
  991. package/src/tui/session/tool-result-status.mjs +52 -3
  992. package/src/tui/session/tool-result-text.mjs +0 -2
  993. package/src/tui/session/transcript-intake.mjs +1 -1
  994. package/src/tui/session/transcript-spill/spill-dir.mjs +7 -2
  995. package/src/tui/session/transcript-spill/spill-writer.mjs +45 -6
  996. package/src/tui/session/transcript-spill.mjs +20 -24
  997. package/src/tui/session/transcript-store.mjs +2 -8
  998. package/src/tui/session/tui-steering-persist.mjs +53 -57
  999. package/src/tui/session/turn-aggregate-cards/early-complete.mjs +4 -18
  1000. package/src/tui/session/turn-stream.mjs +46 -2
  1001. package/src/tui/session/turn-tool-cards.mjs +2 -10
  1002. package/src/tui/session/turn.mjs +7 -2
  1003. package/src/tui/session-local.mjs +71 -17
  1004. package/src/tui/themes/onedark.mjs +4 -3
  1005. package/src/ui/ansi.mjs +0 -2
  1006. package/src/ui/model-display.mjs +1 -2
  1007. package/src/ui/statusline-agents.mjs +1 -7
  1008. package/src/ui/statusline-format.mjs +7 -0
  1009. package/src/ui/statusline-segments.mjs +2 -11
  1010. package/src/ui/statusline.mjs +1 -5
  1011. package/src/ui/streaming-markdown-heal.mjs +16 -3
  1012. package/src/vendor/statusline/src/gateway/route-meta.mjs +44 -13
  1013. package/src/workflows/default/WORKFLOW.md +2 -1
  1014. package/scripts/lib/isolated-root-cleanup.mjs +0 -25
  1015. package/src/rules/shared/05-parallel-calls.md +0 -13
  1016. package/src/runtime/agent/orchestrator/session/browser-snapshot-supersession.mjs +0 -61
  1017. package/src/runtime/agent/orchestrator/session/evidence-union.mjs +0 -28
  1018. package/src/runtime/agent/orchestrator/tools/builtin/diff-utils.mjs +0 -128
  1019. package/src/session-runtime/memory-runtime-prewarm.mjs +0 -15
@@ -119,10 +119,8 @@ export function createSessionLifecycle(deps) {
119
119
  isCloseRequested: () => rt.closeRequested,
120
120
  getActiveTurnCount: () => rt.activeTurnCount,
121
121
  getSessionCreatePromise: () => rt.sessionCreatePromise,
122
- getSession: () => rt.session,
123
122
  hasActiveAutomation,
124
123
  getCodeGraphModule,
125
- createCurrentSession,
126
124
  channels,
127
125
  envFlag,
128
126
  delays: {
@@ -1,7 +1,8 @@
1
1
  import { SUMMARY_PREFIX } from '../runtime/agent/orchestrator/session/compact.mjs';
2
2
  import { hasUserConversationMessage } from '../runtime/agent/orchestrator/session/manager/prompt-utils.mjs';
3
3
 
4
- function hasRouteHistoryMessage(messages) {
4
+ /** A real user exchange, or the summary anchor a compaction left behind. */
5
+ export function hasRouteHistoryMessage(messages) {
5
6
  const list = Array.isArray(messages) ? messages : [];
6
7
  return (
7
8
  hasUserConversationMessage(list) ||
@@ -89,11 +89,12 @@ export function cleanSessionPreview(text, max = 160) {
89
89
  .slice(0, limit);
90
90
  }
91
91
 
92
- // Stable sentinel carried in every late-tool (deferred MCP) announcement
93
- // reminder — must stay byte-identical to LATE_TOOL_REMINDER_SENTINEL in
94
- // src/session-runtime/tool-catalog.mjs. Detection keys on this exact string
95
- // (never fuzzy matching) so the raw announcement block can be hidden from
96
- // user-facing surfaces while the model context stays untouched.
92
+ // Stable sentinel carried in late-tool (deferred MCP) announcement reminders.
93
+ // Nothing in this repository emits it any more (late tools now travel as a
94
+ // deferred_tools_delta), but stored transcripts may still hold such blocks.
95
+ // Detection keys on this exact string (never fuzzy matching) so the raw
96
+ // announcement block stays hidden from user-facing surfaces while the model
97
+ // context stays untouched.
97
98
  const LATE_TOOL_ANNOUNCEMENT_SENTINEL = 'connected after this session started';
98
99
 
99
100
  export function isLateToolAnnouncement(text) {
@@ -85,6 +85,10 @@ function greetingTitle(source) {
85
85
  return '';
86
86
  }
87
87
 
88
+ function errorText(error) {
89
+ return error instanceof Error ? error.stack || error.message : String(error);
90
+ }
91
+
88
92
  function resolvedSystemLocale() {
89
93
  try {
90
94
  return Intl.DateTimeFormat().resolvedOptions().locale || '';
@@ -195,9 +199,7 @@ export function createSessionTitleController(deps = {}) {
195
199
  // Release the one-shot marker: a timed-out/failed generation may retry
196
200
  // on the next trigger (next completed turn for stage three).
197
201
  attempts?.delete(sessionId);
198
- log(
199
- `failed id=${sessionId} stage=${stage} error=${error instanceof Error ? error.stack || error.message : String(error)}`
200
- );
202
+ log(`failed id=${sessionId} stage=${stage} error=${errorText(error)}`);
201
203
  });
202
204
  };
203
205
 
@@ -224,9 +226,7 @@ export function createSessionTitleController(deps = {}) {
224
226
  log(`generated id=${sessionId} stage=first title=${JSON.stringify(greeting)} deterministic=greeting`);
225
227
  void promote(sessionId, greeting, 'first').catch((error) => {
226
228
  firstAttempts.delete(sessionId);
227
- log(
228
- `failed id=${sessionId} stage=first error=${error instanceof Error ? error.stack || error.message : String(error)}`
229
- );
229
+ log(`failed id=${sessionId} stage=first error=${errorText(error)}`);
230
230
  });
231
231
  return true;
232
232
  }
@@ -5,15 +5,16 @@
5
5
  // `this.*` resolve against the spread target, so cross-member calls (e.g.
6
6
  // setProfile -> this.getProfile) keep working when spread into the facade.
7
7
  //
8
- // The members live in four topic modules: profile/onboarding/skills,
9
- // compaction/auto-clear, built-in tool modules, and system (channels, shell,
10
- // updates); the local provider's own methods come from
8
+ // The members live in five topic modules: profile/onboarding/skills,
9
+ // compaction/auto-clear, built-in tool modules, system (channels, shell,
10
+ // updates) and developer options; the local provider's own methods come from
11
11
  // local-provider-settings.mjs.
12
12
  import { createLocalProviderSettings } from './local-provider-settings.mjs';
13
13
  import { createProfileSettings } from './settings-profile-api.mjs';
14
14
  import { createCompactionSettings } from './settings-compaction-api.mjs';
15
15
  import { createBuiltinToolSettings } from './settings-builtin-tools-api.mjs';
16
16
  import { createSystemSettings } from './settings-system-api.mjs';
17
+ import { createDeveloperSettings } from './settings-developer-api.mjs';
17
18
 
18
19
  export function createSettingsApi(deps) {
19
20
  // Optional: callers without a live local provider / gate fall back to the
@@ -35,5 +36,6 @@ export function createSettingsApi(deps) {
35
36
  ...createCompactionSettings(shared),
36
37
  ...createBuiltinToolSettings(shared, localSettings),
37
38
  ...createSystemSettings(shared),
39
+ ...createDeveloperSettings(shared),
38
40
  };
39
41
  }
@@ -0,0 +1,22 @@
1
+ // Settings → Developer: the data-driven developer options
2
+ // (runtime/shared/developer-options.mjs). Values persist at agent config
3
+ // `developer.<optionId>`.
4
+ import { developerOption, developerSettingsView } from '../runtime/shared/developer-options.mjs';
5
+
6
+ export function createDeveloperSettings({ getConfig, saveConfigAndAdopt, syncDeveloperOption }) {
7
+ return {
8
+ getDeveloperSettings() {
9
+ // In-memory adopted config: current even while its debounced save is pending.
10
+ return developerSettingsView(getConfig()?.developer);
11
+ },
12
+ async setDeveloperOption(id, enabled) {
13
+ if (!developerOption(id)) throw new TypeError(`Unknown developer option "${id}".`);
14
+ if (typeof enabled !== 'boolean') throw new TypeError('Developer option value must be a boolean.');
15
+ const config = getConfig() || {};
16
+ saveConfigAndAdopt({ ...config, developer: { ...(config.developer || {}), [id]: enabled } });
17
+ // Flushes the save and applies live effects (e.g. the provider registry).
18
+ await syncDeveloperOption?.(id);
19
+ return this.getDeveloperSettings();
20
+ },
21
+ };
22
+ }
@@ -7,7 +7,7 @@ import { builtinFeatureActive, builtinFirstUseApproval } from '../builtin-featur
7
7
  import { ORCHESTRATION_MODES } from '../../runtime/shared/orchestration.mjs';
8
8
  import { SETUP_DESKTOP_DOMAINS, SETUP_HANDOFFS } from './settings-contract.mjs';
9
9
  import { executeExtendedSetupAction, publicAutomation, validateMcpInput } from './extended-actions.mjs';
10
- import { createSetupUiRequests } from './ui-requests.mjs';
10
+ import { SETUP_DESKTOP_UNCLAIMED, createSetupUiRequests } from './ui-requests.mjs';
11
11
  import {
12
12
  SETUP_ACTIONS,
13
13
  SETUP_ACTION_FIELDS,
@@ -17,8 +17,8 @@ import {
17
17
  SETUP_BUILTIN_TOGGLE_FEATURES,
18
18
  } from './tool-defs.mjs';
19
19
  import { schemaValueError } from '../../runtime/shared/schema-value-error.mjs';
20
+ import { clean } from '../session-text.mjs';
20
21
 
21
- const clean = (value) => String(value ?? '').trim();
22
22
  const ACTION_APPLIES_TO = {
23
23
  set_recap_enabled: 'background Memory cycles; no restart required',
24
24
  set_auto_update: 'subsequent automatic update checks',
@@ -165,8 +165,6 @@ async function automationStatus(rt, { domain }) {
165
165
  };
166
166
  }
167
167
 
168
- // status readers per non-desktop domain: (rt, { domain, getConfig }) → the
169
- // public status shape. Desktop-hosted domains never reach this table.
170
168
  function featureFlags(rt) {
171
169
  return Object.fromEntries(
172
170
  Object.entries(rt.getToolModuleSettings?.() || {}).map(([name, settings]) => [
@@ -176,6 +174,8 @@ function featureFlags(rt) {
176
174
  );
177
175
  }
178
176
 
177
+ // status readers per non-desktop domain: (rt, { domain, getConfig }) → the
178
+ // public status shape. Desktop-hosted domains never reach this table.
179
179
  const SETUP_STATUS_READERS = {
180
180
  capabilities: () => ({
181
181
  actions: SETUP_ACTION_FIELDS,
@@ -288,6 +288,10 @@ function mcpServerInput(args) {
288
288
  }
289
289
 
290
290
  const DESKTOP_HOSTED_FEATURES = ['browser', 'computer', 'voice'];
291
+ // Git and Office installs bring their system dependency (Git, LibreOffice) in
292
+ // through the Desktop's guided installers, the same steps as the Built-in card.
293
+ // A request no Desktop window takes keeps the runtime-only install.
294
+ const DESKTOP_PREPARED_FEATURES = ['git', 'office'];
291
295
  const SETUP_INSTALLABLE_FEATURES = ['git', 'memory', 'office', 'tidy', 'localProvider', 'browser', 'computer', 'voice'];
292
296
 
293
297
  // Action handlers: (rt, args, { requestDesktop, readStatus, openSurface }).
@@ -363,9 +367,16 @@ const SETUP_ACTION_HANDLERS = {
363
367
  const name = requireEnum(args.name, ['browser', 'computer'], 'name');
364
368
  return rt.setBridgeFirstUseApproval(name, requireBoolean(args.enabled));
365
369
  },
366
- install_builtin: (rt, args, { requestDesktop }) => {
370
+ install_builtin: async (rt, args, { requestDesktop }) => {
367
371
  const name = requireEnum(args.name, SETUP_INSTALLABLE_FEATURES, 'name');
368
372
  if (DESKTOP_HOSTED_FEATURES.includes(name)) return requestDesktop(args);
373
+ if (DESKTOP_PREPARED_FEATURES.includes(name)) {
374
+ try {
375
+ return await requestDesktop(args);
376
+ } catch (error) {
377
+ if (error?.code !== SETUP_DESKTOP_UNCLAIMED) throw error;
378
+ }
379
+ }
369
380
  return rt.installBuiltinFeature(name);
370
381
  },
371
382
  install_local_model: async (rt, args) =>
@@ -1,5 +1,15 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
 
3
+ /** Error code of a request no Desktop window took: nothing ran, so a caller
4
+ * with a runtime-only route may still take it. */
5
+ export const SETUP_DESKTOP_UNCLAIMED = 'SETUP_DESKTOP_UNCLAIMED';
6
+
7
+ function unclaimed(message) {
8
+ const error = new Error(message);
9
+ error.code = SETUP_DESKTOP_UNCLAIMED;
10
+ return error;
11
+ }
12
+
3
13
  /** One addressed request, one desktop claimant, one receipt. Snapshot replay
4
14
  * carries only an id; it cannot replay a mutation after expiry or completion. */
5
15
  export function createSetupUiRequests({
@@ -15,7 +25,7 @@ export function createSetupUiRequests({
15
25
  pending.delete(id);
16
26
  clearTimeout(entry.timer);
17
27
  entry.signal?.removeEventListener('abort', entry.abort);
18
- if (error) entry.reject(new Error(error));
28
+ if (error) entry.reject(error instanceof Error ? error : new Error(error));
19
29
  else entry.resolve(result);
20
30
  return true;
21
31
  }
@@ -23,7 +33,7 @@ export function createSetupUiRequests({
23
33
  if (signal?.aborted) return Promise.reject(new Error('setup: cancelled before Desktop execution'));
24
34
  const sessionId = String(getSessionId?.() || '');
25
35
  if (!sessionId)
26
- return Promise.reject(new Error('setup: open this conversation in Desktop to change desktop-host settings'));
36
+ return Promise.reject(unclaimed('setup: open this conversation in Desktop to change desktop-host settings'));
27
37
  const id = randomUUID();
28
38
  return new Promise((resolve, reject) => {
29
39
  const entry = {
@@ -36,14 +46,14 @@ export function createSetupUiRequests({
36
46
  abort: () => finish(id, 'setup: cancelled. If Desktop already started, inspect its state before retrying.'),
37
47
  expiresAt: Date.now() + claimTimeoutMs,
38
48
  timer: setTimeout(
39
- () => finish(id, 'setup: no Desktop window claimed the request; nothing was changed'),
49
+ () => finish(id, unclaimed('setup: no Desktop window claimed the request; nothing was changed')),
40
50
  claimTimeoutMs
41
51
  ),
42
52
  };
43
53
  pending.set(id, entry);
44
54
  signal?.addEventListener('abort', entry.abort, { once: true });
45
55
  if (notifySessionUi?.(sessionId, 'Desktop settings request', { kind: 'setup-ui', id }) !== true) {
46
- finish(id, 'setup: no attached Desktop surface; nothing was changed');
56
+ finish(id, unclaimed('setup: no attached Desktop surface; nothing was changed'));
47
57
  }
48
58
  });
49
59
  }
@@ -85,7 +85,7 @@ export function createSkillsApi({ contextMod, getCwd, getTools = () => [] }) {
85
85
  const missingFeature =
86
86
  typeof contextMod.skillMissingFeature === 'function' ? contextMod.skillMissingFeature(skillName) : null;
87
87
  if (missingFeature) {
88
- return `Error: skill "${skillName}" needs the ${missingFeature} built-in feature, which is not installed or is switched off in Settings → Built-in`;
88
+ return `Error: skill "${skillName}" needs the ${missingFeature} built-in feature, which is not installed or is switched off in Extensions → Plugin → Built-in`;
89
89
  }
90
90
  if (typeof contextMod.isSkillDisabled === 'function' && contextMod.isSkillDisabled(skillName)) {
91
91
  return `Error: skill "${skillName}" is disabled`;
@@ -116,7 +116,7 @@ export function createSkillsApi({ contextMod, getCwd, getTools = () => [] }) {
116
116
  mkdirSync(dir, { recursive: true });
117
117
  writeFileSync(filePath, createSkillDocument({ name, description, whenToUse, body }), 'utf8');
118
118
  if (dependencies !== undefined) saveSkillToolDependencies(filePath, dependencies);
119
- contextMod.invalidateSkillsCache?.(getCwd());
119
+ invalidateSkills();
120
120
  return { name, filePath };
121
121
  }
122
122
 
@@ -132,7 +132,7 @@ export function createSkillsApi({ contextMod, getCwd, getTools = () => [] }) {
132
132
  if (input.dependenciesOnly === true) {
133
133
  if (dependencies === undefined) throw new Error('Skill tool dependencies are required.');
134
134
  saveSkillToolDependencies(resource.filePath, dependencies);
135
- contextMod.invalidateSkillsCache?.(getCwd());
135
+ invalidateSkills();
136
136
  return { originalName, name: originalName, filePath: resource.filePath };
137
137
  }
138
138
  const name = validateSkillName(input.name);
@@ -166,7 +166,7 @@ export function createSkillsApi({ contextMod, getCwd, getTools = () => [] }) {
166
166
  body.trim() === parsed.body.trim()
167
167
  ) {
168
168
  if (dependencies !== undefined) saveSkillToolDependencies(resource.filePath, dependencies);
169
- contextMod.invalidateSkillsCache?.(getCwd());
169
+ invalidateSkills();
170
170
  return { originalName, name, filePath: resource.filePath };
171
171
  }
172
172
  const updated = updateSkillDocument(source, { name, description, whenToUse, body });
@@ -187,7 +187,7 @@ export function createSkillsApi({ contextMod, getCwd, getTools = () => [] }) {
187
187
  else if (filePath !== resource.filePath && resource.dependencySource === 'override') {
188
188
  saveSkillToolDependencies(filePath, resource.toolDependencies || []);
189
189
  }
190
- contextMod.invalidateSkillsCache?.(getCwd());
190
+ invalidateSkills();
191
191
  return { originalName, name, filePath };
192
192
  }
193
193
 
@@ -65,8 +65,9 @@ export const DEFERRED_DEFAULT_LEAD_TOOLS = Object.freeze([
65
65
  'code_graph',
66
66
  'read',
67
67
  // cwd / web_fetch demoted to the deferred manifest 2026-08:
68
- // 0 / 10 calls in a 3-day 7.6k-call trace window; they auto-load on
69
- // first direct call.
68
+ // 0 / 10 calls in a 3-day 7.6k-call trace window. The model loads them
69
+ // with load_tool; a direct call anyway is absorbed by the runtime
70
+ // call-through (deferred-call-through.mjs) as a safety net.
70
71
  'edit',
71
72
  'apply_patch',
72
73
  'git',
@@ -87,7 +88,7 @@ export const READONLY_TOOL_NAMES = new Set([
87
88
  'web_search',
88
89
  'web_fetch',
89
90
  'recall',
90
- 'memory',
91
+ // memory is not listed: it adds, edits and deletes standing memories.
91
92
  'Skill',
92
93
  ]);
93
94
 
@@ -49,6 +49,29 @@ export {
49
49
  MEASURED_TOOL_USAGE,
50
50
  } from './tool-catalog-data.mjs';
51
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
+
52
75
  export function filterDisallowedTools(tools, disallowed = []) {
53
76
  // Old session catalogs must not resurrect the separate staging schema.
54
77
  const deny = new Set(['git_stage', ...(Array.isArray(disallowed) ? disallowed : [])].map(clean).filter(Boolean));
@@ -118,8 +141,7 @@ function openAILoadableToolSpec(tool, provider = '') {
118
141
  name: clean(tool?.name),
119
142
  description: clean(tool?.description),
120
143
  defer_loading: true,
121
- parameters:
122
- tool?.inputSchema && typeof tool.inputSchema === 'object' ? tool.inputSchema : { type: 'object', properties: {} },
144
+ parameters: toolParameters(tool),
123
145
  };
124
146
  }
125
147
 
@@ -157,14 +179,7 @@ function activeToolSchemas(catalog, session, names) {
157
179
  const name = clean(tool?.name);
158
180
  if (!name || !wanted.has(name) || seen.has(name)) continue;
159
181
  seen.add(name);
160
- specs.push({
161
- name,
162
- description: clean(tool?.description),
163
- parameters:
164
- tool?.inputSchema && typeof tool.inputSchema === 'object'
165
- ? tool.inputSchema
166
- : { type: 'object', properties: {} },
167
- });
182
+ specs.push({ name, description: clean(tool?.description), parameters: toolParameters(tool) });
168
183
  }
169
184
  }
170
185
  return specs;
@@ -226,13 +241,7 @@ function setDeferredToolState(session, names) {
226
241
  }
227
242
 
228
243
  function deferredPoolToolNames(session) {
229
- if (
230
- !session ||
231
- session.deferredProviderMode === 'full' ||
232
- session.deferredProviderMode === 'manifest' ||
233
- session.deferredProviderMode === 'canonical'
234
- )
235
- return [];
244
+ if (!session || FIXED_SURFACE_MODES.has(session.deferredProviderMode)) return [];
236
245
  const catalog = Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : [];
237
246
  const active = new Set([
238
247
  ...(session.tools || []).map((tool) => clean(tool?.name)).filter(Boolean),
@@ -303,7 +312,7 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
303
312
  const catalog = sortedCatalogByMeasuredUsage([...byName.values()]);
304
313
  const defaultNames = defaultDeferredToolNames(catalog, mode);
305
314
  const storedNames = providerMode === 'native' ? [] : storedDeferredToolNames(session);
306
- const fixedSurface = ['full', 'manifest', 'canonical'].includes(providerMode);
315
+ const fixedSurface = FIXED_SURFACE_MODES.has(providerMode);
307
316
  let selectedNames = fixedSurface
308
317
  ? sortedNamesByMeasuredUsage(catalog.map((tool) => clean(tool?.name)).filter(Boolean))
309
318
  : [];
@@ -373,15 +382,8 @@ export function rebuildDeferredToolSurfaceForProvider(session, provider) {
373
382
  if (session.deferredProviderMode === 'native') {
374
383
  session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
375
384
  applyInitialDeferredToolManifestToBp2(session, deferredPoolToolNames(session), { rebuild: true });
376
- const rendered = session.messages?.find(
377
- (message) =>
378
- message?.role === 'system' &&
379
- typeof message.content === 'string' &&
380
- message.content.includes('<available-deferred-tools>')
381
- )?.content;
382
- session.deferredAnnouncedTools = deferredPoolToolNames(session).filter(
383
- (name) => typeof rendered === 'string' && rendered.includes(name)
384
- );
385
+ const rendered = renderedDeferredManifest(session);
386
+ session.deferredAnnouncedTools = deferredPoolToolNames(session).filter((name) => rendered.includes(name));
385
387
  } else if (previousMode === 'native') {
386
388
  for (const system of session.messages?.filter((message) => message?.role === 'system') || []) {
387
389
  if (typeof system.content === 'string') system.content = stripDeferredToolManifestBlock(system.content);
@@ -408,7 +410,6 @@ export function rebuildDeferredToolSurfaceForProvider(session, provider) {
408
410
  export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
409
411
  if (!session || !Array.isArray(session.messages)) return false;
410
412
  if (session.deferredProviderMode === 'full') return false;
411
- const isMcp = (name) => typeof name === 'string' && name.startsWith('mcp__');
412
413
  const live = filterDisallowedTools(Array.isArray(liveMcpTools) ? liveMcpTools : [], session.disallowedTools);
413
414
  const byName = new Map();
414
415
  for (const tool of Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : []) {
@@ -418,7 +419,7 @@ export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
418
419
  let added = false;
419
420
  for (const tool of live) {
420
421
  const name = clean(tool?.name);
421
- if (!name || !isMcp(name) || byName.has(name)) continue;
422
+ if (!name || !isMcpToolName(name) || byName.has(name)) continue;
422
423
  byName.set(name, activeToolForSurface(tool));
423
424
  added = true;
424
425
  }
@@ -444,12 +445,7 @@ export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
444
445
  // Pre-mark ONLY the names that ACTUALLY landed in the rebuilt BP2 manifest as
445
446
  // announced; anything the manifest could not advertise stays un-announced so
446
447
  // the turn-boundary late reminder can still surface it.
447
- const rendered = (() => {
448
- const sys = session.messages.find(
449
- (m) => m?.role === 'system' && typeof m.content === 'string' && m.content.includes('<available-deferred-tools>')
450
- );
451
- return typeof sys?.content === 'string' ? sys.content : '';
452
- })();
448
+ const rendered = renderedDeferredManifest(session);
453
449
  session.deferredAnnouncedTools = deferredPoolToolNames(session).filter((name) => rendered.includes(name));
454
450
  session.updatedAt = Date.now();
455
451
  return true;
@@ -472,7 +468,6 @@ export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
472
468
  */
473
469
  export function reconcileDeferredMcpToolCatalog(session, liveMcpTools) {
474
470
  if (!session || !Array.isArray(session.tools)) return null;
475
- const isMcp = (name) => typeof name === 'string' && name.startsWith('mcp__');
476
471
  const live = filterDisallowedTools(Array.isArray(liveMcpTools) ? liveMcpTools : [], session.disallowedTools);
477
472
  const hadSnapshot = Array.isArray(session.deferredMcpToolNames);
478
473
  const previousNames = new Set(
@@ -480,18 +475,18 @@ export function reconcileDeferredMcpToolCatalog(session, liveMcpTools) {
480
475
  ? session.deferredMcpToolNames
481
476
  : [...(session.deferredToolCatalog || []), ...(session.deferredLateToolCatalog || [])]
482
477
  .map((tool) => clean(tool?.name))
483
- .filter(isMcp)
478
+ .filter(isMcpToolName)
484
479
  );
485
- session.deferredMcpToolNames = [...new Set(live.map((tool) => clean(tool?.name)).filter(isMcp))];
486
- if (['full', 'manifest', 'canonical'].includes(session.deferredProviderMode)) {
480
+ session.deferredMcpToolNames = [...new Set(live.map((tool) => clean(tool?.name)).filter(isMcpToolName))];
481
+ if (FIXED_SURFACE_MODES.has(session.deferredProviderMode)) {
487
482
  const byName = new Map();
488
483
  for (const tool of Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : []) {
489
484
  const name = clean(tool?.name);
490
- if (name && !isMcp(name)) byName.set(name, tool);
485
+ if (name && !isMcpToolName(name)) byName.set(name, tool);
491
486
  }
492
487
  for (const tool of live) {
493
488
  const name = clean(tool?.name);
494
- if (name && isMcp(name)) byName.set(name, activeToolForSurface(tool));
489
+ if (name && isMcpToolName(name)) byName.set(name, activeToolForSurface(tool));
495
490
  }
496
491
  const catalog = sortedCatalogByMeasuredUsage([...byName.values()]);
497
492
  const next = catalog.filter((tool) => session.deferredSurfaceMode !== 'readonly' || isReadonlySelectable(tool));
@@ -513,7 +508,7 @@ export function reconcileDeferredMcpToolCatalog(session, liveMcpTools) {
513
508
  const liveMcpByName = new Map();
514
509
  for (const tool of live) {
515
510
  const name = clean(tool?.name);
516
- if (!name || !isMcp(name) || liveMcpByName.has(name)) continue;
511
+ if (!name || !isMcpToolName(name) || liveMcpByName.has(name)) continue;
517
512
  liveMcpByName.set(name, activeToolForSurface(tool));
518
513
  }
519
514
 
@@ -538,13 +533,11 @@ export function reconcileDeferredMcpToolCatalog(session, liveMcpTools) {
538
533
  // schema/handler track the live connection. Swap ONLY when the serialized
539
534
  // surface actually changed, so a steady reconnect never perturbs the tools
540
535
  // request param or its cache hash.
541
- if (Array.isArray(session.tools)) {
542
- for (let i = 0; i < session.tools.length; i += 1) {
543
- const name = clean(session.tools[i]?.name);
544
- if (!name || !isMcp(name) || !liveMcpByName.has(name)) continue;
545
- const freshTool = liveMcpByName.get(name);
546
- if (JSON.stringify(freshTool) !== JSON.stringify(session.tools[i])) session.tools[i] = freshTool;
547
- }
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;
548
541
  }
549
542
 
550
543
  const nextNames = new Set(session.deferredMcpToolNames);
@@ -552,7 +545,7 @@ export function reconcileDeferredMcpToolCatalog(session, liveMcpTools) {
552
545
  const added = [];
553
546
  for (const tool of liveMcpByName.values()) {
554
547
  const name = clean(tool?.name);
555
- if (!name || !isMcp(name)) continue;
548
+ if (!name || !isMcpToolName(name)) continue;
556
549
  if (previousNames.has(name) || (!hadSnapshot && (active.has(name) || startupNames.has(name)))) continue;
557
550
  added.push({ name, description: lateAnnouncementDescription(tool?.description) });
558
551
  }
@@ -18,7 +18,7 @@ export const TOOL_SEARCH_TOOL = {
18
18
  type: 'object',
19
19
  properties: {
20
20
  names: {
21
- anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
21
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' }, minItems: 1 }],
22
22
  description: 'Exact name(s)/aliases.',
23
23
  },
24
24
  },
@@ -12,6 +12,9 @@ export function createSnapshotTrackerFactory({
12
12
  }) {
13
13
  return function createSnapshotTracker(options) {
14
14
  const tracker = { sessionId: null, promise: null };
15
+ // A completion wake continues the user turn whose review already exists;
16
+ // aborting the wake seals that review instead of discarding it.
17
+ const continueTurn = options.continueTurn === true;
15
18
  const cancel = () => {
16
19
  try {
17
20
  cancelTurnSnapshotForTurn(tracker.sessionId);
@@ -27,12 +30,13 @@ export function createSnapshotTrackerFactory({
27
30
  // The first submitted row is the outer prompt. Mid-loop steering
28
31
  // is drained inside this ask() and deliberately keeps this ID.
29
32
  checkpointId: String(options.id || '').trim(),
33
+ continueTurn,
30
34
  })
31
35
  )
32
36
  .catch(() => undefined);
33
37
  };
34
38
  tracker.finish = async (signal, awaitTurn) => {
35
- if (signal.aborted) {
39
+ if (signal.aborted && !continueTurn) {
36
40
  cancel();
37
41
  void Promise.resolve(tracker.promise).catch(() => {});
38
42
  return;
@@ -44,7 +48,7 @@ export function createSnapshotTrackerFactory({
44
48
  } catch {
45
49
  /* optional review cleanup never overrides turn settlement */
46
50
  }
47
- if (signal.aborted) cancel();
51
+ if (signal.aborted && !continueTurn) cancel();
48
52
  };
49
53
  return tracker;
50
54
  };
@@ -35,8 +35,7 @@ export function createTurnTranscript({ getTranscriptWriter, getLastAppendedAssis
35
35
  // re-write the parts into the transcript.
36
36
  function appendFinalAssistant(result) {
37
37
  if (!getTranscriptWriter()) return;
38
- const finalSource = result?.historyContent ?? result?.content;
39
- const finalText = finalSource != null ? String(finalSource) : '';
38
+ const finalText = transcriptText(result?.historyContent ?? result?.content);
40
39
  if (finalText.trim() && finalText !== getLastAppendedAssistant()) {
41
40
  append('appendAssistant', finalText, 'final append failed');
42
41
  setLastAppendedAssistant(finalText);