@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
|
@@ -5,6 +5,11 @@ import { dirname } from "node:path";
|
|
|
5
5
|
|
|
6
6
|
import { v4 as uuid } from "uuid";
|
|
7
7
|
|
|
8
|
+
import {
|
|
9
|
+
assistantEventHub,
|
|
10
|
+
broadcastMessage,
|
|
11
|
+
} from "../runtime/assistant-event-hub.js";
|
|
12
|
+
import * as pendingInteractions from "../runtime/pending-interactions.js";
|
|
8
13
|
import type { ToolExecutionResult } from "../tools/types.js";
|
|
9
14
|
import { AssistantError, ErrorCode } from "../util/errors.js";
|
|
10
15
|
import { getLogger } from "../util/logger.js";
|
|
@@ -18,6 +23,7 @@ interface PendingTransfer {
|
|
|
18
23
|
timer: ReturnType<typeof setTimeout>;
|
|
19
24
|
requestId: string;
|
|
20
25
|
transferId: string;
|
|
26
|
+
conversationId: string;
|
|
21
27
|
direction: "to_host" | "to_sandbox";
|
|
22
28
|
filePath: string;
|
|
23
29
|
overwrite?: boolean;
|
|
@@ -41,6 +47,8 @@ function computeTimeoutMs(sizeBytes?: number): number {
|
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
export class HostTransferProxy {
|
|
50
|
+
private static _instance: HostTransferProxy | null = null;
|
|
51
|
+
|
|
44
52
|
/**
|
|
45
53
|
* Override for tests: when set, all timeout durations use this value instead
|
|
46
54
|
* of the size-adaptive computation. Reset to `undefined` after tests.
|
|
@@ -48,28 +56,49 @@ export class HostTransferProxy {
|
|
|
48
56
|
*/
|
|
49
57
|
static _testTimeoutOverrideMs: number | undefined;
|
|
50
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Lazily-initialized singleton. Availability of an actual desktop
|
|
61
|
+
* connection is checked at send time via the assistant event hub,
|
|
62
|
+
* not at construction time.
|
|
63
|
+
*/
|
|
64
|
+
static get instance(): HostTransferProxy {
|
|
65
|
+
if (!HostTransferProxy._instance) {
|
|
66
|
+
log.info("Creating singleton HostTransferProxy");
|
|
67
|
+
HostTransferProxy._instance = new HostTransferProxy();
|
|
68
|
+
}
|
|
69
|
+
return HostTransferProxy._instance;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Dispose the singleton. Called during graceful shutdown. */
|
|
73
|
+
static disposeInstance(): void {
|
|
74
|
+
if (HostTransferProxy._instance) {
|
|
75
|
+
HostTransferProxy._instance.dispose();
|
|
76
|
+
HostTransferProxy._instance = null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** For tests. */
|
|
81
|
+
static reset(): void {
|
|
82
|
+
HostTransferProxy._instance = null;
|
|
83
|
+
}
|
|
84
|
+
|
|
51
85
|
/** Pending transfers keyed by requestId (for resolution from client results). */
|
|
52
86
|
private pending = new Map<string, PendingTransfer>();
|
|
53
87
|
/** Pending transfers keyed by transferId (for content endpoint lookups). */
|
|
54
88
|
private transfers = new Map<string, PendingTransfer>();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.onInternalResolve = onInternalResolve;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Whether a client with `host_file` capability is connected.
|
|
92
|
+
* Transfers piggyback on the host_file capability.
|
|
93
|
+
*/
|
|
94
|
+
isAvailable(): boolean {
|
|
95
|
+
return (
|
|
96
|
+
assistantEventHub.getMostRecentClientByCapability("host_file") != null
|
|
97
|
+
);
|
|
65
98
|
}
|
|
66
99
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
clientConnected: boolean,
|
|
70
|
-
): void {
|
|
71
|
-
this.sendToClient = sendToClient;
|
|
72
|
-
this.clientConnected = clientConnected;
|
|
100
|
+
private send(msg: ServerMessage): void {
|
|
101
|
+
broadcastMessage(msg, undefined, { targetCapability: "host_file" });
|
|
73
102
|
}
|
|
74
103
|
|
|
75
104
|
/**
|
|
@@ -116,7 +145,7 @@ export class HostTransferProxy {
|
|
|
116
145
|
this.pending.delete(requestId);
|
|
117
146
|
this.transfers.delete(transferId);
|
|
118
147
|
detachAbort();
|
|
119
|
-
|
|
148
|
+
pendingInteractions.resolve(requestId);
|
|
120
149
|
log.warn(
|
|
121
150
|
{ requestId, transferId, direction: "to_host" },
|
|
122
151
|
"Host transfer proxy request timed out",
|
|
@@ -135,12 +164,13 @@ export class HostTransferProxy {
|
|
|
135
164
|
this.pending.delete(requestId);
|
|
136
165
|
this.transfers.delete(transferId);
|
|
137
166
|
detachAbort();
|
|
138
|
-
|
|
167
|
+
pendingInteractions.resolve(requestId);
|
|
139
168
|
try {
|
|
140
|
-
this.
|
|
169
|
+
this.send({
|
|
141
170
|
type: "host_transfer_cancel",
|
|
142
171
|
requestId,
|
|
143
|
-
|
|
172
|
+
conversationId: input.conversationId,
|
|
173
|
+
});
|
|
144
174
|
} catch {
|
|
145
175
|
// Best-effort cancel notification — connection may already be closed.
|
|
146
176
|
}
|
|
@@ -157,6 +187,7 @@ export class HostTransferProxy {
|
|
|
157
187
|
timer,
|
|
158
188
|
requestId,
|
|
159
189
|
transferId,
|
|
190
|
+
conversationId: input.conversationId,
|
|
160
191
|
direction: "to_host",
|
|
161
192
|
filePath: input.destPath,
|
|
162
193
|
sizeBytes,
|
|
@@ -168,7 +199,7 @@ export class HostTransferProxy {
|
|
|
168
199
|
this.transfers.set(transferId, entry);
|
|
169
200
|
|
|
170
201
|
try {
|
|
171
|
-
this.
|
|
202
|
+
this.send({
|
|
172
203
|
type: "host_transfer_request",
|
|
173
204
|
requestId,
|
|
174
205
|
conversationId: input.conversationId,
|
|
@@ -178,13 +209,13 @@ export class HostTransferProxy {
|
|
|
178
209
|
sizeBytes,
|
|
179
210
|
sha256,
|
|
180
211
|
overwrite: input.overwrite,
|
|
181
|
-
}
|
|
212
|
+
});
|
|
182
213
|
} catch (err) {
|
|
183
214
|
clearTimeout(timer);
|
|
184
215
|
this.pending.delete(requestId);
|
|
185
216
|
this.transfers.delete(transferId);
|
|
186
217
|
detachAbort();
|
|
187
|
-
|
|
218
|
+
pendingInteractions.resolve(requestId);
|
|
188
219
|
log.warn(
|
|
189
220
|
{ requestId, transferId, err },
|
|
190
221
|
"Host transfer proxy send failed",
|
|
@@ -237,7 +268,7 @@ export class HostTransferProxy {
|
|
|
237
268
|
this.pending.delete(requestId);
|
|
238
269
|
this.transfers.delete(transferId);
|
|
239
270
|
detachAbort();
|
|
240
|
-
|
|
271
|
+
pendingInteractions.resolve(requestId);
|
|
241
272
|
log.warn(
|
|
242
273
|
{ requestId, transferId, direction: "to_sandbox" },
|
|
243
274
|
"Host transfer proxy request timed out",
|
|
@@ -255,12 +286,13 @@ export class HostTransferProxy {
|
|
|
255
286
|
this.pending.delete(requestId);
|
|
256
287
|
this.transfers.delete(transferId);
|
|
257
288
|
detachAbort();
|
|
258
|
-
|
|
289
|
+
pendingInteractions.resolve(requestId);
|
|
259
290
|
try {
|
|
260
|
-
this.
|
|
291
|
+
this.send({
|
|
261
292
|
type: "host_transfer_cancel",
|
|
262
293
|
requestId,
|
|
263
|
-
|
|
294
|
+
conversationId: input.conversationId,
|
|
295
|
+
});
|
|
264
296
|
} catch {
|
|
265
297
|
// Best-effort cancel notification — connection may already be closed.
|
|
266
298
|
}
|
|
@@ -277,6 +309,7 @@ export class HostTransferProxy {
|
|
|
277
309
|
timer,
|
|
278
310
|
requestId,
|
|
279
311
|
transferId,
|
|
312
|
+
conversationId: input.conversationId,
|
|
280
313
|
direction: "to_sandbox",
|
|
281
314
|
filePath: input.destPath,
|
|
282
315
|
overwrite: input.overwrite,
|
|
@@ -286,20 +319,20 @@ export class HostTransferProxy {
|
|
|
286
319
|
this.transfers.set(transferId, entry);
|
|
287
320
|
|
|
288
321
|
try {
|
|
289
|
-
this.
|
|
322
|
+
this.send({
|
|
290
323
|
type: "host_transfer_request",
|
|
291
324
|
requestId,
|
|
292
325
|
conversationId: input.conversationId,
|
|
293
326
|
direction: "to_sandbox",
|
|
294
327
|
transferId,
|
|
295
328
|
sourcePath: input.sourcePath,
|
|
296
|
-
}
|
|
329
|
+
});
|
|
297
330
|
} catch (err) {
|
|
298
331
|
clearTimeout(timer);
|
|
299
332
|
this.pending.delete(requestId);
|
|
300
333
|
this.transfers.delete(transferId);
|
|
301
334
|
detachAbort();
|
|
302
|
-
|
|
335
|
+
pendingInteractions.resolve(requestId);
|
|
303
336
|
log.warn(
|
|
304
337
|
{ requestId, transferId, err },
|
|
305
338
|
"Host transfer proxy send failed",
|
|
@@ -311,9 +344,6 @@ export class HostTransferProxy {
|
|
|
311
344
|
|
|
312
345
|
/**
|
|
313
346
|
* Resolve a to_host transfer result from the client.
|
|
314
|
-
*
|
|
315
|
-
* Called when the client POSTs the result after downloading content
|
|
316
|
-
* and writing it to the host filesystem.
|
|
317
347
|
*/
|
|
318
348
|
resolveTransferResult(
|
|
319
349
|
requestId: string,
|
|
@@ -454,12 +484,13 @@ export class HostTransferProxy {
|
|
|
454
484
|
entry.detachAbort();
|
|
455
485
|
this.pending.delete(requestId);
|
|
456
486
|
this.transfers.delete(entry.transferId);
|
|
457
|
-
|
|
487
|
+
pendingInteractions.resolve(requestId);
|
|
458
488
|
try {
|
|
459
|
-
this.
|
|
489
|
+
this.send({
|
|
460
490
|
type: "host_transfer_cancel",
|
|
461
491
|
requestId,
|
|
462
|
-
|
|
492
|
+
conversationId: entry.conversationId,
|
|
493
|
+
});
|
|
463
494
|
} catch {
|
|
464
495
|
// Best-effort cancel notification — connection may already be closed.
|
|
465
496
|
}
|
|
@@ -470,23 +501,30 @@ export class HostTransferProxy {
|
|
|
470
501
|
return this.transfers.has(transferId);
|
|
471
502
|
}
|
|
472
503
|
|
|
473
|
-
|
|
474
|
-
|
|
504
|
+
/**
|
|
505
|
+
* Look up the requestId for a given transferId.
|
|
506
|
+
* Used by route handlers to correlate transfer content endpoints with
|
|
507
|
+
* pending interactions.
|
|
508
|
+
*/
|
|
509
|
+
getRequestIdForTransfer(transferId: string): string | null {
|
|
510
|
+
const entry = this.transfers.get(transferId);
|
|
511
|
+
return entry?.requestId ?? null;
|
|
475
512
|
}
|
|
476
513
|
|
|
477
514
|
dispose(): void {
|
|
478
515
|
for (const [requestId, entry] of this.pending) {
|
|
479
516
|
clearTimeout(entry.timer);
|
|
480
517
|
entry.detachAbort();
|
|
481
|
-
|
|
518
|
+
pendingInteractions.resolve(requestId);
|
|
482
519
|
try {
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
520
|
+
this.send({
|
|
521
|
+
type: "host_transfer_cancel",
|
|
522
|
+
requestId,
|
|
523
|
+
conversationId: entry.conversationId,
|
|
524
|
+
});
|
|
525
|
+
} catch {
|
|
526
|
+
// Best-effort cancel notification — connection may already be closed.
|
|
527
|
+
}
|
|
490
528
|
entry.reject(
|
|
491
529
|
new AssistantError(
|
|
492
530
|
"Host transfer proxy disposed",
|
package/src/daemon/lifecycle.ts
CHANGED
|
@@ -9,7 +9,10 @@ import { reconcileCallsOnStartup } from "../calls/call-recovery.js";
|
|
|
9
9
|
import { setRelayBroadcast } from "../calls/relay-server.js";
|
|
10
10
|
import { TwilioConversationRelayProvider } from "../calls/twilio-provider.js";
|
|
11
11
|
import { setVoiceBridgeDeps } from "../calls/voice-session-bridge.js";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
initFeatureFlagOverrides,
|
|
14
|
+
isAssistantFeatureFlagEnabled,
|
|
15
|
+
} from "../config/assistant-feature-flags.js";
|
|
13
16
|
import {
|
|
14
17
|
getPlatformAssistantId,
|
|
15
18
|
getRuntimeHttpHost,
|
|
@@ -19,6 +22,7 @@ import {
|
|
|
19
22
|
} from "../config/env.js";
|
|
20
23
|
import { loadConfig, mergeDefaultWorkspaceConfig } from "../config/loader.js";
|
|
21
24
|
import type { AssistantConfig } from "../config/schema.js";
|
|
25
|
+
import { seedInferenceProfiles } from "../config/seed-inference-profiles.js";
|
|
22
26
|
import type { CesClient } from "../credential-execution/client.js";
|
|
23
27
|
import { createCesClient } from "../credential-execution/client.js";
|
|
24
28
|
import {
|
|
@@ -69,6 +73,7 @@ import { seedOAuthProviders } from "../oauth/seed-providers.js";
|
|
|
69
73
|
import { loadUserPlugins } from "../plugins/user-loader.js";
|
|
70
74
|
import { ensurePromptFiles } from "../prompts/system-prompt.js";
|
|
71
75
|
import { resolveManagedProxyContext } from "../providers/managed-proxy/context.js";
|
|
76
|
+
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
72
77
|
import {
|
|
73
78
|
initAuthSigningKey,
|
|
74
79
|
resolveSigningKey,
|
|
@@ -455,6 +460,20 @@ export async function runDaemon(): Promise<void> {
|
|
|
455
460
|
}
|
|
456
461
|
} // end if (dbReady)
|
|
457
462
|
|
|
463
|
+
// Seed managed inference profiles into the workspace config. Runs
|
|
464
|
+
// after workspace migrations (which may have created the initial
|
|
465
|
+
// profile slots) and before mergeDefaultWorkspaceConfig / loadConfig
|
|
466
|
+
// so the profiles are on disk for the first config load.
|
|
467
|
+
try {
|
|
468
|
+
seedInferenceProfiles();
|
|
469
|
+
log.info("Inference profile seeding complete");
|
|
470
|
+
} catch (err) {
|
|
471
|
+
log.warn(
|
|
472
|
+
{ err },
|
|
473
|
+
"Inference profile seeding failed — continuing startup",
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
|
|
458
477
|
// Merge CLI-provided default config (from VELLUM_DEFAULT_WORKSPACE_CONFIG_PATH)
|
|
459
478
|
// into the workspace config file before the first loadConfig() call so
|
|
460
479
|
// onboarding preferences are persisted alongside schema defaults.
|
|
@@ -797,7 +816,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
797
816
|
|
|
798
817
|
// Register the broadcast function for the notification signal pipeline's
|
|
799
818
|
// macOS adapter so it can deliver notification_intent messages to clients.
|
|
800
|
-
registerBroadcastFn((msg) =>
|
|
819
|
+
registerBroadcastFn((msg) => broadcastMessage(msg));
|
|
801
820
|
|
|
802
821
|
const scheduler = startScheduler(
|
|
803
822
|
async (conversationId, message, options) => {
|
|
@@ -884,7 +903,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
884
903
|
});
|
|
885
904
|
},
|
|
886
905
|
(info) => {
|
|
887
|
-
|
|
906
|
+
broadcastMessage({
|
|
888
907
|
type: "schedule_conversation_created",
|
|
889
908
|
conversationId: info.conversationId,
|
|
890
909
|
scheduleJobId: info.scheduleJobId,
|
|
@@ -961,7 +980,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
961
980
|
});
|
|
962
981
|
try {
|
|
963
982
|
await runtimeHttp.start();
|
|
964
|
-
setRelayBroadcast((msg) =>
|
|
983
|
+
setRelayBroadcast((msg) => broadcastMessage(msg));
|
|
965
984
|
setPointerMessageProcessor(
|
|
966
985
|
async (conversationId, instruction, requiredFacts) => {
|
|
967
986
|
const conversation =
|
|
@@ -1201,9 +1220,9 @@ export async function runDaemon(): Promise<void> {
|
|
|
1201
1220
|
|
|
1202
1221
|
const heartbeatConfig = config.heartbeat;
|
|
1203
1222
|
const heartbeat = new HeartbeatService({
|
|
1204
|
-
alerter: (alert) =>
|
|
1223
|
+
alerter: (alert) => broadcastMessage(alert),
|
|
1205
1224
|
onConversationCreated: (info) =>
|
|
1206
|
-
|
|
1225
|
+
broadcastMessage({
|
|
1207
1226
|
type: "heartbeat_conversation_created",
|
|
1208
1227
|
conversationId: info.conversationId,
|
|
1209
1228
|
title: info.title,
|
|
@@ -1218,16 +1237,31 @@ export async function runDaemon(): Promise<void> {
|
|
|
1218
1237
|
"Heartbeat service configured",
|
|
1219
1238
|
);
|
|
1220
1239
|
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
},
|
|
1229
|
-
"Filing service configured",
|
|
1240
|
+
// Filing yields to the memory v2 consolidation job when the flag is on —
|
|
1241
|
+
// both serve the same role (periodic background memory processing) and
|
|
1242
|
+
// running both is redundant. The consolidation job runs through the
|
|
1243
|
+
// memory jobs worker (see `maybeEnqueueGraphMaintenanceJobs`).
|
|
1244
|
+
const memoryV2Enabled = isAssistantFeatureFlagEnabled(
|
|
1245
|
+
"memory-v2-enabled",
|
|
1246
|
+
config,
|
|
1230
1247
|
);
|
|
1248
|
+
let filing: FilingService | null = null;
|
|
1249
|
+
if (!memoryV2Enabled) {
|
|
1250
|
+
const filingConfig = config.filing;
|
|
1251
|
+
filing = new FilingService();
|
|
1252
|
+
filing.start();
|
|
1253
|
+
log.info(
|
|
1254
|
+
{
|
|
1255
|
+
enabled: filingConfig.enabled,
|
|
1256
|
+
intervalMs: filingConfig.intervalMs,
|
|
1257
|
+
},
|
|
1258
|
+
"Filing service configured",
|
|
1259
|
+
);
|
|
1260
|
+
} else {
|
|
1261
|
+
log.info(
|
|
1262
|
+
"Filing service skipped — memory v2 consolidation is the active background memory job",
|
|
1263
|
+
);
|
|
1264
|
+
}
|
|
1231
1265
|
|
|
1232
1266
|
// Retrieve the MCP manager if MCP servers were configured.
|
|
1233
1267
|
// The manager is a singleton created during initializeProvidersAndTools().
|
|
@@ -314,6 +314,7 @@ export interface GenerationHandoff {
|
|
|
314
314
|
|
|
315
315
|
export interface ModelInfo {
|
|
316
316
|
type: "model_info";
|
|
317
|
+
conversationId?: string;
|
|
317
318
|
model: string;
|
|
318
319
|
provider: string;
|
|
319
320
|
configuredProviders?: string[];
|
|
@@ -351,6 +352,12 @@ export interface HistoryResponseToolCall {
|
|
|
351
352
|
riskReason?: string;
|
|
352
353
|
/** Whether the tool was auto-approved (true) or required explicit user input (false). */
|
|
353
354
|
autoApproved?: boolean;
|
|
355
|
+
/** How the approval decision was reached: prompted, auto, blocked, or unknown (legacy). */
|
|
356
|
+
approvalMode?: string;
|
|
357
|
+
/** Why the approval decision was reached (stable enum for client display). */
|
|
358
|
+
approvalReason?: string;
|
|
359
|
+
/** Snapshot of the auto-approve threshold at execution time. */
|
|
360
|
+
riskThreshold?: string;
|
|
354
361
|
}
|
|
355
362
|
|
|
356
363
|
export interface HistoryResponseSurface {
|
|
@@ -143,12 +143,20 @@ export interface ToolResult {
|
|
|
143
143
|
riskLevel?: string;
|
|
144
144
|
/** Human-readable reason for the risk classification. */
|
|
145
145
|
riskReason?: string;
|
|
146
|
+
/** ID of the trust rule that matched this invocation (if any). */
|
|
147
|
+
matchedTrustRuleId?: string;
|
|
146
148
|
/** Whether the daemon is running in a containerized (Docker) environment. */
|
|
147
149
|
isContainerized?: boolean;
|
|
148
150
|
/** Scope options ladder for the rule editor modal (narrowest to broadest). */
|
|
149
151
|
riskScopeOptions?: Array<{ pattern: string; label: string }>;
|
|
150
152
|
/** Directory scope ladder for the rule editor modal (narrowest to broadest). */
|
|
151
153
|
riskDirectoryScopeOptions?: Array<{ scope: string; label: string }>;
|
|
154
|
+
/** How the approval decision was reached: prompted, auto, blocked, or unknown (legacy). */
|
|
155
|
+
approvalMode?: string;
|
|
156
|
+
/** Why the approval decision was reached (stable enum for client display). */
|
|
157
|
+
approvalReason?: string;
|
|
158
|
+
/** Snapshot of the auto-approve threshold at execution time. */
|
|
159
|
+
riskThreshold?: string;
|
|
152
160
|
}
|
|
153
161
|
|
|
154
162
|
export interface ConfirmationRequest {
|
|
@@ -227,18 +235,13 @@ export interface MessageComplete {
|
|
|
227
235
|
|
|
228
236
|
export interface ErrorMessage {
|
|
229
237
|
type: "error";
|
|
238
|
+
conversationId?: string;
|
|
239
|
+
code?: string;
|
|
230
240
|
message: string;
|
|
231
241
|
/** Categorizes the error so the client can offer contextual actions (e.g. "Send Anyway" for secret_blocked). */
|
|
232
242
|
category?: string;
|
|
233
243
|
}
|
|
234
244
|
|
|
235
|
-
export interface SecretDetected {
|
|
236
|
-
type: "secret_detected";
|
|
237
|
-
toolName: string;
|
|
238
|
-
matches: Array<{ type: string; redactedValue: string }>;
|
|
239
|
-
action: "redact" | "warn" | "block" | "prompt";
|
|
240
|
-
}
|
|
241
|
-
|
|
242
245
|
export interface MessageQueued {
|
|
243
246
|
type: "message_queued";
|
|
244
247
|
conversationId: string;
|
|
@@ -360,7 +363,6 @@ export type TraceEventKind =
|
|
|
360
363
|
| "tool_permission_decided"
|
|
361
364
|
| "tool_finished"
|
|
362
365
|
| "tool_failed"
|
|
363
|
-
| "secret_detected"
|
|
364
366
|
| "generation_handoff"
|
|
365
367
|
| "message_complete"
|
|
366
368
|
| "generation_cancelled"
|
|
@@ -401,7 +403,6 @@ export type _MessagesServerMessages =
|
|
|
401
403
|
| SecretRequest
|
|
402
404
|
| MessageComplete
|
|
403
405
|
| ErrorMessage
|
|
404
|
-
| SecretDetected
|
|
405
406
|
| MessageQueued
|
|
406
407
|
| MessageDequeued
|
|
407
408
|
| MessageRequestComplete
|
|
@@ -90,7 +90,7 @@ export interface ToolPermissionSimulateResponse {
|
|
|
90
90
|
/** Resolved execution target for the tool. */
|
|
91
91
|
executionTarget?: "host" | "sandbox";
|
|
92
92
|
/** ID of the trust rule that matched (if any). */
|
|
93
|
-
|
|
93
|
+
matchedTrustRuleId?: string;
|
|
94
94
|
/** Error message when success is false. */
|
|
95
95
|
error?: string;
|
|
96
96
|
}
|