@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.
Files changed (457) hide show
  1. package/ARCHITECTURE.md +10 -10
  2. package/Dockerfile +3 -0
  3. package/README.md +11 -11
  4. package/docs/architecture/integrations.md +2 -2
  5. package/docs/architecture/memory.md +3 -4
  6. package/docs/credential-execution-service.md +13 -20
  7. package/node_modules/@vellumai/ces-contracts/src/error.ts +5 -4
  8. package/package.json +1 -1
  9. package/src/__tests__/actor-token-service.test.ts +7 -7
  10. package/src/__tests__/anthropic-provider.test.ts +172 -0
  11. package/src/__tests__/app-builder-tool-scripts.test.ts +15 -1
  12. package/src/__tests__/approval-cascade.test.ts +2 -2
  13. package/src/__tests__/approval-routes-http.test.ts +3 -4
  14. package/src/__tests__/asset-materialize-tool.test.ts +5 -5
  15. package/src/__tests__/asset-search-tool.test.ts +1 -1
  16. package/src/__tests__/assistant-attachments.test.ts +5 -5
  17. package/src/__tests__/assistant-events-sse-hardening.test.ts +1 -1
  18. package/src/__tests__/assistant-feature-flags-integration.test.ts +50 -38
  19. package/src/__tests__/attachments-store.test.ts +2 -2
  20. package/src/__tests__/avatar-e2e.test.ts +5 -3
  21. package/src/__tests__/browser-skill-endstate.test.ts +0 -1
  22. package/src/__tests__/call-routes-http.test.ts +2 -2
  23. package/src/__tests__/callback-handoff-copy.test.ts +1 -1
  24. package/src/__tests__/cancel-resolves-conversation-key.test.ts +158 -0
  25. package/src/__tests__/channel-readiness-routes.test.ts +0 -1
  26. package/src/__tests__/channel-readiness-service.test.ts +0 -1
  27. package/src/__tests__/checker.test.ts +31 -32
  28. package/src/__tests__/chrome-cdp.test.ts +47 -18
  29. package/src/__tests__/claude-code-skill-regression.test.ts +2 -2
  30. package/src/__tests__/config-schema-cmd.test.ts +2 -2
  31. package/src/__tests__/config-schema.test.ts +9 -18
  32. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +1 -1
  33. package/src/__tests__/conversation-abort-tool-results.test.ts +4 -4
  34. package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -2
  35. package/src/__tests__/conversation-agent-loop.test.ts +11 -4
  36. package/src/__tests__/conversation-attachments.test.ts +1 -1
  37. package/src/__tests__/conversation-confirmation-signals.test.ts +2 -2
  38. package/src/__tests__/conversation-error.test.ts +33 -0
  39. package/src/__tests__/conversation-init.benchmark.test.ts +0 -1
  40. package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
  41. package/src/__tests__/conversation-pairing.test.ts +1 -1
  42. package/src/__tests__/conversation-pre-run-repair.test.ts +4 -4
  43. package/src/__tests__/conversation-provider-retry-repair.test.ts +4 -4
  44. package/src/__tests__/conversation-queue.test.ts +23 -14
  45. package/src/__tests__/conversation-routes-slash-commands.test.ts +3 -3
  46. package/src/__tests__/conversation-runtime-assembly.test.ts +204 -185
  47. package/src/__tests__/conversation-seed-composer.test.ts +1 -1
  48. package/src/__tests__/conversation-slash-queue.test.ts +4 -4
  49. package/src/__tests__/conversation-slash-unknown.test.ts +4 -4
  50. package/src/__tests__/conversation-starter-routes.test.ts +291 -0
  51. package/src/__tests__/conversation-wipe.test.ts +438 -0
  52. package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -3
  53. package/src/__tests__/conversation-workspace-injection.test.ts +4 -5
  54. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +4 -5
  55. package/src/__tests__/credential-security-e2e.test.ts +20 -0
  56. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  57. package/src/__tests__/credential-vault-unit.test.ts +227 -0
  58. package/src/__tests__/credentials-cli.test.ts +3 -0
  59. package/src/__tests__/date-context.test.ts +59 -377
  60. package/src/__tests__/drop-capability-card-state-migration.test.ts +169 -0
  61. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +11 -45
  62. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  63. package/src/__tests__/encrypted-store.test.ts +249 -15
  64. package/src/__tests__/ephemeral-permissions.test.ts +4 -5
  65. package/src/__tests__/event-bus.test.ts +3 -3
  66. package/src/__tests__/file-read-tool.test.ts +40 -0
  67. package/src/__tests__/gateway-only-enforcement.test.ts +2 -2
  68. package/src/__tests__/gateway-only-guard.test.ts +1 -0
  69. package/src/__tests__/gemini-image-service.test.ts +4 -4
  70. package/src/__tests__/gemini-provider.test.ts +6 -9
  71. package/src/__tests__/guardian-binding-drift-heal.test.ts +128 -0
  72. package/src/__tests__/guardian-dispatch.test.ts +0 -1
  73. package/src/__tests__/host-file-read-tool.test.ts +87 -0
  74. package/src/__tests__/host-shell-tool.test.ts +6 -6
  75. package/src/__tests__/http-user-message-parity.test.ts +2 -2
  76. package/src/__tests__/identity-intro-cache.test.ts +209 -0
  77. package/src/__tests__/intent-routing.test.ts +51 -99
  78. package/src/__tests__/invite-routes-http.test.ts +5 -0
  79. package/src/__tests__/list-messages-attachments.test.ts +1 -1
  80. package/src/__tests__/managed-proxy-context.test.ts +2 -5
  81. package/src/__tests__/managed-skill-lifecycle.test.ts +8 -8
  82. package/src/__tests__/media-generate-image.test.ts +32 -15
  83. package/src/__tests__/media-reuse-story.e2e.test.ts +1 -1
  84. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +1 -1
  85. package/src/__tests__/memory-lifecycle-e2e.test.ts +24 -18
  86. package/src/__tests__/memory-recall-quality.test.ts +4 -3
  87. package/src/__tests__/memory-regressions.test.ts +86 -90
  88. package/src/__tests__/migration-cross-version-compatibility.test.ts +32 -32
  89. package/src/__tests__/migration-export-http.test.ts +26 -27
  90. package/src/__tests__/migration-import-commit-http.test.ts +165 -37
  91. package/src/__tests__/migration-import-preflight-http.test.ts +81 -20
  92. package/src/__tests__/migration-validate-http.test.ts +16 -16
  93. package/src/__tests__/model-intents.test.ts +2 -2
  94. package/src/__tests__/no-domain-routing-in-prompt-guard.test.ts +1 -1
  95. package/src/__tests__/non-member-access-request.test.ts +3 -3
  96. package/src/__tests__/notification-broadcaster.test.ts +1 -1
  97. package/src/__tests__/notification-decision-fallback.test.ts +2 -2
  98. package/src/__tests__/notification-decision-identity.test.ts +8 -9
  99. package/src/__tests__/notification-decision-strategy.test.ts +1 -1
  100. package/src/__tests__/notification-deep-link.test.ts +1 -1
  101. package/src/__tests__/notification-guardian-path.test.ts +0 -1
  102. package/src/__tests__/notification-schedule-dedup.test.ts +7 -7
  103. package/src/__tests__/oauth-store.test.ts +1 -3
  104. package/src/__tests__/oauth2-gateway-transport.test.ts +6 -1
  105. package/src/__tests__/onboarding-template-contract.test.ts +23 -59
  106. package/src/__tests__/provider-error-scenarios.test.ts +154 -0
  107. package/src/__tests__/provider-fail-open-selection.test.ts +2 -2
  108. package/src/__tests__/provider-managed-proxy-integration.test.ts +8 -9
  109. package/src/__tests__/provider-registry-ollama.test.ts +5 -2
  110. package/src/__tests__/qdrant-manager.test.ts +7 -7
  111. package/src/__tests__/ratelimit.test.ts +0 -74
  112. package/src/__tests__/recording-handler.test.ts +0 -1
  113. package/src/__tests__/require-fresh-approval.test.ts +1 -1
  114. package/src/__tests__/runtime-attachment-metadata.test.ts +1 -1
  115. package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
  116. package/src/__tests__/runtime-events-sse.test.ts +1 -1
  117. package/src/__tests__/scheduler-recurrence.test.ts +46 -2
  118. package/src/__tests__/schema-transforms.test.ts +114 -54
  119. package/src/__tests__/secret-onetime-send.test.ts +20 -0
  120. package/src/__tests__/secret-routes-managed-proxy.test.ts +5 -2
  121. package/src/__tests__/secret-scanner-executor.test.ts +1 -2
  122. package/src/__tests__/send-endpoint-busy.test.ts +63 -4
  123. package/src/__tests__/send-notification-tool.test.ts +2 -2
  124. package/src/__tests__/shell-credential-ref.test.ts +0 -1
  125. package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -2
  126. package/src/__tests__/skill-memory.test.ts +549 -0
  127. package/src/__tests__/skill-script-runner-sandbox.test.ts +1 -2
  128. package/src/__tests__/slack-app-setup-skill-regression.test.ts +37 -0
  129. package/src/__tests__/slack-channel-config.test.ts +109 -94
  130. package/src/__tests__/swarm-conversation-integration.test.ts +2 -2
  131. package/src/__tests__/swarm-recursion.test.ts +2 -2
  132. package/src/__tests__/swarm-tool.test.ts +2 -2
  133. package/src/__tests__/system-prompt.test.ts +19 -66
  134. package/src/__tests__/telegram-config.test.ts +121 -0
  135. package/src/__tests__/terminal-tools.test.ts +1 -1
  136. package/src/__tests__/tool-execution-abort-cleanup.test.ts +1 -2
  137. package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -1
  138. package/src/__tests__/tool-executor-shell-integration.test.ts +1 -1
  139. package/src/__tests__/tool-executor.test.ts +1 -1
  140. package/src/__tests__/trace-emitter.test.ts +8 -1
  141. package/src/__tests__/trust-store.test.ts +7 -8
  142. package/src/__tests__/twilio-routes.test.ts +1 -18
  143. package/src/__tests__/user-reference.test.ts +82 -2
  144. package/src/__tests__/vbundle-pax-and-symlink.test.ts +196 -0
  145. package/src/__tests__/verification-control-plane-policy.test.ts +1 -1
  146. package/src/approvals/guardian-request-resolvers.ts +3 -3
  147. package/src/avatar/ascii-renderer.ts +2 -2
  148. package/src/avatar/png-renderer.ts +2 -2
  149. package/src/avatar/resvg-lazy.ts +21 -0
  150. package/src/calls/guardian-dispatch.ts +1 -1
  151. package/src/calls/relay-access-wait.ts +2 -2
  152. package/src/calls/twilio-rest.ts +0 -248
  153. package/src/cli/AGENTS.md +5 -8
  154. package/src/cli/__tests__/notifications.test.ts +5 -5
  155. package/src/cli/commands/avatar.ts +64 -2
  156. package/src/cli/commands/conversations.ts +131 -1
  157. package/src/cli/commands/credentials.ts +2 -0
  158. package/src/cli/commands/notifications.ts +3 -3
  159. package/src/cli.ts +10 -0
  160. package/src/config/bundled-skills/acp/SKILL.md +5 -5
  161. package/src/config/bundled-skills/acp/TOOLS.json +6 -6
  162. package/src/config/bundled-skills/app-builder/SKILL.md +42 -42
  163. package/src/config/bundled-skills/app-builder/TOOLS.json +10 -10
  164. package/src/config/bundled-skills/browser/SKILL.md +15 -15
  165. package/src/config/bundled-skills/browser/TOOLS.json +14 -14
  166. package/src/config/bundled-skills/chatgpt-import/SKILL.md +2 -2
  167. package/src/config/bundled-skills/chatgpt-import/TOOLS.json +1 -1
  168. package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
  169. package/src/config/bundled-skills/claude-code/SKILL.md +5 -5
  170. package/src/config/bundled-skills/computer-use/SKILL.md +2 -2
  171. package/src/config/bundled-skills/computer-use/TOOLS.json +15 -15
  172. package/src/config/bundled-skills/contacts/SKILL.md +3 -3
  173. package/src/config/bundled-skills/contacts/TOOLS.json +4 -4
  174. package/src/config/bundled-skills/document/SKILL.md +4 -4
  175. package/src/config/bundled-skills/document/TOOLS.json +2 -2
  176. package/src/config/bundled-skills/followups/TOOLS.json +3 -3
  177. package/src/config/bundled-skills/gmail/SKILL.md +32 -32
  178. package/src/config/bundled-skills/gmail/TOOLS.json +16 -16
  179. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +1 -1
  180. package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +1 -1
  181. package/src/config/bundled-skills/google-calendar/SKILL.md +1 -1
  182. package/src/config/bundled-skills/google-calendar/TOOLS.json +5 -5
  183. package/src/config/bundled-skills/google-calendar/types.ts +1 -1
  184. package/src/config/bundled-skills/heartbeat/SKILL.md +43 -0
  185. package/src/config/bundled-skills/image-studio/SKILL.md +3 -3
  186. package/src/config/bundled-skills/image-studio/TOOLS.json +2 -3
  187. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +16 -12
  188. package/src/config/bundled-skills/media-processing/SKILL.md +40 -40
  189. package/src/config/bundled-skills/media-processing/TOOLS.json +8 -8
  190. package/src/config/bundled-skills/media-processing/__tests__/concurrency-pool.test.ts +2 -2
  191. package/src/config/bundled-skills/media-processing/__tests__/preprocess.test.ts +1 -1
  192. package/src/config/bundled-skills/media-processing/services/gemini-map.ts +5 -5
  193. package/src/config/bundled-skills/media-processing/services/gemini-video.ts +2 -2
  194. package/src/config/bundled-skills/media-processing/services/preprocess.ts +2 -2
  195. package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +2 -2
  196. package/src/config/bundled-skills/media-processing/services/reduce.ts +3 -3
  197. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +2 -2
  198. package/src/config/bundled-skills/media-processing/tools/query-media-events.ts +1 -1
  199. package/src/config/bundled-skills/messaging/SKILL.md +29 -25
  200. package/src/config/bundled-skills/messaging/TOOLS.json +11 -11
  201. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +1 -1
  202. package/src/config/bundled-skills/messaging/tools/shared.ts +1 -1
  203. package/src/config/bundled-skills/notifications/SKILL.md +3 -3
  204. package/src/config/bundled-skills/notifications/TOOLS.json +2 -2
  205. package/src/config/bundled-skills/notifications/tools/send-notification.ts +3 -3
  206. package/src/config/bundled-skills/orchestration/SKILL.md +1 -1
  207. package/src/config/bundled-skills/orchestration/TOOLS.json +1 -1
  208. package/src/config/bundled-skills/phone-calls/SKILL.md +18 -14
  209. package/src/config/bundled-skills/phone-calls/TOOLS.json +3 -3
  210. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +2 -2
  211. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +2 -2
  212. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +1 -1
  213. package/src/config/bundled-skills/playbooks/TOOLS.json +4 -4
  214. package/src/config/bundled-skills/schedule/SKILL.md +26 -26
  215. package/src/config/bundled-skills/schedule/TOOLS.json +5 -5
  216. package/src/config/bundled-skills/screen-watch/SKILL.md +3 -3
  217. package/src/config/bundled-skills/screen-watch/TOOLS.json +1 -1
  218. package/src/config/bundled-skills/sequences/SKILL.md +2 -2
  219. package/src/config/bundled-skills/sequences/TOOLS.json +10 -10
  220. package/src/config/bundled-skills/sequences/tools/sequence-analytics.ts +2 -2
  221. package/src/config/bundled-skills/sequences/tools/sequence-enroll.ts +2 -2
  222. package/src/config/bundled-skills/sequences/tools/sequence-enrollment-list.ts +1 -1
  223. package/src/config/bundled-skills/sequences/tools/sequence-get.ts +1 -1
  224. package/src/config/bundled-skills/sequences/tools/sequence-import.ts +3 -3
  225. package/src/config/bundled-skills/sequences/tools/sequence-list.ts +1 -1
  226. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +1 -1
  227. package/src/config/bundled-skills/settings/TOOLS.json +3 -3
  228. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +1 -1
  229. package/src/config/bundled-skills/skill-management/TOOLS.json +5 -5
  230. package/src/config/bundled-skills/skills-catalog/SKILL.md +84 -0
  231. package/src/config/bundled-skills/slack/SKILL.md +2 -2
  232. package/src/config/bundled-skills/slack/TOOLS.json +8 -8
  233. package/src/config/bundled-skills/slack/tools/slack-scan-digest.ts +3 -3
  234. package/src/config/bundled-skills/subagent/TOOLS.json +5 -5
  235. package/src/config/bundled-skills/tasks/SKILL.md +1 -1
  236. package/src/config/bundled-skills/tasks/TOOLS.json +9 -9
  237. package/src/config/bundled-skills/transcribe/SKILL.md +5 -5
  238. package/src/config/bundled-skills/transcribe/TOOLS.json +1 -1
  239. package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +10 -10
  240. package/src/config/bundled-skills/watcher/SKILL.md +4 -4
  241. package/src/config/bundled-skills/watcher/TOOLS.json +5 -5
  242. package/src/config/feature-flag-registry.json +33 -17
  243. package/src/config/schemas/sandbox.ts +1 -1
  244. package/src/config/schemas/services.ts +13 -3
  245. package/src/config/schemas/timeouts.ts +0 -10
  246. package/src/contacts/contact-store.ts +63 -0
  247. package/src/contacts/contacts-write.ts +1 -1
  248. package/src/daemon/assistant-attachments.ts +2 -2
  249. package/src/daemon/conversation-agent-loop-handlers.ts +2 -2
  250. package/src/daemon/conversation-agent-loop.ts +7 -30
  251. package/src/daemon/conversation-error.ts +24 -0
  252. package/src/daemon/conversation-memory.ts +8 -7
  253. package/src/daemon/conversation-runtime-assembly.ts +141 -275
  254. package/src/daemon/conversation-slash.ts +7 -26
  255. package/src/daemon/conversation-surfaces.ts +14 -0
  256. package/src/daemon/conversation-tool-setup.ts +9 -8
  257. package/src/daemon/conversation.ts +2 -0
  258. package/src/daemon/daemon-control.ts +1 -1
  259. package/src/daemon/date-context.ts +10 -83
  260. package/src/daemon/handlers/config-channels.ts +12 -2
  261. package/src/daemon/handlers/config-slack-channel.ts +7 -1
  262. package/src/daemon/handlers/config-telegram.ts +6 -1
  263. package/src/daemon/handlers/conversations.ts +2 -2
  264. package/src/daemon/handlers/skills.ts +4 -0
  265. package/src/daemon/lifecycle.ts +28 -4
  266. package/src/daemon/providers-setup.ts +1 -1
  267. package/src/daemon/server.ts +1 -5
  268. package/src/daemon/shutdown-handlers.ts +9 -3
  269. package/src/daemon/tool-side-effects.ts +40 -0
  270. package/src/daemon/trace-emitter.ts +26 -2
  271. package/src/events/domain-events.ts +1 -1
  272. package/src/events/tool-permission-telemetry-listener.ts +46 -0
  273. package/src/inbound/platform-callback-registration.ts +0 -18
  274. package/src/media/app-icon-generator.ts +15 -8
  275. package/src/media/avatar-router.ts +15 -8
  276. package/src/media/gemini-image-service.ts +125 -21
  277. package/src/memory/attachments-store.ts +3 -3
  278. package/src/memory/channel-verification-sessions.ts +6 -6
  279. package/src/memory/conversation-crud.ts +196 -1
  280. package/src/memory/{thread-starters-cadence.ts → conversation-starters-cadence.ts} +9 -42
  281. package/src/memory/conversation-title-service.ts +2 -3
  282. package/src/memory/db-init.ts +25 -1
  283. package/src/memory/invite-store.ts +4 -4
  284. package/src/memory/items-extractor.ts +4 -4
  285. package/src/memory/job-handlers/{thread-starters.ts → conversation-starters.ts} +123 -38
  286. package/src/memory/jobs-store.ts +3 -2
  287. package/src/memory/jobs-worker.ts +7 -5
  288. package/src/memory/lifecycle-events-store.ts +63 -0
  289. package/src/memory/migrations/172-rename-created-by-session-id.ts +27 -0
  290. package/src/memory/migrations/173-rename-source-session-id.ts +16 -0
  291. package/src/memory/migrations/174-rename-thread-starters-table.ts +52 -0
  292. package/src/memory/migrations/175-create-lifecycle-events.ts +15 -0
  293. package/src/memory/migrations/176-drop-capability-card-state.ts +36 -0
  294. package/src/memory/migrations/177-create-trace-events-table.ts +40 -0
  295. package/src/memory/migrations/index.ts +6 -0
  296. package/src/memory/migrations/registry.ts +13 -0
  297. package/src/memory/retriever.test.ts +223 -96
  298. package/src/memory/retriever.ts +115 -138
  299. package/src/memory/schema/calls.ts +1 -1
  300. package/src/memory/schema/contacts.ts +1 -1
  301. package/src/memory/schema/infrastructure.ts +29 -0
  302. package/src/memory/schema/memory-core.ts +7 -17
  303. package/src/memory/schema/notifications.ts +1 -1
  304. package/src/memory/search/formatting.ts +23 -6
  305. package/src/memory/search/lexical.ts +2 -0
  306. package/src/memory/search/semantic.ts +2 -0
  307. package/src/memory/search/staleness.ts +5 -1
  308. package/src/memory/search/types.ts +4 -0
  309. package/src/memory/task-memory-cleanup.ts +96 -6
  310. package/src/memory/trace-event-store.ts +148 -0
  311. package/src/notifications/README.md +1 -1
  312. package/src/notifications/decision-engine.ts +45 -4
  313. package/src/notifications/emit-signal.ts +5 -4
  314. package/src/notifications/events-store.ts +4 -4
  315. package/src/notifications/signal.ts +1 -1
  316. package/src/oauth/manual-token-connection.ts +49 -25
  317. package/src/permissions/checker.ts +6 -5
  318. package/src/permissions/defaults.ts +4 -4
  319. package/src/prompts/__tests__/build-cli-reference-section.test.ts +9 -90
  320. package/src/prompts/cache-boundary.ts +8 -0
  321. package/src/prompts/system-prompt.ts +105 -634
  322. package/src/prompts/templates/BOOTSTRAP.md +172 -33
  323. package/src/prompts/templates/IDENTITY.md +8 -24
  324. package/src/prompts/templates/SOUL.md +20 -41
  325. package/src/prompts/templates/USER.md +3 -19
  326. package/src/prompts/user-reference.ts +14 -16
  327. package/src/providers/anthropic/client.ts +51 -19
  328. package/src/providers/gemini/client.ts +6 -9
  329. package/src/providers/managed-proxy/constants.ts +1 -7
  330. package/src/providers/managed-proxy/context.ts +0 -1
  331. package/src/providers/model-intents.ts +5 -5
  332. package/src/providers/openai/client.ts +10 -1
  333. package/src/providers/openrouter/client.ts +1 -0
  334. package/src/providers/ratelimit.ts +0 -35
  335. package/src/providers/registry.ts +3 -5
  336. package/src/providers/retry.ts +18 -1
  337. package/src/runtime/access-request-helper.ts +16 -2
  338. package/src/runtime/auth/route-policy.ts +7 -0
  339. package/src/runtime/channel-verification-service.ts +1 -1
  340. package/src/runtime/confirmation-request-guardian-bridge.ts +1 -1
  341. package/src/runtime/guardian-vellum-migration.ts +61 -1
  342. package/src/runtime/http-server.ts +8 -4
  343. package/src/runtime/migrations/vbundle-builder.ts +212 -32
  344. package/src/runtime/migrations/vbundle-import-analyzer.ts +74 -8
  345. package/src/runtime/migrations/vbundle-importer.ts +66 -1
  346. package/src/runtime/migrations/vbundle-validator.ts +17 -3
  347. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +4 -4
  348. package/src/runtime/routes/attachment-routes.ts +2 -2
  349. package/src/runtime/routes/btw-routes.ts +93 -0
  350. package/src/runtime/routes/channel-verification-routes.ts +19 -2
  351. package/src/runtime/routes/conversation-management-routes.ts +55 -1
  352. package/src/runtime/routes/conversation-query-routes.ts +1 -1
  353. package/src/runtime/routes/conversation-routes.ts +49 -5
  354. package/src/runtime/routes/conversation-starter-routes.ts +207 -0
  355. package/src/runtime/routes/guardian-bootstrap-routes.ts +13 -9
  356. package/src/runtime/routes/identity-intro-cache.ts +105 -0
  357. package/src/runtime/routes/identity-routes.ts +51 -0
  358. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +1 -1
  359. package/src/runtime/routes/inbound-stages/verification-intercept.ts +1 -1
  360. package/src/runtime/routes/migration-routes.ts +25 -13
  361. package/src/runtime/routes/secret-routes.ts +18 -0
  362. package/src/runtime/routes/settings-routes.ts +9 -9
  363. package/src/runtime/routes/telemetry-routes.ts +53 -0
  364. package/src/runtime/routes/trace-event-routes.ts +62 -0
  365. package/src/runtime/tool-grant-request-helper.ts +1 -1
  366. package/src/runtime/verification-outbound-actions.ts +47 -31
  367. package/src/security/encrypted-store.ts +262 -78
  368. package/src/skills/catalog-install.ts +10 -0
  369. package/src/skills/managed-store.ts +2 -0
  370. package/src/skills/skill-memory.ts +222 -0
  371. package/src/subagent/manager.ts +1 -4
  372. package/src/telemetry/types.ts +10 -1
  373. package/src/telemetry/usage-telemetry-reporter.test.ts +7 -2
  374. package/src/telemetry/usage-telemetry-reporter.ts +53 -4
  375. package/src/tools/AGENTS.md +11 -11
  376. package/src/tools/acp/spawn.ts +1 -1
  377. package/src/tools/apps/executors.ts +8 -8
  378. package/src/tools/apps/registry.ts +1 -1
  379. package/src/tools/assets/materialize.ts +6 -6
  380. package/src/tools/assets/search.ts +10 -10
  381. package/src/tools/browser/__tests__/auth-cache.test.ts +2 -2
  382. package/src/tools/browser/__tests__/auth-detector.test.ts +4 -4
  383. package/src/tools/browser/auth-detector.ts +6 -6
  384. package/src/tools/browser/browser-execution.ts +13 -13
  385. package/src/tools/browser/browser-manager.ts +3 -3
  386. package/src/tools/browser/chrome-cdp.ts +5 -5
  387. package/src/tools/browser/jit-auth.ts +2 -2
  388. package/src/tools/browser/network-recorder.test.ts +2 -2
  389. package/src/tools/browser/network-recorder.ts +3 -3
  390. package/src/tools/browser/runtime-check.ts +3 -3
  391. package/src/tools/claude-code/claude-code.ts +2 -2
  392. package/src/tools/computer-use/definitions.ts +18 -18
  393. package/src/tools/credential-execution/make-authenticated-request.ts +4 -4
  394. package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -3
  395. package/src/tools/credential-execution/run-authenticated-command.ts +4 -4
  396. package/src/tools/credentials/broker-types.ts +5 -5
  397. package/src/tools/credentials/broker.ts +15 -15
  398. package/src/tools/credentials/metadata-store.ts +2 -2
  399. package/src/tools/credentials/resolve.ts +1 -1
  400. package/src/tools/credentials/selection.ts +1 -1
  401. package/src/tools/credentials/tool-policy.ts +1 -1
  402. package/src/tools/credentials/vault.ts +115 -25
  403. package/src/tools/execution-target.ts +2 -2
  404. package/src/tools/executor.ts +7 -7
  405. package/src/tools/filesystem/edit.ts +2 -2
  406. package/src/tools/filesystem/read.ts +15 -4
  407. package/src/tools/filesystem/write.ts +1 -1
  408. package/src/tools/host-filesystem/edit.ts +2 -1
  409. package/src/tools/host-filesystem/read.ts +18 -1
  410. package/src/tools/host-filesystem/write.ts +1 -1
  411. package/src/tools/host-terminal/host-shell.ts +9 -8
  412. package/src/tools/mcp/mcp-tool-factory.ts +7 -6
  413. package/src/tools/memory/definitions.ts +6 -5
  414. package/src/tools/memory/handlers.test.ts +1 -1
  415. package/src/tools/network/__tests__/web-search.test.ts +3 -3
  416. package/src/tools/network/domain-normalize.ts +2 -2
  417. package/src/tools/network/script-proxy/session-manager.ts +10 -10
  418. package/src/tools/network/web-fetch.ts +1 -1
  419. package/src/tools/network/web-search.ts +3 -3
  420. package/src/tools/permission-checker.ts +8 -8
  421. package/src/tools/registry.ts +7 -7
  422. package/src/tools/schedule/list.ts +2 -2
  423. package/src/tools/schema-transforms.ts +31 -21
  424. package/src/tools/secret-detection-handler.ts +1 -1
  425. package/src/tools/sensitive-output-placeholders.ts +1 -1
  426. package/src/tools/shared/filesystem/edit-engine.ts +1 -1
  427. package/src/tools/shared/filesystem/file-ops-service.ts +3 -3
  428. package/src/tools/shared/filesystem/image-read.ts +25 -5
  429. package/src/tools/shared/filesystem/path-policy.ts +2 -2
  430. package/src/tools/shared/shell-output.ts +1 -1
  431. package/src/tools/side-effects.ts +1 -1
  432. package/src/tools/skills/execute.ts +1 -1
  433. package/src/tools/skills/load.ts +3 -3
  434. package/src/tools/skills/sandbox-runner.ts +3 -3
  435. package/src/tools/subagent/read.ts +1 -1
  436. package/src/tools/subagent/spawn.ts +2 -2
  437. package/src/tools/swarm/delegate.ts +3 -3
  438. package/src/tools/system/request-permission.ts +5 -4
  439. package/src/tools/terminal/backends/native.ts +4 -4
  440. package/src/tools/terminal/parser.ts +6 -6
  441. package/src/tools/terminal/sandbox-diagnostics.ts +1 -1
  442. package/src/tools/terminal/shell.ts +16 -16
  443. package/src/tools/tool-approval-handler.ts +21 -12
  444. package/src/tools/tool-manifest.ts +4 -4
  445. package/src/tools/types.ts +3 -3
  446. package/src/tools/ui-surface/definitions.ts +9 -37
  447. package/src/tools/watcher/list.ts +1 -1
  448. package/src/util/logger.ts +7 -2
  449. package/src/util/pricing.ts +4 -0
  450. package/src/util/retry.ts +29 -1
  451. package/src/workspace/migrations/007-web-search-provider-rename.ts +37 -0
  452. package/src/workspace/migrations/registry.ts +2 -0
  453. package/src/__tests__/cli-help-reference-sync.test.ts +0 -26
  454. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -190
  455. package/src/cli/reference.ts +0 -38
  456. package/src/memory/job-handlers/capability-cards.ts +0 -420
  457. 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}) last: ${lastPoll}`,
78
+ ` - [${status}] ${w.name} (${w.providerId}) - last: ${lastPoll}`,
79
79
  );
80
80
  }
81
81
 
@@ -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 { getDebugStdoutLogs } from "../config/env-registry.js";
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
- if (!process.stdout.isTTY) {
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,
@@ -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 both the error itself and one level of `cause` chain.
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
- });
@@ -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
- `;