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
@@ -0,0 +1,149 @@
1
+ import { normalizeExcelCellStyle } from '../portable/portable-sheet-styles.mjs';
2
+
3
+ // Excel's cells read like the portable snapshot's: RRGGBB colors with
4
+ // defaults omitted, and text cells flagged, so the formula audit and the
5
+ // model see one shape from both readers.
6
+ // Excel names a validation's and a conditional format's kind and operator by enumeration number (3 for a list, 2 for
7
+ // an expression) and reads its formulas with a leading "="; the portable reader names them as the file does. One
8
+ // shape from both: the OOXML word, the ranges as a list, the formulas without "=", a list literal in its quotes.
9
+ const EXCEL_VALIDATION_TYPES = ['none', 'whole', 'decimal', 'list', 'date', 'time', 'textLength', 'custom'];
10
+ const EXCEL_OPERATORS = [
11
+ '',
12
+ 'between',
13
+ 'notBetween',
14
+ 'equal',
15
+ 'notEqual',
16
+ 'greaterThan',
17
+ 'lessThan',
18
+ 'greaterThanOrEqual',
19
+ 'lessThanOrEqual',
20
+ ];
21
+ const EXCEL_CONDITION_TYPES = {
22
+ 1: 'cellIs',
23
+ 2: 'expression',
24
+ 3: 'colorScale',
25
+ 4: 'dataBar',
26
+ 5: 'top10',
27
+ 6: 'iconSet',
28
+ 8: 'uniqueValues',
29
+ 9: 'containsText',
30
+ 10: 'containsBlanks',
31
+ 11: 'timePeriod',
32
+ 12: 'aboveAverage',
33
+ 13: 'notContainsBlanks',
34
+ 16: 'containsErrors',
35
+ 17: 'notContainsErrors',
36
+ };
37
+ const withoutEquals = (formula) => String(formula ?? '').replace(/^=/, '');
38
+
39
+ function normalizeExcelRules(sheet) {
40
+ if (Array.isArray(sheet?.validations)) {
41
+ sheet.validations = sheet.validations.map((entry) => {
42
+ if (!entry || typeof entry.type !== 'number') return entry;
43
+ const type = EXCEL_VALIDATION_TYPES[entry.type] ?? String(entry.type);
44
+ let formula1 = withoutEquals(entry.formula1);
45
+ if (type === 'list' && formula1 && !String(entry.formula1).startsWith('=')) formula1 = `"${formula1}"`;
46
+ return {
47
+ ...entry,
48
+ type,
49
+ operator: type === 'list' || type === 'custom' ? '' : (EXCEL_OPERATORS[entry.operator] ?? ''),
50
+ formula1,
51
+ formula2: withoutEquals(entry.formula2),
52
+ };
53
+ });
54
+ }
55
+ if (Array.isArray(sheet?.conditionalFormats)) {
56
+ sheet.conditionalFormats = sheet.conditionalFormats.map((entry) => {
57
+ if (!entry || typeof entry.type !== 'number') return entry;
58
+ const { range, formula1, formula2, ...rest } = entry;
59
+ const type = EXCEL_CONDITION_TYPES[entry.type] ?? String(entry.type);
60
+ return {
61
+ ...rest,
62
+ ranges: String(range || '')
63
+ .split(/[ ,]+/)
64
+ .filter(Boolean),
65
+ type,
66
+ operator: type === 'cellIs' ? (EXCEL_OPERATORS[entry.operator] ?? '') : '',
67
+ formulas: [formula1, formula2].filter(Boolean).map(withoutEquals),
68
+ };
69
+ });
70
+ }
71
+ }
72
+
73
+ // Excel reports a chart's series as one =SERIES(name, categories, values, order) formula and its kind by number; the
74
+ // portable reader splits the three references and names the kind as add_chart does, and the chart audits read them
75
+ // split. The arguments are cut at commas outside quotes and parentheses: a quoted sheet name may hold one.
76
+ function seriesArguments(formula) {
77
+ const inner = /^=?SERIES\(([\s\S]*)\)$/i.exec(String(formula || '').trim())?.[1];
78
+ if (inner === undefined) return null;
79
+ const parts = [];
80
+ let current = '';
81
+ let depth = 0;
82
+ let quoted = false;
83
+ for (const character of inner) {
84
+ if (character === "'" || character === '"') quoted = !quoted;
85
+ else if (!quoted && character === '(') depth += 1;
86
+ else if (!quoted && character === ')') depth -= 1;
87
+ if (character === ',' && !quoted && depth === 0) {
88
+ parts.push(current.trim());
89
+ current = '';
90
+ } else current += character;
91
+ }
92
+ parts.push(current.trim());
93
+ return parts;
94
+ }
95
+
96
+ const EXCEL_CHART_KINDS = {
97
+ 51: 'column',
98
+ 52: 'stacked_column',
99
+ 57: 'bar',
100
+ 58: 'stacked_bar',
101
+ 4: 'line',
102
+ 65: 'line',
103
+ 1: 'area',
104
+ 5: 'pie',
105
+ '-4120': 'doughnut',
106
+ '-4169': 'scatter',
107
+ };
108
+
109
+ function normalizeExcelCharts(sheet) {
110
+ if (!Array.isArray(sheet?.charts)) return;
111
+ sheet.charts = sheet.charts.map((chart) => {
112
+ if (!chart || typeof chart !== 'object') return chart;
113
+ const next = { ...chart };
114
+ if (typeof next.chartType === 'number' && EXCEL_CHART_KINDS[next.chartType])
115
+ next.chartType = EXCEL_CHART_KINDS[next.chartType];
116
+ if (Array.isArray(next.series)) {
117
+ next.series = next.series.map((series) => {
118
+ const parts = seriesArguments(series?.formula);
119
+ if (!parts) return series;
120
+ const [name = '', categories = '', values = ''] = parts;
121
+ const reference = (text) => (/^'?[^'"]*'?!\$?[A-Z]/i.test(text) ? text : '');
122
+ return {
123
+ ...series,
124
+ formula: reference(name),
125
+ categoryFormula: categories,
126
+ valueFormula: values,
127
+ };
128
+ });
129
+ next.seriesCount = next.series.length;
130
+ }
131
+ // The frame's place is the anchor's; the same four numbers beside it repeat it.
132
+ if (next.anchor && ['left', 'top', 'width', 'height'].every((key) => next[key] === next.anchor[key])) {
133
+ for (const key of ['left', 'top', 'width', 'height']) delete next[key];
134
+ }
135
+ return next;
136
+ });
137
+ }
138
+
139
+ export function normalizeExcelSnapshotStyles(document) {
140
+ for (const sheet of document?.sheets || []) {
141
+ normalizeExcelRules(sheet);
142
+ normalizeExcelCharts(sheet);
143
+ for (const cell of sheet?.cells || []) {
144
+ if (!cell || typeof cell !== 'object') continue;
145
+ if (cell.style) cell.style = normalizeExcelCellStyle(cell.style);
146
+ if (!cell.formula && typeof cell.value === 'string' && cell.value !== '') cell.dataType = 'text';
147
+ }
148
+ }
149
+ }
@@ -26,6 +26,7 @@ import { PIXELS_TO_POINTS, imagePixelSize } from '../portable/portable-opc.mjs';
26
26
  import { naturalColumnWidths } from '../shared/column-widths.mjs';
27
27
  import { figureColumnAlignments } from '../shared/column-alignments.mjs';
28
28
  import { pageSizePoints } from '../shared/page-sizes.mjs';
29
+ import { koreanParticleReplacements } from '../shared/korean-particles.mjs';
29
30
  import {
30
31
  TABULAR_FORMATS,
31
32
  emptyOfficeDesignState,
@@ -42,8 +43,6 @@ import {
42
43
  transactionView,
43
44
  } from './office-transactions.mjs';
44
45
 
45
- import { koreanParticleReplacements } from '../shared/korean-particles.mjs';
46
-
47
46
  // Excel fills an unstyled series from the workbook theme (a teal and an orange on the default one) while the
48
47
  // portable writer paints its own hue family, so the same add_chart drew two different charts. A chart that
49
48
  // names no colours takes the portable palette on both backends; a named palette is kept as written.
@@ -277,7 +276,7 @@ function withProvenanceCitations(operations) {
277
276
  }
278
277
 
279
278
  async function microsoftBatch(session, args, target, operations) {
280
- const result = await microsoftOfficeCall(
279
+ return await microsoftOfficeCall(
281
280
  session,
282
281
  target,
283
282
  {
@@ -288,7 +287,6 @@ async function microsoftBatch(session, args, target, operations) {
288
287
  },
289
288
  Math.min(300_000, 90_000 + operations.length * 500)
290
289
  );
291
- return result;
292
290
  }
293
291
 
294
292
  // Runs the batch on the Office host. An empty new deck first takes the
@@ -528,9 +526,8 @@ async function withDocumentCharts(session, operations, scratch) {
528
526
  const pdf = join(directory, `chart-${index + 1}.pdf`);
529
527
  await createChartPdf(pdf, block, { width: pointsWide });
530
528
  // Three pixels a point: the picture stays sharp in print and at the zoom a reader uses.
531
- const [image] = (
532
- await renderPdfPages(pdf, { pages: [1], maxWidth: Math.round(pointsWide * 3), maximumScale: 3 })
533
- ).images;
529
+ const [image] = (await renderPdfPages(pdf, { pages: [1], maxWidth: Math.round(pointsWide * 3), maximumScale: 3 }))
530
+ .images;
534
531
  output.push({
535
532
  op: 'add_image',
536
533
  path: image.path,
@@ -18,6 +18,10 @@ import { reviewOfficeStructure } from '../quality/assurance.mjs';
18
18
  import { OOXML_FORMATS, TABULAR_FORMATS } from './office-core.mjs';
19
19
  import { readComSavedCopy, snapshot } from './office-sessions.mjs';
20
20
 
21
+ // A finding is the same finding wherever its code and path agree; the merges below drop the ones a result already holds.
22
+ const findingKey = (entry) => `${entry.code}\0${entry.path}`;
23
+ const knownFindings = (result) => new Set((result.issues || []).map(findingKey));
24
+
21
25
  // One document read per document version for every review that needs the whole
22
26
  // document: issues and qa both ask for it, and reading it twice per call costs
23
27
  // the caller seconds on a large workbook.
@@ -187,9 +191,9 @@ function auditSavedCopy(session, audit) {
187
191
 
188
192
  function mergeComPptxMeasuredRead(result, { value: measured, error }) {
189
193
  if (error) return { ...result, measuredRead: { status: 'unavailable', reason: error?.message || String(error) } };
190
- const seen = new Set((result.issues || []).map((issue) => `${issue.code}|${issue.path}`));
194
+ const seen = knownFindings(result);
191
195
  const added = (measured.issues || []).filter(
192
- (issue) => !HOST_OWNED_PPTX_CODES.has(String(issue.code || '')) && !seen.has(`${issue.code}|${issue.path}`)
196
+ (issue) => !HOST_OWNED_PPTX_CODES.has(String(issue.code || '')) && !seen.has(findingKey(issue))
193
197
  );
194
198
  if (!added.length) return { ...result, measuredRead: { status: 'merged', added: 0 } };
195
199
  const issues = normalizeOfficeReviewIssues([...(result.issues || []), ...added]);
@@ -206,7 +210,11 @@ function mergeComPptxMeasuredRead(result, { value: measured, error }) {
206
210
  // validated cells, so a cut label, a figure run into the label beside it, ink nobody can see, a number cut below the
207
211
  // sample, and a form nobody can type into passed on Excel while the portable audit reported them. The saved copy is
208
212
  // read by the portable audits themselves; a number the host already saw cut in a column stays the host's finding.
209
- const cellColumn = (path) => /^\/sheet\[(.*)\]\/cell\[\$?([A-Z]+)\$?\d+\]$/.exec(String(path || ''))?.slice(1).join('\0');
213
+ const cellColumn = (path) =>
214
+ /^\/sheet\[(.*)\]\/cell\[\$?([A-Z]+)\$?\d+\]$/
215
+ .exec(String(path || ''))
216
+ ?.slice(1)
217
+ .join('\0');
210
218
 
211
219
  function xlsxSheetAudits(session, args) {
212
220
  return auditSavedCopy(session, async (copy) => {
@@ -222,14 +230,13 @@ function xlsxSheetAudits(session, args) {
222
230
 
223
231
  function mergeXlsxSheetAudits(result, { value: found, error }) {
224
232
  if (error) return { ...result, sheetAudit: { status: 'unavailable', reason: error?.message || String(error) } };
225
- const known = new Set((result.issues || []).map((entry) => `${entry.code}\0${entry.path}`));
233
+ const known = knownFindings(result);
226
234
  const overflowing = new Set(
227
235
  (result.issues || []).filter((entry) => entry.code === 'cell_overflow').map((entry) => cellColumn(entry.path))
228
236
  );
229
237
  const added = found.filter(
230
238
  (entry) =>
231
- !known.has(`${entry.code}\0${entry.path}`) &&
232
- !(entry.code === 'column_too_narrow' && overflowing.has(cellColumn(entry.path)))
239
+ !known.has(findingKey(entry)) && !(entry.code === 'column_too_narrow' && overflowing.has(cellColumn(entry.path)))
233
240
  );
234
241
  if (!added.length) return { ...result, sheetAudit: { status: 'merged', added: 0 } };
235
242
  return {
@@ -275,10 +282,8 @@ async function microsoftOfficeIssues(session, args) {
275
282
  // portable rule applies to it and an unlabelled figure no longer passes on Word alone.
276
283
  if (session.format === 'docx') {
277
284
  const read = await snapshot(session, {}, { full: true });
278
- const known = new Set((result.issues || []).map((entry) => `${entry.code}\0${entry.path}`));
279
- const added = pictureDescriptionIssues(read?.document || {}).filter(
280
- (entry) => !known.has(`${entry.code}\0${entry.path}`)
281
- );
285
+ const known = knownFindings(result);
286
+ const added = pictureDescriptionIssues(read?.document || {}).filter((entry) => !known.has(findingKey(entry)));
282
287
  if (added.length) result = { ...result, issues: normalizeOfficeReviewIssues([...(result.issues || []), ...added]) };
283
288
  }
284
289
  return result;
@@ -298,10 +303,8 @@ export async function issues(session, args = {}) {
298
303
  // A finding the package reader already made at the same place is the same finding worded twice: the portable
299
304
  // contrast measure (against the resolved surface) and the format review's (against the slide) both reported
300
305
  // "Hard to read" once the portable snapshot carried text colours. The package reader's, the more exact, stays.
301
- const found = new Set((result.issues || []).map((entry) => `${entry.code}\0${entry.path}`));
302
- const structural = (await structureIssues(session, args)).filter(
303
- (entry) => !found.has(`${entry.code}\0${entry.path}`)
304
- );
306
+ const found = knownFindings(result);
307
+ const structural = (await structureIssues(session, args)).filter((entry) => !found.has(findingKey(entry)));
305
308
  // Normalized whether or not the structure review added anything: skipped when it found nothing, a portable deck's
306
309
  // overflow and overlap kept the warning the Office backend's copy of the same finding had been raised from.
307
310
  const merged = normalizeOfficeReviewIssues([...(result.issues || []), ...structural]);
@@ -10,12 +10,7 @@ import {
10
10
  releaseOfficeSession,
11
11
  toolResult,
12
12
  } from './office-core.mjs';
13
- import { createSession, openSession, snapshot } from './office-sessions.mjs';
14
-
15
- function initialOfficeOperations(args) {
16
- if (Array.isArray(args.operations) && args.operations.length) return args.operations;
17
- return Array.isArray(args.design?.operations) ? args.design.operations : [];
18
- }
13
+ import { createSession, initialOfficeOperations, openSession, snapshot } from './office-sessions.mjs';
19
14
 
20
15
  async function discardFailedOfficeSession(session, { action, initialEditSettled }) {
21
16
  if (session.reused) return;
@@ -309,7 +309,14 @@ function officeDesignDigest(design) {
309
309
  // a count per operation. A write that did not change, or reports anything past
310
310
  // its address, stays in place, as does every object a later call names (a
311
311
  // table, a chart).
312
- const PRESET_ROUTINE_OPS = new Set(['append_text', 'set_table_cell_style', 'set_style', 'merge_cells', 'set_cell', 'set_row_height']);
312
+ const PRESET_ROUTINE_OPS = new Set([
313
+ 'append_text',
314
+ 'set_table_cell_style',
315
+ 'set_style',
316
+ 'merge_cells',
317
+ 'set_cell',
318
+ 'set_row_height',
319
+ ]);
313
320
  const PRESET_ROUTINE_FIELDS = new Set(['op', 'changed', 'style', 'table', 'row', 'col', 'sheet', 'cell', 'range']);
314
321
  function presetResults(results, semantic) {
315
322
  if (!Array.isArray(semantic) || !semantic.length) return results;
@@ -410,7 +417,13 @@ function modelFacingQaResult(result, topVisualReview, { finalized = false } = {}
410
417
  ...review.checklist,
411
418
  items: review.checklist.items.filter((item) => item?.status !== 'pass' && !renderOwed(item)),
412
419
  ...(dropped && summary
413
- ? { summary: { ...summary, total: summary.total - dropped, failed: Math.max(0, (summary.failed || 0) - dropped) } }
420
+ ? {
421
+ summary: {
422
+ ...summary,
423
+ total: summary.total - dropped,
424
+ failed: Math.max(0, (summary.failed || 0) - dropped),
425
+ },
426
+ }
414
427
  : {}),
415
428
  };
416
429
  }
@@ -480,7 +493,12 @@ function finalizeValidationDigest(validation, result, session = null) {
480
493
  for (const key of ['format', 'entries', 'mainPart', 'mainContentType', 'validation']) delete digest[key];
481
494
  if (digest.mainContentTypeMissing === false) delete digest.mainContentTypeMissing;
482
495
  const security = digest.security;
483
- if (security && security.macroExecution === 'disabled' && !security.digitalSignatureInvalidated && Object.keys(security).length <= 2) {
496
+ if (
497
+ security &&
498
+ security.macroExecution === 'disabled' &&
499
+ !security.digitalSignatureInvalidated &&
500
+ Object.keys(security).length <= 2
501
+ ) {
484
502
  delete digest.security;
485
503
  }
486
504
  for (const [check, detail] of Object.entries(PASSED_CHECK_DETAIL)) {
@@ -530,7 +548,13 @@ const bgrHex = (value) =>
530
548
  .join('')
531
549
  .toUpperCase();
532
550
 
533
- const POWERPOINT_TEXT_FRAME = { marginLeft: 7.2, marginTop: 3.6, marginRight: 7.2, marginBottom: 3.6, paragraphSpacing: 0 };
551
+ const POWERPOINT_TEXT_FRAME = {
552
+ marginLeft: 7.2,
553
+ marginTop: 3.6,
554
+ marginRight: 7.2,
555
+ marginBottom: 3.6,
556
+ paragraphSpacing: 0,
557
+ };
534
558
 
535
559
  // Excel's chart kinds by the name the portable reader and add_chart use; a kind outside this list keeps its number.
536
560
  const EXCEL_CHART_TYPES = {
@@ -550,10 +574,18 @@ const EXCEL_CHART_TYPES = {
550
574
  15: 'bubble',
551
575
  '-4151': 'radar',
552
576
  };
553
- const chartTypeName = (value) => (typeof value === 'number' && EXCEL_CHART_TYPES[value] ? EXCEL_CHART_TYPES[value] : value);
577
+ const chartTypeName = (value) =>
578
+ typeof value === 'number' && EXCEL_CHART_TYPES[value] ? EXCEL_CHART_TYPES[value] : value;
554
579
 
555
580
  // A series on the primary axis with no name formula, trendline, error bars, or labels says so by omission.
556
- const QUIET_SERIES = { formula: '', axisGroup: 1, trendlineCount: 0, hasErrorBars: false, hasDataLabels: false, dataLabels: null };
581
+ const QUIET_SERIES = {
582
+ formula: '',
583
+ axisGroup: 1,
584
+ trendlineCount: 0,
585
+ hasErrorBars: false,
586
+ hasDataLabels: false,
587
+ dataLabels: null,
588
+ };
557
589
 
558
590
  function comSeriesDigest(entry) {
559
591
  const kept = Object.fromEntries(
@@ -562,6 +594,9 @@ function comSeriesDigest(entry) {
562
594
  return { ...kept, ...(entry.chartType !== undefined ? { chartType: chartTypeName(entry.chartType) } : {}) };
563
595
  }
564
596
 
597
+ // A digest step applied to the object entries of a list; anything else passes through.
598
+ const digestObjectWith = (digestEntry) => (entry) => (entry && typeof entry === 'object' ? digestEntry(entry) : entry);
599
+
565
600
  function comShapeDigest(shape) {
566
601
  const digest = {};
567
602
  for (const [key, value] of Object.entries(shape)) {
@@ -575,13 +610,9 @@ function comShapeDigest(shape) {
575
610
  if (digest.font && !digest.font.name && !Number(digest.font.size)) delete digest.font;
576
611
  }
577
612
  if (digest.chart && typeof digest.chart === 'object') {
578
- digest.chart = {
579
- ...digest.chart,
580
- chartType: chartTypeName(digest.chart.chartType),
581
- ...(Array.isArray(digest.chart.series)
582
- ? { series: digest.chart.series.map((entry) => (entry && typeof entry === 'object' ? comSeriesDigest(entry) : entry)) }
583
- : {}),
584
- };
613
+ const chart = { ...digest.chart, chartType: chartTypeName(digest.chart.chartType) };
614
+ if (Array.isArray(digest.chart.series)) chart.series = digest.chart.series.map(digestObjectWith(comSeriesDigest));
615
+ digest.chart = chart;
585
616
  }
586
617
  for (const key of ['textBounds', 'textFrame']) {
587
618
  if (digest[key] && typeof digest[key] === 'object') digest[key] = roundAll(digest[key]);
@@ -607,14 +638,18 @@ function comShapeDigest(shape) {
607
638
  if (digest.geometry === '') delete digest.geometry;
608
639
  if (digest.textFrame && typeof digest.textFrame === 'object') {
609
640
  const frame = Object.fromEntries(
610
- Object.entries(digest.textFrame).filter(([key, value]) => !(Object.hasOwn(POWERPOINT_TEXT_FRAME, key) && POWERPOINT_TEXT_FRAME[key] === value))
641
+ Object.entries(digest.textFrame).filter(
642
+ ([key, value]) => !(Object.hasOwn(POWERPOINT_TEXT_FRAME, key) && POWERPOINT_TEXT_FRAME[key] === value)
643
+ )
611
644
  );
612
645
  if (Object.keys(frame).length) digest.textFrame = frame;
613
646
  else delete digest.textFrame;
614
647
  }
615
648
  if (digest.font && typeof digest.font === 'object') {
616
649
  const font = Object.fromEntries(
617
- Object.entries(digest.font).filter(([key, value]) => !(['bold', 'italic', 'underline'].includes(key) && (value === 0 || value === false)))
650
+ Object.entries(digest.font).filter(
651
+ ([key, value]) => !(['bold', 'italic', 'underline'].includes(key) && (value === 0 || value === false))
652
+ )
618
653
  );
619
654
  digest.font = font;
620
655
  }
@@ -662,11 +697,9 @@ function pptxDocumentDigest(document) {
662
697
  if (document?.format !== 'pptx' || !Array.isArray(document.slides)) return document;
663
698
  // add_slide names a layout by its name or position; the part it lives in and a path built from that same
664
699
  // position repeat what the runtime resolves itself, on every one of a template's dozens of layouts.
665
- const layouts = Array.isArray(document.layouts)
666
- ? document.layouts.map((layout, position) =>
667
- layout && typeof layout === 'object' ? { index: layout.index ?? position + 1, name: layout.name } : layout
668
- )
669
- : document.layouts;
700
+ const layoutDigest = (layout, position) =>
701
+ layout && typeof layout === 'object' ? { index: layout.index ?? position + 1, name: layout.name } : layout;
702
+ const layouts = Array.isArray(document.layouts) ? document.layouts.map(layoutDigest) : document.layouts;
670
703
  return {
671
704
  ...document,
672
705
  ...(layouts ? { layouts } : {}),
@@ -699,12 +732,11 @@ export function officeDocumentDigest(document) {
699
732
  // A delimited file's cell names its place twice: the reference already says the row and the column.
700
733
  function tabularDocumentDigest(document) {
701
734
  if (!Array.isArray(document.sheets)) return document;
735
+ const cellDigest = digestObjectWith(({ row, column, ...rest }) => rest);
702
736
  return {
703
737
  ...document,
704
738
  sheets: document.sheets.map((sheet) =>
705
- Array.isArray(sheet?.cells)
706
- ? { ...sheet, cells: sheet.cells.map((cell) => (cell && typeof cell === 'object' ? (({ row, column, ...rest }) => rest)(cell) : cell)) }
707
- : sheet
739
+ Array.isArray(sheet?.cells) ? { ...sheet, cells: sheet.cells.map(cellDigest) } : sheet
708
740
  ),
709
741
  };
710
742
  }
@@ -730,7 +762,8 @@ function xlsxSheetDigest(sheet, defaults) {
730
762
  if (digest.pageSetup && typeof digest.pageSetup === 'object') {
731
763
  const setup = Object.fromEntries(
732
764
  Object.entries(digest.pageSetup).filter(
733
- ([key, entry]) => entry !== '' && entry !== false && !(Object.hasOwn(QUIET_PAGE_SETUP, key) && QUIET_PAGE_SETUP[key] === entry)
765
+ ([key, entry]) =>
766
+ entry !== '' && entry !== false && !(Object.hasOwn(QUIET_PAGE_SETUP, key) && QUIET_PAGE_SETUP[key] === entry)
734
767
  )
735
768
  );
736
769
  if (Object.keys(setup).length) digest.pageSetup = setup;
@@ -743,7 +776,9 @@ function xlsxSheetDigest(sheet, defaults) {
743
776
  digest.formulaLineage = digest.formulaLineage.map((entry) => {
744
777
  const cell = /\/cell\[([^\]]+)\]$/.exec(String(entry?.from || ''))?.[1] || entry?.from;
745
778
  const precedents = (entry?.precedents || []).map((precedent) =>
746
- precedent?.sheet && precedent.sheet !== sheet.name ? `${precedent.sheet}!${precedent.ref}` : precedent?.ref ?? precedent
779
+ precedent?.sheet && precedent.sheet !== sheet.name
780
+ ? `${precedent.sheet}!${precedent.ref}`
781
+ : (precedent?.ref ?? precedent)
747
782
  );
748
783
  return { cell, precedents };
749
784
  });
@@ -783,7 +818,8 @@ function xlsxDocumentDigest(document) {
783
818
  delete digest.definedNames;
784
819
  if (digest.definedNameCount === 0) delete digest.definedNameCount;
785
820
  }
786
- if (plainObject(digest.calculation) && Object.values(digest.calculation).every((value) => !value)) delete digest.calculation;
821
+ if (plainObject(digest.calculation) && Object.values(digest.calculation).every((value) => !value))
822
+ delete digest.calculation;
787
823
  return digest;
788
824
  }
789
825
 
@@ -815,13 +851,17 @@ const roundPoint = (field) => (typeof field === 'number' ? Math.round(field * 10
815
851
  function pdfDocumentDigest(document) {
816
852
  if (document?.format !== 'pdf') return document;
817
853
  const digest = withoutPdfDefaults(document);
818
- for (const key of Object.keys(digest)) if (/Count$/.test(key) && key !== 'pageCount' && digest[key] === 0) delete digest[key];
854
+ for (const key of Object.keys(digest))
855
+ if (/Count$/.test(key) && key !== 'pageCount' && digest[key] === 0) delete digest[key];
819
856
  if (digest.metadata && typeof digest.metadata === 'object') {
820
- const metadata = Object.fromEntries(Object.entries(digest.metadata).filter(([, field]) => field !== '' && field != null));
857
+ const metadata = Object.fromEntries(
858
+ Object.entries(digest.metadata).filter(([, field]) => field !== '' && field != null)
859
+ );
821
860
  if (Object.keys(metadata).length) digest.metadata = metadata;
822
861
  else delete digest.metadata;
823
862
  }
824
- if (digest.pagination && digest.pagination.hasMore !== true && !(Number(digest.pagination.offset) > 0)) delete digest.pagination;
863
+ if (digest.pagination && digest.pagination.hasMore !== true && !(Number(digest.pagination.offset) > 0))
864
+ delete digest.pagination;
825
865
  if (Array.isArray(digest.pages)) {
826
866
  digest.pages = digest.pages.map((page) => {
827
867
  const { rotation, width, height, ...rest } = page || {};
@@ -853,7 +893,9 @@ function quietParagraph(raw) {
853
893
  if (paragraph.pageEnd !== undefined && paragraph.pageEnd === paragraph.pageStart) delete paragraph.pageEnd;
854
894
  if (paragraph.font && typeof paragraph.font === 'object') {
855
895
  paragraph.font = Object.fromEntries(
856
- Object.entries(paragraph.font).filter(([key, value]) => !(Object.hasOwn(QUIET_PARAGRAPH_FONT, key) && QUIET_PARAGRAPH_FONT[key] === value))
896
+ Object.entries(paragraph.font).filter(
897
+ ([key, value]) => !(Object.hasOwn(QUIET_PARAGRAPH_FONT, key) && QUIET_PARAGRAPH_FONT[key] === value)
898
+ )
857
899
  );
858
900
  if (!Object.keys(paragraph.font).length) delete paragraph.font;
859
901
  }
@@ -915,11 +957,18 @@ function docxDocumentDigest(document) {
915
957
  const parts = Array.isArray(document.parts)
916
958
  ? document.parts.filter(
917
959
  (part) =>
918
- !(complete && part?.part === 'word/document.xml' && paragraphs.length && Object.keys(part).every((key) => key === 'part' || key === 'text'))
960
+ !(
961
+ complete &&
962
+ part?.part === 'word/document.xml' &&
963
+ paragraphs.length &&
964
+ Object.keys(part).every((key) => key === 'part' || key === 'text')
965
+ )
919
966
  )
920
967
  : document.parts;
921
968
  // A family the counts already call empty (comments, revisions, notes, controls, images) reads the same absent.
922
- const digest = Object.fromEntries(Object.entries(document).filter(([, value]) => !(Array.isArray(value) && !value.length)));
969
+ const digest = Object.fromEntries(
970
+ Object.entries(document).filter(([, value]) => !(Array.isArray(value) && !value.length))
971
+ );
923
972
  // Word (COM) places a table by character offsets and reports its left alignment as 0; a comment that is open and
924
973
  // unanswered says so by omission, as the portable reader writes it.
925
974
  if (Array.isArray(digest.tables)) {
@@ -970,7 +1019,8 @@ function docxDocumentDigest(document) {
970
1019
  return rest;
971
1020
  });
972
1021
  }
973
- if (Array.isArray(document.blockOrder) && document.blockOrder.length) digest.blockOrder = blockOrderDigest(document.blockOrder);
1022
+ if (Array.isArray(document.blockOrder) && document.blockOrder.length)
1023
+ digest.blockOrder = blockOrderDigest(document.blockOrder);
974
1024
  if (!parts?.length) delete digest.parts;
975
1025
  return { ...digest, paragraphs, ...(parts?.length ? { parts } : {}) };
976
1026
  }
@@ -1023,7 +1073,8 @@ export function finalizeOfficeResult(value, { action, session = null, startedAt
1023
1073
  if (finalizing && value.review) {
1024
1074
  value.review = modelFacingQaResult(value.review, value.visualReview, { finalized: value.finalized === true });
1025
1075
  const inner = value.review.review;
1026
- if (inner?.design) value.review = { ...value.review, review: { ...inner, design: modelReviewOnce(inner.design, session) } };
1076
+ if (inner?.design)
1077
+ value.review = { ...value.review, review: { ...inner, design: modelReviewOnce(inner.design, session) } };
1027
1078
  }
1028
1079
  if (finalizing) {
1029
1080
  // The reopened file's full shape inventory proves persistence, which its
@@ -1092,8 +1143,11 @@ export function finalizeOfficeResult(value, { action, session = null, startedAt
1092
1143
  }
1093
1144
  // An operation's result names what it did; an empty string field says nothing.
1094
1145
  const withoutBlank = (entry) =>
1095
- entry && typeof entry === 'object' ? Object.fromEntries(Object.entries(entry).filter(([, field]) => field !== '')) : entry;
1096
- if (Array.isArray(value.results)) value.results = presetResults(value.results.map(withoutBlank), value.semanticOperations);
1146
+ entry && typeof entry === 'object'
1147
+ ? Object.fromEntries(Object.entries(entry).filter(([, field]) => field !== ''))
1148
+ : entry;
1149
+ if (Array.isArray(value.results))
1150
+ value.results = presetResults(value.results.map(withoutBlank), value.semanticOperations);
1097
1151
  if (Array.isArray(value.batch?.results)) {
1098
1152
  value.batch = {
1099
1153
  ...value.batch,
@@ -1110,6 +1164,12 @@ export function finalizeOfficeResult(value, { action, session = null, startedAt
1110
1164
  value.factsMode = 'sample';
1111
1165
  value.disclosure = FACTS_SAMPLE_DISCLOSURE;
1112
1166
  }
1167
+ attachOfficeArtifacts(value, action, session);
1168
+ return value;
1169
+ }
1170
+
1171
+ // The file an action produced or edited, named as an artifact of the result.
1172
+ function attachOfficeArtifacts(value, action, session) {
1113
1173
  let operation = '';
1114
1174
  if (action === 'create' || (action === 'author' && value.output)) operation = 'create';
1115
1175
  else if (action === 'render') operation = 'render';
@@ -1117,19 +1177,17 @@ export function finalizeOfficeResult(value, { action, session = null, startedAt
1117
1177
  let artifactPath = '';
1118
1178
  if (action === 'render' || action === 'secure') artifactPath = value.output;
1119
1179
  else if (operation && session) artifactPath = session.target;
1120
- if (operation && artifactPath) {
1121
- value.artifacts = [
1122
- officeArtifact(
1123
- session?.format || (action === 'secure' ? 'pdf' : ''),
1124
- session?.fileKind || (action === 'secure' ? 'pdf' : ''),
1125
- artifactPath,
1126
- operation
1127
- ),
1128
- ];
1129
- value.outputCount = value.artifacts.length;
1130
- value.expectedOutputCount = 1;
1131
- }
1132
- return value;
1180
+ if (!operation || !artifactPath) return;
1181
+ value.artifacts = [
1182
+ officeArtifact(
1183
+ session?.format || (action === 'secure' ? 'pdf' : ''),
1184
+ session?.fileKind || (action === 'secure' ? 'pdf' : ''),
1185
+ artifactPath,
1186
+ operation
1187
+ ),
1188
+ ];
1189
+ value.outputCount = value.artifacts.length;
1190
+ value.expectedOutputCount = 1;
1133
1191
  }
1134
1192
 
1135
1193
  export function bounded(value, maxChars, length = null) {
@@ -21,7 +21,10 @@ const AUTHORED_ADVISORY_SOURCES = new Set([
21
21
  const VISIBLE_DEFECT_CODES = new Set(['drawing_covers_cells', 'drawing_overlap']);
22
22
 
23
23
  export function blocksFinalize(issue, { failOn, authored }) {
24
- if (VISIBLE_DEFECT_CODES.has(String(issue?.code || '')) && ['error', 'warning'].includes(String(issue?.severity || '')))
24
+ if (
25
+ VISIBLE_DEFECT_CODES.has(String(issue?.code || '')) &&
26
+ ['error', 'warning'].includes(String(issue?.severity || ''))
27
+ )
25
28
  return true;
26
29
  if (authored && AUTHORED_ADVISORY_SOURCES.has(String(issue?.source || ''))) return false;
27
30
  return issue?.severity === 'error' || (failOn === 'warning' && issue?.severity === 'warning');
@@ -2,6 +2,7 @@
2
2
  // per-page roles the render review needs; an unreadable document degrades to
3
3
  // one advisory issue instead of failing QA.
4
4
  import { inferPptxSlideRoles, reviewOfficeDesign } from '../../quality/design-review.mjs';
5
+ import { issue } from '../../quality/assurance-issue.mjs';
5
6
  import { reviewSnapshot } from '../office-actions-inspect.mjs';
6
7
 
7
8
  function unavailableDesignReview(session, error) {
@@ -11,15 +12,7 @@ function unavailableDesignReview(session, error) {
11
12
  profile: session.design?.profile || '',
12
13
  requiresVisualInspection: true,
13
14
  modelReview: [],
14
- issues: [
15
- {
16
- severity: 'warning',
17
- code: 'design_review_unavailable',
18
- path: '/',
19
- message: error?.message || String(error),
20
- source: 'design-review',
21
- },
22
- ],
15
+ issues: [issue('design_review_unavailable', '/', error?.message || String(error), 'design-review')],
23
16
  };
24
17
  }
25
18