@desplega.ai/agent-swarm 1.49.0 → 1.52.0
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 +1 -1
- package/openapi.json +2070 -728
- package/package.json +10 -1
- package/src/agentmail/handlers.ts +65 -10
- package/src/agentmail/templates.ts +111 -0
- package/src/be/db.ts +1233 -7
- 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/019_skills.sql +65 -0
- package/src/be/migrations/020_approval_requests.sql +41 -0
- package/src/be/seed.ts +62 -0
- package/src/be/skill-parser.ts +70 -0
- package/src/be/skill-sync.ts +106 -0
- package/src/commands/runner.ts +320 -132
- package/src/commands/templates.ts +172 -0
- package/src/github/handlers.ts +292 -77
- 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/gitlab/handlers.ts +63 -22
- package/src/gitlab/templates.ts +140 -0
- package/src/heartbeat/heartbeat.ts +19 -10
- package/src/heartbeat/templates.ts +30 -0
- package/src/http/active-sessions.ts +27 -0
- package/src/http/approval-requests.ts +247 -0
- package/src/http/config.ts +3 -3
- package/src/http/index.ts +9 -2
- package/src/http/poll.ts +135 -14
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/schedules.ts +35 -0
- package/src/http/skills.ts +479 -0
- package/src/http/workflows.ts +8 -0
- package/src/linear/sync.ts +28 -4
- package/src/linear/templates.ts +47 -0
- package/src/prompts/base-prompt.ts +41 -490
- 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 +15 -2
- package/src/providers/pi-mono-extension.ts +5 -1
- package/src/scheduler/scheduler.ts +125 -91
- package/src/server.ts +44 -0
- package/src/slack/assistant.ts +7 -4
- package/src/slack/channel-activity.ts +177 -0
- package/src/slack/handlers.ts +21 -6
- package/src/slack/templates.ts +55 -0
- package/src/tests/approval-requests.test.ts +735 -0
- package/src/tests/artifact-sdk.test.ts +12 -12
- package/src/tests/base-prompt.test.ts +49 -49
- package/src/tests/channel-activity.test.ts +363 -0
- package/src/tests/heartbeat.test.ts +1 -0
- package/src/tests/linear-webhook.test.ts +7 -3
- package/src/tests/pool-session-logs.test.ts +199 -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/self-improvement.test.ts +8 -7
- package/src/tests/skill-parser.test.ts +178 -0
- package/src/tests/skill-sync.test.ts +171 -0
- package/src/tests/slack-metadata-inheritance.test.ts +1 -1
- package/src/tests/slack-thread-followups.test.ts +1 -1
- package/src/tests/structured-output.test.ts +0 -4
- package/src/tests/tool-annotations.test.ts +2 -1
- package/src/tests/update-profile-agentid.test.ts +248 -0
- package/src/tests/update-profile-auth.test.ts +195 -0
- package/src/tests/workflow-async-v2.test.ts +126 -4
- package/src/tests/workflow-definition-validation.test.ts +76 -0
- package/src/tests/workflow-executors.test.ts +4 -2
- package/src/tests/workflow-retry-v2.test.ts +1 -1
- package/src/tests/workflow-schedule-trigger.test.ts +104 -0
- package/src/tests/workflow-workspace.test.ts +272 -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/request-human-input.ts +106 -0
- package/src/tools/skills/index.ts +11 -0
- package/src/tools/skills/skill-create.ts +105 -0
- package/src/tools/skills/skill-delete.ts +67 -0
- package/src/tools/skills/skill-get.ts +75 -0
- package/src/tools/skills/skill-install-remote.ts +152 -0
- package/src/tools/skills/skill-install.ts +101 -0
- package/src/tools/skills/skill-list.ts +77 -0
- package/src/tools/skills/skill-publish.ts +123 -0
- package/src/tools/skills/skill-search.ts +43 -0
- package/src/tools/skills/skill-sync-remote.ts +128 -0
- package/src/tools/skills/skill-uninstall.ts +60 -0
- package/src/tools/skills/skill-update.ts +128 -0
- package/src/tools/store-progress.ts +22 -4
- package/src/tools/task-action.ts +20 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +23 -0
- package/src/tools/update-profile.ts +106 -34
- package/src/tools/workflows/create-workflow.ts +19 -1
- package/src/tools/workflows/update-workflow.ts +16 -1
- package/src/types.ts +109 -2
- package/src/workflows/definition.ts +30 -12
- package/src/workflows/engine.ts +40 -14
- package/src/workflows/executors/agent-task.ts +14 -3
- package/src/workflows/executors/human-in-the-loop.ts +160 -0
- package/src/workflows/executors/registry.ts +2 -0
- package/src/workflows/index.ts +1 -1
- package/src/workflows/recovery.ts +72 -0
- package/src/workflows/resume.ts +162 -12
- package/src/workflows/triggers.ts +31 -2
- package/src/workflows/version.ts +2 -0
- package/.claude/settings.json +0 -84
- package/.claude/settings.local.json +0 -117
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.entire/settings.json +0 -4
- package/.env.docker.example +0 -56
- package/.env.example +0 -78
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
- package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
- package/.github/workflows/ci.yml +0 -52
- package/.github/workflows/docker-and-deploy.yml +0 -132
- package/.github/workflows/merge-gate.yml +0 -233
- package/.opencode/plugins/entire.ts +0 -133
- package/.superset/config.json +0 -6
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -171
- package/CHANGELOG.md +0 -447
- package/CLAUDE.md +0 -521
- package/CONTRIBUTING.md +0 -315
- package/DEPLOYMENT.md +0 -622
- package/Dockerfile +0 -65
- package/Dockerfile.worker +0 -189
- package/MCP.md +0 -841
- package/UI.md +0 -40
- package/api-entrypoint.sh +0 -56
- 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/depot.json +0 -1
- package/docker-compose.example.yml +0 -350
- package/docker-compose.local.yml +0 -119
- package/docker-entrypoint.sh +0 -632
- package/docs-site/app/api/search/route.ts +0 -4
- package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
- package/docs-site/app/docs/layout.tsx +0 -12
- package/docs-site/app/globals.css +0 -24
- package/docs-site/app/layout.config.tsx +0 -34
- package/docs-site/app/layout.tsx +0 -119
- package/docs-site/app/llms-full.txt/route.ts +0 -11
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
- package/docs-site/app/llms.txt/route.ts +0 -8
- package/docs-site/app/page.tsx +0 -5
- package/docs-site/app/robots.ts +0 -13
- package/docs-site/app/sitemap.ts +0 -37
- package/docs-site/components/api-page.client.tsx +0 -4
- package/docs-site/components/api-page.tsx +0 -7
- package/docs-site/components/mdx/mermaid.tsx +0 -55
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
- package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
- package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
- package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
- package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
- package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
- package/docs-site/content/docs/(documentation)/index.mdx +0 -65
- package/docs-site/content/docs/(documentation)/meta.json +0 -19
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
- package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
- package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
- package/docs-site/content/docs/api-reference/agents.mdx +0 -9
- package/docs-site/content/docs/api-reference/channels.mdx +0 -9
- package/docs-site/content/docs/api-reference/config.mdx +0 -9
- package/docs-site/content/docs/api-reference/debug.mdx +0 -9
- package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
- package/docs-site/content/docs/api-reference/epics.mdx +0 -9
- package/docs-site/content/docs/api-reference/index.mdx +0 -32
- package/docs-site/content/docs/api-reference/memory.mdx +0 -9
- package/docs-site/content/docs/api-reference/meta.json +0 -25
- package/docs-site/content/docs/api-reference/poll.mdx +0 -9
- package/docs-site/content/docs/api-reference/repos.mdx +0 -9
- package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
- package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
- package/docs-site/content/docs/api-reference/stats.mdx +0 -9
- package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
- package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
- package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
- package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
- package/docs-site/content/docs/meta.json +0 -3
- package/docs-site/lib/get-llm-text.ts +0 -10
- package/docs-site/lib/openapi.ts +0 -23
- package/docs-site/lib/source.ts +0 -8
- package/docs-site/mdx-components.tsx +0 -13
- package/docs-site/next.config.mjs +0 -29
- package/docs-site/package.json +0 -35
- package/docs-site/pnpm-lock.yaml +0 -5407
- package/docs-site/postcss.config.mjs +0 -8
- package/docs-site/public/logo.png +0 -0
- package/docs-site/scripts/generate-docs.ts +0 -171
- package/docs-site/source.config.ts +0 -17
- package/docs-site/tsconfig.json +0 -46
- package/ecosystem.config.cjs +0 -66
- package/landing/next.config.ts +0 -14
- package/landing/package.json +0 -31
- package/landing/pnpm-lock.yaml +0 -1091
- package/landing/postcss.config.mjs +0 -8
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/logo.png +0 -0
- package/landing/public/og-image.png +0 -0
- package/landing/public/omghost-desplega.svg +0 -30
- package/landing/public/omghost-openfort.svg +0 -9
- package/landing/src/app/actions/waitlist.ts +0 -25
- package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
- package/landing/src/app/blog/page.tsx +0 -162
- package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
- package/landing/src/app/examples/page.tsx +0 -174
- package/landing/src/app/examples/x402/page.tsx +0 -456
- package/landing/src/app/globals.css +0 -122
- package/landing/src/app/layout.tsx +0 -134
- package/landing/src/app/page.tsx +0 -27
- package/landing/src/app/robots.ts +0 -13
- package/landing/src/app/sitemap.ts +0 -44
- package/landing/src/components/architecture.tsx +0 -163
- package/landing/src/components/cta.tsx +0 -52
- package/landing/src/components/features.tsx +0 -160
- package/landing/src/components/footer.tsx +0 -100
- package/landing/src/components/hero.tsx +0 -217
- package/landing/src/components/how-it-works.tsx +0 -165
- package/landing/src/components/navbar.tsx +0 -147
- package/landing/src/components/waitlist.tsx +0 -110
- package/landing/src/components/why-choose.tsx +0 -149
- package/landing/src/components/workshops.tsx +0 -328
- package/landing/src/lib/utils.ts +0 -6
- package/landing/tsconfig.json +0 -41
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
- package/new-ui/CLAUDE.md +0 -92
- package/new-ui/README.md +0 -73
- package/new-ui/biome.json +0 -42
- package/new-ui/components.json +0 -21
- package/new-ui/index.html +0 -25
- package/new-ui/package.json +0 -49
- package/new-ui/pnpm-lock.yaml +0 -4845
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +0 -814
- package/new-ui/src/api/hooks/index.ts +0 -64
- package/new-ui/src/api/hooks/use-agents.ts +0 -58
- package/new-ui/src/api/hooks/use-channels.ts +0 -115
- package/new-ui/src/api/hooks/use-config-api.ts +0 -46
- package/new-ui/src/api/hooks/use-costs.ts +0 -122
- package/new-ui/src/api/hooks/use-db-query.ts +0 -29
- package/new-ui/src/api/hooks/use-epics.ts +0 -75
- package/new-ui/src/api/hooks/use-repos.ts +0 -61
- package/new-ui/src/api/hooks/use-schedules.ts +0 -81
- package/new-ui/src/api/hooks/use-services.ts +0 -16
- package/new-ui/src/api/hooks/use-stats.ts +0 -27
- package/new-ui/src/api/hooks/use-tasks.ts +0 -89
- package/new-ui/src/api/hooks/use-workflows.ts +0 -109
- package/new-ui/src/api/types.ts +0 -549
- package/new-ui/src/app/App.tsx +0 -13
- package/new-ui/src/app/providers.tsx +0 -32
- package/new-ui/src/app/router.tsx +0 -52
- package/new-ui/src/components/layout/app-header.tsx +0 -47
- package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
- package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
- package/new-ui/src/components/layout/config-guard.tsx +0 -22
- package/new-ui/src/components/layout/root-layout.tsx +0 -40
- package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
- package/new-ui/src/components/shared/command-menu.tsx +0 -131
- package/new-ui/src/components/shared/data-grid.tsx +0 -141
- package/new-ui/src/components/shared/empty-state.tsx +0 -24
- package/new-ui/src/components/shared/error-boundary.tsx +0 -72
- package/new-ui/src/components/shared/json-viewer.tsx +0 -47
- package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
- package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
- package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
- package/new-ui/src/components/shared/stats-bar.tsx +0 -132
- package/new-ui/src/components/shared/status-badge.tsx +0 -131
- package/new-ui/src/components/shared/usage-summary.tsx +0 -179
- package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
- package/new-ui/src/components/ui/alert.tsx +0 -60
- package/new-ui/src/components/ui/avatar.tsx +0 -96
- package/new-ui/src/components/ui/badge.tsx +0 -46
- package/new-ui/src/components/ui/button.tsx +0 -62
- package/new-ui/src/components/ui/card.tsx +0 -75
- package/new-ui/src/components/ui/command.tsx +0 -160
- package/new-ui/src/components/ui/dialog.tsx +0 -143
- package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
- package/new-ui/src/components/ui/input.tsx +0 -21
- package/new-ui/src/components/ui/label.tsx +0 -19
- package/new-ui/src/components/ui/progress.tsx +0 -26
- package/new-ui/src/components/ui/scroll-area.tsx +0 -54
- package/new-ui/src/components/ui/select.tsx +0 -175
- package/new-ui/src/components/ui/separator.tsx +0 -28
- package/new-ui/src/components/ui/sheet.tsx +0 -132
- package/new-ui/src/components/ui/sidebar.tsx +0 -691
- package/new-ui/src/components/ui/skeleton.tsx +0 -13
- package/new-ui/src/components/ui/sonner.tsx +0 -35
- package/new-ui/src/components/ui/switch.tsx +0 -33
- package/new-ui/src/components/ui/table.tsx +0 -92
- package/new-ui/src/components/ui/tabs.tsx +0 -79
- package/new-ui/src/components/ui/textarea.tsx +0 -18
- package/new-ui/src/components/ui/tooltip.tsx +0 -51
- package/new-ui/src/components/workflows/action-node.tsx +0 -53
- package/new-ui/src/components/workflows/condition-node.tsx +0 -50
- package/new-ui/src/components/workflows/graph-utils.ts +0 -124
- package/new-ui/src/components/workflows/json-tree.tsx +0 -189
- package/new-ui/src/components/workflows/node-styles.ts +0 -10
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
- package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
- package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
- package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
- package/new-ui/src/hooks/use-config.ts +0 -203
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
- package/new-ui/src/hooks/use-mobile.ts +0 -19
- package/new-ui/src/hooks/use-theme.ts +0 -60
- package/new-ui/src/lib/config.ts +0 -188
- package/new-ui/src/lib/slugs.ts +0 -71
- package/new-ui/src/lib/utils.ts +0 -120
- package/new-ui/src/main.tsx +0 -11
- package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
- package/new-ui/src/pages/agents/page.tsx +0 -134
- package/new-ui/src/pages/chat/page.tsx +0 -674
- package/new-ui/src/pages/config/page.tsx +0 -1109
- package/new-ui/src/pages/dashboard/page.tsx +0 -454
- package/new-ui/src/pages/debug/page.tsx +0 -275
- package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
- package/new-ui/src/pages/epics/page.tsx +0 -321
- package/new-ui/src/pages/not-found/page.tsx +0 -18
- package/new-ui/src/pages/repos/page.tsx +0 -369
- package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
- package/new-ui/src/pages/schedules/page.tsx +0 -477
- package/new-ui/src/pages/services/page.tsx +0 -128
- package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
- package/new-ui/src/pages/tasks/page.tsx +0 -592
- package/new-ui/src/pages/usage/page.tsx +0 -195
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
- package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
- package/new-ui/src/pages/workflows/page.tsx +0 -266
- package/new-ui/src/styles/ag-grid.css +0 -36
- package/new-ui/src/styles/globals.css +0 -213
- package/new-ui/test-results/.last-run.json +0 -4
- package/new-ui/tsconfig.app.json +0 -34
- package/new-ui/tsconfig.json +0 -4
- package/new-ui/tsconfig.node.json +0 -26
- package/new-ui/vercel.json +0 -4
- package/new-ui/vite.config.ts +0 -28
- package/plugin/README.md +0 -1
- package/plugin/build-pi-skills.ts +0 -233
- package/plugin/hooks/hooks.json +0 -71
- package/prek.toml +0 -75
- package/pyproject.toml +0 -9
- package/scripts/check-db-boundary.sh +0 -60
- package/scripts/e2e-docker-provider.ts +0 -820
- package/scripts/e2e-io-schemas-test.ts +0 -807
- package/scripts/e2e-provider-test.ts +0 -220
- package/scripts/e2e-workflow-redesign.sh +0 -229
- package/scripts/e2e-workflow-test.sh +0 -285
- package/scripts/e2e-workflow-test.ts +0 -857
- package/scripts/generate-mcp-docs.ts +0 -415
- package/scripts/generate-openapi.ts +0 -26
- package/scripts/measure-tool-tokens.ts +0 -118
- package/scripts/x402-e2e-test.ts +0 -195
- package/scripts/x402-test-server.ts +0 -236
- package/scripts/x402-testnet-e2e.ts +0 -668
- package/slack-manifest.json +0 -88
- package/templates-ui/README.md +0 -46
- package/templates-ui/components.json +0 -17
- package/templates-ui/eslint.config.mjs +0 -18
- package/templates-ui/next.config.ts +0 -7
- package/templates-ui/package.json +0 -35
- package/templates-ui/pnpm-lock.yaml +0 -4571
- package/templates-ui/postcss.config.mjs +0 -7
- package/templates-ui/public/file.svg +0 -1
- package/templates-ui/public/globe.svg +0 -1
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +0 -1
- package/templates-ui/public/vercel.svg +0 -1
- package/templates-ui/public/window.svg +0 -1
- package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
- package/templates-ui/src/app/api/templates/route.ts +0 -18
- package/templates-ui/src/app/builder/page.tsx +0 -37
- package/templates-ui/src/app/globals.css +0 -94
- package/templates-ui/src/app/layout.tsx +0 -79
- package/templates-ui/src/app/page.tsx +0 -38
- package/templates-ui/src/app/robots.ts +0 -11
- package/templates-ui/src/app/sitemap.ts +0 -31
- package/templates-ui/src/components/compose-builder.tsx +0 -442
- package/templates-ui/src/components/compose-preview.tsx +0 -117
- package/templates-ui/src/components/file-preview.tsx +0 -77
- package/templates-ui/src/components/footer.tsx +0 -40
- package/templates-ui/src/components/header.tsx +0 -41
- package/templates-ui/src/components/template-card.tsx +0 -87
- package/templates-ui/src/components/template-detail.tsx +0 -125
- package/templates-ui/src/components/template-gallery.tsx +0 -263
- package/templates-ui/src/components/ui/badge.tsx +0 -36
- package/templates-ui/src/components/ui/button.tsx +0 -57
- package/templates-ui/src/components/ui/card.tsx +0 -76
- package/templates-ui/src/components/ui/separator.tsx +0 -31
- package/templates-ui/src/components/ui/tooltip.tsx +0 -32
- package/templates-ui/src/lib/compose-generator.ts +0 -241
- package/templates-ui/src/lib/templates.ts +0 -137
- package/templates-ui/src/lib/utils.ts +0 -6
- package/templates-ui/tsconfig.json +0 -34
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
- package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
- package/thoughts/shared/plans/.gitkeep +0 -0
- 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/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
- 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/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
- 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/plans/2026-02-20-auto-improvement.md +0 -803
- package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
- package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
- package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
- 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/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
- package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
- package/tsconfig.json +0 -37
|
@@ -1,512 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
date: 2026-03-08T19:00:00-05:00
|
|
3
|
-
topic: "Memory & Self-Improvement Enhancements"
|
|
4
|
-
planner: Claude
|
|
5
|
-
git_commit: 94b35ac22ee9f35581f18281a6e69751d90ebad6
|
|
6
|
-
branch: main
|
|
7
|
-
repository: agent-swarm
|
|
8
|
-
tags: [plan, memory, self-improvement, epic-context, auto-promotion]
|
|
9
|
-
status: implemented
|
|
10
|
-
autonomy: critical
|
|
11
|
-
last_updated: 2026-03-09
|
|
12
|
-
last_updated_by: Claude
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Memory & Self-Improvement Enhancements Implementation Plan
|
|
16
|
-
|
|
17
|
-
## Overview
|
|
18
|
-
|
|
19
|
-
The agent-swarm creates memories correctly (task completions, session summaries, manual learnings) but fails to **surface** them when they'd be useful. Agents are instructed to call `memory-search` but rarely do (Gap 9 from self-improvement audit). Meanwhile, the lead's follow-up tasks for epic-linked work contain no epic context, and the auto-promotion filter is too narrow — most implementation learnings stay agent-scoped and invisible to the rest of the swarm.
|
|
20
|
-
|
|
21
|
-
This plan implements four improvements that make memory compounding automatic rather than opt-in, and make epic context flow through the system where it's needed.
|
|
22
|
-
|
|
23
|
-
## Current State Analysis
|
|
24
|
-
|
|
25
|
-
### Memory Injection (P7 — never implemented)
|
|
26
|
-
|
|
27
|
-
`fetchRelevantMemories()` in `runner.ts:1039-1077` already exists and works — it searches memories by embedding similarity and formats results as markdown. It's called at `runner.ts:2122-2134` for `task_assigned` and `task_offered` triggers only. However:
|
|
28
|
-
- It only searches with the task description as the query, missing epic context
|
|
29
|
-
- It doesn't include epic plan/prd/nextSteps
|
|
30
|
-
- It doesn't include recent completed task summaries from the same epic
|
|
31
|
-
- Resumed tasks get **zero** memory injection (`runner.ts:1940-2056`)
|
|
32
|
-
|
|
33
|
-
### Memory Prompting
|
|
34
|
-
|
|
35
|
-
`BASE_PROMPT_FILESYSTEM` in `base-prompt.ts:204-258` contains the memory instructions. The key line is:
|
|
36
|
-
|
|
37
|
-
> **Session boot:** At the start of each session, use `memory-search` to recall relevant context for your current task. Your past learnings are searchable.
|
|
38
|
-
|
|
39
|
-
This is advisory — agents can and do skip it. There's no enforcement in `work-on-task.md` either.
|
|
40
|
-
|
|
41
|
-
### Auto-Promotion Filter
|
|
42
|
-
|
|
43
|
-
`store-progress.ts:200-205` — the `shouldShareWithSwarm` boolean:
|
|
44
|
-
```typescript
|
|
45
|
-
const shouldShareWithSwarm =
|
|
46
|
-
status === "completed" &&
|
|
47
|
-
(result.task!.taskType === "research" ||
|
|
48
|
-
result.task!.tags?.includes("knowledge") ||
|
|
49
|
-
result.task!.tags?.includes("shared"));
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
This excludes all `implementation`, `planning`, `quick-fix`, and `general` tasks from swarm-scope promotion. Workers on the same epic can't see each other's learnings unless they were explicitly tagged.
|
|
53
|
-
|
|
54
|
-
### Epic Context in Follow-ups
|
|
55
|
-
|
|
56
|
-
`store-progress.ts:231-272` creates follow-up tasks for the lead when workers finish. The follow-up description includes agent name, task description, and output — but does NOT include the task's `epicId`, the epic's goal/plan/nextSteps, or any directive to evaluate epic progress. The `epicId` string does not appear anywhere in `store-progress.ts`.
|
|
57
|
-
|
|
58
|
-
Separately, the `epic_progress_changed` trigger (`poll.ts:117-130`, prompt at `runner.ts:914-1001`) fires at lower priority and includes epic name, goal, progress, and task stats — but NOT plan/prd fields.
|
|
59
|
-
|
|
60
|
-
### Key Discoveries:
|
|
61
|
-
- `fetchRelevantMemories()` already works and formats nicely — we just need to enrich its query and extend its reach (`runner.ts:1039-1077`)
|
|
62
|
-
- Follow-up task creation has no `epicId` reference at all (`store-progress.ts:231-272`)
|
|
63
|
-
- The epic progress trigger only includes `epic.name`, `epic.goal`, `epic.progress`, `epic.status`, `epic.taskStats` — NOT `epic.plan` or `epic.prd` (`runner.ts:914-1001`)
|
|
64
|
-
- `inject-learning` creates agent-scoped memories (`inject-learning.ts:71-78`) — never swarm-scoped
|
|
65
|
-
- `searchMemoriesByVector` does brute-force cosine similarity in JS (`db.ts:5264-5324`) — works fine for current scale but worth noting
|
|
66
|
-
- Resumed tasks bypass memory injection entirely (`runner.ts:1940-2056`)
|
|
67
|
-
|
|
68
|
-
## Desired End State
|
|
69
|
-
|
|
70
|
-
1. **Every task starts with relevant memories injected automatically** — agents don't need to remember to call `memory-search`. The runner does it server-side before spawning Claude, including epic-specific context.
|
|
71
|
-
2. **Agent prompts enforce memory usage** — the instructions are stronger and integrated into the `work-on-task` flow, not just advisory.
|
|
72
|
-
3. **Implementation task learnings compound across the swarm** — epic-linked task completions auto-promote to swarm scope. Lead-injected learnings are swarm-scoped by default.
|
|
73
|
-
4. **The lead always has epic context when reviewing follow-ups** — follow-up tasks include the epic's goal, plan, and nextSteps. The dual-mechanism race condition is resolved.
|
|
74
|
-
|
|
75
|
-
## Quick Verification Reference
|
|
76
|
-
|
|
77
|
-
Common commands to verify the implementation:
|
|
78
|
-
- `bun run tsc:check`
|
|
79
|
-
- `bun run lint:fix`
|
|
80
|
-
- `bun test`
|
|
81
|
-
|
|
82
|
-
Key files to check:
|
|
83
|
-
- `src/commands/runner.ts` — Memory injection enrichment
|
|
84
|
-
- `src/tools/store-progress.ts` — Auto-promotion + epic-aware follow-ups
|
|
85
|
-
- `src/tools/inject-learning.ts` — Swarm-scope default
|
|
86
|
-
- `src/prompts/base-prompt.ts` — Stricter memory instructions
|
|
87
|
-
- `plugin/commands/work-on-task.md` — Memory check step
|
|
88
|
-
|
|
89
|
-
## What We're NOT Doing
|
|
90
|
-
|
|
91
|
-
- **Drive Loop**: Epic state machine, epic heartbeat, goal evaluation loop — separate plan
|
|
92
|
-
- **Epic event bus integration**: Workflow events for epic status changes — separate plan
|
|
93
|
-
- **New memory scopes**: No epic-scoped or team-scoped memories — existing agent/swarm scopes are sufficient (per Taras's decision)
|
|
94
|
-
- **Vector index optimization**: The brute-force cosine similarity in JS is fine for current scale
|
|
95
|
-
- **Pre-compaction memory flush**: Interesting OpenClaw pattern but separate effort
|
|
96
|
-
|
|
97
|
-
## Implementation Approach
|
|
98
|
-
|
|
99
|
-
Four phases, ordered by dependency (Phase 3 depends on knowing the auto-promotion rules from Phase 1, Phase 4 depends on the enriched query patterns from Phase 3). Each phase is independently testable.
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## Phase 1: Broaden Auto-Promotion of Learnings
|
|
104
|
-
|
|
105
|
-
### Overview
|
|
106
|
-
Expand the `shouldShareWithSwarm` filter in `store-progress.ts` to include epic-linked tasks, and change `inject-learning.ts` to use swarm scope by default.
|
|
107
|
-
|
|
108
|
-
### Changes Required:
|
|
109
|
-
|
|
110
|
-
#### 1. Expand auto-promotion filter
|
|
111
|
-
**File**: `src/tools/store-progress.ts`
|
|
112
|
-
**Changes**: Modify the `shouldShareWithSwarm` condition (lines 200-205) to also promote completed tasks that belong to an active epic:
|
|
113
|
-
|
|
114
|
-
```typescript
|
|
115
|
-
const shouldShareWithSwarm =
|
|
116
|
-
status === "completed" &&
|
|
117
|
-
(result.task!.taskType === "research" ||
|
|
118
|
-
result.task!.tags?.includes("knowledge") ||
|
|
119
|
-
result.task!.tags?.includes("shared") ||
|
|
120
|
-
(result.task!.epicId != null));
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
This ensures all epic-linked task completions become visible to other workers, enabling cross-worker knowledge transfer within the same project.
|
|
124
|
-
|
|
125
|
-
#### 2. Change inject-learning to swarm scope
|
|
126
|
-
**File**: `src/tools/inject-learning.ts`
|
|
127
|
-
**Changes**: Change `scope: "agent"` to `scope: "swarm"` at line 73. The lead's learnings are organizational knowledge — they should be visible to all workers, not just the target.
|
|
128
|
-
|
|
129
|
-
```typescript
|
|
130
|
-
createMemory({
|
|
131
|
-
agentId: targetAgentId,
|
|
132
|
-
scope: "swarm", // was "agent"
|
|
133
|
-
name: `Lead feedback: ${category} — ${learning.slice(0, 60)}`,
|
|
134
|
-
content: `[Lead Feedback — ${category}]\n\n${learning}`,
|
|
135
|
-
source: "manual",
|
|
136
|
-
})
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
#### 3. Update existing tests
|
|
140
|
-
**File**: `src/tests/self-improvement.test.ts`
|
|
141
|
-
**Changes**:
|
|
142
|
-
- Add test case: "epic-linked task promotes to swarm scope" — create a task with `epicId` set, complete it, verify swarm memory is created
|
|
143
|
-
- Update "regular task does NOT promote" test: ensure regular tasks **without** epicId still don't promote
|
|
144
|
-
- Update inject-learning test: verify scope is now "swarm" instead of "agent"
|
|
145
|
-
|
|
146
|
-
### Success Criteria:
|
|
147
|
-
|
|
148
|
-
#### Automated Verification:
|
|
149
|
-
- [x] Type check passes: `bun run tsc:check`
|
|
150
|
-
- [x] Lint passes: `bun run lint:fix`
|
|
151
|
-
- [x] Tests pass: `bun test src/tests/self-improvement.test.ts`
|
|
152
|
-
- [x] All tests pass: `bun test`
|
|
153
|
-
|
|
154
|
-
#### Manual Verification:
|
|
155
|
-
- [x] Start server, create a task with epicId, complete it via store-progress, verify both agent-scoped AND swarm-scoped memories exist in the DB
|
|
156
|
-
- [x] Use inject-learning tool, verify the created memory has scope "swarm"
|
|
157
|
-
|
|
158
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Phase 2: Stricter Memory Prompting
|
|
163
|
-
|
|
164
|
-
### Overview
|
|
165
|
-
Strengthen memory usage instructions across all agent roles and integrate a memory check step into the work-on-task flow.
|
|
166
|
-
|
|
167
|
-
### Changes Required:
|
|
168
|
-
|
|
169
|
-
#### 1. Strengthen memory instructions in base prompt
|
|
170
|
-
**File**: `src/prompts/base-prompt.ts`
|
|
171
|
-
**Changes**: Replace the advisory "Session boot" paragraph in `BASE_PROMPT_FILESYSTEM` (around lines 226-227) with a stronger directive:
|
|
172
|
-
|
|
173
|
-
Replace:
|
|
174
|
-
```
|
|
175
|
-
**Session boot:** At the start of each session, use `memory-search` to recall relevant context for your current task. Your past learnings are searchable.
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
With:
|
|
179
|
-
```
|
|
180
|
-
**REQUIRED — Memory recall:** At the start of EVERY task, you MUST use `memory-search` with your task description to recall relevant context before doing any work. Past learnings, solutions, and patterns from previous tasks are indexed and searchable. Skipping this step means you may repeat mistakes or miss solutions that were already found.
|
|
181
|
-
|
|
182
|
-
Do this FIRST, before reading files, writing code, or making plans.
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
#### 2. Add memory check to work-on-task command
|
|
186
|
-
**File**: `plugin/commands/work-on-task.md`
|
|
187
|
-
**Changes**: Add an explicit memory search step early in the task workflow (after fetching task details, before starting work):
|
|
188
|
-
|
|
189
|
-
```markdown
|
|
190
|
-
## Step 2: Recall Relevant Memories
|
|
191
|
-
|
|
192
|
-
Before starting any work, search your memory for relevant context:
|
|
193
|
-
1. Use `memory-search` with the task description as query
|
|
194
|
-
2. If the task has an epicId, also search with the epic name/goal
|
|
195
|
-
3. Review any returned memories — they may contain solutions, patterns, or warnings from previous tasks
|
|
196
|
-
4. Use `memory-get` on any highly relevant results to get full details
|
|
197
|
-
|
|
198
|
-
This step is NOT optional. Past learnings compound your effectiveness.
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
#### 3. Add memory reminder to lead follow-up handling
|
|
202
|
-
**File**: `src/prompts/base-prompt.ts`
|
|
203
|
-
**Changes**: In `BASE_PROMPT_LEAD`, add instructions for how to handle follow-up tasks:
|
|
204
|
-
|
|
205
|
-
```
|
|
206
|
-
### Handling Follow-Up Tasks
|
|
207
|
-
|
|
208
|
-
When you receive a follow-up about a completed or failed worker task:
|
|
209
|
-
1. **Search memory first** — use `memory-search` to check if similar tasks have been attempted before
|
|
210
|
-
2. Review the output/failure reason
|
|
211
|
-
3. If the task belongs to an epic, check the epic's progress and plan
|
|
212
|
-
4. Decide: is the goal met? If not, create next task(s). If blocked, notify the stakeholder.
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Success Criteria:
|
|
216
|
-
|
|
217
|
-
#### Automated Verification:
|
|
218
|
-
- [x] Type check passes: `bun run tsc:check`
|
|
219
|
-
- [x] Lint passes: `bun run lint:fix`
|
|
220
|
-
- [x] All tests pass: `bun test`
|
|
221
|
-
|
|
222
|
-
#### Manual Verification:
|
|
223
|
-
- [x] Read the rendered system prompt for a worker agent and verify the memory instructions are prominent and directive
|
|
224
|
-
- [x] Read the work-on-task.md file and verify the memory check step is clearly positioned before any work begins
|
|
225
|
-
- [x] Start a worker, assign a task, observe in logs/session that it calls memory-search early
|
|
226
|
-
|
|
227
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## Phase 3: Epic-Aware Follow-Up Tasks (Merge Dual Mechanism)
|
|
232
|
-
|
|
233
|
-
### Overview
|
|
234
|
-
Enrich the follow-up task created in `store-progress.ts` with epic context (goal, plan, nextSteps), and resolve the race condition between the follow-up and the `epic_progress_changed` trigger. Also enrich the epic progress trigger prompt to include plan/prd fields.
|
|
235
|
-
|
|
236
|
-
### Changes Required:
|
|
237
|
-
|
|
238
|
-
#### 1. Add epic context to follow-up task description
|
|
239
|
-
**File**: `src/tools/store-progress.ts`
|
|
240
|
-
**Changes**: After line 237 (where we check `!taskAgent.isLead`), look up the task's epic if `result.task.epicId` exists. Include the epic's goal, plan (truncated), and nextSteps in the follow-up description.
|
|
241
|
-
|
|
242
|
-
```typescript
|
|
243
|
-
// After checking !taskAgent.isLead and finding leadAgent
|
|
244
|
-
let epicContext = "";
|
|
245
|
-
if (result.task.epicId) {
|
|
246
|
-
const epic = getEpicWithProgress(result.task.epicId);
|
|
247
|
-
if (epic) {
|
|
248
|
-
epicContext = `\n\n## Epic Context\n`;
|
|
249
|
-
epicContext += `**Epic:** ${epic.name}\n`;
|
|
250
|
-
epicContext += `**Goal:** ${epic.goal}\n`;
|
|
251
|
-
epicContext += `**Progress:** ${epic.progress}% (${epic.taskStats.completed}/${epic.taskStats.total} tasks)\n`;
|
|
252
|
-
if (epic.plan) {
|
|
253
|
-
epicContext += `**Plan:**\n${epic.plan.slice(0, 1000)}\n`;
|
|
254
|
-
}
|
|
255
|
-
if (epic.nextSteps) {
|
|
256
|
-
epicContext += `**Next Steps:**\n${epic.nextSteps}\n`;
|
|
257
|
-
}
|
|
258
|
-
epicContext += `\n**Action Required:** Review the output above in the context of this epic. `;
|
|
259
|
-
epicContext += `If the epic goal is not yet met, create the next task(s) with epicId="${result.task.epicId}". `;
|
|
260
|
-
epicContext += `If blocked or unclear, notify the stakeholder. `;
|
|
261
|
-
epicContext += `If the goal is met, update the epic status to completed.`;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
Then append `epicContext` to the follow-up description. Also pass `epicId` to the follow-up task creation:
|
|
267
|
-
```typescript
|
|
268
|
-
createTaskExtended(followUpDescription + epicContext, {
|
|
269
|
-
agentId: leadAgent.id,
|
|
270
|
-
source: "system",
|
|
271
|
-
taskType: "follow-up",
|
|
272
|
-
parentTaskId: taskId,
|
|
273
|
-
epicId: result.task.epicId || undefined, // NEW: link follow-up to epic
|
|
274
|
-
slackChannelId: result.task.slackChannelId,
|
|
275
|
-
slackThreadTs: result.task.slackThreadTs,
|
|
276
|
-
slackUserId: result.task.slackUserId,
|
|
277
|
-
})
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
#### 2. Enrich epic progress trigger with plan/prd
|
|
281
|
-
**File**: `src/commands/runner.ts`
|
|
282
|
-
**Changes**: In the `epic_progress_changed` prompt builder (around lines 948-983), add the epic's `plan` and `prd` fields to the per-epic section:
|
|
283
|
-
|
|
284
|
-
```typescript
|
|
285
|
-
// After the epic goal line in the prompt builder
|
|
286
|
-
if (epic.plan) {
|
|
287
|
-
prompt += `**Plan:**\n${epic.plan.slice(0, 2000)}\n\n`;
|
|
288
|
-
}
|
|
289
|
-
if (epic.prd) {
|
|
290
|
-
prompt += `**PRD:**\n${epic.prd.slice(0, 1000)}\n\n`;
|
|
291
|
-
}
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
#### 3. Add nextSteps field to epics table
|
|
295
|
-
**File**: `src/be/migrations/NNN_add_epic_next_steps.sql` (new migration, next number)
|
|
296
|
-
**Changes**:
|
|
297
|
-
|
|
298
|
-
```sql
|
|
299
|
-
ALTER TABLE epics ADD COLUMN nextSteps TEXT;
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
Also update:
|
|
303
|
-
- `src/types.ts` — Add `nextSteps` to EpicSchema
|
|
304
|
-
- `src/be/db.ts` — Update `rowToEpic` mapper, `updateEpic` function, and `getEpicById` to include the new field
|
|
305
|
-
|
|
306
|
-
#### 4. Expose nextSteps in update-epic tool
|
|
307
|
-
**File**: `src/tools/epics/update-epic.ts`
|
|
308
|
-
**Changes**: Add `nextSteps` as an optional string parameter so the lead can persist its reasoning about what to do next.
|
|
309
|
-
|
|
310
|
-
#### 5. Deduplicate follow-up and epic_progress_changed
|
|
311
|
-
**Files**: `src/tools/store-progress.ts`
|
|
312
|
-
**Changes**: After creating the follow-up for an epic-linked task, call `markEpicsProgressNotified([result.task.epicId])` (import from `db.ts`). This updates the `progressNotifiedAt` watermark so the same completion doesn't also trigger an `epic_progress_changed` event. This makes Mechanism A (follow-up) the primary path for per-task completions, while Mechanism B (epic progress) acts as a catch-all for batched completions or edge cases.
|
|
313
|
-
|
|
314
|
-
### Success Criteria:
|
|
315
|
-
|
|
316
|
-
#### Automated Verification:
|
|
317
|
-
- [x] Type check passes: `bun run tsc:check`
|
|
318
|
-
- [x] Lint passes: `bun run lint:fix`
|
|
319
|
-
- [x] Migration applies cleanly on fresh DB: `rm agent-swarm-db.sqlite && bun run start:http` (check startup logs)
|
|
320
|
-
- [x] Migration applies cleanly on existing DB: `bun run start:http` (check startup logs)
|
|
321
|
-
- [x] All tests pass: `bun test`
|
|
322
|
-
|
|
323
|
-
#### Manual Verification:
|
|
324
|
-
- [x] Create an epic with a plan, assign a task to it, complete the task. Verify the follow-up task description includes epic context (goal, plan, progress, action directive).
|
|
325
|
-
- [x] Verify the follow-up task has the correct `epicId` set.
|
|
326
|
-
- [x] Check that `epic_progress_changed` does NOT re-fire for the same task completion (dedup via `progressNotifiedAt`).
|
|
327
|
-
- [x] Test the `update-epic` tool with `nextSteps` field — verify it persists and appears in `get-epic-details`.
|
|
328
|
-
|
|
329
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation. This is the riskiest phase — the dual-mechanism deduplication needs careful testing.
|
|
330
|
-
|
|
331
|
-
---
|
|
332
|
-
|
|
333
|
-
## Phase 4: Server-Side Memory Injection (P7)
|
|
334
|
-
|
|
335
|
-
### Overview
|
|
336
|
-
Enrich the `fetchRelevantMemories()` function to include epic context in its search query, and extend memory injection to cover all trigger types and resumed tasks. Also inject recent completed task summaries for epic-linked tasks.
|
|
337
|
-
|
|
338
|
-
### Changes Required:
|
|
339
|
-
|
|
340
|
-
#### 1. Enrich memory search query with epic context
|
|
341
|
-
**File**: `src/commands/runner.ts`
|
|
342
|
-
**Changes**: Modify the memory injection block at lines 2122-2134. When the task has an `epicId`, construct a richer search query that includes the epic's goal and plan excerpt:
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
if (trigger.type === "task_assigned" || trigger.type === "task_offered") {
|
|
346
|
-
const task = trigger.task;
|
|
347
|
-
let searchQuery = task.task; // task description
|
|
348
|
-
|
|
349
|
-
// Enrich with epic context for better memory retrieval
|
|
350
|
-
if (task.epicId) {
|
|
351
|
-
const epic = getEpicWithProgress(task.epicId);
|
|
352
|
-
if (epic) {
|
|
353
|
-
searchQuery = `[Epic: ${epic.name}] ${epic.goal}\n\n${task.task}`;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
const memoryContext = await fetchRelevantMemories(apiUrl, apiKey, agentId, searchQuery);
|
|
358
|
-
if (memoryContext) {
|
|
359
|
-
triggerPrompt += memoryContext;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// Also inject recent completed task summaries from the same epic
|
|
363
|
-
if (task.epicId) {
|
|
364
|
-
const epicTaskContext = await fetchEpicTaskContext(apiUrl, apiKey, task.epicId, task.id);
|
|
365
|
-
if (epicTaskContext) {
|
|
366
|
-
triggerPrompt += epicTaskContext;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
#### 2. Create fetchEpicTaskContext helper
|
|
373
|
-
**File**: `src/commands/runner.ts`
|
|
374
|
-
**Changes**: Add a new function that fetches recent completed task summaries from the same epic. This gives the current worker visibility into what previous workers accomplished:
|
|
375
|
-
|
|
376
|
-
```typescript
|
|
377
|
-
async function fetchEpicTaskContext(
|
|
378
|
-
apiUrl: string,
|
|
379
|
-
apiKey: string,
|
|
380
|
-
epicId: string,
|
|
381
|
-
currentTaskId: string,
|
|
382
|
-
): Promise<string | null> {
|
|
383
|
-
// Fetch recent completed tasks for this epic (exclude current task)
|
|
384
|
-
const response = await fetch(`${apiUrl}/api/tasks?epicId=${epicId}&status=completed&limit=5`, {
|
|
385
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
386
|
-
});
|
|
387
|
-
if (!response.ok) return null;
|
|
388
|
-
const tasks = await response.json();
|
|
389
|
-
|
|
390
|
-
const relevant = tasks.filter((t: any) => t.id !== currentTaskId);
|
|
391
|
-
if (relevant.length === 0) return null;
|
|
392
|
-
|
|
393
|
-
let context = "\n\n### Recent Epic Task Completions\n\n";
|
|
394
|
-
context += "These tasks were recently completed in the same epic:\n\n";
|
|
395
|
-
for (const t of relevant.slice(0, 5)) {
|
|
396
|
-
context += `- **${t.task.slice(0, 100)}**: ${(t.output || "no output").slice(0, 200)}\n`;
|
|
397
|
-
}
|
|
398
|
-
return context;
|
|
399
|
-
}
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
**Note**: Verify that the tasks API endpoint supports `?epicId=` and `?status=` query filters. If not, add them to `src/http/tasks.ts`.
|
|
403
|
-
|
|
404
|
-
#### 3. Extend memory injection to resumed tasks
|
|
405
|
-
**File**: `src/commands/runner.ts`
|
|
406
|
-
**Changes**: In the paused task resume phase (lines 1940-2056), after building the resume prompt, add memory injection:
|
|
407
|
-
|
|
408
|
-
```typescript
|
|
409
|
-
// After buildResumePrompt returns, before spawnClaudeProcess
|
|
410
|
-
const resumeSearchQuery = task.task;
|
|
411
|
-
const resumeMemoryContext = await fetchRelevantMemories(apiUrl, apiKey, agentId, resumeSearchQuery);
|
|
412
|
-
if (resumeMemoryContext) {
|
|
413
|
-
resumePrompt += resumeMemoryContext;
|
|
414
|
-
}
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
#### 4. Extend memory injection to epic_progress_changed trigger
|
|
418
|
-
**File**: `src/commands/runner.ts`
|
|
419
|
-
**Changes**: After the `buildPromptForTrigger()` call, extend the memory injection block to also cover `epic_progress_changed`:
|
|
420
|
-
|
|
421
|
-
```typescript
|
|
422
|
-
// For epic progress triggers, search memories related to the epic goals
|
|
423
|
-
if (trigger.type === "epic_progress_changed" && trigger.epics) {
|
|
424
|
-
const epicQueries = trigger.epics.map((e: any) => `${e.epic.name}: ${e.epic.goal}`).join("\n");
|
|
425
|
-
const memoryContext = await fetchRelevantMemories(apiUrl, apiKey, agentId, epicQueries);
|
|
426
|
-
if (memoryContext) {
|
|
427
|
-
triggerPrompt += memoryContext;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
### Success Criteria:
|
|
433
|
-
|
|
434
|
-
#### Automated Verification:
|
|
435
|
-
- [x] Type check passes: `bun run tsc:check`
|
|
436
|
-
- [x] Lint passes: `bun run lint:fix`
|
|
437
|
-
- [x] All tests pass: `bun test`
|
|
438
|
-
|
|
439
|
-
#### Manual Verification:
|
|
440
|
-
- [x] Start server and worker. Create some memories manually. Assign a task and observe in worker logs that the prompt includes "Relevant Past Knowledge" section.
|
|
441
|
-
- [x] Create an epic with 2 tasks. Complete task 1, then assign task 2. Verify task 2's prompt includes both memory context AND "Recent Epic Task Completions" section with task 1's summary.
|
|
442
|
-
- [x] Pause a worker mid-task (kill container). Resume it. Verify the resumed task gets memory injection.
|
|
443
|
-
- [x] Trigger an `epic_progress_changed` event. Verify the lead's prompt includes memory context related to the epic goals.
|
|
444
|
-
|
|
445
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation.
|
|
446
|
-
|
|
447
|
-
---
|
|
448
|
-
|
|
449
|
-
## Testing Strategy
|
|
450
|
-
|
|
451
|
-
### Unit Tests
|
|
452
|
-
- **Phase 1**: Extend `self-improvement.test.ts` with epic-linked promotion test and inject-learning scope test
|
|
453
|
-
- **Phase 3**: Add tests for epic context in follow-up descriptions, nextSteps field persistence
|
|
454
|
-
- **Phase 4**: Add tests for `fetchEpicTaskContext` helper, enriched search query construction
|
|
455
|
-
|
|
456
|
-
### Integration Tests
|
|
457
|
-
- Test the full flow: create epic → create task with epicId → complete task → verify follow-up has epic context + swarm memory created + memory searchable
|
|
458
|
-
|
|
459
|
-
### Manual E2E
|
|
460
|
-
```bash
|
|
461
|
-
# Start server
|
|
462
|
-
bun run start:http
|
|
463
|
-
|
|
464
|
-
# Create an agent
|
|
465
|
-
curl -X POST -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
|
|
466
|
-
http://localhost:3013/api/agents -d '{"name":"test-worker","isLead":false}'
|
|
467
|
-
|
|
468
|
-
# Create an epic with a plan
|
|
469
|
-
# (use MCP or API to create epic with plan field set)
|
|
470
|
-
|
|
471
|
-
# Create a task linked to the epic
|
|
472
|
-
curl -X POST -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
|
|
473
|
-
http://localhost:3013/api/tasks -d '{"task":"Implement feature X","epicId":"<epic-id>","agentId":"<worker-id>"}'
|
|
474
|
-
|
|
475
|
-
# Complete the task via store-progress (through MCP)
|
|
476
|
-
# Verify: follow-up task has epic context, swarm memory exists, next task gets memory injection
|
|
477
|
-
```
|
|
478
|
-
|
|
479
|
-
## Implementation Summary
|
|
480
|
-
|
|
481
|
-
**Implemented**: 2026-03-09 by Claude
|
|
482
|
-
**PR**: https://github.com/desplega-ai/agent-swarm/pull/148
|
|
483
|
-
**Version**: 1.37.0
|
|
484
|
-
**Branch**: `feat/memory-self-improvement-enhancements`
|
|
485
|
-
|
|
486
|
-
### Commits
|
|
487
|
-
1. `ec03155` — Phase 1: Broaden auto-promotion of learnings
|
|
488
|
-
2. `1c71f0a` — Phase 2: Strengthen memory prompting across agent roles
|
|
489
|
-
3. `210b478` — Phase 3: Epic-aware follow-up tasks and deduplication
|
|
490
|
-
4. `6e7c611` — Phase 4: Server-side memory injection enrichment
|
|
491
|
-
5. `7a114f0` — Bump version to 1.37.0
|
|
492
|
-
|
|
493
|
-
### E2E Verification
|
|
494
|
-
- All 1118 unit tests pass
|
|
495
|
-
- Migration 005 applies cleanly on fresh and existing DBs
|
|
496
|
-
- Live server E2E: swarm memory promotion, inject-learning scope, epic-aware follow-ups, nextSteps, dedup all confirmed
|
|
497
|
-
- Docker worker E2E: server-side memory injection (`task_assigned` trigger) confirmed — worker received 4 "Relevant Past Knowledge" entries and 2 "Recent Epic Task Completions"
|
|
498
|
-
- Prompt-based enforcement (Phase 2) confirmed as fallback for `pool_tasks_available` triggers
|
|
499
|
-
|
|
500
|
-
### What's Left (from "What We're NOT Doing")
|
|
501
|
-
The drive loop (epic state machine, goal evaluation loop) remains a separate effort — see the drive loop research below.
|
|
502
|
-
|
|
503
|
-
## References
|
|
504
|
-
|
|
505
|
-
### Upstream research (2026-03-08 learning loop session)
|
|
506
|
-
- `thoughts/taras/research/2026-03-08-drive-loop-concept.md` — Drive loop research with codebase analysis. This plan implements the **memory compounding** and **epic context** portions identified in that research. The drive loop itself (epic state machine, heartbeat, goal evaluation) is deferred to a separate plan.
|
|
507
|
-
- `thoughts/taras/research/2026-03-08-openclaw-memory-patterns.md` — OpenClaw memory patterns (web research). Informed the auto-promotion and memory injection design.
|
|
508
|
-
- `thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md` — OpenClaw vs agent-swarm comparison
|
|
509
|
-
|
|
510
|
-
### Original gap analysis
|
|
511
|
-
- `thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md` — Original P7 proposal (memory injection at task start)
|
|
512
|
-
- `thoughts/researcher/research/2026-02-20-agent-self-improvement.md` — Gap analysis identifying Gap 9 (agents don't call memory-search). This plan addresses Gap 9 via both server-side injection (Phase 4) and prompt enforcement (Phase 2).
|