memgrid 0.5.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/CHANGELOG.md +80 -0
- package/LICENSE +21 -0
- package/README.md +251 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/learn/index.d.ts +44 -0
- package/dist/learn/index.d.ts.map +1 -0
- package/dist/learn/index.js +234 -0
- package/dist/learn/index.js.map +1 -0
- package/dist/memgrid.d.ts +50 -0
- package/dist/memgrid.d.ts.map +1 -0
- package/dist/memgrid.js +175 -0
- package/dist/memgrid.js.map +1 -0
- package/dist/retrieve/index.d.ts +27 -0
- package/dist/retrieve/index.d.ts.map +1 -0
- package/dist/retrieve/index.js +209 -0
- package/dist/retrieve/index.js.map +1 -0
- package/dist/retrieve/semantic.d.ts +67 -0
- package/dist/retrieve/semantic.d.ts.map +1 -0
- package/dist/retrieve/semantic.js +240 -0
- package/dist/retrieve/semantic.js.map +1 -0
- package/dist/scanner/composite.d.ts +27 -0
- package/dist/scanner/composite.d.ts.map +1 -0
- package/dist/scanner/composite.js +58 -0
- package/dist/scanner/composite.js.map +1 -0
- package/dist/scanner/config.d.ts +15 -0
- package/dist/scanner/config.d.ts.map +1 -0
- package/dist/scanner/config.js +167 -0
- package/dist/scanner/config.js.map +1 -0
- package/dist/scanner/golang.d.ts +19 -0
- package/dist/scanner/golang.d.ts.map +1 -0
- package/dist/scanner/golang.js +190 -0
- package/dist/scanner/golang.js.map +1 -0
- package/dist/scanner/index.d.ts +11 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +10 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/javascript.d.ts +20 -0
- package/dist/scanner/javascript.d.ts.map +1 -0
- package/dist/scanner/javascript.js +167 -0
- package/dist/scanner/javascript.js.map +1 -0
- package/dist/scanner/markdown.d.ts +17 -0
- package/dist/scanner/markdown.d.ts.map +1 -0
- package/dist/scanner/markdown.js +106 -0
- package/dist/scanner/markdown.js.map +1 -0
- package/dist/scanner/python.d.ts +19 -0
- package/dist/scanner/python.d.ts.map +1 -0
- package/dist/scanner/python.js +177 -0
- package/dist/scanner/python.js.map +1 -0
- package/dist/scanner/rules.d.ts +15 -0
- package/dist/scanner/rules.d.ts.map +1 -0
- package/dist/scanner/rules.js +86 -0
- package/dist/scanner/rules.js.map +1 -0
- package/dist/scanner/rust.d.ts +18 -0
- package/dist/scanner/rust.d.ts.map +1 -0
- package/dist/scanner/rust.js +178 -0
- package/dist/scanner/rust.js.map +1 -0
- package/dist/scanner/scanner.d.ts +33 -0
- package/dist/scanner/scanner.d.ts.map +1 -0
- package/dist/scanner/scanner.js +2 -0
- package/dist/scanner/scanner.js.map +1 -0
- package/dist/scanner/typescript.d.ts +28 -0
- package/dist/scanner/typescript.d.ts.map +1 -0
- package/dist/scanner/typescript.js +522 -0
- package/dist/scanner/typescript.js.map +1 -0
- package/dist/serve/cli.d.ts +3 -0
- package/dist/serve/cli.d.ts.map +1 -0
- package/dist/serve/cli.js +145 -0
- package/dist/serve/cli.js.map +1 -0
- package/dist/serve/mcp-server.d.ts +11 -0
- package/dist/serve/mcp-server.d.ts.map +1 -0
- package/dist/serve/mcp-server.js +276 -0
- package/dist/serve/mcp-server.js.map +1 -0
- package/dist/shared/constants.d.ts +2 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +2 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/types.d.ts +99 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +3 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/store/file-store.d.ts +62 -0
- package/dist/store/file-store.d.ts.map +1 -0
- package/dist/store/file-store.js +241 -0
- package/dist/store/file-store.js.map +1 -0
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +2 -0
- package/dist/store/index.js.map +1 -0
- package/dist/sync/index.d.ts +56 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +580 -0
- package/dist/sync/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { MemoryUnit, MemoryGrid, MemoryUnitType } from '../shared/types.js';
|
|
2
|
+
export interface ListFilter {
|
|
3
|
+
type?: MemoryUnitType;
|
|
4
|
+
includeArchived?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* File-based store with in-memory index cache.
|
|
8
|
+
*
|
|
9
|
+
* Units stored as JSON (not YAML) for maximum read/write performance.
|
|
10
|
+
* First init/load: all JSON files read → JSON.parse → cached in Map.
|
|
11
|
+
* After that: listUnits()/getUnit() are O(1) memory lookups.
|
|
12
|
+
* saveUnit() writes to disk + updates cache instantly.
|
|
13
|
+
*/
|
|
14
|
+
export declare class FileStore {
|
|
15
|
+
private projectRoot;
|
|
16
|
+
private cache;
|
|
17
|
+
private archiveCache;
|
|
18
|
+
private gridCache;
|
|
19
|
+
private loaded;
|
|
20
|
+
private dirtyUsage;
|
|
21
|
+
constructor(projectRoot: string);
|
|
22
|
+
get gridDir(): string;
|
|
23
|
+
get unitsDir(): string;
|
|
24
|
+
get archiveDir(): string;
|
|
25
|
+
get meshPath(): string;
|
|
26
|
+
unitPath(id: string): string;
|
|
27
|
+
archivePath(id: string): string;
|
|
28
|
+
ensureDirs(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Load all JSON unit files into memory cache.
|
|
31
|
+
* Supports both .json (new) and .yaml (legacy) for migration.
|
|
32
|
+
*/
|
|
33
|
+
load(): {
|
|
34
|
+
total: number;
|
|
35
|
+
loadedMs: number;
|
|
36
|
+
};
|
|
37
|
+
reload(): void;
|
|
38
|
+
listUnits(filter?: ListFilter): Promise<MemoryUnit[]>;
|
|
39
|
+
getUnit(id: string): MemoryUnit | null;
|
|
40
|
+
saveUnit(unit: MemoryUnit): void;
|
|
41
|
+
deleteUnit(id: string): void;
|
|
42
|
+
archiveUnit(id: string): void;
|
|
43
|
+
touch(id: string): void;
|
|
44
|
+
flushUsage(): {
|
|
45
|
+
synced: number;
|
|
46
|
+
};
|
|
47
|
+
saveUnits(units: MemoryUnit[]): {
|
|
48
|
+
written: number;
|
|
49
|
+
skipped: number;
|
|
50
|
+
};
|
|
51
|
+
getGrid(): MemoryGrid | null;
|
|
52
|
+
saveGrid(grid: MemoryGrid): void;
|
|
53
|
+
getStats(): {
|
|
54
|
+
totalUnits: number;
|
|
55
|
+
activeUnits: number;
|
|
56
|
+
archivedUnits: number;
|
|
57
|
+
typeDistribution: Record<string, number>;
|
|
58
|
+
};
|
|
59
|
+
private ensureLoaded;
|
|
60
|
+
private unitsEqual;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=file-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../src/store/file-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOjF,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA0B;gBAEhC,WAAW,EAAE,MAAM;IAM/B,IAAI,OAAO,IAAI,MAAM,CAAkD;IACvE,IAAI,QAAQ,IAAI,MAAM,CAA+C;IACrE,IAAI,UAAU,IAAI,MAAM,CAAiD;IACzE,IAAI,QAAQ,IAAI,MAAM,CAA+C;IAErE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAS/B,UAAU,IAAI,IAAI;IAKlB;;;OAGG;IACH,IAAI,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAkD3C,MAAM,IAAI,IAAI;IAIR,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiB3D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAOtC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAehC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ5B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAmB7B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASvB,UAAU,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAkBhC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAmBpE,OAAO,IAAI,UAAU,GAAG,IAAI;IAO5B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAOhC,QAAQ;;;;;;IAkBR,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;CASnB"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
const GRID_DIR = '.claude/memory-grid';
|
|
4
|
+
const UNITS_DIR = 'units';
|
|
5
|
+
const ARCHIVE_DIR = 'archive';
|
|
6
|
+
const MESH_FILE = 'mesh.json';
|
|
7
|
+
/**
|
|
8
|
+
* File-based store with in-memory index cache.
|
|
9
|
+
*
|
|
10
|
+
* Units stored as JSON (not YAML) for maximum read/write performance.
|
|
11
|
+
* First init/load: all JSON files read → JSON.parse → cached in Map.
|
|
12
|
+
* After that: listUnits()/getUnit() are O(1) memory lookups.
|
|
13
|
+
* saveUnit() writes to disk + updates cache instantly.
|
|
14
|
+
*/
|
|
15
|
+
export class FileStore {
|
|
16
|
+
projectRoot;
|
|
17
|
+
// In-memory cache
|
|
18
|
+
cache = new Map();
|
|
19
|
+
archiveCache = new Map();
|
|
20
|
+
gridCache = null;
|
|
21
|
+
loaded = false;
|
|
22
|
+
dirtyUsage = new Set();
|
|
23
|
+
constructor(projectRoot) {
|
|
24
|
+
this.projectRoot = projectRoot;
|
|
25
|
+
}
|
|
26
|
+
// ===== Path helpers =====
|
|
27
|
+
get gridDir() { return path.join(this.projectRoot, GRID_DIR); }
|
|
28
|
+
get unitsDir() { return path.join(this.gridDir, UNITS_DIR); }
|
|
29
|
+
get archiveDir() { return path.join(this.gridDir, ARCHIVE_DIR); }
|
|
30
|
+
get meshPath() { return path.join(this.gridDir, MESH_FILE); }
|
|
31
|
+
unitPath(id) {
|
|
32
|
+
return path.join(this.unitsDir, `${id}.json`);
|
|
33
|
+
}
|
|
34
|
+
archivePath(id) {
|
|
35
|
+
const year = new Date().getFullYear();
|
|
36
|
+
const dir = path.join(this.archiveDir, String(year));
|
|
37
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
38
|
+
return path.join(dir, `${id}.json`);
|
|
39
|
+
}
|
|
40
|
+
// ===== Initialization =====
|
|
41
|
+
ensureDirs() {
|
|
42
|
+
fs.mkdirSync(this.unitsDir, { recursive: true });
|
|
43
|
+
fs.mkdirSync(this.archiveDir, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Load all JSON unit files into memory cache.
|
|
47
|
+
* Supports both .json (new) and .yaml (legacy) for migration.
|
|
48
|
+
*/
|
|
49
|
+
load() {
|
|
50
|
+
const start = Date.now();
|
|
51
|
+
this.ensureDirs();
|
|
52
|
+
const parseUnit = (filePath) => {
|
|
53
|
+
try {
|
|
54
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
55
|
+
return JSON.parse(content);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
// Load active units
|
|
62
|
+
this.cache.clear();
|
|
63
|
+
if (fs.existsSync(this.unitsDir)) {
|
|
64
|
+
for (const file of fs.readdirSync(this.unitsDir)) {
|
|
65
|
+
if (!file.endsWith('.json') && !file.endsWith('.yaml'))
|
|
66
|
+
continue;
|
|
67
|
+
const unit = parseUnit(path.join(this.unitsDir, file));
|
|
68
|
+
if (unit)
|
|
69
|
+
this.cache.set(unit.id, unit);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Load archived units
|
|
73
|
+
this.archiveCache.clear();
|
|
74
|
+
if (fs.existsSync(this.archiveDir)) {
|
|
75
|
+
const walkArchive = (dir) => {
|
|
76
|
+
if (!fs.existsSync(dir))
|
|
77
|
+
return;
|
|
78
|
+
for (const entry of fs.readdirSync(dir)) {
|
|
79
|
+
const full = path.join(dir, entry);
|
|
80
|
+
if (fs.statSync(full).isDirectory()) {
|
|
81
|
+
walkArchive(full);
|
|
82
|
+
}
|
|
83
|
+
else if (entry.endsWith('.json') || entry.endsWith('.yaml')) {
|
|
84
|
+
const unit = parseUnit(full);
|
|
85
|
+
if (unit)
|
|
86
|
+
this.archiveCache.set(unit.id, unit);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
walkArchive(this.archiveDir);
|
|
91
|
+
}
|
|
92
|
+
this.loaded = true;
|
|
93
|
+
this.dirtyUsage.clear();
|
|
94
|
+
return {
|
|
95
|
+
total: this.cache.size + this.archiveCache.size,
|
|
96
|
+
loadedMs: Date.now() - start,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
reload() { this.load(); }
|
|
100
|
+
// ===== Unit read (from cache) =====
|
|
101
|
+
async listUnits(filter) {
|
|
102
|
+
this.ensureLoaded();
|
|
103
|
+
const results = [];
|
|
104
|
+
for (const unit of this.cache.values()) {
|
|
105
|
+
if (!filter?.type || unit.type === filter.type)
|
|
106
|
+
results.push(unit);
|
|
107
|
+
}
|
|
108
|
+
if (filter?.includeArchived) {
|
|
109
|
+
for (const unit of this.archiveCache.values()) {
|
|
110
|
+
if (!filter?.type || unit.type === filter.type)
|
|
111
|
+
results.push(unit);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
getUnit(id) {
|
|
117
|
+
this.ensureLoaded();
|
|
118
|
+
return this.cache.get(id) || this.archiveCache.get(id) || null;
|
|
119
|
+
}
|
|
120
|
+
// ===== Unit write (JSON → disk + cache) =====
|
|
121
|
+
saveUnit(unit) {
|
|
122
|
+
this.ensureLoaded();
|
|
123
|
+
const filePath = this.unitPath(unit.id);
|
|
124
|
+
const jsonStr = JSON.stringify(unit, null, 2);
|
|
125
|
+
fs.writeFileSync(filePath, jsonStr, 'utf-8');
|
|
126
|
+
// Update cache
|
|
127
|
+
if (unit.meta.status === 'archived') {
|
|
128
|
+
this.cache.delete(unit.id);
|
|
129
|
+
this.archiveCache.set(unit.id, unit);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.cache.set(unit.id, unit);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
deleteUnit(id) {
|
|
136
|
+
this.ensureLoaded();
|
|
137
|
+
const filePath = this.unitPath(id);
|
|
138
|
+
if (fs.existsSync(filePath))
|
|
139
|
+
fs.unlinkSync(filePath);
|
|
140
|
+
this.cache.delete(id);
|
|
141
|
+
this.archiveCache.delete(id);
|
|
142
|
+
}
|
|
143
|
+
archiveUnit(id) {
|
|
144
|
+
this.ensureLoaded();
|
|
145
|
+
const unit = this.cache.get(id);
|
|
146
|
+
if (!unit)
|
|
147
|
+
return;
|
|
148
|
+
const fromPath = this.unitPath(id);
|
|
149
|
+
const toPath = this.archivePath(id);
|
|
150
|
+
unit.meta.status = 'archived';
|
|
151
|
+
unit.meta.updated = new Date().toISOString();
|
|
152
|
+
const jsonStr = JSON.stringify(unit, null, 2);
|
|
153
|
+
fs.writeFileSync(toPath, jsonStr, 'utf-8');
|
|
154
|
+
if (fs.existsSync(fromPath))
|
|
155
|
+
fs.unlinkSync(fromPath);
|
|
156
|
+
this.cache.delete(id);
|
|
157
|
+
this.archiveCache.set(id, unit);
|
|
158
|
+
}
|
|
159
|
+
touch(id) {
|
|
160
|
+
this.ensureLoaded();
|
|
161
|
+
const unit = this.cache.get(id) || this.archiveCache.get(id);
|
|
162
|
+
if (unit) {
|
|
163
|
+
unit.meta.usage_count++;
|
|
164
|
+
this.dirtyUsage.add(id);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
flushUsage() {
|
|
168
|
+
let synced = 0;
|
|
169
|
+
for (const id of this.dirtyUsage) {
|
|
170
|
+
const unit = this.cache.get(id) || this.archiveCache.get(id);
|
|
171
|
+
if (unit) {
|
|
172
|
+
const filePath = unit.meta.status === 'archived'
|
|
173
|
+
? this.archivePath(id)
|
|
174
|
+
: this.unitPath(id);
|
|
175
|
+
if (fs.existsSync(filePath)) {
|
|
176
|
+
fs.writeFileSync(filePath, JSON.stringify(unit, null, 2), 'utf-8');
|
|
177
|
+
synced++;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
this.dirtyUsage.clear();
|
|
182
|
+
return { synced };
|
|
183
|
+
}
|
|
184
|
+
saveUnits(units) {
|
|
185
|
+
this.ensureLoaded();
|
|
186
|
+
let written = 0, skipped = 0;
|
|
187
|
+
for (const unit of units) {
|
|
188
|
+
const existing = this.cache.get(unit.id);
|
|
189
|
+
if (existing && this.unitsEqual(existing, unit)) {
|
|
190
|
+
skipped++;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
this.saveUnit(unit);
|
|
194
|
+
written++;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return { written, skipped };
|
|
198
|
+
}
|
|
199
|
+
// ===== Grid =====
|
|
200
|
+
getGrid() {
|
|
201
|
+
if (this.gridCache)
|
|
202
|
+
return this.gridCache;
|
|
203
|
+
if (!fs.existsSync(this.meshPath))
|
|
204
|
+
return null;
|
|
205
|
+
this.gridCache = JSON.parse(fs.readFileSync(this.meshPath, 'utf-8'));
|
|
206
|
+
return this.gridCache;
|
|
207
|
+
}
|
|
208
|
+
saveGrid(grid) {
|
|
209
|
+
this.gridCache = grid;
|
|
210
|
+
fs.writeFileSync(this.meshPath, JSON.stringify(grid, null, 2), 'utf-8');
|
|
211
|
+
}
|
|
212
|
+
// ===== Stats =====
|
|
213
|
+
getStats() {
|
|
214
|
+
this.ensureLoaded();
|
|
215
|
+
const typeDistribution = {};
|
|
216
|
+
let active = 0;
|
|
217
|
+
for (const unit of this.cache.values()) {
|
|
218
|
+
typeDistribution[unit.type] = (typeDistribution[unit.type] || 0) + 1;
|
|
219
|
+
if (unit.meta.status === 'active')
|
|
220
|
+
active++;
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
totalUnits: this.cache.size,
|
|
224
|
+
activeUnits: active,
|
|
225
|
+
archivedUnits: this.archiveCache.size,
|
|
226
|
+
typeDistribution,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
ensureLoaded() {
|
|
230
|
+
if (!this.loaded)
|
|
231
|
+
this.load();
|
|
232
|
+
}
|
|
233
|
+
unitsEqual(a, b) {
|
|
234
|
+
return (a.summary === b.summary &&
|
|
235
|
+
a.meta.status === b.meta.status &&
|
|
236
|
+
a.meta.updated === b.meta.updated &&
|
|
237
|
+
a.associations.length === b.associations.length &&
|
|
238
|
+
a.content.description === b.content.description);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=file-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/store/file-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { SyncResult, SyncOptions } from '../shared/types.js';
|
|
2
|
+
import type { FileStore } from '../store/file-store.js';
|
|
3
|
+
import type { Scanner } from '../scanner/scanner.js';
|
|
4
|
+
export declare class SyncEngine {
|
|
5
|
+
private store;
|
|
6
|
+
private scanner;
|
|
7
|
+
private projectRoot;
|
|
8
|
+
constructor(store: FileStore, scanner: Scanner, projectRoot: string);
|
|
9
|
+
/**
|
|
10
|
+
* Incremental sync: detect changed files → re-scan only those → repair associations.
|
|
11
|
+
*
|
|
12
|
+
* Phases:
|
|
13
|
+
* 1. Hash compare — compute current hashes vs fileSnapshot
|
|
14
|
+
* 2. Re-scan changed files → add/update units
|
|
15
|
+
* 3. Remove units from deleted files → mark stale
|
|
16
|
+
* 4. Repair broken associations via fuzzy match
|
|
17
|
+
* 5. Write updated mesh.json and fileSnapshot
|
|
18
|
+
*/
|
|
19
|
+
sync(options: SyncOptions): Promise<SyncResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Partial scan — only re-scan changed TypeScript/markdown files.
|
|
22
|
+
* Uses ts-morph for .ts files, inline parsing for .md / config.
|
|
23
|
+
*/
|
|
24
|
+
private scanChangedFiles;
|
|
25
|
+
/**
|
|
26
|
+
* Fuzzy-match a newly scanned unit against an existing stale unit.
|
|
27
|
+
* Returns the matching stale unit or null.
|
|
28
|
+
*
|
|
29
|
+
* Matching signals:
|
|
30
|
+
* 1. Same source file + high signature overlap (jaccard ≥ threshold)
|
|
31
|
+
* 2. Same source file + high summary similarity (dice ≥ threshold)
|
|
32
|
+
* 3. Same unit id (method was renamed but we kept same id pattern)
|
|
33
|
+
*/
|
|
34
|
+
private fuzzyMatchUnit;
|
|
35
|
+
/**
|
|
36
|
+
* Repair broken associations across all units.
|
|
37
|
+
*
|
|
38
|
+
* For each association whose target unit is stale/archived/missing:
|
|
39
|
+
* 1. Try fuzzy match against active units by signature
|
|
40
|
+
* 2. If match found → repair the link
|
|
41
|
+
* 3. If no match → reduce weight, mark for eventual removal
|
|
42
|
+
*/
|
|
43
|
+
private repairAssociations;
|
|
44
|
+
/**
|
|
45
|
+
* Find a replacement unit for a broken association.
|
|
46
|
+
* Strategy:
|
|
47
|
+
* 1. Search signature index for the original unit's summary keywords
|
|
48
|
+
* 2. Fuzzy match summaries against active units
|
|
49
|
+
* 3. Return best match above threshold
|
|
50
|
+
*/
|
|
51
|
+
private findReplacementAssociation;
|
|
52
|
+
private updateGrid;
|
|
53
|
+
private sanitizeId;
|
|
54
|
+
private extractJsDoc;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAwC,UAAU,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AACrH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAgErD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM;IAMnE;;;;;;;;;OASG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAiLrD;;;OAGG;YACW,gBAAgB;IAwL9B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAsDtB;;;;;;;OAOG;YACW,kBAAkB;IAwDhC;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IA+BlC,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;CAOrB"}
|