@fingerskier/augment 0.1.10 → 0.2.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/README.md +20 -2
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +43 -2
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +19 -3
- package/dist/constants.js.map +1 -1
- package/dist/daemon/client.d.ts +5 -0
- package/dist/daemon/client.js +15 -6
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/http.d.ts +1 -1
- package/dist/daemon/http.js +159 -53
- package/dist/daemon/http.js.map +1 -1
- package/dist/daemon/main.js +15 -1
- package/dist/daemon/main.js.map +1 -1
- package/dist/daemon/scheduler.d.ts +17 -0
- package/dist/daemon/scheduler.js +77 -0
- package/dist/daemon/scheduler.js.map +1 -0
- package/dist/daemon/single-instance.d.ts +32 -0
- package/dist/daemon/single-instance.js +131 -0
- package/dist/daemon/single-instance.js.map +1 -0
- package/dist/db.d.ts +13 -1
- package/dist/db.js +166 -105
- package/dist/db.js.map +1 -1
- package/dist/hooks.js +28 -3
- package/dist/hooks.js.map +1 -1
- package/dist/install.d.ts +2 -0
- package/dist/install.js +41 -7
- package/dist/install.js.map +1 -1
- package/dist/mcp/server.js +30 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/recall.d.ts +2 -0
- package/dist/recall.js +1 -0
- package/dist/recall.js.map +1 -1
- package/dist/service.d.ts +64 -1
- package/dist/service.js +269 -35
- package/dist/service.js.map +1 -1
- package/dist/sleep.d.ts +43 -0
- package/dist/sleep.js +129 -0
- package/dist/sleep.js.map +1 -0
- package/dist/tally.d.ts +46 -0
- package/dist/tally.js +94 -0
- package/dist/tally.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/util/text.d.ts +3 -0
- package/dist/util/text.js +26 -2
- package/dist/util/text.js.map +1 -1
- package/docs/FEATURES.md +155 -50
- package/docs/verify-memory-flow.md +28 -9
- package/package.json +1 -1
package/dist/db.js
CHANGED
|
@@ -14,48 +14,48 @@ export class AugmentDatabase {
|
|
|
14
14
|
this.getClient();
|
|
15
15
|
await this.batch([
|
|
16
16
|
`PRAGMA foreign_keys = ON`,
|
|
17
|
-
`CREATE TABLE IF NOT EXISTS projects (
|
|
18
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
19
|
-
name TEXT NOT NULL UNIQUE,
|
|
20
|
-
org TEXT NOT NULL,
|
|
21
|
-
repo TEXT NOT NULL,
|
|
22
|
-
source TEXT NOT NULL,
|
|
23
|
-
created_at TEXT NOT NULL,
|
|
24
|
-
updated_at TEXT NOT NULL
|
|
17
|
+
`CREATE TABLE IF NOT EXISTS projects (
|
|
18
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
19
|
+
name TEXT NOT NULL UNIQUE,
|
|
20
|
+
org TEXT NOT NULL,
|
|
21
|
+
repo TEXT NOT NULL,
|
|
22
|
+
source TEXT NOT NULL,
|
|
23
|
+
created_at TEXT NOT NULL,
|
|
24
|
+
updated_at TEXT NOT NULL
|
|
25
25
|
)`,
|
|
26
|
-
`CREATE TABLE IF NOT EXISTS memories (
|
|
27
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
-
project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
29
|
-
kind TEXT NOT NULL,
|
|
30
|
-
name TEXT NOT NULL,
|
|
31
|
-
relative_path TEXT NOT NULL UNIQUE,
|
|
32
|
-
content_hash TEXT NOT NULL,
|
|
33
|
-
frontmatter_hash TEXT NOT NULL,
|
|
34
|
-
size INTEGER NOT NULL,
|
|
35
|
-
density REAL NOT NULL,
|
|
36
|
-
mtime REAL NOT NULL,
|
|
37
|
-
tags_json TEXT NOT NULL,
|
|
38
|
-
links_json TEXT NOT NULL,
|
|
39
|
-
body TEXT NOT NULL,
|
|
40
|
-
created_at TEXT NOT NULL,
|
|
41
|
-
updated_at TEXT NOT NULL
|
|
26
|
+
`CREATE TABLE IF NOT EXISTS memories (
|
|
27
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
+
project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
29
|
+
kind TEXT NOT NULL,
|
|
30
|
+
name TEXT NOT NULL,
|
|
31
|
+
relative_path TEXT NOT NULL UNIQUE,
|
|
32
|
+
content_hash TEXT NOT NULL,
|
|
33
|
+
frontmatter_hash TEXT NOT NULL,
|
|
34
|
+
size INTEGER NOT NULL,
|
|
35
|
+
density REAL NOT NULL,
|
|
36
|
+
mtime REAL NOT NULL,
|
|
37
|
+
tags_json TEXT NOT NULL,
|
|
38
|
+
links_json TEXT NOT NULL,
|
|
39
|
+
body TEXT NOT NULL,
|
|
40
|
+
created_at TEXT NOT NULL,
|
|
41
|
+
updated_at TEXT NOT NULL
|
|
42
42
|
)`,
|
|
43
|
-
`CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
44
|
-
memory_id INTEGER PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
45
|
-
model_id TEXT NOT NULL,
|
|
46
|
-
model_version TEXT NOT NULL,
|
|
47
|
-
dimensions INTEGER NOT NULL,
|
|
48
|
-
vector_json TEXT NOT NULL,
|
|
49
|
-
embedded_hash TEXT NOT NULL,
|
|
50
|
-
embedded_at TEXT NOT NULL
|
|
43
|
+
`CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
44
|
+
memory_id INTEGER PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
45
|
+
model_id TEXT NOT NULL,
|
|
46
|
+
model_version TEXT NOT NULL,
|
|
47
|
+
dimensions INTEGER NOT NULL,
|
|
48
|
+
vector_json TEXT NOT NULL,
|
|
49
|
+
embedded_hash TEXT NOT NULL,
|
|
50
|
+
embedded_at TEXT NOT NULL
|
|
51
51
|
)`,
|
|
52
|
-
`CREATE TABLE IF NOT EXISTS links (
|
|
53
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
54
|
-
from_memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
55
|
-
to_memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
56
|
-
type TEXT NOT NULL,
|
|
57
|
-
created_at TEXT NOT NULL,
|
|
58
|
-
UNIQUE(from_memory_id, to_memory_id, type)
|
|
52
|
+
`CREATE TABLE IF NOT EXISTS links (
|
|
53
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
54
|
+
from_memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
55
|
+
to_memory_id INTEGER NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
56
|
+
type TEXT NOT NULL,
|
|
57
|
+
created_at TEXT NOT NULL,
|
|
58
|
+
UNIQUE(from_memory_id, to_memory_id, type)
|
|
59
59
|
)`,
|
|
60
60
|
`CREATE INDEX IF NOT EXISTS idx_memories_project_id ON memories(project_id)`,
|
|
61
61
|
`CREATE INDEX IF NOT EXISTS idx_memories_kind ON memories(kind)`,
|
|
@@ -70,12 +70,12 @@ export class AugmentDatabase {
|
|
|
70
70
|
async upsertProject(name, source = "git") {
|
|
71
71
|
const parts = projectParts(name);
|
|
72
72
|
const now = new Date().toISOString();
|
|
73
|
-
await this.execute(`INSERT INTO projects (name, org, repo, source, created_at, updated_at)
|
|
74
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
75
|
-
ON CONFLICT(name) DO UPDATE SET
|
|
76
|
-
org = excluded.org,
|
|
77
|
-
repo = excluded.repo,
|
|
78
|
-
source = excluded.source,
|
|
73
|
+
await this.execute(`INSERT INTO projects (name, org, repo, source, created_at, updated_at)
|
|
74
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
75
|
+
ON CONFLICT(name) DO UPDATE SET
|
|
76
|
+
org = excluded.org,
|
|
77
|
+
repo = excluded.repo,
|
|
78
|
+
source = excluded.source,
|
|
79
79
|
updated_at = excluded.updated_at`, [name, parts.org, parts.repo, source, now, now]);
|
|
80
80
|
const project = await this.getProjectByName(name);
|
|
81
81
|
if (!project) {
|
|
@@ -100,23 +100,23 @@ export class AugmentDatabase {
|
|
|
100
100
|
async upsertMemory(memory) {
|
|
101
101
|
const project = await this.upsertProject(memory.frontmatter.project);
|
|
102
102
|
const now = new Date().toISOString();
|
|
103
|
-
await this.execute(`INSERT INTO memories (
|
|
104
|
-
project_id, kind, name, relative_path, content_hash, frontmatter_hash,
|
|
105
|
-
size, density, mtime, tags_json, links_json, body, created_at, updated_at
|
|
106
|
-
)
|
|
107
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
108
|
-
ON CONFLICT(relative_path) DO UPDATE SET
|
|
109
|
-
project_id = excluded.project_id,
|
|
110
|
-
kind = excluded.kind,
|
|
111
|
-
name = excluded.name,
|
|
112
|
-
content_hash = excluded.content_hash,
|
|
113
|
-
frontmatter_hash = excluded.frontmatter_hash,
|
|
114
|
-
size = excluded.size,
|
|
115
|
-
density = excluded.density,
|
|
116
|
-
mtime = excluded.mtime,
|
|
117
|
-
tags_json = excluded.tags_json,
|
|
118
|
-
links_json = excluded.links_json,
|
|
119
|
-
body = excluded.body,
|
|
103
|
+
await this.execute(`INSERT INTO memories (
|
|
104
|
+
project_id, kind, name, relative_path, content_hash, frontmatter_hash,
|
|
105
|
+
size, density, mtime, tags_json, links_json, body, created_at, updated_at
|
|
106
|
+
)
|
|
107
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
108
|
+
ON CONFLICT(relative_path) DO UPDATE SET
|
|
109
|
+
project_id = excluded.project_id,
|
|
110
|
+
kind = excluded.kind,
|
|
111
|
+
name = excluded.name,
|
|
112
|
+
content_hash = excluded.content_hash,
|
|
113
|
+
frontmatter_hash = excluded.frontmatter_hash,
|
|
114
|
+
size = excluded.size,
|
|
115
|
+
density = excluded.density,
|
|
116
|
+
mtime = excluded.mtime,
|
|
117
|
+
tags_json = excluded.tags_json,
|
|
118
|
+
links_json = excluded.links_json,
|
|
119
|
+
body = excluded.body,
|
|
120
120
|
updated_at = excluded.updated_at`, [
|
|
121
121
|
project.id,
|
|
122
122
|
memory.frontmatter.kind,
|
|
@@ -143,29 +143,45 @@ export class AugmentDatabase {
|
|
|
143
143
|
// ON DELETE CASCADE removes the row's embeddings and any links touching it.
|
|
144
144
|
await this.execute(`DELETE FROM memories WHERE id = ?`, [id]);
|
|
145
145
|
}
|
|
146
|
+
async deleteMemoryByPath(relativePath) {
|
|
147
|
+
await this.execute(`DELETE FROM memories WHERE relative_path = ?`, [relativePath]);
|
|
148
|
+
}
|
|
149
|
+
/** relative_path → stored file mtime (ms), for change detection without reading file bodies. */
|
|
150
|
+
async listMemoryFileStats() {
|
|
151
|
+
const result = await this.execute(`SELECT relative_path, mtime FROM memories`);
|
|
152
|
+
return new Map(result.rows.map((row) => [String(row.relative_path), Number(row.mtime)]));
|
|
153
|
+
}
|
|
146
154
|
async removeMissingMemories(relativePaths) {
|
|
147
155
|
if (relativePaths.length === 0) {
|
|
148
|
-
await this.execute(`DELETE FROM memories`);
|
|
149
|
-
return;
|
|
156
|
+
const all = await this.execute(`DELETE FROM memories`);
|
|
157
|
+
return all.rowsAffected;
|
|
150
158
|
}
|
|
151
159
|
const placeholders = relativePaths.map(() => "?").join(", ");
|
|
152
|
-
await this.execute(`DELETE FROM memories WHERE relative_path NOT IN (${placeholders})`, relativePaths);
|
|
160
|
+
const result = await this.execute(`DELETE FROM memories WHERE relative_path NOT IN (${placeholders})`, relativePaths);
|
|
161
|
+
return result.rowsAffected;
|
|
153
162
|
}
|
|
154
163
|
async rebuildLinks() {
|
|
155
|
-
await this.execute(`DELETE FROM links`);
|
|
156
164
|
const memories = await this.listMemories();
|
|
157
165
|
const byPath = new Map(memories.map((memory) => [memory.relative_path, memory]));
|
|
158
166
|
const now = new Date().toISOString();
|
|
167
|
+
// One transactional batch instead of an auto-commit round trip per link:
|
|
168
|
+
// hundreds of statements collapse into a single commit, and a failure
|
|
169
|
+
// leaves the previous link table intact rather than truncated.
|
|
170
|
+
const statements = [{ sql: `DELETE FROM links`, args: [] }];
|
|
159
171
|
for (const memory of memories) {
|
|
160
172
|
for (const link of memory.links) {
|
|
161
173
|
const target = byPath.get(link.to);
|
|
162
174
|
if (!target) {
|
|
163
175
|
continue;
|
|
164
176
|
}
|
|
165
|
-
|
|
166
|
-
|
|
177
|
+
statements.push({
|
|
178
|
+
sql: `INSERT OR IGNORE INTO links (from_memory_id, to_memory_id, type, created_at)
|
|
179
|
+
VALUES (?, ?, ?, ?)`,
|
|
180
|
+
args: [memory.id, target.id, link.type, now],
|
|
181
|
+
});
|
|
167
182
|
}
|
|
168
183
|
}
|
|
184
|
+
await this.batchExecute(statements);
|
|
169
185
|
}
|
|
170
186
|
async getMemoryById(id) {
|
|
171
187
|
const result = await this.execute(memorySelectSql(`WHERE memories.id = ?`), [id]);
|
|
@@ -186,36 +202,36 @@ export class AugmentDatabase {
|
|
|
186
202
|
return result.rows.map((row) => memoryFromRow(row));
|
|
187
203
|
}
|
|
188
204
|
async listLinks(memoryId) {
|
|
189
|
-
const result = await this.execute(`SELECT
|
|
190
|
-
links.*,
|
|
191
|
-
from_memory.relative_path AS from_relative_path,
|
|
192
|
-
to_memory.relative_path AS to_relative_path
|
|
193
|
-
FROM links
|
|
194
|
-
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
195
|
-
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
196
|
-
WHERE links.from_memory_id = ? OR links.to_memory_id = ?
|
|
205
|
+
const result = await this.execute(`SELECT
|
|
206
|
+
links.*,
|
|
207
|
+
from_memory.relative_path AS from_relative_path,
|
|
208
|
+
to_memory.relative_path AS to_relative_path
|
|
209
|
+
FROM links
|
|
210
|
+
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
211
|
+
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
212
|
+
WHERE links.from_memory_id = ? OR links.to_memory_id = ?
|
|
197
213
|
ORDER BY links.id`, [memoryId, memoryId]);
|
|
198
214
|
return result.rows.map((row) => linkFromRow(row));
|
|
199
215
|
}
|
|
200
216
|
async getLinkById(id) {
|
|
201
|
-
const result = await this.execute(`SELECT
|
|
202
|
-
links.*,
|
|
203
|
-
from_memory.relative_path AS from_relative_path,
|
|
204
|
-
to_memory.relative_path AS to_relative_path
|
|
205
|
-
FROM links
|
|
206
|
-
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
207
|
-
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
217
|
+
const result = await this.execute(`SELECT
|
|
218
|
+
links.*,
|
|
219
|
+
from_memory.relative_path AS from_relative_path,
|
|
220
|
+
to_memory.relative_path AS to_relative_path
|
|
221
|
+
FROM links
|
|
222
|
+
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
223
|
+
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
208
224
|
WHERE links.id = ?`, [id]);
|
|
209
225
|
return result.rows[0] ? linkFromRow(result.rows[0]) : undefined;
|
|
210
226
|
}
|
|
211
227
|
async getAllLinks() {
|
|
212
|
-
const result = await this.execute(`SELECT
|
|
213
|
-
links.*,
|
|
214
|
-
from_memory.relative_path AS from_relative_path,
|
|
215
|
-
to_memory.relative_path AS to_relative_path
|
|
216
|
-
FROM links
|
|
217
|
-
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
218
|
-
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
228
|
+
const result = await this.execute(`SELECT
|
|
229
|
+
links.*,
|
|
230
|
+
from_memory.relative_path AS from_relative_path,
|
|
231
|
+
to_memory.relative_path AS to_relative_path
|
|
232
|
+
FROM links
|
|
233
|
+
JOIN memories AS from_memory ON from_memory.id = links.from_memory_id
|
|
234
|
+
JOIN memories AS to_memory ON to_memory.id = links.to_memory_id
|
|
219
235
|
ORDER BY links.id`);
|
|
220
236
|
return result.rows.map((row) => linkFromRow(row));
|
|
221
237
|
}
|
|
@@ -241,16 +257,16 @@ export class AugmentDatabase {
|
|
|
241
257
|
if (!record) {
|
|
242
258
|
throw new Error(`Cannot store embedding for missing memory`);
|
|
243
259
|
}
|
|
244
|
-
await this.execute(`INSERT INTO memory_embeddings (
|
|
245
|
-
memory_id, model_id, model_version, dimensions, vector_json, embedded_hash, embedded_at
|
|
246
|
-
)
|
|
247
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
248
|
-
ON CONFLICT(memory_id) DO UPDATE SET
|
|
249
|
-
model_id = excluded.model_id,
|
|
250
|
-
model_version = excluded.model_version,
|
|
251
|
-
dimensions = excluded.dimensions,
|
|
252
|
-
vector_json = excluded.vector_json,
|
|
253
|
-
embedded_hash = excluded.embedded_hash,
|
|
260
|
+
await this.execute(`INSERT INTO memory_embeddings (
|
|
261
|
+
memory_id, model_id, model_version, dimensions, vector_json, embedded_hash, embedded_at
|
|
262
|
+
)
|
|
263
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
264
|
+
ON CONFLICT(memory_id) DO UPDATE SET
|
|
265
|
+
model_id = excluded.model_id,
|
|
266
|
+
model_version = excluded.model_version,
|
|
267
|
+
dimensions = excluded.dimensions,
|
|
268
|
+
vector_json = excluded.vector_json,
|
|
269
|
+
embedded_hash = excluded.embedded_hash,
|
|
254
270
|
embedded_at = excluded.embedded_at`, [
|
|
255
271
|
record.id,
|
|
256
272
|
provider.modelId,
|
|
@@ -275,12 +291,57 @@ export class AugmentDatabase {
|
|
|
275
291
|
memory.body,
|
|
276
292
|
].join("\n");
|
|
277
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Incremental link maintenance for one re-indexed memory: replaces its outbound links from its
|
|
296
|
+
* frontmatter, then materializes inbound links other memories declare toward its path (they may
|
|
297
|
+
* have been dangling if this file was just created). Equivalent to {@link rebuildLinks} for the
|
|
298
|
+
* subgraph touching this memory, without paying the full O(memories × links) sweep.
|
|
299
|
+
*/
|
|
300
|
+
async rebuildLinksForMemory(memory) {
|
|
301
|
+
const now = new Date().toISOString();
|
|
302
|
+
const statements = [{ sql: `DELETE FROM links WHERE from_memory_id = ?`, args: [memory.id] }];
|
|
303
|
+
for (const link of memory.links) {
|
|
304
|
+
const target = await this.getMemoryByPath(link.to);
|
|
305
|
+
if (!target) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
statements.push({
|
|
309
|
+
sql: `INSERT OR IGNORE INTO links (from_memory_id, to_memory_id, type, created_at) VALUES (?, ?, ?, ?)`,
|
|
310
|
+
args: [memory.id, target.id, link.type, now],
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
// LIKE narrows candidates cheaply; the JSON parse below is the exact filter
|
|
314
|
+
// (`_`/`%` in paths only ever widen the candidate set).
|
|
315
|
+
const inbound = await this.execute(`SELECT id, links_json FROM memories WHERE links_json LIKE ? AND id != ?`, [
|
|
316
|
+
`%"to":"${memory.relative_path}"%`,
|
|
317
|
+
memory.id,
|
|
318
|
+
]);
|
|
319
|
+
for (const row of inbound.rows) {
|
|
320
|
+
const links = JSON.parse(String(row.links_json));
|
|
321
|
+
for (const link of links) {
|
|
322
|
+
if (link.to !== memory.relative_path) {
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
statements.push({
|
|
326
|
+
sql: `INSERT OR IGNORE INTO links (from_memory_id, to_memory_id, type, created_at) VALUES (?, ?, ?, ?)`,
|
|
327
|
+
args: [Number(row.id), memory.id, link.type, now],
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Reads above see pre-delete state (nothing depends on the delete); the
|
|
332
|
+
// delete + reinserts land atomically in one transaction here.
|
|
333
|
+
await this.batchExecute(statements);
|
|
334
|
+
}
|
|
278
335
|
async execute(sql, args) {
|
|
279
336
|
return this.getClient().execute(sql, args);
|
|
280
337
|
}
|
|
281
338
|
async batch(sql) {
|
|
282
339
|
await this.getClient().batch(sql.map((statement) => [statement]));
|
|
283
340
|
}
|
|
341
|
+
/** Parameterized statements in one transaction: one commit, all-or-nothing. */
|
|
342
|
+
async batchExecute(statements) {
|
|
343
|
+
await this.getClient().batch(statements);
|
|
344
|
+
}
|
|
284
345
|
getClient() {
|
|
285
346
|
if (!this.client) {
|
|
286
347
|
const normalized = this.databasePath.replace(/\\/g, "/");
|
|
@@ -290,11 +351,11 @@ export class AugmentDatabase {
|
|
|
290
351
|
}
|
|
291
352
|
}
|
|
292
353
|
function memorySelectSql(suffix) {
|
|
293
|
-
return `SELECT
|
|
294
|
-
memories.*,
|
|
295
|
-
projects.name AS project_name
|
|
296
|
-
FROM memories
|
|
297
|
-
JOIN projects ON projects.id = memories.project_id
|
|
354
|
+
return `SELECT
|
|
355
|
+
memories.*,
|
|
356
|
+
projects.name AS project_name
|
|
357
|
+
FROM memories
|
|
358
|
+
JOIN projects ON projects.id = memories.project_id
|
|
298
359
|
${suffix}`;
|
|
299
360
|
}
|
|
300
361
|
function projectFromRow(row) {
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { constants } from "node:fs";
|
|
2
3
|
import { mkdir, open } from "node:fs/promises";
|
|
3
4
|
import { tmpdir } from "node:os";
|
|
@@ -75,7 +76,7 @@ export async function handleUserPromptSubmit(payload, deps) {
|
|
|
75
76
|
return OK;
|
|
76
77
|
}
|
|
77
78
|
const recall = deps.recall ?? defaultRecall;
|
|
78
|
-
const text = await recall({ query, cwd: asString(payload.cwd) });
|
|
79
|
+
const text = await recall({ query, cwd: asString(payload.cwd), surface: "user-prompt-submit" });
|
|
79
80
|
if (!text) {
|
|
80
81
|
return OK;
|
|
81
82
|
}
|
|
@@ -90,10 +91,15 @@ export async function handleUserPromptSubmit(payload, deps) {
|
|
|
90
91
|
};
|
|
91
92
|
}
|
|
92
93
|
/** Recall budget for the hot path: a few short memories at most (PreToolUse fires before every
|
|
93
|
-
* matched tool call, so output is kept tight).
|
|
94
|
-
* the relevance floor is already under-calibrated, so lowering it here would inject more noise. */
|
|
94
|
+
* matched tool call, so output is kept tight). */
|
|
95
95
|
const PRE_TOOL_RECALL_LIMIT = 3;
|
|
96
96
|
const PRE_TOOL_RECALL_MAX_CHARS = 1200;
|
|
97
|
+
/** PreToolUse queries are command/path-shaped, not natural language, so the hot path carries its
|
|
98
|
+
* own floor above the prose-calibrated default. Measured on the pinned model (2026-07-01, see
|
|
99
|
+
* test/real-model-abstention.model.ts tripwires): a mechanical command (`git log --oneline`)
|
|
100
|
+
* scores 0.165 against an unrelated same-project memory, while a memory naming the exact touched
|
|
101
|
+
* artifact scores ~0.54 — 0.45 sits between with margin on both sides. */
|
|
102
|
+
const PRE_TOOL_RECALL_MIN_SCORE = 0.45;
|
|
97
103
|
/**
|
|
98
104
|
* PreToolUse: recalls *additional* memory targeted to the specific tool action (the file being
|
|
99
105
|
* edited, the command being run) and injects it as `additionalContext`, supplementing the
|
|
@@ -111,12 +117,31 @@ export async function handlePreToolUse(payload, deps) {
|
|
|
111
117
|
// Nothing actionable to recall against (or a tool we don't key on) — stay off the hot path.
|
|
112
118
|
return OK;
|
|
113
119
|
}
|
|
120
|
+
// Once-per-session dedupe: the same query (same file edited again, same command re-run)
|
|
121
|
+
// re-injects the same memories, so suppress repeats before paying for the search. Without a
|
|
122
|
+
// session_id there is no safe turn key — a global marker would suppress across sessions — so
|
|
123
|
+
// skip the guard. A broken guard also fails open: losing dedupe must not lose the injection.
|
|
124
|
+
const sessionId = asString(payload.session_id) ?? "";
|
|
125
|
+
if (sessionId) {
|
|
126
|
+
try {
|
|
127
|
+
const markerSeen = deps.markerSeen ?? defaultMarkerSeen;
|
|
128
|
+
const queryHash = createHash("sha256").update(query).digest("hex").slice(0, 16);
|
|
129
|
+
if (await markerSeen(`${sessionId}__pretool__${queryHash}`)) {
|
|
130
|
+
return OK;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// fall through to recall
|
|
135
|
+
}
|
|
136
|
+
}
|
|
114
137
|
const recall = deps.recall ?? defaultRecall;
|
|
115
138
|
const text = await recall({
|
|
116
139
|
query,
|
|
117
140
|
cwd: asString(payload.cwd),
|
|
118
141
|
limit: PRE_TOOL_RECALL_LIMIT,
|
|
119
142
|
maxChars: PRE_TOOL_RECALL_MAX_CHARS,
|
|
143
|
+
minScore: PRE_TOOL_RECALL_MIN_SCORE,
|
|
144
|
+
surface: "pre-tool-use",
|
|
120
145
|
});
|
|
121
146
|
if (!text) {
|
|
122
147
|
return OK;
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,MAAM,IAAI,aAAa,EAAsB,MAAM,aAAa,CAAC;AAE1E;;;;;;;;;;GAUG;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GACzB,mFAAmF;IACnF,oFAAoF;IACpF,2FAA2F;IAC3F,qFAAqF;IACrF,+FAA+F;IAC/F,uFAAuF;IACvF,yEAAyE;IACzE,4DAA4D,CAAC;AAsB/D,MAAM,EAAE,GAAe,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAEnD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,oEAAoE;AACpE,SAAS,UAAU,CAAC,OAAgC;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACjF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,QAAgB,EAAE,QAAiB;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,aAAa;YAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD;YACE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,CACL,8CAA8C;QAC9C,8EAA8E;QAC9E,gDAAgD;QAChD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAgC,EAChC,IAAc;IAEd,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,sEAAsE;QACtE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/install.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface InstallOptions {
|
|
|
19
19
|
noPlugin?: boolean;
|
|
20
20
|
/** Runner used to invoke the `claude` CLI. When omitted, registration is not executed (manual fallback). */
|
|
21
21
|
runClaude?: ClaudeCommandRunner;
|
|
22
|
+
/** Runner used to provision the hook runtime via `npm install`. When omitted, provisioning is not executed (manual fallback). */
|
|
23
|
+
runNpm?: ClaudeCommandRunner;
|
|
22
24
|
}
|
|
23
25
|
export interface InstallPlan {
|
|
24
26
|
summary: string[];
|
package/dist/install.js
CHANGED
|
@@ -28,6 +28,8 @@ export async function installIntegration(options) {
|
|
|
28
28
|
summary.push(...plan.summary);
|
|
29
29
|
files.push(...plan.files);
|
|
30
30
|
}
|
|
31
|
+
// Both targets share the same prefix, so provision the hook runtime once per install.
|
|
32
|
+
summary.push(...(await warmHookRuntime(options, context)));
|
|
31
33
|
return { summary, files };
|
|
32
34
|
}
|
|
33
35
|
async function installCodex(options) {
|
|
@@ -312,18 +314,50 @@ function shellQuote(value) {
|
|
|
312
314
|
function augmentMcpArgs(prefix) {
|
|
313
315
|
return ["exec", "--yes", "--prefix", prefix, "--package", "@fingerskier/augment", "--", "augment-mcp"];
|
|
314
316
|
}
|
|
317
|
+
/** Where {@link warmHookRuntime} provisions the package the hook commands invoke. */
|
|
318
|
+
function hookRuntimeEntry(prefix) {
|
|
319
|
+
return path.join(prefix, "node_modules", "@fingerskier", "augment", "dist", "bin", "augment.js");
|
|
320
|
+
}
|
|
315
321
|
/**
|
|
316
|
-
* Shell-form command a lifecycle hook runs.
|
|
317
|
-
*
|
|
318
|
-
*
|
|
322
|
+
* Shell-form command a lifecycle hook runs. Hooks fire on every prompt, turn boundary, and
|
|
323
|
+
* matched tool call, so they invoke the provisioned runtime directly — `node <entry>` starts in
|
|
324
|
+
* tens of milliseconds, where the previous `npm exec --yes` form paid a multi-second npm
|
|
325
|
+
* bootstrap plus registry traffic on every single event. The entry is provisioned at install
|
|
326
|
+
* time by {@link warmHookRuntime}.
|
|
319
327
|
*/
|
|
320
328
|
function augmentHookCommand(prefix, event) {
|
|
321
329
|
// Hook commands run as a single shell string, and on Windows the host shell eats backslashes —
|
|
322
|
-
//
|
|
323
|
-
// survive every shell (sh/cmd/PowerShell) and
|
|
324
|
-
const normalized = prefix.replace(/\\/g, "/");
|
|
330
|
+
// `node C:\Users\...` collapses to a broken drive-relative `C:Users...`. Forward slashes
|
|
331
|
+
// survive every shell (sh/cmd/PowerShell) and node accepts them on Windows.
|
|
332
|
+
const normalized = hookRuntimeEntry(prefix).replace(/\\/g, "/");
|
|
325
333
|
const quoted = /[\s"]/.test(normalized) ? `"${normalized.replace(/"/g, '\\"')}"` : normalized;
|
|
326
|
-
return `
|
|
334
|
+
return `node ${quoted} hook ${event}`;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Provisions the package the direct-node hook commands point at. `npm exec` resolves through the
|
|
338
|
+
* npx cache and never populates `<prefix>/node_modules`, so a real `npm install --prefix` is
|
|
339
|
+
* required once at install time. Runs through the injected runner (tests stay offline); without
|
|
340
|
+
* one, reports the manual command instead. Best-effort: a failed install degrades to the manual
|
|
341
|
+
* instruction, and the hooks themselves fail open until it is run.
|
|
342
|
+
*/
|
|
343
|
+
async function warmHookRuntime(options, context) {
|
|
344
|
+
const prefix = sharedNpmExecPrefix(context.home);
|
|
345
|
+
const installArgs = ["install", "--no-fund", "--no-audit", "--prefix", prefix, "@fingerskier/augment"];
|
|
346
|
+
const manual = `To provision the hook runtime, run: npm install --prefix ${prefix} @fingerskier/augment`;
|
|
347
|
+
if (context.dryRun) {
|
|
348
|
+
return [`Would provision the hook runtime: npm ${installArgs.join(" ")}.`];
|
|
349
|
+
}
|
|
350
|
+
if (!options.runNpm) {
|
|
351
|
+
return [manual];
|
|
352
|
+
}
|
|
353
|
+
const result = await options.runNpm("npm", installArgs);
|
|
354
|
+
if (!result.available) {
|
|
355
|
+
return [`npm not found on PATH — ${manual}`];
|
|
356
|
+
}
|
|
357
|
+
if (!result.ok) {
|
|
358
|
+
return [`Hook runtime provisioning failed — ${manual}`];
|
|
359
|
+
}
|
|
360
|
+
return [`Provisioned the hook runtime at ${hookRuntimeEntry(prefix)}.`];
|
|
327
361
|
}
|
|
328
362
|
/**
|
|
329
363
|
* Tools whose PreToolUse fires the additional-memory recall. Scoped to the work/mutation tools
|