mixdog 0.9.174 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (935) hide show
  1. package/README.md +11 -12
  2. package/package.json +2 -2
  3. package/scripts/agent-turn-trace-probe.mjs +1 -1
  4. package/scripts/build-ffmpeg-runtime.sh +16 -0
  5. package/scripts/build-runtime-linux.sh +8 -2
  6. package/scripts/build-runtime-macos.sh +8 -2
  7. package/scripts/computer-task-cost-report.mjs +1 -9
  8. package/scripts/context-renewal-live-check.mjs +2 -1
  9. package/scripts/graph-parity.mjs +78 -55
  10. package/scripts/lib/bench-sandbox.mjs +67 -0
  11. package/scripts/lib/bench-sandbox.test.mjs +54 -0
  12. package/scripts/lib/coverage.mjs +2 -4
  13. package/scripts/lib/run-node-tests.mjs +24 -1
  14. package/scripts/lib/session-bench-fmt.mjs +65 -0
  15. package/scripts/lib/session-bench-render.mjs +394 -0
  16. package/scripts/lib/smoke-loop-shared.mjs +28 -0
  17. package/scripts/lib/smoke-loop-shared.test.mjs +22 -0
  18. package/scripts/lib/trace-row.mjs +40 -0
  19. package/scripts/lib/trace-row.test.mjs +47 -0
  20. package/scripts/lib/trace-stats.mjs +7 -0
  21. package/scripts/lib/trace-stats.test.mjs +7 -1
  22. package/scripts/llm-trace-summary.mjs +2 -44
  23. package/scripts/memory-chunk-quality.mjs +1 -1
  24. package/scripts/memory-layer2-check.mjs +1 -1
  25. package/scripts/pg-memory-diet.mjs +1 -1
  26. package/scripts/plan-runtime-release-tag.mjs +57 -0
  27. package/scripts/prepare-native-assets.mjs +1 -1
  28. package/scripts/provider-contract-test-env.mjs +21 -0
  29. package/scripts/release-paths.mjs +1 -0
  30. package/scripts/routing-corpus.mjs +1 -11
  31. package/scripts/session-diag.mjs +2 -44
  32. package/scripts/smoke-runtime-negative.sh +7 -1
  33. package/scripts/test-data-dir.mjs +19 -0
  34. package/scripts/tidy/sync-engines-manifest.mjs +8 -10
  35. package/scripts/tool-efficiency-diag.mjs +1 -4
  36. package/scripts/voice-runtime-config.json +1 -1
  37. package/src/app.mjs +1 -1
  38. package/src/defaults/skills/code-tidy/SKILL.md +5 -2
  39. package/src/defaults/skills/pptx/SKILL.md +1 -1
  40. package/src/defaults/skills/pptx/references/pictures.md +1 -1
  41. package/src/defaults/skills/pptx/scripts/review-deck.mjs +13 -4
  42. package/src/defaults/skills/skill-creator/scripts/validate-skill.mjs +40 -40
  43. package/src/defaults/skills/xlsx/SKILL.md +1 -0
  44. package/src/headless-exec.mjs +4 -2
  45. package/src/headless-role.mjs +81 -68
  46. package/src/lib/keychain-cjs.cjs +26 -49
  47. package/src/lib/mixdog-debug.cjs +1 -1
  48. package/src/lib/rules-builder.cjs +4 -3
  49. package/src/mixdog-session-runtime.mjs +2 -2
  50. package/src/repl/slash-commands.mjs +1 -1
  51. package/src/repl/stream-sink.mjs +1 -1
  52. package/src/repl/turn-output.mjs +2 -2
  53. package/src/repl.mjs +1 -1
  54. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +1 -1
  55. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +20 -16
  56. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +0 -3
  57. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +23 -22
  58. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +2 -2
  59. package/src/runtime/{shared/llm/index.mjs → agent/orchestrator/maintenance-preset.mjs} +2 -2
  60. package/src/runtime/agent/orchestrator/mcp/client-config.mjs +2 -1
  61. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +7 -36
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +28 -2
  63. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +1 -1
  64. package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +6 -1
  65. package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +1 -47
  66. package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +1 -383
  67. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +2 -59
  68. package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +32 -31
  69. package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
  70. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +10 -1
  71. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +12 -61
  72. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +2 -1
  73. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request.mjs +2 -0
  74. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +30 -67
  75. package/src/runtime/agent/orchestrator/providers/anthropic-recovery-guards.mjs +9 -12
  76. package/src/runtime/agent/orchestrator/providers/anthropic-server-fallback.mjs +3 -1
  77. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/leak-guard.mjs +1 -1
  78. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-stop.mjs +20 -12
  79. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -2
  80. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +4 -3
  81. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +5 -1
  82. package/src/runtime/agent/orchestrator/providers/anthropic-sse-watchdogs.mjs +18 -10
  83. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +20 -16
  84. package/src/runtime/agent/orchestrator/providers/anthropic-thinking-contract.mjs +1 -26
  85. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +9 -13
  86. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +8 -3
  87. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +4 -8
  88. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +21 -30
  89. package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +1 -1
  90. package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +4 -2
  91. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +10 -8
  92. package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +13 -10
  93. package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +29 -0
  94. package/src/runtime/agent/orchestrator/providers/cursor-wire-guards.mjs +0 -1
  95. package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +10 -26
  96. package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +2 -3
  97. package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +7 -3
  98. package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +9 -15
  99. package/src/runtime/agent/orchestrator/providers/cursor.mjs +31 -5
  100. package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +1 -2
  101. package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +1 -4
  102. package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
  103. package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +48 -46
  104. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +18 -19
  105. package/src/runtime/agent/orchestrator/providers/gemini.mjs +3 -26
  106. package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +41 -0
  107. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +5 -19
  108. package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +16 -83
  109. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +26 -8
  110. package/src/runtime/agent/orchestrator/providers/lib/anthropic-models.mjs +8 -0
  111. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +30 -1
  112. package/src/runtime/agent/orchestrator/providers/lib/anthropic-stream-labels.mjs +6 -0
  113. package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +17 -0
  114. package/src/runtime/agent/orchestrator/providers/{anthropic-leaked-toolcall.mjs → lib/leaked-toolcall.mjs} +7 -7
  115. package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +44 -0
  116. package/src/runtime/agent/orchestrator/providers/lib/send-callbacks.mjs +12 -0
  117. package/src/runtime/agent/orchestrator/providers/lib/sse-framing.mjs +9 -8
  118. package/src/runtime/agent/orchestrator/providers/lib/transport-fallback-trace.mjs +25 -0
  119. package/src/runtime/agent/orchestrator/providers/model-catalog-projection.mjs +1 -181
  120. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +1 -796
  121. package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +1 -71
  122. package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +87 -0
  123. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +4 -5
  124. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +4 -5
  125. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +2 -21
  126. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +1 -1
  127. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +2 -3
  128. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +1 -2
  129. package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +4 -8
  130. package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +45 -32
  131. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +2 -2
  132. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +2 -2
  133. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +6 -12
  134. package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +2 -2
  135. package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -2
  136. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +14 -22
  137. package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +25 -34
  138. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +14 -14
  139. package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +3 -1
  140. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +2 -2
  141. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +1 -1
  142. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +2 -13
  143. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +1 -1
  144. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +1 -1
  145. package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +2 -2
  146. package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +2 -44
  147. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -16
  148. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +6 -5
  149. package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +4 -1
  150. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +3 -2
  151. package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +2 -2
  152. package/src/runtime/agent/orchestrator/providers/openai-ws-text-relay.mjs +1 -1
  153. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +6 -4
  154. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +2 -1
  155. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +2 -2
  156. package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -130
  157. package/src/runtime/agent/orchestrator/providers/registry.mjs +20 -16
  158. package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +21 -20
  159. package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +17 -17
  160. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +193 -0
  161. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +421 -0
  162. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-inspection.mjs +17 -17
  163. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-inspection.mjs +1 -1
  164. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-shape.mjs +3 -3
  165. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status.mjs +1 -1
  166. package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +101 -0
  167. package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +145 -0
  168. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/extension-scopes.mjs +5 -5
  169. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/fs-utils.mjs +1 -1
  170. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-control.mjs +2 -2
  171. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-mutations.mjs +2 -2
  172. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-reminder.mjs +1 -1
  173. package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +326 -0
  174. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-storage.mjs +2 -2
  175. package/src/runtime/agent/orchestrator/runtime-core/goal-tasks.mjs +148 -0
  176. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-title.mjs +2 -2
  177. package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +140 -0
  178. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-turns.mjs +1 -1
  179. package/src/runtime/agent/orchestrator/runtime-core/model-capabilities.mjs +140 -0
  180. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/orchestration.mjs +1 -1
  181. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/plugin-mcp.mjs +2 -2
  182. package/src/runtime/agent/orchestrator/runtime-core/session-id.mjs +2 -0
  183. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-route-policy.mjs +2 -2
  184. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-text.mjs +3 -3
  185. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-title.mjs +1 -2
  186. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/skill-tool-loading.mjs +1 -1
  187. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-schema.mjs +1 -1
  188. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +747 -0
  189. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +149 -0
  190. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/agents.mjs +11 -7
  191. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/context.mjs +6 -4
  192. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/packs.mjs +2 -3
  193. package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow-ids.mjs +1 -1
  194. package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +255 -0
  195. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +3 -4
  196. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +2 -4
  197. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +1 -1
  198. package/src/runtime/agent/orchestrator/session/context-identity-writer.mjs +162 -0
  199. package/src/runtime/agent/orchestrator/session/context-tool-pairs.mjs +2 -2
  200. package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +87 -0
  201. package/src/runtime/agent/orchestrator/session/context-utils.mjs +3 -245
  202. package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +2 -3
  203. package/src/runtime/agent/orchestrator/session/eager-dispatch/mutation-paths.mjs +54 -0
  204. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +1 -1
  205. package/src/runtime/agent/orchestrator/session/lifecycle-scan.mjs +1 -16
  206. package/src/runtime/agent/orchestrator/session/loop/arg-schema-coerce.mjs +2 -2
  207. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +13 -1
  208. package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +3 -3
  209. package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +4 -4
  210. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +1 -1
  211. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +2 -2
  212. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +1 -1
  213. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +2 -3
  214. package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +2 -2
  215. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +6 -3
  216. package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +1 -1
  217. package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +3 -2
  218. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +6 -10
  219. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -2
  220. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +1 -1
  221. package/src/runtime/agent/orchestrator/session/loop.mjs +5 -6
  222. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +1 -1
  223. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +2 -2
  224. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -2
  225. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +5 -5
  226. package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +40 -64
  227. package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +2 -2
  228. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +24 -16
  229. package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
  230. package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +7 -13
  231. package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +17 -2
  232. package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +139 -0
  233. package/src/runtime/agent/orchestrator/session/manager/pending-spool-sweep.mjs +34 -14
  234. package/src/runtime/agent/orchestrator/session/manager/prefetch-bridge/file-prefetch.mjs +1 -1
  235. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +4 -18
  236. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +1 -1
  237. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +10 -18
  238. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +1 -1
  239. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +2 -2
  240. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +1 -1
  241. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +2 -2
  242. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +6 -10
  243. package/src/runtime/agent/orchestrator/session/manager.mjs +1 -2
  244. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +11 -6
  245. package/src/runtime/agent/orchestrator/session/result-classification.mjs +1 -1
  246. package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +194 -0
  247. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +6 -198
  248. package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +7 -7
  249. package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +0 -19
  250. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +15 -8
  251. package/src/runtime/agent/orchestrator/session/store/listing.mjs +18 -29
  252. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +6 -36
  253. package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +148 -0
  254. package/src/runtime/agent/orchestrator/session/store/save-fault.mjs +3 -3
  255. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +15 -142
  256. package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +3 -3
  257. package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +4 -2
  258. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +1 -1
  259. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +3 -2
  260. package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +9 -22
  261. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +14 -6
  262. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +200 -52
  263. package/src/runtime/agent/orchestrator/session/store-summary-log.mjs +81 -0
  264. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +38 -4
  265. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +5 -2
  266. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +3 -5
  267. package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +54 -0
  268. package/src/runtime/agent/orchestrator/session/store.mjs +5 -9
  269. package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +19 -8
  270. package/src/runtime/agent/orchestrator/session/tool-batch/flush.mjs +1 -1
  271. package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
  272. package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
  273. package/src/runtime/agent/orchestrator/session/transcript-restore/agent-envelope.mjs +489 -0
  274. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +419 -0
  275. package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +358 -0
  276. package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +157 -0
  277. package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +2 -3
  278. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +32 -11
  279. package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -31
  280. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/benign-exit.mjs +7 -3
  281. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +11 -3
  282. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +4 -0
  283. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +13 -7
  284. package/src/runtime/agent/orchestrator/tools/builtin/binary-file.mjs +6 -3
  285. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +11 -5
  286. package/src/runtime/agent/orchestrator/tools/builtin/device-paths.mjs +1 -206
  287. package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +1 -1
  288. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +39 -3
  289. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +5 -7
  290. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-request.mjs +7 -25
  291. package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +27 -1
  292. package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +37 -0
  293. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-insights.mjs +1 -1
  294. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +28 -18
  295. package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +6 -10
  296. package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +15 -17
  297. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +3 -3
  298. package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +1 -399
  299. package/src/runtime/agent/orchestrator/tools/builtin/read-line-collector.mjs +3 -2
  300. package/src/runtime/agent/orchestrator/tools/builtin/read-office-files.mjs +8 -15
  301. package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +5 -8
  302. package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +3 -2
  303. package/src/runtime/agent/orchestrator/tools/builtin/read-source-windows.mjs +2 -2
  304. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +6 -5
  305. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-dispatch.mjs +50 -5
  306. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-render.mjs +1 -1
  307. package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-snapshot.mjs +2 -5
  308. package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +11 -1
  309. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +1 -1
  310. package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +3 -35
  311. package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +0 -12
  312. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +50 -0
  313. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +9 -26
  314. package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +2 -1
  315. package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +6 -5
  316. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +8 -3
  317. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +6 -14
  318. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-validation.mjs +3 -9
  319. package/src/runtime/agent/orchestrator/tools/builtin/tool-output-limit.mjs +1 -60
  320. package/src/runtime/agent/orchestrator/tools/builtin.mjs +10 -32
  321. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +2 -2
  322. package/src/runtime/agent/orchestrator/tools/code-graph/modes/calls.mjs +3 -3
  323. package/src/runtime/agent/orchestrator/tools/code-graph/project-root.mjs +3 -7
  324. package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +15 -10
  325. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +6 -10
  326. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +4 -0
  327. package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +3 -3
  328. package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +3 -7
  329. package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +1 -84
  330. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +11 -11
  331. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
  332. package/src/runtime/agent/orchestrator/tools/io-trace.mjs +28 -0
  333. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +38 -5
  334. package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +10 -4
  335. package/src/runtime/agent/orchestrator/tools/patch/apply-patch/codex-batch.mjs +6 -26
  336. package/src/runtime/agent/orchestrator/tools/patch/apply-patch/request.mjs +0 -3
  337. package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-report.mjs +2 -1
  338. package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +3 -10
  339. package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +1 -1
  340. package/src/runtime/agent/orchestrator/tools/patch/mutation-output.mjs +6 -19
  341. package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +5 -15
  342. package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +1 -3
  343. package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +4 -0
  344. package/src/runtime/agent/orchestrator/tools/patch/sequence/run.mjs +1 -3
  345. package/src/runtime/agent/orchestrator/tools/patch/sequence/units.mjs +4 -10
  346. package/src/runtime/agent/orchestrator/tools/patch/sequence.mjs +1 -2
  347. package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +5 -11
  348. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +1 -2
  349. package/src/runtime/agent/orchestrator/tools/patch-manifest-path.mjs +3 -0
  350. package/src/runtime/agent/orchestrator/tools/patch-manifest.json +12 -12
  351. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +87 -12
  352. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +6 -3
  353. package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +1 -1
  354. package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +15 -25
  355. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
  356. package/src/runtime/{shared/llm → agent/orchestrator}/usage-log.mjs +1 -1
  357. package/src/runtime/attachments/pdf-extract.mjs +32 -29
  358. package/src/runtime/attachments/store.mjs +2 -1
  359. package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -2
  360. package/src/runtime/browser-bridge/client.mjs +30 -9
  361. package/src/runtime/channels/data/voice-runtime-manifest.json +21 -21
  362. package/src/runtime/channels/lib/config.mjs +4 -4
  363. package/src/runtime/channels/lib/event-pipeline.mjs +3 -3
  364. package/src/runtime/channels/lib/event-queue.mjs +1 -0
  365. package/src/runtime/channels/lib/executor.mjs +3 -25
  366. package/src/runtime/channels/lib/runtime-paths.mjs +36 -41
  367. package/src/runtime/channels/lib/scheduler.mjs +28 -44
  368. package/src/runtime/{shared → channels/lib}/schedules-db.mjs +3 -3
  369. package/src/runtime/channels/lib/tool-dispatch.mjs +3 -8
  370. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +19 -23
  371. package/src/runtime/channels/lib/voice-transcription.mjs +13 -9
  372. package/src/runtime/channels/lib/webhook/log.mjs +2 -29
  373. package/src/runtime/channels/lib/webhook/request-handler.mjs +4 -5
  374. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +8 -12
  375. package/src/runtime/channels/lib/webhook/signature.mjs +15 -19
  376. package/src/runtime/channels/lib/webhook/untrusted-fence.mjs +9 -0
  377. package/src/runtime/channels/lib/webhook.mjs +1 -1
  378. package/src/runtime/{shared → channels/lib}/webhooks-db.mjs +3 -3
  379. package/src/runtime/channels/lib/whisper-server.mjs +3 -2
  380. package/src/runtime/channels/lib/worker-bootstrap.mjs +19 -21
  381. package/src/runtime/channels/lib/worker-main.mjs +49 -58
  382. package/src/runtime/computer-bridge/client.mjs +7 -10
  383. package/src/runtime/computer-bridge/core-actions.mjs +1 -1
  384. package/src/runtime/computer-bridge/limits.d.mts +0 -1
  385. package/src/runtime/github/client.mjs +11 -6
  386. package/src/runtime/github/commands.mjs +4 -2
  387. package/src/runtime/github/contract.mjs +3 -1
  388. package/src/runtime/local-provider/hugging-face.mjs +3 -3
  389. package/src/runtime/local-provider/registered-models.mjs +3 -1
  390. package/src/runtime/local-provider/request-queue.mjs +24 -29
  391. package/src/runtime/local-provider/serial-chain.mjs +19 -0
  392. package/src/runtime/local-provider/server-process.mjs +2 -10
  393. package/src/runtime/media/adapters/antigravity-image.mjs +2 -2
  394. package/src/runtime/media/adapters/codex-image.mjs +2 -2
  395. package/src/runtime/media/adapters/gemini-image.mjs +2 -1
  396. package/src/runtime/media/adapters/gemini-video.mjs +3 -7
  397. package/src/runtime/media/adapters/xai-media.mjs +3 -7
  398. package/src/runtime/media/bounded-signal.mjs +13 -0
  399. package/src/runtime/media/store.mjs +9 -3
  400. package/src/runtime/memory/data/runtime-manifest.json +11 -11
  401. package/src/runtime/memory/index.mjs +6 -21
  402. package/src/runtime/memory/lib/core-memory-file.mjs +1 -1
  403. package/src/runtime/memory/lib/cycle-scheduler/backlog-probe.mjs +2 -1
  404. package/src/runtime/memory/lib/cycle1/cycle1-plan.mjs +1 -1
  405. package/src/runtime/memory/lib/embedding-idle-lease.mjs +18 -0
  406. package/src/runtime/memory/lib/embedding-provider.mjs +13 -0
  407. package/src/runtime/memory/lib/embedding-worker.mjs +12 -1
  408. package/src/runtime/memory/lib/http-router/ingest-routes.mjs +1 -1
  409. package/src/runtime/memory/lib/http-router/session-routes.mjs +1 -1
  410. package/src/runtime/memory/lib/ingest/transcript-discovery.mjs +1 -1
  411. package/src/runtime/memory/lib/memory-action-handlers/manage-actions.mjs +1 -1
  412. package/src/runtime/memory/lib/memory-cycle1.mjs +24 -1
  413. package/src/runtime/memory/lib/memory-cycle2-quarantine.mjs +99 -0
  414. package/src/runtime/memory/lib/memory-cycle2-review.mjs +8 -2
  415. package/src/runtime/memory/lib/memory-cycle2.mjs +49 -9
  416. package/src/runtime/memory/lib/memory-embed.mjs +3 -2
  417. package/src/runtime/memory/lib/memory-extraction.mjs +1 -2
  418. package/src/runtime/memory/lib/memory-fingerprint.mjs +1 -1
  419. package/src/runtime/memory/lib/memory-ops-policy.mjs +18 -2
  420. package/src/runtime/memory/lib/memory-retrievers.mjs +2 -2
  421. package/src/runtime/memory/lib/memory-text-utils.mjs +1 -1
  422. package/src/runtime/memory/lib/pg/adapter.mjs +3 -3
  423. package/src/runtime/memory/lib/pg/process.mjs +2 -2
  424. package/src/runtime/memory/lib/pg/supervisor.mjs +1 -2
  425. package/src/runtime/memory/lib/query-ranking.mjs +2 -2
  426. package/src/runtime/memory/lib/query-search-plan.mjs +1 -1
  427. package/src/runtime/memory/lib/recall-format.mjs +3 -4
  428. package/src/runtime/memory/lib/runtime-fetcher.mjs +94 -23
  429. package/src/runtime/memory/lib/session-ingest-runtime.mjs +1 -1
  430. package/src/runtime/memory/lib/trace-store.mjs +6 -2
  431. package/src/runtime/office/authoring/pptx-author-action.mjs +8 -3
  432. package/src/runtime/office/authoring/pptx-brief.mjs +3 -3
  433. package/src/runtime/office/authoring/pptx-html-build.mjs +109 -37
  434. package/src/runtime/office/authoring/pptx-html-geometry.mjs +188 -46
  435. package/src/runtime/office/authoring/pptx-html-measure.mjs +60 -21
  436. package/src/runtime/office/authoring/pptx-html-runner.mjs +83 -29
  437. package/src/runtime/office/authoring/pptx-script-normalize.mjs +156 -16
  438. package/src/runtime/office/bench/polish-benchmark.mjs +204 -201
  439. package/src/runtime/office/bench/quality-live-benchmark.mjs +8 -4
  440. package/src/runtime/office/capabilities-catalog.mjs +12 -1
  441. package/src/runtime/office/capabilities-signatures.mjs +31 -11
  442. package/src/runtime/office/capabilities.mjs +39 -20
  443. package/src/runtime/office/com/com-adapter.mjs +16 -14
  444. package/src/runtime/office/com/office-com-host.ps1 +118 -140
  445. package/src/runtime/office/core/excel-snapshot-normalize.mjs +149 -0
  446. package/src/runtime/office/core/office-actions-batch.mjs +4 -7
  447. package/src/runtime/office/core/office-actions-inspect.mjs +17 -14
  448. package/src/runtime/office/core/office-actions-open.mjs +1 -6
  449. package/src/runtime/office/core/office-core.mjs +107 -49
  450. package/src/runtime/office/core/office-finalize/review-stage.mjs +4 -1
  451. package/src/runtime/office/core/office-qa/design-review-stage.mjs +2 -9
  452. package/src/runtime/office/core/office-qa/review-assembly.mjs +9 -7
  453. package/src/runtime/office/core/office-sessions.mjs +10 -149
  454. package/src/runtime/office/design/composition-system.mjs +5 -10
  455. package/src/runtime/office/design/design-system.mjs +1 -2
  456. package/src/runtime/office/design/docx/design-docx/section.mjs +1 -1
  457. package/src/runtime/office/design/docx/design-docx-components.mjs +2 -1
  458. package/src/runtime/office/design/docx/design-docx.mjs +2 -2
  459. package/src/runtime/office/design/xlsx/design-xlsx.mjs +6 -2
  460. package/src/runtime/office/pdf/pdf-analysis.mjs +39 -32
  461. package/src/runtime/office/pdf/pdf-batch-content.mjs +1 -1
  462. package/src/runtime/office/pdf/pdf-writer.mjs +26 -22
  463. package/src/runtime/office/portable/docx-tracked-edits.mjs +6 -6
  464. package/src/runtime/office/portable/font-provisioner.mjs +37 -11
  465. package/src/runtime/office/portable/portable-cells.mjs +2 -6
  466. package/src/runtime/office/portable/portable-chart.mjs +6 -6
  467. package/src/runtime/office/portable/portable-docx-edits.mjs +4 -9
  468. package/src/runtime/office/portable/portable-docx-operations.mjs +16 -13
  469. package/src/runtime/office/portable/portable-docx-parts.mjs +7 -2
  470. package/src/runtime/office/portable/portable-docx-xml.mjs +36 -28
  471. package/src/runtime/office/portable/portable-opc.mjs +11 -13
  472. package/src/runtime/office/portable/portable-package.mjs +3 -4
  473. package/src/runtime/office/portable/portable-pivot.mjs +7 -3
  474. package/src/runtime/office/portable/portable-pptx-charts.mjs +59 -42
  475. package/src/runtime/office/portable/portable-pptx-core.mjs +14 -4
  476. package/src/runtime/office/portable/portable-pptx-package.mjs +5 -4
  477. package/src/runtime/office/portable/portable-pptx-shapes.mjs +25 -8
  478. package/src/runtime/office/portable/portable-sheet-audits.mjs +4 -8
  479. package/src/runtime/office/portable/portable-sheet-page.mjs +2 -2
  480. package/src/runtime/office/portable/portable-sheet-xml.mjs +1 -1
  481. package/src/runtime/office/portable/portable-snapshot-docx.mjs +2 -3
  482. package/src/runtime/office/portable/portable-snapshot-pptx.mjs +3 -1
  483. package/src/runtime/office/portable/portable-soffice.mjs +27 -22
  484. package/src/runtime/office/portable/portable-validation-package.mjs +1 -2
  485. package/src/runtime/office/portable/portable-validation.mjs +9 -3
  486. package/src/runtime/office/portable/portable-xlsx-operations.mjs +2 -49
  487. package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +10 -5
  488. package/src/runtime/office/portable/portable-xlsx-range-layout.mjs +3 -2
  489. package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +189 -98
  490. package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +26 -6
  491. package/src/runtime/office/portable/portable-xml.mjs +1 -4
  492. package/src/runtime/office/portable/text-metrics.mjs +14 -17
  493. package/src/runtime/office/portable/xlsx-contract.mjs +37 -3
  494. package/src/runtime/office/portable/xlsx-formula-engine.mjs +7 -1
  495. package/src/runtime/office/quality/assurance-checklist.mjs +1 -1
  496. package/src/runtime/office/quality/assurance-rendered.mjs +1 -1
  497. package/src/runtime/office/quality/assurance-structure-pptx.mjs +17 -8
  498. package/src/runtime/office/quality/assurance-structure.mjs +0 -2
  499. package/src/runtime/office/quality/design-aesthetics.mjs +2 -9
  500. package/src/runtime/office/quality/design-deck-diversity.mjs +2 -9
  501. package/src/runtime/office/quality/design-review.mjs +3 -3
  502. package/src/runtime/office/quality/pptx-slide-roles.mjs +3 -3
  503. package/src/runtime/office/shared/line-breaks.mjs +3 -1
  504. package/src/runtime/office/tool-defs.mjs +2 -2
  505. package/src/runtime/shared/async-log-appender.mjs +83 -0
  506. package/src/runtime/shared/automation-presence.mjs +9 -0
  507. package/src/runtime/shared/buffered-appender.mjs +10 -7
  508. package/src/runtime/shared/child-spawn-gate.mjs +2 -37
  509. package/src/runtime/shared/code-graph-state.mjs +84 -0
  510. package/src/runtime/shared/config.mjs +71 -89
  511. package/src/runtime/shared/context-inspection.mjs +56 -0
  512. package/src/runtime/shared/context-measurement.mjs +83 -0
  513. package/src/runtime/shared/device-paths.mjs +206 -0
  514. package/src/{standalone → runtime/shared}/fair-call-scheduler/owner-groups.mjs +1 -1
  515. package/src/runtime/shared/fair-call-scheduler.mjs +198 -0
  516. package/src/runtime/shared/file-lock.mjs +85 -55
  517. package/src/runtime/shared/http-request-body.mjs +3 -1
  518. package/src/runtime/shared/llm/anthropic-betas.mjs +46 -0
  519. package/src/runtime/shared/llm/anthropic-effort.mjs +378 -0
  520. package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +29 -0
  521. package/src/runtime/shared/llm/cost.mjs +19 -10
  522. package/src/runtime/shared/llm/model-catalog-projection.mjs +182 -0
  523. package/src/runtime/shared/llm/model-catalog.mjs +799 -0
  524. package/src/runtime/shared/llm/model-pricing-rates.mjs +78 -0
  525. package/src/runtime/shared/llm/provider-catalog-cache.mjs +130 -0
  526. package/src/runtime/shared/llm/usage-accounting.mjs +12 -11
  527. package/src/runtime/shared/llm/usage-context.mjs +7 -0
  528. package/src/runtime/shared/llm/usage-ledger-import.mjs +14 -3
  529. package/src/runtime/shared/llm/usage-ledger-quota.mjs +97 -37
  530. package/src/runtime/shared/llm/usage-ledger-repair.mjs +3 -1
  531. package/src/runtime/shared/llm/usage-ledger-rollup.mjs +6 -10
  532. package/src/runtime/shared/llm/usage-ledger.mjs +6 -7
  533. package/src/runtime/shared/llm/usage-pricing-refresh.mjs +1 -1
  534. package/src/runtime/shared/llm/usage-rollup.mjs +0 -1
  535. package/src/runtime/shared/model-display.mjs +178 -0
  536. package/src/runtime/shared/notify-trace.mjs +14 -3
  537. package/src/runtime/shared/owner-fair-gate.mjs +1 -1
  538. package/src/runtime/shared/pending-json-projection.mjs +17 -0
  539. package/src/runtime/shared/pristine-execution.mjs +4 -3
  540. package/src/runtime/shared/process-lifecycle.mjs +18 -7
  541. package/src/runtime/shared/read-image-resize.mjs +399 -0
  542. package/src/runtime/shared/schedule-model-ref.mjs +2 -2
  543. package/src/runtime/shared/staged-update.mjs +7 -36
  544. package/src/runtime/shared/statusline/ansi.mjs +161 -0
  545. package/src/{ui → runtime/shared/statusline}/statusline-format.mjs +5 -5
  546. package/src/{ui → runtime/shared/statusline}/statusline-segments.mjs +54 -50
  547. package/src/runtime/shared/tool-card-model/background-task.mjs +1 -1
  548. package/src/runtime/shared/tool-card-model/card-detail.mjs +2 -2
  549. package/src/runtime/shared/tool-card-model/card-status.mjs +7 -5
  550. package/src/runtime/shared/tool-card-model/git-result.mjs +10 -0
  551. package/src/runtime/shared/tool-card-model/terminal-status.mjs +6 -2
  552. package/src/runtime/shared/tool-card-model.golden-cases.mjs +2 -1
  553. package/src/runtime/shared/tool-output-limit.mjs +60 -0
  554. package/src/runtime/shared/tool-primitives.mjs +1 -1
  555. package/src/runtime/shared/tool-result-summary.mjs +1 -0
  556. package/src/runtime/shared/tool-status.mjs +35 -2
  557. package/src/runtime/shared/transcript-metadata.mjs +1 -1
  558. package/src/runtime/shared/transcript-writer/transcript-file.mjs +1 -2
  559. package/src/runtime/shared/turn-snapshot-store.mjs +23 -17
  560. package/src/runtime/shared/turn-worktree-snapshot.mjs +8 -4
  561. package/src/runtime/shared/update-checker.mjs +1 -3
  562. package/src/runtime/tidy/apply.mjs +2 -2
  563. package/src/runtime/tidy/function-length.mjs +63 -0
  564. package/src/runtime/tidy/report.mjs +6 -3
  565. package/src/runtime/tidy/runners/shared.mjs +1 -0
  566. package/src/runtime/tidy/runners/shellcheck.mjs +1 -1
  567. package/src/runtime/tidy/tool.mjs +10 -3
  568. package/src/runtime/web-search/index.mjs +6 -17
  569. package/src/runtime/web-search/lib/cache.mjs +8 -54
  570. package/src/runtime/web-search/lib/config.mjs +2 -6
  571. package/src/runtime/web-search/lib/debounced-json-writer.mjs +62 -0
  572. package/src/runtime/web-search/lib/http-fetch.mjs +24 -112
  573. package/src/runtime/web-search/lib/package-version.mjs +10 -0
  574. package/src/runtime/web-search/lib/ssrf-guard.mjs +34 -28
  575. package/src/runtime/web-search/lib/state.mjs +8 -53
  576. package/src/runtime/web-search/lib/web-tools.mjs +5 -5
  577. package/src/session-runtime/agent-tool-routing.mjs +3 -9
  578. package/src/{runtime/shared → session-runtime}/automation-workflow.mjs +4 -4
  579. package/src/session-runtime/boot/apis.mjs +4 -5
  580. package/src/session-runtime/boot/begin.mjs +1 -1
  581. package/src/session-runtime/boot/config.mjs +2 -2
  582. package/src/session-runtime/boot/facade.mjs +2 -2
  583. package/src/session-runtime/boot/infrastructure.mjs +4 -4
  584. package/src/session-runtime/boot/providers.mjs +6 -6
  585. package/src/session-runtime/boot/session.mjs +1 -1
  586. package/src/session-runtime/boot/shared.mjs +5 -7
  587. package/src/session-runtime/boot/tools.mjs +6 -6
  588. package/src/session-runtime/bridge-first-use-gate.mjs +1 -1
  589. package/src/session-runtime/builtin-features.mjs +1 -193
  590. package/src/session-runtime/channel-config-api.mjs +3 -3
  591. package/src/session-runtime/config-helpers.mjs +1 -420
  592. package/src/session-runtime/config-lifecycle.mjs +2 -2
  593. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -2
  594. package/src/session-runtime/cwd-plugins/plugin-status.mjs +1 -1
  595. package/src/session-runtime/deferred-tool-delta.mjs +1 -101
  596. package/src/session-runtime/effort.mjs +1 -145
  597. package/src/session-runtime/goal-facade-api.mjs +1 -1
  598. package/src/session-runtime/goal-state.mjs +1 -325
  599. package/src/session-runtime/goal-tasks.mjs +1 -137
  600. package/src/session-runtime/goal-tool-defs.mjs +1 -140
  601. package/src/session-runtime/hook-payload.mjs +4 -5
  602. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -3
  603. package/src/session-runtime/internal-tool-executor/caller-context.mjs +8 -0
  604. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +3 -2
  605. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +4 -6
  606. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +2 -2
  607. package/src/session-runtime/internal-tool-executor.mjs +1 -1
  608. package/src/session-runtime/lifecycle/inheritance.mjs +1 -1
  609. package/src/session-runtime/lifecycle/session-catalog.mjs +3 -3
  610. package/src/session-runtime/lifecycle/session-switch/resume.mjs +2 -2
  611. package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +1 -1
  612. package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
  613. package/src/session-runtime/lifecycle/shared.mjs +1 -1
  614. package/src/session-runtime/mcp-glue/connect.mjs +1 -1
  615. package/src/session-runtime/mcp-glue/server-catalog.mjs +1 -1
  616. package/src/session-runtime/mcp-glue/server-input.mjs +1 -1
  617. package/src/session-runtime/model-capabilities.mjs +1 -140
  618. package/src/session-runtime/model-recency.mjs +1 -1
  619. package/src/session-runtime/model-route/route-persist.mjs +2 -2
  620. package/src/session-runtime/model-route/route-tuning.mjs +3 -3
  621. package/src/session-runtime/model-route/set-route.mjs +6 -6
  622. package/src/session-runtime/model-route/web-search-route.mjs +5 -5
  623. package/src/session-runtime/model-route-api.mjs +1 -1
  624. package/src/session-runtime/native-web-search/routes.mjs +1 -1
  625. package/src/session-runtime/native-web-search/tool-shape.mjs +2 -2
  626. package/src/session-runtime/output-styles.mjs +2 -2
  627. package/src/session-runtime/prewarm/channel-start.mjs +1 -0
  628. package/src/session-runtime/provider-auth/accounts.mjs +7 -2
  629. package/src/session-runtime/provider-auth/login.mjs +1 -1
  630. package/src/session-runtime/provider-auth-api.mjs +1 -1
  631. package/src/session-runtime/provider-models/model-meta.mjs +1 -1
  632. package/src/session-runtime/provider-models/row-hydration.mjs +3 -3
  633. package/src/session-runtime/provider-usage.mjs +2 -2
  634. package/src/session-runtime/quick-model-rows/model-meta.mjs +1 -1
  635. package/src/session-runtime/quick-model-rows/provider-rows.mjs +1 -1
  636. package/src/session-runtime/quick-model-rows/web-search-rows.mjs +2 -2
  637. package/src/session-runtime/resource-api.mjs +2 -2
  638. package/src/session-runtime/resource-mcp-api.mjs +3 -3
  639. package/src/session-runtime/resource-plugins-api.mjs +3 -3
  640. package/src/session-runtime/resource-recall-api.mjs +2 -2
  641. package/src/session-runtime/resource-scope-decorate.mjs +2 -2
  642. package/src/session-runtime/route-resolution.mjs +3 -3
  643. package/src/session-runtime/route-state.mjs +4 -4
  644. package/src/session-runtime/runtime-bootstrap.mjs +1 -1
  645. package/src/session-runtime/runtime-facade.mjs +1 -1
  646. package/src/session-runtime/runtime-feature-gates.mjs +2 -2
  647. package/src/session-runtime/runtime-modules.mjs +3 -3
  648. package/src/session-runtime/runtime-paths.mjs +6 -2
  649. package/src/session-runtime/runtime-tool-routing.mjs +2 -2
  650. package/src/{runtime/shared → session-runtime}/schedule-session-run.mjs +5 -5
  651. package/src/{standalone → session-runtime/services}/agent-task-status.mjs +1 -1
  652. package/src/{standalone → session-runtime/services}/agent-tool/close-flow/close-all.mjs +2 -2
  653. package/src/{standalone → session-runtime/services}/agent-tool/close-flow.mjs +1 -1
  654. package/src/{standalone → session-runtime/services}/agent-tool/execute.mjs +1 -1
  655. package/src/{standalone → session-runtime/services}/agent-tool/helpers.mjs +6 -6
  656. package/src/session-runtime/services/agent-tool/index-write-queue.mjs +209 -0
  657. package/src/{standalone → session-runtime/services}/agent-tool/job-task-reconcile.mjs +2 -2
  658. package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-lookup.mjs +5 -1
  659. package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-render.mjs +1 -1
  660. package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +101 -0
  661. package/src/{standalone → session-runtime/services}/agent-tool/job-views/spawn-meta.mjs +1 -1
  662. package/src/session-runtime/services/agent-tool/job-views.mjs +59 -0
  663. package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +48 -0
  664. package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/row-settlement.mjs +3 -3
  665. package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index.mjs +10 -2
  666. package/src/{standalone → session-runtime/services}/agent-tool/notify/early-completion.mjs +2 -2
  667. package/src/{standalone → session-runtime/services}/agent-tool/notify.mjs +4 -4
  668. package/src/{standalone → session-runtime/services}/agent-tool/render.mjs +2 -2
  669. package/src/{standalone → session-runtime/services}/agent-tool/send-flow.mjs +6 -2
  670. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/job-start.mjs +2 -2
  671. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-plan.mjs +3 -3
  672. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-prep.mjs +3 -3
  673. package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-run.mjs +3 -3
  674. package/src/{standalone → session-runtime/services}/agent-tool/spawn-preset.mjs +1 -1
  675. package/src/session-runtime/services/agent-tool/tag-registry.mjs +121 -0
  676. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/reap-timers.mjs +1 -1
  677. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/scan-admission.mjs +1 -1
  678. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/stale-rows.mjs +1 -1
  679. package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/tombstones.mjs +5 -2
  680. package/src/session-runtime/services/agent-tool/tool-def.mjs +60 -0
  681. package/src/{standalone → session-runtime/services}/agent-tool/turn-review.mjs +1 -1
  682. package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-liveness.mjs +1 -1
  683. package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-store.mjs +46 -20
  684. package/src/{standalone → session-runtime/services}/agent-tool/worker-index.mjs +8 -1
  685. package/src/{standalone → session-runtime/services}/agent-tool/worker-rows.mjs +1 -1
  686. package/src/session-runtime/services/agent-tool.mjs +151 -0
  687. package/src/{standalone → session-runtime/services}/agent-watchdog-registry.mjs +1 -1
  688. package/src/{standalone → session-runtime/services}/channel-admin.mjs +8 -10
  689. package/src/{standalone → session-runtime/services}/channel-client.mjs +1 -1
  690. package/src/{standalone → session-runtime/services}/channel-session-router.mjs +1 -1
  691. package/src/{standalone → session-runtime/services}/channel-worker/client-heartbeat.mjs +1 -1
  692. package/src/{standalone → session-runtime/services}/channel-worker/daemon-attach.mjs +1 -1
  693. package/src/{standalone → session-runtime/services}/channel-worker/daemon-spawn.mjs +5 -5
  694. package/src/session-runtime/services/channel-worker.mjs +140 -0
  695. package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +189 -0
  696. package/src/{standalone → session-runtime/services}/daemon-crash-capture/retention.mjs +1 -1
  697. package/src/{standalone → session-runtime/services}/daemon-crash-capture/spawn-capture.mjs +12 -1
  698. package/src/{standalone → session-runtime/services}/daemon-crash-capture.mjs +6 -0
  699. package/src/{standalone → session-runtime/services}/hook-bus/command-handler.mjs +1 -1
  700. package/src/{standalone → session-runtime/services}/hook-bus/event-runner.mjs +1 -1
  701. package/src/{standalone → session-runtime/services}/hook-bus/handler-dispatch.mjs +1 -1
  702. package/src/{standalone → session-runtime/services}/hook-bus/handlers.mjs +5 -4
  703. package/src/{standalone → session-runtime/services}/hook-bus/rule-file.mjs +2 -2
  704. package/src/{standalone → session-runtime/services}/hook-bus/tool-gate.mjs +1 -1
  705. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/client-registry.mjs +1 -1
  706. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/daemon-spawn.mjs +4 -4
  707. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/discovery.mjs +5 -5
  708. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/owner-claim.mjs +2 -2
  709. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/rpc.mjs +0 -4
  710. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/start.mjs +1 -1
  711. package/src/{standalone → session-runtime/services}/memory-runtime-proxy/tool-wire.mjs +1 -1
  712. package/src/session-runtime/services/memory-runtime-proxy.mjs +130 -0
  713. package/src/{standalone → session-runtime/services}/plugin-admin.mjs +6 -6
  714. package/src/session-runtime/services/provider-admin.mjs +576 -0
  715. package/src/{standalone → session-runtime/services}/seeds.mjs +3 -3
  716. package/src/{standalone → session-runtime/services}/usage-dashboard-model.mjs +1 -1
  717. package/src/session-runtime/services/usage-dashboard.mjs +278 -0
  718. package/src/{standalone → session-runtime/services}/usage-stats-hours.mjs +1 -1
  719. package/src/session-runtime/services/usage-stats-model.mjs +657 -0
  720. package/src/session-runtime/services/usage-stats-period.mjs +178 -0
  721. package/src/session-runtime/session-create/materialize.mjs +3 -3
  722. package/src/session-runtime/session-create/session-options.mjs +14 -7
  723. package/src/session-runtime/session-lifecycle.mjs +2 -2
  724. package/src/session-runtime/settings-builtin-tools-api.mjs +1 -1
  725. package/src/session-runtime/setup-tool/executor.mjs +2 -2
  726. package/src/session-runtime/skills-api.mjs +2 -2
  727. package/src/session-runtime/statusline-route.mjs +1 -1
  728. package/src/session-runtime/tool-catalog.mjs +1 -753
  729. package/src/session-runtime/tool-defs.mjs +1 -149
  730. package/src/session-runtime/tool-policy-refresh.mjs +7 -5
  731. package/src/session-runtime/tool-surface.mjs +5 -5
  732. package/src/session-runtime/turn/agent-ops.mjs +2 -2
  733. package/src/session-runtime/turn/session-ops.mjs +2 -2
  734. package/src/session-runtime/turn/share-ops.mjs +4 -3
  735. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +1 -1
  736. package/src/session-runtime/turn/turn-run/turn-settle.mjs +4 -4
  737. package/src/session-runtime/usage-stats-api.mjs +18 -2
  738. package/src/session-runtime/warmup/statusline-usage-warmup.mjs +2 -2
  739. package/src/{runtime/shared → session-runtime}/webhook-session-run.mjs +5 -5
  740. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +2 -2
  741. package/src/session-runtime/workflow-agents-api/agent-route.mjs +4 -4
  742. package/src/session-runtime/workflow-agents-api/onboarding.mjs +2 -2
  743. package/src/session-runtime/workflow-agents-api/shared.mjs +4 -6
  744. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +1 -1
  745. package/src/session-runtime/workflow.mjs +1 -255
  746. package/src/standalone/agent-tool/job-views/session-progress.mjs +1 -101
  747. package/src/standalone/agent-tool/job-views.mjs +1 -59
  748. package/src/standalone/agent-tool/tag-registry.mjs +1 -121
  749. package/src/standalone/agent-tool/tool-def.mjs +1 -60
  750. package/src/standalone/agent-tool.mjs +1 -151
  751. package/src/standalone/channel-worker.mjs +1 -140
  752. package/src/standalone/daemon-agent-control.mjs +1 -1
  753. package/src/standalone/daemon-desktop-runtime.mjs +2 -2
  754. package/src/standalone/daemon-stored-session-views.mjs +1 -1
  755. package/src/standalone/daemon.mjs +38 -5
  756. package/src/standalone/fair-call-scheduler.mjs +1 -198
  757. package/src/standalone/folder-dialog.mjs +12 -8
  758. package/src/standalone/memory-runtime-proxy.mjs +1 -130
  759. package/src/standalone/provider-admin.mjs +1 -576
  760. package/src/standalone/session-client/frame-stream.mjs +1 -1
  761. package/src/standalone/session-client.mjs +2 -2
  762. package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -1
  763. package/src/standalone/session-service/projection/transcript-window.mjs +2 -2
  764. package/src/standalone/usage-dashboard.mjs +1 -278
  765. package/src/standalone/usage-stats-model.mjs +1 -653
  766. package/src/standalone/usage-stats-period.mjs +1 -178
  767. package/src/tui/App.jsx +107 -256
  768. package/src/tui/app/app-view/floating-panel.jsx +3 -12
  769. package/src/tui/app/app-view/welcome-banner.jsx +36 -0
  770. package/src/tui/app/app-view.jsx +18 -45
  771. package/src/tui/app/create-app-pickers.mjs +1 -1
  772. package/src/tui/app/doctor.mjs +15 -1
  773. package/src/tui/app/extension-pickers/mcp-servers-picker.mjs +7 -3
  774. package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +5 -8
  775. package/src/tui/app/model-options.mjs +2 -3
  776. package/src/tui/app/model-picker/model-footer.mjs +1 -1
  777. package/src/tui/app/model-picker/route-selection.mjs +1 -3
  778. package/src/tui/app/mouse-input/button-gestures.mjs +13 -31
  779. package/src/tui/app/mouse-input/wheel-router.mjs +22 -32
  780. package/src/tui/app/picker-enter-latch.mjs +21 -0
  781. package/src/tui/app/picker-index-mode.mjs +34 -0
  782. package/src/tui/app/shell-layout/panel-transition.mjs +7 -12
  783. package/src/tui/app/shell-layout/row-budgets.mjs +4 -9
  784. package/src/tui/app/slash-palette.mjs +31 -0
  785. package/src/tui/app/text-layout.mjs +1 -1
  786. package/src/tui/app/theme-effort-pickers.mjs +1 -1
  787. package/src/tui/app/transcript-window.mjs +1 -5
  788. package/src/tui/app/usage-context-panels/context-model.mjs +1 -1
  789. package/src/tui/app/use-global-key-input.mjs +0 -1
  790. package/src/tui/app/use-interaction-refs.mjs +55 -0
  791. package/src/tui/app/use-onboarding-start.mjs +45 -0
  792. package/src/tui/app/use-panel-transition.mjs +40 -0
  793. package/src/tui/app/use-prompt-draft-flow.mjs +4 -13
  794. package/src/tui/app/use-prompt-layout-rows.mjs +39 -0
  795. package/src/tui/app/use-prompt-queue-history/prompt-history.mjs +1 -1
  796. package/src/tui/app/use-prompt-state.mjs +40 -0
  797. package/src/tui/app/use-selection-paint.mjs +9 -5
  798. package/src/tui/app/use-transcript-scroll-state.mjs +61 -0
  799. package/src/tui/app/use-transcript-window.mjs +0 -1
  800. package/src/tui/app/use-ui-open-request.mjs +18 -0
  801. package/src/tui/app/use-workflow-tab-cycle.mjs +39 -0
  802. package/src/tui/components/ContextInspector.jsx +1 -1
  803. package/src/tui/components/ContextPanel.jsx +1 -1
  804. package/src/tui/components/Picker.jsx +41 -322
  805. package/src/tui/components/PromptInput.jsx +34 -468
  806. package/src/tui/components/StatusLine.jsx +8 -555
  807. package/src/tui/components/TextEntryPanel.jsx +25 -211
  808. package/src/tui/components/ToolExecution.jsx +43 -328
  809. package/src/tui/components/UsagePanel.jsx +1 -1
  810. package/src/tui/components/picker/PickerItemRow.jsx +85 -0
  811. package/src/tui/components/picker/picker-layout.mjs +46 -0
  812. package/src/tui/components/picker/use-picker-input.mjs +165 -0
  813. package/src/tui/components/picker/use-picker-selection.mjs +67 -0
  814. package/src/tui/components/prompt-input/edit-chords.mjs +87 -0
  815. package/src/tui/components/prompt-input/edit-helpers.mjs +15 -12
  816. package/src/tui/components/prompt-input/escape-key.mjs +87 -0
  817. package/src/tui/components/prompt-input/key-handler.mjs +364 -0
  818. package/src/tui/components/status-line/boot-schedule.mjs +83 -0
  819. package/src/tui/components/status-line/local-line.mjs +213 -0
  820. package/src/tui/components/status-line/use-statusline-text.mjs +319 -0
  821. package/src/tui/components/statusline-module-loader.mjs +21 -0
  822. package/src/tui/components/text-entry-layout.mjs +104 -0
  823. package/src/tui/components/text-entry-value.jsx +47 -0
  824. package/src/tui/components/tool-execution/aggregate-card.jsx +141 -0
  825. package/src/tui/components/tool-execution/pending-placeholder.jsx +24 -0
  826. package/src/tui/components/tool-execution/standard-card.jsx +229 -0
  827. package/src/tui/components/tool-output-format.mjs +3 -5
  828. package/src/tui/dist/index.mjs +3616 -3022
  829. package/src/tui/index.jsx +85 -66
  830. package/src/tui/markdown/format-token.mjs +3 -3
  831. package/src/tui/paste-attachments.mjs +1 -1
  832. package/src/tui/prompt-history-store.mjs +17 -6
  833. package/src/tui/session/agent-envelope.mjs +1 -489
  834. package/src/tui/session/context-state.mjs +2 -2
  835. package/src/tui/session/goal-continuation/continuation-queue.mjs +1 -1
  836. package/src/tui/session/goal-continuation/deadline-delivery.mjs +1 -1
  837. package/src/tui/session/goal-continuation/goal-visibility.mjs +1 -1
  838. package/src/tui/session/initial-state.mjs +1 -1
  839. package/src/tui/session/live-share/wire.mjs +3 -0
  840. package/src/tui/session/oauth-flows.mjs +1 -7
  841. package/src/tui/session/session-api/commands.mjs +5 -3
  842. package/src/tui/session/session-api/controls.mjs +1 -1
  843. package/src/tui/session/session-api/intake/submission.mjs +8 -3
  844. package/src/tui/session/session-api/integrations.mjs +1 -1
  845. package/src/tui/session/session-api/routes.mjs +9 -8
  846. package/src/tui/session/session-api/settings.mjs +24 -23
  847. package/src/tui/session/session-api/shared.mjs +13 -2
  848. package/src/tui/session/session-api-ext.mjs +7 -415
  849. package/src/tui/session/session-flow/drain.mjs +86 -82
  850. package/src/tui/session/session-flow/queue.mjs +3 -1
  851. package/src/tui/session/tool-result-status.mjs +1 -354
  852. package/src/tui/session/tool-result-text.mjs +1 -157
  853. package/src/tui/session/transcript-intake.mjs +1 -1
  854. package/src/tui/session/transcript-spill/spill-dir.mjs +4 -1
  855. package/src/tui/session/transcript-spill/spill-writer.mjs +1 -1
  856. package/src/tui/session/tui-steering-persist.mjs +44 -86
  857. package/src/tui/session-local.mjs +8 -5
  858. package/src/tui/statusline-ansi-bridge.mjs +1 -1
  859. package/src/tui/theme.mjs +1 -1
  860. package/src/ui/ansi.mjs +1 -161
  861. package/src/ui/context-inspection.mjs +1 -56
  862. package/src/ui/context-measurement.mjs +1 -83
  863. package/src/ui/markdown.mjs +3 -3
  864. package/src/ui/model-display.mjs +1 -173
  865. package/src/ui/statusline-agents.mjs +22 -21
  866. package/src/ui/statusline.mjs +21 -24
  867. package/src/ui/stream-finalize.mjs +1 -1
  868. package/src/ui/tool-card.mjs +1 -1
  869. package/src/vendor/statusline/src/gateway/route-meta.mjs +157 -29
  870. package/scripts/fixtures/spawn-lease-child-harness.mjs +0 -8
  871. package/scripts/fixtures/spawn-lease-fixture-worker.mjs +0 -37
  872. package/src/runtime/agent/orchestrator/activity-bus.mjs +0 -31
  873. package/src/runtime/shared/child-spawn-remote.mjs +0 -210
  874. package/src/runtime/shared/session-runtime-health.mjs +0 -201
  875. package/src/standalone/agent-tool/lead-worker-index/index-file.mjs +0 -45
  876. package/src/standalone/session-runtime-agent-control-client.mjs +0 -117
  877. package/src/standalone/session-runtime-agent-control.mjs +0 -85
  878. package/src/standalone/session-runtime-host-factory.mjs +0 -22
  879. package/src/standalone/session-runtime-host.mjs +0 -742
  880. package/src/standalone/session-runtime-provider-cooldown.mjs +0 -78
  881. package/src/standalone/session-runtime-proxy.mjs +0 -164
  882. package/src/standalone/session-runtime-record.mjs +0 -18
  883. package/src/standalone/session-runtime-shard-router.mjs +0 -151
  884. package/src/standalone/session-runtime-spawn-leases.mjs +0 -82
  885. package/src/standalone/session-runtime-worker.mjs +0 -678
  886. package/src/standalone/session-runtime-workload.mjs +0 -98
  887. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-cache.mjs +0 -0
  888. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/deferred-tool-availability.mjs +0 -0
  889. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-deadlines.mjs +0 -0
  890. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-runtime.mjs +0 -0
  891. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-store.mjs +0 -0
  892. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-text.mjs +0 -0
  893. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-tool-exec.mjs +0 -0
  894. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-snapshot.mjs +0 -0
  895. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-tools.mjs +0 -0
  896. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-data.mjs +0 -0
  897. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-profile.mjs +0 -0
  898. /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/shared-scan-cache.mjs +0 -0
  899. /package/src/{standalone → runtime/shared}/fair-call-scheduler/queue-item.mjs +0 -0
  900. /package/src/runtime/{agent/orchestrator/providers → shared/llm}/provider-model-identities.mjs +0 -0
  901. /package/src/{standalone → runtime/shared}/projects.mjs +0 -0
  902. /package/src/{standalone → session-runtime/services}/agent-tool/execute-send.mjs +0 -0
  903. /package/src/{standalone → session-runtime/services}/agent-tool/execute-spawn.mjs +0 -0
  904. /package/src/{standalone → session-runtime/services}/agent-tool/job-views/agent-list.mjs +0 -0
  905. /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/lead-rows.mjs +0 -0
  906. /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/reap-timers.mjs +0 -0
  907. /package/src/{standalone → session-runtime/services}/agent-tool/provider-init.mjs +0 -0
  908. /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/deferred-spawn.mjs +0 -0
  909. /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow.mjs +0 -0
  910. /package/src/{standalone → session-runtime/services}/agent-tool/tag-maps.mjs +0 -0
  911. /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-lookup.mjs +0 -0
  912. /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-refresh.mjs +0 -0
  913. /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/row-helpers.mjs +0 -0
  914. /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper.mjs +0 -0
  915. /package/src/{standalone → session-runtime/services}/agent-tool/terminal-trace.mjs +0 -0
  916. /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/mutation-batch.mjs +0 -0
  917. /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-shape.mjs +0 -0
  918. /package/src/{standalone → session-runtime/services}/channel-client/daemon-request.mjs +0 -0
  919. /package/src/{standalone → session-runtime/services}/channel-client/notify-stream.mjs +0 -0
  920. /package/src/{standalone → session-runtime/services}/channel-client/reconnect.mjs +0 -0
  921. /package/src/{standalone → session-runtime/services}/channel-client/registration.mjs +0 -0
  922. /package/src/{standalone → session-runtime/services}/daemon-candidate.mjs +0 -0
  923. /package/src/{standalone → session-runtime/services}/daemon-crash-capture/paths.mjs +0 -0
  924. /package/src/{standalone → session-runtime/services}/hook-bus/config-loader.mjs +0 -0
  925. /package/src/{standalone → session-runtime/services}/hook-bus/config.mjs +0 -0
  926. /package/src/{standalone → session-runtime/services}/hook-bus/constants.mjs +0 -0
  927. /package/src/{standalone → session-runtime/services}/hook-bus/event-log.mjs +0 -0
  928. /package/src/{standalone → session-runtime/services}/hook-bus/handler-timeout.mjs +0 -0
  929. /package/src/{standalone → session-runtime/services}/hook-bus/payload.mjs +0 -0
  930. /package/src/{standalone → session-runtime/services}/hook-bus/rule-store.mjs +0 -0
  931. /package/src/{standalone → session-runtime/services}/hook-bus/rules.mjs +0 -0
  932. /package/src/{standalone → session-runtime/services}/hook-bus.mjs +0 -0
  933. /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/calls.mjs +0 -0
  934. /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/state.mjs +0 -0
  935. /package/src/{standalone → session-runtime/services}/sse-frames.mjs +0 -0
@@ -97,7 +97,10 @@ async function formatPivotValues(zip, xml, area, destination, anchor, layout) {
97
97
  layout.valueFields.forEach((field, position) => {
98
98
  const id = numberFormatId(nextStyles, formats[position]);
99
99
  if (!id) return;
100
- table = table.replace(new RegExp(`(<dataField\\b[^>]*\\bfld="${field}")([^>]*?)(\\/?>)`), `$1$2 numFmtId="${id}"$3`);
100
+ table = table.replace(
101
+ new RegExp(`(<dataField\\b[^>]*\\bfld="${field}")([^>]*?)(\\/?>)`),
102
+ `$1$2 numFmtId="${id}"$3`
103
+ );
101
104
  });
102
105
  zip.file(layout.tablePart, table);
103
106
  }
@@ -125,6 +128,8 @@ export async function addWorksheetPivotTable(zip, sheet, xml, op) {
125
128
  `MixdogPivot${Object.keys(zip.files).filter((part) => /^xl\/pivotTables\/pivotTable\d+\.xml$/.test(part)).length + 1}`
126
129
  );
127
130
  const axes = [...rowNames, ...columnNames].map(fieldIndex);
131
+ const valueFields = valueNames.map(fieldIndex);
132
+ const columnField = columnNames.length ? fieldIndex(columnNames[0]) : -1;
128
133
  const written = await writePivotTable(zip, {
129
134
  fields: summarizePivotFields(headers, records, axes),
130
135
  records,
@@ -134,13 +139,13 @@ export async function addWorksheetPivotTable(zip, sheet, xml, op) {
134
139
  destination: String(op.destination || 'A1'),
135
140
  name: pivotName,
136
141
  rowField: rowNames.length ? fieldIndex(rowNames[0]) : -1,
137
- columnField: columnNames.length ? fieldIndex(columnNames[0]) : -1,
138
- valueFields: valueNames.map(fieldIndex),
142
+ columnField,
143
+ valueFields,
139
144
  });
140
145
  const anchor = parseAreaRange(String(op.destination || 'A1'));
141
146
  await formatPivotValues(zip, xml, area, destination, anchor, {
142
- valueFields: valueNames.map(fieldIndex),
143
- columnField: columnNames.length ? fieldIndex(columnNames[0]) : -1,
147
+ valueFields,
148
+ columnField,
144
149
  rows: written.rows,
145
150
  columns: written.columns,
146
151
  tablePart: written.tablePart,
@@ -21,7 +21,6 @@ import { resolveCellStyles } from './portable-sheet-styles.mjs';
21
21
  import { columnFileWidth, maximumDigitWidth, textCharacters } from './portable-sheet-page.mjs';
22
22
  import {
23
23
  cellWidthScale,
24
- displayWidth,
25
24
  formattedNumberWidth,
26
25
  hiddenSheetAreas,
27
26
  mergedRanges,
@@ -152,7 +151,9 @@ function writeSortedRows(xml, sorted, area, firstRow, refAt) {
152
151
  return { ref, formula: sortedFormula(formula, parseCellRef(ref).row - row) };
153
152
  } catch (error) {
154
153
  if (!(error instanceof UnsupportedFormula)) throw error;
155
- throw new Error(`XLSX sort_range cannot move the formula in ${refAt(row, columnNumber(parseCellRef(ref).col))} (=${formula}): ${error.reason}.`);
154
+ throw new Error(
155
+ `XLSX sort_range cannot move the formula in ${refAt(row, columnNumber(parseCellRef(ref).col))} (=${formula}): ${error.reason}.`
156
+ );
156
157
  }
157
158
  })
158
159
  );
@@ -24,11 +24,13 @@ function movedSpan(start, end, move) {
24
24
  const { from, amount } = move;
25
25
  if (move.insert) {
26
26
  const first = start >= from ? start + amount : start;
27
- return first > move.limit ? null : [first, Math.min(end >= from ? end + amount : end, move.limit)];
27
+ if (first > move.limit) return null;
28
+ return [first, Math.min(end >= from ? end + amount : end, move.limit)];
28
29
  }
29
30
  const last = from + amount - 1;
30
- const first = start < from ? start : start > last ? start - amount : from;
31
- const final = end < from ? end : end > last ? end - amount : from - 1;
31
+ const closedUp = (index, fallback) => (index > last ? index - amount : fallback);
32
+ const first = start < from ? start : closedUp(start, from);
33
+ const final = end < from ? end : closedUp(end, from - 1);
32
34
  return final < first ? null : [first, final];
33
35
  }
34
36
 
@@ -44,23 +46,29 @@ function referenceSpan(body, move) {
44
46
  const parts = body.split(':');
45
47
  const matched = parts.map((part) => REFERENCE_PART.exec(part));
46
48
  if (parts.length > 2 || matched.some((match) => !match || (!match[2] && !match[4]))) return null;
47
- const indices = matched.map((match) => (move.rows ? match[4] && Number(match[4]) : match[2] && columnNumber(match[2])));
49
+ const indices = matched.map((match) =>
50
+ move.rows ? match[4] && Number(match[4]) : match[2] && columnNumber(match[2])
51
+ );
48
52
  if (indices.some((index) => !index)) return null;
49
53
  return { parts, indices, start: Math.min(...indices), end: Math.max(...indices) };
50
54
  }
51
55
 
52
56
  /** One reference body (A1, $A$1:B2, 3:5, C:C) moved; null when its cells are all deleted, the same text when unmoved. */
53
- export function movedReference(body, move) {
57
+ function movedReference(body, move) {
54
58
  const span = referenceSpan(body, move);
55
59
  if (!span) return body;
56
60
  const moved = movedSpan(span.start, span.end, move);
57
61
  if (!moved) return null;
58
62
  if (moved[0] === span.start && moved[1] === span.end) return body;
59
63
  const reversed = span.indices.length === 2 && span.indices[0] > span.indices[1];
60
- const values = span.parts.length === 1 ? [moved[0]] : reversed ? [moved[1], moved[0]] : moved;
64
+ let values = moved;
65
+ if (span.parts.length === 1) values = [moved[0]];
66
+ else if (reversed) values = [moved[1], moved[0]];
61
67
  return span.parts
62
68
  .map((part, index) =>
63
- move.rows ? part.replace(/\d+$/, String(values[index])) : part.replace(/[A-Za-z]{1,3}/, columnLabel(values[index]))
69
+ move.rows
70
+ ? part.replace(/\d+$/, String(values[index]))
71
+ : part.replace(/[A-Za-z]{1,3}/, columnLabel(values[index]))
64
72
  )
65
73
  .join(':');
66
74
  }
@@ -88,7 +96,9 @@ const sameSheet = (name, sheet) => typeof name === 'string' && name.toLowerCase(
88
96
  // A reference token split into the sheet it names ('My Data'!, Data!, or none) and the cells after it.
89
97
  function referenceParts(text) {
90
98
  const prefix = text.startsWith("'") ? /^'(?:[^']|'')+'!/.exec(text)?.[0] : /^[^!#]+!/.exec(text)?.[0];
91
- return prefix ? { sheet: unquoted(prefix.slice(0, -1)), prefix, body: text.slice(prefix.length) } : { sheet: null, prefix: '', body: text };
99
+ return prefix
100
+ ? { sheet: unquoted(prefix.slice(0, -1)), prefix, body: text.slice(prefix.length) }
101
+ : { sheet: null, prefix: '', body: text };
92
102
  }
93
103
 
94
104
  function mentionsSheet(text, sheet) {
@@ -102,7 +112,7 @@ function mentionsSheet(text, sheet) {
102
112
  * sheet a cell or rule sits on; none for a workbook name or a chart series.
103
113
  * @throws {UnsupportedFormula} when the formula may name the sheet and cannot be read.
104
114
  */
105
- export function movedFormula(formula, home, move) {
115
+ function movedFormula(formula, home, move) {
106
116
  const text = String(formula ?? '');
107
117
  if (!sameSheet(home, move.sheet) && !mentionsSheet(text, move.sheet)) return text;
108
118
  let moved = '';
@@ -167,7 +177,12 @@ function movedCellFormulas(xml, home, own, move, rewrite, refused) {
167
177
  if (id === undefined) continue;
168
178
  const group = groups.get(id) || { cells: [] };
169
179
  group.cells.push(cell.ref);
170
- if (element[2]) Object.assign(group, { master: cell.ref, text: xmlDecode(element[2]), block: /\bref="([^"]+)"/.exec(element[1])?.[1] });
180
+ if (element[2])
181
+ Object.assign(group, {
182
+ master: cell.ref,
183
+ text: xmlDecode(element[2]),
184
+ block: /\bref="([^"]+)"/.exec(element[1])?.[1],
185
+ });
171
186
  groups.set(id, group);
172
187
  }
173
188
  const unshared = new Map();
@@ -216,7 +231,8 @@ function movedCellFormulas(xml, home, own, move, rewrite, refused) {
216
231
  const text = xmlDecode(element[2] || '');
217
232
  const next = element[2] === undefined ? text : rewrite(`${home}!${ref}`, text, home);
218
233
  if (next === text && elementAttributes === element[1]) return whole;
219
- replacement = element[2] === undefined ? `<f${elementAttributes}/>` : `<f${elementAttributes}>${xmlEncode(next)}</f>`;
234
+ replacement =
235
+ element[2] === undefined ? `<f${elementAttributes}/>` : `<f${elementAttributes}>${xmlEncode(next)}</f>`;
220
236
  }
221
237
  return `<c${attributes}>${body.replace(element[0], () => replacement)}</c>`;
222
238
  });
@@ -227,13 +243,14 @@ function movedCellFormulas(xml, home, own, move, rewrite, refused) {
227
243
  function movedRuleFormulas(xml, home, rewrite) {
228
244
  return xml.replace(/<(formula[12]?|xm:f)>([\s\S]*?)<\/\1>/g, (whole, tag, text) => {
229
245
  const decoded = xmlDecode(text);
230
- const next = rewrite(`${home} ${tag === 'formula' ? 'conditional format' : tag === 'xm:f' ? 'rule' : 'validation'}`, decoded, home);
246
+ const kinds = { formula: 'conditional format', 'xm:f': 'rule' };
247
+ const next = rewrite(`${home} ${kinds[tag] ?? 'validation'}`, decoded, home);
231
248
  return next === decoded ? whole : `<${tag}>${xmlEncode(next)}</${tag}>`;
232
249
  });
233
250
  }
234
251
 
235
252
  const recounted = (xml, container, child) =>
236
- xml.replace(new RegExp(`<${container}\\b([^>]*)>([\\s\\S]*?)<\\/${container}>`), (whole, attributes, body) => {
253
+ xml.replace(new RegExp(`<${container}\\b([^>]*)>([\\s\\S]*?)<\\/${container}>`), (_whole, attributes, body) => {
237
254
  const count = (body.match(new RegExp(`<${child}\\b(?![\\w:])`, 'g')) || []).length;
238
255
  if (!count) return '';
239
256
  return `<${container}${/\bcount="/.test(attributes) ? setXmlAttribute(attributes, 'count', count) : attributes}>${body}</${container}>`;
@@ -244,13 +261,16 @@ const recounted = (xml, container, child) =>
244
261
  function movedSheetRanges(xml, move, refused) {
245
262
  let next = xml;
246
263
  for (const tag of ['conditionalFormatting', 'dataValidation', 'ignoredError', 'protectedRange']) {
247
- next = next.replace(new RegExp(`<${tag}\\b([^>]*?)(\\/>|>[\\s\\S]*?<\\/${tag}>)`, 'g'), (whole, attributes, rest) => {
248
- const list = /\bsqref="([^"]*)"/.exec(attributes)?.[1];
249
- if (list === undefined) return whole;
250
- const moved = movedAreaList(list, move);
251
- if (moved === list) return whole;
252
- return moved ? `<${tag}${setXmlAttribute(attributes, 'sqref', moved)}${rest}` : '';
253
- });
264
+ next = next.replace(
265
+ new RegExp(`<${tag}\\b([^>]*?)(\\/>|>[\\s\\S]*?<\\/${tag}>)`, 'g'),
266
+ (whole, attributes, rest) => {
267
+ const list = /\bsqref="([^"]*)"/.exec(attributes)?.[1];
268
+ if (list === undefined) return whole;
269
+ const moved = movedAreaList(list, move);
270
+ if (moved === list) return whole;
271
+ return moved ? `<${tag}${setXmlAttribute(attributes, 'sqref', moved)}${rest}` : '';
272
+ }
273
+ );
254
274
  }
255
275
  next = recounted(next, 'dataValidations', 'dataValidation');
256
276
  next = recounted(next, 'ignoredErrors', 'ignoredError');
@@ -290,7 +310,7 @@ function movedSheetRanges(xml, move, refused) {
290
310
  });
291
311
  // A page break sits above the row (left of the column) its zero-based id names, and moves with it.
292
312
  const breaks = move.rows ? 'rowBreaks' : 'colBreaks';
293
- next = next.replace(new RegExp(`<${breaks}\\b([^>]*)>([\\s\\S]*?)<\\/${breaks}>`), (whole, attributes, body) => {
313
+ next = next.replace(new RegExp(`<${breaks}\\b([^>]*)>([\\s\\S]*?)<\\/${breaks}>`), (_whole, attributes, body) => {
294
314
  const kept = body.replace(/<brk\b([^>]*?)\/>/g, (brk, brkAttributes) => {
295
315
  const id = Number(/\bid="(\d+)"/.exec(brkAttributes)?.[1]);
296
316
  const moved = movedIndex(id + 1, move);
@@ -323,20 +343,26 @@ function movedAnchors(drawing, move) {
323
343
  const moved = block.replace(indexPattern, `<xdr:${tag}>${index}</xdr:${tag}>`);
324
344
  return reset ? moved.replace(offsetPattern, `<xdr:${tag}Off>0</xdr:${tag}Off>`) : moved;
325
345
  };
326
- return drawing.replace(/<xdr:(oneCellAnchor|twoCellAnchor)\b([^>]*)>([\s\S]*?)<\/xdr:\1>/g, (whole, kind, attributes, body) => {
327
- const editAs = kind === 'oneCellAnchor' ? 'oneCell' : /\beditAs="([^"]+)"/.exec(attributes)?.[1] || 'twoCell';
328
- const from = /<xdr:from>([\s\S]*?)<\/xdr:from>/.exec(body);
329
- if (editAs === 'absolute' || !from) return whole;
330
- const start = place(from[1]);
331
- let next = body.replace(from[0], () => `<xdr:from>${written(from[1], start.next, start.reset)}</xdr:from>`);
332
- const to = kind === 'twoCellAnchor' && /<xdr:to>([\s\S]*?)<\/xdr:to>/.exec(body);
333
- if (to) {
334
- const end = place(to[1]);
335
- const index = editAs === 'oneCell' ? end.index + start.next - start.index : end.next;
336
- next = next.replace(to[0], () => `<xdr:to>${written(to[1], index, editAs !== 'oneCell' && end.reset)}</xdr:to>`);
346
+ return drawing.replace(
347
+ /<xdr:(oneCellAnchor|twoCellAnchor)\b([^>]*)>([\s\S]*?)<\/xdr:\1>/g,
348
+ (whole, kind, attributes, body) => {
349
+ const editAs = kind === 'oneCellAnchor' ? 'oneCell' : /\beditAs="([^"]+)"/.exec(attributes)?.[1] || 'twoCell';
350
+ const from = /<xdr:from>([\s\S]*?)<\/xdr:from>/.exec(body);
351
+ if (editAs === 'absolute' || !from) return whole;
352
+ const start = place(from[1]);
353
+ let next = body.replace(from[0], () => `<xdr:from>${written(from[1], start.next, start.reset)}</xdr:from>`);
354
+ const to = kind === 'twoCellAnchor' && /<xdr:to>([\s\S]*?)<\/xdr:to>/.exec(body);
355
+ if (to) {
356
+ const end = place(to[1]);
357
+ const index = editAs === 'oneCell' ? end.index + start.next - start.index : end.next;
358
+ next = next.replace(
359
+ to[0],
360
+ () => `<xdr:to>${written(to[1], index, editAs !== 'oneCell' && end.reset)}</xdr:to>`
361
+ );
362
+ }
363
+ return next === body ? whole : `<xdr:${kind}${attributes}>${next}</xdr:${kind}>`;
337
364
  }
338
- return next === body ? whole : `<xdr:${kind}${attributes}>${next}</xdr:${kind}>`;
339
- });
365
+ );
340
366
  }
341
367
 
342
368
  // A note's box in the sheet's legacy drawing: its cell (zero-based x:Row and x:Column) and the box's corners (x:Anchor:
@@ -354,7 +380,7 @@ function movedNoteShape(shape, move) {
354
380
  const delta = moved - 1 - index;
355
381
  return shape
356
382
  .replace(pattern, `<x:${tag}>${moved - 1}</x:${tag}>`)
357
- .replace(/<x:Anchor>([^<]*)<\/x:Anchor>/, (whole, anchor) => {
383
+ .replace(/<x:Anchor>([^<]*)<\/x:Anchor>/, (_whole, anchor) => {
358
384
  const corners = anchor.split(',').map((value) => value.trim());
359
385
  for (const position of move.rows ? [2, 6] : [0, 4]) corners[position] = String(Number(corners[position]) + delta);
360
386
  return `<x:Anchor>${corners.join(', ')}</x:Anchor>`;
@@ -384,11 +410,19 @@ export function inheritedRows(xml, from, amount) {
384
410
  function inheritedColumns(xml, from, amount) {
385
411
  if (from <= 1) return xml;
386
412
  const left = columnLabel(from - 1);
387
- return xml.replace(new RegExp(`<c\\b([^>]*?\\br="${left}(\\d+)"[^>]*?)(\\/>|>[\\s\\S]*?<\\/c>)`, 'g'), (whole, attributes, row) => {
388
- const style = /\bs="(\d+)"/.exec(attributes)?.[1];
389
- if (!style || style === '0') return whole;
390
- return whole + Array.from({ length: amount }, (_, offset) => `<c r="${columnLabel(from + offset)}${row}" s="${style}"/>`).join('');
391
- });
413
+ return xml.replace(
414
+ new RegExp(`<c\\b([^>]*?\\br="${left}(\\d+)"[^>]*?)(\\/>|>[\\s\\S]*?<\\/c>)`, 'g'),
415
+ (whole, attributes, row) => {
416
+ const style = /\bs="(\d+)"/.exec(attributes)?.[1];
417
+ if (!style || style === '0') return whole;
418
+ return (
419
+ whole +
420
+ Array.from({ length: amount }, (_, offset) => `<c r="${columnLabel(from + offset)}${row}" s="${style}"/>`).join(
421
+ ''
422
+ )
423
+ );
424
+ }
425
+ );
392
426
  }
393
427
 
394
428
  // Column widths follow their columns; the columns an insert adds join the span of the column on their left.
@@ -400,7 +434,8 @@ function movedColumnWidths(xml, move) {
400
434
  if (!min || !max) return whole;
401
435
  let span;
402
436
  if (!move.insert) span = movedSpan(min, max, move);
403
- else if (min >= move.from) span = min + move.amount > move.limit ? null : [min + move.amount, Math.min(max + move.amount, move.limit)];
437
+ else if (min >= move.from)
438
+ span = min + move.amount > move.limit ? null : [min + move.amount, Math.min(max + move.amount, move.limit)];
404
439
  else span = [min, max >= move.from - 1 ? Math.min(max + move.amount, move.limit) : max];
405
440
  if (!span) return '';
406
441
  if (span[0] === min && span[1] === max) return whole;
@@ -436,10 +471,13 @@ async function rewriteNamesAndCharts(zip, sheets, rewrite, writes) {
436
471
  // The pivot caches that read one sheet, as [part, its XML, the worksheetSource match].
437
472
  async function pivotSources(zip, sheetName) {
438
473
  const found = [];
439
- for (const part of Object.keys(zip.files).filter((entry) => /^xl\/pivotCache\/pivotCacheDefinition\d+\.xml$/i.test(entry))) {
474
+ for (const part of Object.keys(zip.files).filter((entry) =>
475
+ /^xl\/pivotCache\/pivotCacheDefinition\d+\.xml$/i.test(entry)
476
+ )) {
440
477
  const cache = (await zipText(zip, part)) || '';
441
478
  const source = /<worksheetSource\b([^>]*?)\/>/.exec(cache);
442
- if (source && sameSheet(xmlDecode(/\bsheet="([^"]+)"/.exec(source[1])?.[1] || ''), sheetName)) found.push([part, cache, source]);
479
+ if (source && sameSheet(xmlDecode(/\bsheet="([^"]+)"/.exec(source[1])?.[1] || ''), sheetName))
480
+ found.push([part, cache, source]);
443
481
  }
444
482
  return found;
445
483
  }
@@ -453,7 +491,9 @@ function renamedCellFormulas(xml, home, rewrite) {
453
491
  if (!element) return whole;
454
492
  const text = xmlDecode(element[2]);
455
493
  const next = rewrite(`${home}!${ref}`, text, home);
456
- return next === text ? whole : `<c${attributes}>${body.replace(element[0], () => `<f${element[1]}>${xmlEncode(next)}</f>`)}</c>`;
494
+ return next === text
495
+ ? whole
496
+ : `<c${attributes}>${body.replace(element[0], () => `<f${element[1]}>${xmlEncode(next)}</f>`)}</c>`;
457
497
  });
458
498
  }
459
499
 
@@ -490,7 +530,10 @@ export async function renameSheetReferences(zip, sheets, sheet, to, op) {
490
530
  await rewriteNamesAndCharts(zip, sheets, rewrite, writes);
491
531
  if (to != null) {
492
532
  for (const [part, cache, source] of await pivotSources(zip, sheet.name)) {
493
- writes.set(part, cache.replace(source[0], () => `<worksheetSource${setXmlAttribute(source[1], 'sheet', xmlEncode(to))}/>`));
533
+ writes.set(
534
+ part,
535
+ cache.replace(source[0], () => `<worksheetSource${setXmlAttribute(source[1], 'sheet', xmlEncode(to))}/>`)
536
+ );
494
537
  }
495
538
  }
496
539
  if (refused.length) {
@@ -534,7 +577,8 @@ export function copiedSheetXml(xml, source, name) {
534
577
 
535
578
  // The relationships a sheet owns outright, which a copy needs its own of: two sheets drawing through one drawing part
536
579
  // is a package Excel will not open. Pictures, printer settings and pivot caches stay shared.
537
- const OWNED_RELATIONSHIP = /\/(?:drawing|chart|chartUserShapes|comments|vmlDrawing|chartStyle|chartColorStyle|pivotTable)$/;
580
+ const OWNED_RELATIONSHIP =
581
+ /\/(?:drawing|chart|chartUserShapes|comments|vmlDrawing|chartStyle|chartColorStyle|pivotTable)$/;
538
582
 
539
583
  async function freePartName(zip, part) {
540
584
  const [, stem, extension] = /^(.*?)\d*(\.\w+)$/.exec(part);
@@ -548,8 +592,14 @@ async function duplicateOwnedPart(zip, part, rewriteChart) {
548
592
  const content = (await zipText(zip, part)) || '';
549
593
  zip.file(copy, /^xl\/charts\/chart\d+\.xml$/i.test(part) ? rewriteChart(content) : content);
550
594
  const types = (await zipText(zip, '[Content_Types].xml')) || '';
551
- const override = new RegExp(`<Override\\b[^>]*\\bPartName="/${part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}"[^>]*\\bContentType="([^"]+)"`).exec(types);
552
- if (override) zip.file('[Content_Types].xml', types.replace('</Types>', `<Override PartName="/${copy}" ContentType="${override[1]}"/></Types>`));
595
+ const override = new RegExp(
596
+ `<Override\\b[^>]*\\bPartName="/${part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}"[^>]*\\bContentType="([^"]+)"`
597
+ ).exec(types);
598
+ if (override)
599
+ zip.file(
600
+ '[Content_Types].xml',
601
+ types.replace('</Types>', `<Override PartName="/${copy}" ContentType="${override[1]}"/></Types>`)
602
+ );
553
603
  await duplicateOwnedRelationships(zip, part, copy, rewriteChart);
554
604
  return copy;
555
605
  }
@@ -592,7 +642,10 @@ export async function copySheetParts(zip, sheets, source, copy) {
592
642
  }
593
643
  };
594
644
  const rewriteChart = (xml) =>
595
- xml.replace(/<(c|c15):f>([\s\S]*?)<\/\1:f>/g, (whole, tag, text) => `<${tag}:f>${xmlEncode(repoint(xmlDecode(text)))}</${tag}:f>`);
645
+ xml.replace(
646
+ /<(c|c15):f>([\s\S]*?)<\/\1:f>/g,
647
+ (_whole, tag, text) => `<${tag}:f>${xmlEncode(repoint(xmlDecode(text)))}</${tag}:f>`
648
+ );
596
649
  await duplicateOwnedRelationships(zip, source.path, copy.path, rewriteChart, /\/table$/);
597
650
  const workbookPath = 'xl/workbook.xml';
598
651
  const workbook = (await zipText(zip, workbookPath)) || '';
@@ -604,7 +657,9 @@ export async function copySheetParts(zip, sheets, source, copy) {
604
657
  const text = xmlDecode(body);
605
658
  const repointed = repoint(text);
606
659
  if (local === undefined && repointed === text) continue;
607
- added.push(`<definedName${setXmlAttribute(attributes, 'localSheetId', sheets.length)}>${xmlEncode(repointed)}</definedName>`);
660
+ added.push(
661
+ `<definedName${setXmlAttribute(attributes, 'localSheetId', sheets.length)}>${xmlEncode(repointed)}</definedName>`
662
+ );
608
663
  }
609
664
  if (added.length) zip.file(workbookPath, workbook.replace('</definedNames>', `${added.join('')}</definedNames>`));
610
665
  }
@@ -619,46 +674,13 @@ export async function dropCalculationChain(zip) {
619
674
  const rels = await zipText(zip, relsPath);
620
675
  if (rels) zip.file(relsPath, rels.replace(/<Relationship\b[^>]*\bType="[^"]*\/calcChain"[^>]*\/>/g, ''));
621
676
  const types = await zipText(zip, '[Content_Types].xml');
622
- if (types) zip.file('[Content_Types].xml', types.replace(/<Override\b[^>]*\bPartName="\/xl\/calcChain\.xml"[^>]*\/>/, ''));
677
+ if (types)
678
+ zip.file('[Content_Types].xml', types.replace(/<Override\b[^>]*\bPartName="\/xl\/calcChain\.xml"[^>]*\/>/, ''));
623
679
  }
624
680
 
625
- /**
626
- * Inserts or deletes rows (columns) of one worksheet and moves everything in the workbook that names them.
627
- * @returns {Promise<number>} how many formulas, names and chart series were rewritten.
628
- * @throws {Error} when something naming the moved cells cannot be rewritten; nothing is changed then.
629
- */
630
- export async function shiftWorksheetCells(zip, sheets, sheet, xml, { rows, from, amount, insert, op }) {
631
- const move = { sheet: sheet.name, rows, from, amount, insert, limit: rows ? LIMITS.rows : LIMITS.columns };
632
- const refused = [];
633
- const writes = new Map();
634
- let rewritten = 0;
635
- const rewrite = (where, text, home) => {
636
- try {
637
- const next = movedFormula(text, home, move);
638
- if (next !== text) rewritten += 1;
639
- return next;
640
- } catch (error) {
641
- if (!(error instanceof UnsupportedFormula)) throw error;
642
- refused.push(`${where} =${text} (${error.reason})`);
643
- return text;
644
- }
645
- };
646
- for (const other of sheets) {
647
- const own = other.path === sheet.path;
648
- const source = own ? xml : await zipText(zip, other.path);
649
- if (!source) continue;
650
- let next = movedRuleFormulas(movedCellFormulas(source, other.name, own, move, rewrite, refused), other.name, rewrite);
651
- if (own) next = movedSheetRanges(next, move, refused);
652
- if (next !== source || own) writes.set(other.path, next);
653
- }
654
- await rewriteNamesAndCharts(zip, sheets, rewrite, writes);
655
- for (const [part, cache, source] of await pivotSources(zip, sheet.name)) {
656
- const ref = /\bref="([^"]+)"/.exec(source[1])?.[1];
657
- const moved = ref && movedReference(ref, move);
658
- if (moved === null) refused.push(`pivot source ${sheet.name}!${ref} (its cells are all deleted)`);
659
- else if (moved !== ref) writes.set(part, cache.replace(source[0], () => `<worksheetSource${setXmlAttribute(source[1], 'ref', moved)}/>`));
660
- }
661
- const relationships = await zipText(zip, partRelationshipPath(sheet.path));
681
+ // The sheet's tables: a table the edit moves whole follows it, one it would cut or empty is refused.
682
+ async function moveTableParts(zip, relationships, sheet, move, writes, refused) {
683
+ const { rows, insert } = move;
662
684
  for (const part of relationshipTargetsByType(relationships, sheet.path, 'table').values()) {
663
685
  const table = (await zipText(zip, part)) || '';
664
686
  const ref = /<table\b[^>]*?\bref="([^"]+)"/.exec(table)?.[1];
@@ -670,32 +692,51 @@ export async function shiftWorksheetCells(zip, sheets, sheet, xml, { rows, from,
670
692
  refused.push(`table ${name} ${ref} (its ${rows ? 'rows' : 'columns'} would change; Excel rebuilds the table)`);
671
693
  continue;
672
694
  }
673
- if (rows && !insert && (movedIndex(header, move) === null || referenceSpan(moved, move).start === referenceSpan(moved, move).end)) {
695
+ if (
696
+ rows &&
697
+ !insert &&
698
+ (movedIndex(header, move) === null || referenceSpan(moved, move).start === referenceSpan(moved, move).end)
699
+ ) {
674
700
  refused.push(`table ${name} ${ref} (the edit deletes its header or every data row)`);
675
701
  continue;
676
702
  }
677
703
  writes.set(
678
704
  part,
679
- table.replace(/(<(?:table|autoFilter)\b[^>]*?\bref=")([^"]+)"/g, (whole, lead, area) => `${lead}${movedReference(area, move) || area}"`)
705
+ table.replace(
706
+ /(<(?:table|autoFilter)\b[^>]*?\bref=")([^"]+)"/g,
707
+ (_whole, lead, area) => `${lead}${movedReference(area, move) || area}"`
708
+ )
680
709
  );
681
710
  }
711
+ }
712
+
713
+ // The sheet's pivot tables, notes (with their legacy boxes) and drawings, each moved with the cells it sits on.
714
+ async function moveOwnedSheetParts(zip, relationships, sheet, move, writes, refused) {
682
715
  for (const part of relationshipTargetsByType(relationships, sheet.path, 'pivotTable').values()) {
683
716
  const pivot = (await zipText(zip, part)) || '';
684
717
  const location = /<location\b([^>]*?)\/>/.exec(pivot);
685
718
  const ref = location && /\bref="([^"]+)"/.exec(location[1])?.[1];
686
719
  const moved = ref && movedReference(ref, move);
687
720
  if (!ref || moved === ref) continue;
688
- if (!moved || cutsThrough(ref, move)) refused.push(`pivot table at ${sheet.name}!${ref} (the edit cuts through it)`);
689
- else writes.set(part, pivot.replace(location[0], () => `<location${setXmlAttribute(location[1], 'ref', moved)}/>`));
721
+ if (!moved || cutsThrough(ref, move))
722
+ refused.push(`pivot table at ${sheet.name}!${ref} (the edit cuts through it)`);
723
+ else
724
+ writes.set(
725
+ part,
726
+ pivot.replace(location[0], () => `<location${setXmlAttribute(location[1], 'ref', moved)}/>`)
727
+ );
690
728
  }
691
729
  // A note moves with its cell and goes with it, its box following by as many rows (columns) as the cell moved.
692
730
  for (const part of relationshipTargetsByType(relationships, sheet.path, 'comments').values()) {
693
731
  const notes = (await zipText(zip, part)) || '';
694
- const next = notes.replace(/<comment\b([^>]*?)\bref="([^"]+)"([^>]*)>([\s\S]*?)<\/comment>/g, (whole, before, ref, after, body) => {
695
- const moved = movedReference(ref, move);
696
- if (moved === ref) return whole;
697
- return moved ? `<comment${before}ref="${moved}"${after}>${body}</comment>` : '';
698
- });
732
+ const next = notes.replace(
733
+ /<comment\b([^>]*?)\bref="([^"]+)"([^>]*)>([\s\S]*?)<\/comment>/g,
734
+ (whole, before, ref, after, body) => {
735
+ const moved = movedReference(ref, move);
736
+ if (moved === ref) return whole;
737
+ return moved ? `<comment${before}ref="${moved}"${after}>${body}</comment>` : '';
738
+ }
739
+ );
699
740
  if (next !== notes) writes.set(part, next);
700
741
  }
701
742
  for (const part of relationshipTargetsByType(relationships, sheet.path, 'vmlDrawing').values()) {
@@ -708,6 +749,55 @@ export async function shiftWorksheetCells(zip, sheets, sheet, xml, { rows, from,
708
749
  const next = movedAnchors(drawing, move);
709
750
  if (next !== drawing) writes.set(part, next);
710
751
  }
752
+ }
753
+
754
+ /**
755
+ * Inserts or deletes rows (columns) of one worksheet and moves everything in the workbook that names them.
756
+ * @returns {Promise<number>} how many formulas, names and chart series were rewritten.
757
+ * @throws {Error} when something naming the moved cells cannot be rewritten; nothing is changed then.
758
+ */
759
+ export async function shiftWorksheetCells(zip, sheets, sheet, xml, { rows, from, amount, insert, op }) {
760
+ const move = { sheet: sheet.name, rows, from, amount, insert, limit: rows ? LIMITS.rows : LIMITS.columns };
761
+ const refused = [];
762
+ const writes = new Map();
763
+ let rewritten = 0;
764
+ const rewrite = (where, text, home) => {
765
+ try {
766
+ const next = movedFormula(text, home, move);
767
+ if (next !== text) rewritten += 1;
768
+ return next;
769
+ } catch (error) {
770
+ if (!(error instanceof UnsupportedFormula)) throw error;
771
+ refused.push(`${where} =${text} (${error.reason})`);
772
+ return text;
773
+ }
774
+ };
775
+ for (const other of sheets) {
776
+ const own = other.path === sheet.path;
777
+ const source = own ? xml : await zipText(zip, other.path);
778
+ if (!source) continue;
779
+ let next = movedRuleFormulas(
780
+ movedCellFormulas(source, other.name, own, move, rewrite, refused),
781
+ other.name,
782
+ rewrite
783
+ );
784
+ if (own) next = movedSheetRanges(next, move, refused);
785
+ if (next !== source || own) writes.set(other.path, next);
786
+ }
787
+ await rewriteNamesAndCharts(zip, sheets, rewrite, writes);
788
+ for (const [part, cache, source] of await pivotSources(zip, sheet.name)) {
789
+ const ref = /\bref="([^"]+)"/.exec(source[1])?.[1];
790
+ const moved = ref && movedReference(ref, move);
791
+ if (moved === null) refused.push(`pivot source ${sheet.name}!${ref} (its cells are all deleted)`);
792
+ else if (moved !== ref)
793
+ writes.set(
794
+ part,
795
+ cache.replace(source[0], () => `<worksheetSource${setXmlAttribute(source[1], 'ref', moved)}/>`)
796
+ );
797
+ }
798
+ const relationships = await zipText(zip, partRelationshipPath(sheet.path));
799
+ await moveTableParts(zip, relationships, sheet, move, writes, refused);
800
+ await moveOwnedSheetParts(zip, relationships, sheet, move, writes, refused);
711
801
  if (refused.length) {
712
802
  const where = rows ? `row ${from}` : `column ${columnLabel(from)}`;
713
803
  throw new Error(
@@ -717,7 +807,8 @@ export async function shiftWorksheetCells(zip, sheets, sheet, xml, { rows, from,
717
807
  );
718
808
  }
719
809
  let moved = writes.get(sheet.path);
720
- moved = rows ? shiftWorksheetRows(moved, from, insert ? amount : -amount) : shiftWorksheetColumns(moved, from, insert ? amount : -amount);
810
+ const delta = insert ? amount : -amount;
811
+ moved = rows ? shiftWorksheetRows(moved, from, delta) : shiftWorksheetColumns(moved, from, delta);
721
812
  if (insert) moved = rows ? inheritedRows(moved, from, amount) : inheritedColumns(moved, from, amount);
722
813
  if (!rows) moved = movedColumnWidths(moved, move);
723
814
  writes.set(sheet.path, moved);
@@ -19,6 +19,7 @@ import {
19
19
  import {
20
20
  addPackageRelationship,
21
21
  ensureContentTypeOverride,
22
+ partFromTarget,
22
23
  partRelationshipPath,
23
24
  provenanceCitation,
24
25
  relationshipTargetByType,
@@ -37,7 +38,12 @@ import {
37
38
  } from './portable-xml.mjs';
38
39
  import { excelPasswordHash, writeWorksheetNote } from './portable-sheet-parts.mjs';
39
40
  import { columnFileWidth, workbookDigitWidth } from './portable-sheet-page.mjs';
40
- import { copiedSheetXml, copySheetParts, inheritedRows, shiftWorksheetCells } from './portable-xlsx-reference-shift.mjs';
41
+ import {
42
+ copiedSheetXml,
43
+ copySheetParts,
44
+ inheritedRows,
45
+ shiftWorksheetCells,
46
+ } from './portable-xlsx-reference-shift.mjs';
41
47
  import {
42
48
  areaReference,
43
49
  composeSheetView,
@@ -128,7 +134,9 @@ function typedNumber(value) {
128
134
  const plain = Number(figure.replace(/,/g, ''));
129
135
  const number = percent ? Number((plain / 100).toFixed(places + 2)) : plain;
130
136
  const decimals = places > 0;
131
- const numberFormat = percent ? (decimals ? '0.00%' : '0%') : grouped ? (decimals ? '#,##0.00' : '#,##0') : null;
137
+ let numberFormat = null;
138
+ if (percent) numberFormat = decimals ? '0.00%' : '0%';
139
+ else if (grouped) numberFormat = decimals ? '#,##0.00' : '#,##0';
132
140
  return { value: number, numberFormat };
133
141
  }
134
142
 
@@ -212,7 +220,7 @@ export async function appendWorksheetRow(zip, sheet, xml, op) {
212
220
 
213
221
  export function clearWorksheetCell(zip, sheet, xml, op) {
214
222
  const parsed = parseCellRef(op.cell);
215
- const cellRegex = new RegExp(`<c\\b[^>]*\\br="${parsed.ref}"[^>]*(?:>[\\s\\S]*?</c>|/>)`, 'i');
223
+ const cellRegex = new RegExp(`<c\\b[^>]*\\br="${parsed.ref}"[^>]*(?:(?<!\\/)>[\\s\\S]*?</c>|/>)`, 'i');
216
224
  const changed = cellRegex.test(xml);
217
225
  if (changed) zip.file(sheet.path, xml.replace(cellRegex, ''));
218
226
  return { op: op.op, changed, sheet: sheet.name, cell: parsed.ref };
@@ -338,7 +346,15 @@ export async function shiftWorksheetRowsOrColumns(zip, sheet, xml, op, sheets =
338
346
  const from = Math.max(1, Number(rows ? op.row : op.column) || 1);
339
347
  const insert = op.op.startsWith('insert');
340
348
  const rewritten = await shiftWorksheetCells(zip, sheets, sheet, xml, { rows, from, amount, insert, op: op.op });
341
- return { op: op.op, changed: true, sheet: sheet.name, from, count: amount, referenceAware: true, referencesRewritten: rewritten };
349
+ return {
350
+ op: op.op,
351
+ changed: true,
352
+ sheet: sheet.name,
353
+ from,
354
+ count: amount,
355
+ referenceAware: true,
356
+ referencesRewritten: rewritten,
357
+ };
342
358
  }
343
359
 
344
360
  export function setWorksheetAutofilter(zip, sheet, xml, op) {
@@ -555,7 +571,7 @@ export async function deleteWorksheetNote(zip, sheet, _xml, op) {
555
571
  const relationships = await zipText(zip, partRelationshipPath(sheet.path));
556
572
  const target = relationshipTargetByType(relationships, 'comments');
557
573
  if (!target) return { op: op.op, changed: false, sheet: sheet.name, cell: parsed.ref };
558
- const commentsPart = posix.normalize(posix.join(posix.dirname(sheet.path), target));
574
+ const commentsPart = partFromTarget(posix.dirname(sheet.path), target);
559
575
  const comments = await zipText(zip, commentsPart);
560
576
  const pattern = new RegExp(`<comment\\b[^>]*\\bref="${parsed.ref}"[^>]*>[\\s\\S]*?<\\/comment>`);
561
577
  const changed = pattern.test(comments);
@@ -574,7 +590,11 @@ export async function copyWorksheet(zip, sheet, xml, op, sheets) {
574
590
  const copyPart = `xl/worksheets/sheet${copyOrdinal}.xml`;
575
591
  // A table part belongs to the sheet that declares it, so the copy takes the
576
592
  // cells without the tableParts entry or the table relationships.
577
- const copied = copiedSheetXml(xml.replace(/<tableParts\b[^>]*?(?:\/>|>[\s\S]*?<\/tableParts>)/, ''), sheet.name, label);
593
+ const copied = copiedSheetXml(
594
+ xml.replace(/<tableParts\b[^>]*?(?:\/>|>[\s\S]*?<\/tableParts>)/, ''),
595
+ sheet.name,
596
+ label
597
+ );
578
598
  zip.file(copyPart, copied);
579
599
  await ensureContentTypeOverride(zip, `/${copyPart}`, WORKSHEET_CONTENT_TYPE);
580
600
  const relationshipId = await addPackageRelationship(
@@ -145,10 +145,7 @@ export function replaceInParagraphs(
145
145
  if (!words.length) throw new Error('replace_text requires non-empty find');
146
146
  const lead = /^\s/.test(find) ? '[ \\n]+' : '',
147
147
  tail = /\s$/.test(find) ? '[ \\n]+' : '';
148
- const pattern = new RegExp(
149
- `${lead}${words.map((word) => word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('[ \\n]+')}${tail}`,
150
- 'g'
151
- );
148
+ const pattern = new RegExp(`${lead}${words.map(tagPattern).join('[ \\n]+')}${tail}`, 'g');
152
149
  const tokenPattern = new RegExp(
153
150
  `<${tagPattern(run)}(\\s[^>]*)?>([\\s\\S]*?)</${tagPattern(run)}>|<${tagPattern(lineBreak)}\\b(?:[^>]*?/>|[^>]*>[\\s\\S]*?</${tagPattern(lineBreak)}>)`,
154
151
  'g'