mixdog 1.3.5 → 1.4.1
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/NOTICE.md +2 -2
- package/README.md +2 -2
- package/package.json +2 -11
- package/scripts/check-voice-runtime-inputs.mjs +25 -0
- package/scripts/daemon-stub.mjs +1 -1
- package/scripts/gate-local.mjs +16 -5
- package/scripts/latest-guard.mjs +21 -9
- package/scripts/lib/isolated-test-env.mjs +10 -5
- package/scripts/lib/run-node-tests.mjs +37 -37
- package/scripts/lib/scoped-temp.d.mts +16 -0
- package/scripts/lib/scoped-temp.mjs +123 -0
- package/scripts/lib/stale-temp.mjs +44 -0
- package/scripts/native-release-status.mjs +2 -2
- package/scripts/post-release-check.mjs +1 -6
- package/scripts/pptx-kit-index.mjs +17 -4
- package/scripts/recall-history-cases.json +1 -1
- package/scripts/suite-health.mjs +20 -2
- package/scripts/test-data-dir.mjs +10 -7
- package/scripts/test.mjs +7 -11
- package/src/agents/reviewer/AGENT.md +7 -11
- package/src/agents/reviewer/agent.json +1 -1
- package/src/app.mjs +4 -0
- package/src/defaults/shipped-history.json +22 -1
- package/src/defaults/skills/browser-use/SKILL.md +62 -12
- package/src/defaults/skills/code-tidy/SKILL.md +142 -270
- package/src/defaults/skills/code-tidy/references/agent-cleanup.md +4 -4
- package/src/defaults/skills/code-tidy/references/cleanup-report.md +31 -76
- package/src/defaults/skills/code-tidy/references/dead-code.md +6 -12
- package/src/defaults/skills/computer-use/SKILL.md +35 -9
- package/src/defaults/skills/setup/SKILL.md +22 -0
- package/src/defaults/skills/setup/references/actions.md +39 -5
- package/src/defaults/skills/setup/references/surfaces.md +11 -2
- package/src/defaults/skills/visualize/SKILL.md +2 -1
- package/src/lib/rules-builder.cjs +39 -20
- package/src/output-styles/common.md +2 -2
- package/src/output-styles/simple.md +1 -1
- package/src/rules/agent/AGENT.md +11 -10
- package/src/rules/lead/LEAD.md +23 -20
- package/src/rules/shared/05-tool-calls.md +5 -6
- package/src/rules/shared/10-tool-workflow.md +4 -0
- package/src/rules/shared/45-destructive.md +0 -2
- package/src/rules/shared/50-execution.md +2 -0
- package/src/rules/shared/60-verification.md +7 -5
- package/src/rules/shared/70-delivery.md +7 -9
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +29 -6
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -3
- package/src/runtime/agent/orchestrator/agent-runtime/title-completion.mjs +3 -1
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +3 -1
- package/src/runtime/agent/orchestrator/cache-break-trace.mjs +2 -0
- package/src/runtime/agent/orchestrator/config.mjs +17 -1
- package/src/runtime/agent/orchestrator/context/collect.mjs +3 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +73 -68
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +57 -2
- package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +3 -3
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +176 -72
- package/src/runtime/agent/orchestrator/mcp/client.mjs +19 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +192 -133
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +42 -6
- package/src/runtime/agent/orchestrator/providers/anthropic-api-recovery.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +7 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-api-transport.mjs +8 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-cache-warm.mjs +165 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens-recovery.mjs +6 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +14 -14
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/initial-status.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +159 -69
- package/src/runtime/agent/orchestrator/providers/anthropic-overload-fallback.mjs +25 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +70 -33
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +135 -87
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +123 -102
- package/src/runtime/agent/orchestrator/providers/cache-warm-admission.mjs +90 -0
- package/src/runtime/agent/orchestrator/providers/command-code-oauth-login.mjs +1 -10
- package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +25 -9
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +25 -13
- package/src/runtime/agent/orchestrator/providers/devin-wire-transport.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/devin.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +210 -20
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-prefix-trace.mjs +76 -11
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +45 -6
- package/src/runtime/agent/orchestrator/providers/lib/first-output-window.mjs +58 -0
- package/src/runtime/agent/orchestrator/providers/lib/listen-on.mjs +14 -0
- package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +17 -3
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +52 -10
- package/src/runtime/agent/orchestrator/providers/mimo-oauth-login.mjs +1 -10
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +8 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +11 -3
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +9 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +14 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +4 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream-common.mjs +5 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +16 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +13 -3
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state.mjs +13 -2
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-watchdogs.mjs +81 -42
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +136 -5
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +10 -9
- package/src/runtime/agent/orchestrator/providers/openai-ws-send/send-context.mjs +22 -3
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/attempt-context.mjs +43 -5
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/handshake-failure.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/stream-failure.mjs +6 -3
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +20 -12
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-watchdogs.mjs +48 -22
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +65 -1
- package/src/runtime/agent/orchestrator/providers/quota-reading.mjs +38 -12
- package/src/runtime/agent/orchestrator/providers/registry.mjs +38 -0
- package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +39 -7
- package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +6 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +49 -16
- package/src/runtime/agent/orchestrator/runtime-core/compaction-config-keys.mjs +62 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +37 -16
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +100 -23
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +7 -6
- package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +9 -3
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +19 -4
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +125 -30
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +3 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +5 -2
- package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +1 -3
- package/src/runtime/agent/orchestrator/session/cache-warm.mjs +798 -0
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +1 -8
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/compact/observation-supersession.mjs +103 -23
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +280 -45
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +475 -58
- package/src/runtime/agent/orchestrator/session/compaction-archive.mjs +42 -17
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +13 -1
- package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +163 -22
- package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +132 -17
- package/src/runtime/agent/orchestrator/session/conversation-import/convert.mjs +38 -7
- package/src/runtime/agent/orchestrator/session/conversation-import/imported-session.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/conversation-import/turns.mjs +90 -22
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +11 -5
- package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +0 -2
- package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +36 -4
- package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +51 -25
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +37 -3
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +13 -5
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +31 -3
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +20 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/after-hook.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +5 -4
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +16 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +16 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +49 -21
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +3 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +12 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +12 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +19 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +133 -90
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +31 -4
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +30 -18
- package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +24 -14
- package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +11 -2
- package/src/runtime/agent/orchestrator/session/manager/provider-replay.mjs +13 -0
- package/src/runtime/agent/orchestrator/session/manager/route-fallback-chain.mjs +130 -0
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +27 -9
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +81 -8
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +27 -8
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +12 -5
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +9 -4
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-context.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +102 -15
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +21 -5
- package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +9 -0
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +24 -9
- package/src/runtime/agent/orchestrator/session/prompt-cache-idle-gaps.mjs +113 -0
- package/src/runtime/agent/orchestrator/session/prompt-cache-touch-store.mjs +150 -0
- package/src/runtime/agent/orchestrator/session/restart-prefix-parity.fixture.mjs +154 -0
- package/src/runtime/agent/orchestrator/session/routine-result.mjs +36 -9
- package/src/runtime/agent/orchestrator/session/sensitive-projection.mjs +100 -0
- package/src/runtime/agent/orchestrator/session/sensitive-values.mjs +257 -0
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +20 -7
- package/src/runtime/agent/orchestrator/session/side-question.mjs +18 -0
- package/src/runtime/agent/orchestrator/session/skill-update-notice.mjs +60 -0
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +9 -5
- package/src/runtime/agent/orchestrator/session/store/serialize.mjs +9 -8
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +7 -0
- package/src/runtime/agent/orchestrator/session/store/session-persistence-events.mjs +29 -0
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +8 -6
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +16 -2
- package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +15 -0
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +81 -22
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +92 -3
- package/src/runtime/agent/orchestrator/session/stored-attachment-history.mjs +32 -0
- package/src/runtime/agent/orchestrator/session/thinking-binding.mjs +108 -0
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +79 -3
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +9 -7
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/turn-failure.mjs +5 -1
- package/src/runtime/agent/orchestrator/stall-policy.mjs +23 -0
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +5 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +12 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/invocation-plan.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/misuse-guard.mjs +240 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/result-format.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/shell-cwd.mjs +38 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +31 -6
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +110 -26
- package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +31 -5
- package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +22 -8
- package/src/runtime/agent/orchestrator/tools/builtin/lib/scoped-search-flight.mjs +9 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-stream.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-dispatch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-publication.mjs +23 -12
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-snapshot.mjs +6 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +1 -8
- package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/federation.mjs +3 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/lib/isolated-test-env.mjs +4 -3
- package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +26 -4
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +36 -13
- package/src/runtime/browser-bridge/action-schema.mjs +13 -2
- package/src/runtime/browser-bridge/client.mjs +73 -8
- package/src/runtime/browser-bridge/input-fields.mjs +8 -9
- package/src/runtime/browser-bridge/mail-links.mjs +107 -0
- package/src/runtime/browser-bridge/tool-defs.mjs +1 -1
- package/src/runtime/channels/lib/config.mjs +6 -61
- package/src/runtime/channels/lib/crash-log.mjs +1 -1
- package/src/runtime/channels/lib/event-pipeline.mjs +4 -19
- package/src/runtime/channels/lib/event-queue.mjs +3 -18
- package/src/runtime/channels/lib/owned-runtime/automation-services.mjs +2 -2
- package/src/runtime/channels/lib/owned-runtime/automation-start.mjs +3 -4
- package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +4 -59
- package/src/runtime/channels/lib/owned-runtime/owned-start.mjs +33 -115
- package/src/runtime/channels/lib/owned-runtime/owned-stop.mjs +5 -22
- package/src/runtime/channels/lib/owned-runtime/state.mjs +2 -8
- package/src/runtime/channels/lib/owned-runtime.mjs +6 -23
- package/src/runtime/channels/lib/parent-bridge.mjs +2 -2
- package/src/runtime/channels/lib/runtime-paths.mjs +4 -43
- package/src/runtime/channels/lib/scheduler.mjs +33 -147
- package/src/runtime/channels/lib/schedules-db.mjs +34 -11
- package/src/runtime/channels/lib/status-snapshot.mjs +1 -1
- package/src/runtime/channels/lib/tool-dispatch.mjs +1 -2
- package/src/runtime/channels/lib/webhook/signature.mjs +4 -1
- package/src/runtime/channels/lib/webhooks-db.mjs +5 -9
- package/src/runtime/channels/lib/whisper-port.mjs +10 -1
- package/src/runtime/channels/lib/worker-bootstrap.mjs +0 -1
- package/src/runtime/channels/lib/worker-ipc.mjs +0 -1
- package/src/runtime/channels/lib/worker-main.mjs +10 -34
- package/src/runtime/computer-bridge/action-schema.mjs +42 -1
- package/src/runtime/computer-bridge/actions.mjs +9 -1
- package/src/runtime/computer-bridge/client.mjs +180 -8
- package/src/runtime/computer-bridge/core-actions.mjs +2 -2
- package/src/runtime/computer-bridge/error-recovery.mjs +28 -2
- package/src/runtime/computer-bridge/linux-action-capabilities.mjs +24 -5
- package/src/runtime/computer-bridge/linux-readiness.d.mts +7 -2
- package/src/runtime/computer-bridge/linux-readiness.mjs +65 -23
- package/src/runtime/computer-bridge/pending-continuation.mjs +1 -1
- package/src/runtime/connectors/connector-accounts-mcp.mjs +230 -0
- package/src/runtime/connectors/gmail-app-password.mjs +172 -39
- package/src/runtime/connectors/google-mcp.mjs +10 -12
- package/src/runtime/local-provider/server-process.mjs +2 -1
- package/src/runtime/media/adapters/gemini-video.mjs +4 -1
- package/src/runtime/media/adapters/xai-media.mjs +2 -1
- package/src/runtime/memory/lib/embedding-worker.mjs +6 -3
- package/src/runtime/memory/lib/memory-action-handlers/cycle-backfill-action.mjs +1 -7
- package/src/runtime/memory/lib/memory-chunk-quality.mjs +1 -6
- package/src/runtime/memory/lib/pg/adapter.mjs +77 -70
- package/src/runtime/memory/lib/pg/supervisor.mjs +24 -12
- package/src/runtime/memory/lib/runtime-fetcher.mjs +23 -5
- package/src/runtime/office/authoring/pdf-author-action.mjs +1 -6
- package/src/runtime/office/design/design-art-direction.mjs +29 -27
- package/src/runtime/office/pdf/pdf-writer.mjs +6 -1
- package/src/runtime/office/portable/portable-snapshot-docx.mjs +7 -1
- package/src/runtime/office/portable/portable-snapshot-shared.mjs +6 -1
- package/src/runtime/office/quality/assurance-rendered.mjs +9 -2
- package/src/runtime/office/quality/assurance-structure-docx.mjs +3 -1
- package/src/runtime/office/quality/design-review.mjs +1 -5
- package/src/runtime/office/quality/document-brief.mjs +1 -5
- package/src/runtime/office/quality/forced-break-pages.mjs +9 -6
- package/src/runtime/office/quality/quality-pipeline.mjs +1 -1
- package/src/runtime/session-search/session-search-db.mjs +73 -9
- package/src/runtime/session-search/session-search-ingest.mjs +110 -20
- package/src/runtime/shared/abort-race.mjs +89 -0
- package/src/runtime/shared/agent-avatar.d.mts +0 -1
- package/src/runtime/shared/agent-kind.mjs +4 -3
- package/src/runtime/shared/bot-owned-work.mjs +56 -0
- package/src/runtime/shared/bounded-download.mjs +8 -3
- package/src/runtime/shared/config.mjs +2 -13
- package/src/runtime/shared/connector-accounts.mjs +20 -10
- package/src/runtime/shared/connector-catalog.d.mts +29 -0
- package/src/runtime/shared/connector-catalog.mjs +150 -0
- package/src/runtime/shared/connector-triggers.mjs +22 -19
- package/src/runtime/shared/defaults-separation.mjs +2 -17
- package/src/runtime/shared/delegated-approval-host.mjs +103 -11
- package/src/runtime/shared/err-text.mjs +24 -15
- package/src/runtime/shared/fetch-safe-listen.d.mts +16 -0
- package/src/runtime/shared/fetch-safe-listen.mjs +50 -0
- package/src/runtime/shared/file-permissions.d.mts +0 -8
- package/src/runtime/shared/file-permissions.mjs +0 -11
- package/src/runtime/shared/git-direct.test-support.mjs +19 -0
- package/src/runtime/shared/handoff-artifacts.d.mts +2 -1
- package/src/runtime/shared/handoff-artifacts.mjs +18 -8
- package/src/runtime/shared/heartbeat-interval.d.mts +4 -0
- package/src/runtime/shared/heartbeat-interval.mjs +19 -0
- package/src/runtime/shared/idle-auto-clear-gate.mjs +126 -0
- package/src/runtime/shared/llm/cost.mjs +5 -1
- package/src/runtime/shared/llm/usage-rollup.mjs +1 -1
- package/src/runtime/shared/loopback-listener.mjs +25 -2
- package/src/runtime/shared/mixy-presence.mjs +22 -0
- package/src/runtime/shared/model-route-chain.d.mts +7 -2
- package/src/runtime/shared/model-route-chain.mjs +22 -4
- package/src/runtime/shared/open-url.mjs +10 -0
- package/src/runtime/shared/orchestration.d.mts +2 -0
- package/src/runtime/shared/pg-schema-db.mjs +27 -16
- package/src/runtime/shared/profile-config.cjs +1 -1
- package/src/runtime/shared/prompt-origin.d.mts +4 -0
- package/src/runtime/shared/prompt-origin.mjs +21 -0
- package/src/runtime/shared/provider-accounts.mjs +7 -1
- package/src/runtime/shared/provider-display-name.mjs +29 -0
- package/src/runtime/shared/provider-timeout-phase.mjs +2 -0
- package/src/runtime/shared/routine-trigger.d.mts +2 -0
- package/src/runtime/shared/routine-trigger.mjs +10 -0
- package/src/runtime/shared/sensitive-path-rules.d.mts +2 -10
- package/src/runtime/shared/sensitive-path-rules.mjs +19 -41
- package/src/runtime/shared/session-activity-signal.mjs +48 -1
- package/src/runtime/shared/session-scratch.mjs +37 -0
- package/src/runtime/shared/session-sidebar-host.d.mts +1 -1
- package/src/runtime/shared/session-sidebar-host.mjs +7 -3
- package/src/runtime/shared/session-turn-prelude.mjs +18 -0
- package/src/runtime/shared/tool-card-model/agent-surface.mjs +1 -3
- package/src/runtime/shared/tool-card-model/card-status.mjs +15 -2
- package/src/runtime/shared/tool-result-summary.mjs +2 -15
- package/src/runtime/shared/tool-surface.mjs +3 -0
- package/src/runtime/shared/tool-work-units.mjs +2 -0
- package/src/runtime/shared/turn-snapshot-store.mjs +13 -6
- package/src/runtime/shared/worktrees/contract.mjs +4 -1
- package/src/runtime/shared/worktrees/git.mjs +15 -0
- package/src/runtime/shared/worktrees/manager.mjs +87 -38
- package/src/runtime/shared/worktrees/test-support.mjs +14 -13
- package/src/runtime/terminal-bridge/client.mjs +10 -1
- package/src/runtime/visualize-bridge/client.mjs +29 -8
- package/src/runtime/visualize-bridge/tool-defs.mjs +22 -8
- package/src/runtime/visualize-bridge/tool-meta.d.mts +5 -0
- package/src/runtime/visualize-bridge/tool-meta.mjs +22 -0
- package/src/runtime/web-search/lib/fetch-pipeline.mjs +2 -2
- package/src/session-runtime/agent-home-delivery.mjs +489 -185
- package/src/session-runtime/agent-task-sessions.mjs +467 -229
- package/src/session-runtime/agent-tool-routing.mjs +8 -41
- package/src/session-runtime/boot/apis.mjs +9 -0
- package/src/session-runtime/boot/infrastructure.mjs +4 -0
- package/src/session-runtime/boot/providers.mjs +3 -0
- package/src/session-runtime/boot/tools.mjs +11 -2
- package/src/session-runtime/bot-status.mjs +12 -6
- package/src/session-runtime/bot-target.mjs +38 -0
- package/src/session-runtime/channel-config-api.mjs +6 -1
- package/src/session-runtime/config-lifecycle.mjs +6 -0
- package/src/session-runtime/connector-merge-migration.mjs +305 -0
- package/src/session-runtime/conversation-import/codex-titles.mjs +88 -0
- package/src/session-runtime/conversation-import/discovery.mjs +271 -25
- package/src/session-runtime/conversation-import/service.mjs +26 -5
- package/src/session-runtime/handoff-attachments.mjs +82 -31
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +144 -41
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -0
- package/src/session-runtime/internal-tool-executor/reaction-tool.mjs +4 -1
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +8 -2
- package/src/session-runtime/lifecycle/cold-heir.mjs +11 -6
- package/src/session-runtime/lifecycle/inheritance.mjs +16 -3
- package/src/session-runtime/lifecycle/session-catalog.mjs +12 -2
- package/src/session-runtime/lifecycle/teardown/runtime-stops.mjs +50 -4
- package/src/session-runtime/lifecycle/teardown.mjs +23 -5
- package/src/session-runtime/mcp-glue/server-catalog.mjs +55 -3
- package/src/session-runtime/mcp-oauth-login.mjs +5 -3
- package/src/session-runtime/mixy-heartbeat.mjs +153 -33
- package/src/session-runtime/model-route/set-route.mjs +11 -2
- package/src/session-runtime/notification-bus.mjs +31 -117
- package/src/session-runtime/notification-completion-queue.mjs +54 -0
- package/src/session-runtime/notification-listeners.mjs +76 -0
- package/src/session-runtime/owned-automation-run.mjs +2 -1
- package/src/session-runtime/prewarm/channel-start.mjs +3 -7
- package/src/session-runtime/provider-catalog-cache.mjs +82 -36
- package/src/session-runtime/provider-models/catalog-load.mjs +23 -6
- package/src/session-runtime/provider-models.mjs +4 -2
- package/src/session-runtime/resource-mcp-api.mjs +143 -224
- package/src/session-runtime/resource-mcp-connector-accounts.mjs +163 -0
- package/src/session-runtime/resource-mcp-oauth-api.mjs +217 -0
- package/src/session-runtime/resource-mcp-secrets.mjs +82 -0
- package/src/session-runtime/resource-mcp-servers.mjs +78 -0
- package/src/session-runtime/resource-mcp-store.mjs +49 -0
- package/src/session-runtime/resource-recall-api.mjs +6 -1
- package/src/session-runtime/routine-owner.mjs +40 -9
- package/src/session-runtime/runtime-feature-gates.mjs +5 -1
- package/src/session-runtime/services/agent-tool/close-flow.mjs +3 -0
- package/src/session-runtime/services/agent-tool/execute.mjs +14 -9
- package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +20 -4
- package/src/session-runtime/services/agent-tool/model-select.mjs +48 -7
- package/src/session-runtime/services/agent-tool/render.mjs +71 -17
- package/src/session-runtime/services/agent-tool/spawn-preset.mjs +13 -4
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +1 -0
- package/src/session-runtime/services/agent-tool/tool-def.mjs +9 -9
- package/src/session-runtime/services/agent-tool/worker-index/awaiting-user-sync.mjs +51 -0
- package/src/session-runtime/services/agent-tool/worker-index/disposal.mjs +55 -0
- package/src/session-runtime/services/agent-tool/worker-index/released-store.mjs +123 -0
- package/src/session-runtime/services/agent-tool/worker-index/restart-settlement.mjs +112 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-reads.mjs +36 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +2 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +17 -4
- package/src/session-runtime/services/agent-tool/worker-index/row-writes.mjs +58 -0
- package/src/session-runtime/services/agent-tool/worker-index.mjs +41 -241
- package/src/session-runtime/services/agent-tool/worker-rows.mjs +3 -0
- package/src/session-runtime/services/channel-admin.mjs +7 -13
- package/src/session-runtime/services/channel-session-router.mjs +4 -2
- package/src/session-runtime/services/provider-admin.mjs +2 -1
- package/src/session-runtime/services/seeds.mjs +0 -28
- package/src/session-runtime/session-compaction-sync.mjs +27 -0
- package/src/session-runtime/session-create/session-options.mjs +1 -0
- package/src/session-runtime/settings-builtin-tools-api.mjs +11 -0
- package/src/session-runtime/settings-compaction-api.mjs +2 -40
- package/src/session-runtime/settings-system-api.mjs +13 -1
- package/src/session-runtime/setup-tool/agent-settings-actions.mjs +65 -0
- package/src/session-runtime/setup-tool/executor.mjs +145 -22
- package/src/session-runtime/setup-tool/extended-actions.mjs +8 -3
- package/src/session-runtime/setup-tool/session-route-actions.mjs +152 -0
- package/src/session-runtime/setup-tool/settings-contract.mjs +4 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +64 -5
- package/src/session-runtime/tool-policy/agent-profile-fold.mjs +17 -13
- package/src/session-runtime/tool-policy/policy-stage.mjs +17 -2
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +1 -0
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +5 -1
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +15 -4
- package/src/session-runtime/workflow-agents-api/onboarding.mjs +3 -3
- package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +4 -0
- package/src/session-runtime/workspace/transitions.mjs +25 -0
- package/src/session-runtime/workspace/worktree-tool.mjs +26 -9
- package/src/standalone/channel-transport/client-registry/client-records.mjs +65 -0
- package/src/standalone/channel-transport/client-registry/client-registration.mjs +118 -0
- package/src/standalone/channel-transport/client-registry.mjs +24 -163
- package/src/standalone/channel-transport.mjs +1 -1
- package/src/standalone/daemon-channels-loader.mjs +10 -8
- package/src/standalone/daemon-session-control/list-page.mjs +72 -0
- package/src/standalone/daemon-session-control/request.mjs +51 -0
- package/src/standalone/daemon-session-control/room-host.mjs +57 -0
- package/src/standalone/daemon-session-control/route-control.mjs +48 -0
- package/src/standalone/daemon-session-control/send-turn.mjs +60 -0
- package/src/standalone/daemon-session-control/worktree-control.mjs +40 -0
- package/src/standalone/daemon-session-control.mjs +142 -190
- package/src/standalone/daemon.mjs +26 -3
- package/src/standalone/session-client.mjs +7 -3
- package/src/standalone/session-protocol.mjs +5 -0
- package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -0
- package/src/standalone/session-service/agent-tree/agent-turns.mjs +16 -12
- package/src/standalone/session-service/quota-resume.mjs +3 -0
- package/src/standalone/session-service/retention/busy.mjs +65 -1
- package/src/standalone/session-service/session-calls/session-action.mjs +30 -2
- package/src/standalone/session-service/session-calls/session-views.mjs +8 -0
- package/src/standalone/session-tool-output.mjs +15 -7
- package/src/standalone/session-transport/client-registry/client-grace.mjs +12 -9
- package/src/tui/app/app-view/floating-panel.jsx +7 -4
- package/src/tui/app/model-options.mjs +3 -28
- package/src/tui/app/model-picker/route-selection/fast-parameters.mjs +1 -3
- package/src/tui/app/model-picker/route-selection.mjs +5 -6
- package/src/tui/app/provider-setup/oauth-actions.mjs +38 -20
- package/src/tui/app/provider-setup/provider-items.mjs +8 -2
- package/src/tui/app/provider-setup-picker.mjs +9 -5
- package/src/tui/components/QuestionPanel.jsx +13 -4
- package/src/tui/dist/index.mjs +133 -92
- package/src/tui/session/agent-job-feed/model-notification.mjs +3 -0
- package/src/tui/session/initial-state.mjs +3 -0
- package/src/tui/session/notice-surface.mjs +7 -1
- package/src/tui/session/queue-helpers.mjs +3 -42
- package/src/tui/session/session-api/routes-agent-definitions.mjs +14 -2
- package/src/tui/session/session-api/routes-write.mjs +5 -1
- package/src/tui/session/session-api/routes.mjs +1 -0
- package/src/tui/session/session-api/settings.mjs +17 -1
- package/src/tui/session/session-flow/auto-clear.mjs +4 -33
- package/src/tui/session/session-flow/drain-closed-queue.mjs +38 -0
- package/src/tui/session/session-flow/drain-enqueue.mjs +86 -0
- package/src/tui/session/session-flow/drain-retry.mjs +35 -0
- package/src/tui/session/session-flow/drain.mjs +118 -149
- package/src/tui/session/session-flow/queue/entry-shape.mjs +5 -0
- package/src/tui/session/session-flow/queue/take-entries.mjs +16 -2
- package/src/tui/session/tool-approval-delegation.mjs +64 -0
- package/src/tui/session/tool-approval-request.mjs +39 -0
- package/src/tui/session/tool-approval-settle.mjs +62 -0
- package/src/tui/session/tool-approval.mjs +69 -115
- package/src/tui/session/tui-steering-persist.mjs +8 -1
- package/src/tui/session/turn-stream.mjs +19 -2
- package/src/tui/session/turn.mjs +1 -0
- package/src/ui/statusline-agents.mjs +1 -3
- package/src/vendor/statusline/bin/statusline-route.mjs +1 -219
- package/src/vendor/statusline/src/gateway/route-meta.mjs +35 -13
- package/scripts/code-graph-description-contract.mjs +0 -188
- package/src/runtime/channels/lib/owned-runtime/ownership-refresh.mjs +0 -36
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
import { clean } from './session-text.mjs';
|
|
5
5
|
import { mergePendingDeferredToolDelta } from './deferred-tool-delta.mjs';
|
|
6
6
|
import { applyInitialDeferredToolManifestToBp2 } from '../context/collect.mjs';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
listedDeferredToolNames,
|
|
9
|
+
mcpServerManifestLabel,
|
|
10
|
+
sanitizeMcpInstructionText,
|
|
11
|
+
} from '../context/deferred-tools.mjs';
|
|
8
12
|
import { parseMcpToolName } from '../../../shared/tool-primitives.mjs';
|
|
9
13
|
import { getMcpServerInstructionsMap, getMcpTools, getMcpToolGeneration } from '../mcp/client.mjs';
|
|
10
14
|
import { filterMcpToolsForSession } from './extension-scopes.mjs';
|
|
@@ -380,10 +384,35 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
380
384
|
session.deferredDiscoveredTools || []
|
|
381
385
|
);
|
|
382
386
|
}
|
|
387
|
+
const catalog = surfaceCatalog(session, extraTools, options);
|
|
388
|
+
const defaultNames = surfaceDefaultNames(session, catalog, mode);
|
|
389
|
+
const selected = new Set(surfaceSelectedNames(session, catalog, defaultNames, providerMode, bridge));
|
|
390
|
+
session.deferredToolCatalog = catalog;
|
|
391
|
+
session.deferredToolUsage = MEASURED_TOOL_USAGE;
|
|
392
|
+
session.deferredDefaultTools = sortedNamesByMeasuredUsage(defaultNames);
|
|
393
|
+
session.deferredProviderMode = providerMode;
|
|
394
|
+
session.deferredNativeTools = providerMode === 'native';
|
|
395
|
+
session.deferredSurfaceMode = mode;
|
|
396
|
+
const active = installSurfaceTools(session, catalog, selected, mode, bridge);
|
|
397
|
+
session.deferredCallableTools = sortedNamesByMeasuredUsage(active);
|
|
398
|
+
if (providerMode === 'native') {
|
|
399
|
+
const restored = previousExposure === TOOL_EXPOSURE_BRIDGE ? session.nativeDeferredDiscovery || [] : [];
|
|
400
|
+
delete session.nativeDeferredDiscovery;
|
|
401
|
+
const discovered = canonicalDeferredToolNames(catalog, [...(session.deferredDiscoveredTools || []), ...restored]);
|
|
402
|
+
session.deferredSelectedTools = active;
|
|
403
|
+
session.deferredDiscoveredTools = discovered.filter((name) => !selected.has(name));
|
|
404
|
+
} else {
|
|
405
|
+
setDeferredToolState(session, active);
|
|
406
|
+
}
|
|
407
|
+
refreshSurfaceManifest(session, exposureChanged);
|
|
408
|
+
return session;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// The surface's catalog, rebuilt from the full catalog, not just its eager
|
|
412
|
+
// projection. Current definitions still take precedence over retained
|
|
413
|
+
// definitions. Bridge definitions belong to the exposure, never to the catalog.
|
|
414
|
+
function surfaceCatalog(session, extraTools, options) {
|
|
383
415
|
const byName = new Map();
|
|
384
|
-
// Rebuild from the full catalog, not just its eager projection. Current
|
|
385
|
-
// definitions still take precedence over retained definitions. Bridge
|
|
386
|
-
// definitions belong to the exposure, never to the catalog.
|
|
387
416
|
const candidates = filterDisallowedTools(
|
|
388
417
|
filterModelEditTools(
|
|
389
418
|
[...session.tools, ...(extraTools || []), ...deferredCatalogUnion(session)].filter(
|
|
@@ -398,7 +427,11 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
398
427
|
if (!name || byName.has(name)) continue;
|
|
399
428
|
byName.set(name, activeToolForSurface(tool));
|
|
400
429
|
}
|
|
401
|
-
|
|
430
|
+
return sortedCatalogByMeasuredUsage([...byName.values()]);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// The mode's eager tools in `catalog`, less those the session keeps loadable.
|
|
434
|
+
function surfaceDefaultNames(session, catalog, mode) {
|
|
402
435
|
const defaultNames = defaultDeferredToolNames(catalog, mode);
|
|
403
436
|
// Solo keeps `agent` in the deferred pool: loadable on request, never eager.
|
|
404
437
|
// The mode the prompt was built with: a mid-conversation workflow or
|
|
@@ -413,19 +446,24 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
413
446
|
for (const name of Array.isArray(session.workflowOpenedTools) ? session.workflowOpenedTools : []) {
|
|
414
447
|
defaultNames.delete(name);
|
|
415
448
|
}
|
|
449
|
+
return defaultNames;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// The names the surface selects: the session's stored selection, else the
|
|
453
|
+
// defaults.
|
|
454
|
+
function surfaceSelectedNames(session, catalog, defaultNames, providerMode, bridge) {
|
|
416
455
|
// Bridge sessions expose the mode's core only: a stored (legacy all-selected)
|
|
417
456
|
// selection never widens the wire surface, and load_tool is the bridge's own.
|
|
418
457
|
const storedNames = providerMode === 'native' || bridge ? [] : storedDeferredToolNames(session);
|
|
419
458
|
let selectedNames = storedNames.length ? canonicalDeferredToolNames(catalog, storedNames) : [];
|
|
420
459
|
if (!selectedNames.length || providerMode === 'native') selectedNames = sortedNamesByMeasuredUsage(defaultNames);
|
|
421
460
|
if (bridge) selectedNames = selectedNames.filter((name) => name !== 'load_tool');
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
session.deferredSurfaceMode = mode;
|
|
461
|
+
return selectedNames;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Replace `session.tools` with the selected definitions (plus the bridge's
|
|
465
|
+
// own) and record the exposure; returns the active tool names.
|
|
466
|
+
function installSurfaceTools(session, catalog, selected, mode, bridge) {
|
|
429
467
|
session.tools.length = 0;
|
|
430
468
|
const active = [];
|
|
431
469
|
for (const tool of catalog) {
|
|
@@ -439,16 +477,12 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
439
477
|
if (bridge && catalog.length) session.tools.push(...BRIDGE_SURFACE_TOOLS);
|
|
440
478
|
if (bridge) session.toolExposureMode = TOOL_EXPOSURE_BRIDGE;
|
|
441
479
|
else delete session.toolExposureMode;
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
session.deferredDiscoveredTools = discovered.filter((name) => !selected.has(name));
|
|
449
|
-
} else {
|
|
450
|
-
setDeferredToolState(session, active);
|
|
451
|
-
}
|
|
480
|
+
return active;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Keep the system prompt's fixed deferred-tool block (BP2) and the announced
|
|
484
|
+
// set in step with the surface.
|
|
485
|
+
function refreshSurfaceManifest(session, exposureChanged) {
|
|
452
486
|
if (exposureChanged && session.messages?.some((m) => m?.role === 'system')) {
|
|
453
487
|
// Replace the previous exposure's fixed block once: the native deferred
|
|
454
488
|
// manifest, or the bridge roster + guidance. History stays as is.
|
|
@@ -473,7 +507,6 @@ export function applyDeferredToolSurface(session, mode, extraTools = [], options
|
|
|
473
507
|
// the startup pool.
|
|
474
508
|
session.deferredAnnouncedTools = deferredPoolToolNames(session);
|
|
475
509
|
}
|
|
476
|
-
return session;
|
|
477
510
|
}
|
|
478
511
|
|
|
479
512
|
export function rebuildDeferredToolSurfaceForProvider(session, provider) {
|
|
@@ -669,9 +702,8 @@ function reconcileDeferredMcpToolCatalogUncached(session, liveMcpTools) {
|
|
|
669
702
|
const lateCatalog = Array.isArray(session.deferredLateToolCatalog) ? session.deferredLateToolCatalog : [];
|
|
670
703
|
// A bridge session judges a removal by the definition it had before this
|
|
671
704
|
// reconciliation (a disconnected late tool leaves the late pool below).
|
|
672
|
-
const
|
|
673
|
-
|
|
674
|
-
: null;
|
|
705
|
+
const catalogBefore = new Map(deferredCatalogUnion(session).map((tool) => [clean(tool?.name), tool]));
|
|
706
|
+
const knownBefore = isToolBridgeEnabled(session) ? catalogBefore : null;
|
|
675
707
|
const active = persistentToolSurfaceNames(session);
|
|
676
708
|
|
|
677
709
|
const liveMcpByName = new Map();
|
|
@@ -723,12 +755,14 @@ function reconcileDeferredMcpToolCatalogUncached(session, liveMcpTools) {
|
|
|
723
755
|
for (const name of previousNames) {
|
|
724
756
|
if (nextNames.has(name)) continue;
|
|
725
757
|
if (knownBefore && !rosterPermits(session, knownBefore.get(name) || { name })) continue;
|
|
726
|
-
|
|
758
|
+
// The server comes from the definition the session had, so a shortened
|
|
759
|
+
// name never has to be parsed.
|
|
760
|
+
removed.push({ name, server: parseMcpToolName(catalogBefore.get(name) || name)?.server || '' });
|
|
727
761
|
}
|
|
728
762
|
if (!added.length && !removed.length) return null;
|
|
729
763
|
mergePendingDeferredToolDelta(session, { added, removed });
|
|
730
764
|
session.updatedAt = Date.now();
|
|
731
|
-
return [...added.map((entry) => entry.name)
|
|
765
|
+
return [...added, ...removed].map((entry) => entry.name);
|
|
732
766
|
}
|
|
733
767
|
|
|
734
768
|
/**
|
|
@@ -742,6 +776,9 @@ function reconcileDeferredMcpToolCatalogUncached(session, liveMcpTools) {
|
|
|
742
776
|
* Returns the re-armed names, or null when there are none.
|
|
743
777
|
*/
|
|
744
778
|
export function rearmLateDeferredTools(session) {
|
|
779
|
+
// The compaction also drops the load results that carried a server's
|
|
780
|
+
// instruction text, so the next load of its tools delivers it again.
|
|
781
|
+
if (session) delete session.mcpInstructionsAnnounced;
|
|
745
782
|
if (!session || !Array.isArray(session.tools) || fixedSurfaceSession(session)) return null;
|
|
746
783
|
if (!Array.isArray(session.deferredMcpToolNames) || !Array.isArray(session.deferredAnnouncedTools)) return null;
|
|
747
784
|
// Listed in the boot manifest, or already loaded/discovered: still visible.
|
|
@@ -797,7 +834,8 @@ export function selectDeferredTools(session, names, mode, { exact = false } = {}
|
|
|
797
834
|
const key = clean(raw);
|
|
798
835
|
if (byName.has(key) || byName.has(key.toLowerCase())) return [key];
|
|
799
836
|
const members = mcpServerSelection(catalog, key).map((tool) => clean(tool?.name));
|
|
800
|
-
|
|
837
|
+
if (members.length) return members;
|
|
838
|
+
return [key];
|
|
801
839
|
});
|
|
802
840
|
for (const rawName of new Set(requested)) {
|
|
803
841
|
const requestedName = clean(rawName);
|
|
@@ -878,14 +916,67 @@ function resolvableCatalog(session) {
|
|
|
878
916
|
return filterSessionToolPolicy(tools, session);
|
|
879
917
|
}
|
|
880
918
|
|
|
919
|
+
// A server's instruction text rides the first load_tool naming any of its
|
|
920
|
+
// tools (loaded now, already active, or described on the bridge), once until
|
|
921
|
+
// compaction (`mcpInstructionsAnnounced`; rearmLateDeferredTools clears it with
|
|
922
|
+
// the transcript that held the text): `## <server>` + body, sanitized and
|
|
923
|
+
// capped like the BP2 block it replaces. No text, nothing sent or recorded.
|
|
924
|
+
function pendingMcpInstructions(session, catalog, names) {
|
|
925
|
+
const map = session?.mcpServerInstructions;
|
|
926
|
+
if (!map || typeof map !== 'object' || !names.length) return [];
|
|
927
|
+
const byName = new Map(catalog.map((tool) => [clean(tool?.name), tool]));
|
|
928
|
+
const announced = new Set(Array.isArray(session.mcpInstructionsAnnounced) ? session.mcpInstructionsAnnounced : []);
|
|
929
|
+
const pending = [];
|
|
930
|
+
for (const name of names) {
|
|
931
|
+
const server = parseMcpToolName(byName.get(name) || name)?.server;
|
|
932
|
+
if (!server || announced.has(server) || !mcpServerManifestLabel(server)) continue;
|
|
933
|
+
const text = sanitizeMcpInstructionText(map[server]);
|
|
934
|
+
if (!text) continue;
|
|
935
|
+
announced.add(server);
|
|
936
|
+
pending.push({ server, block: `## ${server}\n${text}` });
|
|
937
|
+
}
|
|
938
|
+
return pending;
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
function announceMcpServers(session, pending) {
|
|
942
|
+
if (!pending.length) return;
|
|
943
|
+
session.mcpInstructionsAnnounced = [
|
|
944
|
+
...new Set([...(session.mcpInstructionsAnnounced || []), ...pending.map((entry) => entry.server)]),
|
|
945
|
+
];
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
function claimMcpServerInstructions(session, catalog, names) {
|
|
949
|
+
const pending = pendingMcpInstructions(session, catalog, names);
|
|
950
|
+
announceMcpServers(session, pending);
|
|
951
|
+
return pending.map((entry) => entry.block).join('\n');
|
|
952
|
+
}
|
|
953
|
+
|
|
881
954
|
// Pure loader. Input is exact deferred-tool names/aliases; output reports
|
|
882
955
|
// loaded / already-active / missing / blocked tools PLUS pending/failed MCP
|
|
883
956
|
// servers. No listing, no ranking, no substring filter. `options.mcpStatus` is
|
|
884
957
|
// the runtime getter for per-server status.
|
|
885
958
|
export function renderToolSearch(args = {}, session, mode = 'full', options = {}) {
|
|
886
959
|
// Bridge mode: load_tool describes (bounded, paged) and never loads.
|
|
887
|
-
if (isToolBridgeEnabled(session)) return formatBridgeResult(describeBridgeTools(session, args, { mode }));
|
|
888
960
|
const catalog = resolvableCatalog(session);
|
|
961
|
+
if (isToolBridgeEnabled(session)) {
|
|
962
|
+
// The page counts the instruction text inside its size budget; only the
|
|
963
|
+
// servers whose text made it into the returned page are marked announced.
|
|
964
|
+
const pendingFor = (names) => pendingMcpInstructions(session, catalog, names);
|
|
965
|
+
const described = describeBridgeTools(session, args, {
|
|
966
|
+
mode,
|
|
967
|
+
instructionsFor: (names) =>
|
|
968
|
+
pendingFor(names)
|
|
969
|
+
.map((entry) => entry.block)
|
|
970
|
+
.join('\n'),
|
|
971
|
+
});
|
|
972
|
+
if (!described.error && described.mcpInstructions) {
|
|
973
|
+
announceMcpServers(
|
|
974
|
+
session,
|
|
975
|
+
pendingFor((described.entries || []).map((entry) => clean(entry?.name)).filter(Boolean))
|
|
976
|
+
);
|
|
977
|
+
}
|
|
978
|
+
return formatBridgeResult(described);
|
|
979
|
+
}
|
|
889
980
|
const requestedNames = parseToolSelection(args.names);
|
|
890
981
|
const { pending: pendingMcpServers, failed: failedMcpServers } = pendingAndFailedMcpServers(options?.mcpStatus);
|
|
891
982
|
const mcpFields = {
|
|
@@ -955,11 +1046,15 @@ export function renderToolSearch(args = {}, session, mode = 'full', options = {}
|
|
|
955
1046
|
if (missing.length && failedMcpServers.length) {
|
|
956
1047
|
notes.push('Some requested names may belong to a failed MCP server; those tools are unavailable.');
|
|
957
1048
|
}
|
|
1049
|
+
// Tools the session already had active (loaded before, or eager) count too:
|
|
1050
|
+
// their server's text may never have been delivered.
|
|
1051
|
+
const mcpInstructions = claimMcpServerInstructions(session, catalog, [...loaded, ...alreadyActive]);
|
|
958
1052
|
return JSON.stringify(
|
|
959
1053
|
{
|
|
960
1054
|
// `selected` retained for back-compat consumers (mode is always 'select').
|
|
961
1055
|
selected: { mode: 'select', tools: toolSelection },
|
|
962
1056
|
...(nativeToolSearch ? { nativeToolSearch } : {}),
|
|
1057
|
+
...(mcpInstructions ? { mcpInstructions } : {}),
|
|
963
1058
|
loaded,
|
|
964
1059
|
alreadyActive,
|
|
965
1060
|
...(alreadyActiveSchemas.length ? { alreadyActiveSchemas } : {}),
|
|
@@ -115,7 +115,7 @@ export const SESSION_TOOL = {
|
|
|
115
115
|
session_id: {
|
|
116
116
|
type: 'string',
|
|
117
117
|
description:
|
|
118
|
-
'ID from list; required for read/send/cancel/delete, optional for status/bots. send/cancel/delete cannot target the caller.',
|
|
118
|
+
'ID from list; required for read/send/cancel/delete, optional for status/bots. send/cancel/delete cannot target the caller. read/send/status also take a bot id (its home chat).',
|
|
119
119
|
},
|
|
120
120
|
prompt: { type: 'string', description: 'send: message to enqueue; loads a cold session.' },
|
|
121
121
|
to: {
|
|
@@ -264,6 +264,7 @@ export function collectStandaloneToolDefs({
|
|
|
264
264
|
visualizeToolDefs = [],
|
|
265
265
|
setupToolDefs = [],
|
|
266
266
|
askUserToolDefs = [],
|
|
267
|
+
handoffUserToolDefs = [],
|
|
267
268
|
reactionToolDefs = [],
|
|
268
269
|
goalTools = [],
|
|
269
270
|
agentTools = [],
|
|
@@ -286,6 +287,7 @@ export function collectStandaloneToolDefs({
|
|
|
286
287
|
...admitted(visualizeToolDefs, VISUALIZE_RUNTIME_TOOLS),
|
|
287
288
|
...setupToolDefs,
|
|
288
289
|
...askUserToolDefs,
|
|
290
|
+
...handoffUserToolDefs,
|
|
289
291
|
...reactionToolDefs,
|
|
290
292
|
...goalTools,
|
|
291
293
|
...agentTools,
|
|
@@ -178,8 +178,11 @@ export function webSearchRouteOrDefault(...routeLikes) {
|
|
|
178
178
|
});
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
// A stored chain may hold a fallback on the main model's own provider (inactive,
|
|
182
|
+
// see executionFallbacks), so reading and re-saving it is lenient; a route the
|
|
183
|
+
// user saves directly passes `{ strict: true }`.
|
|
184
|
+
export function normalizeWorkflowRoute(routeLike, fallback = {}, { strict = false } = {}) {
|
|
185
|
+
return normalizeRouteChain(routeLike, normalizeWorkflowRouteLeaf, fallback, { strict });
|
|
183
186
|
}
|
|
184
187
|
|
|
185
188
|
function normalizeWorkflowRouteLeaf(routeLike, fallback = {}) {
|
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
// touched path; unknown paths still fall back to a full session clear.
|
|
5
5
|
import { join, resolve as _pathResolve, isAbsolute as _pathIsAbs, normalize as _pathNorm } from 'node:path';
|
|
6
6
|
import { _normalizeCacheKey } from './util.mjs';
|
|
7
|
-
import {
|
|
8
|
-
hasGlobMagic,
|
|
9
|
-
} from '../../tools/builtin/path-utils.mjs';
|
|
7
|
+
import { hasGlobMagic } from '../../tools/builtin/path-utils.mjs';
|
|
10
8
|
import { prepareGrepArgs } from '../../tools/builtin/arg-guard.mjs';
|
|
11
9
|
import { registerCacheInvalidationListener } from '../../tools/builtin/cache-layers.mjs';
|
|
12
10
|
import { setBoundedTextCacheEntry } from './text-cache-budget.mjs';
|