@vellumai/assistant 0.5.5 → 0.5.7

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 (382) hide show
  1. package/.env.example +16 -2
  2. package/ARCHITECTURE.md +6 -75
  3. package/Dockerfile +4 -5
  4. package/README.md +0 -2
  5. package/bun.lock +0 -414
  6. package/docs/architecture/keychain-broker.md +45 -240
  7. package/docs/architecture/security.md +0 -17
  8. package/docs/credential-execution-service.md +2 -2
  9. package/node_modules/@vellumai/ces-contracts/package.json +1 -0
  10. package/node_modules/@vellumai/ces-contracts/src/rpc.ts +119 -0
  11. package/node_modules/@vellumai/credential-storage/package.json +1 -0
  12. package/node_modules/@vellumai/egress-proxy/package.json +1 -0
  13. package/package.json +2 -3
  14. package/src/__tests__/actor-token-service.test.ts +1 -2
  15. package/src/__tests__/assistant-feature-flags-integration.test.ts +30 -29
  16. package/src/__tests__/browser-skill-endstate.test.ts +6 -5
  17. package/src/__tests__/btw-routes.test.ts +0 -39
  18. package/src/__tests__/call-domain.test.ts +0 -128
  19. package/src/__tests__/ces-rpc-credential-backend.test.ts +199 -0
  20. package/src/__tests__/channel-approval-routes.test.ts +0 -5
  21. package/src/__tests__/channel-readiness-service.test.ts +1 -60
  22. package/src/__tests__/checker.test.ts +4 -2
  23. package/src/__tests__/cli-command-risk-guard.test.ts +112 -0
  24. package/src/__tests__/config-schema-cmd.test.ts +0 -1
  25. package/src/__tests__/config-schema.test.ts +3 -3
  26. package/src/__tests__/context-window-manager.test.ts +78 -0
  27. package/src/__tests__/conversation-attention-telegram.test.ts +0 -5
  28. package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
  29. package/src/__tests__/conversation-skill-tools.test.ts +0 -54
  30. package/src/__tests__/conversation-title-service.test.ts +117 -1
  31. package/src/__tests__/credential-execution-feature-gates.test.ts +28 -14
  32. package/src/__tests__/credential-execution-managed-contract.test.ts +33 -18
  33. package/src/__tests__/credential-security-e2e.test.ts +0 -66
  34. package/src/__tests__/credential-security-invariants.test.ts +4 -45
  35. package/src/__tests__/credentials-cli.test.ts +78 -0
  36. package/src/__tests__/db-migration-rollback.test.ts +2015 -1
  37. package/src/__tests__/docker-signing-key-bootstrap.test.ts +98 -0
  38. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +6 -4
  39. package/src/__tests__/guardian-routing-state.test.ts +0 -5
  40. package/src/__tests__/host-shell-tool.test.ts +6 -7
  41. package/src/__tests__/http-user-message-parity.test.ts +3 -103
  42. package/src/__tests__/inbound-invite-redemption.test.ts +0 -4
  43. package/src/__tests__/inline-skill-load-permissions.test.ts +6 -8
  44. package/src/__tests__/intent-routing.test.ts +0 -13
  45. package/src/__tests__/jobs-store-qdrant-breaker.test.ts +178 -0
  46. package/src/__tests__/keychain-broker-client.test.ts +161 -22
  47. package/src/__tests__/memory-jobs-worker-backoff.test.ts +150 -0
  48. package/src/__tests__/memory-regressions.test.ts +8 -30
  49. package/src/__tests__/migration-export-http.test.ts +2 -2
  50. package/src/__tests__/migration-import-commit-http.test.ts +2 -2
  51. package/src/__tests__/migration-import-preflight-http.test.ts +2 -2
  52. package/src/__tests__/migration-validate-http.test.ts +2 -2
  53. package/src/__tests__/non-member-access-request.test.ts +0 -5
  54. package/src/__tests__/notification-decision-fallback.test.ts +4 -0
  55. package/src/__tests__/notification-decision-identity.test.ts +4 -0
  56. package/src/__tests__/permission-types.test.ts +1 -0
  57. package/src/__tests__/provider-managed-proxy-integration.test.ts +5 -6
  58. package/src/__tests__/qdrant-manager.test.ts +28 -2
  59. package/src/__tests__/registry.test.ts +0 -6
  60. package/src/__tests__/require-fresh-approval.test.ts +4 -0
  61. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -4
  62. package/src/__tests__/secret-routes-managed-proxy.test.ts +0 -4
  63. package/src/__tests__/secure-keys.test.ts +83 -263
  64. package/src/__tests__/shell-identity.test.ts +96 -6
  65. package/src/__tests__/skill-feature-flags-integration.test.ts +22 -14
  66. package/src/__tests__/skill-feature-flags.test.ts +46 -45
  67. package/src/__tests__/skill-load-feature-flag.test.ts +7 -10
  68. package/src/__tests__/skill-load-inline-command.test.ts +8 -12
  69. package/src/__tests__/skill-load-inline-includes.test.ts +6 -10
  70. package/src/__tests__/skill-load-tool.test.ts +0 -2
  71. package/src/__tests__/skill-projection-feature-flag.test.ts +33 -29
  72. package/src/__tests__/skills.test.ts +0 -2
  73. package/src/__tests__/slack-inbound-verification.test.ts +0 -4
  74. package/src/__tests__/suggestion-routes.test.ts +1 -32
  75. package/src/__tests__/system-prompt.test.ts +0 -1
  76. package/src/__tests__/tool-executor-lifecycle-events.test.ts +4 -0
  77. package/src/__tests__/tool-executor-shell-integration.test.ts +5 -3
  78. package/src/__tests__/tool-executor.test.ts +4 -0
  79. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -5
  80. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -4
  81. package/src/__tests__/update-bulletin.test.ts +0 -2
  82. package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +6 -9
  83. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -6
  84. package/src/__tests__/workspace-migration-015-migrate-credentials-to-keychain.test.ts +252 -0
  85. package/src/__tests__/workspace-migration-016-migrate-credentials-from-keychain.test.ts +218 -0
  86. package/src/__tests__/workspace-migration-down-functions.test.ts +1009 -0
  87. package/src/__tests__/workspace-migrations-runner.test.ts +114 -0
  88. package/src/calls/audio-store.test.ts +97 -0
  89. package/src/calls/audio-store.ts +205 -0
  90. package/src/calls/call-controller.ts +85 -7
  91. package/src/calls/call-domain.ts +3 -0
  92. package/src/calls/call-store.ts +10 -3
  93. package/src/calls/fish-audio-client.ts +117 -0
  94. package/src/calls/relay-server.ts +27 -0
  95. package/src/calls/twilio-routes.ts +2 -1
  96. package/src/calls/types.ts +1 -0
  97. package/src/calls/voice-ingress-preflight.ts +0 -42
  98. package/src/calls/voice-quality.ts +26 -5
  99. package/src/calls/voice-session-bridge.ts +6 -12
  100. package/src/cli/commands/config.ts +1 -4
  101. package/src/cli/commands/conversations.ts +0 -18
  102. package/src/cli/commands/credentials.ts +34 -4
  103. package/src/cli/commands/oauth/index.ts +7 -0
  104. package/src/cli/commands/oauth/platform.ts +179 -0
  105. package/src/cli/commands/platform.ts +3 -3
  106. package/src/config/assistant-feature-flags.ts +186 -5
  107. package/src/config/bundled-skills/messaging/SKILL.md +5 -5
  108. package/src/config/bundled-skills/phone-calls/TOOLS.json +4 -0
  109. package/src/config/bundled-skills/settings/TOOLS.json +2 -2
  110. package/src/config/bundled-skills/settings/tools/voice-config-update.ts +42 -0
  111. package/src/config/bundled-tool-registry.ts +1 -11
  112. package/src/config/env-registry.ts +1 -1
  113. package/src/config/env.ts +16 -16
  114. package/src/config/feature-flag-registry.json +48 -16
  115. package/src/config/loader.ts +98 -31
  116. package/src/config/schema.ts +4 -25
  117. package/src/config/schemas/calls.ts +13 -0
  118. package/src/config/schemas/fish-audio.ts +39 -0
  119. package/src/config/schemas/memory.ts +0 -4
  120. package/src/config/schemas/platform.ts +1 -1
  121. package/src/config/schemas/security.ts +4 -4
  122. package/src/config/types.ts +0 -1
  123. package/src/contacts/contact-store.ts +39 -0
  124. package/src/contacts/types.ts +2 -0
  125. package/src/context/window-manager.ts +53 -2
  126. package/src/credential-execution/approval-bridge.ts +1 -0
  127. package/src/credential-execution/executable-discovery.ts +28 -4
  128. package/src/credential-execution/feature-gates.ts +16 -0
  129. package/src/credential-execution/process-manager.ts +38 -0
  130. package/src/daemon/assistant-attachments.ts +9 -0
  131. package/src/daemon/config-watcher.ts +6 -4
  132. package/src/daemon/conversation-agent-loop.ts +0 -60
  133. package/src/daemon/conversation-memory.ts +0 -117
  134. package/src/daemon/conversation-runtime-assembly.ts +0 -2
  135. package/src/daemon/conversation-tool-setup.ts +0 -105
  136. package/src/daemon/conversation.ts +10 -1
  137. package/src/daemon/handlers/config-vercel.ts +92 -0
  138. package/src/daemon/handlers/conversations.ts +0 -11
  139. package/src/daemon/handlers/skills.ts +2 -15
  140. package/src/daemon/install-symlink.ts +195 -0
  141. package/src/daemon/lifecycle.ts +229 -96
  142. package/src/daemon/message-types/conversations.ts +3 -4
  143. package/src/daemon/message-types/diagnostics.ts +3 -22
  144. package/src/daemon/message-types/messages.ts +0 -2
  145. package/src/daemon/message-types/upgrades.ts +8 -0
  146. package/src/daemon/server.ts +30 -92
  147. package/src/events/domain-events.ts +2 -1
  148. package/src/followups/followup-store.ts +5 -2
  149. package/src/inbound/platform-callback-registration.ts +3 -3
  150. package/src/instrument.ts +8 -5
  151. package/src/memory/conversation-crud.ts +0 -236
  152. package/src/memory/conversation-title-service.ts +76 -11
  153. package/src/memory/db-init.ts +15 -11
  154. package/src/memory/indexer.ts +15 -106
  155. package/src/memory/items-extractor.ts +15 -1
  156. package/src/memory/job-handlers/conversation-starters.ts +4 -1
  157. package/src/memory/job-handlers/embedding.ts +0 -79
  158. package/src/memory/job-utils.ts +1 -1
  159. package/src/memory/jobs-store.ts +30 -13
  160. package/src/memory/jobs-worker.ts +31 -27
  161. package/src/memory/migrations/001-job-deferrals.ts +19 -0
  162. package/src/memory/migrations/004-entity-relation-dedup.ts +10 -0
  163. package/src/memory/migrations/005-fingerprint-scope-unique.ts +76 -0
  164. package/src/memory/migrations/006-scope-salted-fingerprints.ts +50 -0
  165. package/src/memory/migrations/007-assistant-id-to-self.ts +10 -0
  166. package/src/memory/migrations/008-remove-assistant-id-columns.ts +34 -0
  167. package/src/memory/migrations/009-llm-usage-events-drop-assistant-id.ts +26 -0
  168. package/src/memory/migrations/014-backfill-inbox-thread-state.ts +10 -0
  169. package/src/memory/migrations/015-drop-active-search-index.ts +17 -0
  170. package/src/memory/migrations/019-notification-tables-schema-migration.ts +12 -0
  171. package/src/memory/migrations/020-rename-macos-ios-channel-to-vellum.ts +121 -0
  172. package/src/memory/migrations/024-embedding-vector-blob.ts +74 -0
  173. package/src/memory/migrations/026a-embeddings-nullable-vector-json.ts +82 -0
  174. package/src/memory/migrations/036-normalize-phone-identities.ts +11 -0
  175. package/src/memory/migrations/116-messages-fts.ts +106 -1
  176. package/src/memory/migrations/126-backfill-guardian-principal-id.ts +52 -0
  177. package/src/memory/migrations/127-guardian-principal-id-not-null.ts +77 -0
  178. package/src/memory/migrations/134-contacts-notes-column.ts +13 -0
  179. package/src/memory/migrations/135-backfill-contact-interaction-stats.ts +20 -0
  180. package/src/memory/migrations/136-drop-assistant-id-columns.ts +52 -0
  181. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +13 -0
  182. package/src/memory/migrations/141-rename-verification-table.ts +54 -0
  183. package/src/memory/migrations/142-rename-verification-session-id-column.ts +25 -0
  184. package/src/memory/migrations/143-rename-guardian-verification-values.ts +35 -0
  185. package/src/memory/migrations/144-rename-voice-to-phone.ts +136 -0
  186. package/src/memory/migrations/145-drop-accounts-table.ts +32 -0
  187. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +14 -1
  188. package/src/memory/migrations/148-drop-reminders-table.ts +35 -1
  189. package/src/memory/migrations/150-oauth-apps-client-secret-path.ts +69 -1
  190. package/src/memory/migrations/162-guardian-timestamps-epoch-ms.ts +290 -0
  191. package/src/memory/migrations/169-rename-gmail-provider-key-to-google.ts +51 -1
  192. package/src/memory/migrations/174-rename-thread-starters-table.ts +47 -1
  193. package/src/memory/migrations/176-drop-capability-card-state.ts +13 -0
  194. package/src/memory/migrations/180-backfill-inline-attachments-to-disk.ts +16 -0
  195. package/src/memory/migrations/181-rename-thread-starters-checkpoints.ts +28 -1
  196. package/src/memory/migrations/189-drop-simplified-memory.ts +42 -0
  197. package/src/memory/migrations/190-call-session-skip-disclosure.ts +15 -0
  198. package/src/memory/migrations/191-backfill-audio-attachment-mime-types.ts +64 -0
  199. package/src/memory/migrations/192-contacts-user-file-column.ts +15 -0
  200. package/src/memory/migrations/index.ts +5 -3
  201. package/src/memory/migrations/registry.ts +90 -0
  202. package/src/memory/migrations/validate-migration-state.ts +137 -11
  203. package/src/memory/qdrant-circuit-breaker.ts +9 -0
  204. package/src/memory/qdrant-client.ts +4 -6
  205. package/src/memory/qdrant-manager.ts +64 -7
  206. package/src/memory/schema/calls.ts +1 -0
  207. package/src/memory/schema/contacts.ts +1 -0
  208. package/src/memory/schema/conversations.ts +0 -3
  209. package/src/memory/schema/index.ts +0 -2
  210. package/src/messaging/draft-store.ts +2 -2
  211. package/src/notifications/decision-engine.ts +4 -1
  212. package/src/oauth/connection-resolver.ts +6 -4
  213. package/src/permissions/checker.ts +0 -38
  214. package/src/permissions/defaults.ts +3 -3
  215. package/src/permissions/shell-identity.ts +76 -22
  216. package/src/permissions/trust-client.ts +2 -13
  217. package/src/permissions/trust-store.ts +8 -3
  218. package/src/permissions/types.ts +4 -2
  219. package/src/platform/client.ts +35 -7
  220. package/src/prompts/persona-resolver.ts +138 -0
  221. package/src/prompts/system-prompt.ts +36 -4
  222. package/src/prompts/templates/users/default.md +1 -0
  223. package/src/providers/registry.ts +27 -40
  224. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  225. package/src/runtime/auth/__tests__/external-assistant-id.test.ts +13 -68
  226. package/src/runtime/auth/external-assistant-id.ts +13 -59
  227. package/src/runtime/auth/route-policy.ts +29 -1
  228. package/src/runtime/auth/token-service.ts +53 -15
  229. package/src/runtime/channel-readiness-service.ts +1 -16
  230. package/src/runtime/http-server.ts +29 -2
  231. package/src/runtime/middleware/error-handler.ts +1 -9
  232. package/src/runtime/routes/audio-routes.ts +40 -0
  233. package/src/runtime/routes/btw-routes.ts +0 -17
  234. package/src/runtime/routes/conversation-management-routes.ts +0 -36
  235. package/src/runtime/routes/conversation-query-routes.ts +106 -2
  236. package/src/runtime/routes/conversation-routes.ts +4 -43
  237. package/src/runtime/routes/diagnostics-routes.ts +1 -477
  238. package/src/runtime/routes/identity-routes.ts +18 -29
  239. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -33
  240. package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +1 -1
  241. package/src/runtime/routes/integrations/vercel.ts +89 -0
  242. package/src/runtime/routes/log-export-routes.ts +5 -0
  243. package/src/runtime/routes/memory-item-routes.test.ts +221 -3
  244. package/src/runtime/routes/memory-item-routes.ts +144 -4
  245. package/src/runtime/routes/migration-rollback-routes.ts +209 -0
  246. package/src/runtime/routes/migration-routes.ts +17 -1
  247. package/src/runtime/routes/notification-routes.ts +58 -0
  248. package/src/runtime/routes/schedule-routes.ts +65 -0
  249. package/src/runtime/routes/settings-routes.ts +41 -1
  250. package/src/runtime/routes/tts-routes.ts +86 -0
  251. package/src/runtime/routes/upgrade-broadcast-routes.ts +175 -0
  252. package/src/runtime/routes/workspace-commit-routes.ts +62 -0
  253. package/src/runtime/routes/workspace-routes.test.ts +22 -1
  254. package/src/runtime/routes/workspace-routes.ts +1 -1
  255. package/src/runtime/routes/workspace-utils.ts +86 -2
  256. package/src/schedule/schedule-store.ts +0 -21
  257. package/src/security/ces-credential-client.ts +59 -22
  258. package/src/security/ces-rpc-credential-backend.ts +85 -0
  259. package/src/security/credential-backend.ts +12 -88
  260. package/src/security/keychain-broker-client.ts +10 -2
  261. package/src/security/secure-keys.ts +94 -113
  262. package/src/skills/catalog-install.ts +13 -7
  263. package/src/skills/inline-command-render.ts +5 -1
  264. package/src/skills/inline-command-runner.ts +30 -2
  265. package/src/telemetry/usage-telemetry-reporter.ts +4 -2
  266. package/src/tools/calls/call-start.ts +1 -0
  267. package/src/tools/executor.ts +0 -4
  268. package/src/tools/memory/handlers.ts +1 -129
  269. package/src/tools/network/script-proxy/session-manager.ts +19 -4
  270. package/src/tools/network/web-fetch.ts +3 -1
  271. package/src/tools/permission-checker.ts +18 -0
  272. package/src/tools/skills/execute.ts +1 -1
  273. package/src/tools/skills/load.ts +9 -2
  274. package/src/tools/types.ts +0 -8
  275. package/src/util/errors.ts +0 -12
  276. package/src/util/platform.ts +8 -55
  277. package/src/util/xml.ts +8 -0
  278. package/src/workspace/git-service.ts +5 -2
  279. package/src/workspace/heartbeat-service.ts +5 -24
  280. package/src/workspace/migrations/001-avatar-rename.ts +15 -0
  281. package/src/workspace/migrations/003-seed-device-id.ts +17 -1
  282. package/src/workspace/migrations/004-extract-collect-usage-data.ts +33 -0
  283. package/src/workspace/migrations/005-add-send-diagnostics.ts +3 -0
  284. package/src/workspace/migrations/006-services-config.ts +49 -0
  285. package/src/workspace/migrations/007-web-search-provider-rename.ts +27 -0
  286. package/src/workspace/migrations/008-voice-timeout-and-max-steps.ts +3 -0
  287. package/src/workspace/migrations/009-backfill-conversation-disk-view.ts +4 -0
  288. package/src/workspace/migrations/010-app-dir-rename.ts +78 -0
  289. package/src/workspace/migrations/011-backfill-installation-id.ts +11 -0
  290. package/src/workspace/migrations/012-rename-conversation-disk-view-dirs.ts +44 -0
  291. package/src/workspace/migrations/013-repair-conversation-disk-view.ts +5 -0
  292. package/src/workspace/migrations/015-migrate-credentials-to-keychain.ts +153 -0
  293. package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +156 -0
  294. package/src/workspace/migrations/016-migrate-credentials-from-keychain.ts +150 -0
  295. package/src/workspace/migrations/017-seed-persona-dirs.ts +95 -0
  296. package/src/workspace/migrations/migrate-to-workspace-volume.ts +23 -1
  297. package/src/workspace/migrations/registry.ts +8 -0
  298. package/src/workspace/migrations/runner.ts +106 -2
  299. package/src/workspace/migrations/types.ts +4 -0
  300. package/src/__tests__/archive-recall.test.ts +0 -560
  301. package/src/__tests__/claude-code-skill-regression.test.ts +0 -206
  302. package/src/__tests__/claude-code-tool-profiles.test.ts +0 -99
  303. package/src/__tests__/conversation-memory-dirty-tail.test.ts +0 -150
  304. package/src/__tests__/conversation-switch-memory-reduction.test.ts +0 -474
  305. package/src/__tests__/db-memory-archive-migration.test.ts +0 -372
  306. package/src/__tests__/db-memory-brief-state-migration.test.ts +0 -213
  307. package/src/__tests__/db-memory-reducer-checkpoints.test.ts +0 -273
  308. package/src/__tests__/diagnostics-export.test.ts +0 -288
  309. package/src/__tests__/local-gateway-health.test.ts +0 -209
  310. package/src/__tests__/memory-brief-open-loops.test.ts +0 -530
  311. package/src/__tests__/memory-brief-time.test.ts +0 -285
  312. package/src/__tests__/memory-brief-wrapper.test.ts +0 -311
  313. package/src/__tests__/memory-chunk-archive.test.ts +0 -400
  314. package/src/__tests__/memory-chunk-dual-write.test.ts +0 -453
  315. package/src/__tests__/memory-episode-archive.test.ts +0 -370
  316. package/src/__tests__/memory-episode-dual-write.test.ts +0 -626
  317. package/src/__tests__/memory-observation-archive.test.ts +0 -375
  318. package/src/__tests__/memory-observation-dual-write.test.ts +0 -318
  319. package/src/__tests__/memory-reducer-job.test.ts +0 -538
  320. package/src/__tests__/memory-reducer-scheduling.test.ts +0 -473
  321. package/src/__tests__/memory-reducer-store.test.ts +0 -728
  322. package/src/__tests__/memory-reducer-types.test.ts +0 -707
  323. package/src/__tests__/memory-reducer.test.ts +0 -704
  324. package/src/__tests__/memory-simplified-config.test.ts +0 -281
  325. package/src/__tests__/secret-ingress-handler.test.ts +0 -120
  326. package/src/__tests__/simplified-memory-e2e.test.ts +0 -666
  327. package/src/__tests__/simplified-memory-runtime.test.ts +0 -616
  328. package/src/__tests__/swarm-conversation-integration.test.ts +0 -358
  329. package/src/__tests__/swarm-dag-pathological.test.ts +0 -547
  330. package/src/__tests__/swarm-orchestrator.test.ts +0 -463
  331. package/src/__tests__/swarm-plan-validator.test.ts +0 -384
  332. package/src/__tests__/swarm-recursion.test.ts +0 -197
  333. package/src/__tests__/swarm-router-planner.test.ts +0 -234
  334. package/src/__tests__/swarm-tool.test.ts +0 -185
  335. package/src/__tests__/swarm-worker-backend.test.ts +0 -144
  336. package/src/__tests__/swarm-worker-runner.test.ts +0 -288
  337. package/src/commands/__tests__/cc-command-registry.test.ts +0 -396
  338. package/src/commands/cc-command-registry.ts +0 -248
  339. package/src/config/bundled-skills/claude-code/SKILL.md +0 -53
  340. package/src/config/bundled-skills/claude-code/TOOLS.json +0 -47
  341. package/src/config/bundled-skills/claude-code/tools/claude-code.ts +0 -12
  342. package/src/config/bundled-skills/orchestration/SKILL.md +0 -33
  343. package/src/config/bundled-skills/orchestration/TOOLS.json +0 -35
  344. package/src/config/bundled-skills/orchestration/tools/swarm-delegate.ts +0 -12
  345. package/src/config/schemas/memory-simplified.ts +0 -101
  346. package/src/config/schemas/swarm.ts +0 -82
  347. package/src/logfire.ts +0 -135
  348. package/src/memory/archive-recall.ts +0 -516
  349. package/src/memory/archive-store.ts +0 -400
  350. package/src/memory/brief-formatting.ts +0 -33
  351. package/src/memory/brief-open-loops.ts +0 -266
  352. package/src/memory/brief-time.ts +0 -162
  353. package/src/memory/brief.ts +0 -75
  354. package/src/memory/job-handlers/backfill-simplified-memory.ts +0 -462
  355. package/src/memory/job-handlers/reduce-conversation-memory.ts +0 -229
  356. package/src/memory/migrations/185-memory-brief-state.ts +0 -52
  357. package/src/memory/migrations/186-memory-archive.ts +0 -109
  358. package/src/memory/migrations/187-memory-reducer-checkpoints.ts +0 -19
  359. package/src/memory/reducer-scheduler.ts +0 -242
  360. package/src/memory/reducer-store.ts +0 -271
  361. package/src/memory/reducer-types.ts +0 -106
  362. package/src/memory/reducer.ts +0 -467
  363. package/src/memory/schema/memory-archive.ts +0 -121
  364. package/src/memory/schema/memory-brief.ts +0 -55
  365. package/src/runtime/local-gateway-health.ts +0 -275
  366. package/src/security/secret-ingress.ts +0 -68
  367. package/src/swarm/backend-claude-code.ts +0 -225
  368. package/src/swarm/checkpoint.ts +0 -137
  369. package/src/swarm/graph-utils.ts +0 -53
  370. package/src/swarm/index.ts +0 -55
  371. package/src/swarm/limits.ts +0 -66
  372. package/src/swarm/orchestrator.ts +0 -424
  373. package/src/swarm/plan-validator.ts +0 -117
  374. package/src/swarm/router-planner.ts +0 -162
  375. package/src/swarm/router-prompts.ts +0 -39
  376. package/src/swarm/synthesizer.ts +0 -81
  377. package/src/swarm/types.ts +0 -72
  378. package/src/swarm/worker-backend.ts +0 -131
  379. package/src/swarm/worker-prompts.ts +0 -80
  380. package/src/swarm/worker-runner.ts +0 -170
  381. package/src/tools/claude-code/claude-code.ts +0 -610
  382. package/src/tools/swarm/delegate.ts +0 -205
@@ -1,206 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { describe, expect, mock, spyOn, test } from "bun:test";
4
-
5
- // ---------------------------------------------------------------------------
6
- // Mocks — must be set up before importing modules that use them
7
- // ---------------------------------------------------------------------------
8
-
9
- mock.module("@anthropic-ai/claude-agent-sdk", () => ({
10
- query: () => ({
11
- async *[Symbol.asyncIterator]() {
12
- yield {
13
- type: "result" as const,
14
- session_id: "s",
15
- subtype: "success" as const,
16
- result: "ok",
17
- };
18
- },
19
- }),
20
- }));
21
-
22
- mock.module("../util/logger.js", () => ({
23
- getLogger: () =>
24
- new Proxy({} as Record<string, unknown>, {
25
- get: () => () => {},
26
- }),
27
- }));
28
-
29
- mock.module("../config/loader.js", () => ({
30
- getConfig: () => ({
31
- ui: {},
32
- services: {
33
- inference: {
34
- mode: "your-own",
35
- provider: "anthropic",
36
- model: "claude-opus-4-6",
37
- },
38
- "image-generation": {
39
- mode: "your-own",
40
- provider: "gemini",
41
- model: "gemini-3.1-flash-image-preview",
42
- },
43
- "web-search": { mode: "your-own", provider: "inference-provider-native" },
44
- },
45
- }),
46
- loadConfig: () => ({}),
47
- loadRawConfig: () => ({}),
48
- saveConfig: () => {},
49
- saveRawConfig: () => {},
50
- invalidateConfigCache: () => {},
51
- getNestedValue: () => undefined,
52
- setNestedValue: () => {},
53
- syncConfigToLockfile: () => {},
54
- }));
55
-
56
- mock.module("../security/secure-keys.js", () => ({
57
- getSecureKeyAsync: async (name: string) =>
58
- name === "anthropic" ? "fake-anthropic-key" : null,
59
- getProviderKeyAsync: async (provider: string) =>
60
- provider === "anthropic" ? "fake-anthropic-key" : undefined,
61
- }));
62
-
63
- // ---------------------------------------------------------------------------
64
- // Imports (after mocks)
65
- // ---------------------------------------------------------------------------
66
-
67
- import { claudeCodeTool } from "../tools/claude-code/claude-code.js";
68
-
69
- // ---------------------------------------------------------------------------
70
- // Locate the bundled skill directory relative to the test file
71
- // ---------------------------------------------------------------------------
72
-
73
- const SKILL_DIR = path.resolve(
74
- import.meta.dirname ?? __dirname,
75
- "../config/bundled-skills/claude-code",
76
- );
77
-
78
- const SHARED_DIR = path.resolve(
79
- import.meta.dirname ?? __dirname,
80
- "../config/bundled-skills/_shared",
81
- );
82
-
83
- // ---------------------------------------------------------------------------
84
- // Tests
85
- // ---------------------------------------------------------------------------
86
-
87
- describe("Claude Code skill migration regression", () => {
88
- test("skill script wrapper exports a `run` function", async () => {
89
- const wrapperPath = path.join(SKILL_DIR, "tools/claude-code.ts");
90
- // The wrapper module must exist and export `run`
91
- const mod = await import(wrapperPath);
92
- expect(typeof mod.run).toBe("function");
93
- });
94
-
95
- test("TOOLS.json manifest lists claude_code as the tool name", () => {
96
- const manifestPath = path.join(SKILL_DIR, "TOOLS.json");
97
- const raw = fs.readFileSync(manifestPath, "utf-8");
98
- const manifest = JSON.parse(raw);
99
-
100
- expect(manifest.version).toBe(1);
101
- expect(Array.isArray(manifest.tools)).toBe(true);
102
-
103
- const toolNames = manifest.tools.map((t: { name: string }) => t.name);
104
- expect(toolNames).toContain("claude_code");
105
- });
106
-
107
- test("TOOLS.json input_schema matches claudeCodeTool.getDefinition()", () => {
108
- const manifestPath = path.join(SKILL_DIR, "TOOLS.json");
109
- const raw = fs.readFileSync(manifestPath, "utf-8");
110
- const manifest = JSON.parse(raw);
111
-
112
- const manifestTool = manifest.tools.find(
113
- (t: { name: string }) => t.name === "claude_code",
114
- );
115
- expect(manifestTool).toBeDefined();
116
-
117
- const runtimeDef = claudeCodeTool.getDefinition();
118
-
119
- // The input_schema declared in the static manifest must match the
120
- // runtime definition. Drift here would mean the model sees a different
121
- // schema than the executor actually supports.
122
- expect(manifestTool.input_schema).toEqual(runtimeDef.input_schema);
123
- });
124
-
125
- test("TOOLS.json description matches claudeCodeTool.getDefinition()", () => {
126
- const manifestPath = path.join(SKILL_DIR, "TOOLS.json");
127
- const raw = fs.readFileSync(manifestPath, "utf-8");
128
- const manifest = JSON.parse(raw);
129
-
130
- const manifestTool = manifest.tools.find(
131
- (t: { name: string }) => t.name === "claude_code",
132
- );
133
- expect(manifestTool).toBeDefined();
134
-
135
- const runtimeDef = claudeCodeTool.getDefinition();
136
-
137
- // Description parity guards against a manifest edit that diverges from
138
- // the canonical tool description.
139
- expect(manifestTool.description).toBe(runtimeDef.description);
140
- });
141
-
142
- test("wrapper run() delegates to claudeCodeTool.execute()", async () => {
143
- // Verifies the wrapper is not a stale stub but actually calls through
144
- // to the canonical execute method with the exact input and context.
145
- const spy = spyOn(claudeCodeTool, "execute");
146
-
147
- const wrapperPath = path.join(SKILL_DIR, "tools/claude-code.ts");
148
- const mod = await import(wrapperPath);
149
-
150
- const input = { prompt: "hello" };
151
- const ctx = {
152
- conversationId: "test",
153
- workingDir: "/tmp",
154
- onOutput: () => {},
155
- };
156
-
157
- const result = await mod.run(input, ctx);
158
- expect(result.isError).toBeFalsy();
159
-
160
- // The wrapper must delegate to the canonical execute method
161
- expect(spy).toHaveBeenCalledTimes(1);
162
- expect(spy).toHaveBeenCalledWith(input, ctx);
163
-
164
- spy.mockRestore();
165
- });
166
- });
167
-
168
- // ---------------------------------------------------------------------------
169
- // Bundled skill shared guidance — CES tools instead of token-reveal
170
- // ---------------------------------------------------------------------------
171
-
172
- describe("CLI_RETRIEVAL_PATTERN.md CES guidance", () => {
173
- const patternPath = path.join(SHARED_DIR, "CLI_RETRIEVAL_PATTERN.md");
174
- const content = fs.readFileSync(patternPath, "utf-8");
175
-
176
- test("teaches handle discovery via assistant credentials list", () => {
177
- expect(content).toContain("assistant credentials list");
178
- });
179
-
180
- test("teaches handle discovery via assistant oauth connections list", () => {
181
- expect(content).toContain("assistant oauth connections list");
182
- });
183
-
184
- test("teaches make_authenticated_request CES tool", () => {
185
- expect(content).toContain("make_authenticated_request");
186
- });
187
-
188
- test("teaches run_authenticated_command CES tool", () => {
189
- expect(content).toContain("run_authenticated_command");
190
- });
191
-
192
- test("warns that host_bash is outside CES secrecy boundary", () => {
193
- expect(content).toContain("outside the CES secrecy boundary");
194
- });
195
-
196
- // -- Deprecated patterns must NOT appear --
197
-
198
- test("does not teach proxied bash with credential_ids", () => {
199
- expect(content).not.toContain("credential_ids");
200
- expect(content).not.toContain("network_mode: proxied");
201
- });
202
-
203
- test("does not teach oauth connections token for raw token extraction", () => {
204
- expect(content).not.toContain("oauth connections token");
205
- });
206
- });
@@ -1,99 +0,0 @@
1
- import { beforeEach, describe, expect, mock, test } from "bun:test";
2
-
3
- // ---------------------------------------------------------------------------
4
- // Mock the Agent SDK — prevents real subprocess spawning
5
- // ---------------------------------------------------------------------------
6
- const queryMock = mock(() => {
7
- // Returns an async iterable that yields a success result
8
- return {
9
- async *[Symbol.asyncIterator]() {
10
- yield {
11
- type: "result" as const,
12
- session_id: "test-session",
13
- subtype: "success" as const,
14
- result: "Done.",
15
- };
16
- },
17
- };
18
- });
19
-
20
- mock.module("@anthropic-ai/claude-agent-sdk", () => ({
21
- query: queryMock,
22
- }));
23
-
24
- // Mock logger
25
- mock.module("../util/logger.js", () => ({
26
- getLogger: () =>
27
- new Proxy({} as Record<string, unknown>, {
28
- get: () => () => {},
29
- }),
30
- }));
31
-
32
- // Mock config
33
- mock.module("../config/loader.js", () => ({
34
- getConfig: () => ({
35
- ui: {},
36
- }),
37
- }));
38
-
39
- // Mock secure-keys — provide a fake Anthropic API key
40
- mock.module("../security/secure-keys.js", () => ({
41
- getSecureKeyAsync: async (name: string) =>
42
- name === "anthropic" ? "fake-anthropic-key" : null,
43
- getProviderKeyAsync: async (provider: string) =>
44
- provider === "anthropic" ? "fake-anthropic-key" : undefined,
45
- }));
46
-
47
- import { claudeCodeTool } from "../tools/claude-code/claude-code.js";
48
- import type { ToolContext } from "../tools/types.js";
49
-
50
- function makeContext(overrides?: Partial<ToolContext>): ToolContext {
51
- return {
52
- conversationId: "test-session",
53
- workingDir: "/tmp/test",
54
- trustClass: "guardian",
55
- onOutput: () => {},
56
- ...overrides,
57
- } as ToolContext;
58
- }
59
-
60
- describe("claude_code tool profile support", () => {
61
- beforeEach(() => {
62
- queryMock.mockClear();
63
- });
64
-
65
- test("getDefinition includes profile parameter", () => {
66
- const def = claudeCodeTool.getDefinition();
67
- const props = (def.input_schema as Record<string, unknown>)
68
- .properties as Record<string, unknown>;
69
- expect(props.profile).toBeDefined();
70
- });
71
-
72
- test("rejects invalid profile", async () => {
73
- const result = await claudeCodeTool.execute(
74
- { prompt: "test", profile: "hacker" },
75
- makeContext(),
76
- );
77
- expect(result.isError).toBe(true);
78
- expect(result.content).toContain("Invalid profile");
79
- });
80
-
81
- test("accepts valid profiles without error", async () => {
82
- for (const profile of ["general", "researcher", "coder", "reviewer"]) {
83
- queryMock.mockClear();
84
- const result = await claudeCodeTool.execute(
85
- { prompt: "test", profile },
86
- makeContext(),
87
- );
88
- expect(result.isError).toBeFalsy();
89
- }
90
- });
91
-
92
- test("omitted profile defaults to general", async () => {
93
- const result = await claudeCodeTool.execute(
94
- { prompt: "test" },
95
- makeContext(),
96
- );
97
- expect(result.isError).toBeFalsy();
98
- });
99
- });
@@ -1,150 +0,0 @@
1
- import { mkdtempSync, rmSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test";
5
-
6
- const testDir = mkdtempSync(join(tmpdir(), "conv-dirty-tail-test-"));
7
-
8
- mock.module("../util/platform.js", () => ({
9
- getDataDir: () => testDir,
10
- isMacOS: () => process.platform === "darwin",
11
- isLinux: () => process.platform === "linux",
12
- isWindows: () => process.platform === "win32",
13
- getPidPath: () => join(testDir, "test.pid"),
14
- getDbPath: () => join(testDir, "test.db"),
15
- getLogPath: () => join(testDir, "test.log"),
16
- ensureDataDir: () => {},
17
- }));
18
-
19
- mock.module("../util/logger.js", () => ({
20
- getLogger: () =>
21
- new Proxy({} as Record<string, unknown>, {
22
- get: () => () => {},
23
- }),
24
- }));
25
-
26
- import {
27
- addMessage,
28
- createConversation,
29
- getConversation,
30
- getMessages,
31
- markConversationMemoryDirty,
32
- } from "../memory/conversation-crud.js";
33
- import { getDb, initializeDb, resetDb } from "../memory/db.js";
34
-
35
- initializeDb();
36
-
37
- afterAll(() => {
38
- resetDb();
39
- try {
40
- rmSync(testDir, { recursive: true });
41
- } catch {
42
- /* best effort */
43
- }
44
- });
45
-
46
- describe("markConversationMemoryDirty", () => {
47
- beforeEach(() => {
48
- const db = getDb();
49
- db.run(`DELETE FROM messages`);
50
- db.run(`DELETE FROM conversations`);
51
- });
52
-
53
- test("first message marks the conversation dirty with its message ID", async () => {
54
- const conv = createConversation("test");
55
- const msg = await addMessage(conv.id, "user", "hello world", undefined, {
56
- skipIndexing: true,
57
- });
58
-
59
- const updated = getConversation(conv.id);
60
- expect(updated).not.toBeNull();
61
- expect(updated!.memoryDirtyTailSinceMessageId).toBe(msg.id);
62
- });
63
-
64
- test("repeated messages preserve the original dirty boundary", async () => {
65
- const conv = createConversation("test");
66
- const msg1 = await addMessage(conv.id, "user", "first message", undefined, {
67
- skipIndexing: true,
68
- });
69
- const msg2 = await addMessage(
70
- conv.id,
71
- "assistant",
72
- "second message",
73
- undefined,
74
- { skipIndexing: true },
75
- );
76
-
77
- const updated = getConversation(conv.id);
78
- expect(updated).not.toBeNull();
79
- // The dirty tail should still point to msg1, not msg2.
80
- expect(updated!.memoryDirtyTailSinceMessageId).toBe(msg1.id);
81
- // msg2 should still be persisted normally.
82
- expect(msg2.id).not.toBe(msg1.id);
83
- });
84
-
85
- test("markConversationMemoryDirty is a no-op when already dirty", () => {
86
- const conv = createConversation("test");
87
- const firstMessageId = "first-msg-id";
88
- const secondMessageId = "second-msg-id";
89
-
90
- markConversationMemoryDirty(conv.id, firstMessageId);
91
- const after1 = getConversation(conv.id);
92
- expect(after1!.memoryDirtyTailSinceMessageId).toBe(firstMessageId);
93
-
94
- markConversationMemoryDirty(conv.id, secondMessageId);
95
- const after2 = getConversation(conv.id);
96
- // Still points to the first message — boundary preserved.
97
- expect(after2!.memoryDirtyTailSinceMessageId).toBe(firstMessageId);
98
- });
99
-
100
- test("message ordering and persistence semantics are unchanged", async () => {
101
- const conv = createConversation("test");
102
- const msg1 = await addMessage(conv.id, "user", "question", undefined, {
103
- skipIndexing: true,
104
- });
105
- const msg2 = await addMessage(conv.id, "assistant", "answer", undefined, {
106
- skipIndexing: true,
107
- });
108
- const msg3 = await addMessage(conv.id, "user", "follow-up", undefined, {
109
- skipIndexing: true,
110
- });
111
-
112
- const allMessages = getMessages(conv.id);
113
- expect(allMessages).toHaveLength(3);
114
- // Messages are ordered by createdAt ascending.
115
- expect(allMessages[0].id).toBe(msg1.id);
116
- expect(allMessages[1].id).toBe(msg2.id);
117
- expect(allMessages[2].id).toBe(msg3.id);
118
- expect(allMessages[0].content).toBe("question");
119
- expect(allMessages[1].content).toBe("answer");
120
- expect(allMessages[2].content).toBe("follow-up");
121
- // createdAt is monotonically increasing.
122
- expect(allMessages[1].createdAt).toBeGreaterThan(allMessages[0].createdAt);
123
- expect(allMessages[2].createdAt).toBeGreaterThan(allMessages[1].createdAt);
124
- });
125
-
126
- test("every persisted message marks the conversation dirty", async () => {
127
- const conv = createConversation("test");
128
-
129
- // Before any messages, the conversation is not dirty.
130
- const before = getConversation(conv.id);
131
- expect(before!.memoryDirtyTailSinceMessageId).toBeNull();
132
-
133
- // After the first message, it becomes dirty.
134
- const msg1 = await addMessage(conv.id, "user", "msg1", undefined, {
135
- skipIndexing: true,
136
- });
137
- const after1 = getConversation(conv.id);
138
- expect(after1!.memoryDirtyTailSinceMessageId).toBe(msg1.id);
139
-
140
- // After subsequent messages, the dirty boundary stays on msg1.
141
- await addMessage(conv.id, "assistant", "msg2", undefined, {
142
- skipIndexing: true,
143
- });
144
- await addMessage(conv.id, "user", "msg3", undefined, {
145
- skipIndexing: true,
146
- });
147
- const afterAll = getConversation(conv.id);
148
- expect(afterAll!.memoryDirtyTailSinceMessageId).toBe(msg1.id);
149
- });
150
- });