@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.
Files changed (98) hide show
  1. package/README.md +13 -8
  2. package/package.json +4 -2
  3. package/packages/cli/coverage/lcov-report/chunking/chunker.ts.html +81 -81
  4. package/packages/cli/coverage/lcov-report/chunking/hash.ts.html +12 -12
  5. package/packages/cli/coverage/lcov-report/chunking/index.html +1 -1
  6. package/packages/cli/coverage/lcov-report/chunking/types.ts.html +23 -23
  7. package/packages/cli/coverage/lcov-report/config/index.html +1 -1
  8. package/packages/cli/coverage/lcov-report/config/load.ts.html +1 -1
  9. package/packages/cli/coverage/lcov-report/config/types.ts.html +1 -1
  10. package/packages/cli/coverage/lcov-report/embedding/index.html +1 -1
  11. package/packages/cli/coverage/lcov-report/embedding/stub.ts.html +1 -1
  12. package/packages/cli/coverage/lcov-report/index.html +18 -18
  13. package/packages/cli/coverage/lcov-report/qdrant/index.html +1 -1
  14. package/packages/cli/coverage/lcov-report/qdrant/upsert.ts.html +1 -1
  15. package/packages/cli/coverage/lcov-report/scope/allowlist.ts.html +51 -51
  16. package/packages/cli/coverage/lcov-report/scope/ignore.ts.html +1 -1
  17. package/packages/cli/coverage/lcov-report/scope/index.html +19 -19
  18. package/packages/cli/coverage/lcov.info +221 -213
  19. package/packages/cli/coverage/tmp/{coverage-7460-1770137208481-0.json → coverage-24604-1770174821315-0.json} +1 -1
  20. package/packages/cli/coverage/tmp/coverage-24605-1770174821362-0.json +1 -0
  21. package/packages/cli/coverage/tmp/{coverage-7462-1770137208524-0.json → coverage-24606-1770174821361-0.json} +1 -1
  22. package/packages/cli/coverage/tmp/{coverage-7463-1770137208524-0.json → coverage-24607-1770174821359-0.json} +1 -1
  23. package/packages/cli/coverage/tmp/{coverage-7464-1770137208531-0.json → coverage-24608-1770174821367-0.json} +1 -1
  24. package/packages/cli/coverage/tmp/{coverage-7465-1770137208526-0.json → coverage-24609-1770174821359-0.json} +1 -1
  25. package/packages/cli/coverage/tmp/{coverage-7466-1770137208528-0.json → coverage-24610-1770174821360-0.json} +1 -1
  26. package/packages/cli/coverage/tmp/{coverage-7467-1770137208579-0.json → coverage-24611-1770174821416-0.json} +1 -1
  27. package/packages/cli/coverage/tmp/coverage-24612-1770174821392-0.json +1 -0
  28. package/packages/cli/coverage/tmp/{coverage-7469-1770137208543-0.json → coverage-24613-1770174821380-0.json} +1 -1
  29. package/packages/cli/dist/chunking/chunker.test.js +19 -0
  30. package/packages/cli/dist/chunking/chunker.test.js.map +1 -1
  31. package/packages/cli/dist/cli/index.js +1 -1
  32. package/packages/cli/dist/cli/index.js.map +1 -1
  33. package/packages/cli/dist/phase1/pipeline.js +17 -7
  34. package/packages/cli/dist/phase1/pipeline.js.map +1 -1
  35. package/packages/cli/dist/phase2/deep-index.js +18 -6
  36. package/packages/cli/dist/phase2/deep-index.js.map +1 -1
  37. package/packages/cli/dist/scope/allowlist.test.js +14 -1
  38. package/packages/cli/dist/scope/allowlist.test.js.map +1 -1
  39. package/packages/cli/src/chunking/chunker.test.ts +21 -0
  40. package/packages/cli/src/cli/index.ts +1 -1
  41. package/packages/cli/src/phase1/pipeline.ts +15 -8
  42. package/packages/cli/src/phase2/deep-index.ts +15 -6
  43. package/packages/cli/src/scope/allowlist.test.ts +16 -1
  44. package/packages/mcp-server/dist/index.js +174 -16
  45. package/packages/mcp-server/dist/index.js.map +1 -1
  46. package/packages/mcp-server/dist/system-instructions.md +2 -0
  47. package/packages/mcp-server/src/index.ts +204 -16
  48. package/packages/mcp-server/system-instructions.md +2 -0
  49. package/packages/server/coverage/lcov-report/api/index.html +146 -0
  50. package/packages/server/coverage/lcov-report/api/points.ts.html +361 -0
  51. package/packages/server/coverage/lcov-report/api/search.ts.html +436 -0
  52. package/packages/server/coverage/lcov-report/api/store.ts.html +487 -0
  53. package/packages/server/coverage/lcov-report/embedding/index.html +116 -0
  54. package/packages/server/coverage/lcov-report/embedding/stub.ts.html +184 -0
  55. package/packages/server/coverage/lcov-report/index.html +40 -10
  56. package/packages/server/coverage/lcov-report/qdrant/client.ts.html +517 -0
  57. package/packages/server/coverage/lcov-report/qdrant/index.html +116 -0
  58. package/packages/server/coverage/lcov-report/stub.ts.html +1 -1
  59. package/packages/server/coverage/lcov.info +674 -27
  60. package/packages/server/coverage/tmp/{coverage-7549-1770137209315-0.json → coverage-24692-1770174822211-0.json} +1 -1
  61. package/packages/server/coverage/tmp/coverage-24693-1770174822463-0.json +1 -0
  62. package/packages/server/coverage/tmp/coverage-24694-1770174822454-0.json +1 -0
  63. package/packages/server/coverage/tmp/coverage-24695-1770174822463-0.json +1 -0
  64. package/packages/server/coverage/tmp/{coverage-7550-1770137209349-0.json → coverage-24696-1770174822253-0.json} +1 -1
  65. package/packages/server/dist/api/points.d.ts +24 -0
  66. package/packages/server/dist/api/points.js +60 -0
  67. package/packages/server/dist/api/points.js.map +1 -0
  68. package/packages/server/dist/api/points.test.d.ts +1 -0
  69. package/packages/server/dist/api/points.test.js +105 -0
  70. package/packages/server/dist/api/points.test.js.map +1 -0
  71. package/packages/server/dist/api/search.d.ts +16 -0
  72. package/packages/server/dist/api/search.js +26 -8
  73. package/packages/server/dist/api/search.js.map +1 -1
  74. package/packages/server/dist/api/search.test.d.ts +1 -0
  75. package/packages/server/dist/api/search.test.js +102 -0
  76. package/packages/server/dist/api/search.test.js.map +1 -0
  77. package/packages/server/dist/api/store.d.ts +7 -0
  78. package/packages/server/dist/api/store.js +50 -7
  79. package/packages/server/dist/api/store.js.map +1 -1
  80. package/packages/server/dist/api/store.test.d.ts +1 -0
  81. package/packages/server/dist/api/store.test.js +85 -0
  82. package/packages/server/dist/api/store.test.js.map +1 -0
  83. package/packages/server/dist/index.js +2 -0
  84. package/packages/server/dist/index.js.map +1 -1
  85. package/packages/server/dist/qdrant/client.d.ts +4 -0
  86. package/packages/server/dist/qdrant/client.js +12 -0
  87. package/packages/server/dist/qdrant/client.js.map +1 -1
  88. package/packages/server/package.json +1 -1
  89. package/packages/server/src/api/points.test.ts +113 -0
  90. package/packages/server/src/api/points.ts +92 -0
  91. package/packages/server/src/api/search.test.ts +110 -0
  92. package/packages/server/src/api/search.ts +59 -13
  93. package/packages/server/src/api/store.test.ts +91 -0
  94. package/packages/server/src/api/store.ts +60 -12
  95. package/packages/server/src/index.ts +2 -0
  96. package/packages/server/src/qdrant/client.ts +15 -0
  97. package/packages/cli/coverage/tmp/coverage-7461-1770137208528-0.json +0 -1
  98. 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 buildInjectedContext(response) {
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
- const t = truncate(c.text, PER_CHUNK_MAX_CHARS);
99
- if (used + t.length > MAX_INJECTED_CHARS)
100
- break;
101
- parts.push(`[Chunk] ${c.path ?? c.id}\n${t}`);
102
- used += t.length;
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({ query, limit }),
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<{ id: string; text: string; path?: string; score?: number }>;
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 buildInjectedContext(response: SearchResponse): string {
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
- const t = truncate(c.text, PER_CHUNK_MAX_CHARS);
117
- if (used + t.length > MAX_INJECTED_CHARS) break;
118
- parts.push(`[Chunk] ${c.path ?? c.id}\n${t}`);
119
- used += t.length;
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({ query, limit }),
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.