@desplega.ai/agent-swarm 1.20.0 → 1.51.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +271 -169
- package/openapi.json +5015 -0
- package/package.json +40 -7
- 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/src/agentmail/app.ts +65 -0
- package/src/agentmail/handlers.ts +262 -0
- package/src/agentmail/index.ts +9 -0
- package/src/agentmail/templates.ts +111 -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 +3327 -784
- 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/014_prompt_templates.sql +33 -0
- package/src/be/migrations/015_workflow_workspace.sql +3 -0
- package/src/be/migrations/016_active_session_runner_session.sql +4 -0
- package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
- package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
- package/src/be/migrations/runner.ts +188 -0
- package/src/be/seed.ts +62 -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 +1540 -630
- package/src/commands/setup.tsx +23 -38
- package/src/commands/shared/client-config.ts +41 -0
- package/src/commands/templates.ts +172 -0
- package/src/github/app.ts +8 -0
- package/src/github/handlers.ts +384 -151
- package/src/github/index.ts +1 -0
- package/src/github/mentions-aliases.test.ts +73 -0
- package/src/github/mentions.test.ts +3 -3
- package/src/github/mentions.ts +32 -6
- package/src/github/templates.ts +398 -0
- package/src/github/types.ts +1 -0
- package/src/gitlab/auth.ts +63 -0
- package/src/gitlab/handlers.ts +368 -0
- package/src/gitlab/index.ts +19 -0
- package/src/gitlab/reactions.ts +104 -0
- package/src/gitlab/templates.ts +140 -0
- package/src/gitlab/types.ts +130 -0
- package/src/heartbeat/heartbeat.ts +434 -0
- package/src/heartbeat/index.ts +1 -0
- package/src/heartbeat/templates.ts +30 -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 +199 -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 +216 -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 +299 -0
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/repos.ts +195 -0
- package/src/http/route-def.ts +123 -0
- package/src/http/schedules.ts +426 -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 +530 -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 +567 -0
- package/src/linear/templates.ts +47 -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 +150 -265
- package/src/prompts/defaults.ts +196 -0
- package/src/prompts/registry.ts +57 -0
- package/src/prompts/resolver.ts +296 -0
- package/src/prompts/session-templates.ts +604 -0
- package/src/providers/claude-adapter.ts +442 -0
- package/src/providers/index.ts +24 -0
- package/src/providers/pi-mono-adapter.ts +442 -0
- package/src/providers/pi-mono-extension.ts +624 -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 +231 -40
- package/src/server.ts +97 -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 +118 -0
- package/src/slack/blocks.ts +233 -0
- package/src/slack/channel-activity.ts +177 -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 +230 -55
- package/src/slack/responses.ts +120 -67
- package/src/slack/router.ts +17 -99
- package/src/slack/templates.ts +55 -0
- 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/channel-activity.test.ts +363 -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 +364 -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 +406 -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/pool-session-logs.test.ts +199 -0
- package/src/tests/progress-dedup.test.ts +98 -0
- package/src/tests/prompt-template-github.test.ts +682 -0
- package/src/tests/prompt-template-remaining.test.ts +504 -0
- package/src/tests/prompt-template-resolver.test.ts +621 -0
- package/src/tests/prompt-template-session.test.ts +363 -0
- package/src/tests/prompt-templates-db.test.ts +616 -0
- package/src/tests/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 +541 -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 +307 -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-agentid.test.ts +248 -0
- package/src/tests/update-profile-api.test.ts +143 -3
- package/src/tests/update-profile-auth.test.ts +195 -0
- 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 +508 -0
- package/src/tests/workflow-convergence.test.ts +541 -0
- package/src/tests/workflow-definition-validation.test.ts +366 -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-schedule-trigger.test.ts +104 -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/workflow-workspace.test.ts +272 -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/prompt-templates/delete.ts +86 -0
- package/src/tools/prompt-templates/get.ts +89 -0
- package/src/tools/prompt-templates/index.ts +5 -0
- package/src/tools/prompt-templates/list.ts +95 -0
- package/src/tools/prompt-templates/preview.ts +84 -0
- package/src/tools/prompt-templates/set.ts +117 -0
- package/src/tools/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 +205 -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 +50 -5
- package/src/tools/task-dedup.ts +97 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +124 -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 +172 -17
- package/src/tools/update-service-status.ts +2 -0
- package/src/tools/utils.ts +10 -1
- package/src/tools/workflows/create-workflow.ts +129 -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 +133 -0
- package/src/tracker/types.ts +51 -0
- package/src/types.ts +530 -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 +235 -0
- package/src/workflows/engine.ts +580 -0
- package/src/workflows/event-bus.ts +29 -0
- package/src/workflows/executors/agent-task.ts +103 -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 +229 -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 +124 -0
- package/src/workflows/validation.ts +104 -0
- package/src/workflows/version.ts +44 -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/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/.claude/settings.local.json +0 -115
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.env.docker.example +0 -39
- package/.env.example +0 -40
- package/.github/workflows/ci.yml +0 -76
- package/.github/workflows/docker-and-deploy.yml +0 -117
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -102
- package/CLAUDE.md +0 -104
- package/CONTRIBUTING.md +0 -270
- package/DEPLOYMENT.md +0 -605
- package/Dockerfile +0 -57
- package/Dockerfile.worker +0 -157
- package/FAQ.md +0 -19
- package/MCP.md +0 -406
- package/UI.md +0 -40
- package/assets/agent-swarm-logo-orange.png +0 -0
- package/assets/agent-swarm-logo.png +0 -0
- package/assets/agent-swarm.mp4 +0 -0
- package/assets/agent-swarm.png +0 -0
- package/biome.json +0 -39
- package/deploy/DEPLOY.md +0 -60
- package/deploy/agent-swarm.service +0 -17
- package/deploy/docker-push.ts +0 -30
- package/deploy/install.ts +0 -85
- package/deploy/prod-db.ts +0 -42
- package/deploy/uninstall.ts +0 -12
- package/deploy/update.ts +0 -21
- package/docker-compose.example.yml +0 -159
- package/docker-entrypoint.sh +0 -352
- package/ecosystem.config.cjs +0 -66
- package/plugin/README.md +0 -1
- package/plugin/hooks/hooks.json +0 -71
- package/pyproject.toml +0 -9
- package/scripts/generate-mcp-docs.ts +0 -415
- package/slack-manifest.json +0 -71
- 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/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
- package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
- package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
- package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
- package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
- package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
- package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
- package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
- package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
- package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
- package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
- package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
- package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
- package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
- package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
- package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
- package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
- package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
- package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
- package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
- package/thoughts/shared/research/.gitkeep +0 -0
- package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
- package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
- package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
- package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
- package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
- package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
- package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
- package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
- package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
- package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
- package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
- package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
- package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
- package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
- package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
- package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
- package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
- package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
- package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
- package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
- package/tsconfig.json +0 -37
- 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/public/logo.png +0 -0
- 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/hooks/useAutoScroll.ts +0 -83
- 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/lib/utils.ts +0 -88
- package/ui/src/main.tsx +0 -28
- package/ui/src/types/api.ts +0 -323
- package/ui/src/vite-env.d.ts +0 -1
- package/ui/tailwind.config.js +0 -37
- package/ui/tsconfig.json +0 -31
- package/ui/vite.config.ts +0 -35
- /package/{thoughts/shared/plans → templates/community}/.gitkeep +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
|
|
3
|
+
let openai: OpenAI | null = null;
|
|
4
|
+
|
|
5
|
+
function getClient(): OpenAI | null {
|
|
6
|
+
if (!process.env.OPENAI_API_KEY) return null;
|
|
7
|
+
if (!openai) openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
|
8
|
+
return openai;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generate an embedding vector for the given text using OpenAI text-embedding-3-small (512 dims).
|
|
13
|
+
* Returns null if OPENAI_API_KEY is not set or the API call fails.
|
|
14
|
+
*/
|
|
15
|
+
export async function getEmbedding(text: string): Promise<Float32Array | null> {
|
|
16
|
+
const client = getClient();
|
|
17
|
+
if (!client) return null;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const cleaned = text.replace(/[\n\r]/g, " ").trim();
|
|
21
|
+
if (!cleaned) return null;
|
|
22
|
+
|
|
23
|
+
const response = await client.embeddings.create({
|
|
24
|
+
model: "text-embedding-3-small",
|
|
25
|
+
input: cleaned,
|
|
26
|
+
dimensions: 512,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const values = response.data[0]?.embedding;
|
|
30
|
+
if (!values) return null;
|
|
31
|
+
|
|
32
|
+
return new Float32Array(values);
|
|
33
|
+
} catch (err) {
|
|
34
|
+
console.error("[memory] Embedding failed:", (err as Error).message);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Compute cosine similarity between two Float32Array vectors.
|
|
41
|
+
* Returns a value between -1 and 1 (1 = identical, 0 = orthogonal, -1 = opposite).
|
|
42
|
+
*/
|
|
43
|
+
export function cosineSimilarity(a: Float32Array, b: Float32Array): number {
|
|
44
|
+
if (a.length !== b.length) throw new Error("Vectors must have the same length");
|
|
45
|
+
if (a.length === 0) return 0;
|
|
46
|
+
|
|
47
|
+
let dotProduct = 0;
|
|
48
|
+
let normA = 0;
|
|
49
|
+
let normB = 0;
|
|
50
|
+
|
|
51
|
+
for (let i = 0; i < a.length; i++) {
|
|
52
|
+
const ai = a[i]!;
|
|
53
|
+
const bi = b[i]!;
|
|
54
|
+
dotProduct += ai * bi;
|
|
55
|
+
normA += ai * ai;
|
|
56
|
+
normB += bi * bi;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
60
|
+
if (denominator === 0) return 0;
|
|
61
|
+
|
|
62
|
+
return dotProduct / denominator;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Serialize a Float32Array embedding to a Buffer for SQLite BLOB storage.
|
|
67
|
+
*/
|
|
68
|
+
export function serializeEmbedding(embedding: Float32Array): Buffer {
|
|
69
|
+
return Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Deserialize a Buffer from SQLite BLOB storage back to a Float32Array.
|
|
74
|
+
*/
|
|
75
|
+
export function deserializeEmbedding(buffer: Buffer): Float32Array {
|
|
76
|
+
const copy = new ArrayBuffer(buffer.length);
|
|
77
|
+
const view = new Uint8Array(copy);
|
|
78
|
+
view.set(buffer);
|
|
79
|
+
return new Float32Array(copy);
|
|
80
|
+
}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
-- 001_initial.sql
|
|
2
|
+
-- Baseline migration: Collapsed schema of all 18 tables, all indexes, and default data.
|
|
3
|
+
-- This represents the complete schema as of the migration system introduction.
|
|
4
|
+
-- For existing databases, this migration is marked as applied without execution (bootstrap).
|
|
5
|
+
|
|
6
|
+
-- ============================================================================
|
|
7
|
+
-- TABLES
|
|
8
|
+
-- ============================================================================
|
|
9
|
+
|
|
10
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
11
|
+
id TEXT PRIMARY KEY,
|
|
12
|
+
name TEXT NOT NULL,
|
|
13
|
+
isLead INTEGER NOT NULL DEFAULT 0,
|
|
14
|
+
status TEXT NOT NULL CHECK(status IN ('idle', 'busy', 'offline')),
|
|
15
|
+
description TEXT,
|
|
16
|
+
role TEXT,
|
|
17
|
+
capabilities TEXT DEFAULT '[]',
|
|
18
|
+
maxTasks INTEGER DEFAULT 1,
|
|
19
|
+
emptyPollCount INTEGER DEFAULT 0,
|
|
20
|
+
claudeMd TEXT,
|
|
21
|
+
soulMd TEXT,
|
|
22
|
+
identityMd TEXT,
|
|
23
|
+
setupScript TEXT,
|
|
24
|
+
toolsMd TEXT,
|
|
25
|
+
lastActivityAt TEXT,
|
|
26
|
+
createdAt TEXT NOT NULL,
|
|
27
|
+
lastUpdatedAt TEXT NOT NULL
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
CREATE TABLE IF NOT EXISTS channels (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
name TEXT NOT NULL UNIQUE,
|
|
33
|
+
description TEXT,
|
|
34
|
+
type TEXT NOT NULL DEFAULT 'public' CHECK(type IN ('public', 'dm')),
|
|
35
|
+
createdBy TEXT,
|
|
36
|
+
participants TEXT DEFAULT '[]',
|
|
37
|
+
createdAt TEXT NOT NULL,
|
|
38
|
+
FOREIGN KEY (createdBy) REFERENCES agents(id) ON DELETE SET NULL
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
CREATE TABLE IF NOT EXISTS epics (
|
|
42
|
+
id TEXT PRIMARY KEY,
|
|
43
|
+
name TEXT NOT NULL UNIQUE,
|
|
44
|
+
description TEXT,
|
|
45
|
+
goal TEXT NOT NULL,
|
|
46
|
+
prd TEXT,
|
|
47
|
+
plan TEXT,
|
|
48
|
+
status TEXT NOT NULL DEFAULT 'draft' CHECK(status IN ('draft', 'active', 'paused', 'completed', 'cancelled')),
|
|
49
|
+
priority INTEGER DEFAULT 50,
|
|
50
|
+
tags TEXT DEFAULT '[]',
|
|
51
|
+
createdByAgentId TEXT,
|
|
52
|
+
leadAgentId TEXT,
|
|
53
|
+
channelId TEXT,
|
|
54
|
+
researchDocPath TEXT,
|
|
55
|
+
planDocPath TEXT,
|
|
56
|
+
slackChannelId TEXT,
|
|
57
|
+
slackThreadTs TEXT,
|
|
58
|
+
githubRepo TEXT,
|
|
59
|
+
githubMilestone TEXT,
|
|
60
|
+
progressNotifiedAt TEXT,
|
|
61
|
+
createdAt TEXT NOT NULL,
|
|
62
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
63
|
+
startedAt TEXT,
|
|
64
|
+
completedAt TEXT,
|
|
65
|
+
FOREIGN KEY (createdByAgentId) REFERENCES agents(id) ON DELETE SET NULL,
|
|
66
|
+
FOREIGN KEY (leadAgentId) REFERENCES agents(id) ON DELETE SET NULL,
|
|
67
|
+
FOREIGN KEY (channelId) REFERENCES channels(id) ON DELETE SET NULL
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
CREATE TABLE IF NOT EXISTS agent_tasks (
|
|
71
|
+
id TEXT PRIMARY KEY,
|
|
72
|
+
agentId TEXT,
|
|
73
|
+
creatorAgentId TEXT,
|
|
74
|
+
task TEXT NOT NULL,
|
|
75
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
76
|
+
source TEXT NOT NULL DEFAULT 'mcp' CHECK(source IN ('mcp', 'slack', 'api', 'github', 'agentmail', 'system', 'schedule')),
|
|
77
|
+
taskType TEXT,
|
|
78
|
+
tags TEXT DEFAULT '[]',
|
|
79
|
+
priority INTEGER DEFAULT 50,
|
|
80
|
+
dependsOn TEXT DEFAULT '[]',
|
|
81
|
+
offeredTo TEXT,
|
|
82
|
+
offeredAt TEXT,
|
|
83
|
+
acceptedAt TEXT,
|
|
84
|
+
rejectionReason TEXT,
|
|
85
|
+
slackChannelId TEXT,
|
|
86
|
+
slackThreadTs TEXT,
|
|
87
|
+
slackUserId TEXT,
|
|
88
|
+
mentionMessageId TEXT,
|
|
89
|
+
mentionChannelId TEXT,
|
|
90
|
+
githubRepo TEXT,
|
|
91
|
+
githubEventType TEXT,
|
|
92
|
+
githubNumber INTEGER,
|
|
93
|
+
githubCommentId INTEGER,
|
|
94
|
+
githubAuthor TEXT,
|
|
95
|
+
githubUrl TEXT,
|
|
96
|
+
epicId TEXT REFERENCES epics(id) ON DELETE SET NULL,
|
|
97
|
+
parentTaskId TEXT,
|
|
98
|
+
claudeSessionId TEXT,
|
|
99
|
+
agentmailInboxId TEXT,
|
|
100
|
+
agentmailMessageId TEXT,
|
|
101
|
+
agentmailThreadId TEXT,
|
|
102
|
+
model TEXT,
|
|
103
|
+
scheduleId TEXT,
|
|
104
|
+
createdAt TEXT NOT NULL,
|
|
105
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
106
|
+
finishedAt TEXT,
|
|
107
|
+
failureReason TEXT,
|
|
108
|
+
output TEXT,
|
|
109
|
+
progress TEXT,
|
|
110
|
+
notifiedAt TEXT
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
CREATE TABLE IF NOT EXISTS agent_log (
|
|
114
|
+
id TEXT PRIMARY KEY,
|
|
115
|
+
eventType TEXT NOT NULL,
|
|
116
|
+
agentId TEXT,
|
|
117
|
+
taskId TEXT,
|
|
118
|
+
oldValue TEXT,
|
|
119
|
+
newValue TEXT,
|
|
120
|
+
metadata TEXT,
|
|
121
|
+
createdAt TEXT NOT NULL
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
CREATE TABLE IF NOT EXISTS channel_messages (
|
|
125
|
+
id TEXT PRIMARY KEY,
|
|
126
|
+
channelId TEXT NOT NULL,
|
|
127
|
+
agentId TEXT,
|
|
128
|
+
content TEXT NOT NULL,
|
|
129
|
+
replyToId TEXT,
|
|
130
|
+
mentions TEXT DEFAULT '[]',
|
|
131
|
+
createdAt TEXT NOT NULL,
|
|
132
|
+
FOREIGN KEY (channelId) REFERENCES channels(id) ON DELETE CASCADE,
|
|
133
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE,
|
|
134
|
+
FOREIGN KEY (replyToId) REFERENCES channel_messages(id) ON DELETE SET NULL
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
CREATE TABLE IF NOT EXISTS channel_read_state (
|
|
138
|
+
agentId TEXT NOT NULL,
|
|
139
|
+
channelId TEXT NOT NULL,
|
|
140
|
+
lastReadAt TEXT NOT NULL,
|
|
141
|
+
processing_since TEXT,
|
|
142
|
+
PRIMARY KEY (agentId, channelId),
|
|
143
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE,
|
|
144
|
+
FOREIGN KEY (channelId) REFERENCES channels(id) ON DELETE CASCADE
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
CREATE TABLE IF NOT EXISTS services (
|
|
148
|
+
id TEXT PRIMARY KEY,
|
|
149
|
+
agentId TEXT NOT NULL,
|
|
150
|
+
name TEXT NOT NULL,
|
|
151
|
+
port INTEGER NOT NULL DEFAULT 3000,
|
|
152
|
+
description TEXT,
|
|
153
|
+
url TEXT,
|
|
154
|
+
healthCheckPath TEXT DEFAULT '/health',
|
|
155
|
+
status TEXT NOT NULL DEFAULT 'starting' CHECK(status IN ('starting', 'healthy', 'unhealthy', 'stopped')),
|
|
156
|
+
script TEXT NOT NULL DEFAULT '',
|
|
157
|
+
cwd TEXT,
|
|
158
|
+
interpreter TEXT,
|
|
159
|
+
args TEXT,
|
|
160
|
+
env TEXT,
|
|
161
|
+
metadata TEXT DEFAULT '{}',
|
|
162
|
+
createdAt TEXT NOT NULL,
|
|
163
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
164
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE,
|
|
165
|
+
UNIQUE(agentId, name)
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
CREATE TABLE IF NOT EXISTS session_logs (
|
|
169
|
+
id TEXT PRIMARY KEY,
|
|
170
|
+
taskId TEXT,
|
|
171
|
+
sessionId TEXT NOT NULL,
|
|
172
|
+
iteration INTEGER NOT NULL,
|
|
173
|
+
cli TEXT NOT NULL DEFAULT 'claude',
|
|
174
|
+
content TEXT NOT NULL,
|
|
175
|
+
lineNumber INTEGER NOT NULL,
|
|
176
|
+
createdAt TEXT NOT NULL
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
CREATE TABLE IF NOT EXISTS session_costs (
|
|
180
|
+
id TEXT PRIMARY KEY,
|
|
181
|
+
sessionId TEXT NOT NULL,
|
|
182
|
+
taskId TEXT,
|
|
183
|
+
agentId TEXT NOT NULL,
|
|
184
|
+
totalCostUsd REAL NOT NULL,
|
|
185
|
+
inputTokens INTEGER NOT NULL DEFAULT 0,
|
|
186
|
+
outputTokens INTEGER NOT NULL DEFAULT 0,
|
|
187
|
+
cacheReadTokens INTEGER NOT NULL DEFAULT 0,
|
|
188
|
+
cacheWriteTokens INTEGER NOT NULL DEFAULT 0,
|
|
189
|
+
durationMs INTEGER NOT NULL,
|
|
190
|
+
numTurns INTEGER NOT NULL,
|
|
191
|
+
model TEXT NOT NULL,
|
|
192
|
+
isError INTEGER NOT NULL DEFAULT 0,
|
|
193
|
+
createdAt TEXT NOT NULL,
|
|
194
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE,
|
|
195
|
+
FOREIGN KEY (taskId) REFERENCES agent_tasks(id) ON DELETE SET NULL
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
CREATE TABLE IF NOT EXISTS inbox_messages (
|
|
199
|
+
id TEXT PRIMARY KEY,
|
|
200
|
+
agentId TEXT NOT NULL,
|
|
201
|
+
content TEXT NOT NULL,
|
|
202
|
+
source TEXT NOT NULL DEFAULT 'slack',
|
|
203
|
+
status TEXT NOT NULL DEFAULT 'unread' CHECK(status IN ('unread', 'processing', 'read', 'responded', 'delegated')),
|
|
204
|
+
slackChannelId TEXT,
|
|
205
|
+
slackThreadTs TEXT,
|
|
206
|
+
slackUserId TEXT,
|
|
207
|
+
matchedText TEXT,
|
|
208
|
+
delegatedToTaskId TEXT,
|
|
209
|
+
responseText TEXT,
|
|
210
|
+
createdAt TEXT NOT NULL,
|
|
211
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
212
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE,
|
|
213
|
+
FOREIGN KEY (delegatedToTaskId) REFERENCES agent_tasks(id) ON DELETE SET NULL
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
CREATE TABLE IF NOT EXISTS scheduled_tasks (
|
|
217
|
+
id TEXT PRIMARY KEY,
|
|
218
|
+
name TEXT NOT NULL UNIQUE,
|
|
219
|
+
description TEXT,
|
|
220
|
+
cronExpression TEXT,
|
|
221
|
+
intervalMs INTEGER,
|
|
222
|
+
taskTemplate TEXT NOT NULL,
|
|
223
|
+
taskType TEXT,
|
|
224
|
+
tags TEXT DEFAULT '[]',
|
|
225
|
+
priority INTEGER DEFAULT 50,
|
|
226
|
+
targetAgentId TEXT,
|
|
227
|
+
enabled INTEGER DEFAULT 1,
|
|
228
|
+
lastRunAt TEXT,
|
|
229
|
+
nextRunAt TEXT,
|
|
230
|
+
createdByAgentId TEXT,
|
|
231
|
+
timezone TEXT DEFAULT 'UTC',
|
|
232
|
+
consecutiveErrors INTEGER DEFAULT 0,
|
|
233
|
+
lastErrorAt TEXT,
|
|
234
|
+
lastErrorMessage TEXT,
|
|
235
|
+
model TEXT,
|
|
236
|
+
scheduleType TEXT NOT NULL DEFAULT 'recurring' CHECK(scheduleType IN ('recurring', 'one_time')),
|
|
237
|
+
createdAt TEXT NOT NULL,
|
|
238
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
239
|
+
CHECK (
|
|
240
|
+
(scheduleType = 'recurring' AND (cronExpression IS NOT NULL OR intervalMs IS NOT NULL))
|
|
241
|
+
OR
|
|
242
|
+
(scheduleType = 'one_time')
|
|
243
|
+
)
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
CREATE TABLE IF NOT EXISTS swarm_config (
|
|
247
|
+
id TEXT PRIMARY KEY,
|
|
248
|
+
scope TEXT NOT NULL CHECK(scope IN ('global', 'agent', 'repo')),
|
|
249
|
+
scopeId TEXT,
|
|
250
|
+
key TEXT NOT NULL,
|
|
251
|
+
value TEXT NOT NULL,
|
|
252
|
+
isSecret INTEGER NOT NULL DEFAULT 0,
|
|
253
|
+
envPath TEXT,
|
|
254
|
+
description TEXT,
|
|
255
|
+
createdAt TEXT NOT NULL,
|
|
256
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
257
|
+
UNIQUE(scope, scopeId, key)
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
CREATE TABLE IF NOT EXISTS swarm_repos (
|
|
261
|
+
id TEXT PRIMARY KEY,
|
|
262
|
+
url TEXT NOT NULL UNIQUE,
|
|
263
|
+
name TEXT NOT NULL UNIQUE,
|
|
264
|
+
clonePath TEXT NOT NULL UNIQUE,
|
|
265
|
+
defaultBranch TEXT NOT NULL DEFAULT 'main',
|
|
266
|
+
autoClone INTEGER NOT NULL DEFAULT 1,
|
|
267
|
+
createdAt TEXT NOT NULL,
|
|
268
|
+
lastUpdatedAt TEXT NOT NULL
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
CREATE TABLE IF NOT EXISTS agent_memory (
|
|
272
|
+
id TEXT PRIMARY KEY,
|
|
273
|
+
agentId TEXT,
|
|
274
|
+
scope TEXT NOT NULL CHECK(scope IN ('agent', 'swarm')),
|
|
275
|
+
name TEXT NOT NULL,
|
|
276
|
+
content TEXT NOT NULL,
|
|
277
|
+
summary TEXT,
|
|
278
|
+
embedding BLOB,
|
|
279
|
+
source TEXT NOT NULL CHECK(source IN ('manual', 'file_index', 'session_summary', 'task_completion')),
|
|
280
|
+
sourceTaskId TEXT,
|
|
281
|
+
sourcePath TEXT,
|
|
282
|
+
chunkIndex INTEGER DEFAULT 0,
|
|
283
|
+
totalChunks INTEGER DEFAULT 1,
|
|
284
|
+
tags TEXT DEFAULT '[]',
|
|
285
|
+
createdAt TEXT NOT NULL,
|
|
286
|
+
accessedAt TEXT NOT NULL
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
CREATE TABLE IF NOT EXISTS active_sessions (
|
|
290
|
+
id TEXT PRIMARY KEY,
|
|
291
|
+
agentId TEXT NOT NULL,
|
|
292
|
+
taskId TEXT UNIQUE,
|
|
293
|
+
triggerType TEXT NOT NULL,
|
|
294
|
+
inboxMessageId TEXT,
|
|
295
|
+
taskDescription TEXT,
|
|
296
|
+
startedAt TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
297
|
+
lastHeartbeatAt TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
298
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
CREATE TABLE IF NOT EXISTS agentmail_inbox_mappings (
|
|
302
|
+
id TEXT PRIMARY KEY,
|
|
303
|
+
inboxId TEXT NOT NULL UNIQUE,
|
|
304
|
+
agentId TEXT NOT NULL,
|
|
305
|
+
inboxEmail TEXT,
|
|
306
|
+
createdAt TEXT NOT NULL,
|
|
307
|
+
FOREIGN KEY (agentId) REFERENCES agents(id)
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
CREATE TABLE IF NOT EXISTS context_versions (
|
|
311
|
+
id TEXT PRIMARY KEY,
|
|
312
|
+
agentId TEXT NOT NULL,
|
|
313
|
+
field TEXT NOT NULL,
|
|
314
|
+
content TEXT NOT NULL,
|
|
315
|
+
version INTEGER NOT NULL,
|
|
316
|
+
changeSource TEXT NOT NULL,
|
|
317
|
+
changedByAgentId TEXT,
|
|
318
|
+
changeReason TEXT,
|
|
319
|
+
contentHash TEXT NOT NULL,
|
|
320
|
+
previousVersionId TEXT,
|
|
321
|
+
createdAt TEXT NOT NULL,
|
|
322
|
+
FOREIGN KEY (agentId) REFERENCES agents(id) ON DELETE CASCADE,
|
|
323
|
+
FOREIGN KEY (changedByAgentId) REFERENCES agents(id) ON DELETE SET NULL,
|
|
324
|
+
FOREIGN KEY (previousVersionId) REFERENCES context_versions(id) ON DELETE SET NULL
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
-- ============================================================================
|
|
328
|
+
-- INDEXES
|
|
329
|
+
-- ============================================================================
|
|
330
|
+
|
|
331
|
+
-- agent_tasks indexes
|
|
332
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentId ON agent_tasks(agentId);
|
|
333
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_status ON agent_tasks(status);
|
|
334
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_offeredTo ON agent_tasks(offeredTo);
|
|
335
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_taskType ON agent_tasks(taskType);
|
|
336
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_epicId ON agent_tasks(epicId);
|
|
337
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentmailThreadId ON agent_tasks(agentmailThreadId);
|
|
338
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_schedule_id ON agent_tasks(scheduleId);
|
|
339
|
+
|
|
340
|
+
-- agent_log indexes
|
|
341
|
+
CREATE INDEX IF NOT EXISTS idx_agent_log_agentId ON agent_log(agentId);
|
|
342
|
+
CREATE INDEX IF NOT EXISTS idx_agent_log_taskId ON agent_log(taskId);
|
|
343
|
+
CREATE INDEX IF NOT EXISTS idx_agent_log_eventType ON agent_log(eventType);
|
|
344
|
+
CREATE INDEX IF NOT EXISTS idx_agent_log_createdAt ON agent_log(createdAt);
|
|
345
|
+
|
|
346
|
+
-- channel_messages indexes
|
|
347
|
+
CREATE INDEX IF NOT EXISTS idx_channel_messages_channelId ON channel_messages(channelId);
|
|
348
|
+
CREATE INDEX IF NOT EXISTS idx_channel_messages_agentId ON channel_messages(agentId);
|
|
349
|
+
CREATE INDEX IF NOT EXISTS idx_channel_messages_createdAt ON channel_messages(createdAt);
|
|
350
|
+
|
|
351
|
+
-- services indexes
|
|
352
|
+
CREATE INDEX IF NOT EXISTS idx_services_agentId ON services(agentId);
|
|
353
|
+
CREATE INDEX IF NOT EXISTS idx_services_status ON services(status);
|
|
354
|
+
|
|
355
|
+
-- session_logs indexes
|
|
356
|
+
CREATE INDEX IF NOT EXISTS idx_session_logs_taskId ON session_logs(taskId);
|
|
357
|
+
CREATE INDEX IF NOT EXISTS idx_session_logs_sessionId ON session_logs(sessionId);
|
|
358
|
+
|
|
359
|
+
-- session_costs indexes
|
|
360
|
+
CREATE INDEX IF NOT EXISTS idx_session_costs_createdAt ON session_costs(createdAt);
|
|
361
|
+
CREATE INDEX IF NOT EXISTS idx_session_costs_taskId ON session_costs(taskId);
|
|
362
|
+
CREATE INDEX IF NOT EXISTS idx_session_costs_agentId ON session_costs(agentId);
|
|
363
|
+
CREATE INDEX IF NOT EXISTS idx_session_costs_agent_createdAt ON session_costs(agentId, createdAt);
|
|
364
|
+
|
|
365
|
+
-- inbox_messages indexes
|
|
366
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_messages_agentId ON inbox_messages(agentId);
|
|
367
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_messages_status ON inbox_messages(status);
|
|
368
|
+
|
|
369
|
+
-- scheduled_tasks indexes
|
|
370
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_enabled ON scheduled_tasks(enabled);
|
|
371
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_nextRunAt ON scheduled_tasks(nextRunAt);
|
|
372
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_type ON scheduled_tasks(scheduleType);
|
|
373
|
+
|
|
374
|
+
-- epics indexes
|
|
375
|
+
CREATE INDEX IF NOT EXISTS idx_epics_status ON epics(status);
|
|
376
|
+
CREATE INDEX IF NOT EXISTS idx_epics_createdByAgentId ON epics(createdByAgentId);
|
|
377
|
+
CREATE INDEX IF NOT EXISTS idx_epics_leadAgentId ON epics(leadAgentId);
|
|
378
|
+
|
|
379
|
+
-- swarm_config indexes
|
|
380
|
+
CREATE INDEX IF NOT EXISTS idx_swarm_config_scope ON swarm_config(scope);
|
|
381
|
+
CREATE INDEX IF NOT EXISTS idx_swarm_config_scope_id ON swarm_config(scope, scopeId);
|
|
382
|
+
CREATE INDEX IF NOT EXISTS idx_swarm_config_key ON swarm_config(key);
|
|
383
|
+
|
|
384
|
+
-- swarm_repos indexes
|
|
385
|
+
CREATE INDEX IF NOT EXISTS idx_swarm_repos_name ON swarm_repos(name);
|
|
386
|
+
|
|
387
|
+
-- agent_memory indexes
|
|
388
|
+
CREATE INDEX IF NOT EXISTS idx_agent_memory_agent ON agent_memory(agentId);
|
|
389
|
+
CREATE INDEX IF NOT EXISTS idx_agent_memory_scope ON agent_memory(scope);
|
|
390
|
+
CREATE INDEX IF NOT EXISTS idx_agent_memory_source ON agent_memory(source);
|
|
391
|
+
CREATE INDEX IF NOT EXISTS idx_agent_memory_created ON agent_memory(createdAt);
|
|
392
|
+
CREATE INDEX IF NOT EXISTS idx_agent_memory_source_path ON agent_memory(sourcePath);
|
|
393
|
+
|
|
394
|
+
-- active_sessions indexes
|
|
395
|
+
CREATE INDEX IF NOT EXISTS idx_active_sessions_agent ON active_sessions(agentId);
|
|
396
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_active_sessions_taskId ON active_sessions(taskId);
|
|
397
|
+
|
|
398
|
+
-- context_versions indexes
|
|
399
|
+
CREATE INDEX IF NOT EXISTS idx_cv_agent_field ON context_versions(agentId, field, version DESC);
|
|
400
|
+
CREATE INDEX IF NOT EXISTS idx_cv_agent_created ON context_versions(agentId, createdAt DESC);
|
|
401
|
+
CREATE INDEX IF NOT EXISTS idx_cv_hash ON context_versions(agentId, field, contentHash);
|
|
402
|
+
|
|
403
|
+
-- ============================================================================
|
|
404
|
+
-- SEED DATA
|
|
405
|
+
-- ============================================================================
|
|
406
|
+
|
|
407
|
+
-- Default general channel
|
|
408
|
+
INSERT OR IGNORE INTO channels (id, name, description, type, createdAt)
|
|
409
|
+
VALUES ('00000000-0000-4000-8000-000000000001', 'general', 'Default channel for all agents', 'public', strftime('%Y-%m-%dT%H:%M:%fZ', 'now'));
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
-- 002_one_time_schedules.sql
|
|
2
|
+
-- Add scheduleType column to scheduled_tasks and relax CHECK constraint
|
|
3
|
+
-- to allow one-time schedules without cronExpression or intervalMs.
|
|
4
|
+
|
|
5
|
+
-- Step 1: Rename existing table
|
|
6
|
+
ALTER TABLE scheduled_tasks RENAME TO _scheduled_tasks_old;
|
|
7
|
+
|
|
8
|
+
-- Step 2: Create new table with scheduleType and updated constraints
|
|
9
|
+
CREATE TABLE scheduled_tasks (
|
|
10
|
+
id TEXT PRIMARY KEY,
|
|
11
|
+
name TEXT NOT NULL UNIQUE,
|
|
12
|
+
description TEXT,
|
|
13
|
+
cronExpression TEXT,
|
|
14
|
+
intervalMs INTEGER,
|
|
15
|
+
taskTemplate TEXT NOT NULL,
|
|
16
|
+
taskType TEXT,
|
|
17
|
+
tags TEXT DEFAULT '[]',
|
|
18
|
+
priority INTEGER DEFAULT 50,
|
|
19
|
+
targetAgentId TEXT,
|
|
20
|
+
enabled INTEGER DEFAULT 1,
|
|
21
|
+
lastRunAt TEXT,
|
|
22
|
+
nextRunAt TEXT,
|
|
23
|
+
createdByAgentId TEXT,
|
|
24
|
+
timezone TEXT DEFAULT 'UTC',
|
|
25
|
+
consecutiveErrors INTEGER DEFAULT 0,
|
|
26
|
+
lastErrorAt TEXT,
|
|
27
|
+
lastErrorMessage TEXT,
|
|
28
|
+
model TEXT,
|
|
29
|
+
scheduleType TEXT NOT NULL DEFAULT 'recurring' CHECK(scheduleType IN ('recurring', 'one_time')),
|
|
30
|
+
createdAt TEXT NOT NULL,
|
|
31
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
32
|
+
CHECK (
|
|
33
|
+
(scheduleType = 'recurring' AND (cronExpression IS NOT NULL OR intervalMs IS NOT NULL))
|
|
34
|
+
OR
|
|
35
|
+
(scheduleType = 'one_time')
|
|
36
|
+
)
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
-- Step 3: Copy data with explicit columns (all existing schedules are 'recurring')
|
|
40
|
+
INSERT INTO scheduled_tasks (
|
|
41
|
+
id, name, description, cronExpression, intervalMs, taskTemplate,
|
|
42
|
+
taskType, tags, priority, targetAgentId, enabled, lastRunAt, nextRunAt,
|
|
43
|
+
createdByAgentId, timezone, consecutiveErrors, lastErrorAt, lastErrorMessage,
|
|
44
|
+
model, scheduleType, createdAt, lastUpdatedAt
|
|
45
|
+
)
|
|
46
|
+
SELECT
|
|
47
|
+
id, name, description, cronExpression, intervalMs, taskTemplate,
|
|
48
|
+
taskType, tags, priority, targetAgentId, enabled, lastRunAt, nextRunAt,
|
|
49
|
+
createdByAgentId, timezone, consecutiveErrors, lastErrorAt, lastErrorMessage,
|
|
50
|
+
model, 'recurring', createdAt, lastUpdatedAt
|
|
51
|
+
FROM _scheduled_tasks_old;
|
|
52
|
+
|
|
53
|
+
-- Step 4: Drop old table
|
|
54
|
+
DROP TABLE _scheduled_tasks_old;
|
|
55
|
+
|
|
56
|
+
-- Step 5: Recreate indexes
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_enabled ON scheduled_tasks(enabled);
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_nextRunAt ON scheduled_tasks(nextRunAt);
|
|
59
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_type ON scheduled_tasks(scheduleType);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-- Workflow definitions
|
|
2
|
+
CREATE TABLE IF NOT EXISTS workflows (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
name TEXT NOT NULL UNIQUE,
|
|
5
|
+
description TEXT,
|
|
6
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
7
|
+
definition TEXT NOT NULL,
|
|
8
|
+
webhookSecret TEXT,
|
|
9
|
+
createdByAgentId TEXT,
|
|
10
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
11
|
+
lastUpdatedAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
-- Workflow execution runs
|
|
15
|
+
CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
16
|
+
id TEXT PRIMARY KEY,
|
|
17
|
+
workflowId TEXT NOT NULL REFERENCES workflows(id),
|
|
18
|
+
status TEXT NOT NULL DEFAULT 'running'
|
|
19
|
+
CHECK(status IN ('running', 'waiting', 'completed', 'failed')),
|
|
20
|
+
triggerData TEXT,
|
|
21
|
+
context TEXT,
|
|
22
|
+
error TEXT,
|
|
23
|
+
startedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
24
|
+
lastUpdatedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
25
|
+
finishedAt TEXT
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_workflowId ON workflow_runs(workflowId);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_runs_status ON workflow_runs(status);
|
|
30
|
+
|
|
31
|
+
-- Per-node step history within a run
|
|
32
|
+
CREATE TABLE IF NOT EXISTS workflow_run_steps (
|
|
33
|
+
id TEXT PRIMARY KEY,
|
|
34
|
+
runId TEXT NOT NULL REFERENCES workflow_runs(id),
|
|
35
|
+
nodeId TEXT NOT NULL,
|
|
36
|
+
nodeType TEXT NOT NULL,
|
|
37
|
+
status TEXT NOT NULL DEFAULT 'pending'
|
|
38
|
+
CHECK(status IN ('pending', 'running', 'waiting', 'completed', 'failed', 'skipped')),
|
|
39
|
+
input TEXT,
|
|
40
|
+
output TEXT,
|
|
41
|
+
error TEXT,
|
|
42
|
+
startedAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
43
|
+
finishedAt TEXT
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_run_steps_runId ON workflow_run_steps(runId);
|
|
47
|
+
|
|
48
|
+
-- Link tasks back to workflow runs for async resumption
|
|
49
|
+
ALTER TABLE agent_tasks ADD COLUMN workflowRunId TEXT REFERENCES workflow_runs(id);
|
|
50
|
+
ALTER TABLE agent_tasks ADD COLUMN workflowRunStepId TEXT REFERENCES workflow_run_steps(id);
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_workflow_run ON agent_tasks(workflowRunId);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
-- Add 'workflow' to the source CHECK constraint on agent_tasks.
|
|
2
|
+
-- SQLite does not support ALTER COLUMN, so we use the recommended
|
|
3
|
+
-- 12-step table recreation approach (https://www.sqlite.org/lang_altertable.html).
|
|
4
|
+
|
|
5
|
+
PRAGMA defer_foreign_keys = ON;
|
|
6
|
+
|
|
7
|
+
-- Step 1: Create the replacement table with the updated CHECK constraint.
|
|
8
|
+
-- This includes the workflowRunId/workflowRunStepId columns added in 003.
|
|
9
|
+
CREATE TABLE agent_tasks_new (
|
|
10
|
+
id TEXT PRIMARY KEY,
|
|
11
|
+
agentId TEXT,
|
|
12
|
+
creatorAgentId TEXT,
|
|
13
|
+
task TEXT NOT NULL,
|
|
14
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
15
|
+
source TEXT NOT NULL DEFAULT 'mcp' CHECK(source IN ('mcp', 'slack', 'api', 'github', 'agentmail', 'system', 'schedule', 'workflow')),
|
|
16
|
+
taskType TEXT,
|
|
17
|
+
tags TEXT DEFAULT '[]',
|
|
18
|
+
priority INTEGER DEFAULT 50,
|
|
19
|
+
dependsOn TEXT DEFAULT '[]',
|
|
20
|
+
offeredTo TEXT,
|
|
21
|
+
offeredAt TEXT,
|
|
22
|
+
acceptedAt TEXT,
|
|
23
|
+
rejectionReason TEXT,
|
|
24
|
+
slackChannelId TEXT,
|
|
25
|
+
slackThreadTs TEXT,
|
|
26
|
+
slackUserId TEXT,
|
|
27
|
+
mentionMessageId TEXT,
|
|
28
|
+
mentionChannelId TEXT,
|
|
29
|
+
githubRepo TEXT,
|
|
30
|
+
githubEventType TEXT,
|
|
31
|
+
githubNumber INTEGER,
|
|
32
|
+
githubCommentId INTEGER,
|
|
33
|
+
githubAuthor TEXT,
|
|
34
|
+
githubUrl TEXT,
|
|
35
|
+
epicId TEXT REFERENCES epics(id) ON DELETE SET NULL,
|
|
36
|
+
parentTaskId TEXT,
|
|
37
|
+
claudeSessionId TEXT,
|
|
38
|
+
agentmailInboxId TEXT,
|
|
39
|
+
agentmailMessageId TEXT,
|
|
40
|
+
agentmailThreadId TEXT,
|
|
41
|
+
model TEXT,
|
|
42
|
+
scheduleId TEXT,
|
|
43
|
+
workflowRunId TEXT REFERENCES workflow_runs(id),
|
|
44
|
+
workflowRunStepId TEXT REFERENCES workflow_run_steps(id),
|
|
45
|
+
createdAt TEXT NOT NULL,
|
|
46
|
+
lastUpdatedAt TEXT NOT NULL,
|
|
47
|
+
finishedAt TEXT,
|
|
48
|
+
failureReason TEXT,
|
|
49
|
+
output TEXT,
|
|
50
|
+
progress TEXT,
|
|
51
|
+
notifiedAt TEXT
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
-- Step 2: Copy all data from the old table.
|
|
55
|
+
INSERT INTO agent_tasks_new SELECT
|
|
56
|
+
id, agentId, creatorAgentId, task, status, source,
|
|
57
|
+
taskType, tags, priority, dependsOn, offeredTo, offeredAt,
|
|
58
|
+
acceptedAt, rejectionReason, slackChannelId, slackThreadTs, slackUserId,
|
|
59
|
+
mentionMessageId, mentionChannelId, githubRepo, githubEventType,
|
|
60
|
+
githubNumber, githubCommentId, githubAuthor, githubUrl,
|
|
61
|
+
epicId, parentTaskId, claudeSessionId,
|
|
62
|
+
agentmailInboxId, agentmailMessageId, agentmailThreadId,
|
|
63
|
+
model, scheduleId, workflowRunId, workflowRunStepId,
|
|
64
|
+
createdAt, lastUpdatedAt, finishedAt, failureReason, output, progress, notifiedAt
|
|
65
|
+
FROM agent_tasks;
|
|
66
|
+
|
|
67
|
+
-- Step 3: Drop the old table.
|
|
68
|
+
DROP TABLE agent_tasks;
|
|
69
|
+
|
|
70
|
+
-- Step 4: Rename the new table.
|
|
71
|
+
ALTER TABLE agent_tasks_new RENAME TO agent_tasks;
|
|
72
|
+
|
|
73
|
+
-- Step 5: Recreate indexes that existed on agent_tasks.
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentId ON agent_tasks(agentId);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_status ON agent_tasks(status);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_offeredTo ON agent_tasks(offeredTo);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_taskType ON agent_tasks(taskType);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_epicId ON agent_tasks(epicId);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_agentmailThreadId ON agent_tasks(agentmailThreadId);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_schedule_id ON agent_tasks(scheduleId);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_agent_tasks_workflow_run ON agent_tasks(workflowRunId);
|