@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,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runner trigger prompt template definitions.
|
|
3
|
+
*
|
|
4
|
+
* Each template is registered at module load time via registerTemplate().
|
|
5
|
+
* The runner imports this module for the side-effect of registration.
|
|
6
|
+
*
|
|
7
|
+
* Note: These templates use {{variable}} syntax. The fmt() function for
|
|
8
|
+
* slash commands is pre-applied before template resolution (passed as a variable).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { registerTemplate } from "../prompts/registry";
|
|
12
|
+
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Task trigger prompts
|
|
15
|
+
// ============================================================================
|
|
16
|
+
|
|
17
|
+
registerTemplate({
|
|
18
|
+
eventType: "task.trigger.assigned",
|
|
19
|
+
header: "",
|
|
20
|
+
defaultBody: `{{work_on_task_cmd}} {{task_id}}{{task_desc_section}}{{output_instructions}}`,
|
|
21
|
+
variables: [
|
|
22
|
+
{ name: "work_on_task_cmd", description: "Formatted /work-on-task command" },
|
|
23
|
+
{ name: "task_id", description: "Task ID" },
|
|
24
|
+
{ name: "task_desc_section", description: "Task description section or empty string" },
|
|
25
|
+
{
|
|
26
|
+
name: "output_instructions",
|
|
27
|
+
description:
|
|
28
|
+
"Output format instructions (with outputSchema if present, or generic store-progress)",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
category: "task_lifecycle",
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
registerTemplate({
|
|
35
|
+
eventType: "task.trigger.offered",
|
|
36
|
+
header: "",
|
|
37
|
+
defaultBody: `{{review_offered_task_cmd}} {{task_id}}{{task_desc_section}}
|
|
38
|
+
|
|
39
|
+
Accept if you have capacity and skills. Reject with a reason if you cannot handle it.`,
|
|
40
|
+
variables: [
|
|
41
|
+
{ name: "review_offered_task_cmd", description: "Formatted /review-offered-task command" },
|
|
42
|
+
{ name: "task_id", description: "Task ID" },
|
|
43
|
+
{ name: "task_desc_section", description: "Task description section or empty string" },
|
|
44
|
+
],
|
|
45
|
+
category: "task_lifecycle",
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
registerTemplate({
|
|
49
|
+
eventType: "task.trigger.unread_mentions",
|
|
50
|
+
header: "",
|
|
51
|
+
defaultBody: `You have {{mention_count}} mention(s) in chat channels.
|
|
52
|
+
|
|
53
|
+
1. Use \`read-messages\` with unreadOnly: true to see them
|
|
54
|
+
2. Respond to questions or requests directed at you
|
|
55
|
+
3. If a message requires work, create a task using \`send-task\``,
|
|
56
|
+
variables: [{ name: "mention_count", description: "Number of unread mentions or 'unread'" }],
|
|
57
|
+
category: "task_lifecycle",
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
registerTemplate({
|
|
61
|
+
eventType: "task.trigger.pool_available",
|
|
62
|
+
header: "",
|
|
63
|
+
defaultBody: `{{task_count}} task(s) available in the pool.
|
|
64
|
+
|
|
65
|
+
1. Run \`get-tasks\` with unassigned: true to browse
|
|
66
|
+
2. Pick one matching your skills
|
|
67
|
+
3. Run \`task-action\` with action: "claim" and taskId: "<id>"
|
|
68
|
+
|
|
69
|
+
Note: Claims are first-come-first-serve. If claim fails, pick another.`,
|
|
70
|
+
variables: [{ name: "task_count", description: "Number of available pool tasks" }],
|
|
71
|
+
category: "task_lifecycle",
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
registerTemplate({
|
|
75
|
+
eventType: "task.trigger.epic_progress",
|
|
76
|
+
header: "",
|
|
77
|
+
defaultBody: `## Epic Progress Update
|
|
78
|
+
|
|
79
|
+
{{epic_count}} epic(s) have progress updates:
|
|
80
|
+
|
|
81
|
+
{{epics_detail}}
|
|
82
|
+
## Your Task: Plan Next Steps
|
|
83
|
+
|
|
84
|
+
For each epic:
|
|
85
|
+
1. **Review** the completed work and any failures
|
|
86
|
+
2. **Determine** if the epic goal is met (progress = 100% and all tasks succeeded)
|
|
87
|
+
3. **If complete:** Use \`update-epic\` to mark status as "completed"
|
|
88
|
+
4. **If not complete:**
|
|
89
|
+
- Retry failed tasks with \`send-task\` (reassign or modify)
|
|
90
|
+
- Create new tasks for remaining work with \`send-task\` (include epicId)
|
|
91
|
+
- Keep the epic progressing until the goal is achieved
|
|
92
|
+
|
|
93
|
+
This is an iterative process - you'll be notified again when more tasks finish.
|
|
94
|
+
The epic should keep progressing until 100% complete and the goal is achieved.`,
|
|
95
|
+
variables: [
|
|
96
|
+
{ name: "epic_count", description: "Number of epics with progress updates" },
|
|
97
|
+
{ name: "epics_detail", description: "Formatted detail section for all epics" },
|
|
98
|
+
],
|
|
99
|
+
category: "task_lifecycle",
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
registerTemplate({
|
|
103
|
+
eventType: "task.trigger.channel_activity",
|
|
104
|
+
header: "",
|
|
105
|
+
defaultBody: `## Slack Channel Activity
|
|
106
|
+
|
|
107
|
+
{{message_count}} new message(s) in monitored Slack channels:
|
|
108
|
+
|
|
109
|
+
{{messages_detail}}
|
|
110
|
+
## Your Task
|
|
111
|
+
|
|
112
|
+
Review these messages and decide if any require action:
|
|
113
|
+
1. If a message is a question or request, respond using \`slack-reply\` or create a task with \`send-task\`
|
|
114
|
+
2. If a message is informational, no action needed
|
|
115
|
+
3. Use \`slack-read\` with the channelId to get more context if needed`,
|
|
116
|
+
variables: [
|
|
117
|
+
{ name: "message_count", description: "Number of new messages" },
|
|
118
|
+
{
|
|
119
|
+
name: "messages_detail",
|
|
120
|
+
description: "Formatted list of messages with channel and user info",
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
category: "task_lifecycle",
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// Task resumption prompts
|
|
128
|
+
// ============================================================================
|
|
129
|
+
|
|
130
|
+
registerTemplate({
|
|
131
|
+
eventType: "task.resumption.with_progress",
|
|
132
|
+
header: "",
|
|
133
|
+
defaultBody: `{{work_on_task_cmd}} {{task_id}}
|
|
134
|
+
|
|
135
|
+
**RESUMED TASK** - This task was interrupted during a deployment and is being resumed.
|
|
136
|
+
|
|
137
|
+
Task: "{{task_description}}"
|
|
138
|
+
|
|
139
|
+
Previous Progress:
|
|
140
|
+
{{progress}}
|
|
141
|
+
|
|
142
|
+
Continue from where you left off. Review the progress above and complete the remaining work.
|
|
143
|
+
|
|
144
|
+
When done, use \`store-progress\` with status: "completed" and include your output.`,
|
|
145
|
+
variables: [
|
|
146
|
+
{ name: "work_on_task_cmd", description: "Formatted /work-on-task command" },
|
|
147
|
+
{ name: "task_id", description: "Task ID" },
|
|
148
|
+
{ name: "task_description", description: "Original task description" },
|
|
149
|
+
{ name: "progress", description: "Previous progress text" },
|
|
150
|
+
],
|
|
151
|
+
category: "task_lifecycle",
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
registerTemplate({
|
|
155
|
+
eventType: "task.resumption.no_progress",
|
|
156
|
+
header: "",
|
|
157
|
+
defaultBody: `{{work_on_task_cmd}} {{task_id}}
|
|
158
|
+
|
|
159
|
+
**RESUMED TASK** - This task was interrupted during a deployment and is being resumed.
|
|
160
|
+
|
|
161
|
+
Task: "{{task_description}}"
|
|
162
|
+
|
|
163
|
+
No progress was saved before the interruption. Start the task fresh but be aware files may have been partially modified.
|
|
164
|
+
|
|
165
|
+
When done, use \`store-progress\` with status: "completed" and include your output.`,
|
|
166
|
+
variables: [
|
|
167
|
+
{ name: "work_on_task_cmd", description: "Formatted /work-on-task command" },
|
|
168
|
+
{ name: "task_id", description: "Task ID" },
|
|
169
|
+
{ name: "task_description", description: "Original task description" },
|
|
170
|
+
],
|
|
171
|
+
category: "task_lifecycle",
|
|
172
|
+
});
|
package/src/github/handlers.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { createTaskExtended, failTask, findTaskByVcs, getAllAgents } from "../be/db";
|
|
2
|
+
import { resolveTemplate } from "../prompts/resolver";
|
|
2
3
|
import { detectMention, extractMentionContext, GITHUB_BOT_NAME, isBotAssignee } from "./mentions";
|
|
3
4
|
import { addIssueReaction, addReaction } from "./reactions";
|
|
5
|
+
// Side-effect import: registers all GitHub event templates in the in-memory registry
|
|
6
|
+
import "./templates";
|
|
4
7
|
import type {
|
|
5
8
|
CheckRunEvent,
|
|
6
9
|
CheckSuiteEvent,
|
|
@@ -15,9 +18,50 @@ import type {
|
|
|
15
18
|
const processedEvents = new Map<string, number>();
|
|
16
19
|
const EVENT_TTL = 60_000;
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Get review state emoji and label
|
|
23
|
+
*/
|
|
24
|
+
export function getReviewStateInfo(state: string): { emoji: string; label: string } {
|
|
25
|
+
switch (state) {
|
|
26
|
+
case "approved":
|
|
27
|
+
return { emoji: "✅", label: "APPROVED" };
|
|
28
|
+
case "changes_requested":
|
|
29
|
+
return { emoji: "🔄", label: "CHANGES REQUESTED" };
|
|
30
|
+
case "commented":
|
|
31
|
+
return { emoji: "💬", label: "COMMENTED" };
|
|
32
|
+
case "dismissed":
|
|
33
|
+
return { emoji: "🚫", label: "DISMISSED" };
|
|
34
|
+
default:
|
|
35
|
+
return { emoji: "📝", label: state.toUpperCase() };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get conclusion emoji and label for CI checks
|
|
41
|
+
*/
|
|
42
|
+
export function getCheckConclusionInfo(conclusion: string | null): {
|
|
43
|
+
emoji: string;
|
|
44
|
+
label: string;
|
|
45
|
+
} {
|
|
46
|
+
switch (conclusion) {
|
|
47
|
+
case "success":
|
|
48
|
+
return { emoji: "✅", label: "PASSED" };
|
|
49
|
+
case "failure":
|
|
50
|
+
return { emoji: "❌", label: "FAILED" };
|
|
51
|
+
case "cancelled":
|
|
52
|
+
return { emoji: "⏹️", label: "CANCELLED" };
|
|
53
|
+
case "timed_out":
|
|
54
|
+
return { emoji: "⏱️", label: "TIMED OUT" };
|
|
55
|
+
case "action_required":
|
|
56
|
+
return { emoji: "⚠️", label: "ACTION REQUIRED" };
|
|
57
|
+
case "skipped":
|
|
58
|
+
return { emoji: "⏭️", label: "SKIPPED" };
|
|
59
|
+
case "neutral":
|
|
60
|
+
return { emoji: "➖", label: "NEUTRAL" };
|
|
61
|
+
default:
|
|
62
|
+
return { emoji: "❓", label: conclusion?.toUpperCase() ?? "UNKNOWN" };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
21
65
|
|
|
22
66
|
/**
|
|
23
67
|
* Get suggested commands based on task type
|
|
@@ -99,10 +143,27 @@ export async function handlePullRequest(
|
|
|
99
143
|
|
|
100
144
|
// Same task creation flow as mention-based handling
|
|
101
145
|
const lead = findLeadAgent();
|
|
102
|
-
const
|
|
103
|
-
|
|
146
|
+
const result = resolveTemplate(
|
|
147
|
+
"github.pull_request.assigned",
|
|
148
|
+
{
|
|
149
|
+
pr_number: pr.number,
|
|
150
|
+
pr_title: pr.title,
|
|
151
|
+
bot_name: GITHUB_BOT_NAME,
|
|
152
|
+
sender_login: sender.login,
|
|
153
|
+
repo_full_name: repository.full_name,
|
|
154
|
+
head_ref: pr.head.ref,
|
|
155
|
+
base_ref: pr.base.ref,
|
|
156
|
+
pr_url: pr.html_url,
|
|
157
|
+
context: pr.body || pr.title,
|
|
158
|
+
},
|
|
159
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
if (result.skipped) {
|
|
163
|
+
return { created: false };
|
|
164
|
+
}
|
|
104
165
|
|
|
105
|
-
const task = createTaskExtended(
|
|
166
|
+
const task = createTaskExtended(result.text, {
|
|
106
167
|
agentId: lead?.id ?? "",
|
|
107
168
|
source: "github",
|
|
108
169
|
vcsProvider: "github",
|
|
@@ -179,10 +240,27 @@ export async function handlePullRequest(
|
|
|
179
240
|
|
|
180
241
|
// Create review task
|
|
181
242
|
const lead = findLeadAgent();
|
|
182
|
-
const
|
|
183
|
-
|
|
243
|
+
const result = resolveTemplate(
|
|
244
|
+
"github.pull_request.review_requested",
|
|
245
|
+
{
|
|
246
|
+
pr_number: pr.number,
|
|
247
|
+
pr_title: pr.title,
|
|
248
|
+
bot_name: GITHUB_BOT_NAME,
|
|
249
|
+
sender_login: sender.login,
|
|
250
|
+
repo_full_name: repository.full_name,
|
|
251
|
+
head_ref: pr.head.ref,
|
|
252
|
+
base_ref: pr.base.ref,
|
|
253
|
+
pr_url: pr.html_url,
|
|
254
|
+
context: pr.body || pr.title,
|
|
255
|
+
},
|
|
256
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
if (result.skipped) {
|
|
260
|
+
return { created: false };
|
|
261
|
+
}
|
|
184
262
|
|
|
185
|
-
const task = createTaskExtended(
|
|
263
|
+
const task = createTaskExtended(result.text, {
|
|
186
264
|
agentId: lead?.id ?? "",
|
|
187
265
|
source: "github",
|
|
188
266
|
vcsProvider: "github",
|
|
@@ -257,10 +335,31 @@ export async function handlePullRequest(
|
|
|
257
335
|
const emoji = wasMerged ? "🎉" : "❌";
|
|
258
336
|
const status = wasMerged ? "MERGED" : "CLOSED";
|
|
259
337
|
const mergedBy = wasMerged && pr.merged_by ? ` by ${pr.merged_by.login}` : "";
|
|
338
|
+
const followUpSuggestion = wasMerged
|
|
339
|
+
? "💡 PR successfully merged! Update any related issues or documentation."
|
|
340
|
+
: "💡 PR was closed without merging. Review if follow-up is needed.";
|
|
341
|
+
|
|
342
|
+
const result = resolveTemplate(
|
|
343
|
+
"github.pull_request.closed",
|
|
344
|
+
{
|
|
345
|
+
status_emoji: emoji,
|
|
346
|
+
pr_number: pr.number,
|
|
347
|
+
status,
|
|
348
|
+
merged_by: mergedBy,
|
|
349
|
+
pr_title: pr.title,
|
|
350
|
+
repo_full_name: repository.full_name,
|
|
351
|
+
pr_url: pr.html_url,
|
|
352
|
+
related_task_id: task.id,
|
|
353
|
+
follow_up_suggestion: followUpSuggestion,
|
|
354
|
+
},
|
|
355
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
356
|
+
);
|
|
260
357
|
|
|
261
|
-
|
|
358
|
+
if (result.skipped) {
|
|
359
|
+
return { created: false };
|
|
360
|
+
}
|
|
262
361
|
|
|
263
|
-
const notifyTask = createTaskExtended(
|
|
362
|
+
const notifyTask = createTaskExtended(result.text, {
|
|
264
363
|
agentId: lead?.id ?? "",
|
|
265
364
|
source: "github",
|
|
266
365
|
vcsProvider: "github",
|
|
@@ -295,9 +394,25 @@ export async function handlePullRequest(
|
|
|
295
394
|
}
|
|
296
395
|
|
|
297
396
|
const lead = findLeadAgent();
|
|
298
|
-
const
|
|
397
|
+
const result = resolveTemplate(
|
|
398
|
+
"github.pull_request.synchronize",
|
|
399
|
+
{
|
|
400
|
+
pr_number: pr.number,
|
|
401
|
+
pr_title: pr.title,
|
|
402
|
+
repo_full_name: repository.full_name,
|
|
403
|
+
head_ref: pr.head.ref,
|
|
404
|
+
head_sha_short: pr.head.sha.substring(0, 7),
|
|
405
|
+
pr_url: pr.html_url,
|
|
406
|
+
related_task_id: task.id,
|
|
407
|
+
},
|
|
408
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
409
|
+
);
|
|
410
|
+
|
|
411
|
+
if (result.skipped) {
|
|
412
|
+
return { created: false };
|
|
413
|
+
}
|
|
299
414
|
|
|
300
|
-
const notifyTask = createTaskExtended(
|
|
415
|
+
const notifyTask = createTaskExtended(result.text, {
|
|
301
416
|
agentId: lead?.id ?? "",
|
|
302
417
|
source: "github",
|
|
303
418
|
vcsProvider: "github",
|
|
@@ -338,11 +453,27 @@ export async function handlePullRequest(
|
|
|
338
453
|
|
|
339
454
|
// Build task description
|
|
340
455
|
const context = extractMentionContext(pr.body) || pr.title;
|
|
341
|
-
const
|
|
342
|
-
|
|
456
|
+
const result = resolveTemplate(
|
|
457
|
+
"github.pull_request.mentioned",
|
|
458
|
+
{
|
|
459
|
+
pr_number: pr.number,
|
|
460
|
+
pr_title: pr.title,
|
|
461
|
+
sender_login: sender.login,
|
|
462
|
+
repo_full_name: repository.full_name,
|
|
463
|
+
head_ref: pr.head.ref,
|
|
464
|
+
base_ref: pr.base.ref,
|
|
465
|
+
pr_url: pr.html_url,
|
|
466
|
+
context,
|
|
467
|
+
},
|
|
468
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
if (result.skipped) {
|
|
472
|
+
return { created: false };
|
|
473
|
+
}
|
|
343
474
|
|
|
344
475
|
// Create task (assigned to lead if available, otherwise unassigned)
|
|
345
|
-
const task = createTaskExtended(
|
|
476
|
+
const task = createTaskExtended(result.text, {
|
|
346
477
|
agentId: lead?.id ?? "",
|
|
347
478
|
source: "github",
|
|
348
479
|
vcsProvider: "github",
|
|
@@ -393,10 +524,25 @@ export async function handleIssue(
|
|
|
393
524
|
|
|
394
525
|
// Same task creation flow as mention-based handling
|
|
395
526
|
const lead = findLeadAgent();
|
|
396
|
-
const
|
|
397
|
-
|
|
527
|
+
const result = resolveTemplate(
|
|
528
|
+
"github.issue.assigned",
|
|
529
|
+
{
|
|
530
|
+
issue_number: issue.number,
|
|
531
|
+
issue_title: issue.title,
|
|
532
|
+
bot_name: GITHUB_BOT_NAME,
|
|
533
|
+
sender_login: sender.login,
|
|
534
|
+
repo_full_name: repository.full_name,
|
|
535
|
+
issue_url: issue.html_url,
|
|
536
|
+
context: issue.body || issue.title,
|
|
537
|
+
},
|
|
538
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
if (result.skipped) {
|
|
542
|
+
return { created: false };
|
|
543
|
+
}
|
|
398
544
|
|
|
399
|
-
const task = createTaskExtended(
|
|
545
|
+
const task = createTaskExtended(result.text, {
|
|
400
546
|
agentId: lead?.id ?? "",
|
|
401
547
|
source: "github",
|
|
402
548
|
vcsProvider: "github",
|
|
@@ -471,11 +617,25 @@ export async function handleIssue(
|
|
|
471
617
|
|
|
472
618
|
// Build task description
|
|
473
619
|
const context = extractMentionContext(issue.body) || issue.title;
|
|
474
|
-
const
|
|
475
|
-
|
|
620
|
+
const result = resolveTemplate(
|
|
621
|
+
"github.issue.mentioned",
|
|
622
|
+
{
|
|
623
|
+
issue_number: issue.number,
|
|
624
|
+
issue_title: issue.title,
|
|
625
|
+
sender_login: sender.login,
|
|
626
|
+
repo_full_name: repository.full_name,
|
|
627
|
+
issue_url: issue.html_url,
|
|
628
|
+
context,
|
|
629
|
+
},
|
|
630
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
631
|
+
);
|
|
632
|
+
|
|
633
|
+
if (result.skipped) {
|
|
634
|
+
return { created: false };
|
|
635
|
+
}
|
|
476
636
|
|
|
477
637
|
// Create task (assigned to lead if available, otherwise unassigned)
|
|
478
|
-
const task = createTaskExtended(
|
|
638
|
+
const task = createTaskExtended(result.text, {
|
|
479
639
|
agentId: lead?.id ?? "",
|
|
480
640
|
source: "github",
|
|
481
641
|
vcsProvider: "github",
|
|
@@ -544,10 +704,32 @@ export async function handleComment(
|
|
|
544
704
|
// Build task description
|
|
545
705
|
const context = extractMentionContext(comment.body);
|
|
546
706
|
const suggestions = getCommandSuggestions("github-comment", targetType);
|
|
547
|
-
const
|
|
707
|
+
const relatedTaskSection = existingTask
|
|
708
|
+
? `Related task: ${existingTask.id}\n🔀 Consider routing to the same agent working on the related task.\n`
|
|
709
|
+
: "";
|
|
710
|
+
|
|
711
|
+
const result = resolveTemplate(
|
|
712
|
+
"github.comment.mentioned",
|
|
713
|
+
{
|
|
714
|
+
target_type: targetType,
|
|
715
|
+
target_number: targetNumber,
|
|
716
|
+
target_title: targetTitle,
|
|
717
|
+
sender_login: sender.login,
|
|
718
|
+
repo_full_name: repository.full_name,
|
|
719
|
+
comment_url: comment.html_url,
|
|
720
|
+
context,
|
|
721
|
+
related_task_section: relatedTaskSection,
|
|
722
|
+
command_suggestions: suggestions,
|
|
723
|
+
},
|
|
724
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
725
|
+
);
|
|
726
|
+
|
|
727
|
+
if (result.skipped) {
|
|
728
|
+
return { created: false };
|
|
729
|
+
}
|
|
548
730
|
|
|
549
731
|
// Create task (assigned to lead if available, otherwise unassigned)
|
|
550
|
-
const task = createTaskExtended(
|
|
732
|
+
const task = createTaskExtended(result.text, {
|
|
551
733
|
agentId: lead?.id ?? "",
|
|
552
734
|
source: "github",
|
|
553
735
|
vcsProvider: "github",
|
|
@@ -576,24 +758,6 @@ export async function handleComment(
|
|
|
576
758
|
return { created: true, taskId: task.id };
|
|
577
759
|
}
|
|
578
760
|
|
|
579
|
-
/**
|
|
580
|
-
* Get review state emoji and label
|
|
581
|
-
*/
|
|
582
|
-
function getReviewStateInfo(state: string): { emoji: string; label: string } {
|
|
583
|
-
switch (state) {
|
|
584
|
-
case "approved":
|
|
585
|
-
return { emoji: "✅", label: "APPROVED" };
|
|
586
|
-
case "changes_requested":
|
|
587
|
-
return { emoji: "🔄", label: "CHANGES REQUESTED" };
|
|
588
|
-
case "commented":
|
|
589
|
-
return { emoji: "💬", label: "COMMENTED" };
|
|
590
|
-
case "dismissed":
|
|
591
|
-
return { emoji: "🚫", label: "DISMISSED" };
|
|
592
|
-
default:
|
|
593
|
-
return { emoji: "📝", label: state.toUpperCase() };
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
|
|
597
761
|
/**
|
|
598
762
|
* Handle pull_request_review events (submitted, edited, dismissed)
|
|
599
763
|
*
|
|
@@ -642,18 +806,40 @@ export async function handlePullRequestReview(
|
|
|
642
806
|
const { emoji, label } = getReviewStateInfo(review.state);
|
|
643
807
|
|
|
644
808
|
// Build task description
|
|
645
|
-
const
|
|
646
|
-
const
|
|
809
|
+
const reviewBodySection = review.body ? `\n\nReview Comment:\n${review.body}` : "";
|
|
810
|
+
const relatedTaskSection = existingTask
|
|
811
|
+
? `Related task: ${existingTask.id}\n🔀 Consider routing to the same agent working on the related task.\n`
|
|
812
|
+
: "";
|
|
813
|
+
const reviewSuggestions =
|
|
647
814
|
review.state === "approved"
|
|
648
815
|
? "💡 Suggested: Merge the PR or wait for additional reviews"
|
|
649
816
|
: review.state === "changes_requested"
|
|
650
817
|
? "💡 Suggested: Address the requested changes and update the PR"
|
|
651
818
|
: "💡 Suggested: Review the feedback and respond if needed";
|
|
652
819
|
|
|
653
|
-
const
|
|
820
|
+
const result = resolveTemplate(
|
|
821
|
+
"github.pull_request.review_submitted",
|
|
822
|
+
{
|
|
823
|
+
review_emoji: emoji,
|
|
824
|
+
pr_number: pr.number,
|
|
825
|
+
review_label: label,
|
|
826
|
+
pr_title: pr.title,
|
|
827
|
+
sender_login: sender.login,
|
|
828
|
+
repo_full_name: repository.full_name,
|
|
829
|
+
review_url: review.html_url,
|
|
830
|
+
review_body_section: reviewBodySection,
|
|
831
|
+
related_task_section: relatedTaskSection,
|
|
832
|
+
review_suggestions: reviewSuggestions,
|
|
833
|
+
},
|
|
834
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
835
|
+
);
|
|
836
|
+
|
|
837
|
+
if (result.skipped) {
|
|
838
|
+
return { created: false };
|
|
839
|
+
}
|
|
654
840
|
|
|
655
841
|
// Create task (assigned to lead if available, otherwise unassigned)
|
|
656
|
-
const task = createTaskExtended(
|
|
842
|
+
const task = createTaskExtended(result.text, {
|
|
657
843
|
agentId: lead?.id ?? "",
|
|
658
844
|
source: "github",
|
|
659
845
|
vcsProvider: "github",
|
|
@@ -683,30 +869,6 @@ export async function handlePullRequestReview(
|
|
|
683
869
|
return { created: true, taskId: task.id };
|
|
684
870
|
}
|
|
685
871
|
|
|
686
|
-
/**
|
|
687
|
-
* Get conclusion emoji and label for CI checks
|
|
688
|
-
*/
|
|
689
|
-
function getCheckConclusionInfo(conclusion: string | null): { emoji: string; label: string } {
|
|
690
|
-
switch (conclusion) {
|
|
691
|
-
case "success":
|
|
692
|
-
return { emoji: "✅", label: "PASSED" };
|
|
693
|
-
case "failure":
|
|
694
|
-
return { emoji: "❌", label: "FAILED" };
|
|
695
|
-
case "cancelled":
|
|
696
|
-
return { emoji: "⏹️", label: "CANCELLED" };
|
|
697
|
-
case "timed_out":
|
|
698
|
-
return { emoji: "⏱️", label: "TIMED OUT" };
|
|
699
|
-
case "action_required":
|
|
700
|
-
return { emoji: "⚠️", label: "ACTION REQUIRED" };
|
|
701
|
-
case "skipped":
|
|
702
|
-
return { emoji: "⏭️", label: "SKIPPED" };
|
|
703
|
-
case "neutral":
|
|
704
|
-
return { emoji: "➖", label: "NEUTRAL" };
|
|
705
|
-
default:
|
|
706
|
-
return { emoji: "❓", label: conclusion?.toUpperCase() ?? "UNKNOWN" };
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
|
|
710
872
|
/**
|
|
711
873
|
* Handle check_run events (CI check completed)
|
|
712
874
|
*
|
|
@@ -760,13 +922,30 @@ export async function handleCheckRun(
|
|
|
760
922
|
const lead = findLeadAgent();
|
|
761
923
|
const { emoji, label } = getCheckConclusionInfo(conclusion);
|
|
762
924
|
|
|
763
|
-
const
|
|
925
|
+
const outputSummarySection = check_run.output.summary
|
|
764
926
|
? `\n\nSummary:\n${check_run.output.summary.substring(0, 500)}`
|
|
765
927
|
: "";
|
|
766
928
|
|
|
767
|
-
const
|
|
929
|
+
const result = resolveTemplate(
|
|
930
|
+
"github.check_run.failed",
|
|
931
|
+
{
|
|
932
|
+
conclusion_emoji: emoji,
|
|
933
|
+
pr_number: prNumber,
|
|
934
|
+
check_name: check_run.name,
|
|
935
|
+
conclusion_label: label,
|
|
936
|
+
repo_full_name: repository.full_name,
|
|
937
|
+
check_url: check_run.html_url,
|
|
938
|
+
output_summary_section: outputSummarySection,
|
|
939
|
+
related_task_id: relatedTask.id,
|
|
940
|
+
},
|
|
941
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
942
|
+
);
|
|
943
|
+
|
|
944
|
+
if (result.skipped) {
|
|
945
|
+
return { created: false };
|
|
946
|
+
}
|
|
768
947
|
|
|
769
|
-
const task = createTaskExtended(
|
|
948
|
+
const task = createTaskExtended(result.text, {
|
|
770
949
|
agentId: lead?.id ?? "",
|
|
771
950
|
source: "github",
|
|
772
951
|
vcsProvider: "github",
|
|
@@ -838,9 +1017,25 @@ export async function handleCheckSuite(
|
|
|
838
1017
|
const { emoji, label } = getCheckConclusionInfo(conclusion);
|
|
839
1018
|
const branch = check_suite.head_branch ?? "unknown";
|
|
840
1019
|
|
|
841
|
-
const
|
|
1020
|
+
const result = resolveTemplate(
|
|
1021
|
+
"github.check_suite.failed",
|
|
1022
|
+
{
|
|
1023
|
+
conclusion_emoji: emoji,
|
|
1024
|
+
pr_number: prNumber,
|
|
1025
|
+
conclusion_label: label,
|
|
1026
|
+
repo_full_name: repository.full_name,
|
|
1027
|
+
branch,
|
|
1028
|
+
head_sha_short: check_suite.head_sha.substring(0, 7),
|
|
1029
|
+
related_task_id: relatedTask.id,
|
|
1030
|
+
},
|
|
1031
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
1032
|
+
);
|
|
1033
|
+
|
|
1034
|
+
if (result.skipped) {
|
|
1035
|
+
return { created: false };
|
|
1036
|
+
}
|
|
842
1037
|
|
|
843
|
-
const task = createTaskExtended(
|
|
1038
|
+
const task = createTaskExtended(result.text, {
|
|
844
1039
|
agentId: lead?.id ?? "",
|
|
845
1040
|
source: "github",
|
|
846
1041
|
vcsProvider: "github",
|
|
@@ -914,9 +1109,29 @@ export async function handleWorkflowRun(
|
|
|
914
1109
|
const lead = findLeadAgent();
|
|
915
1110
|
const { emoji, label } = getCheckConclusionInfo(conclusion);
|
|
916
1111
|
|
|
917
|
-
const
|
|
1112
|
+
const result = resolveTemplate(
|
|
1113
|
+
"github.workflow_run.failed",
|
|
1114
|
+
{
|
|
1115
|
+
conclusion_emoji: emoji,
|
|
1116
|
+
pr_number: prNumber,
|
|
1117
|
+
workflow_run_name: workflow_run.name,
|
|
1118
|
+
conclusion_label: label,
|
|
1119
|
+
repo_full_name: repository.full_name,
|
|
1120
|
+
workflow_name: workflow.name,
|
|
1121
|
+
run_number: workflow_run.run_number,
|
|
1122
|
+
head_branch: workflow_run.head_branch,
|
|
1123
|
+
trigger_event: workflow_run.event,
|
|
1124
|
+
logs_url: workflow_run.html_url,
|
|
1125
|
+
related_task_id: relatedTask.id,
|
|
1126
|
+
},
|
|
1127
|
+
{ agentId: lead?.id, repoId: repository.full_name },
|
|
1128
|
+
);
|
|
1129
|
+
|
|
1130
|
+
if (result.skipped) {
|
|
1131
|
+
return { created: false };
|
|
1132
|
+
}
|
|
918
1133
|
|
|
919
|
-
const task = createTaskExtended(
|
|
1134
|
+
const task = createTaskExtended(result.text, {
|
|
920
1135
|
agentId: lead?.id ?? "",
|
|
921
1136
|
source: "github",
|
|
922
1137
|
vcsProvider: "github",
|