@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
|
@@ -75,7 +75,7 @@ export async function executeWatcherList(
|
|
|
75
75
|
? new Date(w.lastPollAt).toLocaleString()
|
|
76
76
|
: "never";
|
|
77
77
|
lines.push(
|
|
78
|
-
` - [${status}] ${w.name} (${w.providerId})
|
|
78
|
+
` - [${status}] ${w.name} (${w.providerId}) - last: ${lastPoll}`,
|
|
79
79
|
);
|
|
80
80
|
}
|
|
81
81
|
|
package/src/util/logger.ts
CHANGED
|
@@ -12,7 +12,10 @@ import pino from "pino";
|
|
|
12
12
|
import type { PrettyOptions } from "pino-pretty";
|
|
13
13
|
import pinoPretty from "pino-pretty";
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
getDebugStdoutLogs,
|
|
17
|
+
getIsContainerized,
|
|
18
|
+
} from "../config/env-registry.js";
|
|
16
19
|
import { logSerializers } from "./log-redact.js";
|
|
17
20
|
import { getLogPath } from "./platform.js";
|
|
18
21
|
|
|
@@ -109,7 +112,9 @@ function buildRotatingLogger(config: LogFileConfig): pino.Logger {
|
|
|
109
112
|
// When stdout is not a TTY (e.g. desktop app redirects to a hatch log file),
|
|
110
113
|
// write to the rotating file only — the hatch log already captured early
|
|
111
114
|
// startup output and echoing pino output there is unnecessary duplication.
|
|
112
|
-
|
|
115
|
+
// Exception: in containers, always write to stdout so `docker logs` can
|
|
116
|
+
// capture daemon output for debugging.
|
|
117
|
+
if (!process.stdout.isTTY && !getIsContainerized()) {
|
|
113
118
|
return pino(
|
|
114
119
|
{ name: "assistant", level: "info", serializers: logSerializers },
|
|
115
120
|
fileStream,
|
package/src/util/pricing.ts
CHANGED
|
@@ -24,6 +24,9 @@ const PROVIDER_PRICING: Record<string, Record<string, ModelPricing>> = {
|
|
|
24
24
|
"claude-haiku-4": { inputPer1M: 0.8, outputPer1M: 4 },
|
|
25
25
|
},
|
|
26
26
|
openai: {
|
|
27
|
+
"gpt-5.4": { inputPer1M: 2.5, outputPer1M: 15 },
|
|
28
|
+
"gpt-5.4-nano": { inputPer1M: 0.2, outputPer1M: 1.25 },
|
|
29
|
+
"gpt-5.2": { inputPer1M: 1.75, outputPer1M: 14 },
|
|
27
30
|
"gpt-4o": { inputPer1M: 2.5, outputPer1M: 10 },
|
|
28
31
|
"gpt-4o-mini": { inputPer1M: 0.15, outputPer1M: 0.6 },
|
|
29
32
|
"gpt-4.1": { inputPer1M: 2.0, outputPer1M: 8.0 },
|
|
@@ -35,6 +38,7 @@ const PROVIDER_PRICING: Record<string, Record<string, ModelPricing>> = {
|
|
|
35
38
|
"o4-mini": { inputPer1M: 1.1, outputPer1M: 4.4 },
|
|
36
39
|
},
|
|
37
40
|
gemini: {
|
|
41
|
+
"gemini-3-flash": { inputPer1M: 0.5, outputPer1M: 3 },
|
|
38
42
|
"gemini-2.5-pro": { inputPer1M: 1.25, outputPer1M: 10 },
|
|
39
43
|
"gemini-2.5-flash": { inputPer1M: 0.15, outputPer1M: 0.6 },
|
|
40
44
|
"gemini-2.0-flash": { inputPer1M: 0.1, outputPer1M: 0.4 },
|
package/src/util/retry.ts
CHANGED
|
@@ -74,9 +74,19 @@ export function isRetryableStatus(status: number): boolean {
|
|
|
74
74
|
return status === 429 || status >= 500;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Message patterns that indicate a retryable network/transport error even
|
|
79
|
+
* when no errno code is present (e.g. Bun's native fetch socket errors).
|
|
80
|
+
*/
|
|
81
|
+
const RETRYABLE_NETWORK_MESSAGE_PATTERNS = [
|
|
82
|
+
/socket.*closed unexpectedly/i,
|
|
83
|
+
/socket hang up/i,
|
|
84
|
+
];
|
|
85
|
+
|
|
77
86
|
/**
|
|
78
87
|
* Whether an error is a retryable network error (ECONNRESET, ECONNREFUSED, etc.).
|
|
79
|
-
* Checks
|
|
88
|
+
* Checks errno codes on the error and one level of `cause` chain, then falls
|
|
89
|
+
* back to message-based detection for runtime-specific errors (e.g. Bun fetch).
|
|
80
90
|
*/
|
|
81
91
|
export function isRetryableNetworkError(error: unknown): boolean {
|
|
82
92
|
if (!(error instanceof Error)) return false;
|
|
@@ -96,6 +106,24 @@ export function isRetryableNetworkError(error: unknown): boolean {
|
|
|
96
106
|
if (causeCode && retryableCodes.has(causeCode)) return true;
|
|
97
107
|
}
|
|
98
108
|
|
|
109
|
+
// Fall back to message-based detection for errors without errno codes
|
|
110
|
+
// (e.g. Bun's "The socket connection was closed unexpectedly")
|
|
111
|
+
if (
|
|
112
|
+
RETRYABLE_NETWORK_MESSAGE_PATTERNS.some((p) => p.test(error.message))
|
|
113
|
+
) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Also check the cause's message (ProviderError wraps the original message
|
|
118
|
+
// but the cause retains the raw transport-level text)
|
|
119
|
+
const cause = error.cause;
|
|
120
|
+
if (
|
|
121
|
+
cause instanceof Error &&
|
|
122
|
+
RETRYABLE_NETWORK_MESSAGE_PATTERNS.some((p) => p.test(cause.message))
|
|
123
|
+
) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
99
127
|
return false;
|
|
100
128
|
}
|
|
101
129
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import type { WorkspaceMigration } from "./types.js";
|
|
5
|
+
|
|
6
|
+
export const webSearchProviderRenameMigration: WorkspaceMigration = {
|
|
7
|
+
id: "007-web-search-provider-rename",
|
|
8
|
+
description:
|
|
9
|
+
'Rename web-search provider from "anthropic-native" to "inference-provider-native"',
|
|
10
|
+
run(workspaceDir: string): void {
|
|
11
|
+
const configPath = join(workspaceDir, "config.json");
|
|
12
|
+
if (!existsSync(configPath)) return;
|
|
13
|
+
|
|
14
|
+
let config: Record<string, unknown>;
|
|
15
|
+
try {
|
|
16
|
+
const raw = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
17
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return;
|
|
18
|
+
config = raw as Record<string, unknown>;
|
|
19
|
+
} catch {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const services = config.services;
|
|
24
|
+
if (!services || typeof services !== "object" || Array.isArray(services))
|
|
25
|
+
return;
|
|
26
|
+
|
|
27
|
+
const webSearch = (services as Record<string, unknown>)["web-search"];
|
|
28
|
+
if (!webSearch || typeof webSearch !== "object" || Array.isArray(webSearch))
|
|
29
|
+
return;
|
|
30
|
+
|
|
31
|
+
const ws = webSearch as Record<string, unknown>;
|
|
32
|
+
if (ws.provider !== "anthropic-native") return;
|
|
33
|
+
|
|
34
|
+
ws.provider = "inference-provider-native";
|
|
35
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -4,6 +4,7 @@ import { seedDeviceIdMigration } from "./003-seed-device-id.js";
|
|
|
4
4
|
import { extractCollectUsageDataMigration } from "./004-extract-collect-usage-data.js";
|
|
5
5
|
import { addSendDiagnosticsMigration } from "./005-add-send-diagnostics.js";
|
|
6
6
|
import { servicesConfigMigration } from "./006-services-config.js";
|
|
7
|
+
import { webSearchProviderRenameMigration } from "./007-web-search-provider-rename.js";
|
|
7
8
|
import type { WorkspaceMigration } from "./types.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -17,4 +18,5 @@ export const WORKSPACE_MIGRATIONS: WorkspaceMigration[] = [
|
|
|
17
18
|
extractCollectUsageDataMigration,
|
|
18
19
|
addSendDiagnosticsMigration,
|
|
19
20
|
servicesConfigMigration,
|
|
21
|
+
webSearchProviderRenameMigration,
|
|
20
22
|
];
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "bun:test";
|
|
2
|
-
|
|
3
|
-
import { buildCliProgram } from "../cli/program.js";
|
|
4
|
-
import { CLI_HELP_REFERENCE } from "../cli/reference.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Guard test: CLI_HELP_REFERENCE must stay in sync with the actual CLI help
|
|
8
|
-
* output produced by buildCliProgram().helpInformation().
|
|
9
|
-
*
|
|
10
|
-
* The snapshot in reference.ts is embedded in the system prompt (via
|
|
11
|
-
* system-prompt.ts) so the assistant knows which CLI commands are available.
|
|
12
|
-
* If the actual CLI program drifts from the snapshot, the system prompt will
|
|
13
|
-
* contain stale information.
|
|
14
|
-
*
|
|
15
|
-
* When this test fails, update CLI_HELP_REFERENCE in
|
|
16
|
-
* assistant/src/cli/reference.ts to match the current output of
|
|
17
|
-
* buildCliProgram().helpInformation().
|
|
18
|
-
*/
|
|
19
|
-
describe("CLI_HELP_REFERENCE sync", () => {
|
|
20
|
-
test("CLI_HELP_REFERENCE matches buildCliProgram().helpInformation()", () => {
|
|
21
|
-
const program = buildCliProgram();
|
|
22
|
-
const actual = program.helpInformation();
|
|
23
|
-
|
|
24
|
-
expect(actual).toBe(CLI_HELP_REFERENCE);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
|
5
|
-
|
|
6
|
-
const TEST_DIR = join(
|
|
7
|
-
tmpdir(),
|
|
8
|
-
`vellum-starter-tasks-test-${crypto.randomUUID()}`,
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
import { mock } from "bun:test";
|
|
12
|
-
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
14
|
-
const realPlatform = require("../util/platform.js");
|
|
15
|
-
mock.module("../util/platform.js", () => ({
|
|
16
|
-
...realPlatform,
|
|
17
|
-
getRootDir: () => TEST_DIR,
|
|
18
|
-
getDataDir: () => TEST_DIR,
|
|
19
|
-
getWorkspaceDir: () => TEST_DIR,
|
|
20
|
-
getWorkspaceConfigPath: () => join(TEST_DIR, "config.json"),
|
|
21
|
-
getWorkspaceSkillsDir: () => join(TEST_DIR, "skills"),
|
|
22
|
-
getWorkspaceHooksDir: () => join(TEST_DIR, "hooks"),
|
|
23
|
-
getWorkspacePromptPath: (file: string) => join(TEST_DIR, file),
|
|
24
|
-
ensureDataDir: () => {},
|
|
25
|
-
getPidPath: () => join(TEST_DIR, "vellum.pid"),
|
|
26
|
-
getDbPath: () => join(TEST_DIR, "data", "assistant.db"),
|
|
27
|
-
getLogPath: () => join(TEST_DIR, "logs", "vellum.log"),
|
|
28
|
-
getHistoryPath: () => join(TEST_DIR, "history"),
|
|
29
|
-
getHooksDir: () => join(TEST_DIR, "hooks"),
|
|
30
|
-
|
|
31
|
-
getSandboxRootDir: () => join(TEST_DIR, "sandbox"),
|
|
32
|
-
getSandboxWorkingDir: () => TEST_DIR,
|
|
33
|
-
getInterfacesDir: () => join(TEST_DIR, "interfaces"),
|
|
34
|
-
isMacOS: () => process.platform === "darwin",
|
|
35
|
-
isLinux: () => process.platform === "linux",
|
|
36
|
-
isWindows: () => process.platform === "win32",
|
|
37
|
-
getPlatformName: () => process.platform,
|
|
38
|
-
getClipboardCommand: () => null,
|
|
39
|
-
readSessionToken: () => null,
|
|
40
|
-
readLockfile: () => null,
|
|
41
|
-
writeLockfile: () => {},
|
|
42
|
-
}));
|
|
43
|
-
|
|
44
|
-
const noopLogger = new Proxy({} as Record<string, unknown>, {
|
|
45
|
-
get: (_target, prop) => (prop === "child" ? () => noopLogger : () => {}),
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
49
|
-
const realLogger = require("../util/logger.js");
|
|
50
|
-
mock.module("../util/logger.js", () => ({
|
|
51
|
-
...realLogger,
|
|
52
|
-
getLogger: () => noopLogger,
|
|
53
|
-
getCliLogger: () => noopLogger,
|
|
54
|
-
truncateForLog: (v: string) => v,
|
|
55
|
-
initLogger: () => {},
|
|
56
|
-
pruneOldLogFiles: () => 0,
|
|
57
|
-
}));
|
|
58
|
-
|
|
59
|
-
const { buildStarterTaskPlaybookSection, buildSystemPrompt } =
|
|
60
|
-
await import("../prompts/system-prompt.js");
|
|
61
|
-
|
|
62
|
-
describe("buildStarterTaskPlaybookSection", () => {
|
|
63
|
-
test("returns a string with the section heading", () => {
|
|
64
|
-
const section = buildStarterTaskPlaybookSection();
|
|
65
|
-
expect(section).toContain("## Starter Task Playbooks");
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
test("documents all three kickoff intents", () => {
|
|
69
|
-
const section = buildStarterTaskPlaybookSection();
|
|
70
|
-
expect(section).toContain("[STARTER_TASK:make_it_yours]");
|
|
71
|
-
expect(section).toContain("[STARTER_TASK:research_topic]");
|
|
72
|
-
expect(section).toContain("[STARTER_TASK:research_to_ui]");
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test("includes the make_it_yours playbook", () => {
|
|
76
|
-
const section = buildStarterTaskPlaybookSection();
|
|
77
|
-
expect(section).toContain("### Playbook: make_it_yours");
|
|
78
|
-
expect(section).toContain("accent color");
|
|
79
|
-
expect(section).toContain("Color Preference");
|
|
80
|
-
expect(section).toContain("user_selected");
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test("make_it_yours uses app_file_edit instead of invalid ui_show config_update", () => {
|
|
84
|
-
const section = buildStarterTaskPlaybookSection();
|
|
85
|
-
expect(section).toContain("app_file_edit");
|
|
86
|
-
expect(section).not.toContain("config_update");
|
|
87
|
-
expect(section).not.toContain('surface_type: "config_update"');
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test("includes the research_topic playbook", () => {
|
|
91
|
-
const section = buildStarterTaskPlaybookSection();
|
|
92
|
-
expect(section).toContain("### Playbook: research_topic");
|
|
93
|
-
expect(section).toContain("web search");
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test("includes the research_to_ui playbook", () => {
|
|
97
|
-
const section = buildStarterTaskPlaybookSection();
|
|
98
|
-
expect(section).toContain("### Playbook: research_to_ui");
|
|
99
|
-
expect(section).toContain("app_create");
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
test("includes general rules section", () => {
|
|
103
|
-
const section = buildStarterTaskPlaybookSection();
|
|
104
|
-
expect(section).toContain("### General rules for all starter tasks");
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
test("enforces trust gating in general rules", () => {
|
|
108
|
-
const section = buildStarterTaskPlaybookSection();
|
|
109
|
-
expect(section).toContain("trust gating");
|
|
110
|
-
expect(section).toContain("do NOT ask for elevated permissions");
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test("references USER.md onboarding tasks for status tracking", () => {
|
|
114
|
-
const section = buildStarterTaskPlaybookSection();
|
|
115
|
-
expect(section).toContain("## Onboarding Tasks");
|
|
116
|
-
expect(section).toContain("in_progress");
|
|
117
|
-
expect(section).toContain("done");
|
|
118
|
-
expect(section).toContain("deferred_to_dashboard");
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
test("make_it_yours playbook handles locale confirmation", () => {
|
|
122
|
-
const section = buildStarterTaskPlaybookSection();
|
|
123
|
-
expect(section).toContain("locale");
|
|
124
|
-
expect(section).toContain("confidence: low");
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
test("make_it_yours playbook includes confirmation step", () => {
|
|
128
|
-
const section = buildStarterTaskPlaybookSection();
|
|
129
|
-
expect(section).toContain("Confirm the selection");
|
|
130
|
-
expect(section).toContain("Sound good?");
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
test("research_to_ui playbook references dynamic UI quality standards", () => {
|
|
134
|
-
const section = buildStarterTaskPlaybookSection();
|
|
135
|
-
expect(section).toContain("Dynamic UI quality standards");
|
|
136
|
-
expect(section).toContain("anti-AI-slop");
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
describe("starter task playbook integration with buildSystemPrompt", () => {
|
|
141
|
-
beforeEach(() => {
|
|
142
|
-
mkdirSync(TEST_DIR, { recursive: true });
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
afterEach(() => {
|
|
146
|
-
if (existsSync(TEST_DIR)) {
|
|
147
|
-
rmSync(TEST_DIR, { recursive: true, force: true });
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test("buildSystemPrompt includes the starter task playbook section when BOOTSTRAP.md exists", () => {
|
|
152
|
-
writeFileSync(join(TEST_DIR, "IDENTITY.md"), "I am Vellum.");
|
|
153
|
-
writeFileSync(join(TEST_DIR, "BOOTSTRAP.md"), "# First run");
|
|
154
|
-
const result = buildSystemPrompt();
|
|
155
|
-
expect(result).toContain("## Starter Task Playbooks");
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
test("buildSystemPrompt omits starter task playbooks after onboarding is complete", () => {
|
|
159
|
-
writeFileSync(join(TEST_DIR, "IDENTITY.md"), "I am Vellum.");
|
|
160
|
-
// No BOOTSTRAP.md → onboarding complete
|
|
161
|
-
const result = buildSystemPrompt();
|
|
162
|
-
expect(result).not.toContain("## Starter Task Playbooks");
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
test("starter task playbook and channel awareness both present during onboarding", () => {
|
|
166
|
-
writeFileSync(join(TEST_DIR, "IDENTITY.md"), "I am Vellum.");
|
|
167
|
-
writeFileSync(join(TEST_DIR, "BOOTSTRAP.md"), "# First run");
|
|
168
|
-
const result = buildSystemPrompt();
|
|
169
|
-
const starterIdx = result.indexOf("## Starter Task Playbooks");
|
|
170
|
-
const channelIdx = result.indexOf("## Channel Awareness & Trust Gating");
|
|
171
|
-
expect(starterIdx).toBeGreaterThan(-1);
|
|
172
|
-
expect(channelIdx).toBeGreaterThan(-1);
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
test("all three kickoff intents present in full system prompt during onboarding", () => {
|
|
176
|
-
writeFileSync(join(TEST_DIR, "IDENTITY.md"), "I am Vellum.");
|
|
177
|
-
writeFileSync(join(TEST_DIR, "BOOTSTRAP.md"), "# First run");
|
|
178
|
-
const result = buildSystemPrompt();
|
|
179
|
-
expect(result).toContain("[STARTER_TASK:make_it_yours]");
|
|
180
|
-
expect(result).toContain("[STARTER_TASK:research_topic]");
|
|
181
|
-
expect(result).toContain("[STARTER_TASK:research_to_ui]");
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
test("system prompt does not contain invalid config_update surface type (bare)", () => {
|
|
185
|
-
writeFileSync(join(TEST_DIR, "IDENTITY.md"), "I am Vellum.");
|
|
186
|
-
const result = buildSystemPrompt();
|
|
187
|
-
// voice_config_update is a valid tool name; only bare 'config_update' surface type is invalid
|
|
188
|
-
expect(result).not.toContain('surface_type: "config_update"');
|
|
189
|
-
});
|
|
190
|
-
});
|
package/src/cli/reference.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// Keep this snapshot in sync with buildCliProgram().helpInformation() for the
|
|
2
|
-
// top-level assistant CLI. It deliberately avoids importing the CLI command
|
|
3
|
-
// graph so prompt assembly stays side-effect-free.
|
|
4
|
-
export const CLI_HELP_REFERENCE = `Usage: assistant [options] [command]
|
|
5
|
-
|
|
6
|
-
Local AI assistant
|
|
7
|
-
|
|
8
|
-
Options:
|
|
9
|
-
-V, --version output the version number
|
|
10
|
-
-h, --help display help for command
|
|
11
|
-
|
|
12
|
-
Commands:
|
|
13
|
-
bash [options] <command> Execute a shell command through the assistant process for debugging
|
|
14
|
-
conversations Manage conversations
|
|
15
|
-
config Manage configuration
|
|
16
|
-
keys Manage API keys in secure storage
|
|
17
|
-
credentials [options] Manage credentials in the encrypted vault (API keys, tokens, passwords)
|
|
18
|
-
credential-execution [options] Inspect and manage Credential Execution Service (CES) grants and audit records
|
|
19
|
-
trust Manage trust rules
|
|
20
|
-
memory Manage long-term memory indexing/retrieval
|
|
21
|
-
audit [options] Show recent tool invocations
|
|
22
|
-
avatar Manage the assistant's avatar
|
|
23
|
-
doctor Run diagnostic checks
|
|
24
|
-
hooks Manage hooks
|
|
25
|
-
mcp Manage MCP (Model Context Protocol) servers
|
|
26
|
-
contacts [options] Manage and query the contact graph
|
|
27
|
-
channel-verification-sessions [options] Manage channel verification sessions
|
|
28
|
-
autonomy [options] View and configure autonomy tiers
|
|
29
|
-
completions <shell> Generate shell completion script (e.g. assistant completions bash >> ~/.bashrc)
|
|
30
|
-
notifications [options] Send and inspect notifications through the unified notification router
|
|
31
|
-
platform [options] Manage platform integration for containerized deployments
|
|
32
|
-
oauth [options] Manage OAuth providers, apps, connections, and tokens
|
|
33
|
-
skills Browse and install skills from the Vellum catalog
|
|
34
|
-
browser Browser automation, extension relay, and Chrome CDP management
|
|
35
|
-
usage Query LLM token usage and cost data
|
|
36
|
-
shotgun Start and monitor screen-watch (shotgun) sessions via IPC
|
|
37
|
-
sequence [options] Manage email sequences
|
|
38
|
-
`;
|