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
|
@@ -35,52 +35,124 @@ function transportPid(transport) {
|
|
|
35
35
|
return (typeof transport?.pid === 'number' ? transport.pid : null) ?? transport?._process?.pid ?? null;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
/** Deadline of one process-table enumeration subprocess. A healthy CIM query
|
|
39
|
+
* takes ~1-3 s but exceeds 8 s under heavy load, and a timed-out strict read
|
|
40
|
+
* leaves the finished command's workspace held, so the deadline only cuts
|
|
41
|
+
* off a query that is genuinely stuck. A query that has not answered by then
|
|
42
|
+
* is killed and its snapshot rejected (strict) or empty (best-effort). A
|
|
43
|
+
* termination watch schedules its next pass only after the previous read
|
|
44
|
+
* settled, so enumerators never pile up whatever this value is. */
|
|
45
|
+
export const ENUMERATION_DEADLINE_MS = 20_000;
|
|
46
|
+
|
|
38
47
|
// Spawn a helper command and resolve its stdout (empty string on any error).
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
// `timeoutMs` > 0: past the deadline the helper is killed (Node reaps it on
|
|
49
|
+
// exit) and the call settles at once instead of waiting for it.
|
|
50
|
+
function run(cmd, args, { strict = false, timeoutMs = 0 } = {}) {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
41
52
|
let out = '';
|
|
42
53
|
let cp;
|
|
54
|
+
let timer = null;
|
|
55
|
+
let settled = false;
|
|
56
|
+
const settle = (finish) => {
|
|
57
|
+
if (settled) return;
|
|
58
|
+
settled = true;
|
|
59
|
+
if (timer) clearTimeout(timer);
|
|
60
|
+
finish();
|
|
61
|
+
};
|
|
43
62
|
try {
|
|
44
63
|
cp = spawn(cmd, args, { windowsHide: true });
|
|
45
|
-
} catch {
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (strict) {
|
|
66
|
+
reject(error);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
46
69
|
resolve('');
|
|
47
70
|
return;
|
|
48
71
|
}
|
|
49
72
|
cp.stdout?.on('data', (d) => {
|
|
50
73
|
out += String(d);
|
|
51
74
|
});
|
|
52
|
-
cp.on('error', () => resolve(out));
|
|
53
|
-
cp.on('close', () =>
|
|
75
|
+
cp.on('error', (error) => settle(() => (strict ? reject(error) : resolve(out))));
|
|
76
|
+
cp.on('close', (code) =>
|
|
77
|
+
settle(() => (strict && code !== 0 ? reject(new Error(`Process enumeration failed (${code}).`)) : resolve(out)))
|
|
78
|
+
);
|
|
79
|
+
if (timeoutMs > 0) {
|
|
80
|
+
timer = setTimeout(() => {
|
|
81
|
+
try {
|
|
82
|
+
cp.kill('SIGKILL');
|
|
83
|
+
} catch {
|
|
84
|
+
/* already gone */
|
|
85
|
+
}
|
|
86
|
+
cp.stdout?.destroy?.();
|
|
87
|
+
cp.stderr?.destroy?.();
|
|
88
|
+
settle(() =>
|
|
89
|
+
strict ? reject(new Error(`Process enumeration timed out after ${timeoutMs} ms.`)) : resolve('')
|
|
90
|
+
);
|
|
91
|
+
}, timeoutMs);
|
|
92
|
+
timer.unref?.();
|
|
93
|
+
}
|
|
54
94
|
});
|
|
55
95
|
}
|
|
56
96
|
|
|
57
97
|
// Snapshot the whole process table once: parent map + a per-pid identity
|
|
58
98
|
// token (Windows CreationDate, POSIX lstart) so a later kill can prove a pid
|
|
59
99
|
// number was not recycled onto a different process before signalling it.
|
|
60
|
-
|
|
100
|
+
// POSIX rows also carry the process group id (Windows has none).
|
|
101
|
+
async function enumerate({ strict = false } = {}) {
|
|
61
102
|
const childrenOf = new Map();
|
|
62
103
|
const tokenOf = new Map();
|
|
63
104
|
const nameOf = new Map();
|
|
105
|
+
const pgidOf = new Map();
|
|
64
106
|
const out = isWin
|
|
65
|
-
? await run(
|
|
66
|
-
'
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
107
|
+
? await run(
|
|
108
|
+
'powershell.exe',
|
|
109
|
+
[
|
|
110
|
+
'-NoProfile',
|
|
111
|
+
'-NonInteractive',
|
|
112
|
+
'-Command',
|
|
113
|
+
`${strict ? "$ErrorActionPreference = 'Stop'; " : ''}Get-CimInstance Win32_Process | ForEach-Object { $created = if ($_.CreationDate) { $_.CreationDate.ToString('o') } else { '' }; "$($_.ProcessId) $($_.ParentProcessId) $($_.Name) $created" }`,
|
|
114
|
+
],
|
|
115
|
+
{ strict, timeoutMs: ENUMERATION_DEADLINE_MS }
|
|
116
|
+
)
|
|
117
|
+
: await run('ps', ['-A', '-o', 'pid=,ppid=,pgid=,comm=,lstart='], {
|
|
118
|
+
strict,
|
|
119
|
+
timeoutMs: ENUMERATION_DEADLINE_MS,
|
|
120
|
+
});
|
|
121
|
+
const row = isWin ? /^(\d+)\s+(\d+)\s+()(\S+)(?:\s+(.+))?$/ : /^(\d+)\s+(\d+)\s+(\d+)\s+(\S+)(?:\s+(.+))?$/;
|
|
72
122
|
for (const line of out.split(/\r?\n/)) {
|
|
73
|
-
const m = line.trim().match(
|
|
123
|
+
const m = line.trim().match(row);
|
|
74
124
|
if (!m) continue;
|
|
75
125
|
const pid = Number(m[1]);
|
|
76
126
|
const ppid = Number(m[2]);
|
|
77
|
-
const token = (m[
|
|
127
|
+
const token = (m[5] || '').trim() || null;
|
|
78
128
|
if (!childrenOf.has(ppid)) childrenOf.set(ppid, []);
|
|
79
129
|
childrenOf.get(ppid).push(pid);
|
|
80
130
|
tokenOf.set(pid, token);
|
|
81
|
-
nameOf.set(pid, m[
|
|
131
|
+
nameOf.set(pid, m[4]);
|
|
132
|
+
if (m[3]) pgidOf.set(pid, Number(m[3]));
|
|
133
|
+
}
|
|
134
|
+
if (strict && !nameOf.has(process.pid)) throw new Error('The process snapshot could not be verified.');
|
|
135
|
+
return { childrenOf, tokenOf, nameOf, pgidOf };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** One strict process-table snapshot: parent links, identity tokens, image
|
|
139
|
+
* names and (POSIX) process groups. Rejects instead of returning a partial
|
|
140
|
+
* table, so callers can tell "nothing found" from "could not look".
|
|
141
|
+
*
|
|
142
|
+
* `shared: true` (pre-kill captures) joins a read already in flight, so many
|
|
143
|
+
* jobs promoted together do not each spawn an enumerator; a capture taken
|
|
144
|
+
* while its root runs is valid whenever that read began. An observation after
|
|
145
|
+
* a kill never shares: a read that began before the kill would report the
|
|
146
|
+
* killed tree alive and defer the confirmation by a whole re-check. */
|
|
147
|
+
let tableInFlight = null;
|
|
148
|
+
export function readProcessTable({ shared = false } = {}) {
|
|
149
|
+
if (!shared) return enumerate({ strict: true });
|
|
150
|
+
if (!tableInFlight) {
|
|
151
|
+
tableInFlight = enumerate({ strict: true }).finally(() => {
|
|
152
|
+
tableInFlight = null;
|
|
153
|
+
});
|
|
82
154
|
}
|
|
83
|
-
return
|
|
155
|
+
return tableInFlight;
|
|
84
156
|
}
|
|
85
157
|
|
|
86
158
|
// Walk every descendant pid of rootPid (excludes rootPid).
|
|
@@ -106,12 +178,18 @@ async function collectDescendants(rootPid) {
|
|
|
106
178
|
return descendantsOf(childrenOf, rootPid);
|
|
107
179
|
}
|
|
108
180
|
|
|
109
|
-
/** Descendant pids WITH their image names
|
|
110
|
-
*
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const { childrenOf, nameOf } =
|
|
114
|
-
|
|
181
|
+
/** Descendant pids WITH their image names and identity tokens (creation
|
|
182
|
+
* time), from one batched process-table read. */
|
|
183
|
+
export async function collectDescendantProcesses(rootPid, { strict = false } = {}) {
|
|
184
|
+
const snapshot = enumerate({ strict });
|
|
185
|
+
const { childrenOf, nameOf, tokenOf } = strict
|
|
186
|
+
? await snapshot
|
|
187
|
+
: await snapshot.catch(() => ({ childrenOf: new Map(), nameOf: new Map(), tokenOf: new Map() }));
|
|
188
|
+
return descendantsOf(childrenOf, rootPid).map((pid) => ({
|
|
189
|
+
pid,
|
|
190
|
+
name: nameOf.get(pid) || '',
|
|
191
|
+
token: tokenOf.get(pid) ?? null,
|
|
192
|
+
}));
|
|
115
193
|
}
|
|
116
194
|
|
|
117
195
|
/** Force-kill whole process trees by pid. Windows batches one taskkill /T /F
|
|
@@ -165,6 +165,8 @@ function boundAccountSend(providerName, row, messages, options) {
|
|
|
165
165
|
};
|
|
166
166
|
}
|
|
167
167
|
if (options.sessionId) {
|
|
168
|
+
// An explicit empty executor (model-proxy host) must stay empty.
|
|
169
|
+
opts.toolExecutionSessionId = options.toolExecutionSessionId ?? options.sessionId;
|
|
168
170
|
opts.sessionId = accountScopedSessionId(providerName, row.id, options.sessionId);
|
|
169
171
|
// The spend still belongs to the visible session (usage-accounting.mjs).
|
|
170
172
|
opts.usageSessionId = options.usageSessionId || options.sessionId;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Custom `fetch` for the Anthropic SDK client (API-key path): gzips
|
|
2
|
+
// /v1/messages bodies on the libuv threadpool, but ONLY when the effective
|
|
3
|
+
// request origin is exactly https://api.anthropic.com. The decision is made on
|
|
4
|
+
// the final request URL, so a custom baseURL, ANTHROPIC_BASE_URL, proxy or
|
|
5
|
+
// gateway never gets a compressed body. Policy shared with the OAuth path.
|
|
6
|
+
import { sendGzipCompressed } from './lib/request-compression.mjs';
|
|
7
|
+
|
|
8
|
+
const OFFICIAL_ORIGIN = 'https://api.anthropic.com';
|
|
9
|
+
|
|
10
|
+
function officialMessagesUrl(input) {
|
|
11
|
+
try {
|
|
12
|
+
const url = new URL(typeof input === 'string' || input instanceof URL ? input : input.url);
|
|
13
|
+
return url.origin === OFFICIAL_ORIGIN && url.pathname === '/v1/messages';
|
|
14
|
+
} catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function bodyBytes(body) {
|
|
20
|
+
if (typeof body === 'string') return Buffer.from(body);
|
|
21
|
+
if (ArrayBuffer.isView(body)) return Buffer.from(body.buffer, body.byteOffset, body.byteLength);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function createAnthropicApiKeyFetch({ baseFetch = (...args) => globalThis.fetch(...args), compress } = {}) {
|
|
26
|
+
return async (input, init) => {
|
|
27
|
+
const raw = init?.method?.toUpperCase() === 'POST' && officialMessagesUrl(input) ? bodyBytes(init.body) : null;
|
|
28
|
+
if (!raw) return baseFetch(input, init);
|
|
29
|
+
return sendGzipCompressed({
|
|
30
|
+
raw,
|
|
31
|
+
headers: init.headers,
|
|
32
|
+
compress,
|
|
33
|
+
send: (body, headers) => baseFetch(input, { ...init, headers, body: body === raw ? init.body : body }),
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -16,10 +16,12 @@ import { fastModeAvailable } from './anthropic-fast-mode.mjs';
|
|
|
16
16
|
import { applyAnthropicEffortToBody, shouldIncludeEffortBeta } from './anthropic-effort.mjs';
|
|
17
17
|
import { isCustomProviderName, resolveCustomReasoning } from './custom-reasoning.mjs';
|
|
18
18
|
import {
|
|
19
|
+
anthropicThinkingActive,
|
|
19
20
|
applyAnthropicCacheMarkers,
|
|
20
21
|
clampAnthropicThinkingBudget as clampThinkingBudgetTokens,
|
|
21
22
|
resolveAnthropicCacheTtls as resolveCacheTtls,
|
|
22
23
|
resolveAnthropicMessageCacheSlots,
|
|
24
|
+
sharedCachePrefixBoundary,
|
|
23
25
|
toAnthropicToolChoice,
|
|
24
26
|
} from './lib/anthropic-request-utils.mjs';
|
|
25
27
|
import {
|
|
@@ -54,17 +56,21 @@ export async function buildAnthropicApiRequest({
|
|
|
54
56
|
opts,
|
|
55
57
|
fastModeLatched,
|
|
56
58
|
modelInfo = null,
|
|
59
|
+
// The Claude id a gateway slug stands for (OpenRouter `anthropic/claude-opus-4.8`
|
|
60
|
+
// → `claude-opus-4.8`): the output cap and the thinking/effort shape are read
|
|
61
|
+
// from it, while the wire still names `useModel`.
|
|
62
|
+
capabilityModel = useModel,
|
|
63
|
+
// A gateway-supplied output limit for the model; wins over the Anthropic catalog.
|
|
64
|
+
modelMaxOutputTokens = opts?.modelMaxOutputTokens ?? null,
|
|
57
65
|
}) {
|
|
58
66
|
// A user-defined provider's reasoning comes from its own model row only:
|
|
59
67
|
// the global by-model-id capability index and the Claude-id ladders are
|
|
60
68
|
// first-party knowledge and must not leak onto (or from) a custom endpoint.
|
|
61
69
|
const isCustom = isCustomProviderName(name);
|
|
62
|
-
const maxTokens = resolveMaxTokens(
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
disableBetaHeaders: config?.disableBetaHeaders,
|
|
67
|
-
});
|
|
70
|
+
const maxTokens = resolveMaxTokens(capabilityModel, { modelMaxOutputTokens });
|
|
71
|
+
const effortOptions = { ...config, ...opts, disableBetaHeaders: config?.disableBetaHeaders };
|
|
72
|
+
const gatewayEffort = typeof config?.messagesEffort === 'function' ? config.messagesEffort(opts) : null;
|
|
73
|
+
const effortProjection = projectEffortConfiguration(messages, name, useModel, effortOptions);
|
|
68
74
|
const ttls = resolveCacheTtls(opts);
|
|
69
75
|
|
|
70
76
|
const systemMsgs = messages.filter((m) => m.role === 'system');
|
|
@@ -73,20 +79,29 @@ export async function buildAnthropicApiRequest({
|
|
|
73
79
|
// (cacheTier:'tier3') at ttls.tier3 — each its own system content block.
|
|
74
80
|
const systemBlocks = buildSystemBlocks(systemMsgs, ttls.system, ttls.tier3);
|
|
75
81
|
|
|
76
|
-
// Message-tail cache budget (4-BP layout + ANTHROPIC_MSG_SLOTS) is
|
|
77
|
-
// shared with anthropic-oauth — see resolveAnthropicMessageCacheSlots.
|
|
78
|
-
const messageCacheSlots = resolveAnthropicMessageCacheSlots(systemBlocks, ttls);
|
|
79
82
|
// Tools are resolved BEFORE the messages: the lowering needs the final
|
|
80
83
|
// tool list to drop tool_reference blocks whose tool no longer ships
|
|
81
84
|
// in this request (otherwise the API rejects the whole turn).
|
|
82
|
-
const requestTools = requestAnthropicTools(tools, chatMsgs, opts);
|
|
85
|
+
const requestTools = requestAnthropicTools(tools, chatMsgs, opts, name);
|
|
86
|
+
// Message-tail cache budget (4-BP layout + ANTHROPIC_MSG_SLOTS) is
|
|
87
|
+
// shared with anthropic-oauth — see resolveAnthropicMessageCacheSlots.
|
|
88
|
+
const messageCacheSlots = resolveAnthropicMessageCacheSlots(systemBlocks, ttls, { tools: requestTools });
|
|
83
89
|
// Build → sanitize (once, inside toAnthropicMessages) → mark. Markers
|
|
84
90
|
// are applied to the FINAL sanitized array by invariant, so block
|
|
85
91
|
// drops / inserts / reorders performed by the sanitizer can never move
|
|
86
92
|
// or delete a marked block. NEVER sanitize again after this.
|
|
93
|
+
const lowerHistory = (history, projection) =>
|
|
94
|
+
lowerAnthropicEffortHistory(
|
|
95
|
+
history.filter((m) => m.role !== 'system'),
|
|
96
|
+
(segment) => toAnthropicMessages(segment, requestTools, name),
|
|
97
|
+
projection
|
|
98
|
+
);
|
|
87
99
|
const anthropicMessages = applyAnthropicCacheMarkers(
|
|
88
|
-
|
|
89
|
-
messageCacheSlots
|
|
100
|
+
lowerHistory(chatMsgs, effortProjection),
|
|
101
|
+
messageCacheSlots,
|
|
102
|
+
sharedCachePrefixBoundary(messages, opts, (prefix) =>
|
|
103
|
+
lowerHistory(prefix, projectEffortConfiguration(prefix, name, useModel, effortOptions))
|
|
104
|
+
)
|
|
90
105
|
);
|
|
91
106
|
|
|
92
107
|
const params = {
|
|
@@ -108,10 +123,9 @@ export async function buildAnthropicApiRequest({
|
|
|
108
123
|
// tool_choice only when tools are actually present (Anthropic rejects
|
|
109
124
|
// tool_choice without tools). 'none' rides the hard-cap final turn to
|
|
110
125
|
// forbid tool USE while keeping the tools prefix stable for cache reuse.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
126
|
+
// The key is reserved here (wire key order) and resolved once thinking is
|
|
127
|
+
// known: forced any/tool is invalid while thinking is enabled.
|
|
128
|
+
if (params.tools) params.tool_choice = undefined;
|
|
115
129
|
const hasDeferredTools = Array.isArray(params.tools) && params.tools.some((tool) => tool?.defer_loading === true);
|
|
116
130
|
// Known tool names for the shared parseSSEStream leaked-tool-call guard
|
|
117
131
|
// (same guard fixes both Anthropic providers). Recovered leaked calls
|
|
@@ -129,16 +143,30 @@ export async function buildAnthropicApiRequest({
|
|
|
129
143
|
});
|
|
130
144
|
if (fields.thinking) params.thinking = fields.thinking;
|
|
131
145
|
if (fields.output_config) params.output_config = { ...(params.output_config || {}), ...fields.output_config };
|
|
132
|
-
} else {
|
|
146
|
+
} else if (gatewayEffort !== 'none') {
|
|
147
|
+
// A gateway's own reasoning control (`messagesEffort`) replaces the turn
|
|
148
|
+
// effort; 'none' sends no thinking at all.
|
|
149
|
+
const turnOpts = effortProjection ? { ...opts, effort: effortProjection.initialEffort } : opts;
|
|
133
150
|
applyAnthropicEffortToBody(params, {
|
|
134
|
-
model:
|
|
135
|
-
opts:
|
|
151
|
+
model: capabilityModel,
|
|
152
|
+
opts: gatewayEffort ? { ...turnOpts, effort: gatewayEffort } : turnOpts,
|
|
136
153
|
maxTokens,
|
|
137
154
|
clampThinkingBudgetTokens,
|
|
138
155
|
logTag: name,
|
|
139
156
|
progressUpdates: config?.disableBetaHeaders !== true,
|
|
140
157
|
});
|
|
141
158
|
}
|
|
159
|
+
if (params.tools) {
|
|
160
|
+
const toolChoice = toAnthropicToolChoice(opts.toolChoice, {
|
|
161
|
+
thinking: anthropicThinkingActive(params),
|
|
162
|
+
disableParallelToolUse: opts.disableParallelToolUse === true,
|
|
163
|
+
// A gateway that cannot honour disable_parallel_tool_use declares so.
|
|
164
|
+
supportsDisableParallelToolUse: config?.supportsDisableParallelToolUse !== false,
|
|
165
|
+
onThinkingConflict: opts.toolChoiceThinkingConflict,
|
|
166
|
+
});
|
|
167
|
+
if (toolChoice) params.tool_choice = toolChoice;
|
|
168
|
+
else delete params.tool_choice;
|
|
169
|
+
}
|
|
142
170
|
// Fast mode → speed: "fast" on models Anthropic marks as speed-capable.
|
|
143
171
|
// Suppressed while the fast capacity pool is cooling down.
|
|
144
172
|
let fastLatched = fastModeLatched;
|
|
@@ -169,7 +197,7 @@ export async function buildAnthropicApiRequest({
|
|
|
169
197
|
fastMode: fastLatched,
|
|
170
198
|
toolSearch: hasDeferredTools,
|
|
171
199
|
// Custom: the beta follows the resolver's output, not the model id.
|
|
172
|
-
effort: isCustom ? Boolean(params.output_config?.effort) : shouldIncludeEffortBeta(
|
|
200
|
+
effort: isCustom ? Boolean(params.output_config?.effort) : shouldIncludeEffortBeta(capabilityModel, opts),
|
|
173
201
|
serverFallback: params.fallbacks === 'default',
|
|
174
202
|
thinkingDisplayUpdates: params.thinking?.display === 'updates',
|
|
175
203
|
}),
|
|
@@ -25,9 +25,11 @@ const STATUS_ERROR_TYPE = new Map([
|
|
|
25
25
|
[401, 'authentication_error'],
|
|
26
26
|
[403, 'permission_error'],
|
|
27
27
|
[404, 'not_found_error'],
|
|
28
|
+
[409, 'conflict_error'],
|
|
28
29
|
[413, REQUEST_TOO_LARGE],
|
|
29
30
|
[429, 'rate_limit_error'],
|
|
30
31
|
[500, 'api_error'],
|
|
32
|
+
[504, 'timeout_error'],
|
|
31
33
|
[529, 'overloaded_error'],
|
|
32
34
|
]);
|
|
33
35
|
|
|
@@ -43,7 +45,7 @@ function lowered(value) {
|
|
|
43
45
|
|
|
44
46
|
/** The lowercased error type named by an Anthropic error body (JSON text or parsed object). */
|
|
45
47
|
export function anthropicErrorTypeFromBody(body) {
|
|
46
|
-
if (body && typeof body === 'object') return lowered(
|
|
48
|
+
if (body && typeof body === 'object') return lowered(body.error?.type || body.type);
|
|
47
49
|
const match = BODY_TYPE_RE.exec(String(body || ''));
|
|
48
50
|
return match ? lowered(match[1]) : '';
|
|
49
51
|
}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Resolution order:
|
|
6
6
|
// 1. MIXDOG_ANTHROPIC_MAX_OUTPUT_TOKENS env override, if set to a positive
|
|
7
|
-
// int, wins
|
|
7
|
+
// int, wins, capped by the known model maximum when there is one.
|
|
8
8
|
// 2. Catalog outputTokens for the model id (trusted over hardcoded
|
|
9
9
|
// heuristics when present — the API reports real per-model limits),
|
|
10
|
-
// clamped to
|
|
10
|
+
// clamped to safetyCap (never raised: a declared limit is a ceiling).
|
|
11
11
|
// 3. The shared model catalog's outputTokens for the model (cached roster /
|
|
12
12
|
// LiteLLM / models.dev), same clamp.
|
|
13
13
|
// 4. The pre-catalog family limits for a model no catalog describes, else
|
|
@@ -62,21 +62,28 @@ function sharedCatalogOutputTokens(model) {
|
|
|
62
62
|
// catalogLookup(model) -> number|null. Providers supply their own strategy
|
|
63
63
|
// for sourcing the catalog array (in-memory mirror + disk fallback for OAuth,
|
|
64
64
|
// plain disk read for the API-key twin — see anthropic.mjs).
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
65
|
+
//
|
|
66
|
+
// `modelMaxOutputTokens` (number|null): a gateway-supplied model limit. When
|
|
67
|
+
// positive it takes precedence over every catalog lookup. A declared model
|
|
68
|
+
// maximum is a ceiling: it is never raised to the floor, and the env override
|
|
69
|
+
// is capped by it.
|
|
70
|
+
export function resolveAnthropicMaxTokens(model, { catalogLookup, modelMaxOutputTokens = null } = {}) {
|
|
71
|
+
const isLimit = (value) => Number.isFinite(value) && value > 0;
|
|
72
|
+
let declared = Number(modelMaxOutputTokens);
|
|
73
|
+
if (!isLimit(declared)) {
|
|
74
|
+
declared = null;
|
|
75
|
+
if (typeof catalogLookup === 'function') {
|
|
76
|
+
try {
|
|
77
|
+
declared = catalogLookup(model);
|
|
78
|
+
} catch {
|
|
79
|
+
declared = null;
|
|
80
|
+
}
|
|
75
81
|
}
|
|
82
|
+
if (!isLimit(declared)) declared = sharedCatalogOutputTokens(model);
|
|
76
83
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return Math.min(fallbackAnthropicMaxTokens(model),
|
|
84
|
+
declared = isLimit(declared) ? Math.floor(declared) : null;
|
|
85
|
+
const envOverride = envAnthropicMaxOutputOverride();
|
|
86
|
+
if (envOverride != null) return declared == null ? envOverride : Math.min(envOverride, declared);
|
|
87
|
+
if (declared != null) return Math.min(declared, DEFAULT_SAFETY_CAP);
|
|
88
|
+
return Math.min(fallbackAnthropicMaxTokens(model), DEFAULT_SAFETY_CAP);
|
|
82
89
|
}
|
|
@@ -28,9 +28,8 @@ export function loadAnthropic() {
|
|
|
28
28
|
|
|
29
29
|
// 4-BP cache policy aligned with anthropic-oauth — system + tier3 +
|
|
30
30
|
// messages-tail. Tool schemas sit before system and are covered by the system
|
|
31
|
-
// breakpoint, so they do not spend a separate cache_control slot. 1h TTL
|
|
32
|
-
//
|
|
33
|
-
// defaultHeaders below.
|
|
31
|
+
// breakpoint, so they do not spend a separate cache_control slot. The 1h TTL
|
|
32
|
+
// is requested with cache_control ttl:"1h"; no beta header is needed.
|
|
34
33
|
|
|
35
34
|
// BP3 (tier3) rides its own `system` role block (the 3rd system block, tagged
|
|
36
35
|
// cacheTier:'tier3'). buildSystemBlocks applies the tier3 1h cache_control to
|
|
@@ -131,8 +130,8 @@ function _catalogOutputTokensFromSharedCache(model) {
|
|
|
131
130
|
}
|
|
132
131
|
}
|
|
133
132
|
|
|
134
|
-
export function resolveMaxTokens(model) {
|
|
135
|
-
return resolveAnthropicMaxTokens(model, { catalogLookup: _catalogOutputTokensFromSharedCache });
|
|
133
|
+
export function resolveMaxTokens(model, { modelMaxOutputTokens = null } = {}) {
|
|
134
|
+
return resolveAnthropicMaxTokens(model, { catalogLookup: _catalogOutputTokensFromSharedCache, modelMaxOutputTokens });
|
|
136
135
|
}
|
|
137
136
|
|
|
138
137
|
// Test-only escape hatch for the provider contract scripts
|
|
@@ -144,11 +143,12 @@ export const _test = {
|
|
|
144
143
|
sanitizeInputSchema: (schema, toolName) => sanitizeAnthropicInputSchema(schema, toolName, 'anthropic'),
|
|
145
144
|
};
|
|
146
145
|
|
|
147
|
-
function deferredAnthropicTools(activeTools, messages, opts) {
|
|
148
|
-
return sharedDeferredAnthropicTools(activeTools, messages, opts,
|
|
146
|
+
function deferredAnthropicTools(activeTools, messages, opts, provider = 'anthropic') {
|
|
147
|
+
return sharedDeferredAnthropicTools(activeTools, messages, opts, provider);
|
|
149
148
|
}
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
// `provider`: the engine's name (a gateway Messages engine runs under its gateway's).
|
|
150
|
+
export function requestAnthropicTools(tools, messages, opts, provider = 'anthropic') {
|
|
151
|
+
return sharedRequestAnthropicTools(tools, messages, opts, provider);
|
|
152
152
|
}
|
|
153
153
|
// Test-only: expose the lowering so the steering-provenance test can assert
|
|
154
154
|
// the API-key provider keeps steering-tagged user turns distinct (mirrors
|
|
@@ -10,7 +10,7 @@ import { createNpmVersionSource, maxSemver } from './npm-cli-version.mjs';
|
|
|
10
10
|
// source release just to advance the user-agent version.
|
|
11
11
|
// Claude Opus 5.5 requires 2.1.280 or newer. The release workflow raises this
|
|
12
12
|
// to the published CLI version (scripts/sync-client-version-floors.mjs).
|
|
13
|
-
export const DEFAULT_CLI_VERSION = '2.1.
|
|
13
|
+
export const DEFAULT_CLI_VERSION = '2.1.302';
|
|
14
14
|
export const CLAUDE_CLI_NPM_PACKAGE = '@anthropic-ai/claude-code';
|
|
15
15
|
|
|
16
16
|
const CACHE_SCHEMA_VERSION = 1;
|
|
@@ -2,55 +2,37 @@
|
|
|
2
2
|
// /v1/messages returns 200 for Content-Encoding: gzip, 400 for zstd). Large turn
|
|
3
3
|
// bodies (system prompt + history, typically 50-100KB+) compress ~5-10x,
|
|
4
4
|
// trimming upload time off every call's header wait. Env kill-switch
|
|
5
|
-
// (MIXDOG_ANTHROPIC_REQ_GZIP=0)
|
|
6
|
-
// 400
|
|
7
|
-
// ~8KB the CPU + header cost outweighs the upload saving.
|
|
8
|
-
import { promisify } from 'node:util';
|
|
9
|
-
import { gzip } from 'node:zlib';
|
|
5
|
+
// (MIXDOG_ANTHROPIC_REQ_GZIP=0); the gzip policy (8KB floor, fail-open,
|
|
6
|
+
// 400/415 plain resend + latch-on-success) lives in lib/request-compression.mjs.
|
|
10
7
|
import { getLlmDispatcher } from '../../../../shared/llm/http-agent.mjs';
|
|
11
8
|
import { claudeCliUserAgent } from '../anthropic-oauth-client-version.mjs';
|
|
12
9
|
import { ANTHROPIC_VERSION } from '../lib/anthropic-models.mjs';
|
|
10
|
+
import { sendGzipCompressed } from '../lib/request-compression.mjs';
|
|
13
11
|
|
|
14
12
|
const API_URL = 'https://api.anthropic.com/v1/messages';
|
|
15
13
|
export { ANTHROPIC_VERSION };
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
signal,
|
|
41
|
-
dispatcher: getLlmDispatcher(),
|
|
42
|
-
});
|
|
43
|
-
let response = await sendAttempt(useGzip);
|
|
44
|
-
if (useGzip && response.status === 400) {
|
|
45
|
-
// Latch OFF process-wide and retry this attempt uncompressed, so a
|
|
46
|
-
// server-side behavior change can never wedge the session.
|
|
47
|
-
gzipLatchedOff = true;
|
|
48
|
-
try {
|
|
49
|
-
await response.arrayBuffer();
|
|
50
|
-
} catch {
|
|
51
|
-
/* drain best-effort */
|
|
52
|
-
}
|
|
53
|
-
response = await sendAttempt(false);
|
|
54
|
-
}
|
|
55
|
-
return response;
|
|
15
|
+
export async function postMessages({ accessToken, requestBody, betaHeaders, signal, compress }) {
|
|
16
|
+
const headers = {
|
|
17
|
+
Authorization: `Bearer ${accessToken}`,
|
|
18
|
+
'anthropic-version': ANTHROPIC_VERSION,
|
|
19
|
+
'anthropic-beta': betaHeaders,
|
|
20
|
+
'anthropic-dangerous-direct-browser-access': 'true',
|
|
21
|
+
'user-agent': claudeCliUserAgent(),
|
|
22
|
+
'x-app': 'cli',
|
|
23
|
+
'Content-Type': 'application/json',
|
|
24
|
+
};
|
|
25
|
+
return sendGzipCompressed({
|
|
26
|
+
raw: Buffer.from(JSON.stringify(requestBody)),
|
|
27
|
+
headers,
|
|
28
|
+
compress,
|
|
29
|
+
send: (body, sendHeaders) =>
|
|
30
|
+
fetch(API_URL, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: sendHeaders,
|
|
33
|
+
body,
|
|
34
|
+
signal,
|
|
35
|
+
dispatcher: getLlmDispatcher(),
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
56
38
|
}
|