@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.
- package/README.md +1 -1
- package/openapi.json +2070 -728
- package/package.json +10 -1
- package/src/agentmail/handlers.ts +65 -10
- package/src/agentmail/templates.ts +111 -0
- package/src/be/db.ts +1233 -7
- package/src/be/migrations/014_prompt_templates.sql +33 -0
- package/src/be/migrations/015_workflow_workspace.sql +3 -0
- package/src/be/migrations/016_active_session_runner_session.sql +4 -0
- package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
- package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
- package/src/be/migrations/019_skills.sql +65 -0
- package/src/be/migrations/020_approval_requests.sql +41 -0
- package/src/be/seed.ts +62 -0
- package/src/be/skill-parser.ts +70 -0
- package/src/be/skill-sync.ts +106 -0
- package/src/commands/runner.ts +320 -132
- package/src/commands/templates.ts +172 -0
- package/src/github/handlers.ts +292 -77
- package/src/github/mentions-aliases.test.ts +73 -0
- package/src/github/mentions.test.ts +3 -3
- package/src/github/mentions.ts +32 -6
- package/src/github/templates.ts +398 -0
- package/src/gitlab/handlers.ts +63 -22
- package/src/gitlab/templates.ts +140 -0
- package/src/heartbeat/heartbeat.ts +19 -10
- package/src/heartbeat/templates.ts +30 -0
- package/src/http/active-sessions.ts +27 -0
- package/src/http/approval-requests.ts +247 -0
- package/src/http/config.ts +3 -3
- package/src/http/index.ts +9 -2
- package/src/http/poll.ts +135 -14
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/schedules.ts +35 -0
- package/src/http/skills.ts +479 -0
- package/src/http/workflows.ts +8 -0
- package/src/linear/sync.ts +28 -4
- package/src/linear/templates.ts +47 -0
- package/src/prompts/base-prompt.ts +41 -490
- package/src/prompts/registry.ts +57 -0
- package/src/prompts/resolver.ts +296 -0
- package/src/prompts/session-templates.ts +604 -0
- package/src/providers/claude-adapter.ts +15 -2
- package/src/providers/pi-mono-extension.ts +5 -1
- package/src/scheduler/scheduler.ts +125 -91
- package/src/server.ts +44 -0
- package/src/slack/assistant.ts +7 -4
- package/src/slack/channel-activity.ts +177 -0
- package/src/slack/handlers.ts +21 -6
- package/src/slack/templates.ts +55 -0
- package/src/tests/approval-requests.test.ts +735 -0
- package/src/tests/artifact-sdk.test.ts +12 -12
- package/src/tests/base-prompt.test.ts +49 -49
- package/src/tests/channel-activity.test.ts +363 -0
- package/src/tests/heartbeat.test.ts +1 -0
- package/src/tests/linear-webhook.test.ts +7 -3
- package/src/tests/pool-session-logs.test.ts +199 -0
- package/src/tests/prompt-template-github.test.ts +682 -0
- package/src/tests/prompt-template-remaining.test.ts +504 -0
- package/src/tests/prompt-template-resolver.test.ts +621 -0
- package/src/tests/prompt-template-session.test.ts +363 -0
- package/src/tests/prompt-templates-db.test.ts +616 -0
- package/src/tests/self-improvement.test.ts +8 -7
- package/src/tests/skill-parser.test.ts +178 -0
- package/src/tests/skill-sync.test.ts +171 -0
- package/src/tests/slack-metadata-inheritance.test.ts +1 -1
- package/src/tests/slack-thread-followups.test.ts +1 -1
- package/src/tests/structured-output.test.ts +0 -4
- package/src/tests/tool-annotations.test.ts +2 -1
- package/src/tests/update-profile-agentid.test.ts +248 -0
- package/src/tests/update-profile-auth.test.ts +195 -0
- package/src/tests/workflow-async-v2.test.ts +126 -4
- package/src/tests/workflow-definition-validation.test.ts +76 -0
- package/src/tests/workflow-executors.test.ts +4 -2
- package/src/tests/workflow-retry-v2.test.ts +1 -1
- package/src/tests/workflow-schedule-trigger.test.ts +104 -0
- package/src/tests/workflow-workspace.test.ts +272 -0
- package/src/tools/prompt-templates/delete.ts +86 -0
- package/src/tools/prompt-templates/get.ts +89 -0
- package/src/tools/prompt-templates/index.ts +5 -0
- package/src/tools/prompt-templates/list.ts +95 -0
- package/src/tools/prompt-templates/preview.ts +84 -0
- package/src/tools/prompt-templates/set.ts +117 -0
- package/src/tools/request-human-input.ts +106 -0
- package/src/tools/skills/index.ts +11 -0
- package/src/tools/skills/skill-create.ts +105 -0
- package/src/tools/skills/skill-delete.ts +67 -0
- package/src/tools/skills/skill-get.ts +75 -0
- package/src/tools/skills/skill-install-remote.ts +152 -0
- package/src/tools/skills/skill-install.ts +101 -0
- package/src/tools/skills/skill-list.ts +77 -0
- package/src/tools/skills/skill-publish.ts +123 -0
- package/src/tools/skills/skill-search.ts +43 -0
- package/src/tools/skills/skill-sync-remote.ts +128 -0
- package/src/tools/skills/skill-uninstall.ts +60 -0
- package/src/tools/skills/skill-update.ts +128 -0
- package/src/tools/store-progress.ts +22 -4
- package/src/tools/task-action.ts +20 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +23 -0
- package/src/tools/update-profile.ts +106 -34
- package/src/tools/workflows/create-workflow.ts +19 -1
- package/src/tools/workflows/update-workflow.ts +16 -1
- package/src/types.ts +109 -2
- package/src/workflows/definition.ts +30 -12
- package/src/workflows/engine.ts +40 -14
- package/src/workflows/executors/agent-task.ts +14 -3
- package/src/workflows/executors/human-in-the-loop.ts +160 -0
- package/src/workflows/executors/registry.ts +2 -0
- package/src/workflows/index.ts +1 -1
- package/src/workflows/recovery.ts +72 -0
- package/src/workflows/resume.ts +162 -12
- package/src/workflows/triggers.ts +31 -2
- package/src/workflows/version.ts +2 -0
- package/.claude/settings.json +0 -84
- package/.claude/settings.local.json +0 -117
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.entire/settings.json +0 -4
- package/.env.docker.example +0 -56
- package/.env.example +0 -78
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
- package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
- package/.github/workflows/ci.yml +0 -52
- package/.github/workflows/docker-and-deploy.yml +0 -132
- package/.github/workflows/merge-gate.yml +0 -233
- package/.opencode/plugins/entire.ts +0 -133
- package/.superset/config.json +0 -6
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -171
- package/CHANGELOG.md +0 -447
- package/CLAUDE.md +0 -521
- package/CONTRIBUTING.md +0 -315
- package/DEPLOYMENT.md +0 -622
- package/Dockerfile +0 -65
- package/Dockerfile.worker +0 -189
- package/MCP.md +0 -841
- package/UI.md +0 -40
- package/api-entrypoint.sh +0 -56
- package/assets/agent-swarm-logo-orange.png +0 -0
- package/assets/agent-swarm-logo.png +0 -0
- package/assets/agent-swarm.mp4 +0 -0
- package/assets/agent-swarm.png +0 -0
- package/biome.json +0 -39
- package/deploy/DEPLOY.md +0 -60
- package/deploy/agent-swarm.service +0 -17
- package/deploy/docker-push.ts +0 -30
- package/deploy/install.ts +0 -85
- package/deploy/prod-db.ts +0 -42
- package/deploy/uninstall.ts +0 -12
- package/deploy/update.ts +0 -21
- package/depot.json +0 -1
- package/docker-compose.example.yml +0 -350
- package/docker-compose.local.yml +0 -119
- package/docker-entrypoint.sh +0 -632
- package/docs-site/app/api/search/route.ts +0 -4
- package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
- package/docs-site/app/docs/layout.tsx +0 -12
- package/docs-site/app/globals.css +0 -24
- package/docs-site/app/layout.config.tsx +0 -34
- package/docs-site/app/layout.tsx +0 -119
- package/docs-site/app/llms-full.txt/route.ts +0 -11
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
- package/docs-site/app/llms.txt/route.ts +0 -8
- package/docs-site/app/page.tsx +0 -5
- package/docs-site/app/robots.ts +0 -13
- package/docs-site/app/sitemap.ts +0 -37
- package/docs-site/components/api-page.client.tsx +0 -4
- package/docs-site/components/api-page.tsx +0 -7
- package/docs-site/components/mdx/mermaid.tsx +0 -55
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
- package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
- package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
- package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
- package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
- package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
- package/docs-site/content/docs/(documentation)/index.mdx +0 -65
- package/docs-site/content/docs/(documentation)/meta.json +0 -19
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
- package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
- package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
- package/docs-site/content/docs/api-reference/agents.mdx +0 -9
- package/docs-site/content/docs/api-reference/channels.mdx +0 -9
- package/docs-site/content/docs/api-reference/config.mdx +0 -9
- package/docs-site/content/docs/api-reference/debug.mdx +0 -9
- package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
- package/docs-site/content/docs/api-reference/epics.mdx +0 -9
- package/docs-site/content/docs/api-reference/index.mdx +0 -32
- package/docs-site/content/docs/api-reference/memory.mdx +0 -9
- package/docs-site/content/docs/api-reference/meta.json +0 -25
- package/docs-site/content/docs/api-reference/poll.mdx +0 -9
- package/docs-site/content/docs/api-reference/repos.mdx +0 -9
- package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
- package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
- package/docs-site/content/docs/api-reference/stats.mdx +0 -9
- package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
- package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
- package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
- package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
- package/docs-site/content/docs/meta.json +0 -3
- package/docs-site/lib/get-llm-text.ts +0 -10
- package/docs-site/lib/openapi.ts +0 -23
- package/docs-site/lib/source.ts +0 -8
- package/docs-site/mdx-components.tsx +0 -13
- package/docs-site/next.config.mjs +0 -29
- package/docs-site/package.json +0 -35
- package/docs-site/pnpm-lock.yaml +0 -5407
- package/docs-site/postcss.config.mjs +0 -8
- package/docs-site/public/logo.png +0 -0
- package/docs-site/scripts/generate-docs.ts +0 -171
- package/docs-site/source.config.ts +0 -17
- package/docs-site/tsconfig.json +0 -46
- package/ecosystem.config.cjs +0 -66
- package/landing/next.config.ts +0 -14
- package/landing/package.json +0 -31
- package/landing/pnpm-lock.yaml +0 -1091
- package/landing/postcss.config.mjs +0 -8
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/logo.png +0 -0
- package/landing/public/og-image.png +0 -0
- package/landing/public/omghost-desplega.svg +0 -30
- package/landing/public/omghost-openfort.svg +0 -9
- package/landing/src/app/actions/waitlist.ts +0 -25
- package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
- package/landing/src/app/blog/page.tsx +0 -162
- package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
- package/landing/src/app/examples/page.tsx +0 -174
- package/landing/src/app/examples/x402/page.tsx +0 -456
- package/landing/src/app/globals.css +0 -122
- package/landing/src/app/layout.tsx +0 -134
- package/landing/src/app/page.tsx +0 -27
- package/landing/src/app/robots.ts +0 -13
- package/landing/src/app/sitemap.ts +0 -44
- package/landing/src/components/architecture.tsx +0 -163
- package/landing/src/components/cta.tsx +0 -52
- package/landing/src/components/features.tsx +0 -160
- package/landing/src/components/footer.tsx +0 -100
- package/landing/src/components/hero.tsx +0 -217
- package/landing/src/components/how-it-works.tsx +0 -165
- package/landing/src/components/navbar.tsx +0 -147
- package/landing/src/components/waitlist.tsx +0 -110
- package/landing/src/components/why-choose.tsx +0 -149
- package/landing/src/components/workshops.tsx +0 -328
- package/landing/src/lib/utils.ts +0 -6
- package/landing/tsconfig.json +0 -41
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
- package/new-ui/CLAUDE.md +0 -92
- package/new-ui/README.md +0 -73
- package/new-ui/biome.json +0 -42
- package/new-ui/components.json +0 -21
- package/new-ui/index.html +0 -25
- package/new-ui/package.json +0 -49
- package/new-ui/pnpm-lock.yaml +0 -4845
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +0 -814
- package/new-ui/src/api/hooks/index.ts +0 -64
- package/new-ui/src/api/hooks/use-agents.ts +0 -58
- package/new-ui/src/api/hooks/use-channels.ts +0 -115
- package/new-ui/src/api/hooks/use-config-api.ts +0 -46
- package/new-ui/src/api/hooks/use-costs.ts +0 -122
- package/new-ui/src/api/hooks/use-db-query.ts +0 -29
- package/new-ui/src/api/hooks/use-epics.ts +0 -75
- package/new-ui/src/api/hooks/use-repos.ts +0 -61
- package/new-ui/src/api/hooks/use-schedules.ts +0 -81
- package/new-ui/src/api/hooks/use-services.ts +0 -16
- package/new-ui/src/api/hooks/use-stats.ts +0 -27
- package/new-ui/src/api/hooks/use-tasks.ts +0 -89
- package/new-ui/src/api/hooks/use-workflows.ts +0 -109
- package/new-ui/src/api/types.ts +0 -549
- package/new-ui/src/app/App.tsx +0 -13
- package/new-ui/src/app/providers.tsx +0 -32
- package/new-ui/src/app/router.tsx +0 -52
- package/new-ui/src/components/layout/app-header.tsx +0 -47
- package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
- package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
- package/new-ui/src/components/layout/config-guard.tsx +0 -22
- package/new-ui/src/components/layout/root-layout.tsx +0 -40
- package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
- package/new-ui/src/components/shared/command-menu.tsx +0 -131
- package/new-ui/src/components/shared/data-grid.tsx +0 -141
- package/new-ui/src/components/shared/empty-state.tsx +0 -24
- package/new-ui/src/components/shared/error-boundary.tsx +0 -72
- package/new-ui/src/components/shared/json-viewer.tsx +0 -47
- package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
- package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
- package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
- package/new-ui/src/components/shared/stats-bar.tsx +0 -132
- package/new-ui/src/components/shared/status-badge.tsx +0 -131
- package/new-ui/src/components/shared/usage-summary.tsx +0 -179
- package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
- package/new-ui/src/components/ui/alert.tsx +0 -60
- package/new-ui/src/components/ui/avatar.tsx +0 -96
- package/new-ui/src/components/ui/badge.tsx +0 -46
- package/new-ui/src/components/ui/button.tsx +0 -62
- package/new-ui/src/components/ui/card.tsx +0 -75
- package/new-ui/src/components/ui/command.tsx +0 -160
- package/new-ui/src/components/ui/dialog.tsx +0 -143
- package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
- package/new-ui/src/components/ui/input.tsx +0 -21
- package/new-ui/src/components/ui/label.tsx +0 -19
- package/new-ui/src/components/ui/progress.tsx +0 -26
- package/new-ui/src/components/ui/scroll-area.tsx +0 -54
- package/new-ui/src/components/ui/select.tsx +0 -175
- package/new-ui/src/components/ui/separator.tsx +0 -28
- package/new-ui/src/components/ui/sheet.tsx +0 -132
- package/new-ui/src/components/ui/sidebar.tsx +0 -691
- package/new-ui/src/components/ui/skeleton.tsx +0 -13
- package/new-ui/src/components/ui/sonner.tsx +0 -35
- package/new-ui/src/components/ui/switch.tsx +0 -33
- package/new-ui/src/components/ui/table.tsx +0 -92
- package/new-ui/src/components/ui/tabs.tsx +0 -79
- package/new-ui/src/components/ui/textarea.tsx +0 -18
- package/new-ui/src/components/ui/tooltip.tsx +0 -51
- package/new-ui/src/components/workflows/action-node.tsx +0 -53
- package/new-ui/src/components/workflows/condition-node.tsx +0 -50
- package/new-ui/src/components/workflows/graph-utils.ts +0 -124
- package/new-ui/src/components/workflows/json-tree.tsx +0 -189
- package/new-ui/src/components/workflows/node-styles.ts +0 -10
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
- package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
- package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
- package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
- package/new-ui/src/hooks/use-config.ts +0 -203
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
- package/new-ui/src/hooks/use-mobile.ts +0 -19
- package/new-ui/src/hooks/use-theme.ts +0 -60
- package/new-ui/src/lib/config.ts +0 -188
- package/new-ui/src/lib/slugs.ts +0 -71
- package/new-ui/src/lib/utils.ts +0 -120
- package/new-ui/src/main.tsx +0 -11
- package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
- package/new-ui/src/pages/agents/page.tsx +0 -134
- package/new-ui/src/pages/chat/page.tsx +0 -674
- package/new-ui/src/pages/config/page.tsx +0 -1109
- package/new-ui/src/pages/dashboard/page.tsx +0 -454
- package/new-ui/src/pages/debug/page.tsx +0 -275
- package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
- package/new-ui/src/pages/epics/page.tsx +0 -321
- package/new-ui/src/pages/not-found/page.tsx +0 -18
- package/new-ui/src/pages/repos/page.tsx +0 -369
- package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
- package/new-ui/src/pages/schedules/page.tsx +0 -477
- package/new-ui/src/pages/services/page.tsx +0 -128
- package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
- package/new-ui/src/pages/tasks/page.tsx +0 -592
- package/new-ui/src/pages/usage/page.tsx +0 -195
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
- package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
- package/new-ui/src/pages/workflows/page.tsx +0 -266
- package/new-ui/src/styles/ag-grid.css +0 -36
- package/new-ui/src/styles/globals.css +0 -213
- package/new-ui/test-results/.last-run.json +0 -4
- package/new-ui/tsconfig.app.json +0 -34
- package/new-ui/tsconfig.json +0 -4
- package/new-ui/tsconfig.node.json +0 -26
- package/new-ui/vercel.json +0 -4
- package/new-ui/vite.config.ts +0 -28
- package/plugin/README.md +0 -1
- package/plugin/build-pi-skills.ts +0 -233
- package/plugin/hooks/hooks.json +0 -71
- package/prek.toml +0 -75
- package/pyproject.toml +0 -9
- package/scripts/check-db-boundary.sh +0 -60
- package/scripts/e2e-docker-provider.ts +0 -820
- package/scripts/e2e-io-schemas-test.ts +0 -807
- package/scripts/e2e-provider-test.ts +0 -220
- package/scripts/e2e-workflow-redesign.sh +0 -229
- package/scripts/e2e-workflow-test.sh +0 -285
- package/scripts/e2e-workflow-test.ts +0 -857
- package/scripts/generate-mcp-docs.ts +0 -415
- package/scripts/generate-openapi.ts +0 -26
- package/scripts/measure-tool-tokens.ts +0 -118
- package/scripts/x402-e2e-test.ts +0 -195
- package/scripts/x402-test-server.ts +0 -236
- package/scripts/x402-testnet-e2e.ts +0 -668
- package/slack-manifest.json +0 -88
- package/templates-ui/README.md +0 -46
- package/templates-ui/components.json +0 -17
- package/templates-ui/eslint.config.mjs +0 -18
- package/templates-ui/next.config.ts +0 -7
- package/templates-ui/package.json +0 -35
- package/templates-ui/pnpm-lock.yaml +0 -4571
- package/templates-ui/postcss.config.mjs +0 -7
- package/templates-ui/public/file.svg +0 -1
- package/templates-ui/public/globe.svg +0 -1
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +0 -1
- package/templates-ui/public/vercel.svg +0 -1
- package/templates-ui/public/window.svg +0 -1
- package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
- package/templates-ui/src/app/api/templates/route.ts +0 -18
- package/templates-ui/src/app/builder/page.tsx +0 -37
- package/templates-ui/src/app/globals.css +0 -94
- package/templates-ui/src/app/layout.tsx +0 -79
- package/templates-ui/src/app/page.tsx +0 -38
- package/templates-ui/src/app/robots.ts +0 -11
- package/templates-ui/src/app/sitemap.ts +0 -31
- package/templates-ui/src/components/compose-builder.tsx +0 -442
- package/templates-ui/src/components/compose-preview.tsx +0 -117
- package/templates-ui/src/components/file-preview.tsx +0 -77
- package/templates-ui/src/components/footer.tsx +0 -40
- package/templates-ui/src/components/header.tsx +0 -41
- package/templates-ui/src/components/template-card.tsx +0 -87
- package/templates-ui/src/components/template-detail.tsx +0 -125
- package/templates-ui/src/components/template-gallery.tsx +0 -263
- package/templates-ui/src/components/ui/badge.tsx +0 -36
- package/templates-ui/src/components/ui/button.tsx +0 -57
- package/templates-ui/src/components/ui/card.tsx +0 -76
- package/templates-ui/src/components/ui/separator.tsx +0 -31
- package/templates-ui/src/components/ui/tooltip.tsx +0 -32
- package/templates-ui/src/lib/compose-generator.ts +0 -241
- package/templates-ui/src/lib/templates.ts +0 -137
- package/templates-ui/src/lib/utils.ts +0 -6
- package/templates-ui/tsconfig.json +0 -34
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
- package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
- package/thoughts/shared/plans/.gitkeep +0 -0
- package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
- package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
- package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
- package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
- package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
- package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
- package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
- package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
- package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
- package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
- package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
- package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
- package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
- package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
- package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
- package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
- package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
- package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
- package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
- package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
- package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
- package/thoughts/shared/research/.gitkeep +0 -0
- package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
- package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
- package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
- package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
- package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
- package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
- package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
- package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
- package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
- package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
- package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
- package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
- package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
- package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
- package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
- package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
- package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
- package/thoughts/taras/plans/2026-02-20-auto-improvement.md +0 -803
- package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
- package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
- package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
- package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
- package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
- package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
- package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
- package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
- package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
- package/tsconfig.json +0 -37
package/DEPLOYMENT.md
DELETED
|
@@ -1,622 +0,0 @@
|
|
|
1
|
-
# Deployment Guide
|
|
2
|
-
|
|
3
|
-
This guide covers all deployment options for Agent Swarm.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Docker Compose (Recommended)](#docker-compose-recommended)
|
|
8
|
-
- [Docker Worker](#docker-worker)
|
|
9
|
-
- [Server Deployment (systemd)](#server-deployment-systemd)
|
|
10
|
-
- [Graceful Shutdown & Task Resume](#graceful-shutdown--task-resume)
|
|
11
|
-
- [Environment Variables](#environment-variables)
|
|
12
|
-
- [Slack Integration](#slack-integration)
|
|
13
|
-
- [GitHub App Integration](#github-app-integration)
|
|
14
|
-
- [Sentry Integration](#sentry-integration)
|
|
15
|
-
- [System Prompts](#system-prompts)
|
|
16
|
-
- [Service Registry (PM2)](#service-registry-pm2)
|
|
17
|
-
- [Publishing (Maintainers)](#publishing-maintainers)
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Docker Compose (Recommended)
|
|
22
|
-
|
|
23
|
-
The easiest way to deploy a full swarm with API, workers, and lead agent.
|
|
24
|
-
|
|
25
|
-
### Quick Start
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
# Copy example files
|
|
29
|
-
cp docker-compose.example.yml docker-compose.yml
|
|
30
|
-
|
|
31
|
-
# Create a combined .env for docker-compose (combines API + worker settings)
|
|
32
|
-
# You can merge .env.example (API) and .env.docker.example (worker) settings
|
|
33
|
-
cp .env.docker.example .env
|
|
34
|
-
|
|
35
|
-
# Edit .env with your values
|
|
36
|
-
vim .env
|
|
37
|
-
|
|
38
|
-
# Start the swarm
|
|
39
|
-
docker-compose up -d
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
> **Note:** `.env.example` contains API server settings, `.env.docker.example` contains Docker worker settings. For docker-compose, you need both sets of variables in a single `.env` file.
|
|
43
|
-
|
|
44
|
-
### ARM Compatibility (Apple Silicon)
|
|
45
|
-
|
|
46
|
-
All services in the docker-compose files include `platform: linux/amd64` to avoid `no matching manifest for linux/arm64/v8` errors on Apple Silicon Macs. The Docker images are built for `linux/amd64` and run via Rosetta emulation.
|
|
47
|
-
|
|
48
|
-
### What's Included
|
|
49
|
-
|
|
50
|
-
The example `docker-compose.yml` sets up:
|
|
51
|
-
|
|
52
|
-
- **API service** (port 3013) - MCP HTTP server
|
|
53
|
-
- **2 Worker agents** - Containerized Claude workers
|
|
54
|
-
- **1 Lead agent** - Coordinator agent
|
|
55
|
-
- **3 Content agents** (optional) - Content writer, reviewer, and strategist using `TEMPLATE_ID` for profile bootstrapping
|
|
56
|
-
|
|
57
|
-
### Configuration
|
|
58
|
-
|
|
59
|
-
Edit your `.env` file:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
# Required
|
|
63
|
-
API_KEY=your-secret-api-key
|
|
64
|
-
CLAUDE_CODE_OAUTH_TOKEN=your-oauth-token # Run `claude setup-token` to get this
|
|
65
|
-
# Multiple tokens for load balancing: CLAUDE_CODE_OAUTH_TOKEN=token1,token2,token3
|
|
66
|
-
|
|
67
|
-
# Agent IDs (optional, auto-generated if not set)
|
|
68
|
-
AGENT_ID=worker-1-uuid
|
|
69
|
-
AGENT_ID_2=worker-2-uuid
|
|
70
|
-
AGENT_ID_LEAD=lead-agent-uuid
|
|
71
|
-
|
|
72
|
-
# GitHub integration (optional)
|
|
73
|
-
GITHUB_TOKEN=your-github-token
|
|
74
|
-
GITHUB_EMAIL=your@email.com
|
|
75
|
-
GITHUB_NAME=Your Name
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Volumes
|
|
79
|
-
|
|
80
|
-
| Volume | Purpose |
|
|
81
|
-
|--------|---------|
|
|
82
|
-
| `swarm_api` | SQLite database persistence |
|
|
83
|
-
| `swarm_logs` | Session logs |
|
|
84
|
-
| `swarm_shared` | Shared workspace between agents (`/workspace/shared`) |
|
|
85
|
-
| `swarm_lead` | Lead agent's personal workspace (`/workspace/personal`) |
|
|
86
|
-
| `swarm_worker_*` | Personal workspace per worker (`/workspace/personal`) |
|
|
87
|
-
|
|
88
|
-
### Graceful Shutdown
|
|
89
|
-
|
|
90
|
-
The docker-compose example uses `stop_grace_period: 60s` to allow graceful task pause during deployments. When a container receives SIGTERM:
|
|
91
|
-
|
|
92
|
-
1. In-progress tasks are **paused** (not failed)
|
|
93
|
-
2. Task state and progress are preserved
|
|
94
|
-
3. After restart, paused tasks are automatically **resumed** with context
|
|
95
|
-
|
|
96
|
-
This enables zero-downtime deployments. See [Graceful Shutdown & Task Resume](#graceful-shutdown--task-resume) for details.
|
|
97
|
-
|
|
98
|
-
> **Important:** Use stable `AGENT_ID` values for each worker to enable task resume after restarts.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Docker Worker
|
|
103
|
-
|
|
104
|
-
Run individual Claude workers in containers.
|
|
105
|
-
|
|
106
|
-
### Pull from Registry
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
docker pull ghcr.io/desplega-ai/agent-swarm-worker:latest
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### Build Locally
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# Build the worker image
|
|
116
|
-
docker build -f Dockerfile.worker -t agent-swarm-worker .
|
|
117
|
-
|
|
118
|
-
# Or using npm script
|
|
119
|
-
bun run docker:build:worker
|
|
120
|
-
|
|
121
|
-
# Override the pinned Claude Code version (default: 2.1.80)
|
|
122
|
-
docker build -f Dockerfile.worker --build-arg CLAUDE_CODE_VERSION=2.2.0 -t agent-swarm-worker .
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Run
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
# Using pre-built image
|
|
129
|
-
docker run --rm -it \
|
|
130
|
-
-e CLAUDE_CODE_OAUTH_TOKEN=your-token \
|
|
131
|
-
-e API_KEY=your-api-key \
|
|
132
|
-
-v ./logs:/logs \
|
|
133
|
-
-v ./work:/workspace \
|
|
134
|
-
ghcr.io/desplega-ai/agent-swarm-worker
|
|
135
|
-
|
|
136
|
-
# With custom system prompt
|
|
137
|
-
docker run --rm -it \
|
|
138
|
-
-e CLAUDE_CODE_OAUTH_TOKEN=your-token \
|
|
139
|
-
-e API_KEY=your-api-key \
|
|
140
|
-
-e SYSTEM_PROMPT="You are a Python specialist" \
|
|
141
|
-
-v ./logs:/logs \
|
|
142
|
-
-v ./work:/workspace \
|
|
143
|
-
ghcr.io/desplega-ai/agent-swarm-worker
|
|
144
|
-
|
|
145
|
-
# With system prompt from file
|
|
146
|
-
docker run --rm -it \
|
|
147
|
-
-e CLAUDE_CODE_OAUTH_TOKEN=your-token \
|
|
148
|
-
-e API_KEY=your-api-key \
|
|
149
|
-
-e SYSTEM_PROMPT_FILE=/workspace/prompts/specialist.txt \
|
|
150
|
-
-v ./work:/workspace \
|
|
151
|
-
ghcr.io/desplega-ai/agent-swarm-worker
|
|
152
|
-
|
|
153
|
-
# Using npm script (requires .env.docker file)
|
|
154
|
-
bun run docker:run:worker
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Troubleshooting
|
|
158
|
-
|
|
159
|
-
**Permission denied when writing to /workspace**
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
# Option 1: Fix permissions on host directory
|
|
163
|
-
chmod 777 ./work
|
|
164
|
-
|
|
165
|
-
# Option 2: Run container as your current user
|
|
166
|
-
docker run --rm -it --user $(id -u):$(id -g) \
|
|
167
|
-
-e CLAUDE_CODE_OAUTH_TOKEN=your-token \
|
|
168
|
-
-e API_KEY=your-api-key \
|
|
169
|
-
-v ./work:/workspace \
|
|
170
|
-
ghcr.io/desplega-ai/agent-swarm-worker
|
|
171
|
-
|
|
172
|
-
# Option 3: Create the file on the host first
|
|
173
|
-
touch ./work/.mcp.json
|
|
174
|
-
chmod 666 ./work/.mcp.json
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Architecture
|
|
178
|
-
|
|
179
|
-
The Docker worker image uses a multi-stage build:
|
|
180
|
-
|
|
181
|
-
1. **Builder stage**: Compiles `src/cli.tsx` into a standalone binary
|
|
182
|
-
2. **Runtime stage**: Ubuntu 24.04 with full development environment
|
|
183
|
-
|
|
184
|
-
**Pre-installed tools:**
|
|
185
|
-
|
|
186
|
-
- **Languages**: Python 3, Node.js 22, Bun
|
|
187
|
-
- **Build tools**: gcc, g++, make, cmake
|
|
188
|
-
- **Process manager**: PM2 (for background services)
|
|
189
|
-
- **CLI tools**: GitHub CLI (`gh`), GitLab CLI (`glab`), sqlite3
|
|
190
|
-
- **Agent tools**: `wts` (git worktree manager), `archil` (FUSE/R2-backed storage)
|
|
191
|
-
- **Utilities**: git, git-lfs, vim, nano, jq, curl, wget, ssh, fuse3
|
|
192
|
-
- **Sudo access**: Worker can install packages with `sudo apt-get install`
|
|
193
|
-
|
|
194
|
-
**Volumes:**
|
|
195
|
-
|
|
196
|
-
- `/workspace/personal` - Agent's personal workspace (isolated per agent)
|
|
197
|
-
- `/workspace/shared` - Shared workspace between all agents
|
|
198
|
-
- `/logs` - Session logs
|
|
199
|
-
|
|
200
|
-
### Startup Scripts
|
|
201
|
-
|
|
202
|
-
Run custom initialization before the worker starts. Place a script at `/workspace/start-up.*`:
|
|
203
|
-
|
|
204
|
-
**Supported formats** (priority order):
|
|
205
|
-
- `start-up.sh` / `start-up.bash` - Bash scripts
|
|
206
|
-
- `start-up.js` - Node.js scripts
|
|
207
|
-
- `start-up.ts` / `start-up.bun` - Bun/TypeScript scripts
|
|
208
|
-
|
|
209
|
-
**Interpreter detection:**
|
|
210
|
-
1. Shebang line (e.g., `#!/usr/bin/env bun`)
|
|
211
|
-
2. File extension (`.ts` -> bun, `.js` -> node, `.sh` -> bash)
|
|
212
|
-
|
|
213
|
-
**Error handling:**
|
|
214
|
-
- `STARTUP_SCRIPT_STRICT=true` (default) - Container exits if script fails
|
|
215
|
-
- `STARTUP_SCRIPT_STRICT=false` - Logs warning and continues
|
|
216
|
-
|
|
217
|
-
**Example: Install dependencies**
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
#!/bin/bash
|
|
221
|
-
# /workspace/start-up.sh
|
|
222
|
-
|
|
223
|
-
echo "Installing dependencies..."
|
|
224
|
-
if [ -f "package.json" ]; then
|
|
225
|
-
bun install
|
|
226
|
-
fi
|
|
227
|
-
|
|
228
|
-
sudo apt-get update -qq
|
|
229
|
-
sudo apt-get install -y -qq ripgrep
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
**Example: TypeScript setup**
|
|
233
|
-
|
|
234
|
-
```typescript
|
|
235
|
-
#!/usr/bin/env bun
|
|
236
|
-
// /workspace/start-up.ts
|
|
237
|
-
|
|
238
|
-
console.log("Running startup...");
|
|
239
|
-
await Bun.$`bun install`;
|
|
240
|
-
|
|
241
|
-
if (!process.env.API_KEY) {
|
|
242
|
-
console.error("ERROR: API_KEY not set");
|
|
243
|
-
process.exit(1);
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Server Deployment (systemd)
|
|
250
|
-
|
|
251
|
-
Deploy the MCP server to a Linux host with systemd.
|
|
252
|
-
|
|
253
|
-
### Prerequisites
|
|
254
|
-
|
|
255
|
-
- Linux with systemd
|
|
256
|
-
- Bun installed (`curl -fsSL https://bun.sh/install | bash`)
|
|
257
|
-
|
|
258
|
-
### Install
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
git clone https://github.com/desplega-ai/agent-swarm.git
|
|
262
|
-
cd agent-swarm
|
|
263
|
-
sudo bun deploy/install.ts
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
This will:
|
|
267
|
-
- Copy files to `/opt/agent-swarm`
|
|
268
|
-
- Create `.env` file (edit to set `API_KEY`)
|
|
269
|
-
- Install systemd service with health checks every 30s
|
|
270
|
-
- Start the service on port 3013
|
|
271
|
-
|
|
272
|
-
### Update
|
|
273
|
-
|
|
274
|
-
```bash
|
|
275
|
-
git pull
|
|
276
|
-
sudo bun deploy/update.ts
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Management
|
|
280
|
-
|
|
281
|
-
```bash
|
|
282
|
-
# Check status
|
|
283
|
-
sudo systemctl status agent-swarm
|
|
284
|
-
|
|
285
|
-
# View logs
|
|
286
|
-
sudo journalctl -u agent-swarm -f
|
|
287
|
-
|
|
288
|
-
# Restart
|
|
289
|
-
sudo systemctl restart agent-swarm
|
|
290
|
-
|
|
291
|
-
# Stop
|
|
292
|
-
sudo systemctl stop agent-swarm
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
|
-
## Graceful Shutdown & Task Resume
|
|
298
|
-
|
|
299
|
-
Agent Swarm supports graceful task handling during deployments and container restarts.
|
|
300
|
-
|
|
301
|
-
### How It Works
|
|
302
|
-
|
|
303
|
-
When a worker container receives SIGTERM (e.g., during `docker-compose down` or Kubernetes rollout):
|
|
304
|
-
|
|
305
|
-
1. **Grace period starts** - Worker waits for active tasks to complete (default: 30s, configurable via `SHUTDOWN_TIMEOUT`)
|
|
306
|
-
2. **Tasks are paused** - Any tasks still running after the grace period are marked as `paused` (not `failed`)
|
|
307
|
-
3. **State preserved** - Task progress and context are saved to the database
|
|
308
|
-
4. **On restart** - Worker automatically fetches and resumes its paused tasks with full context
|
|
309
|
-
|
|
310
|
-
### Task States During Shutdown
|
|
311
|
-
|
|
312
|
-
| State | Description |
|
|
313
|
-
|-------|-------------|
|
|
314
|
-
| `in_progress` | Task completes normally if it finishes within grace period |
|
|
315
|
-
| `paused` | Task is paused for resume after restart |
|
|
316
|
-
| `failed` | Only used if pause API fails (fallback) |
|
|
317
|
-
|
|
318
|
-
### Configuration
|
|
319
|
-
|
|
320
|
-
```bash
|
|
321
|
-
# Grace period before force-pausing tasks (milliseconds)
|
|
322
|
-
SHUTDOWN_TIMEOUT=30000
|
|
323
|
-
|
|
324
|
-
# Docker compose stop grace period (should be >= SHUTDOWN_TIMEOUT + buffer)
|
|
325
|
-
stop_grace_period: 60s
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Resume Behavior
|
|
329
|
-
|
|
330
|
-
When a worker starts, it:
|
|
331
|
-
|
|
332
|
-
1. Registers with the MCP server
|
|
333
|
-
2. Checks for paused tasks assigned to its `AGENT_ID`
|
|
334
|
-
3. Resumes each paused task with context:
|
|
335
|
-
- Original task description
|
|
336
|
-
- Previous progress (if any was saved)
|
|
337
|
-
- Notification that this is a resumed task
|
|
338
|
-
|
|
339
|
-
### Best Practices
|
|
340
|
-
|
|
341
|
-
- **Use stable Agent IDs** - Set explicit `AGENT_ID` for each worker to enable resume after restarts
|
|
342
|
-
- **Save progress regularly** - Workers should call `store-progress` during long tasks
|
|
343
|
-
- **Test deployments** - Verify tasks resume correctly in staging before production
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
## Environment Variables
|
|
348
|
-
|
|
349
|
-
> For the complete reference of all environment variables, see [docs/ENVS.md](./docs/ENVS.md).
|
|
350
|
-
|
|
351
|
-
### Docker Worker Variables
|
|
352
|
-
|
|
353
|
-
| Variable | Required | Description |
|
|
354
|
-
|----------|----------|-------------|
|
|
355
|
-
| `CLAUDE_CODE_OAUTH_TOKEN` | Yes | OAuth token for Claude CLI (run `claude setup-token`). Supports comma-separated values for [multi-credential load balancing](./docs/ENVS.md#multi-credential-support). |
|
|
356
|
-
| `API_KEY` | Yes | API key for MCP server |
|
|
357
|
-
| `AGENT_ID` | No | Agent UUID (assigned on join if not set). **Keep stable for task resume.** |
|
|
358
|
-
| `AGENT_ROLE` | No | Role: `worker` (default) or `lead` |
|
|
359
|
-
| `AGENT_NAME` | No | Display name for the agent (auto-generated if not set) |
|
|
360
|
-
| `MCP_BASE_URL` | No | MCP server URL (default: `http://host.docker.internal:3013`) |
|
|
361
|
-
| `SESSION_ID` | No | Log folder name (auto-generated if not provided) |
|
|
362
|
-
| `YOLO` | No | Continue on errors (default: `false`) |
|
|
363
|
-
| `SYSTEM_PROMPT` | No | Custom system prompt text |
|
|
364
|
-
| `SYSTEM_PROMPT_FILE` | No | Path to system prompt file |
|
|
365
|
-
| `STARTUP_SCRIPT_STRICT` | No | Exit on startup script failure (default: `true`) |
|
|
366
|
-
| `SHUTDOWN_TIMEOUT` | No | Grace period in ms before pausing tasks (default: `30000`) |
|
|
367
|
-
| `MAX_CONCURRENT_TASKS` | No | Maximum parallel tasks per worker (default: `1`) |
|
|
368
|
-
| `SWARM_URL` | No | Base domain for service URLs (default: `localhost`) |
|
|
369
|
-
| `LEAD_PORT` | No | Host port for lead service (default: `3020`). Example — adjust to your setup. In isolated network namespaces all services can share the same port. |
|
|
370
|
-
| `WORKER1_PORT` | No | Host port for worker-1 service (default: `3021`). Example — see `LEAD_PORT`. |
|
|
371
|
-
| `WORKER2_PORT` | No | Host port for worker-2 service (default: `3022`). Example — see `LEAD_PORT`. |
|
|
372
|
-
| `PM2_HOME` | No | PM2 state directory (default: `/workspace/.pm2`) |
|
|
373
|
-
| `GITHUB_TOKEN` | No | GitHub token for git operations |
|
|
374
|
-
| `GITHUB_EMAIL` | No | Git commit email (default: `worker-agent@desplega.ai`) |
|
|
375
|
-
| `GITHUB_NAME` | No | Git commit name (default: `Worker Agent`) |
|
|
376
|
-
| `SENTRY_AUTH_TOKEN` | No | Sentry Organization Auth Token for issue investigation |
|
|
377
|
-
| `SENTRY_ORG` | No | Sentry organization slug |
|
|
378
|
-
|
|
379
|
-
### Server Variables
|
|
380
|
-
|
|
381
|
-
| Variable | Description | Default |
|
|
382
|
-
|----------|-------------|---------|
|
|
383
|
-
| `PORT` | Port for MCP HTTP server | `3013` |
|
|
384
|
-
| `API_KEY` | API key for server authentication | - |
|
|
385
|
-
| `MCP_BASE_URL` | Base URL (for setup command) | `https://agent-swarm-mcp.desplega.sh` |
|
|
386
|
-
| `SWARM_URL` | Base domain for service discovery | `localhost` |
|
|
387
|
-
| `APP_URL` | Dashboard URL for Slack message links | - |
|
|
388
|
-
| `ENV` | Environment mode (`development` adds prefix to Slack agent names) | - |
|
|
389
|
-
| `SCHEDULER_INTERVAL_MS` | Polling interval for scheduled tasks | `10000` |
|
|
390
|
-
| `DATABASE_PATH` | SQLite database file path | `./agent-swarm-db.sqlite` |
|
|
391
|
-
| `OPENAI_API_KEY` | OpenAI key for memory embeddings (optional) | - |
|
|
392
|
-
| `CAPABILITIES` | Comma-separated feature flags | All enabled |
|
|
393
|
-
|
|
394
|
-
---
|
|
395
|
-
|
|
396
|
-
## Slack Integration
|
|
397
|
-
|
|
398
|
-
Enable Slack for task creation and agent communication via direct messages.
|
|
399
|
-
|
|
400
|
-
### Setup
|
|
401
|
-
|
|
402
|
-
1. Create a Slack App at https://api.slack.com/apps (or import `slack-manifest.json` from the repo root)
|
|
403
|
-
2. Enable Socket Mode (for real-time events without public webhooks)
|
|
404
|
-
3. Enable Interactivity and Assistant View
|
|
405
|
-
4. Add required scopes: `app_mentions:read`, `assistant:write`, `channels:history`, `channels:read`, `chat:write`, `chat:write.customize`, `chat:write.public`, `commands`, `files:read`, `files:write`, `groups:history`, `groups:read`, `im:history`, `im:read`, `im:write`, `mpim:history`, `mpim:read`, `mpim:write`, `reactions:write`, `users:read`
|
|
406
|
-
5. Subscribe to bot events: `app_mention`, `assistant_thread_started`, `assistant_thread_context_changed`, `message.channels`, `message.groups`, `message.im`, `message.mpim`
|
|
407
|
-
6. Install to workspace and copy tokens
|
|
408
|
-
|
|
409
|
-
### Configuration
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
# Required for Slack
|
|
413
|
-
SLACK_BOT_TOKEN=xoxb-... # Bot User OAuth Token
|
|
414
|
-
SLACK_APP_TOKEN=xapp-... # App-Level Token (Socket Mode)
|
|
415
|
-
SLACK_SIGNING_SECRET=... # Signing Secret (optional for Socket Mode)
|
|
416
|
-
|
|
417
|
-
# Disable Slack (if not using)
|
|
418
|
-
SLACK_DISABLE=true
|
|
419
|
-
|
|
420
|
-
# Optional: Filter allowed users
|
|
421
|
-
SLACK_ALLOWED_EMAIL_DOMAINS=company.com,partner.com # Comma-separated email domains
|
|
422
|
-
SLACK_ALLOWED_USER_IDS=U12345678,U87654321 # Comma-separated user IDs to always allow
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### User Filtering
|
|
426
|
-
|
|
427
|
-
By default, all Slack users can interact with the bot. To restrict access:
|
|
428
|
-
|
|
429
|
-
- **Email domains**: Only users with matching email domains can send messages
|
|
430
|
-
- **User ID whitelist**: Specific user IDs are always allowed (useful for admins or service accounts)
|
|
431
|
-
|
|
432
|
-
If both are set, a user must match **either** an allowed domain **or** be in the user ID whitelist.
|
|
433
|
-
|
|
434
|
-
---
|
|
435
|
-
|
|
436
|
-
## GitHub App Integration
|
|
437
|
-
|
|
438
|
-
Enable GitHub webhooks for automated task creation from PR reviews and issue assignments.
|
|
439
|
-
|
|
440
|
-
### Setup
|
|
441
|
-
|
|
442
|
-
1. Create a GitHub App at https://github.com/settings/apps/new
|
|
443
|
-
2. Set webhook URL to your server: `https://your-server.com/github/webhook`
|
|
444
|
-
3. Generate a webhook secret
|
|
445
|
-
4. (Optional) Generate a private key for bot reactions
|
|
446
|
-
|
|
447
|
-
### Configuration
|
|
448
|
-
|
|
449
|
-
```bash
|
|
450
|
-
# Required for GitHub webhooks
|
|
451
|
-
GITHUB_WEBHOOK_SECRET=your-webhook-secret
|
|
452
|
-
|
|
453
|
-
# Optional: Disable GitHub integration
|
|
454
|
-
GITHUB_DISABLE=true
|
|
455
|
-
|
|
456
|
-
# Optional: Bot name for @mentions (default: agent-swarm-bot)
|
|
457
|
-
GITHUB_BOT_NAME=your-bot-name
|
|
458
|
-
|
|
459
|
-
# Optional: Enable bot reactions (requires GitHub App)
|
|
460
|
-
GITHUB_APP_ID=123456
|
|
461
|
-
GITHUB_APP_PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----
|
|
462
|
-
# Or use base64-encoded private key:
|
|
463
|
-
GITHUB_APP_PRIVATE_KEY=base64-encoded-key
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
### Supported Events
|
|
467
|
-
|
|
468
|
-
| Event | Action |
|
|
469
|
-
|-------|--------|
|
|
470
|
-
| PR assigned to bot | Creates task for lead agent |
|
|
471
|
-
| Review requested from bot | Creates review task |
|
|
472
|
-
| PR/Issue comment @mentioning bot | Creates task with context |
|
|
473
|
-
| Issue assigned to bot | Creates task for lead agent |
|
|
474
|
-
|
|
475
|
-
### Bot Reactions
|
|
476
|
-
|
|
477
|
-
If GitHub App credentials are provided, the bot can react to comments/issues to acknowledge receipt.
|
|
478
|
-
|
|
479
|
-
---
|
|
480
|
-
|
|
481
|
-
## Sentry Integration
|
|
482
|
-
|
|
483
|
-
Docker workers include `sentry-cli` pre-installed, enabling agents to investigate and triage Sentry issues directly.
|
|
484
|
-
|
|
485
|
-
### Setup
|
|
486
|
-
|
|
487
|
-
1. Create an Organization Auth Token at `https://sentry.io/settings/{org}/auth-tokens/` with scopes:
|
|
488
|
-
- `event:read` - Read issues and events
|
|
489
|
-
- `project:read` - Read project data
|
|
490
|
-
- `org:read` - Read organization info
|
|
491
|
-
|
|
492
|
-
2. Add to `.env.docker` or `.env`:
|
|
493
|
-
```bash
|
|
494
|
-
SENTRY_AUTH_TOKEN=your-auth-token
|
|
495
|
-
SENTRY_ORG=your-org-slug
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
3. Verify authentication in a worker:
|
|
499
|
-
```bash
|
|
500
|
-
sentry-cli info
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
### Agent Commands
|
|
504
|
-
|
|
505
|
-
| Command | Description |
|
|
506
|
-
|---------|-------------|
|
|
507
|
-
| `/investigate-sentry-issue <url-or-id>` | Investigate a Sentry issue, get stacktrace, and triage |
|
|
508
|
-
|
|
509
|
-
### Usage
|
|
510
|
-
|
|
511
|
-
Workers can use the `/investigate-sentry-issue` command to:
|
|
512
|
-
- Get issue details and stacktraces
|
|
513
|
-
- Analyze breadcrumbs and context
|
|
514
|
-
- Resolve, mute, or unresolve issues
|
|
515
|
-
|
|
516
|
-
Example:
|
|
517
|
-
```
|
|
518
|
-
/investigate-sentry-issue https://sentry.io/organizations/myorg/issues/123456/
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
Or just the issue ID:
|
|
522
|
-
```
|
|
523
|
-
/investigate-sentry-issue 123456
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
---
|
|
527
|
-
|
|
528
|
-
## System Prompts
|
|
529
|
-
|
|
530
|
-
Customize Claude's behavior with system prompts for worker and lead agents.
|
|
531
|
-
|
|
532
|
-
### CLI Usage
|
|
533
|
-
|
|
534
|
-
```bash
|
|
535
|
-
# Inline system prompt
|
|
536
|
-
bunx @desplega.ai/agent-swarm worker --system-prompt "You are a Python specialist."
|
|
537
|
-
|
|
538
|
-
# System prompt from file
|
|
539
|
-
bunx @desplega.ai/agent-swarm worker --system-prompt-file ./prompts/python-specialist.txt
|
|
540
|
-
|
|
541
|
-
# Same options work for lead agent
|
|
542
|
-
bunx @desplega.ai/agent-swarm lead --system-prompt "You are a project coordinator."
|
|
543
|
-
bunx @desplega.ai/agent-swarm lead --system-prompt-file ./prompts/coordinator.txt
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
### Docker Usage
|
|
547
|
-
|
|
548
|
-
```bash
|
|
549
|
-
# Using inline system prompt
|
|
550
|
-
docker run --rm -it \
|
|
551
|
-
-e CLAUDE_CODE_OAUTH_TOKEN=your-token \
|
|
552
|
-
-e API_KEY=your-api-key \
|
|
553
|
-
-e SYSTEM_PROMPT="You are a Python specialist." \
|
|
554
|
-
ghcr.io/desplega-ai/agent-swarm-worker
|
|
555
|
-
|
|
556
|
-
# Using system prompt file
|
|
557
|
-
docker run --rm -it \
|
|
558
|
-
-e CLAUDE_CODE_OAUTH_TOKEN=your-token \
|
|
559
|
-
-e API_KEY=your-api-key \
|
|
560
|
-
-e SYSTEM_PROMPT_FILE=/workspace/prompts/specialist.txt \
|
|
561
|
-
-v ./work:/workspace \
|
|
562
|
-
ghcr.io/desplega-ai/agent-swarm-worker
|
|
563
|
-
```
|
|
564
|
-
|
|
565
|
-
### Priority
|
|
566
|
-
|
|
567
|
-
- CLI flags > Environment variables
|
|
568
|
-
- Inline text (`SYSTEM_PROMPT`) > File (`SYSTEM_PROMPT_FILE`)
|
|
569
|
-
|
|
570
|
-
---
|
|
571
|
-
|
|
572
|
-
## Service Registry (PM2)
|
|
573
|
-
|
|
574
|
-
Workers can run background services on port 3000 using PM2. Services are registered for discovery and auto-restart.
|
|
575
|
-
|
|
576
|
-
### PM2 Commands
|
|
577
|
-
|
|
578
|
-
```bash
|
|
579
|
-
pm2 start /workspace/app/server.js --name my-api # Start a service
|
|
580
|
-
pm2 stop|restart|delete my-api # Manage services
|
|
581
|
-
pm2 logs [name] # View logs
|
|
582
|
-
pm2 list # Show running processes
|
|
583
|
-
```
|
|
584
|
-
|
|
585
|
-
### MCP Tools
|
|
586
|
-
|
|
587
|
-
- `register-service` - Register service for discovery and auto-restart
|
|
588
|
-
- `unregister-service` - Remove from registry
|
|
589
|
-
- `list-services` - Find services exposed by other agents
|
|
590
|
-
- `update-service-status` - Update health status
|
|
591
|
-
|
|
592
|
-
### Starting a New Service
|
|
593
|
-
|
|
594
|
-
```bash
|
|
595
|
-
# 1. Start your service with PM2
|
|
596
|
-
pm2 start /workspace/myapp/server.js --name my-api
|
|
597
|
-
|
|
598
|
-
# 2. Register it (via MCP tool)
|
|
599
|
-
# register-service name="my-api" script="/workspace/myapp/server.js"
|
|
600
|
-
|
|
601
|
-
# 3. Mark healthy when ready
|
|
602
|
-
# update-service-status name="my-api" status="healthy"
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
### Service URL Pattern
|
|
606
|
-
|
|
607
|
-
`https://{service-name}.{SWARM_URL}`
|
|
608
|
-
|
|
609
|
-
### Health Checks
|
|
610
|
-
|
|
611
|
-
Implement a `/health` endpoint returning 200 OK for monitoring.
|
|
612
|
-
|
|
613
|
-
---
|
|
614
|
-
|
|
615
|
-
## Publishing (Maintainers)
|
|
616
|
-
|
|
617
|
-
```bash
|
|
618
|
-
# Requires gh CLI authenticated
|
|
619
|
-
bun deploy/docker-push.ts
|
|
620
|
-
```
|
|
621
|
-
|
|
622
|
-
This builds, tags with version from package.json + `latest`, and pushes to GHCR.
|
package/Dockerfile
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# Agent Swarm MCP Server Dockerfile
|
|
2
|
-
# Multi-stage build: compiles to standalone binary for minimal image size
|
|
3
|
-
|
|
4
|
-
# Stage 1: Build the binary
|
|
5
|
-
FROM oven/bun:latest AS builder
|
|
6
|
-
|
|
7
|
-
WORKDIR /build
|
|
8
|
-
|
|
9
|
-
# Copy package files first for better layer caching
|
|
10
|
-
COPY package.json bun.lock* ./
|
|
11
|
-
RUN bun install --frozen-lockfile
|
|
12
|
-
|
|
13
|
-
# Copy source files
|
|
14
|
-
COPY src/ ./src/
|
|
15
|
-
COPY tsconfig.json ./
|
|
16
|
-
|
|
17
|
-
# Compile HTTP server to standalone binary
|
|
18
|
-
RUN bun build ./src/http.ts --compile --outfile ./agent-swarm-api
|
|
19
|
-
|
|
20
|
-
# Stage 2: Minimal runtime image
|
|
21
|
-
FROM debian:bookworm-slim
|
|
22
|
-
|
|
23
|
-
# Install minimal dependencies (for bun:sqlite and networking)
|
|
24
|
-
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
25
|
-
ca-certificates \
|
|
26
|
-
wget \
|
|
27
|
-
curl \
|
|
28
|
-
fuse3 libfuse2 \
|
|
29
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
30
|
-
|
|
31
|
-
WORKDIR /app
|
|
32
|
-
|
|
33
|
-
# Copy compiled binary from builder
|
|
34
|
-
COPY --from=builder /build/agent-swarm-api /usr/local/bin/agent-swarm-api
|
|
35
|
-
RUN chmod +x /usr/local/bin/agent-swarm-api
|
|
36
|
-
|
|
37
|
-
# Copy package.json for version info
|
|
38
|
-
COPY package.json ./
|
|
39
|
-
|
|
40
|
-
# Copy migration SQL files (compiled binary can't read from /$bunfs virtual filesystem)
|
|
41
|
-
COPY src/be/migrations/*.sql /app/migrations/
|
|
42
|
-
|
|
43
|
-
# Install archil CLI for FUSE/R2-backed disk mounts
|
|
44
|
-
RUN curl https://s3.amazonaws.com/archil-client/install | sh
|
|
45
|
-
|
|
46
|
-
# Create data directory for SQLite (WAL mode needs .sqlite, .sqlite-wal, .sqlite-shm on same filesystem)
|
|
47
|
-
# Create Archil mount point directories
|
|
48
|
-
RUN mkdir -p /app/data /mnt/data /workspace/shared
|
|
49
|
-
|
|
50
|
-
ENV PORT=3013
|
|
51
|
-
ENV DATABASE_PATH=/app/data/agent-swarm-db.sqlite
|
|
52
|
-
ENV MIGRATIONS_DIR=/app/migrations
|
|
53
|
-
|
|
54
|
-
VOLUME /app/data
|
|
55
|
-
|
|
56
|
-
EXPOSE 3013
|
|
57
|
-
|
|
58
|
-
# Health check
|
|
59
|
-
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
60
|
-
CMD wget -qO- http://localhost:3013/health || exit 1
|
|
61
|
-
|
|
62
|
-
COPY api-entrypoint.sh /api-entrypoint.sh
|
|
63
|
-
RUN chmod +x /api-entrypoint.sh
|
|
64
|
-
|
|
65
|
-
ENTRYPOINT ["/api-entrypoint.sh"]
|