@vellumai/assistant 0.10.2-dev.202606250318.5e7cfb0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.lock +0 -20
- package/docs/workspace-tools.md +33 -42
- package/eslint-rules/cli-no-daemon-internals.js +0 -6
- package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +0 -31
- package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +0 -44
- package/node_modules/@vellumai/gateway-client/src/index.ts +0 -14
- package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +0 -17
- package/node_modules/@vellumai/service-contracts/package.json +0 -1
- package/node_modules/@vellumai/service-contracts/src/index.ts +0 -1
- package/openapi.yaml +0 -155
- package/package.json +1 -4
- package/scripts/test.sh +15 -36
- package/src/__tests__/actor-token-service.test.ts +14 -36
- package/src/__tests__/agent-loop-override-profile.test.ts +0 -1
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -2
- package/src/__tests__/agent-wake-override-profile.test.ts +0 -2
- package/src/__tests__/annotate-activity-metadata.test.ts +0 -2
- package/src/__tests__/annotate-risk-options.test.ts +0 -2
- package/src/__tests__/approval-cascade.test.ts +0 -2
- package/src/__tests__/assistant-attachments.test.ts +0 -42
- package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
- package/src/__tests__/btw-routes.test.ts +0 -2
- package/src/__tests__/build-persisted-content.test.ts +0 -2
- package/src/__tests__/call-controller.test.ts +0 -19
- package/src/__tests__/channel-guardian.test.ts +58 -94
- package/src/__tests__/channel-reply-delivery.test.ts +0 -2
- package/src/__tests__/compaction-events.test.ts +0 -2
- package/src/__tests__/compaction.benchmark.test.ts +0 -2
- package/src/__tests__/compactor-call-site-logging.test.ts +0 -2
- package/src/__tests__/compactor-low-watermark-cut.test.ts +0 -2
- package/src/__tests__/compactor-preserved-tail-count.test.ts +0 -2
- package/src/__tests__/compactor-summary-call-truncation.test.ts +0 -2
- package/src/__tests__/compactor-web-search-strip.test.ts +0 -2
- package/src/__tests__/config-loader-backfill.test.ts +10 -123
- package/src/__tests__/config-schema.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +29 -31
- package/src/__tests__/contacts-relay-reads.test.ts +15 -13
- package/src/__tests__/conversation-abort-tool-results.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +0 -2
- package/src/__tests__/conversation-agent-loop.test.ts +0 -134
- package/src/__tests__/conversation-analysis-routes.test.ts +0 -2
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +0 -2
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -2
- package/src/__tests__/conversation-history-web-search.test.ts +0 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +0 -2
- package/src/__tests__/conversation-load-history-stripped.test.ts +0 -2
- package/src/__tests__/conversation-pairing.test.ts +0 -2
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +0 -2
- package/src/__tests__/conversation-process-callsite.test.ts +0 -2
- package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -2
- package/src/__tests__/conversation-queue.test.ts +0 -91
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -14
- package/src/__tests__/conversation-routes-slash-commands.test.ts +0 -14
- package/src/__tests__/conversation-slash-queue.test.ts +0 -2
- package/src/__tests__/conversation-slash-unknown.test.ts +0 -2
- package/src/__tests__/conversation-speed-override.test.ts +0 -2
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -29
- package/src/__tests__/conversation-title-service.test.ts +0 -2
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -47
- package/src/__tests__/conversation-usage.test.ts +0 -2
- package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -2
- package/src/__tests__/conversation-workspace-injection.test.ts +0 -2
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -2
- package/src/__tests__/credential-security-invariants.test.ts +1 -1
- package/src/__tests__/db-migration-rollback.test.ts +171 -205
- package/src/__tests__/db-test-helpers.ts +4 -5
- package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -4
- package/src/__tests__/disk-pressure-guard.test.ts +0 -41
- package/src/__tests__/dm-persistence.test.ts +0 -2
- package/src/__tests__/emit-signal-routing-intent.test.ts +5 -10
- package/src/__tests__/events-dev-bypass-actor.test.ts +1 -7
- package/src/__tests__/exploration-drift-hook.test.ts +2 -3
- package/src/__tests__/filing-service.test.ts +0 -2
- package/src/__tests__/guardian-binding-drift-heal.test.ts +10 -75
- package/src/__tests__/guardian-dispatch.test.ts +1 -95
- package/src/__tests__/guardian-outbound-http.test.ts +0 -13
- package/src/__tests__/heartbeat-disk-pressure.test.ts +0 -2
- package/src/__tests__/heartbeat-service.test.ts +0 -2
- package/src/__tests__/helpers/channel-test-adapter.ts +7 -1
- package/src/__tests__/host-app-control-routes.test.ts +30 -24
- package/src/__tests__/host-bash-routes.test.ts +41 -31
- package/src/__tests__/host-browser-routes.test.ts +32 -26
- package/src/__tests__/host-cu-routes-targeted.test.ts +33 -25
- package/src/__tests__/host-file-routes-targeted.test.ts +52 -40
- package/src/__tests__/host-transfer-routes-targeted.test.ts +43 -31
- package/src/__tests__/http-user-message-parity.test.ts +8 -290
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -28
- package/src/__tests__/inbound-slack-persistence.test.ts +0 -2
- package/src/__tests__/invite-redemption-service.test.ts +0 -198
- package/src/__tests__/llm-context-normalization.test.ts +0 -105
- package/src/__tests__/llm-request-log-error-payload.test.ts +9 -71
- package/src/__tests__/llm-usage-store.test.ts +0 -25
- package/src/__tests__/mcp-health-check.test.ts +1 -2
- package/src/__tests__/media-stream-server-integration.test.ts +0 -127
- package/src/__tests__/memory-retrieval-hook.test.ts +0 -2
- package/src/__tests__/messaging-send-tool.test.ts +0 -2
- package/src/__tests__/migration-import-from-url.test.ts +2 -2
- package/src/__tests__/mtime-cache.test.ts +5 -146
- package/src/__tests__/native-web-search.test.ts +0 -2
- package/src/__tests__/non-member-access-request.test.ts +17 -189
- package/src/__tests__/notification-broadcaster.test.ts +0 -4
- package/src/__tests__/notification-decision-recipient-context.test.ts +32 -33
- package/src/__tests__/notification-deep-link.test.ts +0 -6
- package/src/__tests__/notification-guardian-path.test.ts +0 -19
- package/src/__tests__/openai-provider.test.ts +12 -22
- package/src/__tests__/openai-responses-provider.test.ts +2 -12
- package/src/__tests__/outbound-slack-persistence.test.ts +0 -2
- package/src/__tests__/pending-interactions-resolved-event.test.ts +4 -7
- package/src/__tests__/persistence-secret-redaction.test.ts +0 -2
- package/src/__tests__/plugin-bootstrap.test.ts +73 -3
- package/src/__tests__/plugin-route-contribution.test.ts +17 -4
- package/src/__tests__/plugin-tool-contribution.test.ts +18 -3
- package/src/__tests__/plugin-types.test.ts +2 -0
- package/src/__tests__/process-message-background-slack.test.ts +0 -2
- package/src/__tests__/process-message-display-content.test.ts +0 -2
- package/src/__tests__/provider-error-scenarios.test.ts +4 -5
- package/src/__tests__/provider-usage-tracking.test.ts +0 -39
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +0 -2
- package/src/__tests__/registry.test.ts +1 -4
- package/src/__tests__/relay-server.test.ts +25 -694
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -0
- package/src/__tests__/secret-ingress-http.test.ts +0 -14
- package/src/__tests__/send-endpoint-busy.test.ts +8 -30
- package/src/__tests__/skills.test.ts +0 -44
- package/src/__tests__/slack-inbound-verification.test.ts +2 -47
- package/src/__tests__/stt-hints.test.ts +13 -44
- package/src/__tests__/subagent-detail.test.ts +0 -27
- package/src/__tests__/subagent-disposal.test.ts +0 -65
- package/src/__tests__/subagent-notify-parent.test.ts +0 -2
- package/src/__tests__/subagent-role-registry.test.ts +2 -7
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +0 -2
- package/src/__tests__/subagent-tools.test.ts +0 -2
- package/src/__tests__/suggestion-routes.test.ts +0 -2
- package/src/__tests__/title-generate-hook.test.ts +0 -2
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -2
- package/src/__tests__/tool-executor.test.ts +11 -16
- package/src/__tests__/tool-preview-lifecycle.test.ts +0 -2
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +0 -2
- package/src/__tests__/tool-start-timestamp.test.ts +0 -2
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +10 -10
- package/src/__tests__/twilio-routes.test.ts +0 -96
- package/src/__tests__/ui-file-upload-surface.test.ts +0 -86
- package/src/__tests__/verification-control-plane-policy.test.ts +0 -2
- package/src/__tests__/voice-invite-redemption.test.ts +0 -33
- package/src/__tests__/web-search-backend-failure.test.ts +0 -2
- package/src/__tests__/workspace-migration-remove-hooks.test.ts +35 -14
- package/src/__tests__/workspace-tool-loader.test.ts +2 -195
- package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
- package/src/agent/loop.ts +0 -56
- package/src/api/index.ts +1 -19
- package/src/api/responses/llm-request-log-entry.ts +0 -29
- package/src/api/responses/subagent-detail.ts +0 -17
- package/src/api/surfaces.ts +3 -39
- package/src/approvals/guardian-request-resolvers.ts +11 -1
- package/src/calls/__tests__/relay-setup-router.test.ts +4 -262
- package/src/calls/call-domain.ts +3 -3
- package/src/calls/guardian-dispatch.ts +8 -10
- package/src/calls/inbound-trust-reader.ts +1 -17
- package/src/calls/media-stream-server.ts +0 -21
- package/src/calls/relay-server.ts +50 -167
- package/src/calls/relay-setup-router.ts +7 -37
- package/src/calls/relay-verification.ts +4 -4
- package/src/calls/stt-hints.ts +12 -9
- package/src/calls/twilio-routes.ts +4 -14
- package/src/channels/types.ts +20 -10
- package/src/cli/commands/__tests__/cache.test.ts +1 -8
- package/src/cli/commands/cache.ts +181 -194
- package/src/cli/commands/db/__tests__/repair.test.ts +5 -6
- package/src/cli/commands/db/status.ts +1 -37
- package/src/cli/commands/mcp.ts +218 -252
- package/src/cli/commands/memory/index.ts +0 -2
- package/src/cli/commands/plugins.ts +3 -75
- package/src/cli/lib/__tests__/install-from-github.test.ts +0 -102
- package/src/cli/lib/__tests__/list-installed-plugins.test.ts +1 -160
- package/src/cli/lib/list-installed-plugins.ts +1 -179
- package/src/config/__tests__/sync-gated-profiles.test.ts +3 -11
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +17 -27
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +3 -13
- package/src/config/bundled-skills/subagent/SKILL.md +1 -1
- package/src/config/bundled-skills/subagent/TOOLS.json +1 -1
- package/src/config/feature-flag-registry.json +13 -5
- package/src/config/loader.ts +5 -38
- package/src/config/schemas/__tests__/memory-v3.test.ts +0 -1
- package/src/config/schemas/memory-lifecycle.ts +0 -12
- package/src/config/schemas/memory-v3.ts +0 -7
- package/src/config/schemas/memory.ts +0 -4
- package/src/config/schemas/timeouts.ts +0 -8
- package/src/config/seed-inference-profiles.ts +11 -21
- package/src/config/skills.ts +5 -27
- package/src/config/sync-gated-profiles.ts +13 -12
- package/src/contacts/contacts-write.ts +0 -3
- package/src/daemon/assistant-attachments.ts +4 -27
- package/src/daemon/conversation-agent-loop.ts +0 -28
- package/src/daemon/conversation-process.ts +16 -35
- package/src/daemon/conversation-surfaces.ts +38 -111
- package/src/daemon/conversation-tool-setup.ts +16 -50
- package/src/daemon/conversation.ts +1 -13
- package/src/daemon/disk-pressure-guard.ts +2 -12
- package/src/daemon/event-loop-watchdog.ts +1 -28
- package/src/daemon/external-plugins-bootstrap.ts +34 -4
- package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +0 -25
- package/src/daemon/handlers/config-a2a.ts +14 -6
- package/src/daemon/handlers/config-channels.ts +22 -78
- package/src/daemon/handlers/conversations.ts +0 -77
- package/src/daemon/lifecycle.ts +0 -4
- package/src/daemon/mcp-reload-service.ts +0 -10
- package/src/daemon/memory-v2-startup.test.ts +0 -72
- package/src/daemon/memory-v2-startup.ts +19 -87
- package/src/daemon/message-types/conversations.ts +0 -2
- package/src/daemon/message-types/surfaces.ts +12 -12
- package/src/daemon/server.ts +4 -0
- package/src/daemon/shutdown-handlers.ts +0 -20
- package/src/daemon/tool-setup-types.ts +0 -9
- package/src/daemon/workspace-tools-watcher.ts +328 -0
- package/src/ipc/__tests__/clients-list-ipc.test.ts +1 -1
- package/src/ipc/assistant-server.ts +2 -2
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +0 -1
- package/src/mcp/client.ts +1 -15
- package/src/mcp/mcp-auth-orchestrator.ts +1 -6
- package/src/mcp/mcp-oauth-provider.ts +8 -19
- package/src/memory/__tests__/memory-retrospective-job.test.ts +0 -8
- package/src/memory/conversation-crud.ts +0 -38
- package/src/memory/db-connection.ts +3 -22
- package/src/memory/db-init.ts +502 -36
- package/src/memory/db-singleton.ts +4 -6
- package/src/memory/jobs-worker.ts +0 -58
- package/src/memory/llm-request-log-store.ts +1 -26
- package/src/memory/llm-usage-store.ts +20 -48
- package/src/memory/memory-retrospective-job.ts +8 -9
- package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +56 -130
- package/src/memory/migrations/__tests__/run-migrations.test.ts +2 -2
- package/src/memory/migrations/registry.ts +573 -0
- package/src/memory/migrations/run-migrations.ts +6 -90
- package/src/memory/migrations/validate-migration-state.ts +66 -101
- package/src/memory/schema/conversations.ts +0 -9
- package/src/memory/schema/infrastructure.ts +0 -20
- package/src/memory/v2/__tests__/cli-command-store.test.ts +0 -25
- package/src/memory/v2/__tests__/skill-store.test.ts +0 -80
- package/src/memory/v2/cli-command-store.ts +38 -75
- package/src/memory/v2/prompts/consolidation.ts +82 -13
- package/src/memory/v2/prompts/router.ts +93 -21
- package/src/memory/v2/skill-store.ts +31 -68
- package/src/notifications/__tests__/broadcaster.test.ts +8 -16
- package/src/notifications/__tests__/decision-engine.test.ts +9 -78
- package/src/notifications/broadcaster.ts +1 -8
- package/src/notifications/decision-engine.ts +7 -15
- package/src/notifications/destination-resolver.ts +24 -68
- package/src/notifications/emit-signal.ts +14 -39
- package/src/permissions/question-prompter.test.ts +1 -1
- package/src/permissions/question-prompter.ts +4 -7
- package/src/plugin-api/index.ts +6 -6
- package/src/plugin-api/types.ts +5 -3
- package/src/plugin-api/vision-support.test.ts +4 -28
- package/src/plugin-api/vision-support.ts +31 -66
- package/src/plugins/defaults/advisor/__tests__/consult.test.ts +0 -161
- package/src/plugins/defaults/advisor/consult.ts +6 -110
- package/src/plugins/defaults/advisor/steering.ts +2 -14
- package/src/plugins/defaults/advisor/tools/advisor.ts +5 -32
- package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +1 -2
- package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +7 -47
- package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +11 -10
- package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +20 -12
- package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +11 -42
- package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +3 -33
- package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +4 -48
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +8 -4
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +15 -43
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +2 -11
- package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +13 -77
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +11 -12
- package/src/plugins/mtime-cache.ts +291 -76
- package/src/plugins/pipeline.ts +13 -111
- package/src/plugins/types.ts +2 -0
- package/src/providers/anthropic/client.ts +0 -5
- package/src/providers/call-site-routing.ts +0 -4
- package/src/providers/model-catalog.ts +0 -16
- package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
- package/src/providers/openai/chat-completions-provider.ts +83 -37
- package/src/providers/openai/responses-provider.ts +46 -50
- package/src/providers/openrouter/client.ts +0 -5
- package/src/providers/provider-send-message.ts +0 -4
- package/src/providers/ratelimit.ts +0 -4
- package/src/providers/retry.ts +0 -4
- package/src/providers/types.ts +0 -9
- package/src/providers/usage-tracking.ts +0 -4
- package/src/runtime/__tests__/trust-verdict-consumer.test.ts +3 -335
- package/src/runtime/access-request-helper.ts +39 -19
- package/src/runtime/actor-trust-resolver.ts +2 -2
- package/src/runtime/assistant-event-hub.ts +1 -1
- package/src/runtime/assistant-stream-state.ts +2 -9
- package/src/runtime/auth/require-bound-guardian.ts +11 -21
- package/src/runtime/channel-verification-service.ts +31 -56
- package/src/runtime/confirmation-request-guardian-bridge.ts +3 -3
- package/src/runtime/guardian-vellum-migration.ts +7 -66
- package/src/runtime/invite-redemption-service.ts +187 -198
- package/src/runtime/local-actor-identity.ts +11 -76
- package/src/runtime/pending-interactions.ts +1 -11
- package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +5 -56
- package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +0 -187
- package/src/runtime/routes/browser-routes.ts +1 -1
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +5 -13
- package/src/runtime/routes/channel-verification-routes.ts +3 -3
- package/src/runtime/routes/contact-routes.ts +32 -8
- package/src/runtime/routes/conversation-cli-routes.ts +5 -4
- package/src/runtime/routes/conversation-list-routes.ts +7 -4
- package/src/runtime/routes/conversation-query-routes.ts +0 -72
- package/src/runtime/routes/conversation-routes.ts +85 -84
- package/src/runtime/routes/events-routes.ts +2 -2
- package/src/runtime/routes/global-search-routes.ts +1 -3
- package/src/runtime/routes/guardian-action-routes.ts +5 -4
- package/src/runtime/routes/host-app-control-routes.ts +4 -5
- package/src/runtime/routes/host-bash-routes.ts +4 -5
- package/src/runtime/routes/host-browser-routes.ts +11 -9
- package/src/runtime/routes/host-cu-routes.ts +4 -5
- package/src/runtime/routes/host-file-routes.ts +4 -5
- package/src/runtime/routes/host-transfer-routes.ts +6 -6
- package/src/runtime/routes/http-adapter.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +2 -3
- package/src/runtime/routes/inbound-message-handler.ts +5 -5
- package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +5 -97
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +49 -61
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +4 -16
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +7 -7
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +8 -21
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +3 -14
- package/src/runtime/routes/index.ts +0 -2
- package/src/runtime/routes/llm-context-normalization.ts +0 -83
- package/src/runtime/routes/mcp-auth-routes.ts +19 -171
- package/src/runtime/routes/migration-rollback-routes.ts +3 -4
- package/src/runtime/routes/migration-routes.ts +1 -4
- package/src/runtime/routes/subagents-routes.ts +0 -5
- package/src/runtime/routes/surface-action-routes.ts +56 -42
- package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -1
- package/src/runtime/services/conversation-serializer.ts +9 -7
- package/src/runtime/tool-grant-request-helper.ts +3 -3
- package/src/runtime/trust-verdict-consumer.ts +9 -85
- package/src/runtime/verification-outbound-actions.ts +18 -18
- package/src/signals/user-message.ts +0 -16
- package/src/subagent/manager.ts +0 -9
- package/src/subagent/types.ts +3 -3
- package/src/telemetry/types.ts +1 -34
- package/src/telemetry/usage-telemetry-reporter.test.ts +2 -3
- package/src/telemetry/usage-telemetry-reporter.ts +3 -87
- package/src/tools/ask-question/ask-question-tool.test.ts +0 -29
- package/src/tools/ask-question/ask-question-tool.ts +0 -13
- package/src/tools/executor.ts +4 -4
- package/src/tools/registry.ts +0 -18
- package/src/tools/shared/filesystem/path-policy.ts +5 -12
- package/src/tools/tool-approval-handler.ts +1 -1
- package/src/tools/tool-defaults.ts +2 -9
- package/src/tools/tool-manifest.ts +0 -3
- package/src/tools/types.ts +2 -17
- package/src/tools/workspace-tools/loader.ts +244 -348
- package/src/util/errors.ts +1 -26
- package/src/util/platform.ts +0 -5
- package/src/workflows/library.test.ts +0 -140
- package/src/workflows/library.ts +28 -82
- package/src/workspace/migrations/017-seed-persona-dirs.ts +34 -3
- package/src/workspace/migrations/019-scope-journal-to-guardian.ts +24 -3
- package/src/workspace/migrations/048-remove-workspace-hooks.ts +66 -14
- package/src/workspace/migrations/registry.ts +0 -2
- package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-delivery-contract.test.ts +0 -91
- package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +0 -48
- package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +0 -28
- package/node_modules/@vellumai/service-contracts/src/channels.ts +0 -41
- package/src/__tests__/code-search-tool.test.ts +0 -585
- package/src/__tests__/guardian-expiry-notifier.test.ts +0 -282
- package/src/__tests__/mcp-config-secret-boundary.test.ts +0 -390
- package/src/__tests__/plugin-pipeline.test.ts +0 -96
- package/src/__tests__/sse-actor-principal-guardian-source.test.ts +0 -102
- package/src/__tests__/steer-on-enqueue-question.test.ts +0 -181
- package/src/__tests__/workspace-migration-111-prune-seeded-callsite-defaults.test.ts +0 -208
- package/src/agent/loop-exclusive-tool.test.ts +0 -150
- package/src/api/constants/sse-replay.ts +0 -41
- package/src/api/events/conversation-notice.ts +0 -26
- package/src/approvals/guardian-channel-delivery.ts +0 -30
- package/src/approvals/guardian-expiry-notifier.ts +0 -148
- package/src/cli/commands/memory/__tests__/worker.test.ts +0 -302
- package/src/cli/commands/memory/worker.ts +0 -175
- package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +0 -143
- package/src/config/prune-seeded-callsite-defaults.ts +0 -110
- package/src/contacts/__tests__/contacts-write-revoke-relay.test.ts +0 -129
- package/src/contacts/__tests__/guardian-delivery-reader.test.ts +0 -312
- package/src/contacts/__tests__/member-write-relay.test.ts +0 -202
- package/src/contacts/guardian-delivery-reader.ts +0 -223
- package/src/contacts/member-write-relay.ts +0 -189
- package/src/daemon/conversation-notices.ts +0 -60
- package/src/daemon/handlers/__tests__/config-channels.test.ts +0 -225
- package/src/hooks/hook-loader.ts +0 -341
- package/src/mcp/mcp-header-store.ts +0 -134
- package/src/memory/__tests__/301-create-watchdog-events.test.ts +0 -110
- package/src/memory/__tests__/prompt-override.test.ts +0 -192
- package/src/memory/__tests__/watchdog-events-store.test.ts +0 -161
- package/src/memory/migrations/300-add-processing-started-at.ts +0 -30
- package/src/memory/migrations/301-create-watchdog-events.ts +0 -45
- package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +0 -224
- package/src/memory/prompt-override.ts +0 -129
- package/src/memory/steps.ts +0 -573
- package/src/memory/watchdog-events-store.ts +0 -87
- package/src/memory/worker-control.ts +0 -118
- package/src/memory/worker-process.ts +0 -72
- package/src/notifications/__tests__/connected-channels.test.ts +0 -114
- package/src/notifications/__tests__/destination-resolver.test.ts +0 -256
- package/src/onboarding/checkin-event.test.ts +0 -222
- package/src/onboarding/checkin-event.ts +0 -321
- package/src/onboarding/schedule-checkin.ts +0 -190
- package/src/plugins/defaults/advisor/__tests__/context-pack-gating.test.ts +0 -106
- package/src/plugins/defaults/advisor/__tests__/context-pack.test.ts +0 -60
- package/src/plugins/defaults/advisor/context-pack.ts +0 -288
- package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +0 -146
- package/src/plugins/surface-import.ts +0 -121
- package/src/providers/openai/__tests__/api-error-normalization.test.ts +0 -321
- package/src/providers/openai/api-error-normalization.ts +0 -270
- package/src/runtime/__tests__/channel-verification-service.test.ts +0 -133
- package/src/runtime/__tests__/guardian-vellum-migration.test.ts +0 -181
- package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +0 -66
- package/src/runtime/__tests__/local-principal-trust.test.ts +0 -164
- package/src/runtime/anchored-guardian.test.ts +0 -156
- package/src/runtime/anchored-guardian.ts +0 -135
- package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +0 -99
- package/src/runtime/local-principal-trust.ts +0 -52
- package/src/runtime/routes/__tests__/contact-routes.test.ts +0 -212
- package/src/runtime/routes/__tests__/global-search-routes.test.ts +0 -93
- package/src/runtime/routes/onboarding-checkin-routes.ts +0 -86
- package/src/tools/filesystem/search.ts +0 -543
- package/src/util/telemetry-db-path.ts +0 -24
- package/src/workspace/migrations/111-prune-seeded-callsite-defaults.ts +0 -134
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
import { beforeEach, describe, expect, mock, test } from "bun:test";
|
|
17
17
|
|
|
18
|
-
import type { AdmissionPolicy
|
|
18
|
+
import type { AdmissionPolicy } from "@vellumai/gateway-client";
|
|
19
19
|
|
|
20
20
|
import type {
|
|
21
21
|
ChannelPolicy,
|
|
@@ -38,21 +38,10 @@ mock.module("../../config/loader.js", () => ({
|
|
|
38
38
|
getConfig: () => ({ calls: { verification: { enabled: false } } }),
|
|
39
39
|
}));
|
|
40
40
|
|
|
41
|
-
// Controllable resolved trust context.
|
|
42
|
-
// so the verdict-source tests can assert the local fallback fires (or not).
|
|
43
|
-
// The verdict path uses the REAL, pure `actorTrustContextFromVerdict` /
|
|
44
|
-
// `verdictMemberUnresolvable` — no module mock — so this file leaks nothing
|
|
45
|
-
// into sibling test files sharing the bun process.
|
|
41
|
+
// Controllable resolved trust context.
|
|
46
42
|
let nextTrust: ActorTrustContext;
|
|
47
|
-
const resolveActorTrustMock = mock(() => nextTrust);
|
|
48
|
-
// Override only `resolveActorTrust`; the real `trust-verdict-consumer` imports
|
|
49
|
-
// `toTrustContext` from this module, so the rest must pass through untouched.
|
|
50
|
-
const actorTrustResolverModule = await import(
|
|
51
|
-
"../../runtime/actor-trust-resolver.js"
|
|
52
|
-
);
|
|
53
43
|
mock.module("../../runtime/actor-trust-resolver.js", () => ({
|
|
54
|
-
|
|
55
|
-
resolveActorTrust: resolveActorTrustMock,
|
|
44
|
+
resolveActorTrust: () => nextTrust,
|
|
56
45
|
}));
|
|
57
46
|
|
|
58
47
|
// Controllable pending verification challenge.
|
|
@@ -162,17 +151,13 @@ function makeTrust(
|
|
|
162
151
|
};
|
|
163
152
|
}
|
|
164
153
|
|
|
165
|
-
function route(
|
|
166
|
-
admissionPolicy?: AdmissionPolicy | null,
|
|
167
|
-
verdict?: TrustVerdict | null,
|
|
168
|
-
) {
|
|
154
|
+
function route(admissionPolicy?: AdmissionPolicy | null) {
|
|
169
155
|
return routeSetup({
|
|
170
156
|
callSessionId: "cs_1",
|
|
171
157
|
session: null, // inbound
|
|
172
158
|
from: "+12025550142",
|
|
173
159
|
to: "+12025550199",
|
|
174
160
|
admissionPolicy,
|
|
175
|
-
verdict,
|
|
176
161
|
});
|
|
177
162
|
}
|
|
178
163
|
|
|
@@ -180,7 +165,6 @@ beforeEach(() => {
|
|
|
180
165
|
pendingChallenge = null;
|
|
181
166
|
activeInvites = [];
|
|
182
167
|
boundContact = null;
|
|
183
|
-
resolveActorTrustMock.mockClear();
|
|
184
168
|
});
|
|
185
169
|
|
|
186
170
|
// ---------------------------------------------------------------------------
|
|
@@ -390,245 +374,3 @@ describe("routeSetup — floor bypasses", () => {
|
|
|
390
374
|
expect(outcome.action).toBe("verification");
|
|
391
375
|
});
|
|
392
376
|
});
|
|
393
|
-
|
|
394
|
-
// ---------------------------------------------------------------------------
|
|
395
|
-
// Caller-trust source: gateway verdict first, local fallback
|
|
396
|
-
// ---------------------------------------------------------------------------
|
|
397
|
-
|
|
398
|
-
function makeVerdict(overrides: Partial<TrustVerdict> = {}): TrustVerdict {
|
|
399
|
-
return {
|
|
400
|
-
trustClass: "guardian",
|
|
401
|
-
canonicalSenderId: "+12025550142",
|
|
402
|
-
...overrides,
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
// A verdict carrying a fully-resolvable member ACL (contactId/channelId + valid
|
|
407
|
-
// known status·policy enums). The REAL `resolvedMemberFromVerdict` synthesizes
|
|
408
|
-
// a memberRecord from these, so the verdict path enforces blocked/revoked/deny.
|
|
409
|
-
function makeMemberVerdict(
|
|
410
|
-
trustClass: TrustVerdict["trustClass"],
|
|
411
|
-
channel: { status: string; policy?: string },
|
|
412
|
-
overrides: Partial<TrustVerdict> = {},
|
|
413
|
-
): TrustVerdict {
|
|
414
|
-
return makeVerdict({
|
|
415
|
-
trustClass,
|
|
416
|
-
contactId: "ct_1",
|
|
417
|
-
channelId: "ch_1",
|
|
418
|
-
status: channel.status,
|
|
419
|
-
policy: channel.policy ?? "allow",
|
|
420
|
-
...overrides,
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
describe("routeSetup — caller-trust source", () => {
|
|
425
|
-
test("present verdict builds trust from the verdict (no local resolve)", () => {
|
|
426
|
-
const { resolved, outcome } = route(
|
|
427
|
-
null,
|
|
428
|
-
makeMemberVerdict("guardian", { status: "active" }),
|
|
429
|
-
);
|
|
430
|
-
|
|
431
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
432
|
-
expect(resolved.actorTrust.trustClass).toBe("guardian");
|
|
433
|
-
expect(outcome.action).toBe("normal_call");
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
test("resolutionFailed verdict falls back to local resolveActorTrust", () => {
|
|
437
|
-
nextTrust = makeTrust("guardian", { status: "active", role: "guardian" });
|
|
438
|
-
const { resolved } = route(null, makeVerdict({ resolutionFailed: true }));
|
|
439
|
-
|
|
440
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
441
|
-
expect(resolved.actorTrust.trustClass).toBe("guardian");
|
|
442
|
-
});
|
|
443
|
-
|
|
444
|
-
test("null verdict falls back to local resolveActorTrust", () => {
|
|
445
|
-
nextTrust = makeTrust("trusted_contact", { status: "active" });
|
|
446
|
-
const { resolved } = route(null, null);
|
|
447
|
-
|
|
448
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
449
|
-
expect(resolved.actorTrust.trustClass).toBe("trusted_contact");
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
test("absent verdict falls back to local resolveActorTrust", () => {
|
|
453
|
-
nextTrust = makeTrust("guardian", { status: "active", role: "guardian" });
|
|
454
|
-
route(null);
|
|
455
|
-
|
|
456
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
457
|
-
});
|
|
458
|
-
|
|
459
|
-
test("admission floor still applies on the verdict path (guardian_only denies trusted_contact)", () => {
|
|
460
|
-
const { outcome } = route(
|
|
461
|
-
"guardian_only",
|
|
462
|
-
makeMemberVerdict("trusted_contact", { status: "active" }),
|
|
463
|
-
);
|
|
464
|
-
|
|
465
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
466
|
-
expect(outcome.action).toBe("deny");
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
test("admission floor still applies on the fallback path (guardian_only denies trusted_contact)", () => {
|
|
470
|
-
nextTrust = makeTrust("trusted_contact", { status: "active" });
|
|
471
|
-
const { outcome } = route(
|
|
472
|
-
"guardian_only",
|
|
473
|
-
makeVerdict({ resolutionFailed: true }),
|
|
474
|
-
);
|
|
475
|
-
|
|
476
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
477
|
-
expect(outcome.action).toBe("deny");
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
// ---------------------------------------------------------------------------
|
|
482
|
-
// Verdict-path ACL: blocked / revoked / deny enforced from the verdict-derived
|
|
483
|
-
// memberRecord (no local fallback). Guards the P1 where a verdict member with
|
|
484
|
-
// no memberRecord bypassed these gates.
|
|
485
|
-
// ---------------------------------------------------------------------------
|
|
486
|
-
|
|
487
|
-
describe("routeSetup — verdict path enforces member ACL", () => {
|
|
488
|
-
test("blocked member via verdict is denied (not normal_call) under permissive floor", () => {
|
|
489
|
-
const { outcome } = route(
|
|
490
|
-
"strangers",
|
|
491
|
-
makeMemberVerdict("unknown", { status: "blocked" }),
|
|
492
|
-
);
|
|
493
|
-
|
|
494
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
495
|
-
expect(outcome.action).toBe("deny");
|
|
496
|
-
});
|
|
497
|
-
|
|
498
|
-
test("revoked member via verdict is denied under permissive floor", () => {
|
|
499
|
-
const { outcome } = route(
|
|
500
|
-
"strangers",
|
|
501
|
-
makeMemberVerdict("unknown", { status: "revoked" }),
|
|
502
|
-
);
|
|
503
|
-
|
|
504
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
505
|
-
expect(outcome.action).toBe("deny");
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
test("policy deny member via verdict is denied (not normal_call)", () => {
|
|
509
|
-
const { outcome } = route(
|
|
510
|
-
null,
|
|
511
|
-
makeMemberVerdict("trusted_contact", {
|
|
512
|
-
status: "active",
|
|
513
|
-
policy: "deny",
|
|
514
|
-
}),
|
|
515
|
-
);
|
|
516
|
-
|
|
517
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
518
|
-
expect(outcome.action).toBe("deny");
|
|
519
|
-
});
|
|
520
|
-
|
|
521
|
-
test("policy escalate member via verdict is denied (live call can't await approval)", () => {
|
|
522
|
-
const { outcome } = route(
|
|
523
|
-
null,
|
|
524
|
-
makeMemberVerdict("trusted_contact", {
|
|
525
|
-
status: "active",
|
|
526
|
-
policy: "escalate",
|
|
527
|
-
}),
|
|
528
|
-
);
|
|
529
|
-
|
|
530
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
531
|
-
expect(outcome.action).toBe("deny");
|
|
532
|
-
});
|
|
533
|
-
|
|
534
|
-
test("trusted/active member via verdict still admits to normal_call", () => {
|
|
535
|
-
const { outcome } = route(
|
|
536
|
-
null,
|
|
537
|
-
makeMemberVerdict("trusted_contact", {
|
|
538
|
-
status: "active",
|
|
539
|
-
policy: "allow",
|
|
540
|
-
}),
|
|
541
|
-
);
|
|
542
|
-
|
|
543
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
544
|
-
expect(outcome.action).toBe("normal_call");
|
|
545
|
-
});
|
|
546
|
-
|
|
547
|
-
test("guardian via verdict still admits to normal_call", () => {
|
|
548
|
-
const { outcome } = route(
|
|
549
|
-
null,
|
|
550
|
-
makeMemberVerdict("guardian", { status: "active" }),
|
|
551
|
-
);
|
|
552
|
-
|
|
553
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
554
|
-
expect(outcome.action).toBe("normal_call");
|
|
555
|
-
});
|
|
556
|
-
});
|
|
557
|
-
|
|
558
|
-
// ---------------------------------------------------------------------------
|
|
559
|
-
// Unresolvable member verdict → local fallback (never trust an un-ACL-checkable
|
|
560
|
-
// member). A verdict claiming a member (contactId/channelId) whose ACL can't be
|
|
561
|
-
// reassembled (missing/unknown status·policy) must take the local resolveActorTrust
|
|
562
|
-
// path so the member is ACL-checked locally, not trusted by trustClass.
|
|
563
|
-
// ---------------------------------------------------------------------------
|
|
564
|
-
|
|
565
|
-
describe("routeSetup — unresolvable member verdict falls back to local", () => {
|
|
566
|
-
test("member identity with missing status falls back to local resolveActorTrust", () => {
|
|
567
|
-
nextTrust = makeTrust("trusted_contact", { status: "active" });
|
|
568
|
-
const { resolved } = route(
|
|
569
|
-
null,
|
|
570
|
-
makeVerdict({
|
|
571
|
-
trustClass: "trusted_contact",
|
|
572
|
-
contactId: "ct_1",
|
|
573
|
-
channelId: "ch_1",
|
|
574
|
-
policy: "allow",
|
|
575
|
-
// status absent → unresolvable
|
|
576
|
-
}),
|
|
577
|
-
);
|
|
578
|
-
|
|
579
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
580
|
-
expect(resolved.actorTrust.trustClass).toBe("trusted_contact");
|
|
581
|
-
});
|
|
582
|
-
|
|
583
|
-
test("member identity with unknown status falls back to local resolveActorTrust", () => {
|
|
584
|
-
nextTrust = makeTrust("trusted_contact", { status: "active" });
|
|
585
|
-
route(
|
|
586
|
-
null,
|
|
587
|
-
makeVerdict({
|
|
588
|
-
trustClass: "trusted_contact",
|
|
589
|
-
contactId: "ct_1",
|
|
590
|
-
channelId: "ch_1",
|
|
591
|
-
status: "bogus",
|
|
592
|
-
policy: "allow",
|
|
593
|
-
}),
|
|
594
|
-
);
|
|
595
|
-
|
|
596
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
597
|
-
});
|
|
598
|
-
|
|
599
|
-
test("member identity with unknown policy falls back to local resolveActorTrust", () => {
|
|
600
|
-
nextTrust = makeTrust("trusted_contact", { status: "active" });
|
|
601
|
-
route(
|
|
602
|
-
null,
|
|
603
|
-
makeVerdict({
|
|
604
|
-
trustClass: "trusted_contact",
|
|
605
|
-
contactId: "ct_1",
|
|
606
|
-
channelId: "ch_1",
|
|
607
|
-
status: "active",
|
|
608
|
-
policy: "bogus",
|
|
609
|
-
}),
|
|
610
|
-
);
|
|
611
|
-
|
|
612
|
-
expect(resolveActorTrustMock).toHaveBeenCalledTimes(1);
|
|
613
|
-
});
|
|
614
|
-
|
|
615
|
-
test("real stranger verdict (no member identity) still takes the verdict path", () => {
|
|
616
|
-
const { resolved } = route(null, makeVerdict({ trustClass: "unknown" }));
|
|
617
|
-
|
|
618
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
619
|
-
expect(resolved.actorTrust.trustClass).toBe("unknown");
|
|
620
|
-
});
|
|
621
|
-
|
|
622
|
-
test("valid member verdict (good status+policy) still takes the verdict path", () => {
|
|
623
|
-
const { outcome } = route(
|
|
624
|
-
null,
|
|
625
|
-
makeMemberVerdict("trusted_contact", {
|
|
626
|
-
status: "active",
|
|
627
|
-
policy: "allow",
|
|
628
|
-
}),
|
|
629
|
-
);
|
|
630
|
-
|
|
631
|
-
expect(resolveActorTrustMock).not.toHaveBeenCalled();
|
|
632
|
-
expect(outcome.action).toBe("normal_call");
|
|
633
|
-
});
|
|
634
|
-
});
|
package/src/calls/call-domain.ts
CHANGED
|
@@ -267,9 +267,9 @@ type CreateInboundVoiceSessionResult = {
|
|
|
267
267
|
* returned without creating a duplicate. This handles Twilio webhook
|
|
268
268
|
* replays gracefully.
|
|
269
269
|
*/
|
|
270
|
-
export
|
|
270
|
+
export function createInboundVoiceSession(
|
|
271
271
|
input: CreateInboundVoiceSessionInput,
|
|
272
|
-
):
|
|
272
|
+
): CreateInboundVoiceSessionResult {
|
|
273
273
|
const {
|
|
274
274
|
callSid,
|
|
275
275
|
fromNumber,
|
|
@@ -312,7 +312,7 @@ export async function createInboundVoiceSession(
|
|
|
312
312
|
updateCallSession(session.id, { providerCallSid: callSid });
|
|
313
313
|
session.providerCallSid = callSid;
|
|
314
314
|
|
|
315
|
-
const callerIsGuardian =
|
|
315
|
+
const callerIsGuardian = isGuardian(assistantId, "phone", fromNumber);
|
|
316
316
|
const metadataHints: string[] = [
|
|
317
317
|
callerIsGuardian
|
|
318
318
|
? "Caller is the guardian"
|
|
@@ -86,16 +86,14 @@ async function dispatchGuardianQuestionInner(
|
|
|
86
86
|
try {
|
|
87
87
|
const expiresAt = Date.now() + getUserConsultationTimeoutMs();
|
|
88
88
|
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const guardianPrincipalId =
|
|
98
|
-
findGuardianForChannel("vellum")?.contact.principalId ?? undefined;
|
|
89
|
+
// Voice decisions are handled in guardian conversations tied to the assistant-
|
|
90
|
+
// level guardian identity. Resolve the principal from the contacts table.
|
|
91
|
+
let guardianPrincipalId: string | undefined;
|
|
92
|
+
|
|
93
|
+
const guardianResult = findGuardianForChannel("vellum");
|
|
94
|
+
if (guardianResult?.contact.principalId) {
|
|
95
|
+
guardianPrincipalId = guardianResult.contact.principalId;
|
|
96
|
+
}
|
|
99
97
|
|
|
100
98
|
if (!guardianPrincipalId) {
|
|
101
99
|
log.error(
|
|
@@ -10,10 +10,7 @@
|
|
|
10
10
|
* fail-closed); this reader only reports the verdict or `null`.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
14
|
-
type TrustVerdict,
|
|
15
|
-
TrustVerdictSchema,
|
|
16
|
-
} from "@vellumai/gateway-client";
|
|
13
|
+
import { type TrustVerdict, TrustVerdictSchema } from "@vellumai/gateway-client";
|
|
17
14
|
|
|
18
15
|
import type { ChannelId } from "../channels/types.js";
|
|
19
16
|
import { ipcCall } from "../ipc/gateway-client.js";
|
|
@@ -41,16 +38,3 @@ export async function getInboundTrustVerdict(input: {
|
|
|
41
38
|
return null;
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Resolve the verdict for a phone caller by their external number. Callers
|
|
47
|
-
* compute `otherPartyNumber` from their own transport-specific direction.
|
|
48
|
-
*/
|
|
49
|
-
export function getPhoneCallerVerdict(
|
|
50
|
-
otherPartyNumber: string | undefined,
|
|
51
|
-
): Promise<TrustVerdict | null> {
|
|
52
|
-
return getInboundTrustVerdict({
|
|
53
|
-
channelType: "phone",
|
|
54
|
-
actorExternalId: otherPartyNumber || undefined,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
@@ -52,7 +52,6 @@ import {
|
|
|
52
52
|
} from "./call-store.js";
|
|
53
53
|
import { getChannelAdmissionPolicy } from "./channel-admission-reader.js";
|
|
54
54
|
import { finalizeCall } from "./finalize-call.js";
|
|
55
|
-
import { getPhoneCallerVerdict } from "./inbound-trust-reader.js";
|
|
56
55
|
import { MediaStreamOutput } from "./media-stream-output.js";
|
|
57
56
|
import { parseMediaStreamFrame } from "./media-stream-parser.js";
|
|
58
57
|
import type { MediaStreamStartEvent } from "./media-stream-protocol.js";
|
|
@@ -392,25 +391,6 @@ export class MediaStreamCallSession {
|
|
|
392
391
|
return;
|
|
393
392
|
}
|
|
394
393
|
|
|
395
|
-
// Verdict-first caller trust so this transport enforces the same gateway
|
|
396
|
-
// ACL as ConversationRelay. routeSetup uses it when present and not
|
|
397
|
-
// resolutionFailed, else falls back to local resolution. The reader returns
|
|
398
|
-
// null on failure, keeping the local path on a gateway blip.
|
|
399
|
-
const isInbound = session?.initiatedFromConversationId == null;
|
|
400
|
-
const otherPartyNumber = isInbound ? from : to;
|
|
401
|
-
const verdict = await getPhoneCallerVerdict(otherPartyNumber);
|
|
402
|
-
|
|
403
|
-
// The verdict read above yields the event loop; abort if the session was
|
|
404
|
-
// disposed meanwhile, matching the admission-read guard above.
|
|
405
|
-
if (this.disposed) {
|
|
406
|
-
log.info(
|
|
407
|
-
{ callSessionId: this.callSessionId },
|
|
408
|
-
"Media-stream session disposed during verdict read — aborting setup",
|
|
409
|
-
);
|
|
410
|
-
this.setupRouting = false;
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
394
|
const { outcome, resolved } = routeSetup({
|
|
415
395
|
callSessionId: this.callSessionId,
|
|
416
396
|
session: session ?? null,
|
|
@@ -418,7 +398,6 @@ export class MediaStreamCallSession {
|
|
|
418
398
|
to,
|
|
419
399
|
customParameters: event.start.customParameters,
|
|
420
400
|
admissionPolicy,
|
|
421
|
-
verdict,
|
|
422
401
|
});
|
|
423
402
|
|
|
424
403
|
log.info(
|