@vellumai/assistant 0.7.0 → 0.7.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/ARCHITECTURE.md +6 -7
- package/Dockerfile +1 -0
- package/README.md +2 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +79 -139
- package/bun.lock +3 -0
- package/docs/architecture/security.md +18 -16
- package/knip.json +1 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/openapi.yaml +294 -107
- package/package.json +4 -2
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +6 -17
- package/src/__tests__/assistant-event-hub.test.ts +126 -77
- package/src/__tests__/assistant-event.test.ts +0 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +37 -15
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -29
- package/src/__tests__/background-shell-host-bash.test.ts +34 -43
- package/src/__tests__/call-controller.test.ts +1 -1
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/checker.test.ts +20 -34
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-watcher.test.ts +12 -0
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-lifecycle.test.ts +4 -4
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +1 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -32
- package/src/__tests__/conversation-routes-slash-commands.test.ts +75 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -4
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/cu-unified-flow.test.ts +33 -16
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +4 -1
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +32 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -83
- package/src/__tests__/headless-browser-mode.test.ts +4 -9
- package/src/__tests__/headless-browser-navigate.test.ts +21 -20
- package/src/__tests__/heartbeat-service.test.ts +289 -7
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-bash-proxy.test.ts +46 -122
- package/src/__tests__/host-browser-e2e-cloud.test.ts +36 -497
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +26 -96
- package/src/__tests__/host-browser-proxy.test.ts +111 -185
- package/src/__tests__/host-browser-routes.test.ts +45 -75
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +26 -30
- package/src/__tests__/host-cu-proxy.test.ts +56 -111
- package/src/__tests__/host-file-proxy.test.ts +44 -98
- package/src/__tests__/host-file-read-tool.test.ts +42 -21
- package/src/__tests__/host-shell-tool.test.ts +33 -68
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy.test.ts +43 -53
- package/src/__tests__/http-user-message-parity.test.ts +0 -6
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -66
- package/src/__tests__/inline-skill-load-permissions.test.ts +0 -2
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -10
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +66 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +21 -12
- package/src/__tests__/prechat-onboarding-contract.test.ts +31 -7
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +331 -0
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -22
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +3 -12
- package/src/__tests__/search-skills-unified.test.ts +9 -15
- package/src/__tests__/secret-ingress-cli.test.ts +2 -5
- package/src/__tests__/secret-ingress-http.test.ts +0 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +9 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -56
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -11
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt.test.ts +115 -13
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -6
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -16
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -7
- package/src/__tests__/tool-executor.test.ts +12 -19
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +49 -137
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -7
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-062-drop-memory-v2-edges-json.test.ts +103 -0
- package/src/__tests__/workspace-migration-063-release-notes-dynamic-model-context.test.ts +77 -0
- package/src/__tests__/workspace-migration-064-unwind-main-agent-opus-seed.test.ts +225 -0
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/backup-worker.test.ts +36 -8
- package/src/backup/__tests__/paths.test.ts +2 -2
- package/src/backup/__tests__/restore.test.ts +45 -28
- package/src/backup/backup-worker.ts +36 -2
- package/src/backup/paths.ts +9 -6
- package/src/browser-session/events.ts +0 -9
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +0 -24
- package/src/calls/twilio-rest.ts +0 -38
- package/src/calls/twilio-routes.ts +1 -1
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +1 -36
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/memory-v2.test.ts +14 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/backup.ts +4 -4
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +63 -5
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +231 -76
- package/src/cli/commands/keys.ts +4 -1
- package/src/cli/commands/memory-v2.ts +24 -52
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +14 -0
- package/src/cli/program.ts +2 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -4
- package/src/config/env-registry.ts +12 -2
- package/src/config/env.ts +3 -14
- package/src/config/feature-flag-registry.json +30 -30
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +3 -3
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-v2.test.ts +1 -0
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -5
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +1 -1
- package/src/config/schemas/llm.ts +31 -3
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +9 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +6 -6
- package/src/config/schemas/skills.ts +5 -5
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -17
- package/src/contacts/contacts-write.ts +1 -105
- package/src/context/window-manager.ts +44 -5
- package/src/credential-execution/process-manager.ts +34 -10
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +53 -4
- package/src/daemon/conversation-agent-loop.ts +277 -36
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +1 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +83 -163
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +22 -28
- package/src/daemon/conversation-tool-setup.ts +3 -33
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +117 -233
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +23 -71
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-bash-proxy.ts +67 -45
- package/src/daemon/host-browser-proxy.ts +65 -27
- package/src/daemon/host-cu-proxy.ts +40 -39
- package/src/daemon/host-file-proxy.ts +58 -37
- package/src/daemon/host-transfer-proxy.ts +84 -46
- package/src/daemon/lifecycle.ts +49 -15
- package/src/daemon/message-types/conversations.ts +7 -0
- package/src/daemon/message-types/host-bash.ts +1 -0
- package/src/daemon/message-types/host-cu.ts +1 -0
- package/src/daemon/message-types/host-file.ts +1 -0
- package/src/daemon/message-types/host-transfer.ts +1 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +102 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -2
- package/src/daemon/tool-side-effects.ts +125 -107
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +3 -1
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +6 -2
- package/src/heartbeat/heartbeat-service.ts +23 -5
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/relationship-state-writer.test.ts +30 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/relationship-state-writer.ts +16 -3
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +3 -10
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/manager.ts +0 -5
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/context-search/sources/memory-v2.ts +578 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +29 -4
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.ts +3 -21
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +3 -7
- package/src/memory/graph/conversation-graph-memory.ts +35 -13
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs-store.ts +0 -1
- package/src/memory/jobs-worker.ts +2 -16
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +14 -0
- package/src/memory/migrations/registry.ts +24 -0
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +25 -0
- package/src/memory/search/semantic.ts +5 -16
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +289 -90
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +384 -15
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/static-context.test.ts +153 -0
- package/src/memory/v2/activation.ts +168 -97
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +14 -12
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +182 -58
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +118 -42
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/skill-store.ts +55 -7
- package/src/memory/v2/static-context.ts +62 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/outlook/client.ts +0 -73
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +226 -0
- package/src/messaging/providers/slack/adapter.ts +122 -21
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +97 -0
- package/src/oauth/manual-token-connection.ts +30 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/config.ts +0 -74
- package/src/outbound-proxy/health.ts +0 -44
- package/src/outbound-proxy/index.ts +0 -22
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.ts +4 -1
- package/src/permissions/gateway-threshold-reader.ts +4 -1
- package/src/permissions/prompter.ts +9 -2
- package/src/permissions/secret-prompter.ts +21 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/system-prompt.ts +34 -70
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +541 -45
- package/src/runtime/assistant-event.ts +1 -6
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -1
- package/src/runtime/auth/route-policy.ts +11 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +22 -82
- package/src/runtime/http-types.ts +5 -0
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-legacy-user-md.test.ts +71 -27
- package/src/runtime/migrations/__tests__/vbundle-metadata-merge-integration.test.ts +41 -2
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +143 -79
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +371 -0
- package/src/runtime/migrations/migration-transport.ts +46 -13
- package/src/runtime/migrations/migration-wizard.ts +2 -2
- package/src/runtime/migrations/origin-mode.ts +40 -0
- package/src/runtime/migrations/vbundle-builder.ts +133 -79
- package/src/runtime/migrations/vbundle-import-analyzer.ts +9 -7
- package/src/runtime/migrations/vbundle-importer.ts +7 -7
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +3 -3
- package/src/runtime/migrations/vbundle-streaming-validator.ts +48 -26
- package/src/runtime/migrations/vbundle-validator.ts +214 -41
- package/src/runtime/pending-interactions.ts +13 -4
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +28 -19
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +235 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +45 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +120 -8
- package/src/runtime/routes/conversation-routes.ts +44 -528
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/documents-routes.ts +53 -18
- package/src/runtime/routes/events-routes.ts +59 -91
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/host-bash-routes.ts +3 -2
- package/src/runtime/routes/host-browser-routes.ts +9 -33
- package/src/runtime/routes/host-cu-routes.ts +6 -1
- package/src/runtime/routes/host-file-routes.ts +3 -2
- package/src/runtime/routes/host-transfer-routes.ts +11 -15
- package/src/runtime/routes/identity-routes.ts +78 -6
- package/src/runtime/routes/inbound-message-handler.ts +580 -137
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -88
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/index.ts +4 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/memory-v2-routes.ts +10 -15
- package/src/runtime/routes/migration-routes.ts +188 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +3 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/schedule/schedule-store.ts +0 -16
- package/src/security/secret-scanner.ts +14 -547
- package/src/security/secure-keys.ts +31 -11
- package/src/security/token-manager.ts +7 -3
- package/src/signals/cancel.ts +16 -25
- package/src/signals/conversation-undo.ts +2 -27
- package/src/signals/emit-event.ts +1 -2
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +6 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +38 -15
- package/src/telemetry/usage-telemetry-reporter.ts +3 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/browser/__tests__/browser-status.test.ts +44 -127
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +92 -68
- package/src/tools/browser/cdp-client/factory.ts +48 -76
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/executor.ts +44 -31
- package/src/tools/host-filesystem/edit.ts +3 -2
- package/src/tools/host-filesystem/read.ts +3 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +4 -3
- package/src/tools/host-filesystem/write.ts +3 -2
- package/src/tools/host-terminal/host-shell.ts +4 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/types.ts +12 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +4 -3
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +59 -0
- package/src/workspace/migrations/062-drop-memory-v2-edges-json.ts +27 -0
- package/src/workspace/migrations/063-release-notes-dynamic-model-context.ts +70 -0
- package/src/workspace/migrations/064-unwind-main-agent-opus-seed.ts +64 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
|
@@ -15,12 +15,15 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { createReadStream } from "node:fs";
|
|
18
|
+
import { hostname } from "node:os";
|
|
18
19
|
import { PassThrough, Readable } from "node:stream";
|
|
19
20
|
import { Database } from "bun:sqlite";
|
|
20
21
|
|
|
21
22
|
import { z } from "zod";
|
|
22
23
|
|
|
24
|
+
import { getPlatformAssistantId } from "../../config/env.js";
|
|
23
25
|
import { invalidateConfigCache } from "../../config/loader.js";
|
|
26
|
+
import { getAssistantName } from "../../daemon/identity-helpers.js";
|
|
24
27
|
import { getDb, resetDb } from "../../memory/db-connection.js";
|
|
25
28
|
import { validateMigrationState } from "../../memory/migrations/validate-migration-state.js";
|
|
26
29
|
import { credentialKey } from "../../security/credential-key.js";
|
|
@@ -40,6 +43,8 @@ import {
|
|
|
40
43
|
getWorkspaceDir,
|
|
41
44
|
getWorkspaceHooksDir,
|
|
42
45
|
} from "../../util/platform.js";
|
|
46
|
+
import { APP_VERSION } from "../../version.js";
|
|
47
|
+
import { DAEMON_INTERNAL_ASSISTANT_ID } from "../assistant-scope.js";
|
|
43
48
|
import {
|
|
44
49
|
validateGcsSignedUrl,
|
|
45
50
|
type ValidateGcsSignedUrlOptions,
|
|
@@ -48,6 +53,13 @@ import {
|
|
|
48
53
|
JobAlreadyInProgressError,
|
|
49
54
|
migrationJobs,
|
|
50
55
|
} from "../migrations/job-registry.js";
|
|
56
|
+
import { getOriginMode } from "../migrations/origin-mode.js";
|
|
57
|
+
import type {
|
|
58
|
+
VBundleAssistantInfo,
|
|
59
|
+
VBundleCompatibility,
|
|
60
|
+
VBundleExportOptions,
|
|
61
|
+
VBundleOriginInfo,
|
|
62
|
+
} from "../migrations/vbundle-builder.js";
|
|
51
63
|
import { streamExportVBundle } from "../migrations/vbundle-builder.js";
|
|
52
64
|
import {
|
|
53
65
|
analyzeImport,
|
|
@@ -136,6 +148,110 @@ export async function reconcileVellumMetadataFromCes(warningSink: {
|
|
|
136
148
|
|
|
137
149
|
const log = getLogger("migration-routes");
|
|
138
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Fields the export pipeline must populate on the v1 manifest.
|
|
153
|
+
*
|
|
154
|
+
* Centralized so both the synchronous-bytes and async-to-gcs handlers
|
|
155
|
+
* compute the same values (and a future caller doesn't accidentally drift).
|
|
156
|
+
*/
|
|
157
|
+
interface ExportManifestInputs {
|
|
158
|
+
assistant: VBundleAssistantInfo;
|
|
159
|
+
origin: VBundleOriginInfo;
|
|
160
|
+
compatibility: VBundleCompatibility;
|
|
161
|
+
exportOptions: VBundleExportOptions;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Resolve the `assistant.id` for an export.
|
|
166
|
+
*
|
|
167
|
+
* Mirrors `platform/client.ts`'s precedence: in-memory override (set at
|
|
168
|
+
* daemon startup or by secret-routes) → credential store → daemon-internal
|
|
169
|
+
* fallback. The schema requires `id` to be non-empty, so we fall back to
|
|
170
|
+
* `DAEMON_INTERNAL_ASSISTANT_ID` rather than the empty string.
|
|
171
|
+
*/
|
|
172
|
+
async function resolveAssistantId(): Promise<string> {
|
|
173
|
+
const inMemory = getPlatformAssistantId();
|
|
174
|
+
if (inMemory) return inMemory;
|
|
175
|
+
try {
|
|
176
|
+
const stored = await getSecureKeyAsync(
|
|
177
|
+
credentialKey("vellum", "platform_assistant_id"),
|
|
178
|
+
);
|
|
179
|
+
if (stored) return stored;
|
|
180
|
+
} catch (err) {
|
|
181
|
+
log.warn(
|
|
182
|
+
{ err },
|
|
183
|
+
"Failed to read platform_assistant_id from credential store; falling back to daemon-internal id",
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
return DAEMON_INTERNAL_ASSISTANT_ID;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Decide the truthful `secrets_redacted` flag for an export.
|
|
191
|
+
*
|
|
192
|
+
* The export entry points pass every collected credential through to the
|
|
193
|
+
* builder unfiltered, so the bundle is NOT redacted whenever any
|
|
194
|
+
* credentials made it in. Only flip to true when the credential list is
|
|
195
|
+
* empty AND every credential read succeeded — i.e. there genuinely are
|
|
196
|
+
* no secrets in the bundle.
|
|
197
|
+
*
|
|
198
|
+
* Two failure modes both force `false`:
|
|
199
|
+
* - `storeUnreachable`: the top-level `listSecureKeysAsync()` call
|
|
200
|
+
* failed, so we never even discovered which accounts exist.
|
|
201
|
+
* - `perAccountUnreachable`: the LIST call succeeded but one or more
|
|
202
|
+
* individual `getSecureKeyResultAsync(account)` reads returned
|
|
203
|
+
* `unreachable: true`. Those accounts were silently skipped from the
|
|
204
|
+
* `credentials` array, so a `credentialCount === 0` outcome could
|
|
205
|
+
* reflect "we couldn't read them" rather than "no secrets exist".
|
|
206
|
+
* Claiming a clean redaction in that case would be a lie.
|
|
207
|
+
*
|
|
208
|
+
* NOTE: a managed-mode bundle with `secrets_redacted: false` will fail
|
|
209
|
+
* the validator's cross-field refine. That surfaces an existing
|
|
210
|
+
* platform-side enforcement gap — the runtime emits the truthful value
|
|
211
|
+
* and lets the schema flag it.
|
|
212
|
+
*/
|
|
213
|
+
export function computeSecretsRedacted(
|
|
214
|
+
credentialCount: number,
|
|
215
|
+
storeUnreachable: boolean,
|
|
216
|
+
perAccountUnreachable: boolean,
|
|
217
|
+
): boolean {
|
|
218
|
+
return credentialCount === 0 && !storeUnreachable && !perAccountUnreachable;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Compute the v1 manifest inputs that aren't tied to per-call options.
|
|
223
|
+
*
|
|
224
|
+
* `walkDirectoryForMetadata` skips `embedding-models`, `data/qdrant`,
|
|
225
|
+
* `signals`, and `deprecated` — `logs` is NOT in the skip list, so log
|
|
226
|
+
* files end up in `manifest.contents`. Browser state and memory vectors
|
|
227
|
+
* (qdrant) are skipped, so those flags are false.
|
|
228
|
+
*/
|
|
229
|
+
async function buildExportManifestInputs(): Promise<ExportManifestInputs> {
|
|
230
|
+
const assistantId = await resolveAssistantId();
|
|
231
|
+
const assistantName = getAssistantName() ?? "Assistant";
|
|
232
|
+
const originMode = await getOriginMode();
|
|
233
|
+
return {
|
|
234
|
+
assistant: {
|
|
235
|
+
id: assistantId,
|
|
236
|
+
name: assistantName,
|
|
237
|
+
runtime_version: APP_VERSION,
|
|
238
|
+
},
|
|
239
|
+
origin: {
|
|
240
|
+
mode: originMode,
|
|
241
|
+
hostname: hostname(),
|
|
242
|
+
},
|
|
243
|
+
compatibility: {
|
|
244
|
+
min_runtime_version: APP_VERSION,
|
|
245
|
+
max_runtime_version: null,
|
|
246
|
+
},
|
|
247
|
+
exportOptions: {
|
|
248
|
+
include_logs: true,
|
|
249
|
+
include_browser_state: false,
|
|
250
|
+
include_memory_vectors: false,
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
|
|
139
255
|
/**
|
|
140
256
|
* POST /v1/migrations/validate
|
|
141
257
|
*
|
|
@@ -188,18 +304,21 @@ export async function handleMigrationValidate({
|
|
|
188
304
|
*
|
|
189
305
|
* Auth: Requires settings.write scope. Allowed for actor, svc_gateway, svc_daemon, local.
|
|
190
306
|
*/
|
|
191
|
-
export async function handleMigrationExport(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
307
|
+
export async function handleMigrationExport(
|
|
308
|
+
_args: RouteHandlerArgs,
|
|
309
|
+
): Promise<RouteResponse> {
|
|
310
|
+
// The legacy `description` field is no longer carried on the v1
|
|
311
|
+
// manifest. Older clients still POST it; we silently ignore it.
|
|
197
312
|
let cleanup: (() => Promise<void>) | undefined;
|
|
198
313
|
|
|
199
314
|
try {
|
|
200
315
|
// Read all stored credentials to include in the export bundle
|
|
201
316
|
const credentialList = await listSecureKeysAsync();
|
|
202
317
|
const credentials: Array<{ account: string; value: string }> = [];
|
|
318
|
+
// Track per-account read failures separately from the top-level LIST
|
|
319
|
+
// failure. A single skipped account means we cannot truthfully claim
|
|
320
|
+
// the bundle is fully redacted — we don't know what we missed.
|
|
321
|
+
let perAccountUnreachable = false;
|
|
203
322
|
if (credentialList.unreachable) {
|
|
204
323
|
log.warn(
|
|
205
324
|
"Credential store is unreachable — export will not include credentials",
|
|
@@ -208,6 +327,7 @@ export async function handleMigrationExport({
|
|
|
208
327
|
for (const account of credentialList.accounts) {
|
|
209
328
|
const result = await getSecureKeyResultAsync(account);
|
|
210
329
|
if (result.unreachable) {
|
|
330
|
+
perAccountUnreachable = true;
|
|
211
331
|
log.warn(
|
|
212
332
|
{ account },
|
|
213
333
|
"Credential store unreachable when reading credential — skipping",
|
|
@@ -218,10 +338,17 @@ export async function handleMigrationExport({
|
|
|
218
338
|
}
|
|
219
339
|
}
|
|
220
340
|
|
|
341
|
+
const manifestInputs = await buildExportManifestInputs();
|
|
342
|
+
const secretsRedacted = computeSecretsRedacted(
|
|
343
|
+
credentials.length,
|
|
344
|
+
credentialList.unreachable,
|
|
345
|
+
perAccountUnreachable,
|
|
346
|
+
);
|
|
347
|
+
|
|
221
348
|
const result = await streamExportVBundle({
|
|
222
349
|
workspaceDir: getWorkspaceDir(),
|
|
223
|
-
|
|
224
|
-
|
|
350
|
+
...manifestInputs,
|
|
351
|
+
secretsRedacted,
|
|
225
352
|
credentials,
|
|
226
353
|
checkpoint: () => {
|
|
227
354
|
const dbPath = getDbPath();
|
|
@@ -262,8 +389,12 @@ export async function handleMigrationExport({
|
|
|
262
389
|
"Content-Type": "application/octet-stream",
|
|
263
390
|
"Content-Disposition": `attachment; filename="${filename}"`,
|
|
264
391
|
"Content-Length": String(size),
|
|
265
|
-
|
|
266
|
-
"
|
|
392
|
+
// `schema_version` is now an integer; clients that parse this header
|
|
393
|
+
// continue to work, but the value flips from "1.0" to "1".
|
|
394
|
+
"X-Vbundle-Schema-Version": String(manifest.schema_version),
|
|
395
|
+
// Header name preserved for cross-version client compat; populated
|
|
396
|
+
// from the renamed manifest `checksum` field.
|
|
397
|
+
"X-Vbundle-Manifest-Sha256": manifest.checksum,
|
|
267
398
|
"X-Vbundle-Credentials-Included": String(credentials.length),
|
|
268
399
|
});
|
|
269
400
|
} catch (err) {
|
|
@@ -288,15 +419,23 @@ const MigrationExportToGcsBody = z.object({
|
|
|
288
419
|
});
|
|
289
420
|
|
|
290
421
|
/**
|
|
291
|
-
* Collected credentials plus
|
|
422
|
+
* Collected credentials plus warning markers if the credential store was
|
|
292
423
|
* unreachable. The caller surfaces the warning in logs; production callers
|
|
293
424
|
* fail closed on errors (a thrown exception → 500) to avoid shipping a
|
|
294
425
|
* bundle with partial credentials. An unreachable store is NOT an error —
|
|
295
426
|
* `handleMigrationExport` treats that case as "export without credentials".
|
|
427
|
+
*
|
|
428
|
+
* - `unreachable`: the top-level `listSecureKeysAsync()` call failed.
|
|
429
|
+
* - `perAccountUnreachable`: the LIST succeeded but one or more individual
|
|
430
|
+
* `getSecureKeyResultAsync(account)` calls returned `unreachable: true`.
|
|
431
|
+
* Those accounts were silently skipped from `credentials`, so the count
|
|
432
|
+
* here understates reality. The flag is what tells `computeSecretsRedacted`
|
|
433
|
+
* it cannot claim a clean redaction.
|
|
296
434
|
*/
|
|
297
435
|
interface CollectedCredentials {
|
|
298
436
|
credentials: Array<{ account: string; value: string }>;
|
|
299
437
|
unreachable: boolean;
|
|
438
|
+
perAccountUnreachable: boolean;
|
|
300
439
|
}
|
|
301
440
|
|
|
302
441
|
/**
|
|
@@ -311,12 +450,18 @@ async function collectExportCredentials(): Promise<CollectedCredentials> {
|
|
|
311
450
|
log.warn(
|
|
312
451
|
"Credential store is unreachable — export will not include credentials",
|
|
313
452
|
);
|
|
314
|
-
return {
|
|
453
|
+
return {
|
|
454
|
+
credentials: [],
|
|
455
|
+
unreachable: true,
|
|
456
|
+
perAccountUnreachable: false,
|
|
457
|
+
};
|
|
315
458
|
}
|
|
316
459
|
const credentials: Array<{ account: string; value: string }> = [];
|
|
460
|
+
let perAccountUnreachable = false;
|
|
317
461
|
for (const account of credentialList.accounts) {
|
|
318
462
|
const result = await getSecureKeyResultAsync(account);
|
|
319
463
|
if (result.unreachable) {
|
|
464
|
+
perAccountUnreachable = true;
|
|
320
465
|
log.warn(
|
|
321
466
|
{ account },
|
|
322
467
|
"Credential store unreachable when reading credential — skipping",
|
|
@@ -325,7 +470,7 @@ async function collectExportCredentials(): Promise<CollectedCredentials> {
|
|
|
325
470
|
credentials.push({ account, value: result.value });
|
|
326
471
|
}
|
|
327
472
|
}
|
|
328
|
-
return { credentials, unreachable: false };
|
|
473
|
+
return { credentials, unreachable: false, perAccountUnreachable };
|
|
329
474
|
}
|
|
330
475
|
|
|
331
476
|
/**
|
|
@@ -355,9 +500,7 @@ async function collectExportCredentials(): Promise<CollectedCredentials> {
|
|
|
355
500
|
*
|
|
356
501
|
* Auth: settings.write scope (matches `migrations/export`).
|
|
357
502
|
*/
|
|
358
|
-
export async function handleMigrationExportToGcs({
|
|
359
|
-
body,
|
|
360
|
-
}: RouteHandlerArgs) {
|
|
503
|
+
export async function handleMigrationExportToGcs({ body }: RouteHandlerArgs) {
|
|
361
504
|
// ── 1. Parse JSON body ────────────────────────────────────────────────
|
|
362
505
|
const parsed = MigrationExportToGcsBody.safeParse(body);
|
|
363
506
|
if (!parsed.success) {
|
|
@@ -399,9 +542,29 @@ export async function handleMigrationExportToGcs({
|
|
|
399
542
|
);
|
|
400
543
|
}
|
|
401
544
|
|
|
402
|
-
const description = parsed.data.description;
|
|
403
545
|
const uploadUrl = parsed.data.upload_url;
|
|
404
546
|
|
|
547
|
+
// Compute the v1 manifest inputs once outside the async job runner so we
|
|
548
|
+
// surface failures (e.g. credential-store probe) as a synchronous 500
|
|
549
|
+
// before the caller starts polling.
|
|
550
|
+
let manifestInputs: ExportManifestInputs;
|
|
551
|
+
try {
|
|
552
|
+
manifestInputs = await buildExportManifestInputs();
|
|
553
|
+
} catch (err) {
|
|
554
|
+
log.error({ err }, "Failed to assemble export manifest inputs");
|
|
555
|
+
throw new InternalError(
|
|
556
|
+
err instanceof Error
|
|
557
|
+
? err.message
|
|
558
|
+
: "Failed to assemble export manifest inputs",
|
|
559
|
+
);
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
const secretsRedacted = computeSecretsRedacted(
|
|
563
|
+
collected.credentials.length,
|
|
564
|
+
collected.unreachable,
|
|
565
|
+
collected.perAccountUnreachable,
|
|
566
|
+
);
|
|
567
|
+
|
|
405
568
|
// ── 4. Enqueue the job. The runner captures the collected credentials.
|
|
406
569
|
let job;
|
|
407
570
|
try {
|
|
@@ -410,8 +573,8 @@ export async function handleMigrationExportToGcs({
|
|
|
410
573
|
try {
|
|
411
574
|
const result = await streamExportVBundle({
|
|
412
575
|
workspaceDir: getWorkspaceDir(),
|
|
413
|
-
|
|
414
|
-
|
|
576
|
+
...manifestInputs,
|
|
577
|
+
secretsRedacted,
|
|
415
578
|
credentials: collected.credentials,
|
|
416
579
|
checkpoint: () => {
|
|
417
580
|
const dbPath = getDbPath();
|
|
@@ -493,7 +656,7 @@ export async function handleMigrationExportToGcs({
|
|
|
493
656
|
|
|
494
657
|
return {
|
|
495
658
|
size,
|
|
496
|
-
sha256: manifest.
|
|
659
|
+
sha256: manifest.checksum,
|
|
497
660
|
schemaVersion: manifest.schema_version,
|
|
498
661
|
credentialsIncluded: collected.credentials.length,
|
|
499
662
|
};
|
|
@@ -557,9 +720,7 @@ async function extractFileData(
|
|
|
557
720
|
const formData = await syntheticReq.formData();
|
|
558
721
|
const file = formData.get("file");
|
|
559
722
|
if (!file || !(file instanceof Blob)) {
|
|
560
|
-
throw new BadRequestError(
|
|
561
|
-
'Multipart upload requires a "file" field',
|
|
562
|
-
);
|
|
723
|
+
throw new BadRequestError('Multipart upload requires a "file" field');
|
|
563
724
|
}
|
|
564
725
|
return new Uint8Array(await file.arrayBuffer());
|
|
565
726
|
} catch (err) {
|
|
@@ -910,7 +1071,7 @@ class GcsImportError extends Error {
|
|
|
910
1071
|
* The signed URL is never echoed into errors or logs — only the extracted
|
|
911
1072
|
* `host`/`path` are.
|
|
912
1073
|
*/
|
|
913
|
-
|
|
1074
|
+
async function runGcsImport(
|
|
914
1075
|
url: string,
|
|
915
1076
|
_correlationId?: string,
|
|
916
1077
|
): Promise<ImportSummary> {
|
|
@@ -1303,9 +1464,7 @@ function throwGcsImportError(err: unknown): never {
|
|
|
1303
1464
|
*
|
|
1304
1465
|
* Auth: Requires settings.write scope. Allowed for actor, svc_gateway, svc_daemon, local.
|
|
1305
1466
|
*/
|
|
1306
|
-
export async function handleMigrationImportFromGcs({
|
|
1307
|
-
body,
|
|
1308
|
-
}: RouteHandlerArgs) {
|
|
1467
|
+
export async function handleMigrationImportFromGcs({ body }: RouteHandlerArgs) {
|
|
1309
1468
|
const parsed = MigrationImportFromGcsBody.safeParse(body);
|
|
1310
1469
|
if (!parsed.success) {
|
|
1311
1470
|
throw new BadRequestError(
|
|
@@ -1652,8 +1811,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
1652
1811
|
}),
|
|
1653
1812
|
additionalResponses: {
|
|
1654
1813
|
"502": {
|
|
1655
|
-
description:
|
|
1656
|
-
"Upstream fetch failed (URL body only).",
|
|
1814
|
+
description: "Upstream fetch failed (URL body only).",
|
|
1657
1815
|
},
|
|
1658
1816
|
},
|
|
1659
1817
|
responseBody: z.object({
|
|
@@ -1710,8 +1868,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
1710
1868
|
}),
|
|
1711
1869
|
additionalResponses: {
|
|
1712
1870
|
"409": {
|
|
1713
|
-
description:
|
|
1714
|
-
"Another import job is already pending or running.",
|
|
1871
|
+
description: "Another import job is already pending or running.",
|
|
1715
1872
|
},
|
|
1716
1873
|
},
|
|
1717
1874
|
handler: handleMigrationImportFromGcs,
|
|
@@ -15,7 +15,7 @@ import { RouteError } from "../errors.js";
|
|
|
15
15
|
*/
|
|
16
16
|
const PLAYGROUND_DISABLED_CODE = "playground_disabled";
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
function isPlaygroundEnabled(): boolean {
|
|
19
19
|
return isAssistantFeatureFlagEnabled("compaction-playground", getConfig());
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -6,8 +6,6 @@ import { ROUTES as SEED_CONVERSATION_ROUTES } from "./seed-conversation.js";
|
|
|
6
6
|
import { ROUTES as SEEDED_CONVERSATIONS_ROUTES } from "./seeded-conversations.js";
|
|
7
7
|
import { ROUTES as STATE_ROUTES } from "./state.js";
|
|
8
8
|
|
|
9
|
-
export { assertPlaygroundEnabled } from "./guard.js";
|
|
10
|
-
|
|
11
9
|
export const ROUTES: RouteDefinition[] = [
|
|
12
10
|
...FORCE_COMPACT_ROUTES,
|
|
13
11
|
...INJECT_FAILURES_ROUTES,
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
|
|
15
15
|
import { z } from "zod";
|
|
16
16
|
|
|
17
|
-
import { broadcastToAllClients } from "../../acp/index.js";
|
|
18
17
|
import {
|
|
19
18
|
getActiveRestartToken,
|
|
20
19
|
handleRecordingPause,
|
|
@@ -24,7 +23,6 @@ import {
|
|
|
24
23
|
handleRecordingStop,
|
|
25
24
|
isRecordingIdle,
|
|
26
25
|
} from "../../daemon/handlers/recording.js";
|
|
27
|
-
import type { HandlerContext } from "../../daemon/handlers/shared.js";
|
|
28
26
|
import type {
|
|
29
27
|
RecordingOptions,
|
|
30
28
|
RecordingStatus,
|
|
@@ -40,17 +38,6 @@ import type { RouteDefinition, RouteHandlerArgs } from "./types.js";
|
|
|
40
38
|
|
|
41
39
|
const log = getLogger("recording-routes");
|
|
42
40
|
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Broadcast shim — recording handlers only use ctx.broadcast()
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
|
|
47
|
-
function getBroadcastCtx(): HandlerContext {
|
|
48
|
-
if (!broadcastToAllClients) {
|
|
49
|
-
throw new InternalError("Broadcast not initialized");
|
|
50
|
-
}
|
|
51
|
-
return { broadcast: broadcastToAllClients } as HandlerContext;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
41
|
// ---------------------------------------------------------------------------
|
|
55
42
|
// Handlers
|
|
56
43
|
// ---------------------------------------------------------------------------
|
|
@@ -60,11 +47,9 @@ async function handleStartRecording({ body }: RouteHandlerArgs) {
|
|
|
60
47
|
throw new BadRequestError("conversationId is required");
|
|
61
48
|
}
|
|
62
49
|
|
|
63
|
-
const ctx = getBroadcastCtx();
|
|
64
50
|
const recordingId = handleRecordingStart(
|
|
65
51
|
body.conversationId,
|
|
66
52
|
body.options as RecordingOptions | undefined,
|
|
67
|
-
ctx,
|
|
68
53
|
);
|
|
69
54
|
|
|
70
55
|
if (!recordingId) {
|
|
@@ -90,8 +75,7 @@ async function handleStopRecording({ body }: RouteHandlerArgs) {
|
|
|
90
75
|
throw new BadRequestError("conversationId is required");
|
|
91
76
|
}
|
|
92
77
|
|
|
93
|
-
const
|
|
94
|
-
const recordingId = handleRecordingStop(body.conversationId, ctx);
|
|
78
|
+
const recordingId = handleRecordingStop(body.conversationId);
|
|
95
79
|
|
|
96
80
|
if (!recordingId) {
|
|
97
81
|
log.debug(
|
|
@@ -114,8 +98,7 @@ async function handlePauseRecording({ body }: RouteHandlerArgs) {
|
|
|
114
98
|
throw new BadRequestError("conversationId is required");
|
|
115
99
|
}
|
|
116
100
|
|
|
117
|
-
const
|
|
118
|
-
const recordingId = handleRecordingPause(body.conversationId, ctx);
|
|
101
|
+
const recordingId = handleRecordingPause(body.conversationId);
|
|
119
102
|
|
|
120
103
|
if (!recordingId) {
|
|
121
104
|
log.debug(
|
|
@@ -138,8 +121,7 @@ async function handleResumeRecording({ body }: RouteHandlerArgs) {
|
|
|
138
121
|
throw new BadRequestError("conversationId is required");
|
|
139
122
|
}
|
|
140
123
|
|
|
141
|
-
const
|
|
142
|
-
const recordingId = handleRecordingResume(body.conversationId, ctx);
|
|
124
|
+
const recordingId = handleRecordingResume(body.conversationId);
|
|
143
125
|
|
|
144
126
|
if (!recordingId) {
|
|
145
127
|
log.debug(
|
|
@@ -198,10 +180,8 @@ async function handlePostRecordingStatus({ body }: RouteHandlerArgs) {
|
|
|
198
180
|
type: "recording_status",
|
|
199
181
|
};
|
|
200
182
|
|
|
201
|
-
const ctx = getBroadcastCtx();
|
|
202
|
-
|
|
203
183
|
try {
|
|
204
|
-
await handleRecordingStatusCore(msg
|
|
184
|
+
await handleRecordingStatusCore(msg);
|
|
205
185
|
} catch (err) {
|
|
206
186
|
log.error(
|
|
207
187
|
{ err, conversationId: body.conversationId, status: body.status },
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
import { getLogger } from "../../util/logger.js";
|
|
17
17
|
import { buildAssistantEvent } from "../assistant-event.js";
|
|
18
18
|
import { assistantEventHub } from "../assistant-event-hub.js";
|
|
19
|
-
import { DAEMON_INTERNAL_ASSISTANT_ID } from "../assistant-scope.js";
|
|
20
19
|
import { BadRequestError, NotFoundError } from "./errors.js";
|
|
21
20
|
import type { RouteDefinition } from "./types.js";
|
|
22
21
|
|
|
@@ -46,9 +45,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
46
45
|
|
|
47
46
|
const conversation = getConversation(conversationId);
|
|
48
47
|
if (!conversation) {
|
|
49
|
-
throw new NotFoundError(
|
|
50
|
-
`Conversation ${conversationId} not found`,
|
|
51
|
-
);
|
|
48
|
+
throw new NotFoundError(`Conversation ${conversationId} not found`);
|
|
52
49
|
}
|
|
53
50
|
|
|
54
51
|
updateConversationTitle(conversationId, title, 0);
|
|
@@ -56,7 +53,6 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
56
53
|
assistantEventHub
|
|
57
54
|
.publish(
|
|
58
55
|
buildAssistantEvent(
|
|
59
|
-
DAEMON_INTERNAL_ASSISTANT_ID,
|
|
60
56
|
{
|
|
61
57
|
type: "conversation_title_updated",
|
|
62
58
|
conversationId,
|
|
@@ -71,7 +67,7 @@ export const ROUTES: RouteDefinition[] = [
|
|
|
71
67
|
|
|
72
68
|
assistantEventHub
|
|
73
69
|
.publish(
|
|
74
|
-
buildAssistantEvent(
|
|
70
|
+
buildAssistantEvent({
|
|
75
71
|
type: "conversation_list_invalidated",
|
|
76
72
|
reason: "renamed",
|
|
77
73
|
}),
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
|
|
10
10
|
import { getOrCreateConversation } from "../../daemon/conversation-store.js";
|
|
11
|
+
import { INTERNAL_GUARDIAN_TRUST_CONTEXT } from "../../daemon/trust-context.js";
|
|
11
12
|
import { bootstrapConversation } from "../../memory/conversation-bootstrap.js";
|
|
12
13
|
import { getConversation } from "../../memory/conversation-crud.js";
|
|
13
14
|
import { runScript } from "../../schedule/run-script.js";
|
|
@@ -28,10 +29,6 @@ import { BadRequestError, InternalError, NotFoundError } from "./errors.js";
|
|
|
28
29
|
import type { RouteDefinition, RouteHandlerArgs } from "./types.js";
|
|
29
30
|
|
|
30
31
|
const log = getLogger("schedule-routes");
|
|
31
|
-
const SCHEDULE_GUARDIAN_TRUST_CONTEXT = {
|
|
32
|
-
sourceChannel: "vellum",
|
|
33
|
-
trustClass: "guardian",
|
|
34
|
-
} as const;
|
|
35
32
|
|
|
36
33
|
// ---------------------------------------------------------------------------
|
|
37
34
|
// Handlers (transport-agnostic)
|
|
@@ -382,7 +379,7 @@ async function handleRunScheduleNow(id: string) {
|
|
|
382
379
|
{ taskId, workingDir: process.cwd(), source: "schedule" },
|
|
383
380
|
async (conversationId, message, taskRunId) => {
|
|
384
381
|
const conversation = await getOrCreateConversation(conversationId, {
|
|
385
|
-
trustContext:
|
|
382
|
+
trustContext: INTERNAL_GUARDIAN_TRUST_CONTEXT,
|
|
386
383
|
});
|
|
387
384
|
conversation.taskRunId = taskRunId;
|
|
388
385
|
try {
|
|
@@ -479,7 +476,7 @@ async function handleRunScheduleNow(id: string) {
|
|
|
479
476
|
"Executing schedule manually (run now)",
|
|
480
477
|
);
|
|
481
478
|
const activeConversation = await getOrCreateConversation(conversationId, {
|
|
482
|
-
trustContext:
|
|
479
|
+
trustContext: INTERNAL_GUARDIAN_TRUST_CONTEXT,
|
|
483
480
|
});
|
|
484
481
|
activeConversation.taskRunId = undefined;
|
|
485
482
|
await activeConversation.processMessage(
|