@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
|
@@ -17,8 +17,11 @@ import {
|
|
|
17
17
|
updateTaskProgress,
|
|
18
18
|
} from "@/be/db";
|
|
19
19
|
import { getEmbedding, serializeEmbedding } from "@/be/embedding";
|
|
20
|
+
import { resolveTemplate } from "@/prompts/resolver";
|
|
20
21
|
import { createToolRegistrar } from "@/tools/utils";
|
|
21
22
|
import { AgentTaskSchema } from "@/types";
|
|
23
|
+
// Side-effect import: registers task lifecycle templates in the in-memory registry
|
|
24
|
+
import "./templates";
|
|
22
25
|
import { validateJsonSchema } from "@/workflows/json-schema-validator";
|
|
23
26
|
|
|
24
27
|
// Schema for optional cost data that agents can self-report
|
|
@@ -268,7 +271,8 @@ export const registerStoreProgressTool = (server: McpServer) => {
|
|
|
268
271
|
|
|
269
272
|
// Create follow-up task for the lead when a worker task finishes.
|
|
270
273
|
// This replaces the old poll-based tasks_finished trigger which was unreliable.
|
|
271
|
-
|
|
274
|
+
// Skip for workflow-managed tasks — the workflow engine handles sequencing via resume.ts.
|
|
275
|
+
if (status && result.success && result.task && !result.task.workflowRunId) {
|
|
272
276
|
try {
|
|
273
277
|
const taskAgent = getAgentById(result.task.agentId ?? "");
|
|
274
278
|
// Only create follow-ups for worker tasks (not lead's own tasks)
|
|
@@ -280,11 +284,25 @@ export const registerStoreProgressTool = (server: McpServer) => {
|
|
|
280
284
|
|
|
281
285
|
let followUpDescription: string;
|
|
282
286
|
if (status === "completed") {
|
|
283
|
-
const outputSummary = output
|
|
284
|
-
|
|
287
|
+
const outputSummary = output
|
|
288
|
+
? `${output.slice(0, 500)}${output.length > 500 ? "..." : ""}`
|
|
289
|
+
: "(no output)";
|
|
290
|
+
const completedResult = resolveTemplate("task.worker.completed", {
|
|
291
|
+
agent_name: agentName,
|
|
292
|
+
task_desc: taskDesc,
|
|
293
|
+
output_summary: outputSummary,
|
|
294
|
+
task_id: taskId,
|
|
295
|
+
});
|
|
296
|
+
followUpDescription = completedResult.text;
|
|
285
297
|
} else {
|
|
286
298
|
const reason = failureReason || "(no reason given)";
|
|
287
|
-
|
|
299
|
+
const failedResult = resolveTemplate("task.worker.failed", {
|
|
300
|
+
agent_name: agentName,
|
|
301
|
+
task_desc: taskDesc,
|
|
302
|
+
failure_reason: reason,
|
|
303
|
+
task_id: taskId,
|
|
304
|
+
});
|
|
305
|
+
followUpDescription = failedResult.text;
|
|
288
306
|
}
|
|
289
307
|
|
|
290
308
|
// Enrich follow-up with epic context if task belongs to an epic
|
package/src/tools/task-action.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
checkDependencies,
|
|
6
6
|
claimTask,
|
|
7
7
|
createTaskExtended,
|
|
8
|
+
getActiveSessions,
|
|
8
9
|
getActiveTaskCount,
|
|
9
10
|
getAgentById,
|
|
10
11
|
getDb,
|
|
@@ -12,8 +13,10 @@ import {
|
|
|
12
13
|
hasCapacity,
|
|
13
14
|
moveTaskFromBacklog,
|
|
14
15
|
moveTaskToBacklog,
|
|
16
|
+
reassociateSessionLogs,
|
|
15
17
|
rejectTask,
|
|
16
18
|
releaseTask,
|
|
19
|
+
updateTaskClaudeSessionId,
|
|
17
20
|
} from "@/be/db";
|
|
18
21
|
import { createToolRegistrar } from "@/tools/utils";
|
|
19
22
|
import { AgentTaskSchema } from "@/types";
|
|
@@ -164,6 +167,23 @@ export const registerTaskActionTool = (server: McpServer) => {
|
|
|
164
167
|
message: `Task "${taskId}" was already claimed by another agent. Try a different task.`,
|
|
165
168
|
};
|
|
166
169
|
}
|
|
170
|
+
|
|
171
|
+
// Reassociate session logs from pool trigger's random UUID to real task ID
|
|
172
|
+
const sessions = getActiveSessions(agentId);
|
|
173
|
+
const activeSession = sessions.find((s) => s.runnerSessionId);
|
|
174
|
+
if (activeSession?.runnerSessionId) {
|
|
175
|
+
const count = reassociateSessionLogs(activeSession.runnerSessionId, taskId);
|
|
176
|
+
if (count > 0) {
|
|
177
|
+
console.log(
|
|
178
|
+
`[task-action] Reassociated ${count} session logs for claimed task ${taskId.slice(0, 8)}`,
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
// Propagate provider session ID (e.g. claudeSessionId) to the task
|
|
182
|
+
if (activeSession.providerSessionId) {
|
|
183
|
+
updateTaskClaudeSessionId(taskId, activeSession.providerSessionId);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
167
187
|
return {
|
|
168
188
|
success: true,
|
|
169
189
|
message: `Claimed task "${taskId}".`,
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task lifecycle prompt template definitions (store-progress follow-ups).
|
|
3
|
+
*
|
|
4
|
+
* Each template is registered at module load time via registerTemplate().
|
|
5
|
+
* Handlers import this module for the side-effect of registration.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { registerTemplate } from "../prompts/registry";
|
|
9
|
+
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Worker task follow-ups (created by store-progress for the lead)
|
|
12
|
+
// ============================================================================
|
|
13
|
+
|
|
14
|
+
registerTemplate({
|
|
15
|
+
eventType: "task.worker.completed",
|
|
16
|
+
header: "",
|
|
17
|
+
defaultBody: `Worker task completed \u2014 review needed.
|
|
18
|
+
|
|
19
|
+
Agent: {{agent_name}}
|
|
20
|
+
Task: "{{task_desc}}"
|
|
21
|
+
|
|
22
|
+
Output:
|
|
23
|
+
{{output_summary}}
|
|
24
|
+
|
|
25
|
+
Use \`get-task-details\` with taskId "{{task_id}}" for full details.`,
|
|
26
|
+
variables: [
|
|
27
|
+
{ name: "agent_name", description: "Worker agent name or ID prefix" },
|
|
28
|
+
{ name: "task_desc", description: "Task description (truncated to 200 chars)" },
|
|
29
|
+
{ name: "output_summary", description: "Task output (truncated to 500 chars)" },
|
|
30
|
+
{ name: "task_id", description: "Original task ID" },
|
|
31
|
+
],
|
|
32
|
+
category: "task_lifecycle",
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
registerTemplate({
|
|
36
|
+
eventType: "task.worker.failed",
|
|
37
|
+
header: "",
|
|
38
|
+
defaultBody: `Worker task failed \u2014 action needed.
|
|
39
|
+
|
|
40
|
+
Agent: {{agent_name}}
|
|
41
|
+
Task: "{{task_desc}}"
|
|
42
|
+
|
|
43
|
+
Failure reason: {{failure_reason}}
|
|
44
|
+
|
|
45
|
+
Decide whether to reassign, retry, or handle the failure. Use \`get-task-details\` with taskId "{{task_id}}" for full details.`,
|
|
46
|
+
variables: [
|
|
47
|
+
{ name: "agent_name", description: "Worker agent name or ID prefix" },
|
|
48
|
+
{ name: "task_desc", description: "Task description (truncated to 200 chars)" },
|
|
49
|
+
{ name: "failure_reason", description: "Failure reason text" },
|
|
50
|
+
{ name: "task_id", description: "Original task ID" },
|
|
51
|
+
],
|
|
52
|
+
category: "task_lifecycle",
|
|
53
|
+
});
|
package/src/tools/tool-config.ts
CHANGED
|
@@ -105,9 +105,32 @@ export const DEFERRED_TOOLS = new Set([
|
|
|
105
105
|
"tracker-sync-status",
|
|
106
106
|
"tracker-map-agent",
|
|
107
107
|
|
|
108
|
+
// Prompt Templates (5)
|
|
109
|
+
"list-prompt-templates",
|
|
110
|
+
"get-prompt-template",
|
|
111
|
+
"set-prompt-template",
|
|
112
|
+
"delete-prompt-template",
|
|
113
|
+
"preview-prompt-template",
|
|
114
|
+
|
|
108
115
|
// Debug (1)
|
|
109
116
|
"db-query",
|
|
110
117
|
|
|
118
|
+
// Approval Requests (1)
|
|
119
|
+
"request-human-input",
|
|
120
|
+
|
|
121
|
+
// Skills (11)
|
|
122
|
+
"skill-create",
|
|
123
|
+
"skill-update",
|
|
124
|
+
"skill-delete",
|
|
125
|
+
"skill-get",
|
|
126
|
+
"skill-list",
|
|
127
|
+
"skill-search",
|
|
128
|
+
"skill-install",
|
|
129
|
+
"skill-uninstall",
|
|
130
|
+
"skill-install-remote",
|
|
131
|
+
"skill-sync-remote",
|
|
132
|
+
"skill-publish",
|
|
133
|
+
|
|
111
134
|
// Other (3)
|
|
112
135
|
"cancel-task",
|
|
113
136
|
"inject-learning",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import * as z from "zod";
|
|
3
|
-
import { updateAgentName, updateAgentProfile } from "@/be/db";
|
|
3
|
+
import { getAgentById, updateAgentName, updateAgentProfile } from "@/be/db";
|
|
4
4
|
import { createToolRegistrar } from "@/tools/utils";
|
|
5
5
|
import { type Agent, AgentSchema } from "@/types";
|
|
6
6
|
|
|
@@ -10,10 +10,17 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
10
10
|
{
|
|
11
11
|
title: "Update Profile",
|
|
12
12
|
description:
|
|
13
|
-
"Updates
|
|
13
|
+
"Updates an agent's profile information (name, description, role, capabilities). By default updates the calling agent. Lead agents can update any agent's profile by providing the agentId parameter.",
|
|
14
14
|
annotations: { idempotentHint: true },
|
|
15
15
|
|
|
16
16
|
inputSchema: z.object({
|
|
17
|
+
agentId: z
|
|
18
|
+
.string()
|
|
19
|
+
.uuid()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe(
|
|
22
|
+
"Target agent ID to update. If omitted, updates the calling agent. Only lead agents can update other agents' profiles.",
|
|
23
|
+
),
|
|
17
24
|
name: z.string().min(1).optional().describe("Agent name."),
|
|
18
25
|
description: z.string().optional().describe("Agent description."),
|
|
19
26
|
role: z
|
|
@@ -69,7 +76,18 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
69
76
|
}),
|
|
70
77
|
},
|
|
71
78
|
async (
|
|
72
|
-
{
|
|
79
|
+
{
|
|
80
|
+
agentId,
|
|
81
|
+
name,
|
|
82
|
+
description,
|
|
83
|
+
role,
|
|
84
|
+
capabilities,
|
|
85
|
+
claudeMd,
|
|
86
|
+
soulMd,
|
|
87
|
+
identityMd,
|
|
88
|
+
setupScript,
|
|
89
|
+
toolsMd,
|
|
90
|
+
},
|
|
73
91
|
requestInfo,
|
|
74
92
|
_meta,
|
|
75
93
|
) => {
|
|
@@ -83,6 +101,54 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
83
101
|
};
|
|
84
102
|
}
|
|
85
103
|
|
|
104
|
+
// Determine target agent: if agentId is provided, check lead permissions
|
|
105
|
+
const isUpdatingSelf = !agentId || agentId === requestInfo.agentId;
|
|
106
|
+
const targetAgentId = isUpdatingSelf ? requestInfo.agentId : agentId;
|
|
107
|
+
|
|
108
|
+
if (!isUpdatingSelf) {
|
|
109
|
+
// Only lead agents can update other agents' profiles
|
|
110
|
+
const callingAgent = getAgentById(requestInfo.agentId);
|
|
111
|
+
if (!callingAgent) {
|
|
112
|
+
return {
|
|
113
|
+
content: [{ type: "text", text: "Calling agent not found." }],
|
|
114
|
+
structuredContent: {
|
|
115
|
+
yourAgentId: requestInfo.agentId,
|
|
116
|
+
success: false,
|
|
117
|
+
message: "Calling agent not found.",
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (!callingAgent.isLead) {
|
|
122
|
+
return {
|
|
123
|
+
content: [
|
|
124
|
+
{
|
|
125
|
+
type: "text",
|
|
126
|
+
text: "Only lead agents can update other agents' profiles. Provide no agentId to update your own profile.",
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
structuredContent: {
|
|
130
|
+
yourAgentId: requestInfo.agentId,
|
|
131
|
+
success: false,
|
|
132
|
+
message:
|
|
133
|
+
"Only lead agents can update other agents' profiles. Provide no agentId to update your own profile.",
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Validate target agent exists before proceeding
|
|
139
|
+
const targetAgent = getAgentById(targetAgentId);
|
|
140
|
+
if (!targetAgent) {
|
|
141
|
+
return {
|
|
142
|
+
content: [{ type: "text", text: `Target agent ${targetAgentId} not found.` }],
|
|
143
|
+
structuredContent: {
|
|
144
|
+
yourAgentId: requestInfo.agentId,
|
|
145
|
+
success: false,
|
|
146
|
+
message: `Target agent ${targetAgentId} not found.`,
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
86
152
|
// At least one field must be provided
|
|
87
153
|
if (
|
|
88
154
|
name === undefined &&
|
|
@@ -116,14 +182,14 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
116
182
|
|
|
117
183
|
// Update name if provided
|
|
118
184
|
if (name !== undefined) {
|
|
119
|
-
agent = updateAgentName(
|
|
185
|
+
agent = updateAgentName(targetAgentId, name);
|
|
120
186
|
if (!agent) {
|
|
121
187
|
return {
|
|
122
|
-
content: [{ type: "text", text: "
|
|
188
|
+
content: [{ type: "text", text: "Target agent not found." }],
|
|
123
189
|
structuredContent: {
|
|
124
190
|
yourAgentId: requestInfo.agentId,
|
|
125
191
|
success: false,
|
|
126
|
-
message: "
|
|
192
|
+
message: "Target agent not found.",
|
|
127
193
|
},
|
|
128
194
|
};
|
|
129
195
|
}
|
|
@@ -131,7 +197,7 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
131
197
|
|
|
132
198
|
// Update profile fields if provided
|
|
133
199
|
agent = updateAgentProfile(
|
|
134
|
-
|
|
200
|
+
targetAgentId,
|
|
135
201
|
{
|
|
136
202
|
description,
|
|
137
203
|
role,
|
|
@@ -143,38 +209,41 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
143
209
|
toolsMd,
|
|
144
210
|
},
|
|
145
211
|
{
|
|
146
|
-
changeSource: "self_edit",
|
|
212
|
+
changeSource: isUpdatingSelf ? "self_edit" : "lead_coaching",
|
|
147
213
|
changedByAgentId: requestInfo.agentId,
|
|
148
214
|
},
|
|
149
215
|
);
|
|
150
216
|
|
|
151
|
-
// Write updated files to workspace
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
217
|
+
// Write updated files to workspace only when updating self
|
|
218
|
+
// (remote agent files live on their own container)
|
|
219
|
+
if (isUpdatingSelf) {
|
|
220
|
+
if (soulMd !== undefined) {
|
|
221
|
+
try {
|
|
222
|
+
await Bun.write("/workspace/SOUL.md", soulMd);
|
|
223
|
+
} catch {
|
|
224
|
+
/* ignore */
|
|
225
|
+
}
|
|
157
226
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
227
|
+
if (identityMd !== undefined) {
|
|
228
|
+
try {
|
|
229
|
+
await Bun.write("/workspace/IDENTITY.md", identityMd);
|
|
230
|
+
} catch {
|
|
231
|
+
/* ignore */
|
|
232
|
+
}
|
|
164
233
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
234
|
+
if (setupScript !== undefined) {
|
|
235
|
+
try {
|
|
236
|
+
await Bun.write("/workspace/start-up.sh", `#!/bin/bash\n${setupScript}\n`);
|
|
237
|
+
} catch {
|
|
238
|
+
/* ignore */
|
|
239
|
+
}
|
|
171
240
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
241
|
+
if (toolsMd !== undefined) {
|
|
242
|
+
try {
|
|
243
|
+
await Bun.write("/workspace/TOOLS.md", toolsMd);
|
|
244
|
+
} catch {
|
|
245
|
+
/* ignore */
|
|
246
|
+
}
|
|
178
247
|
}
|
|
179
248
|
}
|
|
180
249
|
|
|
@@ -200,12 +269,15 @@ export const registerUpdateProfileTool = (server: McpServer) => {
|
|
|
200
269
|
if (setupScript !== undefined) updatedFields.push("setupScript");
|
|
201
270
|
if (toolsMd !== undefined) updatedFields.push("toolsMd");
|
|
202
271
|
|
|
272
|
+
const targetLabel = isUpdatingSelf ? "own" : `agent ${targetAgentId}`;
|
|
203
273
|
return {
|
|
204
|
-
content: [
|
|
274
|
+
content: [
|
|
275
|
+
{ type: "text", text: `Updated ${targetLabel} profile: ${updatedFields.join(", ")}.` },
|
|
276
|
+
],
|
|
205
277
|
structuredContent: {
|
|
206
278
|
yourAgentId: requestInfo.agentId,
|
|
207
279
|
success: true,
|
|
208
|
-
message: `Updated profile: ${updatedFields.join(", ")}.`,
|
|
280
|
+
message: `Updated ${targetLabel} profile: ${updatedFields.join(", ")}.`,
|
|
209
281
|
agent,
|
|
210
282
|
},
|
|
211
283
|
};
|
|
@@ -44,6 +44,19 @@ export const registerCreateWorkflowTool = (server: McpServer) => {
|
|
|
44
44
|
.describe(
|
|
45
45
|
"Optional input values resolved at execution time (env vars like VAR_NAME, secrets secret.NAME, or literals)",
|
|
46
46
|
),
|
|
47
|
+
dir: z
|
|
48
|
+
.string()
|
|
49
|
+
.min(1)
|
|
50
|
+
.startsWith("/")
|
|
51
|
+
.optional()
|
|
52
|
+
.describe(
|
|
53
|
+
"Default working directory for all agent-task nodes (absolute path, e.g. /tmp/workspace)",
|
|
54
|
+
),
|
|
55
|
+
vcsRepo: z
|
|
56
|
+
.string()
|
|
57
|
+
.min(1)
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Default VCS repo for all agent-task nodes (e.g. org/repo)"),
|
|
47
60
|
}),
|
|
48
61
|
outputSchema: z.object({
|
|
49
62
|
yourAgentId: z.string().optional(),
|
|
@@ -52,7 +65,10 @@ export const registerCreateWorkflowTool = (server: McpServer) => {
|
|
|
52
65
|
workflow: z.unknown().optional(),
|
|
53
66
|
}),
|
|
54
67
|
},
|
|
55
|
-
async (
|
|
68
|
+
async (
|
|
69
|
+
{ name, description, definition, triggers, cooldown, input, dir, vcsRepo },
|
|
70
|
+
requestInfo,
|
|
71
|
+
) => {
|
|
56
72
|
if (!requestInfo.agentId) {
|
|
57
73
|
return {
|
|
58
74
|
content: [{ type: "text" as const, text: "Agent ID required." }],
|
|
@@ -84,6 +100,8 @@ export const registerCreateWorkflowTool = (server: McpServer) => {
|
|
|
84
100
|
triggers,
|
|
85
101
|
cooldown,
|
|
86
102
|
input,
|
|
103
|
+
dir,
|
|
104
|
+
vcsRepo,
|
|
87
105
|
createdByAgentId: requestInfo.agentId,
|
|
88
106
|
});
|
|
89
107
|
return {
|
|
@@ -33,6 +33,19 @@ export const registerUpdateWorkflowTool = (server: McpServer) => {
|
|
|
33
33
|
.optional()
|
|
34
34
|
.nullable()
|
|
35
35
|
.describe("New input values (null to remove)"),
|
|
36
|
+
dir: z
|
|
37
|
+
.string()
|
|
38
|
+
.min(1)
|
|
39
|
+
.startsWith("/")
|
|
40
|
+
.optional()
|
|
41
|
+
.nullable()
|
|
42
|
+
.describe("Default working directory for all agent-task nodes (null to remove)"),
|
|
43
|
+
vcsRepo: z
|
|
44
|
+
.string()
|
|
45
|
+
.min(1)
|
|
46
|
+
.optional()
|
|
47
|
+
.nullable()
|
|
48
|
+
.describe("Default VCS repo for all agent-task nodes (null to remove)"),
|
|
36
49
|
enabled: z.boolean().optional().describe("Enable or disable the workflow"),
|
|
37
50
|
}),
|
|
38
51
|
outputSchema: z.object({
|
|
@@ -43,7 +56,7 @@ export const registerUpdateWorkflowTool = (server: McpServer) => {
|
|
|
43
56
|
}),
|
|
44
57
|
},
|
|
45
58
|
async (
|
|
46
|
-
{ id, name, description, definition, triggers, cooldown, input, enabled },
|
|
59
|
+
{ id, name, description, definition, triggers, cooldown, input, dir, vcsRepo, enabled },
|
|
47
60
|
requestInfo,
|
|
48
61
|
) => {
|
|
49
62
|
try {
|
|
@@ -85,6 +98,8 @@ export const registerUpdateWorkflowTool = (server: McpServer) => {
|
|
|
85
98
|
triggers,
|
|
86
99
|
cooldown: cooldown === null ? null : cooldown,
|
|
87
100
|
input: input === null ? null : input,
|
|
101
|
+
dir: dir === null ? null : dir,
|
|
102
|
+
vcsRepo: vcsRepo === null ? null : vcsRepo,
|
|
88
103
|
enabled,
|
|
89
104
|
});
|
|
90
105
|
if (!workflow) {
|
package/src/types.ts
CHANGED
|
@@ -543,6 +543,8 @@ export const ActiveSessionSchema = z.object({
|
|
|
543
543
|
triggerType: z.string(),
|
|
544
544
|
inboxMessageId: z.string().nullable(),
|
|
545
545
|
taskDescription: z.string().nullable(),
|
|
546
|
+
runnerSessionId: z.string().nullable(),
|
|
547
|
+
providerSessionId: z.string().nullable(),
|
|
546
548
|
startedAt: z.iso.datetime(),
|
|
547
549
|
lastHeartbeatAt: z.iso.datetime(),
|
|
548
550
|
});
|
|
@@ -608,10 +610,10 @@ export const WorkflowNodeSchema = z.object({
|
|
|
608
610
|
"while node-level outputSchema validates the EXECUTOR's return value ({taskId, taskOutput}).",
|
|
609
611
|
),
|
|
610
612
|
next: z
|
|
611
|
-
.union([z.string(), z.record(z.string(), z.string())])
|
|
613
|
+
.union([z.string(), z.array(z.string()), z.record(z.string(), z.string())])
|
|
612
614
|
.optional()
|
|
613
615
|
.describe(
|
|
614
|
-
"Next node(s): string for simple chaining, or record for port-based routing ({pass: 'a', fail: 'b'})",
|
|
616
|
+
"Next node(s): string for simple chaining, string[] for fan-out to parallel nodes, or record for port-based routing ({pass: 'a', fail: 'b'})",
|
|
615
617
|
),
|
|
616
618
|
validation: StepValidationConfigSchema.optional(),
|
|
617
619
|
retry: RetryPolicySchema.optional(),
|
|
@@ -653,6 +655,15 @@ export type WorkflowEdge = z.infer<typeof WorkflowEdgeSchema>;
|
|
|
653
655
|
|
|
654
656
|
export const WorkflowDefinitionSchema = z.object({
|
|
655
657
|
nodes: z.array(WorkflowNodeSchema).min(1),
|
|
658
|
+
onNodeFailure: z
|
|
659
|
+
.enum(["fail", "continue"])
|
|
660
|
+
.default("fail")
|
|
661
|
+
.describe(
|
|
662
|
+
"Behavior when a node's task fails or is cancelled. " +
|
|
663
|
+
"'fail' (default): mark the entire run as failed. " +
|
|
664
|
+
"'continue': treat the failed node as completed with error output and proceed — " +
|
|
665
|
+
"downstream convergence nodes receive '[FAILED: reason]' and can handle partial results.",
|
|
666
|
+
),
|
|
656
667
|
});
|
|
657
668
|
export type WorkflowDefinition = z.infer<typeof WorkflowDefinitionSchema>;
|
|
658
669
|
|
|
@@ -727,6 +738,8 @@ export const WorkflowSnapshotSchema = z.object({
|
|
|
727
738
|
cooldown: CooldownConfigSchema.optional(),
|
|
728
739
|
input: z.record(z.string(), InputValueSchema).optional(),
|
|
729
740
|
triggerSchema: z.record(z.string(), z.unknown()).optional(),
|
|
741
|
+
dir: z.string().min(1).startsWith("/").optional(),
|
|
742
|
+
vcsRepo: z.string().min(1).optional(),
|
|
730
743
|
enabled: z.boolean(),
|
|
731
744
|
});
|
|
732
745
|
export type WorkflowSnapshot = z.infer<typeof WorkflowSnapshotSchema>;
|
|
@@ -743,6 +756,8 @@ export const WorkflowSchema = z.object({
|
|
|
743
756
|
cooldown: CooldownConfigSchema.optional(),
|
|
744
757
|
input: z.record(z.string(), InputValueSchema).optional(),
|
|
745
758
|
triggerSchema: z.record(z.string(), z.unknown()).optional(),
|
|
759
|
+
dir: z.string().min(1).startsWith("/").optional(),
|
|
760
|
+
vcsRepo: z.string().min(1).optional(),
|
|
746
761
|
createdByAgentId: z.string().uuid().optional(),
|
|
747
762
|
createdAt: z.string(),
|
|
748
763
|
lastUpdatedAt: z.string(),
|
|
@@ -816,3 +831,95 @@ export const WorkflowRunStepSchema = z.object({
|
|
|
816
831
|
nextPort: z.string().optional(),
|
|
817
832
|
});
|
|
818
833
|
export type WorkflowRunStep = z.infer<typeof WorkflowRunStepSchema>;
|
|
834
|
+
|
|
835
|
+
// ============================================================================
|
|
836
|
+
// Prompt Template Types
|
|
837
|
+
// ============================================================================
|
|
838
|
+
|
|
839
|
+
export const PromptTemplateScopeSchema = z.enum(["global", "agent", "repo"]);
|
|
840
|
+
export const PromptTemplateStateSchema = z.enum([
|
|
841
|
+
"enabled",
|
|
842
|
+
"default_prompt_fallback",
|
|
843
|
+
"skip_event",
|
|
844
|
+
]);
|
|
845
|
+
|
|
846
|
+
export const PromptTemplateSchema = z.object({
|
|
847
|
+
id: z.string(),
|
|
848
|
+
eventType: z.string(),
|
|
849
|
+
scope: PromptTemplateScopeSchema,
|
|
850
|
+
scopeId: z.string().nullable(),
|
|
851
|
+
state: PromptTemplateStateSchema,
|
|
852
|
+
body: z.string(),
|
|
853
|
+
isDefault: z.boolean(),
|
|
854
|
+
version: z.number(),
|
|
855
|
+
createdBy: z.string().nullable(),
|
|
856
|
+
createdAt: z.string(),
|
|
857
|
+
updatedAt: z.string(),
|
|
858
|
+
});
|
|
859
|
+
export type PromptTemplate = z.infer<typeof PromptTemplateSchema>;
|
|
860
|
+
|
|
861
|
+
export const PromptTemplateHistorySchema = z.object({
|
|
862
|
+
id: z.string(),
|
|
863
|
+
templateId: z.string(),
|
|
864
|
+
version: z.number(),
|
|
865
|
+
body: z.string(),
|
|
866
|
+
state: z.string(),
|
|
867
|
+
changedBy: z.string().nullable(),
|
|
868
|
+
changedAt: z.string(),
|
|
869
|
+
changeReason: z.string().nullable(),
|
|
870
|
+
});
|
|
871
|
+
export type PromptTemplateHistory = z.infer<typeof PromptTemplateHistorySchema>;
|
|
872
|
+
|
|
873
|
+
// ============================================================================
|
|
874
|
+
// Skill Types
|
|
875
|
+
// ============================================================================
|
|
876
|
+
|
|
877
|
+
export const SkillTypeSchema = z.enum(["remote", "personal"]);
|
|
878
|
+
export type SkillType = z.infer<typeof SkillTypeSchema>;
|
|
879
|
+
|
|
880
|
+
export const SkillScopeSchema = z.enum(["global", "swarm", "agent"]);
|
|
881
|
+
export type SkillScope = z.infer<typeof SkillScopeSchema>;
|
|
882
|
+
|
|
883
|
+
export const SkillSchema = z.object({
|
|
884
|
+
id: z.string(),
|
|
885
|
+
name: z.string(),
|
|
886
|
+
description: z.string(),
|
|
887
|
+
content: z.string(),
|
|
888
|
+
type: SkillTypeSchema,
|
|
889
|
+
scope: SkillScopeSchema,
|
|
890
|
+
ownerAgentId: z.string().nullable(),
|
|
891
|
+
sourceUrl: z.string().nullable(),
|
|
892
|
+
sourceRepo: z.string().nullable(),
|
|
893
|
+
sourcePath: z.string().nullable(),
|
|
894
|
+
sourceBranch: z.string(),
|
|
895
|
+
sourceHash: z.string().nullable(),
|
|
896
|
+
isComplex: z.boolean(),
|
|
897
|
+
allowedTools: z.string().nullable(),
|
|
898
|
+
model: z.string().nullable(),
|
|
899
|
+
effort: z.string().nullable(),
|
|
900
|
+
context: z.string().nullable(),
|
|
901
|
+
agent: z.string().nullable(),
|
|
902
|
+
disableModelInvocation: z.boolean(),
|
|
903
|
+
userInvocable: z.boolean(),
|
|
904
|
+
version: z.number(),
|
|
905
|
+
isEnabled: z.boolean(),
|
|
906
|
+
createdAt: z.string(),
|
|
907
|
+
lastUpdatedAt: z.string(),
|
|
908
|
+
lastFetchedAt: z.string().nullable(),
|
|
909
|
+
});
|
|
910
|
+
export type Skill = z.infer<typeof SkillSchema>;
|
|
911
|
+
|
|
912
|
+
export const AgentSkillSchema = z.object({
|
|
913
|
+
id: z.string(),
|
|
914
|
+
agentId: z.string(),
|
|
915
|
+
skillId: z.string(),
|
|
916
|
+
isActive: z.boolean(),
|
|
917
|
+
installedAt: z.string(),
|
|
918
|
+
});
|
|
919
|
+
export type AgentSkill = z.infer<typeof AgentSkillSchema>;
|
|
920
|
+
|
|
921
|
+
export const SkillWithInstallInfoSchema = SkillSchema.extend({
|
|
922
|
+
isActive: z.boolean(),
|
|
923
|
+
installedAt: z.string(),
|
|
924
|
+
});
|
|
925
|
+
export type SkillWithInstallInfo = z.infer<typeof SkillWithInstallInfoSchema>;
|