@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.
Files changed (63) hide show
  1. package/dist/bin/sync-runner-company.d.ts +3 -5
  2. package/dist/bin/sync-runner-company.d.ts.map +1 -1
  3. package/dist/bin/sync-runner-company.js +13 -22
  4. package/dist/bin/sync-runner-company.js.map +1 -1
  5. package/dist/bin/sync-runner-watch-loop.d.ts +2 -12
  6. package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
  7. package/dist/bin/sync-runner-watch-loop.js +112 -675
  8. package/dist/bin/sync-runner-watch-loop.js.map +1 -1
  9. package/dist/bin/sync-runner.d.ts +5 -27
  10. package/dist/bin/sync-runner.d.ts.map +1 -1
  11. package/dist/bin/sync-runner.js +15 -133
  12. package/dist/bin/sync-runner.js.map +1 -1
  13. package/dist/cli/rescue-core.d.ts +6 -1
  14. package/dist/cli/rescue-core.d.ts.map +1 -1
  15. package/dist/cli/rescue-core.js +217 -31
  16. package/dist/cli/rescue-core.js.map +1 -1
  17. package/dist/cli/share.d.ts +0 -12
  18. package/dist/cli/share.d.ts.map +1 -1
  19. package/dist/cli/share.js +4 -57
  20. package/dist/cli/share.js.map +1 -1
  21. package/dist/lib/cloud-authoritative.d.ts +2 -9
  22. package/dist/lib/cloud-authoritative.d.ts.map +1 -1
  23. package/dist/lib/cloud-authoritative.js +2 -34
  24. package/dist/lib/cloud-authoritative.js.map +1 -1
  25. package/dist/outposts/session-host-command.d.ts +13 -0
  26. package/dist/outposts/session-host-command.d.ts.map +1 -1
  27. package/dist/outposts/session-host-command.js +34 -17
  28. package/dist/outposts/session-host-command.js.map +1 -1
  29. package/dist/outposts/session-host-connection.d.ts +2 -0
  30. package/dist/outposts/session-host-connection.d.ts.map +1 -1
  31. package/dist/outposts/session-host-connection.js +15 -0
  32. package/dist/outposts/session-host-connection.js.map +1 -1
  33. package/dist/outposts/session-host-server.d.ts +4 -0
  34. package/dist/outposts/session-host-server.d.ts.map +1 -1
  35. package/dist/outposts/session-host-server.js +42 -0
  36. package/dist/outposts/session-host-server.js.map +1 -1
  37. package/dist/session-log-capture.d.ts.map +1 -1
  38. package/dist/session-log-capture.js +140 -0
  39. package/dist/session-log-capture.js.map +1 -1
  40. package/dist/symlink-target-policy.d.ts +0 -11
  41. package/dist/symlink-target-policy.d.ts.map +1 -1
  42. package/dist/symlink-target-policy.js +0 -80
  43. package/dist/symlink-target-policy.js.map +1 -1
  44. package/dist/sync/event-sync.d.ts.map +1 -1
  45. package/dist/sync/event-sync.js +12 -0
  46. package/dist/sync/event-sync.js.map +1 -1
  47. package/dist/sync/parallel-sync-coordinator.d.ts +0 -4
  48. package/dist/sync/parallel-sync-coordinator.d.ts.map +1 -1
  49. package/dist/sync/parallel-sync-coordinator.js +14 -155
  50. package/dist/sync/parallel-sync-coordinator.js.map +1 -1
  51. package/dist/sync/push-receiver.d.ts +20 -6
  52. package/dist/sync/push-receiver.d.ts.map +1 -1
  53. package/dist/sync/push-receiver.js +160 -34
  54. package/dist/sync/push-receiver.js.map +1 -1
  55. package/dist/watcher.d.ts +3 -3
  56. package/dist/watcher.d.ts.map +1 -1
  57. package/dist/watcher.js +7 -15
  58. package/dist/watcher.js.map +1 -1
  59. package/package.json +2 -1
  60. package/dist/bin/watcher-catchup-skip-store.d.ts +0 -59
  61. package/dist/bin/watcher-catchup-skip-store.d.ts.map +0 -1
  62. package/dist/bin/watcher-catchup-skip-store.js +0 -278
  63. 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
- * - most of `ontology/**`, `signals/**`, `sources/**` — the gardener / sources+signals
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;AAED,mEAAmE;AACnE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GACd,eAAe,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAY5E;AAED,qGAAqG;AACrG,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GACzE,OAAO,CAST"}
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
- * - most of `ontology/**`, `signals/**`, `sources/**` — the gardener / sources+signals
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;AAED,mEAAmE;AACnE,MAAM,UAAU,2BAA2B,CACzC,OAAe;IAEf,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,IAAI,QAAQ,KAAK,kBAAkB;QAAE,OAAO,eAAe,CAAC;IAC5D,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IACpD,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,UAAwE,EAAE;IAE1E,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,IAAI,OAAO,CAAC,gBAAgB,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACxE,IAAI,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChG,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,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,CAkFN"}
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
- // systemd sends SIGTERM on stop/restart: stop accepting first, then give
242
- // the running sessions their chance to finish.
243
- await new Promise((resolve) => {
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,CAmOvF"}
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":"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"}
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;AAKD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAoD5B"}
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":"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"}
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":"AA0EA,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;AA8wBD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,wBAAwB,CAuEjH"}
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);