@vellumai/assistant 0.4.41 → 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/bundler/app-compiler.ts +131 -103
- package/src/bundler/compiler-tools.ts +248 -0
- 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} +263 -16
- 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 +21 -6
- 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 +87 -229
- 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 +233 -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/main.ts +1 -0
- 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 -758
- 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
|
@@ -75,7 +75,7 @@ export const GUARDIAN_ACTION_COPY_MAX_TOKENS = 200;
|
|
|
75
75
|
export const GUARDIAN_ACTION_COPY_SYSTEM_PROMPT =
|
|
76
76
|
"You are an assistant writing one user-facing message about a guardian action in a voice call scenario. " +
|
|
77
77
|
"Keep it concise, natural, and conversational. Preserve factual details exactly. " +
|
|
78
|
-
"These messages are spoken aloud
|
|
78
|
+
"These messages are spoken aloud, so use a warm, human tone. " +
|
|
79
79
|
"Do not mention internal systems, scenario IDs, or technical details. " +
|
|
80
80
|
"Return plain text only.";
|
|
81
81
|
|
|
@@ -132,7 +132,7 @@ export function buildGuardianActionGenerationPrompt(
|
|
|
132
132
|
: "";
|
|
133
133
|
return [
|
|
134
134
|
"Rewrite the following guardian action message as a natural, conversational reply.",
|
|
135
|
-
"These messages are for voice call scenarios and may be spoken aloud
|
|
135
|
+
"These messages are for voice call scenarios and may be spoken aloud.",
|
|
136
136
|
"Keep the same concrete facts and next-step guidance.",
|
|
137
137
|
keywordClause,
|
|
138
138
|
`Context JSON: ${JSON.stringify(context)}`,
|
|
@@ -165,7 +165,7 @@ export function includesRequiredKeywords(
|
|
|
165
165
|
* Return a scenario-specific deterministic fallback message.
|
|
166
166
|
*
|
|
167
167
|
* Each template produces natural, conversational text suitable for voice
|
|
168
|
-
*
|
|
168
|
+
* delivery.
|
|
169
169
|
*/
|
|
170
170
|
export function getGuardianActionFallbackMessage(
|
|
171
171
|
context: GuardianActionMessageContext,
|
|
@@ -248,7 +248,7 @@ export function getGuardianActionFallbackMessage(
|
|
|
248
248
|
: "Got it! Your answer has been applied to the current active request on the call.";
|
|
249
249
|
|
|
250
250
|
case "outbound_message_copy":
|
|
251
|
-
// This
|
|
251
|
+
// This message is sent TO the original caller relaying the guardian's answer.
|
|
252
252
|
// When lateAnswerText is available, include it — that's the whole point of message_back.
|
|
253
253
|
if (context.lateAnswerText && context.questionText) {
|
|
254
254
|
return `Hi! You asked "${context.questionText}" earlier. Here's the answer: ${context.lateAnswerText}`;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared guardian reply router for inbound channel messages.
|
|
3
3
|
*
|
|
4
4
|
* Provides a single entry point (`routeGuardianReply`) for all inbound
|
|
5
|
-
* guardian reply processing across Telegram
|
|
5
|
+
* guardian reply processing across Telegram and WhatsApp. Routes
|
|
6
6
|
* through a priority-ordered pipeline:
|
|
7
7
|
*
|
|
8
8
|
* 1. Deterministic callback/ref parsing (button presses with `apr:<requestId>:<action>`)
|
|
@@ -57,7 +57,7 @@ const log = getLogger("guardian-reply-router");
|
|
|
57
57
|
export interface GuardianReplyContext {
|
|
58
58
|
/** The raw message text (trimmed). */
|
|
59
59
|
messageText: string;
|
|
60
|
-
/** Source channel (telegram,
|
|
60
|
+
/** Source channel (telegram, whatsapp, etc.). */
|
|
61
61
|
channel: string;
|
|
62
62
|
/** Actor identity context for the sender. */
|
|
63
63
|
actor: ActorContext;
|
|
@@ -260,7 +260,7 @@ function notConsumed(): GuardianReplyResult {
|
|
|
260
260
|
* Route an inbound guardian reply through the canonical decision pipeline.
|
|
261
261
|
*
|
|
262
262
|
* This is the single entry point for all inbound guardian reply processing.
|
|
263
|
-
* It handles messages from any channel (Telegram,
|
|
263
|
+
* It handles messages from any channel (Telegram, WhatsApp) and
|
|
264
264
|
* routes through priority-ordered matching:
|
|
265
265
|
*
|
|
266
266
|
* 1. Deterministic callback parsing (button presses)
|
|
@@ -33,20 +33,25 @@ import {
|
|
|
33
33
|
hasUngatedHttpAuthDisabled,
|
|
34
34
|
isHttpAuthDisabled,
|
|
35
35
|
} from "../config/env.js";
|
|
36
|
-
import type { ServerMessage } from "../daemon/
|
|
36
|
+
import type { ServerMessage } from "../daemon/message-protocol.js";
|
|
37
37
|
import { PairingStore } from "../daemon/pairing-store.js";
|
|
38
38
|
import {
|
|
39
39
|
type Confidence,
|
|
40
40
|
getAttentionStateByConversationIds,
|
|
41
|
+
markConversationUnread,
|
|
41
42
|
recordConversationSeenSignal,
|
|
42
43
|
type SignalType,
|
|
43
44
|
} from "../memory/conversation-attention-store.js";
|
|
44
|
-
import
|
|
45
|
+
import {
|
|
46
|
+
countConversations,
|
|
47
|
+
listConversations,
|
|
48
|
+
} from "../memory/conversation-queries.js";
|
|
45
49
|
import * as externalConversationStore from "../memory/external-conversation-store.js";
|
|
46
50
|
import {
|
|
47
51
|
consumeCallback,
|
|
48
52
|
consumeCallbackError,
|
|
49
53
|
} from "../security/oauth-callback-registry.js";
|
|
54
|
+
import { UserError } from "../util/errors.js";
|
|
50
55
|
import { getLogger } from "../util/logger.js";
|
|
51
56
|
import { buildAssistantEvent } from "./assistant-event.js";
|
|
52
57
|
import { assistantEventHub } from "./assistant-event-hub.js";
|
|
@@ -86,6 +91,7 @@ import {
|
|
|
86
91
|
TWILIO_WEBHOOK_RE,
|
|
87
92
|
validateTwilioWebhook,
|
|
88
93
|
} from "./middleware/twilio-validation.js";
|
|
94
|
+
import { appManagementRouteDefinitions } from "./routes/app-management-routes.js";
|
|
89
95
|
import { handleServePage } from "./routes/app-routes.js";
|
|
90
96
|
import { appRouteDefinitions } from "./routes/app-routes.js";
|
|
91
97
|
import { approvalRouteDefinitions } from "./routes/approval-routes.js";
|
|
@@ -102,6 +108,8 @@ import {
|
|
|
102
108
|
startGuardianExpirySweep,
|
|
103
109
|
stopGuardianExpirySweep,
|
|
104
110
|
} from "./routes/channel-routes.js";
|
|
111
|
+
import { channelVerificationRouteDefinitions } from "./routes/channel-verification-routes.js";
|
|
112
|
+
import { computerUseRouteDefinitions } from "./routes/computer-use-routes.js";
|
|
105
113
|
import {
|
|
106
114
|
contactCatchAllRouteDefinitions,
|
|
107
115
|
contactRouteDefinitions,
|
|
@@ -109,6 +117,8 @@ import {
|
|
|
109
117
|
import { conversationAttentionRouteDefinitions } from "./routes/conversation-attention-routes.js";
|
|
110
118
|
import { conversationRouteDefinitions } from "./routes/conversation-routes.js";
|
|
111
119
|
import { debugRouteDefinitions } from "./routes/debug-routes.js";
|
|
120
|
+
import { diagnosticsRouteDefinitions } from "./routes/diagnostics-routes.js";
|
|
121
|
+
import { documentRouteDefinitions } from "./routes/documents-routes.js";
|
|
112
122
|
import { eventsRouteDefinitions } from "./routes/events-routes.js";
|
|
113
123
|
import { globalSearchRouteDefinitions } from "./routes/global-search-routes.js";
|
|
114
124
|
import { guardianActionRouteDefinitions } from "./routes/guardian-action-routes.js";
|
|
@@ -116,7 +126,10 @@ import { handleGuardianBootstrap } from "./routes/guardian-bootstrap-routes.js";
|
|
|
116
126
|
import { handleGuardianRefresh } from "./routes/guardian-refresh-routes.js";
|
|
117
127
|
import { handleHealth } from "./routes/identity-routes.js";
|
|
118
128
|
import { identityRouteDefinitions } from "./routes/identity-routes.js";
|
|
119
|
-
import {
|
|
129
|
+
import { slackChannelRouteDefinitions } from "./routes/integrations/slack/channel.js";
|
|
130
|
+
import { slackShareRouteDefinitions } from "./routes/integrations/slack/share.js";
|
|
131
|
+
import { telegramRouteDefinitions } from "./routes/integrations/telegram.js";
|
|
132
|
+
import { twilioRouteDefinitions } from "./routes/integrations/twilio.js";
|
|
120
133
|
import { inviteRouteDefinitions } from "./routes/invite-routes.js";
|
|
121
134
|
import { migrationRouteDefinitions } from "./routes/migration-routes.js";
|
|
122
135
|
import type { PairingHandlerContext } from "./routes/pairing-routes.js";
|
|
@@ -125,13 +138,20 @@ import {
|
|
|
125
138
|
handlePairingStatus,
|
|
126
139
|
pairingRouteDefinitions,
|
|
127
140
|
} from "./routes/pairing-routes.js";
|
|
141
|
+
import { recordingRouteDefinitions } from "./routes/recording-routes.js";
|
|
142
|
+
import { scheduleRouteDefinitions } from "./routes/schedule-routes.js";
|
|
128
143
|
import { secretRouteDefinitions } from "./routes/secret-routes.js";
|
|
129
|
-
import {
|
|
144
|
+
import { sessionManagementRouteDefinitions } from "./routes/session-management-routes.js";
|
|
145
|
+
import { sessionQueryRouteDefinitions } from "./routes/session-query-routes.js";
|
|
146
|
+
import { settingsRouteDefinitions } from "./routes/settings-routes.js";
|
|
147
|
+
import { skillRouteDefinitions } from "./routes/skills-routes.js";
|
|
148
|
+
import { subagentRouteDefinitions } from "./routes/subagents-routes.js";
|
|
130
149
|
import { surfaceActionRouteDefinitions } from "./routes/surface-action-routes.js";
|
|
131
150
|
import { surfaceContentRouteDefinitions } from "./routes/surface-content-routes.js";
|
|
132
151
|
import { trustRulesRouteDefinitions } from "./routes/trust-rules-routes.js";
|
|
133
|
-
import { twilioRouteDefinitions } from "./routes/twilio-routes.js";
|
|
134
152
|
import { usageRouteDefinitions } from "./routes/usage-routes.js";
|
|
153
|
+
import { workItemRouteDefinitions } from "./routes/work-items-routes.js";
|
|
154
|
+
import { workspaceRouteDefinitions } from "./routes/workspace-routes.js";
|
|
135
155
|
|
|
136
156
|
// Re-export for consumers
|
|
137
157
|
export { isPrivateAddress } from "./middleware/auth.js";
|
|
@@ -187,6 +207,12 @@ export class RuntimeHttpServer {
|
|
|
187
207
|
private pairingBroadcast?: (msg: ServerMessage) => void;
|
|
188
208
|
private sendMessageDeps?: SendMessageDeps;
|
|
189
209
|
private findSession?: RuntimeHttpServerOptions["findSession"];
|
|
210
|
+
private findSessionBySurfaceId?: RuntimeHttpServerOptions["findSessionBySurfaceId"];
|
|
211
|
+
private getSkillContext?: RuntimeHttpServerOptions["getSkillContext"];
|
|
212
|
+
private sessionManagementDeps?: RuntimeHttpServerOptions["sessionManagementDeps"];
|
|
213
|
+
private getModelSetContext?: RuntimeHttpServerOptions["getModelSetContext"];
|
|
214
|
+
private getComputerUseDeps?: RuntimeHttpServerOptions["getComputerUseDeps"];
|
|
215
|
+
private getRecordingDeps?: RuntimeHttpServerOptions["getRecordingDeps"];
|
|
190
216
|
private router: HttpRouter;
|
|
191
217
|
|
|
192
218
|
constructor(options: RuntimeHttpServerOptions = {}) {
|
|
@@ -202,6 +228,12 @@ export class RuntimeHttpServer {
|
|
|
202
228
|
this.interfacesDir = options.interfacesDir ?? null;
|
|
203
229
|
this.sendMessageDeps = options.sendMessageDeps;
|
|
204
230
|
this.findSession = options.findSession;
|
|
231
|
+
this.findSessionBySurfaceId = options.findSessionBySurfaceId;
|
|
232
|
+
this.getSkillContext = options.getSkillContext;
|
|
233
|
+
this.sessionManagementDeps = options.sessionManagementDeps;
|
|
234
|
+
this.getModelSetContext = options.getModelSetContext;
|
|
235
|
+
this.getComputerUseDeps = options.getComputerUseDeps;
|
|
236
|
+
this.getRecordingDeps = options.getRecordingDeps;
|
|
205
237
|
this.router = new HttpRouter(this.buildRouteTable());
|
|
206
238
|
}
|
|
207
239
|
|
|
@@ -240,10 +272,9 @@ export class RuntimeHttpServer {
|
|
|
240
272
|
featureFlagToken: this.readFeatureFlagToken(),
|
|
241
273
|
pairingBroadcast: ipcBroadcast
|
|
242
274
|
? (msg) => {
|
|
243
|
-
// Broadcast to
|
|
275
|
+
// Broadcast to all clients via the event hub so HTTP/SSE clients
|
|
276
|
+
// (e.g. macOS app) receive pairing approval requests.
|
|
244
277
|
ipcBroadcast(msg);
|
|
245
|
-
// Also publish to the event hub so HTTP/SSE clients (e.g. macOS
|
|
246
|
-
// app with localHttpEnabled) receive pairing approval requests.
|
|
247
278
|
void assistantEventHub.publish(
|
|
248
279
|
buildAssistantEvent(DAEMON_INTERNAL_ASSISTANT_ID, msg),
|
|
249
280
|
);
|
|
@@ -458,16 +489,10 @@ export class RuntimeHttpServer {
|
|
|
458
489
|
// needs to work when the access token is expired. Bootstrap has its
|
|
459
490
|
// own loopback IP validation; refresh is secured by the refresh token
|
|
460
491
|
// in the request body (32 random bytes, hash-only storage).
|
|
461
|
-
if (
|
|
462
|
-
path === "/v1/integrations/guardian/vellum/bootstrap" &&
|
|
463
|
-
req.method === "POST"
|
|
464
|
-
) {
|
|
492
|
+
if (path === "/v1/guardian/init" && req.method === "POST") {
|
|
465
493
|
return await handleGuardianBootstrap(req, server);
|
|
466
494
|
}
|
|
467
|
-
if (
|
|
468
|
-
path === "/v1/integrations/guardian/vellum/refresh" &&
|
|
469
|
-
req.method === "POST"
|
|
470
|
-
) {
|
|
495
|
+
if (path === "/v1/guardian/refresh" && req.method === "POST") {
|
|
471
496
|
return await handleGuardianRefresh(req);
|
|
472
497
|
}
|
|
473
498
|
|
|
@@ -683,10 +708,44 @@ export class RuntimeHttpServer {
|
|
|
683
708
|
getPairingContext: () => this.pairingContext,
|
|
684
709
|
}),
|
|
685
710
|
...appRouteDefinitions(),
|
|
711
|
+
...appManagementRouteDefinitions(),
|
|
686
712
|
...secretRouteDefinitions(),
|
|
687
713
|
...identityRouteDefinitions(),
|
|
688
714
|
...debugRouteDefinitions(),
|
|
689
715
|
...usageRouteDefinitions(),
|
|
716
|
+
...workspaceRouteDefinitions(),
|
|
717
|
+
...settingsRouteDefinitions(),
|
|
718
|
+
...scheduleRouteDefinitions({
|
|
719
|
+
sendMessageDeps: this.sendMessageDeps,
|
|
720
|
+
}),
|
|
721
|
+
...diagnosticsRouteDefinitions(),
|
|
722
|
+
...documentRouteDefinitions(),
|
|
723
|
+
...workItemRouteDefinitions(
|
|
724
|
+
this.sendMessageDeps
|
|
725
|
+
? {
|
|
726
|
+
getOrCreateSession: (conversationId) =>
|
|
727
|
+
this.sendMessageDeps!.getOrCreateSession(conversationId),
|
|
728
|
+
findSession: this.findSession
|
|
729
|
+
? (conversationId) => {
|
|
730
|
+
const s = this.findSession!(conversationId);
|
|
731
|
+
if (!s || !("abort" in s)) return undefined;
|
|
732
|
+
return s as import("../daemon/session.js").Session;
|
|
733
|
+
}
|
|
734
|
+
: undefined,
|
|
735
|
+
}
|
|
736
|
+
: undefined,
|
|
737
|
+
),
|
|
738
|
+
...subagentRouteDefinitions(),
|
|
739
|
+
...sessionQueryRouteDefinitions({
|
|
740
|
+
getModelSetContext: this.getModelSetContext,
|
|
741
|
+
findSessionForQueue: this.findSession
|
|
742
|
+
? (id) => {
|
|
743
|
+
const s = this.findSession!(id);
|
|
744
|
+
if (!s?.removeQueuedMessage) return undefined;
|
|
745
|
+
return { removeQueuedMessage: s.removeQueuedMessage.bind(s) };
|
|
746
|
+
}
|
|
747
|
+
: undefined,
|
|
748
|
+
}),
|
|
690
749
|
|
|
691
750
|
// Browser relay — not extracted into a domain module because
|
|
692
751
|
// these two routes depend on the in-process extensionRelayServer
|
|
@@ -720,12 +779,8 @@ export class RuntimeHttpServer {
|
|
|
720
779
|
handler: ({ url }) => {
|
|
721
780
|
const limit = Number(url.searchParams.get("limit") ?? 50);
|
|
722
781
|
const offset = Number(url.searchParams.get("offset") ?? 0);
|
|
723
|
-
const conversations =
|
|
724
|
-
|
|
725
|
-
false,
|
|
726
|
-
offset,
|
|
727
|
-
);
|
|
728
|
-
const totalCount = conversationStore.countConversations();
|
|
782
|
+
const conversations = listConversations(limit, false, offset);
|
|
783
|
+
const totalCount = countConversations();
|
|
729
784
|
const conversationIds = conversations.map((c) => c.id);
|
|
730
785
|
const bindings =
|
|
731
786
|
externalConversationStore.getBindingsForConversations(
|
|
@@ -772,6 +827,7 @@ export class RuntimeHttpServer {
|
|
|
772
827
|
updatedAt: c.updatedAt,
|
|
773
828
|
threadType: c.threadType === "private" ? "private" : "standard",
|
|
774
829
|
source: c.source ?? "user",
|
|
830
|
+
...(c.scheduleJobId ? { scheduleJobId: c.scheduleJobId } : {}),
|
|
775
831
|
...(binding
|
|
776
832
|
? {
|
|
777
833
|
channelBinding: {
|
|
@@ -796,6 +852,10 @@ export class RuntimeHttpServer {
|
|
|
796
852
|
|
|
797
853
|
...conversationAttentionRouteDefinitions(),
|
|
798
854
|
|
|
855
|
+
...(this.sessionManagementDeps
|
|
856
|
+
? sessionManagementRouteDefinitions(this.sessionManagementDeps)
|
|
857
|
+
: []),
|
|
858
|
+
|
|
799
859
|
{
|
|
800
860
|
endpoint: "conversations/seen",
|
|
801
861
|
method: "POST",
|
|
@@ -832,6 +892,34 @@ export class RuntimeHttpServer {
|
|
|
832
892
|
},
|
|
833
893
|
},
|
|
834
894
|
|
|
895
|
+
{
|
|
896
|
+
endpoint: "conversations/unread",
|
|
897
|
+
method: "POST",
|
|
898
|
+
handler: async ({ req }) => {
|
|
899
|
+
const body = (await req.json()) as Record<string, unknown>;
|
|
900
|
+
const conversationId = body.conversationId as string | undefined;
|
|
901
|
+
if (!conversationId)
|
|
902
|
+
return httpError("BAD_REQUEST", "Missing conversationId", 400);
|
|
903
|
+
try {
|
|
904
|
+
markConversationUnread(conversationId);
|
|
905
|
+
return Response.json({ ok: true });
|
|
906
|
+
} catch (err) {
|
|
907
|
+
if (err instanceof UserError) {
|
|
908
|
+
return httpError("UNPROCESSABLE_ENTITY", err.message, 422);
|
|
909
|
+
}
|
|
910
|
+
log.error(
|
|
911
|
+
{ err, conversationId },
|
|
912
|
+
"POST /v1/conversations/unread: failed",
|
|
913
|
+
);
|
|
914
|
+
return httpError(
|
|
915
|
+
"INTERNAL_ERROR",
|
|
916
|
+
"Failed to mark conversation unread",
|
|
917
|
+
500,
|
|
918
|
+
);
|
|
919
|
+
}
|
|
920
|
+
},
|
|
921
|
+
},
|
|
922
|
+
|
|
835
923
|
...conversationRouteDefinitions({
|
|
836
924
|
interfacesDir: this.interfacesDir,
|
|
837
925
|
sendMessageDeps: this.sendMessageDeps,
|
|
@@ -841,8 +929,16 @@ export class RuntimeHttpServer {
|
|
|
841
929
|
}),
|
|
842
930
|
...globalSearchRouteDefinitions(),
|
|
843
931
|
...approvalRouteDefinitions(),
|
|
932
|
+
...(this.getSkillContext
|
|
933
|
+
? skillRouteDefinitions({
|
|
934
|
+
getSkillContext: this.getSkillContext,
|
|
935
|
+
})
|
|
936
|
+
: []),
|
|
844
937
|
...trustRulesRouteDefinitions(),
|
|
845
|
-
...surfaceActionRouteDefinitions({
|
|
938
|
+
...surfaceActionRouteDefinitions({
|
|
939
|
+
findSession: this.findSession,
|
|
940
|
+
findSessionBySurfaceId: this.findSessionBySurfaceId,
|
|
941
|
+
}),
|
|
846
942
|
...surfaceContentRouteDefinitions({ findSession: this.findSession }),
|
|
847
943
|
...guardianActionRouteDefinitions(),
|
|
848
944
|
|
|
@@ -851,12 +947,25 @@ export class RuntimeHttpServer {
|
|
|
851
947
|
// contacts/:id catch-all must follow invite routes to avoid shadowing
|
|
852
948
|
...contactCatchAllRouteDefinitions(),
|
|
853
949
|
|
|
854
|
-
...
|
|
950
|
+
...telegramRouteDefinitions(),
|
|
951
|
+
...channelVerificationRouteDefinitions(),
|
|
952
|
+
...slackChannelRouteDefinitions(),
|
|
855
953
|
...slackShareRouteDefinitions(),
|
|
856
954
|
...twilioRouteDefinitions(),
|
|
857
955
|
...channelReadinessRouteDefinitions(),
|
|
858
956
|
...attachmentRouteDefinitions(),
|
|
859
957
|
|
|
958
|
+
...(this.getComputerUseDeps
|
|
959
|
+
? computerUseRouteDefinitions({
|
|
960
|
+
getComputerUseDeps: this.getComputerUseDeps,
|
|
961
|
+
})
|
|
962
|
+
: []),
|
|
963
|
+
...(this.getRecordingDeps
|
|
964
|
+
? recordingRouteDefinitions({
|
|
965
|
+
getRecordingDeps: this.getRecordingDeps,
|
|
966
|
+
})
|
|
967
|
+
: []),
|
|
968
|
+
|
|
860
969
|
{
|
|
861
970
|
endpoint: "interfaces/:path*",
|
|
862
971
|
method: "GET",
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
* Shared types for the runtime HTTP server and its route handlers.
|
|
3
3
|
*/
|
|
4
4
|
import type { ChannelId, InterfaceId } from "../channels/types.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { SkillOperationContext } from "../daemon/handlers/skills.js";
|
|
6
|
+
import type { ServerMessage } from "../daemon/message-protocol.js";
|
|
7
|
+
import type {
|
|
8
|
+
SurfaceData,
|
|
9
|
+
SurfaceType,
|
|
10
|
+
} from "../daemon/message-types/surfaces.js";
|
|
6
11
|
import type { Session } from "../daemon/session.js";
|
|
7
12
|
import type { TrustContext } from "../daemon/session-runtime-assembly.js";
|
|
8
13
|
import type {
|
|
@@ -14,6 +19,7 @@ import type {
|
|
|
14
19
|
ComposeGuardianActionMessageOptions,
|
|
15
20
|
GuardianActionMessageContext,
|
|
16
21
|
} from "./guardian-action-message-composer.js";
|
|
22
|
+
import type { SessionManagementDeps } from "./routes/session-management-routes.js";
|
|
17
23
|
/**
|
|
18
24
|
* Daemon-injected function that generates approval copy using a provider.
|
|
19
25
|
* Returns generated text or `null` on failure (caller falls back to deterministic text).
|
|
@@ -122,6 +128,8 @@ export interface RuntimeMessageSessionOptions {
|
|
|
122
128
|
isInteractive?: boolean;
|
|
123
129
|
/** Channel command intent metadata (e.g. Telegram /start). */
|
|
124
130
|
commandIntent?: { type: string; payload?: string; languageCode?: string };
|
|
131
|
+
/** Optional callback to receive real-time agent loop events (text deltas, tool starts, etc.). */
|
|
132
|
+
onEvent?: (msg: ServerMessage) => void;
|
|
125
133
|
}
|
|
126
134
|
|
|
127
135
|
export type MessageProcessor = (
|
|
@@ -170,6 +178,8 @@ export interface RuntimeHttpServerOptions {
|
|
|
170
178
|
guardianFollowUpConversationGenerator?: GuardianFollowUpConversationGenerator;
|
|
171
179
|
/** Dependencies for the POST /v1/messages queue-if-busy handler. */
|
|
172
180
|
sendMessageDeps?: SendMessageDeps;
|
|
181
|
+
/** Context provider for skill management HTTP routes. */
|
|
182
|
+
getSkillContext?: () => SkillOperationContext;
|
|
173
183
|
/** Lookup an active session by ID (for surface actions and content fetches). */
|
|
174
184
|
findSession?: (sessionId: string) =>
|
|
175
185
|
| {
|
|
@@ -189,8 +199,31 @@ export interface RuntimeHttpServerOptions {
|
|
|
189
199
|
data: SurfaceData;
|
|
190
200
|
actions?: Array<{ id: string; label: string; style?: string }>;
|
|
191
201
|
}>;
|
|
202
|
+
removeQueuedMessage?: (requestId: string) => boolean;
|
|
203
|
+
}
|
|
204
|
+
| undefined;
|
|
205
|
+
/** Lookup an active session by surfaceId (fallback when sessionId is absent). */
|
|
206
|
+
findSessionBySurfaceId?: (surfaceId: string) =>
|
|
207
|
+
| {
|
|
208
|
+
handleSurfaceAction(
|
|
209
|
+
surfaceId: string,
|
|
210
|
+
actionId: string,
|
|
211
|
+
data?: Record<string, unknown>,
|
|
212
|
+
): void;
|
|
213
|
+
surfaceState: Map<
|
|
214
|
+
string,
|
|
215
|
+
{ surfaceType: SurfaceType; data: SurfaceData; title?: string }
|
|
216
|
+
>;
|
|
192
217
|
}
|
|
193
218
|
| undefined;
|
|
219
|
+
/** Dependencies for session management HTTP routes (switch, rename, clear, cancel, undo, regenerate). */
|
|
220
|
+
sessionManagementDeps?: SessionManagementDeps;
|
|
221
|
+
/** Lazy factory for model config set context (session eviction, config reload suppression). */
|
|
222
|
+
getModelSetContext?: () => import("../daemon/handlers/config-model.js").ModelSetContext;
|
|
223
|
+
/** Provider for computer-use session dependencies (CU routes). */
|
|
224
|
+
getComputerUseDeps?: () => import("./routes/computer-use-routes.js").ComputerUseDeps;
|
|
225
|
+
/** Provider for recording dependencies (recording routes). */
|
|
226
|
+
getRecordingDeps?: () => import("./routes/recording-routes.js").RecordingDeps;
|
|
194
227
|
}
|
|
195
228
|
|
|
196
229
|
export interface RuntimeAttachmentMetadata {
|
|
@@ -32,13 +32,11 @@ export function channelDisplayLabel(type: string): string {
|
|
|
32
32
|
switch (type) {
|
|
33
33
|
case "telegram":
|
|
34
34
|
return "Telegram";
|
|
35
|
-
case "sms":
|
|
36
|
-
return "SMS";
|
|
37
35
|
case "email":
|
|
38
36
|
return "Email";
|
|
39
37
|
case "slack":
|
|
40
38
|
return "Slack";
|
|
41
|
-
case "
|
|
39
|
+
case "phone":
|
|
42
40
|
return "Voice";
|
|
43
41
|
default:
|
|
44
42
|
return type.charAt(0).toUpperCase() + type.slice(1);
|
|
@@ -285,7 +285,7 @@ export function redeemInvite(params: {
|
|
|
285
285
|
export function redeemVoiceInviteCode(params: {
|
|
286
286
|
assistantId?: string;
|
|
287
287
|
callerExternalUserId: string;
|
|
288
|
-
sourceChannel: "
|
|
288
|
+
sourceChannel: "phone";
|
|
289
289
|
code: string;
|
|
290
290
|
}): VoiceRedemptionOutcome {
|
|
291
291
|
const { callerExternalUserId, code } = params;
|
|
@@ -325,16 +325,16 @@ export function redeemVoiceInviteCode(params: {
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
// Channel enforcement: voice invites can only be redeemed on the voice channel
|
|
328
|
-
if (invite.sourceChannel !== "
|
|
328
|
+
if (invite.sourceChannel !== "phone") {
|
|
329
329
|
return { ok: false, reason: "invalid_or_expired" };
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
// Check for existing membership
|
|
333
333
|
const canonicalCallerId =
|
|
334
|
-
canonicalizeInboundIdentity("
|
|
334
|
+
canonicalizeInboundIdentity("phone" as ChannelId, callerExternalUserId) ??
|
|
335
335
|
callerExternalUserId;
|
|
336
336
|
const voiceContactResult = findContactChannel({
|
|
337
|
-
channelType: "
|
|
337
|
+
channelType: "phone",
|
|
338
338
|
externalUserId: canonicalCallerId,
|
|
339
339
|
});
|
|
340
340
|
const existingVoiceChannel = voiceContactResult?.channel ?? null;
|
|
@@ -367,7 +367,7 @@ export function redeemVoiceInviteCode(params: {
|
|
|
367
367
|
getSqlite()
|
|
368
368
|
.transaction(() => {
|
|
369
369
|
const writeResult = upsertContactChannel({
|
|
370
|
-
sourceChannel: "
|
|
370
|
+
sourceChannel: "phone",
|
|
371
371
|
externalUserId: callerExternalUserId,
|
|
372
372
|
externalChatId: callerExternalUserId,
|
|
373
373
|
displayName: preservedDisplayName,
|
|
@@ -9,11 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { isChannelId } from "../channels/types.js";
|
|
12
|
-
import {
|
|
13
|
-
DECLINED_BY_USER_SENTINEL,
|
|
14
|
-
DEFAULT_USER_REFERENCE,
|
|
15
|
-
resolveGuardianName,
|
|
16
|
-
} from "../config/user-reference.js";
|
|
17
12
|
import {
|
|
18
13
|
createInvite,
|
|
19
14
|
findByTokenHash,
|
|
@@ -23,6 +18,11 @@ import {
|
|
|
23
18
|
listInvites,
|
|
24
19
|
revokeInvite,
|
|
25
20
|
} from "../memory/invite-store.js";
|
|
21
|
+
import {
|
|
22
|
+
DECLINED_BY_USER_SENTINEL,
|
|
23
|
+
DEFAULT_USER_REFERENCE,
|
|
24
|
+
resolveGuardianName,
|
|
25
|
+
} from "../prompts/user-reference.js";
|
|
26
26
|
import { isValidE164 } from "../util/phone.js";
|
|
27
27
|
import { generateVoiceCode, hashVoiceCode } from "../util/voice-code.js";
|
|
28
28
|
import {
|
|
@@ -167,7 +167,7 @@ export async function createIngressInvite(params: {
|
|
|
167
167
|
let voiceCode: string | undefined;
|
|
168
168
|
let voiceCodeHash: string | undefined;
|
|
169
169
|
let effectiveGuardianName: string | undefined;
|
|
170
|
-
const isVoice = params.sourceChannel === "
|
|
170
|
+
const isVoice = params.sourceChannel === "phone";
|
|
171
171
|
|
|
172
172
|
// For non-voice invites: generate a 6-digit invite code for guardian-mediated
|
|
173
173
|
// redemption. The plaintext code is returned once in the response; only the
|
|
@@ -351,7 +351,7 @@ export function redeemIngressInviteTyped(params: {
|
|
|
351
351
|
export function redeemVoiceInviteCode(params: {
|
|
352
352
|
assistantId?: string;
|
|
353
353
|
callerExternalUserId: string;
|
|
354
|
-
sourceChannel: "
|
|
354
|
+
sourceChannel: "phone";
|
|
355
355
|
code: string;
|
|
356
356
|
}): VoiceRedemptionOutcome {
|
|
357
357
|
return redeemVoiceInviteCodeTyped(params);
|
|
@@ -13,16 +13,42 @@
|
|
|
13
13
|
|
|
14
14
|
import type { ChannelId } from "../channels/types.js";
|
|
15
15
|
import { findGuardianForChannel } from "../contacts/contact-store.js";
|
|
16
|
-
import { buildIpcAuthContext } from "../daemon/ipc-handler.js";
|
|
17
16
|
import type { TrustContext } from "../daemon/session-runtime-assembly.js";
|
|
18
17
|
import { getLogger } from "../util/logger.js";
|
|
19
18
|
import { DAEMON_INTERNAL_ASSISTANT_ID } from "./assistant-scope.js";
|
|
19
|
+
import { CURRENT_POLICY_EPOCH } from "./auth/policy.js";
|
|
20
|
+
import { resolveScopeProfile } from "./auth/scopes.js";
|
|
20
21
|
import type { AuthContext } from "./auth/types.js";
|
|
21
22
|
import { ensureVellumGuardianBinding } from "./guardian-vellum-migration.js";
|
|
22
23
|
import { resolveTrustContext } from "./trust-context-resolver.js";
|
|
23
24
|
|
|
24
25
|
const log = getLogger("local-actor-identity");
|
|
25
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Build a synthetic AuthContext for a local session.
|
|
29
|
+
*
|
|
30
|
+
* Local connections are pre-authenticated via the daemon's file-system
|
|
31
|
+
* permission model. This produces the same AuthContext shape that HTTP
|
|
32
|
+
* routes receive from JWT verification, keeping downstream code
|
|
33
|
+
* transport-agnostic.
|
|
34
|
+
*/
|
|
35
|
+
export function buildLocalAuthContext(sessionId: string): AuthContext {
|
|
36
|
+
return {
|
|
37
|
+
subject: `ipc:self:${sessionId}`,
|
|
38
|
+
principalType: "ipc",
|
|
39
|
+
assistantId: DAEMON_INTERNAL_ASSISTANT_ID,
|
|
40
|
+
sessionId,
|
|
41
|
+
scopeProfile: "ipc_v1",
|
|
42
|
+
scopes: resolveScopeProfile("ipc_v1"),
|
|
43
|
+
policyEpoch: CURRENT_POLICY_EPOCH,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated Use `buildLocalAuthContext` instead.
|
|
49
|
+
*/
|
|
50
|
+
export const buildIpcAuthContext = buildLocalAuthContext;
|
|
51
|
+
|
|
26
52
|
/**
|
|
27
53
|
* Resolve the guardian runtime context for a local IPC connection.
|
|
28
54
|
*
|
|
@@ -90,7 +116,7 @@ export function resolveLocalIpcTrustContext(
|
|
|
90
116
|
* `authContext.actorPrincipalId` path as HTTP sessions.
|
|
91
117
|
*/
|
|
92
118
|
export function resolveLocalIpcAuthContext(sessionId: string): AuthContext {
|
|
93
|
-
const authContext =
|
|
119
|
+
const authContext = buildLocalAuthContext(sessionId);
|
|
94
120
|
|
|
95
121
|
// Enrich with the guardian principal ID from contacts-first path
|
|
96
122
|
const guardianResult = findGuardianForChannel("vellum");
|