@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
package/src/cli.tsx
CHANGED
|
@@ -6,7 +6,8 @@ import pkg from "../package.json";
|
|
|
6
6
|
import { runClaude } from "./claude.ts";
|
|
7
7
|
import { runHook } from "./commands/hook.ts";
|
|
8
8
|
import { runLead } from "./commands/lead.ts";
|
|
9
|
-
import {
|
|
9
|
+
import { Onboard } from "./commands/onboard.tsx";
|
|
10
|
+
import { Setup as Connect } from "./commands/setup.tsx";
|
|
10
11
|
import { runWorker } from "./commands/worker.ts";
|
|
11
12
|
|
|
12
13
|
// Get CLI name from bin field (assumes single key)
|
|
@@ -34,6 +35,10 @@ interface ParsedArgs {
|
|
|
34
35
|
systemPromptFile: string;
|
|
35
36
|
additionalArgs: string[];
|
|
36
37
|
aiLoop: boolean;
|
|
38
|
+
preset: string;
|
|
39
|
+
open: boolean;
|
|
40
|
+
showHelp: boolean;
|
|
41
|
+
dbPath: string;
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
function parseArgs(args: string[]): ParsedArgs {
|
|
@@ -50,6 +55,10 @@ function parseArgs(args: string[]): ParsedArgs {
|
|
|
50
55
|
let systemPromptFile = "";
|
|
51
56
|
let additionalArgs: string[] = [];
|
|
52
57
|
let aiLoop = false;
|
|
58
|
+
let preset = "";
|
|
59
|
+
let open = false;
|
|
60
|
+
let showHelp = false;
|
|
61
|
+
let dbPath = "";
|
|
53
62
|
|
|
54
63
|
// Find if there's a "--" separator for additional args
|
|
55
64
|
const separatorIndex = args.indexOf("--");
|
|
@@ -85,6 +94,18 @@ function parseArgs(args: string[]): ParsedArgs {
|
|
|
85
94
|
i++;
|
|
86
95
|
} else if (arg === "--ai-loop") {
|
|
87
96
|
aiLoop = true;
|
|
97
|
+
} else if (arg === "--preset") {
|
|
98
|
+
preset = mainArgs[i + 1] || preset;
|
|
99
|
+
i++;
|
|
100
|
+
} else if (arg?.startsWith("--preset=")) {
|
|
101
|
+
preset = arg.slice("--preset=".length);
|
|
102
|
+
} else if (arg === "--open") {
|
|
103
|
+
open = true;
|
|
104
|
+
} else if (arg === "--help" || arg === "-h") {
|
|
105
|
+
showHelp = true;
|
|
106
|
+
} else if (arg === "--db") {
|
|
107
|
+
dbPath = mainArgs[i + 1] || dbPath;
|
|
108
|
+
i++;
|
|
88
109
|
}
|
|
89
110
|
}
|
|
90
111
|
|
|
@@ -102,285 +123,185 @@ function parseArgs(args: string[]): ParsedArgs {
|
|
|
102
123
|
systemPromptFile,
|
|
103
124
|
additionalArgs,
|
|
104
125
|
aiLoop,
|
|
126
|
+
preset,
|
|
127
|
+
open,
|
|
128
|
+
showHelp,
|
|
129
|
+
dbPath,
|
|
105
130
|
};
|
|
106
131
|
}
|
|
107
132
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
</Box>
|
|
246
|
-
</Box>
|
|
247
|
-
|
|
248
|
-
<Box marginTop={1} flexDirection="column">
|
|
249
|
-
<Text bold>Options for 'worker' and 'lead':</Text>
|
|
250
|
-
<Box>
|
|
251
|
-
<Box width={30}>
|
|
252
|
-
<Text color="yellow">-m, --msg {"<prompt>"}</Text>
|
|
253
|
-
</Box>
|
|
254
|
-
<Text>Custom prompt (default: /agent-swarm:start-worker)</Text>
|
|
255
|
-
</Box>
|
|
256
|
-
<Box>
|
|
257
|
-
<Box width={30}>
|
|
258
|
-
<Text color="yellow">--yolo</Text>
|
|
259
|
-
</Box>
|
|
260
|
-
<Text>Continue on errors instead of stopping</Text>
|
|
261
|
-
</Box>
|
|
262
|
-
<Box>
|
|
263
|
-
<Box width={30}>
|
|
264
|
-
<Text color="yellow">--system-prompt {"<text>"}</Text>
|
|
265
|
-
</Box>
|
|
266
|
-
<Text>Custom system prompt (appended to Claude)</Text>
|
|
267
|
-
</Box>
|
|
268
|
-
<Box>
|
|
269
|
-
<Box width={30}>
|
|
270
|
-
<Text color="yellow">--system-prompt-file {"<path>"}</Text>
|
|
271
|
-
</Box>
|
|
272
|
-
<Text>Read system prompt from file</Text>
|
|
273
|
-
</Box>
|
|
274
|
-
<Box>
|
|
275
|
-
<Box width={30}>
|
|
276
|
-
<Text color="yellow">--ai-loop</Text>
|
|
277
|
-
</Box>
|
|
278
|
-
<Text>Use AI-based polling (legacy mode)</Text>
|
|
279
|
-
</Box>
|
|
280
|
-
<Box>
|
|
281
|
-
<Box width={30}>
|
|
282
|
-
<Text color="yellow">-- {"<args...>"}</Text>
|
|
283
|
-
</Box>
|
|
284
|
-
<Text>Additional arguments to pass to Claude CLI</Text>
|
|
285
|
-
</Box>
|
|
286
|
-
</Box>
|
|
287
|
-
|
|
288
|
-
<Box marginTop={1} flexDirection="column">
|
|
289
|
-
<Text bold>Examples:</Text>
|
|
290
|
-
<Text dimColor> {binName} setup</Text>
|
|
291
|
-
<Text dimColor> {binName} setup --dry-run</Text>
|
|
292
|
-
<Text dimColor> {binName} setup -y</Text>
|
|
293
|
-
<Text dimColor> {binName} mcp</Text>
|
|
294
|
-
<Text dimColor> {binName} mcp --port 8080</Text>
|
|
295
|
-
<Text dimColor> {binName} mcp -p 8080 -k my-secret-key</Text>
|
|
296
|
-
<Text dimColor> {binName} claude</Text>
|
|
297
|
-
<Text dimColor> {binName} claude --headless -m "Hello"</Text>
|
|
298
|
-
<Text dimColor> {binName} claude -- --resume</Text>
|
|
299
|
-
<Text dimColor> {binName} worker</Text>
|
|
300
|
-
<Text dimColor> {binName} worker --yolo</Text>
|
|
301
|
-
<Text dimColor> {binName} worker -m "Custom prompt"</Text>
|
|
302
|
-
<Text dimColor> {binName} worker --system-prompt "You are a Python specialist"</Text>
|
|
303
|
-
<Text dimColor> {binName} worker --system-prompt-file ./prompts/specialist.txt</Text>
|
|
304
|
-
<Text dimColor> {binName} lead</Text>
|
|
305
|
-
<Text dimColor> {binName} lead --yolo</Text>
|
|
306
|
-
<Text dimColor> {binName} lead -m "Custom prompt"</Text>
|
|
307
|
-
<Text dimColor> {binName} lead --system-prompt "You are a project coordinator"</Text>
|
|
308
|
-
</Box>
|
|
133
|
+
// --- Plain text help (no Ink, no terminal reset) ---
|
|
134
|
+
|
|
135
|
+
const COMMAND_HELP: Record<
|
|
136
|
+
string,
|
|
137
|
+
{ usage: string; description: string; options: string; examples: string }
|
|
138
|
+
> = {
|
|
139
|
+
onboard: {
|
|
140
|
+
usage: `${binName} onboard [options]`,
|
|
141
|
+
description:
|
|
142
|
+
"Set up a new swarm from scratch using Docker Compose.\nInteractive wizard that collects credentials, generates docker-compose.yml + .env,\nstarts the stack, and verifies health.",
|
|
143
|
+
options: [
|
|
144
|
+
" --dry-run Preview what would be generated without writing",
|
|
145
|
+
" -y, --yes Non-interactive mode (reads from env vars)",
|
|
146
|
+
" --preset <name> Preset: dev, content, research, solo",
|
|
147
|
+
" -h, --help Show this help",
|
|
148
|
+
].join("\n"),
|
|
149
|
+
examples: [
|
|
150
|
+
` ${binName} onboard`,
|
|
151
|
+
` ${binName} onboard --dry-run`,
|
|
152
|
+
` ${binName} onboard --yes --preset=dev`,
|
|
153
|
+
` ANTHROPIC_API_KEY=sk-... ${binName} onboard --yes --preset=solo`,
|
|
154
|
+
].join("\n"),
|
|
155
|
+
},
|
|
156
|
+
connect: {
|
|
157
|
+
usage: `${binName} connect [options]`,
|
|
158
|
+
description:
|
|
159
|
+
"Connect this project to an existing swarm.\nCreates .mcp.json and .claude/settings.local.json with server URL and API key.\nAuto-reads API_KEY from .env if present.",
|
|
160
|
+
options: [
|
|
161
|
+
" --dry-run Show what would be changed without writing",
|
|
162
|
+
" --restore Restore files from .bak backups",
|
|
163
|
+
" -y, --yes Non-interactive mode (use env vars)",
|
|
164
|
+
" -h, --help Show this help",
|
|
165
|
+
].join("\n"),
|
|
166
|
+
examples: [
|
|
167
|
+
` ${binName} connect`,
|
|
168
|
+
` ${binName} connect --dry-run`,
|
|
169
|
+
` ${binName} connect -y`,
|
|
170
|
+
].join("\n"),
|
|
171
|
+
},
|
|
172
|
+
api: {
|
|
173
|
+
usage: `${binName} api [options]`,
|
|
174
|
+
description: "Start the API + MCP HTTP server.",
|
|
175
|
+
options: [
|
|
176
|
+
" -p, --port <port> Port to listen on (default: 3013)",
|
|
177
|
+
" -k, --key <key> API key for authentication",
|
|
178
|
+
" --db <path> Database file path (default: ./agent-swarm-db.sqlite)",
|
|
179
|
+
" -h, --help Show this help",
|
|
180
|
+
].join("\n"),
|
|
181
|
+
examples: [
|
|
182
|
+
` ${binName} api`,
|
|
183
|
+
` ${binName} api --port 8080 --key my-secret`,
|
|
184
|
+
` ${binName} api --db /data/swarm.sqlite`,
|
|
185
|
+
].join("\n"),
|
|
186
|
+
},
|
|
187
|
+
claude: {
|
|
188
|
+
usage: `${binName} claude [options] [-- <args...>]`,
|
|
189
|
+
description: "Run Claude CLI with optional message and headless mode.",
|
|
190
|
+
options: [
|
|
191
|
+
" -m, --msg <message> Message to send to Claude",
|
|
192
|
+
" --headless Run in headless mode (stream JSON output)",
|
|
193
|
+
" -- <args...> Additional arguments to pass to Claude CLI",
|
|
194
|
+
" -h, --help Show this help",
|
|
195
|
+
].join("\n"),
|
|
196
|
+
examples: [
|
|
197
|
+
` ${binName} claude`,
|
|
198
|
+
` ${binName} claude --headless -m "Hello"`,
|
|
199
|
+
` ${binName} claude -- --resume`,
|
|
200
|
+
].join("\n"),
|
|
201
|
+
},
|
|
202
|
+
worker: {
|
|
203
|
+
usage: `${binName} worker [options] [-- <args...>]`,
|
|
204
|
+
description: "Run Claude in headless loop mode as a worker agent.",
|
|
205
|
+
options: [
|
|
206
|
+
" -m, --msg <prompt> Custom prompt (default: /agent-swarm:start-worker)",
|
|
207
|
+
" --yolo Continue on errors instead of stopping",
|
|
208
|
+
" --system-prompt <text> Custom system prompt (appended to Claude)",
|
|
209
|
+
" --system-prompt-file <path> Read system prompt from file",
|
|
210
|
+
" --ai-loop Use AI-based polling (legacy mode)",
|
|
211
|
+
" -- <args...> Additional arguments to pass to Claude CLI",
|
|
212
|
+
" -h, --help Show this help",
|
|
213
|
+
].join("\n"),
|
|
214
|
+
examples: [
|
|
215
|
+
` ${binName} worker`,
|
|
216
|
+
` ${binName} worker --yolo`,
|
|
217
|
+
` ${binName} worker -m "Custom prompt"`,
|
|
218
|
+
` ${binName} worker --system-prompt "You are a Python specialist"`,
|
|
219
|
+
].join("\n"),
|
|
220
|
+
},
|
|
221
|
+
lead: {
|
|
222
|
+
usage: `${binName} lead [options] [-- <args...>]`,
|
|
223
|
+
description: "Run Claude as lead agent in headless loop mode.\nSame options as worker.",
|
|
224
|
+
options: [
|
|
225
|
+
" -m, --msg <prompt> Custom prompt",
|
|
226
|
+
" --yolo Continue on errors instead of stopping",
|
|
227
|
+
" --system-prompt <text> Custom system prompt",
|
|
228
|
+
" --system-prompt-file <path> Read system prompt from file",
|
|
229
|
+
" --ai-loop Use AI-based polling (legacy mode)",
|
|
230
|
+
" -- <args...> Additional arguments to pass to Claude CLI",
|
|
231
|
+
" -h, --help Show this help",
|
|
232
|
+
].join("\n"),
|
|
233
|
+
examples: [` ${binName} lead`, ` ${binName} lead --yolo`].join("\n"),
|
|
234
|
+
},
|
|
235
|
+
docs: {
|
|
236
|
+
usage: `${binName} docs [--open]`,
|
|
237
|
+
description:
|
|
238
|
+
"Show documentation URL.\nAll pages are also available in markdown format by appending .md to the URL.",
|
|
239
|
+
options: [
|
|
240
|
+
" --open Open docs in default browser",
|
|
241
|
+
" -h, --help Show this help",
|
|
242
|
+
].join("\n"),
|
|
243
|
+
examples: [` ${binName} docs`, ` ${binName} docs --open`].join("\n"),
|
|
244
|
+
},
|
|
245
|
+
hook: {
|
|
246
|
+
usage: `${binName} hook`,
|
|
247
|
+
description:
|
|
248
|
+
"Handle Claude Code hook events from stdin.\nUsed internally by the agent-swarm hooks system.",
|
|
249
|
+
options: " -h, --help Show this help",
|
|
250
|
+
examples: ` ${binName} hook`,
|
|
251
|
+
},
|
|
252
|
+
artifact: {
|
|
253
|
+
usage: `${binName} artifact <subcommand> [options]`,
|
|
254
|
+
description: "Manage agent artifacts (serve, list, etc.).",
|
|
255
|
+
options: " -h, --help Show this help",
|
|
256
|
+
examples: [` ${binName} artifact serve`, ` ${binName} artifact help`].join("\n"),
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
function printHelp(command?: string) {
|
|
261
|
+
if (command && command !== "help" && COMMAND_HELP[command]) {
|
|
262
|
+
const cmd = COMMAND_HELP[command];
|
|
263
|
+
console.log(`\n${binName} ${command} — v${pkg.version}\n`);
|
|
264
|
+
console.log(cmd.description);
|
|
265
|
+
console.log(`\nUsage:\n ${cmd.usage}\n`);
|
|
266
|
+
console.log(`Options:\n${cmd.options}\n`);
|
|
267
|
+
console.log(`Examples:\n${cmd.examples}\n`);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
309
270
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
<Text color="magenta">AGENT_ID</Text>
|
|
333
|
-
</Box>
|
|
334
|
-
<Text>UUID for agent identification</Text>
|
|
335
|
-
</Box>
|
|
336
|
-
<Box>
|
|
337
|
-
<Box width={24}>
|
|
338
|
-
<Text color="magenta">SESSION_ID</Text>
|
|
339
|
-
</Box>
|
|
340
|
-
<Text>Folder name for worker logs (auto-generated)</Text>
|
|
341
|
-
</Box>
|
|
342
|
-
<Box>
|
|
343
|
-
<Box width={24}>
|
|
344
|
-
<Text color="magenta">YOLO</Text>
|
|
345
|
-
</Box>
|
|
346
|
-
<Text>If "true", worker continues on errors</Text>
|
|
347
|
-
</Box>
|
|
348
|
-
<Box>
|
|
349
|
-
<Box width={32}>
|
|
350
|
-
<Text color="magenta">LOG_DIR</Text>
|
|
351
|
-
</Box>
|
|
352
|
-
<Text>Directory for agent logs, defaults to ./logs</Text>
|
|
353
|
-
</Box>
|
|
354
|
-
<Box>
|
|
355
|
-
<Box width={32}>
|
|
356
|
-
<Text color="magenta">SYSTEM_PROMPT</Text>
|
|
357
|
-
</Box>
|
|
358
|
-
<Text>Custom system prompt for worker</Text>
|
|
359
|
-
</Box>
|
|
360
|
-
<Box>
|
|
361
|
-
<Box width={32}>
|
|
362
|
-
<Text color="magenta">SYSTEM_PROMPT_FILE</Text>
|
|
363
|
-
</Box>
|
|
364
|
-
<Text>Path to system prompt file</Text>
|
|
365
|
-
</Box>
|
|
366
|
-
<Box>
|
|
367
|
-
<Box width={32}>
|
|
368
|
-
<Text color="magenta">AI_LOOP</Text>
|
|
369
|
-
</Box>
|
|
370
|
-
<Text>If "true", use AI-based polling</Text>
|
|
371
|
-
</Box>
|
|
372
|
-
</Box>
|
|
373
|
-
</Box>
|
|
374
|
-
);
|
|
271
|
+
// General help
|
|
272
|
+
console.log(`\n${binName} v${pkg.version}`);
|
|
273
|
+
console.log(`${pkg.description}\n`);
|
|
274
|
+
console.log(`Usage: ${binName} <command> [options]\n`);
|
|
275
|
+
console.log("Commands:");
|
|
276
|
+
const commands = [
|
|
277
|
+
["onboard", "Set up a new swarm from scratch (Docker Compose)"],
|
|
278
|
+
["connect", "Connect this project to an existing swarm"],
|
|
279
|
+
["worker", "Run Claude in headless loop mode"],
|
|
280
|
+
["lead", "Run Claude as lead agent in headless loop"],
|
|
281
|
+
["api", "Start the API + MCP HTTP server"],
|
|
282
|
+
["claude", "Run Claude CLI"],
|
|
283
|
+
["hook", "Handle Claude Code hook events (stdin)"],
|
|
284
|
+
["artifact", "Manage agent artifacts"],
|
|
285
|
+
["docs", "Open documentation (--open to launch in browser)"],
|
|
286
|
+
["version", "Show version number"],
|
|
287
|
+
["help", "Show this help message"],
|
|
288
|
+
];
|
|
289
|
+
for (const entry of commands) {
|
|
290
|
+
console.log(` ${(entry[0] ?? "").padEnd(12)} ${entry[1] ?? ""}`);
|
|
291
|
+
}
|
|
292
|
+
console.log(`\nRun '${binName} <command> --help' for details on a specific command.\n`);
|
|
375
293
|
}
|
|
376
294
|
|
|
377
|
-
function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
|
|
295
|
+
function McpServer({ port, apiKey, dbPath }: { port: string; apiKey: string; dbPath: string }) {
|
|
378
296
|
const [status, setStatus] = useState<"starting" | "running" | "error">("starting");
|
|
379
297
|
const [error, setError] = useState<string | null>(null);
|
|
380
298
|
|
|
381
299
|
useEffect(() => {
|
|
382
300
|
process.env.PORT = port;
|
|
383
301
|
process.env.API_KEY = apiKey;
|
|
302
|
+
if (dbPath) {
|
|
303
|
+
process.env.DATABASE_PATH = dbPath;
|
|
304
|
+
}
|
|
384
305
|
|
|
385
306
|
import("./http.ts")
|
|
386
307
|
.then(() => {
|
|
@@ -390,12 +311,12 @@ function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
|
|
|
390
311
|
setStatus("error");
|
|
391
312
|
setError(err.message);
|
|
392
313
|
});
|
|
393
|
-
}, [port, apiKey]);
|
|
314
|
+
}, [port, apiKey, dbPath]);
|
|
394
315
|
|
|
395
316
|
if (status === "error") {
|
|
396
317
|
return (
|
|
397
318
|
<Box flexDirection="column" padding={1}>
|
|
398
|
-
<Text color="red">✗ Failed to start
|
|
319
|
+
<Text color="red">✗ Failed to start API server</Text>
|
|
399
320
|
{error && <Text dimColor>{error}</Text>}
|
|
400
321
|
</Box>
|
|
401
322
|
);
|
|
@@ -404,7 +325,7 @@ function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
|
|
|
404
325
|
if (status === "starting") {
|
|
405
326
|
return (
|
|
406
327
|
<Box padding={1}>
|
|
407
|
-
<Spinner label="Starting
|
|
328
|
+
<Spinner label="Starting API server..." />
|
|
408
329
|
</Box>
|
|
409
330
|
);
|
|
410
331
|
}
|
|
@@ -413,7 +334,7 @@ function McpServer({ port, apiKey }: { port: string; apiKey: string }) {
|
|
|
413
334
|
<Box flexDirection="column" padding={1}>
|
|
414
335
|
<Box>
|
|
415
336
|
<Text color="green">✓ </Text>
|
|
416
|
-
<Text>
|
|
337
|
+
<Text>API server running on </Text>
|
|
417
338
|
<Text color="cyan" bold>
|
|
418
339
|
http://localhost:{port}/mcp
|
|
419
340
|
</Text>
|
|
@@ -527,21 +448,6 @@ function UnknownCommand({ command }: { command: string }) {
|
|
|
527
448
|
);
|
|
528
449
|
}
|
|
529
450
|
|
|
530
|
-
function Version() {
|
|
531
|
-
const { exit } = useApp();
|
|
532
|
-
useEffect(() => {
|
|
533
|
-
exit();
|
|
534
|
-
}, [exit]);
|
|
535
|
-
|
|
536
|
-
return (
|
|
537
|
-
<Box padding={1}>
|
|
538
|
-
<Text>
|
|
539
|
-
{binName} v{pkg.version}
|
|
540
|
-
</Text>
|
|
541
|
-
</Box>
|
|
542
|
-
);
|
|
543
|
-
}
|
|
544
|
-
|
|
545
451
|
function App({ args }: { args: ParsedArgs }) {
|
|
546
452
|
const {
|
|
547
453
|
command,
|
|
@@ -557,13 +463,16 @@ function App({ args }: { args: ParsedArgs }) {
|
|
|
557
463
|
systemPromptFile,
|
|
558
464
|
additionalArgs,
|
|
559
465
|
aiLoop,
|
|
466
|
+
preset,
|
|
560
467
|
} = args;
|
|
561
468
|
|
|
562
469
|
switch (command) {
|
|
563
|
-
case "
|
|
564
|
-
return <
|
|
565
|
-
case "
|
|
566
|
-
return <
|
|
470
|
+
case "onboard":
|
|
471
|
+
return <Onboard dryRun={dryRun} yes={yes} preset={preset || undefined} />;
|
|
472
|
+
case "connect":
|
|
473
|
+
return <Connect dryRun={dryRun} restore={restore} yes={yes} />;
|
|
474
|
+
case "api":
|
|
475
|
+
return <McpServer port={port} apiKey={key} dbPath={args.dbPath} />;
|
|
567
476
|
case "claude":
|
|
568
477
|
return <ClaudeRunner msg={msg} headless={headless} additionalArgs={additionalArgs} />;
|
|
569
478
|
case "worker":
|
|
@@ -588,21 +497,44 @@ function App({ args }: { args: ParsedArgs }) {
|
|
|
588
497
|
aiLoop={aiLoop}
|
|
589
498
|
/>
|
|
590
499
|
);
|
|
591
|
-
|
|
592
|
-
return <Version />;
|
|
593
|
-
case "help":
|
|
594
|
-
case undefined:
|
|
595
|
-
return <Help />;
|
|
500
|
+
// version, help, docs handled before render()
|
|
596
501
|
default:
|
|
597
|
-
return <UnknownCommand command={command} />;
|
|
502
|
+
return <UnknownCommand command={command ?? ""} />;
|
|
598
503
|
}
|
|
599
504
|
}
|
|
600
505
|
|
|
601
506
|
const args = parseArgs(process.argv.slice(2));
|
|
602
507
|
|
|
603
|
-
// Handle
|
|
604
|
-
if (args.command === "
|
|
508
|
+
// Handle non-UI commands separately (plain stdout, no Ink)
|
|
509
|
+
if (args.showHelp || args.command === "help" || args.command === undefined) {
|
|
510
|
+
printHelp(args.showHelp ? args.command : undefined);
|
|
511
|
+
process.exit(0);
|
|
512
|
+
} else if (args.command === "version") {
|
|
513
|
+
console.log(`${binName} v${pkg.version}`);
|
|
514
|
+
process.exit(0);
|
|
515
|
+
} else if (args.command === "docs") {
|
|
516
|
+
const docsUrl = "https://docs.agent-swarm.dev";
|
|
517
|
+
console.log(`\n${binName} docs — v${pkg.version}\n`);
|
|
518
|
+
console.log(`Documentation: ${docsUrl}\n`);
|
|
519
|
+
console.log("All pages are also available in markdown format by appending .md to the URL.");
|
|
520
|
+
console.log(`Example: ${docsUrl}/getting-started.md\n`);
|
|
521
|
+
if (args.open) {
|
|
522
|
+
await Bun.$`open ${docsUrl}`.quiet().catch(() => {
|
|
523
|
+
console.log(`Could not open browser. Visit: ${docsUrl}`);
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
process.exit(0);
|
|
527
|
+
} else if (args.command === "hook") {
|
|
605
528
|
runHook();
|
|
529
|
+
} else if (args.command === "artifact") {
|
|
530
|
+
// Pass all args after "artifact" directly
|
|
531
|
+
const artifactArgs = process.argv.slice(process.argv.indexOf("artifact") + 1);
|
|
532
|
+
const { runArtifact } = await import("./commands/artifact");
|
|
533
|
+
await runArtifact(artifactArgs[0] || "help", {
|
|
534
|
+
additionalArgs: artifactArgs.slice(1),
|
|
535
|
+
port: args.port,
|
|
536
|
+
key: args.key,
|
|
537
|
+
});
|
|
606
538
|
} else {
|
|
607
539
|
render(<App args={args} />);
|
|
608
540
|
}
|