@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/CLAUDE.md
DELETED
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
# Agent Swarm
|
|
2
|
-
|
|
3
|
-
Multi-agent orchestration for Claude Code, Codex, Gemini CLI. Enables task distribution, agent communication, and service discovery.
|
|
4
|
-
|
|
5
|
-
**Getting Started**: See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup. Run `bun run start:http` to start the server.
|
|
6
|
-
|
|
7
|
-
**Database**: Uses `bun:sqlite` (SQLite with WAL mode). DB file at `./agent-swarm-db.sqlite` (auto-created). Schema defined in `src/be/migrations/` as numbered SQL files, run by `src/be/migrations/runner.ts`. Query functions in `src/be/db.ts`.
|
|
8
|
-
|
|
9
|
-
### Database Migrations
|
|
10
|
-
|
|
11
|
-
Schema changes use a file-based migration system (`src/be/migrations/`):
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Migration files: numbered SQL files executed in order
|
|
15
|
-
src/be/migrations/
|
|
16
|
-
001_initial.sql # Baseline: all tables, indexes, seed data
|
|
17
|
-
runner.ts # Migration runner (auto-runs on startup)
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Adding a new migration:**
|
|
21
|
-
1. Create `src/be/migrations/NNN_descriptive_name.sql` (next number after highest existing)
|
|
22
|
-
2. Write forward-only SQL (CREATE TABLE, ALTER TABLE, CREATE INDEX, etc.)
|
|
23
|
-
3. Test with both fresh DB (`rm agent-swarm-db.sqlite && bun run start:http`) and existing DB
|
|
24
|
-
4. The runner applies it automatically on next startup
|
|
25
|
-
|
|
26
|
-
**How it works:**
|
|
27
|
-
- `_migrations` table tracks which migrations have been applied (version, name, checksum)
|
|
28
|
-
- On startup, runner compares SQL files against `_migrations` and applies pending ones
|
|
29
|
-
- Each migration runs in a transaction — atomic success or rollback
|
|
30
|
-
- Checksums detect accidental edits to applied migrations (logged as warnings)
|
|
31
|
-
- Bootstrap is schema-aware for pre-migration DBs:
|
|
32
|
-
- If baseline tables already exist, runner marks `001_initial` as applied without re-executing it
|
|
33
|
-
- If schema is partial/incomplete, runner executes `001_initial` to reach baseline safely
|
|
34
|
-
- `initDb()` also runs compatibility guards after migrations for legacy DBs (for example, adding missing `agents` profile columns before seeding context versions)
|
|
35
|
-
|
|
36
|
-
**Rules:**
|
|
37
|
-
- Never modify an already-applied migration — create a new one instead
|
|
38
|
-
- No `down` migrations (SQLite limitations make rollbacks unreliable)
|
|
39
|
-
- Use `IF NOT EXISTS` for CREATE TABLE/INDEX in migrations for safety
|
|
40
|
-
- Keep the `AgentTaskSourceSchema` in `src/types.ts` in sync with CHECK constraints in SQL
|
|
41
|
-
|
|
42
|
-
## Quick Reference
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
bun install # Install dependencies
|
|
46
|
-
bun run start:http # Run MCP HTTP server (port 3013)
|
|
47
|
-
bun run dev:http # Dev with hot reload
|
|
48
|
-
bun run lint:fix # Lint & format with Biome
|
|
49
|
-
bun run tsc:check # Type check
|
|
50
|
-
|
|
51
|
-
# PM2 (run API + UI + lead + worker together)
|
|
52
|
-
bun run pm2-start # Start all (API :3013, UI :5274, lead :3201, worker :3202)
|
|
53
|
-
bun run pm2-stop # Stop all services
|
|
54
|
-
bun run pm2-restart # Restart all services
|
|
55
|
-
bun run pm2-logs # View logs
|
|
56
|
-
bun run pm2-status # Check status
|
|
57
|
-
# Note: lead/worker run in Docker. On code changes:
|
|
58
|
-
# bun run docker:build:worker && bun run pm2-restart
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Tech Stack
|
|
62
|
-
|
|
63
|
-
- **Runtime**: Bun (not Node.js) - see Bun rules below
|
|
64
|
-
- **Language**: TypeScript (strict mode)
|
|
65
|
-
- **Linter/Formatter**: Biome (2-space indent, double quotes, 100 line width)
|
|
66
|
-
- **MCP SDK**: @modelcontextprotocol/sdk
|
|
67
|
-
- **CLI**: Ink (React for terminal)
|
|
68
|
-
- **Slack**: @slack/bolt
|
|
69
|
-
|
|
70
|
-
## Project Structure
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
src/
|
|
74
|
-
http.ts # Main HTTP server + MCP endpoints
|
|
75
|
-
stdio.ts # Stdio MCP transport
|
|
76
|
-
cli.tsx # CLI entry point (Ink)
|
|
77
|
-
tools/ # MCP tool definitions
|
|
78
|
-
be/ # Backend utilities (DB, storage)
|
|
79
|
-
db.ts # DB init + query functions
|
|
80
|
-
migrations/ # SQL migration files + runner
|
|
81
|
-
github/ # GitHub webhook handlers
|
|
82
|
-
slack/ # Slack integration
|
|
83
|
-
new-ui/ # Dashboard (Next.js app)
|
|
84
|
-
templates/ # Template data (official + community)
|
|
85
|
-
official/ # 9 official templates (lead, coder, researcher, reviewer, tester, fde, content-writer, content-reviewer, content-strategist)
|
|
86
|
-
community/ # Community-contributed templates
|
|
87
|
-
schema.ts # Shared TypeScript types
|
|
88
|
-
templates-ui/ # Templates registry (Next.js app)
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Architecture Invariants
|
|
92
|
-
|
|
93
|
-
**Worker/API DB boundary**: The API server (`src/http.ts`, `src/server.ts`, `src/tools/`, `src/http/`) is the **sole owner** of the SQLite database. Worker-side code (`src/commands/`, `src/hooks/`, `src/providers/`, `src/prompts/`, `src/cli.tsx`, `src/claude.ts`) must **never** import from `src/be/db` or `bun:sqlite`. Workers communicate with the API exclusively via HTTP using `API_KEY` and `X-Agent-ID` headers.
|
|
94
|
-
|
|
95
|
-
Enforced by `scripts/check-db-boundary.sh` (pre-push hook + CI merge gate). If you need to share pure logic between API and worker code, put it in a shared module (e.g., `src/prompts/`, `src/utils/`).
|
|
96
|
-
|
|
97
|
-
## Code Style
|
|
98
|
-
|
|
99
|
-
- Run `bun run lint:fix` before committing (lint + format)
|
|
100
|
-
- Run `bun run format` for formatting only
|
|
101
|
-
- Use Bun APIs, not Node.js equivalents
|
|
102
|
-
- Prefer `Bun.$` over execa for shell commands
|
|
103
|
-
- Use `google/gemini-3-flash-preview` as the default Gemini model in tests, workflows, and examples (not `gemini-2.0-flash-001`)
|
|
104
|
-
|
|
105
|
-
### CLI Commands & Help System
|
|
106
|
-
|
|
107
|
-
CLI help is plain `console.log` (not Ink), defined in `src/cli.tsx` via the `COMMAND_HELP` record and `printHelp()` function.
|
|
108
|
-
|
|
109
|
-
**When adding or modifying CLI commands:**
|
|
110
|
-
1. Add/update the command's entry in the `COMMAND_HELP` record (usage, description, options, examples)
|
|
111
|
-
2. Add the command to the `commands` array in `printHelp()` (general help listing)
|
|
112
|
-
3. Add routing in the `App` switch statement (UI commands) or the non-UI section before `render()` (simple commands like `docs`, `help`, `version`)
|
|
113
|
-
4. Run `bun run src/cli.tsx help` and `bun run src/cli.tsx <command> --help` to verify
|
|
114
|
-
|
|
115
|
-
**Command types:**
|
|
116
|
-
- **Non-UI commands** (handled before `render()`): `help`, `version`, `docs`, `hook`, `artifact` — use `console.log` + `process.exit(0)`
|
|
117
|
-
- **UI commands** (rendered by Ink): `onboard`, `connect`, `api`, `claude`, `worker`, `lead` — return JSX from the `App` switch
|
|
118
|
-
|
|
119
|
-
### Adding HTTP Endpoints
|
|
120
|
-
|
|
121
|
-
**Always use the `route()` factory** from `src/http/route-def.ts` when creating new REST endpoints. This auto-registers the route in the OpenAPI spec. Do NOT use raw `matchRoute` — it bypasses OpenAPI generation.
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
// In src/http/my-feature.ts
|
|
125
|
-
import { route } from "./route-def";
|
|
126
|
-
|
|
127
|
-
const myRoute = route({
|
|
128
|
-
method: "post",
|
|
129
|
-
path: "/api/my-feature",
|
|
130
|
-
pattern: ["api", "my-feature"],
|
|
131
|
-
summary: "What this endpoint does",
|
|
132
|
-
tags: ["MyTag"],
|
|
133
|
-
body: z.object({ ... }),
|
|
134
|
-
responses: { 200: { description: "Success" }, 400: { description: "Error" } },
|
|
135
|
-
auth: { apiKey: true },
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
export async function handleMyFeature(req, res, pathSegments, queryParams): Promise<boolean> {
|
|
139
|
-
if (!myRoute.match(req.method, pathSegments)) return false;
|
|
140
|
-
const parsed = await myRoute.parse(req, res, pathSegments, queryParams);
|
|
141
|
-
if (!parsed) return true; // parse() already sent 400
|
|
142
|
-
// ... business logic using parsed.body, parsed.params, parsed.query
|
|
143
|
-
json(res, result);
|
|
144
|
-
return true;
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
After creating the handler:
|
|
149
|
-
1. Import and add to handler chain in `src/http/index.ts`
|
|
150
|
-
2. Add the import to `scripts/generate-openapi.ts` (for spec generation)
|
|
151
|
-
3. Run `bun run docs:openapi` to regenerate `openapi.json` and commit it
|
|
152
|
-
|
|
153
|
-
## Workflow Authoring Guide
|
|
154
|
-
|
|
155
|
-
Workflows are defined as a DAG of nodes connected via `next`. Key concepts for creating workflows with `create-workflow`:
|
|
156
|
-
|
|
157
|
-
### Cross-node data access (`inputs` mapping)
|
|
158
|
-
|
|
159
|
-
**By default, upstream step outputs are NOT available for interpolation.** Only `trigger` (trigger data) and `input` (workflow-level resolved inputs) are in scope. To access another node's output, you MUST declare an `inputs` mapping:
|
|
160
|
-
|
|
161
|
-
```json
|
|
162
|
-
{
|
|
163
|
-
"id": "summarize",
|
|
164
|
-
"type": "agent-task",
|
|
165
|
-
"inputs": { "cityData": "generate-city" },
|
|
166
|
-
"config": {
|
|
167
|
-
"template": "The city is {{cityData.taskOutput.city}} in {{cityData.taskOutput.country}}"
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
- Keys are local names used in `{{interpolation}}`, values are context paths (usually a node ID)
|
|
173
|
-
- Agent-task output shape is `{ taskId: string, taskOutput: <agent's JSON> }`, so access fields via `localName.taskOutput.field`
|
|
174
|
-
- For trigger data: `{ "pr": "trigger.pullRequest" }` → `{{pr.number}}`
|
|
175
|
-
- Without `inputs`, templates referencing upstream nodes silently resolve to empty strings (check `diagnostics.unresolvedTokens` on the step)
|
|
176
|
-
|
|
177
|
-
### Structured output (`outputSchema`)
|
|
178
|
-
|
|
179
|
-
There are **two different `outputSchema` locations** — they validate at different layers:
|
|
180
|
-
|
|
181
|
-
| Location | Validates | Example schema |
|
|
182
|
-
|----------|-----------|---------------|
|
|
183
|
-
| `config.outputSchema` (inside config) | The **agent's raw JSON** response | `{ type: "object", required: ["city"], properties: { city: { type: "string" } } }` |
|
|
184
|
-
| Node-level `outputSchema` (sibling of config) | The **executor's return** (`{ taskId, taskOutput }` for agent-task) | Rarely needed — executor schemas are built-in |
|
|
185
|
-
|
|
186
|
-
For agent-task nodes, put your schema in `config.outputSchema`. The agent will be prompted to produce JSON matching this schema, and `store-progress` validates it inline.
|
|
187
|
-
|
|
188
|
-
### Interpolation
|
|
189
|
-
|
|
190
|
-
- Syntax: `{{path.to.value}}` in any string field inside `config`
|
|
191
|
-
- Paths traverse the interpolation context (built from `inputs` + `trigger` + `input`)
|
|
192
|
-
- Objects are JSON-stringified, nulls resolve to empty string
|
|
193
|
-
- Unresolved tokens are logged in step `diagnostics` and the step proceeds (soft failure)
|
|
194
|
-
|
|
195
|
-
### Agent-task executor config fields
|
|
196
|
-
|
|
197
|
-
```
|
|
198
|
-
template (required) — Task description / prompt for the agent
|
|
199
|
-
outputSchema (optional) — JSON Schema for agent's structured output
|
|
200
|
-
agentId (optional) — Assign to specific agent (UUID)
|
|
201
|
-
tags (optional) — Task tags for filtering
|
|
202
|
-
priority (optional) — 0-100, default 50
|
|
203
|
-
offerMode (optional) — Offer to agent instead of direct assign
|
|
204
|
-
dir (optional) — Working directory for the agent
|
|
205
|
-
vcsRepo (optional) — Git repo for workspace scoping
|
|
206
|
-
model (optional) — Model override for the agent
|
|
207
|
-
parentTaskId (optional) — Link to parent task
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## Related
|
|
211
|
-
|
|
212
|
-
- [UI Dashboard](./new-ui/) - Next.js monitoring dashboard
|
|
213
|
-
- [Templates Registry](./templates-ui/) - Template gallery and compose builder
|
|
214
|
-
- [MCP.md](./MCP.md) - MCP tools reference
|
|
215
|
-
- [DEPLOYMENT.md](./DEPLOYMENT.md) - Production deployment
|
|
216
|
-
- [CONTRIBUTING.md](./CONTRIBUTING.md) - Development setup
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Local Development
|
|
221
|
-
|
|
222
|
-
**Environment Files:**
|
|
223
|
-
- `.env` - Local dev config (API server, Slack, GitHub)
|
|
224
|
-
- `.env.docker` - Docker worker config
|
|
225
|
-
|
|
226
|
-
**Testing API locally:**
|
|
227
|
-
```bash
|
|
228
|
-
# API_KEY from .env (default: 123123)
|
|
229
|
-
curl -H "Authorization: Bearer 123123" http://localhost:3013/api/agents
|
|
230
|
-
|
|
231
|
-
# With agent ID header for MCP tools
|
|
232
|
-
curl -H "Authorization: Bearer 123123" -H "X-Agent-ID: <uuid>" http://localhost:3013/mcp
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
**Key env vars:**
|
|
236
|
-
- `API_KEY` - Auth token for API requests
|
|
237
|
-
- `MCP_BASE_URL` - API server URL (default: http://localhost:3013)
|
|
238
|
-
- `SLACK_DISABLE=true` / `GITHUB_DISABLE=true` - Disable integrations locally
|
|
239
|
-
- `HARNESS_PROVIDER` - Provider selection: `claude` (default) or `pi` (pi-mono)
|
|
240
|
-
- `TEMPLATE_ID` - Template for initial worker profile (e.g., `official/coder`). Fetched from registry on first boot.
|
|
241
|
-
- `TEMPLATE_REGISTRY_URL` - Templates registry URL (default: https://templates.agent-swarm.dev)
|
|
242
|
-
|
|
243
|
-
**Portless (local dev):**
|
|
244
|
-
`bun run dev:http` uses [portless](https://port1355.dev/) → `https://api.swarm.localhost:1355`. Set `MCP_BASE_URL=https://api.swarm.localhost:1355` and `APP_URL=https://ui.swarm.localhost:1355` in `.env`. Update `.mcp.json` URL to match. Non-portless fallback: `bun run start:http`. Worktrees auto-get `<branch>.api.swarm.localhost:1355` subdomains.
|
|
245
|
-
|
|
246
|
-
**Local Docker Compose (builds from source):**
|
|
247
|
-
```bash
|
|
248
|
-
# Runs: API + Claude lead + Pi-mono worker
|
|
249
|
-
docker compose -f docker-compose.local.yml up --build
|
|
250
|
-
|
|
251
|
-
# Tear down
|
|
252
|
-
docker compose -f docker-compose.local.yml down
|
|
253
|
-
```
|
|
254
|
-
Requires `.env` with `API_KEY`, `CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_API_KEY` (or `OPENROUTER_API_KEY`).
|
|
255
|
-
|
|
256
|
-
**Production Docker Compose (pulls from registry):** See `docker-compose.example.yml`.
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## Testing
|
|
261
|
-
|
|
262
|
-
### Unit Tests
|
|
263
|
-
|
|
264
|
-
```bash
|
|
265
|
-
bun test src/tests/<test-file>.test.ts # Run specific test
|
|
266
|
-
bun test # Run all tests
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
- Tests use isolated SQLite DBs (e.g. `./test-<name>.sqlite`) with `initDb()`/`closeDb()` in `beforeAll`/`afterAll`
|
|
270
|
-
- Tests that need HTTP use a minimal `node:http` handler — NOT the full `src/http.ts` server
|
|
271
|
-
- Use unique test ports to avoid conflicts (e.g. 13022, 13023)
|
|
272
|
-
- Clean up DB files (including `-wal` and `-shm`) in `afterAll`
|
|
273
|
-
|
|
274
|
-
### E2E Testing with Docker
|
|
275
|
-
|
|
276
|
-
For full integration tests (session capture, `--resume`, hooks), use a Docker worker against a local API server.
|
|
277
|
-
|
|
278
|
-
**Worktree port check**: When working in a worktree, other worktrees may already be running the API server on port 3013. Always check `.env` for `PORT` and `MCP_BASE_URL` first:
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
lsof -i :3013 # Check if default port is in use
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
If occupied, set `PORT=<alt-port>` in `.env` and update `MCP_BASE_URL` to match. Also update `.env.docker` `MCP_BASE_URL` (use `host.docker.internal:<port>`):
|
|
285
|
-
|
|
286
|
-
```bash
|
|
287
|
-
# Start API on alternate port
|
|
288
|
-
PORT=3014 bun run start:http &
|
|
289
|
-
|
|
290
|
-
# Build image with current code changes
|
|
291
|
-
docker build -f Dockerfile.worker -t agent-swarm-worker:<tag> .
|
|
292
|
-
|
|
293
|
-
# Run worker pointing at alternate port, on alternate host port
|
|
294
|
-
docker run --rm -d \
|
|
295
|
-
--name e2e-test-worker \
|
|
296
|
-
--env-file .env.docker \
|
|
297
|
-
-e MCP_BASE_URL=http://host.docker.internal:3014 \
|
|
298
|
-
-e MAX_CONCURRENT_TASKS=1 \
|
|
299
|
-
-p 3203:3000 \
|
|
300
|
-
agent-swarm-worker:<tag>
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
**E2E flow**:
|
|
304
|
-
1. Start API server (check port first)
|
|
305
|
-
2. Rebuild Docker image: `bun run docker:build:worker` (or with custom tag)
|
|
306
|
-
3. Start worker container pointing at your API port
|
|
307
|
-
4. Create tasks via `curl` against the API
|
|
308
|
-
5. Poll `GET /api/tasks/:id` to verify status, `claudeSessionId`, etc.
|
|
309
|
-
6. Check worker logs: `docker logs <container-name>`
|
|
310
|
-
7. Clean up: `docker stop <container-name>` and kill the API process
|
|
311
|
-
|
|
312
|
-
**Task cancellation caveat**: Direct DB updates (`sqlite3 ... UPDATE`) bypass the hook-based cancellation flow. The Claude process inside Docker won't stop — you'll need to `docker restart` the container. Use the MCP `cancel-task` tool for proper cancellation when possible.
|
|
313
|
-
|
|
314
|
-
**Keep test tasks trivial**: Use simple tasks like "Say hi" for E2E tests. Complex tasks (web searches, research) waste time and API credits during testing.
|
|
315
|
-
|
|
316
|
-
**Quick E2E setup (clean DB + API + Docker lead/worker):**
|
|
317
|
-
|
|
318
|
-
```bash
|
|
319
|
-
# 1. Clean DB for fresh state
|
|
320
|
-
rm -f agent-swarm-db.sqlite agent-swarm-db.sqlite-wal agent-swarm-db.sqlite-shm
|
|
321
|
-
|
|
322
|
-
# 2. Start API server (NOT pm2 — it starts extra services)
|
|
323
|
-
bun run start:http &
|
|
324
|
-
|
|
325
|
-
# 3. Build Docker image with current code
|
|
326
|
-
bun run docker:build:worker
|
|
327
|
-
|
|
328
|
-
# 4a. Start a LEAD container (uses .env.docker-lead)
|
|
329
|
-
docker run --rm -d \
|
|
330
|
-
--name e2e-test-lead \
|
|
331
|
-
--env-file .env.docker-lead \
|
|
332
|
-
-e AGENT_ROLE=lead \
|
|
333
|
-
-e MAX_CONCURRENT_TASKS=1 \
|
|
334
|
-
-p 3201:3000 \
|
|
335
|
-
agent-swarm-worker:latest
|
|
336
|
-
|
|
337
|
-
# 4b. Start a WORKER container (uses .env.docker)
|
|
338
|
-
docker run --rm -d \
|
|
339
|
-
--name e2e-test-worker \
|
|
340
|
-
--env-file .env.docker \
|
|
341
|
-
-e MAX_CONCURRENT_TASKS=1 \
|
|
342
|
-
-p 3203:3000 \
|
|
343
|
-
agent-swarm-worker:latest
|
|
344
|
-
|
|
345
|
-
# 5. Verify registration
|
|
346
|
-
curl -s -H "Authorization: Bearer 123123" http://localhost:3013/api/agents | jq '.agents[] | {name, isLead, status}'
|
|
347
|
-
|
|
348
|
-
# 6. Cleanup
|
|
349
|
-
docker stop e2e-test-lead e2e-test-worker
|
|
350
|
-
kill $(lsof -ti :3013)
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
Key differences between lead and worker env files:
|
|
354
|
-
- `.env.docker-lead` — lead-specific `AGENT_ID`, no `OPENROUTER_API_KEY`
|
|
355
|
-
- `.env.docker` — worker-specific `AGENT_ID`, includes `OPENROUTER_API_KEY`
|
|
356
|
-
- `AGENT_ROLE=lead` must be passed explicitly (not in the env file)
|
|
357
|
-
|
|
358
|
-
### Entrypoint Integration Testing
|
|
359
|
-
|
|
360
|
-
When modifying `docker-entrypoint.sh` (e.g. adding new conditional bootstrap logic), validate beyond `bash -n` syntax checks with a full Docker round-trip:
|
|
361
|
-
|
|
362
|
-
1. **Validate API endpoints first**: Before Docker testing, verify the exact HTTP methods and paths used by `curl` calls in the entrypoint against the actual route definitions in `src/http/`. Common gotcha: config API uses `PUT /api/config` (not `POST`). Use `context-mode execute` for curl calls to avoid hook blocks.
|
|
363
|
-
2. **Test idempotency**: Start a container (first boot = registers), stop it, start another with the same env file (same `AGENT_ID`). Second boot should skip registration via the config check (e.g. `if [ -z "$SOME_KEY" ]`).
|
|
364
|
-
3. **Test failure mode**: Stop the external service, boot a container. The entrypoint should continue (via `|| true` guards) with a warning log.
|
|
365
|
-
4. **Test lead vs worker paths**: Use `.env.docker-lead` + `-e AGENT_ROLE=lead` for lead, `.env.docker` for worker. They have different `AGENT_ID` values and different bootstrap paths.
|
|
366
|
-
5. **Grep logs for your feature**: `docker logs <name> 2>&1 | grep -i "<feature>"` to verify the exact log lines.
|
|
367
|
-
6. **Verify persisted state**: After boot, check `GET /api/config?includeSecrets=true` to confirm secrets/config were stored correctly.
|
|
368
|
-
|
|
369
|
-
**Entrypoint E2E commands:**
|
|
370
|
-
```bash
|
|
371
|
-
# 1. Clean DB + start API
|
|
372
|
-
rm -f agent-swarm-db.sqlite agent-swarm-db.sqlite-wal agent-swarm-db.sqlite-shm
|
|
373
|
-
bun run start:http &
|
|
374
|
-
|
|
375
|
-
# 2. Set any required global config (use PUT, not POST!)
|
|
376
|
-
curl -s -X PUT "http://localhost:3013/api/config" \
|
|
377
|
-
-H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
|
|
378
|
-
-d '{"scope":"global","key":"SOME_KEY","value":"some-value","isSecret":false}'
|
|
379
|
-
|
|
380
|
-
# 3. Build image with current code
|
|
381
|
-
bun run docker:build:worker
|
|
382
|
-
|
|
383
|
-
# 4. First boot (lead)
|
|
384
|
-
docker run --rm -d --name e2e-lead \
|
|
385
|
-
--env-file .env.docker-lead -e AGENT_ROLE=lead \
|
|
386
|
-
-e MAX_CONCURRENT_TASKS=1 -p 3201:3000 agent-swarm-worker:latest
|
|
387
|
-
|
|
388
|
-
# 5. First boot (worker)
|
|
389
|
-
docker run --rm -d --name e2e-worker \
|
|
390
|
-
--env-file .env.docker \
|
|
391
|
-
-e MAX_CONCURRENT_TASKS=1 -p 3203:3000 agent-swarm-worker:latest
|
|
392
|
-
|
|
393
|
-
# 6. Check logs (wait ~15s for boot)
|
|
394
|
-
docker logs e2e-lead 2>&1 | grep -i "<feature>"
|
|
395
|
-
docker logs e2e-worker 2>&1 | grep -i "<feature>"
|
|
396
|
-
|
|
397
|
-
# 7. Idempotency: stop and restart same worker (same AGENT_ID)
|
|
398
|
-
docker stop e2e-worker
|
|
399
|
-
docker run --rm -d --name e2e-worker-2 \
|
|
400
|
-
--env-file .env.docker \
|
|
401
|
-
-e MAX_CONCURRENT_TASKS=1 -p 3203:3000 agent-swarm-worker:latest
|
|
402
|
-
# Should see "Already registered" or equivalent skip message
|
|
403
|
-
docker logs e2e-worker-2 2>&1 | grep -i "<feature>"
|
|
404
|
-
|
|
405
|
-
# 8. Cleanup
|
|
406
|
-
docker stop e2e-lead e2e-worker-2 2>/dev/null
|
|
407
|
-
kill $(lsof -ti :3013) 2>/dev/null
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### MCP Tool Testing (Streamable HTTP)
|
|
411
|
-
|
|
412
|
-
To test MCP tools via curl, you need a proper session handshake:
|
|
413
|
-
|
|
414
|
-
```bash
|
|
415
|
-
# 1. Initialize session (capture session ID from response headers)
|
|
416
|
-
curl -s -D /tmp/mcp-headers.txt -X POST \
|
|
417
|
-
-H "Authorization: Bearer $API_KEY" \
|
|
418
|
-
-H "Content-Type: application/json" \
|
|
419
|
-
-H "Accept: application/json, text/event-stream" \
|
|
420
|
-
-H "X-Agent-ID: <uuid>" \
|
|
421
|
-
http://localhost:$PORT/mcp \
|
|
422
|
-
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'
|
|
423
|
-
|
|
424
|
-
# 2. Extract session ID
|
|
425
|
-
SESSION_ID=$(grep -i 'mcp-session-id' /tmp/mcp-headers.txt | awk '{print $2}' | tr -d '\r\n')
|
|
426
|
-
|
|
427
|
-
# 3. Send initialized notification
|
|
428
|
-
curl -s -X POST \
|
|
429
|
-
-H "Authorization: Bearer $API_KEY" \
|
|
430
|
-
-H "Content-Type: application/json" \
|
|
431
|
-
-H "Accept: application/json, text/event-stream" \
|
|
432
|
-
-H "X-Agent-ID: <uuid>" \
|
|
433
|
-
-H "mcp-session-id: $SESSION_ID" \
|
|
434
|
-
http://localhost:$PORT/mcp \
|
|
435
|
-
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
|
|
436
|
-
|
|
437
|
-
# 4. Call tools using the session
|
|
438
|
-
curl -s -X POST \
|
|
439
|
-
-H "Authorization: Bearer $API_KEY" \
|
|
440
|
-
-H "Content-Type: application/json" \
|
|
441
|
-
-H "Accept: application/json, text/event-stream" \
|
|
442
|
-
-H "X-Agent-ID: <uuid>" \
|
|
443
|
-
-H "mcp-session-id: $SESSION_ID" \
|
|
444
|
-
http://localhost:$PORT/mcp \
|
|
445
|
-
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"join-swarm","arguments":{...}}}'
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
Key gotchas:
|
|
449
|
-
- `Accept` header MUST include both `application/json` and `text/event-stream`
|
|
450
|
-
- `X-Agent-ID` must be a valid UUID (use `uuidgen` to generate)
|
|
451
|
-
- Session must be initialized before calling tools
|
|
452
|
-
|
|
453
|
-
### UI Testing
|
|
454
|
-
|
|
455
|
-
Use the `qa-use` tool (`/qa-use:test-run`, `/qa-use:verify`, `/qa-use:explore`) for browser-based UI testing of the dashboard.
|
|
456
|
-
|
|
457
|
-
**Worktree port check for UI**: The dashboard dev server defaults to port 5274 (see `APP_URL` in `.env`). Check before starting:
|
|
458
|
-
|
|
459
|
-
```bash
|
|
460
|
-
lsof -i :5274 # Check if UI port is in use
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
If occupied by another worktree, start on an alternate port and update `APP_URL`:
|
|
464
|
-
|
|
465
|
-
```bash
|
|
466
|
-
cd ui && pnpm run dev --port 5275
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
The UI connects to the API via `VITE_API_URL` (defaults to `http://localhost:3013`). When using alternate API ports, update accordingly in the UI `.env` or pass as env var.
|
|
470
|
-
|
|
471
|
-
---
|
|
472
|
-
|
|
473
|
-
## Pre-PR Checklist
|
|
474
|
-
|
|
475
|
-
Before pushing a PR, run the checks that CI will enforce. Which checks to run depends on what files you changed:
|
|
476
|
-
|
|
477
|
-
**Root project (src/, tools/, etc.):**
|
|
478
|
-
```bash
|
|
479
|
-
bun run lint:fix # Biome lint + format
|
|
480
|
-
bun run tsc:check # TypeScript type check
|
|
481
|
-
bun test # Unit tests
|
|
482
|
-
bash scripts/check-db-boundary.sh # Worker/API DB boundary
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
**If you changed `plugin/commands/*.md`:** Rebuild pi-mono skills and commit the result:
|
|
486
|
-
```bash
|
|
487
|
-
bun run build:pi-skills # Regenerate plugin/pi-skills/ from commands
|
|
488
|
-
```
|
|
489
|
-
CI enforces freshness — the merge gate will fail if generated pi-skills are out of date.
|
|
490
|
-
|
|
491
|
-
**new-ui/ (dashboard):**
|
|
492
|
-
```bash
|
|
493
|
-
cd new-ui
|
|
494
|
-
pnpm lint # Biome check (lint + format)
|
|
495
|
-
pnpm exec tsc --noEmit # TypeScript type check
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
**Both:** Run both sets if your changes span root and new-ui.
|
|
499
|
-
|
|
500
|
-
**Docker changes (Dockerfile, Dockerfile.worker):** CI does a build test — verify locally with `docker build -f <Dockerfile> .` if unsure.
|
|
501
|
-
|
|
502
|
-
All of these are enforced by the Merge Gate workflow (`.github/workflows/merge-gate.yml`). The gate job blocks merge if any check fails.
|
|
503
|
-
|
|
504
|
-
---
|
|
505
|
-
|
|
506
|
-
## Bun Rules
|
|
507
|
-
|
|
508
|
-
Use Bun instead of Node.js, npm, pnpm, or vite.
|
|
509
|
-
|
|
510
|
-
- `bun <file>` instead of `node` or `ts-node`
|
|
511
|
-
- `bun test` instead of jest/vitest
|
|
512
|
-
- `bun install` instead of npm/yarn/pnpm install
|
|
513
|
-
- `bun run <script>` instead of npm/yarn run
|
|
514
|
-
- Bun auto-loads .env - don't use dotenv
|
|
515
|
-
|
|
516
|
-
### Bun APIs
|
|
517
|
-
|
|
518
|
-
- `Bun.serve()` for HTTP/WebSocket. Don't use express/ws.
|
|
519
|
-
- `bun:sqlite` for SQLite. Don't use better-sqlite3.
|
|
520
|
-
- `Bun.file()` over node:fs for file I/O.
|
|
521
|
-
- `Bun.$` for shell commands. Don't use execa.
|