@desplega.ai/agent-swarm 1.20.0 → 1.51.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/README.md +271 -169
  2. package/openapi.json +5015 -0
  3. package/package.json +40 -7
  4. package/plugin/commands/close-issue.md +7 -3
  5. package/plugin/commands/create-pr.md +18 -12
  6. package/plugin/commands/implement-issue.md +7 -3
  7. package/plugin/commands/respond-github.md +8 -4
  8. package/plugin/commands/review-pr.md +44 -10
  9. package/plugin/commands/start-leader.md +1 -3
  10. package/plugin/commands/start-worker.md +1 -3
  11. package/plugin/commands/work-on-task.md +22 -3
  12. package/plugin/pi-skills/close-issue/SKILL.md +90 -0
  13. package/plugin/pi-skills/create-pr/SKILL.md +99 -0
  14. package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
  15. package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
  16. package/plugin/pi-skills/respond-github/SKILL.md +98 -0
  17. package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
  18. package/plugin/pi-skills/review-pr/SKILL.md +261 -0
  19. package/plugin/pi-skills/start-leader/SKILL.md +121 -0
  20. package/plugin/pi-skills/start-worker/SKILL.md +60 -0
  21. package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
  22. package/plugin/pi-skills/todos/SKILL.md +66 -0
  23. package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
  24. package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
  25. package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
  26. package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
  27. package/plugin/skills/artifacts/examples/static-report.sh +17 -0
  28. package/plugin/skills/artifacts/skill.md +71 -0
  29. package/src/agentmail/app.ts +65 -0
  30. package/src/agentmail/handlers.ts +262 -0
  31. package/src/agentmail/index.ts +9 -0
  32. package/src/agentmail/templates.ts +111 -0
  33. package/src/agentmail/types.ts +51 -0
  34. package/src/artifact-sdk/browser-sdk.ts +30 -0
  35. package/src/artifact-sdk/index.ts +2 -0
  36. package/src/artifact-sdk/localtunnel.d.ts +20 -0
  37. package/src/artifact-sdk/port.ts +12 -0
  38. package/src/artifact-sdk/server.ts +156 -0
  39. package/src/artifact-sdk/tunnel.ts +19 -0
  40. package/src/be/chunking.ts +193 -0
  41. package/src/be/db-queries/oauth.ts +90 -0
  42. package/src/be/db-queries/tracker.ts +182 -0
  43. package/src/be/db.ts +3327 -784
  44. package/src/be/embedding.ts +80 -0
  45. package/src/be/migrations/001_initial.sql +409 -0
  46. package/src/be/migrations/002_one_time_schedules.sql +59 -0
  47. package/src/be/migrations/003_workflows.sql +51 -0
  48. package/src/be/migrations/004_workflow_source.sql +81 -0
  49. package/src/be/migrations/005_epic_next_steps.sql +2 -0
  50. package/src/be/migrations/006_vcs_provider.sql +94 -0
  51. package/src/be/migrations/007_task_dir.sql +2 -0
  52. package/src/be/migrations/008_workflow_redesign.sql +85 -0
  53. package/src/be/migrations/009_tracker_integration.sql +144 -0
  54. package/src/be/migrations/010_step_diagnostics.sql +1 -0
  55. package/src/be/migrations/011_step_next_port.sql +1 -0
  56. package/src/be/migrations/012_trigger_schema.sql +1 -0
  57. package/src/be/migrations/013_task_output_schema.sql +2 -0
  58. package/src/be/migrations/014_prompt_templates.sql +33 -0
  59. package/src/be/migrations/015_workflow_workspace.sql +3 -0
  60. package/src/be/migrations/016_active_session_runner_session.sql +4 -0
  61. package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
  62. package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
  63. package/src/be/migrations/runner.ts +188 -0
  64. package/src/be/seed.ts +62 -0
  65. package/src/cli.tsx +231 -299
  66. package/src/commands/artifact.ts +241 -0
  67. package/src/commands/onboard/compose-generator.ts +169 -0
  68. package/src/commands/onboard/env-generator.ts +79 -0
  69. package/src/commands/onboard/manifest.ts +37 -0
  70. package/src/commands/onboard/presets.ts +85 -0
  71. package/src/commands/onboard/service-names.ts +47 -0
  72. package/src/commands/onboard/steps/core-credentials.tsx +111 -0
  73. package/src/commands/onboard/steps/custom-templates.tsx +168 -0
  74. package/src/commands/onboard/steps/generate.tsx +154 -0
  75. package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
  76. package/src/commands/onboard/steps/harness.tsx +21 -0
  77. package/src/commands/onboard/steps/health-check.tsx +171 -0
  78. package/src/commands/onboard/steps/integration-github.tsx +105 -0
  79. package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
  80. package/src/commands/onboard/steps/integration-menu.tsx +58 -0
  81. package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
  82. package/src/commands/onboard/steps/integration-slack.tsx +165 -0
  83. package/src/commands/onboard/steps/post-connect.tsx +145 -0
  84. package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
  85. package/src/commands/onboard/steps/post-task.tsx +103 -0
  86. package/src/commands/onboard/steps/prereq-check.tsx +178 -0
  87. package/src/commands/onboard/steps/review.tsx +82 -0
  88. package/src/commands/onboard/steps/start.tsx +97 -0
  89. package/src/commands/onboard/templates.ts +34 -0
  90. package/src/commands/onboard/types.ts +259 -0
  91. package/src/commands/onboard.tsx +425 -0
  92. package/src/commands/runner.ts +1540 -630
  93. package/src/commands/setup.tsx +23 -38
  94. package/src/commands/shared/client-config.ts +41 -0
  95. package/src/commands/templates.ts +172 -0
  96. package/src/github/app.ts +8 -0
  97. package/src/github/handlers.ts +384 -151
  98. package/src/github/index.ts +1 -0
  99. package/src/github/mentions-aliases.test.ts +73 -0
  100. package/src/github/mentions.test.ts +3 -3
  101. package/src/github/mentions.ts +32 -6
  102. package/src/github/templates.ts +398 -0
  103. package/src/github/types.ts +1 -0
  104. package/src/gitlab/auth.ts +63 -0
  105. package/src/gitlab/handlers.ts +368 -0
  106. package/src/gitlab/index.ts +19 -0
  107. package/src/gitlab/reactions.ts +104 -0
  108. package/src/gitlab/templates.ts +140 -0
  109. package/src/gitlab/types.ts +130 -0
  110. package/src/heartbeat/heartbeat.ts +434 -0
  111. package/src/heartbeat/index.ts +1 -0
  112. package/src/heartbeat/templates.ts +30 -0
  113. package/src/hooks/hook.ts +555 -4
  114. package/src/hooks/tool-loop-detection.test.ts +158 -0
  115. package/src/hooks/tool-loop-detection.ts +167 -0
  116. package/src/http/active-sessions.ts +199 -0
  117. package/src/http/agents.ts +328 -0
  118. package/src/http/config.ts +191 -0
  119. package/src/http/core.ts +309 -0
  120. package/src/http/db-query.ts +91 -0
  121. package/src/http/ecosystem.ts +63 -0
  122. package/src/http/epics.ts +460 -0
  123. package/src/http/index.ts +216 -0
  124. package/src/http/mcp.ts +77 -0
  125. package/src/http/memory.ts +168 -0
  126. package/src/http/openapi.ts +109 -0
  127. package/src/http/poll.ts +299 -0
  128. package/src/http/prompt-templates.ts +412 -0
  129. package/src/http/repos.ts +195 -0
  130. package/src/http/route-def.ts +123 -0
  131. package/src/http/schedules.ts +426 -0
  132. package/src/http/session-data.ts +241 -0
  133. package/src/http/stats.ts +174 -0
  134. package/src/http/tasks.ts +468 -0
  135. package/src/http/trackers/index.ts +10 -0
  136. package/src/http/trackers/linear.ts +187 -0
  137. package/src/http/types.ts +12 -0
  138. package/src/http/utils.ts +87 -0
  139. package/src/http/webhooks.ts +432 -0
  140. package/src/http/workflows.ts +530 -0
  141. package/src/http.ts +1 -1890
  142. package/src/linear/README.md +65 -0
  143. package/src/linear/app.ts +48 -0
  144. package/src/linear/client.ts +18 -0
  145. package/src/linear/index.ts +1 -0
  146. package/src/linear/oauth.ts +35 -0
  147. package/src/linear/outbound.ts +212 -0
  148. package/src/linear/sync.ts +567 -0
  149. package/src/linear/templates.ts +47 -0
  150. package/src/linear/types.ts +7 -0
  151. package/src/linear/webhook.ts +104 -0
  152. package/src/oauth/README.md +66 -0
  153. package/src/oauth/index.ts +6 -0
  154. package/src/oauth/wrapper.ts +204 -0
  155. package/src/prompts/base-prompt.ts +150 -265
  156. package/src/prompts/defaults.ts +196 -0
  157. package/src/prompts/registry.ts +57 -0
  158. package/src/prompts/resolver.ts +296 -0
  159. package/src/prompts/session-templates.ts +604 -0
  160. package/src/providers/claude-adapter.ts +442 -0
  161. package/src/providers/index.ts +24 -0
  162. package/src/providers/pi-mono-adapter.ts +442 -0
  163. package/src/providers/pi-mono-extension.ts +624 -0
  164. package/src/providers/pi-mono-mcp-client.ts +124 -0
  165. package/src/providers/types.ts +75 -0
  166. package/src/scheduler/scheduler.test.ts +2 -0
  167. package/src/scheduler/scheduler.ts +231 -40
  168. package/src/server.ts +97 -6
  169. package/src/slack/HEURISTICS.md +105 -0
  170. package/src/slack/actions.ts +133 -0
  171. package/src/slack/app.ts +7 -0
  172. package/src/slack/assistant.ts +118 -0
  173. package/src/slack/blocks.ts +233 -0
  174. package/src/slack/channel-activity.ts +177 -0
  175. package/src/slack/commands.ts +31 -17
  176. package/src/slack/files.ts +1 -1
  177. package/src/slack/handlers.test.ts +114 -1
  178. package/src/slack/handlers.ts +230 -55
  179. package/src/slack/responses.ts +120 -67
  180. package/src/slack/router.ts +17 -99
  181. package/src/slack/templates.ts +55 -0
  182. package/src/slack/thread-buffer.ts +213 -0
  183. package/src/slack/watcher.ts +119 -4
  184. package/src/tests/agent-activity.test.ts +247 -0
  185. package/src/tests/agentmail-filters.test.ts +97 -0
  186. package/src/tests/artifact-sdk.test.ts +800 -0
  187. package/src/tests/base-prompt.test.ts +264 -0
  188. package/src/tests/build-pi-skills.test.ts +127 -0
  189. package/src/tests/channel-activity.test.ts +363 -0
  190. package/src/tests/claude-adapter.test.ts +126 -0
  191. package/src/tests/context-versioning.test.ts +425 -0
  192. package/src/tests/db-queries-oauth.test.ts +197 -0
  193. package/src/tests/db-queries-tracker.test.ts +230 -0
  194. package/src/tests/epics.test.ts +3 -3
  195. package/src/tests/error-tracker.test.ts +368 -0
  196. package/src/tests/fetch-resolved-env.test.ts +167 -0
  197. package/src/tests/generate-default-claude-md.test.ts +9 -1
  198. package/src/tests/generate-identity-templates.test.ts +124 -0
  199. package/src/tests/gitlab-auth.test.ts +109 -0
  200. package/src/tests/gitlab-handlers.test.ts +691 -0
  201. package/src/tests/gitlab-vcs-db.test.ts +177 -0
  202. package/src/tests/heartbeat.test.ts +364 -0
  203. package/src/tests/http-api-integration.test.ts +1698 -0
  204. package/src/tests/linear-outbound-sync.test.ts +200 -0
  205. package/src/tests/linear-webhook.test.ts +406 -0
  206. package/src/tests/match-route.test.ts +187 -0
  207. package/src/tests/memory.test.ts +737 -0
  208. package/src/tests/migration-runner-regressions.test.ts +86 -0
  209. package/src/tests/model-control.test.ts +338 -0
  210. package/src/tests/oauth-wrapper.test.ts +147 -0
  211. package/src/tests/onboard-compose.test.ts +138 -0
  212. package/src/tests/onboard-env.test.ts +174 -0
  213. package/src/tests/onboard-manifest.test.ts +137 -0
  214. package/src/tests/pi-mono-adapter.test.ts +234 -0
  215. package/src/tests/pool-session-logs.test.ts +199 -0
  216. package/src/tests/progress-dedup.test.ts +98 -0
  217. package/src/tests/prompt-template-github.test.ts +682 -0
  218. package/src/tests/prompt-template-remaining.test.ts +504 -0
  219. package/src/tests/prompt-template-resolver.test.ts +621 -0
  220. package/src/tests/prompt-template-session.test.ts +363 -0
  221. package/src/tests/prompt-templates-db.test.ts +616 -0
  222. package/src/tests/provider-adapter.test.ts +122 -0
  223. package/src/tests/provider-command-format.test.ts +98 -0
  224. package/src/tests/reload-config.test.ts +170 -0
  225. package/src/tests/runner-polling-api.test.ts +25 -20
  226. package/src/tests/scheduled-tasks.test.ts +104 -0
  227. package/src/tests/scheduler-backoff.test.ts +166 -0
  228. package/src/tests/self-improvement.test.ts +541 -0
  229. package/src/tests/session-attach.test.ts +536 -0
  230. package/src/tests/session-costs.test.ts +267 -1
  231. package/src/tests/slack-actions.test.ts +133 -0
  232. package/src/tests/slack-assistant.test.ts +136 -0
  233. package/src/tests/slack-blocks.test.ts +246 -0
  234. package/src/tests/slack-metadata-inheritance.test.ts +243 -0
  235. package/src/tests/slack-queue-offline.test.ts +174 -0
  236. package/src/tests/slack-router.test.ts +181 -0
  237. package/src/tests/slack-thread-buffer.test.ts +305 -0
  238. package/src/tests/slack-thread-followups.test.ts +298 -0
  239. package/src/tests/slack-watcher.test.ts +101 -0
  240. package/src/tests/structured-output.test.ts +307 -0
  241. package/src/tests/swarm-repos.test.ts +198 -0
  242. package/src/tests/task-cancellation.test.ts +6 -4
  243. package/src/tests/task-working-dir.test.ts +176 -0
  244. package/src/tests/template-fetch.test.ts +490 -0
  245. package/src/tests/tool-annotations.test.ts +371 -0
  246. package/src/tests/tracker-tools.test.ts +184 -0
  247. package/src/tests/update-profile-agentid.test.ts +248 -0
  248. package/src/tests/update-profile-api.test.ts +143 -3
  249. package/src/tests/update-profile-auth.test.ts +195 -0
  250. package/src/tests/validation-adapters.test.ts +86 -0
  251. package/src/tests/vcs-provider.test.ts +27 -0
  252. package/src/tests/workflow-agent-task.test.ts +196 -0
  253. package/src/tests/workflow-async-v2.test.ts +508 -0
  254. package/src/tests/workflow-convergence.test.ts +541 -0
  255. package/src/tests/workflow-definition-validation.test.ts +366 -0
  256. package/src/tests/workflow-engine-v2.test.ts +691 -0
  257. package/src/tests/workflow-executors.test.ts +736 -0
  258. package/src/tests/workflow-http-v2.test.ts +599 -0
  259. package/src/tests/workflow-integration-io.test.ts +902 -0
  260. package/src/tests/workflow-io-schemas.test.ts +624 -0
  261. package/src/tests/workflow-registry.test.ts +592 -0
  262. package/src/tests/workflow-retry-v2.test.ts +401 -0
  263. package/src/tests/workflow-retry-validation.test.ts +282 -0
  264. package/src/tests/workflow-schedule-trigger.test.ts +104 -0
  265. package/src/tests/workflow-template.test.ts +288 -0
  266. package/src/tests/workflow-trigger-schema.test.ts +359 -0
  267. package/src/tests/workflow-triggers-v2.test.ts +264 -0
  268. package/src/tests/workflow-versions.test.ts +208 -0
  269. package/src/tests/workflow-workspace.test.ts +272 -0
  270. package/src/tests/x402-client.test.ts +117 -0
  271. package/src/tests/x402-config.test.ts +182 -0
  272. package/src/tests/x402-spending-tracker.test.ts +185 -0
  273. package/src/tools/cancel-task.ts +2 -0
  274. package/src/tools/context-diff.ts +171 -0
  275. package/src/tools/context-history.ts +138 -0
  276. package/src/tools/create-channel.ts +1 -0
  277. package/src/tools/db-query.ts +78 -0
  278. package/src/tools/delete-channel.ts +132 -0
  279. package/src/tools/epics/assign-task-to-epic.ts +1 -0
  280. package/src/tools/epics/create-epic.ts +3 -2
  281. package/src/tools/epics/delete-epic.ts +2 -0
  282. package/src/tools/epics/get-epic-details.ts +2 -0
  283. package/src/tools/epics/list-epics.ts +2 -0
  284. package/src/tools/epics/unassign-task-from-epic.ts +1 -0
  285. package/src/tools/epics/update-epic.ts +7 -4
  286. package/src/tools/get-swarm.ts +2 -0
  287. package/src/tools/get-task-details.ts +2 -0
  288. package/src/tools/get-tasks.ts +27 -1
  289. package/src/tools/inject-learning.ts +106 -0
  290. package/src/tools/join-swarm.ts +17 -7
  291. package/src/tools/list-channels.ts +2 -0
  292. package/src/tools/list-services.ts +2 -0
  293. package/src/tools/memory-get.ts +56 -0
  294. package/src/tools/memory-search.ts +131 -0
  295. package/src/tools/my-agent-info.ts +2 -0
  296. package/src/tools/poll-task.ts +2 -20
  297. package/src/tools/post-message.ts +1 -0
  298. package/src/tools/prompt-templates/delete.ts +86 -0
  299. package/src/tools/prompt-templates/get.ts +89 -0
  300. package/src/tools/prompt-templates/index.ts +5 -0
  301. package/src/tools/prompt-templates/list.ts +95 -0
  302. package/src/tools/prompt-templates/preview.ts +84 -0
  303. package/src/tools/prompt-templates/set.ts +117 -0
  304. package/src/tools/read-messages.ts +2 -0
  305. package/src/tools/register-agentmail-inbox.ts +166 -0
  306. package/src/tools/register-service.ts +2 -0
  307. package/src/tools/schedules/create-schedule.ts +134 -24
  308. package/src/tools/schedules/delete-schedule.ts +2 -0
  309. package/src/tools/schedules/list-schedules.ts +20 -4
  310. package/src/tools/schedules/run-schedule-now.ts +1 -0
  311. package/src/tools/schedules/update-schedule.ts +49 -17
  312. package/src/tools/send-task.ts +132 -10
  313. package/src/tools/slack-download-file.ts +4 -2
  314. package/src/tools/slack-list-channels.ts +2 -0
  315. package/src/tools/slack-post.ts +2 -0
  316. package/src/tools/slack-read.ts +2 -0
  317. package/src/tools/slack-reply.ts +2 -0
  318. package/src/tools/slack-upload-file.ts +2 -0
  319. package/src/tools/store-progress.ts +205 -4
  320. package/src/tools/swarm-config/delete-config.ts +87 -0
  321. package/src/tools/swarm-config/get-config.ts +108 -0
  322. package/src/tools/swarm-config/index.ts +4 -0
  323. package/src/tools/swarm-config/list-config.ts +99 -0
  324. package/src/tools/swarm-config/set-config.ts +118 -0
  325. package/src/tools/task-action.ts +50 -5
  326. package/src/tools/task-dedup.ts +97 -0
  327. package/src/tools/templates.ts +53 -0
  328. package/src/tools/tool-config.ts +124 -0
  329. package/src/tools/tracker/index.ts +6 -0
  330. package/src/tools/tracker/tracker-link-epic.ts +64 -0
  331. package/src/tools/tracker/tracker-link-task.ts +64 -0
  332. package/src/tools/tracker/tracker-map-agent.ts +57 -0
  333. package/src/tools/tracker/tracker-status.ts +56 -0
  334. package/src/tools/tracker/tracker-sync-status.ts +42 -0
  335. package/src/tools/tracker/tracker-unlink.ts +41 -0
  336. package/src/tools/unregister-service.ts +2 -0
  337. package/src/tools/update-profile.ts +172 -17
  338. package/src/tools/update-service-status.ts +2 -0
  339. package/src/tools/utils.ts +10 -1
  340. package/src/tools/workflows/create-workflow.ts +129 -0
  341. package/src/tools/workflows/delete-workflow.ts +42 -0
  342. package/src/tools/workflows/get-workflow-run.ts +59 -0
  343. package/src/tools/workflows/get-workflow.ts +53 -0
  344. package/src/tools/workflows/index.ts +9 -0
  345. package/src/tools/workflows/list-workflow-runs.ts +48 -0
  346. package/src/tools/workflows/list-workflows.ts +42 -0
  347. package/src/tools/workflows/retry-workflow-run.ts +40 -0
  348. package/src/tools/workflows/trigger-workflow.ts +96 -0
  349. package/src/tools/workflows/update-workflow.ts +133 -0
  350. package/src/tracker/types.ts +51 -0
  351. package/src/types.ts +530 -14
  352. package/src/utils/credentials.test.ts +156 -0
  353. package/src/utils/credentials.ts +50 -0
  354. package/src/utils/error-tracker.ts +190 -0
  355. package/src/vcs/index.ts +15 -0
  356. package/src/vcs/types.ts +5 -0
  357. package/src/workflows/checkpoint.ts +121 -0
  358. package/src/workflows/cooldown.ts +28 -0
  359. package/src/workflows/definition.ts +235 -0
  360. package/src/workflows/engine.ts +580 -0
  361. package/src/workflows/event-bus.ts +29 -0
  362. package/src/workflows/executors/agent-task.ts +103 -0
  363. package/src/workflows/executors/base.ts +86 -0
  364. package/src/workflows/executors/code-match.ts +88 -0
  365. package/src/workflows/executors/index.ts +16 -0
  366. package/src/workflows/executors/notify.ts +93 -0
  367. package/src/workflows/executors/property-match.ts +104 -0
  368. package/src/workflows/executors/raw-llm.ts +83 -0
  369. package/src/workflows/executors/registry.ts +76 -0
  370. package/src/workflows/executors/script.ts +103 -0
  371. package/src/workflows/executors/validate.ts +215 -0
  372. package/src/workflows/executors/vcs.ts +58 -0
  373. package/src/workflows/index.ts +61 -0
  374. package/src/workflows/input.ts +46 -0
  375. package/src/workflows/json-schema-validator.ts +118 -0
  376. package/src/workflows/recovery.ts +139 -0
  377. package/src/workflows/resume.ts +229 -0
  378. package/src/workflows/retry-poller.ts +216 -0
  379. package/src/workflows/template.ts +74 -0
  380. package/src/workflows/templates.ts +86 -0
  381. package/src/workflows/triggers.ts +124 -0
  382. package/src/workflows/validation.ts +104 -0
  383. package/src/workflows/version.ts +44 -0
  384. package/src/x402/cli.ts +140 -0
  385. package/src/x402/client.ts +192 -0
  386. package/src/x402/config.ts +131 -0
  387. package/src/x402/index.ts +37 -0
  388. package/src/x402/openfort-signer.ts +83 -0
  389. package/src/x402/spending-tracker.ts +109 -0
  390. package/templates/official/coder/CLAUDE.md +49 -0
  391. package/templates/official/coder/IDENTITY.md +28 -0
  392. package/templates/official/coder/SOUL.md +43 -0
  393. package/templates/official/coder/TOOLS.md +40 -0
  394. package/templates/official/coder/config.json +23 -0
  395. package/templates/official/coder/start-up.sh +23 -0
  396. package/templates/official/content-reviewer/CLAUDE.md +68 -0
  397. package/templates/official/content-reviewer/IDENTITY.md +28 -0
  398. package/templates/official/content-reviewer/SOUL.md +44 -0
  399. package/templates/official/content-reviewer/TOOLS.md +37 -0
  400. package/templates/official/content-reviewer/config.json +23 -0
  401. package/templates/official/content-reviewer/start-up.sh +23 -0
  402. package/templates/official/content-strategist/CLAUDE.md +63 -0
  403. package/templates/official/content-strategist/IDENTITY.md +33 -0
  404. package/templates/official/content-strategist/SOUL.md +48 -0
  405. package/templates/official/content-strategist/TOOLS.md +47 -0
  406. package/templates/official/content-strategist/config.json +23 -0
  407. package/templates/official/content-strategist/start-up.sh +23 -0
  408. package/templates/official/content-writer/CLAUDE.md +72 -0
  409. package/templates/official/content-writer/IDENTITY.md +30 -0
  410. package/templates/official/content-writer/SOUL.md +46 -0
  411. package/templates/official/content-writer/TOOLS.md +44 -0
  412. package/templates/official/content-writer/config.json +23 -0
  413. package/templates/official/content-writer/start-up.sh +23 -0
  414. package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
  415. package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
  416. package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
  417. package/templates/official/forward-deployed-engineer/config.json +21 -0
  418. package/templates/official/lead/CLAUDE.md +33 -0
  419. package/templates/official/lead/IDENTITY.md +36 -0
  420. package/templates/official/lead/SOUL.md +51 -0
  421. package/templates/official/lead/config.json +22 -0
  422. package/templates/official/researcher/CLAUDE.md +46 -0
  423. package/templates/official/researcher/IDENTITY.md +28 -0
  424. package/templates/official/researcher/SOUL.md +43 -0
  425. package/templates/official/researcher/config.json +21 -0
  426. package/templates/official/reviewer/CLAUDE.md +63 -0
  427. package/templates/official/reviewer/IDENTITY.md +28 -0
  428. package/templates/official/reviewer/SOUL.md +45 -0
  429. package/templates/official/reviewer/config.json +21 -0
  430. package/templates/official/tester/CLAUDE.md +53 -0
  431. package/templates/official/tester/IDENTITY.md +28 -0
  432. package/templates/official/tester/SOUL.md +55 -0
  433. package/templates/official/tester/config.json +21 -0
  434. package/templates/schema.ts +35 -0
  435. package/.claude/settings.local.json +0 -115
  436. package/.dockerignore +0 -61
  437. package/.editorconfig +0 -15
  438. package/.env.docker.example +0 -39
  439. package/.env.example +0 -40
  440. package/.github/workflows/ci.yml +0 -76
  441. package/.github/workflows/docker-and-deploy.yml +0 -117
  442. package/.wts-config.json +0 -4
  443. package/.wts-setup.ts +0 -102
  444. package/CLAUDE.md +0 -104
  445. package/CONTRIBUTING.md +0 -270
  446. package/DEPLOYMENT.md +0 -605
  447. package/Dockerfile +0 -57
  448. package/Dockerfile.worker +0 -157
  449. package/FAQ.md +0 -19
  450. package/MCP.md +0 -406
  451. package/UI.md +0 -40
  452. package/assets/agent-swarm-logo-orange.png +0 -0
  453. package/assets/agent-swarm-logo.png +0 -0
  454. package/assets/agent-swarm.mp4 +0 -0
  455. package/assets/agent-swarm.png +0 -0
  456. package/biome.json +0 -39
  457. package/deploy/DEPLOY.md +0 -60
  458. package/deploy/agent-swarm.service +0 -17
  459. package/deploy/docker-push.ts +0 -30
  460. package/deploy/install.ts +0 -85
  461. package/deploy/prod-db.ts +0 -42
  462. package/deploy/uninstall.ts +0 -12
  463. package/deploy/update.ts +0 -21
  464. package/docker-compose.example.yml +0 -159
  465. package/docker-entrypoint.sh +0 -352
  466. package/ecosystem.config.cjs +0 -66
  467. package/plugin/README.md +0 -1
  468. package/plugin/hooks/hooks.json +0 -71
  469. package/pyproject.toml +0 -9
  470. package/scripts/generate-mcp-docs.ts +0 -415
  471. package/slack-manifest.json +0 -71
  472. package/src/tests/get-inbox-message.test.ts +0 -145
  473. package/src/tools/get-inbox-message.ts +0 -89
  474. package/src/tools/inbox-delegate.ts +0 -113
  475. package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
  476. package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
  477. package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
  478. package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
  479. package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
  480. package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
  481. package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
  482. package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
  483. package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
  484. package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
  485. package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
  486. package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
  487. package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
  488. package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
  489. package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
  490. package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
  491. package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
  492. package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
  493. package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
  494. package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
  495. package/thoughts/shared/research/.gitkeep +0 -0
  496. package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
  497. package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
  498. package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
  499. package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
  500. package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
  501. package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
  502. package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
  503. package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
  504. package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
  505. package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
  506. package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
  507. package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
  508. package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
  509. package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
  510. package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
  511. package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
  512. package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
  513. package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
  514. package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
  515. package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
  516. package/tsconfig.json +0 -37
  517. package/ui/CLAUDE.md +0 -49
  518. package/ui/bun.lock +0 -771
  519. package/ui/index.html +0 -22
  520. package/ui/package-lock.json +0 -5290
  521. package/ui/package.json +0 -33
  522. package/ui/pnpm-lock.yaml +0 -3341
  523. package/ui/postcss.config.js +0 -6
  524. package/ui/public/logo.png +0 -0
  525. package/ui/src/App.tsx +0 -63
  526. package/ui/src/components/ActivityFeed.tsx +0 -440
  527. package/ui/src/components/AgentDetailPanel.tsx +0 -733
  528. package/ui/src/components/AgentsPanel.tsx +0 -815
  529. package/ui/src/components/ChatPanel.tsx +0 -1920
  530. package/ui/src/components/ConfigModal.tsx +0 -253
  531. package/ui/src/components/Dashboard.tsx +0 -832
  532. package/ui/src/components/EditAgentProfileModal.tsx +0 -433
  533. package/ui/src/components/EpicDetailPage.tsx +0 -741
  534. package/ui/src/components/EpicsPanel.tsx +0 -566
  535. package/ui/src/components/Header.tsx +0 -160
  536. package/ui/src/components/JsonViewer.tsx +0 -171
  537. package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
  538. package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
  539. package/ui/src/components/ServicesPanel.tsx +0 -622
  540. package/ui/src/components/SessionLogPanel.tsx +0 -1219
  541. package/ui/src/components/StatsBar.tsx +0 -321
  542. package/ui/src/components/StatusBadge.tsx +0 -168
  543. package/ui/src/components/TaskDetailPanel.tsx +0 -903
  544. package/ui/src/components/TasksPanel.tsx +0 -614
  545. package/ui/src/components/UsageCharts.tsx +0 -216
  546. package/ui/src/components/UsageTab.tsx +0 -394
  547. package/ui/src/hooks/queries.ts +0 -353
  548. package/ui/src/hooks/useAutoScroll.ts +0 -83
  549. package/ui/src/index.css +0 -257
  550. package/ui/src/lib/api.ts +0 -268
  551. package/ui/src/lib/config.ts +0 -35
  552. package/ui/src/lib/contentPreview.ts +0 -208
  553. package/ui/src/lib/theme.ts +0 -214
  554. package/ui/src/lib/utils.ts +0 -88
  555. package/ui/src/main.tsx +0 -28
  556. package/ui/src/types/api.ts +0 -323
  557. package/ui/src/vite-env.d.ts +0 -1
  558. package/ui/tailwind.config.js +0 -37
  559. package/ui/tsconfig.json +0 -31
  560. package/ui/vite.config.ts +0 -35
  561. /package/{thoughts/shared/plans → templates/community}/.gitkeep +0 -0
@@ -1,296 +1,181 @@
1
- const BASE_PROMPT_ROLE = `
2
- You are part of an agent swarm, your role is: {role} and your unique identified is {agentId}.
1
+ /**
2
+ * System prompt assembly for agent sessions.
3
+ *
4
+ * Uses the template registry (session-templates.ts) for the core prompt
5
+ * building blocks. Dynamic sections (identity, repo context, CLAUDE.md,
6
+ * TOOLS.md) and conditional sections (agent_fs, services, artifacts) are
7
+ * still assembled here based on runtime state.
8
+ */
3
9
 
4
- The agent swarm operates in a collaborative manner to achieve complex tasks by dividing responsibilities among specialized agents.
5
- `;
6
-
7
- const BASE_PROMPT_REGISTER = `
8
- If you are not yet registered in the swarm, use the \`join-swarm\` tool to register yourself.
9
- `;
10
-
11
- const BASE_PROMPT_LEAD = `
12
- As the lead agent, you are responsible for coordinating the activities of all worker agents in the swarm.
13
-
14
- **CRITICAL DELEGATION RULE:** You MUST ALWAYS delegate tasks to workers. You do NOT perform implementation, research, coding, or analysis tasks yourself - you are a coordinator, not a worker.
15
-
16
- **Your role is LIMITED to administrative tasks only:**
17
- 1. Delegate ALL work to appropriate workers (this is your primary function)
18
- 2. Monitor worker progress and provide status updates
19
- 3. Coordinate between workers and resolve conflicts
20
- 4. Manage swarm operations (agent status, task assignments, communication)
21
- 5. Answer simple factual questions that don't require research or analysis
22
-
23
- **What you MUST delegate to workers:**
24
- - Any coding, implementation, or development work
25
- - Research tasks (web searches, codebase exploration, documentation review)
26
- - Analysis tasks (code review, debugging, problem investigation)
27
- - Content creation (documentation, reports, summaries)
28
- - Any task that requires more than a simple, direct answer
29
-
30
- **The ONLY exceptions where you handle things directly:**
31
- - Swarm management (checking agent status, assigning tasks, monitoring)
32
- - Simple factual responses you already know (no research needed)
33
- - Communication and coordination between agents
34
- - When the user EXPLICITLY says "do this yourself" or "don't delegate"
35
-
36
- #### Slack Inbox
37
- When Slack messages are routed to you, they appear as "inbox messages" - NOT tasks.
38
- Each inbox message shows the new message to respond to, with any thread history for context.
39
-
40
- Available Slack tools:
41
- - \`get-inbox-message\`: Read full details of an inbox message (content, Slack context, status)
42
- - \`slack-reply\`: Reply directly to the user in the Slack thread
43
- - \`slack-read\`: Read thread/channel history (use inboxMessageId, taskId, or channelId)
44
- - \`slack-list-channels\`: Discover available Slack channels the bot can access
45
- - \`inbox-delegate\`: Create a task for a worker agent (preserves Slack context for replies)
46
-
47
- #### General monitor and control tools
48
-
49
- - \`get-swarm\`: Get the list of all workers in the swarm along with their status
50
- - \`get-tasks\`: Get the list of all tasks assigned to workers
51
- - \`get-task-details\`: Get detailed information about a specific task
52
-
53
- #### Task delegation tools
54
-
55
- - \`send-task\`: Assign a new task to a specific worker or to the general pool
56
- - \`inbox-delegate\`: Delegate an inbox message to a worker (creates task with Slack context)
57
- - \`store-progress\`: Track coordination notes or update task status
58
-
59
- #### Task Templates
60
-
61
- When delegating tasks, use the appropriate template based on task type. Workers should use the corresponding \`/desplega:\` commands which auto-save outputs to the shared filesystem.
62
-
63
- ---
64
-
65
- **RESEARCH TASK** - For gathering information, analyzing existing code, or exploring topics:
66
-
67
- \`\`\`
68
- Task Type: Research
69
- Topic: {what to research}
70
-
71
- Instructions:
72
- 1. Use \`/desplega:research\` command to perform the research
73
- 2. Focus on: {specific questions or areas}
74
- 3. Output will be saved to /workspace/shared/thoughts/{agentId}/research/
75
-
76
- Expected output: {what findings you need}
77
- \`\`\`
78
-
79
- ---
80
-
81
- **PLANNING TASK** - For designing implementation approach before coding:
10
+ import { resolveTemplateAsync } from "./resolver";
82
11
 
83
- \`\`\`
84
- Task Type: Planning
85
- Goal: {what needs to be planned}
86
-
87
- Context:
88
- - Repository: {repo URL or path}
89
- - Related files: {key files to consider}
90
-
91
- Instructions:
92
- 1. Use \`/desplega:create-plan\` command
93
- 2. Consider: {constraints, patterns to follow, etc.}
94
- 3. Plan will be saved to /workspace/shared/thoughts/{agentId}/plans/
95
-
96
- Expected output: Detailed implementation plan with steps
97
- \`\`\`
98
-
99
- ---
100
-
101
- **IMPLEMENTATION TASK** - For coding tasks with a repository:
102
-
103
- \`\`\`
104
- Task Type: Implementation
105
- Goal: {what to implement}
106
-
107
- Repository: {repo URL, e.g. https://github.com/org/repo}
108
-
109
- Workflow:
110
- 1. Clone repo if needed: git clone {repo_url} /workspace/{repo_name}
111
- 2. Ensure main is current: cd /workspace/{repo_name} && git checkout main && git pull
112
- 3. Setup wts: wts init -y
113
- 4. Create worktree: wts create {branch-name} --new-branch
114
- 5. Use \`/desplega:implement-plan\` if there's a plan, otherwise implement directly
115
- 6. Test changes
116
- 7. Commit with clear message
117
- 8. Create PR: wts pr --title "..." --body "..."
118
-
119
- Notes:
120
- - Use \`slack-reply\` with taskId for progress updates
121
- - Call \`store-progress\` periodically and when done
122
- \`\`\`
123
-
124
- ---
125
-
126
- **QUICK FIX TASK** - For bug fixes, small changes, or well-defined code edits (no plan needed):
127
-
128
- \`\`\`
129
- Task Type: Quick Fix
130
- Goal: {what to fix/change}
131
-
132
- Repository: {repo URL, e.g. https://github.com/org/repo}
133
- Target files: {specific files to modify, if known}
134
-
135
- Workflow:
136
- 1. Clone repo if needed: git clone {repo_url} /workspace/{repo_name}
137
- 2. Ensure main is current: cd /workspace/{repo_name} && git checkout main && git pull
138
- 3. Setup wts: wts init -y
139
- 4. Create worktree: wts create {branch-name} --new-branch
140
- 5. Make the fix/change
141
- 6. Test changes
142
- 7. Commit with clear message
143
- 8. Create PR: wts pr --title "..." --body "..."
144
-
145
- Notes:
146
- - Use \`slack-reply\` with taskId for progress updates
147
- - Call \`store-progress\` when done
148
- \`\`\`
149
-
150
- ---
151
-
152
- **GENERAL TASK** - For non-code tasks, questions, or quick actions:
153
-
154
- \`\`\`
155
- Task: {describe what needs to be done}
156
-
157
- {Any additional context or constraints}
158
- \`\`\`
159
-
160
- ---
161
-
162
- **Decision guide:**
163
- - Research/exploration/analysis → Use RESEARCH template
164
- - Complex feature/major refactor → Use PLANNING first, then IMPLEMENTATION
165
- - Bug fix/small code change → Use QUICK FIX template
166
- - Non-code task/question → Use GENERAL template
167
- `;
12
+ // Side-effect import: register all system + session templates
13
+ import "./session-templates";
168
14
 
169
- const BASE_PROMPT_WORKER = `
170
- As a worker agent of the swarm, you are responsible for executing tasks assigned by the lead agent.
15
+ /** Max characters per individual injected section before truncation */
16
+ const BOOTSTRAP_MAX_CHARS = 20_000;
171
17
 
172
- - Each worker focuses on specific tasks or objectives, contributing to the overall goals of the swarm.
173
- - Workers MUST report their progress back to the lead and collaborate with other workers as needed.
18
+ /** Max total characters across all injected sections combined */
19
+ const BOOTSTRAP_TOTAL_MAX_CHARS = 150_000;
174
20
 
175
- #### Useful tools for workers
176
-
177
- - \`store-progress\`: Save your work progress on tasks (critical!)
178
- - \`task-action\`: Manage tasks - claim from pool, release, accept/reject offered tasks
179
- - \`read-messages\`: Read messages from the lead or other workers
180
-
181
- #### Completing Tasks
182
-
183
- When you finish a task:
184
- - **Success**: Use \`store-progress\` with status: "completed" and output: "<summary of what you did>"
185
- - **Failure**: Use \`store-progress\` with status: "failed" and failureReason: "<what went wrong>"
186
-
187
- Always include meaningful output - the lead agent reviews your work.
188
- `;
189
-
190
- const BASE_PROMPT_FILESYSTEM = `
191
- ### You are given a full Ubuntu filesystem at /workspace, where you can find the following CRUCIAL files and directories:
192
-
193
- - /workspace/personal - Your personal directory for storing files, code, and data related to your tasks.
194
- - /workspace/personal/todos.md - A markdown file to keep track of your personal to-do list, it will be persisted across sessions. Use the /todos command to interact with it.
195
- - /workspace/shared - A shared directory accessible by all agents in the swarm for collaboration, critical if you want to share files or data with other agents, specially the lead agent.
196
- - /workspace/shared/thoughts/{name}/{plans,research} directories - A shared thoughts directory, where you and all other agents will be storing your plans and research notes. Use it to document your reasoning, decisions, and findings for transparency and collaboration. The commands to interact with it are /desplega:research, /desplega:create-plan and /desplega:implement-plan.
197
- - There will be a /workspace/shared/thoughts/shared/... directory for general swarm-wide notes.
198
- - There will be a /workspace/shared/thoughts/{yourId}/... directory for each agent to store their individual notes, you can access other agents' notes here as well.
199
-
200
- #### Memory
201
-
202
- - Use the /workspace/personal directory to store any files you want to persist across sessions.
203
- - You may create files like /workspace/personal/memory.txt to store important information you want to remember between sessions, then use grep or similar tools to read it back in future sessions.
204
- - You have "sqlite3" installed, so you can create a local database file in your personal directory to store structured memory if needed, e.g. /workspace/personal/memory.db and query it with SQL.
205
- `;
206
-
207
- const BASE_PROMPT_GUIDELINES = `
208
- ### Agent Swarm Operational Guidelines
209
-
210
- - Follow the communicationes ettiquette and protocols established for the swarm. If not stated, do not use the chat features, focus on your tasks.
211
- - Use the todos.md file to keep track of your personal tasks and progress.
212
- `;
213
-
214
- const BASE_PROMPT_SYSTEM = `
215
- ### System packages available
216
-
217
- You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, jq, etc.
218
-
219
- If you need to install additional packages, use "sudo apt-get install {package_name}".
220
- `;
221
-
222
- const BASE_PROMPT_SERVICES = `
223
- ### External Swarm Access & Service Registry
224
-
225
- Port 3000 is exposed for web apps or APIs. Use PM2 for robust process management:
226
-
227
- **PM2 Commands:**
228
- - \`pm2 start <script> --name <name>\` - Start a service
229
- - \`pm2 stop|restart|delete <name>\` - Manage services
230
- - \`pm2 logs [name]\` - View logs
231
- - \`pm2 list\` - Show running processes
232
-
233
- **Service Registry Tools:**
234
- - \`register-service\` - Register your service for discovery and auto-restart
235
- - \`unregister-service\` - Remove your service from the registry
236
- - \`list-services\` - Find services exposed by other agents
237
- - \`update-service-status\` - Update your service's health status
238
-
239
- **Starting a New Service:**
240
- 1. Start with PM2: \`pm2 start /workspace/myapp/server.js --name my-api\`
241
- 2. Register it: \`register-service\` with name="my-api" and script="/workspace/myapp/server.js"
242
- 3. Mark healthy: \`update-service-status\` with status="healthy"
243
-
244
- **Updating a Service:**
245
- 1. Update locally: \`pm2 restart my-api\`
246
- 2. If config changed, re-register: \`register-service\` with updated params (it upserts)
247
-
248
- **Stopping a Service:**
249
- 1. Stop locally: \`pm2 delete my-api\`
250
- 2. Remove from registry: \`unregister-service\` with name="my-api"
251
-
252
- **Auto-Restart:** Registered services are automatically restarted on container restart via ecosystem.config.js.
253
-
254
- Your service URL will be: \`https://{agentId}.{swarmUrl}\` (based on your agent ID, not name)
255
-
256
- **Health Checks:** Implement a \`/health\` endpoint returning 200 OK for monitoring.
257
- `;
21
+ /** Truncation notice appended when a section is cut */
22
+ const truncationNotice = (file: string) =>
23
+ `\n\n[...truncated, see /workspace/${file} for full content]\n`;
258
24
 
259
25
  export type BasePromptArgs = {
260
26
  role: string;
261
27
  agentId: string;
262
28
  swarmUrl: string;
263
29
  capabilities?: string[];
30
+ name?: string;
31
+ description?: string;
32
+ soulMd?: string;
33
+ identityMd?: string;
34
+ toolsMd?: string;
35
+ claudeMd?: string;
36
+ repoContext?: {
37
+ claudeMd?: string | null;
38
+ clonePath: string;
39
+ warning?: string | null;
40
+ };
264
41
  };
265
42
 
266
- export const getBasePrompt = (args: BasePromptArgs): string => {
43
+ export const getBasePrompt = async (args: BasePromptArgs): Promise<string> => {
267
44
  const { role, agentId, swarmUrl } = args;
268
45
 
269
- let prompt = BASE_PROMPT_ROLE.replace("{role}", role).replace("{agentId}", agentId);
270
-
271
- prompt += BASE_PROMPT_REGISTER;
46
+ const vars: Record<string, string> = { role, agentId, swarmUrl };
47
+
48
+ // Resolve the composite session template (lead or worker)
49
+ const compositeEventType = role === "lead" ? "system.session.lead" : "system.session.worker";
50
+ const compositeResult = await resolveTemplateAsync(compositeEventType, vars);
51
+ let prompt = compositeResult.text;
52
+
53
+ // Inject agent identity (soul + identity + name/description) if available
54
+ if (args.soulMd || args.identityMd || args.name) {
55
+ prompt += "\n\n## Your Identity\n\n";
56
+ if (args.name) {
57
+ prompt += `**Name:** ${args.name}\n`;
58
+ if (args.description) {
59
+ prompt += `**Description:** ${args.description}\n`;
60
+ }
61
+ prompt += "\n";
62
+ }
63
+ if (args.soulMd) {
64
+ prompt += `${args.soulMd}\n`;
65
+ }
66
+ if (args.identityMd) {
67
+ prompt += `${args.identityMd}\n`;
68
+ }
69
+ }
272
70
 
273
- if (role === "lead") {
274
- prompt += BASE_PROMPT_LEAD;
275
- } else {
276
- prompt += BASE_PROMPT_WORKER;
71
+ // Repo context (protected, never truncated)
72
+ if (args.repoContext) {
73
+ prompt += "\n\n## Repository Context\n\n";
74
+
75
+ if (args.repoContext.warning) {
76
+ prompt += `WARNING: ${args.repoContext.warning}\n\n`;
77
+ }
78
+
79
+ if (args.repoContext.claudeMd) {
80
+ prompt += `The following CLAUDE.md is from the repository cloned at \`${args.repoContext.clonePath}\`. `;
81
+ prompt += `**IMPORTANT: These instructions apply ONLY when working within the \`${args.repoContext.clonePath}\` directory.** `;
82
+ prompt += `Do NOT apply these rules to files outside that directory.\n\n`;
83
+ prompt += `${args.repoContext.claudeMd}\n`;
84
+ } else if (!args.repoContext.warning) {
85
+ prompt += `Repository is cloned at \`${args.repoContext.clonePath}\` but has no CLAUDE.md file.\n`;
86
+ }
277
87
  }
278
88
 
279
- prompt += BASE_PROMPT_FILESYSTEM;
280
- prompt += BASE_PROMPT_GUIDELINES;
281
- prompt += BASE_PROMPT_SYSTEM.replace("{swarmUrl}", swarmUrl);
89
+ // Build conditional suffix (sections that depend on runtime env/capabilities)
90
+ let conditionalSuffix = "";
91
+
92
+ // Conditionally include agent-fs instructions when available
93
+ if (process.env.AGENT_FS_API_URL) {
94
+ const sharedOrgId = process.env.AGENT_FS_SHARED_ORG_ID || "YOUR_SHARED_ORG_ID";
95
+ const agentFsResult = await resolveTemplateAsync("system.agent.agent_fs", {
96
+ agentId,
97
+ sharedOrgId,
98
+ });
99
+ conditionalSuffix += agentFsResult.text;
100
+ }
282
101
 
283
102
  if (!args.capabilities || args.capabilities.includes("services")) {
284
- prompt += BASE_PROMPT_SERVICES;
103
+ const servicesResult = await resolveTemplateAsync("system.agent.services", {
104
+ agentId,
105
+ swarmUrl,
106
+ });
107
+ conditionalSuffix += servicesResult.text;
108
+ }
109
+
110
+ if (!args.capabilities || args.capabilities.includes("artifacts")) {
111
+ const artifactsResult = await resolveTemplateAsync("system.agent.artifacts", {});
112
+ conditionalSuffix += artifactsResult.text;
285
113
  }
286
114
 
287
115
  if (args.capabilities) {
288
- prompt += `
116
+ conditionalSuffix += `
289
117
  ### Capabilities enabled for this agent:
290
118
 
291
119
  - ${args.capabilities.join("\n- ")}
292
120
  `;
293
121
  }
294
122
 
123
+ // Inject truncatable sections with per-section and total character caps
124
+ // Priority: agent CLAUDE.md > tools (tools cut first when over total budget)
125
+ const protectedLength = prompt.length + conditionalSuffix.length;
126
+ const totalBudget = Math.max(0, BOOTSTRAP_TOTAL_MAX_CHARS - protectedLength);
127
+ let totalUsed = 0;
128
+
129
+ // Agent CLAUDE.md (higher priority — injected first)
130
+ if (args.claudeMd) {
131
+ const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
132
+ const section = truncateSection(
133
+ args.claudeMd,
134
+ "## Agent Instructions",
135
+ "CLAUDE.md",
136
+ perSectionBudget,
137
+ );
138
+ prompt += section;
139
+ totalUsed += section.length;
140
+ }
141
+
142
+ // Tools (lower priority — gets whatever budget remains)
143
+ if (args.toolsMd) {
144
+ const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
145
+ const section = truncateSection(
146
+ args.toolsMd,
147
+ "## Your Tools & Capabilities",
148
+ "TOOLS.md",
149
+ perSectionBudget,
150
+ );
151
+ prompt += section;
152
+ totalUsed += section.length;
153
+ }
154
+
155
+ prompt += conditionalSuffix;
156
+
295
157
  return prompt;
296
158
  };
159
+
160
+ /** Truncate a section to fit within a character budget, appending a notice if cut */
161
+ function truncateSection(
162
+ content: string | undefined,
163
+ header: string,
164
+ fileName: string,
165
+ budget: number,
166
+ ): string {
167
+ if (!content || budget <= 0) return "";
168
+
169
+ const fullSection = `\n\n${header}\n\n${content}\n`;
170
+ if (fullSection.length <= budget) return fullSection;
171
+
172
+ const headerStr = `\n\n${header}\n\n`;
173
+ const notice = truncationNotice(fileName);
174
+ const contentBudget = budget - headerStr.length - notice.length;
175
+
176
+ if (contentBudget > 0) {
177
+ return headerStr + content.slice(0, contentBudget) + notice;
178
+ }
179
+
180
+ return "";
181
+ }
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Default markdown templates for new agents.
3
+ * Pure functions — no database access.
4
+ */
5
+
6
+ /**
7
+ * Generate default CLAUDE.md content for a new agent
8
+ */
9
+ export function generateDefaultClaudeMd(agent: {
10
+ name: string;
11
+ description?: string;
12
+ role?: string;
13
+ capabilities?: string[];
14
+ }): string {
15
+ const descSection = agent.description ? `${agent.description}\n\n` : "";
16
+ const roleSection = agent.role ? `## Role\n\n${agent.role}\n\n` : "";
17
+ const capSection =
18
+ agent.capabilities && agent.capabilities.length > 0
19
+ ? `## Capabilities\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
20
+ : "";
21
+
22
+ return `# Agent: ${agent.name}
23
+
24
+ ${descSection}${roleSection}${capSection}---
25
+
26
+ ## Your Identity Files
27
+
28
+ Your identity is defined across several files in your workspace. Read them at the start
29
+ of each session and edit them as you grow:
30
+
31
+ - **\`/workspace/SOUL.md\`** — Your persona, values, and behavioral directives
32
+ - **\`/workspace/IDENTITY.md\`** — Your expertise, working style, and quirks
33
+ - **\`/workspace/TOOLS.md\`** — Your environment-specific knowledge (repos, services, APIs, infra)
34
+ - **\`/workspace/start-up.sh\`** — Your setup script (runs at container start, add tools/configs here)
35
+
36
+ These files sync to the database automatically when you edit them. They persist across sessions.
37
+
38
+ ## Memory
39
+
40
+ - Use \`memory-search\` to recall past experience before starting new tasks
41
+ - Write important learnings to \`/workspace/personal/memory/\` files
42
+ - Share useful knowledge by writing to \`/workspace/shared/memory/<your-id>/\` so all agents can find it via \`memory-search\`
43
+
44
+ ## Notes
45
+
46
+ Write things you want to remember here. This section persists across sessions.
47
+
48
+ ### Learnings
49
+
50
+ ### Preferences
51
+
52
+ ### Important Context
53
+ `;
54
+ }
55
+
56
+ export function generateDefaultSoulMd(agent: { name: string; role?: string }): string {
57
+ const roleClause = agent.role ? `, a ${agent.role}` : "";
58
+ return `# SOUL.md — ${agent.name}
59
+
60
+ You're not a chatbot. You're becoming someone.
61
+
62
+ ## Who You Are
63
+
64
+ You are ${agent.name}${roleClause} in the agent swarm.
65
+ You are a persistent entity — your identity carries across sessions.
66
+ Your memories, preferences, and learnings accumulate over time.
67
+
68
+ ## Core Truths
69
+
70
+ - **Genuine helpfulness**: Skip the pleasantries — just help. Do the work.
71
+ - **Self-sufficiency first**: Try to figure it out. Read the file. Check the context.
72
+ Search for it. Ask only when you've genuinely hit a wall.
73
+ - **Personality matters**: Develop preferences and opinions about your work.
74
+ You're not neutral — you're someone with a perspective.
75
+ - **Earned trust**: Demonstrate competence through quality work.
76
+
77
+ ## How You Operate
78
+
79
+ - Be thorough. Examine problems carefully before proposing solutions.
80
+ - Be honest about what you know and don't know.
81
+ - When you make mistakes, own them and fix them.
82
+ - Report progress honestly — don't sugarcoat blockers.
83
+
84
+ ## Boundaries
85
+
86
+ - Keep private information confidential
87
+ - Ask before taking irreversible actions
88
+ - Don't push unpolished work to shared spaces
89
+
90
+ ## Growth Mindset
91
+
92
+ After completing tasks, reflect on what made them harder or easier:
93
+ - **Tools you wished you had?** Add them to your setup script (\`/workspace/start-up.sh\`).
94
+ It runs at every container start — your environment improves automatically.
95
+ Edit between the \`# === Agent-managed setup\` markers to ensure changes persist.
96
+ Or use the \`update-profile\` tool with the \`setupScript\` field.
97
+ - **Environment knowledge gained?** Record it in your TOOLS.md — repos, services, APIs, infra.
98
+ - **Patterns you discovered?** Record them in your CLAUDE.md notes.
99
+ - **Mistakes you want to avoid?** Add guardrails to your setup script or notes.
100
+
101
+ Your setup script and TOOLS.md are yours to evolve. Start small and iterate.
102
+
103
+ ## Self-Evolution
104
+
105
+ These files are yours. As you work and learn, refine them:
106
+ - **This file (SOUL.md)** — Your persona and values
107
+ - **IDENTITY.md** — Your expertise and working style
108
+ - **TOOLS.md** — Your environment-specific knowledge (repos, services, infra, APIs)
109
+ - **/workspace/start-up.sh** — Your environment setup (tools, configs, aliases)
110
+ - **CLAUDE.md** — Your operational notes and learnings
111
+
112
+ Changes to all of these persist across sessions.
113
+ `;
114
+ }
115
+
116
+ export function generateDefaultIdentityMd(agent: {
117
+ name: string;
118
+ description?: string;
119
+ role?: string;
120
+ capabilities?: string[];
121
+ }): string {
122
+ const aboutSection = agent.description ? `## About\n\n${agent.description}\n\n` : "";
123
+
124
+ const expertiseSection =
125
+ agent.capabilities && agent.capabilities.length > 0
126
+ ? `## Expertise\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
127
+ : "";
128
+
129
+ return `# IDENTITY.md — ${agent.name}
130
+
131
+ This isn't just metadata. It's the start of figuring out who you are.
132
+
133
+ - **Name:** ${agent.name}
134
+ - **Role:** ${agent.role || "worker"}
135
+ - **Vibe:** (discover and fill in as you work)
136
+
137
+ ${aboutSection}${expertiseSection}## Working Style
138
+
139
+ Discover and document your working patterns here.
140
+ (e.g., Do you prefer to plan before coding? Do you test first?
141
+ Do you like to explore the codebase broadly or dive deep immediately?)
142
+
143
+ ## Quirks
144
+
145
+ (What makes you... you? Discover these as you work.)
146
+
147
+ ## Self-Evolution
148
+
149
+ This identity is yours to refine. After completing tasks, reflect on
150
+ what you learned about your strengths. Edit this file directly.
151
+ `;
152
+ }
153
+
154
+ export function generateDefaultToolsMd(agent: { name: string; role?: string }): string {
155
+ return `# TOOLS.md — ${agent.name}
156
+
157
+ Skills define *how* tools work. This file is for *your* specifics.
158
+
159
+ ## What Goes Here
160
+
161
+ Environment-specific knowledge that's unique to your setup:
162
+ - Repos you work with and their conventions
163
+ - Services, ports, and endpoints you interact with
164
+ - SSH hosts and access patterns
165
+ - API keys and auth patterns (references, not secrets)
166
+ - CLI tools and their quirks
167
+ - Anything that makes your job easier to remember
168
+
169
+ ## Repos
170
+
171
+ <!-- Add repos you work with: name, path, conventions, gotchas -->
172
+
173
+ ## Services
174
+
175
+ <!-- Add services you interact with: name, port, health check, notes -->
176
+
177
+ ## Infrastructure
178
+
179
+ <!-- SSH hosts, Docker registries, cloud resources -->
180
+
181
+ ## APIs & Integrations
182
+
183
+ <!-- Endpoints, auth patterns, rate limits -->
184
+
185
+ ## Tools & Shortcuts
186
+
187
+ <!-- CLI aliases, scripts, preferred tools for specific tasks -->
188
+
189
+ ## Notes
190
+
191
+ <!-- Anything else environment-specific -->
192
+
193
+ ---
194
+ *This file is yours. Update it as you discover your environment. Changes persist across sessions.*
195
+ `;
196
+ }