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
|
@@ -9,6 +9,11 @@ import { normalizeContentForGeminiParts, splitToolContentForGemini } from './med
|
|
|
9
9
|
import { providerReplayItems } from './lib/provider-replay.mjs';
|
|
10
10
|
import { ensureGeminiToolCallSignatures } from './gemini-history-signatures.mjs';
|
|
11
11
|
|
|
12
|
+
// Bounds on persisted provider metadata replayed back into the prompt.
|
|
13
|
+
const MAX_THOUGHT_SIGNATURE_CHARS = 16_384;
|
|
14
|
+
const MAX_REPLAY_TEXT_CHARS = 1_000_000;
|
|
15
|
+
const MAX_REPLAY_PARTS = 128;
|
|
16
|
+
|
|
12
17
|
function explicitGeminiMediaPart(part) {
|
|
13
18
|
if (!part || typeof part !== 'object') return null;
|
|
14
19
|
const inline = part.inlineData || part.inline_data;
|
|
@@ -120,12 +125,6 @@ function toSchemaType(t) {
|
|
|
120
125
|
return map[t] ?? SchemaType.STRING;
|
|
121
126
|
}
|
|
122
127
|
|
|
123
|
-
/**
|
|
124
|
-
* Recursively convert a JSON Schema object to Gemini's FunctionDeclarationSchema.
|
|
125
|
-
* Gemini requires `type` to be a SchemaType enum, not a plain string, and
|
|
126
|
-
* accepts only a documented subset of JSON Schema. Project onto that subset
|
|
127
|
-
* at every level and convert `const` into Gemini's string enum form.
|
|
128
|
-
*/
|
|
129
128
|
const GEMINI_SCHEMA_FIELDS = new Set([
|
|
130
129
|
'type',
|
|
131
130
|
'format',
|
|
@@ -364,6 +363,12 @@ function flattenAllOf(input) {
|
|
|
364
363
|
return { schema, hadAllOf };
|
|
365
364
|
}
|
|
366
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Recursively convert a JSON Schema object to Gemini's FunctionDeclarationSchema.
|
|
368
|
+
* Gemini requires `type` to be a SchemaType enum, not a plain string, and
|
|
369
|
+
* accepts only a documented subset of JSON Schema. Project onto that subset
|
|
370
|
+
* at every level and convert `const` into Gemini's string enum form.
|
|
371
|
+
*/
|
|
367
372
|
function convertSchema(schema) {
|
|
368
373
|
if (!schema || typeof schema !== 'object') return schema;
|
|
369
374
|
const flattened = flattenAllOf(schema);
|
|
@@ -377,13 +382,10 @@ function convertSchema(schema) {
|
|
|
377
382
|
if (!GEMINI_SCHEMA_FIELDS.has(k)) continue;
|
|
378
383
|
result[k] = v;
|
|
379
384
|
}
|
|
380
|
-
// Gemini's Schema validator requires every `enum` entry to be a string.
|
|
381
|
-
// An unrepresentable typed enum must become an explicit conflict schema;
|
|
382
|
-
// dropping it would broaden the accepted tool arguments.
|
|
383
|
-
// Gemini's schema dialect represents JSON Schema null unions with
|
|
384
|
-
// `nullable`, not a type array.
|
|
385
385
|
if (result.type === undefined && (result.properties || result.required)) result.type = 'object';
|
|
386
386
|
if (result.type === undefined && result.items) result.type = 'array';
|
|
387
|
+
// Gemini's schema dialect represents JSON Schema null unions with
|
|
388
|
+
// `nullable`, not a type array.
|
|
387
389
|
const normalizedType = typeInfo(result);
|
|
388
390
|
if (normalizedType.conflict) return schemaFallback(normalizedType.conflict);
|
|
389
391
|
const rawType = normalizedType.type || undefined;
|
|
@@ -391,6 +393,9 @@ function convertSchema(schema) {
|
|
|
391
393
|
else delete result.type;
|
|
392
394
|
if (normalizedType.allowsNull && rawType) result.nullable = true;
|
|
393
395
|
else if (result.nullable !== true) delete result.nullable;
|
|
396
|
+
// Gemini's Schema validator requires every `enum` entry to be a string.
|
|
397
|
+
// An unrepresentable typed enum must become an explicit conflict schema;
|
|
398
|
+
// dropping it would broaden the accepted tool arguments.
|
|
394
399
|
const localEnum = enumValues(result);
|
|
395
400
|
if (localEnum.conflict) return schemaFallback(localEnum.conflict);
|
|
396
401
|
if (result.const !== undefined) {
|
|
@@ -504,34 +509,21 @@ function projectUnionBranches(result) {
|
|
|
504
509
|
if (!result.anyOf.length) delete result.anyOf;
|
|
505
510
|
}
|
|
506
511
|
|
|
512
|
+
const TYPE_SPECIFIC_KEYWORDS = {
|
|
513
|
+
string: new Set(['minLength', 'maxLength', 'pattern', 'format']),
|
|
514
|
+
array: new Set(['minItems', 'maxItems', 'items']),
|
|
515
|
+
object: new Set(['minProperties', 'maxProperties', 'properties', 'required', 'propertyOrdering']),
|
|
516
|
+
number: new Set(['minimum', 'maximum']),
|
|
517
|
+
integer: new Set(['minimum', 'maximum']),
|
|
518
|
+
};
|
|
519
|
+
const ALL_TYPE_SPECIFIC_KEYWORDS = new Set(Object.values(TYPE_SPECIFIC_KEYWORDS).flatMap((set) => [...set]));
|
|
520
|
+
|
|
507
521
|
/** Drop every keyword that does not belong to the resolved type, then sanity
|
|
508
522
|
* the surviving min/max pairs. Returns a conflict schema for an empty range,
|
|
509
523
|
* else null (the caller keeps `result`). */
|
|
510
524
|
function pruneTypeSpecificKeywords(result, rawType) {
|
|
511
|
-
const
|
|
512
|
-
|
|
513
|
-
array: new Set(['minItems', 'maxItems', 'items']),
|
|
514
|
-
object: new Set(['minProperties', 'maxProperties', 'properties', 'required', 'propertyOrdering']),
|
|
515
|
-
number: new Set(['minimum', 'maximum']),
|
|
516
|
-
integer: new Set(['minimum', 'maximum']),
|
|
517
|
-
};
|
|
518
|
-
for (const key of [
|
|
519
|
-
'minLength',
|
|
520
|
-
'maxLength',
|
|
521
|
-
'pattern',
|
|
522
|
-
'format',
|
|
523
|
-
'minItems',
|
|
524
|
-
'maxItems',
|
|
525
|
-
'items',
|
|
526
|
-
'minProperties',
|
|
527
|
-
'maxProperties',
|
|
528
|
-
'properties',
|
|
529
|
-
'required',
|
|
530
|
-
'propertyOrdering',
|
|
531
|
-
'minimum',
|
|
532
|
-
'maximum',
|
|
533
|
-
]) {
|
|
534
|
-
if (!typeSpecific[rawType]?.has(key)) delete result[key];
|
|
525
|
+
for (const key of ALL_TYPE_SPECIFIC_KEYWORDS) {
|
|
526
|
+
if (!TYPE_SPECIFIC_KEYWORDS[rawType]?.has(key)) delete result[key];
|
|
535
527
|
}
|
|
536
528
|
for (const [minKey, maxKey] of [
|
|
537
529
|
['minLength', 'maxLength'],
|
|
@@ -586,6 +578,7 @@ export function toGeminiTools(tools) {
|
|
|
586
578
|
})),
|
|
587
579
|
};
|
|
588
580
|
}
|
|
581
|
+
|
|
589
582
|
export function toGeminiNativeTools(nativeTools) {
|
|
590
583
|
if (!Array.isArray(nativeTools)) return [];
|
|
591
584
|
const out = [];
|
|
@@ -667,7 +660,7 @@ function toGeminiToolContent(message, toolNameByCallId, capabilities) {
|
|
|
667
660
|
};
|
|
668
661
|
}
|
|
669
662
|
|
|
670
|
-
function toGeminiContent(message,
|
|
663
|
+
function toGeminiContent(message, capabilities) {
|
|
671
664
|
if (!message || message.role === 'system') return null;
|
|
672
665
|
const orderedReplay =
|
|
673
666
|
message.role === 'assistant' ? providerReplayItems(message, ['gemini', 'antigravity']) : undefined;
|
|
@@ -692,7 +685,11 @@ function toGeminiContent(message, _toolNameByCallId, capabilities) {
|
|
|
692
685
|
...(capabilities.functionPartIds && typeof tc.id === 'string' && tc.id ? { id: tc.id } : {}),
|
|
693
686
|
},
|
|
694
687
|
};
|
|
695
|
-
if (
|
|
688
|
+
if (
|
|
689
|
+
typeof tc.thoughtSignature === 'string' &&
|
|
690
|
+
tc.thoughtSignature &&
|
|
691
|
+
tc.thoughtSignature.length <= MAX_THOUGHT_SIGNATURE_CHARS
|
|
692
|
+
) {
|
|
696
693
|
part.thoughtSignature = tc.thoughtSignature;
|
|
697
694
|
}
|
|
698
695
|
parts.push(part);
|
|
@@ -711,13 +708,18 @@ function toGeminiContent(message, _toolNameByCallId, capabilities) {
|
|
|
711
708
|
|
|
712
709
|
function geminiTextPartsFromMetadata(message) {
|
|
713
710
|
const parts = message?.providerMetadata?.gemini?.textParts;
|
|
714
|
-
if (!Array.isArray(parts) || !parts.length || parts.length >
|
|
711
|
+
if (!Array.isArray(parts) || !parts.length || parts.length > MAX_REPLAY_PARTS) return null;
|
|
715
712
|
const normalized = [];
|
|
716
713
|
for (const part of parts) {
|
|
717
|
-
if (!part || typeof part !== 'object' || typeof part.text !== 'string' || part.text.length >
|
|
714
|
+
if (!part || typeof part !== 'object' || typeof part.text !== 'string' || part.text.length > MAX_REPLAY_TEXT_CHARS)
|
|
715
|
+
return null;
|
|
718
716
|
const next = { text: part.text };
|
|
719
717
|
if (part.thoughtSignature !== undefined) {
|
|
720
|
-
if (
|
|
718
|
+
if (
|
|
719
|
+
typeof part.thoughtSignature !== 'string' ||
|
|
720
|
+
!part.thoughtSignature ||
|
|
721
|
+
part.thoughtSignature.length > MAX_THOUGHT_SIGNATURE_CHARS
|
|
722
|
+
)
|
|
721
723
|
return null;
|
|
722
724
|
next.thoughtSignature = part.thoughtSignature;
|
|
723
725
|
}
|
|
@@ -729,7 +731,7 @@ function geminiTextPartsFromMetadata(message) {
|
|
|
729
731
|
|
|
730
732
|
function geminiThoughtPartsFromMetadata(message) {
|
|
731
733
|
const parts = message?.providerMetadata?.gemini?.thoughtParts;
|
|
732
|
-
if (!Array.isArray(parts) || !parts.length || parts.length >
|
|
734
|
+
if (!Array.isArray(parts) || !parts.length || parts.length > MAX_REPLAY_PARTS) return [];
|
|
733
735
|
const normalized = [];
|
|
734
736
|
for (const part of parts) {
|
|
735
737
|
// Hidden prompt content is replayable only when every persisted part is
|
|
@@ -739,10 +741,10 @@ function geminiThoughtPartsFromMetadata(message) {
|
|
|
739
741
|
!part ||
|
|
740
742
|
typeof part !== 'object' ||
|
|
741
743
|
typeof part.text !== 'string' ||
|
|
742
|
-
part.text.length >
|
|
744
|
+
part.text.length > MAX_REPLAY_TEXT_CHARS ||
|
|
743
745
|
typeof part.thoughtSignature !== 'string' ||
|
|
744
746
|
!part.thoughtSignature ||
|
|
745
|
-
part.thoughtSignature.length >
|
|
747
|
+
part.thoughtSignature.length > MAX_THOUGHT_SIGNATURE_CHARS
|
|
746
748
|
)
|
|
747
749
|
return [];
|
|
748
750
|
normalized.push({
|
|
@@ -791,7 +793,7 @@ export function toGeminiContents(messages, model = '', { repairToolSignatures =
|
|
|
791
793
|
continue;
|
|
792
794
|
}
|
|
793
795
|
flushToolMedia();
|
|
794
|
-
const content = toGeminiContent(message,
|
|
796
|
+
const content = toGeminiContent(message, capabilities);
|
|
795
797
|
if (content) contents.push(content);
|
|
796
798
|
}
|
|
797
799
|
flushToolMedia();
|
|
@@ -801,7 +803,7 @@ export function toGeminiContents(messages, model = '', { repairToolSignatures =
|
|
|
801
803
|
function signedTextPart(part) {
|
|
802
804
|
const out = { text: part.text };
|
|
803
805
|
const signature = part.thoughtSignature || part.thought_signature;
|
|
804
|
-
if (typeof signature === 'string' && signature && signature.length <=
|
|
806
|
+
if (typeof signature === 'string' && signature && signature.length <= MAX_THOUGHT_SIGNATURE_CHARS) {
|
|
805
807
|
out.thoughtSignature = signature;
|
|
806
808
|
}
|
|
807
809
|
return out;
|
|
@@ -864,7 +866,7 @@ export function parseToolCalls(parts) {
|
|
|
864
866
|
// replay and anonymous ID inputs independent of that working copy.
|
|
865
867
|
arguments: structuredClone(fc.args ?? {}),
|
|
866
868
|
};
|
|
867
|
-
if (typeof sig === 'string' && sig && sig.length <=
|
|
869
|
+
if (typeof sig === 'string' && sig && sig.length <= MAX_THOUGHT_SIGNATURE_CHARS) {
|
|
868
870
|
call.thoughtSignature = sig;
|
|
869
871
|
}
|
|
870
872
|
return call;
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
providerTimeoutError,
|
|
17
17
|
resolveTimeoutMs,
|
|
18
18
|
} from '../stall-policy.mjs';
|
|
19
|
-
import { knownToolNameSet, scanLeakedToolCalls, toolCallFingerprint } from './
|
|
19
|
+
import { knownToolNameSet, scanLeakedToolCalls, toolCallFingerprint } from './lib/leaked-toolcall.mjs';
|
|
20
20
|
import { traceHash, stableTraceStringify } from './trace-utils.mjs';
|
|
21
21
|
import { parseGeminiTextPartMetadata } from './gemini-schema.mjs';
|
|
22
22
|
import { parseProviderJsonBatch } from './stream-json-pool.mjs';
|
|
@@ -388,7 +388,7 @@ export function createGeminiTextLeakGuard({ knownToolNames, onTextDelta, onToolC
|
|
|
388
388
|
return kept.length ? kept : undefined;
|
|
389
389
|
},
|
|
390
390
|
getLeakedToolCalls() {
|
|
391
|
-
return
|
|
391
|
+
return [...leakedCalls];
|
|
392
392
|
},
|
|
393
393
|
getRelayedText() {
|
|
394
394
|
return relayedText;
|
|
@@ -396,6 +396,19 @@ export function createGeminiTextLeakGuard({ knownToolNames, onTextDelta, onToolC
|
|
|
396
396
|
};
|
|
397
397
|
}
|
|
398
398
|
|
|
399
|
+
// Finalizes the guard at most once; both stream consumers reach it from
|
|
400
|
+
// their failure and cleanup paths.
|
|
401
|
+
function createLeakGuardFinalizer(textLeakGuard) {
|
|
402
|
+
let finalized = false;
|
|
403
|
+
return () => {
|
|
404
|
+
if (finalized) return;
|
|
405
|
+
finalized = true;
|
|
406
|
+
try {
|
|
407
|
+
textLeakGuard?.finalize();
|
|
408
|
+
} catch {}
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
|
|
399
412
|
// `unwrapChunk` adapts a transport that nests the Gemini payload one level
|
|
400
413
|
// deeper. Cloud Code Assist (Antigravity) streams `{ response: { candidates … } }`
|
|
401
414
|
// while the public API streams the candidates directly; everything downstream —
|
|
@@ -421,14 +434,7 @@ export async function consumeGeminiRestStreamResponse(
|
|
|
421
434
|
const allChunks = [];
|
|
422
435
|
let sawStreamChunk = false;
|
|
423
436
|
let relayedText = '';
|
|
424
|
-
|
|
425
|
-
const finalizeLeakGuard = () => {
|
|
426
|
-
if (leakGuardFinalized) return;
|
|
427
|
-
leakGuardFinalized = true;
|
|
428
|
-
try {
|
|
429
|
-
textLeakGuard?.finalize();
|
|
430
|
-
} catch {}
|
|
431
|
-
};
|
|
437
|
+
const finalizeLeakGuard = createLeakGuardFinalizer(textLeakGuard);
|
|
432
438
|
const watchdogs = createRestStreamWatchdogs({
|
|
433
439
|
reader,
|
|
434
440
|
label,
|
|
@@ -554,14 +560,7 @@ export async function consumeGeminiSdkStream(
|
|
|
554
560
|
}
|
|
555
561
|
) {
|
|
556
562
|
let relayedText = '';
|
|
557
|
-
|
|
558
|
-
const finalizeLeakGuard = () => {
|
|
559
|
-
if (leakGuardFinalized) return;
|
|
560
|
-
leakGuardFinalized = true;
|
|
561
|
-
try {
|
|
562
|
-
textLeakGuard?.finalize();
|
|
563
|
-
} catch {}
|
|
564
|
-
};
|
|
563
|
+
const finalizeLeakGuard = createLeakGuardFinalizer(textLeakGuard);
|
|
565
564
|
|
|
566
565
|
const cancellation = createSdkStreamCancellation({ signal, label, cancelGeneration, cancellationGraceMs });
|
|
567
566
|
const { abortError } = cancellation;
|
|
@@ -647,7 +646,7 @@ export async function consumeGeminiSdkStream(
|
|
|
647
646
|
throw stampGeminiStreamFailure(failure, { relayedText, textLeakGuard, chunks: collectedChunks });
|
|
648
647
|
} finally {
|
|
649
648
|
reader?.stop();
|
|
650
|
-
if (signal
|
|
649
|
+
if (signal) {
|
|
651
650
|
try {
|
|
652
651
|
signal.removeEventListener('abort', onSignalAbort);
|
|
653
652
|
} catch {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
2
2
|
import { getAgentApiKey } from '../../../shared/provider-api-key.mjs';
|
|
3
3
|
import { canFallbackNonStreaming, emitProviderRetryStage, withRetry } from './retry-classifier.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { traceNonStreamingFallback } from './lib/transport-fallback-trace.mjs';
|
|
5
5
|
import {
|
|
6
6
|
PROVIDER_CACHE_CREATE_TIMEOUT_MS,
|
|
7
7
|
PROVIDER_CACHE_CREATE_TOTAL_TIMEOUT_MS,
|
|
@@ -189,11 +189,7 @@ export class GeminiProvider {
|
|
|
189
189
|
if (!canFallbackNonStreaming(streamErr, { signal })) return null;
|
|
190
190
|
let aggregated;
|
|
191
191
|
try {
|
|
192
|
-
|
|
193
|
-
opts?.onStageChange?.('requesting');
|
|
194
|
-
} catch {
|
|
195
|
-
/* heartbeat best-effort */
|
|
196
|
-
}
|
|
192
|
+
signalRequesting(opts);
|
|
197
193
|
aggregated = await generate(signal || undefined);
|
|
198
194
|
} catch {
|
|
199
195
|
return null;
|
|
@@ -209,26 +205,7 @@ export class GeminiProvider {
|
|
|
209
205
|
} catch {
|
|
210
206
|
/* best-effort */
|
|
211
207
|
}
|
|
212
|
-
|
|
213
|
-
appendAgentTrace({
|
|
214
|
-
sessionId: opts?.sessionId || opts?.session?.id || null,
|
|
215
|
-
iteration: Number.isFinite(Number(opts?.iteration)) ? Number(opts.iteration) : null,
|
|
216
|
-
kind: 'transport_fallback',
|
|
217
|
-
provider: 'gemini',
|
|
218
|
-
model,
|
|
219
|
-
transport: 'non-streaming',
|
|
220
|
-
payload: {
|
|
221
|
-
from: 'stream',
|
|
222
|
-
to: 'non-streaming',
|
|
223
|
-
reason: streamErr?.retryClassifier || streamErr?.code || streamErr?.message || 'stream_failed',
|
|
224
|
-
error_code: streamErr?.code || null,
|
|
225
|
-
error_http_status: Number(streamErr?.httpStatus || streamErr?.status || 0) || null,
|
|
226
|
-
error_classifier: streamErr?.retryClassifier || streamErr?.midstreamClassifier || null,
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
|
-
} catch {
|
|
230
|
-
/* best-effort */
|
|
231
|
-
}
|
|
208
|
+
traceNonStreamingFallback({ provider: 'gemini', model, opts, streamErr });
|
|
232
209
|
return aggregated;
|
|
233
210
|
}
|
|
234
211
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createNpmVersionSource, maxSemver } from './npm-cli-version.mjs';
|
|
2
|
+
|
|
3
|
+
// Grok CLI client version for the cli-chat-proxy version gate (HTTP 426).
|
|
4
|
+
// Effective = env override, else max(floor, learned-from-426, live npm latest
|
|
5
|
+
// of the official @xai-official/grok CLI).
|
|
6
|
+
export const GROK_CLI_VERSION_FLOOR = '0.2.87';
|
|
7
|
+
|
|
8
|
+
const live = createNpmVersionSource('@xai-official/grok');
|
|
9
|
+
let envVersion;
|
|
10
|
+
let learned = null;
|
|
11
|
+
|
|
12
|
+
function envOverride() {
|
|
13
|
+
if (envVersion === undefined) envVersion = String(process.env.MIXDOG_GROK_CLIENT_VERSION || '').trim();
|
|
14
|
+
return envVersion;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Sync, never blocks: the version proxy/usage requests must send. */
|
|
18
|
+
export function grokCliVersion() {
|
|
19
|
+
return envOverride() || maxSemver(GROK_CLI_VERSION_FLOOR, learned, live.sync());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Await before the first proxy/usage call so a cold start never sends the floor. */
|
|
23
|
+
export async function warmGrokCliVersion() {
|
|
24
|
+
if (!envOverride()) await live.warm();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Learn a minimum stated in a 426 body; returns true when it raised the version. */
|
|
28
|
+
export function learnGrokRequiredVersion(text) {
|
|
29
|
+
const m = String(text || '').match(/(?:minimum|required|at least|>=|newer than|upgrade to)\D{0,40}?(\d+\.\d+\.\d+)/i);
|
|
30
|
+
const required = m && maxSemver(m[1]);
|
|
31
|
+
if (!required || envOverride()) return false;
|
|
32
|
+
const before = grokCliVersion();
|
|
33
|
+
if (maxSemver(before, required) === before) return false;
|
|
34
|
+
learned = required;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function grokClientVersionHeaders() {
|
|
39
|
+
const v = grokCliVersion();
|
|
40
|
+
return { 'x-grok-client-version': v, 'User-Agent': `xai-grok-build/${v}` };
|
|
41
|
+
}
|
|
@@ -1,24 +1,9 @@
|
|
|
1
|
-
// Grok OAuth browser login + PKCE exchange
|
|
2
|
-
|
|
3
|
-
* Grok CLI OAuth provider ("Grok Build").
|
|
4
|
-
*
|
|
5
|
-
* Authenticates against xAI's shared OAuth client via PKCE (discovery at
|
|
6
|
-
* https://auth.x.ai/.well-known/openid-configuration). Credentials come from
|
|
7
|
-
* Mixdog's own token store (grok-oauth.json).
|
|
8
|
-
*
|
|
9
|
-
* Every OAuth inference request routes through cli-chat-proxy.grok.com/v1,
|
|
10
|
-
* matching Grok Build's session-auth contract. Model discovery still merges
|
|
11
|
-
* api.x.ai and proxy catalogs because each publishes a different subset.
|
|
12
|
-
*
|
|
13
|
-
* Inference is delegated to an inner OpenAICompatProvider('xai') — the only
|
|
14
|
-
* preset wired for the Responses API — with the proxy URL + CLI headers
|
|
15
|
-
* injected via config.extraHeaders, bearer swapped for the OAuth access token.
|
|
16
|
-
*/
|
|
1
|
+
// Grok OAuth browser login + PKCE exchange against xAI's shared OAuth client
|
|
2
|
+
// (the consent screen renders it as "Grok Build").
|
|
17
3
|
import { createServer } from 'node:http';
|
|
18
4
|
import { randomBytes } from 'node:crypto';
|
|
5
|
+
import { getLlmDispatcher } from '../../../shared/llm/http-agent.mjs';
|
|
19
6
|
import { createOAuthPkce, parseOAuthCodeInput } from './lib/oauth-pkce.mjs';
|
|
20
|
-
|
|
21
|
-
// xAI's shared OAuth client. The consent screen renders this as "Grok Build".
|
|
22
7
|
import {
|
|
23
8
|
CLIENT_ID,
|
|
24
9
|
SCOPE,
|
|
@@ -61,6 +46,7 @@ export async function exchangeAuthorizationCode({ discovery, pkce, code }) {
|
|
|
61
46
|
// redirects so they can't be replayed to an untrusted host.
|
|
62
47
|
redirect: 'error',
|
|
63
48
|
signal: AbortSignal.timeout(TOKEN_TIMEOUT_MS),
|
|
49
|
+
dispatcher: getLlmDispatcher(),
|
|
64
50
|
});
|
|
65
51
|
if (!tokenRes.ok) {
|
|
66
52
|
const text = await tokenRes.text().catch(() => '');
|
|
@@ -128,9 +114,9 @@ export async function beginOAuthLogin() {
|
|
|
128
114
|
}
|
|
129
115
|
const code = u.searchParams.get('code');
|
|
130
116
|
if (!code || u.searchParams.get('state') !== state) {
|
|
117
|
+
// Reject this request only; the valid callback may still arrive.
|
|
131
118
|
res.writeHead(400);
|
|
132
119
|
res.end('Invalid');
|
|
133
|
-
finish(null);
|
|
134
120
|
return;
|
|
135
121
|
}
|
|
136
122
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
// Grok OAuth discovery, token storage/refresh, and proxy identity.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* Authenticates against xAI's shared OAuth client via PKCE (discovery at
|
|
6
|
-
* https://auth.x.ai/.well-known/openid-configuration). Credentials come from
|
|
7
|
-
* Mixdog's own token store (grok-oauth.json).
|
|
8
|
-
*
|
|
9
|
-
* Every OAuth inference request routes through cli-chat-proxy.grok.com/v1,
|
|
10
|
-
* matching Grok Build's session-auth contract. Model discovery still merges
|
|
11
|
-
* api.x.ai and proxy catalogs because each publishes a different subset.
|
|
12
|
-
*
|
|
13
|
-
* Inference is delegated to an inner OpenAICompatProvider('xai') — the only
|
|
14
|
-
* preset wired for the Responses API — with the proxy URL + CLI headers
|
|
15
|
-
* injected via config.extraHeaders, bearer swapped for the OAuth access token.
|
|
16
|
-
*/
|
|
1
|
+
// Grok OAuth discovery, token storage/refresh, and proxy identity. Discovery
|
|
2
|
+
// is at https://auth.x.ai/.well-known/openid-configuration; credentials live
|
|
3
|
+
// in Mixdog's own token store (grok-oauth.json).
|
|
17
4
|
import { randomUUID } from 'node:crypto';
|
|
18
5
|
import { readFileSync, existsSync, mkdirSync, statSync, unlinkSync } from 'node:fs';
|
|
19
6
|
import { join, resolve } from 'node:path';
|
|
@@ -22,10 +9,16 @@ import { writeJsonAtomicSync, withFileLock } from '../../../shared/atomic-file.m
|
|
|
22
9
|
import { boundProviderAuthPath } from '../../../shared/provider-auth-binding.mjs';
|
|
23
10
|
import { createTimeoutSignal } from '../stall-policy.mjs';
|
|
24
11
|
import { getLlmDispatcher } from '../../../shared/llm/http-agent.mjs';
|
|
25
|
-
import {
|
|
12
|
+
import { grokClientVersionHeaders } from './grok-client-version.mjs';
|
|
13
|
+
import {
|
|
14
|
+
decodeJwtPayload,
|
|
15
|
+
expiryFromAccessToken,
|
|
16
|
+
normalizeExpiresAtMs as _normalizeExpiresAt,
|
|
17
|
+
oauthCredentialStatus,
|
|
18
|
+
scrubOAuthSecrets,
|
|
19
|
+
} from './lib/oauth-token-utils.mjs';
|
|
26
20
|
|
|
27
21
|
// xAI's shared OAuth client. The consent screen renders this as "Grok Build".
|
|
28
|
-
|
|
29
22
|
export const CLIENT_ID = 'b1a00492-073a-47ea-816f-4c329264a828';
|
|
30
23
|
const ISSUER = 'https://auth.x.ai';
|
|
31
24
|
const DISCOVERY_URL = `${ISSUER}/.well-known/openid-configuration`;
|
|
@@ -47,25 +40,16 @@ export const TOKEN_REFRESH_SKEW_MS = 5 * 60_000;
|
|
|
47
40
|
// OAuth models route here for inference, including api.x.ai-discovered ones.
|
|
48
41
|
export const PROXY_BASE_URL = 'https://cli-chat-proxy.grok.com/v1';
|
|
49
42
|
const GROK_CLIENT_IDENTIFIER = 'grok-shell';
|
|
50
|
-
const GROK_CLI_VERSION_FALLBACK = '0.2.16';
|
|
51
|
-
|
|
52
|
-
// Use a Mixdog-controlled client version for the proxy version gate.
|
|
53
|
-
let _grokCliVersionCache = null;
|
|
54
|
-
function grokCliVersion() {
|
|
55
|
-
if (_grokCliVersionCache) return _grokCliVersionCache;
|
|
56
|
-
_grokCliVersionCache = String(process.env.MIXDOG_GROK_CLIENT_VERSION || '').trim() || GROK_CLI_VERSION_FALLBACK;
|
|
57
|
-
return _grokCliVersionCache;
|
|
58
|
-
}
|
|
59
43
|
|
|
60
44
|
// Headers the Grok CLI sends to clear the proxy version gate — extracted from
|
|
61
45
|
// the grok binary: x-grok-client-version (the actual 426 gate),
|
|
62
46
|
// x-grok-client-identifier, and a matching User-Agent.
|
|
63
47
|
export function proxyHeaders({ model, sendOpts, userId } = {}) {
|
|
64
|
-
const v =
|
|
48
|
+
const { 'x-grok-client-version': v, 'User-Agent': userAgent } = grokClientVersionHeaders();
|
|
65
49
|
const headers = {
|
|
66
50
|
'x-grok-client-version': v,
|
|
67
51
|
'x-grok-client-identifier': GROK_CLIENT_IDENTIFIER,
|
|
68
|
-
'User-Agent':
|
|
52
|
+
'User-Agent': userAgent,
|
|
69
53
|
};
|
|
70
54
|
const sessionId = String(sendOpts?.sessionId || sendOpts?.session?.id || '').trim();
|
|
71
55
|
const requestId = String(sendOpts?.requestId || '').trim() || (sendOpts ? randomUUID() : '');
|
|
@@ -93,7 +77,7 @@ export function resolveGrokOAuthResponsesTransport() {
|
|
|
93
77
|
// catalog surfaces the coding model as grok-build-0.1; map the legacy ids to
|
|
94
78
|
// it so a stale config selection doesn't hit a model-not-found. Exact table,
|
|
95
79
|
// not a heuristic.
|
|
96
|
-
export { normalizeGrokModelId } from '
|
|
80
|
+
export { normalizeGrokModelId } from '../../../shared/llm/provider-model-identities.mjs';
|
|
97
81
|
export const MODEL_CACHE_TTL_MS = 24 * 60 * 60_000;
|
|
98
82
|
// Bump when the on-disk cache shape changes so stale-shape entries are
|
|
99
83
|
// discarded instead of misread.
|
|
@@ -162,17 +146,7 @@ export function getRefreshLockPath() {
|
|
|
162
146
|
return `${getOwnTokenPath()}.refresh.lock`;
|
|
163
147
|
}
|
|
164
148
|
|
|
165
|
-
|
|
166
|
-
// to epoch milliseconds; 0 means unknown.
|
|
167
|
-
export function _normalizeExpiresAt(value) {
|
|
168
|
-
if (typeof value === 'string') {
|
|
169
|
-
const ms = Date.parse(value);
|
|
170
|
-
return Number.isFinite(ms) ? ms : 0;
|
|
171
|
-
}
|
|
172
|
-
const n = Number(value || 0);
|
|
173
|
-
if (!Number.isFinite(n) || n <= 0) return 0;
|
|
174
|
-
return n < 1e12 ? n * 1000 : n;
|
|
175
|
-
}
|
|
149
|
+
export { _normalizeExpiresAt };
|
|
176
150
|
|
|
177
151
|
export function _identityFromAccessToken(token) {
|
|
178
152
|
const payload = decodeJwtPayload(token);
|
|
@@ -276,49 +250,8 @@ export function describeGrokOAuthCredentials() {
|
|
|
276
250
|
}
|
|
277
251
|
const hasRefresh = Boolean(tokens.refresh_token);
|
|
278
252
|
const expiresAt = _normalizeExpiresAt(tokens.expires_at);
|
|
279
|
-
const expiring = expiresAt > 0 && expiresAt < Date.now() + TOKEN_REFRESH_SKEW_MS;
|
|
280
|
-
const expired = expiresAt > 0 && expiresAt <= Date.now();
|
|
281
253
|
const detail = tokens.source === 'own' ? 'Mixdog token store' : tokens.source || 'oauth';
|
|
282
|
-
|
|
283
|
-
return {
|
|
284
|
-
authenticated: expiresAt === 0 || !expired,
|
|
285
|
-
usable: expiresAt === 0 || !expired,
|
|
286
|
-
refreshable: false,
|
|
287
|
-
reauthRequired: expired,
|
|
288
|
-
status: expired ? 'Reauth Required' : 'Access Only',
|
|
289
|
-
detail: `${detail}; no refresh token`,
|
|
290
|
-
expiresAt,
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
if (expired)
|
|
294
|
-
return {
|
|
295
|
-
authenticated: true,
|
|
296
|
-
usable: false,
|
|
297
|
-
refreshable: true,
|
|
298
|
-
reauthRequired: false,
|
|
299
|
-
status: 'Refresh Required',
|
|
300
|
-
detail,
|
|
301
|
-
expiresAt,
|
|
302
|
-
};
|
|
303
|
-
if (expiring)
|
|
304
|
-
return {
|
|
305
|
-
authenticated: true,
|
|
306
|
-
usable: true,
|
|
307
|
-
refreshable: true,
|
|
308
|
-
reauthRequired: false,
|
|
309
|
-
status: 'Refresh Soon',
|
|
310
|
-
detail,
|
|
311
|
-
expiresAt,
|
|
312
|
-
};
|
|
313
|
-
return {
|
|
314
|
-
authenticated: true,
|
|
315
|
-
usable: true,
|
|
316
|
-
refreshable: true,
|
|
317
|
-
reauthRequired: false,
|
|
318
|
-
status: 'Valid',
|
|
319
|
-
detail,
|
|
320
|
-
expiresAt,
|
|
321
|
-
};
|
|
254
|
+
return oauthCredentialStatus({ hasRefresh, expiresAt, detail, refreshSkewMs: TOKEN_REFRESH_SKEW_MS });
|
|
322
255
|
} catch (err) {
|
|
323
256
|
return {
|
|
324
257
|
authenticated: false,
|
|
@@ -21,7 +21,6 @@ import { createTimeoutSignal } from '../stall-policy.mjs';
|
|
|
21
21
|
import { getLlmDispatcher, preconnect } from '../../../shared/llm/http-agent.mjs';
|
|
22
22
|
import { normalizeGrokToolSchemas } from './lib/grok-tool-schema.mjs';
|
|
23
23
|
|
|
24
|
-
// xAI's shared OAuth client. The consent screen renders this as "Grok Build".
|
|
25
24
|
import {
|
|
26
25
|
INFERENCE_BASE_URL,
|
|
27
26
|
TOKEN_REFRESH_SKEW_MS,
|
|
@@ -39,6 +38,7 @@ import {
|
|
|
39
38
|
_setRefreshInFlight,
|
|
40
39
|
refreshTokens,
|
|
41
40
|
} from './grok-oauth-tokens.mjs';
|
|
41
|
+
import { learnGrokRequiredVersion, warmGrokCliVersion } from './grok-client-version.mjs';
|
|
42
42
|
export {
|
|
43
43
|
hasGrokOAuthCredentials,
|
|
44
44
|
describeGrokOAuthCredentials,
|
|
@@ -223,12 +223,17 @@ function _isDatedGrokChatModel(m) {
|
|
|
223
223
|
return Boolean(m?.id) && !NON_CHAT_MODEL_RE.test(m.id) && Number(m.created) > 0;
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
function
|
|
226
|
+
function _newestDatedGrokChatModel(models) {
|
|
227
227
|
let best = null;
|
|
228
228
|
for (const m of models) {
|
|
229
229
|
if (!_isDatedGrokChatModel(m)) continue;
|
|
230
230
|
if (!best || Number(m.created) > Number(best.created)) best = m;
|
|
231
231
|
}
|
|
232
|
+
return best;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function _markLatestGrok(models) {
|
|
236
|
+
const best = _newestDatedGrokChatModel(models);
|
|
232
237
|
if (best) best.latest = true;
|
|
233
238
|
}
|
|
234
239
|
|
|
@@ -239,12 +244,7 @@ function _markLatestGrok(models) {
|
|
|
239
244
|
function resolveLatestGrokModel() {
|
|
240
245
|
const cached = _modelCache.loadSync();
|
|
241
246
|
if (!Array.isArray(cached)) return null;
|
|
242
|
-
|
|
243
|
-
for (const m of cached) {
|
|
244
|
-
if (!_isDatedGrokChatModel(m)) continue;
|
|
245
|
-
if (!best || Number(m.created) > Number(best.created)) best = m;
|
|
246
|
-
}
|
|
247
|
-
return best?.id || null;
|
|
247
|
+
return _newestDatedGrokChatModel(cached)?.id || null;
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
async function ensureLatestGrokModel(provider) {
|
|
@@ -384,6 +384,7 @@ export class GrokOAuthProvider {
|
|
|
384
384
|
}
|
|
385
385
|
const useModel = normalizeGrokModelId(model || (await ensureLatestGrokModel(this)));
|
|
386
386
|
const tokens = await this.ensureAuth();
|
|
387
|
+
await warmGrokCliVersion();
|
|
387
388
|
const requestHeaders = proxyHeaders({
|
|
388
389
|
model: useModel,
|
|
389
390
|
sendOpts,
|
|
@@ -413,6 +414,22 @@ export class GrokOAuthProvider {
|
|
|
413
414
|
// TYPED status only: a rejection whose only evidence is message
|
|
414
415
|
// text is never treated as an auth failure worth re-issuing.
|
|
415
416
|
const rejectedStatus = Number(err?.httpStatus || err?.status);
|
|
417
|
+
// 426 = client version gate. Retry once only when the body stated a
|
|
418
|
+
// minimum we did not already satisfy; nothing was emitted before it.
|
|
419
|
+
if (
|
|
420
|
+
rejectedStatus === 426 &&
|
|
421
|
+
err.liveTextEmitted !== true &&
|
|
422
|
+
err.emittedToolCall !== true &&
|
|
423
|
+
learnGrokRequiredVersion(err?.message)
|
|
424
|
+
) {
|
|
425
|
+
const upgraded = proxyHeaders({ model: useModel, sendOpts, userId: tokens.user_id });
|
|
426
|
+
return await this._ensureInner(tokens.access_token, useModel, upgraded)._doSend(
|
|
427
|
+
messages,
|
|
428
|
+
useModel,
|
|
429
|
+
grokTools,
|
|
430
|
+
sendOpts
|
|
431
|
+
);
|
|
432
|
+
}
|
|
416
433
|
if (rejectedStatus === 401 || rejectedStatus === 403) {
|
|
417
434
|
// A stream-level rejection after text/tool dispatch cannot be safely
|
|
418
435
|
// replayed: the client has already observed output or may have
|
|
@@ -467,6 +484,7 @@ export class GrokOAuthProvider {
|
|
|
467
484
|
}
|
|
468
485
|
const timeout = createTimeoutSignal(null, 10_000, 'grok-oauth proxy model list');
|
|
469
486
|
try {
|
|
487
|
+
await warmGrokCliVersion();
|
|
470
488
|
const res = await fetch(`${PROXY_BASE_URL}/models`, {
|
|
471
489
|
method: 'GET',
|
|
472
490
|
headers: { Authorization: `Bearer ${tokens.access_token}`, ...proxyHeaders() },
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Offline fallback for both Anthropic routes when /v1/models is unavailable:
|
|
2
|
+
// the current generation only, one id per family.
|
|
3
|
+
export const MODELS = [
|
|
4
|
+
{ id: 'claude-opus-5-5', name: 'Claude Opus 5.5', provider: 'anthropic', family: 'opus', contextWindow: 1000000 },
|
|
5
|
+
{ id: 'claude-fable-5-1', name: 'Claude Fable 5.1', provider: 'anthropic', family: 'fable', contextWindow: 1000000 },
|
|
6
|
+
{ id: 'claude-sonnet-5', name: 'Claude Sonnet 5', provider: 'anthropic', family: 'sonnet', contextWindow: 1000000 },
|
|
7
|
+
];
|
|
8
|
+
export const ANTHROPIC_VERSION = '2023-06-01';
|