claude-eidetic 0.1.2 β 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +324 -333
- package/dist/config.d.ts +0 -25
- package/dist/config.js +0 -17
- package/dist/embedding/openai.js +1 -1
- package/dist/index.js +42 -42
- package/dist/memory/history.js +14 -14
- package/dist/memory/store.d.ts +2 -3
- package/dist/memory/store.js +1 -21
- package/dist/precompact/hook.d.ts +1 -1
- package/dist/precompact/hook.js +1 -59
- package/dist/precompact/memory-inject.d.ts +10 -0
- package/dist/precompact/memory-inject.js +86 -0
- package/dist/tool-schemas.d.ts +20 -5
- package/dist/tool-schemas.js +78 -55
- package/dist/tools.js +4 -4
- package/messages.yaml +50 -50
- package/package.json +86 -87
- package/dist/memory/llm.d.ts +0 -2
- package/dist/memory/llm.js +0 -56
- package/dist/memory/prompts.d.ts +0 -5
- package/dist/memory/prompts.js +0 -36
package/README.md
CHANGED
|
@@ -1,333 +1,324 @@
|
|
|
1
|
-
# claude-eidetic
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
[](https://github.com/eidetics/claude-eidetic/actions/workflows/ci.yml)
|
|
5
|
-
[](https://www.npmjs.com/package/claude-eidetic)
|
|
6
|
-
[](LICENSE)
|
|
7
|
-
|
|
8
|
-
Semantic code search, persistent memory, and session continuity for Claude Code. One plugin, not three.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## π Quick Start
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
claude plugin install eidetics/claude-eidetic
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
export OPENAI_API_KEY=sk-...
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
search_code("
|
|
40
|
-
search_code("
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
<details>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `PreToolUse` (
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
| `/
|
|
116
|
-
| `/
|
|
117
|
-
| `/
|
|
118
|
-
| `/
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
<
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
{
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
"
|
|
158
|
-
"
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
|
209
|
-
|
|
210
|
-
| `
|
|
211
|
-
| `
|
|
212
|
-
| `
|
|
213
|
-
| `
|
|
214
|
-
| `
|
|
215
|
-
| `
|
|
216
|
-
| `
|
|
217
|
-
| `
|
|
218
|
-
| `
|
|
219
|
-
| `
|
|
220
|
-
| `
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
|
245
|
-
|
|
246
|
-
| `
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
|
260
|
-
|
|
261
|
-
| `
|
|
262
|
-
| `
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
<
|
|
283
|
-
<img src="https://img.shields.io/badge/
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
<img src="https://img.shields.io/badge/
|
|
290
|
-
<img src="https://img.shields.io/badge/
|
|
291
|
-
<img src="https://img.shields.io/badge/
|
|
292
|
-
<img src="https://img.shields.io/badge/
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
## π Acknowledgements
|
|
326
|
-
|
|
327
|
-
Heavily inspired by [mem0](https://github.com/mem0ai/mem0), [claude-mem](https://github.com/thedotmack/claude-mem), and [claude-context](https://github.com/zilliztech/claude-context). Documentation retrieval powered by [context7](https://github.com/upstash/context7).
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
|
-
## π License
|
|
332
|
-
|
|
333
|
-
MIT
|
|
1
|
+
# claude-eidetic
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
[](https://github.com/eidetics/claude-eidetic/actions/workflows/ci.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/claude-eidetic)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
Semantic code search, persistent memory, and session continuity for Claude Code. One plugin, not three.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## π Quick Start
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
claude plugin install eidetics/claude-eidetic
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
export OPENAI_API_KEY=sk-... # for embeddings (default)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Index your codebase once, then search by meaning:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
index_codebase(path="/your/project")
|
|
26
|
+
search_code("how does authentication work")
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## β¨ Features
|
|
32
|
+
|
|
33
|
+
### π Semantic Code Search
|
|
34
|
+
|
|
35
|
+
**Find code by meaning, not keywords.** Search across your entire codebase with natural language, returning the most relevant functions and classes, not a list of files to read.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
search_code("how does the retry logic work")
|
|
39
|
+
search_code("authentication middleware", extensionFilter=[".ts"])
|
|
40
|
+
search_code(project="backend", query="auth flow")
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### ποΈ Architecture at a Glance
|
|
44
|
+
|
|
45
|
+
**Get every class, function, and method in one call.** `browse_structure` returns a condensed map of your codebase with signatures, grouped by file, replacing a Glob + Read cascade with a single tool call.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
browse_structure(path="/my/project", kind="class")
|
|
49
|
+
list_symbols(path="/my/project", nameFilter="handle")
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### π Documentation Cache
|
|
53
|
+
|
|
54
|
+
**Fetch docs once, search them forever.** Cache external documentation as searchable embeddings. Retrieve relevant passages instantly, far cheaper than re-fetching the same page each session.
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
index_document(content=..., library="react", topic="hooks", source="https://...")
|
|
58
|
+
search_documents("React useCallback dependencies", library="react")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### π§ Persistent Memory
|
|
62
|
+
|
|
63
|
+
**Claude remembers your preferences between sessions.** `add_memory` uses an LLM to extract structured facts from conversation text (coding style, architecture decisions, debugging insights) and deduplicates them semantically. Not a static config file you forget to update.
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
add_memory("Always use absolute imports, never relative")
|
|
67
|
+
search_memory("how does this team handle errors")
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### π Session Continuity
|
|
71
|
+
|
|
72
|
+
**Every session picks up where the last one left off.** When a session ends (or context compacts mid-session), Eidetic automatically writes a structured note capturing files changed, tasks, commands, and decisions. `/catchup` at the start of a new session reconstructs exactly where you were. No user action required.
|
|
73
|
+
|
|
74
|
+
### π» Invisible Optimizations
|
|
75
|
+
|
|
76
|
+
Eight hook events fire automatically, nudging toward cheaper tools, redirecting file reads for 15-20% token savings, tracking changed files, and saving session state on exit.
|
|
77
|
+
|
|
78
|
+
<details>
|
|
79
|
+
<summary><strong>Hook event details</strong></summary>
|
|
80
|
+
|
|
81
|
+
| Hook | Trigger | What it does |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `SessionStart` | Session opens | Validates config, injects last-session context |
|
|
84
|
+
| `UserPromptSubmit` | Every message | Nudges toward `search_code` over Grep/Explore for conceptual queries |
|
|
85
|
+
| `PreToolUse` (Read) | Before every Read | Blocks Read for text files, redirects to `read_file` for 15-20% token savings |
|
|
86
|
+
| `PreToolUse` (WebFetch / query-docs) | Before doc fetches | Suggests `search_documents` if library is cached (allows fetch either way) |
|
|
87
|
+
| `PostToolUse` (Write / Edit) | After every file write | Tracks changed files in a shadow git index |
|
|
88
|
+
| `Stop` | After Claude responds | Commits shadow index; triggers targeted re-index of changed files only |
|
|
89
|
+
| `PreCompact` | Before context compaction | Captures session state to notes before memory is lost |
|
|
90
|
+
| `SessionEnd` | Session closes | Writes session note (files, tasks, commands); extracts developer memories via LLM |
|
|
91
|
+
|
|
92
|
+
</details>
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## πΊοΈ When to Use What
|
|
97
|
+
|
|
98
|
+
| Need | Use | Notes |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| Find implementations by concept | `search_code` | Semantic, natural language queries |
|
|
101
|
+
| Exact string or regex match | Grep | Grep wins for exact matches |
|
|
102
|
+
| Find file by exact name | Glob | Glob wins for name patterns |
|
|
103
|
+
| Understand module structure | `browse_structure` | One call vs Glob + Read cascade |
|
|
104
|
+
| Read a specific known file | `read_file` | Cheaper than built-in Read for code files |
|
|
105
|
+
| Search cached documentation | `search_documents` | Far cheaper than re-fetching |
|
|
106
|
+
| Recall project conventions | `search_memory` | Global across all projects and sessions |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## π Skills Reference
|
|
111
|
+
|
|
112
|
+
| Skill | What it does |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `/search` | Guided semantic search with best-practice prompts |
|
|
115
|
+
| `/index` | Index or re-index a codebase with dry-run option |
|
|
116
|
+
| `/cache-docs` | Fetch and cache external documentation |
|
|
117
|
+
| `/catchup` | Search session notes and reconstruct where you left off |
|
|
118
|
+
| `/wrapup` | Extract decisions, rationale, open questions, and next actions from the conversation |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
<details>
|
|
123
|
+
<summary><strong>π₯ Why does this exist? (The Problem)</strong></summary>
|
|
124
|
+
|
|
125
|
+
Every new Claude Code session starts cold. You re-explain the architecture. You re-fetch the same docs. Claude reads the same files repeatedly, burning tokens just to get back to where you were.
|
|
126
|
+
|
|
127
|
+
| Task | Without Eidetic | With Eidetic |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| Find where auth errors are handled | Grep cascade, read 8 files, ~10,700 tokens | `search_code("auth error handling")` ~220 tokens |
|
|
130
|
+
| Resume after context compaction | Re-explain 20 min of context, ~2,000 tokens | `/catchup` ~200 tokens |
|
|
131
|
+
| Look up React hooks docs | Fetch docs page, ~5,000 tokens | `search_documents("React useEffect")` ~20 tokens |
|
|
132
|
+
| Read a 400-line file | Built-in Read with line numbers, ~900 tokens | `read_file(path)` ~740 tokens |
|
|
133
|
+
|
|
134
|
+
</details>
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## π¦ Installation
|
|
139
|
+
|
|
140
|
+
### Plugin (recommended)
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
claude plugin install eidetics/claude-eidetic
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
The plugin auto-starts the MCP server, installs skills, and configures hooks.
|
|
147
|
+
|
|
148
|
+
### npx (manual MCP config)
|
|
149
|
+
|
|
150
|
+
Add to your `.mcp.json`:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"mcpServers": {
|
|
155
|
+
"claude-eidetic": {
|
|
156
|
+
"command": "npx",
|
|
157
|
+
"args": ["-y", "claude-eidetic"],
|
|
158
|
+
"env": {
|
|
159
|
+
"OPENAI_API_KEY": "sk-..."
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Global install
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
npm install -g claude-eidetic
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### From source
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
git clone https://github.com/eidetics/claude-eidetic
|
|
176
|
+
cd claude-eidetic
|
|
177
|
+
npm install && npx tsc && npm start
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Requirements
|
|
181
|
+
|
|
182
|
+
- Node.js >= 20.0.0
|
|
183
|
+
- An API key (OpenAI for embeddings, or Ollama for free local embeddings)
|
|
184
|
+
- Docker (optional): Qdrant auto-provisions via Docker if not already running
|
|
185
|
+
- C/C++ build tools: required by tree-sitter native bindings (`node-gyp`)
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## βοΈ Configuration
|
|
190
|
+
|
|
191
|
+
All configuration is via environment variables. No config files.
|
|
192
|
+
|
|
193
|
+
### Using Ollama (free, local)
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
export EMBEDDING_PROVIDER=ollama
|
|
197
|
+
export MEMORY_LLM_PROVIDER=ollama
|
|
198
|
+
# No API keys needed
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
<details>
|
|
202
|
+
<summary><strong>Full configuration reference</strong></summary>
|
|
203
|
+
|
|
204
|
+
| Variable | Default | Description |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| `OPENAI_API_KEY` | _(required for openai)_ | OpenAI API key for embeddings |
|
|
207
|
+
| `EMBEDDING_PROVIDER` | `openai` | `openai`, `ollama`, or `local` |
|
|
208
|
+
| `EMBEDDING_MODEL` | `text-embedding-3-small` (openai) / `nomic-embed-text` (ollama) | Embedding model name |
|
|
209
|
+
| `EMBEDDING_BATCH_SIZE` | `100` | Batch size for embedding requests (1-2048) |
|
|
210
|
+
| `INDEXING_CONCURRENCY` | `8` | Parallel file indexing workers (1-32) |
|
|
211
|
+
| `OPENAI_BASE_URL` | _(none)_ | Custom OpenAI-compatible endpoint |
|
|
212
|
+
| `OLLAMA_BASE_URL` | `http://localhost:11434/v1` | Ollama server URL |
|
|
213
|
+
| `VECTORDB_PROVIDER` | `qdrant` | `qdrant` or `milvus` |
|
|
214
|
+
| `QDRANT_URL` | `http://localhost:6333` | Qdrant server URL |
|
|
215
|
+
| `QDRANT_API_KEY` | _(none)_ | Qdrant API key (for remote/cloud instances) |
|
|
216
|
+
| `MILVUS_ADDRESS` | `localhost:19530` | Milvus server address |
|
|
217
|
+
| `MILVUS_TOKEN` | _(none)_ | Milvus authentication token |
|
|
218
|
+
| `EIDETIC_DATA_DIR` | `~/.eidetic/` | Data root for snapshots, memory DB, registry |
|
|
219
|
+
| `CUSTOM_EXTENSIONS` | `[]` | JSON array of extra file extensions to index (e.g., `[".dart",".arb"]`) |
|
|
220
|
+
| `CUSTOM_IGNORE_PATTERNS` | `[]` | JSON array of glob patterns to exclude |
|
|
221
|
+
|
|
222
|
+
</details>
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
<details>
|
|
227
|
+
<summary><strong>π§ Tool Reference</strong></summary>
|
|
228
|
+
|
|
229
|
+
### π Code Search
|
|
230
|
+
|
|
231
|
+
| Tool | Description |
|
|
232
|
+
|---|---|
|
|
233
|
+
| `search_code` | Hybrid semantic search over indexed codebase. Returns compact results by default. |
|
|
234
|
+
| `index_codebase` | Index a directory. Supports `dryRun`, `force`, `customExtensions`, `customIgnorePatterns`. |
|
|
235
|
+
| `list_indexed` | List all indexed codebases with file/chunk counts and status. |
|
|
236
|
+
| `get_indexing_status` | Check indexing progress for a path or project. |
|
|
237
|
+
| `clear_index` | Remove the search index for a codebase. |
|
|
238
|
+
| `cleanup_vectors` | Remove orphaned vectors for deleted files. No re-embedding cost. |
|
|
239
|
+
| `browse_structure` | Condensed structural map: classes, functions, methods with signatures, grouped by file. |
|
|
240
|
+
| `list_symbols` | Compact symbol table with name/kind/file/line. Supports name, kind, and path filters. |
|
|
241
|
+
|
|
242
|
+
### π File Reading
|
|
243
|
+
|
|
244
|
+
| Tool | Description |
|
|
245
|
+
|---|---|
|
|
246
|
+
| `read_file` | Read file without line-number overhead. Cheaper than built-in Read for code files. |
|
|
247
|
+
|
|
248
|
+
### π Documentation Cache
|
|
249
|
+
|
|
250
|
+
| Tool | Description |
|
|
251
|
+
|---|---|
|
|
252
|
+
| `index_document` | Cache external documentation for semantic search. Supports TTL for staleness tracking. |
|
|
253
|
+
| `search_documents` | Search cached docs. Far cheaper than re-fetching the same page. |
|
|
254
|
+
|
|
255
|
+
### π§ Memory
|
|
256
|
+
|
|
257
|
+
| Tool | Description |
|
|
258
|
+
|---|---|
|
|
259
|
+
| `add_memory` | LLM-extracted facts from text. Auto-deduplicates. Seven categories. |
|
|
260
|
+
| `search_memory` | Semantic search over stored memories. Filterable by category. |
|
|
261
|
+
| `list_memories` | List all memories, optionally filtered by category. |
|
|
262
|
+
| `delete_memory` | Delete a specific memory by UUID. |
|
|
263
|
+
| `memory_history` | View change history for a memory (additions, updates, deletions). |
|
|
264
|
+
|
|
265
|
+
</details>
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## π Supported Languages
|
|
270
|
+
|
|
271
|
+
**AST-aware** (functions and classes chunked intact):
|
|
272
|
+
|
|
273
|
+
<p>
|
|
274
|
+
<img src="https://img.shields.io/badge/JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=black" alt="JavaScript"/>
|
|
275
|
+
<img src="https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript"/>
|
|
276
|
+
<img src="https://img.shields.io/badge/React_(JSX/TSX)-61DAFB?style=flat-square&logo=react&logoColor=black" alt="JSX/TSX"/>
|
|
277
|
+
<img src="https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python"/>
|
|
278
|
+
<img src="https://img.shields.io/badge/Go-00ADD8?style=flat-square&logo=go&logoColor=white" alt="Go"/>
|
|
279
|
+
<img src="https://img.shields.io/badge/Java-ED8B00?style=flat-square&logo=openjdk&logoColor=white" alt="Java"/>
|
|
280
|
+
<img src="https://img.shields.io/badge/Rust-000000?style=flat-square&logo=rust&logoColor=white" alt="Rust"/>
|
|
281
|
+
<img src="https://img.shields.io/badge/C-A8B9CC?style=flat-square&logo=c&logoColor=black" alt="C"/>
|
|
282
|
+
<img src="https://img.shields.io/badge/C++-00599C?style=flat-square&logo=cplusplus&logoColor=white" alt="C++"/>
|
|
283
|
+
<img src="https://img.shields.io/badge/C%23-512BD4?style=flat-square&logo=csharp&logoColor=white" alt="C#"/>
|
|
284
|
+
</p>
|
|
285
|
+
|
|
286
|
+
**Line-based fallback** (sliding window chunking for everything else):
|
|
287
|
+
|
|
288
|
+
<p>
|
|
289
|
+
<img src="https://img.shields.io/badge/Markdown-000000?style=flat-square&logo=markdown&logoColor=white" alt="Markdown"/>
|
|
290
|
+
<img src="https://img.shields.io/badge/YAML-CB171E?style=flat-square&logo=yaml&logoColor=white" alt="YAML"/>
|
|
291
|
+
<img src="https://img.shields.io/badge/JSON-000000?style=flat-square&logo=json&logoColor=white" alt="JSON"/>
|
|
292
|
+
<img src="https://img.shields.io/badge/Ruby-CC342D?style=flat-square&logo=ruby&logoColor=white" alt="Ruby"/>
|
|
293
|
+
<img src="https://img.shields.io/badge/PHP-777BB4?style=flat-square&logo=php&logoColor=white" alt="PHP"/>
|
|
294
|
+
<img src="https://img.shields.io/badge/Swift-F05138?style=flat-square&logo=swift&logoColor=white" alt="Swift"/>
|
|
295
|
+
<img src="https://img.shields.io/badge/Kotlin-7F52FF?style=flat-square&logo=kotlin&logoColor=white" alt="Kotlin"/>
|
|
296
|
+
<img src="https://img.shields.io/badge/and_more...-30363d?style=flat-square" alt="and more"/>
|
|
297
|
+
</p>
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## π οΈ Development
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
npm install && npx tsc # install and build
|
|
305
|
+
npm run dev # watch mode (tsx)
|
|
306
|
+
npm test # unit tests (no external services needed)
|
|
307
|
+
npm run test:integration # requires Qdrant at localhost:6333 + OPENAI_API_KEY
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Commit format:** `type(scope): description`
|
|
311
|
+
Types: `feat`, `fix`, `docs`, `refactor`, `perf`, `chore`, `test`
|
|
312
|
+
Scopes: `embedding`, `vectordb`, `splitter`, `indexer`, `mcp`, `infra`, `config`
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## π Acknowledgements
|
|
317
|
+
|
|
318
|
+
Heavily inspired by [mem0](https://github.com/mem0ai/mem0), [claude-mem](https://github.com/thedotmack/claude-mem), and [claude-context](https://github.com/zilliztech/claude-context). Documentation retrieval powered by [context7](https://github.com/upstash/context7).
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## π License
|
|
323
|
+
|
|
324
|
+
MIT
|