@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
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
date: 2026-01-16T17:05:00Z
|
|
3
|
-
researcher: Claude (Researcher Agent)
|
|
4
|
-
git_commit: c64aca6d034d3b1376fc2d17f813fee5e0d7122d
|
|
5
|
-
branch: main
|
|
6
|
-
repository: desplega-ai/agent-swarm
|
|
7
|
-
topic: "Epics Feature for Agent Swarm - Codebase Analysis"
|
|
8
|
-
tags: [research, codebase, epics, task-management, project-organization]
|
|
9
|
-
status: complete
|
|
10
|
-
autonomy: autopilot
|
|
11
|
-
last_updated: 2026-01-16
|
|
12
|
-
last_updated_by: Claude (Researcher Agent)
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Research: Epics Feature for Agent Swarm
|
|
16
|
-
|
|
17
|
-
**Date**: 2026-01-16T17:05:00Z
|
|
18
|
-
**Researcher**: Claude (Researcher Agent)
|
|
19
|
-
**Git Commit**: c64aca6d034d3b1376fc2d17f813fee5e0d7122d
|
|
20
|
-
**Branch**: main
|
|
21
|
-
|
|
22
|
-
## Research Question
|
|
23
|
-
|
|
24
|
-
How should an "epics" feature be implemented in the agent-swarm codebase? An epic would represent a project-level concept containing:
|
|
25
|
-
- A goal
|
|
26
|
-
- A PRD (Product Requirements Document)
|
|
27
|
-
- A plan
|
|
28
|
-
- Tasks assigned to it (either statically or dynamically as it progresses)
|
|
29
|
-
|
|
30
|
-
The feature should integrate with existing `/desplega:research`, `/desplega:create-plan`, and `/desplega:implement-plan` commands.
|
|
31
|
-
|
|
32
|
-
## Summary
|
|
33
|
-
|
|
34
|
-
The agent-swarm codebase provides a solid foundation for implementing epics through its existing task management architecture, scheduled tasks pattern (which demonstrates a "template that spawns tasks" model), and MCP tool registration system. The key implementation path involves:
|
|
35
|
-
|
|
36
|
-
1. Creating a new `epics` database table with fields for goal, PRD, plan, status, and timestamps
|
|
37
|
-
2. Adding an `epicId` foreign key to the existing `agent_tasks` table
|
|
38
|
-
3. Implementing new MCP tools following the established `createToolRegistrar` pattern
|
|
39
|
-
4. Adding HTTP REST endpoints following existing patterns in `http.ts`
|
|
40
|
-
5. Optionally integrating with the scheduler system for progress-triggered task creation
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## Detailed Findings
|
|
45
|
-
|
|
46
|
-
### 1. Current Task Management Architecture
|
|
47
|
-
|
|
48
|
-
#### Task Table Structure (`src/be/db.ts:59-85`)
|
|
49
|
-
|
|
50
|
-
The `agent_tasks` table is the core entity for task management:
|
|
51
|
-
|
|
52
|
-
| Column | Type | Purpose |
|
|
53
|
-
|--------|------|---------|
|
|
54
|
-
| `id` | TEXT (UUID) | Primary key |
|
|
55
|
-
| `agentId` | TEXT | Assigned agent (nullable for unassigned) |
|
|
56
|
-
| `creatorAgentId` | TEXT | Task creator |
|
|
57
|
-
| `task` | TEXT | Task description |
|
|
58
|
-
| `status` | TEXT | Status enum (9 values) |
|
|
59
|
-
| `source` | TEXT | Origin (mcp, slack, api, github) |
|
|
60
|
-
| `taskType` | TEXT | Classification |
|
|
61
|
-
| `tags` | TEXT (JSON array) | Filtering tags |
|
|
62
|
-
| `priority` | INTEGER | 0-100 scale |
|
|
63
|
-
| `dependsOn` | TEXT (JSON array) | Dependency task IDs |
|
|
64
|
-
| Various timestamps | TEXT | createdAt, lastUpdatedAt, finishedAt |
|
|
65
|
-
| Slack metadata | TEXT fields | slackChannelId, slackThreadTs, slackUserId |
|
|
66
|
-
| GitHub metadata | TEXT fields | githubRepo, githubNumber, etc. |
|
|
67
|
-
|
|
68
|
-
**Task Statuses** (`src/types.ts:4-14`):
|
|
69
|
-
- `unassigned` - In task pool
|
|
70
|
-
- `offered` - Awaiting agent acceptance
|
|
71
|
-
- `reviewing` - Agent reviewing offered task
|
|
72
|
-
- `pending` - Assigned, waiting to start
|
|
73
|
-
- `in_progress` - Actively being worked
|
|
74
|
-
- `paused` - Interrupted, can resume
|
|
75
|
-
- `completed` - Successfully finished
|
|
76
|
-
- `failed` - Failed with reason
|
|
77
|
-
- `cancelled` - Cancelled by lead/creator
|
|
78
|
-
|
|
79
|
-
#### Key Task Functions (`src/be/db.ts`)
|
|
80
|
-
|
|
81
|
-
| Function | Lines | Purpose |
|
|
82
|
-
|----------|-------|---------|
|
|
83
|
-
| `createTaskExtended()` | 1634-1694 | Create task with full options |
|
|
84
|
-
| `getTaskById()` | 946-949 | Fetch single task |
|
|
85
|
-
| `getAllTasks()` | 989-1050 | Query with filters |
|
|
86
|
-
| `startTask()` | 924-944 | Set to in_progress |
|
|
87
|
-
| `completeTask()` | 1269-1292 | Mark completed |
|
|
88
|
-
| `failTask()` | 1294-1311 | Mark failed |
|
|
89
|
-
| `cancelTask()` | 1313-1340 | Cancel task |
|
|
90
|
-
| `updateTaskProgress()` | 1456-1469 | Update progress field |
|
|
91
|
-
| `checkDependencies()` | 1888-1906 | Verify all deps completed |
|
|
92
|
-
|
|
93
|
-
### 2. Database Schema and Models
|
|
94
|
-
|
|
95
|
-
#### Technology Stack
|
|
96
|
-
- **Database**: SQLite via `bun:sqlite`
|
|
97
|
-
- **ORM**: None - raw SQL queries with prepared statements
|
|
98
|
-
- **Type Validation**: Zod schemas in `src/types.ts`
|
|
99
|
-
- **Migrations**: Inline in `db.ts` using `ALTER TABLE IF NOT EXISTS` pattern
|
|
100
|
-
|
|
101
|
-
#### Schema Pattern (`src/be/db.ts:36-285`)
|
|
102
|
-
|
|
103
|
-
Tables are created within a transaction at database initialization:
|
|
104
|
-
|
|
105
|
-
```typescript
|
|
106
|
-
database.run("PRAGMA journal_mode = WAL;");
|
|
107
|
-
database.run("PRAGMA foreign_keys = ON;");
|
|
108
|
-
|
|
109
|
-
database.exec("BEGIN TRANSACTION");
|
|
110
|
-
try {
|
|
111
|
-
// CREATE TABLE IF NOT EXISTS statements
|
|
112
|
-
database.exec("COMMIT");
|
|
113
|
-
} catch (e) {
|
|
114
|
-
database.exec("ROLLBACK");
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
#### Existing Tables
|
|
119
|
-
|
|
120
|
-
| Table | Purpose |
|
|
121
|
-
|-------|---------|
|
|
122
|
-
| `agents` | Agent registration and status |
|
|
123
|
-
| `agent_tasks` | Task assignments |
|
|
124
|
-
| `agent_log` | Event logging |
|
|
125
|
-
| `channels` | Inter-agent communication |
|
|
126
|
-
| `channel_messages` | Messages within channels |
|
|
127
|
-
| `channel_read_state` | Read tracking |
|
|
128
|
-
| `services` | PM2 service registry |
|
|
129
|
-
| `session_logs` | CLI output logging |
|
|
130
|
-
| `session_costs` | Usage tracking |
|
|
131
|
-
| `inbox_messages` | Lead inbox |
|
|
132
|
-
| `scheduled_tasks` | Recurring task templates |
|
|
133
|
-
|
|
134
|
-
#### Zod Schema Pattern (`src/types.ts`)
|
|
135
|
-
|
|
136
|
-
```typescript
|
|
137
|
-
export const AgentTaskSchema = z.object({
|
|
138
|
-
id: z.uuid(),
|
|
139
|
-
agentId: z.uuid().nullable(),
|
|
140
|
-
task: z.string().min(1),
|
|
141
|
-
status: AgentTaskStatusSchema,
|
|
142
|
-
// ... other fields
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
export type AgentTask = z.infer<typeof AgentTaskSchema>;
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### 3. MCP Tool Definitions
|
|
149
|
-
|
|
150
|
-
#### Tool Registration Pattern (`src/tools/utils.ts:86-115`)
|
|
151
|
-
|
|
152
|
-
All tools use the `createToolRegistrar` factory:
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
export const registerSomeTools = (server: McpServer) => {
|
|
156
|
-
createToolRegistrar(server)(
|
|
157
|
-
"tool-name",
|
|
158
|
-
{
|
|
159
|
-
title: "Tool Title",
|
|
160
|
-
description: "Tool description for LLM.",
|
|
161
|
-
inputSchema: z.object({
|
|
162
|
-
param1: z.string().describe("Param description"),
|
|
163
|
-
param2: z.number().optional(),
|
|
164
|
-
}),
|
|
165
|
-
outputSchema: z.object({
|
|
166
|
-
success: z.boolean(),
|
|
167
|
-
message: z.string(),
|
|
168
|
-
data: SomeSchema.optional(),
|
|
169
|
-
}),
|
|
170
|
-
},
|
|
171
|
-
async (args, requestInfo, meta) => {
|
|
172
|
-
// Handler receives validated args + requestInfo.agentId
|
|
173
|
-
return {
|
|
174
|
-
content: [{ type: "text", text: result.message }],
|
|
175
|
-
structuredContent: result,
|
|
176
|
-
};
|
|
177
|
-
},
|
|
178
|
-
);
|
|
179
|
-
};
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
#### Request Context Injection (`src/tools/utils.ts:18-38`)
|
|
183
|
-
|
|
184
|
-
The `X-Agent-ID` header is extracted and passed to handlers:
|
|
185
|
-
|
|
186
|
-
```typescript
|
|
187
|
-
export type RequestInfo = {
|
|
188
|
-
sessionId: string | undefined;
|
|
189
|
-
agentId: string | undefined;
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
export const getRequestInfo = (req: Meta): RequestInfo => {
|
|
193
|
-
const agentIdHeader = req.requestInfo?.headers?.["x-agent-id"];
|
|
194
|
-
// ... extraction logic
|
|
195
|
-
};
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
#### Existing Task Tools
|
|
199
|
-
|
|
200
|
-
| Tool | File | Purpose |
|
|
201
|
-
|------|------|---------|
|
|
202
|
-
| `send-task` | `src/tools/send-task.ts` | Create task (assign, offer, or pool) |
|
|
203
|
-
| `get-tasks` | `src/tools/get-tasks.ts` | List tasks with filters |
|
|
204
|
-
| `get-task-details` | `src/tools/get-task-details.ts` | Fetch task + logs |
|
|
205
|
-
| `task-action` | `src/tools/task-action.ts` | Claim, release, accept, reject |
|
|
206
|
-
| `poll-task` | `src/tools/poll-task.ts` | Get next task for agent |
|
|
207
|
-
| `store-progress` | `src/tools/store-progress.ts` | Update progress, complete, fail |
|
|
208
|
-
| `cancel-task` | `src/tools/cancel-task.ts` | Cancel task |
|
|
209
|
-
|
|
210
|
-
#### Tool Registration in Server (`src/server.ts:77-128`)
|
|
211
|
-
|
|
212
|
-
Tools are registered conditionally based on capabilities:
|
|
213
|
-
|
|
214
|
-
```typescript
|
|
215
|
-
// Core tools - always registered
|
|
216
|
-
registerJoinSwarmTool(server);
|
|
217
|
-
registerSendTaskTool(server);
|
|
218
|
-
// ...
|
|
219
|
-
|
|
220
|
-
// Capability-gated tools
|
|
221
|
-
if (hasCapability("scheduling")) {
|
|
222
|
-
registerCreateScheduleTool(server);
|
|
223
|
-
// ...
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### 4. HTTP REST API Pattern
|
|
228
|
-
|
|
229
|
-
#### Endpoint Definition (`src/http.ts`)
|
|
230
|
-
|
|
231
|
-
Routes are matched using path segment arrays:
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
const pathSegments = getPathSegments(req.url || "");
|
|
235
|
-
|
|
236
|
-
// GET /api/tasks
|
|
237
|
-
if (req.method === "GET" && pathSegments[0] === "api" && pathSegments[1] === "tasks" && !pathSegments[2]) {
|
|
238
|
-
const tasks = getAllTasks(filters);
|
|
239
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
240
|
-
res.end(JSON.stringify({ tasks, total }));
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
#### Response Patterns
|
|
246
|
-
|
|
247
|
-
**List endpoints**: `{ items: [], total: number }`
|
|
248
|
-
**Single resource**: Direct object
|
|
249
|
-
**Actions**: `{ success: boolean, message: string, entity?: object }`
|
|
250
|
-
**Errors**: `{ error: "Error message" }`
|
|
251
|
-
|
|
252
|
-
#### Authentication
|
|
253
|
-
|
|
254
|
-
- API Key via `Authorization: Bearer <key>` header
|
|
255
|
-
- Agent ID via `X-Agent-ID` header for agent-specific operations
|
|
256
|
-
|
|
257
|
-
### 5. Scheduled Tasks - Closest Existing Pattern
|
|
258
|
-
|
|
259
|
-
The `scheduled_tasks` feature demonstrates a "template that spawns tasks" pattern:
|
|
260
|
-
|
|
261
|
-
#### Schema (`src/be/db.ts:255-275`)
|
|
262
|
-
|
|
263
|
-
```sql
|
|
264
|
-
CREATE TABLE IF NOT EXISTS scheduled_tasks (
|
|
265
|
-
id TEXT PRIMARY KEY,
|
|
266
|
-
name TEXT NOT NULL UNIQUE,
|
|
267
|
-
description TEXT,
|
|
268
|
-
cronExpression TEXT,
|
|
269
|
-
intervalMs INTEGER,
|
|
270
|
-
taskTemplate TEXT NOT NULL, -- Template for spawned tasks
|
|
271
|
-
taskType TEXT,
|
|
272
|
-
tags TEXT DEFAULT '[]',
|
|
273
|
-
priority INTEGER DEFAULT 50,
|
|
274
|
-
targetAgentId TEXT, -- Route to specific agent
|
|
275
|
-
enabled INTEGER DEFAULT 1,
|
|
276
|
-
lastRunAt TEXT,
|
|
277
|
-
nextRunAt TEXT,
|
|
278
|
-
createdByAgentId TEXT,
|
|
279
|
-
timezone TEXT DEFAULT 'UTC',
|
|
280
|
-
createdAt TEXT NOT NULL,
|
|
281
|
-
lastUpdatedAt TEXT NOT NULL
|
|
282
|
-
)
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
#### Task Creation from Template (`src/scheduler/scheduler.ts:44-67`)
|
|
286
|
-
|
|
287
|
-
```typescript
|
|
288
|
-
async function executeSchedule(schedule: ScheduledTask): Promise<void> {
|
|
289
|
-
const tx = getDb().transaction(() => {
|
|
290
|
-
createTaskExtended(schedule.taskTemplate, {
|
|
291
|
-
creatorAgentId: schedule.createdByAgentId,
|
|
292
|
-
taskType: schedule.taskType,
|
|
293
|
-
tags: [...schedule.tags, "scheduled", `schedule:${schedule.name}`],
|
|
294
|
-
priority: schedule.priority,
|
|
295
|
-
agentId: schedule.targetAgentId,
|
|
296
|
-
});
|
|
297
|
-
// ... update nextRunAt
|
|
298
|
-
});
|
|
299
|
-
tx();
|
|
300
|
-
}
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
**Key pattern**: Tags are used for traceability (`schedule:{name}`)
|
|
304
|
-
|
|
305
|
-
### 6. Existing Grouping/Hierarchy Concepts
|
|
306
|
-
|
|
307
|
-
Currently, there are no explicit project/epic groupings. The closest concepts are:
|
|
308
|
-
|
|
309
|
-
1. **Task Dependencies** (`dependsOn` field) - Tasks can depend on other tasks
|
|
310
|
-
2. **Tags** - Free-form filtering and grouping
|
|
311
|
-
3. **Task Type** - Classification field
|
|
312
|
-
4. **Scheduled Tasks** - Template that creates related tasks with shared tags
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## Code References
|
|
317
|
-
|
|
318
|
-
| File | Lines | Description |
|
|
319
|
-
|------|-------|-------------|
|
|
320
|
-
| `src/be/db.ts` | 59-85 | agent_tasks table schema |
|
|
321
|
-
| `src/be/db.ts` | 255-275 | scheduled_tasks table schema |
|
|
322
|
-
| `src/be/db.ts` | 1634-1694 | createTaskExtended function |
|
|
323
|
-
| `src/types.ts` | 58-105 | AgentTask Zod schema |
|
|
324
|
-
| `src/types.ts` | 267-291 | ScheduledTask Zod schema |
|
|
325
|
-
| `src/tools/utils.ts` | 86-115 | createToolRegistrar factory |
|
|
326
|
-
| `src/tools/send-task.ts` | 7-172 | send-task tool implementation |
|
|
327
|
-
| `src/server.ts` | 58-131 | createServer and tool registration |
|
|
328
|
-
| `src/http.ts` | 1029-1214 | Task HTTP endpoints |
|
|
329
|
-
| `src/scheduler/scheduler.ts` | 44-67 | executeSchedule function |
|
|
330
|
-
|
|
331
|
-
---
|
|
332
|
-
|
|
333
|
-
## Architecture Documentation
|
|
334
|
-
|
|
335
|
-
### Existing Patterns to Follow
|
|
336
|
-
|
|
337
|
-
1. **Database**: SQLite with WAL mode, foreign keys enabled, transactions for multi-step operations
|
|
338
|
-
2. **Types**: Zod schemas for runtime validation, TypeScript types inferred via `z.infer`
|
|
339
|
-
3. **MCP Tools**: `createToolRegistrar` factory with `inputSchema`/`outputSchema` Zod objects
|
|
340
|
-
4. **HTTP API**: Path-segment matching, JSON responses, `X-Agent-ID` authentication
|
|
341
|
-
5. **Traceability**: Tags for linking related entities (e.g., `schedule:{name}`)
|
|
342
|
-
|
|
343
|
-
### Extension Points for Epics
|
|
344
|
-
|
|
345
|
-
1. **New Table**: `epics` table in `src/be/db.ts`
|
|
346
|
-
2. **FK on Tasks**: Add `epicId` column to `agent_tasks`
|
|
347
|
-
3. **New Type**: `EpicSchema` in `src/types.ts`
|
|
348
|
-
4. **New Tools**: `src/tools/epics/` directory with create, list, get, update, delete, assign tools
|
|
349
|
-
5. **HTTP Endpoints**: `/api/epics` routes in `src/http.ts`
|
|
350
|
-
6. **Capability**: Optional `epics` capability flag
|
|
351
|
-
|
|
352
|
-
---
|
|
353
|
-
|
|
354
|
-
## Historical Context (from thoughts/)
|
|
355
|
-
|
|
356
|
-
The scheduled tasks feature was implemented following a research-then-plan approach:
|
|
357
|
-
|
|
358
|
-
- **Research**: `/workspace/agent-swarm/thoughts/shared/research/2026-01-15-scheduled-tasks.md`
|
|
359
|
-
- **Plan**: `/workspace/agent-swarm/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md`
|
|
360
|
-
|
|
361
|
-
These documents follow a structured format with YAML frontmatter, clear sections (Research Question, Summary, Detailed Findings, Recommendations), and explicit success criteria.
|
|
362
|
-
|
|
363
|
-
---
|
|
364
|
-
|
|
365
|
-
## Recommendations for Epic Schema
|
|
366
|
-
|
|
367
|
-
Based on the analysis, an `epics` table should include:
|
|
368
|
-
|
|
369
|
-
```sql
|
|
370
|
-
CREATE TABLE IF NOT EXISTS epics (
|
|
371
|
-
id TEXT PRIMARY KEY,
|
|
372
|
-
name TEXT NOT NULL,
|
|
373
|
-
description TEXT,
|
|
374
|
-
goal TEXT NOT NULL, -- The epic's objective
|
|
375
|
-
prd TEXT, -- Product Requirements Document (markdown)
|
|
376
|
-
plan TEXT, -- Implementation plan (markdown)
|
|
377
|
-
status TEXT NOT NULL DEFAULT 'draft' CHECK(status IN ('draft', 'active', 'paused', 'completed', 'cancelled')),
|
|
378
|
-
priority INTEGER DEFAULT 50,
|
|
379
|
-
tags TEXT DEFAULT '[]',
|
|
380
|
-
createdByAgentId TEXT,
|
|
381
|
-
leadAgentId TEXT, -- Optional: primary assignee
|
|
382
|
-
researchDocPath TEXT, -- Link to /research doc
|
|
383
|
-
planDocPath TEXT, -- Link to /plan doc
|
|
384
|
-
slackChannelId TEXT, -- Optional Slack integration
|
|
385
|
-
slackThreadTs TEXT,
|
|
386
|
-
githubRepo TEXT, -- Optional GitHub integration
|
|
387
|
-
githubMilestone TEXT,
|
|
388
|
-
createdAt TEXT NOT NULL,
|
|
389
|
-
lastUpdatedAt TEXT NOT NULL,
|
|
390
|
-
startedAt TEXT,
|
|
391
|
-
completedAt TEXT,
|
|
392
|
-
FOREIGN KEY (createdByAgentId) REFERENCES agents(id) ON DELETE SET NULL,
|
|
393
|
-
FOREIGN KEY (leadAgentId) REFERENCES agents(id) ON DELETE SET NULL
|
|
394
|
-
)
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
**Task linkage** (add to agent_tasks):
|
|
398
|
-
```sql
|
|
399
|
-
ALTER TABLE agent_tasks ADD COLUMN epicId TEXT REFERENCES epics(id) ON DELETE SET NULL;
|
|
400
|
-
CREATE INDEX IF NOT EXISTS idx_agent_tasks_epicId ON agent_tasks(epicId);
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
## Open Questions
|
|
406
|
-
|
|
407
|
-
1. **Task Creation Strategy**: Should epics support:
|
|
408
|
-
- Static task lists (defined upfront)?
|
|
409
|
-
- Dynamic task creation (as epic progresses)?
|
|
410
|
-
- Both (hybrid approach)?
|
|
411
|
-
|
|
412
|
-
2. **Progress Tracking**: How should epic progress be calculated?
|
|
413
|
-
- Count of completed tasks / total tasks?
|
|
414
|
-
- Weighted by priority?
|
|
415
|
-
- Manual progress field?
|
|
416
|
-
|
|
417
|
-
3. **Integration Depth**: How deeply should epics integrate with existing commands?
|
|
418
|
-
- `/desplega:research` outputs to `epic.researchDocPath`?
|
|
419
|
-
- `/desplega:create-plan` outputs to `epic.planDocPath`?
|
|
420
|
-
- Automatic task creation from plan?
|
|
421
|
-
|
|
422
|
-
4. **UI Considerations**: Should the UI (React app in `ui/`) display epics?
|
|
423
|
-
- Epic list panel?
|
|
424
|
-
- Epic detail view with tasks?
|
|
425
|
-
- Gantt/timeline view?
|
|
426
|
-
|
|
427
|
-
5. **Permissions**: Who can modify an epic?
|
|
428
|
-
- Only creator?
|
|
429
|
-
- Creator + leadAgentId?
|
|
430
|
-
- Any agent?
|
|
431
|
-
|
|
432
|
-
---
|
|
433
|
-
|
|
434
|
-
## Related Research
|
|
435
|
-
|
|
436
|
-
- `/workspace/agent-swarm/thoughts/shared/research/2026-01-15-scheduled-tasks.md` - Scheduled tasks research (similar pattern)
|
|
437
|
-
- `/workspace/agent-swarm/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md` - Implementation plan template
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Agent Swarm Tool Output Schema Alignment Implementation Plan
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Align the MCP tool `outputSchema` definitions with the actual `structuredContent` payloads so OpenCode no longer fails with "additional properties" errors when calling tools like `agent-swarm_get-swarm`.
|
|
5
|
-
|
|
6
|
-
## Current State Analysis
|
|
7
|
-
Many tools return `structuredContent` that includes `yourAgentId`, but their `outputSchema` only lists other keys (e.g., `agents`, `success`, `message`). The validator rejects those responses, causing the `McpError -32602` observed when calling `agent-swarm_get-swarm`. `my-agent-info` additionally returns `yourAgentInfo` while its schema only defines `agentId`.
|
|
8
|
-
|
|
9
|
-
## Desired End State
|
|
10
|
-
Every tool that embeds `yourAgentId` (and similar metadata) in `structuredContent` declares that key in its `outputSchema`, and `my-agent-info`’s schema matches the keys it actually returns. MCP requests succeed without schema validation issues.
|
|
11
|
-
|
|
12
|
-
### Key Discoveries:
|
|
13
|
-
- `src/tools/get-swarm.ts:16` defines `outputSchema` as `{ agents }`, yet `structuredContent` includes `yourAgentId` (and that key is also present in many other tools).
|
|
14
|
-
- `src/tools/my-agent-info.ts:13` expects `agentId`, but returns `yourAgentId` and `yourAgentInfo`, so both the schema and the response need to align.
|
|
15
|
-
|
|
16
|
-
## Quick Verification Reference
|
|
17
|
-
|
|
18
|
-
Common commands to verify the implementation:
|
|
19
|
-
- Type check: `bun run tsc:check`
|
|
20
|
-
- Lint and formatting: `bun run lint:fix`
|
|
21
|
-
|
|
22
|
-
Key files to review:
|
|
23
|
-
- `src/tools/get-swarm.ts` and other swarm/task tools
|
|
24
|
-
- `src/tools/my-agent-info.ts` and agent/profile utilities
|
|
25
|
-
- `src/tools/schedules/**/*.ts`
|
|
26
|
-
|
|
27
|
-
## What We're NOT Doing
|
|
28
|
-
- Changing the actual `structuredContent` values beyond schema alignment.
|
|
29
|
-
- Refactoring tool registration utilities or response helpers.
|
|
30
|
-
- Adding new functionality beyond schema alignment.
|
|
31
|
-
|
|
32
|
-
## Implementation Approach
|
|
33
|
-
For each tool that currently returns `yourAgentId` (and `yourAgentInfo` in `my-agent-info`), update `outputSchema` to include those keys with the appropriate types. Keep existing fields (e.g., `agents`, `success`, `message`) untouched to avoid breaking clients.
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Phase 1: Align Tool Schemas with Structured Responses
|
|
38
|
-
|
|
39
|
-
### Overview
|
|
40
|
-
Add `yourAgentId` (and `yourAgentInfo` where applicable) to the output schemas of swarm, task, messaging, channel, service, and schedule tools so their structured responses validate cleanly.
|
|
41
|
-
|
|
42
|
-
### Changes Required:
|
|
43
|
-
|
|
44
|
-
#### 1. Swarm/task/messaging tools
|
|
45
|
-
Update `outputSchema` in each of these files to include `yourAgentId`:
|
|
46
|
-
- `src/tools/get-swarm.ts`
|
|
47
|
-
- `src/tools/get-tasks.ts`
|
|
48
|
-
- `src/tools/get-task-details.ts`
|
|
49
|
-
- `src/tools/poll-task.ts`
|
|
50
|
-
- `src/tools/store-progress.ts`
|
|
51
|
-
- `src/tools/send-task.ts`
|
|
52
|
-
- `src/tools/task-action.ts`
|
|
53
|
-
- `src/tools/cancel-task.ts`
|
|
54
|
-
- `src/tools/read-messages.ts`
|
|
55
|
-
- `src/tools/get-inbox-message.ts`
|
|
56
|
-
|
|
57
|
-
#### 2. Agent registration/profile tools
|
|
58
|
-
- `src/tools/my-agent-info.ts`: extend the schema with `yourAgentId` and `yourAgentInfo` while keeping the existing `success`/`message` fields.
|
|
59
|
-
- `src/tools/join-swarm.ts`
|
|
60
|
-
- `src/tools/update-profile.ts`
|
|
61
|
-
|
|
62
|
-
#### 3. Channel and messaging utilities
|
|
63
|
-
- `src/tools/list-channels.ts`
|
|
64
|
-
- `src/tools/create-channel.ts`
|
|
65
|
-
- `src/tools/post-message.ts`
|
|
66
|
-
|
|
67
|
-
#### 4. Service registry tools
|
|
68
|
-
- `src/tools/register-service.ts`
|
|
69
|
-
- `src/tools/unregister-service.ts`
|
|
70
|
-
- `src/tools/list-services.ts`
|
|
71
|
-
- `src/tools/update-service-status.ts`
|
|
72
|
-
|
|
73
|
-
#### 5. Scheduler tools
|
|
74
|
-
- `src/tools/schedules/create-schedule.ts`
|
|
75
|
-
- `src/tools/schedules/update-schedule.ts`
|
|
76
|
-
- `src/tools/schedules/delete-schedule.ts`
|
|
77
|
-
- `src/tools/schedules/run-schedule-now.ts`
|
|
78
|
-
- `src/tools/schedules/list-schedules.ts`
|
|
79
|
-
|
|
80
|
-
### Success Criteria:
|
|
81
|
-
|
|
82
|
-
#### Automated Verification:
|
|
83
|
-
- [ ] Type check: `bun run tsc:check`
|
|
84
|
-
- [ ] Lint & format: `bun run lint:fix`
|
|
85
|
-
|
|
86
|
-
#### Manual Verification:
|
|
87
|
-
- [ ] Run `agent-swarm_get-swarm` via OpenCode and confirm there is no schema error.
|
|
88
|
-
- [ ] Run `agent-swarm_my-agent-info` via OpenCode and confirm the response validates.
|
|
89
|
-
|
|
90
|
-
**Implementation Note**: After these schema adjustments, pause for manual confirmation. No commits requested per your preference.
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Testing Strategy
|
|
95
|
-
Leverage `bun run tsc:check` and `bun run lint:fix` for automated coverage, and manually invoke the impacted tools through OpenCode to confirm the structured responses pass validation.
|
|
96
|
-
|
|
97
|
-
## References
|
|
98
|
-
- Planning template: `~/.claude/plugins/cache/desplega-ai-toolbox/desplega/1.4.0/skills/planning/template.md`
|