macro-agent 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.sudocode/issues.jsonl +28 -0
- package/.sudocode/specs.jsonl +4 -0
- package/CLAUDE.md +9 -3
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +111 -48
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +7 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/server.d.ts +5 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +100 -3
- package/dist/api/server.js.map +1 -1
- package/dist/api/types.d.ts +1 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/cli/acp.d.ts.map +1 -1
- package/dist/cli/acp.js +71 -1
- package/dist/cli/acp.js.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.js +27 -8
- package/dist/cli/mcp.js.map +1 -1
- package/dist/config/project-config.d.ts +13 -2
- package/dist/config/project-config.d.ts.map +1 -1
- package/dist/config/project-config.js +12 -2
- package/dist/config/project-config.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/handlers/index.d.ts +7 -3
- package/dist/lifecycle/handlers/index.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.js +25 -8
- package/dist/lifecycle/handlers/index.js.map +1 -1
- package/dist/lifecycle/types.d.ts +2 -0
- package/dist/lifecycle/types.d.ts.map +1 -1
- package/dist/lifecycle/types.js.map +1 -1
- package/dist/map/adapter/extensions/index.d.ts +4 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +27 -0
- package/dist/map/adapter/extensions/index.js.map +1 -1
- package/dist/map/adapter/extensions/streams.d.ts +95 -0
- package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
- package/dist/map/adapter/extensions/streams.js +515 -0
- package/dist/map/adapter/extensions/streams.js.map +1 -0
- package/dist/map/adapter/index.d.ts +1 -1
- package/dist/map/adapter/index.d.ts.map +1 -1
- package/dist/map/adapter/index.js +3 -1
- package/dist/map/adapter/index.js.map +1 -1
- package/dist/map/adapter/types.d.ts +1 -1
- package/dist/map/adapter/types.d.ts.map +1 -1
- package/dist/mcp/mcp-server.d.ts +2 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +12 -3
- package/dist/mcp/mcp-server.js.map +1 -1
- package/dist/mcp/tools/done.d.ts.map +1 -1
- package/dist/mcp/tools/done.js +18 -0
- package/dist/mcp/tools/done.js.map +1 -1
- package/dist/roles/builtin/coordinator.d.ts.map +1 -1
- package/dist/roles/builtin/coordinator.js +2 -1
- package/dist/roles/builtin/coordinator.js.map +1 -1
- package/dist/roles/builtin/integrator.d.ts.map +1 -1
- package/dist/roles/builtin/integrator.js +2 -1
- package/dist/roles/builtin/integrator.js.map +1 -1
- package/dist/roles/builtin/worker.d.ts.map +1 -1
- package/dist/roles/builtin/worker.js +3 -1
- package/dist/roles/builtin/worker.js.map +1 -1
- package/dist/roles/capabilities.d.ts +6 -0
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +10 -0
- package/dist/roles/capabilities.js.map +1 -1
- package/dist/roles/config-loader.d.ts +1 -1
- package/dist/roles/config-loader.d.ts.map +1 -1
- package/dist/roles/config-loader.js +3 -2
- package/dist/roles/config-loader.js.map +1 -1
- package/dist/roles/types.d.ts +3 -1
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/server/combined-server.d.ts +8 -1
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +6 -2
- package/dist/server/combined-server.js.map +1 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +12 -5
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/instance.d.ts +1 -1
- package/dist/store/instance.d.ts.map +1 -1
- package/dist/store/instance.js +2 -2
- package/dist/store/instance.js.map +1 -1
- package/dist/store/types/agents.d.ts +5 -0
- package/dist/store/types/agents.d.ts.map +1 -1
- package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -1
- package/dist/task/backend/opentasks/daemon-manager.js +1 -1
- package/dist/task/backend/opentasks/daemon-manager.js.map +1 -1
- package/dist/teams/index.d.ts +3 -1
- package/dist/teams/index.d.ts.map +1 -1
- package/dist/teams/index.js +2 -0
- package/dist/teams/index.js.map +1 -1
- package/dist/teams/seed-defaults.d.ts +20 -0
- package/dist/teams/seed-defaults.d.ts.map +1 -0
- package/dist/teams/seed-defaults.js +71 -0
- package/dist/teams/seed-defaults.js.map +1 -0
- package/dist/teams/team-loader.d.ts +6 -2
- package/dist/teams/team-loader.d.ts.map +1 -1
- package/dist/teams/team-loader.js +154 -162
- package/dist/teams/team-loader.js.map +1 -1
- package/dist/teams/team-manager.d.ts +112 -0
- package/dist/teams/team-manager.d.ts.map +1 -0
- package/dist/teams/team-manager.js +305 -0
- package/dist/teams/team-manager.js.map +1 -0
- package/dist/teams/team-runtime.d.ts +125 -19
- package/dist/teams/team-runtime.d.ts.map +1 -1
- package/dist/teams/team-runtime.js +527 -119
- package/dist/teams/team-runtime.js.map +1 -1
- package/dist/teams/types.d.ts +41 -151
- package/dist/teams/types.d.ts.map +1 -1
- package/dist/teams/types.js +2 -3
- package/dist/teams/types.js.map +1 -1
- package/docs/teams.md +73 -0
- package/package.json +2 -1
- package/references/minimem/.claude/settings.json +7 -0
- package/references/minimem/.sudocode/issues.jsonl +18 -0
- package/references/minimem/.sudocode/specs.jsonl +1 -0
- package/references/minimem/CLAUDE.md +310 -0
- package/references/minimem/README.md +562 -0
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
- package/references/minimem/claude-plugin/.mcp.json +7 -0
- package/references/minimem/claude-plugin/README.md +158 -0
- package/references/minimem/claude-plugin/commands/recall.md +47 -0
- package/references/minimem/claude-plugin/commands/remember.md +41 -0
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
- package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
- package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
- package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
- package/references/minimem/media/banner.png +0 -0
- package/references/minimem/package-lock.json +5373 -0
- package/references/minimem/package.json +72 -0
- package/references/minimem/scripts/postbuild.js +35 -0
- package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
- package/references/minimem/src/__tests__/errors.test.ts +265 -0
- package/references/minimem/src/__tests__/helpers.ts +199 -0
- package/references/minimem/src/__tests__/internal.test.ts +407 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
- package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
- package/references/minimem/src/__tests__/session.test.ts +190 -0
- package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
- package/references/minimem/src/cli/commands/append.ts +76 -0
- package/references/minimem/src/cli/commands/config.ts +262 -0
- package/references/minimem/src/cli/commands/conflicts.ts +413 -0
- package/references/minimem/src/cli/commands/daemon.ts +169 -0
- package/references/minimem/src/cli/commands/index.ts +12 -0
- package/references/minimem/src/cli/commands/init.ts +88 -0
- package/references/minimem/src/cli/commands/mcp.ts +177 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +158 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/sync-init.ts +290 -0
- package/references/minimem/src/cli/commands/sync.ts +70 -0
- package/references/minimem/src/cli/commands/upsert.ts +197 -0
- package/references/minimem/src/cli/config.ts +584 -0
- package/references/minimem/src/cli/index.ts +264 -0
- package/references/minimem/src/cli/shared.ts +161 -0
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
- package/references/minimem/src/cli/sync/central.ts +292 -0
- package/references/minimem/src/cli/sync/conflicts.ts +204 -0
- package/references/minimem/src/cli/sync/daemon.ts +407 -0
- package/references/minimem/src/cli/sync/detection.ts +138 -0
- package/references/minimem/src/cli/sync/index.ts +107 -0
- package/references/minimem/src/cli/sync/operations.ts +373 -0
- package/references/minimem/src/cli/sync/registry.ts +279 -0
- package/references/minimem/src/cli/sync/state.ts +355 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +234 -0
- package/references/minimem/src/cli/version.ts +34 -0
- package/references/minimem/src/core/index.ts +9 -0
- package/references/minimem/src/core/indexer.ts +628 -0
- package/references/minimem/src/core/searcher.ts +221 -0
- package/references/minimem/src/db/schema.ts +183 -0
- package/references/minimem/src/db/sqlite-vec.ts +24 -0
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
- package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
- package/references/minimem/src/embeddings/batch-openai.ts +409 -0
- package/references/minimem/src/embeddings/embeddings.ts +434 -0
- package/references/minimem/src/index.ts +109 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1276 -0
- package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
- package/references/minimem/src/search/graph.ts +234 -0
- package/references/minimem/src/search/hybrid.ts +151 -0
- package/references/minimem/src/search/search.ts +256 -0
- package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
- package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
- package/references/minimem/src/server/mcp.ts +326 -0
- package/references/minimem/src/server/tools.ts +720 -0
- package/references/minimem/src/session.ts +460 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +24 -0
- package/references/openteams/.claude/settings.json +6 -0
- package/references/openteams/README.md +1 -0
- package/references/openteams/SKILL.md +341 -0
- package/references/openteams/design.md +411 -0
- package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
- package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
- package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
- package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
- package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
- package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
- package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
- package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
- package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
- package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
- package/references/openteams/examples/bmad-method/team.yaml +161 -0
- package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +17 -0
- package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +25 -0
- package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +34 -0
- package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +18 -0
- package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +42 -0
- package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +15 -0
- package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +17 -0
- package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +28 -0
- package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +16 -0
- package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +13 -0
- package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +14 -0
- package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +19 -0
- package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/debugger.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/executor.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +9 -0
- package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/planner.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/verifier.yaml +8 -0
- package/references/openteams/examples/get-shit-done/team.yaml +154 -0
- package/references/openteams/package-lock.json +2181 -0
- package/references/openteams/package.json +48 -0
- package/references/openteams/schema/role.schema.json +125 -0
- package/references/openteams/schema/team.schema.json +284 -0
- package/references/openteams/src/cli/agent.ts +104 -0
- package/references/openteams/src/cli/cli.test.ts +381 -0
- package/references/openteams/src/cli/generate.ts +220 -0
- package/references/openteams/src/cli/message.ts +241 -0
- package/references/openteams/src/cli/task.ts +154 -0
- package/references/openteams/src/cli/team.ts +104 -0
- package/references/openteams/src/cli/template.ts +207 -0
- package/references/openteams/src/cli.ts +45 -0
- package/references/openteams/src/db/database.test.ts +185 -0
- package/references/openteams/src/db/database.ts +240 -0
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +332 -0
- package/references/openteams/src/generators/agent-prompt-generator.ts +521 -0
- package/references/openteams/src/generators/package-generator.test.ts +129 -0
- package/references/openteams/src/generators/package-generator.ts +102 -0
- package/references/openteams/src/generators/skill-generator.test.ts +246 -0
- package/references/openteams/src/generators/skill-generator.ts +374 -0
- package/references/openteams/src/index.ts +104 -0
- package/references/openteams/src/services/agent-service.test.ts +158 -0
- package/references/openteams/src/services/agent-service.ts +84 -0
- package/references/openteams/src/services/communication-service.test.ts +455 -0
- package/references/openteams/src/services/communication-service.ts +371 -0
- package/references/openteams/src/services/message-service.test.ts +342 -0
- package/references/openteams/src/services/message-service.ts +203 -0
- package/references/openteams/src/services/task-service.test.ts +434 -0
- package/references/openteams/src/services/task-service.ts +239 -0
- package/references/openteams/src/services/team-service.test.ts +181 -0
- package/references/openteams/src/services/team-service.ts +139 -0
- package/references/openteams/src/services/template-service.test.ts +306 -0
- package/references/openteams/src/services/template-service.ts +182 -0
- package/references/openteams/src/spawner/acp-factory.ts +96 -0
- package/references/openteams/src/spawner/interface.ts +31 -0
- package/references/openteams/src/spawner/mock.test.ts +93 -0
- package/references/openteams/src/spawner/mock.ts +59 -0
- package/references/openteams/src/template/loader.test.ts +1319 -0
- package/references/openteams/src/template/loader.ts +698 -0
- package/references/openteams/src/template/types.ts +200 -0
- package/references/openteams/src/types.ts +205 -0
- package/references/openteams/tsconfig.json +18 -0
- package/references/openteams/vitest.config.ts +9 -0
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +11 -0
- package/references/skill-tree/.sudocode/specs.jsonl +1 -0
- package/references/skill-tree/CLAUDE.md +150 -0
- package/references/skill-tree/README.md +324 -0
- package/references/skill-tree/docs/GAPS_v1.md +221 -0
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
- package/references/skill-tree/docs/TODOS.md +91 -0
- package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
- package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
- package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
- package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
- package/references/skill-tree/docs/scraper/README.md +170 -0
- package/references/skill-tree/examples/basic-usage.ts +190 -0
- package/references/skill-tree/package-lock.json +1509 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/scraper/README.md +123 -0
- package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
- package/references/skill-tree/scraper/docs/PLAN.md +336 -0
- package/references/skill-tree/scraper/drizzle.config.ts +10 -0
- package/references/skill-tree/scraper/package-lock.json +6329 -0
- package/references/skill-tree/scraper/package.json +68 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
- package/references/skill-tree/scraper/tsup.config.ts +14 -0
- package/references/skill-tree/scraper/vitest.config.ts +17 -0
- package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
- package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
- package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
- package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
- package/references/skill-tree/test/run-all.ts +106 -0
- package/references/skill-tree/test/utils.ts +128 -0
- package/references/skill-tree/vitest.config.ts +16 -0
- package/src/agent/agent-manager.ts +143 -72
- package/src/agent/types.ts +9 -0
- package/src/api/__tests__/server.test.ts +203 -4
- package/src/api/server.ts +130 -5
- package/src/api/types.ts +3 -1
- package/src/cli/acp.ts +68 -1
- package/src/cli/index.ts +5 -1
- package/src/cli/mcp.ts +27 -13
- package/src/config/project-config.ts +27 -3
- package/src/index.ts +3 -0
- package/src/lifecycle/__tests__/handlers.test.ts +53 -0
- package/src/lifecycle/handlers/index.ts +25 -8
- package/src/lifecycle/types.ts +3 -0
- package/src/map/adapter/__tests__/stream-extensions.test.ts +494 -0
- package/src/map/adapter/extensions/index.ts +36 -0
- package/src/map/adapter/extensions/streams.ts +839 -0
- package/src/map/adapter/index.ts +5 -0
- package/src/map/adapter/types.ts +8 -1
- package/src/mcp/mcp-server.ts +14 -3
- package/src/mcp/tools/done.ts +19 -0
- package/src/roles/builtin/coordinator.ts +2 -0
- package/src/roles/builtin/integrator.ts +2 -0
- package/src/roles/builtin/worker.ts +3 -0
- package/src/roles/capabilities.ts +11 -0
- package/src/roles/config-loader.ts +3 -2
- package/src/roles/types.ts +7 -0
- package/src/server/combined-server.ts +15 -1
- package/src/store/__tests__/event-store-oob.test.ts +109 -0
- package/src/store/event-store.ts +13 -3
- package/src/store/instance.ts +2 -2
- package/src/store/types/agents.ts +5 -0
- package/src/task/backend/__tests__/memory-pull-mode.test.ts +153 -0
- package/src/task/backend/opentasks/daemon-manager.ts +4 -1
- package/src/teams/CLAUDE.md +180 -0
- package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +1263 -0
- package/src/teams/__tests__/team-manager.test.ts +814 -0
- package/src/teams/__tests__/team-system.test.ts +1291 -8
- package/src/teams/index.ts +21 -3
- package/src/teams/seed-defaults.ts +79 -0
- package/src/teams/team-loader.ts +200 -234
- package/src/teams/team-manager.ts +387 -0
- package/src/teams/team-runtime.ts +590 -121
- package/src/teams/types.ts +99 -200
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"s-2wx5","uuid":"f2e6f765-0ff1-40ee-b93c-4ea832231e94","title":"Git Sync System for Memory Directories","file_path":"specs/s-2wx5_git_sync_system_for_memory_directories.md","content":"# Git Sync System for Memory Directories\n\n## Context\n\nminimem stores memories as plain Markdown files which are inherently git-friendly. However, users need a way to sync memories across machines and collaborate with others. The SQLite database with embeddings is **not** the source of truth and should never be committed—it's rebuilt locally via `minimem sync`.\n\nUsers have two distinct use cases:\n1. **Project-bound memories** - embedded directly in code repos alongside source code\n2. **Standalone memories** - scattered directories that should sync to a central repository\n3. **Hybrid** - project memories that are ALSO synced to a central repo for aggregation\n\n## Out of Scope\n\n- Real-time collaborative editing (not Google Docs)\n- Full git client replacement (we use git, not replace it)\n- Remote repository hosting (user provides their own)\n- Encryption at rest (use git-crypt or similar if needed)\n\n## Requirements\n\n### Must Have\n\n- [ ] CLI commands to configure sync mappings between local directories and central repo paths\n- [ ] Auto-detection of directory type (project-bound, standalone, hybrid)\n- [ ] Push/pull commands to sync directories with central repo\n- [ ] Configurable merge resolution strategies\n- [ ] Support for multiple directories syncing to one central repo\n- [ ] Path collision validation on init\n- [ ] Graceful sync failure recovery with atomic operations\n\n### Should Have\n\n- [ ] Daemon for automatic sync with file watching\n- [ ] Git hooks integration in central repo (post-pull triggers local sync)\n- [ ] Merge resolver hook for custom conflict resolution tools\n- [ ] Sync state registry in central repo to detect collisions\n\n### Nice to Have\n\n- [ ] Integration with MCP server (daemon runs alongside)\n- [ ] Periodic sync fallback when file watching unavailable\n- [ ] Status command showing sync state across all configured directories\n\n## Design\n\n### Directory Types\n\n| Type | Detection | Git Management | Sync Behavior |\n|------|-----------|----------------|---------------|\n| **Project-bound** | Inside git repo, no sync config | User handles git | No sync |\n| **Standalone** | Has sync config, not in project git | minimem manages | Full sync |\n| **Hybrid** | Inside git repo AND has sync config | User handles project git | Also syncs to central |\n| **Unmanaged** | No git repo, no sync config | None | Prompt to set up |\n\n### Auto-Detection Logic\n\n```\nIs there a sync config in .minimem/config.json?\n├─ Yes: \n│ └─ Is directory inside a git repo?\n│ ├─ Yes → Hybrid (user manages project git, minimem syncs to central)\n│ └─ No → Standalone (minimem manages sync)\n└─ No:\n └─ Is directory inside a git repo?\n ├─ Yes → Project-bound (user manages everything)\n └─ No → Unmanaged (prompt to set up sync?)\n```\n\n### Configuration\n\n**Global config** (`~/.config/minimem/config.json`):\n```json\n{\n \"centralRepo\": \"~/memories-repo\",\n \"sync\": {\n \"conflictStrategy\": \"keep-both\",\n \"autoSync\": true,\n \"autoCommit\": false\n }\n}\n```\n\n**Per-directory config** (`.minimem/config.json`):\n```json\n{\n \"sync\": {\n \"enabled\": true,\n \"path\": \"global/\",\n \"include\": [\"MEMORY.md\", \"memory/**/*.md\"],\n \"exclude\": [\"memory/drafts/**\"]\n }\n}\n```\n\n**Default sync scope:** `MEMORY.md` + `memory/**/*.md`\n\n### Central Repo Registry\n\nThe central repo maintains a registry to prevent path collisions:\n\n**`.minimem-registry.json`** (in central repo root):\n```json\n{\n \"mappings\": [\n {\n \"path\": \"global/\",\n \"localPath\": \"~/.minimem\",\n \"machineId\": \"macbook-pro-a1b2\",\n \"lastSync\": \"2024-01-15T10:30:00Z\"\n },\n {\n \"path\": \"work/\",\n \"localPath\": \"~/work/memories\",\n \"machineId\": \"macbook-pro-a1b2\",\n \"lastSync\": \"2024-01-15T10:30:00Z\"\n }\n ]\n}\n```\n\n**Collision detection:**\n- On `sync init`: check registry, block if path already mapped by different local path\n- Daemon: periodically validate registry, warn on conflicts\n- Same machine can remap (update), different machine with same path = collision\n\n### CLI Commands\n\n```bash\n# === Central Repo Setup ===\n\n# Use existing repo as central\nminimem config set centralRepo ~/existing-memories-repo\n\n# Initialize new central repo\nminimem sync init-central ~/new-memories-repo\n# Creates repo structure, .gitignore, registry file\n\n# === Directory Sync Setup ===\n\n# Initialize sync for current directory\nminimem sync init --path global/\n# Validates path not already mapped, updates registry\n\n# Explicit paths\nminimem sync init --local ~/work/memories --path work/\n\n# List all sync mappings (from registry)\nminimem sync list\n\n# Remove mapping\nminimem sync remove\n# Removes from local config and registry\n\n# === Sync Operations ===\n\nminimem push # local → central repo\nminimem pull # central repo → local\nminimem sync status # show sync state for all directories\n```\n\n### Conflict Detection (Hybrid: Hash + Shadow)\n\n**Sync state tracking** (`.minimem/sync-state.json`):\n```json\n{\n \"lastSync\": \"2024-01-15T10:30:00Z\",\n \"files\": {\n \"MEMORY.md\": {\n \"localHash\": \"abc123\",\n \"remoteHash\": \"abc123\",\n \"lastSyncedHash\": \"abc123\"\n },\n \"memory/2024-01-15.md\": {\n \"localHash\": \"def456\",\n \"remoteHash\": \"def456\",\n \"lastSyncedHash\": \"def456\"\n }\n }\n}\n```\n\n**Detection algorithm:**\n```\nFor each file:\n localHash = hash(local file)\n remoteHash = hash(central repo file)\n baseHash = lastSyncedHash from sync-state.json\n \n if localHash == remoteHash:\n → No change, skip\n elif localHash == baseHash:\n → Only remote changed, pull\n elif remoteHash == baseHash:\n → Only local changed, push\n else:\n → Both changed, CONFLICT\n → Create shadow copy for 3-way merge\n → Apply merge strategy\n```\n\n**Shadow copies** (created only on conflict):\n- `.minimem/shadows/{filename}.base` - last synced version\n- Used as merge base for 3-way merge\n- Cleaned up after resolution\n\n### Merge Resolution Strategies\n\n| Strategy | Behavior | Use Case |\n|----------|----------|----------|\n| `merge` | Git-style 3-way merge | Technical content |\n| `keep-both` | Append both versions with separator | **Default for memories** |\n| `manual` | Fail, open in merge tool | Critical content |\n| `last-write-wins` | Overwrite with latest timestamp | Low-stakes |\n\n**Keep-both format:**\n```markdown\n<<<<<<< LOCAL (2024-01-15 10:30)\nLocal version of content\n=======\nRemote version of content\n>>>>>>> REMOTE (2024-01-15 09:45)\n```\n\nMerge resolver hook:\n```json\n{\n \"sync\": {\n \"conflictStrategy\": \"manual\",\n \"mergeResolver\": \"code --wait --merge\"\n }\n}\n```\n\n### Sync Failure Recovery (Atomic + Quarantine)\n\n**Atomic sync process:**\n```\n1. Create staging: .minimem/staging/{timestamp}/\n2. Copy files to staging\n3. Validate all files copied successfully\n4. On success: move staging → final destination\n5. On failure: \n - Leave staging intact\n - Log error to .minimem/sync.log\n - Notify user\n```\n\n**Quarantine for conflicts:**\n```\n.minimem/\n├── conflicts/\n│ └── 2024-01-15T10-30-00/\n│ ├── MEMORY.md.local\n│ ├── MEMORY.md.remote\n│ └── MEMORY.md.base\n└── staging/\n └── {in-progress sync files}\n```\n\n**Recovery commands:**\n```bash\nminimem sync recover # retry failed sync\nminimem sync conflicts # list unresolved conflicts\nminimem sync resolve <file> # manually resolve conflict\n```\n\n### Daemon Architecture\n\n```\n ┌─────────────────┐\n │ Daemon │\n └────────┬────────┘\n │\n ┌───────────────────┼───────────────────┐\n │ │ │\n ▼ ▼ ▼\n Watch local dirs Watch central repo Validate registry\n (file changes) (git pull detected) (detect collisions)\n │ │ │\n ▼ ▼ ▼\n Debounce + Push Pull to local dirs Warn on conflicts\n```\n\n**Daemon responsibilities:**\n- Watch configured directories for file changes\n- Debounce rapid changes (e.g., 2 second delay)\n- Trigger push on local changes (if autoSync enabled)\n- Watch central repo for pulls (git hooks or polling)\n- Periodically validate registry for path collisions\n- Stage changes only by default (autoCommit: false)\n\nDaemon modes:\n- Standalone: `minimem daemon`\n- Integrated: runs with MCP server\n- System service: launchd/systemd\n\n### Bootstrap Flows\n\n**Flow A: Fresh central repo**\n```bash\nminimem sync init-central ~/memories-repo\n# Creates:\n# ~/memories-repo/\n# ├── .git/\n# ├── .gitignore # ignores *.db, staging/, conflicts/\n# ├── .minimem-registry.json\n# └── README.md\n\nminimem config set centralRepo ~/memories-repo\n```\n\n**Flow B: Existing repo as central**\n```bash\nminimem config set centralRepo ~/existing-repo\n# Validates repo exists\n# Creates .minimem-registry.json if missing\n# Warns if structure looks unusual\n```\n\n**Flow C: Add directory to sync**\n```bash\ncd ~/.minimem\nminimem sync init --path global/\n# Checks registry for collision\n# Updates .minimem/config.json\n# Registers in central repo\n# Initial sync (pull or push based on state)\n```\n\n**Flow D: Clone setup on new machine**\n```bash\ngit clone <central-repo> ~/memories-repo\nminimem config set centralRepo ~/memories-repo\nminimem sync list # shows all registered paths\nminimem sync init --local ~/.minimem --path global/\n# Links local directory to existing central path\n# Updates registry with new machine ID\n# Pulls content from central\n```\n\n### Central Repo Structure\n\n```\nmemories-repo/ # git repo\n├── .git/\n├── .gitignore\n├── .minimem-registry.json # path collision prevention\n├── global/ # maps to ~/.minimem/\n│ ├── MEMORY.md\n│ └── memory/\n├── work/ # maps to ~/work/memories/\n│ ├── MEMORY.md\n│ └── memory/\n└── projects/\n └── projectA/ # hybrid: also in project repo\n ├── MEMORY.md\n └── memory/\n```\n\n## Success Criteria\n\n- [ ] User can configure a central repo and map multiple directories to it\n- [ ] `minimem push/pull` correctly syncs files between local and central\n- [ ] Conflicts are detected using hash comparison and resolved with keep-both strategy\n- [ ] Path collisions are prevented via registry validation on init\n- [ ] Auto-detection correctly identifies all four directory types\n- [ ] Sync failures are recoverable via atomic operations and quarantine\n- [ ] Daemon watches for changes and syncs automatically when enabled\n- [ ] Daemon detects and warns about registry conflicts\n\n## Technical Considerations\n\n- Use `chokidar` for cross-platform file watching\n- Git operations via `simple-git` library\n- Debounce file changes (2 second default) before sync\n- Content hashing with SHA-256 for conflict detection\n- Machine ID from `os.hostname()` + random suffix on first run\n- Store machine ID in global config\n- Central repo only contains `.md` files, registry, and gitignore\n\n## Decisions Made\n\n| Question | Decision | Rationale |\n|----------|----------|-----------|\n| Daemon auto-commit? | Configurable, default off | User controls when to commit |\n| Conflict strategy default? | `keep-both` | Never lose memory data |\n| Lock mechanism? | Atomic staging | Simpler than locks, same safety |\n| Path collision handling? | Registry + validation on init | Prevent rather than recover |\n","priority":1,"archived":0,"archived_at":null,"created_at":"2026-02-02 06:36:19","updated_at":"2026-02-02 23:50:18","parent_id":null,"parent_uuid":null,"relationships":[],"tags":["cli","daemon","git","sync"]}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides context for AI agents working on the minimem codebase.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
**minimem** is a file-based memory system with vector search for AI agents. It lets users store memories as Markdown files and search them semantically using embeddings.
|
|
8
|
+
|
|
9
|
+
**Key value props:**
|
|
10
|
+
- Plain Markdown files (git-friendly, human-readable)
|
|
11
|
+
- Semantic search via embeddings (OpenAI, Gemini, or local)
|
|
12
|
+
- Hybrid search combining vectors + full-text (BM25)
|
|
13
|
+
- MCP server for Claude Desktop/Cursor integration
|
|
14
|
+
- CLI for command-line usage
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
src/
|
|
20
|
+
├── minimem.ts # Main Minimem class - core logic
|
|
21
|
+
├── internal.ts # Utilities: chunking, hashing, file listing
|
|
22
|
+
├── index.ts # Public exports
|
|
23
|
+
├── cli/ # CLI implementation
|
|
24
|
+
│ ├── index.ts # Entry point, command registration
|
|
25
|
+
│ ├── config.ts # Config loading, directory resolution
|
|
26
|
+
│ └── commands/ # Individual command implementations
|
|
27
|
+
├── db/ # Database layer
|
|
28
|
+
│ ├── schema.ts # SQLite schema creation (v4)
|
|
29
|
+
│ └── sqlite-vec.ts # Vector extension loading
|
|
30
|
+
├── embeddings/ # Embedding providers
|
|
31
|
+
│ ├── embeddings.ts # Provider factory and interfaces
|
|
32
|
+
│ ├── batch-openai.ts # OpenAI batch embedding
|
|
33
|
+
│ └── batch-gemini.ts # Gemini batch embedding
|
|
34
|
+
├── search/ # Search implementation
|
|
35
|
+
│ ├── hybrid.ts # Hybrid vector+FTS search, BM25
|
|
36
|
+
│ ├── search.ts # Knowledge-filtered search helpers
|
|
37
|
+
│ └── graph.ts # Knowledge graph traversal (BFS)
|
|
38
|
+
└── server/ # MCP server
|
|
39
|
+
├── mcp.ts # MCP protocol implementation
|
|
40
|
+
└── tools.ts # Tool definitions for LLM integration
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Key Files
|
|
44
|
+
|
|
45
|
+
| File | Purpose |
|
|
46
|
+
|------|---------|
|
|
47
|
+
| `src/minimem.ts` | Core class with search, sync, append, knowledge methods |
|
|
48
|
+
| `src/internal.ts` | `chunkMarkdown()`, `hashText()`, `listMemoryFiles()` |
|
|
49
|
+
| `src/session.ts` | Frontmatter parsing/serialization (incl. knowledge fields) |
|
|
50
|
+
| `src/cli/commands/search.ts` | Multi-directory search implementation |
|
|
51
|
+
| `src/embeddings/embeddings.ts` | `createEmbeddingProvider()` factory |
|
|
52
|
+
| `src/search/hybrid.ts` | `mergeHybridResults()`, BM25 scoring |
|
|
53
|
+
| `src/search/search.ts` | `buildKnowledgeFilterSql()` for metadata filtering |
|
|
54
|
+
| `src/search/graph.ts` | `getLinksFrom()`, `getLinksTo()`, `getNeighbors()`, `getPathBetween()` |
|
|
55
|
+
| `src/server/mcp.ts` | MCP server for Claude Desktop integration |
|
|
56
|
+
| `src/server/tools.ts` | MCP tool definitions (memory + knowledge) |
|
|
57
|
+
|
|
58
|
+
## Development Commands
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm run build # Build library and CLI
|
|
62
|
+
npm run dev # Watch mode
|
|
63
|
+
npm run test # Unit tests (vitest)
|
|
64
|
+
npm run test:cli # CLI command tests
|
|
65
|
+
npm run test:integration # E2E integration tests
|
|
66
|
+
npm run test:all # All tests
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Testing
|
|
70
|
+
|
|
71
|
+
Tests are in `__tests__/` directories alongside source:
|
|
72
|
+
|
|
73
|
+
- `src/__tests__/minimem.integration.test.ts` - Full E2E with mock embeddings
|
|
74
|
+
- `src/__tests__/knowledge.test.ts` - Knowledge frontmatter parsing + graph traversal
|
|
75
|
+
- `src/cli/__tests__/commands.test.ts` - CLI command tests
|
|
76
|
+
- `src/embeddings/__tests__/` - Embedding provider tests
|
|
77
|
+
- `src/search/__tests__/` - Hybrid search tests
|
|
78
|
+
- `src/server/__tests__/` - MCP server + knowledge tool tests
|
|
79
|
+
|
|
80
|
+
**Mock embeddings:** Tests use deterministic embeddings based on keyword presence (no API calls needed). See `createDeterministicEmbedding()` in test files.
|
|
81
|
+
|
|
82
|
+
## Build System
|
|
83
|
+
|
|
84
|
+
- **tsup** for bundling (ESM only, Node 22+)
|
|
85
|
+
- Library: `dist/index.js` with types
|
|
86
|
+
- CLI: `dist/cli/index.js` (bundled with shebang)
|
|
87
|
+
- **postbuild** script fixes `node:sqlite` import (esbuild strips `node:` prefix)
|
|
88
|
+
|
|
89
|
+
## Important Patterns
|
|
90
|
+
|
|
91
|
+
### Memory Path Validation
|
|
92
|
+
Only `MEMORY.md` and `memory/*.md` files are indexed. The `validateMemoryPath()` method enforces this.
|
|
93
|
+
|
|
94
|
+
### Embedding Cache
|
|
95
|
+
Embeddings are cached by content hash in SQLite. Same content = same embedding, even across files.
|
|
96
|
+
|
|
97
|
+
### Hybrid Search
|
|
98
|
+
Default weights: 70% vector similarity, 30% BM25 text search. Configurable via `hybrid.vectorWeight` and `hybrid.textWeight`.
|
|
99
|
+
|
|
100
|
+
### Multi-Directory Search
|
|
101
|
+
The search command can query multiple directories:
|
|
102
|
+
```bash
|
|
103
|
+
minimem search "query" --dir ~/a --dir ~/b --global
|
|
104
|
+
```
|
|
105
|
+
Results are merged and sorted by score.
|
|
106
|
+
|
|
107
|
+
## Common Tasks
|
|
108
|
+
|
|
109
|
+
### Adding a new CLI command
|
|
110
|
+
|
|
111
|
+
1. Create `src/cli/commands/newcmd.ts`:
|
|
112
|
+
```typescript
|
|
113
|
+
export type NewCmdOptions = { dir?: string; global?: boolean; };
|
|
114
|
+
|
|
115
|
+
export async function newcmd(options: NewCmdOptions): Promise<void> {
|
|
116
|
+
const memoryDir = resolveMemoryDir({ dir: options.dir, global: options.global });
|
|
117
|
+
// ... implementation
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
2. Export from `src/cli/commands/index.ts`
|
|
122
|
+
|
|
123
|
+
3. Register in `src/cli/index.ts`:
|
|
124
|
+
```typescript
|
|
125
|
+
program
|
|
126
|
+
.command("newcmd")
|
|
127
|
+
.description("Description")
|
|
128
|
+
.option("-d, --dir <path>", "Memory directory")
|
|
129
|
+
.action(newcmd);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
4. Add tests in `src/cli/__tests__/commands.test.ts`
|
|
133
|
+
|
|
134
|
+
### Adding a new embedding provider
|
|
135
|
+
|
|
136
|
+
1. Add provider type to `EmbeddingProviderOptions` in `src/embeddings/embeddings.ts`
|
|
137
|
+
2. Implement in `createEmbeddingProvider()` switch statement
|
|
138
|
+
3. Add batch function in `src/embeddings/batch-{provider}.ts` if needed
|
|
139
|
+
4. Update `auto` provider detection logic
|
|
140
|
+
|
|
141
|
+
### Modifying the database schema
|
|
142
|
+
|
|
143
|
+
1. Update `createSchema()` in `src/db/schema.ts` (currently at SCHEMA_VERSION 4)
|
|
144
|
+
2. Consider migration strategy (currently: recreate on schema change)
|
|
145
|
+
3. Update relevant queries in `src/minimem.ts`
|
|
146
|
+
4. If adding knowledge-related columns, update `indexKnowledgeMetadata()` in `src/minimem.ts`
|
|
147
|
+
|
|
148
|
+
## Gotchas
|
|
149
|
+
|
|
150
|
+
1. **node:sqlite is experimental** - Requires Node 22+, shows warning on every run
|
|
151
|
+
2. **sqlite-vec may not load** - Falls back to FTS-only search if extension fails
|
|
152
|
+
3. **CLI bundle strips node: prefix** - postbuild script fixes this
|
|
153
|
+
4. **Commander.js is CJS** - Must be external in CLI bundle, not inlined
|
|
154
|
+
|
|
155
|
+
## Environment Variables
|
|
156
|
+
|
|
157
|
+
| Variable | Purpose |
|
|
158
|
+
|----------|---------|
|
|
159
|
+
| `OPENAI_API_KEY` | OpenAI embeddings |
|
|
160
|
+
| `GOOGLE_API_KEY` | Gemini embeddings |
|
|
161
|
+
| `GEMINI_API_KEY` | Alternative Gemini key |
|
|
162
|
+
| `MEMORY_DIR` | Default memory directory |
|
|
163
|
+
|
|
164
|
+
## File Structure Convention
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
project/
|
|
168
|
+
├── MEMORY.md # Main memory (required for init)
|
|
169
|
+
├── memory/ # Additional memories
|
|
170
|
+
│ ├── YYYY-MM-DD.md # Daily logs (from append)
|
|
171
|
+
│ └── *.md # Topic files
|
|
172
|
+
└── .minimem/
|
|
173
|
+
├── config.json # User config
|
|
174
|
+
├── index.db # SQLite with vectors
|
|
175
|
+
└── .gitignore # Ignores index.db
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## MCP Integration
|
|
179
|
+
|
|
180
|
+
The MCP server exposes 5 tools over stdio, compatible with Claude Desktop and Cursor:
|
|
181
|
+
|
|
182
|
+
| Tool | Purpose |
|
|
183
|
+
|------|---------|
|
|
184
|
+
| `memory_search` | General semantic search across all memory files |
|
|
185
|
+
| `memory_get_details` | Retrieve full content of a specific memory file |
|
|
186
|
+
| `knowledge_search` | Search knowledge notes with domain/entity/confidence/type filters |
|
|
187
|
+
| `knowledge_graph` | Traverse knowledge graph relationships from a note |
|
|
188
|
+
| `knowledge_path` | Find shortest path between two knowledge notes via graph links |
|
|
189
|
+
|
|
190
|
+
The 3 `knowledge_*` tools are additive — they only return results when knowledge-formatted notes (with the frontmatter convention below) are present. Without knowledge notes, they return empty results.
|
|
191
|
+
|
|
192
|
+
Config location for Claude Desktop:
|
|
193
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
194
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
195
|
+
|
|
196
|
+
## Claude Code Plugin
|
|
197
|
+
|
|
198
|
+
The `claude-plugin/` directory contains a ready-to-use Claude Code plugin:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
claude-plugin/
|
|
202
|
+
├── .claude-plugin/
|
|
203
|
+
│ └── plugin.json # Plugin manifest
|
|
204
|
+
├── .mcp.json # MCP server definition (uses npx minimem mcp)
|
|
205
|
+
├── skills/
|
|
206
|
+
│ └── memory/
|
|
207
|
+
│ └── SKILL.md # Auto-invoked memory skill
|
|
208
|
+
└── commands/
|
|
209
|
+
├── remember.md # /minimem:remember command
|
|
210
|
+
└── recall.md # /minimem:recall command
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Testing the Plugin
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
claude --plugin-dir ./claude-plugin
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Plugin Commands
|
|
220
|
+
|
|
221
|
+
- `/minimem:remember <text>` - Store information in memory
|
|
222
|
+
- `/minimem:recall <query>` - Search for stored memories
|
|
223
|
+
|
|
224
|
+
## Knowledge Frontmatter Convention
|
|
225
|
+
|
|
226
|
+
minimem can index structured knowledge notes produced by external systems (e.g., cognitive-core). This is a **file-format convention only** — minimem does not import or depend on any external package.
|
|
227
|
+
|
|
228
|
+
When a memory file's YAML frontmatter contains knowledge-specific fields, minimem parses them and populates metadata columns in the `chunks` table and edges in the `knowledge_links` table.
|
|
229
|
+
|
|
230
|
+
### Supported fields
|
|
231
|
+
|
|
232
|
+
All fields are optional. If absent, the file is treated as a regular memory note.
|
|
233
|
+
|
|
234
|
+
```yaml
|
|
235
|
+
---
|
|
236
|
+
id: k-abc123 # Unique knowledge node ID
|
|
237
|
+
type: observation # observation | entity | domain-summary
|
|
238
|
+
domain: [database, devops] # Domain tags
|
|
239
|
+
entities: [prisma, postgres] # Referenced entities
|
|
240
|
+
confidence: 0.85 # Confidence score (0.0–1.0)
|
|
241
|
+
source: # Provenance metadata
|
|
242
|
+
origin: extracted # extracted | agent-authored
|
|
243
|
+
trajectories: [t-001, t-002] # Source trajectory IDs
|
|
244
|
+
agentId: agent-v1 # Authoring agent
|
|
245
|
+
links: # Graph edges to other knowledge nodes
|
|
246
|
+
- target: k-other
|
|
247
|
+
relation: related-to # related-to | depends-on | supports | etc.
|
|
248
|
+
layer: semantic # semantic | temporal | causal | entity
|
|
249
|
+
- target: k-dep
|
|
250
|
+
relation: depends-on
|
|
251
|
+
created: 2025-01-15T10:00:00Z
|
|
252
|
+
updated: 2025-01-15T12:00:00Z
|
|
253
|
+
supersedes: k-old # ID of note this replaces
|
|
254
|
+
tags: [migration, patterns]
|
|
255
|
+
---
|
|
256
|
+
# Note Title
|
|
257
|
+
|
|
258
|
+
Body content in Markdown.
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### How it works
|
|
262
|
+
|
|
263
|
+
1. **Indexing** (`indexFile()`): When a file is indexed, frontmatter is parsed via `parseFrontmatter()`. If `type` is present, the chunk row gets `knowledge_type`, `knowledge_id`, `domains` (JSON), `entities` (JSON), and `confidence` populated. If `links` is present, rows are upserted into `knowledge_links`.
|
|
264
|
+
|
|
265
|
+
2. **Filtered search** (`knowledgeSearch()`): Accepts `domain`, `entities`, `minConfidence`, and `knowledgeType` filters. Uses `json_each()` SQL for array column matching. Falls back to regular search when no filters are provided.
|
|
266
|
+
|
|
267
|
+
3. **Graph traversal** (`src/search/graph.ts`): Operates on the `knowledge_links` table. Supports outgoing/incoming edge queries, BFS neighbor discovery (configurable depth), and shortest-path finding.
|
|
268
|
+
|
|
269
|
+
4. **Re-indexing**: When a file changes, old `knowledge_links` for that file are deleted before new ones are inserted, keeping the graph consistent.
|
|
270
|
+
|
|
271
|
+
### Independence guarantee
|
|
272
|
+
|
|
273
|
+
- minimem defines its own types (`KnowledgeSource`, `KnowledgeLink`, `MemoryFrontmatter`) locally in `src/session.ts`
|
|
274
|
+
- Zero imports from cognitive-core or any external knowledge system
|
|
275
|
+
- All knowledge columns are nullable — regular memory files index without them
|
|
276
|
+
- The `knowledge_links` table only gets rows when frontmatter contains `links`
|
|
277
|
+
- All knowledge MCP tools (`knowledge_search`, `knowledge_graph`, `knowledge_path`) are additive alongside existing tools
|
|
278
|
+
|
|
279
|
+
### Database schema (v4)
|
|
280
|
+
|
|
281
|
+
Knowledge-related additions to the schema:
|
|
282
|
+
|
|
283
|
+
```sql
|
|
284
|
+
-- Added columns on chunks table (all nullable)
|
|
285
|
+
knowledge_type TEXT -- 'observation', 'entity', 'domain-summary'
|
|
286
|
+
knowledge_id TEXT -- Note ID from frontmatter
|
|
287
|
+
domains TEXT -- JSON array of domain strings
|
|
288
|
+
entities TEXT -- JSON array of entity strings
|
|
289
|
+
confidence REAL -- 0.0–1.0
|
|
290
|
+
|
|
291
|
+
-- New table for graph edges
|
|
292
|
+
CREATE TABLE knowledge_links (
|
|
293
|
+
from_id TEXT NOT NULL,
|
|
294
|
+
to_id TEXT NOT NULL,
|
|
295
|
+
relation TEXT NOT NULL,
|
|
296
|
+
layer TEXT, -- semantic, temporal, causal, entity
|
|
297
|
+
weight REAL DEFAULT 0.5,
|
|
298
|
+
source_path TEXT,
|
|
299
|
+
created_at INTEGER DEFAULT (unixepoch()),
|
|
300
|
+
PRIMARY KEY (from_id, to_id, relation)
|
|
301
|
+
);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## Code Style
|
|
305
|
+
|
|
306
|
+
- TypeScript with strict mode
|
|
307
|
+
- ESM modules (no CommonJS)
|
|
308
|
+
- Async/await for all I/O
|
|
309
|
+
- Types exported alongside implementations
|
|
310
|
+
- Tests use Node.js native test runner (not vitest) for integration tests
|