@vellumai/assistant 0.6.6 → 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/AGENTS.md +20 -0
- package/ARCHITECTURE.md +46 -38
- package/Dockerfile +27 -6
- package/README.md +9 -11
- package/__tests__/permissions/gateway-threshold-reader.test.ts +83 -149
- package/bun.lock +309 -119
- package/docs/architecture/memory.md +1 -90
- package/docs/architecture/security.md +28 -41
- package/docs/credential-execution-service.md +7 -5
- package/docs/skills.md +10 -10
- package/docs/stt-provider-onboarding.md +17 -45
- package/examples/plugins/echo/bun.lock +25 -0
- package/knip.json +9 -22
- package/node_modules/@vellumai/ces-client/bun.lock +33 -0
- package/node_modules/@vellumai/ces-client/package.json +25 -0
- package/node_modules/@vellumai/ces-client/src/__tests__/ces-client.test.ts +631 -0
- package/node_modules/@vellumai/ces-client/src/__tests__/package-boundary.test.ts +138 -0
- package/node_modules/@vellumai/ces-client/src/credential-rpc.ts +13 -0
- package/node_modules/@vellumai/ces-client/src/http-credentials.ts +296 -0
- package/node_modules/@vellumai/ces-client/src/http-log-export.ts +111 -0
- package/node_modules/@vellumai/ces-client/src/index.ts +43 -0
- package/node_modules/@vellumai/ces-client/src/rpc-client.ts +445 -0
- package/node_modules/@vellumai/credential-storage/src/__tests__/package-boundary.test.ts +32 -6
- package/node_modules/@vellumai/egress-proxy/src/__tests__/package-boundary.test.ts +32 -1
- package/node_modules/@vellumai/gateway-client/bun.lock +39 -0
- package/node_modules/@vellumai/gateway-client/package.json +23 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/gateway-client.test.ts +343 -0
- package/node_modules/@vellumai/gateway-client/src/__tests__/package-boundary.test.ts +140 -0
- package/node_modules/@vellumai/gateway-client/src/http-delivery.ts +422 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +35 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +331 -0
- package/node_modules/@vellumai/gateway-client/src/types.ts +131 -0
- package/node_modules/@vellumai/gateway-client/tsconfig.json +20 -0
- package/node_modules/@vellumai/{ces-contracts → service-contracts}/bun.lock +1 -1
- package/node_modules/@vellumai/{ces-contracts → service-contracts}/package.json +4 -2
- package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/__tests__/contracts.test.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/__tests__/package-boundary.test.ts +155 -0
- package/node_modules/@vellumai/service-contracts/src/credential-rpc.ts +23 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +25 -0
- package/node_modules/@vellumai/{ces-contracts/src/index.ts → service-contracts/src/transport.ts} +6 -28
- package/node_modules/@vellumai/service-contracts/src/trust-rules.ts +116 -0
- package/node_modules/@vellumai/service-contracts/tsconfig.json +20 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +887 -0
- package/node_modules/@vellumai/skill-host-contracts/bun.lock +24 -0
- package/node_modules/@vellumai/skill-host-contracts/package.json +18 -0
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +86 -0
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +1342 -0
- package/node_modules/@vellumai/skill-host-contracts/src/index.ts +6 -0
- package/node_modules/@vellumai/skill-host-contracts/src/runtime-mode.ts +11 -0
- package/node_modules/@vellumai/skill-host-contracts/src/server-message.ts +32 -0
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +325 -0
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +444 -0
- package/node_modules/@vellumai/skill-host-contracts/tsconfig.json +20 -0
- package/node_modules/@vellumai/skill-host-contracts/tsconfig.test.json +12 -0
- 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 +3136 -650
- package/package.json +15 -7
- package/scripts/check-circular-deps.ts +80 -0
- package/scripts/generate-openapi.ts +29 -107
- package/{src/memory/graph/inspect.ts → scripts/memory-inspect.ts} +27 -27
- package/src/__tests__/access-request-decision.test.ts +2 -11
- package/src/__tests__/acp-session.test.ts +4 -150
- package/src/__tests__/actor-token-service.test.ts +17 -678
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +2 -6
- package/src/__tests__/agent-loop-override-profile.test.ts +404 -0
- package/src/__tests__/agent-loop-thinking.test.ts +4 -4
- package/src/__tests__/agent-wake-override-profile.test.ts +283 -0
- package/src/__tests__/always-loaded-tools-guard.test.ts +2 -1
- package/src/__tests__/anthropic-provider.test.ts +183 -28
- package/src/__tests__/app-conversation-ids-backfill.test.ts +278 -0
- package/src/__tests__/app-conversation-ids.test.ts +151 -0
- package/src/__tests__/app-routes-csp.test.ts +106 -55
- package/src/__tests__/approval-cascade.test.ts +3 -370
- package/src/__tests__/approval-conversation-turn.test.ts +3 -8
- package/src/__tests__/approval-hardcoded-copy-guard.test.ts +1 -1
- package/src/__tests__/approval-primitive.test.ts +2 -1
- package/src/__tests__/approval-routes-http.test.ts +36 -464
- 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 +107 -92
- package/src/__tests__/assistant-feature-flags-integration.test.ts +0 -29
- package/src/__tests__/assistant-id-boundary-guard.test.ts +0 -3
- package/src/__tests__/attachment-upload-trusted-source.test.ts +139 -0
- package/src/__tests__/attachments-store.test.ts +46 -1
- package/src/__tests__/audit-log-rotation.test.ts +2 -1
- package/src/__tests__/auto-analysis-end-to-end.test.ts +8 -20
- package/src/__tests__/background-shell-bash.test.ts +227 -0
- package/src/__tests__/background-shell-host-bash.test.ts +465 -0
- package/src/__tests__/background-tool-registry.test.ts +145 -0
- package/src/__tests__/background-tool-routes.test.ts +175 -0
- package/src/__tests__/btw-routes.test.ts +147 -183
- package/src/__tests__/call-controller.test.ts +15 -2
- package/src/__tests__/call-conversation-messages.test.ts +2 -1
- package/src/__tests__/call-domain.test.ts +2 -2
- package/src/__tests__/call-pointer-messages.test.ts +11 -13
- package/src/__tests__/call-recovery.test.ts +2 -1
- package/src/__tests__/call-routes-http.test.ts +3 -14
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/call-store.test.ts +2 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +31 -62
- package/src/__tests__/canonical-guardian-store.test.ts +2 -2
- package/src/__tests__/catalog-files.test.ts +0 -26
- package/src/__tests__/ces-rpc-credential-backend.test.ts +1 -1
- package/src/__tests__/channel-approval-routes.test.ts +88 -344
- package/src/__tests__/channel-approval.test.ts +9 -7
- package/src/__tests__/channel-approvals.test.ts +34 -197
- package/src/__tests__/channel-delivery-store.test.ts +11 -10
- package/src/__tests__/channel-guardian.test.ts +114 -171
- package/src/__tests__/channel-readiness-service.test.ts +8 -6
- package/src/__tests__/channel-reply-delivery.test.ts +3 -19
- package/src/__tests__/channel-retry-sweep.test.ts +2 -5
- package/src/__tests__/checker.test.ts +272 -3933
- package/src/__tests__/circuit-breaker-pipeline.test.ts +1 -1
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +208 -0
- package/src/__tests__/cli.test.ts +1 -38
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -1
- package/src/__tests__/compaction-pipeline.test.ts +1 -1
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +2 -2
- package/src/__tests__/compaction-timeout-recovery.test.ts +1 -1
- package/src/__tests__/config-managed-gemini-defaults.test.ts +3 -7
- package/src/__tests__/config-model-image-provider.test.ts +0 -1
- package/src/__tests__/config-schema-cmd.test.ts +1 -1
- package/src/__tests__/config-schema.test.ts +36 -269
- package/src/__tests__/config-watcher.test.ts +12 -0
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +4 -25
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contact-store-user-file.test.ts +2 -1
- package/src/__tests__/contacts-tools.test.ts +56 -29
- package/src/__tests__/contacts-write.test.ts +8 -125
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-agent-protocol.test.ts +230 -0
- package/src/__tests__/context-search-agent-runner.test.ts +998 -0
- package/src/__tests__/context-search-conversations-source.test.ts +320 -0
- package/src/__tests__/context-search-fanout.test.ts +380 -0
- package/src/__tests__/context-search-memory-source.test.ts +430 -0
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +493 -0
- package/src/__tests__/context-search-types.test.ts +95 -0
- package/src/__tests__/context-search-workspace-source.test.ts +532 -0
- package/src/__tests__/context-window-manager.test.ts +71 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +10 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +633 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +117 -31
- package/src/__tests__/conversation-agent-loop.test.ts +1004 -15
- package/src/__tests__/conversation-analysis-routes.test.ts +68 -88
- package/src/__tests__/conversation-attachments.test.ts +9 -20
- package/src/__tests__/conversation-attention-store.test.ts +2 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +15 -5
- package/src/__tests__/conversation-clear-safety.test.ts +53 -95
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -330
- package/src/__tests__/conversation-crud-inference-profile.test.ts +54 -0
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +63 -157
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-disk-view.test.ts +5 -4
- package/src/__tests__/conversation-fork-crud.test.ts +26 -55
- package/src/__tests__/conversation-fork-route.test.ts +5 -74
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-list.test.ts +128 -0
- package/src/__tests__/conversation-inference-profile-route.test.ts +205 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +4 -81
- package/src/__tests__/conversation-key-store-disk-view.test.ts +2 -1
- package/src/__tests__/conversation-lifecycle.test.ts +4 -5
- package/src/__tests__/conversation-list-source.test.ts +2 -2
- package/src/__tests__/conversation-load-history-repair.test.ts +0 -1
- package/src/__tests__/conversation-pairing.test.ts +0 -1
- package/src/__tests__/conversation-pre-run-repair.test.ts +137 -297
- package/src/__tests__/conversation-process-callsite.test.ts +79 -3
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -1
- package/src/__tests__/conversation-queue.test.ts +4 -41
- package/src/__tests__/conversation-routes-disk-view.test.ts +55 -188
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +64 -71
- package/src/__tests__/conversation-routes-slash-commands.test.ts +144 -64
- package/src/__tests__/conversation-runtime-assembly.test.ts +295 -84
- package/src/__tests__/conversation-slash-commands.test.ts +30 -47
- package/src/__tests__/conversation-slash-queue.test.ts +2 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +0 -1
- package/src/__tests__/conversation-speed-override.test.ts +0 -4
- package/src/__tests__/conversation-starter-routes.test.ts +254 -55
- package/src/__tests__/conversation-starters-cadence.test.ts +2 -2
- package/src/__tests__/conversation-store.test.ts +2 -375
- 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 +9 -47
- package/src/__tests__/conversation-tool-setup-memory-scope.test.ts +6 -6
- package/src/__tests__/conversation-unread-route.test.ts +1 -1
- package/src/__tests__/conversation-usage.test.ts +255 -4
- package/src/__tests__/conversation-wipe.test.ts +2 -103
- package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +0 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -1
- package/src/__tests__/conversations-defer-cli.test.ts +150 -0
- package/src/__tests__/credential-execution-admin-cli.test.ts +1 -1
- package/src/__tests__/credential-execution-api-key-propagation.test.ts +2 -2
- package/src/__tests__/credential-execution-approval-bridge.test.ts +22 -289
- package/src/__tests__/credential-execution-client.test.ts +1 -1
- package/src/__tests__/credential-execution-managed-contract.test.ts +1 -1
- 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 +15 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/credentials-cli.test.ts +45 -21
- 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 +26 -108
- package/src/__tests__/db-acp-history.test.ts +284 -0
- package/src/__tests__/db-activation-state.test.ts +240 -0
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +2 -1
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +248 -0
- package/src/__tests__/db-llm-request-log-provider-migration.test.ts +2 -1
- package/src/__tests__/db-memory-graph-event-date-repair.test.ts +116 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-rename-inference-profile-snake-case-migration.test.ts +132 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +1 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/delete-propagation.test.ts +3 -2
- package/src/__tests__/deterministic-verification-control-plane.test.ts +38 -104
- package/src/__tests__/dm-backfill.test.ts +3 -2
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/edit-propagation.test.ts +5 -7
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +3 -3
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/empty-response-pipeline.test.ts +1 -1
- package/src/__tests__/events-client-registration.test.ts +441 -0
- package/src/__tests__/file-write-tool.test.ts +2 -4
- package/src/__tests__/filing-service.test.ts +197 -19
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/followup-tools.test.ts +2 -1
- package/src/__tests__/gateway-client-managed-outbound.test.ts +8 -12
- package/src/__tests__/gateway-only-enforcement.test.ts +2 -6
- package/src/__tests__/gateway-only-guard.test.ts +4 -3
- package/src/__tests__/gemini-provider.test.ts +276 -10
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/graph-extraction-event-date.test.ts +30 -0
- package/src/__tests__/guardian-action-conversation-turn.test.ts +2 -1
- package/src/__tests__/guardian-action-followup-executor.test.ts +2 -2
- package/src/__tests__/guardian-action-followup-store.test.ts +2 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +9 -9
- package/src/__tests__/guardian-action-late-reply.test.ts +2 -1
- package/src/__tests__/guardian-action-store.test.ts +2 -1
- package/src/__tests__/guardian-action-sweep.test.ts +9 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +3 -2
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +21 -118
- package/src/__tests__/guardian-dispatch.test.ts +14 -11
- package/src/__tests__/guardian-grant-minting.test.ts +16 -17
- package/src/__tests__/guardian-outbound-http.test.ts +71 -106
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +2 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +41 -92
- package/src/__tests__/guardian-routing-state.test.ts +15 -23
- package/src/__tests__/guardian-verification-voice-binding.test.ts +1 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +274 -0
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +10 -87
- 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 +325 -25
- package/src/__tests__/helpers/call-route-handler.ts +72 -0
- package/src/__tests__/helpers/channel-test-adapter.ts +161 -0
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/helpers/gateway-classify-mock.ts +67 -0
- package/src/__tests__/helpers/mock-logger.ts +36 -0
- package/src/__tests__/history-repair-pipeline.test.ts +1 -1
- package/src/__tests__/home-state-routes.test.ts +10 -31
- package/src/__tests__/host-bash-proxy.test.ts +46 -122
- package/src/__tests__/host-browser-e2e-cloud.test.ts +38 -498
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +35 -95
- package/src/__tests__/host-browser-proxy.test.ts +111 -185
- package/src/__tests__/host-browser-routes.test.ts +68 -153
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +35 -31
- 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-proxy-interface.test.ts +3 -3
- package/src/__tests__/host-shell-tool.test.ts +35 -72
- package/src/__tests__/host-transfer-pending-interactions.test.ts +144 -0
- package/src/__tests__/host-transfer-proxy.test.ts +723 -0
- package/src/__tests__/http-conversation-lineage.test.ts +3 -2
- package/src/__tests__/http-user-message-parity.test.ts +18 -15
- package/src/__tests__/inbound-invite-redemption.test.ts +3 -2
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/injector-chain.test.ts +25 -21
- 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 +41 -208
- package/src/__tests__/install-skill-routing.test.ts +2 -14
- package/src/__tests__/invite-redemption-service.test.ts +2 -1
- package/src/__tests__/invite-routes-http.test.ts +80 -12
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +2 -1
- package/src/__tests__/jobs-store-upsert-debounced.test.ts +2 -1
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +157 -0
- package/src/__tests__/list-messages-attachments.test.ts +52 -55
- package/src/__tests__/list-messages-page-latest.test.ts +283 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +16 -17
- package/src/__tests__/llm-call-pipeline.test.ts +7 -8
- 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-normalization.test.ts +69 -4
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-context-route-provider.test.ts +39 -113
- package/src/__tests__/llm-request-log-turn-query.test.ts +2 -1
- package/src/__tests__/llm-resolver.test.ts +279 -0
- package/src/__tests__/llm-schema.test.ts +57 -1
- package/src/__tests__/llm-usage-store.test.ts +271 -5
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/log-export-workspace.test.ts +28 -17
- 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__/mcp-abort-signal.test.ts +2 -3
- package/src/__tests__/mcp-client-auth.test.ts +2 -3
- package/src/__tests__/memory-admin-recall.test.ts +221 -0
- package/src/__tests__/memory-recall-log-store.test.ts +2 -1
- package/src/__tests__/memory-retrieval-pipeline.test.ts +6 -8
- package/src/__tests__/memory-upsert-concurrency.test.ts +2 -1
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +209 -302
- package/src/__tests__/migration-export-http.test.ts +50 -43
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +531 -0
- package/src/__tests__/migration-import-commit-http.test.ts +82 -37
- package/src/__tests__/migration-import-from-gcs.test.ts +574 -0
- package/src/__tests__/migration-import-from-url.test.ts +34 -27
- package/src/__tests__/migration-import-preflight-http.test.ts +108 -108
- package/src/__tests__/migration-jobs-status.test.ts +164 -0
- 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 +149 -159
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/mock-gateway-ipc.ts +32 -62
- package/src/__tests__/model-intents.test.ts +15 -2
- package/src/__tests__/nl-approval-parser.test.ts +13 -17
- package/src/__tests__/non-member-access-request.test.ts +14 -6
- package/src/__tests__/notification-guardian-path.test.ts +15 -8
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +2 -1
- package/src/__tests__/notification-telegram-adapter.test.ts +57 -55
- package/src/__tests__/oauth-apps-routes.test.ts +76 -122
- package/src/__tests__/oauth-cli.test.ts +14 -1
- package/src/__tests__/oauth-provider-profiles.test.ts +1 -1
- package/src/__tests__/oauth-provider-visibility.test.ts +3 -1
- package/src/__tests__/oauth-providers-routes.test.ts +78 -101
- package/src/__tests__/oauth-store.test.ts +22 -1
- package/src/__tests__/oauth2-gateway-transport.test.ts +6 -3
- package/src/__tests__/openai-provider.test.ts +105 -6
- package/src/__tests__/openai-responses-provider.test.ts +146 -4
- package/src/__tests__/openrouter-provider-only.test.ts +22 -4
- package/src/__tests__/overflow-reduce-pipeline.test.ts +4 -9
- package/src/__tests__/permission-types.test.ts +3 -18
- package/src/__tests__/persistence-pipeline.test.ts +3 -2
- package/src/__tests__/pipeline-runner.test.ts +1 -1
- package/src/__tests__/platform-bash-auto-approve.test.ts +44 -28
- package/src/__tests__/platform.test.ts +11 -63
- package/src/__tests__/playbook-execution.test.ts +2 -1
- package/src/__tests__/playbook-tools.test.ts +2 -1
- package/src/__tests__/plugin-bootstrap.test.ts +51 -5
- package/src/__tests__/plugin-registry.test.ts +30 -0
- package/src/__tests__/plugin-route-contribution.test.ts +17 -11
- package/src/__tests__/plugin-skill-contribution.test.ts +3 -3
- package/src/__tests__/plugin-tool-contribution.test.ts +10 -4
- package/src/__tests__/plugin-types.test.ts +1 -1
- package/src/__tests__/prechat-onboarding-contract.test.ts +31 -7
- package/src/__tests__/pricing.test.ts +218 -5
- package/src/__tests__/process-message-background-slack.test.ts +331 -0
- package/src/__tests__/profiler-routes.test.ts +112 -177
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +273 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/proxy-approval-callback.test.ts +6 -554
- package/src/__tests__/qdrant-collection-migration.test.ts +7 -7
- package/src/__tests__/reaction-persistence.test.ts +12 -8
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/rebuild-index-graph-nodes.test.ts +1 -1
- package/src/__tests__/recording-handler.test.ts +64 -83
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/registry.test.ts +1 -0
- package/src/__tests__/relay-server.test.ts +37 -17
- package/src/__tests__/require-fresh-approval.test.ts +24 -182
- package/src/__tests__/resolve-trust-class.test.ts +2 -1
- package/src/__tests__/retry-thinking-tool-choice.test.ts +19 -7
- package/src/__tests__/retry-verbosity-normalization.test.ts +139 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +26 -6
- package/src/__tests__/runtime-events-sse-parity.test.ts +15 -17
- package/src/__tests__/runtime-events-sse.test.ts +16 -33
- package/src/__tests__/schedule-routes.test.ts +226 -129
- package/src/__tests__/schedule-store.test.ts +119 -1
- package/src/__tests__/schedule-tools.test.ts +2 -1
- package/src/__tests__/scheduler-recurrence.test.ts +2 -1
- package/src/__tests__/scheduler-reuse-conversation.test.ts +2 -1
- package/src/__tests__/scheduler-wake.test.ts +356 -0
- package/src/__tests__/scoped-approval-grants.test.ts +2 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +2 -1
- 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 +36 -23
- 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 +51 -103
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +36 -38
- package/src/__tests__/sequence-store.test.ts +2 -1
- package/src/__tests__/server-history-render.test.ts +2 -2
- package/src/__tests__/service-contracts-import-guard.test.ts +185 -0
- package/src/__tests__/set-permission-mode.test.ts +0 -10
- package/src/__tests__/settings-routes.test.ts +36 -69
- 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-boundary-guard.test.ts +105 -0
- package/src/__tests__/skill-load-inline-command.test.ts +2 -2
- package/src/__tests__/skill-load-inline-includes.test.ts +2 -2
- package/src/__tests__/skill-runtime-path.test.ts +64 -0
- 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 -32
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-inbound-verification.test.ts +12 -64
- package/src/__tests__/slack-messaging-token-resolution.test.ts +1 -3
- package/src/__tests__/slack-reaction-approvals.test.ts +4 -4
- package/src/__tests__/slack-share-routes.test.ts +37 -72
- package/src/__tests__/subagent-call-site-routing.test.ts +79 -0
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-fork-spawn.test.ts +20 -28
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +83 -109
- package/src/__tests__/subagent-role-registry.test.ts +3 -3
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +52 -104
- package/src/__tests__/subagent-tools.test.ts +0 -1
- package/src/__tests__/suggestion-routes.test.ts +55 -62
- package/src/__tests__/system-prompt.test.ts +115 -13
- package/src/__tests__/task-compiler.test.ts +2 -1
- package/src/__tests__/task-management-tools.test.ts +2 -1
- package/src/__tests__/task-memory-cleanup.test.ts +2 -1
- package/src/__tests__/task-scheduler.test.ts +2 -1
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +3 -401
- package/src/__tests__/test-preload.ts +0 -11
- package/src/__tests__/thread-backfill.test.ts +947 -32
- package/src/__tests__/token-estimate-pipeline.test.ts +68 -15
- package/src/__tests__/tool-approval-handler.test.ts +21 -63
- package/src/__tests__/tool-audit-listener.test.ts +3 -3
- package/src/__tests__/tool-domain-event-publisher.test.ts +3 -39
- package/src/__tests__/tool-error-pipeline.test.ts +6 -6
- package/src/__tests__/tool-execute-pipeline.test.ts +6 -14
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -16
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +69 -16
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +31 -62
- package/src/__tests__/tool-executor.test.ts +336 -1654
- package/src/__tests__/tool-grant-request-escalation.test.ts +90 -311
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +1 -1
- 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__/trust-context-guards.test.ts +1 -1
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +7 -15
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +178 -354
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +5 -151
- package/src/__tests__/trusted-contact-multichannel.test.ts +5 -6
- package/src/__tests__/trusted-contact-verification.test.ts +3 -2
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/turn-boundary-resolution.test.ts +2 -1
- package/src/__tests__/twilio-routes.test.ts +25 -66
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cache-backfill-migration.test.ts +3 -7
- 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 +223 -90
- package/src/__tests__/user-plugin-loader.test.ts +54 -12
- 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 +51 -139
- package/src/__tests__/verification-control-plane-policy.test.ts +97 -19
- package/src/__tests__/voice-ingress-preflight.test.ts +5 -5
- package/src/__tests__/voice-invite-redemption.test.ts +2 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +3 -3
- package/src/__tests__/voice-session-bridge.test.ts +285 -106
- package/src/__tests__/volume-security-guard.test.ts +0 -2
- package/src/__tests__/workspace-migration-009-backfill-conversation-disk-view.test.ts +2 -1
- package/src/__tests__/workspace-migration-013-repair-conversation-disk-view.test.ts +3 -1
- package/src/__tests__/workspace-migration-028-recover-conversations-from-disk-view.test.ts +2 -1
- package/src/__tests__/workspace-migration-045-release-notes-meet-avatar.test.ts +1 -1
- package/src/__tests__/workspace-migration-052-seed-default-inference-profiles.test.ts +260 -0
- package/src/__tests__/workspace-migration-053-release-notes-acp-codex.test.ts +225 -0
- package/src/__tests__/workspace-migration-054-seed-recall-callsite.test.ts +235 -0
- package/src/__tests__/workspace-migration-055-release-notes-agentic-recall.test.ts +128 -0
- package/src/__tests__/workspace-migration-057-repair-stale-gemini-model-ids.test.ts +232 -0
- 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-acp-sessions-ui.test.ts +144 -0
- package/src/__tests__/workspace-migration-drop-user-md.test.ts +1 -1
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +252 -0
- package/src/acp/__tests__/client-handler.test.ts +64 -0
- package/src/acp/__tests__/helpers/acp-config-stub.ts +62 -0
- package/src/acp/__tests__/helpers/which-stub.ts +45 -0
- package/src/acp/__tests__/session-manager-persistence.test.ts +366 -0
- package/src/acp/__tests__/session-manager-startup.test.ts +159 -0
- package/src/acp/__tests__/session-manager.test.ts +83 -0
- package/src/acp/client-handler.ts +23 -139
- package/src/acp/index.ts +0 -15
- package/src/acp/resolve-agent.test.ts +291 -0
- package/src/acp/resolve-agent.ts +176 -0
- package/src/acp/session-manager.ts +193 -31
- package/src/acp/types.ts +2 -50
- package/src/agent/loop.ts +53 -15
- package/src/agent/message-types.ts +0 -2
- package/src/approvals/AGENTS.md +5 -1
- package/src/approvals/__tests__/guardian-feed-event.test.ts +11 -12
- package/src/approvals/approval-primitive.ts +3 -20
- package/src/approvals/guardian-decision-primitive.ts +37 -68
- package/src/approvals/guardian-request-resolvers.ts +38 -104
- package/src/avatar/character-components.ts +6 -6
- package/src/{config/bundled-skills/settings/tools → avatar}/identity-avatar.ts +1 -1
- package/src/backup/__tests__/backup-worker.test.ts +36 -10
- package/src/backup/__tests__/paths.test.ts +5 -4
- package/src/backup/__tests__/restore.test.ts +45 -28
- package/src/backup/backup-worker.ts +37 -12
- package/src/backup/paths.ts +11 -24
- package/src/backup/restore.ts +7 -11
- package/src/browser/__tests__/operations.test.ts +0 -35
- package/src/browser/operations.ts +1 -47
- package/src/browser-session/events.ts +0 -9
- package/src/bundler/package-resolver.ts +2 -6
- package/src/calls/active-call-lease.ts +1 -1
- package/src/calls/call-constants.ts +1 -1
- package/src/calls/call-controller.ts +1 -5
- package/src/calls/call-domain.ts +14 -14
- package/src/calls/call-pointer-messages.ts +4 -9
- package/src/calls/call-store.ts +2 -34
- package/src/calls/guardian-action-sweep.ts +9 -25
- package/src/calls/guardian-dispatch.ts +1 -20
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/media-stream-audio-transcode.ts +2 -41
- package/src/calls/media-stream-server.ts +2 -3
- package/src/calls/media-stream-stt-session.ts +1 -3
- package/src/calls/relay-access-wait.ts +5 -8
- package/src/calls/relay-server.ts +15 -42
- package/src/calls/relay-setup-router.ts +2 -2
- package/src/calls/relay-verification.ts +4 -4
- package/src/calls/twilio-rest.ts +1 -39
- package/src/calls/twilio-routes.ts +160 -78
- package/src/calls/voice-control-protocol.ts +10 -10
- package/src/calls/voice-ingress-preflight.ts +2 -2
- package/src/calls/voice-session-bridge.ts +141 -77
- package/src/channels/__tests__/types.test.ts +25 -3
- package/src/channels/permission-profiles.ts +2 -72
- package/src/channels/types.ts +25 -44
- package/src/cli/AGENTS.md +1 -0
- package/src/cli/__tests__/notifications.test.ts +12 -10
- package/src/cli/commands/__tests__/attachment.test.ts +14 -8
- package/src/cli/commands/__tests__/backup.test.ts +3 -14
- package/src/cli/commands/__tests__/browser.test.ts +36 -31
- package/src/cli/commands/__tests__/cache.test.ts +175 -23
- package/src/cli/commands/__tests__/memory-v2.test.ts +382 -0
- package/src/cli/commands/__tests__/task.test.ts +36 -35
- package/src/cli/commands/__tests__/trust.test.ts +236 -0
- package/src/cli/commands/__tests__/ui-confirm.test.ts +14 -14
- package/src/cli/commands/__tests__/ui.test.ts +17 -17
- package/src/cli/commands/__tests__/watchers.test.ts +29 -29
- package/src/cli/commands/__tests__/webhooks.test.ts +544 -0
- package/src/cli/commands/attachment.ts +12 -8
- package/src/cli/commands/auth.ts +1 -1
- package/src/cli/commands/avatar.ts +192 -9
- package/src/cli/commands/backup.ts +18 -48
- package/src/cli/commands/browser.ts +52 -4
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +157 -84
- package/src/cli/commands/channel-verification-sessions.ts +6 -6
- package/src/cli/commands/clients.ts +74 -17
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +241 -86
- package/src/cli/commands/conversations-defer.ts +364 -0
- package/src/cli/commands/conversations-import.ts +2 -3
- package/src/cli/commands/conversations.ts +63 -53
- package/src/cli/commands/credential-execution.ts +1 -1
- package/src/cli/commands/credentials.ts +139 -5
- package/src/cli/commands/default-action.ts +1 -1
- package/src/cli/commands/domain.ts +2 -2
- package/src/cli/commands/email.ts +7 -7
- package/src/cli/commands/image-generation.ts +1 -1
- package/src/cli/commands/keys.ts +5 -2
- package/src/cli/commands/mcp.ts +1 -1
- package/src/cli/commands/memory-v2.ts +315 -0
- package/src/cli/commands/memory.ts +8 -8
- package/src/cli/commands/notifications.ts +21 -20
- package/src/cli/commands/oauth/__tests__/connect.test.ts +23 -5
- package/src/cli/commands/oauth/__tests__/disconnect.test.ts +1 -1
- package/src/cli/commands/oauth/__tests__/mode.test.ts +1 -1
- package/src/cli/commands/oauth/__tests__/status.test.ts +1 -1
- package/src/cli/commands/oauth/__tests__/token.test.ts +1 -1
- package/src/cli/commands/oauth/connect.ts +2 -2
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -6
- package/src/cli/commands/platform/__tests__/connect.test.ts +23 -11
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +22 -10
- package/src/cli/commands/platform/__tests__/status.test.ts +22 -10
- package/src/cli/commands/platform/connect.ts +3 -3
- package/src/cli/commands/platform/disconnect.ts +4 -6
- package/src/cli/commands/platform/index.ts +12 -10
- package/src/cli/commands/routes.ts +7 -1
- package/src/cli/commands/sequence.ts +7 -7
- package/src/cli/commands/skills.ts +264 -116
- package/src/cli/commands/task.ts +12 -10
- package/src/cli/commands/trust.ts +105 -167
- package/src/cli/commands/ui.ts +3 -3
- package/src/cli/commands/usage.ts +29 -15
- package/src/cli/commands/watchers.ts +8 -8
- package/src/cli/commands/webhooks.ts +270 -0
- package/src/cli/lib/daemon-avatar-client.ts +37 -0
- package/src/cli/lib/daemon-credential-client.ts +41 -189
- package/src/cli/lib/ipc-params.ts +22 -0
- package/src/cli/program.ts +6 -0
- package/src/cli.ts +1 -82
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/acp-defaults.test.ts +57 -0
- package/src/config/acp-defaults.ts +40 -0
- package/src/config/acp-schema.ts +1 -1
- package/src/config/assistant-feature-flags.ts +18 -142
- package/src/config/bundled-skills/acp/SKILL.md +44 -16
- package/src/config/bundled-skills/acp/TOOLS.json +45 -1
- package/src/config/bundled-skills/acp/tools/acp-list-agents.ts +12 -0
- package/src/config/bundled-skills/acp/tools/acp-steer.ts +12 -0
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +14 -14
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +1 -4
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +11 -6
- package/src/config/bundled-skills/media-processing/__tests__/cost-tracker.test.ts +6 -6
- package/src/config/bundled-skills/media-processing/services/reduce.ts +0 -13
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -4
- package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +1 -1
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +1 -1
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +1 -1
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +1 -1
- package/src/config/bundled-skills/settings/SKILL.md +2 -17
- package/src/config/bundled-skills/settings/TOOLS.json +0 -56
- package/src/config/bundled-skills/subagent/SKILL.md +2 -0
- package/src/config/bundled-tool-registry.ts +4 -6
- package/src/config/env-registry.ts +12 -2
- package/src/config/env.ts +10 -22
- package/src/config/feature-flag-registry.json +38 -46
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +90 -36
- package/src/config/loader.ts +9 -12
- package/src/config/schema.ts +5 -228
- package/src/config/schemas/__tests__/filing.test.ts +58 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +187 -0
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -5
- package/src/config/schemas/filing.ts +12 -0
- package/src/config/schemas/host-browser.ts +2 -2
- package/src/config/schemas/inference.ts +1 -3
- package/src/config/schemas/ingress.ts +2 -2
- package/src/config/schemas/llm.ts +82 -12
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-storage.ts +1 -1
- package/src/config/schemas/memory-v2.ts +185 -0
- package/src/config/schemas/memory.ts +2 -0
- package/src/config/schemas/security.ts +1 -102
- package/src/config/schemas/services.ts +52 -13
- 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 +1 -91
- package/src/config/types.ts +3 -47
- package/src/contacts/contact-store.ts +2 -19
- package/src/contacts/contacts-write.ts +1 -143
- package/src/contacts/types.ts +8 -10
- package/src/context/token-estimator.ts +1 -1
- package/src/context/tool-result-truncation.ts +1 -1
- package/src/context/window-manager.ts +45 -6
- package/src/credential-execution/approval-bridge.ts +7 -69
- package/src/credential-execution/client.ts +17 -422
- package/src/credential-execution/feature-gates.ts +1 -2
- package/src/credential-execution/managed-catalog.ts +1 -1
- package/src/credential-execution/process-manager.ts +34 -10
- package/src/credential-health/credential-health-service.ts +22 -17
- package/src/daemon/__tests__/conversation-feed-event.test.ts +0 -13
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +76 -83
- package/src/daemon/__tests__/daemon-skill-host.test.ts +265 -0
- package/src/daemon/__tests__/meet-host-supervisor.test.ts +587 -0
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +463 -0
- package/src/daemon/approval-generators.ts +2 -14
- package/src/daemon/classifier.ts +0 -106
- package/src/daemon/config-watcher.ts +14 -54
- package/src/daemon/connection-policy.ts +1 -40
- package/src/daemon/conversation-agent-loop-handlers.ts +89 -9
- package/src/daemon/conversation-agent-loop.ts +440 -88
- package/src/daemon/conversation-attachments.ts +5 -81
- package/src/daemon/conversation-error.ts +9 -5
- package/src/daemon/conversation-history.ts +9 -9
- package/src/daemon/conversation-launch.ts +21 -136
- package/src/daemon/conversation-lifecycle.ts +1 -1
- package/src/daemon/conversation-messaging.ts +2 -1
- package/src/daemon/conversation-notifiers.ts +1 -1
- package/src/daemon/conversation-process.ts +90 -174
- package/src/daemon/conversation-runtime-assembly.ts +245 -164
- package/src/daemon/conversation-slash.ts +50 -164
- package/src/daemon/conversation-store.ts +344 -0
- package/src/daemon/conversation-surfaces.ts +27 -32
- package/src/daemon/conversation-tool-setup.ts +23 -202
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +129 -381
- package/src/daemon/daemon-control.ts +4 -72
- package/src/daemon/daemon-skill-host.ts +259 -0
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/external-plugins-bootstrap.ts +67 -13
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +14 -14
- package/src/daemon/handlers/config-embeddings.ts +1 -1
- package/src/daemon/handlers/config-ingress.ts +27 -166
- package/src/daemon/handlers/config-model.test.ts +17 -0
- package/src/daemon/handlers/config-model.ts +8 -53
- package/src/daemon/handlers/config-telegram.ts +6 -53
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +32 -345
- package/src/daemon/handlers/recording.ts +27 -159
- package/src/daemon/handlers/shared.ts +50 -99
- package/src/daemon/handlers/skills.ts +55 -114
- 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 +538 -0
- package/src/daemon/lifecycle.ts +71 -272
- package/src/daemon/meet-host-startup.ts +51 -0
- package/src/daemon/meet-host-supervisor.ts +781 -0
- package/src/daemon/meet-manifest-loader.ts +410 -0
- package/src/daemon/memory-v2-startup.ts +35 -0
- package/src/daemon/message-protocol.ts +4 -7
- package/src/daemon/message-types/acp.ts +1 -0
- package/src/daemon/message-types/conversations.ts +23 -2
- 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 +42 -0
- package/src/daemon/message-types/integrations.ts +6 -0
- package/src/daemon/message-types/messages.ts +24 -23
- package/src/daemon/message-types/schedules.ts +1 -0
- package/src/daemon/message-types/settings.ts +0 -6
- package/src/daemon/message-types/shared.ts +5 -2
- package/src/daemon/message-types/subagents.ts +2 -1
- package/src/daemon/message-types/workspace.ts +1 -3
- package/src/daemon/pkb-reminder-builder.test.ts +13 -12
- package/src/daemon/pkb-reminder-builder.ts +8 -16
- package/src/daemon/process-message.ts +479 -0
- package/src/daemon/providers-setup.ts +14 -6
- package/src/daemon/server.ts +58 -1702
- package/src/daemon/shutdown-handlers.ts +3 -3
- package/src/daemon/startup-error.ts +1 -1
- package/src/daemon/tool-side-effects.ts +125 -107
- package/src/daemon/trust-context.ts +45 -0
- package/src/daemon/wake-target-adapter.ts +218 -0
- package/src/email/feature-gate.ts +1 -1
- package/src/events/domain-events.ts +1 -16
- package/src/events/tool-audit-listener.ts +5 -9
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +1 -21
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +207 -55
- package/src/followups/followup-store.ts +3 -71
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +93 -21
- package/src/heartbeat/heartbeat-service.ts +55 -16
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/phase5-exit-criteria.test.ts +18 -1
- package/src/home/__tests__/relationship-state-writer.test.ts +30 -0
- package/src/home/__tests__/rollup-producer.test.ts +67 -2
- package/src/home/assistant-feed-authoring.ts +8 -1
- package/src/home/feed-types.ts +1 -1
- package/src/home/feed-writer.ts +1 -2
- package/src/home/relationship-state-writer.ts +17 -4
- package/src/home/rewrite-feed-title.ts +58 -0
- package/src/home/rollup-producer.ts +16 -3
- package/src/inbound/platform-callback-registration.ts +1 -17
- package/src/ipc/__tests__/attachment-ipc.test.ts +128 -66
- package/src/ipc/__tests__/browser-ipc.test.ts +72 -58
- package/src/ipc/__tests__/cache-ipc.test.ts +52 -107
- package/src/ipc/__tests__/cli-ipc.test.ts +9 -6
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +253 -0
- package/src/ipc/__tests__/skill-server.test.ts +182 -0
- package/src/ipc/__tests__/socket-path.test.ts +69 -23
- package/src/ipc/__tests__/ui-request-route.test.ts +241 -216
- package/src/ipc/__tests__/watcher-ipc.test.ts +33 -33
- package/src/ipc/assistant-server.ts +443 -0
- package/src/ipc/cli-client.ts +3 -3
- package/src/ipc/gateway-client.test.ts +131 -0
- package/src/ipc/gateway-client.ts +98 -123
- package/src/ipc/ipc-framing.ts +281 -0
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +171 -0
- package/src/ipc/routes/db-proxy.ts +73 -0
- package/src/ipc/routes/route-adapter.ts +32 -0
- package/src/ipc/routes/trust-rules.test.ts +123 -0
- package/src/ipc/skill-ipc-types.ts +54 -0
- package/src/ipc/skill-routes/__tests__/config.test.ts +146 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +388 -0
- package/src/ipc/skill-routes/__tests__/identity.test.ts +62 -0
- package/src/ipc/skill-routes/__tests__/log.test.ts +133 -0
- package/src/ipc/skill-routes/__tests__/memory.test.ts +178 -0
- package/src/ipc/skill-routes/__tests__/platform.test.ts +111 -0
- package/src/ipc/skill-routes/__tests__/providers.test.ts +265 -0
- package/src/ipc/skill-routes/__tests__/registries.test.ts +361 -0
- package/src/ipc/skill-routes/config.ts +47 -0
- package/src/ipc/skill-routes/events.ts +120 -0
- package/src/ipc/skill-routes/identity.ts +21 -0
- package/src/ipc/skill-routes/index.ts +37 -0
- package/src/ipc/skill-routes/log.ts +40 -0
- package/src/ipc/skill-routes/memory.ts +76 -0
- package/src/ipc/skill-routes/platform.ts +39 -0
- package/src/ipc/skill-routes/providers.ts +163 -0
- package/src/ipc/skill-routes/registries.ts +393 -0
- package/src/ipc/skill-server.ts +738 -0
- package/src/ipc/skill-socket-path.ts +20 -0
- package/src/ipc/socket-cleanup.ts +92 -0
- package/src/ipc/socket-path.ts +63 -32
- package/src/live-voice/__tests__/live-voice-agent-turn.test.ts +374 -0
- package/src/live-voice/__tests__/live-voice-archive.test.ts +525 -0
- package/src/live-voice/__tests__/live-voice-events.test.ts +473 -0
- package/src/live-voice/__tests__/live-voice-integration.test.ts +359 -0
- package/src/live-voice/__tests__/live-voice-metrics.test.ts +179 -0
- package/src/live-voice/__tests__/live-voice-session-manager.test.ts +349 -0
- package/src/live-voice/__tests__/live-voice-stt.test.ts +244 -0
- package/src/live-voice/__tests__/live-voice-tts-session.test.ts +337 -0
- package/src/live-voice/__tests__/live-voice-tts.test.ts +337 -0
- package/src/live-voice/__tests__/protocol.test.ts +295 -0
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +413 -0
- package/src/live-voice/live-voice-archive.ts +758 -0
- package/src/live-voice/live-voice-metrics.ts +472 -0
- package/src/live-voice/live-voice-session-manager.ts +222 -0
- package/src/live-voice/live-voice-session.ts +1144 -0
- package/src/live-voice/live-voice-tts.ts +260 -0
- package/src/live-voice/protocol.ts +515 -0
- package/src/mcp/client.ts +2 -2
- package/src/mcp/manager.ts +0 -5
- package/src/media/types.ts +4 -4
- package/src/memory/__tests__/auto-analysis-enqueue.test.ts +4 -28
- package/src/memory/__tests__/auto-analysis-guard.test.ts +2 -2
- package/src/memory/__tests__/conversation-analyze-job.test.ts +7 -62
- package/src/memory/__tests__/conversation-group-migration.test.ts +2 -2
- package/src/memory/__tests__/find-analysis-conversation.test.ts +2 -1
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +235 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/admin.ts +65 -7
- package/src/memory/app-git-service.ts +0 -46
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +20 -16
- package/src/memory/auto-analysis-enqueue.ts +2 -17
- package/src/memory/canonical-guardian-store.ts +2 -1
- package/src/memory/channel-verification-sessions.ts +1 -1
- package/src/memory/checkpoints.ts +1 -1
- package/src/memory/context-search/agent-protocol.ts +424 -0
- package/src/memory/context-search/agent-runner.ts +1295 -0
- package/src/memory/context-search/format.ts +160 -0
- package/src/memory/context-search/limits.ts +106 -0
- package/src/memory/context-search/search.ts +387 -0
- package/src/memory/context-search/sources/conversations.ts +278 -0
- package/src/memory/context-search/sources/memory-v2.ts +578 -0
- package/src/memory/context-search/sources/memory.ts +95 -0
- package/src/memory/context-search/sources/pkb.ts +477 -0
- package/src/memory/context-search/sources/workspace.ts +1256 -0
- package/src/memory/context-search/types.ts +49 -0
- package/src/memory/conversation-analyze-job.ts +3 -24
- package/src/memory/conversation-attention-store.ts +1 -1
- package/src/memory/conversation-bootstrap.ts +1 -1
- package/src/memory/conversation-crud.ts +86 -119
- package/src/memory/conversation-directories.ts +1 -11
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-display-order-migration.ts +11 -2
- package/src/memory/conversation-group-migration.ts +20 -4
- package/src/memory/conversation-key-store.ts +3 -4
- package/src/memory/conversation-queries.ts +13 -26
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/conversation-starter-validation.ts +88 -0
- package/src/memory/conversation-starters-cadence.ts +1 -1
- package/src/memory/conversation-title-service.ts +2 -1
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +28 -4
- package/src/memory/db-maintenance.ts +1 -1
- package/src/memory/delivery-channels.ts +1 -14
- package/src/memory/delivery-crud.ts +2 -32
- package/src/memory/delivery-status.ts +1 -1
- package/src/memory/embedding-backend.ts +3 -21
- package/src/memory/embedding-gemini.test.ts +4 -4
- 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/external-conversation-store.ts +1 -1
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +408 -0
- package/src/memory/graph/__tests__/handle-remember-v2.test.ts +225 -0
- package/src/memory/graph/bootstrap.test.ts +2 -7
- package/src/memory/graph/bootstrap.ts +2 -1
- package/src/memory/graph/capability-seed.ts +3 -3
- package/src/memory/graph/compaction.ts +1 -1
- package/src/memory/graph/consolidation.ts +13 -10
- package/src/memory/graph/conversation-graph-memory.ts +184 -12
- package/src/memory/graph/decay.ts +1 -1
- package/src/memory/graph/extraction.ts +53 -21
- package/src/memory/graph/graph-memory-state-store.ts +1 -1
- package/src/memory/graph/graph-search.test.ts +94 -2
- package/src/memory/graph/graph-search.ts +22 -7
- package/src/memory/graph/image-ref-utils.ts +1 -1
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/graph/retriever.test.ts +158 -4
- package/src/memory/graph/retriever.ts +17 -5
- package/src/memory/graph/store.test.ts +2 -1
- package/src/memory/graph/store.ts +1 -1
- package/src/memory/graph/tool-handlers.ts +73 -247
- package/src/memory/graph/tools.ts +35 -53
- package/src/memory/group-crud.ts +1 -2
- package/src/memory/guardian-action-store.ts +2 -84
- package/src/memory/guardian-approvals.ts +1 -49
- package/src/memory/guardian-rate-limits.ts +1 -1
- package/src/memory/indexer.ts +44 -32
- package/src/memory/invite-store.ts +1 -1
- package/src/memory/job-handlers/backfill.ts +1 -1
- package/src/memory/job-handlers/cleanup.ts +2 -1
- package/src/memory/job-handlers/conversation-starters.ts +54 -63
- package/src/memory/job-handlers/embedding.test.ts +2 -1
- package/src/memory/job-handlers/embedding.ts +1 -1
- package/src/memory/job-handlers/index-maintenance.ts +1 -1
- package/src/memory/job-handlers/summarization.ts +3 -3
- package/src/memory/job-utils.ts +3 -9
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +362 -0
- package/src/memory/jobs/embed-concept-page.ts +210 -0
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -1
- package/src/memory/jobs-store.ts +9 -2
- package/src/memory/jobs-worker.ts +56 -17
- package/src/memory/lifecycle-events-store.ts +1 -1
- package/src/memory/llm-request-log-store.ts +1 -42
- package/src/memory/llm-usage-store.ts +130 -44
- package/src/memory/media-store.ts +1 -1
- package/src/memory/memory-recall-log-store.ts +1 -1
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/038-actor-token-records.ts +3 -0
- package/src/memory/migrations/039-actor-refresh-token-records.ts +3 -0
- package/src/memory/migrations/226-schedule-wake-conversation-id.ts +11 -0
- package/src/memory/migrations/227-add-conversation-inference-profile.ts +18 -0
- package/src/memory/migrations/228-rename-inference-profile-snake-case.ts +27 -0
- package/src/memory/migrations/229-delete-private-conversations.test.ts +1087 -0
- package/src/memory/migrations/229-delete-private-conversations.ts +210 -0
- package/src/memory/migrations/230-acp-session-history.ts +41 -0
- package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +128 -0
- package/src/memory/migrations/232-activation-state.ts +38 -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 +24 -0
- package/src/memory/migrations/registry.ts +31 -0
- package/src/memory/pkb/pkb-index.test.ts +4 -5
- package/src/memory/pkb/pkb-reconcile.test.ts +4 -5
- package/src/memory/pkb/pkb-search.test.ts +83 -3
- package/src/memory/pkb/pkb-search.ts +27 -14
- package/src/memory/published-pages-store.ts +1 -1
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/acp.ts +30 -0
- package/src/memory/schema/conversations.ts +8 -1
- package/src/memory/schema/index.ts +1 -0
- package/src/memory/schema/infrastructure.ts +26 -32
- package/src/memory/schema/memory-graph.ts +36 -14
- package/src/memory/scoped-approval-grants.ts +2 -1
- package/src/memory/search/semantic.ts +7 -18
- package/src/memory/shared-app-links-store.ts +2 -1
- package/src/memory/tool-usage-store.ts +3 -1
- package/src/memory/trace-event-store.ts +2 -1
- package/src/memory/turn-events-store.ts +1 -1
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation-store.test.ts +202 -0
- package/src/memory/v2/__tests__/activation.test.ts +1155 -0
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +483 -0
- package/src/memory/v2/__tests__/consolidation-job.test.ts +412 -0
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +1161 -0
- package/src/memory/v2/__tests__/migration.test.ts +840 -0
- package/src/memory/v2/__tests__/page-store.test.ts +517 -0
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/qdrant.test.ts +438 -0
- package/src/memory/v2/__tests__/sim.test.ts +549 -0
- package/src/memory/v2/__tests__/skill-content.test.ts +85 -0
- package/src/memory/v2/__tests__/skill-qdrant.test.ts +657 -0
- package/src/memory/v2/__tests__/skill-store.test.ts +463 -0
- package/src/memory/v2/__tests__/static-context.test.ts +153 -0
- package/src/memory/v2/__tests__/sweep-job.test.ts +441 -0
- package/src/memory/v2/activation-store.ts +109 -0
- package/src/memory/v2/activation.ts +561 -0
- package/src/memory/v2/backfill-jobs.ts +357 -0
- package/src/memory/v2/consolidation-job.ts +306 -0
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +431 -0
- package/src/memory/v2/migration.ts +647 -0
- package/src/memory/v2/now-text.ts +37 -0
- package/src/memory/v2/page-store.ts +382 -0
- package/src/memory/v2/prompts/consolidation.ts +261 -0
- package/src/memory/v2/prompts/sweep.ts +56 -0
- package/src/memory/v2/qdrant.ts +342 -0
- package/src/memory/v2/sim.ts +206 -0
- package/src/memory/v2/skill-content.ts +42 -0
- package/src/memory/v2/skill-qdrant.ts +395 -0
- package/src/memory/v2/skill-store.ts +176 -0
- package/src/memory/v2/static-context.ts +62 -0
- package/src/memory/v2/sweep-job.ts +298 -0
- package/src/memory/v2/types.ts +106 -0
- 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/index.ts +262 -0
- 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/api.ts +242 -0
- 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 +13 -3
- 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/send.ts +383 -0
- package/src/messaging/providers/slack/types.ts +1 -0
- package/src/messaging/providers/telegram-bot/adapter.ts +4 -42
- package/src/messaging/providers/telegram-bot/api.ts +253 -0
- package/src/messaging/providers/telegram-bot/client.ts +17 -58
- package/src/messaging/providers/telegram-bot/send.ts +232 -0
- package/src/messaging/providers/whatsapp/adapter.ts +4 -36
- package/src/messaging/providers/whatsapp/api.ts +319 -0
- package/src/messaging/providers/whatsapp/client.ts +4 -48
- package/src/messaging/providers/whatsapp/send.ts +209 -0
- package/src/notifications/adapters/slack.ts +5 -23
- package/src/notifications/adapters/telegram.ts +8 -29
- package/src/notifications/conversation-candidates.ts +1 -1
- package/src/notifications/conversation-seed-composer.ts +12 -6
- package/src/notifications/copy-composer.ts +1 -1
- package/src/notifications/decision-engine.ts +1 -1
- package/src/notifications/decisions-store.ts +1 -1
- package/src/notifications/deliveries-store.ts +2 -1
- package/src/notifications/deterministic-checks.ts +1 -1
- package/src/notifications/events-store.ts +1 -13
- package/src/notifications/preferences-store.ts +1 -1
- package/src/notifications/signal.ts +0 -9
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +6 -5
- package/src/oauth/credential-token-resolver.ts +97 -0
- package/src/oauth/manual-token-connection.ts +30 -34
- package/src/oauth/oauth-store.ts +8 -5
- 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 -23
- package/src/permissions/approval-policy.test.ts +149 -132
- package/src/permissions/approval-policy.ts +65 -91
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.test.ts +632 -0
- package/src/permissions/checker.ts +270 -460
- package/src/permissions/gateway-threshold-reader.ts +31 -47
- package/src/permissions/ipc-risk-types.ts +95 -0
- package/src/permissions/prompter.ts +13 -11
- package/src/permissions/risk-types.ts +24 -210
- package/src/permissions/secret-prompter.ts +21 -48
- package/src/permissions/types.ts +49 -46
- package/src/permissions/workspace-policy.ts +1 -8
- package/src/platform/sync-identity.ts +0 -8
- package/src/playbooks/playbook-compiler.ts +1 -1
- package/src/plugins/defaults/index.ts +1 -1
- package/src/plugins/defaults/injectors.ts +87 -23
- package/src/plugins/defaults/llm-call.ts +6 -9
- package/src/plugins/defaults/memory-retrieval.ts +1 -6
- package/src/plugins/defaults/overflow-reduce.ts +12 -7
- package/src/plugins/defaults/token-estimate.ts +2 -3
- package/src/plugins/registry.ts +61 -1
- package/src/plugins/types.ts +14 -7
- package/src/plugins/user-loader.ts +36 -10
- package/src/prompts/persona-resolver.ts +2 -4
- package/src/prompts/system-prompt.ts +34 -31
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/templates/SOUL.md +3 -1
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +0 -21
- package/src/providers/__tests__/retry-callsite.test.ts +141 -7
- package/src/providers/anthropic/client.ts +143 -52
- package/src/providers/call-site-routing.ts +49 -6
- package/src/providers/fireworks/client.ts +3 -0
- package/src/providers/gemini/client.ts +113 -23
- package/src/providers/managed-proxy/context.ts +0 -17
- package/src/providers/model-catalog.ts +188 -27
- package/src/providers/model-intents.ts +7 -8
- package/src/providers/openai/chat-completions-provider.ts +43 -7
- package/src/providers/openai/responses-provider.ts +46 -5
- package/src/providers/openrouter/client.ts +4 -5
- package/src/providers/provider-env-vars.ts +4 -12
- package/src/providers/provider-send-message.ts +61 -13
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +15 -10
- package/src/providers/retry.ts +148 -31
- package/src/providers/speech-to-text/openai-whisper-stream.ts +1 -1
- package/src/providers/speech-to-text/openai-whisper.ts +3 -6
- package/src/providers/speech-to-text/provider-catalog.ts +75 -0
- package/src/providers/speech-to-text/xai.ts +5 -5
- package/src/providers/thinking-config.ts +34 -0
- package/src/providers/types.ts +35 -10
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +16 -11
- package/src/runtime/__tests__/agent-wake.test.ts +122 -9
- package/src/runtime/__tests__/interactive-ui.test.ts +157 -246
- package/src/runtime/access-request-helper.ts +9 -20
- package/src/runtime/actor-trust-resolver.ts +2 -2
- package/src/runtime/agent-wake.ts +211 -68
- package/src/runtime/approval-conversation-turn.ts +2 -15
- package/src/runtime/approval-message-composer.ts +11 -60
- package/src/runtime/assistant-event-hub.ts +541 -45
- package/src/runtime/assistant-event.ts +16 -69
- package/src/runtime/auth/__tests__/guard-tests.test.ts +6 -30
- package/src/runtime/auth/__tests__/middleware.test.ts +10 -10
- package/src/runtime/auth/__tests__/route-policy.test.ts +0 -8
- package/src/runtime/auth/middleware.ts +5 -5
- package/src/runtime/auth/route-policy.ts +205 -12
- package/src/runtime/auth/token-service.ts +1 -111
- package/src/runtime/capability-tokens.ts +89 -313
- package/src/runtime/channel-approval-types.ts +1 -6
- package/src/runtime/channel-approvals.ts +13 -81
- package/src/runtime/channel-readiness-service.ts +2 -2
- package/src/runtime/channel-reply-delivery.ts +2 -8
- package/src/runtime/channel-retry-sweep.ts +20 -17
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/confirmation-request-guardian-bridge.ts +2 -7
- package/src/runtime/gateway-client.ts +37 -378
- package/src/runtime/guardian-action-grant-minter.ts +2 -3
- package/src/runtime/guardian-action-message-composer.ts +11 -52
- package/src/runtime/guardian-action-service.ts +19 -7
- package/src/runtime/guardian-decision-types.ts +4 -65
- package/src/runtime/guardian-reply-router.ts +10 -19
- package/src/runtime/guardian-vellum-migration.ts +5 -64
- package/src/runtime/http-errors.ts +1 -32
- package/src/runtime/http-router.ts +54 -8
- package/src/runtime/http-server.ts +362 -1187
- package/src/runtime/http-types.ts +20 -98
- package/src/runtime/interactive-ui-types.ts +145 -0
- package/src/runtime/interactive-ui.ts +37 -196
- package/src/runtime/invite-redemption-service.ts +1 -1
- package/src/runtime/invite-redemption-templates.ts +1 -1
- package/src/runtime/local-actor-identity.ts +13 -43
- package/src/runtime/message-composer-types.ts +134 -0
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/middleware/rate-limiter.ts +1 -1
- package/src/runtime/middleware/request-logger.ts +5 -2
- package/src/runtime/migrations/__tests__/job-registry.test.ts +346 -0
- 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 +18 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +371 -0
- package/src/runtime/migrations/job-registry.ts +281 -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 -80
- package/src/runtime/migrations/vbundle-import-analyzer.ts +9 -7
- package/src/runtime/migrations/vbundle-importer.ts +8 -8
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +3 -16
- package/src/runtime/migrations/vbundle-streaming-validator.ts +48 -26
- package/src/runtime/migrations/vbundle-tar-stream.ts +11 -3
- package/src/runtime/migrations/vbundle-validator.ts +214 -41
- package/src/runtime/nl-approval-parser.ts +16 -21
- package/src/runtime/pending-interactions.ts +42 -16
- package/src/runtime/routes/__tests__/acp-routes.test.ts +394 -0
- package/src/runtime/routes/__tests__/backup-routes.test.ts +232 -339
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +235 -0
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +72 -4
- 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__/stt-routes.test.ts +182 -223
- package/src/runtime/routes/__tests__/suggest-trust-rule-routes.test.ts +230 -0
- package/src/{ipc/__tests__/task-ipc.test.ts → runtime/routes/__tests__/task-routes.test.ts} +116 -96
- package/src/runtime/routes/__tests__/tts-routes.test.ts +185 -289
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/access-request-decision.ts +25 -50
- package/src/runtime/routes/acp-routes.test.ts +368 -0
- package/src/runtime/routes/acp-routes.ts +392 -170
- package/src/runtime/routes/app-management-routes.ts +475 -662
- package/src/runtime/routes/app-routes.ts +192 -177
- package/src/runtime/routes/approval-routes.ts +163 -440
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +24 -84
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +3 -10
- package/src/runtime/routes/attachment-routes.ts +409 -253
- package/src/runtime/routes/audio-routes.ts +51 -18
- package/src/runtime/routes/avatar-routes.ts +81 -76
- package/src/runtime/routes/background-tool-routes.ts +94 -0
- package/src/runtime/routes/backup-routes.ts +154 -336
- package/src/runtime/routes/brain-graph-routes.ts +83 -110
- package/src/runtime/routes/browser-routes.ts +127 -0
- package/src/runtime/routes/btw-routes.ts +62 -106
- package/src/runtime/routes/cache-routes.ts +96 -0
- package/src/runtime/routes/call-routes.ts +208 -247
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +1 -1
- package/src/runtime/routes/channel-delivery-routes.ts +25 -27
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +79 -120
- package/src/runtime/routes/channel-route-definitions.ts +62 -0
- package/src/runtime/routes/channel-route-shared.ts +15 -45
- package/src/runtime/routes/channel-verification-routes.ts +207 -187
- package/src/runtime/routes/client-routes.ts +81 -0
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/contact-routes.ts +533 -407
- package/src/runtime/routes/conversation-analysis-routes.ts +48 -49
- package/src/runtime/routes/conversation-attention-routes.ts +55 -67
- package/src/runtime/routes/conversation-list-routes.ts +248 -0
- package/src/runtime/routes/conversation-management-routes.ts +591 -717
- package/src/runtime/routes/conversation-query-routes.ts +621 -459
- package/src/runtime/routes/conversation-routes.ts +396 -792
- package/src/runtime/routes/conversation-starter-routes.ts +137 -108
- package/src/runtime/routes/credential-prompt-routes.ts +124 -0
- package/src/runtime/routes/debug-routes.ts +34 -39
- package/src/runtime/routes/defer-routes.ts +230 -0
- package/src/runtime/routes/diagnostics-routes.ts +79 -70
- package/src/runtime/routes/documents-routes.ts +163 -117
- package/src/runtime/routes/errors.ts +132 -0
- package/src/runtime/routes/events-routes.ts +126 -119
- package/src/runtime/routes/filing-routes.ts +80 -76
- package/src/runtime/routes/global-search-routes.ts +51 -57
- package/src/runtime/routes/group-routes.ts +199 -181
- package/src/runtime/routes/guardian-action-routes.ts +100 -171
- package/src/runtime/routes/guardian-approval-interception.ts +27 -58
- package/src/runtime/routes/guardian-approval-prompt.ts +10 -21
- package/src/runtime/routes/guardian-approval-reply-helpers.ts +2 -6
- package/src/runtime/routes/guardian-expiry-sweep.ts +19 -36
- package/src/runtime/routes/heartbeat-routes.ts +194 -209
- package/src/runtime/routes/home-feed-routes.ts +85 -187
- package/src/runtime/routes/home-state-routes.ts +27 -24
- package/src/runtime/routes/host-bash-routes.ts +45 -54
- package/src/runtime/routes/host-browser-routes.ts +44 -99
- package/src/runtime/routes/host-cu-routes.ts +80 -71
- package/src/runtime/routes/host-file-routes.ts +53 -62
- package/src/runtime/routes/host-transfer-routes.ts +216 -0
- package/src/runtime/routes/http-adapter.ts +172 -0
- package/src/runtime/routes/identity-routes.ts +161 -85
- package/src/runtime/routes/inbound-conversation.ts +11 -18
- package/src/runtime/routes/inbound-message-handler.ts +639 -232
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +81 -226
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +2 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +57 -90
- package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +25 -50
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +7 -7
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +5 -5
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +5 -6
- package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +14 -24
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +3 -10
- package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +3 -3
- package/src/runtime/routes/index.ts +201 -0
- package/src/runtime/routes/integrations/slack/__tests__/channel.test.ts +25 -32
- package/src/runtime/routes/integrations/slack/__tests__/share.test.ts +22 -31
- package/src/runtime/routes/integrations/slack/channel.ts +50 -71
- package/src/runtime/routes/integrations/slack/share.ts +49 -58
- package/src/runtime/routes/integrations/telegram.ts +91 -74
- package/src/runtime/routes/integrations/twilio.ts +163 -240
- package/src/runtime/routes/integrations/vercel.ts +57 -54
- package/src/runtime/routes/interface-routes.ts +43 -0
- package/src/runtime/routes/internal-oauth-routes.ts +56 -0
- package/src/runtime/routes/internal-twilio-routes.ts +46 -0
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/llm-context-normalization.ts +4 -2
- package/src/runtime/routes/log-export/workspace-allowlist.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +90 -100
- package/src/runtime/routes/memory-item-routes.test.ts +152 -175
- package/src/runtime/routes/memory-item-routes.ts +243 -323
- package/src/runtime/routes/memory-v2-routes.ts +188 -0
- package/src/runtime/routes/migration-rollback-routes.ts +167 -212
- package/src/runtime/routes/migration-routes.ts +1037 -377
- package/src/runtime/routes/notification-routes.ts +199 -70
- package/src/runtime/routes/oauth-apps.ts +254 -251
- package/src/runtime/routes/oauth-providers.ts +66 -57
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +60 -120
- package/src/runtime/routes/playground/__tests__/guard.test.ts +34 -54
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +107 -151
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +41 -117
- package/src/runtime/routes/playground/__tests__/seed-conversation.test.ts +95 -138
- package/src/runtime/routes/playground/__tests__/seeded-conversations.test.ts +115 -217
- package/src/runtime/routes/playground/__tests__/state.test.ts +41 -90
- package/src/runtime/routes/playground/conversation-not-found.ts +9 -11
- package/src/runtime/routes/playground/force-compact.ts +41 -54
- package/src/runtime/routes/playground/guard.ts +18 -19
- package/src/runtime/routes/playground/helpers.ts +103 -0
- package/src/runtime/routes/playground/index.ts +15 -27
- package/src/runtime/routes/playground/inject-failures.ts +48 -64
- package/src/runtime/routes/playground/reset-circuit.ts +31 -57
- package/src/runtime/routes/playground/seed-conversation.ts +66 -92
- package/src/runtime/routes/playground/seeded-conversations.ts +60 -64
- package/src/runtime/routes/playground/state.ts +23 -24
- package/src/runtime/routes/profiler-routes.ts +132 -167
- package/src/runtime/routes/ps-routes.ts +120 -0
- package/src/runtime/routes/recording-routes.ts +189 -270
- package/src/runtime/routes/rename-conversation-routes.ts +85 -0
- package/src/runtime/routes/schedule-routes.ts +239 -246
- package/src/runtime/routes/secret-routes.ts +305 -282
- package/src/runtime/routes/secrets-deps.ts +24 -0
- package/src/runtime/routes/settings-routes.ts +370 -449
- package/src/runtime/routes/skills-routes.ts +417 -471
- package/src/runtime/routes/stt-routes.ts +196 -206
- package/src/runtime/routes/subagents-routes.ts +125 -141
- package/src/runtime/routes/suggest-trust-rule-routes.ts +275 -0
- package/src/runtime/routes/surface-action-routes.ts +135 -190
- package/src/runtime/routes/surface-content-routes.ts +84 -118
- package/src/runtime/routes/task-routes.ts +354 -0
- package/src/runtime/routes/telemetry-routes.ts +33 -49
- package/src/runtime/routes/trace-event-routes.ts +55 -74
- package/src/runtime/routes/trust-rules-routes.ts +61 -244
- package/src/runtime/routes/tts-routes.ts +187 -169
- package/src/runtime/routes/types.ts +139 -0
- package/src/{ipc/routes/ui-request.ts → runtime/routes/ui-request-routes.ts} +23 -17
- package/src/runtime/routes/upgrade-broadcast-routes.ts +150 -198
- package/src/runtime/routes/usage-routes.ts +222 -171
- package/src/runtime/routes/user-routes.ts +88 -18
- package/src/runtime/routes/wake-conversation-routes.ts +49 -0
- package/src/{ipc/routes/watcher.ts → runtime/routes/watcher-routes.ts} +84 -39
- package/src/runtime/routes/wipe-conversation-routes.ts +89 -0
- package/src/runtime/routes/work-items-routes.test.ts +10 -20
- package/src/runtime/routes/work-items-routes.ts +419 -437
- package/src/runtime/routes/workspace-commit-routes.ts +30 -61
- package/src/runtime/routes/workspace-routes.test.ts +254 -381
- package/src/runtime/routes/workspace-routes.ts +238 -246
- package/src/runtime/runtime-mode.ts +8 -1
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +82 -120
- package/src/runtime/services/analyze-conversation.ts +18 -55
- package/src/runtime/services/conversation-serializer.ts +179 -0
- package/src/runtime/trust-context-resolver.ts +3 -2
- package/src/runtime/verification-outbound-actions.ts +14 -50
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/schedule/schedule-store.ts +64 -18
- package/src/schedule/scheduler.ts +101 -0
- package/src/security/ces-credential-client.ts +32 -169
- package/src/security/ces-rpc-credential-backend.ts +1 -1
- package/src/security/credential-backend.ts +6 -6
- package/src/security/oauth-completion-page.ts +1 -1
- package/src/security/oauth2.ts +3 -6
- 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/sequence/analytics.ts +1 -1
- package/src/sequence/guardrails.ts +3 -3
- package/src/sequence/store.ts +2 -1
- package/src/signals/bash.ts +1 -1
- 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/event-stream.ts +1 -1
- package/src/signals/user-message.ts +108 -22
- package/src/skills/catalog-cache.ts +7 -0
- package/src/skills/catalog-files.ts +0 -5
- package/src/skills/catalog-install.ts +29 -18
- package/src/skills/category-inference.ts +0 -11
- package/src/skills/clawhub.ts +4 -4
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/skills/managed-store.ts +2 -2
- package/src/skills/remote-skill-policy.ts +6 -7
- package/src/subagent/index.ts +2 -6
- package/src/subagent/manager.ts +94 -107
- package/src/subagent/types.ts +9 -0
- package/src/tasks/SPEC.md +2 -2
- package/src/tasks/task-compiler.ts +1 -1
- package/src/tasks/task-runner.ts +2 -22
- package/src/tasks/task-store.ts +2 -29
- 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/list-agents.test.ts +115 -0
- package/src/tools/acp/list-agents.ts +31 -0
- package/src/tools/acp/spawn.test.ts +378 -0
- package/src/tools/acp/spawn.ts +142 -62
- package/src/tools/acp/steer.test.ts +100 -0
- package/src/tools/acp/steer.ts +38 -0
- package/src/tools/background-tool-registry.ts +98 -0
- package/src/tools/browser/__tests__/browser-status.test.ts +44 -127
- package/src/tools/browser/browser-execution.ts +38 -127
- package/src/tools/browser/browser-manager.ts +1 -8
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +92 -68
- package/src/tools/browser/cdp-client/accessibility-snapshot.ts +1 -1
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +3 -1
- package/src/tools/browser/cdp-client/factory.ts +48 -76
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/browser/cdp-client/types.ts +4 -1
- package/src/tools/computer-use/definitions.ts +1 -1
- package/src/tools/credential-execution/make-authenticated-request.ts +2 -2
- package/src/tools/credential-execution/manage-secure-command-tool.ts +1 -1
- package/src/tools/credential-execution/run-authenticated-command.ts +2 -2
- package/src/tools/credentials/broker-types.ts +2 -1
- package/src/tools/document/editor-template.ts +1 -1
- package/src/tools/execution-timeout.ts +1 -1
- package/src/tools/executor.ts +53 -45
- 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 +271 -0
- package/src/tools/host-filesystem/transfer.ts +235 -0
- package/src/tools/host-filesystem/write.ts +3 -2
- package/src/tools/host-terminal/host-shell.ts +192 -13
- package/src/tools/mcp/mcp-tool-factory.ts +1 -1
- package/src/tools/memory/register.test.ts +161 -1
- package/src/tools/memory/register.ts +19 -34
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +84 -220
- package/src/tools/policy-context.ts +1 -8
- package/src/tools/registry.ts +16 -1
- package/src/tools/shared/shell-output.ts +4 -1
- package/src/tools/side-effects.ts +2 -2
- package/src/tools/skills/execute.ts +1 -1
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/subagent/spawn.ts +35 -11
- package/src/tools/terminal/safe-env.ts +10 -1
- package/src/tools/terminal/shell.ts +142 -88
- package/src/tools/tool-approval-handler.ts +4 -70
- package/src/tools/tool-input-summary.ts +10 -0
- package/src/tools/types.ts +136 -183
- package/src/tools/ui-surface/definitions.ts +2 -2
- 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/debounce.ts +0 -21
- package/src/util/errors.ts +0 -8
- package/src/util/json.ts +13 -0
- package/src/util/log-redact.ts +0 -1
- package/src/util/logger.ts +3 -3
- package/src/util/platform.ts +85 -124
- package/src/util/pricing.ts +158 -8
- package/src/watcher/engine.ts +42 -20
- package/src/watcher/watcher-store.ts +2 -1
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/work-items/work-item-store.ts +1 -1
- package/src/workspace/git-service.ts +1 -6
- package/src/workspace/migrations/006-services-config.ts +10 -1
- package/src/workspace/migrations/017-seed-persona-dirs.ts +1 -1
- package/src/workspace/migrations/019-scope-journal-to-guardian.ts +1 -1
- package/src/workspace/migrations/028-recover-conversations-from-disk-view.ts +1 -1
- package/src/workspace/migrations/031-drop-user-md.ts +1 -1
- package/src/workspace/migrations/045-release-notes-meet-avatar.ts +3 -4
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +4 -3
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +150 -0
- package/src/workspace/migrations/053-release-notes-acp-codex.ts +107 -0
- package/src/workspace/migrations/054-seed-recall-callsite.ts +102 -0
- package/src/workspace/migrations/055-release-notes-agentic-recall.ts +63 -0
- package/src/workspace/migrations/056-release-notes-inference-profile-reordering.ts +65 -0
- package/src/workspace/migrations/057-repair-stale-gemini-model-ids.ts +98 -0
- package/src/workspace/migrations/058-release-notes-acp-sessions-ui.ts +71 -0
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +53 -0
- package/src/workspace/migrations/060-memory-v2-init.ts +37 -0
- 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/rebuild-conversation-disk-view.ts +1 -1
- package/src/workspace/migrations/registry.ts +26 -0
- package/src/workspace/migrations/runner.ts +2 -2
- package/src/workspace/provider-commit-message-generator.ts +4 -4
- package/node_modules/@vellumai/ces-contracts/src/__tests__/trust-rules.test.ts +0 -471
- package/node_modules/@vellumai/ces-contracts/src/trust-rules.ts +0 -436
- package/src/__tests__/cli-command-risk-guard.test.ts +0 -368
- package/src/__tests__/config-watcher-feature-flags.test.ts +0 -211
- package/src/__tests__/conversation-approval-overrides.test.ts +0 -207
- package/src/__tests__/conversation-host-access-routes.test.ts +0 -229
- package/src/__tests__/conversation-tool-setup-batch-authorized.test.ts +0 -226
- package/src/__tests__/conversation-tool-setup-side-effect-flag.test.ts +0 -167
- package/src/__tests__/ephemeral-permissions.test.ts +0 -474
- package/src/__tests__/extension-id-sync-guard.test.ts +0 -241
- package/src/__tests__/host-browser-e2e-self-hosted.test.ts +0 -374
- package/src/__tests__/native-host-marker-sync-guard.test.ts +0 -157
- package/src/__tests__/pairing-concurrent.test.ts +0 -84
- package/src/__tests__/pairing-routes.test.ts +0 -181
- package/src/__tests__/parser.test.ts +0 -595
- package/src/__tests__/permission-checker-host-gate.test.ts +0 -488
- package/src/__tests__/permission-controls-v2-flag.test.ts +0 -55
- package/src/__tests__/permission-mode.test.ts +0 -89
- package/src/__tests__/provider-env-vars-scope.test.ts +0 -52
- package/src/__tests__/risk-classifier-parity.test.ts +0 -230
- 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 -74
- package/src/__tests__/secret-scanner-executor.test.ts +0 -451
- package/src/__tests__/shell-identity.test.ts +0 -236
- package/src/__tests__/shell-parser-fuzz.test.ts +0 -629
- package/src/__tests__/shell-parser-property.test.ts +0 -936
- package/src/__tests__/starter-bundle.test.ts +0 -173
- package/src/__tests__/stt-catalog-parity.test.ts +0 -282
- package/src/__tests__/task-runner.test.ts +0 -224
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-executor-shell-integration.test.ts +0 -354
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/__tests__/trust-store-pattern-matches.test.ts +0 -29
- package/src/__tests__/trust-store.test.ts +0 -2013
- package/src/__tests__/v2-consent-policy.test.ts +0 -103
- package/src/browser/identifiers.ts +0 -51
- package/src/cli/db.ts +0 -1
- package/src/config/bundled-skills/settings/tools/avatar-get.ts +0 -40
- package/src/config/bundled-skills/settings/tools/avatar-remove.ts +0 -64
- package/src/config/bundled-skills/settings/tools/avatar-update.ts +0 -88
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/__tests__/lifecycle-startup-ordering.test.ts +0 -127
- package/src/daemon/approved-devices-store.ts +0 -110
- package/src/daemon/external-skills-bootstrap.ts +0 -41
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/daemon/message-types/trust.ts +0 -71
- package/src/daemon/pairing-store.ts +0 -229
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/cli-server.ts +0 -252
- package/src/ipc/routes/attachment.ts +0 -114
- package/src/ipc/routes/browser-context.ts +0 -63
- package/src/ipc/routes/browser.ts +0 -97
- package/src/ipc/routes/cache.ts +0 -96
- package/src/ipc/routes/get-contact.ts +0 -16
- package/src/ipc/routes/index.ts +0 -35
- package/src/ipc/routes/list-clients.ts +0 -31
- package/src/ipc/routes/merge-contacts.ts +0 -17
- package/src/ipc/routes/notification.ts +0 -133
- package/src/ipc/routes/rename-conversation.ts +0 -59
- package/src/ipc/routes/search-contacts.ts +0 -19
- package/src/ipc/routes/task-queue.ts +0 -226
- package/src/ipc/routes/task.ts +0 -173
- package/src/ipc/routes/upsert-contact.ts +0 -25
- package/src/ipc/routes/wake-conversation.ts +0 -19
- package/src/memory/db.ts +0 -23
- package/src/permissions/arg-parser.test.ts +0 -161
- package/src/permissions/arg-parser.ts +0 -141
- package/src/permissions/bash-risk-classifier.test.ts +0 -1620
- package/src/permissions/bash-risk-classifier.ts +0 -950
- package/src/permissions/command-registry.test.ts +0 -774
- package/src/permissions/command-registry.ts +0 -1005
- package/src/permissions/defaults.ts +0 -314
- package/src/permissions/file-risk-classifier.test.ts +0 -535
- package/src/permissions/file-risk-classifier.ts +0 -274
- package/src/permissions/permission-mode.ts +0 -24
- package/src/permissions/schedule-risk-classifier.test.ts +0 -129
- package/src/permissions/schedule-risk-classifier.ts +0 -85
- package/src/permissions/shell-identity.ts +0 -297
- package/src/permissions/skill-risk-classifier.test.ts +0 -311
- package/src/permissions/skill-risk-classifier.ts +0 -214
- package/src/permissions/trust-client.ts +0 -359
- package/src/permissions/trust-store-interface.ts +0 -100
- package/src/permissions/trust-store.ts +0 -1330
- package/src/permissions/v2-consent-policy.ts +0 -87
- package/src/permissions/web-risk-classifier.test.ts +0 -170
- package/src/permissions/web-risk-classifier.ts +0 -89
- package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +0 -715
- package/src/runtime/__tests__/capability-tokens.test.ts +0 -258
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -293
- package/src/runtime/actor-refresh-token-store.ts +0 -156
- package/src/runtime/actor-token-store.ts +0 -207
- package/src/runtime/auth/__tests__/credential-service.test.ts +0 -264
- package/src/runtime/auth/credential-service.ts +0 -352
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -261
- package/src/runtime/conversation-approval-overrides.ts +0 -86
- package/src/runtime/routes/browser-extension-pair-routes.ts +0 -575
- package/src/runtime/routes/channel-routes.ts +0 -112
- package/src/runtime/routes/contact-routes.test.ts +0 -298
- package/src/runtime/routes/guardian-bootstrap-routes.ts +0 -175
- package/src/runtime/routes/guardian-refresh-routes.ts +0 -79
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -336
- package/src/runtime/routes/invite-routes.ts +0 -280
- package/src/runtime/routes/pairing-routes.ts +0 -431
- package/src/runtime/routes/playground/deps.ts +0 -56
- package/src/runtime/services/__tests__/analyze-deps-singleton.test.ts +0 -67
- package/src/runtime/services/analyze-deps-singleton.ts +0 -32
- package/src/tasks/ephemeral-permissions.ts +0 -55
- package/src/tools/secret-detection-handler.ts +0 -359
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/parser.ts +0 -623
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
- package/src/types/qrcode.d.ts +0 -13
- package/src/util/network-info.ts +0 -55
- /package/node_modules/@vellumai/{ces-contracts → ces-client}/tsconfig.json +0 -0
- /package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/__tests__/grants.test.ts +0 -0
- /package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/error.ts +0 -0
- /package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/grants.ts +0 -0
- /package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/handles.ts +0 -0
- /package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/rendering.ts +0 -0
- /package/node_modules/@vellumai/{ces-contracts → service-contracts}/src/rpc.ts +0 -0
|
@@ -36,39 +36,34 @@ mock.module("../calls/call-domain.js", () => ({
|
|
|
36
36
|
},
|
|
37
37
|
}));
|
|
38
38
|
|
|
39
|
-
// Track Telegram deliveries via
|
|
39
|
+
// Track Telegram deliveries via mock of the direct send module
|
|
40
40
|
const telegramDeliverCalls: Array<{
|
|
41
41
|
chatId: string;
|
|
42
42
|
text: string;
|
|
43
43
|
assistantId?: string;
|
|
44
44
|
}> = [];
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
) => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (url.includes("/deliver/telegram") && init?.method === "POST") {
|
|
57
|
-
const body = JSON.parse(init.body as string) as {
|
|
58
|
-
chatId: string;
|
|
59
|
-
text: string;
|
|
60
|
-
assistantId?: string;
|
|
61
|
-
};
|
|
62
|
-
telegramDeliverCalls.push(body);
|
|
63
|
-
return new Response(JSON.stringify({ ok: true }), { status: 200 });
|
|
64
|
-
}
|
|
65
|
-
return originalFetch(input, init as never);
|
|
66
|
-
}) as unknown as typeof fetch;
|
|
45
|
+
mock.module("../messaging/providers/telegram-bot/send.js", () => ({
|
|
46
|
+
sendTelegramReply: async (chatId: string, text: string) => {
|
|
47
|
+
telegramDeliverCalls.push({ chatId, text });
|
|
48
|
+
},
|
|
49
|
+
sendTelegramAttachments: async () => ({
|
|
50
|
+
allFailed: false,
|
|
51
|
+
failureCount: 0,
|
|
52
|
+
totalCount: 0,
|
|
53
|
+
}),
|
|
54
|
+
sendTelegramTypingIndicator: async () => true,
|
|
55
|
+
}));
|
|
67
56
|
import { eq } from "drizzle-orm";
|
|
68
57
|
|
|
69
|
-
|
|
58
|
+
// Capture broadcastMessage calls so tests can inspect responses
|
|
59
|
+
const broadcastedMessages: unknown[] = [];
|
|
60
|
+
mock.module("../runtime/assistant-event-hub.js", () => ({
|
|
61
|
+
broadcastMessage: (msg: unknown) => {
|
|
62
|
+
broadcastedMessages.push(msg);
|
|
63
|
+
},
|
|
64
|
+
}));
|
|
65
|
+
|
|
70
66
|
import { handleChannelVerificationSession } from "../daemon/handlers/config-channels.js";
|
|
71
|
-
import type { HandlerContext } from "../daemon/handlers/shared.js";
|
|
72
67
|
import type {
|
|
73
68
|
ChannelVerificationSessionRequest,
|
|
74
69
|
ChannelVerificationSessionResponse,
|
|
@@ -86,7 +81,8 @@ import {
|
|
|
86
81
|
updateSessionDelivery as storeUpdateSessionDelivery,
|
|
87
82
|
updateSessionStatus as _storeUpdateSessionStatus,
|
|
88
83
|
} from "../memory/channel-verification-sessions.js";
|
|
89
|
-
import { getDb,
|
|
84
|
+
import { getDb, resetDb } from "../memory/db-connection.js";
|
|
85
|
+
import { initializeDb } from "../memory/db-init.js";
|
|
90
86
|
import { upsertBinding as upsertExternalBinding } from "../memory/external-conversation-store.js";
|
|
91
87
|
import {
|
|
92
88
|
createApprovalRequest,
|
|
@@ -125,11 +121,11 @@ import {
|
|
|
125
121
|
composeVerificationTelegram,
|
|
126
122
|
GUARDIAN_VERIFY_TEMPLATE_KEYS,
|
|
127
123
|
} from "../runtime/verification-templates.js";
|
|
124
|
+
import { createGuardianBinding } from "./helpers/create-guardian-binding.js";
|
|
128
125
|
|
|
129
126
|
initializeDb();
|
|
130
127
|
|
|
131
128
|
afterAll(() => {
|
|
132
|
-
globalThis.fetch = originalFetch;
|
|
133
129
|
resetDb();
|
|
134
130
|
});
|
|
135
131
|
|
|
@@ -402,7 +398,7 @@ describe("guardian service challenge validation", () => {
|
|
|
402
398
|
}
|
|
403
399
|
|
|
404
400
|
// validateAndConsumeVerification no longer creates bindings — that is
|
|
405
|
-
// now handled by the
|
|
401
|
+
// now handled by the gateway's verification intercepts.
|
|
406
402
|
const binding = getGuardianBinding("asst-1", "phone");
|
|
407
403
|
expect(binding).toBeNull();
|
|
408
404
|
});
|
|
@@ -1270,32 +1266,22 @@ describe("assistant-scoped approval request lookups", () => {
|
|
|
1270
1266
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
1271
1267
|
|
|
1272
1268
|
/**
|
|
1273
|
-
*
|
|
1269
|
+
* Returns a helper that reads the latest broadcastMessage call as a
|
|
1270
|
+
* ChannelVerificationSessionResponse. Resets the capture array first so
|
|
1271
|
+
* each test gets a clean slate.
|
|
1274
1272
|
*/
|
|
1275
|
-
function
|
|
1276
|
-
ctx: HandlerContext;
|
|
1273
|
+
function createResponseReader(): {
|
|
1277
1274
|
lastResponse: () => ChannelVerificationSessionResponse | null;
|
|
1278
1275
|
} {
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
setSuppressConfigReload: () => {},
|
|
1289
|
-
updateConfigFingerprint: () => {},
|
|
1290
|
-
send: (msg: unknown) => {
|
|
1291
|
-
captured = msg as ChannelVerificationSessionResponse;
|
|
1292
|
-
},
|
|
1293
|
-
broadcast: () => {},
|
|
1294
|
-
clearAllConversations: () => 0,
|
|
1295
|
-
getOrCreateConversation: () => Promise.resolve({} as never),
|
|
1296
|
-
touchConversation: () => {},
|
|
1297
|
-
} as unknown as HandlerContext;
|
|
1298
|
-
return { ctx, lastResponse: () => captured };
|
|
1276
|
+
broadcastedMessages.length = 0;
|
|
1277
|
+
return {
|
|
1278
|
+
lastResponse: () =>
|
|
1279
|
+
broadcastedMessages.length > 0
|
|
1280
|
+
? (broadcastedMessages[
|
|
1281
|
+
broadcastedMessages.length - 1
|
|
1282
|
+
] as ChannelVerificationSessionResponse)
|
|
1283
|
+
: null,
|
|
1284
|
+
};
|
|
1299
1285
|
}
|
|
1300
1286
|
|
|
1301
1287
|
describe("HTTP handler channel-aware guardian status", () => {
|
|
@@ -1304,14 +1290,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1304
1290
|
});
|
|
1305
1291
|
|
|
1306
1292
|
test("status action for telegram returns channel and assistantId fields", async () => {
|
|
1307
|
-
const {
|
|
1293
|
+
const { lastResponse } = createResponseReader();
|
|
1308
1294
|
const msg: ChannelVerificationSessionRequest = {
|
|
1309
1295
|
type: "channel_verification_session",
|
|
1310
1296
|
action: "status",
|
|
1311
1297
|
channel: "telegram",
|
|
1312
1298
|
};
|
|
1313
1299
|
|
|
1314
|
-
await handleChannelVerificationSession(msg
|
|
1300
|
+
await handleChannelVerificationSession(msg);
|
|
1315
1301
|
|
|
1316
1302
|
const resp = lastResponse();
|
|
1317
1303
|
expect(resp).not.toBeNull();
|
|
@@ -1323,14 +1309,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1323
1309
|
});
|
|
1324
1310
|
|
|
1325
1311
|
test("status action for voice returns channel: voice and assistantId: self", async () => {
|
|
1326
|
-
const {
|
|
1312
|
+
const { lastResponse } = createResponseReader();
|
|
1327
1313
|
const msg: ChannelVerificationSessionRequest = {
|
|
1328
1314
|
type: "channel_verification_session",
|
|
1329
1315
|
action: "status",
|
|
1330
1316
|
channel: "phone",
|
|
1331
1317
|
};
|
|
1332
1318
|
|
|
1333
|
-
await handleChannelVerificationSession(msg
|
|
1319
|
+
await handleChannelVerificationSession(msg);
|
|
1334
1320
|
|
|
1335
1321
|
const resp = lastResponse();
|
|
1336
1322
|
expect(resp).not.toBeNull();
|
|
@@ -1348,14 +1334,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1348
1334
|
guardianDeliveryChatId: "chat-42",
|
|
1349
1335
|
});
|
|
1350
1336
|
|
|
1351
|
-
const {
|
|
1337
|
+
const { lastResponse } = createResponseReader();
|
|
1352
1338
|
const msg: ChannelVerificationSessionRequest = {
|
|
1353
1339
|
type: "channel_verification_session",
|
|
1354
1340
|
action: "status",
|
|
1355
1341
|
channel: "telegram",
|
|
1356
1342
|
};
|
|
1357
1343
|
|
|
1358
|
-
await handleChannelVerificationSession(msg
|
|
1344
|
+
await handleChannelVerificationSession(msg);
|
|
1359
1345
|
|
|
1360
1346
|
const resp = lastResponse();
|
|
1361
1347
|
expect(resp).not.toBeNull();
|
|
@@ -1400,14 +1386,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1400
1386
|
displayName: "Guardian Name",
|
|
1401
1387
|
});
|
|
1402
1388
|
|
|
1403
|
-
const {
|
|
1389
|
+
const { lastResponse } = createResponseReader();
|
|
1404
1390
|
const msg: ChannelVerificationSessionRequest = {
|
|
1405
1391
|
type: "channel_verification_session",
|
|
1406
1392
|
action: "status",
|
|
1407
1393
|
channel: "telegram",
|
|
1408
1394
|
};
|
|
1409
1395
|
|
|
1410
|
-
await handleChannelVerificationSession(msg
|
|
1396
|
+
await handleChannelVerificationSession(msg);
|
|
1411
1397
|
|
|
1412
1398
|
const resp = lastResponse();
|
|
1413
1399
|
expect(resp).not.toBeNull();
|
|
@@ -1416,14 +1402,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1416
1402
|
});
|
|
1417
1403
|
|
|
1418
1404
|
test("status action defaults channel to telegram when omitted", async () => {
|
|
1419
|
-
const {
|
|
1405
|
+
const { lastResponse } = createResponseReader();
|
|
1420
1406
|
const msg: ChannelVerificationSessionRequest = {
|
|
1421
1407
|
type: "channel_verification_session",
|
|
1422
1408
|
action: "status",
|
|
1423
1409
|
// channel omitted — should default to 'telegram'
|
|
1424
1410
|
};
|
|
1425
1411
|
|
|
1426
|
-
await handleChannelVerificationSession(msg
|
|
1412
|
+
await handleChannelVerificationSession(msg);
|
|
1427
1413
|
|
|
1428
1414
|
const resp = lastResponse();
|
|
1429
1415
|
expect(resp).not.toBeNull();
|
|
@@ -1432,7 +1418,7 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1432
1418
|
});
|
|
1433
1419
|
|
|
1434
1420
|
test("status action defaults assistantId to self when omitted", async () => {
|
|
1435
|
-
const {
|
|
1421
|
+
const { lastResponse } = createResponseReader();
|
|
1436
1422
|
const msg: ChannelVerificationSessionRequest = {
|
|
1437
1423
|
type: "channel_verification_session",
|
|
1438
1424
|
action: "status",
|
|
@@ -1440,7 +1426,7 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1440
1426
|
// assistantId omitted — should default to 'self'
|
|
1441
1427
|
};
|
|
1442
1428
|
|
|
1443
|
-
await handleChannelVerificationSession(msg
|
|
1429
|
+
await handleChannelVerificationSession(msg);
|
|
1444
1430
|
|
|
1445
1431
|
const resp = lastResponse();
|
|
1446
1432
|
expect(resp).not.toBeNull();
|
|
@@ -1449,14 +1435,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1449
1435
|
});
|
|
1450
1436
|
|
|
1451
1437
|
test("status action for unbound voice does not return guardianDeliveryChatId", async () => {
|
|
1452
|
-
const {
|
|
1438
|
+
const { lastResponse } = createResponseReader();
|
|
1453
1439
|
const msg: ChannelVerificationSessionRequest = {
|
|
1454
1440
|
type: "channel_verification_session",
|
|
1455
1441
|
action: "status",
|
|
1456
1442
|
channel: "phone",
|
|
1457
1443
|
};
|
|
1458
1444
|
|
|
1459
|
-
await handleChannelVerificationSession(msg
|
|
1445
|
+
await handleChannelVerificationSession(msg);
|
|
1460
1446
|
|
|
1461
1447
|
const resp = lastResponse();
|
|
1462
1448
|
expect(resp).not.toBeNull();
|
|
@@ -1468,14 +1454,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1468
1454
|
test("status action includes hasPendingChallenge when challenge exists", async () => {
|
|
1469
1455
|
createInboundVerificationSession("phone");
|
|
1470
1456
|
|
|
1471
|
-
const {
|
|
1457
|
+
const { lastResponse } = createResponseReader();
|
|
1472
1458
|
const msg: ChannelVerificationSessionRequest = {
|
|
1473
1459
|
type: "channel_verification_session",
|
|
1474
1460
|
action: "status",
|
|
1475
1461
|
channel: "phone",
|
|
1476
1462
|
};
|
|
1477
1463
|
|
|
1478
|
-
await handleChannelVerificationSession(msg
|
|
1464
|
+
await handleChannelVerificationSession(msg);
|
|
1479
1465
|
|
|
1480
1466
|
const resp = lastResponse();
|
|
1481
1467
|
expect(resp).not.toBeNull();
|
|
@@ -1484,14 +1470,14 @@ describe("HTTP handler channel-aware guardian status", () => {
|
|
|
1484
1470
|
});
|
|
1485
1471
|
|
|
1486
1472
|
test("status action hasPendingChallenge is false when no challenge exists", async () => {
|
|
1487
|
-
const {
|
|
1473
|
+
const { lastResponse } = createResponseReader();
|
|
1488
1474
|
const msg: ChannelVerificationSessionRequest = {
|
|
1489
1475
|
type: "channel_verification_session",
|
|
1490
1476
|
action: "status",
|
|
1491
1477
|
channel: "phone",
|
|
1492
1478
|
};
|
|
1493
1479
|
|
|
1494
|
-
await handleChannelVerificationSession(msg
|
|
1480
|
+
await handleChannelVerificationSession(msg);
|
|
1495
1481
|
|
|
1496
1482
|
const resp = lastResponse();
|
|
1497
1483
|
expect(resp).not.toBeNull();
|
|
@@ -1933,14 +1919,14 @@ describe("HTTP handler voice guardian verification", () => {
|
|
|
1933
1919
|
});
|
|
1934
1920
|
|
|
1935
1921
|
test("create_challenge for voice returns a high-entropy hex secret", async () => {
|
|
1936
|
-
const {
|
|
1922
|
+
const { lastResponse } = createResponseReader();
|
|
1937
1923
|
const msg: ChannelVerificationSessionRequest = {
|
|
1938
1924
|
type: "channel_verification_session",
|
|
1939
1925
|
action: "create_session",
|
|
1940
1926
|
channel: "phone",
|
|
1941
1927
|
};
|
|
1942
1928
|
|
|
1943
|
-
await handleChannelVerificationSession(msg
|
|
1929
|
+
await handleChannelVerificationSession(msg);
|
|
1944
1930
|
|
|
1945
1931
|
const resp = lastResponse();
|
|
1946
1932
|
expect(resp).not.toBeNull();
|
|
@@ -1953,14 +1939,14 @@ describe("HTTP handler voice guardian verification", () => {
|
|
|
1953
1939
|
});
|
|
1954
1940
|
|
|
1955
1941
|
test("status for voice reflects unbound state", async () => {
|
|
1956
|
-
const {
|
|
1942
|
+
const { lastResponse } = createResponseReader();
|
|
1957
1943
|
const msg: ChannelVerificationSessionRequest = {
|
|
1958
1944
|
type: "channel_verification_session",
|
|
1959
1945
|
action: "status",
|
|
1960
1946
|
channel: "phone",
|
|
1961
1947
|
};
|
|
1962
1948
|
|
|
1963
|
-
await handleChannelVerificationSession(msg
|
|
1949
|
+
await handleChannelVerificationSession(msg);
|
|
1964
1950
|
|
|
1965
1951
|
const resp = lastResponse();
|
|
1966
1952
|
expect(resp).not.toBeNull();
|
|
@@ -1978,14 +1964,14 @@ describe("HTTP handler voice guardian verification", () => {
|
|
|
1978
1964
|
guardianDeliveryChatId: "voice-chat-1",
|
|
1979
1965
|
});
|
|
1980
1966
|
|
|
1981
|
-
const {
|
|
1967
|
+
const { lastResponse } = createResponseReader();
|
|
1982
1968
|
const msg: ChannelVerificationSessionRequest = {
|
|
1983
1969
|
type: "channel_verification_session",
|
|
1984
1970
|
action: "status",
|
|
1985
1971
|
channel: "phone",
|
|
1986
1972
|
};
|
|
1987
1973
|
|
|
1988
|
-
await handleChannelVerificationSession(msg
|
|
1974
|
+
await handleChannelVerificationSession(msg);
|
|
1989
1975
|
|
|
1990
1976
|
const resp = lastResponse();
|
|
1991
1977
|
expect(resp).not.toBeNull();
|
|
@@ -2004,14 +1990,14 @@ describe("HTTP handler voice guardian verification", () => {
|
|
|
2004
1990
|
guardianDeliveryChatId: "voice-chat-1",
|
|
2005
1991
|
});
|
|
2006
1992
|
|
|
2007
|
-
const {
|
|
1993
|
+
const { lastResponse } = createResponseReader();
|
|
2008
1994
|
const msg: ChannelVerificationSessionRequest = {
|
|
2009
1995
|
type: "channel_verification_session",
|
|
2010
1996
|
action: "revoke",
|
|
2011
1997
|
channel: "phone",
|
|
2012
1998
|
};
|
|
2013
1999
|
|
|
2014
|
-
await handleChannelVerificationSession(msg
|
|
2000
|
+
await handleChannelVerificationSession(msg);
|
|
2015
2001
|
|
|
2016
2002
|
const resp = lastResponse();
|
|
2017
2003
|
expect(resp).not.toBeNull();
|
|
@@ -2036,14 +2022,14 @@ describe("HTTP handler voice guardian verification", () => {
|
|
|
2036
2022
|
guardianDeliveryChatId: "tg-chat-1",
|
|
2037
2023
|
});
|
|
2038
2024
|
|
|
2039
|
-
|
|
2025
|
+
broadcastedMessages.length = 0;
|
|
2040
2026
|
const msg: ChannelVerificationSessionRequest = {
|
|
2041
2027
|
type: "channel_verification_session",
|
|
2042
2028
|
action: "revoke",
|
|
2043
2029
|
channel: "phone",
|
|
2044
2030
|
};
|
|
2045
2031
|
|
|
2046
|
-
await handleChannelVerificationSession(msg
|
|
2032
|
+
await handleChannelVerificationSession(msg);
|
|
2047
2033
|
|
|
2048
2034
|
expect(getGuardianBinding("self", "phone")).toBeNull();
|
|
2049
2035
|
expect(getGuardianBinding("self", "telegram")).not.toBeNull();
|
|
@@ -2519,7 +2505,7 @@ describe("outbound voice verification", () => {
|
|
|
2519
2505
|
});
|
|
2520
2506
|
|
|
2521
2507
|
test("start_outbound creates session with expected E.164 identity and returns code", async () => {
|
|
2522
|
-
const {
|
|
2508
|
+
const { lastResponse } = createResponseReader();
|
|
2523
2509
|
const msg: ChannelVerificationSessionRequest = {
|
|
2524
2510
|
type: "channel_verification_session",
|
|
2525
2511
|
action: "create_session",
|
|
@@ -2527,7 +2513,7 @@ describe("outbound voice verification", () => {
|
|
|
2527
2513
|
destination: "+15551234567",
|
|
2528
2514
|
};
|
|
2529
2515
|
|
|
2530
|
-
await handleChannelVerificationSession(msg
|
|
2516
|
+
await handleChannelVerificationSession(msg);
|
|
2531
2517
|
|
|
2532
2518
|
const resp = lastResponse();
|
|
2533
2519
|
expect(resp).not.toBeNull();
|
|
@@ -2555,7 +2541,7 @@ describe("outbound voice verification", () => {
|
|
|
2555
2541
|
guardianDeliveryChatId: "voice-chat-1",
|
|
2556
2542
|
});
|
|
2557
2543
|
|
|
2558
|
-
const {
|
|
2544
|
+
const { lastResponse } = createResponseReader();
|
|
2559
2545
|
const msg: ChannelVerificationSessionRequest = {
|
|
2560
2546
|
type: "channel_verification_session",
|
|
2561
2547
|
action: "create_session",
|
|
@@ -2564,7 +2550,7 @@ describe("outbound voice verification", () => {
|
|
|
2564
2550
|
rebind: false,
|
|
2565
2551
|
};
|
|
2566
2552
|
|
|
2567
|
-
await handleChannelVerificationSession(msg
|
|
2553
|
+
await handleChannelVerificationSession(msg);
|
|
2568
2554
|
|
|
2569
2555
|
const resp = lastResponse();
|
|
2570
2556
|
expect(resp).not.toBeNull();
|
|
@@ -2581,7 +2567,7 @@ describe("outbound voice verification", () => {
|
|
|
2581
2567
|
guardianDeliveryChatId: "voice-chat-1",
|
|
2582
2568
|
});
|
|
2583
2569
|
|
|
2584
|
-
const {
|
|
2570
|
+
const { lastResponse } = createResponseReader();
|
|
2585
2571
|
const msg: ChannelVerificationSessionRequest = {
|
|
2586
2572
|
type: "channel_verification_session",
|
|
2587
2573
|
action: "create_session",
|
|
@@ -2590,7 +2576,7 @@ describe("outbound voice verification", () => {
|
|
|
2590
2576
|
rebind: true,
|
|
2591
2577
|
};
|
|
2592
2578
|
|
|
2593
|
-
await handleChannelVerificationSession(msg
|
|
2579
|
+
await handleChannelVerificationSession(msg);
|
|
2594
2580
|
|
|
2595
2581
|
const resp = lastResponse();
|
|
2596
2582
|
expect(resp).not.toBeNull();
|
|
@@ -2600,7 +2586,7 @@ describe("outbound voice verification", () => {
|
|
|
2600
2586
|
|
|
2601
2587
|
test("resend_outbound before cooldown is rejected", async () => {
|
|
2602
2588
|
// Start an outbound session first
|
|
2603
|
-
|
|
2589
|
+
broadcastedMessages.length = 0;
|
|
2604
2590
|
await handleChannelVerificationSession(
|
|
2605
2591
|
{
|
|
2606
2592
|
type: "channel_verification_session",
|
|
@@ -2608,18 +2594,16 @@ describe("outbound voice verification", () => {
|
|
|
2608
2594
|
channel: "phone",
|
|
2609
2595
|
destination: "+15551234567",
|
|
2610
2596
|
},
|
|
2611
|
-
startCtx,
|
|
2612
2597
|
);
|
|
2613
2598
|
|
|
2614
2599
|
// Immediately try to resend (before cooldown)
|
|
2615
|
-
const {
|
|
2600
|
+
const { lastResponse } = createResponseReader();
|
|
2616
2601
|
await handleChannelVerificationSession(
|
|
2617
2602
|
{
|
|
2618
2603
|
type: "channel_verification_session",
|
|
2619
2604
|
action: "resend_session",
|
|
2620
2605
|
channel: "phone",
|
|
2621
2606
|
},
|
|
2622
|
-
ctx,
|
|
2623
2607
|
);
|
|
2624
2608
|
|
|
2625
2609
|
const resp = lastResponse();
|
|
@@ -2630,7 +2614,7 @@ describe("outbound voice verification", () => {
|
|
|
2630
2614
|
|
|
2631
2615
|
test("resend_outbound after cooldown succeeds and increments sendCount", async () => {
|
|
2632
2616
|
// Start an outbound session
|
|
2633
|
-
const {
|
|
2617
|
+
const { lastResponse: startResp } = createResponseReader();
|
|
2634
2618
|
await handleChannelVerificationSession(
|
|
2635
2619
|
{
|
|
2636
2620
|
type: "channel_verification_session",
|
|
@@ -2638,7 +2622,6 @@ describe("outbound voice verification", () => {
|
|
|
2638
2622
|
channel: "phone",
|
|
2639
2623
|
destination: "+15551234567",
|
|
2640
2624
|
},
|
|
2641
|
-
startCtx,
|
|
2642
2625
|
);
|
|
2643
2626
|
|
|
2644
2627
|
const startResponse = startResp();
|
|
@@ -2655,14 +2638,13 @@ describe("outbound voice verification", () => {
|
|
|
2655
2638
|
);
|
|
2656
2639
|
|
|
2657
2640
|
// Now resend should succeed
|
|
2658
|
-
const {
|
|
2641
|
+
const { lastResponse } = createResponseReader();
|
|
2659
2642
|
await handleChannelVerificationSession(
|
|
2660
2643
|
{
|
|
2661
2644
|
type: "channel_verification_session",
|
|
2662
2645
|
action: "resend_session",
|
|
2663
2646
|
channel: "phone",
|
|
2664
2647
|
},
|
|
2665
|
-
ctx,
|
|
2666
2648
|
);
|
|
2667
2649
|
|
|
2668
2650
|
const resp = lastResponse();
|
|
@@ -2674,7 +2656,7 @@ describe("outbound voice verification", () => {
|
|
|
2674
2656
|
|
|
2675
2657
|
test("resend_outbound exceeding max sends is rejected", async () => {
|
|
2676
2658
|
// Start an outbound session
|
|
2677
|
-
|
|
2659
|
+
broadcastedMessages.length = 0;
|
|
2678
2660
|
await handleChannelVerificationSession(
|
|
2679
2661
|
{
|
|
2680
2662
|
type: "channel_verification_session",
|
|
@@ -2682,7 +2664,6 @@ describe("outbound voice verification", () => {
|
|
|
2682
2664
|
channel: "phone",
|
|
2683
2665
|
destination: "+15551234567",
|
|
2684
2666
|
},
|
|
2685
|
-
startCtx,
|
|
2686
2667
|
);
|
|
2687
2668
|
|
|
2688
2669
|
// Set the send count to MAX_SENDS_PER_SESSION and nextResendAt to the past
|
|
@@ -2696,14 +2677,13 @@ describe("outbound voice verification", () => {
|
|
|
2696
2677
|
);
|
|
2697
2678
|
|
|
2698
2679
|
// Resend should be rejected due to max sends
|
|
2699
|
-
const {
|
|
2680
|
+
const { lastResponse } = createResponseReader();
|
|
2700
2681
|
await handleChannelVerificationSession(
|
|
2701
2682
|
{
|
|
2702
2683
|
type: "channel_verification_session",
|
|
2703
2684
|
action: "resend_session",
|
|
2704
2685
|
channel: "phone",
|
|
2705
2686
|
},
|
|
2706
|
-
ctx,
|
|
2707
2687
|
);
|
|
2708
2688
|
|
|
2709
2689
|
const resp = lastResponse();
|
|
@@ -2714,7 +2694,7 @@ describe("outbound voice verification", () => {
|
|
|
2714
2694
|
|
|
2715
2695
|
test("cancel_outbound revokes active session", async () => {
|
|
2716
2696
|
// Start an outbound session
|
|
2717
|
-
|
|
2697
|
+
broadcastedMessages.length = 0;
|
|
2718
2698
|
await handleChannelVerificationSession(
|
|
2719
2699
|
{
|
|
2720
2700
|
type: "channel_verification_session",
|
|
@@ -2722,7 +2702,6 @@ describe("outbound voice verification", () => {
|
|
|
2722
2702
|
channel: "phone",
|
|
2723
2703
|
destination: "+15551234567",
|
|
2724
2704
|
},
|
|
2725
|
-
startCtx,
|
|
2726
2705
|
);
|
|
2727
2706
|
|
|
2728
2707
|
// Verify session exists
|
|
@@ -2730,14 +2709,13 @@ describe("outbound voice verification", () => {
|
|
|
2730
2709
|
expect(sessionBefore).not.toBeNull();
|
|
2731
2710
|
|
|
2732
2711
|
// Cancel it
|
|
2733
|
-
const {
|
|
2712
|
+
const { lastResponse } = createResponseReader();
|
|
2734
2713
|
await handleChannelVerificationSession(
|
|
2735
2714
|
{
|
|
2736
2715
|
type: "channel_verification_session",
|
|
2737
2716
|
action: "cancel_session",
|
|
2738
2717
|
channel: "phone",
|
|
2739
2718
|
},
|
|
2740
|
-
ctx,
|
|
2741
2719
|
);
|
|
2742
2720
|
|
|
2743
2721
|
const resp = lastResponse();
|
|
@@ -2800,7 +2778,7 @@ describe("outbound voice verification", () => {
|
|
|
2800
2778
|
});
|
|
2801
2779
|
|
|
2802
2780
|
test("start_outbound rejects unsupported channels", async () => {
|
|
2803
|
-
const {
|
|
2781
|
+
const { lastResponse } = createResponseReader();
|
|
2804
2782
|
await handleChannelVerificationSession(
|
|
2805
2783
|
{
|
|
2806
2784
|
type: "channel_verification_session",
|
|
@@ -2808,7 +2786,6 @@ describe("outbound voice verification", () => {
|
|
|
2808
2786
|
channel: "email",
|
|
2809
2787
|
destination: "user@example.com",
|
|
2810
2788
|
},
|
|
2811
|
-
ctx,
|
|
2812
2789
|
);
|
|
2813
2790
|
|
|
2814
2791
|
const resp = lastResponse();
|
|
@@ -2818,7 +2795,7 @@ describe("outbound voice verification", () => {
|
|
|
2818
2795
|
});
|
|
2819
2796
|
|
|
2820
2797
|
test("create_session without destination falls through to inbound challenge", async () => {
|
|
2821
|
-
const {
|
|
2798
|
+
const { lastResponse } = createResponseReader();
|
|
2822
2799
|
await handleChannelVerificationSession(
|
|
2823
2800
|
{
|
|
2824
2801
|
type: "channel_verification_session",
|
|
@@ -2826,7 +2803,6 @@ describe("outbound voice verification", () => {
|
|
|
2826
2803
|
channel: "phone",
|
|
2827
2804
|
// no destination — unified create_session creates an inbound challenge
|
|
2828
2805
|
},
|
|
2829
|
-
ctx,
|
|
2830
2806
|
);
|
|
2831
2807
|
|
|
2832
2808
|
const resp = lastResponse();
|
|
@@ -2836,7 +2812,7 @@ describe("outbound voice verification", () => {
|
|
|
2836
2812
|
});
|
|
2837
2813
|
|
|
2838
2814
|
test("start_outbound rejects unparseable phone number", async () => {
|
|
2839
|
-
const {
|
|
2815
|
+
const { lastResponse } = createResponseReader();
|
|
2840
2816
|
await handleChannelVerificationSession(
|
|
2841
2817
|
{
|
|
2842
2818
|
type: "channel_verification_session",
|
|
@@ -2844,7 +2820,6 @@ describe("outbound voice verification", () => {
|
|
|
2844
2820
|
channel: "phone",
|
|
2845
2821
|
destination: "not-a-phone",
|
|
2846
2822
|
},
|
|
2847
|
-
ctx,
|
|
2848
2823
|
);
|
|
2849
2824
|
|
|
2850
2825
|
const resp = lastResponse();
|
|
@@ -2854,7 +2829,7 @@ describe("outbound voice verification", () => {
|
|
|
2854
2829
|
});
|
|
2855
2830
|
|
|
2856
2831
|
test("start_outbound normalizes formatted phone number for voice", async () => {
|
|
2857
|
-
const {
|
|
2832
|
+
const { lastResponse } = createResponseReader();
|
|
2858
2833
|
await handleChannelVerificationSession(
|
|
2859
2834
|
{
|
|
2860
2835
|
type: "channel_verification_session",
|
|
@@ -2862,7 +2837,6 @@ describe("outbound voice verification", () => {
|
|
|
2862
2837
|
channel: "phone",
|
|
2863
2838
|
destination: "(555) 123-4567",
|
|
2864
2839
|
},
|
|
2865
|
-
ctx,
|
|
2866
2840
|
);
|
|
2867
2841
|
|
|
2868
2842
|
const resp = lastResponse();
|
|
@@ -2887,14 +2861,13 @@ describe("outbound voice verification", () => {
|
|
|
2887
2861
|
});
|
|
2888
2862
|
|
|
2889
2863
|
test("cancel_session succeeds even when no active session (idempotent)", async () => {
|
|
2890
|
-
const {
|
|
2864
|
+
const { lastResponse } = createResponseReader();
|
|
2891
2865
|
await handleChannelVerificationSession(
|
|
2892
2866
|
{
|
|
2893
2867
|
type: "channel_verification_session",
|
|
2894
2868
|
action: "cancel_session",
|
|
2895
2869
|
channel: "phone",
|
|
2896
2870
|
},
|
|
2897
|
-
ctx,
|
|
2898
2871
|
);
|
|
2899
2872
|
|
|
2900
2873
|
const resp = lastResponse();
|
|
@@ -2913,7 +2886,7 @@ describe("outbound Telegram verification", () => {
|
|
|
2913
2886
|
});
|
|
2914
2887
|
|
|
2915
2888
|
test("start_outbound for telegram with handle returns deep link URL, no outbound message", async () => {
|
|
2916
|
-
const {
|
|
2889
|
+
const { lastResponse } = createResponseReader();
|
|
2917
2890
|
await handleChannelVerificationSession(
|
|
2918
2891
|
{
|
|
2919
2892
|
type: "channel_verification_session",
|
|
@@ -2921,7 +2894,6 @@ describe("outbound Telegram verification", () => {
|
|
|
2921
2894
|
channel: "telegram",
|
|
2922
2895
|
destination: "@someuser",
|
|
2923
2896
|
},
|
|
2924
|
-
ctx,
|
|
2925
2897
|
);
|
|
2926
2898
|
|
|
2927
2899
|
const resp = lastResponse();
|
|
@@ -2947,7 +2919,7 @@ describe("outbound Telegram verification", () => {
|
|
|
2947
2919
|
});
|
|
2948
2920
|
|
|
2949
2921
|
test("start_outbound for telegram with handle (no @ prefix) returns deep link", async () => {
|
|
2950
|
-
const {
|
|
2922
|
+
const { lastResponse } = createResponseReader();
|
|
2951
2923
|
await handleChannelVerificationSession(
|
|
2952
2924
|
{
|
|
2953
2925
|
type: "channel_verification_session",
|
|
@@ -2955,7 +2927,6 @@ describe("outbound Telegram verification", () => {
|
|
|
2955
2927
|
channel: "telegram",
|
|
2956
2928
|
destination: "someuser",
|
|
2957
2929
|
},
|
|
2958
|
-
ctx,
|
|
2959
2930
|
);
|
|
2960
2931
|
|
|
2961
2932
|
const resp = lastResponse();
|
|
@@ -2968,7 +2939,7 @@ describe("outbound Telegram verification", () => {
|
|
|
2968
2939
|
});
|
|
2969
2940
|
|
|
2970
2941
|
test("start_outbound for telegram with known chat ID sends message, no deep link", async () => {
|
|
2971
|
-
const {
|
|
2942
|
+
const { lastResponse } = createResponseReader();
|
|
2972
2943
|
await handleChannelVerificationSession(
|
|
2973
2944
|
{
|
|
2974
2945
|
type: "channel_verification_session",
|
|
@@ -2976,7 +2947,6 @@ describe("outbound Telegram verification", () => {
|
|
|
2976
2947
|
channel: "telegram",
|
|
2977
2948
|
destination: "123456789",
|
|
2978
2949
|
},
|
|
2979
|
-
ctx,
|
|
2980
2950
|
);
|
|
2981
2951
|
|
|
2982
2952
|
const resp = lastResponse();
|
|
@@ -3008,7 +2978,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3008
2978
|
test("start_outbound for telegram without bot username fails", async () => {
|
|
3009
2979
|
mockBotUsername = undefined;
|
|
3010
2980
|
|
|
3011
|
-
const {
|
|
2981
|
+
const { lastResponse } = createResponseReader();
|
|
3012
2982
|
await handleChannelVerificationSession(
|
|
3013
2983
|
{
|
|
3014
2984
|
type: "channel_verification_session",
|
|
@@ -3016,7 +2986,6 @@ describe("outbound Telegram verification", () => {
|
|
|
3016
2986
|
channel: "telegram",
|
|
3017
2987
|
destination: "@someuser",
|
|
3018
2988
|
},
|
|
3019
|
-
ctx,
|
|
3020
2989
|
);
|
|
3021
2990
|
|
|
3022
2991
|
const resp = lastResponse();
|
|
@@ -3033,7 +3002,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3033
3002
|
guardianDeliveryChatId: "chat-42",
|
|
3034
3003
|
});
|
|
3035
3004
|
|
|
3036
|
-
const {
|
|
3005
|
+
const { lastResponse } = createResponseReader();
|
|
3037
3006
|
await handleChannelVerificationSession(
|
|
3038
3007
|
{
|
|
3039
3008
|
type: "channel_verification_session",
|
|
@@ -3042,7 +3011,6 @@ describe("outbound Telegram verification", () => {
|
|
|
3042
3011
|
destination: "@newuser",
|
|
3043
3012
|
rebind: false,
|
|
3044
3013
|
},
|
|
3045
|
-
ctx,
|
|
3046
3014
|
);
|
|
3047
3015
|
|
|
3048
3016
|
const resp = lastResponse();
|
|
@@ -3196,7 +3164,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3196
3164
|
|
|
3197
3165
|
test("resend_outbound for telegram works with known chat ID", async () => {
|
|
3198
3166
|
// Start an outbound session with a known chat ID
|
|
3199
|
-
|
|
3167
|
+
broadcastedMessages.length = 0;
|
|
3200
3168
|
await handleChannelVerificationSession(
|
|
3201
3169
|
{
|
|
3202
3170
|
type: "channel_verification_session",
|
|
@@ -3204,7 +3172,6 @@ describe("outbound Telegram verification", () => {
|
|
|
3204
3172
|
channel: "telegram",
|
|
3205
3173
|
destination: "123456789",
|
|
3206
3174
|
},
|
|
3207
|
-
startCtx,
|
|
3208
3175
|
);
|
|
3209
3176
|
|
|
3210
3177
|
// Fast-forward the cooldown
|
|
@@ -3217,14 +3184,13 @@ describe("outbound Telegram verification", () => {
|
|
|
3217
3184
|
Date.now() - 1000,
|
|
3218
3185
|
);
|
|
3219
3186
|
|
|
3220
|
-
const {
|
|
3187
|
+
const { lastResponse } = createResponseReader();
|
|
3221
3188
|
await handleChannelVerificationSession(
|
|
3222
3189
|
{
|
|
3223
3190
|
type: "channel_verification_session",
|
|
3224
3191
|
action: "resend_session",
|
|
3225
3192
|
channel: "telegram",
|
|
3226
3193
|
},
|
|
3227
|
-
ctx,
|
|
3228
3194
|
);
|
|
3229
3195
|
|
|
3230
3196
|
const resp = lastResponse();
|
|
@@ -3240,7 +3206,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3240
3206
|
|
|
3241
3207
|
test("resend_outbound for pending_bootstrap session is rejected", async () => {
|
|
3242
3208
|
// Start an outbound session with a handle (pending_bootstrap)
|
|
3243
|
-
|
|
3209
|
+
broadcastedMessages.length = 0;
|
|
3244
3210
|
await handleChannelVerificationSession(
|
|
3245
3211
|
{
|
|
3246
3212
|
type: "channel_verification_session",
|
|
@@ -3248,17 +3214,15 @@ describe("outbound Telegram verification", () => {
|
|
|
3248
3214
|
channel: "telegram",
|
|
3249
3215
|
destination: "@someuser",
|
|
3250
3216
|
},
|
|
3251
|
-
startCtx,
|
|
3252
3217
|
);
|
|
3253
3218
|
|
|
3254
|
-
const {
|
|
3219
|
+
const { lastResponse } = createResponseReader();
|
|
3255
3220
|
await handleChannelVerificationSession(
|
|
3256
3221
|
{
|
|
3257
3222
|
type: "channel_verification_session",
|
|
3258
3223
|
action: "resend_session",
|
|
3259
3224
|
channel: "telegram",
|
|
3260
3225
|
},
|
|
3261
|
-
ctx,
|
|
3262
3226
|
);
|
|
3263
3227
|
|
|
3264
3228
|
const resp = lastResponse();
|
|
@@ -3269,7 +3233,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3269
3233
|
|
|
3270
3234
|
test("cancel_outbound for telegram revokes session", async () => {
|
|
3271
3235
|
// Start an outbound session
|
|
3272
|
-
|
|
3236
|
+
broadcastedMessages.length = 0;
|
|
3273
3237
|
await handleChannelVerificationSession(
|
|
3274
3238
|
{
|
|
3275
3239
|
type: "channel_verification_session",
|
|
@@ -3277,20 +3241,18 @@ describe("outbound Telegram verification", () => {
|
|
|
3277
3241
|
channel: "telegram",
|
|
3278
3242
|
destination: "123456789",
|
|
3279
3243
|
},
|
|
3280
|
-
startCtx,
|
|
3281
3244
|
);
|
|
3282
3245
|
|
|
3283
3246
|
const session = serviceFindActiveSession("telegram");
|
|
3284
3247
|
expect(session).not.toBeNull();
|
|
3285
3248
|
|
|
3286
|
-
const {
|
|
3249
|
+
const { lastResponse } = createResponseReader();
|
|
3287
3250
|
await handleChannelVerificationSession(
|
|
3288
3251
|
{
|
|
3289
3252
|
type: "channel_verification_session",
|
|
3290
3253
|
action: "cancel_session",
|
|
3291
3254
|
channel: "telegram",
|
|
3292
3255
|
},
|
|
3293
|
-
ctx,
|
|
3294
3256
|
);
|
|
3295
3257
|
|
|
3296
3258
|
const resp = lastResponse();
|
|
@@ -3331,14 +3293,13 @@ describe("outbound Telegram verification", () => {
|
|
|
3331
3293
|
});
|
|
3332
3294
|
|
|
3333
3295
|
test("create_session for telegram without destination falls through to inbound challenge", async () => {
|
|
3334
|
-
const {
|
|
3296
|
+
const { lastResponse } = createResponseReader();
|
|
3335
3297
|
await handleChannelVerificationSession(
|
|
3336
3298
|
{
|
|
3337
3299
|
type: "channel_verification_session",
|
|
3338
3300
|
action: "create_session",
|
|
3339
3301
|
channel: "telegram",
|
|
3340
3302
|
},
|
|
3341
|
-
ctx,
|
|
3342
3303
|
);
|
|
3343
3304
|
|
|
3344
3305
|
const resp = lastResponse();
|
|
@@ -3349,7 +3310,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3349
3310
|
|
|
3350
3311
|
test("rate limits apply to telegram outbound (per-session send cap)", async () => {
|
|
3351
3312
|
// Start an outbound session with a known chat ID
|
|
3352
|
-
|
|
3313
|
+
broadcastedMessages.length = 0;
|
|
3353
3314
|
await handleChannelVerificationSession(
|
|
3354
3315
|
{
|
|
3355
3316
|
type: "channel_verification_session",
|
|
@@ -3357,7 +3318,6 @@ describe("outbound Telegram verification", () => {
|
|
|
3357
3318
|
channel: "telegram",
|
|
3358
3319
|
destination: "123456789",
|
|
3359
3320
|
},
|
|
3360
|
-
startCtx,
|
|
3361
3321
|
);
|
|
3362
3322
|
|
|
3363
3323
|
// Set the send count to MAX_SENDS_PER_SESSION and nextResendAt to the past
|
|
@@ -3371,14 +3331,13 @@ describe("outbound Telegram verification", () => {
|
|
|
3371
3331
|
);
|
|
3372
3332
|
|
|
3373
3333
|
// Resend should be rejected due to max sends
|
|
3374
|
-
const {
|
|
3334
|
+
const { lastResponse } = createResponseReader();
|
|
3375
3335
|
await handleChannelVerificationSession(
|
|
3376
3336
|
{
|
|
3377
3337
|
type: "channel_verification_session",
|
|
3378
3338
|
action: "resend_session",
|
|
3379
3339
|
channel: "telegram",
|
|
3380
3340
|
},
|
|
3381
|
-
ctx,
|
|
3382
3341
|
);
|
|
3383
3342
|
|
|
3384
3343
|
const resp = lastResponse();
|
|
@@ -3389,7 +3348,7 @@ describe("outbound Telegram verification", () => {
|
|
|
3389
3348
|
|
|
3390
3349
|
test("rate limits apply to telegram outbound (cooldown)", async () => {
|
|
3391
3350
|
// Start an outbound session with a known chat ID
|
|
3392
|
-
|
|
3351
|
+
broadcastedMessages.length = 0;
|
|
3393
3352
|
await handleChannelVerificationSession(
|
|
3394
3353
|
{
|
|
3395
3354
|
type: "channel_verification_session",
|
|
@@ -3397,18 +3356,16 @@ describe("outbound Telegram verification", () => {
|
|
|
3397
3356
|
channel: "telegram",
|
|
3398
3357
|
destination: "123456789",
|
|
3399
3358
|
},
|
|
3400
|
-
startCtx,
|
|
3401
3359
|
);
|
|
3402
3360
|
|
|
3403
3361
|
// Immediately try to resend (before cooldown)
|
|
3404
|
-
const {
|
|
3362
|
+
const { lastResponse } = createResponseReader();
|
|
3405
3363
|
await handleChannelVerificationSession(
|
|
3406
3364
|
{
|
|
3407
3365
|
type: "channel_verification_session",
|
|
3408
3366
|
action: "resend_session",
|
|
3409
3367
|
channel: "telegram",
|
|
3410
3368
|
},
|
|
3411
|
-
ctx,
|
|
3412
3369
|
);
|
|
3413
3370
|
|
|
3414
3371
|
const resp = lastResponse();
|
|
@@ -3428,7 +3385,7 @@ describe("outbound voice verification", () => {
|
|
|
3428
3385
|
});
|
|
3429
3386
|
|
|
3430
3387
|
test("start_outbound for voice creates session with 6-digit code and initiates call", async () => {
|
|
3431
|
-
const {
|
|
3388
|
+
const { lastResponse } = createResponseReader();
|
|
3432
3389
|
await handleChannelVerificationSession(
|
|
3433
3390
|
{
|
|
3434
3391
|
type: "channel_verification_session",
|
|
@@ -3436,7 +3393,6 @@ describe("outbound voice verification", () => {
|
|
|
3436
3393
|
channel: "phone",
|
|
3437
3394
|
destination: "+15551234567",
|
|
3438
3395
|
},
|
|
3439
|
-
ctx,
|
|
3440
3396
|
);
|
|
3441
3397
|
|
|
3442
3398
|
const resp = lastResponse();
|
|
@@ -3469,7 +3425,7 @@ describe("outbound voice verification", () => {
|
|
|
3469
3425
|
});
|
|
3470
3426
|
|
|
3471
3427
|
test("start_outbound for voice rejects unparseable phone number", async () => {
|
|
3472
|
-
const {
|
|
3428
|
+
const { lastResponse } = createResponseReader();
|
|
3473
3429
|
await handleChannelVerificationSession(
|
|
3474
3430
|
{
|
|
3475
3431
|
type: "channel_verification_session",
|
|
@@ -3477,7 +3433,6 @@ describe("outbound voice verification", () => {
|
|
|
3477
3433
|
channel: "phone",
|
|
3478
3434
|
destination: "not-a-phone",
|
|
3479
3435
|
},
|
|
3480
|
-
ctx,
|
|
3481
3436
|
);
|
|
3482
3437
|
|
|
3483
3438
|
const resp = lastResponse();
|
|
@@ -3487,7 +3442,7 @@ describe("outbound voice verification", () => {
|
|
|
3487
3442
|
});
|
|
3488
3443
|
|
|
3489
3444
|
test("start_outbound for voice normalizes formatted phone number", async () => {
|
|
3490
|
-
const {
|
|
3445
|
+
const { lastResponse } = createResponseReader();
|
|
3491
3446
|
await handleChannelVerificationSession(
|
|
3492
3447
|
{
|
|
3493
3448
|
type: "channel_verification_session",
|
|
@@ -3495,7 +3450,6 @@ describe("outbound voice verification", () => {
|
|
|
3495
3450
|
channel: "phone",
|
|
3496
3451
|
destination: "555-123-4567",
|
|
3497
3452
|
},
|
|
3498
|
-
ctx,
|
|
3499
3453
|
);
|
|
3500
3454
|
|
|
3501
3455
|
const resp = lastResponse();
|
|
@@ -3529,7 +3483,7 @@ describe("outbound voice verification", () => {
|
|
|
3529
3483
|
guardianDeliveryChatId: "+15551234567",
|
|
3530
3484
|
});
|
|
3531
3485
|
|
|
3532
|
-
const {
|
|
3486
|
+
const { lastResponse } = createResponseReader();
|
|
3533
3487
|
await handleChannelVerificationSession(
|
|
3534
3488
|
{
|
|
3535
3489
|
type: "channel_verification_session",
|
|
@@ -3538,7 +3492,6 @@ describe("outbound voice verification", () => {
|
|
|
3538
3492
|
destination: "+15559876543",
|
|
3539
3493
|
rebind: false,
|
|
3540
3494
|
},
|
|
3541
|
-
ctx,
|
|
3542
3495
|
);
|
|
3543
3496
|
|
|
3544
3497
|
const resp = lastResponse();
|
|
@@ -3549,7 +3502,7 @@ describe("outbound voice verification", () => {
|
|
|
3549
3502
|
|
|
3550
3503
|
test("resend_outbound for voice initiates a new call with cooldown check", async () => {
|
|
3551
3504
|
// Start an outbound session first
|
|
3552
|
-
|
|
3505
|
+
broadcastedMessages.length = 0;
|
|
3553
3506
|
await handleChannelVerificationSession(
|
|
3554
3507
|
{
|
|
3555
3508
|
type: "channel_verification_session",
|
|
@@ -3557,18 +3510,16 @@ describe("outbound voice verification", () => {
|
|
|
3557
3510
|
channel: "phone",
|
|
3558
3511
|
destination: "+15551234567",
|
|
3559
3512
|
},
|
|
3560
|
-
startCtx,
|
|
3561
3513
|
);
|
|
3562
3514
|
|
|
3563
3515
|
// Immediately try to resend (before cooldown)
|
|
3564
|
-
const {
|
|
3516
|
+
const { lastResponse } = createResponseReader();
|
|
3565
3517
|
await handleChannelVerificationSession(
|
|
3566
3518
|
{
|
|
3567
3519
|
type: "channel_verification_session",
|
|
3568
3520
|
action: "resend_session",
|
|
3569
3521
|
channel: "phone",
|
|
3570
3522
|
},
|
|
3571
|
-
ctx,
|
|
3572
3523
|
);
|
|
3573
3524
|
|
|
3574
3525
|
const resp = lastResponse();
|
|
@@ -3579,7 +3530,7 @@ describe("outbound voice verification", () => {
|
|
|
3579
3530
|
|
|
3580
3531
|
test("cancel_outbound for voice cancels session", async () => {
|
|
3581
3532
|
// Start an outbound session first
|
|
3582
|
-
|
|
3533
|
+
broadcastedMessages.length = 0;
|
|
3583
3534
|
await handleChannelVerificationSession(
|
|
3584
3535
|
{
|
|
3585
3536
|
type: "channel_verification_session",
|
|
@@ -3587,18 +3538,16 @@ describe("outbound voice verification", () => {
|
|
|
3587
3538
|
channel: "phone",
|
|
3588
3539
|
destination: "+15551234567",
|
|
3589
3540
|
},
|
|
3590
|
-
startCtx,
|
|
3591
3541
|
);
|
|
3592
3542
|
|
|
3593
3543
|
// Cancel the session
|
|
3594
|
-
const {
|
|
3544
|
+
const { lastResponse } = createResponseReader();
|
|
3595
3545
|
await handleChannelVerificationSession(
|
|
3596
3546
|
{
|
|
3597
3547
|
type: "channel_verification_session",
|
|
3598
3548
|
action: "cancel_session",
|
|
3599
3549
|
channel: "phone",
|
|
3600
3550
|
},
|
|
3601
|
-
ctx,
|
|
3602
3551
|
);
|
|
3603
3552
|
|
|
3604
3553
|
const resp = lastResponse();
|
|
@@ -3632,7 +3581,7 @@ describe("outbound voice verification", () => {
|
|
|
3632
3581
|
.run();
|
|
3633
3582
|
}
|
|
3634
3583
|
|
|
3635
|
-
const {
|
|
3584
|
+
const { lastResponse } = createResponseReader();
|
|
3636
3585
|
await handleChannelVerificationSession(
|
|
3637
3586
|
{
|
|
3638
3587
|
type: "channel_verification_session",
|
|
@@ -3640,7 +3589,6 @@ describe("outbound voice verification", () => {
|
|
|
3640
3589
|
channel: "phone",
|
|
3641
3590
|
destination: "+15551234567",
|
|
3642
3591
|
},
|
|
3643
|
-
ctx,
|
|
3644
3592
|
);
|
|
3645
3593
|
|
|
3646
3594
|
const resp = lastResponse();
|
|
@@ -3650,14 +3598,13 @@ describe("outbound voice verification", () => {
|
|
|
3650
3598
|
});
|
|
3651
3599
|
|
|
3652
3600
|
test("create_session for voice without destination falls through to inbound challenge", async () => {
|
|
3653
|
-
const {
|
|
3601
|
+
const { lastResponse } = createResponseReader();
|
|
3654
3602
|
await handleChannelVerificationSession(
|
|
3655
3603
|
{
|
|
3656
3604
|
type: "channel_verification_session",
|
|
3657
3605
|
action: "create_session",
|
|
3658
3606
|
channel: "phone",
|
|
3659
3607
|
},
|
|
3660
|
-
ctx,
|
|
3661
3608
|
);
|
|
3662
3609
|
|
|
3663
3610
|
const resp = lastResponse();
|
|
@@ -3685,7 +3632,7 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3685
3632
|
// ── M2: start_outbound for voice returns secret in response ──
|
|
3686
3633
|
|
|
3687
3634
|
test("start_outbound for voice response includes secret", async () => {
|
|
3688
|
-
const {
|
|
3635
|
+
const { lastResponse } = createResponseReader();
|
|
3689
3636
|
await handleChannelVerificationSession(
|
|
3690
3637
|
{
|
|
3691
3638
|
type: "channel_verification_session",
|
|
@@ -3693,7 +3640,6 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3693
3640
|
channel: "phone",
|
|
3694
3641
|
destination: "+15551234567",
|
|
3695
3642
|
},
|
|
3696
|
-
ctx,
|
|
3697
3643
|
);
|
|
3698
3644
|
|
|
3699
3645
|
const resp = lastResponse();
|
|
@@ -3708,7 +3654,7 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3708
3654
|
|
|
3709
3655
|
test("resend_outbound for voice response includes secret", async () => {
|
|
3710
3656
|
// Start a session first
|
|
3711
|
-
|
|
3657
|
+
broadcastedMessages.length = 0;
|
|
3712
3658
|
await handleChannelVerificationSession(
|
|
3713
3659
|
{
|
|
3714
3660
|
type: "channel_verification_session",
|
|
@@ -3716,7 +3662,6 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3716
3662
|
channel: "phone",
|
|
3717
3663
|
destination: "+15551234567",
|
|
3718
3664
|
},
|
|
3719
|
-
startCtx,
|
|
3720
3665
|
);
|
|
3721
3666
|
|
|
3722
3667
|
// Move past cooldown
|
|
@@ -3730,14 +3675,13 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3730
3675
|
);
|
|
3731
3676
|
|
|
3732
3677
|
// Resend
|
|
3733
|
-
const {
|
|
3678
|
+
const { lastResponse } = createResponseReader();
|
|
3734
3679
|
await handleChannelVerificationSession(
|
|
3735
3680
|
{
|
|
3736
3681
|
type: "channel_verification_session",
|
|
3737
3682
|
action: "resend_session",
|
|
3738
3683
|
channel: "phone",
|
|
3739
3684
|
},
|
|
3740
|
-
ctx,
|
|
3741
3685
|
);
|
|
3742
3686
|
|
|
3743
3687
|
const resp = lastResponse();
|
|
@@ -3751,7 +3695,7 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3751
3695
|
// ── M2: start_outbound for Telegram bootstrap does NOT return secret ──
|
|
3752
3696
|
|
|
3753
3697
|
test("start_outbound for Telegram bootstrap (handle) does NOT return secret", async () => {
|
|
3754
|
-
const {
|
|
3698
|
+
const { lastResponse } = createResponseReader();
|
|
3755
3699
|
await handleChannelVerificationSession(
|
|
3756
3700
|
{
|
|
3757
3701
|
type: "channel_verification_session",
|
|
@@ -3759,7 +3703,6 @@ describe("M1–M4 hardening coverage", () => {
|
|
|
3759
3703
|
channel: "telegram",
|
|
3760
3704
|
destination: "@someuser",
|
|
3761
3705
|
},
|
|
3762
|
-
ctx,
|
|
3763
3706
|
);
|
|
3764
3707
|
|
|
3765
3708
|
const resp = lastResponse();
|