@hyperlynq/synaptic 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/README.md +427 -0
- package/build/scripts/rebuild-index.d.ts +5 -0
- package/build/scripts/rebuild-index.js +33 -0
- package/build/src/cli/init.d.ts +13 -0
- package/build/src/cli/init.js +222 -0
- package/build/src/cli/init.js.map +1 -0
- package/build/src/cli/pre-commit.d.ts +6 -0
- package/build/src/cli/pre-commit.js +159 -0
- package/build/src/cli/pre-commit.js.map +1 -0
- package/build/src/cli.d.ts +2 -0
- package/build/src/cli.js +36 -0
- package/build/src/cli.js.map +1 -0
- package/build/src/hooks/pre-compact.d.ts +6 -0
- package/build/src/hooks/pre-compact.js +64 -0
- package/build/src/hooks/pre-compact.js.map +1 -0
- package/build/src/hooks/session-start.d.ts +13 -0
- package/build/src/hooks/session-start.js +277 -0
- package/build/src/hooks/session-start.js.map +1 -0
- package/build/src/hooks/stop.d.ts +7 -0
- package/build/src/hooks/stop.js +248 -0
- package/build/src/hooks/stop.js.map +1 -0
- package/build/src/index.d.ts +1 -0
- package/build/src/index.js +8 -0
- package/build/src/index.js.map +1 -0
- package/build/src/server.d.ts +6 -0
- package/build/src/server.js +133 -0
- package/build/src/server.js.map +1 -0
- package/build/src/storage/embedder.d.ts +27 -0
- package/build/src/storage/embedder.js +126 -0
- package/build/src/storage/embedder.js.map +1 -0
- package/build/src/storage/git.d.ts +20 -0
- package/build/src/storage/git.js +98 -0
- package/build/src/storage/git.js.map +1 -0
- package/build/src/storage/maintenance.d.ts +9 -0
- package/build/src/storage/maintenance.js +46 -0
- package/build/src/storage/maintenance.js.map +1 -0
- package/build/src/storage/markdown.d.ts +21 -0
- package/build/src/storage/markdown.js +79 -0
- package/build/src/storage/markdown.js.map +1 -0
- package/build/src/storage/paths.d.ts +6 -0
- package/build/src/storage/paths.js +17 -0
- package/build/src/storage/paths.js.map +1 -0
- package/build/src/storage/project.d.ts +2 -0
- package/build/src/storage/project.js +35 -0
- package/build/src/storage/project.js.map +1 -0
- package/build/src/storage/session.d.ts +1 -0
- package/build/src/storage/session.js +17 -0
- package/build/src/storage/session.js.map +1 -0
- package/build/src/storage/sqlite.d.ts +102 -0
- package/build/src/storage/sqlite.js +830 -0
- package/build/src/storage/sqlite.js.map +1 -0
- package/build/src/storage/watcher.d.ts +22 -0
- package/build/src/storage/watcher.js +126 -0
- package/build/src/storage/watcher.js.map +1 -0
- package/build/src/tools/context-archive.d.ts +11 -0
- package/build/src/tools/context-archive.js +13 -0
- package/build/src/tools/context-archive.js.map +1 -0
- package/build/src/tools/context-chain.d.ts +12 -0
- package/build/src/tools/context-chain.js +26 -0
- package/build/src/tools/context-chain.js.map +1 -0
- package/build/src/tools/context-cochanges.d.ts +20 -0
- package/build/src/tools/context-cochanges.js +25 -0
- package/build/src/tools/context-cochanges.js.map +1 -0
- package/build/src/tools/context-delete-rule.d.ts +11 -0
- package/build/src/tools/context-delete-rule.js +12 -0
- package/build/src/tools/context-delete-rule.js.map +1 -0
- package/build/src/tools/context-dna.d.ts +18 -0
- package/build/src/tools/context-dna.js +197 -0
- package/build/src/tools/context-dna.js.map +1 -0
- package/build/src/tools/context-git-index.d.ts +17 -0
- package/build/src/tools/context-git-index.js +59 -0
- package/build/src/tools/context-git-index.js.map +1 -0
- package/build/src/tools/context-list-rules.d.ts +8 -0
- package/build/src/tools/context-list-rules.js +11 -0
- package/build/src/tools/context-list-rules.js.map +1 -0
- package/build/src/tools/context-list.d.ts +26 -0
- package/build/src/tools/context-list.js +42 -0
- package/build/src/tools/context-list.js.map +1 -0
- package/build/src/tools/context-resolve-pattern.d.ts +11 -0
- package/build/src/tools/context-resolve-pattern.js +9 -0
- package/build/src/tools/context-resolve-pattern.js.map +1 -0
- package/build/src/tools/context-save-rule.d.ts +14 -0
- package/build/src/tools/context-save-rule.js +15 -0
- package/build/src/tools/context-save-rule.js.map +1 -0
- package/build/src/tools/context-save.d.ts +26 -0
- package/build/src/tools/context-save.js +68 -0
- package/build/src/tools/context-save.js.map +1 -0
- package/build/src/tools/context-search.d.ts +31 -0
- package/build/src/tools/context-search.js +99 -0
- package/build/src/tools/context-search.js.map +1 -0
- package/build/src/tools/context-session.d.ts +13 -0
- package/build/src/tools/context-session.js +29 -0
- package/build/src/tools/context-session.js.map +1 -0
- package/build/src/tools/context-status.d.ts +13 -0
- package/build/src/tools/context-status.js +15 -0
- package/build/src/tools/context-status.js.map +1 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) 2026 HYPERLYNQ. All rights reserved.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted to any person to use this software for personal
|
|
4
|
+
or internal purposes, subject to the following conditions:
|
|
5
|
+
|
|
6
|
+
1. You MAY use this software as-is for your own projects.
|
|
7
|
+
2. You may NOT copy, modify, merge, publish, distribute, sublicense, or sell
|
|
8
|
+
copies of the source code or substantial portions of it.
|
|
9
|
+
3. You may NOT create derivative works based on this software.
|
|
10
|
+
4. This copyright notice and permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
███████╗██╗ ██╗███╗ ██╗ █████╗ ██████╗ ████████╗██╗ ██████╗
|
|
5
|
+
██╔════╝╚██╗ ██╔╝████╗ ██║██╔══██╗██╔══██╗╚══██╔══╝██║██╔════╝
|
|
6
|
+
███████╗ ╚████╔╝ ██╔██╗ ██║███████║██████╔╝ ██║ ██║██║
|
|
7
|
+
╚════██║ ╚██╔╝ ██║╚██╗██║██╔══██║██╔═══╝ ██║ ██║██║
|
|
8
|
+
███████║ ██║ ██║ ╚████║██║ ██║██║ ██║ ██║╚██████╗
|
|
9
|
+
╚══════╝ ╚═╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
### Persistent memory for Claude Code
|
|
13
|
+
|
|
14
|
+
**Claude forgets everything between sessions. Synaptic fixes that.**
|
|
15
|
+
|
|
16
|
+
[](https://github.com/HYPERLYNQ/synaptic)
|
|
17
|
+
[](https://github.com/HYPERLYNQ/synaptic)
|
|
18
|
+
[](https://nodejs.org)
|
|
19
|
+
[](LICENSE)
|
|
20
|
+
|
|
21
|
+
[Getting Started](#getting-started) · [Features](#features) · [How It Works](#how-it-works) · [Enterprise](#enterprise)
|
|
22
|
+
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<br>
|
|
26
|
+
|
|
27
|
+
Every time you start a new Claude Code session, Claude doesn't remember what you worked on yesterday, what decisions you made, or what bugs you hit.
|
|
28
|
+
|
|
29
|
+
Synaptic gives Claude a **persistent memory** that carries across sessions. Decisions, insights, bug fixes, project patterns — saved locally and surfaced automatically when Claude starts up.
|
|
30
|
+
|
|
31
|
+
No cloud. No API keys. Everything stays on your machine.
|
|
32
|
+
|
|
33
|
+
<br>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
<br>
|
|
38
|
+
|
|
39
|
+
## Why Not Just Use Claude's Built-In Memory?
|
|
40
|
+
|
|
41
|
+
Claude Code already has a few memory features. Here's how Synaptic is different.
|
|
42
|
+
|
|
43
|
+
<br>
|
|
44
|
+
|
|
45
|
+
### CLAUDE.md
|
|
46
|
+
|
|
47
|
+
`CLAUDE.md` is a file you write by hand with project instructions. Claude reads it at the start of each session. It's great for static rules like "use tabs" or "run pytest."
|
|
48
|
+
|
|
49
|
+
But it doesn't capture anything that happens *during* a session — the bugs you found, the decisions you made, the dead ends you explored. When you close the terminal, all of that is gone.
|
|
50
|
+
|
|
51
|
+
<br>
|
|
52
|
+
|
|
53
|
+
### Auto-Compacting
|
|
54
|
+
|
|
55
|
+
When Claude runs out of context window, it compresses the conversation to make room. This loses detail and nuance.
|
|
56
|
+
|
|
57
|
+
Synaptic's **PreCompact hook** runs *before* compression happens. It saves the important parts to permanent storage. After compacting, Claude still has access to what mattered.
|
|
58
|
+
|
|
59
|
+
<br>
|
|
60
|
+
|
|
61
|
+
### Auto-Memory
|
|
62
|
+
|
|
63
|
+
Claude's auto-memory (`~/.claude/memory/`) saves short notes to files. But there's no real search, no semantic understanding, no awareness of which notes are related, and no way for old notes to expire naturally. It's a flat list that grows forever.
|
|
64
|
+
|
|
65
|
+
<br>
|
|
66
|
+
|
|
67
|
+
### The Comparison
|
|
68
|
+
|
|
69
|
+
| | CLAUDE.md | Auto Memory | **Synaptic** |
|
|
70
|
+
|:---|:---|:---|:---|
|
|
71
|
+
| What it stores | Static instructions | Short notes | Typed, tagged, tiered entries |
|
|
72
|
+
| Search | None | Filename only | Keyword + semantic similarity |
|
|
73
|
+
| Cross-session | Only what you manually write | Basic notes | Handoffs, chains, failure history |
|
|
74
|
+
| Git awareness | None | None | Commits, co-changes, codebase DNA |
|
|
75
|
+
| Memory cleanup | Manual | Grows forever | Auto-decay by tier |
|
|
76
|
+
| Pattern detection | None | None | Tracks recurring failures |
|
|
77
|
+
| Auto-capture | None | None | Detects declarations, preferences, corrections |
|
|
78
|
+
| Predictive context | None | None | Surfaces relevant history at session start |
|
|
79
|
+
|
|
80
|
+
<br>
|
|
81
|
+
|
|
82
|
+
**Synaptic doesn't replace `CLAUDE.md`** — it complements it. Use `CLAUDE.md` for static project instructions. Use Synaptic for the living, evolving knowledge that builds up as you work.
|
|
83
|
+
|
|
84
|
+
<br>
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
<br>
|
|
89
|
+
|
|
90
|
+
## Getting Started
|
|
91
|
+
|
|
92
|
+
### What You Need
|
|
93
|
+
|
|
94
|
+
- **Node.js 22+** — uses Node's built-in SQLite
|
|
95
|
+
- **Claude Code** — Anthropic's CLI tool
|
|
96
|
+
|
|
97
|
+
<br>
|
|
98
|
+
|
|
99
|
+
### Install
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npx @hyperlynq/synaptic init
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
That's it. The `init` command auto-detects your environment (Linux, macOS, WSL) and configures everything:
|
|
106
|
+
|
|
107
|
+
- **MCP server** — so Claude can use Synaptic's tools
|
|
108
|
+
- **3 lifecycle hooks** — auto-load on start, preserve on compress, save on stop
|
|
109
|
+
- **Git pre-commit hook** — captures test/lint failures into memory
|
|
110
|
+
- **Project directory** — `.synaptic/` for local config
|
|
111
|
+
|
|
112
|
+
> Skip git hook and project dir with `npx synaptic init --global`
|
|
113
|
+
|
|
114
|
+
<br>
|
|
115
|
+
|
|
116
|
+
<details>
|
|
117
|
+
<summary><strong>Install from source</strong></summary>
|
|
118
|
+
|
|
119
|
+
<br>
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
git clone https://github.com/HYPERLYNQ/synaptic.git
|
|
123
|
+
cd synaptic
|
|
124
|
+
npm install
|
|
125
|
+
npm run build
|
|
126
|
+
npx synaptic init
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
</details>
|
|
130
|
+
|
|
131
|
+
<br>
|
|
132
|
+
|
|
133
|
+
<details>
|
|
134
|
+
<summary><strong>Manual MCP setup</strong></summary>
|
|
135
|
+
|
|
136
|
+
<br>
|
|
137
|
+
|
|
138
|
+
Add to `~/.claude/settings.json`:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"mcpServers": {
|
|
143
|
+
"synaptic": {
|
|
144
|
+
"command": "node",
|
|
145
|
+
"args": ["--no-warnings", "/path/to/synaptic/build/src/index.js"],
|
|
146
|
+
"type": "stdio"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
</details>
|
|
153
|
+
|
|
154
|
+
<br>
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
<br>
|
|
159
|
+
|
|
160
|
+
## Features
|
|
161
|
+
|
|
162
|
+
### 14 Tools for Claude
|
|
163
|
+
|
|
164
|
+
<table>
|
|
165
|
+
<tr>
|
|
166
|
+
<td width="50%">
|
|
167
|
+
|
|
168
|
+
**Memory**
|
|
169
|
+
| Tool | Purpose |
|
|
170
|
+
|:-----|:--------|
|
|
171
|
+
| `context_save` | Save decisions, bugs, insights |
|
|
172
|
+
| `context_search` | Keyword + semantic search |
|
|
173
|
+
| `context_list` | Browse by date or type |
|
|
174
|
+
| `context_status` | Storage stats |
|
|
175
|
+
|
|
176
|
+
</td>
|
|
177
|
+
<td width="50%">
|
|
178
|
+
|
|
179
|
+
**Organization**
|
|
180
|
+
| Tool | Purpose |
|
|
181
|
+
|:-----|:--------|
|
|
182
|
+
| `context_archive` | Hide old entries |
|
|
183
|
+
| `context_save_rule` | Create permanent rules |
|
|
184
|
+
| `context_delete_rule` | Remove rules |
|
|
185
|
+
| `context_list_rules` | List active rules |
|
|
186
|
+
|
|
187
|
+
</td>
|
|
188
|
+
</tr>
|
|
189
|
+
<tr>
|
|
190
|
+
<td>
|
|
191
|
+
|
|
192
|
+
**Git Intelligence**
|
|
193
|
+
| Tool | Purpose |
|
|
194
|
+
|:-----|:--------|
|
|
195
|
+
| `context_git_index` | Index commits into memory |
|
|
196
|
+
| `context_cochanges` | Files that change together |
|
|
197
|
+
| `context_dna` | Profile your codebase |
|
|
198
|
+
|
|
199
|
+
</td>
|
|
200
|
+
<td>
|
|
201
|
+
|
|
202
|
+
**Threads & Sessions**
|
|
203
|
+
| Tool | Purpose |
|
|
204
|
+
|:-----|:--------|
|
|
205
|
+
| `context_session` | View session history |
|
|
206
|
+
| `context_chain` | Trace decision threads |
|
|
207
|
+
| `context_resolve_pattern` | Dismiss recurring alerts |
|
|
208
|
+
|
|
209
|
+
</td>
|
|
210
|
+
</tr>
|
|
211
|
+
</table>
|
|
212
|
+
|
|
213
|
+
<br>
|
|
214
|
+
|
|
215
|
+
### Smart Search
|
|
216
|
+
|
|
217
|
+
Every entry gets a 384-dimensional embedding generated **locally** using a Hugging Face model.
|
|
218
|
+
|
|
219
|
+
Search combines keyword matching with semantic similarity — searching for "auth problems" also finds entries about "login failures" and "JWT expiry," even if those exact words were never used.
|
|
220
|
+
|
|
221
|
+
Nothing is sent to the internet. Ever.
|
|
222
|
+
|
|
223
|
+
<br>
|
|
224
|
+
|
|
225
|
+
### Codebase DNA
|
|
226
|
+
|
|
227
|
+
One command analyzes your git history and builds a profile:
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
Codebase DNA (myapp, 100 commits analyzed):
|
|
231
|
+
Hotspots: sqlite.ts (45%), session-start.ts (30%)
|
|
232
|
+
Layers: tools/ (35%), storage/ (30%), hooks/ (25%), cli/ (10%)
|
|
233
|
+
Patterns: 60% feat, 25% fix, 15% chore. Avg 3.2 files/commit.
|
|
234
|
+
Clusters: [sqlite.ts + embedder.ts + server.ts]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
- **Hotspots** — Your most-changed files
|
|
238
|
+
- **Layers** — Where work concentrates
|
|
239
|
+
- **Patterns** — Your commit habits
|
|
240
|
+
- **Clusters** — Files that always change together
|
|
241
|
+
|
|
242
|
+
Saved permanently so Claude can reference it during architectural decisions.
|
|
243
|
+
|
|
244
|
+
<br>
|
|
245
|
+
|
|
246
|
+
### Pre-Commit Guardian
|
|
247
|
+
|
|
248
|
+
Runs your lint, typecheck, and test scripts before each commit.
|
|
249
|
+
|
|
250
|
+
**When something fails** — the error is saved with file tags and a chain ID. Claude knows about it next session.
|
|
251
|
+
|
|
252
|
+
**When everything passes** — if those files recently failed, a resolution entry is saved. Over time, this builds traceable **failure → fix** narratives.
|
|
253
|
+
|
|
254
|
+
<br>
|
|
255
|
+
|
|
256
|
+
### Decision Chains
|
|
257
|
+
|
|
258
|
+
Track how decisions evolve:
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
Decision: "Use SQLite for persistence"
|
|
262
|
+
↓
|
|
263
|
+
Issue: "SQLite WAL mode conflicts with WSL file locking"
|
|
264
|
+
↓
|
|
265
|
+
Decision: "Switch to journal_mode=DELETE for WSL compatibility"
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Every entry in a chain shares a tag. Pull up the full story anytime with `context_chain`.
|
|
269
|
+
|
|
270
|
+
<br>
|
|
271
|
+
|
|
272
|
+
### Rules
|
|
273
|
+
|
|
274
|
+
Permanent instructions injected every session. Tell Claude how to behave, forever:
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
context_save_rule(
|
|
278
|
+
label: "preserve-bug-fixes",
|
|
279
|
+
content: "Bug fixes and debugging techniques should be saved
|
|
280
|
+
as longterm entries. They have cross-project value and
|
|
281
|
+
should never auto-decay."
|
|
282
|
+
)
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
More examples: `"never auto-commit"` · `"use bun instead of npm"` · `"always write tests first"`
|
|
286
|
+
|
|
287
|
+
<br>
|
|
288
|
+
|
|
289
|
+
### Memory Tiers
|
|
290
|
+
|
|
291
|
+
Not everything lasts forever. Synaptic manages it for you:
|
|
292
|
+
|
|
293
|
+
| Tier | Lifespan | Best For |
|
|
294
|
+
|:-----|:---------|:---------|
|
|
295
|
+
| **Ephemeral** | ~4 days | Progress updates, handoffs |
|
|
296
|
+
| **Working** | ~14 days | Decisions, bugs, insights |
|
|
297
|
+
| **Longterm** | Forever | Rules, references, conventions |
|
|
298
|
+
|
|
299
|
+
Entries that get searched often survive longer automatically.
|
|
300
|
+
|
|
301
|
+
<br>
|
|
302
|
+
|
|
303
|
+
### Proactive Intelligence
|
|
304
|
+
|
|
305
|
+
Synaptic doesn't just store what Claude explicitly saves — it **captures what Claude misses**.
|
|
306
|
+
|
|
307
|
+
**Intent Classification** — The stop hook scans each session for declarations, preferences, identities, and frustrations using semantic similarity against intent templates. If you say "X is my project" or "I prefer bun over npm," Synaptic auto-captures it as a longterm reference without you asking.
|
|
308
|
+
|
|
309
|
+
**Predicted Focus** — At session start, Synaptic analyzes your current git branch, uncommitted files, and last session's handoff to predict what you're about to work on. It surfaces the 2-3 most relevant past entries automatically.
|
|
310
|
+
|
|
311
|
+
**Consolidation Engine** — Duplicate entries about the same topic are automatically merged during maintenance. The highest-access entry survives with merged tags; the rest are archived. Keeps your memory clean without losing information.
|
|
312
|
+
|
|
313
|
+
**Handoff Access Bumps** — Entries important enough to appear in session handoffs get their access counts incremented, making them survive longer in the decay system. Important memories are self-reinforcing.
|
|
314
|
+
|
|
315
|
+
<br>
|
|
316
|
+
|
|
317
|
+
### Watch Mode
|
|
318
|
+
|
|
319
|
+
A background watcher observes your `.git/` directory for branch switches and new commits. Changes are auto-indexed after a 2-second debounce. Starts and stops with the MCP server — nothing extra to manage.
|
|
320
|
+
|
|
321
|
+
<br>
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
<br>
|
|
326
|
+
|
|
327
|
+
## How It Works
|
|
328
|
+
|
|
329
|
+
Synaptic runs as an **MCP server** — the standard way to extend Claude with new capabilities.
|
|
330
|
+
|
|
331
|
+
Three hooks handle the lifecycle automatically:
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
┌─────────────────────────────────────────────────────┐
|
|
335
|
+
│ │
|
|
336
|
+
│ START ──→ Injects rules, predicted focus, │
|
|
337
|
+
│ recent context, last handoff │
|
|
338
|
+
│ │
|
|
339
|
+
│ WORK ───→ Claude saves and searches context │
|
|
340
|
+
│ Git watcher auto-indexes in background │
|
|
341
|
+
│ │
|
|
342
|
+
│ COMPRESS → Preserves important context before │
|
|
343
|
+
│ conversation is compressed │
|
|
344
|
+
│ │
|
|
345
|
+
│ END ────→ Saves handoff, detects corrections, │
|
|
346
|
+
│ auto-captures declarations/preferences │
|
|
347
|
+
│ │
|
|
348
|
+
└─────────────────────────────────────────────────────┘
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
Data is stored in SQLite with full-text search and vector similarity search. All local.
|
|
352
|
+
|
|
353
|
+
<br>
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
<br>
|
|
358
|
+
|
|
359
|
+
## Enterprise
|
|
360
|
+
|
|
361
|
+
<table>
|
|
362
|
+
<tr>
|
|
363
|
+
<td width="50%">
|
|
364
|
+
|
|
365
|
+
### Personal
|
|
366
|
+
**Free — always**
|
|
367
|
+
|
|
368
|
+
- All 14 tools
|
|
369
|
+
- Unlimited entries
|
|
370
|
+
- Local-only storage
|
|
371
|
+
- Full search
|
|
372
|
+
- Git intelligence
|
|
373
|
+
- Pre-commit guardian
|
|
374
|
+
|
|
375
|
+
</td>
|
|
376
|
+
<td width="50%">
|
|
377
|
+
|
|
378
|
+
### Team & Enterprise
|
|
379
|
+
**Coming soon**
|
|
380
|
+
|
|
381
|
+
- Shared context across team members
|
|
382
|
+
- Cloud sync between machines
|
|
383
|
+
- Team rules and conventions
|
|
384
|
+
- Analytics dashboard
|
|
385
|
+
- Priority support
|
|
386
|
+
- Custom integrations
|
|
387
|
+
|
|
388
|
+
</td>
|
|
389
|
+
</tr>
|
|
390
|
+
</table>
|
|
391
|
+
|
|
392
|
+
<br>
|
|
393
|
+
|
|
394
|
+
Interested in Synaptic for your team? **[Get in touch →](mailto:hyperlynq@outlook.com)**
|
|
395
|
+
|
|
396
|
+
<br>
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
<br>
|
|
401
|
+
|
|
402
|
+
## Development
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
npm run build # Compile TypeScript
|
|
406
|
+
npm run smoke-test # Build + run all 147 tests
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
<br>
|
|
410
|
+
|
|
411
|
+
## License
|
|
412
|
+
|
|
413
|
+
Copyright (c) 2026 HYPERLYNQ. All rights reserved.
|
|
414
|
+
|
|
415
|
+
Synaptic is **source-available**. You can use it freely for personal and internal purposes. You may not copy, modify, redistribute, or create derivative works from the source code. See [LICENSE](LICENSE) for details.
|
|
416
|
+
|
|
417
|
+
For commercial licensing, contact **[hyperlynq@outlook.com](mailto:hyperlynq@outlook.com)**.
|
|
418
|
+
|
|
419
|
+
<br>
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
<div align="center">
|
|
424
|
+
|
|
425
|
+
**Built by [HYPERLYNQ](https://github.com/HYPERLYNQ)**
|
|
426
|
+
|
|
427
|
+
</div>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI script to rebuild the SQLite FTS + vector index from markdown source files.
|
|
3
|
+
* Usage: node build/scripts/rebuild-index.js
|
|
4
|
+
*/
|
|
5
|
+
import { ContextIndex } from "../src/storage/sqlite.js";
|
|
6
|
+
import { listMarkdownFiles, parseMarkdownFile, } from "../src/storage/markdown.js";
|
|
7
|
+
import { ensureDirs } from "../src/storage/paths.js";
|
|
8
|
+
import { Embedder } from "../src/storage/embedder.js";
|
|
9
|
+
async function main() {
|
|
10
|
+
ensureDirs();
|
|
11
|
+
const index = new ContextIndex();
|
|
12
|
+
const embedder = new Embedder();
|
|
13
|
+
console.log("Rebuilding SQLite index from markdown files...");
|
|
14
|
+
// Clear existing index
|
|
15
|
+
index.clearAll();
|
|
16
|
+
const files = listMarkdownFiles();
|
|
17
|
+
console.log(`Found ${files.length} markdown files.`);
|
|
18
|
+
let totalEntries = 0;
|
|
19
|
+
for (const file of files) {
|
|
20
|
+
const entries = parseMarkdownFile(file);
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const rowid = index.insert(entry);
|
|
23
|
+
const embedding = await embedder.embed(entry.content);
|
|
24
|
+
index.insertVec(rowid, embedding);
|
|
25
|
+
}
|
|
26
|
+
totalEntries += entries.length;
|
|
27
|
+
console.log(` ${file}: ${entries.length} entries`);
|
|
28
|
+
}
|
|
29
|
+
console.log(`Done. Indexed ${totalEntries} entries with vectors.`);
|
|
30
|
+
index.close();
|
|
31
|
+
}
|
|
32
|
+
main();
|
|
33
|
+
//# sourceMappingURL=rebuild-index.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init command: Detects environment, configures MCP server, hooks, git hook,
|
|
3
|
+
* and project directory for synaptic.
|
|
4
|
+
*/
|
|
5
|
+
export interface Environment {
|
|
6
|
+
isWSL: boolean;
|
|
7
|
+
settingsPath: string;
|
|
8
|
+
buildDir: string;
|
|
9
|
+
nodeCommand: string;
|
|
10
|
+
nodeArgs: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function detectEnvironment(): Environment;
|
|
13
|
+
export declare function initCommand(args: string[]): Promise<void>;
|