@indigoai-us/hq-cloud 6.18.49-alpha.7 → 6.18.49
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/bin/sync-runner-company.d.ts +3 -5
- package/dist/bin/sync-runner-company.d.ts.map +1 -1
- package/dist/bin/sync-runner-company.js +13 -22
- package/dist/bin/sync-runner-company.js.map +1 -1
- package/dist/bin/sync-runner-watch-loop.d.ts +2 -12
- package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-loop.js +112 -675
- package/dist/bin/sync-runner-watch-loop.js.map +1 -1
- package/dist/bin/sync-runner.d.ts +5 -27
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +15 -133
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/cli/rescue-core.d.ts +6 -1
- package/dist/cli/rescue-core.d.ts.map +1 -1
- package/dist/cli/rescue-core.js +217 -31
- package/dist/cli/rescue-core.js.map +1 -1
- package/dist/cli/share.d.ts +0 -12
- package/dist/cli/share.d.ts.map +1 -1
- package/dist/cli/share.js +4 -57
- package/dist/cli/share.js.map +1 -1
- package/dist/lib/cloud-authoritative.d.ts +2 -9
- package/dist/lib/cloud-authoritative.d.ts.map +1 -1
- package/dist/lib/cloud-authoritative.js +2 -34
- package/dist/lib/cloud-authoritative.js.map +1 -1
- package/dist/outposts/session-host-command.d.ts +13 -0
- package/dist/outposts/session-host-command.d.ts.map +1 -1
- package/dist/outposts/session-host-command.js +34 -17
- package/dist/outposts/session-host-command.js.map +1 -1
- package/dist/outposts/session-host-connection.d.ts +2 -0
- package/dist/outposts/session-host-connection.d.ts.map +1 -1
- package/dist/outposts/session-host-connection.js +15 -0
- package/dist/outposts/session-host-connection.js.map +1 -1
- package/dist/outposts/session-host-server.d.ts +4 -0
- package/dist/outposts/session-host-server.d.ts.map +1 -1
- package/dist/outposts/session-host-server.js +42 -0
- package/dist/outposts/session-host-server.js.map +1 -1
- package/dist/session-log-capture.d.ts.map +1 -1
- package/dist/session-log-capture.js +140 -0
- package/dist/session-log-capture.js.map +1 -1
- package/dist/symlink-target-policy.d.ts +0 -11
- package/dist/symlink-target-policy.d.ts.map +1 -1
- package/dist/symlink-target-policy.js +0 -80
- package/dist/symlink-target-policy.js.map +1 -1
- package/dist/sync/event-sync.d.ts.map +1 -1
- package/dist/sync/event-sync.js +12 -0
- package/dist/sync/event-sync.js.map +1 -1
- package/dist/sync/parallel-sync-coordinator.d.ts +0 -4
- package/dist/sync/parallel-sync-coordinator.d.ts.map +1 -1
- package/dist/sync/parallel-sync-coordinator.js +14 -155
- package/dist/sync/parallel-sync-coordinator.js.map +1 -1
- package/dist/sync/push-receiver.d.ts +20 -6
- package/dist/sync/push-receiver.d.ts.map +1 -1
- package/dist/sync/push-receiver.js +160 -34
- package/dist/sync/push-receiver.js.map +1 -1
- package/dist/watcher.d.ts +3 -3
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +7 -15
- package/dist/watcher.js.map +1 -1
- package/package.json +2 -1
- package/dist/bin/watcher-catchup-skip-store.d.ts +0 -59
- package/dist/bin/watcher-catchup-skip-store.d.ts.map +0 -1
- package/dist/bin/watcher-catchup-skip-store.js +0 -278
- package/dist/bin/watcher-catchup-skip-store.js.map +0 -1
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* - `company-brief.md` — rewritten by the ontology gardener's brief-generator
|
|
11
11
|
* on every run.
|
|
12
12
|
* - `board.json` — rewritten by board automation.
|
|
13
|
-
* -
|
|
14
|
-
* pipeline are the authors; clients only consume.
|
|
13
|
+
* - `ontology/**`, `signals/**`, `sources/**` — the gardener / sources+signals
|
|
14
|
+
* pipeline are the sole authors; clients only consume.
|
|
15
15
|
*
|
|
16
16
|
* A client that also holds these locally diverges from the server copy on
|
|
17
17
|
* essentially every sync. Under `--on-conflict keep` (what outposts run) that
|
|
@@ -42,11 +42,4 @@ export declare const CLOUD_AUTHORITATIVE_PATTERNS: readonly RegExp[];
|
|
|
42
42
|
* vault-relative path (`…`); Windows separators are normalized.
|
|
43
43
|
*/
|
|
44
44
|
export declare function isCloudAuthoritative(relPath: string): boolean;
|
|
45
|
-
/** Stable bounded class for local catch-up exclusion telemetry. */
|
|
46
|
-
export declare function cloudAuthoritativePathClass(relPath: string): "company-brief" | "board" | "ontology" | "signals" | "sources" | undefined;
|
|
47
|
-
/** Push and warm-up share the same local ownership decision, with two explicit client exceptions. */
|
|
48
|
-
export declare function isLocallyIneligibleForPush(relPath: string, options?: {
|
|
49
|
-
ontologyEntityPush?: boolean;
|
|
50
|
-
boardClientOwned?: boolean;
|
|
51
|
-
}): boolean;
|
|
52
45
|
//# sourceMappingURL=cloud-authoritative.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-authoritative.d.ts","sourceRoot":"","sources":["../../src/lib/cloud-authoritative.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAMzD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO7D
|
|
1
|
+
{"version":3,"file":"cloud-authoritative.d.ts","sourceRoot":"","sources":["../../src/lib/cloud-authoritative.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAMzD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO7D"}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* - `company-brief.md` — rewritten by the ontology gardener's brief-generator
|
|
11
11
|
* on every run.
|
|
12
12
|
* - `board.json` — rewritten by board automation.
|
|
13
|
-
* -
|
|
14
|
-
* pipeline are the authors; clients only consume.
|
|
13
|
+
* - `ontology/**`, `signals/**`, `sources/**` — the gardener / sources+signals
|
|
14
|
+
* pipeline are the sole authors; clients only consume.
|
|
15
15
|
*
|
|
16
16
|
* A client that also holds these locally diverges from the server copy on
|
|
17
17
|
* essentially every sync. Under `--on-conflict keep` (what outposts run) that
|
|
@@ -55,36 +55,4 @@ export function isCloudAuthoritative(relPath) {
|
|
|
55
55
|
.replace(/^companies\/[^/]+\//, "");
|
|
56
56
|
return CLOUD_AUTHORITATIVE_PATTERNS.some((re) => re.test(vaultRel));
|
|
57
57
|
}
|
|
58
|
-
/** Stable bounded class for local catch-up exclusion telemetry. */
|
|
59
|
-
export function cloudAuthoritativePathClass(relPath) {
|
|
60
|
-
const vaultRel = relPath
|
|
61
|
-
.split("\\")
|
|
62
|
-
.join("/")
|
|
63
|
-
.replace(/^\.?\//, "")
|
|
64
|
-
.replace(/^companies\/[^/]+\//, "");
|
|
65
|
-
if (vaultRel === "company-brief.md")
|
|
66
|
-
return "company-brief";
|
|
67
|
-
if (vaultRel === "board.json")
|
|
68
|
-
return "board";
|
|
69
|
-
if (/^ontology\//.test(vaultRel))
|
|
70
|
-
return "ontology";
|
|
71
|
-
if (/^signals\//.test(vaultRel))
|
|
72
|
-
return "signals";
|
|
73
|
-
if (/^sources\//.test(vaultRel))
|
|
74
|
-
return "sources";
|
|
75
|
-
return undefined;
|
|
76
|
-
}
|
|
77
|
-
/** Push and warm-up share the same local ownership decision, with two explicit client exceptions. */
|
|
78
|
-
export function isLocallyIneligibleForPush(relPath, options = {}) {
|
|
79
|
-
const vaultRel = relPath
|
|
80
|
-
.split("\\")
|
|
81
|
-
.join("/")
|
|
82
|
-
.replace(/^\.?\//, "")
|
|
83
|
-
.replace(/^companies\/[^/]+\//, "");
|
|
84
|
-
if (options.boardClientOwned && vaultRel === "board.json")
|
|
85
|
-
return false;
|
|
86
|
-
if (/^ontology\/entities\//.test(vaultRel) && options.ontologyEntityPush === true)
|
|
87
|
-
return false;
|
|
88
|
-
return isCloudAuthoritative(relPath);
|
|
89
|
-
}
|
|
90
58
|
//# sourceMappingURL=cloud-authoritative.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-authoritative.js","sourceRoot":"","sources":["../../src/lib/cloud-authoritative.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC7D,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,YAAY;IACZ,YAAY;CACb,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,QAAQ,GAAG,OAAO;SACrB,KAAK,CAAC,IAAI,CAAC;SACX,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC
|
|
1
|
+
{"version":3,"file":"cloud-authoritative.js","sourceRoot":"","sources":["../../src/lib/cloud-authoritative.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC7D,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,YAAY;IACZ,YAAY;CACb,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,QAAQ,GAAG,OAAO;SACrB,KAAK,CAAC,IAAI,CAAC;SACX,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -59,6 +59,19 @@ export declare const SESSION_HOST_JWKS_TIMEOUT_MS = 10000;
|
|
|
59
59
|
export declare function fetchSessionHostJwks(url: string): Promise<{
|
|
60
60
|
keys: Jwk[];
|
|
61
61
|
}>;
|
|
62
|
+
export interface SessionHostSignalSource {
|
|
63
|
+
once(signal: NodeJS.Signals, listener: () => void): unknown;
|
|
64
|
+
removeListener(signal: NodeJS.Signals, listener: () => void): unknown;
|
|
65
|
+
}
|
|
66
|
+
interface SessionHostLifecycleServer {
|
|
67
|
+
close(): Promise<void>;
|
|
68
|
+
drain(): Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
interface SessionHostLifecycleSessions {
|
|
71
|
+
shutdown(): Promise<void>;
|
|
72
|
+
}
|
|
73
|
+
/** Wait for the process stop signal, draining accepted requests only on SIGUSR2. */
|
|
74
|
+
export declare function waitForSessionHostShutdown(server: SessionHostLifecycleServer, sessions: SessionHostLifecycleSessions, signals?: SessionHostSignalSource): Promise<void>;
|
|
62
75
|
export interface SessionHostCommandDeps {
|
|
63
76
|
/** The hq-cloud version, reported in the welcome line. */
|
|
64
77
|
version: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-host-command.d.ts","sourceRoot":"","sources":["../../src/outposts/session-host-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,OAAO,EAGL,KAAK,GAAG,EACT,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CAiDzF;AAkFD,KAAK,aAAa,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAEjD,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,MAAM,EAAE,MAAM,aAAa,CAAC;IAC5B,uDAAuD;IACvD,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB;;;OAGG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS3F;AAWD,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAMhF;AAED,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,sBAAsB,GAC3B,IAAI,
|
|
1
|
+
{"version":3,"file":"session-host-command.d.ts","sourceRoot":"","sources":["../../src/outposts/session-host-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,OAAO,EAGL,KAAK,GAAG,EACT,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CAiDzF;AAkFD,KAAK,aAAa,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAEjD,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,MAAM,EAAE,MAAM,aAAa,CAAC;IAC5B,uDAAuD;IACvD,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB;;;OAGG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS3F;AAWD,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAMhF;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAC5D,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CACvE;AAED,UAAU,0BAA0B;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,UAAU,4BAA4B;IACpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,0BAA0B,EAClC,QAAQ,EAAE,4BAA4B,EACtC,OAAO,GAAE,uBAAiC,GACzC,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,sBAAsB,GAC3B,IAAI,CAqEN"}
|
|
@@ -180,6 +180,37 @@ export async function fetchSessionHostJwks(url) {
|
|
|
180
180
|
throw new Error(`could not read the sign-in keys: HTTP ${response.status}`);
|
|
181
181
|
return (await response.json());
|
|
182
182
|
}
|
|
183
|
+
/** Wait for the process stop signal, draining accepted requests only on SIGUSR2. */
|
|
184
|
+
export function waitForSessionHostShutdown(server, sessions, signals = process) {
|
|
185
|
+
return new Promise((resolve, reject) => {
|
|
186
|
+
let stopping = false;
|
|
187
|
+
const listeners = new Map();
|
|
188
|
+
const stop = (drain) => {
|
|
189
|
+
if (stopping)
|
|
190
|
+
return;
|
|
191
|
+
stopping = true;
|
|
192
|
+
for (const [signal, listener] of listeners)
|
|
193
|
+
signals.removeListener(signal, listener);
|
|
194
|
+
void (async () => {
|
|
195
|
+
if (drain)
|
|
196
|
+
await server.drain();
|
|
197
|
+
else
|
|
198
|
+
await server.close();
|
|
199
|
+
await sessions.shutdown();
|
|
200
|
+
})().then(resolve, reject);
|
|
201
|
+
};
|
|
202
|
+
const immediate = () => stop(false);
|
|
203
|
+
const graceful = () => stop(true);
|
|
204
|
+
for (const [signal, listener] of [
|
|
205
|
+
["SIGTERM", immediate],
|
|
206
|
+
["SIGINT", immediate],
|
|
207
|
+
["SIGUSR2", graceful],
|
|
208
|
+
]) {
|
|
209
|
+
listeners.set(signal, listener);
|
|
210
|
+
signals.once(signal, listener);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
183
214
|
export function registerSessionHostCommand(outposts, deps) {
|
|
184
215
|
outposts
|
|
185
216
|
.command("session-host", { hidden: true })
|
|
@@ -238,23 +269,9 @@ export function registerSessionHostCommand(outposts, deps) {
|
|
|
238
269
|
},
|
|
239
270
|
});
|
|
240
271
|
console.error(`session host listening on ${config.host}:${server.port}; new sessions start in ${config.defaultCwd}`);
|
|
241
|
-
//
|
|
242
|
-
// the
|
|
243
|
-
await
|
|
244
|
-
let stopping = false;
|
|
245
|
-
const stop = () => {
|
|
246
|
-
if (stopping)
|
|
247
|
-
return;
|
|
248
|
-
stopping = true;
|
|
249
|
-
void (async () => {
|
|
250
|
-
await server.close();
|
|
251
|
-
await sessions.shutdown();
|
|
252
|
-
resolve();
|
|
253
|
-
})();
|
|
254
|
-
};
|
|
255
|
-
process.once("SIGTERM", stop);
|
|
256
|
-
process.once("SIGINT", stop);
|
|
257
|
-
});
|
|
272
|
+
// SIGTERM and SIGINT retain their immediate shutdown behavior. The daemon
|
|
273
|
+
// uses SIGUSR2 for the bounded plan-change drain before its 15-minute cap.
|
|
274
|
+
await waitForSessionHostShutdown(server, sessions);
|
|
258
275
|
});
|
|
259
276
|
}
|
|
260
277
|
//# sourceMappingURL=session-host-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-host-command.js","sourceRoot":"","sources":["../../src/outposts/session-host-command.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-host-command.js","sourceRoot":"","sources":["../../src/outposts/session-host-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ export interface ConnectionDeps {
|
|
|
37
37
|
}
|
|
38
38
|
export interface Connection {
|
|
39
39
|
push(chunk: Buffer): void;
|
|
40
|
+
/** Stop admitting requests and settle requests already received. */
|
|
41
|
+
drain(): Promise<void>;
|
|
40
42
|
/** The peer went away. Sessions keep running. */
|
|
41
43
|
end(): void;
|
|
42
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-host-connection.d.ts","sourceRoot":"","sources":["../../src/outposts/session-host-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,mDAAmD;IACnD,YAAY,IAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iDAAiD;IACjD,GAAG,IAAI,IAAI,CAAC;CACb;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"session-host-connection.d.ts","sourceRoot":"","sources":["../../src/outposts/session-host-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,mDAAmD;IACnD,YAAY,IAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,iDAAiD;IACjD,GAAG,IAAI,IAAI,CAAC;CACb;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,UAAU,CAsPvF"}
|
|
@@ -26,6 +26,7 @@ export function handleConnection(port, deps) {
|
|
|
26
26
|
const log = (line) => deps.log?.(line);
|
|
27
27
|
let authed = false;
|
|
28
28
|
let closed = false;
|
|
29
|
+
let draining = false;
|
|
29
30
|
const attachments = new Map();
|
|
30
31
|
let queue = Promise.resolve();
|
|
31
32
|
const helloTimer = setTimeout(() => {
|
|
@@ -200,6 +201,16 @@ export function handleConnection(port, deps) {
|
|
|
200
201
|
const splitter = createLineSplitter({
|
|
201
202
|
maxLineBytes: () => (authed ? maxLineBytes : maxPreAuthLineBytes),
|
|
202
203
|
onLine: (line) => {
|
|
204
|
+
if (draining) {
|
|
205
|
+
const parsed = parseClientMessage(line);
|
|
206
|
+
const id = parsed.ok && "id" in parsed.message
|
|
207
|
+
? parsed.message.id
|
|
208
|
+
: !parsed.ok
|
|
209
|
+
? parsed.id
|
|
210
|
+
: undefined;
|
|
211
|
+
sendError("shutting-down", "the session host is draining and is not accepting new requests", id ? { id } : {});
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
203
214
|
// Lines are handled one at a time, in order: a hello that is still being
|
|
204
215
|
// checked must settle before whatever the app pipelined behind it.
|
|
205
216
|
queue = queue.then(() => handle(line)).catch((error) => {
|
|
@@ -215,6 +226,10 @@ export function handleConnection(port, deps) {
|
|
|
215
226
|
return;
|
|
216
227
|
splitter.push(chunk);
|
|
217
228
|
},
|
|
229
|
+
drain() {
|
|
230
|
+
draining = true;
|
|
231
|
+
return queue;
|
|
232
|
+
},
|
|
218
233
|
end() {
|
|
219
234
|
if (closed)
|
|
220
235
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-host-connection.js","sourceRoot":"","sources":["../../src/outposts/session-host-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-host-connection.js","sourceRoot":"","sources":["../../src/outposts/session-host-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,13 @@ export interface SessionHostServerOptions {
|
|
|
17
17
|
export interface SessionHostServer {
|
|
18
18
|
address: string;
|
|
19
19
|
port: number;
|
|
20
|
+
/** Stop accepting connections, settle accepted request handlers, and close clients. */
|
|
21
|
+
drain(): Promise<void>;
|
|
20
22
|
close(): Promise<void>;
|
|
21
23
|
}
|
|
22
24
|
/** Names are ambiguous and interfaces are public; only the two literals pass. */
|
|
23
25
|
export declare function assertLoopbackHost(host: string): void;
|
|
26
|
+
/** Stay one minute below hq-cli's 15-minute drain cap, including final shutdown. */
|
|
27
|
+
export declare const SESSION_HOST_DRAIN_MAX_MS: number;
|
|
24
28
|
export declare function startSessionHostServer(options: SessionHostServerOptions): Promise<SessionHostServer>;
|
|
25
29
|
//# sourceMappingURL=session-host-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-host-server.d.ts","sourceRoot":"","sources":["../../src/outposts/session-host-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMrD;
|
|
1
|
+
{"version":3,"file":"session-host-server.d.ts","sourceRoot":"","sources":["../../src/outposts/session-host-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMrD;AAID,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,QAAc,CAAC;AAErD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAwF5B"}
|
|
@@ -17,10 +17,15 @@ export function assertLoopbackHost(host) {
|
|
|
17
17
|
}
|
|
18
18
|
/** How long a closing socket gets to flush its last line before it is cut. */
|
|
19
19
|
const FLUSH_GRACE_MS = 2_000;
|
|
20
|
+
/** Stay one minute below hq-cli's 15-minute drain cap, including final shutdown. */
|
|
21
|
+
export const SESSION_HOST_DRAIN_MAX_MS = 14 * 60_000;
|
|
20
22
|
export async function startSessionHostServer(options) {
|
|
21
23
|
const host = options.host ?? "127.0.0.1";
|
|
22
24
|
assertLoopbackHost(host);
|
|
23
25
|
const sockets = new Set();
|
|
26
|
+
const connections = new Map();
|
|
27
|
+
let draining = false;
|
|
28
|
+
let drainPromise;
|
|
24
29
|
const server = createServer((socket) => {
|
|
25
30
|
sockets.add(socket);
|
|
26
31
|
socket.setNoDelay(true);
|
|
@@ -35,11 +40,15 @@ export async function startSessionHostServer(options) {
|
|
|
35
40
|
},
|
|
36
41
|
pendingBytes: () => socket.writableLength,
|
|
37
42
|
}, { ...options.connection, sessions: options.sessions });
|
|
43
|
+
connections.set(socket, connection);
|
|
44
|
+
if (draining)
|
|
45
|
+
void connection.drain();
|
|
38
46
|
socket.on("data", (chunk) => connection.push(chunk));
|
|
39
47
|
// A desktop app that goes away mid-stream is ordinary, not an error.
|
|
40
48
|
socket.on("error", () => { });
|
|
41
49
|
socket.on("close", () => {
|
|
42
50
|
sockets.delete(socket);
|
|
51
|
+
connections.delete(socket);
|
|
43
52
|
connection.end();
|
|
44
53
|
});
|
|
45
54
|
});
|
|
@@ -55,6 +64,39 @@ export async function startSessionHostServer(options) {
|
|
|
55
64
|
return {
|
|
56
65
|
address: typeof bound === "object" && bound !== null ? bound.address : host,
|
|
57
66
|
port: typeof bound === "object" && bound !== null ? bound.port : options.port,
|
|
67
|
+
drain() {
|
|
68
|
+
draining = true;
|
|
69
|
+
drainPromise ??= (async () => {
|
|
70
|
+
let timedOut = false;
|
|
71
|
+
let drainTimer;
|
|
72
|
+
const stoppedAccepting = new Promise((resolve, reject) => {
|
|
73
|
+
server.close((error) => (error ? reject(error) : resolve()));
|
|
74
|
+
});
|
|
75
|
+
const settleAccepted = Promise.all([...connections.values()].map((connection) => connection.drain()));
|
|
76
|
+
const deadline = new Promise((resolve) => {
|
|
77
|
+
drainTimer = setTimeout(() => {
|
|
78
|
+
timedOut = true;
|
|
79
|
+
resolve();
|
|
80
|
+
}, SESSION_HOST_DRAIN_MAX_MS);
|
|
81
|
+
});
|
|
82
|
+
await Promise.race([settleAccepted, deadline]);
|
|
83
|
+
if (drainTimer)
|
|
84
|
+
clearTimeout(drainTimer);
|
|
85
|
+
if (timedOut) {
|
|
86
|
+
console.error(`session host: drain reached ${SESSION_HOST_DRAIN_MAX_MS / 1_000}s; closing accepted connections`);
|
|
87
|
+
for (const socket of sockets)
|
|
88
|
+
socket.destroy();
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
for (const socket of sockets) {
|
|
92
|
+
socket.end();
|
|
93
|
+
setTimeout(() => socket.destroy(), FLUSH_GRACE_MS).unref();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
await stoppedAccepting;
|
|
97
|
+
})();
|
|
98
|
+
return drainPromise;
|
|
99
|
+
},
|
|
58
100
|
async close() {
|
|
59
101
|
for (const socket of sockets)
|
|
60
102
|
socket.destroy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-host-server.js","sourceRoot":"","sources":["../../src/outposts/session-host-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-host-server.js","sourceRoot":"","sources":["../../src/outposts/session-host-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-log-capture.d.ts","sourceRoot":"","sources":["../src/session-log-capture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-log-capture.d.ts","sourceRoot":"","sources":["../src/session-log-capture.ts"],"names":[],"mappings":"AA2EA,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,KAAK,gBAAgB,GACjB,YAAY,GACZ,eAAe,GACf,qBAAqB,GACrB,cAAc,GACd,eAAe,GACf,oBAAoB,CAAC;AAIzB,kDAAkD;AAClD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GACpE,IAAI,CAEN;AAED,qEAAqE;AACrE,wBAAgB,qDAAqD,CACnE,0BAA0B,EAAE,MAAM,GAAG,SAAS,GAC7C,IAAI,CAEN;AAs4BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,wBAAwB,CAoFjH"}
|
|
@@ -21,6 +21,7 @@ const COPY_BUFFER_BYTES = 1024 * 1024;
|
|
|
21
21
|
const COPY_ATTEMPTS = 3;
|
|
22
22
|
const CAPTURE_BATCH_SIZE = 128;
|
|
23
23
|
const CAPTURE_COMPACTION_RECORDS = 256;
|
|
24
|
+
const rootsSweptForOrphanTemps = new Set();
|
|
24
25
|
let captureTestHook;
|
|
25
26
|
let captureTestMaxRecordsBeforeCompaction;
|
|
26
27
|
/** Test-only crash seam for recovery coverage. */
|
|
@@ -433,6 +434,107 @@ function recoverPrepared(root, store, summary, now) {
|
|
|
433
434
|
appendCaptureBatches(store, COMMIT_RECORD, recovered, now());
|
|
434
435
|
summary.copied += recovered.length;
|
|
435
436
|
}
|
|
437
|
+
function processIsAlive(pid) {
|
|
438
|
+
try {
|
|
439
|
+
process.kill(pid, 0);
|
|
440
|
+
return true;
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
// EPERM and unexpected probe failures are indeterminate, so preserve the
|
|
444
|
+
// file. Only ESRCH proves that the writer process is gone.
|
|
445
|
+
return error.code !== "ESRCH";
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
function sweepOrphanCaptureTemps(root, prepared, reportError) {
|
|
449
|
+
let canonicalRoot;
|
|
450
|
+
try {
|
|
451
|
+
canonicalRoot = fs.realpathSync.native(root);
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
if (error.code === "ENOENT")
|
|
455
|
+
return true;
|
|
456
|
+
reportError(error.code ?? "unknown");
|
|
457
|
+
return false;
|
|
458
|
+
}
|
|
459
|
+
const workspace = path.join(canonicalRoot, "workspace");
|
|
460
|
+
const sessionLogs = path.join(workspace, ".session-logs");
|
|
461
|
+
let rootStat;
|
|
462
|
+
for (const component of [workspace, sessionLogs]) {
|
|
463
|
+
try {
|
|
464
|
+
const componentStat = fs.lstatSync(component);
|
|
465
|
+
if (componentStat.isSymbolicLink())
|
|
466
|
+
return false;
|
|
467
|
+
if (component === sessionLogs)
|
|
468
|
+
rootStat = componentStat;
|
|
469
|
+
}
|
|
470
|
+
catch (error) {
|
|
471
|
+
if (error.code === "ENOENT")
|
|
472
|
+
return true;
|
|
473
|
+
reportError(error.code ?? "unknown");
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
if (!rootStat?.isDirectory())
|
|
478
|
+
return true;
|
|
479
|
+
try {
|
|
480
|
+
const resolvedSessionLogs = fs.realpathSync.native(sessionLogs);
|
|
481
|
+
const expectedSessionLogs = path.join(canonicalRoot, "workspace", ".session-logs");
|
|
482
|
+
if (resolvedSessionLogs !== expectedSessionLogs)
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
485
|
+
catch (error) {
|
|
486
|
+
if (error.code !== "ENOENT") {
|
|
487
|
+
reportError(error.code ?? "unknown");
|
|
488
|
+
return false;
|
|
489
|
+
}
|
|
490
|
+
return true;
|
|
491
|
+
}
|
|
492
|
+
const protectedTemps = new Set();
|
|
493
|
+
for (const capture of Object.values(prepared)) {
|
|
494
|
+
const destination = destinationPath(root, capture.destinationKey);
|
|
495
|
+
if (destination && path.basename(capture.tempName) === capture.tempName) {
|
|
496
|
+
protectedTemps.add(path.resolve(path.dirname(destination), capture.tempName));
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
let complete = true;
|
|
500
|
+
const visit = (directory) => {
|
|
501
|
+
let entries;
|
|
502
|
+
try {
|
|
503
|
+
entries = fs.readdirSync(directory, { withFileTypes: true });
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
if (error.code !== "ENOENT") {
|
|
507
|
+
reportError(error.code ?? "unknown");
|
|
508
|
+
complete = false;
|
|
509
|
+
}
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
for (const entry of entries) {
|
|
513
|
+
const file = path.join(directory, entry.name);
|
|
514
|
+
if (entry.isDirectory()) {
|
|
515
|
+
visit(file);
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
if (!entry.isFile() || protectedTemps.has(file))
|
|
519
|
+
continue;
|
|
520
|
+
const match = /^\..+\.hq-session-log-(\d+)-[0-9a-f]{16}\.tmp$/.exec(entry.name);
|
|
521
|
+
if (!match)
|
|
522
|
+
continue;
|
|
523
|
+
const pid = Number(match[1]);
|
|
524
|
+
if (!Number.isSafeInteger(pid) || pid <= 0 || processIsAlive(pid))
|
|
525
|
+
continue;
|
|
526
|
+
try {
|
|
527
|
+
safeRemove(file);
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
reportError(error.code ?? "unknown");
|
|
531
|
+
complete = false;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
};
|
|
535
|
+
visit(sessionLogs);
|
|
536
|
+
return complete;
|
|
537
|
+
}
|
|
436
538
|
function captureOne(root, store, harness, source, destinationKey, summary, batches, quietForMs = 0, maxStalenessMs = 0, now = Date.now) {
|
|
437
539
|
const destination = destinationPath(root, destinationKey);
|
|
438
540
|
if (!destination)
|
|
@@ -476,6 +578,30 @@ function captureOne(root, store, harness, source, destinationKey, summary, batch
|
|
|
476
578
|
summary.deferred++;
|
|
477
579
|
return;
|
|
478
580
|
}
|
|
581
|
+
// A replaced or retouched archived rollout can have a new filesystem
|
|
582
|
+
// signature while its bytes are identical. Compare content before making a
|
|
583
|
+
// staging copy so starts do not rewrite unchanged rollouts to temp files.
|
|
584
|
+
if (committed && currentBefore.size === committed.signature.size) {
|
|
585
|
+
const size = Number(currentBefore.size);
|
|
586
|
+
if (Number.isSafeInteger(size)) {
|
|
587
|
+
const currentHash = hashPrefix(canonicalSource, size);
|
|
588
|
+
const afterHash = sourceSignature(canonicalSource);
|
|
589
|
+
if (!afterHash || !signaturesEqual(currentBefore, afterHash))
|
|
590
|
+
continue;
|
|
591
|
+
if (currentHash === committed.hash) {
|
|
592
|
+
batches.queueMetadataOnly({
|
|
593
|
+
id,
|
|
594
|
+
capture: {
|
|
595
|
+
destinationKey,
|
|
596
|
+
hash: currentHash,
|
|
597
|
+
signature: afterHash,
|
|
598
|
+
tempName: tempNameFor(destination),
|
|
599
|
+
},
|
|
600
|
+
});
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
479
605
|
if (committed) {
|
|
480
606
|
const append = tryAppend(canonicalSource, destination, committed, currentBefore);
|
|
481
607
|
if (append.kind === "source-changed")
|
|
@@ -825,6 +951,20 @@ export function captureSessionLogs(root, options = {}) {
|
|
|
825
951
|
maxRecordsBeforeCompaction: captureTestMaxRecordsBeforeCompaction ?? CAPTURE_COMPACTION_RECORDS,
|
|
826
952
|
});
|
|
827
953
|
recoverPrepared(canonical, store, summary, now);
|
|
954
|
+
if (!rootsSweptForOrphanTemps.has(canonical)) {
|
|
955
|
+
const complete = sweepOrphanCaptureTemps(canonical, store.getState().prepared, (code) => {
|
|
956
|
+
warning(summary, `session-log orphan temp cleanup failed (${code}).`);
|
|
957
|
+
});
|
|
958
|
+
if (complete) {
|
|
959
|
+
rootsSweptForOrphanTemps.add(canonical);
|
|
960
|
+
// Bound process-local bookkeeping when callers capture many roots.
|
|
961
|
+
if (rootsSweptForOrphanTemps.size > 128) {
|
|
962
|
+
const oldest = rootsSweptForOrphanTemps.values().next().value;
|
|
963
|
+
if (oldest)
|
|
964
|
+
rootsSweptForOrphanTemps.delete(oldest);
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
828
968
|
for (const capture of [captureClaude, captureCodex, captureGrok]) {
|
|
829
969
|
try {
|
|
830
970
|
capture(canonical, store, summary, candidateRoots, options.quietForMs ?? 0, options.maxStalenessMs ?? 0, now);
|