swarm-engine 1.0.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/AGENTS.md +72 -0
- package/CLAUDE.md +89 -0
- package/LICENSE +21 -0
- package/README.md +235 -0
- package/agents/accessibility-reviewer.md +118 -0
- package/agents/api-contract-reviewer.md +99 -0
- package/agents/concurrency-reviewer.md +111 -0
- package/agents/data-integrity-reviewer.md +103 -0
- package/agents/debugger.md +99 -0
- package/agents/dependency-reviewer.md +115 -0
- package/agents/devils-advocate.md +94 -0
- package/agents/documentation-reviewer.md +114 -0
- package/agents/documenter.md +78 -0
- package/agents/error-handling-reviewer.md +113 -0
- package/agents/grounding.md +99 -0
- package/agents/guardian.md +87 -0
- package/agents/implementer.md +141 -0
- package/agents/integrator.md +95 -0
- package/agents/judge.md +79 -0
- package/agents/librarian.md +90 -0
- package/agents/orchestrator.md +331 -0
- package/agents/performance-reviewer.md +93 -0
- package/agents/planner.md +106 -0
- package/agents/refactorer.md +92 -0
- package/agents/researcher.md +97 -0
- package/agents/reviewer.md +117 -0
- package/agents/security-reviewer.md +107 -0
- package/agents/sentinel.md +92 -0
- package/agents/tester.md +93 -0
- package/agents/testing-reviewer.md +112 -0
- package/commands/diff-review.md +64 -0
- package/commands/fix-pr.md +78 -0
- package/commands/red-team.md +82 -0
- package/commands/research.md +59 -0
- package/commands/resume.md +80 -0
- package/commands/review-cycle.md +123 -0
- package/commands/swarm-setup.md +28 -0
- package/commands/swarm.md +126 -0
- package/commands/tdd.md +91 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +3 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/acp.d.ts +3 -0
- package/dist/cli/commands/acp.d.ts.map +1 -0
- package/dist/cli/commands/acp.js +29 -0
- package/dist/cli/commands/acp.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +3 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +344 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/backends.d.ts +3 -0
- package/dist/cli/commands/backends.d.ts.map +1 -0
- package/dist/cli/commands/backends.js +22 -0
- package/dist/cli/commands/backends.js.map +1 -0
- package/dist/cli/commands/completions.d.ts +3 -0
- package/dist/cli/commands/completions.d.ts.map +1 -0
- package/dist/cli/commands/completions.js +85 -0
- package/dist/cli/commands/completions.js.map +1 -0
- package/dist/cli/commands/compound.d.ts +3 -0
- package/dist/cli/commands/compound.d.ts.map +1 -0
- package/dist/cli/commands/compound.js +119 -0
- package/dist/cli/commands/compound.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +3 -0
- package/dist/cli/commands/configure.d.ts.map +1 -0
- package/dist/cli/commands/configure.js +151 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +15 -0
- package/dist/cli/commands/convert.d.ts.map +1 -0
- package/dist/cli/commands/convert.js +218 -0
- package/dist/cli/commands/convert.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +96 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +154 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/learn.d.ts +3 -0
- package/dist/cli/commands/learn.d.ts.map +1 -0
- package/dist/cli/commands/learn.js +163 -0
- package/dist/cli/commands/learn.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +89 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +3 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +134 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/orchestrate.d.ts +3 -0
- package/dist/cli/commands/orchestrate.d.ts.map +1 -0
- package/dist/cli/commands/orchestrate.js +237 -0
- package/dist/cli/commands/orchestrate.js.map +1 -0
- package/dist/cli/commands/patterns.d.ts +3 -0
- package/dist/cli/commands/patterns.d.ts.map +1 -0
- package/dist/cli/commands/patterns.js +25 -0
- package/dist/cli/commands/patterns.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +3 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +77 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +3 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +124 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +3 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +55 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +78 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/share.d.ts +3 -0
- package/dist/cli/commands/share.d.ts.map +1 -0
- package/dist/cli/commands/share.js +34 -0
- package/dist/cli/commands/share.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +148 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/template.d.ts +3 -0
- package/dist/cli/commands/template.d.ts.map +1 -0
- package/dist/cli/commands/template.js +213 -0
- package/dist/cli/commands/template.js.map +1 -0
- package/dist/cli/commands/vault.d.ts +3 -0
- package/dist/cli/commands/vault.d.ts.map +1 -0
- package/dist/cli/commands/vault.js +402 -0
- package/dist/cli/commands/vault.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +3 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +38 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/version.d.ts +3 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +19 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +3 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +179 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +118 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/checkpoint.d.ts +35 -0
- package/dist/core/checkpoint.d.ts.map +1 -0
- package/dist/core/checkpoint.js +80 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/event-bus.d.ts +41 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +115 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/lifecycle.d.ts +30 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +72 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/patterns.d.ts +43 -0
- package/dist/core/patterns.d.ts.map +1 -0
- package/dist/core/patterns.js +372 -0
- package/dist/core/patterns.js.map +1 -0
- package/dist/core/permissions.d.ts +40 -0
- package/dist/core/permissions.d.ts.map +1 -0
- package/dist/core/permissions.js +113 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/registry.d.ts +80 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +308 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/snapshots.d.ts +20 -0
- package/dist/core/snapshots.d.ts.map +1 -0
- package/dist/core/snapshots.js +73 -0
- package/dist/core/snapshots.js.map +1 -0
- package/dist/core/types.d.ts +168 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +33 -0
- package/dist/core/types.js.map +1 -0
- package/dist/hooks/cli.d.ts +11 -0
- package/dist/hooks/cli.d.ts.map +1 -0
- package/dist/hooks/cli.js +32 -0
- package/dist/hooks/cli.js.map +1 -0
- package/dist/hooks/index.d.ts +23 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +58 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +105 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +298 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/schema.d.ts +6 -0
- package/dist/memory/schema.d.ts.map +1 -0
- package/dist/memory/schema.js +71 -0
- package/dist/memory/schema.js.map +1 -0
- package/dist/plugin/index.d.ts +6 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +182 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/runtime/acp.d.ts +41 -0
- package/dist/runtime/acp.d.ts.map +1 -0
- package/dist/runtime/acp.js +137 -0
- package/dist/runtime/acp.js.map +1 -0
- package/dist/runtime/adaptive.d.ts +34 -0
- package/dist/runtime/adaptive.d.ts.map +1 -0
- package/dist/runtime/adaptive.js +229 -0
- package/dist/runtime/adaptive.js.map +1 -0
- package/dist/runtime/autonomy.d.ts +21 -0
- package/dist/runtime/autonomy.d.ts.map +1 -0
- package/dist/runtime/autonomy.js +74 -0
- package/dist/runtime/autonomy.js.map +1 -0
- package/dist/runtime/backends/claude.d.ts +9 -0
- package/dist/runtime/backends/claude.d.ts.map +1 -0
- package/dist/runtime/backends/claude.js +134 -0
- package/dist/runtime/backends/claude.js.map +1 -0
- package/dist/runtime/backends/codex.d.ts +9 -0
- package/dist/runtime/backends/codex.d.ts.map +1 -0
- package/dist/runtime/backends/codex.js +132 -0
- package/dist/runtime/backends/codex.js.map +1 -0
- package/dist/runtime/backends/gemini.d.ts +9 -0
- package/dist/runtime/backends/gemini.d.ts.map +1 -0
- package/dist/runtime/backends/gemini.js +103 -0
- package/dist/runtime/backends/gemini.js.map +1 -0
- package/dist/runtime/backends/index.d.ts +17 -0
- package/dist/runtime/backends/index.d.ts.map +1 -0
- package/dist/runtime/backends/index.js +39 -0
- package/dist/runtime/backends/index.js.map +1 -0
- package/dist/runtime/backends/mock.d.ts +21 -0
- package/dist/runtime/backends/mock.d.ts.map +1 -0
- package/dist/runtime/backends/mock.js +46 -0
- package/dist/runtime/backends/mock.js.map +1 -0
- package/dist/runtime/backends/types.d.ts +34 -0
- package/dist/runtime/backends/types.d.ts.map +1 -0
- package/dist/runtime/backends/types.js +2 -0
- package/dist/runtime/backends/types.js.map +1 -0
- package/dist/runtime/backends/vercel-ai.d.ts +14 -0
- package/dist/runtime/backends/vercel-ai.d.ts.map +1 -0
- package/dist/runtime/backends/vercel-ai.js +137 -0
- package/dist/runtime/backends/vercel-ai.js.map +1 -0
- package/dist/runtime/cache-optimizer.d.ts +37 -0
- package/dist/runtime/cache-optimizer.d.ts.map +1 -0
- package/dist/runtime/cache-optimizer.js +54 -0
- package/dist/runtime/cache-optimizer.js.map +1 -0
- package/dist/runtime/cascade.d.ts +26 -0
- package/dist/runtime/cascade.d.ts.map +1 -0
- package/dist/runtime/cascade.js +54 -0
- package/dist/runtime/cascade.js.map +1 -0
- package/dist/runtime/chunker.d.ts +36 -0
- package/dist/runtime/chunker.d.ts.map +1 -0
- package/dist/runtime/chunker.js +210 -0
- package/dist/runtime/chunker.js.map +1 -0
- package/dist/runtime/compaction.d.ts +22 -0
- package/dist/runtime/compaction.d.ts.map +1 -0
- package/dist/runtime/compaction.js +36 -0
- package/dist/runtime/compaction.js.map +1 -0
- package/dist/runtime/compounder.d.ts +66 -0
- package/dist/runtime/compounder.d.ts.map +1 -0
- package/dist/runtime/compounder.js +276 -0
- package/dist/runtime/compounder.js.map +1 -0
- package/dist/runtime/cost-model.d.ts +24 -0
- package/dist/runtime/cost-model.d.ts.map +1 -0
- package/dist/runtime/cost-model.js +120 -0
- package/dist/runtime/cost-model.js.map +1 -0
- package/dist/runtime/distiller.d.ts +21 -0
- package/dist/runtime/distiller.d.ts.map +1 -0
- package/dist/runtime/distiller.js +70 -0
- package/dist/runtime/distiller.js.map +1 -0
- package/dist/runtime/engine.d.ts +123 -0
- package/dist/runtime/engine.d.ts.map +1 -0
- package/dist/runtime/engine.js +969 -0
- package/dist/runtime/engine.js.map +1 -0
- package/dist/runtime/executor.d.ts +71 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +283 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/heuristics.d.ts +33 -0
- package/dist/runtime/heuristics.d.ts.map +1 -0
- package/dist/runtime/heuristics.js +188 -0
- package/dist/runtime/heuristics.js.map +1 -0
- package/dist/runtime/living-spec.d.ts +34 -0
- package/dist/runtime/living-spec.d.ts.map +1 -0
- package/dist/runtime/living-spec.js +91 -0
- package/dist/runtime/living-spec.js.map +1 -0
- package/dist/runtime/lsp.d.ts +50 -0
- package/dist/runtime/lsp.d.ts.map +1 -0
- package/dist/runtime/lsp.js +110 -0
- package/dist/runtime/lsp.js.map +1 -0
- package/dist/runtime/mcp.d.ts +27 -0
- package/dist/runtime/mcp.d.ts.map +1 -0
- package/dist/runtime/mcp.js +154 -0
- package/dist/runtime/mcp.js.map +1 -0
- package/dist/runtime/model-router.d.ts +22 -0
- package/dist/runtime/model-router.d.ts.map +1 -0
- package/dist/runtime/model-router.js +94 -0
- package/dist/runtime/model-router.js.map +1 -0
- package/dist/runtime/panes.d.ts +76 -0
- package/dist/runtime/panes.d.ts.map +1 -0
- package/dist/runtime/panes.js +279 -0
- package/dist/runtime/panes.js.map +1 -0
- package/dist/runtime/plan-search.d.ts +41 -0
- package/dist/runtime/plan-search.d.ts.map +1 -0
- package/dist/runtime/plan-search.js +140 -0
- package/dist/runtime/plan-search.js.map +1 -0
- package/dist/runtime/plugins.d.ts +59 -0
- package/dist/runtime/plugins.d.ts.map +1 -0
- package/dist/runtime/plugins.js +121 -0
- package/dist/runtime/plugins.js.map +1 -0
- package/dist/runtime/reflexion.d.ts +22 -0
- package/dist/runtime/reflexion.d.ts.map +1 -0
- package/dist/runtime/reflexion.js +85 -0
- package/dist/runtime/reflexion.js.map +1 -0
- package/dist/runtime/review-schema.d.ts +75 -0
- package/dist/runtime/review-schema.d.ts.map +1 -0
- package/dist/runtime/review-schema.js +223 -0
- package/dist/runtime/review-schema.js.map +1 -0
- package/dist/runtime/rewriter.d.ts +8 -0
- package/dist/runtime/rewriter.d.ts.map +1 -0
- package/dist/runtime/rewriter.js +81 -0
- package/dist/runtime/rewriter.js.map +1 -0
- package/dist/runtime/sharing.d.ts +15 -0
- package/dist/runtime/sharing.d.ts.map +1 -0
- package/dist/runtime/sharing.js +48 -0
- package/dist/runtime/sharing.js.map +1 -0
- package/dist/runtime/stats.d.ts +53 -0
- package/dist/runtime/stats.d.ts.map +1 -0
- package/dist/runtime/stats.js +160 -0
- package/dist/runtime/stats.js.map +1 -0
- package/dist/runtime/templates.d.ts +77 -0
- package/dist/runtime/templates.d.ts.map +1 -0
- package/dist/runtime/templates.js +221 -0
- package/dist/runtime/templates.js.map +1 -0
- package/dist/runtime/traces.d.ts +60 -0
- package/dist/runtime/traces.d.ts.map +1 -0
- package/dist/runtime/traces.js +166 -0
- package/dist/runtime/traces.js.map +1 -0
- package/dist/runtime/verifier.d.ts +54 -0
- package/dist/runtime/verifier.d.ts.map +1 -0
- package/dist/runtime/verifier.js +172 -0
- package/dist/runtime/verifier.js.map +1 -0
- package/dist/runtime/worktree.d.ts +24 -0
- package/dist/runtime/worktree.d.ts.map +1 -0
- package/dist/runtime/worktree.js +82 -0
- package/dist/runtime/worktree.js.map +1 -0
- package/dist/tui/dashboard.d.ts +65 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +496 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/progress.d.ts +32 -0
- package/dist/tui/progress.d.ts.map +1 -0
- package/dist/tui/progress.js +257 -0
- package/dist/tui/progress.js.map +1 -0
- package/dist/tui/renderer.d.ts +72 -0
- package/dist/tui/renderer.d.ts.map +1 -0
- package/dist/tui/renderer.js +205 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/utils/compact-format.d.ts +35 -0
- package/dist/utils/compact-format.d.ts.map +1 -0
- package/dist/utils/compact-format.js +106 -0
- package/dist/utils/compact-format.js.map +1 -0
- package/dist/utils/config.d.ts +73 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +70 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/env.d.ts +6 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +28 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +120 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +56 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output.d.ts +10 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +26 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/paths.d.ts +7 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +16 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/project-config.d.ts +18 -0
- package/dist/utils/project-config.d.ts.map +1 -0
- package/dist/utils/project-config.js +46 -0
- package/dist/utils/project-config.js.map +1 -0
- package/dist/utils/redact.d.ts +5 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +25 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/schemas.d.ts +109 -0
- package/dist/utils/schemas.d.ts.map +1 -0
- package/dist/utils/schemas.js +63 -0
- package/dist/utils/schemas.js.map +1 -0
- package/dist/utils/terminal.d.ts +33 -0
- package/dist/utils/terminal.d.ts.map +1 -0
- package/dist/utils/terminal.js +82 -0
- package/dist/utils/terminal.js.map +1 -0
- package/dist/utils/tokens.d.ts +9 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +11 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +71 -0
- package/skills/design-system/SKILL.md +195 -0
- package/skills/orchestration-patterns/SKILL.md +81 -0
- package/skills/orchestration-patterns/examples/example-workflows.md +290 -0
- package/skills/orchestration-patterns/references/adversarial.md +51 -0
- package/skills/orchestration-patterns/references/batch.md +63 -0
- package/skills/orchestration-patterns/references/chaos.md +43 -0
- package/skills/orchestration-patterns/references/competitive.md +84 -0
- package/skills/orchestration-patterns/references/debate.md +44 -0
- package/skills/orchestration-patterns/references/emergence.md +50 -0
- package/skills/orchestration-patterns/references/fan-out-fan-in.md +74 -0
- package/skills/orchestration-patterns/references/iterative.md +99 -0
- package/skills/orchestration-patterns/references/pipeline.md +72 -0
- package/skills/swarm-output-style/SKILL.md +85 -0
- package/templates/add-endpoint.yml +44 -0
- package/templates/add-feature.yml +30 -0
- package/templates/agent-template.md +73 -0
- package/templates/bug-fix.yml +31 -0
- package/templates/explore.yml +21 -0
- package/templates/fix-pr.yml +30 -0
- package/templates/migration.yml +36 -0
- package/templates/refactor.yml +35 -0
- package/templates/security-audit.yml +27 -0
- package/templates/workflow-template.md +63 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { initializeSchema } from './schema.js';
|
|
6
|
+
import { redactSecrets } from '../utils/redact.js';
|
|
7
|
+
/**
|
|
8
|
+
* Swarm Memory — queryable knowledge base backed by SQLite.
|
|
9
|
+
*
|
|
10
|
+
* Replaces the flat markdown vault with:
|
|
11
|
+
* - Full-text search (FTS5)
|
|
12
|
+
* - Typed entries (decisions, patterns, learnings, context, outcomes)
|
|
13
|
+
* - Graph relations between entries
|
|
14
|
+
* - Per-repo filtering
|
|
15
|
+
*/
|
|
16
|
+
export class SwarmMemory {
|
|
17
|
+
db;
|
|
18
|
+
vaultDir;
|
|
19
|
+
constructor(dbPath, vaultDir) {
|
|
20
|
+
const path = dbPath ?? join(homedir(), '.swarm', 'data', 'memory.db');
|
|
21
|
+
const dir = dirname(path);
|
|
22
|
+
if (!existsSync(dir)) {
|
|
23
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
24
|
+
}
|
|
25
|
+
this.db = new Database(path);
|
|
26
|
+
initializeSchema(this.db);
|
|
27
|
+
// Vault write-through: sync entries to Obsidian vault for cross-machine access
|
|
28
|
+
const vault = vaultDir ?? process.env.SWARM_VAULT ?? join(homedir(), 'swarm-vault');
|
|
29
|
+
this.vaultDir = existsSync(vault) ? vault : null;
|
|
30
|
+
}
|
|
31
|
+
// --- Write ---------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Store a new knowledge entry.
|
|
34
|
+
*/
|
|
35
|
+
store(entry) {
|
|
36
|
+
const stmt = this.db.prepare(`
|
|
37
|
+
INSERT INTO entries (type, title, content, tags, repo, source)
|
|
38
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
39
|
+
`);
|
|
40
|
+
const result = stmt.run(entry.type, entry.title, redactSecrets(entry.content), JSON.stringify(entry.tags ?? []), entry.repo ?? null, entry.source ?? null);
|
|
41
|
+
const id = result.lastInsertRowid;
|
|
42
|
+
// Write-through to Obsidian vault for cross-machine sync (use redacted content)
|
|
43
|
+
this.syncToVault({ ...entry, content: redactSecrets(entry.content) }, id);
|
|
44
|
+
return id;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Update an existing entry.
|
|
48
|
+
*/
|
|
49
|
+
update(id, updates) {
|
|
50
|
+
const fields = [];
|
|
51
|
+
const values = [];
|
|
52
|
+
if (updates.title !== undefined) {
|
|
53
|
+
fields.push('title = ?');
|
|
54
|
+
values.push(updates.title);
|
|
55
|
+
}
|
|
56
|
+
if (updates.content !== undefined) {
|
|
57
|
+
fields.push('content = ?');
|
|
58
|
+
values.push(redactSecrets(updates.content));
|
|
59
|
+
}
|
|
60
|
+
if (updates.tags !== undefined) {
|
|
61
|
+
fields.push('tags = ?');
|
|
62
|
+
values.push(JSON.stringify(updates.tags));
|
|
63
|
+
}
|
|
64
|
+
if (updates.repo !== undefined) {
|
|
65
|
+
fields.push('repo = ?');
|
|
66
|
+
values.push(updates.repo);
|
|
67
|
+
}
|
|
68
|
+
if (fields.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
fields.push("updated_at = datetime('now')");
|
|
71
|
+
values.push(id);
|
|
72
|
+
this.db.prepare(`UPDATE entries SET ${fields.join(', ')} WHERE id = ?`).run(...values);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Delete an entry.
|
|
76
|
+
*/
|
|
77
|
+
delete(id) {
|
|
78
|
+
this.db.prepare('DELETE FROM entries WHERE id = ?').run(id);
|
|
79
|
+
}
|
|
80
|
+
// --- Vault Sync ----------------------------------------------------------
|
|
81
|
+
/**
|
|
82
|
+
* Write-through to Obsidian vault. Every entry stored in SQLite is also
|
|
83
|
+
* written as a markdown file to ~/swarm-vault/ for:
|
|
84
|
+
* - Cross-machine sync via Obsidian Sync
|
|
85
|
+
* - Human browsing in Obsidian
|
|
86
|
+
* - Backward compatibility with vault scripts
|
|
87
|
+
*/
|
|
88
|
+
syncToVault(entry, id) {
|
|
89
|
+
if (!this.vaultDir)
|
|
90
|
+
return;
|
|
91
|
+
try {
|
|
92
|
+
// Map entry type to vault directory
|
|
93
|
+
const dirMap = {
|
|
94
|
+
decision: 'decisions',
|
|
95
|
+
pattern: 'patterns',
|
|
96
|
+
learning: 'learnings',
|
|
97
|
+
context: 'context',
|
|
98
|
+
outcome: 'learnings', // outcomes go to learnings
|
|
99
|
+
};
|
|
100
|
+
const subDir = dirMap[entry.type] ?? 'learnings';
|
|
101
|
+
const vaultSubDir = entry.repo
|
|
102
|
+
? join(this.vaultDir, 'repos', this.slugify(entry.repo))
|
|
103
|
+
: join(this.vaultDir, subDir);
|
|
104
|
+
if (!existsSync(vaultSubDir)) {
|
|
105
|
+
mkdirSync(vaultSubDir, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
// Generate filename
|
|
108
|
+
const date = new Date().toISOString().split('T')[0];
|
|
109
|
+
const slug = this.slugify(entry.title);
|
|
110
|
+
const filename = entry.repo
|
|
111
|
+
? `${slug}.md` // repo entries: no date prefix
|
|
112
|
+
: `${date}-${slug}.md`; // shared entries: date prefix
|
|
113
|
+
const filePath = join(vaultSubDir, filename);
|
|
114
|
+
// Write markdown with YAML frontmatter
|
|
115
|
+
const tags = entry.tags?.length ? `[${entry.tags.join(', ')}]` : '[]';
|
|
116
|
+
const content = `---
|
|
117
|
+
title: ${entry.title}
|
|
118
|
+
type: ${entry.type}
|
|
119
|
+
tags: ${tags}
|
|
120
|
+
${entry.repo ? `repo: ${entry.repo}\n` : ''}created: ${date}
|
|
121
|
+
updated: ${date}
|
|
122
|
+
source: swarm-engine
|
|
123
|
+
id: ${id}
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
${entry.content}
|
|
127
|
+
`;
|
|
128
|
+
writeFileSync(filePath, content);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Don't fail the store if vault write fails — SQLite is the source of truth
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
slugify(text) {
|
|
135
|
+
return text
|
|
136
|
+
.toLowerCase()
|
|
137
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
138
|
+
.replace(/^-|-$/g, '')
|
|
139
|
+
.slice(0, 60);
|
|
140
|
+
}
|
|
141
|
+
// --- Search --------------------------------------------------------------
|
|
142
|
+
/**
|
|
143
|
+
* Full-text search across all entries.
|
|
144
|
+
*/
|
|
145
|
+
search(query, options) {
|
|
146
|
+
const limit = options?.limit ?? 10;
|
|
147
|
+
const safeQuery = '"' + query.replace(/"/g, '').slice(0, 500) + '"';
|
|
148
|
+
let sql = `
|
|
149
|
+
SELECT
|
|
150
|
+
e.id, e.type, e.title, e.content, e.tags, e.repo,
|
|
151
|
+
e.created_at, e.updated_at,
|
|
152
|
+
rank,
|
|
153
|
+
snippet(entries_fts, 1, '>>>', '<<<', '...', 32) as snippet
|
|
154
|
+
FROM entries_fts
|
|
155
|
+
JOIN entries e ON e.id = entries_fts.rowid
|
|
156
|
+
WHERE entries_fts MATCH ?
|
|
157
|
+
`;
|
|
158
|
+
const params = [safeQuery];
|
|
159
|
+
if (options?.type) {
|
|
160
|
+
sql += ' AND e.type = ?';
|
|
161
|
+
params.push(options.type);
|
|
162
|
+
}
|
|
163
|
+
if (options?.repo) {
|
|
164
|
+
sql += ' AND e.repo = ?';
|
|
165
|
+
params.push(options.repo);
|
|
166
|
+
}
|
|
167
|
+
sql += ' ORDER BY rank LIMIT ?';
|
|
168
|
+
params.push(limit);
|
|
169
|
+
try {
|
|
170
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
171
|
+
return rows.map(row => ({
|
|
172
|
+
id: row.id,
|
|
173
|
+
type: row.type,
|
|
174
|
+
title: row.title,
|
|
175
|
+
content: row.content,
|
|
176
|
+
tags: JSON.parse(row.tags ?? '[]'),
|
|
177
|
+
repo: row.repo,
|
|
178
|
+
rank: row.rank,
|
|
179
|
+
snippet: row.snippet,
|
|
180
|
+
created_at: row.created_at,
|
|
181
|
+
updated_at: row.updated_at,
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (String(error).includes('fts5')) {
|
|
186
|
+
return []; // Malformed FTS query, return empty
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get an entry by ID.
|
|
193
|
+
*/
|
|
194
|
+
get(id) {
|
|
195
|
+
const row = this.db.prepare('SELECT * FROM entries WHERE id = ?').get(id);
|
|
196
|
+
if (!row)
|
|
197
|
+
return null;
|
|
198
|
+
return {
|
|
199
|
+
id: row.id,
|
|
200
|
+
type: row.type,
|
|
201
|
+
title: row.title,
|
|
202
|
+
content: row.content,
|
|
203
|
+
tags: JSON.parse(row.tags ?? '[]'),
|
|
204
|
+
repo: row.repo,
|
|
205
|
+
source: row.source,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* List entries by type and/or repo.
|
|
210
|
+
*/
|
|
211
|
+
list(options) {
|
|
212
|
+
let sql = 'SELECT * FROM entries WHERE 1=1';
|
|
213
|
+
const params = [];
|
|
214
|
+
if (options?.type) {
|
|
215
|
+
sql += ' AND type = ?';
|
|
216
|
+
params.push(options.type);
|
|
217
|
+
}
|
|
218
|
+
if (options?.repo) {
|
|
219
|
+
sql += ' AND repo = ?';
|
|
220
|
+
params.push(options.repo);
|
|
221
|
+
}
|
|
222
|
+
sql += ' ORDER BY updated_at DESC';
|
|
223
|
+
if (options?.limit) {
|
|
224
|
+
sql += ' LIMIT ?';
|
|
225
|
+
params.push(options.limit);
|
|
226
|
+
}
|
|
227
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
228
|
+
return rows.map(row => ({
|
|
229
|
+
id: row.id,
|
|
230
|
+
type: row.type,
|
|
231
|
+
title: row.title,
|
|
232
|
+
content: row.content,
|
|
233
|
+
tags: JSON.parse(row.tags ?? '[]'),
|
|
234
|
+
repo: row.repo,
|
|
235
|
+
source: row.source,
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
// --- Relations -----------------------------------------------------------
|
|
239
|
+
/**
|
|
240
|
+
* Add a relation between two entries.
|
|
241
|
+
*/
|
|
242
|
+
relate(fromId, toId, type) {
|
|
243
|
+
this.db.prepare('INSERT INTO relations (from_id, to_id, relation_type) VALUES (?, ?, ?)').run(fromId, toId, type);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get related entries.
|
|
247
|
+
*/
|
|
248
|
+
getRelated(id, type) {
|
|
249
|
+
let sql = `
|
|
250
|
+
SELECT e.*, r.relation_type
|
|
251
|
+
FROM relations r
|
|
252
|
+
JOIN entries e ON e.id = r.to_id
|
|
253
|
+
WHERE r.from_id = ?
|
|
254
|
+
`;
|
|
255
|
+
const params = [id];
|
|
256
|
+
if (type) {
|
|
257
|
+
sql += ' AND r.relation_type = ?';
|
|
258
|
+
params.push(type);
|
|
259
|
+
}
|
|
260
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
261
|
+
return rows.map(row => ({
|
|
262
|
+
entry: {
|
|
263
|
+
id: row.id,
|
|
264
|
+
type: row.type,
|
|
265
|
+
title: row.title,
|
|
266
|
+
content: row.content,
|
|
267
|
+
tags: JSON.parse(row.tags ?? '[]'),
|
|
268
|
+
repo: row.repo,
|
|
269
|
+
},
|
|
270
|
+
relation: row.relation_type,
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
// --- Stats ---------------------------------------------------------------
|
|
274
|
+
/**
|
|
275
|
+
* Get memory statistics.
|
|
276
|
+
*/
|
|
277
|
+
stats() {
|
|
278
|
+
const total = this.db.prepare('SELECT COUNT(*) as count FROM entries').get().count;
|
|
279
|
+
const byType = {};
|
|
280
|
+
const typeRows = this.db.prepare('SELECT type, COUNT(*) as count FROM entries GROUP BY type').all();
|
|
281
|
+
for (const row of typeRows) {
|
|
282
|
+
byType[row.type] = row.count;
|
|
283
|
+
}
|
|
284
|
+
const byRepo = {};
|
|
285
|
+
const repoRows = this.db.prepare('SELECT repo, COUNT(*) as count FROM entries WHERE repo IS NOT NULL GROUP BY repo').all();
|
|
286
|
+
for (const row of repoRows) {
|
|
287
|
+
byRepo[row.repo] = row.count;
|
|
288
|
+
}
|
|
289
|
+
return { total, byType, byRepo };
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Close the database.
|
|
293
|
+
*/
|
|
294
|
+
close() {
|
|
295
|
+
this.db.close();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/memory/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAyE5D"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialize the memory database with all tables.
|
|
3
|
+
*/
|
|
4
|
+
export function initializeSchema(db) {
|
|
5
|
+
db.pragma('journal_mode = WAL');
|
|
6
|
+
db.pragma('busy_timeout = 5000');
|
|
7
|
+
db.pragma('foreign_keys = ON');
|
|
8
|
+
// Knowledge entries (replaces vault .md files)
|
|
9
|
+
db.exec(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS entries (
|
|
11
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
12
|
+
type TEXT NOT NULL CHECK(type IN ('decision', 'pattern', 'learning', 'context', 'outcome')),
|
|
13
|
+
title TEXT NOT NULL,
|
|
14
|
+
content TEXT NOT NULL,
|
|
15
|
+
tags TEXT DEFAULT '[]',
|
|
16
|
+
repo TEXT,
|
|
17
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
18
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
19
|
+
superseded_by INTEGER REFERENCES entries(id),
|
|
20
|
+
source TEXT
|
|
21
|
+
)
|
|
22
|
+
`);
|
|
23
|
+
// Full-text search index
|
|
24
|
+
db.exec(`
|
|
25
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS entries_fts USING fts5(
|
|
26
|
+
title, content, tags,
|
|
27
|
+
content='entries',
|
|
28
|
+
content_rowid='id'
|
|
29
|
+
)
|
|
30
|
+
`);
|
|
31
|
+
// Keep FTS in sync via triggers
|
|
32
|
+
db.exec(`
|
|
33
|
+
CREATE TRIGGER IF NOT EXISTS entries_ai AFTER INSERT ON entries BEGIN
|
|
34
|
+
INSERT INTO entries_fts(rowid, title, content, tags)
|
|
35
|
+
VALUES (new.id, new.title, new.content, new.tags);
|
|
36
|
+
END
|
|
37
|
+
`);
|
|
38
|
+
db.exec(`
|
|
39
|
+
CREATE TRIGGER IF NOT EXISTS entries_ad AFTER DELETE ON entries BEGIN
|
|
40
|
+
INSERT INTO entries_fts(entries_fts, rowid, title, content, tags)
|
|
41
|
+
VALUES ('delete', old.id, old.title, old.content, old.tags);
|
|
42
|
+
END
|
|
43
|
+
`);
|
|
44
|
+
db.exec(`
|
|
45
|
+
CREATE TRIGGER IF NOT EXISTS entries_au AFTER UPDATE ON entries BEGIN
|
|
46
|
+
INSERT INTO entries_fts(entries_fts, rowid, title, content, tags)
|
|
47
|
+
VALUES ('delete', old.id, old.title, old.content, old.tags);
|
|
48
|
+
INSERT INTO entries_fts(rowid, title, content, tags)
|
|
49
|
+
VALUES (new.id, new.title, new.content, new.tags);
|
|
50
|
+
END
|
|
51
|
+
`);
|
|
52
|
+
// Relations between entries (graph edges)
|
|
53
|
+
db.exec(`
|
|
54
|
+
CREATE TABLE IF NOT EXISTS relations (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
from_id INTEGER NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
|
|
57
|
+
to_id INTEGER NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
|
|
58
|
+
relation_type TEXT NOT NULL,
|
|
59
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
60
|
+
)
|
|
61
|
+
`);
|
|
62
|
+
// Indexes
|
|
63
|
+
db.exec(`
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_entries_type ON entries(type);
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_entries_repo ON entries(repo);
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_entries_updated ON entries(updated_at);
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_relations_from ON relations(from_id);
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_relations_to ON relations(to_id);
|
|
69
|
+
`);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/memory/schema.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAqB;IACpD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACjC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,+CAA+C;IAC/C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;GAaP,CAAC,CAAC;IAEH,yBAAyB;IACzB,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;IAEH,gCAAgC;IAChC,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;;;;;;GAOP,CAAC,CAAC;IAEH,0CAA0C;IAC1C,EAAE,CAAC,IAAI,CAAC;;;;;;;;GAQP,CAAC,CAAC;IAEH,UAAU;IACV,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAiCtD"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync, readdirSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { getBuiltinAgentsDir } from '../utils/paths.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generate Claude Code plugin files that bridge to the swarm-engine.
|
|
6
|
+
* These .md files are the interface between Claude Code and the TypeScript engine.
|
|
7
|
+
*/
|
|
8
|
+
export function generatePlugin(outputDir) {
|
|
9
|
+
const pluginDir = join(outputDir, '.claude-plugin');
|
|
10
|
+
const commandsDir = join(outputDir, 'commands');
|
|
11
|
+
const agentsDir = join(outputDir, 'agents');
|
|
12
|
+
const skillsDir = join(outputDir, 'skills');
|
|
13
|
+
// Create directories
|
|
14
|
+
for (const dir of [pluginDir, commandsDir, agentsDir, skillsDir]) {
|
|
15
|
+
mkdirSync(dir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
// Plugin manifest
|
|
18
|
+
writeFileSync(join(pluginDir, 'plugin.json'), JSON.stringify({
|
|
19
|
+
name: 'swarm-engine',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
description: 'Swarm Engine: Multi-agent orchestration for Claude Code',
|
|
22
|
+
author: 'Simon Coombes',
|
|
23
|
+
}, null, 2));
|
|
24
|
+
// Generate commands that bridge to engine
|
|
25
|
+
generateEngineCommands(commandsDir);
|
|
26
|
+
// Generate the CLAUDE.md snippet
|
|
27
|
+
generateSnippet(outputDir);
|
|
28
|
+
// Copy agent definitions
|
|
29
|
+
const agentsSrcDir = getBuiltinAgentsDir();
|
|
30
|
+
if (existsSync(agentsSrcDir)) {
|
|
31
|
+
for (const file of readdirSync(agentsSrcDir).filter((f) => f.endsWith('.md'))) {
|
|
32
|
+
const content = readFileSync(join(agentsSrcDir, file), 'utf-8');
|
|
33
|
+
writeFileSync(join(agentsDir, file), content);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function generateEngineCommands(dir) {
|
|
38
|
+
// Main orchestrate command — bridges to engine
|
|
39
|
+
writeFileSync(join(dir, 'orchestrate.md'), `---
|
|
40
|
+
description: "Run a multi-phase orchestration using the Swarm Engine"
|
|
41
|
+
argument-hint: "<task description>"
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
You are orchestrating a task using the Swarm Engine.
|
|
45
|
+
|
|
46
|
+
## Task
|
|
47
|
+
$ARGUMENTS
|
|
48
|
+
|
|
49
|
+
## How to Execute
|
|
50
|
+
|
|
51
|
+
The Swarm Engine provides formal orchestration patterns. To use it:
|
|
52
|
+
|
|
53
|
+
1. **Check memory** for relevant context:
|
|
54
|
+
\`\`\`bash
|
|
55
|
+
swarm memory search "<relevant keywords>"
|
|
56
|
+
\`\`\`
|
|
57
|
+
|
|
58
|
+
2. **Choose a pattern** based on the task:
|
|
59
|
+
- \`hybrid\` — Research → Implement → Review (default for most tasks)
|
|
60
|
+
- \`research\` — Parallel fan-out research
|
|
61
|
+
- \`review-cycle\` — Implement → Challenge → Review (iterative quality gate)
|
|
62
|
+
- \`tdd\` — Test-first → Implement → Verify → Review
|
|
63
|
+
- \`spike\` — Two approaches compete
|
|
64
|
+
- \`red-team\` — Build → Break → Harden
|
|
65
|
+
- \`discover\` — Hypothesize → Experiment → Implement winner
|
|
66
|
+
|
|
67
|
+
3. **Execute the pattern** using the team protocol:
|
|
68
|
+
- Create a team with TeamCreate
|
|
69
|
+
- Decompose the task based on the chosen pattern's phases
|
|
70
|
+
- Dispatch agents in parallel/sequential per the pattern
|
|
71
|
+
- After each phase, record progress:
|
|
72
|
+
\`\`\`bash
|
|
73
|
+
swarm memory store outcome "<phase-result>" --repo "<repo>"
|
|
74
|
+
\`\`\`
|
|
75
|
+
- After completion, record metrics
|
|
76
|
+
|
|
77
|
+
4. **Follow the standard protocol**: TeamCreate → TaskCreate → Agent(team_name, name, run_in_background) → SendMessage shutdown → TeamDelete
|
|
78
|
+
|
|
79
|
+
## Pattern Selection Guide
|
|
80
|
+
|
|
81
|
+
| Task Type | Pattern | Why |
|
|
82
|
+
|-----------|---------|-----|
|
|
83
|
+
| General feature | hybrid | Covers research + implement + review |
|
|
84
|
+
| Understanding code | research | Fan-out parallel exploration |
|
|
85
|
+
| Quality-critical | review-cycle | Iterative quality gate |
|
|
86
|
+
| New feature with tests | tdd | Test-first guarantees coverage |
|
|
87
|
+
| Uncertain approach | spike | Compare before committing |
|
|
88
|
+
| Security-sensitive | red-team | Adversarial hardening |
|
|
89
|
+
| Complex/novel problem | discover | Hypothesis-driven |
|
|
90
|
+
|
|
91
|
+
## Rules
|
|
92
|
+
- All agents must use team protocol (TeamCreate → Agent → SendMessage shutdown → TeamDelete)
|
|
93
|
+
- Check engine memory before starting for relevant context
|
|
94
|
+
- Record outcomes to engine memory after completion
|
|
95
|
+
- Use the pattern that best fits the task, not always hybrid
|
|
96
|
+
`);
|
|
97
|
+
// Memory command
|
|
98
|
+
writeFileSync(join(dir, 'memory.md'), `---
|
|
99
|
+
description: "Search or store knowledge in the Swarm Engine memory"
|
|
100
|
+
argument-hint: "search <query> | store <type> <title>"
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
You are managing the Swarm Engine knowledge base.
|
|
104
|
+
|
|
105
|
+
## Task
|
|
106
|
+
$ARGUMENTS
|
|
107
|
+
|
|
108
|
+
## How to Execute
|
|
109
|
+
|
|
110
|
+
The Swarm Engine has a SQLite-backed memory with full-text search.
|
|
111
|
+
|
|
112
|
+
### Search:
|
|
113
|
+
\`\`\`bash
|
|
114
|
+
swarm memory search "$QUERY"
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
### Store:
|
|
118
|
+
\`\`\`bash
|
|
119
|
+
echo "$CONTENT" | swarm memory store $TYPE "$TITLE" --repo "$REPO"
|
|
120
|
+
\`\`\`
|
|
121
|
+
|
|
122
|
+
Types: decision, pattern, learning, context, outcome
|
|
123
|
+
|
|
124
|
+
### List:
|
|
125
|
+
\`\`\`bash
|
|
126
|
+
swarm memory list
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
### Stats:
|
|
130
|
+
\`\`\`bash
|
|
131
|
+
swarm memory stats
|
|
132
|
+
\`\`\`
|
|
133
|
+
`);
|
|
134
|
+
// Patterns command
|
|
135
|
+
writeFileSync(join(dir, 'patterns.md'), `---
|
|
136
|
+
description: "List available orchestration patterns from the Swarm Engine"
|
|
137
|
+
argument-hint: ""
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
Show the available orchestration patterns:
|
|
141
|
+
|
|
142
|
+
\`\`\`bash
|
|
143
|
+
swarm patterns
|
|
144
|
+
\`\`\`
|
|
145
|
+
`);
|
|
146
|
+
}
|
|
147
|
+
function generateSnippet(dir) {
|
|
148
|
+
writeFileSync(join(dir, 'claude-md-snippet.md'), `## Swarm Engine: Multi-Agent Orchestration
|
|
149
|
+
|
|
150
|
+
### Team Protocol
|
|
151
|
+
Every agent must be spawned as a teammate in split panes:
|
|
152
|
+
1. TeamCreate first (even for single agents)
|
|
153
|
+
2. TaskCreate for the work
|
|
154
|
+
3. Agent with team_name, name, run_in_background: true
|
|
155
|
+
4. SendMessage shutdown_request when done
|
|
156
|
+
5. TeamDelete to clean up
|
|
157
|
+
|
|
158
|
+
By default, all agents should use team protocol. The orchestrator may bypass teams for simple single-agent tasks under 2 minutes.
|
|
159
|
+
|
|
160
|
+
### Orchestration Patterns
|
|
161
|
+
Use \`/orchestrate <task>\` for multi-phase orchestrations. Available patterns:
|
|
162
|
+
|
|
163
|
+
| Command | When to use |
|
|
164
|
+
|---------|-------------|
|
|
165
|
+
| \`/orchestrate <task>\` | Full orchestration with pattern selection |
|
|
166
|
+
| \`/memory search <query>\` | Search engine knowledge base |
|
|
167
|
+
| \`/memory store <type> <title>\` | Store knowledge |
|
|
168
|
+
| \`/patterns\` | List available patterns |
|
|
169
|
+
|
|
170
|
+
### Engine Memory
|
|
171
|
+
Before starting work, check for relevant context:
|
|
172
|
+
\`\`\`bash
|
|
173
|
+
swarm memory search "<topic>"
|
|
174
|
+
\`\`\`
|
|
175
|
+
|
|
176
|
+
After completing work, store outcomes:
|
|
177
|
+
\`\`\`bash
|
|
178
|
+
echo "<content>" | swarm memory store outcome "<title>"
|
|
179
|
+
\`\`\`
|
|
180
|
+
`);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE5C,qBAAqB;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QACjE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,kBAAkB;IAClB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAC3D,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE,eAAe;KACxB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEb,0CAA0C;IAC1C,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAEpC,iCAAiC;IACjC,eAAe,CAAC,SAAS,CAAC,CAAC;IAE3B,yBAAyB;IACzB,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,+CAA+C;IAC/C,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyD5C,CAAC,CAAC;IAED,iBAAiB;IACjB,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCvC,CAAC,CAAC;IAED,mBAAmB;IACnB,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE;;;;;;;;;;CAUzC,CAAC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClD,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AgentRegistry } from '../core/registry.js';
|
|
2
|
+
import { EventBus } from '../core/event-bus.js';
|
|
3
|
+
import { Logger } from '../utils/logger.js';
|
|
4
|
+
import type { SwarmEngine } from './engine.js';
|
|
5
|
+
export interface ACPSession {
|
|
6
|
+
id: string;
|
|
7
|
+
status: 'active' | 'completed' | 'failed';
|
|
8
|
+
messages: ACPMessage[];
|
|
9
|
+
createdAt: Date;
|
|
10
|
+
}
|
|
11
|
+
export interface ACPMessage {
|
|
12
|
+
role: 'user' | 'assistant';
|
|
13
|
+
content: string;
|
|
14
|
+
timestamp: Date;
|
|
15
|
+
}
|
|
16
|
+
export interface ACPServerOptions {
|
|
17
|
+
port?: number;
|
|
18
|
+
host?: string;
|
|
19
|
+
registry?: AgentRegistry;
|
|
20
|
+
bus?: EventBus;
|
|
21
|
+
logger?: Logger;
|
|
22
|
+
cwd?: string;
|
|
23
|
+
engine?: SwarmEngine;
|
|
24
|
+
}
|
|
25
|
+
export declare class ACPServer {
|
|
26
|
+
private server;
|
|
27
|
+
private sessions;
|
|
28
|
+
private registry;
|
|
29
|
+
private log;
|
|
30
|
+
private opts;
|
|
31
|
+
private engine;
|
|
32
|
+
private authToken;
|
|
33
|
+
constructor(opts: ACPServerOptions);
|
|
34
|
+
get token(): string;
|
|
35
|
+
start(): Promise<void>;
|
|
36
|
+
stop(): Promise<void>;
|
|
37
|
+
private handle;
|
|
38
|
+
private json;
|
|
39
|
+
private body;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=acp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/runtime/acp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,UAAU;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;CAAE;AAC/H,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;CAAE;AAC7F,MAAM,WAAW,gBAAgB;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAAE;AAElK,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,EAAE,gBAAgB;IASlC,IAAI,KAAK,IAAI,MAAM,CAA2B;IAExC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAEb,MAAM;IA8DpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,IAAI;CAab"}
|