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
|
@@ -69,9 +69,12 @@ export function QuestionPanel({ questions, columns = 80, rows, onSubmit, onDismi
|
|
|
69
69
|
if (text) commit({ ...s, buf: appendCapped(s.buf, text) });
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
-
usePaste(
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
usePaste(
|
|
73
|
+
(text) => {
|
|
74
|
+
if (ref.current.typing) typeInto(text);
|
|
75
|
+
},
|
|
76
|
+
{ isActive: isRawModeSupported }
|
|
77
|
+
);
|
|
75
78
|
|
|
76
79
|
useInput(
|
|
77
80
|
(input, key) => {
|
|
@@ -232,7 +235,13 @@ export function QuestionPanel({ questions, columns = 80, rows, onSubmit, onDismi
|
|
|
232
235
|
}
|
|
233
236
|
if (plan.below > 0) out.push(moreRow('below', `↓ ${plan.below} more`));
|
|
234
237
|
|
|
235
|
-
const help = questionHelp({
|
|
238
|
+
const help = questionHelp({
|
|
239
|
+
multi,
|
|
240
|
+
typing: state.typing,
|
|
241
|
+
last: state.qi >= last,
|
|
242
|
+
count: n,
|
|
243
|
+
questionCount: questions.length,
|
|
244
|
+
});
|
|
236
245
|
|
|
237
246
|
return (
|
|
238
247
|
<Box flexDirection="column" flexShrink={0} width="100%">
|
package/src/tui/dist/index.mjs
CHANGED
|
@@ -24385,6 +24385,12 @@ var init_file_has_data = __esm({
|
|
|
24385
24385
|
}
|
|
24386
24386
|
});
|
|
24387
24387
|
|
|
24388
|
+
// src/runtime/shared/abort-race.mjs
|
|
24389
|
+
var init_abort_race = __esm({
|
|
24390
|
+
"src/runtime/shared/abort-race.mjs"() {
|
|
24391
|
+
}
|
|
24392
|
+
});
|
|
24393
|
+
|
|
24388
24394
|
// src/runtime/shared/bounded-download.mjs
|
|
24389
24395
|
import { createWriteStream, rmSync as rmSync2 } from "node:fs";
|
|
24390
24396
|
import { Transform as Transform2 } from "node:stream";
|
|
@@ -24458,7 +24464,7 @@ async function streamResponseToFile(response, destPath, { maxBytes, expectedByte
|
|
|
24458
24464
|
var MAX_NATIVE_BINARY_DOWNLOAD_BYTES;
|
|
24459
24465
|
var init_bounded_download = __esm({
|
|
24460
24466
|
"src/runtime/shared/bounded-download.mjs"() {
|
|
24461
|
-
|
|
24467
|
+
init_abort_race();
|
|
24462
24468
|
MAX_NATIVE_BINARY_DOWNLOAD_BYTES = 256 * 1024 * 1024;
|
|
24463
24469
|
}
|
|
24464
24470
|
});
|
|
@@ -40971,16 +40977,7 @@ function summarizeCodeGraphResult({ text, translate }) {
|
|
|
40971
40977
|
if (looksLikeZeroResultText(text)) return translate("No results", "No results");
|
|
40972
40978
|
return null;
|
|
40973
40979
|
}
|
|
40974
|
-
function summarizeFetchResult({ text
|
|
40975
|
-
if (normalized === "fetch") {
|
|
40976
|
-
const a = parseToolArgs(args);
|
|
40977
|
-
const isChannelFetch = !firstText(a.url, a.uri) && Boolean(firstText(a.channel, a.channelId, a.chatId, a.messageId) || a.limit != null);
|
|
40978
|
-
if (isChannelFetch) {
|
|
40979
|
-
const n = countNonEmptyLines(text);
|
|
40980
|
-
if (trimmed && looksLineOriented(text) && n > 0) return countLabel(translate, n, "message");
|
|
40981
|
-
return summarizeGenericResult(text, translate);
|
|
40982
|
-
}
|
|
40983
|
-
}
|
|
40980
|
+
function summarizeFetchResult({ text }) {
|
|
40984
40981
|
const status = /(?:HTTP[\s/]*\d?\.?\d?\s*|status[:\s]+)([1-5]\d{2})\b/i.exec(text) || /\b([1-5]\d{2})\s+(?:OK|Not\s+Found|Forbidden|Moved|Found|Created|No\s+Content|Bad\s+Request|Unauthorized|Internal)/.exec(
|
|
40985
40982
|
text
|
|
40986
40983
|
);
|
|
@@ -41079,7 +41076,7 @@ var summarizeAskUserResult = ({ text, translate }) => {
|
|
|
41079
41076
|
};
|
|
41080
41077
|
var TOOL_RESULT_SUMMARIZERS = new Map(
|
|
41081
41078
|
[
|
|
41082
|
-
[["ask_user"], summarizeAskUserResult],
|
|
41079
|
+
[["ask_user", "handoff_user"], summarizeAskUserResult],
|
|
41083
41080
|
[["read", "view_image", "read_mcp_resource"], summarizeReadResult],
|
|
41084
41081
|
[["apply_patch"], summarizePatchResult],
|
|
41085
41082
|
[["grep"], summarizeGrepResult],
|
|
@@ -41243,6 +41240,7 @@ var TOOL_CATEGORY = /* @__PURE__ */ new Map([
|
|
|
41243
41240
|
["goal", "Setup"],
|
|
41244
41241
|
["request_user_input", "Setup"],
|
|
41245
41242
|
["ask_user", "Setup"],
|
|
41243
|
+
["handoff_user", "Setup"],
|
|
41246
41244
|
["update_plan", "Setup"],
|
|
41247
41245
|
["skill", "Skill"],
|
|
41248
41246
|
["skill_execute", "Skill"],
|
|
@@ -41818,6 +41816,7 @@ var TOOL_UNITS = /* @__PURE__ */ new Map([
|
|
|
41818
41816
|
["code_graph", codeGraphUnit],
|
|
41819
41817
|
["request_user_input", () => unitDescriptor("Setup", { active: "Asking", done: "Asked", noun: "user" })],
|
|
41820
41818
|
["ask_user", () => unitDescriptor("Setup", { active: "Asking", done: "Asked", noun: "user" })],
|
|
41819
|
+
["handoff_user", () => unitDescriptor("Setup", { active: "Asking", done: "Asked", noun: "user" })],
|
|
41821
41820
|
["update_plan", () => unitDescriptor("Setup", { active: "Updating", done: "Updated", noun: "plan" })],
|
|
41822
41821
|
["list_mcp_resources", () => unitDescriptor("Setup", { active: "Listing", done: "Listed", noun: "MCP resource" })],
|
|
41823
41822
|
[
|
|
@@ -41915,6 +41914,7 @@ function displayToolName(name, args = {}) {
|
|
|
41915
41914
|
case "request_user_input":
|
|
41916
41915
|
return "Ask User";
|
|
41917
41916
|
case "ask_user":
|
|
41917
|
+
case "handoff_user":
|
|
41918
41918
|
return "Question";
|
|
41919
41919
|
case "update_plan":
|
|
41920
41920
|
return "Plan";
|
|
@@ -41997,6 +41997,8 @@ function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}) {
|
|
|
41997
41997
|
return summarizeGithub(a, max);
|
|
41998
41998
|
case "goal":
|
|
41999
41999
|
return compactParts([String(a.action || ""), truncateToolText(a.objective, max)]);
|
|
42000
|
+
case "handoff_user":
|
|
42001
|
+
return "";
|
|
42000
42002
|
case "ask_user":
|
|
42001
42003
|
return truncateToolText(
|
|
42002
42004
|
(Array.isArray(a.questions) ? a.questions : []).map((q) => String(q?.header || q?.question || "").trim()).filter(Boolean).join(", "),
|
|
@@ -42494,6 +42496,22 @@ function transportErrorText(error) {
|
|
|
42494
42496
|
return `${TRANSPORT_SENTENCES[verdict.kind]}${detail ? ` (${detail})` : ""}.`;
|
|
42495
42497
|
}
|
|
42496
42498
|
|
|
42499
|
+
// src/runtime/shared/provider-timeout-phase.mjs
|
|
42500
|
+
var TIMEOUT_PHASE = Object.freeze({
|
|
42501
|
+
// The response headers did not arrive in the first-byte window.
|
|
42502
|
+
HEADERS: "headers",
|
|
42503
|
+
// The headers arrived, the first chunk did not.
|
|
42504
|
+
FIRST_CHUNK: "first-chunk",
|
|
42505
|
+
// A stream that already produced output went silent.
|
|
42506
|
+
IDLE: "idle",
|
|
42507
|
+
// A sign-in token refresh did not answer: an auth problem, not a slow model.
|
|
42508
|
+
AUTH: "auth"
|
|
42509
|
+
});
|
|
42510
|
+
function isFirstByteTimeout(err) {
|
|
42511
|
+
const phase = err?.timeoutPhase;
|
|
42512
|
+
return phase === TIMEOUT_PHASE.HEADERS || phase === TIMEOUT_PHASE.FIRST_CHUNK;
|
|
42513
|
+
}
|
|
42514
|
+
|
|
42497
42515
|
// src/runtime/agent/orchestrator/providers/provider-error-kind.mjs
|
|
42498
42516
|
var PROVIDER_ERROR_KINDS = Object.freeze([
|
|
42499
42517
|
"overloaded",
|
|
@@ -43341,20 +43359,6 @@ function describeError(value) {
|
|
|
43341
43359
|
};
|
|
43342
43360
|
}
|
|
43343
43361
|
|
|
43344
|
-
// src/runtime/shared/provider-timeout-phase.mjs
|
|
43345
|
-
var TIMEOUT_PHASE = Object.freeze({
|
|
43346
|
-
// The response headers did not arrive in the first-byte window.
|
|
43347
|
-
HEADERS: "headers",
|
|
43348
|
-
// The headers arrived, the first chunk did not.
|
|
43349
|
-
FIRST_CHUNK: "first-chunk",
|
|
43350
|
-
// A stream that already produced output went silent.
|
|
43351
|
-
IDLE: "idle"
|
|
43352
|
-
});
|
|
43353
|
-
function isFirstByteTimeout(err) {
|
|
43354
|
-
const phase = err?.timeoutPhase;
|
|
43355
|
-
return phase === TIMEOUT_PHASE.HEADERS || phase === TIMEOUT_PHASE.FIRST_CHUNK;
|
|
43356
|
-
}
|
|
43357
|
-
|
|
43358
43362
|
// src/runtime/shared/err-text.mjs
|
|
43359
43363
|
function errorHttpStatus(err) {
|
|
43360
43364
|
return Number(err?.httpStatus || err?.status || err?.response?.status || 0) || 0;
|
|
@@ -43512,16 +43516,16 @@ function hasTypedEvidence(error) {
|
|
|
43512
43516
|
if (!error || typeof error !== "object") return false;
|
|
43513
43517
|
return Boolean(error.errorKind?.kind) || errorHttpStatus(error) > 0 || Boolean(error.code) || Boolean(error.retryAfterMs);
|
|
43514
43518
|
}
|
|
43515
|
-
var timedOutMs = (text) => Number(/timed out after (\d+)ms/i.exec(text)?.[1]) || 0;
|
|
43516
|
-
function stillThinkingText(error, text) {
|
|
43519
|
+
var timedOutMs = (text) => Number(/(?:timed out after|within) (\d+)ms/i.exec(text)?.[1]) || 0;
|
|
43520
|
+
function stillThinkingText(error, text, providerLabel) {
|
|
43517
43521
|
const ms = Number(error.waitedMs) || timedOutMs(text);
|
|
43518
|
-
const provider = typeof
|
|
43522
|
+
const provider = typeof providerLabel === "string" && providerLabel ? providerLabel : "the provider";
|
|
43519
43523
|
const attempts = Number(error.attempts) > 0 ? `; attempts: ${Math.floor(Number(error.attempts))}` : "";
|
|
43520
43524
|
return `Model still thinking: no output in ${formatDurationMs(ms)}; ${provider} sent nothing yet${attempts}.`;
|
|
43521
43525
|
}
|
|
43522
|
-
function typedStreamFailureText(error, text) {
|
|
43526
|
+
function typedStreamFailureText(error, text, providerLabel) {
|
|
43523
43527
|
if (!error || typeof error !== "object") return null;
|
|
43524
|
-
if (isFirstByteTimeout(error)) return stillThinkingText(error, text);
|
|
43528
|
+
if (isFirstByteTimeout(error)) return stillThinkingText(error, text, providerLabel);
|
|
43525
43529
|
if (error.timeoutPhase === TIMEOUT_PHASE.IDLE) {
|
|
43526
43530
|
const ms = timedOutMs(text);
|
|
43527
43531
|
return ms > 0 ? `No progress ${formatDurationMs(ms)}.` : "No progress.";
|
|
@@ -43558,7 +43562,7 @@ function presentErrorText(error, options = {}) {
|
|
|
43558
43562
|
if (embeddedError) text = embeddedError;
|
|
43559
43563
|
text = oneLine(stripErrorPrefix(text));
|
|
43560
43564
|
if (!text) return "Unknown error";
|
|
43561
|
-
const streamFailure = typedStreamFailureText(error, text);
|
|
43565
|
+
const streamFailure = typedStreamFailureText(error, text, options.providerLabel);
|
|
43562
43566
|
if (streamFailure) return streamFailure;
|
|
43563
43567
|
if (code === "PROVIDER_PREFIX_MUTATION" || name === "ProviderPrefixMutationError") {
|
|
43564
43568
|
return "Session state changed unexpectedly.";
|
|
@@ -44283,7 +44287,15 @@ function resolveDisplayedResult(base, { normalizedName, parsedArgs }, translate)
|
|
|
44283
44287
|
}
|
|
44284
44288
|
|
|
44285
44289
|
// src/runtime/shared/tool-card-model/card-status.mjs
|
|
44286
|
-
var ENVELOPE_STATUS_TOOLS = /* @__PURE__ */ new Set([
|
|
44290
|
+
var ENVELOPE_STATUS_TOOLS = /* @__PURE__ */ new Set([
|
|
44291
|
+
"agent",
|
|
44292
|
+
"bridge",
|
|
44293
|
+
"task",
|
|
44294
|
+
"web_search",
|
|
44295
|
+
"search_query",
|
|
44296
|
+
"image_query",
|
|
44297
|
+
"web_search_call"
|
|
44298
|
+
]);
|
|
44287
44299
|
function shellFragments(base, display, isShellSurface) {
|
|
44288
44300
|
if (!isShellSurface) return { shellStatus: "", shellElapsed: "" };
|
|
44289
44301
|
const { pending, failedCount, exitFailedCount, isError, elapsed } = base;
|
|
@@ -54507,9 +54519,12 @@ function QuestionPanel({ questions, columns = 80, rows: rows2, onSubmit, onDismi
|
|
|
54507
54519
|
const text = cleanTyped(input);
|
|
54508
54520
|
if (text) commit({ ...s, buf: appendCapped(s.buf, text) });
|
|
54509
54521
|
};
|
|
54510
|
-
use_paste_default(
|
|
54511
|
-
|
|
54512
|
-
|
|
54522
|
+
use_paste_default(
|
|
54523
|
+
(text) => {
|
|
54524
|
+
if (ref.current.typing) typeInto(text);
|
|
54525
|
+
},
|
|
54526
|
+
{ isActive: isRawModeSupported }
|
|
54527
|
+
);
|
|
54513
54528
|
use_input_default(
|
|
54514
54529
|
(input, key) => {
|
|
54515
54530
|
const s = ref.current;
|
|
@@ -54644,7 +54659,13 @@ function QuestionPanel({ questions, columns = 80, rows: rows2, onSubmit, onDismi
|
|
|
54644
54659
|
else optionRow(item.index);
|
|
54645
54660
|
}
|
|
54646
54661
|
if (plan.below > 0) out.push(moreRow("below", `\u2193 ${plan.below} more`));
|
|
54647
|
-
const help = questionHelp({
|
|
54662
|
+
const help = questionHelp({
|
|
54663
|
+
multi,
|
|
54664
|
+
typing: state.typing,
|
|
54665
|
+
last: state.qi >= last,
|
|
54666
|
+
count: n,
|
|
54667
|
+
questionCount: questions.length
|
|
54668
|
+
});
|
|
54648
54669
|
return /* @__PURE__ */ jsx11(Box_default, { flexDirection: "column", flexShrink: 0, width: "100%", children: /* @__PURE__ */ jsxs9(Box_default, { flexDirection: "column", borderStyle: "round", borderColor: theme.promptBorder, paddingX: 1, width: "100%", children: [
|
|
54649
54670
|
/* @__PURE__ */ jsxs9(Box_default, { flexDirection: "row", justifyContent: "space-between", children: [
|
|
54650
54671
|
/* @__PURE__ */ jsx11(Box_default, { flexShrink: 1, children: /* @__PURE__ */ jsxs9(Text, { wrap: "truncate", children: [
|
|
@@ -56468,7 +56489,15 @@ function renderFloatingPanel(ctx) {
|
|
|
56468
56489
|
);
|
|
56469
56490
|
}
|
|
56470
56491
|
if (btwPanel) {
|
|
56471
|
-
return /* @__PURE__ */ jsx21(
|
|
56492
|
+
return /* @__PURE__ */ jsx21(
|
|
56493
|
+
BtwPanel,
|
|
56494
|
+
{
|
|
56495
|
+
panel: btwPanel,
|
|
56496
|
+
columns: frameColumns,
|
|
56497
|
+
panelRows: floatingPanelRows,
|
|
56498
|
+
themeEpoch: ctx.state?.themeEpoch || 0
|
|
56499
|
+
}
|
|
56500
|
+
);
|
|
56472
56501
|
}
|
|
56473
56502
|
return null;
|
|
56474
56503
|
}
|
|
@@ -59516,6 +59545,34 @@ function isRollingModelAlias(id) {
|
|
|
59516
59545
|
return /-latest$/i.test(String(id || "").trim());
|
|
59517
59546
|
}
|
|
59518
59547
|
|
|
59548
|
+
// src/runtime/shared/provider-display-name.mjs
|
|
59549
|
+
var PROVIDER_DISPLAY_NAMES = /* @__PURE__ */ new Map([
|
|
59550
|
+
["openai-oauth", "OpenAI OAuth"],
|
|
59551
|
+
["anthropic-oauth", "Anthropic OAuth"],
|
|
59552
|
+
["grok-oauth", "Grok OAuth"],
|
|
59553
|
+
["muse-code-oauth", "Muse Code"],
|
|
59554
|
+
["command-code-oauth", "Command Code"],
|
|
59555
|
+
["mimo-oauth", "MiMo"],
|
|
59556
|
+
["cursor-oauth", "Cursor OAuth"],
|
|
59557
|
+
["devin-oauth", "Devin"],
|
|
59558
|
+
["antigravity-oauth", "Antigravity OAuth"],
|
|
59559
|
+
["openai", "OpenAI API"],
|
|
59560
|
+
["openai-api", "OpenAI API"],
|
|
59561
|
+
["anthropic", "Anthropic API"],
|
|
59562
|
+
["anthropic-api", "Anthropic API"],
|
|
59563
|
+
["gemini", "Gemini API"],
|
|
59564
|
+
["gemini-api", "Gemini API"],
|
|
59565
|
+
["xai", "xAI API"],
|
|
59566
|
+
["xai-api", "xAI API"],
|
|
59567
|
+
["deepseek", "DeepSeek API"],
|
|
59568
|
+
["deepseek-api", "DeepSeek API"],
|
|
59569
|
+
["opencode-go-oauth", "OpenCode Go OAuth"],
|
|
59570
|
+
["openrouter", "OpenRouter"],
|
|
59571
|
+
["mixdog-local", "Local Provider"],
|
|
59572
|
+
["default", "Default"]
|
|
59573
|
+
]);
|
|
59574
|
+
var providerDisplayName = (provider) => PROVIDER_DISPLAY_NAMES.get(String(provider || "").toLowerCase()) ?? (provider || "Provider");
|
|
59575
|
+
|
|
59519
59576
|
// src/runtime/shared/llm/openai-daybreak.mjs
|
|
59520
59577
|
var DAYBREAK_PROVIDER = "openai-oauth";
|
|
59521
59578
|
var DAYBREAK_PARAMETER_ID = "daybreak";
|
|
@@ -59663,32 +59720,6 @@ var normalizeModelOptions = (models) => {
|
|
|
59663
59720
|
}
|
|
59664
59721
|
return normalized;
|
|
59665
59722
|
};
|
|
59666
|
-
var PROVIDER_DISPLAY_NAMES = /* @__PURE__ */ new Map([
|
|
59667
|
-
["openai-oauth", "OpenAI OAuth"],
|
|
59668
|
-
["anthropic-oauth", "Anthropic OAuth"],
|
|
59669
|
-
["grok-oauth", "Grok OAuth"],
|
|
59670
|
-
["muse-code-oauth", "Muse Code"],
|
|
59671
|
-
["command-code-oauth", "Command Code"],
|
|
59672
|
-
["mimo-oauth", "MiMo"],
|
|
59673
|
-
["cursor-oauth", "Cursor OAuth"],
|
|
59674
|
-
["devin-oauth", "Devin"],
|
|
59675
|
-
["antigravity-oauth", "Antigravity OAuth"],
|
|
59676
|
-
["openai", "OpenAI API"],
|
|
59677
|
-
["openai-api", "OpenAI API"],
|
|
59678
|
-
["anthropic", "Anthropic API"],
|
|
59679
|
-
["anthropic-api", "Anthropic API"],
|
|
59680
|
-
["gemini", "Gemini API"],
|
|
59681
|
-
["gemini-api", "Gemini API"],
|
|
59682
|
-
["xai", "xAI API"],
|
|
59683
|
-
["xai-api", "xAI API"],
|
|
59684
|
-
["deepseek", "DeepSeek API"],
|
|
59685
|
-
["deepseek-api", "DeepSeek API"],
|
|
59686
|
-
["opencode-go-oauth", "OpenCode Go OAuth"],
|
|
59687
|
-
["openrouter", "OpenRouter"],
|
|
59688
|
-
["mixdog-local", "Local Provider"],
|
|
59689
|
-
["default", "Default"]
|
|
59690
|
-
]);
|
|
59691
|
-
var providerDisplayName = (provider) => PROVIDER_DISPLAY_NAMES.get(String(provider || "").toLowerCase()) ?? (provider || "Provider");
|
|
59692
59723
|
var resolveProviderDisplayName = (provider, providerNames = null) => String(provider || "").trim().startsWith("custom-") && providerNames?.[String(provider).trim()] || providerDisplayName(provider);
|
|
59693
59724
|
var loadProviderDisplayNames = async (store) => {
|
|
59694
59725
|
let setup = null;
|
|
@@ -60257,6 +60288,11 @@ var hiddenSpawnOpts = Object.freeze({
|
|
|
60257
60288
|
});
|
|
60258
60289
|
|
|
60259
60290
|
// src/runtime/shared/open-url.mjs
|
|
60291
|
+
function canOpenBrowser(env4 = process.env, platform2 = process.platform, wsl = isWSL()) {
|
|
60292
|
+
if (env4.SSH_TTY || env4.SSH_CONNECTION) return false;
|
|
60293
|
+
if (platform2 !== "linux" || wsl) return true;
|
|
60294
|
+
return Boolean(env4.DISPLAY || env4.WAYLAND_DISPLAY);
|
|
60295
|
+
}
|
|
60260
60296
|
function openInBrowser(url) {
|
|
60261
60297
|
const u = String(url);
|
|
60262
60298
|
let candidates;
|
|
@@ -60471,7 +60507,7 @@ function showOAuthProgress(flow, providerItem, message, onBack) {
|
|
|
60471
60507
|
value: "waiting",
|
|
60472
60508
|
label: "Waiting for login",
|
|
60473
60509
|
meta: "Running",
|
|
60474
|
-
description: "finish the
|
|
60510
|
+
description: "finish the sign-in shown above",
|
|
60475
60511
|
_action: "waiting"
|
|
60476
60512
|
},
|
|
60477
60513
|
{
|
|
@@ -60513,6 +60549,20 @@ function showOAuthResult(flow, providerItem, ok, message = "") {
|
|
|
60513
60549
|
onCancel: leave
|
|
60514
60550
|
});
|
|
60515
60551
|
}
|
|
60552
|
+
function oauthCodeHint(manualUrl, loginUrl, providerName) {
|
|
60553
|
+
if (manualUrl) return "If the browser callback does not finish, open the URL below manually and paste code#state.";
|
|
60554
|
+
if (loginUrl) {
|
|
60555
|
+
return `Open the URL below to sign in, then paste the authorization code or full redirect URL for ${providerName}.`;
|
|
60556
|
+
}
|
|
60557
|
+
return `Paste the authorization code or full redirect URL for ${providerName}.`;
|
|
60558
|
+
}
|
|
60559
|
+
function pollingLoginMessage(userCode, loginUrl, opened) {
|
|
60560
|
+
if (userCode) return `Enter code ${userCode} at:
|
|
60561
|
+
${loginUrl}${opened}`;
|
|
60562
|
+
if (loginUrl) return `Open this URL to sign in:
|
|
60563
|
+
${loginUrl}${opened}`;
|
|
60564
|
+
return "Finish signing in for this provider.";
|
|
60565
|
+
}
|
|
60516
60566
|
function beginInteractiveOAuthLogin(flow, providerItem, login) {
|
|
60517
60567
|
let handled = false;
|
|
60518
60568
|
const providerName = providerItem._providerName || providerItem._providerId || "OAuth";
|
|
@@ -60531,20 +60581,21 @@ function beginInteractiveOAuthLogin(flow, providerItem, login) {
|
|
|
60531
60581
|
message || (ok ? `${providerName} login complete.` : `${providerName} login failed.`)
|
|
60532
60582
|
);
|
|
60533
60583
|
};
|
|
60534
|
-
|
|
60584
|
+
const openBrowser = canOpenBrowser();
|
|
60585
|
+
void flow.store.beginOAuthProviderLogin(providerItem._providerId, { openBrowser }).then((started) => {
|
|
60586
|
+
const loginUrl = started?.manualUrl || started?.url || "";
|
|
60535
60587
|
if (typeof started?.completeCode === "function") {
|
|
60536
60588
|
if (!flow.ownsSurface()) return;
|
|
60537
60589
|
flow.releaseSurface();
|
|
60538
|
-
const manualUrl = started?.manualUrl || "";
|
|
60539
60590
|
flow.setProviderPrompt({
|
|
60540
60591
|
kind: "oauth-code",
|
|
60541
60592
|
providerId: providerItem._providerId,
|
|
60542
60593
|
providerName,
|
|
60543
60594
|
label: `${providerName} OAuth code`,
|
|
60544
|
-
hint: manualUrl
|
|
60595
|
+
hint: oauthCodeHint(started?.manualUrl, loginUrl, providerName),
|
|
60545
60596
|
// Shown inside the live panel only — never written to the
|
|
60546
60597
|
// transcript, so it cannot linger in scrollback after the flow.
|
|
60547
|
-
detail:
|
|
60598
|
+
detail: loginUrl,
|
|
60548
60599
|
login: started,
|
|
60549
60600
|
afterSave: flow.returnTo,
|
|
60550
60601
|
successReturn: () => {
|
|
@@ -60558,16 +60609,12 @@ function beginInteractiveOAuthLogin(flow, providerItem, login) {
|
|
|
60558
60609
|
}
|
|
60559
60610
|
});
|
|
60560
60611
|
flow.store.pushNotice(
|
|
60561
|
-
`browser opened for ${providerName}; paste code/redirect here if callback does not finish`,
|
|
60562
|
-
"info"
|
|
60563
|
-
);
|
|
60564
|
-
} else if (started?.userCode) {
|
|
60565
|
-
flow.store.pushNotice(
|
|
60566
|
-
`${providerName}: enter code ${started.userCode} in the browser to finish signing in`,
|
|
60612
|
+
openBrowser ? `browser opened for ${providerName}; paste code/redirect here if callback does not finish` : `open the URL shown to sign in to ${providerName}, then paste the code/redirect here`,
|
|
60567
60613
|
"info"
|
|
60568
60614
|
);
|
|
60569
|
-
} else {
|
|
60570
|
-
|
|
60615
|
+
} else if (!login.backedOut && flow.ownsSurface()) {
|
|
60616
|
+
const opened = openBrowser ? " (browser opened)" : "";
|
|
60617
|
+
showOAuthProgress(flow, providerItem, pollingLoginMessage(started?.userCode, loginUrl, opened), login.onBack);
|
|
60571
60618
|
}
|
|
60572
60619
|
started.waitForCallback?.then((result) => {
|
|
60573
60620
|
if (result && !flow.oauthSubmitRef.current) finish(true, `${providerName} login complete`);
|
|
@@ -60594,11 +60641,14 @@ function runLegacyOAuthLogin(flow, providerItem, login) {
|
|
|
60594
60641
|
});
|
|
60595
60642
|
}
|
|
60596
60643
|
function startOAuthLogin(flow, providerItem) {
|
|
60597
|
-
const login = {
|
|
60598
|
-
|
|
60599
|
-
|
|
60600
|
-
|
|
60601
|
-
|
|
60644
|
+
const login = {
|
|
60645
|
+
backedOut: false,
|
|
60646
|
+
onBack: () => {
|
|
60647
|
+
login.backedOut = true;
|
|
60648
|
+
openOAuthProviderActions(flow, providerItem);
|
|
60649
|
+
}
|
|
60650
|
+
};
|
|
60651
|
+
showOAuthProgress(flow, providerItem, "Starting login flow\u2026", login.onBack);
|
|
60602
60652
|
if (typeof flow.store.beginOAuthProviderLogin === "function") {
|
|
60603
60653
|
beginInteractiveOAuthLogin(flow, providerItem, login);
|
|
60604
60654
|
return;
|
|
@@ -61102,9 +61152,7 @@ function createFastParameterSelection({ state, currentRoute, isCurrentRoute, isS
|
|
|
61102
61152
|
return true;
|
|
61103
61153
|
};
|
|
61104
61154
|
const cycleThinking = (model) => {
|
|
61105
|
-
const definition = (model.modelParameterOptions || []).find(
|
|
61106
|
-
(parameter) => TOGGLE_PARAMETER_IDS.has(parameter.id)
|
|
61107
|
-
);
|
|
61155
|
+
const definition = (model.modelParameterOptions || []).find((parameter) => TOGGLE_PARAMETER_IDS.has(parameter.id));
|
|
61108
61156
|
if (!definition?.options?.length) return false;
|
|
61109
61157
|
const wanted = definition.id;
|
|
61110
61158
|
const parameters = modelParametersFor(model);
|
|
@@ -62368,13 +62416,6 @@ function canonicalizeStoredChannelsConfig(value = {}) {
|
|
|
62368
62416
|
const next = isPlainObject(value) ? { ...value } : {};
|
|
62369
62417
|
delete next.promptInjection;
|
|
62370
62418
|
delete next.schedules;
|
|
62371
|
-
delete next.nonInteractive;
|
|
62372
|
-
delete next.interactive;
|
|
62373
|
-
delete next.backend;
|
|
62374
|
-
delete next.provider;
|
|
62375
|
-
delete next.discord;
|
|
62376
|
-
delete next.telegram;
|
|
62377
|
-
delete next.channel;
|
|
62378
62419
|
return next;
|
|
62379
62420
|
}
|
|
62380
62421
|
function canonicalizeUnifiedConfig(value = {}) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { readImageAttachmentFromPath } from '../../paste-attachments.mjs';
|
|
2
|
+
import { PROMPT_ORIGIN_CHANNEL } from '../../../runtime/agent/orchestrator/session/manager/pending-message-entry.mjs';
|
|
2
3
|
|
|
3
4
|
// Channel inbound images arrive as a JSON-array-of-paths meta value (stringified
|
|
4
5
|
// across the notify IPC boundary). Parse defensively; a malformed value simply
|
|
@@ -44,6 +45,8 @@ export function createModelNotificationEnqueue({ chain, enqueue, getState, getDi
|
|
|
44
45
|
priority: 'later',
|
|
45
46
|
key: notificationKey || undefined,
|
|
46
47
|
displayText: delivery.displayText || text,
|
|
48
|
+
// Its provenance (an inbound channel message) rides beside the mode.
|
|
49
|
+
...(event?.origin === PROMPT_ORIGIN_CHANNEL ? { origin: PROMPT_ORIGIN_CHANNEL } : {}),
|
|
47
50
|
};
|
|
48
51
|
// Image load failed or overran its budget: still deliver the text body so
|
|
49
52
|
// the notification is never silently lost.
|
|
@@ -26,6 +26,9 @@ export function createInitialSessionState({ runtime, runtimeCwd, baseRouteState
|
|
|
26
26
|
queued: [],
|
|
27
27
|
thinking: null,
|
|
28
28
|
toolApproval: null,
|
|
29
|
+
// Approvals waiting behind the shown one (its own, and copies of sessions
|
|
30
|
+
// it delegated or handed work to): the dock's "1/N".
|
|
31
|
+
toolApprovalsWaiting: 0,
|
|
29
32
|
// How the last approval ended and from which device, so every device can
|
|
30
33
|
// say who answered ({ id, approved, device, at }).
|
|
31
34
|
toolApprovalResult: null,
|
|
@@ -40,6 +40,8 @@ export function createNoticeSurface({ getState, set, isDisposed, pushItem, repla
|
|
|
40
40
|
: polishNoticeText(text);
|
|
41
41
|
if (!value && !options.room) return null;
|
|
42
42
|
const forceTranscript = options.transcript === true;
|
|
43
|
+
// A message posted from the stored record keeps its stored time.
|
|
44
|
+
const storedAt = Number.isFinite(options.at) ? options.at : null;
|
|
43
45
|
if (!forceTranscript) return pushToast(value, tone, options.ttlMs, options);
|
|
44
46
|
// The agent's own message posted outside a turn (agent-home-delivery.mjs):
|
|
45
47
|
// its reply row, as the stored message restores.
|
|
@@ -50,8 +52,9 @@ export function createNoticeSurface({ getState, set, isDisposed, pushItem, repla
|
|
|
50
52
|
id,
|
|
51
53
|
text: value,
|
|
52
54
|
streaming: false,
|
|
53
|
-
at: Date.now(),
|
|
55
|
+
at: storedAt ?? Date.now(),
|
|
54
56
|
...(options.messageId ? { messageId: options.messageId } : {}),
|
|
57
|
+
...(options.posted ? { posted: true } : {}),
|
|
55
58
|
});
|
|
56
59
|
return id;
|
|
57
60
|
}
|
|
@@ -85,6 +88,9 @@ export function createNoticeSurface({ getState, set, isDisposed, pushItem, repla
|
|
|
85
88
|
// A held request of an unattended run (human-gate/held-message.mjs).
|
|
86
89
|
...(options.heldRequest ? { heldRequest: options.heldRequest } : {}),
|
|
87
90
|
...(options.messageId ? { messageId: options.messageId } : {}),
|
|
91
|
+
...(storedAt !== null ? { at: storedAt } : {}),
|
|
92
|
+
// Posted outside any turn: its own turn key (transcript-turn-keys.mjs).
|
|
93
|
+
...(options.posted ? { posted: true } : {}),
|
|
88
94
|
});
|
|
89
95
|
return id;
|
|
90
96
|
};
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* flattening, session activity timestamps, and batch merging.
|
|
5
5
|
*/
|
|
6
6
|
import { agentJobResultText, parseAgentJob, parseSyntheticAgentMessage } from './agent-envelope.mjs';
|
|
7
|
-
import {
|
|
7
|
+
import { isAttachmentReference } from '../../runtime/attachments/store.mjs';
|
|
8
|
+
import { promptContentText, sessionActivityTimestamp } from '../../runtime/shared/idle-auto-clear-gate.mjs';
|
|
8
9
|
import { recognisedSlashToken } from '../app/slash-commands.mjs';
|
|
9
10
|
|
|
10
11
|
const QUEUE_PRIORITY = { now: 0, next: 1, later: 2 };
|
|
@@ -82,47 +83,7 @@ export function notificationDisplayText(text) {
|
|
|
82
83
|
return firstQueueLine(synthetic?.result || result || text) || 'agent notification';
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
export
|
|
86
|
-
if (typeof content === 'string') return content;
|
|
87
|
-
if (Array.isArray(content)) {
|
|
88
|
-
return content
|
|
89
|
-
.map((part) => {
|
|
90
|
-
if (typeof part === 'string') return part;
|
|
91
|
-
if (part?.type === 'text') return isAttachmentReference(part) ? attachmentTextForPart(part) : part.text || '';
|
|
92
|
-
if (part?.type === 'image') return '[Image]';
|
|
93
|
-
if (part?.type === 'file') return '[File]';
|
|
94
|
-
return part?.text || '';
|
|
95
|
-
})
|
|
96
|
-
.filter(Boolean)
|
|
97
|
-
.join('\n');
|
|
98
|
-
}
|
|
99
|
-
return String(content ?? '');
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function timestampMs(value) {
|
|
103
|
-
if (value == null || value === '') return 0;
|
|
104
|
-
const n = Number(value);
|
|
105
|
-
if (Number.isFinite(n) && n > 0) return n;
|
|
106
|
-
const parsed = Date.parse(String(value));
|
|
107
|
-
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function hasModelVisibleConversation(session) {
|
|
111
|
-
const messages = Array.isArray(session?.messages) ? session.messages : [];
|
|
112
|
-
return messages.some((message) => {
|
|
113
|
-
const role = message?.role;
|
|
114
|
-
if (role !== 'user' && role !== 'assistant' && role !== 'tool') return false;
|
|
115
|
-
const text = promptContentText(message.content).trim();
|
|
116
|
-
if (role === 'user' && text.startsWith('<system-reminder>')) return false;
|
|
117
|
-
if (role === 'assistant' && text === '.' && !Array.isArray(message.toolCalls)) return false;
|
|
118
|
-
return !!text || role === 'assistant' || role === 'tool';
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function sessionActivityTimestamp(session, fallback = 0) {
|
|
123
|
-
if (!hasModelVisibleConversation(session)) return 0;
|
|
124
|
-
return timestampMs(session?.lastUsedAt) || timestampMs(session?.updatedAt) || timestampMs(fallback);
|
|
125
|
-
}
|
|
86
|
+
export { promptContentText, sessionActivityTimestamp };
|
|
126
87
|
|
|
127
88
|
export function promptDisplayText(content, options = {}) {
|
|
128
89
|
if (typeof options.displayText === 'string' && options.displayText.trim()) return options.displayText;
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* routes-agent-definitions.mjs — the session route surface's passthroughs to
|
|
3
3
|
* the runtime's agent, workflow-pack, connector and lead-identity services.
|
|
4
4
|
*/
|
|
5
|
+
|
|
6
|
+
/** Mixy's status with `exists`, the one rule (mixy-presence.mjs) the desktop
|
|
7
|
+
* answers from (main/mixy-first.ts). null when her routines cannot be read:
|
|
8
|
+
* the status still serves readers of her name. */
|
|
9
|
+
async function withMixyExists(status) {
|
|
10
|
+
if (!status || typeof status !== 'object') return status;
|
|
11
|
+
const { readMixyExists } = await import('../../../session-runtime/routine-owner.mjs');
|
|
12
|
+
return { ...status, exists: await readMixyExists(status).catch(() => null) };
|
|
13
|
+
}
|
|
14
|
+
|
|
5
15
|
export function createAgentDefinitionApi(runtime) {
|
|
6
16
|
return {
|
|
7
17
|
listAgents: () => {
|
|
@@ -53,8 +63,10 @@ export function createAgentDefinitionApi(runtime) {
|
|
|
53
63
|
saveLeadPersona: async (text) => runtime.saveLeadPersona?.(text) ?? '',
|
|
54
64
|
getLeadAgentBody: () => runtime.getLeadAgentBody?.() ?? '',
|
|
55
65
|
saveLeadAgentBody: async (text) => runtime.saveLeadAgentBody?.(text) ?? '',
|
|
56
|
-
getLeadStatus: () =>
|
|
57
|
-
|
|
66
|
+
getLeadStatus: async () =>
|
|
67
|
+
withMixyExists(
|
|
68
|
+
runtime.getLeadStatus?.() ?? { created: null, name: '', avatar: null, homeChatted: false, route: null }
|
|
69
|
+
),
|
|
58
70
|
getLeadHomeRoute: () => runtime.getLeadHomeRoute?.() ?? null,
|
|
59
71
|
saveLeadIdentity: async (payload) => runtime.saveLeadIdentity?.(payload) ?? null,
|
|
60
72
|
setLeadCreated: async (created, description) => runtime.setLeadCreated?.(created, description) ?? null,
|
|
@@ -54,14 +54,18 @@ const SESSION_ONLY_KEYS = new Set(['provider', 'model', 'effort', 'fast', 'autoE
|
|
|
54
54
|
* the tuning, or both. Completed here, inside the serialized route write,
|
|
55
55
|
* against the latest selected route — so a Fast-only change keeps the effort a
|
|
56
56
|
* previous write selected. `unchanged` when it asks for nothing the selected
|
|
57
|
-
* route does not already have
|
|
57
|
+
* route does not already have and the session itself already runs that model
|
|
58
|
+
* (a fallback hop moves the session, not the selected route).
|
|
58
59
|
*/
|
|
59
60
|
function completeSessionOnlyRequest(request, selected) {
|
|
60
61
|
const named = Boolean(request.provider || request.model);
|
|
61
62
|
const target = named ? request : { ...request, provider: selected.provider, model: selected.model };
|
|
62
63
|
const sameModel = target.provider === selected.provider && target.model === selected.model;
|
|
63
64
|
if (!sameModel) return { request: target, unchanged: false };
|
|
65
|
+
const sessionOnTarget =
|
|
66
|
+
!selected.sessionModel || (selected.sessionProvider === target.provider && selected.sessionModel === target.model);
|
|
64
67
|
const unchanged =
|
|
68
|
+
sessionOnTarget &&
|
|
65
69
|
Object.keys(request).every((key) => SESSION_ONLY_KEYS.has(key)) &&
|
|
66
70
|
(request.effort === undefined || request.effort === selected.effort) &&
|
|
67
71
|
(request.fast === undefined || request.fast === (selected.fast === true)) &&
|
|
@@ -128,6 +128,7 @@ export function createSessionRouteApi(bag) {
|
|
|
128
128
|
return result;
|
|
129
129
|
}),
|
|
130
130
|
getOrchestrationMode: () => runtime.getOrchestrationMode(),
|
|
131
|
+
getConfiguredOrchestrationMode: () => runtime.getConfiguredOrchestrationMode(),
|
|
131
132
|
setOrchestrationMode: withCommandLock(async (mode, options) => {
|
|
132
133
|
const result = await runtime.setOrchestrationMode(mode, options);
|
|
133
134
|
publishSessionSwitches(bag, { orchestrationModeSwitch: result?.orchestrationModeSwitch });
|
|
@@ -112,12 +112,28 @@ export function createSessionSettingsApi(bag) {
|
|
|
112
112
|
setAiSessionTitles: withCommandLock(async (enabled) => {
|
|
113
113
|
return await runtime.setAiSessionTitles?.(enabled);
|
|
114
114
|
}),
|
|
115
|
+
getCacheWarmingSettings: () => {
|
|
116
|
+
return runtime.getCacheWarmingSettings?.() || { enabled: true };
|
|
117
|
+
},
|
|
118
|
+
setCacheWarmingEnabled: withCommandLock(async (enabled) => {
|
|
119
|
+
return await runtime.setCacheWarmingEnabled?.(enabled);
|
|
120
|
+
}),
|
|
115
121
|
getHeartbeatSettings: () => {
|
|
116
|
-
return runtime.getHeartbeatSettings?.() || { heartbeat: true };
|
|
122
|
+
return runtime.getHeartbeatSettings?.() || { heartbeat: true, intervalMinutes: 60 };
|
|
117
123
|
},
|
|
118
124
|
setHeartbeatEnabled: withCommandLock(async (enabled) => {
|
|
119
125
|
return await runtime.setHeartbeatEnabled?.(enabled);
|
|
120
126
|
}),
|
|
127
|
+
setHeartbeatInterval: withCommandLock(async (minutes) => {
|
|
128
|
+
return await runtime.setHeartbeatInterval?.(minutes);
|
|
129
|
+
}),
|
|
130
|
+
// The desktop app reports the user's latest in-app input time: Mixy's
|
|
131
|
+
// heartbeat waits for 30 quiet minutes (mixy-heartbeat.mjs noteUserInput).
|
|
132
|
+
noteUserInput: async (at) => {
|
|
133
|
+
const { noteUserInput } = await import('../../../session-runtime/mixy-heartbeat.mjs');
|
|
134
|
+
noteUserInput(at);
|
|
135
|
+
return { ok: true };
|
|
136
|
+
},
|
|
121
137
|
getReactionSettings: () => {
|
|
122
138
|
return runtime.getReactionSettings?.() || { reactions: true };
|
|
123
139
|
},
|