@vellumai/assistant 0.4.42 → 0.4.43
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/.env.example +1 -6
- package/.prettierignore +3 -0
- package/ARCHITECTURE.md +131 -393
- package/Dockerfile +0 -1
- package/README.md +73 -83
- package/bun.lock +8 -2
- package/docs/architecture/integrations.md +16 -21
- package/docs/architecture/memory.md +1 -1
- package/docs/architecture/scheduling.md +63 -63
- package/docs/architecture/security.md +3 -3
- package/docs/runbook-trusted-contacts.md +11 -12
- package/docs/trusted-contact-access.md +39 -39
- package/package.json +5 -8
- package/src/__tests__/access-request-decision.test.ts +4 -4
- package/src/__tests__/active-skill-tools.test.ts +49 -34
- package/src/__tests__/actor-token-service.test.ts +55 -85
- package/src/__tests__/amazon-cdp-integration.test.ts +14 -26
- package/src/__tests__/app-bundler.test.ts +14 -368
- package/src/__tests__/app-compiler.test.ts +0 -1
- package/src/__tests__/app-executors.test.ts +10 -1
- package/src/__tests__/approval-hardcoded-copy-guard.test.ts +1 -1
- package/src/__tests__/approval-primitive.test.ts +2 -4
- package/src/__tests__/approval-routes-http.test.ts +1 -1
- package/src/__tests__/asset-materialize-tool.test.ts +1 -4
- package/src/__tests__/asset-search-tool.test.ts +1 -4
- package/src/__tests__/assistant-attachments.test.ts +23 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +4 -8
- package/src/__tests__/assistant-id-boundary-guard.test.ts +5 -5
- package/src/__tests__/attachments-store.test.ts +1 -4
- package/src/__tests__/avatar-e2e.test.ts +43 -23
- package/src/__tests__/browser-fill-credential.test.ts +1 -1
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +2 -9
- package/src/__tests__/call-controller.test.ts +4 -8
- package/src/__tests__/call-conversation-messages.test.ts +1 -1
- package/src/__tests__/call-domain.test.ts +250 -8
- package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
- package/src/__tests__/call-pointer-messages.test.ts +7 -11
- package/src/__tests__/call-recovery.test.ts +47 -0
- package/src/__tests__/call-routes-http.test.ts +13 -0
- package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
- package/src/__tests__/callback-handoff-copy.test.ts +5 -5
- package/src/__tests__/canonical-guardian-store.test.ts +3 -3
- package/src/__tests__/channel-approval-routes.test.ts +101 -134
- package/src/__tests__/channel-approval.test.ts +0 -201
- package/src/__tests__/channel-approvals.test.ts +2 -2
- package/src/__tests__/channel-delivery-store.test.ts +16 -24
- package/src/__tests__/channel-guardian.test.ts +641 -740
- package/src/__tests__/channel-invite-transport.test.ts +1 -2
- package/src/__tests__/channel-policy.test.ts +9 -12
- package/src/__tests__/channel-readiness-service.test.ts +156 -45
- package/src/__tests__/channel-reply-delivery.test.ts +3 -3
- package/src/__tests__/channel-retry-sweep.test.ts +7 -7
- package/src/__tests__/checker.test.ts +10 -7
- package/src/__tests__/chrome-cdp.test.ts +57 -17
- package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
- package/src/__tests__/compaction.benchmark.test.ts +25 -5
- package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
- package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
- package/src/__tests__/config-loader-backfill.test.ts +310 -0
- package/src/__tests__/config-watcher.test.ts +1 -5
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
- package/src/__tests__/connection-policy.test.ts +3 -62
- package/src/__tests__/contacts-tools.test.ts +0 -2
- package/src/__tests__/context-memory-e2e.test.ts +11 -7
- package/src/__tests__/context-overflow-policy.test.ts +2 -2
- package/src/__tests__/context-window-manager.test.ts +220 -61
- package/src/__tests__/conversation-attention-store.test.ts +178 -2
- package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
- package/src/__tests__/conversation-pairing.test.ts +14 -14
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +2 -2
- package/src/__tests__/conversation-unread-route.test.ts +155 -0
- package/src/__tests__/credential-metadata-store.test.ts +0 -2
- package/src/__tests__/credential-security-invariants.test.ts +9 -16
- package/src/__tests__/credentials-cli.test.ts +49 -5
- package/src/__tests__/daemon-assistant-events.test.ts +4 -22
- package/src/__tests__/db-migration-rollback.test.ts +2 -2
- package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
- package/src/__tests__/dictation-mode-detection.test.ts +1 -1
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
- package/src/__tests__/email-cli.test.ts +12 -12
- package/src/__tests__/email-service-config-fallback.test.ts +1 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
- package/src/__tests__/event-bus.test.ts +0 -1
- package/src/__tests__/followup-tools.test.ts +0 -2
- package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
- package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
- package/src/__tests__/gateway-only-guard.test.ts +5 -0
- package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
- package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
- package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
- package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
- package/src/__tests__/guardian-action-store.test.ts +2 -2
- package/src/__tests__/guardian-action-sweep.test.ts +5 -5
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
- package/src/__tests__/guardian-dispatch.test.ts +5 -46
- package/src/__tests__/guardian-grant-minting.test.ts +5 -44
- package/src/__tests__/guardian-outbound-http.test.ts +95 -114
- package/src/__tests__/guardian-question-mode.test.ts +1 -4
- package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
- package/src/__tests__/guardian-routing-state.test.ts +3 -3
- package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
- package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
- package/src/__tests__/headless-browser-interactions.test.ts +1 -1
- package/src/__tests__/headless-browser-navigate.test.ts +1 -1
- package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
- package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
- package/src/__tests__/heartbeat-service.test.ts +1 -1
- package/src/__tests__/home-base-bootstrap.test.ts +0 -2
- package/src/__tests__/host-shell-tool.test.ts +3 -12
- package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
- package/src/__tests__/ingress-url-consistency.test.ts +0 -64
- package/src/__tests__/integration-status.test.ts +8 -8
- package/src/__tests__/intent-routing.test.ts +9 -13
- package/src/__tests__/invite-redemption-service.test.ts +4 -4
- package/src/__tests__/invite-routes-http.test.ts +10 -10
- package/src/__tests__/llm-usage-store.test.ts +45 -9
- package/src/__tests__/local-gateway-health.test.ts +209 -0
- package/src/__tests__/managed-avatar-client.test.ts +23 -12
- package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
- package/src/__tests__/managed-store.test.ts +29 -12
- package/src/__tests__/managed-twitter-guardrails.test.ts +353 -0
- package/src/__tests__/mcp-cli.test.ts +1 -1
- package/src/__tests__/mcp-health-check.test.ts +1 -1
- package/src/__tests__/media-generate-image.test.ts +1 -1
- package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
- package/src/__tests__/memory-regressions.test.ts +1 -166
- package/src/__tests__/messaging-send-tool.test.ts +8 -4
- package/src/__tests__/migration-export-http.test.ts +2 -2
- package/src/__tests__/migration-transport.test.ts +44 -0
- package/src/__tests__/non-member-access-request.test.ts +49 -36
- package/src/__tests__/notification-broadcaster.test.ts +15 -15
- package/src/__tests__/notification-decision-fallback.test.ts +2 -2
- package/src/__tests__/notification-decision-strategy.test.ts +4 -4
- package/src/__tests__/notification-deep-link.test.ts +3 -3
- package/src/__tests__/notification-guardian-path.test.ts +6 -44
- package/src/__tests__/notification-routing-intent.test.ts +11 -7
- package/src/__tests__/oauth-cli.test.ts +1 -1
- package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
- package/src/__tests__/onboarding-template-contract.test.ts +2 -2
- package/src/__tests__/platform.test.ts +168 -5
- package/src/__tests__/playbook-execution.test.ts +0 -2
- package/src/__tests__/playbook-tools.test.ts +0 -2
- package/src/__tests__/pricing.test.ts +125 -0
- package/src/__tests__/provider-error-scenarios.test.ts +9 -3
- package/src/__tests__/recording-handler.test.ts +46 -80
- package/src/__tests__/recording-state-machine.test.ts +112 -183
- package/src/__tests__/registry.test.ts +1 -1
- package/src/__tests__/relay-server.test.ts +69 -71
- package/src/__tests__/reminder-store.test.ts +3 -3
- package/src/__tests__/request-file-tool.test.ts +2 -2
- package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
- package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
- package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
- package/src/__tests__/schedule-store.test.ts +13 -4
- package/src/__tests__/schedule-tools.test.ts +0 -2
- package/src/__tests__/scheduler-recurrence.test.ts +3 -4
- package/src/__tests__/scoped-approval-grants.test.ts +3 -5
- package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
- package/src/__tests__/secret-response-routing.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +1 -1
- package/src/__tests__/sequence-store.test.ts +0 -2
- package/src/__tests__/server-history-render.test.ts +2 -199
- package/src/__tests__/session-abort-tool-results.test.ts +9 -3
- package/src/__tests__/session-agent-loop.test.ts +107 -3
- package/src/__tests__/session-confirmation-signals.test.ts +10 -4
- package/src/__tests__/session-conflict-gate.test.ts +9 -3
- package/src/__tests__/session-init.benchmark.test.ts +22 -13
- package/src/__tests__/session-load-history-repair.test.ts +6 -3
- package/src/__tests__/session-pre-run-repair.test.ts +9 -3
- package/src/__tests__/session-profile-injection.test.ts +9 -3
- package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
- package/src/__tests__/session-queue.test.ts +10 -4
- package/src/__tests__/session-runtime-assembly.test.ts +28 -18
- package/src/__tests__/session-skill-tools.test.ts +2 -3
- package/src/__tests__/session-slash-known.test.ts +11 -4
- package/src/__tests__/session-slash-queue.test.ts +11 -4
- package/src/__tests__/session-slash-unknown.test.ts +12 -4
- package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
- package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
- package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
- package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
- package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
- package/src/__tests__/session-usage.test.ts +180 -0
- package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
- package/src/__tests__/session-workspace-injection.test.ts +8 -2
- package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
- package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
- package/src/__tests__/skill-feature-flags.test.ts +1 -0
- package/src/__tests__/skill-include-graph.test.ts +1 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
- package/src/__tests__/skill-load-tool.test.ts +90 -12
- package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
- package/src/__tests__/skills-uninstall.test.ts +131 -0
- package/src/__tests__/skills.test.ts +32 -16
- package/src/__tests__/slack-block-formatting.test.ts +1 -1
- package/src/__tests__/slack-channel-config.test.ts +71 -12
- package/src/__tests__/slack-inbound-verification.test.ts +7 -7
- package/src/__tests__/slack-share-routes.test.ts +1 -1
- package/src/__tests__/slack-skill.test.ts +2 -2
- package/src/__tests__/slash-commands-catalog.test.ts +1 -0
- package/src/__tests__/slash-commands-resolver.test.ts +1 -0
- package/src/__tests__/starter-task-flow.test.ts +1 -1
- package/src/__tests__/subagent-manager-notify.test.ts +1 -1
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +4 -8
- package/src/__tests__/task-compiler.test.ts +0 -2
- package/src/__tests__/task-management-tools.test.ts +0 -2
- package/src/__tests__/task-runner.test.ts +0 -2
- package/src/__tests__/task-scheduler.test.ts +2 -2
- package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
- package/src/__tests__/terminal-tools.test.ts +1 -11
- package/src/__tests__/thread-seed-composer.test.ts +3 -1
- package/src/__tests__/tool-approval-handler.test.ts +5 -7
- package/src/__tests__/tool-executor.test.ts +2 -2
- package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
- package/src/__tests__/tool-notification-listener.test.ts +1 -1
- package/src/__tests__/tool-profiling-listener.test.ts +1 -1
- package/src/__tests__/tool-trace-listener.test.ts +1 -2
- package/src/__tests__/trace-emitter.test.ts +1 -1
- package/src/__tests__/trust-context-guards.test.ts +1 -1
- package/src/__tests__/trust-store.test.ts +44 -395
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
- package/src/__tests__/trusted-contact-verification.test.ts +12 -12
- package/src/__tests__/twilio-config.test.ts +11 -2
- package/src/__tests__/twilio-provider.test.ts +6 -4
- package/src/__tests__/twilio-routes.test.ts +408 -86
- package/src/__tests__/twitter-platform-proxy-client.test.ts +450 -0
- package/src/__tests__/update-bulletin-format.test.ts +1 -1
- package/src/__tests__/update-bulletin-state.test.ts +1 -1
- package/src/__tests__/update-bulletin.test.ts +4 -8
- package/src/__tests__/update-template-contract.test.ts +1 -1
- package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
- package/src/__tests__/usage-routes.test.ts +23 -5
- package/src/__tests__/user-reference.test.ts +1 -1
- package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
- package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
- package/src/__tests__/view-image-tool.test.ts +0 -2
- package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
- package/src/__tests__/voice-invite-redemption.test.ts +18 -18
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
- package/src/__tests__/voice-session-bridge.test.ts +14 -16
- package/src/__tests__/workspace-policy.test.ts +1 -1
- package/src/approvals/AGENTS.md +4 -4
- package/src/approvals/approval-primitive.ts +2 -2
- package/src/approvals/guardian-decision-primitive.ts +1 -1
- package/src/approvals/guardian-request-resolvers.ts +3 -4
- package/src/bundler/app-bundler.ts +29 -217
- package/src/calls/active-call-lease.ts +207 -0
- package/src/calls/call-constants.ts +0 -7
- package/src/calls/call-controller.ts +1 -1
- package/src/calls/call-conversation-messages.ts +6 -6
- package/src/calls/call-domain.ts +73 -38
- package/src/calls/call-pointer-message-composer.ts +6 -6
- package/src/calls/call-pointer-messages.ts +14 -13
- package/src/calls/call-recovery.ts +2 -0
- package/src/calls/call-store.ts +21 -28
- package/src/calls/guardian-action-sweep.ts +6 -8
- package/src/calls/guardian-dispatch.ts +2 -6
- package/src/calls/relay-access-wait.ts +4 -4
- package/src/calls/relay-server.ts +69 -80
- package/src/calls/relay-setup-router.ts +16 -21
- package/src/calls/relay-verification.ts +27 -28
- package/src/calls/twilio-config.ts +28 -3
- package/src/calls/twilio-provider.ts +5 -5
- package/src/calls/twilio-rest.ts +26 -27
- package/src/calls/twilio-routes.ts +67 -54
- package/src/calls/types.ts +8 -8
- package/src/calls/voice-ingress-preflight.ts +110 -0
- package/src/calls/voice-session-bridge.ts +7 -7
- package/src/channels/config.ts +1 -10
- package/src/{config/channel-permission-profiles.ts → channels/permission-profiles.ts} +1 -1
- package/src/channels/types.ts +2 -13
- package/src/cli/__tests__/notifications.test.ts +1 -1
- package/src/{amazon → cli/commands/amazon}/client.ts +99 -42
- package/src/cli/{amazon.ts → commands/amazon/index.ts} +12 -17
- package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
- package/src/cli/commands/amazon/session.ts +116 -0
- package/src/cli/{audit.ts → commands/audit.ts} +2 -4
- package/src/cli/{autonomy.ts → commands/autonomy.ts} +1 -3
- package/src/cli/commands/browser-relay.ts +520 -0
- package/src/cli/commands/channel-verification-sessions.ts +442 -0
- package/src/cli/{completions.ts → commands/completions.ts} +1 -3
- package/src/cli/{config.ts → commands/config.ts} +3 -5
- package/src/cli/{contacts.ts → commands/contacts.ts} +15 -17
- package/src/cli/{credentials.ts → commands/credentials.ts} +9 -10
- package/src/cli/{default-action.ts → commands/default-action.ts} +3 -3
- package/src/cli/{dev.ts → commands/dev.ts} +4 -6
- package/src/cli/{doctor.ts → commands/doctor.ts} +36 -60
- package/src/cli/{email.ts → commands/email.ts} +2 -2
- package/src/cli/{keys.ts → commands/keys.ts} +6 -6
- package/src/cli/{map.ts → commands/map.ts} +85 -93
- package/src/cli/{mcp.ts → commands/mcp.ts} +5 -7
- package/src/cli/{memory.ts → commands/memory.ts} +6 -7
- package/src/cli/{notifications.ts → commands/notifications.ts} +8 -10
- package/src/cli/{oauth.ts → commands/oauth.ts} +2 -2
- package/src/cli/commands/platform.ts +176 -0
- package/src/cli/{sequence.ts → commands/sequence.ts} +3 -3
- package/src/cli/{sessions.ts → commands/sessions.ts} +32 -52
- package/src/cli/commands/skills.ts +498 -0
- package/src/cli/{trust.ts → commands/trust.ts} +2 -4
- package/src/{__tests__/twitter-cli-error-shaping.test.ts → cli/commands/twitter/__tests__/cli-error-shaping.test.ts} +43 -2
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +483 -0
- package/src/{__tests__/twitter-cli-routing.test.ts → cli/commands/twitter/__tests__/cli-routing.test.ts} +130 -4
- package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -2
- package/src/{twitter → cli/commands/twitter}/client.ts +17 -7
- package/src/cli/{twitter.ts → commands/twitter/index.ts} +322 -273
- package/src/cli/commands/twitter/router.ts +396 -0
- package/src/cli/commands/twitter/session.ts +121 -0
- package/src/cli/db.ts +1 -0
- package/src/cli/http-client.ts +87 -0
- package/src/cli/logger.ts +6 -0
- package/src/cli/main-screen.tsx +4 -3
- package/src/cli/output.ts +19 -0
- package/src/cli/program.ts +29 -27
- package/src/cli/reference.ts +27 -37
- package/src/cli.ts +452 -240
- package/src/config/assistant-feature-flags.ts +3 -15
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
- package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
- package/src/config/bundled-skills/amazon/SKILL.md +15 -5
- package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
- package/src/config/bundled-skills/app-builder/SKILL.md +4 -3
- package/src/config/bundled-skills/browser/SKILL.md +4 -5
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +4 -4
- package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +4 -4
- package/src/config/bundled-skills/cli-discover/SKILL.md +4 -4
- package/src/config/bundled-skills/computer-use/SKILL.md +4 -4
- package/src/config/bundled-skills/contacts/SKILL.md +23 -77
- package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +4 -4
- package/src/config/bundled-skills/document/SKILL.md +4 -3
- package/src/config/bundled-skills/document-writer/SKILL.md +4 -4
- package/src/config/bundled-skills/doordash/SKILL.md +4 -11
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +8 -16
- package/src/config/bundled-skills/doordash/doordash-cli.ts +120 -86
- package/src/config/bundled-skills/doordash/lib/session.ts +1 -2
- package/src/config/bundled-skills/doordash/lib/shared/platform.ts +26 -9
- package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +140 -0
- package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/followups/SKILL.md +4 -3
- package/src/config/bundled-skills/frontend-design/SKILL.md +2 -0
- package/src/config/bundled-skills/google-calendar/SKILL.md +4 -4
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +4 -6
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +26 -41
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -5
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
- package/src/config/bundled-skills/influencer/SKILL.md +19 -19
- package/src/{influencer → config/bundled-skills/influencer/scripts}/client.ts +73 -56
- package/src/config/bundled-skills/influencer/scripts/influencer.ts +267 -0
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -2
- package/src/config/bundled-skills/macos-automation/SKILL.md +4 -5
- package/src/config/bundled-skills/mcp-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/media-processing/SKILL.md +3 -2
- package/src/config/bundled-skills/messaging/SKILL.md +6 -33
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -5
- package/src/config/bundled-skills/notifications/SKILL.md +4 -4
- package/src/config/bundled-skills/notion/SKILL.md +4 -4
- package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/oauth-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/phone-calls/SKILL.md +24 -458
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +83 -0
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +57 -0
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +67 -0
- package/src/config/bundled-skills/playbooks/SKILL.md +4 -3
- package/src/config/bundled-skills/public-ingress/SKILL.md +65 -14
- package/src/config/bundled-skills/reminder/SKILL.md +4 -3
- package/src/config/bundled-skills/restaurant-reservation/SKILL.md +4 -6
- package/src/config/bundled-skills/schedule/SKILL.md +4 -3
- package/src/config/bundled-skills/screen-recording/SKILL.md +4 -3
- package/src/config/bundled-skills/self-upgrade/SKILL.md +4 -4
- package/src/config/bundled-skills/skills-catalog/SKILL.md +4 -4
- package/src/config/bundled-skills/slack/SKILL.md +4 -8
- package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +1 -1
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +66 -88
- package/src/config/bundled-skills/slack-digest-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/start-the-day/SKILL.md +4 -4
- package/src/config/bundled-skills/subagent/SKILL.md +4 -3
- package/src/config/bundled-skills/tasks/SKILL.md +4 -3
- package/src/config/bundled-skills/telegram-setup/SKILL.md +63 -112
- package/src/config/bundled-skills/time-based-actions/SKILL.md +4 -3
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -3
- package/src/config/bundled-skills/twilio-setup/SKILL.md +23 -50
- package/src/config/bundled-skills/twitter/SKILL.md +56 -14
- package/src/config/bundled-skills/typescript-eval/SKILL.md +4 -4
- package/src/config/bundled-skills/vercel-token-setup/SKILL.md +4 -5
- package/src/config/bundled-skills/voice-setup/SKILL.md +19 -45
- package/src/config/bundled-skills/watcher/SKILL.md +4 -3
- package/src/config/env-registry.ts +1 -10
- package/src/config/feature-flag-registry.json +0 -16
- package/src/config/loader.ts +78 -38
- package/src/config/schema.ts +143 -106
- package/src/config/schemas/channels.ts +80 -0
- package/src/config/schemas/heartbeat.ts +51 -0
- package/src/config/schemas/inference.ts +136 -0
- package/src/config/schemas/ingress.ts +81 -0
- package/src/config/schemas/logging.ts +21 -0
- package/src/config/schemas/memory-lifecycle.ts +67 -0
- package/src/config/schemas/memory-processing.ts +215 -0
- package/src/config/schemas/memory-retrieval.ts +222 -0
- package/src/config/schemas/memory-storage.ts +83 -0
- package/src/config/schemas/memory.ts +58 -0
- package/src/config/schemas/platform.ts +64 -0
- package/src/config/schemas/security.ts +54 -0
- package/src/config/schemas/swarm.ts +50 -0
- package/src/config/schemas/timeouts.ts +47 -0
- package/src/config/{agent-schema.ts → schemas/workspace-git.ts} +0 -97
- package/src/config/skill-state.ts +3 -13
- package/src/config/skills.ts +196 -75
- package/src/config/types.ts +1 -20
- package/src/contacts/contact-store.ts +12 -49
- package/src/contacts/contacts-write.ts +1 -5
- package/src/contacts/index.ts +0 -2
- package/src/contacts/types.ts +0 -8
- package/src/context/window-manager.ts +73 -14
- package/src/daemon/assistant-attachments.ts +9 -0
- package/src/daemon/computer-use-session.ts +3 -3
- package/src/daemon/connection-policy.ts +6 -21
- package/src/daemon/context-overflow-policy.ts +1 -1
- package/src/daemon/daemon-control.ts +46 -54
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/config-channels.ts +407 -71
- package/src/daemon/handlers/config-ingress.ts +17 -85
- package/src/daemon/handlers/config-model.ts +145 -123
- package/src/daemon/handlers/config-slack-channel.ts +43 -29
- package/src/daemon/handlers/config-telegram.ts +32 -27
- package/src/daemon/handlers/config-voice.ts +1 -4
- package/src/daemon/handlers/dictation.ts +11 -16
- package/src/daemon/handlers/identity.ts +5 -6
- package/src/daemon/handlers/pairing.ts +5 -13
- package/src/daemon/handlers/recording.ts +97 -199
- package/src/daemon/handlers/session-history.ts +110 -96
- package/src/daemon/handlers/session-user-message.ts +29 -57
- package/src/daemon/handlers/sessions.ts +240 -137
- package/src/daemon/handlers/shared.ts +62 -95
- package/src/daemon/handlers/skills.ts +492 -543
- package/src/daemon/lifecycle.ts +168 -55
- package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
- package/src/daemon/{ipc-contract → message-types}/computer-use.ts +0 -3
- package/src/daemon/{ipc-contract → message-types}/diagnostics.ts +0 -16
- package/src/daemon/{ipc-contract → message-types}/integrations.ts +29 -13
- package/src/daemon/{ipc-contract → message-types}/memory.ts +8 -0
- package/src/daemon/{ipc-contract → message-types}/notifications.ts +15 -1
- package/src/daemon/{ipc-contract → message-types}/sessions.ts +1 -0
- package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
- package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
- package/src/daemon/providers-setup.ts +0 -5
- package/src/daemon/recording-executor.ts +0 -7
- package/src/daemon/ride-shotgun-handler.ts +9 -13
- package/src/daemon/server.ts +136 -510
- package/src/daemon/session-agent-loop-handlers.ts +22 -7
- package/src/daemon/session-agent-loop.ts +86 -24
- package/src/daemon/session-attachments.ts +1 -1
- package/src/daemon/session-error.ts +1 -1
- package/src/daemon/session-history.ts +20 -15
- package/src/daemon/session-lifecycle.ts +9 -7
- package/src/daemon/session-memory.ts +15 -1
- package/src/daemon/session-messaging.ts +10 -6
- package/src/daemon/session-notifiers.ts +10 -8
- package/src/daemon/session-process.ts +34 -25
- package/src/daemon/session-queue-manager.ts +1 -1
- package/src/daemon/session-runtime-assembly.ts +6 -25
- package/src/daemon/session-surfaces.ts +2 -2
- package/src/daemon/session-tool-setup.ts +1 -1
- package/src/daemon/session-usage.ts +119 -18
- package/src/daemon/session.ts +13 -9
- package/src/daemon/tool-side-effects.ts +6 -5
- package/src/daemon/trace-emitter.ts +1 -1
- package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
- package/src/daemon/watch-handler.ts +2 -5
- package/src/email/service.ts +8 -8
- package/src/events/domain-events.ts +0 -1
- package/src/events/tool-notification-listener.ts +1 -1
- package/src/followups/followup-store.ts +1 -2
- package/src/followups/types.ts +0 -6
- package/src/heartbeat/heartbeat-service.ts +1 -1
- package/src/inbound/platform-callback-registration.ts +1 -1
- package/src/inbound/public-ingress-urls.ts +0 -8
- package/src/index.ts +12 -0
- package/src/mcp/client.ts +1 -1
- package/src/mcp/manager.ts +1 -1
- package/src/memory/app-store.ts +1 -42
- package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
- package/src/memory/conversation-attention-store.ts +154 -0
- package/src/memory/conversation-bootstrap.ts +1 -1
- package/src/memory/conversation-crud.ts +53 -1
- package/src/memory/conversation-display-order-migration.ts +2 -3
- package/src/memory/conversation-queries.ts +1 -29
- package/src/memory/conversation-title-service.ts +26 -21
- package/src/memory/db-connection.ts +1 -8
- package/src/memory/db-init.ts +20 -0
- package/src/memory/delivery-crud.ts +4 -34
- package/src/memory/external-conversation-store.ts +1 -1
- package/src/memory/format-recall.ts +47 -0
- package/src/memory/guardian-action-store.ts +4 -5
- package/src/memory/guardian-rate-limits.ts +0 -3
- package/src/memory/invite-store.ts +1 -1
- package/src/memory/job-handlers/backfill.ts +9 -2
- package/src/memory/job-handlers/extraction.ts +2 -7
- package/src/memory/job-handlers/summarization.ts +1 -1
- package/src/memory/llm-usage-store.ts +11 -0
- package/src/memory/migrations/114-notifications.ts +12 -40
- package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
- package/src/memory/migrations/141-rename-verification-table.ts +55 -0
- package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
- package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
- package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
- package/src/memory/migrations/index.ts +5 -0
- package/src/memory/migrations/registry.ts +30 -0
- package/src/memory/qdrant-circuit-breaker.ts +5 -0
- package/src/memory/retriever.test.ts +707 -0
- package/src/memory/retriever.ts +120 -116
- package/src/memory/schema/calls.ts +3 -7
- package/src/memory/schema/guardian.ts +2 -2
- package/src/memory/search/lexical.ts +4 -1
- package/src/memory/search/query-expansion.test.ts +70 -0
- package/src/memory/search/query-expansion.ts +118 -0
- package/src/memory/search/types.ts +18 -17
- package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
- package/src/messaging/providers/whatsapp/adapter.ts +1 -4
- package/src/messaging/registry.ts +0 -1
- package/src/notifications/README.md +13 -22
- package/src/notifications/adapters/macos.ts +1 -1
- package/src/notifications/conversation-pairing.ts +2 -2
- package/src/notifications/copy-composer.ts +2 -2
- package/src/notifications/decision-engine.ts +1 -10
- package/src/notifications/destination-resolver.ts +2 -3
- package/src/notifications/emit-signal.ts +2 -8
- package/src/notifications/guardian-question-mode.ts +5 -8
- package/src/notifications/signal.ts +1 -2
- package/src/notifications/types.ts +1 -1
- package/src/oauth/token-persistence.ts +25 -1
- package/src/permissions/checker.ts +4 -29
- package/src/permissions/defaults.ts +6 -6
- package/src/permissions/prompter.ts +1 -1
- package/src/permissions/secret-prompter.ts +1 -1
- package/src/permissions/shell-identity.ts +1 -1
- package/src/permissions/trust-store.ts +13 -76
- package/src/permissions/workspace-policy.ts +1 -1
- package/src/{config → prompts}/computer-use-prompt.ts +1 -1
- package/src/{config → prompts}/system-prompt.ts +40 -21
- package/src/runtime/AGENTS.md +6 -8
- package/src/runtime/access-request-helper.ts +36 -55
- package/src/runtime/actor-trust-resolver.ts +1 -24
- package/src/runtime/approval-message-composer.ts +6 -2
- package/src/runtime/assistant-event.ts +1 -1
- package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
- package/src/runtime/auth/__tests__/subject.test.ts +32 -0
- package/src/runtime/auth/route-policy.ts +140 -24
- package/src/runtime/auth/subject.ts +9 -0
- package/src/runtime/auth/token-service.ts +11 -0
- package/src/runtime/auth/types.ts +1 -1
- package/src/runtime/channel-approval-types.ts +1 -1
- package/src/runtime/channel-approvals.ts +1 -1
- package/src/runtime/channel-invite-transport.ts +0 -2
- package/src/runtime/channel-invite-transports/slack.ts +5 -19
- package/src/runtime/channel-invite-transports/telegram.ts +17 -34
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-readiness-service.ts +24 -159
- package/src/runtime/channel-readiness-types.ts +5 -1
- package/src/runtime/channel-reply-delivery.ts +43 -3
- package/src/runtime/channel-retry-sweep.ts +14 -22
- package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
- package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
- package/src/runtime/gateway-client.ts +12 -15
- package/src/runtime/guardian-action-followup-executor.ts +8 -73
- package/src/runtime/guardian-action-grant-minter.ts +45 -61
- package/src/runtime/guardian-action-message-composer.ts +4 -4
- package/src/runtime/guardian-reply-router.ts +3 -3
- package/src/runtime/http-server.ts +133 -24
- package/src/runtime/http-types.ts +34 -1
- package/src/runtime/invite-instruction-generator.ts +1 -3
- package/src/runtime/invite-redemption-service.ts +5 -5
- package/src/runtime/invite-service.ts +7 -7
- package/src/runtime/local-actor-identity.ts +28 -2
- package/src/runtime/local-gateway-health.ts +275 -0
- package/src/runtime/middleware/twilio-validation.ts +3 -3
- package/src/runtime/migrations/migration-transport.ts +18 -3
- package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
- package/src/runtime/nl-approval-parser.ts +2 -3
- package/src/runtime/routes/access-request-decision.ts +2 -2
- package/src/runtime/routes/app-management-routes.ts +921 -0
- package/src/runtime/routes/approval-routes.ts +76 -7
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
- package/src/runtime/routes/channel-delivery-routes.ts +5 -4
- package/src/runtime/routes/channel-route-shared.ts +1 -3
- package/src/runtime/routes/channel-routes.ts +1 -4
- package/src/runtime/routes/channel-verification-routes.ts +257 -0
- package/src/runtime/routes/computer-use-routes.ts +595 -0
- package/src/runtime/routes/contact-routes.ts +1 -317
- package/src/runtime/routes/conversation-attention-routes.ts +6 -5
- package/src/runtime/routes/conversation-routes.ts +11 -18
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/diagnostics-routes.ts +813 -0
- package/src/runtime/routes/documents-routes.ts +227 -0
- package/src/runtime/routes/guardian-approval-interception.ts +25 -48
- package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
- package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
- package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
- package/src/runtime/routes/inbound-conversation.ts +3 -10
- package/src/runtime/routes/inbound-message-handler.ts +7 -6
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
- package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
- package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
- package/src/runtime/routes/integrations/slack/channel.ts +72 -0
- package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
- package/src/runtime/routes/integrations/telegram.ts +111 -0
- package/src/runtime/routes/integrations/twilio.ts +451 -0
- package/src/runtime/routes/invite-routes.ts +2 -2
- package/src/runtime/routes/pairing-routes.ts +1 -1
- package/src/runtime/routes/recording-routes.ts +332 -0
- package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
- package/src/runtime/routes/session-management-routes.ts +167 -0
- package/src/runtime/routes/session-query-routes.ts +204 -0
- package/src/runtime/routes/settings-routes.ts +977 -0
- package/src/runtime/routes/skills-routes.ts +266 -0
- package/src/runtime/routes/subagents-routes.ts +246 -0
- package/src/runtime/routes/surface-action-routes.ts +100 -10
- package/src/runtime/routes/surface-content-routes.ts +1 -1
- package/src/runtime/routes/work-items-routes.ts +809 -0
- package/src/runtime/routes/workspace-routes.test.ts +778 -0
- package/src/runtime/routes/workspace-routes.ts +410 -0
- package/src/runtime/routes/workspace-utils.ts +88 -0
- package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
- package/src/runtime/telegram-streaming-delivery.ts +380 -0
- package/src/runtime/tool-grant-request-helper.ts +1 -2
- package/src/runtime/trust-context-resolver.ts +0 -1
- package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
- package/src/runtime/verification-rate-limiter.ts +2 -2
- package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
- package/src/schedule/integration-status.ts +2 -2
- package/src/schedule/schedule-store.ts +7 -9
- package/src/sequence/engine.ts +1 -1
- package/src/skills/active-skill-tools.ts +0 -8
- package/src/skills/clawhub.ts +1 -10
- package/src/skills/managed-store.ts +14 -4
- package/src/skills/slash-commands.ts +1 -1
- package/src/subagent/manager.ts +1 -1
- package/src/subagent/types.ts +1 -1
- package/src/tasks/SPEC.md +10 -10
- package/src/tasks/task-scheduler.ts +1 -1
- package/src/telegram/bot-username.ts +13 -0
- package/src/tools/assets/materialize.ts +1 -1
- package/src/tools/assets/search.ts +1 -1
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/browser-manager.ts +88 -11
- package/src/tools/browser/browser-screencast.ts +1 -1
- package/src/tools/browser/headless-browser.ts +0 -17
- package/src/tools/browser/jit-auth.ts +1 -1
- package/src/tools/browser/recording-store.ts +19 -1
- package/src/tools/browser/runtime-check.ts +4 -2
- package/src/tools/calls/call-start.ts +3 -3
- package/src/tools/credentials/metadata-store.ts +0 -13
- package/src/tools/credentials/vault.ts +7 -31
- package/src/tools/followups/followup_create.ts +0 -8
- package/src/tools/mcp/mcp-tool-factory.ts +1 -1
- package/src/tools/memory/definitions.ts +32 -10
- package/src/tools/memory/handlers.test.ts +573 -0
- package/src/tools/memory/handlers.ts +222 -65
- package/src/tools/memory/register.ts +53 -24
- package/src/tools/network/script-proxy/session-manager.ts +1 -12
- package/src/tools/schedule/update.ts +0 -8
- package/src/tools/skills/load.ts +3 -3
- package/src/tools/subagent/read.ts +1 -1
- package/src/tools/system/voice-config.ts +2 -14
- package/src/tools/terminal/safe-env.ts +5 -18
- package/src/tools/tool-approval-handler.ts +4 -4
- package/src/tools/tool-manifest.ts +4 -2
- package/src/tools/types.ts +1 -1
- package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
- package/src/twitter/platform-proxy-client.ts +405 -0
- package/src/usage/types.ts +21 -0
- package/src/util/canonicalize-identity.ts +2 -6
- package/src/util/cookie-session.ts +35 -51
- package/src/util/platform.ts +93 -86
- package/src/util/pricing.ts +180 -43
- package/src/work-items/work-item-runner.ts +1 -1
- package/scripts/ipc/check-contract-inventory.ts +0 -107
- package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
- package/scripts/ipc/generate-swift.ts +0 -528
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
- package/src/__tests__/app-migration.test.ts +0 -148
- package/src/__tests__/config-loader-migration.test.ts +0 -85
- package/src/__tests__/daemon-lifecycle.test.ts +0 -715
- package/src/__tests__/daemon-server-session-init.test.ts +0 -864
- package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
- package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
- package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
- package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
- package/src/__tests__/handlers-slack-config.test.ts +0 -140
- package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
- package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
- package/src/__tests__/ingress-reconcile.test.ts +0 -606
- package/src/__tests__/integrations-cli.test.ts +0 -232
- package/src/__tests__/ipc-blob-store.test.ts +0 -329
- package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
- package/src/__tests__/ipc-contract.test.ts +0 -76
- package/src/__tests__/ipc-protocol.test.ts +0 -120
- package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
- package/src/__tests__/ipc-snapshot.test.ts +0 -2197
- package/src/__tests__/ipc-validate.test.ts +0 -471
- package/src/__tests__/migration-cli-flows.test.ts +0 -186
- package/src/__tests__/migration-ordering.test.ts +0 -267
- package/src/__tests__/oauth-connect-handler.test.ts +0 -361
- package/src/__tests__/platform-move-helper.test.ts +0 -108
- package/src/__tests__/platform-socket-path.test.ts +0 -52
- package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
- package/src/__tests__/recording-intent-handler.test.ts +0 -1155
- package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
- package/src/__tests__/sms-messaging-provider.test.ts +0 -156
- package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
- package/src/__tests__/twitter-auth-handler.test.ts +0 -561
- package/src/__tests__/work-item-output.test.ts +0 -150
- package/src/amazon/session.ts +0 -58
- package/src/cli/channels.ts +0 -51
- package/src/cli/influencer.ts +0 -319
- package/src/cli/integrations.ts +0 -372
- package/src/cli/ipc-client.ts +0 -88
- package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
- package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
- package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
- package/src/config/core-schema.ts +0 -434
- package/src/config/memory-schema.ts +0 -617
- package/src/daemon/auth-manager.ts +0 -106
- package/src/daemon/handlers/apps.ts +0 -783
- package/src/daemon/handlers/avatar.ts +0 -73
- package/src/daemon/handlers/browser.ts +0 -3
- package/src/daemon/handlers/computer-use.ts +0 -231
- package/src/daemon/handlers/config-dispatch.ts +0 -29
- package/src/daemon/handlers/config-heartbeat.ts +0 -299
- package/src/daemon/handlers/config-inbox.ts +0 -457
- package/src/daemon/handlers/config-integrations.ts +0 -409
- package/src/daemon/handlers/config-platform.ts +0 -77
- package/src/daemon/handlers/config-slack.ts +0 -41
- package/src/daemon/handlers/config-tools.ts +0 -226
- package/src/daemon/handlers/config-trust.ts +0 -135
- package/src/daemon/handlers/config.ts +0 -64
- package/src/daemon/handlers/contacts.ts +0 -193
- package/src/daemon/handlers/diagnostics.ts +0 -382
- package/src/daemon/handlers/documents.ts +0 -188
- package/src/daemon/handlers/guardian-actions.ts +0 -82
- package/src/daemon/handlers/home-base.ts +0 -82
- package/src/daemon/handlers/index.ts +0 -222
- package/src/daemon/handlers/misc.ts +0 -1139
- package/src/daemon/handlers/navigate-settings.ts +0 -29
- package/src/daemon/handlers/oauth-connect.ts +0 -202
- package/src/daemon/handlers/open-bundle-handler.ts +0 -88
- package/src/daemon/handlers/publish.ts +0 -176
- package/src/daemon/handlers/signing.ts +0 -56
- package/src/daemon/handlers/subagents.ts +0 -286
- package/src/daemon/handlers/twitter-auth.ts +0 -220
- package/src/daemon/handlers/work-items.ts +0 -796
- package/src/daemon/handlers/workspace-files.ts +0 -84
- package/src/daemon/handlers.ts +0 -16
- package/src/daemon/ipc-blob-store.ts +0 -246
- package/src/daemon/ipc-contract-inventory.json +0 -348
- package/src/daemon/ipc-contract-inventory.ts +0 -202
- package/src/daemon/ipc-handler.ts +0 -120
- package/src/daemon/ipc-protocol.ts +0 -85
- package/src/daemon/ipc-validate.ts +0 -254
- package/src/memory/app-migration.ts +0 -114
- package/src/memory/channel-delivery-store.ts +0 -40
- package/src/memory/channel-guardian-store.ts +0 -83
- package/src/memory/conversation-store.ts +0 -102
- package/src/memory/schema-migration.ts +0 -38
- package/src/messaging/providers/sms/adapter.ts +0 -232
- package/src/messaging/providers/sms/client.ts +0 -93
- package/src/messaging/providers/sms/types.ts +0 -7
- package/src/migrations/config-merge.ts +0 -62
- package/src/migrations/data-layout.ts +0 -89
- package/src/migrations/data-merge.ts +0 -44
- package/src/migrations/hooks-merge.ts +0 -118
- package/src/migrations/index.ts +0 -6
- package/src/migrations/log.ts +0 -28
- package/src/migrations/skills-merge.ts +0 -44
- package/src/migrations/workspace-layout.ts +0 -94
- package/src/notifications/adapters/sms.ts +0 -94
- package/src/runtime/channel-approval-parser.ts +0 -123
- package/src/runtime/channel-invite-transports/sms.ts +0 -53
- package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
- package/src/runtime/routes/integration-routes.ts +0 -381
- package/src/runtime/routes/twilio-routes.ts +0 -1251
- package/src/twitter/router.ts +0 -131
- package/src/twitter/session.ts +0 -54
- package/src/watcher/providers/slack.ts +0 -282
- /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
- /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
- /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
- /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
- /package/src/{twitter → cli/commands/twitter}/oauth-client.ts +0 -0
- /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
- /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
- /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
- /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
- /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
- /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
- /package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/surfaces.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
- /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
- /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
- /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
- /package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -0
- /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
- /package/src/{config → prompts}/templates/SOUL.md +0 -0
- /package/src/{config → prompts}/templates/UPDATES.md +0 -0
- /package/src/{config → prompts}/templates/USER.md +0 -0
- /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
- /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
- /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
- /package/src/{config → prompts}/update-bulletin.ts +0 -0
- /package/src/{config → prompts}/user-reference.ts +0 -0
|
@@ -71,7 +71,7 @@ APP-SPECIFIC TIPS:
|
|
|
71
71
|
- Messages: Click the search bar or use cmd+n for a new message.
|
|
72
72
|
|
|
73
73
|
VERIFICATION CODES:
|
|
74
|
-
When a signup or login flow requires a verification code (email
|
|
74
|
+
When a signup or login flow requires a verification code (email or authenticator):
|
|
75
75
|
1. Use ui_show with surface_type "form" to ask the user:
|
|
76
76
|
ui_show({ surface_type: "form", title: "Verification Code", data: { fields: [{ id: "code", type: "text", label: "Enter the verification code", required: true }] } })
|
|
77
77
|
2. Wait for the user's response
|
|
@@ -2,6 +2,11 @@ import { copyFileSync, existsSync, readFileSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
|
|
4
4
|
import { CLI_HELP_REFERENCE } from "../cli/reference.js";
|
|
5
|
+
import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags.js";
|
|
6
|
+
import { getBaseDataDir, getIsContainerized } from "../config/env-registry.js";
|
|
7
|
+
import { getConfig, getNestedValue, loadRawConfig } from "../config/loader.js";
|
|
8
|
+
import { skillFlagKey } from "../config/skill-state.js";
|
|
9
|
+
import { loadSkillCatalog, type SkillSummary } from "../config/skills.js";
|
|
5
10
|
import { listCredentialMetadata } from "../tools/credentials/metadata-store.js";
|
|
6
11
|
import { resolveBundledDir } from "../util/bundled-asset.js";
|
|
7
12
|
import { getLogger } from "../util/logger.js";
|
|
@@ -10,11 +15,6 @@ import {
|
|
|
10
15
|
getWorkspacePromptPath,
|
|
11
16
|
isMacOS,
|
|
12
17
|
} from "../util/platform.js";
|
|
13
|
-
import { isAssistantFeatureFlagEnabled } from "./assistant-feature-flags.js";
|
|
14
|
-
import { getBaseDataDir, getIsContainerized } from "./env-registry.js";
|
|
15
|
-
import { getConfig } from "./loader.js";
|
|
16
|
-
import { skillFlagKey } from "./skill-state.js";
|
|
17
|
-
import { loadSkillCatalog, type SkillSummary } from "./skills.js";
|
|
18
18
|
import { resolveUserPronouns, resolveUserReference } from "./user-reference.js";
|
|
19
19
|
|
|
20
20
|
const log = getLogger("system-prompt");
|
|
@@ -170,7 +170,7 @@ export function buildSystemPrompt(): string {
|
|
|
170
170
|
config,
|
|
171
171
|
)
|
|
172
172
|
) {
|
|
173
|
-
parts.push(
|
|
173
|
+
parts.push(buildVerificationRoutingSection());
|
|
174
174
|
}
|
|
175
175
|
parts.push(buildAttachmentSection());
|
|
176
176
|
parts.push(buildInChatConfigurationSection());
|
|
@@ -186,6 +186,7 @@ export function buildSystemPrompt(): string {
|
|
|
186
186
|
parts.push(buildAccessPreferenceSection());
|
|
187
187
|
parts.push(buildIntegrationSection());
|
|
188
188
|
parts.push(buildMemoryPersistenceSection());
|
|
189
|
+
parts.push(buildMemoryRecallSection());
|
|
189
190
|
parts.push(buildWorkspaceReflectionSection());
|
|
190
191
|
parts.push(buildLearningMemorySection());
|
|
191
192
|
|
|
@@ -227,7 +228,7 @@ function buildTaskScheduleReminderRoutingSection(): string {
|
|
|
227
228
|
].join("\n");
|
|
228
229
|
}
|
|
229
230
|
|
|
230
|
-
export function
|
|
231
|
+
export function buildVerificationRoutingSection(): string {
|
|
231
232
|
return [
|
|
232
233
|
"## Routing: Guardian Verification",
|
|
233
234
|
"",
|
|
@@ -238,13 +239,13 @@ export function buildGuardianVerificationRoutingSection(): string {
|
|
|
238
239
|
"### Trigger phrases",
|
|
239
240
|
'- "verify guardian"',
|
|
240
241
|
'- "verify my Telegram account"',
|
|
241
|
-
'- "verify
|
|
242
|
+
'- "verify phone channel"',
|
|
242
243
|
'- "verify my phone number"',
|
|
243
244
|
'- "set up guardian verification"',
|
|
244
245
|
"",
|
|
245
246
|
"### What it does",
|
|
246
|
-
"The skill walks through outbound guardian verification for
|
|
247
|
-
"1. Confirm channel (
|
|
247
|
+
"The skill walks through outbound guardian verification for phone or Telegram:",
|
|
248
|
+
"1. Confirm channel (phone, telegram)",
|
|
248
249
|
"2. Collect destination (phone number or Telegram handle/chat ID)",
|
|
249
250
|
"3. Start outbound verification via runtime HTTP API",
|
|
250
251
|
"4. Guide the user through code entry, resend, or cancel",
|
|
@@ -403,9 +404,9 @@ export function buildPhoneCallsRoutingSection(): string {
|
|
|
403
404
|
"### Trigger phrases",
|
|
404
405
|
'- "Set up phone calling" / "enable calls"',
|
|
405
406
|
'- "Make a call to..." / "call [number/business]"',
|
|
406
|
-
'- "Configure Twilio" (in context of voice calls
|
|
407
|
+
'- "Configure Twilio" (in context of voice calls)',
|
|
407
408
|
'- "Can you make phone calls?"',
|
|
408
|
-
'- "Set up my phone number" (for calling
|
|
409
|
+
'- "Set up my phone number" (for calling)',
|
|
409
410
|
"",
|
|
410
411
|
"### What it does",
|
|
411
412
|
"The skill handles the full phone calling lifecycle:",
|
|
@@ -506,7 +507,7 @@ export function buildChannelAwarenessSection(): string {
|
|
|
506
507
|
"",
|
|
507
508
|
"### Push-to-talk awareness",
|
|
508
509
|
"- The `<channel_capabilities>` block may include `ptt_activation_key` and `ptt_enabled` fields indicating the user's push-to-talk configuration.",
|
|
509
|
-
|
|
510
|
+
'- You can change the push-to-talk activation key using the `voice_config_update` tool. The key is provided as a JSON PTTActivator payload (e.g. `{"kind":"modifierOnly","modifierFlags":8388608}` for Fn).',
|
|
510
511
|
"- When the user asks about voice input or push-to-talk settings, use the tool to apply changes directly rather than directing them to settings.",
|
|
511
512
|
"- When `microphone_permission_granted` is `false`, guide the user to grant microphone access in System Settings before using voice features.",
|
|
512
513
|
"",
|
|
@@ -633,11 +634,14 @@ function buildIntegrationSection(): string {
|
|
|
633
634
|
);
|
|
634
635
|
if (oauthCreds.length === 0) return "";
|
|
635
636
|
|
|
637
|
+
const raw = loadRawConfig();
|
|
636
638
|
const lines = ["## Connected Services", ""];
|
|
637
639
|
for (const cred of oauthCreds) {
|
|
638
|
-
const
|
|
639
|
-
|
|
640
|
-
|
|
640
|
+
const acctInfo = getNestedValue(
|
|
641
|
+
raw,
|
|
642
|
+
`integrations.accountInfo.${cred.service}`,
|
|
643
|
+
) as string | undefined;
|
|
644
|
+
const state = acctInfo ? `Connected (${acctInfo})` : "Connected";
|
|
641
645
|
lines.push(`- **${cred.service}**: ${state}`);
|
|
642
646
|
}
|
|
643
647
|
|
|
@@ -659,6 +663,21 @@ function buildMemoryPersistenceSection(): string {
|
|
|
659
663
|
].join("\n");
|
|
660
664
|
}
|
|
661
665
|
|
|
666
|
+
function buildMemoryRecallSection(): string {
|
|
667
|
+
return [
|
|
668
|
+
"## Memory Recall",
|
|
669
|
+
"",
|
|
670
|
+
"You have access to a `memory_recall` tool for deep memory retrieval. Use it when:",
|
|
671
|
+
"",
|
|
672
|
+
"- The user asks about past conversations, decisions, or context you don't have in the current window",
|
|
673
|
+
"- You need to recall specific facts, preferences, or project details",
|
|
674
|
+
"- The auto-injected memory context doesn't contain what you need",
|
|
675
|
+
"- The user references something from a previous session",
|
|
676
|
+
"",
|
|
677
|
+
"The tool searches across semantic, lexical, entity graph, and recency sources. Be specific in your query for best results.",
|
|
678
|
+
].join("\n");
|
|
679
|
+
}
|
|
680
|
+
|
|
662
681
|
function buildWorkspaceReflectionSection(): string {
|
|
663
682
|
return [
|
|
664
683
|
"## Workspace Reflection",
|
|
@@ -871,7 +890,7 @@ function appendSkillsCatalog(basePrompt: string): string {
|
|
|
871
890
|
}
|
|
872
891
|
|
|
873
892
|
function buildDynamicSkillWorkflowSection(
|
|
874
|
-
config: import("
|
|
893
|
+
config: import("../config/schema.js").AssistantConfig,
|
|
875
894
|
): string {
|
|
876
895
|
const lines = [
|
|
877
896
|
"## Dynamic Skill Authoring Workflow",
|
|
@@ -909,7 +928,7 @@ function buildDynamicSkillWorkflowSection(
|
|
|
909
928
|
lines.push(
|
|
910
929
|
"",
|
|
911
930
|
"### Messaging Skill",
|
|
912
|
-
'When the user asks about email, messaging, inbox management, or wants to read/send/search messages on any platform (Gmail, Slack, Telegram
|
|
931
|
+
'When the user asks about email, messaging, inbox management, or wants to read/send/search messages on any platform (Gmail, Slack, Telegram), load the "messaging" skill using `skill_load`. The messaging skill handles connection setup, credential flows, and all messaging operations — do not improvise setup instructions from general knowledge.',
|
|
913
932
|
);
|
|
914
933
|
}
|
|
915
934
|
|
|
@@ -953,7 +972,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
|
|
|
953
972
|
const lines = ["<available_skills>"];
|
|
954
973
|
for (const skill of visible) {
|
|
955
974
|
const idAttr = escapeXml(skill.id);
|
|
956
|
-
const nameAttr = escapeXml(skill.
|
|
975
|
+
const nameAttr = escapeXml(skill.displayName);
|
|
957
976
|
const descAttr =
|
|
958
977
|
skill.id === "mcp-setup"
|
|
959
978
|
? escapeXml(getMcpSetupDescription())
|
|
@@ -978,7 +997,7 @@ function formatSkillsCatalog(skills: SkillSummary[]): string {
|
|
|
978
997
|
"### Installing additional skills",
|
|
979
998
|
"If `skill_load` fails because a skill is not found, additional first-party skills may be available in the Vellum catalog.",
|
|
980
999
|
"Use `bash` to discover and install them:",
|
|
981
|
-
"- `
|
|
982
|
-
"- `
|
|
1000
|
+
"- `assistant skills list` — list all available catalog skills",
|
|
1001
|
+
"- `assistant skills install <skill-id>` — install a skill, then retry `skill_load`",
|
|
983
1002
|
].join("\n");
|
|
984
1003
|
}
|
package/src/runtime/AGENTS.md
CHANGED
|
@@ -10,7 +10,7 @@ The single HTTP send endpoint is `POST /v1/messages`. Key behaviors:
|
|
|
10
10
|
- **Fire-and-forget**: Returns `202 { accepted: true }` immediately. The client observes progress via SSE (`GET /v1/events`).
|
|
11
11
|
- **Hub publishing**: All agent events are published to `assistantEventHub`, making them observable via SSE.
|
|
12
12
|
|
|
13
|
-
Do NOT add new send endpoints. All message ingress should go through `POST /v1/messages` (HTTP)
|
|
13
|
+
Do NOT add new send endpoints. All message ingress should go through `POST /v1/messages` (HTTP).
|
|
14
14
|
|
|
15
15
|
### Approvals (confirmations, secrets, trust rules)
|
|
16
16
|
|
|
@@ -18,9 +18,9 @@ Approvals are **orthogonal to message sending**. The assistant asks for approval
|
|
|
18
18
|
|
|
19
19
|
- **Discovery**: Clients discover pending approvals via SSE events (`confirmation_request`, `secret_request`) which include a `requestId`.
|
|
20
20
|
- **Resolution**: Clients respond via standalone endpoints keyed by `requestId`:
|
|
21
|
-
- `POST /v1/confirm` — `{ requestId, decision: "allow"
|
|
21
|
+
- `POST /v1/confirm` — `{ requestId, decision, selectedPattern?, selectedScope? }`. Valid decisions: `"allow"`, `"allow_10m"`, `"allow_thread"`, `"deny"`, `"always_allow"`, `"always_deny"`, `"always_allow_high_risk"`. For persistent decisions (`always_allow`, `always_deny`, `always_allow_high_risk`), `selectedPattern` and `selectedScope` are validated against the server-provided allowlist/scope options from the original confirmation request before trust rules are persisted.
|
|
22
22
|
- `POST /v1/secret` — `{ requestId, value, delivery }`
|
|
23
|
-
- `POST /v1/trust-rules` — `{ requestId, pattern, scope }
|
|
23
|
+
- `POST /v1/trust-rules` — `{ requestId, pattern, scope, decision, allowHighRisk? }`. Validates pattern/scope against server-provided options. Does not resolve the confirmation itself.
|
|
24
24
|
- **Tracking**: The `pending-interactions` tracker (`assistant/src/runtime/pending-interactions.ts`) maps `requestId → session`. Use `register()` to track, `resolve()` to consume, `getByConversation()` to query.
|
|
25
25
|
|
|
26
26
|
Do NOT couple approval handling to message sending. Do NOT add run/status tracking to the send path.
|
|
@@ -33,10 +33,8 @@ Channel approval flows use `requestId` (not `runId`) as the primary identifier:
|
|
|
33
33
|
- Guardian approval records in `channelGuardianApprovalRequests` link via `requestId`.
|
|
34
34
|
- The conversational approval engine classifies user intent and resolves via `session.handleConfirmationResponse(requestId, decision)`.
|
|
35
35
|
|
|
36
|
-
## HTTP-
|
|
36
|
+
## HTTP-Only Transport
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
HTTP is the sole transport for client-daemon communication. The runtime HTTP server (`assistant/src/runtime/http-server.ts`) is the canonical API surface. Clients connect via HTTP for request/response operations and SSE (`GET /v1/events`) for streaming server-to-client events.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
When writing skills that need to call daemon configuration endpoints, use `curl` with the runtime HTTP API (JWT-authenticated via `Authorization: Bearer <jwt>`) rather than describing IPC socket protocol details. The assistant already knows how to use `curl`.
|
|
40
|
+
When writing skills that need to call daemon configuration endpoints, use `curl` with the runtime HTTP API (JWT-authenticated via `Authorization: Bearer <jwt>`). The assistant already knows how to use `curl`.
|
|
@@ -7,18 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Access requests are a special case: they always create a canonical request
|
|
9
9
|
* and emit a notification signal, even when no same-channel guardian binding
|
|
10
|
-
* exists. Guardian identity resolution
|
|
11
|
-
*
|
|
12
|
-
* 2. Any active guardian channel (deterministic, most-recently-verified).
|
|
13
|
-
* 3. No guardian identity (trusted/vellum-only resolution path).
|
|
10
|
+
* exists. Guardian identity resolution is anchored on the assistant's vellum
|
|
11
|
+
* principal so access requests cannot bind to stale/cross-assistant contacts.
|
|
14
12
|
*/
|
|
15
13
|
|
|
16
14
|
import type { ChannelId } from "../channels/types.js";
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
listGuardianChannels,
|
|
20
|
-
} from "../contacts/contact-store.js";
|
|
21
|
-
import type { MemberStatus } from "../contacts/types.js";
|
|
15
|
+
import { findGuardianForChannel } from "../contacts/contact-store.js";
|
|
16
|
+
import type { ChannelStatus } from "../contacts/types.js";
|
|
22
17
|
import {
|
|
23
18
|
createCanonicalGuardianDelivery,
|
|
24
19
|
createCanonicalGuardianRequest,
|
|
@@ -56,7 +51,7 @@ export interface AccessRequestParams {
|
|
|
56
51
|
actorExternalId?: string;
|
|
57
52
|
actorDisplayName?: string;
|
|
58
53
|
actorUsername?: string;
|
|
59
|
-
previousMemberStatus?:
|
|
54
|
+
previousMemberStatus?: Exclude<ChannelStatus, "unverified">;
|
|
60
55
|
}
|
|
61
56
|
|
|
62
57
|
export type AccessRequestResult =
|
|
@@ -74,9 +69,9 @@ export type AccessRequestResult =
|
|
|
74
69
|
* Returns a result indicating whether the guardian was notified and whether
|
|
75
70
|
* a new request was created or an existing one was deduped.
|
|
76
71
|
*
|
|
77
|
-
* Guardian identity resolution
|
|
78
|
-
*
|
|
79
|
-
*
|
|
72
|
+
* Guardian identity resolution uses the assistant's vellum principal as the
|
|
73
|
+
* trust anchor and only accepts source-channel contacts that match it. This
|
|
74
|
+
* prevents stale or cross-assistant contacts from being bound to the request.
|
|
80
75
|
*
|
|
81
76
|
* This is intentionally synchronous with respect to the canonical store writes
|
|
82
77
|
* and fire-and-forget for the notification signal emission.
|
|
@@ -98,62 +93,52 @@ export function notifyGuardianOfAccessRequest(
|
|
|
98
93
|
return { notified: false, reason: "no_sender_id" };
|
|
99
94
|
}
|
|
100
95
|
|
|
101
|
-
// Resolve guardian identity with
|
|
102
|
-
// 1.
|
|
103
|
-
// 2.
|
|
104
|
-
// 3.
|
|
96
|
+
// Resolve guardian identity with assistant-anchored strategy:
|
|
97
|
+
// 1. Ensure the assistant has a vellum guardian principal (trust anchor)
|
|
98
|
+
// 2. Use source-channel guardian only when principal matches anchor
|
|
99
|
+
// 3. Fallback to vellum guardian identity for this assistant principal
|
|
105
100
|
let guardianExternalUserId: string | null = null;
|
|
106
101
|
let guardianPrincipalId: string | null = null;
|
|
107
102
|
let guardianBindingChannel: string | null = null;
|
|
108
|
-
let guardianResolutionSource:
|
|
109
|
-
"
|
|
103
|
+
let guardianResolutionSource:
|
|
104
|
+
| "source-channel-contact"
|
|
105
|
+
| "vellum-anchor"
|
|
106
|
+
| "none" = "none";
|
|
107
|
+
|
|
108
|
+
const assistantGuardianPrincipalId =
|
|
109
|
+
ensureVellumGuardianBinding(canonicalAssistantId);
|
|
110
110
|
|
|
111
|
-
// Try
|
|
111
|
+
// Try source-channel guardian, but only if it maps to the assistant's
|
|
112
|
+
// anchored principal. This blocks cross-assistant/stale contact selection.
|
|
112
113
|
const sourceGuardian = findGuardianForChannel(sourceChannel);
|
|
113
|
-
if (
|
|
114
|
+
if (
|
|
115
|
+
sourceGuardian &&
|
|
116
|
+
sourceGuardian.contact.principalId === assistantGuardianPrincipalId
|
|
117
|
+
) {
|
|
114
118
|
guardianExternalUserId = sourceGuardian.channel.externalUserId;
|
|
115
119
|
guardianPrincipalId = sourceGuardian.contact.principalId;
|
|
116
120
|
guardianBindingChannel = sourceGuardian.channel.type;
|
|
117
|
-
guardianResolutionSource = "
|
|
118
|
-
} else {
|
|
119
|
-
// Try contacts-first: any active guardian channel
|
|
120
|
-
const allGuardianChannels = listGuardianChannels();
|
|
121
|
-
if (allGuardianChannels && allGuardianChannels.channels.length > 0) {
|
|
122
|
-
const fallbackChannel = allGuardianChannels.channels[0];
|
|
123
|
-
guardianExternalUserId = fallbackChannel.externalUserId;
|
|
124
|
-
guardianPrincipalId = allGuardianChannels.contact.principalId;
|
|
125
|
-
guardianBindingChannel = fallbackChannel.type;
|
|
126
|
-
guardianResolutionSource = "contacts-fallback";
|
|
127
|
-
log.debug(
|
|
128
|
-
{
|
|
129
|
-
sourceChannel,
|
|
130
|
-
fallbackChannel: guardianBindingChannel,
|
|
131
|
-
canonicalAssistantId,
|
|
132
|
-
},
|
|
133
|
-
"Using cross-channel guardian contact fallback for access request",
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
// If no guardian found via contacts, guardianResolutionSource stays "none"
|
|
121
|
+
guardianResolutionSource = "source-channel-contact";
|
|
137
122
|
}
|
|
138
123
|
|
|
139
|
-
//
|
|
140
|
-
//
|
|
124
|
+
// Access requests always require a principal. If source-channel resolution
|
|
125
|
+
// did not match the assistant anchor, use the anchored vellum identity.
|
|
141
126
|
if (!guardianPrincipalId) {
|
|
142
|
-
log.info(
|
|
143
|
-
{ sourceChannel, canonicalAssistantId },
|
|
144
|
-
"No guardian principal for access request — self-healing vellum binding",
|
|
145
|
-
);
|
|
146
|
-
const healedPrincipalId = ensureVellumGuardianBinding(canonicalAssistantId);
|
|
147
127
|
const vellumGuardian = findGuardianForChannel("vellum");
|
|
148
|
-
if (
|
|
128
|
+
if (
|
|
129
|
+
vellumGuardian &&
|
|
130
|
+
vellumGuardian.contact.principalId === assistantGuardianPrincipalId
|
|
131
|
+
) {
|
|
149
132
|
guardianExternalUserId =
|
|
150
133
|
vellumGuardian.channel.externalUserId ?? guardianExternalUserId;
|
|
151
134
|
guardianPrincipalId =
|
|
152
|
-
vellumGuardian.contact.principalId ??
|
|
135
|
+
vellumGuardian.contact.principalId ?? assistantGuardianPrincipalId;
|
|
153
136
|
guardianBindingChannel = guardianBindingChannel ?? "vellum";
|
|
137
|
+
guardianResolutionSource = "vellum-anchor";
|
|
154
138
|
} else {
|
|
155
|
-
guardianPrincipalId =
|
|
139
|
+
guardianPrincipalId = assistantGuardianPrincipalId;
|
|
156
140
|
guardianBindingChannel = guardianBindingChannel ?? "vellum";
|
|
141
|
+
guardianResolutionSource = "vellum-anchor";
|
|
157
142
|
}
|
|
158
143
|
}
|
|
159
144
|
|
|
@@ -264,10 +249,6 @@ export function notifyGuardianOfAccessRequest(
|
|
|
264
249
|
continue;
|
|
265
250
|
}
|
|
266
251
|
|
|
267
|
-
if (result.channel !== "telegram" && result.channel !== "sms") {
|
|
268
|
-
continue;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
252
|
const delivery = createCanonicalGuardianDelivery({
|
|
272
253
|
requestId: canonicalRequest.id,
|
|
273
254
|
destinationChannel: result.channel,
|
|
@@ -51,16 +51,6 @@ export function isUntrustedTrustClass(
|
|
|
51
51
|
return trustClass === "trusted_contact" || trustClass === "unknown";
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
/**
|
|
55
|
-
* Reason an actor was denied access during trust resolution.
|
|
56
|
-
*
|
|
57
|
-
* - `'no_binding'`: No guardian binding exists for this (assistant, channel),
|
|
58
|
-
* so trust cannot be established for any actor.
|
|
59
|
-
* - `'no_identity'`: The inbound message carried no usable identity fields
|
|
60
|
-
* (e.g. missing external user ID), so the sender could not be identified.
|
|
61
|
-
*/
|
|
62
|
-
export type DenialReason = "no_binding" | "no_identity";
|
|
63
|
-
|
|
64
54
|
/**
|
|
65
55
|
* Fully resolved trust context from the actor trust resolver.
|
|
66
56
|
*
|
|
@@ -98,8 +88,6 @@ export interface ActorTrustContext {
|
|
|
98
88
|
channel: ChannelId;
|
|
99
89
|
trustStatus: TrustClass;
|
|
100
90
|
};
|
|
101
|
-
/** Legacy denial reason for backward-compatible unverified_channel paths. */
|
|
102
|
-
denialReason?: DenialReason;
|
|
103
91
|
}
|
|
104
92
|
|
|
105
93
|
/**
|
|
@@ -176,7 +164,6 @@ export function resolveActorTrust(
|
|
|
176
164
|
channel: input.sourceChannel,
|
|
177
165
|
trustStatus: "unknown",
|
|
178
166
|
},
|
|
179
|
-
denialReason: "no_identity",
|
|
180
167
|
};
|
|
181
168
|
}
|
|
182
169
|
|
|
@@ -249,8 +236,6 @@ export function resolveActorTrust(
|
|
|
249
236
|
) === canonicalSenderId
|
|
250
237
|
: false;
|
|
251
238
|
|
|
252
|
-
// ContactChannel has no username field — the shim always set it to null.
|
|
253
|
-
const memberUsername = undefined;
|
|
254
239
|
const memberDisplayName =
|
|
255
240
|
memberMatchesSender &&
|
|
256
241
|
typeof memberRecord?.contact.displayName === "string" &&
|
|
@@ -260,7 +245,7 @@ export function resolveActorTrust(
|
|
|
260
245
|
// Prefer member profile metadata over transient sender metadata so guardian-
|
|
261
246
|
// curated contact details are canonical for assistant-facing identity —
|
|
262
247
|
// but only when the member record actually belongs to the current sender.
|
|
263
|
-
const resolvedUsername =
|
|
248
|
+
const resolvedUsername = senderUsername;
|
|
264
249
|
const resolvedDisplayName = memberDisplayName ?? senderDisplayName;
|
|
265
250
|
const resolvedIdentifier = resolvedUsername
|
|
266
251
|
? `@${resolvedUsername}`
|
|
@@ -280,12 +265,6 @@ export function resolveActorTrust(
|
|
|
280
265
|
trustClass = "unknown";
|
|
281
266
|
}
|
|
282
267
|
|
|
283
|
-
// Denial reason for legacy compatibility
|
|
284
|
-
let denialReason: DenialReason | undefined;
|
|
285
|
-
if (!isGuardian && !guardianBindingMatch) {
|
|
286
|
-
denialReason = "no_binding";
|
|
287
|
-
}
|
|
288
|
-
|
|
289
268
|
return {
|
|
290
269
|
canonicalSenderId,
|
|
291
270
|
guardianBindingMatch,
|
|
@@ -301,7 +280,6 @@ export function resolveActorTrust(
|
|
|
301
280
|
channel: input.sourceChannel,
|
|
302
281
|
trustStatus: trustClass,
|
|
303
282
|
},
|
|
304
|
-
denialReason,
|
|
305
283
|
};
|
|
306
284
|
}
|
|
307
285
|
|
|
@@ -338,6 +316,5 @@ export function toTrustContext(
|
|
|
338
316
|
requesterMemberDisplayName: ctx.actorMetadata.memberDisplayName,
|
|
339
317
|
requesterExternalUserId: ctx.canonicalSenderId ?? undefined,
|
|
340
318
|
requesterChatId: conversationExternalId,
|
|
341
|
-
denialReason: ctx.denialReason,
|
|
342
319
|
};
|
|
343
320
|
}
|
|
@@ -35,7 +35,8 @@ export type ApprovalMessageScenario =
|
|
|
35
35
|
| "guardian_deny_no_identity"
|
|
36
36
|
| "guardian_deny_no_binding"
|
|
37
37
|
| "requester_cancel"
|
|
38
|
-
| "approval_already_resolved"
|
|
38
|
+
| "approval_already_resolved"
|
|
39
|
+
| "guardian_text_unavailable";
|
|
39
40
|
|
|
40
41
|
export interface ApprovalMessageContext {
|
|
41
42
|
scenario: ApprovalMessageScenario;
|
|
@@ -257,7 +258,7 @@ export function getFallbackMessage(context: ApprovalMessageContext): string {
|
|
|
257
258
|
// Detect whether the code is a short numeric (identity-bound outbound)
|
|
258
259
|
// or a high-entropy hex (inbound challenge/bootstrap) and adjust wording.
|
|
259
260
|
const isNumeric = /^\d{4,8}$/.test(code);
|
|
260
|
-
if (context.channel === "
|
|
261
|
+
if (context.channel === "phone") {
|
|
261
262
|
if (isNumeric) {
|
|
262
263
|
return `To complete guardian verification, speak or enter the ${code.length}-digit code: ${code}.`;
|
|
263
264
|
}
|
|
@@ -289,6 +290,9 @@ export function getFallbackMessage(context: ApprovalMessageContext): string {
|
|
|
289
290
|
case "approval_already_resolved":
|
|
290
291
|
return "This approval request has already been resolved.";
|
|
291
292
|
|
|
293
|
+
case "guardian_text_unavailable":
|
|
294
|
+
return "I can't process text replies for approvals right now. Please use the approve/deny buttons above to respond.";
|
|
295
|
+
|
|
292
296
|
default: {
|
|
293
297
|
// Exhaustive check — TypeScript will flag if a scenario is missing.
|
|
294
298
|
const _exhaustive: never = context.scenario;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
10
10
|
|
|
11
|
-
import type { ServerMessage } from "../daemon/
|
|
11
|
+
import type { ServerMessage } from "../daemon/message-protocol.js";
|
|
12
12
|
|
|
13
13
|
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
14
14
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
2
|
|
|
3
|
-
import { buildIpcAuthContext } from "../../../daemon/ipc-handler.js";
|
|
4
3
|
import { DAEMON_INTERNAL_ASSISTANT_ID } from "../../assistant-scope.js";
|
|
4
|
+
import { buildIpcAuthContext } from "../../local-actor-identity.js";
|
|
5
5
|
import { CURRENT_POLICY_EPOCH } from "../policy.js";
|
|
6
6
|
import { resolveScopeProfile } from "../scopes.js";
|
|
7
7
|
|
|
@@ -43,6 +43,38 @@ describe("parseSub", () => {
|
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
+
// -------------------------------------------------------------------------
|
|
47
|
+
// svc:daemon pattern
|
|
48
|
+
// -------------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
test("parses svc:daemon:<identifier>", () => {
|
|
51
|
+
const result = parseSub("svc:daemon:self");
|
|
52
|
+
expect(result.ok).toBe(true);
|
|
53
|
+
if (result.ok) {
|
|
54
|
+
expect(result.principalType).toBe("svc_daemon");
|
|
55
|
+
expect(result.assistantId).toBe("self");
|
|
56
|
+
expect(result.actorPrincipalId).toBeUndefined();
|
|
57
|
+
expect(result.sessionId).toBeUndefined();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("parses svc:daemon with non-self identifier", () => {
|
|
62
|
+
const result = parseSub("svc:daemon:pairing");
|
|
63
|
+
expect(result.ok).toBe(true);
|
|
64
|
+
if (result.ok) {
|
|
65
|
+
expect(result.principalType).toBe("svc_daemon");
|
|
66
|
+
expect(result.assistantId).toBe("pairing");
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("fails on svc:daemon with empty identifier", () => {
|
|
71
|
+
const result = parseSub("svc:daemon:");
|
|
72
|
+
expect(result.ok).toBe(false);
|
|
73
|
+
if (!result.ok) {
|
|
74
|
+
expect(result.reason).toContain("empty");
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
46
78
|
// -------------------------------------------------------------------------
|
|
47
79
|
// ipc pattern
|
|
48
80
|
// -------------------------------------------------------------------------
|