@monoes/monograph 1.4.1 → 1.5.1
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/__tests__/storage/stores.test.ts +66 -1
- package/dist/src/storage/fts-store.d.ts +7 -0
- package/dist/src/storage/fts-store.d.ts.map +1 -1
- package/dist/src/storage/fts-store.js +126 -2
- package/dist/src/storage/fts-store.js.map +1 -1
- package/dist/src/watch/watcher.d.ts +2 -0
- package/dist/src/watch/watcher.d.ts.map +1 -1
- package/dist/src/watch/watcher.js +23 -1
- package/dist/src/watch/watcher.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/storage/fts-store.ts +132 -2
- package/src/watch/watcher.ts +23 -1
|
@@ -4,7 +4,7 @@ import { unlinkSync, existsSync } from 'fs';
|
|
|
4
4
|
import { openDb, closeDb } from '../../src/storage/db.js';
|
|
5
5
|
import { insertNode, getNode, deleteNodesForFile } from '../../src/storage/node-store.js';
|
|
6
6
|
import { insertEdge, getEdgesForSource } from '../../src/storage/edge-store.js';
|
|
7
|
-
import { ftsSearch } from '../../src/storage/fts-store.js';
|
|
7
|
+
import { ftsSearch, extractSearchTerms } from '../../src/storage/fts-store.js';
|
|
8
8
|
import type { MonographNode, MonographEdge } from '../../src/types.js';
|
|
9
9
|
|
|
10
10
|
const dbPath = join(tmpdir(), `monograph-stores-${Date.now()}.db`);
|
|
@@ -97,4 +97,69 @@ describe('fts-store', () => {
|
|
|
97
97
|
const results = ftsSearch(db, 'auth', 10);
|
|
98
98
|
expect(results.some((r) => r.id === 'auth_service')).toBe(true);
|
|
99
99
|
});
|
|
100
|
+
|
|
101
|
+
// Regression tests for issue #37 follow-up: monograph_augment identifier+keyword gap.
|
|
102
|
+
// extractSearchTerms used to bail out entirely for short (<=3 word), stopword-free
|
|
103
|
+
// queries under the assumption they were "already a bare identifier" — but that's
|
|
104
|
+
// wrong for multi-token identifier+keyword combos like "ExtensionBridge keepalive
|
|
105
|
+
// reconnect", which the raw FTS5 MATCH ANDs together and never finds as one row.
|
|
106
|
+
describe('identifier+keyword combo queries (issue #37 follow-up)', () => {
|
|
107
|
+
beforeAll(() => {
|
|
108
|
+
insertNode(db, {
|
|
109
|
+
id: 'extension_bridge',
|
|
110
|
+
label: 'Class',
|
|
111
|
+
name: 'ExtensionBridge',
|
|
112
|
+
normLabel: 'extensionbridge',
|
|
113
|
+
filePath: 'src/browser/extension-bridge.ts',
|
|
114
|
+
isExported: true,
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('finds a node for a combined identifier+keyword query (previously zero results)', () => {
|
|
119
|
+
const results = ftsSearch(db, 'ExtensionBridge keepalive reconnect', 10);
|
|
120
|
+
expect(results.some((r) => r.id === 'extension_bridge')).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('still finds the node for a bare identifier query (regression guard)', () => {
|
|
124
|
+
const results = ftsSearch(db, 'ExtensionBridge', 10);
|
|
125
|
+
expect(results.some((r) => r.id === 'extension_bridge')).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('still finds the node for a full natural-language sentence (regression guard, 2.5.8 fix)', () => {
|
|
129
|
+
const results = ftsSearch(
|
|
130
|
+
db,
|
|
131
|
+
'where is the browser extension bridge connection established and how does the keepalive detect dead connections',
|
|
132
|
+
10,
|
|
133
|
+
);
|
|
134
|
+
expect(results.some((r) => r.id === 'extension_bridge')).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('still strips file extensions from queries (regression guard, "CLAUDE.md")', () => {
|
|
138
|
+
insertNode(db, {
|
|
139
|
+
id: 'claude_md',
|
|
140
|
+
label: 'File',
|
|
141
|
+
name: 'CLAUDE',
|
|
142
|
+
normLabel: 'claude',
|
|
143
|
+
filePath: 'CLAUDE.md',
|
|
144
|
+
isExported: false,
|
|
145
|
+
});
|
|
146
|
+
const results = ftsSearch(db, 'CLAUDE.md', 10);
|
|
147
|
+
expect(results.some((r) => r.id === 'claude_md')).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
describe('extractSearchTerms', () => {
|
|
152
|
+
it('extracts identifier parts from a 3-word stopword-free combo query', () => {
|
|
153
|
+
const terms = extractSearchTerms('ExtensionBridge keepalive reconnect');
|
|
154
|
+
expect(terms).toContain('ExtensionBridge');
|
|
155
|
+
expect(terms).toContain('Extension');
|
|
156
|
+
expect(terms).toContain('Bridge');
|
|
157
|
+
expect(terms).toContain('keepalive');
|
|
158
|
+
expect(terms).toContain('reconnect');
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it('returns empty for a single bare identifier token', () => {
|
|
162
|
+
expect(extractSearchTerms('ExtensionBridge')).toEqual([]);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
100
165
|
});
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
|
+
/**
|
|
3
|
+
* Extract code-relevant search terms from a natural-language query.
|
|
4
|
+
* Strips stopwords, splits camelCase/PascalCase/snake_case, and strips
|
|
5
|
+
* file extensions (so "CLAUDE.md" also tries "CLAUDE").
|
|
6
|
+
* Returns an empty array when the query is already a bare identifier.
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractSearchTerms(query: string): string[];
|
|
2
9
|
export interface FtsResult {
|
|
3
10
|
id: string;
|
|
4
11
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts-store.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"fts-store.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkB3C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAsC1D;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAgBD,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,SAAS,EAAE,CA0Jb;AAID,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACzC;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,kBAAkB,EAAE,CAwEtB"}
|
|
@@ -1,3 +1,61 @@
|
|
|
1
|
+
// ── Intent-to-identifier extraction ──────────────────────────────────────────
|
|
2
|
+
const STOPWORDS = new Set([
|
|
3
|
+
'a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had',
|
|
4
|
+
'do', 'does', 'did', 'will', 'would', 'shall', 'should', 'may', 'might', 'must', 'can',
|
|
5
|
+
'could', 'am', 'it', 'its', 'i', 'me', 'my', 'we', 'our', 'you', 'your', 'he', 'she',
|
|
6
|
+
'they', 'them', 'their', 'this', 'that', 'these', 'those', 'of', 'in', 'to', 'for',
|
|
7
|
+
'with', 'on', 'at', 'from', 'by', 'about', 'as', 'into', 'through', 'during', 'before',
|
|
8
|
+
'after', 'above', 'below', 'between', 'out', 'off', 'over', 'under', 'again', 'then',
|
|
9
|
+
'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'both', 'each', 'every',
|
|
10
|
+
'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own',
|
|
11
|
+
'same', 'so', 'than', 'too', 'very', 'just', 'because', 'but', 'and', 'or', 'if',
|
|
12
|
+
'while', 'what', 'which', 'who', 'whom', 'up', 'down', 'get', 'set', 'add', 'use',
|
|
13
|
+
'find', 'show', 'make', 'let', 'want', 'need', 'like', 'look', 'also', 'new', 'old',
|
|
14
|
+
]);
|
|
15
|
+
/**
|
|
16
|
+
* Extract code-relevant search terms from a natural-language query.
|
|
17
|
+
* Strips stopwords, splits camelCase/PascalCase/snake_case, and strips
|
|
18
|
+
* file extensions (so "CLAUDE.md" also tries "CLAUDE").
|
|
19
|
+
* Returns an empty array when the query is already a bare identifier.
|
|
20
|
+
*/
|
|
21
|
+
export function extractSearchTerms(query) {
|
|
22
|
+
const words = query.split(/[\s,;:!?()\[\]{}'"]+/).filter(Boolean);
|
|
23
|
+
// If query is a single token, it's already a bare identifier query — nothing to extract.
|
|
24
|
+
// (We used to also bail out for short, stopword-free multi-token queries under the
|
|
25
|
+
// assumption they were "already an identifier query", but that misfires for queries
|
|
26
|
+
// like "ExtensionBridge keepalive reconnect" — three distinct identifier-ish tokens
|
|
27
|
+
// that FTS5 MATCH ANDs together and fails to find as a single row. Since this function
|
|
28
|
+
// only runs as a fallback after the raw MATCH already returned zero rows, there's no
|
|
29
|
+
// extra cost to always extracting terms for multi-token queries.)
|
|
30
|
+
if (words.length <= 1)
|
|
31
|
+
return [];
|
|
32
|
+
const terms = new Set();
|
|
33
|
+
for (const word of words) {
|
|
34
|
+
const lower = word.toLowerCase();
|
|
35
|
+
if (STOPWORDS.has(lower))
|
|
36
|
+
continue;
|
|
37
|
+
if (word.length < 3)
|
|
38
|
+
continue;
|
|
39
|
+
// Strip file extensions: "CLAUDE.md" → also add "CLAUDE"
|
|
40
|
+
const dotIdx = word.lastIndexOf('.');
|
|
41
|
+
if (dotIdx > 0 && dotIdx < word.length - 1) {
|
|
42
|
+
terms.add(word.slice(0, dotIdx));
|
|
43
|
+
terms.add(word);
|
|
44
|
+
}
|
|
45
|
+
// Split camelCase/PascalCase: "ExtensionBridge" → "Extension", "Bridge"
|
|
46
|
+
const camelParts = word.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
47
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
|
|
48
|
+
.split(/[\s_-]+/)
|
|
49
|
+
.filter(p => p.length >= 3 && !STOPWORDS.has(p.toLowerCase()));
|
|
50
|
+
if (camelParts.length > 1) {
|
|
51
|
+
for (const part of camelParts)
|
|
52
|
+
terms.add(part);
|
|
53
|
+
}
|
|
54
|
+
// Keep the original word
|
|
55
|
+
terms.add(word);
|
|
56
|
+
}
|
|
57
|
+
return Array.from(terms);
|
|
58
|
+
}
|
|
1
59
|
/**
|
|
2
60
|
* Quote a single FTS5 search term as a string literal when it contains characters
|
|
3
61
|
* that would otherwise be parsed as FTS5 syntax (quotes, parens, boolean keywords
|
|
@@ -46,6 +104,63 @@ export function ftsSearch(db, query, limit, label) {
|
|
|
46
104
|
catch {
|
|
47
105
|
// FTS MATCH can throw on malformed queries; fall through to LIKE path
|
|
48
106
|
}
|
|
107
|
+
// ── Intent-extraction fallback: when the raw query looks like natural language
|
|
108
|
+
// and FTS returned nothing, extract code-relevant tokens and retry FTS. ──────
|
|
109
|
+
if (matchRows.length === 0) {
|
|
110
|
+
const extracted = extractSearchTerms(safeQuery);
|
|
111
|
+
if (extracted.length > 0) {
|
|
112
|
+
// Try each extracted term individually via FTS, then merge by best rank
|
|
113
|
+
const termFtsQuery = extracted.map(quoteFtsTerm).join(' OR ');
|
|
114
|
+
let termSql = `
|
|
115
|
+
SELECT n.id, n.name, n.norm_label, n.file_path, n.label,
|
|
116
|
+
n.start_line, n.end_line, nodes_fts.rank
|
|
117
|
+
FROM nodes_fts
|
|
118
|
+
JOIN nodes n ON n.rowid = nodes_fts.rowid
|
|
119
|
+
WHERE nodes_fts MATCH ?
|
|
120
|
+
`;
|
|
121
|
+
const termParams = [termFtsQuery];
|
|
122
|
+
if (label) {
|
|
123
|
+
termSql += ' AND n.label = ?';
|
|
124
|
+
termParams.push(label);
|
|
125
|
+
}
|
|
126
|
+
termSql += ' ORDER BY nodes_fts.rank LIMIT ?';
|
|
127
|
+
termParams.push(limit * 2);
|
|
128
|
+
try {
|
|
129
|
+
matchRows = db.prepare(termSql).all(...termParams);
|
|
130
|
+
}
|
|
131
|
+
catch { /* FTS MATCH can throw on malformed queries */ }
|
|
132
|
+
// Also try individual LIKE for each extracted term to catch camelCase substrings
|
|
133
|
+
if (matchRows.length < limit) {
|
|
134
|
+
const seenIds = new Set(matchRows.map((r) => r.id));
|
|
135
|
+
for (const term of extracted) {
|
|
136
|
+
if (matchRows.length >= limit)
|
|
137
|
+
break;
|
|
138
|
+
const escapedTerm = term.replace(/\\/g, '\\\\').replace(/%/g, '\\%').replace(/_/g, '\\_');
|
|
139
|
+
const pat = `%${escapedTerm}%`;
|
|
140
|
+
let termLikeSql = `
|
|
141
|
+
SELECT n.id, n.name, n.norm_label, n.file_path, n.label,
|
|
142
|
+
n.start_line, n.end_line, 0 AS rank
|
|
143
|
+
FROM nodes n
|
|
144
|
+
WHERE (n.name LIKE ? ESCAPE '\\' OR n.norm_label LIKE ? ESCAPE '\\')
|
|
145
|
+
`;
|
|
146
|
+
const termLikeParams = [pat, pat];
|
|
147
|
+
if (label) {
|
|
148
|
+
termLikeSql += ' AND n.label = ?';
|
|
149
|
+
termLikeParams.push(label);
|
|
150
|
+
}
|
|
151
|
+
termLikeSql += ' LIMIT ?';
|
|
152
|
+
termLikeParams.push(limit);
|
|
153
|
+
const likeRows = db.prepare(termLikeSql).all(...termLikeParams);
|
|
154
|
+
for (const r of likeRows) {
|
|
155
|
+
if (!seenIds.has(r.id)) {
|
|
156
|
+
matchRows.push(r);
|
|
157
|
+
seenIds.add(r.id);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
49
164
|
// Run the LIKE fallback whenever MATCH threw (malformed/boolean-keyword query) or
|
|
50
165
|
// returned zero rows — not just for short (≤2 char) queries. Short queries need it
|
|
51
166
|
// because trigram requires ≥3 characters to fire; longer queries need it whenever
|
|
@@ -54,13 +169,22 @@ export function ftsSearch(db, query, limit, label) {
|
|
|
54
169
|
if (safeQuery.length <= 2 || matchRows.length === 0) {
|
|
55
170
|
const escapedQuery = safeQuery.replace(/\\/g, '\\\\').replace(/%/g, '\\%').replace(/_/g, '\\_');
|
|
56
171
|
const likePattern = `%${escapedQuery}%`;
|
|
172
|
+
// Also try without file extension: "CLAUDE.md" → "CLAUDE"
|
|
173
|
+
const dotIdx = safeQuery.lastIndexOf('.');
|
|
174
|
+
const strippedLikePattern = (dotIdx > 0 && dotIdx < safeQuery.length - 1)
|
|
175
|
+
? `%${safeQuery.slice(0, dotIdx).replace(/\\/g, '\\\\').replace(/%/g, '\\%').replace(/_/g, '\\_')}%`
|
|
176
|
+
: null;
|
|
57
177
|
let likeSql = `
|
|
58
178
|
SELECT n.id, n.name, n.norm_label, n.file_path, n.label,
|
|
59
179
|
n.start_line, n.end_line, 0 AS rank
|
|
60
180
|
FROM nodes n
|
|
61
|
-
WHERE (n.name LIKE ? ESCAPE '\\' OR n.norm_label LIKE ? ESCAPE '\\' OR n.file_path LIKE ? ESCAPE '\\'
|
|
62
|
-
`;
|
|
181
|
+
WHERE (n.name LIKE ? ESCAPE '\\' OR n.norm_label LIKE ? ESCAPE '\\' OR n.file_path LIKE ? ESCAPE '\\'`;
|
|
63
182
|
const likeParams = [likePattern, likePattern, likePattern];
|
|
183
|
+
if (strippedLikePattern) {
|
|
184
|
+
likeSql += ` OR n.name LIKE ? ESCAPE '\\'`;
|
|
185
|
+
likeParams.push(strippedLikePattern);
|
|
186
|
+
}
|
|
187
|
+
likeSql += ')';
|
|
64
188
|
if (label) {
|
|
65
189
|
likeSql += ' AND n.label = ?';
|
|
66
190
|
likeParams.push(label);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts-store.js","sourceRoot":"","sources":["../../../src/storage/fts-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fts-store.js","sourceRoot":"","sources":["../../../src/storage/fts-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,8 @@ export interface WatchAsyncOptions extends WatcherOptions {
|
|
|
8
8
|
force?: boolean;
|
|
9
9
|
codeOnly?: boolean;
|
|
10
10
|
llmMaxSections?: number;
|
|
11
|
+
/** Auto-stop after this many ms of no file changes. Default 30min. 0 = never. */
|
|
12
|
+
idleTimeoutMs?: number;
|
|
11
13
|
}
|
|
12
14
|
/** Convenience: start a watcher and trigger buildAsync on every change. Returns stop() fn. */
|
|
13
15
|
export declare function watchAsync(repoPath: string, opts?: WatchAsyncOptions): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,8FAA8F;AAC9F,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAsDxC;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAMpC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IALrC,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YAA6B,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,EAGvE;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B3B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -6,11 +6,26 @@ import { extname } from 'path';
|
|
|
6
6
|
export async function watchAsync(repoPath, opts = {}) {
|
|
7
7
|
const { buildAsync } = await import('../pipeline/orchestrator.js');
|
|
8
8
|
const watcher = new MonographWatcher(repoPath, { debounceMs: opts.debounceMs ?? 3000 });
|
|
9
|
+
// Idle timeout: auto-stop after prolonged inactivity to reclaim resources.
|
|
10
|
+
const idleMs = opts.idleTimeoutMs ?? 30 * 60_000; // default 30min
|
|
11
|
+
let idleTimer = null;
|
|
12
|
+
const resetIdle = () => {
|
|
13
|
+
if (idleMs <= 0)
|
|
14
|
+
return;
|
|
15
|
+
if (idleTimer)
|
|
16
|
+
clearTimeout(idleTimer);
|
|
17
|
+
idleTimer = setTimeout(() => {
|
|
18
|
+
opts.onProgress?.({ phase: 'watch', message: `No changes for ${Math.round(idleMs / 60_000)}min — auto-stopping watcher.` });
|
|
19
|
+
watcher.stop().catch(() => { });
|
|
20
|
+
}, idleMs);
|
|
21
|
+
idleTimer.unref?.();
|
|
22
|
+
};
|
|
9
23
|
// monolean: full rebuild per change-batch, serialized — true incremental rebuild
|
|
10
24
|
// (re-parse only changed files) requires restructuring the phase pipeline.
|
|
11
25
|
let building = false;
|
|
12
26
|
let rerun = false;
|
|
13
27
|
watcher.on('monograph:updated', async (files) => {
|
|
28
|
+
resetIdle();
|
|
14
29
|
if (building) {
|
|
15
30
|
rerun = true;
|
|
16
31
|
return;
|
|
@@ -39,7 +54,14 @@ export async function watchAsync(repoPath, opts = {}) {
|
|
|
39
54
|
}
|
|
40
55
|
});
|
|
41
56
|
await watcher.start();
|
|
42
|
-
|
|
57
|
+
resetIdle(); // start the idle clock
|
|
58
|
+
return {
|
|
59
|
+
stop: async () => {
|
|
60
|
+
if (idleTimer)
|
|
61
|
+
clearTimeout(idleTimer);
|
|
62
|
+
await watcher.stop();
|
|
63
|
+
},
|
|
64
|
+
};
|
|
43
65
|
}
|
|
44
66
|
export class MonographWatcher extends EventEmitter {
|
|
45
67
|
repoPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"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"}
|