mixdog 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/package.json +2 -1
- package/scripts/gate-local.mjs +6 -4
- package/scripts/lib/gate-scheduler.mjs +29 -11
- package/scripts/probe-provider-catalog.mjs +31 -0
- package/scripts/provider-pingpong-live.mjs +599 -0
- package/scripts/session-sweep.mjs +5 -25
- package/src/agents/advisor/AGENT.md +1 -1
- package/src/agents/advisor/agent.json +1 -1
- package/src/agents/maintainer/AGENT.md +1 -1
- package/src/agents/maintainer/agent.json +1 -1
- package/src/agents/reviewer/AGENT.md +2 -4
- package/src/agents/security/AGENT.md +1 -2
- package/src/agents/writer/AGENT.md +2 -3
- package/src/defaults/shipped-history.json +11 -1
- package/src/defaults/skills/image/SKILL.md +21 -23
- package/src/defaults/skills/setup/SKILL.md +6 -1
- package/src/defaults/skills/setup/references/actions.md +44 -22
- package/src/defaults/skills/setup/references/surfaces.md +10 -8
- package/src/headless-exec.mjs +15 -8
- package/src/lib/keychain-cjs.cjs +20 -15
- package/src/output-styles/common.md +11 -10
- package/src/rules/agent/AGENT.md +6 -4
- package/src/rules/lead/LEAD.md +7 -9
- package/src/rules/shared/45-destructive.md +4 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +1 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +28 -7
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -11
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +92 -61
- package/src/runtime/agent/orchestrator/cache-mtime.mjs +10 -1
- package/src/runtime/agent/orchestrator/config-providers-merge.mjs +7 -0
- package/src/runtime/agent/orchestrator/config.mjs +5 -0
- package/src/runtime/agent/orchestrator/context/collect.mjs +1 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +26 -7
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +112 -7
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +101 -23
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-api-key-fetch.mjs +36 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +48 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-error-contract.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +24 -17
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +9 -9
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +26 -44
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +31 -15
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-blocks.mjs +20 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-delta.mjs +15 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/message-events.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -5
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-state.mjs +14 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +41 -12
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +13 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +131 -9
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +29 -10
- package/src/runtime/agent/orchestrator/providers/antigravity-retry-policy.mjs +125 -8
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +12 -62
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +117 -41
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +117 -72
- package/src/runtime/agent/orchestrator/providers/compat-request-policy.mjs +78 -2
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +39 -5
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-native-context.mjs +48 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-exec.mjs +144 -34
- package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +28 -4
- package/src/runtime/agent/orchestrator/providers/cursor-wire-request.mjs +8 -4
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +42 -11
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-messages.mjs +109 -6
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +17 -4
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +22 -2
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +73 -7
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +75 -6
- package/src/runtime/agent/orchestrator/providers/custom-reasoning.mjs +34 -7
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +32 -6
- package/src/runtime/agent/orchestrator/providers/deepseek.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +29 -5
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +36 -13
- package/src/runtime/agent/orchestrator/providers/gemini-error-contract.mjs +101 -11
- package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +41 -5
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/gemini-rest-stream/watchdogs.mjs +16 -5
- package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +19 -14
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +371 -41
- package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +97 -49
- package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +81 -10
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +35 -8
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/action-input-contract.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-native-blocks.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +253 -42
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-server-tool-usage.mjs +18 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +27 -6
- package/src/runtime/agent/orchestrator/providers/lib/claude-bridge-schema.mjs +392 -0
- package/src/runtime/agent/orchestrator/providers/lib/inclusive-usage.mjs +54 -0
- package/src/runtime/agent/orchestrator/providers/lib/origin-bound-fetch.mjs +16 -0
- package/src/runtime/agent/orchestrator/providers/lib/request-compression.mjs +86 -0
- package/src/runtime/agent/orchestrator/providers/lib/responses-terminal-fields.mjs +11 -0
- package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/lib/wire-pairing.mjs +50 -22
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +133 -21
- package/src/runtime/agent/orchestrator/providers/mimo-oauth-profile.mjs +13 -15
- package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +1 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +92 -16
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +13 -13
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +133 -62
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +35 -14
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +39 -7
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +2 -9
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-error-contract.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +84 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +47 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-reasoning-field.mjs +155 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +40 -24
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +63 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2901 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-parity.fixtures.mjs +183 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +87 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +51 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +103 -26
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +23 -4
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +11 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +17 -2
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +15 -23
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +64 -52
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +23 -10
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +28 -5
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +18 -7
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +80 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +72 -24
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +323 -0
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +50 -16
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +7 -19
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/refusals.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +51 -36
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +30 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +25 -6
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +18 -9
- package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +181 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +78 -70
- package/src/runtime/agent/orchestrator/providers/openrouter.mjs +74 -0
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +150 -10
- package/src/runtime/agent/orchestrator/providers/registry.mjs +13 -2
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/transport-scope.d.mts +6 -0
- package/src/runtime/agent/orchestrator/providers/transport-scope.mjs +28 -0
- package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +164 -0
- package/src/runtime/agent/orchestrator/providers/wire-route.mjs +522 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +1131 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search.fixtures.mjs +195 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +104 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +8 -6
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +24 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +15 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +30 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +3 -2
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +8 -3
- package/src/runtime/agent/orchestrator/runtime-core/provider-request-snapshot.mjs +7 -3
- package/src/runtime/agent/orchestrator/runtime-core/session-title.mjs +21 -1
- package/src/runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs +16 -3
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge-contract.mjs +6 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +526 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-schema.mjs +10 -7
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +178 -71
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +102 -12
- package/src/runtime/agent/orchestrator/runtime-core/tool-exposure.mjs +96 -0
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +10 -8
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -2
- package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +24 -0
- package/src/runtime/agent/orchestrator/session/cache/tool-result-reuse.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/catalog-db/index.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +5 -11
- package/src/runtime/agent/orchestrator/session/catalog-db/worker.mjs +6 -22
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +16 -93
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +16 -2
- package/src/runtime/agent/orchestrator/session/compact/summary-anchor.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +148 -0
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +17 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -4
- package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/historical-session-closure.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/assistant-commit.mjs +2 -5
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +89 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +56 -0
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +18 -8
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +1 -27
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/segments.mjs +4 -10
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +2 -9
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +24 -10
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +135 -0
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +31 -4
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +76 -0
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +67 -20
- package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +10 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-call-resolution.mjs +95 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +30 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +29 -5
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +147 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +7 -5
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +33 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-support.mjs +0 -4
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +23 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +34 -12
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +54 -13
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +33 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +57 -25
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +11 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +22 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +57 -13
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/failed-turn-rewind.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +6 -120
- package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +231 -16
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +42 -49
- package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +50 -0
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +47 -17
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +26 -4
- package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +36 -35
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +29 -13
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-recovery.mjs +45 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +4 -10
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +17 -1
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/side-question.mjs +197 -0
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +22 -15
- package/src/runtime/agent/orchestrator/session/store/lifecycle-read.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/listing.mjs +2 -6
- package/src/runtime/agent/orchestrator/session/store/live-cache-eviction.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +46 -37
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/load-session.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +44 -37
- package/src/runtime/agent/orchestrator/session/store/session-observers.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/session-paths.mjs +59 -0
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +27 -21
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +0 -8
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +6 -18
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +33 -106
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store-agent-worker-pool.mjs +5 -8
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +136 -196
- package/src/runtime/agent/orchestrator/session/store-summary-archived-agent.mjs +34 -15
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +53 -115
- package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +10 -1
- package/src/runtime/agent/orchestrator/session/store-summary-locations.mjs +3 -29
- package/src/runtime/agent/orchestrator/session/store-summary-reader-catalog-fixture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +17 -10
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +9 -20
- package/src/runtime/agent/orchestrator/session/store.mjs +22 -19
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +12 -12
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +38 -14
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +15 -4
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/tool-schema-rejection.mjs +79 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +72 -15
- package/src/runtime/agent/orchestrator/session/turn-failure.mjs +45 -0
- package/src/runtime/agent/orchestrator/stall-policy.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +8 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/command-preflight.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +5 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/inline-hoist.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +218 -20
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +160 -39
- package/src/runtime/agent/orchestrator/tools/builtin/git-partial-stage.mjs +7 -5
- package/src/runtime/agent/orchestrator/tools/builtin/grep-formatting.mjs +14 -5
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-context-expander.mjs +4 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-output.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +48 -44
- package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +10 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +247 -49
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +5 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +6 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +23 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +20 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +101 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/root-resolution.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +67 -0
- package/src/runtime/agent/orchestrator/tools/lib/process-table-fixture.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +303 -63
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +2 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +108 -18
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +77 -11
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +81 -5
- package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +73 -39
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +18 -1
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -4
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +88 -12
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +2 -0
- package/src/runtime/attachments/store.d.mts +9 -0
- package/src/runtime/attachments/store.mjs +80 -9
- package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -1
- package/src/runtime/browser-bridge/browser-action-contract.mjs +0 -2
- package/src/runtime/computer-bridge/action-schema.mjs +219 -196
- package/src/runtime/computer-bridge/linux-readiness.d.mts +0 -2
- package/src/runtime/computer-bridge/linux-readiness.mjs +0 -16
- package/src/runtime/effort-judge/judge-client.mjs +21 -4
- package/src/runtime/effort-judge/judge-worker.mjs +4 -1
- package/src/runtime/github/tool.mjs +208 -17
- package/src/runtime/media/adapters/codex-image.mjs +140 -21
- package/src/runtime/media/catalog.mjs +4 -4
- package/src/runtime/media/chatgpt-usage.mjs +55 -0
- package/src/runtime/media/defaults.mjs +37 -0
- package/src/runtime/media/jobs.mjs +12 -2
- package/src/runtime/media/lanes.mjs +12 -0
- package/src/runtime/media/tool-defs.mjs +15 -4
- package/src/runtime/media/tool.mjs +41 -12
- package/src/runtime/media/upstream-error.mjs +72 -6
- package/src/runtime/memory/index.mjs +1 -0
- package/src/runtime/memory/lib/http-router/ingest-routes.mjs +22 -1
- package/src/runtime/memory/lib/ingest/transcript-offsets.mjs +2 -0
- package/src/runtime/memory/lib/ingest/transcript-rows.mjs +1 -0
- package/src/runtime/memory/lib/pg/adapter.mjs +98 -1
- package/src/runtime/memory/lib/pg/process.mjs +36 -33
- package/src/runtime/memory/lib/pg/run-child.mjs +49 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +112 -4
- package/src/runtime/memory/lib/runtime-fetcher.mjs +12 -13
- package/src/runtime/memory/lib/transcript-ingest.mjs +14 -0
- package/src/runtime/office/README.md +1 -1
- package/src/runtime/office/authoring/docx-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/html-browser.mjs +18 -8
- package/src/runtime/office/authoring/html-document-author.mjs +2 -0
- package/src/runtime/office/authoring/pdf-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/pptx-contact-sheet.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-measure.mjs +3 -1
- package/src/runtime/office/authoring/pptx-html-runner.mjs +2 -0
- package/src/runtime/office/authoring/xlsx-html-runner.mjs +3 -1
- package/src/runtime/office/core/office-actions-read.mjs +3 -0
- package/src/runtime/office/core/office-render-preview.mjs +2 -0
- package/src/runtime/office/core/office-session-dispatch.mjs +7 -0
- package/src/runtime/office/core/office-sessionless-actions.mjs +8 -0
- package/src/runtime/office/core/office-sessions.mjs +5 -0
- package/src/runtime/office/core/office-transactions.mjs +3 -0
- package/src/runtime/office/core/office-write-ledger.mjs +94 -0
- package/src/runtime/office/design/library/templates/mixdog-executive.mixdog-edit.pptx +0 -0
- package/src/runtime/office/index.mjs +29 -0
- package/src/runtime/office/pdf/pdf-analysis.mjs +0 -68
- package/src/runtime/office/pdf/pdf-edit-document.mjs +2 -0
- package/src/runtime/office/pdf/pdf-render.mjs +23 -7
- package/src/runtime/office/pdf/pdf-security.mjs +2 -0
- package/src/runtime/office/portable/portable-opc.mjs +4 -1
- package/src/runtime/office/quality/visual-diff.mjs +2 -0
- package/src/runtime/session-search/session-search-ingest.mjs +1 -1
- package/src/runtime/shared/agent-reap-state.mjs +13 -0
- package/src/runtime/shared/atomic-file.d.mts +1 -1
- package/src/runtime/shared/background-tasks.mjs +6 -1
- package/src/runtime/shared/bounded-file-read.mjs +13 -0
- package/src/runtime/shared/bounded-line-diff.mjs +191 -0
- package/src/runtime/shared/browser-launch.mjs +15 -0
- package/src/runtime/shared/buffered-appender.mjs +18 -0
- package/src/runtime/shared/config.mjs +78 -18
- package/src/runtime/shared/err-text.mjs +48 -4
- package/src/runtime/shared/file-lock.mjs +6 -5
- package/src/runtime/shared/file-permissions.d.mts +6 -1
- package/src/runtime/shared/file-permissions.mjs +54 -6
- package/src/runtime/shared/llm/anthropic-betas.mjs +1 -2
- package/src/runtime/shared/llm/anthropic-effort.mjs +6 -0
- package/src/runtime/shared/llm/provider-model-identities.mjs +1 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +5 -2
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +3 -0
- package/src/runtime/shared/loopback-listener.mjs +9 -0
- package/src/runtime/shared/model-route-chain.d.mts +8 -0
- package/src/runtime/shared/model-route-chain.mjs +48 -0
- package/src/runtime/shared/model-route-fallback.mjs +22 -0
- package/src/runtime/shared/pid-liveness.mjs +12 -0
- package/src/runtime/shared/provider-api-key.mjs +8 -0
- package/src/runtime/shared/provider-timeout-phase.mjs +17 -0
- package/src/runtime/shared/quiet-progress.d.mts +35 -0
- package/src/runtime/shared/quiet-progress.mjs +101 -0
- package/src/runtime/shared/quota-resume-store.mjs +32 -1
- package/src/runtime/shared/read-row-numbers.mjs +44 -0
- package/src/runtime/shared/remote-intent.mjs +2 -42
- package/src/runtime/shared/review-diff.mjs +52 -0
- package/src/runtime/shared/session-sidebar-host.d.mts +4 -0
- package/src/runtime/shared/session-sidebar-host.mjs +38 -0
- package/src/runtime/shared/slow-span.mjs +121 -0
- package/src/runtime/shared/statusline/statusline-segments.mjs +52 -6
- package/src/runtime/shared/tool-card-model/card-header.mjs +7 -1
- package/src/runtime/shared/tool-card-model/generic-detail.mjs +39 -5
- package/src/runtime/shared/tool-card-model.mjs +5 -2
- package/src/runtime/shared/tool-output-budget.mjs +2 -0
- package/src/runtime/shared/tool-output-limit.mjs +4 -0
- package/src/runtime/shared/tool-primitives.mjs +13 -0
- package/src/runtime/shared/tool-result-summary.mjs +22 -1
- package/src/runtime/shared/tool-status.mjs +3 -2
- package/src/runtime/shared/tool-surface.mjs +20 -6
- package/src/runtime/shared/tool-work-units.mjs +54 -11
- package/src/runtime/shared/transcript-metadata.mjs +49 -1
- package/src/runtime/shared/transcript-turn-keys.mjs +33 -0
- package/src/runtime/shared/transcript-writer/purge.mjs +74 -0
- package/src/runtime/shared/transcript-writer/transcript-file.mjs +10 -1
- package/src/runtime/shared/transcript-writer.mjs +24 -6
- package/src/runtime/shared/turn-changes.mjs +269 -100
- package/src/runtime/shared/turn-review-reply.mjs +8 -39
- package/src/runtime/shared/turn-snapshot-store.mjs +19 -108
- package/src/runtime/shared/turn-snapshot.mjs +865 -683
- package/src/runtime/shared/turn-worktree-snapshot.mjs +183 -255
- package/src/runtime/shared/user-data-guard.mjs +262 -49
- package/src/runtime/shared/worktrees/activity-gate.mjs +175 -0
- package/src/runtime/shared/worktrees/branch-management.mjs +179 -0
- package/src/runtime/shared/worktrees/carry.mjs +533 -0
- package/src/runtime/shared/worktrees/contract.mjs +60 -0
- package/src/runtime/shared/worktrees/dependencies.mjs +456 -0
- package/src/runtime/shared/worktrees/file-recovery.mjs +84 -0
- package/src/runtime/shared/worktrees/git-head.mjs +214 -0
- package/src/runtime/shared/worktrees/git.mjs +8 -3
- package/src/runtime/shared/worktrees/include.mjs +125 -7
- package/src/runtime/shared/worktrees/lock.mjs +1 -1
- package/src/runtime/shared/worktrees/maintenance.mjs +20 -2
- package/src/runtime/shared/worktrees/manager.mjs +525 -31
- package/src/runtime/shared/worktrees/merge.mjs +31 -21
- package/src/runtime/shared/worktrees/owner.mjs +2 -1
- package/src/runtime/shared/worktrees/paths.d.mts +6 -0
- package/src/runtime/shared/worktrees/preparation-report.mjs +79 -0
- package/src/runtime/shared/worktrees/setup-commands.mjs +232 -0
- package/src/runtime/shared/worktrees/workspace-visibility.mjs +17 -0
- package/src/runtime/terminal-bridge/client.mjs +57 -20
- package/src/runtime/terminal-bridge/tool-defs.mjs +13 -6
- package/src/runtime/tidy/apply.mjs +47 -2
- package/src/runtime/tidy/run-engines.mjs +11 -5
- package/src/session-runtime/agent-tool-routing.mjs +19 -13
- package/src/session-runtime/boot/apis.mjs +20 -6
- package/src/session-runtime/boot/config.mjs +2 -0
- package/src/session-runtime/boot/facade.mjs +4 -0
- package/src/session-runtime/boot/infrastructure.mjs +6 -1
- package/src/session-runtime/boot/session.mjs +3 -3
- package/src/session-runtime/boot/tools.mjs +7 -1
- package/src/session-runtime/conversation-import/service.mjs +1 -1
- package/src/session-runtime/cwd-plugins/cwd-apply.mjs +12 -5
- package/src/session-runtime/goal-facade-api.mjs +2 -2
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +91 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -1
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +15 -5
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +137 -26
- package/src/session-runtime/internal-tool-executor.mjs +8 -2
- package/src/session-runtime/lifecycle/cold-heir.mjs +187 -0
- package/src/session-runtime/lifecycle/inheritance.mjs +71 -27
- package/src/session-runtime/lifecycle/session-catalog.mjs +25 -18
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +6 -0
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +36 -48
- package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
- package/src/session-runtime/lifecycle/shared.mjs +5 -6
- package/src/session-runtime/lifecycle/teardown/session-close.mjs +6 -5
- package/src/session-runtime/lifecycle/teardown.mjs +70 -14
- package/src/session-runtime/lifecycle-api.mjs +1 -0
- package/src/session-runtime/mcp-glue/connect.mjs +17 -5
- package/src/session-runtime/media-api.mjs +8 -0
- package/src/session-runtime/model-route/route-ownership.mjs +60 -0
- package/src/session-runtime/model-route/route-persist.mjs +3 -2
- package/src/session-runtime/model-route/set-route.mjs +116 -36
- package/src/session-runtime/model-route/web-search-route.mjs +7 -2
- package/src/session-runtime/model-route-api.mjs +4 -2
- package/src/session-runtime/native-web-search/routes.mjs +37 -24
- package/src/session-runtime/native-web-search-usage.mjs +51 -0
- package/src/session-runtime/native-web-search.mjs +19 -9
- package/src/session-runtime/new-session-config.mjs +4 -2
- package/src/session-runtime/provider-auth/login.mjs +4 -0
- package/src/session-runtime/provider-auth/setup.mjs +4 -0
- package/src/session-runtime/provider-models/catalog-load.mjs +9 -0
- package/src/session-runtime/provider-models/web-search-catalog.mjs +23 -3
- package/src/session-runtime/provider-models.mjs +1 -0
- package/src/session-runtime/provider-usage.mjs +4 -0
- package/src/session-runtime/resource-scope-decorate.mjs +10 -3
- package/src/session-runtime/route-resolution.mjs +3 -1
- package/src/session-runtime/runtime-core.mjs +4 -0
- package/src/session-runtime/runtime-facade.mjs +6 -0
- package/src/session-runtime/runtime-review-api.mjs +8 -2
- package/src/session-runtime/services/agent-task-status.mjs +2 -0
- package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +0 -3
- package/src/session-runtime/services/agent-tool/close-flow.mjs +6 -7
- package/src/session-runtime/services/agent-tool/execute-send.mjs +2 -2
- package/src/session-runtime/services/agent-tool/execute-spawn.mjs +36 -3
- package/src/session-runtime/services/agent-tool/execute.mjs +9 -1
- package/src/session-runtime/services/agent-tool/helpers.mjs +30 -7
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +81 -20
- package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +7 -2
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +6 -3
- package/src/session-runtime/services/agent-tool/lead-worker-index/forgotten-leads.mjs +29 -0
- package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +1 -1
- package/src/session-runtime/services/agent-tool/lead-worker-index/lead-rows.mjs +3 -4
- package/src/session-runtime/services/agent-tool/lead-worker-index/reap-timers.mjs +9 -3
- package/src/session-runtime/services/agent-tool/lead-worker-index/row-settlement.mjs +7 -18
- package/src/session-runtime/services/agent-tool/lead-worker-index.mjs +82 -13
- package/src/session-runtime/services/agent-tool/model-select.mjs +82 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +24 -6
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +3 -1
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +19 -5
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +5 -4
- package/src/session-runtime/services/agent-tool/spawn-flow.mjs +2 -1
- package/src/session-runtime/services/agent-tool/spawn-preset.mjs +3 -0
- package/src/session-runtime/services/agent-tool/tag-registry/tag-lookup.mjs +1 -3
- package/src/session-runtime/services/agent-tool/tag-registry/tag-refresh.mjs +1 -3
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +18 -10
- package/src/session-runtime/services/agent-tool/terminal-reaper/scan-admission.mjs +8 -41
- package/src/session-runtime/services/agent-tool/terminal-reaper/stale-rows.mjs +3 -3
- package/src/session-runtime/services/agent-tool/terminal-reaper.mjs +6 -23
- package/src/session-runtime/services/agent-tool/terminal-trace.mjs +0 -1
- package/src/session-runtime/services/agent-tool/tool-def.mjs +7 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +32 -20
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +5 -2
- package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +10 -1
- package/src/session-runtime/services/agent-tool/worker-index.mjs +74 -15
- package/src/session-runtime/services/agent-tool.mjs +7 -0
- package/src/session-runtime/services/agent-watchdog-registry.mjs +2 -0
- package/src/session-runtime/services/channel-admin.mjs +19 -3
- package/src/session-runtime/services/memory-runtime-proxy/calls.mjs +4 -0
- package/src/session-runtime/services/memory-runtime-proxy.mjs +1 -0
- package/src/session-runtime/services/provider-admin.mjs +158 -15
- package/src/session-runtime/session-create/session-options.mjs +7 -5
- package/src/session-runtime/session-create/session-start-hook.mjs +2 -1
- package/src/session-runtime/session-transcript-purge.mjs +32 -0
- package/src/session-runtime/session-transcript.mjs +4 -5
- package/src/session-runtime/session-turn-api.mjs +17 -14
- package/src/session-runtime/settings-builtin-tools-api.mjs +18 -6
- package/src/session-runtime/setup-tool/executor.mjs +57 -9
- package/src/session-runtime/setup-tool/extended-actions.mjs +86 -6
- package/src/session-runtime/setup-tool/settings-contract.mjs +18 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +25 -4
- package/src/session-runtime/skills-api.mjs +3 -5
- package/src/session-runtime/tool-policy-refresh.mjs +83 -32
- package/src/session-runtime/tool-surface.mjs +5 -1
- package/src/session-runtime/turn/agent-ops.mjs +49 -2
- package/src/session-runtime/turn/compaction-gate.mjs +25 -0
- package/src/session-runtime/turn/session-ops.mjs +7 -5
- package/src/session-runtime/turn/side-question-ops.mjs +19 -0
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +7 -1
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +12 -3
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +18 -2
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +26 -45
- package/src/session-runtime/usage-stats-api.mjs +46 -11
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +16 -1
- package/src/session-runtime/workspace/admission-gate.mjs +44 -15
- package/src/session-runtime/workspace/project-branches.mjs +35 -41
- package/src/session-runtime/workspace/transition-steps.mjs +215 -116
- package/src/session-runtime/workspace/transitions.mjs +428 -73
- package/src/standalone/channel-transport.mjs +3 -4
- package/src/standalone/daemon-agent-control.mjs +9 -1
- package/src/standalone/daemon-desktop-runtime.mjs +32 -1
- package/src/standalone/daemon-local-session-bridge.mjs +14 -1
- package/src/standalone/daemon-owner.mjs +17 -4
- package/src/standalone/daemon-pg-stop.mjs +49 -0
- package/src/standalone/daemon-session-control.mjs +88 -0
- package/src/standalone/daemon-stop-budget.d.mts +2 -0
- package/src/standalone/daemon-stop-budget.mjs +18 -0
- package/src/standalone/daemon-stored-session-views.mjs +25 -3
- package/src/standalone/daemon-telemetry.mjs +19 -0
- package/src/standalone/daemon.mjs +63 -1
- package/src/standalone/desktop-service-registry.mjs +5 -0
- package/src/standalone/local-session-runtime.mjs +80 -30
- package/src/standalone/session-client.mjs +42 -0
- package/src/standalone/session-protocol.mjs +14 -0
- package/src/standalone/session-proxy/projection.mjs +41 -4
- package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +15 -1
- package/src/standalone/session-runtime-inline-host.mjs +3 -0
- package/src/standalone/session-service/agent-tree/agent-cancel.mjs +91 -49
- package/src/standalone/session-service/agent-tree/agent-child.mjs +19 -1
- package/src/standalone/session-service/agent-tree/agent-registry.mjs +25 -0
- package/src/standalone/session-service/agent-tree/agent-turns.mjs +9 -1
- package/src/standalone/session-service/agent-tree.mjs +28 -2
- package/src/standalone/session-service/entries/session-loads.mjs +16 -5
- package/src/standalone/session-service/entries.mjs +1 -0
- package/src/standalone/session-service/projection/transcript-window.mjs +39 -0
- package/src/standalone/session-service/quota-resume.mjs +28 -13
- package/src/standalone/session-service/session-calls/session-action.mjs +18 -3
- package/src/standalone/session-service/session-calls/session-turns.mjs +17 -6
- package/src/standalone/session-service/session-calls/session-views.mjs +6 -0
- package/src/standalone/session-service-api.mjs +6 -1
- package/src/standalone/session-state-patch.d.mts +2 -1
- package/src/standalone/session-state-patch.mjs +41 -1
- package/src/standalone/session-tool-output.mjs +82 -0
- package/src/tui/App.jsx +25 -0
- package/src/tui/app/app-view/floating-panel.jsx +26 -1
- package/src/tui/app/app-view.jsx +2 -1
- package/src/tui/app/btw-controller.mjs +118 -0
- package/src/tui/app/create-app-pickers.mjs +2 -0
- package/src/tui/app/provider-setup/provider-items.mjs +8 -0
- package/src/tui/app/provider-setup-picker.mjs +15 -3
- package/src/tui/app/shell-layout/row-budgets.mjs +11 -1
- package/src/tui/app/shell-layout/surfaces.mjs +3 -1
- package/src/tui/app/slash-commands.mjs +19 -3
- package/src/tui/app/slash-dispatch/session-commands.mjs +68 -6
- package/src/tui/app/use-global-key-input/approval-shortcut.mjs +12 -0
- package/src/tui/app/use-global-key-input.mjs +5 -12
- package/src/tui/app/use-prompt-handlers.mjs +11 -0
- package/src/tui/components/BtwPanel.jsx +53 -0
- package/src/tui/components/QuestionPanel.jsx +275 -0
- package/src/tui/components/Spinner.jsx +4 -0
- package/src/tui/components/SpinnerByline.jsx +21 -2
- package/src/tui/components/question-panel-model.mjs +156 -0
- package/src/tui/components/status-line/local-line.mjs +10 -2
- package/src/tui/dist/index.mjs +2897 -1722
- package/src/tui/session/active-tool-summary.mjs +1 -1
- package/src/tui/session/context-state.mjs +4 -5
- package/src/tui/session/goal-continuation/continuation-queue.mjs +2 -3
- package/src/tui/session/goal-continuation/deadline-delivery.mjs +4 -2
- package/src/tui/session/goal-continuation/session-boundary.mjs +21 -0
- package/src/tui/session/quota-resume.mjs +140 -61
- package/src/tui/session/session-api/commands.mjs +14 -10
- package/src/tui/session/session-api/controls.mjs +14 -2
- package/src/tui/session/session-api/integrations.mjs +9 -2
- package/src/tui/session/session-api/lifecycle/dispose.mjs +3 -9
- package/src/tui/session/session-api/lifecycle/resume.mjs +2 -7
- package/src/tui/session/session-api/lifecycle.mjs +14 -11
- package/src/tui/session/session-api/media.mjs +2 -0
- package/src/tui/session/session-api/routes.mjs +81 -57
- package/src/tui/session/session-api/settings.mjs +9 -3
- package/src/tui/session/session-api/worktree.mjs +3 -2
- package/src/tui/session/session-api.mjs +1 -0
- package/src/tui/session/session-flow/auto-clear.mjs +1 -3
- package/src/tui/session/session-flow/drain.mjs +6 -4
- package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -0
- package/src/tui/session/session-flow/queue/take-entries.mjs +2 -1
- package/src/tui/session/session-flow/queue.mjs +1 -1
- package/src/tui/session/tool-approval.mjs +20 -8
- package/src/tui/session/transcript-spill.mjs +14 -7
- package/src/tui/session/transcript-store/streaming-tail.mjs +1 -1
- package/src/tui/session/tui-steering-persist.mjs +3 -5
- package/src/tui/session/turn-quiet.mjs +53 -0
- package/src/tui/session/turn-stream.mjs +179 -32
- package/src/tui/session/turn.mjs +50 -36
- package/src/tui/session/worktree-setup-notice.mjs +38 -0
- package/src/tui/spinner-meta.mjs +10 -0
- package/src/tui/spinner-verbs.mjs +3 -0
- package/src/ui/statusline.mjs +13 -3
- package/src/workflows/default/WORKFLOW.md +3 -1
- package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +0 -1
- package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +0 -346
- package/src/runtime/agent/orchestrator/session/manager/session-owner-liveness.mjs +0 -117
- package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +0 -246
- package/src/session-runtime/services/agent-tool/terminal-reaper/reap-timers.mjs +0 -142
- package/src/session-runtime/turn/share-ops.mjs +0 -77
- package/src/tui/session/cross-surface-share.mjs +0 -406
- package/src/tui/session/live-share/delta.mjs +0 -153
- package/src/tui/session/live-share/mirror.mjs +0 -106
- package/src/tui/session/live-share/owner.mjs +0 -254
- package/src/tui/session/live-share/retry.mjs +0 -54
- package/src/tui/session/live-share/viewer/frame-router.mjs +0 -32
- package/src/tui/session/live-share/viewer/pipe-client.mjs +0 -108
- package/src/tui/session/live-share/viewer/submit-acks.mjs +0 -65
- package/src/tui/session/live-share/viewer/sync-waiters.mjs +0 -53
- package/src/tui/session/live-share/viewer.mjs +0 -99
- package/src/tui/session/live-share/wire.mjs +0 -44
- package/src/tui/session/live-share.mjs +0 -154
- package/src/tui/session/shared-dir-watch.mjs +0 -69
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
// application/selection logic. Pure module (session objects passed in).
|
|
4
4
|
import { clean } from './session-text.mjs';
|
|
5
5
|
import { mergePendingDeferredToolDelta } from './deferred-tool-delta.mjs';
|
|
6
|
-
import { applyInitialDeferredToolManifestToBp2
|
|
6
|
+
import { applyInitialDeferredToolManifestToBp2 } from '../context/collect.mjs';
|
|
7
7
|
import { getMcpServerInstructionsMap, getMcpTools, getMcpToolGeneration } from '../mcp/client.mjs';
|
|
8
8
|
import { filterMcpToolsForSession } from './extension-scopes.mjs';
|
|
9
|
-
import { isDeferredToolAvailable } from './deferred-tool-availability.mjs';
|
|
9
|
+
import { isDeferredToolAvailable, isToolPermittedBySessionPolicy } from './deferred-tool-availability.mjs';
|
|
10
|
+
import { routeToolExclusionReason } from '../session/loop/provider-tool-exclusions.mjs';
|
|
10
11
|
import { isResponsesFreeformTool, toResponsesCustomTool } from '../providers/custom-tool-wire.mjs';
|
|
11
12
|
import {
|
|
12
13
|
DEFERRED_DEFAULT_FULL_TOOLS,
|
|
@@ -28,6 +29,17 @@ import {
|
|
|
28
29
|
nativeProviderFamily,
|
|
29
30
|
} from './tool-catalog-schema.mjs';
|
|
30
31
|
import { filterModelEditTools } from '../../../shared/edit-tool-dialect.mjs';
|
|
32
|
+
import { describeBridgeTools, formatBridgeResult, isBridgeReadonlySession } from './tool-bridge.mjs';
|
|
33
|
+
import {
|
|
34
|
+
bridgeSurfaceOutdated,
|
|
35
|
+
isBridgeToolDefinition,
|
|
36
|
+
isToolBridgeEnabled,
|
|
37
|
+
sessionToolExposure,
|
|
38
|
+
TOOL_EXPOSURE_BRIDGE,
|
|
39
|
+
TOOL_EXPOSURE_NATIVE,
|
|
40
|
+
toolExposureModeForProvider,
|
|
41
|
+
} from './tool-exposure.mjs';
|
|
42
|
+
import { TOOL_BRIDGE_TOOLS } from './tool-defs.mjs';
|
|
31
43
|
export {
|
|
32
44
|
toolKind,
|
|
33
45
|
toolSchemaBucket,
|
|
@@ -44,9 +56,30 @@ export {
|
|
|
44
56
|
MEASURED_TOOL_USAGE,
|
|
45
57
|
} from './tool-catalog-data.mjs';
|
|
46
58
|
|
|
47
|
-
// Provider modes
|
|
59
|
+
// Provider modes without native tool search. Their bridge-v1 sessions
|
|
60
|
+
// (tool-exposure.mjs) get the native roster and late delta notices; only a
|
|
61
|
+
// surface not yet migrated to the bridge keeps the fixed full array, with no
|
|
62
|
+
// deferred-pool manifest and no late announcements.
|
|
48
63
|
const FIXED_SURFACE_MODES = new Set(['full', 'manifest', 'canonical']);
|
|
49
64
|
|
|
65
|
+
function fixedSurfaceSession(session) {
|
|
66
|
+
return FIXED_SURFACE_MODES.has(session?.deferredProviderMode) && !isToolBridgeEnabled(session);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Whether a bridge session's roster and delta notices may name `tool`: only
|
|
70
|
+
// what its own policy (allowlist, denied tools, read-only mode) lets it run.
|
|
71
|
+
// Native rosters are unchanged.
|
|
72
|
+
function rosterPermits(session, tool) {
|
|
73
|
+
if (!isToolBridgeEnabled(session)) return true;
|
|
74
|
+
if (!isToolPermittedBySessionPolicy(session, clean(tool?.name))) return false;
|
|
75
|
+
return !(isBridgeReadonlySession(session) && !isReadonlySelectable(tool));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// The bridge definitions every bridge session serializes: one frozen copy, so
|
|
79
|
+
// their bytes never vary across search, describe, call, skill loading or MCP
|
|
80
|
+
// connect/reconnect.
|
|
81
|
+
const BRIDGE_SURFACE_TOOLS = TOOL_BRIDGE_TOOLS.map((tool) => immutableToolForSurface(tool));
|
|
82
|
+
|
|
50
83
|
function isMcpToolName(name) {
|
|
51
84
|
return typeof name === 'string' && name.startsWith('mcp__');
|
|
52
85
|
}
|
|
@@ -73,6 +106,30 @@ export function filterDisallowedTools(tools, disallowed = []) {
|
|
|
73
106
|
return (tools || []).filter((tool) => !deny.has(clean(tool?.name)));
|
|
74
107
|
}
|
|
75
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Discovery's view of `tools` for one session: what its own policy (schema
|
|
111
|
+
* allowlist + denied tools) lets it execute. Nothing outside it is selected,
|
|
112
|
+
* registered as discovered, described or named in a result.
|
|
113
|
+
*/
|
|
114
|
+
export function filterSessionToolPolicy(tools, session) {
|
|
115
|
+
return filterDisallowedTools(tools, session?.disallowedTools).filter((tool) =>
|
|
116
|
+
isToolPermittedBySessionPolicy(session, clean(tool?.name))
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Predicate over tool names: false for a tool the session's route leaves out
|
|
121
|
+
// of every request (see routeToolExclusionReason).
|
|
122
|
+
function sentOnRoute(session, catalog) {
|
|
123
|
+
const byName = new Map();
|
|
124
|
+
for (const tool of [...(catalog || []), ...(Array.isArray(session?.tools) ? session.tools : [])]) {
|
|
125
|
+
byName.set(clean(tool?.name), tool);
|
|
126
|
+
}
|
|
127
|
+
return (name) => !routeToolExclusionReason(session, byName.get(name));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const permittedNames = (session, names) =>
|
|
131
|
+
(names || []).filter((name) => isToolPermittedBySessionPolicy(session, name));
|
|
132
|
+
|
|
76
133
|
export function sortedNamesByMeasuredUsage(names) {
|
|
77
134
|
// Canonical route order first; measured usage orders the unrouted tail.
|
|
78
135
|
return [...(names || [])].sort((a, b) => {
|
|
@@ -236,7 +293,7 @@ function setDeferredToolState(session, names) {
|
|
|
236
293
|
}
|
|
237
294
|
|
|
238
295
|
function deferredPoolToolNames(session) {
|
|
239
|
-
if (!session ||
|
|
296
|
+
if (!session || fixedSurfaceSession(session)) return [];
|
|
240
297
|
const catalog = Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : [];
|
|
241
298
|
const active = new Set([
|
|
242
299
|
...(session.tools || []).map((tool) => clean(tool?.name)).filter(Boolean),
|
|
@@ -245,7 +302,7 @@ function deferredPoolToolNames(session) {
|
|
|
245
302
|
const out = [];
|
|
246
303
|
for (const tool of catalog) {
|
|
247
304
|
const name = clean(tool?.name);
|
|
248
|
-
if (name && !active.has(name)) out.push(name);
|
|
305
|
+
if (name && !active.has(name) && rosterPermits(session, tool)) out.push(name);
|
|
249
306
|
}
|
|
250
307
|
return sortedNamesByMeasuredUsage(out);
|
|
251
308
|
}
|
|
@@ -288,13 +345,37 @@ export function isReadonlySelectable(tool) {
|
|
|
288
345
|
|
|
289
346
|
export function applyDeferredToolSurface(session, mode, extraTools = [], options = {}) {
|
|
290
347
|
if (!session || !Array.isArray(session.tools)) return session;
|
|
291
|
-
const
|
|
348
|
+
const provider = options.provider || session.provider;
|
|
349
|
+
// The pinned wire route decides a gateway's mode (it names its own
|
|
350
|
+
// provider, so a surface built for another provider ignores it).
|
|
351
|
+
const providerMode = deferredProviderMode(provider, session.wireRoute);
|
|
352
|
+
const exposure = toolExposureModeForProvider(provider, session.wireRoute);
|
|
353
|
+
const bridge = exposure === TOOL_EXPOSURE_BRIDGE;
|
|
354
|
+
// An existing surface built for another exposure is migrated, not merely
|
|
355
|
+
// re-selected: its fixed prompt guidance changes with it.
|
|
356
|
+
const previousExposure = sessionToolExposure(session);
|
|
357
|
+
// A surface an earlier bridge revision built (guidance-only prompt,
|
|
358
|
+
// search_tools) is rebuilt once, the same rewrite an exposure change makes.
|
|
359
|
+
const exposureChanged =
|
|
360
|
+
previousExposure !== null && (previousExposure !== exposure || (bridge && bridgeSurfaceOutdated(session)));
|
|
361
|
+
// The one native ↔ bridge transition, whoever triggers it (provider switch,
|
|
362
|
+
// resume, request boundary): leaving native keeps its discoveries aside,
|
|
363
|
+
// and the way back to native restores them below.
|
|
364
|
+
if (previousExposure === TOOL_EXPOSURE_NATIVE && bridge) {
|
|
365
|
+
session.nativeDeferredDiscovery = canonicalDeferredToolNames(
|
|
366
|
+
deferredCatalogUnion(session),
|
|
367
|
+
session.deferredDiscoveredTools || []
|
|
368
|
+
);
|
|
369
|
+
}
|
|
292
370
|
const byName = new Map();
|
|
293
371
|
// Rebuild from the full catalog, not just its eager projection. Current
|
|
294
|
-
// definitions still take precedence over retained definitions.
|
|
372
|
+
// definitions still take precedence over retained definitions. Bridge
|
|
373
|
+
// definitions belong to the exposure, never to the catalog.
|
|
295
374
|
const candidates = filterDisallowedTools(
|
|
296
375
|
filterModelEditTools(
|
|
297
|
-
[...session.tools, ...(extraTools || []), ...deferredCatalogUnion(session)]
|
|
376
|
+
[...session.tools, ...(extraTools || []), ...deferredCatalogUnion(session)].filter(
|
|
377
|
+
(tool) => !isBridgeToolDefinition(tool)
|
|
378
|
+
),
|
|
298
379
|
options.model || session.model
|
|
299
380
|
),
|
|
300
381
|
[...(session.disallowedTools || []), ...(options.disallowed || [])]
|
|
@@ -308,15 +389,12 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
308
389
|
const defaultNames = defaultDeferredToolNames(catalog, mode);
|
|
309
390
|
// Solo keeps `agent` in the deferred pool: loadable on request, never eager.
|
|
310
391
|
if (session.orchestrationMode === 'none') defaultNames.delete('agent');
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
if (
|
|
317
|
-
selectedNames = storedNames.length ? canonicalDeferredToolNames(catalog, storedNames) : [];
|
|
318
|
-
if (!selectedNames.length || providerMode === 'native') selectedNames = sortedNamesByMeasuredUsage(defaultNames);
|
|
319
|
-
}
|
|
392
|
+
// Bridge sessions expose the mode's core only: a stored (legacy all-selected)
|
|
393
|
+
// selection never widens the wire surface, and load_tool is the bridge's own.
|
|
394
|
+
const storedNames = providerMode === 'native' || bridge ? [] : storedDeferredToolNames(session);
|
|
395
|
+
let selectedNames = storedNames.length ? canonicalDeferredToolNames(catalog, storedNames) : [];
|
|
396
|
+
if (!selectedNames.length || providerMode === 'native') selectedNames = sortedNamesByMeasuredUsage(defaultNames);
|
|
397
|
+
if (bridge) selectedNames = selectedNames.filter((name) => name !== 'load_tool');
|
|
320
398
|
const selected = new Set(selectedNames);
|
|
321
399
|
session.deferredToolCatalog = catalog;
|
|
322
400
|
session.deferredToolUsage = MEASURED_TOOL_USAGE;
|
|
@@ -332,14 +410,29 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
332
410
|
session.tools.push(tool);
|
|
333
411
|
active.push(clean(tool?.name));
|
|
334
412
|
}
|
|
413
|
+
// Every other definition stays in the scoped catalog, reached through the
|
|
414
|
+
// bridge. A tool-free session (empty catalog) stays tool-free.
|
|
415
|
+
if (bridge && catalog.length) session.tools.push(...BRIDGE_SURFACE_TOOLS);
|
|
416
|
+
if (bridge) session.toolExposureMode = TOOL_EXPOSURE_BRIDGE;
|
|
417
|
+
else delete session.toolExposureMode;
|
|
335
418
|
session.deferredCallableTools = sortedNamesByMeasuredUsage(active);
|
|
336
419
|
if (providerMode === 'native') {
|
|
337
|
-
const
|
|
420
|
+
const restored = previousExposure === TOOL_EXPOSURE_BRIDGE ? session.nativeDeferredDiscovery || [] : [];
|
|
421
|
+
delete session.nativeDeferredDiscovery;
|
|
422
|
+
const discovered = canonicalDeferredToolNames(catalog, [...(session.deferredDiscoveredTools || []), ...restored]);
|
|
338
423
|
session.deferredSelectedTools = active;
|
|
339
424
|
session.deferredDiscoveredTools = discovered.filter((name) => !selected.has(name));
|
|
340
425
|
} else {
|
|
341
426
|
setDeferredToolState(session, active);
|
|
342
427
|
}
|
|
428
|
+
if (exposureChanged && session.messages?.some((m) => m?.role === 'system')) {
|
|
429
|
+
// Replace the previous exposure's fixed block once: the native deferred
|
|
430
|
+
// manifest, or the bridge roster + guidance. History stays as is.
|
|
431
|
+
session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
|
|
432
|
+
applyInitialDeferredToolManifestToBp2(session, deferredPoolToolNames(session), { rebuild: true });
|
|
433
|
+
const rendered = renderedDeferredManifest(session);
|
|
434
|
+
session.deferredAnnouncedTools = deferredPoolToolNames(session).filter((name) => rendered.includes(name));
|
|
435
|
+
}
|
|
343
436
|
if (!session.deferredToolBp2Applied && session.messages?.some((m) => m?.role === 'system')) {
|
|
344
437
|
if (!session.mcpServerInstructions || typeof session.mcpServerInstructions !== 'object') {
|
|
345
438
|
session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
|
|
@@ -358,41 +451,33 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
358
451
|
|
|
359
452
|
export function rebuildDeferredToolSurfaceForProvider(session, provider) {
|
|
360
453
|
if (!session || !Array.isArray(session.tools)) return session;
|
|
361
|
-
const
|
|
362
|
-
const
|
|
363
|
-
const nextFamily = nativeProviderFamily(provider);
|
|
454
|
+
const previousFamily = nativeProviderFamily(session.provider, session.wireRoute);
|
|
455
|
+
const nextFamily = nativeProviderFamily(provider, session.wireRoute);
|
|
364
456
|
const preserveNativeState = previousFamily && previousFamily === nextFamily;
|
|
365
457
|
const discovered = preserveNativeState
|
|
366
458
|
? canonicalDeferredToolNames(deferredCatalogUnion(session), session.deferredDiscoveredTools || [])
|
|
367
459
|
: [];
|
|
368
460
|
const catalog = deferredCatalogUnion(session).slice();
|
|
369
|
-
|
|
461
|
+
const fromBridge = isToolBridgeEnabled(session);
|
|
462
|
+
// Another native family starts without this family's discoveries. Leaving
|
|
463
|
+
// native for the bridge keeps them: applyDeferredToolSurface sets them aside.
|
|
464
|
+
if (nextFamily) session.deferredDiscoveredTools = discovered;
|
|
465
|
+
// applyDeferredToolSurface replaces the fixed guidance when the exposure
|
|
466
|
+
// (native ↔ bridge) changes.
|
|
370
467
|
applyDeferredToolSurface(session, session.deferredSurfaceMode || 'lead', catalog, { provider });
|
|
371
|
-
|
|
372
|
-
|
|
468
|
+
// Back from the bridge: the discoveries applyDeferredToolSurface restored
|
|
469
|
+
// become callable again. Otherwise exactly the native family's own.
|
|
470
|
+
const eager = new Set(session.tools.map((tool) => clean(tool?.name)));
|
|
471
|
+
const kept = fromBridge
|
|
472
|
+
? sortedNamesByMeasuredUsage((session.deferredDiscoveredTools || []).filter((name) => !eager.has(name)))
|
|
473
|
+
: discovered;
|
|
474
|
+
if (session.deferredProviderMode === 'native' && kept.length) {
|
|
475
|
+
session.deferredDiscoveredTools = kept;
|
|
373
476
|
session.deferredCallableTools = sortedNamesByMeasuredUsage(
|
|
374
|
-
new Set([...(session.deferredCallableTools || []), ...
|
|
477
|
+
new Set([...(session.deferredCallableTools || []), ...kept])
|
|
375
478
|
);
|
|
376
479
|
session.deferredSelectedTools = session.deferredCallableTools.slice();
|
|
377
480
|
}
|
|
378
|
-
if (previousMode && previousMode !== session.deferredProviderMode) {
|
|
379
|
-
if (session.deferredProviderMode === 'native') {
|
|
380
|
-
session.mcpServerInstructions = getMcpServerInstructionsMap(session.mcpScopeId);
|
|
381
|
-
applyInitialDeferredToolManifestToBp2(session, deferredPoolToolNames(session), { rebuild: true });
|
|
382
|
-
const rendered = renderedDeferredManifest(session);
|
|
383
|
-
session.deferredAnnouncedTools = deferredPoolToolNames(session).filter((name) => rendered.includes(name));
|
|
384
|
-
} else if (previousMode === 'native') {
|
|
385
|
-
for (const system of session.messages?.filter((message) => message?.role === 'system') || []) {
|
|
386
|
-
if (typeof system.content === 'string') system.content = stripDeferredToolManifestBlock(system.content);
|
|
387
|
-
}
|
|
388
|
-
session.messages = session.messages.filter(
|
|
389
|
-
(message) => message?.role !== 'system' || String(message.content || '').trim()
|
|
390
|
-
);
|
|
391
|
-
session.deferredAnnouncedTools = [];
|
|
392
|
-
session.deferredToolBp2Applied = true;
|
|
393
|
-
delete session.deferredToolBp1Applied;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
481
|
return session;
|
|
397
482
|
}
|
|
398
483
|
|
|
@@ -400,9 +485,9 @@ export function rebuildDeferredToolSurfaceForProvider(session, provider) {
|
|
|
400
485
|
// An MCP server may finish its handshake BETWEEN session-create and the first
|
|
401
486
|
// user send. Fold those LIVE MCP tools into the boot deferred catalog + the
|
|
402
487
|
// provider-visible first-turn surface. Native providers rebuild the initial BP2
|
|
403
|
-
// <available-deferred-tools> manifest IN PLACE and pre-mark names announced
|
|
404
|
-
//
|
|
405
|
-
//
|
|
488
|
+
// <available-deferred-tools> manifest IN PLACE and pre-mark names announced;
|
|
489
|
+
// bridge-v1 sessions do the same (roster + bridge guidance). Only a fixed
|
|
490
|
+
// surface not yet on the bridge updates its scoped catalog alone. Fully sync
|
|
406
491
|
// and idempotent: no genuinely-new MCP name => no-op / no mutation.
|
|
407
492
|
export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
|
|
408
493
|
if (!session || !Array.isArray(session.messages)) return false;
|
|
@@ -422,15 +507,7 @@ export function refreshInitialDeferredMcpSurface(session, liveMcpTools) {
|
|
|
422
507
|
}
|
|
423
508
|
if (!added) return false;
|
|
424
509
|
session.deferredToolCatalog = sortedCatalogByMeasuredUsage([...byName.values()]);
|
|
425
|
-
if (session
|
|
426
|
-
const next = session.deferredToolCatalog.filter(
|
|
427
|
-
(tool) => session.deferredSurfaceMode !== 'readonly' || isReadonlySelectable(tool)
|
|
428
|
-
);
|
|
429
|
-
session.tools.splice(0, session.tools.length, ...next);
|
|
430
|
-
session.deferredCallableTools = next.map((tool) => clean(tool?.name)).filter(Boolean);
|
|
431
|
-
if (session.deferredProviderMode === 'canonical') {
|
|
432
|
-
setDeferredToolState(session, session.deferredCallableTools);
|
|
433
|
-
}
|
|
510
|
+
if (fixedSurfaceSession(session)) {
|
|
434
511
|
session.updatedAt = Date.now();
|
|
435
512
|
return true;
|
|
436
513
|
}
|
|
@@ -497,6 +574,7 @@ function reconcileStateOf(session, liveMcpTools) {
|
|
|
497
574
|
cwd: clean(session.cwd),
|
|
498
575
|
mode: clean(session.deferredSurfaceMode),
|
|
499
576
|
providerMode: clean(session.deferredProviderMode),
|
|
577
|
+
exposure: clean(session.toolExposureMode),
|
|
500
578
|
provider: clean(session.provider),
|
|
501
579
|
model: clean(session.model),
|
|
502
580
|
disallowed: JSON.stringify(session.disallowedTools || []),
|
|
@@ -525,7 +603,7 @@ function reconcileDeferredMcpToolCatalogUncached(session, liveMcpTools) {
|
|
|
525
603
|
.filter(isMcpToolName)
|
|
526
604
|
);
|
|
527
605
|
session.deferredMcpToolNames = [...new Set(live.map((tool) => clean(tool?.name)).filter(isMcpToolName))];
|
|
528
|
-
if (
|
|
606
|
+
if (fixedSurfaceSession(session)) {
|
|
529
607
|
const byName = new Map();
|
|
530
608
|
for (const tool of Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : []) {
|
|
531
609
|
const name = clean(tool?.name);
|
|
@@ -535,17 +613,23 @@ function reconcileDeferredMcpToolCatalogUncached(session, liveMcpTools) {
|
|
|
535
613
|
const name = clean(tool?.name);
|
|
536
614
|
if (name && isMcpToolName(name)) byName.set(name, liveToolClone(tool));
|
|
537
615
|
}
|
|
616
|
+
// A fixed surface not yet on the bridge: connect, reconnect and removal
|
|
617
|
+
// update the scoped catalog only (availability follows
|
|
618
|
+
// deferredMcpToolNames); nothing is announced.
|
|
538
619
|
const catalog = sortedCatalogByMeasuredUsage([...byName.values()]);
|
|
539
|
-
const
|
|
540
|
-
const before = JSON.stringify((session.tools || []).map((tool) => activeToolForSurface(tool)));
|
|
541
|
-
const after = JSON.stringify(next);
|
|
620
|
+
const previous = Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : [];
|
|
542
621
|
session.deferredToolCatalog = catalog;
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
return
|
|
622
|
+
if (previous.length !== catalog.length || previous.some((tool, index) => tool !== catalog[index])) {
|
|
623
|
+
session.updatedAt = Date.now();
|
|
624
|
+
}
|
|
625
|
+
return null;
|
|
547
626
|
}
|
|
548
627
|
const lateCatalog = Array.isArray(session.deferredLateToolCatalog) ? session.deferredLateToolCatalog : [];
|
|
628
|
+
// A bridge session judges a removal by the definition it had before this
|
|
629
|
+
// reconciliation (a disconnected late tool leaves the late pool below).
|
|
630
|
+
const knownBefore = isToolBridgeEnabled(session)
|
|
631
|
+
? new Map(deferredCatalogUnion(session).map((tool) => [clean(tool?.name), tool]))
|
|
632
|
+
: null;
|
|
549
633
|
const active = new Set([
|
|
550
634
|
...(session.tools || []).map((tool) => clean(tool?.name)).filter(Boolean),
|
|
551
635
|
...parseToolSelection(session.deferredCallableTools),
|
|
@@ -594,11 +678,13 @@ function reconcileDeferredMcpToolCatalogUncached(session, liveMcpTools) {
|
|
|
594
678
|
const name = clean(tool?.name);
|
|
595
679
|
if (!name || !isMcpToolName(name)) continue;
|
|
596
680
|
if (previousNames.has(name) || (!hadSnapshot && (active.has(name) || startupNames.has(name)))) continue;
|
|
681
|
+
if (!rosterPermits(session, tool)) continue;
|
|
597
682
|
added.push({ name, description: lateAnnouncementDescription(tool?.description) });
|
|
598
683
|
}
|
|
599
684
|
const removed = [];
|
|
600
685
|
for (const name of previousNames) {
|
|
601
686
|
if (nextNames.has(name)) continue;
|
|
687
|
+
if (knownBefore && !rosterPermits(session, knownBefore.get(name) || { name })) continue;
|
|
602
688
|
removed.push(name);
|
|
603
689
|
}
|
|
604
690
|
if (!added.length && !removed.length) return null;
|
|
@@ -625,6 +711,9 @@ export function selectDeferredTools(session, names, mode, { exact = false } = {}
|
|
|
625
711
|
const active = new Set([...surfaceActive, ...parseToolSelection(session?.deferredCallableTools)]);
|
|
626
712
|
const native = session?.deferredProviderMode === 'native' || session?.deferredNativeTools === true;
|
|
627
713
|
const discovered = new Set(Array.isArray(session?.deferredDiscoveredTools) ? session.deferredDiscoveredTools : []);
|
|
714
|
+
// Bridge sessions keep a fixed surface: deferred tools are described and
|
|
715
|
+
// run through the bridge, never appended to session.tools.
|
|
716
|
+
const bridge = isToolBridgeEnabled(session);
|
|
628
717
|
const activateOnSurface = !native;
|
|
629
718
|
const byName = new Map();
|
|
630
719
|
for (const tool of catalog) {
|
|
@@ -645,11 +734,18 @@ export function selectDeferredTools(session, names, mode, { exact = false } = {}
|
|
|
645
734
|
missing.push(requestedName);
|
|
646
735
|
continue;
|
|
647
736
|
}
|
|
737
|
+
// A tool this route never sends (schema rejected) is not loaded and not
|
|
738
|
+
// listed as active; the reason says why.
|
|
739
|
+
const routeExclusion = bridge ? null : routeToolExclusionReason(session, tool);
|
|
740
|
+
if (routeExclusion) {
|
|
741
|
+
blocked.push({ name, reason: routeExclusion });
|
|
742
|
+
continue;
|
|
743
|
+
}
|
|
648
744
|
if (mode === 'readonly' && !isReadonlySelectable(tool)) {
|
|
649
745
|
blocked.push({ name, reason: 'readonly mode' });
|
|
650
746
|
continue;
|
|
651
747
|
}
|
|
652
|
-
if (active.has(name) || (!activateOnSurface && discovered.has(name))) {
|
|
748
|
+
if (bridge || active.has(name) || (!activateOnSurface && discovered.has(name))) {
|
|
653
749
|
already.push(name);
|
|
654
750
|
continue;
|
|
655
751
|
}
|
|
@@ -663,6 +759,7 @@ export function selectDeferredTools(session, names, mode, { exact = false } = {}
|
|
|
663
759
|
}
|
|
664
760
|
added.push(name);
|
|
665
761
|
}
|
|
762
|
+
if (bridge) return { added, already, blocked, missing, native };
|
|
666
763
|
if (native) {
|
|
667
764
|
session.deferredCallableTools = sortedNamesByMeasuredUsage(active);
|
|
668
765
|
session.deferredDiscoveredTools = sortedNamesByMeasuredUsage([...discovered]);
|
|
@@ -697,11 +794,15 @@ function pendingAndFailedMcpServers(mcpStatus) {
|
|
|
697
794
|
return { pending: [...new Set(pending)].sort(), failed: [...new Set(failed)].sort() };
|
|
698
795
|
}
|
|
699
796
|
|
|
700
|
-
/**
|
|
797
|
+
/**
|
|
798
|
+
* The deferred catalog union, or the session's own tools when nothing is
|
|
799
|
+
* deferred — either way only what the session's policy lets it execute.
|
|
800
|
+
*/
|
|
701
801
|
function resolvableCatalog(session) {
|
|
702
802
|
const union = deferredCatalogUnion(session);
|
|
703
|
-
|
|
704
|
-
|
|
803
|
+
let tools = union;
|
|
804
|
+
if (!union.length) tools = Array.isArray(session?.tools) ? session.tools : [];
|
|
805
|
+
return filterSessionToolPolicy(tools, session);
|
|
705
806
|
}
|
|
706
807
|
|
|
707
808
|
// Pure loader. Input is exact deferred-tool names/aliases; output reports
|
|
@@ -709,6 +810,8 @@ function resolvableCatalog(session) {
|
|
|
709
810
|
// servers. No listing, no ranking, no substring filter. `options.mcpStatus` is
|
|
710
811
|
// the runtime getter for per-server status.
|
|
711
812
|
export function renderToolSearch(args = {}, session, mode = 'full', options = {}) {
|
|
813
|
+
// Bridge mode: load_tool describes (bounded, paged) and never loads.
|
|
814
|
+
if (isToolBridgeEnabled(session)) return formatBridgeResult(describeBridgeTools(session, args, { mode }));
|
|
712
815
|
const catalog = resolvableCatalog(session);
|
|
713
816
|
const requestedNames = parseToolSelection(args.names);
|
|
714
817
|
const { pending: pendingMcpServers, failed: failedMcpServers } = pendingAndFailedMcpServers(options?.mcpStatus);
|
|
@@ -729,9 +832,11 @@ export function renderToolSearch(args = {}, session, mode = 'full', options = {}
|
|
|
729
832
|
missing: [],
|
|
730
833
|
...mcpFields,
|
|
731
834
|
activeTools: sortedNamesByMeasuredUsage(
|
|
732
|
-
(session?.tools || []).map((tool) => clean(tool?.name)).filter(Boolean)
|
|
835
|
+
permittedNames(session, (session?.tools || []).map((tool) => clean(tool?.name)).filter(Boolean)).filter(
|
|
836
|
+
sentOnRoute(session, catalog)
|
|
837
|
+
)
|
|
733
838
|
),
|
|
734
|
-
discoveredTools: sortedNamesByMeasuredUsage(session?.deferredDiscoveredTools
|
|
839
|
+
discoveredTools: sortedNamesByMeasuredUsage(permittedNames(session, session?.deferredDiscoveredTools)),
|
|
735
840
|
},
|
|
736
841
|
null,
|
|
737
842
|
2
|
|
@@ -789,9 +894,11 @@ export function renderToolSearch(args = {}, session, mode = 'full', options = {}
|
|
|
789
894
|
...(blocked.length ? { blocked } : {}),
|
|
790
895
|
...mcpFields,
|
|
791
896
|
activeTools: sortedNamesByMeasuredUsage(
|
|
792
|
-
[...nextActiveNames]
|
|
897
|
+
permittedNames(session, [...nextActiveNames])
|
|
898
|
+
.filter((name) => isDeferredToolAvailable(session, name))
|
|
899
|
+
.filter(sentOnRoute(session, catalog))
|
|
793
900
|
),
|
|
794
|
-
discoveredTools: sortedNamesByMeasuredUsage(session?.deferredDiscoveredTools
|
|
901
|
+
discoveredTools: sortedNamesByMeasuredUsage(permittedNames(session, session?.deferredDiscoveredTools)),
|
|
795
902
|
...(notes.length ? { note: notes.join(' ') } : {}),
|
|
796
903
|
},
|
|
797
904
|
null,
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
// Pure, self-contained schemas + the agent-hidden default helper; no runtime
|
|
3
3
|
// closure dependencies.
|
|
4
4
|
|
|
5
|
+
// One load_tool for every session, native and bridge, byte for byte: native
|
|
6
|
+
// sessions register the named tools; bridge sessions (see tool-bridge.mjs)
|
|
7
|
+
// get their definitions back and run them through call_tool. Native request
|
|
8
|
+
// bytes must never change, so the bridge adds nothing to this definition.
|
|
5
9
|
export const TOOL_SEARCH_TOOL = {
|
|
6
10
|
name: 'load_tool',
|
|
7
11
|
title: 'load_tool',
|
|
@@ -27,34 +31,118 @@ export const TOOL_SEARCH_TOOL = {
|
|
|
27
31
|
},
|
|
28
32
|
};
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
// Fixed tool bridge for non-native providers (see tool-bridge.mjs). The
|
|
35
|
+
// description is static so the definition stays byte-stable: it never carries
|
|
36
|
+
// catalog names, counts or listings.
|
|
37
|
+
export const CALL_TOOL_TOOL = {
|
|
38
|
+
name: 'call_tool',
|
|
39
|
+
title: 'call_tool',
|
|
33
40
|
annotations: {
|
|
34
|
-
title: '
|
|
41
|
+
title: 'call_tool',
|
|
35
42
|
readOnlyHint: false,
|
|
36
|
-
destructiveHint:
|
|
43
|
+
destructiveHint: true,
|
|
44
|
+
idempotentHint: false,
|
|
45
|
+
openWorldHint: true,
|
|
46
|
+
agentHidden: true,
|
|
47
|
+
},
|
|
48
|
+
description:
|
|
49
|
+
'Run one tool that is available in this session but not directly exposed, with the arguments its schema requires. The call has the same permissions, approvals and result as calling that tool directly.',
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
name: { type: 'string', minLength: 1, maxLength: 256, description: 'Exact tool name.' },
|
|
54
|
+
arguments: { type: 'object', description: 'Arguments for that tool.' },
|
|
55
|
+
},
|
|
56
|
+
required: ['name', 'arguments'],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// The fixed bridge for non-native providers: the shared load_tool plus call_tool.
|
|
62
|
+
export const TOOL_BRIDGE_TOOLS = Object.freeze([TOOL_SEARCH_TOOL, CALL_TOOL_TOOL]);
|
|
63
|
+
|
|
64
|
+
export const SESSION_TOOL = {
|
|
65
|
+
name: 'session',
|
|
66
|
+
title: 'Session',
|
|
67
|
+
annotations: {
|
|
68
|
+
title: 'Session',
|
|
69
|
+
readOnlyHint: false,
|
|
70
|
+
destructiveHint: true,
|
|
37
71
|
idempotentHint: false,
|
|
38
72
|
openWorldHint: false,
|
|
39
73
|
agentHidden: true,
|
|
40
74
|
},
|
|
41
|
-
trigger: '
|
|
75
|
+
trigger: 'Session lookup/control, title, compact, fork, Project and worktrees.',
|
|
42
76
|
description:
|
|
43
|
-
'
|
|
77
|
+
'Inspect sessions or control another by exact ID, never a guessed one. send acknowledges queue intake, not completion. Cancel/delete and worktree actions require the user’s request. Other actions affect only the current session.',
|
|
44
78
|
inputSchema: {
|
|
45
79
|
type: 'object',
|
|
46
80
|
properties: {
|
|
47
81
|
action: {
|
|
48
82
|
type: 'string',
|
|
49
|
-
enum: [
|
|
83
|
+
enum: [
|
|
84
|
+
'status',
|
|
85
|
+
'list',
|
|
86
|
+
'read',
|
|
87
|
+
'send',
|
|
88
|
+
'cancel',
|
|
89
|
+
'delete',
|
|
90
|
+
'rename',
|
|
91
|
+
'compact',
|
|
92
|
+
'fork',
|
|
93
|
+
'set-project',
|
|
94
|
+
'list-projects',
|
|
95
|
+
'favorite',
|
|
96
|
+
'archive',
|
|
97
|
+
'merge-worktree',
|
|
98
|
+
'remove-worktree',
|
|
99
|
+
'list-worktrees',
|
|
100
|
+
'prune-worktrees',
|
|
101
|
+
],
|
|
102
|
+
description:
|
|
103
|
+
'status defaults to current; list pages sessions; read returns latest items; send queues prompt; cancel stops the turn; delete removes the session. compact runs after this turn; fork copies it without switching. merge-worktree merges into the Project’s checked-out branch; remove-worktree returns to the Project (repeat on WORKTREE_REMOVAL_INCOMPLETE); list-worktrees includes retaining sessions; prune-worktrees removes only clean, merged, unretained worktrees.',
|
|
104
|
+
},
|
|
105
|
+
title: { type: 'string', description: 'rename: new current-session title.' },
|
|
106
|
+
session_id: {
|
|
107
|
+
type: 'string',
|
|
108
|
+
description:
|
|
109
|
+
'ID from list; required for read/send/cancel/delete, optional for status. send/cancel/delete cannot target the caller.',
|
|
110
|
+
},
|
|
111
|
+
prompt: { type: 'string', description: 'send: message to enqueue; loads a cold session.' },
|
|
112
|
+
limit: {
|
|
113
|
+
type: 'integer',
|
|
114
|
+
minimum: 1,
|
|
115
|
+
maximum: 100,
|
|
116
|
+
description:
|
|
117
|
+
'list/read: maximum rows, default 25. Output: 8KiB per page, 12KiB for initial read tail; follow nextOffset/nextTextOffset for more.',
|
|
118
|
+
},
|
|
119
|
+
cursor: { type: 'string', description: 'list: returned nextCursor.' },
|
|
120
|
+
offset: {
|
|
121
|
+
type: 'integer',
|
|
122
|
+
minimum: 0,
|
|
123
|
+
description:
|
|
124
|
+
'read: newest items to skip, default 0 (tail). Use nextOffset for older pages; appends/rewinds shift positions.',
|
|
125
|
+
},
|
|
126
|
+
text_offset: {
|
|
127
|
+
type: 'integer',
|
|
128
|
+
minimum: 0,
|
|
129
|
+
description: 'read: UTF-16 text position from nextTextOffset; requires offset, limit:1, item_id.',
|
|
130
|
+
},
|
|
131
|
+
item_id: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
description: 'read: returned item id; rejects a shifted position instead of reading another item.',
|
|
134
|
+
},
|
|
135
|
+
path: {
|
|
136
|
+
type: 'string',
|
|
50
137
|
description:
|
|
51
|
-
'
|
|
138
|
+
'Existing directory; implies set-project. Resolve names with list-projects first. Shell cd does not switch Project.',
|
|
52
139
|
},
|
|
53
|
-
|
|
140
|
+
compact: { type: 'boolean', description: 'fork: compact the copy.' },
|
|
54
141
|
force: {
|
|
55
142
|
type: 'boolean',
|
|
56
|
-
description: 'remove-worktree:
|
|
143
|
+
description: 'remove-worktree: allow uncommitted/unmerged work only when explicitly requested.',
|
|
57
144
|
},
|
|
145
|
+
value: { type: 'boolean', description: 'favorite/archive: on or off.' },
|
|
58
146
|
},
|
|
59
147
|
additionalProperties: false,
|
|
60
148
|
},
|
|
@@ -121,6 +209,7 @@ export function collectStandaloneToolDefs({
|
|
|
121
209
|
tidyToolDefs = [],
|
|
122
210
|
visualizeToolDefs = [],
|
|
123
211
|
setupToolDefs = [],
|
|
212
|
+
askUserToolDefs = [],
|
|
124
213
|
goalTools = [],
|
|
125
214
|
agentTools = [],
|
|
126
215
|
skillToolEnabled = true,
|
|
@@ -129,7 +218,7 @@ export function collectStandaloneToolDefs({
|
|
|
129
218
|
const standaloneTools = [
|
|
130
219
|
TOOL_SEARCH_TOOL,
|
|
131
220
|
...(skillToolEnabled ? [SKILL_TOOL] : []),
|
|
132
|
-
|
|
221
|
+
SESSION_TOOL,
|
|
133
222
|
...webSearchRuntimeTools.filter((tool) => tool?.public !== false),
|
|
134
223
|
...admitted(memoryToolDefs?.TOOL_DEFS, MEMORY_RUNTIME_TOOLS),
|
|
135
224
|
...admitted(codeGraphToolDefs?.CODE_GRAPH_TOOL_DEFS, CODE_GRAPH_RUNTIME_TOOLS),
|
|
@@ -141,6 +230,7 @@ export function collectStandaloneToolDefs({
|
|
|
141
230
|
...admitted(tidyToolDefs, TIDY_RUNTIME_TOOLS),
|
|
142
231
|
...admitted(visualizeToolDefs, VISUALIZE_RUNTIME_TOOLS),
|
|
143
232
|
...setupToolDefs,
|
|
233
|
+
...askUserToolDefs,
|
|
144
234
|
...goalTools,
|
|
145
235
|
...agentTools,
|
|
146
236
|
];
|