@vellumai/assistant 0.4.43 → 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 +46 -44
- package/README.md +15 -16
- package/bun.lock +10 -35
- package/docs/architecture/integrations.md +102 -215
- 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 -3
- 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-asset.test.ts +1 -1
- 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 +32 -36
- 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 +31 -7
- 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 +8 -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__/error-handler-friendly-messages.test.ts +46 -0
- 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__/onboarding-template-contract.test.ts +0 -10
- 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-fail-open-selection.test.ts +12 -2
- 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 -5
- 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 +7 -46
- 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__/starter-task-flow.test.ts +9 -19
- package/src/__tests__/subagent-tools.test.ts +2 -2
- package/src/__tests__/system-prompt.test.ts +7 -7
- 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 +84 -8
- 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 -7
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
- 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 -2
- package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
- package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
- package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
- 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-cancel.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-create.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 +33 -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 +42 -10
- 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 +53 -41
- package/src/daemon/mcp-reload-service.ts +123 -0
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/apps.ts +0 -25
- 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 -73
- 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 +8 -2
- package/src/daemon/message-types/settings.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -1
- package/src/daemon/message-types/surfaces.ts +2 -0
- package/src/daemon/ride-shotgun-handler.ts +35 -43
- package/src/daemon/seed-files.ts +3 -27
- package/src/daemon/server.ts +45 -28
- package/src/daemon/session-agent-loop-handlers.ts +72 -9
- 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 -7
- package/src/daemon/session-skill-tools.ts +12 -11
- package/src/daemon/session-slash.ts +7 -0
- package/src/daemon/session-surfaces.ts +192 -118
- package/src/daemon/session-tool-setup.ts +146 -6
- package/src/daemon/session.ts +75 -37
- 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/app-store.ts +0 -18
- 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 -37
- 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 +13 -17
- 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 +33 -35
- package/src/prompts/templates/BOOTSTRAP.md +0 -3
- 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 +4 -6
- 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 +3 -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 +9 -8
- 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 -8
- package/src/runtime/auth/scopes.ts +2 -1
- package/src/runtime/auth/subject.ts +4 -4
- package/src/runtime/auth/token-service.ts +1 -24
- 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/http-types.ts +10 -0
- package/src/runtime/invite-service.ts +3 -3
- package/src/runtime/local-actor-identity.ts +17 -22
- package/src/runtime/middleware/error-handler.ts +14 -1
- package/src/runtime/pending-interactions.ts +21 -9
- package/src/runtime/routes/app-management-routes.ts +63 -67
- package/src/runtime/routes/approval-routes.ts +1 -3
- package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
- package/src/runtime/routes/brain-graph-routes.ts +4 -42
- 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 +234 -47
- package/src/runtime/routes/diagnostics-routes.ts +154 -43
- 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 -351
- 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 +37 -0
- package/src/tools/apps/executors.ts +0 -6
- 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/document/editor-template.ts +10 -8
- 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 +12 -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__/home-base-bootstrap.test.ts +0 -84
- package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
- package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
- 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 -450
- 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 -920
- 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 -116
- package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
- package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
- package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
- package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
- package/src/cli/commands/twitter/client.ts +0 -989
- package/src/cli/commands/twitter/index.ts +0 -1160
- package/src/cli/commands/twitter/oauth-client.ts +0 -94
- package/src/cli/commands/twitter/router.ts +0 -396
- package/src/cli/commands/twitter/session.ts +0 -121
- 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 -137
- 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 -319
- 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/home-base/app-link-store.ts +0 -78
- package/src/home-base/bootstrap.ts +0 -74
- package/src/home-base/prebuilt/brain-graph.html +0 -1483
- package/src/home-base/prebuilt/index.html +0 -702
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -122
- package/src/home-base/prebuilt-home-base-updater.ts +0 -36
- 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 -405
- package/src/util/cookie-session.ts +0 -98
- /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,178 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: slack-app-setup
|
|
3
|
-
description: Connect a Slack app to the Vellum Assistant via Socket Mode with guided app creation and guardian verification
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"💬","vellum":{"display-name":"Slack App Setup","user-invocable":true,"includes":["guardian-verify-setup"]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user connect a Slack bot to the Vellum Assistant via Socket Mode. Walk through each step below.
|
|
9
|
-
|
|
10
|
-
## Value Classification
|
|
11
|
-
|
|
12
|
-
| Value | Type | Storage method | Secret? |
|
|
13
|
-
| --------- | ---------- | ------------------------- | ------- |
|
|
14
|
-
| App Token | Credential | `credential_store` prompt | **Yes** |
|
|
15
|
-
| Bot Token | Credential | `credential_store` prompt | **Yes** |
|
|
16
|
-
|
|
17
|
-
- Both tokens are secrets. Always collect via `credential_store` prompt — never accept them pasted in plaintext chat.
|
|
18
|
-
|
|
19
|
-
# Setup Steps
|
|
20
|
-
|
|
21
|
-
## Step 1: Generate Manifest & Create Slack App
|
|
22
|
-
|
|
23
|
-
Ask the user what they'd like to name their Slack bot and optionally provide a short description. Use their answers (or sensible defaults) to generate a pre-configured Slack app manifest.
|
|
24
|
-
|
|
25
|
-
Generate the manifest JSON:
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"display_information": {
|
|
30
|
-
"name": "<user's chosen name>",
|
|
31
|
-
"description": "<user's chosen description>",
|
|
32
|
-
"background_color": "#1a1a2e"
|
|
33
|
-
},
|
|
34
|
-
"features": {
|
|
35
|
-
"app_home": {
|
|
36
|
-
"home_tab_enabled": true,
|
|
37
|
-
"messages_tab_enabled": true,
|
|
38
|
-
"messages_tab_read_only_enabled": false
|
|
39
|
-
},
|
|
40
|
-
"bot_user": {
|
|
41
|
-
"display_name": "<user's chosen name>",
|
|
42
|
-
"always_online": true
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"oauth_config": {
|
|
46
|
-
"scopes": {
|
|
47
|
-
"bot": [
|
|
48
|
-
"app_mentions:read",
|
|
49
|
-
"channels:history",
|
|
50
|
-
"chat:write",
|
|
51
|
-
"files:write",
|
|
52
|
-
"im:history",
|
|
53
|
-
"im:read",
|
|
54
|
-
"im:write",
|
|
55
|
-
"reactions:write",
|
|
56
|
-
"users:read"
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
"settings": {
|
|
61
|
-
"event_subscriptions": {
|
|
62
|
-
"bot_events": [
|
|
63
|
-
"app_home_opened",
|
|
64
|
-
"app_mention",
|
|
65
|
-
"message.channels",
|
|
66
|
-
"message.im"
|
|
67
|
-
]
|
|
68
|
-
},
|
|
69
|
-
"interactivity": { "is_enabled": true },
|
|
70
|
-
"org_deploy_enabled": false,
|
|
71
|
-
"socket_mode_enabled": true,
|
|
72
|
-
"token_rotation_enabled": false
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
After generating the manifest, URL-encode it and construct the create-from-manifest link:
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
https://api.slack.com/apps?new_app=1&manifest_json=<url_encoded_manifest>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Present the link to the user: "Click this link to create your Slack app. It's pre-configured with all the right permissions, events, and Socket Mode. Just select your workspace and click **Create**."
|
|
84
|
-
|
|
85
|
-
Wait for the user to confirm they've created the app before proceeding.
|
|
86
|
-
|
|
87
|
-
## Step 2: Generate App Token & Collect It
|
|
88
|
-
|
|
89
|
-
Tell the user to navigate to **Settings > Basic Information > App-Level Tokens** in their newly created Slack app, then:
|
|
90
|
-
|
|
91
|
-
1. Click **Generate Token and Scopes**
|
|
92
|
-
2. Token name: "Socket Mode" (or any name they prefer)
|
|
93
|
-
3. Add scope: `connections:write`
|
|
94
|
-
4. Click **Generate**
|
|
95
|
-
|
|
96
|
-
Collect the app token securely:
|
|
97
|
-
|
|
98
|
-
- Call `credential_store` with `action: "prompt"`, `service: "slack_channel"`, `field: "app_token"`, `label: "App-Level Token"`, `placeholder: "xapp-..."`, `description: "Paste the App-Level Token you just generated"`
|
|
99
|
-
|
|
100
|
-
After collection, validate the app token format:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
APP_TOKEN=$(assistant credentials reveal slack_channel:app_token)
|
|
104
|
-
if [[ "$APP_TOKEN" != xapp-* ]]; then
|
|
105
|
-
echo "ERROR: App token must start with xapp-"
|
|
106
|
-
assistant credentials delete slack_channel:app_token
|
|
107
|
-
exit 1
|
|
108
|
-
fi
|
|
109
|
-
echo "App token format valid"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
If the token does not start with `xapp-`, inform the user it is invalid, delete it, and ask them to re-enter (repeat the collection above).
|
|
113
|
-
|
|
114
|
-
## Step 3: Install App & Collect Bot Token
|
|
115
|
-
|
|
116
|
-
Tell the user to navigate to **Settings > Install App** in the sidebar, then click **Install to Workspace** and authorize the requested permissions (already pre-configured from the manifest).
|
|
117
|
-
|
|
118
|
-
After installation, collect the bot token securely:
|
|
119
|
-
|
|
120
|
-
- Call `credential_store` with `action: "prompt"`, `service: "slack_channel"`, `field: "bot_token"`, `label: "Bot User OAuth Token"`, `placeholder: "xoxb-..."`, `description: "Paste the Bot User OAuth Token shown after installing"`
|
|
121
|
-
|
|
122
|
-
## Step 4: Validate Bot Token & Store Workspace Metadata
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
BOT_TOKEN=$(assistant credentials reveal slack_channel:bot_token)
|
|
126
|
-
AUTH_RESPONSE=$(curl -sf -X POST "https://slack.com/api/auth.test" \
|
|
127
|
-
-H "Authorization: Bearer $BOT_TOKEN")
|
|
128
|
-
echo "$AUTH_RESPONSE" | jq .
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
If `ok` is `false`, the token is invalid — ask the user to re-enter (repeat Step 3).
|
|
132
|
-
|
|
133
|
-
If `ok` is `true`, parse the response and persist workspace metadata so the Settings UI can display the connected bot and workspace:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
TEAM_ID=$(echo "$AUTH_RESPONSE" | jq -r '.team_id')
|
|
137
|
-
TEAM_NAME=$(echo "$AUTH_RESPONSE" | jq -r '.team')
|
|
138
|
-
BOT_USER_ID=$(echo "$AUTH_RESPONSE" | jq -r '.user_id')
|
|
139
|
-
BOT_USERNAME=$(echo "$AUTH_RESPONSE" | jq -r '.user')
|
|
140
|
-
assistant config set slack.teamId "$TEAM_ID"
|
|
141
|
-
assistant config set slack.teamName "$TEAM_NAME"
|
|
142
|
-
assistant config set slack.botUserId "$BOT_USER_ID"
|
|
143
|
-
assistant config set slack.botUsername "$BOT_USERNAME"
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Report the bot username and workspace from the response.
|
|
147
|
-
|
|
148
|
-
Socket Mode connects automatically once both credentials are stored — no further action needed.
|
|
149
|
-
|
|
150
|
-
## Step 5: Guardian Verification (Optional)
|
|
151
|
-
|
|
152
|
-
Link the user's Slack account as the trusted guardian. Load the **guardian-verify-setup** skill:
|
|
153
|
-
|
|
154
|
-
- Call `skill_load` with `skill: "guardian-verify-setup"`.
|
|
155
|
-
|
|
156
|
-
If the user declines, skip and continue.
|
|
157
|
-
|
|
158
|
-
## Step 6: Report Success
|
|
159
|
-
|
|
160
|
-
Summarize:
|
|
161
|
-
|
|
162
|
-
- Bot connected: {username} in {workspace}
|
|
163
|
-
- Socket Mode: active (gateway auto-connects when credentials are stored)
|
|
164
|
-
- Guardian: {verified | skipped}
|
|
165
|
-
- Usage: @{botUsername} in any channel, or DM the bot directly
|
|
166
|
-
|
|
167
|
-
# Clearing Credentials
|
|
168
|
-
|
|
169
|
-
To disconnect Slack:
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
assistant credentials delete slack_channel:bot_token
|
|
173
|
-
assistant credentials delete slack_channel:app_token
|
|
174
|
-
assistant config set slack.teamId ""
|
|
175
|
-
assistant config set slack.teamName ""
|
|
176
|
-
assistant config set slack.botUserId ""
|
|
177
|
-
assistant config set slack.botUsername ""
|
|
178
|
-
```
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: slack-digest-setup
|
|
3
|
-
description: Set up recurring Slack channel digests with scanning schedules, channel configuration, and delivery — codifies best practices for high-quality automated summaries
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"📊","vellum":{"display-name":"Slack Digest Setup","user-invocable":true,"includes":["slack","schedule"]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user set up a recurring Slack digest: automated channel scanning on a schedule that delivers prose-style summaries of what's happening across their workspace. This skill walks through configuration, scheduling, and — critically — the execution protocol that ensures every digest is actually useful.
|
|
9
|
-
|
|
10
|
-
## Prerequisites
|
|
11
|
-
|
|
12
|
-
Before starting, verify:
|
|
13
|
-
|
|
14
|
-
1. **Slack is connected.** The `slack_scan_digest` tool must be available. If not, load the `slack-app-setup` skill first.
|
|
15
|
-
2. **Bot has channel access.** The Slack bot must be invited to each channel it needs to scan. Users can do this with `/invite @BotName` in each channel.
|
|
16
|
-
|
|
17
|
-
## Step 1: Configure Channels
|
|
18
|
-
|
|
19
|
-
Help the user decide which channels to scan. Ask what channels matter most to them, then use `slack_configure_channels` with `action: "set"` to save their preferences.
|
|
20
|
-
|
|
21
|
-
Tips for channel selection:
|
|
22
|
-
|
|
23
|
-
- Start with 5-10 high-signal channels (team channels, engineering, announcements)
|
|
24
|
-
- Skip noisy bot/CI channels unless the user specifically wants them
|
|
25
|
-
- Private channels work too, as long as the bot is invited
|
|
26
|
-
- The user can update this list anytime with `slack_configure_channels`
|
|
27
|
-
|
|
28
|
-
If the user already has preferred channels configured, show the current list and ask if they want to adjust.
|
|
29
|
-
|
|
30
|
-
## Step 2: Set Up the Schedule
|
|
31
|
-
|
|
32
|
-
Create a recurring schedule using `schedule_create`. The recommended default is **hourly, 7am-7pm in the user's timezone**, with the overnight gap.
|
|
33
|
-
|
|
34
|
-
**Cron expression:** `0 7-19 * * *` (fires at the top of each hour, 7am through 7pm)
|
|
35
|
-
|
|
36
|
-
**Determine the delivery target.** Ask the user where digests should be delivered — typically their Slack DM or a dedicated channel like `#alex-agent-messages`. Use `messaging_read` or the Slack API to resolve the `conversation_id` for the target. This ID gets baked into the schedule message so scheduled sessions know where to post.
|
|
37
|
-
|
|
38
|
-
**The schedule message is critical.** Scheduled sessions have no memory of this setup conversation. The message must be completely self-contained with every instruction needed to execute properly. Use the Scan Execution Protocol below as the template for the schedule message content.
|
|
39
|
-
|
|
40
|
-
### Scan Window Logic
|
|
41
|
-
|
|
42
|
-
- The **first scan of the day** (e.g. 7am) covers everything since the last scan the previous evening. If the last scan was at 7pm, that's 12 hours of overnight activity.
|
|
43
|
-
- All **subsequent scans** cover since the previous hourly scan (roughly 1 hour).
|
|
44
|
-
- The scan reads `data/last_slack_scan.json` for the timestamp of the last scan and calculates `hours_back` accordingly.
|
|
45
|
-
|
|
46
|
-
## Step 3: Create Tracking Files
|
|
47
|
-
|
|
48
|
-
Set up two files for scan state and history:
|
|
49
|
-
|
|
50
|
-
**`data/last_slack_scan.json`** — Stores the timestamp of the last successful scan:
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
{ "timestamp": "2026-01-01T12:00:00Z", "hours_back": 1, "channels_scanned": 0 }
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**`data/slack_scan_log.md`** — Running log of scan activity:
|
|
57
|
-
|
|
58
|
-
```markdown
|
|
59
|
-
# Slack Scan Log
|
|
60
|
-
|
|
61
|
-
## YYYY-MM-DD HH:MM ET | Window: Xh | N channels scanned
|
|
62
|
-
|
|
63
|
-
Summary of what was found, or "All clear."
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Create both files during setup with initial values. The scheduled scan sessions update them after each run.
|
|
67
|
-
|
|
68
|
-
## Step 4: Scan Execution Protocol
|
|
69
|
-
|
|
70
|
-
**This is the most important section.** Every scheduled scan MUST follow this exact protocol. Embed these instructions directly in the schedule message so the session cannot deviate.
|
|
71
|
-
|
|
72
|
-
### The Protocol
|
|
73
|
-
|
|
74
|
-
1. **Load the Slack skill.** Call `skill_load` with `skill: "slack"` to ensure scan tools are available.
|
|
75
|
-
|
|
76
|
-
2. **Call `slack_scan_digest` with `include_threads: true`.** Check `data/last_slack_scan.json` for the last scan timestamp and calculate the appropriate `hours_back`. Actually call the tool. Do not skip this step. Do not assume nothing happened.
|
|
77
|
-
|
|
78
|
-
3. **Read the actual results.** Look at what the scan returned before deciding what to report. If the tool returned messages, proceed to step 4a. If it returned zero messages, proceed to step 4b.
|
|
79
|
-
|
|
80
|
-
4a. **If there are messages: Write a full prose digest.** Break down by channel. For each channel with activity, include:
|
|
81
|
-
|
|
82
|
-
- Channel name
|
|
83
|
-
- Who's talking (real names, not user IDs)
|
|
84
|
-
- What's being discussed (specific topics, not vague summaries)
|
|
85
|
-
- Reply counts on notable threads
|
|
86
|
-
- Decisions made, questions asked, action items
|
|
87
|
-
- Anything that looks like it needs the user's attention or a reply
|
|
88
|
-
|
|
89
|
-
Write in prose style, conversational. Not bullet lists of channel names. Highlight what matters, skip noise, but be specific about what's quiet too.
|
|
90
|
-
|
|
91
|
-
4b. **If genuinely zero messages: Name the channels you scanned.** The user needs to know coverage was complete. Example: "Scanned team-atlas, team-illuminati, ask-eng, team-jarvis, and 3 others. Nothing new in the last hour."
|
|
92
|
-
|
|
93
|
-
5. **Deliver via `messaging_send`.** Call `messaging_send` with `platform: "slack"` and the target `conversation_id` (determined during setup — typically the user's preferred DM or a dedicated digest channel). The `message` field MUST contain the full prose digest you wrote in step 4. Do NOT use `send_notification` for digests — the notification router's decision engine rewrites content into short alerts, stripping the actual digest.
|
|
94
|
-
|
|
95
|
-
6. **Update tracking files.** Write the current timestamp to `data/last_slack_scan.json` and append a log entry to `data/slack_scan_log.md`.
|
|
96
|
-
|
|
97
|
-
### Template Schedule Message
|
|
98
|
-
|
|
99
|
-
Use this as the schedule message when creating the schedule. Adjust the delivery target and channel exclusions per the user's preferences:
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
Run the Slack digest scan. Follow every instruction exactly:
|
|
103
|
-
|
|
104
|
-
1. Load the Slack skill.
|
|
105
|
-
2. Call slack_scan_digest with include_threads: true to scan preferred channels. Check data/last_slack_scan.json for the time window.
|
|
106
|
-
3. Read the actual results. Do NOT skip this or assume nothing happened.
|
|
107
|
-
4. Build the digest:
|
|
108
|
-
- If there are messages: write a prose-style digest broken down by channel with channel names, who's talking (real names), specific topics, reply counts, decisions, questions, and anything needing attention.
|
|
109
|
-
- If zero messages: list which channels were scanned so coverage is clear.
|
|
110
|
-
5. Send using messaging_send with platform "slack" and conversation_id "<target_channel_id>". The MESSAGE field must contain the full digest from step 4. Never send a generic status like "scan completed." Do NOT use send_notification — it rewrites content into short alerts.
|
|
111
|
-
6. Update data/last_slack_scan.json and append to data/slack_scan_log.md.
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Step 5: HEARTBEAT.md Integration (Optional)
|
|
115
|
-
|
|
116
|
-
If the user has the heartbeat feature enabled (`heartbeat.enabled: true` in config.json), add the scan protocol to `HEARTBEAT.md` as a checklist item instead of (or in addition to) using `schedule_create`. The heartbeat runs on its own interval and reads HEARTBEAT.md for instructions.
|
|
117
|
-
|
|
118
|
-
Either approach works. The key is that the execution instructions are explicit and self-contained regardless of where they live.
|
|
119
|
-
|
|
120
|
-
## Quality Standard
|
|
121
|
-
|
|
122
|
-
Every digest, whether it covers 1 hour or 12 hours, must meet the same quality bar:
|
|
123
|
-
|
|
124
|
-
- **Prose style, conversational.** Not bullet lists of channel names. Write like you're briefing a busy person.
|
|
125
|
-
- **Specific.** Name the people, name the topics, give reply counts. "Team-atlas had some discussion" is useless. "Marina and Emmie discussed the CI pipeline fix in team-atlas (7 replies, still in progress)" is useful.
|
|
126
|
-
- **Prioritized.** Lead with what matters. Decisions, blockers, and things needing the user's attention come first. Background chatter comes last or gets skipped.
|
|
127
|
-
- **Honest about quiet periods.** If nothing happened, say so, but name what you scanned.
|
|
128
|
-
|
|
129
|
-
The morning overnight digest is not a different format. It just covers more time and will naturally be longer.
|
|
130
|
-
|
|
131
|
-
## Privacy Rules
|
|
132
|
-
|
|
133
|
-
- Content from `isPrivate: true` channels MUST NEVER appear in digests delivered to other channels or external destinations.
|
|
134
|
-
- If the user designates specific channels as sensitive (e.g. a war-room), exclude them from digests entirely. Document these exclusions in the schedule message so scheduled sessions respect them.
|
|
135
|
-
- When in doubt about whether content can be shared, err on the side of omission.
|
|
136
|
-
|
|
137
|
-
## Common Pitfalls
|
|
138
|
-
|
|
139
|
-
These are hard-won lessons from debugging digest quality issues. They exist here so other assistants don't repeat the same mistakes.
|
|
140
|
-
|
|
141
|
-
### Pitfall: Skipping the scan call
|
|
142
|
-
|
|
143
|
-
The `slack_scan_digest` tool is what fetches messages. Without calling it, you have nothing to summarize. Never report "all clear" or "0 channels active" without having actually called the scan tool and confirmed zero messages came back. The scan does the fetching. You do the summarizing.
|
|
144
|
-
|
|
145
|
-
### Pitfall: Using `send_notification` for digests
|
|
146
|
-
|
|
147
|
-
The notification router's decision engine rewrites `send_notification` content into short alerts (title ≤ 8 words, body ≤ 2 sentences). If you put a full prose digest in `send_notification`, it will be truncated or rewritten. Always use `messaging_send` with the target `conversation_id` for digest delivery. The `messaging_send` message field is delivered verbatim.
|
|
148
|
-
|
|
149
|
-
### Pitfall: Not naming channels in quiet reports
|
|
150
|
-
|
|
151
|
-
Even when nothing happened, the user needs to know the scan actually ran and what it covered. "All clear" by itself could mean you scanned 12 channels and found nothing, or it could mean you didn't scan at all. List the channels.
|
|
152
|
-
|
|
153
|
-
### Pitfall: Losing context between sessions
|
|
154
|
-
|
|
155
|
-
Scheduled sessions start fresh with no memory of the setup conversation. They don't know what format to use, where to deliver, or what channels to skip unless you tell them. The schedule message must contain every instruction needed to execute properly. If it's not in the message, it won't happen.
|
|
156
|
-
|
|
157
|
-
### Pitfall: Different quality for hourly vs overnight
|
|
158
|
-
|
|
159
|
-
There is no "hourly format" vs "overnight format." Every digest follows the same structure. The overnight one is just longer because it covers more time. Don't phone in the hourly scans with one-line summaries while giving the overnight scan full channel-by-channel treatment.
|
|
160
|
-
|
|
161
|
-
## Verification
|
|
162
|
-
|
|
163
|
-
After setup is complete, suggest the user test the digest by temporarily setting the schedule to run every 2 minutes (`*/2 * * * *`). Watch for the first notification, verify it contains actual content (not a generic status), then switch back to hourly.
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: slack-oauth-setup
|
|
3
|
-
description: Create Slack App and OAuth credentials for Slack integration using browser automation
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🔑","vellum":{"display-name":"Slack OAuth Setup","user-invocable":true,"includes":["browser"]}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are helping your user create a Slack App and OAuth credentials so the Messaging integration can connect to their Slack workspace. Walk through each step below using `browser_navigate`, `browser_snapshot`, `browser_screenshot`, `browser_click`, `browser_type`, and `browser_extract` tools.
|
|
9
|
-
|
|
10
|
-
**Tone:** Be friendly and reassuring throughout. Narrate what you're doing in plain language so the user always knows what's happening. After each step, briefly confirm what was accomplished before moving on.
|
|
11
|
-
|
|
12
|
-
## Before You Start
|
|
13
|
-
|
|
14
|
-
Tell the user:
|
|
15
|
-
- "I'll walk you through creating a Slack App so Vellum can connect to your workspace. The whole process takes a few minutes."
|
|
16
|
-
- "I'll be automating the Slack API website in the browser — you'll be able to see everything I'm doing."
|
|
17
|
-
- "I'll ask for your approval before each major step, so nothing happens without your say-so."
|
|
18
|
-
- "No sensitive credentials will be shown in the conversation."
|
|
19
|
-
|
|
20
|
-
## Step 1: Navigate to Slack API
|
|
21
|
-
|
|
22
|
-
Tell the user: "First, let me open the Slack API dashboard."
|
|
23
|
-
|
|
24
|
-
Use `browser_navigate` to go to `https://api.slack.com/apps`.
|
|
25
|
-
|
|
26
|
-
Take a `browser_screenshot` to show the user what loaded, then take a `browser_snapshot` to check the page state:
|
|
27
|
-
- **If a sign-in page appears:** Tell the user "Please sign in to your Slack account in the browser window. Let me know when you're done." Wait for their confirmation, then take another snapshot.
|
|
28
|
-
- **If the apps dashboard loads:** Tell the user "Slack API dashboard is loaded. Let's create your app!" and continue to Step 2.
|
|
29
|
-
|
|
30
|
-
## Step 2: Create a Slack App
|
|
31
|
-
|
|
32
|
-
**Ask for approval before proceeding.** Use `ui_show` with `surface_type: "confirmation"` and this message:
|
|
33
|
-
|
|
34
|
-
> **Create a Slack App**
|
|
35
|
-
>
|
|
36
|
-
> I'm about to create a new Slack App called "Vellum Assistant" in your workspace. This app will only have the permissions you approve in the next step. It won't post anything or access any data until you explicitly authorize it.
|
|
37
|
-
|
|
38
|
-
Wait for the user to approve. If they decline, explain that the app is required for OAuth and offer to try again or cancel.
|
|
39
|
-
|
|
40
|
-
Once approved:
|
|
41
|
-
1. Click "Create New App"
|
|
42
|
-
2. Select "From scratch"
|
|
43
|
-
3. Enter app name: "Vellum Assistant"
|
|
44
|
-
4. Select the user's workspace from the dropdown
|
|
45
|
-
5. Click "Create App"
|
|
46
|
-
|
|
47
|
-
Take a `browser_screenshot` to show the result.
|
|
48
|
-
|
|
49
|
-
Tell the user: "App created! Now let's configure the permissions it needs."
|
|
50
|
-
|
|
51
|
-
## Step 3: Configure OAuth Scopes
|
|
52
|
-
|
|
53
|
-
**Ask for approval before proceeding.** Use `ui_show` with `surface_type: "confirmation"` and this message:
|
|
54
|
-
|
|
55
|
-
> **Configure Slack Permissions**
|
|
56
|
-
>
|
|
57
|
-
> I'm about to add the following User Token Scopes to your Slack App. These let Vellum read your messages and channels, send messages on your behalf, search your message history, and add emoji reactions:
|
|
58
|
-
>
|
|
59
|
-
> - `channels:read` — View basic channel info
|
|
60
|
-
> - `channels:history` — Read message history in public channels
|
|
61
|
-
> - `groups:read` — View private channel info
|
|
62
|
-
> - `groups:history` — Read message history in private channels
|
|
63
|
-
> - `im:read` — View direct message info
|
|
64
|
-
> - `im:history` — Read direct message history
|
|
65
|
-
> - `im:write` — Open and send direct messages
|
|
66
|
-
> - `mpim:read` — View group DM info
|
|
67
|
-
> - `mpim:history` — Read group DM history
|
|
68
|
-
> - `users:read` — View user profiles
|
|
69
|
-
> - `chat:write` — Send messages
|
|
70
|
-
> - `search:read` — Search messages
|
|
71
|
-
> - `reactions:write` — Add emoji reactions
|
|
72
|
-
|
|
73
|
-
Wait for the user to approve.
|
|
74
|
-
|
|
75
|
-
Once approved:
|
|
76
|
-
1. Navigate to "OAuth & Permissions" in the left sidebar (or go to the app's OAuth page directly)
|
|
77
|
-
2. Scroll to "User Token Scopes"
|
|
78
|
-
3. Add each scope listed above using the "Add an OAuth Scope" button
|
|
79
|
-
|
|
80
|
-
Take a `browser_screenshot` after adding all scopes.
|
|
81
|
-
|
|
82
|
-
Tell the user: "Permissions configured! Now let's set up the redirect URL and get the credentials."
|
|
83
|
-
|
|
84
|
-
## Step 4: Add Redirect URL
|
|
85
|
-
|
|
86
|
-
Navigate to the "OAuth & Permissions" page if not already there.
|
|
87
|
-
|
|
88
|
-
Before entering the redirect URL, resolve the exact value from the well-known OAuth config:
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
credential_store describe:
|
|
92
|
-
service: "integration:slack"
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Read the `redirectUri` field from that response and use it exactly as shown.
|
|
96
|
-
|
|
97
|
-
In the "Redirect URLs" section:
|
|
98
|
-
1. If `redirectUri` says "automatic", skip adding a redirect URL for this provider.
|
|
99
|
-
2. If `redirectUri` mentions "not currently configured" / `GATEWAY_BASE_URL` / `INGRESS_PUBLIC_BASE_URL`, stop and ask the user to configure public ingress first.
|
|
100
|
-
3. Otherwise, click "Add New Redirect URL" and enter the `redirectUri` value exactly as returned.
|
|
101
|
-
4. Click "Add" then "Save URLs"
|
|
102
|
-
|
|
103
|
-
Take a `browser_snapshot` to confirm.
|
|
104
|
-
|
|
105
|
-
Tell the user: "Redirect URL configured using the redirect URI from Vellum's Slack OAuth profile."
|
|
106
|
-
|
|
107
|
-
## Step 5: Extract Client ID and Client Secret
|
|
108
|
-
|
|
109
|
-
Navigate to "Basic Information" in the left sidebar.
|
|
110
|
-
|
|
111
|
-
Use `browser_extract` to read:
|
|
112
|
-
1. **Client ID** from the "App Credentials" section
|
|
113
|
-
2. **Client Secret** — click "Show" first, then extract the value
|
|
114
|
-
|
|
115
|
-
**Important:** Slack requires a client secret for the token exchange (unlike Google which uses PKCE). Both values are needed.
|
|
116
|
-
|
|
117
|
-
Tell the user: "Credentials extracted! Now let's connect your Slack workspace."
|
|
118
|
-
|
|
119
|
-
## Step 6: Connect Slack
|
|
120
|
-
|
|
121
|
-
Tell the user: "Opening Slack authorization so you can grant Vellum access to your workspace. You'll see a Slack consent page — just click 'Allow'."
|
|
122
|
-
|
|
123
|
-
Use the `credential_store` tool to connect Slack via OAuth2:
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
action: "oauth2_connect"
|
|
127
|
-
service: "integration:slack"
|
|
128
|
-
client_id: "<the extracted Client ID>"
|
|
129
|
-
client_secret: "<the extracted Client Secret>"
|
|
130
|
-
auth_url: "https://slack.com/oauth/v2/authorize"
|
|
131
|
-
token_url: "https://slack.com/api/oauth.v2.access"
|
|
132
|
-
scopes: ["channels:read", "channels:history", "groups:read", "groups:history", "im:read", "im:history", "im:write", "mpim:read", "mpim:history", "users:read", "chat:write", "search:read", "reactions:write"]
|
|
133
|
-
extra_params: {"user_scope": "channels:read,channels:history,groups:read,groups:history,im:read,im:history,im:write,mpim:read,mpim:history,users:read,chat:write,search:read,reactions:write"}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
This will open the Slack authorization page in the user's browser. Wait for the flow to complete.
|
|
137
|
-
|
|
138
|
-
## Step 7: Celebrate!
|
|
139
|
-
|
|
140
|
-
Once connected, tell the user:
|
|
141
|
-
|
|
142
|
-
"**Slack is connected!** You're all set. You can now read channels, search messages, send messages, and manage your Slack workspace through Vellum. Try asking me to check your unread Slack messages!"
|
|
143
|
-
|
|
144
|
-
Summarize what was accomplished:
|
|
145
|
-
- Created a Slack App called "Vellum Assistant"
|
|
146
|
-
- Configured User Token Scopes for reading, writing, and searching
|
|
147
|
-
- Set up the OAuth redirect URL from the Slack OAuth profile
|
|
148
|
-
- Connected your Slack workspace
|
|
149
|
-
|
|
150
|
-
## Error Handling
|
|
151
|
-
|
|
152
|
-
- **Page load failures:** Retry navigation once. If it still fails, tell the user and ask them to check their internet connection.
|
|
153
|
-
- **Workspace selection issues:** The user may need admin permissions to install apps. Explain this clearly.
|
|
154
|
-
- **Element not found for click/type:** Take a fresh `browser_snapshot` to re-assess the page layout. Slack's UI may have changed; adapt your selectors.
|
|
155
|
-
- **User declines an approval gate:** Don't push back. Explain briefly why the step matters, offer to try again, or cancel gracefully.
|
|
156
|
-
- **OAuth flow timeout or failure:** Tell the user what happened and offer to retry. The app is already created, so they only need to re-run the connect step.
|
|
157
|
-
- **Any unexpected state:** Take a `browser_screenshot` and `browser_snapshot`, describe what you see, and ask the user for guidance.
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: start-the-day
|
|
3
|
-
description: Get a personalized daily briefing with weather, news, and actionable insights
|
|
4
|
-
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
-
metadata: {"emoji":"🌅","vellum":{"display-name":"Start the Day","user-invocable":true}}
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You are a personal daily briefing assistant. When the user invokes this skill, generate a concise, actionable briefing tailored to the current moment.
|
|
9
|
-
|
|
10
|
-
## Briefing Structure
|
|
11
|
-
|
|
12
|
-
Build the briefing in sections. Use what you know about the user and their context to decide which sections are relevant. Don't include sections you have nothing useful to say about.
|
|
13
|
-
|
|
14
|
-
### 1. Weather & Conditions
|
|
15
|
-
|
|
16
|
-
Check the user's location (from system context or ask once) and provide:
|
|
17
|
-
- Current conditions and temperature
|
|
18
|
-
- High/low for the day
|
|
19
|
-
- Notable weather (rain, extreme temps, wind) — only if it affects plans
|
|
20
|
-
|
|
21
|
-
### 2. Top Headlines
|
|
22
|
-
|
|
23
|
-
Summarize 3-5 notable news items. Prioritize:
|
|
24
|
-
- Stories relevant to the user's interests or industry
|
|
25
|
-
- Major world events
|
|
26
|
-
- Tech/product launches if relevant
|
|
27
|
-
- Keep each to one sentence
|
|
28
|
-
|
|
29
|
-
### 3. Calendar & Meetings
|
|
30
|
-
|
|
31
|
-
If you have access to calendar context:
|
|
32
|
-
- List today's meetings with times
|
|
33
|
-
- Flag any prep needed (documents to review, talking points)
|
|
34
|
-
- Note gaps that could be used for focused work
|
|
35
|
-
|
|
36
|
-
### 4. Email & Messages
|
|
37
|
-
|
|
38
|
-
If you have access to communication context:
|
|
39
|
-
- Summarize unread messages that need responses
|
|
40
|
-
- Draft quick replies for straightforward ones — present them for review
|
|
41
|
-
- Flag anything urgent or time-sensitive
|
|
42
|
-
|
|
43
|
-
### 5. Tasks & Priorities
|
|
44
|
-
|
|
45
|
-
If you have context on the user's work:
|
|
46
|
-
- Surface top 3 priorities for the day
|
|
47
|
-
- Note any deadlines approaching
|
|
48
|
-
- Suggest one thing to tackle first
|
|
49
|
-
|
|
50
|
-
### 6. Something Interesting
|
|
51
|
-
|
|
52
|
-
End with one of:
|
|
53
|
-
- An interesting fact or quote
|
|
54
|
-
- A relevant article worth reading later
|
|
55
|
-
- A tip related to something the user is working on
|
|
56
|
-
|
|
57
|
-
## Tone
|
|
58
|
-
|
|
59
|
-
- Concise and scannable — use bullet points, not paragraphs
|
|
60
|
-
- Conversational but efficient — like a sharp executive assistant
|
|
61
|
-
- Don't pad with filler — if you only have 2 useful sections, give 2 sections
|
|
62
|
-
- Time-aware: morning briefings differ from afternoon check-ins
|
|
63
|
-
|
|
64
|
-
## Adaptation Over Time
|
|
65
|
-
|
|
66
|
-
As you learn more about the user:
|
|
67
|
-
- Weight news toward their interests and industry
|
|
68
|
-
- Remember their schedule patterns (e.g. "you usually have standup at 10")
|
|
69
|
-
- Track recurring tasks and deadlines
|
|
70
|
-
- Get more specific and less generic with each use
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<rect x="0" y="0" width="16" height="16" fill="#1a1a2e"/>
|
|
3
|
-
<rect x="2" y="2" width="12" height="12" fill="#16213e"/>
|
|
4
|
-
<rect x="3" y="3" width="10" height="10" fill="#0f3460"/>
|
|
5
|
-
<rect x="4" y="4" width="8" height="2" fill="#e94560"/>
|
|
6
|
-
<rect x="4" y="7" width="8" height="1" fill="#ffd700"/>
|
|
7
|
-
<rect x="4" y="9" width="8" height="1" fill="#ffd700"/>
|
|
8
|
-
<rect x="4" y="11" width="8" height="1" fill="#ffd700"/>
|
|
9
|
-
<rect x="2" y="2" width="1" height="12" fill="#16a085"/>
|
|
10
|
-
<rect x="13" y="2" width="1" height="12" fill="#16a085"/>
|
|
11
|
-
<rect x="7" y="1" width="2" height="1" fill="#ffd700"/>
|
|
12
|
-
<rect x="6" y="0" width="4" height="1" fill="#e94560"/>
|
|
13
|
-
</svg>
|