@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
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
-- Add VCS provider abstraction: rename github* columns to vcs*, add vcsProvider,
|
|
2
|
+
-- and update source CHECK constraint to include 'gitlab'.
|
|
3
|
+
-- Uses the 12-step table recreation approach since SQLite doesn't support ALTER CHECK.
|
|
4
|
+
|
|
5
|
+
PRAGMA defer_foreign_keys = ON;
|
|
6
|
+
|
|
7
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
8
|
+
-- agent_tasks: recreate with vcs* columns + updated CHECK constraint
|
|
9
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
10
|
+
|
|
11
|
+
CREATE TABLE agent_tasks_new (
|
|
12
|
+
id TEXT PRIMARY KEY,
|
|
13
|
+
agentId TEXT,
|
|
14
|
+
creatorAgentId TEXT,
|
|
15
|
+
task TEXT NOT NULL,
|
|
16
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
17
|
+
source TEXT NOT NULL DEFAULT 'mcp' CHECK(source IN ('mcp', 'slack', 'api', 'github', 'gitlab', 'agentmail', 'system', 'schedule', 'workflow')),
|
|
18
|
+
taskType TEXT,
|
|
19
|
+
tags TEXT DEFAULT '[]',
|
|
20
|
+
priority INTEGER DEFAULT 50,
|
|
21
|
+
dependsOn TEXT DEFAULT '[]',
|
|
22
|
+
offeredTo TEXT,
|
|
23
|
+
offeredAt TEXT,
|
|
24
|
+
acceptedAt TEXT,
|
|
25
|
+
rejectionReason TEXT,
|
|
26
|
+
slackChannelId TEXT,
|
|
27
|
+
slackThreadTs TEXT,
|
|
28
|
+
slackUserId TEXT,
|
|
29
|
+
mentionMessageId TEXT,
|
|
30
|
+
mentionChannelId TEXT,
|
|
31
|
+
vcsProvider TEXT,
|
|
32
|
+
vcsRepo TEXT,
|
|
33
|
+
vcsEventType TEXT,
|
|
34
|
+
vcsNumber INTEGER,
|
|
35
|
+
vcsCommentId INTEGER,
|
|
36
|
+
vcsAuthor TEXT,
|
|
37
|
+
vcsUrl TEXT,
|
|
38
|
+
epicId TEXT REFERENCES epics(id) ON DELETE SET NULL,
|
|
39
|
+
parentTaskId TEXT,
|
|
40
|
+
claudeSessionId TEXT,
|
|
41
|
+
agentmailInboxId TEXT,
|
|
42
|
+
agentmailMessageId TEXT,
|
|
43
|
+
agentmailThreadId TEXT,
|
|
44
|
+
model TEXT,
|
|
45
|
+
scheduleId TEXT,
|
|
46
|
+
workflowRunId TEXT REFERENCES workflow_runs(id),
|
|
47
|
+
workflowRunStepId TEXT REFERENCES workflow_run_steps(id),
|
|
48
|
+
createdAt TEXT NOT NULL,
|
|
49
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
50
|
+
finishedAt TEXT,
|
|
51
|
+
failureReason TEXT,
|
|
52
|
+
output TEXT,
|
|
53
|
+
progress TEXT,
|
|
54
|
+
notifiedAt TEXT
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
-- Copy data, renaming github* → vcs* and adding vcsProvider backfill
|
|
58
|
+
INSERT INTO agent_tasks_new SELECT
|
|
59
|
+
id, agentId, creatorAgentId, task, status, source,
|
|
60
|
+
taskType, tags, priority, dependsOn, offeredTo, offeredAt,
|
|
61
|
+
acceptedAt, rejectionReason, slackChannelId, slackThreadTs, slackUserId,
|
|
62
|
+
mentionMessageId, mentionChannelId,
|
|
63
|
+
CASE WHEN githubRepo IS NOT NULL THEN 'github' ELSE NULL END,
|
|
64
|
+
githubRepo, githubEventType, githubNumber, githubCommentId, githubAuthor, githubUrl,
|
|
65
|
+
epicId, parentTaskId, claudeSessionId,
|
|
66
|
+
agentmailInboxId, agentmailMessageId, agentmailThreadId,
|
|
67
|
+
model, scheduleId, workflowRunId, workflowRunStepId,
|
|
68
|
+
createdAt, lastUpdatedAt, finishedAt, failureReason, output, progress, notifiedAt
|
|
69
|
+
FROM agent_tasks;
|
|
70
|
+
|
|
71
|
+
DROP TABLE agent_tasks;
|
|
72
|
+
ALTER TABLE agent_tasks_new RENAME TO agent_tasks;
|
|
73
|
+
|
|
74
|
+
-- Recreate indexes
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentId ON agent_tasks(agentId);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_status ON agent_tasks(status);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_offeredTo ON agent_tasks(offeredTo);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_taskType ON agent_tasks(taskType);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_epicId ON agent_tasks(epicId);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentmailThreadId ON agent_tasks(agentmailThreadId);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_schedule_id ON agent_tasks(scheduleId);
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_workflow_run ON agent_tasks(workflowRunId);
|
|
83
|
+
|
|
84
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
85
|
+
-- epics: rename github* → vcs* and add vcsProvider
|
|
86
|
+
-- (No CHECK constraint to update, so ALTER TABLE is fine)
|
|
87
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
88
|
+
|
|
89
|
+
ALTER TABLE epics RENAME COLUMN githubRepo TO vcsRepo;
|
|
90
|
+
ALTER TABLE epics RENAME COLUMN githubMilestone TO vcsMilestone;
|
|
91
|
+
ALTER TABLE epics ADD COLUMN vcsProvider TEXT DEFAULT NULL;
|
|
92
|
+
|
|
93
|
+
-- Backfill vcsProvider for epics
|
|
94
|
+
UPDATE epics SET vcsProvider = 'github' WHERE vcsRepo IS NOT NULL;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
-- Workflow Engine Redesign: drop and recreate workflow tables with new schema.
|
|
2
|
+
-- This is a clean-slate migration — no existing workflow data is preserved.
|
|
3
|
+
|
|
4
|
+
-- Disable FK enforcement so we can drop referenced tables
|
|
5
|
+
PRAGMA foreign_keys = OFF;
|
|
6
|
+
|
|
7
|
+
-- NULL out FK columns on agent_tasks that reference workflow tables
|
|
8
|
+
UPDATE agent_tasks SET workflowRunId = NULL, workflowRunStepId = NULL
|
|
9
|
+
WHERE workflowRunId IS NOT NULL OR workflowRunStepId IS NOT NULL;
|
|
10
|
+
|
|
11
|
+
-- Drop old tables in FK-safe order
|
|
12
|
+
DROP TABLE IF EXISTS workflow_run_steps;
|
|
13
|
+
DROP TABLE IF EXISTS workflow_runs;
|
|
14
|
+
DROP TABLE IF EXISTS workflows;
|
|
15
|
+
|
|
16
|
+
-- Recreate workflows with new columns (triggers, cooldown, input; no webhookSecret)
|
|
17
|
+
CREATE TABLE IF NOT EXISTS workflows (
|
|
18
|
+
id TEXT PRIMARY KEY,
|
|
19
|
+
name TEXT NOT NULL UNIQUE,
|
|
20
|
+
description TEXT,
|
|
21
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
22
|
+
definition TEXT NOT NULL,
|
|
23
|
+
triggers TEXT NOT NULL DEFAULT '[]',
|
|
24
|
+
cooldown TEXT,
|
|
25
|
+
input TEXT,
|
|
26
|
+
createdByAgentId TEXT,
|
|
27
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
28
|
+
lastUpdatedAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
-- Recreate workflow_runs with 'skipped' status
|
|
32
|
+
CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
33
|
+
id TEXT PRIMARY KEY,
|
|
34
|
+
workflowId TEXT NOT NULL REFERENCES workflows(id),
|
|
35
|
+
status TEXT NOT NULL DEFAULT 'running'
|
|
36
|
+
CHECK(status IN ('running', 'waiting', 'completed', 'failed', 'skipped')),
|
|
37
|
+
triggerData TEXT,
|
|
38
|
+
context TEXT,
|
|
39
|
+
error TEXT,
|
|
40
|
+
startedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
41
|
+
lastUpdatedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
42
|
+
finishedAt TEXT
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_workflowId ON workflow_runs(workflowId);
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_status ON workflow_runs(status);
|
|
47
|
+
|
|
48
|
+
-- Recreate workflow_run_steps with retry columns
|
|
49
|
+
CREATE TABLE IF NOT EXISTS workflow_run_steps (
|
|
50
|
+
id TEXT PRIMARY KEY,
|
|
51
|
+
runId TEXT NOT NULL REFERENCES workflow_runs(id),
|
|
52
|
+
nodeId TEXT NOT NULL,
|
|
53
|
+
nodeType TEXT NOT NULL,
|
|
54
|
+
status TEXT NOT NULL DEFAULT 'pending'
|
|
55
|
+
CHECK(status IN ('pending', 'running', 'waiting', 'completed', 'failed', 'skipped')),
|
|
56
|
+
input TEXT,
|
|
57
|
+
output TEXT,
|
|
58
|
+
error TEXT,
|
|
59
|
+
startedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
60
|
+
finishedAt TEXT,
|
|
61
|
+
retryCount INTEGER NOT NULL DEFAULT 0,
|
|
62
|
+
maxRetries INTEGER NOT NULL DEFAULT 3,
|
|
63
|
+
nextRetryAt TEXT,
|
|
64
|
+
idempotencyKey TEXT
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_run_steps_runId ON workflow_run_steps(runId);
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_wrs_retry
|
|
69
|
+
ON workflow_run_steps(status, nextRetryAt)
|
|
70
|
+
WHERE status = 'failed' AND nextRetryAt IS NOT NULL;
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_wrs_idempotency ON workflow_run_steps(idempotencyKey);
|
|
72
|
+
|
|
73
|
+
-- New: workflow version history
|
|
74
|
+
CREATE TABLE IF NOT EXISTS workflow_versions (
|
|
75
|
+
id TEXT PRIMARY KEY,
|
|
76
|
+
workflowId TEXT NOT NULL REFERENCES workflows(id) ON DELETE CASCADE,
|
|
77
|
+
version INTEGER NOT NULL,
|
|
78
|
+
snapshot TEXT NOT NULL,
|
|
79
|
+
changedByAgentId TEXT,
|
|
80
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
81
|
+
UNIQUE(workflowId, version)
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
-- Re-enable FK enforcement
|
|
85
|
+
PRAGMA foreign_keys = ON;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
-- Tracker integration: generic OAuth, entity sync mapping, agent mapping tables.
|
|
2
|
+
-- Also adds 'linear' to the agent_tasks source CHECK constraint.
|
|
3
|
+
|
|
4
|
+
PRAGMA defer_foreign_keys = ON;
|
|
5
|
+
|
|
6
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
7
|
+
-- Generic OAuth tables (reusable across any OAuth provider in the swarm)
|
|
8
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
9
|
+
|
|
10
|
+
-- Generic OAuth application configuration (one row per provider)
|
|
11
|
+
CREATE TABLE IF NOT EXISTS oauth_apps (
|
|
12
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
13
|
+
provider TEXT NOT NULL UNIQUE,
|
|
14
|
+
clientId TEXT NOT NULL,
|
|
15
|
+
clientSecret TEXT NOT NULL,
|
|
16
|
+
authorizeUrl TEXT NOT NULL,
|
|
17
|
+
tokenUrl TEXT NOT NULL,
|
|
18
|
+
redirectUri TEXT NOT NULL,
|
|
19
|
+
scopes TEXT NOT NULL,
|
|
20
|
+
metadata TEXT DEFAULT '{}',
|
|
21
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
22
|
+
updatedAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
-- Generic OAuth token storage (one active token set per provider)
|
|
26
|
+
CREATE TABLE IF NOT EXISTS oauth_tokens (
|
|
27
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
28
|
+
provider TEXT NOT NULL UNIQUE,
|
|
29
|
+
accessToken TEXT NOT NULL,
|
|
30
|
+
refreshToken TEXT,
|
|
31
|
+
expiresAt TEXT NOT NULL,
|
|
32
|
+
scope TEXT,
|
|
33
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
34
|
+
updatedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
35
|
+
FOREIGN KEY (provider) REFERENCES oauth_apps(provider)
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
39
|
+
-- Generic tracker tables (reusable across any ticket tracker)
|
|
40
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
41
|
+
|
|
42
|
+
-- Generic tracker entity mapping
|
|
43
|
+
CREATE TABLE IF NOT EXISTS tracker_sync (
|
|
44
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
45
|
+
provider TEXT NOT NULL,
|
|
46
|
+
entityType TEXT NOT NULL CHECK (entityType IN ('task', 'epic')),
|
|
47
|
+
providerEntityType TEXT,
|
|
48
|
+
swarmId TEXT NOT NULL,
|
|
49
|
+
externalId TEXT NOT NULL,
|
|
50
|
+
externalIdentifier TEXT,
|
|
51
|
+
externalUrl TEXT,
|
|
52
|
+
lastSyncedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
53
|
+
lastSyncOrigin TEXT CHECK (lastSyncOrigin IN ('swarm', 'external')),
|
|
54
|
+
lastDeliveryId TEXT,
|
|
55
|
+
syncDirection TEXT NOT NULL DEFAULT 'inbound' CHECK (syncDirection IN ('inbound', 'outbound', 'bidirectional')),
|
|
56
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
57
|
+
UNIQUE(provider, entityType, swarmId),
|
|
58
|
+
UNIQUE(provider, entityType, externalId)
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
-- Generic agent-to-external-user mapping
|
|
62
|
+
CREATE TABLE IF NOT EXISTS tracker_agent_mapping (
|
|
63
|
+
id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))),
|
|
64
|
+
provider TEXT NOT NULL,
|
|
65
|
+
agentId TEXT NOT NULL,
|
|
66
|
+
externalUserId TEXT NOT NULL,
|
|
67
|
+
agentName TEXT NOT NULL,
|
|
68
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
69
|
+
UNIQUE(provider, agentId),
|
|
70
|
+
UNIQUE(provider, externalUserId)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- Indexes
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_oauth_tokens_provider ON oauth_tokens(provider);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_tracker_sync_swarm ON tracker_sync(provider, entityType, swarmId);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_tracker_sync_external ON tracker_sync(provider, entityType, externalId);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_tracker_agent_agentId ON tracker_agent_mapping(provider, agentId);
|
|
78
|
+
|
|
79
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
80
|
+
-- agent_tasks: recreate with 'linear' added to source CHECK constraint
|
|
81
|
+
-- (copied from previous 008_linear_integration.sql lines 54-114)
|
|
82
|
+
-- ═══════════════════════════════════════════════════════════════════
|
|
83
|
+
|
|
84
|
+
CREATE TABLE agent_tasks_new (
|
|
85
|
+
id TEXT PRIMARY KEY,
|
|
86
|
+
agentId TEXT,
|
|
87
|
+
creatorAgentId TEXT,
|
|
88
|
+
task TEXT NOT NULL,
|
|
89
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
90
|
+
source TEXT NOT NULL DEFAULT 'mcp' CHECK(source IN ('mcp', 'slack', 'api', 'github', 'gitlab', 'agentmail', 'system', 'schedule', 'workflow', 'linear')),
|
|
91
|
+
taskType TEXT,
|
|
92
|
+
tags TEXT DEFAULT '[]',
|
|
93
|
+
priority INTEGER DEFAULT 50,
|
|
94
|
+
dependsOn TEXT DEFAULT '[]',
|
|
95
|
+
offeredTo TEXT,
|
|
96
|
+
offeredAt TEXT,
|
|
97
|
+
acceptedAt TEXT,
|
|
98
|
+
rejectionReason TEXT,
|
|
99
|
+
slackChannelId TEXT,
|
|
100
|
+
slackThreadTs TEXT,
|
|
101
|
+
slackUserId TEXT,
|
|
102
|
+
mentionMessageId TEXT,
|
|
103
|
+
mentionChannelId TEXT,
|
|
104
|
+
vcsProvider TEXT,
|
|
105
|
+
vcsRepo TEXT,
|
|
106
|
+
vcsEventType TEXT,
|
|
107
|
+
vcsNumber INTEGER,
|
|
108
|
+
vcsCommentId INTEGER,
|
|
109
|
+
vcsAuthor TEXT,
|
|
110
|
+
vcsUrl TEXT,
|
|
111
|
+
epicId TEXT REFERENCES epics(id) ON DELETE SET NULL,
|
|
112
|
+
parentTaskId TEXT,
|
|
113
|
+
claudeSessionId TEXT,
|
|
114
|
+
agentmailInboxId TEXT,
|
|
115
|
+
agentmailMessageId TEXT,
|
|
116
|
+
agentmailThreadId TEXT,
|
|
117
|
+
model TEXT,
|
|
118
|
+
scheduleId TEXT,
|
|
119
|
+
workflowRunId TEXT REFERENCES workflow_runs(id),
|
|
120
|
+
workflowRunStepId TEXT REFERENCES workflow_run_steps(id),
|
|
121
|
+
createdAt TEXT NOT NULL,
|
|
122
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
123
|
+
finishedAt TEXT,
|
|
124
|
+
failureReason TEXT,
|
|
125
|
+
output TEXT,
|
|
126
|
+
progress TEXT,
|
|
127
|
+
notifiedAt TEXT,
|
|
128
|
+
dir TEXT
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
INSERT INTO agent_tasks_new SELECT * FROM agent_tasks;
|
|
132
|
+
|
|
133
|
+
DROP TABLE agent_tasks;
|
|
134
|
+
ALTER TABLE agent_tasks_new RENAME TO agent_tasks;
|
|
135
|
+
|
|
136
|
+
-- Recreate indexes
|
|
137
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentId ON agent_tasks(agentId);
|
|
138
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_status ON agent_tasks(status);
|
|
139
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_offeredTo ON agent_tasks(offeredTo);
|
|
140
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_taskType ON agent_tasks(taskType);
|
|
141
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_epicId ON agent_tasks(epicId);
|
|
142
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentmailThreadId ON agent_tasks(agentmailThreadId);
|
|
143
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_schedule_id ON agent_tasks(scheduleId);
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_workflow_run ON agent_tasks(workflowRunId);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE workflow_run_steps ADD COLUMN diagnostics TEXT;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE workflow_run_steps ADD COLUMN nextPort TEXT;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE workflows ADD COLUMN triggerSchema TEXT;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
|
|
6
|
+
interface Migration {
|
|
7
|
+
version: number;
|
|
8
|
+
name: string;
|
|
9
|
+
sql: string;
|
|
10
|
+
checksum: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface AppliedMigration {
|
|
14
|
+
version: number;
|
|
15
|
+
name: string;
|
|
16
|
+
checksum: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const BASELINE_TABLES = [
|
|
20
|
+
"agents",
|
|
21
|
+
"channels",
|
|
22
|
+
"epics",
|
|
23
|
+
"agent_tasks",
|
|
24
|
+
"agent_log",
|
|
25
|
+
"channel_messages",
|
|
26
|
+
"channel_read_state",
|
|
27
|
+
"services",
|
|
28
|
+
"session_logs",
|
|
29
|
+
"session_costs",
|
|
30
|
+
"inbox_messages",
|
|
31
|
+
"scheduled_tasks",
|
|
32
|
+
"swarm_config",
|
|
33
|
+
"swarm_repos",
|
|
34
|
+
"agent_memory",
|
|
35
|
+
"active_sessions",
|
|
36
|
+
"agentmail_inbox_mappings",
|
|
37
|
+
"context_versions",
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
function shouldBootstrapInitialMigration(db: Database): boolean {
|
|
41
|
+
const rows = db
|
|
42
|
+
.prepare<{ name: string }, []>(
|
|
43
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE '\\_migrations' ESCAPE '\\'",
|
|
44
|
+
)
|
|
45
|
+
.all();
|
|
46
|
+
|
|
47
|
+
if (rows.length === 0) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const existingTables = new Set(rows.map((row) => row.name));
|
|
52
|
+
return BASELINE_TABLES.every((table) => existingTables.has(table));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Runs all pending database migrations.
|
|
57
|
+
*
|
|
58
|
+
* - Creates the `_migrations` tracking table if it doesn't exist
|
|
59
|
+
* - Reads `.sql` files from the migrations directory (sorted by numeric prefix)
|
|
60
|
+
* - For existing databases (pre-migration-system), bootstraps by marking 001_initial as applied
|
|
61
|
+
* - Applies pending migrations in order, each within its own transaction
|
|
62
|
+
* - Verifies checksums of previously-applied migrations (warns on mismatch)
|
|
63
|
+
*/
|
|
64
|
+
export function runMigrations(db: Database): void {
|
|
65
|
+
// 1. Ensure tracking table exists
|
|
66
|
+
db.run(`
|
|
67
|
+
CREATE TABLE IF NOT EXISTS _migrations (
|
|
68
|
+
version INTEGER PRIMARY KEY,
|
|
69
|
+
name TEXT NOT NULL,
|
|
70
|
+
applied_at TEXT NOT NULL,
|
|
71
|
+
checksum TEXT NOT NULL
|
|
72
|
+
)
|
|
73
|
+
`);
|
|
74
|
+
|
|
75
|
+
// 2. Load migration files
|
|
76
|
+
// import.meta.dir resolves to /$bunfs/root in compiled binaries, which isn't scannable.
|
|
77
|
+
// Fall back to MIGRATIONS_DIR env var (set in Dockerfile) for compiled binary support.
|
|
78
|
+
const migrationsDir = (() => {
|
|
79
|
+
const dir = import.meta.dir;
|
|
80
|
+
try {
|
|
81
|
+
readdirSync(dir);
|
|
82
|
+
return dir;
|
|
83
|
+
} catch {
|
|
84
|
+
const fallback = process.env.MIGRATIONS_DIR;
|
|
85
|
+
if (fallback) return fallback;
|
|
86
|
+
console.warn(
|
|
87
|
+
"[migrations] Cannot read migrations directory and MIGRATIONS_DIR not set — skipping",
|
|
88
|
+
);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
})();
|
|
92
|
+
|
|
93
|
+
if (!migrationsDir) return;
|
|
94
|
+
|
|
95
|
+
const files = readdirSync(migrationsDir)
|
|
96
|
+
.filter((f) => f.endsWith(".sql"))
|
|
97
|
+
.sort();
|
|
98
|
+
|
|
99
|
+
const migrations: Migration[] = files.map((file) => {
|
|
100
|
+
const version = parseInt(file.split("_")[0] ?? "0", 10);
|
|
101
|
+
const name = file.replace(".sql", "");
|
|
102
|
+
const sql = readFileSync(join(migrationsDir, file), "utf-8");
|
|
103
|
+
const checksum = createHash("sha256").update(sql).digest("hex");
|
|
104
|
+
return { version, name, sql, checksum };
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (migrations.length === 0) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// 3. Get applied migrations
|
|
112
|
+
const applied = new Map<number, AppliedMigration>();
|
|
113
|
+
const rows = db
|
|
114
|
+
.prepare("SELECT version, name, checksum FROM _migrations")
|
|
115
|
+
.all() as AppliedMigration[];
|
|
116
|
+
for (const row of rows) {
|
|
117
|
+
applied.set(row.version, {
|
|
118
|
+
version: row.version,
|
|
119
|
+
name: row.name,
|
|
120
|
+
checksum: row.checksum,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// 4. Bootstrap existing databases
|
|
125
|
+
// If no migrations have been applied yet and database tables already exist,
|
|
126
|
+
// this is a pre-migration-system database. Mark 001_initial as applied without
|
|
127
|
+
// executing it (the schema already exists).
|
|
128
|
+
if (applied.size === 0) {
|
|
129
|
+
const initialMigration = migrations.find((m) => m.version === 1);
|
|
130
|
+
if (initialMigration) {
|
|
131
|
+
if (shouldBootstrapInitialMigration(db)) {
|
|
132
|
+
console.log("[migrations] Existing database detected — bootstrapping migration tracking");
|
|
133
|
+
db.run(
|
|
134
|
+
"INSERT INTO _migrations (version, name, applied_at, checksum) VALUES (?, ?, ?, ?)",
|
|
135
|
+
[
|
|
136
|
+
initialMigration.version,
|
|
137
|
+
initialMigration.name,
|
|
138
|
+
new Date().toISOString(),
|
|
139
|
+
initialMigration.checksum,
|
|
140
|
+
],
|
|
141
|
+
);
|
|
142
|
+
applied.set(initialMigration.version, {
|
|
143
|
+
version: initialMigration.version,
|
|
144
|
+
name: initialMigration.name,
|
|
145
|
+
checksum: initialMigration.checksum,
|
|
146
|
+
});
|
|
147
|
+
} else {
|
|
148
|
+
console.log(
|
|
149
|
+
"[migrations] Existing database appears incomplete — applying 001_initial migration",
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// 5. Run pending migrations
|
|
156
|
+
for (const migration of migrations) {
|
|
157
|
+
const existing = applied.get(migration.version);
|
|
158
|
+
|
|
159
|
+
if (existing) {
|
|
160
|
+
// Verify checksum hasn't changed
|
|
161
|
+
if (existing.checksum !== migration.checksum) {
|
|
162
|
+
console.warn(
|
|
163
|
+
`[migrations] WARNING: Migration ${migration.name} checksum mismatch. ` +
|
|
164
|
+
`Applied: ${existing.checksum.slice(0, 12)}..., Current: ${migration.checksum.slice(0, 12)}... ` +
|
|
165
|
+
`Do not modify applied migrations — create a new one instead.`,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Apply migration in a transaction
|
|
172
|
+
console.log(`[migrations] Applying: ${migration.name}`);
|
|
173
|
+
const start = performance.now();
|
|
174
|
+
|
|
175
|
+
db.transaction(() => {
|
|
176
|
+
db.exec(migration.sql);
|
|
177
|
+
db.run("INSERT INTO _migrations (version, name, applied_at, checksum) VALUES (?, ?, ?, ?)", [
|
|
178
|
+
migration.version,
|
|
179
|
+
migration.name,
|
|
180
|
+
new Date().toISOString(),
|
|
181
|
+
migration.checksum,
|
|
182
|
+
]);
|
|
183
|
+
})();
|
|
184
|
+
|
|
185
|
+
const elapsed = (performance.now() - start).toFixed(1);
|
|
186
|
+
console.log(`[migrations] Applied: ${migration.name} (${elapsed}ms)`);
|
|
187
|
+
}
|
|
188
|
+
}
|