@vellumai/assistant 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +38 -56
- package/Dockerfile +2 -0
- package/README.md +3 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +88 -142
- package/bun.lock +29 -26
- package/docs/architecture/security.md +38 -16
- package/docs/plugins.md +7 -9
- package/knip.json +2 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +39 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/skill-host-contracts/__tests__/client.test.ts +1 -5
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +9 -5
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -16
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +1 -9
- package/node_modules/@vellumai/skill-host-contracts/src/tool-types.ts +12 -12
- package/node_modules/@vellumai/slack-text/bun.lock +24 -0
- package/node_modules/@vellumai/slack-text/package.json +18 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +153 -0
- package/node_modules/@vellumai/slack-text/src/index.ts +235 -0
- package/node_modules/@vellumai/slack-text/tsconfig.json +20 -0
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +869 -129
- package/package.json +8 -3
- package/scripts/generate-openapi.ts +16 -111
- package/src/__tests__/agent-wake-override-profile.test.ts +23 -1
- package/src/__tests__/anthropic-provider.test.ts +56 -13
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +374 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- 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-executors.test.ts +30 -43
- package/src/__tests__/approval-cascade.test.ts +0 -15
- package/src/__tests__/approval-routes-http.test.ts +29 -23
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +235 -79
- package/src/__tests__/assistant-event.test.ts +10 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +44 -17
- package/src/__tests__/assistant-feature-flags-integration.test.ts +11 -36
- package/src/__tests__/background-shell-host-bash.test.ts +46 -56
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +50 -2
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/call-site-routing-provider.test.ts +193 -0
- package/src/__tests__/channel-approval-routes.test.ts +10 -296
- package/src/__tests__/channel-approvals.test.ts +25 -17
- package/src/__tests__/channel-guardian.test.ts +100 -146
- package/src/__tests__/channel-readiness-service.test.ts +59 -1
- package/src/__tests__/checker.test.ts +23 -38
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +50 -0
- package/src/__tests__/compaction-events.test.ts +2 -0
- package/src/__tests__/config-loader-backfill.test.ts +90 -155
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-schema.test.ts +6 -48
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +2 -2
- package/src/__tests__/config-watcher.test.ts +14 -2
- package/src/__tests__/connection-policy.test.ts +1 -52
- package/src/__tests__/contacts-write.test.ts +2 -64
- package/src/__tests__/context-image-dimensions.test.ts +1 -1
- package/src/__tests__/context-search-memory-source.test.ts +120 -1
- package/src/__tests__/context-search-memory-v2-source.test.ts +383 -0
- package/src/__tests__/context-search-pkb-source.test.ts +49 -0
- package/src/__tests__/context-search-workspace-source.test.ts +9 -22
- package/src/__tests__/context-window-manager.test.ts +46 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +102 -29
- package/src/__tests__/conversation-agent-loop.test.ts +980 -13
- package/src/__tests__/conversation-analysis-routes.test.ts +12 -10
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-attention-telegram.test.ts +11 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +0 -291
- package/src/__tests__/conversation-history-web-search.test.ts +4 -3
- package/src/__tests__/conversation-inference-profile-route.test.ts +12 -23
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +40 -4
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-process-callsite.test.ts +79 -2
- package/src/__tests__/conversation-queue.test.ts +3 -8
- package/src/__tests__/conversation-routes-disk-view.test.ts +7 -161
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -104
- package/src/__tests__/conversation-routes-slash-commands.test.ts +76 -66
- package/src/__tests__/conversation-runtime-assembly.test.ts +257 -3
- package/src/__tests__/conversation-slash-commands.test.ts +24 -8
- package/src/__tests__/conversation-slash-queue.test.ts +2 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-starter-routes.test.ts +79 -2
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +317 -0
- package/src/__tests__/conversation-surfaces-standalone-payloads.test.ts +12 -5
- package/src/__tests__/conversation-surfaces-standalone.test.ts +18 -14
- package/src/__tests__/conversation-surfaces-state-update.test.ts +3 -2
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +8 -46
- package/src/__tests__/conversation-usage.test.ts +253 -3
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -39
- package/src/__tests__/credential-health-service.test.ts +68 -0
- package/src/__tests__/credential-security-e2e.test.ts +4 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -5
- package/src/__tests__/credential-token-resolver.test.ts +180 -0
- package/src/__tests__/credentials-cli.test.ts +5 -12
- package/src/__tests__/cu-unified-flow.test.ts +206 -27
- package/src/__tests__/daemon-assistant-events.test.ts +34 -21
- package/src/__tests__/daemon-credential-client.test.ts +102 -17
- package/src/__tests__/db-connection-isolation.test.ts +125 -0
- package/src/__tests__/db-migration-rollback.test.ts +101 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/db-slack-compaction-watermark-migration.test.ts +169 -0
- package/src/__tests__/deterministic-verification-control-plane.test.ts +7 -80
- package/src/__tests__/document-conversations.test.ts +332 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +2 -2
- package/src/__tests__/emit-event-signal.test.ts +4 -6
- package/src/__tests__/events-client-registration.test.ts +193 -49
- package/src/__tests__/filing-service.test.ts +58 -7
- package/src/__tests__/first-greeting.test.ts +156 -150
- package/src/__tests__/fixtures/mock-chrome-extension.ts +108 -66
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/get-skill-detail-audit.test.ts +3 -8
- package/src/__tests__/guardian-binding-drift-heal.test.ts +1 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -1
- package/src/__tests__/guardian-grant-minting.test.ts +7 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +7 -2
- package/src/__tests__/guardian-routing-state.test.ts +1 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +30 -11
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +2 -84
- 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 +1007 -8
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/helpers/channel-test-adapter.ts +2 -2
- package/src/__tests__/helpers/create-guardian-binding.ts +91 -0
- package/src/__tests__/host-app-control-proxy.test.ts +602 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +270 -147
- package/src/__tests__/host-bash-routes.test.ts +294 -0
- package/src/__tests__/host-browser-proxy.test.ts +126 -198
- package/src/__tests__/host-browser-routes.test.ts +50 -54
- package/src/__tests__/host-cu-proxy.test.ts +78 -144
- package/src/__tests__/host-cu-routes-targeted.test.ts +300 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +339 -0
- package/src/__tests__/host-file-proxy.test.ts +62 -122
- package/src/__tests__/host-file-read-tool.test.ts +59 -21
- package/src/__tests__/host-file-routes-targeted.test.ts +262 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +53 -70
- package/src/__tests__/host-transfer-pending-interactions.test.ts +2 -18
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +583 -0
- package/src/__tests__/host-transfer-proxy.test.ts +145 -56
- package/src/__tests__/host-transfer-routes-targeted.test.ts +447 -0
- package/src/__tests__/http-user-message-parity.test.ts +1 -6
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/inbound-slack-persistence.test.ts +31 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/injector-chain.test.ts +10 -5
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +124 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -67
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -13
- package/src/__tests__/install-skill-routing.test.ts +1 -13
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/llm-callsite-catalog.test.ts +34 -0
- package/src/__tests__/llm-catalog-parity.test.ts +90 -0
- package/src/__tests__/llm-context-resolution.test.ts +180 -0
- package/src/__tests__/llm-resolver.test.ts +80 -12
- package/src/__tests__/llm-usage-store.test.ts +269 -4
- package/src/__tests__/log-export-routes.test.ts +89 -0
- package/src/__tests__/managed-profile-guard.test.ts +225 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -11
- package/src/__tests__/manual-token-reconciliation.test.ts +334 -0
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +95 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +197 -291
- package/src/__tests__/migration-export-http.test.ts +33 -26
- package/src/__tests__/migration-export-streaming.test.ts +18 -10
- package/src/__tests__/migration-export-to-gcs.test.ts +49 -9
- package/src/__tests__/migration-import-commit-http.test.ts +172 -21
- package/src/__tests__/migration-import-from-gcs.test.ts +50 -9
- package/src/__tests__/migration-import-from-url.test.ts +20 -6
- package/src/__tests__/migration-import-preflight-http.test.ts +95 -95
- package/src/__tests__/migration-parity-persistence.test.ts +62 -25
- package/src/__tests__/migration-transport.test.ts +115 -23
- package/src/__tests__/migration-validate-http.test.ts +105 -80
- package/src/__tests__/migration-wizard.test.ts +133 -27
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/non-member-access-request.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +1 -1
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth-store.test.ts +19 -0
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +26 -21
- package/src/__tests__/prechat-onboarding-contract.test.ts +34 -8
- package/src/__tests__/pricing.test.ts +68 -4
- package/src/__tests__/process-message-background-slack.test.ts +333 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/provider-managed-proxy-integration.test.ts +153 -17
- package/src/__tests__/provider-send-message-override-profile.test.ts +50 -0
- package/src/__tests__/provider-usage-tracking.test.ts +208 -0
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/reaction-persistence.test.ts +9 -6
- package/src/__tests__/rebind-secrets-screen.test.ts +53 -16
- package/src/__tests__/recording-handler.test.ts +64 -81
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +4 -3
- package/src/__tests__/relay-server.test.ts +18 -13
- package/src/__tests__/require-fresh-approval.test.ts +13 -23
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +13 -18
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -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 +1 -4
- package/src/__tests__/secret-onetime-send.test.ts +4 -2
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +24 -7
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +42 -47
- package/src/__tests__/secret-response-routing.test.ts +29 -15
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -1
- package/src/__tests__/secret-scanner.test.ts +2 -545
- package/src/__tests__/send-endpoint-busy.test.ts +12 -24
- package/src/__tests__/settings-routes.test.ts +1 -1
- package/src/__tests__/shell-credential-ref.test.ts +0 -8
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -57
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -12
- package/src/__tests__/skill-tool-factory.test.ts +97 -0
- package/src/__tests__/skills-file-content-endpoint.test.ts +9 -30
- package/src/__tests__/skills-files-catalog-fallback.test.ts +11 -17
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/slack-inbound-verification.test.ts +1 -62
- package/src/__tests__/subagent-fork-notifications.test.ts +57 -47
- package/src/__tests__/subagent-manager-notify.test.ts +70 -70
- package/src/__tests__/subagent-notify-parent.test.ts +80 -83
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +115 -14
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -89
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/thread-backfill.test.ts +945 -31
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -36
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -7
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -17
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +9 -19
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -8
- package/src/__tests__/tool-executor.test.ts +12 -20
- package/src/__tests__/tool-metrics-listener.test.ts +0 -35
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +1 -0
- package/src/__tests__/tool-trace-listener.test.ts +0 -17
- package/src/__tests__/transfer-progress-screen.test.ts +63 -26
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +2 -149
- package/src/__tests__/trusted-contact-multichannel.test.ts +2 -4
- package/src/__tests__/trusted-contact-verification.test.ts +1 -1
- package/src/__tests__/tts-catalog-parity.test.ts +16 -5
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/usage-attribution.test.ts +247 -0
- package/src/__tests__/usage-cli.test.ts +143 -0
- package/src/__tests__/usage-grouped-buckets.test.ts +155 -0
- package/src/__tests__/usage-routes.test.ts +150 -0
- package/src/__tests__/validation-results-screen.test.ts +39 -16
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +12 -3
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +47 -138
- package/src/__tests__/verification-control-plane-policy.test.ts +6 -11
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/voice-session-bridge.test.ts +5 -5
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- 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-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-memory-v2-init.test.ts +8 -30
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/acp/index.ts +0 -15
- package/src/acp/session-manager.ts +37 -34
- package/src/agent/loop.ts +16 -1
- package/src/approvals/AGENTS.md +4 -0
- package/src/approvals/__tests__/guardian-feed-event.test.ts +10 -3
- package/src/approvals/guardian-request-resolvers.ts +10 -2
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +94 -177
- package/src/backup/paths.ts +2 -15
- package/src/backup/restore.ts +107 -231
- package/src/browser-session/events.ts +0 -9
- package/src/bundler/app-bundler.ts +51 -3
- package/src/calls/call-store.ts +1 -34
- package/src/calls/guardian-question-copy.ts +0 -108
- package/src/calls/relay-server.ts +4 -68
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +31 -141
- package/src/calls/twilio-routes.ts +12 -13
- package/src/calls/voice-session-bridge.ts +7 -38
- package/src/channels/types.ts +8 -42
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/cache.test.ts +152 -5
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +18 -28
- package/src/cli/commands/__tests__/trust.test.ts +21 -387
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -1
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/cache-fs.ts +8 -0
- package/src/cli/commands/cache.ts +153 -82
- package/src/cli/commands/clients.ts +64 -7
- package/src/cli/commands/completions.ts +3 -3
- package/src/cli/commands/contacts.ts +304 -76
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +15 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +13 -7
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +320 -53
- package/src/cli/commands/oauth/shared.ts +2 -29
- package/src/cli/commands/pending.ts +102 -0
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -1
- package/src/cli/commands/platform/__tests__/connect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +0 -2
- package/src/cli/commands/platform/__tests__/status.test.ts +13 -15
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +0 -18
- package/src/cli/commands/skills.ts +77 -35
- package/src/cli/commands/trust.ts +70 -430
- package/src/cli/commands/usage.ts +25 -16
- package/src/cli/lib/daemon-credential-client.ts +115 -19
- package/src/cli/program.ts +4 -0
- package/src/cli.ts +0 -21
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/assistant-feature-flags.ts +67 -10
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +14 -44
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +19 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +12 -4
- package/src/config/env.ts +22 -26
- package/src/config/feature-flag-registry.json +40 -152
- package/src/config/llm-callsite-catalog.ts +12 -0
- package/src/config/llm-context-resolution.ts +80 -0
- package/src/config/llm-resolver.ts +58 -22
- package/src/config/loader.ts +76 -102
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schema.ts +2 -158
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +8 -4
- package/src/config/schemas/call-site-catalog.ts +271 -0
- package/src/config/schemas/calls.ts +5 -14
- package/src/config/schemas/heartbeat.ts +63 -0
- package/src/config/schemas/inference.ts +1 -1
- package/src/config/schemas/ingress.ts +11 -7
- package/src/config/schemas/llm.ts +34 -11
- package/src/config/schemas/memory-lifecycle.ts +77 -24
- package/src/config/schemas/memory-retrieval.ts +2 -2
- package/src/config/schemas/memory-v2.ts +57 -4
- package/src/config/schemas/platform.ts +6 -0
- package/src/config/schemas/security.ts +1 -42
- package/src/config/schemas/services.ts +7 -21
- package/src/config/schemas/skills.ts +5 -11
- package/src/config/schemas/tts.ts +1 -1
- package/src/config/seed-inference-profiles.ts +117 -0
- package/src/config/skills.ts +0 -90
- package/src/config/types.ts +3 -6
- package/src/contacts/contact-store.ts +0 -47
- package/src/contacts/contacts-write.ts +1 -132
- package/src/context/window-manager.ts +43 -5
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +46 -51
- package/src/credential-health/credential-health-service.ts +21 -16
- package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +75 -82
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +126 -5
- package/src/daemon/__tests__/daemon-skill-host.test.ts +2 -9
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +4 -3
- package/src/daemon/connection-policy.ts +1 -26
- package/src/daemon/conversation-agent-loop-handlers.ts +74 -7
- package/src/daemon/conversation-agent-loop.ts +309 -64
- package/src/daemon/conversation-history.ts +8 -8
- package/src/daemon/conversation-launch.ts +20 -135
- package/src/daemon/conversation-lifecycle.ts +8 -1
- package/src/daemon/conversation-messaging.ts +1 -0
- package/src/daemon/conversation-process.ts +97 -172
- package/src/daemon/conversation-runtime-assembly.ts +219 -76
- package/src/daemon/conversation-slash.ts +47 -5
- package/src/daemon/conversation-store.ts +7 -31
- package/src/daemon/conversation-surfaces.ts +144 -29
- package/src/daemon/conversation-tool-setup.ts +18 -87
- package/src/daemon/conversation-usage.ts +36 -0
- package/src/daemon/conversation.ts +134 -231
- package/src/daemon/daemon-control.ts +3 -71
- package/src/daemon/daemon-skill-host.ts +8 -11
- package/src/daemon/dictation-profile-store.ts +2 -26
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/first-greeting.ts +44 -156
- package/src/daemon/handlers/config-channels.ts +12 -12
- package/src/daemon/handlers/config-ingress.ts +4 -165
- package/src/daemon/handlers/config-model.ts +1 -1
- package/src/daemon/handlers/config-voice.ts +0 -42
- package/src/daemon/handlers/conversations.ts +11 -190
- package/src/daemon/handlers/recording.ts +26 -158
- package/src/daemon/handlers/shared.ts +27 -72
- package/src/daemon/handlers/skills.ts +42 -93
- package/src/daemon/host-app-control-proxy.ts +293 -0
- package/src/daemon/host-bash-proxy.ts +124 -92
- package/src/daemon/host-browser-proxy.ts +111 -88
- package/src/daemon/host-cu-proxy.ts +100 -104
- package/src/daemon/host-file-proxy.ts +136 -91
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +303 -147
- package/src/daemon/lifecycle.ts +164 -132
- package/src/daemon/message-protocol.ts +3 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +18 -8
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +5 -0
- package/src/daemon/message-types/host-cu.ts +3 -0
- package/src/daemon/message-types/host-file.ts +5 -0
- package/src/daemon/message-types/host-transfer.ts +4 -0
- package/src/daemon/message-types/messages.ts +10 -9
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/message-types/workspace.ts +1 -1
- package/src/daemon/process-message.ts +119 -239
- package/src/daemon/server.ts +13 -462
- package/src/daemon/shutdown-handlers.ts +2 -5
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +126 -108
- package/src/daemon/trust-context.ts +13 -0
- package/src/daemon/wake-target-adapter.ts +4 -9
- package/src/events/domain-events.ts +0 -8
- package/src/events/tool-audit-listener.ts +5 -2
- package/src/events/tool-domain-event-publisher.ts +0 -10
- package/src/events/tool-metrics-listener.ts +0 -17
- package/src/events/tool-trace-listener.ts +0 -14
- package/src/filing/filing-service.ts +13 -1
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +21 -9
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +216 -0
- package/src/heartbeat/heartbeat-run-store.ts +236 -0
- package/src/heartbeat/heartbeat-service.ts +303 -54
- package/src/home/__tests__/feed-writer.test.ts +0 -4
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +41 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/feed-writer.ts +1 -2
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +33 -95
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/browser-ipc.test.ts +2 -12
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/__tests__/skill-server-bidirectional.test.ts +0 -1
- package/src/ipc/assistant-server.ts +17 -11
- package/src/ipc/cli-client.ts +32 -1
- package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +39 -20
- package/src/ipc/routes/route-adapter.ts +1 -1
- package/src/ipc/routes/trust-rules.test.ts +0 -95
- package/src/ipc/skill-ipc-types.ts +41 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +13 -27
- package/src/ipc/skill-routes/__tests__/identity.test.ts +4 -23
- package/src/ipc/skill-routes/events.ts +12 -23
- package/src/ipc/skill-routes/identity.ts +4 -17
- package/src/ipc/skill-routes/index.ts +1 -1
- package/src/ipc/skill-server.ts +6 -39
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +0 -8
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/live-voice/protocol.ts +4 -13
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/manager.ts +0 -5
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +55 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +127 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/app-git-service.ts +0 -32
- package/src/memory/app-store.ts +154 -0
- package/src/memory/attachments-store.ts +6 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +32 -7
- package/src/memory/context-search/sources/memory-v2.ts +590 -0
- package/src/memory/context-search/sources/memory.ts +5 -0
- package/src/memory/context-search/sources/pkb.ts +10 -1
- package/src/memory/context-search/sources/workspace.ts +3 -2
- package/src/memory/conversation-crud.ts +30 -5
- package/src/memory/conversation-disk-view.ts +1 -5
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/conversation-starter-checkpoints.ts +63 -0
- package/src/memory/db-connection.ts +62 -0
- package/src/memory/db-init.ts +18 -0
- package/src/memory/embedding-backend.ts +12 -42
- package/src/memory/embedding-gemini.ts +0 -2
- package/src/memory/embedding-local.ts +6 -6
- package/src/memory/embedding-ollama.ts +6 -6
- package/src/memory/embedding-openai.ts +6 -6
- package/src/memory/embedding-types.ts +21 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +49 -8
- package/src/memory/graph/conversation-graph-memory.ts +35 -36
- package/src/memory/graph/graph-search.ts +8 -0
- package/src/memory/graph/injection.test.ts +2 -2
- package/src/memory/graph/injection.ts +1 -1
- package/src/memory/graph/retriever.ts +28 -0
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/guardian-action-store.ts +0 -83
- package/src/memory/guardian-approvals.ts +0 -48
- package/src/memory/indexer.ts +1 -15
- package/src/memory/job-handlers/conversation-starters.ts +36 -53
- package/src/memory/job-utils.ts +0 -6
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +66 -23
- package/src/memory/jobs-worker.ts +114 -79
- package/src/memory/llm-request-log-store.ts +0 -41
- package/src/memory/llm-usage-store.ts +129 -43
- package/src/memory/memory-v2-activation-log-store.ts +115 -0
- package/src/memory/migrations/233-document-conversations.ts +54 -0
- package/src/memory/migrations/234-memory-v2-activation-logs.ts +55 -0
- package/src/memory/migrations/235-llm-usage-attribution.ts +31 -0
- package/src/memory/migrations/235-slack-compaction-watermark.ts +44 -0
- package/src/memory/migrations/236-tool-invocations-matched-rule-id.ts +26 -0
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/__tests__/234-memory-v2-activation-logs.test.ts +182 -0
- package/src/memory/migrations/index.ts +19 -0
- package/src/memory/migrations/registry.ts +32 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +50 -20
- package/src/memory/raw-query.ts +2 -68
- package/src/memory/schema/conversations.ts +7 -0
- package/src/memory/schema/infrastructure.ts +40 -0
- package/src/memory/search/semantic.ts +12 -16
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/tool-usage-store.ts +2 -0
- package/src/memory/usage-buckets.ts +40 -1
- package/src/memory/usage-grouped-buckets.ts +127 -0
- package/src/memory/v2/__tests__/activation.test.ts +361 -180
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +2 -129
- package/src/memory/v2/__tests__/consolidation-job.test.ts +28 -11
- package/src/memory/v2/__tests__/edge-index.test.ts +278 -0
- package/src/memory/v2/__tests__/injection.test.ts +424 -33
- package/src/memory/v2/__tests__/migration.test.ts +64 -36
- package/src/memory/v2/__tests__/page-store.test.ts +191 -8
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +181 -0
- package/src/memory/v2/__tests__/sim.test.ts +166 -6
- package/src/memory/v2/__tests__/skill-store.test.ts +115 -3
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +152 -0
- package/src/memory/v2/activation.ts +215 -163
- package/src/memory/v2/backfill-jobs.ts +15 -100
- package/src/memory/v2/consolidation-job.ts +17 -17
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/edge-index.ts +191 -0
- package/src/memory/v2/injection.ts +241 -84
- package/src/memory/v2/migration.ts +57 -64
- package/src/memory/v2/now-text.ts +2 -3
- package/src/memory/v2/page-store.ts +168 -31
- package/src/memory/v2/prompts/consolidation.ts +385 -88
- package/src/memory/v2/prompts/sweep.ts +3 -3
- package/src/memory/v2/qdrant.ts +99 -1
- package/src/memory/v2/sim.ts +126 -16
- package/src/memory/v2/skill-qdrant.ts +12 -3
- package/src/memory/v2/skill-store.ts +71 -8
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +63 -0
- package/src/memory/v2/types.ts +10 -20
- package/src/memory/validation.ts +0 -11
- package/src/messaging/draft-store.ts +0 -6
- package/src/messaging/provider-types.ts +8 -0
- package/src/messaging/provider.ts +7 -0
- package/src/messaging/providers/gmail/client.ts +1 -121
- package/src/messaging/providers/gmail/types.ts +0 -49
- 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 +123 -52
- package/src/messaging/providers/slack/backfill.test.ts +95 -6
- package/src/messaging/providers/slack/backfill.ts +89 -11
- package/src/messaging/providers/slack/client.ts +10 -124
- package/src/messaging/providers/slack/message-metadata.ts +12 -2
- package/src/messaging/providers/slack/render-transcript.test.ts +56 -0
- package/src/messaging/providers/slack/render-transcript.ts +126 -25
- package/src/messaging/providers/slack/types.ts +1 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/oauth/connect-orchestrator.ts +4 -0
- package/src/oauth/connection-resolver.test.ts +8 -0
- package/src/oauth/connection-resolver.ts +8 -16
- package/src/oauth/credential-token-resolver.ts +95 -0
- package/src/oauth/manual-token-connection.ts +26 -34
- package/src/oauth/oauth-store.ts +6 -4
- package/src/outbound-proxy/certs.ts +0 -7
- package/src/outbound-proxy/index.ts +1 -59
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/approval-provenance.test.ts +184 -0
- package/src/permissions/approval-provenance.ts +70 -0
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +7 -18
- package/src/permissions/gateway-threshold-reader.ts +6 -1
- package/src/permissions/prompter.ts +43 -3
- package/src/permissions/secret-prompter.ts +25 -48
- package/src/permissions/types.ts +33 -0
- package/src/permissions/workspace-policy.ts +0 -5
- package/src/platform/sync-identity.ts +0 -8
- package/src/plugins/defaults/injectors.ts +69 -2
- package/src/plugins/defaults/overflow-reduce.ts +3 -2
- package/src/plugins/types.ts +8 -0
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/system-prompt.ts +37 -88
- package/src/prompts/templates/BOOTSTRAP.md +52 -6
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/prompts/update-bulletin-job.ts +2 -0
- package/src/providers/__tests__/retry-callsite.test.ts +138 -1
- package/src/providers/anthropic/client.ts +72 -33
- package/src/providers/call-site-routing.ts +42 -3
- package/src/providers/gemini/client.ts +18 -2
- package/src/providers/managed-proxy/context.ts +0 -5
- package/src/providers/model-catalog.ts +105 -19
- package/src/providers/openai/chat-completions-provider.ts +6 -0
- package/src/providers/openai/responses-provider.ts +7 -1
- package/src/providers/provider-send-message.ts +45 -2
- package/src/providers/ratelimit.ts +7 -2
- package/src/providers/registry.ts +14 -9
- package/src/providers/retry.ts +96 -8
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/providers/types.ts +13 -0
- package/src/providers/usage-tracking.ts +96 -0
- package/src/runtime/AGENTS.md +10 -6
- package/src/runtime/__tests__/agent-wake.test.ts +89 -0
- package/src/runtime/agent-wake.ts +39 -2
- package/src/runtime/assistant-event-hub.ts +570 -52
- package/src/runtime/assistant-event.ts +2 -6
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/context.ts +0 -9
- package/src/runtime/auth/middleware.ts +1 -97
- package/src/runtime/auth/route-policy.ts +30 -9
- package/src/runtime/auth/token-service.ts +0 -11
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-approvals.ts +6 -2
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/channel-verification-service.ts +3 -5
- package/src/runtime/http-errors.ts +0 -34
- package/src/runtime/http-router.ts +6 -3
- package/src/runtime/http-server.ts +16 -402
- package/src/runtime/http-types.ts +5 -5
- package/src/runtime/interactive-ui.ts +0 -1
- package/src/runtime/middleware/auth.ts +0 -20
- package/src/runtime/migrations/__tests__/v1-test-helpers.ts +112 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +11 -4
- package/src/runtime/migrations/__tests__/vbundle-builder-v1-shape.test.ts +253 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +19 -6
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- 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 +296 -80
- package/src/runtime/migrations/__tests__/vbundle-streaming-validator.test.ts +143 -23
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-tar-stream.test.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +421 -0
- package/src/runtime/migrations/migration-transport.ts +49 -16
- 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 +457 -136
- package/src/runtime/migrations/vbundle-import-analyzer.ts +13 -11
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +251 -74
- package/src/runtime/migrations/vbundle-metadata-merge.ts +1 -1
- package/src/runtime/migrations/vbundle-streaming-importer.ts +329 -38
- package/src/runtime/migrations/vbundle-streaming-validator.ts +203 -28
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +328 -41
- package/src/runtime/pending-interactions.ts +48 -13
- package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -1
- package/src/runtime/routes/__tests__/backup-routes.test.ts +49 -168
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +333 -0
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/__tests__/llm-call-sites-routes.test.ts +58 -0
- package/src/runtime/routes/__tests__/migration-export-secrets-redacted.test.ts +54 -0
- package/src/runtime/routes/__tests__/migration-import-credential-filter.test.ts +19 -6
- package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +7 -7
- package/src/runtime/routes/acp-routes.test.ts +0 -3
- package/src/runtime/routes/acp-routes.ts +3 -7
- package/src/runtime/routes/app-management-routes.ts +18 -9
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-routes.ts +55 -14
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/avatar-routes.ts +3 -5
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/browser-routes.ts +1 -15
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/channel-guardian-routes.ts +1 -5
- package/src/runtime/routes/channel-readiness-routes.ts +3 -7
- package/src/runtime/routes/channel-route-shared.ts +2 -28
- package/src/runtime/routes/client-routes.ts +46 -12
- package/src/runtime/routes/consolidation-routes.ts +115 -0
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/conversation-list-routes.ts +12 -29
- package/src/runtime/routes/conversation-management-routes.ts +14 -51
- package/src/runtime/routes/conversation-query-routes.ts +156 -9
- package/src/runtime/routes/conversation-routes.ts +72 -539
- package/src/runtime/routes/conversation-starter-routes.ts +19 -40
- package/src/runtime/routes/document-pdf-renderer.ts +165 -0
- package/src/runtime/routes/documents-routes.ts +83 -18
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +68 -94
- package/src/runtime/routes/filing-routes.ts +18 -1
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-action-routes.ts +4 -9
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +37 -6
- package/src/runtime/routes/host-browser-routes.ts +96 -25
- package/src/runtime/routes/host-cu-routes.ts +48 -13
- package/src/runtime/routes/host-file-routes.ts +35 -11
- package/src/runtime/routes/host-transfer-routes.ts +73 -37
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +93 -49
- package/src/runtime/routes/inbound-message-handler.ts +581 -146
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +2 -95
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -0
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +12 -0
- package/src/runtime/routes/integrations/slack/channel.ts +0 -24
- package/src/runtime/routes/llm-call-sites-routes.ts +22 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +451 -16
- package/src/runtime/routes/migration-routes.ts +284 -31
- package/src/runtime/routes/playground/guard.ts +1 -1
- package/src/runtime/routes/playground/index.ts +0 -2
- package/src/runtime/routes/recording-routes.ts +4 -24
- package/src/runtime/routes/rename-conversation-routes.ts +2 -6
- package/src/runtime/routes/schedule-routes.ts +10 -6
- package/src/runtime/routes/secret-routes.ts +87 -18
- package/src/runtime/routes/settings-routes.ts +29 -28
- package/src/runtime/routes/skills-routes.ts +12 -31
- package/src/runtime/routes/suggest-trust-rule-routes.ts +32 -1
- package/src/runtime/routes/task-routes.ts +6 -6
- package/src/runtime/routes/trust-rules-routes.ts +3 -94
- package/src/runtime/routes/types.ts +4 -4
- package/src/runtime/routes/upgrade-broadcast-routes.ts +3 -10
- package/src/runtime/routes/usage-routes.ts +87 -10
- package/src/runtime/routes/user-routes.ts +17 -31
- package/src/runtime/routes/work-items-routes.ts +1 -4
- package/src/runtime/services/__tests__/analyze-conversation.test.ts +2 -2
- package/src/runtime/services/analyze-conversation.ts +7 -17
- package/src/runtime/services/conversation-serializer.ts +2 -4
- package/src/runtime/verification-outbound-actions.ts +1 -1
- package/src/runtime/verification-rate-limiter.ts +1 -1
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -18
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +63 -38
- package/src/security/oauth-callback-registry.ts +8 -0
- 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 +5 -5
- package/src/sequence/engine.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/user-message.ts +108 -22
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/catalog-install.ts +1 -0
- package/src/skills/clawhub.ts +2 -2
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/inline-command-runner.ts +1 -7
- package/src/skills/remote-skill-policy.ts +5 -5
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/subagent/manager.ts +67 -84
- package/src/tasks/task-store.ts +1 -28
- package/src/telemetry/types.ts +8 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +59 -15
- package/src/telemetry/usage-telemetry-reporter.ts +4 -5
- package/src/tools/acp/spawn.test.ts +1 -2
- package/src/tools/acp/steer.test.ts +1 -2
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/browser/__tests__/browser-status.test.ts +55 -135
- package/src/tools/browser/browser-execution.ts +31 -147
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +145 -70
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +62 -91
- package/src/tools/browser/cdp-client/index.ts +1 -27
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +46 -31
- package/src/tools/host-filesystem/edit.ts +29 -2
- package/src/tools/host-filesystem/read.ts +29 -2
- package/src/tools/host-filesystem/transfer.test.ts +45 -42
- package/src/tools/host-filesystem/transfer.ts +35 -4
- package/src/tools/host-filesystem/write.ts +29 -2
- package/src/tools/host-terminal/host-shell.ts +62 -3
- package/src/tools/network/script-proxy/index.ts +1 -10
- package/src/tools/permission-checker.ts +66 -1
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/skills/sandbox-runner.ts +1 -6
- package/src/tools/skills/skill-tool-factory.ts +32 -0
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/terminal/shell.ts +2 -78
- package/src/tools/tool-approval-handler.ts +1 -5
- package/src/tools/types.ts +16 -39
- package/src/tts/__tests__/provider-catalog.test.ts +2 -2
- package/src/tts/provider-catalog.ts +1 -1
- package/src/usage/actors.ts +2 -1
- package/src/usage/attribution.ts +185 -0
- package/src/usage/pricing.ts +166 -0
- package/src/usage/types.ts +14 -0
- package/src/util/json.ts +13 -0
- package/src/util/logger.ts +3 -3
- package/src/util/pricing.ts +50 -3
- package/src/work-items/work-item-runner.ts +15 -42
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +6 -4
- package/src/workspace/migrations/052-seed-default-inference-profiles.ts +3 -3
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/060-memory-v2-init.ts +2 -18
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +54 -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/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/workspace/provider-commit-message-generator.ts +3 -3
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -904
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -296
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -431
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -138
- package/src/__tests__/sandbox-host-parity.test.ts +0 -1024
- package/src/__tests__/secret-detection-handler.test.ts +0 -67
- package/src/__tests__/secret-scanner-executor.test.ts +0 -450
- package/src/__tests__/tcc-sandbox-deny.test.ts +0 -198
- package/src/__tests__/terminal-sandbox.test.ts +0 -374
- package/src/__tests__/tool-notification-listener.test.ts +0 -65
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -754
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -438
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/context/__tests__/microcompact.test.ts +0 -805
- package/src/context/microcompact.ts +0 -443
- package/src/daemon/handlers/slack-channel-oauth-install.ts +0 -197
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/ipc/routes/__tests__/memory-v2-validate.test.ts +0 -219
- package/src/memory/v2/__tests__/edges.test.ts +0 -435
- package/src/memory/v2/edges.ts +0 -217
- package/src/outbound-proxy/config.ts +0 -94
- package/src/outbound-proxy/health.ts +0 -62
- package/src/outbound-proxy/types.ts +0 -150
- package/src/prompts/__tests__/system-prompt-memory-v2.test.ts +0 -197
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +0 -518
- package/src/runtime/__tests__/client-registry.test.ts +0 -271
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/runtime/chrome-extension-registry.ts +0 -368
- package/src/runtime/client-registry.ts +0 -254
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +0 -329
- package/src/signals/mcp-reload.ts +0 -18
- package/src/tools/secret-detection-handler.ts +0 -269
- package/src/tools/terminal/backends/native.ts +0 -327
- package/src/tools/terminal/backends/types.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -87
- package/src/tools/terminal/sandbox.ts +0 -40
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* configured port (default: 7821).
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
import type { ServerWebSocket } from "bun";
|
|
10
9
|
|
|
11
10
|
import {
|
|
@@ -26,10 +25,8 @@ import {
|
|
|
26
25
|
handleStatusCallback,
|
|
27
26
|
handleVoiceWebhook,
|
|
28
27
|
} from "../calls/twilio-routes.js";
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
isHttpAuthDisabled,
|
|
32
|
-
} from "../config/env.js";
|
|
28
|
+
import { isHttpAuthDisabled } from "../config/env.js";
|
|
29
|
+
import { getIsPlatform } from "../config/env-registry.js";
|
|
33
30
|
import { getConfig } from "../config/loader.js";
|
|
34
31
|
import { processMessage } from "../daemon/process-message.js";
|
|
35
32
|
import { createLiveVoiceSession } from "../live-voice/live-voice-session.js";
|
|
@@ -48,20 +45,12 @@ import {
|
|
|
48
45
|
SttStreamSession,
|
|
49
46
|
} from "../stt/stt-stream-session.js";
|
|
50
47
|
import { getLogger } from "../util/logger.js";
|
|
51
|
-
|
|
52
|
-
import {
|
|
53
|
-
authenticateHostBrowserResultRequest,
|
|
54
|
-
authenticateRequest,
|
|
55
|
-
} from "./auth/middleware.js";
|
|
48
|
+
import { authenticateRequest } from "./auth/middleware.js";
|
|
56
49
|
import { parseSub } from "./auth/subject.js";
|
|
57
50
|
import { verifyToken } from "./auth/token-service.js";
|
|
58
|
-
import { verifyHostBrowserCapability } from "./capability-tokens.js";
|
|
59
51
|
import { sweepFailedEvents } from "./channel-retry-sweep.js";
|
|
60
|
-
import { getChromeExtensionRegistry } from "./chrome-extension-registry.js";
|
|
61
52
|
import { httpError, type HttpErrorCode } from "./http-errors.js";
|
|
62
|
-
import type { HTTPRouteDefinition } from "./http-router.js";
|
|
63
53
|
import { HttpRouter } from "./http-router.js";
|
|
64
|
-
// Middleware
|
|
65
54
|
import {
|
|
66
55
|
extractBearerToken,
|
|
67
56
|
isLoopbackHost,
|
|
@@ -96,31 +85,12 @@ import {
|
|
|
96
85
|
stopGuardianExpirySweep,
|
|
97
86
|
} from "./routes/channel-guardian-routes.js";
|
|
98
87
|
import { RouteError } from "./routes/errors.js";
|
|
99
|
-
import {
|
|
100
|
-
resolveHostBrowserEvent,
|
|
101
|
-
resolveHostBrowserResultByRequestId,
|
|
102
|
-
resolveHostBrowserSessionInvalidated,
|
|
103
|
-
} from "./routes/host-browser-routes.js";
|
|
104
|
-
import { routeDefinitionsToHTTPRoutes } from "./routes/http-adapter.js";
|
|
105
88
|
import { handleHealth, handleReadyz } from "./routes/identity-routes.js";
|
|
106
|
-
import { ROUTES } from "./routes/index.js";
|
|
107
89
|
import { matchSkillRoute } from "./skill-route-registry.js";
|
|
108
90
|
|
|
109
91
|
// Re-export for consumers
|
|
110
92
|
export { isPrivateAddress } from "./middleware/auth.js";
|
|
111
93
|
|
|
112
|
-
// Re-export shared types so existing consumers don't need to update imports
|
|
113
|
-
export type {
|
|
114
|
-
ApprovalConversationGenerator,
|
|
115
|
-
ApprovalCopyGenerator,
|
|
116
|
-
GuardianActionCopyGenerator,
|
|
117
|
-
GuardianFollowUpConversationGenerator,
|
|
118
|
-
MessageProcessor,
|
|
119
|
-
RuntimeAttachmentMetadata,
|
|
120
|
-
RuntimeHttpServerOptions,
|
|
121
|
-
RuntimeMessageConversationOptions,
|
|
122
|
-
} from "./http-types.js";
|
|
123
|
-
|
|
124
94
|
import type {
|
|
125
95
|
ApprovalConversationGenerator,
|
|
126
96
|
ApprovalCopyGenerator,
|
|
@@ -137,44 +107,10 @@ const DEFAULT_HOSTNAME = "127.0.0.1";
|
|
|
137
107
|
/** Global hard cap on request body size (512 MB — accommodates large .vbundle backup imports). */
|
|
138
108
|
const MAX_REQUEST_BODY_BYTES = 512 * 1024 * 1024;
|
|
139
109
|
|
|
140
|
-
/**
|
|
141
|
-
* WebSocket data attached to `/v1/browser-relay` connections. The route
|
|
142
|
-
* is used exclusively by the chrome-extension CDP proxy — outbound
|
|
143
|
-
* `host_browser_request` frames are pushed through the
|
|
144
|
-
* {@link ChromeExtensionRegistry}, and inbound `host_browser_result`
|
|
145
|
-
* frames are dispatched through
|
|
146
|
-
* `resolveHostBrowserResultByRequestId`. The extension may also submit
|
|
147
|
-
* results via `POST /v1/host-browser-result` (both transports resolve
|
|
148
|
-
* through the same core function).
|
|
149
|
-
*/
|
|
150
|
-
interface BrowserRelayWebSocketData {
|
|
151
|
-
wsType: "browser-relay";
|
|
152
|
-
connectionId: string;
|
|
153
|
-
/**
|
|
154
|
-
* Guardian identity derived from the JWT claims at WebSocket upgrade
|
|
155
|
-
* time. Used by the ChromeExtensionRegistry to route
|
|
156
|
-
* host_browser_request frames to the correct extension. Undefined when
|
|
157
|
-
* HTTP auth is disabled (dev bypass) or when the token's sub cannot be
|
|
158
|
-
* parsed into an actor principal.
|
|
159
|
-
*/
|
|
160
|
-
guardianId?: string;
|
|
161
|
-
/**
|
|
162
|
-
* Stable per-extension-install identifier supplied by the client on
|
|
163
|
-
* the WebSocket handshake (via the `clientInstanceId` query param or
|
|
164
|
-
* the `x-client-instance-id` header). Plumbed into the
|
|
165
|
-
* ChromeExtensionRegistry so multiple parallel installs for the same
|
|
166
|
-
* guardian (e.g. two Chrome profiles, two desktops) don't evict each
|
|
167
|
-
* other on register/unregister. Undefined on older extension builds
|
|
168
|
-
* — the registry synthesizes a connection-scoped fallback key in
|
|
169
|
-
* that case for backwards-compatible single-instance semantics.
|
|
170
|
-
*/
|
|
171
|
-
clientInstanceId?: string;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
110
|
/**
|
|
175
111
|
* WebSocket data attached to `/v1/calls/media-stream` connections.
|
|
176
112
|
* The `wsType` discriminator routes frames to the media-stream call
|
|
177
|
-
* session instead of the ConversationRelay
|
|
113
|
+
* session instead of the ConversationRelay handlers.
|
|
178
114
|
*/
|
|
179
115
|
interface MediaStreamWebSocketData {
|
|
180
116
|
wsType: "media-stream";
|
|
@@ -243,7 +179,7 @@ export class RuntimeHttpServer {
|
|
|
243
179
|
this.liveVoiceSessionManager = new LiveVoiceSessionManager({
|
|
244
180
|
createSession: (context) => createLiveVoiceSession(context),
|
|
245
181
|
});
|
|
246
|
-
this.router = new HttpRouter(
|
|
182
|
+
this.router = new HttpRouter();
|
|
247
183
|
}
|
|
248
184
|
|
|
249
185
|
/** The port the server is actually listening on (resolved after start). */
|
|
@@ -254,7 +190,6 @@ export class RuntimeHttpServer {
|
|
|
254
190
|
async start(): Promise<void> {
|
|
255
191
|
type AllWebSocketData =
|
|
256
192
|
| RelayWebSocketData
|
|
257
|
-
| BrowserRelayWebSocketData
|
|
258
193
|
| MediaStreamWebSocketData
|
|
259
194
|
| SttStreamWebSocketData
|
|
260
195
|
| LiveVoiceWebSocketData;
|
|
@@ -267,23 +202,6 @@ export class RuntimeHttpServer {
|
|
|
267
202
|
websocket: {
|
|
268
203
|
open: (ws) => {
|
|
269
204
|
const data = ws.data as AllWebSocketData;
|
|
270
|
-
if ("wsType" in data && data.wsType === "browser-relay") {
|
|
271
|
-
// When the JWT sub resolved to a guardian principal at upgrade
|
|
272
|
-
// time, register this connection with the chrome-extension
|
|
273
|
-
// registry so host_browser_request frames can be routed to it.
|
|
274
|
-
if (data.guardianId) {
|
|
275
|
-
const now = Date.now();
|
|
276
|
-
getChromeExtensionRegistry().register({
|
|
277
|
-
id: data.connectionId,
|
|
278
|
-
guardianId: data.guardianId,
|
|
279
|
-
clientInstanceId: data.clientInstanceId,
|
|
280
|
-
ws,
|
|
281
|
-
connectedAt: now,
|
|
282
|
-
lastActiveAt: now,
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
205
|
if ("wsType" in data && data.wsType === "media-stream") {
|
|
288
206
|
const msData = data as MediaStreamWebSocketData;
|
|
289
207
|
log.info(
|
|
@@ -392,129 +310,6 @@ export class RuntimeHttpServer {
|
|
|
392
310
|
typeof message === "string"
|
|
393
311
|
? message
|
|
394
312
|
: new TextDecoder().decode(message);
|
|
395
|
-
if ("wsType" in data && data.wsType === "browser-relay") {
|
|
396
|
-
// Inbound frames on `/v1/browser-relay` carry one of:
|
|
397
|
-
// - `host_browser_result` — paired response to an outbound
|
|
398
|
-
// `host_browser_request` (see PR2).
|
|
399
|
-
// - `host_browser_event` — unsolicited CDP event forwarded
|
|
400
|
-
// from the extension's `chrome.debugger.onEvent`
|
|
401
|
-
// subscription (PR10).
|
|
402
|
-
// - `host_browser_session_invalidated` — detach
|
|
403
|
-
// notification forwarded from the extension's
|
|
404
|
-
// `chrome.debugger.onDetach` subscription (PR10).
|
|
405
|
-
//
|
|
406
|
-
// Every supported frame type delegates into a shared
|
|
407
|
-
// resolver exported from `host-browser-routes.ts` so the
|
|
408
|
-
// validation and resolution semantics stay in lockstep
|
|
409
|
-
// with the HTTP path. Malformed or unsupported frames are
|
|
410
|
-
// logged at debug and swallowed — we never throw out of a
|
|
411
|
-
// WebSocket `message` handler because an uncaught
|
|
412
|
-
// exception would tear down the whole socket for an
|
|
413
|
-
// attacker-controlled payload.
|
|
414
|
-
let parsed: unknown;
|
|
415
|
-
try {
|
|
416
|
-
parsed = JSON.parse(raw);
|
|
417
|
-
} catch (err) {
|
|
418
|
-
log.debug(
|
|
419
|
-
{
|
|
420
|
-
connectionId: data.connectionId,
|
|
421
|
-
error: err instanceof Error ? err.message : String(err),
|
|
422
|
-
},
|
|
423
|
-
"browser-relay: dropped non-JSON inbound frame",
|
|
424
|
-
);
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
427
|
-
if (!parsed || typeof parsed !== "object") {
|
|
428
|
-
log.debug(
|
|
429
|
-
{ connectionId: data.connectionId },
|
|
430
|
-
"browser-relay: dropped non-object inbound frame",
|
|
431
|
-
);
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
const frame = parsed as Record<string, unknown>;
|
|
435
|
-
switch (frame.type) {
|
|
436
|
-
case "host_browser_result": {
|
|
437
|
-
const resolution = resolveHostBrowserResultByRequestId({
|
|
438
|
-
requestId: frame.requestId,
|
|
439
|
-
content: frame.content,
|
|
440
|
-
isError: frame.isError,
|
|
441
|
-
});
|
|
442
|
-
if (!resolution.ok) {
|
|
443
|
-
log.warn(
|
|
444
|
-
{
|
|
445
|
-
connectionId: data.connectionId,
|
|
446
|
-
requestId:
|
|
447
|
-
typeof frame.requestId === "string"
|
|
448
|
-
? frame.requestId
|
|
449
|
-
: undefined,
|
|
450
|
-
code: resolution.code,
|
|
451
|
-
message: resolution.message,
|
|
452
|
-
},
|
|
453
|
-
"browser-relay: host_browser_result frame rejected",
|
|
454
|
-
);
|
|
455
|
-
}
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
case "host_browser_event": {
|
|
459
|
-
const resolution = resolveHostBrowserEvent({
|
|
460
|
-
method: frame.method,
|
|
461
|
-
params: frame.params,
|
|
462
|
-
cdpSessionId: frame.cdpSessionId,
|
|
463
|
-
});
|
|
464
|
-
if (!resolution.ok) {
|
|
465
|
-
log.warn(
|
|
466
|
-
{
|
|
467
|
-
connectionId: data.connectionId,
|
|
468
|
-
method:
|
|
469
|
-
typeof frame.method === "string"
|
|
470
|
-
? frame.method
|
|
471
|
-
: undefined,
|
|
472
|
-
code: resolution.code,
|
|
473
|
-
message: resolution.message,
|
|
474
|
-
},
|
|
475
|
-
"browser-relay: host_browser_event frame rejected",
|
|
476
|
-
);
|
|
477
|
-
}
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
case "host_browser_session_invalidated": {
|
|
481
|
-
const resolution = resolveHostBrowserSessionInvalidated({
|
|
482
|
-
targetId: frame.targetId,
|
|
483
|
-
reason: frame.reason,
|
|
484
|
-
});
|
|
485
|
-
if (!resolution.ok) {
|
|
486
|
-
log.warn(
|
|
487
|
-
{
|
|
488
|
-
connectionId: data.connectionId,
|
|
489
|
-
targetId:
|
|
490
|
-
typeof frame.targetId === "string"
|
|
491
|
-
? frame.targetId
|
|
492
|
-
: undefined,
|
|
493
|
-
code: resolution.code,
|
|
494
|
-
message: resolution.message,
|
|
495
|
-
},
|
|
496
|
-
"browser-relay: host_browser_session_invalidated frame rejected",
|
|
497
|
-
);
|
|
498
|
-
}
|
|
499
|
-
return;
|
|
500
|
-
}
|
|
501
|
-
case "keepalive": {
|
|
502
|
-
// Extension keepalive frames refresh the connection's
|
|
503
|
-
// activity timestamp without producing log noise or
|
|
504
|
-
// altering routing semantics. Unknown extra keys on
|
|
505
|
-
// the frame are silently ignored (lenient validation).
|
|
506
|
-
getChromeExtensionRegistry().touch(data.connectionId);
|
|
507
|
-
return;
|
|
508
|
-
}
|
|
509
|
-
default: {
|
|
510
|
-
log.debug(
|
|
511
|
-
{ connectionId: data.connectionId, type: frame.type },
|
|
512
|
-
"browser-relay: dropped unsupported inbound frame type",
|
|
513
|
-
);
|
|
514
|
-
return;
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
313
|
if ("wsType" in data && data.wsType === "media-stream") {
|
|
519
314
|
const msData = data as MediaStreamWebSocketData;
|
|
520
315
|
msData.session?.handleMessage(raw);
|
|
@@ -564,15 +359,6 @@ export class RuntimeHttpServer {
|
|
|
564
359
|
},
|
|
565
360
|
close: (ws, code, reason) => {
|
|
566
361
|
const data = ws.data as AllWebSocketData;
|
|
567
|
-
if ("wsType" in data && data.wsType === "browser-relay") {
|
|
568
|
-
// Always attempt to unregister — the registry uses connectionId
|
|
569
|
-
// as the key and no-ops if the entry is absent (e.g. when the
|
|
570
|
-
// connection was never registered because guardianId was
|
|
571
|
-
// undefined, or when it was superseded by a newer registration
|
|
572
|
-
// for the same guardian).
|
|
573
|
-
getChromeExtensionRegistry().unregister(data.connectionId);
|
|
574
|
-
return;
|
|
575
|
-
}
|
|
576
362
|
if ("wsType" in data && data.wsType === "media-stream") {
|
|
577
363
|
const msData = data as MediaStreamWebSocketData;
|
|
578
364
|
log.info(
|
|
@@ -661,14 +447,16 @@ export class RuntimeHttpServer {
|
|
|
661
447
|
);
|
|
662
448
|
}
|
|
663
449
|
|
|
664
|
-
if (
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
450
|
+
if (isHttpAuthDisabled()) {
|
|
451
|
+
if (getIsPlatform()) {
|
|
452
|
+
log.info(
|
|
453
|
+
"DISABLE_HTTP_AUTH is set — HTTP auth disabled (expected: platform handles auth)",
|
|
454
|
+
);
|
|
455
|
+
} else {
|
|
456
|
+
log.warn(
|
|
457
|
+
"DISABLE_HTTP_AUTH is set — HTTP API authentication is DISABLED. All API endpoints are accessible without a bearer token.",
|
|
458
|
+
);
|
|
459
|
+
}
|
|
672
460
|
}
|
|
673
461
|
|
|
674
462
|
log.info(
|
|
@@ -769,13 +557,6 @@ export class RuntimeHttpServer {
|
|
|
769
557
|
return handleReadyz();
|
|
770
558
|
}
|
|
771
559
|
|
|
772
|
-
// WebSocket upgrade for the Chrome extension browser relay.
|
|
773
|
-
if (
|
|
774
|
-
path === "/v1/browser-relay" &&
|
|
775
|
-
req.headers.get("upgrade")?.toLowerCase() === "websocket"
|
|
776
|
-
) {
|
|
777
|
-
return this.handleBrowserRelayUpgrade(req, server);
|
|
778
|
-
}
|
|
779
560
|
|
|
780
561
|
// WebSocket upgrade for ConversationRelay — before auth check because
|
|
781
562
|
// Twilio WebSocket connections don't use bearer tokens.
|
|
@@ -864,19 +645,7 @@ export class RuntimeHttpServer {
|
|
|
864
645
|
|
|
865
646
|
// JWT bearer authentication — replaces the old shared-secret comparison.
|
|
866
647
|
// authenticateRequest handles dev bypass (DISABLE_HTTP_AUTH) internally.
|
|
867
|
-
|
|
868
|
-
// Special-case: /v1/host-browser-result POST accepts either a
|
|
869
|
-
// daemon-minted JWT (legacy/cloud) or a host_browser capability
|
|
870
|
-
// token (self-hosted chrome extension). The chrome extension's
|
|
871
|
-
// HTTP fallback (`postHostBrowserResult`) hands over the same
|
|
872
|
-
// capability token it presented to `/v1/browser-relay`, so the
|
|
873
|
-
// POST route must understand both auth shapes. Every other route
|
|
874
|
-
// keeps the JWT-only flow via `authenticateRequest`.
|
|
875
|
-
const normalizedPath = path.endsWith("/") ? path.slice(0, -1) : path;
|
|
876
|
-
const authResult =
|
|
877
|
-
normalizedPath === "/v1/host-browser-result" && req.method === "POST"
|
|
878
|
-
? await authenticateHostBrowserResultRequest(req)
|
|
879
|
-
: authenticateRequest(req);
|
|
648
|
+
const authResult = authenticateRequest(req);
|
|
880
649
|
if (!authResult.ok) {
|
|
881
650
|
return authResult.response;
|
|
882
651
|
}
|
|
@@ -958,144 +727,6 @@ export class RuntimeHttpServer {
|
|
|
958
727
|
return routerResponse ?? httpError("NOT_FOUND", "Not found", 404);
|
|
959
728
|
}
|
|
960
729
|
|
|
961
|
-
private async handleBrowserRelayUpgrade(
|
|
962
|
-
req: Request,
|
|
963
|
-
server: ReturnType<typeof Bun.serve>,
|
|
964
|
-
): Promise<Response> {
|
|
965
|
-
if (
|
|
966
|
-
!isLoopbackHost(new URL(req.url).hostname) &&
|
|
967
|
-
!isPrivateNetworkPeer(server, req)
|
|
968
|
-
) {
|
|
969
|
-
return httpError(
|
|
970
|
-
"FORBIDDEN",
|
|
971
|
-
"Browser relay only accepts connections from localhost",
|
|
972
|
-
403,
|
|
973
|
-
);
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
// When auth is enabled we accept two different kinds of token on the
|
|
977
|
-
// `/v1/browser-relay` handshake:
|
|
978
|
-
//
|
|
979
|
-
// 1. **Capability token** — a signed `host_browser_command`
|
|
980
|
-
// capability minted by the gateway and handed to the chrome
|
|
981
|
-
// extension by the native-messaging pair flow
|
|
982
|
-
// (`/v1/browser-extension-pair`). This is the preferred,
|
|
983
|
-
// self-hosted default: the extension never has to touch a
|
|
984
|
-
// gateway JWT.
|
|
985
|
-
// 2. **JWT** (audience `vellum-daemon`) — the legacy path used by
|
|
986
|
-
// the gateway-proxied cloud flow and by any compatibility
|
|
987
|
-
// callers that still hold a daemon-bound JWT. In that case we
|
|
988
|
-
// parse the JWT `sub` to extract the actor principal id and
|
|
989
|
-
// fall back to the explicit `x-guardian-id` / `guardianId`
|
|
990
|
-
// query param for service-token paths (see below).
|
|
991
|
-
//
|
|
992
|
-
// When auth is disabled (dev bypass), guardianId remains undefined
|
|
993
|
-
// and the registration is skipped — host_browser_request routing
|
|
994
|
-
// requires an authenticated guardian.
|
|
995
|
-
//
|
|
996
|
-
// Gateway path: when the WebSocket upgrade is proxied through the
|
|
997
|
-
// gateway, the upstream token minted by `mintServiceToken()` has
|
|
998
|
-
// `sub=svc:gateway:self` with no actor principal id. The gateway
|
|
999
|
-
// parses the downstream edge token's `actorPrincipalId` and forwards
|
|
1000
|
-
// it as an explicit `guardianId` query parameter (and/or header) so
|
|
1001
|
-
// we can register the connection under the real guardian. Missing
|
|
1002
|
-
// guardian context on this path is rejected (fail closed).
|
|
1003
|
-
// Read the client-supplied stable instance id off the handshake.
|
|
1004
|
-
// The extension generates this on first run and persists it in
|
|
1005
|
-
// chrome.storage so it survives service-worker restarts and
|
|
1006
|
-
// browser restarts. The header form is preferred so gateway
|
|
1007
|
-
// forwarding and proxy logs don't surface instance ids in the
|
|
1008
|
-
// URL, but we also accept a query param for fetch-based clients
|
|
1009
|
-
// that can't mutate headers. An empty string is treated as absent
|
|
1010
|
-
// so sparse clients don't end up all sharing the same legacy key.
|
|
1011
|
-
const rawInstanceHeader = req.headers.get("x-client-instance-id")?.trim();
|
|
1012
|
-
const rawInstanceQuery = new URL(req.url).searchParams
|
|
1013
|
-
.get("clientInstanceId")
|
|
1014
|
-
?.trim();
|
|
1015
|
-
const clientInstanceId =
|
|
1016
|
-
(rawInstanceHeader ?? "") || (rawInstanceQuery ?? "") || undefined;
|
|
1017
|
-
|
|
1018
|
-
let guardianId: string | undefined;
|
|
1019
|
-
if (!isHttpAuthDisabled()) {
|
|
1020
|
-
const wsUrl = new URL(req.url);
|
|
1021
|
-
const token = wsUrl.searchParams.get("token");
|
|
1022
|
-
if (!token) {
|
|
1023
|
-
return httpError("UNAUTHORIZED", "Unauthorized", 401);
|
|
1024
|
-
}
|
|
1025
|
-
// 1) Capability-token path (self-hosted default). The chrome
|
|
1026
|
-
// extension presents the token it received from the native
|
|
1027
|
-
// messaging pair flow. We derive `guardianId` from the
|
|
1028
|
-
// capability claims directly — the claims are HMAC-signed by
|
|
1029
|
-
// the same daemon so there is no cross-tenant risk.
|
|
1030
|
-
const capabilityClaims = await verifyHostBrowserCapability(token);
|
|
1031
|
-
if (capabilityClaims) {
|
|
1032
|
-
guardianId = capabilityClaims.guardianId;
|
|
1033
|
-
} else {
|
|
1034
|
-
// 2) JWT compatibility path (gateway / legacy). Fall back to the
|
|
1035
|
-
// existing verifyToken+parseSub flow so cloud callers and any
|
|
1036
|
-
// old self-hosted clients still holding a daemon JWT
|
|
1037
|
-
// continue to work during the cutover.
|
|
1038
|
-
const jwtResult = verifyToken(token, "vellum-daemon");
|
|
1039
|
-
if (!jwtResult.ok) {
|
|
1040
|
-
return httpError("UNAUTHORIZED", "Unauthorized", 401);
|
|
1041
|
-
}
|
|
1042
|
-
const subResult = parseSub(jwtResult.claims.sub);
|
|
1043
|
-
if (subResult.ok && subResult.actorPrincipalId) {
|
|
1044
|
-
// Direct actor principal — this is the loopback / desktop path.
|
|
1045
|
-
guardianId = subResult.actorPrincipalId;
|
|
1046
|
-
} else {
|
|
1047
|
-
// Service-token path (gateway-forwarded). The gateway must plumb
|
|
1048
|
-
// the resolved actor principal as an explicit `x-guardian-id`
|
|
1049
|
-
// header or `guardianId` query param. Header takes precedence
|
|
1050
|
-
// because headers are easier for the gateway to forward without
|
|
1051
|
-
// rewriting the URL.
|
|
1052
|
-
const headerGuardianId =
|
|
1053
|
-
req.headers.get("x-guardian-id")?.trim() ?? "";
|
|
1054
|
-
const queryGuardianId =
|
|
1055
|
-
wsUrl.searchParams.get("guardianId")?.trim() ?? "";
|
|
1056
|
-
const fallbackGuardianId = headerGuardianId || queryGuardianId;
|
|
1057
|
-
if (fallbackGuardianId) {
|
|
1058
|
-
guardianId = fallbackGuardianId;
|
|
1059
|
-
} else {
|
|
1060
|
-
// Fail closed: a service-token relay upgrade without a
|
|
1061
|
-
// guardian context cannot be routed safely. Allowing the
|
|
1062
|
-
// upgrade to proceed creates an unscoped socket that never
|
|
1063
|
-
// registers in the ChromeExtensionRegistry.
|
|
1064
|
-
log.warn(
|
|
1065
|
-
{
|
|
1066
|
-
principalType: subResult.ok
|
|
1067
|
-
? subResult.principalType
|
|
1068
|
-
: "unknown",
|
|
1069
|
-
sub: jwtResult.claims.sub,
|
|
1070
|
-
},
|
|
1071
|
-
"Browser relay upgrade denied: missing guardian context on service-token path",
|
|
1072
|
-
);
|
|
1073
|
-
return httpError(
|
|
1074
|
-
"UNAUTHORIZED",
|
|
1075
|
-
"Browser relay requires guardian context",
|
|
1076
|
-
401,
|
|
1077
|
-
);
|
|
1078
|
-
}
|
|
1079
|
-
}
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
const connectionId = crypto.randomUUID();
|
|
1084
|
-
const upgraded = server.upgrade(req, {
|
|
1085
|
-
data: {
|
|
1086
|
-
wsType: "browser-relay",
|
|
1087
|
-
connectionId,
|
|
1088
|
-
guardianId,
|
|
1089
|
-
clientInstanceId,
|
|
1090
|
-
} satisfies BrowserRelayWebSocketData,
|
|
1091
|
-
});
|
|
1092
|
-
if (!upgraded) {
|
|
1093
|
-
return new Response("WebSocket upgrade failed", { status: 500 });
|
|
1094
|
-
}
|
|
1095
|
-
// Bun's WebSocket upgrade consumes the request — no Response is sent.
|
|
1096
|
-
return undefined!;
|
|
1097
|
-
}
|
|
1098
|
-
|
|
1099
730
|
private verifyGatewayServiceToken(req: Request): Response | null {
|
|
1100
731
|
if (isHttpAuthDisabled()) return null;
|
|
1101
732
|
|
|
@@ -1446,21 +1077,4 @@ export class RuntimeHttpServer {
|
|
|
1446
1077
|
|
|
1447
1078
|
return null;
|
|
1448
1079
|
}
|
|
1449
|
-
|
|
1450
|
-
// ---------------------------------------------------------------------------
|
|
1451
|
-
// Declarative route table
|
|
1452
|
-
// ---------------------------------------------------------------------------
|
|
1453
|
-
|
|
1454
|
-
/**
|
|
1455
|
-
* Build the full set of route definitions. Routes are matched in order,
|
|
1456
|
-
* so more specific patterns (e.g. `calls/:id/cancel`) must precede
|
|
1457
|
-
* more general ones (e.g. `calls/:id`).
|
|
1458
|
-
*
|
|
1459
|
-
* Each domain's routes are defined in their own module under
|
|
1460
|
-
* `./routes/` and composed here via spread. The composition order
|
|
1461
|
-
* preserves the original top-to-bottom matching semantics.
|
|
1462
|
-
*/
|
|
1463
|
-
private buildRouteTable(): HTTPRouteDefinition[] {
|
|
1464
|
-
return [...routeDefinitionsToHTTPRoutes(ROUTES)];
|
|
1465
|
-
}
|
|
1466
1080
|
}
|
|
@@ -21,13 +21,8 @@ import type {
|
|
|
21
21
|
|
|
22
22
|
export type {
|
|
23
23
|
ApprovalCopyGenerator,
|
|
24
|
-
ApprovalMessageContext,
|
|
25
|
-
ApprovalMessageScenario,
|
|
26
24
|
ComposeApprovalMessageGenerativeOptions,
|
|
27
|
-
ComposeGuardianActionMessageOptions,
|
|
28
25
|
GuardianActionCopyGenerator,
|
|
29
|
-
GuardianActionMessageContext,
|
|
30
|
-
GuardianActionMessageScenario,
|
|
31
26
|
} from "./message-composer-types.js";
|
|
32
27
|
import type { TrustContext } from "../daemon/trust-context.js";
|
|
33
28
|
|
|
@@ -118,6 +113,8 @@ export interface RuntimeMessageConversationOptions {
|
|
|
118
113
|
isInteractive?: boolean;
|
|
119
114
|
/** Channel command intent metadata (e.g. Telegram /start). */
|
|
120
115
|
commandIntent?: { type: string; payload?: string; languageCode?: string };
|
|
116
|
+
/** Slack-only non-persisted notice injected into the active model turn. */
|
|
117
|
+
slackRuntimeContextNotice?: string;
|
|
121
118
|
/** Optional callback to receive real-time agent loop events (text deltas, tool starts, etc.). */
|
|
122
119
|
onEvent?: (msg: ServerMessage) => void;
|
|
123
120
|
/**
|
|
@@ -206,6 +203,9 @@ export interface RuntimeMessagePayload {
|
|
|
206
203
|
riskLevel?: string;
|
|
207
204
|
riskReason?: string;
|
|
208
205
|
autoApproved?: boolean;
|
|
206
|
+
approvalMode?: string;
|
|
207
|
+
approvalReason?: string;
|
|
208
|
+
riskThreshold?: string;
|
|
209
209
|
}>;
|
|
210
210
|
interfaces?: string[];
|
|
211
211
|
surfaces?: Array<{
|
|
@@ -12,26 +12,6 @@ export function isLoopbackHost(hostname: string): boolean {
|
|
|
12
12
|
);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* Stricter loopback-only check: accepts only 127.0.0.0/8, ::1, and their
|
|
17
|
-
* IPv4-mapped IPv6 forms (::ffff:127.x.x.x). Use this instead of
|
|
18
|
-
* isPrivateAddress for endpoints that must be restricted to the local
|
|
19
|
-
* machine in non-containerized deployments.
|
|
20
|
-
*/
|
|
21
|
-
export function isLoopbackAddress(addr: string): boolean {
|
|
22
|
-
const v4Mapped = addr.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i);
|
|
23
|
-
const normalized = v4Mapped ? v4Mapped[1] : addr;
|
|
24
|
-
|
|
25
|
-
if (normalized.includes(".")) {
|
|
26
|
-
const parts = normalized.split(".").map(Number);
|
|
27
|
-
if (parts.length !== 4 || parts.some((p) => isNaN(p) || p < 0 || p > 255))
|
|
28
|
-
return false;
|
|
29
|
-
return parts[0] === 127;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return normalized.toLowerCase() === "::1";
|
|
33
|
-
}
|
|
34
|
-
|
|
35
15
|
/**
|
|
36
16
|
* @internal Exported for testing.
|
|
37
17
|
*
|