mixdog 1.2.1 → 1.2.3
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 +19 -3
- package/scripts/model-catalog-audit.mjs +1 -15
- package/scripts/provider-pingpong-live.mjs +509 -0
- package/src/agents/advisor/AGENT.md +1 -1
- package/src/agents/advisor/agent.json +1 -1
- package/src/agents/reviewer/AGENT.md +3 -3
- package/src/agents/reviewer/agent.json +1 -1
- package/src/defaults/shipped-history.json +6 -0
- 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 +7 -4
- package/src/output-styles/common.md +11 -10
- package/src/repl/slash-commands.mjs +16 -1
- package/src/rules/agent/AGENT.md +5 -5
- package/src/rules/lead/LEAD.md +5 -5
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +29 -4
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +10 -0
- 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/client-config.mjs +36 -7
- package/src/runtime/agent/orchestrator/mcp/client-handshake.mjs +49 -10
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +40 -3
- package/src/runtime/agent/orchestrator/mcp/client.mjs +230 -96
- package/src/runtime/agent/orchestrator/mcp/oauth-callback.mjs +103 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-credentials.mjs +150 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +111 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-probe.mjs +87 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +95 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-request.mjs +122 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-shared.mjs +9 -0
- package/src/runtime/agent/orchestrator/mcp/oauth.mjs +229 -0
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +188 -29
- package/src/runtime/agent/orchestrator/providers/anthropic-api-recovery.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +48 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +94 -31
- package/src/runtime/agent/orchestrator/providers/anthropic-error-contract.mjs +98 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-fast-mode.mjs +39 -18
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens-recovery.mjs +55 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +48 -37
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +10 -7
- package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +18 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +13 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-midstream.mjs +10 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-recovery.mjs +23 -9
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/initial-status.mjs +46 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request.mjs +14 -9
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +102 -45
- package/src/runtime/agent/orchestrator/providers/anthropic-overload-fallback.mjs +69 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-server-fallback.mjs +4 -0
- 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 +10 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +40 -7
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +30 -9
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +88 -21
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +30 -10
- package/src/runtime/agent/orchestrator/providers/antigravity-retry-policy.mjs +106 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +10 -61
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +94 -15
- 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 +75 -10
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-wire-guards.mjs +97 -2
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +103 -23
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-messages.mjs +43 -2
- package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +103 -33
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +32 -6
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +27 -3
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +64 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +70 -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 +80 -18
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +46 -8
- package/src/runtime/agent/orchestrator/providers/gemini-error-contract.mjs +273 -0
- package/src/runtime/agent/orchestrator/providers/gemini-family.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/gemini-history-signatures.mjs +9 -4
- package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +41 -5
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +180 -0
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +369 -112
- package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +140 -35
- package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +70 -24
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +80 -29
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +69 -19
- 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 +246 -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 +388 -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/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 +48 -22
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +119 -18
- package/src/runtime/agent/orchestrator/providers/mimo-oauth-profile.mjs +13 -15
- package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +2 -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 +33 -1
- package/src/runtime/agent/orchestrator/providers/muse-code-oauth.mjs +4 -9
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +123 -61
- 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 +27 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +37 -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 +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-error-contract.mjs +50 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +47 -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 +151 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +64 -23
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +79 -33
- 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 +172 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +144 -15
- package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +193 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +66 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +9 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +109 -26
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +27 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +34 -20
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +23 -4
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +37 -28
- package/src/runtime/agent/orchestrator/providers/openai-error-contract.mjs +274 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +72 -32
- 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 +43 -15
- 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 +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-stamps.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +7 -3
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-watchdogs.mjs +1 -3
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +80 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +37 -4
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +12 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +22 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +12 -1
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +76 -33
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +323 -0
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +44 -16
- package/src/runtime/agent/orchestrator/providers/openai-retry-policy.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +7 -16
- package/src/runtime/agent/orchestrator/providers/openai-ws-handshake.mjs +16 -8
- 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 -35
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +30 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/attempt-context.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/policy.mjs +25 -14
- 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-terminal.mjs +18 -11
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +41 -22
- package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +170 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +75 -70
- package/src/runtime/agent/orchestrator/providers/openrouter.mjs +75 -0
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +720 -0
- package/src/runtime/agent/orchestrator/providers/registry.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/retry-backoff.mjs +46 -7
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +123 -219
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +148 -45
- package/src/runtime/agent/orchestrator/providers/retry-midstream.mjs +81 -16
- 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 +157 -0
- package/src/runtime/agent/orchestrator/providers/wire-route.mjs +512 -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 +183 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +100 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +3 -0
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +21 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +15 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-reminder.mjs +0 -18
- package/src/runtime/agent/orchestrator/runtime-core/model-capabilities.mjs +57 -28
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +19 -16
- package/src/runtime/agent/orchestrator/runtime-core/plugin-mcp.mjs +1 -97
- 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 +14 -3
- 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 +176 -71
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +62 -10
- package/src/runtime/agent/orchestrator/runtime-core/tool-exposure.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +5 -1
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +14 -93
- package/src/runtime/agent/orchestrator/session/compact/summary-anchor.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +120 -0
- 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/eager-dispatch/admission.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +91 -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 -0
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +21 -10
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +132 -0
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +30 -0
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +67 -20
- package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +104 -19
- package/src/runtime/agent/orchestrator/session/loop/tool-call-resolution.mjs +95 -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 +15 -4
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +150 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +7 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +30 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +11 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +34 -12
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +57 -21
- 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 +6 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +5 -10
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +208 -14
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +16 -4
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +25 -3
- package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +19 -2
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +18 -7
- package/src/runtime/agent/orchestrator/session/manager.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +168 -29
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/side-question.mjs +192 -0
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +17 -3
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +58 -2
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +41 -28
- package/src/runtime/agent/orchestrator/session/store/session-observers.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +12 -1
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +22 -10
- package/src/runtime/agent/orchestrator/session/store-summary-archived-agent.mjs +34 -15
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +13 -0
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +13 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/store.mjs +19 -3
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +1 -1
- 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 +77 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +20 -1
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +8 -2
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/command-preflight.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +12 -15
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +14 -10
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +49 -34
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +23 -1
- 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/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/computer-bridge/action-schema.mjs +44 -21
- package/src/runtime/github/tool.mjs +92 -2
- 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/pg/adapter.mjs +98 -1
- package/src/runtime/memory/lib/pg/process.mjs +65 -50
- package/src/runtime/memory/lib/pg/run-child.mjs +49 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +124 -16
- 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 +2 -2
- package/src/runtime/office/authoring/html-document-author.mjs +2 -0
- package/src/runtime/office/authoring/pptx-contact-sheet.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-measure.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-runner.mjs +2 -0
- package/src/runtime/office/authoring/xlsx-html-runner.mjs +2 -0
- 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 +98 -0
- package/src/runtime/office/design/library/templates/mixdog-executive.mixdog-edit.pptx +0 -0
- package/src/runtime/office/index.mjs +30 -0
- 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/office/shared/values.mjs +0 -5
- package/src/runtime/shared/background-tasks.mjs +92 -14
- package/src/runtime/shared/bounded-file-read.mjs +13 -0
- package/src/runtime/shared/bounded-line-diff.mjs +182 -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 +31 -0
- package/src/runtime/shared/error-presentation.mjs +159 -19
- 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 +4 -3
- package/src/runtime/shared/llm/anthropic-effort.mjs +129 -134
- package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +50 -14
- package/src/runtime/shared/llm/model-catalog.mjs +53 -40
- package/src/runtime/shared/llm/openai-daybreak.mjs +4 -16
- package/src/runtime/shared/llm/provider-catalog-registry.mjs +11 -0
- package/src/runtime/shared/llm/provider-model-identities.mjs +13 -4
- 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/llm/usage-rollup.mjs +0 -1
- package/src/runtime/shared/loopback-listener.mjs +9 -0
- package/src/runtime/shared/model-display.mjs +13 -0
- package/src/runtime/shared/provider-api-key.mjs +2 -0
- package/src/runtime/shared/quota-resume-store.mjs +11 -0
- package/src/runtime/shared/review-diff.mjs +52 -0
- package/src/runtime/shared/session-baseline-store.mjs +960 -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 +114 -0
- package/src/runtime/shared/statusline/statusline-format.mjs +4 -4
- package/src/runtime/shared/statusline/statusline-segments.mjs +28 -4
- package/src/runtime/shared/task-notification-envelope.mjs +2 -2
- package/src/runtime/shared/tool-card-model/card-header.mjs +6 -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-limit.mjs +4 -0
- package/src/runtime/shared/tool-primitives.mjs +13 -0
- package/src/runtime/shared/tool-result-summary.mjs +8 -1
- package/src/runtime/shared/tool-surface.mjs +18 -3
- package/src/runtime/shared/tool-work-units.mjs +40 -4
- package/src/runtime/shared/transcript-writer/purge.mjs +74 -0
- package/src/runtime/shared/transcript-writer.mjs +10 -2
- package/src/runtime/shared/turn-changes.mjs +670 -274
- package/src/runtime/shared/turn-review-reply.mjs +8 -39
- package/src/runtime/shared/turn-snapshot-store.mjs +94 -2
- package/src/runtime/shared/turn-snapshot.mjs +986 -690
- package/src/runtime/shared/turn-worktree-snapshot.mjs +279 -262
- package/src/runtime/shared/user-data-guard.mjs +262 -49
- package/src/runtime/shared/worktrees/carry.mjs +531 -0
- package/src/runtime/shared/worktrees/contract.mjs +34 -24
- package/src/runtime/shared/worktrees/file-recovery.mjs +68 -0
- package/src/runtime/shared/worktrees/git-head.mjs +205 -0
- package/src/runtime/shared/worktrees/git.mjs +8 -3
- package/src/runtime/shared/worktrees/maintenance.mjs +1 -1
- package/src/runtime/shared/worktrees/manager.mjs +156 -8
- package/src/runtime/shared/worktrees/merge.mjs +31 -21
- package/src/runtime/shared/worktrees/paths.d.mts +6 -0
- package/src/runtime/shared/worktrees/test-support.mjs +19 -4
- package/src/runtime/terminal-bridge/client.mjs +44 -11
- 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 +19 -5
- package/src/session-runtime/boot/facade.mjs +1 -0
- package/src/session-runtime/boot/infrastructure.mjs +12 -1
- package/src/session-runtime/boot/session.mjs +0 -1
- package/src/session-runtime/boot/tools.mjs +4 -1
- package/src/session-runtime/cwd-plugins/cwd-apply.mjs +12 -5
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +65 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -1
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +11 -4
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +115 -18
- package/src/session-runtime/internal-tool-executor.mjs +6 -2
- package/src/session-runtime/lifecycle/cold-heir.mjs +188 -0
- package/src/session-runtime/lifecycle/inheritance.mjs +71 -27
- package/src/session-runtime/lifecycle/session-catalog.mjs +14 -3
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +6 -0
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +29 -6
- package/src/session-runtime/lifecycle/teardown.mjs +73 -8
- package/src/session-runtime/lifecycle-api.mjs +1 -0
- package/src/session-runtime/mcp-glue/connect.mjs +46 -14
- package/src/session-runtime/mcp-glue/server-catalog.mjs +20 -3
- package/src/session-runtime/mcp-glue.mjs +3 -0
- package/src/session-runtime/mcp-oauth-login.mjs +174 -0
- package/src/session-runtime/model-route/model-switch-target.mjs +34 -0
- package/src/session-runtime/model-route/set-route.mjs +85 -17
- package/src/session-runtime/model-route/web-search-route.mjs +1 -1
- package/src/session-runtime/native-web-search/routes.mjs +22 -3
- package/src/session-runtime/native-web-search-usage.mjs +51 -0
- package/src/session-runtime/native-web-search.mjs +10 -1
- 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-models/model-meta.mjs +12 -3
- package/src/session-runtime/quick-model-rows/web-search-rows.mjs +13 -8
- package/src/session-runtime/quick-web-search-models.mjs +13 -38
- package/src/session-runtime/resource-extension-sync.mjs +4 -0
- package/src/session-runtime/resource-mcp-api.mjs +98 -2
- package/src/session-runtime/resource-scope-decorate.mjs +10 -3
- package/src/session-runtime/runtime-review-api.mjs +21 -2
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +81 -20
- package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +13 -1
- package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +7 -2
- 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.mjs +73 -7
- package/src/session-runtime/services/agent-tool/send-flow.mjs +22 -4
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +2 -0
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +22 -5
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +15 -1
- package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +8 -1
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +2 -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 +46 -7
- package/src/session-runtime/services/agent-tool/worker-rows.mjs +17 -0
- package/src/session-runtime/services/agent-tool.mjs +3 -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 +81 -15
- package/src/session-runtime/session-transcript-purge.mjs +32 -0
- package/src/session-runtime/session-turn-api.mjs +14 -5
- package/src/session-runtime/settings-builtin-tools-api.mjs +9 -0
- package/src/session-runtime/settings-compaction-api.mjs +1 -0
- package/src/session-runtime/setup-tool/executor.mjs +36 -6
- package/src/session-runtime/setup-tool/extended-actions.mjs +86 -6
- package/src/session-runtime/setup-tool/settings-contract.mjs +13 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +13 -4
- package/src/session-runtime/skills-api.mjs +3 -5
- package/src/session-runtime/tool-surface.mjs +5 -1
- 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 +22 -0
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +5 -1
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +8 -3
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +10 -0
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +25 -9
- package/src/session-runtime/usage-stats-api.mjs +43 -11
- package/src/session-runtime/workspace/project-branches.mjs +7 -5
- package/src/session-runtime/workspace/transition-steps.mjs +129 -31
- package/src/session-runtime/workspace/transitions.mjs +190 -15
- package/src/standalone/daemon-agent-control.mjs +9 -1
- package/src/standalone/daemon-drain-policy.mjs +8 -0
- 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 +51 -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 +2 -0
- package/src/standalone/daemon-telemetry.mjs +74 -0
- package/src/standalone/daemon.mjs +64 -8
- package/src/standalone/desktop-service-registry.mjs +5 -0
- package/src/standalone/local-session-runtime.mjs +70 -19
- 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 +1 -0
- package/src/standalone/session-service/agent-tree/agent-cancel.mjs +33 -2
- package/src/standalone/session-service/agent-tree/agent-turns.mjs +26 -10
- package/src/standalone/session-service/agent-tree.mjs +12 -0
- package/src/standalone/session-service/quota-resume.mjs +8 -0
- package/src/standalone/session-service/retention/busy.mjs +15 -1
- package/src/standalone/session-service/session-calls/session-action.mjs +18 -3
- package/src/standalone/session-service-api.mjs +11 -1
- package/src/standalone/session-service.mjs +1 -0
- package/src/standalone/session-state-patch.d.mts +2 -1
- package/src/standalone/session-state-patch.mjs +41 -1
- 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 +1 -0
- package/src/tui/app/btw-controller.mjs +118 -0
- package/src/tui/app/create-app-pickers.mjs +6 -0
- package/src/tui/app/extension-pickers/mcp-login.mjs +107 -0
- package/src/tui/app/extension-pickers/mcp-servers-picker.mjs +2 -1
- package/src/tui/app/extension-pickers.mjs +2 -1
- package/src/tui/app/model-options.mjs +11 -16
- 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 +20 -5
- package/src/tui/app/slash-dispatch/panel-commands.mjs +16 -1
- package/src/tui/app/slash-dispatch/session-commands.mjs +19 -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/StatusLine.jsx +2 -0
- package/src/tui/components/question-panel-model.mjs +156 -0
- package/src/tui/components/status-line/local-line.mjs +5 -2
- package/src/tui/components/status-line/use-statusline-text.mjs +7 -1
- package/src/tui/dist/index.mjs +3221 -1500
- package/src/tui/session/context-state.mjs +4 -2
- package/src/tui/session/quota-resume.mjs +46 -14
- package/src/tui/session/session-api/commands.mjs +43 -24
- package/src/tui/session/session-api/controls.mjs +2 -2
- package/src/tui/session/session-api/extensions.mjs +22 -0
- package/src/tui/session/session-api/integrations.mjs +16 -2
- package/src/tui/session/session-api/lifecycle/dispose.mjs +1 -0
- package/src/tui/session/session-api/lifecycle.mjs +7 -2
- package/src/tui/session/session-api/routes.mjs +71 -7
- package/src/tui/session/session-api/settings.mjs +11 -14
- package/src/tui/session/session-api.mjs +1 -0
- package/src/tui/session/session-flow/drain.mjs +7 -1
- package/src/tui/session/session-flow/failed-turn-rewind.mjs +10 -4
- package/src/tui/session/tool-approval.mjs +10 -7
- package/src/tui/session/transcript-spill.mjs +14 -7
- package/src/tui/session/turn-stream.mjs +174 -31
- package/src/tui/session/turn.mjs +46 -16
- package/src/tui/statusline-ansi-bridge.mjs +1 -1
- package/src/ui/statusline-agents.mjs +15 -4
- package/src/ui/statusline.mjs +7 -3
- package/src/ui/streaming-markdown-heal.mjs +34 -3
- package/src/vendor/statusline/src/gateway/claude-current.mjs +14 -4
- package/src/workflows/default/WORKFLOW.md +3 -1
- package/src/runtime/memory/lib/memory-session-merge.mjs +0 -32
- package/src/runtime/shared/llm/usage-session-history.mjs +0 -266
|
@@ -178,6 +178,9 @@ export async function askSession(sessionId, prompt, context, onToolCall, cwdOver
|
|
|
178
178
|
...claimed,
|
|
179
179
|
...armTurnDurability({ sessionId, ...claimed, pendingEntries: input.pendingEntries }),
|
|
180
180
|
};
|
|
181
|
+
// From here the turn's own unwind (ask-turn-failure) acks or releases
|
|
182
|
+
// its entries; the queue keeps owning only the not-yet-started ones.
|
|
183
|
+
queue.markStarted();
|
|
181
184
|
const turn = await runAskTurn({
|
|
182
185
|
sessionId,
|
|
183
186
|
opened,
|
|
@@ -193,9 +196,12 @@ export async function askSession(sessionId, prompt, context, onToolCall, cwdOver
|
|
|
193
196
|
// that arrived while this turn was in flight runs next, in order, as a
|
|
194
197
|
// follow-up user turn. The mutex is still held, so a send racing this
|
|
195
198
|
// drain either landed before (picked up here) or enqueues for the next
|
|
196
|
-
// loop.
|
|
199
|
+
// loop. Follow-ups an idle ask already drained wait in the queue's
|
|
200
|
+
// tail and run before anything new. When both are empty we return the
|
|
201
|
+
// latest turn's result.
|
|
197
202
|
const drained = turn.drained.length > 0 ? turn.drained : drainPendingMessages(sessionId);
|
|
198
|
-
|
|
203
|
+
queue.pushDrained(drained);
|
|
204
|
+
if (queue.hasQueuedTurns()) {
|
|
199
205
|
// Carry the just-committed in-memory session into the follow-up
|
|
200
206
|
// turn so the queued tail sees the preceding assistant/tool
|
|
201
207
|
// context. loadSession() would return this same live snapshot
|
|
@@ -216,6 +222,9 @@ export async function askSession(sessionId, prompt, context, onToolCall, cwdOver
|
|
|
216
222
|
return result;
|
|
217
223
|
}
|
|
218
224
|
} finally {
|
|
225
|
+
// A failed/cancelled turn ends the ask: the follow-up turns drained
|
|
226
|
+
// behind it never ran, so their entries go back to the pending queue.
|
|
227
|
+
queue.releaseUnstarted();
|
|
219
228
|
// A thrown setup/provider path must never leave a delayed checkpoint
|
|
220
229
|
// writer alive after the turn lock is released.
|
|
221
230
|
// Clear the controller only if it's still ours (closeSession may have
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
resolveAutoEffort,
|
|
16
16
|
} from '../../providers/auto-effort.mjs';
|
|
17
17
|
import { builtinFeatureActive } from '../../runtime-core/builtin-features.mjs';
|
|
18
|
-
import { effortOptionsFor } from '../../runtime-core/effort.mjs';
|
|
18
|
+
import { effortOptionsFor, warnEmptyAutoEffortLadder } from '../../runtime-core/effort.mjs';
|
|
19
19
|
import { effortJudgeSupportsSteps, judgeTurn, recordEffortDecision } from '../../../../effort-judge/judge-client.mjs';
|
|
20
20
|
import { promptContentText } from './prompt-utils.mjs';
|
|
21
21
|
|
|
@@ -98,6 +98,7 @@ export async function resolveTurnAutoEffort({ sessionId, session, provider, inpu
|
|
|
98
98
|
// the judge is not asked (in observe mode too: nothing would be logged).
|
|
99
99
|
if (!autoEffortApplicable({ base, options })) {
|
|
100
100
|
recordEffortDecision({ ...record, skipped: 'default-outside-auto-range' });
|
|
101
|
+
warnEmptyAutoEffortLadder(session.provider, session.model, base);
|
|
101
102
|
return null;
|
|
102
103
|
}
|
|
103
104
|
// The previous user request shows the work a short follow-up continues.
|
|
@@ -120,22 +120,44 @@ function recordAgentRuntimeCall(session, result) {
|
|
|
120
120
|
export async function recordAskUsage({ session, result, askStartedAt, turnSignal }) {
|
|
121
121
|
const prefixHashForLog = recordAgentRuntimeCall(session, result);
|
|
122
122
|
if (!result.usage) return;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
await logSessionLlmUsage({
|
|
124
|
+
session,
|
|
125
|
+
usage: result.usage,
|
|
126
|
+
startedAt: askStartedAt,
|
|
127
|
+
signal: turnSignal,
|
|
128
|
+
prefixHash: prefixHashForLog,
|
|
129
|
+
transportTiming: result.transportTiming || null,
|
|
130
|
+
});
|
|
131
|
+
recordStandaloneStatusTelemetry(session, result, Date.now() - askStartedAt);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** The usage-ledger row of one provider call billed to `session`. `mode`
|
|
135
|
+
* labels a call made outside the turn loop (a /btw side question). */
|
|
136
|
+
export async function logSessionLlmUsage({
|
|
137
|
+
session,
|
|
138
|
+
usage,
|
|
139
|
+
startedAt,
|
|
140
|
+
signal = null,
|
|
141
|
+
prefixHash = null,
|
|
142
|
+
transportTiming = null,
|
|
143
|
+
mode = null,
|
|
144
|
+
}) {
|
|
145
|
+
const inputTokens = usage.inputTokens || 0;
|
|
146
|
+
const outputTokens = usage.outputTokens || 0;
|
|
147
|
+
const cacheReadTokens = usage.cachedTokens || 0;
|
|
148
|
+
const cacheWriteTokens = usage.cacheWriteTokens || 0;
|
|
127
149
|
// Unified total-prompt field. Anthropic = input+cache_read+cache_write
|
|
128
150
|
// (additive); OpenAI OAuth/API/Gemini = input_tokens already includes the
|
|
129
151
|
// cached portion (inclusive), so the fallback must not double-count.
|
|
130
152
|
const { isInclusiveProvider, computeCostUsd } = await runAbortable(
|
|
131
|
-
|
|
153
|
+
signal,
|
|
132
154
|
() => import('../../../../shared/llm/cost.mjs')
|
|
133
155
|
);
|
|
134
156
|
const inclusive = isInclusiveProvider(session.provider);
|
|
135
157
|
let promptTokens = inputTokens + cacheReadTokens + cacheWriteTokens;
|
|
136
|
-
if (typeof
|
|
158
|
+
if (typeof usage.promptTokens === 'number') promptTokens = usage.promptTokens;
|
|
137
159
|
else if (inclusive) promptTokens = Math.max(inputTokens, cacheReadTokens + cacheWriteTokens);
|
|
138
|
-
let costUsd =
|
|
160
|
+
let costUsd = usage.costUsd || 0;
|
|
139
161
|
if (!costUsd) {
|
|
140
162
|
try {
|
|
141
163
|
costUsd = computeCostUsd({
|
|
@@ -145,7 +167,7 @@ export async function recordAskUsage({ session, result, askStartedAt, turnSignal
|
|
|
145
167
|
outputTokens,
|
|
146
168
|
cacheReadTokens,
|
|
147
169
|
cacheWriteTokens,
|
|
148
|
-
cacheWrite1hTokens:
|
|
170
|
+
cacheWrite1hTokens: usage.cacheWrite1hTokens || 0,
|
|
149
171
|
});
|
|
150
172
|
} catch {
|
|
151
173
|
/* best-effort */
|
|
@@ -158,7 +180,8 @@ export async function recordAskUsage({ session, result, askStartedAt, turnSignal
|
|
|
158
180
|
preset: session.presetName || null,
|
|
159
181
|
model: session.model,
|
|
160
182
|
provider: session.provider,
|
|
161
|
-
|
|
183
|
+
...(mode ? { mode } : {}),
|
|
184
|
+
duration: Date.now() - startedAt,
|
|
162
185
|
profileId: session.profileId || null,
|
|
163
186
|
sessionId: session.id,
|
|
164
187
|
inputTokens,
|
|
@@ -166,11 +189,10 @@ export async function recordAskUsage({ session, result, askStartedAt, turnSignal
|
|
|
166
189
|
cacheReadTokens,
|
|
167
190
|
cacheWriteTokens,
|
|
168
191
|
promptTokens,
|
|
169
|
-
prefixHash
|
|
192
|
+
prefixHash,
|
|
170
193
|
costUsd,
|
|
171
|
-
transportTiming
|
|
194
|
+
transportTiming,
|
|
172
195
|
});
|
|
173
|
-
recordStandaloneStatusTelemetry(session, result, Date.now() - askStartedAt);
|
|
174
196
|
}
|
|
175
197
|
|
|
176
198
|
/** Persist opaque providerState for stateful providers. The update bit
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// (runAskAgentLoop). Provider-not-available and trim failures throw here so
|
|
6
6
|
// the caller marks the session errored instead of leaving stage='connecting'.
|
|
7
7
|
import { getProvider } from '../../providers/registry.mjs';
|
|
8
|
+
import { pinSessionWireRoute } from '../../providers/wire-route.mjs';
|
|
8
9
|
import { notifySkillsApplied, prepareExplicitSkills, recordAppliedSkills } from '../explicit-skills.mjs';
|
|
9
10
|
import { prepareTurnEffortConfiguration } from '../../providers/effort-configuration.mjs';
|
|
10
11
|
import { resolveTurnAutoEffort, turnStepAutoEffort } from './ask-turn-auto-effort.mjs';
|
|
@@ -17,6 +18,7 @@ import { applyTurnContextMeta, buildUserTurn, startProviderPrewarm, traceTurnCon
|
|
|
17
18
|
import { rewindUnansweredPrompt } from './failed-turn-rewind.mjs';
|
|
18
19
|
import { buildAgentLoopOptions, trackedToolCallHook } from './ask-turn-loop-options.mjs';
|
|
19
20
|
import { _api_call_with_interrupt } from './ask-call-interrupt.mjs';
|
|
21
|
+
import { backfillFallbackSessionTitle } from './session-fallback-title.mjs';
|
|
20
22
|
|
|
21
23
|
/** Resolves the provider, builds the user turn and pre-commits it; returns
|
|
22
24
|
* what the loop and the commit need from this preparation. */
|
|
@@ -27,16 +29,16 @@ export async function prepareAskTurn({ sessionId, opened, input, cwdOverride, tr
|
|
|
27
29
|
// Register the live session object for synchronous close snapshots.
|
|
28
30
|
runtime.session = session;
|
|
29
31
|
if (!provider) throw new Error(`Provider "${session.provider}" not available`);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
// The session's wire is pinned before its first request (an existing
|
|
33
|
+
// session keeps the wire it started on); read from the history as the turn
|
|
34
|
+
// found it, awaited with the user turn below.
|
|
35
|
+
const wireRoutePending = pinSessionWireRoute(session, provider);
|
|
36
|
+
// The turn-level judgment runs while the rest of the turn is prepared; it
|
|
37
|
+
// reads the session as the turn found it (synchronously, on this call).
|
|
38
|
+
// The first request still carries its decision: it is awaited below,
|
|
39
|
+
// together with the user turn, before the effort configuration is stamped.
|
|
40
|
+
const autoEffortPending = resolveTurnAutoEffort({ sessionId, session, provider, input });
|
|
41
|
+
autoEffortPending.catch(() => {});
|
|
40
42
|
applyTurnContextMeta(session, provider);
|
|
41
43
|
const effectiveCwd = cwdOverride || session.cwd;
|
|
42
44
|
// A failed-turn retry resubmits the prompt the failure left unanswered;
|
|
@@ -46,25 +48,50 @@ export async function prepareAskTurn({ sessionId, opened, input, cwdOverride, tr
|
|
|
46
48
|
if (session.sessionStartMetaInjected !== true && !hasUserConversationMessage(session.messages)) {
|
|
47
49
|
refreshSessionBp3Environment(session, effectiveCwd);
|
|
48
50
|
}
|
|
51
|
+
// The prewarm only opens the transport (effort never shapes the socket), so
|
|
52
|
+
// it starts now instead of after the judgment.
|
|
49
53
|
const startupProviderPrewarm = startProviderPrewarm({
|
|
50
54
|
sessionId,
|
|
51
55
|
session,
|
|
52
56
|
provider,
|
|
53
|
-
turnEffort,
|
|
54
|
-
effortConfiguration,
|
|
57
|
+
turnEffort: session.effort || null,
|
|
58
|
+
effortConfiguration: null,
|
|
55
59
|
codexTurnId,
|
|
56
60
|
startedAtMs: startedAt,
|
|
57
61
|
});
|
|
58
|
-
const userTurn = await
|
|
62
|
+
const [autoEffort, userTurn] = await Promise.all([
|
|
63
|
+
autoEffortPending,
|
|
64
|
+
buildUserTurn({
|
|
65
|
+
session,
|
|
66
|
+
prompt: input.prompt,
|
|
67
|
+
context: input.context,
|
|
68
|
+
explicitPrefetch: input.explicitPrefetch,
|
|
69
|
+
turnSignal,
|
|
70
|
+
transcriptMeta,
|
|
71
|
+
turnPromptSource: input.promptSource,
|
|
72
|
+
effortConfiguration: null,
|
|
73
|
+
}),
|
|
74
|
+
wireRoutePending,
|
|
75
|
+
]);
|
|
76
|
+
const turnEffort = autoEffort?.applied ? autoEffort.effort : session.effort || null;
|
|
77
|
+
const effortConfiguration = prepareTurnEffortConfiguration(
|
|
59
78
|
session,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
79
|
+
provider,
|
|
80
|
+
autoEffort?.applied ? autoEffort.effort : undefined
|
|
81
|
+
);
|
|
82
|
+
// Auto effort also judges every tool-result step of the turn when the
|
|
83
|
+
// installed judge was trained on steps (session/loop/step-auto-effort.mjs).
|
|
84
|
+
const stepAutoEffort = turnStepAutoEffort(autoEffort, effortConfiguration);
|
|
85
|
+
if (effortConfiguration) {
|
|
86
|
+
// Stamp the turn's effort on the user message (same meta order as when it
|
|
87
|
+
// was built with it: before the runtime-context provenance).
|
|
88
|
+
const { runtimeUserContext, ...meta } = userTurn.userTurnMessage.meta || {};
|
|
89
|
+
userTurn.userTurnMessage.meta = {
|
|
90
|
+
...meta,
|
|
91
|
+
effortConfiguration,
|
|
92
|
+
...(runtimeUserContext ? { runtimeUserContext } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
68
95
|
const { historyMessages, outgoing } = userTurn;
|
|
69
96
|
turn.userTurnContent = userTurn.userTurnMessage.content;
|
|
70
97
|
turn.outgoing = outgoing;
|
|
@@ -87,6 +114,14 @@ export async function prepareAskTurn({ sessionId, opened, input, cwdOverride, tr
|
|
|
87
114
|
// user turn is introduced.
|
|
88
115
|
session.messages = filterModelVisibleSessionMessages(outgoing);
|
|
89
116
|
session.liveTurnMessages = outgoing;
|
|
117
|
+
// Name a titleless session from its first human prompt before the first
|
|
118
|
+
// save, so the title outlives any later compaction of the transcript. The
|
|
119
|
+
// earliest human turn already in the history wins; this turn's prompt is the
|
|
120
|
+
// fallback (runtime-injected turns carrying a promptSource never name it).
|
|
121
|
+
backfillFallbackSessionTitle(session, [
|
|
122
|
+
...historyMessages,
|
|
123
|
+
...(input.promptSource ? [] : [{ role: 'user', content: input.prompt }]),
|
|
124
|
+
]);
|
|
90
125
|
session.activeTurnCheckpoint = {
|
|
91
126
|
version: 1,
|
|
92
127
|
turnToken,
|
|
@@ -127,6 +162,7 @@ export async function prepareAskTurn({ sessionId, opened, input, cwdOverride, tr
|
|
|
127
162
|
beforeCount: historyMessages.length + 1,
|
|
128
163
|
deferredToolDelta: userTurn.deferredToolDelta,
|
|
129
164
|
goalReminder: userTurn.goalReminder,
|
|
165
|
+
workspaceNotice: userTurn.workspaceNotice,
|
|
130
166
|
};
|
|
131
167
|
}
|
|
132
168
|
|
|
@@ -18,6 +18,53 @@ const relay = (fn, ...args) => {
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* The callback-free send options that shape a turn's provider request (effort,
|
|
23
|
+
* model parameters, cache routing, continuation state, Codex wire identity and
|
|
24
|
+
* the session's provider cache settings). agentLoop's options spread them, and
|
|
25
|
+
* a /btw request built before any turn has run uses them as they are.
|
|
26
|
+
*/
|
|
27
|
+
export function buildRequestSendOptions({
|
|
28
|
+
sessionId,
|
|
29
|
+
session,
|
|
30
|
+
turnEffort,
|
|
31
|
+
effortConfiguration,
|
|
32
|
+
stepAutoEffort,
|
|
33
|
+
codexTurnId,
|
|
34
|
+
startedAtMs,
|
|
35
|
+
signal,
|
|
36
|
+
}) {
|
|
37
|
+
return {
|
|
38
|
+
effort: turnEffort,
|
|
39
|
+
effortConfiguration,
|
|
40
|
+
// { request, base } when each tool-result step is judged (step-auto-effort.mjs).
|
|
41
|
+
stepAutoEffort: stepAutoEffort || null,
|
|
42
|
+
fast: session.fast === true,
|
|
43
|
+
modelParameters: session.modelParameters || {},
|
|
44
|
+
selectedContextWindow: session.selectedContextWindow || session.contextWindow || null,
|
|
45
|
+
sessionId,
|
|
46
|
+
// Same projection compaction uses, so a session presents one identity on
|
|
47
|
+
// every request it makes.
|
|
48
|
+
...(codexWireSendOpts(session, { turnId: codexTurnId, startedAtMs }) || {}),
|
|
49
|
+
promptCacheKey: session.promptCacheKey || sessionId,
|
|
50
|
+
// Provider-scoped cache key (mixdog-codex, mixdog-claude…). Distinct
|
|
51
|
+
// from sessionId — providers that pool sockets per-session (openai-oauth
|
|
52
|
+
// WS) use sessionId as the pool bucket and providerCacheKey as the
|
|
53
|
+
// server-side prompt-cache shard so parallel callers don't collide on a
|
|
54
|
+
// mid-turn socket while still sharing prefix cache.
|
|
55
|
+
providerCacheKey: session.promptCacheKey || null,
|
|
56
|
+
signal,
|
|
57
|
+
providerState: session.providerState ?? undefined,
|
|
58
|
+
// The wire this session is pinned to (wire-route.mjs).
|
|
59
|
+
wireRoute: session.wireRoute ?? undefined,
|
|
60
|
+
session,
|
|
61
|
+
// Agent Runtime cache settings — merged last so session overrides don't
|
|
62
|
+
// get overridden by defaults. When session has no profile,
|
|
63
|
+
// providerCacheOpts is null and this spread is a no-op.
|
|
64
|
+
...(session.providerCacheOpts || {}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
21
68
|
/**
|
|
22
69
|
* @param {object} input
|
|
23
70
|
* @param {string} input.sessionId
|
|
@@ -49,14 +96,6 @@ export function buildAgentLoopOptions({
|
|
|
49
96
|
// (ask-turn-steering-drain.mjs).
|
|
50
97
|
const drainSteering = createAskSteeringDrain({ sessionId, turn, askOpts });
|
|
51
98
|
return {
|
|
52
|
-
effort: turnEffort,
|
|
53
|
-
effortConfiguration,
|
|
54
|
-
// { request, base } when each tool-result step is judged (step-auto-effort.mjs).
|
|
55
|
-
stepAutoEffort: stepAutoEffort || null,
|
|
56
|
-
fast: session.fast === true,
|
|
57
|
-
modelParameters: session.modelParameters || {},
|
|
58
|
-
selectedContextWindow: session.selectedContextWindow || session.contextWindow || null,
|
|
59
|
-
sessionId,
|
|
60
99
|
onTextDelta: (chunk) => {
|
|
61
100
|
interruption.recordTextDelta(chunk);
|
|
62
101
|
checkpoint.schedule();
|
|
@@ -157,23 +196,16 @@ export function buildAgentLoopOptions({
|
|
|
157
196
|
relay(askOpts?.onSkillsApplied, names, detail);
|
|
158
197
|
},
|
|
159
198
|
notifyFn: optionalFn(askOpts?.notifyFn),
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
signal,
|
|
171
|
-
providerState: session.providerState ?? undefined,
|
|
172
|
-
session,
|
|
173
|
-
// Agent Runtime cache settings — merged last so session overrides don't
|
|
174
|
-
// get overridden by defaults. When session has no profile,
|
|
175
|
-
// providerCacheOpts is null and this spread is a no-op.
|
|
176
|
-
...(session.providerCacheOpts || {}),
|
|
199
|
+
...buildRequestSendOptions({
|
|
200
|
+
sessionId,
|
|
201
|
+
session,
|
|
202
|
+
turnEffort,
|
|
203
|
+
effortConfiguration,
|
|
204
|
+
stepAutoEffort,
|
|
205
|
+
codexTurnId,
|
|
206
|
+
startedAtMs,
|
|
207
|
+
signal,
|
|
208
|
+
}),
|
|
177
209
|
onStageChange: (stage, detail) => {
|
|
178
210
|
updateSessionStage(sessionId, stage);
|
|
179
211
|
relay(askOpts?.onStageChange, stage, detail);
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
prefixUserTurnContent,
|
|
17
17
|
suffixUserTurnReminders,
|
|
18
18
|
buildCurrentTimeBlock,
|
|
19
|
+
snapshotPendingWorkspaceNotice,
|
|
19
20
|
} from './prompt-utils.mjs';
|
|
20
21
|
import { codexWireSendOpts } from './session-id.mjs';
|
|
21
22
|
import { _tryBridgeExplicitPrefetch } from './prefetch-bridge.mjs';
|
|
@@ -173,7 +174,11 @@ export async function buildUserTurn({
|
|
|
173
174
|
// input intake: either can precede the previous turn's pause.
|
|
174
175
|
// This supplies context only; it never resumes the Goal.
|
|
175
176
|
const goalReminder = snapshotPendingGoalReminder(session, { includePaused: true });
|
|
177
|
+
// A mid-conversation working-folder change: the system prompt keeps its
|
|
178
|
+
// old root (cache intact) and the new folder's facts ride this turn.
|
|
179
|
+
const workspaceNotice = snapshotPendingWorkspaceNotice(session);
|
|
176
180
|
const reminderBlock = [
|
|
181
|
+
workspaceNotice?.content || '',
|
|
177
182
|
currentTimeBlock ? `<system-reminder>\n# Current Time\n${currentTimeBlock}\n</system-reminder>` : '',
|
|
178
183
|
deferredToolDelta?.content || '',
|
|
179
184
|
goalReminder?.content || '',
|
|
@@ -200,6 +205,7 @@ export async function buildUserTurn({
|
|
|
200
205
|
historyMessages,
|
|
201
206
|
deferredToolDelta,
|
|
202
207
|
goalReminder,
|
|
208
|
+
workspaceNotice,
|
|
203
209
|
userTurnMessage,
|
|
204
210
|
outgoing: [...historyMessages, userTurnMessage],
|
|
205
211
|
};
|
|
@@ -8,6 +8,7 @@ import { ingestSessionTurn } from '../../../../session-search/session-search-ing
|
|
|
8
8
|
import { persistedAssistantTranscriptMetadata } from '../../../../shared/transcript-metadata.mjs';
|
|
9
9
|
import { acknowledgePendingDeferredToolDelta } from '../../runtime-core/deferred-tool-delta.mjs';
|
|
10
10
|
import { acknowledgePendingGoalReminder } from '../../runtime-core/goal-reminder.mjs';
|
|
11
|
+
import { acknowledgePendingWorkspaceNotice } from './prompt-utils.mjs';
|
|
11
12
|
import {
|
|
12
13
|
finalizePendingMessageDelivery,
|
|
13
14
|
drainPendingMessages,
|
|
@@ -121,6 +122,9 @@ export async function commitAskTurn({ sessionId, opened, prepared, result, rawTr
|
|
|
121
122
|
if (prepared.goalReminder) {
|
|
122
123
|
acknowledgePendingGoalReminder(session, prepared.goalReminder.revision);
|
|
123
124
|
}
|
|
125
|
+
if (prepared.workspaceNotice) {
|
|
126
|
+
acknowledgePendingWorkspaceNotice(session, prepared.workspaceNotice.revision);
|
|
127
|
+
}
|
|
124
128
|
return {
|
|
125
129
|
...result,
|
|
126
130
|
trimmed: messagesDropped > 0,
|
|
@@ -21,7 +21,9 @@ import { uncachedInputTokensForProvider } from './usage-metrics.mjs';
|
|
|
21
21
|
import { pruneOffloadSession } from '../tool-result-offload.mjs';
|
|
22
22
|
import { _getPendingMessagesForSession } from './pending-messages.mjs';
|
|
23
23
|
import { isSessionCompactionBlocked } from './runtime-liveness.mjs';
|
|
24
|
+
import { backfillFallbackSessionTitle } from './session-fallback-title.mjs';
|
|
24
25
|
import { resetReadStateAfterCompaction } from '../read-dedup.mjs';
|
|
26
|
+
import { applyPendingWorkspaceReroot } from './prompt-utils.mjs';
|
|
25
27
|
import {
|
|
26
28
|
compactTargetBudget as compactTargetBudgetForPolicy,
|
|
27
29
|
compactDisplayBeforeTokens,
|
|
@@ -629,7 +631,13 @@ async function commitSessionCompaction(plan, run, compactStartedAt) {
|
|
|
629
631
|
let unchangedReason = null;
|
|
630
632
|
if (!changed) unchangedReason = force ? 'nothing to compact' : 'below threshold';
|
|
631
633
|
const now = Date.now();
|
|
634
|
+
// Older titleless sessions: keep a name before the transcript that carries
|
|
635
|
+
// the first prompt is replaced.
|
|
636
|
+
if (changed) backfillFallbackSessionTitle(session, messages);
|
|
632
637
|
session.messages = transcript;
|
|
638
|
+
// The compacted transcript breaks the cache anyway: a staged working-folder
|
|
639
|
+
// change re-roots the system prompt now and needs no notice any more.
|
|
640
|
+
if (changed) applyPendingWorkspaceReroot(session);
|
|
633
641
|
if (changed) resetReadStateAfterCompaction(resolvedSessionId);
|
|
634
642
|
await pruneCompactedOffloads(session, resolvedSessionId);
|
|
635
643
|
if (changed) session.providerState = undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash, randomBytes } from 'node:crypto';
|
|
2
2
|
import { mergeNormalizedContentEntries } from '../loop/steering.mjs';
|
|
3
3
|
import { isDeliveredCompletion, logDuplicateSkip } from './delivered-completions.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { promptContentText } from './prompt-utils.mjs';
|
|
5
5
|
import { parseTaskNotification, taskNotificationId } from '../../../../shared/task-notification-envelope.mjs';
|
|
6
6
|
|
|
7
7
|
const STALE_USER_INJECTION_TTL_MS = 30 * 60 * 1000;
|
|
@@ -295,15 +295,10 @@ function normalizePersistedEntryBase(entry) {
|
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
export function modelVisiblePendingMessages(messages) {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
(message) =>
|
|
303
|
-
!isInternalRuntimeNotificationText(
|
|
304
|
-
message && typeof message === 'object' && Object.hasOwn(message, 'content') ? message.content : message
|
|
305
|
-
)
|
|
306
|
-
);
|
|
298
|
+
// No content filter: isInternalRuntimeNotificationText is a display-only
|
|
299
|
+
// predicate. Every canonical completion envelope matches it, and a drained
|
|
300
|
+
// entry the model never sees is never claimed/acked/released.
|
|
301
|
+
return (Array.isArray(messages) ? messages : []).map(pendingMessageQueueEntry).filter(Boolean);
|
|
307
302
|
}
|
|
308
303
|
|
|
309
304
|
export function _mergePendingMessageEntries(entries) {
|