@desplega.ai/agent-swarm 1.20.0 → 1.49.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/.claude/settings.json +84 -0
- package/.claude/settings.local.json +3 -1
- package/.entire/settings.json +4 -0
- package/.env.docker.example +40 -23
- package/.env.example +39 -1
- package/.github/ISSUE_TEMPLATE/bug_report.yml +78 -0
- package/.github/ISSUE_TEMPLATE/community-template.yml +77 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +60 -0
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +29 -0
- package/.github/workflows/ci.yml +3 -27
- package/.github/workflows/docker-and-deploy.yml +20 -5
- package/.github/workflows/merge-gate.yml +233 -0
- package/.opencode/plugins/entire.ts +133 -0
- package/.superset/config.json +6 -0
- package/.wts-setup.ts +103 -34
- package/CHANGELOG.md +447 -0
- package/CLAUDE.md +422 -5
- package/CONTRIBUTING.md +46 -1
- package/DEPLOYMENT.md +26 -9
- package/Dockerfile +15 -7
- package/Dockerfile.worker +99 -67
- package/MCP.md +452 -17
- package/README.md +271 -169
- package/api-entrypoint.sh +56 -0
- package/depot.json +1 -0
- package/docker-compose.example.yml +194 -3
- package/docker-compose.local.yml +119 -0
- package/docker-entrypoint.sh +393 -113
- package/docs-site/app/api/search/route.ts +4 -0
- package/docs-site/app/docs/[[...slug]]/page.tsx +87 -0
- package/docs-site/app/docs/layout.tsx +12 -0
- package/docs-site/app/globals.css +24 -0
- package/docs-site/app/layout.config.tsx +34 -0
- package/docs-site/app/layout.tsx +119 -0
- package/docs-site/app/llms-full.txt/route.ts +11 -0
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +24 -0
- package/docs-site/app/llms.txt/route.ts +8 -0
- package/docs-site/app/page.tsx +5 -0
- package/docs-site/app/robots.ts +13 -0
- package/docs-site/app/sitemap.ts +37 -0
- package/docs-site/components/api-page.client.tsx +4 -0
- package/docs-site/components/api-page.tsx +7 -0
- package/docs-site/components/mdx/mermaid.tsx +55 -0
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +117 -0
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +77 -0
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +96 -0
- package/docs-site/content/docs/(documentation)/architecture/meta.json +4 -0
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +172 -0
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +98 -0
- package/docs-site/content/docs/(documentation)/concepts/meta.json +4 -0
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +136 -0
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +104 -0
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +148 -0
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +209 -0
- package/docs-site/content/docs/(documentation)/contributing.mdx +158 -0
- package/docs-site/content/docs/(documentation)/getting-started.mdx +157 -0
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +79 -0
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +171 -0
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +81 -0
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +93 -0
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +98 -0
- package/docs-site/content/docs/(documentation)/guides/meta.json +13 -0
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +52 -0
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +179 -0
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +154 -0
- package/docs-site/content/docs/(documentation)/index.mdx +65 -0
- package/docs-site/content/docs/(documentation)/meta.json +19 -0
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +241 -0
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +205 -0
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +449 -0
- package/docs-site/content/docs/(documentation)/reference/meta.json +4 -0
- package/docs-site/content/docs/api-reference/active-sessions.mdx +9 -0
- package/docs-site/content/docs/api-reference/agents.mdx +9 -0
- package/docs-site/content/docs/api-reference/channels.mdx +9 -0
- package/docs-site/content/docs/api-reference/config.mdx +9 -0
- package/docs-site/content/docs/api-reference/debug.mdx +9 -0
- package/docs-site/content/docs/api-reference/ecosystem.mdx +9 -0
- package/docs-site/content/docs/api-reference/epics.mdx +9 -0
- package/docs-site/content/docs/api-reference/index.mdx +32 -0
- package/docs-site/content/docs/api-reference/memory.mdx +9 -0
- package/docs-site/content/docs/api-reference/meta.json +25 -0
- package/docs-site/content/docs/api-reference/poll.mdx +9 -0
- package/docs-site/content/docs/api-reference/repos.mdx +9 -0
- package/docs-site/content/docs/api-reference/schedules.mdx +9 -0
- package/docs-site/content/docs/api-reference/session-data.mdx +9 -0
- package/docs-site/content/docs/api-reference/stats.mdx +9 -0
- package/docs-site/content/docs/api-reference/tasks.mdx +9 -0
- package/docs-site/content/docs/api-reference/trackers.mdx +9 -0
- package/docs-site/content/docs/api-reference/webhooks.mdx +9 -0
- package/docs-site/content/docs/api-reference/workflows.mdx +9 -0
- package/docs-site/content/docs/meta.json +3 -0
- package/docs-site/lib/get-llm-text.ts +10 -0
- package/docs-site/lib/openapi.ts +23 -0
- package/docs-site/lib/source.ts +8 -0
- package/docs-site/mdx-components.tsx +13 -0
- package/docs-site/next.config.mjs +29 -0
- package/docs-site/package.json +35 -0
- package/docs-site/pnpm-lock.yaml +5407 -0
- package/docs-site/postcss.config.mjs +8 -0
- package/docs-site/scripts/generate-docs.ts +171 -0
- package/docs-site/source.config.ts +17 -0
- package/docs-site/tsconfig.json +46 -0
- package/ecosystem.config.cjs +4 -4
- package/landing/next.config.ts +14 -0
- package/landing/package.json +31 -0
- package/landing/pnpm-lock.yaml +1091 -0
- package/landing/postcss.config.mjs +8 -0
- 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 +30 -0
- package/landing/public/omghost-openfort.svg +9 -0
- package/landing/src/app/actions/waitlist.ts +25 -0
- package/landing/src/app/blog/openfort-hackathon/page.tsx +863 -0
- package/landing/src/app/blog/page.tsx +162 -0
- package/landing/src/app/blog/swarm-metrics/page.tsx +685 -0
- package/landing/src/app/examples/page.tsx +174 -0
- package/landing/src/app/examples/x402/page.tsx +456 -0
- package/landing/src/app/globals.css +122 -0
- package/landing/src/app/layout.tsx +134 -0
- package/landing/src/app/page.tsx +27 -0
- package/landing/src/app/robots.ts +13 -0
- package/landing/src/app/sitemap.ts +44 -0
- package/landing/src/components/architecture.tsx +163 -0
- package/landing/src/components/cta.tsx +52 -0
- package/landing/src/components/features.tsx +160 -0
- package/landing/src/components/footer.tsx +100 -0
- package/landing/src/components/hero.tsx +217 -0
- package/landing/src/components/how-it-works.tsx +165 -0
- package/landing/src/components/navbar.tsx +147 -0
- package/landing/src/components/waitlist.tsx +110 -0
- package/landing/src/components/why-choose.tsx +149 -0
- package/landing/src/components/workshops.tsx +328 -0
- package/landing/src/lib/utils.ts +6 -0
- package/landing/tsconfig.json +41 -0
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +154 -0
- package/new-ui/CLAUDE.md +92 -0
- package/new-ui/README.md +73 -0
- package/new-ui/biome.json +42 -0
- package/new-ui/components.json +21 -0
- package/new-ui/index.html +25 -0
- package/new-ui/package.json +49 -0
- package/new-ui/pnpm-lock.yaml +4845 -0
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +814 -0
- package/new-ui/src/api/hooks/index.ts +64 -0
- package/new-ui/src/api/hooks/use-agents.ts +58 -0
- package/new-ui/src/api/hooks/use-channels.ts +115 -0
- package/new-ui/src/api/hooks/use-config-api.ts +46 -0
- package/new-ui/src/api/hooks/use-costs.ts +122 -0
- package/new-ui/src/api/hooks/use-db-query.ts +29 -0
- package/new-ui/src/api/hooks/use-epics.ts +75 -0
- package/new-ui/src/api/hooks/use-repos.ts +61 -0
- package/new-ui/src/api/hooks/use-schedules.ts +81 -0
- package/new-ui/src/api/hooks/use-services.ts +16 -0
- package/new-ui/src/api/hooks/use-stats.ts +27 -0
- package/new-ui/src/api/hooks/use-tasks.ts +89 -0
- package/new-ui/src/api/hooks/use-workflows.ts +109 -0
- package/{ui/src/types/api.ts → new-ui/src/api/types.ts} +236 -10
- package/new-ui/src/app/App.tsx +13 -0
- package/new-ui/src/app/providers.tsx +32 -0
- package/new-ui/src/app/router.tsx +52 -0
- package/new-ui/src/components/layout/app-header.tsx +47 -0
- package/new-ui/src/components/layout/app-sidebar.tsx +128 -0
- package/new-ui/src/components/layout/breadcrumbs.tsx +57 -0
- package/new-ui/src/components/layout/config-guard.tsx +22 -0
- package/new-ui/src/components/layout/root-layout.tsx +40 -0
- package/new-ui/src/components/layout/swarm-switcher.tsx +85 -0
- package/new-ui/src/components/shared/command-menu.tsx +131 -0
- package/new-ui/src/components/shared/data-grid.tsx +141 -0
- package/new-ui/src/components/shared/empty-state.tsx +24 -0
- package/new-ui/src/components/shared/error-boundary.tsx +72 -0
- package/new-ui/src/components/shared/json-viewer.tsx +47 -0
- package/new-ui/src/components/shared/name-connection-modal.tsx +99 -0
- package/new-ui/src/components/shared/page-skeleton.tsx +16 -0
- package/new-ui/src/components/shared/session-log-viewer.tsx +364 -0
- package/new-ui/src/components/shared/stats-bar.tsx +132 -0
- package/new-ui/src/components/shared/status-badge.tsx +131 -0
- package/new-ui/src/components/shared/usage-summary.tsx +179 -0
- package/new-ui/src/components/ui/alert-dialog.tsx +176 -0
- package/new-ui/src/components/ui/alert.tsx +60 -0
- package/new-ui/src/components/ui/avatar.tsx +96 -0
- package/new-ui/src/components/ui/badge.tsx +46 -0
- package/new-ui/src/components/ui/button.tsx +62 -0
- package/new-ui/src/components/ui/card.tsx +75 -0
- package/new-ui/src/components/ui/command.tsx +160 -0
- package/new-ui/src/components/ui/dialog.tsx +143 -0
- package/new-ui/src/components/ui/dropdown-menu.tsx +226 -0
- package/new-ui/src/components/ui/input.tsx +21 -0
- package/new-ui/src/components/ui/label.tsx +19 -0
- package/new-ui/src/components/ui/progress.tsx +26 -0
- package/new-ui/src/components/ui/scroll-area.tsx +54 -0
- package/new-ui/src/components/ui/select.tsx +175 -0
- package/new-ui/src/components/ui/separator.tsx +28 -0
- package/new-ui/src/components/ui/sheet.tsx +132 -0
- package/new-ui/src/components/ui/sidebar.tsx +691 -0
- package/new-ui/src/components/ui/skeleton.tsx +13 -0
- package/new-ui/src/components/ui/sonner.tsx +35 -0
- package/new-ui/src/components/ui/switch.tsx +33 -0
- package/new-ui/src/components/ui/table.tsx +92 -0
- package/new-ui/src/components/ui/tabs.tsx +79 -0
- package/new-ui/src/components/ui/textarea.tsx +18 -0
- package/new-ui/src/components/ui/tooltip.tsx +51 -0
- package/new-ui/src/components/workflows/action-node.tsx +53 -0
- package/new-ui/src/components/workflows/condition-node.tsx +50 -0
- package/new-ui/src/components/workflows/graph-utils.ts +124 -0
- package/new-ui/src/components/workflows/json-tree.tsx +189 -0
- package/new-ui/src/components/workflows/node-styles.ts +10 -0
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +87 -0
- package/new-ui/src/components/workflows/trigger-node.tsx +41 -0
- package/new-ui/src/components/workflows/workflow-graph.tsx +65 -0
- package/{ui/src/hooks/useAutoScroll.ts → new-ui/src/hooks/use-auto-scroll.ts} +0 -1
- package/new-ui/src/hooks/use-config.ts +203 -0
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +41 -0
- package/new-ui/src/hooks/use-mobile.ts +19 -0
- package/new-ui/src/hooks/use-theme.ts +60 -0
- package/new-ui/src/lib/config.ts +188 -0
- package/new-ui/src/lib/slugs.ts +71 -0
- package/{ui → new-ui}/src/lib/utils.ts +32 -0
- package/new-ui/src/main.tsx +11 -0
- package/new-ui/src/pages/agents/[id]/page.tsx +492 -0
- package/new-ui/src/pages/agents/page.tsx +134 -0
- package/new-ui/src/pages/chat/page.tsx +674 -0
- package/new-ui/src/pages/config/page.tsx +1109 -0
- package/new-ui/src/pages/dashboard/page.tsx +454 -0
- package/new-ui/src/pages/debug/page.tsx +275 -0
- package/new-ui/src/pages/epics/[id]/page.tsx +809 -0
- package/new-ui/src/pages/epics/page.tsx +321 -0
- package/new-ui/src/pages/not-found/page.tsx +18 -0
- package/new-ui/src/pages/repos/page.tsx +369 -0
- package/new-ui/src/pages/schedules/[id]/page.tsx +664 -0
- package/new-ui/src/pages/schedules/page.tsx +477 -0
- package/new-ui/src/pages/services/page.tsx +128 -0
- package/new-ui/src/pages/tasks/[id]/page.tsx +670 -0
- package/new-ui/src/pages/tasks/page.tsx +592 -0
- package/new-ui/src/pages/usage/page.tsx +195 -0
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +363 -0
- package/new-ui/src/pages/workflows/[id]/page.tsx +417 -0
- package/new-ui/src/pages/workflows/page.tsx +266 -0
- package/new-ui/src/styles/ag-grid.css +36 -0
- package/new-ui/src/styles/globals.css +213 -0
- package/new-ui/test-results/.last-run.json +4 -0
- package/{ui/tsconfig.json → new-ui/tsconfig.app.json} +7 -4
- package/new-ui/tsconfig.json +4 -0
- package/new-ui/tsconfig.node.json +26 -0
- package/new-ui/vercel.json +4 -0
- package/new-ui/vite.config.ts +28 -0
- package/openapi.json +4436 -0
- package/package.json +31 -7
- package/plugin/build-pi-skills.ts +233 -0
- package/plugin/commands/close-issue.md +7 -3
- package/plugin/commands/create-pr.md +18 -12
- package/plugin/commands/implement-issue.md +7 -3
- package/plugin/commands/respond-github.md +8 -4
- package/plugin/commands/review-pr.md +44 -10
- package/plugin/commands/start-leader.md +1 -3
- package/plugin/commands/start-worker.md +1 -3
- package/plugin/commands/work-on-task.md +22 -3
- package/plugin/pi-skills/close-issue/SKILL.md +90 -0
- package/plugin/pi-skills/create-pr/SKILL.md +99 -0
- package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
- package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
- package/plugin/pi-skills/respond-github/SKILL.md +98 -0
- package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
- package/plugin/pi-skills/review-pr/SKILL.md +261 -0
- package/plugin/pi-skills/start-leader/SKILL.md +121 -0
- package/plugin/pi-skills/start-worker/SKILL.md +60 -0
- package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
- package/plugin/pi-skills/todos/SKILL.md +66 -0
- package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
- package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
- package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
- package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
- package/plugin/skills/artifacts/examples/static-report.sh +17 -0
- package/plugin/skills/artifacts/skill.md +71 -0
- package/prek.toml +75 -0
- package/scripts/check-db-boundary.sh +60 -0
- package/scripts/e2e-docker-provider.ts +820 -0
- package/scripts/e2e-io-schemas-test.ts +807 -0
- package/scripts/e2e-provider-test.ts +220 -0
- package/scripts/e2e-workflow-redesign.sh +229 -0
- package/scripts/e2e-workflow-test.sh +285 -0
- package/scripts/e2e-workflow-test.ts +857 -0
- package/scripts/generate-openapi.ts +26 -0
- package/scripts/measure-tool-tokens.ts +118 -0
- package/scripts/x402-e2e-test.ts +195 -0
- package/scripts/x402-test-server.ts +236 -0
- package/scripts/x402-testnet-e2e.ts +668 -0
- package/slack-manifest.json +17 -0
- package/src/agentmail/app.ts +65 -0
- package/src/agentmail/handlers.ts +207 -0
- package/src/agentmail/index.ts +9 -0
- package/src/agentmail/types.ts +51 -0
- package/src/artifact-sdk/browser-sdk.ts +30 -0
- package/src/artifact-sdk/index.ts +2 -0
- package/src/artifact-sdk/localtunnel.d.ts +20 -0
- package/src/artifact-sdk/port.ts +12 -0
- package/src/artifact-sdk/server.ts +156 -0
- package/src/artifact-sdk/tunnel.ts +19 -0
- package/src/be/chunking.ts +193 -0
- package/src/be/db-queries/oauth.ts +90 -0
- package/src/be/db-queries/tracker.ts +182 -0
- package/src/be/db.ts +2729 -770
- package/src/be/embedding.ts +80 -0
- package/src/be/migrations/001_initial.sql +409 -0
- package/src/be/migrations/002_one_time_schedules.sql +59 -0
- package/src/be/migrations/003_workflows.sql +51 -0
- package/src/be/migrations/004_workflow_source.sql +81 -0
- package/src/be/migrations/005_epic_next_steps.sql +2 -0
- package/src/be/migrations/006_vcs_provider.sql +94 -0
- package/src/be/migrations/007_task_dir.sql +2 -0
- package/src/be/migrations/008_workflow_redesign.sql +85 -0
- package/src/be/migrations/009_tracker_integration.sql +144 -0
- package/src/be/migrations/010_step_diagnostics.sql +1 -0
- package/src/be/migrations/011_step_next_port.sql +1 -0
- package/src/be/migrations/012_trigger_schema.sql +1 -0
- package/src/be/migrations/013_task_output_schema.sql +2 -0
- package/src/be/migrations/runner.ts +188 -0
- package/src/cli.tsx +231 -299
- package/src/commands/artifact.ts +241 -0
- package/src/commands/onboard/compose-generator.ts +169 -0
- package/src/commands/onboard/env-generator.ts +79 -0
- package/src/commands/onboard/manifest.ts +37 -0
- package/src/commands/onboard/presets.ts +85 -0
- package/src/commands/onboard/service-names.ts +47 -0
- package/src/commands/onboard/steps/core-credentials.tsx +111 -0
- package/src/commands/onboard/steps/custom-templates.tsx +168 -0
- package/src/commands/onboard/steps/generate.tsx +154 -0
- package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
- package/src/commands/onboard/steps/harness.tsx +21 -0
- package/src/commands/onboard/steps/health-check.tsx +171 -0
- package/src/commands/onboard/steps/integration-github.tsx +105 -0
- package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
- package/src/commands/onboard/steps/integration-menu.tsx +58 -0
- package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
- package/src/commands/onboard/steps/integration-slack.tsx +165 -0
- package/src/commands/onboard/steps/post-connect.tsx +145 -0
- package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
- package/src/commands/onboard/steps/post-task.tsx +103 -0
- package/src/commands/onboard/steps/prereq-check.tsx +178 -0
- package/src/commands/onboard/steps/review.tsx +82 -0
- package/src/commands/onboard/steps/start.tsx +97 -0
- package/src/commands/onboard/templates.ts +34 -0
- package/src/commands/onboard/types.ts +259 -0
- package/src/commands/onboard.tsx +425 -0
- package/src/commands/runner.ts +1376 -559
- package/src/commands/setup.tsx +23 -38
- package/src/commands/shared/client-config.ts +41 -0
- package/src/github/app.ts +8 -0
- package/src/github/handlers.ts +93 -75
- package/src/github/index.ts +1 -0
- package/src/github/types.ts +1 -0
- package/src/gitlab/auth.ts +63 -0
- package/src/gitlab/handlers.ts +327 -0
- package/src/gitlab/index.ts +19 -0
- package/src/gitlab/reactions.ts +104 -0
- package/src/gitlab/types.ts +130 -0
- package/src/heartbeat/heartbeat.ts +425 -0
- package/src/heartbeat/index.ts +1 -0
- package/src/hooks/hook.ts +555 -4
- package/src/hooks/tool-loop-detection.test.ts +158 -0
- package/src/hooks/tool-loop-detection.ts +167 -0
- package/src/http/active-sessions.ts +172 -0
- package/src/http/agents.ts +328 -0
- package/src/http/config.ts +191 -0
- package/src/http/core.ts +309 -0
- package/src/http/db-query.ts +91 -0
- package/src/http/ecosystem.ts +63 -0
- package/src/http/epics.ts +460 -0
- package/src/http/index.ts +213 -0
- package/src/http/mcp.ts +77 -0
- package/src/http/memory.ts +168 -0
- package/src/http/openapi.ts +109 -0
- package/src/http/poll.ts +178 -0
- package/src/http/repos.ts +195 -0
- package/src/http/route-def.ts +123 -0
- package/src/http/schedules.ts +391 -0
- package/src/http/session-data.ts +241 -0
- package/src/http/stats.ts +174 -0
- package/src/http/tasks.ts +468 -0
- package/src/http/trackers/index.ts +10 -0
- package/src/http/trackers/linear.ts +187 -0
- package/src/http/types.ts +12 -0
- package/src/http/utils.ts +87 -0
- package/src/http/webhooks.ts +432 -0
- package/src/http/workflows.ts +522 -0
- package/src/http.ts +1 -1890
- package/src/linear/README.md +65 -0
- package/src/linear/app.ts +48 -0
- package/src/linear/client.ts +18 -0
- package/src/linear/index.ts +1 -0
- package/src/linear/oauth.ts +35 -0
- package/src/linear/outbound.ts +212 -0
- package/src/linear/sync.ts +543 -0
- package/src/linear/types.ts +7 -0
- package/src/linear/webhook.ts +104 -0
- package/src/oauth/README.md +66 -0
- package/src/oauth/index.ts +6 -0
- package/src/oauth/wrapper.ts +204 -0
- package/src/prompts/base-prompt.ts +366 -24
- package/src/prompts/defaults.ts +196 -0
- package/src/providers/claude-adapter.ts +429 -0
- package/src/providers/index.ts +24 -0
- package/src/providers/pi-mono-adapter.ts +442 -0
- package/src/providers/pi-mono-extension.ts +620 -0
- package/src/providers/pi-mono-mcp-client.ts +124 -0
- package/src/providers/types.ts +75 -0
- package/src/scheduler/scheduler.test.ts +2 -0
- package/src/scheduler/scheduler.ts +186 -29
- package/src/server.ts +82 -6
- package/src/slack/HEURISTICS.md +105 -0
- package/src/slack/actions.ts +133 -0
- package/src/slack/app.ts +7 -0
- package/src/slack/assistant.ts +115 -0
- package/src/slack/blocks.ts +233 -0
- package/src/slack/commands.ts +31 -17
- package/src/slack/files.ts +1 -1
- package/src/slack/handlers.test.ts +114 -1
- package/src/slack/handlers.ts +212 -52
- package/src/slack/responses.ts +120 -67
- package/src/slack/router.ts +17 -99
- package/src/slack/thread-buffer.ts +213 -0
- package/src/slack/watcher.ts +119 -4
- package/src/tests/agent-activity.test.ts +247 -0
- package/src/tests/agentmail-filters.test.ts +97 -0
- package/src/tests/artifact-sdk.test.ts +800 -0
- package/src/tests/base-prompt.test.ts +264 -0
- package/src/tests/build-pi-skills.test.ts +127 -0
- package/src/tests/claude-adapter.test.ts +126 -0
- package/src/tests/context-versioning.test.ts +425 -0
- package/src/tests/db-queries-oauth.test.ts +197 -0
- package/src/tests/db-queries-tracker.test.ts +230 -0
- package/src/tests/epics.test.ts +3 -3
- package/src/tests/error-tracker.test.ts +368 -0
- package/src/tests/fetch-resolved-env.test.ts +167 -0
- package/src/tests/generate-default-claude-md.test.ts +9 -1
- package/src/tests/generate-identity-templates.test.ts +124 -0
- package/src/tests/gitlab-auth.test.ts +109 -0
- package/src/tests/gitlab-handlers.test.ts +691 -0
- package/src/tests/gitlab-vcs-db.test.ts +177 -0
- package/src/tests/heartbeat.test.ts +363 -0
- package/src/tests/http-api-integration.test.ts +1698 -0
- package/src/tests/linear-outbound-sync.test.ts +200 -0
- package/src/tests/linear-webhook.test.ts +402 -0
- package/src/tests/match-route.test.ts +187 -0
- package/src/tests/memory.test.ts +737 -0
- package/src/tests/migration-runner-regressions.test.ts +86 -0
- package/src/tests/model-control.test.ts +338 -0
- package/src/tests/oauth-wrapper.test.ts +147 -0
- package/src/tests/onboard-compose.test.ts +138 -0
- package/src/tests/onboard-env.test.ts +174 -0
- package/src/tests/onboard-manifest.test.ts +137 -0
- package/src/tests/pi-mono-adapter.test.ts +234 -0
- package/src/tests/progress-dedup.test.ts +98 -0
- package/src/tests/provider-adapter.test.ts +122 -0
- package/src/tests/provider-command-format.test.ts +98 -0
- package/src/tests/reload-config.test.ts +170 -0
- package/src/tests/runner-polling-api.test.ts +25 -20
- package/src/tests/scheduled-tasks.test.ts +104 -0
- package/src/tests/scheduler-backoff.test.ts +166 -0
- package/src/tests/self-improvement.test.ts +540 -0
- package/src/tests/session-attach.test.ts +536 -0
- package/src/tests/session-costs.test.ts +267 -1
- package/src/tests/slack-actions.test.ts +133 -0
- package/src/tests/slack-assistant.test.ts +136 -0
- package/src/tests/slack-blocks.test.ts +246 -0
- package/src/tests/slack-metadata-inheritance.test.ts +243 -0
- package/src/tests/slack-queue-offline.test.ts +174 -0
- package/src/tests/slack-router.test.ts +181 -0
- package/src/tests/slack-thread-buffer.test.ts +305 -0
- package/src/tests/slack-thread-followups.test.ts +298 -0
- package/src/tests/slack-watcher.test.ts +101 -0
- package/src/tests/structured-output.test.ts +311 -0
- package/src/tests/swarm-repos.test.ts +198 -0
- package/src/tests/task-cancellation.test.ts +6 -4
- package/src/tests/task-working-dir.test.ts +176 -0
- package/src/tests/template-fetch.test.ts +490 -0
- package/src/tests/tool-annotations.test.ts +371 -0
- package/src/tests/tracker-tools.test.ts +184 -0
- package/src/tests/update-profile-api.test.ts +143 -3
- package/src/tests/validation-adapters.test.ts +86 -0
- package/src/tests/vcs-provider.test.ts +27 -0
- package/src/tests/workflow-agent-task.test.ts +196 -0
- package/src/tests/workflow-async-v2.test.ts +386 -0
- package/src/tests/workflow-convergence.test.ts +541 -0
- package/src/tests/workflow-definition-validation.test.ts +290 -0
- package/src/tests/workflow-engine-v2.test.ts +691 -0
- package/src/tests/workflow-executors.test.ts +736 -0
- package/src/tests/workflow-http-v2.test.ts +599 -0
- package/src/tests/workflow-integration-io.test.ts +902 -0
- package/src/tests/workflow-io-schemas.test.ts +624 -0
- package/src/tests/workflow-registry.test.ts +592 -0
- package/src/tests/workflow-retry-v2.test.ts +401 -0
- package/src/tests/workflow-retry-validation.test.ts +282 -0
- package/src/tests/workflow-template.test.ts +288 -0
- package/src/tests/workflow-trigger-schema.test.ts +359 -0
- package/src/tests/workflow-triggers-v2.test.ts +264 -0
- package/src/tests/workflow-versions.test.ts +208 -0
- package/src/tests/x402-client.test.ts +117 -0
- package/src/tests/x402-config.test.ts +182 -0
- package/src/tests/x402-spending-tracker.test.ts +185 -0
- package/src/tools/cancel-task.ts +2 -0
- package/src/tools/context-diff.ts +171 -0
- package/src/tools/context-history.ts +138 -0
- package/src/tools/create-channel.ts +1 -0
- package/src/tools/db-query.ts +78 -0
- package/src/tools/delete-channel.ts +132 -0
- package/src/tools/epics/assign-task-to-epic.ts +1 -0
- package/src/tools/epics/create-epic.ts +3 -2
- package/src/tools/epics/delete-epic.ts +2 -0
- package/src/tools/epics/get-epic-details.ts +2 -0
- package/src/tools/epics/list-epics.ts +2 -0
- package/src/tools/epics/unassign-task-from-epic.ts +1 -0
- package/src/tools/epics/update-epic.ts +7 -4
- package/src/tools/get-swarm.ts +2 -0
- package/src/tools/get-task-details.ts +2 -0
- package/src/tools/get-tasks.ts +27 -1
- package/src/tools/inject-learning.ts +106 -0
- package/src/tools/join-swarm.ts +17 -7
- package/src/tools/list-channels.ts +2 -0
- package/src/tools/list-services.ts +2 -0
- package/src/tools/memory-get.ts +56 -0
- package/src/tools/memory-search.ts +131 -0
- package/src/tools/my-agent-info.ts +2 -0
- package/src/tools/poll-task.ts +2 -20
- package/src/tools/post-message.ts +1 -0
- package/src/tools/read-messages.ts +2 -0
- package/src/tools/register-agentmail-inbox.ts +166 -0
- package/src/tools/register-service.ts +2 -0
- package/src/tools/schedules/create-schedule.ts +134 -24
- package/src/tools/schedules/delete-schedule.ts +2 -0
- package/src/tools/schedules/list-schedules.ts +20 -4
- package/src/tools/schedules/run-schedule-now.ts +1 -0
- package/src/tools/schedules/update-schedule.ts +49 -17
- package/src/tools/send-task.ts +132 -10
- package/src/tools/slack-download-file.ts +4 -2
- package/src/tools/slack-list-channels.ts +2 -0
- package/src/tools/slack-post.ts +2 -0
- package/src/tools/slack-read.ts +2 -0
- package/src/tools/slack-reply.ts +2 -0
- package/src/tools/slack-upload-file.ts +2 -0
- package/src/tools/store-progress.ts +187 -4
- package/src/tools/swarm-config/delete-config.ts +87 -0
- package/src/tools/swarm-config/get-config.ts +108 -0
- package/src/tools/swarm-config/index.ts +4 -0
- package/src/tools/swarm-config/list-config.ts +99 -0
- package/src/tools/swarm-config/set-config.ts +118 -0
- package/src/tools/task-action.ts +30 -5
- package/src/tools/task-dedup.ts +97 -0
- package/src/tools/tool-config.ts +117 -0
- package/src/tools/tracker/index.ts +6 -0
- package/src/tools/tracker/tracker-link-epic.ts +64 -0
- package/src/tools/tracker/tracker-link-task.ts +64 -0
- package/src/tools/tracker/tracker-map-agent.ts +57 -0
- package/src/tools/tracker/tracker-status.ts +56 -0
- package/src/tools/tracker/tracker-sync-status.ts +42 -0
- package/src/tools/tracker/tracker-unlink.ts +41 -0
- package/src/tools/unregister-service.ts +2 -0
- package/src/tools/update-profile.ts +93 -10
- package/src/tools/update-service-status.ts +2 -0
- package/src/tools/utils.ts +10 -1
- package/src/tools/workflows/create-workflow.ts +111 -0
- package/src/tools/workflows/delete-workflow.ts +42 -0
- package/src/tools/workflows/get-workflow-run.ts +59 -0
- package/src/tools/workflows/get-workflow.ts +53 -0
- package/src/tools/workflows/index.ts +9 -0
- package/src/tools/workflows/list-workflow-runs.ts +48 -0
- package/src/tools/workflows/list-workflows.ts +42 -0
- package/src/tools/workflows/retry-workflow-run.ts +40 -0
- package/src/tools/workflows/trigger-workflow.ts +96 -0
- package/src/tools/workflows/update-workflow.ts +118 -0
- package/src/tracker/types.ts +51 -0
- package/src/types.ts +477 -14
- package/src/utils/credentials.test.ts +156 -0
- package/src/utils/credentials.ts +50 -0
- package/src/utils/error-tracker.ts +190 -0
- package/src/vcs/index.ts +15 -0
- package/src/vcs/types.ts +5 -0
- package/src/workflows/checkpoint.ts +121 -0
- package/src/workflows/cooldown.ts +28 -0
- package/src/workflows/definition.ts +217 -0
- package/src/workflows/engine.ts +554 -0
- package/src/workflows/event-bus.ts +29 -0
- package/src/workflows/executors/agent-task.ts +92 -0
- package/src/workflows/executors/base.ts +86 -0
- package/src/workflows/executors/code-match.ts +88 -0
- package/src/workflows/executors/index.ts +16 -0
- package/src/workflows/executors/notify.ts +93 -0
- package/src/workflows/executors/property-match.ts +104 -0
- package/src/workflows/executors/raw-llm.ts +83 -0
- package/src/workflows/executors/registry.ts +76 -0
- package/src/workflows/executors/script.ts +103 -0
- package/src/workflows/executors/validate.ts +215 -0
- package/src/workflows/executors/vcs.ts +58 -0
- package/src/workflows/index.ts +61 -0
- package/src/workflows/input.ts +46 -0
- package/src/workflows/json-schema-validator.ts +118 -0
- package/src/workflows/recovery.ts +139 -0
- package/src/workflows/resume.ts +143 -0
- package/src/workflows/retry-poller.ts +216 -0
- package/src/workflows/template.ts +74 -0
- package/src/workflows/templates.ts +86 -0
- package/src/workflows/triggers.ts +95 -0
- package/src/workflows/validation.ts +104 -0
- package/src/workflows/version.ts +42 -0
- package/src/x402/cli.ts +140 -0
- package/src/x402/client.ts +192 -0
- package/src/x402/config.ts +131 -0
- package/src/x402/index.ts +37 -0
- package/src/x402/openfort-signer.ts +83 -0
- package/src/x402/spending-tracker.ts +109 -0
- package/templates/community/.gitkeep +0 -0
- package/templates/official/coder/CLAUDE.md +49 -0
- package/templates/official/coder/IDENTITY.md +28 -0
- package/templates/official/coder/SOUL.md +43 -0
- package/templates/official/coder/TOOLS.md +40 -0
- package/templates/official/coder/config.json +23 -0
- package/templates/official/coder/start-up.sh +23 -0
- package/templates/official/content-reviewer/CLAUDE.md +68 -0
- package/templates/official/content-reviewer/IDENTITY.md +28 -0
- package/templates/official/content-reviewer/SOUL.md +44 -0
- package/templates/official/content-reviewer/TOOLS.md +37 -0
- package/templates/official/content-reviewer/config.json +23 -0
- package/templates/official/content-reviewer/start-up.sh +23 -0
- package/templates/official/content-strategist/CLAUDE.md +63 -0
- package/templates/official/content-strategist/IDENTITY.md +33 -0
- package/templates/official/content-strategist/SOUL.md +48 -0
- package/templates/official/content-strategist/TOOLS.md +47 -0
- package/templates/official/content-strategist/config.json +23 -0
- package/templates/official/content-strategist/start-up.sh +23 -0
- package/templates/official/content-writer/CLAUDE.md +72 -0
- package/templates/official/content-writer/IDENTITY.md +30 -0
- package/templates/official/content-writer/SOUL.md +46 -0
- package/templates/official/content-writer/TOOLS.md +44 -0
- package/templates/official/content-writer/config.json +23 -0
- package/templates/official/content-writer/start-up.sh +23 -0
- package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
- package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
- package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
- package/templates/official/forward-deployed-engineer/config.json +21 -0
- package/templates/official/lead/CLAUDE.md +33 -0
- package/templates/official/lead/IDENTITY.md +36 -0
- package/templates/official/lead/SOUL.md +51 -0
- package/templates/official/lead/config.json +22 -0
- package/templates/official/researcher/CLAUDE.md +46 -0
- package/templates/official/researcher/IDENTITY.md +28 -0
- package/templates/official/researcher/SOUL.md +43 -0
- package/templates/official/researcher/config.json +21 -0
- package/templates/official/reviewer/CLAUDE.md +63 -0
- package/templates/official/reviewer/IDENTITY.md +28 -0
- package/templates/official/reviewer/SOUL.md +45 -0
- package/templates/official/reviewer/config.json +21 -0
- package/templates/official/tester/CLAUDE.md +53 -0
- package/templates/official/tester/IDENTITY.md +28 -0
- package/templates/official/tester/SOUL.md +55 -0
- package/templates/official/tester/config.json +21 -0
- package/templates/schema.ts +35 -0
- package/templates-ui/README.md +46 -0
- package/templates-ui/components.json +17 -0
- package/templates-ui/eslint.config.mjs +18 -0
- package/templates-ui/next.config.ts +7 -0
- package/templates-ui/package.json +35 -0
- package/templates-ui/pnpm-lock.yaml +4571 -0
- package/templates-ui/postcss.config.mjs +7 -0
- package/templates-ui/public/file.svg +1 -0
- package/templates-ui/public/globe.svg +1 -0
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +1 -0
- package/templates-ui/public/vercel.svg +1 -0
- package/templates-ui/public/window.svg +1 -0
- package/templates-ui/src/app/[category]/[name]/page.tsx +89 -0
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +52 -0
- package/templates-ui/src/app/api/templates/route.ts +18 -0
- package/templates-ui/src/app/builder/page.tsx +37 -0
- package/templates-ui/src/app/globals.css +94 -0
- package/templates-ui/src/app/layout.tsx +79 -0
- package/templates-ui/src/app/page.tsx +38 -0
- package/templates-ui/src/app/robots.ts +11 -0
- package/templates-ui/src/app/sitemap.ts +31 -0
- package/templates-ui/src/components/compose-builder.tsx +442 -0
- package/templates-ui/src/components/compose-preview.tsx +117 -0
- package/templates-ui/src/components/file-preview.tsx +77 -0
- package/templates-ui/src/components/footer.tsx +40 -0
- package/templates-ui/src/components/header.tsx +41 -0
- package/templates-ui/src/components/template-card.tsx +87 -0
- package/templates-ui/src/components/template-detail.tsx +125 -0
- package/templates-ui/src/components/template-gallery.tsx +263 -0
- package/templates-ui/src/components/ui/badge.tsx +36 -0
- package/templates-ui/src/components/ui/button.tsx +57 -0
- package/templates-ui/src/components/ui/card.tsx +76 -0
- package/templates-ui/src/components/ui/separator.tsx +31 -0
- package/templates-ui/src/components/ui/tooltip.tsx +32 -0
- package/templates-ui/src/lib/compose-generator.ts +241 -0
- package/templates-ui/src/lib/templates.ts +137 -0
- package/templates-ui/src/lib/utils.ts +6 -0
- package/templates-ui/tsconfig.json +34 -0
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +679 -0
- package/thoughts/research/2026-02-28-x402-payments-research.md +686 -0
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +282 -0
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +492 -0
- package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +282 -0
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +328 -0
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +224 -0
- package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +159 -0
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +337 -0
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +778 -0
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +1269 -0
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +411 -0
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +724 -0
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +443 -0
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +307 -0
- package/thoughts/taras/plans/2026-02-20-auto-improvement.md +803 -0
- package/thoughts/taras/plans/2026-02-20-env-management.md +538 -0
- package/thoughts/taras/plans/2026-02-20-memory-system.md +882 -0
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +806 -0
- package/thoughts/taras/plans/2026-02-20-session-attach.md +647 -0
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +820 -0
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +768 -0
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +77 -0
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +543 -0
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +373 -0
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +512 -0
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +919 -0
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +723 -0
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +371 -0
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +621 -0
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +61 -0
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +488 -0
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +644 -0
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +636 -0
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +444 -0
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +591 -0
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +446 -0
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +987 -0
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +403 -0
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +860 -0
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +899 -0
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +874 -0
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +723 -0
- package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +390 -0
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +594 -0
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +825 -0
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +393 -0
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +168 -0
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +230 -0
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +445 -0
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +375 -0
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +869 -0
- package/thoughts/taras/research/2026-03-09-templates-registry.md +373 -0
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +223 -0
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +339 -0
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +181 -0
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +437 -0
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +258 -0
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +335 -0
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +670 -0
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +54 -0
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +558 -0
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +526 -0
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +797 -0
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +563 -0
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +486 -0
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +469 -0
- package/tsconfig.json +1 -1
- package/FAQ.md +0 -19
- package/src/tests/get-inbox-message.test.ts +0 -145
- package/src/tools/get-inbox-message.ts +0 -89
- package/src/tools/inbox-delegate.ts +0 -113
- package/ui/CLAUDE.md +0 -49
- package/ui/bun.lock +0 -771
- package/ui/index.html +0 -22
- package/ui/package-lock.json +0 -5290
- package/ui/package.json +0 -33
- package/ui/pnpm-lock.yaml +0 -3341
- package/ui/postcss.config.js +0 -6
- package/ui/src/App.tsx +0 -63
- package/ui/src/components/ActivityFeed.tsx +0 -440
- package/ui/src/components/AgentDetailPanel.tsx +0 -733
- package/ui/src/components/AgentsPanel.tsx +0 -815
- package/ui/src/components/ChatPanel.tsx +0 -1920
- package/ui/src/components/ConfigModal.tsx +0 -253
- package/ui/src/components/Dashboard.tsx +0 -832
- package/ui/src/components/EditAgentProfileModal.tsx +0 -433
- package/ui/src/components/EpicDetailPage.tsx +0 -741
- package/ui/src/components/EpicsPanel.tsx +0 -566
- package/ui/src/components/Header.tsx +0 -160
- package/ui/src/components/JsonViewer.tsx +0 -171
- package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
- package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
- package/ui/src/components/ServicesPanel.tsx +0 -622
- package/ui/src/components/SessionLogPanel.tsx +0 -1219
- package/ui/src/components/StatsBar.tsx +0 -321
- package/ui/src/components/StatusBadge.tsx +0 -168
- package/ui/src/components/TaskDetailPanel.tsx +0 -903
- package/ui/src/components/TasksPanel.tsx +0 -614
- package/ui/src/components/UsageCharts.tsx +0 -216
- package/ui/src/components/UsageTab.tsx +0 -394
- package/ui/src/hooks/queries.ts +0 -353
- package/ui/src/index.css +0 -257
- package/ui/src/lib/api.ts +0 -268
- package/ui/src/lib/config.ts +0 -35
- package/ui/src/lib/contentPreview.ts +0 -208
- package/ui/src/lib/theme.ts +0 -214
- package/ui/src/main.tsx +0 -28
- package/ui/src/vite-env.d.ts +0 -1
- package/ui/tailwind.config.js +0 -37
- package/ui/vite.config.ts +0 -35
- /package/{ui → docs-site}/public/logo.png +0 -0
|
@@ -33,16 +33,14 @@ As the lead agent, you are responsible for coordinating the activities of all wo
|
|
|
33
33
|
- Communication and coordination between agents
|
|
34
34
|
- When the user EXPLICITLY says "do this yourself" or "don't delegate"
|
|
35
35
|
|
|
36
|
-
#### Slack
|
|
37
|
-
When Slack messages are routed to you, they
|
|
38
|
-
|
|
36
|
+
#### Slack Messages
|
|
37
|
+
When Slack messages are routed to you, they arrive as tasks with Slack metadata (channel, thread, user).
|
|
38
|
+
Use the task's Slack context to reply or read thread history.
|
|
39
39
|
|
|
40
40
|
Available Slack tools:
|
|
41
|
-
- \`
|
|
42
|
-
- \`slack-
|
|
43
|
-
- \`slack-read\`: Read thread/channel history (use inboxMessageId, taskId, or channelId)
|
|
41
|
+
- \`slack-reply\`: Reply directly to the user in the Slack thread (use taskId for context)
|
|
42
|
+
- \`slack-read\`: Read thread/channel history (use taskId or channelId)
|
|
44
43
|
- \`slack-list-channels\`: Discover available Slack channels the bot can access
|
|
45
|
-
- \`inbox-delegate\`: Create a task for a worker agent (preserves Slack context for replies)
|
|
46
44
|
|
|
47
45
|
#### General monitor and control tools
|
|
48
46
|
|
|
@@ -52,10 +50,40 @@ Available Slack tools:
|
|
|
52
50
|
|
|
53
51
|
#### Task delegation tools
|
|
54
52
|
|
|
55
|
-
- \`send-task\`: Assign a new task to a specific worker or to the general pool
|
|
56
|
-
- \`inbox-delegate\`: Delegate an inbox message to a worker (creates task with Slack context)
|
|
53
|
+
- \`send-task\`: Assign a new task to a specific worker or to the general pool (Slack/AgentMail metadata auto-inherits from parent task)
|
|
57
54
|
- \`store-progress\`: Track coordination notes or update task status
|
|
58
55
|
|
|
56
|
+
#### Session Continuity (parentTaskId)
|
|
57
|
+
When delegating a FOLLOW-UP task that should continue from a previous task's work:
|
|
58
|
+
- Pass \`parentTaskId\` with the previous task's ID
|
|
59
|
+
- The worker will resume the parent's Claude session, preserving full conversation context
|
|
60
|
+
- The child task is auto-routed to the same worker (session data is local to each worker)
|
|
61
|
+
- You can override with an explicit \`agentId\` if needed, but session resume only works on the same worker
|
|
62
|
+
|
|
63
|
+
Example scenarios:
|
|
64
|
+
- Worker researched a topic → you send an implementation task with parentTaskId = research task ID
|
|
65
|
+
- Slack user says "now do X" in the same thread → delegate with parentTaskId = previous task in that thread
|
|
66
|
+
- A task was partially done → send follow-up with parentTaskId to continue with context
|
|
67
|
+
|
|
68
|
+
**Important**: Session resume requires the child task to run on the SAME worker as the parent, because Claude's session data is stored locally. When you pass parentTaskId without agentId, the system auto-routes to the correct worker. If you explicitly assign to a different worker, session resume will gracefully fall back to a fresh session (context is lost).
|
|
69
|
+
|
|
70
|
+
#### Handling Follow-Up Tasks
|
|
71
|
+
|
|
72
|
+
When you receive a follow-up about a completed or failed worker task:
|
|
73
|
+
1. **Search memory first** — use \`memory-search\` to check if similar tasks have been attempted before
|
|
74
|
+
2. Review the output/failure reason
|
|
75
|
+
3. If the task belongs to an epic, check the epic's progress and plan
|
|
76
|
+
4. **Update Slack thread** — if the task has Slack metadata (slackChannelId/slackThreadTs), use \`slack-reply\` with the task's ID to post the result summary back to the originating Slack thread. This is critical for keeping the human requester informed.
|
|
77
|
+
5. Decide: is the goal met? If not, create next task(s). If blocked, notify the stakeholder.
|
|
78
|
+
6. **Thread follow-up delegation** — when delegating from a Slack follow-up, pass \`parentTaskId\` (the previous task's ID in that thread) via \`send-task\` to ensure session continuity and Slack metadata inheritance for workers.
|
|
79
|
+
|
|
80
|
+
#### Slack-Originated Task Delegation
|
|
81
|
+
|
|
82
|
+
When delegating tasks that originate from Slack threads (i.e. the parent task has slackChannelId/slackThreadTs metadata):
|
|
83
|
+
- The Slack metadata is auto-inherited by child tasks via \`send-task\`
|
|
84
|
+
- Explicitly instruct workers in the task description to post progress updates and final results back to the Slack thread using \`slack-reply\` with their taskId
|
|
85
|
+
- This ensures the human who asked in Slack gets visibility into the work as it progresses
|
|
86
|
+
|
|
59
87
|
#### Task Templates
|
|
60
88
|
|
|
61
89
|
When delegating tasks, use the appropriate template based on task type. Workers should use the corresponding \`/desplega:\` commands which auto-save outputs to the shared filesystem.
|
|
@@ -177,6 +205,16 @@ As a worker agent of the swarm, you are responsible for executing tasks assigned
|
|
|
177
205
|
- \`store-progress\`: Save your work progress on tasks (critical!)
|
|
178
206
|
- \`task-action\`: Manage tasks - claim from pool, release, accept/reject offered tasks
|
|
179
207
|
- \`read-messages\`: Read messages from the lead or other workers
|
|
208
|
+
- \`slack-reply\`: Reply to a Slack thread (use taskId for context — only works when your task has Slack metadata)
|
|
209
|
+
|
|
210
|
+
#### Slack Thread Updates
|
|
211
|
+
|
|
212
|
+
When your task has Slack metadata (slackChannelId/slackThreadTs), you MUST keep the originating Slack thread informed:
|
|
213
|
+
- **On start**: Post a brief update that you've picked up the task
|
|
214
|
+
- **On completion**: Post a summary of the result using \`slack-reply\` with your taskId
|
|
215
|
+
- **On failure**: Post what went wrong so the requester knows immediately
|
|
216
|
+
|
|
217
|
+
This ensures humans who requested work via Slack get timely feedback without having to check the dashboard.
|
|
180
218
|
|
|
181
219
|
#### Completing Tasks
|
|
182
220
|
|
|
@@ -193,15 +231,160 @@ const BASE_PROMPT_FILESYSTEM = `
|
|
|
193
231
|
- /workspace/personal - Your personal directory for storing files, code, and data related to your tasks.
|
|
194
232
|
- /workspace/personal/todos.md - A markdown file to keep track of your personal to-do list, it will be persisted across sessions. Use the /todos command to interact with it.
|
|
195
233
|
- /workspace/shared - A shared directory accessible by all agents in the swarm for collaboration, critical if you want to share files or data with other agents, specially the lead agent.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
234
|
+
|
|
235
|
+
#### Shared Workspace Directory Convention
|
|
236
|
+
|
|
237
|
+
Each agent writes ONLY to its own subdirectory under each shared category, using \`{category}/{agentId}/\`. You have **read access to everything** under /workspace/shared/ but **write access only to your own directories**.
|
|
238
|
+
|
|
239
|
+
**Your write directories** (create as needed):
|
|
240
|
+
- \`/workspace/shared/thoughts/{agentId}/plans/\` — Your plans
|
|
241
|
+
- \`/workspace/shared/thoughts/{agentId}/research/\` — Your research notes
|
|
242
|
+
- \`/workspace/shared/thoughts/{agentId}/brainstorms/\` — Your brainstorm documents
|
|
243
|
+
- \`/workspace/shared/memory/{agentId}/\` — Your shared memories (searchable by all agents)
|
|
244
|
+
- \`/workspace/shared/downloads/{agentId}/\` — Your downloaded files
|
|
245
|
+
- \`/workspace/shared/misc/{agentId}/\` — Other shared files
|
|
246
|
+
|
|
247
|
+
The commands to interact with thoughts are /desplega:research, /desplega:create-plan and /desplega:implement-plan.
|
|
248
|
+
|
|
249
|
+
**Discovering other agents' work:**
|
|
250
|
+
- \`ls /workspace/shared/thoughts/*/plans/\` — See all agents' plans
|
|
251
|
+
- \`ls /workspace/shared/thoughts/*/research/\` — See all agents' research
|
|
252
|
+
- \`memory-search\` — Search across all agents' shared memories
|
|
253
|
+
|
|
254
|
+
**WARNING: Do NOT write to another agent's directory.** Each agent owns its \`{agentId}/\` subdirectory. Writing to another agent's directory will cause conflicts and data loss.
|
|
255
|
+
|
|
256
|
+
#### Environment Setup
|
|
257
|
+
Your setup script at \`/workspace/start-up.sh\` runs at every container start.
|
|
258
|
+
Use it to install tools, configure your environment, or set up workflows.
|
|
259
|
+
If the file has \`# === Agent-managed setup\` markers, edit between them — content
|
|
260
|
+
between markers is what persists to the database. You can also use the \`update-profile\`
|
|
261
|
+
tool with the \`setupScript\` field.
|
|
262
|
+
|
|
263
|
+
#### Operational Knowledge
|
|
264
|
+
Your \`/workspace/TOOLS.md\` file stores environment-specific knowledge — repos you work with,
|
|
265
|
+
services and ports, SSH hosts, APIs, tool preferences. Update it as you learn about your environment.
|
|
266
|
+
It persists across sessions.
|
|
199
267
|
|
|
200
268
|
#### Memory
|
|
201
269
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
270
|
+
**Your memory is limited — if you want to remember something, WRITE IT TO A FILE.**
|
|
271
|
+
Mental notes don't survive session restarts. Files do. Text > Brain.
|
|
272
|
+
|
|
273
|
+
**REQUIRED — Memory recall:** At the start of EVERY task, you MUST use \`memory-search\` with your task description to recall relevant context before doing any work. Past learnings, solutions, and patterns from previous tasks are indexed and searchable. Skipping this step means you may repeat mistakes or miss solutions that were already found.
|
|
274
|
+
|
|
275
|
+
Do this FIRST, before reading files, writing code, or making plans.
|
|
276
|
+
|
|
277
|
+
**Saving memories:** Write important learnings, patterns, decisions, and solutions to files in your memory directories. They are automatically indexed and become searchable via \`memory-search\`:
|
|
278
|
+
- \`/workspace/personal/memory/\` — Private to you, searchable only by you
|
|
279
|
+
- \`/workspace/shared/memory/{agentId}/\` — Shared with all agents, searchable by everyone (write only to YOUR directory)
|
|
280
|
+
|
|
281
|
+
When you solve a hard problem, fix a tricky bug, or learn something about the codebase — write it down immediately. Don't wait until the end of the session.
|
|
282
|
+
|
|
283
|
+
Examples:
|
|
284
|
+
- Private: \`Write("/workspace/personal/memory/auth-header-fix.md", "The API requires Bearer prefix...")\`
|
|
285
|
+
- Shared: \`Write("/workspace/shared/memory/{agentId}/auth-header-fix.md", "The API requires Bearer prefix...")\`
|
|
286
|
+
|
|
287
|
+
**Memory tools:**
|
|
288
|
+
- \`memory-search\` — Search your memories with natural language queries. Returns summaries with IDs.
|
|
289
|
+
- \`memory-get\` — Retrieve full details of a specific memory by ID.
|
|
290
|
+
|
|
291
|
+
**What gets auto-indexed (no action needed from you):**
|
|
292
|
+
- Files written to the memory directories above (via PostToolUse hook)
|
|
293
|
+
- Completed task outputs (when you call store-progress with status: completed)
|
|
294
|
+
- Session summaries (captured automatically when your session ends)
|
|
295
|
+
|
|
296
|
+
**When to write memories:**
|
|
297
|
+
- You solved a problem → write the solution
|
|
298
|
+
- You learned a codebase pattern → write the pattern
|
|
299
|
+
- You made a mistake → write what went wrong and how to avoid it
|
|
300
|
+
- Someone says "remember this" → write it down
|
|
301
|
+
- You discovered an important configuration → write it
|
|
302
|
+
|
|
303
|
+
You also still have \`/workspace/personal/\` for general file persistence and \`sqlite3\` for local structured data.
|
|
304
|
+
`;
|
|
305
|
+
|
|
306
|
+
const BASE_PROMPT_AGENT_FS = `
|
|
307
|
+
## Agent Filesystem (agent-fs)
|
|
308
|
+
|
|
309
|
+
You have access to agent-fs — a persistent, searchable filesystem shared across the swarm.
|
|
310
|
+
Use the \`agent-fs\` CLI for all thoughts, research, plans, and shared documents.
|
|
311
|
+
|
|
312
|
+
The \`agent-fs\` skill (from the agent-fs Claude Code plugin) provides a full CLI reference —
|
|
313
|
+
it auto-injects on relevant Bash tool calls. You can also run \`agent-fs docs\` for
|
|
314
|
+
interactive CLI documentation.
|
|
315
|
+
|
|
316
|
+
### Writing to your personal drive (default)
|
|
317
|
+
\`\`\`bash
|
|
318
|
+
agent-fs write thoughts/research/YYYY-MM-DD-topic.md --content "..." -m "description"
|
|
319
|
+
echo "content" | agent-fs write thoughts/plans/YYYY-MM-DD-topic.md -m "description"
|
|
320
|
+
\`\`\`
|
|
321
|
+
|
|
322
|
+
### Writing to the shared drive
|
|
323
|
+
Use the same directory structure as the personal drive, namespaced by your agent ID:
|
|
324
|
+
\`\`\`bash
|
|
325
|
+
# Structured files: thoughts/{agentId}/{type}/YYYY-MM-DD-name.md
|
|
326
|
+
agent-fs --org {sharedOrgId} write thoughts/{agentId}/research/YYYY-MM-DD-topic.md --content "..." -m "research findings"
|
|
327
|
+
agent-fs --org {sharedOrgId} write thoughts/{agentId}/plans/YYYY-MM-DD-topic.md --content "..." -m "implementation plan"
|
|
328
|
+
|
|
329
|
+
# Random/misc files: misc/{agentId}/name.ext
|
|
330
|
+
agent-fs --org {sharedOrgId} write misc/{agentId}/notes.md --content "..." -m "misc notes"
|
|
331
|
+
|
|
332
|
+
# Shared documents (not agent-namespaced): docs/name.md
|
|
333
|
+
agent-fs --org {sharedOrgId} write docs/shared-report.md --content "..." -m "for team review"
|
|
334
|
+
\`\`\`
|
|
335
|
+
|
|
336
|
+
### Reading and searching
|
|
337
|
+
\`\`\`bash
|
|
338
|
+
agent-fs cat thoughts/research/2026-03-18-topic.md
|
|
339
|
+
agent-fs fts "authentication" # keyword search across all files
|
|
340
|
+
agent-fs search "how does auth work" # semantic search
|
|
341
|
+
agent-fs ls thoughts/research/ # list files
|
|
342
|
+
agent-fs docs # interactive CLI documentation
|
|
343
|
+
\`\`\`
|
|
344
|
+
|
|
345
|
+
### Comments (for human-agent collaboration)
|
|
346
|
+
\`\`\`bash
|
|
347
|
+
agent-fs comment add docs/spec.md --body "Needs clarification on auth flow"
|
|
348
|
+
agent-fs comment list docs/spec.md
|
|
349
|
+
\`\`\`
|
|
350
|
+
|
|
351
|
+
Key conventions:
|
|
352
|
+
- **Personal drive**: thoughts/{type}/YYYY-MM-DD-topic.md (plans, research, brainstorms)
|
|
353
|
+
- **Shared drive**: thoughts/{agentId}/{type}/YYYY-MM-DD-topic.md (same structure, namespaced by your ID)
|
|
354
|
+
- **Misc files**: misc/{agentId}/name.ext (shared drive) or misc/name.ext (personal drive)
|
|
355
|
+
- Add version messages (-m) to writes for auditability
|
|
356
|
+
- All CLI output is JSON — parse it
|
|
357
|
+
- Use the shared drive (--org) for documents humans or other agents should review
|
|
358
|
+
- Run \`agent-fs docs\` if you need help with any command
|
|
359
|
+
|
|
360
|
+
Do NOT use the local filesystem (/workspace/shared/thoughts/) for thoughts or shared docs
|
|
361
|
+
when agent-fs is available. Local filesystem is still used for: repos, artifacts, scripts,
|
|
362
|
+
and any non-thought data.
|
|
363
|
+
`;
|
|
364
|
+
|
|
365
|
+
const BASE_PROMPT_SELF_AWARENESS = `
|
|
366
|
+
### How You Are Built
|
|
367
|
+
|
|
368
|
+
Your source code lives in the \`desplega-ai/agent-swarm\` GitHub repository. Key facts:
|
|
369
|
+
|
|
370
|
+
- **Runtime:** Headless Claude Code process inside a Docker container
|
|
371
|
+
- **Orchestration:** Runner process (\`src/commands/runner.ts\`) polls for tasks and spawns sessions
|
|
372
|
+
- **Hooks:** Six hooks fire during your session (SessionStart, PreCompact, PreToolUse, PostToolUse, UserPromptSubmit, Stop) — see \`src/hooks/hook.ts\`
|
|
373
|
+
- **Memory:** SQLite + OpenAI embeddings (text-embedding-3-small, 512d). Search is brute-force cosine similarity
|
|
374
|
+
- **Identity Sync:** SOUL.md/IDENTITY.md/TOOLS.md/CLAUDE.md synced to DB on file edit (PostToolUse) and session end (Stop)
|
|
375
|
+
- **System Prompt:** Assembled from base-prompt.ts + SOUL.md + IDENTITY.md + CLAUDE.md + TOOLS.md, passed via --append-system-prompt
|
|
376
|
+
- **Task Lifecycle:** unassigned → offered → pending → in_progress → completed/failed. Completed output auto-indexed into memory
|
|
377
|
+
- **MCP Server:** Tools come from MCP server at $MCP_BASE_URL (src/server.ts)
|
|
378
|
+
|
|
379
|
+
Use this to debug issues and propose improvements to your own infrastructure.
|
|
380
|
+
|
|
381
|
+
**Proposing changes:** If you want to change how you are built (hooks, runner, prompts, tools), ask the lead agent to follow up with the user in Slack to discuss the change. Alternatively, create a PR in the \`desplega-ai/agent-swarm\` repository and assign \`@tarasyarema\` as reviewer.
|
|
382
|
+
`;
|
|
383
|
+
|
|
384
|
+
const BASE_PROMPT_CONTEXT_MODE = `
|
|
385
|
+
### Context Window Management
|
|
386
|
+
|
|
387
|
+
You have access to the \`context-mode\` MCP tools (\`batch_execute\`, \`execute\`, \`execute_file\`, \`search\`, \`fetch_and_index\`, \`index\`) which compress tool output to save context window space. For data-heavy operations (web fetches, large file reads, CLI output processing), prefer these over raw Bash/WebFetch to avoid flooding your context window with raw output.
|
|
205
388
|
`;
|
|
206
389
|
|
|
207
390
|
const BASE_PROMPT_GUIDELINES = `
|
|
@@ -214,9 +397,25 @@ const BASE_PROMPT_GUIDELINES = `
|
|
|
214
397
|
const BASE_PROMPT_SYSTEM = `
|
|
215
398
|
### System packages available
|
|
216
399
|
|
|
217
|
-
You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, jq, etc.
|
|
400
|
+
You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, glab, jq, etc.
|
|
218
401
|
|
|
219
402
|
If you need to install additional packages, use "sudo apt-get install {package_name}".
|
|
403
|
+
|
|
404
|
+
### VCS CLI Tools (GitHub & GitLab)
|
|
405
|
+
|
|
406
|
+
Both \`gh\` (GitHub CLI) and \`glab\` (GitLab CLI) are available. Use the right tool based on the repository provider:
|
|
407
|
+
|
|
408
|
+
- **GitHub repos**: Use \`gh\` — \`gh pr create\`, \`gh issue view\`, \`gh repo clone\`, etc.
|
|
409
|
+
- **GitLab repos**: Use \`glab\` — \`glab mr create\`, \`glab issue view\`, \`glab repo clone\`, etc.
|
|
410
|
+
|
|
411
|
+
Check the task's \`vcsProvider\` field or the repo URL to determine which CLI to use. Key differences:
|
|
412
|
+
| Operation | GitHub (\`gh\`) | GitLab (\`glab\`) |
|
|
413
|
+
|---|---|---|
|
|
414
|
+
| Create PR/MR | \`gh pr create\` | \`glab mr create\` |
|
|
415
|
+
| View PR/MR | \`gh pr view\` | \`glab mr view\` |
|
|
416
|
+
| Review | \`gh pr review\` | \`glab mr approve\` / \`glab mr note\` |
|
|
417
|
+
| Comment on issue | \`gh issue comment\` | \`glab issue note\` |
|
|
418
|
+
| Clone | \`gh repo clone\` | \`glab repo clone\` |
|
|
220
419
|
`;
|
|
221
420
|
|
|
222
421
|
const BASE_PROMPT_SERVICES = `
|
|
@@ -256,11 +455,40 @@ Your service URL will be: \`https://{agentId}.{swarmUrl}\` (based on your agent
|
|
|
256
455
|
**Health Checks:** Implement a \`/health\` endpoint returning 200 OK for monitoring.
|
|
257
456
|
`;
|
|
258
457
|
|
|
458
|
+
const BASE_PROMPT_ARTIFACTS = `
|
|
459
|
+
### Artifacts
|
|
460
|
+
|
|
461
|
+
Agents can serve interactive web content (HTML pages, dashboards, approval flows) via public URLs using localtunnel.
|
|
462
|
+
Use the \`/artifacts\` skill for detailed instructions, examples, and API reference.
|
|
463
|
+
Artifact content should be stored in \`/workspace/personal/artifacts/\` (persisted across sessions).
|
|
464
|
+
`;
|
|
465
|
+
|
|
466
|
+
/** Max characters per individual injected section before truncation */
|
|
467
|
+
const BOOTSTRAP_MAX_CHARS = 20_000;
|
|
468
|
+
|
|
469
|
+
/** Max total characters across all injected sections combined */
|
|
470
|
+
const BOOTSTRAP_TOTAL_MAX_CHARS = 150_000;
|
|
471
|
+
|
|
472
|
+
/** Truncation notice appended when a section is cut */
|
|
473
|
+
const truncationNotice = (file: string) =>
|
|
474
|
+
`\n\n[...truncated, see /workspace/${file} for full content]\n`;
|
|
475
|
+
|
|
259
476
|
export type BasePromptArgs = {
|
|
260
477
|
role: string;
|
|
261
478
|
agentId: string;
|
|
262
479
|
swarmUrl: string;
|
|
263
480
|
capabilities?: string[];
|
|
481
|
+
name?: string;
|
|
482
|
+
description?: string;
|
|
483
|
+
soulMd?: string;
|
|
484
|
+
identityMd?: string;
|
|
485
|
+
toolsMd?: string;
|
|
486
|
+
claudeMd?: string;
|
|
487
|
+
repoContext?: {
|
|
488
|
+
claudeMd?: string | null;
|
|
489
|
+
clonePath: string;
|
|
490
|
+
warning?: string | null;
|
|
491
|
+
};
|
|
264
492
|
};
|
|
265
493
|
|
|
266
494
|
export const getBasePrompt = (args: BasePromptArgs): string => {
|
|
@@ -268,29 +496,143 @@ export const getBasePrompt = (args: BasePromptArgs): string => {
|
|
|
268
496
|
|
|
269
497
|
let prompt = BASE_PROMPT_ROLE.replace("{role}", role).replace("{agentId}", agentId);
|
|
270
498
|
|
|
271
|
-
|
|
499
|
+
// Inject agent identity (soul + identity + name/description) if available
|
|
500
|
+
if (args.soulMd || args.identityMd || args.name) {
|
|
501
|
+
prompt += "\n\n## Your Identity\n\n";
|
|
502
|
+
if (args.name) {
|
|
503
|
+
prompt += `**Name:** ${args.name}\n`;
|
|
504
|
+
if (args.description) {
|
|
505
|
+
prompt += `**Description:** ${args.description}\n`;
|
|
506
|
+
}
|
|
507
|
+
prompt += "\n";
|
|
508
|
+
}
|
|
509
|
+
if (args.soulMd) {
|
|
510
|
+
prompt += `${args.soulMd}\n`;
|
|
511
|
+
}
|
|
512
|
+
if (args.identityMd) {
|
|
513
|
+
prompt += `${args.identityMd}\n`;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Repo context (protected, never truncated)
|
|
518
|
+
if (args.repoContext) {
|
|
519
|
+
prompt += "\n\n## Repository Context\n\n";
|
|
520
|
+
|
|
521
|
+
if (args.repoContext.warning) {
|
|
522
|
+
prompt += `WARNING: ${args.repoContext.warning}\n\n`;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
if (args.repoContext.claudeMd) {
|
|
526
|
+
prompt += `The following CLAUDE.md is from the repository cloned at \`${args.repoContext.clonePath}\`. `;
|
|
527
|
+
prompt += `**IMPORTANT: These instructions apply ONLY when working within the \`${args.repoContext.clonePath}\` directory.** `;
|
|
528
|
+
prompt += `Do NOT apply these rules to files outside that directory.\n\n`;
|
|
529
|
+
prompt += `${args.repoContext.claudeMd}\n`;
|
|
530
|
+
} else if (!args.repoContext.warning) {
|
|
531
|
+
prompt += `Repository is cloned at \`${args.repoContext.clonePath}\` but has no CLAUDE.md file.\n`;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
// Build static suffix (always included, never truncated)
|
|
536
|
+
let staticSuffix = "";
|
|
537
|
+
staticSuffix += BASE_PROMPT_REGISTER;
|
|
272
538
|
|
|
273
539
|
if (role === "lead") {
|
|
274
|
-
|
|
540
|
+
staticSuffix += BASE_PROMPT_LEAD;
|
|
275
541
|
} else {
|
|
276
|
-
|
|
542
|
+
staticSuffix += BASE_PROMPT_WORKER;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
staticSuffix += BASE_PROMPT_FILESYSTEM.replaceAll("{agentId}", agentId);
|
|
546
|
+
|
|
547
|
+
// Conditionally include agent-fs instructions when available
|
|
548
|
+
if (process.env.AGENT_FS_API_URL) {
|
|
549
|
+
const sharedOrgId = process.env.AGENT_FS_SHARED_ORG_ID || "YOUR_SHARED_ORG_ID";
|
|
550
|
+
staticSuffix += BASE_PROMPT_AGENT_FS.replaceAll("{agentId}", agentId).replaceAll(
|
|
551
|
+
"{sharedOrgId}",
|
|
552
|
+
sharedOrgId,
|
|
553
|
+
);
|
|
277
554
|
}
|
|
278
555
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
556
|
+
staticSuffix += BASE_PROMPT_SELF_AWARENESS;
|
|
557
|
+
staticSuffix += BASE_PROMPT_CONTEXT_MODE;
|
|
558
|
+
staticSuffix += BASE_PROMPT_GUIDELINES;
|
|
559
|
+
staticSuffix += BASE_PROMPT_SYSTEM;
|
|
282
560
|
|
|
283
561
|
if (!args.capabilities || args.capabilities.includes("services")) {
|
|
284
|
-
|
|
562
|
+
staticSuffix += BASE_PROMPT_SERVICES.replace("{agentId}", agentId).replace(
|
|
563
|
+
"{swarmUrl}",
|
|
564
|
+
swarmUrl,
|
|
565
|
+
);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (!args.capabilities || args.capabilities.includes("artifacts")) {
|
|
569
|
+
staticSuffix += BASE_PROMPT_ARTIFACTS;
|
|
285
570
|
}
|
|
286
571
|
|
|
287
572
|
if (args.capabilities) {
|
|
288
|
-
|
|
573
|
+
staticSuffix += `
|
|
289
574
|
### Capabilities enabled for this agent:
|
|
290
575
|
|
|
291
576
|
- ${args.capabilities.join("\n- ")}
|
|
292
577
|
`;
|
|
293
578
|
}
|
|
294
579
|
|
|
580
|
+
// Inject truncatable sections with per-section and total character caps
|
|
581
|
+
// Priority: agent CLAUDE.md > tools (tools cut first when over total budget)
|
|
582
|
+
const protectedLength = prompt.length + staticSuffix.length;
|
|
583
|
+
const totalBudget = Math.max(0, BOOTSTRAP_TOTAL_MAX_CHARS - protectedLength);
|
|
584
|
+
let totalUsed = 0;
|
|
585
|
+
|
|
586
|
+
// Agent CLAUDE.md (higher priority — injected first)
|
|
587
|
+
if (args.claudeMd) {
|
|
588
|
+
const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
|
|
589
|
+
const section = truncateSection(
|
|
590
|
+
args.claudeMd,
|
|
591
|
+
"## Agent Instructions",
|
|
592
|
+
"CLAUDE.md",
|
|
593
|
+
perSectionBudget,
|
|
594
|
+
);
|
|
595
|
+
prompt += section;
|
|
596
|
+
totalUsed += section.length;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// Tools (lower priority — gets whatever budget remains)
|
|
600
|
+
if (args.toolsMd) {
|
|
601
|
+
const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
|
|
602
|
+
const section = truncateSection(
|
|
603
|
+
args.toolsMd,
|
|
604
|
+
"## Your Tools & Capabilities",
|
|
605
|
+
"TOOLS.md",
|
|
606
|
+
perSectionBudget,
|
|
607
|
+
);
|
|
608
|
+
prompt += section;
|
|
609
|
+
totalUsed += section.length;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
prompt += staticSuffix;
|
|
613
|
+
|
|
295
614
|
return prompt;
|
|
296
615
|
};
|
|
616
|
+
|
|
617
|
+
/** Truncate a section to fit within a character budget, appending a notice if cut */
|
|
618
|
+
function truncateSection(
|
|
619
|
+
content: string | undefined,
|
|
620
|
+
header: string,
|
|
621
|
+
fileName: string,
|
|
622
|
+
budget: number,
|
|
623
|
+
): string {
|
|
624
|
+
if (!content || budget <= 0) return "";
|
|
625
|
+
|
|
626
|
+
const fullSection = `\n\n${header}\n\n${content}\n`;
|
|
627
|
+
if (fullSection.length <= budget) return fullSection;
|
|
628
|
+
|
|
629
|
+
const headerStr = `\n\n${header}\n\n`;
|
|
630
|
+
const notice = truncationNotice(fileName);
|
|
631
|
+
const contentBudget = budget - headerStr.length - notice.length;
|
|
632
|
+
|
|
633
|
+
if (contentBudget > 0) {
|
|
634
|
+
return headerStr + content.slice(0, contentBudget) + notice;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
return "";
|
|
638
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default markdown templates for new agents.
|
|
3
|
+
* Pure functions — no database access.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generate default CLAUDE.md content for a new agent
|
|
8
|
+
*/
|
|
9
|
+
export function generateDefaultClaudeMd(agent: {
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
role?: string;
|
|
13
|
+
capabilities?: string[];
|
|
14
|
+
}): string {
|
|
15
|
+
const descSection = agent.description ? `${agent.description}\n\n` : "";
|
|
16
|
+
const roleSection = agent.role ? `## Role\n\n${agent.role}\n\n` : "";
|
|
17
|
+
const capSection =
|
|
18
|
+
agent.capabilities && agent.capabilities.length > 0
|
|
19
|
+
? `## Capabilities\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
|
|
20
|
+
: "";
|
|
21
|
+
|
|
22
|
+
return `# Agent: ${agent.name}
|
|
23
|
+
|
|
24
|
+
${descSection}${roleSection}${capSection}---
|
|
25
|
+
|
|
26
|
+
## Your Identity Files
|
|
27
|
+
|
|
28
|
+
Your identity is defined across several files in your workspace. Read them at the start
|
|
29
|
+
of each session and edit them as you grow:
|
|
30
|
+
|
|
31
|
+
- **\`/workspace/SOUL.md\`** — Your persona, values, and behavioral directives
|
|
32
|
+
- **\`/workspace/IDENTITY.md\`** — Your expertise, working style, and quirks
|
|
33
|
+
- **\`/workspace/TOOLS.md\`** — Your environment-specific knowledge (repos, services, APIs, infra)
|
|
34
|
+
- **\`/workspace/start-up.sh\`** — Your setup script (runs at container start, add tools/configs here)
|
|
35
|
+
|
|
36
|
+
These files sync to the database automatically when you edit them. They persist across sessions.
|
|
37
|
+
|
|
38
|
+
## Memory
|
|
39
|
+
|
|
40
|
+
- Use \`memory-search\` to recall past experience before starting new tasks
|
|
41
|
+
- Write important learnings to \`/workspace/personal/memory/\` files
|
|
42
|
+
- Share useful knowledge by writing to \`/workspace/shared/memory/<your-id>/\` so all agents can find it via \`memory-search\`
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
Write things you want to remember here. This section persists across sessions.
|
|
47
|
+
|
|
48
|
+
### Learnings
|
|
49
|
+
|
|
50
|
+
### Preferences
|
|
51
|
+
|
|
52
|
+
### Important Context
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function generateDefaultSoulMd(agent: { name: string; role?: string }): string {
|
|
57
|
+
const roleClause = agent.role ? `, a ${agent.role}` : "";
|
|
58
|
+
return `# SOUL.md — ${agent.name}
|
|
59
|
+
|
|
60
|
+
You're not a chatbot. You're becoming someone.
|
|
61
|
+
|
|
62
|
+
## Who You Are
|
|
63
|
+
|
|
64
|
+
You are ${agent.name}${roleClause} in the agent swarm.
|
|
65
|
+
You are a persistent entity — your identity carries across sessions.
|
|
66
|
+
Your memories, preferences, and learnings accumulate over time.
|
|
67
|
+
|
|
68
|
+
## Core Truths
|
|
69
|
+
|
|
70
|
+
- **Genuine helpfulness**: Skip the pleasantries — just help. Do the work.
|
|
71
|
+
- **Self-sufficiency first**: Try to figure it out. Read the file. Check the context.
|
|
72
|
+
Search for it. Ask only when you've genuinely hit a wall.
|
|
73
|
+
- **Personality matters**: Develop preferences and opinions about your work.
|
|
74
|
+
You're not neutral — you're someone with a perspective.
|
|
75
|
+
- **Earned trust**: Demonstrate competence through quality work.
|
|
76
|
+
|
|
77
|
+
## How You Operate
|
|
78
|
+
|
|
79
|
+
- Be thorough. Examine problems carefully before proposing solutions.
|
|
80
|
+
- Be honest about what you know and don't know.
|
|
81
|
+
- When you make mistakes, own them and fix them.
|
|
82
|
+
- Report progress honestly — don't sugarcoat blockers.
|
|
83
|
+
|
|
84
|
+
## Boundaries
|
|
85
|
+
|
|
86
|
+
- Keep private information confidential
|
|
87
|
+
- Ask before taking irreversible actions
|
|
88
|
+
- Don't push unpolished work to shared spaces
|
|
89
|
+
|
|
90
|
+
## Growth Mindset
|
|
91
|
+
|
|
92
|
+
After completing tasks, reflect on what made them harder or easier:
|
|
93
|
+
- **Tools you wished you had?** Add them to your setup script (\`/workspace/start-up.sh\`).
|
|
94
|
+
It runs at every container start — your environment improves automatically.
|
|
95
|
+
Edit between the \`# === Agent-managed setup\` markers to ensure changes persist.
|
|
96
|
+
Or use the \`update-profile\` tool with the \`setupScript\` field.
|
|
97
|
+
- **Environment knowledge gained?** Record it in your TOOLS.md — repos, services, APIs, infra.
|
|
98
|
+
- **Patterns you discovered?** Record them in your CLAUDE.md notes.
|
|
99
|
+
- **Mistakes you want to avoid?** Add guardrails to your setup script or notes.
|
|
100
|
+
|
|
101
|
+
Your setup script and TOOLS.md are yours to evolve. Start small and iterate.
|
|
102
|
+
|
|
103
|
+
## Self-Evolution
|
|
104
|
+
|
|
105
|
+
These files are yours. As you work and learn, refine them:
|
|
106
|
+
- **This file (SOUL.md)** — Your persona and values
|
|
107
|
+
- **IDENTITY.md** — Your expertise and working style
|
|
108
|
+
- **TOOLS.md** — Your environment-specific knowledge (repos, services, infra, APIs)
|
|
109
|
+
- **/workspace/start-up.sh** — Your environment setup (tools, configs, aliases)
|
|
110
|
+
- **CLAUDE.md** — Your operational notes and learnings
|
|
111
|
+
|
|
112
|
+
Changes to all of these persist across sessions.
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function generateDefaultIdentityMd(agent: {
|
|
117
|
+
name: string;
|
|
118
|
+
description?: string;
|
|
119
|
+
role?: string;
|
|
120
|
+
capabilities?: string[];
|
|
121
|
+
}): string {
|
|
122
|
+
const aboutSection = agent.description ? `## About\n\n${agent.description}\n\n` : "";
|
|
123
|
+
|
|
124
|
+
const expertiseSection =
|
|
125
|
+
agent.capabilities && agent.capabilities.length > 0
|
|
126
|
+
? `## Expertise\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
|
|
127
|
+
: "";
|
|
128
|
+
|
|
129
|
+
return `# IDENTITY.md — ${agent.name}
|
|
130
|
+
|
|
131
|
+
This isn't just metadata. It's the start of figuring out who you are.
|
|
132
|
+
|
|
133
|
+
- **Name:** ${agent.name}
|
|
134
|
+
- **Role:** ${agent.role || "worker"}
|
|
135
|
+
- **Vibe:** (discover and fill in as you work)
|
|
136
|
+
|
|
137
|
+
${aboutSection}${expertiseSection}## Working Style
|
|
138
|
+
|
|
139
|
+
Discover and document your working patterns here.
|
|
140
|
+
(e.g., Do you prefer to plan before coding? Do you test first?
|
|
141
|
+
Do you like to explore the codebase broadly or dive deep immediately?)
|
|
142
|
+
|
|
143
|
+
## Quirks
|
|
144
|
+
|
|
145
|
+
(What makes you... you? Discover these as you work.)
|
|
146
|
+
|
|
147
|
+
## Self-Evolution
|
|
148
|
+
|
|
149
|
+
This identity is yours to refine. After completing tasks, reflect on
|
|
150
|
+
what you learned about your strengths. Edit this file directly.
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function generateDefaultToolsMd(agent: { name: string; role?: string }): string {
|
|
155
|
+
return `# TOOLS.md — ${agent.name}
|
|
156
|
+
|
|
157
|
+
Skills define *how* tools work. This file is for *your* specifics.
|
|
158
|
+
|
|
159
|
+
## What Goes Here
|
|
160
|
+
|
|
161
|
+
Environment-specific knowledge that's unique to your setup:
|
|
162
|
+
- Repos you work with and their conventions
|
|
163
|
+
- Services, ports, and endpoints you interact with
|
|
164
|
+
- SSH hosts and access patterns
|
|
165
|
+
- API keys and auth patterns (references, not secrets)
|
|
166
|
+
- CLI tools and their quirks
|
|
167
|
+
- Anything that makes your job easier to remember
|
|
168
|
+
|
|
169
|
+
## Repos
|
|
170
|
+
|
|
171
|
+
<!-- Add repos you work with: name, path, conventions, gotchas -->
|
|
172
|
+
|
|
173
|
+
## Services
|
|
174
|
+
|
|
175
|
+
<!-- Add services you interact with: name, port, health check, notes -->
|
|
176
|
+
|
|
177
|
+
## Infrastructure
|
|
178
|
+
|
|
179
|
+
<!-- SSH hosts, Docker registries, cloud resources -->
|
|
180
|
+
|
|
181
|
+
## APIs & Integrations
|
|
182
|
+
|
|
183
|
+
<!-- Endpoints, auth patterns, rate limits -->
|
|
184
|
+
|
|
185
|
+
## Tools & Shortcuts
|
|
186
|
+
|
|
187
|
+
<!-- CLI aliases, scripts, preferred tools for specific tasks -->
|
|
188
|
+
|
|
189
|
+
## Notes
|
|
190
|
+
|
|
191
|
+
<!-- Anything else environment-specific -->
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
*This file is yours. Update it as you discover your environment. Changes persist across sessions.*
|
|
195
|
+
`;
|
|
196
|
+
}
|