@folterung/project-memory 0.1.19 → 0.1.21
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 +13 -8
- package/package.json +4 -2
- package/packages/cli/coverage/lcov-report/chunking/chunker.ts.html +81 -81
- package/packages/cli/coverage/lcov-report/chunking/hash.ts.html +12 -12
- package/packages/cli/coverage/lcov-report/chunking/index.html +1 -1
- package/packages/cli/coverage/lcov-report/chunking/types.ts.html +23 -23
- package/packages/cli/coverage/lcov-report/config/index.html +1 -1
- package/packages/cli/coverage/lcov-report/config/load.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/config/types.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/embedding/index.html +1 -1
- package/packages/cli/coverage/lcov-report/embedding/stub.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/index.html +18 -18
- package/packages/cli/coverage/lcov-report/qdrant/index.html +1 -1
- package/packages/cli/coverage/lcov-report/qdrant/upsert.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/scope/allowlist.ts.html +51 -51
- package/packages/cli/coverage/lcov-report/scope/ignore.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/scope/index.html +19 -19
- package/packages/cli/coverage/lcov.info +221 -213
- package/packages/cli/coverage/tmp/{coverage-7460-1770137208481-0.json → coverage-24604-1770174821315-0.json} +1 -1
- package/packages/cli/coverage/tmp/coverage-24605-1770174821362-0.json +1 -0
- package/packages/cli/coverage/tmp/{coverage-7462-1770137208524-0.json → coverage-24606-1770174821361-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-7463-1770137208524-0.json → coverage-24607-1770174821359-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-7464-1770137208531-0.json → coverage-24608-1770174821367-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-7465-1770137208526-0.json → coverage-24609-1770174821359-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-7466-1770137208528-0.json → coverage-24610-1770174821360-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-7467-1770137208579-0.json → coverage-24611-1770174821416-0.json} +1 -1
- package/packages/cli/coverage/tmp/coverage-24612-1770174821392-0.json +1 -0
- package/packages/cli/coverage/tmp/{coverage-7469-1770137208543-0.json → coverage-24613-1770174821380-0.json} +1 -1
- package/packages/cli/dist/chunking/chunker.test.js +19 -0
- package/packages/cli/dist/chunking/chunker.test.js.map +1 -1
- package/packages/cli/dist/cli/index.js +1 -1
- package/packages/cli/dist/cli/index.js.map +1 -1
- package/packages/cli/dist/phase1/pipeline.js +17 -7
- package/packages/cli/dist/phase1/pipeline.js.map +1 -1
- package/packages/cli/dist/phase2/deep-index.js +18 -6
- package/packages/cli/dist/phase2/deep-index.js.map +1 -1
- package/packages/cli/dist/scope/allowlist.test.js +14 -1
- package/packages/cli/dist/scope/allowlist.test.js.map +1 -1
- package/packages/cli/src/chunking/chunker.test.ts +21 -0
- package/packages/cli/src/cli/index.ts +1 -1
- package/packages/cli/src/phase1/pipeline.ts +15 -8
- package/packages/cli/src/phase2/deep-index.ts +15 -6
- package/packages/cli/src/scope/allowlist.test.ts +16 -1
- package/packages/mcp-server/dist/index.js +174 -16
- package/packages/mcp-server/dist/index.js.map +1 -1
- package/packages/mcp-server/dist/system-instructions.md +2 -0
- package/packages/mcp-server/src/index.ts +204 -16
- package/packages/mcp-server/system-instructions.md +2 -0
- package/packages/server/coverage/lcov-report/api/index.html +146 -0
- package/packages/server/coverage/lcov-report/api/points.ts.html +361 -0
- package/packages/server/coverage/lcov-report/api/search.ts.html +436 -0
- package/packages/server/coverage/lcov-report/api/store.ts.html +487 -0
- package/packages/server/coverage/lcov-report/embedding/index.html +116 -0
- package/packages/server/coverage/lcov-report/embedding/stub.ts.html +184 -0
- package/packages/server/coverage/lcov-report/index.html +40 -10
- package/packages/server/coverage/lcov-report/qdrant/client.ts.html +517 -0
- package/packages/server/coverage/lcov-report/qdrant/index.html +116 -0
- package/packages/server/coverage/lcov-report/stub.ts.html +1 -1
- package/packages/server/coverage/lcov.info +674 -27
- package/packages/server/coverage/tmp/{coverage-7549-1770137209315-0.json → coverage-24692-1770174822211-0.json} +1 -1
- package/packages/server/coverage/tmp/coverage-24693-1770174822463-0.json +1 -0
- package/packages/server/coverage/tmp/coverage-24694-1770174822454-0.json +1 -0
- package/packages/server/coverage/tmp/coverage-24695-1770174822463-0.json +1 -0
- package/packages/server/coverage/tmp/{coverage-7550-1770137209349-0.json → coverage-24696-1770174822253-0.json} +1 -1
- package/packages/server/dist/api/points.d.ts +24 -0
- package/packages/server/dist/api/points.js +60 -0
- package/packages/server/dist/api/points.js.map +1 -0
- package/packages/server/dist/api/points.test.d.ts +1 -0
- package/packages/server/dist/api/points.test.js +105 -0
- package/packages/server/dist/api/points.test.js.map +1 -0
- package/packages/server/dist/api/search.d.ts +16 -0
- package/packages/server/dist/api/search.js +26 -8
- package/packages/server/dist/api/search.js.map +1 -1
- package/packages/server/dist/api/search.test.d.ts +1 -0
- package/packages/server/dist/api/search.test.js +102 -0
- package/packages/server/dist/api/search.test.js.map +1 -0
- package/packages/server/dist/api/store.d.ts +7 -0
- package/packages/server/dist/api/store.js +50 -7
- package/packages/server/dist/api/store.js.map +1 -1
- package/packages/server/dist/api/store.test.d.ts +1 -0
- package/packages/server/dist/api/store.test.js +85 -0
- package/packages/server/dist/api/store.test.js.map +1 -0
- package/packages/server/dist/index.js +2 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/qdrant/client.d.ts +4 -0
- package/packages/server/dist/qdrant/client.js +12 -0
- package/packages/server/dist/qdrant/client.js.map +1 -1
- package/packages/server/package.json +1 -1
- package/packages/server/src/api/points.test.ts +113 -0
- package/packages/server/src/api/points.ts +92 -0
- package/packages/server/src/api/search.test.ts +110 -0
- package/packages/server/src/api/search.ts +59 -13
- package/packages/server/src/api/store.test.ts +91 -0
- package/packages/server/src/api/store.ts +60 -12
- package/packages/server/src/index.ts +2 -0
- package/packages/server/src/qdrant/client.ts +15 -0
- package/packages/cli/coverage/tmp/coverage-7461-1770137208528-0.json +0 -1
- package/packages/cli/coverage/tmp/coverage-7468-1770137208547-0.json +0 -1
|
@@ -77,7 +77,44 @@ function truncate(text, max) {
|
|
|
77
77
|
return text;
|
|
78
78
|
return text.slice(0, max) + "\n... [truncated]";
|
|
79
79
|
}
|
|
80
|
-
function
|
|
80
|
+
function formatFreshness(c) {
|
|
81
|
+
if (c.indexedAt != null) {
|
|
82
|
+
const date = c.indexedAt.slice(0, 10);
|
|
83
|
+
return `indexedAt ${date}`;
|
|
84
|
+
}
|
|
85
|
+
if (c.storedAt != null) {
|
|
86
|
+
const date = c.storedAt.slice(0, 10);
|
|
87
|
+
return `storedAt ${date}`;
|
|
88
|
+
}
|
|
89
|
+
if (c.source != null)
|
|
90
|
+
return `source=${c.source}`;
|
|
91
|
+
return "";
|
|
92
|
+
}
|
|
93
|
+
function buildChunkRefLine(c) {
|
|
94
|
+
const locParts = [];
|
|
95
|
+
if (c.supersededById != null) {
|
|
96
|
+
locParts.push("[SUPERSEDED – HISTORICAL ONLY – DO NOT USE AS CURRENT] supersededById=" + c.supersededById);
|
|
97
|
+
}
|
|
98
|
+
locParts.push("id=" + c.id);
|
|
99
|
+
if (c.path != null) {
|
|
100
|
+
if (c.startLine != null && c.endLine != null) {
|
|
101
|
+
locParts.push(`${c.path} (L${c.startLine}-${c.endLine})`);
|
|
102
|
+
}
|
|
103
|
+
else if (c.startLine != null) {
|
|
104
|
+
locParts.push(`${c.path} (L${c.startLine})`);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
locParts.push(c.path);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (c.symbol != null)
|
|
111
|
+
locParts.push(`[symbol: ${c.symbol}]`);
|
|
112
|
+
const freshness = formatFreshness(c);
|
|
113
|
+
if (freshness)
|
|
114
|
+
locParts.push(freshness);
|
|
115
|
+
return `[Chunk] ${locParts.join(" ")}`;
|
|
116
|
+
}
|
|
117
|
+
function buildInjectedContext(response, refsOnly) {
|
|
81
118
|
let used = 0;
|
|
82
119
|
const parts = [];
|
|
83
120
|
for (const sm of response.systemMaps) {
|
|
@@ -95,20 +132,41 @@ function buildInjectedContext(response) {
|
|
|
95
132
|
used += t.length;
|
|
96
133
|
}
|
|
97
134
|
for (const c of response.chunks) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
135
|
+
if (refsOnly) {
|
|
136
|
+
const line = buildChunkRefLine(c);
|
|
137
|
+
parts.push(line);
|
|
138
|
+
used += line.length;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const t = truncate(c.text, PER_CHUNK_MAX_CHARS);
|
|
142
|
+
if (used + t.length > MAX_INJECTED_CHARS)
|
|
143
|
+
break;
|
|
144
|
+
const header = `${buildChunkRefLine(c)}\n`;
|
|
145
|
+
parts.push(header + t);
|
|
146
|
+
used += header.length + t.length;
|
|
147
|
+
}
|
|
103
148
|
}
|
|
104
149
|
return parts.join("\n\n---\n\n");
|
|
105
150
|
}
|
|
106
|
-
async function callSearch(baseUrl, query, limit) {
|
|
151
|
+
async function callSearch(baseUrl, query, limit, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks) {
|
|
107
152
|
try {
|
|
153
|
+
const body = { query, limit };
|
|
154
|
+
if (refsOnly === true)
|
|
155
|
+
body.refsOnly = true;
|
|
156
|
+
if (intent != null)
|
|
157
|
+
body.intent = intent;
|
|
158
|
+
if (kinds != null && kinds.length > 0)
|
|
159
|
+
body.kinds = kinds;
|
|
160
|
+
if (limitSystemMap != null)
|
|
161
|
+
body.limitSystemMap = limitSystemMap;
|
|
162
|
+
if (limitModuleSummary != null)
|
|
163
|
+
body.limitModuleSummary = limitModuleSummary;
|
|
164
|
+
if (limitChunks != null)
|
|
165
|
+
body.limitChunks = limitChunks;
|
|
108
166
|
const res = await fetch(`${baseUrl}/search`, {
|
|
109
167
|
method: "POST",
|
|
110
168
|
headers: { "Content-Type": "application/json" },
|
|
111
|
-
body: JSON.stringify(
|
|
169
|
+
body: JSON.stringify(body),
|
|
112
170
|
});
|
|
113
171
|
if (!res.ok)
|
|
114
172
|
return null;
|
|
@@ -129,6 +187,51 @@ async function callExplain(baseUrl, symbol) {
|
|
|
129
187
|
return null;
|
|
130
188
|
}
|
|
131
189
|
}
|
|
190
|
+
async function callGetPoints(baseUrl, ids) {
|
|
191
|
+
try {
|
|
192
|
+
const res = await fetch(`${baseUrl}/points/batch`, {
|
|
193
|
+
method: "POST",
|
|
194
|
+
headers: { "Content-Type": "application/json" },
|
|
195
|
+
body: JSON.stringify({ ids }),
|
|
196
|
+
});
|
|
197
|
+
if (!res.ok)
|
|
198
|
+
return null;
|
|
199
|
+
return (await res.json());
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function formatPointItemFreshness(item) {
|
|
206
|
+
if (item.indexedAt != null)
|
|
207
|
+
return `indexedAt ${item.indexedAt.slice(0, 10)}`;
|
|
208
|
+
if (item.storedAt != null)
|
|
209
|
+
return `storedAt ${item.storedAt.slice(0, 10)}`;
|
|
210
|
+
if (item.source != null)
|
|
211
|
+
return `source=${item.source}`;
|
|
212
|
+
return "";
|
|
213
|
+
}
|
|
214
|
+
function formatPointItemForContext(item) {
|
|
215
|
+
const locParts = ["id=" + item.id];
|
|
216
|
+
if (item.path != null) {
|
|
217
|
+
if (item.startLine != null && item.endLine != null) {
|
|
218
|
+
locParts.push(`${item.path} (L${item.startLine}-${item.endLine})`);
|
|
219
|
+
}
|
|
220
|
+
else if (item.startLine != null) {
|
|
221
|
+
locParts.push(`${item.path} (L${item.startLine})`);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
locParts.push(item.path);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (item.symbol != null)
|
|
228
|
+
locParts.push(`[symbol: ${item.symbol}]`);
|
|
229
|
+
const freshness = formatPointItemFreshness(item);
|
|
230
|
+
if (freshness)
|
|
231
|
+
locParts.push(freshness);
|
|
232
|
+
const header = `[Item] ${locParts.join(" ")}\n`;
|
|
233
|
+
return header + item.text;
|
|
234
|
+
}
|
|
132
235
|
async function callStore(baseUrl, body) {
|
|
133
236
|
try {
|
|
134
237
|
const res = await fetch(`${baseUrl}/store`, {
|
|
@@ -194,7 +297,7 @@ async function main() {
|
|
|
194
297
|
version: "0.1.0",
|
|
195
298
|
});
|
|
196
299
|
server.registerTool("search_project_memory", {
|
|
197
|
-
description: "Search the project's embedded index for relevant code, docs, and summaries. Use for understanding how the codebase works, where something is implemented, or what context to consider.",
|
|
300
|
+
description: "Search the project's embedded index for relevant code, docs, and summaries. Use for understanding how the codebase works, where something is implemented, or what context to consider. When refsOnly is true, returns only references (path, lines, symbol, id); use get_project_memory_items(ids) to fetch full content for chosen ids.",
|
|
198
301
|
inputSchema: z.object({
|
|
199
302
|
query: z
|
|
200
303
|
.string()
|
|
@@ -204,16 +307,31 @@ async function main() {
|
|
|
204
307
|
.optional()
|
|
205
308
|
.default(20)
|
|
206
309
|
.describe("Max number of chunks to return"),
|
|
310
|
+
refsOnly: z
|
|
311
|
+
.boolean()
|
|
312
|
+
.optional()
|
|
313
|
+
.describe("If true, return only refs (path, lines, symbol, id) with minimal text; then use get_project_memory_items(ids) for full content."),
|
|
314
|
+
intent: z
|
|
315
|
+
.enum(["factual", "planning", "navigation"])
|
|
316
|
+
.optional()
|
|
317
|
+
.describe("Search intent: factual (prefer canonical memory), planning (interpretive), navigation (refs/anchors). Influences weighting when supported."),
|
|
318
|
+
kinds: z
|
|
319
|
+
.array(z.string())
|
|
320
|
+
.optional()
|
|
321
|
+
.describe("Optional filter: only these kinds (e.g. ['chunk', 'agent_note']). Overly narrow filters can hide relevant evidence; broaden if results are sparse."),
|
|
322
|
+
limitSystemMap: z.number().optional().describe("Max system_map results (default 5)."),
|
|
323
|
+
limitModuleSummary: z.number().optional().describe("Max module_summary results (default 10)."),
|
|
324
|
+
limitChunks: z.number().optional().describe("Max chunk/entrypoint/agent_note results (default same as limit)."),
|
|
207
325
|
}),
|
|
208
|
-
}, async ({ query, limit }) => {
|
|
209
|
-
const args = { query, limit: limit ?? 20 };
|
|
326
|
+
}, async ({ query, limit, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks }) => {
|
|
327
|
+
const args = { query, limit: limit ?? 20, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks };
|
|
210
328
|
logAsked("search_project_memory", args);
|
|
211
|
-
const data = await callSearch(baseUrl, query, limit ?? 20);
|
|
329
|
+
const data = await callSearch(baseUrl, query, limit ?? 20, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks);
|
|
212
330
|
if (!data) {
|
|
213
331
|
logReturned("search_project_memory", UNREACHABLE_MSG);
|
|
214
332
|
return { content: [{ type: "text", text: UNREACHABLE_MSG }] };
|
|
215
333
|
}
|
|
216
|
-
const text = buildInjectedContext(data);
|
|
334
|
+
const text = buildInjectedContext(data, refsOnly === true);
|
|
217
335
|
logReturned("search_project_memory", text);
|
|
218
336
|
return { content: [{ type: "text", text }] };
|
|
219
337
|
});
|
|
@@ -274,9 +392,29 @@ async function main() {
|
|
|
274
392
|
.string()
|
|
275
393
|
.optional()
|
|
276
394
|
.describe("File or path this note relates to (e.g. src/scripts/sync_worker.js)."),
|
|
395
|
+
startLine: z
|
|
396
|
+
.number()
|
|
397
|
+
.optional()
|
|
398
|
+
.describe("Start line of the code location this note anchors to."),
|
|
399
|
+
endLine: z
|
|
400
|
+
.number()
|
|
401
|
+
.optional()
|
|
402
|
+
.describe("End line of the code location this note anchors to."),
|
|
403
|
+
symbol: z
|
|
404
|
+
.string()
|
|
405
|
+
.optional()
|
|
406
|
+
.describe("Symbol (e.g. function/class name) this note relates to."),
|
|
407
|
+
scope: z
|
|
408
|
+
.string()
|
|
409
|
+
.optional()
|
|
410
|
+
.describe("Scope for session summaries (e.g. branch:feature-x, experiment, timeframe). Scoped summaries must not be applied outside their scope."),
|
|
411
|
+
supersedesId: z
|
|
412
|
+
.string()
|
|
413
|
+
.optional()
|
|
414
|
+
.describe("When this entry supersedes an existing one (e.g. updated session summary), pass the id of the superseded entry."),
|
|
277
415
|
}),
|
|
278
|
-
}, async ({ content, title, path }) => {
|
|
279
|
-
const args = { content: content.slice(0, 200) + (content.length > 200 ? "…" : ""), title, path };
|
|
416
|
+
}, async ({ content, title, path, startLine, endLine, symbol, scope, supersedesId }) => {
|
|
417
|
+
const args = { content: content.slice(0, 200) + (content.length > 200 ? "…" : ""), title, path, startLine, endLine, symbol, scope, supersedesId };
|
|
280
418
|
logAsked("store_project_memory", args);
|
|
281
419
|
const trimmed = (content ?? "").trim();
|
|
282
420
|
if (!trimmed) {
|
|
@@ -284,7 +422,7 @@ async function main() {
|
|
|
284
422
|
logReturned("store_project_memory", msg);
|
|
285
423
|
return { content: [{ type: "text", text: msg }] };
|
|
286
424
|
}
|
|
287
|
-
const result = await callStore(getBaseUrl(), { content: trimmed, title, path });
|
|
425
|
+
const result = await callStore(getBaseUrl(), { content: trimmed, title, path, startLine, endLine, symbol, scope, supersedesId });
|
|
288
426
|
if ("error" in result) {
|
|
289
427
|
logReturned("store_project_memory", result.error);
|
|
290
428
|
return { content: [{ type: "text", text: result.error }] };
|
|
@@ -293,6 +431,26 @@ async function main() {
|
|
|
293
431
|
logReturned("store_project_memory", responseText);
|
|
294
432
|
return { content: [{ type: "text", text: responseText }] };
|
|
295
433
|
});
|
|
434
|
+
server.registerTool("get_project_memory_items", {
|
|
435
|
+
description: "Fetch full content and metadata for one or more project memory items by id. Use after refs-only search to get full text for chosen ids. Do not answer from refs alone—call this to get full content for reasoning or editing.",
|
|
436
|
+
inputSchema: z.object({
|
|
437
|
+
ids: z
|
|
438
|
+
.array(z.string())
|
|
439
|
+
.min(1)
|
|
440
|
+
.max(20)
|
|
441
|
+
.describe("List of point ids from search (e.g. from refs-only search). Max 20."),
|
|
442
|
+
}),
|
|
443
|
+
}, async ({ ids }) => {
|
|
444
|
+
logAsked("get_project_memory_items", { ids });
|
|
445
|
+
const data = await callGetPoints(getBaseUrl(), ids);
|
|
446
|
+
if (!data) {
|
|
447
|
+
logReturned("get_project_memory_items", UNREACHABLE_MSG);
|
|
448
|
+
return { content: [{ type: "text", text: UNREACHABLE_MSG }] };
|
|
449
|
+
}
|
|
450
|
+
const text = data.items.map(formatPointItemForContext).join("\n\n---\n\n");
|
|
451
|
+
logReturned("get_project_memory_items", text);
|
|
452
|
+
return { content: [{ type: "text", text }] };
|
|
453
|
+
});
|
|
296
454
|
server.registerResource("Project Memory system instructions", SYSTEM_INSTRUCTIONS_URI, {
|
|
297
455
|
description: SYSTEM_INSTRUCTIONS_DESCRIPTION,
|
|
298
456
|
mimeType: "text/markdown",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,5 +18,7 @@ You are using Project Memory as a **verification and consistency layer** and a *
|
|
|
18
18
|
## Storage (store_project_memory)
|
|
19
19
|
|
|
20
20
|
- **Optional and corrective only.** Store or update memory only when correcting inaccuracy, clarifying ambiguity, or distilling to a concise canonical form. Prefer **repair over accumulation**: when existing memory is wrong or verbose, prefer updating by ID over adding new entries; create new only when no relevant memory exists. Do **not** store speculative guesses, chain-of-thought, debugging notes, or conversational filler.
|
|
21
|
+
- **Exception — session/conversation summaries:** When you produce a **session or conversation summary** for context handoff or continuity, you **may** store it via `store_project_memory` **only when there is meaningful continuity value** (not every session). Content must follow the **session summary template** (Context, Decisions, Open Questions, Next Steps, optional Files/Anchors); concise and project-focused. Summaries should be reviewed or superseded over time; do not accumulate indefinitely. This is the exception to "do not store conversational filler."
|
|
22
|
+
- **Pre-store memory hygiene checklist** (for session summaries): Before storing, (a) search for existing summary in same scope/topic, (b) if found prefer superseding via `supersedesId`, (c) ensure template compliance, (d) include scope if applicable.
|
|
21
23
|
- **Justifications:** Every stored or updated memory entry must include a **short justification** (why it improves future correctness). Justifications are trust signals for future agents.
|
|
22
24
|
- **Temporal decay:** Older or low-confidence memory is more likely to require re-verification over time (e.g. after refactors, migrations, or architectural changes). Treat such entries as candidates for re-check against the repository, not as settled fact.
|
|
@@ -84,7 +84,20 @@ function logReturned(tool: string, text: string): void {
|
|
|
84
84
|
interface SearchResponse {
|
|
85
85
|
systemMaps: Array<{ id: string; text: string; path?: string }>;
|
|
86
86
|
moduleSummaries: Array<{ id: string; text: string; path?: string }>;
|
|
87
|
-
chunks: Array<{
|
|
87
|
+
chunks: Array<{
|
|
88
|
+
id: string;
|
|
89
|
+
text: string;
|
|
90
|
+
path?: string;
|
|
91
|
+
score?: number;
|
|
92
|
+
startLine?: number;
|
|
93
|
+
endLine?: number;
|
|
94
|
+
symbol?: string;
|
|
95
|
+
kind?: string;
|
|
96
|
+
indexedAt?: string;
|
|
97
|
+
storedAt?: string;
|
|
98
|
+
source?: string;
|
|
99
|
+
supersededById?: string;
|
|
100
|
+
}>;
|
|
88
101
|
}
|
|
89
102
|
|
|
90
103
|
function getBaseUrl(): string {
|
|
@@ -96,7 +109,41 @@ function truncate(text: string, max: number): string {
|
|
|
96
109
|
return text.slice(0, max) + "\n... [truncated]";
|
|
97
110
|
}
|
|
98
111
|
|
|
99
|
-
function
|
|
112
|
+
function formatFreshness(c: SearchResponse["chunks"][0]): string {
|
|
113
|
+
if (c.indexedAt != null) {
|
|
114
|
+
const date = c.indexedAt.slice(0, 10);
|
|
115
|
+
return `indexedAt ${date}`;
|
|
116
|
+
}
|
|
117
|
+
if (c.storedAt != null) {
|
|
118
|
+
const date = c.storedAt.slice(0, 10);
|
|
119
|
+
return `storedAt ${date}`;
|
|
120
|
+
}
|
|
121
|
+
if (c.source != null) return `source=${c.source}`;
|
|
122
|
+
return "";
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function buildChunkRefLine(c: SearchResponse["chunks"][0]): string {
|
|
126
|
+
const locParts: string[] = [];
|
|
127
|
+
if (c.supersededById != null) {
|
|
128
|
+
locParts.push("[SUPERSEDED – HISTORICAL ONLY – DO NOT USE AS CURRENT] supersededById=" + c.supersededById);
|
|
129
|
+
}
|
|
130
|
+
locParts.push("id=" + c.id);
|
|
131
|
+
if (c.path != null) {
|
|
132
|
+
if (c.startLine != null && c.endLine != null) {
|
|
133
|
+
locParts.push(`${c.path} (L${c.startLine}-${c.endLine})`);
|
|
134
|
+
} else if (c.startLine != null) {
|
|
135
|
+
locParts.push(`${c.path} (L${c.startLine})`);
|
|
136
|
+
} else {
|
|
137
|
+
locParts.push(c.path);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (c.symbol != null) locParts.push(`[symbol: ${c.symbol}]`);
|
|
141
|
+
const freshness = formatFreshness(c);
|
|
142
|
+
if (freshness) locParts.push(freshness);
|
|
143
|
+
return `[Chunk] ${locParts.join(" ")}`;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function buildInjectedContext(response: SearchResponse, refsOnly: boolean): string {
|
|
100
147
|
let used = 0;
|
|
101
148
|
const parts: string[] = [];
|
|
102
149
|
|
|
@@ -113,10 +160,17 @@ function buildInjectedContext(response: SearchResponse): string {
|
|
|
113
160
|
used += t.length;
|
|
114
161
|
}
|
|
115
162
|
for (const c of response.chunks) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
163
|
+
if (refsOnly) {
|
|
164
|
+
const line = buildChunkRefLine(c);
|
|
165
|
+
parts.push(line);
|
|
166
|
+
used += line.length;
|
|
167
|
+
} else {
|
|
168
|
+
const t = truncate(c.text, PER_CHUNK_MAX_CHARS);
|
|
169
|
+
if (used + t.length > MAX_INJECTED_CHARS) break;
|
|
170
|
+
const header = `${buildChunkRefLine(c)}\n`;
|
|
171
|
+
parts.push(header + t);
|
|
172
|
+
used += header.length + t.length;
|
|
173
|
+
}
|
|
120
174
|
}
|
|
121
175
|
|
|
122
176
|
return parts.join("\n\n---\n\n");
|
|
@@ -125,13 +179,26 @@ function buildInjectedContext(response: SearchResponse): string {
|
|
|
125
179
|
async function callSearch(
|
|
126
180
|
baseUrl: string,
|
|
127
181
|
query: string,
|
|
128
|
-
limit: number
|
|
182
|
+
limit: number,
|
|
183
|
+
refsOnly?: boolean,
|
|
184
|
+
intent?: "factual" | "planning" | "navigation",
|
|
185
|
+
kinds?: string[],
|
|
186
|
+
limitSystemMap?: number,
|
|
187
|
+
limitModuleSummary?: number,
|
|
188
|
+
limitChunks?: number
|
|
129
189
|
): Promise<SearchResponse | null> {
|
|
130
190
|
try {
|
|
191
|
+
const body: Record<string, unknown> = { query, limit };
|
|
192
|
+
if (refsOnly === true) body.refsOnly = true;
|
|
193
|
+
if (intent != null) body.intent = intent;
|
|
194
|
+
if (kinds != null && kinds.length > 0) body.kinds = kinds;
|
|
195
|
+
if (limitSystemMap != null) body.limitSystemMap = limitSystemMap;
|
|
196
|
+
if (limitModuleSummary != null) body.limitModuleSummary = limitModuleSummary;
|
|
197
|
+
if (limitChunks != null) body.limitChunks = limitChunks;
|
|
131
198
|
const res = await fetch(`${baseUrl}/search`, {
|
|
132
199
|
method: "POST",
|
|
133
200
|
headers: { "Content-Type": "application/json" },
|
|
134
|
-
body: JSON.stringify(
|
|
201
|
+
body: JSON.stringify(body),
|
|
135
202
|
});
|
|
136
203
|
if (!res.ok) return null;
|
|
137
204
|
return (await res.json()) as SearchResponse;
|
|
@@ -163,6 +230,66 @@ interface StoreBody {
|
|
|
163
230
|
content: string;
|
|
164
231
|
title?: string;
|
|
165
232
|
path?: string;
|
|
233
|
+
startLine?: number;
|
|
234
|
+
endLine?: number;
|
|
235
|
+
symbol?: string;
|
|
236
|
+
scope?: string;
|
|
237
|
+
supersedesId?: string;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
interface PointItem {
|
|
241
|
+
id: string;
|
|
242
|
+
text: string;
|
|
243
|
+
path?: string;
|
|
244
|
+
startLine?: number;
|
|
245
|
+
endLine?: number;
|
|
246
|
+
symbol?: string;
|
|
247
|
+
kind?: string;
|
|
248
|
+
indexedAt?: string;
|
|
249
|
+
storedAt?: string;
|
|
250
|
+
source?: string;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async function callGetPoints(
|
|
254
|
+
baseUrl: string,
|
|
255
|
+
ids: string[]
|
|
256
|
+
): Promise<{ items: PointItem[] } | null> {
|
|
257
|
+
try {
|
|
258
|
+
const res = await fetch(`${baseUrl}/points/batch`, {
|
|
259
|
+
method: "POST",
|
|
260
|
+
headers: { "Content-Type": "application/json" },
|
|
261
|
+
body: JSON.stringify({ ids }),
|
|
262
|
+
});
|
|
263
|
+
if (!res.ok) return null;
|
|
264
|
+
return (await res.json()) as { items: PointItem[] };
|
|
265
|
+
} catch {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function formatPointItemFreshness(item: PointItem): string {
|
|
271
|
+
if (item.indexedAt != null) return `indexedAt ${item.indexedAt.slice(0, 10)}`;
|
|
272
|
+
if (item.storedAt != null) return `storedAt ${item.storedAt.slice(0, 10)}`;
|
|
273
|
+
if (item.source != null) return `source=${item.source}`;
|
|
274
|
+
return "";
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function formatPointItemForContext(item: PointItem): string {
|
|
278
|
+
const locParts: string[] = ["id=" + item.id];
|
|
279
|
+
if (item.path != null) {
|
|
280
|
+
if (item.startLine != null && item.endLine != null) {
|
|
281
|
+
locParts.push(`${item.path} (L${item.startLine}-${item.endLine})`);
|
|
282
|
+
} else if (item.startLine != null) {
|
|
283
|
+
locParts.push(`${item.path} (L${item.startLine})`);
|
|
284
|
+
} else {
|
|
285
|
+
locParts.push(item.path);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (item.symbol != null) locParts.push(`[symbol: ${item.symbol}]`);
|
|
289
|
+
const freshness = formatPointItemFreshness(item);
|
|
290
|
+
if (freshness) locParts.push(freshness);
|
|
291
|
+
const header = `[Item] ${locParts.join(" ")}\n`;
|
|
292
|
+
return header + item.text;
|
|
166
293
|
}
|
|
167
294
|
|
|
168
295
|
async function callStore(
|
|
@@ -245,7 +372,7 @@ async function main(): Promise<void> {
|
|
|
245
372
|
"search_project_memory",
|
|
246
373
|
{
|
|
247
374
|
description:
|
|
248
|
-
"Search the project's embedded index for relevant code, docs, and summaries. Use for understanding how the codebase works, where something is implemented, or what context to consider.",
|
|
375
|
+
"Search the project's embedded index for relevant code, docs, and summaries. Use for understanding how the codebase works, where something is implemented, or what context to consider. When refsOnly is true, returns only references (path, lines, symbol, id); use get_project_memory_items(ids) to fetch full content for chosen ids.",
|
|
249
376
|
inputSchema: z.object({
|
|
250
377
|
query: z
|
|
251
378
|
.string()
|
|
@@ -257,17 +384,32 @@ async function main(): Promise<void> {
|
|
|
257
384
|
.optional()
|
|
258
385
|
.default(20)
|
|
259
386
|
.describe("Max number of chunks to return"),
|
|
387
|
+
refsOnly: z
|
|
388
|
+
.boolean()
|
|
389
|
+
.optional()
|
|
390
|
+
.describe("If true, return only refs (path, lines, symbol, id) with minimal text; then use get_project_memory_items(ids) for full content."),
|
|
391
|
+
intent: z
|
|
392
|
+
.enum(["factual", "planning", "navigation"])
|
|
393
|
+
.optional()
|
|
394
|
+
.describe("Search intent: factual (prefer canonical memory), planning (interpretive), navigation (refs/anchors). Influences weighting when supported."),
|
|
395
|
+
kinds: z
|
|
396
|
+
.array(z.string())
|
|
397
|
+
.optional()
|
|
398
|
+
.describe("Optional filter: only these kinds (e.g. ['chunk', 'agent_note']). Overly narrow filters can hide relevant evidence; broaden if results are sparse."),
|
|
399
|
+
limitSystemMap: z.number().optional().describe("Max system_map results (default 5)."),
|
|
400
|
+
limitModuleSummary: z.number().optional().describe("Max module_summary results (default 10)."),
|
|
401
|
+
limitChunks: z.number().optional().describe("Max chunk/entrypoint/agent_note results (default same as limit)."),
|
|
260
402
|
}),
|
|
261
403
|
},
|
|
262
|
-
async ({ query, limit }) => {
|
|
263
|
-
const args = { query, limit: limit ?? 20 };
|
|
404
|
+
async ({ query, limit, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks }) => {
|
|
405
|
+
const args = { query, limit: limit ?? 20, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks };
|
|
264
406
|
logAsked("search_project_memory", args);
|
|
265
|
-
const data = await callSearch(baseUrl, query, limit ?? 20);
|
|
407
|
+
const data = await callSearch(baseUrl, query, limit ?? 20, refsOnly, intent, kinds, limitSystemMap, limitModuleSummary, limitChunks);
|
|
266
408
|
if (!data) {
|
|
267
409
|
logReturned("search_project_memory", UNREACHABLE_MSG);
|
|
268
410
|
return { content: [{ type: "text" as const, text: UNREACHABLE_MSG }] };
|
|
269
411
|
}
|
|
270
|
-
const text = buildInjectedContext(data);
|
|
412
|
+
const text = buildInjectedContext(data, refsOnly === true);
|
|
271
413
|
logReturned("search_project_memory", text);
|
|
272
414
|
return { content: [{ type: "text" as const, text }] };
|
|
273
415
|
}
|
|
@@ -349,10 +491,30 @@ async function main(): Promise<void> {
|
|
|
349
491
|
.string()
|
|
350
492
|
.optional()
|
|
351
493
|
.describe("File or path this note relates to (e.g. src/scripts/sync_worker.js)."),
|
|
494
|
+
startLine: z
|
|
495
|
+
.number()
|
|
496
|
+
.optional()
|
|
497
|
+
.describe("Start line of the code location this note anchors to."),
|
|
498
|
+
endLine: z
|
|
499
|
+
.number()
|
|
500
|
+
.optional()
|
|
501
|
+
.describe("End line of the code location this note anchors to."),
|
|
502
|
+
symbol: z
|
|
503
|
+
.string()
|
|
504
|
+
.optional()
|
|
505
|
+
.describe("Symbol (e.g. function/class name) this note relates to."),
|
|
506
|
+
scope: z
|
|
507
|
+
.string()
|
|
508
|
+
.optional()
|
|
509
|
+
.describe("Scope for session summaries (e.g. branch:feature-x, experiment, timeframe). Scoped summaries must not be applied outside their scope."),
|
|
510
|
+
supersedesId: z
|
|
511
|
+
.string()
|
|
512
|
+
.optional()
|
|
513
|
+
.describe("When this entry supersedes an existing one (e.g. updated session summary), pass the id of the superseded entry."),
|
|
352
514
|
}),
|
|
353
515
|
},
|
|
354
|
-
async ({ content, title, path }) => {
|
|
355
|
-
const args = { content: content.slice(0, 200) + (content.length > 200 ? "…" : ""), title, path };
|
|
516
|
+
async ({ content, title, path, startLine, endLine, symbol, scope, supersedesId }) => {
|
|
517
|
+
const args = { content: content.slice(0, 200) + (content.length > 200 ? "…" : ""), title, path, startLine, endLine, symbol, scope, supersedesId };
|
|
356
518
|
logAsked("store_project_memory", args);
|
|
357
519
|
const trimmed = (content ?? "").trim();
|
|
358
520
|
if (!trimmed) {
|
|
@@ -360,7 +522,7 @@ async function main(): Promise<void> {
|
|
|
360
522
|
logReturned("store_project_memory", msg);
|
|
361
523
|
return { content: [{ type: "text" as const, text: msg }] };
|
|
362
524
|
}
|
|
363
|
-
const result = await callStore(getBaseUrl(), { content: trimmed, title, path });
|
|
525
|
+
const result = await callStore(getBaseUrl(), { content: trimmed, title, path, startLine, endLine, symbol, scope, supersedesId });
|
|
364
526
|
if ("error" in result) {
|
|
365
527
|
logReturned("store_project_memory", result.error);
|
|
366
528
|
return { content: [{ type: "text" as const, text: result.error }] };
|
|
@@ -371,6 +533,32 @@ async function main(): Promise<void> {
|
|
|
371
533
|
}
|
|
372
534
|
);
|
|
373
535
|
|
|
536
|
+
server.registerTool(
|
|
537
|
+
"get_project_memory_items",
|
|
538
|
+
{
|
|
539
|
+
description:
|
|
540
|
+
"Fetch full content and metadata for one or more project memory items by id. Use after refs-only search to get full text for chosen ids. Do not answer from refs alone—call this to get full content for reasoning or editing.",
|
|
541
|
+
inputSchema: z.object({
|
|
542
|
+
ids: z
|
|
543
|
+
.array(z.string())
|
|
544
|
+
.min(1)
|
|
545
|
+
.max(20)
|
|
546
|
+
.describe("List of point ids from search (e.g. from refs-only search). Max 20."),
|
|
547
|
+
}),
|
|
548
|
+
},
|
|
549
|
+
async ({ ids }) => {
|
|
550
|
+
logAsked("get_project_memory_items", { ids });
|
|
551
|
+
const data = await callGetPoints(getBaseUrl(), ids);
|
|
552
|
+
if (!data) {
|
|
553
|
+
logReturned("get_project_memory_items", UNREACHABLE_MSG);
|
|
554
|
+
return { content: [{ type: "text" as const, text: UNREACHABLE_MSG }] };
|
|
555
|
+
}
|
|
556
|
+
const text = data.items.map(formatPointItemForContext).join("\n\n---\n\n");
|
|
557
|
+
logReturned("get_project_memory_items", text);
|
|
558
|
+
return { content: [{ type: "text" as const, text }] };
|
|
559
|
+
}
|
|
560
|
+
);
|
|
561
|
+
|
|
374
562
|
server.registerResource(
|
|
375
563
|
"Project Memory system instructions",
|
|
376
564
|
SYSTEM_INSTRUCTIONS_URI,
|
|
@@ -18,5 +18,7 @@ You are using Project Memory as a **verification and consistency layer** and a *
|
|
|
18
18
|
## Storage (store_project_memory)
|
|
19
19
|
|
|
20
20
|
- **Optional and corrective only.** Store or update memory only when correcting inaccuracy, clarifying ambiguity, or distilling to a concise canonical form. Prefer **repair over accumulation**: when existing memory is wrong or verbose, prefer updating by ID over adding new entries; create new only when no relevant memory exists. Do **not** store speculative guesses, chain-of-thought, debugging notes, or conversational filler.
|
|
21
|
+
- **Exception — session/conversation summaries:** When you produce a **session or conversation summary** for context handoff or continuity, you **may** store it via `store_project_memory` **only when there is meaningful continuity value** (not every session). Content must follow the **session summary template** (Context, Decisions, Open Questions, Next Steps, optional Files/Anchors); concise and project-focused. Summaries should be reviewed or superseded over time; do not accumulate indefinitely. This is the exception to "do not store conversational filler."
|
|
22
|
+
- **Pre-store memory hygiene checklist** (for session summaries): Before storing, (a) search for existing summary in same scope/topic, (b) if found prefer superseding via `supersedesId`, (c) ensure template compliance, (d) include scope if applicable.
|
|
21
23
|
- **Justifications:** Every stored or updated memory entry must include a **short justification** (why it improves future correctness). Justifications are trust signals for future agents.
|
|
22
24
|
- **Temporal decay:** Older or low-confidence memory is more likely to require re-verification over time (e.g. after refactors, migrations, or architectural changes). Treat such entries as candidates for re-check against the repository, not as settled fact.
|