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