@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,376 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
date: 2025-12-21T21:10:00-08:00
|
|
3
|
-
researcher: master lord
|
|
4
|
-
git_commit: fb757dbc76fc9f3c6f5859d4a96c28af4dc02af9
|
|
5
|
-
branch: main
|
|
6
|
-
repository: agent-swarm
|
|
7
|
-
topic: "Gemini CLI Integration Research"
|
|
8
|
-
tags: [research, codebase, gemini-cli, multi-cli, integration]
|
|
9
|
-
status: complete
|
|
10
|
-
last_updated: 2025-12-21
|
|
11
|
-
last_updated_by: master lord
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Research: Gemini CLI Integration
|
|
15
|
-
|
|
16
|
-
**Date**: 2025-12-21T21:10:00-08:00
|
|
17
|
-
**Researcher**: master lord
|
|
18
|
-
**Git Commit**: fb757dbc76fc9f3c6f5859d4a96c28af4dc02af9
|
|
19
|
-
**Branch**: main
|
|
20
|
-
**Repository**: agent-swarm
|
|
21
|
-
|
|
22
|
-
## Research Question
|
|
23
|
-
|
|
24
|
-
How can we integrate the agent-swarm codebase with other CLI tools, particularly Gemini CLI, to support Gemini 3 and other models alongside Claude?
|
|
25
|
-
|
|
26
|
-
## Summary
|
|
27
|
-
|
|
28
|
-
The agent-swarm codebase has a clean separation between **CLI-agnostic** components (MCP server, tools, database) and **Claude-specific** components (CLI spawning, hooks, setup). Integration with Gemini CLI is feasible because:
|
|
29
|
-
|
|
30
|
-
1. **MCP Server works as-is** - Gemini CLI fully supports MCP servers via the same protocol
|
|
31
|
-
2. **Headless mode is similar** - Both CLIs support `--output-format stream-json` and prompt flags
|
|
32
|
-
3. **Hooks exist in both** - Different event names but similar JSON stdin/stdout protocol
|
|
33
|
-
4. **Authentication is straightforward** - Gemini uses API keys or service accounts, easy for containers
|
|
34
|
-
|
|
35
|
-
The main work involves creating an abstraction layer in the runner to support multiple CLI tools.
|
|
36
|
-
|
|
37
|
-
## Detailed Findings
|
|
38
|
-
|
|
39
|
-
### Current Architecture: CLI-Specific vs CLI-Agnostic Components
|
|
40
|
-
|
|
41
|
-
| Component | File | CLI Dependency | Notes |
|
|
42
|
-
|-----------|------|----------------|-------|
|
|
43
|
-
| MCP Server | `src/server.ts` | **CLI-agnostic** | Standard MCP SDK, works with any client |
|
|
44
|
-
| MCP Tools | `src/tools/*.ts` | **CLI-agnostic** | Pure MCP protocol |
|
|
45
|
-
| HTTP Transport | `src/http.ts` | **CLI-agnostic** | Standard MCP HTTP transport |
|
|
46
|
-
| STDIO Transport | `src/stdio.ts` | **CLI-agnostic** | Standard MCP STDIO transport |
|
|
47
|
-
| Database Layer | `src/be/db.ts` | **CLI-agnostic** | SQLite operations |
|
|
48
|
-
| Type Definitions | `src/types.ts` | **CLI-agnostic** | Data structures |
|
|
49
|
-
| CLI Spawner | `src/claude.ts` | **Claude-specific** | Hardcoded `claude` command |
|
|
50
|
-
| Agent Runner | `src/commands/runner.ts` | **Claude-specific** | Claude CLI flags |
|
|
51
|
-
| Hook Handler | `src/hooks/hook.ts` | **Claude-specific** | Claude Code hook protocol |
|
|
52
|
-
| Setup Command | `src/commands/setup.tsx` | **Claude-specific** | Creates `.claude/` config |
|
|
53
|
-
| Docker Files | `Dockerfile.worker` | **Claude-specific** | Installs Claude CLI |
|
|
54
|
-
|
|
55
|
-
### Claude CLI Integration Points
|
|
56
|
-
|
|
57
|
-
**1. CLI Spawning (`src/claude.ts:9-80`)**
|
|
58
|
-
```typescript
|
|
59
|
-
const CMD = ["claude"]; // Hardcoded CLI name
|
|
60
|
-
if (opts.headless) {
|
|
61
|
-
CMD.push("--verbose");
|
|
62
|
-
CMD.push("--output-format");
|
|
63
|
-
CMD.push("stream-json");
|
|
64
|
-
CMD.push("-p");
|
|
65
|
-
CMD.push(opts.msg);
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
**2. Agent Runner (`src/commands/runner.ts:65-92`)**
|
|
70
|
-
```typescript
|
|
71
|
-
const CMD = [
|
|
72
|
-
"claude",
|
|
73
|
-
"--verbose",
|
|
74
|
-
"--output-format", "stream-json",
|
|
75
|
-
"--dangerously-skip-permissions",
|
|
76
|
-
"--allow-dangerously-skip-permissions",
|
|
77
|
-
"--permission-mode", "bypassPermissions",
|
|
78
|
-
"-p", opts.prompt,
|
|
79
|
-
];
|
|
80
|
-
if (opts.systemPrompt) {
|
|
81
|
-
CMD.push("--append-system-prompt", opts.systemPrompt);
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**3. Hook Events (`src/hooks/hook.ts`)**
|
|
86
|
-
- `SessionStart`
|
|
87
|
-
- `PreCompact`
|
|
88
|
-
- `PreToolUse`
|
|
89
|
-
- `PostToolUse`
|
|
90
|
-
- `UserPromptSubmit`
|
|
91
|
-
- `Stop`
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Authentication Comparison
|
|
96
|
-
|
|
97
|
-
### Claude Code
|
|
98
|
-
|
|
99
|
-
| Method | Environment Variable | Notes |
|
|
100
|
-
|--------|---------------------|-------|
|
|
101
|
-
| OAuth Token | `CLAUDE_CODE_OAUTH_TOKEN` | Used in Docker workers |
|
|
102
|
-
| API Key | Not directly supported | Uses Anthropic account auth |
|
|
103
|
-
|
|
104
|
-
### Gemini CLI
|
|
105
|
-
|
|
106
|
-
| Method | Environment Variables | Best For |
|
|
107
|
-
|--------|----------------------|----------|
|
|
108
|
-
| **API Key** | `GEMINI_API_KEY` | Simple automation, quick setup |
|
|
109
|
-
| **Service Account** | `GOOGLE_APPLICATION_CREDENTIALS` + `GOOGLE_CLOUD_PROJECT` + `GOOGLE_CLOUD_LOCATION` | Docker, CI/CD, containers |
|
|
110
|
-
| **ADC (gcloud)** | `GOOGLE_CLOUD_PROJECT` + `GOOGLE_CLOUD_LOCATION` | Local dev with gcloud installed |
|
|
111
|
-
| **OAuth** | Browser login, cached at `~/.gemini/` | Interactive local use |
|
|
112
|
-
| **Cloud API Key** | `GOOGLE_API_KEY` + `GOOGLE_CLOUD_PROJECT` | Vertex AI access |
|
|
113
|
-
|
|
114
|
-
### Key Auth Behaviors
|
|
115
|
-
|
|
116
|
-
**Auto .env loading**: Gemini CLI automatically loads environment variables from:
|
|
117
|
-
1. `.gemini/.env` in project directory (first found going up)
|
|
118
|
-
2. `~/.gemini/.env`
|
|
119
|
-
3. `~/.env`
|
|
120
|
-
|
|
121
|
-
This is similar to Bun's `.env` loading behavior.
|
|
122
|
-
|
|
123
|
-
**Headless auth**: For containers/automation, use either:
|
|
124
|
-
- `GEMINI_API_KEY` - Simplest, just set the API key
|
|
125
|
-
- Service account JSON file mounted + `GOOGLE_APPLICATION_CREDENTIALS` path
|
|
126
|
-
|
|
127
|
-
### Docker Auth Mapping
|
|
128
|
-
|
|
129
|
-
| Current (Claude) | Gemini Equivalent |
|
|
130
|
-
|------------------|-------------------|
|
|
131
|
-
| `CLAUDE_CODE_OAUTH_TOKEN` env | `GEMINI_API_KEY` env |
|
|
132
|
-
| Token validation at startup | API key validation at startup |
|
|
133
|
-
| N/A | Service account JSON mount option |
|
|
134
|
-
|
|
135
|
-
For multi-CLI Docker support, the entrypoint would check:
|
|
136
|
-
```bash
|
|
137
|
-
if [ "$CLI_TOOL" = "gemini" ]; then
|
|
138
|
-
if [ -z "$GEMINI_API_KEY" ] && [ -z "$GOOGLE_APPLICATION_CREDENTIALS" ]; then
|
|
139
|
-
echo "Error: GEMINI_API_KEY or GOOGLE_APPLICATION_CREDENTIALS required"
|
|
140
|
-
exit 1
|
|
141
|
-
fi
|
|
142
|
-
elif [ "$CLI_TOOL" = "claude" ]; then
|
|
143
|
-
if [ -z "$CLAUDE_CODE_OAUTH_TOKEN" ]; then
|
|
144
|
-
echo "Error: CLAUDE_CODE_OAUTH_TOKEN required"
|
|
145
|
-
exit 1
|
|
146
|
-
fi
|
|
147
|
-
fi
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Gemini CLI Feature Comparison
|
|
153
|
-
|
|
154
|
-
### Headless Mode Flags
|
|
155
|
-
|
|
156
|
-
| Feature | Claude CLI | Gemini CLI |
|
|
157
|
-
|---------|------------|------------|
|
|
158
|
-
| Prompt flag | `-p <message>` | `--prompt <message>` |
|
|
159
|
-
| JSON output | `--output-format stream-json` | `--output-format stream-json` |
|
|
160
|
-
| Verbose mode | `--verbose` | N/A |
|
|
161
|
-
| Auto-approve | `--dangerously-skip-permissions` | `--yolo` |
|
|
162
|
-
| Model selection | N/A | `--model <name>` |
|
|
163
|
-
| Approval mode | `--permission-mode bypassPermissions` | `--approval-mode <mode>` |
|
|
164
|
-
| System prompt | `--append-system-prompt` | `GEMINI_SYSTEM_MD` env var |
|
|
165
|
-
|
|
166
|
-
### MCP Server Configuration
|
|
167
|
-
|
|
168
|
-
**Claude Code (`.mcp.json`):**
|
|
169
|
-
```json
|
|
170
|
-
{
|
|
171
|
-
"mcpServers": {
|
|
172
|
-
"agent-swarm": {
|
|
173
|
-
"command": "bunx",
|
|
174
|
-
"args": ["@desplega.ai/agent-swarm@latest", "mcp", "stdio"],
|
|
175
|
-
"env": { "API_KEY": "..." }
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Gemini CLI (`settings.json`):**
|
|
182
|
-
```json
|
|
183
|
-
{
|
|
184
|
-
"mcpServers": {
|
|
185
|
-
"agent-swarm": {
|
|
186
|
-
"command": "bunx",
|
|
187
|
-
"args": ["@desplega.ai/agent-swarm@latest", "mcp", "stdio"],
|
|
188
|
-
"env": { "API_KEY": "..." }
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Nearly identical! Both follow the MCP specification.
|
|
195
|
-
|
|
196
|
-
### Hook Events Mapping
|
|
197
|
-
|
|
198
|
-
| Claude Code | Gemini CLI | Notes |
|
|
199
|
-
|-------------|------------|-------|
|
|
200
|
-
| `SessionStart` | `SessionStart` | Same |
|
|
201
|
-
| `Stop` | `SessionEnd` | Different name |
|
|
202
|
-
| `PreToolUse` | `BeforeTool` | Different name |
|
|
203
|
-
| `PostToolUse` | `AfterTool` | Different name |
|
|
204
|
-
| `UserPromptSubmit` | `BeforeAgent` | Similar concept |
|
|
205
|
-
| `PreCompact` | `PreCompress` | Different name |
|
|
206
|
-
| N/A | `BeforeModel` / `AfterModel` | Gemini-only |
|
|
207
|
-
| N/A | `BeforeToolSelection` | Gemini-only |
|
|
208
|
-
| N/A | `Notification` | Gemini-only |
|
|
209
|
-
|
|
210
|
-
### Custom Commands
|
|
211
|
-
|
|
212
|
-
| Feature | Claude Code | Gemini CLI |
|
|
213
|
-
|---------|-------------|------------|
|
|
214
|
-
| Format | Markdown | TOML |
|
|
215
|
-
| Location | `.claude/commands/` | `.gemini/commands/` |
|
|
216
|
-
| Invocation | `/command-name` | `/command-name` |
|
|
217
|
-
| Arguments | Passed to prompt | `{{args}}` placeholder |
|
|
218
|
-
| Namespacing | Flat | Colon-separated (`/git:commit`) |
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Integration Architecture
|
|
223
|
-
|
|
224
|
-
### Option 1: CLI Adapter Pattern
|
|
225
|
-
|
|
226
|
-
Create an abstraction layer that normalizes CLI differences:
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
// src/adapters/types.ts
|
|
230
|
-
interface CLIAdapter {
|
|
231
|
-
name: string;
|
|
232
|
-
command: string;
|
|
233
|
-
buildArgs(opts: RunOptions): string[];
|
|
234
|
-
parseOutput(line: string): ParsedOutput;
|
|
235
|
-
hookEventMap: Record<string, string>;
|
|
236
|
-
authEnvVars: string[];
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// src/adapters/claude-adapter.ts
|
|
240
|
-
export const claudeAdapter: CLIAdapter = {
|
|
241
|
-
name: "claude",
|
|
242
|
-
command: "claude",
|
|
243
|
-
authEnvVars: ["CLAUDE_CODE_OAUTH_TOKEN"],
|
|
244
|
-
buildArgs: (opts) => [
|
|
245
|
-
"--verbose",
|
|
246
|
-
"--output-format", "stream-json",
|
|
247
|
-
"--dangerously-skip-permissions",
|
|
248
|
-
"--allow-dangerously-skip-permissions",
|
|
249
|
-
"--permission-mode", "bypassPermissions",
|
|
250
|
-
"-p", opts.prompt,
|
|
251
|
-
...(opts.systemPrompt ? ["--append-system-prompt", opts.systemPrompt] : []),
|
|
252
|
-
],
|
|
253
|
-
parseOutput: (line) => JSON.parse(line),
|
|
254
|
-
hookEventMap: {
|
|
255
|
-
SessionStart: "SessionStart",
|
|
256
|
-
Stop: "Stop",
|
|
257
|
-
PreToolUse: "PreToolUse",
|
|
258
|
-
PostToolUse: "PostToolUse",
|
|
259
|
-
},
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
// src/adapters/gemini-adapter.ts
|
|
263
|
-
export const geminiAdapter: CLIAdapter = {
|
|
264
|
-
name: "gemini",
|
|
265
|
-
command: "gemini",
|
|
266
|
-
authEnvVars: ["GEMINI_API_KEY", "GOOGLE_APPLICATION_CREDENTIALS"],
|
|
267
|
-
buildArgs: (opts) => [
|
|
268
|
-
"--output-format", "stream-json",
|
|
269
|
-
"--yolo",
|
|
270
|
-
"--prompt", opts.prompt,
|
|
271
|
-
],
|
|
272
|
-
// System prompt handled via GEMINI_SYSTEM_MD env var
|
|
273
|
-
parseOutput: (line) => JSON.parse(line),
|
|
274
|
-
hookEventMap: {
|
|
275
|
-
SessionStart: "SessionStart",
|
|
276
|
-
Stop: "SessionEnd",
|
|
277
|
-
PreToolUse: "BeforeTool",
|
|
278
|
-
PostToolUse: "AfterTool",
|
|
279
|
-
},
|
|
280
|
-
};
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### Option 2: Configuration-Driven
|
|
284
|
-
|
|
285
|
-
Add CLI tool configuration to environment/settings:
|
|
286
|
-
|
|
287
|
-
```typescript
|
|
288
|
-
interface CLIConfig {
|
|
289
|
-
command: string;
|
|
290
|
-
headlessFlags: string[];
|
|
291
|
-
autoApproveFlag: string;
|
|
292
|
-
promptFlag: string;
|
|
293
|
-
systemPromptFlag?: string;
|
|
294
|
-
systemPromptEnv?: string;
|
|
295
|
-
outputFormatFlag: string[];
|
|
296
|
-
authEnvVars: string[];
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
const CLI_CONFIGS: Record<string, CLIConfig> = {
|
|
300
|
-
claude: {
|
|
301
|
-
command: "claude",
|
|
302
|
-
headlessFlags: ["--verbose"],
|
|
303
|
-
autoApproveFlag: "--dangerously-skip-permissions",
|
|
304
|
-
promptFlag: "-p",
|
|
305
|
-
systemPromptFlag: "--append-system-prompt",
|
|
306
|
-
outputFormatFlag: ["--output-format", "stream-json"],
|
|
307
|
-
authEnvVars: ["CLAUDE_CODE_OAUTH_TOKEN"],
|
|
308
|
-
},
|
|
309
|
-
gemini: {
|
|
310
|
-
command: "gemini",
|
|
311
|
-
headlessFlags: [],
|
|
312
|
-
autoApproveFlag: "--yolo",
|
|
313
|
-
promptFlag: "--prompt",
|
|
314
|
-
systemPromptEnv: "GEMINI_SYSTEM_MD",
|
|
315
|
-
outputFormatFlag: ["--output-format", "stream-json"],
|
|
316
|
-
authEnvVars: ["GEMINI_API_KEY", "GOOGLE_APPLICATION_CREDENTIALS"],
|
|
317
|
-
},
|
|
318
|
-
};
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
### Files Requiring Changes
|
|
322
|
-
|
|
323
|
-
| File | Change Required |
|
|
324
|
-
|------|-----------------|
|
|
325
|
-
| `src/claude.ts` | Rename to `src/cli-runner.ts`, add adapter support |
|
|
326
|
-
| `src/commands/runner.ts` | Use CLI adapter instead of hardcoded flags |
|
|
327
|
-
| `src/hooks/hook.ts` | Map hook events through adapter |
|
|
328
|
-
| `src/commands/setup.tsx` | Generate config for selected CLI |
|
|
329
|
-
| `Dockerfile.worker` | Add Gemini CLI installation option |
|
|
330
|
-
| `docker-entrypoint.sh` | Handle multiple auth mechanisms |
|
|
331
|
-
| `package.json` | Add `gemini` script variants |
|
|
332
|
-
|
|
333
|
-
### What Works Without Changes
|
|
334
|
-
|
|
335
|
-
1. **MCP Server** (`src/server.ts`) - Fully CLI-agnostic
|
|
336
|
-
2. **All MCP Tools** (`src/tools/*.ts`) - Pure MCP protocol
|
|
337
|
-
3. **Database Layer** (`src/be/db.ts`) - No CLI awareness
|
|
338
|
-
4. **Type Definitions** (`src/types.ts`) - CLI-agnostic data structures
|
|
339
|
-
5. **HTTP/STDIO Transports** - Standard MCP SDK
|
|
340
|
-
|
|
341
|
-
---
|
|
342
|
-
|
|
343
|
-
## Code References
|
|
344
|
-
|
|
345
|
-
- `src/claude.ts:9-80` - Claude CLI spawning wrapper
|
|
346
|
-
- `src/commands/runner.ts:65-192` - Agent runner with CLI flags
|
|
347
|
-
- `src/hooks/hook.ts:56-306` - Hook event handler
|
|
348
|
-
- `src/server.ts:42-96` - CLI-agnostic MCP server
|
|
349
|
-
- `src/commands/setup.tsx:56-76` - Claude-specific setup
|
|
350
|
-
- `Dockerfile.worker:76-98` - Claude CLI installation
|
|
351
|
-
|
|
352
|
-
## Limitations
|
|
353
|
-
|
|
354
|
-
| Feature | Claude Code | Gemini CLI | Impact |
|
|
355
|
-
|---------|-------------|------------|--------|
|
|
356
|
-
| Plugin system | Full support | Extensions (different API) | Commands need porting |
|
|
357
|
-
| Agents | Supported | Not mentioned | May not work |
|
|
358
|
-
| Skills | Supported | Not mentioned | May not work |
|
|
359
|
-
| Context caching | Yes | Yes (token caching) | Works differently |
|
|
360
|
-
| Hooks | 6 events | 11 events | Need event mapping |
|
|
361
|
-
|
|
362
|
-
## Related Research
|
|
363
|
-
|
|
364
|
-
- `thoughts/shared/research/2025-12-19-agent-log-streaming.md` - Claude CLI JSON streaming format
|
|
365
|
-
|
|
366
|
-
## Open Questions
|
|
367
|
-
|
|
368
|
-
1. **JSON streaming format** - Are Claude's and Gemini's stream-json outputs compatible? Both emit newline-delimited JSON but event structures may differ.
|
|
369
|
-
|
|
370
|
-
2. **Tool name prefixing** - Both CLIs prefix MCP tools. Need to verify `mcp__agent-swarm__*` permission pattern works in Gemini.
|
|
371
|
-
|
|
372
|
-
3. **Gemini Extensions vs Claude Plugins** - These are different systems. If we want to support Gemini extensions, that's a separate effort.
|
|
373
|
-
|
|
374
|
-
4. **Model selection** - Gemini CLI supports model switching (`/model`). Should we expose this in agent config?
|
|
375
|
-
|
|
376
|
-
5. **Quota differences** - Gemini has different quota/pricing. May affect swarm behavior with many agents.
|