mixdog 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/package.json +2 -1
- package/scripts/gate-local.mjs +6 -4
- package/scripts/lib/gate-scheduler.mjs +29 -11
- package/scripts/probe-provider-catalog.mjs +31 -0
- package/scripts/provider-pingpong-live.mjs +599 -0
- package/scripts/session-sweep.mjs +5 -25
- package/src/agents/advisor/AGENT.md +1 -1
- package/src/agents/advisor/agent.json +1 -1
- package/src/agents/maintainer/AGENT.md +1 -1
- package/src/agents/maintainer/agent.json +1 -1
- package/src/agents/reviewer/AGENT.md +2 -4
- package/src/agents/security/AGENT.md +1 -2
- package/src/agents/writer/AGENT.md +2 -3
- package/src/defaults/shipped-history.json +11 -1
- package/src/defaults/skills/image/SKILL.md +21 -23
- package/src/defaults/skills/setup/SKILL.md +6 -1
- package/src/defaults/skills/setup/references/actions.md +44 -22
- package/src/defaults/skills/setup/references/surfaces.md +10 -8
- package/src/headless-exec.mjs +15 -8
- package/src/lib/keychain-cjs.cjs +20 -15
- package/src/output-styles/common.md +11 -10
- package/src/rules/agent/AGENT.md +6 -4
- package/src/rules/lead/LEAD.md +7 -9
- package/src/rules/shared/45-destructive.md +4 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +1 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +28 -7
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -11
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +92 -61
- package/src/runtime/agent/orchestrator/cache-mtime.mjs +10 -1
- package/src/runtime/agent/orchestrator/config-providers-merge.mjs +7 -0
- package/src/runtime/agent/orchestrator/config.mjs +5 -0
- package/src/runtime/agent/orchestrator/context/collect.mjs +1 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +26 -7
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +112 -7
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +101 -23
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-api-key-fetch.mjs +36 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +48 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-error-contract.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +24 -17
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +9 -9
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +26 -44
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +31 -15
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-blocks.mjs +20 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-delta.mjs +15 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/message-events.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -5
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-state.mjs +14 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +41 -12
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +13 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +131 -9
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +29 -10
- package/src/runtime/agent/orchestrator/providers/antigravity-retry-policy.mjs +125 -8
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +12 -62
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +117 -41
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +117 -72
- package/src/runtime/agent/orchestrator/providers/compat-request-policy.mjs +78 -2
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +39 -5
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-native-context.mjs +48 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-exec.mjs +144 -34
- package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +28 -4
- package/src/runtime/agent/orchestrator/providers/cursor-wire-request.mjs +8 -4
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +42 -11
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-messages.mjs +109 -6
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +17 -4
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +22 -2
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +73 -7
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +75 -6
- package/src/runtime/agent/orchestrator/providers/custom-reasoning.mjs +34 -7
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +32 -6
- package/src/runtime/agent/orchestrator/providers/deepseek.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +29 -5
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +36 -13
- package/src/runtime/agent/orchestrator/providers/gemini-error-contract.mjs +101 -11
- package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +41 -5
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/gemini-rest-stream/watchdogs.mjs +16 -5
- package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +19 -14
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +371 -41
- package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +97 -49
- package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +81 -10
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +35 -8
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/action-input-contract.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-native-blocks.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +253 -42
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-server-tool-usage.mjs +18 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +27 -6
- package/src/runtime/agent/orchestrator/providers/lib/claude-bridge-schema.mjs +392 -0
- package/src/runtime/agent/orchestrator/providers/lib/inclusive-usage.mjs +54 -0
- package/src/runtime/agent/orchestrator/providers/lib/origin-bound-fetch.mjs +16 -0
- package/src/runtime/agent/orchestrator/providers/lib/request-compression.mjs +86 -0
- package/src/runtime/agent/orchestrator/providers/lib/responses-terminal-fields.mjs +11 -0
- package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/lib/wire-pairing.mjs +50 -22
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +133 -21
- package/src/runtime/agent/orchestrator/providers/mimo-oauth-profile.mjs +13 -15
- package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +1 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +92 -16
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +13 -13
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +133 -62
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +35 -14
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +39 -7
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +2 -9
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-error-contract.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +84 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +47 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-reasoning-field.mjs +155 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +40 -24
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +63 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2901 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-parity.fixtures.mjs +183 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +87 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +51 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +103 -26
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +23 -4
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +11 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +17 -2
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +15 -23
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +64 -52
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +23 -10
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +28 -5
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +18 -7
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +80 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +72 -24
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +323 -0
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +50 -16
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +7 -19
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/refusals.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +51 -36
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +30 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +25 -6
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +18 -9
- package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +181 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +78 -70
- package/src/runtime/agent/orchestrator/providers/openrouter.mjs +74 -0
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +150 -10
- package/src/runtime/agent/orchestrator/providers/registry.mjs +13 -2
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/transport-scope.d.mts +6 -0
- package/src/runtime/agent/orchestrator/providers/transport-scope.mjs +28 -0
- package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +164 -0
- package/src/runtime/agent/orchestrator/providers/wire-route.mjs +522 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +1131 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search.fixtures.mjs +195 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +104 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +8 -6
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +24 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +15 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +30 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +3 -2
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +8 -3
- package/src/runtime/agent/orchestrator/runtime-core/provider-request-snapshot.mjs +7 -3
- package/src/runtime/agent/orchestrator/runtime-core/session-title.mjs +21 -1
- package/src/runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs +16 -3
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge-contract.mjs +6 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +526 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-schema.mjs +10 -7
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +178 -71
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +102 -12
- package/src/runtime/agent/orchestrator/runtime-core/tool-exposure.mjs +96 -0
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +10 -8
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -2
- package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +24 -0
- package/src/runtime/agent/orchestrator/session/cache/tool-result-reuse.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/catalog-db/index.mjs +2 -3
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +5 -11
- package/src/runtime/agent/orchestrator/session/catalog-db/worker.mjs +6 -22
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +16 -93
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +16 -2
- package/src/runtime/agent/orchestrator/session/compact/summary-anchor.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +148 -0
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +17 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -4
- package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/historical-session-closure.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/assistant-commit.mjs +2 -5
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +89 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +56 -0
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +18 -8
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +1 -27
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/segments.mjs +4 -10
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +2 -9
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +24 -10
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +135 -0
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +31 -4
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +76 -0
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +67 -20
- package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +10 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-call-resolution.mjs +95 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +30 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +29 -5
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +147 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +7 -5
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +33 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-support.mjs +0 -4
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +23 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +34 -12
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +54 -13
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +33 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +57 -25
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +11 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +22 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +57 -13
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/failed-turn-rewind.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +6 -120
- package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +231 -16
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +42 -49
- package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +50 -0
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +47 -17
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +26 -4
- package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +36 -35
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +29 -13
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-recovery.mjs +45 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +4 -10
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +17 -1
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/side-question.mjs +197 -0
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +22 -15
- package/src/runtime/agent/orchestrator/session/store/lifecycle-read.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/listing.mjs +2 -6
- package/src/runtime/agent/orchestrator/session/store/live-cache-eviction.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +46 -37
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/load-session.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +44 -37
- package/src/runtime/agent/orchestrator/session/store/session-observers.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/session-paths.mjs +59 -0
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +27 -21
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +0 -8
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +6 -18
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +33 -106
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store-agent-worker-pool.mjs +5 -8
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +136 -196
- package/src/runtime/agent/orchestrator/session/store-summary-archived-agent.mjs +34 -15
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +53 -115
- package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +10 -1
- package/src/runtime/agent/orchestrator/session/store-summary-locations.mjs +3 -29
- package/src/runtime/agent/orchestrator/session/store-summary-reader-catalog-fixture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +17 -10
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +9 -20
- package/src/runtime/agent/orchestrator/session/store.mjs +22 -19
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +12 -12
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +38 -14
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +15 -4
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/tool-schema-rejection.mjs +79 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +72 -15
- package/src/runtime/agent/orchestrator/session/turn-failure.mjs +45 -0
- package/src/runtime/agent/orchestrator/stall-policy.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +8 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/command-preflight.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +5 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/inline-hoist.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +218 -20
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +160 -39
- package/src/runtime/agent/orchestrator/tools/builtin/git-partial-stage.mjs +7 -5
- package/src/runtime/agent/orchestrator/tools/builtin/grep-formatting.mjs +14 -5
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-context-expander.mjs +4 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-output.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +48 -44
- package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +10 -3
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +247 -49
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +5 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +6 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +23 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +20 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +101 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/root-resolution.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +67 -0
- package/src/runtime/agent/orchestrator/tools/lib/process-table-fixture.mjs +50 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +303 -63
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +2 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +108 -18
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +77 -11
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +81 -5
- package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +73 -39
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +18 -1
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -4
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +88 -12
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +2 -0
- package/src/runtime/attachments/store.d.mts +9 -0
- package/src/runtime/attachments/store.mjs +80 -9
- package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -1
- package/src/runtime/browser-bridge/browser-action-contract.mjs +0 -2
- package/src/runtime/computer-bridge/action-schema.mjs +219 -196
- package/src/runtime/computer-bridge/linux-readiness.d.mts +0 -2
- package/src/runtime/computer-bridge/linux-readiness.mjs +0 -16
- package/src/runtime/effort-judge/judge-client.mjs +21 -4
- package/src/runtime/effort-judge/judge-worker.mjs +4 -1
- package/src/runtime/github/tool.mjs +208 -17
- package/src/runtime/media/adapters/codex-image.mjs +140 -21
- package/src/runtime/media/catalog.mjs +4 -4
- package/src/runtime/media/chatgpt-usage.mjs +55 -0
- package/src/runtime/media/defaults.mjs +37 -0
- package/src/runtime/media/jobs.mjs +12 -2
- package/src/runtime/media/lanes.mjs +12 -0
- package/src/runtime/media/tool-defs.mjs +15 -4
- package/src/runtime/media/tool.mjs +41 -12
- package/src/runtime/media/upstream-error.mjs +72 -6
- package/src/runtime/memory/index.mjs +1 -0
- package/src/runtime/memory/lib/http-router/ingest-routes.mjs +22 -1
- package/src/runtime/memory/lib/ingest/transcript-offsets.mjs +2 -0
- package/src/runtime/memory/lib/ingest/transcript-rows.mjs +1 -0
- package/src/runtime/memory/lib/pg/adapter.mjs +98 -1
- package/src/runtime/memory/lib/pg/process.mjs +36 -33
- package/src/runtime/memory/lib/pg/run-child.mjs +49 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +112 -4
- package/src/runtime/memory/lib/runtime-fetcher.mjs +12 -13
- package/src/runtime/memory/lib/transcript-ingest.mjs +14 -0
- package/src/runtime/office/README.md +1 -1
- package/src/runtime/office/authoring/docx-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/html-browser.mjs +18 -8
- package/src/runtime/office/authoring/html-document-author.mjs +2 -0
- package/src/runtime/office/authoring/pdf-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/pptx-contact-sheet.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-measure.mjs +3 -1
- package/src/runtime/office/authoring/pptx-html-runner.mjs +2 -0
- package/src/runtime/office/authoring/xlsx-html-runner.mjs +3 -1
- package/src/runtime/office/core/office-actions-read.mjs +3 -0
- package/src/runtime/office/core/office-render-preview.mjs +2 -0
- package/src/runtime/office/core/office-session-dispatch.mjs +7 -0
- package/src/runtime/office/core/office-sessionless-actions.mjs +8 -0
- package/src/runtime/office/core/office-sessions.mjs +5 -0
- package/src/runtime/office/core/office-transactions.mjs +3 -0
- package/src/runtime/office/core/office-write-ledger.mjs +94 -0
- package/src/runtime/office/design/library/templates/mixdog-executive.mixdog-edit.pptx +0 -0
- package/src/runtime/office/index.mjs +29 -0
- package/src/runtime/office/pdf/pdf-analysis.mjs +0 -68
- package/src/runtime/office/pdf/pdf-edit-document.mjs +2 -0
- package/src/runtime/office/pdf/pdf-render.mjs +23 -7
- package/src/runtime/office/pdf/pdf-security.mjs +2 -0
- package/src/runtime/office/portable/portable-opc.mjs +4 -1
- package/src/runtime/office/quality/visual-diff.mjs +2 -0
- package/src/runtime/session-search/session-search-ingest.mjs +1 -1
- package/src/runtime/shared/agent-reap-state.mjs +13 -0
- package/src/runtime/shared/atomic-file.d.mts +1 -1
- package/src/runtime/shared/background-tasks.mjs +6 -1
- package/src/runtime/shared/bounded-file-read.mjs +13 -0
- package/src/runtime/shared/bounded-line-diff.mjs +191 -0
- package/src/runtime/shared/browser-launch.mjs +15 -0
- package/src/runtime/shared/buffered-appender.mjs +18 -0
- package/src/runtime/shared/config.mjs +78 -18
- package/src/runtime/shared/err-text.mjs +48 -4
- package/src/runtime/shared/file-lock.mjs +6 -5
- package/src/runtime/shared/file-permissions.d.mts +6 -1
- package/src/runtime/shared/file-permissions.mjs +54 -6
- package/src/runtime/shared/llm/anthropic-betas.mjs +1 -2
- package/src/runtime/shared/llm/anthropic-effort.mjs +6 -0
- package/src/runtime/shared/llm/provider-model-identities.mjs +1 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +5 -2
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +3 -0
- package/src/runtime/shared/loopback-listener.mjs +9 -0
- package/src/runtime/shared/model-route-chain.d.mts +8 -0
- package/src/runtime/shared/model-route-chain.mjs +48 -0
- package/src/runtime/shared/model-route-fallback.mjs +22 -0
- package/src/runtime/shared/pid-liveness.mjs +12 -0
- package/src/runtime/shared/provider-api-key.mjs +8 -0
- package/src/runtime/shared/provider-timeout-phase.mjs +17 -0
- package/src/runtime/shared/quiet-progress.d.mts +35 -0
- package/src/runtime/shared/quiet-progress.mjs +101 -0
- package/src/runtime/shared/quota-resume-store.mjs +32 -1
- package/src/runtime/shared/read-row-numbers.mjs +44 -0
- package/src/runtime/shared/remote-intent.mjs +2 -42
- package/src/runtime/shared/review-diff.mjs +52 -0
- package/src/runtime/shared/session-sidebar-host.d.mts +4 -0
- package/src/runtime/shared/session-sidebar-host.mjs +38 -0
- package/src/runtime/shared/slow-span.mjs +121 -0
- package/src/runtime/shared/statusline/statusline-segments.mjs +52 -6
- package/src/runtime/shared/tool-card-model/card-header.mjs +7 -1
- package/src/runtime/shared/tool-card-model/generic-detail.mjs +39 -5
- package/src/runtime/shared/tool-card-model.mjs +5 -2
- package/src/runtime/shared/tool-output-budget.mjs +2 -0
- package/src/runtime/shared/tool-output-limit.mjs +4 -0
- package/src/runtime/shared/tool-primitives.mjs +13 -0
- package/src/runtime/shared/tool-result-summary.mjs +22 -1
- package/src/runtime/shared/tool-status.mjs +3 -2
- package/src/runtime/shared/tool-surface.mjs +20 -6
- package/src/runtime/shared/tool-work-units.mjs +54 -11
- package/src/runtime/shared/transcript-metadata.mjs +49 -1
- package/src/runtime/shared/transcript-turn-keys.mjs +33 -0
- package/src/runtime/shared/transcript-writer/purge.mjs +74 -0
- package/src/runtime/shared/transcript-writer/transcript-file.mjs +10 -1
- package/src/runtime/shared/transcript-writer.mjs +24 -6
- package/src/runtime/shared/turn-changes.mjs +269 -100
- package/src/runtime/shared/turn-review-reply.mjs +8 -39
- package/src/runtime/shared/turn-snapshot-store.mjs +19 -108
- package/src/runtime/shared/turn-snapshot.mjs +865 -683
- package/src/runtime/shared/turn-worktree-snapshot.mjs +183 -255
- package/src/runtime/shared/user-data-guard.mjs +262 -49
- package/src/runtime/shared/worktrees/activity-gate.mjs +175 -0
- package/src/runtime/shared/worktrees/branch-management.mjs +179 -0
- package/src/runtime/shared/worktrees/carry.mjs +533 -0
- package/src/runtime/shared/worktrees/contract.mjs +60 -0
- package/src/runtime/shared/worktrees/dependencies.mjs +456 -0
- package/src/runtime/shared/worktrees/file-recovery.mjs +84 -0
- package/src/runtime/shared/worktrees/git-head.mjs +214 -0
- package/src/runtime/shared/worktrees/git.mjs +8 -3
- package/src/runtime/shared/worktrees/include.mjs +125 -7
- package/src/runtime/shared/worktrees/lock.mjs +1 -1
- package/src/runtime/shared/worktrees/maintenance.mjs +20 -2
- package/src/runtime/shared/worktrees/manager.mjs +525 -31
- package/src/runtime/shared/worktrees/merge.mjs +31 -21
- package/src/runtime/shared/worktrees/owner.mjs +2 -1
- package/src/runtime/shared/worktrees/paths.d.mts +6 -0
- package/src/runtime/shared/worktrees/preparation-report.mjs +79 -0
- package/src/runtime/shared/worktrees/setup-commands.mjs +232 -0
- package/src/runtime/shared/worktrees/workspace-visibility.mjs +17 -0
- package/src/runtime/terminal-bridge/client.mjs +57 -20
- package/src/runtime/terminal-bridge/tool-defs.mjs +13 -6
- package/src/runtime/tidy/apply.mjs +47 -2
- package/src/runtime/tidy/run-engines.mjs +11 -5
- package/src/session-runtime/agent-tool-routing.mjs +19 -13
- package/src/session-runtime/boot/apis.mjs +20 -6
- package/src/session-runtime/boot/config.mjs +2 -0
- package/src/session-runtime/boot/facade.mjs +4 -0
- package/src/session-runtime/boot/infrastructure.mjs +6 -1
- package/src/session-runtime/boot/session.mjs +3 -3
- package/src/session-runtime/boot/tools.mjs +7 -1
- package/src/session-runtime/conversation-import/service.mjs +1 -1
- package/src/session-runtime/cwd-plugins/cwd-apply.mjs +12 -5
- package/src/session-runtime/goal-facade-api.mjs +2 -2
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +91 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -1
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +15 -5
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +137 -26
- package/src/session-runtime/internal-tool-executor.mjs +8 -2
- package/src/session-runtime/lifecycle/cold-heir.mjs +187 -0
- package/src/session-runtime/lifecycle/inheritance.mjs +71 -27
- package/src/session-runtime/lifecycle/session-catalog.mjs +25 -18
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +6 -0
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +36 -48
- package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
- package/src/session-runtime/lifecycle/shared.mjs +5 -6
- package/src/session-runtime/lifecycle/teardown/session-close.mjs +6 -5
- package/src/session-runtime/lifecycle/teardown.mjs +70 -14
- package/src/session-runtime/lifecycle-api.mjs +1 -0
- package/src/session-runtime/mcp-glue/connect.mjs +17 -5
- package/src/session-runtime/media-api.mjs +8 -0
- package/src/session-runtime/model-route/route-ownership.mjs +60 -0
- package/src/session-runtime/model-route/route-persist.mjs +3 -2
- package/src/session-runtime/model-route/set-route.mjs +116 -36
- package/src/session-runtime/model-route/web-search-route.mjs +7 -2
- package/src/session-runtime/model-route-api.mjs +4 -2
- package/src/session-runtime/native-web-search/routes.mjs +37 -24
- package/src/session-runtime/native-web-search-usage.mjs +51 -0
- package/src/session-runtime/native-web-search.mjs +19 -9
- package/src/session-runtime/new-session-config.mjs +4 -2
- package/src/session-runtime/provider-auth/login.mjs +4 -0
- package/src/session-runtime/provider-auth/setup.mjs +4 -0
- package/src/session-runtime/provider-models/catalog-load.mjs +9 -0
- package/src/session-runtime/provider-models/web-search-catalog.mjs +23 -3
- package/src/session-runtime/provider-models.mjs +1 -0
- package/src/session-runtime/provider-usage.mjs +4 -0
- package/src/session-runtime/resource-scope-decorate.mjs +10 -3
- package/src/session-runtime/route-resolution.mjs +3 -1
- package/src/session-runtime/runtime-core.mjs +4 -0
- package/src/session-runtime/runtime-facade.mjs +6 -0
- package/src/session-runtime/runtime-review-api.mjs +8 -2
- package/src/session-runtime/services/agent-task-status.mjs +2 -0
- package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +0 -3
- package/src/session-runtime/services/agent-tool/close-flow.mjs +6 -7
- package/src/session-runtime/services/agent-tool/execute-send.mjs +2 -2
- package/src/session-runtime/services/agent-tool/execute-spawn.mjs +36 -3
- package/src/session-runtime/services/agent-tool/execute.mjs +9 -1
- package/src/session-runtime/services/agent-tool/helpers.mjs +30 -7
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +81 -20
- package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +7 -2
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +6 -3
- package/src/session-runtime/services/agent-tool/lead-worker-index/forgotten-leads.mjs +29 -0
- package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +1 -1
- package/src/session-runtime/services/agent-tool/lead-worker-index/lead-rows.mjs +3 -4
- package/src/session-runtime/services/agent-tool/lead-worker-index/reap-timers.mjs +9 -3
- package/src/session-runtime/services/agent-tool/lead-worker-index/row-settlement.mjs +7 -18
- package/src/session-runtime/services/agent-tool/lead-worker-index.mjs +82 -13
- package/src/session-runtime/services/agent-tool/model-select.mjs +82 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +24 -6
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +3 -1
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +19 -5
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +5 -4
- package/src/session-runtime/services/agent-tool/spawn-flow.mjs +2 -1
- package/src/session-runtime/services/agent-tool/spawn-preset.mjs +3 -0
- package/src/session-runtime/services/agent-tool/tag-registry/tag-lookup.mjs +1 -3
- package/src/session-runtime/services/agent-tool/tag-registry/tag-refresh.mjs +1 -3
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +18 -10
- package/src/session-runtime/services/agent-tool/terminal-reaper/scan-admission.mjs +8 -41
- package/src/session-runtime/services/agent-tool/terminal-reaper/stale-rows.mjs +3 -3
- package/src/session-runtime/services/agent-tool/terminal-reaper.mjs +6 -23
- package/src/session-runtime/services/agent-tool/terminal-trace.mjs +0 -1
- package/src/session-runtime/services/agent-tool/tool-def.mjs +7 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +32 -20
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +5 -2
- package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +10 -1
- package/src/session-runtime/services/agent-tool/worker-index.mjs +74 -15
- package/src/session-runtime/services/agent-tool.mjs +7 -0
- package/src/session-runtime/services/agent-watchdog-registry.mjs +2 -0
- package/src/session-runtime/services/channel-admin.mjs +19 -3
- package/src/session-runtime/services/memory-runtime-proxy/calls.mjs +4 -0
- package/src/session-runtime/services/memory-runtime-proxy.mjs +1 -0
- package/src/session-runtime/services/provider-admin.mjs +158 -15
- package/src/session-runtime/session-create/session-options.mjs +7 -5
- package/src/session-runtime/session-create/session-start-hook.mjs +2 -1
- package/src/session-runtime/session-transcript-purge.mjs +32 -0
- package/src/session-runtime/session-transcript.mjs +4 -5
- package/src/session-runtime/session-turn-api.mjs +17 -14
- package/src/session-runtime/settings-builtin-tools-api.mjs +18 -6
- package/src/session-runtime/setup-tool/executor.mjs +57 -9
- package/src/session-runtime/setup-tool/extended-actions.mjs +86 -6
- package/src/session-runtime/setup-tool/settings-contract.mjs +18 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +25 -4
- package/src/session-runtime/skills-api.mjs +3 -5
- package/src/session-runtime/tool-policy-refresh.mjs +83 -32
- package/src/session-runtime/tool-surface.mjs +5 -1
- package/src/session-runtime/turn/agent-ops.mjs +49 -2
- package/src/session-runtime/turn/compaction-gate.mjs +25 -0
- package/src/session-runtime/turn/session-ops.mjs +7 -5
- package/src/session-runtime/turn/side-question-ops.mjs +19 -0
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +7 -1
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +12 -3
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +18 -2
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +26 -45
- package/src/session-runtime/usage-stats-api.mjs +46 -11
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +16 -1
- package/src/session-runtime/workspace/admission-gate.mjs +44 -15
- package/src/session-runtime/workspace/project-branches.mjs +35 -41
- package/src/session-runtime/workspace/transition-steps.mjs +215 -116
- package/src/session-runtime/workspace/transitions.mjs +428 -73
- package/src/standalone/channel-transport.mjs +3 -4
- package/src/standalone/daemon-agent-control.mjs +9 -1
- package/src/standalone/daemon-desktop-runtime.mjs +32 -1
- package/src/standalone/daemon-local-session-bridge.mjs +14 -1
- package/src/standalone/daemon-owner.mjs +17 -4
- package/src/standalone/daemon-pg-stop.mjs +49 -0
- package/src/standalone/daemon-session-control.mjs +88 -0
- package/src/standalone/daemon-stop-budget.d.mts +2 -0
- package/src/standalone/daemon-stop-budget.mjs +18 -0
- package/src/standalone/daemon-stored-session-views.mjs +25 -3
- package/src/standalone/daemon-telemetry.mjs +19 -0
- package/src/standalone/daemon.mjs +63 -1
- package/src/standalone/desktop-service-registry.mjs +5 -0
- package/src/standalone/local-session-runtime.mjs +80 -30
- package/src/standalone/session-client.mjs +42 -0
- package/src/standalone/session-protocol.mjs +14 -0
- package/src/standalone/session-proxy/projection.mjs +41 -4
- package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +15 -1
- package/src/standalone/session-runtime-inline-host.mjs +3 -0
- package/src/standalone/session-service/agent-tree/agent-cancel.mjs +91 -49
- package/src/standalone/session-service/agent-tree/agent-child.mjs +19 -1
- package/src/standalone/session-service/agent-tree/agent-registry.mjs +25 -0
- package/src/standalone/session-service/agent-tree/agent-turns.mjs +9 -1
- package/src/standalone/session-service/agent-tree.mjs +28 -2
- package/src/standalone/session-service/entries/session-loads.mjs +16 -5
- package/src/standalone/session-service/entries.mjs +1 -0
- package/src/standalone/session-service/projection/transcript-window.mjs +39 -0
- package/src/standalone/session-service/quota-resume.mjs +28 -13
- package/src/standalone/session-service/session-calls/session-action.mjs +18 -3
- package/src/standalone/session-service/session-calls/session-turns.mjs +17 -6
- package/src/standalone/session-service/session-calls/session-views.mjs +6 -0
- package/src/standalone/session-service-api.mjs +6 -1
- package/src/standalone/session-state-patch.d.mts +2 -1
- package/src/standalone/session-state-patch.mjs +41 -1
- package/src/standalone/session-tool-output.mjs +82 -0
- package/src/tui/App.jsx +25 -0
- package/src/tui/app/app-view/floating-panel.jsx +26 -1
- package/src/tui/app/app-view.jsx +2 -1
- package/src/tui/app/btw-controller.mjs +118 -0
- package/src/tui/app/create-app-pickers.mjs +2 -0
- package/src/tui/app/provider-setup/provider-items.mjs +8 -0
- package/src/tui/app/provider-setup-picker.mjs +15 -3
- package/src/tui/app/shell-layout/row-budgets.mjs +11 -1
- package/src/tui/app/shell-layout/surfaces.mjs +3 -1
- package/src/tui/app/slash-commands.mjs +19 -3
- package/src/tui/app/slash-dispatch/session-commands.mjs +68 -6
- package/src/tui/app/use-global-key-input/approval-shortcut.mjs +12 -0
- package/src/tui/app/use-global-key-input.mjs +5 -12
- package/src/tui/app/use-prompt-handlers.mjs +11 -0
- package/src/tui/components/BtwPanel.jsx +53 -0
- package/src/tui/components/QuestionPanel.jsx +275 -0
- package/src/tui/components/Spinner.jsx +4 -0
- package/src/tui/components/SpinnerByline.jsx +21 -2
- package/src/tui/components/question-panel-model.mjs +156 -0
- package/src/tui/components/status-line/local-line.mjs +10 -2
- package/src/tui/dist/index.mjs +2897 -1722
- package/src/tui/session/active-tool-summary.mjs +1 -1
- package/src/tui/session/context-state.mjs +4 -5
- package/src/tui/session/goal-continuation/continuation-queue.mjs +2 -3
- package/src/tui/session/goal-continuation/deadline-delivery.mjs +4 -2
- package/src/tui/session/goal-continuation/session-boundary.mjs +21 -0
- package/src/tui/session/quota-resume.mjs +140 -61
- package/src/tui/session/session-api/commands.mjs +14 -10
- package/src/tui/session/session-api/controls.mjs +14 -2
- package/src/tui/session/session-api/integrations.mjs +9 -2
- package/src/tui/session/session-api/lifecycle/dispose.mjs +3 -9
- package/src/tui/session/session-api/lifecycle/resume.mjs +2 -7
- package/src/tui/session/session-api/lifecycle.mjs +14 -11
- package/src/tui/session/session-api/media.mjs +2 -0
- package/src/tui/session/session-api/routes.mjs +81 -57
- package/src/tui/session/session-api/settings.mjs +9 -3
- package/src/tui/session/session-api/worktree.mjs +3 -2
- package/src/tui/session/session-api.mjs +1 -0
- package/src/tui/session/session-flow/auto-clear.mjs +1 -3
- package/src/tui/session/session-flow/drain.mjs +6 -4
- package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -0
- package/src/tui/session/session-flow/queue/take-entries.mjs +2 -1
- package/src/tui/session/session-flow/queue.mjs +1 -1
- package/src/tui/session/tool-approval.mjs +20 -8
- package/src/tui/session/transcript-spill.mjs +14 -7
- package/src/tui/session/transcript-store/streaming-tail.mjs +1 -1
- package/src/tui/session/tui-steering-persist.mjs +3 -5
- package/src/tui/session/turn-quiet.mjs +53 -0
- package/src/tui/session/turn-stream.mjs +179 -32
- package/src/tui/session/turn.mjs +50 -36
- package/src/tui/session/worktree-setup-notice.mjs +38 -0
- package/src/tui/spinner-meta.mjs +10 -0
- package/src/tui/spinner-verbs.mjs +3 -0
- package/src/ui/statusline.mjs +13 -3
- package/src/workflows/default/WORKFLOW.md +3 -1
- package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +0 -1
- package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +0 -346
- package/src/runtime/agent/orchestrator/session/manager/session-owner-liveness.mjs +0 -117
- package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +0 -246
- package/src/session-runtime/services/agent-tool/terminal-reaper/reap-timers.mjs +0 -142
- package/src/session-runtime/turn/share-ops.mjs +0 -77
- package/src/tui/session/cross-surface-share.mjs +0 -406
- package/src/tui/session/live-share/delta.mjs +0 -153
- package/src/tui/session/live-share/mirror.mjs +0 -106
- package/src/tui/session/live-share/owner.mjs +0 -254
- package/src/tui/session/live-share/retry.mjs +0 -54
- package/src/tui/session/live-share/viewer/frame-router.mjs +0 -32
- package/src/tui/session/live-share/viewer/pipe-client.mjs +0 -108
- package/src/tui/session/live-share/viewer/submit-acks.mjs +0 -65
- package/src/tui/session/live-share/viewer/sync-waiters.mjs +0 -53
- package/src/tui/session/live-share/viewer.mjs +0 -99
- package/src/tui/session/live-share/wire.mjs +0 -44
- package/src/tui/session/live-share.mjs +0 -154
- package/src/tui/session/shared-dir-watch.mjs +0 -69
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
export function readAttachmentBuffer(value: string | { attachmentRef?: string }): Buffer;
|
|
2
2
|
export function isPermanentAttachmentError(error: unknown): boolean;
|
|
3
3
|
export function isAttachmentReference(value: unknown): boolean;
|
|
4
|
+
export interface MessageAttachment {
|
|
5
|
+
id: string;
|
|
6
|
+
attachmentRef: string;
|
|
7
|
+
kind: 'image' | 'file' | 'text';
|
|
8
|
+
name: string;
|
|
9
|
+
mimeType: string;
|
|
10
|
+
size: number;
|
|
11
|
+
}
|
|
12
|
+
export function attachmentsForIntake(prompt: unknown, options?: unknown): MessageAttachment[];
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Content-addressed prompt attachment store.
|
|
3
3
|
*
|
|
4
4
|
* Renderer/TUI inputs carry the bytes exactly once to the daemon intake. From
|
|
5
|
-
* that boundary onward queues, checkpoints, session JSON
|
|
6
|
-
*
|
|
5
|
+
* that boundary onward queues, checkpoints, session JSON and desktop
|
|
6
|
+
* snapshots carry only a sha256 reference plus byte-free metadata.
|
|
7
7
|
* Provider lowering resolves the reference at the last possible boundary.
|
|
8
8
|
*/
|
|
9
9
|
import { createHash, randomBytes } from 'node:crypto';
|
|
@@ -214,11 +214,13 @@ export function storeInlineDocumentPart(part) {
|
|
|
214
214
|
if (source?.type !== 'base64' || typeof source.data !== 'string') return null;
|
|
215
215
|
data = source.data;
|
|
216
216
|
const { source: _source, type: _type, mimeType: _mimeType, mediaType: _mediaType, ...rest } = part;
|
|
217
|
-
const mimeType =
|
|
218
|
-
.
|
|
219
|
-
|
|
217
|
+
const mimeType =
|
|
218
|
+
String(source.media_type || source.mediaType || part.mimeType || part.mediaType || 'application/pdf')
|
|
219
|
+
.trim()
|
|
220
|
+
.toLowerCase() || 'application/pdf';
|
|
220
221
|
metadata = { ...rest, type: 'file', mimeType };
|
|
221
|
-
const filename =
|
|
222
|
+
const filename =
|
|
223
|
+
(typeof part.title === 'string' && part.title) || (typeof part.filename === 'string' && part.filename) || '';
|
|
222
224
|
if (filename) metadata.filename = filename;
|
|
223
225
|
} else if (part.type === 'file' && typeof part.data === 'string') {
|
|
224
226
|
const { data: inline, ...rest } = part;
|
|
@@ -282,9 +284,7 @@ export function isMissingAttachmentError(error) {
|
|
|
282
284
|
// never become readable. EBUSY/EPERM/EACCES/EMFILE and friends are transient:
|
|
283
285
|
// callers must let them propagate rather than rewrite history around them.
|
|
284
286
|
export function isPermanentAttachmentError(error) {
|
|
285
|
-
return (
|
|
286
|
-
isMissingAttachmentError(error) || error?.code === ATTACHMENT_INVALID || error?.code === ATTACHMENT_INTEGRITY
|
|
287
|
-
);
|
|
287
|
+
return isMissingAttachmentError(error) || error?.code === ATTACHMENT_INVALID || error?.code === ATTACHMENT_INTEGRITY;
|
|
288
288
|
}
|
|
289
289
|
|
|
290
290
|
export function readAttachmentBase64(value) {
|
|
@@ -534,6 +534,77 @@ export function materializePromptSubmission(prompt, options = {}) {
|
|
|
534
534
|
};
|
|
535
535
|
}
|
|
536
536
|
|
|
537
|
+
const MAX_MESSAGE_ATTACHMENTS = 64;
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* The user-attachment records of one materialized submission, for the message
|
|
541
|
+
* metadata (`meta.transcript.attachments`): every image, file and
|
|
542
|
+
* pasted/attached text that lives in the store, by its content hash. The id IS
|
|
543
|
+
* the `attachmentRef`; the record repeats it under that key so the store's
|
|
544
|
+
* mark-and-sweep census (which scans persisted sessions for `"attachmentRef"`)
|
|
545
|
+
* keeps the blob for as long as the message exists, even after compaction
|
|
546
|
+
* dropped the content part. Plain long prompt text (no `textKind`) is not an
|
|
547
|
+
* attachment.
|
|
548
|
+
*/
|
|
549
|
+
export function attachmentsForIntake(prompt, options = {}) {
|
|
550
|
+
const found = new Map();
|
|
551
|
+
const add = (ref, info) => {
|
|
552
|
+
if (!ATTACHMENT_REF_RE.test(String(ref || '')) || found.has(ref) || found.size >= MAX_MESSAGE_ATTACHMENTS) return;
|
|
553
|
+
found.set(ref, info);
|
|
554
|
+
};
|
|
555
|
+
const named = (raw, fallback) => String(raw?.filename || raw?.name || fallback).slice(0, 200);
|
|
556
|
+
const pastedImages = Object.values(options?.pastedImages || {}).filter((raw) => raw && typeof raw === 'object');
|
|
557
|
+
const pastedTexts = Object.values(options?.pastedTexts || {}).filter((raw) => raw && typeof raw === 'object');
|
|
558
|
+
const parts = Array.isArray(prompt) ? prompt : [];
|
|
559
|
+
for (const part of parts) {
|
|
560
|
+
if (!isAttachmentReference(part)) continue;
|
|
561
|
+
const mimeType = String(part.mimeType || part.mediaType || '').slice(0, 100);
|
|
562
|
+
if (part.type === 'image') {
|
|
563
|
+
const meta = pastedImages.find((raw) => raw.attachmentRef === part.attachmentRef);
|
|
564
|
+
add(part.attachmentRef, {
|
|
565
|
+
kind: 'image',
|
|
566
|
+
name: named(meta || part, 'image'),
|
|
567
|
+
mimeType: mimeType || String(meta?.mediaType || 'image/png'),
|
|
568
|
+
size: attachmentBlobSize(part, part.sizeBytes),
|
|
569
|
+
});
|
|
570
|
+
} else if (part.type === 'file') {
|
|
571
|
+
add(part.attachmentRef, {
|
|
572
|
+
kind: 'file',
|
|
573
|
+
name: named(part, 'attachment'),
|
|
574
|
+
mimeType: mimeType || 'application/octet-stream',
|
|
575
|
+
size: attachmentBlobSize(part, part.sizeBytes),
|
|
576
|
+
});
|
|
577
|
+
} else if (part.type === 'text' && (part.textKind === 'paste' || part.textKind === 'file')) {
|
|
578
|
+
add(part.attachmentRef, {
|
|
579
|
+
kind: 'text',
|
|
580
|
+
name: named(part, part.textKind === 'paste' ? 'pasted-text.txt' : 'attachment.txt'),
|
|
581
|
+
mimeType: mimeType || 'text/plain',
|
|
582
|
+
size: attachmentBlobSize(part, part.sizeBytes),
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
// Images the prompt carries only by side table (no matching content part).
|
|
587
|
+
for (const raw of pastedImages) {
|
|
588
|
+
if (!isAttachmentReference(raw)) continue;
|
|
589
|
+
add(raw.attachmentRef, {
|
|
590
|
+
kind: 'image',
|
|
591
|
+
name: named(raw, 'image'),
|
|
592
|
+
mimeType: String(raw.mediaType || 'image/png').slice(0, 100),
|
|
593
|
+
size: attachmentBlobSize(raw, raw.sizeBytes),
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
for (const raw of pastedTexts) {
|
|
597
|
+
if (!isAttachmentReference(raw)) continue;
|
|
598
|
+
add(raw.attachmentRef, {
|
|
599
|
+
kind: 'text',
|
|
600
|
+
name: named(raw, raw.source === 'file' ? 'attachment.txt' : 'pasted-text.txt'),
|
|
601
|
+
mimeType: String(raw.mimeType || 'text/plain').slice(0, 100),
|
|
602
|
+
size: attachmentBlobSize(raw, raw.sizeBytes),
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
return [...found].map(([ref, info]) => ({ id: ref, attachmentRef: ref, ...info }));
|
|
606
|
+
}
|
|
607
|
+
|
|
537
608
|
/**
|
|
538
609
|
* Whether a provider takes a PDF as a native document block. Decided by the
|
|
539
610
|
* provider's wire protocol: each adapter class declares `nativePdf`; a provider
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export const BROWSER_ACTIONS: readonly string[];
|
|
2
2
|
export const BROWSER_DEVTOOLS_ACTIONS: readonly string[];
|
|
3
3
|
export const BROWSER_PAGE_ACTIONS: readonly string[];
|
|
4
|
-
export const BROWSER_TOOL_NAMES: readonly string[];
|
|
5
4
|
export function browserToolForAction(action: string): string;
|
|
6
5
|
export const BROWSER_OBSERVATION_ACTIONS: readonly string[];
|
|
7
6
|
export const BROWSER_POSTCONDITION_ACTIONS: readonly string[];
|
|
@@ -57,8 +57,6 @@ export const BROWSER_PAGE_ACTIONS = Object.freeze(
|
|
|
57
57
|
|
|
58
58
|
const BROWSER_TOOL_NAME = 'browser';
|
|
59
59
|
const BROWSER_DEVTOOLS_TOOL_NAME = 'browser_devtools';
|
|
60
|
-
/** Both tools drive the same bridge, pages, and sign-in. */
|
|
61
|
-
export const BROWSER_TOOL_NAMES = Object.freeze([BROWSER_TOOL_NAME, BROWSER_DEVTOOLS_TOOL_NAME]);
|
|
62
60
|
|
|
63
61
|
export function browserToolForAction(action) {
|
|
64
62
|
return BROWSER_DEVTOOLS_ACTIONS.includes(action) ? BROWSER_DEVTOOLS_TOOL_NAME : BROWSER_TOOL_NAME;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { splitBridgeToolArgs } from '../shared/bridge-tool-args.mjs';
|
|
2
2
|
import { hasOwn } from '../shared/object.mjs';
|
|
3
3
|
import { schemaValueError } from '../shared/schema-value-error.mjs';
|
|
4
|
+
import { advertiseActionInputUnion } from '../agent/orchestrator/providers/lib/action-input-contract.mjs';
|
|
4
5
|
import {
|
|
5
6
|
COMPUTER_CORE_ACTION_SCHEMA,
|
|
6
7
|
COMPUTER_DEFAULT_DELIVERY,
|
|
@@ -149,7 +150,213 @@ const captureProperties = {
|
|
|
149
150
|
},
|
|
150
151
|
};
|
|
151
152
|
|
|
152
|
-
|
|
153
|
+
// The strict per-action contract: which `input` each action accepts. The host
|
|
154
|
+
// validates every call against it (validateComputerToolArgs), and the model-facing
|
|
155
|
+
// schema below derives its `input` from it. It is not part of the advertised
|
|
156
|
+
// root: provider tool schemas must be an object root without anyOf/oneOf/allOf.
|
|
157
|
+
export const COMPUTER_ACTION_CONTRACTS = [
|
|
158
|
+
branch(
|
|
159
|
+
'wait_for_user',
|
|
160
|
+
input({
|
|
161
|
+
timeout_ms: {
|
|
162
|
+
type: 'integer',
|
|
163
|
+
minimum: 0,
|
|
164
|
+
maximum: 120000,
|
|
165
|
+
description: 'Wait for manual or host-configured idle resume; default 60000.',
|
|
166
|
+
},
|
|
167
|
+
}),
|
|
168
|
+
false
|
|
169
|
+
),
|
|
170
|
+
branch(
|
|
171
|
+
'list',
|
|
172
|
+
input(
|
|
173
|
+
{
|
|
174
|
+
kind: {
|
|
175
|
+
type: 'string',
|
|
176
|
+
enum: ['windows', 'apps', 'history'],
|
|
177
|
+
description:
|
|
178
|
+
"history returns this session's own executed commands with their verdicts, for reviewing what a run already did.",
|
|
179
|
+
},
|
|
180
|
+
query: {
|
|
181
|
+
type: 'string',
|
|
182
|
+
minLength: 1,
|
|
183
|
+
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
184
|
+
description:
|
|
185
|
+
'With kind="apps", also lists installed apps whose name or id matches, including apps that are not running.',
|
|
186
|
+
},
|
|
187
|
+
limit: {
|
|
188
|
+
type: 'integer',
|
|
189
|
+
minimum: 1,
|
|
190
|
+
maximum: 60,
|
|
191
|
+
description: 'kind="history" only: how many of the most recent records to return; default 60.',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
['kind']
|
|
195
|
+
)
|
|
196
|
+
),
|
|
197
|
+
branch(
|
|
198
|
+
'diagnose',
|
|
199
|
+
input({
|
|
200
|
+
...windowTarget,
|
|
201
|
+
ocr_language: {
|
|
202
|
+
...ocrLanguage,
|
|
203
|
+
description: 'Optional OS OCR language tag to verify, e.g. ko or en-US.',
|
|
204
|
+
},
|
|
205
|
+
}),
|
|
206
|
+
false
|
|
207
|
+
),
|
|
208
|
+
branch('capture', input(captureProperties), false),
|
|
209
|
+
branch(
|
|
210
|
+
'act',
|
|
211
|
+
input(
|
|
212
|
+
{
|
|
213
|
+
...windowTarget,
|
|
214
|
+
...appTarget,
|
|
215
|
+
frame_id: {
|
|
216
|
+
type: 'string',
|
|
217
|
+
minLength: 1,
|
|
218
|
+
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
219
|
+
description: 'Latest unexpired frame id shared by coordinate actions in this act call.',
|
|
220
|
+
},
|
|
221
|
+
actions: {
|
|
222
|
+
type: 'array',
|
|
223
|
+
items: COMPUTER_CORE_ACTION_SCHEMA,
|
|
224
|
+
minItems: 1,
|
|
225
|
+
maxItems: 6,
|
|
226
|
+
description:
|
|
227
|
+
'First: an input action. Then type/key/wait reusing focus, or click/double_click/triple_click/scroll/set_value/type/key on a ref from the same observation (no marks or coordinates). Waits total ≤10s; transition/failure or a changed, disabled, or off-screen ref stops the rest.',
|
|
228
|
+
},
|
|
229
|
+
observe: {
|
|
230
|
+
type: 'string',
|
|
231
|
+
enum: ['state', 'ax'],
|
|
232
|
+
description:
|
|
233
|
+
'Returned observation. Default: ax when the first action targets a ref (full state if the tree is unusable), otherwise state. state includes the frame for coordinates or visual checks; ax skips the screenshot.',
|
|
234
|
+
},
|
|
235
|
+
...delivery,
|
|
236
|
+
},
|
|
237
|
+
['actions']
|
|
238
|
+
)
|
|
239
|
+
),
|
|
240
|
+
branch(
|
|
241
|
+
'window',
|
|
242
|
+
input(
|
|
243
|
+
{
|
|
244
|
+
...windowTarget,
|
|
245
|
+
...appTarget,
|
|
246
|
+
operation: {
|
|
247
|
+
type: 'string',
|
|
248
|
+
enum: ['focus', 'move', 'minimize', 'maximize', 'restore', 'close', 'terminate'],
|
|
249
|
+
},
|
|
250
|
+
confirm: {
|
|
251
|
+
type: 'string',
|
|
252
|
+
enum: ['terminate'],
|
|
253
|
+
description:
|
|
254
|
+
'terminate only, and required for it: kills the process behind the window, losing unsaved work. Ask the user first.',
|
|
255
|
+
},
|
|
256
|
+
x: {
|
|
257
|
+
type: 'integer',
|
|
258
|
+
description: 'move only: new left edge; y the top; width/height an optional new size.',
|
|
259
|
+
},
|
|
260
|
+
y: { type: 'integer' },
|
|
261
|
+
width: { type: 'integer', minimum: 1 },
|
|
262
|
+
height: { type: 'integer', minimum: 1 },
|
|
263
|
+
},
|
|
264
|
+
['operation']
|
|
265
|
+
)
|
|
266
|
+
),
|
|
267
|
+
branch(
|
|
268
|
+
'menu',
|
|
269
|
+
input(
|
|
270
|
+
{
|
|
271
|
+
...windowTarget,
|
|
272
|
+
...appTarget,
|
|
273
|
+
path: {
|
|
274
|
+
type: 'array',
|
|
275
|
+
items: { type: 'string', minLength: 1, maxLength: 512 },
|
|
276
|
+
minItems: 1,
|
|
277
|
+
maxItems: 8,
|
|
278
|
+
description:
|
|
279
|
+
'Exact labels from the bar down, e.g. ["File","Save As"]. Missing, ambiguous, or disabled entries fail closed.',
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
['path']
|
|
283
|
+
)
|
|
284
|
+
),
|
|
285
|
+
branch(
|
|
286
|
+
'verify',
|
|
287
|
+
input(
|
|
288
|
+
{
|
|
289
|
+
...windowTarget,
|
|
290
|
+
...appTarget,
|
|
291
|
+
expect: {
|
|
292
|
+
type: 'array',
|
|
293
|
+
minItems: 1,
|
|
294
|
+
maxItems: 8,
|
|
295
|
+
description: 'AND-combined predicates. Reads state only: no pixels, and prior refs stay valid.',
|
|
296
|
+
items: {
|
|
297
|
+
type: 'object',
|
|
298
|
+
properties: {
|
|
299
|
+
present: {
|
|
300
|
+
type: 'string',
|
|
301
|
+
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
302
|
+
description: 'Text an element name or value must contain.',
|
|
303
|
+
},
|
|
304
|
+
absent: { type: 'string', maxLength: MAX_TARGET_TOKEN_LENGTH },
|
|
305
|
+
title_contains: { type: 'string', maxLength: MAX_TARGET_TOKEN_LENGTH },
|
|
306
|
+
window_exists: { type: 'boolean' },
|
|
307
|
+
},
|
|
308
|
+
additionalProperties: false,
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
timeout_ms: { type: 'integer', minimum: 0, maximum: 30000 },
|
|
312
|
+
stable_samples: {
|
|
313
|
+
type: 'integer',
|
|
314
|
+
minimum: 1,
|
|
315
|
+
maximum: 5,
|
|
316
|
+
description: 'Consecutive satisfied samples required. Default 2.',
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
['expect']
|
|
320
|
+
)
|
|
321
|
+
),
|
|
322
|
+
branch(
|
|
323
|
+
'clipboard',
|
|
324
|
+
input(
|
|
325
|
+
{
|
|
326
|
+
operation: { type: 'string', enum: ['read', 'write'] },
|
|
327
|
+
text: {
|
|
328
|
+
type: 'string',
|
|
329
|
+
maxLength: MAX_CLIPBOARD_TEXT_LENGTH,
|
|
330
|
+
description: 'Required for operation="write".',
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
['operation']
|
|
334
|
+
)
|
|
335
|
+
),
|
|
336
|
+
branch(
|
|
337
|
+
'launch',
|
|
338
|
+
input(
|
|
339
|
+
{
|
|
340
|
+
app: {
|
|
341
|
+
type: 'string',
|
|
342
|
+
minLength: 1,
|
|
343
|
+
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
344
|
+
description: 'Executable name, exact path, file, or URL.',
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
['app']
|
|
348
|
+
)
|
|
349
|
+
),
|
|
350
|
+
];
|
|
351
|
+
|
|
352
|
+
// A JSON Schema 2020-12 object root with no root combinator (Anthropic
|
|
353
|
+
// input_schema rule) whose `input` offers each action's own input as an anyOf
|
|
354
|
+
// alternative titled with that action. The tool advertises its flat projection
|
|
355
|
+
// (flattenActionInputUnion); only provider paths verified to accept the nested
|
|
356
|
+
// alternatives (first-party Anthropic, Claude via Antigravity) send this form
|
|
357
|
+
// (actionInputUnionFor). validateComputerToolArgs enforces the strict
|
|
358
|
+
// per-action contract.
|
|
359
|
+
const COMPUTER_ACTION_INPUT_UNION = {
|
|
153
360
|
type: 'object',
|
|
154
361
|
description:
|
|
155
362
|
'One compact Computer Use operation. Use act.actions to execute 1-6 simple actions and receive one fresh observation.',
|
|
@@ -163,208 +370,24 @@ export const COMPUTER_INPUT_SCHEMA = {
|
|
|
163
370
|
input: {
|
|
164
371
|
type: 'object',
|
|
165
372
|
description: 'Fields for the selected action.',
|
|
373
|
+
anyOf: COMPUTER_ACTION_CONTRACTS.map(({ properties }) => {
|
|
374
|
+
const [action] = properties.action.enum;
|
|
375
|
+
return {
|
|
376
|
+
title: action,
|
|
377
|
+
description: `Input when action="${action}".`,
|
|
378
|
+
...structuredClone(properties.input),
|
|
379
|
+
};
|
|
380
|
+
}),
|
|
166
381
|
},
|
|
167
382
|
},
|
|
168
383
|
required: ['action'],
|
|
169
384
|
additionalProperties: false,
|
|
170
|
-
oneOf: [
|
|
171
|
-
branch(
|
|
172
|
-
'wait_for_user',
|
|
173
|
-
input({
|
|
174
|
-
timeout_ms: {
|
|
175
|
-
type: 'integer',
|
|
176
|
-
minimum: 0,
|
|
177
|
-
maximum: 120000,
|
|
178
|
-
description: 'Wait for manual or host-configured idle resume; default 60000.',
|
|
179
|
-
},
|
|
180
|
-
}),
|
|
181
|
-
false
|
|
182
|
-
),
|
|
183
|
-
branch(
|
|
184
|
-
'list',
|
|
185
|
-
input(
|
|
186
|
-
{
|
|
187
|
-
kind: {
|
|
188
|
-
type: 'string',
|
|
189
|
-
enum: ['windows', 'apps', 'history'],
|
|
190
|
-
description:
|
|
191
|
-
"history returns this session's own executed commands with their verdicts, for reviewing what a run already did.",
|
|
192
|
-
},
|
|
193
|
-
query: {
|
|
194
|
-
type: 'string',
|
|
195
|
-
minLength: 1,
|
|
196
|
-
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
197
|
-
description:
|
|
198
|
-
'With kind="apps", also lists installed apps whose name or id matches, including apps that are not running.',
|
|
199
|
-
},
|
|
200
|
-
limit: {
|
|
201
|
-
type: 'integer',
|
|
202
|
-
minimum: 1,
|
|
203
|
-
maximum: 60,
|
|
204
|
-
description: 'kind="history" only: how many of the most recent records to return; default 60.',
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
|
-
['kind']
|
|
208
|
-
)
|
|
209
|
-
),
|
|
210
|
-
branch(
|
|
211
|
-
'diagnose',
|
|
212
|
-
input({
|
|
213
|
-
...windowTarget,
|
|
214
|
-
ocr_language: {
|
|
215
|
-
...ocrLanguage,
|
|
216
|
-
description: 'Optional OS OCR language tag to verify, e.g. ko or en-US.',
|
|
217
|
-
},
|
|
218
|
-
}),
|
|
219
|
-
false
|
|
220
|
-
),
|
|
221
|
-
branch('capture', input(captureProperties), false),
|
|
222
|
-
branch(
|
|
223
|
-
'act',
|
|
224
|
-
input(
|
|
225
|
-
{
|
|
226
|
-
...windowTarget,
|
|
227
|
-
...appTarget,
|
|
228
|
-
frame_id: {
|
|
229
|
-
type: 'string',
|
|
230
|
-
minLength: 1,
|
|
231
|
-
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
232
|
-
description: 'Latest unexpired frame id shared by coordinate actions in this act call.',
|
|
233
|
-
},
|
|
234
|
-
actions: {
|
|
235
|
-
type: 'array',
|
|
236
|
-
items: COMPUTER_CORE_ACTION_SCHEMA,
|
|
237
|
-
minItems: 1,
|
|
238
|
-
maxItems: 6,
|
|
239
|
-
description:
|
|
240
|
-
'First: an input action. Then type/key/wait reusing focus, or click/double_click/triple_click/scroll/set_value/type/key on a ref from the same observation (no marks or coordinates). Waits total ≤10s; transition/failure or a changed, disabled, or off-screen ref stops the rest.',
|
|
241
|
-
},
|
|
242
|
-
observe: {
|
|
243
|
-
type: 'string',
|
|
244
|
-
enum: ['state', 'ax'],
|
|
245
|
-
description:
|
|
246
|
-
'Returned observation. Default: ax when the first action targets a ref (full state if the tree is unusable), otherwise state. state includes the frame for coordinates or visual checks; ax skips the screenshot.',
|
|
247
|
-
},
|
|
248
|
-
...delivery,
|
|
249
|
-
},
|
|
250
|
-
['actions']
|
|
251
|
-
)
|
|
252
|
-
),
|
|
253
|
-
branch(
|
|
254
|
-
'window',
|
|
255
|
-
input(
|
|
256
|
-
{
|
|
257
|
-
...windowTarget,
|
|
258
|
-
...appTarget,
|
|
259
|
-
operation: {
|
|
260
|
-
type: 'string',
|
|
261
|
-
enum: ['focus', 'move', 'minimize', 'maximize', 'restore', 'close', 'terminate'],
|
|
262
|
-
},
|
|
263
|
-
confirm: {
|
|
264
|
-
type: 'string',
|
|
265
|
-
enum: ['terminate'],
|
|
266
|
-
description:
|
|
267
|
-
'terminate only, and required for it: kills the process behind the window, losing unsaved work. Ask the user first.',
|
|
268
|
-
},
|
|
269
|
-
x: {
|
|
270
|
-
type: 'integer',
|
|
271
|
-
description: 'move only: new left edge; y the top; width/height an optional new size.',
|
|
272
|
-
},
|
|
273
|
-
y: { type: 'integer' },
|
|
274
|
-
width: { type: 'integer', minimum: 1 },
|
|
275
|
-
height: { type: 'integer', minimum: 1 },
|
|
276
|
-
},
|
|
277
|
-
['operation']
|
|
278
|
-
)
|
|
279
|
-
),
|
|
280
|
-
branch(
|
|
281
|
-
'menu',
|
|
282
|
-
input(
|
|
283
|
-
{
|
|
284
|
-
...windowTarget,
|
|
285
|
-
...appTarget,
|
|
286
|
-
path: {
|
|
287
|
-
type: 'array',
|
|
288
|
-
items: { type: 'string', minLength: 1, maxLength: 512 },
|
|
289
|
-
minItems: 1,
|
|
290
|
-
maxItems: 8,
|
|
291
|
-
description:
|
|
292
|
-
'Exact labels from the bar down, e.g. ["File","Save As"]. Missing, ambiguous, or disabled entries fail closed.',
|
|
293
|
-
},
|
|
294
|
-
},
|
|
295
|
-
['path']
|
|
296
|
-
)
|
|
297
|
-
),
|
|
298
|
-
branch(
|
|
299
|
-
'verify',
|
|
300
|
-
input(
|
|
301
|
-
{
|
|
302
|
-
...windowTarget,
|
|
303
|
-
...appTarget,
|
|
304
|
-
expect: {
|
|
305
|
-
type: 'array',
|
|
306
|
-
minItems: 1,
|
|
307
|
-
maxItems: 8,
|
|
308
|
-
description: 'AND-combined predicates. Reads state only: no pixels, and prior refs stay valid.',
|
|
309
|
-
items: {
|
|
310
|
-
type: 'object',
|
|
311
|
-
properties: {
|
|
312
|
-
present: {
|
|
313
|
-
type: 'string',
|
|
314
|
-
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
315
|
-
description: 'Text an element name or value must contain.',
|
|
316
|
-
},
|
|
317
|
-
absent: { type: 'string', maxLength: MAX_TARGET_TOKEN_LENGTH },
|
|
318
|
-
title_contains: { type: 'string', maxLength: MAX_TARGET_TOKEN_LENGTH },
|
|
319
|
-
window_exists: { type: 'boolean' },
|
|
320
|
-
},
|
|
321
|
-
additionalProperties: false,
|
|
322
|
-
},
|
|
323
|
-
},
|
|
324
|
-
timeout_ms: { type: 'integer', minimum: 0, maximum: 30000 },
|
|
325
|
-
stable_samples: {
|
|
326
|
-
type: 'integer',
|
|
327
|
-
minimum: 1,
|
|
328
|
-
maximum: 5,
|
|
329
|
-
description: 'Consecutive satisfied samples required. Default 2.',
|
|
330
|
-
},
|
|
331
|
-
},
|
|
332
|
-
['expect']
|
|
333
|
-
)
|
|
334
|
-
),
|
|
335
|
-
branch(
|
|
336
|
-
'clipboard',
|
|
337
|
-
input(
|
|
338
|
-
{
|
|
339
|
-
operation: { type: 'string', enum: ['read', 'write'] },
|
|
340
|
-
text: {
|
|
341
|
-
type: 'string',
|
|
342
|
-
maxLength: MAX_CLIPBOARD_TEXT_LENGTH,
|
|
343
|
-
description: 'Required for operation="write".',
|
|
344
|
-
},
|
|
345
|
-
},
|
|
346
|
-
['operation']
|
|
347
|
-
)
|
|
348
|
-
),
|
|
349
|
-
branch(
|
|
350
|
-
'launch',
|
|
351
|
-
input(
|
|
352
|
-
{
|
|
353
|
-
app: {
|
|
354
|
-
type: 'string',
|
|
355
|
-
minLength: 1,
|
|
356
|
-
maxLength: MAX_TARGET_TOKEN_LENGTH,
|
|
357
|
-
description: 'Executable name, exact path, file, or URL.',
|
|
358
|
-
},
|
|
359
|
-
},
|
|
360
|
-
['app']
|
|
361
|
-
)
|
|
362
|
-
),
|
|
363
|
-
],
|
|
364
385
|
};
|
|
365
386
|
|
|
387
|
+
export const COMPUTER_INPUT_SCHEMA = advertiseActionInputUnion(COMPUTER_ACTION_INPUT_UNION);
|
|
388
|
+
|
|
366
389
|
const COMPUTER_ACTION_BRANCHES = new Map();
|
|
367
|
-
for (const actionBranch of
|
|
390
|
+
for (const actionBranch of COMPUTER_ACTION_CONTRACTS) {
|
|
368
391
|
for (const action of actionBranch.properties?.action?.enum || []) {
|
|
369
392
|
COMPUTER_ACTION_BRANCHES.set(action, actionBranch);
|
|
370
393
|
}
|
|
@@ -46,7 +46,5 @@ export function linuxComputerPreflight(options?: Record<string, unknown>): Promi
|
|
|
46
46
|
export function resetLinuxComputerPreflightCache(): void;
|
|
47
47
|
export const GNOME_EXTENSION_UUID: 'mixdog-windows@mixdog.io';
|
|
48
48
|
export function gnomeExtensionDirs(env?: Record<string, string | undefined>): string[];
|
|
49
|
-
export const FIX_MESSAGES: Readonly<Record<'allow_input' | 'relogin' | 'enable_window_helper' | 'install_package', string>>;
|
|
50
|
-
export const REFUSAL_MESSAGE: string;
|
|
51
49
|
export const CAPTURE_FALLBACK_NOTE: string;
|
|
52
50
|
export function linuxCaptureFallback(options?: Record<string, unknown>): Promise<{ command: Record<string, unknown>; note: string } | null>;
|
|
@@ -32,22 +32,6 @@ export const CLIPBOARD_HINT =
|
|
|
32
32
|
export const DISPLAY_HINT =
|
|
33
33
|
'display_unavailable: no graphical session to drive; run inside a desktop session with DISPLAY (X11) or WAYLAND_DISPLAY set';
|
|
34
34
|
|
|
35
|
-
/**
|
|
36
|
-
* User-facing English phrases, one per fix a capability can ask for. They are
|
|
37
|
-
* the keys of the UI catalogs (apps/desktop/src/renderer/locales), so a UI that
|
|
38
|
-
* renders a capability's `fix` looks the phrase up there; `{{package}}` is the
|
|
39
|
-
* capability's `package`. The tool result text for the model stays English.
|
|
40
|
-
*/
|
|
41
|
-
export const FIX_MESSAGES = Object.freeze({
|
|
42
|
-
allow_input:
|
|
43
|
-
'Allow Mixdog to send keyboard and mouse input: grant access to /dev/uinput (add your user to the input group), then sign in again.',
|
|
44
|
-
relogin: 'Sign out and sign in again to finish setting up window control for Mixdog.',
|
|
45
|
-
enable_window_helper:
|
|
46
|
-
'Enable the Mixdog Windows extension so Mixdog can list and control windows (gnome-extensions enable mixdog-windows@mixdog.io).',
|
|
47
|
-
install_package: 'Install {{package}} to enable this Computer Use feature.',
|
|
48
|
-
});
|
|
49
|
-
export const REFUSAL_MESSAGE = 'Computer Use cannot run this action because a required capability is not ready.';
|
|
50
|
-
|
|
51
35
|
/** Stable code of the whole refusal; the per-capability codes are the native ones. */
|
|
52
36
|
export const CAPABILITY_UNAVAILABLE_CODE = 'computer_capability_unavailable';
|
|
53
37
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// Effort-judge client. The judge loads
|
|
2
|
-
// with Auto effort support)
|
|
3
|
-
//
|
|
4
|
-
//
|
|
1
|
+
// Effort-judge client. The judge loads when a session that uses it (a model
|
|
2
|
+
// with Auto effort support) is created or opened, or on the first judged turn,
|
|
3
|
+
// and then stays resident until the feature is turned off or a model update
|
|
4
|
+
// replaces its files, so users who never open such a session never hold it in
|
|
5
|
+
// memory. A turn waits for a still-loading judge
|
|
5
6
|
// only briefly; when the model is missing, still loading, slow, or failing,
|
|
6
7
|
// `judgeTurn` returns a `skipped` reason and the turn keeps its default
|
|
7
8
|
// effort. Decisions are logged locally (lengths and probabilities only, never
|
|
@@ -237,6 +238,22 @@ export function refreshEffortJudge() {
|
|
|
237
238
|
});
|
|
238
239
|
}
|
|
239
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Starts the judge worker ahead of the first judged turn so its cold load
|
|
243
|
+
* (about 2.3 s) is over by then. Fire-and-forget: it spawns nothing when the
|
|
244
|
+
* platform is unsupported, the model is missing or being installed, or a
|
|
245
|
+
* failed load is still inside LOAD_RETRY_MS. Returns whether a worker is
|
|
246
|
+
* running or loading.
|
|
247
|
+
*/
|
|
248
|
+
export function prewarmEffortJudge() {
|
|
249
|
+
if (!onnxRuntimeSupported() || installing) return false;
|
|
250
|
+
const dir = effortJudgeModelDir();
|
|
251
|
+
if (!effortJudgeAvailable(dir)) return false;
|
|
252
|
+
if (!worker && lastLoadError && Date.now() - lastLoadErrorAt < LOAD_RETRY_MS) return false;
|
|
253
|
+
ensureWorker(dir);
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
|
|
240
257
|
export function effortJudgeReady() {
|
|
241
258
|
return ready;
|
|
242
259
|
}
|
|
@@ -94,7 +94,10 @@ async function load() {
|
|
|
94
94
|
executionProviders: ['cpu'],
|
|
95
95
|
graphOptimizationLevel: 'all',
|
|
96
96
|
// One judgment runs at a time; 4 threads halve the long-input tail
|
|
97
|
-
// (p95 ~280 -> ~110 ms measured) for a ~0.1 s burst per turn.
|
|
97
|
+
// (p95 ~280 -> ~110 ms measured) for a ~0.1 s burst per turn. More threads
|
|
98
|
+
// did not help where agents share the CPU: with 3-4 agent-like loads on
|
|
99
|
+
// 20 logical cores, 6 threads timed out 8-16% (3 loads) and 78-87% (4 loads) of judgments against
|
|
100
|
+
// 0-5% for 4, so the count stays fixed.
|
|
98
101
|
intraOpNumThreads: 4,
|
|
99
102
|
});
|
|
100
103
|
const settings = calibration();
|