@desplega.ai/agent-swarm 1.20.0 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (810) hide show
  1. package/.claude/settings.json +84 -0
  2. package/.claude/settings.local.json +3 -1
  3. package/.entire/settings.json +4 -0
  4. package/.env.docker.example +40 -23
  5. package/.env.example +39 -1
  6. package/.github/ISSUE_TEMPLATE/bug_report.yml +78 -0
  7. package/.github/ISSUE_TEMPLATE/community-template.yml +77 -0
  8. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  9. package/.github/ISSUE_TEMPLATE/feature_request.yml +60 -0
  10. package/.github/PULL_REQUEST_TEMPLATE/community-template.md +29 -0
  11. package/.github/workflows/ci.yml +3 -27
  12. package/.github/workflows/docker-and-deploy.yml +20 -5
  13. package/.github/workflows/merge-gate.yml +233 -0
  14. package/.opencode/plugins/entire.ts +133 -0
  15. package/.superset/config.json +6 -0
  16. package/.wts-setup.ts +103 -34
  17. package/CHANGELOG.md +447 -0
  18. package/CLAUDE.md +422 -5
  19. package/CONTRIBUTING.md +46 -1
  20. package/DEPLOYMENT.md +26 -9
  21. package/Dockerfile +15 -7
  22. package/Dockerfile.worker +99 -67
  23. package/MCP.md +452 -17
  24. package/README.md +271 -169
  25. package/api-entrypoint.sh +56 -0
  26. package/depot.json +1 -0
  27. package/docker-compose.example.yml +194 -3
  28. package/docker-compose.local.yml +119 -0
  29. package/docker-entrypoint.sh +393 -113
  30. package/docs-site/app/api/search/route.ts +4 -0
  31. package/docs-site/app/docs/[[...slug]]/page.tsx +87 -0
  32. package/docs-site/app/docs/layout.tsx +12 -0
  33. package/docs-site/app/globals.css +24 -0
  34. package/docs-site/app/layout.config.tsx +34 -0
  35. package/docs-site/app/layout.tsx +119 -0
  36. package/docs-site/app/llms-full.txt/route.ts +11 -0
  37. package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +24 -0
  38. package/docs-site/app/llms.txt/route.ts +8 -0
  39. package/docs-site/app/page.tsx +5 -0
  40. package/docs-site/app/robots.ts +13 -0
  41. package/docs-site/app/sitemap.ts +37 -0
  42. package/docs-site/components/api-page.client.tsx +4 -0
  43. package/docs-site/components/api-page.tsx +7 -0
  44. package/docs-site/components/mdx/mermaid.tsx +55 -0
  45. package/docs-site/content/docs/(documentation)/architecture/agents.mdx +117 -0
  46. package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +77 -0
  47. package/docs-site/content/docs/(documentation)/architecture/memory.mdx +96 -0
  48. package/docs-site/content/docs/(documentation)/architecture/meta.json +4 -0
  49. package/docs-site/content/docs/(documentation)/architecture/overview.mdx +172 -0
  50. package/docs-site/content/docs/(documentation)/concepts/epics.mdx +98 -0
  51. package/docs-site/content/docs/(documentation)/concepts/meta.json +4 -0
  52. package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +136 -0
  53. package/docs-site/content/docs/(documentation)/concepts/services.mdx +104 -0
  54. package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +148 -0
  55. package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +209 -0
  56. package/docs-site/content/docs/(documentation)/contributing.mdx +158 -0
  57. package/docs-site/content/docs/(documentation)/getting-started.mdx +157 -0
  58. package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +79 -0
  59. package/docs-site/content/docs/(documentation)/guides/deployment.mdx +171 -0
  60. package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +81 -0
  61. package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +93 -0
  62. package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +98 -0
  63. package/docs-site/content/docs/(documentation)/guides/meta.json +13 -0
  64. package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +52 -0
  65. package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +179 -0
  66. package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +154 -0
  67. package/docs-site/content/docs/(documentation)/index.mdx +65 -0
  68. package/docs-site/content/docs/(documentation)/meta.json +19 -0
  69. package/docs-site/content/docs/(documentation)/reference/cli.mdx +241 -0
  70. package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +205 -0
  71. package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +449 -0
  72. package/docs-site/content/docs/(documentation)/reference/meta.json +4 -0
  73. package/docs-site/content/docs/api-reference/active-sessions.mdx +9 -0
  74. package/docs-site/content/docs/api-reference/agents.mdx +9 -0
  75. package/docs-site/content/docs/api-reference/channels.mdx +9 -0
  76. package/docs-site/content/docs/api-reference/config.mdx +9 -0
  77. package/docs-site/content/docs/api-reference/debug.mdx +9 -0
  78. package/docs-site/content/docs/api-reference/ecosystem.mdx +9 -0
  79. package/docs-site/content/docs/api-reference/epics.mdx +9 -0
  80. package/docs-site/content/docs/api-reference/index.mdx +32 -0
  81. package/docs-site/content/docs/api-reference/memory.mdx +9 -0
  82. package/docs-site/content/docs/api-reference/meta.json +25 -0
  83. package/docs-site/content/docs/api-reference/poll.mdx +9 -0
  84. package/docs-site/content/docs/api-reference/repos.mdx +9 -0
  85. package/docs-site/content/docs/api-reference/schedules.mdx +9 -0
  86. package/docs-site/content/docs/api-reference/session-data.mdx +9 -0
  87. package/docs-site/content/docs/api-reference/stats.mdx +9 -0
  88. package/docs-site/content/docs/api-reference/tasks.mdx +9 -0
  89. package/docs-site/content/docs/api-reference/trackers.mdx +9 -0
  90. package/docs-site/content/docs/api-reference/webhooks.mdx +9 -0
  91. package/docs-site/content/docs/api-reference/workflows.mdx +9 -0
  92. package/docs-site/content/docs/meta.json +3 -0
  93. package/docs-site/lib/get-llm-text.ts +10 -0
  94. package/docs-site/lib/openapi.ts +23 -0
  95. package/docs-site/lib/source.ts +8 -0
  96. package/docs-site/mdx-components.tsx +13 -0
  97. package/docs-site/next.config.mjs +29 -0
  98. package/docs-site/package.json +35 -0
  99. package/docs-site/pnpm-lock.yaml +5407 -0
  100. package/docs-site/postcss.config.mjs +8 -0
  101. package/docs-site/scripts/generate-docs.ts +171 -0
  102. package/docs-site/source.config.ts +17 -0
  103. package/docs-site/tsconfig.json +46 -0
  104. package/ecosystem.config.cjs +4 -4
  105. package/landing/next.config.ts +14 -0
  106. package/landing/package.json +31 -0
  107. package/landing/pnpm-lock.yaml +1091 -0
  108. package/landing/postcss.config.mjs +8 -0
  109. package/landing/public/apple-touch-icon.png +0 -0
  110. package/landing/public/favicon.ico +0 -0
  111. package/landing/public/logo.png +0 -0
  112. package/landing/public/og-image.png +0 -0
  113. package/landing/public/omghost-desplega.svg +30 -0
  114. package/landing/public/omghost-openfort.svg +9 -0
  115. package/landing/src/app/actions/waitlist.ts +25 -0
  116. package/landing/src/app/blog/openfort-hackathon/page.tsx +863 -0
  117. package/landing/src/app/blog/page.tsx +162 -0
  118. package/landing/src/app/blog/swarm-metrics/page.tsx +685 -0
  119. package/landing/src/app/examples/page.tsx +174 -0
  120. package/landing/src/app/examples/x402/page.tsx +456 -0
  121. package/landing/src/app/globals.css +122 -0
  122. package/landing/src/app/layout.tsx +134 -0
  123. package/landing/src/app/page.tsx +27 -0
  124. package/landing/src/app/robots.ts +13 -0
  125. package/landing/src/app/sitemap.ts +44 -0
  126. package/landing/src/components/architecture.tsx +163 -0
  127. package/landing/src/components/cta.tsx +52 -0
  128. package/landing/src/components/features.tsx +160 -0
  129. package/landing/src/components/footer.tsx +100 -0
  130. package/landing/src/components/hero.tsx +217 -0
  131. package/landing/src/components/how-it-works.tsx +165 -0
  132. package/landing/src/components/navbar.tsx +147 -0
  133. package/landing/src/components/waitlist.tsx +110 -0
  134. package/landing/src/components/why-choose.tsx +149 -0
  135. package/landing/src/components/workshops.tsx +328 -0
  136. package/landing/src/lib/utils.ts +6 -0
  137. package/landing/tsconfig.json +41 -0
  138. package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +154 -0
  139. package/new-ui/CLAUDE.md +92 -0
  140. package/new-ui/README.md +73 -0
  141. package/new-ui/biome.json +42 -0
  142. package/new-ui/components.json +21 -0
  143. package/new-ui/index.html +25 -0
  144. package/new-ui/package.json +49 -0
  145. package/new-ui/pnpm-lock.yaml +4845 -0
  146. package/new-ui/public/logo.png +0 -0
  147. package/new-ui/src/api/client.ts +814 -0
  148. package/new-ui/src/api/hooks/index.ts +64 -0
  149. package/new-ui/src/api/hooks/use-agents.ts +58 -0
  150. package/new-ui/src/api/hooks/use-channels.ts +115 -0
  151. package/new-ui/src/api/hooks/use-config-api.ts +46 -0
  152. package/new-ui/src/api/hooks/use-costs.ts +122 -0
  153. package/new-ui/src/api/hooks/use-db-query.ts +29 -0
  154. package/new-ui/src/api/hooks/use-epics.ts +75 -0
  155. package/new-ui/src/api/hooks/use-repos.ts +61 -0
  156. package/new-ui/src/api/hooks/use-schedules.ts +81 -0
  157. package/new-ui/src/api/hooks/use-services.ts +16 -0
  158. package/new-ui/src/api/hooks/use-stats.ts +27 -0
  159. package/new-ui/src/api/hooks/use-tasks.ts +89 -0
  160. package/new-ui/src/api/hooks/use-workflows.ts +109 -0
  161. package/{ui/src/types/api.ts → new-ui/src/api/types.ts} +236 -10
  162. package/new-ui/src/app/App.tsx +13 -0
  163. package/new-ui/src/app/providers.tsx +32 -0
  164. package/new-ui/src/app/router.tsx +52 -0
  165. package/new-ui/src/components/layout/app-header.tsx +47 -0
  166. package/new-ui/src/components/layout/app-sidebar.tsx +128 -0
  167. package/new-ui/src/components/layout/breadcrumbs.tsx +57 -0
  168. package/new-ui/src/components/layout/config-guard.tsx +22 -0
  169. package/new-ui/src/components/layout/root-layout.tsx +40 -0
  170. package/new-ui/src/components/layout/swarm-switcher.tsx +85 -0
  171. package/new-ui/src/components/shared/command-menu.tsx +131 -0
  172. package/new-ui/src/components/shared/data-grid.tsx +141 -0
  173. package/new-ui/src/components/shared/empty-state.tsx +24 -0
  174. package/new-ui/src/components/shared/error-boundary.tsx +72 -0
  175. package/new-ui/src/components/shared/json-viewer.tsx +47 -0
  176. package/new-ui/src/components/shared/name-connection-modal.tsx +99 -0
  177. package/new-ui/src/components/shared/page-skeleton.tsx +16 -0
  178. package/new-ui/src/components/shared/session-log-viewer.tsx +364 -0
  179. package/new-ui/src/components/shared/stats-bar.tsx +132 -0
  180. package/new-ui/src/components/shared/status-badge.tsx +131 -0
  181. package/new-ui/src/components/shared/usage-summary.tsx +179 -0
  182. package/new-ui/src/components/ui/alert-dialog.tsx +176 -0
  183. package/new-ui/src/components/ui/alert.tsx +60 -0
  184. package/new-ui/src/components/ui/avatar.tsx +96 -0
  185. package/new-ui/src/components/ui/badge.tsx +46 -0
  186. package/new-ui/src/components/ui/button.tsx +62 -0
  187. package/new-ui/src/components/ui/card.tsx +75 -0
  188. package/new-ui/src/components/ui/command.tsx +160 -0
  189. package/new-ui/src/components/ui/dialog.tsx +143 -0
  190. package/new-ui/src/components/ui/dropdown-menu.tsx +226 -0
  191. package/new-ui/src/components/ui/input.tsx +21 -0
  192. package/new-ui/src/components/ui/label.tsx +19 -0
  193. package/new-ui/src/components/ui/progress.tsx +26 -0
  194. package/new-ui/src/components/ui/scroll-area.tsx +54 -0
  195. package/new-ui/src/components/ui/select.tsx +175 -0
  196. package/new-ui/src/components/ui/separator.tsx +28 -0
  197. package/new-ui/src/components/ui/sheet.tsx +132 -0
  198. package/new-ui/src/components/ui/sidebar.tsx +691 -0
  199. package/new-ui/src/components/ui/skeleton.tsx +13 -0
  200. package/new-ui/src/components/ui/sonner.tsx +35 -0
  201. package/new-ui/src/components/ui/switch.tsx +33 -0
  202. package/new-ui/src/components/ui/table.tsx +92 -0
  203. package/new-ui/src/components/ui/tabs.tsx +79 -0
  204. package/new-ui/src/components/ui/textarea.tsx +18 -0
  205. package/new-ui/src/components/ui/tooltip.tsx +51 -0
  206. package/new-ui/src/components/workflows/action-node.tsx +53 -0
  207. package/new-ui/src/components/workflows/condition-node.tsx +50 -0
  208. package/new-ui/src/components/workflows/graph-utils.ts +124 -0
  209. package/new-ui/src/components/workflows/json-tree.tsx +189 -0
  210. package/new-ui/src/components/workflows/node-styles.ts +10 -0
  211. package/new-ui/src/components/workflows/step-detail-sheet.tsx +87 -0
  212. package/new-ui/src/components/workflows/trigger-node.tsx +41 -0
  213. package/new-ui/src/components/workflows/workflow-graph.tsx +65 -0
  214. package/{ui/src/hooks/useAutoScroll.ts → new-ui/src/hooks/use-auto-scroll.ts} +0 -1
  215. package/new-ui/src/hooks/use-config.ts +203 -0
  216. package/new-ui/src/hooks/use-keyboard-shortcuts.ts +41 -0
  217. package/new-ui/src/hooks/use-mobile.ts +19 -0
  218. package/new-ui/src/hooks/use-theme.ts +60 -0
  219. package/new-ui/src/lib/config.ts +188 -0
  220. package/new-ui/src/lib/slugs.ts +71 -0
  221. package/{ui → new-ui}/src/lib/utils.ts +32 -0
  222. package/new-ui/src/main.tsx +11 -0
  223. package/new-ui/src/pages/agents/[id]/page.tsx +492 -0
  224. package/new-ui/src/pages/agents/page.tsx +134 -0
  225. package/new-ui/src/pages/chat/page.tsx +674 -0
  226. package/new-ui/src/pages/config/page.tsx +1109 -0
  227. package/new-ui/src/pages/dashboard/page.tsx +454 -0
  228. package/new-ui/src/pages/debug/page.tsx +275 -0
  229. package/new-ui/src/pages/epics/[id]/page.tsx +809 -0
  230. package/new-ui/src/pages/epics/page.tsx +321 -0
  231. package/new-ui/src/pages/not-found/page.tsx +18 -0
  232. package/new-ui/src/pages/repos/page.tsx +369 -0
  233. package/new-ui/src/pages/schedules/[id]/page.tsx +664 -0
  234. package/new-ui/src/pages/schedules/page.tsx +477 -0
  235. package/new-ui/src/pages/services/page.tsx +128 -0
  236. package/new-ui/src/pages/tasks/[id]/page.tsx +670 -0
  237. package/new-ui/src/pages/tasks/page.tsx +592 -0
  238. package/new-ui/src/pages/usage/page.tsx +195 -0
  239. package/new-ui/src/pages/workflow-runs/[id]/page.tsx +363 -0
  240. package/new-ui/src/pages/workflows/[id]/page.tsx +417 -0
  241. package/new-ui/src/pages/workflows/page.tsx +266 -0
  242. package/new-ui/src/styles/ag-grid.css +36 -0
  243. package/new-ui/src/styles/globals.css +213 -0
  244. package/new-ui/test-results/.last-run.json +4 -0
  245. package/{ui/tsconfig.json → new-ui/tsconfig.app.json} +7 -4
  246. package/new-ui/tsconfig.json +4 -0
  247. package/new-ui/tsconfig.node.json +26 -0
  248. package/new-ui/vercel.json +4 -0
  249. package/new-ui/vite.config.ts +28 -0
  250. package/openapi.json +4436 -0
  251. package/package.json +31 -7
  252. package/plugin/build-pi-skills.ts +233 -0
  253. package/plugin/commands/close-issue.md +7 -3
  254. package/plugin/commands/create-pr.md +18 -12
  255. package/plugin/commands/implement-issue.md +7 -3
  256. package/plugin/commands/respond-github.md +8 -4
  257. package/plugin/commands/review-pr.md +44 -10
  258. package/plugin/commands/start-leader.md +1 -3
  259. package/plugin/commands/start-worker.md +1 -3
  260. package/plugin/commands/work-on-task.md +22 -3
  261. package/plugin/pi-skills/close-issue/SKILL.md +90 -0
  262. package/plugin/pi-skills/create-pr/SKILL.md +99 -0
  263. package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
  264. package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
  265. package/plugin/pi-skills/respond-github/SKILL.md +98 -0
  266. package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
  267. package/plugin/pi-skills/review-pr/SKILL.md +261 -0
  268. package/plugin/pi-skills/start-leader/SKILL.md +121 -0
  269. package/plugin/pi-skills/start-worker/SKILL.md +60 -0
  270. package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
  271. package/plugin/pi-skills/todos/SKILL.md +66 -0
  272. package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
  273. package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
  274. package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
  275. package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
  276. package/plugin/skills/artifacts/examples/static-report.sh +17 -0
  277. package/plugin/skills/artifacts/skill.md +71 -0
  278. package/prek.toml +75 -0
  279. package/scripts/check-db-boundary.sh +60 -0
  280. package/scripts/e2e-docker-provider.ts +820 -0
  281. package/scripts/e2e-io-schemas-test.ts +807 -0
  282. package/scripts/e2e-provider-test.ts +220 -0
  283. package/scripts/e2e-workflow-redesign.sh +229 -0
  284. package/scripts/e2e-workflow-test.sh +285 -0
  285. package/scripts/e2e-workflow-test.ts +857 -0
  286. package/scripts/generate-openapi.ts +26 -0
  287. package/scripts/measure-tool-tokens.ts +118 -0
  288. package/scripts/x402-e2e-test.ts +195 -0
  289. package/scripts/x402-test-server.ts +236 -0
  290. package/scripts/x402-testnet-e2e.ts +668 -0
  291. package/slack-manifest.json +17 -0
  292. package/src/agentmail/app.ts +65 -0
  293. package/src/agentmail/handlers.ts +207 -0
  294. package/src/agentmail/index.ts +9 -0
  295. package/src/agentmail/types.ts +51 -0
  296. package/src/artifact-sdk/browser-sdk.ts +30 -0
  297. package/src/artifact-sdk/index.ts +2 -0
  298. package/src/artifact-sdk/localtunnel.d.ts +20 -0
  299. package/src/artifact-sdk/port.ts +12 -0
  300. package/src/artifact-sdk/server.ts +156 -0
  301. package/src/artifact-sdk/tunnel.ts +19 -0
  302. package/src/be/chunking.ts +193 -0
  303. package/src/be/db-queries/oauth.ts +90 -0
  304. package/src/be/db-queries/tracker.ts +182 -0
  305. package/src/be/db.ts +2729 -770
  306. package/src/be/embedding.ts +80 -0
  307. package/src/be/migrations/001_initial.sql +409 -0
  308. package/src/be/migrations/002_one_time_schedules.sql +59 -0
  309. package/src/be/migrations/003_workflows.sql +51 -0
  310. package/src/be/migrations/004_workflow_source.sql +81 -0
  311. package/src/be/migrations/005_epic_next_steps.sql +2 -0
  312. package/src/be/migrations/006_vcs_provider.sql +94 -0
  313. package/src/be/migrations/007_task_dir.sql +2 -0
  314. package/src/be/migrations/008_workflow_redesign.sql +85 -0
  315. package/src/be/migrations/009_tracker_integration.sql +144 -0
  316. package/src/be/migrations/010_step_diagnostics.sql +1 -0
  317. package/src/be/migrations/011_step_next_port.sql +1 -0
  318. package/src/be/migrations/012_trigger_schema.sql +1 -0
  319. package/src/be/migrations/013_task_output_schema.sql +2 -0
  320. package/src/be/migrations/runner.ts +188 -0
  321. package/src/cli.tsx +231 -299
  322. package/src/commands/artifact.ts +241 -0
  323. package/src/commands/onboard/compose-generator.ts +169 -0
  324. package/src/commands/onboard/env-generator.ts +79 -0
  325. package/src/commands/onboard/manifest.ts +37 -0
  326. package/src/commands/onboard/presets.ts +85 -0
  327. package/src/commands/onboard/service-names.ts +47 -0
  328. package/src/commands/onboard/steps/core-credentials.tsx +111 -0
  329. package/src/commands/onboard/steps/custom-templates.tsx +168 -0
  330. package/src/commands/onboard/steps/generate.tsx +154 -0
  331. package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
  332. package/src/commands/onboard/steps/harness.tsx +21 -0
  333. package/src/commands/onboard/steps/health-check.tsx +171 -0
  334. package/src/commands/onboard/steps/integration-github.tsx +105 -0
  335. package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
  336. package/src/commands/onboard/steps/integration-menu.tsx +58 -0
  337. package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
  338. package/src/commands/onboard/steps/integration-slack.tsx +165 -0
  339. package/src/commands/onboard/steps/post-connect.tsx +145 -0
  340. package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
  341. package/src/commands/onboard/steps/post-task.tsx +103 -0
  342. package/src/commands/onboard/steps/prereq-check.tsx +178 -0
  343. package/src/commands/onboard/steps/review.tsx +82 -0
  344. package/src/commands/onboard/steps/start.tsx +97 -0
  345. package/src/commands/onboard/templates.ts +34 -0
  346. package/src/commands/onboard/types.ts +259 -0
  347. package/src/commands/onboard.tsx +425 -0
  348. package/src/commands/runner.ts +1376 -559
  349. package/src/commands/setup.tsx +23 -38
  350. package/src/commands/shared/client-config.ts +41 -0
  351. package/src/github/app.ts +8 -0
  352. package/src/github/handlers.ts +93 -75
  353. package/src/github/index.ts +1 -0
  354. package/src/github/types.ts +1 -0
  355. package/src/gitlab/auth.ts +63 -0
  356. package/src/gitlab/handlers.ts +327 -0
  357. package/src/gitlab/index.ts +19 -0
  358. package/src/gitlab/reactions.ts +104 -0
  359. package/src/gitlab/types.ts +130 -0
  360. package/src/heartbeat/heartbeat.ts +425 -0
  361. package/src/heartbeat/index.ts +1 -0
  362. package/src/hooks/hook.ts +555 -4
  363. package/src/hooks/tool-loop-detection.test.ts +158 -0
  364. package/src/hooks/tool-loop-detection.ts +167 -0
  365. package/src/http/active-sessions.ts +172 -0
  366. package/src/http/agents.ts +328 -0
  367. package/src/http/config.ts +191 -0
  368. package/src/http/core.ts +309 -0
  369. package/src/http/db-query.ts +91 -0
  370. package/src/http/ecosystem.ts +63 -0
  371. package/src/http/epics.ts +460 -0
  372. package/src/http/index.ts +213 -0
  373. package/src/http/mcp.ts +77 -0
  374. package/src/http/memory.ts +168 -0
  375. package/src/http/openapi.ts +109 -0
  376. package/src/http/poll.ts +178 -0
  377. package/src/http/repos.ts +195 -0
  378. package/src/http/route-def.ts +123 -0
  379. package/src/http/schedules.ts +391 -0
  380. package/src/http/session-data.ts +241 -0
  381. package/src/http/stats.ts +174 -0
  382. package/src/http/tasks.ts +468 -0
  383. package/src/http/trackers/index.ts +10 -0
  384. package/src/http/trackers/linear.ts +187 -0
  385. package/src/http/types.ts +12 -0
  386. package/src/http/utils.ts +87 -0
  387. package/src/http/webhooks.ts +432 -0
  388. package/src/http/workflows.ts +522 -0
  389. package/src/http.ts +1 -1890
  390. package/src/linear/README.md +65 -0
  391. package/src/linear/app.ts +48 -0
  392. package/src/linear/client.ts +18 -0
  393. package/src/linear/index.ts +1 -0
  394. package/src/linear/oauth.ts +35 -0
  395. package/src/linear/outbound.ts +212 -0
  396. package/src/linear/sync.ts +543 -0
  397. package/src/linear/types.ts +7 -0
  398. package/src/linear/webhook.ts +104 -0
  399. package/src/oauth/README.md +66 -0
  400. package/src/oauth/index.ts +6 -0
  401. package/src/oauth/wrapper.ts +204 -0
  402. package/src/prompts/base-prompt.ts +366 -24
  403. package/src/prompts/defaults.ts +196 -0
  404. package/src/providers/claude-adapter.ts +429 -0
  405. package/src/providers/index.ts +24 -0
  406. package/src/providers/pi-mono-adapter.ts +442 -0
  407. package/src/providers/pi-mono-extension.ts +620 -0
  408. package/src/providers/pi-mono-mcp-client.ts +124 -0
  409. package/src/providers/types.ts +75 -0
  410. package/src/scheduler/scheduler.test.ts +2 -0
  411. package/src/scheduler/scheduler.ts +186 -29
  412. package/src/server.ts +82 -6
  413. package/src/slack/HEURISTICS.md +105 -0
  414. package/src/slack/actions.ts +133 -0
  415. package/src/slack/app.ts +7 -0
  416. package/src/slack/assistant.ts +115 -0
  417. package/src/slack/blocks.ts +233 -0
  418. package/src/slack/commands.ts +31 -17
  419. package/src/slack/files.ts +1 -1
  420. package/src/slack/handlers.test.ts +114 -1
  421. package/src/slack/handlers.ts +212 -52
  422. package/src/slack/responses.ts +120 -67
  423. package/src/slack/router.ts +17 -99
  424. package/src/slack/thread-buffer.ts +213 -0
  425. package/src/slack/watcher.ts +119 -4
  426. package/src/tests/agent-activity.test.ts +247 -0
  427. package/src/tests/agentmail-filters.test.ts +97 -0
  428. package/src/tests/artifact-sdk.test.ts +800 -0
  429. package/src/tests/base-prompt.test.ts +264 -0
  430. package/src/tests/build-pi-skills.test.ts +127 -0
  431. package/src/tests/claude-adapter.test.ts +126 -0
  432. package/src/tests/context-versioning.test.ts +425 -0
  433. package/src/tests/db-queries-oauth.test.ts +197 -0
  434. package/src/tests/db-queries-tracker.test.ts +230 -0
  435. package/src/tests/epics.test.ts +3 -3
  436. package/src/tests/error-tracker.test.ts +368 -0
  437. package/src/tests/fetch-resolved-env.test.ts +167 -0
  438. package/src/tests/generate-default-claude-md.test.ts +9 -1
  439. package/src/tests/generate-identity-templates.test.ts +124 -0
  440. package/src/tests/gitlab-auth.test.ts +109 -0
  441. package/src/tests/gitlab-handlers.test.ts +691 -0
  442. package/src/tests/gitlab-vcs-db.test.ts +177 -0
  443. package/src/tests/heartbeat.test.ts +363 -0
  444. package/src/tests/http-api-integration.test.ts +1698 -0
  445. package/src/tests/linear-outbound-sync.test.ts +200 -0
  446. package/src/tests/linear-webhook.test.ts +402 -0
  447. package/src/tests/match-route.test.ts +187 -0
  448. package/src/tests/memory.test.ts +737 -0
  449. package/src/tests/migration-runner-regressions.test.ts +86 -0
  450. package/src/tests/model-control.test.ts +338 -0
  451. package/src/tests/oauth-wrapper.test.ts +147 -0
  452. package/src/tests/onboard-compose.test.ts +138 -0
  453. package/src/tests/onboard-env.test.ts +174 -0
  454. package/src/tests/onboard-manifest.test.ts +137 -0
  455. package/src/tests/pi-mono-adapter.test.ts +234 -0
  456. package/src/tests/progress-dedup.test.ts +98 -0
  457. package/src/tests/provider-adapter.test.ts +122 -0
  458. package/src/tests/provider-command-format.test.ts +98 -0
  459. package/src/tests/reload-config.test.ts +170 -0
  460. package/src/tests/runner-polling-api.test.ts +25 -20
  461. package/src/tests/scheduled-tasks.test.ts +104 -0
  462. package/src/tests/scheduler-backoff.test.ts +166 -0
  463. package/src/tests/self-improvement.test.ts +540 -0
  464. package/src/tests/session-attach.test.ts +536 -0
  465. package/src/tests/session-costs.test.ts +267 -1
  466. package/src/tests/slack-actions.test.ts +133 -0
  467. package/src/tests/slack-assistant.test.ts +136 -0
  468. package/src/tests/slack-blocks.test.ts +246 -0
  469. package/src/tests/slack-metadata-inheritance.test.ts +243 -0
  470. package/src/tests/slack-queue-offline.test.ts +174 -0
  471. package/src/tests/slack-router.test.ts +181 -0
  472. package/src/tests/slack-thread-buffer.test.ts +305 -0
  473. package/src/tests/slack-thread-followups.test.ts +298 -0
  474. package/src/tests/slack-watcher.test.ts +101 -0
  475. package/src/tests/structured-output.test.ts +311 -0
  476. package/src/tests/swarm-repos.test.ts +198 -0
  477. package/src/tests/task-cancellation.test.ts +6 -4
  478. package/src/tests/task-working-dir.test.ts +176 -0
  479. package/src/tests/template-fetch.test.ts +490 -0
  480. package/src/tests/tool-annotations.test.ts +371 -0
  481. package/src/tests/tracker-tools.test.ts +184 -0
  482. package/src/tests/update-profile-api.test.ts +143 -3
  483. package/src/tests/validation-adapters.test.ts +86 -0
  484. package/src/tests/vcs-provider.test.ts +27 -0
  485. package/src/tests/workflow-agent-task.test.ts +196 -0
  486. package/src/tests/workflow-async-v2.test.ts +386 -0
  487. package/src/tests/workflow-convergence.test.ts +541 -0
  488. package/src/tests/workflow-definition-validation.test.ts +290 -0
  489. package/src/tests/workflow-engine-v2.test.ts +691 -0
  490. package/src/tests/workflow-executors.test.ts +736 -0
  491. package/src/tests/workflow-http-v2.test.ts +599 -0
  492. package/src/tests/workflow-integration-io.test.ts +902 -0
  493. package/src/tests/workflow-io-schemas.test.ts +624 -0
  494. package/src/tests/workflow-registry.test.ts +592 -0
  495. package/src/tests/workflow-retry-v2.test.ts +401 -0
  496. package/src/tests/workflow-retry-validation.test.ts +282 -0
  497. package/src/tests/workflow-template.test.ts +288 -0
  498. package/src/tests/workflow-trigger-schema.test.ts +359 -0
  499. package/src/tests/workflow-triggers-v2.test.ts +264 -0
  500. package/src/tests/workflow-versions.test.ts +208 -0
  501. package/src/tests/x402-client.test.ts +117 -0
  502. package/src/tests/x402-config.test.ts +182 -0
  503. package/src/tests/x402-spending-tracker.test.ts +185 -0
  504. package/src/tools/cancel-task.ts +2 -0
  505. package/src/tools/context-diff.ts +171 -0
  506. package/src/tools/context-history.ts +138 -0
  507. package/src/tools/create-channel.ts +1 -0
  508. package/src/tools/db-query.ts +78 -0
  509. package/src/tools/delete-channel.ts +132 -0
  510. package/src/tools/epics/assign-task-to-epic.ts +1 -0
  511. package/src/tools/epics/create-epic.ts +3 -2
  512. package/src/tools/epics/delete-epic.ts +2 -0
  513. package/src/tools/epics/get-epic-details.ts +2 -0
  514. package/src/tools/epics/list-epics.ts +2 -0
  515. package/src/tools/epics/unassign-task-from-epic.ts +1 -0
  516. package/src/tools/epics/update-epic.ts +7 -4
  517. package/src/tools/get-swarm.ts +2 -0
  518. package/src/tools/get-task-details.ts +2 -0
  519. package/src/tools/get-tasks.ts +27 -1
  520. package/src/tools/inject-learning.ts +106 -0
  521. package/src/tools/join-swarm.ts +17 -7
  522. package/src/tools/list-channels.ts +2 -0
  523. package/src/tools/list-services.ts +2 -0
  524. package/src/tools/memory-get.ts +56 -0
  525. package/src/tools/memory-search.ts +131 -0
  526. package/src/tools/my-agent-info.ts +2 -0
  527. package/src/tools/poll-task.ts +2 -20
  528. package/src/tools/post-message.ts +1 -0
  529. package/src/tools/read-messages.ts +2 -0
  530. package/src/tools/register-agentmail-inbox.ts +166 -0
  531. package/src/tools/register-service.ts +2 -0
  532. package/src/tools/schedules/create-schedule.ts +134 -24
  533. package/src/tools/schedules/delete-schedule.ts +2 -0
  534. package/src/tools/schedules/list-schedules.ts +20 -4
  535. package/src/tools/schedules/run-schedule-now.ts +1 -0
  536. package/src/tools/schedules/update-schedule.ts +49 -17
  537. package/src/tools/send-task.ts +132 -10
  538. package/src/tools/slack-download-file.ts +4 -2
  539. package/src/tools/slack-list-channels.ts +2 -0
  540. package/src/tools/slack-post.ts +2 -0
  541. package/src/tools/slack-read.ts +2 -0
  542. package/src/tools/slack-reply.ts +2 -0
  543. package/src/tools/slack-upload-file.ts +2 -0
  544. package/src/tools/store-progress.ts +187 -4
  545. package/src/tools/swarm-config/delete-config.ts +87 -0
  546. package/src/tools/swarm-config/get-config.ts +108 -0
  547. package/src/tools/swarm-config/index.ts +4 -0
  548. package/src/tools/swarm-config/list-config.ts +99 -0
  549. package/src/tools/swarm-config/set-config.ts +118 -0
  550. package/src/tools/task-action.ts +30 -5
  551. package/src/tools/task-dedup.ts +97 -0
  552. package/src/tools/tool-config.ts +117 -0
  553. package/src/tools/tracker/index.ts +6 -0
  554. package/src/tools/tracker/tracker-link-epic.ts +64 -0
  555. package/src/tools/tracker/tracker-link-task.ts +64 -0
  556. package/src/tools/tracker/tracker-map-agent.ts +57 -0
  557. package/src/tools/tracker/tracker-status.ts +56 -0
  558. package/src/tools/tracker/tracker-sync-status.ts +42 -0
  559. package/src/tools/tracker/tracker-unlink.ts +41 -0
  560. package/src/tools/unregister-service.ts +2 -0
  561. package/src/tools/update-profile.ts +93 -10
  562. package/src/tools/update-service-status.ts +2 -0
  563. package/src/tools/utils.ts +10 -1
  564. package/src/tools/workflows/create-workflow.ts +111 -0
  565. package/src/tools/workflows/delete-workflow.ts +42 -0
  566. package/src/tools/workflows/get-workflow-run.ts +59 -0
  567. package/src/tools/workflows/get-workflow.ts +53 -0
  568. package/src/tools/workflows/index.ts +9 -0
  569. package/src/tools/workflows/list-workflow-runs.ts +48 -0
  570. package/src/tools/workflows/list-workflows.ts +42 -0
  571. package/src/tools/workflows/retry-workflow-run.ts +40 -0
  572. package/src/tools/workflows/trigger-workflow.ts +96 -0
  573. package/src/tools/workflows/update-workflow.ts +118 -0
  574. package/src/tracker/types.ts +51 -0
  575. package/src/types.ts +477 -14
  576. package/src/utils/credentials.test.ts +156 -0
  577. package/src/utils/credentials.ts +50 -0
  578. package/src/utils/error-tracker.ts +190 -0
  579. package/src/vcs/index.ts +15 -0
  580. package/src/vcs/types.ts +5 -0
  581. package/src/workflows/checkpoint.ts +121 -0
  582. package/src/workflows/cooldown.ts +28 -0
  583. package/src/workflows/definition.ts +217 -0
  584. package/src/workflows/engine.ts +554 -0
  585. package/src/workflows/event-bus.ts +29 -0
  586. package/src/workflows/executors/agent-task.ts +92 -0
  587. package/src/workflows/executors/base.ts +86 -0
  588. package/src/workflows/executors/code-match.ts +88 -0
  589. package/src/workflows/executors/index.ts +16 -0
  590. package/src/workflows/executors/notify.ts +93 -0
  591. package/src/workflows/executors/property-match.ts +104 -0
  592. package/src/workflows/executors/raw-llm.ts +83 -0
  593. package/src/workflows/executors/registry.ts +76 -0
  594. package/src/workflows/executors/script.ts +103 -0
  595. package/src/workflows/executors/validate.ts +215 -0
  596. package/src/workflows/executors/vcs.ts +58 -0
  597. package/src/workflows/index.ts +61 -0
  598. package/src/workflows/input.ts +46 -0
  599. package/src/workflows/json-schema-validator.ts +118 -0
  600. package/src/workflows/recovery.ts +139 -0
  601. package/src/workflows/resume.ts +143 -0
  602. package/src/workflows/retry-poller.ts +216 -0
  603. package/src/workflows/template.ts +74 -0
  604. package/src/workflows/templates.ts +86 -0
  605. package/src/workflows/triggers.ts +95 -0
  606. package/src/workflows/validation.ts +104 -0
  607. package/src/workflows/version.ts +42 -0
  608. package/src/x402/cli.ts +140 -0
  609. package/src/x402/client.ts +192 -0
  610. package/src/x402/config.ts +131 -0
  611. package/src/x402/index.ts +37 -0
  612. package/src/x402/openfort-signer.ts +83 -0
  613. package/src/x402/spending-tracker.ts +109 -0
  614. package/templates/community/.gitkeep +0 -0
  615. package/templates/official/coder/CLAUDE.md +49 -0
  616. package/templates/official/coder/IDENTITY.md +28 -0
  617. package/templates/official/coder/SOUL.md +43 -0
  618. package/templates/official/coder/TOOLS.md +40 -0
  619. package/templates/official/coder/config.json +23 -0
  620. package/templates/official/coder/start-up.sh +23 -0
  621. package/templates/official/content-reviewer/CLAUDE.md +68 -0
  622. package/templates/official/content-reviewer/IDENTITY.md +28 -0
  623. package/templates/official/content-reviewer/SOUL.md +44 -0
  624. package/templates/official/content-reviewer/TOOLS.md +37 -0
  625. package/templates/official/content-reviewer/config.json +23 -0
  626. package/templates/official/content-reviewer/start-up.sh +23 -0
  627. package/templates/official/content-strategist/CLAUDE.md +63 -0
  628. package/templates/official/content-strategist/IDENTITY.md +33 -0
  629. package/templates/official/content-strategist/SOUL.md +48 -0
  630. package/templates/official/content-strategist/TOOLS.md +47 -0
  631. package/templates/official/content-strategist/config.json +23 -0
  632. package/templates/official/content-strategist/start-up.sh +23 -0
  633. package/templates/official/content-writer/CLAUDE.md +72 -0
  634. package/templates/official/content-writer/IDENTITY.md +30 -0
  635. package/templates/official/content-writer/SOUL.md +46 -0
  636. package/templates/official/content-writer/TOOLS.md +44 -0
  637. package/templates/official/content-writer/config.json +23 -0
  638. package/templates/official/content-writer/start-up.sh +23 -0
  639. package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
  640. package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
  641. package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
  642. package/templates/official/forward-deployed-engineer/config.json +21 -0
  643. package/templates/official/lead/CLAUDE.md +33 -0
  644. package/templates/official/lead/IDENTITY.md +36 -0
  645. package/templates/official/lead/SOUL.md +51 -0
  646. package/templates/official/lead/config.json +22 -0
  647. package/templates/official/researcher/CLAUDE.md +46 -0
  648. package/templates/official/researcher/IDENTITY.md +28 -0
  649. package/templates/official/researcher/SOUL.md +43 -0
  650. package/templates/official/researcher/config.json +21 -0
  651. package/templates/official/reviewer/CLAUDE.md +63 -0
  652. package/templates/official/reviewer/IDENTITY.md +28 -0
  653. package/templates/official/reviewer/SOUL.md +45 -0
  654. package/templates/official/reviewer/config.json +21 -0
  655. package/templates/official/tester/CLAUDE.md +53 -0
  656. package/templates/official/tester/IDENTITY.md +28 -0
  657. package/templates/official/tester/SOUL.md +55 -0
  658. package/templates/official/tester/config.json +21 -0
  659. package/templates/schema.ts +35 -0
  660. package/templates-ui/README.md +46 -0
  661. package/templates-ui/components.json +17 -0
  662. package/templates-ui/eslint.config.mjs +18 -0
  663. package/templates-ui/next.config.ts +7 -0
  664. package/templates-ui/package.json +35 -0
  665. package/templates-ui/pnpm-lock.yaml +4571 -0
  666. package/templates-ui/postcss.config.mjs +7 -0
  667. package/templates-ui/public/file.svg +1 -0
  668. package/templates-ui/public/globe.svg +1 -0
  669. package/templates-ui/public/logo.png +0 -0
  670. package/templates-ui/public/next.svg +1 -0
  671. package/templates-ui/public/vercel.svg +1 -0
  672. package/templates-ui/public/window.svg +1 -0
  673. package/templates-ui/src/app/[category]/[name]/page.tsx +89 -0
  674. package/templates-ui/src/app/api/templates/[...slug]/route.ts +52 -0
  675. package/templates-ui/src/app/api/templates/route.ts +18 -0
  676. package/templates-ui/src/app/builder/page.tsx +37 -0
  677. package/templates-ui/src/app/globals.css +94 -0
  678. package/templates-ui/src/app/layout.tsx +79 -0
  679. package/templates-ui/src/app/page.tsx +38 -0
  680. package/templates-ui/src/app/robots.ts +11 -0
  681. package/templates-ui/src/app/sitemap.ts +31 -0
  682. package/templates-ui/src/components/compose-builder.tsx +442 -0
  683. package/templates-ui/src/components/compose-preview.tsx +117 -0
  684. package/templates-ui/src/components/file-preview.tsx +77 -0
  685. package/templates-ui/src/components/footer.tsx +40 -0
  686. package/templates-ui/src/components/header.tsx +41 -0
  687. package/templates-ui/src/components/template-card.tsx +87 -0
  688. package/templates-ui/src/components/template-detail.tsx +125 -0
  689. package/templates-ui/src/components/template-gallery.tsx +263 -0
  690. package/templates-ui/src/components/ui/badge.tsx +36 -0
  691. package/templates-ui/src/components/ui/button.tsx +57 -0
  692. package/templates-ui/src/components/ui/card.tsx +76 -0
  693. package/templates-ui/src/components/ui/separator.tsx +31 -0
  694. package/templates-ui/src/components/ui/tooltip.tsx +32 -0
  695. package/templates-ui/src/lib/compose-generator.ts +241 -0
  696. package/templates-ui/src/lib/templates.ts +137 -0
  697. package/templates-ui/src/lib/utils.ts +6 -0
  698. package/templates-ui/tsconfig.json +34 -0
  699. package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +679 -0
  700. package/thoughts/research/2026-02-28-x402-payments-research.md +686 -0
  701. package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +282 -0
  702. package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +492 -0
  703. package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +282 -0
  704. package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +328 -0
  705. package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +224 -0
  706. package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +159 -0
  707. package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +337 -0
  708. package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +778 -0
  709. package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +1269 -0
  710. package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +411 -0
  711. package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +724 -0
  712. package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +443 -0
  713. package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +307 -0
  714. package/thoughts/taras/plans/2026-02-20-auto-improvement.md +803 -0
  715. package/thoughts/taras/plans/2026-02-20-env-management.md +538 -0
  716. package/thoughts/taras/plans/2026-02-20-memory-system.md +882 -0
  717. package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +806 -0
  718. package/thoughts/taras/plans/2026-02-20-session-attach.md +647 -0
  719. package/thoughts/taras/plans/2026-02-20-worker-identity.md +820 -0
  720. package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +768 -0
  721. package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +77 -0
  722. package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +543 -0
  723. package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +373 -0
  724. package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +512 -0
  725. package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +919 -0
  726. package/thoughts/taras/plans/2026-03-09-templates-registry.md +723 -0
  727. package/thoughts/taras/plans/2026-03-10-task-working-directory.md +371 -0
  728. package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +621 -0
  729. package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +61 -0
  730. package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +488 -0
  731. package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +644 -0
  732. package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +636 -0
  733. package/thoughts/taras/plans/2026-03-17-multi-api-config.md +444 -0
  734. package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +591 -0
  735. package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +446 -0
  736. package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +987 -0
  737. package/thoughts/taras/plans/2026-03-19-compound-learnings.md +403 -0
  738. package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +860 -0
  739. package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +899 -0
  740. package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +874 -0
  741. package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +723 -0
  742. package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +390 -0
  743. package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +594 -0
  744. package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +825 -0
  745. package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +393 -0
  746. package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +168 -0
  747. package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +230 -0
  748. package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +445 -0
  749. package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +375 -0
  750. package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +869 -0
  751. package/thoughts/taras/research/2026-03-09-templates-registry.md +373 -0
  752. package/thoughts/taras/research/2026-03-10-agent-working-directory.md +223 -0
  753. package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +339 -0
  754. package/thoughts/taras/research/2026-03-11-archil-production-setup.md +181 -0
  755. package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +437 -0
  756. package/thoughts/taras/research/2026-03-13-slack-ai-features.md +258 -0
  757. package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +335 -0
  758. package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +670 -0
  759. package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +54 -0
  760. package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +558 -0
  761. package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +526 -0
  762. package/thoughts/taras/research/2026-03-18-workflow-redesign.md +797 -0
  763. package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +563 -0
  764. package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +486 -0
  765. package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +469 -0
  766. package/tsconfig.json +1 -1
  767. package/FAQ.md +0 -19
  768. package/src/tests/get-inbox-message.test.ts +0 -145
  769. package/src/tools/get-inbox-message.ts +0 -89
  770. package/src/tools/inbox-delegate.ts +0 -113
  771. package/ui/CLAUDE.md +0 -49
  772. package/ui/bun.lock +0 -771
  773. package/ui/index.html +0 -22
  774. package/ui/package-lock.json +0 -5290
  775. package/ui/package.json +0 -33
  776. package/ui/pnpm-lock.yaml +0 -3341
  777. package/ui/postcss.config.js +0 -6
  778. package/ui/src/App.tsx +0 -63
  779. package/ui/src/components/ActivityFeed.tsx +0 -440
  780. package/ui/src/components/AgentDetailPanel.tsx +0 -733
  781. package/ui/src/components/AgentsPanel.tsx +0 -815
  782. package/ui/src/components/ChatPanel.tsx +0 -1920
  783. package/ui/src/components/ConfigModal.tsx +0 -253
  784. package/ui/src/components/Dashboard.tsx +0 -832
  785. package/ui/src/components/EditAgentProfileModal.tsx +0 -433
  786. package/ui/src/components/EpicDetailPage.tsx +0 -741
  787. package/ui/src/components/EpicsPanel.tsx +0 -566
  788. package/ui/src/components/Header.tsx +0 -160
  789. package/ui/src/components/JsonViewer.tsx +0 -171
  790. package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
  791. package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
  792. package/ui/src/components/ServicesPanel.tsx +0 -622
  793. package/ui/src/components/SessionLogPanel.tsx +0 -1219
  794. package/ui/src/components/StatsBar.tsx +0 -321
  795. package/ui/src/components/StatusBadge.tsx +0 -168
  796. package/ui/src/components/TaskDetailPanel.tsx +0 -903
  797. package/ui/src/components/TasksPanel.tsx +0 -614
  798. package/ui/src/components/UsageCharts.tsx +0 -216
  799. package/ui/src/components/UsageTab.tsx +0 -394
  800. package/ui/src/hooks/queries.ts +0 -353
  801. package/ui/src/index.css +0 -257
  802. package/ui/src/lib/api.ts +0 -268
  803. package/ui/src/lib/config.ts +0 -35
  804. package/ui/src/lib/contentPreview.ts +0 -208
  805. package/ui/src/lib/theme.ts +0 -214
  806. package/ui/src/main.tsx +0 -28
  807. package/ui/src/vite-env.d.ts +0 -1
  808. package/ui/tailwind.config.js +0 -37
  809. package/ui/vite.config.ts +0 -35
  810. /package/{ui → docs-site}/public/logo.png +0 -0
package/src/cli.tsx CHANGED
@@ -6,7 +6,8 @@ import pkg from "../package.json";
6
6
  import { runClaude } from "./claude.ts";
7
7
  import { runHook } from "./commands/hook.ts";
8
8
  import { runLead } from "./commands/lead.ts";
9
- import { Setup } from "./commands/setup.tsx";
9
+ import { Onboard } from "./commands/onboard.tsx";
10
+ import { Setup as Connect } from "./commands/setup.tsx";
10
11
  import { runWorker } from "./commands/worker.ts";
11
12
 
12
13
  // Get CLI name from bin field (assumes single key)
@@ -34,6 +35,10 @@ interface ParsedArgs {
34
35
  systemPromptFile: string;
35
36
  additionalArgs: string[];
36
37
  aiLoop: boolean;
38
+ preset: string;
39
+ open: boolean;
40
+ showHelp: boolean;
41
+ dbPath: string;
37
42
  }
38
43
 
39
44
  function parseArgs(args: string[]): ParsedArgs {
@@ -50,6 +55,10 @@ function parseArgs(args: string[]): ParsedArgs {
50
55
  let systemPromptFile = "";
51
56
  let additionalArgs: string[] = [];
52
57
  let aiLoop = false;
58
+ let preset = "";
59
+ let open = false;
60
+ let showHelp = false;
61
+ let dbPath = "";
53
62
 
54
63
  // Find if there's a "--" separator for additional args
55
64
  const separatorIndex = args.indexOf("--");
@@ -85,6 +94,18 @@ function parseArgs(args: string[]): ParsedArgs {
85
94
  i++;
86
95
  } else if (arg === "--ai-loop") {
87
96
  aiLoop = true;
97
+ } else if (arg === "--preset") {
98
+ preset = mainArgs[i + 1] || preset;
99
+ i++;
100
+ } else if (arg?.startsWith("--preset=")) {
101
+ preset = arg.slice("--preset=".length);
102
+ } else if (arg === "--open") {
103
+ open = true;
104
+ } else if (arg === "--help" || arg === "-h") {
105
+ showHelp = true;
106
+ } else if (arg === "--db") {
107
+ dbPath = mainArgs[i + 1] || dbPath;
108
+ i++;
88
109
  }
89
110
  }
90
111
 
@@ -102,285 +123,185 @@ function parseArgs(args: string[]): ParsedArgs {
102
123
  systemPromptFile,
103
124
  additionalArgs,
104
125
  aiLoop,
126
+ preset,
127
+ open,
128
+ showHelp,
129
+ dbPath,
105
130
  };
106
131
  }
107
132
 
108
- function Help() {
109
- const { exit } = useApp();
110
- useEffect(() => {
111
- exit();
112
- }, [exit]);
113
-
114
- return (
115
- <Box flexDirection="column" padding={1}>
116
- <Box>
117
- <Text bold color="cyan">
118
- {binName}
119
- </Text>
120
- <Text dimColor> v{pkg.version}</Text>
121
- </Box>
122
- <Text dimColor>{pkg.description}</Text>
123
-
124
- <Box marginTop={1} flexDirection="column">
125
- <Text bold>Usage:</Text>
126
- <Text>
127
- {" "}
128
- {binName} {"<command>"} [options]
129
- </Text>
130
- <Text dimColor>
131
- {" "}
132
- or: bunx {binName} {"<command>"} [options]
133
- </Text>
134
- </Box>
135
-
136
- <Box marginTop={1} flexDirection="column">
137
- <Text bold>Commands:</Text>
138
- <Box>
139
- <Box width={12}>
140
- <Text color="green">setup</Text>
141
- </Box>
142
- <Text>Set up agent-swarm in your project</Text>
143
- </Box>
144
- <Box>
145
- <Box width={12}>
146
- <Text color="green">hook</Text>
147
- </Box>
148
- <Text>Handle Claude Code hook events (stdin)</Text>
149
- </Box>
150
- <Box>
151
- <Box width={12}>
152
- <Text color="green">mcp</Text>
153
- </Box>
154
- <Text>Start the MCP HTTP server</Text>
155
- </Box>
156
- <Box>
157
- <Box width={12}>
158
- <Text color="green">claude</Text>
159
- </Box>
160
- <Text>Run Claude CLI</Text>
161
- </Box>
162
- <Box>
163
- <Box width={12}>
164
- <Text color="green">worker</Text>
165
- </Box>
166
- <Text>Run Claude in headless loop mode</Text>
167
- </Box>
168
- <Box>
169
- <Box width={12}>
170
- <Text color="green">lead</Text>
171
- </Box>
172
- <Text>Run Claude as lead agent in headless loop</Text>
173
- </Box>
174
- <Box>
175
- <Box width={12}>
176
- <Text color="green">version</Text>
177
- </Box>
178
- <Text>Show version number</Text>
179
- </Box>
180
- <Box>
181
- <Box width={12}>
182
- <Text color="green">help</Text>
183
- </Box>
184
- <Text>Show this help message</Text>
185
- </Box>
186
- </Box>
187
-
188
- <Box marginTop={1} flexDirection="column">
189
- <Text bold>Options for 'setup':</Text>
190
- <Box>
191
- <Box width={24}>
192
- <Text color="yellow">--dry-run</Text>
193
- </Box>
194
- <Text>Show what would be changed without writing</Text>
195
- </Box>
196
- <Box>
197
- <Box width={24}>
198
- <Text color="yellow">--restore</Text>
199
- </Box>
200
- <Text>Restore files from .bak backups</Text>
201
- </Box>
202
- <Box>
203
- <Box width={24}>
204
- <Text color="yellow">-y, --yes</Text>
205
- </Box>
206
- <Text>Non-interactive mode (use env vars)</Text>
207
- </Box>
208
- </Box>
209
-
210
- <Box marginTop={1} flexDirection="column">
211
- <Text bold>Options for 'mcp':</Text>
212
- <Box>
213
- <Box width={24}>
214
- <Text color="yellow">-p, --port {"<port>"}</Text>
215
- </Box>
216
- <Text>Port to listen on (default: 3013)</Text>
217
- </Box>
218
- <Box>
219
- <Box width={24}>
220
- <Text color="yellow">-k, --key {"<key>"}</Text>
221
- </Box>
222
- <Text>API key for authentication</Text>
223
- </Box>
224
- </Box>
225
-
226
- <Box marginTop={1} flexDirection="column">
227
- <Text bold>Options for 'claude':</Text>
228
- <Box>
229
- <Box width={24}>
230
- <Text color="yellow">-m, --msg {"<message>"}</Text>
231
- </Box>
232
- <Text>Message to send to Claude</Text>
233
- </Box>
234
- <Box>
235
- <Box width={24}>
236
- <Text color="yellow">--headless</Text>
237
- </Box>
238
- <Text>Run in headless mode (stream JSON output)</Text>
239
- </Box>
240
- <Box>
241
- <Box width={24}>
242
- <Text color="yellow">-- {"<args...>"}</Text>
243
- </Box>
244
- <Text>Additional arguments to pass to Claude CLI</Text>
245
- </Box>
246
- </Box>
247
-
248
- <Box marginTop={1} flexDirection="column">
249
- <Text bold>Options for 'worker' and 'lead':</Text>
250
- <Box>
251
- <Box width={30}>
252
- <Text color="yellow">-m, --msg {"<prompt>"}</Text>
253
- </Box>
254
- <Text>Custom prompt (default: /agent-swarm:start-worker)</Text>
255
- </Box>
256
- <Box>
257
- <Box width={30}>
258
- <Text color="yellow">--yolo</Text>
259
- </Box>
260
- <Text>Continue on errors instead of stopping</Text>
261
- </Box>
262
- <Box>
263
- <Box width={30}>
264
- <Text color="yellow">--system-prompt {"<text>"}</Text>
265
- </Box>
266
- <Text>Custom system prompt (appended to Claude)</Text>
267
- </Box>
268
- <Box>
269
- <Box width={30}>
270
- <Text color="yellow">--system-prompt-file {"<path>"}</Text>
271
- </Box>
272
- <Text>Read system prompt from file</Text>
273
- </Box>
274
- <Box>
275
- <Box width={30}>
276
- <Text color="yellow">--ai-loop</Text>
277
- </Box>
278
- <Text>Use AI-based polling (legacy mode)</Text>
279
- </Box>
280
- <Box>
281
- <Box width={30}>
282
- <Text color="yellow">-- {"<args...>"}</Text>
283
- </Box>
284
- <Text>Additional arguments to pass to Claude CLI</Text>
285
- </Box>
286
- </Box>
287
-
288
- <Box marginTop={1} flexDirection="column">
289
- <Text bold>Examples:</Text>
290
- <Text dimColor> {binName} setup</Text>
291
- <Text dimColor> {binName} setup --dry-run</Text>
292
- <Text dimColor> {binName} setup -y</Text>
293
- <Text dimColor> {binName} mcp</Text>
294
- <Text dimColor> {binName} mcp --port 8080</Text>
295
- <Text dimColor> {binName} mcp -p 8080 -k my-secret-key</Text>
296
- <Text dimColor> {binName} claude</Text>
297
- <Text dimColor> {binName} claude --headless -m "Hello"</Text>
298
- <Text dimColor> {binName} claude -- --resume</Text>
299
- <Text dimColor> {binName} worker</Text>
300
- <Text dimColor> {binName} worker --yolo</Text>
301
- <Text dimColor> {binName} worker -m "Custom prompt"</Text>
302
- <Text dimColor> {binName} worker --system-prompt "You are a Python specialist"</Text>
303
- <Text dimColor> {binName} worker --system-prompt-file ./prompts/specialist.txt</Text>
304
- <Text dimColor> {binName} lead</Text>
305
- <Text dimColor> {binName} lead --yolo</Text>
306
- <Text dimColor> {binName} lead -m "Custom prompt"</Text>
307
- <Text dimColor> {binName} lead --system-prompt "You are a project coordinator"</Text>
308
- </Box>
133
+ // --- Plain text help (no Ink, no terminal reset) ---
134
+
135
+ const COMMAND_HELP: Record<
136
+ string,
137
+ { usage: string; description: string; options: string; examples: string }
138
+ > = {
139
+ onboard: {
140
+ usage: `${binName} onboard [options]`,
141
+ description:
142
+ "Set up a new swarm from scratch using Docker Compose.\nInteractive wizard that collects credentials, generates docker-compose.yml + .env,\nstarts the stack, and verifies health.",
143
+ options: [
144
+ " --dry-run Preview what would be generated without writing",
145
+ " -y, --yes Non-interactive mode (reads from env vars)",
146
+ " --preset <name> Preset: dev, content, research, solo",
147
+ " -h, --help Show this help",
148
+ ].join("\n"),
149
+ examples: [
150
+ ` ${binName} onboard`,
151
+ ` ${binName} onboard --dry-run`,
152
+ ` ${binName} onboard --yes --preset=dev`,
153
+ ` ANTHROPIC_API_KEY=sk-... ${binName} onboard --yes --preset=solo`,
154
+ ].join("\n"),
155
+ },
156
+ connect: {
157
+ usage: `${binName} connect [options]`,
158
+ description:
159
+ "Connect this project to an existing swarm.\nCreates .mcp.json and .claude/settings.local.json with server URL and API key.\nAuto-reads API_KEY from .env if present.",
160
+ options: [
161
+ " --dry-run Show what would be changed without writing",
162
+ " --restore Restore files from .bak backups",
163
+ " -y, --yes Non-interactive mode (use env vars)",
164
+ " -h, --help Show this help",
165
+ ].join("\n"),
166
+ examples: [
167
+ ` ${binName} connect`,
168
+ ` ${binName} connect --dry-run`,
169
+ ` ${binName} connect -y`,
170
+ ].join("\n"),
171
+ },
172
+ api: {
173
+ usage: `${binName} api [options]`,
174
+ description: "Start the API + MCP HTTP server.",
175
+ options: [
176
+ " -p, --port <port> Port to listen on (default: 3013)",
177
+ " -k, --key <key> API key for authentication",
178
+ " --db <path> Database file path (default: ./agent-swarm-db.sqlite)",
179
+ " -h, --help Show this help",
180
+ ].join("\n"),
181
+ examples: [
182
+ ` ${binName} api`,
183
+ ` ${binName} api --port 8080 --key my-secret`,
184
+ ` ${binName} api --db /data/swarm.sqlite`,
185
+ ].join("\n"),
186
+ },
187
+ claude: {
188
+ usage: `${binName} claude [options] [-- <args...>]`,
189
+ description: "Run Claude CLI with optional message and headless mode.",
190
+ options: [
191
+ " -m, --msg <message> Message to send to Claude",
192
+ " --headless Run in headless mode (stream JSON output)",
193
+ " -- <args...> Additional arguments to pass to Claude CLI",
194
+ " -h, --help Show this help",
195
+ ].join("\n"),
196
+ examples: [
197
+ ` ${binName} claude`,
198
+ ` ${binName} claude --headless -m "Hello"`,
199
+ ` ${binName} claude -- --resume`,
200
+ ].join("\n"),
201
+ },
202
+ worker: {
203
+ usage: `${binName} worker [options] [-- <args...>]`,
204
+ description: "Run Claude in headless loop mode as a worker agent.",
205
+ options: [
206
+ " -m, --msg <prompt> Custom prompt (default: /agent-swarm:start-worker)",
207
+ " --yolo Continue on errors instead of stopping",
208
+ " --system-prompt <text> Custom system prompt (appended to Claude)",
209
+ " --system-prompt-file <path> Read system prompt from file",
210
+ " --ai-loop Use AI-based polling (legacy mode)",
211
+ " -- <args...> Additional arguments to pass to Claude CLI",
212
+ " -h, --help Show this help",
213
+ ].join("\n"),
214
+ examples: [
215
+ ` ${binName} worker`,
216
+ ` ${binName} worker --yolo`,
217
+ ` ${binName} worker -m "Custom prompt"`,
218
+ ` ${binName} worker --system-prompt "You are a Python specialist"`,
219
+ ].join("\n"),
220
+ },
221
+ lead: {
222
+ usage: `${binName} lead [options] [-- <args...>]`,
223
+ description: "Run Claude as lead agent in headless loop mode.\nSame options as worker.",
224
+ options: [
225
+ " -m, --msg <prompt> Custom prompt",
226
+ " --yolo Continue on errors instead of stopping",
227
+ " --system-prompt <text> Custom system prompt",
228
+ " --system-prompt-file <path> Read system prompt from file",
229
+ " --ai-loop Use AI-based polling (legacy mode)",
230
+ " -- <args...> Additional arguments to pass to Claude CLI",
231
+ " -h, --help Show this help",
232
+ ].join("\n"),
233
+ examples: [` ${binName} lead`, ` ${binName} lead --yolo`].join("\n"),
234
+ },
235
+ docs: {
236
+ usage: `${binName} docs [--open]`,
237
+ description:
238
+ "Show documentation URL.\nAll pages are also available in markdown format by appending .md to the URL.",
239
+ options: [
240
+ " --open Open docs in default browser",
241
+ " -h, --help Show this help",
242
+ ].join("\n"),
243
+ examples: [` ${binName} docs`, ` ${binName} docs --open`].join("\n"),
244
+ },
245
+ hook: {
246
+ usage: `${binName} hook`,
247
+ description:
248
+ "Handle Claude Code hook events from stdin.\nUsed internally by the agent-swarm hooks system.",
249
+ options: " -h, --help Show this help",
250
+ examples: ` ${binName} hook`,
251
+ },
252
+ artifact: {
253
+ usage: `${binName} artifact <subcommand> [options]`,
254
+ description: "Manage agent artifacts (serve, list, etc.).",
255
+ options: " -h, --help Show this help",
256
+ examples: [` ${binName} artifact serve`, ` ${binName} artifact help`].join("\n"),
257
+ },
258
+ };
259
+
260
+ function printHelp(command?: string) {
261
+ if (command && command !== "help" && COMMAND_HELP[command]) {
262
+ const cmd = COMMAND_HELP[command];
263
+ console.log(`\n${binName} ${command} v${pkg.version}\n`);
264
+ console.log(cmd.description);
265
+ console.log(`\nUsage:\n ${cmd.usage}\n`);
266
+ console.log(`Options:\n${cmd.options}\n`);
267
+ console.log(`Examples:\n${cmd.examples}\n`);
268
+ return;
269
+ }
309
270
 
310
- <Box marginTop={1} flexDirection="column">
311
- <Text bold>Environment variables:</Text>
312
- <Box>
313
- <Box width={24}>
314
- <Text color="magenta">PORT</Text>
315
- </Box>
316
- <Text>Default port for the MCP server</Text>
317
- </Box>
318
- <Box>
319
- <Box width={24}>
320
- <Text color="magenta">API_KEY</Text>
321
- </Box>
322
- <Text>API key for authentication (Bearer token)</Text>
323
- </Box>
324
- <Box>
325
- <Box width={24}>
326
- <Text color="magenta">MCP_BASE_URL</Text>
327
- </Box>
328
- <Text>Base URL for the MCP server (used by setup)</Text>
329
- </Box>
330
- <Box>
331
- <Box width={24}>
332
- <Text color="magenta">AGENT_ID</Text>
333
- </Box>
334
- <Text>UUID for agent identification</Text>
335
- </Box>
336
- <Box>
337
- <Box width={24}>
338
- <Text color="magenta">SESSION_ID</Text>
339
- </Box>
340
- <Text>Folder name for worker logs (auto-generated)</Text>
341
- </Box>
342
- <Box>
343
- <Box width={24}>
344
- <Text color="magenta">YOLO</Text>
345
- </Box>
346
- <Text>If "true", worker continues on errors</Text>
347
- </Box>
348
- <Box>
349
- <Box width={32}>
350
- <Text color="magenta">LOG_DIR</Text>
351
- </Box>
352
- <Text>Directory for agent logs, defaults to ./logs</Text>
353
- </Box>
354
- <Box>
355
- <Box width={32}>
356
- <Text color="magenta">SYSTEM_PROMPT</Text>
357
- </Box>
358
- <Text>Custom system prompt for worker</Text>
359
- </Box>
360
- <Box>
361
- <Box width={32}>
362
- <Text color="magenta">SYSTEM_PROMPT_FILE</Text>
363
- </Box>
364
- <Text>Path to system prompt file</Text>
365
- </Box>
366
- <Box>
367
- <Box width={32}>
368
- <Text color="magenta">AI_LOOP</Text>
369
- </Box>
370
- <Text>If "true", use AI-based polling</Text>
371
- </Box>
372
- </Box>
373
- </Box>
374
- );
271
+ // General help
272
+ console.log(`\n${binName} v${pkg.version}`);
273
+ console.log(`${pkg.description}\n`);
274
+ console.log(`Usage: ${binName} <command> [options]\n`);
275
+ console.log("Commands:");
276
+ const commands = [
277
+ ["onboard", "Set up a new swarm from scratch (Docker Compose)"],
278
+ ["connect", "Connect this project to an existing swarm"],
279
+ ["worker", "Run Claude in headless loop mode"],
280
+ ["lead", "Run Claude as lead agent in headless loop"],
281
+ ["api", "Start the API + MCP HTTP server"],
282
+ ["claude", "Run Claude CLI"],
283
+ ["hook", "Handle Claude Code hook events (stdin)"],
284
+ ["artifact", "Manage agent artifacts"],
285
+ ["docs", "Open documentation (--open to launch in browser)"],
286
+ ["version", "Show version number"],
287
+ ["help", "Show this help message"],
288
+ ];
289
+ for (const entry of commands) {
290
+ console.log(` ${(entry[0] ?? "").padEnd(12)} ${entry[1] ?? ""}`);
291
+ }
292
+ console.log(`\nRun '${binName} <command> --help' for details on a specific command.\n`);
375
293
  }
376
294
 
377
- function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
295
+ function McpServer({ port, apiKey, dbPath }: { port: string; apiKey: string; dbPath: string }) {
378
296
  const [status, setStatus] = useState<"starting" | "running" | "error">("starting");
379
297
  const [error, setError] = useState<string | null>(null);
380
298
 
381
299
  useEffect(() => {
382
300
  process.env.PORT = port;
383
301
  process.env.API_KEY = apiKey;
302
+ if (dbPath) {
303
+ process.env.DATABASE_PATH = dbPath;
304
+ }
384
305
 
385
306
  import("./http.ts")
386
307
  .then(() => {
@@ -390,12 +311,12 @@ function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
390
311
  setStatus("error");
391
312
  setError(err.message);
392
313
  });
393
- }, [port, apiKey]);
314
+ }, [port, apiKey, dbPath]);
394
315
 
395
316
  if (status === "error") {
396
317
  return (
397
318
  <Box flexDirection="column" padding={1}>
398
- <Text color="red">✗ Failed to start MCP server</Text>
319
+ <Text color="red">✗ Failed to start API server</Text>
399
320
  {error && <Text dimColor>{error}</Text>}
400
321
  </Box>
401
322
  );
@@ -404,7 +325,7 @@ function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
404
325
  if (status === "starting") {
405
326
  return (
406
327
  <Box padding={1}>
407
- <Spinner label="Starting MCP server..." />
328
+ <Spinner label="Starting API server..." />
408
329
  </Box>
409
330
  );
410
331
  }
@@ -413,7 +334,7 @@ function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
413
334
  <Box flexDirection="column" padding={1}>
414
335
  <Box>
415
336
  <Text color="green">✓ </Text>
416
- <Text>MCP HTTP server running on </Text>
337
+ <Text>API server running on </Text>
417
338
  <Text color="cyan" bold>
418
339
  http://localhost:{port}/mcp
419
340
  </Text>
@@ -527,21 +448,6 @@ function UnknownCommand({ command }: { command: string }) {
527
448
  );
528
449
  }
529
450
 
530
- function Version() {
531
- const { exit } = useApp();
532
- useEffect(() => {
533
- exit();
534
- }, [exit]);
535
-
536
- return (
537
- <Box padding={1}>
538
- <Text>
539
- {binName} v{pkg.version}
540
- </Text>
541
- </Box>
542
- );
543
- }
544
-
545
451
  function App({ args }: { args: ParsedArgs }) {
546
452
  const {
547
453
  command,
@@ -557,13 +463,16 @@ function App({ args }: { args: ParsedArgs }) {
557
463
  systemPromptFile,
558
464
  additionalArgs,
559
465
  aiLoop,
466
+ preset,
560
467
  } = args;
561
468
 
562
469
  switch (command) {
563
- case "setup":
564
- return <Setup dryRun={dryRun} restore={restore} yes={yes} />;
565
- case "mcp":
566
- return <McpServer port={port} apiKey={key} />;
470
+ case "onboard":
471
+ return <Onboard dryRun={dryRun} yes={yes} preset={preset || undefined} />;
472
+ case "connect":
473
+ return <Connect dryRun={dryRun} restore={restore} yes={yes} />;
474
+ case "api":
475
+ return <McpServer port={port} apiKey={key} dbPath={args.dbPath} />;
567
476
  case "claude":
568
477
  return <ClaudeRunner msg={msg} headless={headless} additionalArgs={additionalArgs} />;
569
478
  case "worker":
@@ -588,21 +497,44 @@ function App({ args }: { args: ParsedArgs }) {
588
497
  aiLoop={aiLoop}
589
498
  />
590
499
  );
591
- case "version":
592
- return <Version />;
593
- case "help":
594
- case undefined:
595
- return <Help />;
500
+ // version, help, docs handled before render()
596
501
  default:
597
- return <UnknownCommand command={command} />;
502
+ return <UnknownCommand command={command ?? ""} />;
598
503
  }
599
504
  }
600
505
 
601
506
  const args = parseArgs(process.argv.slice(2));
602
507
 
603
- // Handle hook command separately (no UI needed)
604
- if (args.command === "hook") {
508
+ // Handle non-UI commands separately (plain stdout, no Ink)
509
+ if (args.showHelp || args.command === "help" || args.command === undefined) {
510
+ printHelp(args.showHelp ? args.command : undefined);
511
+ process.exit(0);
512
+ } else if (args.command === "version") {
513
+ console.log(`${binName} v${pkg.version}`);
514
+ process.exit(0);
515
+ } else if (args.command === "docs") {
516
+ const docsUrl = "https://docs.agent-swarm.dev";
517
+ console.log(`\n${binName} docs — v${pkg.version}\n`);
518
+ console.log(`Documentation: ${docsUrl}\n`);
519
+ console.log("All pages are also available in markdown format by appending .md to the URL.");
520
+ console.log(`Example: ${docsUrl}/getting-started.md\n`);
521
+ if (args.open) {
522
+ await Bun.$`open ${docsUrl}`.quiet().catch(() => {
523
+ console.log(`Could not open browser. Visit: ${docsUrl}`);
524
+ });
525
+ }
526
+ process.exit(0);
527
+ } else if (args.command === "hook") {
605
528
  runHook();
529
+ } else if (args.command === "artifact") {
530
+ // Pass all args after "artifact" directly
531
+ const artifactArgs = process.argv.slice(process.argv.indexOf("artifact") + 1);
532
+ const { runArtifact } = await import("./commands/artifact");
533
+ await runArtifact(artifactArgs[0] || "help", {
534
+ additionalArgs: artifactArgs.slice(1),
535
+ port: args.port,
536
+ key: args.key,
537
+ });
606
538
  } else {
607
539
  render(<App args={args} />);
608
540
  }