@desplega.ai/agent-swarm 1.49.0 → 1.52.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 (547) hide show
  1. package/README.md +1 -1
  2. package/openapi.json +2070 -728
  3. package/package.json +10 -1
  4. package/src/agentmail/handlers.ts +65 -10
  5. package/src/agentmail/templates.ts +111 -0
  6. package/src/be/db.ts +1233 -7
  7. package/src/be/migrations/014_prompt_templates.sql +33 -0
  8. package/src/be/migrations/015_workflow_workspace.sql +3 -0
  9. package/src/be/migrations/016_active_session_runner_session.sql +4 -0
  10. package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
  11. package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
  12. package/src/be/migrations/019_skills.sql +65 -0
  13. package/src/be/migrations/020_approval_requests.sql +41 -0
  14. package/src/be/seed.ts +62 -0
  15. package/src/be/skill-parser.ts +70 -0
  16. package/src/be/skill-sync.ts +106 -0
  17. package/src/commands/runner.ts +320 -132
  18. package/src/commands/templates.ts +172 -0
  19. package/src/github/handlers.ts +292 -77
  20. package/src/github/mentions-aliases.test.ts +73 -0
  21. package/src/github/mentions.test.ts +3 -3
  22. package/src/github/mentions.ts +32 -6
  23. package/src/github/templates.ts +398 -0
  24. package/src/gitlab/handlers.ts +63 -22
  25. package/src/gitlab/templates.ts +140 -0
  26. package/src/heartbeat/heartbeat.ts +19 -10
  27. package/src/heartbeat/templates.ts +30 -0
  28. package/src/http/active-sessions.ts +27 -0
  29. package/src/http/approval-requests.ts +247 -0
  30. package/src/http/config.ts +3 -3
  31. package/src/http/index.ts +9 -2
  32. package/src/http/poll.ts +135 -14
  33. package/src/http/prompt-templates.ts +412 -0
  34. package/src/http/schedules.ts +35 -0
  35. package/src/http/skills.ts +479 -0
  36. package/src/http/workflows.ts +8 -0
  37. package/src/linear/sync.ts +28 -4
  38. package/src/linear/templates.ts +47 -0
  39. package/src/prompts/base-prompt.ts +41 -490
  40. package/src/prompts/registry.ts +57 -0
  41. package/src/prompts/resolver.ts +296 -0
  42. package/src/prompts/session-templates.ts +604 -0
  43. package/src/providers/claude-adapter.ts +15 -2
  44. package/src/providers/pi-mono-extension.ts +5 -1
  45. package/src/scheduler/scheduler.ts +125 -91
  46. package/src/server.ts +44 -0
  47. package/src/slack/assistant.ts +7 -4
  48. package/src/slack/channel-activity.ts +177 -0
  49. package/src/slack/handlers.ts +21 -6
  50. package/src/slack/templates.ts +55 -0
  51. package/src/tests/approval-requests.test.ts +735 -0
  52. package/src/tests/artifact-sdk.test.ts +12 -12
  53. package/src/tests/base-prompt.test.ts +49 -49
  54. package/src/tests/channel-activity.test.ts +363 -0
  55. package/src/tests/heartbeat.test.ts +1 -0
  56. package/src/tests/linear-webhook.test.ts +7 -3
  57. package/src/tests/pool-session-logs.test.ts +199 -0
  58. package/src/tests/prompt-template-github.test.ts +682 -0
  59. package/src/tests/prompt-template-remaining.test.ts +504 -0
  60. package/src/tests/prompt-template-resolver.test.ts +621 -0
  61. package/src/tests/prompt-template-session.test.ts +363 -0
  62. package/src/tests/prompt-templates-db.test.ts +616 -0
  63. package/src/tests/self-improvement.test.ts +8 -7
  64. package/src/tests/skill-parser.test.ts +178 -0
  65. package/src/tests/skill-sync.test.ts +171 -0
  66. package/src/tests/slack-metadata-inheritance.test.ts +1 -1
  67. package/src/tests/slack-thread-followups.test.ts +1 -1
  68. package/src/tests/structured-output.test.ts +0 -4
  69. package/src/tests/tool-annotations.test.ts +2 -1
  70. package/src/tests/update-profile-agentid.test.ts +248 -0
  71. package/src/tests/update-profile-auth.test.ts +195 -0
  72. package/src/tests/workflow-async-v2.test.ts +126 -4
  73. package/src/tests/workflow-definition-validation.test.ts +76 -0
  74. package/src/tests/workflow-executors.test.ts +4 -2
  75. package/src/tests/workflow-retry-v2.test.ts +1 -1
  76. package/src/tests/workflow-schedule-trigger.test.ts +104 -0
  77. package/src/tests/workflow-workspace.test.ts +272 -0
  78. package/src/tools/prompt-templates/delete.ts +86 -0
  79. package/src/tools/prompt-templates/get.ts +89 -0
  80. package/src/tools/prompt-templates/index.ts +5 -0
  81. package/src/tools/prompt-templates/list.ts +95 -0
  82. package/src/tools/prompt-templates/preview.ts +84 -0
  83. package/src/tools/prompt-templates/set.ts +117 -0
  84. package/src/tools/request-human-input.ts +106 -0
  85. package/src/tools/skills/index.ts +11 -0
  86. package/src/tools/skills/skill-create.ts +105 -0
  87. package/src/tools/skills/skill-delete.ts +67 -0
  88. package/src/tools/skills/skill-get.ts +75 -0
  89. package/src/tools/skills/skill-install-remote.ts +152 -0
  90. package/src/tools/skills/skill-install.ts +101 -0
  91. package/src/tools/skills/skill-list.ts +77 -0
  92. package/src/tools/skills/skill-publish.ts +123 -0
  93. package/src/tools/skills/skill-search.ts +43 -0
  94. package/src/tools/skills/skill-sync-remote.ts +128 -0
  95. package/src/tools/skills/skill-uninstall.ts +60 -0
  96. package/src/tools/skills/skill-update.ts +128 -0
  97. package/src/tools/store-progress.ts +22 -4
  98. package/src/tools/task-action.ts +20 -0
  99. package/src/tools/templates.ts +53 -0
  100. package/src/tools/tool-config.ts +23 -0
  101. package/src/tools/update-profile.ts +106 -34
  102. package/src/tools/workflows/create-workflow.ts +19 -1
  103. package/src/tools/workflows/update-workflow.ts +16 -1
  104. package/src/types.ts +109 -2
  105. package/src/workflows/definition.ts +30 -12
  106. package/src/workflows/engine.ts +40 -14
  107. package/src/workflows/executors/agent-task.ts +14 -3
  108. package/src/workflows/executors/human-in-the-loop.ts +160 -0
  109. package/src/workflows/executors/registry.ts +2 -0
  110. package/src/workflows/index.ts +1 -1
  111. package/src/workflows/recovery.ts +72 -0
  112. package/src/workflows/resume.ts +162 -12
  113. package/src/workflows/triggers.ts +31 -2
  114. package/src/workflows/version.ts +2 -0
  115. package/.claude/settings.json +0 -84
  116. package/.claude/settings.local.json +0 -117
  117. package/.dockerignore +0 -61
  118. package/.editorconfig +0 -15
  119. package/.entire/settings.json +0 -4
  120. package/.env.docker.example +0 -56
  121. package/.env.example +0 -78
  122. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
  123. package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
  124. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  125. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
  126. package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
  127. package/.github/workflows/ci.yml +0 -52
  128. package/.github/workflows/docker-and-deploy.yml +0 -132
  129. package/.github/workflows/merge-gate.yml +0 -233
  130. package/.opencode/plugins/entire.ts +0 -133
  131. package/.superset/config.json +0 -6
  132. package/.wts-config.json +0 -4
  133. package/.wts-setup.ts +0 -171
  134. package/CHANGELOG.md +0 -447
  135. package/CLAUDE.md +0 -521
  136. package/CONTRIBUTING.md +0 -315
  137. package/DEPLOYMENT.md +0 -622
  138. package/Dockerfile +0 -65
  139. package/Dockerfile.worker +0 -189
  140. package/MCP.md +0 -841
  141. package/UI.md +0 -40
  142. package/api-entrypoint.sh +0 -56
  143. package/assets/agent-swarm-logo-orange.png +0 -0
  144. package/assets/agent-swarm-logo.png +0 -0
  145. package/assets/agent-swarm.mp4 +0 -0
  146. package/assets/agent-swarm.png +0 -0
  147. package/biome.json +0 -39
  148. package/deploy/DEPLOY.md +0 -60
  149. package/deploy/agent-swarm.service +0 -17
  150. package/deploy/docker-push.ts +0 -30
  151. package/deploy/install.ts +0 -85
  152. package/deploy/prod-db.ts +0 -42
  153. package/deploy/uninstall.ts +0 -12
  154. package/deploy/update.ts +0 -21
  155. package/depot.json +0 -1
  156. package/docker-compose.example.yml +0 -350
  157. package/docker-compose.local.yml +0 -119
  158. package/docker-entrypoint.sh +0 -632
  159. package/docs-site/app/api/search/route.ts +0 -4
  160. package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
  161. package/docs-site/app/docs/layout.tsx +0 -12
  162. package/docs-site/app/globals.css +0 -24
  163. package/docs-site/app/layout.config.tsx +0 -34
  164. package/docs-site/app/layout.tsx +0 -119
  165. package/docs-site/app/llms-full.txt/route.ts +0 -11
  166. package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
  167. package/docs-site/app/llms.txt/route.ts +0 -8
  168. package/docs-site/app/page.tsx +0 -5
  169. package/docs-site/app/robots.ts +0 -13
  170. package/docs-site/app/sitemap.ts +0 -37
  171. package/docs-site/components/api-page.client.tsx +0 -4
  172. package/docs-site/components/api-page.tsx +0 -7
  173. package/docs-site/components/mdx/mermaid.tsx +0 -55
  174. package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
  175. package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
  176. package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
  177. package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
  178. package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
  179. package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
  180. package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
  181. package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
  182. package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
  183. package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
  184. package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
  185. package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
  186. package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
  187. package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
  188. package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
  189. package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
  190. package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
  191. package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
  192. package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
  193. package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
  194. package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
  195. package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
  196. package/docs-site/content/docs/(documentation)/index.mdx +0 -65
  197. package/docs-site/content/docs/(documentation)/meta.json +0 -19
  198. package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
  199. package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
  200. package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
  201. package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
  202. package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
  203. package/docs-site/content/docs/api-reference/agents.mdx +0 -9
  204. package/docs-site/content/docs/api-reference/channels.mdx +0 -9
  205. package/docs-site/content/docs/api-reference/config.mdx +0 -9
  206. package/docs-site/content/docs/api-reference/debug.mdx +0 -9
  207. package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
  208. package/docs-site/content/docs/api-reference/epics.mdx +0 -9
  209. package/docs-site/content/docs/api-reference/index.mdx +0 -32
  210. package/docs-site/content/docs/api-reference/memory.mdx +0 -9
  211. package/docs-site/content/docs/api-reference/meta.json +0 -25
  212. package/docs-site/content/docs/api-reference/poll.mdx +0 -9
  213. package/docs-site/content/docs/api-reference/repos.mdx +0 -9
  214. package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
  215. package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
  216. package/docs-site/content/docs/api-reference/stats.mdx +0 -9
  217. package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
  218. package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
  219. package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
  220. package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
  221. package/docs-site/content/docs/meta.json +0 -3
  222. package/docs-site/lib/get-llm-text.ts +0 -10
  223. package/docs-site/lib/openapi.ts +0 -23
  224. package/docs-site/lib/source.ts +0 -8
  225. package/docs-site/mdx-components.tsx +0 -13
  226. package/docs-site/next.config.mjs +0 -29
  227. package/docs-site/package.json +0 -35
  228. package/docs-site/pnpm-lock.yaml +0 -5407
  229. package/docs-site/postcss.config.mjs +0 -8
  230. package/docs-site/public/logo.png +0 -0
  231. package/docs-site/scripts/generate-docs.ts +0 -171
  232. package/docs-site/source.config.ts +0 -17
  233. package/docs-site/tsconfig.json +0 -46
  234. package/ecosystem.config.cjs +0 -66
  235. package/landing/next.config.ts +0 -14
  236. package/landing/package.json +0 -31
  237. package/landing/pnpm-lock.yaml +0 -1091
  238. package/landing/postcss.config.mjs +0 -8
  239. package/landing/public/apple-touch-icon.png +0 -0
  240. package/landing/public/favicon.ico +0 -0
  241. package/landing/public/logo.png +0 -0
  242. package/landing/public/og-image.png +0 -0
  243. package/landing/public/omghost-desplega.svg +0 -30
  244. package/landing/public/omghost-openfort.svg +0 -9
  245. package/landing/src/app/actions/waitlist.ts +0 -25
  246. package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
  247. package/landing/src/app/blog/page.tsx +0 -162
  248. package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
  249. package/landing/src/app/examples/page.tsx +0 -174
  250. package/landing/src/app/examples/x402/page.tsx +0 -456
  251. package/landing/src/app/globals.css +0 -122
  252. package/landing/src/app/layout.tsx +0 -134
  253. package/landing/src/app/page.tsx +0 -27
  254. package/landing/src/app/robots.ts +0 -13
  255. package/landing/src/app/sitemap.ts +0 -44
  256. package/landing/src/components/architecture.tsx +0 -163
  257. package/landing/src/components/cta.tsx +0 -52
  258. package/landing/src/components/features.tsx +0 -160
  259. package/landing/src/components/footer.tsx +0 -100
  260. package/landing/src/components/hero.tsx +0 -217
  261. package/landing/src/components/how-it-works.tsx +0 -165
  262. package/landing/src/components/navbar.tsx +0 -147
  263. package/landing/src/components/waitlist.tsx +0 -110
  264. package/landing/src/components/why-choose.tsx +0 -149
  265. package/landing/src/components/workshops.tsx +0 -328
  266. package/landing/src/lib/utils.ts +0 -6
  267. package/landing/tsconfig.json +0 -41
  268. package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
  269. package/new-ui/CLAUDE.md +0 -92
  270. package/new-ui/README.md +0 -73
  271. package/new-ui/biome.json +0 -42
  272. package/new-ui/components.json +0 -21
  273. package/new-ui/index.html +0 -25
  274. package/new-ui/package.json +0 -49
  275. package/new-ui/pnpm-lock.yaml +0 -4845
  276. package/new-ui/public/logo.png +0 -0
  277. package/new-ui/src/api/client.ts +0 -814
  278. package/new-ui/src/api/hooks/index.ts +0 -64
  279. package/new-ui/src/api/hooks/use-agents.ts +0 -58
  280. package/new-ui/src/api/hooks/use-channels.ts +0 -115
  281. package/new-ui/src/api/hooks/use-config-api.ts +0 -46
  282. package/new-ui/src/api/hooks/use-costs.ts +0 -122
  283. package/new-ui/src/api/hooks/use-db-query.ts +0 -29
  284. package/new-ui/src/api/hooks/use-epics.ts +0 -75
  285. package/new-ui/src/api/hooks/use-repos.ts +0 -61
  286. package/new-ui/src/api/hooks/use-schedules.ts +0 -81
  287. package/new-ui/src/api/hooks/use-services.ts +0 -16
  288. package/new-ui/src/api/hooks/use-stats.ts +0 -27
  289. package/new-ui/src/api/hooks/use-tasks.ts +0 -89
  290. package/new-ui/src/api/hooks/use-workflows.ts +0 -109
  291. package/new-ui/src/api/types.ts +0 -549
  292. package/new-ui/src/app/App.tsx +0 -13
  293. package/new-ui/src/app/providers.tsx +0 -32
  294. package/new-ui/src/app/router.tsx +0 -52
  295. package/new-ui/src/components/layout/app-header.tsx +0 -47
  296. package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
  297. package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
  298. package/new-ui/src/components/layout/config-guard.tsx +0 -22
  299. package/new-ui/src/components/layout/root-layout.tsx +0 -40
  300. package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
  301. package/new-ui/src/components/shared/command-menu.tsx +0 -131
  302. package/new-ui/src/components/shared/data-grid.tsx +0 -141
  303. package/new-ui/src/components/shared/empty-state.tsx +0 -24
  304. package/new-ui/src/components/shared/error-boundary.tsx +0 -72
  305. package/new-ui/src/components/shared/json-viewer.tsx +0 -47
  306. package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
  307. package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
  308. package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
  309. package/new-ui/src/components/shared/stats-bar.tsx +0 -132
  310. package/new-ui/src/components/shared/status-badge.tsx +0 -131
  311. package/new-ui/src/components/shared/usage-summary.tsx +0 -179
  312. package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
  313. package/new-ui/src/components/ui/alert.tsx +0 -60
  314. package/new-ui/src/components/ui/avatar.tsx +0 -96
  315. package/new-ui/src/components/ui/badge.tsx +0 -46
  316. package/new-ui/src/components/ui/button.tsx +0 -62
  317. package/new-ui/src/components/ui/card.tsx +0 -75
  318. package/new-ui/src/components/ui/command.tsx +0 -160
  319. package/new-ui/src/components/ui/dialog.tsx +0 -143
  320. package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
  321. package/new-ui/src/components/ui/input.tsx +0 -21
  322. package/new-ui/src/components/ui/label.tsx +0 -19
  323. package/new-ui/src/components/ui/progress.tsx +0 -26
  324. package/new-ui/src/components/ui/scroll-area.tsx +0 -54
  325. package/new-ui/src/components/ui/select.tsx +0 -175
  326. package/new-ui/src/components/ui/separator.tsx +0 -28
  327. package/new-ui/src/components/ui/sheet.tsx +0 -132
  328. package/new-ui/src/components/ui/sidebar.tsx +0 -691
  329. package/new-ui/src/components/ui/skeleton.tsx +0 -13
  330. package/new-ui/src/components/ui/sonner.tsx +0 -35
  331. package/new-ui/src/components/ui/switch.tsx +0 -33
  332. package/new-ui/src/components/ui/table.tsx +0 -92
  333. package/new-ui/src/components/ui/tabs.tsx +0 -79
  334. package/new-ui/src/components/ui/textarea.tsx +0 -18
  335. package/new-ui/src/components/ui/tooltip.tsx +0 -51
  336. package/new-ui/src/components/workflows/action-node.tsx +0 -53
  337. package/new-ui/src/components/workflows/condition-node.tsx +0 -50
  338. package/new-ui/src/components/workflows/graph-utils.ts +0 -124
  339. package/new-ui/src/components/workflows/json-tree.tsx +0 -189
  340. package/new-ui/src/components/workflows/node-styles.ts +0 -10
  341. package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
  342. package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
  343. package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
  344. package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
  345. package/new-ui/src/hooks/use-config.ts +0 -203
  346. package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
  347. package/new-ui/src/hooks/use-mobile.ts +0 -19
  348. package/new-ui/src/hooks/use-theme.ts +0 -60
  349. package/new-ui/src/lib/config.ts +0 -188
  350. package/new-ui/src/lib/slugs.ts +0 -71
  351. package/new-ui/src/lib/utils.ts +0 -120
  352. package/new-ui/src/main.tsx +0 -11
  353. package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
  354. package/new-ui/src/pages/agents/page.tsx +0 -134
  355. package/new-ui/src/pages/chat/page.tsx +0 -674
  356. package/new-ui/src/pages/config/page.tsx +0 -1109
  357. package/new-ui/src/pages/dashboard/page.tsx +0 -454
  358. package/new-ui/src/pages/debug/page.tsx +0 -275
  359. package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
  360. package/new-ui/src/pages/epics/page.tsx +0 -321
  361. package/new-ui/src/pages/not-found/page.tsx +0 -18
  362. package/new-ui/src/pages/repos/page.tsx +0 -369
  363. package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
  364. package/new-ui/src/pages/schedules/page.tsx +0 -477
  365. package/new-ui/src/pages/services/page.tsx +0 -128
  366. package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
  367. package/new-ui/src/pages/tasks/page.tsx +0 -592
  368. package/new-ui/src/pages/usage/page.tsx +0 -195
  369. package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
  370. package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
  371. package/new-ui/src/pages/workflows/page.tsx +0 -266
  372. package/new-ui/src/styles/ag-grid.css +0 -36
  373. package/new-ui/src/styles/globals.css +0 -213
  374. package/new-ui/test-results/.last-run.json +0 -4
  375. package/new-ui/tsconfig.app.json +0 -34
  376. package/new-ui/tsconfig.json +0 -4
  377. package/new-ui/tsconfig.node.json +0 -26
  378. package/new-ui/vercel.json +0 -4
  379. package/new-ui/vite.config.ts +0 -28
  380. package/plugin/README.md +0 -1
  381. package/plugin/build-pi-skills.ts +0 -233
  382. package/plugin/hooks/hooks.json +0 -71
  383. package/prek.toml +0 -75
  384. package/pyproject.toml +0 -9
  385. package/scripts/check-db-boundary.sh +0 -60
  386. package/scripts/e2e-docker-provider.ts +0 -820
  387. package/scripts/e2e-io-schemas-test.ts +0 -807
  388. package/scripts/e2e-provider-test.ts +0 -220
  389. package/scripts/e2e-workflow-redesign.sh +0 -229
  390. package/scripts/e2e-workflow-test.sh +0 -285
  391. package/scripts/e2e-workflow-test.ts +0 -857
  392. package/scripts/generate-mcp-docs.ts +0 -415
  393. package/scripts/generate-openapi.ts +0 -26
  394. package/scripts/measure-tool-tokens.ts +0 -118
  395. package/scripts/x402-e2e-test.ts +0 -195
  396. package/scripts/x402-test-server.ts +0 -236
  397. package/scripts/x402-testnet-e2e.ts +0 -668
  398. package/slack-manifest.json +0 -88
  399. package/templates-ui/README.md +0 -46
  400. package/templates-ui/components.json +0 -17
  401. package/templates-ui/eslint.config.mjs +0 -18
  402. package/templates-ui/next.config.ts +0 -7
  403. package/templates-ui/package.json +0 -35
  404. package/templates-ui/pnpm-lock.yaml +0 -4571
  405. package/templates-ui/postcss.config.mjs +0 -7
  406. package/templates-ui/public/file.svg +0 -1
  407. package/templates-ui/public/globe.svg +0 -1
  408. package/templates-ui/public/logo.png +0 -0
  409. package/templates-ui/public/next.svg +0 -1
  410. package/templates-ui/public/vercel.svg +0 -1
  411. package/templates-ui/public/window.svg +0 -1
  412. package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
  413. package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
  414. package/templates-ui/src/app/api/templates/route.ts +0 -18
  415. package/templates-ui/src/app/builder/page.tsx +0 -37
  416. package/templates-ui/src/app/globals.css +0 -94
  417. package/templates-ui/src/app/layout.tsx +0 -79
  418. package/templates-ui/src/app/page.tsx +0 -38
  419. package/templates-ui/src/app/robots.ts +0 -11
  420. package/templates-ui/src/app/sitemap.ts +0 -31
  421. package/templates-ui/src/components/compose-builder.tsx +0 -442
  422. package/templates-ui/src/components/compose-preview.tsx +0 -117
  423. package/templates-ui/src/components/file-preview.tsx +0 -77
  424. package/templates-ui/src/components/footer.tsx +0 -40
  425. package/templates-ui/src/components/header.tsx +0 -41
  426. package/templates-ui/src/components/template-card.tsx +0 -87
  427. package/templates-ui/src/components/template-detail.tsx +0 -125
  428. package/templates-ui/src/components/template-gallery.tsx +0 -263
  429. package/templates-ui/src/components/ui/badge.tsx +0 -36
  430. package/templates-ui/src/components/ui/button.tsx +0 -57
  431. package/templates-ui/src/components/ui/card.tsx +0 -76
  432. package/templates-ui/src/components/ui/separator.tsx +0 -31
  433. package/templates-ui/src/components/ui/tooltip.tsx +0 -32
  434. package/templates-ui/src/lib/compose-generator.ts +0 -241
  435. package/templates-ui/src/lib/templates.ts +0 -137
  436. package/templates-ui/src/lib/utils.ts +0 -6
  437. package/templates-ui/tsconfig.json +0 -34
  438. package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
  439. package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
  440. package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
  441. package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
  442. package/thoughts/shared/plans/.gitkeep +0 -0
  443. package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
  444. package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
  445. package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
  446. package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
  447. package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
  448. package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
  449. package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
  450. package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
  451. package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
  452. package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
  453. package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
  454. package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
  455. package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
  456. package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
  457. package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
  458. package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
  459. package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
  460. package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
  461. package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
  462. package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
  463. package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
  464. package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
  465. package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
  466. package/thoughts/shared/research/.gitkeep +0 -0
  467. package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
  468. package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
  469. package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
  470. package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
  471. package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
  472. package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
  473. package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
  474. package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
  475. package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
  476. package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
  477. package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
  478. package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
  479. package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
  480. package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
  481. package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
  482. package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
  483. package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
  484. package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
  485. package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
  486. package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
  487. package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
  488. package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
  489. package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
  490. package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
  491. package/thoughts/taras/plans/2026-02-20-auto-improvement.md +0 -803
  492. package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
  493. package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
  494. package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
  495. package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
  496. package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
  497. package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
  498. package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
  499. package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
  500. package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
  501. package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
  502. package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
  503. package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
  504. package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
  505. package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
  506. package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
  507. package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
  508. package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
  509. package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
  510. package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
  511. package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
  512. package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
  513. package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
  514. package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
  515. package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
  516. package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
  517. package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
  518. package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
  519. package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
  520. package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
  521. package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
  522. package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
  523. package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
  524. package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
  525. package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
  526. package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
  527. package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
  528. package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
  529. package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
  530. package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
  531. package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
  532. package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
  533. package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
  534. package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
  535. package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
  536. package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
  537. package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
  538. package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
  539. package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
  540. package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
  541. package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
  542. package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
  543. package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
  544. package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
  545. package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
  546. package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
  547. package/tsconfig.json +0 -37
package/DEPLOYMENT.md DELETED
@@ -1,622 +0,0 @@
1
- # Deployment Guide
2
-
3
- This guide covers all deployment options for Agent Swarm.
4
-
5
- ## Table of Contents
6
-
7
- - [Docker Compose (Recommended)](#docker-compose-recommended)
8
- - [Docker Worker](#docker-worker)
9
- - [Server Deployment (systemd)](#server-deployment-systemd)
10
- - [Graceful Shutdown & Task Resume](#graceful-shutdown--task-resume)
11
- - [Environment Variables](#environment-variables)
12
- - [Slack Integration](#slack-integration)
13
- - [GitHub App Integration](#github-app-integration)
14
- - [Sentry Integration](#sentry-integration)
15
- - [System Prompts](#system-prompts)
16
- - [Service Registry (PM2)](#service-registry-pm2)
17
- - [Publishing (Maintainers)](#publishing-maintainers)
18
-
19
- ---
20
-
21
- ## Docker Compose (Recommended)
22
-
23
- The easiest way to deploy a full swarm with API, workers, and lead agent.
24
-
25
- ### Quick Start
26
-
27
- ```bash
28
- # Copy example files
29
- cp docker-compose.example.yml docker-compose.yml
30
-
31
- # Create a combined .env for docker-compose (combines API + worker settings)
32
- # You can merge .env.example (API) and .env.docker.example (worker) settings
33
- cp .env.docker.example .env
34
-
35
- # Edit .env with your values
36
- vim .env
37
-
38
- # Start the swarm
39
- docker-compose up -d
40
- ```
41
-
42
- > **Note:** `.env.example` contains API server settings, `.env.docker.example` contains Docker worker settings. For docker-compose, you need both sets of variables in a single `.env` file.
43
-
44
- ### ARM Compatibility (Apple Silicon)
45
-
46
- All services in the docker-compose files include `platform: linux/amd64` to avoid `no matching manifest for linux/arm64/v8` errors on Apple Silicon Macs. The Docker images are built for `linux/amd64` and run via Rosetta emulation.
47
-
48
- ### What's Included
49
-
50
- The example `docker-compose.yml` sets up:
51
-
52
- - **API service** (port 3013) - MCP HTTP server
53
- - **2 Worker agents** - Containerized Claude workers
54
- - **1 Lead agent** - Coordinator agent
55
- - **3 Content agents** (optional) - Content writer, reviewer, and strategist using `TEMPLATE_ID` for profile bootstrapping
56
-
57
- ### Configuration
58
-
59
- Edit your `.env` file:
60
-
61
- ```bash
62
- # Required
63
- API_KEY=your-secret-api-key
64
- CLAUDE_CODE_OAUTH_TOKEN=your-oauth-token # Run `claude setup-token` to get this
65
- # Multiple tokens for load balancing: CLAUDE_CODE_OAUTH_TOKEN=token1,token2,token3
66
-
67
- # Agent IDs (optional, auto-generated if not set)
68
- AGENT_ID=worker-1-uuid
69
- AGENT_ID_2=worker-2-uuid
70
- AGENT_ID_LEAD=lead-agent-uuid
71
-
72
- # GitHub integration (optional)
73
- GITHUB_TOKEN=your-github-token
74
- GITHUB_EMAIL=your@email.com
75
- GITHUB_NAME=Your Name
76
- ```
77
-
78
- ### Volumes
79
-
80
- | Volume | Purpose |
81
- |--------|---------|
82
- | `swarm_api` | SQLite database persistence |
83
- | `swarm_logs` | Session logs |
84
- | `swarm_shared` | Shared workspace between agents (`/workspace/shared`) |
85
- | `swarm_lead` | Lead agent's personal workspace (`/workspace/personal`) |
86
- | `swarm_worker_*` | Personal workspace per worker (`/workspace/personal`) |
87
-
88
- ### Graceful Shutdown
89
-
90
- The docker-compose example uses `stop_grace_period: 60s` to allow graceful task pause during deployments. When a container receives SIGTERM:
91
-
92
- 1. In-progress tasks are **paused** (not failed)
93
- 2. Task state and progress are preserved
94
- 3. After restart, paused tasks are automatically **resumed** with context
95
-
96
- This enables zero-downtime deployments. See [Graceful Shutdown & Task Resume](#graceful-shutdown--task-resume) for details.
97
-
98
- > **Important:** Use stable `AGENT_ID` values for each worker to enable task resume after restarts.
99
-
100
- ---
101
-
102
- ## Docker Worker
103
-
104
- Run individual Claude workers in containers.
105
-
106
- ### Pull from Registry
107
-
108
- ```bash
109
- docker pull ghcr.io/desplega-ai/agent-swarm-worker:latest
110
- ```
111
-
112
- ### Build Locally
113
-
114
- ```bash
115
- # Build the worker image
116
- docker build -f Dockerfile.worker -t agent-swarm-worker .
117
-
118
- # Or using npm script
119
- bun run docker:build:worker
120
-
121
- # Override the pinned Claude Code version (default: 2.1.80)
122
- docker build -f Dockerfile.worker --build-arg CLAUDE_CODE_VERSION=2.2.0 -t agent-swarm-worker .
123
- ```
124
-
125
- ### Run
126
-
127
- ```bash
128
- # Using pre-built image
129
- docker run --rm -it \
130
- -e CLAUDE_CODE_OAUTH_TOKEN=your-token \
131
- -e API_KEY=your-api-key \
132
- -v ./logs:/logs \
133
- -v ./work:/workspace \
134
- ghcr.io/desplega-ai/agent-swarm-worker
135
-
136
- # With custom system prompt
137
- docker run --rm -it \
138
- -e CLAUDE_CODE_OAUTH_TOKEN=your-token \
139
- -e API_KEY=your-api-key \
140
- -e SYSTEM_PROMPT="You are a Python specialist" \
141
- -v ./logs:/logs \
142
- -v ./work:/workspace \
143
- ghcr.io/desplega-ai/agent-swarm-worker
144
-
145
- # With system prompt from file
146
- docker run --rm -it \
147
- -e CLAUDE_CODE_OAUTH_TOKEN=your-token \
148
- -e API_KEY=your-api-key \
149
- -e SYSTEM_PROMPT_FILE=/workspace/prompts/specialist.txt \
150
- -v ./work:/workspace \
151
- ghcr.io/desplega-ai/agent-swarm-worker
152
-
153
- # Using npm script (requires .env.docker file)
154
- bun run docker:run:worker
155
- ```
156
-
157
- ### Troubleshooting
158
-
159
- **Permission denied when writing to /workspace**
160
-
161
- ```bash
162
- # Option 1: Fix permissions on host directory
163
- chmod 777 ./work
164
-
165
- # Option 2: Run container as your current user
166
- docker run --rm -it --user $(id -u):$(id -g) \
167
- -e CLAUDE_CODE_OAUTH_TOKEN=your-token \
168
- -e API_KEY=your-api-key \
169
- -v ./work:/workspace \
170
- ghcr.io/desplega-ai/agent-swarm-worker
171
-
172
- # Option 3: Create the file on the host first
173
- touch ./work/.mcp.json
174
- chmod 666 ./work/.mcp.json
175
- ```
176
-
177
- ### Architecture
178
-
179
- The Docker worker image uses a multi-stage build:
180
-
181
- 1. **Builder stage**: Compiles `src/cli.tsx` into a standalone binary
182
- 2. **Runtime stage**: Ubuntu 24.04 with full development environment
183
-
184
- **Pre-installed tools:**
185
-
186
- - **Languages**: Python 3, Node.js 22, Bun
187
- - **Build tools**: gcc, g++, make, cmake
188
- - **Process manager**: PM2 (for background services)
189
- - **CLI tools**: GitHub CLI (`gh`), GitLab CLI (`glab`), sqlite3
190
- - **Agent tools**: `wts` (git worktree manager), `archil` (FUSE/R2-backed storage)
191
- - **Utilities**: git, git-lfs, vim, nano, jq, curl, wget, ssh, fuse3
192
- - **Sudo access**: Worker can install packages with `sudo apt-get install`
193
-
194
- **Volumes:**
195
-
196
- - `/workspace/personal` - Agent's personal workspace (isolated per agent)
197
- - `/workspace/shared` - Shared workspace between all agents
198
- - `/logs` - Session logs
199
-
200
- ### Startup Scripts
201
-
202
- Run custom initialization before the worker starts. Place a script at `/workspace/start-up.*`:
203
-
204
- **Supported formats** (priority order):
205
- - `start-up.sh` / `start-up.bash` - Bash scripts
206
- - `start-up.js` - Node.js scripts
207
- - `start-up.ts` / `start-up.bun` - Bun/TypeScript scripts
208
-
209
- **Interpreter detection:**
210
- 1. Shebang line (e.g., `#!/usr/bin/env bun`)
211
- 2. File extension (`.ts` -> bun, `.js` -> node, `.sh` -> bash)
212
-
213
- **Error handling:**
214
- - `STARTUP_SCRIPT_STRICT=true` (default) - Container exits if script fails
215
- - `STARTUP_SCRIPT_STRICT=false` - Logs warning and continues
216
-
217
- **Example: Install dependencies**
218
-
219
- ```bash
220
- #!/bin/bash
221
- # /workspace/start-up.sh
222
-
223
- echo "Installing dependencies..."
224
- if [ -f "package.json" ]; then
225
- bun install
226
- fi
227
-
228
- sudo apt-get update -qq
229
- sudo apt-get install -y -qq ripgrep
230
- ```
231
-
232
- **Example: TypeScript setup**
233
-
234
- ```typescript
235
- #!/usr/bin/env bun
236
- // /workspace/start-up.ts
237
-
238
- console.log("Running startup...");
239
- await Bun.$`bun install`;
240
-
241
- if (!process.env.API_KEY) {
242
- console.error("ERROR: API_KEY not set");
243
- process.exit(1);
244
- }
245
- ```
246
-
247
- ---
248
-
249
- ## Server Deployment (systemd)
250
-
251
- Deploy the MCP server to a Linux host with systemd.
252
-
253
- ### Prerequisites
254
-
255
- - Linux with systemd
256
- - Bun installed (`curl -fsSL https://bun.sh/install | bash`)
257
-
258
- ### Install
259
-
260
- ```bash
261
- git clone https://github.com/desplega-ai/agent-swarm.git
262
- cd agent-swarm
263
- sudo bun deploy/install.ts
264
- ```
265
-
266
- This will:
267
- - Copy files to `/opt/agent-swarm`
268
- - Create `.env` file (edit to set `API_KEY`)
269
- - Install systemd service with health checks every 30s
270
- - Start the service on port 3013
271
-
272
- ### Update
273
-
274
- ```bash
275
- git pull
276
- sudo bun deploy/update.ts
277
- ```
278
-
279
- ### Management
280
-
281
- ```bash
282
- # Check status
283
- sudo systemctl status agent-swarm
284
-
285
- # View logs
286
- sudo journalctl -u agent-swarm -f
287
-
288
- # Restart
289
- sudo systemctl restart agent-swarm
290
-
291
- # Stop
292
- sudo systemctl stop agent-swarm
293
- ```
294
-
295
- ---
296
-
297
- ## Graceful Shutdown & Task Resume
298
-
299
- Agent Swarm supports graceful task handling during deployments and container restarts.
300
-
301
- ### How It Works
302
-
303
- When a worker container receives SIGTERM (e.g., during `docker-compose down` or Kubernetes rollout):
304
-
305
- 1. **Grace period starts** - Worker waits for active tasks to complete (default: 30s, configurable via `SHUTDOWN_TIMEOUT`)
306
- 2. **Tasks are paused** - Any tasks still running after the grace period are marked as `paused` (not `failed`)
307
- 3. **State preserved** - Task progress and context are saved to the database
308
- 4. **On restart** - Worker automatically fetches and resumes its paused tasks with full context
309
-
310
- ### Task States During Shutdown
311
-
312
- | State | Description |
313
- |-------|-------------|
314
- | `in_progress` | Task completes normally if it finishes within grace period |
315
- | `paused` | Task is paused for resume after restart |
316
- | `failed` | Only used if pause API fails (fallback) |
317
-
318
- ### Configuration
319
-
320
- ```bash
321
- # Grace period before force-pausing tasks (milliseconds)
322
- SHUTDOWN_TIMEOUT=30000
323
-
324
- # Docker compose stop grace period (should be >= SHUTDOWN_TIMEOUT + buffer)
325
- stop_grace_period: 60s
326
- ```
327
-
328
- ### Resume Behavior
329
-
330
- When a worker starts, it:
331
-
332
- 1. Registers with the MCP server
333
- 2. Checks for paused tasks assigned to its `AGENT_ID`
334
- 3. Resumes each paused task with context:
335
- - Original task description
336
- - Previous progress (if any was saved)
337
- - Notification that this is a resumed task
338
-
339
- ### Best Practices
340
-
341
- - **Use stable Agent IDs** - Set explicit `AGENT_ID` for each worker to enable resume after restarts
342
- - **Save progress regularly** - Workers should call `store-progress` during long tasks
343
- - **Test deployments** - Verify tasks resume correctly in staging before production
344
-
345
- ---
346
-
347
- ## Environment Variables
348
-
349
- > For the complete reference of all environment variables, see [docs/ENVS.md](./docs/ENVS.md).
350
-
351
- ### Docker Worker Variables
352
-
353
- | Variable | Required | Description |
354
- |----------|----------|-------------|
355
- | `CLAUDE_CODE_OAUTH_TOKEN` | Yes | OAuth token for Claude CLI (run `claude setup-token`). Supports comma-separated values for [multi-credential load balancing](./docs/ENVS.md#multi-credential-support). |
356
- | `API_KEY` | Yes | API key for MCP server |
357
- | `AGENT_ID` | No | Agent UUID (assigned on join if not set). **Keep stable for task resume.** |
358
- | `AGENT_ROLE` | No | Role: `worker` (default) or `lead` |
359
- | `AGENT_NAME` | No | Display name for the agent (auto-generated if not set) |
360
- | `MCP_BASE_URL` | No | MCP server URL (default: `http://host.docker.internal:3013`) |
361
- | `SESSION_ID` | No | Log folder name (auto-generated if not provided) |
362
- | `YOLO` | No | Continue on errors (default: `false`) |
363
- | `SYSTEM_PROMPT` | No | Custom system prompt text |
364
- | `SYSTEM_PROMPT_FILE` | No | Path to system prompt file |
365
- | `STARTUP_SCRIPT_STRICT` | No | Exit on startup script failure (default: `true`) |
366
- | `SHUTDOWN_TIMEOUT` | No | Grace period in ms before pausing tasks (default: `30000`) |
367
- | `MAX_CONCURRENT_TASKS` | No | Maximum parallel tasks per worker (default: `1`) |
368
- | `SWARM_URL` | No | Base domain for service URLs (default: `localhost`) |
369
- | `LEAD_PORT` | No | Host port for lead service (default: `3020`). Example — adjust to your setup. In isolated network namespaces all services can share the same port. |
370
- | `WORKER1_PORT` | No | Host port for worker-1 service (default: `3021`). Example — see `LEAD_PORT`. |
371
- | `WORKER2_PORT` | No | Host port for worker-2 service (default: `3022`). Example — see `LEAD_PORT`. |
372
- | `PM2_HOME` | No | PM2 state directory (default: `/workspace/.pm2`) |
373
- | `GITHUB_TOKEN` | No | GitHub token for git operations |
374
- | `GITHUB_EMAIL` | No | Git commit email (default: `worker-agent@desplega.ai`) |
375
- | `GITHUB_NAME` | No | Git commit name (default: `Worker Agent`) |
376
- | `SENTRY_AUTH_TOKEN` | No | Sentry Organization Auth Token for issue investigation |
377
- | `SENTRY_ORG` | No | Sentry organization slug |
378
-
379
- ### Server Variables
380
-
381
- | Variable | Description | Default |
382
- |----------|-------------|---------|
383
- | `PORT` | Port for MCP HTTP server | `3013` |
384
- | `API_KEY` | API key for server authentication | - |
385
- | `MCP_BASE_URL` | Base URL (for setup command) | `https://agent-swarm-mcp.desplega.sh` |
386
- | `SWARM_URL` | Base domain for service discovery | `localhost` |
387
- | `APP_URL` | Dashboard URL for Slack message links | - |
388
- | `ENV` | Environment mode (`development` adds prefix to Slack agent names) | - |
389
- | `SCHEDULER_INTERVAL_MS` | Polling interval for scheduled tasks | `10000` |
390
- | `DATABASE_PATH` | SQLite database file path | `./agent-swarm-db.sqlite` |
391
- | `OPENAI_API_KEY` | OpenAI key for memory embeddings (optional) | - |
392
- | `CAPABILITIES` | Comma-separated feature flags | All enabled |
393
-
394
- ---
395
-
396
- ## Slack Integration
397
-
398
- Enable Slack for task creation and agent communication via direct messages.
399
-
400
- ### Setup
401
-
402
- 1. Create a Slack App at https://api.slack.com/apps (or import `slack-manifest.json` from the repo root)
403
- 2. Enable Socket Mode (for real-time events without public webhooks)
404
- 3. Enable Interactivity and Assistant View
405
- 4. Add required scopes: `app_mentions:read`, `assistant:write`, `channels:history`, `channels:read`, `chat:write`, `chat:write.customize`, `chat:write.public`, `commands`, `files:read`, `files:write`, `groups:history`, `groups:read`, `im:history`, `im:read`, `im:write`, `mpim:history`, `mpim:read`, `mpim:write`, `reactions:write`, `users:read`
406
- 5. Subscribe to bot events: `app_mention`, `assistant_thread_started`, `assistant_thread_context_changed`, `message.channels`, `message.groups`, `message.im`, `message.mpim`
407
- 6. Install to workspace and copy tokens
408
-
409
- ### Configuration
410
-
411
- ```bash
412
- # Required for Slack
413
- SLACK_BOT_TOKEN=xoxb-... # Bot User OAuth Token
414
- SLACK_APP_TOKEN=xapp-... # App-Level Token (Socket Mode)
415
- SLACK_SIGNING_SECRET=... # Signing Secret (optional for Socket Mode)
416
-
417
- # Disable Slack (if not using)
418
- SLACK_DISABLE=true
419
-
420
- # Optional: Filter allowed users
421
- SLACK_ALLOWED_EMAIL_DOMAINS=company.com,partner.com # Comma-separated email domains
422
- SLACK_ALLOWED_USER_IDS=U12345678,U87654321 # Comma-separated user IDs to always allow
423
- ```
424
-
425
- ### User Filtering
426
-
427
- By default, all Slack users can interact with the bot. To restrict access:
428
-
429
- - **Email domains**: Only users with matching email domains can send messages
430
- - **User ID whitelist**: Specific user IDs are always allowed (useful for admins or service accounts)
431
-
432
- If both are set, a user must match **either** an allowed domain **or** be in the user ID whitelist.
433
-
434
- ---
435
-
436
- ## GitHub App Integration
437
-
438
- Enable GitHub webhooks for automated task creation from PR reviews and issue assignments.
439
-
440
- ### Setup
441
-
442
- 1. Create a GitHub App at https://github.com/settings/apps/new
443
- 2. Set webhook URL to your server: `https://your-server.com/github/webhook`
444
- 3. Generate a webhook secret
445
- 4. (Optional) Generate a private key for bot reactions
446
-
447
- ### Configuration
448
-
449
- ```bash
450
- # Required for GitHub webhooks
451
- GITHUB_WEBHOOK_SECRET=your-webhook-secret
452
-
453
- # Optional: Disable GitHub integration
454
- GITHUB_DISABLE=true
455
-
456
- # Optional: Bot name for @mentions (default: agent-swarm-bot)
457
- GITHUB_BOT_NAME=your-bot-name
458
-
459
- # Optional: Enable bot reactions (requires GitHub App)
460
- GITHUB_APP_ID=123456
461
- GITHUB_APP_PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----
462
- # Or use base64-encoded private key:
463
- GITHUB_APP_PRIVATE_KEY=base64-encoded-key
464
- ```
465
-
466
- ### Supported Events
467
-
468
- | Event | Action |
469
- |-------|--------|
470
- | PR assigned to bot | Creates task for lead agent |
471
- | Review requested from bot | Creates review task |
472
- | PR/Issue comment @mentioning bot | Creates task with context |
473
- | Issue assigned to bot | Creates task for lead agent |
474
-
475
- ### Bot Reactions
476
-
477
- If GitHub App credentials are provided, the bot can react to comments/issues to acknowledge receipt.
478
-
479
- ---
480
-
481
- ## Sentry Integration
482
-
483
- Docker workers include `sentry-cli` pre-installed, enabling agents to investigate and triage Sentry issues directly.
484
-
485
- ### Setup
486
-
487
- 1. Create an Organization Auth Token at `https://sentry.io/settings/{org}/auth-tokens/` with scopes:
488
- - `event:read` - Read issues and events
489
- - `project:read` - Read project data
490
- - `org:read` - Read organization info
491
-
492
- 2. Add to `.env.docker` or `.env`:
493
- ```bash
494
- SENTRY_AUTH_TOKEN=your-auth-token
495
- SENTRY_ORG=your-org-slug
496
- ```
497
-
498
- 3. Verify authentication in a worker:
499
- ```bash
500
- sentry-cli info
501
- ```
502
-
503
- ### Agent Commands
504
-
505
- | Command | Description |
506
- |---------|-------------|
507
- | `/investigate-sentry-issue <url-or-id>` | Investigate a Sentry issue, get stacktrace, and triage |
508
-
509
- ### Usage
510
-
511
- Workers can use the `/investigate-sentry-issue` command to:
512
- - Get issue details and stacktraces
513
- - Analyze breadcrumbs and context
514
- - Resolve, mute, or unresolve issues
515
-
516
- Example:
517
- ```
518
- /investigate-sentry-issue https://sentry.io/organizations/myorg/issues/123456/
519
- ```
520
-
521
- Or just the issue ID:
522
- ```
523
- /investigate-sentry-issue 123456
524
- ```
525
-
526
- ---
527
-
528
- ## System Prompts
529
-
530
- Customize Claude's behavior with system prompts for worker and lead agents.
531
-
532
- ### CLI Usage
533
-
534
- ```bash
535
- # Inline system prompt
536
- bunx @desplega.ai/agent-swarm worker --system-prompt "You are a Python specialist."
537
-
538
- # System prompt from file
539
- bunx @desplega.ai/agent-swarm worker --system-prompt-file ./prompts/python-specialist.txt
540
-
541
- # Same options work for lead agent
542
- bunx @desplega.ai/agent-swarm lead --system-prompt "You are a project coordinator."
543
- bunx @desplega.ai/agent-swarm lead --system-prompt-file ./prompts/coordinator.txt
544
- ```
545
-
546
- ### Docker Usage
547
-
548
- ```bash
549
- # Using inline system prompt
550
- docker run --rm -it \
551
- -e CLAUDE_CODE_OAUTH_TOKEN=your-token \
552
- -e API_KEY=your-api-key \
553
- -e SYSTEM_PROMPT="You are a Python specialist." \
554
- ghcr.io/desplega-ai/agent-swarm-worker
555
-
556
- # Using system prompt file
557
- docker run --rm -it \
558
- -e CLAUDE_CODE_OAUTH_TOKEN=your-token \
559
- -e API_KEY=your-api-key \
560
- -e SYSTEM_PROMPT_FILE=/workspace/prompts/specialist.txt \
561
- -v ./work:/workspace \
562
- ghcr.io/desplega-ai/agent-swarm-worker
563
- ```
564
-
565
- ### Priority
566
-
567
- - CLI flags > Environment variables
568
- - Inline text (`SYSTEM_PROMPT`) > File (`SYSTEM_PROMPT_FILE`)
569
-
570
- ---
571
-
572
- ## Service Registry (PM2)
573
-
574
- Workers can run background services on port 3000 using PM2. Services are registered for discovery and auto-restart.
575
-
576
- ### PM2 Commands
577
-
578
- ```bash
579
- pm2 start /workspace/app/server.js --name my-api # Start a service
580
- pm2 stop|restart|delete my-api # Manage services
581
- pm2 logs [name] # View logs
582
- pm2 list # Show running processes
583
- ```
584
-
585
- ### MCP Tools
586
-
587
- - `register-service` - Register service for discovery and auto-restart
588
- - `unregister-service` - Remove from registry
589
- - `list-services` - Find services exposed by other agents
590
- - `update-service-status` - Update health status
591
-
592
- ### Starting a New Service
593
-
594
- ```bash
595
- # 1. Start your service with PM2
596
- pm2 start /workspace/myapp/server.js --name my-api
597
-
598
- # 2. Register it (via MCP tool)
599
- # register-service name="my-api" script="/workspace/myapp/server.js"
600
-
601
- # 3. Mark healthy when ready
602
- # update-service-status name="my-api" status="healthy"
603
- ```
604
-
605
- ### Service URL Pattern
606
-
607
- `https://{service-name}.{SWARM_URL}`
608
-
609
- ### Health Checks
610
-
611
- Implement a `/health` endpoint returning 200 OK for monitoring.
612
-
613
- ---
614
-
615
- ## Publishing (Maintainers)
616
-
617
- ```bash
618
- # Requires gh CLI authenticated
619
- bun deploy/docker-push.ts
620
- ```
621
-
622
- This builds, tags with version from package.json + `latest`, and pushes to GHCR.
package/Dockerfile DELETED
@@ -1,65 +0,0 @@
1
- # Agent Swarm MCP Server Dockerfile
2
- # Multi-stage build: compiles to standalone binary for minimal image size
3
-
4
- # Stage 1: Build the binary
5
- FROM oven/bun:latest AS builder
6
-
7
- WORKDIR /build
8
-
9
- # Copy package files first for better layer caching
10
- COPY package.json bun.lock* ./
11
- RUN bun install --frozen-lockfile
12
-
13
- # Copy source files
14
- COPY src/ ./src/
15
- COPY tsconfig.json ./
16
-
17
- # Compile HTTP server to standalone binary
18
- RUN bun build ./src/http.ts --compile --outfile ./agent-swarm-api
19
-
20
- # Stage 2: Minimal runtime image
21
- FROM debian:bookworm-slim
22
-
23
- # Install minimal dependencies (for bun:sqlite and networking)
24
- RUN apt-get update && apt-get install -y --no-install-recommends \
25
- ca-certificates \
26
- wget \
27
- curl \
28
- fuse3 libfuse2 \
29
- && rm -rf /var/lib/apt/lists/*
30
-
31
- WORKDIR /app
32
-
33
- # Copy compiled binary from builder
34
- COPY --from=builder /build/agent-swarm-api /usr/local/bin/agent-swarm-api
35
- RUN chmod +x /usr/local/bin/agent-swarm-api
36
-
37
- # Copy package.json for version info
38
- COPY package.json ./
39
-
40
- # Copy migration SQL files (compiled binary can't read from /$bunfs virtual filesystem)
41
- COPY src/be/migrations/*.sql /app/migrations/
42
-
43
- # Install archil CLI for FUSE/R2-backed disk mounts
44
- RUN curl https://s3.amazonaws.com/archil-client/install | sh
45
-
46
- # Create data directory for SQLite (WAL mode needs .sqlite, .sqlite-wal, .sqlite-shm on same filesystem)
47
- # Create Archil mount point directories
48
- RUN mkdir -p /app/data /mnt/data /workspace/shared
49
-
50
- ENV PORT=3013
51
- ENV DATABASE_PATH=/app/data/agent-swarm-db.sqlite
52
- ENV MIGRATIONS_DIR=/app/migrations
53
-
54
- VOLUME /app/data
55
-
56
- EXPOSE 3013
57
-
58
- # Health check
59
- HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
60
- CMD wget -qO- http://localhost:3013/health || exit 1
61
-
62
- COPY api-entrypoint.sh /api-entrypoint.sh
63
- RUN chmod +x /api-entrypoint.sh
64
-
65
- ENTRYPOINT ["/api-entrypoint.sh"]