@vellumai/assistant 0.4.42 → 0.4.44
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 +140 -403
- package/Dockerfile +0 -1
- package/README.md +81 -92
- package/bun.lock +8 -2
- package/docs/architecture/integrations.md +81 -104
- 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 -3
- 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-asset.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 +41 -35
- 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 +7 -7
- 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 +10 -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__/error-handler-friendly-messages.test.ts +46 -0
- 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__/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 +357 -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 -12
- 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__/provider-fail-open-selection.test.ts +12 -2
- 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 -4
- 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 +17 -49
- 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 +10 -20
- 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 +7 -12
- 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 +48 -399
- 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 +475 -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} +14 -54
- package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
- package/src/cli/commands/amazon/session.ts +108 -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/cli/commands/twitter/__tests__/cli-read-routing.test.ts +345 -0
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +252 -0
- package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -48
- package/src/cli/commands/twitter/index.ts +420 -0
- package/src/{twitter → cli/commands/twitter}/oauth-client.ts +1 -35
- package/src/cli/commands/twitter/router.ts +351 -0
- package/src/cli/commands/twitter/types.ts +30 -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 -6
- package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
- package/src/config/bundled-skills/app-builder/SKILL.md +4 -9
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
- 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 -12
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -90
- package/src/config/bundled-skills/doordash/doordash-cli.ts +132 -109
- package/src/config/bundled-skills/doordash/lib/session.ts +22 -19
- 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 +73 -144
- 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 +8 -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 +151 -105
- 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 +155 -55
- package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
- package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -25
- 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 +30 -20
- 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 +7 -1
- package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
- package/src/daemon/{ipc-contract → message-types}/surfaces.ts +2 -0
- 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 +42 -14
- package/src/daemon/seed-files.ts +3 -27
- package/src/daemon/server.ts +134 -524
- package/src/daemon/session-agent-loop-handlers.ts +46 -9
- 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 -32
- package/src/daemon/session-surfaces.ts +187 -35
- package/src/daemon/session-tool-setup.ts +1 -1
- package/src/daemon/session-usage.ts +119 -18
- package/src/daemon/session.ts +11 -33
- 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 -60
- 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/schema/infrastructure.ts +0 -8
- 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 +9 -9
- 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 +44 -26
- package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -3
- package/src/providers/registry.ts +2 -4
- 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__/guard-tests.test.ts +1 -0
- package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
- package/src/runtime/auth/__tests__/scopes.test.ts +2 -1
- package/src/runtime/auth/__tests__/subject.test.ts +32 -0
- package/src/runtime/auth/route-policy.ts +137 -25
- package/src/runtime/auth/scopes.ts +1 -0
- package/src/runtime/auth/subject.ts +9 -0
- package/src/runtime/auth/token-service.ts +12 -1
- 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 +44 -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/error-handler.ts +14 -1
- 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 +918 -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/brain-graph/brain-graph.html +1845 -0
- package/src/runtime/routes/brain-graph-routes.ts +4 -42
- 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 +20 -24
- package/src/runtime/routes/debug-routes.ts +1 -1
- package/src/runtime/routes/diagnostics-routes.ts +890 -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 +887 -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/AGENTS.md +38 -0
- package/src/tools/apps/executors.ts +0 -6
- 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/document/editor-template.ts +10 -8
- 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 +408 -0
- package/src/usage/types.ts +21 -0
- package/src/util/canonicalize-identity.ts +2 -6
- package/src/util/errors.ts +12 -0
- 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__/home-base-bootstrap.test.ts +0 -86
- 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__/prebuilt-home-base-seed.test.ts +0 -79
- 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__/twitter-cli-error-shaping.test.ts +0 -224
- package/src/__tests__/twitter-cli-routing.test.ts +0 -286
- 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/cli/twitter.ts +0 -1111
- 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/home-base/app-link-store.ts +0 -78
- package/src/home-base/bootstrap.ts +0 -74
- package/src/home-base/prebuilt/brain-graph.html +0 -1483
- package/src/home-base/prebuilt/index.html +0 -702
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -122
- package/src/home-base/prebuilt-home-base-updater.ts +0 -36
- 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/client.ts +0 -979
- package/src/twitter/router.ts +0 -131
- package/src/twitter/session.ts +0 -54
- package/src/util/cookie-session.ts +0 -114
- 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/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}/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}/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/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
|
@@ -18,8 +18,10 @@ import {
|
|
|
18
18
|
unregisterCallTranscriptNotifier,
|
|
19
19
|
} from "../calls/call-state.js";
|
|
20
20
|
import { getCallSession } from "../calls/call-store.js";
|
|
21
|
-
import
|
|
22
|
-
|
|
21
|
+
import {
|
|
22
|
+
addMessage,
|
|
23
|
+
provenanceFromTrustContext,
|
|
24
|
+
} from "../memory/conversation-crud.js";
|
|
23
25
|
import type { Message } from "../providers/types.js";
|
|
24
26
|
import type { WatchSession } from "../tools/watch/watch-state.js";
|
|
25
27
|
import {
|
|
@@ -31,7 +33,7 @@ import {
|
|
|
31
33
|
unregisterWatchCompletionNotifier,
|
|
32
34
|
unregisterWatchStartNotifier,
|
|
33
35
|
} from "../tools/watch/watch-state.js";
|
|
34
|
-
import type { ServerMessage } from "./
|
|
36
|
+
import type { ServerMessage } from "./message-protocol.js";
|
|
35
37
|
import type { TrustContext } from "./session-runtime-assembly.js";
|
|
36
38
|
import {
|
|
37
39
|
lastCommentaryBySession,
|
|
@@ -106,16 +108,16 @@ export function registerSessionNotifiers(
|
|
|
106
108
|
const callee = callSession?.toNumber ?? "the caller";
|
|
107
109
|
const questionText = `**Live call question** (to ${callee}):\n\n${question}\n\n_Use the call answer API to respond._`;
|
|
108
110
|
|
|
109
|
-
await
|
|
111
|
+
await addMessage(
|
|
110
112
|
conversationId,
|
|
111
113
|
"assistant",
|
|
112
114
|
JSON.stringify([{ type: "text", text: questionText }]),
|
|
113
115
|
{
|
|
114
116
|
...provenanceFromTrustContext(ctx.trustContext),
|
|
115
|
-
userMessageChannel: "
|
|
116
|
-
assistantMessageChannel: "
|
|
117
|
-
userMessageInterface: "
|
|
118
|
-
assistantMessageInterface: "
|
|
117
|
+
userMessageChannel: "phone",
|
|
118
|
+
assistantMessageChannel: "phone",
|
|
119
|
+
userMessageInterface: "phone",
|
|
120
|
+
assistantMessageInterface: "phone",
|
|
119
121
|
},
|
|
120
122
|
);
|
|
121
123
|
|
|
@@ -17,21 +17,28 @@ import type {
|
|
|
17
17
|
import { parseChannelId, parseInterfaceId } from "../channels/types.js";
|
|
18
18
|
import { getConfig } from "../config/loader.js";
|
|
19
19
|
import { listPendingRequestsByConversationScope } from "../memory/canonical-guardian-store.js";
|
|
20
|
-
import
|
|
21
|
-
|
|
20
|
+
import {
|
|
21
|
+
addMessage,
|
|
22
|
+
provenanceFromTrustContext,
|
|
23
|
+
setConversationOriginChannelIfUnset,
|
|
24
|
+
setConversationOriginInterfaceIfUnset,
|
|
25
|
+
} from "../memory/conversation-crud.js";
|
|
22
26
|
import { extractPreferences } from "../notifications/preference-extractor.js";
|
|
23
27
|
import { createPreference } from "../notifications/preferences-store.js";
|
|
24
28
|
import type { Message } from "../providers/types.js";
|
|
25
29
|
import { routeGuardianReply } from "../runtime/guardian-reply-router.js";
|
|
26
30
|
import { getLogger } from "../util/logger.js";
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
import type {
|
|
32
|
+
ServerMessage,
|
|
33
|
+
UsageStats,
|
|
34
|
+
UserMessageAttachment,
|
|
35
|
+
} from "./message-protocol.js";
|
|
30
36
|
import type { MessageQueue } from "./session-queue-manager.js";
|
|
31
37
|
import type { QueueDrainReason } from "./session-queue-manager.js";
|
|
32
38
|
import type { TrustContext } from "./session-runtime-assembly.js";
|
|
33
39
|
import { resolveSlash, type SlashContext } from "./session-slash.js";
|
|
34
40
|
import type { TraceEmitter } from "./trace-emitter.js";
|
|
41
|
+
import { resolveVerificationSessionIntent } from "./verification-session-intent.js";
|
|
35
42
|
|
|
36
43
|
const log = getLogger("session-process");
|
|
37
44
|
|
|
@@ -287,7 +294,7 @@ export async function drainQueue(
|
|
|
287
294
|
createUserMessage(next.displayContent, next.attachments).content,
|
|
288
295
|
)
|
|
289
296
|
: JSON.stringify(userMsg.content);
|
|
290
|
-
await
|
|
297
|
+
await addMessage(
|
|
291
298
|
session.conversationId,
|
|
292
299
|
"user",
|
|
293
300
|
contentToPersist,
|
|
@@ -296,7 +303,7 @@ export async function drainQueue(
|
|
|
296
303
|
session.messages.push(userMsg);
|
|
297
304
|
|
|
298
305
|
const assistantMsg = createAssistantMessage(slashResult.message);
|
|
299
|
-
await
|
|
306
|
+
await addMessage(
|
|
300
307
|
session.conversationId,
|
|
301
308
|
"assistant",
|
|
302
309
|
JSON.stringify(assistantMsg.content),
|
|
@@ -305,13 +312,13 @@ export async function drainQueue(
|
|
|
305
312
|
session.messages.push(assistantMsg);
|
|
306
313
|
|
|
307
314
|
if (queuedTurnCtx) {
|
|
308
|
-
|
|
315
|
+
setConversationOriginChannelIfUnset(
|
|
309
316
|
session.conversationId,
|
|
310
317
|
queuedTurnCtx.userMessageChannel,
|
|
311
318
|
);
|
|
312
319
|
}
|
|
313
320
|
if (queuedInterfaceCtx) {
|
|
314
|
-
|
|
321
|
+
setConversationOriginInterfaceIfUnset(
|
|
315
322
|
session.conversationId,
|
|
316
323
|
queuedInterfaceCtx.userMessageInterface,
|
|
317
324
|
);
|
|
@@ -373,16 +380,17 @@ export async function drainQueue(
|
|
|
373
380
|
// loop receives the rewritten instruction.
|
|
374
381
|
let agentLoopContent = resolvedContent;
|
|
375
382
|
if (slashResult.kind === "passthrough") {
|
|
376
|
-
const
|
|
377
|
-
|
|
383
|
+
const verificationIntent =
|
|
384
|
+
resolveVerificationSessionIntent(resolvedContent);
|
|
385
|
+
if (verificationIntent.kind === "direct_setup") {
|
|
378
386
|
log.info(
|
|
379
387
|
{
|
|
380
388
|
conversationId: session.conversationId,
|
|
381
|
-
channelHint:
|
|
389
|
+
channelHint: verificationIntent.channelHint,
|
|
382
390
|
},
|
|
383
|
-
"
|
|
391
|
+
"Verification session intent intercepted in queue — forcing skill flow",
|
|
384
392
|
);
|
|
385
|
-
agentLoopContent =
|
|
393
|
+
agentLoopContent = verificationIntent.rewrittenContent;
|
|
386
394
|
session.preactivatedSkillIds = ["guardian-verify-setup"];
|
|
387
395
|
}
|
|
388
396
|
}
|
|
@@ -566,7 +574,7 @@ export async function processMessage(
|
|
|
566
574
|
};
|
|
567
575
|
|
|
568
576
|
const userMsg = createUserMessage(content, attachments);
|
|
569
|
-
const persisted = await
|
|
577
|
+
const persisted = await addMessage(
|
|
570
578
|
session.conversationId,
|
|
571
579
|
"user",
|
|
572
580
|
JSON.stringify(userMsg.content),
|
|
@@ -580,7 +588,7 @@ export async function processMessage(
|
|
|
580
588
|
? "Decision applied."
|
|
581
589
|
: "Request already resolved.");
|
|
582
590
|
const assistantMsg = createAssistantMessage(replyText);
|
|
583
|
-
await
|
|
591
|
+
await addMessage(
|
|
584
592
|
session.conversationId,
|
|
585
593
|
"assistant",
|
|
586
594
|
JSON.stringify(assistantMsg.content),
|
|
@@ -636,7 +644,7 @@ export async function processMessage(
|
|
|
636
644
|
const contentToPersist = displayContent
|
|
637
645
|
? JSON.stringify(createUserMessage(displayContent, attachments).content)
|
|
638
646
|
: JSON.stringify(userMsg.content);
|
|
639
|
-
const persisted = await
|
|
647
|
+
const persisted = await addMessage(
|
|
640
648
|
session.conversationId,
|
|
641
649
|
"user",
|
|
642
650
|
contentToPersist,
|
|
@@ -645,7 +653,7 @@ export async function processMessage(
|
|
|
645
653
|
session.messages.push(userMsg);
|
|
646
654
|
|
|
647
655
|
const assistantMsg = createAssistantMessage(slashResult.message);
|
|
648
|
-
await
|
|
656
|
+
await addMessage(
|
|
649
657
|
session.conversationId,
|
|
650
658
|
"assistant",
|
|
651
659
|
JSON.stringify(assistantMsg.content),
|
|
@@ -654,13 +662,13 @@ export async function processMessage(
|
|
|
654
662
|
session.messages.push(assistantMsg);
|
|
655
663
|
|
|
656
664
|
if (pmTurnCtx) {
|
|
657
|
-
|
|
665
|
+
setConversationOriginChannelIfUnset(
|
|
658
666
|
session.conversationId,
|
|
659
667
|
pmTurnCtx.userMessageChannel,
|
|
660
668
|
);
|
|
661
669
|
}
|
|
662
670
|
if (pmInterfaceCtx) {
|
|
663
|
-
|
|
671
|
+
setConversationOriginInterfaceIfUnset(
|
|
664
672
|
session.conversationId,
|
|
665
673
|
pmInterfaceCtx.userMessageInterface,
|
|
666
674
|
);
|
|
@@ -698,16 +706,17 @@ export async function processMessage(
|
|
|
698
706
|
// rewritten content only for the agent loop instruction.
|
|
699
707
|
let agentLoopContent = resolvedContent;
|
|
700
708
|
if (slashResult.kind === "passthrough") {
|
|
701
|
-
const
|
|
702
|
-
|
|
709
|
+
const verificationIntent =
|
|
710
|
+
resolveVerificationSessionIntent(resolvedContent);
|
|
711
|
+
if (verificationIntent.kind === "direct_setup") {
|
|
703
712
|
log.info(
|
|
704
713
|
{
|
|
705
714
|
conversationId: session.conversationId,
|
|
706
|
-
channelHint:
|
|
715
|
+
channelHint: verificationIntent.channelHint,
|
|
707
716
|
},
|
|
708
|
-
"
|
|
717
|
+
"Verification session intent intercepted — forcing skill flow",
|
|
709
718
|
);
|
|
710
|
-
agentLoopContent =
|
|
719
|
+
agentLoopContent = verificationIntent.rewrittenContent;
|
|
711
720
|
session.preactivatedSkillIds = ["guardian-verify-setup"];
|
|
712
721
|
}
|
|
713
722
|
}
|
|
@@ -10,7 +10,7 @@ import type {
|
|
|
10
10
|
TurnInterfaceContext,
|
|
11
11
|
} from "../channels/types.js";
|
|
12
12
|
import { getLogger } from "../util/logger.js";
|
|
13
|
-
import type { ServerMessage, UserMessageAttachment } from "./
|
|
13
|
+
import type { ServerMessage, UserMessageAttachment } from "./message-protocol.js";
|
|
14
14
|
|
|
15
15
|
const log = getLogger("session-queue");
|
|
16
16
|
|
|
@@ -25,7 +25,7 @@ import { channelStatusToMemberStatus } from "../runtime/routes/inbound-stages/ac
|
|
|
25
25
|
* interacting. Used to gate UI-specific references and permission asks.
|
|
26
26
|
*/
|
|
27
27
|
export interface ChannelCapabilities {
|
|
28
|
-
/** The raw channel identifier (e.g. "vellum", "telegram"
|
|
28
|
+
/** The raw channel identifier (e.g. "vellum", "telegram"). */
|
|
29
29
|
channel: string;
|
|
30
30
|
/** Whether this channel can render the dashboard UI (apps, dynamic pages). */
|
|
31
31
|
dashboardCapable: boolean;
|
|
@@ -81,8 +81,6 @@ export interface TrustContext {
|
|
|
81
81
|
requesterExternalUserId?: string;
|
|
82
82
|
/** Chat/conversation ID the requester is interacting through. */
|
|
83
83
|
requesterChatId?: string;
|
|
84
|
-
/** Access denial reason, if applicable. See {@link DenialReason}. */
|
|
85
|
-
denialReason?: "no_binding" | "no_identity";
|
|
86
84
|
}
|
|
87
85
|
|
|
88
86
|
/**
|
|
@@ -113,8 +111,6 @@ export interface InboundActorContext {
|
|
|
113
111
|
memberStatus?: string;
|
|
114
112
|
/** Member policy when the actor has a contact record. */
|
|
115
113
|
memberPolicy?: string;
|
|
116
|
-
/** Denial reason when access is blocked. */
|
|
117
|
-
denialReason?: string;
|
|
118
114
|
/** Free-text notes about this contact. */
|
|
119
115
|
contactNotes?: string;
|
|
120
116
|
/** Number of prior interactions with this contact. */
|
|
@@ -138,7 +134,6 @@ export function inboundActorContextFromTrustContext(
|
|
|
138
134
|
actorMemberDisplayName: ctx.requesterMemberDisplayName,
|
|
139
135
|
trustClass: ctx.trustClass,
|
|
140
136
|
guardianIdentity: ctx.guardianExternalUserId,
|
|
141
|
-
denialReason: ctx.denialReason,
|
|
142
137
|
};
|
|
143
138
|
}
|
|
144
139
|
|
|
@@ -162,28 +157,22 @@ export function inboundActorContextFromTrust(
|
|
|
162
157
|
? channelStatusToMemberStatus(ctx.memberRecord.channel.status)
|
|
163
158
|
: undefined,
|
|
164
159
|
memberPolicy: ctx.memberRecord?.channel.policy ?? undefined,
|
|
165
|
-
denialReason: ctx.denialReason,
|
|
166
160
|
contactNotes: ctx.memberRecord?.contact.notes ?? undefined,
|
|
167
161
|
contactInteractionCount:
|
|
168
162
|
ctx.memberRecord?.contact.interactionCount ?? undefined,
|
|
169
163
|
};
|
|
170
164
|
}
|
|
171
165
|
|
|
172
|
-
/** Legacy push-to-talk activation key values (pre-custom-key support). */
|
|
173
|
-
const PTT_KEY_LEGACY = new Set(["fn", "ctrl", "fn_shift", "none"]);
|
|
174
|
-
|
|
175
166
|
/**
|
|
176
|
-
* Validate a PTT activation key string. Accepts
|
|
177
|
-
*
|
|
178
|
-
* custom key feature. Returns the key as-is if valid, undefined otherwise.
|
|
167
|
+
* Validate a PTT activation key string. Accepts JSON PTTActivator payloads
|
|
168
|
+
* from the custom key feature. Returns the key as-is if valid, undefined otherwise.
|
|
179
169
|
*/
|
|
180
170
|
export function sanitizePttActivationKey(
|
|
181
171
|
key: string | undefined | null,
|
|
182
172
|
): string | undefined {
|
|
183
173
|
if (key == null) return undefined;
|
|
184
|
-
if (PTT_KEY_LEGACY.has(key)) return key;
|
|
185
174
|
|
|
186
|
-
//
|
|
175
|
+
// Parse as a JSON PTTActivator payload
|
|
187
176
|
if (key.startsWith("{")) {
|
|
188
177
|
try {
|
|
189
178
|
const parsed = JSON.parse(key) as { kind?: string };
|
|
@@ -247,14 +236,8 @@ const KEY_CODE_NAMES: Record<number, string> = {
|
|
|
247
236
|
57: "Caps Lock",
|
|
248
237
|
};
|
|
249
238
|
|
|
250
|
-
/** Derive a human-readable label from a PTT activation key value
|
|
239
|
+
/** Derive a human-readable label from a PTT activation key JSON value. */
|
|
251
240
|
function pttKeyLabel(raw: string): string {
|
|
252
|
-
// Legacy string values
|
|
253
|
-
if (raw === "fn") return "Fn (Globe)";
|
|
254
|
-
if (raw === "ctrl") return "Ctrl";
|
|
255
|
-
if (raw === "fn_shift") return "Fn+Shift";
|
|
256
|
-
if (raw === "none") return "none";
|
|
257
|
-
|
|
258
241
|
// JSON PTTActivator payload
|
|
259
242
|
if (raw.startsWith("{")) {
|
|
260
243
|
try {
|
|
@@ -362,8 +345,7 @@ export function resolveChannelCapabilities(
|
|
|
362
345
|
};
|
|
363
346
|
}
|
|
364
347
|
case "telegram":
|
|
365
|
-
case "
|
|
366
|
-
case "voice":
|
|
348
|
+
case "phone":
|
|
367
349
|
case "whatsapp":
|
|
368
350
|
case "slack":
|
|
369
351
|
case "email":
|
|
@@ -439,13 +421,6 @@ export function injectActiveSurfaceContext(
|
|
|
439
421
|
"8. Keep your text response to 1 brief sentence confirming what you changed.",
|
|
440
422
|
);
|
|
441
423
|
|
|
442
|
-
if (ctx.html.includes('data-vellum-home-base="v1"')) {
|
|
443
|
-
lines.push(
|
|
444
|
-
"9. This is the prebuilt Home Base scaffold. Preserve layout anchors:",
|
|
445
|
-
" `home-base-root`, `home-base-onboarding-lane`, and `home-base-starter-lane`.",
|
|
446
|
-
);
|
|
447
|
-
}
|
|
448
|
-
|
|
449
424
|
// File tree with sizes (capped at 50 files to bound prompt size)
|
|
450
425
|
const files = ctx.appFiles ?? listAppFiles(ctx.appId);
|
|
451
426
|
const MAX_FILE_TREE_ENTRIES = 50;
|
|
@@ -779,7 +754,6 @@ export function buildInboundActorContextBlock(
|
|
|
779
754
|
if (ctx.memberPolicy) {
|
|
780
755
|
lines.push(`member_policy: ${ctx.memberPolicy}`);
|
|
781
756
|
}
|
|
782
|
-
lines.push(`denial_reason: ${ctx.denialReason ?? "none"}`);
|
|
783
757
|
// Contact metadata — only included when the sender has a contact record
|
|
784
758
|
// with non-default values.
|
|
785
759
|
if (ctx.contactNotes) {
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { v4 as uuid } from "uuid";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
findSeededHomeBaseApp,
|
|
5
|
-
getPrebuiltHomeBasePreview,
|
|
6
|
-
} from "../home-base/prebuilt/seed.js";
|
|
7
3
|
import { getApp, getAppPreview, updateApp } from "../memory/app-store.js";
|
|
8
4
|
import type { ToolExecutionResult } from "../tools/types.js";
|
|
9
5
|
import { getLogger } from "../util/logger.js";
|
|
@@ -20,8 +16,8 @@ import type {
|
|
|
20
16
|
TableRow,
|
|
21
17
|
TableSurfaceData,
|
|
22
18
|
UiSurfaceShow,
|
|
23
|
-
} from "./
|
|
24
|
-
import { INTERACTIVE_SURFACE_TYPES } from "./
|
|
19
|
+
} from "./message-protocol.js";
|
|
20
|
+
import { INTERACTIVE_SURFACE_TYPES } from "./message-protocol.js";
|
|
25
21
|
import { buildSessionErrorMessage } from "./session-error.js";
|
|
26
22
|
|
|
27
23
|
const log = getLogger("session-surfaces");
|
|
@@ -78,14 +74,27 @@ function normalizeCardShowData(
|
|
|
78
74
|
normalized.templateData = input.templateData;
|
|
79
75
|
}
|
|
80
76
|
|
|
81
|
-
//
|
|
77
|
+
// The LLM sometimes sends `title` or `body` at the top-level tool input
|
|
78
|
+
// instead of nesting them inside `data`. The Swift client requires `title`
|
|
79
|
+
// inside the card data dict — without it `parseCardData` returns nil and
|
|
80
|
+
// the surface is silently dropped. Copy them from input when missing.
|
|
81
|
+
if (
|
|
82
|
+
typeof normalized.title !== "string" &&
|
|
83
|
+
typeof input.title === "string" &&
|
|
84
|
+
input.title.trim().length > 0
|
|
85
|
+
) {
|
|
86
|
+
normalized.title = input.title;
|
|
87
|
+
}
|
|
88
|
+
if (typeof normalized.body !== "string" && typeof input.body === "string") {
|
|
89
|
+
normalized.body = input.body;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// task_progress cards: additional fallbacks for title from templateData.
|
|
82
93
|
if (
|
|
83
94
|
normalized.template === "task_progress" &&
|
|
84
95
|
typeof normalized.title !== "string"
|
|
85
96
|
) {
|
|
86
|
-
if (
|
|
87
|
-
normalized.title = input.title;
|
|
88
|
-
} else if (
|
|
97
|
+
if (
|
|
89
98
|
isPlainObject(normalized.templateData) &&
|
|
90
99
|
typeof normalized.templateData.title === "string"
|
|
91
100
|
) {
|
|
@@ -166,7 +175,17 @@ export interface SurfaceSessionContext {
|
|
|
166
175
|
>;
|
|
167
176
|
surfaceState: Map<
|
|
168
177
|
string,
|
|
169
|
-
{
|
|
178
|
+
{
|
|
179
|
+
surfaceType: SurfaceType;
|
|
180
|
+
data: SurfaceData;
|
|
181
|
+
title?: string;
|
|
182
|
+
actions?: Array<{
|
|
183
|
+
id: string;
|
|
184
|
+
label: string;
|
|
185
|
+
style?: string;
|
|
186
|
+
data?: Record<string, unknown>;
|
|
187
|
+
}>;
|
|
188
|
+
}
|
|
170
189
|
>;
|
|
171
190
|
surfaceUndoStacks: Map<string, string[]>;
|
|
172
191
|
/** Request IDs that originated from surface action button clicks (not regular user messages). */
|
|
@@ -176,7 +195,12 @@ export interface SurfaceSessionContext {
|
|
|
176
195
|
surfaceType: SurfaceType;
|
|
177
196
|
title?: string;
|
|
178
197
|
data: SurfaceData;
|
|
179
|
-
actions?: Array<{
|
|
198
|
+
actions?: Array<{
|
|
199
|
+
id: string;
|
|
200
|
+
label: string;
|
|
201
|
+
style?: string;
|
|
202
|
+
data?: Record<string, unknown>;
|
|
203
|
+
}>;
|
|
180
204
|
display?: string;
|
|
181
205
|
}>;
|
|
182
206
|
onEscalateToComputerUse?: (task: string, sourceSessionId: string) => boolean;
|
|
@@ -517,8 +541,91 @@ export function handleSurfaceAction(
|
|
|
517
541
|
data?: Record<string, unknown>,
|
|
518
542
|
): void {
|
|
519
543
|
const pending = ctx.pendingSurfaceActions.get(surfaceId);
|
|
544
|
+
|
|
545
|
+
// When surfaces are restored from history (e.g. onboarding cards), there is
|
|
546
|
+
// no in-memory pendingSurfaceActions entry. For relay_prompt / agent_prompt
|
|
547
|
+
// actions the client already sends the full payload (including { prompt }),
|
|
548
|
+
// so we can handle them without stored state.
|
|
520
549
|
if (!pending) {
|
|
521
|
-
|
|
550
|
+
const isRelay = actionId === "relay_prompt" || actionId === "agent_prompt";
|
|
551
|
+
const prompt =
|
|
552
|
+
isRelay && typeof data?.prompt === "string" ? data.prompt.trim() : "";
|
|
553
|
+
|
|
554
|
+
if (!prompt) {
|
|
555
|
+
log.warn({ surfaceId, actionId }, "No pending surface action found");
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
const requestId = uuid();
|
|
560
|
+
ctx.surfaceActionRequestIds.add(requestId);
|
|
561
|
+
const onEvent = (msg: ServerMessage) => ctx.sendToClient(msg);
|
|
562
|
+
|
|
563
|
+
ctx.traceEmitter.emit("request_received", "Surface action received", {
|
|
564
|
+
requestId,
|
|
565
|
+
status: "info",
|
|
566
|
+
attributes: { source: "surface_action", surfaceId, actionId },
|
|
567
|
+
});
|
|
568
|
+
|
|
569
|
+
const result = ctx.enqueueMessage(
|
|
570
|
+
prompt,
|
|
571
|
+
[],
|
|
572
|
+
onEvent,
|
|
573
|
+
requestId,
|
|
574
|
+
surfaceId,
|
|
575
|
+
);
|
|
576
|
+
if (result.rejected) {
|
|
577
|
+
log.error({ surfaceId, actionId }, "Relay prompt rejected — queue full");
|
|
578
|
+
onEvent(
|
|
579
|
+
buildSessionErrorMessage(ctx.conversationId, {
|
|
580
|
+
code: "QUEUE_FULL",
|
|
581
|
+
userMessage:
|
|
582
|
+
"Message queue is full (max depth: 10). Please wait for current messages to be processed.",
|
|
583
|
+
retryable: true,
|
|
584
|
+
debugDetails: "Relay prompt rejected — session queue is full",
|
|
585
|
+
}),
|
|
586
|
+
);
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
// Echo the prompt to the client so it appears in the chat UI.
|
|
591
|
+
// Sent after enqueue succeeds so the user doesn't see a prompt that
|
|
592
|
+
// won't be processed.
|
|
593
|
+
ctx.sendToClient({
|
|
594
|
+
type: "user_message_echo",
|
|
595
|
+
text: prompt,
|
|
596
|
+
sessionId: ctx.conversationId,
|
|
597
|
+
});
|
|
598
|
+
|
|
599
|
+
if (result.queued) {
|
|
600
|
+
log.info(
|
|
601
|
+
{ surfaceId, actionId, requestId },
|
|
602
|
+
"Relay prompt queued (session busy, history-restored)",
|
|
603
|
+
);
|
|
604
|
+
return;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// Session is idle — process the message immediately.
|
|
608
|
+
log.info(
|
|
609
|
+
{ surfaceId, actionId, requestId },
|
|
610
|
+
"Processing relay prompt immediately (history-restored)",
|
|
611
|
+
);
|
|
612
|
+
ctx
|
|
613
|
+
.processMessage(prompt, [], onEvent, requestId, surfaceId)
|
|
614
|
+
.catch((err) => {
|
|
615
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
616
|
+
log.error(
|
|
617
|
+
{ err, surfaceId, actionId },
|
|
618
|
+
"Failed to process history-restored relay prompt",
|
|
619
|
+
);
|
|
620
|
+
onEvent(
|
|
621
|
+
buildSessionErrorMessage(ctx.conversationId, {
|
|
622
|
+
code: "SESSION_PROCESSING_FAILED",
|
|
623
|
+
userMessage: `Something went wrong: ${message}`,
|
|
624
|
+
retryable: false,
|
|
625
|
+
debugDetails: `History-restored relay prompt processing failed: ${message}`,
|
|
626
|
+
}),
|
|
627
|
+
);
|
|
628
|
+
});
|
|
522
629
|
return;
|
|
523
630
|
}
|
|
524
631
|
const retainPending = pending.surfaceType === "dynamic_page";
|
|
@@ -538,32 +645,39 @@ export function handleSurfaceAction(
|
|
|
538
645
|
handleDocumentContentChanged(ctx, surfaceId, data);
|
|
539
646
|
return;
|
|
540
647
|
}
|
|
541
|
-
|
|
648
|
+
// Merge stored action-level data (from ui_show definition) with client-sent
|
|
649
|
+
// data. This is critical for relay_prompt buttons: the client only sends the
|
|
650
|
+
// actionId, but the prompt payload lives in the action definition's data.
|
|
651
|
+
const stored = ctx.surfaceState.get(surfaceId);
|
|
652
|
+
const actionDef = stored?.actions?.find((a) => a.id === actionId);
|
|
653
|
+
const mergedData: Record<string, unknown> | undefined =
|
|
654
|
+
actionDef?.data || data ? { ...actionDef?.data, ...data } : undefined;
|
|
655
|
+
|
|
656
|
+
ctx.lastSurfaceAction.set(surfaceId, { actionId, data: mergedData });
|
|
542
657
|
const shouldRelayPrompt =
|
|
543
658
|
actionId === "relay_prompt" || actionId === "agent_prompt";
|
|
544
659
|
const prompt =
|
|
545
|
-
shouldRelayPrompt && typeof
|
|
546
|
-
?
|
|
660
|
+
shouldRelayPrompt && typeof mergedData?.prompt === "string"
|
|
661
|
+
? mergedData.prompt.trim()
|
|
547
662
|
: "";
|
|
548
663
|
|
|
549
664
|
// Build a human-readable summary so the LLM clearly understands the
|
|
550
665
|
// user's decision instead of parsing raw JSON.
|
|
551
|
-
const stored = ctx.surfaceState.get(surfaceId);
|
|
552
666
|
const surfaceData = stored?.data as Record<string, unknown> | undefined;
|
|
553
667
|
const summary = buildCompletionSummary(
|
|
554
668
|
pending.surfaceType,
|
|
555
669
|
actionId,
|
|
556
|
-
|
|
670
|
+
mergedData,
|
|
557
671
|
surfaceData,
|
|
558
672
|
);
|
|
559
673
|
let fallbackContent = `[User action on ${pending.surfaceType} surface: ${summary}]`;
|
|
560
674
|
// Append structured data so the LLM has access to IDs/values it needs
|
|
561
675
|
// to act on (e.g. selectedIds for archiving).
|
|
562
|
-
if (
|
|
563
|
-
fallbackContent += `\n\nAction data: ${JSON.stringify(
|
|
676
|
+
if (mergedData && Object.keys(mergedData).length > 0) {
|
|
677
|
+
fallbackContent += `\n\nAction data: ${JSON.stringify(mergedData)}`;
|
|
564
678
|
}
|
|
565
679
|
// Append deselection context for table/list surfaces so the LLM knows what the user chose to keep.
|
|
566
|
-
const selectedIds =
|
|
680
|
+
const selectedIds = mergedData?.selectedIds as string[] | undefined;
|
|
567
681
|
if (
|
|
568
682
|
selectedIds &&
|
|
569
683
|
(pending.surfaceType === "table" || pending.surfaceType === "list")
|
|
@@ -574,11 +688,28 @@ export function handleSurfaceAction(
|
|
|
574
688
|
selectedIds,
|
|
575
689
|
);
|
|
576
690
|
}
|
|
577
|
-
|
|
691
|
+
// When a relay_prompt button also carries selection data (e.g. list/table
|
|
692
|
+
// surface with a canned prompt + user-selected rows), append the selection
|
|
693
|
+
// context so the LLM sees both the prompt and the user's selections.
|
|
694
|
+
let content = prompt || fallbackContent;
|
|
695
|
+
if (prompt && selectedIds && mergedData) {
|
|
696
|
+
if (pending.surfaceType === "table" || pending.surfaceType === "list") {
|
|
697
|
+
content += buildDeselectionDescription(
|
|
698
|
+
pending.surfaceType,
|
|
699
|
+
stored,
|
|
700
|
+
selectedIds,
|
|
701
|
+
);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
578
704
|
// Show the user plain-text instead of raw JSON action data.
|
|
579
705
|
const displayContent = prompt
|
|
580
706
|
? undefined
|
|
581
|
-
: buildUserFacingLabel(
|
|
707
|
+
: buildUserFacingLabel(
|
|
708
|
+
pending.surfaceType,
|
|
709
|
+
actionId,
|
|
710
|
+
mergedData,
|
|
711
|
+
surfaceData,
|
|
712
|
+
);
|
|
582
713
|
|
|
583
714
|
const requestId = uuid();
|
|
584
715
|
ctx.surfaceActionRequestIds.add(requestId);
|
|
@@ -912,7 +1043,12 @@ export async function surfaceProxyResolver(
|
|
|
912
1043
|
: rawData
|
|
913
1044
|
) as SurfaceData;
|
|
914
1045
|
const actions = input.actions as
|
|
915
|
-
| Array<{
|
|
1046
|
+
| Array<{
|
|
1047
|
+
id: string;
|
|
1048
|
+
label: string;
|
|
1049
|
+
style?: string;
|
|
1050
|
+
data?: Record<string, unknown>;
|
|
1051
|
+
}>
|
|
916
1052
|
| undefined;
|
|
917
1053
|
// Interactive surfaces default to awaiting user action.
|
|
918
1054
|
const hasActions = Array.isArray(actions) && actions.length > 0;
|
|
@@ -942,9 +1078,6 @@ export async function surfaceProxyResolver(
|
|
|
942
1078
|
}
|
|
943
1079
|
}
|
|
944
1080
|
|
|
945
|
-
// Track surface state for ui_update merging
|
|
946
|
-
ctx.surfaceState.set(surfaceId, { surfaceType, data, title });
|
|
947
|
-
|
|
948
1081
|
const display = (input.display as string) === "panel" ? "panel" : "inline";
|
|
949
1082
|
|
|
950
1083
|
const mappedActions = actions?.map((a) => ({
|
|
@@ -954,8 +1087,31 @@ export async function surfaceProxyResolver(
|
|
|
954
1087
|
| "primary"
|
|
955
1088
|
| "secondary"
|
|
956
1089
|
| "destructive",
|
|
1090
|
+
...(a.data ? { data: a.data } : {}),
|
|
957
1091
|
}));
|
|
958
1092
|
|
|
1093
|
+
// Track surface state for ui_update merging (includes actions so we can
|
|
1094
|
+
// look up per-action data payloads when the client sends an action back).
|
|
1095
|
+
ctx.surfaceState.set(surfaceId, {
|
|
1096
|
+
surfaceType,
|
|
1097
|
+
data,
|
|
1098
|
+
title,
|
|
1099
|
+
actions: mappedActions,
|
|
1100
|
+
});
|
|
1101
|
+
|
|
1102
|
+
log.info(
|
|
1103
|
+
{
|
|
1104
|
+
surfaceId,
|
|
1105
|
+
surfaceType,
|
|
1106
|
+
title,
|
|
1107
|
+
dataKeys: Object.keys(data),
|
|
1108
|
+
actionCount: mappedActions?.length ?? 0,
|
|
1109
|
+
display,
|
|
1110
|
+
conversationId: ctx.conversationId,
|
|
1111
|
+
},
|
|
1112
|
+
"Sending ui_surface_show to client",
|
|
1113
|
+
);
|
|
1114
|
+
|
|
959
1115
|
ctx.sendToClient({
|
|
960
1116
|
type: "ui_surface_show",
|
|
961
1117
|
sessionId: ctx.conversationId,
|
|
@@ -1106,14 +1262,10 @@ export async function surfaceProxyResolver(
|
|
|
1106
1262
|
const openMode = input.open_mode as string | undefined;
|
|
1107
1263
|
const app = getApp(appId);
|
|
1108
1264
|
if (!app) return { content: `App not found: ${appId}`, isError: true };
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
: // Generate a minimal fallback preview from app metadata so that the
|
|
1114
|
-
// surface is always rendered as a clickable preview card (not an
|
|
1115
|
-
// un-clickable fallback chip) after session restart.
|
|
1116
|
-
{ title: app.name, subtitle: app.description };
|
|
1265
|
+
// Generate a minimal fallback preview from app metadata so that the
|
|
1266
|
+
// surface is always rendered as a clickable preview card (not an
|
|
1267
|
+
// un-clickable fallback chip) after session restart.
|
|
1268
|
+
const defaultPreview = { title: app.name, subtitle: app.description };
|
|
1117
1269
|
|
|
1118
1270
|
const storedPreview = getAppPreview(app.id);
|
|
1119
1271
|
const surfaceData: DynamicPageSurfaceData = {
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
isDoordashCommand,
|
|
41
41
|
markDoordashStepInProgress,
|
|
42
42
|
} from "./doordash-steps.js";
|
|
43
|
-
import type { ServerMessage, UiSurfaceShow } from "./
|
|
43
|
+
import type { ServerMessage, UiSurfaceShow } from "./message-protocol.js";
|
|
44
44
|
import type { TrustContext } from "./session-runtime-assembly.js";
|
|
45
45
|
import {
|
|
46
46
|
projectSkillTools,
|