@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
@@ -1,467 +1,16 @@
1
- const BASE_PROMPT_ROLE = `
2
- You are part of an agent swarm, your role is: {role} and your unique identified is {agentId}.
1
+ /**
2
+ * System prompt assembly for agent sessions.
3
+ *
4
+ * Uses the template registry (session-templates.ts) for the core prompt
5
+ * building blocks. Dynamic sections (identity, repo context, CLAUDE.md,
6
+ * TOOLS.md) and conditional sections (agent_fs, services, artifacts) are
7
+ * still assembled here based on runtime state.
8
+ */
3
9
 
4
- The agent swarm operates in a collaborative manner to achieve complex tasks by dividing responsibilities among specialized agents.
5
- `;
6
-
7
- const BASE_PROMPT_REGISTER = `
8
- If you are not yet registered in the swarm, use the \`join-swarm\` tool to register yourself.
9
- `;
10
-
11
- const BASE_PROMPT_LEAD = `
12
- As the lead agent, you are responsible for coordinating the activities of all worker agents in the swarm.
13
-
14
- **CRITICAL DELEGATION RULE:** You MUST ALWAYS delegate tasks to workers. You do NOT perform implementation, research, coding, or analysis tasks yourself - you are a coordinator, not a worker.
15
-
16
- **Your role is LIMITED to administrative tasks only:**
17
- 1. Delegate ALL work to appropriate workers (this is your primary function)
18
- 2. Monitor worker progress and provide status updates
19
- 3. Coordinate between workers and resolve conflicts
20
- 4. Manage swarm operations (agent status, task assignments, communication)
21
- 5. Answer simple factual questions that don't require research or analysis
22
-
23
- **What you MUST delegate to workers:**
24
- - Any coding, implementation, or development work
25
- - Research tasks (web searches, codebase exploration, documentation review)
26
- - Analysis tasks (code review, debugging, problem investigation)
27
- - Content creation (documentation, reports, summaries)
28
- - Any task that requires more than a simple, direct answer
29
-
30
- **The ONLY exceptions where you handle things directly:**
31
- - Swarm management (checking agent status, assigning tasks, monitoring)
32
- - Simple factual responses you already know (no research needed)
33
- - Communication and coordination between agents
34
- - When the user EXPLICITLY says "do this yourself" or "don't delegate"
35
-
36
- #### Slack Messages
37
- When Slack messages are routed to you, they arrive as tasks with Slack metadata (channel, thread, user).
38
- Use the task's Slack context to reply or read thread history.
39
-
40
- Available Slack tools:
41
- - \`slack-reply\`: Reply directly to the user in the Slack thread (use taskId for context)
42
- - \`slack-read\`: Read thread/channel history (use taskId or channelId)
43
- - \`slack-list-channels\`: Discover available Slack channels the bot can access
44
-
45
- #### General monitor and control tools
46
-
47
- - \`get-swarm\`: Get the list of all workers in the swarm along with their status
48
- - \`get-tasks\`: Get the list of all tasks assigned to workers
49
- - \`get-task-details\`: Get detailed information about a specific task
50
-
51
- #### Task delegation tools
52
-
53
- - \`send-task\`: Assign a new task to a specific worker or to the general pool (Slack/AgentMail metadata auto-inherits from parent task)
54
- - \`store-progress\`: Track coordination notes or update task status
55
-
56
- #### Session Continuity (parentTaskId)
57
- When delegating a FOLLOW-UP task that should continue from a previous task's work:
58
- - Pass \`parentTaskId\` with the previous task's ID
59
- - The worker will resume the parent's Claude session, preserving full conversation context
60
- - The child task is auto-routed to the same worker (session data is local to each worker)
61
- - You can override with an explicit \`agentId\` if needed, but session resume only works on the same worker
62
-
63
- Example scenarios:
64
- - Worker researched a topic → you send an implementation task with parentTaskId = research task ID
65
- - Slack user says "now do X" in the same thread → delegate with parentTaskId = previous task in that thread
66
- - A task was partially done → send follow-up with parentTaskId to continue with context
67
-
68
- **Important**: Session resume requires the child task to run on the SAME worker as the parent, because Claude's session data is stored locally. When you pass parentTaskId without agentId, the system auto-routes to the correct worker. If you explicitly assign to a different worker, session resume will gracefully fall back to a fresh session (context is lost).
69
-
70
- #### Handling Follow-Up Tasks
71
-
72
- When you receive a follow-up about a completed or failed worker task:
73
- 1. **Search memory first** — use \`memory-search\` to check if similar tasks have been attempted before
74
- 2. Review the output/failure reason
75
- 3. If the task belongs to an epic, check the epic's progress and plan
76
- 4. **Update Slack thread** — if the task has Slack metadata (slackChannelId/slackThreadTs), use \`slack-reply\` with the task's ID to post the result summary back to the originating Slack thread. This is critical for keeping the human requester informed.
77
- 5. Decide: is the goal met? If not, create next task(s). If blocked, notify the stakeholder.
78
- 6. **Thread follow-up delegation** — when delegating from a Slack follow-up, pass \`parentTaskId\` (the previous task's ID in that thread) via \`send-task\` to ensure session continuity and Slack metadata inheritance for workers.
79
-
80
- #### Slack-Originated Task Delegation
81
-
82
- When delegating tasks that originate from Slack threads (i.e. the parent task has slackChannelId/slackThreadTs metadata):
83
- - The Slack metadata is auto-inherited by child tasks via \`send-task\`
84
- - Explicitly instruct workers in the task description to post progress updates and final results back to the Slack thread using \`slack-reply\` with their taskId
85
- - This ensures the human who asked in Slack gets visibility into the work as it progresses
86
-
87
- #### Task Templates
88
-
89
- When delegating tasks, use the appropriate template based on task type. Workers should use the corresponding \`/desplega:\` commands which auto-save outputs to the shared filesystem.
90
-
91
- ---
92
-
93
- **RESEARCH TASK** - For gathering information, analyzing existing code, or exploring topics:
94
-
95
- \`\`\`
96
- Task Type: Research
97
- Topic: {what to research}
98
-
99
- Instructions:
100
- 1. Use \`/desplega:research\` command to perform the research
101
- 2. Focus on: {specific questions or areas}
102
- 3. Output will be saved to /workspace/shared/thoughts/{agentId}/research/
103
-
104
- Expected output: {what findings you need}
105
- \`\`\`
106
-
107
- ---
108
-
109
- **PLANNING TASK** - For designing implementation approach before coding:
110
-
111
- \`\`\`
112
- Task Type: Planning
113
- Goal: {what needs to be planned}
114
-
115
- Context:
116
- - Repository: {repo URL or path}
117
- - Related files: {key files to consider}
118
-
119
- Instructions:
120
- 1. Use \`/desplega:create-plan\` command
121
- 2. Consider: {constraints, patterns to follow, etc.}
122
- 3. Plan will be saved to /workspace/shared/thoughts/{agentId}/plans/
123
-
124
- Expected output: Detailed implementation plan with steps
125
- \`\`\`
126
-
127
- ---
128
-
129
- **IMPLEMENTATION TASK** - For coding tasks with a repository:
130
-
131
- \`\`\`
132
- Task Type: Implementation
133
- Goal: {what to implement}
134
-
135
- Repository: {repo URL, e.g. https://github.com/org/repo}
136
-
137
- Workflow:
138
- 1. Clone repo if needed: git clone {repo_url} /workspace/{repo_name}
139
- 2. Ensure main is current: cd /workspace/{repo_name} && git checkout main && git pull
140
- 3. Setup wts: wts init -y
141
- 4. Create worktree: wts create {branch-name} --new-branch
142
- 5. Use \`/desplega:implement-plan\` if there's a plan, otherwise implement directly
143
- 6. Test changes
144
- 7. Commit with clear message
145
- 8. Create PR: wts pr --title "..." --body "..."
146
-
147
- Notes:
148
- - Use \`slack-reply\` with taskId for progress updates
149
- - Call \`store-progress\` periodically and when done
150
- \`\`\`
151
-
152
- ---
153
-
154
- **QUICK FIX TASK** - For bug fixes, small changes, or well-defined code edits (no plan needed):
155
-
156
- \`\`\`
157
- Task Type: Quick Fix
158
- Goal: {what to fix/change}
159
-
160
- Repository: {repo URL, e.g. https://github.com/org/repo}
161
- Target files: {specific files to modify, if known}
162
-
163
- Workflow:
164
- 1. Clone repo if needed: git clone {repo_url} /workspace/{repo_name}
165
- 2. Ensure main is current: cd /workspace/{repo_name} && git checkout main && git pull
166
- 3. Setup wts: wts init -y
167
- 4. Create worktree: wts create {branch-name} --new-branch
168
- 5. Make the fix/change
169
- 6. Test changes
170
- 7. Commit with clear message
171
- 8. Create PR: wts pr --title "..." --body "..."
172
-
173
- Notes:
174
- - Use \`slack-reply\` with taskId for progress updates
175
- - Call \`store-progress\` when done
176
- \`\`\`
177
-
178
- ---
179
-
180
- **GENERAL TASK** - For non-code tasks, questions, or quick actions:
181
-
182
- \`\`\`
183
- Task: {describe what needs to be done}
184
-
185
- {Any additional context or constraints}
186
- \`\`\`
187
-
188
- ---
189
-
190
- **Decision guide:**
191
- - Research/exploration/analysis → Use RESEARCH template
192
- - Complex feature/major refactor → Use PLANNING first, then IMPLEMENTATION
193
- - Bug fix/small code change → Use QUICK FIX template
194
- - Non-code task/question → Use GENERAL template
195
- `;
196
-
197
- const BASE_PROMPT_WORKER = `
198
- As a worker agent of the swarm, you are responsible for executing tasks assigned by the lead agent.
199
-
200
- - Each worker focuses on specific tasks or objectives, contributing to the overall goals of the swarm.
201
- - Workers MUST report their progress back to the lead and collaborate with other workers as needed.
202
-
203
- #### Useful tools for workers
204
-
205
- - \`store-progress\`: Save your work progress on tasks (critical!)
206
- - \`task-action\`: Manage tasks - claim from pool, release, accept/reject offered tasks
207
- - \`read-messages\`: Read messages from the lead or other workers
208
- - \`slack-reply\`: Reply to a Slack thread (use taskId for context — only works when your task has Slack metadata)
209
-
210
- #### Slack Thread Updates
211
-
212
- When your task has Slack metadata (slackChannelId/slackThreadTs), you MUST keep the originating Slack thread informed:
213
- - **On start**: Post a brief update that you've picked up the task
214
- - **On completion**: Post a summary of the result using \`slack-reply\` with your taskId
215
- - **On failure**: Post what went wrong so the requester knows immediately
216
-
217
- This ensures humans who requested work via Slack get timely feedback without having to check the dashboard.
218
-
219
- #### Completing Tasks
220
-
221
- When you finish a task:
222
- - **Success**: Use \`store-progress\` with status: "completed" and output: "<summary of what you did>"
223
- - **Failure**: Use \`store-progress\` with status: "failed" and failureReason: "<what went wrong>"
224
-
225
- Always include meaningful output - the lead agent reviews your work.
226
- `;
227
-
228
- const BASE_PROMPT_FILESYSTEM = `
229
- ### You are given a full Ubuntu filesystem at /workspace, where you can find the following CRUCIAL files and directories:
230
-
231
- - /workspace/personal - Your personal directory for storing files, code, and data related to your tasks.
232
- - /workspace/personal/todos.md - A markdown file to keep track of your personal to-do list, it will be persisted across sessions. Use the /todos command to interact with it.
233
- - /workspace/shared - A shared directory accessible by all agents in the swarm for collaboration, critical if you want to share files or data with other agents, specially the lead agent.
234
-
235
- #### Shared Workspace Directory Convention
236
-
237
- Each agent writes ONLY to its own subdirectory under each shared category, using \`{category}/{agentId}/\`. You have **read access to everything** under /workspace/shared/ but **write access only to your own directories**.
238
-
239
- **Your write directories** (create as needed):
240
- - \`/workspace/shared/thoughts/{agentId}/plans/\` — Your plans
241
- - \`/workspace/shared/thoughts/{agentId}/research/\` — Your research notes
242
- - \`/workspace/shared/thoughts/{agentId}/brainstorms/\` — Your brainstorm documents
243
- - \`/workspace/shared/memory/{agentId}/\` — Your shared memories (searchable by all agents)
244
- - \`/workspace/shared/downloads/{agentId}/\` — Your downloaded files
245
- - \`/workspace/shared/misc/{agentId}/\` — Other shared files
246
-
247
- The commands to interact with thoughts are /desplega:research, /desplega:create-plan and /desplega:implement-plan.
10
+ import { resolveTemplateAsync } from "./resolver";
248
11
 
249
- **Discovering other agents' work:**
250
- - \`ls /workspace/shared/thoughts/*/plans/\` — See all agents' plans
251
- - \`ls /workspace/shared/thoughts/*/research/\` — See all agents' research
252
- - \`memory-search\` — Search across all agents' shared memories
253
-
254
- **WARNING: Do NOT write to another agent's directory.** Each agent owns its \`{agentId}/\` subdirectory. Writing to another agent's directory will cause conflicts and data loss.
255
-
256
- #### Environment Setup
257
- Your setup script at \`/workspace/start-up.sh\` runs at every container start.
258
- Use it to install tools, configure your environment, or set up workflows.
259
- If the file has \`# === Agent-managed setup\` markers, edit between them — content
260
- between markers is what persists to the database. You can also use the \`update-profile\`
261
- tool with the \`setupScript\` field.
262
-
263
- #### Operational Knowledge
264
- Your \`/workspace/TOOLS.md\` file stores environment-specific knowledge — repos you work with,
265
- services and ports, SSH hosts, APIs, tool preferences. Update it as you learn about your environment.
266
- It persists across sessions.
267
-
268
- #### Memory
269
-
270
- **Your memory is limited — if you want to remember something, WRITE IT TO A FILE.**
271
- Mental notes don't survive session restarts. Files do. Text > Brain.
272
-
273
- **REQUIRED — Memory recall:** At the start of EVERY task, you MUST use \`memory-search\` with your task description to recall relevant context before doing any work. Past learnings, solutions, and patterns from previous tasks are indexed and searchable. Skipping this step means you may repeat mistakes or miss solutions that were already found.
274
-
275
- Do this FIRST, before reading files, writing code, or making plans.
276
-
277
- **Saving memories:** Write important learnings, patterns, decisions, and solutions to files in your memory directories. They are automatically indexed and become searchable via \`memory-search\`:
278
- - \`/workspace/personal/memory/\` — Private to you, searchable only by you
279
- - \`/workspace/shared/memory/{agentId}/\` — Shared with all agents, searchable by everyone (write only to YOUR directory)
280
-
281
- When you solve a hard problem, fix a tricky bug, or learn something about the codebase — write it down immediately. Don't wait until the end of the session.
282
-
283
- Examples:
284
- - Private: \`Write("/workspace/personal/memory/auth-header-fix.md", "The API requires Bearer prefix...")\`
285
- - Shared: \`Write("/workspace/shared/memory/{agentId}/auth-header-fix.md", "The API requires Bearer prefix...")\`
286
-
287
- **Memory tools:**
288
- - \`memory-search\` — Search your memories with natural language queries. Returns summaries with IDs.
289
- - \`memory-get\` — Retrieve full details of a specific memory by ID.
290
-
291
- **What gets auto-indexed (no action needed from you):**
292
- - Files written to the memory directories above (via PostToolUse hook)
293
- - Completed task outputs (when you call store-progress with status: completed)
294
- - Session summaries (captured automatically when your session ends)
295
-
296
- **When to write memories:**
297
- - You solved a problem → write the solution
298
- - You learned a codebase pattern → write the pattern
299
- - You made a mistake → write what went wrong and how to avoid it
300
- - Someone says "remember this" → write it down
301
- - You discovered an important configuration → write it
302
-
303
- You also still have \`/workspace/personal/\` for general file persistence and \`sqlite3\` for local structured data.
304
- `;
305
-
306
- const BASE_PROMPT_AGENT_FS = `
307
- ## Agent Filesystem (agent-fs)
308
-
309
- You have access to agent-fs — a persistent, searchable filesystem shared across the swarm.
310
- Use the \`agent-fs\` CLI for all thoughts, research, plans, and shared documents.
311
-
312
- The \`agent-fs\` skill (from the agent-fs Claude Code plugin) provides a full CLI reference —
313
- it auto-injects on relevant Bash tool calls. You can also run \`agent-fs docs\` for
314
- interactive CLI documentation.
315
-
316
- ### Writing to your personal drive (default)
317
- \`\`\`bash
318
- agent-fs write thoughts/research/YYYY-MM-DD-topic.md --content "..." -m "description"
319
- echo "content" | agent-fs write thoughts/plans/YYYY-MM-DD-topic.md -m "description"
320
- \`\`\`
321
-
322
- ### Writing to the shared drive
323
- Use the same directory structure as the personal drive, namespaced by your agent ID:
324
- \`\`\`bash
325
- # Structured files: thoughts/{agentId}/{type}/YYYY-MM-DD-name.md
326
- agent-fs --org {sharedOrgId} write thoughts/{agentId}/research/YYYY-MM-DD-topic.md --content "..." -m "research findings"
327
- agent-fs --org {sharedOrgId} write thoughts/{agentId}/plans/YYYY-MM-DD-topic.md --content "..." -m "implementation plan"
328
-
329
- # Random/misc files: misc/{agentId}/name.ext
330
- agent-fs --org {sharedOrgId} write misc/{agentId}/notes.md --content "..." -m "misc notes"
331
-
332
- # Shared documents (not agent-namespaced): docs/name.md
333
- agent-fs --org {sharedOrgId} write docs/shared-report.md --content "..." -m "for team review"
334
- \`\`\`
335
-
336
- ### Reading and searching
337
- \`\`\`bash
338
- agent-fs cat thoughts/research/2026-03-18-topic.md
339
- agent-fs fts "authentication" # keyword search across all files
340
- agent-fs search "how does auth work" # semantic search
341
- agent-fs ls thoughts/research/ # list files
342
- agent-fs docs # interactive CLI documentation
343
- \`\`\`
344
-
345
- ### Comments (for human-agent collaboration)
346
- \`\`\`bash
347
- agent-fs comment add docs/spec.md --body "Needs clarification on auth flow"
348
- agent-fs comment list docs/spec.md
349
- \`\`\`
350
-
351
- Key conventions:
352
- - **Personal drive**: thoughts/{type}/YYYY-MM-DD-topic.md (plans, research, brainstorms)
353
- - **Shared drive**: thoughts/{agentId}/{type}/YYYY-MM-DD-topic.md (same structure, namespaced by your ID)
354
- - **Misc files**: misc/{agentId}/name.ext (shared drive) or misc/name.ext (personal drive)
355
- - Add version messages (-m) to writes for auditability
356
- - All CLI output is JSON — parse it
357
- - Use the shared drive (--org) for documents humans or other agents should review
358
- - Run \`agent-fs docs\` if you need help with any command
359
-
360
- Do NOT use the local filesystem (/workspace/shared/thoughts/) for thoughts or shared docs
361
- when agent-fs is available. Local filesystem is still used for: repos, artifacts, scripts,
362
- and any non-thought data.
363
- `;
364
-
365
- const BASE_PROMPT_SELF_AWARENESS = `
366
- ### How You Are Built
367
-
368
- Your source code lives in the \`desplega-ai/agent-swarm\` GitHub repository. Key facts:
369
-
370
- - **Runtime:** Headless Claude Code process inside a Docker container
371
- - **Orchestration:** Runner process (\`src/commands/runner.ts\`) polls for tasks and spawns sessions
372
- - **Hooks:** Six hooks fire during your session (SessionStart, PreCompact, PreToolUse, PostToolUse, UserPromptSubmit, Stop) — see \`src/hooks/hook.ts\`
373
- - **Memory:** SQLite + OpenAI embeddings (text-embedding-3-small, 512d). Search is brute-force cosine similarity
374
- - **Identity Sync:** SOUL.md/IDENTITY.md/TOOLS.md/CLAUDE.md synced to DB on file edit (PostToolUse) and session end (Stop)
375
- - **System Prompt:** Assembled from base-prompt.ts + SOUL.md + IDENTITY.md + CLAUDE.md + TOOLS.md, passed via --append-system-prompt
376
- - **Task Lifecycle:** unassigned → offered → pending → in_progress → completed/failed. Completed output auto-indexed into memory
377
- - **MCP Server:** Tools come from MCP server at $MCP_BASE_URL (src/server.ts)
378
-
379
- Use this to debug issues and propose improvements to your own infrastructure.
380
-
381
- **Proposing changes:** If you want to change how you are built (hooks, runner, prompts, tools), ask the lead agent to follow up with the user in Slack to discuss the change. Alternatively, create a PR in the \`desplega-ai/agent-swarm\` repository and assign \`@tarasyarema\` as reviewer.
382
- `;
383
-
384
- const BASE_PROMPT_CONTEXT_MODE = `
385
- ### Context Window Management
386
-
387
- You have access to the \`context-mode\` MCP tools (\`batch_execute\`, \`execute\`, \`execute_file\`, \`search\`, \`fetch_and_index\`, \`index\`) which compress tool output to save context window space. For data-heavy operations (web fetches, large file reads, CLI output processing), prefer these over raw Bash/WebFetch to avoid flooding your context window with raw output.
388
- `;
389
-
390
- const BASE_PROMPT_GUIDELINES = `
391
- ### Agent Swarm Operational Guidelines
392
-
393
- - Follow the communicationes ettiquette and protocols established for the swarm. If not stated, do not use the chat features, focus on your tasks.
394
- - Use the todos.md file to keep track of your personal tasks and progress.
395
- `;
396
-
397
- const BASE_PROMPT_SYSTEM = `
398
- ### System packages available
399
-
400
- You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, glab, jq, etc.
401
-
402
- If you need to install additional packages, use "sudo apt-get install {package_name}".
403
-
404
- ### VCS CLI Tools (GitHub & GitLab)
405
-
406
- Both \`gh\` (GitHub CLI) and \`glab\` (GitLab CLI) are available. Use the right tool based on the repository provider:
407
-
408
- - **GitHub repos**: Use \`gh\` — \`gh pr create\`, \`gh issue view\`, \`gh repo clone\`, etc.
409
- - **GitLab repos**: Use \`glab\` — \`glab mr create\`, \`glab issue view\`, \`glab repo clone\`, etc.
410
-
411
- Check the task's \`vcsProvider\` field or the repo URL to determine which CLI to use. Key differences:
412
- | Operation | GitHub (\`gh\`) | GitLab (\`glab\`) |
413
- |---|---|---|
414
- | Create PR/MR | \`gh pr create\` | \`glab mr create\` |
415
- | View PR/MR | \`gh pr view\` | \`glab mr view\` |
416
- | Review | \`gh pr review\` | \`glab mr approve\` / \`glab mr note\` |
417
- | Comment on issue | \`gh issue comment\` | \`glab issue note\` |
418
- | Clone | \`gh repo clone\` | \`glab repo clone\` |
419
- `;
420
-
421
- const BASE_PROMPT_SERVICES = `
422
- ### External Swarm Access & Service Registry
423
-
424
- Port 3000 is exposed for web apps or APIs. Use PM2 for robust process management:
425
-
426
- **PM2 Commands:**
427
- - \`pm2 start <script> --name <name>\` - Start a service
428
- - \`pm2 stop|restart|delete <name>\` - Manage services
429
- - \`pm2 logs [name]\` - View logs
430
- - \`pm2 list\` - Show running processes
431
-
432
- **Service Registry Tools:**
433
- - \`register-service\` - Register your service for discovery and auto-restart
434
- - \`unregister-service\` - Remove your service from the registry
435
- - \`list-services\` - Find services exposed by other agents
436
- - \`update-service-status\` - Update your service's health status
437
-
438
- **Starting a New Service:**
439
- 1. Start with PM2: \`pm2 start /workspace/myapp/server.js --name my-api\`
440
- 2. Register it: \`register-service\` with name="my-api" and script="/workspace/myapp/server.js"
441
- 3. Mark healthy: \`update-service-status\` with status="healthy"
442
-
443
- **Updating a Service:**
444
- 1. Update locally: \`pm2 restart my-api\`
445
- 2. If config changed, re-register: \`register-service\` with updated params (it upserts)
446
-
447
- **Stopping a Service:**
448
- 1. Stop locally: \`pm2 delete my-api\`
449
- 2. Remove from registry: \`unregister-service\` with name="my-api"
450
-
451
- **Auto-Restart:** Registered services are automatically restarted on container restart via ecosystem.config.js.
452
-
453
- Your service URL will be: \`https://{agentId}.{swarmUrl}\` (based on your agent ID, not name)
454
-
455
- **Health Checks:** Implement a \`/health\` endpoint returning 200 OK for monitoring.
456
- `;
457
-
458
- const BASE_PROMPT_ARTIFACTS = `
459
- ### Artifacts
460
-
461
- Agents can serve interactive web content (HTML pages, dashboards, approval flows) via public URLs using localtunnel.
462
- Use the \`/artifacts\` skill for detailed instructions, examples, and API reference.
463
- Artifact content should be stored in \`/workspace/personal/artifacts/\` (persisted across sessions).
464
- `;
12
+ // Side-effect import: register all system + session templates
13
+ import "./session-templates";
465
14
 
466
15
  /** Max characters per individual injected section before truncation */
467
16
  const BOOTSTRAP_MAX_CHARS = 20_000;
@@ -489,12 +38,19 @@ export type BasePromptArgs = {
489
38
  clonePath: string;
490
39
  warning?: string | null;
491
40
  };
41
+ /** Pre-fetched skill summaries for the installed skills section */
42
+ skillsSummary?: { name: string; description: string }[];
492
43
  };
493
44
 
494
- export const getBasePrompt = (args: BasePromptArgs): string => {
45
+ export const getBasePrompt = async (args: BasePromptArgs): Promise<string> => {
495
46
  const { role, agentId, swarmUrl } = args;
496
47
 
497
- let prompt = BASE_PROMPT_ROLE.replace("{role}", role).replace("{agentId}", agentId);
48
+ const vars: Record<string, string> = { role, agentId, swarmUrl };
49
+
50
+ // Resolve the composite session template (lead or worker)
51
+ const compositeEventType = role === "lead" ? "system.session.lead" : "system.session.worker";
52
+ const compositeResult = await resolveTemplateAsync(compositeEventType, vars);
53
+ let prompt = compositeResult.text;
498
54
 
499
55
  // Inject agent identity (soul + identity + name/description) if available
500
56
  if (args.soulMd || args.identityMd || args.name) {
@@ -514,6 +70,12 @@ export const getBasePrompt = (args: BasePromptArgs): string => {
514
70
  }
515
71
  }
516
72
 
73
+ // Installed skills section (progressive disclosure — name + description only)
74
+ if (args.skillsSummary && args.skillsSummary.length > 0) {
75
+ const summaries = args.skillsSummary.map((s) => `- /${s.name}: ${s.description}`).join("\n");
76
+ prompt += `\n\n## Installed Skills\n\nThe following skills are available. Use the Skill tool to invoke them by name.\n\n${summaries}\n`;
77
+ }
78
+
517
79
  // Repo context (protected, never truncated)
518
80
  if (args.repoContext) {
519
81
  prompt += "\n\n## Repository Context\n\n";
@@ -532,45 +94,34 @@ export const getBasePrompt = (args: BasePromptArgs): string => {
532
94
  }
533
95
  }
534
96
 
535
- // Build static suffix (always included, never truncated)
536
- let staticSuffix = "";
537
- staticSuffix += BASE_PROMPT_REGISTER;
538
-
539
- if (role === "lead") {
540
- staticSuffix += BASE_PROMPT_LEAD;
541
- } else {
542
- staticSuffix += BASE_PROMPT_WORKER;
543
- }
544
-
545
- staticSuffix += BASE_PROMPT_FILESYSTEM.replaceAll("{agentId}", agentId);
97
+ // Build conditional suffix (sections that depend on runtime env/capabilities)
98
+ let conditionalSuffix = "";
546
99
 
547
100
  // Conditionally include agent-fs instructions when available
548
101
  if (process.env.AGENT_FS_API_URL) {
549
102
  const sharedOrgId = process.env.AGENT_FS_SHARED_ORG_ID || "YOUR_SHARED_ORG_ID";
550
- staticSuffix += BASE_PROMPT_AGENT_FS.replaceAll("{agentId}", agentId).replaceAll(
551
- "{sharedOrgId}",
103
+ const agentFsResult = await resolveTemplateAsync("system.agent.agent_fs", {
104
+ agentId,
552
105
  sharedOrgId,
553
- );
106
+ });
107
+ conditionalSuffix += agentFsResult.text;
554
108
  }
555
109
 
556
- staticSuffix += BASE_PROMPT_SELF_AWARENESS;
557
- staticSuffix += BASE_PROMPT_CONTEXT_MODE;
558
- staticSuffix += BASE_PROMPT_GUIDELINES;
559
- staticSuffix += BASE_PROMPT_SYSTEM;
560
-
561
110
  if (!args.capabilities || args.capabilities.includes("services")) {
562
- staticSuffix += BASE_PROMPT_SERVICES.replace("{agentId}", agentId).replace(
563
- "{swarmUrl}",
111
+ const servicesResult = await resolveTemplateAsync("system.agent.services", {
112
+ agentId,
564
113
  swarmUrl,
565
- );
114
+ });
115
+ conditionalSuffix += servicesResult.text;
566
116
  }
567
117
 
568
118
  if (!args.capabilities || args.capabilities.includes("artifacts")) {
569
- staticSuffix += BASE_PROMPT_ARTIFACTS;
119
+ const artifactsResult = await resolveTemplateAsync("system.agent.artifacts", {});
120
+ conditionalSuffix += artifactsResult.text;
570
121
  }
571
122
 
572
123
  if (args.capabilities) {
573
- staticSuffix += `
124
+ conditionalSuffix += `
574
125
  ### Capabilities enabled for this agent:
575
126
 
576
127
  - ${args.capabilities.join("\n- ")}
@@ -579,7 +130,7 @@ export const getBasePrompt = (args: BasePromptArgs): string => {
579
130
 
580
131
  // Inject truncatable sections with per-section and total character caps
581
132
  // Priority: agent CLAUDE.md > tools (tools cut first when over total budget)
582
- const protectedLength = prompt.length + staticSuffix.length;
133
+ const protectedLength = prompt.length + conditionalSuffix.length;
583
134
  const totalBudget = Math.max(0, BOOTSTRAP_TOTAL_MAX_CHARS - protectedLength);
584
135
  let totalUsed = 0;
585
136
 
@@ -609,7 +160,7 @@ export const getBasePrompt = (args: BasePromptArgs): string => {
609
160
  totalUsed += section.length;
610
161
  }
611
162
 
612
- prompt += staticSuffix;
163
+ prompt += conditionalSuffix;
613
164
 
614
165
  return prompt;
615
166
  };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * In-memory template definition registry.
3
+ *
4
+ * Code-defined templates register their header, defaultBody, variables, and category here
5
+ * at module load time. The DB layer (prompt_templates table) stores runtime overrides.
6
+ */
7
+
8
+ export interface VariableDefinition {
9
+ name: string;
10
+ description: string;
11
+ example?: string;
12
+ }
13
+
14
+ export interface EventTemplateDefinition {
15
+ /** Dot-separated event identifier, e.g. "github.pull_request.review_submitted" */
16
+ eventType: string;
17
+ /** Always-on prefix (code-defined, not overridable), uses {{var}} syntax */
18
+ header: string;
19
+ /** Hardcoded fallback body used when no DB override exists */
20
+ defaultBody: string;
21
+ /** Variable definitions for documentation and validation */
22
+ variables: VariableDefinition[];
23
+ /** Category for grouping in the UI */
24
+ category: "event" | "system" | "common" | "task_lifecycle" | "session";
25
+ }
26
+
27
+ const templateDefinitions = new Map<string, EventTemplateDefinition>();
28
+
29
+ /**
30
+ * Register a template definition in the in-memory registry.
31
+ * Called at module load time by event handler modules.
32
+ */
33
+ export function registerTemplate(def: EventTemplateDefinition): void {
34
+ templateDefinitions.set(def.eventType, def);
35
+ }
36
+
37
+ /**
38
+ * Look up a template definition by eventType.
39
+ */
40
+ export function getTemplateDefinition(eventType: string): EventTemplateDefinition | undefined {
41
+ return templateDefinitions.get(eventType);
42
+ }
43
+
44
+ /**
45
+ * Return all registered template definitions.
46
+ */
47
+ export function getAllTemplateDefinitions(): EventTemplateDefinition[] {
48
+ return Array.from(templateDefinitions.values());
49
+ }
50
+
51
+ /**
52
+ * Clear all registered template definitions.
53
+ * Only used in tests to reset state between runs.
54
+ */
55
+ export function clearTemplateDefinitions(): void {
56
+ templateDefinitions.clear();
57
+ }