@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.
- package/README.md +21 -2
- package/dist/graph/dependency-graph.d.ts +6 -0
- package/dist/graph/dependency-graph.d.ts.map +1 -1
- package/dist/graph/dependency-graph.js +23 -0
- package/dist/graph/dependency-graph.js.map +1 -1
- package/dist/indexer/imports.d.ts +3 -0
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +268 -2
- package/dist/indexer/imports.js.map +1 -1
- package/dist/indexer/project-map.d.ts +3 -0
- package/dist/indexer/project-map.d.ts.map +1 -1
- package/dist/indexer/project-map.js +14 -4
- package/dist/indexer/project-map.js.map +1 -1
- package/dist/indexer/summarizer.d.ts.map +1 -1
- package/dist/indexer/summarizer.js +205 -1
- package/dist/indexer/summarizer.js.map +1 -1
- package/dist/server.js +78 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/batch-file-summaries.d.ts +13 -0
- package/dist/tools/batch-file-summaries.d.ts.map +1 -0
- package/dist/tools/batch-file-summaries.js +25 -0
- package/dist/tools/batch-file-summaries.js.map +1 -0
- package/dist/tools/get-dependency-graph.d.ts +1 -1
- package/dist/tools/get-dependency-graph.d.ts.map +1 -1
- package/dist/tools/get-dependency-graph.js +25 -2
- package/dist/tools/get-dependency-graph.js.map +1 -1
- package/dist/tools/get-related-files.d.ts +13 -0
- package/dist/tools/get-related-files.d.ts.map +1 -0
- package/dist/tools/get-related-files.js +142 -0
- package/dist/tools/get-related-files.js.map +1 -0
- package/dist/tools/get-token-report.d.ts +8 -1
- package/dist/tools/get-token-report.d.ts.map +1 -1
- package/dist/tools/get-token-report.js +52 -2
- package/dist/tools/get-token-report.js.map +1 -1
- package/dist/tools/search-by-purpose.d.ts +14 -0
- package/dist/tools/search-by-purpose.d.ts.map +1 -0
- package/dist/tools/search-by-purpose.js +50 -0
- package/dist/tools/search-by-purpose.js.map +1 -0
- 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":"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"}
|
|
@@ -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":"
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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.
|
|
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",
|