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
|
@@ -55,6 +55,7 @@ import { applyAnthropicEffortToBody, shouldIncludeEffortBeta } from './anthropic
|
|
|
55
55
|
import { ANTHROPIC_EFFORT_LEVELS, withEffortRejectionFallback } from './effort-rejection.mjs';
|
|
56
56
|
import { getLlmDispatcher, preconnect } from '../../../shared/llm/http-agent.mjs';
|
|
57
57
|
import {
|
|
58
|
+
anthropicThinkingActive,
|
|
58
59
|
applyAnthropicCacheMarkers,
|
|
59
60
|
clampAnthropicThinkingBudget as clampThinkingBudgetTokens,
|
|
60
61
|
deferredAnthropicTools as sharedDeferredAnthropicTools,
|
|
@@ -62,6 +63,7 @@ import {
|
|
|
62
63
|
resolveAnthropicCacheTtls as resolveCacheTtls,
|
|
63
64
|
resolveAnthropicMessageCacheSlots,
|
|
64
65
|
sanitizeAnthropicInputSchema,
|
|
66
|
+
sharedCachePrefixBoundary,
|
|
65
67
|
toAnthropicMessages,
|
|
66
68
|
toAnthropicToolChoice,
|
|
67
69
|
} from './lib/anthropic-request-utils.mjs';
|
|
@@ -88,8 +90,7 @@ const _oauthRefreshes = new Map();
|
|
|
88
90
|
// Anthropic OAuth contract for first-party OAuth clients: Claude requests
|
|
89
91
|
// are gated on this exact system-prompt prefix (Haiku 5.5 included).
|
|
90
92
|
const CLAUDE_CODE_SYSTEM_PREFIX = "You are Claude Code, Anthropic's official CLI for Claude.";
|
|
91
|
-
const OAUTH_BETA_HEADERS =
|
|
92
|
-
'oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,extended-cache-ttl-2025-04-11';
|
|
93
|
+
const OAUTH_BETA_HEADERS = 'oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27';
|
|
93
94
|
|
|
94
95
|
function logQuiet(line) {
|
|
95
96
|
if (!process.env.MIXDOG_QUIET_PROVIDER_LOG) process.stderr.write(`[anthropic-oauth] ${line}\n`);
|
|
@@ -168,8 +169,8 @@ function buildSystemBlocks(systemMsgs, systemTtl, tier3Ttl) {
|
|
|
168
169
|
// clamped to [MAX_TOKENS_FLOOR, safetyCap].
|
|
169
170
|
// 3. Shared model catalog outputTokens, then the floor, when the live
|
|
170
171
|
// roster has no entry for this model.
|
|
171
|
-
function resolveMaxTokens(model) {
|
|
172
|
-
return resolveAnthropicMaxTokens(model, { catalogLookup: _catalogOutputTokens });
|
|
172
|
+
function resolveMaxTokens(model, { modelMaxOutputTokens = null } = {}) {
|
|
173
|
+
return resolveAnthropicMaxTokens(model, { catalogLookup: _catalogOutputTokens, modelMaxOutputTokens });
|
|
173
174
|
}
|
|
174
175
|
|
|
175
176
|
// --- Message conversion ---
|
|
@@ -191,8 +192,8 @@ function requestAnthropicTools(tools, messages, opts) {
|
|
|
191
192
|
function buildRequestBody(messages, model, tools, sendOpts) {
|
|
192
193
|
const systemMsgs = messages.filter((m) => m.role === 'system');
|
|
193
194
|
const chatMsgs = messages.filter((m) => m.role !== 'system');
|
|
194
|
-
const maxTokens = resolveMaxTokens(model);
|
|
195
195
|
const opts = sendOpts || {};
|
|
196
|
+
const maxTokens = resolveMaxTokens(model, { modelMaxOutputTokens: opts.modelMaxOutputTokens });
|
|
196
197
|
const effortProjection = projectEffortConfiguration(messages, 'anthropic-oauth', model, opts);
|
|
197
198
|
const ttls = resolveCacheTtls(opts);
|
|
198
199
|
// Each system message becomes its own Anthropic content block with its own
|
|
@@ -202,18 +203,27 @@ function buildRequestBody(messages, model, tools, sendOpts) {
|
|
|
202
203
|
|
|
203
204
|
// Message-tail cache budget (4-BP layout + ANTHROPIC_MSG_SLOTS) is shared
|
|
204
205
|
// with anthropic.mjs — see resolveAnthropicMessageCacheSlots.
|
|
205
|
-
const messageCacheSlots = resolveAnthropicMessageCacheSlots(systemBlocks, ttls);
|
|
206
206
|
// Tools are resolved BEFORE the messages: the lowering needs the final
|
|
207
207
|
// tool list to drop tool_reference blocks whose tool no longer ships in
|
|
208
208
|
// this request (otherwise the API rejects the whole turn).
|
|
209
209
|
const requestTools = requestAnthropicTools(tools, chatMsgs, opts);
|
|
210
|
+
const messageCacheSlots = resolveAnthropicMessageCacheSlots(systemBlocks, ttls, { tools: requestTools });
|
|
210
211
|
// Build → sanitize (once, inside toAnthropicMessages) → mark. Markers are
|
|
211
212
|
// applied to the FINAL sanitized array by invariant, so block drops /
|
|
212
213
|
// inserts / reorders performed by the sanitizer can never move or delete a
|
|
213
214
|
// marked block. NEVER sanitize again after this (see send path).
|
|
215
|
+
const lowerHistory = (history, projection) =>
|
|
216
|
+
lowerAnthropicEffortHistory(
|
|
217
|
+
history.filter((m) => m.role !== 'system'),
|
|
218
|
+
(segment) => toAnthropicMessages(segment, requestTools),
|
|
219
|
+
projection
|
|
220
|
+
);
|
|
214
221
|
const anthropicMessages = applyAnthropicCacheMarkers(
|
|
215
|
-
|
|
216
|
-
messageCacheSlots
|
|
222
|
+
lowerHistory(chatMsgs, effortProjection),
|
|
223
|
+
messageCacheSlots,
|
|
224
|
+
sharedCachePrefixBoundary(messages, opts, (prefix) =>
|
|
225
|
+
lowerHistory(prefix, projectEffortConfiguration(prefix, 'anthropic-oauth', model, opts))
|
|
226
|
+
)
|
|
217
227
|
);
|
|
218
228
|
|
|
219
229
|
const body = {
|
|
@@ -238,10 +248,8 @@ function buildRequestBody(messages, model, tools, sendOpts) {
|
|
|
238
248
|
// tool_choice only when tools are actually present (Anthropic rejects
|
|
239
249
|
// tool_choice without tools). 'none' rides the hard-cap final turn to
|
|
240
250
|
// forbid tool USE while keeping the tools prefix stable for cache reuse.
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if (toolChoice) body.tool_choice = toolChoice;
|
|
244
|
-
}
|
|
251
|
+
// Key reserved for wire order; resolved after thinking is applied.
|
|
252
|
+
if (body.tools) body.tool_choice = undefined;
|
|
245
253
|
|
|
246
254
|
applyAnthropicEffortToBody(body, {
|
|
247
255
|
model,
|
|
@@ -252,6 +260,16 @@ function buildRequestBody(messages, model, tools, sendOpts) {
|
|
|
252
260
|
progressUpdates: true,
|
|
253
261
|
});
|
|
254
262
|
|
|
263
|
+
if (body.tools) {
|
|
264
|
+
const toolChoice = toAnthropicToolChoice(opts.toolChoice, {
|
|
265
|
+
thinking: anthropicThinkingActive(body),
|
|
266
|
+
disableParallelToolUse: opts.disableParallelToolUse === true,
|
|
267
|
+
onThinkingConflict: opts.toolChoiceThinkingConflict,
|
|
268
|
+
});
|
|
269
|
+
if (toolChoice) body.tool_choice = toolChoice;
|
|
270
|
+
else delete body.tool_choice;
|
|
271
|
+
}
|
|
272
|
+
|
|
255
273
|
// Skipped while the fast capacity pool is in cooldown (or permanently
|
|
256
274
|
// unavailable) so a drained pool is not re-probed every turn.
|
|
257
275
|
if (opts.fast === true && supportsAnthropicFastMode(model) && fastModeAvailable()) {
|
|
@@ -657,9 +675,7 @@ export class AnthropicOAuthProvider {
|
|
|
657
675
|
response.status === 400 &&
|
|
658
676
|
opts.fast === true &&
|
|
659
677
|
!opts._fastModeRetry &&
|
|
660
|
-
fastModeDowngraded(
|
|
661
|
-
noteFastModeCapacityError({ httpStatus: 400, message: scrubbedText }, { fast: true })
|
|
662
|
-
)
|
|
678
|
+
fastModeDowngraded(noteFastModeCapacityError({ httpStatus: 400, message: scrubbedText }, { fast: true }))
|
|
663
679
|
) {
|
|
664
680
|
process.stderr.write(`[anthropic-oauth] fast mode is not enabled for this account; retrying at standard speed\n`);
|
|
665
681
|
return this.send(messages, useModel, tools, { ...opts, _fastModeRetry: true });
|
|
@@ -36,6 +36,20 @@ export function createTurnBlocks() {
|
|
|
36
36
|
const appendText = (index, chunk) => {
|
|
37
37
|
text.set(index, (text.get(index) || '') + (chunk || ''));
|
|
38
38
|
};
|
|
39
|
+
// Per-index citations of a text block (content_block_start `citations` plus
|
|
40
|
+
// streamed citations_delta), replayed verbatim on the text block they cite.
|
|
41
|
+
const citations = new Map();
|
|
42
|
+
const appendCitation = (index, citation) => {
|
|
43
|
+
if (!citation || typeof citation !== 'object') return;
|
|
44
|
+
if (!text.has(index)) text.set(index, '');
|
|
45
|
+
let copy;
|
|
46
|
+
try {
|
|
47
|
+
copy = structuredClone(citation);
|
|
48
|
+
} catch {
|
|
49
|
+
copy = { ...citation };
|
|
50
|
+
}
|
|
51
|
+
citations.set(index, [...(citations.get(index) || []), copy]);
|
|
52
|
+
};
|
|
39
53
|
// Client tool_use blocks that were actually dispatched, kept for the same
|
|
40
54
|
// ordered replay list (deduped/skipped calls are intentionally absent).
|
|
41
55
|
const clientToolUse = new Map();
|
|
@@ -61,7 +75,11 @@ export function createTurnBlocks() {
|
|
|
61
75
|
...thinking.entries(),
|
|
62
76
|
...[...text.entries()].map(([index, value]) => [
|
|
63
77
|
index,
|
|
64
|
-
{
|
|
78
|
+
{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: typeof value === 'string' ? value : '',
|
|
81
|
+
...(citations.get(index)?.length ? { citations: citations.get(index) } : {}),
|
|
82
|
+
},
|
|
65
83
|
]),
|
|
66
84
|
...completedNativeBlocks(),
|
|
67
85
|
...clientToolUse.entries(),
|
|
@@ -105,6 +123,7 @@ export function createTurnBlocks() {
|
|
|
105
123
|
pendingToolInputs,
|
|
106
124
|
clientToolUse,
|
|
107
125
|
appendText,
|
|
126
|
+
appendCitation,
|
|
108
127
|
toolInputInFlight,
|
|
109
128
|
orderedThinkingBlocks,
|
|
110
129
|
orderedAssistantBlocks,
|
|
@@ -88,14 +88,27 @@ export function createContentBlockDelta({ turn, blocks, state, leak, relayText,
|
|
|
88
88
|
progress('tool');
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
const stampTtft = () => {
|
|
92
|
+
if (state && !state.ttftAt) state.ttftAt = Date.now();
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const onContentBlockDelta = (index, delta) => {
|
|
92
96
|
if (delta?.type) turn.contentBlockTypes.add(delta.type);
|
|
93
97
|
// Time-to-first-token: stamp the first content delta (text / thinking /
|
|
94
98
|
// tool input_json) exactly once so the SSE trace can separate first-byte
|
|
95
99
|
// latency from total stream/generation time.
|
|
96
|
-
|
|
100
|
+
stampTtft();
|
|
97
101
|
if (delta?.type === 'text_delta') onTextDelta(index, delta.text);
|
|
102
|
+
if (delta?.type === 'citations_delta') blocks.appendCitation(index, delta.citation);
|
|
98
103
|
if (delta?.type === 'thinking_delta' || delta?.type === 'signature_delta') onThinkingDelta(index, delta);
|
|
99
104
|
if (delta?.type === 'input_json_delta') onInputJsonDelta(index, delta.partial_json);
|
|
100
105
|
};
|
|
106
|
+
// A text block may open with non-empty `text` on content_block_start: it is
|
|
107
|
+
// model output and takes the same path as a text_delta (live relay, leak
|
|
108
|
+
// guard, returned content, ordered replay copy).
|
|
109
|
+
onContentBlockDelta.seedText = (index, initialText) => {
|
|
110
|
+
stampTtft();
|
|
111
|
+
onTextDelta(index, initialText);
|
|
112
|
+
};
|
|
113
|
+
return onContentBlockDelta;
|
|
101
114
|
}
|
|
@@ -19,7 +19,7 @@ function cloneNativeBlock(block) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export function createContentBlockStart({ turn, blocks, state, progress }) {
|
|
22
|
+
export function createContentBlockStart({ turn, blocks, state, progress, seedText }) {
|
|
23
23
|
const seedThinkingBlock = (index, block) => {
|
|
24
24
|
if (block.type === 'redacted_thinking') {
|
|
25
25
|
// Opaque redacted payload: real reasoning content, exposed as a block.
|
|
@@ -61,9 +61,16 @@ export function createContentBlockStart({ turn, blocks, state, progress }) {
|
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
if (block?.type === 'text') {
|
|
64
|
-
// Seed the ordered text slot
|
|
65
|
-
// `text`
|
|
66
|
-
|
|
64
|
+
// Seed the ordered text slot. An empty block still needs its slot (it
|
|
65
|
+
// separates thinking runs); a non-empty opening `text` is model output
|
|
66
|
+
// and is routed exactly like a text_delta so it reaches the returned and
|
|
67
|
+
// live content once.
|
|
68
|
+
const initialText = typeof block.text === 'string' ? block.text : '';
|
|
69
|
+
if (initialText) seedText(index, initialText);
|
|
70
|
+
else blocks.appendText(index, '');
|
|
71
|
+
if (Array.isArray(block.citations)) {
|
|
72
|
+
for (const citation of block.citations) blocks.appendCitation(index, citation);
|
|
73
|
+
}
|
|
67
74
|
}
|
|
68
75
|
if (NATIVE_SERVER_TOOL_CALL_BLOCK_TYPES.has(block?.type)) {
|
|
69
76
|
// Verbatim seed; `input` is completed from the streamed
|
package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/message-events.mjs
CHANGED
|
@@ -26,6 +26,9 @@ export function createMessageEvents({ turn, blocks, state }) {
|
|
|
26
26
|
if (event.delta && (event.delta.stop_details != null || event.delta.category != null)) {
|
|
27
27
|
turn.stopDetails = stopDetailsFrom(event.delta);
|
|
28
28
|
}
|
|
29
|
+
if (event.delta?.stop_sequence != null) {
|
|
30
|
+
turn.stopSequence = event.delta.stop_sequence;
|
|
31
|
+
}
|
|
29
32
|
if (event.usage) updateTurnUsage(turn.usage, event.usage);
|
|
30
33
|
// A terminal stop_reason while ANY tool input is still streaming ends the
|
|
31
34
|
// turn truncated, immediately: the model declared it stopped sampling, so
|
|
@@ -21,18 +21,25 @@ export function createTurnEvents({
|
|
|
21
21
|
labels,
|
|
22
22
|
}) {
|
|
23
23
|
const { onMessageStart, onMessageDelta, onMessageStop } = createMessageEvents({ turn, blocks, state });
|
|
24
|
+
const onContentBlockDelta = createContentBlockDelta({
|
|
25
|
+
turn,
|
|
26
|
+
blocks,
|
|
27
|
+
state,
|
|
28
|
+
leak,
|
|
29
|
+
relayText,
|
|
30
|
+
progress,
|
|
31
|
+
relayProgressUpdates,
|
|
32
|
+
});
|
|
24
33
|
return {
|
|
25
34
|
onMessageStart,
|
|
26
|
-
onContentBlockStart: createContentBlockStart({
|
|
27
|
-
onContentBlockDelta: createContentBlockDelta({
|
|
35
|
+
onContentBlockStart: createContentBlockStart({
|
|
28
36
|
turn,
|
|
29
37
|
blocks,
|
|
30
38
|
state,
|
|
31
|
-
leak,
|
|
32
|
-
relayText,
|
|
33
39
|
progress,
|
|
34
|
-
|
|
40
|
+
seedText: onContentBlockDelta.seedText,
|
|
35
41
|
}),
|
|
42
|
+
onContentBlockDelta,
|
|
36
43
|
onContentBlockStop: createContentBlockStop({ turn, blocks, state, leak, progress, onToolCall, labels }),
|
|
37
44
|
onMessageDelta,
|
|
38
45
|
onMessageStop,
|
|
@@ -138,6 +138,7 @@ export function createTurnOutcome({ turn, blocks, state, labels = OAUTH_STREAM_L
|
|
|
138
138
|
usage: turn.usage,
|
|
139
139
|
stopReason: turn.stopReason,
|
|
140
140
|
stopDetails: turn.stopDetails,
|
|
141
|
+
...(turn.stopSequence != null ? { stopSequence: turn.stopSequence } : {}),
|
|
141
142
|
hasThinkingContent: turn.hasThinkingContent,
|
|
142
143
|
contentBlockTypes: Array.from(turn.contentBlockTypes),
|
|
143
144
|
// Ordered extended-thinking blocks (verbatim thinking text + signature)
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* module of the turn reads and writes this one object; nothing about the
|
|
6
6
|
* turn's progress is hidden in a closure.
|
|
7
7
|
*/
|
|
8
|
+
import { reportedCostUsd } from '../lib/usage-primitives.mjs';
|
|
9
|
+
import { normalizeServerToolUse } from '../lib/anthropic-server-tool-usage.mjs';
|
|
8
10
|
|
|
9
11
|
export function createAnthropicTurnState() {
|
|
10
12
|
return {
|
|
@@ -16,6 +18,9 @@ export function createAnthropicTurnState() {
|
|
|
16
18
|
usage: { inputTokens: 0, outputTokens: 0, cachedTokens: 0, cacheWriteTokens: 0, raw: null },
|
|
17
19
|
stopReason: null,
|
|
18
20
|
stopDetails: undefined,
|
|
21
|
+
// The custom stop sequence that ended the turn (message_delta
|
|
22
|
+
// delta.stop_sequence); stays undefined unless the API reports one.
|
|
23
|
+
stopSequence: undefined,
|
|
19
24
|
fallbackEvents: [],
|
|
20
25
|
// Set when a terminal frame (message_delta stop_reason / message_stop)
|
|
21
26
|
// arrived while tool input was still in flight — used only to word the
|
|
@@ -35,6 +40,15 @@ export function updateTurnUsage(usage, raw) {
|
|
|
35
40
|
if (raw.cache_creation?.ephemeral_1h_input_tokens != null) {
|
|
36
41
|
usage.cacheWrite1hTokens = raw.cache_creation.ephemeral_1h_input_tokens;
|
|
37
42
|
}
|
|
43
|
+
// A gateway's reported cost (OpenRouter puts `cost` on the final usage). It
|
|
44
|
+
// rides the turn usage itself, so a success, an abandoned attempt and a
|
|
45
|
+
// failure's partial usage all carry it to the provider-boundary ledger.
|
|
46
|
+
const costUsd = reportedCostUsd(raw.cost);
|
|
47
|
+
if (costUsd !== undefined) usage.costUsd = costUsd;
|
|
48
|
+
// Server-tool counters are cumulative in message_delta; a later report
|
|
49
|
+
// replaces the earlier one, an absent one preserves it.
|
|
50
|
+
const serverToolUse = normalizeServerToolUse(raw);
|
|
51
|
+
if (serverToolUse) usage.serverToolUse = serverToolUse;
|
|
38
52
|
usage.raw = { ...(usage.raw || {}), ...raw };
|
|
39
53
|
// Input excludes cache; all three slots contribute to prompt volume.
|
|
40
54
|
usage.promptTokens = usage.inputTokens + usage.cachedTokens + usage.cacheWriteTokens;
|
|
@@ -75,9 +75,11 @@ const ANTHROPIC_SSE_ERROR_TYPE_STATUS = new Map([
|
|
|
75
75
|
['authentication_error', 401],
|
|
76
76
|
['permission_error', 403],
|
|
77
77
|
['not_found_error', 404],
|
|
78
|
+
['conflict_error', 409],
|
|
78
79
|
['request_too_large', 413],
|
|
79
80
|
['rate_limit_error', 429],
|
|
80
81
|
['api_error', 500],
|
|
82
|
+
['timeout_error', 504],
|
|
81
83
|
['overloaded_error', 529],
|
|
82
84
|
]);
|
|
83
85
|
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* account for usage identically.
|
|
11
11
|
*/
|
|
12
12
|
import { traceAgentUsage } from '../agent-trace.mjs';
|
|
13
|
+
import { reportedCostUsd } from './lib/usage-primitives.mjs';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* @param {object} parseResult the assembled turn (streaming or normalized non-streaming)
|
|
@@ -26,6 +27,7 @@ export function buildAnthropicTurnResult(parseResult, { provider, useModel, opts
|
|
|
26
27
|
const output = parseResult.usage?.outputTokens || 0;
|
|
27
28
|
const promptTokens = parseResult.usage?.promptTokens ?? input + cacheRead + cacheWrite;
|
|
28
29
|
const liveModel = parseResult.model || useModel;
|
|
30
|
+
const costUsd = parseResult.usage?.costUsd ?? reportedCostUsd(usageRaw?.cost);
|
|
29
31
|
|
|
30
32
|
if (usageRaw || input || output || cacheRead || cacheWrite) {
|
|
31
33
|
traceAgentUsage({
|
|
@@ -53,6 +55,8 @@ export function buildAnthropicTurnResult(parseResult, { provider, useModel, opts
|
|
|
53
55
|
model: liveModel,
|
|
54
56
|
toolCalls: parseResult.toolCalls,
|
|
55
57
|
stopReason: parseResult.stopReason || null,
|
|
58
|
+
...(parseResult.stopDetails != null ? { stopDetails: parseResult.stopDetails } : {}),
|
|
59
|
+
...(parseResult.stopSequence != null ? { stopSequence: parseResult.stopSequence } : {}),
|
|
56
60
|
hasThinkingContent: !!parseResult.hasThinkingContent,
|
|
57
61
|
contentBlockTypes: Array.isArray(parseResult.contentBlockTypes) ? parseResult.contentBlockTypes : [],
|
|
58
62
|
// Round-trip adaptive-thinking blocks (verbatim thinking +
|
|
@@ -84,6 +88,11 @@ export function buildAnthropicTurnResult(parseResult, { provider, useModel, opts
|
|
|
84
88
|
cacheWriteTokens: cacheWrite,
|
|
85
89
|
...(parseResult.usage?.cacheWrite1hTokens ? { cacheWrite1hTokens: parseResult.usage.cacheWrite1hTokens } : {}),
|
|
86
90
|
promptTokens,
|
|
91
|
+
// A gateway-reported cost (OpenRouter `usage.cost`), when the turn has one.
|
|
92
|
+
...(costUsd !== undefined ? { costUsd } : {}),
|
|
93
|
+
...(parseResult.usage?.serverToolUse ? { serverToolUse: parseResult.usage.serverToolUse } : {}),
|
|
94
|
+
// Raw provider usage (incl. server_tool_use counters), as on the OAuth path.
|
|
95
|
+
...(usageRaw ? { raw: usageRaw } : {}),
|
|
87
96
|
},
|
|
88
97
|
};
|
|
89
98
|
}
|
|
@@ -13,6 +13,7 @@ import { ANTHROPIC_MAX_MIDSTREAM_RETRIES, parseSSEStream } from './anthropic-sse
|
|
|
13
13
|
import { buildAnthropicBetaHeaders } from './anthropic-betas.mjs';
|
|
14
14
|
import { buildAnthropicApiRequest } from './anthropic-api-request.mjs';
|
|
15
15
|
import { isCustomProviderName } from './custom-reasoning.mjs';
|
|
16
|
+
import { createAnthropicApiKeyFetch } from './anthropic-api-key-fetch.mjs';
|
|
16
17
|
import { ANTHROPIC_EFFORT_LEVELS, withEffortRejectionFallback } from './effort-rejection.mjs';
|
|
17
18
|
import { armFirstByteWatchdog, createAnthropicApiTransport } from './anthropic-api-transport.mjs';
|
|
18
19
|
import { createAnthropicApiRecovery } from './anthropic-api-recovery.mjs';
|
|
@@ -75,6 +76,9 @@ export class AnthropicProvider {
|
|
|
75
76
|
return new (loadAnthropic())({
|
|
76
77
|
...credentials,
|
|
77
78
|
...(this.config.baseURL ? { baseURL: this.config.baseURL } : {}),
|
|
79
|
+
// Gzip only toward the official origin (decided per request URL); a
|
|
80
|
+
// custom-* gateway keeps the SDK's plain fetch.
|
|
81
|
+
...(custom ? {} : { fetch: createAnthropicApiKeyFetch() }),
|
|
78
82
|
defaultHeaders: {
|
|
79
83
|
...(betaHeaders ? { 'anthropic-beta': betaHeaders } : {}),
|
|
80
84
|
...(keyless ? { 'x-api-key': null, authorization: null } : {}),
|
|
@@ -83,6 +87,11 @@ export class AnthropicProvider {
|
|
|
83
87
|
maxRetries: 0,
|
|
84
88
|
});
|
|
85
89
|
}
|
|
90
|
+
// The model id capability lookups (output cap, thinking/effort shape) read;
|
|
91
|
+
// a gateway engine maps its routing slug to the Claude id it stands for.
|
|
92
|
+
_capabilityModel(model) {
|
|
93
|
+
return model;
|
|
94
|
+
}
|
|
86
95
|
reloadApiKey() {
|
|
87
96
|
try {
|
|
88
97
|
const newKey = reloadProviderApiKey(this.name, this.config);
|
|
@@ -149,6 +158,7 @@ export class AnthropicProvider {
|
|
|
149
158
|
fastModeLatched: this.fastModeBetaHeaderLatched,
|
|
150
159
|
// Custom providers carry per-model reasoning settings on their own rows.
|
|
151
160
|
modelInfo: isCustomProviderName(this.name) ? this.getCachedModelInfo?.(useModel) || null : null,
|
|
161
|
+
capabilityModel: this._capabilityModel(useModel),
|
|
152
162
|
});
|
|
153
163
|
this.fastModeBetaHeaderLatched = fastModeLatched;
|
|
154
164
|
|
|
@@ -193,6 +193,18 @@ function antigravityCatalogModels() {
|
|
|
193
193
|
return _mirror || ANTIGRAVITY_MODELS;
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
+
/**
|
|
197
|
+
* The catalog `family` ('gemini-pro', 'gemini-flash', 'gpt-oss') of a picker
|
|
198
|
+
* id or one of its wire ids, or null when no record carries one (Claude, or
|
|
199
|
+
* an id the catalog does not list).
|
|
200
|
+
*/
|
|
201
|
+
export function antigravityModelFamily(model, models = antigravityCatalogModels()) {
|
|
202
|
+
const id = String(model || '');
|
|
203
|
+
const wires = (entry) => (entry?.wire && typeof entry.wire === 'object' ? Object.values(entry.wire) : [entry?.wire]);
|
|
204
|
+
const record = models.find((entry) => entry?.id === id) || models.find((entry) => wires(entry).includes(id));
|
|
205
|
+
return typeof record?.family === 'string' && record.family ? record.family : null;
|
|
206
|
+
}
|
|
207
|
+
|
|
196
208
|
/**
|
|
197
209
|
* Turn a picker model + effort into the wire id the gateway accepts. Tiered
|
|
198
210
|
* families consume the effort (the id encodes it); a bare id whose record
|
|
@@ -228,17 +240,34 @@ function quotaRow(label, bucket) {
|
|
|
228
240
|
};
|
|
229
241
|
}
|
|
230
242
|
|
|
231
|
-
|
|
243
|
+
// The gateway's bucket ids; group names are display text and may change.
|
|
244
|
+
const GEMINI_5H_BUCKET_ID = 'gemini-5h';
|
|
245
|
+
const GEMINI_WEEKLY_BUCKET_ID = 'gemini-weekly';
|
|
246
|
+
const ARGON_WEEKLY_BUCKET_ID = 'gemini-argon-wtu-weekly';
|
|
247
|
+
// The "Claude and GPT models" group (Claude Opus, Claude Sonnet, GPT-OSS) has
|
|
248
|
+
// its own pair of buckets, separate from the Gemini counters.
|
|
249
|
+
const THIRD_PARTY_5H_BUCKET_ID = '3p-5h';
|
|
250
|
+
const THIRD_PARTY_WEEKLY_BUCKET_ID = '3p-weekly';
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Gemini 5H/7D rows from retrieveUserQuotaSummary, the separate weekly limit
|
|
254
|
+
* of the Gemini 4 Argon group (its own group with only a weekly bucket), and
|
|
255
|
+
* the Claude/GPT-OSS 5H/7D pair. Rows are selected by bucket id and window.
|
|
256
|
+
* Missing fields stay omitted.
|
|
257
|
+
*/
|
|
232
258
|
export function antigravityQuotaWindows(summary) {
|
|
233
|
-
const groups = Array.isArray(summary?.groups) ? summary.groups : []
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
259
|
+
const groups = (Array.isArray(summary?.groups) ? summary.groups : []).filter(
|
|
260
|
+
(entry) => entry && typeof entry === 'object'
|
|
261
|
+
);
|
|
262
|
+
const buckets = groups.flatMap((entry) => (Array.isArray(entry.buckets) ? entry.buckets : []));
|
|
263
|
+
const bucket = (id, window) =>
|
|
264
|
+
buckets.find((entry) => entry && typeof entry === 'object' && entry.bucketId === id && entry.window === window) ??
|
|
265
|
+
null;
|
|
266
|
+
return [
|
|
267
|
+
quotaRow('5H', bucket(GEMINI_5H_BUCKET_ID, '5h')),
|
|
268
|
+
quotaRow('7D', bucket(GEMINI_WEEKLY_BUCKET_ID, 'weekly')),
|
|
269
|
+
quotaRow('7D Argon', bucket(ARGON_WEEKLY_BUCKET_ID, 'weekly')),
|
|
270
|
+
quotaRow('5H Claude/GPT', bucket(THIRD_PARTY_5H_BUCKET_ID, '5h')),
|
|
271
|
+
quotaRow('7D Claude/GPT', bucket(THIRD_PARTY_WEEKLY_BUCKET_ID, 'weekly')),
|
|
272
|
+
].filter(Boolean);
|
|
244
273
|
}
|
|
@@ -20,7 +20,11 @@ import { preconnect } from '../../../shared/llm/http-agent.mjs';
|
|
|
20
20
|
import { createAntigravityStreamCollector } from './antigravity-stream.mjs';
|
|
21
21
|
import { createAntigravityRequest } from './antigravity-transport.mjs';
|
|
22
22
|
import { finalizeAntigravityTurn } from './antigravity-response.mjs';
|
|
23
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
ANTIGRAVITY_ACCOUNT_COOLDOWN_POLICY,
|
|
25
|
+
antigravityFirstBytePolicy,
|
|
26
|
+
antigravityFirstResponseBudget,
|
|
27
|
+
} from './antigravity-retry-policy.mjs';
|
|
24
28
|
import {
|
|
25
29
|
CONTENT_ENDPOINT,
|
|
26
30
|
ANTIGRAVITY_MODELS,
|
|
@@ -97,6 +101,13 @@ export class AntigravityOAuthProvider {
|
|
|
97
101
|
return configured || CONTENT_ENDPOINT;
|
|
98
102
|
}
|
|
99
103
|
|
|
104
|
+
// Longest one send to `model` may wait for response headers / first output,
|
|
105
|
+
// the whole transport retry ladder included; the agent watchdog's
|
|
106
|
+
// first-response deadlines are floored above it.
|
|
107
|
+
firstResponseBudget(model) {
|
|
108
|
+
return antigravityFirstResponseBudget(antigravityFirstBytePolicy(model || DEFAULT_ANTIGRAVITY_MODEL));
|
|
109
|
+
}
|
|
110
|
+
|
|
100
111
|
_buildBody(messages, model, tools, opts) {
|
|
101
112
|
const body = buildAntigravityRequest(messages, model, tools, opts, this._projectId);
|
|
102
113
|
dumpAntigravityRequest(body);
|
|
@@ -169,6 +180,7 @@ export class AntigravityOAuthProvider {
|
|
|
169
180
|
signal: passthrough.signal,
|
|
170
181
|
collector,
|
|
171
182
|
sleepFn: this.config.sleepFn,
|
|
183
|
+
firstByte: antigravityFirstBytePolicy(useModel),
|
|
172
184
|
});
|
|
173
185
|
try {
|
|
174
186
|
try {
|