@vellumai/assistant 0.4.44 → 0.4.45
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/.prettierignore +4 -0
- package/ARCHITECTURE.md +34 -31
- package/README.md +4 -4
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -197
- package/docs/architecture/keychain-broker.md +1 -1
- package/docs/architecture/memory.md +2 -2
- package/docs/architecture/scheduling.md +1 -1
- package/docs/architecture/security.md +11 -11
- package/docs/error-handling.md +1 -1
- package/docs/trusted-contact-access.md +3 -3
- package/drizzle/meta/0000_snapshot.json +34 -100
- package/drizzle/meta/_journal.json +1 -1
- package/drizzle.config.ts +4 -4
- package/package.json +3 -2
- package/scripts/capture-x-graphql.ts +237 -141
- package/scripts/generate-bundled-tool-registry.ts +223 -0
- package/src/__tests__/access-request-decision.test.ts +0 -1
- package/src/__tests__/actor-token-service.test.ts +23 -24
- package/src/__tests__/agent-loop.test.ts +0 -131
- package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
- package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
- package/src/__tests__/approval-primitive.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +11 -1
- package/src/__tests__/asset-materialize-tool.test.ts +0 -1
- package/src/__tests__/asset-search-tool.test.ts +0 -1
- package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
- package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
- package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
- package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
- package/src/__tests__/attachments-store.test.ts +0 -1
- package/src/__tests__/avatar-e2e.test.ts +74 -115
- package/src/__tests__/avatar-router.test.ts +25 -62
- package/src/__tests__/browser-manager.test.ts +24 -0
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
- package/src/__tests__/browser-skill-endstate.test.ts +8 -11
- package/src/__tests__/btw-routes.test.ts +326 -0
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/call-conversation-messages.test.ts +0 -1
- package/src/__tests__/call-domain.test.ts +0 -1
- package/src/__tests__/call-pointer-messages.test.ts +0 -1
- package/src/__tests__/call-recovery.test.ts +0 -1
- package/src/__tests__/call-routes-http.test.ts +0 -1
- package/src/__tests__/call-store.test.ts +0 -1
- package/src/__tests__/canonical-guardian-store.test.ts +0 -1
- package/src/__tests__/channel-approval-routes.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +0 -1
- package/src/__tests__/channel-guardian.test.ts +5 -7
- package/src/__tests__/channel-retry-sweep.test.ts +0 -1
- package/src/__tests__/checker.test.ts +4 -11
- package/src/__tests__/compaction.benchmark.test.ts +16 -14
- package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
- package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
- package/src/__tests__/computer-use-tools.test.ts +35 -31
- package/src/__tests__/config-schema.test.ts +11 -15
- package/src/__tests__/config-watcher.test.ts +0 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/conflict-store.test.ts +0 -1
- package/src/__tests__/connection-policy.test.ts +4 -7
- package/src/__tests__/contacts-tools.test.ts +0 -1
- package/src/__tests__/context-memory-e2e.test.ts +2 -4
- package/src/__tests__/context-overflow-reducer.test.ts +2 -4
- package/src/__tests__/context-window-manager.test.ts +147 -60
- package/src/__tests__/contradiction-checker.test.ts +0 -1
- package/src/__tests__/conversation-attention-store.test.ts +0 -1
- package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
- package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
- package/src/__tests__/conversation-store.test.ts +0 -1
- package/src/__tests__/conversation-unread-route.test.ts +1 -2
- package/src/__tests__/credential-security-invariants.test.ts +7 -8
- package/src/__tests__/cross-provider-web-search.test.ts +353 -0
- package/src/__tests__/daemon-assistant-events.test.ts +6 -7
- package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
- package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
- package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
- package/src/__tests__/diagnostics-export.test.ts +189 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
- package/src/__tests__/entity-extractor.test.ts +0 -1
- package/src/__tests__/entity-search.test.ts +0 -1
- package/src/__tests__/ephemeral-permissions.test.ts +2 -4
- package/src/__tests__/file-read-tool.test.ts +86 -0
- package/src/__tests__/followup-tools.test.ts +0 -1
- package/src/__tests__/frontmatter.test.ts +77 -34
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/gateway-only-guard.test.ts +1 -1
- package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
- package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
- package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
- package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
- package/src/__tests__/guardian-action-store.test.ts +0 -1
- package/src/__tests__/guardian-action-sweep.test.ts +0 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
- package/src/__tests__/guardian-dispatch.test.ts +1 -2
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-outbound-http.test.ts +0 -1
- package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
- package/src/__tests__/guardian-routing-state.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
- package/src/__tests__/host-bash-proxy.test.ts +335 -0
- package/src/__tests__/host-file-proxy.test.ts +374 -0
- package/src/__tests__/host-shell-tool.test.ts +147 -1
- package/src/__tests__/http-user-message-parity.test.ts +361 -0
- package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
- package/src/__tests__/integration-status.test.ts +3 -8
- package/src/__tests__/intent-routing.test.ts +7 -46
- package/src/__tests__/invite-redemption-service.test.ts +0 -1
- package/src/__tests__/invite-routes-http.test.ts +0 -1
- package/src/__tests__/llm-usage-store.test.ts +0 -1
- package/src/__tests__/managed-avatar-client.test.ts +101 -55
- package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
- package/src/__tests__/managed-store.test.ts +94 -21
- package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
- package/src/__tests__/memory-recall-quality.test.ts +0 -1
- package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
- package/src/__tests__/memory-regressions.test.ts +0 -1
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
- package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
- package/src/__tests__/messaging-send-tool.test.ts +35 -0
- package/src/__tests__/messaging-skill-split.test.ts +138 -0
- package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
- package/src/__tests__/migration-export-http.test.ts +2 -3
- package/src/__tests__/migration-import-commit-http.test.ts +1 -2
- package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
- package/src/__tests__/migration-validate-http.test.ts +1 -2
- package/src/__tests__/native-web-search.test.ts +475 -0
- package/src/__tests__/navigate-settings-tab.test.ts +84 -0
- package/src/__tests__/non-member-access-request.test.ts +0 -1
- package/src/__tests__/notification-broadcaster.test.ts +15 -15
- package/src/__tests__/notification-decision-strategy.test.ts +6 -6
- package/src/__tests__/notification-deep-link.test.ts +7 -7
- package/src/__tests__/notification-guardian-path.test.ts +2 -3
- package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
- package/src/__tests__/notification-thread-candidates.test.ts +4 -4
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
- package/src/__tests__/playbook-execution.test.ts +0 -1
- package/src/__tests__/playbook-tools.test.ts +0 -1
- package/src/__tests__/profile-compiler.test.ts +0 -1
- package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
- package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
- package/src/__tests__/recording-handler.test.ts +30 -94
- package/src/__tests__/registry.test.ts +28 -35
- package/src/__tests__/relay-server.test.ts +0 -1
- package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
- package/src/__tests__/runtime-events-sse.test.ts +0 -1
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
- package/src/__tests__/schedule-store.test.ts +441 -1
- package/src/__tests__/schedule-tools.test.ts +468 -7
- package/src/__tests__/scheduler-recurrence.test.ts +196 -23
- package/src/__tests__/scoped-approval-grants.test.ts +0 -1
- package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
- package/src/__tests__/secret-response-routing.test.ts +4 -1
- package/src/__tests__/send-endpoint-busy.test.ts +14 -2
- package/src/__tests__/send-notification-tool.test.ts +0 -7
- package/src/__tests__/sequence-store.test.ts +0 -1
- package/src/__tests__/server-history-render.test.ts +1 -2
- package/src/__tests__/session-abort-tool-results.test.ts +0 -1
- package/src/__tests__/session-agent-loop.test.ts +46 -6
- package/src/__tests__/session-confirmation-signals.test.ts +0 -1
- package/src/__tests__/session-conflict-gate.test.ts +2 -6
- package/src/__tests__/session-error.test.ts +5 -14
- package/src/__tests__/session-init.benchmark.test.ts +3 -5
- package/src/__tests__/session-load-history-repair.test.ts +0 -1
- package/src/__tests__/session-media-retry.test.ts +12 -74
- package/src/__tests__/session-pre-run-repair.test.ts +0 -1
- package/src/__tests__/session-profile-injection.test.ts +2 -6
- package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
- package/src/__tests__/session-queue.test.ts +94 -139
- package/src/__tests__/session-skill-tools.test.ts +115 -115
- package/src/__tests__/session-slash-known.test.ts +0 -1
- package/src/__tests__/session-slash-queue.test.ts +0 -1
- package/src/__tests__/session-slash-unknown.test.ts +0 -1
- package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
- package/src/__tests__/session-usage.test.ts +0 -1
- package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
- package/src/__tests__/session-workspace-injection.test.ts +2 -6
- package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
- package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
- package/src/__tests__/skill-feature-flags.test.ts +125 -18
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
- package/src/__tests__/skill-load-tool.test.ts +194 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
- package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
- package/src/__tests__/skills.test.ts +14 -53
- package/src/__tests__/slack-channel-config.test.ts +0 -1
- package/src/__tests__/slack-inbound-verification.test.ts +0 -1
- package/src/__tests__/slack-skill.test.ts +1 -1
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +4 -3
- package/src/__tests__/task-compiler.test.ts +0 -1
- package/src/__tests__/task-management-tools.test.ts +0 -1
- package/src/__tests__/task-memory-cleanup.test.ts +0 -1
- package/src/__tests__/task-runner.test.ts +0 -1
- package/src/__tests__/task-scheduler.test.ts +0 -1
- package/src/__tests__/terminal-tools.test.ts +0 -1
- package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
- package/src/__tests__/thread-seed-composer.test.ts +5 -5
- package/src/__tests__/tool-approval-handler.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +8 -86
- package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
- package/src/__tests__/tool-notification-listener.test.ts +1 -1
- package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
- package/src/__tests__/trust-store.test.ts +80 -4
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/trusted-contact-verification.test.ts +0 -1
- package/src/__tests__/twilio-provider.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +0 -1
- package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
- package/src/__tests__/update-bulletin.test.ts +0 -1
- package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
- package/src/__tests__/usage-routes.test.ts +0 -1
- package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
- package/src/__tests__/voice-invite-redemption.test.ts +0 -1
- package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
- package/src/__tests__/voice-session-bridge.test.ts +9 -1
- package/src/__tests__/web-fetch.test.ts +57 -0
- package/src/__tests__/workspace-git-service.test.ts +5 -14
- package/src/__tests__/workspace-policy.test.ts +0 -1
- package/src/agent/loop.ts +22 -34
- package/src/bundler/bundle-signer.ts +4 -4
- package/src/calls/call-controller.ts +1 -1
- package/src/calls/relay-server.ts +1 -1
- package/src/calls/twilio-rest.ts +1 -1
- package/src/calls/voice-session-bridge.ts +3 -1
- package/src/cli/__tests__/notifications.test.ts +3 -4
- package/src/cli/commands/map.ts +2 -6
- package/src/cli/commands/mcp.ts +73 -15
- package/src/cli/commands/notifications.ts +4 -4
- package/src/cli/commands/sessions.ts +9 -1
- package/src/cli/commands/skills.ts +6 -10
- package/src/cli/http-client.ts +2 -3
- package/src/cli/main-screen.tsx +10 -10
- package/src/cli/program.ts +0 -4
- package/src/cli/reference.ts +0 -2
- package/src/cli.ts +15 -9
- package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
- package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
- package/src/config/bundled-skills/browser/SKILL.md +6 -1
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
- package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
- package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
- package/src/config/bundled-skills/contacts/SKILL.md +10 -1
- package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
- package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
- package/src/config/bundled-skills/document/SKILL.md +4 -1
- package/src/config/bundled-skills/doordash/SKILL.md +8 -1
- package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
- package/src/config/bundled-skills/followups/SKILL.md +4 -1
- package/src/config/bundled-skills/gmail/SKILL.md +180 -0
- package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
- package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
- package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
- package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
- package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
- package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
- package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
- package/src/config/bundled-skills/messaging/SKILL.md +23 -139
- package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
- package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
- package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
- package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
- package/src/config/bundled-skills/notifications/SKILL.md +5 -1
- package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
- package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
- package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
- package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
- package/src/config/bundled-skills/schedule/SKILL.md +70 -9
- package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
- package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
- package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
- package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
- package/src/config/bundled-skills/sequences/SKILL.md +47 -0
- package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
- package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
- package/src/config/bundled-skills/settings/SKILL.md +12 -0
- package/src/config/bundled-skills/settings/TOOLS.json +112 -0
- package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
- package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
- package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
- package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
- package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
- package/src/config/bundled-skills/slack/SKILL.md +5 -1
- package/src/config/bundled-skills/subagent/SKILL.md +4 -1
- package/src/config/bundled-skills/tasks/SKILL.md +5 -2
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
- package/src/config/bundled-skills/watcher/SKILL.md +4 -1
- package/src/config/bundled-tool-registry.ts +118 -107
- package/src/config/env.ts +5 -2
- package/src/config/feature-flag-registry.json +25 -9
- package/src/config/loader.ts +10 -2
- package/src/config/schema.ts +19 -16
- package/src/config/schemas/inference.ts +12 -22
- package/src/config/schemas/memory-storage.ts +19 -1
- package/src/config/schemas/platform.ts +0 -16
- package/src/config/skill-state.ts +11 -8
- package/src/config/skills.ts +83 -32
- package/src/context/token-estimator.ts +11 -0
- package/src/context/window-manager.ts +180 -151
- package/src/daemon/computer-use-session.ts +11 -43
- package/src/daemon/daemon-control.ts +4 -1
- package/src/daemon/handlers/config-channels.ts +5 -9
- package/src/daemon/handlers/config-ingress.ts +0 -4
- package/src/daemon/handlers/config-model.ts +7 -13
- package/src/daemon/handlers/config-telegram.ts +4 -8
- package/src/daemon/handlers/config-voice.ts +2 -5
- package/src/daemon/handlers/dictation.ts +2 -12
- package/src/daemon/handlers/identity.ts +0 -105
- package/src/daemon/handlers/recording.ts +3 -23
- package/src/daemon/handlers/session-history.ts +1 -1
- package/src/daemon/handlers/sessions.ts +53 -72
- package/src/daemon/handlers/shared.ts +7 -28
- package/src/daemon/handlers/skills.ts +31 -27
- package/src/daemon/host-bash-proxy.ts +148 -0
- package/src/daemon/host-file-proxy.ts +135 -0
- package/src/daemon/lifecycle.ts +49 -24
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/browser.ts +1 -1
- package/src/daemon/message-types/computer-use.ts +1 -4
- package/src/daemon/message-types/guardian-actions.ts +1 -1
- package/src/daemon/message-types/host-bash.ts +18 -0
- package/src/daemon/message-types/host-file.ts +44 -0
- package/src/daemon/message-types/integrations.ts +1 -67
- package/src/daemon/message-types/messages.ts +15 -0
- package/src/daemon/message-types/schedules.ts +11 -27
- package/src/daemon/message-types/sessions.ts +2 -1
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/ride-shotgun-handler.ts +2 -42
- package/src/daemon/server.ts +43 -10
- package/src/daemon/session-agent-loop-handlers.ts +48 -7
- package/src/daemon/session-agent-loop.ts +97 -66
- package/src/daemon/session-attachments.ts +1 -1
- package/src/daemon/session-error.ts +17 -16
- package/src/daemon/session-lifecycle.ts +20 -1
- package/src/daemon/session-media-retry.ts +1 -15
- package/src/daemon/session-messaging.ts +14 -6
- package/src/daemon/session-process.ts +36 -7
- package/src/daemon/session-queue-manager.ts +62 -103
- package/src/daemon/session-runtime-assembly.ts +27 -0
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +19 -97
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +77 -13
- package/src/errors.ts +0 -2
- package/src/export/formatter.ts +6 -0
- package/src/mcp/mcp-oauth-provider.ts +1 -3
- package/src/media/avatar-router.ts +20 -28
- package/src/media/avatar-types.ts +7 -14
- package/src/media/managed-avatar-client.ts +70 -34
- package/src/memory/conversation-title-service.ts +1 -2
- package/src/memory/db-init.ts +16 -0
- package/src/memory/embedding-backend.ts +129 -27
- package/src/memory/embedding-gemini.test.ts +256 -0
- package/src/memory/embedding-gemini.ts +47 -13
- package/src/memory/embedding-local.ts +14 -2
- package/src/memory/embedding-ollama.ts +15 -2
- package/src/memory/embedding-openai.ts +15 -2
- package/src/memory/embedding-types.test.ts +116 -0
- package/src/memory/embedding-types.ts +61 -0
- package/src/memory/fingerprint.ts +1 -1
- package/src/memory/indexer.ts +25 -1
- package/src/memory/job-handlers/embedding.test.ts +258 -0
- package/src/memory/job-handlers/embedding.ts +81 -1
- package/src/memory/job-handlers/index-maintenance.ts +35 -1
- package/src/memory/job-handlers/media-processing.ts +11 -1
- package/src/memory/job-utils.ts +21 -6
- package/src/memory/jobs-store.ts +5 -1
- package/src/memory/jobs-worker.ts +8 -0
- package/src/memory/message-content.ts +66 -0
- package/src/memory/migrations/100-core-tables.ts +1 -31
- package/src/memory/migrations/104-core-indexes.ts +0 -11
- package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
- package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
- package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
- package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
- package/src/memory/migrations/index.ts +4 -0
- package/src/memory/migrations/registry.ts +19 -0
- package/src/memory/qdrant-client.ts +158 -43
- package/src/memory/retriever.test.ts +0 -1
- package/src/memory/retriever.ts +12 -2
- package/src/memory/schema/infrastructure.ts +5 -29
- package/src/memory/search/formatting.ts +34 -9
- package/src/memory/search/semantic.ts +57 -2
- package/src/memory/search/types.ts +2 -1
- package/src/notifications/AGENTS.md +2 -2
- package/src/notifications/README.md +59 -58
- package/src/notifications/adapters/macos.ts +1 -1
- package/src/notifications/broadcaster.ts +5 -5
- package/src/notifications/copy-composer.ts +1 -1
- package/src/notifications/decision-engine.ts +2 -2
- package/src/notifications/destination-resolver.ts +2 -2
- package/src/notifications/emit-signal.ts +8 -8
- package/src/notifications/signal.ts +1 -1
- package/src/notifications/thread-seed-composer.ts +1 -1
- package/src/oauth/connect-orchestrator.ts +1 -1
- package/src/oauth/token-persistence.ts +1 -1
- package/src/permissions/checker.ts +12 -1
- package/src/permissions/defaults.ts +10 -14
- package/src/permissions/trust-store.ts +37 -0
- package/src/permissions/workspace-policy.ts +0 -1
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
- package/src/prompts/computer-use-prompt.ts +1 -1
- package/src/prompts/system-prompt.ts +29 -30
- package/src/prompts/templates/SOUL.md +1 -2
- package/src/prompts/templates/UPDATES.md +16 -7
- package/src/providers/anthropic/client.ts +87 -33
- package/src/providers/gemini/client.ts +6 -0
- package/src/providers/managed-proxy/constants.ts +5 -0
- package/src/providers/openai/client.ts +15 -0
- package/src/providers/registry.ts +2 -2
- package/src/providers/types.ts +24 -2
- package/src/runtime/AGENTS.md +18 -0
- package/src/runtime/assistant-event-hub.ts +2 -3
- package/src/runtime/assistant-event.ts +4 -4
- package/src/runtime/auth/__tests__/context.test.ts +5 -5
- package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
- package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
- package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
- package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
- package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
- package/src/runtime/auth/__tests__/subject.test.ts +8 -8
- package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
- package/src/runtime/auth/route-policy.ts +8 -4
- package/src/runtime/auth/scopes.ts +1 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +0 -23
- package/src/runtime/auth/types.ts +3 -3
- package/src/runtime/guardian-action-followup-executor.ts +1 -1
- package/src/runtime/guardian-action-grant-minter.ts +1 -1
- package/src/runtime/guardian-action-service.ts +3 -3
- package/src/runtime/http-server.ts +15 -2
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +2 -3
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/btw-routes.ts +155 -0
- package/src/runtime/routes/computer-use-routes.ts +77 -31
- package/src/runtime/routes/conversation-routes.ts +230 -46
- package/src/runtime/routes/diagnostics-routes.ts +63 -29
- package/src/runtime/routes/documents-routes.ts +2 -2
- package/src/runtime/routes/global-search-routes.ts +1 -1
- package/src/runtime/routes/host-bash-routes.ts +83 -0
- package/src/runtime/routes/host-file-routes.ts +79 -0
- package/src/runtime/routes/integrations/slack/share.ts +1 -1
- package/src/runtime/routes/log-export-routes.ts +120 -0
- package/src/runtime/routes/mcp-routes.ts +20 -0
- package/src/runtime/routes/migration-routes.ts +3 -3
- package/src/runtime/routes/pairing-routes.ts +1 -1
- package/src/runtime/routes/recording-routes.ts +6 -4
- package/src/runtime/routes/schedule-routes.ts +31 -5
- package/src/runtime/routes/session-management-routes.ts +2 -6
- package/src/runtime/routes/session-query-routes.ts +18 -15
- package/src/runtime/routes/settings-routes.ts +7 -261
- package/src/runtime/routes/skills-routes.ts +7 -6
- package/src/runtime/routes/subagents-routes.ts +4 -10
- package/src/runtime/routes/surface-action-routes.ts +3 -14
- package/src/runtime/routes/surface-content-routes.ts +22 -5
- package/src/runtime/routes/work-items-routes.ts +21 -25
- package/src/runtime/routes/workspace-routes.test.ts +3 -3
- package/src/runtime/routes/workspace-utils.ts +1 -1
- package/src/runtime/telegram-streaming-delivery.ts +3 -0
- package/src/runtime/verification-outbound-actions.ts +2 -2
- package/src/schedule/integration-status.ts +0 -6
- package/src/schedule/schedule-store.ts +234 -43
- package/src/schedule/scheduler.ts +73 -74
- package/src/security/oauth2.ts +1 -1
- package/src/sequence/store.ts +12 -2
- package/src/skills/frontmatter.ts +19 -77
- package/src/skills/managed-store.ts +11 -2
- package/src/subagent/manager.ts +5 -3
- package/src/tasks/ephemeral-permissions.ts +3 -5
- package/src/tools/AGENTS.md +0 -1
- package/src/tools/browser/browser-manager.ts +17 -11
- package/src/tools/browser/jit-auth.ts +4 -1
- package/src/tools/claude-code/claude-code.ts +1 -1
- package/src/tools/computer-use/definitions.ts +48 -60
- package/src/tools/document/document-tool.ts +6 -6
- package/src/tools/filesystem/edit.ts +2 -1
- package/src/tools/filesystem/read.ts +20 -2
- package/src/tools/filesystem/write.ts +2 -1
- package/src/tools/host-filesystem/edit.ts +17 -1
- package/src/tools/host-filesystem/read.ts +16 -1
- package/src/tools/host-filesystem/write.ts +15 -1
- package/src/tools/host-terminal/host-shell.ts +24 -0
- package/src/tools/memory/definitions.ts +45 -81
- package/src/tools/memory/handlers.test.ts +0 -1
- package/src/tools/memory/handlers.ts +1 -1
- package/src/tools/memory/register.ts +26 -60
- package/src/tools/network/script-proxy/session-manager.ts +6 -8
- package/src/tools/network/web-fetch.ts +7 -1
- package/src/tools/network/web-search.ts +2 -1
- package/src/tools/registry.ts +23 -0
- package/src/tools/schedule/create.ts +113 -5
- package/src/tools/schedule/list.ts +57 -15
- package/src/tools/schedule/update.ts +73 -3
- package/src/tools/shared/filesystem/image-read.ts +192 -0
- package/src/tools/side-effects.ts +1 -7
- package/src/tools/skills/delete-managed.ts +27 -64
- package/src/tools/skills/execute.ts +54 -0
- package/src/tools/skills/load.ts +127 -5
- package/src/tools/skills/scaffold-managed.ts +93 -172
- package/src/tools/subagent/message.ts +0 -7
- package/src/tools/subagent/spawn.ts +1 -1
- package/src/tools/swarm/delegate.ts +0 -3
- package/src/tools/system/avatar-generator.ts +13 -19
- package/src/tools/system/request-permission.ts +2 -1
- package/src/tools/terminal/safe-env.ts +1 -0
- package/src/tools/tool-manifest.ts +41 -47
- package/src/tools/types.ts +6 -2
- package/src/tools/ui-surface/definitions.ts +0 -55
- package/src/util/errors.ts +0 -10
- package/src/workspace/git-service.ts +0 -2
- package/src/__tests__/account-registry.test.ts +0 -258
- package/src/__tests__/email-classifier.test.ts +0 -25
- package/src/__tests__/gmail-integration.test.ts +0 -97
- package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
- package/src/__tests__/recording-intent-fallback.test.ts +0 -199
- package/src/__tests__/recording-intent.test.ts +0 -985
- package/src/__tests__/recording-state-machine.test.ts +0 -1574
- package/src/__tests__/reminder-store.test.ts +0 -350
- package/src/__tests__/reminder.test.ts +0 -337
- package/src/__tests__/scan-result-store.test.ts +0 -121
- package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
- package/src/__tests__/view-image-tool.test.ts +0 -241
- package/src/cli/commands/amazon/cart.ts +0 -513
- package/src/cli/commands/amazon/checkout.ts +0 -394
- package/src/cli/commands/amazon/client.ts +0 -513
- package/src/cli/commands/amazon/index.ts +0 -885
- package/src/cli/commands/amazon/product-details.ts +0 -145
- package/src/cli/commands/amazon/request-extractor.ts +0 -187
- package/src/cli/commands/amazon/search.ts +0 -76
- package/src/cli/commands/amazon/session.ts +0 -108
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
- package/src/cli/commands/twitter/index.ts +0 -420
- package/src/cli/commands/twitter/oauth-client.ts +0 -60
- package/src/cli/commands/twitter/router.ts +0 -351
- package/src/cli/commands/twitter/types.ts +0 -30
- package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
- package/src/config/bundled-skills/agentmail/icon.svg +0 -21
- package/src/config/bundled-skills/amazon/SKILL.md +0 -136
- package/src/config/bundled-skills/amazon/icon.svg +0 -13
- package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
- package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
- package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
- package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
- package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
- package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
- package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
- package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
- package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
- package/src/config/bundled-skills/influencer/SKILL.md +0 -144
- package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
- package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
- package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
- package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
- package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
- package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
- package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
- package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
- package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
- package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
- package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
- package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
- package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
- package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
- package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
- package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
- package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
- package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
- package/src/config/bundled-skills/notion/SKILL.md +0 -240
- package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
- package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
- package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
- package/src/config/bundled-skills/reminder/SKILL.md +0 -79
- package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
- package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
- package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
- package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
- package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
- package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
- package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
- package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
- package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
- package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
- package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
- package/src/config/bundled-skills/twitter/SKILL.md +0 -206
- package/src/config/bundled-skills/twitter/icon.svg +0 -14
- package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
- package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
- package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
- package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
- package/src/daemon/handlers/pairing.ts +0 -119
- package/src/daemon/handlers/session-user-message.ts +0 -961
- package/src/daemon/recording-executor.ts +0 -180
- package/src/daemon/recording-intent-fallback.ts +0 -162
- package/src/daemon/recording-intent.ts +0 -493
- package/src/memory/account-store.ts +0 -117
- package/src/messaging/activity-analyzer.ts +0 -76
- package/src/messaging/email-classifier.ts +0 -208
- package/src/messaging/index.ts +0 -2
- package/src/messaging/outreach-classifier.ts +0 -185
- package/src/messaging/thread-summarizer.ts +0 -346
- package/src/messaging/types.ts +0 -17
- package/src/tools/browser/x-auto-navigate.ts +0 -254
- package/src/tools/credentials/account-registry.ts +0 -144
- package/src/tools/filesystem/view-image.ts +0 -244
- package/src/tools/reminder/reminder-store.ts +0 -194
- package/src/tools/reminder/reminder.ts +0 -158
- package/src/tools/system/navigate-settings.ts +0 -74
- package/src/tools/system/open-system-settings.ts +0 -85
- package/src/tools/system/version.ts +0 -54
- package/src/twitter/platform-proxy-client.ts +0 -408
- /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
- /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: telegram-setup
|
|
3
|
-
description: Connect a Telegram bot to the Vellum Assistant gateway with automated webhook registration and credential storage
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🤖","vellum":{"display-name":"Telegram Setup","user-invocable":true,"includes":["public-ingress"]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user connect a Telegram bot to the Vellum Assistant gateway. Walk through each step below.
|
|
9
|
-
|
|
10
|
-
## Value Classification
|
|
11
|
-
|
|
12
|
-
| Value | Type | Storage method | Secret? |
|
|
13
|
-
| -------------- | ---------- | ------------------------------------------- | ------- |
|
|
14
|
-
| Bot Token | Credential | `credential_store` prompt | **Yes** |
|
|
15
|
-
| Bot Username | Config | `assistant config set telegram.botUsername` | No |
|
|
16
|
-
| Webhook Secret | Credential | `assistant credentials set` | **Yes** |
|
|
17
|
-
|
|
18
|
-
- **Bot Token** is a secret. Always collect via `credential_store` prompt — never accept it pasted in plaintext chat.
|
|
19
|
-
- **Bot Username** is derived from the token via the Telegram API and stored as config.
|
|
20
|
-
|
|
21
|
-
# Setup Steps
|
|
22
|
-
|
|
23
|
-
## Step 1: Collect Bot Token Securely
|
|
24
|
-
|
|
25
|
-
Tell the user: **"You'll need a Telegram bot token from @BotFather. Open Telegram, message @BotFather, and use /newbot to create one."**
|
|
26
|
-
|
|
27
|
-
Collect the token through the secure credential prompt:
|
|
28
|
-
|
|
29
|
-
- Call `credential_store` with `action: "prompt"`, `service: "telegram"`, `field: "bot_token"`, `label: "Telegram Bot Token"`, `description: "Enter the bot token you received from @BotFather"`, `placeholder: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"`.
|
|
30
|
-
|
|
31
|
-
## Step 2: Validate Token and Configure Bot
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
BOT_TOKEN=$(assistant credentials reveal telegram:bot_token)
|
|
35
|
-
GETME_RESPONSE=$(curl -sf "https://api.telegram.org/bot${BOT_TOKEN}/getMe")
|
|
36
|
-
BOT_USERNAME=$(echo "$GETME_RESPONSE" | jq -r '.result.username')
|
|
37
|
-
assistant config set telegram.botUsername "$BOT_USERNAME"
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
If the `curl` call fails, the token is invalid — ask the user to re-enter (repeat Step 1).
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
## Step 3: Set Up Public Ingress and Webhooks
|
|
44
|
-
|
|
45
|
-
### Verify Public Ingress is Set Up
|
|
46
|
-
|
|
47
|
-
Telegram needs a publicly reachable URL to send webhook events to. Load the `public-ingress` skill to determine whether a public ingress has been configured and walk the user through setting one up if not.
|
|
48
|
-
|
|
49
|
-
### Generate Webhook Secret
|
|
50
|
-
|
|
51
|
-
Check to see if one already exists:
|
|
52
|
-
```bash
|
|
53
|
-
assistant credentials inspect telegram:webhook_secret
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
If not, generate and set one:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
assistant credentials set telegram:webhook_secret "$(uuidgen)"
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Register Platform Callback Route
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
assistant platform callback-routes register --path webhooks/telegram --type telegram --json
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Only needed for containerized deployments. A "not available" error is expected locally — ignore it.
|
|
69
|
-
|
|
70
|
-
## Step 4: Register Bot Commands
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
BOT_TOKEN=$(assistant credentials reveal telegram:bot_token)
|
|
74
|
-
curl -sf -X POST "https://api.telegram.org/bot${BOT_TOKEN}/setMyCommands" \
|
|
75
|
-
-H "Content-Type: application/json" \
|
|
76
|
-
-d '{"commands":[{"command":"new","description":"Start a new conversation"},{"command":"help","description":"Show available commands"}]}'
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Non-critical — warn on failure but don't block setup.
|
|
80
|
-
|
|
81
|
-
## Step 5: Guardian Verification (Optional)
|
|
82
|
-
|
|
83
|
-
Link the user's Telegram account as a trusted guardian. Load the **guardian-verify-setup** skill:
|
|
84
|
-
|
|
85
|
-
- Call `skill_load` with `skill: "guardian-verify-setup"`.
|
|
86
|
-
|
|
87
|
-
If the user declines, skip and continue.
|
|
88
|
-
|
|
89
|
-
## Step 7: Report Success
|
|
90
|
-
|
|
91
|
-
Summarize:
|
|
92
|
-
|
|
93
|
-
- Bot verified and credentials stored
|
|
94
|
-
- Bot commands registered: /new, /help
|
|
95
|
-
- Guardian identity: {verified | skipped}
|
|
96
|
-
|
|
97
|
-
# Clearing Credentials
|
|
98
|
-
|
|
99
|
-
To disconnect Telegram:
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
assistant credentials delete telegram:bot_token
|
|
103
|
-
assistant credentials delete telegram:webhook_secret
|
|
104
|
-
assistant config set telegram.botUsername ""
|
|
105
|
-
```
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: time-based-actions
|
|
3
|
-
description: Unified routing guide for reminders, schedules, notifications, and tasks — prevents common misrouting
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"⏰","vellum":{"display-name":"Time-Based Actions"}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
Quick-reference decision guide for choosing the right tool when users ask about time-triggered actions, recurring automation, notifications, or task tracking.
|
|
9
|
-
|
|
10
|
-
## Decision Tree
|
|
11
|
-
|
|
12
|
-
1. **Does the request have a specific future time AND should fire only once?**
|
|
13
|
-
- YES -> `reminder_create`
|
|
14
|
-
- Examples: "remind me at 3pm", "remind me in 5 minutes", "alert me tomorrow at 9am"
|
|
15
|
-
|
|
16
|
-
2. **Does the request have a recurring pattern?**
|
|
17
|
-
- YES -> `schedule_create`
|
|
18
|
-
- Examples: "every day at 9am", "weekly on Mondays", "every 2 hours"
|
|
19
|
-
|
|
20
|
-
3. **Does the request need an alert RIGHT NOW (no delay)?**
|
|
21
|
-
- YES -> `send_notification`
|
|
22
|
-
- Examples: "send me a notification", "alert me now", "ping me"
|
|
23
|
-
|
|
24
|
-
4. **Is the request about tracking work with no time trigger?**
|
|
25
|
-
- YES -> `task_list_add`
|
|
26
|
-
- Examples: "add to my tasks", "remind me to do X" (no time), "put this on my list"
|
|
27
|
-
|
|
28
|
-
## Critical Warning: `send_notification` is IMMEDIATE-ONLY
|
|
29
|
-
|
|
30
|
-
`send_notification` fires **instantly** when called. It has **NO delay, scheduling, or future-time capability**. NEVER use it for:
|
|
31
|
-
- "Remind me in 5 minutes" -> use `reminder_create`
|
|
32
|
-
- "Alert me at 3pm" -> use `reminder_create`
|
|
33
|
-
- "Notify me tomorrow" -> use `reminder_create`
|
|
34
|
-
|
|
35
|
-
If you use `send_notification` for any of these, the notification fires immediately and the user misses their intended reminder.
|
|
36
|
-
|
|
37
|
-
## Critical Warning: `task_list_add` has NO time trigger
|
|
38
|
-
|
|
39
|
-
`task_list_add` creates a work queue item. It does **NOT** fire at a specific time. NEVER use it as a workaround for delayed notifications. If the user wants a timed alert, use `reminder_create`.
|
|
40
|
-
|
|
41
|
-
## Time Grounding Source
|
|
42
|
-
|
|
43
|
-
Use the injected `<temporal_context>` block as the authoritative clock source:
|
|
44
|
-
- `Current UTC time` is the canonical current instant (from assistant host clock).
|
|
45
|
-
- `Current local time` + `Timezone` are the active local-calendar interpretation.
|
|
46
|
-
- `User timezone` + `Timezone source` tell you whether local-time interpretation is user-specific or host fallback.
|
|
47
|
-
|
|
48
|
-
When `User timezone: unknown` and the request is locale-specific (e.g. "at 3pm", "tomorrow morning", "tonight"), ask once for their timezone and then proceed.
|
|
49
|
-
If the user confirms a timezone, suggest saving it in Settings -> Appearance -> User timezone so future reminders resolve correctly without re-asking.
|
|
50
|
-
|
|
51
|
-
## Relative Time Parsing
|
|
52
|
-
|
|
53
|
-
When the user says "in X minutes/hours", compute the ISO 8601 timestamp yourself:
|
|
54
|
-
- Take `Current UTC time` (or `Current local time` in the active `Timezone`)
|
|
55
|
-
- Add the offset
|
|
56
|
-
- Format as ISO 8601 with timezone: `2025-03-15T09:05:00-05:00`
|
|
57
|
-
- Pass to `reminder_create` as `fire_at`
|
|
58
|
-
|
|
59
|
-
### Anchored & Ambiguous Relative Time
|
|
60
|
-
|
|
61
|
-
Phrases like "at the 45 minute mark", "at the top of the hour", "on the half-hour", "at noon", "20 minutes in", or "when I hit an hour" are **clock-position or anchored relative time** expressions. Do NOT treat them as offsets from now.
|
|
62
|
-
|
|
63
|
-
**Resolution rules (in priority order):**
|
|
64
|
-
|
|
65
|
-
1. **Session-anchored expressions** — if the user mentioned a start time earlier in conversation ("I got here at 9", "meeting started at 2:10"), interpret offset-style phrases ("the 45 minute mark", "20 minutes in", "when I hit an hour") as `start_time + offset`. This takes precedence because the conversational anchor overrides any wall-clock interpretation.
|
|
66
|
-
|
|
67
|
-
2. **Clock-position expressions** — when no start time is in context, map directly to a wall-clock time:
|
|
68
|
-
- "top of the hour" / "on the hour" → next :00 (e.g. 10:00 AM)
|
|
69
|
-
- "the X minute mark" / "at :XX" → current hour's :XX; if already past, advance one hour
|
|
70
|
-
- "the half-hour mark" / "half past" → nearest upcoming :30
|
|
71
|
-
- "noon" / "midnight" → 12:00 PM or 12:00 AM today; if past, tomorrow
|
|
72
|
-
- "quarter past" / "quarter to" → :15 or :45 of current or next hour
|
|
73
|
-
|
|
74
|
-
3. **Ask only if truly ambiguous** — if neither rule 1 nor rule 2 resolves, ask: "Do you mean [clock time] or [X minutes from now]?" Never silently default to "from now."
|
|
75
|
-
|
|
76
|
-
**Examples:**
|
|
77
|
-
- "meeting started at 2:10, remind me at the 45 minute mark" → 2:55 PM (start + 45 min)
|
|
78
|
-
- "20 minutes in, I started at 2pm" → 2:20 PM (start + 20 min)
|
|
79
|
-
- "at the 45 min mark" (no start time, now: 9:39) → 9:45 AM (wall-clock)
|
|
80
|
-
- "at the 45 min mark" (no start time, now: 9:50) → 10:45 AM (wall-clock, next hour)
|
|
81
|
-
- "top of the hour" (now: 9:39) → 10:00 AM
|
|
82
|
-
- "at noon" → 12:00 PM today
|
|
83
|
-
- "at the hour mark" with no start time → ask for clarification
|
|
84
|
-
|
|
85
|
-
## "Remind me to X" Disambiguation
|
|
86
|
-
|
|
87
|
-
The word "remind" is ambiguous. Route based on whether a time is specified:
|
|
88
|
-
|
|
89
|
-
| User says | Time present? | Tool |
|
|
90
|
-
|-----------|--------------|------|
|
|
91
|
-
| "Remind me to buy milk" | No | `task_list_add` |
|
|
92
|
-
| "Remind me to buy milk at 5pm" | Yes | `reminder_create` |
|
|
93
|
-
| "Remind me in 10 minutes to check the oven" | Yes (relative) | `reminder_create` |
|
|
94
|
-
| "Remind me every morning to take vitamins" | Yes (recurring) | `schedule_create` |
|
|
95
|
-
|
|
96
|
-
## Reminder Modes
|
|
97
|
-
|
|
98
|
-
`reminder_create` supports two modes:
|
|
99
|
-
- **`notify`** (default) — shows a notification to the user when the reminder fires
|
|
100
|
-
- **`execute`** — sends the reminder message to a background assistant conversation for autonomous handling
|
|
101
|
-
|
|
102
|
-
Use `notify` for simple alerts. Use `execute` when the reminder should trigger the assistant to do something (e.g., "in 30 minutes, check if the build passed").
|
|
103
|
-
|
|
104
|
-
## Reminder Routing
|
|
105
|
-
|
|
106
|
-
`reminder_create` supports a `routing_intent` parameter that controls how the reminder is delivered at trigger time:
|
|
107
|
-
- **`single_channel`** — deliver to one best channel
|
|
108
|
-
- **`multi_channel`** — deliver to a subset of channels
|
|
109
|
-
- **`all_channels`** (default) — deliver to every available channel
|
|
110
|
-
|
|
111
|
-
You can also pass `routing_hints` (a JSON object) to influence routing decisions (e.g. preferred channels, exclusions).
|
|
112
|
-
|
|
113
|
-
### Routing Defaults
|
|
114
|
-
|
|
115
|
-
Use the following heuristics to pick `routing_intent`:
|
|
116
|
-
|
|
117
|
-
- **Default to `all_channels`** for most reminders. Users setting reminders usually want to be notified wherever they are, and redundant notifications are less harmful than missed ones.
|
|
118
|
-
- **Use `single_channel`** only when the user explicitly specifies a single channel (e.g. "remind me on Telegram") or the reminder is low-stakes and noise reduction matters.
|
|
119
|
-
- **Check `user_message_channel`** from the turn context. If the user is currently active on a specific channel (e.g. `vellum`), always include that channel. Pass it as a routing hint:
|
|
120
|
-
```
|
|
121
|
-
routing_hints: { preferred_channels: ["vellum"] }
|
|
122
|
-
routing_intent: "all_channels"
|
|
123
|
-
```
|
|
124
|
-
- **Never use `single_channel` as a passive default.** If you haven't thought about which channel to use, use `all_channels`.
|
|
125
|
-
|
|
126
|
-
### Examples
|
|
127
|
-
|
|
128
|
-
| Scenario | routing_intent | routing_hints |
|
|
129
|
-
|---|---|---|
|
|
130
|
-
| User sets reminder from desktop app | `all_channels` | `{ preferred_channels: ["vellum"] }` |
|
|
131
|
-
| User says "remind me on Telegram" | `single_channel` | `{ preferred_channels: ["telegram"] }` |
|
|
132
|
-
| User sets reminder from Telegram | `all_channels` | `{ preferred_channels: ["telegram"] }` |
|
|
133
|
-
| No channel preference expressed | `all_channels` | `{}` |
|
|
134
|
-
|
|
135
|
-
## Tool Summary
|
|
136
|
-
|
|
137
|
-
| Tool | Timing | Recurrence | Purpose |
|
|
138
|
-
|------|--------|------------|---------|
|
|
139
|
-
| `reminder_create` | Future time (one-shot) | No | Timed notification or timed autonomous action |
|
|
140
|
-
| `schedule_create` | Recurring pattern | Yes (cron/RRULE) | Recurring automated jobs |
|
|
141
|
-
| `send_notification` | **Immediate only** | No | Alert the user right now |
|
|
142
|
-
| `task_list_add` | **No time trigger** | No | Track work in the task queue |
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: twilio-setup
|
|
3
|
-
description: Configure Twilio credentials and phone numbers for voice calls
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"📱","vellum":{"display-name":"Twilio Setup","user-invocable":true,"includes":["public-ingress"]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user configure Twilio for voice calls. Walk through each step below.
|
|
9
|
-
|
|
10
|
-
## Value Classification
|
|
11
|
-
|
|
12
|
-
Before you begin, understand how each Twilio value is stored:
|
|
13
|
-
|
|
14
|
-
| Value | Type | Storage method | Secret? |
|
|
15
|
-
| ------------ | ---------- | --------------------------------------------- | ------- |
|
|
16
|
-
| Account SID | Config | `assistant config set twilio.accountSid` | No |
|
|
17
|
-
| Auth Token | Credential | `assistant credentials set twilio:auth_token` | **Yes** |
|
|
18
|
-
| Phone Number | Config | `assistant config set twilio.phoneNumber` | No |
|
|
19
|
-
|
|
20
|
-
- **Config values** (Account SID, Phone Number) are non-sensitive identifiers. Collect them via normal conversation -- the user can paste them in chat or you can use `AskUserQuestion`.
|
|
21
|
-
**Auth Token** is a secret. Collect it securely via `credential_store` prompt -- never accept it pasted in plaintext chat.
|
|
22
|
-
|
|
23
|
-
## Retrieving Twilio Credentials
|
|
24
|
-
|
|
25
|
-
Many steps below require the Account SID and Auth Token. Retrieve them with:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
TWILIO_SID=$(assistant config get twilio.accountSid)
|
|
29
|
-
TWILIO_TOKEN=$(assistant credentials reveal twilio:auth_token)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
# Checking Current Configuration
|
|
33
|
-
|
|
34
|
-
You can determine whether Twilio has been fully set up by checking to see that all the following config and credential values have been set:
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
assistant config get twilio.accountSid
|
|
38
|
-
assistant credentials inspect twilio:auth_token --json # check "hasSecret" field
|
|
39
|
-
assistant config get twilio.phoneNumber
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
- If all three config values are non-empty -- Twilio is fully configured. Offer to show status or reconfigure.
|
|
43
|
-
- Otherwise, continue to the missing steps.
|
|
44
|
-
|
|
45
|
-
# Twilio Setup Steps
|
|
46
|
-
|
|
47
|
-
Follow the steps below in order to fully configure Twilio in preparation to make phone calls.
|
|
48
|
-
|
|
49
|
-
## Step 1: Check Current Configuration
|
|
50
|
-
|
|
51
|
-
Refer to "Checking Current Configuration" above to see the current state of the user's Twilio setup. If Twilio appears to be fully configured. Offer to show status or reconfigure. Otherwise, continue to the missing steps below.
|
|
52
|
-
|
|
53
|
-
## Step 2: Collect and Store Credentials
|
|
54
|
-
|
|
55
|
-
Tell the user: **"You'll need a Twilio account. Sign up at https://www.twilio.com/try-twilio -- it's free to start and includes trial credit."**
|
|
56
|
-
|
|
57
|
-
They need two values from the Twilio Console dashboard (https://console.twilio.com):
|
|
58
|
-
|
|
59
|
-
- **Account SID** -- visible on the dashboard, starts with `AC` (this is not a secret value and can be collected conversationally)
|
|
60
|
-
- **Auth Token** -- click "Show" to reveal (this is a secret value and should be collected securely)
|
|
61
|
-
|
|
62
|
-
### Collect Account SID
|
|
63
|
-
|
|
64
|
-
Ask the user for their Account SID. This is NOT a secret value, so the user should be encouraged to comfortable paste it into the chat directly. Once they have, store it as a config value:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
assistant config set twilio.accountSid "<Account SID from user>"
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Collect Auth Token
|
|
71
|
-
|
|
72
|
-
Ask the user for their Auth Token. This IS a secret value, so the user should be prompted to enter the value securely. Do NOT ask them to provide it in the chat. Once they have, store it as a credential:
|
|
73
|
-
|
|
74
|
-
- Call `credential_store` with `action: "prompt"`, `service: "twilio"`, `field: "auth_token"`, `label: "Twilio Auth Token"`, `description: "Enter your Auth Token from the Twilio Console dashboard (click 'Show' to reveal it)"`, `placeholder: "your_auth_token"`.
|
|
75
|
-
|
|
76
|
-
Confirm it has been stored successfully:
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
assistant credentials inspect "twilio:auth_token"
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
If credentials are invalid, Twilio API calls in Step 3 will fail -- ask the user to re-enter.
|
|
83
|
-
|
|
84
|
-
## Step 3: Get a Phone Number
|
|
85
|
-
|
|
86
|
-
The assistant needs a phone number for voice calls. Three options:
|
|
87
|
-
|
|
88
|
-
### Option A: Use an Existing Number
|
|
89
|
-
|
|
90
|
-
You should assume this option if the user had just created their Twilio account. Trial accounts come with one free number.
|
|
91
|
-
|
|
92
|
-
Retrieve credentials, then list numbers on the account:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" \
|
|
96
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers.json"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Present the `incoming_phone_numbers` array. Let the user choose.
|
|
100
|
-
|
|
101
|
-
### Option B: Provision a New Number
|
|
102
|
-
|
|
103
|
-
Retrieve credentials (see "Retrieving Twilio Credentials" above), then:
|
|
104
|
-
|
|
105
|
-
**Search for available numbers:**
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" \
|
|
109
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/AvailablePhoneNumbers/US/Local.json?VoiceEnabled=true&AreaCode=415"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
- `AreaCode` is optional -- ask the user if they have a preference
|
|
113
|
-
- Replace `US` with another country code if needed
|
|
114
|
-
|
|
115
|
-
Present the first few results from the `available_phone_numbers` array (show `phone_number` and `friendly_name`).
|
|
116
|
-
|
|
117
|
-
**Purchase the chosen number:**
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" -X POST \
|
|
121
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers.json" \
|
|
122
|
-
-d "PhoneNumber=+14155551234"
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Note the `sid` field (starts with `PN`) from the response -- needed for webhook setup in Step 4.
|
|
126
|
-
|
|
127
|
-
### Option C: Manual Entry
|
|
128
|
-
|
|
129
|
-
If the user already has a number and knows it, skip the API calls. They can paste it directly in chat.
|
|
130
|
-
|
|
131
|
-
### Save the phone number
|
|
132
|
-
|
|
133
|
-
After choosing a number via any option, store it as a config value:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
assistant config set twilio.phoneNumber "+14155551234"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## Step 4: Set Up Public Ingress and Webhooks
|
|
140
|
-
|
|
141
|
-
### Verify Public Ingress is Set Up
|
|
142
|
-
|
|
143
|
-
Twilio needs a publicly reachable URL for voice webhooks. Load the `public-ingress` skill to determine whether a public ingress has been configured and walk the user through setting one up if not.
|
|
144
|
-
|
|
145
|
-
### Configure Twilio Webhooks
|
|
146
|
-
|
|
147
|
-
Set webhook URLs on the phone number so Twilio routes traffic to the assistant.
|
|
148
|
-
|
|
149
|
-
Retrieve credentials and config values:
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
TWILIO_SID=$(assistant config get twilio.accountSid)
|
|
153
|
-
TWILIO_TOKEN=$(assistant credentials reveal twilio:auth_token)
|
|
154
|
-
PUBLIC_URL=$(assistant config get ingress.publicBaseUrl)
|
|
155
|
-
PHONE_NUMBER=$(assistant config get twilio.phoneNumber)
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Look up the phone number's SID:
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" \
|
|
162
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers.json?PhoneNumber=$PHONE_NUMBER"
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
Note the `sid` field (starts with `PN`) from the matching entry, then update webhooks:
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" -X POST \
|
|
169
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers/$PHONE_SID.json" \
|
|
170
|
-
-d "VoiceUrl=$PUBLIC_URL/webhooks/twilio/voice" \
|
|
171
|
-
-d "StatusCallback=$PUBLIC_URL/webhooks/twilio/status"
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
## Clearing Credentials
|
|
176
|
-
|
|
177
|
-
To disconnect Twilio:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
assistant credentials delete twilio:auth_token
|
|
181
|
-
assistant config set twilio.accountSid ""
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
Phone number assignments are preserved. Voice calls will stop until credentials are reconfigured.
|
|
185
|
-
|
|
186
|
-
## Troubleshooting
|
|
187
|
-
|
|
188
|
-
### "Twilio credentials not configured"
|
|
189
|
-
|
|
190
|
-
Run Steps 2 and 3.
|
|
191
|
-
|
|
192
|
-
### "No phone number assigned"
|
|
193
|
-
|
|
194
|
-
Run Step 3.
|
|
195
|
-
|
|
196
|
-
### Phone number provisioning fails
|
|
197
|
-
|
|
198
|
-
- Verify credentials are correct
|
|
199
|
-
- Trial accounts may already have a free number -- check "Active Numbers" in the Console
|
|
200
|
-
- Ensure the account has sufficient balance
|
|
201
|
-
|
|
202
|
-
### Calls fail after setup
|
|
203
|
-
|
|
204
|
-
- Verify ingress is running: `assistant config get ingress.publicBaseUrl`
|
|
205
|
-
- For calls, ensure `calls.enabled` is `true`
|
|
206
|
-
- Trial accounts can only reach verified numbers
|
|
207
|
-
|
|
208
|
-
### Incoming calls not reaching the assistant
|
|
209
|
-
|
|
210
|
-
Webhooks on the Twilio phone number may not match the current ingress URL. This happens when ngrok restarts with a new URL or webhooks were never configured.
|
|
211
|
-
|
|
212
|
-
**Diagnose** -- fetch the number's current webhooks and compare to the expected URL:
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
TWILIO_SID=$(assistant config get twilio.accountSid)
|
|
216
|
-
TWILIO_TOKEN=$(assistant credentials reveal twilio:auth_token)
|
|
217
|
-
PUBLIC_URL=$(assistant config get ingress.publicBaseUrl)
|
|
218
|
-
PHONE_NUMBER=$(assistant config get twilio.phoneNumber)
|
|
219
|
-
|
|
220
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" \
|
|
221
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers.json?PhoneNumber=$PHONE_NUMBER"
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
Check that `voice_url` and `status_callback` start with the current `ingress.publicBaseUrl`. If they don't match, update them:
|
|
225
|
-
|
|
226
|
-
```bash
|
|
227
|
-
PHONE_SID=<PN sid from the response above>
|
|
228
|
-
curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" -X POST \
|
|
229
|
-
"https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers/$PHONE_SID.json" \
|
|
230
|
-
-d "VoiceUrl=$PUBLIC_URL/webhooks/twilio/voice" \
|
|
231
|
-
-d "StatusCallback=$PUBLIC_URL/webhooks/twilio/status"
|
|
232
|
-
```
|