@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
|
@@ -1,469 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
date: 2026-03-20T16:00:00-04:00
|
|
3
|
-
researcher: Claude
|
|
4
|
-
git_commit: cb464bc94af8f65b0adf25973cf2fe1bf02c781b
|
|
5
|
-
branch: main
|
|
6
|
-
repository: desplega-ai/agent-swarm
|
|
7
|
-
topic: "Prompt Template Registry — Codebase Analysis"
|
|
8
|
-
tags: [research, prompts, templates, events, registry, config]
|
|
9
|
-
brainstorm: thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md
|
|
10
|
-
status: complete
|
|
11
|
-
autonomy: critical
|
|
12
|
-
last_updated: 2026-03-20
|
|
13
|
-
last_updated_by: Claude
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# Research: Prompt Template Registry — Codebase Analysis
|
|
17
|
-
|
|
18
|
-
**Date**: 2026-03-20
|
|
19
|
-
**Researcher**: Claude
|
|
20
|
-
**Git Commit**: cb464bc
|
|
21
|
-
**Branch**: main
|
|
22
|
-
**Brainstorm**: [`thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md`](../brainstorms/2026-03-20-prompt-template-registry.md)
|
|
23
|
-
|
|
24
|
-
## Research Question
|
|
25
|
-
|
|
26
|
-
Validate and deepen the brainstorm at `thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md` by cataloging all hardcoded prompts, understanding system prompt assembly, mapping the existing config/scope system, and identifying template-like patterns already in the codebase.
|
|
27
|
-
|
|
28
|
-
## Summary
|
|
29
|
-
|
|
30
|
-
The agent-swarm codebase contains **~70 distinct hardcoded prompt strings** spread across **13 source files**, producing six categories of output: task descriptions, system prompt constants, hook-injected messages, external platform messages, memory content templates, and session prompts (Linear thoughts, Slack messages). The system prompt is assembled by `getBasePrompt()` in `src/prompts/base-prompt.ts` from 12 named constants using single-brace `{placeholder}` replacement, while event handlers use JS template literals with `${variable}` interpolation. The existing `swarm_config` table provides a proven three-tier scope hierarchy (`global → agent → repo`) with the same resolution pattern proposed in the brainstorm. Two `{{...}}` interpolation engines already exist in the codebase — one for workflows (dot-path, replaces unresolved with empty) and one for workflow templates (flat keys, leaves unresolved in place) — either could serve as the foundation for the prompt template resolver.
|
|
31
|
-
|
|
32
|
-
## Detailed Findings
|
|
33
|
-
|
|
34
|
-
### 1. Hardcoded Prompt Catalog
|
|
35
|
-
|
|
36
|
-
#### 1.1 GitHub Event Handlers (`src/github/handlers.ts`)
|
|
37
|
-
|
|
38
|
-
**12 task description templates** covering all webhook event types:
|
|
39
|
-
|
|
40
|
-
> **Design note (Taras):** Templates could separate a static header (e.g. `[GitHub PR #{{pr.number}}] {{pr.title}}`) from a variable content body — the header pattern is shared across many PR events while the body differs per event type. This suggests a two-part template structure: `title` + `body`.
|
|
41
|
-
|
|
42
|
-
| Event | Line | Template Title Pattern | Key Variables |
|
|
43
|
-
|-------|------|----------------------|---------------|
|
|
44
|
-
| PR assigned | 103 | `[GitHub PR #${pr.number}] ${pr.title}` | `pr.*`, `sender.login`, `repository.full_name`, `GITHUB_BOT_NAME` |
|
|
45
|
-
| PR review requested | 183 | `[GitHub PR #${pr.number}] ${pr.title}` | Same as above |
|
|
46
|
-
| PR closed/merged | 261 | `${emoji} [GitHub PR #${pr.number}] ${status}` | `pr.*`, `wasMerged`, `pr.merged_by.login`, `task.id` |
|
|
47
|
-
| PR synchronize | 298 | `🔄 [GitHub PR #${pr.number}] New commits pushed` | `pr.*`, `task.id` |
|
|
48
|
-
| PR mention | 342 | `[GitHub PR #${pr.number}] ${pr.title}` | `pr.*`, `extractMentionContext(pr.body)` |
|
|
49
|
-
| Issue assigned | 397 | `[GitHub Issue #${issue.number}] ${issue.title}` | `issue.*`, `sender.login` |
|
|
50
|
-
| Issue mention | 475 | `[GitHub Issue #${issue.number}] ${issue.title}` | `issue.*`, `extractMentionContext(issue.body)` |
|
|
51
|
-
| Comment mention | 547 | `[GitHub ${targetType} #${targetNumber} Comment]` | `comment.*`, `targetType`, `existingTask.id` |
|
|
52
|
-
| PR review submitted | 653 | `${emoji} [GitHub PR #${pr.number} Review] ${label}` | `review.*`, `getReviewStateInfo()` |
|
|
53
|
-
| Check run failed | 767 | `${emoji} [GitHub PR #${prNumber} CI] ${check_run.name}` | `check_run.*`, `relatedTask.id` |
|
|
54
|
-
| Check suite failed | 841 | `${emoji} [GitHub PR #${prNumber} CI Suite] ${label}` | `check_suite.*`, `relatedTask.id` |
|
|
55
|
-
| Workflow run failed | 917 | `${emoji} [GitHub PR #${prNumber} Workflow] ${workflow_run.name}` | `workflow_run.*`, `relatedTask.id` |
|
|
56
|
-
|
|
57
|
-
**Cross-cutting fragments:**
|
|
58
|
-
- `DELEGATION_INSTRUCTION` (line 19): `"⚠️ As lead, DELEGATE this task to a worker agent - do not tackle it yourself."`
|
|
59
|
-
- `getCommandSuggestions(taskType, targetType)` (line 25): Returns 4 variants based on task type (PR, issue, comment)
|
|
60
|
-
- `getReviewStateInfo(state)` (line 582): Returns `{emoji, label}` for review states
|
|
61
|
-
- `getCheckConclusionInfo(conclusion)` (line 689): Returns `{emoji, label}` for CI conclusions
|
|
62
|
-
|
|
63
|
-
**Structural pattern:** All templates follow the same layout: `[Header line]\n\nMetadata lines\n\n---\n${DELEGATION_INSTRUCTION}\n${suggestions}`. Related tasks add `🔀 Consider routing to the same agent working on the related task.`
|
|
64
|
-
|
|
65
|
-
#### 1.2 GitLab Event Handlers (`src/gitlab/handlers.ts`)
|
|
66
|
-
|
|
67
|
-
**4 task description templates** mirroring the GitHub ones:
|
|
68
|
-
|
|
69
|
-
| Event | Line | Key Variables |
|
|
70
|
-
|-------|------|---------------|
|
|
71
|
-
| MR opened with mention | 94 | `mr.iid`, `mr.title`, `user.username`, `mr.source_branch`, `mr.target_branch` |
|
|
72
|
-
| Issue opened/assigned | 175 | `issue.iid`, `issue.title`, `user.username` |
|
|
73
|
-
| Comment with mention | 253 | `entityLabel`, `user.username`, `existingTask.id` |
|
|
74
|
-
| Pipeline failed | 311 | `pipeline.id`, `mrIid`, `event.merge_request.*` |
|
|
75
|
-
|
|
76
|
-
**Notable divergence from GitHub:** GitLab's `DELEGATION_INSTRUCTION` (line 33) is different text — uses markdown bold and names the `send-task` tool explicitly. This is an inconsistency the brainstorm's unified registry would fix.
|
|
77
|
-
|
|
78
|
-
#### 1.3 Slack Handlers (`src/slack/handlers.ts`)
|
|
79
|
-
|
|
80
|
-
Not a traditional task template — Slack extracts task text from user messages. Key prompt patterns:
|
|
81
|
-
|
|
82
|
-
| Pattern | Lines | Description |
|
|
83
|
-
|---------|-------|-------------|
|
|
84
|
-
| Thread context wrapping | 448-449 | `<thread_context>\n${threadContext}\n</thread_context>\n\n${taskDescription}` |
|
|
85
|
-
| Thread message formatting | 204-218 | `"[Agent]: ${truncatedText}"` or `"${userName}: ${m.text}"` per message |
|
|
86
|
-
| Rate limit warning | 424-428 | Static: `":satellite: _You're sending too many requests..._"` |
|
|
87
|
-
| Empty task warning | 433-436 | Static: `":satellite: _Please provide a task description..._"` |
|
|
88
|
-
| No agents online | 461-463 | Static: `":satellite: _No agents are online right now..._"` |
|
|
89
|
-
| File attachment | 241-244 | `"[File: ${f.name} (${f.mimetype}, ${formatFileSize(f.size)}) id=${f.id}]"` |
|
|
90
|
-
|
|
91
|
-
#### 1.4 Slack Assistant (`src/slack/assistant.ts`)
|
|
92
|
-
|
|
93
|
-
| Pattern | Line | Description |
|
|
94
|
-
|---------|------|-------------|
|
|
95
|
-
| Greeting | 18 | `"Hi! I'm your Agent Swarm assistant. How can I help?"` |
|
|
96
|
-
| Suggested prompts | 20-27 | Static 3-item prompt array |
|
|
97
|
-
| Channel context | 84 | `"\n\n[User is viewing channel <#${ctx.channel_id}>]"` |
|
|
98
|
-
| Offline message | 96-98 | `"No agents are available right now..."` |
|
|
99
|
-
| Status messages | 53, 68, 73 | `"Queuing follow-up..."`, `"Processing follow-up..."`, `"Processing your request..."` |
|
|
100
|
-
|
|
101
|
-
#### 1.5 AgentMail Handlers (`src/agentmail/handlers.ts`)
|
|
102
|
-
|
|
103
|
-
**5 task description templates** for email-to-task conversion:
|
|
104
|
-
|
|
105
|
-
| Variant | Line | Title | Trigger |
|
|
106
|
-
|---------|------|-------|---------|
|
|
107
|
-
| Follow-up in thread | 112 | `[AgentMail] Follow-up email in thread` | Existing thread task found |
|
|
108
|
-
| New email → lead | 138 | `[AgentMail] New email received` | Mapped inbox, lead agent |
|
|
109
|
-
| New email → worker | 156 | `[AgentMail] New email received` | Mapped inbox, worker agent |
|
|
110
|
-
| Unmapped inbox → lead | 177 | `[AgentMail] New email received (unmapped inbox)` | No inbox mapping |
|
|
111
|
-
| No agent available | 195 | `[AgentMail] New email received (no agent available)` | No agent online |
|
|
112
|
-
|
|
113
|
-
All share variables: `from`, `subject`, `inbox_id`, `thread_id`, `preview` (body truncated to 500 chars). Slight inconsistency: mapped-to-lead variant includes `message_id`, worker variant doesn't.
|
|
114
|
-
|
|
115
|
-
#### 1.6 Linear Sync (`src/linear/sync.ts`)
|
|
116
|
-
|
|
117
|
-
| Pattern | Line | Type | Variables |
|
|
118
|
-
|---------|------|------|-----------|
|
|
119
|
-
| New issue task | 277 | Task description | `issueIdentifier`, `issueTitle`, `issueUrl`, `sessionUrl`, `issueDescription` |
|
|
120
|
-
| Acknowledgment thought | 305 | Linear activity | `task.id` |
|
|
121
|
-
| In-progress message | 481 | Linear activity | Static |
|
|
122
|
-
| Follow-up task | 494 | Task description | `issueIdentifier`, `issueTitle`, `issueUrl`, `userMessage` |
|
|
123
|
-
| Follow-up ack | 524 | Linear activity | `task.id` |
|
|
124
|
-
| Stop signal | 458 | Linear activity | Static: `"Task cancelled by user."` |
|
|
125
|
-
|
|
126
|
-
#### 1.7 Heartbeat (`src/heartbeat/heartbeat.ts`)
|
|
127
|
-
|
|
128
|
-
**1 escalation task template** (lines 259-278): Assembled from sections array. Lists each stalled task with `task.id.slice(0,8)`, `agentSlice`, `task.lastUpdatedAt`. Includes deterministic `escalationKey` to prevent duplicate escalations. Task type `"heartbeat"`, priority 70.
|
|
129
|
-
|
|
130
|
-
#### 1.8 Store Progress (`src/tools/store-progress.ts`)
|
|
131
|
-
|
|
132
|
-
| Pattern | Line | Type | Variables |
|
|
133
|
-
|---------|------|------|-----------|
|
|
134
|
-
| Completed task memory | 183 | Agent memory | `task.task`, `output` |
|
|
135
|
-
| Failed task memory | 184 | Agent memory | `task.task`, `failureReason` |
|
|
136
|
-
| Swarm-shared memory | 217 | Swarm memory | `requestInfo.agentId`, `taskContent` |
|
|
137
|
-
| Follow-up: completed | 250 | Task description | `agentName`, `taskDesc`, `outputSummary`, `taskId` |
|
|
138
|
-
| Follow-up: failed | 253 | Task description | `agentName`, `taskDesc`, `reason`, `taskId` |
|
|
139
|
-
| Epic context enrichment | 261-274 | Appended to above | `epic.*`, `result.task.epicId` |
|
|
140
|
-
|
|
141
|
-
#### 1.9 Runner (`src/commands/runner.ts`)
|
|
142
|
-
|
|
143
|
-
**Trigger-based prompts** spawned into provider sessions:
|
|
144
|
-
|
|
145
|
-
| Trigger Type | Lines | Key Variables |
|
|
146
|
-
|-------------|-------|---------------|
|
|
147
|
-
| `task_assigned` | 892-903 | `trigger.taskId`, `taskDesc` |
|
|
148
|
-
| `task_offered` | 906-917 | `trigger.taskId`, `taskDesc` |
|
|
149
|
-
| `unread_mentions` | 920-926 | `trigger.count` |
|
|
150
|
-
| `pool_tasks_available` | 928-936 | `trigger.count` |
|
|
151
|
-
| `epic_progress_changed` | 938-1035 | Full epic state: `epic.*`, task summaries, stats |
|
|
152
|
-
| Resume with progress | 455-468 | `task.id`, `task.task`, `task.progress` |
|
|
153
|
-
| Resume no progress | 470-483 | `task.id`, `task.task` |
|
|
154
|
-
|
|
155
|
-
**Context enrichment fragments:**
|
|
156
|
-
| Fragment | Lines | Trigger |
|
|
157
|
-
|----------|-------|---------|
|
|
158
|
-
| Relevant memories | 1071-1075 | Memory search returns results (similarity > 0.4) |
|
|
159
|
-
| Epic task context | 1124-1129 | Task belongs to epic, sibling tasks completed |
|
|
160
|
-
| Working directory annotation | 2176-2183 | Effective CWD differs from process.cwd() |
|
|
161
|
-
| CWD warning (system prompt) | 2189 | Task dir doesn't exist |
|
|
162
|
-
|
|
163
|
-
#### 1.10 Hook System (`src/hooks/hook.ts`)
|
|
164
|
-
|
|
165
|
-
**13 distinct prompt strings** injected via stdout or block responses:
|
|
166
|
-
|
|
167
|
-
| ID | Lines | Type | Trigger |
|
|
168
|
-
|----|-------|------|---------|
|
|
169
|
-
| Progress reminder (busy) | 670-672 | stdout | Every hook, busy worker |
|
|
170
|
-
| Progress reminder (post-tool) | 971-973 | stdout | PostToolUse, worker |
|
|
171
|
-
| Send-task confirmation | 966-968 | stdout | PostToolUse, lead + send-task |
|
|
172
|
-
| Unregistered agent | 675-681 | stdout | Every hook, no agentInfo |
|
|
173
|
-
| Registered agent status | 657-659 | stdout | Every hook, has agentInfo |
|
|
174
|
-
| Task cancelled (with file) | 541-543 | Block response | PreToolUse/UserPromptSubmit |
|
|
175
|
-
| Task cancelled (no file) | 558-560 | Block response | PreToolUse/UserPromptSubmit |
|
|
176
|
-
| Tool loop detected | 808-812 | Block response | PreToolUse |
|
|
177
|
-
| Polling limit | 827-829 | Block response | PreToolUse |
|
|
178
|
-
| Goal reminder | 770-778 | stdout | PreCompact |
|
|
179
|
-
| Shared disk write warning | 88-96 | stdout | PreToolUse/PostToolUse |
|
|
180
|
-
| Concurrent session awareness | 705-746 | stdout | SessionStart, lead |
|
|
181
|
-
| Session summarization | 1057-1074 | Piped to haiku → memory | Stop event |
|
|
182
|
-
|
|
183
|
-
#### 1.11 Pi-Mono Extension (`src/providers/pi-mono-extension.ts`)
|
|
184
|
-
|
|
185
|
-
**10 prompt strings** — mirrors a subset of hook.ts for the pi-mono provider. Of the 13 hook prompts cataloged in 1.10, 10 have pi-mono equivalents: task cancellation (2), tool loop, polling limit, progress reminders (2), send-task confirmation, shared disk write warning, concurrent session awareness, PreCompact goal reminder, and session summarization. The 3 hook-only prompts (unregistered agent, registered agent status, progress reminder on busy) have no pi-mono counterpart. Minor differences exist (e.g., send-task confirmation omits task ID in pi-mono).
|
|
186
|
-
|
|
187
|
-
#### 1.12 Docker Entrypoint (`docker-entrypoint.sh`)
|
|
188
|
-
|
|
189
|
-
**1 task template** (lines 241-248): Agent-fs invitation task for lead. Interpolates `AF_SHARED_ORG_ID` and `AGENT_ID` via shell `${}`. Created via `POST /api/tasks`.
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
### 2. System Prompt Assembly (`src/prompts/base-prompt.ts`)
|
|
194
|
-
|
|
195
|
-
#### 2.1 Architecture
|
|
196
|
-
|
|
197
|
-
`getBasePrompt(args: BasePromptArgs)` is the sole export. It assembles the system prompt from 12 module-scoped constants in a fixed order:
|
|
198
|
-
|
|
199
|
-
```
|
|
200
|
-
1. BASE_PROMPT_ROLE — "{role}" and "{agentId}" replaced (line 1)
|
|
201
|
-
2. [Identity block] — name, description, soulMd, identityMd (lines 500-515)
|
|
202
|
-
3. [Repository Context] — repo CLAUDE.md from VCS clone (lines 518-533)
|
|
203
|
-
4. [Agent CLAUDE.md] — truncatable, 20k char cap (lines 580-600)
|
|
204
|
-
5. [Agent TOOLS.md] — truncatable, remaining budget (lines 601-611)
|
|
205
|
-
6. BASE_PROMPT_REGISTER — join-swarm instruction (line 7)
|
|
206
|
-
7. BASE_PROMPT_LEAD or _WORKER — role-conditional (line 539)
|
|
207
|
-
8. BASE_PROMPT_FILESYSTEM — "{agentId}" replaced (line 228)
|
|
208
|
-
9. [BASE_PROMPT_AGENT_FS] — conditional on AGENT_FS_API_URL env (line 306)
|
|
209
|
-
10. BASE_PROMPT_SELF_AWARENESS — static (line 365)
|
|
210
|
-
11. BASE_PROMPT_CONTEXT_MODE — static (line 384)
|
|
211
|
-
12. BASE_PROMPT_GUIDELINES — static (line 390)
|
|
212
|
-
13. BASE_PROMPT_SYSTEM — static (line 397)
|
|
213
|
-
14. [BASE_PROMPT_SERVICES] — conditional on capabilities (line 421)
|
|
214
|
-
15. [BASE_PROMPT_ARTIFACTS] — conditional on capabilities (line 458)
|
|
215
|
-
16. [Capabilities list] — conditional (line 572)
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
#### 2.2 Interpolation Pattern
|
|
219
|
-
|
|
220
|
-
Uses **single-brace** `{placeholder}` with `.replace()` / `.replaceAll()`:
|
|
221
|
-
- `BASE_PROMPT_ROLE.replace("{role}", role).replace("{agentId}", agentId)` (line 497)
|
|
222
|
-
- `BASE_PROMPT_FILESYSTEM.replaceAll("{agentId}", agentId)` (line 545)
|
|
223
|
-
- `BASE_PROMPT_AGENT_FS.replaceAll("{agentId}", agentId).replaceAll("{sharedOrgId}", sharedOrgId)` (line 550)
|
|
224
|
-
- `BASE_PROMPT_SERVICES.replace("{agentId}", agentId).replace("{swarmUrl}", swarmUrl)` (line 562)
|
|
225
|
-
|
|
226
|
-
This is distinct from both the `{{...}}` workflow interpolation and the `${...}` JS template literals used by event handlers.
|
|
227
|
-
|
|
228
|
-
#### 2.3 Caller Chain
|
|
229
|
-
|
|
230
|
-
1. `runAgent()` in `src/commands/runner.ts` defines a `buildSystemPrompt()` closure (line 1519) that calls `getBasePrompt()`
|
|
231
|
-
2. Called **3 times** during lifecycle: initial (no identity), post-profile-fetch (identity populated), per-task (repo context set)
|
|
232
|
-
3. Result passed to `ProviderSessionConfig.systemPrompt` (line 1174)
|
|
233
|
-
4. Claude adapter: `--append-system-prompt` CLI flag (line 137 of `claude-adapter.ts`)
|
|
234
|
-
5. Pi-mono adapter: `ResourceLoader.appendSystemPrompt` (line 407 of `pi-mono-adapter.ts`)
|
|
235
|
-
|
|
236
|
-
#### 2.4 Truncation System
|
|
237
|
-
|
|
238
|
-
- `BOOTSTRAP_MAX_CHARS = 20_000` per section
|
|
239
|
-
- `BOOTSTRAP_TOTAL_MAX_CHARS = 150_000` total budget
|
|
240
|
-
- Protected content (prompt + staticSuffix) is measured first, remainder allocated to truncatable sections
|
|
241
|
-
- Agent CLAUDE.md gets priority, TOOLS.md gets leftover budget
|
|
242
|
-
|
|
243
|
-
#### 2.5 Dynamic Sections
|
|
244
|
-
|
|
245
|
-
| Section | Condition | Source |
|
|
246
|
-
|---------|-----------|--------|
|
|
247
|
-
| Identity block | `soulMd \|\| identityMd \|\| name` | Agent profile from `/me` API |
|
|
248
|
-
| Repo CLAUDE.md | Task has `vcsRepo` | Read from cloned repo |
|
|
249
|
-
| Agent CLAUDE.md | `args.claudeMd` truthy | Profile `claudeMd` field |
|
|
250
|
-
| Agent TOOLS.md | `args.toolsMd` truthy | Profile `toolsMd` field |
|
|
251
|
-
| Lead vs Worker | `role === "lead"` | Runner config |
|
|
252
|
-
| Agent-FS | `AGENT_FS_API_URL` env set | Environment |
|
|
253
|
-
| Services | capabilities includes `"services"` | `CAPABILITIES` env var |
|
|
254
|
-
| Artifacts | capabilities includes `"artifacts"` | `CAPABILITIES` env var |
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
### 3. Existing Config/Scope System
|
|
259
|
-
|
|
260
|
-
#### 3.1 Database Schema (`src/be/migrations/001_initial.sql:246-258`)
|
|
261
|
-
|
|
262
|
-
```sql
|
|
263
|
-
CREATE TABLE IF NOT EXISTS swarm_config (
|
|
264
|
-
id TEXT PRIMARY KEY,
|
|
265
|
-
scope TEXT NOT NULL CHECK(scope IN ('global', 'agent', 'repo')),
|
|
266
|
-
scopeId TEXT,
|
|
267
|
-
key TEXT NOT NULL,
|
|
268
|
-
value TEXT NOT NULL,
|
|
269
|
-
isSecret INTEGER NOT NULL DEFAULT 0,
|
|
270
|
-
envPath TEXT,
|
|
271
|
-
description TEXT,
|
|
272
|
-
createdAt TEXT NOT NULL,
|
|
273
|
-
lastUpdatedAt TEXT NOT NULL,
|
|
274
|
-
UNIQUE(scope, scopeId, key)
|
|
275
|
-
);
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
#### 3.2 Scope Resolution (`src/be/db.ts:5058-5084`)
|
|
279
|
-
|
|
280
|
-
`getResolvedConfig(agentId?, repoId?)` implements the overlay strategy:
|
|
281
|
-
1. Start with all `global` scope configs (keyed by `config.key`)
|
|
282
|
-
2. Overlay `agent`-scoped configs (same key overwrites global)
|
|
283
|
-
3. Overlay `repo`-scoped configs (same key overwrites both)
|
|
284
|
-
|
|
285
|
-
**Resolution priority: `repo > agent > global`** — most specific wins.
|
|
286
|
-
|
|
287
|
-
**NULL handling caveat:** SQLite treats `NULL != NULL` in UNIQUE constraints, so `UNIQUE(scope, scopeId, key)` doesn't fire for `scope=global` where `scopeId IS NULL`. The `upsertSwarmConfig()` function (line 4966) manually checks for existing entries instead of relying on `ON CONFLICT`.
|
|
288
|
-
|
|
289
|
-
#### 3.3 Access Paths
|
|
290
|
-
|
|
291
|
-
**MCP tools** (deferred, in `src/tools/swarm-config/`):
|
|
292
|
-
- `set-config` — validates scope/scopeId consistency, upserts
|
|
293
|
-
- `get-config` — calls `getResolvedConfig()`, masks secrets
|
|
294
|
-
- `list-config` — raw listing, no resolution
|
|
295
|
-
- `delete-config` — by UUID
|
|
296
|
-
|
|
297
|
-
**REST API** (`src/http/config.ts`):
|
|
298
|
-
- `GET /api/config/resolved` — merged config with scope resolution
|
|
299
|
-
- `GET /api/config/{id}` — single entry
|
|
300
|
-
- `GET /api/config` — raw list with filters
|
|
301
|
-
- `PUT /api/config` — upsert
|
|
302
|
-
- `DELETE /api/config/{id}` — delete
|
|
303
|
-
|
|
304
|
-
**Types** (`src/types.ts:460-480`): `SwarmConfigScopeSchema = z.enum(["global", "agent", "repo"])`, `SwarmConfigSchema` with Zod validation.
|
|
305
|
-
|
|
306
|
-
#### 3.4 Relevance to Prompt Template Registry
|
|
307
|
-
|
|
308
|
-
The config system is a **structural precedent** for the proposed prompt template registry:
|
|
309
|
-
- Same scope values (`global`, `agent`, `repo`)
|
|
310
|
-
- Same `NULL` handling issue will apply to prompt templates
|
|
311
|
-
- Same dual-access pattern (MCP tools + REST API)
|
|
312
|
-
- The `envPath` + `writeEnvFile()` pattern shows config values can sync to external systems — analogous to how prompt templates would sync to the resolver cache
|
|
313
|
-
|
|
314
|
-
**⚠️ Resolution order discrepancy:** The existing config system resolves **`repo > agent > global`** (repo overlaid last, wins over agent — `db.ts:5076`). However, the brainstorm proposes **`agent > repo > global`** (agent checked first, most specific). These are inverted. The plan needs to decide which precedence to adopt:
|
|
315
|
-
- **Config precedent (repo > agent > global):** A repo-level override beats an agent-level one. Makes sense when repo conventions should be enforced regardless of agent.
|
|
316
|
-
- **Brainstorm proposal (agent > repo > global):** An agent-level override beats a repo-level one. Makes sense when individual agents should be able to opt out of repo defaults.
|
|
317
|
-
|
|
318
|
-
#### 3.5 Task Metadata Available at Resolution Time
|
|
319
|
-
|
|
320
|
-
All event handlers call `createTaskExtended(task, options)` (`db.ts:1777`). The `CreateTaskOptions` interface (`db.ts:1707-1740`) provides the following metadata that would be available to the template resolver for scope resolution:
|
|
321
|
-
|
|
322
|
-
| Field | Type | Relevance to resolver |
|
|
323
|
-
|-------|------|----------------------|
|
|
324
|
-
| `agentId` | `string?` | Agent scope lookup |
|
|
325
|
-
| `vcsRepo` | `string?` | Repo scope lookup (e.g. `"desplega-ai/agent-swarm"`) |
|
|
326
|
-
| `vcsProvider` | `"github" \| "gitlab"?` | Could differentiate GitHub vs GitLab templates |
|
|
327
|
-
| `vcsEventType` | `string?` | Maps to event type taxonomy |
|
|
328
|
-
| `taskType` | `string?` | Template selection key |
|
|
329
|
-
| `source` | `AgentTaskSource?` | Origin (github, gitlab, slack, linear, etc.) |
|
|
330
|
-
| `epicId` | `string?` | Epic context enrichment |
|
|
331
|
-
| `tags` | `string[]?` | Could influence template selection |
|
|
332
|
-
| `parentTaskId` | `string?` | For follow-up context inheritance |
|
|
333
|
-
| `creatorAgentId` | `string?` | Who created the task |
|
|
334
|
-
| `dir` | `string?` | Working directory context |
|
|
335
|
-
|
|
336
|
-
The resolver would need at minimum `agentId` + `vcsRepo` for scope resolution, and `source` + `vcsEventType` (or `taskType`) for template selection.
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
### 4. Existing Template-Like Patterns
|
|
341
|
-
|
|
342
|
-
#### 4.1 Workflow Interpolation (`src/workflows/template.ts`)
|
|
343
|
-
|
|
344
|
-
**General-purpose `{{path.to.value}}` engine:**
|
|
345
|
-
- `interpolate(template, context)` — regex `/\{\{([^}]+)\}\}/g`, dot-path resolution, replaces unresolved with empty string, tracks unresolved tokens
|
|
346
|
-
- `deepInterpolate(value, context)` — recursive tree walk for objects/arrays
|
|
347
|
-
- Returns `{ result: string, unresolved: string[] }`
|
|
348
|
-
|
|
349
|
-
**Used by:** Agent profile template interpolation in `runner.ts:1700-1719` with context `{ agent: { name, role, description, capabilities } }`.
|
|
350
|
-
|
|
351
|
-
**Gap for prompt template registry:** The brainstorm proposes `{{@template[event_type]}}` syntax for recursive template embedding (e.g., `{{@template[common.delegation_instruction]}}`). The existing `interpolate()` function does **not** support this — its regex `/\{\{([^}]+)\}\}/g` would match `@template[common.delegation_instruction]` as a dot-path and try to resolve it against the context object (failing silently, returning `""`). To support recursive embedding, the resolver would need to either:
|
|
352
|
-
1. **Extend `interpolate()`** with a pre-pass that detects `{{@template[...]}}` tokens, resolves them from the registry, and substitutes before variable interpolation
|
|
353
|
-
2. **Wrap `interpolate()`** in a resolver function that handles template references in a loop (with depth limit of 3 and cycle detection per the brainstorm)
|
|
354
|
-
|
|
355
|
-
Option 2 (wrapping) is cleaner — keeps `interpolate()` unchanged and adds template-specific logic in a new `resolveTemplate()` function.
|
|
356
|
-
|
|
357
|
-
#### 4.2 Workflow Template Instantiation (`src/workflows/templates.ts`)
|
|
358
|
-
|
|
359
|
-
**Separate system for `WorkflowTemplate` objects:**
|
|
360
|
-
- `validateTemplateVariables(variables, provided)` — checks required vars with defaults
|
|
361
|
-
- `instantiateTemplate(template, variables)` — validates + deep-clones + replaces
|
|
362
|
-
- `replaceStringPlaceholders(str, vars)` — regex `/\{\{(\w+)\}\}/g`, flat keys only, leaves unresolved as-is
|
|
363
|
-
|
|
364
|
-
**Key difference:** Flat keys (`{{key}}`) vs dot-paths (`{{a.b.c}}`), and unresolved handling differs.
|
|
365
|
-
|
|
366
|
-
#### 4.3 Base Prompt Interpolation (`src/prompts/base-prompt.ts`)
|
|
367
|
-
|
|
368
|
-
**Single-brace `{placeholder}` with `.replace()`** — a third, distinct interpolation pattern. No regex, no unresolved tracking, simple string replacement.
|
|
369
|
-
|
|
370
|
-
#### 4.4 Scheduled Tasks (`001_initial.sql:222`)
|
|
371
|
-
|
|
372
|
-
`scheduled_tasks.taskTemplate` is a `TEXT NOT NULL` column storing task description strings. In `src/scheduler/scheduler.ts:35,125,285`, this value is passed directly to `createTaskExtended()` as the task description — **no interpolation performed**. This is the closest existing concept to "stored task description templates" but lacks any variable substitution.
|
|
373
|
-
|
|
374
|
-
#### 4.5 Template Registry Types (`templates/schema.ts`)
|
|
375
|
-
|
|
376
|
-
`TemplateConfig` and `TemplateResponse` types define the agent profile template system. Files (`claudeMd`, `soulMd`, `identityMd`, `toolsMd`, `setupScript`) contain `{{agent.*}}` tokens interpolated at registration time via the workflow `interpolate()` function.
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
## Code References
|
|
381
|
-
|
|
382
|
-
| File | Lines | Description |
|
|
383
|
-
|------|-------|-------------|
|
|
384
|
-
| `src/github/handlers.ts` | 19-20, 25-38, 103-917 | GitHub event handler templates, DELEGATION_INSTRUCTION, getCommandSuggestions |
|
|
385
|
-
| `src/gitlab/handlers.ts` | 33-34, 54-63, 94-311 | GitLab event handler templates, separate DELEGATION_INSTRUCTION |
|
|
386
|
-
| `src/slack/handlers.ts` | 204-218, 424-499 | Thread context wrapping, user-facing messages |
|
|
387
|
-
| `src/slack/assistant.ts` | 18-98 | Greeting, suggested prompts, offline message |
|
|
388
|
-
| `src/agentmail/handlers.ts` | 112-197 | 5 email-to-task templates |
|
|
389
|
-
| `src/linear/sync.ts` | 277-524 | Linear issue tasks and thought activities |
|
|
390
|
-
| `src/heartbeat/heartbeat.ts` | 259-296 | Escalation task template |
|
|
391
|
-
| `src/tools/store-progress.ts` | 183-279 | Memory content + follow-up task templates + epic context |
|
|
392
|
-
| `src/commands/runner.ts` | 455-1129, 2176-2197 | Trigger prompts, resume prompts, context enrichment |
|
|
393
|
-
| `src/hooks/hook.ts` | 88-1074 | 13 hook-injected messages (stdout + block responses) |
|
|
394
|
-
| `src/providers/pi-mono-extension.ts` | 173-594 | 10 pi-mono mirror prompts |
|
|
395
|
-
| `docker-entrypoint.sh` | 241-248 | Agent-fs invitation task |
|
|
396
|
-
| `src/prompts/base-prompt.ts` | 1-638 | 12 system prompt constants + getBasePrompt() assembly |
|
|
397
|
-
| `src/be/db.ts` | 4845-5084 | Config CRUD + scope resolution |
|
|
398
|
-
| `src/be/migrations/001_initial.sql` | 246-258 | swarm_config table schema |
|
|
399
|
-
| `src/http/config.ts` | 16-191 | Config REST API endpoints |
|
|
400
|
-
| `src/tools/swarm-config/` | — | Config MCP tools (set, get, list, delete) |
|
|
401
|
-
| `src/types.ts` | 460-480 | SwarmConfigSchema, SwarmConfigScopeSchema |
|
|
402
|
-
| `src/workflows/template.ts` | 13-74 | `{{path.to.value}}` interpolation engine |
|
|
403
|
-
| `src/workflows/templates.ts` | 7-86 | Workflow template instantiation + `{{key}}` replacement |
|
|
404
|
-
| `templates/schema.ts` | 1-35 | Agent profile template types |
|
|
405
|
-
|
|
406
|
-
## Architecture Documentation
|
|
407
|
-
|
|
408
|
-
### Three Interpolation Patterns Coexisting
|
|
409
|
-
|
|
410
|
-
| Pattern | Syntax | Engine | Unresolved Handling | Used By |
|
|
411
|
-
|---------|--------|--------|-------------------|---------|
|
|
412
|
-
| JS template literals | `${var}` | JavaScript runtime | N/A (compile-time) | Event handlers (GitHub, GitLab, Slack, etc.) |
|
|
413
|
-
| Single-brace | `{var}` | `.replace()` / `.replaceAll()` | Left as-is | `getBasePrompt()` system prompt constants |
|
|
414
|
-
| Double-brace (dot-path) | `{{a.b.c}}` | Regex + object walk | Replaced with `""` | Workflow interpolation, agent profile templates |
|
|
415
|
-
| Double-brace (flat) | `{{key}}` | Regex + map lookup | Left as-is | Workflow template instantiation |
|
|
416
|
-
|
|
417
|
-
### Prompt Output Categories
|
|
418
|
-
|
|
419
|
-
| Category | Count | Examples |
|
|
420
|
-
|----------|-------|---------|
|
|
421
|
-
| Task descriptions | ~30 | GitHub/GitLab events, AgentMail, Linear, heartbeat, follow-ups |
|
|
422
|
-
| System prompt constants | 12 | BASE_PROMPT_ROLE through BASE_PROMPT_ARTIFACTS |
|
|
423
|
-
| Hook-injected messages | ~13 | Progress reminders, cancellation blocks, goal reminders |
|
|
424
|
-
| External platform messages | ~8 | Linear thoughts, Slack user messages, Slack status |
|
|
425
|
-
| Memory content templates | 3 | Task completion/failure memory strings |
|
|
426
|
-
| Session prompts (triggers) | 7 | task_assigned, task_offered, resume, epic progress, etc. |
|
|
427
|
-
|
|
428
|
-
### Hook/Extension Duplication
|
|
429
|
-
|
|
430
|
-
`src/hooks/hook.ts` and `src/providers/pi-mono-extension.ts` contain **near-identical prompt strings** — the pi-mono extension mirrors Claude Code hooks for the alternative provider. This means any prompt change needs to be made in both files, a maintenance burden the registry would eliminate.
|
|
431
|
-
|
|
432
|
-
## Historical Context (from thoughts/)
|
|
433
|
-
|
|
434
|
-
- `thoughts/taras/research/2026-03-10-configurable-event-prompts.md` — Earlier research on the same topic, likely a precursor to the brainstorm document
|
|
435
|
-
- `thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md` — The brainstorm this research validates, containing key decisions on scope hierarchy, three-state control, seeded defaults, and audit history
|
|
436
|
-
|
|
437
|
-
## Related Research
|
|
438
|
-
|
|
439
|
-
*(Earlier research at `2026-03-10-configurable-event-prompts.md` was a preliminary try — superseded by this document and the brainstorm.)*
|
|
440
|
-
|
|
441
|
-
## Resolved Questions (from review)
|
|
442
|
-
|
|
443
|
-
- **Interpolation syntax:** ✅ Reuse the existing `interpolate()` from `src/workflows/template.ts` with good test coverage. No need for a dedicated resolver.
|
|
444
|
-
- **Hook/extension prompts:** ✅ Out of scope — leave hook-injected messages (progress reminders, cancellation blocks, goal reminders) as hardcoded. They have different delivery mechanisms and don’t benefit from runtime customization.
|
|
445
|
-
- **Pi-mono duplication:** ✅ Out of scope — don’t unify hook.ts / pi-mono-extension.ts through the registry. Only thing to consider is skill mapping differences added recently (if any).
|
|
446
|
-
- **Scheduled task templates:** ✅ Out of scope — `scheduled_tasks.taskTemplate` is user/lead-defined, not system-defined. Could add interpolation later but not needed now.
|
|
447
|
-
- **Memory content templates:** ✅ Out of scope — store-progress memory strings are tightly coupled to their logic, not worth abstracting into the registry.
|
|
448
|
-
|
|
449
|
-
## Open Questions
|
|
450
|
-
|
|
451
|
-
- **Template structure:** Should templates separate a static `title` pattern (e.g. `[GitHub PR #{{pr.number}}] {{pr.title}}`) from a variable `body`? Many event types share the same header but differ in body content. This could simplify overrides — customize the body without touching the title.
|
|
452
|
-
- **Skill mapping differences (pi-mono):** Were any skill mapping differences between hook.ts and pi-mono-extension.ts added recently that would affect template scoping?
|
|
453
|
-
|
|
454
|
-
---
|
|
455
|
-
|
|
456
|
-
## Review Errata
|
|
457
|
-
|
|
458
|
-
_Reviewed: 2026-03-20 by Claude_
|
|
459
|
-
|
|
460
|
-
### Critical
|
|
461
|
-
- [x] **Scope resolution order mismatch** — Section 3.4 claimed "same resolution strategy." Fixed: now explicitly flags that config uses `repo > agent > global` while brainstorm proposes `agent > repo > global`, with pros/cons for each. Decision deferred to plan phase.
|
|
462
|
-
|
|
463
|
-
### Important
|
|
464
|
-
- [x] **Missing `createTaskExtended()` metadata analysis** — Added section 3.5 documenting all `CreateTaskOptions` fields available at resolution time, with relevance mapping for the template resolver.
|
|
465
|
-
- [x] **`{{@template[...]}}` recursive embedding not assessed** — Added gap analysis in section 4.1 explaining that `interpolate()` doesn't support `{{@template[...]}}` syntax. Recommends wrapping (not extending) `interpolate()` in a new `resolveTemplate()` function for template references + cycle detection.
|
|
466
|
-
|
|
467
|
-
### Minor (auto-fixed)
|
|
468
|
-
- [x] **Summary category count** — said "four categories" but table showed six. Fixed to "six categories."
|
|
469
|
-
- [x] **Pi-mono prompt count clarity** — "10 prompts" referenced "6A-6M" without explaining the mapping. Expanded to list which 10 of 13 are mirrored and which 3 are hook-only.
|
package/tsconfig.json
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
// Environment setup & latest features
|
|
4
|
-
"lib": ["ESNext"],
|
|
5
|
-
"types": ["bun"],
|
|
6
|
-
"target": "ESNext",
|
|
7
|
-
"module": "Preserve",
|
|
8
|
-
"moduleDetection": "force",
|
|
9
|
-
"jsx": "react-jsx",
|
|
10
|
-
"allowJs": true,
|
|
11
|
-
|
|
12
|
-
// Bundler mode
|
|
13
|
-
"moduleResolution": "bundler",
|
|
14
|
-
"allowImportingTsExtensions": true,
|
|
15
|
-
|
|
16
|
-
// Path aliases
|
|
17
|
-
"baseUrl": ".",
|
|
18
|
-
"paths": {
|
|
19
|
-
"@/*": ["src/*"]
|
|
20
|
-
},
|
|
21
|
-
"verbatimModuleSyntax": true,
|
|
22
|
-
"noEmit": true,
|
|
23
|
-
|
|
24
|
-
// Best practices
|
|
25
|
-
"strict": true,
|
|
26
|
-
"skipLibCheck": true,
|
|
27
|
-
"noFallthroughCasesInSwitch": true,
|
|
28
|
-
"noUncheckedIndexedAccess": true,
|
|
29
|
-
"noImplicitOverride": true,
|
|
30
|
-
|
|
31
|
-
// Some stricter flags (disabled by default)
|
|
32
|
-
"noUnusedLocals": false,
|
|
33
|
-
"noUnusedParameters": false,
|
|
34
|
-
"noPropertyAccessFromIndexSignature": false
|
|
35
|
-
},
|
|
36
|
-
"exclude": ["ui", "new-ui", "templates-ui", "landing", "node_modules", "scripts", "src/tests", "work", "logs", "plugin", "docs-site"]
|
|
37
|
-
}
|