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
|
@@ -91,6 +91,25 @@ const REBUILD_FIELDS = [
|
|
|
91
91
|
'dataLabelPosition',
|
|
92
92
|
'dataLabelColor',
|
|
93
93
|
];
|
|
94
|
+
// An accent on the last point marks the latest period; when the refresh changes the number of points it moves to
|
|
95
|
+
// the new last one. Kept at its index, a monthly refresh left April lit under a title about May.
|
|
96
|
+
function accentOnLastPoint(series, count) {
|
|
97
|
+
let block = series;
|
|
98
|
+
const previousCount = Number(/<c:val>[\s\S]*?<c:ptCount val="(\d+)"/.exec(block)?.[1]) || 0;
|
|
99
|
+
const seriesColor = /<a:srgbClr val="([0-9A-Fa-f]{6})"/.exec(block.split('<c:dPt>')[0])?.[1] || '';
|
|
100
|
+
const pointAt = (point) => Number(/<c:idx val="(\d+)"/.exec(point)?.[1]);
|
|
101
|
+
const points = [...block.matchAll(/<c:dPt>[\s\S]*?<\/c:dPt>/g)].map((point) => point[0]);
|
|
102
|
+
const accents = points.filter((point) => /<a:srgbClr val="([0-9A-Fa-f]{6})"/.exec(point)?.[1] !== seriesColor);
|
|
103
|
+
if (count !== previousCount && accents.length === 1 && pointAt(accents[0]) === previousCount - 1) {
|
|
104
|
+
// The accent and the point now last trade places; one past the new end is dropped by the caller.
|
|
105
|
+
const displaced = points.find((point) => pointAt(point) === count - 1);
|
|
106
|
+
const moved = (point, to) => point.replace(/<c:idx val="\d+"\/>/, `<c:idx val="${to}"/>`);
|
|
107
|
+
block = block.replace(accents[0], moved(accents[0], count - 1));
|
|
108
|
+
if (displaced) block = block.replace(displaced, moved(displaced, previousCount - 1));
|
|
109
|
+
}
|
|
110
|
+
return block;
|
|
111
|
+
}
|
|
112
|
+
|
|
94
113
|
function refreshChartDataInPlace(xml, categories, series, op) {
|
|
95
114
|
if (REBUILD_FIELDS.some((field) => op[field] !== undefined)) return null;
|
|
96
115
|
const blocks = [...String(xml).matchAll(/<c:ser>[\s\S]*?<\/c:ser>/g)];
|
|
@@ -107,20 +126,7 @@ function refreshChartDataInPlace(xml, categories, series, op) {
|
|
|
107
126
|
let block = blocks[index][0];
|
|
108
127
|
const entry = series[index];
|
|
109
128
|
if (!/<c:val>[\s\S]*?<c:numCache>/.test(block)) return null;
|
|
110
|
-
|
|
111
|
-
// the new last one. Kept at its index, a monthly refresh left April lit under a title about May.
|
|
112
|
-
const previousCount = Number(/<c:val>[\s\S]*?<c:ptCount val="(\d+)"/.exec(block)?.[1]) || 0;
|
|
113
|
-
const seriesColor = /<a:srgbClr val="([0-9A-Fa-f]{6})"/.exec(block.split('<c:dPt>')[0])?.[1] || '';
|
|
114
|
-
const pointAt = (point) => Number(/<c:idx val="(\d+)"/.exec(point)?.[1]);
|
|
115
|
-
const points = [...block.matchAll(/<c:dPt>[\s\S]*?<\/c:dPt>/g)].map((point) => point[0]);
|
|
116
|
-
const accents = points.filter((point) => /<a:srgbClr val="([0-9A-Fa-f]{6})"/.exec(point)?.[1] !== seriesColor);
|
|
117
|
-
if (count !== previousCount && accents.length === 1 && pointAt(accents[0]) === previousCount - 1) {
|
|
118
|
-
// The accent and the point now last trade places; one past the new end is dropped below.
|
|
119
|
-
const displaced = points.find((point) => pointAt(point) === count - 1);
|
|
120
|
-
const moved = (point, to) => point.replace(/<c:idx val="\d+"\/>/, `<c:idx val="${to}"/>`);
|
|
121
|
-
block = block.replace(accents[0], moved(accents[0], count - 1));
|
|
122
|
-
if (displaced) block = block.replace(displaced, moved(displaced, previousCount - 1));
|
|
123
|
-
}
|
|
129
|
+
block = accentOnLastPoint(block, count);
|
|
124
130
|
if (entry.name != null) {
|
|
125
131
|
// A name read from the sheet keeps its reference and takes the new cache; one written as text is rewritten.
|
|
126
132
|
block = /<c:tx>\s*<c:v>/.test(block)
|
|
@@ -223,7 +229,12 @@ function retitledChart(xml, text) {
|
|
|
223
229
|
const CATEGORY_ORDERS = Object.freeze({ topdown: 'maxMin', bottomup: 'minMax' });
|
|
224
230
|
function categoryOrientationFor(op) {
|
|
225
231
|
if (op.categoryOrder == null || op.categoryOrder === '') return '';
|
|
226
|
-
const orientation =
|
|
232
|
+
const orientation =
|
|
233
|
+
CATEGORY_ORDERS[
|
|
234
|
+
String(op.categoryOrder)
|
|
235
|
+
.replace(/[\s_-]/g, '')
|
|
236
|
+
.toLowerCase()
|
|
237
|
+
];
|
|
227
238
|
if (!orientation) throw new Error("set_chart_data categoryOrder must be 'topDown' or 'bottomUp'");
|
|
228
239
|
return orientation;
|
|
229
240
|
}
|
|
@@ -256,6 +267,30 @@ function withCategoryOrientation(xml, orientation) {
|
|
|
256
267
|
return xml.replace(categoryAxis, oriented).replace(valueAxis, crossed);
|
|
257
268
|
}
|
|
258
269
|
|
|
270
|
+
// The new series carrying the colours the chart already had.
|
|
271
|
+
function withKeptColors(series, kept, previousCount) {
|
|
272
|
+
return series.map((entry, index) => {
|
|
273
|
+
if (!entry) return entry;
|
|
274
|
+
let points = kept.pointColors?.[index] || [];
|
|
275
|
+
// Point colors are kept only where the new data still has that point, so a
|
|
276
|
+
// shorter refresh never leaves the accent on a category that is gone; a
|
|
277
|
+
// lone accent on the last point follows the last point.
|
|
278
|
+
const valueCount = Array.isArray(entry.values) ? entry.values.length : 0;
|
|
279
|
+
const base = kept.seriesColors[index];
|
|
280
|
+
const lit = points.map((color, point) => (color && color !== base ? point : -1)).filter((point) => point >= 0);
|
|
281
|
+
if (valueCount !== previousCount && lit.length === 1 && lit[0] === previousCount - 1) {
|
|
282
|
+
const accent = points[lit[0]];
|
|
283
|
+
points = [...points];
|
|
284
|
+
points[lit[0]] = points[valueCount - 1];
|
|
285
|
+
points[valueCount - 1] = accent;
|
|
286
|
+
}
|
|
287
|
+
const carried =
|
|
288
|
+
entry.pointColors === undefined && points.some(Boolean) ? { pointColors: points.slice(0, valueCount) } : {};
|
|
289
|
+
const filled = entry.color === undefined && kept.seriesColors[index] ? { color: kept.seriesColors[index] } : {};
|
|
290
|
+
return Object.keys(carried).length || Object.keys(filled).length ? { ...entry, ...filled, ...carried } : entry;
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
|
|
259
294
|
export async function handleSetChartData(context, op) {
|
|
260
295
|
const { zip } = context;
|
|
261
296
|
const { part: chartPart, xml: existing } = await resolveSlideChart(zip, context.slides, op);
|
|
@@ -281,29 +316,13 @@ export async function handleSetChartData(context, op) {
|
|
|
281
316
|
if (!kept.seriesColors[index] && token) kept.seriesColors[index] = await themeColor(zip, masterPart, token);
|
|
282
317
|
}
|
|
283
318
|
}
|
|
284
|
-
const
|
|
285
|
-
const coloured = series.map((entry, index) => {
|
|
286
|
-
if (!entry) return entry;
|
|
287
|
-
let points = kept.pointColors?.[index] || [];
|
|
288
|
-
// Point colors are kept only where the new data still has that point, so a
|
|
289
|
-
// shorter refresh never leaves the accent on a category that is gone; a
|
|
290
|
-
// lone accent on the last point follows the last point.
|
|
291
|
-
const valueCount = Array.isArray(entry.values) ? entry.values.length : 0;
|
|
292
|
-
const base = kept.seriesColors[index];
|
|
293
|
-
const lit = points.map((color, point) => (color && color !== base ? point : -1)).filter((point) => point >= 0);
|
|
294
|
-
if (valueCount !== previousCount && lit.length === 1 && lit[0] === previousCount - 1) {
|
|
295
|
-
const accent = points[lit[0]];
|
|
296
|
-
points = [...points];
|
|
297
|
-
points[lit[0]] = points[valueCount - 1];
|
|
298
|
-
points[valueCount - 1] = accent;
|
|
299
|
-
}
|
|
300
|
-
const carried =
|
|
301
|
-
entry.pointColors === undefined && points.some(Boolean) ? { pointColors: points.slice(0, valueCount) } : {};
|
|
302
|
-
const filled = entry.color === undefined && kept.seriesColors[index] ? { color: kept.seriesColors[index] } : {};
|
|
303
|
-
return Object.keys(carried).length || Object.keys(filled).length ? { ...entry, ...filled, ...carried } : entry;
|
|
304
|
-
});
|
|
319
|
+
const coloured = withKeptColors(series, kept, chartCategories(existing).length);
|
|
305
320
|
const inPlace = refreshChartDataInPlace(existing, categories, series, op);
|
|
306
321
|
const refreshed = inPlace && op.title != null ? retitledChart(inPlace, String(op.title)) : inPlace;
|
|
322
|
+
// Another type is another chart: its categories read the way that type reads them.
|
|
323
|
+
const retypedAxis =
|
|
324
|
+
op.chartType && op.chartType !== detectChartType(existing) ? { ...kept.axis, categoryOrientation: '' } : kept.axis;
|
|
325
|
+
const chosen = (given, kept) => (given === undefined ? kept : given === true);
|
|
307
326
|
const rebuilt = refreshed
|
|
308
327
|
? null
|
|
309
328
|
: chartXml({
|
|
@@ -311,15 +330,13 @@ export async function handleSetChartData(context, op) {
|
|
|
311
330
|
title: op.title ?? chartTitleText(existing),
|
|
312
331
|
categories,
|
|
313
332
|
series: coloured,
|
|
314
|
-
showValues: op.showValues
|
|
333
|
+
showValues: chosen(op.showValues, kept.showValues),
|
|
315
334
|
dataLabelPosition: op.dataLabelPosition ?? kept.dataLabelPosition,
|
|
316
335
|
dataLabelColor: op.dataLabelColor ?? kept.dataLabelColor,
|
|
317
336
|
valueNumberFormat: op.valueNumberFormat ?? kept.valueNumberFormat,
|
|
318
337
|
showLegend: op.showLegend ?? kept.showLegend,
|
|
319
|
-
zeroBaseline: op.zeroBaseline
|
|
320
|
-
|
|
321
|
-
axis:
|
|
322
|
-
op.chartType && op.chartType !== detectChartType(existing) ? { ...kept.axis, categoryOrientation: '' } : kept.axis,
|
|
338
|
+
zeroBaseline: chosen(op.zeroBaseline, kept.zeroBaseline),
|
|
339
|
+
axis: retypedAxis,
|
|
323
340
|
externalDataId: 'rId1',
|
|
324
341
|
text: CHART_TEXT.slide,
|
|
325
342
|
});
|
|
@@ -365,7 +382,7 @@ export async function handleSetChartData(context, op) {
|
|
|
365
382
|
};
|
|
366
383
|
}
|
|
367
384
|
|
|
368
|
-
|
|
385
|
+
const BOTTOM_UP_NOTE =
|
|
369
386
|
"The bars read from the bottom up, the first category lowest, as this chart was authored; categoryOrder:'topDown' lists them from the top in the order given.";
|
|
370
387
|
|
|
371
388
|
// Rewrites the chart's series blocks in place. `wanted` is a 1-based series
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
import { presentationSlides } from './portable-pptx-package.mjs';
|
|
22
22
|
import { shapeIdentity } from './pptx-relations.mjs';
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
const DEFAULT_TEXT_INSETS = Object.freeze({ left: 7.2, top: 3.6, right: 7.2, bottom: 3.6 });
|
|
25
25
|
|
|
26
26
|
// A painted plane covers a box when the box sits inside it (a point of slack for EMU rounding).
|
|
27
27
|
function coversBounds(entry, bounds) {
|
|
@@ -306,7 +306,7 @@ export function setTableValues(shapeXml, values) {
|
|
|
306
306
|
// row repeats the last row. The rows past the table's end had been dropped, so a refresh with one more hub lost
|
|
307
307
|
// that hub. The table grows down; its width is the page's, and the columns it gains share it with the others — a
|
|
308
308
|
// template's three-column table given four columns ran past the slide's edge and cut the last one off.
|
|
309
|
-
const columns = Math.max(...values.map((source) => source.length));
|
|
309
|
+
const columns = Math.max(0, ...values.filter(Array.isArray).map((source) => source.length));
|
|
310
310
|
const grid = elementSpans(inner, 'a:gridCol');
|
|
311
311
|
const addedColumns = Math.max(0, columns - grid.length);
|
|
312
312
|
if (addedColumns) {
|
|
@@ -319,7 +319,10 @@ export function setTableValues(shapeXml, values) {
|
|
|
319
319
|
if (grown) shared[shared.length - 1] += frame - shared.reduce((total, width) => total + width, 0);
|
|
320
320
|
inner = `${inner.slice(0, last.end)}${last.xml.repeat(addedColumns)}${inner.slice(last.end)}`;
|
|
321
321
|
let column = 0;
|
|
322
|
-
inner = inner.replace(
|
|
322
|
+
inner = inner.replace(
|
|
323
|
+
/<a:gridCol\b([^>]*?)\bw="\d+"/g,
|
|
324
|
+
(_match, head) => `<a:gridCol${head}w="${shared[column++]}"`
|
|
325
|
+
);
|
|
323
326
|
const current = elementSpans(inner, 'a:tr');
|
|
324
327
|
for (let rowIndex = current.length - 1; rowIndex >= 0; rowIndex -= 1) {
|
|
325
328
|
const row = current[rowIndex];
|
|
@@ -464,7 +467,14 @@ export function updateShapeGeometry(shape, properties) {
|
|
|
464
467
|
for (const element of topLevelElements(cleaned, SHAPE_FILLS).reverse()) {
|
|
465
468
|
cleaned = `${cleaned.slice(0, element.start)}${cleaned.slice(element.end)}`;
|
|
466
469
|
}
|
|
467
|
-
const later = topLevelElements(cleaned, [
|
|
470
|
+
const later = topLevelElements(cleaned, [
|
|
471
|
+
'a:ln',
|
|
472
|
+
'a:effectLst',
|
|
473
|
+
'a:effectDag',
|
|
474
|
+
'a:scene3d',
|
|
475
|
+
'a:sp3d',
|
|
476
|
+
'a:extLst',
|
|
477
|
+
])[0];
|
|
468
478
|
const position = later ? later.start : cleaned.length;
|
|
469
479
|
const inner = `${cleaned.slice(0, position)}${fill}${cleaned.slice(position)}`;
|
|
470
480
|
next = `${next.slice(0, shapeProperties.start)}${inner}${next.slice(shapeProperties.end)}`;
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
ensureContentTypeOverride,
|
|
9
9
|
ensureDefaultContentType,
|
|
10
10
|
loadPackage,
|
|
11
|
+
partFromTarget,
|
|
11
12
|
partRelationshipPath,
|
|
12
13
|
relationshipMap,
|
|
13
14
|
relationshipTargetByType,
|
|
@@ -166,7 +167,7 @@ async function followingLayout(zip, layouts, index) {
|
|
|
166
167
|
if (!before) return null;
|
|
167
168
|
const target = relationshipTargetByType(await zipText(zip, partRelationshipPath(before.path)), 'slideLayout');
|
|
168
169
|
if (!target) return null;
|
|
169
|
-
const path =
|
|
170
|
+
const path = partFromTarget(posix.dirname(before.path), target);
|
|
170
171
|
const layout = layouts.find((entry) => entry.path === path);
|
|
171
172
|
return layout && layout.type !== 'title' ? layout : null;
|
|
172
173
|
}
|
|
@@ -393,7 +394,7 @@ export async function ensureCommentAuthor(zip, author, initials) {
|
|
|
393
394
|
export async function ensureSlideComments(zip, slide) {
|
|
394
395
|
const relationships = partRelationshipPath(slide.path);
|
|
395
396
|
const target = relationshipTargetByType(await zipText(zip, relationships), 'comments');
|
|
396
|
-
if (target) return
|
|
397
|
+
if (target) return partFromTarget(posix.dirname(slide.path), target);
|
|
397
398
|
let ordinal = 1;
|
|
398
399
|
while (zip.file(`ppt/comments/comment${ordinal}.xml`)) ordinal += 1;
|
|
399
400
|
const part = `ppt/comments/comment${ordinal}.xml`;
|
|
@@ -412,7 +413,7 @@ export async function readSlideNotes(zip, slide) {
|
|
|
412
413
|
const relationships = await zipText(zip, partRelationshipPath(slide.path));
|
|
413
414
|
const linked = relationshipTargetByType(relationships, 'notesSlide');
|
|
414
415
|
if (!linked) return '';
|
|
415
|
-
const part =
|
|
416
|
+
const part = partFromTarget(posix.dirname(slide.path), linked);
|
|
416
417
|
const xml = await zipText(zip, part);
|
|
417
418
|
if (!xml) return '';
|
|
418
419
|
const body = /<p:sp>[\s\S]*?<p:ph type="body"[\s\S]*?<\/p:sp>/.exec(xml)?.[0] || xml;
|
|
@@ -424,7 +425,7 @@ export async function readSlideNotes(zip, slide) {
|
|
|
424
425
|
export async function copySlideNotes(zip, sourcePath, targetPath) {
|
|
425
426
|
const linked = relationshipTargetByType(await zipText(zip, partRelationshipPath(sourcePath)), 'notesSlide');
|
|
426
427
|
if (!linked) return;
|
|
427
|
-
const sourceNotes =
|
|
428
|
+
const sourceNotes = partFromTarget(posix.dirname(sourcePath), linked);
|
|
428
429
|
const xml = await zipText(zip, sourceNotes);
|
|
429
430
|
if (!xml) return;
|
|
430
431
|
let ordinal = 1;
|
|
@@ -522,7 +522,10 @@ const CELL_FILLS = ['a:noFill', 'a:solidFill', 'a:gradFill', 'a:blipFill', 'a:pa
|
|
|
522
522
|
function filledCellProperties(tcPr, fill, anchor) {
|
|
523
523
|
const open = /^<a:tcPr\b([^>]*?)(\/?)>/.exec(tcPr);
|
|
524
524
|
let attributes = open[1];
|
|
525
|
-
if (anchor)
|
|
525
|
+
if (anchor)
|
|
526
|
+
attributes = /\banchor="/.test(attributes)
|
|
527
|
+
? attributes.replace(/\banchor="[^"]*"/, `anchor="${anchor}"`)
|
|
528
|
+
: `${attributes} anchor="${anchor}"`;
|
|
526
529
|
let children = open[2] ? '' : tcPr.slice(open[0].length, tcPr.lastIndexOf('</a:tcPr>'));
|
|
527
530
|
if (fill) {
|
|
528
531
|
for (const element of topLevelElements(children, CELL_FILLS).reverse()) {
|
|
@@ -543,11 +546,15 @@ export async function handleSetTableCellStyle(context, op) {
|
|
|
543
546
|
const shape = slideShape(tree, op);
|
|
544
547
|
if (!/<a:tbl>/.test(shape.xml)) throw new Error(`PPTX shape ${op.shape} on slide ${op.slide} is not a table`);
|
|
545
548
|
const rows = [...shape.xml.matchAll(/<a:tr\b[^>]*>[\s\S]*?<\/a:tr>/g)];
|
|
546
|
-
const cells = rows[Number(op.row) - 1]
|
|
549
|
+
const cells = rows[Number(op.row) - 1]
|
|
550
|
+
? [...rows[Number(op.row) - 1][0].matchAll(/<a:tc\b[^>]*?(?:\/>|>[\s\S]*?<\/a:tc>)/g)]
|
|
551
|
+
: [];
|
|
547
552
|
const cell = cells[Number(op.col) - 1];
|
|
548
553
|
if (!cell) {
|
|
549
554
|
const columns = rows[0] ? [...rows[0][0].matchAll(/<a:tc\b/g)].length : 0;
|
|
550
|
-
throw new Error(
|
|
555
|
+
throw new Error(
|
|
556
|
+
`PPTX table shape ${op.shape} is ${rows.length}x${columns}; row ${op.row}, col ${op.col} is outside it`
|
|
557
|
+
);
|
|
551
558
|
}
|
|
552
559
|
const properties = op.properties || {};
|
|
553
560
|
let styled = cell[0].replace(
|
|
@@ -556,20 +563,30 @@ export async function handleSetTableCellStyle(context, op) {
|
|
|
556
563
|
`<a:txBody>${restyledParagraphs(inner, { ...properties, alignment: properties.horizontalAlignment ?? properties.alignment })}</a:txBody>`
|
|
557
564
|
);
|
|
558
565
|
// fillColor: null leaves the cell unfilled, as the Office backend's Fill.Visible = 0 does.
|
|
559
|
-
|
|
566
|
+
let fill = '';
|
|
567
|
+
if (properties.fillColor === null) fill = '<a:noFill/>';
|
|
568
|
+
else if (properties.fillColor) fill = solidFillXml(properties.fillColor);
|
|
560
569
|
const anchor = textAnchor(properties.verticalAlignment);
|
|
561
570
|
// The cell's own text frame may name an anchor too (this writer's add_table sets one); it follows the cell's.
|
|
562
571
|
if (anchor) styled = styled.replace(/(<a:bodyPr\b[^>]*?\banchor=")[^"]*"/, `$1${anchor}"`);
|
|
563
572
|
if (fill || anchor) {
|
|
564
573
|
if (!/<a:tcPr\b/.test(styled)) styled = styled.replace('</a:tc>', '<a:tcPr/></a:tc>');
|
|
565
|
-
styled = styled.replace(/<a:tcPr\b[^>]*?(?:\/>|>[\s\S]*?<\/a:tcPr>)/, (tcPr) =>
|
|
574
|
+
styled = styled.replace(/<a:tcPr\b[^>]*?(?:\/>|>[\s\S]*?<\/a:tcPr>)/, (tcPr) =>
|
|
575
|
+
filledCellProperties(tcPr, fill, anchor)
|
|
576
|
+
);
|
|
566
577
|
}
|
|
567
578
|
const row = rows[Number(op.row) - 1];
|
|
568
579
|
const nextRow = row[0].replace(cell[0], () => styled);
|
|
569
580
|
const updated = shape.xml.replace(row[0], () => nextRow);
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
581
|
+
writeShape(context, { path, current, tree }, shape, updated);
|
|
582
|
+
return {
|
|
583
|
+
op: op.op,
|
|
584
|
+
changed: updated !== shape.xml,
|
|
585
|
+
slide: Number(op.slide),
|
|
586
|
+
shape: Number(op.shape),
|
|
587
|
+
row: Number(op.row),
|
|
588
|
+
col: Number(op.col),
|
|
589
|
+
};
|
|
573
590
|
}
|
|
574
591
|
|
|
575
592
|
export async function handleSetTableDataOrReplaceImage(context, op) {
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
import { partRelationshipPath, relationshipTargetsByType, zipText } from './portable-opc.mjs';
|
|
17
17
|
import {
|
|
18
18
|
cellWidthScale,
|
|
19
|
-
displayWidth,
|
|
20
19
|
formattedNumberWidth,
|
|
21
20
|
hiddenSheetAreas,
|
|
22
21
|
mergedRanges,
|
|
@@ -78,12 +77,9 @@ function lockedEntryCells(xml, styles, entryCells) {
|
|
|
78
77
|
|
|
79
78
|
// total counts every entry cell the validations ask for: "all" only when none of them was opened.
|
|
80
79
|
function protectedInputIssue(sheet, locked, total) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
: locked.length === total
|
|
85
|
-
? `all ${total} entry cells`
|
|
86
|
-
: `${locked.length} of ${total} entry cells`;
|
|
80
|
+
let named = `${locked.length} of ${total} entry cells`;
|
|
81
|
+
if (total === 1) named = 'the entry cell';
|
|
82
|
+
else if (locked.length === total) named = `all ${total} entry cells`;
|
|
87
83
|
return {
|
|
88
84
|
severity: 'warning',
|
|
89
85
|
code: 'protected_input_locked',
|
|
@@ -217,7 +213,7 @@ function labelRoom(column, neighbourColumn, { widths, withheld }) {
|
|
|
217
213
|
// something: the empty columns before it lend their width, and a hidden
|
|
218
214
|
// column lends none, because the sheet gives it no room on the page.
|
|
219
215
|
function cutLabelColumns(xml, { widths, withheld, styles, strings, digitWidth }) {
|
|
220
|
-
const merged = mergedAreas(xml);
|
|
216
|
+
const merged = mergedAreas(xml).filter(Boolean);
|
|
221
217
|
const cutLabels = new Map();
|
|
222
218
|
for (const row of iterateSheetRows(xml)) {
|
|
223
219
|
const cells = [...iterateSheetCells(row.body)]
|
|
@@ -69,11 +69,11 @@ export function worksheetGeometry(xml, digitWidth = 7) {
|
|
|
69
69
|
: Math.ceil((baseCharacters * digitWidth + 5) / 8) * 8;
|
|
70
70
|
const columns = [...xml.matchAll(/<col\b([^>]*?)\/>/g)].map((match) => {
|
|
71
71
|
const width = Number(xmlAttribute(match[1], 'width'));
|
|
72
|
+
const shown = width > 0 ? columnPixels(width, digitWidth) : defaultPixels;
|
|
72
73
|
return {
|
|
73
74
|
start: Number(xmlAttribute(match[1], 'min')),
|
|
74
75
|
end: Number(xmlAttribute(match[1], 'max')),
|
|
75
|
-
pixels:
|
|
76
|
-
xmlAttribute(match[1], 'hidden') === '1' ? 0 : width > 0 ? columnPixels(width, digitWidth) : defaultPixels,
|
|
76
|
+
pixels: xmlAttribute(match[1], 'hidden') === '1' ? 0 : shown,
|
|
77
77
|
};
|
|
78
78
|
});
|
|
79
79
|
const rows = new Map(
|
|
@@ -395,7 +395,7 @@ function dateWidth(section) {
|
|
|
395
395
|
// What Excel's General format prints: eleven characters at most, the decimals rounded to fit with trailing zeros
|
|
396
396
|
// dropped, scientific notation past that. Counted from the stored digits, float noise such as 0.5700000000000001
|
|
397
397
|
// measured eighteen characters for the 0.57 on the sheet.
|
|
398
|
-
|
|
398
|
+
function generalNumberText(number) {
|
|
399
399
|
const plain = String(number);
|
|
400
400
|
if (plain.length <= 11) return plain;
|
|
401
401
|
const magnitude = Math.abs(number);
|
|
@@ -707,6 +707,7 @@ function docxSections(documentXml, relationshipsXml, partText, referenced) {
|
|
|
707
707
|
const cols = /<w:cols\b([^>]*?)\/?>/.exec(sectionXml)?.[1] || '';
|
|
708
708
|
const columns = Number(/\bw:num="(\d+)"/.exec(cols)?.[1]) || 1;
|
|
709
709
|
const space = Number(/\bw:space="(\d+)"/.exec(cols)?.[1]);
|
|
710
|
+
const columnSpacing = Number.isFinite(space) ? Math.round((space / TWIPS_PER_POINT) * 100) / 100 : 36;
|
|
710
711
|
return {
|
|
711
712
|
path: `/section[${index}]`,
|
|
712
713
|
index,
|
|
@@ -717,9 +718,7 @@ function docxSections(documentXml, relationshipsXml, partText, referenced) {
|
|
|
717
718
|
rightMargin: margin('right'),
|
|
718
719
|
columns,
|
|
719
720
|
// Word's own spacing when the file names none is half an inch.
|
|
720
|
-
...(columns > 1
|
|
721
|
-
? { columnSpacing: Number.isFinite(space) ? Math.round((space / TWIPS_PER_POINT) * 100) / 100 : 36 }
|
|
722
|
-
: {}),
|
|
721
|
+
...(columns > 1 ? { columnSpacing } : {}),
|
|
723
722
|
stories,
|
|
724
723
|
};
|
|
725
724
|
});
|
|
@@ -210,7 +210,9 @@ function pptxShapeSnapshot(shape, shapeIndex, slideIndex, chartParts) {
|
|
|
210
210
|
rows: tableRows,
|
|
211
211
|
columns: tableColumns,
|
|
212
212
|
values: [...shape.xml.matchAll(/<a:tr\b[^>]*>([\s\S]*?)<\/a:tr>/g)].map((row) =>
|
|
213
|
-
[...row[1].matchAll(/<a:tc\b[^>]*?(?:\/>|>([\s\S]*?)<\/a:tc>)/g)].map((cell) =>
|
|
213
|
+
[...row[1].matchAll(/<a:tc\b[^>]*?(?:\/>|>([\s\S]*?)<\/a:tc>)/g)].map((cell) =>
|
|
214
|
+
blockText(cell[1] || '', 'a:t')
|
|
215
|
+
)
|
|
214
216
|
),
|
|
215
217
|
},
|
|
216
218
|
}
|
|
@@ -5,7 +5,7 @@ import { constants as fsConstants, rmSync } from 'node:fs';
|
|
|
5
5
|
import { pathToFileURL } from 'node:url';
|
|
6
6
|
import JSZip from 'jszip';
|
|
7
7
|
import { copyFile, readFile, rename, writeFile, mkdir, mkdtemp, rm, stat } from 'node:fs/promises';
|
|
8
|
-
import { zipText } from './portable-opc.mjs';
|
|
8
|
+
import { packageBuffer, zipText } from './portable-opc.mjs';
|
|
9
9
|
import {
|
|
10
10
|
computedCellValues,
|
|
11
11
|
iterateSheetCells,
|
|
@@ -34,6 +34,13 @@ const SOFFICE_QUIET_ARGS = [
|
|
|
34
34
|
'--norestore',
|
|
35
35
|
];
|
|
36
36
|
|
|
37
|
+
// The child may already have exited; a kill that finds nothing to stop is not a failure.
|
|
38
|
+
function killQuietly(child) {
|
|
39
|
+
try {
|
|
40
|
+
child.kill();
|
|
41
|
+
} catch {}
|
|
42
|
+
}
|
|
43
|
+
|
|
37
44
|
// A detection probe must always answer. soffice.exe is a GUI launcher that can
|
|
38
45
|
// sit forever without exiting, which deadlocked detection before the rendering
|
|
39
46
|
// call was ever reached, so the probe is bounded and the child killed on expiry.
|
|
@@ -49,9 +56,7 @@ function commandExists(command) {
|
|
|
49
56
|
};
|
|
50
57
|
const child = spawn(command, ['--version'], { windowsHide: true, stdio: 'ignore' });
|
|
51
58
|
timer = setTimeout(() => {
|
|
52
|
-
|
|
53
|
-
child.kill();
|
|
54
|
-
} catch {}
|
|
59
|
+
killQuietly(child);
|
|
55
60
|
finish(false);
|
|
56
61
|
}, SOFFICE_PROBE_TIMEOUT_MS);
|
|
57
62
|
child.once('error', () => finish(false));
|
|
@@ -116,6 +121,8 @@ async function libreOfficeProgram() {
|
|
|
116
121
|
}
|
|
117
122
|
|
|
118
123
|
let pendingProfile = null;
|
|
124
|
+
const createdProfiles = new Set();
|
|
125
|
+
let exitHandlerRegistered = false;
|
|
119
126
|
|
|
120
127
|
// Conversion must never attach to the user's own running LibreOffice: a shared
|
|
121
128
|
// profile makes the second invocation either fail or block until the desktop
|
|
@@ -127,11 +134,17 @@ function sharedProfileDir() {
|
|
|
127
134
|
const created = await mkdtemp(join(tmpdir(), 'mixdog-office-profile-'));
|
|
128
135
|
// An exit handler cannot await, and a profile left behind accumulates one
|
|
129
136
|
// directory per run of the app.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
137
|
+
createdProfiles.add(created);
|
|
138
|
+
if (!exitHandlerRegistered) {
|
|
139
|
+
exitHandlerRegistered = true;
|
|
140
|
+
process.once('exit', () => {
|
|
141
|
+
for (const profile of createdProfiles) {
|
|
142
|
+
try {
|
|
143
|
+
rmSync(profile, { recursive: true, force: true });
|
|
144
|
+
} catch {}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
135
148
|
return created;
|
|
136
149
|
})();
|
|
137
150
|
return pendingProfile;
|
|
@@ -169,9 +182,7 @@ export function runSoffice(program, args, { signal, timeoutMs, timeoutMessage, c
|
|
|
169
182
|
resolve(value);
|
|
170
183
|
};
|
|
171
184
|
const onAbort = () => {
|
|
172
|
-
|
|
173
|
-
child.kill();
|
|
174
|
-
} catch {}
|
|
185
|
+
killQuietly(child);
|
|
175
186
|
finish({ ok: false, error: cancelMessage });
|
|
176
187
|
};
|
|
177
188
|
child.stderr.setEncoding('utf8');
|
|
@@ -183,9 +194,7 @@ export function runSoffice(program, args, { signal, timeoutMs, timeoutMessage, c
|
|
|
183
194
|
finish(code === 0 ? { ok: true } : { ok: false, error: stderr.trim() || `LibreOffice exited with code ${code}` })
|
|
184
195
|
);
|
|
185
196
|
timer = setTimeout(() => {
|
|
186
|
-
|
|
187
|
-
child.kill();
|
|
188
|
-
} catch {}
|
|
197
|
+
killQuietly(child);
|
|
189
198
|
finish({ ok: false, error: timeoutMessage });
|
|
190
199
|
}, timeoutMs);
|
|
191
200
|
if (signal?.aborted) onAbort();
|
|
@@ -353,12 +362,7 @@ async function withoutFormulaCache(source) {
|
|
|
353
362
|
if (next !== xml) zip.file(name, next);
|
|
354
363
|
}
|
|
355
364
|
if (!stripped) return source;
|
|
356
|
-
return await zip
|
|
357
|
-
type: 'nodebuffer',
|
|
358
|
-
compression: 'DEFLATE',
|
|
359
|
-
compressionOptions: { level: 6 },
|
|
360
|
-
platform: 'DOS',
|
|
361
|
-
});
|
|
365
|
+
return await packageBuffer(zip);
|
|
362
366
|
}
|
|
363
367
|
|
|
364
368
|
// The roundtrip is asked for values and nothing else. What LibreOffice writes back is its own reading of the
|
|
@@ -374,7 +378,8 @@ async function withComputedValues(originalZip, produced) {
|
|
|
374
378
|
const part = calculated.get(sheet.name);
|
|
375
379
|
if (!part) continue;
|
|
376
380
|
const computed = computedCellValues(await zipText(produced, part), strings);
|
|
377
|
-
if (computed.size)
|
|
381
|
+
if (computed.size)
|
|
382
|
+
originalZip.file(sheet.path, writeCachedValues(await zipText(originalZip, sheet.path), computed));
|
|
378
383
|
}
|
|
379
384
|
await refreshChartCaches(originalZip);
|
|
380
385
|
const workbookXml = await zipText(originalZip, 'xl/workbook.xml');
|
|
@@ -108,8 +108,7 @@ async function comparePackageParts(
|
|
|
108
108
|
changedParts.push(name);
|
|
109
109
|
if (isProtected(name) && !renumberedWorkbook(name) && !chartDataRewritten(name)) {
|
|
110
110
|
changedProtectedParts.push({ part: name, before, after });
|
|
111
|
-
}
|
|
112
|
-
else if (applicationNormalized(name)) applicationNormalizedParts.push(name);
|
|
111
|
+
} else if (applicationNormalized(name)) applicationNormalizedParts.push(name);
|
|
113
112
|
}
|
|
114
113
|
return { changedProtectedParts, applicationNormalizedParts, changedParts };
|
|
115
114
|
}
|
|
@@ -16,6 +16,7 @@ import { EMU_PER_POINT } from './portable-slide-shapes.mjs';
|
|
|
16
16
|
import {
|
|
17
17
|
imagePixelSize,
|
|
18
18
|
loadPackage,
|
|
19
|
+
partFromTarget,
|
|
19
20
|
partRelationshipPath,
|
|
20
21
|
relationshipMap,
|
|
21
22
|
relationshipOwner,
|
|
@@ -72,6 +73,11 @@ function runField(properties, fill) {
|
|
|
72
73
|
return HIGHLIGHT_FILLS[highlight] || fill;
|
|
73
74
|
}
|
|
74
75
|
|
|
76
|
+
// Large text (18pt, or 14pt bold) is readable at 3:1; everything else needs 4.5:1.
|
|
77
|
+
function minimumContrast(size, bold) {
|
|
78
|
+
return size >= 18 || (size >= 14 && bold) ? 3 : 4.5;
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
// The worst readable ratio among a block's runs, with the size and weight that
|
|
76
82
|
// decide the minimum. Word keeps sizes in half-points.
|
|
77
83
|
function runInkReading(xml, fill) {
|
|
@@ -92,7 +98,7 @@ function runInkReading(xml, fill) {
|
|
|
92
98
|
const bold = /<w:b(?:\s[^>]*)?\/>/.test(properties);
|
|
93
99
|
const ratio = contrastRatio(color, runField(properties, fill));
|
|
94
100
|
if (ratio == null) continue;
|
|
95
|
-
const minimum =
|
|
101
|
+
const minimum = minimumContrast(size, bold);
|
|
96
102
|
if (ratio >= minimum) continue;
|
|
97
103
|
if (!worst || ratio < worst.ratio) worst = { ratio, minimum, size };
|
|
98
104
|
}
|
|
@@ -220,7 +226,7 @@ function auditTableRow(rowXml, { widths, pathPrefix, slideSurface }, issues, ove
|
|
|
220
226
|
for (const { xml, body, size, bold, columnOrdinal, fit } of cells) {
|
|
221
227
|
const cellPath = `${pathPrefix}/cell[${columnOrdinal}]`;
|
|
222
228
|
const ratio = tableCellContrast(xml, body, slideSurface);
|
|
223
|
-
const minimum =
|
|
229
|
+
const minimum = minimumContrast(size, bold);
|
|
224
230
|
// The cap is on the reports; the rows are still measured so the table's height is known.
|
|
225
231
|
if (ratio != null && ratio < minimum && issues.length < MAX_ISSUES) {
|
|
226
232
|
issues.push({
|
|
@@ -434,7 +440,7 @@ async function imagePlacementIssues(zip, format) {
|
|
|
434
440
|
if (!embed || !extent) continue;
|
|
435
441
|
const target = relationships.get(embed);
|
|
436
442
|
if (!target) continue;
|
|
437
|
-
const media =
|
|
443
|
+
const media = partFromTarget(posix.dirname(part), target);
|
|
438
444
|
const file = zip.file(media);
|
|
439
445
|
if (!file) continue;
|
|
440
446
|
const bytes = await file.async('nodebuffer');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Worksheet-level operations the portable XLSX backend applies: sheet
|
|
2
2
|
// management, images, header/footer, conditional formats, validation, sort,
|
|
3
3
|
// autofit, pivot tables and charts.
|
|
4
|
-
import { conditionalFormatKind, listValidationChoices,
|
|
4
|
+
import { conditionalFormatKind, listValidationChoices, normalizeXlsxValidation } from './xlsx-contract.mjs';
|
|
5
5
|
import { nextRelationshipId, partRelationshipPath, zipText } from './portable-opc.mjs';
|
|
6
6
|
import {
|
|
7
7
|
OFFICE_RELATIONSHIP_BASE,
|
|
@@ -45,29 +45,6 @@ function headerFooterFields(text) {
|
|
|
45
45
|
.replace(/\{file\}/gi, '&F');
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
// Cell validation as both backends express it: the OOXML names here, the Excel
|
|
49
|
-
// enumeration in the COM host.
|
|
50
|
-
const XLSX_VALIDATION_TYPES = Object.freeze({
|
|
51
|
-
list: 'list',
|
|
52
|
-
whole: 'whole',
|
|
53
|
-
decimal: 'decimal',
|
|
54
|
-
date: 'date',
|
|
55
|
-
time: 'time',
|
|
56
|
-
textlength: 'textLength',
|
|
57
|
-
custom: 'custom',
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
const XLSX_VALIDATION_OPERATORS = Object.freeze({
|
|
61
|
-
between: 'between',
|
|
62
|
-
notbetween: 'notBetween',
|
|
63
|
-
equal: 'equal',
|
|
64
|
-
notequal: 'notEqual',
|
|
65
|
-
greaterthan: 'greaterThan',
|
|
66
|
-
lessthan: 'lessThan',
|
|
67
|
-
greaterthanorequal: 'greaterThanOrEqual',
|
|
68
|
-
lessthanorequal: 'lessThanOrEqual',
|
|
69
|
-
});
|
|
70
|
-
|
|
71
48
|
export const TABLE_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml';
|
|
72
49
|
|
|
73
50
|
// A built-in table style bands the range from the workbook's own theme, which
|
|
@@ -330,18 +307,6 @@ async function expressionConditionalRule(zip, op, priority) {
|
|
|
330
307
|
|
|
331
308
|
// The comparison a bounded validation applies; a second bound without one
|
|
332
309
|
// means between.
|
|
333
|
-
function validationOperator(op, type) {
|
|
334
|
-
const requested = String(op.operator || '').trim();
|
|
335
|
-
let operator = '';
|
|
336
|
-
if (requested && Object.hasOwn(XLSX_VALIDATION_OPERATORS, requested.toLowerCase())) {
|
|
337
|
-
operator = XLSX_VALIDATION_OPERATORS[requested.toLowerCase()];
|
|
338
|
-
} else if (op.formula2 != null && !['list', 'custom'].includes(type)) operator = 'between';
|
|
339
|
-
if (requested && !operator) {
|
|
340
|
-
throw new Error(`add_validation operator must be one of ${Object.keys(XLSX_VALIDATION_OPERATORS).join(', ')}`);
|
|
341
|
-
}
|
|
342
|
-
return operator;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
310
|
function dataValidationXml(op, { type, operator, reference }) {
|
|
346
311
|
const formula = (value) => `${xmlEncode(String(value).replace(/^=/, ''))}`;
|
|
347
312
|
return (
|
|
@@ -359,19 +324,7 @@ function dataValidationXml(op, { type, operator, reference }) {
|
|
|
359
324
|
/** One data validation over a range, appended to the validations already there. */
|
|
360
325
|
export function addWorksheetValidation(zip, sheet, xml, op) {
|
|
361
326
|
const reference = areaReference(parseAreaRange(op.range));
|
|
362
|
-
|
|
363
|
-
// operation, so it is the default; the other kinds guard a number, a
|
|
364
|
-
// date, or a length, and take a second bound. A formula that states a
|
|
365
|
-
// rule rather than naming choices is that rule, not a dropdown of one
|
|
366
|
-
// entry: "서울,부산" and $A$1:$A$9 are lists, B2>0 is a custom check.
|
|
367
|
-
const kind = String(op.type || (listValidationFormula(op.formula1) ? 'list' : 'custom'))
|
|
368
|
-
.trim()
|
|
369
|
-
.toLowerCase();
|
|
370
|
-
const type = Object.hasOwn(XLSX_VALIDATION_TYPES, kind) ? XLSX_VALIDATION_TYPES[kind] : '';
|
|
371
|
-
if (!type) {
|
|
372
|
-
throw new Error(`add_validation type must be one of ${Object.keys(XLSX_VALIDATION_TYPES).join(', ')}`);
|
|
373
|
-
}
|
|
374
|
-
const operator = validationOperator(op, type);
|
|
327
|
+
const { type, operator = '' } = normalizeXlsxValidation(op);
|
|
375
328
|
const existing = worksheetSection(xml, 'dataValidations');
|
|
376
329
|
const previous = existing ? containerBody(existing[0], 'dataValidations') : '';
|
|
377
330
|
const count = (previous.match(/<dataValidation\b/g) || []).length + 1;
|