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,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* src/
|
|
2
|
+
* src/runtime/shared/statusline/statusline-segments.mjs — filesystem-backed L2 segment sources.
|
|
3
3
|
*
|
|
4
4
|
* The shell-jobs segment (owner-scoped job scan + liveness) and the
|
|
5
5
|
* memory-cycle segment (daemon state file) each keep a 1s process-local
|
|
@@ -13,8 +13,8 @@ import { readdir, readFile, stat } from 'node:fs/promises';
|
|
|
13
13
|
import { homedir } from 'node:os';
|
|
14
14
|
import { join } from 'node:path';
|
|
15
15
|
import { formatElapsed } from './statusline-format.mjs';
|
|
16
|
-
import { positiveInt } from '../
|
|
17
|
-
import { isPidAlive } from '../
|
|
16
|
+
import { positiveInt } from '../numbers.mjs';
|
|
17
|
+
import { isPidAlive } from '../pid-liveness.mjs';
|
|
18
18
|
|
|
19
19
|
const DEFAULT_MIXDOG_HOME = process.env.MIXDOG_HOME || join(homedir(), '.mixdog');
|
|
20
20
|
const DEFAULT_STANDALONE_DATA_DIR = join(DEFAULT_MIXDOG_HOME, 'data');
|
|
@@ -126,34 +126,7 @@ async function refreshShellJobsStatus(ownerPid) {
|
|
|
126
126
|
_shellJobsSegmentCache = { ownerPid, at: Date.now(), value };
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
|
-
const
|
|
130
|
-
const ownerByJob = new Map();
|
|
131
|
-
for (const n of names) {
|
|
132
|
-
const i = n.lastIndexOf('.owner-');
|
|
133
|
-
if (i > 0) {
|
|
134
|
-
const pid = positiveInt(n.slice(i + 7));
|
|
135
|
-
if (pid) ownerByJob.set(n.slice(0, i), pid);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
const ids = names
|
|
139
|
-
.filter((n) => n.endsWith('.json'))
|
|
140
|
-
.map((n) => n.slice(0, -5))
|
|
141
|
-
// Session buckets are NOT pid-scoped. A desktop pane's background shell
|
|
142
|
-
// is published by the session SHARD that ran it, so the record's
|
|
143
|
-
// `.owner-<pid>` marker carries the shard pid while the desktop poller
|
|
144
|
-
// asks with its own host pid. The two never intersect, so every desktop
|
|
145
|
-
// background shell was missing from the agent+shell chip even though its
|
|
146
|
-
// record was on disk and correctly stamped with ownerSessionId. Session
|
|
147
|
-
// ids are globally unique (sess_daemon_<ts>_<uuid>), so bucketing by
|
|
148
|
-
// session needs no pid axis at all. The owner-wide aggregate below still
|
|
149
|
-
// honours the pid, keeping the CLI statusline and keep-awake counting
|
|
150
|
-
// only their own process.
|
|
151
|
-
.filter((id) => !done.has(id))
|
|
152
|
-
.sort((a, b) => jobStampMs(b) - jobStampMs(a))
|
|
153
|
-
// Scanning both scopes from one list doubles the worst-case window, so
|
|
154
|
-
// the per-refresh cap doubles with it; a live (non-.done) record set is
|
|
155
|
-
// a handful in practice and terminal ones age out on their own.
|
|
156
|
-
.slice(0, 60);
|
|
129
|
+
const { ids, ownerByJob } = listOpenShellJobs(names);
|
|
157
130
|
let count = 0;
|
|
158
131
|
let oldestMs = Infinity;
|
|
159
132
|
const jobs = [];
|
|
@@ -198,25 +171,61 @@ async function refreshShellJobsStatus(ownerPid) {
|
|
|
198
171
|
// A desktop pane's job lands in a session bucket while the owner-wide
|
|
199
172
|
// count stays 0 (its publisher is a shard, not this host), so an empty
|
|
200
173
|
// aggregate must NOT discard the session buckets.
|
|
201
|
-
if (count || bySession.size) {
|
|
202
|
-
const now = Date.now();
|
|
203
|
-
const elapsedLabel = Number.isFinite(oldestMs) ? formatElapsed(now - oldestMs) : '';
|
|
204
|
-
const sessions = {};
|
|
205
|
-
for (const [owner, bucket] of bySession) {
|
|
206
|
-
sessions[owner] = {
|
|
207
|
-
count: bucket.count,
|
|
208
|
-
elapsedLabel: Number.isFinite(bucket.oldestMs) ? formatElapsed(now - bucket.oldestMs) : '',
|
|
209
|
-
jobs: bucket.jobs,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
value = { count, elapsedLabel, jobs, sessions };
|
|
213
|
-
}
|
|
174
|
+
if (count || bySession.size) value = summarizeShellJobs({ count, oldestMs, jobs, bySession });
|
|
214
175
|
} catch {
|
|
215
176
|
value = EMPTY_SHELL_JOBS;
|
|
216
177
|
}
|
|
217
178
|
_shellJobsSegmentCache = { ownerPid, at: Date.now(), value };
|
|
218
179
|
}
|
|
219
180
|
|
|
181
|
+
// Newest-first, capped ids of job records with no `.done` marker, plus the
|
|
182
|
+
// `.owner-<pid>` marker map.
|
|
183
|
+
function listOpenShellJobs(names) {
|
|
184
|
+
const done = new Set(names.filter((n) => n.endsWith('.done')).map((n) => n.slice(0, -5)));
|
|
185
|
+
const ownerByJob = new Map();
|
|
186
|
+
for (const n of names) {
|
|
187
|
+
const i = n.lastIndexOf('.owner-');
|
|
188
|
+
if (i > 0) {
|
|
189
|
+
const pid = positiveInt(n.slice(i + 7));
|
|
190
|
+
if (pid) ownerByJob.set(n.slice(0, i), pid);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const ids = names
|
|
194
|
+
.filter((n) => n.endsWith('.json'))
|
|
195
|
+
.map((n) => n.slice(0, -5))
|
|
196
|
+
// Session buckets are NOT pid-scoped. A desktop pane's background shell
|
|
197
|
+
// is published by the session SHARD that ran it, so the record's
|
|
198
|
+
// `.owner-<pid>` marker carries the shard pid while the desktop poller
|
|
199
|
+
// asks with its own host pid. The two never intersect, so every desktop
|
|
200
|
+
// background shell was missing from the agent+shell chip even though its
|
|
201
|
+
// record was on disk and correctly stamped with ownerSessionId. Session
|
|
202
|
+
// ids are globally unique (sess_daemon_<ts>_<uuid>), so bucketing by
|
|
203
|
+
// session needs no pid axis at all. The owner-wide aggregate still
|
|
204
|
+
// honours the pid, keeping the CLI statusline and keep-awake counting
|
|
205
|
+
// only their own process.
|
|
206
|
+
.filter((id) => !done.has(id))
|
|
207
|
+
.sort((a, b) => jobStampMs(b) - jobStampMs(a))
|
|
208
|
+
// Scanning both scopes from one list doubles the worst-case window, so
|
|
209
|
+
// the per-refresh cap doubles with it; a live (non-.done) record set is
|
|
210
|
+
// a handful in practice and terminal ones age out on their own.
|
|
211
|
+
.slice(0, 60);
|
|
212
|
+
return { ids, ownerByJob };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function summarizeShellJobs({ count, oldestMs, jobs, bySession }) {
|
|
216
|
+
const now = Date.now();
|
|
217
|
+
const elapsedLabel = Number.isFinite(oldestMs) ? formatElapsed(now - oldestMs) : '';
|
|
218
|
+
const sessions = {};
|
|
219
|
+
for (const [owner, bucket] of bySession) {
|
|
220
|
+
sessions[owner] = {
|
|
221
|
+
count: bucket.count,
|
|
222
|
+
elapsedLabel: Number.isFinite(bucket.oldestMs) ? formatElapsed(now - bucket.oldestMs) : '',
|
|
223
|
+
jobs: bucket.jobs,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return { count, elapsedLabel, jobs, sessions };
|
|
227
|
+
}
|
|
228
|
+
|
|
220
229
|
async function isShellJobAlive(detail, detailPath, dir, id) {
|
|
221
230
|
const pid = positiveInt(detail?.pid);
|
|
222
231
|
if (!pid) return false;
|
|
@@ -235,12 +244,7 @@ async function isShellJobAlive(detail, detailPath, dir, id) {
|
|
|
235
244
|
} catch {
|
|
236
245
|
return false;
|
|
237
246
|
}
|
|
238
|
-
|
|
239
|
-
process.kill(pid, 0);
|
|
240
|
-
return true;
|
|
241
|
-
} catch (e) {
|
|
242
|
-
return e?.code === 'EPERM';
|
|
243
|
-
}
|
|
247
|
+
return isPidAlive(pid);
|
|
244
248
|
}
|
|
245
249
|
|
|
246
250
|
function jobStampMs(id) {
|
|
@@ -139,7 +139,7 @@ export function backgroundTaskFailureDetail(meta = {}, parsedArgs = {}) {
|
|
|
139
139
|
return backgroundTaskFailureStatusLabel(status, error, { surface });
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
export function backgroundTaskDetail(meta = {}, elapsed = ''
|
|
142
|
+
export function backgroundTaskDetail(meta = {}, elapsed = '') {
|
|
143
143
|
const parts = [];
|
|
144
144
|
const status = displayTerminalStatus(meta.status);
|
|
145
145
|
if (status) parts.push(status);
|
|
@@ -15,7 +15,7 @@ function toolArgPathOf(parsedArgs) {
|
|
|
15
15
|
/** The completed detail of every non-shell tool, first match wins. */
|
|
16
16
|
function nonShellDetail(base, surface, display, status, imageDetail) {
|
|
17
17
|
const { pending, isError, elapsed } = base;
|
|
18
|
-
const { normalizedName, label,
|
|
18
|
+
const { normalizedName, label, isShellSurface } = surface;
|
|
19
19
|
const { resultSummary, hasResult, firstResultLine } = display;
|
|
20
20
|
const { agentDetail, agentCompletionDetail, backgroundElapsed, backgroundMetadataHeaderFailure } = status;
|
|
21
21
|
const genericDetail =
|
|
@@ -24,7 +24,7 @@ function nonShellDetail(base, surface, display, status, imageDetail) {
|
|
|
24
24
|
: '';
|
|
25
25
|
const backgroundMetadataDetail =
|
|
26
26
|
display.isBackgroundMetadataResult && !backgroundMetadataHeaderFailure
|
|
27
|
-
? backgroundTaskDetail(display.backgroundMeta, backgroundElapsed
|
|
27
|
+
? backgroundTaskDetail(display.backgroundMeta, backgroundElapsed)
|
|
28
28
|
: '';
|
|
29
29
|
const backgroundResponseDetail =
|
|
30
30
|
display.isBackgroundResponse && resultSummary ? prefixElapsed(resultSummary, backgroundElapsed) : resultSummary;
|
|
@@ -8,7 +8,8 @@ import { agentTerminalDetail, isAgentTool } from './agent-surface.mjs';
|
|
|
8
8
|
import { backgroundTaskElapsed, backgroundTaskFailureDetail, isBackgroundTaskTool } from './background-task.mjs';
|
|
9
9
|
import { shellDisplayStatus } from './shell-surface.mjs';
|
|
10
10
|
import { normalizeTerminalStatus, resultTerminalStatus, shellResultElapsed } from './terminal-status.mjs';
|
|
11
|
-
import {
|
|
11
|
+
import { gitTerminalStatus } from './git-result.mjs';
|
|
12
|
+
import { isUserControlCancellation } from '../tool-status.mjs';
|
|
12
13
|
|
|
13
14
|
function shellFragments(base, display, isShellSurface) {
|
|
14
15
|
if (!isShellSurface) return { shellStatus: '', shellElapsed: '' };
|
|
@@ -59,16 +60,17 @@ export function deriveCardStatus(base, { normalizedName, parsedArgs, isShellSurf
|
|
|
59
60
|
!pending && isAgentTool(normalizedName) && !agentHeaderFailure
|
|
60
61
|
? agentTerminalDetail(parsedArgs?.status, isError, elapsed, parsedArgs?.error)
|
|
61
62
|
: '';
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
(gitResultExitCode(display.displayedResultText) !== null || Boolean(gitResultError(display.displayedResultText)));
|
|
65
|
-
const failedOrCompleted = isError || failedCount > 0 || gitFailed ? 'failed' : 'completed';
|
|
63
|
+
const gitStatus = normalizedName === 'git' ? gitTerminalStatus(display.displayedResultText) : '';
|
|
64
|
+
const failedOrCompleted = isError || failedCount > 0 ? 'failed' : 'completed';
|
|
66
65
|
const terminalStatus = pending
|
|
67
66
|
? 'running'
|
|
68
67
|
: shellStatus ||
|
|
68
|
+
gitStatus ||
|
|
69
69
|
normalizeTerminalStatus(display.backgroundMeta?.status) ||
|
|
70
70
|
normalizeTerminalStatus(parsedArgs?.status) ||
|
|
71
71
|
resultTerminalStatus(display.displayedResultText) ||
|
|
72
|
+
// A one-line error body is hidden from display, so read the raw result.
|
|
73
|
+
(isUserControlCancellation(base.rt) ? 'cancelled' : '') ||
|
|
72
74
|
failedOrCompleted;
|
|
73
75
|
return {
|
|
74
76
|
shellStatus,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { hasBenignExitOutcome } from '../tool-status.mjs';
|
|
2
|
+
|
|
1
3
|
// Only command result headers, not arbitrary lines in a patch, carry exits.
|
|
2
4
|
export function gitResultExitCode(text) {
|
|
3
5
|
const match = /(?:^(?:## [^\n]+\n)?|\n## [^\n]+\n)exit ([1-9]\d*)\r?(?:\n|$)/.exec(String(text ?? ''));
|
|
@@ -7,3 +9,11 @@ export function gitResultExitCode(text) {
|
|
|
7
9
|
export function gitResultError(text) {
|
|
8
10
|
return /(?:^|\n)error: command failed: [^\n]+|^error: [^\n]+/.exec(String(text ?? ''))?.[0].trim() || '';
|
|
9
11
|
}
|
|
12
|
+
|
|
13
|
+
// A tool error fails the call; a git process that ran and exited non-zero is
|
|
14
|
+
// a command exit, like the shell's, unless the tool marked the exit a signal.
|
|
15
|
+
export function gitTerminalStatus(text) {
|
|
16
|
+
if (gitResultError(text)) return 'failed';
|
|
17
|
+
if (gitResultExitCode(text) !== null && !hasBenignExitOutcome(text)) return 'exit';
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* terminal-status.mjs — terminal status words, their outcome tone, status
|
|
3
3
|
* marker stripping and the ` · <time>` detail conventions.
|
|
4
4
|
*/
|
|
5
|
-
import { normalizeToolTerminalStatus, toolResultTerminalStatus } from '../tool-status.mjs';
|
|
5
|
+
import { leadingResultBlock, normalizeToolTerminalStatus, toolResultTerminalStatus } from '../tool-status.mjs';
|
|
6
6
|
import { formatElapsed } from '../time-format.mjs';
|
|
7
7
|
|
|
8
8
|
export function shellResultStatus(value) {
|
|
9
|
-
const match =
|
|
9
|
+
const match = leadingResultBlock(value).match(
|
|
10
10
|
/(?:^|\b)status:\s*(running|pending|queued|completed|failed|cancelled|canceled)\b/im
|
|
11
11
|
);
|
|
12
12
|
return match ? String(match[1] || '').toLowerCase() : '';
|
|
@@ -48,6 +48,7 @@ const TERMINAL_STATUS_LABELS = new Map([
|
|
|
48
48
|
['cancelled', 'Cancelled'],
|
|
49
49
|
['denied', 'Denied'],
|
|
50
50
|
]);
|
|
51
|
+
const BARE_STATUS_WORDS = new Set([...TERMINAL_STATUS_LABELS.values()].map((label) => label.toLowerCase()));
|
|
51
52
|
|
|
52
53
|
export function displayTerminalStatus(value) {
|
|
53
54
|
// 'exit' is a shell-only pseudo-status (command RAN but exited non-zero); it
|
|
@@ -107,5 +108,8 @@ export function mergeTerminalDetail(status, detail = '') {
|
|
|
107
108
|
if (label === 'Finished' && text) return text;
|
|
108
109
|
if (!text) return label;
|
|
109
110
|
if (text.toLowerCase().startsWith(label.toLowerCase())) return text;
|
|
111
|
+
// A bare status word (the generic "Failed" of an error without a body) is
|
|
112
|
+
// superseded by the resolved status, e.g. a user-takeover "Cancelled".
|
|
113
|
+
if (BARE_STATUS_WORDS.has(text.toLowerCase())) return label;
|
|
110
114
|
return `${label} · ${text}`;
|
|
111
115
|
}
|
|
@@ -16,7 +16,8 @@ export const GIT_GOLDEN_CASES = [
|
|
|
16
16
|
summary: 'diff --git a/a.txt b/a.txt',
|
|
17
17
|
status: 'completed',
|
|
18
18
|
},
|
|
19
|
-
{ result: 'exit 128\nfatal: missing ref\n', summary: 'Exit 128', status: '
|
|
19
|
+
{ result: 'exit 128\nfatal: missing ref\n', summary: 'Exit 128', status: 'exit' },
|
|
20
|
+
{ result: 'exit 1\n[outcome: no-match]\ndiff --git a/a.txt b/a.txt\n', summary: 'Exit 1', status: 'completed' },
|
|
20
21
|
{
|
|
21
22
|
result: '## git show missing\nexit 128\nfatal: missing\nerror: command failed: git show missing',
|
|
22
23
|
summary: 'Exit 128',
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Single source of truth for the model-facing tool-output byte budget.
|
|
2
|
+
// read / shell / list-tree all truncate their output to this cap so the
|
|
3
|
+
// context cost of any one tool call is bounded and consistent. Override with
|
|
4
|
+
// MIXDOG_TOOL_OUTPUT_MAX_BYTES. Line-based sub-caps (e.g. bash max lines) stay
|
|
5
|
+
// per-tool; this governs only the byte budget.
|
|
6
|
+
// A positive integer from an env var, or `fallback` when unset or invalid.
|
|
7
|
+
export function positiveEnvInt(name, fallback) {
|
|
8
|
+
const v = parseInt(process.env[name], 10);
|
|
9
|
+
return Number.isFinite(v) && v > 0 ? v : fallback;
|
|
10
|
+
}
|
|
11
|
+
export const TOOL_OUTPUT_MAX_BYTES = positiveEnvInt('MIXDOG_TOOL_OUTPUT_MAX_BYTES', 50 * 1024);
|
|
12
|
+
export const LOCATOR_OUTPUT_MAX_BYTES = positiveEnvInt('MIXDOG_LOCATOR_OUTPUT_MAX_BYTES', 20 * 1024);
|
|
13
|
+
// grep results stay in context for the rest of the session. 2026-09-28 cost
|
|
14
|
+
// audit: only 6% of greps capped at 10KB were paged, so carrying the tail cost
|
|
15
|
+
// more than the follow-up turns it saved.
|
|
16
|
+
export const GREP_OUTPUT_MAX_BYTES = positiveEnvInt('MIXDOG_GREP_OUTPUT_MAX_BYTES', 5 * 1024);
|
|
17
|
+
export const CODE_GRAPH_OUTPUT_MAX_BYTES = positiveEnvInt('MIXDOG_CODE_GRAPH_OUTPUT_MAX_BYTES', 30 * 1024);
|
|
18
|
+
// recall/memory search returns model-facing prose blocks; uncapped multi-query
|
|
19
|
+
// browses were observed injecting 42KB in one call (2026-08-05 audit). Same
|
|
20
|
+
// class as locators: 20KB with a factual continuation footer.
|
|
21
|
+
export const RECALL_OUTPUT_MAX_BYTES = positiveEnvInt('MIXDOG_RECALL_OUTPUT_MAX_BYTES', 20 * 1024);
|
|
22
|
+
|
|
23
|
+
function _prefixByBytes(value, maxBytes) {
|
|
24
|
+
const text = String(value || '');
|
|
25
|
+
let lo = 0;
|
|
26
|
+
let hi = text.length;
|
|
27
|
+
while (lo < hi) {
|
|
28
|
+
const mid = Math.ceil((lo + hi) / 2);
|
|
29
|
+
if (Buffer.byteLength(text.slice(0, mid), 'utf8') <= maxBytes) lo = mid;
|
|
30
|
+
else hi = mid - 1;
|
|
31
|
+
}
|
|
32
|
+
return text.slice(0, lo);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Preserve complete leading rows and replace the omitted tail with a
|
|
36
|
+
// tool-specific continuation. Unlike the generic middle truncator this keeps
|
|
37
|
+
// locator/graph output structurally usable and byte-accurate.
|
|
38
|
+
export function capLineOrientedToolOutput(result, maxBytes, footerForPrefix) {
|
|
39
|
+
if (typeof result !== 'string' || !(Number(maxBytes) > 0)) return result;
|
|
40
|
+
const cap = Math.trunc(Number(maxBytes));
|
|
41
|
+
if (Buffer.byteLength(result, 'utf8') <= cap) return result;
|
|
42
|
+
const lines = result.split(/\r?\n/);
|
|
43
|
+
let lo = 0;
|
|
44
|
+
let hi = lines.length;
|
|
45
|
+
let best = '';
|
|
46
|
+
while (lo <= hi) {
|
|
47
|
+
const mid = Math.floor((lo + hi) / 2);
|
|
48
|
+
const kept = lines.slice(0, mid);
|
|
49
|
+
const footer = String(footerForPrefix?.(kept, lines) || '... [output budget reached; remainder omitted]');
|
|
50
|
+
const candidate = `${kept.join('\n')}${kept.length ? '\n' : ''}${footer}`;
|
|
51
|
+
if (Buffer.byteLength(candidate, 'utf8') <= cap) {
|
|
52
|
+
best = candidate;
|
|
53
|
+
lo = mid + 1;
|
|
54
|
+
} else {
|
|
55
|
+
hi = mid - 1;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (best) return best;
|
|
59
|
+
return _prefixByBytes(String(footerForPrefix?.([], lines) || '... [output budget reached; remainder omitted]'), cap);
|
|
60
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { displayModelName as sharedDisplayModelName } from '
|
|
1
|
+
import { displayModelName as sharedDisplayModelName } from './model-display.mjs';
|
|
2
2
|
|
|
3
3
|
// Default cap for tool-arg summaries (header parenthetical, channel tool lines).
|
|
4
4
|
// Unified at 80 so every tool surface line — header arg summary and collapsed
|
|
@@ -312,6 +312,7 @@ function summarizeLineCount({ text, trimmed }, { zero, singular, plural }) {
|
|
|
312
312
|
function summarizeReadResult({ text, trimmed }) {
|
|
313
313
|
if (/^\[image:/i.test(trimmed)) return 'Image';
|
|
314
314
|
if (!trimmed) return null;
|
|
315
|
+
if (trimmed.startsWith('(no lines in range')) return '0 lines';
|
|
315
316
|
const n = text.split('\n').length;
|
|
316
317
|
return `${n} ${pluralize(n, 'line')}`;
|
|
317
318
|
}
|
|
@@ -23,15 +23,48 @@ export function normalizeToolTerminalStatus(value) {
|
|
|
23
23
|
return '';
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
// Status markers live in the result's leading block: the cancel marker, the
|
|
27
|
+
// shell exit header, a background-task header, a task/agent status line.
|
|
28
|
+
// Command output and fetched documents follow a blank line and can carry
|
|
29
|
+
// `status:` text of their own, which says nothing about the tool call.
|
|
30
|
+
export function leadingResultBlock(text) {
|
|
31
|
+
const lines = String(text || '').split('\n');
|
|
32
|
+
let index = 0;
|
|
33
|
+
if (/^\[tool output offloaded:/i.test(String(lines[0] || '').trim())) {
|
|
34
|
+
index = 1;
|
|
35
|
+
while (index < lines.length && !lines[index].trim()) index += 1;
|
|
36
|
+
}
|
|
37
|
+
const block = [];
|
|
38
|
+
for (; index < lines.length && lines[index].trim(); index += 1) block.push(lines[index]);
|
|
39
|
+
return block.join('\n');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// The user taking over the browser/desktop, or the session cancelling a
|
|
43
|
+
// computer command, stops the call on purpose; it is not a failed invocation.
|
|
44
|
+
const USER_CONTROL_CANCELLATION_RE =
|
|
45
|
+
/^(?:Error:\s*)?(?:Browser command interrupted by local user input\.|computer_session_aborted:|computer_user_control_active:)/i;
|
|
46
|
+
|
|
47
|
+
export function isUserControlCancellation(text) {
|
|
48
|
+
return USER_CONTROL_CANCELLATION_RE.test(String(text || '').trimStart());
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// A non-zero exit the tool itself marked as a signal (search no-match, a
|
|
52
|
+
// `git diff --exit-code` difference) rather than a command failure.
|
|
53
|
+
export function hasBenignExitOutcome(text) {
|
|
54
|
+
return /^\[outcome:\s*(?:no-match|no-change)\]\s*$/im.test(String(text || ''));
|
|
55
|
+
}
|
|
56
|
+
|
|
26
57
|
export function toolResultTerminalStatus(text) {
|
|
27
58
|
const body = String(text || '');
|
|
28
59
|
const tagged = body.match(/<status[^>]*>([\s\S]*?)<\/status>/i)?.[1]?.trim();
|
|
29
60
|
if (tagged) return normalizeToolTerminalStatus(tagged);
|
|
30
|
-
const
|
|
61
|
+
const head = leadingResultBlock(body);
|
|
62
|
+
const bracketed = head.match(/^\[status:\s*([^\]]*)\]/im)?.[1]?.trim();
|
|
31
63
|
if (bracketed) return normalizeToolTerminalStatus(bracketed);
|
|
32
|
-
const inline =
|
|
64
|
+
const inline = head.match(/^(?:status|state):\s*([^\s·,;]+)/im)?.[1]?.trim();
|
|
33
65
|
const fromInline = normalizeToolTerminalStatus(inline);
|
|
34
66
|
if (fromInline) return fromInline;
|
|
67
|
+
if (isUserControlCancellation(body)) return 'cancelled';
|
|
35
68
|
// Bare control bodies written on cancel/crash (current + legacy).
|
|
36
69
|
const trimmed = body.trim();
|
|
37
70
|
if (/^(?:cancelled|canceled)$/i.test(trimmed)) return 'cancelled';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Transcript route identity is separate from the human-readable model label.
|
|
2
2
|
// These pure helpers keep live rows, persisted messages and restored rows on
|
|
3
3
|
// the same field contract without rewriting older display-only transcripts.
|
|
4
|
-
import { displayModelName } from '
|
|
4
|
+
import { displayModelName } from './model-display.mjs';
|
|
5
5
|
|
|
6
6
|
export function transcriptRouteMetadataFields(value) {
|
|
7
7
|
if (!value || typeof value !== 'object') return {};
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
import { existsSync, mkdirSync, statSync, writeFileSync } from 'node:fs';
|
|
7
7
|
import { resolve } from 'node:path';
|
|
8
8
|
|
|
9
|
-
// Canonical project-slug mapping for `<mixdogHome>/projects/<slug>` transcript
|
|
10
|
-
// dirs (originally shared with the retired channel session-discovery).
|
|
9
|
+
// Canonical project-slug mapping for `<mixdogHome>/projects/<slug>` transcript dirs.
|
|
11
10
|
export function cwdToProjectSlug(cwd) {
|
|
12
11
|
return resolve(cwd)
|
|
13
12
|
.replace(/\\/g, '/')
|
|
@@ -18,7 +18,6 @@ import { join } from 'node:path';
|
|
|
18
18
|
import { cleanString as clean } from './clean.mjs';
|
|
19
19
|
import { resolvePluginData } from './plugin-paths.mjs';
|
|
20
20
|
|
|
21
|
-
const DATA_DIR = resolvePluginData();
|
|
22
21
|
const RECORD_VERSION = 1;
|
|
23
22
|
// Matches the shadow repository's own `gc --prune` window: once the tree object
|
|
24
23
|
// is collected the record cannot restore anything anyway.
|
|
@@ -32,7 +31,12 @@ const MAX_SESSION_SCOPES = 8;
|
|
|
32
31
|
// A bounded directory: one file per session, oldest swept first.
|
|
33
32
|
const MAX_RECORD_FILES = 512;
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
// Test override; otherwise resolved per call because the pristine-execution
|
|
35
|
+
// boundary retargets MIXDOG_DATA_DIR at runtime.
|
|
36
|
+
let recordRootOverride = '';
|
|
37
|
+
function recordRoot() {
|
|
38
|
+
return recordRootOverride || join(resolvePluginData(), 'turn-snapshots');
|
|
39
|
+
}
|
|
36
40
|
// Per-session write chain. Two turns of one session never race their own file,
|
|
37
41
|
// and a read never observes a partially written record (writes land by rename).
|
|
38
42
|
const writeChains = new Map();
|
|
@@ -43,6 +47,16 @@ function rootKey(value) {
|
|
|
43
47
|
return process.platform === 'win32' ? root.toLowerCase() : root;
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
// Fold a turn's files into an existing scope: session-owned paths keep the
|
|
51
|
+
// baseline they first recorded, and every tool-mutated path joins the owned set.
|
|
52
|
+
function mergeScopeFiles(scope, baselineFiles, toolFiles) {
|
|
53
|
+
const owned = new Set([...scope.toolFiles].map(rootKey));
|
|
54
|
+
for (const file of baselineFiles) {
|
|
55
|
+
if (!owned.has(rootKey(file.path))) scope.baselineFiles.set(rootKey(file.path), file);
|
|
56
|
+
}
|
|
57
|
+
for (const file of toolFiles) scope.toolFiles.add(file);
|
|
58
|
+
}
|
|
59
|
+
|
|
46
60
|
function sessionScopes(record) {
|
|
47
61
|
const scopes = [];
|
|
48
62
|
const add = (entry) => {
|
|
@@ -54,11 +68,7 @@ function sessionScopes(record) {
|
|
|
54
68
|
const files = (Array.isArray(entry?.toolFiles) ? entry.toolFiles : []).map((value) => clean(value)).filter(Boolean);
|
|
55
69
|
const baselineFiles = Array.isArray(entry?.baselineFiles) ? entry.baselineFiles : [];
|
|
56
70
|
if (existing) {
|
|
57
|
-
|
|
58
|
-
for (const file of baselineFiles) {
|
|
59
|
-
if (!owned.has(rootKey(file.path))) existing.baselineFiles.set(rootKey(file.path), file);
|
|
60
|
-
}
|
|
61
|
-
for (const file of files) existing.toolFiles.add(file);
|
|
71
|
+
mergeScopeFiles(existing, baselineFiles, files);
|
|
62
72
|
existing.updatedAt = Math.max(existing.updatedAt, Number(entry?.updatedAt) || 0);
|
|
63
73
|
return;
|
|
64
74
|
}
|
|
@@ -94,7 +104,7 @@ function serializeScope(entry) {
|
|
|
94
104
|
|
|
95
105
|
function recordPath(sessionId) {
|
|
96
106
|
const hash = createHash('sha256').update(sessionId).digest('hex').slice(0, 24);
|
|
97
|
-
return join(recordRoot, `${hash}.json`);
|
|
107
|
+
return join(recordRoot(), `${hash}.json`);
|
|
98
108
|
}
|
|
99
109
|
|
|
100
110
|
function chain(sessionId, task) {
|
|
@@ -126,12 +136,12 @@ async function sweepRecords() {
|
|
|
126
136
|
if (sweepDone) return;
|
|
127
137
|
sweepDone = true;
|
|
128
138
|
try {
|
|
129
|
-
const names = await readdir(recordRoot);
|
|
139
|
+
const names = await readdir(recordRoot());
|
|
130
140
|
const now = Date.now();
|
|
131
141
|
const kept = [];
|
|
132
142
|
for (const name of names) {
|
|
133
143
|
if (!name.endsWith('.json')) continue;
|
|
134
|
-
const path = join(recordRoot, name);
|
|
144
|
+
const path = join(recordRoot(), name);
|
|
135
145
|
try {
|
|
136
146
|
const info = await stat(path);
|
|
137
147
|
if (now - info.mtimeMs > RECORD_TTL_MS) {
|
|
@@ -163,7 +173,7 @@ export async function saveTurnSnapshotRecord(sessionId, turn) {
|
|
|
163
173
|
if (!id || !baselineTree || !root) return false;
|
|
164
174
|
return await chain(id, async () => {
|
|
165
175
|
try {
|
|
166
|
-
await mkdir(recordRoot, { recursive: true });
|
|
176
|
+
await mkdir(recordRoot(), { recursive: true });
|
|
167
177
|
void sweepRecords();
|
|
168
178
|
const path = recordPath(id);
|
|
169
179
|
const existing = await readRecordFile(path);
|
|
@@ -189,11 +199,7 @@ export async function saveTurnSnapshotRecord(sessionId, turn) {
|
|
|
189
199
|
const scopes = sessionScopes(existing);
|
|
190
200
|
const scope = scopes.find((entry) => rootKey(entry.root) === rootKey(root));
|
|
191
201
|
if (scope) {
|
|
192
|
-
|
|
193
|
-
for (const file of nextTurn.baselineFiles) {
|
|
194
|
-
if (!owned.has(rootKey(file.path))) scope.baselineFiles.set(rootKey(file.path), file);
|
|
195
|
-
}
|
|
196
|
-
for (const file of nextTurn.toolFiles) scope.toolFiles.add(file);
|
|
202
|
+
mergeScopeFiles(scope, nextTurn.baselineFiles, nextTurn.toolFiles);
|
|
197
203
|
scope.updatedAt = nextTurn.updatedAt;
|
|
198
204
|
} else {
|
|
199
205
|
scopes.push({
|
|
@@ -254,7 +260,7 @@ export async function loadSessionSnapshotRecords(sessionId) {
|
|
|
254
260
|
}
|
|
255
261
|
|
|
256
262
|
export function _setTurnSnapshotStoreRootForTest(directory) {
|
|
257
|
-
|
|
263
|
+
recordRootOverride = clean(directory);
|
|
258
264
|
writeChains.clear();
|
|
259
265
|
sweepDone = false;
|
|
260
266
|
}
|
|
@@ -12,7 +12,10 @@ const MAX_UNTRACKED_FILE_BYTES = 2 * 1024 * 1024;
|
|
|
12
12
|
// Baselines used to live in the OS temp directory, where a reboot or a disk
|
|
13
13
|
// cleaner could remove the only copy of a turn's revert source. Keep them with
|
|
14
14
|
// the rest of the runtime data.
|
|
15
|
-
|
|
15
|
+
// Resolved per call: the pristine-execution boundary retargets MIXDOG_DATA_DIR.
|
|
16
|
+
function snapshotRoot() {
|
|
17
|
+
return join(resolvePluginData(), 'turn-worktree-snapshots-v1');
|
|
18
|
+
}
|
|
16
19
|
// A baseline tree is unreachable by design (no commit, no ref), so collection
|
|
17
20
|
// is what bounds how long a review stays revertible.
|
|
18
21
|
const SHADOW_GC_PRUNE = '7.days.ago';
|
|
@@ -69,11 +72,12 @@ async function repositoryRoot(worktree) {
|
|
|
69
72
|
function stateForRoot(root) {
|
|
70
73
|
const key = pathKey(root);
|
|
71
74
|
let state = states.get(key);
|
|
72
|
-
if (state) return state;
|
|
73
75
|
const hash = createHash('sha256').update(key).digest('hex').slice(0, 24);
|
|
76
|
+
const gitDir = join(snapshotRoot(), hash);
|
|
77
|
+
if (state && state.gitDir === gitDir) return state;
|
|
74
78
|
state = {
|
|
75
79
|
root,
|
|
76
|
-
gitDir
|
|
80
|
+
gitDir,
|
|
77
81
|
initialized: false,
|
|
78
82
|
sourceIndexPath: null,
|
|
79
83
|
sourceIndexIdentity: null,
|
|
@@ -169,7 +173,7 @@ async function refreshSourceTracked(state, { force = false } = {}) {
|
|
|
169
173
|
|
|
170
174
|
async function ensureState(state) {
|
|
171
175
|
if (state.initialized && (await exists(join(state.gitDir, 'config')))) return;
|
|
172
|
-
await mkdir(
|
|
176
|
+
await mkdir(dirname(state.gitDir), { recursive: true });
|
|
173
177
|
if (!(await exists(join(state.gitDir, 'config')))) {
|
|
174
178
|
// Migrate the short-lived prototype layout (`git init <dir>` created
|
|
175
179
|
// <dir>/.git) before initializing the real external index repository.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* best-effort convenience check, never a boot-blocking dependency.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { existsSync,
|
|
12
|
+
import { existsSync, readFileSync, realpathSync } from 'node:fs';
|
|
13
13
|
import { basename, delimiter, dirname, join } from 'node:path';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
import { writeJsonAtomicSync } from './atomic-file.mjs';
|
|
@@ -74,8 +74,6 @@ function readCache(dataDir) {
|
|
|
74
74
|
|
|
75
75
|
function writeCache(dataDir, payload) {
|
|
76
76
|
try {
|
|
77
|
-
const dir = dataDir || resolvePluginData();
|
|
78
|
-
mkdirSync(dir, { recursive: true });
|
|
79
77
|
writeJsonAtomicSync(cacheFilePath(dataDir), payload, {
|
|
80
78
|
compact: true,
|
|
81
79
|
lock: true,
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
isBlockedDevicePath,
|
|
14
14
|
isUncPath,
|
|
15
15
|
isWindowsDevicePath,
|
|
16
|
-
} from '../
|
|
17
|
-
import { markCodeGraphDirtyPaths } from '../
|
|
16
|
+
} from '../shared/device-paths.mjs';
|
|
17
|
+
import { markCodeGraphDirtyPaths } from '../shared/code-graph-state.mjs';
|
|
18
18
|
|
|
19
19
|
/** Same write-target guards the builtin edit surfaces enforce. */
|
|
20
20
|
export function guardTidyWritePath(fullPath) {
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Function-length summary for a check/fix run: spans come from the code-graph
|
|
2
|
+
// engine's outline records (the rows `code_graph mode:"symbols"` prints as
|
|
3
|
+
// `kind name (Lstart-end)`), so the counts match what the graph reports.
|
|
4
|
+
import { extname } from 'node:path';
|
|
5
|
+
|
|
6
|
+
const FILE_BATCH = 200;
|
|
7
|
+
const FUNCTION_KINDS = new Set(['function', 'method', 'constructor']);
|
|
8
|
+
const LONGEST_COUNT = 5;
|
|
9
|
+
|
|
10
|
+
async function graphRunFiles(cwd, rels, signal) {
|
|
11
|
+
const { _runGraphFiles } = await import('../agent/orchestrator/tools/code-graph/graph-binary.mjs');
|
|
12
|
+
return _runGraphFiles(cwd, rels, [], signal);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const hasSpan = (symbol) => Number.isFinite(Number(symbol?.startLine)) && Number.isFinite(Number(symbol?.endLine));
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Count functions over 50/100/150 lines in `files` (project-relative). Files
|
|
19
|
+
* whose language emits no spans are listed under `notMeasured`, never counted
|
|
20
|
+
* as short.
|
|
21
|
+
*/
|
|
22
|
+
export async function summarizeFunctionLengths({ cwd, files = [], signal = null, runFiles = graphRunFiles }) {
|
|
23
|
+
const functions = [];
|
|
24
|
+
const spanned = new Set();
|
|
25
|
+
const seen = new Map();
|
|
26
|
+
try {
|
|
27
|
+
for (let index = 0; index < files.length; index += FILE_BATCH) {
|
|
28
|
+
const chunk = files.slice(index, index + FILE_BATCH);
|
|
29
|
+
for (const record of await runFiles(cwd, chunk, signal)) {
|
|
30
|
+
const rel = String(record.rel || '').replaceAll('\\', '/');
|
|
31
|
+
const language = record.lang || extname(rel) || 'unknown';
|
|
32
|
+
seen.set(rel, language);
|
|
33
|
+
const symbols = Array.isArray(record.symbols) ? record.symbols : [];
|
|
34
|
+
if (symbols.some(hasSpan)) spanned.add(language);
|
|
35
|
+
for (const symbol of symbols) {
|
|
36
|
+
if (!FUNCTION_KINDS.has(symbol.kind) || !hasSpan(symbol)) continue;
|
|
37
|
+
functions.push({
|
|
38
|
+
path: rel,
|
|
39
|
+
name: String(symbol.name || ''),
|
|
40
|
+
lines: Number(symbol.endLine) - Number(symbol.startLine) + 1,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return { measured: false, note: `function lengths not measured: ${error?.message || error}` };
|
|
47
|
+
}
|
|
48
|
+
for (const file of files) {
|
|
49
|
+
const rel = String(file).replaceAll('\\', '/');
|
|
50
|
+
if (!seen.has(rel)) seen.set(rel, extname(rel) || 'unknown');
|
|
51
|
+
}
|
|
52
|
+
const notMeasured = [...new Set(seen.values())].filter((language) => !spanned.has(language)).sort();
|
|
53
|
+
const over = (limit) => functions.filter((fn) => fn.lines > limit).length;
|
|
54
|
+
return {
|
|
55
|
+
measured: true,
|
|
56
|
+
functions: functions.length,
|
|
57
|
+
over50: over(50),
|
|
58
|
+
over100: over(100),
|
|
59
|
+
over150: over(150),
|
|
60
|
+
longest: functions.sort((a, b) => b.lines - a.lines).slice(0, LONGEST_COUNT),
|
|
61
|
+
...(notMeasured.length ? { notMeasured } : {}),
|
|
62
|
+
};
|
|
63
|
+
}
|