mixdog 0.9.174 → 1.0.0
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 +11 -12
- package/package.json +2 -2
- package/scripts/agent-turn-trace-probe.mjs +1 -1
- package/scripts/build-ffmpeg-runtime.sh +16 -0
- package/scripts/build-runtime-linux.sh +8 -2
- package/scripts/build-runtime-macos.sh +8 -2
- package/scripts/computer-task-cost-report.mjs +1 -9
- package/scripts/context-renewal-live-check.mjs +2 -1
- package/scripts/graph-parity.mjs +78 -55
- package/scripts/lib/bench-sandbox.mjs +67 -0
- package/scripts/lib/bench-sandbox.test.mjs +54 -0
- package/scripts/lib/coverage.mjs +2 -4
- package/scripts/lib/run-node-tests.mjs +24 -1
- package/scripts/lib/session-bench-fmt.mjs +65 -0
- package/scripts/lib/session-bench-render.mjs +394 -0
- package/scripts/lib/smoke-loop-shared.mjs +28 -0
- package/scripts/lib/smoke-loop-shared.test.mjs +22 -0
- package/scripts/lib/trace-row.mjs +40 -0
- package/scripts/lib/trace-row.test.mjs +47 -0
- package/scripts/lib/trace-stats.mjs +7 -0
- package/scripts/lib/trace-stats.test.mjs +7 -1
- package/scripts/llm-trace-summary.mjs +2 -44
- package/scripts/memory-chunk-quality.mjs +1 -1
- package/scripts/memory-layer2-check.mjs +1 -1
- package/scripts/pg-memory-diet.mjs +1 -1
- package/scripts/plan-runtime-release-tag.mjs +57 -0
- package/scripts/prepare-native-assets.mjs +1 -1
- package/scripts/provider-contract-test-env.mjs +21 -0
- package/scripts/release-paths.mjs +1 -0
- package/scripts/routing-corpus.mjs +1 -11
- package/scripts/session-diag.mjs +2 -44
- package/scripts/smoke-runtime-negative.sh +7 -1
- package/scripts/test-data-dir.mjs +19 -0
- package/scripts/tidy/sync-engines-manifest.mjs +8 -10
- package/scripts/tool-efficiency-diag.mjs +1 -4
- package/scripts/voice-runtime-config.json +1 -1
- package/src/app.mjs +1 -1
- package/src/defaults/skills/code-tidy/SKILL.md +5 -2
- package/src/defaults/skills/pptx/SKILL.md +1 -1
- package/src/defaults/skills/pptx/references/pictures.md +1 -1
- package/src/defaults/skills/pptx/scripts/review-deck.mjs +13 -4
- package/src/defaults/skills/skill-creator/scripts/validate-skill.mjs +40 -40
- package/src/defaults/skills/xlsx/SKILL.md +1 -0
- package/src/headless-exec.mjs +4 -2
- package/src/headless-role.mjs +81 -68
- package/src/lib/keychain-cjs.cjs +26 -49
- package/src/lib/mixdog-debug.cjs +1 -1
- package/src/lib/rules-builder.cjs +4 -3
- package/src/mixdog-session-runtime.mjs +2 -2
- package/src/repl/slash-commands.mjs +1 -1
- package/src/repl/stream-sink.mjs +1 -1
- package/src/repl/turn-output.mjs +2 -2
- package/src/repl.mjs +1 -1
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +1 -1
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +20 -16
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +0 -3
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +23 -22
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +2 -2
- package/src/runtime/{shared/llm/index.mjs → agent/orchestrator/maintenance-preset.mjs} +2 -2
- package/src/runtime/agent/orchestrator/mcp/client-config.mjs +2 -1
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +7 -36
- package/src/runtime/agent/orchestrator/mcp/client.mjs +28 -2
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +6 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +1 -47
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +1 -383
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +2 -59
- package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +32 -31
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +10 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +12 -61
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +30 -67
- package/src/runtime/agent/orchestrator/providers/anthropic-recovery-guards.mjs +9 -12
- package/src/runtime/agent/orchestrator/providers/anthropic-server-fallback.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/leak-guard.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-stop.mjs +20 -12
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +4 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-watchdogs.mjs +18 -10
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +20 -16
- package/src/runtime/agent/orchestrator/providers/anthropic-thinking-contract.mjs +1 -26
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +9 -13
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +8 -3
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +4 -8
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +21 -30
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +4 -2
- package/src/runtime/agent/orchestrator/providers/api-usage.mjs +10 -8
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +13 -10
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +29 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-guards.mjs +0 -1
- package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +10 -26
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +2 -3
- package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +7 -3
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +9 -15
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +31 -5
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +1 -4
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +48 -46
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +18 -19
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +3 -26
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +41 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +5 -19
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +16 -83
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +26 -8
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-models.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +30 -1
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-stream-labels.mjs +6 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +17 -0
- package/src/runtime/agent/orchestrator/providers/{anthropic-leaked-toolcall.mjs → lib/leaked-toolcall.mjs} +7 -7
- package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +44 -0
- package/src/runtime/agent/orchestrator/providers/lib/send-callbacks.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/lib/sse-framing.mjs +9 -8
- package/src/runtime/agent/orchestrator/providers/lib/transport-fallback-trace.mjs +25 -0
- package/src/runtime/agent/orchestrator/providers/model-catalog-projection.mjs +1 -181
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +1 -796
- package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +1 -71
- package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +87 -0
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +4 -5
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +4 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +2 -21
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +2 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +4 -8
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +45 -32
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +6 -12
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +14 -22
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +25 -34
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +14 -14
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +2 -13
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +2 -44
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -16
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +6 -5
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws-text-relay.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +6 -4
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -130
- package/src/runtime/agent/orchestrator/providers/registry.mjs +20 -16
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +21 -20
- package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +17 -17
- package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +193 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +421 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-inspection.mjs +17 -17
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-inspection.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-shape.mjs +3 -3
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +101 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +145 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/extension-scopes.mjs +5 -5
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/fs-utils.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-control.mjs +2 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-mutations.mjs +2 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-reminder.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +326 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-storage.mjs +2 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-tasks.mjs +148 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-title.mjs +2 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +140 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-turns.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/model-capabilities.mjs +140 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/orchestration.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/plugin-mcp.mjs +2 -2
- package/src/runtime/agent/orchestrator/runtime-core/session-id.mjs +2 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-route-policy.mjs +2 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-text.mjs +3 -3
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/session-title.mjs +1 -2
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/skill-tool-loading.mjs +1 -1
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-schema.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +747 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +149 -0
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/agents.mjs +11 -7
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/context.mjs +6 -4
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/packs.mjs +2 -3
- package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow-ids.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +255 -0
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +3 -4
- package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +2 -4
- package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-identity-writer.mjs +162 -0
- package/src/runtime/agent/orchestrator/session/context-tool-pairs.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +87 -0
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +3 -245
- package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/eager-dispatch/mutation-paths.mjs +54 -0
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/lifecycle-scan.mjs +1 -16
- package/src/runtime/agent/orchestrator/session/loop/arg-schema-coerce.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +13 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +6 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop.mjs +5 -6
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +5 -5
- package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +40 -64
- package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +24 -16
- package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +7 -13
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +17 -2
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +139 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-sweep.mjs +34 -14
- package/src/runtime/agent/orchestrator/session/manager/prefetch-bridge/file-prefetch.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +4 -18
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +10 -18
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +6 -10
- package/src/runtime/agent/orchestrator/session/manager.mjs +1 -2
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +11 -6
- package/src/runtime/agent/orchestrator/session/result-classification.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +194 -0
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +6 -198
- package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +7 -7
- package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +0 -19
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +15 -8
- package/src/runtime/agent/orchestrator/session/store/listing.mjs +18 -29
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +6 -36
- package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +148 -0
- package/src/runtime/agent/orchestrator/session/store/save-fault.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +15 -142
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +9 -22
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +14 -6
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +200 -52
- package/src/runtime/agent/orchestrator/session/store-summary-log.mjs +81 -0
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +38 -4
- package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +5 -2
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +3 -5
- package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +54 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +5 -9
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +19 -8
- package/src/runtime/agent/orchestrator/session/tool-batch/flush.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/agent-envelope.mjs +489 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +419 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +358 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +157 -0
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +2 -3
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +32 -11
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -31
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/benign-exit.mjs +7 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +11 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +4 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +13 -7
- package/src/runtime/agent/orchestrator/tools/builtin/binary-file.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +11 -5
- package/src/runtime/agent/orchestrator/tools/builtin/device-paths.mjs +1 -206
- package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +39 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +5 -7
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-request.mjs +7 -25
- package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +27 -1
- package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +37 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-insights.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +28 -18
- package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +6 -10
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +15 -17
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +1 -399
- package/src/runtime/agent/orchestrator/tools/builtin/read-line-collector.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-office-files.mjs +8 -15
- package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +5 -8
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-source-windows.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +6 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-dispatch.mjs +50 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-render.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-snapshot.mjs +2 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +11 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +3 -35
- package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +0 -12
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +9 -26
- package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +6 -5
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +8 -3
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +6 -14
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-validation.mjs +3 -9
- package/src/runtime/agent/orchestrator/tools/builtin/tool-output-limit.mjs +1 -60
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +10 -32
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/modes/calls.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/project-root.mjs +3 -7
- package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +15 -10
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +6 -10
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +4 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +3 -7
- package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +1 -84
- package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +11 -11
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/io-trace.mjs +28 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +38 -5
- package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +10 -4
- package/src/runtime/agent/orchestrator/tools/patch/apply-patch/codex-batch.mjs +6 -26
- package/src/runtime/agent/orchestrator/tools/patch/apply-patch/request.mjs +0 -3
- package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-report.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +3 -10
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/mutation-output.mjs +6 -19
- package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +5 -15
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +1 -3
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +4 -0
- package/src/runtime/agent/orchestrator/tools/patch/sequence/run.mjs +1 -3
- package/src/runtime/agent/orchestrator/tools/patch/sequence/units.mjs +4 -10
- package/src/runtime/agent/orchestrator/tools/patch/sequence.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +5 -11
- package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/patch-manifest-path.mjs +3 -0
- package/src/runtime/agent/orchestrator/tools/patch-manifest.json +12 -12
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +87 -12
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +15 -25
- package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
- package/src/runtime/{shared/llm → agent/orchestrator}/usage-log.mjs +1 -1
- package/src/runtime/attachments/pdf-extract.mjs +32 -29
- package/src/runtime/attachments/store.mjs +2 -1
- package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -2
- package/src/runtime/browser-bridge/client.mjs +30 -9
- package/src/runtime/channels/data/voice-runtime-manifest.json +21 -21
- package/src/runtime/channels/lib/config.mjs +4 -4
- package/src/runtime/channels/lib/event-pipeline.mjs +3 -3
- package/src/runtime/channels/lib/event-queue.mjs +1 -0
- package/src/runtime/channels/lib/executor.mjs +3 -25
- package/src/runtime/channels/lib/runtime-paths.mjs +36 -41
- package/src/runtime/channels/lib/scheduler.mjs +28 -44
- package/src/runtime/{shared → channels/lib}/schedules-db.mjs +3 -3
- package/src/runtime/channels/lib/tool-dispatch.mjs +3 -8
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +19 -23
- package/src/runtime/channels/lib/voice-transcription.mjs +13 -9
- package/src/runtime/channels/lib/webhook/log.mjs +2 -29
- package/src/runtime/channels/lib/webhook/request-handler.mjs +4 -5
- package/src/runtime/channels/lib/webhook/session-dispatch.mjs +8 -12
- package/src/runtime/channels/lib/webhook/signature.mjs +15 -19
- package/src/runtime/channels/lib/webhook/untrusted-fence.mjs +9 -0
- package/src/runtime/channels/lib/webhook.mjs +1 -1
- package/src/runtime/{shared → channels/lib}/webhooks-db.mjs +3 -3
- package/src/runtime/channels/lib/whisper-server.mjs +3 -2
- package/src/runtime/channels/lib/worker-bootstrap.mjs +19 -21
- package/src/runtime/channels/lib/worker-main.mjs +49 -58
- package/src/runtime/computer-bridge/client.mjs +7 -10
- package/src/runtime/computer-bridge/core-actions.mjs +1 -1
- package/src/runtime/computer-bridge/limits.d.mts +0 -1
- package/src/runtime/github/client.mjs +11 -6
- package/src/runtime/github/commands.mjs +4 -2
- package/src/runtime/github/contract.mjs +3 -1
- package/src/runtime/local-provider/hugging-face.mjs +3 -3
- package/src/runtime/local-provider/registered-models.mjs +3 -1
- package/src/runtime/local-provider/request-queue.mjs +24 -29
- package/src/runtime/local-provider/serial-chain.mjs +19 -0
- package/src/runtime/local-provider/server-process.mjs +2 -10
- package/src/runtime/media/adapters/antigravity-image.mjs +2 -2
- package/src/runtime/media/adapters/codex-image.mjs +2 -2
- package/src/runtime/media/adapters/gemini-image.mjs +2 -1
- package/src/runtime/media/adapters/gemini-video.mjs +3 -7
- package/src/runtime/media/adapters/xai-media.mjs +3 -7
- package/src/runtime/media/bounded-signal.mjs +13 -0
- package/src/runtime/media/store.mjs +9 -3
- package/src/runtime/memory/data/runtime-manifest.json +11 -11
- package/src/runtime/memory/index.mjs +6 -21
- package/src/runtime/memory/lib/core-memory-file.mjs +1 -1
- package/src/runtime/memory/lib/cycle-scheduler/backlog-probe.mjs +2 -1
- package/src/runtime/memory/lib/cycle1/cycle1-plan.mjs +1 -1
- package/src/runtime/memory/lib/embedding-idle-lease.mjs +18 -0
- package/src/runtime/memory/lib/embedding-provider.mjs +13 -0
- package/src/runtime/memory/lib/embedding-worker.mjs +12 -1
- package/src/runtime/memory/lib/http-router/ingest-routes.mjs +1 -1
- package/src/runtime/memory/lib/http-router/session-routes.mjs +1 -1
- package/src/runtime/memory/lib/ingest/transcript-discovery.mjs +1 -1
- package/src/runtime/memory/lib/memory-action-handlers/manage-actions.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle1.mjs +24 -1
- package/src/runtime/memory/lib/memory-cycle2-quarantine.mjs +99 -0
- package/src/runtime/memory/lib/memory-cycle2-review.mjs +8 -2
- package/src/runtime/memory/lib/memory-cycle2.mjs +49 -9
- package/src/runtime/memory/lib/memory-embed.mjs +3 -2
- package/src/runtime/memory/lib/memory-extraction.mjs +1 -2
- package/src/runtime/memory/lib/memory-fingerprint.mjs +1 -1
- package/src/runtime/memory/lib/memory-ops-policy.mjs +18 -2
- package/src/runtime/memory/lib/memory-retrievers.mjs +2 -2
- package/src/runtime/memory/lib/memory-text-utils.mjs +1 -1
- package/src/runtime/memory/lib/pg/adapter.mjs +3 -3
- package/src/runtime/memory/lib/pg/process.mjs +2 -2
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -2
- package/src/runtime/memory/lib/query-ranking.mjs +2 -2
- package/src/runtime/memory/lib/query-search-plan.mjs +1 -1
- package/src/runtime/memory/lib/recall-format.mjs +3 -4
- package/src/runtime/memory/lib/runtime-fetcher.mjs +94 -23
- package/src/runtime/memory/lib/session-ingest-runtime.mjs +1 -1
- package/src/runtime/memory/lib/trace-store.mjs +6 -2
- package/src/runtime/office/authoring/pptx-author-action.mjs +8 -3
- package/src/runtime/office/authoring/pptx-brief.mjs +3 -3
- package/src/runtime/office/authoring/pptx-html-build.mjs +109 -37
- package/src/runtime/office/authoring/pptx-html-geometry.mjs +188 -46
- package/src/runtime/office/authoring/pptx-html-measure.mjs +60 -21
- package/src/runtime/office/authoring/pptx-html-runner.mjs +83 -29
- package/src/runtime/office/authoring/pptx-script-normalize.mjs +156 -16
- package/src/runtime/office/bench/polish-benchmark.mjs +204 -201
- package/src/runtime/office/bench/quality-live-benchmark.mjs +8 -4
- package/src/runtime/office/capabilities-catalog.mjs +12 -1
- package/src/runtime/office/capabilities-signatures.mjs +31 -11
- package/src/runtime/office/capabilities.mjs +39 -20
- package/src/runtime/office/com/com-adapter.mjs +16 -14
- package/src/runtime/office/com/office-com-host.ps1 +118 -140
- package/src/runtime/office/core/excel-snapshot-normalize.mjs +149 -0
- package/src/runtime/office/core/office-actions-batch.mjs +4 -7
- package/src/runtime/office/core/office-actions-inspect.mjs +17 -14
- package/src/runtime/office/core/office-actions-open.mjs +1 -6
- package/src/runtime/office/core/office-core.mjs +107 -49
- package/src/runtime/office/core/office-finalize/review-stage.mjs +4 -1
- package/src/runtime/office/core/office-qa/design-review-stage.mjs +2 -9
- package/src/runtime/office/core/office-qa/review-assembly.mjs +9 -7
- package/src/runtime/office/core/office-sessions.mjs +10 -149
- package/src/runtime/office/design/composition-system.mjs +5 -10
- package/src/runtime/office/design/design-system.mjs +1 -2
- package/src/runtime/office/design/docx/design-docx/section.mjs +1 -1
- package/src/runtime/office/design/docx/design-docx-components.mjs +2 -1
- package/src/runtime/office/design/docx/design-docx.mjs +2 -2
- package/src/runtime/office/design/xlsx/design-xlsx.mjs +6 -2
- package/src/runtime/office/pdf/pdf-analysis.mjs +39 -32
- package/src/runtime/office/pdf/pdf-batch-content.mjs +1 -1
- package/src/runtime/office/pdf/pdf-writer.mjs +26 -22
- package/src/runtime/office/portable/docx-tracked-edits.mjs +6 -6
- package/src/runtime/office/portable/font-provisioner.mjs +37 -11
- package/src/runtime/office/portable/portable-cells.mjs +2 -6
- package/src/runtime/office/portable/portable-chart.mjs +6 -6
- package/src/runtime/office/portable/portable-docx-edits.mjs +4 -9
- package/src/runtime/office/portable/portable-docx-operations.mjs +16 -13
- package/src/runtime/office/portable/portable-docx-parts.mjs +7 -2
- package/src/runtime/office/portable/portable-docx-xml.mjs +36 -28
- package/src/runtime/office/portable/portable-opc.mjs +11 -13
- package/src/runtime/office/portable/portable-package.mjs +3 -4
- package/src/runtime/office/portable/portable-pivot.mjs +7 -3
- package/src/runtime/office/portable/portable-pptx-charts.mjs +59 -42
- package/src/runtime/office/portable/portable-pptx-core.mjs +14 -4
- package/src/runtime/office/portable/portable-pptx-package.mjs +5 -4
- package/src/runtime/office/portable/portable-pptx-shapes.mjs +25 -8
- package/src/runtime/office/portable/portable-sheet-audits.mjs +4 -8
- package/src/runtime/office/portable/portable-sheet-page.mjs +2 -2
- package/src/runtime/office/portable/portable-sheet-xml.mjs +1 -1
- package/src/runtime/office/portable/portable-snapshot-docx.mjs +2 -3
- package/src/runtime/office/portable/portable-snapshot-pptx.mjs +3 -1
- package/src/runtime/office/portable/portable-soffice.mjs +27 -22
- package/src/runtime/office/portable/portable-validation-package.mjs +1 -2
- package/src/runtime/office/portable/portable-validation.mjs +9 -3
- package/src/runtime/office/portable/portable-xlsx-operations.mjs +2 -49
- package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +10 -5
- package/src/runtime/office/portable/portable-xlsx-range-layout.mjs +3 -2
- package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +189 -98
- package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +26 -6
- package/src/runtime/office/portable/portable-xml.mjs +1 -4
- package/src/runtime/office/portable/text-metrics.mjs +14 -17
- package/src/runtime/office/portable/xlsx-contract.mjs +37 -3
- package/src/runtime/office/portable/xlsx-formula-engine.mjs +7 -1
- package/src/runtime/office/quality/assurance-checklist.mjs +1 -1
- package/src/runtime/office/quality/assurance-rendered.mjs +1 -1
- package/src/runtime/office/quality/assurance-structure-pptx.mjs +17 -8
- package/src/runtime/office/quality/assurance-structure.mjs +0 -2
- package/src/runtime/office/quality/design-aesthetics.mjs +2 -9
- package/src/runtime/office/quality/design-deck-diversity.mjs +2 -9
- package/src/runtime/office/quality/design-review.mjs +3 -3
- package/src/runtime/office/quality/pptx-slide-roles.mjs +3 -3
- package/src/runtime/office/shared/line-breaks.mjs +3 -1
- package/src/runtime/office/tool-defs.mjs +2 -2
- package/src/runtime/shared/async-log-appender.mjs +83 -0
- package/src/runtime/shared/automation-presence.mjs +9 -0
- package/src/runtime/shared/buffered-appender.mjs +10 -7
- package/src/runtime/shared/child-spawn-gate.mjs +2 -37
- package/src/runtime/shared/code-graph-state.mjs +84 -0
- package/src/runtime/shared/config.mjs +71 -89
- package/src/runtime/shared/context-inspection.mjs +56 -0
- package/src/runtime/shared/context-measurement.mjs +83 -0
- package/src/runtime/shared/device-paths.mjs +206 -0
- package/src/{standalone → runtime/shared}/fair-call-scheduler/owner-groups.mjs +1 -1
- package/src/runtime/shared/fair-call-scheduler.mjs +198 -0
- package/src/runtime/shared/file-lock.mjs +85 -55
- package/src/runtime/shared/http-request-body.mjs +3 -1
- package/src/runtime/shared/llm/anthropic-betas.mjs +46 -0
- package/src/runtime/shared/llm/anthropic-effort.mjs +378 -0
- package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +29 -0
- package/src/runtime/shared/llm/cost.mjs +19 -10
- package/src/runtime/shared/llm/model-catalog-projection.mjs +182 -0
- package/src/runtime/shared/llm/model-catalog.mjs +799 -0
- package/src/runtime/shared/llm/model-pricing-rates.mjs +78 -0
- package/src/runtime/shared/llm/provider-catalog-cache.mjs +130 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +12 -11
- package/src/runtime/shared/llm/usage-context.mjs +7 -0
- package/src/runtime/shared/llm/usage-ledger-import.mjs +14 -3
- package/src/runtime/shared/llm/usage-ledger-quota.mjs +97 -37
- package/src/runtime/shared/llm/usage-ledger-repair.mjs +3 -1
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +6 -10
- package/src/runtime/shared/llm/usage-ledger.mjs +6 -7
- package/src/runtime/shared/llm/usage-pricing-refresh.mjs +1 -1
- package/src/runtime/shared/llm/usage-rollup.mjs +0 -1
- package/src/runtime/shared/model-display.mjs +178 -0
- package/src/runtime/shared/notify-trace.mjs +14 -3
- package/src/runtime/shared/owner-fair-gate.mjs +1 -1
- package/src/runtime/shared/pending-json-projection.mjs +17 -0
- package/src/runtime/shared/pristine-execution.mjs +4 -3
- package/src/runtime/shared/process-lifecycle.mjs +18 -7
- package/src/runtime/shared/read-image-resize.mjs +399 -0
- package/src/runtime/shared/schedule-model-ref.mjs +2 -2
- package/src/runtime/shared/staged-update.mjs +7 -36
- package/src/runtime/shared/statusline/ansi.mjs +161 -0
- package/src/{ui → runtime/shared/statusline}/statusline-format.mjs +5 -5
- package/src/{ui → runtime/shared/statusline}/statusline-segments.mjs +54 -50
- package/src/runtime/shared/tool-card-model/background-task.mjs +1 -1
- package/src/runtime/shared/tool-card-model/card-detail.mjs +2 -2
- package/src/runtime/shared/tool-card-model/card-status.mjs +7 -5
- package/src/runtime/shared/tool-card-model/git-result.mjs +10 -0
- package/src/runtime/shared/tool-card-model/terminal-status.mjs +6 -2
- package/src/runtime/shared/tool-card-model.golden-cases.mjs +2 -1
- package/src/runtime/shared/tool-output-limit.mjs +60 -0
- package/src/runtime/shared/tool-primitives.mjs +1 -1
- package/src/runtime/shared/tool-result-summary.mjs +1 -0
- package/src/runtime/shared/tool-status.mjs +35 -2
- package/src/runtime/shared/transcript-metadata.mjs +1 -1
- package/src/runtime/shared/transcript-writer/transcript-file.mjs +1 -2
- package/src/runtime/shared/turn-snapshot-store.mjs +23 -17
- package/src/runtime/shared/turn-worktree-snapshot.mjs +8 -4
- package/src/runtime/shared/update-checker.mjs +1 -3
- package/src/runtime/tidy/apply.mjs +2 -2
- package/src/runtime/tidy/function-length.mjs +63 -0
- package/src/runtime/tidy/report.mjs +6 -3
- package/src/runtime/tidy/runners/shared.mjs +1 -0
- package/src/runtime/tidy/runners/shellcheck.mjs +1 -1
- package/src/runtime/tidy/tool.mjs +10 -3
- package/src/runtime/web-search/index.mjs +6 -17
- package/src/runtime/web-search/lib/cache.mjs +8 -54
- package/src/runtime/web-search/lib/config.mjs +2 -6
- package/src/runtime/web-search/lib/debounced-json-writer.mjs +62 -0
- package/src/runtime/web-search/lib/http-fetch.mjs +24 -112
- package/src/runtime/web-search/lib/package-version.mjs +10 -0
- package/src/runtime/web-search/lib/ssrf-guard.mjs +34 -28
- package/src/runtime/web-search/lib/state.mjs +8 -53
- package/src/runtime/web-search/lib/web-tools.mjs +5 -5
- package/src/session-runtime/agent-tool-routing.mjs +3 -9
- package/src/{runtime/shared → session-runtime}/automation-workflow.mjs +4 -4
- package/src/session-runtime/boot/apis.mjs +4 -5
- package/src/session-runtime/boot/begin.mjs +1 -1
- package/src/session-runtime/boot/config.mjs +2 -2
- package/src/session-runtime/boot/facade.mjs +2 -2
- package/src/session-runtime/boot/infrastructure.mjs +4 -4
- package/src/session-runtime/boot/providers.mjs +6 -6
- package/src/session-runtime/boot/session.mjs +1 -1
- package/src/session-runtime/boot/shared.mjs +5 -7
- package/src/session-runtime/boot/tools.mjs +6 -6
- package/src/session-runtime/bridge-first-use-gate.mjs +1 -1
- package/src/session-runtime/builtin-features.mjs +1 -193
- package/src/session-runtime/channel-config-api.mjs +3 -3
- package/src/session-runtime/config-helpers.mjs +1 -420
- package/src/session-runtime/config-lifecycle.mjs +2 -2
- package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -2
- package/src/session-runtime/cwd-plugins/plugin-status.mjs +1 -1
- package/src/session-runtime/deferred-tool-delta.mjs +1 -101
- package/src/session-runtime/effort.mjs +1 -145
- package/src/session-runtime/goal-facade-api.mjs +1 -1
- package/src/session-runtime/goal-state.mjs +1 -325
- package/src/session-runtime/goal-tasks.mjs +1 -137
- package/src/session-runtime/goal-tool-defs.mjs +1 -140
- package/src/session-runtime/hook-payload.mjs +4 -5
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -3
- package/src/session-runtime/internal-tool-executor/caller-context.mjs +8 -0
- package/src/session-runtime/internal-tool-executor/feature-tools.mjs +3 -2
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +4 -6
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +2 -2
- package/src/session-runtime/internal-tool-executor.mjs +1 -1
- package/src/session-runtime/lifecycle/inheritance.mjs +1 -1
- package/src/session-runtime/lifecycle/session-catalog.mjs +3 -3
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +2 -2
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +1 -1
- package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
- package/src/session-runtime/lifecycle/shared.mjs +1 -1
- package/src/session-runtime/mcp-glue/connect.mjs +1 -1
- package/src/session-runtime/mcp-glue/server-catalog.mjs +1 -1
- package/src/session-runtime/mcp-glue/server-input.mjs +1 -1
- package/src/session-runtime/model-capabilities.mjs +1 -140
- package/src/session-runtime/model-recency.mjs +1 -1
- package/src/session-runtime/model-route/route-persist.mjs +2 -2
- package/src/session-runtime/model-route/route-tuning.mjs +3 -3
- package/src/session-runtime/model-route/set-route.mjs +6 -6
- package/src/session-runtime/model-route/web-search-route.mjs +5 -5
- package/src/session-runtime/model-route-api.mjs +1 -1
- package/src/session-runtime/native-web-search/routes.mjs +1 -1
- package/src/session-runtime/native-web-search/tool-shape.mjs +2 -2
- package/src/session-runtime/output-styles.mjs +2 -2
- package/src/session-runtime/prewarm/channel-start.mjs +1 -0
- package/src/session-runtime/provider-auth/accounts.mjs +7 -2
- package/src/session-runtime/provider-auth/login.mjs +1 -1
- package/src/session-runtime/provider-auth-api.mjs +1 -1
- package/src/session-runtime/provider-models/model-meta.mjs +1 -1
- package/src/session-runtime/provider-models/row-hydration.mjs +3 -3
- package/src/session-runtime/provider-usage.mjs +2 -2
- package/src/session-runtime/quick-model-rows/model-meta.mjs +1 -1
- package/src/session-runtime/quick-model-rows/provider-rows.mjs +1 -1
- package/src/session-runtime/quick-model-rows/web-search-rows.mjs +2 -2
- package/src/session-runtime/resource-api.mjs +2 -2
- package/src/session-runtime/resource-mcp-api.mjs +3 -3
- package/src/session-runtime/resource-plugins-api.mjs +3 -3
- package/src/session-runtime/resource-recall-api.mjs +2 -2
- package/src/session-runtime/resource-scope-decorate.mjs +2 -2
- package/src/session-runtime/route-resolution.mjs +3 -3
- package/src/session-runtime/route-state.mjs +4 -4
- package/src/session-runtime/runtime-bootstrap.mjs +1 -1
- package/src/session-runtime/runtime-facade.mjs +1 -1
- package/src/session-runtime/runtime-feature-gates.mjs +2 -2
- package/src/session-runtime/runtime-modules.mjs +3 -3
- package/src/session-runtime/runtime-paths.mjs +6 -2
- package/src/session-runtime/runtime-tool-routing.mjs +2 -2
- package/src/{runtime/shared → session-runtime}/schedule-session-run.mjs +5 -5
- package/src/{standalone → session-runtime/services}/agent-task-status.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/close-flow/close-all.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/close-flow.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/execute.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/helpers.mjs +6 -6
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +209 -0
- package/src/{standalone → session-runtime/services}/agent-tool/job-task-reconcile.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-lookup.mjs +5 -1
- package/src/{standalone → session-runtime/services}/agent-tool/job-views/job-render.mjs +1 -1
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +101 -0
- package/src/{standalone → session-runtime/services}/agent-tool/job-views/spawn-meta.mjs +1 -1
- package/src/session-runtime/services/agent-tool/job-views.mjs +59 -0
- package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +48 -0
- package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/row-settlement.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index.mjs +10 -2
- package/src/{standalone → session-runtime/services}/agent-tool/notify/early-completion.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/notify.mjs +4 -4
- package/src/{standalone → session-runtime/services}/agent-tool/render.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/send-flow.mjs +6 -2
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/job-start.mjs +2 -2
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-plan.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-prep.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/spawn-run.mjs +3 -3
- package/src/{standalone → session-runtime/services}/agent-tool/spawn-preset.mjs +1 -1
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +121 -0
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/reap-timers.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/scan-admission.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/stale-rows.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/tombstones.mjs +5 -2
- package/src/session-runtime/services/agent-tool/tool-def.mjs +60 -0
- package/src/{standalone → session-runtime/services}/agent-tool/turn-review.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-liveness.mjs +1 -1
- package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-store.mjs +46 -20
- package/src/{standalone → session-runtime/services}/agent-tool/worker-index.mjs +8 -1
- package/src/{standalone → session-runtime/services}/agent-tool/worker-rows.mjs +1 -1
- package/src/session-runtime/services/agent-tool.mjs +151 -0
- package/src/{standalone → session-runtime/services}/agent-watchdog-registry.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-admin.mjs +8 -10
- package/src/{standalone → session-runtime/services}/channel-client.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-session-router.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-worker/client-heartbeat.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-worker/daemon-attach.mjs +1 -1
- package/src/{standalone → session-runtime/services}/channel-worker/daemon-spawn.mjs +5 -5
- package/src/session-runtime/services/channel-worker.mjs +140 -0
- package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +189 -0
- package/src/{standalone → session-runtime/services}/daemon-crash-capture/retention.mjs +1 -1
- package/src/{standalone → session-runtime/services}/daemon-crash-capture/spawn-capture.mjs +12 -1
- package/src/{standalone → session-runtime/services}/daemon-crash-capture.mjs +6 -0
- package/src/{standalone → session-runtime/services}/hook-bus/command-handler.mjs +1 -1
- package/src/{standalone → session-runtime/services}/hook-bus/event-runner.mjs +1 -1
- package/src/{standalone → session-runtime/services}/hook-bus/handler-dispatch.mjs +1 -1
- package/src/{standalone → session-runtime/services}/hook-bus/handlers.mjs +5 -4
- package/src/{standalone → session-runtime/services}/hook-bus/rule-file.mjs +2 -2
- package/src/{standalone → session-runtime/services}/hook-bus/tool-gate.mjs +1 -1
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/client-registry.mjs +1 -1
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/daemon-spawn.mjs +4 -4
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/discovery.mjs +5 -5
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/owner-claim.mjs +2 -2
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/rpc.mjs +0 -4
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/start.mjs +1 -1
- package/src/{standalone → session-runtime/services}/memory-runtime-proxy/tool-wire.mjs +1 -1
- package/src/session-runtime/services/memory-runtime-proxy.mjs +130 -0
- package/src/{standalone → session-runtime/services}/plugin-admin.mjs +6 -6
- package/src/session-runtime/services/provider-admin.mjs +576 -0
- package/src/{standalone → session-runtime/services}/seeds.mjs +3 -3
- package/src/{standalone → session-runtime/services}/usage-dashboard-model.mjs +1 -1
- package/src/session-runtime/services/usage-dashboard.mjs +278 -0
- package/src/{standalone → session-runtime/services}/usage-stats-hours.mjs +1 -1
- package/src/session-runtime/services/usage-stats-model.mjs +657 -0
- package/src/session-runtime/services/usage-stats-period.mjs +178 -0
- package/src/session-runtime/session-create/materialize.mjs +3 -3
- package/src/session-runtime/session-create/session-options.mjs +14 -7
- package/src/session-runtime/session-lifecycle.mjs +2 -2
- package/src/session-runtime/settings-builtin-tools-api.mjs +1 -1
- package/src/session-runtime/setup-tool/executor.mjs +2 -2
- package/src/session-runtime/skills-api.mjs +2 -2
- package/src/session-runtime/statusline-route.mjs +1 -1
- package/src/session-runtime/tool-catalog.mjs +1 -753
- package/src/session-runtime/tool-defs.mjs +1 -149
- package/src/session-runtime/tool-policy-refresh.mjs +7 -5
- package/src/session-runtime/tool-surface.mjs +5 -5
- package/src/session-runtime/turn/agent-ops.mjs +2 -2
- package/src/session-runtime/turn/session-ops.mjs +2 -2
- package/src/session-runtime/turn/share-ops.mjs +4 -3
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +1 -1
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +4 -4
- package/src/session-runtime/usage-stats-api.mjs +18 -2
- package/src/session-runtime/warmup/statusline-usage-warmup.mjs +2 -2
- package/src/{runtime/shared → session-runtime}/webhook-session-run.mjs +5 -5
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +2 -2
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +4 -4
- package/src/session-runtime/workflow-agents-api/onboarding.mjs +2 -2
- package/src/session-runtime/workflow-agents-api/shared.mjs +4 -6
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +1 -1
- package/src/session-runtime/workflow.mjs +1 -255
- package/src/standalone/agent-tool/job-views/session-progress.mjs +1 -101
- package/src/standalone/agent-tool/job-views.mjs +1 -59
- package/src/standalone/agent-tool/tag-registry.mjs +1 -121
- package/src/standalone/agent-tool/tool-def.mjs +1 -60
- package/src/standalone/agent-tool.mjs +1 -151
- package/src/standalone/channel-worker.mjs +1 -140
- package/src/standalone/daemon-agent-control.mjs +1 -1
- package/src/standalone/daemon-desktop-runtime.mjs +2 -2
- package/src/standalone/daemon-stored-session-views.mjs +1 -1
- package/src/standalone/daemon.mjs +38 -5
- package/src/standalone/fair-call-scheduler.mjs +1 -198
- package/src/standalone/folder-dialog.mjs +12 -8
- package/src/standalone/memory-runtime-proxy.mjs +1 -130
- package/src/standalone/provider-admin.mjs +1 -576
- package/src/standalone/session-client/frame-stream.mjs +1 -1
- package/src/standalone/session-client.mjs +2 -2
- package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -1
- package/src/standalone/session-service/projection/transcript-window.mjs +2 -2
- package/src/standalone/usage-dashboard.mjs +1 -278
- package/src/standalone/usage-stats-model.mjs +1 -653
- package/src/standalone/usage-stats-period.mjs +1 -178
- package/src/tui/App.jsx +107 -256
- package/src/tui/app/app-view/floating-panel.jsx +3 -12
- package/src/tui/app/app-view/welcome-banner.jsx +36 -0
- package/src/tui/app/app-view.jsx +18 -45
- package/src/tui/app/create-app-pickers.mjs +1 -1
- package/src/tui/app/doctor.mjs +15 -1
- package/src/tui/app/extension-pickers/mcp-servers-picker.mjs +7 -3
- package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +5 -8
- package/src/tui/app/model-options.mjs +2 -3
- package/src/tui/app/model-picker/model-footer.mjs +1 -1
- package/src/tui/app/model-picker/route-selection.mjs +1 -3
- package/src/tui/app/mouse-input/button-gestures.mjs +13 -31
- package/src/tui/app/mouse-input/wheel-router.mjs +22 -32
- package/src/tui/app/picker-enter-latch.mjs +21 -0
- package/src/tui/app/picker-index-mode.mjs +34 -0
- package/src/tui/app/shell-layout/panel-transition.mjs +7 -12
- package/src/tui/app/shell-layout/row-budgets.mjs +4 -9
- package/src/tui/app/slash-palette.mjs +31 -0
- package/src/tui/app/text-layout.mjs +1 -1
- package/src/tui/app/theme-effort-pickers.mjs +1 -1
- package/src/tui/app/transcript-window.mjs +1 -5
- package/src/tui/app/usage-context-panels/context-model.mjs +1 -1
- package/src/tui/app/use-global-key-input.mjs +0 -1
- package/src/tui/app/use-interaction-refs.mjs +55 -0
- package/src/tui/app/use-onboarding-start.mjs +45 -0
- package/src/tui/app/use-panel-transition.mjs +40 -0
- package/src/tui/app/use-prompt-draft-flow.mjs +4 -13
- package/src/tui/app/use-prompt-layout-rows.mjs +39 -0
- package/src/tui/app/use-prompt-queue-history/prompt-history.mjs +1 -1
- package/src/tui/app/use-prompt-state.mjs +40 -0
- package/src/tui/app/use-selection-paint.mjs +9 -5
- package/src/tui/app/use-transcript-scroll-state.mjs +61 -0
- package/src/tui/app/use-transcript-window.mjs +0 -1
- package/src/tui/app/use-ui-open-request.mjs +18 -0
- package/src/tui/app/use-workflow-tab-cycle.mjs +39 -0
- package/src/tui/components/ContextInspector.jsx +1 -1
- package/src/tui/components/ContextPanel.jsx +1 -1
- package/src/tui/components/Picker.jsx +41 -322
- package/src/tui/components/PromptInput.jsx +34 -468
- package/src/tui/components/StatusLine.jsx +8 -555
- package/src/tui/components/TextEntryPanel.jsx +25 -211
- package/src/tui/components/ToolExecution.jsx +43 -328
- package/src/tui/components/UsagePanel.jsx +1 -1
- package/src/tui/components/picker/PickerItemRow.jsx +85 -0
- package/src/tui/components/picker/picker-layout.mjs +46 -0
- package/src/tui/components/picker/use-picker-input.mjs +165 -0
- package/src/tui/components/picker/use-picker-selection.mjs +67 -0
- package/src/tui/components/prompt-input/edit-chords.mjs +87 -0
- package/src/tui/components/prompt-input/edit-helpers.mjs +15 -12
- package/src/tui/components/prompt-input/escape-key.mjs +87 -0
- package/src/tui/components/prompt-input/key-handler.mjs +364 -0
- package/src/tui/components/status-line/boot-schedule.mjs +83 -0
- package/src/tui/components/status-line/local-line.mjs +213 -0
- package/src/tui/components/status-line/use-statusline-text.mjs +319 -0
- package/src/tui/components/statusline-module-loader.mjs +21 -0
- package/src/tui/components/text-entry-layout.mjs +104 -0
- package/src/tui/components/text-entry-value.jsx +47 -0
- package/src/tui/components/tool-execution/aggregate-card.jsx +141 -0
- package/src/tui/components/tool-execution/pending-placeholder.jsx +24 -0
- package/src/tui/components/tool-execution/standard-card.jsx +229 -0
- package/src/tui/components/tool-output-format.mjs +3 -5
- package/src/tui/dist/index.mjs +3616 -3022
- package/src/tui/index.jsx +85 -66
- package/src/tui/markdown/format-token.mjs +3 -3
- package/src/tui/paste-attachments.mjs +1 -1
- package/src/tui/prompt-history-store.mjs +17 -6
- package/src/tui/session/agent-envelope.mjs +1 -489
- package/src/tui/session/context-state.mjs +2 -2
- package/src/tui/session/goal-continuation/continuation-queue.mjs +1 -1
- package/src/tui/session/goal-continuation/deadline-delivery.mjs +1 -1
- package/src/tui/session/goal-continuation/goal-visibility.mjs +1 -1
- package/src/tui/session/initial-state.mjs +1 -1
- package/src/tui/session/live-share/wire.mjs +3 -0
- package/src/tui/session/oauth-flows.mjs +1 -7
- package/src/tui/session/session-api/commands.mjs +5 -3
- package/src/tui/session/session-api/controls.mjs +1 -1
- package/src/tui/session/session-api/intake/submission.mjs +8 -3
- package/src/tui/session/session-api/integrations.mjs +1 -1
- package/src/tui/session/session-api/routes.mjs +9 -8
- package/src/tui/session/session-api/settings.mjs +24 -23
- package/src/tui/session/session-api/shared.mjs +13 -2
- package/src/tui/session/session-api-ext.mjs +7 -415
- package/src/tui/session/session-flow/drain.mjs +86 -82
- package/src/tui/session/session-flow/queue.mjs +3 -1
- package/src/tui/session/tool-result-status.mjs +1 -354
- package/src/tui/session/tool-result-text.mjs +1 -157
- package/src/tui/session/transcript-intake.mjs +1 -1
- package/src/tui/session/transcript-spill/spill-dir.mjs +4 -1
- package/src/tui/session/transcript-spill/spill-writer.mjs +1 -1
- package/src/tui/session/tui-steering-persist.mjs +44 -86
- package/src/tui/session-local.mjs +8 -5
- package/src/tui/statusline-ansi-bridge.mjs +1 -1
- package/src/tui/theme.mjs +1 -1
- package/src/ui/ansi.mjs +1 -161
- package/src/ui/context-inspection.mjs +1 -56
- package/src/ui/context-measurement.mjs +1 -83
- package/src/ui/markdown.mjs +3 -3
- package/src/ui/model-display.mjs +1 -173
- package/src/ui/statusline-agents.mjs +22 -21
- package/src/ui/statusline.mjs +21 -24
- package/src/ui/stream-finalize.mjs +1 -1
- package/src/ui/tool-card.mjs +1 -1
- package/src/vendor/statusline/src/gateway/route-meta.mjs +157 -29
- package/scripts/fixtures/spawn-lease-child-harness.mjs +0 -8
- package/scripts/fixtures/spawn-lease-fixture-worker.mjs +0 -37
- package/src/runtime/agent/orchestrator/activity-bus.mjs +0 -31
- package/src/runtime/shared/child-spawn-remote.mjs +0 -210
- package/src/runtime/shared/session-runtime-health.mjs +0 -201
- package/src/standalone/agent-tool/lead-worker-index/index-file.mjs +0 -45
- package/src/standalone/session-runtime-agent-control-client.mjs +0 -117
- package/src/standalone/session-runtime-agent-control.mjs +0 -85
- package/src/standalone/session-runtime-host-factory.mjs +0 -22
- package/src/standalone/session-runtime-host.mjs +0 -742
- package/src/standalone/session-runtime-provider-cooldown.mjs +0 -78
- package/src/standalone/session-runtime-proxy.mjs +0 -164
- package/src/standalone/session-runtime-record.mjs +0 -18
- package/src/standalone/session-runtime-shard-router.mjs +0 -151
- package/src/standalone/session-runtime-spawn-leases.mjs +0 -82
- package/src/standalone/session-runtime-worker.mjs +0 -678
- package/src/standalone/session-runtime-workload.mjs +0 -98
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/context-status-cache.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/deferred-tool-availability.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-deadlines.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-runtime.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-store.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-text.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/goal-tool-exec.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-snapshot.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/provider-request-tools.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-catalog-data.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/tool-profile.mjs +0 -0
- /package/src/{session-runtime → runtime/agent/orchestrator/runtime-core}/workflow/shared-scan-cache.mjs +0 -0
- /package/src/{standalone → runtime/shared}/fair-call-scheduler/queue-item.mjs +0 -0
- /package/src/runtime/{agent/orchestrator/providers → shared/llm}/provider-model-identities.mjs +0 -0
- /package/src/{standalone → runtime/shared}/projects.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/execute-send.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/execute-spawn.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/job-views/agent-list.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/lead-rows.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/lead-worker-index/reap-timers.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/provider-init.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow/deferred-spawn.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/spawn-flow.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/tag-maps.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-lookup.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/tag-registry/tag-refresh.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper/row-helpers.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/terminal-reaper.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/terminal-trace.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/mutation-batch.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/agent-tool/worker-index/row-shape.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/daemon-request.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/notify-stream.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/reconnect.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/channel-client/registration.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/daemon-candidate.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/daemon-crash-capture/paths.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/config-loader.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/config.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/constants.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/event-log.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/handler-timeout.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/payload.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/rule-store.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus/rules.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/hook-bus.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/calls.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/memory-runtime-proxy/state.mjs +0 -0
- /package/src/{standalone → session-runtime/services}/sse-frames.mjs +0 -0
|
@@ -10,24 +10,7 @@ import {
|
|
|
10
10
|
toAnthropicMessages,
|
|
11
11
|
} from './lib/anthropic-request-utils.mjs';
|
|
12
12
|
import { _capabilitySupported, _defaultContextForModel, _prettyName, modelTier } from './anthropic-model-resolve.mjs';
|
|
13
|
-
|
|
14
|
-
// System blocks carry their own cache tier; anything else is the default tier.
|
|
15
|
-
const SYSTEM_CACHE_TIERS = new Set(['tier3', 'env']);
|
|
16
|
-
const systemCacheTier = (cacheTier) => (SYSTEM_CACHE_TIERS.has(cacheTier) ? cacheTier : 'system');
|
|
17
|
-
|
|
18
|
-
/** Non-empty system messages as `{ text, tier }` block items; a non-array yields none. */
|
|
19
|
-
export function systemBlockItems(systemMsgs) {
|
|
20
|
-
const items = [];
|
|
21
|
-
for (const m of Array.isArray(systemMsgs) ? systemMsgs : []) {
|
|
22
|
-
const text = typeof m?.content === 'string' ? m.content.trim() : '';
|
|
23
|
-
if (text) items.push({ text, tier: systemCacheTier(m?.cacheTier) });
|
|
24
|
-
}
|
|
25
|
-
return items;
|
|
26
|
-
}
|
|
27
|
-
/** cacheTier:'env' (volatile session/project environment) is never marked —
|
|
28
|
-
* it rides the messages-tail breakpoint; a null TTL leaves the block uncached. */
|
|
29
|
-
export const systemBlockTtl = (tier, { tier3Ttl, systemTtl }) =>
|
|
30
|
-
({ tier3: tier3Ttl, env: null, system: systemTtl })[tier];
|
|
13
|
+
import { systemBlockItems, systemBlockTtl } from './lib/anthropic-system-blocks.mjs';
|
|
31
14
|
|
|
32
15
|
// Message lowering lives in the shared request-utils lib (one implementation
|
|
33
16
|
// for both Anthropic providers); re-exported here for existing importers.
|
|
@@ -82,15 +65,6 @@ export function buildSystemBlocks(systemMsgs, systemTtl, tier3Ttl) {
|
|
|
82
65
|
});
|
|
83
66
|
}
|
|
84
67
|
|
|
85
|
-
// Offline fallback for both Anthropic routes when /v1/models is unavailable:
|
|
86
|
-
// the current generation only, one id per family.
|
|
87
|
-
export const MODELS = [
|
|
88
|
-
{ id: 'claude-opus-5-5', name: 'Claude Opus 5.5', provider: 'anthropic', family: 'opus', contextWindow: 1000000 },
|
|
89
|
-
{ id: 'claude-fable-5-1', name: 'Claude Fable 5.1', provider: 'anthropic', family: 'fable', contextWindow: 1000000 },
|
|
90
|
-
{ id: 'claude-sonnet-5', name: 'Claude Sonnet 5', provider: 'anthropic', family: 'sonnet', contextWindow: 1000000 },
|
|
91
|
-
];
|
|
92
|
-
export const ANTHROPIC_VERSION = '2023-06-01';
|
|
93
|
-
|
|
94
68
|
export function _normalizeAnthropicModel(raw, provider = 'anthropic') {
|
|
95
69
|
const id = raw?.id || raw?.name || raw?.model;
|
|
96
70
|
if (!id) return null;
|
|
@@ -110,7 +84,7 @@ export function _normalizeAnthropicModel(raw, provider = 'anthropic') {
|
|
|
110
84
|
raw?.max_input_tokens ||
|
|
111
85
|
raw?.input_token_limit ||
|
|
112
86
|
raw?.inputTokenLimit ||
|
|
113
|
-
_defaultContextForModel(id
|
|
87
|
+
_defaultContextForModel(id),
|
|
114
88
|
outputTokens: raw?.max_tokens || raw?.max_output_tokens || raw?.output_token_limit || raw?.outputTokenLimit || null,
|
|
115
89
|
tier: modelTier(dated, versioned),
|
|
116
90
|
latest: false,
|
|
@@ -118,8 +92,6 @@ export function _normalizeAnthropicModel(raw, provider = 'anthropic') {
|
|
|
118
92
|
reasoningOptions: effortValues.length ? [{ type: 'effort', values: effortValues }] : [],
|
|
119
93
|
};
|
|
120
94
|
}
|
|
121
|
-
// Family-based heuristic so new model ids (including custom user-configured
|
|
122
|
-
// ones) resolve a sensible max_tokens without requiring a code change.
|
|
123
95
|
// The API-key provider has no catalog cache of its own — it reads the same
|
|
124
96
|
// anthropic-oauth-models.json disk cache (read-only) that the OAuth provider
|
|
125
97
|
// maintains. Both providers hit the same Anthropic /v1/models catalog, so a
|
|
@@ -170,21 +142,6 @@ export const _test = {
|
|
|
170
142
|
sanitizeInputSchema: (schema, toolName) => sanitizeAnthropicInputSchema(schema, toolName, 'anthropic'),
|
|
171
143
|
};
|
|
172
144
|
|
|
173
|
-
// Anthropic forbids oneOf / allOf / anyOf at the TOP level of input_schema.
|
|
174
|
-
// Mirror the same sanitizer as anthropic-oauth.mjs so both providers are safe.
|
|
175
|
-
// Map the orchestrator-level opts.toolChoice into Anthropic's tool_choice.
|
|
176
|
-
// Only 'none' is activated: it lets the hard-cap final turn keep the tool
|
|
177
|
-
// DEFINITIONS in-request (so the tools->system->messages prefix — and its
|
|
178
|
-
// prompt-cache prefix — stay byte-identical to prior turns) while forbidding
|
|
179
|
-
// tool USE, so the model can only emit text. Forced values
|
|
180
|
-
// ('required'->{type:'any'}, {name}->{type:'tool'}) are deliberately NOT
|
|
181
|
-
// mapped: Anthropic returns a 400 for any forced tool_choice while
|
|
182
|
-
// extended/adaptive thinking is enabled, and the only caller that sets
|
|
183
|
-
// opts.toolChoice='required' (the forced-first-tool turn) runs with
|
|
184
|
-
// effort/thinking active on reasoning models — activating it would convert a
|
|
185
|
-
// previously-harmless no-op into a hard 400 on exactly that turn. Attached
|
|
186
|
-
// only when the request actually carries tools (see _doSend). Mirrors
|
|
187
|
-
// anthropic-oauth.mjs.
|
|
188
145
|
function deferredAnthropicTools(activeTools, messages, opts) {
|
|
189
146
|
return sharedDeferredAnthropicTools(activeTools, messages, opts, 'anthropic');
|
|
190
147
|
}
|
|
@@ -197,17 +154,3 @@ export function requestAnthropicTools(tools, messages, opts) {
|
|
|
197
154
|
export function _toAnthropicMessagesForTest(messages, availableTools) {
|
|
198
155
|
return toAnthropicMessages(messages, availableTools);
|
|
199
156
|
}
|
|
200
|
-
|
|
201
|
-
// Applies cache_control markers to the FINAL, already-sanitized Anthropic
|
|
202
|
-
// message array — by INVARIANT, never by pre-sanitize index. Because
|
|
203
|
-
// sanitizeAnthropicContentPairs has already run (and must NOT run again
|
|
204
|
-
// after this), the blocks we mark here are exactly the blocks the provider
|
|
205
|
-
// sees, so the cache breakpoint is stable across turns.
|
|
206
|
-
// message-anchor: prefer a safe tool_result tail, then a previous real user
|
|
207
|
-
// text turn if another slot remains. Synthetic
|
|
208
|
-
// synthetic reminder messages and current pure-text prompts
|
|
209
|
-
// are excluded so per-call prompt content never becomes a
|
|
210
|
-
// 1h prefix key.
|
|
211
|
-
// messageTtl === null disables the tail. BP3 (tier3) now rides a system block,
|
|
212
|
-
// so it is no longer marked here.
|
|
213
|
-
// ANTHROPIC_MSG_SLOTS=0 is honoured upstream by passing messageTtl = null.
|
|
@@ -43,21 +43,6 @@ export function createAnthropicMidState(attemptIndex) {
|
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
/**
|
|
47
|
-
* @param {object} deps
|
|
48
|
-
* @param {string} deps.label stderr log tag (provider instance name)
|
|
49
|
-
* @param {string} deps.outcomeProvider provider id on the canonical outcome stamp
|
|
50
|
-
* @param {string} deps.midstreamOwner recovery owner recorded when retries are exhausted
|
|
51
|
-
* @param {string} deps.unreachableMessage message of the never-observed loop-exit error
|
|
52
|
-
* @param {boolean} [deps.initialResponseErrorTerminal] true when the caller's
|
|
53
|
-
* request-level retry already spent the budget for a non-OK initial response,
|
|
54
|
-
* so such an error must not earn an extra SSE retry here
|
|
55
|
-
* @param {number} deps.maxRetries bounded mid-stream retries for transient stream loss
|
|
56
|
-
* @param {AbortSignal|null} deps.totalSignal
|
|
57
|
-
* @param {{ recoverNonStreaming: Function, issueNonStreamingFallback: Function, requireTransportRecoveryBudget: Function }} deps.recovery
|
|
58
|
-
* @param {Function|null} [deps.onStageChange] receives the display-only 'reconnecting' stage per retry
|
|
59
|
-
* @param {boolean} [deps.retry529] false for a background call: an overload mid-stream is not retried
|
|
60
|
-
*/
|
|
61
46
|
/**
|
|
62
47
|
* Empty-stream guard. Invariant: a valid Anthropic SSE response ALWAYS opens
|
|
63
48
|
* with message_start (which carries usage.input_tokens). A 200 whose body
|
|
@@ -87,8 +72,25 @@ export function assertAnthropicStreamNotEmpty(midState, result, label) {
|
|
|
87
72
|
}
|
|
88
73
|
}
|
|
89
74
|
|
|
75
|
+
/**
|
|
76
|
+
* @param {object} deps
|
|
77
|
+
* @param {string} deps.label stderr log tag (provider instance name)
|
|
78
|
+
* @param {string} [deps.displayName] provider name in error text (default "Anthropic OAuth")
|
|
79
|
+
* @param {string} deps.outcomeProvider provider id on the canonical outcome stamp
|
|
80
|
+
* @param {string} deps.midstreamOwner recovery owner recorded when retries are exhausted
|
|
81
|
+
* @param {string} deps.unreachableMessage message of the never-observed loop-exit error
|
|
82
|
+
* @param {boolean} [deps.initialResponseErrorTerminal] true when the caller's
|
|
83
|
+
* request-level retry already spent the budget for a non-OK initial response,
|
|
84
|
+
* so such an error must not earn an extra SSE retry here
|
|
85
|
+
* @param {number} deps.maxRetries bounded mid-stream retries for transient stream loss
|
|
86
|
+
* @param {AbortSignal|null} deps.totalSignal
|
|
87
|
+
* @param {{ recoverNonStreaming: Function, issueNonStreamingFallback: Function, requireTransportRecoveryBudget: Function }} deps.recovery
|
|
88
|
+
* @param {Function|null} [deps.onStageChange] receives the display-only 'reconnecting' stage per retry
|
|
89
|
+
* @param {boolean} [deps.retry529] false for a background call: an overload mid-stream is not retried
|
|
90
|
+
*/
|
|
90
91
|
export function createAnthropicMidstreamRecovery({
|
|
91
92
|
label,
|
|
93
|
+
displayName = 'Anthropic OAuth',
|
|
92
94
|
outcomeProvider,
|
|
93
95
|
midstreamOwner,
|
|
94
96
|
unreachableMessage,
|
|
@@ -108,17 +110,22 @@ export function createAnthropicMidstreamRecovery({
|
|
|
108
110
|
let firstAttemptClassifier = null;
|
|
109
111
|
const retry = { retry: true };
|
|
110
112
|
const settled = (value) => ({ retry: false, value });
|
|
113
|
+
const sleepBackoff = (ms) =>
|
|
114
|
+
_midstreamSleepWithAbort(ms, totalSignal, undefined, `${displayName} mid-stream retry backoff aborted`);
|
|
115
|
+
const abortStream = (controller, err) => {
|
|
116
|
+
try {
|
|
117
|
+
controller?.abort?.(err);
|
|
118
|
+
} catch {
|
|
119
|
+
/* best-effort teardown */
|
|
120
|
+
}
|
|
121
|
+
};
|
|
111
122
|
|
|
112
123
|
// Jittered backoff between streaming attempts; the dead stream is torn
|
|
113
124
|
// down first so its socket returns to the pool.
|
|
114
125
|
const retryStreaming = async ({ err, classifier, controller, attemptIndex, message, delayMs = null }) => {
|
|
115
126
|
firstAttemptError = err;
|
|
116
127
|
firstAttemptClassifier = classifier;
|
|
117
|
-
|
|
118
|
-
controller?.abort?.(err);
|
|
119
|
-
} catch {
|
|
120
|
-
/* best-effort teardown */
|
|
121
|
-
}
|
|
128
|
+
abortStream(controller, err);
|
|
122
129
|
log(message);
|
|
123
130
|
const waitMs = delayMs ?? midstreamBackoffFor(attemptIndex + 1);
|
|
124
131
|
emitProviderRetryStage(onStageChange, {
|
|
@@ -127,7 +134,7 @@ export function createAnthropicMidstreamRecovery({
|
|
|
127
134
|
lastErr: err,
|
|
128
135
|
delayMs: waitMs,
|
|
129
136
|
});
|
|
130
|
-
await
|
|
137
|
+
await sleepBackoff(waitMs);
|
|
131
138
|
return retry;
|
|
132
139
|
};
|
|
133
140
|
|
|
@@ -154,9 +161,7 @@ export function createAnthropicMidstreamRecovery({
|
|
|
154
161
|
// agent loop retracts any exposed text and replays it with a split-call
|
|
155
162
|
// notice.
|
|
156
163
|
if (!midState.userAbort && isToolInputCut(err)) {
|
|
157
|
-
|
|
158
|
-
controller?.abort?.(err);
|
|
159
|
-
} catch {}
|
|
164
|
+
abortStream(controller, err);
|
|
160
165
|
throw err;
|
|
161
166
|
}
|
|
162
167
|
// Acknowledged reset semantics let the owner tombstone this
|
|
@@ -173,9 +178,7 @@ export function createAnthropicMidstreamRecovery({
|
|
|
173
178
|
// incomplete, never dispatched tool input stays replay-safe.
|
|
174
179
|
// Every retry branch below relies on this early exit.
|
|
175
180
|
if (outcome?.replayUnsafe === true) {
|
|
176
|
-
|
|
177
|
-
controller?.abort?.(err);
|
|
178
|
-
} catch {}
|
|
181
|
+
abortStream(controller, err);
|
|
179
182
|
throw err;
|
|
180
183
|
}
|
|
181
184
|
// The request-level retry loop already exhausted its full budget on a
|
|
@@ -185,9 +188,7 @@ export function createAnthropicMidstreamRecovery({
|
|
|
185
188
|
// A background call never retries an overload, mid-stream included (see
|
|
186
189
|
// withRetry): nobody waits on it and every retry adds load.
|
|
187
190
|
if (retry529 === false && Number(err?.httpStatus || err?.status || 0) === 529) {
|
|
188
|
-
|
|
189
|
-
controller?.abort?.(err);
|
|
190
|
-
} catch {}
|
|
191
|
+
abortStream(controller, err);
|
|
191
192
|
throw err;
|
|
192
193
|
}
|
|
193
194
|
const canRetry = attemptIndex < maxRetries;
|
|
@@ -288,7 +289,7 @@ export function createAnthropicMidstreamRecovery({
|
|
|
288
289
|
lastErr: err,
|
|
289
290
|
delayMs: waitMs,
|
|
290
291
|
});
|
|
291
|
-
await
|
|
292
|
+
await sleepBackoff(waitMs);
|
|
292
293
|
return retry;
|
|
293
294
|
}
|
|
294
295
|
if (classifier && !canRetry) {
|
|
@@ -91,7 +91,7 @@ export function _normalizeAnthropicModel(raw) {
|
|
|
91
91
|
family,
|
|
92
92
|
provider: 'anthropic-oauth',
|
|
93
93
|
contextWindow:
|
|
94
|
-
raw?.context_window || raw?.max_context_window || raw?.max_input_tokens || _defaultContextForModel(id
|
|
94
|
+
raw?.context_window || raw?.max_context_window || raw?.max_input_tokens || _defaultContextForModel(id),
|
|
95
95
|
outputTokens: raw?.max_tokens || raw?.max_output_tokens || null,
|
|
96
96
|
tier,
|
|
97
97
|
latest: false, // assigned in a second pass once full list is known
|
|
@@ -115,7 +115,7 @@ export function _prettyName(id, family) {
|
|
|
115
115
|
return `${base} ${v[1]}${minor}`;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
export function _defaultContextForModel(id
|
|
118
|
+
export function _defaultContextForModel(id) {
|
|
119
119
|
const text = String(id || '');
|
|
120
120
|
const version = text.match(/^claude-[a-z]+-(\d+)(?:-(\d+))?/i);
|
|
121
121
|
if (Number(version?.[1] || 0) >= 5) return 1000000;
|
|
@@ -2,6 +2,7 @@ import { readFileSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { updateJsonAtomicSync } from '../../../shared/atomic-file.mjs';
|
|
4
4
|
import { resolvePluginData } from '../../../shared/plugin-paths.mjs';
|
|
5
|
+
import { createNpmVersionSource, maxSemver } from './npm-cli-version.mjs';
|
|
5
6
|
|
|
6
7
|
// Anthropic validates the Claude Code client identity carried by OAuth
|
|
7
8
|
// requests. This floor ships with Mixdog, while a newer server-advertised
|
|
@@ -15,6 +16,9 @@ const CACHE_FILE_NAME = 'anthropic-oauth-cli-version.json';
|
|
|
15
16
|
const VERSION_GATE_PATTERN =
|
|
16
17
|
/Claude Code\s+(\d{1,4}\.\d{1,4}\.\d{1,6})\s+does not support this model;\s*version\s+(\d{1,4}\.\d{1,4}\.\d{1,6})\s+or newer is required\b/i;
|
|
17
18
|
|
|
19
|
+
// Effective version = max(floor, learned minimum, live @anthropic-ai/claude-code).
|
|
20
|
+
const liveCliVersion = createNpmVersionSource('@anthropic-ai/claude-code');
|
|
21
|
+
|
|
18
22
|
let learnedCliVersion = null;
|
|
19
23
|
let learnedCliVersionLoaded = false;
|
|
20
24
|
|
|
@@ -86,7 +90,12 @@ function persistLearnedCliVersion(cliVersion) {
|
|
|
86
90
|
export function resolveCliVersion() {
|
|
87
91
|
const explicit = String(process.env.MIXDOG_CLI_VERSION || '').trim();
|
|
88
92
|
if (explicit) return explicit;
|
|
89
|
-
return loadLearnedCliVersion()
|
|
93
|
+
return maxSemver(DEFAULT_CLI_VERSION, loadLearnedCliVersion(), liveCliVersion.sync());
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Await before the first request so a cold start never sends a stale floor. */
|
|
97
|
+
export async function warmCliVersion() {
|
|
98
|
+
if (!String(process.env.MIXDOG_CLI_VERSION || '').trim()) await liveCliVersion.warm();
|
|
90
99
|
}
|
|
91
100
|
|
|
92
101
|
/** The `user-agent` every Claude OAuth request sends for the resolved CLI version. */
|
|
@@ -15,8 +15,8 @@ import { boundProviderAuthPath } from '../../../shared/provider-auth-binding.mjs
|
|
|
15
15
|
import { resolvePluginData } from '../../../shared/plugin-paths.mjs';
|
|
16
16
|
import { getLlmDispatcher } from '../../../shared/llm/http-agent.mjs';
|
|
17
17
|
import { claudeCliUserAgent, resolveCliVersion } from './anthropic-oauth-client-version.mjs';
|
|
18
|
-
import { expiryFromAccessToken, scrubOAuthSecrets } from './lib/oauth-token-utils.mjs';
|
|
19
|
-
import { createOAuthPkce } from './lib/oauth-pkce.mjs';
|
|
18
|
+
import { expiryFromAccessToken, oauthCredentialStatus, scrubOAuthSecrets } from './lib/oauth-token-utils.mjs';
|
|
19
|
+
import { createOAuthPkce, parseOAuthCodeInput } from './lib/oauth-pkce.mjs';
|
|
20
20
|
|
|
21
21
|
// SSRF guard for the OAuth token endpoint override. Env-supplied URLs must be
|
|
22
22
|
// https with a valid http(s) URL shape; reject file:/data:/ftp:/etc. and any
|
|
@@ -162,8 +162,6 @@ export function describeAnthropicOAuthCredentials() {
|
|
|
162
162
|
const hasInferenceScope = Array.isArray(creds.scopes) && creds.scopes.includes('user:inference');
|
|
163
163
|
const hasRefresh = Boolean(creds.refreshToken);
|
|
164
164
|
const expiresAt = _normalizeExpiresAt(creds.expiresAt);
|
|
165
|
-
const expiring = expiresAt > 0 && expiresAt < Date.now() + TOKEN_REFRESH_SKEW_MS;
|
|
166
|
-
const expired = expiresAt > 0 && expiresAt <= Date.now();
|
|
167
165
|
const detail = creds.path || DEFAULT_CREDENTIALS_PATH;
|
|
168
166
|
if (!hasInferenceScope) {
|
|
169
167
|
return {
|
|
@@ -176,46 +174,7 @@ export function describeAnthropicOAuthCredentials() {
|
|
|
176
174
|
expiresAt,
|
|
177
175
|
};
|
|
178
176
|
}
|
|
179
|
-
|
|
180
|
-
return {
|
|
181
|
-
authenticated: expiresAt === 0 || !expired,
|
|
182
|
-
usable: expiresAt === 0 || !expired,
|
|
183
|
-
refreshable: false,
|
|
184
|
-
reauthRequired: expired,
|
|
185
|
-
status: expired ? 'Reauth Required' : 'Access Only',
|
|
186
|
-
detail: `${detail}; no refresh token`,
|
|
187
|
-
expiresAt,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
if (expired)
|
|
191
|
-
return {
|
|
192
|
-
authenticated: true,
|
|
193
|
-
usable: false,
|
|
194
|
-
refreshable: true,
|
|
195
|
-
reauthRequired: false,
|
|
196
|
-
status: 'Refresh Required',
|
|
197
|
-
detail,
|
|
198
|
-
expiresAt,
|
|
199
|
-
};
|
|
200
|
-
if (expiring)
|
|
201
|
-
return {
|
|
202
|
-
authenticated: true,
|
|
203
|
-
usable: true,
|
|
204
|
-
refreshable: true,
|
|
205
|
-
reauthRequired: false,
|
|
206
|
-
status: 'Refresh Soon',
|
|
207
|
-
detail,
|
|
208
|
-
expiresAt,
|
|
209
|
-
};
|
|
210
|
-
return {
|
|
211
|
-
authenticated: true,
|
|
212
|
-
usable: true,
|
|
213
|
-
refreshable: true,
|
|
214
|
-
reauthRequired: false,
|
|
215
|
-
status: 'Valid',
|
|
216
|
-
detail,
|
|
217
|
-
expiresAt,
|
|
218
|
-
};
|
|
177
|
+
return oauthCredentialStatus({ hasRefresh, expiresAt, detail, refreshSkewMs: TOKEN_REFRESH_SKEW_MS });
|
|
219
178
|
} catch (err) {
|
|
220
179
|
return {
|
|
221
180
|
authenticated: false,
|
|
@@ -303,7 +262,7 @@ async function _refreshOAuthCredentialsUnlocked(creds) {
|
|
|
303
262
|
}
|
|
304
263
|
|
|
305
264
|
const controller = new AbortController();
|
|
306
|
-
const timeout = setTimeout(() => controller.abort(),
|
|
265
|
+
const timeout = setTimeout(() => controller.abort(), OAUTH_TOKEN_TIMEOUT_MS);
|
|
307
266
|
try {
|
|
308
267
|
const res = await fetch(TOKEN_URL, {
|
|
309
268
|
method: 'POST',
|
|
@@ -529,26 +488,18 @@ function _oauthParseScopeField(scope) {
|
|
|
529
488
|
.filter(Boolean);
|
|
530
489
|
}
|
|
531
490
|
|
|
491
|
+
// A pasted callback URL also names the redirect_uri it came from; every other
|
|
492
|
+
// shape (code#state, code=…, bare code) is the shared parser's.
|
|
532
493
|
function _parseOAuthCodeInput(input) {
|
|
533
|
-
const value = String(input || '').trim();
|
|
534
|
-
if (!value) return { code: '', state: '' };
|
|
535
494
|
try {
|
|
536
|
-
const url = new URL(
|
|
495
|
+
const url = new URL(String(input || '').trim());
|
|
537
496
|
const code = url.searchParams.get('code') || '';
|
|
538
497
|
const state = url.searchParams.get('state') || '';
|
|
539
498
|
if (code || state) return { code, state, redirectUri: `${url.origin}${url.pathname}` };
|
|
540
499
|
} catch {
|
|
541
500
|
/* not a URL */
|
|
542
501
|
}
|
|
543
|
-
|
|
544
|
-
const [code, state] = value.split('#', 2);
|
|
545
|
-
return { code: String(code || '').trim(), state: String(state || '').trim() };
|
|
546
|
-
}
|
|
547
|
-
if (value.includes('code=')) {
|
|
548
|
-
const params = new URLSearchParams(value.startsWith('?') ? value.slice(1) : value);
|
|
549
|
-
return { code: params.get('code') || '', state: params.get('state') || '' };
|
|
550
|
-
}
|
|
551
|
-
return { code: value, state: '' };
|
|
502
|
+
return parseOAuthCodeInput(input, { allowHashState: true });
|
|
552
503
|
}
|
|
553
504
|
|
|
554
505
|
async function exchangeAuthorizationCode({ pkce, code, state, redirectUri }) {
|
|
@@ -611,7 +562,7 @@ async function exchangeAuthorizationCode({ pkce, code, state, redirectUri }) {
|
|
|
611
562
|
};
|
|
612
563
|
}
|
|
613
564
|
|
|
614
|
-
export async function beginOAuthLogin() {
|
|
565
|
+
export async function beginOAuthLogin({ openBrowserFn = null } = {}) {
|
|
615
566
|
const pkce = createOAuthPkce();
|
|
616
567
|
const state = randomBytes(32).toString('base64url');
|
|
617
568
|
const buildUrl = (redirectUri) => {
|
|
@@ -630,8 +581,8 @@ export async function beginOAuthLogin() {
|
|
|
630
581
|
const manualUrl = buildUrl(OAUTH_MANUAL_REDIRECT_URI);
|
|
631
582
|
const openLoginUrl = async (targetUrl, label = 'login') => {
|
|
632
583
|
try {
|
|
633
|
-
const
|
|
634
|
-
openInBrowser(targetUrl.toString());
|
|
584
|
+
const openInBrowser = openBrowserFn || (await import('../../../shared/open-url.mjs')).openInBrowser;
|
|
585
|
+
await openInBrowser(targetUrl.toString());
|
|
635
586
|
} catch (err) {
|
|
636
587
|
process.stderr.write(
|
|
637
588
|
`[anthropic-oauth] browser open failed for ${label} URL: ${String(err?.message || err).slice(0, 200)}\n`
|
|
@@ -665,9 +616,9 @@ export async function beginOAuthLogin() {
|
|
|
665
616
|
}
|
|
666
617
|
const code = u.searchParams.get('code');
|
|
667
618
|
if (!code || u.searchParams.get('state') !== state) {
|
|
619
|
+
// Reject this request only; the valid callback may still arrive.
|
|
668
620
|
res.writeHead(400);
|
|
669
621
|
res.end('Invalid');
|
|
670
|
-
finish(null);
|
|
671
622
|
return;
|
|
672
623
|
}
|
|
673
624
|
try {
|
|
@@ -9,9 +9,10 @@ import { promisify } from 'node:util';
|
|
|
9
9
|
import { gzip } from 'node:zlib';
|
|
10
10
|
import { getLlmDispatcher } from '../../../../shared/llm/http-agent.mjs';
|
|
11
11
|
import { claudeCliUserAgent } from '../anthropic-oauth-client-version.mjs';
|
|
12
|
+
import { ANTHROPIC_VERSION } from '../lib/anthropic-models.mjs';
|
|
12
13
|
|
|
13
14
|
const API_URL = 'https://api.anthropic.com/v1/messages';
|
|
14
|
-
export
|
|
15
|
+
export { ANTHROPIC_VERSION };
|
|
15
16
|
|
|
16
17
|
const ANTHROPIC_REQ_GZIP_MIN_BYTES = 8 * 1024;
|
|
17
18
|
let gzipLatchedOff = false;
|
|
@@ -12,6 +12,7 @@ import { traceAgentFetch } from '../agent-trace.mjs';
|
|
|
12
12
|
import { createAbortController } from '../../../shared/abort-controller.mjs';
|
|
13
13
|
import { notifyCurrentAnthropicRateLimit } from './admission-scheduler.mjs';
|
|
14
14
|
import { noteFastModeCapacityError } from './anthropic-fast-mode.mjs';
|
|
15
|
+
import { noteRequestServiceTier } from '../../../shared/llm/usage-context.mjs';
|
|
15
16
|
import {
|
|
16
17
|
ANTHROPIC_RETRY_BACKOFF_MS,
|
|
17
18
|
ANTHROPIC_RETRY_JITTER_RATIO,
|
|
@@ -66,6 +67,7 @@ export function createAnthropicOAuthRequest({
|
|
|
66
67
|
// provider-visible cache breakpoint off the cached one — the
|
|
67
68
|
// exact COLD-turn bug this change fixes. Order is fixed:
|
|
68
69
|
// build → sanitize (once) → mark → prepare image bytes → JSON.stringify.
|
|
70
|
+
noteRequestServiceTier(requestBody?.speed);
|
|
69
71
|
const response = await postMessages({
|
|
70
72
|
accessToken,
|
|
71
73
|
requestBody,
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
import { traceAgentSse, traceAgentUsage } from '../agent-trace.mjs';
|
|
9
9
|
import { boundProviderAuthPath } from '../../../shared/provider-auth-binding.mjs';
|
|
10
10
|
import { resolveAnthropicMaxTokens } from './anthropic-max-tokens.mjs';
|
|
11
|
-
import { MODELS
|
|
11
|
+
import { MODELS } from './lib/anthropic-models.mjs';
|
|
12
|
+
import { systemBlockItems, systemBlockTtl } from './lib/anthropic-system-blocks.mjs';
|
|
12
13
|
import { prepareAnthropicImages } from './lib/anthropic-image-input.mjs';
|
|
14
|
+
import { streamCallbacks } from './lib/send-callbacks.mjs';
|
|
13
15
|
import {
|
|
14
16
|
_loadModelCache,
|
|
15
17
|
_setInMemoryCatalog,
|
|
@@ -34,7 +36,7 @@ import {
|
|
|
34
36
|
beginOAuthLogin,
|
|
35
37
|
loginOAuth,
|
|
36
38
|
} from './anthropic-oauth-credentials.mjs';
|
|
37
|
-
import { claudeCliUserAgent, learnRequiredCliVersion } from './anthropic-oauth-client-version.mjs';
|
|
39
|
+
import { claudeCliUserAgent, learnRequiredCliVersion, warmCliVersion } from './anthropic-oauth-client-version.mjs';
|
|
38
40
|
import { createPassthroughSignal } from '../stall-policy.mjs';
|
|
39
41
|
import { AnthropicFallbackTriggeredError } from './retry-classifier.mjs';
|
|
40
42
|
import { ANTHROPIC_MAX_MIDSTREAM_RETRIES, parseSSEStream, _classifyMidstreamError } from './anthropic-sse.mjs';
|
|
@@ -58,6 +60,13 @@ import {
|
|
|
58
60
|
toAnthropicMessages,
|
|
59
61
|
toAnthropicToolChoice,
|
|
60
62
|
} from './lib/anthropic-request-utils.mjs';
|
|
63
|
+
import {
|
|
64
|
+
EFFORT_CONFIGURATION_BETA,
|
|
65
|
+
projectEffortConfiguration,
|
|
66
|
+
lowerAnthropicEffortHistory,
|
|
67
|
+
markAnthropicEffortBody,
|
|
68
|
+
usesAnthropicEffortBody,
|
|
69
|
+
} from './effort-configuration.mjs';
|
|
61
70
|
|
|
62
71
|
// SSE progress emits (per-request "Response …" and "Done:" lines). Off by default.
|
|
63
72
|
const SSE_VERBOSE = process.env.MIXDOG_SSE_VERBOSE === '1';
|
|
@@ -75,13 +84,10 @@ const _oauthRefreshes = new Map();
|
|
|
75
84
|
const CLAUDE_CODE_SYSTEM_PREFIX = "You are Claude Code, Anthropic's official CLI for Claude.";
|
|
76
85
|
const OAUTH_BETA_HEADERS =
|
|
77
86
|
'oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,extended-cache-ttl-2025-04-11';
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
markAnthropicEffortBody,
|
|
83
|
-
usesAnthropicEffortBody,
|
|
84
|
-
} from './effort-configuration.mjs';
|
|
87
|
+
|
|
88
|
+
function logQuiet(line) {
|
|
89
|
+
if (!process.env.MIXDOG_QUIET_PROVIDER_LOG) process.stderr.write(`[anthropic-oauth] ${line}\n`);
|
|
90
|
+
}
|
|
85
91
|
|
|
86
92
|
function requiresSystemPrefix(model) {
|
|
87
93
|
// High-tier Claude OAuth models require the first-party system prefix for
|
|
@@ -172,22 +178,6 @@ function resolveMaxTokens(model) {
|
|
|
172
178
|
|
|
173
179
|
// --- Message conversion ---
|
|
174
180
|
|
|
175
|
-
// Anthropic's tool spec forbids oneOf / allOf / anyOf at the TOP level of
|
|
176
|
-
// input_schema (nested usage inside properties is allowed). External MCP
|
|
177
|
-
// servers sometimes emit such schemas.
|
|
178
|
-
// Convert them to a flat object schema so the API never sees a 400.
|
|
179
|
-
// Map the orchestrator-level opts.toolChoice into Anthropic's tool_choice.
|
|
180
|
-
// Only 'none' is activated: it lets the hard-cap final turn keep the tool
|
|
181
|
-
// DEFINITIONS in-request (so the tools->system->messages prefix — and its
|
|
182
|
-
// prompt-cache prefix — stay byte-identical to prior turns) while forbidding
|
|
183
|
-
// tool USE, so the model can only emit text. Forced values
|
|
184
|
-
// ('required'->{type:'any'}, {name}->{type:'tool'}) are deliberately NOT
|
|
185
|
-
// mapped: Anthropic returns a 400 for any forced tool_choice while
|
|
186
|
-
// extended/adaptive thinking is enabled, and the only caller that sets
|
|
187
|
-
// opts.toolChoice='required' (the forced-first-tool turn) runs with
|
|
188
|
-
// effort/thinking active on reasoning models — activating it would convert a
|
|
189
|
-
// previously-harmless no-op into a hard 400 on exactly that turn. Attached
|
|
190
|
-
// only when the request actually carries tools (see buildRequestBody).
|
|
191
181
|
function deferredAnthropicTools(activeTools, messages, opts) {
|
|
192
182
|
return sharedDeferredAnthropicTools(activeTools, messages, opts, 'anthropic-oauth');
|
|
193
183
|
}
|
|
@@ -195,19 +185,6 @@ function requestAnthropicTools(tools, messages, opts) {
|
|
|
195
185
|
return sharedRequestAnthropicTools(tools, messages, opts, 'anthropic-oauth');
|
|
196
186
|
}
|
|
197
187
|
|
|
198
|
-
// Applies cache_control markers to the FINAL, already-sanitized Anthropic
|
|
199
|
-
// message array — by INVARIANT, never by pre-sanitize index. Because
|
|
200
|
-
// sanitizeAnthropicContentPairs has already run (and must NOT run again
|
|
201
|
-
// after this), the blocks we mark here are exactly the blocks the provider
|
|
202
|
-
// sees, so the cache breakpoint is stable across turns.
|
|
203
|
-
// message-anchor: prefer a safe tool_result tail, then a previous real user
|
|
204
|
-
// text turn if another slot remains. Synthetic
|
|
205
|
-
// <system-reminder> messages and current pure-text prompts
|
|
206
|
-
// are excluded so first-turn prompts do not create a fresh
|
|
207
|
-
// BP4 write on every new session.
|
|
208
|
-
// messageTtl === null disables the tail. BP3 (tier3) now rides a system block,
|
|
209
|
-
// so it is no longer marked here.
|
|
210
|
-
// ANTHROPIC_MSG_SLOTS=0 is honoured upstream by passing messageTtl = null.
|
|
211
188
|
// --- Build request body ---
|
|
212
189
|
|
|
213
190
|
// BP3 (tier3) is injected by session/manager as its own `system` role block —
|
|
@@ -312,6 +289,7 @@ export class AnthropicOAuthProvider {
|
|
|
312
289
|
}
|
|
313
290
|
|
|
314
291
|
async ensureAuth({ forceRefresh = false, reason = 'preemptive' } = {}) {
|
|
292
|
+
await warmCliVersion();
|
|
315
293
|
if (!this.credentials) {
|
|
316
294
|
this.credentials = loadCredentials();
|
|
317
295
|
}
|
|
@@ -327,8 +305,7 @@ export class AnthropicOAuthProvider {
|
|
|
327
305
|
const fresh = loadCredentials();
|
|
328
306
|
if (fresh?.accessToken) {
|
|
329
307
|
this.credentials = fresh;
|
|
330
|
-
|
|
331
|
-
process.stderr.write(`[anthropic-oauth] Credentials reloaded from disk (mtime change)\n`);
|
|
308
|
+
logQuiet('Credentials reloaded from disk (mtime change)');
|
|
332
309
|
}
|
|
333
310
|
}
|
|
334
311
|
|
|
@@ -358,8 +335,7 @@ export class AnthropicOAuthProvider {
|
|
|
358
335
|
const validAfter = Date.now() + (force ? 0 : TOKEN_REFRESH_SKEW_MS);
|
|
359
336
|
if (disk?.accessToken && disk.accessToken !== currentToken && (!disk.expiresAt || disk.expiresAt >= validAfter)) {
|
|
360
337
|
this.credentials = disk;
|
|
361
|
-
|
|
362
|
-
process.stderr.write(`[anthropic-oauth] Credentials reloaded from disk\n`);
|
|
338
|
+
logQuiet('Credentials reloaded from disk');
|
|
363
339
|
return disk;
|
|
364
340
|
}
|
|
365
341
|
if (!this.credentials && disk) this.credentials = disk;
|
|
@@ -380,36 +356,29 @@ export class AnthropicOAuthProvider {
|
|
|
380
356
|
latest.accessToken !== currentToken &&
|
|
381
357
|
(!latest.expiresAt || latest.expiresAt >= latestValidAfter)
|
|
382
358
|
) {
|
|
383
|
-
|
|
384
|
-
process.stderr.write(`[anthropic-oauth] Credentials reloaded from disk\n`);
|
|
359
|
+
logQuiet('Credentials reloaded from disk');
|
|
385
360
|
return latest;
|
|
386
361
|
}
|
|
387
362
|
|
|
388
363
|
if (!latest?.refreshToken) {
|
|
389
364
|
if (!force && latest?.accessToken && (!latest.expiresAt || latest.expiresAt > Date.now())) {
|
|
390
|
-
|
|
391
|
-
process.stderr.write(
|
|
392
|
-
`[anthropic-oauth] WARNING: token expiring but no refresh token; using current token until expiry\n`
|
|
393
|
-
);
|
|
365
|
+
logQuiet('WARNING: token expiring but no refresh token; using current token until expiry');
|
|
394
366
|
return latest;
|
|
395
367
|
}
|
|
396
368
|
throw new Error('Anthropic OAuth refresh token not available. Open /providers in mixdog to sign in again.');
|
|
397
369
|
}
|
|
398
370
|
|
|
399
371
|
try {
|
|
400
|
-
|
|
401
|
-
process.stderr.write(`[anthropic-oauth] Token ${reason}, refreshing...\n`);
|
|
372
|
+
logQuiet(`Token ${reason}, refreshing...`);
|
|
402
373
|
const refreshed = await refreshOAuthCredentials(latest);
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
);
|
|
374
|
+
logQuiet(
|
|
375
|
+
`Token refreshed, expires in ${Math.round(((refreshed.expiresAt || Date.now()) - Date.now()) / 1000)}s`
|
|
376
|
+
);
|
|
407
377
|
return refreshed;
|
|
408
378
|
} catch (err) {
|
|
409
379
|
if (!force && latest?.accessToken && (!latest.expiresAt || latest.expiresAt > Date.now())) {
|
|
410
380
|
const msg = err instanceof Error ? err.message : String(err);
|
|
411
|
-
|
|
412
|
-
process.stderr.write(`[anthropic-oauth] Refresh failed (${msg}); using still-valid current token\n`);
|
|
381
|
+
logQuiet(`Refresh failed (${msg}); using still-valid current token`);
|
|
413
382
|
return latest;
|
|
414
383
|
}
|
|
415
384
|
throw err;
|
|
@@ -428,6 +397,7 @@ export class AnthropicOAuthProvider {
|
|
|
428
397
|
}
|
|
429
398
|
|
|
430
399
|
async send(messages, model, tools, sendOpts) {
|
|
400
|
+
await warmCliVersion();
|
|
431
401
|
// Re-warm the kept-alive socket before the turn. preconnect() is a
|
|
432
402
|
// best-effort no-op while a socket is still hot (TTL gate), but after an
|
|
433
403
|
// idle gap longer than the keep-alive window it re-opens one in parallel
|
|
@@ -441,11 +411,7 @@ export class AnthropicOAuthProvider {
|
|
|
441
411
|
// a hard 400. Pairing here closes the gap regardless of caller.
|
|
442
412
|
messages = sanitizeToolPairs(messages);
|
|
443
413
|
const opts = sendOpts || {};
|
|
444
|
-
const onStageChange
|
|
445
|
-
const onStreamDelta = typeof opts.onStreamDelta === 'function' ? opts.onStreamDelta : null;
|
|
446
|
-
const onToolCall = typeof opts.onToolCall === 'function' ? opts.onToolCall : null;
|
|
447
|
-
const onTextDelta = typeof opts.onTextDelta === 'function' ? opts.onTextDelta : null;
|
|
448
|
-
const onTextReset = typeof opts.onTextReset === 'function' ? opts.onTextReset : null;
|
|
414
|
+
const { onStageChange, onStreamDelta, onToolCall, onTextDelta, onTextReset } = streamCallbacks(opts);
|
|
449
415
|
const externalSignal = opts.signal || null;
|
|
450
416
|
// Test seam: lets the retry harness drive stream outcomes without a
|
|
451
417
|
// live OAuth session.
|
|
@@ -772,8 +738,7 @@ export class AnthropicOAuthProvider {
|
|
|
772
738
|
try {
|
|
773
739
|
return await this._fetchModelCatalog();
|
|
774
740
|
} catch (err) {
|
|
775
|
-
|
|
776
|
-
process.stderr.write(`[anthropic-oauth] listModels fetch failed (${err.message})\n`);
|
|
741
|
+
logQuiet(`listModels fetch failed (${err.message})`);
|
|
777
742
|
// Fallback with full API model IDs (the shared offline list). Short
|
|
778
743
|
// family tokens leaked through here would be accepted by setup and
|
|
779
744
|
// reintroduce the legacy shape. ANTHROPIC_DEFAULT_<FAMILY>_MODEL
|
|
@@ -797,12 +762,10 @@ export class AnthropicOAuthProvider {
|
|
|
797
762
|
_modelRefreshInFlight = (async () => {
|
|
798
763
|
try {
|
|
799
764
|
const enriched = await this._fetchModelCatalog();
|
|
800
|
-
|
|
801
|
-
process.stderr.write(`[anthropic-oauth] catalog refreshed (${enriched.length} models)\n`);
|
|
765
|
+
logQuiet(`catalog refreshed (${enriched.length} models)`);
|
|
802
766
|
return enriched;
|
|
803
767
|
} catch (err) {
|
|
804
|
-
|
|
805
|
-
process.stderr.write(`[anthropic-oauth] catalog refresh failed (${err.message})\n`);
|
|
768
|
+
logQuiet(`catalog refresh failed (${err.message})`);
|
|
806
769
|
return null;
|
|
807
770
|
} finally {
|
|
808
771
|
_modelRefreshInFlight = null;
|