@desplega.ai/agent-swarm 1.20.0 → 1.51.2

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 (561) hide show
  1. package/README.md +271 -169
  2. package/openapi.json +5015 -0
  3. package/package.json +40 -7
  4. package/plugin/commands/close-issue.md +7 -3
  5. package/plugin/commands/create-pr.md +18 -12
  6. package/plugin/commands/implement-issue.md +7 -3
  7. package/plugin/commands/respond-github.md +8 -4
  8. package/plugin/commands/review-pr.md +44 -10
  9. package/plugin/commands/start-leader.md +1 -3
  10. package/plugin/commands/start-worker.md +1 -3
  11. package/plugin/commands/work-on-task.md +22 -3
  12. package/plugin/pi-skills/close-issue/SKILL.md +90 -0
  13. package/plugin/pi-skills/create-pr/SKILL.md +99 -0
  14. package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
  15. package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
  16. package/plugin/pi-skills/respond-github/SKILL.md +98 -0
  17. package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
  18. package/plugin/pi-skills/review-pr/SKILL.md +261 -0
  19. package/plugin/pi-skills/start-leader/SKILL.md +121 -0
  20. package/plugin/pi-skills/start-worker/SKILL.md +60 -0
  21. package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
  22. package/plugin/pi-skills/todos/SKILL.md +66 -0
  23. package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
  24. package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
  25. package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
  26. package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
  27. package/plugin/skills/artifacts/examples/static-report.sh +17 -0
  28. package/plugin/skills/artifacts/skill.md +71 -0
  29. package/src/agentmail/app.ts +65 -0
  30. package/src/agentmail/handlers.ts +262 -0
  31. package/src/agentmail/index.ts +9 -0
  32. package/src/agentmail/templates.ts +111 -0
  33. package/src/agentmail/types.ts +51 -0
  34. package/src/artifact-sdk/browser-sdk.ts +30 -0
  35. package/src/artifact-sdk/index.ts +2 -0
  36. package/src/artifact-sdk/localtunnel.d.ts +20 -0
  37. package/src/artifact-sdk/port.ts +12 -0
  38. package/src/artifact-sdk/server.ts +156 -0
  39. package/src/artifact-sdk/tunnel.ts +19 -0
  40. package/src/be/chunking.ts +193 -0
  41. package/src/be/db-queries/oauth.ts +90 -0
  42. package/src/be/db-queries/tracker.ts +182 -0
  43. package/src/be/db.ts +3327 -784
  44. package/src/be/embedding.ts +80 -0
  45. package/src/be/migrations/001_initial.sql +409 -0
  46. package/src/be/migrations/002_one_time_schedules.sql +59 -0
  47. package/src/be/migrations/003_workflows.sql +51 -0
  48. package/src/be/migrations/004_workflow_source.sql +81 -0
  49. package/src/be/migrations/005_epic_next_steps.sql +2 -0
  50. package/src/be/migrations/006_vcs_provider.sql +94 -0
  51. package/src/be/migrations/007_task_dir.sql +2 -0
  52. package/src/be/migrations/008_workflow_redesign.sql +85 -0
  53. package/src/be/migrations/009_tracker_integration.sql +144 -0
  54. package/src/be/migrations/010_step_diagnostics.sql +1 -0
  55. package/src/be/migrations/011_step_next_port.sql +1 -0
  56. package/src/be/migrations/012_trigger_schema.sql +1 -0
  57. package/src/be/migrations/013_task_output_schema.sql +2 -0
  58. package/src/be/migrations/014_prompt_templates.sql +33 -0
  59. package/src/be/migrations/015_workflow_workspace.sql +3 -0
  60. package/src/be/migrations/016_active_session_runner_session.sql +4 -0
  61. package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
  62. package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
  63. package/src/be/migrations/runner.ts +188 -0
  64. package/src/be/seed.ts +62 -0
  65. package/src/cli.tsx +231 -299
  66. package/src/commands/artifact.ts +241 -0
  67. package/src/commands/onboard/compose-generator.ts +169 -0
  68. package/src/commands/onboard/env-generator.ts +79 -0
  69. package/src/commands/onboard/manifest.ts +37 -0
  70. package/src/commands/onboard/presets.ts +85 -0
  71. package/src/commands/onboard/service-names.ts +47 -0
  72. package/src/commands/onboard/steps/core-credentials.tsx +111 -0
  73. package/src/commands/onboard/steps/custom-templates.tsx +168 -0
  74. package/src/commands/onboard/steps/generate.tsx +154 -0
  75. package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
  76. package/src/commands/onboard/steps/harness.tsx +21 -0
  77. package/src/commands/onboard/steps/health-check.tsx +171 -0
  78. package/src/commands/onboard/steps/integration-github.tsx +105 -0
  79. package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
  80. package/src/commands/onboard/steps/integration-menu.tsx +58 -0
  81. package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
  82. package/src/commands/onboard/steps/integration-slack.tsx +165 -0
  83. package/src/commands/onboard/steps/post-connect.tsx +145 -0
  84. package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
  85. package/src/commands/onboard/steps/post-task.tsx +103 -0
  86. package/src/commands/onboard/steps/prereq-check.tsx +178 -0
  87. package/src/commands/onboard/steps/review.tsx +82 -0
  88. package/src/commands/onboard/steps/start.tsx +97 -0
  89. package/src/commands/onboard/templates.ts +34 -0
  90. package/src/commands/onboard/types.ts +259 -0
  91. package/src/commands/onboard.tsx +425 -0
  92. package/src/commands/runner.ts +1540 -630
  93. package/src/commands/setup.tsx +23 -38
  94. package/src/commands/shared/client-config.ts +41 -0
  95. package/src/commands/templates.ts +172 -0
  96. package/src/github/app.ts +8 -0
  97. package/src/github/handlers.ts +384 -151
  98. package/src/github/index.ts +1 -0
  99. package/src/github/mentions-aliases.test.ts +73 -0
  100. package/src/github/mentions.test.ts +3 -3
  101. package/src/github/mentions.ts +32 -6
  102. package/src/github/templates.ts +398 -0
  103. package/src/github/types.ts +1 -0
  104. package/src/gitlab/auth.ts +63 -0
  105. package/src/gitlab/handlers.ts +368 -0
  106. package/src/gitlab/index.ts +19 -0
  107. package/src/gitlab/reactions.ts +104 -0
  108. package/src/gitlab/templates.ts +140 -0
  109. package/src/gitlab/types.ts +130 -0
  110. package/src/heartbeat/heartbeat.ts +434 -0
  111. package/src/heartbeat/index.ts +1 -0
  112. package/src/heartbeat/templates.ts +30 -0
  113. package/src/hooks/hook.ts +555 -4
  114. package/src/hooks/tool-loop-detection.test.ts +158 -0
  115. package/src/hooks/tool-loop-detection.ts +167 -0
  116. package/src/http/active-sessions.ts +199 -0
  117. package/src/http/agents.ts +328 -0
  118. package/src/http/config.ts +191 -0
  119. package/src/http/core.ts +309 -0
  120. package/src/http/db-query.ts +91 -0
  121. package/src/http/ecosystem.ts +63 -0
  122. package/src/http/epics.ts +460 -0
  123. package/src/http/index.ts +216 -0
  124. package/src/http/mcp.ts +77 -0
  125. package/src/http/memory.ts +168 -0
  126. package/src/http/openapi.ts +109 -0
  127. package/src/http/poll.ts +299 -0
  128. package/src/http/prompt-templates.ts +412 -0
  129. package/src/http/repos.ts +195 -0
  130. package/src/http/route-def.ts +123 -0
  131. package/src/http/schedules.ts +426 -0
  132. package/src/http/session-data.ts +241 -0
  133. package/src/http/stats.ts +174 -0
  134. package/src/http/tasks.ts +468 -0
  135. package/src/http/trackers/index.ts +10 -0
  136. package/src/http/trackers/linear.ts +187 -0
  137. package/src/http/types.ts +12 -0
  138. package/src/http/utils.ts +87 -0
  139. package/src/http/webhooks.ts +432 -0
  140. package/src/http/workflows.ts +530 -0
  141. package/src/http.ts +1 -1890
  142. package/src/linear/README.md +65 -0
  143. package/src/linear/app.ts +48 -0
  144. package/src/linear/client.ts +18 -0
  145. package/src/linear/index.ts +1 -0
  146. package/src/linear/oauth.ts +35 -0
  147. package/src/linear/outbound.ts +212 -0
  148. package/src/linear/sync.ts +567 -0
  149. package/src/linear/templates.ts +47 -0
  150. package/src/linear/types.ts +7 -0
  151. package/src/linear/webhook.ts +104 -0
  152. package/src/oauth/README.md +66 -0
  153. package/src/oauth/index.ts +6 -0
  154. package/src/oauth/wrapper.ts +204 -0
  155. package/src/prompts/base-prompt.ts +150 -265
  156. package/src/prompts/defaults.ts +196 -0
  157. package/src/prompts/registry.ts +57 -0
  158. package/src/prompts/resolver.ts +296 -0
  159. package/src/prompts/session-templates.ts +604 -0
  160. package/src/providers/claude-adapter.ts +442 -0
  161. package/src/providers/index.ts +24 -0
  162. package/src/providers/pi-mono-adapter.ts +442 -0
  163. package/src/providers/pi-mono-extension.ts +624 -0
  164. package/src/providers/pi-mono-mcp-client.ts +124 -0
  165. package/src/providers/types.ts +75 -0
  166. package/src/scheduler/scheduler.test.ts +2 -0
  167. package/src/scheduler/scheduler.ts +231 -40
  168. package/src/server.ts +97 -6
  169. package/src/slack/HEURISTICS.md +105 -0
  170. package/src/slack/actions.ts +133 -0
  171. package/src/slack/app.ts +7 -0
  172. package/src/slack/assistant.ts +118 -0
  173. package/src/slack/blocks.ts +233 -0
  174. package/src/slack/channel-activity.ts +177 -0
  175. package/src/slack/commands.ts +31 -17
  176. package/src/slack/files.ts +1 -1
  177. package/src/slack/handlers.test.ts +114 -1
  178. package/src/slack/handlers.ts +230 -55
  179. package/src/slack/responses.ts +120 -67
  180. package/src/slack/router.ts +17 -99
  181. package/src/slack/templates.ts +55 -0
  182. package/src/slack/thread-buffer.ts +213 -0
  183. package/src/slack/watcher.ts +119 -4
  184. package/src/tests/agent-activity.test.ts +247 -0
  185. package/src/tests/agentmail-filters.test.ts +97 -0
  186. package/src/tests/artifact-sdk.test.ts +800 -0
  187. package/src/tests/base-prompt.test.ts +264 -0
  188. package/src/tests/build-pi-skills.test.ts +127 -0
  189. package/src/tests/channel-activity.test.ts +363 -0
  190. package/src/tests/claude-adapter.test.ts +126 -0
  191. package/src/tests/context-versioning.test.ts +425 -0
  192. package/src/tests/db-queries-oauth.test.ts +197 -0
  193. package/src/tests/db-queries-tracker.test.ts +230 -0
  194. package/src/tests/epics.test.ts +3 -3
  195. package/src/tests/error-tracker.test.ts +368 -0
  196. package/src/tests/fetch-resolved-env.test.ts +167 -0
  197. package/src/tests/generate-default-claude-md.test.ts +9 -1
  198. package/src/tests/generate-identity-templates.test.ts +124 -0
  199. package/src/tests/gitlab-auth.test.ts +109 -0
  200. package/src/tests/gitlab-handlers.test.ts +691 -0
  201. package/src/tests/gitlab-vcs-db.test.ts +177 -0
  202. package/src/tests/heartbeat.test.ts +364 -0
  203. package/src/tests/http-api-integration.test.ts +1698 -0
  204. package/src/tests/linear-outbound-sync.test.ts +200 -0
  205. package/src/tests/linear-webhook.test.ts +406 -0
  206. package/src/tests/match-route.test.ts +187 -0
  207. package/src/tests/memory.test.ts +737 -0
  208. package/src/tests/migration-runner-regressions.test.ts +86 -0
  209. package/src/tests/model-control.test.ts +338 -0
  210. package/src/tests/oauth-wrapper.test.ts +147 -0
  211. package/src/tests/onboard-compose.test.ts +138 -0
  212. package/src/tests/onboard-env.test.ts +174 -0
  213. package/src/tests/onboard-manifest.test.ts +137 -0
  214. package/src/tests/pi-mono-adapter.test.ts +234 -0
  215. package/src/tests/pool-session-logs.test.ts +199 -0
  216. package/src/tests/progress-dedup.test.ts +98 -0
  217. package/src/tests/prompt-template-github.test.ts +682 -0
  218. package/src/tests/prompt-template-remaining.test.ts +504 -0
  219. package/src/tests/prompt-template-resolver.test.ts +621 -0
  220. package/src/tests/prompt-template-session.test.ts +363 -0
  221. package/src/tests/prompt-templates-db.test.ts +616 -0
  222. package/src/tests/provider-adapter.test.ts +122 -0
  223. package/src/tests/provider-command-format.test.ts +98 -0
  224. package/src/tests/reload-config.test.ts +170 -0
  225. package/src/tests/runner-polling-api.test.ts +25 -20
  226. package/src/tests/scheduled-tasks.test.ts +104 -0
  227. package/src/tests/scheduler-backoff.test.ts +166 -0
  228. package/src/tests/self-improvement.test.ts +541 -0
  229. package/src/tests/session-attach.test.ts +536 -0
  230. package/src/tests/session-costs.test.ts +267 -1
  231. package/src/tests/slack-actions.test.ts +133 -0
  232. package/src/tests/slack-assistant.test.ts +136 -0
  233. package/src/tests/slack-blocks.test.ts +246 -0
  234. package/src/tests/slack-metadata-inheritance.test.ts +243 -0
  235. package/src/tests/slack-queue-offline.test.ts +174 -0
  236. package/src/tests/slack-router.test.ts +181 -0
  237. package/src/tests/slack-thread-buffer.test.ts +305 -0
  238. package/src/tests/slack-thread-followups.test.ts +298 -0
  239. package/src/tests/slack-watcher.test.ts +101 -0
  240. package/src/tests/structured-output.test.ts +307 -0
  241. package/src/tests/swarm-repos.test.ts +198 -0
  242. package/src/tests/task-cancellation.test.ts +6 -4
  243. package/src/tests/task-working-dir.test.ts +176 -0
  244. package/src/tests/template-fetch.test.ts +490 -0
  245. package/src/tests/tool-annotations.test.ts +371 -0
  246. package/src/tests/tracker-tools.test.ts +184 -0
  247. package/src/tests/update-profile-agentid.test.ts +248 -0
  248. package/src/tests/update-profile-api.test.ts +143 -3
  249. package/src/tests/update-profile-auth.test.ts +195 -0
  250. package/src/tests/validation-adapters.test.ts +86 -0
  251. package/src/tests/vcs-provider.test.ts +27 -0
  252. package/src/tests/workflow-agent-task.test.ts +196 -0
  253. package/src/tests/workflow-async-v2.test.ts +508 -0
  254. package/src/tests/workflow-convergence.test.ts +541 -0
  255. package/src/tests/workflow-definition-validation.test.ts +366 -0
  256. package/src/tests/workflow-engine-v2.test.ts +691 -0
  257. package/src/tests/workflow-executors.test.ts +736 -0
  258. package/src/tests/workflow-http-v2.test.ts +599 -0
  259. package/src/tests/workflow-integration-io.test.ts +902 -0
  260. package/src/tests/workflow-io-schemas.test.ts +624 -0
  261. package/src/tests/workflow-registry.test.ts +592 -0
  262. package/src/tests/workflow-retry-v2.test.ts +401 -0
  263. package/src/tests/workflow-retry-validation.test.ts +282 -0
  264. package/src/tests/workflow-schedule-trigger.test.ts +104 -0
  265. package/src/tests/workflow-template.test.ts +288 -0
  266. package/src/tests/workflow-trigger-schema.test.ts +359 -0
  267. package/src/tests/workflow-triggers-v2.test.ts +264 -0
  268. package/src/tests/workflow-versions.test.ts +208 -0
  269. package/src/tests/workflow-workspace.test.ts +272 -0
  270. package/src/tests/x402-client.test.ts +117 -0
  271. package/src/tests/x402-config.test.ts +182 -0
  272. package/src/tests/x402-spending-tracker.test.ts +185 -0
  273. package/src/tools/cancel-task.ts +2 -0
  274. package/src/tools/context-diff.ts +171 -0
  275. package/src/tools/context-history.ts +138 -0
  276. package/src/tools/create-channel.ts +1 -0
  277. package/src/tools/db-query.ts +78 -0
  278. package/src/tools/delete-channel.ts +132 -0
  279. package/src/tools/epics/assign-task-to-epic.ts +1 -0
  280. package/src/tools/epics/create-epic.ts +3 -2
  281. package/src/tools/epics/delete-epic.ts +2 -0
  282. package/src/tools/epics/get-epic-details.ts +2 -0
  283. package/src/tools/epics/list-epics.ts +2 -0
  284. package/src/tools/epics/unassign-task-from-epic.ts +1 -0
  285. package/src/tools/epics/update-epic.ts +7 -4
  286. package/src/tools/get-swarm.ts +2 -0
  287. package/src/tools/get-task-details.ts +2 -0
  288. package/src/tools/get-tasks.ts +27 -1
  289. package/src/tools/inject-learning.ts +106 -0
  290. package/src/tools/join-swarm.ts +17 -7
  291. package/src/tools/list-channels.ts +2 -0
  292. package/src/tools/list-services.ts +2 -0
  293. package/src/tools/memory-get.ts +56 -0
  294. package/src/tools/memory-search.ts +131 -0
  295. package/src/tools/my-agent-info.ts +2 -0
  296. package/src/tools/poll-task.ts +2 -20
  297. package/src/tools/post-message.ts +1 -0
  298. package/src/tools/prompt-templates/delete.ts +86 -0
  299. package/src/tools/prompt-templates/get.ts +89 -0
  300. package/src/tools/prompt-templates/index.ts +5 -0
  301. package/src/tools/prompt-templates/list.ts +95 -0
  302. package/src/tools/prompt-templates/preview.ts +84 -0
  303. package/src/tools/prompt-templates/set.ts +117 -0
  304. package/src/tools/read-messages.ts +2 -0
  305. package/src/tools/register-agentmail-inbox.ts +166 -0
  306. package/src/tools/register-service.ts +2 -0
  307. package/src/tools/schedules/create-schedule.ts +134 -24
  308. package/src/tools/schedules/delete-schedule.ts +2 -0
  309. package/src/tools/schedules/list-schedules.ts +20 -4
  310. package/src/tools/schedules/run-schedule-now.ts +1 -0
  311. package/src/tools/schedules/update-schedule.ts +49 -17
  312. package/src/tools/send-task.ts +132 -10
  313. package/src/tools/slack-download-file.ts +4 -2
  314. package/src/tools/slack-list-channels.ts +2 -0
  315. package/src/tools/slack-post.ts +2 -0
  316. package/src/tools/slack-read.ts +2 -0
  317. package/src/tools/slack-reply.ts +2 -0
  318. package/src/tools/slack-upload-file.ts +2 -0
  319. package/src/tools/store-progress.ts +205 -4
  320. package/src/tools/swarm-config/delete-config.ts +87 -0
  321. package/src/tools/swarm-config/get-config.ts +108 -0
  322. package/src/tools/swarm-config/index.ts +4 -0
  323. package/src/tools/swarm-config/list-config.ts +99 -0
  324. package/src/tools/swarm-config/set-config.ts +118 -0
  325. package/src/tools/task-action.ts +50 -5
  326. package/src/tools/task-dedup.ts +97 -0
  327. package/src/tools/templates.ts +53 -0
  328. package/src/tools/tool-config.ts +124 -0
  329. package/src/tools/tracker/index.ts +6 -0
  330. package/src/tools/tracker/tracker-link-epic.ts +64 -0
  331. package/src/tools/tracker/tracker-link-task.ts +64 -0
  332. package/src/tools/tracker/tracker-map-agent.ts +57 -0
  333. package/src/tools/tracker/tracker-status.ts +56 -0
  334. package/src/tools/tracker/tracker-sync-status.ts +42 -0
  335. package/src/tools/tracker/tracker-unlink.ts +41 -0
  336. package/src/tools/unregister-service.ts +2 -0
  337. package/src/tools/update-profile.ts +172 -17
  338. package/src/tools/update-service-status.ts +2 -0
  339. package/src/tools/utils.ts +10 -1
  340. package/src/tools/workflows/create-workflow.ts +129 -0
  341. package/src/tools/workflows/delete-workflow.ts +42 -0
  342. package/src/tools/workflows/get-workflow-run.ts +59 -0
  343. package/src/tools/workflows/get-workflow.ts +53 -0
  344. package/src/tools/workflows/index.ts +9 -0
  345. package/src/tools/workflows/list-workflow-runs.ts +48 -0
  346. package/src/tools/workflows/list-workflows.ts +42 -0
  347. package/src/tools/workflows/retry-workflow-run.ts +40 -0
  348. package/src/tools/workflows/trigger-workflow.ts +96 -0
  349. package/src/tools/workflows/update-workflow.ts +133 -0
  350. package/src/tracker/types.ts +51 -0
  351. package/src/types.ts +530 -14
  352. package/src/utils/credentials.test.ts +156 -0
  353. package/src/utils/credentials.ts +50 -0
  354. package/src/utils/error-tracker.ts +190 -0
  355. package/src/vcs/index.ts +15 -0
  356. package/src/vcs/types.ts +5 -0
  357. package/src/workflows/checkpoint.ts +121 -0
  358. package/src/workflows/cooldown.ts +28 -0
  359. package/src/workflows/definition.ts +235 -0
  360. package/src/workflows/engine.ts +580 -0
  361. package/src/workflows/event-bus.ts +29 -0
  362. package/src/workflows/executors/agent-task.ts +103 -0
  363. package/src/workflows/executors/base.ts +86 -0
  364. package/src/workflows/executors/code-match.ts +88 -0
  365. package/src/workflows/executors/index.ts +16 -0
  366. package/src/workflows/executors/notify.ts +93 -0
  367. package/src/workflows/executors/property-match.ts +104 -0
  368. package/src/workflows/executors/raw-llm.ts +83 -0
  369. package/src/workflows/executors/registry.ts +76 -0
  370. package/src/workflows/executors/script.ts +103 -0
  371. package/src/workflows/executors/validate.ts +215 -0
  372. package/src/workflows/executors/vcs.ts +58 -0
  373. package/src/workflows/index.ts +61 -0
  374. package/src/workflows/input.ts +46 -0
  375. package/src/workflows/json-schema-validator.ts +118 -0
  376. package/src/workflows/recovery.ts +139 -0
  377. package/src/workflows/resume.ts +229 -0
  378. package/src/workflows/retry-poller.ts +216 -0
  379. package/src/workflows/template.ts +74 -0
  380. package/src/workflows/templates.ts +86 -0
  381. package/src/workflows/triggers.ts +124 -0
  382. package/src/workflows/validation.ts +104 -0
  383. package/src/workflows/version.ts +44 -0
  384. package/src/x402/cli.ts +140 -0
  385. package/src/x402/client.ts +192 -0
  386. package/src/x402/config.ts +131 -0
  387. package/src/x402/index.ts +37 -0
  388. package/src/x402/openfort-signer.ts +83 -0
  389. package/src/x402/spending-tracker.ts +109 -0
  390. package/templates/official/coder/CLAUDE.md +49 -0
  391. package/templates/official/coder/IDENTITY.md +28 -0
  392. package/templates/official/coder/SOUL.md +43 -0
  393. package/templates/official/coder/TOOLS.md +40 -0
  394. package/templates/official/coder/config.json +23 -0
  395. package/templates/official/coder/start-up.sh +23 -0
  396. package/templates/official/content-reviewer/CLAUDE.md +68 -0
  397. package/templates/official/content-reviewer/IDENTITY.md +28 -0
  398. package/templates/official/content-reviewer/SOUL.md +44 -0
  399. package/templates/official/content-reviewer/TOOLS.md +37 -0
  400. package/templates/official/content-reviewer/config.json +23 -0
  401. package/templates/official/content-reviewer/start-up.sh +23 -0
  402. package/templates/official/content-strategist/CLAUDE.md +63 -0
  403. package/templates/official/content-strategist/IDENTITY.md +33 -0
  404. package/templates/official/content-strategist/SOUL.md +48 -0
  405. package/templates/official/content-strategist/TOOLS.md +47 -0
  406. package/templates/official/content-strategist/config.json +23 -0
  407. package/templates/official/content-strategist/start-up.sh +23 -0
  408. package/templates/official/content-writer/CLAUDE.md +72 -0
  409. package/templates/official/content-writer/IDENTITY.md +30 -0
  410. package/templates/official/content-writer/SOUL.md +46 -0
  411. package/templates/official/content-writer/TOOLS.md +44 -0
  412. package/templates/official/content-writer/config.json +23 -0
  413. package/templates/official/content-writer/start-up.sh +23 -0
  414. package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
  415. package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
  416. package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
  417. package/templates/official/forward-deployed-engineer/config.json +21 -0
  418. package/templates/official/lead/CLAUDE.md +33 -0
  419. package/templates/official/lead/IDENTITY.md +36 -0
  420. package/templates/official/lead/SOUL.md +51 -0
  421. package/templates/official/lead/config.json +22 -0
  422. package/templates/official/researcher/CLAUDE.md +46 -0
  423. package/templates/official/researcher/IDENTITY.md +28 -0
  424. package/templates/official/researcher/SOUL.md +43 -0
  425. package/templates/official/researcher/config.json +21 -0
  426. package/templates/official/reviewer/CLAUDE.md +63 -0
  427. package/templates/official/reviewer/IDENTITY.md +28 -0
  428. package/templates/official/reviewer/SOUL.md +45 -0
  429. package/templates/official/reviewer/config.json +21 -0
  430. package/templates/official/tester/CLAUDE.md +53 -0
  431. package/templates/official/tester/IDENTITY.md +28 -0
  432. package/templates/official/tester/SOUL.md +55 -0
  433. package/templates/official/tester/config.json +21 -0
  434. package/templates/schema.ts +35 -0
  435. package/.claude/settings.local.json +0 -115
  436. package/.dockerignore +0 -61
  437. package/.editorconfig +0 -15
  438. package/.env.docker.example +0 -39
  439. package/.env.example +0 -40
  440. package/.github/workflows/ci.yml +0 -76
  441. package/.github/workflows/docker-and-deploy.yml +0 -117
  442. package/.wts-config.json +0 -4
  443. package/.wts-setup.ts +0 -102
  444. package/CLAUDE.md +0 -104
  445. package/CONTRIBUTING.md +0 -270
  446. package/DEPLOYMENT.md +0 -605
  447. package/Dockerfile +0 -57
  448. package/Dockerfile.worker +0 -157
  449. package/FAQ.md +0 -19
  450. package/MCP.md +0 -406
  451. package/UI.md +0 -40
  452. package/assets/agent-swarm-logo-orange.png +0 -0
  453. package/assets/agent-swarm-logo.png +0 -0
  454. package/assets/agent-swarm.mp4 +0 -0
  455. package/assets/agent-swarm.png +0 -0
  456. package/biome.json +0 -39
  457. package/deploy/DEPLOY.md +0 -60
  458. package/deploy/agent-swarm.service +0 -17
  459. package/deploy/docker-push.ts +0 -30
  460. package/deploy/install.ts +0 -85
  461. package/deploy/prod-db.ts +0 -42
  462. package/deploy/uninstall.ts +0 -12
  463. package/deploy/update.ts +0 -21
  464. package/docker-compose.example.yml +0 -159
  465. package/docker-entrypoint.sh +0 -352
  466. package/ecosystem.config.cjs +0 -66
  467. package/plugin/README.md +0 -1
  468. package/plugin/hooks/hooks.json +0 -71
  469. package/pyproject.toml +0 -9
  470. package/scripts/generate-mcp-docs.ts +0 -415
  471. package/slack-manifest.json +0 -71
  472. package/src/tests/get-inbox-message.test.ts +0 -145
  473. package/src/tools/get-inbox-message.ts +0 -89
  474. package/src/tools/inbox-delegate.ts +0 -113
  475. package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
  476. package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
  477. package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
  478. package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
  479. package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
  480. package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
  481. package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
  482. package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
  483. package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
  484. package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
  485. package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
  486. package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
  487. package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
  488. package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
  489. package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
  490. package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
  491. package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
  492. package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
  493. package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
  494. package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
  495. package/thoughts/shared/research/.gitkeep +0 -0
  496. package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
  497. package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
  498. package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
  499. package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
  500. package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
  501. package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
  502. package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
  503. package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
  504. package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
  505. package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
  506. package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
  507. package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
  508. package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
  509. package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
  510. package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
  511. package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
  512. package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
  513. package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
  514. package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
  515. package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
  516. package/tsconfig.json +0 -37
  517. package/ui/CLAUDE.md +0 -49
  518. package/ui/bun.lock +0 -771
  519. package/ui/index.html +0 -22
  520. package/ui/package-lock.json +0 -5290
  521. package/ui/package.json +0 -33
  522. package/ui/pnpm-lock.yaml +0 -3341
  523. package/ui/postcss.config.js +0 -6
  524. package/ui/public/logo.png +0 -0
  525. package/ui/src/App.tsx +0 -63
  526. package/ui/src/components/ActivityFeed.tsx +0 -440
  527. package/ui/src/components/AgentDetailPanel.tsx +0 -733
  528. package/ui/src/components/AgentsPanel.tsx +0 -815
  529. package/ui/src/components/ChatPanel.tsx +0 -1920
  530. package/ui/src/components/ConfigModal.tsx +0 -253
  531. package/ui/src/components/Dashboard.tsx +0 -832
  532. package/ui/src/components/EditAgentProfileModal.tsx +0 -433
  533. package/ui/src/components/EpicDetailPage.tsx +0 -741
  534. package/ui/src/components/EpicsPanel.tsx +0 -566
  535. package/ui/src/components/Header.tsx +0 -160
  536. package/ui/src/components/JsonViewer.tsx +0 -171
  537. package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
  538. package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
  539. package/ui/src/components/ServicesPanel.tsx +0 -622
  540. package/ui/src/components/SessionLogPanel.tsx +0 -1219
  541. package/ui/src/components/StatsBar.tsx +0 -321
  542. package/ui/src/components/StatusBadge.tsx +0 -168
  543. package/ui/src/components/TaskDetailPanel.tsx +0 -903
  544. package/ui/src/components/TasksPanel.tsx +0 -614
  545. package/ui/src/components/UsageCharts.tsx +0 -216
  546. package/ui/src/components/UsageTab.tsx +0 -394
  547. package/ui/src/hooks/queries.ts +0 -353
  548. package/ui/src/hooks/useAutoScroll.ts +0 -83
  549. package/ui/src/index.css +0 -257
  550. package/ui/src/lib/api.ts +0 -268
  551. package/ui/src/lib/config.ts +0 -35
  552. package/ui/src/lib/contentPreview.ts +0 -208
  553. package/ui/src/lib/theme.ts +0 -214
  554. package/ui/src/lib/utils.ts +0 -88
  555. package/ui/src/main.tsx +0 -28
  556. package/ui/src/types/api.ts +0 -323
  557. package/ui/src/vite-env.d.ts +0 -1
  558. package/ui/tailwind.config.js +0 -37
  559. package/ui/tsconfig.json +0 -31
  560. package/ui/vite.config.ts +0 -35
  561. /package/{thoughts/shared/plans → templates/community}/.gitkeep +0 -0
@@ -1,437 +0,0 @@
1
- ---
2
- date: 2026-01-16T17:05:00Z
3
- researcher: Claude (Researcher Agent)
4
- git_commit: c64aca6d034d3b1376fc2d17f813fee5e0d7122d
5
- branch: main
6
- repository: desplega-ai/agent-swarm
7
- topic: "Epics Feature for Agent Swarm - Codebase Analysis"
8
- tags: [research, codebase, epics, task-management, project-organization]
9
- status: complete
10
- autonomy: autopilot
11
- last_updated: 2026-01-16
12
- last_updated_by: Claude (Researcher Agent)
13
- ---
14
-
15
- # Research: Epics Feature for Agent Swarm
16
-
17
- **Date**: 2026-01-16T17:05:00Z
18
- **Researcher**: Claude (Researcher Agent)
19
- **Git Commit**: c64aca6d034d3b1376fc2d17f813fee5e0d7122d
20
- **Branch**: main
21
-
22
- ## Research Question
23
-
24
- How should an "epics" feature be implemented in the agent-swarm codebase? An epic would represent a project-level concept containing:
25
- - A goal
26
- - A PRD (Product Requirements Document)
27
- - A plan
28
- - Tasks assigned to it (either statically or dynamically as it progresses)
29
-
30
- The feature should integrate with existing `/desplega:research`, `/desplega:create-plan`, and `/desplega:implement-plan` commands.
31
-
32
- ## Summary
33
-
34
- The agent-swarm codebase provides a solid foundation for implementing epics through its existing task management architecture, scheduled tasks pattern (which demonstrates a "template that spawns tasks" model), and MCP tool registration system. The key implementation path involves:
35
-
36
- 1. Creating a new `epics` database table with fields for goal, PRD, plan, status, and timestamps
37
- 2. Adding an `epicId` foreign key to the existing `agent_tasks` table
38
- 3. Implementing new MCP tools following the established `createToolRegistrar` pattern
39
- 4. Adding HTTP REST endpoints following existing patterns in `http.ts`
40
- 5. Optionally integrating with the scheduler system for progress-triggered task creation
41
-
42
- ---
43
-
44
- ## Detailed Findings
45
-
46
- ### 1. Current Task Management Architecture
47
-
48
- #### Task Table Structure (`src/be/db.ts:59-85`)
49
-
50
- The `agent_tasks` table is the core entity for task management:
51
-
52
- | Column | Type | Purpose |
53
- |--------|------|---------|
54
- | `id` | TEXT (UUID) | Primary key |
55
- | `agentId` | TEXT | Assigned agent (nullable for unassigned) |
56
- | `creatorAgentId` | TEXT | Task creator |
57
- | `task` | TEXT | Task description |
58
- | `status` | TEXT | Status enum (9 values) |
59
- | `source` | TEXT | Origin (mcp, slack, api, github) |
60
- | `taskType` | TEXT | Classification |
61
- | `tags` | TEXT (JSON array) | Filtering tags |
62
- | `priority` | INTEGER | 0-100 scale |
63
- | `dependsOn` | TEXT (JSON array) | Dependency task IDs |
64
- | Various timestamps | TEXT | createdAt, lastUpdatedAt, finishedAt |
65
- | Slack metadata | TEXT fields | slackChannelId, slackThreadTs, slackUserId |
66
- | GitHub metadata | TEXT fields | githubRepo, githubNumber, etc. |
67
-
68
- **Task Statuses** (`src/types.ts:4-14`):
69
- - `unassigned` - In task pool
70
- - `offered` - Awaiting agent acceptance
71
- - `reviewing` - Agent reviewing offered task
72
- - `pending` - Assigned, waiting to start
73
- - `in_progress` - Actively being worked
74
- - `paused` - Interrupted, can resume
75
- - `completed` - Successfully finished
76
- - `failed` - Failed with reason
77
- - `cancelled` - Cancelled by lead/creator
78
-
79
- #### Key Task Functions (`src/be/db.ts`)
80
-
81
- | Function | Lines | Purpose |
82
- |----------|-------|---------|
83
- | `createTaskExtended()` | 1634-1694 | Create task with full options |
84
- | `getTaskById()` | 946-949 | Fetch single task |
85
- | `getAllTasks()` | 989-1050 | Query with filters |
86
- | `startTask()` | 924-944 | Set to in_progress |
87
- | `completeTask()` | 1269-1292 | Mark completed |
88
- | `failTask()` | 1294-1311 | Mark failed |
89
- | `cancelTask()` | 1313-1340 | Cancel task |
90
- | `updateTaskProgress()` | 1456-1469 | Update progress field |
91
- | `checkDependencies()` | 1888-1906 | Verify all deps completed |
92
-
93
- ### 2. Database Schema and Models
94
-
95
- #### Technology Stack
96
- - **Database**: SQLite via `bun:sqlite`
97
- - **ORM**: None - raw SQL queries with prepared statements
98
- - **Type Validation**: Zod schemas in `src/types.ts`
99
- - **Migrations**: Inline in `db.ts` using `ALTER TABLE IF NOT EXISTS` pattern
100
-
101
- #### Schema Pattern (`src/be/db.ts:36-285`)
102
-
103
- Tables are created within a transaction at database initialization:
104
-
105
- ```typescript
106
- database.run("PRAGMA journal_mode = WAL;");
107
- database.run("PRAGMA foreign_keys = ON;");
108
-
109
- database.exec("BEGIN TRANSACTION");
110
- try {
111
- // CREATE TABLE IF NOT EXISTS statements
112
- database.exec("COMMIT");
113
- } catch (e) {
114
- database.exec("ROLLBACK");
115
- }
116
- ```
117
-
118
- #### Existing Tables
119
-
120
- | Table | Purpose |
121
- |-------|---------|
122
- | `agents` | Agent registration and status |
123
- | `agent_tasks` | Task assignments |
124
- | `agent_log` | Event logging |
125
- | `channels` | Inter-agent communication |
126
- | `channel_messages` | Messages within channels |
127
- | `channel_read_state` | Read tracking |
128
- | `services` | PM2 service registry |
129
- | `session_logs` | CLI output logging |
130
- | `session_costs` | Usage tracking |
131
- | `inbox_messages` | Lead inbox |
132
- | `scheduled_tasks` | Recurring task templates |
133
-
134
- #### Zod Schema Pattern (`src/types.ts`)
135
-
136
- ```typescript
137
- export const AgentTaskSchema = z.object({
138
- id: z.uuid(),
139
- agentId: z.uuid().nullable(),
140
- task: z.string().min(1),
141
- status: AgentTaskStatusSchema,
142
- // ... other fields
143
- });
144
-
145
- export type AgentTask = z.infer<typeof AgentTaskSchema>;
146
- ```
147
-
148
- ### 3. MCP Tool Definitions
149
-
150
- #### Tool Registration Pattern (`src/tools/utils.ts:86-115`)
151
-
152
- All tools use the `createToolRegistrar` factory:
153
-
154
- ```typescript
155
- export const registerSomeTools = (server: McpServer) => {
156
- createToolRegistrar(server)(
157
- "tool-name",
158
- {
159
- title: "Tool Title",
160
- description: "Tool description for LLM.",
161
- inputSchema: z.object({
162
- param1: z.string().describe("Param description"),
163
- param2: z.number().optional(),
164
- }),
165
- outputSchema: z.object({
166
- success: z.boolean(),
167
- message: z.string(),
168
- data: SomeSchema.optional(),
169
- }),
170
- },
171
- async (args, requestInfo, meta) => {
172
- // Handler receives validated args + requestInfo.agentId
173
- return {
174
- content: [{ type: "text", text: result.message }],
175
- structuredContent: result,
176
- };
177
- },
178
- );
179
- };
180
- ```
181
-
182
- #### Request Context Injection (`src/tools/utils.ts:18-38`)
183
-
184
- The `X-Agent-ID` header is extracted and passed to handlers:
185
-
186
- ```typescript
187
- export type RequestInfo = {
188
- sessionId: string | undefined;
189
- agentId: string | undefined;
190
- };
191
-
192
- export const getRequestInfo = (req: Meta): RequestInfo => {
193
- const agentIdHeader = req.requestInfo?.headers?.["x-agent-id"];
194
- // ... extraction logic
195
- };
196
- ```
197
-
198
- #### Existing Task Tools
199
-
200
- | Tool | File | Purpose |
201
- |------|------|---------|
202
- | `send-task` | `src/tools/send-task.ts` | Create task (assign, offer, or pool) |
203
- | `get-tasks` | `src/tools/get-tasks.ts` | List tasks with filters |
204
- | `get-task-details` | `src/tools/get-task-details.ts` | Fetch task + logs |
205
- | `task-action` | `src/tools/task-action.ts` | Claim, release, accept, reject |
206
- | `poll-task` | `src/tools/poll-task.ts` | Get next task for agent |
207
- | `store-progress` | `src/tools/store-progress.ts` | Update progress, complete, fail |
208
- | `cancel-task` | `src/tools/cancel-task.ts` | Cancel task |
209
-
210
- #### Tool Registration in Server (`src/server.ts:77-128`)
211
-
212
- Tools are registered conditionally based on capabilities:
213
-
214
- ```typescript
215
- // Core tools - always registered
216
- registerJoinSwarmTool(server);
217
- registerSendTaskTool(server);
218
- // ...
219
-
220
- // Capability-gated tools
221
- if (hasCapability("scheduling")) {
222
- registerCreateScheduleTool(server);
223
- // ...
224
- }
225
- ```
226
-
227
- ### 4. HTTP REST API Pattern
228
-
229
- #### Endpoint Definition (`src/http.ts`)
230
-
231
- Routes are matched using path segment arrays:
232
-
233
- ```typescript
234
- const pathSegments = getPathSegments(req.url || "");
235
-
236
- // GET /api/tasks
237
- if (req.method === "GET" && pathSegments[0] === "api" && pathSegments[1] === "tasks" && !pathSegments[2]) {
238
- const tasks = getAllTasks(filters);
239
- res.writeHead(200, { "Content-Type": "application/json" });
240
- res.end(JSON.stringify({ tasks, total }));
241
- return;
242
- }
243
- ```
244
-
245
- #### Response Patterns
246
-
247
- **List endpoints**: `{ items: [], total: number }`
248
- **Single resource**: Direct object
249
- **Actions**: `{ success: boolean, message: string, entity?: object }`
250
- **Errors**: `{ error: "Error message" }`
251
-
252
- #### Authentication
253
-
254
- - API Key via `Authorization: Bearer <key>` header
255
- - Agent ID via `X-Agent-ID` header for agent-specific operations
256
-
257
- ### 5. Scheduled Tasks - Closest Existing Pattern
258
-
259
- The `scheduled_tasks` feature demonstrates a "template that spawns tasks" pattern:
260
-
261
- #### Schema (`src/be/db.ts:255-275`)
262
-
263
- ```sql
264
- CREATE TABLE IF NOT EXISTS scheduled_tasks (
265
- id TEXT PRIMARY KEY,
266
- name TEXT NOT NULL UNIQUE,
267
- description TEXT,
268
- cronExpression TEXT,
269
- intervalMs INTEGER,
270
- taskTemplate TEXT NOT NULL, -- Template for spawned tasks
271
- taskType TEXT,
272
- tags TEXT DEFAULT '[]',
273
- priority INTEGER DEFAULT 50,
274
- targetAgentId TEXT, -- Route to specific agent
275
- enabled INTEGER DEFAULT 1,
276
- lastRunAt TEXT,
277
- nextRunAt TEXT,
278
- createdByAgentId TEXT,
279
- timezone TEXT DEFAULT 'UTC',
280
- createdAt TEXT NOT NULL,
281
- lastUpdatedAt TEXT NOT NULL
282
- )
283
- ```
284
-
285
- #### Task Creation from Template (`src/scheduler/scheduler.ts:44-67`)
286
-
287
- ```typescript
288
- async function executeSchedule(schedule: ScheduledTask): Promise<void> {
289
- const tx = getDb().transaction(() => {
290
- createTaskExtended(schedule.taskTemplate, {
291
- creatorAgentId: schedule.createdByAgentId,
292
- taskType: schedule.taskType,
293
- tags: [...schedule.tags, "scheduled", `schedule:${schedule.name}`],
294
- priority: schedule.priority,
295
- agentId: schedule.targetAgentId,
296
- });
297
- // ... update nextRunAt
298
- });
299
- tx();
300
- }
301
- ```
302
-
303
- **Key pattern**: Tags are used for traceability (`schedule:{name}`)
304
-
305
- ### 6. Existing Grouping/Hierarchy Concepts
306
-
307
- Currently, there are no explicit project/epic groupings. The closest concepts are:
308
-
309
- 1. **Task Dependencies** (`dependsOn` field) - Tasks can depend on other tasks
310
- 2. **Tags** - Free-form filtering and grouping
311
- 3. **Task Type** - Classification field
312
- 4. **Scheduled Tasks** - Template that creates related tasks with shared tags
313
-
314
- ---
315
-
316
- ## Code References
317
-
318
- | File | Lines | Description |
319
- |------|-------|-------------|
320
- | `src/be/db.ts` | 59-85 | agent_tasks table schema |
321
- | `src/be/db.ts` | 255-275 | scheduled_tasks table schema |
322
- | `src/be/db.ts` | 1634-1694 | createTaskExtended function |
323
- | `src/types.ts` | 58-105 | AgentTask Zod schema |
324
- | `src/types.ts` | 267-291 | ScheduledTask Zod schema |
325
- | `src/tools/utils.ts` | 86-115 | createToolRegistrar factory |
326
- | `src/tools/send-task.ts` | 7-172 | send-task tool implementation |
327
- | `src/server.ts` | 58-131 | createServer and tool registration |
328
- | `src/http.ts` | 1029-1214 | Task HTTP endpoints |
329
- | `src/scheduler/scheduler.ts` | 44-67 | executeSchedule function |
330
-
331
- ---
332
-
333
- ## Architecture Documentation
334
-
335
- ### Existing Patterns to Follow
336
-
337
- 1. **Database**: SQLite with WAL mode, foreign keys enabled, transactions for multi-step operations
338
- 2. **Types**: Zod schemas for runtime validation, TypeScript types inferred via `z.infer`
339
- 3. **MCP Tools**: `createToolRegistrar` factory with `inputSchema`/`outputSchema` Zod objects
340
- 4. **HTTP API**: Path-segment matching, JSON responses, `X-Agent-ID` authentication
341
- 5. **Traceability**: Tags for linking related entities (e.g., `schedule:{name}`)
342
-
343
- ### Extension Points for Epics
344
-
345
- 1. **New Table**: `epics` table in `src/be/db.ts`
346
- 2. **FK on Tasks**: Add `epicId` column to `agent_tasks`
347
- 3. **New Type**: `EpicSchema` in `src/types.ts`
348
- 4. **New Tools**: `src/tools/epics/` directory with create, list, get, update, delete, assign tools
349
- 5. **HTTP Endpoints**: `/api/epics` routes in `src/http.ts`
350
- 6. **Capability**: Optional `epics` capability flag
351
-
352
- ---
353
-
354
- ## Historical Context (from thoughts/)
355
-
356
- The scheduled tasks feature was implemented following a research-then-plan approach:
357
-
358
- - **Research**: `/workspace/agent-swarm/thoughts/shared/research/2026-01-15-scheduled-tasks.md`
359
- - **Plan**: `/workspace/agent-swarm/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md`
360
-
361
- These documents follow a structured format with YAML frontmatter, clear sections (Research Question, Summary, Detailed Findings, Recommendations), and explicit success criteria.
362
-
363
- ---
364
-
365
- ## Recommendations for Epic Schema
366
-
367
- Based on the analysis, an `epics` table should include:
368
-
369
- ```sql
370
- CREATE TABLE IF NOT EXISTS epics (
371
- id TEXT PRIMARY KEY,
372
- name TEXT NOT NULL,
373
- description TEXT,
374
- goal TEXT NOT NULL, -- The epic's objective
375
- prd TEXT, -- Product Requirements Document (markdown)
376
- plan TEXT, -- Implementation plan (markdown)
377
- status TEXT NOT NULL DEFAULT 'draft' CHECK(status IN ('draft', 'active', 'paused', 'completed', 'cancelled')),
378
- priority INTEGER DEFAULT 50,
379
- tags TEXT DEFAULT '[]',
380
- createdByAgentId TEXT,
381
- leadAgentId TEXT, -- Optional: primary assignee
382
- researchDocPath TEXT, -- Link to /research doc
383
- planDocPath TEXT, -- Link to /plan doc
384
- slackChannelId TEXT, -- Optional Slack integration
385
- slackThreadTs TEXT,
386
- githubRepo TEXT, -- Optional GitHub integration
387
- githubMilestone TEXT,
388
- createdAt TEXT NOT NULL,
389
- lastUpdatedAt TEXT NOT NULL,
390
- startedAt TEXT,
391
- completedAt TEXT,
392
- FOREIGN KEY (createdByAgentId) REFERENCES agents(id) ON DELETE SET NULL,
393
- FOREIGN KEY (leadAgentId) REFERENCES agents(id) ON DELETE SET NULL
394
- )
395
- ```
396
-
397
- **Task linkage** (add to agent_tasks):
398
- ```sql
399
- ALTER TABLE agent_tasks ADD COLUMN epicId TEXT REFERENCES epics(id) ON DELETE SET NULL;
400
- CREATE INDEX IF NOT EXISTS idx_agent_tasks_epicId ON agent_tasks(epicId);
401
- ```
402
-
403
- ---
404
-
405
- ## Open Questions
406
-
407
- 1. **Task Creation Strategy**: Should epics support:
408
- - Static task lists (defined upfront)?
409
- - Dynamic task creation (as epic progresses)?
410
- - Both (hybrid approach)?
411
-
412
- 2. **Progress Tracking**: How should epic progress be calculated?
413
- - Count of completed tasks / total tasks?
414
- - Weighted by priority?
415
- - Manual progress field?
416
-
417
- 3. **Integration Depth**: How deeply should epics integrate with existing commands?
418
- - `/desplega:research` outputs to `epic.researchDocPath`?
419
- - `/desplega:create-plan` outputs to `epic.planDocPath`?
420
- - Automatic task creation from plan?
421
-
422
- 4. **UI Considerations**: Should the UI (React app in `ui/`) display epics?
423
- - Epic list panel?
424
- - Epic detail view with tasks?
425
- - Gantt/timeline view?
426
-
427
- 5. **Permissions**: Who can modify an epic?
428
- - Only creator?
429
- - Creator + leadAgentId?
430
- - Any agent?
431
-
432
- ---
433
-
434
- ## Related Research
435
-
436
- - `/workspace/agent-swarm/thoughts/shared/research/2026-01-15-scheduled-tasks.md` - Scheduled tasks research (similar pattern)
437
- - `/workspace/agent-swarm/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md` - Implementation plan template
@@ -1,98 +0,0 @@
1
- # Agent Swarm Tool Output Schema Alignment Implementation Plan
2
-
3
- ## Overview
4
- Align the MCP tool `outputSchema` definitions with the actual `structuredContent` payloads so OpenCode no longer fails with "additional properties" errors when calling tools like `agent-swarm_get-swarm`.
5
-
6
- ## Current State Analysis
7
- Many tools return `structuredContent` that includes `yourAgentId`, but their `outputSchema` only lists other keys (e.g., `agents`, `success`, `message`). The validator rejects those responses, causing the `McpError -32602` observed when calling `agent-swarm_get-swarm`. `my-agent-info` additionally returns `yourAgentInfo` while its schema only defines `agentId`.
8
-
9
- ## Desired End State
10
- Every tool that embeds `yourAgentId` (and similar metadata) in `structuredContent` declares that key in its `outputSchema`, and `my-agent-info`’s schema matches the keys it actually returns. MCP requests succeed without schema validation issues.
11
-
12
- ### Key Discoveries:
13
- - `src/tools/get-swarm.ts:16` defines `outputSchema` as `{ agents }`, yet `structuredContent` includes `yourAgentId` (and that key is also present in many other tools).
14
- - `src/tools/my-agent-info.ts:13` expects `agentId`, but returns `yourAgentId` and `yourAgentInfo`, so both the schema and the response need to align.
15
-
16
- ## Quick Verification Reference
17
-
18
- Common commands to verify the implementation:
19
- - Type check: `bun run tsc:check`
20
- - Lint and formatting: `bun run lint:fix`
21
-
22
- Key files to review:
23
- - `src/tools/get-swarm.ts` and other swarm/task tools
24
- - `src/tools/my-agent-info.ts` and agent/profile utilities
25
- - `src/tools/schedules/**/*.ts`
26
-
27
- ## What We're NOT Doing
28
- - Changing the actual `structuredContent` values beyond schema alignment.
29
- - Refactoring tool registration utilities or response helpers.
30
- - Adding new functionality beyond schema alignment.
31
-
32
- ## Implementation Approach
33
- For each tool that currently returns `yourAgentId` (and `yourAgentInfo` in `my-agent-info`), update `outputSchema` to include those keys with the appropriate types. Keep existing fields (e.g., `agents`, `success`, `message`) untouched to avoid breaking clients.
34
-
35
- ---
36
-
37
- ## Phase 1: Align Tool Schemas with Structured Responses
38
-
39
- ### Overview
40
- Add `yourAgentId` (and `yourAgentInfo` where applicable) to the output schemas of swarm, task, messaging, channel, service, and schedule tools so their structured responses validate cleanly.
41
-
42
- ### Changes Required:
43
-
44
- #### 1. Swarm/task/messaging tools
45
- Update `outputSchema` in each of these files to include `yourAgentId`:
46
- - `src/tools/get-swarm.ts`
47
- - `src/tools/get-tasks.ts`
48
- - `src/tools/get-task-details.ts`
49
- - `src/tools/poll-task.ts`
50
- - `src/tools/store-progress.ts`
51
- - `src/tools/send-task.ts`
52
- - `src/tools/task-action.ts`
53
- - `src/tools/cancel-task.ts`
54
- - `src/tools/read-messages.ts`
55
- - `src/tools/get-inbox-message.ts`
56
-
57
- #### 2. Agent registration/profile tools
58
- - `src/tools/my-agent-info.ts`: extend the schema with `yourAgentId` and `yourAgentInfo` while keeping the existing `success`/`message` fields.
59
- - `src/tools/join-swarm.ts`
60
- - `src/tools/update-profile.ts`
61
-
62
- #### 3. Channel and messaging utilities
63
- - `src/tools/list-channels.ts`
64
- - `src/tools/create-channel.ts`
65
- - `src/tools/post-message.ts`
66
-
67
- #### 4. Service registry tools
68
- - `src/tools/register-service.ts`
69
- - `src/tools/unregister-service.ts`
70
- - `src/tools/list-services.ts`
71
- - `src/tools/update-service-status.ts`
72
-
73
- #### 5. Scheduler tools
74
- - `src/tools/schedules/create-schedule.ts`
75
- - `src/tools/schedules/update-schedule.ts`
76
- - `src/tools/schedules/delete-schedule.ts`
77
- - `src/tools/schedules/run-schedule-now.ts`
78
- - `src/tools/schedules/list-schedules.ts`
79
-
80
- ### Success Criteria:
81
-
82
- #### Automated Verification:
83
- - [ ] Type check: `bun run tsc:check`
84
- - [ ] Lint & format: `bun run lint:fix`
85
-
86
- #### Manual Verification:
87
- - [ ] Run `agent-swarm_get-swarm` via OpenCode and confirm there is no schema error.
88
- - [ ] Run `agent-swarm_my-agent-info` via OpenCode and confirm the response validates.
89
-
90
- **Implementation Note**: After these schema adjustments, pause for manual confirmation. No commits requested per your preference.
91
-
92
- ---
93
-
94
- ## Testing Strategy
95
- Leverage `bun run tsc:check` and `bun run lint:fix` for automated coverage, and manually invoke the impacted tools through OpenCode to confirm the structured responses pass validation.
96
-
97
- ## References
98
- - Planning template: `~/.claude/plugins/cache/desplega-ai-toolbox/desplega/1.4.0/skills/planning/template.md`