@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
|
@@ -0,0 +1,682 @@
|
|
|
1
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, test } from "bun:test";
|
|
2
|
+
import { unlink } from "node:fs/promises";
|
|
3
|
+
import { closeDb, initDb, upsertPromptTemplate } from "../be/db";
|
|
4
|
+
import { getAllTemplateDefinitions, getTemplateDefinition } from "../prompts/registry";
|
|
5
|
+
import { resolveTemplate } from "../prompts/resolver";
|
|
6
|
+
// Side-effect import: registers all GitHub templates
|
|
7
|
+
import "../github/templates";
|
|
8
|
+
|
|
9
|
+
async function ensureTemplatesRegistered(): Promise<void> {
|
|
10
|
+
if (getTemplateDefinition("github.pull_request.assigned")) return;
|
|
11
|
+
const ts = Date.now();
|
|
12
|
+
await import(`../github/templates?t=${ts}`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const TEST_DB_PATH = "./test-prompt-github.sqlite";
|
|
16
|
+
|
|
17
|
+
beforeAll(async () => {
|
|
18
|
+
for (const suffix of ["", "-wal", "-shm"]) {
|
|
19
|
+
try {
|
|
20
|
+
await unlink(TEST_DB_PATH + suffix);
|
|
21
|
+
} catch {
|
|
22
|
+
// File doesn't exist
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
initDb(TEST_DB_PATH);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
beforeEach(async () => {
|
|
29
|
+
await ensureTemplatesRegistered();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
afterAll(async () => {
|
|
33
|
+
closeDb();
|
|
34
|
+
for (const suffix of ["", "-wal", "-shm"]) {
|
|
35
|
+
try {
|
|
36
|
+
await unlink(TEST_DB_PATH + suffix);
|
|
37
|
+
} catch {
|
|
38
|
+
// File doesn't exist
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Registration verification
|
|
45
|
+
// ============================================================================
|
|
46
|
+
|
|
47
|
+
describe("GitHub template registration", () => {
|
|
48
|
+
test("all 16 templates are registered (12 event + 4 common)", () => {
|
|
49
|
+
const all = getAllTemplateDefinitions();
|
|
50
|
+
const eventTypes = all.map((d) => d.eventType).sort();
|
|
51
|
+
expect(eventTypes).toContain("common.delegation_instruction");
|
|
52
|
+
expect(eventTypes).toContain("common.command_suggestions.github_pr");
|
|
53
|
+
expect(eventTypes).toContain("common.command_suggestions.github_issue");
|
|
54
|
+
expect(eventTypes).toContain("common.command_suggestions.github_comment_pr");
|
|
55
|
+
expect(eventTypes).toContain("common.command_suggestions.github_comment_issue");
|
|
56
|
+
expect(eventTypes).toContain("github.pull_request.assigned");
|
|
57
|
+
expect(eventTypes).toContain("github.pull_request.review_requested");
|
|
58
|
+
expect(eventTypes).toContain("github.pull_request.closed");
|
|
59
|
+
expect(eventTypes).toContain("github.pull_request.synchronize");
|
|
60
|
+
expect(eventTypes).toContain("github.pull_request.mentioned");
|
|
61
|
+
expect(eventTypes).toContain("github.issue.assigned");
|
|
62
|
+
expect(eventTypes).toContain("github.issue.mentioned");
|
|
63
|
+
expect(eventTypes).toContain("github.comment.mentioned");
|
|
64
|
+
expect(eventTypes).toContain("github.pull_request.review_submitted");
|
|
65
|
+
expect(eventTypes).toContain("github.check_run.failed");
|
|
66
|
+
expect(eventTypes).toContain("github.check_suite.failed");
|
|
67
|
+
expect(eventTypes).toContain("github.workflow_run.failed");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Backward compatibility: byte-identical output
|
|
73
|
+
// ============================================================================
|
|
74
|
+
|
|
75
|
+
describe("backward compatibility — byte-identical output", () => {
|
|
76
|
+
// -- PR assigned --
|
|
77
|
+
test("github.pull_request.assigned produces expected output", () => {
|
|
78
|
+
const result = resolveTemplate("github.pull_request.assigned", {
|
|
79
|
+
pr_number: 42,
|
|
80
|
+
pr_title: "Fix bug",
|
|
81
|
+
bot_name: "agent-swarm-bot",
|
|
82
|
+
sender_login: "alice",
|
|
83
|
+
repo_full_name: "owner/repo",
|
|
84
|
+
head_ref: "feature",
|
|
85
|
+
base_ref: "main",
|
|
86
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
87
|
+
context: "Some PR body text",
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
expect(result.skipped).toBe(false);
|
|
91
|
+
expect(result.unresolved.length).toBe(0);
|
|
92
|
+
|
|
93
|
+
const expected = `[GitHub PR #42] Fix bug
|
|
94
|
+
|
|
95
|
+
Assigned to: @agent-swarm-bot
|
|
96
|
+
From: alice
|
|
97
|
+
Repo: owner/repo
|
|
98
|
+
Branch: feature \u2192 main
|
|
99
|
+
URL: https://github.com/owner/repo/pull/42
|
|
100
|
+
|
|
101
|
+
Context:
|
|
102
|
+
Some PR body text
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
106
|
+
\ud83d\udca1 Suggested: /review-pr or /respond-github`;
|
|
107
|
+
|
|
108
|
+
expect(result.text).toBe(expected);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// -- PR review requested --
|
|
112
|
+
test("github.pull_request.review_requested produces expected output", () => {
|
|
113
|
+
const result = resolveTemplate("github.pull_request.review_requested", {
|
|
114
|
+
pr_number: 42,
|
|
115
|
+
pr_title: "Fix bug",
|
|
116
|
+
bot_name: "agent-swarm-bot",
|
|
117
|
+
sender_login: "alice",
|
|
118
|
+
repo_full_name: "owner/repo",
|
|
119
|
+
head_ref: "feature",
|
|
120
|
+
base_ref: "main",
|
|
121
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
122
|
+
context: "Fix bug",
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
expect(result.skipped).toBe(false);
|
|
126
|
+
|
|
127
|
+
const expected = `[GitHub PR #42] Fix bug
|
|
128
|
+
|
|
129
|
+
Review requested from: @agent-swarm-bot
|
|
130
|
+
From: alice
|
|
131
|
+
Repo: owner/repo
|
|
132
|
+
Branch: feature \u2192 main
|
|
133
|
+
URL: https://github.com/owner/repo/pull/42
|
|
134
|
+
|
|
135
|
+
Context:
|
|
136
|
+
Fix bug
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
140
|
+
\ud83d\udca1 Suggested: /review-pr or /respond-github`;
|
|
141
|
+
|
|
142
|
+
expect(result.text).toBe(expected);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// -- PR closed (merged) --
|
|
146
|
+
test("github.pull_request.closed (merged) produces expected output", () => {
|
|
147
|
+
const result = resolveTemplate("github.pull_request.closed", {
|
|
148
|
+
status_emoji: "\ud83c\udf89",
|
|
149
|
+
pr_number: 42,
|
|
150
|
+
status: "MERGED",
|
|
151
|
+
merged_by: " by bob",
|
|
152
|
+
pr_title: "Fix bug",
|
|
153
|
+
repo_full_name: "owner/repo",
|
|
154
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
155
|
+
related_task_id: "task-123",
|
|
156
|
+
follow_up_suggestion:
|
|
157
|
+
"\ud83d\udca1 PR successfully merged! Update any related issues or documentation.",
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
expect(result.skipped).toBe(false);
|
|
161
|
+
|
|
162
|
+
const expected = `\ud83c\udf89 [GitHub PR #42] MERGED by bob
|
|
163
|
+
|
|
164
|
+
PR: Fix bug
|
|
165
|
+
Repo: owner/repo
|
|
166
|
+
URL: https://github.com/owner/repo/pull/42
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
Related task: task-123
|
|
170
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
171
|
+
\ud83d\udca1 PR successfully merged! Update any related issues or documentation.`;
|
|
172
|
+
|
|
173
|
+
expect(result.text).toBe(expected);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// -- PR closed (not merged) --
|
|
177
|
+
test("github.pull_request.closed (not merged) produces expected output", () => {
|
|
178
|
+
const result = resolveTemplate("github.pull_request.closed", {
|
|
179
|
+
status_emoji: "\u274c",
|
|
180
|
+
pr_number: 42,
|
|
181
|
+
status: "CLOSED",
|
|
182
|
+
merged_by: "",
|
|
183
|
+
pr_title: "Fix bug",
|
|
184
|
+
repo_full_name: "owner/repo",
|
|
185
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
186
|
+
related_task_id: "task-123",
|
|
187
|
+
follow_up_suggestion:
|
|
188
|
+
"\ud83d\udca1 PR was closed without merging. Review if follow-up is needed.",
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
expect(result.skipped).toBe(false);
|
|
192
|
+
|
|
193
|
+
const expected = `\u274c [GitHub PR #42] CLOSED
|
|
194
|
+
|
|
195
|
+
PR: Fix bug
|
|
196
|
+
Repo: owner/repo
|
|
197
|
+
URL: https://github.com/owner/repo/pull/42
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
Related task: task-123
|
|
201
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
202
|
+
\ud83d\udca1 PR was closed without merging. Review if follow-up is needed.`;
|
|
203
|
+
|
|
204
|
+
expect(result.text).toBe(expected);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// -- PR synchronize --
|
|
208
|
+
test("github.pull_request.synchronize produces expected output", () => {
|
|
209
|
+
const result = resolveTemplate("github.pull_request.synchronize", {
|
|
210
|
+
pr_number: 42,
|
|
211
|
+
pr_title: "Fix bug",
|
|
212
|
+
repo_full_name: "owner/repo",
|
|
213
|
+
head_ref: "feature",
|
|
214
|
+
head_sha_short: "abc1234",
|
|
215
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
216
|
+
related_task_id: "task-123",
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
expect(result.skipped).toBe(false);
|
|
220
|
+
|
|
221
|
+
const expected = `\ud83d\udd04 [GitHub PR #42] New commits pushed
|
|
222
|
+
|
|
223
|
+
PR: Fix bug
|
|
224
|
+
Repo: owner/repo
|
|
225
|
+
Branch: feature
|
|
226
|
+
New HEAD: abc1234
|
|
227
|
+
URL: https://github.com/owner/repo/pull/42
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
Related task: task-123
|
|
231
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
232
|
+
\ud83d\udca1 New commits were pushed. CI will re-run - monitor for results.`;
|
|
233
|
+
|
|
234
|
+
expect(result.text).toBe(expected);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// -- PR mentioned --
|
|
238
|
+
test("github.pull_request.mentioned produces expected output", () => {
|
|
239
|
+
const result = resolveTemplate("github.pull_request.mentioned", {
|
|
240
|
+
pr_number: 42,
|
|
241
|
+
pr_title: "Fix bug",
|
|
242
|
+
sender_login: "alice",
|
|
243
|
+
repo_full_name: "owner/repo",
|
|
244
|
+
head_ref: "feature",
|
|
245
|
+
base_ref: "main",
|
|
246
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
247
|
+
context: "Please review this PR",
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
expect(result.skipped).toBe(false);
|
|
251
|
+
|
|
252
|
+
const expected = `[GitHub PR #42] Fix bug
|
|
253
|
+
|
|
254
|
+
From: alice
|
|
255
|
+
Repo: owner/repo
|
|
256
|
+
Branch: feature \u2192 main
|
|
257
|
+
URL: https://github.com/owner/repo/pull/42
|
|
258
|
+
|
|
259
|
+
Context:
|
|
260
|
+
Please review this PR
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
264
|
+
\ud83d\udca1 Suggested: /review-pr or /respond-github`;
|
|
265
|
+
|
|
266
|
+
expect(result.text).toBe(expected);
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// -- Issue assigned --
|
|
270
|
+
test("github.issue.assigned produces expected output", () => {
|
|
271
|
+
const result = resolveTemplate("github.issue.assigned", {
|
|
272
|
+
issue_number: 10,
|
|
273
|
+
issue_title: "Bug report",
|
|
274
|
+
bot_name: "agent-swarm-bot",
|
|
275
|
+
sender_login: "alice",
|
|
276
|
+
repo_full_name: "owner/repo",
|
|
277
|
+
issue_url: "https://github.com/owner/repo/issues/10",
|
|
278
|
+
context: "Issue body text",
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
expect(result.skipped).toBe(false);
|
|
282
|
+
|
|
283
|
+
const expected = `[GitHub Issue #10] Bug report
|
|
284
|
+
|
|
285
|
+
Assigned to: @agent-swarm-bot
|
|
286
|
+
From: alice
|
|
287
|
+
Repo: owner/repo
|
|
288
|
+
URL: https://github.com/owner/repo/issues/10
|
|
289
|
+
|
|
290
|
+
Context:
|
|
291
|
+
Issue body text
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
295
|
+
\ud83d\udca1 Suggested: /implement-issue or /respond-github`;
|
|
296
|
+
|
|
297
|
+
expect(result.text).toBe(expected);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
// -- Issue mentioned --
|
|
301
|
+
test("github.issue.mentioned produces expected output", () => {
|
|
302
|
+
const result = resolveTemplate("github.issue.mentioned", {
|
|
303
|
+
issue_number: 10,
|
|
304
|
+
issue_title: "Bug report",
|
|
305
|
+
sender_login: "alice",
|
|
306
|
+
repo_full_name: "owner/repo",
|
|
307
|
+
issue_url: "https://github.com/owner/repo/issues/10",
|
|
308
|
+
context: "Please look at this",
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
expect(result.skipped).toBe(false);
|
|
312
|
+
|
|
313
|
+
const expected = `[GitHub Issue #10] Bug report
|
|
314
|
+
|
|
315
|
+
From: alice
|
|
316
|
+
Repo: owner/repo
|
|
317
|
+
URL: https://github.com/owner/repo/issues/10
|
|
318
|
+
|
|
319
|
+
Context:
|
|
320
|
+
Please look at this
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
324
|
+
\ud83d\udca1 Suggested: /implement-issue or /respond-github`;
|
|
325
|
+
|
|
326
|
+
expect(result.text).toBe(expected);
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
// -- Comment mentioned (PR, with existing task) --
|
|
330
|
+
test("github.comment.mentioned (PR, with related task) produces expected output", () => {
|
|
331
|
+
const result = resolveTemplate("github.comment.mentioned", {
|
|
332
|
+
target_type: "PR",
|
|
333
|
+
target_number: 42,
|
|
334
|
+
target_title: "Fix bug",
|
|
335
|
+
sender_login: "alice",
|
|
336
|
+
repo_full_name: "owner/repo",
|
|
337
|
+
comment_url: "https://github.com/owner/repo/pull/42#issuecomment-123",
|
|
338
|
+
context: "Can you fix this?",
|
|
339
|
+
related_task_section:
|
|
340
|
+
"Related task: task-123\n\ud83d\udd00 Consider routing to the same agent working on the related task.\n",
|
|
341
|
+
command_suggestions: "\ud83d\udca1 Suggested: /respond-github or /review-pr",
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
expect(result.skipped).toBe(false);
|
|
345
|
+
|
|
346
|
+
const expected = `[GitHub PR #42 Comment] Fix bug
|
|
347
|
+
|
|
348
|
+
From: alice
|
|
349
|
+
Repo: owner/repo
|
|
350
|
+
URL: https://github.com/owner/repo/pull/42#issuecomment-123
|
|
351
|
+
|
|
352
|
+
Comment:
|
|
353
|
+
Can you fix this?
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
Related task: task-123
|
|
357
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
358
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
359
|
+
\ud83d\udca1 Suggested: /respond-github or /review-pr`;
|
|
360
|
+
|
|
361
|
+
expect(result.text).toBe(expected);
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
// -- Comment mentioned (Issue, no existing task) --
|
|
365
|
+
test("github.comment.mentioned (Issue, no related task) produces expected output", () => {
|
|
366
|
+
const result = resolveTemplate("github.comment.mentioned", {
|
|
367
|
+
target_type: "Issue",
|
|
368
|
+
target_number: 10,
|
|
369
|
+
target_title: "Bug report",
|
|
370
|
+
sender_login: "alice",
|
|
371
|
+
repo_full_name: "owner/repo",
|
|
372
|
+
comment_url: "https://github.com/owner/repo/issues/10#issuecomment-456",
|
|
373
|
+
context: "Any update?",
|
|
374
|
+
related_task_section: "",
|
|
375
|
+
command_suggestions: "\ud83d\udca1 Suggested: /respond-github",
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
expect(result.skipped).toBe(false);
|
|
379
|
+
|
|
380
|
+
const expected = `[GitHub Issue #10 Comment] Bug report
|
|
381
|
+
|
|
382
|
+
From: alice
|
|
383
|
+
Repo: owner/repo
|
|
384
|
+
URL: https://github.com/owner/repo/issues/10#issuecomment-456
|
|
385
|
+
|
|
386
|
+
Comment:
|
|
387
|
+
Any update?
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
391
|
+
\ud83d\udca1 Suggested: /respond-github`;
|
|
392
|
+
|
|
393
|
+
expect(result.text).toBe(expected);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
// -- PR review submitted (approved, with existing task) --
|
|
397
|
+
test("github.pull_request.review_submitted (approved, related task) produces expected output", () => {
|
|
398
|
+
const result = resolveTemplate("github.pull_request.review_submitted", {
|
|
399
|
+
review_emoji: "\u2705",
|
|
400
|
+
pr_number: 42,
|
|
401
|
+
review_label: "APPROVED",
|
|
402
|
+
pr_title: "Fix bug",
|
|
403
|
+
sender_login: "reviewer",
|
|
404
|
+
repo_full_name: "owner/repo",
|
|
405
|
+
review_url: "https://github.com/owner/repo/pull/42#pullrequestreview-789",
|
|
406
|
+
review_body_section: "\n\nReview Comment:\nLooks good!",
|
|
407
|
+
related_task_section:
|
|
408
|
+
"Related task: task-123\n\ud83d\udd00 Consider routing to the same agent working on the related task.\n",
|
|
409
|
+
review_suggestions: "\ud83d\udca1 Suggested: Merge the PR or wait for additional reviews",
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
expect(result.skipped).toBe(false);
|
|
413
|
+
|
|
414
|
+
const expected = `\u2705 [GitHub PR #42 Review] APPROVED
|
|
415
|
+
|
|
416
|
+
PR: Fix bug
|
|
417
|
+
Reviewer: reviewer
|
|
418
|
+
Repo: owner/repo
|
|
419
|
+
URL: https://github.com/owner/repo/pull/42#pullrequestreview-789
|
|
420
|
+
|
|
421
|
+
Review Comment:
|
|
422
|
+
Looks good!
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
Related task: task-123
|
|
426
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
427
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
428
|
+
\ud83d\udca1 Suggested: Merge the PR or wait for additional reviews`;
|
|
429
|
+
|
|
430
|
+
expect(result.text).toBe(expected);
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
// -- PR review submitted (changes_requested, no review body, no existing task) --
|
|
434
|
+
test("github.pull_request.review_submitted (changes_requested, no body, no related task) produces expected output", () => {
|
|
435
|
+
const result = resolveTemplate("github.pull_request.review_submitted", {
|
|
436
|
+
review_emoji: "\ud83d\udd04",
|
|
437
|
+
pr_number: 42,
|
|
438
|
+
review_label: "CHANGES REQUESTED",
|
|
439
|
+
pr_title: "Fix bug",
|
|
440
|
+
sender_login: "reviewer",
|
|
441
|
+
repo_full_name: "owner/repo",
|
|
442
|
+
review_url: "https://github.com/owner/repo/pull/42#pullrequestreview-789",
|
|
443
|
+
review_body_section: "",
|
|
444
|
+
related_task_section: "",
|
|
445
|
+
review_suggestions: "\ud83d\udca1 Suggested: Address the requested changes and update the PR",
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
expect(result.skipped).toBe(false);
|
|
449
|
+
|
|
450
|
+
const expected = `\ud83d\udd04 [GitHub PR #42 Review] CHANGES REQUESTED
|
|
451
|
+
|
|
452
|
+
PR: Fix bug
|
|
453
|
+
Reviewer: reviewer
|
|
454
|
+
Repo: owner/repo
|
|
455
|
+
URL: https://github.com/owner/repo/pull/42#pullrequestreview-789
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
\u26a0\ufe0f As lead, DELEGATE this task to a worker agent - do not tackle it yourself.
|
|
459
|
+
\ud83d\udca1 Suggested: Address the requested changes and update the PR`;
|
|
460
|
+
|
|
461
|
+
expect(result.text).toBe(expected);
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
// -- Check run failed --
|
|
465
|
+
test("github.check_run.failed produces expected output", () => {
|
|
466
|
+
const result = resolveTemplate("github.check_run.failed", {
|
|
467
|
+
conclusion_emoji: "\u274c",
|
|
468
|
+
pr_number: 42,
|
|
469
|
+
check_name: "lint",
|
|
470
|
+
conclusion_label: "FAILED",
|
|
471
|
+
repo_full_name: "owner/repo",
|
|
472
|
+
check_url: "https://github.com/owner/repo/runs/123",
|
|
473
|
+
output_summary_section: "\n\nSummary:\nLinting errors found",
|
|
474
|
+
related_task_id: "task-123",
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
expect(result.skipped).toBe(false);
|
|
478
|
+
|
|
479
|
+
const expected = `\u274c [GitHub PR #42 CI] lint FAILED
|
|
480
|
+
|
|
481
|
+
Repo: owner/repo
|
|
482
|
+
Check: lint
|
|
483
|
+
URL: https://github.com/owner/repo/runs/123
|
|
484
|
+
|
|
485
|
+
Summary:
|
|
486
|
+
Linting errors found
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
Related task: task-123
|
|
490
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
491
|
+
\ud83d\udca1 CI check failed. Review the logs and fix the issue.`;
|
|
492
|
+
|
|
493
|
+
expect(result.text).toBe(expected);
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
// -- Check run failed (no summary) --
|
|
497
|
+
test("github.check_run.failed (no summary) produces expected output", () => {
|
|
498
|
+
const result = resolveTemplate("github.check_run.failed", {
|
|
499
|
+
conclusion_emoji: "\u274c",
|
|
500
|
+
pr_number: 42,
|
|
501
|
+
check_name: "lint",
|
|
502
|
+
conclusion_label: "FAILED",
|
|
503
|
+
repo_full_name: "owner/repo",
|
|
504
|
+
check_url: "https://github.com/owner/repo/runs/123",
|
|
505
|
+
output_summary_section: "",
|
|
506
|
+
related_task_id: "task-123",
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
expect(result.skipped).toBe(false);
|
|
510
|
+
|
|
511
|
+
const expected = `\u274c [GitHub PR #42 CI] lint FAILED
|
|
512
|
+
|
|
513
|
+
Repo: owner/repo
|
|
514
|
+
Check: lint
|
|
515
|
+
URL: https://github.com/owner/repo/runs/123
|
|
516
|
+
|
|
517
|
+
---
|
|
518
|
+
Related task: task-123
|
|
519
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
520
|
+
\ud83d\udca1 CI check failed. Review the logs and fix the issue.`;
|
|
521
|
+
|
|
522
|
+
expect(result.text).toBe(expected);
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
// -- Check suite failed --
|
|
526
|
+
test("github.check_suite.failed produces expected output", () => {
|
|
527
|
+
const result = resolveTemplate("github.check_suite.failed", {
|
|
528
|
+
conclusion_emoji: "\u274c",
|
|
529
|
+
pr_number: 42,
|
|
530
|
+
conclusion_label: "FAILED",
|
|
531
|
+
repo_full_name: "owner/repo",
|
|
532
|
+
branch: "feature",
|
|
533
|
+
head_sha_short: "abc1234",
|
|
534
|
+
related_task_id: "task-123",
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
expect(result.skipped).toBe(false);
|
|
538
|
+
|
|
539
|
+
const expected = `\u274c [GitHub PR #42 CI Suite] FAILED
|
|
540
|
+
|
|
541
|
+
Repo: owner/repo
|
|
542
|
+
Branch: feature
|
|
543
|
+
Commit: abc1234
|
|
544
|
+
|
|
545
|
+
---
|
|
546
|
+
Related task: task-123
|
|
547
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
548
|
+
\ud83d\udca1 CI suite failed. Check individual check runs for details.`;
|
|
549
|
+
|
|
550
|
+
expect(result.text).toBe(expected);
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
// -- Workflow run failed --
|
|
554
|
+
test("github.workflow_run.failed produces expected output", () => {
|
|
555
|
+
const result = resolveTemplate("github.workflow_run.failed", {
|
|
556
|
+
conclusion_emoji: "\u274c",
|
|
557
|
+
pr_number: 42,
|
|
558
|
+
workflow_run_name: "CI",
|
|
559
|
+
conclusion_label: "FAILED",
|
|
560
|
+
repo_full_name: "owner/repo",
|
|
561
|
+
workflow_name: "CI",
|
|
562
|
+
run_number: 5,
|
|
563
|
+
head_branch: "feature",
|
|
564
|
+
trigger_event: "pull_request",
|
|
565
|
+
logs_url: "https://github.com/owner/repo/actions/runs/123",
|
|
566
|
+
related_task_id: "task-123",
|
|
567
|
+
});
|
|
568
|
+
|
|
569
|
+
expect(result.skipped).toBe(false);
|
|
570
|
+
|
|
571
|
+
const expected = `\u274c [GitHub PR #42 Workflow] CI FAILED
|
|
572
|
+
|
|
573
|
+
Repo: owner/repo
|
|
574
|
+
Workflow: CI
|
|
575
|
+
Run #5
|
|
576
|
+
Branch: feature
|
|
577
|
+
Triggered by: pull_request
|
|
578
|
+
Logs: https://github.com/owner/repo/actions/runs/123
|
|
579
|
+
|
|
580
|
+
---
|
|
581
|
+
Related task: task-123
|
|
582
|
+
\ud83d\udd00 Consider routing to the same agent working on the related task.
|
|
583
|
+
\ud83d\udca1 Workflow failed. Click the logs URL above to see what went wrong and fix the issue.`;
|
|
584
|
+
|
|
585
|
+
expect(result.text).toBe(expected);
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
// ============================================================================
|
|
590
|
+
// Skip event behavior
|
|
591
|
+
// ============================================================================
|
|
592
|
+
|
|
593
|
+
describe("skip_event suppresses task creation", () => {
|
|
594
|
+
test("skip_event on a GitHub template returns skipped=true", () => {
|
|
595
|
+
upsertPromptTemplate({
|
|
596
|
+
eventType: "github.pull_request.assigned",
|
|
597
|
+
scope: "global",
|
|
598
|
+
state: "skip_event",
|
|
599
|
+
body: "Skipped body",
|
|
600
|
+
});
|
|
601
|
+
|
|
602
|
+
const result = resolveTemplate("github.pull_request.assigned", {
|
|
603
|
+
pr_number: 42,
|
|
604
|
+
pr_title: "Fix bug",
|
|
605
|
+
bot_name: "agent-swarm-bot",
|
|
606
|
+
sender_login: "alice",
|
|
607
|
+
repo_full_name: "owner/repo",
|
|
608
|
+
head_ref: "feature",
|
|
609
|
+
base_ref: "main",
|
|
610
|
+
pr_url: "https://github.com/owner/repo/pull/42",
|
|
611
|
+
context: "body",
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
expect(result.skipped).toBe(true);
|
|
615
|
+
expect(result.text).toBe("");
|
|
616
|
+
});
|
|
617
|
+
});
|
|
618
|
+
|
|
619
|
+
// ============================================================================
|
|
620
|
+
// Custom override behavior
|
|
621
|
+
// ============================================================================
|
|
622
|
+
|
|
623
|
+
describe("custom body override replaces default", () => {
|
|
624
|
+
test("custom body is used instead of default template", () => {
|
|
625
|
+
// Upsert a custom body for the issue mentioned template
|
|
626
|
+
upsertPromptTemplate({
|
|
627
|
+
eventType: "github.issue.mentioned",
|
|
628
|
+
scope: "global",
|
|
629
|
+
state: "enabled",
|
|
630
|
+
body: "Custom body for issue #{{issue_number}}: {{issue_title}}",
|
|
631
|
+
});
|
|
632
|
+
|
|
633
|
+
const result = resolveTemplate("github.issue.mentioned", {
|
|
634
|
+
issue_number: 99,
|
|
635
|
+
issue_title: "Custom test",
|
|
636
|
+
sender_login: "alice",
|
|
637
|
+
repo_full_name: "owner/repo",
|
|
638
|
+
issue_url: "https://github.com/owner/repo/issues/99",
|
|
639
|
+
context: "Some context",
|
|
640
|
+
});
|
|
641
|
+
|
|
642
|
+
expect(result.skipped).toBe(false);
|
|
643
|
+
// Header is still code-defined, only body is overridden
|
|
644
|
+
expect(result.text).toBe(
|
|
645
|
+
"[GitHub Issue #99] Custom test\n\nCustom body for issue #99: Custom test",
|
|
646
|
+
);
|
|
647
|
+
expect(result.templateId).toBeDefined();
|
|
648
|
+
expect(result.scope).toBe("global");
|
|
649
|
+
});
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
// ============================================================================
|
|
653
|
+
// Common template override
|
|
654
|
+
// ============================================================================
|
|
655
|
+
|
|
656
|
+
describe("common template override affects all referencing templates", () => {
|
|
657
|
+
test("overriding common.delegation_instruction changes output of dependent templates", () => {
|
|
658
|
+
// Override the delegation instruction
|
|
659
|
+
upsertPromptTemplate({
|
|
660
|
+
eventType: "common.delegation_instruction",
|
|
661
|
+
scope: "global",
|
|
662
|
+
state: "enabled",
|
|
663
|
+
body: "Custom delegation: please assign to a worker.",
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
const result = resolveTemplate("github.pull_request.mentioned", {
|
|
667
|
+
pr_number: 1,
|
|
668
|
+
pr_title: "Test",
|
|
669
|
+
sender_login: "alice",
|
|
670
|
+
repo_full_name: "owner/repo",
|
|
671
|
+
head_ref: "feat",
|
|
672
|
+
base_ref: "main",
|
|
673
|
+
pr_url: "https://github.com/owner/repo/pull/1",
|
|
674
|
+
context: "test context",
|
|
675
|
+
});
|
|
676
|
+
|
|
677
|
+
expect(result.skipped).toBe(false);
|
|
678
|
+
// The delegation instruction in the output should use the custom body
|
|
679
|
+
expect(result.text).toContain("Custom delegation: please assign to a worker.");
|
|
680
|
+
expect(result.text).not.toContain("DELEGATE this task");
|
|
681
|
+
});
|
|
682
|
+
});
|