@monoes/monograph 1.6.9 → 1.6.11
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/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/pipeline/build-lock.d.ts +20 -0
- package/dist/src/pipeline/build-lock.d.ts.map +1 -0
- package/dist/src/pipeline/build-lock.js +144 -0
- package/dist/src/pipeline/build-lock.js.map +1 -0
- package/dist/src/pipeline/orchestrator.d.ts +26 -2
- package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/src/pipeline/orchestrator.js +31 -68
- package/dist/src/pipeline/orchestrator.js.map +1 -1
- package/dist/src/staleness/git-staleness.d.ts.map +1 -1
- package/dist/src/staleness/git-staleness.js +2 -18
- package/dist/src/staleness/git-staleness.js.map +1 -1
- package/dist/src/watch/rebuild-queue.d.ts +59 -0
- package/dist/src/watch/rebuild-queue.d.ts.map +1 -0
- package/dist/src/watch/rebuild-queue.js +121 -0
- package/dist/src/watch/rebuild-queue.js.map +1 -0
- 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 -36
- package/dist/src/watch/watcher.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { relative } from 'node:path';
|
|
2
|
+
import { describeBuildLockHolder } from '../pipeline/build-lock.js';
|
|
3
|
+
/**
|
|
4
|
+
* Serializes watch-triggered rebuilds. Changes that arrive while a build runs
|
|
5
|
+
* are folded into the next one, and a batch whose build found the build lock
|
|
6
|
+
* held (another process's build, or a session-start/init background build) is
|
|
7
|
+
* kept and retried. Each change batch used to start its own fire-and-forget
|
|
8
|
+
* build, so a lock-skipped batch was dropped for good while the log still said
|
|
9
|
+
* the rebuild completed (#338).
|
|
10
|
+
*/
|
|
11
|
+
export function createRebuildQueue(opts) {
|
|
12
|
+
const retryDelayMs = opts.retryDelayMs ?? 2000;
|
|
13
|
+
const maxDeferMs = opts.maxDeferMs ?? 10 * 60_000;
|
|
14
|
+
let pending = new Set();
|
|
15
|
+
let running = false;
|
|
16
|
+
let stopped = false;
|
|
17
|
+
let retryTimer = null;
|
|
18
|
+
// Set while a deferred batch is being retried, so a lock held for minutes
|
|
19
|
+
// logs one "deferred" line rather than one per retry.
|
|
20
|
+
let deferred = false;
|
|
21
|
+
let deferredSince = 0;
|
|
22
|
+
const drain = async () => {
|
|
23
|
+
if (running || stopped || retryTimer)
|
|
24
|
+
return;
|
|
25
|
+
running = true;
|
|
26
|
+
try {
|
|
27
|
+
while (pending.size > 0 && !stopped) {
|
|
28
|
+
const files = [...pending];
|
|
29
|
+
pending = new Set();
|
|
30
|
+
if (!deferred)
|
|
31
|
+
opts.onEvent({ kind: 'start', files });
|
|
32
|
+
const started = Date.now();
|
|
33
|
+
let result;
|
|
34
|
+
try {
|
|
35
|
+
result = await opts.build(files);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
deferred = false;
|
|
39
|
+
opts.onEvent({ kind: 'failed', files, error });
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (result?.status === 'skipped' && result.reason === 'locked') {
|
|
43
|
+
for (const f of files)
|
|
44
|
+
pending.add(f);
|
|
45
|
+
const { holder } = result;
|
|
46
|
+
if (!deferred) {
|
|
47
|
+
deferred = true;
|
|
48
|
+
deferredSince = started;
|
|
49
|
+
opts.onEvent({ kind: 'deferred', files, retryInMs: retryDelayMs, holder });
|
|
50
|
+
}
|
|
51
|
+
const waitedMs = Date.now() - deferredSince;
|
|
52
|
+
if (waitedMs >= maxDeferMs) {
|
|
53
|
+
// Keep the files: the next change retries them along with its own.
|
|
54
|
+
deferred = false;
|
|
55
|
+
opts.onEvent({ kind: 'stalled', files, waitedMs, holder });
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
retryTimer = setTimeout(() => {
|
|
59
|
+
retryTimer = null;
|
|
60
|
+
void drain();
|
|
61
|
+
}, retryDelayMs);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
deferred = false;
|
|
65
|
+
if (result?.status === 'built') {
|
|
66
|
+
opts.onEvent({ kind: 'built', files, result, durationMs: Date.now() - started });
|
|
67
|
+
}
|
|
68
|
+
else if (result?.status === 'skipped') {
|
|
69
|
+
opts.onEvent({ kind: 'skipped', files, message: result.message });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
running = false;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
enqueue(files) {
|
|
79
|
+
for (const f of files)
|
|
80
|
+
pending.add(f);
|
|
81
|
+
void drain();
|
|
82
|
+
},
|
|
83
|
+
stop() {
|
|
84
|
+
stopped = true;
|
|
85
|
+
if (retryTimer)
|
|
86
|
+
clearTimeout(retryTimer);
|
|
87
|
+
retryTimer = null;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const signed = (n) => (n >= 0 ? `+${n}` : String(n));
|
|
92
|
+
/** One log line per event, stating what actually happened to the graph. */
|
|
93
|
+
export function describeRebuildEvent(e, repoPath) {
|
|
94
|
+
switch (e.kind) {
|
|
95
|
+
case 'start': {
|
|
96
|
+
const shown = e.files.slice(0, 3).map((f) => relative(repoPath, f) || f);
|
|
97
|
+
const more = e.files.length > 3 ? ` (+${e.files.length - 3} more)` : '';
|
|
98
|
+
return `Rebuilding for ${e.files.length} changed file(s): ${shown.join(', ')}${more}…`;
|
|
99
|
+
}
|
|
100
|
+
case 'built': {
|
|
101
|
+
const { nodes, edges } = e.result;
|
|
102
|
+
return (`Graph updated in ${(e.durationMs / 1000).toFixed(1)}s — ` +
|
|
103
|
+
`nodes ${signed(nodes.after - nodes.before)} (now ${nodes.after}), ` +
|
|
104
|
+
`edges ${signed(edges.after - edges.before)} (now ${edges.after})`);
|
|
105
|
+
}
|
|
106
|
+
case 'deferred':
|
|
107
|
+
return (`Rebuild deferred — another build is in progress` +
|
|
108
|
+
`${e.holder ? ` ${describeBuildLockHolder(e.holder)}` : ''}; retrying ` +
|
|
109
|
+
`${e.files.length} changed file(s) every ${(e.retryInMs / 1000).toFixed(1)}s until it finishes`);
|
|
110
|
+
case 'stalled':
|
|
111
|
+
return (`Rebuild still blocked after ${Math.round(e.waitedMs / 60_000)}m — the build lock is held` +
|
|
112
|
+
`${e.holder ? ` by ${describeBuildLockHolder(e.holder).slice(1, -1)} (${e.holder.lockPath})` : ''}. ` +
|
|
113
|
+
`Stopped retrying; the ${e.files.length} changed file(s) are rebuilt on the next change, ` +
|
|
114
|
+
`or run \`monomind monograph build\` once that build has ended.`);
|
|
115
|
+
case 'skipped':
|
|
116
|
+
return `Rebuild skipped — ${e.message}`;
|
|
117
|
+
case 'failed':
|
|
118
|
+
return `Rebuild failed: ${e.error instanceof Error ? e.error.message : String(e.error)}`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=rebuild-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebuild-queue.js","sourceRoot":"","sources":["../../../src/watch/rebuild-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export interface WatchAsyncOptions extends WatcherOptions {
|
|
|
10
10
|
llmMaxSections?: number;
|
|
11
11
|
/** Auto-stop after this many ms of no file changes. Default 30min. 0 = never. */
|
|
12
12
|
idleTimeoutMs?: number;
|
|
13
|
+
/** Delay before retrying a rebuild that found the build lock held. Default 2000ms. */
|
|
14
|
+
retryDelayMs?: number;
|
|
13
15
|
}
|
|
14
16
|
/** Convenience: start a watcher and trigger buildAsync on every change. Returns stop() fn. */
|
|
15
17
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYpD,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;IACvB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;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,CAiFxC;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAO9C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YACmB,QAAQ,EAAE,MAAM,EACjC,IAAI,GAAE,cAAmB,EAI1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B3B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -2,6 +2,7 @@ import { EventEmitter } from 'node:events';
|
|
|
2
2
|
import { extname, relative } from 'node:path';
|
|
3
3
|
import chokidar from 'chokidar';
|
|
4
4
|
import { isSupportedExtension } from '../parsers/loader.js';
|
|
5
|
+
import { createRebuildQueue, describeRebuildEvent } from './rebuild-queue.js';
|
|
5
6
|
/** Tested against '/'-separated paths relative to the watched repo root. */
|
|
6
7
|
const IGNORED_RELATIVE_PATHS = [
|
|
7
8
|
/(^|\/)\../, // dotfiles
|
|
@@ -60,43 +61,28 @@ export async function watchAsync(repoPath, opts = {}) {
|
|
|
60
61
|
}, FULL_REBUILD_IDLE_MS);
|
|
61
62
|
fullRebuildTimer.unref?.();
|
|
62
63
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
await buildIncrementalAsync(repoPath, batch, {
|
|
79
|
-
onProgress: opts.onProgress,
|
|
80
|
-
force: opts.force,
|
|
81
|
-
codeOnly: opts.codeOnly,
|
|
82
|
-
llmMaxSections: opts.llmMaxSections ?? 0,
|
|
83
|
-
});
|
|
84
|
-
incrementalSinceLastFull = true;
|
|
85
|
-
scheduleFullRebuild();
|
|
86
|
-
opts.onProgress?.({ phase: 'watch', message: 'Graph updated (incremental).' });
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
watcher.emit('monograph:error', err);
|
|
90
|
-
opts.onProgress?.({
|
|
91
|
-
phase: 'watch',
|
|
92
|
-
message: `Rebuild failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
64
|
+
const queue = createRebuildQueue({
|
|
65
|
+
retryDelayMs: opts.retryDelayMs,
|
|
66
|
+
build: (batch) => buildIncrementalAsync(repoPath, batch, {
|
|
67
|
+
onProgress: opts.onProgress,
|
|
68
|
+
force: opts.force,
|
|
69
|
+
codeOnly: opts.codeOnly,
|
|
70
|
+
llmMaxSections: opts.llmMaxSections ?? 0,
|
|
71
|
+
}),
|
|
72
|
+
onEvent: (e) => {
|
|
73
|
+
if (e.kind === 'built') {
|
|
74
|
+
incrementalSinceLastFull = true;
|
|
75
|
+
scheduleFullRebuild();
|
|
76
|
+
}
|
|
77
|
+
else if (e.kind === 'failed') {
|
|
78
|
+
watcher.emit('monograph:error', e.error);
|
|
95
79
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
80
|
+
opts.onProgress?.({ phase: 'watch', message: describeRebuildEvent(e, repoPath) });
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
watcher.on('monograph:updated', (files) => {
|
|
84
|
+
resetIdle();
|
|
85
|
+
queue.enqueue(files);
|
|
100
86
|
});
|
|
101
87
|
await watcher.start();
|
|
102
88
|
resetIdle();
|
|
@@ -106,6 +92,7 @@ export async function watchAsync(repoPath, opts = {}) {
|
|
|
106
92
|
clearTimeout(idleTimer);
|
|
107
93
|
if (fullRebuildTimer)
|
|
108
94
|
clearTimeout(fullRebuildTimer);
|
|
95
|
+
queue.stop();
|
|
109
96
|
await watcher.stop();
|
|
110
97
|
},
|
|
111
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"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"}
|