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
|
@@ -92,10 +92,12 @@ function routeInput(source) {
|
|
|
92
92
|
if (clean(source.model)) next.model = clean(source.model);
|
|
93
93
|
if (clean(source.effort)) next.effort = clean(source.effort);
|
|
94
94
|
if (typeof source.fast === 'boolean') next.fast = source.fast;
|
|
95
|
+
if (typeof source.autoEffort === 'boolean') next.autoEffort = source.autoEffort;
|
|
95
96
|
if (Object.hasOwn(source, 'modelParameters')) next.modelParameters = { ...source.modelParameters };
|
|
96
97
|
if (Object.hasOwn(source, 'contextPercent')) next.contextPercent = source.contextPercent;
|
|
97
98
|
if (Object.hasOwn(source, 'contextTokens')) next.contextTokens = source.contextTokens;
|
|
98
99
|
if (Object.hasOwn(source, 'disabled')) next.disabled = source.disabled;
|
|
100
|
+
if (Object.hasOwn(source, 'fallbacks')) next.fallbacks = source.fallbacks.map(routeInput);
|
|
99
101
|
return next;
|
|
100
102
|
}
|
|
101
103
|
|
|
@@ -118,6 +120,7 @@ function publicProviderRows(setup) {
|
|
|
118
120
|
...extra,
|
|
119
121
|
});
|
|
120
122
|
return {
|
|
123
|
+
...(setup?.managedByClient === true ? { managedByClient: true, unavailable: setup.unavailable === true } : {}),
|
|
121
124
|
pendingSecrets: setup?.pendingSecrets === true,
|
|
122
125
|
api: (setup?.api || []).map((row) =>
|
|
123
126
|
pick(row, {
|
|
@@ -141,6 +144,37 @@ function publicProviderRows(setup) {
|
|
|
141
144
|
};
|
|
142
145
|
}
|
|
143
146
|
|
|
147
|
+
/** Minimal provider rows for the model: only providers with a credential (or
|
|
148
|
+
* one needing re-authentication), counts instead of account rosters. Without
|
|
149
|
+
* `accountCount` (desktop-owned accounts) no counts are reported. */
|
|
150
|
+
function configuredProviderRows(rows, accountCount) {
|
|
151
|
+
const providers = [];
|
|
152
|
+
let notConfigured = 0;
|
|
153
|
+
for (const [kind, list] of [
|
|
154
|
+
['api', rows.api],
|
|
155
|
+
['oauth', rows.oauth],
|
|
156
|
+
['local', rows.local],
|
|
157
|
+
]) {
|
|
158
|
+
for (const row of list) {
|
|
159
|
+
if (!row.authenticated && !row.reauthRequired) {
|
|
160
|
+
notConfigured += 1;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
let accounts = {};
|
|
164
|
+
if (kind === 'oauth' && accountCount) accounts = { accounts: row.authenticated ? accountCount(row.id) : 0 };
|
|
165
|
+
providers.push({
|
|
166
|
+
id: row.id,
|
|
167
|
+
kind,
|
|
168
|
+
authenticated: row.authenticated,
|
|
169
|
+
status: row.status,
|
|
170
|
+
...(row.reauthRequired ? { reauthRequired: true } : {}),
|
|
171
|
+
...accounts,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return { ...(rows.pendingSecrets ? { pendingSecrets: true } : {}), providers, notConfigured };
|
|
176
|
+
}
|
|
177
|
+
|
|
144
178
|
/** OAuth account roster without usage meters or provider-side identities. */
|
|
145
179
|
function publicAccounts(pool) {
|
|
146
180
|
return {
|
|
@@ -300,8 +334,14 @@ const SETUP_STATUS_READERS = {
|
|
|
300
334
|
'local-provider': (rt) => rt.getToolModuleSettings().localProvider,
|
|
301
335
|
features: (rt, { getConfig }) => featureStatus(rt, getConfig),
|
|
302
336
|
shell: (rt) => rt.getSystemShell?.() || {},
|
|
303
|
-
providers: async (rt) => {
|
|
337
|
+
providers: async (rt, { detail }) => {
|
|
304
338
|
const rows = publicProviderRows(await rt.getProviderSetup?.({}));
|
|
339
|
+
// Client mode: the desktop owns accounts, so the server roster is never read.
|
|
340
|
+
if (rows.managedByClient) {
|
|
341
|
+
if (detail) return rows;
|
|
342
|
+
return { managedByClient: true, unavailable: rows.unavailable, ...configuredProviderRows(rows) };
|
|
343
|
+
}
|
|
344
|
+
if (!detail) return configuredProviderRows(rows, (id) => rt.getProviderAccounts(id).accounts.length);
|
|
305
345
|
rows.oauth = rows.oauth.map((row) =>
|
|
306
346
|
row.authenticated ? { ...row, accounts: publicAccounts(rt.getProviderAccounts(row.id)) } : row
|
|
307
347
|
);
|
|
@@ -339,7 +379,10 @@ function validateSetupInput(args) {
|
|
|
339
379
|
if (action !== 'set_agent_route' && Object.hasOwn(args.route, 'disabled')) {
|
|
340
380
|
throw new Error('route.disabled is only accepted by set_agent_route');
|
|
341
381
|
}
|
|
342
|
-
|
|
382
|
+
if (Object.hasOwn(args.route, 'fallbacks') && !['set_agent_route', 'set_web_search_route'].includes(action)) {
|
|
383
|
+
throw new Error('route.fallbacks is only accepted by set_agent_route and set_web_search_route');
|
|
384
|
+
}
|
|
385
|
+
for (const field of ['contextPercent', 'contextTokens', 'autoEffort']) {
|
|
343
386
|
if (action !== 'set_route' && action !== 'set_agent_route' && Object.hasOwn(args.route, field)) {
|
|
344
387
|
throw new Error(`route.${field} is only accepted by set_route and set_agent_route`);
|
|
345
388
|
}
|
|
@@ -401,12 +444,12 @@ const SETUP_ACTION_HANDLERS = {
|
|
|
401
444
|
status: async (_rt, args, { readStatus, requestDesktop }) => {
|
|
402
445
|
const domain = clean(args.domain) || 'summary';
|
|
403
446
|
requireEnum(domain, SETUP_STATUS_DOMAINS, 'domain');
|
|
404
|
-
return { domain, ...(await readStatus(domain, requestDesktop)) };
|
|
447
|
+
return { domain, ...(await readStatus(domain, requestDesktop, args.detail === true)) };
|
|
405
448
|
},
|
|
406
449
|
open: (_rt, args, { openSurface }) => openSurface(args.target),
|
|
407
450
|
set_route: async (rt, args) => {
|
|
408
451
|
const route = routeInput(args.route);
|
|
409
|
-
const next = await rt.setRoute(route);
|
|
452
|
+
const next = await rt.setRoute(route, { keepMainModel: false });
|
|
410
453
|
return { route: next, appliesTo: 'next session (a conversation keeps its frozen route)' };
|
|
411
454
|
},
|
|
412
455
|
set_agent_route: async (rt, args) => {
|
|
@@ -524,6 +567,7 @@ const SETUP_ACTION_HANDLERS = {
|
|
|
524
567
|
forget_provider_auth: async (rt, args) => {
|
|
525
568
|
const name = requireText(args.name, 'name');
|
|
526
569
|
const setup = await rt.getProviderSetup({});
|
|
570
|
+
if (setup?.managedByClient) throw new Error('Manage provider accounts in the local desktop window.');
|
|
527
571
|
if (!(setup?.oauth || []).some((row) => row.id === name)) {
|
|
528
572
|
if (Object.hasOwn(args, 'accountId')) throw new Error('accountId applies only to OAuth providers');
|
|
529
573
|
return rt.forgetProviderAuth(name);
|
|
@@ -536,8 +580,12 @@ const SETUP_ACTION_HANDLERS = {
|
|
|
536
580
|
const accountId = Object.hasOwn(args, 'accountId') ? requireText(args.accountId, 'accountId') : accounts[0].id;
|
|
537
581
|
return { ...(await rt.forgetProviderAuth(name, accountId)), accountId };
|
|
538
582
|
},
|
|
539
|
-
set_provider_account: async (rt, args) =>
|
|
540
|
-
|
|
583
|
+
set_provider_account: async (rt, args) => {
|
|
584
|
+
if ((await rt.getProviderSetup?.({}))?.managedByClient) {
|
|
585
|
+
throw new Error('Manage provider accounts in the local desktop window.');
|
|
586
|
+
}
|
|
587
|
+
return publicAccounts(await rt.updateProviderAccounts(requireText(args.name, 'name'), args.providerAccount));
|
|
588
|
+
},
|
|
541
589
|
add_mcp_server: async (rt, args) => {
|
|
542
590
|
const server = mcpServerInput(args);
|
|
543
591
|
requireText(server.name, 'server.name');
|
|
@@ -631,11 +679,11 @@ export function createSetupToolExecutor({ getApi, getConfig, notifySessionUi, ge
|
|
|
631
679
|
return facade;
|
|
632
680
|
};
|
|
633
681
|
|
|
634
|
-
async function readStatus(domain, requestDesktop) {
|
|
682
|
+
async function readStatus(domain, requestDesktop, detail) {
|
|
635
683
|
const rt = api();
|
|
636
684
|
if (SETUP_DESKTOP_DOMAINS.includes(domain)) return requestDesktop({ action: 'status', domain });
|
|
637
685
|
if (!Object.hasOwn(SETUP_STATUS_READERS, domain)) throw new Error(`setup: unknown status domain "${domain}"`);
|
|
638
|
-
return SETUP_STATUS_READERS[domain](rt, { domain, getConfig: () => getConfig?.() || {} });
|
|
686
|
+
return SETUP_STATUS_READERS[domain](rt, { domain, detail, getConfig: () => getConfig?.() || {} });
|
|
639
687
|
}
|
|
640
688
|
|
|
641
689
|
function openSurface(target) {
|
|
@@ -669,7 +717,7 @@ export function createSetupToolExecutor({ getApi, getConfig, notifySessionUi, ge
|
|
|
669
717
|
dispose: desktop.dispose,
|
|
670
718
|
async execute(args = {}, options = {}) {
|
|
671
719
|
const result = await execute(args, options);
|
|
672
|
-
if (READ_ONLY_SETUP_ACTIONS.has(args.action)) return JSON.stringify(result ?? {}
|
|
720
|
+
if (READ_ONLY_SETUP_ACTIONS.has(args.action)) return JSON.stringify(result ?? {});
|
|
673
721
|
await flushSettings?.();
|
|
674
722
|
// Attached surfaces re-read what changed instead of waiting for their
|
|
675
723
|
// next open or cache expiry.
|
|
@@ -1,11 +1,81 @@
|
|
|
1
1
|
import { SETUP_EXTENDED_PROPERTIES, SETUP_DESKTOP_ACTIONS } from './settings-contract.mjs';
|
|
2
2
|
import { MEDIA_KINDS } from '../../runtime/media/tool-defs.mjs';
|
|
3
|
+
import { OPENAI_COMPAT_PRESETS } from '../../runtime/agent/orchestrator/providers/openai-compat-presets.mjs';
|
|
3
4
|
|
|
4
5
|
const own = (value, key) => Object.hasOwn(value || {}, key);
|
|
5
6
|
const pick = (value, keys) => Object.fromEntries(keys.filter((key) => own(value, key)).map((key) => [key, value[key]]));
|
|
6
7
|
const entryKeys = Object.keys(SETUP_EXTENDED_PROPERTIES.entry.properties);
|
|
7
8
|
const definitionKeys = Object.keys(SETUP_EXTENDED_PROPERTIES.definition.properties);
|
|
8
9
|
|
|
10
|
+
const MODEL_PAGE_DEFAULT = 25;
|
|
11
|
+
|
|
12
|
+
function providerIndex(rows) {
|
|
13
|
+
const counts = new Map();
|
|
14
|
+
for (const row of rows) counts.set(row.provider, (counts.get(row.provider) || 0) + 1);
|
|
15
|
+
return [...counts].map(([provider, count]) => {
|
|
16
|
+
const defaultModel = OPENAI_COMPAT_PRESETS[provider]?.defaultModel;
|
|
17
|
+
return { provider, count, ...(defaultModel ? { defaultModel } : {}) };
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function compactModelRow(row) {
|
|
22
|
+
const context = row.contextWindow || null;
|
|
23
|
+
const maxContext = Number(row.maxContextWindow) || 0;
|
|
24
|
+
return {
|
|
25
|
+
id: row.id,
|
|
26
|
+
display: row.display || row.id,
|
|
27
|
+
context,
|
|
28
|
+
...(maxContext > (context || 0) ? { maxContext } : {}),
|
|
29
|
+
efforts: (row.effortOptions || []).map((option) => option.value),
|
|
30
|
+
...(row.fastCapable === true ? { fast: true } : {}),
|
|
31
|
+
...(row.supportsVision === true ? { vision: true } : {}),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const isPresent = (value) =>
|
|
36
|
+
value != null && value !== '' && value !== false && !(typeof value === 'object' && !Object.keys(value).length);
|
|
37
|
+
|
|
38
|
+
/** Everything set_route can use for one model; empty and false fields omitted. */
|
|
39
|
+
function modelDetail(row) {
|
|
40
|
+
const detail = {
|
|
41
|
+
provider: row.provider,
|
|
42
|
+
id: row.id,
|
|
43
|
+
display: row.display || row.id,
|
|
44
|
+
context: row.contextWindow,
|
|
45
|
+
maxContext: Number(row.maxContextWindow) > row.contextWindow ? row.maxContextWindow : null,
|
|
46
|
+
outputTokens: row.outputTokens,
|
|
47
|
+
vision: row.supportsVision,
|
|
48
|
+
webSearch: row.supportsWebSearch,
|
|
49
|
+
reasoning: row.supportsReasoning,
|
|
50
|
+
effortOptions: (row.effortOptions || []).map(({ value, label }) => ({ value, label })),
|
|
51
|
+
defaultEffort: row.defaultEffort,
|
|
52
|
+
fastCapable: row.fastCapable,
|
|
53
|
+
fastEfforts: row.fastEfforts,
|
|
54
|
+
defaultFast: row.defaultFast,
|
|
55
|
+
serviceTiers: row.serviceTiers,
|
|
56
|
+
defaultServiceTier: row.defaultServiceTier,
|
|
57
|
+
additionalSpeedTiers: row.additionalSpeedTiers,
|
|
58
|
+
modelParameterOptions: row.modelParameterOptions,
|
|
59
|
+
parameterVariants: row.parameterVariants,
|
|
60
|
+
defaultModelParameters: row.defaultModelParameters,
|
|
61
|
+
supportsMaxMode: row.supportsMaxMode,
|
|
62
|
+
};
|
|
63
|
+
return Object.fromEntries(Object.entries(detail).filter(([, value]) => isPresent(value)));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function findModel(rows, id, provider) {
|
|
67
|
+
const matches = rows.filter((row) => row.id === id && (!provider || row.provider === provider));
|
|
68
|
+
if (!matches.length) {
|
|
69
|
+
throw new Error(
|
|
70
|
+
`model "${id}" not found${provider ? ` for provider "${provider}"` : ''}; list_models with catalog.provider returns its model ids`
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
const providers = [...new Set(matches.map((row) => row.provider))];
|
|
74
|
+
if (providers.length > 1)
|
|
75
|
+
throw new Error(`model "${id}" is offered by ${providers.join(', ')}; pass catalog.provider`);
|
|
76
|
+
return matches[0];
|
|
77
|
+
}
|
|
78
|
+
|
|
9
79
|
export function publicAutomation(row) {
|
|
10
80
|
const result = {
|
|
11
81
|
...pick(row, entryKeys),
|
|
@@ -136,12 +206,22 @@ async function saveDefinition(rt, args) {
|
|
|
136
206
|
export const EXTENDED_SETUP_HANDLERS = Object.freeze({
|
|
137
207
|
set_local_context: (rt, args) => rt.setLocalProviderContext(args.modelId, args.localContextWindow),
|
|
138
208
|
async list_models(rt, args) {
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
return {
|
|
209
|
+
const { provider, model, page = 1, limit = MODEL_PAGE_DEFAULT, webSearch, refresh } = args.catalog || {};
|
|
210
|
+
const rows = webSearch
|
|
211
|
+
? await rt.listWebSearchModels({ refresh: refresh === true })
|
|
212
|
+
: await rt.listProviderModels({ refresh: refresh === true });
|
|
213
|
+
if (model) return { model: modelDetail(findModel(rows, model, provider)) };
|
|
214
|
+
if (!provider) return { providers: providerIndex(rows) };
|
|
215
|
+
const own = rows.filter((row) => row.provider === provider);
|
|
216
|
+
const pages = Math.max(1, Math.ceil(own.length / limit));
|
|
217
|
+
return {
|
|
218
|
+
provider,
|
|
219
|
+
total: own.length,
|
|
220
|
+
page,
|
|
221
|
+
pages,
|
|
222
|
+
...(page < pages ? { nextPage: page + 1 } : {}),
|
|
223
|
+
models: own.slice((page - 1) * limit, page * limit).map(compactModelRow),
|
|
224
|
+
};
|
|
145
225
|
},
|
|
146
226
|
set_orchestration_mode: (rt, args) => rt.setOrchestrationMode(args.mode),
|
|
147
227
|
get_mcp_server: async (rt, args) => publicMcpConfig(await rt.getMcpServerConfig(args.name)),
|
|
@@ -114,9 +114,24 @@ export const SETUP_MCP_SCHEMA = object({
|
|
|
114
114
|
|
|
115
115
|
export const SETUP_EXTENDED_PROPERTIES = Object.freeze({
|
|
116
116
|
catalog: object({
|
|
117
|
-
provider:
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
provider: {
|
|
118
|
+
...text,
|
|
119
|
+
description: "list_models: omit for the provider index; set for that provider's compact model rows.",
|
|
120
|
+
},
|
|
121
|
+
model: {
|
|
122
|
+
...text,
|
|
123
|
+
description:
|
|
124
|
+
'list_models: one model id; returns its full options (efforts, fast, service tiers, modelParameterOptions, parameterVariants) for set_route. Add provider when several offer the id.',
|
|
125
|
+
},
|
|
126
|
+
page: { type: 'integer', minimum: 1, description: 'list_models with provider: 1-based page; default 1.' },
|
|
127
|
+
limit: {
|
|
128
|
+
type: 'integer',
|
|
129
|
+
minimum: 1,
|
|
130
|
+
maximum: 100,
|
|
131
|
+
description: 'list_models with provider: rows per page; default 25.',
|
|
132
|
+
},
|
|
133
|
+
webSearch: { ...boolean, description: 'list_models: native-search capable models only.' },
|
|
134
|
+
refresh: { ...boolean, description: 'list_models: refresh the catalog first.' },
|
|
120
135
|
}),
|
|
121
136
|
localContextWindow: {
|
|
122
137
|
type: ['integer', 'null'],
|
|
@@ -68,7 +68,7 @@ export const SETUP_OPEN_TARGETS = Object.freeze([
|
|
|
68
68
|
// Runtime dispatch contract. A trailing ? denotes an optional field. Keep
|
|
69
69
|
// this out of the wire schema: field descriptions already name their actions.
|
|
70
70
|
export const SETUP_ACTION_FIELDS = Object.freeze({
|
|
71
|
-
status: 'domain?',
|
|
71
|
+
status: 'domain? detail?',
|
|
72
72
|
open: 'target',
|
|
73
73
|
set_route: 'route',
|
|
74
74
|
set_agent_route: 'agent route',
|
|
@@ -136,6 +136,10 @@ const ROUTE_SCHEMA = {
|
|
|
136
136
|
model: { type: 'string' },
|
|
137
137
|
effort: { type: 'string' },
|
|
138
138
|
fast: { type: 'boolean' },
|
|
139
|
+
autoEffort: {
|
|
140
|
+
type: 'boolean',
|
|
141
|
+
description: 'Main and agent routes only: Auto reasoning for this route; omitted = preserved.',
|
|
142
|
+
},
|
|
139
143
|
modelParameters: { type: 'object', additionalProperties: { type: 'string' } },
|
|
140
144
|
// A typed enum is unrepresentable on Gemini; the bounds project everywhere
|
|
141
145
|
// and the executor rejects values that are not a multiple of 10.
|
|
@@ -152,12 +156,23 @@ const ROUTE_SCHEMA = {
|
|
|
152
156
|
},
|
|
153
157
|
};
|
|
154
158
|
|
|
159
|
+
ROUTE_SCHEMA.properties.fallbacks = {
|
|
160
|
+
type: 'array',
|
|
161
|
+
description: 'Agent and Web Search routes only: ordered fallback models; [] clears the list.',
|
|
162
|
+
items: {
|
|
163
|
+
type: 'object',
|
|
164
|
+
additionalProperties: false,
|
|
165
|
+
required: ['provider', 'model'],
|
|
166
|
+
properties: Object.fromEntries(Object.entries(ROUTE_SCHEMA.properties).filter(([key]) => key !== 'disabled')),
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
|
|
155
170
|
export const SETUP_TOOL_DEFS = Object.freeze([
|
|
156
171
|
{
|
|
157
172
|
name: 'setup',
|
|
158
173
|
title: 'Setup',
|
|
159
174
|
description:
|
|
160
|
-
"Read or change this Mixdog installation's settings through the runtime. Load the setup skill first (local-provider for managed local-model installation). status reads one domain; open navigates the attached app to a settings surface. Secrets (API keys, OAuth) are never accepted. Changes apply to new sessions unless the result says otherwise.",
|
|
175
|
+
"Read or change this Mixdog installation's settings through the runtime. Load the setup skill first (local-provider for managed local-model installation). status reads one domain; open navigates the attached app to a settings surface; list_models returns a provider index, then one provider's paged compact rows, then one model's full options (catalog.model). Results are compact JSON. Secrets (API keys, OAuth) are never accepted. Changes apply to new sessions unless the result says otherwise.",
|
|
161
176
|
annotations: {
|
|
162
177
|
title: 'Setup',
|
|
163
178
|
readOnlyHint: false,
|
|
@@ -177,6 +192,11 @@ export const SETUP_TOOL_DEFS = Object.freeze([
|
|
|
177
192
|
enum: [...SETUP_STATUS_DOMAINS],
|
|
178
193
|
description: 'status: which domain to read; default summary.',
|
|
179
194
|
},
|
|
195
|
+
detail: {
|
|
196
|
+
type: 'boolean',
|
|
197
|
+
description:
|
|
198
|
+
'status providers: full rows for every provider (key URLs, expiry, account ids) instead of configured providers only.',
|
|
199
|
+
},
|
|
180
200
|
target: {
|
|
181
201
|
type: 'string',
|
|
182
202
|
enum: [...SETUP_OPEN_TARGETS],
|
|
@@ -236,7 +256,7 @@ export const SETUP_TOOL_DEFS = Object.freeze([
|
|
|
236
256
|
accountId: {
|
|
237
257
|
type: 'string',
|
|
238
258
|
description:
|
|
239
|
-
'forget_provider_auth: OAuth account id from status providers; required when the provider has several accounts.',
|
|
259
|
+
'forget_provider_auth: OAuth account id from status providers with detail:true; required when the provider has several accounts.',
|
|
240
260
|
},
|
|
241
261
|
providerAccount: {
|
|
242
262
|
type: 'object',
|
|
@@ -263,7 +283,8 @@ export const SETUP_TOOL_DEFS = Object.freeze([
|
|
|
263
283
|
properties: { id: { type: 'string' }, label: { type: 'string', maxLength: 80 } },
|
|
264
284
|
},
|
|
265
285
|
},
|
|
266
|
-
description:
|
|
286
|
+
description:
|
|
287
|
+
'set_provider_account: OAuth account change; account ids from status providers with detail:true.',
|
|
267
288
|
},
|
|
268
289
|
modelId: {
|
|
269
290
|
type: 'string',
|
|
@@ -46,18 +46,16 @@ export function createSkillsApi({ contextMod, getCwd, getTools = () => [] }) {
|
|
|
46
46
|
}
|
|
47
47
|
return { kind: 'user' };
|
|
48
48
|
};
|
|
49
|
+
const enabledFlags = contextMod.skillEnabledFlags(skills);
|
|
49
50
|
return {
|
|
50
51
|
cwd,
|
|
51
52
|
count: skills.length,
|
|
52
53
|
tools: getTools().map(({ name }) => ({ name })),
|
|
53
|
-
skills: skills.map((skill) => {
|
|
54
|
+
skills: skills.map((skill, index) => {
|
|
54
55
|
const source = sourceForSkill(skill);
|
|
55
56
|
return {
|
|
56
57
|
name: skill.name,
|
|
57
|
-
enabled:
|
|
58
|
-
contextMod.isSkillDisabled?.(skill.name, null, skills) ||
|
|
59
|
-
contextMod.skillMissingFeature?.(skill.name, null, skills)
|
|
60
|
-
),
|
|
58
|
+
enabled: enabledFlags[index],
|
|
61
59
|
description: skill.description || '',
|
|
62
60
|
whenToUse: skill.whenToUse || '',
|
|
63
61
|
filePath: skill.filePath || null,
|
|
@@ -4,17 +4,23 @@
|
|
|
4
4
|
// updated policy.
|
|
5
5
|
import { sessionHasConversationMessages } from '../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
6
6
|
import { toSessionWorkflowMeta } from '../runtime/agent/orchestrator/runtime-core/workflow.mjs';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
applyDeferredToolSurface,
|
|
9
|
+
filterDisallowedTools,
|
|
10
|
+
} from '../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
8
11
|
import { deferredSurfaceModeForLead } from '../runtime/agent/orchestrator/runtime-core/effort.mjs';
|
|
9
12
|
import {
|
|
10
13
|
applyInitialDeferredToolManifestToBp2,
|
|
11
14
|
composeSystemPrompt,
|
|
12
15
|
} from '../runtime/agent/orchestrator/context/collect.mjs';
|
|
16
|
+
import { _buildBaseRules } from '../runtime/agent/orchestrator/session/manager/rules-cache.mjs';
|
|
17
|
+
import { sessionRolePromptFields } from '../runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs';
|
|
13
18
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '../runtime/agent/orchestrator/session/manager/
|
|
19
|
+
delegationDisabled,
|
|
20
|
+
honoredSchemaAllowlist,
|
|
21
|
+
} from '../runtime/agent/orchestrator/session/manager/session-tool-surface.mjs';
|
|
22
|
+
import { finalizeSessionToolList } from '../runtime/agent/orchestrator/session/manager/tool-resolution.mjs';
|
|
23
|
+
import { isAgentOwner } from '../runtime/agent/orchestrator/agent-owner.mjs';
|
|
18
24
|
import { unusedModelEditToolName } from '../runtime/shared/edit-tool-dialect.mjs';
|
|
19
25
|
|
|
20
26
|
function toolNames(list) {
|
|
@@ -69,6 +75,7 @@ export function createToolPolicyRefresh({
|
|
|
69
75
|
getMode,
|
|
70
76
|
getConfig,
|
|
71
77
|
getDataDir,
|
|
78
|
+
getActiveTurnCount,
|
|
72
79
|
modelStandaloneTools,
|
|
73
80
|
featureDisallowedTools,
|
|
74
81
|
loadCoreMemoryContext,
|
|
@@ -78,13 +85,23 @@ export function createToolPolicyRefresh({
|
|
|
78
85
|
}) {
|
|
79
86
|
// Denied tools leave every surface, then the deferred surface is rebuilt
|
|
80
87
|
// for the lead's current mode.
|
|
81
|
-
function applyToolDenials(session, denied) {
|
|
88
|
+
function applyToolDenials(session, denied, schemaAllowedTools, ownerIsAgent) {
|
|
82
89
|
session.disallowedTools = denied;
|
|
83
90
|
session.tools = filterDisallowedTools(session.tools, denied);
|
|
84
91
|
if (Array.isArray(session.deferredToolCatalog)) {
|
|
85
92
|
session.deferredToolCatalog = filterDisallowedTools(session.deferredToolCatalog, denied);
|
|
86
93
|
}
|
|
87
|
-
|
|
94
|
+
const catalogTools = finalizeSessionToolList(modelStandaloneTools(), {
|
|
95
|
+
schemaAllowedTools,
|
|
96
|
+
disallowedTools: denied,
|
|
97
|
+
ownerIsAgent,
|
|
98
|
+
});
|
|
99
|
+
session.tools = finalizeSessionToolList(session.tools, {
|
|
100
|
+
schemaAllowedTools,
|
|
101
|
+
disallowedTools: denied,
|
|
102
|
+
ownerIsAgent,
|
|
103
|
+
});
|
|
104
|
+
applyDeferredToolSurface(session, deferredSurfaceModeForLead(getMode()), catalogTools, {
|
|
88
105
|
provider: getRoute()?.provider,
|
|
89
106
|
});
|
|
90
107
|
const catalog = Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : [];
|
|
@@ -101,16 +118,40 @@ export function createToolPolicyRefresh({
|
|
|
101
118
|
}
|
|
102
119
|
}
|
|
103
120
|
|
|
121
|
+
// A turn is executing from the moment it opens until it settles, even when
|
|
122
|
+
// its transcript holds only notifications (which are not conversation
|
|
123
|
+
// content). Its tool surface is frozen for that whole span.
|
|
124
|
+
function turnInFlight(session) {
|
|
125
|
+
return (getActiveTurnCount?.() || 0) > 0 || Array.isArray(session.liveTurnMessages);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Admission: the session is still the current one, no turn is executing and
|
|
129
|
+
// no conversation has started. Checked before staging and again right
|
|
130
|
+
// before the staged change is applied.
|
|
131
|
+
function admitsRefresh(session) {
|
|
132
|
+
return (
|
|
133
|
+
getSession?.() === session &&
|
|
134
|
+
!turnInFlight(session) &&
|
|
135
|
+
!sessionHasConversationMessages(session) &&
|
|
136
|
+
!sessionHasConversationMessages({ messages: session.liveTurnMessages })
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
104
140
|
async function refreshEmptySessionToolPolicy() {
|
|
105
141
|
invalidatePreSessionToolSurface?.();
|
|
106
142
|
const session = getSession?.();
|
|
107
143
|
if (!session?.id) return { appliedToCurrentSession: true };
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
144
|
+
if (!admitsRefresh(session)) return { appliedToCurrentSession: false };
|
|
145
|
+
// Older records contain only compiled prompt text; rebuilding would guess
|
|
146
|
+
// away custom instructions. Keep that immutable material for every owner.
|
|
147
|
+
const identity = session.promptIdentity;
|
|
148
|
+
if (!identity) return { appliedToCurrentSession: false, reason: 'missing-prompt-identity' };
|
|
149
|
+
const ownerIsAgent = isAgentOwner(session);
|
|
150
|
+
const schemaAllowedTools = honoredSchemaAllowlist(session.schemaAllowedTools, {
|
|
151
|
+
ownerIsAgent,
|
|
152
|
+
agent: identity.agent,
|
|
153
|
+
});
|
|
154
|
+
const toolFreeRole = ownerIsAgent && schemaAllowedTools?.length === 0;
|
|
114
155
|
|
|
115
156
|
const {
|
|
116
157
|
summary: workflow,
|
|
@@ -118,34 +159,44 @@ export function createToolPolicyRefresh({
|
|
|
118
159
|
packContext,
|
|
119
160
|
orchestrationMode,
|
|
120
161
|
} = activeWorkflowContext(getConfig(), getDataDir());
|
|
121
|
-
const workflowContext =
|
|
122
|
-
const denied = [
|
|
162
|
+
const workflowContext = ownerIsAgent ? packContext : leadWorkflowContext;
|
|
163
|
+
const denied = [
|
|
164
|
+
...session.callerDisallowedTools,
|
|
165
|
+
...featureDisallowedTools(),
|
|
166
|
+
...(workflow?.delegatesAgents === false ? ['agent'] : []),
|
|
167
|
+
]
|
|
123
168
|
.map((name) => String(name || ''))
|
|
124
169
|
.filter(Boolean);
|
|
125
|
-
session.workflow = toSessionWorkflowMeta(workflow);
|
|
126
|
-
session.orchestrationMode = orchestrationMode;
|
|
127
|
-
applyToolDenials(session, denied);
|
|
128
170
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
171
|
+
// Stage: everything below is computed without touching the session, so a
|
|
172
|
+
// turn that starts during the async rebuild cannot lose tools to it.
|
|
173
|
+
const baseRules =
|
|
174
|
+
identity.skipAgentRules || toolFreeRole
|
|
175
|
+
? ''
|
|
176
|
+
: _buildBaseRules({
|
|
177
|
+
omitTools: [...denied, unusedModelEditToolName(getRoute()?.model)],
|
|
178
|
+
allowTools: schemaAllowedTools,
|
|
179
|
+
provider: getRoute()?.provider,
|
|
180
|
+
model: getRoute()?.model,
|
|
181
|
+
});
|
|
137
182
|
const coreMemoryContext = await leadCoreMemoryContext();
|
|
138
183
|
const { sessionMarkerCore } = composeSystemPrompt({
|
|
139
|
-
|
|
140
|
-
|
|
184
|
+
...sessionRolePromptFields(identity, {
|
|
185
|
+
ownerIsAgent,
|
|
186
|
+
toolFreeRole,
|
|
187
|
+
delegationFree: delegationDisabled(session, ownerIsAgent),
|
|
188
|
+
}),
|
|
189
|
+
provider: getRoute()?.provider,
|
|
141
190
|
workflowContext,
|
|
142
191
|
coreMemoryContext,
|
|
143
192
|
// The rebuilt core keeps (or newly applies) the instruction-files setting.
|
|
144
|
-
instructionFilesContext: loadInstructionFilesContext?.(session) || null,
|
|
145
|
-
// BP3 rebuild must keep the trailing language block, or a workflow
|
|
146
|
-
// switch would silently drop the response-language directive.
|
|
147
|
-
languageContext: _buildLeadLanguageContext(),
|
|
193
|
+
instructionFilesContext: toolFreeRole ? null : loadInstructionFilesContext?.(session) || null,
|
|
148
194
|
});
|
|
195
|
+
// Apply: re-check admission after the await, then mutate synchronously.
|
|
196
|
+
if (!admitsRefresh(session)) return { appliedToCurrentSession: false };
|
|
197
|
+
session.workflow = toSessionWorkflowMeta(workflow);
|
|
198
|
+
session.orchestrationMode = orchestrationMode;
|
|
199
|
+
applyToolDenials(session, denied, schemaAllowedTools, ownerIsAgent);
|
|
149
200
|
rewriteSystemHeading(session, '# Tool Use', baseRules);
|
|
150
201
|
rewriteBp3Core(session, sessionMarkerCore);
|
|
151
202
|
session.updatedAt = Date.now();
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
filterDisallowedTools,
|
|
7
7
|
selectDeferredTools,
|
|
8
8
|
} from '../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
9
|
+
import { AGENT_WORKER_DENIED_TOOLS } from '../runtime/agent/orchestrator/session/manager/tool-resolution.mjs';
|
|
9
10
|
import { LEAD_DISALLOWED_TOOLS } from '../runtime/agent/orchestrator/runtime-core/tool-defs.mjs';
|
|
10
11
|
import { deferredSurfaceModeForLead, toolSpecForMode } from '../runtime/agent/orchestrator/runtime-core/effort.mjs';
|
|
11
12
|
import { loadSkillToolDependencies } from '../runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs';
|
|
@@ -52,8 +53,11 @@ export function createToolSurface({
|
|
|
52
53
|
const workflowTools = hideAgentTool
|
|
53
54
|
? profileTools.filter((tool) => !agentToolNames.has(String(tool?.name || '')))
|
|
54
55
|
: profileTools;
|
|
56
|
+
const visibleTools = agentOwned
|
|
57
|
+
? workflowTools.filter((tool) => !AGENT_WORKER_DENIED_TOOLS.has(String(tool?.name || '').toLowerCase()))
|
|
58
|
+
: workflowTools;
|
|
55
59
|
const denied = new Set(getFeatureDisallowedTools().map((name) => String(name || '')));
|
|
56
|
-
return denied.size ?
|
|
60
|
+
return denied.size ? visibleTools.filter((tool) => !denied.has(String(tool?.name || ''))) : visibleTools;
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
function disallowedTools() {
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
* runtime notifications, and the deferred tool surface (status + selection).
|
|
4
4
|
*/
|
|
5
5
|
import { clean } from '../../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
toolRow,
|
|
8
|
+
toolSearchMatches,
|
|
9
|
+
sortedNamesByMeasuredUsage,
|
|
10
|
+
selectDeferredTools,
|
|
11
|
+
} from '../../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
7
12
|
|
|
8
13
|
function splitToolStatusCounts(rows) {
|
|
9
14
|
const list = Array.isArray(rows) ? rows : [];
|
|
@@ -67,6 +72,39 @@ export function createAgentOps(deps) {
|
|
|
67
72
|
});
|
|
68
73
|
}
|
|
69
74
|
|
|
75
|
+
// Explicit user force-release ("Release anyway") of a shell job whose
|
|
76
|
+
// termination is unconfirmed: drops its workspace hold. The surface has
|
|
77
|
+
// already asked the user to confirm. The caller session's own holds, and
|
|
78
|
+
// holds of a closed session whose workspace this session's folder sees.
|
|
79
|
+
async function releaseShellJob(taskId) {
|
|
80
|
+
const session = getSession();
|
|
81
|
+
const { forceReleaseTerminationHold } = await import(
|
|
82
|
+
'../../runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs'
|
|
83
|
+
);
|
|
84
|
+
return forceReleaseTerminationHold(taskId, {
|
|
85
|
+
callerSessionId: session?.id || null,
|
|
86
|
+
callerCwd: getCurrentCwd?.() || null,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// This session's live shell jobs (the readout rows), each carrying
|
|
91
|
+
// `terminationUnconfirmed` when it is held without confirmed termination,
|
|
92
|
+
// plus held shells a closed session left in a workspace this session sees.
|
|
93
|
+
async function listShellJobs() {
|
|
94
|
+
const session = getSession();
|
|
95
|
+
const { shellJobsStatusFresh, shellJobVisibleFrom } = await import(
|
|
96
|
+
'../../runtime/shared/statusline/statusline-segments.mjs'
|
|
97
|
+
);
|
|
98
|
+
const status = await shellJobsStatusFresh({ clientHostPid: session?.clientHostPid || process.pid });
|
|
99
|
+
const own = session?.id ? status?.sessions?.[session.id]?.jobs : status?.jobs;
|
|
100
|
+
const jobs = Array.isArray(own) ? [...own] : [];
|
|
101
|
+
const cwd = getCurrentCwd?.() || null;
|
|
102
|
+
for (const job of status?.orphaned || []) {
|
|
103
|
+
if (shellJobVisibleFrom(job, cwd) && !jobs.some((row) => row.taskId === job.taskId)) jobs.push(job);
|
|
104
|
+
}
|
|
105
|
+
return { jobs };
|
|
106
|
+
}
|
|
107
|
+
|
|
70
108
|
function onNotification(listener) {
|
|
71
109
|
if (typeof listener !== 'function') return () => {};
|
|
72
110
|
const sessionId = getSession()?.id || getReservedSessionId?.() || '';
|
|
@@ -105,5 +143,14 @@ export function createAgentOps(deps) {
|
|
|
105
143
|
return { ...result, status: toolsStatus() };
|
|
106
144
|
}
|
|
107
145
|
|
|
108
|
-
return {
|
|
146
|
+
return {
|
|
147
|
+
agentControl,
|
|
148
|
+
taskControl,
|
|
149
|
+
stopShellJob,
|
|
150
|
+
releaseShellJob,
|
|
151
|
+
listShellJobs,
|
|
152
|
+
onNotification,
|
|
153
|
+
toolsStatus,
|
|
154
|
+
selectTools,
|
|
155
|
+
};
|
|
109
156
|
}
|