@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,463 +0,0 @@
|
|
|
1
|
-
# Ralph Wiggum Iterative Task Processing Implementation Plan
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Add "Ralph Wiggum" iterative task processing to agent-swarm. Tasks with `taskType: 'ralph'` automatically run in a loop where context resets between iterations but code/files persist, enabling long-running autonomous development tasks.
|
|
6
|
-
|
|
7
|
-
## Current State Analysis
|
|
8
|
-
|
|
9
|
-
### How It Works Now
|
|
10
|
-
|
|
11
|
-
1. **Runner** (`src/commands/runner.ts:520-638`): Polls for triggers via HTTP API, spawns Claude per trigger
|
|
12
|
-
2. **Task System** (`src/types.ts:3-54`): Tasks have `taskType` field (string, max 50 chars) and status workflow
|
|
13
|
-
3. **Hooks** (`src/hooks/hook.ts`): Handle `PreCompact`, `Stop`, and other events
|
|
14
|
-
4. **Send-task Tool** (`src/tools/send-task.ts`): Creates tasks with metadata fields
|
|
15
|
-
|
|
16
|
-
### Key Discoveries
|
|
17
|
-
|
|
18
|
-
- Runner already has iteration tracking at `src/commands/runner.ts:518`
|
|
19
|
-
- `PreCompact` hook fires when context is filling up at `src/hooks/hook.ts:246`
|
|
20
|
-
- Task creation supports extended options at `src/be/db.ts:1024`
|
|
21
|
-
- Thoughts directory structure exists at `thoughts/shared/plans/`
|
|
22
|
-
|
|
23
|
-
## Desired End State
|
|
24
|
-
|
|
25
|
-
After this implementation:
|
|
26
|
-
|
|
27
|
-
1. Tasks with `taskType: 'ralph'` run in iterative loop mode
|
|
28
|
-
2. Agent can signal completion via `ralph-complete` tool
|
|
29
|
-
3. PreCompact hook writes checkpoint to signal context-full state
|
|
30
|
-
4. Runner detects Ralph tasks and handles with special loop logic
|
|
31
|
-
5. Plan files persist state between iterations
|
|
32
|
-
|
|
33
|
-
### Verification
|
|
34
|
-
|
|
35
|
-
- `bun test` passes with new Ralph tests
|
|
36
|
-
- Creating a Ralph task triggers loop mode in runner
|
|
37
|
-
- PreCompact hook creates checkpoint file for Ralph tasks
|
|
38
|
-
- `ralph-complete` tool ends the loop and marks task complete
|
|
39
|
-
|
|
40
|
-
## What We're NOT Doing
|
|
41
|
-
|
|
42
|
-
- Not replacing the existing runner-level polling (Ralph is an additional mode)
|
|
43
|
-
- Not changing how non-Ralph tasks work
|
|
44
|
-
- Not implementing the full Ralph Wiggum plugin (just core iteration mechanics)
|
|
45
|
-
- Not adding UI for Ralph task management (API only for now)
|
|
46
|
-
|
|
47
|
-
## Implementation Approach
|
|
48
|
-
|
|
49
|
-
We'll implement this in seven phases:
|
|
50
|
-
|
|
51
|
-
1. **Phase 1**: Add Ralph fields to task schema and database
|
|
52
|
-
2. **Phase 2**: Create checkpoint state management system
|
|
53
|
-
3. **Phase 3**: Create `ralph-complete` MCP tool
|
|
54
|
-
4. **Phase 4**: Enhance hooks for Ralph mode detection
|
|
55
|
-
5. **Phase 5**: Add Ralph loop handler to runner
|
|
56
|
-
6. **Phase 6**: Add Ralph prompting strategy
|
|
57
|
-
7. **Phase 7**: Update API and send-task tool for Ralph creation
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## Phase 1: Task Schema - Ralph Fields
|
|
62
|
-
|
|
63
|
-
### Overview
|
|
64
|
-
|
|
65
|
-
Add Ralph-specific metadata fields to track iteration state and completion promise.
|
|
66
|
-
|
|
67
|
-
### Changes Required:
|
|
68
|
-
|
|
69
|
-
#### 1. Types
|
|
70
|
-
**File**: `src/types.ts`
|
|
71
|
-
**Changes**: Add Ralph fields to `AgentTaskSchema` after line 45
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
// Ralph loop metadata
|
|
75
|
-
ralphPromise: z.string().optional(),
|
|
76
|
-
ralphIterations: z.number().int().min(0).default(0),
|
|
77
|
-
ralphMaxIterations: z.number().int().min(1).default(50),
|
|
78
|
-
ralphLastCheckpoint: z.iso.datetime().optional(),
|
|
79
|
-
ralphPlanPath: z.string().optional(),
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
#### 2. Database Schema
|
|
83
|
-
**File**: `src/be/db.ts`
|
|
84
|
-
**Changes**: Add migrations after existing ALTER statements (~line 302)
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
try { db.run(`ALTER TABLE agent_tasks ADD COLUMN ralphPromise TEXT`); } catch {}
|
|
88
|
-
try { db.run(`ALTER TABLE agent_tasks ADD COLUMN ralphIterations INTEGER DEFAULT 0`); } catch {}
|
|
89
|
-
try { db.run(`ALTER TABLE agent_tasks ADD COLUMN ralphMaxIterations INTEGER DEFAULT 50`); } catch {}
|
|
90
|
-
try { db.run(`ALTER TABLE agent_tasks ADD COLUMN ralphLastCheckpoint TEXT`); } catch {}
|
|
91
|
-
try { db.run(`ALTER TABLE agent_tasks ADD COLUMN ralphPlanPath TEXT`); } catch {}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Update `AgentTaskRow` type (~line 476), `rowToAgentTask()` function, `CreateTaskOptions` interface (~line 1024), and `createTaskExtended()` to handle new fields.
|
|
95
|
-
|
|
96
|
-
#### 3. Add updateRalphState Function
|
|
97
|
-
**File**: `src/be/db.ts`
|
|
98
|
-
**Changes**: Add new function after `updateTaskProgress()`
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
export function updateRalphState(
|
|
102
|
-
taskId: string,
|
|
103
|
-
updates: { iterations?: number; lastCheckpoint?: string; promise?: string }
|
|
104
|
-
): AgentTask | null
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Success Criteria:
|
|
108
|
-
|
|
109
|
-
#### Automated Verification:
|
|
110
|
-
- [ ] TypeScript compiles: `bun tsc --noEmit`
|
|
111
|
-
- [ ] Database initializes without errors
|
|
112
|
-
- [ ] Tests pass: `bun test`
|
|
113
|
-
|
|
114
|
-
#### Manual Verification:
|
|
115
|
-
- [ ] New columns visible in SQLite schema
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
## Phase 2: Ralph Checkpoint State Management
|
|
120
|
-
|
|
121
|
-
### Overview
|
|
122
|
-
|
|
123
|
-
Create a checkpoint system for signaling between hooks and runner using filesystem.
|
|
124
|
-
|
|
125
|
-
### Changes Required:
|
|
126
|
-
|
|
127
|
-
#### 1. Create State Module
|
|
128
|
-
**File**: `src/ralph/state.ts` (NEW)
|
|
129
|
-
|
|
130
|
-
```typescript
|
|
131
|
-
import { join } from "node:path";
|
|
132
|
-
|
|
133
|
-
const RALPH_STATE_DIR = process.env.RALPH_STATE_DIR || "/tmp/ralph-state";
|
|
134
|
-
|
|
135
|
-
export interface RalphCheckpoint {
|
|
136
|
-
taskId: string;
|
|
137
|
-
iteration: number;
|
|
138
|
-
contextFull: boolean;
|
|
139
|
-
timestamp: string;
|
|
140
|
-
checkpointReason: "precompact" | "stop" | "manual";
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export async function writeCheckpoint(checkpoint: RalphCheckpoint): Promise<string> {
|
|
144
|
-
const dir = RALPH_STATE_DIR;
|
|
145
|
-
await Bun.$`mkdir -p ${dir}`.quiet();
|
|
146
|
-
const filePath = join(dir, `${checkpoint.taskId}.checkpoint.json`);
|
|
147
|
-
await Bun.write(filePath, JSON.stringify(checkpoint, null, 2));
|
|
148
|
-
return filePath;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export async function readCheckpoint(taskId: string): Promise<RalphCheckpoint | null> {
|
|
152
|
-
const filePath = join(RALPH_STATE_DIR, `${taskId}.checkpoint.json`);
|
|
153
|
-
const file = Bun.file(filePath);
|
|
154
|
-
if (await file.exists()) {
|
|
155
|
-
return await file.json();
|
|
156
|
-
}
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export async function clearCheckpoint(taskId: string): Promise<void> {
|
|
161
|
-
const filePath = join(RALPH_STATE_DIR, `${taskId}.checkpoint.json`);
|
|
162
|
-
try {
|
|
163
|
-
await Bun.$`rm -f ${filePath}`.quiet();
|
|
164
|
-
} catch {}
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Success Criteria:
|
|
169
|
-
|
|
170
|
-
#### Automated Verification:
|
|
171
|
-
- [ ] TypeScript compiles
|
|
172
|
-
- [ ] Unit tests pass for checkpoint operations
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Phase 3: Ralph-Complete Tool
|
|
177
|
-
|
|
178
|
-
### Overview
|
|
179
|
-
|
|
180
|
-
Create MCP tool for agents to signal task completion with evidence.
|
|
181
|
-
|
|
182
|
-
### Changes Required:
|
|
183
|
-
|
|
184
|
-
#### 1. Create Tool
|
|
185
|
-
**File**: `src/tools/ralph-complete.ts` (NEW)
|
|
186
|
-
|
|
187
|
-
Input schema:
|
|
188
|
-
- `taskId: z.uuid()` - Task to complete
|
|
189
|
-
- `summary: z.string().min(10)` - What was accomplished
|
|
190
|
-
- `promiseEvidence: z.string().min(10)` - Evidence that promise was met
|
|
191
|
-
- `artifactPaths: z.array(z.string()).optional()` - Key artifact paths
|
|
192
|
-
|
|
193
|
-
Behavior:
|
|
194
|
-
- Validates task is Ralph type and assigned to caller
|
|
195
|
-
- Marks task as completed with structured output
|
|
196
|
-
- Sets agent status to idle
|
|
197
|
-
|
|
198
|
-
#### 2. Register Tool
|
|
199
|
-
**File**: `src/server.ts`
|
|
200
|
-
**Changes**: Add import and registration
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
import { registerRalphCompleteTool } from "@/tools/ralph-complete";
|
|
204
|
-
// In createServer():
|
|
205
|
-
registerRalphCompleteTool(server);
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Success Criteria:
|
|
209
|
-
|
|
210
|
-
#### Automated Verification:
|
|
211
|
-
- [ ] Tool appears in MCP tool list
|
|
212
|
-
- [ ] TypeScript compiles
|
|
213
|
-
- [ ] Tool validates Ralph task type before allowing completion
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Phase 4: Hook Enhancements
|
|
218
|
-
|
|
219
|
-
### Overview
|
|
220
|
-
|
|
221
|
-
Enhance PreCompact and Stop hooks to detect Ralph mode and signal checkpoints.
|
|
222
|
-
|
|
223
|
-
### Changes Required:
|
|
224
|
-
|
|
225
|
-
#### 1. Update Hook Handler
|
|
226
|
-
**File**: `src/hooks/hook.ts`
|
|
227
|
-
|
|
228
|
-
Add import:
|
|
229
|
-
```typescript
|
|
230
|
-
import { writeCheckpoint } from "@/ralph/state";
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
Add helper function:
|
|
234
|
-
```typescript
|
|
235
|
-
async function getRalphTaskForAgent(agentId: string, baseUrl: string, headers: Record<string, string>): Promise<AgentTask | null> {
|
|
236
|
-
// Fetch active in_progress Ralph task for agent via API
|
|
237
|
-
}
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
Update `PreCompact` case (~line 246):
|
|
241
|
-
```typescript
|
|
242
|
-
case "PreCompact":
|
|
243
|
-
if (agentInfo) {
|
|
244
|
-
const ralphTask = await getRalphTaskForAgent(agentInfo.id, getBaseUrl(), mcpConfig?.headers || {});
|
|
245
|
-
if (ralphTask) {
|
|
246
|
-
await writeCheckpoint({
|
|
247
|
-
taskId: ralphTask.id,
|
|
248
|
-
iteration: ralphTask.ralphIterations || 0,
|
|
249
|
-
contextFull: true,
|
|
250
|
-
timestamp: new Date().toISOString(),
|
|
251
|
-
checkpointReason: "precompact",
|
|
252
|
-
});
|
|
253
|
-
console.log(`[RALPH] Context 80% full for task ${ralphTask.id}. Checkpoint written.`);
|
|
254
|
-
console.log(`If completion promise is met, call ralph-complete before session ends.`);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
break;
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
Update `Stop` case to also write checkpoint for Ralph tasks.
|
|
261
|
-
|
|
262
|
-
### Success Criteria:
|
|
263
|
-
|
|
264
|
-
#### Automated Verification:
|
|
265
|
-
- [ ] PreCompact hook writes checkpoint file for Ralph tasks
|
|
266
|
-
- [ ] Stop hook writes final checkpoint
|
|
267
|
-
- [ ] Checkpoint files created in `/tmp/ralph-state/`
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
## Phase 5: Runner Ralph Loop Handler
|
|
272
|
-
|
|
273
|
-
### Overview
|
|
274
|
-
|
|
275
|
-
Modify runner to detect Ralph tasks and handle with special iteration logic.
|
|
276
|
-
|
|
277
|
-
### Changes Required:
|
|
278
|
-
|
|
279
|
-
#### 1. Add Helper Functions
|
|
280
|
-
**File**: `src/commands/runner.ts`
|
|
281
|
-
|
|
282
|
-
```typescript
|
|
283
|
-
import { readCheckpoint, clearCheckpoint } from "@/ralph/state";
|
|
284
|
-
import { updateRalphState, getTaskById } from "@/be/db";
|
|
285
|
-
|
|
286
|
-
function isRalphTask(task: AgentTask): boolean {
|
|
287
|
-
return task.taskType === "ralph";
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
function buildRalphIterationPrompt(task: AgentTask, iteration: number): string {
|
|
291
|
-
// Build iteration-specific prompt with plan reference
|
|
292
|
-
}
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
#### 2. Add Ralph Loop Function
|
|
296
|
-
**File**: `src/commands/runner.ts`
|
|
297
|
-
|
|
298
|
-
```typescript
|
|
299
|
-
interface RalphLoopOptions {
|
|
300
|
-
task: AgentTask;
|
|
301
|
-
role: string;
|
|
302
|
-
logDir: string;
|
|
303
|
-
sessionId: string;
|
|
304
|
-
resolvedSystemPrompt: string;
|
|
305
|
-
additionalArgs?: string[];
|
|
306
|
-
apiUrl: string;
|
|
307
|
-
apiKey: string;
|
|
308
|
-
agentId: string;
|
|
309
|
-
isYolo: boolean;
|
|
310
|
-
metadataType: string;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
async function runRalphLoop(opts: RalphLoopOptions): Promise<void> {
|
|
314
|
-
// 1. Clear stale checkpoint
|
|
315
|
-
// 2. Loop until max iterations:
|
|
316
|
-
// - Build iteration prompt
|
|
317
|
-
// - Update task iteration count
|
|
318
|
-
// - Run Claude iteration
|
|
319
|
-
// - Check if task completed (ralph-complete called)
|
|
320
|
-
// - Check for checkpoint (context was full)
|
|
321
|
-
// - Continue to next iteration
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
#### 3. Integrate with Trigger Handler
|
|
326
|
-
In polling loop (~line 570), after detecting `task_assigned`:
|
|
327
|
-
|
|
328
|
-
```typescript
|
|
329
|
-
if (trigger.type === "task_assigned" && trigger.task) {
|
|
330
|
-
const task = trigger.task as AgentTask;
|
|
331
|
-
if (isRalphTask(task)) {
|
|
332
|
-
await runRalphLoop({ task, ...opts });
|
|
333
|
-
continue;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
### Success Criteria:
|
|
339
|
-
|
|
340
|
-
#### Automated Verification:
|
|
341
|
-
- [ ] Ralph tasks detected by `taskType === 'ralph'`
|
|
342
|
-
- [ ] Special prompt built for each iteration
|
|
343
|
-
- [ ] Loop continues until `ralph-complete` or max iterations
|
|
344
|
-
- [ ] Checkpoint detection triggers new iteration
|
|
345
|
-
|
|
346
|
-
#### Manual Verification:
|
|
347
|
-
- [ ] Create Ralph task, assign to agent, observe loop behavior
|
|
348
|
-
- [ ] Verify iteration count increments correctly
|
|
349
|
-
- [ ] Test max iteration limit
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## Phase 6: Prompting Strategy
|
|
354
|
-
|
|
355
|
-
### Overview
|
|
356
|
-
|
|
357
|
-
Add Ralph-specific guidance to system prompts.
|
|
358
|
-
|
|
359
|
-
### Changes Required:
|
|
360
|
-
|
|
361
|
-
#### 1. Base Prompt Addition
|
|
362
|
-
**File**: `src/prompts/base-prompt.ts`
|
|
363
|
-
|
|
364
|
-
Add `BASE_PROMPT_RALPH` constant with:
|
|
365
|
-
- Context resets but code persists explanation
|
|
366
|
-
- Progress file usage (`thoughts/shared/ralph/{taskId}/progress.md`)
|
|
367
|
-
- Context warning behavior
|
|
368
|
-
- `ralph-complete` tool usage instructions
|
|
369
|
-
|
|
370
|
-
Update `getBasePrompt()` to include Ralph prompt when task is Ralph type.
|
|
371
|
-
|
|
372
|
-
### Success Criteria:
|
|
373
|
-
|
|
374
|
-
#### Automated Verification:
|
|
375
|
-
- [ ] Ralph system prompt included when processing Ralph task
|
|
376
|
-
- [ ] TypeScript compiles
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
## Phase 7: API and Tool Updates
|
|
381
|
-
|
|
382
|
-
### Overview
|
|
383
|
-
|
|
384
|
-
Enable Ralph task creation via API and send-task tool.
|
|
385
|
-
|
|
386
|
-
### Changes Required:
|
|
387
|
-
|
|
388
|
-
#### 1. Update Task Creation Endpoint
|
|
389
|
-
**File**: `src/http.ts`
|
|
390
|
-
|
|
391
|
-
In POST /api/tasks:
|
|
392
|
-
- Accept Ralph fields: `ralphPromise`, `ralphMaxIterations`, `ralphPlanPath`
|
|
393
|
-
- Validate: Ralph tasks require `ralphPromise`
|
|
394
|
-
|
|
395
|
-
#### 2. Update send-task Tool
|
|
396
|
-
**File**: `src/tools/send-task.ts`
|
|
397
|
-
|
|
398
|
-
Add to input schema:
|
|
399
|
-
```typescript
|
|
400
|
-
ralphPromise: z.string().optional().describe("For Ralph tasks: completion criteria"),
|
|
401
|
-
ralphMaxIterations: z.number().int().min(1).max(100).optional(),
|
|
402
|
-
ralphPlanPath: z.string().optional().describe("Path to plan file in thoughts/"),
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### Success Criteria:
|
|
406
|
-
|
|
407
|
-
#### Automated Verification:
|
|
408
|
-
- [ ] POST /api/tasks accepts Ralph fields
|
|
409
|
-
- [ ] send-task tool supports Ralph creation
|
|
410
|
-
- [ ] Validation rejects Ralph tasks without promise
|
|
411
|
-
|
|
412
|
-
---
|
|
413
|
-
|
|
414
|
-
## Testing Strategy
|
|
415
|
-
|
|
416
|
-
### Unit Tests
|
|
417
|
-
|
|
418
|
-
**File**: `src/tests/ralph.test.ts` (NEW)
|
|
419
|
-
|
|
420
|
-
```typescript
|
|
421
|
-
import { test, expect } from "bun:test";
|
|
422
|
-
|
|
423
|
-
test("create Ralph task with promise", () => { /* ... */ });
|
|
424
|
-
test("update Ralph iteration state", () => { /* ... */ });
|
|
425
|
-
test("checkpoint file operations", async () => { /* ... */ });
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
### Manual Testing Steps
|
|
429
|
-
|
|
430
|
-
1. Start server: `bun run src/index.ts`
|
|
431
|
-
2. Create Ralph task:
|
|
432
|
-
```bash
|
|
433
|
-
curl -X POST http://localhost:3013/api/tasks \
|
|
434
|
-
-H "Content-Type: application/json" \
|
|
435
|
-
-d '{
|
|
436
|
-
"task": "Create hello.ts that outputs Hello World",
|
|
437
|
-
"taskType": "ralph",
|
|
438
|
-
"ralphPromise": "hello.ts exists and outputs Hello World when run"
|
|
439
|
-
}'
|
|
440
|
-
```
|
|
441
|
-
3. Start worker agent and observe loop behavior
|
|
442
|
-
4. Test ralph-complete ends loop
|
|
443
|
-
5. Test PreCompact checkpoint triggers new iteration
|
|
444
|
-
|
|
445
|
-
## Performance Considerations
|
|
446
|
-
|
|
447
|
-
- **Context reset between iterations**: Fresh context each iteration prevents degradation
|
|
448
|
-
- **Checkpoint file I/O**: Minimal overhead, uses `/tmp` filesystem
|
|
449
|
-
- **Iteration limits**: Default 50, configurable per task
|
|
450
|
-
|
|
451
|
-
## Migration Notes
|
|
452
|
-
|
|
453
|
-
- **Backwards compatible**: Non-Ralph tasks work exactly as before
|
|
454
|
-
- **Database migrations**: Additive only, no breaking changes
|
|
455
|
-
- **No data migration needed**: New fields have sensible defaults
|
|
456
|
-
|
|
457
|
-
## References
|
|
458
|
-
|
|
459
|
-
- Ralph Wiggum approach: https://awesomeclaude.ai/ralph-wiggum
|
|
460
|
-
- Runner implementation: `src/commands/runner.ts:520-638`
|
|
461
|
-
- Hook system: `src/hooks/hook.ts`
|
|
462
|
-
- Task schema: `src/types.ts:3-54`
|
|
463
|
-
- Similar plan: `thoughts/shared/plans/2025-12-23-runner-level-polling.md`
|