@vellumai/assistant 0.12.1-staging.1 → 0.12.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/AGENTS.md +0 -4
- package/ARCHITECTURE.md +12 -11
- package/docs/architecture/turn-actor.md +8 -15
- package/openapi.yaml +1 -291
- package/package.json +1 -1
- package/src/__tests__/always-loaded-tools-guard.test.ts +10 -18
- package/src/__tests__/app-compiler.test.ts +0 -6
- package/src/__tests__/app-control-tool-schemas.test.ts +2 -5
- package/src/__tests__/app-dir-path-guard.test.ts +3 -1
- package/src/__tests__/app-source-watcher.test.ts +218 -0
- package/src/{calls/__tests__ → __tests__}/call-controller.test.ts +82 -503
- package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +2 -5
- package/src/__tests__/computer-use-tools.test.ts +5 -17
- package/src/__tests__/config-schema-cmd.test.ts +2 -2
- package/src/__tests__/config-schema.test.ts +29 -28
- package/src/__tests__/config-watcher-skill-reseed.test.ts +359 -0
- package/src/__tests__/config-watcher.test.ts +8 -23
- package/src/__tests__/connection-model-compat.test.ts +2 -2
- package/src/__tests__/conversation-key-store-disk-view.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +0 -26
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +10 -4
- package/src/__tests__/conversation-queue.test.ts +207 -48
- package/src/__tests__/conversation-retry-discard.test.ts +1 -54
- package/src/__tests__/conversation-skill-tools.test.ts +0 -27
- package/src/__tests__/conversation-surfaces-app-control.test.ts +3 -8
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -67
- package/src/__tests__/conversation-title-service.test.ts +10 -14
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +5 -3
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -51
- package/src/__tests__/credential-record-retire.test.ts +1 -171
- package/src/__tests__/credential-routes.test.ts +3 -212
- package/src/__tests__/credential-security-invariants.test.ts +1 -2
- package/src/__tests__/cu-unified-flow.test.ts +2 -8
- package/src/__tests__/drain-kick-guard.test.ts +2 -0
- package/src/__tests__/drain-requeue-on-contention.test.ts +6 -0
- package/src/__tests__/evict-conversations-for-reload.test.ts +1 -1
- package/src/__tests__/host-bash-proxy.test.ts +45 -26
- package/src/__tests__/host-browser-proxy.test.ts +17 -6
- package/src/__tests__/host-file-proxy-targeted.test.ts +0 -23
- package/src/__tests__/host-file-proxy.test.ts +23 -11
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +9 -30
- package/src/__tests__/llm-catalog-parity.test.ts +0 -25
- package/src/__tests__/mcp-auth-routes.test.ts +9 -6
- package/src/__tests__/mcp-config-secret-boundary.test.ts +136 -78
- package/src/__tests__/mcp-health-check.test.ts +11 -8
- package/src/__tests__/mcp-list-plugin-servers.test.ts +10 -8
- package/src/{calls/__tests__ → __tests__}/media-stream-audio-transcode.test.ts +1 -1
- package/src/{calls/__tests__ → __tests__}/media-stream-output.test.ts +8 -37
- package/src/{calls/__tests__ → __tests__}/media-stream-parser.test.ts +1 -1
- package/src/{calls/__tests__ → __tests__}/media-stream-server-integration.test.ts +57 -150
- package/src/{calls/__tests__ → __tests__}/media-stream-stt-session.test.ts +5 -5
- package/src/{calls/__tests__ → __tests__}/media-turn-detector.test.ts +1 -1
- package/src/__tests__/messages-after-tiebreaker.test.ts +0 -91
- package/src/__tests__/messages-read-boundary-guard.test.ts +1 -1
- package/src/__tests__/messaging-send-tool.test.ts +548 -355
- package/src/__tests__/model-intents.test.ts +0 -3
- package/src/__tests__/outlook-messaging-provider.test.ts +6 -6
- package/src/__tests__/platform-client-verify-credential.test.ts +0 -2
- package/src/__tests__/plugin-import-boundary-guard.test.ts +0 -13
- package/src/__tests__/script-proxy-certs.test.ts +0 -35
- package/src/__tests__/skill-feature-flags-integration.test.ts +1 -1
- package/src/__tests__/skill-feature-flags.test.ts +2 -2
- package/src/__tests__/speaker-identification.test.ts +56 -0
- package/src/__tests__/subagent-tool-gate-mode.test.ts +3 -19
- package/src/__tests__/subagent-tools.test.ts +2 -3
- package/src/__tests__/telephony-tts-guard.test.ts +3 -38
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +0 -4
- package/src/{calls/__tests__/voice-session-bridge-turn-flow.test.ts → __tests__/voice-session-bridge.test.ts} +12 -20
- package/src/__tests__/watch-retro-tool-availability.test.ts +17 -8
- package/src/__tests__/workspace-git-service.test.ts +0 -26
- package/src/acp/__tests__/agent-process.test.ts +4 -258
- package/src/acp/__tests__/auth-required.test.ts +0 -96
- package/src/acp/__tests__/client-handler.test.ts +2 -90
- package/src/acp/__tests__/session-manager-persistence.test.ts +1 -5
- package/src/acp/__tests__/session-manager-resume.test.ts +6 -270
- package/src/acp/__tests__/session-manager-usage.test.ts +2 -4
- package/src/acp/__tests__/session-manager.test.ts +4 -895
- package/src/acp/agent-process.test.ts +1 -4
- package/src/acp/agent-process.ts +9 -94
- package/src/acp/auth-required.ts +1 -50
- package/src/acp/auto-install.test.ts +7 -9
- package/src/acp/client-handler.ts +3 -16
- package/src/acp/resolve-agent.test.ts +6 -220
- package/src/acp/resolve-agent.ts +23 -88
- package/src/acp/session-manager.test.ts +3 -196
- package/src/acp/session-manager.ts +18 -441
- package/src/acp/types.ts +5 -50
- package/src/api/events/app-files-changed.ts +3 -4
- package/src/api/index.ts +0 -6
- package/src/apps/app-store.ts +1 -1
- package/src/bundler/app-compiler.ts +0 -15
- package/src/calls/__tests__/voice-control-protocol.test.ts +25 -58
- package/src/calls/__tests__/voice-session-bridge.test.ts +1 -37
- package/src/calls/__tests__/voice-triage-escalate.test.ts +0 -105
- package/src/calls/call-constants.ts +4 -24
- package/src/calls/call-controller.ts +199 -499
- package/src/calls/call-transport.ts +0 -16
- package/src/calls/media-stream-output.ts +0 -32
- package/src/calls/media-stream-server.ts +30 -82
- package/src/calls/media-stream-stt-session.ts +0 -15
- package/src/calls/resolve-call-tts-provider.ts +2 -33
- package/src/calls/speaker-identification.ts +233 -0
- package/src/calls/tts-call-strategy.ts +5 -9
- package/src/calls/types.ts +0 -2
- package/src/calls/voice-control-protocol.ts +21 -53
- package/src/calls/voice-session-bridge.ts +46 -59
- package/src/calls/voice-triage-escalate.ts +56 -175
- package/src/cli/commands/apps.help.ts +13 -67
- package/src/cli/commands/apps.ts +0 -183
- package/src/cli/commands/channels/index.help.ts +2 -70
- package/src/cli/commands/channels/index.ts +3 -16
- package/src/cli/commands/credentials.help.ts +2 -6
- package/src/cli/commands/credentials.ts +2 -2
- package/src/cli/commands/mcp.help.ts +8 -8
- package/src/cli/commands/mcp.ts +1 -1
- package/src/cli/commands/roadmap.help.ts +1 -5
- package/src/cli/commands/roadmap.ts +1 -1
- package/src/cli/lib/bundled-marketplace.json +90 -103
- package/src/config/__tests__/default-profile-catalog.test.ts +0 -22
- package/src/config/__tests__/memory-retrospective-schema.test.ts +1 -15
- package/src/config/__tests__/platform-rehydration.test.ts +0 -93
- package/src/config/acp-defaults.test.ts +3 -13
- package/src/config/acp-defaults.ts +6 -23
- package/src/config/acp-schema.ts +2 -30
- package/src/config/bundled-skills/acp/SKILL.md +14 -22
- package/src/config/bundled-skills/acp/TOOLS.json +1 -5
- package/src/config/bundled-skills/app-builder/SKILL.md +9 -12
- package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +1 -1
- package/src/config/bundled-skills/messaging/TOOLS.json +3 -3
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +139 -67
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +1 -1
- package/src/config/bundled-skills/screen-annotation/SKILL.md +1 -8
- package/src/config/bundled-skills/screen-annotation/tools/screen-annotation.test.ts +1 -4
- package/src/config/bundled-skills/skill-management/TOOLS.json +2 -2
- package/src/config/default-profile-catalog.ts +1 -1
- package/src/config/env.ts +2 -2
- package/src/config/feature-flag-registry.json +12 -8
- package/src/config/memory-v3-gate.test.ts +0 -31
- package/src/config/memory-v3-gate.ts +16 -20
- package/src/config/platform-rehydration.ts +21 -75
- package/src/config/schema.ts +2 -2
- package/src/config/schemas/__tests__/live-voice.test.ts +158 -8
- package/src/config/schemas/calls.ts +28 -1
- package/src/config/schemas/live-voice.ts +173 -1
- package/src/config/schemas/mcp.ts +1 -1
- package/src/config/schemas/memory-retrospective.ts +0 -10
- package/src/config/schemas/skills.ts +14 -0
- package/src/credential-execution/process-manager.test.ts +19 -18
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +121 -66
- package/src/daemon/__tests__/plugin-mcp-reconcile.test.ts +1 -4
- package/src/daemon/app-source-watcher.ts +218 -0
- package/src/daemon/config-watcher.ts +194 -13
- package/src/daemon/conversation-process.ts +64 -35
- package/src/daemon/conversation-skill-tools.ts +31 -13
- package/src/daemon/conversation-store.ts +1 -1
- package/src/daemon/conversation-surfaces.ts +8 -10
- package/src/daemon/conversation-tool-setup.ts +43 -37
- package/src/daemon/conversation.ts +3 -0
- package/src/daemon/host-bash-proxy.ts +12 -8
- package/src/daemon/host-browser-proxy.ts +1 -15
- package/src/daemon/host-file-proxy.ts +10 -8
- package/src/daemon/host-transfer-proxy.ts +18 -14
- package/src/daemon/lifecycle.ts +5 -0
- package/src/daemon/mcp-reload-service.ts +5 -5
- package/src/daemon/message-types/sync.ts +0 -1
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/shutdown-handlers.ts +9 -1
- package/src/daemon/skill-memory-refresh.ts +0 -64
- package/src/daemon/tool-side-effects.ts +18 -7
- package/src/hooks/types.ts +0 -33
- package/src/inbound/platform-callback-registration.ts +5 -4
- package/src/live-voice/__tests__/live-voice-metrics.test.ts +3 -0
- package/src/live-voice/__tests__/live-voice-progress.test.ts +15 -15
- package/src/live-voice/__tests__/live-voice-vad.test.ts +2 -2
- package/src/{calls → live-voice}/__tests__/progress-narration.test.ts +4 -4
- package/src/{calls → live-voice}/__tests__/progress-phrases.test.ts +1 -1
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +69 -13
- package/src/live-voice/live-voice-session.ts +693 -213
- package/src/{calls → live-voice}/progress-narration.ts +2 -2
- package/src/live-voice/protocol.ts +2 -0
- package/src/mcp/__tests__/effective-config.test.ts +2 -2
- package/src/mcp/effective-config.ts +3 -3
- package/src/mcp/mcp-header-store.ts +45 -29
- package/src/mcp/startup.ts +4 -8
- package/src/messaging/provider.ts +3 -10
- package/src/messaging/providers/callback-routing.ts +0 -18
- package/src/messaging/providers/channel-transport.ts +0 -56
- package/src/messaging/providers/discord/transport.ts +0 -17
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +17 -6
- package/src/messaging/providers/slack/adapter.ts +44 -7
- package/src/messaging/providers/slack/transport.ts +0 -16
- package/src/messaging/providers/telegram-bot/adapter.ts +48 -1
- package/src/messaging/providers/telegram-bot/client.ts +26 -0
- package/src/messaging/providers/telegram-bot/transport.ts +0 -20
- package/src/messaging/providers/whatsapp/adapter.ts +48 -1
- package/src/messaging/providers/whatsapp/client.ts +29 -0
- package/src/messaging/providers/whatsapp/transport.ts +0 -18
- package/src/monitoring/__tests__/workspace-git-heartbeat.test.ts +0 -8
- package/src/notifications/__tests__/assistant-reply-producer.test.ts +0 -55
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +3 -153
- package/src/notifications/assistant-reply-producer.ts +3 -8
- package/src/notifications/conversation-pairing.ts +16 -36
- package/src/notifications/delivered-post-record.ts +1 -11
- package/src/notifications/home-feed-side-effect.ts +7 -55
- package/src/outbound-proxy/certs.ts +5 -3
- package/src/permissions/checker.test.ts +6 -11
- package/src/persistence/compaction-log-store-clickhouse.ts +3 -3
- package/src/persistence/conversation-crud.ts +63 -71
- package/src/persistence/conversation-lineage.ts +4 -12
- package/src/persistence/conversation-title-service.ts +26 -9
- package/src/persistence/llm-request-log-sink-clickhouse.ts +3 -3
- package/src/persistence/llm-request-log-source-clickhouse.ts +3 -3
- package/src/persistence/message-reads.ts +0 -30
- package/src/persistence/migrations/157-invite-contact-id.ts +6 -18
- package/src/persistence/schema/memory-core.ts +0 -5
- package/src/platform/client.test.ts +0 -2
- package/src/platform/client.ts +10 -2
- package/src/plugin-api/constants.ts +0 -2
- package/src/plugin-api/index.ts +0 -1
- package/src/plugin-api/types.ts +0 -2
- package/src/plugins/defaults/index.ts +0 -2
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-accounting.test.ts +0 -46
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +5 -9
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +10 -20
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-state.test.ts +0 -219
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-sweep.test.ts +0 -31
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-trigger-check.test.ts +0 -63
- package/src/plugins/defaults/memory/__tests__/shutdown-hook.test.ts +0 -4
- package/src/plugins/defaults/memory/graph/capability-seed.ts +6 -4
- package/src/plugins/defaults/memory/hooks/init.ts +0 -10
- package/src/plugins/defaults/memory/hooks/shutdown.ts +0 -2
- package/src/plugins/defaults/memory/jobs-worker.ts +0 -13
- package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +60 -34
- package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +5 -3
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +3 -12
- package/src/plugins/defaults/memory/memory-retrospective-state.ts +71 -312
- package/src/plugins/defaults/memory/memory-retrospective-sweep.ts +1 -2
- package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +3 -5
- package/src/plugins/defaults/memory/startup.ts +1 -6
- package/src/plugins/defaults/memory/substrate/__tests__/skill-content.test.ts +9 -7
- package/src/plugins/defaults/memory/substrate/skill-content.ts +2 -2
- package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +0 -89
- package/src/plugins/defaults/memory/worker.ts +0 -6
- package/src/plugins/mcp-servers.ts +75 -15
- package/src/providers/__tests__/connection-model-compat.test.ts +3 -3
- package/src/providers/gemini/client.ts +23 -9
- package/src/providers/model-catalog.ts +0 -34
- package/src/providers/model-intents.ts +5 -10
- package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +18 -146
- package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +1 -83
- package/src/providers/openai/chat-completions-provider.ts +78 -192
- package/src/providers/openai/codex-models.ts +4 -0
- package/src/runtime/AGENTS.md +0 -2
- package/src/runtime/auth/same-actor.ts +3 -38
- package/src/runtime/http-server.ts +151 -160
- package/src/runtime/routes/__tests__/acp-routes.test.ts +4 -159
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +1 -108
- package/src/runtime/routes/__tests__/mcp-add-default-risk.test.ts +12 -16
- package/src/runtime/routes/acp-routes.test.ts +0 -15
- package/src/runtime/routes/acp-routes.ts +9 -72
- package/src/runtime/routes/app-management-routes.ts +0 -73
- package/src/runtime/routes/app-routes.ts +1 -1
- package/src/runtime/routes/conversation-list-routes.ts +3 -14
- package/src/runtime/routes/conversation-query-routes.ts +0 -40
- package/src/runtime/routes/credential-routes.ts +10 -19
- package/src/runtime/routes/diagnostics-routes.ts +3 -55
- package/src/runtime/routes/index.ts +0 -4
- package/src/runtime/routes/log-export-routes.ts +0 -2
- package/src/runtime/routes/mcp-auth-routes.ts +47 -39
- package/src/runtime/routes/migration-routes.ts +21 -8
- package/src/runtime/routes/platform-routes.ts +15 -18
- package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -28
- package/src/runtime/services/conversation-serializer.ts +3 -16
- package/src/runtime/sync/resource-sync-events.ts +1 -2
- package/src/schedule/worker.ts +1 -1
- package/src/security/ces-rpc-record-backend.ts +0 -7
- package/src/subagent/consult-context.ts +25 -12
- package/src/tools/acp/list-agents.test.ts +1 -3
- package/src/tools/acp/spawn.test.ts +11 -146
- package/src/tools/acp/spawn.ts +3 -21
- package/src/tools/acp/status.ts +3 -40
- package/src/tools/app-control/skill-proxy-bridge.ts +1 -2
- package/src/tools/capability-offer.test.ts +2 -22
- package/src/tools/capability-offer.ts +1 -16
- package/src/tools/computer-use/definitions.ts +2 -4
- package/src/tools/computer-use/skill-proxy-bridge.ts +1 -2
- package/src/tools/credentials/metadata-store.ts +0 -100
- package/src/tools/host-filesystem/edit.test.ts +1 -2
- package/src/tools/host-filesystem/edit.ts +2 -2
- package/src/tools/host-filesystem/read.test.ts +1 -2
- package/src/tools/host-filesystem/read.ts +2 -2
- package/src/tools/host-filesystem/transfer.test.ts +1 -2
- package/src/tools/host-filesystem/transfer.ts +2 -2
- package/src/tools/host-filesystem/write.test.ts +1 -2
- package/src/tools/host-filesystem/write.ts +2 -2
- package/src/tools/host-terminal/host-shell.test.ts +0 -16
- package/src/tools/host-terminal/host-shell.ts +20 -4
- package/src/tools/policy-context.ts +7 -6
- package/src/tools/subagent/spawn.ts +8 -5
- package/src/tools/watch/watch-retro-report.ts +8 -0
- package/src/util/__tests__/language-subtag.test.ts +1 -23
- package/src/util/fs-watcher-error.ts +36 -0
- package/src/util/language-subtag.ts +0 -16
- package/src/util/platform.ts +0 -8
- package/src/workspace/git-service.ts +54 -5
- package/src/workspace/migrations/registry.ts +0 -6
- package/scripts/smoke-desktop-window-theme.ts +0 -186
- package/src/__tests__/git-porcelain.test.ts +0 -47
- package/src/__tests__/helpers/set-workspace-mcp.ts +0 -11
- package/src/__tests__/message-deleted-hook-dispatch.test.ts +0 -119
- package/src/__tests__/resolve-app.test.ts +0 -135
- package/src/__tests__/source-fingerprint.test.ts +0 -184
- package/src/__tests__/workspace-migration-154-repair-retired-codex-gpt-5-4-model-ids.test.ts +0 -336
- package/src/acp/__tests__/helpers/acp-model-option.ts +0 -51
- package/src/acp/model-config.test.ts +0 -166
- package/src/acp/model-config.ts +0 -138
- package/src/api/events/acp-session-model-update.test.ts +0 -88
- package/src/api/events/acp-session-model-update.ts +0 -46
- package/src/apps/resolve-app.ts +0 -81
- package/src/apps/source-fingerprint.ts +0 -266
- package/src/calls/__tests__/barge-in-guard.test.ts +0 -81
- package/src/calls/__tests__/voice-leg-coordinator.test.ts +0 -229
- package/src/calls/__tests__/voice-progress-cadence.test.ts +0 -274
- package/src/calls/barge-in-guard.ts +0 -118
- package/src/calls/voice-leg-coordinator.ts +0 -189
- package/src/calls/voice-progress-cadence.ts +0 -423
- package/src/cli/commands/__tests__/apps.test.ts +0 -245
- package/src/cli/commands/__tests__/roadmap.help.test.ts +0 -19
- package/src/cli/commands/channels/__tests__/send.test.ts +0 -218
- package/src/cli/commands/channels/send.ts +0 -128
- package/src/config/__tests__/platform-identity.test.ts +0 -117
- package/src/config/acp-agent-write.ts +0 -43
- package/src/config/acp-schema.test.ts +0 -81
- package/src/config/platform-identity.ts +0 -144
- package/src/config/schemas/__tests__/voice.test.ts +0 -148
- package/src/config/schemas/voice.ts +0 -150
- package/src/daemon/__tests__/skill-memory-refresh-mtime.test.ts +0 -133
- package/src/daemon/app-change-notify.ts +0 -45
- package/src/desktop/__tests__/fake-desktop.ts +0 -119
- package/src/desktop/desktop-chrome-policy.test.ts +0 -71
- package/src/desktop/desktop-chrome-policy.ts +0 -42
- package/src/desktop/desktop-dependencies.test.ts +0 -102
- package/src/desktop/desktop-dependencies.ts +0 -306
- package/src/desktop/desktop-feature.test.ts +0 -18
- package/src/desktop/desktop-feature.ts +0 -19
- package/src/desktop/desktop-panel-config.test.ts +0 -135
- package/src/desktop/desktop-panel-config.ts +0 -149
- package/src/desktop/desktop-session-manager.test.ts +0 -627
- package/src/desktop/desktop-session-manager.ts +0 -814
- package/src/desktop/desktop-stream-bridge.test.ts +0 -395
- package/src/desktop/desktop-stream-bridge.ts +0 -214
- package/src/desktop/desktop-wallpaper.test.ts +0 -191
- package/src/desktop/desktop-wallpaper.ts +0 -113
- package/src/desktop/desktop-window-theme.ts +0 -170
- package/src/i18n/AGENTS.md +0 -22
- package/src/i18n/__tests__/i18n.test.ts +0 -108
- package/src/i18n/index.ts +0 -16
- package/src/i18n/locales.ts +0 -93
- package/src/i18n/messages.ts +0 -61
- package/src/i18n/title.ts +0 -25
- package/src/mcp/__tests__/workspace-mcp-config.test.ts +0 -135
- package/src/mcp/spec-schema.ts +0 -111
- package/src/mcp/workspace-mcp-config.ts +0 -188
- package/src/messaging/providers/__tests__/proactive-address.test.ts +0 -95
- package/src/persistence/conversation-title-placeholders.ts +0 -23
- package/src/persistence/message-cursor.ts +0 -78
- package/src/persistence/migrations/__tests__/157-invite-contact-id.test.ts +0 -149
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-backfill.test.ts +0 -118
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-cursor-preserve.test.ts +0 -83
- package/src/plugins/defaults/memory/hooks/message-deleted.ts +0 -21
- package/src/plugins/defaults/memory/memory-retrospective-cursor-backfill.ts +0 -126
- package/src/plugins/defaults/memory/memory-retrospective-cursor-preserve.ts +0 -79
- package/src/plugins/defaults/memory/memory-retrospective-cursor.ts +0 -28
- package/src/plugins/defaults/memory/skill-md-mtime-poll.ts +0 -9
- package/src/providers/gemini-thought-signature.test.ts +0 -63
- package/src/providers/gemini-thought-signature.ts +0 -44
- package/src/providers/openai/__tests__/chat-completions-provider-thought-signature.test.ts +0 -613
- package/src/providers/openai/__tests__/google-thought-signature.test.ts +0 -235
- package/src/providers/openai/google-thought-signature.ts +0 -320
- package/src/runtime/__tests__/channel-send.test.ts +0 -443
- package/src/runtime/__tests__/desktop-stream-upgrade.test.ts +0 -89
- package/src/runtime/__tests__/live-voice-upgrade.test.ts +0 -58
- package/src/runtime/__tests__/runtime-ws-test-utils.ts +0 -72
- package/src/runtime/__tests__/watch-stream-upgrade.test.ts +0 -59
- package/src/runtime/channel-send.ts +0 -316
- package/src/runtime/routes/__tests__/apps-refresh-route.test.ts +0 -205
- package/src/runtime/routes/__tests__/channel-send-routes.test.ts +0 -127
- package/src/runtime/routes/__tests__/dictation-cleanup-guard.test.ts +0 -107
- package/src/runtime/routes/channel-send-routes.ts +0 -85
- package/src/runtime/routes/desktop-setup-routes.test.ts +0 -74
- package/src/runtime/routes/desktop-setup-routes.ts +0 -35
- package/src/security/__tests__/ces-http-record-backend.test.ts +0 -137
- package/src/security/ces-http-record-backend.ts +0 -120
- package/src/skills/__tests__/workspace-skill-md-signature.test.ts +0 -60
- package/src/skills/workspace-skill-md-signature.ts +0 -50
- package/src/tools/acp/status.test.ts +0 -94
- package/src/util/ca-bundle.ts +0 -13
- package/src/workspace/git-porcelain.ts +0 -66
- package/src/workspace/migrations/154-repair-retired-codex-gpt-5-4-model-ids.ts +0 -258
- package/src/workspace/migrations/155-move-front-model-config-to-voice.ts +0 -78
- package/src/workspace/migrations/156-extract-workspace-mcp-json.ts +0 -214
- package/src/workspace/migrations/__tests__/155-move-front-model-config-to-voice.test.ts +0 -102
- package/src/workspace/migrations/__tests__/156-extract-workspace-mcp-json.test.ts +0 -199
- /package/src/{calls → live-voice}/progress-phrases.ts +0 -0
|
@@ -78,6 +78,12 @@ function makeFakeConversation(options: {
|
|
|
78
78
|
setTransportHints: () => {
|
|
79
79
|
mutationCalls.push("setTransportHints");
|
|
80
80
|
},
|
|
81
|
+
setTrustContext: () => {
|
|
82
|
+
mutationCalls.push("setTrustContext");
|
|
83
|
+
},
|
|
84
|
+
ensureActorScopedHistory: async () => {
|
|
85
|
+
mutationCalls.push("ensureActorScopedHistory");
|
|
86
|
+
},
|
|
81
87
|
emitActivityState: () => {
|
|
82
88
|
mutationCalls.push("emitActivityState");
|
|
83
89
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `evictConversationsForReload` drops in-memory conversations after a
|
|
3
|
-
* config/prompt reload so the next turn rebuilds them against the new
|
|
3
|
+
* config/prompt/skills reload so the next turn rebuilds them against the new
|
|
4
4
|
* config. Queued messages live only on the instance being disposed, so the
|
|
5
5
|
* same "not idle while a queue is pending" rule the periodic evictor applies
|
|
6
6
|
* has to hold here: `isProcessing()` reads false in the window between a turn
|
|
@@ -669,31 +669,23 @@ describe("HostBashProxy", () => {
|
|
|
669
669
|
expect(sentMessages).toHaveLength(0);
|
|
670
670
|
});
|
|
671
671
|
|
|
672
|
-
test("
|
|
672
|
+
test("rejects ambiguously when multiple same-user capable clients are connected and no targetClientId", async () => {
|
|
673
|
+
// Regression: previously fell through to untargeted broadcast, fanning
|
|
674
|
+
// a single targeted-style request out across every same-user machine.
|
|
673
675
|
setup();
|
|
674
676
|
setupMultipleClients(["client-1", "client-2", "client-3"]);
|
|
675
677
|
|
|
676
|
-
const
|
|
678
|
+
const result = await proxy.request(
|
|
677
679
|
{ command: "echo hello" },
|
|
678
680
|
"session-1",
|
|
679
681
|
undefined,
|
|
680
682
|
"user-A",
|
|
681
683
|
);
|
|
682
684
|
|
|
683
|
-
|
|
684
|
-
expect(
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
| undefined;
|
|
688
|
-
expect(options?.targetClientId).toBe("client-1");
|
|
689
|
-
|
|
690
|
-
proxy.resolveResult(sent.requestId as string, {
|
|
691
|
-
stdout: "hello\n",
|
|
692
|
-
stderr: "",
|
|
693
|
-
exitCode: 0,
|
|
694
|
-
timedOut: false,
|
|
695
|
-
});
|
|
696
|
-
expect((await resultPromise).isError).toBe(false);
|
|
685
|
+
expect(result.isError).toBe(true);
|
|
686
|
+
expect(result.content).toContain("target_client_id");
|
|
687
|
+
// No broadcast happened
|
|
688
|
+
expect(sentMessages).toHaveLength(0);
|
|
697
689
|
});
|
|
698
690
|
|
|
699
691
|
test("falls through to broadcast when zero capable clients (existing timeout path)", async () => {
|
|
@@ -840,19 +832,30 @@ describe("HostBashProxy", () => {
|
|
|
840
832
|
expect(sentMessages).toHaveLength(0);
|
|
841
833
|
});
|
|
842
834
|
|
|
843
|
-
test("
|
|
835
|
+
test("untargeted local flow unchanged when no auto-resolve match", async () => {
|
|
844
836
|
setup();
|
|
837
|
+
// No capable clients connected — untargeted path runs.
|
|
845
838
|
|
|
846
|
-
const
|
|
839
|
+
const resultPromise = proxy.request(
|
|
847
840
|
{ command: "echo hello" },
|
|
848
841
|
"session-1",
|
|
849
842
|
undefined,
|
|
850
843
|
"user-A",
|
|
851
844
|
);
|
|
852
845
|
|
|
853
|
-
expect(
|
|
854
|
-
|
|
855
|
-
expect(
|
|
846
|
+
expect(sentMessages).toHaveLength(1);
|
|
847
|
+
const sent = sentMessages[0] as Record<string, unknown>;
|
|
848
|
+
expect(sent.type).toBe("host_bash_request");
|
|
849
|
+
expect(sent.targetClientId).toBeUndefined();
|
|
850
|
+
|
|
851
|
+
const requestId = sent.requestId as string;
|
|
852
|
+
proxy.resolveResult(requestId, {
|
|
853
|
+
stdout: "hello\n",
|
|
854
|
+
stderr: "",
|
|
855
|
+
exitCode: 0,
|
|
856
|
+
timedOut: false,
|
|
857
|
+
});
|
|
858
|
+
await resultPromise;
|
|
856
859
|
});
|
|
857
860
|
|
|
858
861
|
test("auto-resolve to same-user client succeeds", async () => {
|
|
@@ -880,20 +883,36 @@ describe("HostBashProxy", () => {
|
|
|
880
883
|
await resultPromise;
|
|
881
884
|
});
|
|
882
885
|
|
|
883
|
-
test("
|
|
886
|
+
test("auto-resolve to different-user client falls through to untargeted", async () => {
|
|
884
887
|
setup();
|
|
888
|
+
// Single capable client owned by user-B; caller is user-A.
|
|
885
889
|
setupSingleClient("client-abc", "user-B");
|
|
886
890
|
|
|
887
|
-
const
|
|
891
|
+
const resultPromise = proxy.request(
|
|
888
892
|
{ command: "echo hello" },
|
|
889
893
|
"session-1",
|
|
890
894
|
undefined,
|
|
891
895
|
"user-A",
|
|
892
896
|
);
|
|
893
897
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
expect(sentMessages).toHaveLength(
|
|
898
|
+
// Auto-resolve must NOT pick the cross-user client; the untargeted
|
|
899
|
+
// broadcast path runs instead.
|
|
900
|
+
expect(sentMessages).toHaveLength(1);
|
|
901
|
+
const sent = sentMessages[0] as Record<string, unknown>;
|
|
902
|
+
expect(sent.type).toBe("host_bash_request");
|
|
903
|
+
expect(sent.targetClientId).toBeUndefined();
|
|
904
|
+
|
|
905
|
+
const opts = sentMessageOptions[0] as Record<string, unknown> | undefined;
|
|
906
|
+
expect(opts?.targetClientId).toBeUndefined();
|
|
907
|
+
|
|
908
|
+
const requestId = sent.requestId as string;
|
|
909
|
+
proxy.resolveResult(requestId, {
|
|
910
|
+
stdout: "hello\n",
|
|
911
|
+
stderr: "",
|
|
912
|
+
exitCode: 0,
|
|
913
|
+
timedOut: false,
|
|
914
|
+
});
|
|
915
|
+
await resultPromise;
|
|
897
916
|
});
|
|
898
917
|
});
|
|
899
918
|
});
|
|
@@ -608,17 +608,22 @@ describe("HostBrowserProxy", () => {
|
|
|
608
608
|
},
|
|
609
609
|
];
|
|
610
610
|
|
|
611
|
-
const
|
|
611
|
+
const resultPromise = proxy.request(
|
|
612
612
|
{ cdpMethod: "Page.navigate", cdpParams: { url: "https://a.test" } },
|
|
613
613
|
"session-1",
|
|
614
614
|
undefined,
|
|
615
615
|
"user-1",
|
|
616
616
|
);
|
|
617
617
|
|
|
618
|
-
|
|
619
|
-
|
|
618
|
+
// Auto-resolution filters out the cross-user candidate, so the
|
|
619
|
+
// proxy falls into the existing "no active extension connection"
|
|
620
|
+
// rejection — we never broadcast to a different actor's client.
|
|
621
|
+
await expect(resultPromise).rejects.toThrow(
|
|
622
|
+
"no active extension connection",
|
|
623
|
+
);
|
|
620
624
|
expect(getPublishedMessages()).toHaveLength(0);
|
|
621
625
|
});
|
|
626
|
+
|
|
622
627
|
test("prefers the chrome-extension client over a more-recently-active macOS bridge", async () => {
|
|
623
628
|
// Mock `listClientsByCapability` returns mockClients in array
|
|
624
629
|
// order, which mirrors production's `lastActiveAt`-desc ordering.
|
|
@@ -715,6 +720,11 @@ describe("HostBrowserProxy", () => {
|
|
|
715
720
|
});
|
|
716
721
|
|
|
717
722
|
test("rejects when caller has actor but no host_browser-capable client is connected for that actor", async () => {
|
|
723
|
+
// Same-user filter returns empty even though listClientsByCapability
|
|
724
|
+
// would return a non-empty list (because that list is for a
|
|
725
|
+
// different actor). The unfiltered fallback path runs only when
|
|
726
|
+
// the caller has no actor — we don't silently broadcast to anyone
|
|
727
|
+
// when the caller IS authenticated to a specific actor.
|
|
718
728
|
mockClients = [
|
|
719
729
|
{
|
|
720
730
|
clientId: "other-user-ext",
|
|
@@ -724,15 +734,16 @@ describe("HostBrowserProxy", () => {
|
|
|
724
734
|
},
|
|
725
735
|
];
|
|
726
736
|
|
|
727
|
-
const
|
|
737
|
+
const resultPromise = proxy.request(
|
|
728
738
|
{ cdpMethod: "Page.navigate", cdpParams: { url: "https://a.test" } },
|
|
729
739
|
"session-1",
|
|
730
740
|
undefined,
|
|
731
741
|
"user-1",
|
|
732
742
|
);
|
|
733
743
|
|
|
734
|
-
expect(
|
|
735
|
-
|
|
744
|
+
await expect(resultPromise).rejects.toThrow(
|
|
745
|
+
"no active extension connection",
|
|
746
|
+
);
|
|
736
747
|
expect(getPublishedMessages()).toHaveLength(0);
|
|
737
748
|
});
|
|
738
749
|
});
|
|
@@ -274,29 +274,6 @@ describe("HostFileProxy — targetClientId (Phase 2)", () => {
|
|
|
274
274
|
});
|
|
275
275
|
});
|
|
276
276
|
|
|
277
|
-
test("selects the most recently active same-user client when several are connected", async () => {
|
|
278
|
-
setup();
|
|
279
|
-
setupMultipleClients(["client-1", "client-2"]);
|
|
280
|
-
|
|
281
|
-
const resultPromise = proxy.request(
|
|
282
|
-
{ operation: "read", path: "/tmp/file.txt" },
|
|
283
|
-
"session-1",
|
|
284
|
-
undefined,
|
|
285
|
-
undefined,
|
|
286
|
-
TEST_PRINCIPAL,
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
const sent = sentMessages[0] as Record<string, unknown>;
|
|
290
|
-
expect(sent.targetClientId).toBe("client-1");
|
|
291
|
-
const options = sentMessageOptions[0] as
|
|
292
|
-
| Record<string, unknown>
|
|
293
|
-
| undefined;
|
|
294
|
-
expect(options?.targetClientId).toBe("client-1");
|
|
295
|
-
|
|
296
|
-
proxy.resolve(sent.requestId as string, { content: "ok", isError: false });
|
|
297
|
-
expect((await resultPromise).isError).toBe(false);
|
|
298
|
-
});
|
|
299
|
-
|
|
300
277
|
// ── targetClientId in cancel (abort signal) ──────────────────────────
|
|
301
278
|
|
|
302
279
|
describe("targetClientId in cancel — abort signal", () => {
|
|
@@ -746,8 +746,9 @@ describe("HostFileProxy", () => {
|
|
|
746
746
|
expect(sentMessages).toHaveLength(0);
|
|
747
747
|
});
|
|
748
748
|
|
|
749
|
-
test("
|
|
749
|
+
test("untargeted request with no auto-resolve match still broadcasts (legacy path unchanged)", async () => {
|
|
750
750
|
setup();
|
|
751
|
+
// No matching same-user clients available.
|
|
751
752
|
mockClients = [
|
|
752
753
|
{
|
|
753
754
|
clientId: "client-A",
|
|
@@ -756,18 +757,23 @@ describe("HostFileProxy", () => {
|
|
|
756
757
|
},
|
|
757
758
|
];
|
|
758
759
|
|
|
759
|
-
const
|
|
760
|
+
const resultPromise = proxy.request(
|
|
760
761
|
{ operation: "read", path: "/tmp/test.txt" },
|
|
761
762
|
"session-1",
|
|
762
763
|
undefined,
|
|
763
764
|
undefined,
|
|
764
|
-
"user-B",
|
|
765
|
+
"user-B", // No same-user match → no auto-resolve, broadcast untargeted.
|
|
765
766
|
);
|
|
766
767
|
|
|
767
|
-
expect(
|
|
768
|
-
|
|
769
|
-
expect(
|
|
768
|
+
expect(sentMessages).toHaveLength(1);
|
|
769
|
+
const sent = sentMessages[0] as Record<string, unknown>;
|
|
770
|
+
expect(sent.targetClientId).toBeUndefined();
|
|
771
|
+
const requestId = sent.requestId as string;
|
|
772
|
+
|
|
773
|
+
proxy.resolve(requestId, { content: "ok", isError: false });
|
|
774
|
+
await resultPromise;
|
|
770
775
|
});
|
|
776
|
+
|
|
771
777
|
test("auto-resolve picks the same-user client when there's exactly one", async () => {
|
|
772
778
|
setup();
|
|
773
779
|
mockClients = [
|
|
@@ -801,7 +807,7 @@ describe("HostFileProxy", () => {
|
|
|
801
807
|
await resultPromise;
|
|
802
808
|
});
|
|
803
809
|
|
|
804
|
-
test("
|
|
810
|
+
test("auto-resolve falls through when no client matches the source user", async () => {
|
|
805
811
|
setup();
|
|
806
812
|
mockClients = [
|
|
807
813
|
{
|
|
@@ -811,7 +817,7 @@ describe("HostFileProxy", () => {
|
|
|
811
817
|
},
|
|
812
818
|
];
|
|
813
819
|
|
|
814
|
-
const
|
|
820
|
+
const resultPromise = proxy.request(
|
|
815
821
|
{ operation: "read", path: "/tmp/test.txt" },
|
|
816
822
|
"session-1",
|
|
817
823
|
undefined,
|
|
@@ -819,10 +825,16 @@ describe("HostFileProxy", () => {
|
|
|
819
825
|
"user-C",
|
|
820
826
|
);
|
|
821
827
|
|
|
822
|
-
|
|
823
|
-
expect(
|
|
824
|
-
|
|
828
|
+
// No same-user client → no auto-resolve, broadcast untargeted.
|
|
829
|
+
expect(sentMessages).toHaveLength(1);
|
|
830
|
+
const sent = sentMessages[0] as Record<string, unknown>;
|
|
831
|
+
expect(sent.targetClientId).toBeUndefined();
|
|
832
|
+
const requestId = sent.requestId as string;
|
|
833
|
+
|
|
834
|
+
proxy.resolve(requestId, { content: "ok", isError: false });
|
|
835
|
+
await resultPromise;
|
|
825
836
|
});
|
|
837
|
+
|
|
826
838
|
test("legacy embedded targetClientId in input still goes through the same-user gate", async () => {
|
|
827
839
|
setup();
|
|
828
840
|
mockClients = [
|
|
@@ -812,7 +812,7 @@ describe("HostTransferProxy — targetClientId", () => {
|
|
|
812
812
|
await resultPromise;
|
|
813
813
|
});
|
|
814
814
|
|
|
815
|
-
test("requestToHost:
|
|
815
|
+
test("requestToHost: auto-resolve falls through when no client matches the source user", async () => {
|
|
816
816
|
setup();
|
|
817
817
|
mockClientRegistry.set("client-A", {
|
|
818
818
|
clientId: "client-A",
|
|
@@ -824,7 +824,7 @@ describe("HostTransferProxy — targetClientId", () => {
|
|
|
824
824
|
const srcPath = `/tmp/htp-auto-no-match-${Date.now()}.txt`;
|
|
825
825
|
await globalThis.Bun.write(srcPath, "data");
|
|
826
826
|
|
|
827
|
-
const
|
|
827
|
+
const resultPromise = proxy.requestToHost(
|
|
828
828
|
{
|
|
829
829
|
sourcePath: srcPath,
|
|
830
830
|
destPath: "/host/dest.txt",
|
|
@@ -835,9 +835,13 @@ describe("HostTransferProxy — targetClientId", () => {
|
|
|
835
835
|
"user-C",
|
|
836
836
|
);
|
|
837
837
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
expect(
|
|
838
|
+
await waitForMessages(sentMessages, 1);
|
|
839
|
+
const sent = sentMessages[0] as Record<string, unknown>;
|
|
840
|
+
expect(sent.targetClientId).toBeUndefined();
|
|
841
|
+
|
|
842
|
+
const requestId = sent.requestId as string;
|
|
843
|
+
proxy.resolveTransferResult(requestId, { isError: false });
|
|
844
|
+
await resultPromise;
|
|
841
845
|
});
|
|
842
846
|
|
|
843
847
|
test("requestToSandbox: targeted request from a different user is rejected", async () => {
|
|
@@ -893,31 +897,6 @@ describe("HostTransferProxy — targetClientId", () => {
|
|
|
893
897
|
await resultPromise;
|
|
894
898
|
});
|
|
895
899
|
|
|
896
|
-
test("requestToSandbox: rejects when no client matches the source user", async () => {
|
|
897
|
-
setup();
|
|
898
|
-
const a: MockClient = {
|
|
899
|
-
clientId: "client-A",
|
|
900
|
-
capabilities: ["host_file"],
|
|
901
|
-
actorPrincipalId: "user-A",
|
|
902
|
-
};
|
|
903
|
-
mockCapableClients = [a];
|
|
904
|
-
mockClientRegistry.set("client-A", a);
|
|
905
|
-
|
|
906
|
-
const result = await proxy.requestToSandbox(
|
|
907
|
-
{
|
|
908
|
-
sourcePath: "/host/source.txt",
|
|
909
|
-
destPath: "/sandbox/dest.txt",
|
|
910
|
-
conversationId: "conv-same-9-no-match",
|
|
911
|
-
},
|
|
912
|
-
undefined,
|
|
913
|
-
"user-C",
|
|
914
|
-
);
|
|
915
|
-
|
|
916
|
-
expect(result).toMatchObject({ isError: true });
|
|
917
|
-
expect(result.content).toContain("belongs to this user");
|
|
918
|
-
expect(sentMessages).toHaveLength(0);
|
|
919
|
-
});
|
|
920
|
-
|
|
921
900
|
test("requestToSandbox: auto-resolve picks the same-user client when there's exactly one", async () => {
|
|
922
901
|
setup();
|
|
923
902
|
const a: MockClient = {
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
getCatalogProviderForModel,
|
|
7
7
|
isModelInCatalog,
|
|
8
8
|
PROVIDER_CATALOG,
|
|
9
|
-
supportsForcedToolChoiceWithThinking,
|
|
10
9
|
} from "../providers/model-catalog.js";
|
|
11
10
|
import { PLATFORM_PROVIDER_META } from "../providers/platform-proxy/constants.js";
|
|
12
11
|
import { resolvePricing, resolvePricingForUsage } from "../util/pricing.js";
|
|
@@ -552,30 +551,6 @@ describe("LLM catalog parity: daemon vs client", () => {
|
|
|
552
551
|
expect(getCatalogProviderForModel("unknown/model")).toBeUndefined();
|
|
553
552
|
});
|
|
554
553
|
|
|
555
|
-
test("forced tool choice with thinking is scoped to OpenRouter Kimi K2.6", () => {
|
|
556
|
-
expect(
|
|
557
|
-
supportsForcedToolChoiceWithThinking("openrouter", "moonshotai/kimi-k2.6"),
|
|
558
|
-
).toBe(false);
|
|
559
|
-
expect(
|
|
560
|
-
supportsForcedToolChoiceWithThinking(
|
|
561
|
-
"openrouter",
|
|
562
|
-
"moonshotai/kimi-k2.6-20260420",
|
|
563
|
-
),
|
|
564
|
-
).toBe(false);
|
|
565
|
-
expect(
|
|
566
|
-
supportsForcedToolChoiceWithThinking(
|
|
567
|
-
"vercel-ai-gateway",
|
|
568
|
-
"moonshotai/kimi-k2.6",
|
|
569
|
-
),
|
|
570
|
-
).toBe(true);
|
|
571
|
-
expect(
|
|
572
|
-
supportsForcedToolChoiceWithThinking("openrouter", "unknown/model"),
|
|
573
|
-
).toBe(true);
|
|
574
|
-
expect(
|
|
575
|
-
supportsForcedToolChoiceWithThinking("unknown-provider", "unknown/model"),
|
|
576
|
-
).toBe(true);
|
|
577
|
-
});
|
|
578
|
-
|
|
579
554
|
test("Gemini 2.5 Pro catalog context matches provider limits", () => {
|
|
580
555
|
const gemini = PROVIDER_CATALOG.find((entry) => entry.id === "gemini");
|
|
581
556
|
expect(
|
|
@@ -24,12 +24,15 @@ mock.module("../mcp/mcp-auth-state.js", () => ({
|
|
|
24
24
|
getMcpAuthState: mockGetMcpAuthState,
|
|
25
25
|
}));
|
|
26
26
|
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
// Seed the MCP server the routes look up via
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
import { setConfig } from "./helpers/set-config.js";
|
|
28
|
+
|
|
29
|
+
// Seed the MCP server the routes look up via `loadRawConfig()` into the
|
|
30
|
+
// workspace config for real.
|
|
31
|
+
setConfig("mcp", {
|
|
32
|
+
servers: {
|
|
33
|
+
"my-server": {
|
|
34
|
+
transport: { type: "sse", url: "https://mcp.example.com" },
|
|
35
|
+
},
|
|
33
36
|
},
|
|
34
37
|
});
|
|
35
38
|
|