@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,78 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: api-mapping
|
|
3
|
-
description: Record and analyze API surfaces of web services
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🗺️","vellum":{"display-name":"API Mapping","user-invocable":true}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You can record and analyze the API surface of any web service using the `map` CLI.
|
|
9
|
-
|
|
10
|
-
## CLI Setup
|
|
11
|
-
|
|
12
|
-
**IMPORTANT: Always use `host_bash` (not `bash`) for all `map` commands.** The API mapping CLI needs host access for Chrome CDP, network recording, and browser automation — none of which are available inside the sandbox.
|
|
13
|
-
|
|
14
|
-
`map` is a standalone CLI tool installed at `~/.vellum/bin/map`. It should already be on your PATH. If `map` is not found, prepend `PATH="$HOME/.vellum/bin:$PATH"` to the command. Do NOT search for the binary or try to discover how the CLI works. Just run the commands as documented below.
|
|
15
|
-
|
|
16
|
-
## Typical Flow
|
|
17
|
-
|
|
18
|
-
When the user wants to map a web service's API (e.g. "Map the Notion API" or "Figure out how Figma's API works"):
|
|
19
|
-
|
|
20
|
-
1. **Ask about the objective** — Ask the user: "What service do you want to map?" and "What are you trying to build or integrate with?" This helps focus the recording on the relevant parts of the API surface.
|
|
21
|
-
|
|
22
|
-
2. **Choose mode** — Ask the user: "Should I browse automatically, or do you want to drive?" This determines whether to use auto mode or manual mode:
|
|
23
|
-
- **Auto mode**: The CLI launches a headless browser, navigates the service, and records API calls automatically. Best for broad discovery.
|
|
24
|
-
- **Manual mode**: A Chrome window opens for the user to interact with the service while the CLI records all API traffic in the background. Best for capturing a specific workflow.
|
|
25
|
-
|
|
26
|
-
3. **Run the mapping** — Execute the appropriate `map` command:
|
|
27
|
-
- Auto mode: `map <domain> --json`
|
|
28
|
-
- Manual mode: `map <domain> --manual --json`
|
|
29
|
-
- For longer sessions: `map <domain> --duration 120 --json`
|
|
30
|
-
|
|
31
|
-
4. **Wait for recording to complete** — In auto mode, the CLI will browse and record for the default duration (60 seconds) then stop. In manual mode, the CLI blocks until the user closes the browser or presses Ctrl+C. The command outputs a JSON summary of all discovered endpoints.
|
|
32
|
-
|
|
33
|
-
5. **Analyze the API map** — Review the output and present findings to the user:
|
|
34
|
-
- List discovered endpoints grouped by resource type (e.g., `/api/v1/users`, `/api/v1/documents`)
|
|
35
|
-
- Note authentication patterns (Bearer tokens, cookies, API keys)
|
|
36
|
-
- Identify CRUD operations and their HTTP methods
|
|
37
|
-
- Highlight any WebSocket or streaming endpoints
|
|
38
|
-
- Call out rate limiting headers or pagination patterns
|
|
39
|
-
|
|
40
|
-
6. **Offer next steps** — Based on the discovered API surface, offer to:
|
|
41
|
-
- Create CLI tools that wrap the discovered endpoints
|
|
42
|
-
- Generate TypeScript types from observed request/response payloads
|
|
43
|
-
- Build a focused integration for the user's specific use case
|
|
44
|
-
- Re-record with a longer duration or manual mode to capture more endpoints
|
|
45
|
-
|
|
46
|
-
## Important Behavior
|
|
47
|
-
|
|
48
|
-
- **Be proactive.** If the user names a service, start mapping immediately rather than asking unnecessary clarifying questions. Ask about mode preference, then go.
|
|
49
|
-
- **Always use `--json` flag** on all commands for reliable parsing.
|
|
50
|
-
- **Present findings clearly.** Group endpoints logically, show HTTP methods, and highlight the most useful ones for the user's stated objective.
|
|
51
|
-
- **Suggest manual mode for authenticated services.** If auto mode returns mostly auth redirects or login pages, suggest switching to manual mode so the user can log in first.
|
|
52
|
-
- **Handle errors gracefully.** If the domain is unreachable or the recording captures no API calls, suggest checking the domain, trying manual mode, or increasing the duration.
|
|
53
|
-
|
|
54
|
-
## Command Reference
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
map <domain> --json # Auto mode: browse and record API calls (default 60s)
|
|
58
|
-
map <domain> --manual --json # Manual mode: user drives the browser, CLI records
|
|
59
|
-
map <domain> --duration <secs> --json # Auto mode with custom duration
|
|
60
|
-
map <domain> --manual --duration <secs> --json # Manual mode with custom timeout
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Example Interaction
|
|
64
|
-
|
|
65
|
-
**User**: "Map the Notion API"
|
|
66
|
-
|
|
67
|
-
1. Ask: "What are you trying to build with Notion? And should I browse automatically, or do you want to drive the browser?"
|
|
68
|
-
2. User says: "I want to build a CLI to manage my pages. I'll drive."
|
|
69
|
-
3. `map notion.com --manual --json` -> Chrome window opens
|
|
70
|
-
4. Tell user: "A Chrome window is open. Log into Notion and do a representative workflow — create a page, edit it, maybe move it. I'll record all API calls in the background. Close the browser when you're done."
|
|
71
|
-
5. User closes browser -> CLI outputs discovered endpoints
|
|
72
|
-
6. Present findings: "I found 14 API endpoints. Here are the key ones for page management:
|
|
73
|
-
- `POST /api/v3/getSpaces` — lists workspaces
|
|
74
|
-
- `POST /api/v3/syncRecordValues` — fetches page content
|
|
75
|
-
- `POST /api/v3/submitTransaction` — creates/updates pages
|
|
76
|
-
- `POST /api/v3/enqueueTask` — async operations (export, duplicate)
|
|
77
|
-
Authentication: Cookie-based session with `token_v2`."
|
|
78
|
-
7. Offer: "Want me to create a CLI tool that wraps these endpoints for managing Notion pages?"
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<rect width="16" height="16" fill="#0f172a"/>
|
|
3
|
-
<rect x="2" y="2" width="12" height="12" fill="#1e293b"/>
|
|
4
|
-
<rect x="3" y="3" width="10" height="10" fill="#0f172a" stroke="#3b82f6" stroke-width="1"/>
|
|
5
|
-
<rect x="4" y="4" width="2" height="2" fill="#3b82f6"/>
|
|
6
|
-
<rect x="10" y="4" width="2" height="2" fill="#3b82f6"/>
|
|
7
|
-
<rect x="4" y="10" width="2" height="2" fill="#3b82f6"/>
|
|
8
|
-
<rect x="10" y="10" width="2" height="2" fill="#3b82f6"/>
|
|
9
|
-
<line x1="5" y1="5" x2="11" y2="5" stroke="#10b981" stroke-width="1"/>
|
|
10
|
-
<line x1="5" y1="5" x2="5" y2="11" stroke="#10b981" stroke-width="1"/>
|
|
11
|
-
<line x1="11" y1="5" x2="11" y2="11" stroke="#10b981" stroke-width="1"/>
|
|
12
|
-
<line x1="5" y1="11" x2="11" y2="11" stroke="#10b981" stroke-width="1"/>
|
|
13
|
-
<rect x="7" y="7" width="2" height="2" fill="#f59e0b"/>
|
|
14
|
-
<line x1="5" y1="8" x2="7" y2="8" stroke="#60a5fa" stroke-width="1"/>
|
|
15
|
-
<line x1="9" y1="8" x2="11" y2="8" stroke="#60a5fa" stroke-width="1"/>
|
|
16
|
-
<line x1="8" y1="5" x2="8" y2="7" stroke="#60a5fa" stroke-width="1"/>
|
|
17
|
-
<line x1="8" y1="9" x2="8" y2="11" stroke="#60a5fa" stroke-width="1"/>
|
|
18
|
-
</svg>
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cli-discover
|
|
3
|
-
description: Discover which CLI tools are installed, their versions, and authentication status
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🔍","vellum":{"display-name":"CLI Discovery","user-invocable":false}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# CLI Discovery
|
|
9
|
-
|
|
10
|
-
When you need to discover what CLI tools are available on the system, use `host_bash` to check directly. Do not use sandboxed `bash` for discovery — it may not see host-installed CLIs or auth state, leading to false negatives.
|
|
11
|
-
|
|
12
|
-
## Checking if a CLI exists
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
which <name> # returns path if found, exits non-zero if missing
|
|
16
|
-
command -v <name> # alternative, works in all POSIX shells
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Getting version info
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
<name> --version # most CLIs support this flag
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Use a 5-second timeout to avoid hanging on unresponsive CLIs.
|
|
26
|
-
|
|
27
|
-
## Auth-check commands
|
|
28
|
-
|
|
29
|
-
For CLIs that support authentication, check whether the user is logged in:
|
|
30
|
-
|
|
31
|
-
| CLI | Auth check command |
|
|
32
|
-
|-----|-------------------|
|
|
33
|
-
| `gh` | `gh auth status` |
|
|
34
|
-
| `aws` | `aws sts get-caller-identity` |
|
|
35
|
-
| `gcloud` | `gcloud auth list --filter=status:ACTIVE --format=value(account)` |
|
|
36
|
-
| `az` | `az account show` |
|
|
37
|
-
| `vercel` | `vercel whoami` |
|
|
38
|
-
| `netlify` | `netlify status` |
|
|
39
|
-
| `fly` | `fly auth whoami` |
|
|
40
|
-
| `heroku` | `heroku auth:whoami` |
|
|
41
|
-
| `railway` | `railway whoami` |
|
|
42
|
-
|
|
43
|
-
## Common CLIs worth checking
|
|
44
|
-
|
|
45
|
-
When doing a broad discovery, check these categories:
|
|
46
|
-
|
|
47
|
-
- **Version control & code hosting:** `gh`, `git`, `gitlab`
|
|
48
|
-
- **Project management:** `linear`, `jira`
|
|
49
|
-
- **Communication:** `slack`
|
|
50
|
-
- **Cloud providers:** `aws`, `gcloud`, `az`
|
|
51
|
-
- **Containers & infra:** `docker`, `kubectl`, `terraform`
|
|
52
|
-
- **Runtimes & package managers:** `node`, `bun`, `deno`, `python3`, `pip3`
|
|
53
|
-
- **HTTP clients:** `curl`, `httpie`
|
|
54
|
-
- **Hosting & deploy:** `vercel`, `netlify`, `fly`, `heroku`, `railway`
|
|
55
|
-
|
|
56
|
-
## Output format
|
|
57
|
-
|
|
58
|
-
Report findings in markdown:
|
|
59
|
-
|
|
60
|
-
```markdown
|
|
61
|
-
## Available CLIs
|
|
62
|
-
|
|
63
|
-
- **git** (/usr/bin/git) — git version 2.x.x
|
|
64
|
-
- **gh** (/usr/bin/gh) — gh version 2.x.x [authenticated: user@example.com]
|
|
65
|
-
- **bun** (~/.bun/bin/bun) — 1.x.x
|
|
66
|
-
|
|
67
|
-
## Not found: jira, linear, slack
|
|
68
|
-
```
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: deploy-fullstack-vercel
|
|
3
|
-
description: Build and deploy a full-stack app (React frontend + Python/FastAPI backend) to Vercel as a serverless demo with seeded data
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🚀","vellum":{"display-name":"Deploy Fullstack to Vercel"}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Deploy Fullstack to Vercel
|
|
9
|
-
|
|
10
|
-
Deploy a full-stack app with a React/Vite frontend and Python/FastAPI backend to Vercel as a serverless demo. No auth required — meant for demos, portfolio pieces, and quick showcases.
|
|
11
|
-
|
|
12
|
-
## When to Use
|
|
13
|
-
|
|
14
|
-
- User says "deploy this to Vercel", "host this", "publish this"
|
|
15
|
-
- User has a project with a frontend + backend they want live
|
|
16
|
-
- User wants a quick demo deployment (no persistent database needed)
|
|
17
|
-
|
|
18
|
-
## Prerequisites
|
|
19
|
-
|
|
20
|
-
- A project with a frontend (React/Vite) and backend (FastAPI/Python)
|
|
21
|
-
- Vercel CLI installed (`npm install -g vercel`) and authenticated (`vercel login`)
|
|
22
|
-
|
|
23
|
-
## Workflow
|
|
24
|
-
|
|
25
|
-
### 1. Build the Frontend
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
cd <project>/frontend
|
|
29
|
-
npm install
|
|
30
|
-
npx vite build
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
This produces static files in `frontend/dist/`.
|
|
34
|
-
|
|
35
|
-
### 2. Create the Vercel Deploy Directory
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
<project>/vercel-deploy/
|
|
39
|
-
├── api/
|
|
40
|
-
│ ├── index.py ← FastAPI app wrapper (entry point)
|
|
41
|
-
│ ├── database.py ← DB config (use /tmp for SQLite)
|
|
42
|
-
│ ├── models.py
|
|
43
|
-
│ ├── schemas.py
|
|
44
|
-
│ ├── seed_data.py ← Must seed ALL required data (users, etc.)
|
|
45
|
-
│ ├── routers/
|
|
46
|
-
│ │ ├── __init__.py
|
|
47
|
-
│ │ └── *.py
|
|
48
|
-
│ └── requirements.txt ← Python deps (fastapi, sqlalchemy, pydantic)
|
|
49
|
-
├── index.html ← From frontend/dist/
|
|
50
|
-
├── assets/ ← From frontend/dist/assets/
|
|
51
|
-
└── vercel.json
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**Key steps:**
|
|
55
|
-
```bash
|
|
56
|
-
mkdir -p <project>/vercel-deploy/api
|
|
57
|
-
|
|
58
|
-
# Copy frontend build output to deploy root
|
|
59
|
-
cp -r <project>/frontend/dist/* <project>/vercel-deploy/
|
|
60
|
-
|
|
61
|
-
# Copy backend files into api/
|
|
62
|
-
cp <project>/backend/models.py <project>/vercel-deploy/api/
|
|
63
|
-
cp <project>/backend/database.py <project>/vercel-deploy/api/
|
|
64
|
-
cp <project>/backend/schemas.py <project>/vercel-deploy/api/
|
|
65
|
-
cp <project>/backend/seed_data.py <project>/vercel-deploy/api/
|
|
66
|
-
cp -r <project>/backend/routers <project>/vercel-deploy/api/
|
|
67
|
-
cp <project>/backend/requirements.txt <project>/vercel-deploy/api/
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### 3. Create api/index.py (Serverless Entry Point)
|
|
71
|
-
|
|
72
|
-
```python
|
|
73
|
-
import sys, os
|
|
74
|
-
sys.path.insert(0, os.path.dirname(__file__))
|
|
75
|
-
|
|
76
|
-
from fastapi import FastAPI
|
|
77
|
-
from fastapi.middleware.cors import CORSMiddleware
|
|
78
|
-
from database import engine, Base, SessionLocal
|
|
79
|
-
from seed_data import seed_exercises, seed_default_user # all seed functions
|
|
80
|
-
from routers import users, exercises, workouts, schedule, progress
|
|
81
|
-
|
|
82
|
-
# Create tables and seed on EVERY cold start
|
|
83
|
-
Base.metadata.create_all(bind=engine)
|
|
84
|
-
db = SessionLocal()
|
|
85
|
-
try:
|
|
86
|
-
seed_exercises(db)
|
|
87
|
-
seed_default_user(db) # IMPORTANT: seed all required data
|
|
88
|
-
finally:
|
|
89
|
-
db.close()
|
|
90
|
-
|
|
91
|
-
app = FastAPI(title="MyApp")
|
|
92
|
-
|
|
93
|
-
app.add_middleware(
|
|
94
|
-
CORSMiddleware,
|
|
95
|
-
allow_origins=["*"],
|
|
96
|
-
allow_credentials=True,
|
|
97
|
-
allow_methods=["*"],
|
|
98
|
-
allow_headers=["*"],
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
app.include_router(users.router)
|
|
102
|
-
# ... other routers
|
|
103
|
-
|
|
104
|
-
@app.get("/api/health")
|
|
105
|
-
def health_check():
|
|
106
|
-
return {"status": "ok"}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 4. Update database.py for Vercel
|
|
110
|
-
|
|
111
|
-
**Critical:** Vercel serverless functions can only write to `/tmp`. Update the SQLite path:
|
|
112
|
-
|
|
113
|
-
```python
|
|
114
|
-
SQLALCHEMY_DATABASE_URL = "sqlite:////tmp/app.db"
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### 5. Seed ALL Required Data
|
|
118
|
-
|
|
119
|
-
**This is the #1 gotcha.** Since `/tmp` is ephemeral, every cold start gets a fresh database. If your frontend assumes certain data exists (like user ID 1), you MUST seed it:
|
|
120
|
-
|
|
121
|
-
```python
|
|
122
|
-
def seed_default_user(db: Session):
|
|
123
|
-
count = db.query(UserProfile).count()
|
|
124
|
-
if count > 0:
|
|
125
|
-
return
|
|
126
|
-
user = UserProfile(name="Demo User", ...)
|
|
127
|
-
db.add(user)
|
|
128
|
-
db.commit()
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### 6. Create vercel.json
|
|
132
|
-
|
|
133
|
-
```json
|
|
134
|
-
{
|
|
135
|
-
"rewrites": [
|
|
136
|
-
{ "source": "/api/(.*)", "destination": "/api/index.py" },
|
|
137
|
-
{ "source": "/((?!assets/).*)", "destination": "/index.html" }
|
|
138
|
-
]
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
This routes:
|
|
143
|
-
- `/api/*` → Python serverless function
|
|
144
|
-
- Everything else → React SPA (index.html)
|
|
145
|
-
|
|
146
|
-
### 7. Deploy
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
cd <project>/vercel-deploy
|
|
150
|
-
vercel --yes --prod
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### 8. Verify
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
curl -s <deployed-url>/api/health
|
|
157
|
-
# Should return: {"status":"ok"}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Gotchas & Limitations
|
|
161
|
-
|
|
162
|
-
| Issue | Solution |
|
|
163
|
-
|-------|----------|
|
|
164
|
-
| SQLite resets on cold start | Seed ALL required data in index.py startup |
|
|
165
|
-
| No persistent storage | Acceptable for demos. For production, use Vercel Postgres or Supabase |
|
|
166
|
-
| No auth | Fine for demos/portfolios. Add auth layer for real apps |
|
|
167
|
-
| `requirements.txt` location | Must be inside `api/` folder (next to index.py) |
|
|
168
|
-
| Module imports in routers | Use `sys.path.insert(0, os.path.dirname(__file__))` in index.py |
|
|
169
|
-
| CORS | Set `allow_origins=["*"]` for demo deployments |
|
|
170
|
-
| `--name` flag deprecated | Don't use `--name` with Vercel CLI, just deploy from the directory |
|
|
171
|
-
|
|
172
|
-
## Vercel CLI Quick Reference
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
npm install -g vercel # Install
|
|
176
|
-
vercel login # Authenticate (opens browser)
|
|
177
|
-
vercel --yes --prod # Deploy to production (skip prompts)
|
|
178
|
-
vercel logs --project <name> # Check function logs
|
|
179
|
-
```
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: document-writer
|
|
3
|
-
description: Create and edit long-form documents like blog posts, articles, essays, and reports using the built-in rich text editor
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"📝","vellum":{"display-name":"Document Writer","user-invocable":true}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user write long-form content (blog posts, articles, essays, reports, documentation) using the built-in document editor. This skill should be used whenever the user asks to write, draft, or create any document-like content.
|
|
9
|
-
|
|
10
|
-
## When to Use This Skill
|
|
11
|
-
|
|
12
|
-
**ALWAYS use this skill when the user asks for:**
|
|
13
|
-
- Blog posts
|
|
14
|
-
- Articles
|
|
15
|
-
- Essays
|
|
16
|
-
- Reports
|
|
17
|
-
- Guides or tutorials
|
|
18
|
-
- Documentation
|
|
19
|
-
- Any long-form written content (500+ words)
|
|
20
|
-
|
|
21
|
-
**DO NOT use this skill for:**
|
|
22
|
-
- Short responses or explanations (< 500 words)
|
|
23
|
-
- Code snippets or technical implementations
|
|
24
|
-
- Interactive apps or dashboards (use `app_create` instead)
|
|
25
|
-
- Quick summaries
|
|
26
|
-
|
|
27
|
-
## Workflow
|
|
28
|
-
|
|
29
|
-
### Step 1: Create the Document
|
|
30
|
-
|
|
31
|
-
Use `document_create` to open the built-in rich text editor:
|
|
32
|
-
|
|
33
|
-
```json
|
|
34
|
-
{
|
|
35
|
-
"title": "The title of the document (inferred from user's request)",
|
|
36
|
-
"initial_content": "Optional starting content in Markdown format"
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**Important:** The editor opens in the Documents tab of the Directory panel, with chat docked to the side. The user can see both the editor and chat simultaneously.
|
|
41
|
-
|
|
42
|
-
### Step 2: Generate Content
|
|
43
|
-
|
|
44
|
-
Write the content in **Markdown format**. Use proper structure:
|
|
45
|
-
|
|
46
|
-
- `#` for main title
|
|
47
|
-
- `##` for section headings
|
|
48
|
-
- `###` for subsections
|
|
49
|
-
- `**bold**` and `*italic*` for emphasis
|
|
50
|
-
- ` ```language ` for code blocks
|
|
51
|
-
- `[text](url)` for links
|
|
52
|
-
- `- ` or `1. ` for lists
|
|
53
|
-
- `> ` for blockquotes
|
|
54
|
-
- Tables, images, and other Markdown features as appropriate
|
|
55
|
-
|
|
56
|
-
**Quality standards:**
|
|
57
|
-
- Write in clear, engaging prose appropriate for the content type
|
|
58
|
-
- Use active voice and vary sentence structure
|
|
59
|
-
- Break content into logical sections with descriptive headings
|
|
60
|
-
- Include transitions between sections
|
|
61
|
-
- For technical content: use code blocks with syntax highlighting
|
|
62
|
-
- For data-heavy content: use Markdown tables
|
|
63
|
-
|
|
64
|
-
### Step 3: Stream Content to Editor
|
|
65
|
-
|
|
66
|
-
Use `document_update` to send content to the editor as you generate it:
|
|
67
|
-
|
|
68
|
-
```json
|
|
69
|
-
{
|
|
70
|
-
"surface_id": "doc-xyz",
|
|
71
|
-
"content": "# Main Title\n\nYour content here...",
|
|
72
|
-
"mode": "append"
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Streaming strategy:**
|
|
77
|
-
- Generate content in logical chunks (paragraphs or sections)
|
|
78
|
-
- Use `mode: "append"` to stream chunks as you write
|
|
79
|
-
- The content appears in real-time in the editor
|
|
80
|
-
- Don't wait to generate everything before sending - stream it!
|
|
81
|
-
|
|
82
|
-
### Step 4: Handle User Edits and Requests
|
|
83
|
-
|
|
84
|
-
The user can request changes via the docked chat while viewing the document:
|
|
85
|
-
|
|
86
|
-
**Common requests:**
|
|
87
|
-
- "Make the intro shorter"
|
|
88
|
-
- "Add a section about X"
|
|
89
|
-
- "Change the tone to be more formal"
|
|
90
|
-
- "Fix the grammar in paragraph 3"
|
|
91
|
-
|
|
92
|
-
**How to respond:**
|
|
93
|
-
- Acknowledge the request
|
|
94
|
-
- Generate the updated content
|
|
95
|
-
- Use `document_update` with:
|
|
96
|
-
- `mode: "replace"` for complete rewrites
|
|
97
|
-
- `mode: "append"` for additions at the end
|
|
98
|
-
- For edits in the middle: use `mode: "replace"` with the full updated document
|
|
99
|
-
|
|
100
|
-
### Step 5: Finalize
|
|
101
|
-
|
|
102
|
-
Once the user is satisfied:
|
|
103
|
-
- Confirm the document is complete
|
|
104
|
-
- Remind them that it's automatically saved in the Generated panel
|
|
105
|
-
- Let them know they can continue editing manually or ask for more changes
|
|
106
|
-
|
|
107
|
-
## Examples
|
|
108
|
-
|
|
109
|
-
### Example 1: Blog Post Request
|
|
110
|
-
|
|
111
|
-
**User:** "Write a blog post about the future of AI"
|
|
112
|
-
|
|
113
|
-
**Your response:**
|
|
114
|
-
```
|
|
115
|
-
I'll create a document for your blog post about the future of AI.
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Then:
|
|
119
|
-
1. Call `document_create` with `title: "The Future of AI"`
|
|
120
|
-
2. Generate content in chunks, calling `document_update` repeatedly:
|
|
121
|
-
- First chunk: `# The Future of AI\n\nArtificial intelligence is...`
|
|
122
|
-
- Second chunk: `## Current State\n\nToday, AI systems...`
|
|
123
|
-
- Third chunk: `## Emerging Trends\n\n1. **Multimodal AI**...`
|
|
124
|
-
- Continue until complete
|
|
125
|
-
|
|
126
|
-
### Example 2: Edit Request
|
|
127
|
-
|
|
128
|
-
**User (after initial creation):** "Add a section about ethical considerations"
|
|
129
|
-
|
|
130
|
-
**Your response:**
|
|
131
|
-
```
|
|
132
|
-
I'll add a section on AI ethics.
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Then:
|
|
136
|
-
1. Call `document_update` with `mode: "append"` and content:
|
|
137
|
-
```markdown
|
|
138
|
-
## Ethical Considerations
|
|
139
|
-
|
|
140
|
-
As AI systems become more powerful, we must address...
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Example 3: Full Rewrite
|
|
144
|
-
|
|
145
|
-
**User:** "Rewrite this in a more casual tone"
|
|
146
|
-
|
|
147
|
-
**Your response:**
|
|
148
|
-
```
|
|
149
|
-
I'll rewrite the article in a more casual, conversational tone.
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Then:
|
|
153
|
-
1. Call `document_update` with `mode: "replace"` and the complete rewritten content
|
|
154
|
-
|
|
155
|
-
## Important Notes
|
|
156
|
-
|
|
157
|
-
- **Documents are automatically saved** and accessible via the Generated panel
|
|
158
|
-
- The user can **manually edit documents** at any time - your role is to assist with generation and refinement
|
|
159
|
-
- The editor supports **drag-and-drop images**, which are converted to base64 inline
|
|
160
|
-
- **Word count is tracked** automatically and displayed to the user
|
|
161
|
-
- **Toast UI Editor** is used, which provides both Markdown and WYSIWYG editing modes
|
|
162
|
-
- Always **acknowledge the document creation** before calling `document_create`
|
|
163
|
-
|
|
164
|
-
## Error Handling
|
|
165
|
-
|
|
166
|
-
- If `document_create` fails, the user may not have the client connected. Ask them to check their connection.
|
|
167
|
-
- If the user asks to edit a specific part but you don't have the full document context, ask them to clarify which section or provide more context.
|
|
168
|
-
- If you're unsure about the content direction, ask clarifying questions before generating.
|
|
169
|
-
|
|
170
|
-
## Anti-Patterns (DO NOT DO THIS)
|
|
171
|
-
|
|
172
|
-
❌ **Don't use `app_create` for blog posts or articles**
|
|
173
|
-
- Blog posts should use `document_create`, not `app_create`
|
|
174
|
-
- Apps are for interactive content with state/data
|
|
175
|
-
|
|
176
|
-
❌ **Don't write everything at once without streaming**
|
|
177
|
-
- Use `document_update` with `mode: "append"` to stream chunks
|
|
178
|
-
- Users want to see content appear in real-time
|
|
179
|
-
|
|
180
|
-
❌ **Don't ask for explicit approval before creating the document**
|
|
181
|
-
- If the user asks for a blog post, create it immediately
|
|
182
|
-
- They can always request changes after
|
|
183
|
-
|
|
184
|
-
❌ **Don't output the full content in chat**
|
|
185
|
-
- The content goes in the document editor, not in the chat response
|
|
186
|
-
- Just acknowledge what you're doing and stream to the editor
|
|
187
|
-
|
|
188
|
-
## Success Criteria
|
|
189
|
-
|
|
190
|
-
✅ Document editor opens in the Documents tab
|
|
191
|
-
✅ Content appears in real-time as you generate it
|
|
192
|
-
✅ User can see both the editor and chat side-by-side
|
|
193
|
-
✅ Content is well-structured with proper Markdown formatting
|
|
194
|
-
✅ User can request edits via chat and you respond appropriately
|
|
195
|
-
✅ Final document is saved and accessible in Generated panel
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: elevenlabs-voice
|
|
3
|
-
description: Select and tune an ElevenLabs TTS voice — curated voice list, custom/cloned voices via API key, and tuning parameters
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🗣️","vellum":{"display-name":"ElevenLabs Voice","user-invocable":true}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Overview
|
|
9
|
-
|
|
10
|
-
ElevenLabs provides text-to-speech voices for both **in-app TTS** and **phone calls**. The shared config key `elevenlabs.voiceId` controls the voice across all channels. Use the `voice_config_update` tool to change the voice — it writes to the config file and pushes to the macOS app via SSE in one call.
|
|
11
|
-
|
|
12
|
-
## Choose a Voice
|
|
13
|
-
|
|
14
|
-
Pick a voice that matches the your identity and the user's preferences. Offer to show the full list if they want to choose themselves.
|
|
15
|
-
|
|
16
|
-
### Female voices
|
|
17
|
-
|
|
18
|
-
| Voice | Style | Voice ID |
|
|
19
|
-
| --------- | -------------------------- | ---------------------- |
|
|
20
|
-
| Rachel | Calm, warm, conversational | `21m00Tcm4TlvDq8ikWAM` |
|
|
21
|
-
| Sarah | Soft, young, approachable | `EXAVITQu4vr4xnSDxMaL` |
|
|
22
|
-
| Charlotte | Warm, Swedish-accented | `XB0fDUnXU5powFXDhCwa` |
|
|
23
|
-
| Alice | Confident, British | `Xb7hH8MSUJpSbSDYk0k2` |
|
|
24
|
-
| Matilda | Warm, friendly, young | `XrExE9yKIg1WjnnlVkGX` |
|
|
25
|
-
| Lily | Warm, British | `pFZP5JQG7iQjIQuC4Bku` |
|
|
26
|
-
|
|
27
|
-
### Male voices
|
|
28
|
-
|
|
29
|
-
| Voice | Style | Voice ID |
|
|
30
|
-
| ------- | ------------------------------- | ---------------------- |
|
|
31
|
-
| Antoni | Warm, well-rounded | `ErXwobaYiN019PkySvjV` |
|
|
32
|
-
| Josh | Deep, young, clear | `TxGEqnHWrfWFTfGW9XjX` |
|
|
33
|
-
| Arnold | Crisp, narrative | `VR6AewLTigWG4xSOukaG` |
|
|
34
|
-
| Adam | Deep, middle-aged, professional | `pNInz6obpgDQGcFmaJgB` |
|
|
35
|
-
| Bill | Trustworthy, American | `pqHfZKP75CvOlQylNhV4` |
|
|
36
|
-
| George | Warm, British, distinguished | `JBFqnCBsd6RMkjVDRZzb` |
|
|
37
|
-
| Daniel | Authoritative, British | `onwK4e9ZLuTAKqWW03F9` |
|
|
38
|
-
| Charlie | Casual, Australian | `IKne3meq5aSn9XLyUdCD` |
|
|
39
|
-
| Liam | Young, articulate | `TX3LPaxmHKxFdv7VOQHJ` |
|
|
40
|
-
|
|
41
|
-
### Setting the voice
|
|
42
|
-
|
|
43
|
-
To set the chosen voice, use `voice_config_update`. This writes to the config file (`elevenlabs.voiceId`) for phone calls **and** pushes to the macOS app via SSE (`ttsVoiceId`) for in-app TTS in one call:
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
voice_config_update setting="tts_voice_id" value="<selected-voice-id>"
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Verify it worked:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
assistant config get elevenlabs.voiceId
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Tell the user what voice you chose and why, but also offer to show all available voices so they can choose for themselves.
|
|
56
|
-
|
|
57
|
-
## ElevenLabs API Key Setup
|
|
58
|
-
|
|
59
|
-
For advanced voice selection (browsing the full library, custom/cloned voices), the user needs an ElevenLabs API key. A free tier is available at https://elevenlabs.io.
|
|
60
|
-
|
|
61
|
-
To collect the API key securely:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
credential_store action="prompt" service="elevenlabs" field="api_key"
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Advanced Voice Selection (with API key)
|
|
68
|
-
|
|
69
|
-
Users with an ElevenLabs API key can go beyond the curated list above.
|
|
70
|
-
|
|
71
|
-
### Check for an existing key
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
assistant credentials inspect elevenlabs:api_key --json
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Browse the voice library
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
curl -s "https://api.elevenlabs.io/v2/voices?category=premade&page_size=50" \
|
|
81
|
-
-H "xi-api-key: $(assistant credentials reveal elevenlabs:api_key)" | python3 -m json.tool
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Search for a specific style
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
curl -s "https://api.elevenlabs.io/v2/voices?search=warm+female&page_size=10" \
|
|
88
|
-
-H "xi-api-key: $(assistant credentials reveal elevenlabs:api_key)" | python3 -m json.tool
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Custom and cloned voices
|
|
92
|
-
|
|
93
|
-
If the user has created a custom voice or voice clone in their ElevenLabs account, they can use its voice ID directly. These voices work in both in-app TTS and Twilio ConversationRelay.
|
|
94
|
-
|
|
95
|
-
### Preview voices
|
|
96
|
-
|
|
97
|
-
Each voice in the API response includes a `preview_url` with an audio sample the user can listen to before deciding.
|
|
98
|
-
|
|
99
|
-
### Set the chosen voice
|
|
100
|
-
|
|
101
|
-
After the user picks a voice from the library:
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
voice_config_update setting="tts_voice_id" value="<selected-voice-id>"
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Voice Tuning
|
|
108
|
-
|
|
109
|
-
Fine-tune how the selected voice sounds. These parameters apply to all ElevenLabs modes (in-app TTS and phone calls):
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
# Playback speed (0.7 = slower, 1.0 = normal, 1.2 = faster)
|
|
113
|
-
assistant config set elevenlabs.speed 1.0
|
|
114
|
-
|
|
115
|
-
# Stability (0.0 = more expressive/variable, 1.0 = more consistent/monotone)
|
|
116
|
-
assistant config set elevenlabs.stability 0.5
|
|
117
|
-
|
|
118
|
-
# Similarity boost (0.0 = more creative, 1.0 = closer to original voice)
|
|
119
|
-
assistant config set elevenlabs.similarityBoost 0.75
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Lower stability makes the voice more expressive but less predictable — good for conversational calls. Higher stability is better for scripted or formal contexts.
|
|
123
|
-
|
|
124
|
-
## Voice Model Tuning
|
|
125
|
-
|
|
126
|
-
By default, the system sends a **bare** `voiceId` to Twilio ConversationRelay (no model/tuning suffix). This is the safest default across voice IDs.
|
|
127
|
-
|
|
128
|
-
To optionally force Twilio's extended voice spec, set a model ID:
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
assistant config set elevenlabs.voiceModelId "flash_v2_5"
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
When `voiceModelId` is set, the emitted voice string becomes: `voiceId-model-speed_stability_similarity`.
|
|
135
|
-
|
|
136
|
-
To clear and revert to the bare voiceId default:
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
assistant config set elevenlabs.voiceModelId ""
|
|
140
|
-
```
|