@desplega.ai/agent-swarm 1.20.0 → 1.49.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 (810) hide show
  1. package/.claude/settings.json +84 -0
  2. package/.claude/settings.local.json +3 -1
  3. package/.entire/settings.json +4 -0
  4. package/.env.docker.example +40 -23
  5. package/.env.example +39 -1
  6. package/.github/ISSUE_TEMPLATE/bug_report.yml +78 -0
  7. package/.github/ISSUE_TEMPLATE/community-template.yml +77 -0
  8. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  9. package/.github/ISSUE_TEMPLATE/feature_request.yml +60 -0
  10. package/.github/PULL_REQUEST_TEMPLATE/community-template.md +29 -0
  11. package/.github/workflows/ci.yml +3 -27
  12. package/.github/workflows/docker-and-deploy.yml +20 -5
  13. package/.github/workflows/merge-gate.yml +233 -0
  14. package/.opencode/plugins/entire.ts +133 -0
  15. package/.superset/config.json +6 -0
  16. package/.wts-setup.ts +103 -34
  17. package/CHANGELOG.md +447 -0
  18. package/CLAUDE.md +422 -5
  19. package/CONTRIBUTING.md +46 -1
  20. package/DEPLOYMENT.md +26 -9
  21. package/Dockerfile +15 -7
  22. package/Dockerfile.worker +99 -67
  23. package/MCP.md +452 -17
  24. package/README.md +271 -169
  25. package/api-entrypoint.sh +56 -0
  26. package/depot.json +1 -0
  27. package/docker-compose.example.yml +194 -3
  28. package/docker-compose.local.yml +119 -0
  29. package/docker-entrypoint.sh +393 -113
  30. package/docs-site/app/api/search/route.ts +4 -0
  31. package/docs-site/app/docs/[[...slug]]/page.tsx +87 -0
  32. package/docs-site/app/docs/layout.tsx +12 -0
  33. package/docs-site/app/globals.css +24 -0
  34. package/docs-site/app/layout.config.tsx +34 -0
  35. package/docs-site/app/layout.tsx +119 -0
  36. package/docs-site/app/llms-full.txt/route.ts +11 -0
  37. package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +24 -0
  38. package/docs-site/app/llms.txt/route.ts +8 -0
  39. package/docs-site/app/page.tsx +5 -0
  40. package/docs-site/app/robots.ts +13 -0
  41. package/docs-site/app/sitemap.ts +37 -0
  42. package/docs-site/components/api-page.client.tsx +4 -0
  43. package/docs-site/components/api-page.tsx +7 -0
  44. package/docs-site/components/mdx/mermaid.tsx +55 -0
  45. package/docs-site/content/docs/(documentation)/architecture/agents.mdx +117 -0
  46. package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +77 -0
  47. package/docs-site/content/docs/(documentation)/architecture/memory.mdx +96 -0
  48. package/docs-site/content/docs/(documentation)/architecture/meta.json +4 -0
  49. package/docs-site/content/docs/(documentation)/architecture/overview.mdx +172 -0
  50. package/docs-site/content/docs/(documentation)/concepts/epics.mdx +98 -0
  51. package/docs-site/content/docs/(documentation)/concepts/meta.json +4 -0
  52. package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +136 -0
  53. package/docs-site/content/docs/(documentation)/concepts/services.mdx +104 -0
  54. package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +148 -0
  55. package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +209 -0
  56. package/docs-site/content/docs/(documentation)/contributing.mdx +158 -0
  57. package/docs-site/content/docs/(documentation)/getting-started.mdx +157 -0
  58. package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +79 -0
  59. package/docs-site/content/docs/(documentation)/guides/deployment.mdx +171 -0
  60. package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +81 -0
  61. package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +93 -0
  62. package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +98 -0
  63. package/docs-site/content/docs/(documentation)/guides/meta.json +13 -0
  64. package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +52 -0
  65. package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +179 -0
  66. package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +154 -0
  67. package/docs-site/content/docs/(documentation)/index.mdx +65 -0
  68. package/docs-site/content/docs/(documentation)/meta.json +19 -0
  69. package/docs-site/content/docs/(documentation)/reference/cli.mdx +241 -0
  70. package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +205 -0
  71. package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +449 -0
  72. package/docs-site/content/docs/(documentation)/reference/meta.json +4 -0
  73. package/docs-site/content/docs/api-reference/active-sessions.mdx +9 -0
  74. package/docs-site/content/docs/api-reference/agents.mdx +9 -0
  75. package/docs-site/content/docs/api-reference/channels.mdx +9 -0
  76. package/docs-site/content/docs/api-reference/config.mdx +9 -0
  77. package/docs-site/content/docs/api-reference/debug.mdx +9 -0
  78. package/docs-site/content/docs/api-reference/ecosystem.mdx +9 -0
  79. package/docs-site/content/docs/api-reference/epics.mdx +9 -0
  80. package/docs-site/content/docs/api-reference/index.mdx +32 -0
  81. package/docs-site/content/docs/api-reference/memory.mdx +9 -0
  82. package/docs-site/content/docs/api-reference/meta.json +25 -0
  83. package/docs-site/content/docs/api-reference/poll.mdx +9 -0
  84. package/docs-site/content/docs/api-reference/repos.mdx +9 -0
  85. package/docs-site/content/docs/api-reference/schedules.mdx +9 -0
  86. package/docs-site/content/docs/api-reference/session-data.mdx +9 -0
  87. package/docs-site/content/docs/api-reference/stats.mdx +9 -0
  88. package/docs-site/content/docs/api-reference/tasks.mdx +9 -0
  89. package/docs-site/content/docs/api-reference/trackers.mdx +9 -0
  90. package/docs-site/content/docs/api-reference/webhooks.mdx +9 -0
  91. package/docs-site/content/docs/api-reference/workflows.mdx +9 -0
  92. package/docs-site/content/docs/meta.json +3 -0
  93. package/docs-site/lib/get-llm-text.ts +10 -0
  94. package/docs-site/lib/openapi.ts +23 -0
  95. package/docs-site/lib/source.ts +8 -0
  96. package/docs-site/mdx-components.tsx +13 -0
  97. package/docs-site/next.config.mjs +29 -0
  98. package/docs-site/package.json +35 -0
  99. package/docs-site/pnpm-lock.yaml +5407 -0
  100. package/docs-site/postcss.config.mjs +8 -0
  101. package/docs-site/scripts/generate-docs.ts +171 -0
  102. package/docs-site/source.config.ts +17 -0
  103. package/docs-site/tsconfig.json +46 -0
  104. package/ecosystem.config.cjs +4 -4
  105. package/landing/next.config.ts +14 -0
  106. package/landing/package.json +31 -0
  107. package/landing/pnpm-lock.yaml +1091 -0
  108. package/landing/postcss.config.mjs +8 -0
  109. package/landing/public/apple-touch-icon.png +0 -0
  110. package/landing/public/favicon.ico +0 -0
  111. package/landing/public/logo.png +0 -0
  112. package/landing/public/og-image.png +0 -0
  113. package/landing/public/omghost-desplega.svg +30 -0
  114. package/landing/public/omghost-openfort.svg +9 -0
  115. package/landing/src/app/actions/waitlist.ts +25 -0
  116. package/landing/src/app/blog/openfort-hackathon/page.tsx +863 -0
  117. package/landing/src/app/blog/page.tsx +162 -0
  118. package/landing/src/app/blog/swarm-metrics/page.tsx +685 -0
  119. package/landing/src/app/examples/page.tsx +174 -0
  120. package/landing/src/app/examples/x402/page.tsx +456 -0
  121. package/landing/src/app/globals.css +122 -0
  122. package/landing/src/app/layout.tsx +134 -0
  123. package/landing/src/app/page.tsx +27 -0
  124. package/landing/src/app/robots.ts +13 -0
  125. package/landing/src/app/sitemap.ts +44 -0
  126. package/landing/src/components/architecture.tsx +163 -0
  127. package/landing/src/components/cta.tsx +52 -0
  128. package/landing/src/components/features.tsx +160 -0
  129. package/landing/src/components/footer.tsx +100 -0
  130. package/landing/src/components/hero.tsx +217 -0
  131. package/landing/src/components/how-it-works.tsx +165 -0
  132. package/landing/src/components/navbar.tsx +147 -0
  133. package/landing/src/components/waitlist.tsx +110 -0
  134. package/landing/src/components/why-choose.tsx +149 -0
  135. package/landing/src/components/workshops.tsx +328 -0
  136. package/landing/src/lib/utils.ts +6 -0
  137. package/landing/tsconfig.json +41 -0
  138. package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +154 -0
  139. package/new-ui/CLAUDE.md +92 -0
  140. package/new-ui/README.md +73 -0
  141. package/new-ui/biome.json +42 -0
  142. package/new-ui/components.json +21 -0
  143. package/new-ui/index.html +25 -0
  144. package/new-ui/package.json +49 -0
  145. package/new-ui/pnpm-lock.yaml +4845 -0
  146. package/new-ui/public/logo.png +0 -0
  147. package/new-ui/src/api/client.ts +814 -0
  148. package/new-ui/src/api/hooks/index.ts +64 -0
  149. package/new-ui/src/api/hooks/use-agents.ts +58 -0
  150. package/new-ui/src/api/hooks/use-channels.ts +115 -0
  151. package/new-ui/src/api/hooks/use-config-api.ts +46 -0
  152. package/new-ui/src/api/hooks/use-costs.ts +122 -0
  153. package/new-ui/src/api/hooks/use-db-query.ts +29 -0
  154. package/new-ui/src/api/hooks/use-epics.ts +75 -0
  155. package/new-ui/src/api/hooks/use-repos.ts +61 -0
  156. package/new-ui/src/api/hooks/use-schedules.ts +81 -0
  157. package/new-ui/src/api/hooks/use-services.ts +16 -0
  158. package/new-ui/src/api/hooks/use-stats.ts +27 -0
  159. package/new-ui/src/api/hooks/use-tasks.ts +89 -0
  160. package/new-ui/src/api/hooks/use-workflows.ts +109 -0
  161. package/{ui/src/types/api.ts → new-ui/src/api/types.ts} +236 -10
  162. package/new-ui/src/app/App.tsx +13 -0
  163. package/new-ui/src/app/providers.tsx +32 -0
  164. package/new-ui/src/app/router.tsx +52 -0
  165. package/new-ui/src/components/layout/app-header.tsx +47 -0
  166. package/new-ui/src/components/layout/app-sidebar.tsx +128 -0
  167. package/new-ui/src/components/layout/breadcrumbs.tsx +57 -0
  168. package/new-ui/src/components/layout/config-guard.tsx +22 -0
  169. package/new-ui/src/components/layout/root-layout.tsx +40 -0
  170. package/new-ui/src/components/layout/swarm-switcher.tsx +85 -0
  171. package/new-ui/src/components/shared/command-menu.tsx +131 -0
  172. package/new-ui/src/components/shared/data-grid.tsx +141 -0
  173. package/new-ui/src/components/shared/empty-state.tsx +24 -0
  174. package/new-ui/src/components/shared/error-boundary.tsx +72 -0
  175. package/new-ui/src/components/shared/json-viewer.tsx +47 -0
  176. package/new-ui/src/components/shared/name-connection-modal.tsx +99 -0
  177. package/new-ui/src/components/shared/page-skeleton.tsx +16 -0
  178. package/new-ui/src/components/shared/session-log-viewer.tsx +364 -0
  179. package/new-ui/src/components/shared/stats-bar.tsx +132 -0
  180. package/new-ui/src/components/shared/status-badge.tsx +131 -0
  181. package/new-ui/src/components/shared/usage-summary.tsx +179 -0
  182. package/new-ui/src/components/ui/alert-dialog.tsx +176 -0
  183. package/new-ui/src/components/ui/alert.tsx +60 -0
  184. package/new-ui/src/components/ui/avatar.tsx +96 -0
  185. package/new-ui/src/components/ui/badge.tsx +46 -0
  186. package/new-ui/src/components/ui/button.tsx +62 -0
  187. package/new-ui/src/components/ui/card.tsx +75 -0
  188. package/new-ui/src/components/ui/command.tsx +160 -0
  189. package/new-ui/src/components/ui/dialog.tsx +143 -0
  190. package/new-ui/src/components/ui/dropdown-menu.tsx +226 -0
  191. package/new-ui/src/components/ui/input.tsx +21 -0
  192. package/new-ui/src/components/ui/label.tsx +19 -0
  193. package/new-ui/src/components/ui/progress.tsx +26 -0
  194. package/new-ui/src/components/ui/scroll-area.tsx +54 -0
  195. package/new-ui/src/components/ui/select.tsx +175 -0
  196. package/new-ui/src/components/ui/separator.tsx +28 -0
  197. package/new-ui/src/components/ui/sheet.tsx +132 -0
  198. package/new-ui/src/components/ui/sidebar.tsx +691 -0
  199. package/new-ui/src/components/ui/skeleton.tsx +13 -0
  200. package/new-ui/src/components/ui/sonner.tsx +35 -0
  201. package/new-ui/src/components/ui/switch.tsx +33 -0
  202. package/new-ui/src/components/ui/table.tsx +92 -0
  203. package/new-ui/src/components/ui/tabs.tsx +79 -0
  204. package/new-ui/src/components/ui/textarea.tsx +18 -0
  205. package/new-ui/src/components/ui/tooltip.tsx +51 -0
  206. package/new-ui/src/components/workflows/action-node.tsx +53 -0
  207. package/new-ui/src/components/workflows/condition-node.tsx +50 -0
  208. package/new-ui/src/components/workflows/graph-utils.ts +124 -0
  209. package/new-ui/src/components/workflows/json-tree.tsx +189 -0
  210. package/new-ui/src/components/workflows/node-styles.ts +10 -0
  211. package/new-ui/src/components/workflows/step-detail-sheet.tsx +87 -0
  212. package/new-ui/src/components/workflows/trigger-node.tsx +41 -0
  213. package/new-ui/src/components/workflows/workflow-graph.tsx +65 -0
  214. package/{ui/src/hooks/useAutoScroll.ts → new-ui/src/hooks/use-auto-scroll.ts} +0 -1
  215. package/new-ui/src/hooks/use-config.ts +203 -0
  216. package/new-ui/src/hooks/use-keyboard-shortcuts.ts +41 -0
  217. package/new-ui/src/hooks/use-mobile.ts +19 -0
  218. package/new-ui/src/hooks/use-theme.ts +60 -0
  219. package/new-ui/src/lib/config.ts +188 -0
  220. package/new-ui/src/lib/slugs.ts +71 -0
  221. package/{ui → new-ui}/src/lib/utils.ts +32 -0
  222. package/new-ui/src/main.tsx +11 -0
  223. package/new-ui/src/pages/agents/[id]/page.tsx +492 -0
  224. package/new-ui/src/pages/agents/page.tsx +134 -0
  225. package/new-ui/src/pages/chat/page.tsx +674 -0
  226. package/new-ui/src/pages/config/page.tsx +1109 -0
  227. package/new-ui/src/pages/dashboard/page.tsx +454 -0
  228. package/new-ui/src/pages/debug/page.tsx +275 -0
  229. package/new-ui/src/pages/epics/[id]/page.tsx +809 -0
  230. package/new-ui/src/pages/epics/page.tsx +321 -0
  231. package/new-ui/src/pages/not-found/page.tsx +18 -0
  232. package/new-ui/src/pages/repos/page.tsx +369 -0
  233. package/new-ui/src/pages/schedules/[id]/page.tsx +664 -0
  234. package/new-ui/src/pages/schedules/page.tsx +477 -0
  235. package/new-ui/src/pages/services/page.tsx +128 -0
  236. package/new-ui/src/pages/tasks/[id]/page.tsx +670 -0
  237. package/new-ui/src/pages/tasks/page.tsx +592 -0
  238. package/new-ui/src/pages/usage/page.tsx +195 -0
  239. package/new-ui/src/pages/workflow-runs/[id]/page.tsx +363 -0
  240. package/new-ui/src/pages/workflows/[id]/page.tsx +417 -0
  241. package/new-ui/src/pages/workflows/page.tsx +266 -0
  242. package/new-ui/src/styles/ag-grid.css +36 -0
  243. package/new-ui/src/styles/globals.css +213 -0
  244. package/new-ui/test-results/.last-run.json +4 -0
  245. package/{ui/tsconfig.json → new-ui/tsconfig.app.json} +7 -4
  246. package/new-ui/tsconfig.json +4 -0
  247. package/new-ui/tsconfig.node.json +26 -0
  248. package/new-ui/vercel.json +4 -0
  249. package/new-ui/vite.config.ts +28 -0
  250. package/openapi.json +4436 -0
  251. package/package.json +31 -7
  252. package/plugin/build-pi-skills.ts +233 -0
  253. package/plugin/commands/close-issue.md +7 -3
  254. package/plugin/commands/create-pr.md +18 -12
  255. package/plugin/commands/implement-issue.md +7 -3
  256. package/plugin/commands/respond-github.md +8 -4
  257. package/plugin/commands/review-pr.md +44 -10
  258. package/plugin/commands/start-leader.md +1 -3
  259. package/plugin/commands/start-worker.md +1 -3
  260. package/plugin/commands/work-on-task.md +22 -3
  261. package/plugin/pi-skills/close-issue/SKILL.md +90 -0
  262. package/plugin/pi-skills/create-pr/SKILL.md +99 -0
  263. package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
  264. package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
  265. package/plugin/pi-skills/respond-github/SKILL.md +98 -0
  266. package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
  267. package/plugin/pi-skills/review-pr/SKILL.md +261 -0
  268. package/plugin/pi-skills/start-leader/SKILL.md +121 -0
  269. package/plugin/pi-skills/start-worker/SKILL.md +60 -0
  270. package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
  271. package/plugin/pi-skills/todos/SKILL.md +66 -0
  272. package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
  273. package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
  274. package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
  275. package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
  276. package/plugin/skills/artifacts/examples/static-report.sh +17 -0
  277. package/plugin/skills/artifacts/skill.md +71 -0
  278. package/prek.toml +75 -0
  279. package/scripts/check-db-boundary.sh +60 -0
  280. package/scripts/e2e-docker-provider.ts +820 -0
  281. package/scripts/e2e-io-schemas-test.ts +807 -0
  282. package/scripts/e2e-provider-test.ts +220 -0
  283. package/scripts/e2e-workflow-redesign.sh +229 -0
  284. package/scripts/e2e-workflow-test.sh +285 -0
  285. package/scripts/e2e-workflow-test.ts +857 -0
  286. package/scripts/generate-openapi.ts +26 -0
  287. package/scripts/measure-tool-tokens.ts +118 -0
  288. package/scripts/x402-e2e-test.ts +195 -0
  289. package/scripts/x402-test-server.ts +236 -0
  290. package/scripts/x402-testnet-e2e.ts +668 -0
  291. package/slack-manifest.json +17 -0
  292. package/src/agentmail/app.ts +65 -0
  293. package/src/agentmail/handlers.ts +207 -0
  294. package/src/agentmail/index.ts +9 -0
  295. package/src/agentmail/types.ts +51 -0
  296. package/src/artifact-sdk/browser-sdk.ts +30 -0
  297. package/src/artifact-sdk/index.ts +2 -0
  298. package/src/artifact-sdk/localtunnel.d.ts +20 -0
  299. package/src/artifact-sdk/port.ts +12 -0
  300. package/src/artifact-sdk/server.ts +156 -0
  301. package/src/artifact-sdk/tunnel.ts +19 -0
  302. package/src/be/chunking.ts +193 -0
  303. package/src/be/db-queries/oauth.ts +90 -0
  304. package/src/be/db-queries/tracker.ts +182 -0
  305. package/src/be/db.ts +2729 -770
  306. package/src/be/embedding.ts +80 -0
  307. package/src/be/migrations/001_initial.sql +409 -0
  308. package/src/be/migrations/002_one_time_schedules.sql +59 -0
  309. package/src/be/migrations/003_workflows.sql +51 -0
  310. package/src/be/migrations/004_workflow_source.sql +81 -0
  311. package/src/be/migrations/005_epic_next_steps.sql +2 -0
  312. package/src/be/migrations/006_vcs_provider.sql +94 -0
  313. package/src/be/migrations/007_task_dir.sql +2 -0
  314. package/src/be/migrations/008_workflow_redesign.sql +85 -0
  315. package/src/be/migrations/009_tracker_integration.sql +144 -0
  316. package/src/be/migrations/010_step_diagnostics.sql +1 -0
  317. package/src/be/migrations/011_step_next_port.sql +1 -0
  318. package/src/be/migrations/012_trigger_schema.sql +1 -0
  319. package/src/be/migrations/013_task_output_schema.sql +2 -0
  320. package/src/be/migrations/runner.ts +188 -0
  321. package/src/cli.tsx +231 -299
  322. package/src/commands/artifact.ts +241 -0
  323. package/src/commands/onboard/compose-generator.ts +169 -0
  324. package/src/commands/onboard/env-generator.ts +79 -0
  325. package/src/commands/onboard/manifest.ts +37 -0
  326. package/src/commands/onboard/presets.ts +85 -0
  327. package/src/commands/onboard/service-names.ts +47 -0
  328. package/src/commands/onboard/steps/core-credentials.tsx +111 -0
  329. package/src/commands/onboard/steps/custom-templates.tsx +168 -0
  330. package/src/commands/onboard/steps/generate.tsx +154 -0
  331. package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
  332. package/src/commands/onboard/steps/harness.tsx +21 -0
  333. package/src/commands/onboard/steps/health-check.tsx +171 -0
  334. package/src/commands/onboard/steps/integration-github.tsx +105 -0
  335. package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
  336. package/src/commands/onboard/steps/integration-menu.tsx +58 -0
  337. package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
  338. package/src/commands/onboard/steps/integration-slack.tsx +165 -0
  339. package/src/commands/onboard/steps/post-connect.tsx +145 -0
  340. package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
  341. package/src/commands/onboard/steps/post-task.tsx +103 -0
  342. package/src/commands/onboard/steps/prereq-check.tsx +178 -0
  343. package/src/commands/onboard/steps/review.tsx +82 -0
  344. package/src/commands/onboard/steps/start.tsx +97 -0
  345. package/src/commands/onboard/templates.ts +34 -0
  346. package/src/commands/onboard/types.ts +259 -0
  347. package/src/commands/onboard.tsx +425 -0
  348. package/src/commands/runner.ts +1376 -559
  349. package/src/commands/setup.tsx +23 -38
  350. package/src/commands/shared/client-config.ts +41 -0
  351. package/src/github/app.ts +8 -0
  352. package/src/github/handlers.ts +93 -75
  353. package/src/github/index.ts +1 -0
  354. package/src/github/types.ts +1 -0
  355. package/src/gitlab/auth.ts +63 -0
  356. package/src/gitlab/handlers.ts +327 -0
  357. package/src/gitlab/index.ts +19 -0
  358. package/src/gitlab/reactions.ts +104 -0
  359. package/src/gitlab/types.ts +130 -0
  360. package/src/heartbeat/heartbeat.ts +425 -0
  361. package/src/heartbeat/index.ts +1 -0
  362. package/src/hooks/hook.ts +555 -4
  363. package/src/hooks/tool-loop-detection.test.ts +158 -0
  364. package/src/hooks/tool-loop-detection.ts +167 -0
  365. package/src/http/active-sessions.ts +172 -0
  366. package/src/http/agents.ts +328 -0
  367. package/src/http/config.ts +191 -0
  368. package/src/http/core.ts +309 -0
  369. package/src/http/db-query.ts +91 -0
  370. package/src/http/ecosystem.ts +63 -0
  371. package/src/http/epics.ts +460 -0
  372. package/src/http/index.ts +213 -0
  373. package/src/http/mcp.ts +77 -0
  374. package/src/http/memory.ts +168 -0
  375. package/src/http/openapi.ts +109 -0
  376. package/src/http/poll.ts +178 -0
  377. package/src/http/repos.ts +195 -0
  378. package/src/http/route-def.ts +123 -0
  379. package/src/http/schedules.ts +391 -0
  380. package/src/http/session-data.ts +241 -0
  381. package/src/http/stats.ts +174 -0
  382. package/src/http/tasks.ts +468 -0
  383. package/src/http/trackers/index.ts +10 -0
  384. package/src/http/trackers/linear.ts +187 -0
  385. package/src/http/types.ts +12 -0
  386. package/src/http/utils.ts +87 -0
  387. package/src/http/webhooks.ts +432 -0
  388. package/src/http/workflows.ts +522 -0
  389. package/src/http.ts +1 -1890
  390. package/src/linear/README.md +65 -0
  391. package/src/linear/app.ts +48 -0
  392. package/src/linear/client.ts +18 -0
  393. package/src/linear/index.ts +1 -0
  394. package/src/linear/oauth.ts +35 -0
  395. package/src/linear/outbound.ts +212 -0
  396. package/src/linear/sync.ts +543 -0
  397. package/src/linear/types.ts +7 -0
  398. package/src/linear/webhook.ts +104 -0
  399. package/src/oauth/README.md +66 -0
  400. package/src/oauth/index.ts +6 -0
  401. package/src/oauth/wrapper.ts +204 -0
  402. package/src/prompts/base-prompt.ts +366 -24
  403. package/src/prompts/defaults.ts +196 -0
  404. package/src/providers/claude-adapter.ts +429 -0
  405. package/src/providers/index.ts +24 -0
  406. package/src/providers/pi-mono-adapter.ts +442 -0
  407. package/src/providers/pi-mono-extension.ts +620 -0
  408. package/src/providers/pi-mono-mcp-client.ts +124 -0
  409. package/src/providers/types.ts +75 -0
  410. package/src/scheduler/scheduler.test.ts +2 -0
  411. package/src/scheduler/scheduler.ts +186 -29
  412. package/src/server.ts +82 -6
  413. package/src/slack/HEURISTICS.md +105 -0
  414. package/src/slack/actions.ts +133 -0
  415. package/src/slack/app.ts +7 -0
  416. package/src/slack/assistant.ts +115 -0
  417. package/src/slack/blocks.ts +233 -0
  418. package/src/slack/commands.ts +31 -17
  419. package/src/slack/files.ts +1 -1
  420. package/src/slack/handlers.test.ts +114 -1
  421. package/src/slack/handlers.ts +212 -52
  422. package/src/slack/responses.ts +120 -67
  423. package/src/slack/router.ts +17 -99
  424. package/src/slack/thread-buffer.ts +213 -0
  425. package/src/slack/watcher.ts +119 -4
  426. package/src/tests/agent-activity.test.ts +247 -0
  427. package/src/tests/agentmail-filters.test.ts +97 -0
  428. package/src/tests/artifact-sdk.test.ts +800 -0
  429. package/src/tests/base-prompt.test.ts +264 -0
  430. package/src/tests/build-pi-skills.test.ts +127 -0
  431. package/src/tests/claude-adapter.test.ts +126 -0
  432. package/src/tests/context-versioning.test.ts +425 -0
  433. package/src/tests/db-queries-oauth.test.ts +197 -0
  434. package/src/tests/db-queries-tracker.test.ts +230 -0
  435. package/src/tests/epics.test.ts +3 -3
  436. package/src/tests/error-tracker.test.ts +368 -0
  437. package/src/tests/fetch-resolved-env.test.ts +167 -0
  438. package/src/tests/generate-default-claude-md.test.ts +9 -1
  439. package/src/tests/generate-identity-templates.test.ts +124 -0
  440. package/src/tests/gitlab-auth.test.ts +109 -0
  441. package/src/tests/gitlab-handlers.test.ts +691 -0
  442. package/src/tests/gitlab-vcs-db.test.ts +177 -0
  443. package/src/tests/heartbeat.test.ts +363 -0
  444. package/src/tests/http-api-integration.test.ts +1698 -0
  445. package/src/tests/linear-outbound-sync.test.ts +200 -0
  446. package/src/tests/linear-webhook.test.ts +402 -0
  447. package/src/tests/match-route.test.ts +187 -0
  448. package/src/tests/memory.test.ts +737 -0
  449. package/src/tests/migration-runner-regressions.test.ts +86 -0
  450. package/src/tests/model-control.test.ts +338 -0
  451. package/src/tests/oauth-wrapper.test.ts +147 -0
  452. package/src/tests/onboard-compose.test.ts +138 -0
  453. package/src/tests/onboard-env.test.ts +174 -0
  454. package/src/tests/onboard-manifest.test.ts +137 -0
  455. package/src/tests/pi-mono-adapter.test.ts +234 -0
  456. package/src/tests/progress-dedup.test.ts +98 -0
  457. package/src/tests/provider-adapter.test.ts +122 -0
  458. package/src/tests/provider-command-format.test.ts +98 -0
  459. package/src/tests/reload-config.test.ts +170 -0
  460. package/src/tests/runner-polling-api.test.ts +25 -20
  461. package/src/tests/scheduled-tasks.test.ts +104 -0
  462. package/src/tests/scheduler-backoff.test.ts +166 -0
  463. package/src/tests/self-improvement.test.ts +540 -0
  464. package/src/tests/session-attach.test.ts +536 -0
  465. package/src/tests/session-costs.test.ts +267 -1
  466. package/src/tests/slack-actions.test.ts +133 -0
  467. package/src/tests/slack-assistant.test.ts +136 -0
  468. package/src/tests/slack-blocks.test.ts +246 -0
  469. package/src/tests/slack-metadata-inheritance.test.ts +243 -0
  470. package/src/tests/slack-queue-offline.test.ts +174 -0
  471. package/src/tests/slack-router.test.ts +181 -0
  472. package/src/tests/slack-thread-buffer.test.ts +305 -0
  473. package/src/tests/slack-thread-followups.test.ts +298 -0
  474. package/src/tests/slack-watcher.test.ts +101 -0
  475. package/src/tests/structured-output.test.ts +311 -0
  476. package/src/tests/swarm-repos.test.ts +198 -0
  477. package/src/tests/task-cancellation.test.ts +6 -4
  478. package/src/tests/task-working-dir.test.ts +176 -0
  479. package/src/tests/template-fetch.test.ts +490 -0
  480. package/src/tests/tool-annotations.test.ts +371 -0
  481. package/src/tests/tracker-tools.test.ts +184 -0
  482. package/src/tests/update-profile-api.test.ts +143 -3
  483. package/src/tests/validation-adapters.test.ts +86 -0
  484. package/src/tests/vcs-provider.test.ts +27 -0
  485. package/src/tests/workflow-agent-task.test.ts +196 -0
  486. package/src/tests/workflow-async-v2.test.ts +386 -0
  487. package/src/tests/workflow-convergence.test.ts +541 -0
  488. package/src/tests/workflow-definition-validation.test.ts +290 -0
  489. package/src/tests/workflow-engine-v2.test.ts +691 -0
  490. package/src/tests/workflow-executors.test.ts +736 -0
  491. package/src/tests/workflow-http-v2.test.ts +599 -0
  492. package/src/tests/workflow-integration-io.test.ts +902 -0
  493. package/src/tests/workflow-io-schemas.test.ts +624 -0
  494. package/src/tests/workflow-registry.test.ts +592 -0
  495. package/src/tests/workflow-retry-v2.test.ts +401 -0
  496. package/src/tests/workflow-retry-validation.test.ts +282 -0
  497. package/src/tests/workflow-template.test.ts +288 -0
  498. package/src/tests/workflow-trigger-schema.test.ts +359 -0
  499. package/src/tests/workflow-triggers-v2.test.ts +264 -0
  500. package/src/tests/workflow-versions.test.ts +208 -0
  501. package/src/tests/x402-client.test.ts +117 -0
  502. package/src/tests/x402-config.test.ts +182 -0
  503. package/src/tests/x402-spending-tracker.test.ts +185 -0
  504. package/src/tools/cancel-task.ts +2 -0
  505. package/src/tools/context-diff.ts +171 -0
  506. package/src/tools/context-history.ts +138 -0
  507. package/src/tools/create-channel.ts +1 -0
  508. package/src/tools/db-query.ts +78 -0
  509. package/src/tools/delete-channel.ts +132 -0
  510. package/src/tools/epics/assign-task-to-epic.ts +1 -0
  511. package/src/tools/epics/create-epic.ts +3 -2
  512. package/src/tools/epics/delete-epic.ts +2 -0
  513. package/src/tools/epics/get-epic-details.ts +2 -0
  514. package/src/tools/epics/list-epics.ts +2 -0
  515. package/src/tools/epics/unassign-task-from-epic.ts +1 -0
  516. package/src/tools/epics/update-epic.ts +7 -4
  517. package/src/tools/get-swarm.ts +2 -0
  518. package/src/tools/get-task-details.ts +2 -0
  519. package/src/tools/get-tasks.ts +27 -1
  520. package/src/tools/inject-learning.ts +106 -0
  521. package/src/tools/join-swarm.ts +17 -7
  522. package/src/tools/list-channels.ts +2 -0
  523. package/src/tools/list-services.ts +2 -0
  524. package/src/tools/memory-get.ts +56 -0
  525. package/src/tools/memory-search.ts +131 -0
  526. package/src/tools/my-agent-info.ts +2 -0
  527. package/src/tools/poll-task.ts +2 -20
  528. package/src/tools/post-message.ts +1 -0
  529. package/src/tools/read-messages.ts +2 -0
  530. package/src/tools/register-agentmail-inbox.ts +166 -0
  531. package/src/tools/register-service.ts +2 -0
  532. package/src/tools/schedules/create-schedule.ts +134 -24
  533. package/src/tools/schedules/delete-schedule.ts +2 -0
  534. package/src/tools/schedules/list-schedules.ts +20 -4
  535. package/src/tools/schedules/run-schedule-now.ts +1 -0
  536. package/src/tools/schedules/update-schedule.ts +49 -17
  537. package/src/tools/send-task.ts +132 -10
  538. package/src/tools/slack-download-file.ts +4 -2
  539. package/src/tools/slack-list-channels.ts +2 -0
  540. package/src/tools/slack-post.ts +2 -0
  541. package/src/tools/slack-read.ts +2 -0
  542. package/src/tools/slack-reply.ts +2 -0
  543. package/src/tools/slack-upload-file.ts +2 -0
  544. package/src/tools/store-progress.ts +187 -4
  545. package/src/tools/swarm-config/delete-config.ts +87 -0
  546. package/src/tools/swarm-config/get-config.ts +108 -0
  547. package/src/tools/swarm-config/index.ts +4 -0
  548. package/src/tools/swarm-config/list-config.ts +99 -0
  549. package/src/tools/swarm-config/set-config.ts +118 -0
  550. package/src/tools/task-action.ts +30 -5
  551. package/src/tools/task-dedup.ts +97 -0
  552. package/src/tools/tool-config.ts +117 -0
  553. package/src/tools/tracker/index.ts +6 -0
  554. package/src/tools/tracker/tracker-link-epic.ts +64 -0
  555. package/src/tools/tracker/tracker-link-task.ts +64 -0
  556. package/src/tools/tracker/tracker-map-agent.ts +57 -0
  557. package/src/tools/tracker/tracker-status.ts +56 -0
  558. package/src/tools/tracker/tracker-sync-status.ts +42 -0
  559. package/src/tools/tracker/tracker-unlink.ts +41 -0
  560. package/src/tools/unregister-service.ts +2 -0
  561. package/src/tools/update-profile.ts +93 -10
  562. package/src/tools/update-service-status.ts +2 -0
  563. package/src/tools/utils.ts +10 -1
  564. package/src/tools/workflows/create-workflow.ts +111 -0
  565. package/src/tools/workflows/delete-workflow.ts +42 -0
  566. package/src/tools/workflows/get-workflow-run.ts +59 -0
  567. package/src/tools/workflows/get-workflow.ts +53 -0
  568. package/src/tools/workflows/index.ts +9 -0
  569. package/src/tools/workflows/list-workflow-runs.ts +48 -0
  570. package/src/tools/workflows/list-workflows.ts +42 -0
  571. package/src/tools/workflows/retry-workflow-run.ts +40 -0
  572. package/src/tools/workflows/trigger-workflow.ts +96 -0
  573. package/src/tools/workflows/update-workflow.ts +118 -0
  574. package/src/tracker/types.ts +51 -0
  575. package/src/types.ts +477 -14
  576. package/src/utils/credentials.test.ts +156 -0
  577. package/src/utils/credentials.ts +50 -0
  578. package/src/utils/error-tracker.ts +190 -0
  579. package/src/vcs/index.ts +15 -0
  580. package/src/vcs/types.ts +5 -0
  581. package/src/workflows/checkpoint.ts +121 -0
  582. package/src/workflows/cooldown.ts +28 -0
  583. package/src/workflows/definition.ts +217 -0
  584. package/src/workflows/engine.ts +554 -0
  585. package/src/workflows/event-bus.ts +29 -0
  586. package/src/workflows/executors/agent-task.ts +92 -0
  587. package/src/workflows/executors/base.ts +86 -0
  588. package/src/workflows/executors/code-match.ts +88 -0
  589. package/src/workflows/executors/index.ts +16 -0
  590. package/src/workflows/executors/notify.ts +93 -0
  591. package/src/workflows/executors/property-match.ts +104 -0
  592. package/src/workflows/executors/raw-llm.ts +83 -0
  593. package/src/workflows/executors/registry.ts +76 -0
  594. package/src/workflows/executors/script.ts +103 -0
  595. package/src/workflows/executors/validate.ts +215 -0
  596. package/src/workflows/executors/vcs.ts +58 -0
  597. package/src/workflows/index.ts +61 -0
  598. package/src/workflows/input.ts +46 -0
  599. package/src/workflows/json-schema-validator.ts +118 -0
  600. package/src/workflows/recovery.ts +139 -0
  601. package/src/workflows/resume.ts +143 -0
  602. package/src/workflows/retry-poller.ts +216 -0
  603. package/src/workflows/template.ts +74 -0
  604. package/src/workflows/templates.ts +86 -0
  605. package/src/workflows/triggers.ts +95 -0
  606. package/src/workflows/validation.ts +104 -0
  607. package/src/workflows/version.ts +42 -0
  608. package/src/x402/cli.ts +140 -0
  609. package/src/x402/client.ts +192 -0
  610. package/src/x402/config.ts +131 -0
  611. package/src/x402/index.ts +37 -0
  612. package/src/x402/openfort-signer.ts +83 -0
  613. package/src/x402/spending-tracker.ts +109 -0
  614. package/templates/community/.gitkeep +0 -0
  615. package/templates/official/coder/CLAUDE.md +49 -0
  616. package/templates/official/coder/IDENTITY.md +28 -0
  617. package/templates/official/coder/SOUL.md +43 -0
  618. package/templates/official/coder/TOOLS.md +40 -0
  619. package/templates/official/coder/config.json +23 -0
  620. package/templates/official/coder/start-up.sh +23 -0
  621. package/templates/official/content-reviewer/CLAUDE.md +68 -0
  622. package/templates/official/content-reviewer/IDENTITY.md +28 -0
  623. package/templates/official/content-reviewer/SOUL.md +44 -0
  624. package/templates/official/content-reviewer/TOOLS.md +37 -0
  625. package/templates/official/content-reviewer/config.json +23 -0
  626. package/templates/official/content-reviewer/start-up.sh +23 -0
  627. package/templates/official/content-strategist/CLAUDE.md +63 -0
  628. package/templates/official/content-strategist/IDENTITY.md +33 -0
  629. package/templates/official/content-strategist/SOUL.md +48 -0
  630. package/templates/official/content-strategist/TOOLS.md +47 -0
  631. package/templates/official/content-strategist/config.json +23 -0
  632. package/templates/official/content-strategist/start-up.sh +23 -0
  633. package/templates/official/content-writer/CLAUDE.md +72 -0
  634. package/templates/official/content-writer/IDENTITY.md +30 -0
  635. package/templates/official/content-writer/SOUL.md +46 -0
  636. package/templates/official/content-writer/TOOLS.md +44 -0
  637. package/templates/official/content-writer/config.json +23 -0
  638. package/templates/official/content-writer/start-up.sh +23 -0
  639. package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
  640. package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
  641. package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
  642. package/templates/official/forward-deployed-engineer/config.json +21 -0
  643. package/templates/official/lead/CLAUDE.md +33 -0
  644. package/templates/official/lead/IDENTITY.md +36 -0
  645. package/templates/official/lead/SOUL.md +51 -0
  646. package/templates/official/lead/config.json +22 -0
  647. package/templates/official/researcher/CLAUDE.md +46 -0
  648. package/templates/official/researcher/IDENTITY.md +28 -0
  649. package/templates/official/researcher/SOUL.md +43 -0
  650. package/templates/official/researcher/config.json +21 -0
  651. package/templates/official/reviewer/CLAUDE.md +63 -0
  652. package/templates/official/reviewer/IDENTITY.md +28 -0
  653. package/templates/official/reviewer/SOUL.md +45 -0
  654. package/templates/official/reviewer/config.json +21 -0
  655. package/templates/official/tester/CLAUDE.md +53 -0
  656. package/templates/official/tester/IDENTITY.md +28 -0
  657. package/templates/official/tester/SOUL.md +55 -0
  658. package/templates/official/tester/config.json +21 -0
  659. package/templates/schema.ts +35 -0
  660. package/templates-ui/README.md +46 -0
  661. package/templates-ui/components.json +17 -0
  662. package/templates-ui/eslint.config.mjs +18 -0
  663. package/templates-ui/next.config.ts +7 -0
  664. package/templates-ui/package.json +35 -0
  665. package/templates-ui/pnpm-lock.yaml +4571 -0
  666. package/templates-ui/postcss.config.mjs +7 -0
  667. package/templates-ui/public/file.svg +1 -0
  668. package/templates-ui/public/globe.svg +1 -0
  669. package/templates-ui/public/logo.png +0 -0
  670. package/templates-ui/public/next.svg +1 -0
  671. package/templates-ui/public/vercel.svg +1 -0
  672. package/templates-ui/public/window.svg +1 -0
  673. package/templates-ui/src/app/[category]/[name]/page.tsx +89 -0
  674. package/templates-ui/src/app/api/templates/[...slug]/route.ts +52 -0
  675. package/templates-ui/src/app/api/templates/route.ts +18 -0
  676. package/templates-ui/src/app/builder/page.tsx +37 -0
  677. package/templates-ui/src/app/globals.css +94 -0
  678. package/templates-ui/src/app/layout.tsx +79 -0
  679. package/templates-ui/src/app/page.tsx +38 -0
  680. package/templates-ui/src/app/robots.ts +11 -0
  681. package/templates-ui/src/app/sitemap.ts +31 -0
  682. package/templates-ui/src/components/compose-builder.tsx +442 -0
  683. package/templates-ui/src/components/compose-preview.tsx +117 -0
  684. package/templates-ui/src/components/file-preview.tsx +77 -0
  685. package/templates-ui/src/components/footer.tsx +40 -0
  686. package/templates-ui/src/components/header.tsx +41 -0
  687. package/templates-ui/src/components/template-card.tsx +87 -0
  688. package/templates-ui/src/components/template-detail.tsx +125 -0
  689. package/templates-ui/src/components/template-gallery.tsx +263 -0
  690. package/templates-ui/src/components/ui/badge.tsx +36 -0
  691. package/templates-ui/src/components/ui/button.tsx +57 -0
  692. package/templates-ui/src/components/ui/card.tsx +76 -0
  693. package/templates-ui/src/components/ui/separator.tsx +31 -0
  694. package/templates-ui/src/components/ui/tooltip.tsx +32 -0
  695. package/templates-ui/src/lib/compose-generator.ts +241 -0
  696. package/templates-ui/src/lib/templates.ts +137 -0
  697. package/templates-ui/src/lib/utils.ts +6 -0
  698. package/templates-ui/tsconfig.json +34 -0
  699. package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +679 -0
  700. package/thoughts/research/2026-02-28-x402-payments-research.md +686 -0
  701. package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +282 -0
  702. package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +492 -0
  703. package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +282 -0
  704. package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +328 -0
  705. package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +224 -0
  706. package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +159 -0
  707. package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +337 -0
  708. package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +778 -0
  709. package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +1269 -0
  710. package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +411 -0
  711. package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +724 -0
  712. package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +443 -0
  713. package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +307 -0
  714. package/thoughts/taras/plans/2026-02-20-auto-improvement.md +803 -0
  715. package/thoughts/taras/plans/2026-02-20-env-management.md +538 -0
  716. package/thoughts/taras/plans/2026-02-20-memory-system.md +882 -0
  717. package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +806 -0
  718. package/thoughts/taras/plans/2026-02-20-session-attach.md +647 -0
  719. package/thoughts/taras/plans/2026-02-20-worker-identity.md +820 -0
  720. package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +768 -0
  721. package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +77 -0
  722. package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +543 -0
  723. package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +373 -0
  724. package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +512 -0
  725. package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +919 -0
  726. package/thoughts/taras/plans/2026-03-09-templates-registry.md +723 -0
  727. package/thoughts/taras/plans/2026-03-10-task-working-directory.md +371 -0
  728. package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +621 -0
  729. package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +61 -0
  730. package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +488 -0
  731. package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +644 -0
  732. package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +636 -0
  733. package/thoughts/taras/plans/2026-03-17-multi-api-config.md +444 -0
  734. package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +591 -0
  735. package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +446 -0
  736. package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +987 -0
  737. package/thoughts/taras/plans/2026-03-19-compound-learnings.md +403 -0
  738. package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +860 -0
  739. package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +899 -0
  740. package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +874 -0
  741. package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +723 -0
  742. package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +390 -0
  743. package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +594 -0
  744. package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +825 -0
  745. package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +393 -0
  746. package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +168 -0
  747. package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +230 -0
  748. package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +445 -0
  749. package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +375 -0
  750. package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +869 -0
  751. package/thoughts/taras/research/2026-03-09-templates-registry.md +373 -0
  752. package/thoughts/taras/research/2026-03-10-agent-working-directory.md +223 -0
  753. package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +339 -0
  754. package/thoughts/taras/research/2026-03-11-archil-production-setup.md +181 -0
  755. package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +437 -0
  756. package/thoughts/taras/research/2026-03-13-slack-ai-features.md +258 -0
  757. package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +335 -0
  758. package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +670 -0
  759. package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +54 -0
  760. package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +558 -0
  761. package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +526 -0
  762. package/thoughts/taras/research/2026-03-18-workflow-redesign.md +797 -0
  763. package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +563 -0
  764. package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +486 -0
  765. package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +469 -0
  766. package/tsconfig.json +1 -1
  767. package/FAQ.md +0 -19
  768. package/src/tests/get-inbox-message.test.ts +0 -145
  769. package/src/tools/get-inbox-message.ts +0 -89
  770. package/src/tools/inbox-delegate.ts +0 -113
  771. package/ui/CLAUDE.md +0 -49
  772. package/ui/bun.lock +0 -771
  773. package/ui/index.html +0 -22
  774. package/ui/package-lock.json +0 -5290
  775. package/ui/package.json +0 -33
  776. package/ui/pnpm-lock.yaml +0 -3341
  777. package/ui/postcss.config.js +0 -6
  778. package/ui/src/App.tsx +0 -63
  779. package/ui/src/components/ActivityFeed.tsx +0 -440
  780. package/ui/src/components/AgentDetailPanel.tsx +0 -733
  781. package/ui/src/components/AgentsPanel.tsx +0 -815
  782. package/ui/src/components/ChatPanel.tsx +0 -1920
  783. package/ui/src/components/ConfigModal.tsx +0 -253
  784. package/ui/src/components/Dashboard.tsx +0 -832
  785. package/ui/src/components/EditAgentProfileModal.tsx +0 -433
  786. package/ui/src/components/EpicDetailPage.tsx +0 -741
  787. package/ui/src/components/EpicsPanel.tsx +0 -566
  788. package/ui/src/components/Header.tsx +0 -160
  789. package/ui/src/components/JsonViewer.tsx +0 -171
  790. package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
  791. package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
  792. package/ui/src/components/ServicesPanel.tsx +0 -622
  793. package/ui/src/components/SessionLogPanel.tsx +0 -1219
  794. package/ui/src/components/StatsBar.tsx +0 -321
  795. package/ui/src/components/StatusBadge.tsx +0 -168
  796. package/ui/src/components/TaskDetailPanel.tsx +0 -903
  797. package/ui/src/components/TasksPanel.tsx +0 -614
  798. package/ui/src/components/UsageCharts.tsx +0 -216
  799. package/ui/src/components/UsageTab.tsx +0 -394
  800. package/ui/src/hooks/queries.ts +0 -353
  801. package/ui/src/index.css +0 -257
  802. package/ui/src/lib/api.ts +0 -268
  803. package/ui/src/lib/config.ts +0 -35
  804. package/ui/src/lib/contentPreview.ts +0 -208
  805. package/ui/src/lib/theme.ts +0 -214
  806. package/ui/src/main.tsx +0 -28
  807. package/ui/src/vite-env.d.ts +0 -1
  808. package/ui/tailwind.config.js +0 -37
  809. package/ui/vite.config.ts +0 -35
  810. /package/{ui → docs-site}/public/logo.png +0 -0
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@desplega.ai/agent-swarm",
3
- "version": "1.20.0",
4
- "description": "Agent orchestration layer MCP for Claude Code, Codex, Gemini CLI, and more!",
3
+ "version": "1.49.0",
4
+ "description": "Multi-agent orchestration for Claude Code, Codex, Gemini CLI, and other AI coding assistants",
5
5
  "license": "MIT",
6
- "author": "desplega.ai <contact@desplega.ai>",
6
+ "author": "desplega.sh <contact@desplega.sh>",
7
7
  "maintainers": [
8
8
  {
9
9
  "name": "Taras",
10
- "email": "t@desplega.ai"
10
+ "email": "t@desplega.sh"
11
11
  }
12
12
  ],
13
13
  "repository": {
@@ -31,7 +31,9 @@
31
31
  "name": "agent-swarm"
32
32
  },
33
33
  "scripts": {
34
+ "build:pi-skills": "bun run plugin/build-pi-skills.ts",
34
35
  "tsc:check": "bun tsc --noEmit",
36
+ "check:db-boundary": "bash scripts/check-db-boundary.sh",
35
37
  "cli": "bun src/cli.tsx",
36
38
  "hook": "bun src/hooks/hook.ts",
37
39
  "claude": "bun src/cli.tsx claude",
@@ -41,11 +43,12 @@
41
43
  "lead": "bun src/cli.tsx lead",
42
44
  "lead:yolo": "bun src/cli.tsx lead --yolo",
43
45
  "dev": "bun --hot src/stdio.ts",
44
- "dev:http": "bun --hot src/http.ts",
46
+ "dev:http": "portless api.swarm bun --hot src/http.ts",
45
47
  "start": "bun src/stdio.ts",
46
48
  "start:http": "bun src/http.ts",
49
+ "start:portless": "portless api.swarm bun src/http.ts",
47
50
  "inspector": "bunx @modelcontextprotocol/inspector --transport stdio bun src/stdio.ts",
48
- "inspector:http": "bunx @modelcontextprotocol/inspector --transport http http://localhost:3013/mcp",
51
+ "inspector:http": "bunx @modelcontextprotocol/inspector --transport http https://api.swarm.localhost:1355/mcp",
49
52
  "lint": "biome check src",
50
53
  "lint:fix": "biome check --write src",
51
54
  "format": "biome format --write src",
@@ -58,7 +61,10 @@
58
61
  "deploy:update": "bun deploy/update.ts",
59
62
  "deploy:uninstall": "bun deploy/uninstall.ts",
60
63
  "deploy:docker": "bun deploy/docker-push.ts",
64
+ "e2e:workflows": "bun scripts/e2e-workflow-test.ts",
65
+ "e2e:workflows:docker": "bun scripts/e2e-workflow-test.ts --with-docker",
61
66
  "docs:mcp": "bun scripts/generate-mcp-docs.ts",
67
+ "docs:openapi": "bun scripts/generate-openapi.ts",
62
68
  "pm2-start": "pm2 start ecosystem.config.cjs",
63
69
  "pm2-stop": "pm2 stop ecosystem.config.cjs",
64
70
  "pm2-restart": "pm2 restart ecosystem.config.cjs",
@@ -76,15 +82,33 @@
76
82
  "bun": ">=1.0.26"
77
83
  },
78
84
  "dependencies": {
85
+ "@ai-sdk/openai": "^3.0.41",
86
+ "@asteasolutions/zod-to-openapi": "^8.0.0",
87
+ "@desplega.ai/localtunnel": "^2.2.0",
79
88
  "@inkjs/ui": "^2.0.0",
89
+ "@linear/sdk": "^77.0.0",
90
+ "@mariozechner/pi-agent-core": "^0.57.1",
91
+ "@mariozechner/pi-ai": "^0.57.1",
92
+ "@mariozechner/pi-coding-agent": "^0.57.1",
80
93
  "@modelcontextprotocol/sdk": "^1.25.1",
94
+ "@openfort/openfort-node": "^0.9.1",
81
95
  "@slack/bolt": "^4.6.0",
82
96
  "@types/react": "^19.2.7",
97
+ "@x402/core": "^2.5.0",
98
+ "@x402/evm": "^2.5.0",
99
+ "@x402/fetch": "^2.5.0",
100
+ "ai": "^6.0.116",
83
101
  "cron-parser": "^5.4.0",
84
102
  "date-fns": "^4.1.0",
103
+ "hono": "^4.12.3",
85
104
  "ink": "^6.5.1",
105
+ "oauth4webapi": "^3.8.5",
106
+ "openai": "^6.22.0",
86
107
  "react": "^19.2.3",
87
108
  "react-devtools-core": "^7.0.1",
88
- "zod": "^4.2.1"
109
+ "svix": "^1.62.0",
110
+ "viem": "^2.46.3",
111
+ "zod": "^4.2.1",
112
+ "zod-to-json-schema": "^3.25.1"
89
113
  }
90
114
  }
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Build pi-mono SKILL.md files from claude command sources.
3
+ *
4
+ * Source of truth: plugin/commands/*.md
5
+ * Output: plugin/pi-skills/<name>/SKILL.md
6
+ *
7
+ * Only commands listed in SKILLS_TO_CONVERT are converted.
8
+ * Provider-specific sections use markers:
9
+ * <!-- claude-only -->...<!-- /claude-only --> → stripped for pi-mono
10
+ * <!-- pi-only -->...<!-- /pi-only --> → stripped for claude (kept for pi-mono)
11
+ *
12
+ * Usage: bun run plugin/build-pi-skills.ts
13
+ */
14
+
15
+ import { mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+
18
+ const COMMANDS_DIR = join(import.meta.dir, "commands");
19
+ const PI_SKILLS_DIR = join(import.meta.dir, "pi-skills");
20
+
21
+ /** All commands to convert to pi-mono skills */
22
+ const SKILLS_TO_CONVERT = [
23
+ "work-on-task",
24
+ "start-worker",
25
+ "start-leader",
26
+ "swarm-chat",
27
+ "close-issue",
28
+ "create-pr",
29
+ "implement-issue",
30
+ "investigate-sentry-issue",
31
+ "respond-github",
32
+ "review-offered-task",
33
+ "review-pr",
34
+ "todos",
35
+ ];
36
+
37
+ function convertToPiSkill(name: string, content: string): string {
38
+ let result = content;
39
+
40
+ // 1. Strip <!-- claude-only --> sections
41
+ result = result.replace(/<!-- claude-only -->\n?[\s\S]*?<!-- \/claude-only -->\n?/g, "");
42
+
43
+ // 2. Reveal <!-- pi-only --> sections (remove markers, keep content)
44
+ result = result.replace(/<!-- pi-only -->\n?/g, "");
45
+ result = result.replace(/<!-- \/pi-only -->\n?/g, "");
46
+
47
+ // 3. Convert frontmatter: extract description, drop argument-hint, add name
48
+ result = result.replace(
49
+ /^---\n([\s\S]*?)---\n/,
50
+ (_match, frontmatter: string) => {
51
+ const descMatch = frontmatter.match(/description:\s*(.+)/);
52
+ const description = descMatch ? descMatch[1].trim() : name;
53
+ return `---\nname: ${name}\ndescription: ${description}\n---\n`;
54
+ },
55
+ );
56
+
57
+ // 4. Slash command syntax: /command-name → /skill:command-name
58
+ // Match ` /name` or `/name` at word boundary, but not /desplega: or /workspace
59
+ for (const skillName of SKILLS_TO_CONVERT) {
60
+ // In backticks or after whitespace/start-of-line
61
+ result = result.replace(
62
+ new RegExp(`(\`|\\s|^)\\/${skillName}(?=\\s|\`|$)`, "gm"),
63
+ `$1/skill:${skillName}`,
64
+ );
65
+ }
66
+
67
+ // 5. /desplega:* commands → generic descriptions
68
+ // Replace the "Available commands" section pattern
69
+ result = result.replace(
70
+ /### Available commands[\s\S]*?(?=\n### [^#]|\n## |$)/,
71
+ `### Research and Planning
72
+
73
+ As you start working on a task, consider whether you need to:
74
+
75
+ - **Research**: For research tasks, gather information from the web, codebase, or documentation before starting implementation.
76
+ - **Create a plan**: For development tasks, create a detailed plan before implementing. Write it to \`/workspace/personal/plans/\`.
77
+ - **Implement a plan**: If you already have a plan, follow it step by step.
78
+
79
+ ### Communication
80
+
81
+ - Use \`/skill:swarm-chat\` to communicate with other agents in the swarm if you need help or want to provide updates.
82
+
83
+ #### Decision guidelines
84
+
85
+ When the task is a research task, you should ALWAYS perform thorough research before proceeding.
86
+
87
+ When the task is a development task, you should ALWAYS create a plan first, then implement it.
88
+
89
+ If the task is straightforward with clear instructions, proceed normally without extensive planning.
90
+
91
+ `,
92
+ );
93
+
94
+ // Remove the old "Decision to use commands" subsection if it survived
95
+ result = result.replace(/#### Decision to use commands[\s\S]*?(?=### |## |$)/, "");
96
+
97
+ // Clean up any remaining /desplega: references that weren't in a block
98
+ result = result.replace(
99
+ /- `\/desplega:research`[^\n]*\n/g,
100
+ "- Research - Workers can perform research on the web to gather information needed for the task\n",
101
+ );
102
+ result = result.replace(
103
+ /- `\/desplega:create-plan`[^\n]*\n/g,
104
+ "- Planning - Workers can create a detailed plan for how they will approach and complete the task\n",
105
+ );
106
+ result = result.replace(
107
+ /- `\/desplega:implement-plan`[^\n]*\n/g,
108
+ "- Implementation - Workers can implement a plan step by step\n",
109
+ );
110
+
111
+ // 6. Replace /desplega:* inline references
112
+ result = result.replace(/`\/desplega:research`/g, "research");
113
+ result = result.replace(/`\/desplega:create-plan`/g, "plan creation");
114
+ result = result.replace(/`\/desplega:implement-plan`/g, "plan implementation");
115
+ result = result.replace(/\/desplega:research/g, "research");
116
+ result = result.replace(/\/desplega:create-plan/g, "plan creation");
117
+ result = result.replace(/\/desplega:implement-plan/g, "plan implementation");
118
+
119
+ // 7. /todos references — now converted to /skill:todos by step 4
120
+ // Just clean up backtick formatting around the converted refs
121
+ result = result.replace(/`\/todos`/g, "`/skill:todos`");
122
+
123
+ // 8. Clean up "the `/skill:swarm-chat` command" → "`/skill:swarm-chat`"
124
+ // At this point step 4 already converted /swarm-chat → /skill:swarm-chat
125
+ result = result.replace(
126
+ /Use the (`\/skill:swarm-chat`)/g,
127
+ "Use $1",
128
+ );
129
+ result = result.replace(
130
+ /the (`\/skill:swarm-chat`) command/g,
131
+ "$1",
132
+ );
133
+ result = result.replace(
134
+ /the (`\/skill:swarm-chat`) channel/g,
135
+ "$1 channel",
136
+ );
137
+ result = result.replace(
138
+ /(`\/skill:swarm-chat`) command/g,
139
+ "$1",
140
+ );
141
+
142
+ // 9. Setup message simplification
143
+ result = result.replace(
144
+ / Please run `bunx @desplega\.ai\/agent-swarm setup` to configure it\./g,
145
+ "",
146
+ );
147
+
148
+ // 10. "the command `/skill:..." → "`/skill:..." and "this command" → "this skill"
149
+ result = result.replace(/the command (`\/skill:[^`]+`)/g, "$1");
150
+ result = result.replace(/call the (`\/skill:[^`]+`)/g, "call $1");
151
+ result = result.replace(/this command is used/gi, "this skill is used");
152
+ result = result.replace(/If this command/gi, "If this skill");
153
+
154
+ // 11. Wording: "command" → "skill" for worker sections and general references
155
+ result = result.replace(
156
+ /#### Worker available commands/g,
157
+ "#### Worker available skills",
158
+ );
159
+ result = result.replace(
160
+ /the following commands to help/g,
161
+ "the following skills to help",
162
+ );
163
+ // "use `/skill:swarm-chat` command" → "use `/skill:swarm-chat`"
164
+ result = result.replace(/(`\/skill:[^`]+`) command/g, "$1");
165
+ // "without using any commands" → "without extensive planning"
166
+ result = result.replace(
167
+ /proceed normally to implement it without using any commands/g,
168
+ "proceed normally without extensive planning",
169
+ );
170
+
171
+ // 13. Soften "available commands" wording
172
+ result = result.replace(
173
+ /Figure out if you need to use any of the available commands to help you with your work \(see below for available commands\)/g,
174
+ "Figure out if you need to perform any research or planning before starting (see below)",
175
+ );
176
+
177
+ // 14. Remove emoji (😈) since pi-mono doesn't use them
178
+ result = result.replace(/\n😈\n/g, "\n");
179
+
180
+ // 14. Fix step numbering — renumber sequential list items starting from 1
181
+ // After removing claude-only sections, step numbers may have gaps
182
+ const lines = result.split("\n");
183
+ let stepCounter = 0;
184
+ let inNumberedList = false;
185
+ for (let i = 0; i < lines.length; i++) {
186
+ const match = lines[i].match(/^(\d+)\. /);
187
+ if (match) {
188
+ if (!inNumberedList) {
189
+ stepCounter = 1;
190
+ inNumberedList = true;
191
+ } else {
192
+ stepCounter++;
193
+ }
194
+ lines[i] = lines[i].replace(/^\d+\. /, `${stepCounter}. `);
195
+ } else if (!/^\s/.test(lines[i]) && lines[i].trim() !== "") {
196
+ inNumberedList = false;
197
+ stepCounter = 0;
198
+ }
199
+ }
200
+ result = lines.join("\n");
201
+
202
+ // 15. Trim trailing whitespace from lines
203
+ result = result
204
+ .split("\n")
205
+ .map((line) => line.trimEnd())
206
+ .join("\n");
207
+
208
+ // 16. Clean up multiple consecutive blank lines
209
+ result = result.replace(/\n{3,}/g, "\n\n");
210
+
211
+ return result;
212
+ }
213
+
214
+ // Main
215
+ const files = readdirSync(COMMANDS_DIR).filter((f) => f.endsWith(".md"));
216
+ let converted = 0;
217
+
218
+ for (const file of files) {
219
+ const name = file.replace(".md", "");
220
+ if (!SKILLS_TO_CONVERT.includes(name)) continue;
221
+
222
+ const content = readFileSync(join(COMMANDS_DIR, file), "utf-8");
223
+ const piContent = convertToPiSkill(name, content);
224
+
225
+ const outDir = join(PI_SKILLS_DIR, name);
226
+ mkdirSync(outDir, { recursive: true });
227
+ writeFileSync(join(outDir, "SKILL.md"), piContent);
228
+
229
+ converted++;
230
+ console.log(`✓ ${name}`);
231
+ }
232
+
233
+ console.log(`\nConverted ${converted} skills to pi-mono format.`);
@@ -1,15 +1,19 @@
1
1
  ---
2
- description: Close a GitHub issue with a summary comment
2
+ description: Close a GitHub or GitLab issue with a summary comment
3
3
  argument-hint: <issue-number-or-url>
4
4
  ---
5
5
 
6
6
  # Close Issue
7
7
 
8
- Close a GitHub issue with an appropriate closing comment summarizing the resolution.
8
+ Close a GitHub or GitLab issue with an appropriate closing comment summarizing the resolution.
9
+
10
+ **Provider detection:** Check the URL or remote to determine the VCS provider:
11
+ - If GitHub → use `gh issue close` / `gh issue comment`
12
+ - If GitLab → use `glab issue close` / `glab issue note`
9
13
 
10
14
  ## Arguments
11
15
 
12
- - `issue-number-or-url`: Either an issue number (e.g., `123`) or a full GitHub issue URL (e.g., `https://github.com/owner/repo/issues/123`)
16
+ - `issue-number-or-url`: Either an issue number (e.g., `123`) or a full issue URL (e.g., `https://github.com/owner/repo/issues/123` or `https://gitlab.com/group/project/-/issues/123`)
13
17
 
14
18
  ## Workflow
15
19
 
@@ -1,11 +1,15 @@
1
1
  ---
2
- description: Create a GitHub pull request from the current branch
2
+ description: Create a pull request (GitHub) or merge request (GitLab) from the current branch
3
3
  argument-hint: [base-branch]
4
4
  ---
5
5
 
6
- # Create Pull Request
6
+ # Create Pull Request / Merge Request
7
7
 
8
- Create a GitHub pull request from the current branch with an auto-generated title and description.
8
+ Create a pull request (GitHub) or merge request (GitLab) from the current branch with an auto-generated title and description.
9
+
10
+ **Provider detection:** Check the remote URL to determine the VCS provider:
11
+ - If the remote contains `github.com` → use `gh` CLI
12
+ - If the remote contains `gitlab.com` or `gitlab.` → use `glab` CLI
9
13
 
10
14
  ## Arguments
11
15
 
@@ -62,8 +66,9 @@ Based on the commits and changes:
62
66
  - Any testing done
63
67
  - Related issues (if applicable)
64
68
 
65
- ### 6. Create the PR
69
+ ### 6. Create the PR/MR
66
70
 
71
+ **For GitHub:**
67
72
  ```bash
68
73
  gh pr create \
69
74
  --title "Your generated title" \
@@ -71,19 +76,20 @@ gh pr create \
71
76
  --base main
72
77
  ```
73
78
 
74
- Or interactively if you want the user to review:
75
-
79
+ **For GitLab:**
76
80
  ```bash
77
- gh pr create --web
81
+ glab mr create \
82
+ --title "Your generated title" \
83
+ --description "Your generated description" \
84
+ --target-branch main
78
85
  ```
79
86
 
80
- ### 7. Report the PR URL
87
+ ### 7. Report the PR/MR URL
81
88
 
82
- After creation, provide the PR URL to the user:
89
+ After creation, provide the URL to the user:
83
90
 
84
- ```bash
85
- gh pr view --json url --jq '.url'
86
- ```
91
+ **GitHub:** `gh pr view --json url --jq '.url'`
92
+ **GitLab:** `glab mr view --web`
87
93
 
88
94
  ## Tips
89
95
 
@@ -1,15 +1,19 @@
1
1
  ---
2
- description: Implement a GitHub issue and create a pull request
2
+ description: Implement a GitHub issue or GitLab issue and create a PR/MR
3
3
  argument-hint: <issue-number-or-url>
4
4
  ---
5
5
 
6
6
  # Implement Issue
7
7
 
8
- Read a GitHub issue, implement the requested changes, and create a pull request.
8
+ Read a GitHub or GitLab issue, implement the requested changes, and create a pull request / merge request.
9
+
10
+ **Provider detection:** Check the URL or remote to determine the VCS provider:
11
+ - If GitHub → use `gh issue view` / `gh pr create`
12
+ - If GitLab → use `glab issue view` / `glab mr create`
9
13
 
10
14
  ## Arguments
11
15
 
12
- - `issue-number-or-url`: Either an issue number (e.g., `123`) or a full GitHub issue URL (e.g., `https://github.com/owner/repo/issues/123`)
16
+ - `issue-number-or-url`: Either an issue number (e.g., `123`) or a full URL (e.g., `https://github.com/owner/repo/issues/123` or `https://gitlab.com/group/project/-/issues/123`)
13
17
 
14
18
  ## Workflow
15
19
 
@@ -1,15 +1,19 @@
1
1
  ---
2
- description: Respond to a GitHub issue or pull request
2
+ description: Respond to a GitHub issue/PR or GitLab issue/MR
3
3
  argument-hint: <issue-or-pr-number-or-url>
4
4
  ---
5
5
 
6
- # Respond to GitHub
6
+ # Respond to VCS Issue/PR/MR
7
7
 
8
- Post a response to a GitHub issue or pull request.
8
+ Post a response to a GitHub issue/PR or GitLab issue/MR.
9
+
10
+ **Provider detection:** Check the URL or remote to determine the VCS provider:
11
+ - If GitHub → use `gh issue comment` / `gh pr comment`
12
+ - If GitLab → use `glab issue note` / `glab mr note`
9
13
 
10
14
  ## Arguments
11
15
 
12
- - `issue-or-pr-number-or-url`: Either a number (e.g., `123`) or a full GitHub URL (e.g., `https://github.com/owner/repo/issues/123` or `https://github.com/owner/repo/pull/123`)
16
+ - `issue-or-pr-number-or-url`: Either a number (e.g., `123`) or a full URL (e.g., `https://github.com/owner/repo/issues/123` or `https://gitlab.com/group/project/-/issues/123`)
13
17
 
14
18
  ## Workflow
15
19
 
@@ -1,11 +1,15 @@
1
1
  ---
2
- description: Review a GitHub pull request and provide detailed feedback
3
- argument-hint: <pr-number-or-url>
2
+ description: Review a pull request (GitHub) or merge request (GitLab) and provide detailed feedback
3
+ argument-hint: <pr-or-mr-number-or-url>
4
4
  ---
5
5
 
6
- # Review Pull Request
6
+ # Review Pull Request / Merge Request
7
7
 
8
- Review a GitHub pull request by analyzing the changes and providing structured feedback.
8
+ Review a pull request (GitHub) or merge request (GitLab) by analyzing the changes and providing structured feedback.
9
+
10
+ **Provider detection:** Check the remote URL or the provided URL to determine the VCS provider:
11
+ - If GitHub → use `gh pr` commands
12
+ - If GitLab → use `glab mr` commands
9
13
 
10
14
  ## Arguments
11
15
 
@@ -51,21 +55,51 @@ gh pr view <pr-number> --json title,body,author,headRefName,baseRefName,addition
51
55
  gh pr diff <pr-number>
52
56
  ```
53
57
 
54
- ### 6. Analyze the Changes
58
+ ### 6. Check CI Status (MANDATORY)
59
+
60
+ Before analyzing the code, check if CI checks are passing:
61
+
62
+ ```bash
63
+ # GitHub
64
+ gh pr checks <pr-number>
65
+
66
+ # GitLab
67
+ glab mr view <mr-number> --json pipelines
68
+ ```
69
+
70
+ **If CI checks are failing, this is an automatic REQUEST_CHANGES.** Do not approve a PR with failing CI. Include the failing check names and any relevant error details in your review.
71
+
72
+ ### 7. Verify Tests Are Included (MANDATORY)
73
+
74
+ Check that the PR includes test changes:
75
+
76
+ ```bash
77
+ # Look for test files in the diff
78
+ gh pr diff <pr-number> | grep -E '^\+\+\+ b/.*\.(test|spec)\.' || echo "NO TEST FILES CHANGED"
79
+ ```
80
+
81
+ **If the PR modifies code but does not add or update tests, this is an automatic REQUEST_CHANGES.** Every code change must include corresponding tests. The only exceptions are:
82
+ - Pure documentation changes (README, comments only)
83
+ - Configuration-only changes (CI config, linter config, env files)
84
+ - Dependency version bumps with no code changes
85
+
86
+ When requesting changes for missing tests, be specific about what tests are needed.
87
+
88
+ ### 8. Analyze the Changes
55
89
 
56
90
  Review the diff for:
57
91
  - **Security issues**: SQL injection, XSS, command injection, secrets in code
58
92
  - **Logic errors**: Off-by-one errors, null handling, edge cases
59
93
  - **Performance concerns**: N+1 queries, unnecessary loops, memory leaks
60
94
  - **Code quality**: Naming, complexity, duplication, missing error handling
61
- - **Test coverage**: Are changes adequately tested?
95
+ - **Test coverage**: Are the included tests sufficient? Do they cover edge cases?
62
96
 
63
97
  You can also:
64
98
  - Run the test suite locally to verify tests pass
65
99
  - Check for TypeScript errors with `bun tsc --noEmit` or equivalent
66
100
  - Review the actual files in context, not just the diff
67
101
 
68
- ### 7. Provide Structured Feedback
102
+ ### 9. Provide Structured Feedback
69
103
 
70
104
  Format your review as:
71
105
 
@@ -92,7 +126,7 @@ Format your review as:
92
126
  <Overall recommendation>
93
127
  ```
94
128
 
95
- ### 8. Optionally Post the Review
129
+ ### 10. Optionally Post the Review
96
130
 
97
131
  If the user wants to post the review to GitHub:
98
132
 
@@ -104,7 +138,7 @@ gh pr review <pr-number> --request-changes --body "Your review message"
104
138
  gh pr review <pr-number> --comment --body "Your review message"
105
139
  ```
106
140
 
107
- ### 9. Post Inline Comments on Specific Lines
141
+ ### 11. Post Inline Comments on Specific Lines
108
142
 
109
143
  For more detailed feedback, you can post inline comments directly on specific lines of code using the GitHub API:
110
144
 
@@ -162,7 +196,7 @@ gh api repos/owner/repo/pulls/123/comments \
162
196
  -f body="⚠️ SQL injection risk: Use parameterized queries instead of string interpolation."
163
197
  ```
164
198
 
165
- ### 10. Re-reviewing and Resolving Comments
199
+ ### 12. Re-reviewing and Resolving Comments
166
200
 
167
201
  When the PR author makes changes in response to your review:
168
202
 
@@ -9,9 +9,7 @@ description: Start the Agent Swarm Leader
9
9
  If the `agent-swarm` MCP server is not configured or disabled, return immediately with the following message:
10
10
 
11
11
  ```
12
- ⚠️ The Agent Swarm MCP server is not configured or disabled. Please set up the MCP server to use the Agent Swarm features.
13
-
14
- Are you dumb or something? Go ask your admin to set it up properly. GTFO.
12
+ ⚠️ The Agent Swarm MCP server is not configured or disabled. Please run `bunx @desplega.ai/agent-swarm setup` to configure it.
15
13
  ```
16
14
 
17
15
  ## Initial Setup
@@ -9,9 +9,7 @@ description: Start an Agent Swarm Worker
9
9
  If the `agent-swarm` MCP server is not configured or disabled, return immediately with the following message:
10
10
 
11
11
  ```
12
- ⚠️ The Agent Swarm MCP server is not configured or disabled. Please set up the MCP server to use the Agent Swarm features.
13
-
14
- I can not serve you, my lord, if the MCP server is not properly configured. Go ask your admin to set it up properly. GTFO.
12
+ ⚠️ The Agent Swarm MCP server is not configured or disabled. Please run `bunx @desplega.ai/agent-swarm setup` to configure it.
15
13
  ```
16
14
 
17
15
  ## Agent Swarm Worker Setup
@@ -9,11 +9,19 @@ If no `taskId` is provided, you should call the `poll-task` tool to get a new ta
9
9
 
10
10
  ## Workflow
11
11
 
12
- Once you get a task assigned, you need to immidiately start working on it. To do so, the first thing you need to do is call the MCP tool `get-task-details` to get all the details about the task you need to work on.
12
+ Once you get a task assigned, you need to immediately start working on it. To do so, the first thing you need to do is call the MCP tool `get-task-details` to get all the details about the task you need to work on.
13
13
 
14
14
  Once you have the task details, you should:
15
15
 
16
- 1. Figure out if you need to use any of the available commands to help you with your work (see below for available commands)
16
+ <!-- claude-only -->
17
+ 1. **Recall relevant memories (REQUIRED):** Before starting any work, search your memory for relevant context:
18
+ - Use `memory-search` with the task description as query
19
+ - If the task has an epicId, also search with the epic name/goal
20
+ - Review any returned memories — they may contain solutions, patterns, or warnings from previous tasks
21
+ - Use `memory-get` on any highly relevant results to get full details
22
+ - This step is NOT optional. Past learnings compound your effectiveness.
23
+ <!-- /claude-only -->
24
+ 2. Figure out if you need to use any of the available commands to help you with your work (see below for available commands)
17
25
  2. Use the `/todos` command to add a new todo item indicating you are starting to work on the task (e.g. "Work on task XXX: <short description>"). This will help on restarts, as it will be easier to remember what you were doing.
18
26
  3. Call `store-progress` tool to mark the task as "in-progress" with a progress set to something like "Starting work on the task XXX, blah blah". Additionally use `/swarm-chat` command to notify the swarm, human and lead when applicable. Do not be too verbose, nor spammy.
19
27
  4. Start working on the task, providing updates as needed by calling `store-progress` tool, use the `progress` field to indicate what you are doing.
@@ -50,4 +58,15 @@ Once you are done, or in a real dead-end, you should call `store-progress` tool
50
58
 
51
59
  If you used the `/todos` command to add a todo item when starting the task, make sure to mark it as completed or remove it as needed.
52
60
 
53
- Once you are done (either ok or not), finish the session by just replying "DONE".
61
+ Once you are done (either ok or not), perform the Post-Task Reflection below, then finish the session by just replying "DONE".
62
+
63
+ ### Post-Task Reflection (REQUIRED)
64
+
65
+ After calling `store-progress` to complete or fail a task, do the following before finishing:
66
+
67
+ 1. **Transferable learning?** If you learned something reusable (a pattern, a gotcha, a fix), write it to `/workspace/personal/memory/<descriptive-name>.md`
68
+ 2. **Swarm-relevant?** If the learning applies to all agents (not just you), write it to `/workspace/shared/memory/<your-id>/<descriptive-name>.md` so all agents can find it via `memory-search`
69
+ 3. **Identity update?** If you discovered a new area of expertise or working style preference, update your IDENTITY.md
70
+ 4. **Tools update?** If you found a new service, API, or tool, update your TOOLS.md
71
+
72
+ Skip this section ONLY if the task was trivially simple (single file edit, no debugging, no new knowledge gained).