mixdog 1.2.2 → 1.2.4
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 +18 -0
- package/package.json +2 -1
- package/scripts/gate-local.mjs +6 -4
- package/scripts/lib/gate-scheduler.mjs +29 -11
- package/scripts/probe-provider-catalog.mjs +31 -0
- package/scripts/provider-pingpong-live.mjs +599 -0
- package/scripts/session-sweep.mjs +5 -25
- package/src/agents/advisor/AGENT.md +1 -1
- package/src/agents/advisor/agent.json +1 -1
- package/src/agents/maintainer/AGENT.md +1 -1
- package/src/agents/maintainer/agent.json +1 -1
- package/src/agents/reviewer/AGENT.md +2 -4
- package/src/agents/security/AGENT.md +1 -2
- package/src/agents/writer/AGENT.md +2 -3
- package/src/defaults/shipped-history.json +11 -1
- package/src/defaults/skills/image/SKILL.md +21 -23
- package/src/defaults/skills/setup/SKILL.md +6 -1
- package/src/defaults/skills/setup/references/actions.md +44 -22
- package/src/defaults/skills/setup/references/surfaces.md +10 -8
- package/src/headless-exec.mjs +15 -8
- package/src/lib/keychain-cjs.cjs +20 -15
- package/src/output-styles/common.md +11 -10
- package/src/rules/agent/AGENT.md +6 -4
- package/src/rules/lead/LEAD.md +7 -9
- package/src/rules/shared/45-destructive.md +4 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +1 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +28 -7
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -11
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +92 -61
- package/src/runtime/agent/orchestrator/cache-mtime.mjs +10 -1
- package/src/runtime/agent/orchestrator/config-providers-merge.mjs +7 -0
- package/src/runtime/agent/orchestrator/config.mjs +5 -0
- package/src/runtime/agent/orchestrator/context/collect.mjs +1 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +26 -7
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +112 -7
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +101 -23
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-api-key-fetch.mjs +36 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +48 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-error-contract.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +24 -17
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +9 -9
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +26 -44
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +31 -15
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-blocks.mjs +20 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-delta.mjs +15 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/message-events.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -5
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-state.mjs +14 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +41 -12
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +13 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +131 -9
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +29 -10
- package/src/runtime/agent/orchestrator/providers/antigravity-retry-policy.mjs +125 -8
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +12 -62
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +117 -41
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +117 -72
- package/src/runtime/agent/orchestrator/providers/compat-request-policy.mjs +78 -2
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +39 -5
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-native-context.mjs +48 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-exec.mjs +144 -34
- package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +28 -4
- package/src/runtime/agent/orchestrator/providers/cursor-wire-request.mjs +8 -4
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +42 -11
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-messages.mjs +109 -6
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +17 -4
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +22 -2
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +73 -7
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +75 -6
- package/src/runtime/agent/orchestrator/providers/custom-reasoning.mjs +34 -7
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +32 -6
- package/src/runtime/agent/orchestrator/providers/deepseek.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +29 -5
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +36 -13
- package/src/runtime/agent/orchestrator/providers/gemini-error-contract.mjs +101 -11
- package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +41 -5
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/gemini-rest-stream/watchdogs.mjs +16 -5
- package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +19 -14
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +371 -41
- package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +97 -49
- package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +81 -10
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +35 -8
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/action-input-contract.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-native-blocks.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +253 -42
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-server-tool-usage.mjs +18 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +27 -6
- package/src/runtime/agent/orchestrator/providers/lib/claude-bridge-schema.mjs +392 -0
- package/src/runtime/agent/orchestrator/providers/lib/inclusive-usage.mjs +54 -0
- package/src/runtime/agent/orchestrator/providers/lib/origin-bound-fetch.mjs +16 -0
- package/src/runtime/agent/orchestrator/providers/lib/request-compression.mjs +86 -0
- package/src/runtime/agent/orchestrator/providers/lib/responses-terminal-fields.mjs +11 -0
- package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/lib/wire-pairing.mjs +50 -22
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +133 -21
- package/src/runtime/agent/orchestrator/providers/mimo-oauth-profile.mjs +13 -15
- package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +1 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +92 -16
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +13 -13
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +133 -62
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +35 -14
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +39 -7
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +2 -9
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-error-contract.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +84 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +47 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-reasoning-field.mjs +155 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +40 -24
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +63 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2901 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-parity.fixtures.mjs +183 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +87 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +51 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +103 -26
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +23 -4
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +11 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +17 -2
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +15 -23
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +64 -52
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +23 -10
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +28 -5
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +18 -7
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +80 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +72 -24
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +323 -0
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +50 -16
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +7 -19
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/refusals.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +51 -36
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +30 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +25 -6
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +18 -9
- package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +181 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +78 -70
- package/src/runtime/agent/orchestrator/providers/openrouter.mjs +74 -0
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +150 -10
- package/src/runtime/agent/orchestrator/providers/registry.mjs +13 -2
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/transport-scope.d.mts +6 -0
- package/src/runtime/agent/orchestrator/providers/transport-scope.mjs +28 -0
- package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +164 -0
- package/src/runtime/agent/orchestrator/providers/wire-route.mjs +522 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +1131 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search.fixtures.mjs +195 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +104 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +8 -6
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +24 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +15 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +30 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +3 -2
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +8 -3
- package/src/runtime/agent/orchestrator/runtime-core/provider-request-snapshot.mjs +7 -3
- package/src/runtime/agent/orchestrator/runtime-core/session-title.mjs +21 -1
- package/src/runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs +16 -3
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge-contract.mjs +6 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +526 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-schema.mjs +10 -7
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +178 -71
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +102 -12
- package/src/runtime/agent/orchestrator/runtime-core/tool-exposure.mjs +96 -0
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +10 -8
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -2
- package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +24 -0
- package/src/runtime/agent/orchestrator/session/cache/tool-result-reuse.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/catalog-db/index.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +5 -11
- package/src/runtime/agent/orchestrator/session/catalog-db/worker.mjs +6 -22
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +16 -93
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +16 -2
- package/src/runtime/agent/orchestrator/session/compact/summary-anchor.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +148 -0
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +17 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -4
- package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/historical-session-closure.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/assistant-commit.mjs +2 -5
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +89 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +56 -0
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +18 -8
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +1 -27
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/segments.mjs +4 -10
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +2 -9
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +24 -10
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +135 -0
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +31 -4
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +76 -0
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +67 -20
- package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +10 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-call-resolution.mjs +95 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +30 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +29 -5
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +147 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +7 -5
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +33 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-support.mjs +0 -4
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +23 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +34 -12
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +54 -13
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +33 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +57 -25
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +11 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +22 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +57 -13
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/failed-turn-rewind.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +6 -120
- package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +231 -16
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +42 -49
- package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +50 -0
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +47 -17
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +26 -4
- package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +36 -35
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +29 -13
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-recovery.mjs +45 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +4 -10
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +17 -1
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/side-question.mjs +197 -0
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +22 -15
- package/src/runtime/agent/orchestrator/session/store/lifecycle-read.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/listing.mjs +2 -6
- package/src/runtime/agent/orchestrator/session/store/live-cache-eviction.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +46 -37
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/load-session.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +44 -37
- package/src/runtime/agent/orchestrator/session/store/session-observers.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/session-paths.mjs +59 -0
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +27 -21
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +0 -8
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +6 -18
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +33 -106
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store-agent-worker-pool.mjs +5 -8
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +136 -196
- package/src/runtime/agent/orchestrator/session/store-summary-archived-agent.mjs +34 -15
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +53 -115
- package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +10 -1
- package/src/runtime/agent/orchestrator/session/store-summary-locations.mjs +3 -29
- package/src/runtime/agent/orchestrator/session/store-summary-reader-catalog-fixture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +17 -10
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +9 -20
- package/src/runtime/agent/orchestrator/session/store.mjs +22 -19
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +12 -12
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +38 -14
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +15 -4
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/tool-schema-rejection.mjs +79 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +72 -15
- package/src/runtime/agent/orchestrator/session/turn-failure.mjs +45 -0
- package/src/runtime/agent/orchestrator/stall-policy.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +8 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/command-preflight.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +5 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/inline-hoist.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +218 -20
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +160 -39
- package/src/runtime/agent/orchestrator/tools/builtin/git-partial-stage.mjs +7 -5
- package/src/runtime/agent/orchestrator/tools/builtin/grep-formatting.mjs +14 -5
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-context-expander.mjs +4 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-output.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +48 -44
- package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +10 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +247 -49
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +5 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +6 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +23 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +20 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +101 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/root-resolution.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +67 -0
- package/src/runtime/agent/orchestrator/tools/lib/process-table-fixture.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +303 -63
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +2 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +108 -18
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +77 -11
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +81 -5
- package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +73 -39
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +18 -1
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -4
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +88 -12
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +2 -0
- package/src/runtime/attachments/store.d.mts +9 -0
- package/src/runtime/attachments/store.mjs +80 -9
- package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -1
- package/src/runtime/browser-bridge/browser-action-contract.mjs +0 -2
- package/src/runtime/computer-bridge/action-schema.mjs +219 -196
- package/src/runtime/computer-bridge/linux-readiness.d.mts +0 -2
- package/src/runtime/computer-bridge/linux-readiness.mjs +0 -16
- package/src/runtime/effort-judge/judge-client.mjs +21 -4
- package/src/runtime/effort-judge/judge-worker.mjs +4 -1
- package/src/runtime/github/tool.mjs +208 -17
- package/src/runtime/media/adapters/codex-image.mjs +140 -21
- package/src/runtime/media/catalog.mjs +4 -4
- package/src/runtime/media/chatgpt-usage.mjs +55 -0
- package/src/runtime/media/defaults.mjs +37 -0
- package/src/runtime/media/jobs.mjs +12 -2
- package/src/runtime/media/lanes.mjs +12 -0
- package/src/runtime/media/tool-defs.mjs +15 -4
- package/src/runtime/media/tool.mjs +41 -12
- package/src/runtime/media/upstream-error.mjs +72 -6
- package/src/runtime/memory/index.mjs +1 -0
- package/src/runtime/memory/lib/http-router/ingest-routes.mjs +22 -1
- package/src/runtime/memory/lib/ingest/transcript-offsets.mjs +2 -0
- package/src/runtime/memory/lib/ingest/transcript-rows.mjs +1 -0
- package/src/runtime/memory/lib/pg/adapter.mjs +98 -1
- package/src/runtime/memory/lib/pg/process.mjs +36 -33
- package/src/runtime/memory/lib/pg/run-child.mjs +49 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +112 -4
- package/src/runtime/memory/lib/runtime-fetcher.mjs +12 -13
- package/src/runtime/memory/lib/transcript-ingest.mjs +14 -0
- package/src/runtime/office/README.md +1 -1
- package/src/runtime/office/authoring/docx-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/html-browser.mjs +18 -8
- package/src/runtime/office/authoring/html-document-author.mjs +2 -0
- package/src/runtime/office/authoring/pdf-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/pptx-contact-sheet.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-measure.mjs +3 -1
- package/src/runtime/office/authoring/pptx-html-runner.mjs +2 -0
- package/src/runtime/office/authoring/xlsx-html-runner.mjs +3 -1
- package/src/runtime/office/core/office-actions-read.mjs +3 -0
- package/src/runtime/office/core/office-render-preview.mjs +2 -0
- package/src/runtime/office/core/office-session-dispatch.mjs +7 -0
- package/src/runtime/office/core/office-sessionless-actions.mjs +8 -0
- package/src/runtime/office/core/office-sessions.mjs +5 -0
- package/src/runtime/office/core/office-transactions.mjs +3 -0
- package/src/runtime/office/core/office-write-ledger.mjs +94 -0
- package/src/runtime/office/design/library/templates/mixdog-executive.mixdog-edit.pptx +0 -0
- package/src/runtime/office/index.mjs +29 -0
- package/src/runtime/office/pdf/pdf-analysis.mjs +0 -68
- package/src/runtime/office/pdf/pdf-edit-document.mjs +2 -0
- package/src/runtime/office/pdf/pdf-render.mjs +23 -7
- package/src/runtime/office/pdf/pdf-security.mjs +2 -0
- package/src/runtime/office/portable/portable-opc.mjs +4 -1
- package/src/runtime/office/quality/visual-diff.mjs +2 -0
- package/src/runtime/session-search/session-search-ingest.mjs +1 -1
- package/src/runtime/shared/agent-reap-state.mjs +13 -0
- package/src/runtime/shared/atomic-file.d.mts +1 -1
- package/src/runtime/shared/background-tasks.mjs +6 -1
- package/src/runtime/shared/bounded-file-read.mjs +13 -0
- package/src/runtime/shared/bounded-line-diff.mjs +191 -0
- package/src/runtime/shared/browser-launch.mjs +15 -0
- package/src/runtime/shared/buffered-appender.mjs +18 -0
- package/src/runtime/shared/config.mjs +78 -18
- package/src/runtime/shared/err-text.mjs +48 -4
- package/src/runtime/shared/file-lock.mjs +6 -5
- package/src/runtime/shared/file-permissions.d.mts +6 -1
- package/src/runtime/shared/file-permissions.mjs +54 -6
- package/src/runtime/shared/llm/anthropic-betas.mjs +1 -2
- package/src/runtime/shared/llm/anthropic-effort.mjs +6 -0
- package/src/runtime/shared/llm/provider-model-identities.mjs +1 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +5 -2
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +3 -0
- package/src/runtime/shared/loopback-listener.mjs +9 -0
- package/src/runtime/shared/model-route-chain.d.mts +8 -0
- package/src/runtime/shared/model-route-chain.mjs +48 -0
- package/src/runtime/shared/model-route-fallback.mjs +22 -0
- package/src/runtime/shared/pid-liveness.mjs +12 -0
- package/src/runtime/shared/provider-api-key.mjs +8 -0
- package/src/runtime/shared/provider-timeout-phase.mjs +17 -0
- package/src/runtime/shared/quiet-progress.d.mts +35 -0
- package/src/runtime/shared/quiet-progress.mjs +101 -0
- package/src/runtime/shared/quota-resume-store.mjs +32 -1
- package/src/runtime/shared/read-row-numbers.mjs +44 -0
- package/src/runtime/shared/remote-intent.mjs +2 -42
- package/src/runtime/shared/review-diff.mjs +52 -0
- package/src/runtime/shared/session-sidebar-host.d.mts +4 -0
- package/src/runtime/shared/session-sidebar-host.mjs +38 -0
- package/src/runtime/shared/slow-span.mjs +121 -0
- package/src/runtime/shared/statusline/statusline-segments.mjs +52 -6
- package/src/runtime/shared/tool-card-model/card-header.mjs +7 -1
- package/src/runtime/shared/tool-card-model/generic-detail.mjs +39 -5
- package/src/runtime/shared/tool-card-model.mjs +5 -2
- package/src/runtime/shared/tool-output-budget.mjs +2 -0
- package/src/runtime/shared/tool-output-limit.mjs +4 -0
- package/src/runtime/shared/tool-primitives.mjs +13 -0
- package/src/runtime/shared/tool-result-summary.mjs +22 -1
- package/src/runtime/shared/tool-status.mjs +3 -2
- package/src/runtime/shared/tool-surface.mjs +20 -6
- package/src/runtime/shared/tool-work-units.mjs +54 -11
- package/src/runtime/shared/transcript-metadata.mjs +49 -1
- package/src/runtime/shared/transcript-turn-keys.mjs +33 -0
- package/src/runtime/shared/transcript-writer/purge.mjs +74 -0
- package/src/runtime/shared/transcript-writer/transcript-file.mjs +10 -1
- package/src/runtime/shared/transcript-writer.mjs +24 -6
- package/src/runtime/shared/turn-changes.mjs +269 -100
- package/src/runtime/shared/turn-review-reply.mjs +8 -39
- package/src/runtime/shared/turn-snapshot-store.mjs +19 -108
- package/src/runtime/shared/turn-snapshot.mjs +865 -683
- package/src/runtime/shared/turn-worktree-snapshot.mjs +183 -255
- package/src/runtime/shared/user-data-guard.mjs +262 -49
- package/src/runtime/shared/worktrees/activity-gate.mjs +175 -0
- package/src/runtime/shared/worktrees/branch-management.mjs +179 -0
- package/src/runtime/shared/worktrees/carry.mjs +533 -0
- package/src/runtime/shared/worktrees/contract.mjs +60 -0
- package/src/runtime/shared/worktrees/dependencies.mjs +456 -0
- package/src/runtime/shared/worktrees/file-recovery.mjs +84 -0
- package/src/runtime/shared/worktrees/git-head.mjs +214 -0
- package/src/runtime/shared/worktrees/git.mjs +8 -3
- package/src/runtime/shared/worktrees/include.mjs +125 -7
- package/src/runtime/shared/worktrees/lock.mjs +1 -1
- package/src/runtime/shared/worktrees/maintenance.mjs +20 -2
- package/src/runtime/shared/worktrees/manager.mjs +525 -31
- package/src/runtime/shared/worktrees/merge.mjs +31 -21
- package/src/runtime/shared/worktrees/owner.mjs +2 -1
- package/src/runtime/shared/worktrees/paths.d.mts +6 -0
- package/src/runtime/shared/worktrees/preparation-report.mjs +79 -0
- package/src/runtime/shared/worktrees/setup-commands.mjs +232 -0
- package/src/runtime/shared/worktrees/workspace-visibility.mjs +17 -0
- package/src/runtime/terminal-bridge/client.mjs +57 -20
- package/src/runtime/terminal-bridge/tool-defs.mjs +13 -6
- package/src/runtime/tidy/apply.mjs +47 -2
- package/src/runtime/tidy/run-engines.mjs +11 -5
- package/src/session-runtime/agent-tool-routing.mjs +19 -13
- package/src/session-runtime/boot/apis.mjs +20 -6
- package/src/session-runtime/boot/config.mjs +2 -0
- package/src/session-runtime/boot/facade.mjs +4 -0
- package/src/session-runtime/boot/infrastructure.mjs +6 -1
- package/src/session-runtime/boot/session.mjs +3 -3
- package/src/session-runtime/boot/tools.mjs +7 -1
- package/src/session-runtime/conversation-import/service.mjs +1 -1
- package/src/session-runtime/cwd-plugins/cwd-apply.mjs +12 -5
- package/src/session-runtime/goal-facade-api.mjs +2 -2
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +91 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -1
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +15 -5
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +137 -26
- package/src/session-runtime/internal-tool-executor.mjs +8 -2
- package/src/session-runtime/lifecycle/cold-heir.mjs +187 -0
- package/src/session-runtime/lifecycle/inheritance.mjs +71 -27
- package/src/session-runtime/lifecycle/session-catalog.mjs +25 -18
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +6 -0
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +36 -48
- package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
- package/src/session-runtime/lifecycle/shared.mjs +5 -6
- package/src/session-runtime/lifecycle/teardown/session-close.mjs +6 -5
- package/src/session-runtime/lifecycle/teardown.mjs +70 -14
- package/src/session-runtime/lifecycle-api.mjs +1 -0
- package/src/session-runtime/mcp-glue/connect.mjs +17 -5
- package/src/session-runtime/media-api.mjs +8 -0
- package/src/session-runtime/model-route/route-ownership.mjs +60 -0
- package/src/session-runtime/model-route/route-persist.mjs +3 -2
- package/src/session-runtime/model-route/set-route.mjs +116 -36
- package/src/session-runtime/model-route/web-search-route.mjs +7 -2
- package/src/session-runtime/model-route-api.mjs +4 -2
- package/src/session-runtime/native-web-search/routes.mjs +37 -24
- package/src/session-runtime/native-web-search-usage.mjs +51 -0
- package/src/session-runtime/native-web-search.mjs +19 -9
- package/src/session-runtime/new-session-config.mjs +4 -2
- package/src/session-runtime/provider-auth/login.mjs +4 -0
- package/src/session-runtime/provider-auth/setup.mjs +4 -0
- package/src/session-runtime/provider-models/catalog-load.mjs +9 -0
- package/src/session-runtime/provider-models/web-search-catalog.mjs +23 -3
- package/src/session-runtime/provider-models.mjs +1 -0
- package/src/session-runtime/provider-usage.mjs +4 -0
- package/src/session-runtime/resource-scope-decorate.mjs +10 -3
- package/src/session-runtime/route-resolution.mjs +3 -1
- package/src/session-runtime/runtime-core.mjs +4 -0
- package/src/session-runtime/runtime-facade.mjs +6 -0
- package/src/session-runtime/runtime-review-api.mjs +8 -2
- package/src/session-runtime/services/agent-task-status.mjs +2 -0
- package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +0 -3
- package/src/session-runtime/services/agent-tool/close-flow.mjs +6 -7
- package/src/session-runtime/services/agent-tool/execute-send.mjs +2 -2
- package/src/session-runtime/services/agent-tool/execute-spawn.mjs +36 -3
- package/src/session-runtime/services/agent-tool/execute.mjs +9 -1
- package/src/session-runtime/services/agent-tool/helpers.mjs +30 -7
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +81 -20
- package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +7 -2
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +6 -3
- package/src/session-runtime/services/agent-tool/lead-worker-index/forgotten-leads.mjs +29 -0
- package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +1 -1
- package/src/session-runtime/services/agent-tool/lead-worker-index/lead-rows.mjs +3 -4
- package/src/session-runtime/services/agent-tool/lead-worker-index/reap-timers.mjs +9 -3
- package/src/session-runtime/services/agent-tool/lead-worker-index/row-settlement.mjs +7 -18
- package/src/session-runtime/services/agent-tool/lead-worker-index.mjs +82 -13
- package/src/session-runtime/services/agent-tool/model-select.mjs +82 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +24 -6
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +3 -1
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +19 -5
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +5 -4
- package/src/session-runtime/services/agent-tool/spawn-flow.mjs +2 -1
- package/src/session-runtime/services/agent-tool/spawn-preset.mjs +3 -0
- package/src/session-runtime/services/agent-tool/tag-registry/tag-lookup.mjs +1 -3
- package/src/session-runtime/services/agent-tool/tag-registry/tag-refresh.mjs +1 -3
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +18 -10
- package/src/session-runtime/services/agent-tool/terminal-reaper/scan-admission.mjs +8 -41
- package/src/session-runtime/services/agent-tool/terminal-reaper/stale-rows.mjs +3 -3
- package/src/session-runtime/services/agent-tool/terminal-reaper.mjs +6 -23
- package/src/session-runtime/services/agent-tool/terminal-trace.mjs +0 -1
- package/src/session-runtime/services/agent-tool/tool-def.mjs +7 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +32 -20
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +5 -2
- package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +10 -1
- package/src/session-runtime/services/agent-tool/worker-index.mjs +74 -15
- package/src/session-runtime/services/agent-tool.mjs +7 -0
- package/src/session-runtime/services/agent-watchdog-registry.mjs +2 -0
- package/src/session-runtime/services/channel-admin.mjs +19 -3
- package/src/session-runtime/services/memory-runtime-proxy/calls.mjs +4 -0
- package/src/session-runtime/services/memory-runtime-proxy.mjs +1 -0
- package/src/session-runtime/services/provider-admin.mjs +158 -15
- package/src/session-runtime/session-create/session-options.mjs +7 -5
- package/src/session-runtime/session-create/session-start-hook.mjs +2 -1
- package/src/session-runtime/session-transcript-purge.mjs +32 -0
- package/src/session-runtime/session-transcript.mjs +4 -5
- package/src/session-runtime/session-turn-api.mjs +17 -14
- package/src/session-runtime/settings-builtin-tools-api.mjs +18 -6
- package/src/session-runtime/setup-tool/executor.mjs +57 -9
- package/src/session-runtime/setup-tool/extended-actions.mjs +86 -6
- package/src/session-runtime/setup-tool/settings-contract.mjs +18 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +25 -4
- package/src/session-runtime/skills-api.mjs +3 -5
- package/src/session-runtime/tool-policy-refresh.mjs +83 -32
- package/src/session-runtime/tool-surface.mjs +5 -1
- package/src/session-runtime/turn/agent-ops.mjs +49 -2
- package/src/session-runtime/turn/compaction-gate.mjs +25 -0
- package/src/session-runtime/turn/session-ops.mjs +7 -5
- package/src/session-runtime/turn/side-question-ops.mjs +19 -0
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +7 -1
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +12 -3
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +18 -2
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +26 -45
- package/src/session-runtime/usage-stats-api.mjs +46 -11
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +16 -1
- package/src/session-runtime/workspace/admission-gate.mjs +44 -15
- package/src/session-runtime/workspace/project-branches.mjs +35 -41
- package/src/session-runtime/workspace/transition-steps.mjs +215 -116
- package/src/session-runtime/workspace/transitions.mjs +428 -73
- package/src/standalone/channel-transport.mjs +3 -4
- package/src/standalone/daemon-agent-control.mjs +9 -1
- package/src/standalone/daemon-desktop-runtime.mjs +32 -1
- package/src/standalone/daemon-local-session-bridge.mjs +14 -1
- package/src/standalone/daemon-owner.mjs +17 -4
- package/src/standalone/daemon-pg-stop.mjs +49 -0
- package/src/standalone/daemon-session-control.mjs +88 -0
- package/src/standalone/daemon-stop-budget.d.mts +2 -0
- package/src/standalone/daemon-stop-budget.mjs +18 -0
- package/src/standalone/daemon-stored-session-views.mjs +25 -3
- package/src/standalone/daemon-telemetry.mjs +19 -0
- package/src/standalone/daemon.mjs +63 -1
- package/src/standalone/desktop-service-registry.mjs +5 -0
- package/src/standalone/local-session-runtime.mjs +80 -30
- package/src/standalone/session-client.mjs +42 -0
- package/src/standalone/session-protocol.mjs +14 -0
- package/src/standalone/session-proxy/projection.mjs +41 -4
- package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +15 -1
- package/src/standalone/session-runtime-inline-host.mjs +3 -0
- package/src/standalone/session-service/agent-tree/agent-cancel.mjs +91 -49
- package/src/standalone/session-service/agent-tree/agent-child.mjs +19 -1
- package/src/standalone/session-service/agent-tree/agent-registry.mjs +25 -0
- package/src/standalone/session-service/agent-tree/agent-turns.mjs +9 -1
- package/src/standalone/session-service/agent-tree.mjs +28 -2
- package/src/standalone/session-service/entries/session-loads.mjs +16 -5
- package/src/standalone/session-service/entries.mjs +1 -0
- package/src/standalone/session-service/projection/transcript-window.mjs +39 -0
- package/src/standalone/session-service/quota-resume.mjs +28 -13
- package/src/standalone/session-service/session-calls/session-action.mjs +18 -3
- package/src/standalone/session-service/session-calls/session-turns.mjs +17 -6
- package/src/standalone/session-service/session-calls/session-views.mjs +6 -0
- package/src/standalone/session-service-api.mjs +6 -1
- package/src/standalone/session-state-patch.d.mts +2 -1
- package/src/standalone/session-state-patch.mjs +41 -1
- package/src/standalone/session-tool-output.mjs +82 -0
- package/src/tui/App.jsx +25 -0
- package/src/tui/app/app-view/floating-panel.jsx +26 -1
- package/src/tui/app/app-view.jsx +2 -1
- package/src/tui/app/btw-controller.mjs +118 -0
- package/src/tui/app/create-app-pickers.mjs +2 -0
- package/src/tui/app/provider-setup/provider-items.mjs +8 -0
- package/src/tui/app/provider-setup-picker.mjs +15 -3
- package/src/tui/app/shell-layout/row-budgets.mjs +11 -1
- package/src/tui/app/shell-layout/surfaces.mjs +3 -1
- package/src/tui/app/slash-commands.mjs +19 -3
- package/src/tui/app/slash-dispatch/session-commands.mjs +68 -6
- package/src/tui/app/use-global-key-input/approval-shortcut.mjs +12 -0
- package/src/tui/app/use-global-key-input.mjs +5 -12
- package/src/tui/app/use-prompt-handlers.mjs +11 -0
- package/src/tui/components/BtwPanel.jsx +53 -0
- package/src/tui/components/QuestionPanel.jsx +275 -0
- package/src/tui/components/Spinner.jsx +4 -0
- package/src/tui/components/SpinnerByline.jsx +21 -2
- package/src/tui/components/question-panel-model.mjs +156 -0
- package/src/tui/components/status-line/local-line.mjs +10 -2
- package/src/tui/dist/index.mjs +2897 -1722
- package/src/tui/session/active-tool-summary.mjs +1 -1
- package/src/tui/session/context-state.mjs +4 -5
- package/src/tui/session/goal-continuation/continuation-queue.mjs +2 -3
- package/src/tui/session/goal-continuation/deadline-delivery.mjs +4 -2
- package/src/tui/session/goal-continuation/session-boundary.mjs +21 -0
- package/src/tui/session/quota-resume.mjs +140 -61
- package/src/tui/session/session-api/commands.mjs +14 -10
- package/src/tui/session/session-api/controls.mjs +14 -2
- package/src/tui/session/session-api/integrations.mjs +9 -2
- package/src/tui/session/session-api/lifecycle/dispose.mjs +3 -9
- package/src/tui/session/session-api/lifecycle/resume.mjs +2 -7
- package/src/tui/session/session-api/lifecycle.mjs +14 -11
- package/src/tui/session/session-api/media.mjs +2 -0
- package/src/tui/session/session-api/routes.mjs +81 -57
- package/src/tui/session/session-api/settings.mjs +9 -3
- package/src/tui/session/session-api/worktree.mjs +3 -2
- package/src/tui/session/session-api.mjs +1 -0
- package/src/tui/session/session-flow/auto-clear.mjs +1 -3
- package/src/tui/session/session-flow/drain.mjs +6 -4
- package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -0
- package/src/tui/session/session-flow/queue/take-entries.mjs +2 -1
- package/src/tui/session/session-flow/queue.mjs +1 -1
- package/src/tui/session/tool-approval.mjs +20 -8
- package/src/tui/session/transcript-spill.mjs +14 -7
- package/src/tui/session/transcript-store/streaming-tail.mjs +1 -1
- package/src/tui/session/tui-steering-persist.mjs +3 -5
- package/src/tui/session/turn-quiet.mjs +53 -0
- package/src/tui/session/turn-stream.mjs +179 -32
- package/src/tui/session/turn.mjs +50 -36
- package/src/tui/session/worktree-setup-notice.mjs +38 -0
- package/src/tui/spinner-meta.mjs +10 -0
- package/src/tui/spinner-verbs.mjs +3 -0
- package/src/ui/statusline.mjs +13 -3
- package/src/workflows/default/WORKFLOW.md +3 -1
- package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +0 -1
- package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +0 -346
- package/src/runtime/agent/orchestrator/session/manager/session-owner-liveness.mjs +0 -117
- package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +0 -246
- package/src/session-runtime/services/agent-tool/terminal-reaper/reap-timers.mjs +0 -142
- package/src/session-runtime/turn/share-ops.mjs +0 -77
- package/src/tui/session/cross-surface-share.mjs +0 -406
- package/src/tui/session/live-share/delta.mjs +0 -153
- package/src/tui/session/live-share/mirror.mjs +0 -106
- package/src/tui/session/live-share/owner.mjs +0 -254
- package/src/tui/session/live-share/retry.mjs +0 -54
- package/src/tui/session/live-share/viewer/frame-router.mjs +0 -32
- package/src/tui/session/live-share/viewer/pipe-client.mjs +0 -108
- package/src/tui/session/live-share/viewer/submit-acks.mjs +0 -65
- package/src/tui/session/live-share/viewer/sync-waiters.mjs +0 -53
- package/src/tui/session/live-share/viewer.mjs +0 -99
- package/src/tui/session/live-share/wire.mjs +0 -44
- package/src/tui/session/live-share.mjs +0 -154
- package/src/tui/session/shared-dir-watch.mjs +0 -69
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Versioned tool exposure. deferredProviderMode classifies the provider
|
|
2
|
+
// (native tool search or not); toolExposureMode records how the session's
|
|
3
|
+
// tools reach the model. Non-native providers use the fixed bridge: a small
|
|
4
|
+
// eager core plus the shared load_tool and call_tool, with every other tool
|
|
5
|
+
// only in the session's scoped catalog. Native sessions carry no field.
|
|
6
|
+
import { deferredProviderMode } from './tool-catalog-schema.mjs';
|
|
7
|
+
import { TOOL_SEARCH_TOOL } from './tool-defs.mjs';
|
|
8
|
+
|
|
9
|
+
export const TOOL_EXPOSURE_BRIDGE = 'bridge-v1';
|
|
10
|
+
export const TOOL_EXPOSURE_NATIVE = 'native';
|
|
11
|
+
export const TOOL_SURFACE_MIGRATION_INTENT = 'tool_surface_bridge_migration';
|
|
12
|
+
|
|
13
|
+
const BRIDGE_PROVIDER_MODES = new Set(['canonical', 'manifest']);
|
|
14
|
+
// call_tool, and the retired search_tools an older bridge surface carried.
|
|
15
|
+
const BRIDGE_ONLY_TOOL_NAMES = new Set(['search_tools', 'call_tool']);
|
|
16
|
+
// load_tool definitions earlier bridge surfaces carried: the describe-only
|
|
17
|
+
// bridge loader, and the shared loader with query/cursor inputs.
|
|
18
|
+
const LEGACY_BRIDGE_LOAD_TOOL_DESCRIPTIONS = new Set([
|
|
19
|
+
'Describe tools by exact name: description, input schema and annotations, or the part one JSON Pointer selects. Large definitions arrive in chunks; pass nextCursor back for the rest. Describing never enables a tool.',
|
|
20
|
+
'Load full schemas for missing deferred tool names/aliases; batch needed names in one call. Or find tools by keyword with query. Pass nextCursor back for the next page.',
|
|
21
|
+
]);
|
|
22
|
+
const SHARED_LOAD_TOOL_SCHEMA = JSON.stringify(TOOL_SEARCH_TOOL.inputSchema);
|
|
23
|
+
|
|
24
|
+
/** `route`: the session's pinned wire route (session.wireRoute), when one exists. */
|
|
25
|
+
export function toolExposureModeForProvider(provider, route = null) {
|
|
26
|
+
return BRIDGE_PROVIDER_MODES.has(deferredProviderMode(provider, route)) ? TOOL_EXPOSURE_BRIDGE : TOOL_EXPOSURE_NATIVE;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function isToolBridgeEnabled(session) {
|
|
30
|
+
return session?.toolExposureMode === TOOL_EXPOSURE_BRIDGE;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The exposure a session's persisted surface was built with, or null before
|
|
35
|
+
* it has one. Surfaces persisted before exposure versions: native providers
|
|
36
|
+
* were already native; fixed-surface providers carried the whole catalog.
|
|
37
|
+
*/
|
|
38
|
+
export function sessionToolExposure(session) {
|
|
39
|
+
if (session?.toolExposureMode) return session.toolExposureMode;
|
|
40
|
+
if (!session?.deferredProviderMode) return null;
|
|
41
|
+
return session.deferredProviderMode === 'native' ? TOOL_EXPOSURE_NATIVE : 'legacy-fixed';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* True when an existing surface was built for another exposure than
|
|
46
|
+
* `provider` needs, or is a bridge surface an earlier bridge revision built
|
|
47
|
+
* (bridgeSurfaceOutdated).
|
|
48
|
+
*/
|
|
49
|
+
export function toolExposureMigrationNeeded(session, provider = session?.provider) {
|
|
50
|
+
const current = sessionToolExposure(session);
|
|
51
|
+
if (current === null) return false;
|
|
52
|
+
const target = toolExposureModeForProvider(provider, session?.wireRoute);
|
|
53
|
+
return current !== target || (target === TOOL_EXPOSURE_BRIDGE && bridgeSurfaceOutdated(session));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A bridge session an earlier bridge revision built: its fixed prompt holds
|
|
58
|
+
* other bridge guidance than the current one (the guidance-only block, or
|
|
59
|
+
* guidance naming search_tools or query), or its eager surface still carries
|
|
60
|
+
* search_tools or a load_tool other than the shared one.
|
|
61
|
+
*/
|
|
62
|
+
export function bridgeSurfaceOutdated(session) {
|
|
63
|
+
if (!isToolBridgeEnabled(session)) return false;
|
|
64
|
+
const tools = Array.isArray(session.tools) ? session.tools : [];
|
|
65
|
+
const staleTool = tools.some(
|
|
66
|
+
(tool) =>
|
|
67
|
+
tool?.name === 'search_tools' ||
|
|
68
|
+
(tool?.name === TOOL_SEARCH_TOOL.name &&
|
|
69
|
+
(tool.description !== TOOL_SEARCH_TOOL.description ||
|
|
70
|
+
JSON.stringify(tool.inputSchema) !== SHARED_LOAD_TOOL_SCHEMA))
|
|
71
|
+
);
|
|
72
|
+
if (staleTool) return true;
|
|
73
|
+
return (Array.isArray(session.messages) ? session.messages : []).some(
|
|
74
|
+
(message) =>
|
|
75
|
+
message?.role === 'system' &&
|
|
76
|
+
typeof message.content === 'string' &&
|
|
77
|
+
message.content.includes('<tool-bridge>') &&
|
|
78
|
+
!message.content.includes(TOOL_BRIDGE_GUIDANCE)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** A bridge-only definition (never part of the scoped catalog). */
|
|
83
|
+
export function isBridgeToolDefinition(tool) {
|
|
84
|
+
const name = String(tool?.name || '');
|
|
85
|
+
if (BRIDGE_ONLY_TOOL_NAMES.has(name)) return true;
|
|
86
|
+
return name === TOOL_SEARCH_TOOL.name && LEGACY_BRIDGE_LOAD_TOOL_DESCRIPTIONS.has(tool?.description);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Static and byte-stable; it follows the deferred roster (the same
|
|
90
|
+
// <available-deferred-tools> block native sessions get), never replaces it.
|
|
91
|
+
// A prompt holding any other bridge guidance is migrated once.
|
|
92
|
+
export const TOOL_BRIDGE_GUIDANCE = [
|
|
93
|
+
'<tool-bridge>',
|
|
94
|
+
'Deferred tools (listed above, or announced later as added) are not defined here: run one with call_tool {name, arguments}, and use load_tool first to see its parameters (a keyword instead of a name searches the deferred tools). Call directly defined tools directly.',
|
|
95
|
+
'</tool-bridge>',
|
|
96
|
+
].join('\n');
|
|
@@ -7,6 +7,7 @@ import { normalizeEffortInput } from './effort.mjs';
|
|
|
7
7
|
import { isLikelyRawModelId } from './config-helpers.mjs';
|
|
8
8
|
import { configuredAgentRouteCandidates } from '../../../shared/agent-route-config.mjs';
|
|
9
9
|
import { normalizeContextTokens } from '../../../shared/llm/default-context-window.mjs';
|
|
10
|
+
import { canonicalRouteProvider, normalizeRouteChain } from '../../../shared/model-route-chain.mjs';
|
|
10
11
|
import { normalizeAgentId, normalizeWorkflowId } from './workflow-ids.mjs';
|
|
11
12
|
import { createWorkflowPacks } from './workflow/packs.mjs';
|
|
12
13
|
import { createWorkflowAgents } from './workflow/agents.mjs';
|
|
@@ -38,12 +39,6 @@ const WEB_SEARCH_PROVIDER_FAMILIES = new Map([
|
|
|
38
39
|
]);
|
|
39
40
|
export const WEB_SEARCH_DEFAULT_PROVIDER = 'default';
|
|
40
41
|
export const WEB_SEARCH_DEFAULT_MODEL = 'default';
|
|
41
|
-
const WEB_SEARCH_PROVIDER_ALIASES = Object.freeze({
|
|
42
|
-
'openai-api': 'openai',
|
|
43
|
-
'xai-api': 'xai',
|
|
44
|
-
'gemini-api': 'gemini',
|
|
45
|
-
'anthropic-api': 'anthropic',
|
|
46
|
-
});
|
|
47
42
|
|
|
48
43
|
export function workflowPresetId(slot) {
|
|
49
44
|
return `workflow-${slot}`;
|
|
@@ -121,8 +116,7 @@ export function createWorkflowHelpers({ rootDir, dataDir, readMarkdownDocument,
|
|
|
121
116
|
}
|
|
122
117
|
|
|
123
118
|
export function normalizeWebSearchProviderId(provider) {
|
|
124
|
-
|
|
125
|
-
return WEB_SEARCH_PROVIDER_ALIASES[id] || id;
|
|
119
|
+
return canonicalRouteProvider(provider);
|
|
126
120
|
}
|
|
127
121
|
|
|
128
122
|
export function isDefaultWebSearchRouteConfig(routeLike = {}) {
|
|
@@ -141,6 +135,10 @@ export function isWebSearchCapableProvider(provider) {
|
|
|
141
135
|
}
|
|
142
136
|
|
|
143
137
|
export function normalizeWebSearchRouteConfig(routeLike, fallback = {}) {
|
|
138
|
+
return normalizeRouteChain(routeLike, normalizeWebSearchRouteLeaf, fallback);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function normalizeWebSearchRouteLeaf(routeLike, fallback = {}) {
|
|
144
142
|
const provider = normalizeWebSearchProviderId(routeLike?.provider || fallback.provider);
|
|
145
143
|
const model = clean(routeLike?.model || fallback.model);
|
|
146
144
|
if (!provider || !model) return null;
|
|
@@ -178,6 +176,10 @@ export function webSearchRouteOrDefault(...routeLikes) {
|
|
|
178
176
|
}
|
|
179
177
|
|
|
180
178
|
export function normalizeWorkflowRoute(routeLike, fallback = {}) {
|
|
179
|
+
return normalizeRouteChain(routeLike, normalizeWorkflowRouteLeaf, fallback);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function normalizeWorkflowRouteLeaf(routeLike, fallback = {}) {
|
|
181
183
|
const provider = clean(routeLike?.provider) || clean(fallback.provider);
|
|
182
184
|
const model = clean(routeLike?.model) || clean(fallback.model);
|
|
183
185
|
if (!provider || !model) return null;
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from './loop/tool-helpers.mjs';
|
|
10
10
|
import { repairTranscriptBeforeProviderSend } from './loop/transcript-repair.mjs';
|
|
11
11
|
import { resetAccountProbePacing } from '../providers/account-pool.mjs';
|
|
12
|
-
import { createLoopState, finishLoop
|
|
12
|
+
import { createLoopState, finishLoop } from './loop/loop-state.mjs';
|
|
13
13
|
import { applyRetryAction, beginIteration, sendProviderRequest, settleSendResult } from './loop/send-phase.mjs';
|
|
14
14
|
import { runToolPhase } from './loop/tool-phase.mjs';
|
|
15
15
|
|
|
@@ -25,7 +25,6 @@ export {
|
|
|
25
25
|
resolvePreToolAskApproval,
|
|
26
26
|
approvalGranted,
|
|
27
27
|
approvalReason,
|
|
28
|
-
shouldSuppressAgentMidTurnText,
|
|
29
28
|
};
|
|
30
29
|
|
|
31
30
|
/**
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// The Agents pool's quiet-time inputs: each row whose turn is in flight in
|
|
2
|
+
// this process carries its last counted progress stamp, its runtime stage
|
|
3
|
+
// (and running tool), and its agent's stall-watchdog warn point. Display
|
|
4
|
+
// only — nothing here reads or changes the watchdog's abort policy.
|
|
5
|
+
import { displayProgressStage, lastProgressAt } from '../../../shared/quiet-progress.mjs';
|
|
6
|
+
import { resolveAgentStallThresholds } from '../stall-policy.mjs';
|
|
7
|
+
|
|
8
|
+
/** `rows` with progress fields on every row `runtimeEntry(sessionId)` reports
|
|
9
|
+
* in flight; other rows pass through untouched. */
|
|
10
|
+
export function withTurnProgress(rows, runtimeEntry, isTurnInFlight) {
|
|
11
|
+
return rows.map((row) => {
|
|
12
|
+
const entry = runtimeEntry(row?.sessionId);
|
|
13
|
+
if (!isTurnInFlight(entry)) return row;
|
|
14
|
+
const stage = typeof entry.stage === 'string' ? entry.stage : null;
|
|
15
|
+
return {
|
|
16
|
+
...row,
|
|
17
|
+
progressAt: lastProgressAt(entry) || null,
|
|
18
|
+
// `model_thinking` while the sent request waits for its headers.
|
|
19
|
+
progressStage: displayProgressStage(entry),
|
|
20
|
+
progressTool: stage === 'tool_running' ? entry.lastToolCall || null : null,
|
|
21
|
+
stallWarnMs: resolveAgentStallThresholds(row.agent).warn * 1000,
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
// One freshness authority for eager admission, cross-turn references and
|
|
2
2
|
// serial cache hits. A readOnlyHint alone never proves a result reusable.
|
|
3
3
|
import { tryReadCached } from './read-cache.mjs';
|
|
4
|
+
import { isCursorNativeCallId } from '../../providers/cursor-native-context.mjs';
|
|
4
5
|
import { tryScopedToolCached } from './scoped-cache.mjs';
|
|
5
|
-
import { _isReadTool, _isScopedCacheableTool, _stripMcpPrefix } from '../loop/tool-classify.mjs';
|
|
6
|
+
import { _isReadTool, _isScopedCacheableTool, _stripMcpPrefix, requiresReadBody } from '../loop/tool-classify.mjs';
|
|
6
7
|
|
|
7
|
-
export function lookupToolResultReuse({ sessionId, call, cwd, touch = true }) {
|
|
8
|
+
export function lookupToolResultReuse({ sessionId, call, cwd, touch = true, sessionRef = null }) {
|
|
9
|
+
if (isCursorNativeCallId(call.id)) return null;
|
|
8
10
|
if (!sessionId) return null;
|
|
9
11
|
if (_isReadTool(call.name)) {
|
|
10
12
|
const entry = tryReadCached({ sessionId, args: call.arguments, cwd });
|
|
13
|
+
if (
|
|
14
|
+
requiresReadBody(call.name, sessionRef) &&
|
|
15
|
+
typeof entry?.content === 'string' &&
|
|
16
|
+
/^(?:\[file unchanged:|\[cross-turn-dedup\]|\[intra-turn-dedup\])/.test(entry.content)
|
|
17
|
+
)
|
|
18
|
+
return null;
|
|
11
19
|
return entry === null ? null : { kind: 'read', entry };
|
|
12
20
|
}
|
|
13
21
|
if (_isScopedCacheableTool(call.name)) {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* the ordinary session catalog.
|
|
4
4
|
*
|
|
5
5
|
* Everything runs on one worker thread (./worker.mjs): the catalog engine's
|
|
6
|
-
* change detection (summary index, sessions directory, per-file stamps,
|
|
7
|
-
*
|
|
6
|
+
* change detection (summary index, sessions directory, per-file stamps,
|
|
7
|
+
* background verification) feeds `<dataDir>/session-catalog.sqlite`
|
|
8
8
|
* and an ordinary listing is one request that answers from it. This thread
|
|
9
9
|
* does no filesystem work for it and never loads node:sqlite.
|
|
10
10
|
*
|
|
@@ -24,7 +24,6 @@ import { dataDir as currentDataDir } from '../store-summary-locations.mjs';
|
|
|
24
24
|
export const SESSION_CATALOG_DB_FILE = 'session-catalog.sqlite';
|
|
25
25
|
/** Config: `{ "sessionStore": { "sqliteCatalog": false } }` forces the JSON
|
|
26
26
|
* path (an off-switch); absent or true uses the DB whenever it can. */
|
|
27
|
-
export const SESSION_STORE_CONFIG_SECTION = 'sessionStore';
|
|
28
27
|
export const SESSION_STORE_CONFIG_DEFAULTS = Object.freeze({ sqliteCatalog: true });
|
|
29
28
|
/** Stable prefix of every daemon.log line of the catalog DB. */
|
|
30
29
|
export const SESSION_CATALOG_LOG_PREFIX = '[session-catalog-db]';
|
|
@@ -11,7 +11,7 @@ import { createHash } from 'node:crypto';
|
|
|
11
11
|
|
|
12
12
|
/** Bumped whenever the table layout or a codec changes: the DB is then
|
|
13
13
|
* dropped and backfilled again from the JSON catalog. */
|
|
14
|
-
export const SCHEMA_VERSION =
|
|
14
|
+
export const SCHEMA_VERSION = 6;
|
|
15
15
|
/** PRAGMA application_id ('MXSC'): a file without it is not this catalog. */
|
|
16
16
|
export const APPLICATION_ID = 0x4d585343;
|
|
17
17
|
|
|
@@ -27,8 +27,6 @@ const FIELDS = [
|
|
|
27
27
|
['lastUsedAt', 'last_used_at', 'real'],
|
|
28
28
|
['createdAt', 'created_at', 'real'],
|
|
29
29
|
['lastHeartbeatAt', 'last_heartbeat_at', 'real'],
|
|
30
|
-
// Always 0 in a stored row: liveness is overlaid from `.hb` sidecars at read.
|
|
31
|
-
['heartbeatAt', 'heartbeat_at', 'real'],
|
|
32
30
|
['closed', 'closed', 'bool'],
|
|
33
31
|
['status', 'status', 'text'],
|
|
34
32
|
['owner', 'owner', 'loose'],
|
|
@@ -59,6 +57,8 @@ const FIELDS = [
|
|
|
59
57
|
['importKey', 'import_key', 'loose'],
|
|
60
58
|
// Source session of an inherited (forked) session (schema 4).
|
|
61
59
|
['inheritedFromSessionId', 'inherited_from_session_id', 'loose'],
|
|
60
|
+
// Real human turns (null for a row written before schema 5).
|
|
61
|
+
['realTurnCount', 'real_turn_count', 'loose'],
|
|
62
62
|
];
|
|
63
63
|
|
|
64
64
|
const COLUMN_TYPES = { text: 'TEXT', real: 'REAL', int: 'INTEGER', bool: 'INTEGER', json: 'TEXT', optjson: 'TEXT' };
|
|
@@ -193,16 +193,10 @@ export function rowFromDb(record) {
|
|
|
193
193
|
return row;
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
|
|
197
|
-
const OVERLAY_KEYS = new Set(['heartbeatAt', 'agentHeartbeatAt']);
|
|
198
|
-
|
|
199
|
-
/** Comparable JSON of a row's stored fields (overlays excluded). */
|
|
196
|
+
/** Comparable JSON of a row's stored fields. */
|
|
200
197
|
function comparable(row) {
|
|
201
198
|
const out = [];
|
|
202
|
-
for (const [key] of FIELDS)
|
|
203
|
-
if (OVERLAY_KEYS.has(key)) continue;
|
|
204
|
-
out.push(row[key] === undefined ? null : row[key]);
|
|
205
|
-
}
|
|
199
|
+
for (const [key] of FIELDS) out.push(row[key] === undefined ? null : row[key]);
|
|
206
200
|
return JSON.stringify(out);
|
|
207
201
|
}
|
|
208
202
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
//
|
|
3
3
|
// It owns `<dataDir>/session-catalog.sqlite` and runs the ordinary catalog
|
|
4
4
|
// engine (store-summary-catalog.mjs): the summary index stamps and delta-log
|
|
5
|
-
// apply, the sessions-directory name diff, per-file stamps
|
|
6
|
-
//
|
|
5
|
+
// apply, the sessions-directory name diff, per-file stamps and the background
|
|
6
|
+
// verification. An ordinary listing is one `list` request: the
|
|
7
7
|
// engine's cheap stamp check runs first (so changes by any writer appear as
|
|
8
8
|
// soon as they do on the JSON path), its changes are written to the DB, and
|
|
9
9
|
// the answer comes from the DB. When one of the daemon's own writes changed a
|
|
@@ -20,8 +20,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, statSync } from 'node:
|
|
|
20
20
|
import { dirname, join } from 'node:path';
|
|
21
21
|
import { performance } from 'node:perf_hooks';
|
|
22
22
|
import { postWorkerEvent, serveWorkerRequests } from '../../../../shared/worker-requests.mjs';
|
|
23
|
-
import {
|
|
24
|
-
import { positiveNumber } from '../store-summary-fields.mjs';
|
|
23
|
+
import { createOrdinaryCatalog, isLeadVisibleRow } from '../store-summary-catalog.mjs';
|
|
25
24
|
import { SQLITE_REQUIREMENT, sqliteVersionSupported } from './sqlite-gate.mjs';
|
|
26
25
|
import {
|
|
27
26
|
APPLICATION_ID,
|
|
@@ -514,30 +513,15 @@ function switchedOff(s) {
|
|
|
514
513
|
return s.switchOff.value;
|
|
515
514
|
}
|
|
516
515
|
|
|
517
|
-
/** Rows from the DB
|
|
516
|
+
/** Rows from the DB. */
|
|
518
517
|
function answer(s, page) {
|
|
519
|
-
const heartbeatMtimes = s.engine.current()?.heartbeatMtimes ?? new Map();
|
|
520
|
-
const live = [];
|
|
521
|
-
for (const [id, heartbeatAt] of heartbeatMtimes) {
|
|
522
|
-
const entry = resolve(s, id);
|
|
523
|
-
if (entry) live.push({ ...entry.row, heartbeatAt });
|
|
524
|
-
}
|
|
525
|
-
const agentHeartbeatByOwner = agentHeartbeatsByOwner(live);
|
|
526
|
-
const overlay = (row) => {
|
|
527
|
-
const agentHeartbeatAt = agentHeartbeatByOwner.get(row.id) || 0;
|
|
528
|
-
return {
|
|
529
|
-
...row,
|
|
530
|
-
heartbeatAt: positiveNumber(heartbeatMtimes.get(row.id), 0),
|
|
531
|
-
...(agentHeartbeatAt > 0 ? { agentHeartbeatAt } : {}),
|
|
532
|
-
};
|
|
533
|
-
};
|
|
534
518
|
const { statements } = s;
|
|
535
|
-
if (!page) return { rows: statements.listAll.all().map(
|
|
519
|
+
if (!page) return { rows: statements.listAll.all().map(rowFromDb), more: false };
|
|
536
520
|
const { limit, after } = page;
|
|
537
521
|
const records = after
|
|
538
522
|
? statements.listAfter.all(after.activity, after.activity, after.id, limit + 1)
|
|
539
523
|
: statements.listFirst.all(limit + 1);
|
|
540
|
-
return { rows: records.slice(0, limit).map(
|
|
524
|
+
return { rows: records.slice(0, limit).map(rowFromDb), more: records.length > limit };
|
|
541
525
|
}
|
|
542
526
|
|
|
543
527
|
const unavailable = (reason, final = false) => ({ status: 'unavailable', reason, final });
|
|
@@ -15,8 +15,9 @@ export {
|
|
|
15
15
|
compactionBufferTokensForBoundary,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
import { SUMMARY_PREFIX_ANCHOR } from './summary-anchor.mjs';
|
|
19
|
+
|
|
20
|
+
export { SUMMARY_PREFIX_ANCHOR };
|
|
20
21
|
export const SUMMARY_PREFIX = `${SUMMARY_PREFIX_ANCHOR} Build on the work already done and avoid duplicating it. The summary covers the session; retained requests and execution records follow it. Actual tool outcomes take precedence over plans or older claims in the summary.`;
|
|
21
22
|
export const SUMMARY_OUTPUT_TOKENS = 4_096;
|
|
22
23
|
// Longest a handoff summary call may run: the default, the config fallback,
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
// Message classification, protected-context splitting, and summary-message
|
|
2
2
|
// construction helpers.
|
|
3
|
-
import { SUMMARY_PREFIX
|
|
3
|
+
import { SUMMARY_PREFIX } from './constants.mjs';
|
|
4
4
|
import { sha16, roleCounts } from './text-utils.mjs';
|
|
5
5
|
import { carryMessageId, withoutMessageIdsReplacer } from '../message-ids.mjs';
|
|
6
|
-
import { isImportedMessage } from '../imported-message.mjs';
|
|
7
6
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
contextAckMessage,
|
|
8
|
+
isActualUserInstructionMessage,
|
|
9
|
+
isInjectedSkillBodyMessage,
|
|
10
|
+
isProtectedContextUserMessage,
|
|
11
|
+
isSummaryMessage,
|
|
12
|
+
} from './user-message-kind.mjs';
|
|
11
13
|
|
|
12
14
|
export function compactHeader(oldHistory) {
|
|
13
15
|
// Stable display ids are bookkeeping, not conversation: the header names
|
|
@@ -23,94 +25,15 @@ export function makeSummaryMessage(content) {
|
|
|
23
25
|
return { role: 'user', content, meta: { source: 'compact-summary' } };
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
(String(m?.meta?.source || '') === 'compact-summary' ||
|
|
36
|
-
(typeof m.content === 'string' &&
|
|
37
|
-
m.content.startsWith(SUMMARY_PREFIX_ANCHOR) &&
|
|
38
|
-
/\nmessages=\d+\s+(?:sha256=|compact_type=)/.test(m.content)))
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function isProtectedContextUserMessage(m) {
|
|
43
|
-
if (m?.role !== 'user' || typeof m.content !== 'string' || isImportedMessage(m)) return false;
|
|
44
|
-
let content = m.content.trim();
|
|
45
|
-
if (!content.toLowerCase().startsWith('<system-reminder>')) return false;
|
|
46
|
-
const closingTag = '</system-reminder>';
|
|
47
|
-
// A runtime turn may carry several reminders (Goal, clock, tool delta).
|
|
48
|
-
// Only text outside those envelopes is a human instruction. Keep this
|
|
49
|
-
// compatible with stored turns that predate explicit source metadata.
|
|
50
|
-
while (content.toLowerCase().startsWith('<system-reminder>')) {
|
|
51
|
-
const closingIndex = content.toLowerCase().indexOf(closingTag);
|
|
52
|
-
if (closingIndex < 0) return true;
|
|
53
|
-
content = content.slice(closingIndex + closingTag.length).trim();
|
|
54
|
-
}
|
|
55
|
-
return content === '';
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// An injected Skill-body user message (the general newMessages channel carries
|
|
59
|
-
// the full SKILL.md body as a role:'user' message after the Skill tool_result).
|
|
60
|
-
// Like isSummaryMessage / isProtectedContextUserMessage, it is detected by
|
|
61
|
-
// content prefix (the `<skill>` envelope from buildSkillResultEnvelope) so the
|
|
62
|
-
// check survives even if the synthetic `meta` field is dropped during a tail
|
|
63
|
-
// rebuild. It is NOT the human's latest prompt and must be excluded from
|
|
64
|
-
// "latest human request" selection (deriveCurrentRequest). The `meta:'skill'`
|
|
65
|
-
// marker is also honoured.
|
|
66
|
-
export function isInjectedSkillBodyMessage(m) {
|
|
67
|
-
if (m?.role !== 'user' || isImportedMessage(m)) return false;
|
|
68
|
-
if (m.meta === 'skill') return true;
|
|
69
|
-
return typeof m.content === 'string' && m.content.trimStart().startsWith('<skill>');
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const SYNTHETIC_USER_SOURCES = new Set([
|
|
73
|
-
'goal-continuation',
|
|
74
|
-
'goal-closeout',
|
|
75
|
-
'compact-context',
|
|
76
|
-
'compact-active-turn-continuation',
|
|
77
|
-
'compact-execution-recovery',
|
|
78
|
-
'max-output-recovery',
|
|
79
|
-
'refusal-recovery',
|
|
80
|
-
'stream-cut-recovery',
|
|
81
|
-
]);
|
|
82
|
-
const SYNTHETIC_USER_CONTROL_RE =
|
|
83
|
-
/^(?:\[mixdog-runtime\]|\[request interrupted(?: by user(?: for tool use)?| by process restart)?\])(?:\s|$)/i;
|
|
84
|
-
|
|
85
|
-
function userMessageText(message) {
|
|
86
|
-
if (typeof message?.content === 'string') return message.content;
|
|
87
|
-
if (!Array.isArray(message?.content)) return '';
|
|
88
|
-
return message.content.map((block) => (typeof block === 'string' ? block : block?.text || '')).join('');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export function isActualUserInstructionMessage(message) {
|
|
92
|
-
if (
|
|
93
|
-
message?.role !== 'user' ||
|
|
94
|
-
isSummaryMessage(message) ||
|
|
95
|
-
isProtectedContextUserMessage(message) ||
|
|
96
|
-
isInjectedSkillBodyMessage(message)
|
|
97
|
-
) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
const text = userMessageText(message);
|
|
101
|
-
// Imported prose is the user's own words whatever it looks like.
|
|
102
|
-
if (isImportedMessage(message)) return text.trim().length > 0;
|
|
103
|
-
if (/^Reference files:\s*/i.test(text.trimStart())) return false;
|
|
104
|
-
if (
|
|
105
|
-
SYNTHETIC_USER_CONTROL_RE.test(text.trimStart()) ||
|
|
106
|
-
isInternalRuntimeNotificationText(text) ||
|
|
107
|
-
isModelVisibleToolCompletionWrapper(text) ||
|
|
108
|
-
SYNTHETIC_USER_SOURCES.has(String(message?.meta?.source || ''))
|
|
109
|
-
) {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
return text.trim().length > 0 || (Array.isArray(message.content) && message.content.length > 0);
|
|
113
|
-
}
|
|
28
|
+
// User-message classification lives in the import-light user-message-kind.mjs
|
|
29
|
+
// (the session store counts real turns with it); re-exported for callers.
|
|
30
|
+
export {
|
|
31
|
+
contextAckMessage,
|
|
32
|
+
isActualUserInstructionMessage,
|
|
33
|
+
isInjectedSkillBodyMessage,
|
|
34
|
+
isProtectedContextUserMessage,
|
|
35
|
+
isSummaryMessage,
|
|
36
|
+
};
|
|
114
37
|
|
|
115
38
|
export function latestActualUserInstructionIndex(messages) {
|
|
116
39
|
for (let index = (Array.isArray(messages) ? messages.length : 0) - 1; index >= 0; index -= 1) {
|
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
textByteLength,
|
|
11
11
|
} from './text-utils.mjs';
|
|
12
12
|
import {
|
|
13
|
+
contextAckMessage,
|
|
14
|
+
isProtectedContextAckMessage,
|
|
13
15
|
isSummaryMessage,
|
|
14
16
|
latestActualUserInstructionIndex,
|
|
15
17
|
latestActualUserInstructionMessage,
|
|
@@ -20,7 +22,7 @@ import { buildExecutionTail } from './execution-tail.mjs';
|
|
|
20
22
|
import { latestSkillBodies } from '../../context/skill-state.mjs';
|
|
21
23
|
import { effectiveBudget } from './budget.mjs';
|
|
22
24
|
import { stripRuntimeUserContext, withRuntimeUserContext } from '../runtime-user-context.mjs';
|
|
23
|
-
import { carryMessageId } from '../message-ids.mjs';
|
|
25
|
+
import { carryMessageId, messageIdOf } from '../message-ids.mjs';
|
|
24
26
|
import { normalizeIngestRole, shouldExcludeIngestMessage } from '../../../../memory/lib/session-ingest.mjs';
|
|
25
27
|
import { codexWireSendOpts } from '../manager/session-id.mjs';
|
|
26
28
|
import { rebaseCompactedEffortConfiguration } from '../../providers/effort-configuration.mjs';
|
|
@@ -48,9 +50,11 @@ function splitFreshSource(messages) {
|
|
|
48
50
|
const sanitized = redactToolCallSecretsInMessages(reconcileDedupStubs(sanitizeToolPairs(messages)));
|
|
49
51
|
const { protectedPrefix, conversation } = splitProtectedContext(sanitized);
|
|
50
52
|
let previousSummaryMessage = null;
|
|
53
|
+
let previousAck = null;
|
|
51
54
|
for (let index = conversation.length - 1; index >= 0; index -= 1) {
|
|
52
55
|
if (isSummaryMessage(conversation[index])) {
|
|
53
56
|
previousSummaryMessage = conversation[index];
|
|
57
|
+
if (isProtectedContextAckMessage(conversation[index + 1])) previousAck = conversation[index + 1];
|
|
54
58
|
break;
|
|
55
59
|
}
|
|
56
60
|
}
|
|
@@ -59,6 +63,7 @@ function splitFreshSource(messages) {
|
|
|
59
63
|
protectedPrefix,
|
|
60
64
|
previousSummary: previousSummaryMessage?.content || null,
|
|
61
65
|
previousSummaryMessage,
|
|
66
|
+
previousAck,
|
|
62
67
|
// Budgeting, AI input and rule-only retention use this same projection.
|
|
63
68
|
// Keep current-turn reminders; remove only proven runtime additions from
|
|
64
69
|
// older requests. Unmarked legacy text remains part of the summary budget.
|
|
@@ -505,6 +510,15 @@ function freshSkillBudget(targetBudget, budget, committed) {
|
|
|
505
510
|
return Math.max(0, Math.min(25_000, Math.floor(targetBudget * 0.2), budget - estimateMessagesTokens(committed)));
|
|
506
511
|
}
|
|
507
512
|
|
|
513
|
+
// Every pass rebuilds the ack; it keeps the previous ack's id so the archive
|
|
514
|
+
// does not count an unchanged ack as dropped, unless the tail still holds it.
|
|
515
|
+
function stableAckMessage(previousAck, volatileTail) {
|
|
516
|
+
const ack = contextAckMessage();
|
|
517
|
+
const id = messageIdOf(previousAck);
|
|
518
|
+
if (!id || volatileTail.some((message) => messageIdOf(message) === id)) return ack;
|
|
519
|
+
return carryMessageId(ack, previousAck);
|
|
520
|
+
}
|
|
521
|
+
|
|
508
522
|
// The pieces every fresh context carries: the protected prefix, the handoff
|
|
509
523
|
// summary (or the previous one when no handoff was produced), the stable
|
|
510
524
|
// acknowledgement between them and the volatile tail. `mandatory` is what
|
|
@@ -518,7 +532,7 @@ function freshContextLayout(source, budgetTokens, opts) {
|
|
|
518
532
|
? fitFreshContextSummaryMessage(source.live, handoffText, Number.MAX_SAFE_INTEGER)
|
|
519
533
|
: source.previousSummaryMessage;
|
|
520
534
|
const tail = freshContextTail(source, budgetTokens, !replaceConversation, opts);
|
|
521
|
-
const stableAck = tail.latestUser && summaryMessage ?
|
|
535
|
+
const stableAck = tail.latestUser && summaryMessage ? stableAckMessage(source.previousAck, tail.volatileTail) : null;
|
|
522
536
|
const stableHead = [
|
|
523
537
|
...source.protectedPrefix,
|
|
524
538
|
...(summaryMessage ? [summaryMessage] : []),
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Leaf constant: the anchor sentence every compact summary message opens with.
|
|
2
|
+
// Kept import-free so store-layer code can classify messages without pulling
|
|
3
|
+
// the context-utils graph (which cycles back into the session store).
|
|
4
|
+
export const SUMMARY_PREFIX_ANCHOR =
|
|
5
|
+
'A previous model worked on this task and produced the compacted handoff summary below.';
|