@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,512 +0,0 @@
1
- ---
2
- date: 2026-03-08T19:00:00-05:00
3
- topic: "Memory & Self-Improvement Enhancements"
4
- planner: Claude
5
- git_commit: 94b35ac22ee9f35581f18281a6e69751d90ebad6
6
- branch: main
7
- repository: agent-swarm
8
- tags: [plan, memory, self-improvement, epic-context, auto-promotion]
9
- status: implemented
10
- autonomy: critical
11
- last_updated: 2026-03-09
12
- last_updated_by: Claude
13
- ---
14
-
15
- # Memory & Self-Improvement Enhancements Implementation Plan
16
-
17
- ## Overview
18
-
19
- The agent-swarm creates memories correctly (task completions, session summaries, manual learnings) but fails to **surface** them when they'd be useful. Agents are instructed to call `memory-search` but rarely do (Gap 9 from self-improvement audit). Meanwhile, the lead's follow-up tasks for epic-linked work contain no epic context, and the auto-promotion filter is too narrow — most implementation learnings stay agent-scoped and invisible to the rest of the swarm.
20
-
21
- This plan implements four improvements that make memory compounding automatic rather than opt-in, and make epic context flow through the system where it's needed.
22
-
23
- ## Current State Analysis
24
-
25
- ### Memory Injection (P7 — never implemented)
26
-
27
- `fetchRelevantMemories()` in `runner.ts:1039-1077` already exists and works — it searches memories by embedding similarity and formats results as markdown. It's called at `runner.ts:2122-2134` for `task_assigned` and `task_offered` triggers only. However:
28
- - It only searches with the task description as the query, missing epic context
29
- - It doesn't include epic plan/prd/nextSteps
30
- - It doesn't include recent completed task summaries from the same epic
31
- - Resumed tasks get **zero** memory injection (`runner.ts:1940-2056`)
32
-
33
- ### Memory Prompting
34
-
35
- `BASE_PROMPT_FILESYSTEM` in `base-prompt.ts:204-258` contains the memory instructions. The key line is:
36
-
37
- > **Session boot:** At the start of each session, use `memory-search` to recall relevant context for your current task. Your past learnings are searchable.
38
-
39
- This is advisory — agents can and do skip it. There's no enforcement in `work-on-task.md` either.
40
-
41
- ### Auto-Promotion Filter
42
-
43
- `store-progress.ts:200-205` — the `shouldShareWithSwarm` boolean:
44
- ```typescript
45
- const shouldShareWithSwarm =
46
- status === "completed" &&
47
- (result.task!.taskType === "research" ||
48
- result.task!.tags?.includes("knowledge") ||
49
- result.task!.tags?.includes("shared"));
50
- ```
51
-
52
- This excludes all `implementation`, `planning`, `quick-fix`, and `general` tasks from swarm-scope promotion. Workers on the same epic can't see each other's learnings unless they were explicitly tagged.
53
-
54
- ### Epic Context in Follow-ups
55
-
56
- `store-progress.ts:231-272` creates follow-up tasks for the lead when workers finish. The follow-up description includes agent name, task description, and output — but does NOT include the task's `epicId`, the epic's goal/plan/nextSteps, or any directive to evaluate epic progress. The `epicId` string does not appear anywhere in `store-progress.ts`.
57
-
58
- Separately, the `epic_progress_changed` trigger (`poll.ts:117-130`, prompt at `runner.ts:914-1001`) fires at lower priority and includes epic name, goal, progress, and task stats — but NOT plan/prd fields.
59
-
60
- ### Key Discoveries:
61
- - `fetchRelevantMemories()` already works and formats nicely — we just need to enrich its query and extend its reach (`runner.ts:1039-1077`)
62
- - Follow-up task creation has no `epicId` reference at all (`store-progress.ts:231-272`)
63
- - The epic progress trigger only includes `epic.name`, `epic.goal`, `epic.progress`, `epic.status`, `epic.taskStats` — NOT `epic.plan` or `epic.prd` (`runner.ts:914-1001`)
64
- - `inject-learning` creates agent-scoped memories (`inject-learning.ts:71-78`) — never swarm-scoped
65
- - `searchMemoriesByVector` does brute-force cosine similarity in JS (`db.ts:5264-5324`) — works fine for current scale but worth noting
66
- - Resumed tasks bypass memory injection entirely (`runner.ts:1940-2056`)
67
-
68
- ## Desired End State
69
-
70
- 1. **Every task starts with relevant memories injected automatically** — agents don't need to remember to call `memory-search`. The runner does it server-side before spawning Claude, including epic-specific context.
71
- 2. **Agent prompts enforce memory usage** — the instructions are stronger and integrated into the `work-on-task` flow, not just advisory.
72
- 3. **Implementation task learnings compound across the swarm** — epic-linked task completions auto-promote to swarm scope. Lead-injected learnings are swarm-scoped by default.
73
- 4. **The lead always has epic context when reviewing follow-ups** — follow-up tasks include the epic's goal, plan, and nextSteps. The dual-mechanism race condition is resolved.
74
-
75
- ## Quick Verification Reference
76
-
77
- Common commands to verify the implementation:
78
- - `bun run tsc:check`
79
- - `bun run lint:fix`
80
- - `bun test`
81
-
82
- Key files to check:
83
- - `src/commands/runner.ts` — Memory injection enrichment
84
- - `src/tools/store-progress.ts` — Auto-promotion + epic-aware follow-ups
85
- - `src/tools/inject-learning.ts` — Swarm-scope default
86
- - `src/prompts/base-prompt.ts` — Stricter memory instructions
87
- - `plugin/commands/work-on-task.md` — Memory check step
88
-
89
- ## What We're NOT Doing
90
-
91
- - **Drive Loop**: Epic state machine, epic heartbeat, goal evaluation loop — separate plan
92
- - **Epic event bus integration**: Workflow events for epic status changes — separate plan
93
- - **New memory scopes**: No epic-scoped or team-scoped memories — existing agent/swarm scopes are sufficient (per Taras's decision)
94
- - **Vector index optimization**: The brute-force cosine similarity in JS is fine for current scale
95
- - **Pre-compaction memory flush**: Interesting OpenClaw pattern but separate effort
96
-
97
- ## Implementation Approach
98
-
99
- Four phases, ordered by dependency (Phase 3 depends on knowing the auto-promotion rules from Phase 1, Phase 4 depends on the enriched query patterns from Phase 3). Each phase is independently testable.
100
-
101
- ---
102
-
103
- ## Phase 1: Broaden Auto-Promotion of Learnings
104
-
105
- ### Overview
106
- Expand the `shouldShareWithSwarm` filter in `store-progress.ts` to include epic-linked tasks, and change `inject-learning.ts` to use swarm scope by default.
107
-
108
- ### Changes Required:
109
-
110
- #### 1. Expand auto-promotion filter
111
- **File**: `src/tools/store-progress.ts`
112
- **Changes**: Modify the `shouldShareWithSwarm` condition (lines 200-205) to also promote completed tasks that belong to an active epic:
113
-
114
- ```typescript
115
- const shouldShareWithSwarm =
116
- status === "completed" &&
117
- (result.task!.taskType === "research" ||
118
- result.task!.tags?.includes("knowledge") ||
119
- result.task!.tags?.includes("shared") ||
120
- (result.task!.epicId != null));
121
- ```
122
-
123
- This ensures all epic-linked task completions become visible to other workers, enabling cross-worker knowledge transfer within the same project.
124
-
125
- #### 2. Change inject-learning to swarm scope
126
- **File**: `src/tools/inject-learning.ts`
127
- **Changes**: Change `scope: "agent"` to `scope: "swarm"` at line 73. The lead's learnings are organizational knowledge — they should be visible to all workers, not just the target.
128
-
129
- ```typescript
130
- createMemory({
131
- agentId: targetAgentId,
132
- scope: "swarm", // was "agent"
133
- name: `Lead feedback: ${category} — ${learning.slice(0, 60)}`,
134
- content: `[Lead Feedback — ${category}]\n\n${learning}`,
135
- source: "manual",
136
- })
137
- ```
138
-
139
- #### 3. Update existing tests
140
- **File**: `src/tests/self-improvement.test.ts`
141
- **Changes**:
142
- - Add test case: "epic-linked task promotes to swarm scope" — create a task with `epicId` set, complete it, verify swarm memory is created
143
- - Update "regular task does NOT promote" test: ensure regular tasks **without** epicId still don't promote
144
- - Update inject-learning test: verify scope is now "swarm" instead of "agent"
145
-
146
- ### Success Criteria:
147
-
148
- #### Automated Verification:
149
- - [x] Type check passes: `bun run tsc:check`
150
- - [x] Lint passes: `bun run lint:fix`
151
- - [x] Tests pass: `bun test src/tests/self-improvement.test.ts`
152
- - [x] All tests pass: `bun test`
153
-
154
- #### Manual Verification:
155
- - [x] Start server, create a task with epicId, complete it via store-progress, verify both agent-scoped AND swarm-scoped memories exist in the DB
156
- - [x] Use inject-learning tool, verify the created memory has scope "swarm"
157
-
158
- **Implementation Note**: After completing this phase, pause for manual confirmation.
159
-
160
- ---
161
-
162
- ## Phase 2: Stricter Memory Prompting
163
-
164
- ### Overview
165
- Strengthen memory usage instructions across all agent roles and integrate a memory check step into the work-on-task flow.
166
-
167
- ### Changes Required:
168
-
169
- #### 1. Strengthen memory instructions in base prompt
170
- **File**: `src/prompts/base-prompt.ts`
171
- **Changes**: Replace the advisory "Session boot" paragraph in `BASE_PROMPT_FILESYSTEM` (around lines 226-227) with a stronger directive:
172
-
173
- Replace:
174
- ```
175
- **Session boot:** At the start of each session, use `memory-search` to recall relevant context for your current task. Your past learnings are searchable.
176
- ```
177
-
178
- With:
179
- ```
180
- **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.
181
-
182
- Do this FIRST, before reading files, writing code, or making plans.
183
- ```
184
-
185
- #### 2. Add memory check to work-on-task command
186
- **File**: `plugin/commands/work-on-task.md`
187
- **Changes**: Add an explicit memory search step early in the task workflow (after fetching task details, before starting work):
188
-
189
- ```markdown
190
- ## Step 2: Recall Relevant Memories
191
-
192
- Before starting any work, search your memory for relevant context:
193
- 1. Use `memory-search` with the task description as query
194
- 2. If the task has an epicId, also search with the epic name/goal
195
- 3. Review any returned memories — they may contain solutions, patterns, or warnings from previous tasks
196
- 4. Use `memory-get` on any highly relevant results to get full details
197
-
198
- This step is NOT optional. Past learnings compound your effectiveness.
199
- ```
200
-
201
- #### 3. Add memory reminder to lead follow-up handling
202
- **File**: `src/prompts/base-prompt.ts`
203
- **Changes**: In `BASE_PROMPT_LEAD`, add instructions for how to handle follow-up tasks:
204
-
205
- ```
206
- ### Handling Follow-Up Tasks
207
-
208
- When you receive a follow-up about a completed or failed worker task:
209
- 1. **Search memory first** — use `memory-search` to check if similar tasks have been attempted before
210
- 2. Review the output/failure reason
211
- 3. If the task belongs to an epic, check the epic's progress and plan
212
- 4. Decide: is the goal met? If not, create next task(s). If blocked, notify the stakeholder.
213
- ```
214
-
215
- ### Success Criteria:
216
-
217
- #### Automated Verification:
218
- - [x] Type check passes: `bun run tsc:check`
219
- - [x] Lint passes: `bun run lint:fix`
220
- - [x] All tests pass: `bun test`
221
-
222
- #### Manual Verification:
223
- - [x] Read the rendered system prompt for a worker agent and verify the memory instructions are prominent and directive
224
- - [x] Read the work-on-task.md file and verify the memory check step is clearly positioned before any work begins
225
- - [x] Start a worker, assign a task, observe in logs/session that it calls memory-search early
226
-
227
- **Implementation Note**: After completing this phase, pause for manual confirmation.
228
-
229
- ---
230
-
231
- ## Phase 3: Epic-Aware Follow-Up Tasks (Merge Dual Mechanism)
232
-
233
- ### Overview
234
- Enrich the follow-up task created in `store-progress.ts` with epic context (goal, plan, nextSteps), and resolve the race condition between the follow-up and the `epic_progress_changed` trigger. Also enrich the epic progress trigger prompt to include plan/prd fields.
235
-
236
- ### Changes Required:
237
-
238
- #### 1. Add epic context to follow-up task description
239
- **File**: `src/tools/store-progress.ts`
240
- **Changes**: After line 237 (where we check `!taskAgent.isLead`), look up the task's epic if `result.task.epicId` exists. Include the epic's goal, plan (truncated), and nextSteps in the follow-up description.
241
-
242
- ```typescript
243
- // After checking !taskAgent.isLead and finding leadAgent
244
- let epicContext = "";
245
- if (result.task.epicId) {
246
- const epic = getEpicWithProgress(result.task.epicId);
247
- if (epic) {
248
- epicContext = `\n\n## Epic Context\n`;
249
- epicContext += `**Epic:** ${epic.name}\n`;
250
- epicContext += `**Goal:** ${epic.goal}\n`;
251
- epicContext += `**Progress:** ${epic.progress}% (${epic.taskStats.completed}/${epic.taskStats.total} tasks)\n`;
252
- if (epic.plan) {
253
- epicContext += `**Plan:**\n${epic.plan.slice(0, 1000)}\n`;
254
- }
255
- if (epic.nextSteps) {
256
- epicContext += `**Next Steps:**\n${epic.nextSteps}\n`;
257
- }
258
- epicContext += `\n**Action Required:** Review the output above in the context of this epic. `;
259
- epicContext += `If the epic goal is not yet met, create the next task(s) with epicId="${result.task.epicId}". `;
260
- epicContext += `If blocked or unclear, notify the stakeholder. `;
261
- epicContext += `If the goal is met, update the epic status to completed.`;
262
- }
263
- }
264
- ```
265
-
266
- Then append `epicContext` to the follow-up description. Also pass `epicId` to the follow-up task creation:
267
- ```typescript
268
- createTaskExtended(followUpDescription + epicContext, {
269
- agentId: leadAgent.id,
270
- source: "system",
271
- taskType: "follow-up",
272
- parentTaskId: taskId,
273
- epicId: result.task.epicId || undefined, // NEW: link follow-up to epic
274
- slackChannelId: result.task.slackChannelId,
275
- slackThreadTs: result.task.slackThreadTs,
276
- slackUserId: result.task.slackUserId,
277
- })
278
- ```
279
-
280
- #### 2. Enrich epic progress trigger with plan/prd
281
- **File**: `src/commands/runner.ts`
282
- **Changes**: In the `epic_progress_changed` prompt builder (around lines 948-983), add the epic's `plan` and `prd` fields to the per-epic section:
283
-
284
- ```typescript
285
- // After the epic goal line in the prompt builder
286
- if (epic.plan) {
287
- prompt += `**Plan:**\n${epic.plan.slice(0, 2000)}\n\n`;
288
- }
289
- if (epic.prd) {
290
- prompt += `**PRD:**\n${epic.prd.slice(0, 1000)}\n\n`;
291
- }
292
- ```
293
-
294
- #### 3. Add nextSteps field to epics table
295
- **File**: `src/be/migrations/NNN_add_epic_next_steps.sql` (new migration, next number)
296
- **Changes**:
297
-
298
- ```sql
299
- ALTER TABLE epics ADD COLUMN nextSteps TEXT;
300
- ```
301
-
302
- Also update:
303
- - `src/types.ts` — Add `nextSteps` to EpicSchema
304
- - `src/be/db.ts` — Update `rowToEpic` mapper, `updateEpic` function, and `getEpicById` to include the new field
305
-
306
- #### 4. Expose nextSteps in update-epic tool
307
- **File**: `src/tools/epics/update-epic.ts`
308
- **Changes**: Add `nextSteps` as an optional string parameter so the lead can persist its reasoning about what to do next.
309
-
310
- #### 5. Deduplicate follow-up and epic_progress_changed
311
- **Files**: `src/tools/store-progress.ts`
312
- **Changes**: After creating the follow-up for an epic-linked task, call `markEpicsProgressNotified([result.task.epicId])` (import from `db.ts`). This updates the `progressNotifiedAt` watermark so the same completion doesn't also trigger an `epic_progress_changed` event. This makes Mechanism A (follow-up) the primary path for per-task completions, while Mechanism B (epic progress) acts as a catch-all for batched completions or edge cases.
313
-
314
- ### Success Criteria:
315
-
316
- #### Automated Verification:
317
- - [x] Type check passes: `bun run tsc:check`
318
- - [x] Lint passes: `bun run lint:fix`
319
- - [x] Migration applies cleanly on fresh DB: `rm agent-swarm-db.sqlite && bun run start:http` (check startup logs)
320
- - [x] Migration applies cleanly on existing DB: `bun run start:http` (check startup logs)
321
- - [x] All tests pass: `bun test`
322
-
323
- #### Manual Verification:
324
- - [x] Create an epic with a plan, assign a task to it, complete the task. Verify the follow-up task description includes epic context (goal, plan, progress, action directive).
325
- - [x] Verify the follow-up task has the correct `epicId` set.
326
- - [x] Check that `epic_progress_changed` does NOT re-fire for the same task completion (dedup via `progressNotifiedAt`).
327
- - [x] Test the `update-epic` tool with `nextSteps` field — verify it persists and appears in `get-epic-details`.
328
-
329
- **Implementation Note**: After completing this phase, pause for manual confirmation. This is the riskiest phase — the dual-mechanism deduplication needs careful testing.
330
-
331
- ---
332
-
333
- ## Phase 4: Server-Side Memory Injection (P7)
334
-
335
- ### Overview
336
- Enrich the `fetchRelevantMemories()` function to include epic context in its search query, and extend memory injection to cover all trigger types and resumed tasks. Also inject recent completed task summaries for epic-linked tasks.
337
-
338
- ### Changes Required:
339
-
340
- #### 1. Enrich memory search query with epic context
341
- **File**: `src/commands/runner.ts`
342
- **Changes**: Modify the memory injection block at lines 2122-2134. When the task has an `epicId`, construct a richer search query that includes the epic's goal and plan excerpt:
343
-
344
- ```typescript
345
- if (trigger.type === "task_assigned" || trigger.type === "task_offered") {
346
- const task = trigger.task;
347
- let searchQuery = task.task; // task description
348
-
349
- // Enrich with epic context for better memory retrieval
350
- if (task.epicId) {
351
- const epic = getEpicWithProgress(task.epicId);
352
- if (epic) {
353
- searchQuery = `[Epic: ${epic.name}] ${epic.goal}\n\n${task.task}`;
354
- }
355
- }
356
-
357
- const memoryContext = await fetchRelevantMemories(apiUrl, apiKey, agentId, searchQuery);
358
- if (memoryContext) {
359
- triggerPrompt += memoryContext;
360
- }
361
-
362
- // Also inject recent completed task summaries from the same epic
363
- if (task.epicId) {
364
- const epicTaskContext = await fetchEpicTaskContext(apiUrl, apiKey, task.epicId, task.id);
365
- if (epicTaskContext) {
366
- triggerPrompt += epicTaskContext;
367
- }
368
- }
369
- }
370
- ```
371
-
372
- #### 2. Create fetchEpicTaskContext helper
373
- **File**: `src/commands/runner.ts`
374
- **Changes**: Add a new function that fetches recent completed task summaries from the same epic. This gives the current worker visibility into what previous workers accomplished:
375
-
376
- ```typescript
377
- async function fetchEpicTaskContext(
378
- apiUrl: string,
379
- apiKey: string,
380
- epicId: string,
381
- currentTaskId: string,
382
- ): Promise<string | null> {
383
- // Fetch recent completed tasks for this epic (exclude current task)
384
- const response = await fetch(`${apiUrl}/api/tasks?epicId=${epicId}&status=completed&limit=5`, {
385
- headers: { Authorization: `Bearer ${apiKey}` },
386
- });
387
- if (!response.ok) return null;
388
- const tasks = await response.json();
389
-
390
- const relevant = tasks.filter((t: any) => t.id !== currentTaskId);
391
- if (relevant.length === 0) return null;
392
-
393
- let context = "\n\n### Recent Epic Task Completions\n\n";
394
- context += "These tasks were recently completed in the same epic:\n\n";
395
- for (const t of relevant.slice(0, 5)) {
396
- context += `- **${t.task.slice(0, 100)}**: ${(t.output || "no output").slice(0, 200)}\n`;
397
- }
398
- return context;
399
- }
400
- ```
401
-
402
- **Note**: Verify that the tasks API endpoint supports `?epicId=` and `?status=` query filters. If not, add them to `src/http/tasks.ts`.
403
-
404
- #### 3. Extend memory injection to resumed tasks
405
- **File**: `src/commands/runner.ts`
406
- **Changes**: In the paused task resume phase (lines 1940-2056), after building the resume prompt, add memory injection:
407
-
408
- ```typescript
409
- // After buildResumePrompt returns, before spawnClaudeProcess
410
- const resumeSearchQuery = task.task;
411
- const resumeMemoryContext = await fetchRelevantMemories(apiUrl, apiKey, agentId, resumeSearchQuery);
412
- if (resumeMemoryContext) {
413
- resumePrompt += resumeMemoryContext;
414
- }
415
- ```
416
-
417
- #### 4. Extend memory injection to epic_progress_changed trigger
418
- **File**: `src/commands/runner.ts`
419
- **Changes**: After the `buildPromptForTrigger()` call, extend the memory injection block to also cover `epic_progress_changed`:
420
-
421
- ```typescript
422
- // For epic progress triggers, search memories related to the epic goals
423
- if (trigger.type === "epic_progress_changed" && trigger.epics) {
424
- const epicQueries = trigger.epics.map((e: any) => `${e.epic.name}: ${e.epic.goal}`).join("\n");
425
- const memoryContext = await fetchRelevantMemories(apiUrl, apiKey, agentId, epicQueries);
426
- if (memoryContext) {
427
- triggerPrompt += memoryContext;
428
- }
429
- }
430
- ```
431
-
432
- ### Success Criteria:
433
-
434
- #### Automated Verification:
435
- - [x] Type check passes: `bun run tsc:check`
436
- - [x] Lint passes: `bun run lint:fix`
437
- - [x] All tests pass: `bun test`
438
-
439
- #### Manual Verification:
440
- - [x] Start server and worker. Create some memories manually. Assign a task and observe in worker logs that the prompt includes "Relevant Past Knowledge" section.
441
- - [x] Create an epic with 2 tasks. Complete task 1, then assign task 2. Verify task 2's prompt includes both memory context AND "Recent Epic Task Completions" section with task 1's summary.
442
- - [x] Pause a worker mid-task (kill container). Resume it. Verify the resumed task gets memory injection.
443
- - [x] Trigger an `epic_progress_changed` event. Verify the lead's prompt includes memory context related to the epic goals.
444
-
445
- **Implementation Note**: After completing this phase, pause for manual confirmation.
446
-
447
- ---
448
-
449
- ## Testing Strategy
450
-
451
- ### Unit Tests
452
- - **Phase 1**: Extend `self-improvement.test.ts` with epic-linked promotion test and inject-learning scope test
453
- - **Phase 3**: Add tests for epic context in follow-up descriptions, nextSteps field persistence
454
- - **Phase 4**: Add tests for `fetchEpicTaskContext` helper, enriched search query construction
455
-
456
- ### Integration Tests
457
- - Test the full flow: create epic → create task with epicId → complete task → verify follow-up has epic context + swarm memory created + memory searchable
458
-
459
- ### Manual E2E
460
- ```bash
461
- # Start server
462
- bun run start:http
463
-
464
- # Create an agent
465
- curl -X POST -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
466
- http://localhost:3013/api/agents -d '{"name":"test-worker","isLead":false}'
467
-
468
- # Create an epic with a plan
469
- # (use MCP or API to create epic with plan field set)
470
-
471
- # Create a task linked to the epic
472
- curl -X POST -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
473
- http://localhost:3013/api/tasks -d '{"task":"Implement feature X","epicId":"<epic-id>","agentId":"<worker-id>"}'
474
-
475
- # Complete the task via store-progress (through MCP)
476
- # Verify: follow-up task has epic context, swarm memory exists, next task gets memory injection
477
- ```
478
-
479
- ## Implementation Summary
480
-
481
- **Implemented**: 2026-03-09 by Claude
482
- **PR**: https://github.com/desplega-ai/agent-swarm/pull/148
483
- **Version**: 1.37.0
484
- **Branch**: `feat/memory-self-improvement-enhancements`
485
-
486
- ### Commits
487
- 1. `ec03155` — Phase 1: Broaden auto-promotion of learnings
488
- 2. `1c71f0a` — Phase 2: Strengthen memory prompting across agent roles
489
- 3. `210b478` — Phase 3: Epic-aware follow-up tasks and deduplication
490
- 4. `6e7c611` — Phase 4: Server-side memory injection enrichment
491
- 5. `7a114f0` — Bump version to 1.37.0
492
-
493
- ### E2E Verification
494
- - All 1118 unit tests pass
495
- - Migration 005 applies cleanly on fresh and existing DBs
496
- - Live server E2E: swarm memory promotion, inject-learning scope, epic-aware follow-ups, nextSteps, dedup all confirmed
497
- - Docker worker E2E: server-side memory injection (`task_assigned` trigger) confirmed — worker received 4 "Relevant Past Knowledge" entries and 2 "Recent Epic Task Completions"
498
- - Prompt-based enforcement (Phase 2) confirmed as fallback for `pool_tasks_available` triggers
499
-
500
- ### What's Left (from "What We're NOT Doing")
501
- The drive loop (epic state machine, goal evaluation loop) remains a separate effort — see the drive loop research below.
502
-
503
- ## References
504
-
505
- ### Upstream research (2026-03-08 learning loop session)
506
- - `thoughts/taras/research/2026-03-08-drive-loop-concept.md` — Drive loop research with codebase analysis. This plan implements the **memory compounding** and **epic context** portions identified in that research. The drive loop itself (epic state machine, heartbeat, goal evaluation) is deferred to a separate plan.
507
- - `thoughts/taras/research/2026-03-08-openclaw-memory-patterns.md` — OpenClaw memory patterns (web research). Informed the auto-promotion and memory injection design.
508
- - `thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md` — OpenClaw vs agent-swarm comparison
509
-
510
- ### Original gap analysis
511
- - `thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md` — Original P7 proposal (memory injection at task start)
512
- - `thoughts/researcher/research/2026-02-20-agent-self-improvement.md` — Gap analysis identifying Gap 9 (agents don't call memory-search). This plan addresses Gap 9 via both server-side injection (Phase 4) and prompt enforcement (Phase 2).