@blamechris/repo-memory 0.1.0 → 0.3.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 (39) hide show
  1. package/README.md +21 -2
  2. package/dist/graph/dependency-graph.d.ts +6 -0
  3. package/dist/graph/dependency-graph.d.ts.map +1 -1
  4. package/dist/graph/dependency-graph.js +23 -0
  5. package/dist/graph/dependency-graph.js.map +1 -1
  6. package/dist/indexer/imports.d.ts +3 -0
  7. package/dist/indexer/imports.d.ts.map +1 -1
  8. package/dist/indexer/imports.js +268 -2
  9. package/dist/indexer/imports.js.map +1 -1
  10. package/dist/indexer/project-map.d.ts +3 -0
  11. package/dist/indexer/project-map.d.ts.map +1 -1
  12. package/dist/indexer/project-map.js +14 -4
  13. package/dist/indexer/project-map.js.map +1 -1
  14. package/dist/indexer/summarizer.d.ts.map +1 -1
  15. package/dist/indexer/summarizer.js +205 -1
  16. package/dist/indexer/summarizer.js.map +1 -1
  17. package/dist/server.js +78 -5
  18. package/dist/server.js.map +1 -1
  19. package/dist/tools/batch-file-summaries.d.ts +13 -0
  20. package/dist/tools/batch-file-summaries.d.ts.map +1 -0
  21. package/dist/tools/batch-file-summaries.js +25 -0
  22. package/dist/tools/batch-file-summaries.js.map +1 -0
  23. package/dist/tools/get-dependency-graph.d.ts +1 -1
  24. package/dist/tools/get-dependency-graph.d.ts.map +1 -1
  25. package/dist/tools/get-dependency-graph.js +25 -2
  26. package/dist/tools/get-dependency-graph.js.map +1 -1
  27. package/dist/tools/get-related-files.d.ts +13 -0
  28. package/dist/tools/get-related-files.d.ts.map +1 -0
  29. package/dist/tools/get-related-files.js +142 -0
  30. package/dist/tools/get-related-files.js.map +1 -0
  31. package/dist/tools/get-token-report.d.ts +8 -1
  32. package/dist/tools/get-token-report.d.ts.map +1 -1
  33. package/dist/tools/get-token-report.js +52 -2
  34. package/dist/tools/get-token-report.js.map +1 -1
  35. package/dist/tools/search-by-purpose.d.ts +14 -0
  36. package/dist/tools/search-by-purpose.d.ts.map +1 -0
  37. package/dist/tools/search-by-purpose.js +50 -0
  38. package/dist/tools/search-by-purpose.js.map +1 -0
  39. package/package.json +2 -2
@@ -0,0 +1,142 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import { DependencyGraph } from '../graph/dependency-graph.js';
4
+ import { scanProject } from '../indexer/scanner.js';
5
+ import { validatePath } from '../utils/validate-path.js';
6
+ import { rankFiles } from '../cache/ranking.js';
7
+ import { getTaskContext } from '../tools/task-context.js';
8
+ export async function getRelatedFiles(projectRoot, relativePath, options) {
9
+ const validated = validatePath(projectRoot, relativePath);
10
+ const limit = options?.limit ?? 10;
11
+ // Build the dependency graph
12
+ const graph = new DependencyGraph(projectRoot);
13
+ const files = await scanProject(projectRoot);
14
+ for (const file of files) {
15
+ if (!file.endsWith('.ts') &&
16
+ !file.endsWith('.js') &&
17
+ !file.endsWith('.tsx') &&
18
+ !file.endsWith('.jsx') &&
19
+ !file.endsWith('.mjs') &&
20
+ !file.endsWith('.cjs') &&
21
+ !file.endsWith('.py') &&
22
+ !file.endsWith('.go') &&
23
+ !file.endsWith('.rs')) {
24
+ continue;
25
+ }
26
+ try {
27
+ const contents = await readFile(join(projectRoot, file), 'utf-8');
28
+ graph.updateFile(file, contents);
29
+ }
30
+ catch {
31
+ // Skip unreadable files
32
+ }
33
+ }
34
+ // The graph may store paths with .js extension (from import specifiers) while
35
+ // actual files have .ts extension. Query both variants to get complete results.
36
+ const variants = getPathVariants(validated);
37
+ // Get direct dependencies and dependents across all path variants
38
+ const dependencies = new Set();
39
+ const dependents = new Set();
40
+ for (const v of variants) {
41
+ for (const d of graph.getDependencies(v))
42
+ dependencies.add(d);
43
+ for (const d of graph.getDependents(v))
44
+ dependents.add(d);
45
+ }
46
+ // Get transitive dependencies (depth 2) for "transitive-dependency" classification
47
+ const transitiveDeps = new Set();
48
+ const transitiveDependents = new Set();
49
+ for (const v of variants) {
50
+ for (const d of graph.getTransitiveDependencies(v, 2))
51
+ transitiveDeps.add(d);
52
+ for (const d of graph.getTransitiveDependents(v, 2))
53
+ transitiveDependents.add(d);
54
+ }
55
+ // Determine same-directory files
56
+ const fileDir = dirname(validated);
57
+ const sameDirFiles = new Set(files.filter((f) => f !== validated && dirname(f) === fileDir));
58
+ // Collect all candidate related files (excluding the file itself)
59
+ const candidates = new Set();
60
+ for (const d of dependencies)
61
+ candidates.add(d);
62
+ for (const d of dependents)
63
+ candidates.add(d);
64
+ for (const d of transitiveDeps)
65
+ candidates.add(d);
66
+ for (const d of transitiveDependents)
67
+ candidates.add(d);
68
+ for (const d of sameDirFiles)
69
+ candidates.add(d);
70
+ // Remove the file itself (all variants)
71
+ for (const v of variants)
72
+ candidates.delete(v);
73
+ if (candidates.size === 0) {
74
+ return { path: validated, relatedFiles: [] };
75
+ }
76
+ // Classify relationships
77
+ const relationshipMap = new Map();
78
+ for (const c of candidates) {
79
+ if (dependencies.has(c)) {
80
+ relationshipMap.set(c, 'imports');
81
+ }
82
+ else if (dependents.has(c)) {
83
+ relationshipMap.set(c, 'imported-by');
84
+ }
85
+ else if (transitiveDeps.has(c) || transitiveDependents.has(c)) {
86
+ relationshipMap.set(c, 'transitive-dependency');
87
+ }
88
+ else if (sameDirFiles.has(c)) {
89
+ relationshipMap.set(c, 'same-directory');
90
+ }
91
+ }
92
+ // Get task context for ranking if taskId provided
93
+ let exploredFiles = [];
94
+ let flaggedFiles = [];
95
+ if (options?.taskId) {
96
+ try {
97
+ const ctx = getTaskContext(projectRoot, options.taskId);
98
+ exploredFiles = ctx.exploredFiles.map((f) => f.filePath);
99
+ flaggedFiles = ctx.exploredFiles
100
+ .filter((f) => f.status === 'flagged')
101
+ .map((f) => f.filePath);
102
+ }
103
+ catch {
104
+ // Task not found — proceed without context
105
+ }
106
+ }
107
+ // Rank candidates
108
+ const candidateArray = [...candidates];
109
+ const ranked = rankFiles(candidateArray, {
110
+ projectRoot,
111
+ exploredFiles,
112
+ flaggedFiles,
113
+ graph,
114
+ limit,
115
+ });
116
+ const relatedFiles = ranked.map((r) => ({
117
+ path: r.path,
118
+ score: r.score,
119
+ relationship: relationshipMap.get(r.path) ?? 'same-directory',
120
+ }));
121
+ return { path: validated, relatedFiles };
122
+ }
123
+ /** Get path variants to handle .ts/.js extension mismatch in the dependency graph. */
124
+ function getPathVariants(filePath) {
125
+ const variants = [filePath];
126
+ if (filePath.endsWith('.ts')) {
127
+ variants.push(filePath.replace(/\.ts$/, '.js'));
128
+ }
129
+ else if (filePath.endsWith('.tsx')) {
130
+ variants.push(filePath.replace(/\.tsx$/, '.js'));
131
+ variants.push(filePath.replace(/\.tsx$/, '.jsx'));
132
+ }
133
+ else if (filePath.endsWith('.js')) {
134
+ variants.push(filePath.replace(/\.js$/, '.ts'));
135
+ variants.push(filePath.replace(/\.js$/, '.tsx'));
136
+ }
137
+ else if (filePath.endsWith('.jsx')) {
138
+ variants.push(filePath.replace(/\.jsx$/, '.tsx'));
139
+ }
140
+ return variants;
141
+ }
142
+ //# sourceMappingURL=get-related-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-related-files.js","sourceRoot":"","sources":["../../src/tools/get-related-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA0B,MAAM,0BAA0B,CAAC;AAWlF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,YAAoB,EACpB,OAA6C;IAE7C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IAEnC,6BAA6B;IAC7B,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACrB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,gFAAgF;IAChF,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE5C,kEAAkE;IAClE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,mFAAmF;IACnF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,iCAAiC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAC/D,CAAC;IAEF,kEAAkE;IAClE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,cAAc;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,oBAAoB;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEhD,wCAAwC;IACxC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC/C,CAAC;IAED,yBAAyB;IACzB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,aAAa,GAAa,EAAE,CAAC;IACjC,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAsB,CAAC;YAC7E,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,YAAY,GAAG,GAAG,CAAC,aAAa;iBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,EAAE;QACvC,WAAW;QACX,aAAa;QACb,YAAY;QACZ,KAAK;QACL,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,gBAAgB;KAC9D,CAAC,CAAC,CAAC;IAEJ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAC3C,CAAC;AAED,sFAAsF;AACtF,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,3 +1,9 @@
1
+ export interface CacheDiagnostics {
2
+ cacheEntryCount: number;
3
+ staleEntryCount: number;
4
+ dbFileSizeBytes: number;
5
+ cacheAgeDistribution: Record<string, number>;
6
+ }
1
7
  export interface TokenReport {
2
8
  period: string;
3
9
  totalEvents: number;
@@ -11,6 +17,7 @@ export interface TokenReport {
11
17
  tokensEstimated: number;
12
18
  }>;
13
19
  eventBreakdown: Record<string, number>;
20
+ diagnostics?: CacheDiagnostics;
14
21
  }
15
- export declare function getTokenReport(projectRoot: string, period?: 'session' | 'all' | 'last_n_hours', hours?: number, sessionId?: string): TokenReport;
22
+ export declare function getTokenReport(projectRoot: string, period?: 'session' | 'all' | 'last_n_hours', hours?: number, sessionId?: string, includeDiagnostics?: boolean): TokenReport;
16
23
  //# sourceMappingURL=get-token-report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-token-report.d.ts","sourceRoot":"","sources":["../../src/tools/get-token-report.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,cAAc,EAC3C,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CA4Cb"}
1
+ {"version":3,"file":"get-token-report.d.ts","sourceRoot":"","sources":["../../src/tools/get-token-report.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AA+CD,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,cAAc,EAC3C,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,OAAO,GAC3B,WAAW,CAkDb"}
@@ -1,6 +1,52 @@
1
+ import { statSync } from 'fs';
2
+ import { join } from 'path';
1
3
  import { TelemetryTracker } from '../telemetry/tracker.js';
2
4
  import { SessionManager } from '../memory/session.js';
3
- export function getTokenReport(projectRoot, period, hours, sessionId) {
5
+ import { CacheStore } from '../cache/store.js';
6
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
7
+ const STALE_THRESHOLD_DAYS = 30;
8
+ function buildCacheDiagnostics(projectRoot) {
9
+ const store = new CacheStore(projectRoot);
10
+ const allEntries = store.getAllEntries();
11
+ const staleEntries = store.getStaleEntries(STALE_THRESHOLD_DAYS * MS_PER_DAY);
12
+ let dbFileSizeBytes = 0;
13
+ try {
14
+ const dbPath = join(projectRoot, '.repo-memory', 'cache.db');
15
+ dbFileSizeBytes = statSync(dbPath).size;
16
+ }
17
+ catch {
18
+ // DB file may not exist yet
19
+ }
20
+ const now = Date.now();
21
+ const distribution = {
22
+ '< 1 day': 0,
23
+ '1-7 days': 0,
24
+ '7-30 days': 0,
25
+ '> 30 days': 0,
26
+ };
27
+ for (const entry of allEntries) {
28
+ const ageDays = (now - entry.lastChecked) / MS_PER_DAY;
29
+ if (ageDays < 1) {
30
+ distribution['< 1 day']++;
31
+ }
32
+ else if (ageDays < 7) {
33
+ distribution['1-7 days']++;
34
+ }
35
+ else if (ageDays < 30) {
36
+ distribution['7-30 days']++;
37
+ }
38
+ else {
39
+ distribution['> 30 days']++;
40
+ }
41
+ }
42
+ return {
43
+ cacheEntryCount: allEntries.length,
44
+ staleEntryCount: staleEntries.length,
45
+ dbFileSizeBytes,
46
+ cacheAgeDistribution: distribution,
47
+ };
48
+ }
49
+ export function getTokenReport(projectRoot, period, hours, sessionId, includeDiagnostics) {
4
50
  const tracker = new TelemetryTracker(projectRoot);
5
51
  const effectivePeriod = period ?? 'all';
6
52
  let since;
@@ -30,7 +76,7 @@ export function getTokenReport(projectRoot, period, hours, sessionId) {
30
76
  .map(([path, data]) => ({ path, ...data }))
31
77
  .sort((a, b) => b.accessCount - a.accessCount)
32
78
  .slice(0, 10);
33
- return {
79
+ const report = {
34
80
  period: effectivePeriod,
35
81
  totalEvents: stats.totalEvents,
36
82
  cacheHits: stats.cacheHits,
@@ -40,5 +86,9 @@ export function getTokenReport(projectRoot, period, hours, sessionId) {
40
86
  topFiles,
41
87
  eventBreakdown: stats.eventsByType,
42
88
  };
89
+ if (includeDiagnostics) {
90
+ report.diagnostics = buildCacheDiagnostics(projectRoot);
91
+ }
92
+ return report;
43
93
  }
44
94
  //# sourceMappingURL=get-token-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-token-report.js","sourceRoot":"","sources":["../../src/tools/get-token-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatD,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,MAA2C,EAC3C,KAAc,EACd,SAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,MAAM,IAAI,KAAK,CAAC;IAExC,IAAI,KAAyB,CAAC;IAE9B,IAAI,eAAe,KAAK,SAAS,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;SAAM,IAAI,eAAe,KAAK,cAAc,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/D,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtC,iDAAiD;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4D,CAAC;IACpF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,SAAS;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;SAC7C,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,QAAQ;QAC7B,oBAAoB,EAAE,KAAK,CAAC,gBAAgB;QAC5C,QAAQ;QACR,cAAc,EAAE,KAAK,CAAC,YAAY;KACnC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-token-report.js","sourceRoot":"","sources":["../../src/tools/get-token-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface SearchResult {
2
+ path: string;
3
+ purpose: string;
4
+ matchedOn: string[];
5
+ exports: string[];
6
+ confidence: string;
7
+ }
8
+ export interface SearchByPurposeResult {
9
+ query: string;
10
+ results: SearchResult[];
11
+ totalCached: number;
12
+ }
13
+ export declare function searchByPurpose(projectRoot: string, query: string, limit?: number): SearchByPurposeResult;
14
+ //# sourceMappingURL=search-by-purpose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-by-purpose.d.ts","sourceRoot":"","sources":["../../src/tools/search-by-purpose.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,qBAAqB,CA2DvB"}
@@ -0,0 +1,50 @@
1
+ import { CacheStore } from '../cache/store.js';
2
+ export function searchByPurpose(projectRoot, query, limit) {
3
+ const store = new CacheStore(projectRoot);
4
+ const allEntries = store.getAllEntries();
5
+ const effectiveLimit = limit ?? 20;
6
+ const queryTerms = query.toLowerCase().split(/\s+/).filter(Boolean);
7
+ const results = [];
8
+ for (const entry of allEntries) {
9
+ if (!entry.summary)
10
+ continue;
11
+ const matchedOn = [];
12
+ let score = 0;
13
+ const purpose = entry.summary.purpose.toLowerCase();
14
+ const purposeMatches = queryTerms.filter(term => purpose.includes(term));
15
+ if (purposeMatches.length > 0) {
16
+ matchedOn.push('purpose');
17
+ score += purposeMatches.length * 3; // purpose matches weighted highest
18
+ }
19
+ const exportsLower = entry.summary.exports.map(e => e.toLowerCase());
20
+ const exportMatches = queryTerms.filter(term => exportsLower.some(exp => exp.includes(term)));
21
+ if (exportMatches.length > 0) {
22
+ matchedOn.push('exports');
23
+ score += exportMatches.length * 2;
24
+ }
25
+ const declsLower = entry.summary.topLevelDeclarations.map(d => d.toLowerCase());
26
+ const declMatches = queryTerms.filter(term => declsLower.some(decl => decl.includes(term)));
27
+ if (declMatches.length > 0) {
28
+ matchedOn.push('declarations');
29
+ score += declMatches.length;
30
+ }
31
+ if (matchedOn.length > 0) {
32
+ results.push({
33
+ path: entry.path,
34
+ purpose: entry.summary.purpose,
35
+ matchedOn,
36
+ exports: entry.summary.exports,
37
+ confidence: entry.summary.confidence,
38
+ score,
39
+ });
40
+ }
41
+ }
42
+ // Sort by score descending
43
+ results.sort((a, b) => b.score - a.score);
44
+ return {
45
+ query,
46
+ results: results.slice(0, effectiveLimit).map(({ score: _score, ...rest }) => rest),
47
+ totalCached: allEntries.filter(e => e.summary).length,
48
+ };
49
+ }
50
+ //# sourceMappingURL=search-by-purpose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-by-purpose.js","sourceRoot":"","sources":["../../src/tools/search-by-purpose.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamechris/repo-memory",
3
- "version": "0.1.0",
3
+ "version": "0.3.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",
@@ -23,7 +23,7 @@
23
23
  "lint": "eslint --no-error-on-unmatched-pattern 'src/**/*.ts' 'tests/**/*.ts'",
24
24
  "format": "prettier --write 'src/**/*.ts' '*.json' '*.mjs' && prettier --write 'tests/**/*.ts' 2>/dev/null || true",
25
25
  "prepublishOnly": "npm run typecheck && npm run lint && npm run test && npm run build",
26
- "benchmark": "tsx tests/benchmarks/run-benchmarks.ts"
26
+ "benchmark": "npx tsx tests/benchmarks/run-benchmarks.ts"
27
27
  },
28
28
  "keywords": [
29
29
  "mcp",