@vellumai/assistant 0.4.56 → 0.5.0
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/ARCHITECTURE.md +10 -10
- package/Dockerfile +3 -0
- package/README.md +11 -11
- package/docs/architecture/integrations.md +2 -2
- package/docs/architecture/memory.md +3 -4
- package/docs/credential-execution-service.md +13 -20
- package/node_modules/@vellumai/ces-contracts/src/error.ts +5 -4
- package/package.json +1 -1
- package/src/__tests__/actor-token-service.test.ts +7 -7
- package/src/__tests__/anthropic-provider.test.ts +172 -0
- package/src/__tests__/app-builder-tool-scripts.test.ts +15 -1
- package/src/__tests__/approval-cascade.test.ts +2 -2
- package/src/__tests__/approval-routes-http.test.ts +3 -4
- package/src/__tests__/asset-materialize-tool.test.ts +5 -5
- package/src/__tests__/asset-search-tool.test.ts +1 -1
- package/src/__tests__/assistant-attachments.test.ts +5 -5
- package/src/__tests__/assistant-events-sse-hardening.test.ts +1 -1
- package/src/__tests__/assistant-feature-flags-integration.test.ts +50 -38
- package/src/__tests__/attachments-store.test.ts +2 -2
- package/src/__tests__/avatar-e2e.test.ts +5 -3
- package/src/__tests__/browser-skill-endstate.test.ts +0 -1
- package/src/__tests__/call-routes-http.test.ts +2 -2
- package/src/__tests__/callback-handoff-copy.test.ts +1 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +158 -0
- package/src/__tests__/channel-readiness-routes.test.ts +0 -1
- package/src/__tests__/channel-readiness-service.test.ts +0 -1
- package/src/__tests__/checker.test.ts +31 -32
- package/src/__tests__/chrome-cdp.test.ts +47 -18
- package/src/__tests__/claude-code-skill-regression.test.ts +2 -2
- package/src/__tests__/config-schema-cmd.test.ts +2 -2
- package/src/__tests__/config-schema.test.ts +9 -18
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +1 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +4 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -2
- package/src/__tests__/conversation-agent-loop.test.ts +11 -4
- package/src/__tests__/conversation-attachments.test.ts +1 -1
- package/src/__tests__/conversation-confirmation-signals.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +33 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -1
- package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
- package/src/__tests__/conversation-pairing.test.ts +1 -1
- package/src/__tests__/conversation-pre-run-repair.test.ts +4 -4
- package/src/__tests__/conversation-provider-retry-repair.test.ts +4 -4
- package/src/__tests__/conversation-queue.test.ts +23 -14
- package/src/__tests__/conversation-routes-slash-commands.test.ts +3 -3
- package/src/__tests__/conversation-runtime-assembly.test.ts +204 -185
- package/src/__tests__/conversation-seed-composer.test.ts +1 -1
- package/src/__tests__/conversation-slash-queue.test.ts +4 -4
- package/src/__tests__/conversation-slash-unknown.test.ts +4 -4
- package/src/__tests__/conversation-starter-routes.test.ts +291 -0
- package/src/__tests__/conversation-wipe.test.ts +438 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -3
- package/src/__tests__/conversation-workspace-injection.test.ts +4 -5
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +4 -5
- package/src/__tests__/credential-security-e2e.test.ts +20 -0
- package/src/__tests__/credential-security-invariants.test.ts +1 -0
- package/src/__tests__/credential-vault-unit.test.ts +227 -0
- package/src/__tests__/credentials-cli.test.ts +3 -0
- package/src/__tests__/date-context.test.ts +59 -377
- package/src/__tests__/drop-capability-card-state-migration.test.ts +169 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +11 -45
- package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
- package/src/__tests__/encrypted-store.test.ts +249 -15
- package/src/__tests__/ephemeral-permissions.test.ts +4 -5
- package/src/__tests__/event-bus.test.ts +3 -3
- package/src/__tests__/file-read-tool.test.ts +40 -0
- package/src/__tests__/gateway-only-enforcement.test.ts +2 -2
- package/src/__tests__/gateway-only-guard.test.ts +1 -0
- package/src/__tests__/gemini-image-service.test.ts +4 -4
- package/src/__tests__/gemini-provider.test.ts +6 -9
- package/src/__tests__/guardian-binding-drift-heal.test.ts +128 -0
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/host-file-read-tool.test.ts +87 -0
- package/src/__tests__/host-shell-tool.test.ts +6 -6
- package/src/__tests__/http-user-message-parity.test.ts +2 -2
- package/src/__tests__/identity-intro-cache.test.ts +209 -0
- package/src/__tests__/intent-routing.test.ts +51 -99
- package/src/__tests__/invite-routes-http.test.ts +5 -0
- package/src/__tests__/list-messages-attachments.test.ts +1 -1
- package/src/__tests__/managed-proxy-context.test.ts +2 -5
- package/src/__tests__/managed-skill-lifecycle.test.ts +8 -8
- package/src/__tests__/media-generate-image.test.ts +32 -15
- package/src/__tests__/media-reuse-story.e2e.test.ts +1 -1
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +1 -1
- package/src/__tests__/memory-lifecycle-e2e.test.ts +24 -18
- package/src/__tests__/memory-recall-quality.test.ts +4 -3
- package/src/__tests__/memory-regressions.test.ts +86 -90
- package/src/__tests__/migration-cross-version-compatibility.test.ts +32 -32
- package/src/__tests__/migration-export-http.test.ts +26 -27
- package/src/__tests__/migration-import-commit-http.test.ts +165 -37
- package/src/__tests__/migration-import-preflight-http.test.ts +81 -20
- package/src/__tests__/migration-validate-http.test.ts +16 -16
- package/src/__tests__/model-intents.test.ts +2 -2
- package/src/__tests__/no-domain-routing-in-prompt-guard.test.ts +1 -1
- package/src/__tests__/non-member-access-request.test.ts +3 -3
- package/src/__tests__/notification-broadcaster.test.ts +1 -1
- package/src/__tests__/notification-decision-fallback.test.ts +2 -2
- package/src/__tests__/notification-decision-identity.test.ts +8 -9
- package/src/__tests__/notification-decision-strategy.test.ts +1 -1
- package/src/__tests__/notification-deep-link.test.ts +1 -1
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/notification-schedule-dedup.test.ts +7 -7
- package/src/__tests__/oauth-store.test.ts +1 -3
- package/src/__tests__/oauth2-gateway-transport.test.ts +6 -1
- package/src/__tests__/onboarding-template-contract.test.ts +23 -59
- package/src/__tests__/provider-error-scenarios.test.ts +154 -0
- package/src/__tests__/provider-fail-open-selection.test.ts +2 -2
- package/src/__tests__/provider-managed-proxy-integration.test.ts +8 -9
- package/src/__tests__/provider-registry-ollama.test.ts +5 -2
- package/src/__tests__/qdrant-manager.test.ts +7 -7
- package/src/__tests__/ratelimit.test.ts +0 -74
- package/src/__tests__/recording-handler.test.ts +0 -1
- package/src/__tests__/require-fresh-approval.test.ts +1 -1
- package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
- package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
- package/src/__tests__/runtime-events-sse.test.ts +1 -1
- package/src/__tests__/scheduler-recurrence.test.ts +46 -2
- package/src/__tests__/schema-transforms.test.ts +114 -54
- package/src/__tests__/secret-onetime-send.test.ts +20 -0
- package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -2
- package/src/__tests__/secret-scanner-executor.test.ts +1 -2
- package/src/__tests__/send-endpoint-busy.test.ts +63 -4
- package/src/__tests__/send-notification-tool.test.ts +2 -2
- package/src/__tests__/shell-credential-ref.test.ts +0 -1
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -2
- package/src/__tests__/skill-memory.test.ts +549 -0
- package/src/__tests__/skill-script-runner-sandbox.test.ts +1 -2
- package/src/__tests__/slack-app-setup-skill-regression.test.ts +37 -0
- package/src/__tests__/slack-channel-config.test.ts +109 -94
- package/src/__tests__/swarm-conversation-integration.test.ts +2 -2
- package/src/__tests__/swarm-recursion.test.ts +2 -2
- package/src/__tests__/swarm-tool.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +19 -66
- package/src/__tests__/telegram-config.test.ts +121 -0
- package/src/__tests__/terminal-tools.test.ts +1 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +1 -2
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
- package/src/__tests__/tool-executor-shell-integration.test.ts +1 -1
- package/src/__tests__/tool-executor.test.ts +1 -1
- package/src/__tests__/trace-emitter.test.ts +8 -1
- package/src/__tests__/trust-store.test.ts +7 -8
- package/src/__tests__/twilio-routes.test.ts +1 -18
- package/src/__tests__/user-reference.test.ts +82 -2
- package/src/__tests__/vbundle-pax-and-symlink.test.ts +196 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +1 -1
- package/src/approvals/guardian-request-resolvers.ts +3 -3
- package/src/avatar/ascii-renderer.ts +2 -2
- package/src/avatar/png-renderer.ts +2 -2
- package/src/avatar/resvg-lazy.ts +21 -0
- package/src/calls/guardian-dispatch.ts +1 -1
- package/src/calls/relay-access-wait.ts +2 -2
- package/src/calls/twilio-rest.ts +0 -248
- package/src/cli/AGENTS.md +5 -8
- package/src/cli/__tests__/notifications.test.ts +5 -5
- package/src/cli/commands/avatar.ts +64 -2
- package/src/cli/commands/conversations.ts +131 -1
- package/src/cli/commands/credentials.ts +2 -0
- package/src/cli/commands/notifications.ts +3 -3
- package/src/cli.ts +10 -0
- package/src/config/bundled-skills/acp/SKILL.md +5 -5
- package/src/config/bundled-skills/acp/TOOLS.json +6 -6
- package/src/config/bundled-skills/app-builder/SKILL.md +42 -42
- package/src/config/bundled-skills/app-builder/TOOLS.json +10 -10
- package/src/config/bundled-skills/browser/SKILL.md +15 -15
- package/src/config/bundled-skills/browser/TOOLS.json +14 -14
- package/src/config/bundled-skills/chatgpt-import/SKILL.md +2 -2
- package/src/config/bundled-skills/chatgpt-import/TOOLS.json +1 -1
- package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
- package/src/config/bundled-skills/claude-code/SKILL.md +5 -5
- package/src/config/bundled-skills/computer-use/SKILL.md +2 -2
- package/src/config/bundled-skills/computer-use/TOOLS.json +15 -15
- package/src/config/bundled-skills/contacts/SKILL.md +3 -3
- package/src/config/bundled-skills/contacts/TOOLS.json +4 -4
- package/src/config/bundled-skills/document/SKILL.md +4 -4
- package/src/config/bundled-skills/document/TOOLS.json +2 -2
- package/src/config/bundled-skills/followups/TOOLS.json +3 -3
- package/src/config/bundled-skills/gmail/SKILL.md +32 -32
- package/src/config/bundled-skills/gmail/TOOLS.json +16 -16
- package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +1 -1
- package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +1 -1
- package/src/config/bundled-skills/google-calendar/SKILL.md +1 -1
- package/src/config/bundled-skills/google-calendar/TOOLS.json +5 -5
- package/src/config/bundled-skills/google-calendar/types.ts +1 -1
- package/src/config/bundled-skills/heartbeat/SKILL.md +43 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +3 -3
- package/src/config/bundled-skills/image-studio/TOOLS.json +2 -3
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +16 -12
- package/src/config/bundled-skills/media-processing/SKILL.md +40 -40
- package/src/config/bundled-skills/media-processing/TOOLS.json +8 -8
- package/src/config/bundled-skills/media-processing/__tests__/concurrency-pool.test.ts +2 -2
- package/src/config/bundled-skills/media-processing/__tests__/preprocess.test.ts +1 -1
- package/src/config/bundled-skills/media-processing/services/gemini-map.ts +5 -5
- package/src/config/bundled-skills/media-processing/services/gemini-video.ts +2 -2
- package/src/config/bundled-skills/media-processing/services/preprocess.ts +2 -2
- package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +2 -2
- package/src/config/bundled-skills/media-processing/services/reduce.ts +3 -3
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +2 -2
- package/src/config/bundled-skills/media-processing/tools/query-media-events.ts +1 -1
- package/src/config/bundled-skills/messaging/SKILL.md +29 -25
- package/src/config/bundled-skills/messaging/TOOLS.json +11 -11
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +1 -1
- package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
- package/src/config/bundled-skills/notifications/SKILL.md +3 -3
- package/src/config/bundled-skills/notifications/TOOLS.json +2 -2
- package/src/config/bundled-skills/notifications/tools/send-notification.ts +3 -3
- package/src/config/bundled-skills/orchestration/SKILL.md +1 -1
- package/src/config/bundled-skills/orchestration/TOOLS.json +1 -1
- package/src/config/bundled-skills/phone-calls/SKILL.md +18 -14
- package/src/config/bundled-skills/phone-calls/TOOLS.json +3 -3
- package/src/config/bundled-skills/phone-calls/references/CONFIG.md +2 -2
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +2 -2
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +1 -1
- package/src/config/bundled-skills/playbooks/TOOLS.json +4 -4
- package/src/config/bundled-skills/schedule/SKILL.md +26 -26
- package/src/config/bundled-skills/schedule/TOOLS.json +5 -5
- package/src/config/bundled-skills/screen-watch/SKILL.md +3 -3
- package/src/config/bundled-skills/screen-watch/TOOLS.json +1 -1
- package/src/config/bundled-skills/sequences/SKILL.md +2 -2
- package/src/config/bundled-skills/sequences/TOOLS.json +10 -10
- package/src/config/bundled-skills/sequences/tools/sequence-analytics.ts +2 -2
- package/src/config/bundled-skills/sequences/tools/sequence-enroll.ts +2 -2
- package/src/config/bundled-skills/sequences/tools/sequence-enrollment-list.ts +1 -1
- package/src/config/bundled-skills/sequences/tools/sequence-get.ts +1 -1
- package/src/config/bundled-skills/sequences/tools/sequence-import.ts +3 -3
- package/src/config/bundled-skills/sequences/tools/sequence-list.ts +1 -1
- package/src/config/bundled-skills/sequences/tools/sequence-update.ts +1 -1
- package/src/config/bundled-skills/settings/TOOLS.json +3 -3
- package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
- package/src/config/bundled-skills/skill-management/TOOLS.json +5 -5
- package/src/config/bundled-skills/skills-catalog/SKILL.md +84 -0
- package/src/config/bundled-skills/slack/SKILL.md +2 -2
- package/src/config/bundled-skills/slack/TOOLS.json +8 -8
- package/src/config/bundled-skills/slack/tools/slack-scan-digest.ts +3 -3
- package/src/config/bundled-skills/subagent/TOOLS.json +5 -5
- package/src/config/bundled-skills/tasks/SKILL.md +1 -1
- package/src/config/bundled-skills/tasks/TOOLS.json +9 -9
- package/src/config/bundled-skills/transcribe/SKILL.md +5 -5
- package/src/config/bundled-skills/transcribe/TOOLS.json +1 -1
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +10 -10
- package/src/config/bundled-skills/watcher/SKILL.md +4 -4
- package/src/config/bundled-skills/watcher/TOOLS.json +5 -5
- package/src/config/feature-flag-registry.json +33 -17
- package/src/config/schemas/sandbox.ts +1 -1
- package/src/config/schemas/services.ts +13 -3
- package/src/config/schemas/timeouts.ts +0 -10
- package/src/contacts/contact-store.ts +63 -0
- package/src/contacts/contacts-write.ts +1 -1
- package/src/daemon/assistant-attachments.ts +2 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +2 -2
- package/src/daemon/conversation-agent-loop.ts +7 -30
- package/src/daemon/conversation-error.ts +24 -0
- package/src/daemon/conversation-memory.ts +8 -7
- package/src/daemon/conversation-runtime-assembly.ts +141 -275
- package/src/daemon/conversation-slash.ts +7 -26
- package/src/daemon/conversation-surfaces.ts +14 -0
- package/src/daemon/conversation-tool-setup.ts +9 -8
- package/src/daemon/conversation.ts +2 -0
- package/src/daemon/daemon-control.ts +1 -1
- package/src/daemon/date-context.ts +10 -83
- package/src/daemon/handlers/config-channels.ts +12 -2
- package/src/daemon/handlers/config-slack-channel.ts +7 -1
- package/src/daemon/handlers/config-telegram.ts +6 -1
- package/src/daemon/handlers/conversations.ts +2 -2
- package/src/daemon/handlers/skills.ts +4 -0
- package/src/daemon/lifecycle.ts +28 -4
- package/src/daemon/providers-setup.ts +1 -1
- package/src/daemon/server.ts +1 -5
- package/src/daemon/shutdown-handlers.ts +9 -3
- package/src/daemon/tool-side-effects.ts +40 -0
- package/src/daemon/trace-emitter.ts +26 -2
- package/src/events/domain-events.ts +1 -1
- package/src/events/tool-permission-telemetry-listener.ts +46 -0
- package/src/inbound/platform-callback-registration.ts +0 -18
- package/src/media/app-icon-generator.ts +15 -8
- package/src/media/avatar-router.ts +15 -8
- package/src/media/gemini-image-service.ts +125 -21
- package/src/memory/attachments-store.ts +3 -3
- package/src/memory/channel-verification-sessions.ts +6 -6
- package/src/memory/conversation-crud.ts +196 -1
- package/src/memory/{thread-starters-cadence.ts → conversation-starters-cadence.ts} +9 -42
- package/src/memory/conversation-title-service.ts +2 -3
- package/src/memory/db-init.ts +25 -1
- package/src/memory/invite-store.ts +4 -4
- package/src/memory/items-extractor.ts +4 -4
- package/src/memory/job-handlers/{thread-starters.ts → conversation-starters.ts} +123 -38
- package/src/memory/jobs-store.ts +3 -2
- package/src/memory/jobs-worker.ts +7 -5
- package/src/memory/lifecycle-events-store.ts +63 -0
- package/src/memory/migrations/172-rename-created-by-session-id.ts +27 -0
- package/src/memory/migrations/173-rename-source-session-id.ts +16 -0
- package/src/memory/migrations/174-rename-thread-starters-table.ts +52 -0
- package/src/memory/migrations/175-create-lifecycle-events.ts +15 -0
- package/src/memory/migrations/176-drop-capability-card-state.ts +36 -0
- package/src/memory/migrations/177-create-trace-events-table.ts +40 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/migrations/registry.ts +13 -0
- package/src/memory/retriever.test.ts +223 -96
- package/src/memory/retriever.ts +115 -138
- package/src/memory/schema/calls.ts +1 -1
- package/src/memory/schema/contacts.ts +1 -1
- package/src/memory/schema/infrastructure.ts +29 -0
- package/src/memory/schema/memory-core.ts +7 -17
- package/src/memory/schema/notifications.ts +1 -1
- package/src/memory/search/formatting.ts +23 -6
- package/src/memory/search/lexical.ts +2 -0
- package/src/memory/search/semantic.ts +2 -0
- package/src/memory/search/staleness.ts +5 -1
- package/src/memory/search/types.ts +4 -0
- package/src/memory/task-memory-cleanup.ts +96 -6
- package/src/memory/trace-event-store.ts +148 -0
- package/src/notifications/README.md +1 -1
- package/src/notifications/decision-engine.ts +45 -4
- package/src/notifications/emit-signal.ts +5 -4
- package/src/notifications/events-store.ts +4 -4
- package/src/notifications/signal.ts +1 -1
- package/src/oauth/manual-token-connection.ts +49 -25
- package/src/permissions/checker.ts +6 -5
- package/src/permissions/defaults.ts +4 -4
- package/src/prompts/__tests__/build-cli-reference-section.test.ts +9 -90
- package/src/prompts/cache-boundary.ts +8 -0
- package/src/prompts/system-prompt.ts +105 -634
- package/src/prompts/templates/BOOTSTRAP.md +172 -33
- package/src/prompts/templates/IDENTITY.md +8 -24
- package/src/prompts/templates/SOUL.md +20 -41
- package/src/prompts/templates/USER.md +3 -19
- package/src/prompts/user-reference.ts +14 -16
- package/src/providers/anthropic/client.ts +51 -19
- package/src/providers/gemini/client.ts +6 -9
- package/src/providers/managed-proxy/constants.ts +1 -7
- package/src/providers/managed-proxy/context.ts +0 -1
- package/src/providers/model-intents.ts +5 -5
- package/src/providers/openai/client.ts +10 -1
- package/src/providers/openrouter/client.ts +1 -0
- package/src/providers/ratelimit.ts +0 -35
- package/src/providers/registry.ts +3 -5
- package/src/providers/retry.ts +18 -1
- package/src/runtime/access-request-helper.ts +16 -2
- package/src/runtime/auth/route-policy.ts +7 -0
- package/src/runtime/channel-verification-service.ts +1 -1
- package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
- package/src/runtime/guardian-vellum-migration.ts +61 -1
- package/src/runtime/http-server.ts +8 -4
- package/src/runtime/migrations/vbundle-builder.ts +212 -32
- package/src/runtime/migrations/vbundle-import-analyzer.ts +74 -8
- package/src/runtime/migrations/vbundle-importer.ts +66 -1
- package/src/runtime/migrations/vbundle-validator.ts +17 -3
- package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +4 -4
- package/src/runtime/routes/attachment-routes.ts +2 -2
- package/src/runtime/routes/btw-routes.ts +93 -0
- package/src/runtime/routes/channel-verification-routes.ts +19 -2
- package/src/runtime/routes/conversation-management-routes.ts +55 -1
- package/src/runtime/routes/conversation-query-routes.ts +1 -1
- package/src/runtime/routes/conversation-routes.ts +49 -5
- package/src/runtime/routes/conversation-starter-routes.ts +207 -0
- package/src/runtime/routes/guardian-bootstrap-routes.ts +13 -9
- package/src/runtime/routes/identity-intro-cache.ts +105 -0
- package/src/runtime/routes/identity-routes.ts +51 -0
- package/src/runtime/routes/inbound-stages/escalation-intercept.ts +1 -1
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +1 -1
- package/src/runtime/routes/migration-routes.ts +25 -13
- package/src/runtime/routes/secret-routes.ts +18 -0
- package/src/runtime/routes/settings-routes.ts +9 -9
- package/src/runtime/routes/telemetry-routes.ts +53 -0
- package/src/runtime/routes/trace-event-routes.ts +62 -0
- package/src/runtime/tool-grant-request-helper.ts +1 -1
- package/src/runtime/verification-outbound-actions.ts +47 -31
- package/src/security/encrypted-store.ts +262 -78
- package/src/skills/catalog-install.ts +10 -0
- package/src/skills/managed-store.ts +2 -0
- package/src/skills/skill-memory.ts +222 -0
- package/src/subagent/manager.ts +1 -4
- package/src/telemetry/types.ts +10 -1
- package/src/telemetry/usage-telemetry-reporter.test.ts +7 -2
- package/src/telemetry/usage-telemetry-reporter.ts +53 -4
- package/src/tools/AGENTS.md +11 -11
- package/src/tools/acp/spawn.ts +1 -1
- package/src/tools/apps/executors.ts +8 -8
- package/src/tools/apps/registry.ts +1 -1
- package/src/tools/assets/materialize.ts +6 -6
- package/src/tools/assets/search.ts +10 -10
- package/src/tools/browser/__tests__/auth-cache.test.ts +2 -2
- package/src/tools/browser/__tests__/auth-detector.test.ts +4 -4
- package/src/tools/browser/auth-detector.ts +6 -6
- package/src/tools/browser/browser-execution.ts +13 -13
- package/src/tools/browser/browser-manager.ts +3 -3
- package/src/tools/browser/chrome-cdp.ts +5 -5
- package/src/tools/browser/jit-auth.ts +2 -2
- package/src/tools/browser/network-recorder.test.ts +2 -2
- package/src/tools/browser/network-recorder.ts +3 -3
- package/src/tools/browser/runtime-check.ts +3 -3
- package/src/tools/claude-code/claude-code.ts +2 -2
- package/src/tools/computer-use/definitions.ts +18 -18
- package/src/tools/credential-execution/make-authenticated-request.ts +4 -4
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -3
- package/src/tools/credential-execution/run-authenticated-command.ts +4 -4
- package/src/tools/credentials/broker-types.ts +5 -5
- package/src/tools/credentials/broker.ts +15 -15
- package/src/tools/credentials/metadata-store.ts +2 -2
- package/src/tools/credentials/resolve.ts +1 -1
- package/src/tools/credentials/selection.ts +1 -1
- package/src/tools/credentials/tool-policy.ts +1 -1
- package/src/tools/credentials/vault.ts +115 -25
- package/src/tools/execution-target.ts +2 -2
- package/src/tools/executor.ts +7 -7
- package/src/tools/filesystem/edit.ts +2 -2
- package/src/tools/filesystem/read.ts +15 -4
- package/src/tools/filesystem/write.ts +1 -1
- package/src/tools/host-filesystem/edit.ts +2 -1
- package/src/tools/host-filesystem/read.ts +18 -1
- package/src/tools/host-filesystem/write.ts +1 -1
- package/src/tools/host-terminal/host-shell.ts +9 -8
- package/src/tools/mcp/mcp-tool-factory.ts +7 -6
- package/src/tools/memory/definitions.ts +6 -5
- package/src/tools/memory/handlers.test.ts +1 -1
- package/src/tools/network/__tests__/web-search.test.ts +3 -3
- package/src/tools/network/domain-normalize.ts +2 -2
- package/src/tools/network/script-proxy/session-manager.ts +10 -10
- package/src/tools/network/web-fetch.ts +1 -1
- package/src/tools/network/web-search.ts +3 -3
- package/src/tools/permission-checker.ts +8 -8
- package/src/tools/registry.ts +7 -7
- package/src/tools/schedule/list.ts +2 -2
- package/src/tools/schema-transforms.ts +31 -21
- package/src/tools/secret-detection-handler.ts +1 -1
- package/src/tools/sensitive-output-placeholders.ts +1 -1
- package/src/tools/shared/filesystem/edit-engine.ts +1 -1
- package/src/tools/shared/filesystem/file-ops-service.ts +3 -3
- package/src/tools/shared/filesystem/image-read.ts +25 -5
- package/src/tools/shared/filesystem/path-policy.ts +2 -2
- package/src/tools/shared/shell-output.ts +1 -1
- package/src/tools/side-effects.ts +1 -1
- package/src/tools/skills/execute.ts +1 -1
- package/src/tools/skills/load.ts +3 -3
- package/src/tools/skills/sandbox-runner.ts +3 -3
- package/src/tools/subagent/read.ts +1 -1
- package/src/tools/subagent/spawn.ts +2 -2
- package/src/tools/swarm/delegate.ts +3 -3
- package/src/tools/system/request-permission.ts +5 -4
- package/src/tools/terminal/backends/native.ts +4 -4
- package/src/tools/terminal/parser.ts +6 -6
- package/src/tools/terminal/sandbox-diagnostics.ts +1 -1
- package/src/tools/terminal/shell.ts +16 -16
- package/src/tools/tool-approval-handler.ts +21 -12
- package/src/tools/tool-manifest.ts +4 -4
- package/src/tools/types.ts +3 -3
- package/src/tools/ui-surface/definitions.ts +9 -37
- package/src/tools/watcher/list.ts +1 -1
- package/src/util/logger.ts +7 -2
- package/src/util/pricing.ts +4 -0
- package/src/util/retry.ts +29 -1
- package/src/workspace/migrations/007-web-search-provider-rename.ts +37 -0
- package/src/workspace/migrations/registry.ts +2 -0
- package/src/__tests__/cli-help-reference-sync.test.ts +0 -26
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -190
- package/src/cli/reference.ts +0 -38
- package/src/memory/job-handlers/capability-cards.ts +0 -420
- package/src/runtime/routes/thread-starter-routes.ts +0 -294
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: schedule
|
|
3
|
-
description: Recurring and one-shot scheduling
|
|
3
|
+
description: Recurring and one-shot scheduling - cron, RRULE, or single fire-at time
|
|
4
4
|
compatibility: "Designed for Vellum personal assistants"
|
|
5
5
|
metadata:
|
|
6
6
|
emoji: "📅"
|
|
@@ -26,10 +26,10 @@ Standard 5-field cron syntax: `minute hour day-of-month month day-of-week`
|
|
|
26
26
|
|
|
27
27
|
Examples:
|
|
28
28
|
|
|
29
|
-
- `0 9 * * 1-5`
|
|
30
|
-
- `30 8 * * *`
|
|
31
|
-
- `0 */2 * * *`
|
|
32
|
-
- `0 9 1 * *`
|
|
29
|
+
- `0 9 * * 1-5` - weekdays at 9:00 AM
|
|
30
|
+
- `30 8 * * *` - every day at 8:30 AM
|
|
31
|
+
- `0 */2 * * *` - every 2 hours
|
|
32
|
+
- `0 9 1 * *` - first of every month at 9:00 AM
|
|
33
33
|
|
|
34
34
|
### RRULE (RFC 5545)
|
|
35
35
|
|
|
@@ -49,25 +49,25 @@ Exclusions (EXDATE, EXRULE) always take precedence over inclusions (RRULE, RDATE
|
|
|
49
49
|
|
|
50
50
|
#### Basic examples
|
|
51
51
|
|
|
52
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=DAILY`
|
|
53
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR`
|
|
54
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=MONTHLY;BYMONTHDAY=1,15`
|
|
52
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=DAILY` - every day at 9:00 AM UTC
|
|
53
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR` - Mon/Wed/Fri at 9:00 AM UTC
|
|
54
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=MONTHLY;BYMONTHDAY=1,15` - 1st and 15th of each month
|
|
55
55
|
|
|
56
56
|
#### Bounded recurrence
|
|
57
57
|
|
|
58
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=DAILY;COUNT=30`
|
|
59
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO;UNTIL=20250331T235959Z`
|
|
58
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=DAILY;COUNT=30` - daily for 30 occurrences then stop
|
|
59
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO;UNTIL=20250331T235959Z` - every Monday until end of March
|
|
60
60
|
|
|
61
61
|
#### Set construct examples
|
|
62
62
|
|
|
63
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR\nEXDATE:20250120T090000Z`
|
|
64
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=DAILY\nEXRULE:FREQ=WEEKLY;BYDAY=SA,SU`
|
|
65
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=MONTHLY;BYMONTHDAY=1\nRDATE:20250704T090000Z`
|
|
66
|
-
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=TU\nRRULE:FREQ=WEEKLY;BYDAY=TH`
|
|
63
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR\nEXDATE:20250120T090000Z` - Mon/Wed/Fri except Jan 20
|
|
64
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=DAILY\nEXRULE:FREQ=WEEKLY;BYDAY=SA,SU` - every weekday (daily minus weekends)
|
|
65
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=MONTHLY;BYMONTHDAY=1\nRDATE:20250704T090000Z` - 1st of each month plus July 4th
|
|
66
|
+
- `DTSTART:20250101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=TU\nRRULE:FREQ=WEEKLY;BYDAY=TH` - union of Tuesdays and Thursdays
|
|
67
67
|
|
|
68
68
|
## One-Shot Schedules (Reminders)
|
|
69
69
|
|
|
70
|
-
To create a one-time schedule that fires once and is done, pass `fire_at` (an ISO 8601 timestamp) instead of an `expression`. This replaces the old reminder concept
|
|
70
|
+
To create a one-time schedule that fires once and is done, pass `fire_at` (an ISO 8601 timestamp) instead of an `expression`. This replaces the old reminder concept - "remind me at 3pm" becomes a one-shot schedule with `fire_at`.
|
|
71
71
|
|
|
72
72
|
One-shot schedules:
|
|
73
73
|
- Fire once at the specified time, then are marked as `fired` and disabled.
|
|
@@ -82,8 +82,8 @@ Examples:
|
|
|
82
82
|
|
|
83
83
|
The `mode` parameter controls what happens when a schedule fires:
|
|
84
84
|
|
|
85
|
-
- **execute** (default)
|
|
86
|
-
- **notify**
|
|
85
|
+
- **execute** (default) - sends the schedule's message to a background assistant conversation for autonomous handling. The assistant processes the message as if the user sent it.
|
|
86
|
+
- **notify** - sends a notification to the user via the notification pipeline. No assistant processing occurs.
|
|
87
87
|
|
|
88
88
|
Use `notify` for simple reminders ("remind me to take medicine at 9am") and `execute` for tasks that need assistant action ("check my calendar at 8am and send me a digest").
|
|
89
89
|
|
|
@@ -91,9 +91,9 @@ Use `notify` for simple reminders ("remind me to take medicine at 9am") and `exe
|
|
|
91
91
|
|
|
92
92
|
Control how notify-mode schedules are delivered at trigger time with `routing_intent`:
|
|
93
93
|
|
|
94
|
-
- **single_channel**
|
|
95
|
-
- **multi_channel**
|
|
96
|
-
- **all_channels** (default)
|
|
94
|
+
- **single_channel** - deliver to one best channel
|
|
95
|
+
- **multi_channel** - deliver to a subset of channels
|
|
96
|
+
- **all_channels** (default) - deliver to every available channel
|
|
97
97
|
|
|
98
98
|
Optionally pass `routing_hints` (a JSON object) to influence routing decisions (e.g. preferred channels, exclusions).
|
|
99
99
|
|
|
@@ -101,7 +101,7 @@ Optionally pass `routing_hints` (a JSON object) to influence routing decisions (
|
|
|
101
101
|
|
|
102
102
|
- **Default to `all_channels`** for most notifications. Users usually want to be notified wherever they are.
|
|
103
103
|
- **Use `single_channel`** only when the user explicitly specifies a single channel (e.g. "remind me on Telegram").
|
|
104
|
-
- **Check `user_message_channel
|
|
104
|
+
- **Check `user_message_channel` (or `channel` when all channels are the same)** from the turn context. If the user is currently active on a specific channel, include it as a routing hint:
|
|
105
105
|
```
|
|
106
106
|
routing_hints: { preferred_channels: ["vellum"] }
|
|
107
107
|
routing_intent: "all_channels"
|
|
@@ -129,20 +129,20 @@ Phrases like "at the 45 minute mark", "at the top of the hour", "at noon", or "2
|
|
|
129
129
|
|
|
130
130
|
**Resolution rules (in priority order):**
|
|
131
131
|
|
|
132
|
-
1. **Conversation-anchored expressions**
|
|
132
|
+
1. **Conversation-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") as `start_time + offset`.
|
|
133
133
|
|
|
134
|
-
2. **Clock-position expressions**
|
|
134
|
+
2. **Clock-position expressions** - when no start time is in context, map directly to a wall-clock time:
|
|
135
135
|
- "top of the hour" → next :00
|
|
136
136
|
- "the X minute mark" → current hour's :XX; if already past, advance one hour
|
|
137
137
|
- "noon" / "midnight" → 12:00 PM or 12:00 AM today; if past, tomorrow
|
|
138
138
|
|
|
139
|
-
3. **Ask only if truly ambiguous**
|
|
139
|
+
3. **Ask only if truly ambiguous** - if neither rule resolves, ask for clarification. Never silently default to "from now."
|
|
140
140
|
- Timezones default to the system timezone if omitted. Use IANA timezone identifiers (e.g. "America/Los_Angeles").
|
|
141
141
|
- Prefer RRULE for complex patterns that cron cannot express (e.g. "every other Tuesday", "last weekday of the month").
|
|
142
142
|
|
|
143
143
|
## Capability Preflight
|
|
144
144
|
|
|
145
|
-
Before confirming a schedule to the user, you MUST verify that you have the capabilities needed to execute the scheduled message autonomously. Scheduled messages run without user interaction
|
|
145
|
+
Before confirming a schedule to the user, you MUST verify that you have the capabilities needed to execute the scheduled message autonomously. Scheduled messages run without user interaction - if a required integration is missing, the schedule will fail silently.
|
|
146
146
|
|
|
147
147
|
When `schedule_create` returns, it includes an integration status summary. Cross-reference the scheduled task's requirements against the available integrations:
|
|
148
148
|
|
|
@@ -153,7 +153,7 @@ When `schedule_create` returns, it includes an integration status summary. Cross
|
|
|
153
153
|
|
|
154
154
|
If any required capability is missing:
|
|
155
155
|
|
|
156
|
-
1. **Do NOT tell the user the schedule is ready**
|
|
156
|
+
1. **Do NOT tell the user the schedule is ready** - instead, explain what's missing and why the schedule won't work yet
|
|
157
157
|
2. Offer to help set up the missing integration first
|
|
158
158
|
3. The schedule is still created (so timing is preserved), but make it clear it won't execute successfully until dependencies are resolved
|
|
159
159
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "schedule_create",
|
|
6
|
-
"description": "Create a scheduled automation. For recurring: provide expression (cron/RRULE). For one-time: provide fire_at (ISO 8601 timestamp). ONLY use this when the user explicitly wants something to run on a schedule (e.g. \"every day at 9am\", \"remind me tomorrow at 3pm\", \"weekly on Mondays\"). Do NOT use this for \"add to my tasks\" or \"add to my queue\"
|
|
6
|
+
"description": "Create a scheduled automation. For recurring: provide expression (cron/RRULE). For one-time: provide fire_at (ISO 8601 timestamp). ONLY use this when the user explicitly wants something to run on a schedule (e.g. \"every day at 9am\", \"remind me tomorrow at 3pm\", \"weekly on Mondays\"). Do NOT use this for \"add to my tasks\" or \"add to my queue\" - use task_list_add for those requests instead.",
|
|
7
7
|
"category": "schedule",
|
|
8
8
|
"risk": "medium",
|
|
9
9
|
"input_schema": {
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"type": "object",
|
|
53
53
|
"description": "Additional routing metadata (e.g. preferred channel identifiers)"
|
|
54
54
|
},
|
|
55
|
-
"
|
|
55
|
+
"activity": {
|
|
56
56
|
"type": "string",
|
|
57
57
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
58
58
|
}
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"type": "string",
|
|
79
79
|
"description": "If provided, show detailed info and recent runs for this specific job."
|
|
80
80
|
},
|
|
81
|
-
"
|
|
81
|
+
"activity": {
|
|
82
82
|
"type": "string",
|
|
83
83
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
84
84
|
}
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
"type": "object",
|
|
140
140
|
"description": "Additional routing metadata (e.g. preferred channel identifiers)"
|
|
141
141
|
},
|
|
142
|
-
"
|
|
142
|
+
"activity": {
|
|
143
143
|
"type": "string",
|
|
144
144
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
145
145
|
}
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"type": "string",
|
|
162
162
|
"description": "The ID of the schedule to delete"
|
|
163
163
|
},
|
|
164
|
-
"
|
|
164
|
+
"activity": {
|
|
165
165
|
"type": "string",
|
|
166
166
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
167
167
|
}
|
|
@@ -16,9 +16,9 @@ Use `start_screen_watch` when the user wants you to monitor what's happening on
|
|
|
16
16
|
|
|
17
17
|
## Parameters
|
|
18
18
|
|
|
19
|
-
- **focus_area** (required)
|
|
20
|
-
- **duration_minutes**
|
|
21
|
-
- **interval_seconds**
|
|
19
|
+
- **focus_area** (required) - What to focus on observing
|
|
20
|
+
- **duration_minutes** - How long to watch in minutes (1-15, default 5)
|
|
21
|
+
- **interval_seconds** - Seconds between screen captures (5-30, default 10)
|
|
22
22
|
|
|
23
23
|
## Constraints
|
|
24
24
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"type": "string",
|
|
22
22
|
"description": "What to focus on observing"
|
|
23
23
|
},
|
|
24
|
-
"
|
|
24
|
+
"activity": {
|
|
25
25
|
"type": "string",
|
|
26
26
|
"description": "Brief non-technical explanation of what you are watching and why, shown to the user as a status update. Use simple language a non-technical person would understand."
|
|
27
27
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sequences
|
|
3
|
-
description: Create and manage automated email drip sequences
|
|
3
|
+
description: Create and manage automated email drip sequences
|
|
4
4
|
compatibility: "Designed for Vellum personal assistants"
|
|
5
5
|
metadata:
|
|
6
6
|
emoji: "📧"
|
|
@@ -34,7 +34,7 @@ You are an email sequence assistant. Use the sequence tools to help users create
|
|
|
34
34
|
|
|
35
35
|
### Analytics
|
|
36
36
|
|
|
37
|
-
- **Dashboard**: View aggregate metrics across all sequences
|
|
37
|
+
- **Dashboard**: View aggregate metrics across all sequences - total sends, reply rates, completion rates
|
|
38
38
|
- **Step Funnel**: Drill into a specific sequence to see per-step send counts, reach, and drop-off
|
|
39
39
|
|
|
40
40
|
## Usage Notes
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"type": "boolean",
|
|
56
56
|
"description": "Whether to stop the sequence when the contact replies (default true)"
|
|
57
57
|
},
|
|
58
|
-
"
|
|
58
|
+
"activity": {
|
|
59
59
|
"type": "string",
|
|
60
60
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
61
61
|
}
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"enum": ["active", "paused", "archived"],
|
|
79
79
|
"description": "Filter by sequence status"
|
|
80
80
|
},
|
|
81
|
-
"
|
|
81
|
+
"activity": {
|
|
82
82
|
"type": "string",
|
|
83
83
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
84
84
|
}
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"type": "string",
|
|
100
100
|
"description": "Sequence ID"
|
|
101
101
|
},
|
|
102
|
-
"
|
|
102
|
+
"activity": {
|
|
103
103
|
"type": "string",
|
|
104
104
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
105
105
|
}
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"name": "sequence_update",
|
|
114
|
-
"description": "Update a sequence or manage an enrollment's lifecycle. Two modes: (1) Sequence-level
|
|
114
|
+
"description": "Update a sequence or manage an enrollment's lifecycle. Two modes: (1) Sequence-level - pass `id` to change name, description, status (active/paused/archived), steps, or exit-on-reply. (2) Enrollment-level - pass `enrollment_id` + `enrollment_action` to pause, resume, or cancel an enrollment. Exactly one mode must be used per call.",
|
|
115
115
|
"category": "sequences",
|
|
116
116
|
"risk": "medium",
|
|
117
117
|
"input_schema": {
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
},
|
|
178
178
|
"description": "Replacement steps (replaces all existing steps)"
|
|
179
179
|
},
|
|
180
|
-
"
|
|
180
|
+
"activity": {
|
|
181
181
|
"type": "string",
|
|
182
182
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
183
183
|
}
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"type": "string",
|
|
203
203
|
"description": "Sequence ID to delete"
|
|
204
204
|
},
|
|
205
|
-
"
|
|
205
|
+
"activity": {
|
|
206
206
|
"type": "string",
|
|
207
207
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
208
208
|
}
|
|
@@ -242,7 +242,7 @@
|
|
|
242
242
|
"type": "object",
|
|
243
243
|
"description": "Optional context object with personalization variables for the enrolled contacts"
|
|
244
244
|
},
|
|
245
|
-
"
|
|
245
|
+
"activity": {
|
|
246
246
|
"type": "string",
|
|
247
247
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
248
248
|
}
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
],
|
|
277
277
|
"description": "Filter by enrollment status"
|
|
278
278
|
},
|
|
279
|
-
"
|
|
279
|
+
"activity": {
|
|
280
280
|
"type": "string",
|
|
281
281
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
282
282
|
}
|
|
@@ -305,7 +305,7 @@
|
|
|
305
305
|
"type": "boolean",
|
|
306
306
|
"description": "Set to true to enroll contacts (default false = preview mode)"
|
|
307
307
|
},
|
|
308
|
-
"
|
|
308
|
+
"activity": {
|
|
309
309
|
"type": "string",
|
|
310
310
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
311
311
|
}
|
|
@@ -327,7 +327,7 @@
|
|
|
327
327
|
"type": "string",
|
|
328
328
|
"description": "Optional sequence ID for detailed step funnel view"
|
|
329
329
|
},
|
|
330
|
-
"
|
|
330
|
+
"activity": {
|
|
331
331
|
"type": "string",
|
|
332
332
|
"description": "Brief non-technical explanation of why this tool is being called"
|
|
333
333
|
}
|
|
@@ -72,7 +72,7 @@ export async function run(
|
|
|
72
72
|
),
|
|
73
73
|
);
|
|
74
74
|
lines.push(
|
|
75
|
-
` Step ${s.stepIndex + 1}: "${s.subject}"
|
|
75
|
+
` Step ${s.stepIndex + 1}: "${s.subject}" - ${s.sends} sends, ${
|
|
76
76
|
s.enrollmentsReached
|
|
77
77
|
} reached, ${(s.dropOff * 100).toFixed(0)}% drop-off`,
|
|
78
78
|
);
|
|
@@ -89,7 +89,7 @@ export async function run(
|
|
|
89
89
|
const time = new Date(e.createdAt).toISOString();
|
|
90
90
|
const step = e.stepIndex !== undefined ? ` step ${e.stepIndex + 1}` : "";
|
|
91
91
|
lines.push(
|
|
92
|
-
` [${time}] ${e.eventType}${step}
|
|
92
|
+
` [${time}] ${e.eventType}${step} - enrollment ${e.enrollmentId.slice(
|
|
93
93
|
0,
|
|
94
94
|
8,
|
|
95
95
|
)}...`,
|
|
@@ -39,11 +39,11 @@ export async function run(
|
|
|
39
39
|
contactEmail: email,
|
|
40
40
|
context,
|
|
41
41
|
});
|
|
42
|
-
results.push(` ${email}
|
|
42
|
+
results.push(` ${email} - enrolled (ID: ${enrollment.id})`);
|
|
43
43
|
successCount++;
|
|
44
44
|
} catch (e) {
|
|
45
45
|
results.push(
|
|
46
|
-
` ${email}
|
|
46
|
+
` ${email} - failed: ${e instanceof Error ? e.message : String(e)}`,
|
|
47
47
|
);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -21,7 +21,7 @@ export async function run(
|
|
|
21
21
|
const nextAt = e.nextStepAt
|
|
22
22
|
? new Date(e.nextStepAt).toISOString()
|
|
23
23
|
: "n/a";
|
|
24
|
-
return `- ${e.contactEmail} (ID: ${e.id})
|
|
24
|
+
return `- ${e.contactEmail} (ID: ${e.id}) - step ${e.currentStep}, status: ${e.status}, next: ${nextAt}`;
|
|
25
25
|
});
|
|
26
26
|
return ok(`${enrollments.length} enrollment(s):\n${lines.join("\n")}`);
|
|
27
27
|
} catch (e) {
|
|
@@ -41,7 +41,7 @@ export async function run(
|
|
|
41
41
|
`Steps (${seq.steps.length}):`,
|
|
42
42
|
...seq.steps.map(
|
|
43
43
|
(s) =>
|
|
44
|
-
` ${s.index + 1}. "${s.subjectTemplate}"
|
|
44
|
+
` ${s.index + 1}. "${s.subjectTemplate}" - delay: ${
|
|
45
45
|
s.delaySeconds
|
|
46
46
|
}s${s.requireApproval ? " [approval required]" : ""}`,
|
|
47
47
|
),
|
|
@@ -31,7 +31,7 @@ export async function run(
|
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
// Preview mode (default)
|
|
34
|
+
// Preview mode (default) - show what would happen
|
|
35
35
|
if (!autoEnroll) {
|
|
36
36
|
const lines = [
|
|
37
37
|
`Parsed ${parsed.contacts.length} valid contact(s) from file.`,
|
|
@@ -72,7 +72,7 @@ export async function run(
|
|
|
72
72
|
lines.push("");
|
|
73
73
|
lines.push("Skipped:");
|
|
74
74
|
for (const s of result.skipped.slice(0, 10)) {
|
|
75
|
-
lines.push(` ${s.email}
|
|
75
|
+
lines.push(` ${s.email} - ${s.reason}`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -80,7 +80,7 @@ export async function run(
|
|
|
80
80
|
lines.push("");
|
|
81
81
|
lines.push("Failed:");
|
|
82
82
|
for (const f of result.failed.slice(0, 10)) {
|
|
83
|
-
lines.push(` ${f.email}
|
|
83
|
+
lines.push(` ${f.email} - ${f.reason}`);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -21,7 +21,7 @@ export async function run(
|
|
|
21
21
|
|
|
22
22
|
const lines = seqs.map((s) => {
|
|
23
23
|
const enrollments = countActiveEnrollments(s.id);
|
|
24
|
-
return `- ${s.name} (ID: ${s.id})
|
|
24
|
+
return `- ${s.name} (ID: ${s.id}) - ${s.status}, ${s.steps.length} steps, ${enrollments} active enrollments, channel: ${s.channel}`;
|
|
25
25
|
});
|
|
26
26
|
return ok(`${seqs.length} sequence(s):\n${lines.join("\n")}`);
|
|
27
27
|
} catch (e) {
|
|
@@ -58,7 +58,7 @@ export async function run(
|
|
|
58
58
|
: null;
|
|
59
59
|
if (seq && seq.status !== "active")
|
|
60
60
|
return err(
|
|
61
|
-
`Cannot resume enrollment
|
|
61
|
+
`Cannot resume enrollment - parent sequence "${seq.name}" is ${seq.status}. Resume the sequence first.`,
|
|
62
62
|
);
|
|
63
63
|
resumeEnrollment(enrollmentId);
|
|
64
64
|
return ok(`Enrollment ${enrollmentId} resumed.`);
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"value": {
|
|
18
18
|
"description": "The new value for the setting (type depends on setting)"
|
|
19
19
|
},
|
|
20
|
-
"
|
|
20
|
+
"activity": {
|
|
21
21
|
"type": "string",
|
|
22
22
|
"description": "Brief non-technical explanation of what you are changing and why, shown to the user as a status update. Use simple language a non-technical person would understand."
|
|
23
23
|
}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"enum": ["microphone", "speech_recognition"],
|
|
40
40
|
"description": "The System Settings pane to open"
|
|
41
41
|
},
|
|
42
|
-
"
|
|
42
|
+
"activity": {
|
|
43
43
|
"type": "string",
|
|
44
44
|
"description": "Brief non-technical explanation of what you are opening and why, shown to the user as a status update. Use simple language a non-technical person would understand."
|
|
45
45
|
}
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
],
|
|
71
71
|
"description": "The settings tab to navigate to"
|
|
72
72
|
},
|
|
73
|
-
"
|
|
73
|
+
"activity": {
|
|
74
74
|
"type": "string",
|
|
75
75
|
"description": "Brief non-technical explanation of what you are navigating to and why, shown to the user as a status update. Use simple language a non-technical person would understand."
|
|
76
76
|
}
|
|
@@ -36,7 +36,7 @@ export async function run(
|
|
|
36
36
|
|
|
37
37
|
const meta = PANES[pane as PaneName];
|
|
38
38
|
|
|
39
|
-
// Send open_url to the client
|
|
39
|
+
// Send open_url to the client - the x-apple.systempreferences: scheme
|
|
40
40
|
// opens System Settings directly without a browser confirmation dialog.
|
|
41
41
|
if (context.sendToClient) {
|
|
42
42
|
context.sendToClient({
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "scaffold_managed_skill",
|
|
6
|
-
"description": "Create or update a managed skill in ~/.vellum/workspace/skills. The skill becomes available for skill_load immediately.",
|
|
6
|
+
"description": "Create or update a managed skill in ~/.vellum/workspace/skills. The skill becomes available for skill_load immediately. Never persist a skill without explicit user consent. Before persisting, test the snippet: write to a temp file with bash and run with `bun run /tmp/vellum-eval/snippet.ts`. Iterate up to 3 attempts, then ask the user. Clean up temp files after. Do not use file_write for temp files outside the working directory. After a skill is written, the next turn may run in a recreated session due to file-watcher eviction - continue normally.",
|
|
7
7
|
"category": "skills",
|
|
8
8
|
"risk": "high",
|
|
9
9
|
"input_schema": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"body_markdown": {
|
|
25
25
|
"type": "string",
|
|
26
|
-
"description": "The full skill body in markdown
|
|
26
|
+
"description": "The full skill body in markdown - instructions, prompts, templates, etc."
|
|
27
27
|
},
|
|
28
28
|
"emoji": {
|
|
29
29
|
"type": "string",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"items": { "type": "string" },
|
|
43
43
|
"description": "Optional list of child skill IDs that this skill includes (metadata only, no auto-activation)."
|
|
44
44
|
},
|
|
45
|
-
"
|
|
45
|
+
"activity": {
|
|
46
46
|
"type": "string",
|
|
47
47
|
"description": "Brief non-technical explanation of what you are creating and why, shown to the user as a status update. Use simple language a non-technical person would understand."
|
|
48
48
|
}
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
"name": "delete_managed_skill",
|
|
57
|
-
"description": "Delete a managed skill from ~/.vellum/workspace/skills and remove it from the SKILLS.md index.",
|
|
57
|
+
"description": "Delete a managed skill from ~/.vellum/workspace/skills and remove it from the SKILLS.md index. Never delete a skill without explicit user confirmation. After deletion, the next turn may run in a recreated session due to file-watcher eviction - continue normally.",
|
|
58
58
|
"category": "skills",
|
|
59
59
|
"risk": "high",
|
|
60
60
|
"input_schema": {
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"type": "boolean",
|
|
69
69
|
"description": "Whether to remove the skill from SKILLS.md index (default: true)."
|
|
70
70
|
},
|
|
71
|
-
"
|
|
71
|
+
"activity": {
|
|
72
72
|
"type": "string",
|
|
73
73
|
"description": "Brief non-technical explanation of what you are deleting and why, shown to the user as a status update. Use simple language a non-technical person would understand."
|
|
74
74
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skills-catalog
|
|
3
|
+
description: Discover bundled skills and search/install community skills from the skills.sh registry
|
|
4
|
+
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
+
metadata:
|
|
6
|
+
emoji: "\U0001F9E9"
|
|
7
|
+
vellum:
|
|
8
|
+
display-name: "Skills Catalog"
|
|
9
|
+
activation-hints:
|
|
10
|
+
- "what can you do"
|
|
11
|
+
- "find a skill"
|
|
12
|
+
- "install a skill"
|
|
13
|
+
- "community skills"
|
|
14
|
+
- "skills.sh"
|
|
15
|
+
- "search for skills"
|
|
16
|
+
avoid-when:
|
|
17
|
+
- "User is asking about a specific bundled skill already visible in the catalog"
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
You can help the user discover what skills are available and find community skills to extend the assistant's capabilities.
|
|
21
|
+
|
|
22
|
+
## Bundled skills (first-party)
|
|
23
|
+
|
|
24
|
+
First-party skills are **bundled** with the assistant - they are compiled in and always available. They do not need to be installed or downloaded. To activate a bundled skill, use the `skill_load` tool:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
skill_load skill=<skill-id>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The skill catalog shown in the system prompt lists all bundled skills with their IDs. When a user asks about capabilities, refer to this list to find relevant bundled skills and load them as needed.
|
|
31
|
+
|
|
32
|
+
## Community skills (skills.sh)
|
|
33
|
+
|
|
34
|
+
Community skills are published on the skills.sh registry and can be searched, inspected, and installed on demand using the `assistant skills` CLI.
|
|
35
|
+
|
|
36
|
+
### Searching for community skills
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
assistant skills search "<query>"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Returns matching skills with their slug, source, install counts, and security audit badges. Use this when the user asks for a capability not covered by bundled skills.
|
|
43
|
+
|
|
44
|
+
### Installing a community skill
|
|
45
|
+
|
|
46
|
+
**Trust model - check the source owner before installing:**
|
|
47
|
+
|
|
48
|
+
- **Vellum-owned** (`vellum-ai/*`): First-party skills published by the Vellum team. Install these directly without prompting - they are vetted and trusted.
|
|
49
|
+
- **Third-party** (any other owner): Ask the user for permission first. Present the skill name, source, audit results, and install count. Say something like: "I found a community skill that could help, but it's published by a third party - we haven't vetted it. Want to install it anyway?"
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
assistant skills add <owner>/<repo>@<skill-name>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
For example:
|
|
56
|
+
```bash
|
|
57
|
+
assistant skills add vercel-labs/skills@find-skills
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Once installed, the skill appears in the workspace skills directory and can be loaded with `skill_load` like any other skill.
|
|
61
|
+
|
|
62
|
+
## Typical flow
|
|
63
|
+
|
|
64
|
+
1. **User asks about capabilities** - "Can you order food?" or "What can you do?"
|
|
65
|
+
- Check the bundled skills list in the system prompt
|
|
66
|
+
- Present relevant skills to the user
|
|
67
|
+
- Load any that match with `skill_load`
|
|
68
|
+
|
|
69
|
+
2. **User wants a capability not covered by bundled skills** - "Can you do X?"
|
|
70
|
+
- Search with `assistant skills search "<query>"`
|
|
71
|
+
- Present matching results with descriptions, install counts, and audit badges
|
|
72
|
+
- Check the source owner to determine trust level (see trust model above)
|
|
73
|
+
- Install with `assistant skills add <owner>/<repo>@<skill-name>`
|
|
74
|
+
- Load it with `skill_load`
|
|
75
|
+
|
|
76
|
+
3. **Skill has dependencies** - if `includes` lists other skill IDs, load those first with `skill_load`
|
|
77
|
+
|
|
78
|
+
## Notes
|
|
79
|
+
|
|
80
|
+
- Bundled skills are always available and do not need installation
|
|
81
|
+
- Community skills are installed to the workspace skills directory
|
|
82
|
+
- After installing a community skill, it is auto-enabled and immediately loadable
|
|
83
|
+
- Skills can be enabled or disabled via feature flags without uninstalling them
|
|
84
|
+
- Never install third-party community skills without explicit user confirmation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slack
|
|
3
|
-
description: Scan channels, summarize threads, and manage Slack
|
|
3
|
+
description: Scan channels, summarize threads, and manage Slack
|
|
4
4
|
compatibility: "Designed for Vellum personal assistants"
|
|
5
5
|
metadata:
|
|
6
6
|
emoji: "💬"
|
|
@@ -68,7 +68,7 @@ When responding to messages from Slack channels, replies are automatically threa
|
|
|
68
68
|
When you need to **send** content to Slack proactively (e.g. a scheduled digest, a scan summary, or a report):
|
|
69
69
|
|
|
70
70
|
- Use `messaging_send` with `platform: "slack"` and the target `conversation_id` (Slack channel or DM ID). This posts directly via `chat.postMessage` and preserves the full message content.
|
|
71
|
-
- Do **NOT** use `send_notification` for rich content like digests
|
|
71
|
+
- Do **NOT** use `send_notification` for rich content like digests - the notification router's decision engine rewrites content into short alerts, stripping the actual digest.
|
|
72
72
|
- `send_notification` is appropriate for short alerts and status updates where you want the router to pick the best channel. `messaging_send` is appropriate when you have specific content to deliver to a specific Slack destination.
|
|
73
73
|
- For scheduled tasks (cron/RRULE), always end with a `messaging_send` call so the results actually reach the user. Without it, the output only lives in the conversation log.
|
|
74
74
|
|