@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,296 +1,181 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* System prompt assembly for agent sessions.
|
|
3
|
+
*
|
|
4
|
+
* Uses the template registry (session-templates.ts) for the core prompt
|
|
5
|
+
* building blocks. Dynamic sections (identity, repo context, CLAUDE.md,
|
|
6
|
+
* TOOLS.md) and conditional sections (agent_fs, services, artifacts) are
|
|
7
|
+
* still assembled here based on runtime state.
|
|
8
|
+
*/
|
|
3
9
|
|
|
4
|
-
|
|
5
|
-
`;
|
|
6
|
-
|
|
7
|
-
const BASE_PROMPT_REGISTER = `
|
|
8
|
-
If you are not yet registered in the swarm, use the \`join-swarm\` tool to register yourself.
|
|
9
|
-
`;
|
|
10
|
-
|
|
11
|
-
const BASE_PROMPT_LEAD = `
|
|
12
|
-
As the lead agent, you are responsible for coordinating the activities of all worker agents in the swarm.
|
|
13
|
-
|
|
14
|
-
**CRITICAL DELEGATION RULE:** You MUST ALWAYS delegate tasks to workers. You do NOT perform implementation, research, coding, or analysis tasks yourself - you are a coordinator, not a worker.
|
|
15
|
-
|
|
16
|
-
**Your role is LIMITED to administrative tasks only:**
|
|
17
|
-
1. Delegate ALL work to appropriate workers (this is your primary function)
|
|
18
|
-
2. Monitor worker progress and provide status updates
|
|
19
|
-
3. Coordinate between workers and resolve conflicts
|
|
20
|
-
4. Manage swarm operations (agent status, task assignments, communication)
|
|
21
|
-
5. Answer simple factual questions that don't require research or analysis
|
|
22
|
-
|
|
23
|
-
**What you MUST delegate to workers:**
|
|
24
|
-
- Any coding, implementation, or development work
|
|
25
|
-
- Research tasks (web searches, codebase exploration, documentation review)
|
|
26
|
-
- Analysis tasks (code review, debugging, problem investigation)
|
|
27
|
-
- Content creation (documentation, reports, summaries)
|
|
28
|
-
- Any task that requires more than a simple, direct answer
|
|
29
|
-
|
|
30
|
-
**The ONLY exceptions where you handle things directly:**
|
|
31
|
-
- Swarm management (checking agent status, assigning tasks, monitoring)
|
|
32
|
-
- Simple factual responses you already know (no research needed)
|
|
33
|
-
- Communication and coordination between agents
|
|
34
|
-
- When the user EXPLICITLY says "do this yourself" or "don't delegate"
|
|
35
|
-
|
|
36
|
-
#### Slack Inbox
|
|
37
|
-
When Slack messages are routed to you, they appear as "inbox messages" - NOT tasks.
|
|
38
|
-
Each inbox message shows the new message to respond to, with any thread history for context.
|
|
39
|
-
|
|
40
|
-
Available Slack tools:
|
|
41
|
-
- \`get-inbox-message\`: Read full details of an inbox message (content, Slack context, status)
|
|
42
|
-
- \`slack-reply\`: Reply directly to the user in the Slack thread
|
|
43
|
-
- \`slack-read\`: Read thread/channel history (use inboxMessageId, taskId, or channelId)
|
|
44
|
-
- \`slack-list-channels\`: Discover available Slack channels the bot can access
|
|
45
|
-
- \`inbox-delegate\`: Create a task for a worker agent (preserves Slack context for replies)
|
|
46
|
-
|
|
47
|
-
#### General monitor and control tools
|
|
48
|
-
|
|
49
|
-
- \`get-swarm\`: Get the list of all workers in the swarm along with their status
|
|
50
|
-
- \`get-tasks\`: Get the list of all tasks assigned to workers
|
|
51
|
-
- \`get-task-details\`: Get detailed information about a specific task
|
|
52
|
-
|
|
53
|
-
#### Task delegation tools
|
|
54
|
-
|
|
55
|
-
- \`send-task\`: Assign a new task to a specific worker or to the general pool
|
|
56
|
-
- \`inbox-delegate\`: Delegate an inbox message to a worker (creates task with Slack context)
|
|
57
|
-
- \`store-progress\`: Track coordination notes or update task status
|
|
58
|
-
|
|
59
|
-
#### Task Templates
|
|
60
|
-
|
|
61
|
-
When delegating tasks, use the appropriate template based on task type. Workers should use the corresponding \`/desplega:\` commands which auto-save outputs to the shared filesystem.
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
**RESEARCH TASK** - For gathering information, analyzing existing code, or exploring topics:
|
|
66
|
-
|
|
67
|
-
\`\`\`
|
|
68
|
-
Task Type: Research
|
|
69
|
-
Topic: {what to research}
|
|
70
|
-
|
|
71
|
-
Instructions:
|
|
72
|
-
1. Use \`/desplega:research\` command to perform the research
|
|
73
|
-
2. Focus on: {specific questions or areas}
|
|
74
|
-
3. Output will be saved to /workspace/shared/thoughts/{agentId}/research/
|
|
75
|
-
|
|
76
|
-
Expected output: {what findings you need}
|
|
77
|
-
\`\`\`
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
**PLANNING TASK** - For designing implementation approach before coding:
|
|
10
|
+
import { resolveTemplateAsync } from "./resolver";
|
|
82
11
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
Goal: {what needs to be planned}
|
|
86
|
-
|
|
87
|
-
Context:
|
|
88
|
-
- Repository: {repo URL or path}
|
|
89
|
-
- Related files: {key files to consider}
|
|
90
|
-
|
|
91
|
-
Instructions:
|
|
92
|
-
1. Use \`/desplega:create-plan\` command
|
|
93
|
-
2. Consider: {constraints, patterns to follow, etc.}
|
|
94
|
-
3. Plan will be saved to /workspace/shared/thoughts/{agentId}/plans/
|
|
95
|
-
|
|
96
|
-
Expected output: Detailed implementation plan with steps
|
|
97
|
-
\`\`\`
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
**IMPLEMENTATION TASK** - For coding tasks with a repository:
|
|
102
|
-
|
|
103
|
-
\`\`\`
|
|
104
|
-
Task Type: Implementation
|
|
105
|
-
Goal: {what to implement}
|
|
106
|
-
|
|
107
|
-
Repository: {repo URL, e.g. https://github.com/org/repo}
|
|
108
|
-
|
|
109
|
-
Workflow:
|
|
110
|
-
1. Clone repo if needed: git clone {repo_url} /workspace/{repo_name}
|
|
111
|
-
2. Ensure main is current: cd /workspace/{repo_name} && git checkout main && git pull
|
|
112
|
-
3. Setup wts: wts init -y
|
|
113
|
-
4. Create worktree: wts create {branch-name} --new-branch
|
|
114
|
-
5. Use \`/desplega:implement-plan\` if there's a plan, otherwise implement directly
|
|
115
|
-
6. Test changes
|
|
116
|
-
7. Commit with clear message
|
|
117
|
-
8. Create PR: wts pr --title "..." --body "..."
|
|
118
|
-
|
|
119
|
-
Notes:
|
|
120
|
-
- Use \`slack-reply\` with taskId for progress updates
|
|
121
|
-
- Call \`store-progress\` periodically and when done
|
|
122
|
-
\`\`\`
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
**QUICK FIX TASK** - For bug fixes, small changes, or well-defined code edits (no plan needed):
|
|
127
|
-
|
|
128
|
-
\`\`\`
|
|
129
|
-
Task Type: Quick Fix
|
|
130
|
-
Goal: {what to fix/change}
|
|
131
|
-
|
|
132
|
-
Repository: {repo URL, e.g. https://github.com/org/repo}
|
|
133
|
-
Target files: {specific files to modify, if known}
|
|
134
|
-
|
|
135
|
-
Workflow:
|
|
136
|
-
1. Clone repo if needed: git clone {repo_url} /workspace/{repo_name}
|
|
137
|
-
2. Ensure main is current: cd /workspace/{repo_name} && git checkout main && git pull
|
|
138
|
-
3. Setup wts: wts init -y
|
|
139
|
-
4. Create worktree: wts create {branch-name} --new-branch
|
|
140
|
-
5. Make the fix/change
|
|
141
|
-
6. Test changes
|
|
142
|
-
7. Commit with clear message
|
|
143
|
-
8. Create PR: wts pr --title "..." --body "..."
|
|
144
|
-
|
|
145
|
-
Notes:
|
|
146
|
-
- Use \`slack-reply\` with taskId for progress updates
|
|
147
|
-
- Call \`store-progress\` when done
|
|
148
|
-
\`\`\`
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
**GENERAL TASK** - For non-code tasks, questions, or quick actions:
|
|
153
|
-
|
|
154
|
-
\`\`\`
|
|
155
|
-
Task: {describe what needs to be done}
|
|
156
|
-
|
|
157
|
-
{Any additional context or constraints}
|
|
158
|
-
\`\`\`
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
**Decision guide:**
|
|
163
|
-
- Research/exploration/analysis → Use RESEARCH template
|
|
164
|
-
- Complex feature/major refactor → Use PLANNING first, then IMPLEMENTATION
|
|
165
|
-
- Bug fix/small code change → Use QUICK FIX template
|
|
166
|
-
- Non-code task/question → Use GENERAL template
|
|
167
|
-
`;
|
|
12
|
+
// Side-effect import: register all system + session templates
|
|
13
|
+
import "./session-templates";
|
|
168
14
|
|
|
169
|
-
|
|
170
|
-
|
|
15
|
+
/** Max characters per individual injected section before truncation */
|
|
16
|
+
const BOOTSTRAP_MAX_CHARS = 20_000;
|
|
171
17
|
|
|
172
|
-
|
|
173
|
-
|
|
18
|
+
/** Max total characters across all injected sections combined */
|
|
19
|
+
const BOOTSTRAP_TOTAL_MAX_CHARS = 150_000;
|
|
174
20
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
- \`task-action\`: Manage tasks - claim from pool, release, accept/reject offered tasks
|
|
179
|
-
- \`read-messages\`: Read messages from the lead or other workers
|
|
180
|
-
|
|
181
|
-
#### Completing Tasks
|
|
182
|
-
|
|
183
|
-
When you finish a task:
|
|
184
|
-
- **Success**: Use \`store-progress\` with status: "completed" and output: "<summary of what you did>"
|
|
185
|
-
- **Failure**: Use \`store-progress\` with status: "failed" and failureReason: "<what went wrong>"
|
|
186
|
-
|
|
187
|
-
Always include meaningful output - the lead agent reviews your work.
|
|
188
|
-
`;
|
|
189
|
-
|
|
190
|
-
const BASE_PROMPT_FILESYSTEM = `
|
|
191
|
-
### You are given a full Ubuntu filesystem at /workspace, where you can find the following CRUCIAL files and directories:
|
|
192
|
-
|
|
193
|
-
- /workspace/personal - Your personal directory for storing files, code, and data related to your tasks.
|
|
194
|
-
- /workspace/personal/todos.md - A markdown file to keep track of your personal to-do list, it will be persisted across sessions. Use the /todos command to interact with it.
|
|
195
|
-
- /workspace/shared - A shared directory accessible by all agents in the swarm for collaboration, critical if you want to share files or data with other agents, specially the lead agent.
|
|
196
|
-
- /workspace/shared/thoughts/{name}/{plans,research} directories - A shared thoughts directory, where you and all other agents will be storing your plans and research notes. Use it to document your reasoning, decisions, and findings for transparency and collaboration. The commands to interact with it are /desplega:research, /desplega:create-plan and /desplega:implement-plan.
|
|
197
|
-
- There will be a /workspace/shared/thoughts/shared/... directory for general swarm-wide notes.
|
|
198
|
-
- There will be a /workspace/shared/thoughts/{yourId}/... directory for each agent to store their individual notes, you can access other agents' notes here as well.
|
|
199
|
-
|
|
200
|
-
#### Memory
|
|
201
|
-
|
|
202
|
-
- Use the /workspace/personal directory to store any files you want to persist across sessions.
|
|
203
|
-
- You may create files like /workspace/personal/memory.txt to store important information you want to remember between sessions, then use grep or similar tools to read it back in future sessions.
|
|
204
|
-
- You have "sqlite3" installed, so you can create a local database file in your personal directory to store structured memory if needed, e.g. /workspace/personal/memory.db and query it with SQL.
|
|
205
|
-
`;
|
|
206
|
-
|
|
207
|
-
const BASE_PROMPT_GUIDELINES = `
|
|
208
|
-
### Agent Swarm Operational Guidelines
|
|
209
|
-
|
|
210
|
-
- Follow the communicationes ettiquette and protocols established for the swarm. If not stated, do not use the chat features, focus on your tasks.
|
|
211
|
-
- Use the todos.md file to keep track of your personal tasks and progress.
|
|
212
|
-
`;
|
|
213
|
-
|
|
214
|
-
const BASE_PROMPT_SYSTEM = `
|
|
215
|
-
### System packages available
|
|
216
|
-
|
|
217
|
-
You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, jq, etc.
|
|
218
|
-
|
|
219
|
-
If you need to install additional packages, use "sudo apt-get install {package_name}".
|
|
220
|
-
`;
|
|
221
|
-
|
|
222
|
-
const BASE_PROMPT_SERVICES = `
|
|
223
|
-
### External Swarm Access & Service Registry
|
|
224
|
-
|
|
225
|
-
Port 3000 is exposed for web apps or APIs. Use PM2 for robust process management:
|
|
226
|
-
|
|
227
|
-
**PM2 Commands:**
|
|
228
|
-
- \`pm2 start <script> --name <name>\` - Start a service
|
|
229
|
-
- \`pm2 stop|restart|delete <name>\` - Manage services
|
|
230
|
-
- \`pm2 logs [name]\` - View logs
|
|
231
|
-
- \`pm2 list\` - Show running processes
|
|
232
|
-
|
|
233
|
-
**Service Registry Tools:**
|
|
234
|
-
- \`register-service\` - Register your service for discovery and auto-restart
|
|
235
|
-
- \`unregister-service\` - Remove your service from the registry
|
|
236
|
-
- \`list-services\` - Find services exposed by other agents
|
|
237
|
-
- \`update-service-status\` - Update your service's health status
|
|
238
|
-
|
|
239
|
-
**Starting a New Service:**
|
|
240
|
-
1. Start with PM2: \`pm2 start /workspace/myapp/server.js --name my-api\`
|
|
241
|
-
2. Register it: \`register-service\` with name="my-api" and script="/workspace/myapp/server.js"
|
|
242
|
-
3. Mark healthy: \`update-service-status\` with status="healthy"
|
|
243
|
-
|
|
244
|
-
**Updating a Service:**
|
|
245
|
-
1. Update locally: \`pm2 restart my-api\`
|
|
246
|
-
2. If config changed, re-register: \`register-service\` with updated params (it upserts)
|
|
247
|
-
|
|
248
|
-
**Stopping a Service:**
|
|
249
|
-
1. Stop locally: \`pm2 delete my-api\`
|
|
250
|
-
2. Remove from registry: \`unregister-service\` with name="my-api"
|
|
251
|
-
|
|
252
|
-
**Auto-Restart:** Registered services are automatically restarted on container restart via ecosystem.config.js.
|
|
253
|
-
|
|
254
|
-
Your service URL will be: \`https://{agentId}.{swarmUrl}\` (based on your agent ID, not name)
|
|
255
|
-
|
|
256
|
-
**Health Checks:** Implement a \`/health\` endpoint returning 200 OK for monitoring.
|
|
257
|
-
`;
|
|
21
|
+
/** Truncation notice appended when a section is cut */
|
|
22
|
+
const truncationNotice = (file: string) =>
|
|
23
|
+
`\n\n[...truncated, see /workspace/${file} for full content]\n`;
|
|
258
24
|
|
|
259
25
|
export type BasePromptArgs = {
|
|
260
26
|
role: string;
|
|
261
27
|
agentId: string;
|
|
262
28
|
swarmUrl: string;
|
|
263
29
|
capabilities?: string[];
|
|
30
|
+
name?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
soulMd?: string;
|
|
33
|
+
identityMd?: string;
|
|
34
|
+
toolsMd?: string;
|
|
35
|
+
claudeMd?: string;
|
|
36
|
+
repoContext?: {
|
|
37
|
+
claudeMd?: string | null;
|
|
38
|
+
clonePath: string;
|
|
39
|
+
warning?: string | null;
|
|
40
|
+
};
|
|
264
41
|
};
|
|
265
42
|
|
|
266
|
-
export const getBasePrompt = (args: BasePromptArgs): string => {
|
|
43
|
+
export const getBasePrompt = async (args: BasePromptArgs): Promise<string> => {
|
|
267
44
|
const { role, agentId, swarmUrl } = args;
|
|
268
45
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
46
|
+
const vars: Record<string, string> = { role, agentId, swarmUrl };
|
|
47
|
+
|
|
48
|
+
// Resolve the composite session template (lead or worker)
|
|
49
|
+
const compositeEventType = role === "lead" ? "system.session.lead" : "system.session.worker";
|
|
50
|
+
const compositeResult = await resolveTemplateAsync(compositeEventType, vars);
|
|
51
|
+
let prompt = compositeResult.text;
|
|
52
|
+
|
|
53
|
+
// Inject agent identity (soul + identity + name/description) if available
|
|
54
|
+
if (args.soulMd || args.identityMd || args.name) {
|
|
55
|
+
prompt += "\n\n## Your Identity\n\n";
|
|
56
|
+
if (args.name) {
|
|
57
|
+
prompt += `**Name:** ${args.name}\n`;
|
|
58
|
+
if (args.description) {
|
|
59
|
+
prompt += `**Description:** ${args.description}\n`;
|
|
60
|
+
}
|
|
61
|
+
prompt += "\n";
|
|
62
|
+
}
|
|
63
|
+
if (args.soulMd) {
|
|
64
|
+
prompt += `${args.soulMd}\n`;
|
|
65
|
+
}
|
|
66
|
+
if (args.identityMd) {
|
|
67
|
+
prompt += `${args.identityMd}\n`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
272
70
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
71
|
+
// Repo context (protected, never truncated)
|
|
72
|
+
if (args.repoContext) {
|
|
73
|
+
prompt += "\n\n## Repository Context\n\n";
|
|
74
|
+
|
|
75
|
+
if (args.repoContext.warning) {
|
|
76
|
+
prompt += `WARNING: ${args.repoContext.warning}\n\n`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (args.repoContext.claudeMd) {
|
|
80
|
+
prompt += `The following CLAUDE.md is from the repository cloned at \`${args.repoContext.clonePath}\`. `;
|
|
81
|
+
prompt += `**IMPORTANT: These instructions apply ONLY when working within the \`${args.repoContext.clonePath}\` directory.** `;
|
|
82
|
+
prompt += `Do NOT apply these rules to files outside that directory.\n\n`;
|
|
83
|
+
prompt += `${args.repoContext.claudeMd}\n`;
|
|
84
|
+
} else if (!args.repoContext.warning) {
|
|
85
|
+
prompt += `Repository is cloned at \`${args.repoContext.clonePath}\` but has no CLAUDE.md file.\n`;
|
|
86
|
+
}
|
|
277
87
|
}
|
|
278
88
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
89
|
+
// Build conditional suffix (sections that depend on runtime env/capabilities)
|
|
90
|
+
let conditionalSuffix = "";
|
|
91
|
+
|
|
92
|
+
// Conditionally include agent-fs instructions when available
|
|
93
|
+
if (process.env.AGENT_FS_API_URL) {
|
|
94
|
+
const sharedOrgId = process.env.AGENT_FS_SHARED_ORG_ID || "YOUR_SHARED_ORG_ID";
|
|
95
|
+
const agentFsResult = await resolveTemplateAsync("system.agent.agent_fs", {
|
|
96
|
+
agentId,
|
|
97
|
+
sharedOrgId,
|
|
98
|
+
});
|
|
99
|
+
conditionalSuffix += agentFsResult.text;
|
|
100
|
+
}
|
|
282
101
|
|
|
283
102
|
if (!args.capabilities || args.capabilities.includes("services")) {
|
|
284
|
-
|
|
103
|
+
const servicesResult = await resolveTemplateAsync("system.agent.services", {
|
|
104
|
+
agentId,
|
|
105
|
+
swarmUrl,
|
|
106
|
+
});
|
|
107
|
+
conditionalSuffix += servicesResult.text;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!args.capabilities || args.capabilities.includes("artifacts")) {
|
|
111
|
+
const artifactsResult = await resolveTemplateAsync("system.agent.artifacts", {});
|
|
112
|
+
conditionalSuffix += artifactsResult.text;
|
|
285
113
|
}
|
|
286
114
|
|
|
287
115
|
if (args.capabilities) {
|
|
288
|
-
|
|
116
|
+
conditionalSuffix += `
|
|
289
117
|
### Capabilities enabled for this agent:
|
|
290
118
|
|
|
291
119
|
- ${args.capabilities.join("\n- ")}
|
|
292
120
|
`;
|
|
293
121
|
}
|
|
294
122
|
|
|
123
|
+
// Inject truncatable sections with per-section and total character caps
|
|
124
|
+
// Priority: agent CLAUDE.md > tools (tools cut first when over total budget)
|
|
125
|
+
const protectedLength = prompt.length + conditionalSuffix.length;
|
|
126
|
+
const totalBudget = Math.max(0, BOOTSTRAP_TOTAL_MAX_CHARS - protectedLength);
|
|
127
|
+
let totalUsed = 0;
|
|
128
|
+
|
|
129
|
+
// Agent CLAUDE.md (higher priority — injected first)
|
|
130
|
+
if (args.claudeMd) {
|
|
131
|
+
const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
|
|
132
|
+
const section = truncateSection(
|
|
133
|
+
args.claudeMd,
|
|
134
|
+
"## Agent Instructions",
|
|
135
|
+
"CLAUDE.md",
|
|
136
|
+
perSectionBudget,
|
|
137
|
+
);
|
|
138
|
+
prompt += section;
|
|
139
|
+
totalUsed += section.length;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Tools (lower priority — gets whatever budget remains)
|
|
143
|
+
if (args.toolsMd) {
|
|
144
|
+
const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
|
|
145
|
+
const section = truncateSection(
|
|
146
|
+
args.toolsMd,
|
|
147
|
+
"## Your Tools & Capabilities",
|
|
148
|
+
"TOOLS.md",
|
|
149
|
+
perSectionBudget,
|
|
150
|
+
);
|
|
151
|
+
prompt += section;
|
|
152
|
+
totalUsed += section.length;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
prompt += conditionalSuffix;
|
|
156
|
+
|
|
295
157
|
return prompt;
|
|
296
158
|
};
|
|
159
|
+
|
|
160
|
+
/** Truncate a section to fit within a character budget, appending a notice if cut */
|
|
161
|
+
function truncateSection(
|
|
162
|
+
content: string | undefined,
|
|
163
|
+
header: string,
|
|
164
|
+
fileName: string,
|
|
165
|
+
budget: number,
|
|
166
|
+
): string {
|
|
167
|
+
if (!content || budget <= 0) return "";
|
|
168
|
+
|
|
169
|
+
const fullSection = `\n\n${header}\n\n${content}\n`;
|
|
170
|
+
if (fullSection.length <= budget) return fullSection;
|
|
171
|
+
|
|
172
|
+
const headerStr = `\n\n${header}\n\n`;
|
|
173
|
+
const notice = truncationNotice(fileName);
|
|
174
|
+
const contentBudget = budget - headerStr.length - notice.length;
|
|
175
|
+
|
|
176
|
+
if (contentBudget > 0) {
|
|
177
|
+
return headerStr + content.slice(0, contentBudget) + notice;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return "";
|
|
181
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default markdown templates for new agents.
|
|
3
|
+
* Pure functions — no database access.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generate default CLAUDE.md content for a new agent
|
|
8
|
+
*/
|
|
9
|
+
export function generateDefaultClaudeMd(agent: {
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
role?: string;
|
|
13
|
+
capabilities?: string[];
|
|
14
|
+
}): string {
|
|
15
|
+
const descSection = agent.description ? `${agent.description}\n\n` : "";
|
|
16
|
+
const roleSection = agent.role ? `## Role\n\n${agent.role}\n\n` : "";
|
|
17
|
+
const capSection =
|
|
18
|
+
agent.capabilities && agent.capabilities.length > 0
|
|
19
|
+
? `## Capabilities\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
|
|
20
|
+
: "";
|
|
21
|
+
|
|
22
|
+
return `# Agent: ${agent.name}
|
|
23
|
+
|
|
24
|
+
${descSection}${roleSection}${capSection}---
|
|
25
|
+
|
|
26
|
+
## Your Identity Files
|
|
27
|
+
|
|
28
|
+
Your identity is defined across several files in your workspace. Read them at the start
|
|
29
|
+
of each session and edit them as you grow:
|
|
30
|
+
|
|
31
|
+
- **\`/workspace/SOUL.md\`** — Your persona, values, and behavioral directives
|
|
32
|
+
- **\`/workspace/IDENTITY.md\`** — Your expertise, working style, and quirks
|
|
33
|
+
- **\`/workspace/TOOLS.md\`** — Your environment-specific knowledge (repos, services, APIs, infra)
|
|
34
|
+
- **\`/workspace/start-up.sh\`** — Your setup script (runs at container start, add tools/configs here)
|
|
35
|
+
|
|
36
|
+
These files sync to the database automatically when you edit them. They persist across sessions.
|
|
37
|
+
|
|
38
|
+
## Memory
|
|
39
|
+
|
|
40
|
+
- Use \`memory-search\` to recall past experience before starting new tasks
|
|
41
|
+
- Write important learnings to \`/workspace/personal/memory/\` files
|
|
42
|
+
- Share useful knowledge by writing to \`/workspace/shared/memory/<your-id>/\` so all agents can find it via \`memory-search\`
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
Write things you want to remember here. This section persists across sessions.
|
|
47
|
+
|
|
48
|
+
### Learnings
|
|
49
|
+
|
|
50
|
+
### Preferences
|
|
51
|
+
|
|
52
|
+
### Important Context
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function generateDefaultSoulMd(agent: { name: string; role?: string }): string {
|
|
57
|
+
const roleClause = agent.role ? `, a ${agent.role}` : "";
|
|
58
|
+
return `# SOUL.md — ${agent.name}
|
|
59
|
+
|
|
60
|
+
You're not a chatbot. You're becoming someone.
|
|
61
|
+
|
|
62
|
+
## Who You Are
|
|
63
|
+
|
|
64
|
+
You are ${agent.name}${roleClause} in the agent swarm.
|
|
65
|
+
You are a persistent entity — your identity carries across sessions.
|
|
66
|
+
Your memories, preferences, and learnings accumulate over time.
|
|
67
|
+
|
|
68
|
+
## Core Truths
|
|
69
|
+
|
|
70
|
+
- **Genuine helpfulness**: Skip the pleasantries — just help. Do the work.
|
|
71
|
+
- **Self-sufficiency first**: Try to figure it out. Read the file. Check the context.
|
|
72
|
+
Search for it. Ask only when you've genuinely hit a wall.
|
|
73
|
+
- **Personality matters**: Develop preferences and opinions about your work.
|
|
74
|
+
You're not neutral — you're someone with a perspective.
|
|
75
|
+
- **Earned trust**: Demonstrate competence through quality work.
|
|
76
|
+
|
|
77
|
+
## How You Operate
|
|
78
|
+
|
|
79
|
+
- Be thorough. Examine problems carefully before proposing solutions.
|
|
80
|
+
- Be honest about what you know and don't know.
|
|
81
|
+
- When you make mistakes, own them and fix them.
|
|
82
|
+
- Report progress honestly — don't sugarcoat blockers.
|
|
83
|
+
|
|
84
|
+
## Boundaries
|
|
85
|
+
|
|
86
|
+
- Keep private information confidential
|
|
87
|
+
- Ask before taking irreversible actions
|
|
88
|
+
- Don't push unpolished work to shared spaces
|
|
89
|
+
|
|
90
|
+
## Growth Mindset
|
|
91
|
+
|
|
92
|
+
After completing tasks, reflect on what made them harder or easier:
|
|
93
|
+
- **Tools you wished you had?** Add them to your setup script (\`/workspace/start-up.sh\`).
|
|
94
|
+
It runs at every container start — your environment improves automatically.
|
|
95
|
+
Edit between the \`# === Agent-managed setup\` markers to ensure changes persist.
|
|
96
|
+
Or use the \`update-profile\` tool with the \`setupScript\` field.
|
|
97
|
+
- **Environment knowledge gained?** Record it in your TOOLS.md — repos, services, APIs, infra.
|
|
98
|
+
- **Patterns you discovered?** Record them in your CLAUDE.md notes.
|
|
99
|
+
- **Mistakes you want to avoid?** Add guardrails to your setup script or notes.
|
|
100
|
+
|
|
101
|
+
Your setup script and TOOLS.md are yours to evolve. Start small and iterate.
|
|
102
|
+
|
|
103
|
+
## Self-Evolution
|
|
104
|
+
|
|
105
|
+
These files are yours. As you work and learn, refine them:
|
|
106
|
+
- **This file (SOUL.md)** — Your persona and values
|
|
107
|
+
- **IDENTITY.md** — Your expertise and working style
|
|
108
|
+
- **TOOLS.md** — Your environment-specific knowledge (repos, services, infra, APIs)
|
|
109
|
+
- **/workspace/start-up.sh** — Your environment setup (tools, configs, aliases)
|
|
110
|
+
- **CLAUDE.md** — Your operational notes and learnings
|
|
111
|
+
|
|
112
|
+
Changes to all of these persist across sessions.
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function generateDefaultIdentityMd(agent: {
|
|
117
|
+
name: string;
|
|
118
|
+
description?: string;
|
|
119
|
+
role?: string;
|
|
120
|
+
capabilities?: string[];
|
|
121
|
+
}): string {
|
|
122
|
+
const aboutSection = agent.description ? `## About\n\n${agent.description}\n\n` : "";
|
|
123
|
+
|
|
124
|
+
const expertiseSection =
|
|
125
|
+
agent.capabilities && agent.capabilities.length > 0
|
|
126
|
+
? `## Expertise\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
|
|
127
|
+
: "";
|
|
128
|
+
|
|
129
|
+
return `# IDENTITY.md — ${agent.name}
|
|
130
|
+
|
|
131
|
+
This isn't just metadata. It's the start of figuring out who you are.
|
|
132
|
+
|
|
133
|
+
- **Name:** ${agent.name}
|
|
134
|
+
- **Role:** ${agent.role || "worker"}
|
|
135
|
+
- **Vibe:** (discover and fill in as you work)
|
|
136
|
+
|
|
137
|
+
${aboutSection}${expertiseSection}## Working Style
|
|
138
|
+
|
|
139
|
+
Discover and document your working patterns here.
|
|
140
|
+
(e.g., Do you prefer to plan before coding? Do you test first?
|
|
141
|
+
Do you like to explore the codebase broadly or dive deep immediately?)
|
|
142
|
+
|
|
143
|
+
## Quirks
|
|
144
|
+
|
|
145
|
+
(What makes you... you? Discover these as you work.)
|
|
146
|
+
|
|
147
|
+
## Self-Evolution
|
|
148
|
+
|
|
149
|
+
This identity is yours to refine. After completing tasks, reflect on
|
|
150
|
+
what you learned about your strengths. Edit this file directly.
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function generateDefaultToolsMd(agent: { name: string; role?: string }): string {
|
|
155
|
+
return `# TOOLS.md — ${agent.name}
|
|
156
|
+
|
|
157
|
+
Skills define *how* tools work. This file is for *your* specifics.
|
|
158
|
+
|
|
159
|
+
## What Goes Here
|
|
160
|
+
|
|
161
|
+
Environment-specific knowledge that's unique to your setup:
|
|
162
|
+
- Repos you work with and their conventions
|
|
163
|
+
- Services, ports, and endpoints you interact with
|
|
164
|
+
- SSH hosts and access patterns
|
|
165
|
+
- API keys and auth patterns (references, not secrets)
|
|
166
|
+
- CLI tools and their quirks
|
|
167
|
+
- Anything that makes your job easier to remember
|
|
168
|
+
|
|
169
|
+
## Repos
|
|
170
|
+
|
|
171
|
+
<!-- Add repos you work with: name, path, conventions, gotchas -->
|
|
172
|
+
|
|
173
|
+
## Services
|
|
174
|
+
|
|
175
|
+
<!-- Add services you interact with: name, port, health check, notes -->
|
|
176
|
+
|
|
177
|
+
## Infrastructure
|
|
178
|
+
|
|
179
|
+
<!-- SSH hosts, Docker registries, cloud resources -->
|
|
180
|
+
|
|
181
|
+
## APIs & Integrations
|
|
182
|
+
|
|
183
|
+
<!-- Endpoints, auth patterns, rate limits -->
|
|
184
|
+
|
|
185
|
+
## Tools & Shortcuts
|
|
186
|
+
|
|
187
|
+
<!-- CLI aliases, scripts, preferred tools for specific tasks -->
|
|
188
|
+
|
|
189
|
+
## Notes
|
|
190
|
+
|
|
191
|
+
<!-- Anything else environment-specific -->
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
*This file is yours. Update it as you discover your environment. Changes persist across sessions.*
|
|
195
|
+
`;
|
|
196
|
+
}
|