@vellumai/assistant 0.12.1-dev.202609141913.5e16607 → 0.12.1-staging.2
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/docs/guardian-request-flow.md +0 -16
- package/openapi.yaml +49 -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 +2 -4
- package/src/__tests__/cu-unified-flow.test.ts +2 -8
- package/src/__tests__/document-sync-tags.test.ts +0 -25
- 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__/notification-vellum-adapter.test.ts +2 -85
- package/src/__tests__/outlook-messaging-provider.test.ts +6 -6
- package/src/__tests__/platform-callback-registration.test.ts +16 -8
- 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/events/notification-intent.ts +0 -2
- 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/bash.help.ts +13 -8
- package/src/cli/commands/bash.ts +25 -7
- 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 +9 -99
- 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/SKILL.md +3 -3
- 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/schedule/SKILL.md +4 -3
- 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 -24
- package/src/config/loader.ts +0 -1
- 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 +27 -11
- 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/services.ts +0 -8
- 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/orphan-reaper.ts +1 -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/home/__tests__/feed-writer.test.ts +0 -22
- package/src/home/feed-writer.ts +2 -11
- 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__/guardian-feed-projection.test.ts +2 -158
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +3 -153
- package/src/notifications/__tests__/schedule-result-producer.test.ts +3 -99
- package/src/notifications/adapters/macos.ts +0 -3
- 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/guardian-feed-projection.ts +5 -125
- package/src/notifications/home-feed-side-effect.ts +7 -55
- package/src/notifications/schedule-result-producer.ts +22 -66
- package/src/oauth/__tests__/seed-providers-managed.test.ts +0 -54
- package/src/oauth/byo-connection.test.ts +0 -45
- package/src/oauth/byo-connection.ts +6 -36
- package/src/oauth/connection-resolver.test.ts +0 -73
- package/src/oauth/connection-resolver.ts +2 -95
- package/src/oauth/seed-providers.ts +0 -165
- 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 +2 -4
- 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/inference/auth.ts +3 -2
- package/src/providers/inference/connection-availability.ts +8 -27
- package/src/providers/inference/resolve-auth.ts +4 -22
- 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__/default-provider-routes.test.ts +2 -2
- 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/debug-bash-routes.ts +173 -0
- package/src/runtime/routes/diagnostics-routes.ts +3 -55
- package/src/runtime/routes/index.ts +2 -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 +20 -6
- 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__/service-account-token.test.ts +0 -247
- 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__/bash.test.ts +0 -53
- 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 -255
- 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 -201
- 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/inference/service-account-token.ts +0 -248
- 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/tools/terminal/__tests__/sanitized-bash.test.ts +0 -57
- package/src/tools/terminal/sanitized-bash.ts +0 -105
- 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
|
@@ -4,30 +4,25 @@ import type { CliCommandHelp } from "../lib/cli-command-help.js";
|
|
|
4
4
|
|
|
5
5
|
export const appsHelp: CliCommandHelp = {
|
|
6
6
|
name: "apps",
|
|
7
|
-
description: "
|
|
7
|
+
description: "Inspect apps and their on-disk source",
|
|
8
8
|
helpText: `
|
|
9
9
|
Apps are mini-applications the assistant can surface. Each has a name and a
|
|
10
10
|
source directory holding its HTML/TSX definition, pages, and records.
|
|
11
11
|
|
|
12
12
|
Apps come from two places, distinguished by their source path:
|
|
13
|
-
workspace User-created apps under the workspace apps directory
|
|
13
|
+
workspace User-created apps under the workspace apps directory
|
|
14
|
+
(~/.vellum/apps/<slug>/).
|
|
14
15
|
plugin Apps bundled by an installed plugin, each a directory under
|
|
15
|
-
|
|
16
|
-
package.json, and disabled plugins, contribute nothing.
|
|
16
|
+
~/.vellum/plugins/<name>/apps/<app>/. Stray directories without
|
|
17
|
+
a plugin package.json, and disabled plugins, contribute nothing.
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
editing. File edits do not compile on their own.
|
|
22
|
-
|
|
23
|
-
list and inspect read the workspace directly (the assistant does not need to
|
|
24
|
-
be running). refresh compiles inside the running assistant so open surfaces
|
|
25
|
-
pick up the new build, including plugin apps with local source changes.
|
|
19
|
+
This surface is read-only. Workspace apps are created, edited, and deleted
|
|
20
|
+
through the app-builder skill and its tools (app-create, app-update,
|
|
21
|
+
app-delete); plugin apps are owned by their plugin.
|
|
26
22
|
|
|
27
23
|
Examples:
|
|
28
24
|
$ assistant apps list
|
|
29
|
-
$ assistant apps
|
|
30
|
-
$ assistant apps refresh Budget`,
|
|
25
|
+
$ assistant apps list --json`,
|
|
31
26
|
subcommands: [
|
|
32
27
|
{
|
|
33
28
|
name: "list",
|
|
@@ -36,10 +31,10 @@ Examples:
|
|
|
36
31
|
{ flags: "--json", description: "Machine-readable JSON output" },
|
|
37
32
|
],
|
|
38
33
|
helpText: `
|
|
39
|
-
Lists every app with its name and the absolute path to its source directory
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
sorted by name.
|
|
34
|
+
Lists every app with its name and the absolute path to its source directory —
|
|
35
|
+
the path itself shows whether the app is a workspace app or bundled by a plugin
|
|
36
|
+
(~/.vellum/plugins/<name>/apps/...). Workspace apps are listed first, then
|
|
37
|
+
plugin-bundled apps; both are sorted by name.
|
|
43
38
|
|
|
44
39
|
Pass --json for machine-readable output.
|
|
45
40
|
|
|
@@ -47,54 +42,5 @@ Examples:
|
|
|
47
42
|
$ assistant apps list
|
|
48
43
|
$ assistant apps list --json`,
|
|
49
44
|
},
|
|
50
|
-
{
|
|
51
|
-
name: "inspect",
|
|
52
|
-
args: "<app_name>",
|
|
53
|
-
description:
|
|
54
|
-
"Show whether an app's source has changed since the last compile",
|
|
55
|
-
options: [
|
|
56
|
-
{ flags: "--json", description: "Machine-readable JSON output" },
|
|
57
|
-
],
|
|
58
|
-
helpText: `
|
|
59
|
-
Arguments:
|
|
60
|
-
app_name App display name, directory slug, or id. Run 'assistant apps list'
|
|
61
|
-
to see available apps.
|
|
62
|
-
|
|
63
|
-
Compares the on-disk source against the fingerprint recorded in dist/ at the
|
|
64
|
-
last successful compile. Reports clean (no changes), stale (source drifted),
|
|
65
|
-
never compiled, or unknown baseline (compiled before fingerprints existed).
|
|
66
|
-
|
|
67
|
-
Does not compile. Use 'assistant apps refresh <app_name>' after inspect when
|
|
68
|
-
source has changed.
|
|
69
|
-
|
|
70
|
-
Examples:
|
|
71
|
-
$ assistant apps inspect Budget
|
|
72
|
-
$ assistant apps inspect Budget --json`,
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
name: "refresh",
|
|
76
|
-
args: "<app_name>",
|
|
77
|
-
description:
|
|
78
|
-
"Compile an app and refresh open surfaces. Requires a running assistant",
|
|
79
|
-
options: [
|
|
80
|
-
{ flags: "--json", description: "Machine-readable JSON output" },
|
|
81
|
-
],
|
|
82
|
-
helpText: `
|
|
83
|
-
Arguments:
|
|
84
|
-
app_name App display name, directory slug, or id. Run 'assistant apps list'
|
|
85
|
-
to see available apps.
|
|
86
|
-
|
|
87
|
-
Compiles src/ into dist/ inside the running assistant, then refreshes any
|
|
88
|
-
open surfaces and published deployments. Call this once after a batch of
|
|
89
|
-
edits, not after every file write. Workspace and plugin apps are both
|
|
90
|
-
accepted so local plugin source changes can be compiled without waiting
|
|
91
|
-
for the plugin watcher.
|
|
92
|
-
|
|
93
|
-
The assistant must be running.
|
|
94
|
-
|
|
95
|
-
Examples:
|
|
96
|
-
$ assistant apps refresh Budget
|
|
97
|
-
$ assistant apps refresh Budget --json`,
|
|
98
|
-
},
|
|
99
45
|
],
|
|
100
46
|
};
|
package/src/cli/commands/apps.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
cliIpcCall,
|
|
5
|
-
exitCodeFromIpcResult,
|
|
6
|
-
} from "../../ipc/cli-client.js";
|
|
7
3
|
import { applyCommandHelp, subcommand } from "../lib/cli-command-help.js";
|
|
8
4
|
import { registerCommand } from "../lib/register-command.js";
|
|
9
5
|
import { log } from "../logger.js";
|
|
10
|
-
import { shouldOutputJson, writeError, writeOutput } from "../output.js";
|
|
11
6
|
import { appsHelp } from "./apps.help.js";
|
|
12
7
|
|
|
13
8
|
interface AppListEntry {
|
|
@@ -15,36 +10,6 @@ interface AppListEntry {
|
|
|
15
10
|
source: string;
|
|
16
11
|
}
|
|
17
12
|
|
|
18
|
-
interface AppsRefreshResponse {
|
|
19
|
-
ok: true;
|
|
20
|
-
appId: string;
|
|
21
|
-
name: string;
|
|
22
|
-
compiled: boolean;
|
|
23
|
-
compile_duration_ms: number;
|
|
24
|
-
compile_errors?: Array<{
|
|
25
|
-
text: string;
|
|
26
|
-
location?: { file: string; line: number; column: number };
|
|
27
|
-
}>;
|
|
28
|
-
compile_warnings?: Array<{
|
|
29
|
-
text: string;
|
|
30
|
-
location?: { file: string; line: number; column: number };
|
|
31
|
-
}>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function refreshHint(appId: string): string {
|
|
35
|
-
return `Run 'assistant apps refresh ${appId}' to compile.`;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function formatDiagnostic(diag: {
|
|
39
|
-
text: string;
|
|
40
|
-
location?: { file: string; line: number; column: number };
|
|
41
|
-
}): string {
|
|
42
|
-
if (!diag.location) {
|
|
43
|
-
return diag.text;
|
|
44
|
-
}
|
|
45
|
-
return `${diag.location.file}:${diag.location.line}: ${diag.text}`;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
13
|
export function registerAppsCommand(program: Command): void {
|
|
49
14
|
registerCommand(program, {
|
|
50
15
|
name: appsHelp.name,
|
|
@@ -81,154 +46,6 @@ export function registerAppsCommand(program: Command): void {
|
|
|
81
46
|
log.info(` ${e.name.padEnd(nameWidth)} ${e.source}`);
|
|
82
47
|
}
|
|
83
48
|
});
|
|
84
|
-
|
|
85
|
-
subcommand(apps, "inspect").action(
|
|
86
|
-
async (appName: string, opts: { json?: boolean }, cmd: Command) => {
|
|
87
|
-
const { resolveAppQuery, appNotFoundMessage, appAmbiguousMessage } =
|
|
88
|
-
await import("../../apps/resolve-app.js");
|
|
89
|
-
const { inspectAppSource } = await import(
|
|
90
|
-
"../../apps/source-fingerprint.js"
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
const resolved = resolveAppQuery(appName);
|
|
94
|
-
if (!resolved.ok) {
|
|
95
|
-
const message =
|
|
96
|
-
resolved.reason === "ambiguous"
|
|
97
|
-
? appAmbiguousMessage(resolved.query, resolved.matches)
|
|
98
|
-
: appNotFoundMessage(resolved.query);
|
|
99
|
-
writeError(cmd, message);
|
|
100
|
-
process.exitCode = 1;
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const { app } = resolved;
|
|
105
|
-
const inspect = inspectAppSource(app.sourcePath);
|
|
106
|
-
const origin =
|
|
107
|
-
app.origin.kind === "plugin"
|
|
108
|
-
? { kind: "plugin" as const, plugin: app.origin.pluginName }
|
|
109
|
-
: { kind: "workspace" as const };
|
|
110
|
-
|
|
111
|
-
if (opts.json || shouldOutputJson(cmd)) {
|
|
112
|
-
writeOutput(cmd, {
|
|
113
|
-
ok: true,
|
|
114
|
-
app: {
|
|
115
|
-
id: app.id,
|
|
116
|
-
name: app.name,
|
|
117
|
-
source: app.sourcePath,
|
|
118
|
-
origin,
|
|
119
|
-
},
|
|
120
|
-
compile: inspect,
|
|
121
|
-
});
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const originLabel =
|
|
126
|
-
origin.kind === "plugin"
|
|
127
|
-
? `plugin ${origin.plugin}`
|
|
128
|
-
: "workspace";
|
|
129
|
-
log.info(`App: ${app.name} (${originLabel})`);
|
|
130
|
-
log.info(`Id: ${app.id}`);
|
|
131
|
-
log.info(`Source: ${app.sourcePath}`);
|
|
132
|
-
|
|
133
|
-
if (inspect.status === "clean") {
|
|
134
|
-
const when = inspect.compiledAt
|
|
135
|
-
? ` (compiled ${inspect.compiledAt})`
|
|
136
|
-
: "";
|
|
137
|
-
log.info(`Compile: up to date${when}`);
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
if (inspect.status === "never_compiled") {
|
|
141
|
-
log.info("Compile: never compiled");
|
|
142
|
-
log.info(refreshHint(app.id));
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (inspect.status === "unknown_baseline") {
|
|
146
|
-
log.info(
|
|
147
|
-
"Compile: compiled, but no source fingerprint is recorded.",
|
|
148
|
-
);
|
|
149
|
-
log.info(
|
|
150
|
-
`Run 'assistant apps refresh ${app.id}' to record one and rebuild.`,
|
|
151
|
-
);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const when = inspect.compiledAt
|
|
156
|
-
? ` (last compiled ${inspect.compiledAt})`
|
|
157
|
-
: "";
|
|
158
|
-
log.info(`Compile: source changed since last compile${when}`);
|
|
159
|
-
if (inspect.modified.length > 0) {
|
|
160
|
-
log.info("Modified:");
|
|
161
|
-
for (const path of inspect.modified) {
|
|
162
|
-
log.info(` ${path}`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (inspect.added.length > 0) {
|
|
166
|
-
log.info("Added:");
|
|
167
|
-
for (const path of inspect.added) {
|
|
168
|
-
log.info(` ${path}`);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
if (inspect.removed.length > 0) {
|
|
172
|
-
log.info("Removed:");
|
|
173
|
-
for (const path of inspect.removed) {
|
|
174
|
-
log.info(` ${path}`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
log.info(refreshHint(app.id));
|
|
178
|
-
},
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
subcommand(apps, "refresh").action(
|
|
182
|
-
async (appName: string, opts: { json?: boolean }, cmd: Command) => {
|
|
183
|
-
const { resolveAppQuery, appNotFoundMessage, appAmbiguousMessage } =
|
|
184
|
-
await import("../../apps/resolve-app.js");
|
|
185
|
-
|
|
186
|
-
const resolved = resolveAppQuery(appName);
|
|
187
|
-
if (!resolved.ok) {
|
|
188
|
-
const message =
|
|
189
|
-
resolved.reason === "ambiguous"
|
|
190
|
-
? appAmbiguousMessage(resolved.query, resolved.matches)
|
|
191
|
-
: appNotFoundMessage(resolved.query);
|
|
192
|
-
writeError(cmd, message);
|
|
193
|
-
process.exitCode = 1;
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
const result = await cliIpcCall<AppsRefreshResponse>("apps_refresh", {
|
|
198
|
-
pathParams: { id: resolved.app.id },
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
if (!result.ok || !result.result) {
|
|
202
|
-
writeError(cmd, result.error ?? "Refresh failed");
|
|
203
|
-
process.exitCode = exitCodeFromIpcResult(result);
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
const payload = result.result;
|
|
208
|
-
if (opts.json || shouldOutputJson(cmd)) {
|
|
209
|
-
writeOutput(cmd, payload);
|
|
210
|
-
if (!payload.compiled) {
|
|
211
|
-
process.exitCode = 1;
|
|
212
|
-
}
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (!payload.compiled) {
|
|
217
|
-
log.error(
|
|
218
|
-
`Compile failed for "${payload.name}" (${payload.compile_duration_ms}ms).`,
|
|
219
|
-
);
|
|
220
|
-
for (const diag of payload.compile_errors ?? []) {
|
|
221
|
-
log.error(` ${formatDiagnostic(diag)}`);
|
|
222
|
-
}
|
|
223
|
-
process.exitCode = 1;
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
log.info(
|
|
228
|
-
`Compiled "${payload.name}" in ${payload.compile_duration_ms}ms.`,
|
|
229
|
-
);
|
|
230
|
-
},
|
|
231
|
-
);
|
|
232
49
|
},
|
|
233
50
|
});
|
|
234
51
|
}
|
|
@@ -6,7 +6,7 @@ export const bashHelp: CliCommandHelp = {
|
|
|
6
6
|
name: "bash",
|
|
7
7
|
args: "<command>",
|
|
8
8
|
description:
|
|
9
|
-
"Execute a shell command
|
|
9
|
+
"Execute a shell command through the assistant process for debugging",
|
|
10
10
|
options: [
|
|
11
11
|
{
|
|
12
12
|
flags: "-t, --timeout <ms>",
|
|
@@ -15,19 +15,24 @@ export const bashHelp: CliCommandHelp = {
|
|
|
15
15
|
},
|
|
16
16
|
],
|
|
17
17
|
helpText: `
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
Sends a shell command to the running assistant for execution via the IPC
|
|
19
|
+
socket. The assistant spawns the command in its own process environment and
|
|
20
|
+
returns stdout, stderr, and the exit code.
|
|
21
|
+
|
|
22
|
+
This is a developer debugging tool for inspecting how the assistant invokes and
|
|
23
|
+
observes shell commands. The command runs with the assistant's environment, working
|
|
24
|
+
directory, and process context — not the caller's shell.
|
|
25
|
+
|
|
26
|
+
Requires the assistant to be running with VELLUM_DEBUG=1. When debug mode is off
|
|
27
|
+
(the default), the assistant returns an error immediately.
|
|
23
28
|
|
|
24
29
|
Arguments:
|
|
25
30
|
command The shell command string to execute (e.g. "echo hello", "ls -la").
|
|
26
|
-
Runs
|
|
31
|
+
Runs in bash via \`bash -c\` in the assistant's process environment.
|
|
27
32
|
|
|
28
33
|
Examples:
|
|
29
34
|
$ assistant bash "echo hello"
|
|
30
35
|
$ assistant bash "which node"
|
|
31
36
|
$ assistant bash "env | grep PATH" --timeout 10000
|
|
32
|
-
$ assistant bash "
|
|
37
|
+
$ assistant bash "ls -la"`,
|
|
33
38
|
};
|
package/src/cli/commands/bash.ts
CHANGED
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `assistant bash`
|
|
3
|
-
*
|
|
2
|
+
* `assistant bash` — run a shell command in the assistant's process
|
|
3
|
+
* environment (debug tool, requires VELLUM_DEBUG=1 on the daemon).
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { Command } from "commander";
|
|
7
7
|
|
|
8
|
+
import { cliIpcCall } from "../../ipc/cli-client.js";
|
|
8
9
|
import { applyCommandHelp, commandSpec } from "../lib/cli-command-help.js";
|
|
9
10
|
import { registerCommand } from "../lib/register-command.js";
|
|
10
11
|
import { log } from "../logger.js";
|
|
11
12
|
import { bashHelp } from "./bash.help.js";
|
|
12
13
|
|
|
14
|
+
interface DebugBashResult {
|
|
15
|
+
stdout: string;
|
|
16
|
+
stderr: string;
|
|
17
|
+
exitCode: number | null;
|
|
18
|
+
timedOut: boolean;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
13
22
|
export function registerBashCommand(program: Command): void {
|
|
14
23
|
registerCommand(program, {
|
|
15
24
|
name: commandSpec(bashHelp),
|
|
16
|
-
transport: "
|
|
25
|
+
transport: "ipc",
|
|
17
26
|
description: bashHelp.description,
|
|
18
27
|
build: (cmd) => {
|
|
19
28
|
applyCommandHelp(cmd, bashHelp);
|
|
@@ -25,10 +34,19 @@ export function registerBashCommand(program: Command): void {
|
|
|
25
34
|
return;
|
|
26
35
|
}
|
|
27
36
|
|
|
28
|
-
const
|
|
29
|
-
"
|
|
37
|
+
const result = await cliIpcCall<DebugBashResult>(
|
|
38
|
+
"debug_bash",
|
|
39
|
+
{ body: { command, timeoutMs } },
|
|
40
|
+
{ timeoutMs: timeoutMs + 10_000 },
|
|
30
41
|
);
|
|
31
|
-
|
|
42
|
+
|
|
43
|
+
if (!result.ok) {
|
|
44
|
+
log.error(result.error ?? "Failed to reach the assistant.");
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const data = result.result!;
|
|
32
50
|
|
|
33
51
|
if (data.error) {
|
|
34
52
|
log.error(data.error);
|
|
@@ -51,7 +69,7 @@ export function registerBashCommand(program: Command): void {
|
|
|
51
69
|
}
|
|
52
70
|
|
|
53
71
|
if (data.timedOut) {
|
|
54
|
-
log.info(
|
|
72
|
+
log.info(`Command timed out in assistant.`);
|
|
55
73
|
}
|
|
56
74
|
|
|
57
75
|
if (data.exitCode != null && data.exitCode !== 0) {
|
|
@@ -36,14 +36,9 @@ assistant's own bot on that channel (${BOT_CHANNELS}), resolving the bot
|
|
|
36
36
|
credential from the channel id so no token is handled. Acting as a person
|
|
37
37
|
through their OAuth integration is 'assistant oauth request'.
|
|
38
38
|
|
|
39
|
-
To say something in a chat, use 'send' rather than 'request': it goes
|
|
40
|
-
through the channel's transport, so the post is threaded and rendered like
|
|
41
|
-
every other message the assistant sends there, and it is recorded.
|
|
42
|
-
|
|
43
39
|
Examples:
|
|
44
40
|
$ assistant channels list
|
|
45
41
|
$ assistant channels get slack
|
|
46
|
-
$ assistant channels send slack C0123456789 --text 'deploy is green'
|
|
47
42
|
$ assistant channels request slack /auth.test --json
|
|
48
43
|
$ assistant channels request slack -X POST \\
|
|
49
44
|
-d '{"channel":"D0123456789","limit":20}' /conversations.history --json`,
|
|
@@ -70,9 +65,8 @@ This command can do anything the bot's API allows, including sending,
|
|
|
70
65
|
editing, deleting, uploading, and reacting, so it is classified high risk
|
|
71
66
|
and asks for approval like any action with irreversible effects. Reads are
|
|
72
67
|
not distinguished from writes: the effect is the endpoint's. To send a
|
|
73
|
-
message, use
|
|
74
|
-
|
|
75
|
-
reaches the platform directly and leaves no record of what was said.
|
|
68
|
+
message, use the messaging tool, which records what it sent; do not post
|
|
69
|
+
through this command.
|
|
76
70
|
|
|
77
71
|
Arguments:
|
|
78
72
|
<channel> One of: ${BOT_CHANNELS}. A channel with no bot credential of
|
|
@@ -92,68 +86,6 @@ Examples:
|
|
|
92
86
|
$ assistant channels request slack -X POST \\
|
|
93
87
|
-d '{"channel":"D0123456789","limit":100}' /conversations.history --json
|
|
94
88
|
$ assistant channels request discord /users/@me --json`,
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
name: "send",
|
|
98
|
-
description:
|
|
99
|
-
"Post text to a chat on the channel, as the assistant's bot, recorded",
|
|
100
|
-
arguments: [
|
|
101
|
-
{
|
|
102
|
-
name: "<channel>",
|
|
103
|
-
description: `Channel to post on. One with a transport that can be addressed from a named chat; anything else is refused before the send.`,
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
name: "<chat-id>",
|
|
107
|
-
description:
|
|
108
|
-
"The chat in the channel's own id space (a Slack channel or DM id, a Telegram chat id, a Discord channel id, a WhatsApp number).",
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
options: [
|
|
112
|
-
{
|
|
113
|
-
flags: "--text <text>",
|
|
114
|
-
description: "The message text. Required.",
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
flags: "--thread <id>",
|
|
118
|
-
description:
|
|
119
|
-
"Post inside this thread or topic, in the channel's own id space. Omit to post to the chat itself.",
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
flags: "--plain",
|
|
123
|
-
description:
|
|
124
|
-
"Send the text verbatim instead of the channel's rich rendering.",
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
flags: "--json",
|
|
128
|
-
description: "Machine-readable compact JSON output",
|
|
129
|
-
},
|
|
130
|
-
],
|
|
131
|
-
helpText: `
|
|
132
|
-
Posts one message through the channel's own transport, the same path a
|
|
133
|
-
reply takes. Once the channel acknowledges it, the daemon records it in
|
|
134
|
-
the chat's conversation, which is what lets the assistant see later what
|
|
135
|
-
it said here and lets a reaction or an edit naming that post resolve back
|
|
136
|
-
to it. Recording is best effort and never fails a send that already went
|
|
137
|
-
out, so the result names the conversation only when the record was
|
|
138
|
-
written.
|
|
139
|
-
|
|
140
|
-
This sends a message people will read, so it is classified high risk and
|
|
141
|
-
asks for approval like any other action with effects nobody can take back.
|
|
142
|
-
|
|
143
|
-
The send fails, and records nothing, when the channel does not acknowledge
|
|
144
|
-
it or names no message id for it. A channel the assistant cannot address
|
|
145
|
-
from a named chat is refused before anything is sent. If the daemon does
|
|
146
|
-
not answer in time, the message may still go out: that is reported as an
|
|
147
|
-
unknown outcome rather than a failure, so check the chat before sending
|
|
148
|
-
again.
|
|
149
|
-
|
|
150
|
-
Attachments are not sent from here.
|
|
151
|
-
|
|
152
|
-
Examples:
|
|
153
|
-
$ assistant channels send slack C0123456789 --text 'deploy is green'
|
|
154
|
-
$ assistant channels send slack C0123456789 --thread 1700000000.000100 \
|
|
155
|
-
--text 'and the smoke tests passed'
|
|
156
|
-
$ assistant channels send telegram 123456789 --text 'morning' --json`,
|
|
157
89
|
},
|
|
158
90
|
{
|
|
159
91
|
name: "list",
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `assistant channels`: inspect messaging channels, and act as their bots.
|
|
3
3
|
*
|
|
4
|
-
* list
|
|
5
|
-
* get <channel>
|
|
6
|
-
* request <channel> <url>
|
|
7
|
-
* send <channel> <chat-id> : post text to a chat, recorded
|
|
4
|
+
* list : overview of every channel + ready state
|
|
5
|
+
* get <channel> : detailed live snapshot of a single channel
|
|
6
|
+
* request <channel> <url> : call the channel's platform API as its bot
|
|
8
7
|
*
|
|
9
8
|
* `get` always re-runs remote probes (it invalidates the readiness cache
|
|
10
9
|
* before reading), so the CLI answer matches the live source-of-truth.
|
|
@@ -13,11 +12,6 @@
|
|
|
13
12
|
* channel's bot credential and makes the same authenticated request
|
|
14
13
|
* `oauth request` makes, without the caller naming a provider.
|
|
15
14
|
*
|
|
16
|
-
* `send` is the send door (see ./send.ts): it runs the daemon's one send
|
|
17
|
-
* implementation for the channel, so the post is threaded, rendered, and
|
|
18
|
-
* recorded like every other message the assistant sends there. Posting
|
|
19
|
-
* through `request` instead reaches the platform API and leaves no record.
|
|
20
|
-
*
|
|
21
15
|
* A mutating `refresh` verb (for reconnecting channels, e.g. supplying
|
|
22
16
|
* fresh Slack tokens) is intentionally not part of this group.
|
|
23
17
|
*/
|
|
@@ -32,7 +26,6 @@ import { log } from "../../logger.js";
|
|
|
32
26
|
import { shouldOutputJson, writeOutput } from "../../output.js";
|
|
33
27
|
import { CHANNELS_PLUGIN_SEARCH_HINT, channelsHelp } from "./index.help.js";
|
|
34
28
|
import { registerChannelsRequestCommand } from "./request.js";
|
|
35
|
-
import { registerChannelsSendCommand } from "./send.js";
|
|
36
29
|
|
|
37
30
|
// ---------------------------------------------------------------------------
|
|
38
31
|
// Snapshot shape
|
|
@@ -218,12 +211,6 @@ export function registerChannelsCommand(program: Command): void {
|
|
|
218
211
|
// -----------------------------------------------------------------------
|
|
219
212
|
|
|
220
213
|
registerChannelsRequestCommand(channels);
|
|
221
|
-
|
|
222
|
-
// -----------------------------------------------------------------------
|
|
223
|
-
// send: post text to a chat, through the channel's transport
|
|
224
|
-
// -----------------------------------------------------------------------
|
|
225
|
-
|
|
226
|
-
registerChannelsSendCommand(channels);
|
|
227
214
|
},
|
|
228
215
|
});
|
|
229
216
|
}
|
|
@@ -45,12 +45,8 @@ Examples:
|
|
|
45
45
|
},
|
|
46
46
|
],
|
|
47
47
|
helpText: `
|
|
48
|
-
Lists credentials
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
Fails immediately with an error if the credential vault is unreachable. An
|
|
52
|
-
empty list means the vault answered and has no matching credentials, not that
|
|
53
|
-
the store is down.
|
|
48
|
+
Lists all credentials in the vault. Each entry includes the same fields as
|
|
49
|
+
"inspect" — scrubbed value, timestamps, policy, and metadata.
|
|
54
50
|
|
|
55
51
|
The --search flag filters results by case-insensitive substring match against
|
|
56
52
|
the credential's service name, field name, label, or description. For example, --search
|
|
@@ -343,8 +343,8 @@ export function registerCredentialsCommand(program: Command): void {
|
|
|
343
343
|
} else {
|
|
344
344
|
printCredentialHuman(output);
|
|
345
345
|
if (output.brokerUnreachable) {
|
|
346
|
-
log.
|
|
347
|
-
" Credential store is unreachable
|
|
346
|
+
log.info(
|
|
347
|
+
" ⚠ Credential store is unreachable — ensure the assistant is running",
|
|
348
348
|
);
|
|
349
349
|
}
|
|
350
350
|
}
|
|
@@ -7,8 +7,8 @@ export const mcpHelp: CliCommandHelp = {
|
|
|
7
7
|
description: "Manage MCP (Model Context Protocol) servers",
|
|
8
8
|
helpText: `
|
|
9
9
|
MCP servers extend the assistant's capabilities with external tools. Servers
|
|
10
|
-
are configured in the assistant's
|
|
11
|
-
plugin in its root mcp.json. Each
|
|
10
|
+
are configured in the assistant's config.json under the mcp.servers key, or
|
|
11
|
+
declared by an installed plugin in its root mcp.json. Each
|
|
12
12
|
server uses one of three transport types:
|
|
13
13
|
|
|
14
14
|
stdio Local process communicating over stdin/stdout
|
|
@@ -30,8 +30,8 @@ Examples:
|
|
|
30
30
|
options: [{ flags: "--json", description: "Output as JSON" }],
|
|
31
31
|
helpText: `
|
|
32
32
|
Shows each MCP server with its current status and configuration. Servers come
|
|
33
|
-
from two places: the
|
|
34
|
-
installed plugin that declares one.
|
|
33
|
+
from two places: the mcp.servers key in config.json, and the root mcp.json of
|
|
34
|
+
any installed plugin that declares one.
|
|
35
35
|
|
|
36
36
|
Name The server identifier
|
|
37
37
|
Status Health check result for workspace servers:
|
|
@@ -43,7 +43,7 @@ installed plugin that declares one.
|
|
|
43
43
|
health-checked, so no stored credential can reach a URL a
|
|
44
44
|
plugin chose.
|
|
45
45
|
Source Shown only for plugin-declared servers, naming the plugin.
|
|
46
|
-
Servers from
|
|
46
|
+
Servers from config.json print no Source line.
|
|
47
47
|
Transport stdio, sse, or streamable-http
|
|
48
48
|
URL/Command The server URL (sse/streamable-http) or command (stdio)
|
|
49
49
|
|
|
@@ -64,7 +64,7 @@ on their next turn automatically. The assistant must be running.
|
|
|
64
64
|
|
|
65
65
|
Examples:
|
|
66
66
|
$ vellum mcp reload
|
|
67
|
-
$ vellum mcp reload # after editing
|
|
67
|
+
$ vellum mcp reload # after editing config.json to add a new server
|
|
68
68
|
$ vellum mcp reload # after running "vellum mcp auth <server>"`,
|
|
69
69
|
},
|
|
70
70
|
{
|
|
@@ -95,7 +95,7 @@ Examples:
|
|
|
95
95
|
],
|
|
96
96
|
helpText: `
|
|
97
97
|
Arguments:
|
|
98
|
-
name Unique identifier for the server (used as the key in
|
|
98
|
+
name Unique identifier for the server (used as the key in config.json)
|
|
99
99
|
|
|
100
100
|
Transport-specific requirements:
|
|
101
101
|
stdio Requires --command (and optional --args for arguments)
|
|
@@ -149,7 +149,7 @@ Examples:
|
|
|
149
149
|
Arguments:
|
|
150
150
|
name Name of the MCP server to remove
|
|
151
151
|
|
|
152
|
-
Removes the server entry from
|
|
152
|
+
Removes the server entry from config.json and performs best-effort cleanup of
|
|
153
153
|
any stored OAuth credentials (tokens, client info, discovery metadata) for
|
|
154
154
|
sse/streamable-http servers. If no OAuth credentials exist, the cleanup is
|
|
155
155
|
silently skipped.
|
package/src/cli/commands/mcp.ts
CHANGED
|
@@ -20,7 +20,7 @@ interface McpServerEntry {
|
|
|
20
20
|
command?: string;
|
|
21
21
|
args?: string[];
|
|
22
22
|
};
|
|
23
|
-
/** Workspace `
|
|
23
|
+
/** Workspace `config.json` or a plugin's `mcp.json`. */
|
|
24
24
|
source?: "workspace" | "plugin";
|
|
25
25
|
/** Plugin that declared the server, when `source` is `plugin`. */
|
|
26
26
|
pluginName?: string;
|
|
@@ -4,12 +4,8 @@ import type { CliCommandHelp } from "../lib/cli-command-help.js";
|
|
|
4
4
|
|
|
5
5
|
export const roadmapHelp: CliCommandHelp = {
|
|
6
6
|
name: "roadmap",
|
|
7
|
-
description:
|
|
8
|
-
"Read and file public feature proposals as the assistant. For bugs and support, instruct the user to join the Discord community at https://vellum.ai/community",
|
|
7
|
+
description: "Read and file public Vellum roadmap feedback as the assistant",
|
|
9
8
|
helpText: `
|
|
10
|
-
Items created here must be public feature proposals. For bugs and support
|
|
11
|
-
concerns, instruct the user to join the Discord community at https://vellum.ai/community.
|
|
12
|
-
|
|
13
9
|
Items, upvotes, and comments filed here are attributed to the assistant, not
|
|
14
10
|
to its owner: the assistant signs these calls with its own platform API key.
|
|
15
11
|
The owner's own roadmap identity lives on \`vellum roadmap\`.
|