@desplega.ai/agent-swarm 1.49.0 → 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. package/README.md +1 -1
  2. package/openapi.json +2070 -728
  3. package/package.json +10 -1
  4. package/src/agentmail/handlers.ts +65 -10
  5. package/src/agentmail/templates.ts +111 -0
  6. package/src/be/db.ts +1233 -7
  7. package/src/be/migrations/014_prompt_templates.sql +33 -0
  8. package/src/be/migrations/015_workflow_workspace.sql +3 -0
  9. package/src/be/migrations/016_active_session_runner_session.sql +4 -0
  10. package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
  11. package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
  12. package/src/be/migrations/019_skills.sql +65 -0
  13. package/src/be/migrations/020_approval_requests.sql +41 -0
  14. package/src/be/seed.ts +62 -0
  15. package/src/be/skill-parser.ts +70 -0
  16. package/src/be/skill-sync.ts +106 -0
  17. package/src/commands/runner.ts +320 -132
  18. package/src/commands/templates.ts +172 -0
  19. package/src/github/handlers.ts +292 -77
  20. package/src/github/mentions-aliases.test.ts +73 -0
  21. package/src/github/mentions.test.ts +3 -3
  22. package/src/github/mentions.ts +32 -6
  23. package/src/github/templates.ts +398 -0
  24. package/src/gitlab/handlers.ts +63 -22
  25. package/src/gitlab/templates.ts +140 -0
  26. package/src/heartbeat/heartbeat.ts +19 -10
  27. package/src/heartbeat/templates.ts +30 -0
  28. package/src/http/active-sessions.ts +27 -0
  29. package/src/http/approval-requests.ts +247 -0
  30. package/src/http/config.ts +3 -3
  31. package/src/http/index.ts +9 -2
  32. package/src/http/poll.ts +135 -14
  33. package/src/http/prompt-templates.ts +412 -0
  34. package/src/http/schedules.ts +35 -0
  35. package/src/http/skills.ts +479 -0
  36. package/src/http/workflows.ts +8 -0
  37. package/src/linear/sync.ts +28 -4
  38. package/src/linear/templates.ts +47 -0
  39. package/src/prompts/base-prompt.ts +41 -490
  40. package/src/prompts/registry.ts +57 -0
  41. package/src/prompts/resolver.ts +296 -0
  42. package/src/prompts/session-templates.ts +604 -0
  43. package/src/providers/claude-adapter.ts +15 -2
  44. package/src/providers/pi-mono-extension.ts +5 -1
  45. package/src/scheduler/scheduler.ts +125 -91
  46. package/src/server.ts +44 -0
  47. package/src/slack/assistant.ts +7 -4
  48. package/src/slack/channel-activity.ts +177 -0
  49. package/src/slack/handlers.ts +21 -6
  50. package/src/slack/templates.ts +55 -0
  51. package/src/tests/approval-requests.test.ts +735 -0
  52. package/src/tests/artifact-sdk.test.ts +12 -12
  53. package/src/tests/base-prompt.test.ts +49 -49
  54. package/src/tests/channel-activity.test.ts +363 -0
  55. package/src/tests/heartbeat.test.ts +1 -0
  56. package/src/tests/linear-webhook.test.ts +7 -3
  57. package/src/tests/pool-session-logs.test.ts +199 -0
  58. package/src/tests/prompt-template-github.test.ts +682 -0
  59. package/src/tests/prompt-template-remaining.test.ts +504 -0
  60. package/src/tests/prompt-template-resolver.test.ts +621 -0
  61. package/src/tests/prompt-template-session.test.ts +363 -0
  62. package/src/tests/prompt-templates-db.test.ts +616 -0
  63. package/src/tests/self-improvement.test.ts +8 -7
  64. package/src/tests/skill-parser.test.ts +178 -0
  65. package/src/tests/skill-sync.test.ts +171 -0
  66. package/src/tests/slack-metadata-inheritance.test.ts +1 -1
  67. package/src/tests/slack-thread-followups.test.ts +1 -1
  68. package/src/tests/structured-output.test.ts +0 -4
  69. package/src/tests/tool-annotations.test.ts +2 -1
  70. package/src/tests/update-profile-agentid.test.ts +248 -0
  71. package/src/tests/update-profile-auth.test.ts +195 -0
  72. package/src/tests/workflow-async-v2.test.ts +126 -4
  73. package/src/tests/workflow-definition-validation.test.ts +76 -0
  74. package/src/tests/workflow-executors.test.ts +4 -2
  75. package/src/tests/workflow-retry-v2.test.ts +1 -1
  76. package/src/tests/workflow-schedule-trigger.test.ts +104 -0
  77. package/src/tests/workflow-workspace.test.ts +272 -0
  78. package/src/tools/prompt-templates/delete.ts +86 -0
  79. package/src/tools/prompt-templates/get.ts +89 -0
  80. package/src/tools/prompt-templates/index.ts +5 -0
  81. package/src/tools/prompt-templates/list.ts +95 -0
  82. package/src/tools/prompt-templates/preview.ts +84 -0
  83. package/src/tools/prompt-templates/set.ts +117 -0
  84. package/src/tools/request-human-input.ts +106 -0
  85. package/src/tools/skills/index.ts +11 -0
  86. package/src/tools/skills/skill-create.ts +105 -0
  87. package/src/tools/skills/skill-delete.ts +67 -0
  88. package/src/tools/skills/skill-get.ts +75 -0
  89. package/src/tools/skills/skill-install-remote.ts +152 -0
  90. package/src/tools/skills/skill-install.ts +101 -0
  91. package/src/tools/skills/skill-list.ts +77 -0
  92. package/src/tools/skills/skill-publish.ts +123 -0
  93. package/src/tools/skills/skill-search.ts +43 -0
  94. package/src/tools/skills/skill-sync-remote.ts +128 -0
  95. package/src/tools/skills/skill-uninstall.ts +60 -0
  96. package/src/tools/skills/skill-update.ts +128 -0
  97. package/src/tools/store-progress.ts +22 -4
  98. package/src/tools/task-action.ts +20 -0
  99. package/src/tools/templates.ts +53 -0
  100. package/src/tools/tool-config.ts +23 -0
  101. package/src/tools/update-profile.ts +106 -34
  102. package/src/tools/workflows/create-workflow.ts +19 -1
  103. package/src/tools/workflows/update-workflow.ts +16 -1
  104. package/src/types.ts +109 -2
  105. package/src/workflows/definition.ts +30 -12
  106. package/src/workflows/engine.ts +40 -14
  107. package/src/workflows/executors/agent-task.ts +14 -3
  108. package/src/workflows/executors/human-in-the-loop.ts +160 -0
  109. package/src/workflows/executors/registry.ts +2 -0
  110. package/src/workflows/index.ts +1 -1
  111. package/src/workflows/recovery.ts +72 -0
  112. package/src/workflows/resume.ts +162 -12
  113. package/src/workflows/triggers.ts +31 -2
  114. package/src/workflows/version.ts +2 -0
  115. package/.claude/settings.json +0 -84
  116. package/.claude/settings.local.json +0 -117
  117. package/.dockerignore +0 -61
  118. package/.editorconfig +0 -15
  119. package/.entire/settings.json +0 -4
  120. package/.env.docker.example +0 -56
  121. package/.env.example +0 -78
  122. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
  123. package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
  124. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  125. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
  126. package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
  127. package/.github/workflows/ci.yml +0 -52
  128. package/.github/workflows/docker-and-deploy.yml +0 -132
  129. package/.github/workflows/merge-gate.yml +0 -233
  130. package/.opencode/plugins/entire.ts +0 -133
  131. package/.superset/config.json +0 -6
  132. package/.wts-config.json +0 -4
  133. package/.wts-setup.ts +0 -171
  134. package/CHANGELOG.md +0 -447
  135. package/CLAUDE.md +0 -521
  136. package/CONTRIBUTING.md +0 -315
  137. package/DEPLOYMENT.md +0 -622
  138. package/Dockerfile +0 -65
  139. package/Dockerfile.worker +0 -189
  140. package/MCP.md +0 -841
  141. package/UI.md +0 -40
  142. package/api-entrypoint.sh +0 -56
  143. package/assets/agent-swarm-logo-orange.png +0 -0
  144. package/assets/agent-swarm-logo.png +0 -0
  145. package/assets/agent-swarm.mp4 +0 -0
  146. package/assets/agent-swarm.png +0 -0
  147. package/biome.json +0 -39
  148. package/deploy/DEPLOY.md +0 -60
  149. package/deploy/agent-swarm.service +0 -17
  150. package/deploy/docker-push.ts +0 -30
  151. package/deploy/install.ts +0 -85
  152. package/deploy/prod-db.ts +0 -42
  153. package/deploy/uninstall.ts +0 -12
  154. package/deploy/update.ts +0 -21
  155. package/depot.json +0 -1
  156. package/docker-compose.example.yml +0 -350
  157. package/docker-compose.local.yml +0 -119
  158. package/docker-entrypoint.sh +0 -632
  159. package/docs-site/app/api/search/route.ts +0 -4
  160. package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
  161. package/docs-site/app/docs/layout.tsx +0 -12
  162. package/docs-site/app/globals.css +0 -24
  163. package/docs-site/app/layout.config.tsx +0 -34
  164. package/docs-site/app/layout.tsx +0 -119
  165. package/docs-site/app/llms-full.txt/route.ts +0 -11
  166. package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
  167. package/docs-site/app/llms.txt/route.ts +0 -8
  168. package/docs-site/app/page.tsx +0 -5
  169. package/docs-site/app/robots.ts +0 -13
  170. package/docs-site/app/sitemap.ts +0 -37
  171. package/docs-site/components/api-page.client.tsx +0 -4
  172. package/docs-site/components/api-page.tsx +0 -7
  173. package/docs-site/components/mdx/mermaid.tsx +0 -55
  174. package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
  175. package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
  176. package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
  177. package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
  178. package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
  179. package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
  180. package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
  181. package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
  182. package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
  183. package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
  184. package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
  185. package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
  186. package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
  187. package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
  188. package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
  189. package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
  190. package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
  191. package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
  192. package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
  193. package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
  194. package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
  195. package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
  196. package/docs-site/content/docs/(documentation)/index.mdx +0 -65
  197. package/docs-site/content/docs/(documentation)/meta.json +0 -19
  198. package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
  199. package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
  200. package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
  201. package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
  202. package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
  203. package/docs-site/content/docs/api-reference/agents.mdx +0 -9
  204. package/docs-site/content/docs/api-reference/channels.mdx +0 -9
  205. package/docs-site/content/docs/api-reference/config.mdx +0 -9
  206. package/docs-site/content/docs/api-reference/debug.mdx +0 -9
  207. package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
  208. package/docs-site/content/docs/api-reference/epics.mdx +0 -9
  209. package/docs-site/content/docs/api-reference/index.mdx +0 -32
  210. package/docs-site/content/docs/api-reference/memory.mdx +0 -9
  211. package/docs-site/content/docs/api-reference/meta.json +0 -25
  212. package/docs-site/content/docs/api-reference/poll.mdx +0 -9
  213. package/docs-site/content/docs/api-reference/repos.mdx +0 -9
  214. package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
  215. package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
  216. package/docs-site/content/docs/api-reference/stats.mdx +0 -9
  217. package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
  218. package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
  219. package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
  220. package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
  221. package/docs-site/content/docs/meta.json +0 -3
  222. package/docs-site/lib/get-llm-text.ts +0 -10
  223. package/docs-site/lib/openapi.ts +0 -23
  224. package/docs-site/lib/source.ts +0 -8
  225. package/docs-site/mdx-components.tsx +0 -13
  226. package/docs-site/next.config.mjs +0 -29
  227. package/docs-site/package.json +0 -35
  228. package/docs-site/pnpm-lock.yaml +0 -5407
  229. package/docs-site/postcss.config.mjs +0 -8
  230. package/docs-site/public/logo.png +0 -0
  231. package/docs-site/scripts/generate-docs.ts +0 -171
  232. package/docs-site/source.config.ts +0 -17
  233. package/docs-site/tsconfig.json +0 -46
  234. package/ecosystem.config.cjs +0 -66
  235. package/landing/next.config.ts +0 -14
  236. package/landing/package.json +0 -31
  237. package/landing/pnpm-lock.yaml +0 -1091
  238. package/landing/postcss.config.mjs +0 -8
  239. package/landing/public/apple-touch-icon.png +0 -0
  240. package/landing/public/favicon.ico +0 -0
  241. package/landing/public/logo.png +0 -0
  242. package/landing/public/og-image.png +0 -0
  243. package/landing/public/omghost-desplega.svg +0 -30
  244. package/landing/public/omghost-openfort.svg +0 -9
  245. package/landing/src/app/actions/waitlist.ts +0 -25
  246. package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
  247. package/landing/src/app/blog/page.tsx +0 -162
  248. package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
  249. package/landing/src/app/examples/page.tsx +0 -174
  250. package/landing/src/app/examples/x402/page.tsx +0 -456
  251. package/landing/src/app/globals.css +0 -122
  252. package/landing/src/app/layout.tsx +0 -134
  253. package/landing/src/app/page.tsx +0 -27
  254. package/landing/src/app/robots.ts +0 -13
  255. package/landing/src/app/sitemap.ts +0 -44
  256. package/landing/src/components/architecture.tsx +0 -163
  257. package/landing/src/components/cta.tsx +0 -52
  258. package/landing/src/components/features.tsx +0 -160
  259. package/landing/src/components/footer.tsx +0 -100
  260. package/landing/src/components/hero.tsx +0 -217
  261. package/landing/src/components/how-it-works.tsx +0 -165
  262. package/landing/src/components/navbar.tsx +0 -147
  263. package/landing/src/components/waitlist.tsx +0 -110
  264. package/landing/src/components/why-choose.tsx +0 -149
  265. package/landing/src/components/workshops.tsx +0 -328
  266. package/landing/src/lib/utils.ts +0 -6
  267. package/landing/tsconfig.json +0 -41
  268. package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
  269. package/new-ui/CLAUDE.md +0 -92
  270. package/new-ui/README.md +0 -73
  271. package/new-ui/biome.json +0 -42
  272. package/new-ui/components.json +0 -21
  273. package/new-ui/index.html +0 -25
  274. package/new-ui/package.json +0 -49
  275. package/new-ui/pnpm-lock.yaml +0 -4845
  276. package/new-ui/public/logo.png +0 -0
  277. package/new-ui/src/api/client.ts +0 -814
  278. package/new-ui/src/api/hooks/index.ts +0 -64
  279. package/new-ui/src/api/hooks/use-agents.ts +0 -58
  280. package/new-ui/src/api/hooks/use-channels.ts +0 -115
  281. package/new-ui/src/api/hooks/use-config-api.ts +0 -46
  282. package/new-ui/src/api/hooks/use-costs.ts +0 -122
  283. package/new-ui/src/api/hooks/use-db-query.ts +0 -29
  284. package/new-ui/src/api/hooks/use-epics.ts +0 -75
  285. package/new-ui/src/api/hooks/use-repos.ts +0 -61
  286. package/new-ui/src/api/hooks/use-schedules.ts +0 -81
  287. package/new-ui/src/api/hooks/use-services.ts +0 -16
  288. package/new-ui/src/api/hooks/use-stats.ts +0 -27
  289. package/new-ui/src/api/hooks/use-tasks.ts +0 -89
  290. package/new-ui/src/api/hooks/use-workflows.ts +0 -109
  291. package/new-ui/src/api/types.ts +0 -549
  292. package/new-ui/src/app/App.tsx +0 -13
  293. package/new-ui/src/app/providers.tsx +0 -32
  294. package/new-ui/src/app/router.tsx +0 -52
  295. package/new-ui/src/components/layout/app-header.tsx +0 -47
  296. package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
  297. package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
  298. package/new-ui/src/components/layout/config-guard.tsx +0 -22
  299. package/new-ui/src/components/layout/root-layout.tsx +0 -40
  300. package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
  301. package/new-ui/src/components/shared/command-menu.tsx +0 -131
  302. package/new-ui/src/components/shared/data-grid.tsx +0 -141
  303. package/new-ui/src/components/shared/empty-state.tsx +0 -24
  304. package/new-ui/src/components/shared/error-boundary.tsx +0 -72
  305. package/new-ui/src/components/shared/json-viewer.tsx +0 -47
  306. package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
  307. package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
  308. package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
  309. package/new-ui/src/components/shared/stats-bar.tsx +0 -132
  310. package/new-ui/src/components/shared/status-badge.tsx +0 -131
  311. package/new-ui/src/components/shared/usage-summary.tsx +0 -179
  312. package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
  313. package/new-ui/src/components/ui/alert.tsx +0 -60
  314. package/new-ui/src/components/ui/avatar.tsx +0 -96
  315. package/new-ui/src/components/ui/badge.tsx +0 -46
  316. package/new-ui/src/components/ui/button.tsx +0 -62
  317. package/new-ui/src/components/ui/card.tsx +0 -75
  318. package/new-ui/src/components/ui/command.tsx +0 -160
  319. package/new-ui/src/components/ui/dialog.tsx +0 -143
  320. package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
  321. package/new-ui/src/components/ui/input.tsx +0 -21
  322. package/new-ui/src/components/ui/label.tsx +0 -19
  323. package/new-ui/src/components/ui/progress.tsx +0 -26
  324. package/new-ui/src/components/ui/scroll-area.tsx +0 -54
  325. package/new-ui/src/components/ui/select.tsx +0 -175
  326. package/new-ui/src/components/ui/separator.tsx +0 -28
  327. package/new-ui/src/components/ui/sheet.tsx +0 -132
  328. package/new-ui/src/components/ui/sidebar.tsx +0 -691
  329. package/new-ui/src/components/ui/skeleton.tsx +0 -13
  330. package/new-ui/src/components/ui/sonner.tsx +0 -35
  331. package/new-ui/src/components/ui/switch.tsx +0 -33
  332. package/new-ui/src/components/ui/table.tsx +0 -92
  333. package/new-ui/src/components/ui/tabs.tsx +0 -79
  334. package/new-ui/src/components/ui/textarea.tsx +0 -18
  335. package/new-ui/src/components/ui/tooltip.tsx +0 -51
  336. package/new-ui/src/components/workflows/action-node.tsx +0 -53
  337. package/new-ui/src/components/workflows/condition-node.tsx +0 -50
  338. package/new-ui/src/components/workflows/graph-utils.ts +0 -124
  339. package/new-ui/src/components/workflows/json-tree.tsx +0 -189
  340. package/new-ui/src/components/workflows/node-styles.ts +0 -10
  341. package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
  342. package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
  343. package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
  344. package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
  345. package/new-ui/src/hooks/use-config.ts +0 -203
  346. package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
  347. package/new-ui/src/hooks/use-mobile.ts +0 -19
  348. package/new-ui/src/hooks/use-theme.ts +0 -60
  349. package/new-ui/src/lib/config.ts +0 -188
  350. package/new-ui/src/lib/slugs.ts +0 -71
  351. package/new-ui/src/lib/utils.ts +0 -120
  352. package/new-ui/src/main.tsx +0 -11
  353. package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
  354. package/new-ui/src/pages/agents/page.tsx +0 -134
  355. package/new-ui/src/pages/chat/page.tsx +0 -674
  356. package/new-ui/src/pages/config/page.tsx +0 -1109
  357. package/new-ui/src/pages/dashboard/page.tsx +0 -454
  358. package/new-ui/src/pages/debug/page.tsx +0 -275
  359. package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
  360. package/new-ui/src/pages/epics/page.tsx +0 -321
  361. package/new-ui/src/pages/not-found/page.tsx +0 -18
  362. package/new-ui/src/pages/repos/page.tsx +0 -369
  363. package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
  364. package/new-ui/src/pages/schedules/page.tsx +0 -477
  365. package/new-ui/src/pages/services/page.tsx +0 -128
  366. package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
  367. package/new-ui/src/pages/tasks/page.tsx +0 -592
  368. package/new-ui/src/pages/usage/page.tsx +0 -195
  369. package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
  370. package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
  371. package/new-ui/src/pages/workflows/page.tsx +0 -266
  372. package/new-ui/src/styles/ag-grid.css +0 -36
  373. package/new-ui/src/styles/globals.css +0 -213
  374. package/new-ui/test-results/.last-run.json +0 -4
  375. package/new-ui/tsconfig.app.json +0 -34
  376. package/new-ui/tsconfig.json +0 -4
  377. package/new-ui/tsconfig.node.json +0 -26
  378. package/new-ui/vercel.json +0 -4
  379. package/new-ui/vite.config.ts +0 -28
  380. package/plugin/README.md +0 -1
  381. package/plugin/build-pi-skills.ts +0 -233
  382. package/plugin/hooks/hooks.json +0 -71
  383. package/prek.toml +0 -75
  384. package/pyproject.toml +0 -9
  385. package/scripts/check-db-boundary.sh +0 -60
  386. package/scripts/e2e-docker-provider.ts +0 -820
  387. package/scripts/e2e-io-schemas-test.ts +0 -807
  388. package/scripts/e2e-provider-test.ts +0 -220
  389. package/scripts/e2e-workflow-redesign.sh +0 -229
  390. package/scripts/e2e-workflow-test.sh +0 -285
  391. package/scripts/e2e-workflow-test.ts +0 -857
  392. package/scripts/generate-mcp-docs.ts +0 -415
  393. package/scripts/generate-openapi.ts +0 -26
  394. package/scripts/measure-tool-tokens.ts +0 -118
  395. package/scripts/x402-e2e-test.ts +0 -195
  396. package/scripts/x402-test-server.ts +0 -236
  397. package/scripts/x402-testnet-e2e.ts +0 -668
  398. package/slack-manifest.json +0 -88
  399. package/templates-ui/README.md +0 -46
  400. package/templates-ui/components.json +0 -17
  401. package/templates-ui/eslint.config.mjs +0 -18
  402. package/templates-ui/next.config.ts +0 -7
  403. package/templates-ui/package.json +0 -35
  404. package/templates-ui/pnpm-lock.yaml +0 -4571
  405. package/templates-ui/postcss.config.mjs +0 -7
  406. package/templates-ui/public/file.svg +0 -1
  407. package/templates-ui/public/globe.svg +0 -1
  408. package/templates-ui/public/logo.png +0 -0
  409. package/templates-ui/public/next.svg +0 -1
  410. package/templates-ui/public/vercel.svg +0 -1
  411. package/templates-ui/public/window.svg +0 -1
  412. package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
  413. package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
  414. package/templates-ui/src/app/api/templates/route.ts +0 -18
  415. package/templates-ui/src/app/builder/page.tsx +0 -37
  416. package/templates-ui/src/app/globals.css +0 -94
  417. package/templates-ui/src/app/layout.tsx +0 -79
  418. package/templates-ui/src/app/page.tsx +0 -38
  419. package/templates-ui/src/app/robots.ts +0 -11
  420. package/templates-ui/src/app/sitemap.ts +0 -31
  421. package/templates-ui/src/components/compose-builder.tsx +0 -442
  422. package/templates-ui/src/components/compose-preview.tsx +0 -117
  423. package/templates-ui/src/components/file-preview.tsx +0 -77
  424. package/templates-ui/src/components/footer.tsx +0 -40
  425. package/templates-ui/src/components/header.tsx +0 -41
  426. package/templates-ui/src/components/template-card.tsx +0 -87
  427. package/templates-ui/src/components/template-detail.tsx +0 -125
  428. package/templates-ui/src/components/template-gallery.tsx +0 -263
  429. package/templates-ui/src/components/ui/badge.tsx +0 -36
  430. package/templates-ui/src/components/ui/button.tsx +0 -57
  431. package/templates-ui/src/components/ui/card.tsx +0 -76
  432. package/templates-ui/src/components/ui/separator.tsx +0 -31
  433. package/templates-ui/src/components/ui/tooltip.tsx +0 -32
  434. package/templates-ui/src/lib/compose-generator.ts +0 -241
  435. package/templates-ui/src/lib/templates.ts +0 -137
  436. package/templates-ui/src/lib/utils.ts +0 -6
  437. package/templates-ui/tsconfig.json +0 -34
  438. package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
  439. package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
  440. package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
  441. package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
  442. package/thoughts/shared/plans/.gitkeep +0 -0
  443. package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
  444. package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
  445. package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
  446. package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
  447. package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
  448. package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
  449. package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
  450. package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
  451. package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
  452. package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
  453. package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
  454. package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
  455. package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
  456. package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
  457. package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
  458. package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
  459. package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
  460. package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
  461. package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
  462. package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
  463. package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
  464. package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
  465. package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
  466. package/thoughts/shared/research/.gitkeep +0 -0
  467. package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
  468. package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
  469. package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
  470. package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
  471. package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
  472. package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
  473. package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
  474. package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
  475. package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
  476. package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
  477. package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
  478. package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
  479. package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
  480. package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
  481. package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
  482. package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
  483. package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
  484. package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
  485. package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
  486. package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
  487. package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
  488. package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
  489. package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
  490. package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
  491. package/thoughts/taras/plans/2026-02-20-auto-improvement.md +0 -803
  492. package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
  493. package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
  494. package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
  495. package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
  496. package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
  497. package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
  498. package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
  499. package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
  500. package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
  501. package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
  502. package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
  503. package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
  504. package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
  505. package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
  506. package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
  507. package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
  508. package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
  509. package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
  510. package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
  511. package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
  512. package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
  513. package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
  514. package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
  515. package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
  516. package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
  517. package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
  518. package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
  519. package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
  520. package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
  521. package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
  522. package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
  523. package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
  524. package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
  525. package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
  526. package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
  527. package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
  528. package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
  529. package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
  530. package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
  531. package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
  532. package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
  533. package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
  534. package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
  535. package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
  536. package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
  537. package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
  538. package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
  539. package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
  540. package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
  541. package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
  542. package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
  543. package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
  544. package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
  545. package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
  546. package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
  547. package/tsconfig.json +0 -37
@@ -1,437 +0,0 @@
1
- ---
2
- date: 2026-03-11T12:00:00Z
3
- topic: "Archil Shared Disk Write Access Strategies"
4
- author: "Claude (research for Taras)"
5
- status: "Research complete, awaiting decision"
6
- tags: [research, archil, shared-disk, multi-agent, ownership, concurrency, fly-io]
7
- ---
8
-
9
- # Archil Shared Disk Write Access Strategies
10
-
11
- ## Problem Statement
12
-
13
- We run 3 workers + 1 lead on Fly.io, each in its own Docker container. All mount the same Archil shared disk at `/workspace/shared` using `--shared` flag. Archil's delegation model grants **exclusive write ownership** to one client at a time per file/directory (recursive). The per-agent directories (`thoughts/$AGENT_ID/`) are fine because each agent checks out its own subtree. The problem is with **truly shared write targets**:
14
-
15
- | Shared Write Target | Who Writes | Current Status |
16
- |---|---|---|
17
- | `/workspace/shared/thoughts/shared/plans/` | Any agent | **Broken** - first mkdir winner owns it, others get EPERM |
18
- | `/workspace/shared/thoughts/shared/research/` | Any agent | **Broken** - same issue |
19
- | `/workspace/shared/memory/` | Any agent (via Write/Edit tool) | **Broken** - same issue |
20
- | `/workspace/shared/downloads/slack/` | Any agent (via slack-download-file) | **Broken** - same issue |
21
-
22
- ## Archil's Delegation Model
23
-
24
- ### From Official Docs + SDK
25
-
26
- > "Archil uses a delegation model for writes. Before you can write to a file, you 'check out' a delegation on it -- this tells the server you intend to modify it and gives you exclusive access. When you're done, you 'check in' to release it so other clients can write."
27
-
28
- ```ts
29
- await client.checkout(inodeId); // Acquire exclusive write delegation
30
- await client.writeData(inodeId, 0, Buffer.from('new contents'));
31
- await client.sync(); // Ensure write is durable on server
32
- await client.checkin(inodeId); // Release delegation
33
- ```
34
-
35
- Key properties:
36
- 1. **Exclusive delegation**: Only ONE client can own a file/dir at a time
37
- 2. **Recursive ownership**: Owning a directory = owning ALL children. No parent of an owned dir can be owned by another client (ancestry constraint)
38
- 3. **`archil checkout /path`**: Requests exclusive access. Fails if another client already owns it
39
- 4. **`archil checkin /path`**: Releases the delegation so others can write
40
- 5. **`archil checkout --force /path`**: Revokes another client's ownership. **Dangerous**: may lose un-fsynced writes from the evicted client
41
- 6. **`mkdir` on unowned dir**: Auto-grants ownership to the creator
42
- 7. **On `archil unmount`**: All ownership claims are released automatically
43
-
44
- Example from docs:
45
- ```
46
- /(cannot be owned)
47
- group/(cannot be owned) <-- because child is owned
48
- models/(owned by client A)
49
- model1.txt
50
- model2.txt
51
- data/(ownership available)
52
- data.txt
53
- ```
54
-
55
- ## Current Architecture
56
-
57
- ### Archil Disk Topology
58
-
59
- ```
60
- Swarm: {appName}
61
- +-- {appName}-api (--shared mount on API container at /mnt/data)
62
- +-- {appName}-shared (--shared mount on ALL containers at /workspace/shared)
63
- +-- {appName}-personal-{id1} (exclusive mount on agent1 at /workspace/personal)
64
- +-- {appName}-personal-{id2} (exclusive mount on agent2 at /workspace/personal)
65
- +-- {appName}-personal-{id3} (exclusive mount on agent3 at /workspace/personal)
66
- +-- {appName}-personal-{lead} (exclusive mount on lead at /workspace/personal)
67
- ```
68
-
69
- ### Current Entrypoint Behavior
70
-
71
- From `docker-entrypoint.sh`:
72
-
73
- ```bash
74
- # These dirs are created at boot - first agent to boot wins ownership
75
- mkdir -p /workspace/shared/thoughts/shared/plans \
76
- /workspace/shared/thoughts/shared/research \
77
- /workspace/shared/memory 2>/dev/null || true
78
-
79
- # Later, per-agent checkout (this works fine)
80
- archil checkout "/workspace/shared/thoughts/$AGENT_ID"
81
- mkdir -p "$AGENT_THOUGHTS_DIR/plans" "$AGENT_THOUGHTS_DIR/research"
82
- ```
83
-
84
- The `mkdir -p` with `|| true` silently swallows EPERM from agents that lose the race. Only the first-booting agent can actually write to `thoughts/shared/` and `memory/`.
85
-
86
- ### Write Patterns in the Codebase
87
-
88
- | Path | Writers | Trigger | Code Location |
89
- |------|---------|---------|---------------|
90
- | `thoughts/$AGENT_ID/{plans,research}/` | Single agent (owner) | /desplega:research, /desplega:create-plan | `base-prompt.ts:96,116` |
91
- | `thoughts/shared/{plans,research}/` | Any agent | /desplega:create-plan | `base-prompt.ts:219` |
92
- | `memory/` | Any agent | Write/Edit hook auto-indexes | `hook.ts:863-864`, `base-prompt.ts:245` |
93
- | `downloads/slack/` | Any agent | Slack file downloads | `slack-download-file.ts:14` |
94
-
95
- **Already working via database (not affected):**
96
- - `inject-learning`: Lead injects learnings into worker memory via API (database), NOT filesystem
97
- - `store-progress`: Creates memory entries in the database, not filesystem
98
- - `memory-search`: Queries the indexed database, not raw files
99
-
100
- ---
101
-
102
- ## Strategy Evaluation
103
-
104
- ### Strategy A: Per-Agent Subdirectories Everywhere
105
-
106
- **Concept**: Restructure so nothing is truly shared for writes. Every agent writes only to its own area under the shared disk. "Shared" becomes read-only visibility via the shared mount.
107
-
108
- ```
109
- /workspace/shared/
110
- thoughts/
111
- agent-1/{plans,research}/ # agent-1 owns (checkout at boot)
112
- agent-2/{plans,research}/ # agent-2 owns
113
- lead/{plans,research}/ # lead owns
114
- memory/
115
- agent-1/ # agent-1 owns
116
- agent-2/ # agent-2 owns
117
- lead/ # lead owns
118
- downloads/
119
- agent-1/slack/ # agent-1 owns
120
- agent-2/slack/ # agent-2 owns
121
- ```
122
-
123
- Agents read from any directory but only write to their own. The `thoughts/shared/` directory is eliminated.
124
-
125
- **Changes required:**
126
- 1. `docker-entrypoint.sh`: Expand checkout to cover `memory/$AGENT_ID` and `downloads/$AGENT_ID`; remove `thoughts/shared` mkdir
127
- 2. `base-prompt.ts`: Direct all writes to `thoughts/{yourId}/`, `memory/{yourId}/`
128
- 3. `hook.ts` / `pi-mono-extension.ts`: Path detection already uses `startsWith("/workspace/shared/memory/")` so works unchanged
129
- 4. `slack-download-file.ts`: Change default save path to include `$AGENT_ID`
130
-
131
- | Criterion | Rating | Notes |
132
- |---|---|---|
133
- | **Complexity** | Low | Mostly prompt + entrypoint changes |
134
- | **Reliability** | Excellent | Zero race conditions - each agent owns its subtree exclusively |
135
- | **Performance** | Excellent | No locking overhead, no checkout/checkin round-trips |
136
- | **Agent workflow** | Medium | Agents scan multiple dirs for "shared" content. Reading is fine. |
137
- | **Entrypoint changes** | Small | Expand checkout block, remove `thoughts/shared` mkdir |
138
- | **Crash recovery** | Excellent | No shared state to corrupt |
139
-
140
- **Risk**: Discovery is slightly harder (agents must scan N directories instead of one `shared/` dir).
141
-
142
- **Verdict: RECOMMENDED -- Strong candidate**
143
-
144
- ---
145
-
146
- ### Strategy B: Rotating Ownership (Cooperative Checkout/Checkin)
147
-
148
- **Concept**: Workers dynamically checkout/checkin shared directories when they need to write.
149
-
150
- ```bash
151
- archil checkout /workspace/shared/memory
152
- echo "content" > /workspace/shared/memory/my-file.md
153
- sync
154
- archil checkin /workspace/shared/memory
155
- ```
156
-
157
- | Criterion | Rating | Notes |
158
- |---|---|---|
159
- | **Complexity** | High | Locking protocol, retry logic, deadlock prevention |
160
- | **Reliability** | Poor | Race conditions, crash orphaning (held until unmount), starvation |
161
- | **Performance** | Poor | Checkout round-trip + sync + checkin per write; contention cascades |
162
- | **Agent workflow** | None (paths stay same) | |
163
- | **Crash recovery** | Poor | Crashed agent holds ownership until container restarts |
164
-
165
- **Key risks:**
166
- - Agent checks out dir, enters a long thinking phase = others blocked for minutes
167
- - Archil checkout is recursive on directories, so locking `memory/` locks ALL memory files
168
- - Crash between checkout and checkin = dir locked until FUSE unmount
169
-
170
- **Verdict: NOT RECOMMENDED -- Too fragile for agent workloads**
171
-
172
- ---
173
-
174
- ### Strategy C: Single Writer Pattern (Lead/API as Sole Shared Writer)
175
-
176
- **Concept**: Designate the API server (or lead) as the sole writer to shared directories. Workers submit writes via MCP API tool.
177
-
178
- ```
179
- Workers -> MCP tool (write-shared-file) -> API server -> writes to shared disk
180
- ```
181
-
182
- | Criterion | Rating | Notes |
183
- |---|---|---|
184
- | **Complexity** | Medium | New API endpoint + MCP tool |
185
- | **Reliability** | Good | Single writer = no conflicts |
186
- | **Performance** | Acceptable | Extra network hop, but writes are infrequent |
187
- | **Agent workflow** | High impact | Workers can't use `Write` tool for shared paths |
188
- | **Crash recovery** | Good | API restarts release ownership |
189
-
190
- **Key risks:**
191
- - Agents are trained to use `Write` tool -- hard to redirect 100% of the time
192
- - Read-after-write consistency through FUSE may show stale data
193
-
194
- **Verdict: VIABLE but breaks natural file-write UX**
195
-
196
- ---
197
-
198
- ### Strategy D: Separate Archil Disks Per Agent
199
-
200
- **Concept**: Give each agent its own Archil disk. Remove or keep shared disk read-only.
201
-
202
- | Criterion | Rating | Notes |
203
- |---|---|---|
204
- | **Complexity** | High | Lose cross-agent filesystem reads |
205
- | **Reliability** | Excellent | No shared write conflicts |
206
- | **Performance** | Good | No contention |
207
- | **Agent workflow** | Very High impact | Can't `cat` other agents' files at all |
208
-
209
- **Verdict: NOT RECOMMENDED -- Kills the key benefit of shared filesystem (cross-agent reads)**
210
-
211
- ---
212
-
213
- ### Strategy E: Hybrid (Shared Disk for Reads + API for Shared Writes)
214
-
215
- **Concept**: Keep shared disk for reads. Route shared-area writes through the API server.
216
-
217
- ```
218
- Per-agent writes: Agent -> FUSE -> /workspace/shared/thoughts/$AGENT_ID/ (agent owns)
219
- Shared writes: Agent -> MCP tool -> API -> /workspace/shared/thoughts/shared/
220
- Reads: Agent -> FUSE -> /workspace/shared/* (all readable)
221
- ```
222
-
223
- | Criterion | Rating | Notes |
224
- |---|---|---|
225
- | **Complexity** | Medium | API endpoint + MCP tool + hook logic |
226
- | **Reliability** | Good | Single writer for shared dirs |
227
- | **Performance** | Good | Only shared writes have extra hop |
228
- | **Agent workflow** | Medium-High | Two write patterns to learn |
229
-
230
- **Verdict: VIABLE but adds complexity without clear advantage over Strategy A**
231
-
232
- ---
233
-
234
- ### Strategy F: Force Checkout with Coordination
235
-
236
- **Concept**: Use `archil checkout --force` to revoke ownership + distributed lock layer.
237
-
238
- | Criterion | Rating | Notes |
239
- |---|---|---|
240
- | **Complexity** | Very High | Distributed locking + force checkout |
241
- | **Reliability** | Poor | `--force` risks data loss from un-fsynced writes |
242
- | **Performance** | Poor | Lock + force checkout + sync + checkin + unlock per write |
243
- | **Crash recovery** | Very Poor | Orphaned lock + potential data loss |
244
-
245
- **Verdict: NOT RECOMMENDED -- Overcomplicated and data-loss prone**
246
-
247
- ---
248
-
249
- ### Strategy G: mkdir-Based Per-Write Directories
250
-
251
- **Concept**: Exploit `mkdir` auto-ownership. Each write creates a unique subdirectory.
252
-
253
- ```
254
- /workspace/shared/memory/
255
- 1741690200-agent1-auth-fix/content.md # agent-1 created & owns
256
- 1741690500-agent2-db-pattern/content.md # agent-2 created & owns
257
- ```
258
-
259
- | Criterion | Rating | Notes |
260
- |---|---|---|
261
- | **Complexity** | Medium | Write wrapper + read aggregation |
262
- | **Reliability** | Good | Unique names avoid races |
263
- | **Performance** | Good | mkdir is fast |
264
- | **Agent workflow** | High impact | Can't `cat memory/auth-fix.md` -- need directory scanning |
265
- | **Cleanup** | Needed | Thousands of single-file directories accumulate |
266
-
267
- **Verdict: CREATIVE but impractical -- Directory proliferation, read patterns break**
268
-
269
- ---
270
-
271
- ### Strategy H: Symlink Farm (Per-Agent Writes + Shared View)
272
-
273
- **Concept**: Each agent writes to its own area. Background process maintains symlinks in a `shared/` view.
274
-
275
- **Key problem**: Who owns the `shared/plans/` directory to create the symlinks? Same ownership problem, circular.
276
-
277
- Also unclear if Archil's FUSE layer handles symlinks correctly across clients.
278
-
279
- **Verdict: NOT RECOMMENDED -- Circular ownership problem**
280
-
281
- ---
282
-
283
- ### Strategy I: Per-Agent Writes + Database Discovery (Enhanced Strategy A)
284
-
285
- **Concept**: Strategy A plus a database-backed discovery layer. Each agent writes to its own directories. Shared artifacts are registered via API for cross-agent discovery.
286
-
287
- ```
288
- Agent writes: /workspace/shared/thoughts/agent-1/plans/deploy-plan.md
289
- Agent registers: POST /api/shared-artifacts { path, type: "plan", tags: ["deploy"] }
290
-
291
- Other agent finds: GET /api/shared-artifacts?type=plan -> [{ path: "thoughts/agent-1/plans/..." }]
292
- Other agent reads: cat /workspace/shared/thoughts/agent-1/plans/deploy-plan.md
293
- ```
294
-
295
- | Criterion | Rating | Notes |
296
- |---|---|---|
297
- | **Complexity** | Medium | Strategy A + a simple API endpoint |
298
- | **Reliability** | Excellent | No shared write conflicts. Database is the coordination point. |
299
- | **Performance** | Excellent | Direct writes, API discovery is fast |
300
- | **Agent workflow** | Low impact | Write normally to own dirs. Discovery via memory-search (exists) or new tool. |
301
- | **Entrypoint changes** | Small | Same as Strategy A |
302
- | **Crash recovery** | Excellent | Database survives container restarts |
303
-
304
- **Key insight**: Memory discovery already exists via `memory-search` MCP tool (queries indexed DB). Plans/research discovery is simple with `ls /workspace/shared/thoughts/*/plans/`.
305
-
306
- **Verdict: RECOMMENDED -- Best of all worlds**
307
-
308
- ---
309
-
310
- ### Strategy J: Direct R2 Writes (Bypass Archil for Shared Writes)
311
-
312
- **Concept**: For shared writes, bypass Archil FUSE entirely and write directly to backing R2 bucket.
313
-
314
- | Criterion | Rating | Notes |
315
- |---|---|---|
316
- | **Complexity** | Medium | R2 write logic, bucket prefix mapping |
317
- | **Reliability** | Medium | Eventual consistency -- written file may not be visible via FUSE immediately |
318
- | **Performance** | High | Direct R2 writes, no delegation contention |
319
- | **Agent workflow** | Medium | Reads may be stale |
320
-
321
- **Verdict: NOT RECOMMENDED -- Consistency issues make this unreliable for collaborative workflows**
322
-
323
- ---
324
-
325
- ## Comparative Summary
326
-
327
- | Strategy | Complexity | Reliability | Performance | UX Impact | Verdict |
328
- |---|---|---|---|---|---|
329
- | **A: Per-agent subdirs** | Low | Excellent | Excellent | Medium | **RECOMMENDED** |
330
- | **B: Rotating ownership** | High | Poor | Poor | None | Not recommended |
331
- | **C: Single writer** | Medium | Good | Acceptable | High | Viable |
332
- | **D: Separate disks** | High | Excellent | Good | Very High | Not recommended |
333
- | **E: Hybrid API writes** | Medium | Good | Good | Medium-High | Viable |
334
- | **F: Force checkout** | Very High | Poor | Poor | High | Not recommended |
335
- | **G: mkdir per-write** | Medium | Good | Good | High | Impractical |
336
- | **H: Symlink farm** | High | Medium | Good | Low | Not recommended |
337
- | **I: Per-agent + DB discovery** | Medium | Excellent | Excellent | Low | **RECOMMENDED** |
338
- | **J: Direct R2** | Medium | Medium | High | Medium | Not recommended |
339
-
340
- ---
341
-
342
- ## Recommendation: Strategy A+I Hybrid
343
-
344
- ### Primary recommendation: Per-Agent Writes + Database Discovery
345
-
346
- Combine Strategies A and I. This is the cleanest solution because:
347
-
348
- 1. **Zero race conditions**: Each agent exclusively owns its subtree. Archil works as designed.
349
- 2. **Minimal changes**: Entrypoint already does per-agent checkout for thoughts. Expand to memory + downloads.
350
- 3. **Reads still work**: All agents can `cat` any file on the shared disk. No API needed for reads.
351
- 4. **Discovery already exists for memory**: `memory-search` MCP tool queries the indexed database. All memory writes get auto-indexed by the PostToolUse hook regardless of path.
352
- 5. **Plans/research discovery is trivial**: `ls /workspace/shared/thoughts/*/plans/` or lightweight tool.
353
-
354
- ### What about `thoughts/shared/`?
355
-
356
- Eliminate it. A plan written by agent-1 "for the swarm" is still agent-1's plan -- just readable by everyone via the shared mount. The concept of a "shared scratchpad" is unnecessary when every agent's directory is readable by all.
357
-
358
- ### Implementation Plan
359
-
360
- #### Phase 1: Entrypoint changes (low risk, immediate)
361
-
362
- ```bash
363
- # In docker-entrypoint.sh, REMOVE:
364
- mkdir -p /workspace/shared/thoughts/shared/plans \
365
- /workspace/shared/thoughts/shared/research \
366
- /workspace/shared/memory 2>/dev/null || true
367
-
368
- # REPLACE the per-agent checkout block with:
369
- if [ -n "$AGENT_ID" ] && [ -n "$ARCHIL_MOUNT_TOKEN" ]; then
370
- AGENT_SHARED="/workspace/shared"
371
- for dir in "thoughts/$AGENT_ID" "memory/$AGENT_ID" "downloads/$AGENT_ID"; do
372
- sudo --preserve-env=ARCHIL_MOUNT_TOKEN archil checkout "$AGENT_SHARED/$dir" 2>/dev/null || true
373
- mkdir -p "$AGENT_SHARED/$dir"
374
- done
375
- mkdir -p "$AGENT_SHARED/thoughts/$AGENT_ID/plans"
376
- mkdir -p "$AGENT_SHARED/thoughts/$AGENT_ID/research"
377
- fi
378
- ```
379
-
380
- #### Phase 2: Prompt updates
381
-
382
- Update `base-prompt.ts` to:
383
- - Remove references to `/workspace/shared/thoughts/shared/`
384
- - Direct agents to write plans/research to `/workspace/shared/thoughts/{yourId}/`
385
- - Direct memory writes to `/workspace/shared/memory/{yourId}/`
386
- - Add: "To see all agents' plans: `ls /workspace/shared/thoughts/*/plans/`"
387
-
388
- #### Phase 3: Hook/extension updates
389
-
390
- Update `hook.ts` and `pi-mono-extension.ts`:
391
- - Memory auto-index path detection already uses `startsWith("/workspace/shared/memory/")` which will match `/workspace/shared/memory/$AGENT_ID/foo.md` -- no change needed
392
- - The `isShared` scope detection uses same prefix -- also fine
393
-
394
- #### Phase 4: Tool updates
395
-
396
- - `slack-download-file.ts`: Default save to `/workspace/shared/downloads/${process.env.AGENT_ID}/slack/`
397
- - Optional: Add `list-shared-artifacts` MCP tool for structured discovery
398
-
399
- ### Migration
400
-
401
- - No data migration needed for new deployments
402
- - Existing `thoughts/shared/` files remain read-only (no agent owns them after deploy)
403
- - One-time migration script could move `thoughts/shared/*` to `thoughts/lead/*` if desired
404
-
405
- ---
406
-
407
- ## Open Questions
408
-
409
- 1. **Archil checkout on non-existent paths**: Can we `archil checkout /workspace/shared/memory/$AGENT_ID` before the directory exists? The current entrypoint does checkout then mkdir, suggesting checkout might create the path or work on non-existent paths. Needs validation.
410
-
411
- 2. **Multiple checkouts per client**: Can a single FUSE client checkout multiple non-overlapping subtrees simultaneously? (e.g., `thoughts/$AGENT_ID` AND `memory/$AGENT_ID`). The ancestry constraint docs suggest yes, since they don't share a parent that would conflict.
412
-
413
- 3. **Read propagation delay**: When agent-1 writes to its checked-out dir, how quickly does agent-2 see the new file via the shared FUSE mount? Near-instant (metadata server coordination) or delayed (cache invalidation)?
414
-
415
- 4. **AGENT_ID stability across deploys**: If AGENT_ID changes between deploys, old directories become orphaned. Need cleanup mechanism for long-lived shared disks.
416
-
417
- 5. **API server's shared mount**: The API server also mounts shared disk with `--shared`. If Strategy E fallback is ever needed, it would need its own checkout. Currently it only needs read access for serving files.
418
-
419
- ## Code References
420
-
421
- | File | Relevant Lines | What |
422
- |------|---------------|------|
423
- | `agent-swarm/docker-entrypoint.sh` | 38-48 | Archil mount logic |
424
- | `agent-swarm/docker-entrypoint.sh` | 55-58 | mkdir for shared dirs (the broken part) |
425
- | `agent-swarm/docker-entrypoint.sh` | 477-486 | Per-agent checkout + mkdir |
426
- | `agent-swarm/src/prompts/base-prompt.ts` | 96, 116 | Research/plan output paths |
427
- | `agent-swarm/src/prompts/base-prompt.ts` | 215-220 | Workspace directory structure in prompt |
428
- | `agent-swarm/src/prompts/base-prompt.ts` | 244-249 | Memory directory paths in prompt |
429
- | `agent-swarm/src/hooks/hook.ts` | 863-864 | Memory file auto-indexing detection |
430
- | `agent-swarm/src/hooks/hook.ts` | 870 | Shared vs personal scope detection |
431
- | `agent-swarm/src/providers/pi-mono-extension.ts` | 473-474 | Memory write detection (pi-mono) |
432
- | `agent-swarm/src/tools/slack-download-file.ts` | 14, 31 | Default download path |
433
- | `agent-swarm/src/tools/inject-learning.ts` | 21 | DB-only writes (not affected) |
434
- | `agent-swarm/src/tools/store-progress.ts` | 177-230 | DB-only writes (not affected) |
435
- | `agent-swarm-internal/scripts/deploy-swarm.ts` | 39-63 | ensureArchilDisk function |
436
- | `agent-swarm-internal/scripts/deploy-swarm.ts` | 297-324 | Agent machine config with Archil env vars |
437
- | `agent-swarm-internal/scripts/deploy-swarm.ts` | 421-476 | Disk creation (shared + personal) |