@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
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "SMS Setup"
|
|
3
|
-
description: "Set up and troubleshoot SMS messaging with guided Twilio configuration, compliance, and verification"
|
|
4
|
-
user-invocable: true
|
|
5
|
-
metadata: { "vellum": { "emoji": "\ud83d\udce8" } }
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user set up SMS messaging. This skill orchestrates Twilio setup, SMS-specific compliance, and end-to-end testing through a conversational flow.
|
|
9
|
-
|
|
10
|
-
## Step 1: Check Channel Readiness
|
|
11
|
-
|
|
12
|
-
First, check the current SMS channel readiness state via Vellum CLI:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
assistant integrations twilio config --json
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Inspect the response for `hasCredentials` and `phoneNumber`.
|
|
19
|
-
|
|
20
|
-
- If both are present and all baseline requirements are met, skip to Step 3.
|
|
21
|
-
- If credentials or phone number are missing, proceed to Step 2 to fix the baseline.
|
|
22
|
-
|
|
23
|
-
## Step 2: Establish Baseline (Twilio Setup)
|
|
24
|
-
|
|
25
|
-
If SMS baseline is not ready (missing credentials, phone number, or ingress), load the `twilio-setup` skill to walk the user through the basics:
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
skill_load skill=twilio-setup
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Tell the user: _"SMS needs Twilio configured first. I've loaded the Twilio setup guide — let's walk through it."_
|
|
32
|
-
|
|
33
|
-
After twilio-setup completes, re-check readiness:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
assistant integrations twilio config --json
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
If baseline is still not ready, report the specific failures and ask the user to address them before continuing.
|
|
40
|
-
|
|
41
|
-
## Step 3: Remote Compliance Check
|
|
42
|
-
|
|
43
|
-
Once baseline is ready, check SMS compliance status including remote (Twilio API) checks:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
assistant integrations twilio sms compliance --json
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Examine the compliance results:
|
|
50
|
-
|
|
51
|
-
- If all checks pass, proceed to Step 4.
|
|
52
|
-
- If compliance issues are found (e.g., toll-free verification needed), guide the user through the compliance flow.
|
|
53
|
-
|
|
54
|
-
### Toll-Free Verification Submission
|
|
55
|
-
|
|
56
|
-
When the compliance check returns a toll-free verification requirement, use the gateway's compliance endpoints. These handle credential lookup, phone number SID resolution, field validation, and Twilio API calls internally.
|
|
57
|
-
|
|
58
|
-
**Step 3a: Check compliance status.** First check if a verification already exists (use the response from the compliance check above):
|
|
59
|
-
|
|
60
|
-
The response includes a `compliance` object with `numberType`, `tollfreePhoneNumberSid`, `verificationSid`, `verificationStatus`, `rejectionReason`, `rejectionReasons`, `editAllowed`, and `editExpiration` fields. For toll-free numbers, `tollfreePhoneNumberSid` contains the Twilio phone number SID needed for verification submission.
|
|
61
|
-
|
|
62
|
-
- If `verificationStatus` is `PENDING_REVIEW` or `IN_REVIEW`, tell the user verification is already in progress and skip submission.
|
|
63
|
-
- If `verificationStatus` is `TWILIO_APPROVED`, compliance is complete — proceed to Step 4.
|
|
64
|
-
- If `verificationStatus` is `TWILIO_REJECTED` and `editAllowed` is true, offer to update the existing verification (Step 3d) instead of resubmitting.
|
|
65
|
-
- If no verification exists (`verificationSid` is absent), proceed to collect information and submit.
|
|
66
|
-
|
|
67
|
-
**Step 3b: Collect user information.** Collect the following from the user (assume individual/sole proprietor by default):
|
|
68
|
-
|
|
69
|
-
| Field | `verificationParams` key | Notes |
|
|
70
|
-
| ------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
71
|
-
| Name | `businessName` | Can be personal name |
|
|
72
|
-
| Business type | `businessType` | Use `SOLE_PROPRIETOR` for individuals. Valid values: `PRIVATE_PROFIT`, `PUBLIC_PROFIT`, `SOLE_PROPRIETOR`, `NON_PROFIT`, `GOVERNMENT` |
|
|
73
|
-
| Website | `businessWebsite` | LinkedIn or personal site is fine |
|
|
74
|
-
| Notification email | `notificationEmail` | Where Twilio sends status updates |
|
|
75
|
-
| Use case category | `useCaseCategories` | Array, e.g. `["ACCOUNT_NOTIFICATIONS"]` |
|
|
76
|
-
| Use case summary | `useCaseSummary` | Plain English description |
|
|
77
|
-
| Message volume | `messageVolume` | Must be one of: `10`, `100`, `1,000`, `10,000`, `100,000`, `250,000`, `500,000`, `750,000`, `1,000,000`, `5,000,000`, `10,000,000+` |
|
|
78
|
-
| Sample message | `productionMessageSample` | A realistic example message |
|
|
79
|
-
| Opt-in type | `optInType` | `VERBAL`, `WEB_FORM`, `PAPER_FORM`, `VIA_TEXT`, `MOBILE_QR_CODE` |
|
|
80
|
-
| Opt-in image URL | `optInImageUrls` | Array of URLs showing opt-in mechanism (can be website URL) |
|
|
81
|
-
|
|
82
|
-
The `tollfreePhoneNumberSid` is returned by the compliance status response in the `compliance` object. Use `compliance.tollfreePhoneNumberSid` from the Step 3a response as the value for `tollfreePhoneNumberSid` when submitting. Do NOT ask for EIN, business registration number, or business registration authority. Explain that Twilio labels some fields as "business" fields even for individual submitters.
|
|
83
|
-
|
|
84
|
-
**Step 3c: Submit verification:**
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
curl -s -X POST "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/sms/compliance/tollfree" \
|
|
88
|
-
-H "Authorization: Bearer $GATEWAY_AUTH_TOKEN" \
|
|
89
|
-
-H "Content-Type: application/json" \
|
|
90
|
-
-d '{
|
|
91
|
-
"tollfreePhoneNumberSid": "<compliance.tollfreePhoneNumberSid from Step 3a>",
|
|
92
|
-
"businessName": "...",
|
|
93
|
-
"businessWebsite": "...",
|
|
94
|
-
"notificationEmail": "...",
|
|
95
|
-
"useCaseCategories": ["ACCOUNT_NOTIFICATIONS"],
|
|
96
|
-
"useCaseSummary": "...",
|
|
97
|
-
"productionMessageSample": "...",
|
|
98
|
-
"optInImageUrls": ["..."],
|
|
99
|
-
"optInType": "VERBAL",
|
|
100
|
-
"messageVolume": "100",
|
|
101
|
-
"businessType": "SOLE_PROPRIETOR"
|
|
102
|
-
}'
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
The endpoint validates all fields before submitting to Twilio and returns clear error messages for invalid values.
|
|
106
|
-
|
|
107
|
-
**On success:** The response contains `compliance.verificationSid` and `compliance.verificationStatus` (typically `PENDING_REVIEW`). Tell the user Twilio typically reviews within 1-5 business days.
|
|
108
|
-
|
|
109
|
-
**On failure:** Report the exact error from the response and guide the user through resolution.
|
|
110
|
-
|
|
111
|
-
**Step 3d: Update a rejected verification** (if `editAllowed` is true):
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
curl -s -X PATCH "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/sms/compliance/tollfree/<verificationSid>" \
|
|
115
|
-
-H "Authorization: Bearer $GATEWAY_AUTH_TOKEN" \
|
|
116
|
-
-H "Content-Type: application/json" \
|
|
117
|
-
-d '{
|
|
118
|
-
"businessName": "updated value",
|
|
119
|
-
"useCaseSummary": "updated value"
|
|
120
|
-
}'
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Only include fields that need to change. The endpoint checks edit eligibility and expiration before attempting the update.
|
|
124
|
-
|
|
125
|
-
**Step 3e: Delete and resubmit** (if editing is not allowed):
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
curl -s -X DELETE "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/sms/compliance/tollfree/<verificationSid>" \
|
|
129
|
-
-H "Authorization: Bearer $GATEWAY_AUTH_TOKEN"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
After deletion, return to Step 3b to collect information and resubmit. Warn the user that deleting resets their position in the review queue.
|
|
133
|
-
|
|
134
|
-
**Common errors:**
|
|
135
|
-
|
|
136
|
-
- `"Customer profiles submitted with verifications must be either ISV Starters or Secondary Customer Profiles"` — The number is linked to a Primary Customer Profile in Trust Hub, which blocks toll-free verification. Tell the user and suggest they resolve the profile assignment in the Twilio Console.
|
|
137
|
-
- Missing required fields — The endpoint validates and reports which fields are missing.
|
|
138
|
-
- Invalid enum values — The endpoint validates `optInType`, `messageVolume`, and `useCaseCategories` and reports valid values.
|
|
139
|
-
|
|
140
|
-
**On success:** Tell the user the verification has been submitted and is now `PENDING_REVIEW`. Twilio typically reviews within 1-5 business days. They'll receive status updates at the notification email provided.
|
|
141
|
-
|
|
142
|
-
**On failure:** Report the exact error message and guide the user through resolution.
|
|
143
|
-
|
|
144
|
-
## Step 4: Test Send
|
|
145
|
-
|
|
146
|
-
Run a test SMS to verify end-to-end delivery:
|
|
147
|
-
|
|
148
|
-
Tell the user: _"Let's send a test SMS to verify everything works. What phone number should I send the test to?"_
|
|
149
|
-
|
|
150
|
-
**Important:** If toll-free verification is pending (not yet approved), inform the user that test messages may be silently dropped by carriers even though Twilio accepts them. Offer to attempt the test anyway, but set expectations.
|
|
151
|
-
|
|
152
|
-
**Trial account limitation:** On Twilio trial accounts, SMS can only be sent to verified phone numbers. If the send fails with a "not verified" error, tell the user to verify the recipient number in the Twilio Console under Verified Caller IDs, or upgrade their account.
|
|
153
|
-
|
|
154
|
-
After the user provides a number, send a test message via the gateway:
|
|
155
|
-
|
|
156
|
-
```bash
|
|
157
|
-
curl -s -X POST "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/sms/test" \
|
|
158
|
-
-H "Authorization: Bearer $GATEWAY_AUTH_TOKEN" \
|
|
159
|
-
-H "Content-Type: application/json" \
|
|
160
|
-
-d '{"phoneNumber":"<recipient phone number>","text":"Test SMS from your Vellum assistant."}'
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Report the result honestly:
|
|
164
|
-
|
|
165
|
-
- If the send succeeds: _"The message was accepted by Twilio. Note: 'accepted' means Twilio received it for delivery, not that it reached the handset yet. Delivery can take a few seconds to a few minutes. If verification is still pending, carriers may silently drop the message."_
|
|
166
|
-
- If the send fails: report the error and suggest troubleshooting steps
|
|
167
|
-
|
|
168
|
-
### SMS Diagnostics
|
|
169
|
-
|
|
170
|
-
If the test fails or the user reports SMS issues, run the SMS doctor:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
curl -s -X POST "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/sms/doctor" \
|
|
174
|
-
-H "Authorization: Bearer $GATEWAY_AUTH_TOKEN"
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
This runs a comprehensive health diagnostic, checking channel readiness, compliance/toll-free verification status, and the last test result. Report the diagnostics and actionable items to the user.
|
|
178
|
-
|
|
179
|
-
## Step 5: Final Status Report
|
|
180
|
-
|
|
181
|
-
After completing (or skipping) the test, present a clear summary:
|
|
182
|
-
|
|
183
|
-
**If everything passed:**
|
|
184
|
-
_"SMS is ready! Here's your setup status:"_
|
|
185
|
-
|
|
186
|
-
- Twilio credentials: configured
|
|
187
|
-
- Phone number: {number}
|
|
188
|
-
- Ingress: configured
|
|
189
|
-
- Compliance: {status}
|
|
190
|
-
- Test send: {result}
|
|
191
|
-
|
|
192
|
-
**If there are blockers:**
|
|
193
|
-
_"SMS setup is partially complete. Here's what still needs attention:"_
|
|
194
|
-
|
|
195
|
-
- List each blocker with the specific next action
|
|
196
|
-
|
|
197
|
-
## Troubleshooting
|
|
198
|
-
|
|
199
|
-
If the user returns to this skill after initial setup:
|
|
200
|
-
|
|
201
|
-
1. Always start with Step 1 (readiness check) to assess current state
|
|
202
|
-
2. Skip steps that are already complete
|
|
203
|
-
3. Focus on the specific issue the user is experiencing
|
|
204
|
-
|
|
205
|
-
Common issues:
|
|
206
|
-
|
|
207
|
-
- **"Messages not delivering"** — Check compliance status (toll-free verification), verify the number isn't flagged
|
|
208
|
-
- **"Twilio error on send"** — Check credentials, phone number assignment, and ingress
|
|
209
|
-
- **"Trial account limitations"** — Explain that trial accounts can only send to verified numbers
|
|
210
|
-
- **"Customer profiles must be ISV Starters or Secondary"** — The toll-free number is linked to a Primary Customer Profile in Trust Hub. Must be unlinked or reassigned before verification can be submitted.
|
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
|
|
3
|
-
const VALID_SECRET_ACTIONS = ["redact", "warn", "block", "prompt"] as const;
|
|
4
|
-
const VALID_PERMISSIONS_MODES = ["strict", "workspace"] as const;
|
|
5
|
-
const VALID_SMS_PROVIDERS = ["twilio"] as const;
|
|
6
|
-
|
|
7
|
-
export const TimeoutConfigSchema = z.object({
|
|
8
|
-
shellMaxTimeoutSec: z
|
|
9
|
-
.number({ error: "timeouts.shellMaxTimeoutSec must be a number" })
|
|
10
|
-
.finite("timeouts.shellMaxTimeoutSec must be finite")
|
|
11
|
-
.positive("timeouts.shellMaxTimeoutSec must be a positive number")
|
|
12
|
-
.default(600),
|
|
13
|
-
shellDefaultTimeoutSec: z
|
|
14
|
-
.number({ error: "timeouts.shellDefaultTimeoutSec must be a number" })
|
|
15
|
-
.finite("timeouts.shellDefaultTimeoutSec must be finite")
|
|
16
|
-
.positive("timeouts.shellDefaultTimeoutSec must be a positive number")
|
|
17
|
-
.default(120),
|
|
18
|
-
permissionTimeoutSec: z
|
|
19
|
-
.number({ error: "timeouts.permissionTimeoutSec must be a number" })
|
|
20
|
-
.finite("timeouts.permissionTimeoutSec must be finite")
|
|
21
|
-
.positive("timeouts.permissionTimeoutSec must be a positive number")
|
|
22
|
-
.default(300),
|
|
23
|
-
toolExecutionTimeoutSec: z
|
|
24
|
-
.number({ error: "timeouts.toolExecutionTimeoutSec must be a number" })
|
|
25
|
-
.finite("timeouts.toolExecutionTimeoutSec must be finite")
|
|
26
|
-
.positive("timeouts.toolExecutionTimeoutSec must be a positive number")
|
|
27
|
-
.default(120),
|
|
28
|
-
providerStreamTimeoutSec: z
|
|
29
|
-
.number({ error: "timeouts.providerStreamTimeoutSec must be a number" })
|
|
30
|
-
.finite("timeouts.providerStreamTimeoutSec must be finite")
|
|
31
|
-
.positive("timeouts.providerStreamTimeoutSec must be a positive number")
|
|
32
|
-
.default(300),
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
export const RateLimitConfigSchema = z.object({
|
|
36
|
-
maxRequestsPerMinute: z
|
|
37
|
-
.number({ error: "rateLimit.maxRequestsPerMinute must be a number" })
|
|
38
|
-
.int("rateLimit.maxRequestsPerMinute must be an integer")
|
|
39
|
-
.nonnegative(
|
|
40
|
-
"rateLimit.maxRequestsPerMinute must be a non-negative integer",
|
|
41
|
-
)
|
|
42
|
-
.default(0),
|
|
43
|
-
maxTokensPerSession: z
|
|
44
|
-
.number({ error: "rateLimit.maxTokensPerSession must be a number" })
|
|
45
|
-
.int("rateLimit.maxTokensPerSession must be an integer")
|
|
46
|
-
.nonnegative("rateLimit.maxTokensPerSession must be a non-negative integer")
|
|
47
|
-
.default(0),
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
export const CustomSecretPatternSchema = z.object({
|
|
51
|
-
label: z.string({
|
|
52
|
-
error: "secretDetection.customPatterns[].label must be a string",
|
|
53
|
-
}),
|
|
54
|
-
pattern: z.string({
|
|
55
|
-
error: "secretDetection.customPatterns[].pattern must be a string",
|
|
56
|
-
}),
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
export const SecretDetectionConfigSchema = z.object({
|
|
60
|
-
enabled: z
|
|
61
|
-
.boolean({ error: "secretDetection.enabled must be a boolean" })
|
|
62
|
-
.default(true),
|
|
63
|
-
action: z
|
|
64
|
-
.enum(VALID_SECRET_ACTIONS, {
|
|
65
|
-
error: `secretDetection.action must be one of: ${VALID_SECRET_ACTIONS.join(
|
|
66
|
-
", ",
|
|
67
|
-
)}`,
|
|
68
|
-
})
|
|
69
|
-
.default("redact"),
|
|
70
|
-
entropyThreshold: z
|
|
71
|
-
.number({ error: "secretDetection.entropyThreshold must be a number" })
|
|
72
|
-
.finite("secretDetection.entropyThreshold must be finite")
|
|
73
|
-
.positive("secretDetection.entropyThreshold must be a positive number")
|
|
74
|
-
.default(4.0),
|
|
75
|
-
allowOneTimeSend: z
|
|
76
|
-
.boolean({ error: "secretDetection.allowOneTimeSend must be a boolean" })
|
|
77
|
-
.default(false),
|
|
78
|
-
blockIngress: z
|
|
79
|
-
.boolean({ error: "secretDetection.blockIngress must be a boolean" })
|
|
80
|
-
.default(true),
|
|
81
|
-
customPatterns: z.array(CustomSecretPatternSchema).optional(),
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
export const PermissionsConfigSchema = z.object({
|
|
85
|
-
mode: z
|
|
86
|
-
.enum(VALID_PERMISSIONS_MODES, {
|
|
87
|
-
error: `permissions.mode must be one of: ${VALID_PERMISSIONS_MODES.join(
|
|
88
|
-
", ",
|
|
89
|
-
)}`,
|
|
90
|
-
})
|
|
91
|
-
.default("workspace"),
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
export const AuditLogConfigSchema = z.object({
|
|
95
|
-
retentionDays: z
|
|
96
|
-
.number({ error: "auditLog.retentionDays must be a number" })
|
|
97
|
-
.int("auditLog.retentionDays must be an integer")
|
|
98
|
-
.nonnegative("auditLog.retentionDays must be a non-negative integer")
|
|
99
|
-
.default(0),
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
export const LogFileConfigSchema = z.object({
|
|
103
|
-
dir: z.string({ error: "logFile.dir must be a string" }).optional(),
|
|
104
|
-
retentionDays: z
|
|
105
|
-
.number({ error: "logFile.retentionDays must be a number" })
|
|
106
|
-
.int("logFile.retentionDays must be an integer")
|
|
107
|
-
.positive("logFile.retentionDays must be a positive integer")
|
|
108
|
-
.default(30),
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
export const ThinkingConfigSchema = z.object({
|
|
112
|
-
enabled: z
|
|
113
|
-
.boolean({ error: "thinking.enabled must be a boolean" })
|
|
114
|
-
.default(false),
|
|
115
|
-
streamThinking: z
|
|
116
|
-
.boolean({ error: "thinking.streamThinking must be a boolean" })
|
|
117
|
-
.default(false),
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
export const EffortSchema = z
|
|
121
|
-
.enum(["low", "medium", "high"], {
|
|
122
|
-
error: 'effort must be "low", "medium", or "high"',
|
|
123
|
-
})
|
|
124
|
-
.default("high");
|
|
125
|
-
|
|
126
|
-
export type Effort = z.infer<typeof EffortSchema>;
|
|
127
|
-
|
|
128
|
-
const VALID_LATEST_TURN_COMPRESSION_POLICIES = [
|
|
129
|
-
"truncate",
|
|
130
|
-
"summarize",
|
|
131
|
-
"drop",
|
|
132
|
-
] as const;
|
|
133
|
-
|
|
134
|
-
export const ContextOverflowRecoveryConfigSchema = z.object({
|
|
135
|
-
enabled: z
|
|
136
|
-
.boolean({
|
|
137
|
-
error: "contextWindow.overflowRecovery.enabled must be a boolean",
|
|
138
|
-
})
|
|
139
|
-
.default(true),
|
|
140
|
-
safetyMarginRatio: z
|
|
141
|
-
.number({
|
|
142
|
-
error:
|
|
143
|
-
"contextWindow.overflowRecovery.safetyMarginRatio must be a number",
|
|
144
|
-
})
|
|
145
|
-
.finite("contextWindow.overflowRecovery.safetyMarginRatio must be finite")
|
|
146
|
-
.gt(
|
|
147
|
-
0,
|
|
148
|
-
"contextWindow.overflowRecovery.safetyMarginRatio must be greater than 0",
|
|
149
|
-
)
|
|
150
|
-
.lt(
|
|
151
|
-
1,
|
|
152
|
-
"contextWindow.overflowRecovery.safetyMarginRatio must be less than 1",
|
|
153
|
-
)
|
|
154
|
-
.default(0.05),
|
|
155
|
-
maxAttempts: z
|
|
156
|
-
.number({
|
|
157
|
-
error: "contextWindow.overflowRecovery.maxAttempts must be a number",
|
|
158
|
-
})
|
|
159
|
-
.int("contextWindow.overflowRecovery.maxAttempts must be an integer")
|
|
160
|
-
.positive(
|
|
161
|
-
"contextWindow.overflowRecovery.maxAttempts must be a positive integer",
|
|
162
|
-
)
|
|
163
|
-
.default(3),
|
|
164
|
-
interactiveLatestTurnCompression: z
|
|
165
|
-
.enum(VALID_LATEST_TURN_COMPRESSION_POLICIES, {
|
|
166
|
-
error: `contextWindow.overflowRecovery.interactiveLatestTurnCompression must be one of: ${VALID_LATEST_TURN_COMPRESSION_POLICIES.join(
|
|
167
|
-
", ",
|
|
168
|
-
)}`,
|
|
169
|
-
})
|
|
170
|
-
.default("summarize"),
|
|
171
|
-
nonInteractiveLatestTurnCompression: z
|
|
172
|
-
.enum(VALID_LATEST_TURN_COMPRESSION_POLICIES, {
|
|
173
|
-
error: `contextWindow.overflowRecovery.nonInteractiveLatestTurnCompression must be one of: ${VALID_LATEST_TURN_COMPRESSION_POLICIES.join(
|
|
174
|
-
", ",
|
|
175
|
-
)}`,
|
|
176
|
-
})
|
|
177
|
-
.default("truncate"),
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
export const ContextWindowConfigSchema = z.object({
|
|
181
|
-
enabled: z
|
|
182
|
-
.boolean({ error: "contextWindow.enabled must be a boolean" })
|
|
183
|
-
.default(true),
|
|
184
|
-
maxInputTokens: z
|
|
185
|
-
.number({ error: "contextWindow.maxInputTokens must be a number" })
|
|
186
|
-
.int("contextWindow.maxInputTokens must be an integer")
|
|
187
|
-
.positive("contextWindow.maxInputTokens must be a positive integer")
|
|
188
|
-
.default(200000),
|
|
189
|
-
targetInputTokens: z
|
|
190
|
-
.number({ error: "contextWindow.targetInputTokens must be a number" })
|
|
191
|
-
.int("contextWindow.targetInputTokens must be an integer")
|
|
192
|
-
.positive("contextWindow.targetInputTokens must be a positive integer")
|
|
193
|
-
.default(110000),
|
|
194
|
-
compactThreshold: z
|
|
195
|
-
.number({ error: "contextWindow.compactThreshold must be a number" })
|
|
196
|
-
.finite("contextWindow.compactThreshold must be finite")
|
|
197
|
-
.gt(0, "contextWindow.compactThreshold must be greater than 0")
|
|
198
|
-
.lte(1, "contextWindow.compactThreshold must be less than or equal to 1")
|
|
199
|
-
.default(0.8),
|
|
200
|
-
preserveRecentUserTurns: z
|
|
201
|
-
.number({ error: "contextWindow.preserveRecentUserTurns must be a number" })
|
|
202
|
-
.int("contextWindow.preserveRecentUserTurns must be an integer")
|
|
203
|
-
.positive(
|
|
204
|
-
"contextWindow.preserveRecentUserTurns must be a positive integer",
|
|
205
|
-
)
|
|
206
|
-
.default(8),
|
|
207
|
-
summaryMaxTokens: z
|
|
208
|
-
.number({ error: "contextWindow.summaryMaxTokens must be a number" })
|
|
209
|
-
.int("contextWindow.summaryMaxTokens must be an integer")
|
|
210
|
-
.positive("contextWindow.summaryMaxTokens must be a positive integer")
|
|
211
|
-
.default(1200),
|
|
212
|
-
chunkTokens: z
|
|
213
|
-
.number({ error: "contextWindow.chunkTokens must be a number" })
|
|
214
|
-
.int("contextWindow.chunkTokens must be an integer")
|
|
215
|
-
.positive("contextWindow.chunkTokens must be a positive integer")
|
|
216
|
-
.default(12000),
|
|
217
|
-
overflowRecovery: ContextOverflowRecoveryConfigSchema.default(
|
|
218
|
-
ContextOverflowRecoveryConfigSchema.parse({}),
|
|
219
|
-
),
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
export const ModelPricingOverrideSchema = z.object({
|
|
223
|
-
provider: z.string({ error: "pricingOverrides[].provider must be a string" }),
|
|
224
|
-
modelPattern: z.string({
|
|
225
|
-
error: "pricingOverrides[].modelPattern must be a string",
|
|
226
|
-
}),
|
|
227
|
-
inputPer1M: z
|
|
228
|
-
.number({ error: "pricingOverrides[].inputPer1M must be a number" })
|
|
229
|
-
.nonnegative("pricingOverrides[].inputPer1M must be a non-negative number"),
|
|
230
|
-
outputPer1M: z
|
|
231
|
-
.number({ error: "pricingOverrides[].outputPer1M must be a number" })
|
|
232
|
-
.nonnegative(
|
|
233
|
-
"pricingOverrides[].outputPer1M must be a non-negative number",
|
|
234
|
-
),
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
export const TwilioConfigSchema = z.object({
|
|
238
|
-
accountSid: z
|
|
239
|
-
.string({ error: "twilio.accountSid must be a string" })
|
|
240
|
-
.default(""),
|
|
241
|
-
phoneNumber: z
|
|
242
|
-
.string({ error: "twilio.phoneNumber must be a string" })
|
|
243
|
-
.default(""),
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
export const SmsConfigSchema = z.object({
|
|
247
|
-
enabled: z.boolean({ error: "sms.enabled must be a boolean" }).default(false),
|
|
248
|
-
provider: z
|
|
249
|
-
.enum(VALID_SMS_PROVIDERS, {
|
|
250
|
-
error: `sms.provider must be one of: ${VALID_SMS_PROVIDERS.join(", ")}`,
|
|
251
|
-
})
|
|
252
|
-
.default("twilio"),
|
|
253
|
-
phoneNumber: z
|
|
254
|
-
.string({ error: "sms.phoneNumber must be a string" })
|
|
255
|
-
.default(""),
|
|
256
|
-
assistantPhoneNumbers: z
|
|
257
|
-
.record(
|
|
258
|
-
z.string(),
|
|
259
|
-
z.string({ error: "sms.assistantPhoneNumbers values must be strings" }),
|
|
260
|
-
)
|
|
261
|
-
.optional(),
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
export const WhatsAppConfigSchema = z.object({
|
|
265
|
-
phoneNumber: z
|
|
266
|
-
.string({ error: "whatsapp.phoneNumber must be a string" })
|
|
267
|
-
.default(""),
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
export const IngressWebhookConfigSchema = z.object({
|
|
271
|
-
secret: z
|
|
272
|
-
.string({ error: "ingress.webhook.secret must be a string" })
|
|
273
|
-
.default(""),
|
|
274
|
-
timeoutMs: z
|
|
275
|
-
.number({ error: "ingress.webhook.timeoutMs must be a number" })
|
|
276
|
-
.int("ingress.webhook.timeoutMs must be an integer")
|
|
277
|
-
.positive("ingress.webhook.timeoutMs must be a positive integer")
|
|
278
|
-
.default(30_000),
|
|
279
|
-
maxRetries: z
|
|
280
|
-
.number({ error: "ingress.webhook.maxRetries must be a number" })
|
|
281
|
-
.int("ingress.webhook.maxRetries must be an integer")
|
|
282
|
-
.nonnegative("ingress.webhook.maxRetries must be a non-negative integer")
|
|
283
|
-
.default(2),
|
|
284
|
-
initialBackoffMs: z
|
|
285
|
-
.number({ error: "ingress.webhook.initialBackoffMs must be a number" })
|
|
286
|
-
.int("ingress.webhook.initialBackoffMs must be an integer")
|
|
287
|
-
.positive("ingress.webhook.initialBackoffMs must be a positive integer")
|
|
288
|
-
.default(500),
|
|
289
|
-
maxPayloadBytes: z
|
|
290
|
-
.number({ error: "ingress.webhook.maxPayloadBytes must be a number" })
|
|
291
|
-
.int("ingress.webhook.maxPayloadBytes must be an integer")
|
|
292
|
-
.positive("ingress.webhook.maxPayloadBytes must be a positive integer")
|
|
293
|
-
.default(1_048_576),
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
export const IngressRateLimitConfigSchema = z.object({
|
|
297
|
-
maxRequestsPerMinute: z
|
|
298
|
-
.number({
|
|
299
|
-
error: "ingress.rateLimit.maxRequestsPerMinute must be a number",
|
|
300
|
-
})
|
|
301
|
-
.int("ingress.rateLimit.maxRequestsPerMinute must be an integer")
|
|
302
|
-
.nonnegative(
|
|
303
|
-
"ingress.rateLimit.maxRequestsPerMinute must be a non-negative integer",
|
|
304
|
-
)
|
|
305
|
-
.default(0),
|
|
306
|
-
maxRequestsPerHour: z
|
|
307
|
-
.number({ error: "ingress.rateLimit.maxRequestsPerHour must be a number" })
|
|
308
|
-
.int("ingress.rateLimit.maxRequestsPerHour must be an integer")
|
|
309
|
-
.nonnegative(
|
|
310
|
-
"ingress.rateLimit.maxRequestsPerHour must be a non-negative integer",
|
|
311
|
-
)
|
|
312
|
-
.default(0),
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
const IngressBaseSchema = z.object({
|
|
316
|
-
enabled: z.boolean({ error: "ingress.enabled must be a boolean" }).optional(),
|
|
317
|
-
publicBaseUrl: z
|
|
318
|
-
.string({ error: "ingress.publicBaseUrl must be a string" })
|
|
319
|
-
.refine(
|
|
320
|
-
(val) => val === "" || /^https?:\/\//i.test(val),
|
|
321
|
-
"ingress.publicBaseUrl must be an absolute URL starting with http:// or https://",
|
|
322
|
-
)
|
|
323
|
-
.default(""),
|
|
324
|
-
webhook: IngressWebhookConfigSchema.default(
|
|
325
|
-
IngressWebhookConfigSchema.parse({}),
|
|
326
|
-
),
|
|
327
|
-
rateLimit: IngressRateLimitConfigSchema.default(
|
|
328
|
-
IngressRateLimitConfigSchema.parse({}),
|
|
329
|
-
),
|
|
330
|
-
shutdownDrainMs: z
|
|
331
|
-
.number({ error: "ingress.shutdownDrainMs must be a number" })
|
|
332
|
-
.int("ingress.shutdownDrainMs must be an integer")
|
|
333
|
-
.nonnegative("ingress.shutdownDrainMs must be a non-negative integer")
|
|
334
|
-
.default(5_000),
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
export const IngressConfigSchema = IngressBaseSchema.default(
|
|
338
|
-
IngressBaseSchema.parse({}),
|
|
339
|
-
).transform((val) => ({
|
|
340
|
-
...val,
|
|
341
|
-
// Backward compatibility: if `enabled` was never explicitly set (undefined),
|
|
342
|
-
// infer it from whether a publicBaseUrl is configured. Existing users who
|
|
343
|
-
// have a URL but predate the `enabled` field should not have their webhooks
|
|
344
|
-
// silently disabled on upgrade.
|
|
345
|
-
//
|
|
346
|
-
// When publicBaseUrl is empty and enabled is unset, leave enabled as
|
|
347
|
-
// undefined so getPublicBaseUrl() can still fall through to the
|
|
348
|
-
// INGRESS_PUBLIC_BASE_URL env-var fallback (env-only setups).
|
|
349
|
-
enabled: val.enabled ?? (val.publicBaseUrl ? true : undefined),
|
|
350
|
-
}));
|
|
351
|
-
|
|
352
|
-
export const VALID_AVATAR_STRATEGIES = [
|
|
353
|
-
"managed_required",
|
|
354
|
-
"managed_prefer",
|
|
355
|
-
"local_only",
|
|
356
|
-
] as const;
|
|
357
|
-
|
|
358
|
-
export const AvatarConfigSchema = z.object({
|
|
359
|
-
generationStrategy: z
|
|
360
|
-
.enum(VALID_AVATAR_STRATEGIES, {
|
|
361
|
-
error: `avatar.generationStrategy must be one of: ${VALID_AVATAR_STRATEGIES.join(", ")}`,
|
|
362
|
-
})
|
|
363
|
-
.default("local_only"),
|
|
364
|
-
});
|
|
365
|
-
|
|
366
|
-
export type AvatarConfig = z.infer<typeof AvatarConfigSchema>;
|
|
367
|
-
|
|
368
|
-
export const PlatformConfigSchema = z.object({
|
|
369
|
-
baseUrl: z
|
|
370
|
-
.string({ error: "platform.baseUrl must be a string" })
|
|
371
|
-
.refine(
|
|
372
|
-
(val) => val === "" || /^https?:\/\//i.test(val),
|
|
373
|
-
"platform.baseUrl must be an absolute URL starting with http:// or https://",
|
|
374
|
-
)
|
|
375
|
-
.default(""),
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
export type PlatformConfig = z.infer<typeof PlatformConfigSchema>;
|
|
379
|
-
|
|
380
|
-
export const DaemonConfigSchema = z.object({
|
|
381
|
-
startupSocketWaitMs: z
|
|
382
|
-
.number({ error: "daemon.startupSocketWaitMs must be a number" })
|
|
383
|
-
.int("daemon.startupSocketWaitMs must be an integer")
|
|
384
|
-
.positive("daemon.startupSocketWaitMs must be a positive integer")
|
|
385
|
-
.default(5000),
|
|
386
|
-
stopTimeoutMs: z
|
|
387
|
-
.number({ error: "daemon.stopTimeoutMs must be a number" })
|
|
388
|
-
.int("daemon.stopTimeoutMs must be an integer")
|
|
389
|
-
.positive("daemon.stopTimeoutMs must be a positive integer")
|
|
390
|
-
.default(5000),
|
|
391
|
-
sigkillGracePeriodMs: z
|
|
392
|
-
.number({ error: "daemon.sigkillGracePeriodMs must be a number" })
|
|
393
|
-
.int("daemon.sigkillGracePeriodMs must be an integer")
|
|
394
|
-
.positive("daemon.sigkillGracePeriodMs must be a positive integer")
|
|
395
|
-
.default(2000),
|
|
396
|
-
titleGenerationMaxTokens: z
|
|
397
|
-
.number({ error: "daemon.titleGenerationMaxTokens must be a number" })
|
|
398
|
-
.int("daemon.titleGenerationMaxTokens must be an integer")
|
|
399
|
-
.positive("daemon.titleGenerationMaxTokens must be a positive integer")
|
|
400
|
-
.default(30),
|
|
401
|
-
standaloneRecording: z
|
|
402
|
-
.boolean({ error: "daemon.standaloneRecording must be a boolean" })
|
|
403
|
-
.default(true),
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
export const UiConfigSchema = z.object({
|
|
407
|
-
userTimezone: z
|
|
408
|
-
.string({ error: "ui.userTimezone must be a string" })
|
|
409
|
-
.optional(),
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
export type TimeoutConfig = z.infer<typeof TimeoutConfigSchema>;
|
|
413
|
-
export type RateLimitConfig = z.infer<typeof RateLimitConfigSchema>;
|
|
414
|
-
export type CustomSecretPattern = z.infer<typeof CustomSecretPatternSchema>;
|
|
415
|
-
export type SecretDetectionConfig = z.infer<typeof SecretDetectionConfigSchema>;
|
|
416
|
-
export type PermissionsConfig = z.infer<typeof PermissionsConfigSchema>;
|
|
417
|
-
export type AuditLogConfig = z.infer<typeof AuditLogConfigSchema>;
|
|
418
|
-
export type LogFileConfig = z.infer<typeof LogFileConfigSchema>;
|
|
419
|
-
export type ThinkingConfig = z.infer<typeof ThinkingConfigSchema>;
|
|
420
|
-
export type ContextOverflowRecoveryConfig = z.infer<
|
|
421
|
-
typeof ContextOverflowRecoveryConfigSchema
|
|
422
|
-
>;
|
|
423
|
-
export type ContextWindowConfig = z.infer<typeof ContextWindowConfigSchema>;
|
|
424
|
-
export type ModelPricingOverride = z.infer<typeof ModelPricingOverrideSchema>;
|
|
425
|
-
export type TwilioConfig = z.infer<typeof TwilioConfigSchema>;
|
|
426
|
-
export type SmsConfig = z.infer<typeof SmsConfigSchema>;
|
|
427
|
-
export type WhatsAppConfig = z.infer<typeof WhatsAppConfigSchema>;
|
|
428
|
-
export type IngressWebhookConfig = z.infer<typeof IngressWebhookConfigSchema>;
|
|
429
|
-
export type IngressRateLimitConfig = z.infer<
|
|
430
|
-
typeof IngressRateLimitConfigSchema
|
|
431
|
-
>;
|
|
432
|
-
export type DaemonConfig = z.infer<typeof DaemonConfigSchema>;
|
|
433
|
-
export type IngressConfig = z.infer<typeof IngressConfigSchema>;
|
|
434
|
-
export type UiConfig = z.infer<typeof UiConfigSchema>;
|