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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { providerNativeToolPrefixCount } from '../../runtime-core/provider-request-tools.mjs';
|
|
2
|
-
import { actionInputContract } from './action-input-contract.mjs';
|
|
2
|
+
import { actionInputContract, actionInputUnionFor } from './action-input-contract.mjs';
|
|
3
3
|
import { isNativeServerToolBlockType } from './anthropic-native-blocks.mjs';
|
|
4
4
|
import { isAnthropicThinkingBlock, sanitizeAnthropicReplayBlocks } from './anthropic-replay-blocks.mjs';
|
|
5
5
|
import { sanitizeAnthropicContentPairs, foldUserTextIntoToolResultTail } from '../../session/context-utils.mjs';
|
|
@@ -7,24 +7,78 @@ import { normalizeContentForAnthropic } from '../media-normalization.mjs';
|
|
|
7
7
|
import { createProviderReplay, providerReplayItems } from './provider-replay.mjs';
|
|
8
8
|
import { anthropicFallbackProviderMetadata, parseAnthropicFallbackBlock } from '../anthropic-server-fallback.mjs';
|
|
9
9
|
import { mergeFlatSchemaProperty } from './flat-schema-merge.mjs';
|
|
10
|
+
import { reportedCostUsd } from './usage-primitives.mjs';
|
|
11
|
+
import { reportInvalidTool, wireInputSchema } from './claude-bridge-schema.mjs';
|
|
12
|
+
import { normalizeServerToolUse } from './anthropic-server-tool-usage.mjs';
|
|
10
13
|
export const ANTHROPIC_CACHE_TTL_STABLE = { type: 'ephemeral', ttl: '1h' };
|
|
11
14
|
const ANTHROPIC_CACHE_TTL_VOLATILE = { type: 'ephemeral' };
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
// Anthropic allows at most 4 cache_control breakpoints across the whole
|
|
17
|
+
// serialized request (tools + system + messages).
|
|
18
|
+
export const ANTHROPIC_MAX_CACHE_BREAKPOINTS = 4;
|
|
19
|
+
|
|
20
|
+
// A block can carry a breakpoint unless it is thinking/redacted_thinking or an
|
|
21
|
+
// empty text block (both are rejected by the API).
|
|
22
|
+
function isCacheEligibleBlock(block) {
|
|
23
|
+
if (!block || typeof block !== 'object') return false;
|
|
24
|
+
if (block.type === 'thinking' || block.type === 'redacted_thinking') return false;
|
|
25
|
+
if (block.type === 'text') return typeof block.text === 'string' && block.text.trim() !== '';
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function lastEligibleBlockIndex(content) {
|
|
30
|
+
if (typeof content === 'string') return content.trim() ? 0 : -1;
|
|
31
|
+
if (!Array.isArray(content)) return -1;
|
|
32
|
+
for (let i = content.length - 1; i >= 0; i--) if (isCacheEligibleBlock(content[i])) return i;
|
|
33
|
+
return -1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Count cache_control markers on a block / block list (incl. tool_result content). */
|
|
37
|
+
export function countAnthropicCacheControls(value) {
|
|
38
|
+
if (Array.isArray(value)) return value.reduce((sum, item) => sum + countAnthropicCacheControls(item), 0);
|
|
39
|
+
if (!value || typeof value !== 'object') return 0;
|
|
40
|
+
return (
|
|
41
|
+
(value.cache_control ? 1 : 0) + (Array.isArray(value.content) ? countAnthropicCacheControls(value.content) : 0)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function stripCacheControl(block, budget) {
|
|
46
|
+
if (!block || typeof block !== 'object' || budget.n <= 0) return block;
|
|
47
|
+
let next = block;
|
|
48
|
+
if (block.cache_control) {
|
|
49
|
+
budget.n--;
|
|
50
|
+
const { cache_control: _dropped, ...rest } = block;
|
|
51
|
+
next = rest;
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(next.content) && budget.n > 0) {
|
|
54
|
+
const content = next.content.map((child) => stripCacheControl(child, budget));
|
|
55
|
+
if (content.some((child, i) => child !== next.content[i])) next = { ...next, content };
|
|
56
|
+
}
|
|
57
|
+
return next;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Drop the `excess` oldest message markers (the newest breakpoints are the
|
|
61
|
+
// valuable ones: they cover the longest prefix).
|
|
62
|
+
function stripOldestMessageCacheControls(messages, excess) {
|
|
63
|
+
const budget = { n: excess };
|
|
64
|
+
for (const message of messages) {
|
|
65
|
+
if (budget.n <= 0) break;
|
|
66
|
+
if (!Array.isArray(message?.content)) continue;
|
|
67
|
+
const content = message.content.map((block) => stripCacheControl(block, budget));
|
|
68
|
+
if (content.some((block, i) => block !== message.content[i])) message.content = content;
|
|
23
69
|
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function appendAnthropicCacheControl(content, ttl = ANTHROPIC_CACHE_TTL_VOLATILE, blockIndex = null) {
|
|
73
|
+
const index = blockIndex ?? lastEligibleBlockIndex(content);
|
|
24
74
|
if (typeof content === 'string') {
|
|
25
|
-
return [
|
|
75
|
+
return index < 0 ? content : [{ type: 'text', text: content, cache_control: ttl }];
|
|
26
76
|
}
|
|
27
|
-
return content;
|
|
77
|
+
if (!Array.isArray(content) || index < 0 || !isCacheEligibleBlock(content[index])) return content;
|
|
78
|
+
if (content[index].cache_control) return content;
|
|
79
|
+
const next = [...content];
|
|
80
|
+
next[index] = { ...content[index], cache_control: ttl };
|
|
81
|
+
return next;
|
|
28
82
|
}
|
|
29
83
|
|
|
30
84
|
export function resolveAnthropicCacheTtls(opts) {
|
|
@@ -64,15 +118,41 @@ export function resolveAnthropicCacheTtls(opts) {
|
|
|
64
118
|
// live tail on every request. ANTHROPIC_MSG_SLOTS=0 disables message caching;
|
|
65
119
|
// any positive value enables that one marker when the system layout leaves a
|
|
66
120
|
// slot. messageTtl === null turns the tail off.
|
|
67
|
-
|
|
68
|
-
|
|
121
|
+
//
|
|
122
|
+
// The 4-breakpoint limit is request-wide: `tools` (native-tool markers) count
|
|
123
|
+
// next to the system blocks as reserved slots; markers already preserved in
|
|
124
|
+
// message content are enforced by applyAnthropicCacheMarkers via
|
|
125
|
+
// `reservedSlots`.
|
|
126
|
+
export function resolveAnthropicMessageCacheSlots(systemBlocks, ttls, { tools = [] } = {}) {
|
|
127
|
+
// Tool markers take their slots first; system markers beyond the remainder
|
|
128
|
+
// are dropped earliest-first (the last system marker covers the longest
|
|
129
|
+
// prefix). The freshly built system blocks are edited in place.
|
|
130
|
+
// Tool markers alone are capped first: beyond the request-wide limit the
|
|
131
|
+
// earliest are dropped (the last covers the longest tool prefix). Tool
|
|
132
|
+
// objects may be shared with the caller, so the array slot is replaced by a
|
|
133
|
+
// marker-free copy instead of mutating the object.
|
|
134
|
+
let toolExcess = countAnthropicCacheControls(tools) - ANTHROPIC_MAX_CACHE_BREAKPOINTS;
|
|
135
|
+
for (let i = 0; toolExcess > 0 && i < tools.length; i++) {
|
|
136
|
+
if (!tools[i]?.cache_control) continue;
|
|
137
|
+
const { cache_control: _dropped, ...rest } = tools[i];
|
|
138
|
+
tools[i] = rest;
|
|
139
|
+
toolExcess--;
|
|
140
|
+
}
|
|
141
|
+
const toolSlots = countAnthropicCacheControls(tools);
|
|
142
|
+
let systemExcess = countAnthropicCacheControls(systemBlocks) + toolSlots - ANTHROPIC_MAX_CACHE_BREAKPOINTS;
|
|
143
|
+
for (const block of systemBlocks) {
|
|
144
|
+
if (systemExcess <= 0) break;
|
|
145
|
+
if (block?.cache_control) {
|
|
146
|
+
delete block.cache_control;
|
|
147
|
+
systemExcess--;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const reservedSlots = countAnthropicCacheControls(systemBlocks) + toolSlots;
|
|
69
151
|
const slotsCap = Number.parseInt(process.env.ANTHROPIC_MSG_SLOTS, 10);
|
|
70
|
-
const hasFreeSlot =
|
|
152
|
+
const hasFreeSlot = reservedSlots < ANTHROPIC_MAX_CACHE_BREAKPOINTS;
|
|
71
153
|
const capAllowsMessage = Number.isFinite(slotsCap) && slotsCap >= 0 ? slotsCap > 0 : true;
|
|
72
154
|
const messageSlots = ttls.messages && hasFreeSlot && capAllowsMessage ? 1 : 0;
|
|
73
|
-
|
|
74
|
-
// first, then messageSlots.
|
|
75
|
-
return { messageTtl: messageSlots > 0 ? ttls.messages : null, messageSlots };
|
|
155
|
+
return { messageTtl: messageSlots > 0 ? ttls.messages : null, messageSlots, reservedSlots };
|
|
76
156
|
}
|
|
77
157
|
|
|
78
158
|
// Single lowering of orchestrator messages to the Anthropic wire shape. The
|
|
@@ -150,7 +230,10 @@ function splitErrorToolResultContent(content) {
|
|
|
150
230
|
// Native tool_search providers whose stored references this lowering replays.
|
|
151
231
|
const ANTHROPIC_NATIVE_PROVIDERS = new Set(['anthropic', 'anthropic-oauth']);
|
|
152
232
|
|
|
153
|
-
|
|
233
|
+
// `provider`: the engine's provider name. A gateway on a native Messages
|
|
234
|
+
// route (wire-route.mjs) also replays the references it tagged itself.
|
|
235
|
+
export function toAnthropicMessages(messages, availableTools, provider = '') {
|
|
236
|
+
const ownProvider = String(provider || '').toLowerCase();
|
|
154
237
|
const availableNames = anthropicToolNameSet(availableTools);
|
|
155
238
|
const result = [];
|
|
156
239
|
for (let idx = 0; idx < messages.length; idx++) {
|
|
@@ -195,7 +278,8 @@ export function toAnthropicMessages(messages, availableTools) {
|
|
|
195
278
|
const native = m.nativeToolSearch;
|
|
196
279
|
const nativeProvider = String(native?.provider || '').toLowerCase();
|
|
197
280
|
const references =
|
|
198
|
-
(!nativeProvider || ANTHROPIC_NATIVE_PROVIDERS.has(nativeProvider)) &&
|
|
281
|
+
(!nativeProvider || ANTHROPIC_NATIVE_PROVIDERS.has(nativeProvider) || nativeProvider === ownProvider) &&
|
|
282
|
+
Array.isArray(native?.toolReferences)
|
|
199
283
|
? native.toolReferences.map((name) => String(name || '').trim()).filter(Boolean)
|
|
200
284
|
: [];
|
|
201
285
|
// Keep only references this request can actually back with a
|
|
@@ -305,11 +389,15 @@ export function normalizeAnthropicNonStreamingResponse(message, fallbackModel =
|
|
|
305
389
|
const input = Number(usage.input_tokens) || 0;
|
|
306
390
|
const cacheRead = Number(usage.cache_read_input_tokens) || 0;
|
|
307
391
|
const cacheWrite = Number(usage.cache_creation_input_tokens) || 0;
|
|
392
|
+
const costUsd = reportedCostUsd(usage.cost);
|
|
393
|
+
const serverToolUse = normalizeServerToolUse(usage);
|
|
308
394
|
return {
|
|
309
395
|
content: text,
|
|
310
396
|
model: fallbackEvents.at(-1)?.fallbackModel || message?.model || fallbackModel,
|
|
311
397
|
toolCalls: toolCalls.length ? toolCalls : undefined,
|
|
312
398
|
stopReason: message?.stop_reason || null,
|
|
399
|
+
...(message?.stop_details != null ? { stopDetails: message.stop_details } : {}),
|
|
400
|
+
...(message?.stop_sequence != null ? { stopSequence: message.stop_sequence } : {}),
|
|
313
401
|
hasThinkingContent: modelEmittedThinking,
|
|
314
402
|
contentBlockTypes: blocks.map((block) => block?.type).filter(Boolean),
|
|
315
403
|
thinkingBlocks: thinkingBlocks.length ? thinkingBlocks : undefined,
|
|
@@ -325,6 +413,8 @@ export function normalizeAnthropicNonStreamingResponse(message, fallbackModel =
|
|
|
325
413
|
? { cacheWrite1hTokens: Number(usage.cache_creation.ephemeral_1h_input_tokens) }
|
|
326
414
|
: {}),
|
|
327
415
|
promptTokens: input + cacheRead + cacheWrite,
|
|
416
|
+
...(costUsd !== undefined ? { costUsd } : {}),
|
|
417
|
+
...(serverToolUse ? { serverToolUse } : {}),
|
|
328
418
|
raw: usage,
|
|
329
419
|
},
|
|
330
420
|
};
|
|
@@ -399,16 +489,42 @@ export function sanitizeAnthropicInputSchema(schema, toolName, logTag) {
|
|
|
399
489
|
};
|
|
400
490
|
}
|
|
401
491
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
492
|
+
// The Messages `input_schema` of a tool: the flattened schema, lowered to
|
|
493
|
+
// 2020-12 with an object root when it is not valid as written ({ schema }), or
|
|
494
|
+
// { pointer, reason } when it is broken even then.
|
|
495
|
+
function anthropicInputSchema(tool, logTag) {
|
|
496
|
+
// First-party Anthropic accepts nested per-action input alternatives;
|
|
497
|
+
// gateways on the same wire keep the advertised flat schema.
|
|
498
|
+
const flattened = sanitizeAnthropicInputSchema(
|
|
499
|
+
ANTHROPIC_NATIVE_PROVIDERS.has(logTag) ? actionInputUnionFor(tool.inputSchema) : tool.inputSchema,
|
|
500
|
+
tool.name,
|
|
501
|
+
logTag
|
|
502
|
+
);
|
|
503
|
+
return wireInputSchema(flattened, 'anthropic');
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/** The `{ name, pointer, reason }` for which the Messages wire leaves `tool`
|
|
507
|
+
* out of a request, or null when it is sent. Reports nothing. */
|
|
508
|
+
export function anthropicToolExclusion(tool, logTag = 'anthropic') {
|
|
509
|
+
const result = anthropicInputSchema(tool, logTag);
|
|
510
|
+
return result.schema ? null : { name: tool.name, pointer: result.pointer || '/', reason: result.reason };
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// A Messages endpoint rejects the whole request for one invalid input_schema,
|
|
514
|
+
// so a tool broken even after lowering is reported and left out.
|
|
515
|
+
function toAnthropicTools(tools, logTag, onToolExcluded) {
|
|
516
|
+
const out = [];
|
|
517
|
+
tools.forEach((tool, index) => {
|
|
518
|
+
const result = anthropicInputSchema(tool, logTag);
|
|
519
|
+
if (!result.schema) {
|
|
520
|
+
reportInvalidTool(tool.name, index, result, onToolExcluded, `[${logTag}] tool`);
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
const entry = { name: tool.name, description: tool.description, input_schema: result.schema };
|
|
524
|
+
if (tool.deferLoading === true || tool.defer_loading === true) entry.defer_loading = true;
|
|
525
|
+
out.push(entry);
|
|
411
526
|
});
|
|
527
|
+
return out;
|
|
412
528
|
}
|
|
413
529
|
|
|
414
530
|
// Map the orchestrator-level opts.toolChoice into Anthropic's tool_choice.
|
|
@@ -423,8 +539,48 @@ function toAnthropicTools(tools, logTag) {
|
|
|
423
539
|
// effort/thinking active on reasoning models — activating it would convert a
|
|
424
540
|
// previously-harmless no-op into a hard 400 on exactly that turn. Attached
|
|
425
541
|
// only when the request actually carries tools.
|
|
426
|
-
|
|
427
|
-
|
|
542
|
+
//
|
|
543
|
+
// Mapping: 'auto'→auto, 'required'/'any'→any, {name}|{type:'tool',name}→tool,
|
|
544
|
+
// 'none'→none. Forced any/tool is rejected by the API while extended/adaptive
|
|
545
|
+
// thinking is on: with `thinking` set it falls back to auto (default) or throws
|
|
546
|
+
// (`onThinkingConflict: 'error'`). `disableParallelToolUse` adds
|
|
547
|
+
// disable_parallel_tool_use (not valid with none) unless the endpoint declares
|
|
548
|
+
// `supportsDisableParallelToolUse: false` (gateway capability).
|
|
549
|
+
export function toAnthropicToolChoice(
|
|
550
|
+
toolChoice,
|
|
551
|
+
{
|
|
552
|
+
thinking = false,
|
|
553
|
+
disableParallelToolUse = false,
|
|
554
|
+
supportsDisableParallelToolUse = true,
|
|
555
|
+
onThinkingConflict = 'fallback',
|
|
556
|
+
} = {}
|
|
557
|
+
) {
|
|
558
|
+
let choice;
|
|
559
|
+
if (toolChoice === 'none') choice = { type: 'none' };
|
|
560
|
+
else if (toolChoice === 'auto') choice = { type: 'auto' };
|
|
561
|
+
else if (toolChoice === 'required' || toolChoice === 'any') choice = { type: 'any' };
|
|
562
|
+
else if (toolChoice && typeof toolChoice === 'object') {
|
|
563
|
+
const name = typeof toolChoice.name === 'string' ? toolChoice.name : toolChoice.function?.name;
|
|
564
|
+
if (toolChoice.type === 'none') choice = { type: 'none' };
|
|
565
|
+
else if (toolChoice.type === 'auto') choice = { type: 'auto' };
|
|
566
|
+
else if (toolChoice.type === 'any') choice = { type: 'any' };
|
|
567
|
+
else if (typeof name === 'string' && name) choice = { type: 'tool', name };
|
|
568
|
+
}
|
|
569
|
+
if (choice && (choice.type === 'any' || choice.type === 'tool') && thinking) {
|
|
570
|
+
if (onThinkingConflict === 'error') {
|
|
571
|
+
throw new Error(`Anthropic tool_choice "${choice.type}" is not allowed while extended thinking is enabled`);
|
|
572
|
+
}
|
|
573
|
+
choice = undefined;
|
|
574
|
+
}
|
|
575
|
+
if (disableParallelToolUse === true && supportsDisableParallelToolUse !== false && choice?.type !== 'none') {
|
|
576
|
+
choice = { ...(choice || { type: 'auto' }), disable_parallel_tool_use: true };
|
|
577
|
+
}
|
|
578
|
+
return choice;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/** True when the request body enables extended/adaptive thinking. */
|
|
582
|
+
export function anthropicThinkingActive(body) {
|
|
583
|
+
return body?.thinking?.type === 'enabled' || body?.thinking?.type === 'adaptive';
|
|
428
584
|
}
|
|
429
585
|
|
|
430
586
|
export function deferredAnthropicTools(activeTools, messages, opts, provider) {
|
|
@@ -470,14 +626,14 @@ export function requestAnthropicTools(tools, messages, opts, provider) {
|
|
|
470
626
|
const nativePrefixCount = providerNativeToolPrefixCount(activeTools, opts.providerNativeToolPrefixCount);
|
|
471
627
|
return [
|
|
472
628
|
...activeTools.slice(0, nativePrefixCount),
|
|
473
|
-
...toAnthropicTools(activeTools.slice(nativePrefixCount), provider),
|
|
629
|
+
...toAnthropicTools(activeTools.slice(nativePrefixCount), provider, opts.onToolExcluded),
|
|
474
630
|
];
|
|
475
631
|
}
|
|
476
632
|
const deferredTools = deferredAnthropicTools(activeTools, messages, opts, provider);
|
|
477
633
|
const nativeTools = Array.isArray(opts?.nativeTools)
|
|
478
634
|
? opts.nativeTools.filter((tool) => tool && typeof tool === 'object')
|
|
479
635
|
: [];
|
|
480
|
-
return [...nativeTools, ...toAnthropicTools([...activeTools, ...deferredTools], provider)];
|
|
636
|
+
return [...nativeTools, ...toAnthropicTools([...activeTools, ...deferredTools], provider, opts?.onToolExcluded)];
|
|
481
637
|
}
|
|
482
638
|
|
|
483
639
|
// Applies cache_control markers to the FINAL, already-sanitized Anthropic
|
|
@@ -493,20 +649,75 @@ export function requestAnthropicTools(tools, messages, opts, provider) {
|
|
|
493
649
|
// messageTtl === null disables the tail. BP3 (tier3) rides a system block,
|
|
494
650
|
// so it is not marked here. ANTHROPIC_MSG_SLOTS=0 is honoured upstream by
|
|
495
651
|
// passing messageTtl = null.
|
|
652
|
+
// `sharedPrefix` (see sharedCachePrefixBoundary) moves the breakpoint off the
|
|
653
|
+
// tail onto a shared prefix's last block, or drops it (`false`).
|
|
496
654
|
export function applyAnthropicCacheMarkers(
|
|
497
655
|
sanitizedMessages,
|
|
498
|
-
{ messageTtl = ANTHROPIC_CACHE_TTL_VOLATILE, messageSlots = 1 } = {}
|
|
656
|
+
{ messageTtl = ANTHROPIC_CACHE_TTL_VOLATILE, messageSlots = 1, reservedSlots = 0 } = {},
|
|
657
|
+
sharedPrefix = null
|
|
499
658
|
) {
|
|
500
659
|
if (!Array.isArray(sanitizedMessages) || sanitizedMessages.length === 0) {
|
|
501
660
|
return sanitizedMessages;
|
|
502
661
|
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
662
|
+
// Request-wide 4-breakpoint limit: slots held by system/tools are reserved;
|
|
663
|
+
// markers preserved inside message content may only use what is left.
|
|
664
|
+
const budget = Math.max(0, ANTHROPIC_MAX_CACHE_BREAKPOINTS - (Number(reservedSlots) || 0));
|
|
665
|
+
const present = countAnthropicCacheControls(sanitizedMessages);
|
|
666
|
+
if (present > budget) stripOldestMessageCacheControls(sanitizedMessages, present - budget);
|
|
667
|
+
const free = budget - Math.min(present, budget);
|
|
668
|
+
if (messageTtl === null || !(Number(messageSlots) > 0) || sharedPrefix === false || free <= 0) {
|
|
669
|
+
return sanitizedMessages;
|
|
670
|
+
}
|
|
671
|
+
if (sharedPrefix) {
|
|
672
|
+
const message = sanitizedMessages[sharedPrefix.index];
|
|
673
|
+
if (message && contentBlockKey(message.content, sharedPrefix.blockIndex) === sharedPrefix.blockKey) {
|
|
674
|
+
message.content = appendAnthropicCacheControl(message.content, messageTtl, sharedPrefix.blockIndex);
|
|
675
|
+
}
|
|
676
|
+
return sanitizedMessages;
|
|
510
677
|
}
|
|
678
|
+
const index = lastMarkableMessageIndex(sanitizedMessages);
|
|
679
|
+
if (index < 0) return sanitizedMessages;
|
|
680
|
+
const message = sanitizedMessages[index];
|
|
681
|
+
message.content = appendAnthropicCacheControl(message.content, messageTtl);
|
|
511
682
|
return sanitizedMessages;
|
|
512
683
|
}
|
|
684
|
+
|
|
685
|
+
// The breakpoint goes on the last message that has an eligible block: a
|
|
686
|
+
// trailing effort control (empty system message) or a thinking-only tail has
|
|
687
|
+
// nothing to mark. -1 when no message does.
|
|
688
|
+
function lastMarkableMessageIndex(messages) {
|
|
689
|
+
for (let index = messages.length - 1; index >= 0; index--) {
|
|
690
|
+
if (lastEligibleBlockIndex(messages[index].content) >= 0) return index;
|
|
691
|
+
}
|
|
692
|
+
return -1;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
function contentBlockKey(content, blockIndex) {
|
|
696
|
+
const block = Array.isArray(content) ? content[blockIndex] : content;
|
|
697
|
+
return block === undefined ? undefined : JSON.stringify(block);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Where a cache-sharing fork (a /btw side question) keeps its message
|
|
702
|
+
* breakpoint. The fork re-sends an earlier request's messages unchanged and
|
|
703
|
+
* appends a short suffix; `opts.sharedCachePrefixCount` is the number of
|
|
704
|
+
* leading messages that make up that shared prefix (a plain number, so it
|
|
705
|
+
* survives model-proxy serialization). The breakpoint stays on the block the earlier request
|
|
706
|
+
* marked (the prefix's own lowered tail), so the fork reads that cache entry
|
|
707
|
+
* and writes none for its suffix. `lowerPrefix(messages)` lowers a message
|
|
708
|
+
* list exactly as the request does. Null for an ordinary request (tail
|
|
709
|
+
* breakpoint); false when the prefix is not part of this request.
|
|
710
|
+
*/
|
|
711
|
+
export function sharedCachePrefixBoundary(messages, opts, lowerPrefix) {
|
|
712
|
+
const count = opts?.sharedCachePrefixCount;
|
|
713
|
+
if (!count) return null;
|
|
714
|
+
if (!Number.isInteger(count) || count < 0 || count > messages.length) return false;
|
|
715
|
+
const prefix = lowerPrefix(messages.slice(0, count));
|
|
716
|
+
if (!prefix.length) return false;
|
|
717
|
+
const index = lastMarkableMessageIndex(prefix);
|
|
718
|
+
if (index < 0) return false;
|
|
719
|
+
const content = prefix[index].content;
|
|
720
|
+
const blockIndex = lastEligibleBlockIndex(content);
|
|
721
|
+
const blockKey = contentBlockKey(content, blockIndex);
|
|
722
|
+
return blockKey === undefined ? false : { index, blockIndex, blockKey };
|
|
723
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Normalized Anthropic server-tool usage counters (`usage.server_tool_use`):
|
|
2
|
+
// the number of server-side web searches / web fetches the turn ran. Returns
|
|
3
|
+
// undefined when the usage reports none, so ordinary turns carry no field.
|
|
4
|
+
const COUNTERS = [
|
|
5
|
+
['web_search_requests', 'webSearchRequests'],
|
|
6
|
+
['web_fetch_requests', 'webFetchRequests'],
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
export function normalizeServerToolUse(raw) {
|
|
10
|
+
const source = raw && typeof raw === 'object' ? raw.server_tool_use : null;
|
|
11
|
+
if (!source || typeof source !== 'object') return undefined;
|
|
12
|
+
const out = {};
|
|
13
|
+
for (const [wire, key] of COUNTERS) {
|
|
14
|
+
const n = Number(source[wire]);
|
|
15
|
+
if (Number.isFinite(n) && n >= 0) out[key] = n;
|
|
16
|
+
}
|
|
17
|
+
return Object.keys(out).length ? out : undefined;
|
|
18
|
+
}
|
|
@@ -2,13 +2,34 @@
|
|
|
2
2
|
const SYSTEM_CACHE_TIERS = new Set(['tier3', 'env']);
|
|
3
3
|
const systemCacheTier = (cacheTier) => (SYSTEM_CACHE_TIERS.has(cacheTier) ? cacheTier : 'system');
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
function pushSystemEntry(items, entry, tier) {
|
|
6
|
+
if (entry == null) return;
|
|
7
|
+
if (typeof entry === 'string') {
|
|
8
|
+
const text = entry.trim();
|
|
9
|
+
if (text) items.push({ text, tier });
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(entry)) {
|
|
13
|
+
for (const part of entry) pushSystemEntry(items, part, tier);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (typeof entry === 'object') {
|
|
17
|
+
const entryTier = entry.cacheTier === undefined ? tier : systemCacheTier(entry.cacheTier);
|
|
18
|
+
if (entry.type === 'text' && typeof entry.text === 'string') return pushSystemEntry(items, entry.text, entryTier);
|
|
19
|
+
if (entry.type === undefined && 'content' in entry) return pushSystemEntry(items, entry.content, entryTier);
|
|
11
20
|
}
|
|
21
|
+
throw new TypeError('Anthropic system instructions must be a string, text blocks, or system messages of those');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Non-empty system instructions as `{ text, tier }` block items. Accepts a
|
|
26
|
+
* string, a text-block array (`{ type: 'text', text }`), or an array of system
|
|
27
|
+
* messages whose `content` is either. Null/undefined yields none; any other
|
|
28
|
+
* shape throws rather than silently dropping structured instructions.
|
|
29
|
+
*/
|
|
30
|
+
export function systemBlockItems(system) {
|
|
31
|
+
const items = [];
|
|
32
|
+
pushSystemEntry(items, system, 'system');
|
|
12
33
|
return items;
|
|
13
34
|
}
|
|
14
35
|
/** cacheTier:'env' (volatile session/project environment) is never marked —
|