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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
import { existsSync, promises as fsp } from 'node:fs';
|
|
2
3
|
import { homedir, platform } from 'node:os';
|
|
3
4
|
import { join } from 'node:path';
|
|
@@ -7,86 +8,100 @@ import { GlobalFonts } from '@napi-rs/canvas';
|
|
|
7
8
|
|
|
8
9
|
const execFileAsync = promisify(execFile);
|
|
9
10
|
|
|
11
|
+
// google/fonts commit the font URLs and sha256 digests below were taken from.
|
|
12
|
+
const GOOGLE_FONTS_COMMIT = '23e54b51ddffbc7713c583748e3bd86f62b1fa4a';
|
|
13
|
+
const GOOGLE_FONTS_RAW = `https://raw.githubusercontent.com/google/fonts/${GOOGLE_FONTS_COMMIT}/ofl`;
|
|
14
|
+
|
|
10
15
|
export const NOTO_FONT_DEFINITIONS = Object.freeze([
|
|
11
16
|
{
|
|
12
17
|
id: 'noto-sans-latin',
|
|
13
18
|
family: 'Noto Sans',
|
|
14
19
|
fileName: 'NotoSans-Variable.ttf',
|
|
15
20
|
registryName: 'Noto Sans (TrueType)',
|
|
16
|
-
url:
|
|
21
|
+
url: `${GOOGLE_FONTS_RAW}/notosans/NotoSans%5Bwdth%2Cwght%5D.ttf`,
|
|
17
22
|
bytes: 2049096,
|
|
23
|
+
sha256: 'bfb7bb691513f12e734dc346c03a03f784912432d7e3fa8e56efcf906fe86b3d',
|
|
18
24
|
},
|
|
19
25
|
{
|
|
20
26
|
id: 'noto-sans-kr',
|
|
21
27
|
family: 'Noto Sans KR',
|
|
22
28
|
fileName: 'NotoSansKR-Variable.ttf',
|
|
23
29
|
registryName: 'Noto Sans KR (TrueType)',
|
|
24
|
-
url:
|
|
30
|
+
url: `${GOOGLE_FONTS_RAW}/notosanskr/NotoSansKR%5Bwght%5D.ttf`,
|
|
25
31
|
bytes: 10414588,
|
|
32
|
+
sha256: '194018e6b2b293a7964f037b25c0249ce1418bc9ab3c971060a03aa57861e252',
|
|
26
33
|
},
|
|
27
34
|
{
|
|
28
35
|
id: 'noto-sans-sc',
|
|
29
36
|
family: 'Noto Sans SC',
|
|
30
37
|
fileName: 'NotoSansSC-Variable.ttf',
|
|
31
38
|
registryName: 'Noto Sans SC (TrueType)',
|
|
32
|
-
url:
|
|
39
|
+
url: `${GOOGLE_FONTS_RAW}/notosanssc/NotoSansSC%5Bwght%5D.ttf`,
|
|
33
40
|
bytes: 17772300,
|
|
41
|
+
sha256: 'a3041811a78c361b1de50f953c805e0244951c21c5bd412f7232ef0d899af0da',
|
|
34
42
|
},
|
|
35
43
|
{
|
|
36
44
|
id: 'noto-sans-jp',
|
|
37
45
|
family: 'Noto Sans JP',
|
|
38
46
|
fileName: 'NotoSansJP-Variable.ttf',
|
|
39
47
|
registryName: 'Noto Sans JP (TrueType)',
|
|
40
|
-
url:
|
|
48
|
+
url: `${GOOGLE_FONTS_RAW}/notosansjp/NotoSansJP%5Bwght%5D.ttf`,
|
|
41
49
|
bytes: 9589900,
|
|
50
|
+
sha256: 'c2f3b4d463500a2ddcd3849cded1fceeb9fd6d1c32e6cbecd568453ba50fc68f',
|
|
42
51
|
},
|
|
43
52
|
{
|
|
44
53
|
id: 'noto-sans-tc',
|
|
45
54
|
family: 'Noto Sans TC',
|
|
46
55
|
fileName: 'NotoSansTC-Variable.ttf',
|
|
47
56
|
registryName: 'Noto Sans TC (TrueType)',
|
|
48
|
-
url:
|
|
57
|
+
url: `${GOOGLE_FONTS_RAW}/notosanstc/NotoSansTC%5Bwght%5D.ttf`,
|
|
49
58
|
bytes: 11941968,
|
|
59
|
+
sha256: '864727d210d54f2537bbe23b3a839436c3992af72de9322af5270897246bd44f',
|
|
50
60
|
},
|
|
51
61
|
{
|
|
52
62
|
id: 'noto-sans-arabic',
|
|
53
63
|
family: 'Noto Sans Arabic',
|
|
54
64
|
fileName: 'NotoSansArabic-Variable.ttf',
|
|
55
65
|
registryName: 'Noto Sans Arabic (TrueType)',
|
|
56
|
-
url:
|
|
66
|
+
url: `${GOOGLE_FONTS_RAW}/notosansarabic/NotoSansArabic%5Bwdth%2Cwght%5D.ttf`,
|
|
57
67
|
bytes: 844676,
|
|
68
|
+
sha256: '63111b5b2e074dd48cc67692e0a2726d86ee94c1c37fe8598257b7b4e87e869e',
|
|
58
69
|
},
|
|
59
70
|
{
|
|
60
71
|
id: 'noto-sans-devanagari',
|
|
61
72
|
family: 'Noto Sans Devanagari',
|
|
62
73
|
fileName: 'NotoSansDevanagari-Variable.ttf',
|
|
63
74
|
registryName: 'Noto Sans Devanagari (TrueType)',
|
|
64
|
-
url:
|
|
65
|
-
bytes:
|
|
75
|
+
url: `${GOOGLE_FONTS_RAW}/notosansdevanagari/NotoSansDevanagari%5Bwdth%2Cwght%5D.ttf`,
|
|
76
|
+
bytes: 641944,
|
|
77
|
+
sha256: '14ec4af41f27482216d1c2229f417ff9b1425e1babb014e57d1d40d03229853e',
|
|
66
78
|
},
|
|
67
79
|
{
|
|
68
80
|
id: 'noto-sans-thai',
|
|
69
81
|
family: 'Noto Sans Thai',
|
|
70
82
|
fileName: 'NotoSansThai-Variable.ttf',
|
|
71
83
|
registryName: 'Noto Sans Thai (TrueType)',
|
|
72
|
-
url:
|
|
84
|
+
url: `${GOOGLE_FONTS_RAW}/notosansthai/NotoSansThai%5Bwdth%2Cwght%5D.ttf`,
|
|
73
85
|
bytes: 218652,
|
|
86
|
+
sha256: '5a1c559bb539583c8a1fd99d1c5b9491e5e14478c9cd2bd0970d5c3096cc9ef8',
|
|
74
87
|
},
|
|
75
88
|
{
|
|
76
89
|
id: 'noto-sans-hebrew',
|
|
77
90
|
family: 'Noto Sans Hebrew',
|
|
78
91
|
fileName: 'NotoSansHebrew-Variable.ttf',
|
|
79
92
|
registryName: 'Noto Sans Hebrew (TrueType)',
|
|
80
|
-
url:
|
|
93
|
+
url: `${GOOGLE_FONTS_RAW}/notosanshebrew/NotoSansHebrew%5Bwdth%2Cwght%5D.ttf`,
|
|
81
94
|
bytes: 112640,
|
|
95
|
+
sha256: '7ef36a2c3593758cdb622e1bdef4f84523e92fbc3ccc667438dd80ff54c2de88',
|
|
82
96
|
},
|
|
83
97
|
{
|
|
84
98
|
id: 'noto-sans-bengali',
|
|
85
99
|
family: 'Noto Sans Bengali',
|
|
86
100
|
fileName: 'NotoSansBengali-Variable.ttf',
|
|
87
101
|
registryName: 'Noto Sans Bengali (TrueType)',
|
|
88
|
-
url:
|
|
102
|
+
url: `${GOOGLE_FONTS_RAW}/notosansbengali/NotoSansBengali%5Bwdth%2Cwght%5D.ttf`,
|
|
89
103
|
bytes: 463668,
|
|
104
|
+
sha256: 'dcd42978094e584a849c84a51450eeac40c8826057d566ea6d4b9627a403a05a',
|
|
90
105
|
},
|
|
91
106
|
]);
|
|
92
107
|
|
|
@@ -163,6 +178,16 @@ function registerFontInProcess(fontPath, family) {
|
|
|
163
178
|
return false;
|
|
164
179
|
}
|
|
165
180
|
|
|
181
|
+
export function verifyFontBuffer(fontDef, buffer) {
|
|
182
|
+
if (buffer.length !== fontDef.bytes) {
|
|
183
|
+
throw new Error(`Font ${fontDef.family} size mismatch: expected ${fontDef.bytes} bytes, got ${buffer.length}`);
|
|
184
|
+
}
|
|
185
|
+
const digest = createHash('sha256').update(buffer).digest('hex');
|
|
186
|
+
if (digest !== fontDef.sha256) {
|
|
187
|
+
throw new Error(`Font ${fontDef.family} sha256 mismatch: expected ${fontDef.sha256}, got ${digest}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
166
191
|
async function installFont(fontDef) {
|
|
167
192
|
const status = isFontInstalled(fontDef);
|
|
168
193
|
if (status.installed) {
|
|
@@ -182,6 +207,7 @@ async function installFont(fontDef) {
|
|
|
182
207
|
}
|
|
183
208
|
|
|
184
209
|
const buffer = Buffer.from(await response.arrayBuffer());
|
|
210
|
+
verifyFontBuffer(fontDef, buffer);
|
|
185
211
|
await fsp.writeFile(tempPath, buffer);
|
|
186
212
|
await fsp.rename(tempPath, targetPath);
|
|
187
213
|
|
|
@@ -118,12 +118,8 @@ export function computedCellValues(xml, strings) {
|
|
|
118
118
|
if (!value) continue;
|
|
119
119
|
const type = /\bt="([^"]*)"/.exec(cell.attributes)?.[1] || '';
|
|
120
120
|
const text = value[1] || '';
|
|
121
|
-
computed.set(
|
|
122
|
-
|
|
123
|
-
type === 's'
|
|
124
|
-
? { type: 'str', text: xmlEncode(strings[Number(text)] ?? '') }
|
|
125
|
-
: { type: type === 'n' ? '' : type, text }
|
|
126
|
-
);
|
|
121
|
+
if (type === 's') computed.set(cell.ref, { type: 'str', text: xmlEncode(strings[Number(text)] ?? '') });
|
|
122
|
+
else computed.set(cell.ref, { type: type === 'n' ? '' : type, text });
|
|
127
123
|
}
|
|
128
124
|
return computed;
|
|
129
125
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
DRAWING_MAIN_NS as DRAWING_NAMESPACE,
|
|
3
|
+
OFFICE_RELATIONSHIP_BASE as RELATIONSHIP_NAMESPACE,
|
|
4
|
+
xmlEncode,
|
|
5
|
+
} from './portable-xml.mjs';
|
|
2
6
|
import { contrastRatio } from './text-metrics.mjs';
|
|
3
7
|
|
|
4
8
|
const CHART_NAMESPACE = 'http://schemas.openxmlformats.org/drawingml/2006/chart';
|
|
5
|
-
const DRAWING_NAMESPACE = 'http://schemas.openxmlformats.org/drawingml/2006/main';
|
|
6
|
-
const RELATIONSHIP_NAMESPACE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
|
|
7
9
|
const CATEGORY_AXIS_ID = 111_111_111;
|
|
8
10
|
const VALUE_AXIS_ID = 222_222_222;
|
|
9
11
|
|
|
@@ -305,9 +307,7 @@ export function chartXml({
|
|
|
305
307
|
(zeroBaseline == null ? family.element === 'barChart' || family.element === 'areaChart' : zeroBaseline === true);
|
|
306
308
|
// The order the categories read in: a bar chart lists them top-down, unless the chart being rebuilt was authored the
|
|
307
309
|
// other way (PowerPoint's own bottom-up default, a template's), which it keeps as PowerPoint's refresh keeps it.
|
|
308
|
-
const reversed = axis?.categoryOrientation
|
|
309
|
-
? axis.categoryOrientation === 'maxMin'
|
|
310
|
-
: family.direction === 'bar';
|
|
310
|
+
const reversed = axis?.categoryOrientation ? axis.categoryOrientation === 'maxMin' : family.direction === 'bar';
|
|
311
311
|
const sheet = references?.sheet || 'Sheet1';
|
|
312
312
|
const categoryFormula = references?.category || `${sheet}!$A$2:$A$${rows.length + 1}`;
|
|
313
313
|
const plots = entries
|
|
@@ -71,6 +71,7 @@ import {
|
|
|
71
71
|
wordTableXml,
|
|
72
72
|
wordTableProperties,
|
|
73
73
|
wordTextContent,
|
|
74
|
+
wordTextElement,
|
|
74
75
|
withFirstRunText,
|
|
75
76
|
} from './portable-docx-xml.mjs';
|
|
76
77
|
import { documentStyleId } from './portable-docx-styles.mjs';
|
|
@@ -119,16 +120,12 @@ function replaceBodyParagraph(current, model, paragraph, nextParagraph) {
|
|
|
119
120
|
return `${current.slice(0, model.body.start)}${nextInner}${current.slice(model.body.end)}`;
|
|
120
121
|
}
|
|
121
122
|
|
|
122
|
-
function preserveSpace(text) {
|
|
123
|
-
return /^\s|\s$/.test(text) ? ' xml:space="preserve"' : '';
|
|
124
|
-
}
|
|
125
|
-
|
|
126
123
|
function commentEntryXml(id, op, text, stamp) {
|
|
127
124
|
return (
|
|
128
125
|
`<w:comment w:id="${id}" w:author="${xmlEncode(op.author || 'Mixdog')}"` +
|
|
129
126
|
` w:date="${stamp}" w:initials="${xmlEncode(op.initials || 'MD')}">` +
|
|
130
127
|
`<w:p xmlns:w14="${WORD_2010_NS}" w14:paraId="${commentParagraphId(id)}">` +
|
|
131
|
-
`<w:r
|
|
128
|
+
`<w:r>${wordTextElement(text)}</w:r></w:p></w:comment>`
|
|
132
129
|
);
|
|
133
130
|
}
|
|
134
131
|
|
|
@@ -589,9 +586,7 @@ export async function addDocxHyperlink(zip, op) {
|
|
|
589
586
|
'External'
|
|
590
587
|
)
|
|
591
588
|
: '';
|
|
592
|
-
const run =
|
|
593
|
-
'<w:r><w:rPr><w:color w:val="0563C1"/><w:u w:val="single"/></w:rPr>' +
|
|
594
|
-
`<w:t${preserveSpace(display)}>${xmlEncode(display)}</w:t></w:r>`;
|
|
589
|
+
const run = `<w:r><w:rPr><w:color w:val="0563C1"/><w:u w:val="single"/></w:rPr>${wordTextElement(display)}</w:r>`;
|
|
595
590
|
const link =
|
|
596
591
|
`<w:hyperlink${relationshipId ? ` r:id="${relationshipId}"` : ''}` +
|
|
597
592
|
`${op.subAddress ? ` w:anchor="${xmlEncode(op.subAddress)}"` : ''}>${run}</w:hyperlink>`;
|
|
@@ -725,7 +720,7 @@ export async function deleteDocxComment(zip, op) {
|
|
|
725
720
|
.replace(new RegExp(`<w:commentRangeEnd\\b[^>]*\\bw:id="${id}"[^>]*\\/>`, 'g'), '')
|
|
726
721
|
.replace(
|
|
727
722
|
new RegExp(
|
|
728
|
-
`<w:r
|
|
723
|
+
`<w:r\\b[^>]*>(?:(?!<\\/w:r>)[\\s\\S])*?<w:commentReference\\b[^>]*\\bw:id="${id}"[^>]*\\/>[\\s\\S]*?<\\/w:r>`,
|
|
729
724
|
'g'
|
|
730
725
|
),
|
|
731
726
|
''
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
wordJustification,
|
|
30
30
|
wordTableProperties,
|
|
31
31
|
wordTextContent,
|
|
32
|
+
wordTextElement,
|
|
32
33
|
withFirstRunText,
|
|
33
34
|
} from './portable-docx-xml.mjs';
|
|
34
35
|
import { docxRevisionTree, flattenDocxRevisions } from './docx-revisions.mjs';
|
|
@@ -106,15 +107,14 @@ export function docxTocEntries(documentXml, lower, upper, headingLevels = new Ma
|
|
|
106
107
|
// An entry carries its page after a tab once a render has measured it (numberDocxTableOfContents); the tab stop
|
|
107
108
|
// on the paragraph sets it on the right margin behind a dot leader, the way Word draws its own contents.
|
|
108
109
|
export function docxTocCacheRuns(entries, lower) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
: '<w:r><w:t>Update this field in Word to build the table of contents.</w:t></w:r>';
|
|
110
|
+
if (!entries.length) return '<w:r><w:t>Update this field in Word to build the table of contents.</w:t></w:r>';
|
|
111
|
+
const pageRun = (entry) => (entry.page ? `<w:r><w:tab/></w:r><w:r><w:t>${Number(entry.page)}</w:t></w:r>` : '');
|
|
112
|
+
return entries
|
|
113
|
+
.map(
|
|
114
|
+
(entry) =>
|
|
115
|
+
`<w:r><w:t xml:space="preserve">${xmlEncode(`${' '.repeat(entry.level - lower)}${entry.text}`)}</w:t></w:r>${pageRun(entry)}`
|
|
116
|
+
)
|
|
117
|
+
.join('<w:r><w:br/></w:r>');
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
const TOC_FIELD = /<w:fldSimple\b([^>]*\bw:instr="([^"]*TOC[^"]*)"[^>]*)>([\s\S]*?)<\/w:fldSimple>/g;
|
|
@@ -560,7 +560,7 @@ export async function fitDocxTable(zip, op) {
|
|
|
560
560
|
function controlFilledWith(control, contentInner, text) {
|
|
561
561
|
const first = /<w:r(?:\s[^>]*)?>[\s\S]*?<\/w:r>/.exec(contentInner);
|
|
562
562
|
const runProperties = first ? /<w:rPr(?:\s[^>]*)?>[\s\S]*?<\/w:rPr>/.exec(first[0])?.[0] || '' : '';
|
|
563
|
-
const run = `<w:r>${runProperties}
|
|
563
|
+
const run = `<w:r>${runProperties}${wordTextElement(text)}</w:r>`;
|
|
564
564
|
const [firstParagraph] = contentInner.match(/<w:p(?:\s[^>]*)?>[\s\S]*?<\/w:p>/) || [];
|
|
565
565
|
const paragraph = firstParagraph
|
|
566
566
|
? `${/^<w:p(?:\s[^>]*)?>(?:<w:pPr(?:\s[^>]*)?>[\s\S]*?<\/w:pPr>)?/.exec(firstParagraph)?.[0] || '<w:p>'}${run}</w:p>`
|
|
@@ -704,7 +704,10 @@ function styledDocxCell(cell, op) {
|
|
|
704
704
|
const eastAsiaFontAttrs = cellEastAsia ? ` w:eastAsia="${cellEastAsia}"` : '';
|
|
705
705
|
// bold:false and italic:false switch the weight off, as the Word backend's Font.Bold = 0 does: a data row inserted
|
|
706
706
|
// before a total copies the total's bold, and asking for it back to regular changed nothing here.
|
|
707
|
-
const toggled = (tag, value) =>
|
|
707
|
+
const toggled = (tag, value) => {
|
|
708
|
+
if (value === undefined) return '';
|
|
709
|
+
return value ? `<w:${tag}/><w:${tag}Cs/>` : `<w:${tag} w:val="0"/><w:${tag}Cs w:val="0"/>`;
|
|
710
|
+
};
|
|
708
711
|
const runFormat = [
|
|
709
712
|
cellFont || cellEastAsia ? `<w:rFonts${latinFontAttrs}${eastAsiaFontAttrs}/>` : '',
|
|
710
713
|
toggled('b', op.properties?.bold),
|
|
@@ -760,7 +763,7 @@ function mergedCellXml(joined, spans) {
|
|
|
760
763
|
// Merges the located cell across colSpan columns (dropping the absorbed
|
|
761
764
|
// cells) and rowSpan rows (continuation cells become vMerge, spanning the same columns: a block merge left the
|
|
762
765
|
// continuation rows' absorbed cells in place, one grid column too many a cell).
|
|
763
|
-
function mergedDocxTable({ table, rows, row, cells
|
|
766
|
+
function mergedDocxTable({ table, rows, row, cells }, op) {
|
|
764
767
|
const colSpan = Math.max(1, Number(op.colSpan) || 1);
|
|
765
768
|
const rowSpan = Math.max(1, Number(op.rowSpan) || 1);
|
|
766
769
|
const gridSpan = colSpan > 1 ? `<w:gridSpan w:val="${colSpan}"/>` : '';
|
|
@@ -807,7 +810,7 @@ export async function styleOrMergeDocxTableCell(zip, op) {
|
|
|
807
810
|
const nextTable =
|
|
808
811
|
op.op === 'set_table_cell_style'
|
|
809
812
|
? table[0].replace(cell[0], styledDocxCell(cell[0], op))
|
|
810
|
-
: mergedDocxTable({ table, rows, row, cells
|
|
813
|
+
: mergedDocxTable({ table, rows, row, cells }, op);
|
|
811
814
|
current = replaceDocxTable(current, table, nextTable);
|
|
812
815
|
zip.file('word/document.xml', current);
|
|
813
816
|
return {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
ensureContentTypeOverride,
|
|
7
7
|
ensureDefaultContentType,
|
|
8
8
|
imagePixelSize,
|
|
9
|
+
partFromTarget,
|
|
9
10
|
partRelationshipPath,
|
|
10
11
|
zipText,
|
|
11
12
|
} from './portable-opc.mjs';
|
|
@@ -463,7 +464,7 @@ export async function writeHeaderFooterPart(zip, { header, body, documentXml = '
|
|
|
463
464
|
.map((match) => match[0])
|
|
464
465
|
.find((element) => new RegExp(`\\bId="${referencedId}"`).test(element));
|
|
465
466
|
const path = target ? /\bTarget="([^"]+)"/.exec(target)?.[1] || '' : '';
|
|
466
|
-
const existing = path ?
|
|
467
|
+
const existing = path ? partFromTarget('word', path) : '';
|
|
467
468
|
if (existing && zip.file(existing)) {
|
|
468
469
|
// The story keeps its own root: Word's declares the w14, mc and wp prefixes its paragraphs use, and page
|
|
469
470
|
// numbers added into Word's footer under a root naming only w and r left a document Word would not open.
|
|
@@ -717,7 +718,11 @@ export async function ensureNumbering(zip, kind, { restart = false } = {}) {
|
|
|
717
718
|
// its own at 1.
|
|
718
719
|
export async function appendedNumbering(zip, documentXml, options = {}) {
|
|
719
720
|
const trailing = documentXml.lastIndexOf('<w:sectPr');
|
|
720
|
-
return numberingAfter(
|
|
721
|
+
return numberingAfter(
|
|
722
|
+
zip,
|
|
723
|
+
documentXml.slice(0, trailing >= 0 ? trailing : documentXml.lastIndexOf('</w:body>')),
|
|
724
|
+
options
|
|
725
|
+
);
|
|
721
726
|
}
|
|
722
727
|
|
|
723
728
|
// The same choice for an item anywhere in the body, `before` being the body up to it: set_list and
|
|
@@ -213,7 +213,7 @@ export function alignWordTableColumns(tableXml, columnAlignments = []) {
|
|
|
213
213
|
// nothing marks its edges, so its cell padding shows as an indent — "시니어 엔지니어" started 5 pt right of the "경력"
|
|
214
214
|
// heading above it and "2023 – 현재" stopped 5 pt short of the rule. Its outer cells drop the padding on the page
|
|
215
215
|
// side, so the text registers with the paragraphs around it; the padding between columns stays.
|
|
216
|
-
|
|
216
|
+
function isLayoutTable(properties = {}) {
|
|
217
217
|
if (properties.style || properties.shading) return false;
|
|
218
218
|
const borders = properties.borders;
|
|
219
219
|
if (!borders || typeof borders !== 'object') return false;
|
|
@@ -247,7 +247,7 @@ export function naturalTableColumnWidths(values, properties = {}, available = 0)
|
|
|
247
247
|
fontName: properties.fontName || properties.fontNameEastAsia || 'Calibri',
|
|
248
248
|
fontSize: Number(properties.fontSize) > 0 ? Number(properties.fontSize) : 11,
|
|
249
249
|
};
|
|
250
|
-
const headerBold = rows.length
|
|
250
|
+
const headerBold = tableHeaderBold(properties, rows.length);
|
|
251
251
|
const headers = tableHeaderRows(properties, rows.length);
|
|
252
252
|
const gutters = isLayoutTable(properties) ? [] : gutterColumns(properties);
|
|
253
253
|
const measure = (text, rowIndex, column) =>
|
|
@@ -268,7 +268,9 @@ function gutterColumns(properties) {
|
|
|
268
268
|
);
|
|
269
269
|
}
|
|
270
270
|
const gutterMargin = (gutter) =>
|
|
271
|
-
gutter
|
|
271
|
+
gutter
|
|
272
|
+
? `<w:tcMar><w:left w:w="${pointsToTwips(CELL_PADDING_POINTS / 2 + GUTTER_POINTS)}" w:type="dxa"/></w:tcMar>`
|
|
273
|
+
: '';
|
|
272
274
|
|
|
273
275
|
// The rows a table's header takes: one, or more for a header of several levels — a group label over the columns it
|
|
274
276
|
// spans ("3분기 처리량" over 7월 · 8월 · 9월) is two. At least one row stays data.
|
|
@@ -276,10 +278,18 @@ function tableHeaderRows(properties, rows) {
|
|
|
276
278
|
return Math.max(1, Math.min(rows - 1, Math.floor(Number(properties?.headerRows) || 1)));
|
|
277
279
|
}
|
|
278
280
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
281
|
+
// The header row is set apart by weight unless the caller opts out (headerBold, or repeatHeader: false for a table
|
|
282
|
+
// whose first row is data); a one-row table has no header to set apart.
|
|
283
|
+
function tableHeaderBold(properties, rows) {
|
|
284
|
+
return rows > 1 && properties?.headerBold !== false && properties?.repeatHeader !== false;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const flushCellMargins = (first, last) => {
|
|
288
|
+
if (!first && !last) return '';
|
|
289
|
+
const left = first ? '<w:left w:w="0" w:type="dxa"/>' : '';
|
|
290
|
+
const right = last ? '<w:right w:w="0" w:type="dxa"/>' : '';
|
|
291
|
+
return `<w:tcMar>${left}${right}</w:tcMar>`;
|
|
292
|
+
};
|
|
283
293
|
|
|
284
294
|
// `available` is the text width, in points, of the section the table lands in.
|
|
285
295
|
export function wordTableXml(operation, { available = 0 } = {}) {
|
|
@@ -298,8 +308,7 @@ export function wordTableXml(operation, { available = 0 } = {}) {
|
|
|
298
308
|
const runProperties = wordTableRunProperties(operation.properties);
|
|
299
309
|
// The header row is set apart by weight, on both backends, unless the caller
|
|
300
310
|
// says otherwise; a header a reader cannot tell from the data is not one.
|
|
301
|
-
const headerBold =
|
|
302
|
-
rows > 1 && operation.properties?.headerBold !== false && operation.properties?.repeatHeader !== false;
|
|
311
|
+
const headerBold = tableHeaderBold(operation.properties, rows);
|
|
303
312
|
const headerRunProperties = headerBold ? wordTableRunProperties(operation.properties, { bold: true }) : runProperties;
|
|
304
313
|
const headers = tableHeaderRows(operation.properties, rows);
|
|
305
314
|
const gutters = layout ? [] : gutterColumns(operation.properties);
|
|
@@ -334,10 +343,7 @@ export function wordTableXml(operation, { available = 0 } = {}) {
|
|
|
334
343
|
// run together on a single line.
|
|
335
344
|
const runs = text
|
|
336
345
|
.split(/\r?\n/)
|
|
337
|
-
.map(
|
|
338
|
-
(line, lineIndex) =>
|
|
339
|
-
`${lineIndex ? '<w:br/>' : ''}<w:t${/^\s|\s$/.test(line) ? ' xml:space="preserve"' : ''}>${xmlEncode(line)}</w:t>`
|
|
340
|
-
)
|
|
346
|
+
.map((line, lineIndex) => `${lineIndex ? '<w:br/>' : ''}${wordTextElement(line)}`)
|
|
341
347
|
.join('');
|
|
342
348
|
// Schema order inside pPr: style and spacing before justification.
|
|
343
349
|
const cellParagraphProperties = `${paragraphProperties(row)}${justifications[column] ? `<w:jc w:val="${justifications[column]}"/>` : ''}`;
|
|
@@ -494,6 +500,11 @@ function wordRunFontsXml(name, nameEastAsia) {
|
|
|
494
500
|
return `<w:rFonts${latin}${eastAsia}/>`;
|
|
495
501
|
}
|
|
496
502
|
|
|
503
|
+
/** `<w:t>` for one string; edge whitespace is kept with `xml:space="preserve"`, which Word otherwise drops. */
|
|
504
|
+
export function wordTextElement(text, { preserve = false } = {}) {
|
|
505
|
+
return `<w:t${preserve || /^\s|\s$/.test(text) ? ' xml:space="preserve"' : ''}>${xmlEncode(text)}</w:t>`;
|
|
506
|
+
}
|
|
507
|
+
|
|
497
508
|
/** `<w:tag w:val="…"/>` for a tri-state property: '' when undefined, else its on/off value. */
|
|
498
509
|
function toggleXml(tag, value, on = '1', off = '0') {
|
|
499
510
|
if (value === undefined) return '';
|
|
@@ -522,11 +533,10 @@ export function wordParagraph(text, { alignment = '', style = '', runProperties
|
|
|
522
533
|
style ? `<w:pStyle w:val="${xmlEncode(style)}"/>` : '',
|
|
523
534
|
justification ? `<w:jc w:val="${justification}"/>` : '',
|
|
524
535
|
].join('');
|
|
525
|
-
const value = String(text ?? '');
|
|
526
536
|
return (
|
|
527
537
|
`<w:p>${properties ? `<w:pPr>${properties}</w:pPr>` : ''}` +
|
|
528
538
|
`<w:r>${runProperties ? `<w:rPr>${runProperties}</w:rPr>` : ''}` +
|
|
529
|
-
|
|
539
|
+
`${wordTextElement(String(text ?? ''))}</w:r></w:p>`
|
|
530
540
|
);
|
|
531
541
|
}
|
|
532
542
|
|
|
@@ -627,14 +637,14 @@ export function docxTables(current) {
|
|
|
627
637
|
});
|
|
628
638
|
}
|
|
629
639
|
|
|
630
|
-
// A table as a caller can pick it out of the page: its size and the words it starts with. A report's metric strip is
|
|
631
|
-
// a table too, and "table 1" named it where the results table was meant; the errors now say which table is which.
|
|
632
640
|
// The grid's columns, as Word counts a table's columns whatever its merges.
|
|
633
641
|
function tableColumnCount(tableXml, rows = tableRowMatches(tableXml)) {
|
|
634
642
|
const grid = /<w:tblGrid\b[\s\S]*?<\/w:tblGrid>/.exec(tableXml)?.[0] || '';
|
|
635
643
|
return (grid.match(/<w:gridCol\b/g) || []).length || (rows.length ? rowCellMatches(rows[0][0]).length : 0);
|
|
636
644
|
}
|
|
637
645
|
|
|
646
|
+
// A table as a caller can pick it out of the page: its size and the words it starts with. A report's metric strip is
|
|
647
|
+
// a table too, and "table 1" named it where the results table was meant; the errors now say which table is which.
|
|
638
648
|
function tableSummary(tableXml) {
|
|
639
649
|
const rows = tableRowMatches(tableXml);
|
|
640
650
|
const columns = tableColumnCount(tableXml, rows);
|
|
@@ -655,7 +665,9 @@ export function docxTable(current, number) {
|
|
|
655
665
|
.slice(0, 6)
|
|
656
666
|
.map((table, index) => `${index + 1}: ${tableSummary(table[0])}`)
|
|
657
667
|
.join('; ');
|
|
658
|
-
throw new Error(
|
|
668
|
+
throw new Error(
|
|
669
|
+
`DOCX table ${number} not found: the document holds ${tables.length} table(s)${held ? ` (${held})` : ''}`
|
|
670
|
+
);
|
|
659
671
|
}
|
|
660
672
|
return match;
|
|
661
673
|
}
|
|
@@ -763,12 +775,10 @@ function paragraphIndentXml({ indentLeft, indentRight, indentFirstLine }) {
|
|
|
763
775
|
// w:hanging: a w:firstLine never goes below zero, and clamped there the mark sat inside the indent and every
|
|
764
776
|
// wrapped line started under it.
|
|
765
777
|
const first = Number(indentFirstLine);
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
? ` w:hanging="${twips(-first)}"`
|
|
771
|
-
: ` w:firstLine="${twips(first)}"`;
|
|
778
|
+
let firstLine = '';
|
|
779
|
+
if (indentFirstLine !== undefined) {
|
|
780
|
+
firstLine = first < 0 ? ` w:hanging="${twips(-first)}"` : ` w:firstLine="${twips(first)}"`;
|
|
781
|
+
}
|
|
772
782
|
return `<w:ind${left}${right}${firstLine}/>`;
|
|
773
783
|
}
|
|
774
784
|
|
|
@@ -778,13 +788,11 @@ function paragraphIndentXml({ indentLeft, indentRight, indentFirstLine }) {
|
|
|
778
788
|
* right-aligned figure, a dot leader) never see it.
|
|
779
789
|
*/
|
|
780
790
|
export function wordTextContent(text, { preserve = false } = {}) {
|
|
781
|
-
const textXml = (part) =>
|
|
782
|
-
`<w:t${preserve || /^\s|\s$/.test(part) ? ' xml:space="preserve"' : ''}>${xmlEncode(part)}</w:t>`;
|
|
783
791
|
const value = String(text ?? '');
|
|
784
|
-
if (!value.includes('\t')) return
|
|
792
|
+
if (!value.includes('\t')) return wordTextElement(value, { preserve });
|
|
785
793
|
return value
|
|
786
794
|
.split('\t')
|
|
787
|
-
.map((part) => (part ?
|
|
795
|
+
.map((part) => (part ? wordTextElement(part, { preserve }) : ''))
|
|
788
796
|
.join('<w:tab/>');
|
|
789
797
|
}
|
|
790
798
|
|
|
@@ -80,7 +80,7 @@ export async function fillTemplateParts(zip, parts, tag, operation, { replace =
|
|
|
80
80
|
changed: Object.keys(filled).length > 0,
|
|
81
81
|
filled,
|
|
82
82
|
unfilledTokens,
|
|
83
|
-
strict: operation.strict
|
|
83
|
+
strict: Boolean(operation.strict),
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -267,10 +267,7 @@ export function relationshipTargetsByType(relationshipsXml, owner, type) {
|
|
|
267
267
|
const id = xmlAttribute(attributes, 'Id');
|
|
268
268
|
const target = xmlAttribute(attributes, 'Target');
|
|
269
269
|
if (!id || !target) continue;
|
|
270
|
-
targets.set(
|
|
271
|
-
id,
|
|
272
|
-
target.startsWith('/') ? target.slice(1) : posix.normalize(posix.join(posix.dirname(owner), target))
|
|
273
|
-
);
|
|
270
|
+
targets.set(id, partFromTarget(posix.dirname(owner), target));
|
|
274
271
|
}
|
|
275
272
|
return targets;
|
|
276
273
|
}
|
|
@@ -291,7 +288,7 @@ function* internalRelationships(xml) {
|
|
|
291
288
|
|
|
292
289
|
// The part a relationship target names: absolute from the package root,
|
|
293
290
|
// relative from the directory of the part that declares it.
|
|
294
|
-
function partFromTarget(directory, target) {
|
|
291
|
+
export function partFromTarget(directory, target) {
|
|
295
292
|
return target.startsWith('/') ? target.slice(1) : posix.normalize(posix.join(directory, target));
|
|
296
293
|
}
|
|
297
294
|
|
|
@@ -425,7 +422,6 @@ async function clonePartTree(zip, sourcePath, cache = new Map()) {
|
|
|
425
422
|
|
|
426
423
|
// The relationships a copied slide must own outright before it is editable on
|
|
427
424
|
// its own: everything else stays shared with the slide it was copied from.
|
|
428
|
-
|
|
429
425
|
export async function cloneOwnedSlideParts(zip, relationshipsPath) {
|
|
430
426
|
const xml = await zipText(zip, relationshipsPath);
|
|
431
427
|
if (!xml) return [];
|
|
@@ -453,11 +449,6 @@ export async function cloneOwnedSlideParts(zip, relationshipsPath) {
|
|
|
453
449
|
return copied;
|
|
454
450
|
}
|
|
455
451
|
|
|
456
|
-
// A page borrowed from another deck was drawn on that deck's layout. When this
|
|
457
|
-
// deck already holds the same layout the import points at it; when the two were
|
|
458
|
-
// cut from different templates the layout is copied in and adopted by this
|
|
459
|
-
// deck's master, so the page keeps the geometry it was built with and the
|
|
460
|
-
// master still lists every layout under it.
|
|
461
452
|
// Slide layout ids live above 2^31 by the OOXML convention PowerPoint writes.
|
|
462
453
|
const FIRST_SLIDE_LAYOUT_ID = 2_147_483_648;
|
|
463
454
|
|
|
@@ -501,6 +492,11 @@ async function registerLayoutOnMaster(zip, master, targetPath) {
|
|
|
501
492
|
);
|
|
502
493
|
}
|
|
503
494
|
|
|
495
|
+
// A page borrowed from another deck was drawn on that deck's layout. When this
|
|
496
|
+
// deck already holds the same layout the import points at it; when the two were
|
|
497
|
+
// cut from different templates the layout is copied in and adopted by this
|
|
498
|
+
// deck's master, so the page keeps the geometry it was built with and the
|
|
499
|
+
// master still lists every layout under it.
|
|
504
500
|
async function adoptImportedLayout(source, zip, layoutPath, cache) {
|
|
505
501
|
const master = Object.keys(zip.files)
|
|
506
502
|
.filter((name) => /^ppt\/slideMasters\/slideMaster\d+\.xml$/.test(name))
|
|
@@ -571,7 +567,9 @@ export function relationshipTarget(relPath, target) {
|
|
|
571
567
|
let decoded = xmlDecode(target).split('#')[0].split('?')[0];
|
|
572
568
|
try {
|
|
573
569
|
decoded = decodeURIComponent(decoded);
|
|
574
|
-
} catch {
|
|
570
|
+
} catch {
|
|
571
|
+
// A malformed percent escape is a literal part name: keep the text as written.
|
|
572
|
+
}
|
|
575
573
|
const owner = relationshipOwner(relPath);
|
|
576
574
|
const base = owner ? posix.dirname(owner) : '';
|
|
577
575
|
return posix.normalize(decoded.startsWith('/') ? decoded.slice(1) : posix.join(base, decoded));
|
|
@@ -472,9 +472,8 @@ function worksheetWithRows(rows) {
|
|
|
472
472
|
.map((value, columnIndex) => {
|
|
473
473
|
if (value == null || value === '') return '';
|
|
474
474
|
const reference = `${columnLabel(columnIndex + 1)}${rowIndex + 1}`;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
return `<c r="${reference}"><v>${numeric}</v></c>`;
|
|
475
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
476
|
+
return `<c r="${reference}"><v>${value}</v></c>`;
|
|
478
477
|
}
|
|
479
478
|
return `<c r="${reference}" t="inlineStr"><is><t>${xmlEncode(value)}</t></is></c>`;
|
|
480
479
|
})
|
|
@@ -511,7 +510,7 @@ export function portableCreateSupported(fileKind) {
|
|
|
511
510
|
|
|
512
511
|
export async function createPortableOoxmlDocument(path, { fileKind, title = '', sheetName = 'Sheet1' } = {}) {
|
|
513
512
|
const kind = String(fileKind || '').toLowerCase();
|
|
514
|
-
const family =
|
|
513
|
+
const family = portableCreateSupported(kind) ? FILE_KIND_FAMILIES[kind] : '';
|
|
515
514
|
if (!family) {
|
|
516
515
|
throw new Error(
|
|
517
516
|
`Portable Office creation supports ${Object.keys(FILE_KIND_FAMILIES).join(', ')}; .${kind || 'unknown'} requires Microsoft Office`
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { posix } from 'node:path';
|
|
2
2
|
import { addPackageRelationship, ensureContentTypeOverride, partRelationshipPath, zipText } from './portable-opc.mjs';
|
|
3
3
|
import { columnLabel, columnNumber, parseCellRef, setCellInSheet } from './portable-cells.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
OFFICE_RELATIONSHIP_BASE as RELATIONSHIP_BASE,
|
|
6
|
+
SPREADSHEET_MAIN,
|
|
7
|
+
XML_HEADER,
|
|
8
|
+
xmlEncode,
|
|
9
|
+
} from './portable-xml.mjs';
|
|
5
10
|
|
|
6
11
|
const CACHE_DEFINITION_CONTENT_TYPE =
|
|
7
12
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml';
|
|
8
13
|
const CACHE_RECORDS_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml';
|
|
9
14
|
const PIVOT_TABLE_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml';
|
|
10
|
-
const RELATIONSHIP_BASE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
|
|
11
15
|
|
|
12
16
|
// axes: the field indexes laid out as rows or columns. A numeric field on an axis is still a set of items — "Year"
|
|
13
17
|
// across the top is 2013 and 2014, not a sum — so its values are listed as numeric items; left as a bare number
|
|
@@ -116,7 +120,7 @@ function cacheRecordsXml(fields, records) {
|
|
|
116
120
|
// autofit, or a fit audit to read, so the computed grid is written as cells.
|
|
117
121
|
// The captions a pivot prints, in the language of its fields: Korean Excel heads a sum "합계 : 매출" and its totals
|
|
118
122
|
// "총합계"; written in English beside Hangul fields, a pivot read "Sum of 매출" over "Grand Total".
|
|
119
|
-
|
|
123
|
+
function pivotCaptions(fields) {
|
|
120
124
|
const korean = /[\uac00-\ud7af]/.test(fields.map((field) => field?.name ?? '').join(''));
|
|
121
125
|
return korean
|
|
122
126
|
? { sum: (name) => `합계 : ${name}`, grand: '총합계', total: '합계' }
|