@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
|
@@ -2,21 +2,29 @@ import type { Command } from "commander";
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
getAssistantContactMetadata,
|
|
5
|
+
getChannelById,
|
|
5
6
|
getContact,
|
|
6
7
|
listContacts,
|
|
7
8
|
mergeContacts,
|
|
8
9
|
searchContacts,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
updateChannelStatus,
|
|
11
|
+
upsertContact,
|
|
12
|
+
} from "../../contacts/contact-store.js";
|
|
13
|
+
import type {
|
|
14
|
+
ChannelPolicy,
|
|
15
|
+
ChannelStatus,
|
|
16
|
+
ContactRole,
|
|
17
|
+
ContactType,
|
|
18
|
+
} from "../../contacts/types.js";
|
|
12
19
|
import {
|
|
13
20
|
createIngressInvite,
|
|
14
21
|
listIngressInvites,
|
|
15
22
|
redeemIngressInvite,
|
|
16
23
|
redeemVoiceInviteCode,
|
|
17
24
|
revokeIngressInvite,
|
|
18
|
-
} from "
|
|
19
|
-
import {
|
|
25
|
+
} from "../../runtime/invite-service.js";
|
|
26
|
+
import { initializeDb } from "../db.js";
|
|
27
|
+
import { writeOutput } from "../output.js";
|
|
20
28
|
|
|
21
29
|
export function registerContactsCommand(program: Command): void {
|
|
22
30
|
const contacts = program
|
|
@@ -36,6 +44,7 @@ is the source of truth for identity resolution across all channels.
|
|
|
36
44
|
Examples:
|
|
37
45
|
$ assistant contacts list
|
|
38
46
|
$ assistant contacts get abc-123
|
|
47
|
+
$ assistant contacts upsert --display-name "Alice"
|
|
39
48
|
$ assistant contacts merge keep-id merge-id
|
|
40
49
|
$ assistant contacts invites list`,
|
|
41
50
|
);
|
|
@@ -46,6 +55,14 @@ Examples:
|
|
|
46
55
|
.option("--role <role>", "Filter by role (default: contact)", "contact")
|
|
47
56
|
.option("--limit <limit>", "Maximum number of contacts to return")
|
|
48
57
|
.option("--query <query>", "Search query to filter contacts")
|
|
58
|
+
.option(
|
|
59
|
+
"--channel-address <address>",
|
|
60
|
+
"Search by channel address (email, phone, handle)",
|
|
61
|
+
)
|
|
62
|
+
.option(
|
|
63
|
+
"--channel-type <channelType>",
|
|
64
|
+
"Filter by channel type (email, telegram, phone, whatsapp, slack)",
|
|
65
|
+
)
|
|
49
66
|
.addHelpText(
|
|
50
67
|
"after",
|
|
51
68
|
`
|
|
@@ -53,14 +70,20 @@ Lists contacts with optional filtering. The --role flag accepts: contact
|
|
|
53
70
|
or guardian (defaults to contact). The --limit flag sets
|
|
54
71
|
the maximum number of results (defaults to 50).
|
|
55
72
|
|
|
56
|
-
When --query
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
When --query, --channel-address, or --channel-type is provided, a search
|
|
74
|
+
is performed. --query does full-text search across contact names and
|
|
75
|
+
linked external identifiers. --channel-address matches phone numbers,
|
|
76
|
+
emails, or handles. --channel-type filters by channel kind. These filters
|
|
77
|
+
can be combined. Without any search params, returns all contacts matching
|
|
78
|
+
the role filter.
|
|
59
79
|
|
|
60
80
|
Examples:
|
|
61
81
|
$ assistant contacts list
|
|
62
82
|
$ assistant contacts list --role guardian
|
|
63
83
|
$ assistant contacts list --query "john" --limit 10
|
|
84
|
+
$ assistant contacts list --channel-address "+15551234567"
|
|
85
|
+
$ assistant contacts list --channel-type telegram
|
|
86
|
+
$ assistant contacts list --query "alice" --channel-type email
|
|
64
87
|
$ assistant contacts list --role guardian --json`,
|
|
65
88
|
)
|
|
66
89
|
.action(
|
|
@@ -69,6 +92,8 @@ Examples:
|
|
|
69
92
|
role?: string;
|
|
70
93
|
limit?: string;
|
|
71
94
|
query?: string;
|
|
95
|
+
channelAddress?: string;
|
|
96
|
+
channelType?: string;
|
|
72
97
|
},
|
|
73
98
|
cmd: Command,
|
|
74
99
|
) => {
|
|
@@ -79,8 +104,16 @@ Examples:
|
|
|
79
104
|
|
|
80
105
|
const effectiveLimit = limit ?? 50;
|
|
81
106
|
|
|
82
|
-
const
|
|
83
|
-
|
|
107
|
+
const hasSearchParams =
|
|
108
|
+
opts.query || opts.channelAddress || opts.channelType;
|
|
109
|
+
const results = hasSearchParams
|
|
110
|
+
? searchContacts({
|
|
111
|
+
query: opts.query,
|
|
112
|
+
channelAddress: opts.channelAddress,
|
|
113
|
+
channelType: opts.channelType,
|
|
114
|
+
role,
|
|
115
|
+
limit: effectiveLimit,
|
|
116
|
+
})
|
|
84
117
|
: listContacts(effectiveLimit, role);
|
|
85
118
|
|
|
86
119
|
writeOutput(cmd, { ok: true, contacts: results });
|
|
@@ -166,6 +199,220 @@ Examples:
|
|
|
166
199
|
},
|
|
167
200
|
);
|
|
168
201
|
|
|
202
|
+
contacts
|
|
203
|
+
.command("upsert")
|
|
204
|
+
.description("Create or update a contact")
|
|
205
|
+
.requiredOption("--display-name <name>", "Display name for the contact")
|
|
206
|
+
.option("--id <id>", "Contact ID — provide to update an existing contact")
|
|
207
|
+
.option("--notes <notes>", "Free-text notes about the contact")
|
|
208
|
+
.option(
|
|
209
|
+
"--role <role>",
|
|
210
|
+
"Contact role: contact or guardian (default: contact for new contacts)",
|
|
211
|
+
)
|
|
212
|
+
.option(
|
|
213
|
+
"--contact-type <type>",
|
|
214
|
+
"Contact type: human or assistant (default: human for new contacts)",
|
|
215
|
+
)
|
|
216
|
+
.option(
|
|
217
|
+
"--channels <json>",
|
|
218
|
+
"JSON array of channel objects, each with type, address, and optional isPrimary, externalUserId, externalChatId, status, policy",
|
|
219
|
+
)
|
|
220
|
+
.addHelpText(
|
|
221
|
+
"after",
|
|
222
|
+
`
|
|
223
|
+
Creates a new contact or updates an existing one. When --id is provided and
|
|
224
|
+
matches an existing contact, that contact is updated. When --id is omitted,
|
|
225
|
+
a new contact is created with a generated UUID.
|
|
226
|
+
|
|
227
|
+
The --channels flag accepts a JSON array of channel objects. Each object must
|
|
228
|
+
have "type" (e.g. telegram, phone, email, whatsapp) and "address" fields.
|
|
229
|
+
Optional channel fields: isPrimary (boolean), externalUserId, externalChatId,
|
|
230
|
+
status (active, revoked, blocked), policy (allow, deny).
|
|
231
|
+
|
|
232
|
+
Examples:
|
|
233
|
+
$ assistant contacts upsert --display-name "Alice" --json
|
|
234
|
+
$ assistant contacts upsert --display-name "Alice" --id abc-123 --notes "Updated notes" --json
|
|
235
|
+
$ assistant contacts upsert --display-name "Bob" --role guardian --json
|
|
236
|
+
$ assistant contacts upsert --display-name "Bob" --channels '[{"type":"telegram","address":"12345","externalUserId":"12345","status":"active","policy":"allow"}]' --json`,
|
|
237
|
+
)
|
|
238
|
+
.action(
|
|
239
|
+
async (
|
|
240
|
+
opts: {
|
|
241
|
+
displayName: string;
|
|
242
|
+
id?: string;
|
|
243
|
+
notes?: string;
|
|
244
|
+
role?: string;
|
|
245
|
+
contactType?: string;
|
|
246
|
+
channels?: string;
|
|
247
|
+
},
|
|
248
|
+
cmd: Command,
|
|
249
|
+
) => {
|
|
250
|
+
try {
|
|
251
|
+
initializeDb();
|
|
252
|
+
|
|
253
|
+
let channels: unknown[] | undefined;
|
|
254
|
+
if (opts.channels) {
|
|
255
|
+
try {
|
|
256
|
+
channels = JSON.parse(opts.channels);
|
|
257
|
+
if (!Array.isArray(channels)) {
|
|
258
|
+
writeOutput(cmd, {
|
|
259
|
+
ok: false,
|
|
260
|
+
error: "--channels must be a JSON array",
|
|
261
|
+
});
|
|
262
|
+
process.exitCode = 1;
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
} catch {
|
|
266
|
+
writeOutput(cmd, {
|
|
267
|
+
ok: false,
|
|
268
|
+
error: `Invalid JSON for --channels: ${opts.channels}`,
|
|
269
|
+
});
|
|
270
|
+
process.exitCode = 1;
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const result = upsertContact({
|
|
276
|
+
id: opts.id,
|
|
277
|
+
displayName: opts.displayName,
|
|
278
|
+
notes: opts.notes,
|
|
279
|
+
role: opts.role as ContactRole | undefined,
|
|
280
|
+
contactType: opts.contactType as ContactType | undefined,
|
|
281
|
+
channels: channels as
|
|
282
|
+
| {
|
|
283
|
+
type: string;
|
|
284
|
+
address: string;
|
|
285
|
+
isPrimary?: boolean;
|
|
286
|
+
externalUserId?: string;
|
|
287
|
+
externalChatId?: string;
|
|
288
|
+
status?: ChannelStatus;
|
|
289
|
+
policy?: ChannelPolicy;
|
|
290
|
+
}[]
|
|
291
|
+
| undefined,
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
writeOutput(cmd, { ok: true, contact: result });
|
|
295
|
+
} catch (err) {
|
|
296
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
297
|
+
writeOutput(cmd, { ok: false, error: message });
|
|
298
|
+
process.exitCode = 1;
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
const channelsCmds = contacts
|
|
304
|
+
.command("channels")
|
|
305
|
+
.description("Manage contact channels");
|
|
306
|
+
|
|
307
|
+
channelsCmds.addHelpText(
|
|
308
|
+
"after",
|
|
309
|
+
`
|
|
310
|
+
Channels represent external communication endpoints linked to contacts —
|
|
311
|
+
phone numbers, Telegram IDs, email addresses, etc. Each channel has a
|
|
312
|
+
status (active, pending, revoked, blocked, unverified) and a policy
|
|
313
|
+
(allow, deny, escalate) that controls how the assistant handles messages
|
|
314
|
+
from that channel.
|
|
315
|
+
|
|
316
|
+
Examples:
|
|
317
|
+
$ assistant contacts channels update-status <channelId> --status revoked --reason "No longer needed"
|
|
318
|
+
$ assistant contacts channels update-status <channelId> --policy deny`,
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
channelsCmds
|
|
322
|
+
.command("update-status <channelId>")
|
|
323
|
+
.description("Update a channel's status or policy")
|
|
324
|
+
.option(
|
|
325
|
+
"--status <status>",
|
|
326
|
+
"New channel status: active, revoked, or blocked",
|
|
327
|
+
)
|
|
328
|
+
.option("--policy <policy>", "New channel policy: allow, deny, or escalate")
|
|
329
|
+
.option("--reason <reason>", "Reason for the status change")
|
|
330
|
+
.addHelpText(
|
|
331
|
+
"after",
|
|
332
|
+
`
|
|
333
|
+
Arguments:
|
|
334
|
+
channelId UUID of the contact channel to update
|
|
335
|
+
|
|
336
|
+
Updates the access-control fields on an existing channel. At least one of
|
|
337
|
+
--status or --policy must be provided.
|
|
338
|
+
|
|
339
|
+
When --status is "revoked", --reason is mapped to revokedReason on the
|
|
340
|
+
channel record. When --status is "blocked", --reason is mapped to
|
|
341
|
+
blockedReason. The --reason flag is ignored for other status values.
|
|
342
|
+
|
|
343
|
+
Valid --status values: active, revoked, blocked
|
|
344
|
+
Valid --policy values: allow, deny, escalate
|
|
345
|
+
|
|
346
|
+
Examples:
|
|
347
|
+
$ assistant contacts channels update-status abc-123 --status revoked --reason "No longer needed" --json
|
|
348
|
+
$ assistant contacts channels update-status abc-123 --status blocked --reason "Spam" --json
|
|
349
|
+
$ assistant contacts channels update-status abc-123 --policy deny --json
|
|
350
|
+
$ assistant contacts channels update-status abc-123 --status active --policy allow --json`,
|
|
351
|
+
)
|
|
352
|
+
.action(
|
|
353
|
+
async (
|
|
354
|
+
channelId: string,
|
|
355
|
+
opts: {
|
|
356
|
+
status?: string;
|
|
357
|
+
policy?: string;
|
|
358
|
+
reason?: string;
|
|
359
|
+
},
|
|
360
|
+
cmd: Command,
|
|
361
|
+
) => {
|
|
362
|
+
try {
|
|
363
|
+
if (!opts.status && !opts.policy) {
|
|
364
|
+
writeOutput(cmd, {
|
|
365
|
+
ok: false,
|
|
366
|
+
error: "At least one of --status or --policy must be provided",
|
|
367
|
+
});
|
|
368
|
+
process.exitCode = 1;
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
initializeDb();
|
|
373
|
+
|
|
374
|
+
const existing = getChannelById(channelId);
|
|
375
|
+
if (!existing) {
|
|
376
|
+
writeOutput(cmd, {
|
|
377
|
+
ok: false,
|
|
378
|
+
error: `Channel not found: ${channelId}`,
|
|
379
|
+
});
|
|
380
|
+
process.exitCode = 1;
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const status = opts.status as ChannelStatus | undefined;
|
|
385
|
+
const policy = opts.policy as ChannelPolicy | undefined;
|
|
386
|
+
|
|
387
|
+
const revokedReason: string | null | undefined =
|
|
388
|
+
status !== undefined
|
|
389
|
+
? status === "revoked"
|
|
390
|
+
? (opts.reason ?? null)
|
|
391
|
+
: null
|
|
392
|
+
: undefined;
|
|
393
|
+
const blockedReason: string | null | undefined =
|
|
394
|
+
status !== undefined
|
|
395
|
+
? status === "blocked"
|
|
396
|
+
? (opts.reason ?? null)
|
|
397
|
+
: null
|
|
398
|
+
: undefined;
|
|
399
|
+
|
|
400
|
+
const result = updateChannelStatus(channelId, {
|
|
401
|
+
status,
|
|
402
|
+
policy,
|
|
403
|
+
revokedReason,
|
|
404
|
+
blockedReason,
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
writeOutput(cmd, { ok: true, channel: result });
|
|
408
|
+
} catch (err) {
|
|
409
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
410
|
+
writeOutput(cmd, { ok: false, error: message });
|
|
411
|
+
process.exitCode = 1;
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
);
|
|
415
|
+
|
|
169
416
|
const invites = contacts
|
|
170
417
|
.command("invites")
|
|
171
418
|
.description("Manage contact invites");
|
|
@@ -174,7 +421,7 @@ Examples:
|
|
|
174
421
|
"after",
|
|
175
422
|
`
|
|
176
423
|
Invites are tokens that grant channel access when redeemed. Each invite is
|
|
177
|
-
tied to a source channel (telegram,
|
|
424
|
+
tied to a source channel (telegram, phone, email, whatsapp) and can
|
|
178
425
|
optionally have usage limits, expiration, and notes. When redeemed, the
|
|
179
426
|
invite creates a channel membership linking a contact to an external
|
|
180
427
|
identifier on the source channel.
|
|
@@ -201,7 +448,7 @@ Examples:
|
|
|
201
448
|
$ assistant contacts invites list
|
|
202
449
|
$ assistant contacts invites list --source-channel telegram
|
|
203
450
|
$ assistant contacts invites list --status active
|
|
204
|
-
$ assistant contacts invites list --source-channel
|
|
451
|
+
$ assistant contacts invites list --source-channel phone --json`,
|
|
205
452
|
)
|
|
206
453
|
.action(
|
|
207
454
|
async (
|
|
@@ -232,7 +479,7 @@ Examples:
|
|
|
232
479
|
.description("Create a new invite")
|
|
233
480
|
.requiredOption(
|
|
234
481
|
"--source-channel <channel>",
|
|
235
|
-
"Source channel (e.g. telegram,
|
|
482
|
+
"Source channel (e.g. telegram, phone, email, whatsapp)",
|
|
236
483
|
)
|
|
237
484
|
.option("--note <note>", "Optional note")
|
|
238
485
|
.option("--max-uses <n>", "Max redemptions")
|
|
@@ -254,7 +501,7 @@ Examples:
|
|
|
254
501
|
"after",
|
|
255
502
|
`
|
|
256
503
|
Creates a new invite token for the specified source channel. The --source-channel
|
|
257
|
-
flag is required and must be one of: telegram,
|
|
504
|
+
flag is required and must be one of: telegram, phone, email, whatsapp.
|
|
258
505
|
|
|
259
506
|
Optional fields:
|
|
260
507
|
--note Free-text note attached to the invite
|
|
@@ -269,7 +516,7 @@ Voice invites require three additional fields:
|
|
|
269
516
|
|
|
270
517
|
Examples:
|
|
271
518
|
$ assistant contacts invites create --source-channel telegram --note "For Alice" --max-uses 1
|
|
272
|
-
$ assistant contacts invites create --source-channel
|
|
519
|
+
$ assistant contacts invites create --source-channel phone --expected-external-user-id "+15551234567" --friend-name "Alice" --guardian-name "Bob" --contact-name "Alice Smith"`,
|
|
273
520
|
)
|
|
274
521
|
.action(
|
|
275
522
|
async (
|
|
@@ -425,7 +672,7 @@ Examples:
|
|
|
425
672
|
const result = redeemVoiceInviteCode({
|
|
426
673
|
code: opts.code,
|
|
427
674
|
callerExternalUserId: opts.callerExternalUserId,
|
|
428
|
-
sourceChannel: "
|
|
675
|
+
sourceChannel: "phone",
|
|
429
676
|
...(opts.assistantId ? { assistantId: opts.assistantId } : {}),
|
|
430
677
|
});
|
|
431
678
|
if (result.ok) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
deleteSecureKeyAsync,
|
|
5
5
|
getSecureKey,
|
|
6
6
|
setSecureKeyAsync,
|
|
7
|
-
} from "
|
|
7
|
+
} from "../../security/secure-keys.js";
|
|
8
8
|
import {
|
|
9
9
|
assertMetadataWritable,
|
|
10
10
|
type CredentialMetadata,
|
|
@@ -13,11 +13,9 @@ import {
|
|
|
13
13
|
getCredentialMetadataById,
|
|
14
14
|
listCredentialMetadata,
|
|
15
15
|
upsertCredentialMetadata,
|
|
16
|
-
} from "
|
|
17
|
-
import {
|
|
18
|
-
import { shouldOutputJson, writeOutput } from "
|
|
19
|
-
|
|
20
|
-
const log = getCliLogger("cli");
|
|
16
|
+
} from "../../tools/credentials/metadata-store.js";
|
|
17
|
+
import { log } from "../logger.js";
|
|
18
|
+
import { shouldOutputJson, writeOutput } from "../output.js";
|
|
21
19
|
|
|
22
20
|
// ---------------------------------------------------------------------------
|
|
23
21
|
// Shared helpers
|
|
@@ -68,7 +66,6 @@ function buildCredentialOutput(
|
|
|
68
66
|
usageDescription: metadata.usageDescription ?? null,
|
|
69
67
|
allowedTools: metadata.allowedTools,
|
|
70
68
|
allowedDomains: metadata.allowedDomains,
|
|
71
|
-
accountInfo: metadata.accountInfo ?? null,
|
|
72
69
|
grantedScopes: metadata.grantedScopes ?? null,
|
|
73
70
|
expiresAt: metadata.expiresAt
|
|
74
71
|
? new Date(metadata.expiresAt).toISOString()
|
|
@@ -103,7 +100,6 @@ function printCredentialHuman(output: Record<string, unknown>): void {
|
|
|
103
100
|
log.info(
|
|
104
101
|
` Domains: ${(output.allowedDomains as string[]).join(", ")}`,
|
|
105
102
|
);
|
|
106
|
-
if (output.accountInfo) log.info(` Account: ${output.accountInfo}`);
|
|
107
103
|
if (output.grantedScopes)
|
|
108
104
|
log.info(
|
|
109
105
|
` Scopes: ${(output.grantedScopes as string[]).join(", ")}`,
|
|
@@ -258,7 +254,11 @@ Examples:
|
|
|
258
254
|
async (
|
|
259
255
|
name: string,
|
|
260
256
|
value: string,
|
|
261
|
-
opts: {
|
|
257
|
+
opts: {
|
|
258
|
+
label?: string;
|
|
259
|
+
description?: string;
|
|
260
|
+
allowedTools?: string;
|
|
261
|
+
},
|
|
262
262
|
cmd: Command,
|
|
263
263
|
) => {
|
|
264
264
|
try {
|
|
@@ -463,7 +463,6 @@ Examples:
|
|
|
463
463
|
usageDescription: null,
|
|
464
464
|
allowedTools: [],
|
|
465
465
|
allowedDomains: [],
|
|
466
|
-
accountInfo: null,
|
|
467
466
|
grantedScopes: null,
|
|
468
467
|
expiresAt: null,
|
|
469
468
|
createdAt: null,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
|
|
3
|
-
import { startCli } from "
|
|
4
|
-
import { shouldAutoStartDaemon } from "
|
|
5
|
-
import { ensureDaemonRunning } from "
|
|
3
|
+
import { startCli } from "../../cli.js";
|
|
4
|
+
import { shouldAutoStartDaemon } from "../../daemon/connection-policy.js";
|
|
5
|
+
import { ensureDaemonRunning } from "../../daemon/lifecycle.js";
|
|
6
6
|
|
|
7
7
|
export function registerDefaultAction(program: Command): void {
|
|
8
8
|
program.action(async () => {
|
|
@@ -3,10 +3,8 @@ import { join } from "node:path";
|
|
|
3
3
|
|
|
4
4
|
import type { Command } from "commander";
|
|
5
5
|
|
|
6
|
-
import { getDaemonStatus, stopDaemon } from "
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
const log = getCliLogger("cli");
|
|
6
|
+
import { getDaemonStatus, stopDaemon } from "../../daemon/lifecycle.js";
|
|
7
|
+
import { log } from "../logger.js";
|
|
10
8
|
|
|
11
9
|
export function registerDevCommand(program: Command): void {
|
|
12
10
|
program
|
|
@@ -97,7 +95,7 @@ Examples:
|
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
97
|
|
|
100
|
-
const mainPath = `${import.meta.dirname}
|
|
98
|
+
const mainPath = `${import.meta.dirname}/../../daemon/main.ts`;
|
|
101
99
|
|
|
102
100
|
const useWatch = opts.watch === true;
|
|
103
101
|
log.info(
|
|
@@ -106,7 +104,7 @@ Examples:
|
|
|
106
104
|
} (Ctrl+C to stop)`,
|
|
107
105
|
);
|
|
108
106
|
|
|
109
|
-
const repoRoot = join(import.meta.dirname, "..", "..", "..");
|
|
107
|
+
const repoRoot = join(import.meta.dirname, "..", "..", "..", "..");
|
|
110
108
|
const args = useWatch ? ["--watch", "run", mainPath] : ["run", mainPath];
|
|
111
109
|
const child = spawn("bun", args, {
|
|
112
110
|
stdio: "inherit",
|
|
@@ -1,28 +1,20 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
2
|
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
3
|
-
import * as net from "node:net";
|
|
4
3
|
|
|
5
4
|
import type { Command } from "commander";
|
|
6
5
|
|
|
7
|
-
import { loadRawConfig } from "
|
|
6
|
+
import { loadRawConfig } from "../../config/loader.js";
|
|
7
|
+
import { shouldAutoStartDaemon } from "../../daemon/connection-policy.js";
|
|
8
8
|
import {
|
|
9
|
-
hasSocketOverride,
|
|
10
|
-
shouldAutoStartDaemon,
|
|
11
|
-
} from "../daemon/connection-policy.js";
|
|
12
|
-
import { IpcError } from "../util/errors.js";
|
|
13
|
-
import { getCliLogger } from "../util/logger.js";
|
|
14
|
-
import {
|
|
15
|
-
getDataDir,
|
|
16
9
|
getDbPath,
|
|
17
10
|
getLogPath,
|
|
18
11
|
getRootDir,
|
|
19
|
-
getSocketPath,
|
|
20
12
|
getWorkspaceDir,
|
|
21
13
|
getWorkspaceHooksDir,
|
|
22
14
|
getWorkspaceSkillsDir,
|
|
23
|
-
} from "
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
} from "../../util/platform.js";
|
|
16
|
+
import { getHttpBaseUrl, httpHealthCheck } from "../http-client.js";
|
|
17
|
+
import { log } from "../logger.js";
|
|
26
18
|
|
|
27
19
|
export function registerDoctorCommand(program: Command): void {
|
|
28
20
|
program
|
|
@@ -42,13 +34,13 @@ Output symbols:
|
|
|
42
34
|
Diagnostic checks performed:
|
|
43
35
|
1. Bun is installed Verifies bun is available in PATH
|
|
44
36
|
2. API key configured Checks for a valid provider API key in config or env
|
|
45
|
-
3. Assistant reachable
|
|
37
|
+
3. Assistant reachable HTTP health check against the assistant server
|
|
46
38
|
4. Database exists/readable Opens the SQLite database and runs a test query
|
|
47
39
|
5. Directory structure Verifies required ~/.vellum/ directories exist
|
|
48
40
|
6. Disk space Ensures at least 100MB free on the data partition
|
|
49
41
|
7. Log file size Warns if the log file exceeds 50MB
|
|
50
42
|
8. Database integrity Runs SQLite PRAGMA integrity_check
|
|
51
|
-
9.
|
|
43
|
+
9. HTTP token permissions Verifies the http-token file has 0600 or 0700 mode
|
|
52
44
|
10. Trust rule syntax Validates trust.json structure and rule fields
|
|
53
45
|
11. WASM files Checks that tree-sitter WASM binaries are present
|
|
54
46
|
12. Browser runtime Verifies Playwright and Chromium availability
|
|
@@ -65,14 +57,9 @@ Examples:
|
|
|
65
57
|
log.info("Vellum Doctor\n");
|
|
66
58
|
|
|
67
59
|
// 0. Connection policy info
|
|
68
|
-
const
|
|
69
|
-
const isOverride = hasSocketOverride();
|
|
60
|
+
const httpUrl = getHttpBaseUrl();
|
|
70
61
|
const autostart = shouldAutoStartDaemon();
|
|
71
|
-
log.info(
|
|
72
|
-
` Socket: ${socketPath}${
|
|
73
|
-
isOverride ? " (override via VELLUM_DAEMON_SOCKET)" : ""
|
|
74
|
-
}`,
|
|
75
|
-
);
|
|
62
|
+
log.info(` HTTP: ${httpUrl}`);
|
|
76
63
|
log.info(` Autostart: ${autostart ? "enabled" : "disabled"}\n`);
|
|
77
64
|
|
|
78
65
|
// 1. Bun installed
|
|
@@ -114,35 +101,22 @@ Examples:
|
|
|
114
101
|
);
|
|
115
102
|
}
|
|
116
103
|
|
|
117
|
-
// 3. Daemon reachable
|
|
104
|
+
// 3. Daemon reachable (HTTP health check)
|
|
118
105
|
try {
|
|
119
|
-
const
|
|
120
|
-
if (
|
|
106
|
+
const healthy = await httpHealthCheck(2000);
|
|
107
|
+
if (healthy) {
|
|
108
|
+
pass("Assistant reachable");
|
|
109
|
+
} else {
|
|
121
110
|
fail(
|
|
122
111
|
"Assistant reachable",
|
|
123
|
-
"
|
|
112
|
+
"HTTP health check failed (is the assistant running?)",
|
|
124
113
|
);
|
|
125
|
-
} else {
|
|
126
|
-
await new Promise<void>((resolve, reject) => {
|
|
127
|
-
const s = net.createConnection(sock);
|
|
128
|
-
const timer = setTimeout(() => {
|
|
129
|
-
s.destroy();
|
|
130
|
-
reject(new IpcError("timeout"));
|
|
131
|
-
}, 2000);
|
|
132
|
-
s.on("connect", () => {
|
|
133
|
-
clearTimeout(timer);
|
|
134
|
-
s.end();
|
|
135
|
-
resolve();
|
|
136
|
-
});
|
|
137
|
-
s.on("error", (err) => {
|
|
138
|
-
clearTimeout(timer);
|
|
139
|
-
reject(err);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
pass("Assistant reachable");
|
|
143
114
|
}
|
|
144
115
|
} catch {
|
|
145
|
-
fail(
|
|
116
|
+
fail(
|
|
117
|
+
"Assistant reachable",
|
|
118
|
+
"could not connect to assistant HTTP server",
|
|
119
|
+
);
|
|
146
120
|
}
|
|
147
121
|
|
|
148
122
|
// 4. DB exists and readable
|
|
@@ -166,7 +140,7 @@ Examples:
|
|
|
166
140
|
|
|
167
141
|
// 5. ~/.vellum/ directory structure (workspace layout)
|
|
168
142
|
const rootDir = getRootDir();
|
|
169
|
-
const dataDir =
|
|
143
|
+
const dataDir = process.env.VELLUM_DATA_DIR!;
|
|
170
144
|
const workspaceDir = getWorkspaceDir();
|
|
171
145
|
const requiredDirs = [
|
|
172
146
|
rootDir,
|
|
@@ -257,25 +231,27 @@ Examples:
|
|
|
257
231
|
fail("Database integrity check", "database file not found");
|
|
258
232
|
}
|
|
259
233
|
|
|
260
|
-
// 9.
|
|
261
|
-
const
|
|
262
|
-
if (existsSync(
|
|
234
|
+
// 9. HTTP token
|
|
235
|
+
const tokenPath = `${rootDir}/http-token`;
|
|
236
|
+
if (existsSync(tokenPath)) {
|
|
263
237
|
try {
|
|
264
|
-
const
|
|
265
|
-
const mode =
|
|
238
|
+
const tokenStat = statSync(tokenPath);
|
|
239
|
+
const mode = tokenStat.mode & 0o777;
|
|
266
240
|
if (mode === 0o600 || mode === 0o700) {
|
|
267
|
-
pass(
|
|
241
|
+
pass(
|
|
242
|
+
`HTTP token permissions (${mode.toString(8).padStart(4, "0")})`,
|
|
243
|
+
);
|
|
268
244
|
} else {
|
|
269
245
|
fail(
|
|
270
|
-
"
|
|
246
|
+
"HTTP token permissions",
|
|
271
247
|
`expected 0600 or 0700, got 0${mode.toString(8)}`,
|
|
272
248
|
);
|
|
273
249
|
}
|
|
274
250
|
} catch {
|
|
275
|
-
fail("
|
|
251
|
+
fail("HTTP token permissions", "could not stat http-token file");
|
|
276
252
|
}
|
|
277
253
|
} else {
|
|
278
|
-
pass("
|
|
254
|
+
pass("HTTP token (not present — assistant not running)");
|
|
279
255
|
}
|
|
280
256
|
|
|
281
257
|
// 10. Trust rule syntax
|
|
@@ -327,7 +303,7 @@ Examples:
|
|
|
327
303
|
const missingWasm: string[] = [];
|
|
328
304
|
for (const wasm of wasmFiles) {
|
|
329
305
|
const dir = import.meta.dirname ?? __dirname;
|
|
330
|
-
let fullPath = `${dir}
|
|
306
|
+
let fullPath = `${dir}/../../../node_modules/${wasm.pkg}/${wasm.file}`;
|
|
331
307
|
// In compiled binaries, fall back to Resources/ or next to the binary
|
|
332
308
|
if (!existsSync(fullPath) && dir.startsWith("/$bunfs/")) {
|
|
333
309
|
const { dirname: pathDirname, join: pathJoin } =
|
|
@@ -345,11 +321,11 @@ Examples:
|
|
|
345
321
|
try {
|
|
346
322
|
const wasmStat = statSync(fullPath);
|
|
347
323
|
if (wasmStat.size === 0) {
|
|
348
|
-
missingWasm.push(`${wasm} (empty)`);
|
|
324
|
+
missingWasm.push(`${wasm.file} (empty)`);
|
|
349
325
|
wasmOk = false;
|
|
350
326
|
}
|
|
351
327
|
} catch {
|
|
352
|
-
missingWasm.push(`${wasm} (unreadable)`);
|
|
328
|
+
missingWasm.push(`${wasm.file} (unreadable)`);
|
|
353
329
|
wasmOk = false;
|
|
354
330
|
}
|
|
355
331
|
}
|
|
@@ -362,7 +338,7 @@ Examples:
|
|
|
362
338
|
|
|
363
339
|
// 12. Browser runtime (Playwright + Chromium)
|
|
364
340
|
const { checkBrowserRuntime } =
|
|
365
|
-
await import("
|
|
341
|
+
await import("../../tools/browser/runtime-check.js");
|
|
366
342
|
const browserStatus = await checkBrowserRuntime();
|
|
367
343
|
if (
|
|
368
344
|
browserStatus.playwrightAvailable &&
|
|
@@ -380,7 +356,7 @@ Examples:
|
|
|
380
356
|
|
|
381
357
|
// 13. Sandbox backend diagnostics
|
|
382
358
|
const { runSandboxDiagnostics } =
|
|
383
|
-
await import("
|
|
359
|
+
await import("../../tools/terminal/sandbox-diagnostics.js");
|
|
384
360
|
const sandbox = runSandboxDiagnostics();
|
|
385
361
|
log.info(
|
|
386
362
|
`\n Sandbox: ${sandbox.config.enabled ? "enabled" : "disabled"}`,
|