@blamechris/repo-memory 0.11.0 → 0.13.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.
Files changed (78) hide show
  1. package/README.md +1 -1
  2. package/dist/cache/generation.d.ts +50 -0
  3. package/dist/cache/generation.d.ts.map +1 -0
  4. package/dist/cache/generation.js +62 -0
  5. package/dist/cache/generation.js.map +1 -0
  6. package/dist/cache/invalidation.d.ts +3 -1
  7. package/dist/cache/invalidation.d.ts.map +1 -1
  8. package/dist/cache/invalidation.js +4 -5
  9. package/dist/cache/invalidation.js.map +1 -1
  10. package/dist/cache/ranking.d.ts +51 -6
  11. package/dist/cache/ranking.d.ts.map +1 -1
  12. package/dist/cache/ranking.js +92 -18
  13. package/dist/cache/ranking.js.map +1 -1
  14. package/dist/cache/store.d.ts +32 -0
  15. package/dist/cache/store.d.ts.map +1 -1
  16. package/dist/cache/store.js +110 -19
  17. package/dist/cache/store.js.map +1 -1
  18. package/dist/config.d.ts +1 -1
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/graph/dependency-graph.d.ts +14 -0
  21. package/dist/graph/dependency-graph.d.ts.map +1 -1
  22. package/dist/graph/dependency-graph.js +70 -5
  23. package/dist/graph/dependency-graph.js.map +1 -1
  24. package/dist/graph/refresh.d.ts +21 -0
  25. package/dist/graph/refresh.d.ts.map +1 -0
  26. package/dist/graph/refresh.js +101 -0
  27. package/dist/graph/refresh.js.map +1 -0
  28. package/dist/indexer/imports.d.ts.map +1 -1
  29. package/dist/indexer/imports.js +152 -86
  30. package/dist/indexer/imports.js.map +1 -1
  31. package/dist/indexer/project-map.d.ts +0 -2
  32. package/dist/indexer/project-map.d.ts.map +1 -1
  33. package/dist/indexer/project-map.js +0 -3
  34. package/dist/indexer/project-map.js.map +1 -1
  35. package/dist/indexer/source-extensions.d.ts +10 -0
  36. package/dist/indexer/source-extensions.d.ts.map +1 -0
  37. package/dist/indexer/source-extensions.js +28 -0
  38. package/dist/indexer/source-extensions.js.map +1 -0
  39. package/dist/indexer/summarize.d.ts +16 -1
  40. package/dist/indexer/summarize.d.ts.map +1 -1
  41. package/dist/indexer/summarize.js +39 -24
  42. package/dist/indexer/summarize.js.map +1 -1
  43. package/dist/persistence/db.d.ts.map +1 -1
  44. package/dist/persistence/db.js +78 -13
  45. package/dist/persistence/db.js.map +1 -1
  46. package/dist/server.js +18 -11
  47. package/dist/server.js.map +1 -1
  48. package/dist/tools/batch-file-summaries.d.ts +0 -1
  49. package/dist/tools/batch-file-summaries.d.ts.map +1 -1
  50. package/dist/tools/batch-file-summaries.js +1 -1
  51. package/dist/tools/batch-file-summaries.js.map +1 -1
  52. package/dist/tools/force-reread.d.ts.map +1 -1
  53. package/dist/tools/force-reread.js +7 -0
  54. package/dist/tools/force-reread.js.map +1 -1
  55. package/dist/tools/get-changed-files.d.ts.map +1 -1
  56. package/dist/tools/get-changed-files.js +23 -5
  57. package/dist/tools/get-changed-files.js.map +1 -1
  58. package/dist/tools/get-dependency-graph.d.ts +9 -7
  59. package/dist/tools/get-dependency-graph.d.ts.map +1 -1
  60. package/dist/tools/get-dependency-graph.js +51 -74
  61. package/dist/tools/get-dependency-graph.js.map +1 -1
  62. package/dist/tools/get-file-summary.d.ts +2 -3
  63. package/dist/tools/get-file-summary.d.ts.map +1 -1
  64. package/dist/tools/get-file-summary.js +11 -19
  65. package/dist/tools/get-file-summary.js.map +1 -1
  66. package/dist/tools/get-project-map.d.ts.map +1 -1
  67. package/dist/tools/get-project-map.js +9 -1
  68. package/dist/tools/get-project-map.js.map +1 -1
  69. package/dist/tools/get-related-files.d.ts.map +1 -1
  70. package/dist/tools/get-related-files.js +19 -71
  71. package/dist/tools/get-related-files.js.map +1 -1
  72. package/dist/tools/search-by-purpose.d.ts +2 -3
  73. package/dist/tools/search-by-purpose.d.ts.map +1 -1
  74. package/dist/tools/search-by-purpose.js +103 -44
  75. package/dist/tools/search-by-purpose.js.map +1 -1
  76. package/dist/types.d.ts +6 -0
  77. package/dist/types.d.ts.map +1 -1
  78. package/package.json +1 -1
@@ -1,7 +1,65 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { hashContents } from '../cache/hash.js';
1
4
  import { CacheStore } from '../cache/store.js';
5
+ import { ensureSummaryGeneration, summarizeForProject } from '../indexer/summarize.js';
2
6
  import { TelemetryTracker } from '../telemetry/tracker.js';
3
7
  import { toPosix } from '../utils/posix-path.js';
4
- export function searchByPurpose(projectRoot, query, limit, pathPrefix) {
8
+ /** Max exports listed per result; the rest collapse into `exportsTruncated`. */
9
+ const MAX_EXPORTS_PER_RESULT = 5;
10
+ /** Score a summary against the query terms; null when nothing matched. */
11
+ function scoreSummary(summary, queryTerms) {
12
+ const matchedOn = [];
13
+ let score = 0;
14
+ const purpose = summary.purpose.toLowerCase();
15
+ const purposeMatches = queryTerms.filter((term) => purpose.includes(term));
16
+ if (purposeMatches.length > 0) {
17
+ matchedOn.push('purpose');
18
+ score += purposeMatches.length * 3; // purpose matches weighted highest
19
+ }
20
+ const exportsLower = summary.exports.map((e) => e.toLowerCase());
21
+ const exportMatches = queryTerms.filter((term) => exportsLower.some((exp) => exp.includes(term)));
22
+ if (exportMatches.length > 0) {
23
+ matchedOn.push('exports');
24
+ score += exportMatches.length * 2;
25
+ }
26
+ const declsLower = summary.topLevelDeclarations.map((d) => d.toLowerCase());
27
+ const declMatches = queryTerms.filter((term) => declsLower.some((decl) => decl.includes(term)));
28
+ if (declMatches.length > 0) {
29
+ matchedOn.push('declarations');
30
+ score += declMatches.length;
31
+ }
32
+ return matchedOn.length > 0 ? { matchedOn, score } : null;
33
+ }
34
+ /**
35
+ * Re-hash a matched candidate before serving it (never return stale data).
36
+ * - Missing/unreadable file: evict the dead cache entry and drop the result.
37
+ * - Hash mismatch: regenerate the summary through the standard path (same
38
+ * semantics as get_file_summary's cache-miss branch), re-score it against
39
+ * the query, and keep it only if it still matches.
40
+ */
41
+ async function validateCandidate(projectRoot, store, candidate, queryTerms) {
42
+ let contents;
43
+ try {
44
+ contents = await readFile(join(projectRoot, candidate.entry.path), 'utf-8');
45
+ }
46
+ catch {
47
+ store.deleteEntry(candidate.entry.path);
48
+ return null;
49
+ }
50
+ const currentHash = hashContents(contents);
51
+ if (currentHash === candidate.entry.hash)
52
+ return candidate;
53
+ const summary = await summarizeForProject(projectRoot, candidate.entry.path, contents);
54
+ store.setEntry(candidate.entry.path, currentHash, summary);
55
+ const match = scoreSummary(summary, queryTerms);
56
+ if (!match)
57
+ return null;
58
+ return { entry: candidate.entry, summary, matchedOn: match.matchedOn, score: match.score };
59
+ }
60
+ export async function searchByPurpose(projectRoot, query, limit, pathPrefix) {
61
+ // Never serve summaries from an invalidated generation (audit invariant I5).
62
+ ensureSummaryGeneration(projectRoot);
5
63
  const store = new CacheStore(projectRoot);
6
64
  const effectiveLimit = limit ?? 20;
7
65
  // Optional scope: restrict the search to files at or under a directory/prefix.
@@ -23,57 +81,58 @@ export function searchByPurpose(projectRoot, query, limit, pathPrefix) {
23
81
  })
24
82
  : allEntries;
25
83
  const queryTerms = query.toLowerCase().split(/\s+/).filter(Boolean);
26
- const results = [];
84
+ const candidates = [];
27
85
  for (const entry of entries) {
28
86
  if (!entry.summary)
29
87
  continue;
30
- const matchedOn = [];
31
- let score = 0;
32
- const purpose = entry.summary.purpose.toLowerCase();
33
- const purposeMatches = queryTerms.filter(term => purpose.includes(term));
34
- if (purposeMatches.length > 0) {
35
- matchedOn.push('purpose');
36
- score += purposeMatches.length * 3; // purpose matches weighted highest
37
- }
38
- const exportsLower = entry.summary.exports.map(e => e.toLowerCase());
39
- const exportMatches = queryTerms.filter(term => exportsLower.some(exp => exp.includes(term)));
40
- if (exportMatches.length > 0) {
41
- matchedOn.push('exports');
42
- score += exportMatches.length * 2;
43
- }
44
- const declsLower = entry.summary.topLevelDeclarations.map(d => d.toLowerCase());
45
- const declMatches = queryTerms.filter(term => declsLower.some(decl => decl.includes(term)));
46
- if (declMatches.length > 0) {
47
- matchedOn.push('declarations');
48
- score += declMatches.length;
49
- }
50
- if (matchedOn.length > 0) {
51
- results.push({
52
- path: entry.path,
53
- purpose: entry.summary.purpose,
54
- matchedOn,
55
- exports: entry.summary.exports,
56
- confidence: entry.summary.confidence,
57
- score,
58
- });
88
+ const match = scoreSummary(entry.summary, queryTerms);
89
+ if (match) {
90
+ candidates.push({ entry, summary: entry.summary, ...match });
59
91
  }
60
92
  }
61
93
  // Sort by score descending
62
- results.sort((a, b) => b.score - a.score);
63
- const matched = results.slice(0, effectiveLimit);
64
- // Track each matched file as a summary_served event.
65
- // Token estimate: approximate raw file tokens from lineCount (avg ~40 chars/line).
66
- const tracker = new TelemetryTracker(projectRoot);
67
- for (const result of matched) {
68
- const entry = entries.find(e => e.path === result.path);
69
- // Approximate raw file tokens from lineCount (avg ~40 chars/line, ~4 chars/token)
70
- const estimatedRawTokens = entry?.summary ? entry.summary.lineCount * 10 : 0;
71
- tracker.trackEvent('summary_served', result.path, estimatedRawTokens);
94
+ candidates.sort((a, b) => b.score - a.score);
95
+ // Validate before serving: walk the sorted candidates in score order until
96
+ // `limit` survive, so slots freed by dropped (deleted or no-longer-matching)
97
+ // files are backfilled from the remaining candidates in one pass.
98
+ const served = [];
99
+ for (const candidate of candidates) {
100
+ if (served.length >= effectiveLimit)
101
+ break;
102
+ const validated = await validateCandidate(projectRoot, store, candidate, queryTerms);
103
+ if (validated)
104
+ served.push(validated);
105
+ }
106
+ // Telemetry: ONE summary_served event per query, not per hit. Per-hit
107
+ // tracking booked every matched file as a full read avoided, inflating
108
+ // "tokens saved" by up to `limit`x. The realistic counterfactual for one
109
+ // search is the agent grepping and then reading roughly ONE candidate file
110
+ // in full, so we book the estimated raw-content tokens of one average
111
+ // served file (lineCount x ~40 chars/line / ~4 chars/token = lineCount x 10).
112
+ // Best-effort: a telemetry write failure (e.g. locked DB) must never fail
113
+ // the read path.
114
+ if (served.length > 0) {
115
+ try {
116
+ const avgLineCount = served.reduce((sum, c) => sum + c.summary.lineCount, 0) / served.length;
117
+ new TelemetryTracker(projectRoot).trackEvent('summary_served', served[0].entry.path, Math.round(avgLineCount * 10), { query, resultCount: served.length });
118
+ }
119
+ catch {
120
+ // Telemetry is best-effort on read paths (audit invariant I8).
121
+ }
72
122
  }
73
123
  return {
74
- query,
75
- results: matched.map(({ score: _score, ...rest }) => rest),
76
- totalCached: entries.filter(e => e.summary).length,
124
+ results: served.map((c) => {
125
+ const exports = c.summary.exports;
126
+ const capped = exports.length > MAX_EXPORTS_PER_RESULT;
127
+ return {
128
+ path: c.entry.path,
129
+ purpose: c.summary.purpose,
130
+ exports: capped ? exports.slice(0, MAX_EXPORTS_PER_RESULT) : exports,
131
+ ...(capped ? { exportsTruncated: exports.length } : {}),
132
+ confidence: c.summary.confidence,
133
+ };
134
+ }),
135
+ totalCached: entries.filter((e) => e.summary).length,
77
136
  ...(normalizedPrefix ? { scope: normalizedPrefix } : {}),
78
137
  };
79
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search-by-purpose.js","sourceRoot":"","sources":["../../src/tools/search-by-purpose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-by-purpose.js","sourceRoot":"","sources":["../../src/tools/search-by-purpose.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -17,5 +17,11 @@ export interface ImportRef {
17
17
  target: string;
18
18
  specifiers: string[];
19
19
  type: 'static' | 'dynamic' | 're-export';
20
+ /**
21
+ * True when the target does not resolve to a file inside the project
22
+ * (bare module specifiers, builtins, unresolvable relative paths).
23
+ * External refs are excluded from the dependency graph.
24
+ */
25
+ external?: boolean;
20
26
  }
21
27
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;CAC1C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamechris/repo-memory",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "MCP server that gives AI coding agents persistent memory about your codebase",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",