claude-code-swarm 0.3.3 → 0.3.5
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +22 -1
- package/.claude-plugin/run-agent-inbox-mcp.sh +76 -0
- package/.claude-plugin/run-minimem-mcp.sh +98 -0
- package/.claude-plugin/run-opentasks-mcp.sh +65 -0
- package/CLAUDE.md +200 -36
- package/README.md +65 -0
- package/e2e/helpers/cleanup.mjs +17 -3
- package/e2e/helpers/map-mock-server.mjs +201 -25
- package/e2e/helpers/sidecar.mjs +222 -0
- package/e2e/helpers/workspace.mjs +2 -1
- package/e2e/tier5-sidecar-inbox.test.mjs +900 -0
- package/e2e/tier6-inbox-mcp.test.mjs +173 -0
- package/e2e/tier6-live-agent.test.mjs +759 -0
- package/e2e/vitest.config.e2e.mjs +1 -1
- package/hooks/hooks.json +15 -8
- package/package.json +13 -1
- package/references/agent-inbox/CLAUDE.md +151 -0
- package/references/agent-inbox/README.md +238 -0
- package/references/agent-inbox/docs/CLAUDE-CODE-SWARM-PROPOSAL.md +137 -0
- package/references/agent-inbox/docs/DESIGN.md +1156 -0
- package/references/agent-inbox/hooks/inbox-hook.mjs +119 -0
- package/references/agent-inbox/hooks/register-hook.mjs +69 -0
- package/references/agent-inbox/package-lock.json +3347 -0
- package/references/agent-inbox/package.json +58 -0
- package/references/agent-inbox/rules/agent-inbox.md +78 -0
- package/references/agent-inbox/src/federation/address.ts +61 -0
- package/references/agent-inbox/src/federation/connection-manager.ts +573 -0
- package/references/agent-inbox/src/federation/delivery-queue.ts +222 -0
- package/references/agent-inbox/src/federation/index.ts +6 -0
- package/references/agent-inbox/src/federation/routing-engine.ts +188 -0
- package/references/agent-inbox/src/federation/trust.ts +71 -0
- package/references/agent-inbox/src/index.ts +390 -0
- package/references/agent-inbox/src/ipc/ipc-server.ts +207 -0
- package/references/agent-inbox/src/jsonrpc/mail-server.ts +382 -0
- package/references/agent-inbox/src/map/map-client.ts +414 -0
- package/references/agent-inbox/src/mcp/mcp-server.ts +272 -0
- package/references/agent-inbox/src/mesh/delivery-bridge.ts +110 -0
- package/references/agent-inbox/src/mesh/mesh-connector.ts +41 -0
- package/references/agent-inbox/src/mesh/mesh-transport.ts +157 -0
- package/references/agent-inbox/src/mesh/type-mapper.ts +239 -0
- package/references/agent-inbox/src/push/notifier.ts +233 -0
- package/references/agent-inbox/src/registry/warm-registry.ts +255 -0
- package/references/agent-inbox/src/router/message-router.ts +175 -0
- package/references/agent-inbox/src/storage/interface.ts +48 -0
- package/references/agent-inbox/src/storage/memory.ts +145 -0
- package/references/agent-inbox/src/storage/sqlite.ts +671 -0
- package/references/agent-inbox/src/traceability/traceability.ts +183 -0
- package/references/agent-inbox/src/types.ts +303 -0
- package/references/agent-inbox/test/federation/address.test.ts +101 -0
- package/references/agent-inbox/test/federation/connection-manager.test.ts +546 -0
- package/references/agent-inbox/test/federation/delivery-queue.test.ts +159 -0
- package/references/agent-inbox/test/federation/integration.test.ts +857 -0
- package/references/agent-inbox/test/federation/routing-engine.test.ts +117 -0
- package/references/agent-inbox/test/federation/sdk-integration.test.ts +744 -0
- package/references/agent-inbox/test/federation/trust.test.ts +89 -0
- package/references/agent-inbox/test/ipc-jsonrpc.test.ts +113 -0
- package/references/agent-inbox/test/ipc-server.test.ts +197 -0
- package/references/agent-inbox/test/mail-server.test.ts +285 -0
- package/references/agent-inbox/test/map-client.test.ts +408 -0
- package/references/agent-inbox/test/mesh/delivery-bridge.test.ts +178 -0
- package/references/agent-inbox/test/mesh/e2e-mesh.test.ts +527 -0
- package/references/agent-inbox/test/mesh/e2e-real-meshpeer.test.ts +629 -0
- package/references/agent-inbox/test/mesh/federation-mesh.test.ts +269 -0
- package/references/agent-inbox/test/mesh/mesh-connector.test.ts +66 -0
- package/references/agent-inbox/test/mesh/mesh-transport.test.ts +191 -0
- package/references/agent-inbox/test/mesh/meshpeer-integration.test.ts +442 -0
- package/references/agent-inbox/test/mesh/mock-mesh.ts +125 -0
- package/references/agent-inbox/test/mesh/mock-meshpeer.ts +266 -0
- package/references/agent-inbox/test/mesh/type-mapper.test.ts +226 -0
- package/references/agent-inbox/test/message-router.test.ts +184 -0
- package/references/agent-inbox/test/push-notifier.test.ts +139 -0
- package/references/agent-inbox/test/registry/warm-registry.test.ts +171 -0
- package/references/agent-inbox/test/sqlite-prefix.test.ts +192 -0
- package/references/agent-inbox/test/sqlite-storage.test.ts +243 -0
- package/references/agent-inbox/test/storage.test.ts +196 -0
- package/references/agent-inbox/test/traceability.test.ts +123 -0
- package/references/agent-inbox/test/wake.test.ts +330 -0
- package/references/agent-inbox/tsconfig.json +20 -0
- package/references/agent-inbox/tsup.config.ts +10 -0
- package/references/agent-inbox/vitest.config.ts +8 -0
- 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 +329 -0
- package/references/minimem/README.md +565 -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 +76 -0
- package/references/minimem/scripts/postbuild.js +49 -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-frontmatter.test.ts +148 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +148 -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 +760 -0
- package/references/minimem/src/cli/__tests__/contained-layout.test.ts +286 -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 +415 -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 +166 -0
- package/references/minimem/src/cli/commands/mcp.ts +221 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +223 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/store.ts +189 -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 +611 -0
- package/references/minimem/src/cli/index.ts +299 -0
- package/references/minimem/src/cli/shared.ts +189 -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 +205 -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 +358 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +237 -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 +132 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1291 -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 +347 -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/src/store/__tests__/manifest.test.ts +177 -0
- package/references/minimem/src/store/__tests__/materialize.test.ts +52 -0
- package/references/minimem/src/store/__tests__/store-graph.test.ts +228 -0
- package/references/minimem/src/store/index.ts +27 -0
- package/references/minimem/src/store/manifest.ts +203 -0
- package/references/minimem/src/store/materialize.ts +185 -0
- package/references/minimem/src/store/store-graph.ts +252 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +29 -0
- package/references/openteams/src/cli/generate.ts +23 -1
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +94 -0
- package/references/openteams/src/generators/agent-prompt-generator.ts +42 -13
- package/references/openteams/src/generators/package-generator.ts +9 -1
- package/references/openteams/src/generators/skill-generator.test.ts +28 -0
- package/references/openteams/src/generators/skill-generator.ts +10 -4
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +19 -0
- package/references/skill-tree/.sudocode/specs.jsonl +3 -0
- package/references/skill-tree/CLAUDE.md +132 -0
- package/references/skill-tree/README.md +396 -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 +157 -0
- package/references/skill-tree/package-lock.json +1852 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/plan.md +78 -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/references/swarmkit/src/commands/init/phases/configure.ts +0 -22
- package/references/swarmkit/src/commands/init/phases/global-setup.ts +5 -3
- package/references/swarmkit/src/commands/init/wizard.ts +2 -2
- package/references/swarmkit/src/packages/setup.test.ts +53 -7
- package/references/swarmkit/src/packages/setup.ts +37 -1
- package/scripts/bootstrap.mjs +26 -1
- package/scripts/generate-agents.mjs +5 -1
- package/scripts/map-hook.mjs +97 -64
- package/scripts/map-sidecar.mjs +179 -25
- package/scripts/team-loader.mjs +12 -41
- package/skills/swarm/SKILL.md +89 -25
- package/src/__tests__/agent-generator.test.mjs +6 -13
- package/src/__tests__/bootstrap.test.mjs +124 -1
- package/src/__tests__/config.test.mjs +200 -27
- package/src/__tests__/e2e-live-map.test.mjs +536 -0
- package/src/__tests__/e2e-mesh-sidecar.test.mjs +570 -0
- package/src/__tests__/e2e-native-task-hooks.test.mjs +376 -0
- package/src/__tests__/e2e-sidecar-bridge.test.mjs +477 -0
- package/src/__tests__/helpers.mjs +13 -0
- package/src/__tests__/inbox.test.mjs +22 -89
- package/src/__tests__/index.test.mjs +35 -9
- package/src/__tests__/integration.test.mjs +513 -0
- package/src/__tests__/map-events.test.mjs +514 -150
- package/src/__tests__/mesh-connection.test.mjs +308 -0
- package/src/__tests__/opentasks-client.test.mjs +517 -0
- package/src/__tests__/paths.test.mjs +185 -41
- package/src/__tests__/sidecar-client.test.mjs +35 -0
- package/src/__tests__/sidecar-server.test.mjs +124 -0
- package/src/__tests__/skilltree-client.test.mjs +80 -0
- package/src/agent-generator.mjs +104 -33
- package/src/bootstrap.mjs +150 -10
- package/src/config.mjs +81 -17
- package/src/context-output.mjs +58 -8
- package/src/inbox.mjs +9 -54
- package/src/index.mjs +39 -8
- package/src/map-connection.mjs +4 -3
- package/src/map-events.mjs +350 -80
- package/src/mesh-connection.mjs +148 -0
- package/src/opentasks-client.mjs +269 -0
- package/src/paths.mjs +182 -27
- package/src/sessionlog.mjs +14 -9
- package/src/sidecar-client.mjs +81 -27
- package/src/sidecar-server.mjs +175 -16
- package/src/skilltree-client.mjs +173 -0
- package/src/template.mjs +68 -4
- package/vitest.config.mjs +1 -0
|
@@ -0,0 +1,329 @@
|
|
|
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/cli/commands/init.ts` | Init command: scaffolds dir, materializes stores, runs initial sync |
|
|
52
|
+
| `src/cli/commands/store.ts` | Store commands: add, remove, link, unlink (materializes on add) |
|
|
53
|
+
| `src/store/manifest.ts` | Store manifest: registration, linking, resolution |
|
|
54
|
+
| `src/store/materialize.ts` | Store materialization: local symlink or remote git clone |
|
|
55
|
+
| `src/embeddings/embeddings.ts` | `createEmbeddingProvider()` factory |
|
|
56
|
+
| `src/search/hybrid.ts` | `mergeHybridResults()`, BM25 scoring |
|
|
57
|
+
| `src/search/search.ts` | `buildKnowledgeFilterSql()` for metadata filtering |
|
|
58
|
+
| `src/search/graph.ts` | `getLinksFrom()`, `getLinksTo()`, `getNeighbors()`, `getPathBetween()` |
|
|
59
|
+
| `src/server/mcp.ts` | MCP server for Claude Desktop integration |
|
|
60
|
+
| `src/server/tools.ts` | MCP tool definitions (memory + knowledge) |
|
|
61
|
+
|
|
62
|
+
## Development Commands
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm run build # Build library and CLI
|
|
66
|
+
npm run dev # Watch mode
|
|
67
|
+
npm run test # Unit tests (vitest)
|
|
68
|
+
npm run test:cli # CLI command tests
|
|
69
|
+
npm run test:integration # E2E integration tests
|
|
70
|
+
npm run test:all # All tests
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Testing
|
|
74
|
+
|
|
75
|
+
Tests are in `__tests__/` directories alongside source:
|
|
76
|
+
|
|
77
|
+
- `src/__tests__/minimem.integration.test.ts` - Full E2E with mock embeddings
|
|
78
|
+
- `src/__tests__/knowledge.test.ts` - Knowledge frontmatter parsing + graph traversal
|
|
79
|
+
- `src/cli/__tests__/commands.test.ts` - CLI command tests
|
|
80
|
+
- `src/embeddings/__tests__/` - Embedding provider tests
|
|
81
|
+
- `src/search/__tests__/` - Hybrid search tests
|
|
82
|
+
- `src/server/__tests__/` - MCP server + knowledge tool tests
|
|
83
|
+
|
|
84
|
+
**Mock embeddings:** Tests use deterministic embeddings based on keyword presence (no API calls needed). See `createDeterministicEmbedding()` in test files.
|
|
85
|
+
|
|
86
|
+
## Build System
|
|
87
|
+
|
|
88
|
+
- **tsup** for bundling (ESM only, Node 22+)
|
|
89
|
+
- Library: `dist/index.js` with types
|
|
90
|
+
- CLI: `dist/cli/index.js` (bundled with shebang)
|
|
91
|
+
- **postbuild** script fixes `node:sqlite` import (esbuild strips `node:` prefix)
|
|
92
|
+
|
|
93
|
+
## Important Patterns
|
|
94
|
+
|
|
95
|
+
### Memory Path Validation
|
|
96
|
+
Only `MEMORY.md` and `memory/*.md` files are indexed. The `validateMemoryPath()` method enforces this.
|
|
97
|
+
|
|
98
|
+
### Embedding Cache
|
|
99
|
+
Embeddings are cached by content hash in SQLite. Same content = same embedding, even across files.
|
|
100
|
+
|
|
101
|
+
### Hybrid Search
|
|
102
|
+
Default weights: 70% vector similarity, 30% BM25 text search. Configurable via `hybrid.vectorWeight` and `hybrid.textWeight`.
|
|
103
|
+
|
|
104
|
+
### Multi-Directory Search
|
|
105
|
+
The search command can query multiple directories:
|
|
106
|
+
```bash
|
|
107
|
+
minimem search "query" --dir ~/a --dir ~/b --global
|
|
108
|
+
```
|
|
109
|
+
Results are merged and sorted by score.
|
|
110
|
+
|
|
111
|
+
### Init Lifecycle
|
|
112
|
+
`minimem init` does three things in order:
|
|
113
|
+
1. **Scaffold** — creates `MEMORY.md`, `config.json`, `.gitignore`, `memory/` dir
|
|
114
|
+
2. **Materialize linked stores** — if this directory is registered in the store manifest with links, materializes them (clones remotes into `~/.cache/minimem/stores/`)
|
|
115
|
+
3. **Initial sync** — creates the SQLite DB and indexes existing memory files (non-fatal if no API key is set)
|
|
116
|
+
|
|
117
|
+
### Store Materialization
|
|
118
|
+
Stores are materialized eagerly in two places:
|
|
119
|
+
- **`init`** — materializes all linked stores after scaffolding
|
|
120
|
+
- **`store:add`** — materializes the store immediately after registration (clones remote if local path doesn't exist)
|
|
121
|
+
|
|
122
|
+
Materialization strategies:
|
|
123
|
+
- **Local** — store path exists on disk → use directly
|
|
124
|
+
- **Remote** — clone/fetch git remote into `~/.cache/minimem/stores/<name>/`
|
|
125
|
+
|
|
126
|
+
## Common Tasks
|
|
127
|
+
|
|
128
|
+
### Adding a new CLI command
|
|
129
|
+
|
|
130
|
+
1. Create `src/cli/commands/newcmd.ts`:
|
|
131
|
+
```typescript
|
|
132
|
+
export type NewCmdOptions = { dir?: string; global?: boolean; };
|
|
133
|
+
|
|
134
|
+
export async function newcmd(options: NewCmdOptions): Promise<void> {
|
|
135
|
+
const memoryDir = resolveMemoryDir({ dir: options.dir, global: options.global });
|
|
136
|
+
// ... implementation
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
2. Export from `src/cli/commands/index.ts`
|
|
141
|
+
|
|
142
|
+
3. Register in `src/cli/index.ts`:
|
|
143
|
+
```typescript
|
|
144
|
+
program
|
|
145
|
+
.command("newcmd")
|
|
146
|
+
.description("Description")
|
|
147
|
+
.option("-d, --dir <path>", "Memory directory")
|
|
148
|
+
.action(newcmd);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
4. Add tests in `src/cli/__tests__/commands.test.ts`
|
|
152
|
+
|
|
153
|
+
### Adding a new embedding provider
|
|
154
|
+
|
|
155
|
+
1. Add provider type to `EmbeddingProviderOptions` in `src/embeddings/embeddings.ts`
|
|
156
|
+
2. Implement in `createEmbeddingProvider()` switch statement
|
|
157
|
+
3. Add batch function in `src/embeddings/batch-{provider}.ts` if needed
|
|
158
|
+
4. Update `auto` provider detection logic
|
|
159
|
+
|
|
160
|
+
### Modifying the database schema
|
|
161
|
+
|
|
162
|
+
1. Update `createSchema()` in `src/db/schema.ts` (currently at SCHEMA_VERSION 4)
|
|
163
|
+
2. Consider migration strategy (currently: recreate on schema change)
|
|
164
|
+
3. Update relevant queries in `src/minimem.ts`
|
|
165
|
+
4. If adding knowledge-related columns, update `indexKnowledgeMetadata()` in `src/minimem.ts`
|
|
166
|
+
|
|
167
|
+
## Gotchas
|
|
168
|
+
|
|
169
|
+
1. **node:sqlite is experimental** - Requires Node 22+, shows warning on every run
|
|
170
|
+
2. **sqlite-vec may not load** - Falls back to FTS-only search if extension fails
|
|
171
|
+
3. **CLI bundle strips node: prefix** - postbuild script fixes this
|
|
172
|
+
4. **Commander.js is CJS** - Must be external in CLI bundle, not inlined
|
|
173
|
+
|
|
174
|
+
## Environment Variables
|
|
175
|
+
|
|
176
|
+
| Variable | Purpose |
|
|
177
|
+
|----------|---------|
|
|
178
|
+
| `OPENAI_API_KEY` | OpenAI embeddings |
|
|
179
|
+
| `GOOGLE_API_KEY` | Gemini embeddings |
|
|
180
|
+
| `GEMINI_API_KEY` | Alternative Gemini key |
|
|
181
|
+
| `MEMORY_DIR` | Default memory directory |
|
|
182
|
+
|
|
183
|
+
## File Structure Convention
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
project/
|
|
187
|
+
├── MEMORY.md # Main memory (required for init)
|
|
188
|
+
├── memory/ # Additional memories
|
|
189
|
+
│ ├── YYYY-MM-DD.md # Daily logs (from append)
|
|
190
|
+
│ └── *.md # Topic files
|
|
191
|
+
└── .minimem/
|
|
192
|
+
├── config.json # User config
|
|
193
|
+
├── index.db # SQLite with vectors
|
|
194
|
+
└── .gitignore # Ignores index.db
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## MCP Integration
|
|
198
|
+
|
|
199
|
+
The MCP server exposes 5 tools over stdio, compatible with Claude Desktop and Cursor:
|
|
200
|
+
|
|
201
|
+
| Tool | Purpose |
|
|
202
|
+
|------|---------|
|
|
203
|
+
| `memory_search` | General semantic search across all memory files |
|
|
204
|
+
| `memory_get_details` | Retrieve full content of a specific memory file |
|
|
205
|
+
| `knowledge_search` | Search knowledge notes with domain/entity/confidence/type filters |
|
|
206
|
+
| `knowledge_graph` | Traverse knowledge graph relationships from a note |
|
|
207
|
+
| `knowledge_path` | Find shortest path between two knowledge notes via graph links |
|
|
208
|
+
|
|
209
|
+
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.
|
|
210
|
+
|
|
211
|
+
Config location for Claude Desktop:
|
|
212
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
213
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
214
|
+
|
|
215
|
+
## Claude Code Plugin
|
|
216
|
+
|
|
217
|
+
The `claude-plugin/` directory contains a ready-to-use Claude Code plugin:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
claude-plugin/
|
|
221
|
+
├── .claude-plugin/
|
|
222
|
+
│ └── plugin.json # Plugin manifest
|
|
223
|
+
├── .mcp.json # MCP server definition (uses npx minimem mcp)
|
|
224
|
+
├── skills/
|
|
225
|
+
│ └── memory/
|
|
226
|
+
│ └── SKILL.md # Auto-invoked memory skill
|
|
227
|
+
└── commands/
|
|
228
|
+
├── remember.md # /minimem:remember command
|
|
229
|
+
└── recall.md # /minimem:recall command
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Testing the Plugin
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
claude --plugin-dir ./claude-plugin
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Plugin Commands
|
|
239
|
+
|
|
240
|
+
- `/minimem:remember <text>` - Store information in memory
|
|
241
|
+
- `/minimem:recall <query>` - Search for stored memories
|
|
242
|
+
|
|
243
|
+
## Knowledge Frontmatter Convention
|
|
244
|
+
|
|
245
|
+
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.
|
|
246
|
+
|
|
247
|
+
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.
|
|
248
|
+
|
|
249
|
+
### Supported fields
|
|
250
|
+
|
|
251
|
+
All fields are optional. If absent, the file is treated as a regular memory note.
|
|
252
|
+
|
|
253
|
+
```yaml
|
|
254
|
+
---
|
|
255
|
+
id: k-abc123 # Unique knowledge node ID
|
|
256
|
+
type: observation # observation | entity | domain-summary
|
|
257
|
+
domain: [database, devops] # Domain tags
|
|
258
|
+
entities: [prisma, postgres] # Referenced entities
|
|
259
|
+
confidence: 0.85 # Confidence score (0.0–1.0)
|
|
260
|
+
source: # Provenance metadata
|
|
261
|
+
origin: extracted # extracted | agent-authored
|
|
262
|
+
trajectories: [t-001, t-002] # Source trajectory IDs
|
|
263
|
+
agentId: agent-v1 # Authoring agent
|
|
264
|
+
links: # Graph edges to other knowledge nodes
|
|
265
|
+
- target: k-other
|
|
266
|
+
relation: related-to # related-to | depends-on | supports | etc.
|
|
267
|
+
layer: semantic # semantic | temporal | causal | entity
|
|
268
|
+
- target: k-dep
|
|
269
|
+
relation: depends-on
|
|
270
|
+
created: 2025-01-15T10:00:00Z
|
|
271
|
+
updated: 2025-01-15T12:00:00Z
|
|
272
|
+
supersedes: k-old # ID of note this replaces
|
|
273
|
+
tags: [migration, patterns]
|
|
274
|
+
---
|
|
275
|
+
# Note Title
|
|
276
|
+
|
|
277
|
+
Body content in Markdown.
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### How it works
|
|
281
|
+
|
|
282
|
+
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`.
|
|
283
|
+
|
|
284
|
+
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.
|
|
285
|
+
|
|
286
|
+
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.
|
|
287
|
+
|
|
288
|
+
4. **Re-indexing**: When a file changes, old `knowledge_links` for that file are deleted before new ones are inserted, keeping the graph consistent.
|
|
289
|
+
|
|
290
|
+
### Independence guarantee
|
|
291
|
+
|
|
292
|
+
- minimem defines its own types (`KnowledgeSource`, `KnowledgeLink`, `MemoryFrontmatter`) locally in `src/session.ts`
|
|
293
|
+
- Zero imports from cognitive-core or any external knowledge system
|
|
294
|
+
- All knowledge columns are nullable — regular memory files index without them
|
|
295
|
+
- The `knowledge_links` table only gets rows when frontmatter contains `links`
|
|
296
|
+
- All knowledge MCP tools (`knowledge_search`, `knowledge_graph`, `knowledge_path`) are additive alongside existing tools
|
|
297
|
+
|
|
298
|
+
### Database schema (v4)
|
|
299
|
+
|
|
300
|
+
Knowledge-related additions to the schema:
|
|
301
|
+
|
|
302
|
+
```sql
|
|
303
|
+
-- Added columns on chunks table (all nullable)
|
|
304
|
+
knowledge_type TEXT -- 'observation', 'entity', 'domain-summary'
|
|
305
|
+
knowledge_id TEXT -- Note ID from frontmatter
|
|
306
|
+
domains TEXT -- JSON array of domain strings
|
|
307
|
+
entities TEXT -- JSON array of entity strings
|
|
308
|
+
confidence REAL -- 0.0–1.0
|
|
309
|
+
|
|
310
|
+
-- New table for graph edges
|
|
311
|
+
CREATE TABLE knowledge_links (
|
|
312
|
+
from_id TEXT NOT NULL,
|
|
313
|
+
to_id TEXT NOT NULL,
|
|
314
|
+
relation TEXT NOT NULL,
|
|
315
|
+
layer TEXT, -- semantic, temporal, causal, entity
|
|
316
|
+
weight REAL DEFAULT 0.5,
|
|
317
|
+
source_path TEXT,
|
|
318
|
+
created_at INTEGER DEFAULT (unixepoch()),
|
|
319
|
+
PRIMARY KEY (from_id, to_id, relation)
|
|
320
|
+
);
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Code Style
|
|
324
|
+
|
|
325
|
+
- TypeScript with strict mode
|
|
326
|
+
- ESM modules (no CommonJS)
|
|
327
|
+
- Async/await for all I/O
|
|
328
|
+
- Types exported alongside implementations
|
|
329
|
+
- Tests use Node.js native test runner (not vitest) for integration tests
|