frizz-server 0.15.7 → 0.15.8

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 (102) hide show
  1. package/dist/acp-daemon.js +27 -3
  2. package/dist/claude-agent-broker.js +27 -21
  3. package/dist/codex-app-server-daemon.js +27 -3
  4. package/dist/dev-child.js +421 -155
  5. package/package.json +1 -1
  6. package/runtime/cc-worker/bin/frizz-mcp.mjs +21 -17
  7. package/runtime/cc-worker/hooks/session-seed.mjs +1 -1
  8. package/web-dist/assets/{abnfDiagram-VRR7QNED-DwSF6UVy.js → abnfDiagram-VRR7QNED-5ei_4zAM.js} +1 -1
  9. package/web-dist/assets/{arc-BO1i7GWM.js → arc-IM-a48Qs.js} +1 -1
  10. package/web-dist/assets/architecture-TIHT7OUA-bSjZeCDP.js +1 -0
  11. package/web-dist/assets/{architectureDiagram-ZJ3FMSHR-msNhjgsP.js → architectureDiagram-ZJ3FMSHR-2XGTphLh.js} +1 -1
  12. package/web-dist/assets/{blockDiagram-677ZJIJ3-JCCwJqsE.js → blockDiagram-677ZJIJ3-DZM9KutE.js} +1 -1
  13. package/web-dist/assets/{c4Diagram-LMCZKHZV-B5vS6rLH.js → c4Diagram-LMCZKHZV-CKa_m4-S.js} +1 -1
  14. package/web-dist/assets/channel-CZsSDpaO.js +1 -0
  15. package/web-dist/assets/{chunk-32BRIVSS-BeH_kPjp.js → chunk-32BRIVSS-BLSMcIRY.js} +1 -1
  16. package/web-dist/assets/{chunk-52WLFC77-D0OtliIj.js → chunk-52WLFC77-DevWfx8Y.js} +1 -1
  17. package/web-dist/assets/{chunk-C7G6YPKG-wbaKYBGi.js → chunk-C7G6YPKG-CsLDw_Vc.js} +1 -1
  18. package/web-dist/assets/{chunk-EX3LRPZG-JrdwUCV4.js → chunk-EX3LRPZG-CAVfNVN8.js} +1 -1
  19. package/web-dist/assets/{chunk-FWX5IMBZ-dk5peTlq.js → chunk-FWX5IMBZ-ba3X5gAQ.js} +2 -2
  20. package/web-dist/assets/{chunk-HOUHSVGY-DEVMSmR0.js → chunk-HOUHSVGY-Bm5rhDGu.js} +1 -1
  21. package/web-dist/assets/{chunk-ICXQ74PX-Q4B4QfXk.js → chunk-ICXQ74PX-DKF-sXIi.js} +1 -1
  22. package/web-dist/assets/{chunk-MOJQB5TN-CFljAhrA.js → chunk-MOJQB5TN-19qz3xL4.js} +1 -1
  23. package/web-dist/assets/{chunk-OGEWGWER-uDxaNMkK.js → chunk-OGEWGWER-DLdOho5W.js} +1 -1
  24. package/web-dist/assets/{chunk-PUDLZKDR-B1_PcfSW.js → chunk-PUDLZKDR-C1Nj5k8G.js} +1 -1
  25. package/web-dist/assets/{chunk-Q4XR5HBZ-CTG5ESkU.js → chunk-Q4XR5HBZ-CPx-9pEy.js} +1 -1
  26. package/web-dist/assets/{chunk-RYQCIY6F-C4Xbw0h0.js → chunk-RYQCIY6F-BVfqVyNV.js} +1 -1
  27. package/web-dist/assets/{chunk-V7JOEXUC-DzX7WzjT.js → chunk-V7JOEXUC-Bq5EG6OC.js} +1 -1
  28. package/web-dist/assets/{chunk-VAUOI2AC-C5BV4_RN.js → chunk-VAUOI2AC-CyfJDqu-.js} +1 -1
  29. package/web-dist/assets/{chunk-VR4S4FIN-WYsy9hUs.js → chunk-VR4S4FIN-DMki15_r.js} +1 -1
  30. package/web-dist/assets/{chunk-WYO6CB5R-D-1-l4MF.js → chunk-WYO6CB5R-C30gZnnl.js} +1 -1
  31. package/web-dist/assets/{chunk-XXDRQBXY-C9lzowcJ.js → chunk-XXDRQBXY-CP4D_ETY.js} +1 -1
  32. package/web-dist/assets/{chunk-ZGVPDNZ5-7KVpod10.js → chunk-ZGVPDNZ5-k3kNBN88.js} +1 -1
  33. package/web-dist/assets/classDiagram-OUVF2IWQ-he8mN_1d.js +1 -0
  34. package/web-dist/assets/classDiagram-v2-EOCWNBFH-he8mN_1d.js +1 -0
  35. package/web-dist/assets/{cose-bilkent-JH36ORCC-Cjxk1BZr.js → cose-bilkent-JH36ORCC-wO3EsovI.js} +1 -1
  36. package/web-dist/assets/{cynefin-VYW2F7L2-wOe2bHzn.js → cynefin-VYW2F7L2-C3EU9o4N.js} +1 -1
  37. package/web-dist/assets/{cynefinDiagram-TSTJHNR4-aC9cGB5C.js → cynefinDiagram-TSTJHNR4-CGG-zKEM.js} +1 -1
  38. package/web-dist/assets/{dagre-VKFMJZFB-C8WIcb6F.js → dagre-VKFMJZFB-DyC8Hqa9.js} +1 -1
  39. package/web-dist/assets/{diagram-FQU43EPY-C3aPYv7S.js → diagram-FQU43EPY-B0kKGxoR.js} +1 -1
  40. package/web-dist/assets/{diagram-G47NLZAW-B4wmfzMx.js → diagram-G47NLZAW-B0HF-C4G.js} +1 -1
  41. package/web-dist/assets/{diagram-NH7WQ7WH-DVeUa_5D.js → diagram-NH7WQ7WH-ZnEvLrYH.js} +1 -1
  42. package/web-dist/assets/{diagram-OA4YK3LP-BaQwQu_F.js → diagram-OA4YK3LP-ynOqxQd4.js} +1 -1
  43. package/web-dist/assets/{diagram-WEI45ONY-DqprB85c.js → diagram-WEI45ONY-DeweEbe9.js} +1 -1
  44. package/web-dist/assets/{dist-rtzL4gLm.js → dist-DjR2jyYf.js} +1 -1
  45. package/web-dist/assets/{ebnfDiagram-CCIWWBDH-Mm1irNb1.js → ebnfDiagram-CCIWWBDH-PvzgPvcs.js} +1 -1
  46. package/web-dist/assets/{erDiagram-Q63AITRT-MKBulWN5.js → erDiagram-Q63AITRT-DXj9ksQt.js} +1 -1
  47. package/web-dist/assets/eventmodeling-45OFAUF4-sgc1I6jd.js +1 -0
  48. package/web-dist/assets/flowDiagram-23GEKE2U-CgBJXm5_.js +1 -0
  49. package/web-dist/assets/{ganttDiagram-NO4QXBWP-D2y3Bf3l.js → ganttDiagram-NO4QXBWP-jO6JaqFN.js} +1 -1
  50. package/web-dist/assets/{gitGraph-TEB2WS4Q-O-LVx0X5.js → gitGraph-TEB2WS4Q-CwIqpSfV.js} +1 -1
  51. package/web-dist/assets/{gitGraphDiagram-IHSO6WYX-DcQEaYcT.js → gitGraphDiagram-IHSO6WYX-CX-kdWUp.js} +1 -1
  52. package/web-dist/assets/{index-DpPWC0ta.js → index-BSuA-nmx.js} +90 -90
  53. package/web-dist/assets/index-WdL7ce5m.css +2 -0
  54. package/web-dist/assets/{info-DKCQHKI2-CY6fWeew.js → info-DKCQHKI2-CvH1I_qF.js} +1 -1
  55. package/web-dist/assets/{infoDiagram-FWYZ7A6U-BVfQV-3W.js → infoDiagram-FWYZ7A6U-C9NZZW2e.js} +1 -1
  56. package/web-dist/assets/{ishikawaDiagram-FXEZZL3T-dwjcM4Ez.js → ishikawaDiagram-FXEZZL3T-uLWFep7Q.js} +1 -1
  57. package/web-dist/assets/{journeyDiagram-5HDEW3XC-CUaZBvLp.js → journeyDiagram-5HDEW3XC-CsXFiBiD.js} +1 -1
  58. package/web-dist/assets/{kanban-definition-HUTT4EX6-DE8wReP0.js → kanban-definition-HUTT4EX6-DK9QRwpc.js} +1 -1
  59. package/web-dist/assets/{line-zArFI85C.js → line-Cwz0rEtC.js} +1 -1
  60. package/web-dist/assets/{linear-BSG56Yjb.js → linear-BENsfGox.js} +1 -1
  61. package/web-dist/assets/{mermaid-parser.core-BxbE62as.js → mermaid-parser.core-DhmoiWF3.js} +3 -3
  62. package/web-dist/assets/{mermaid.core-C9Bw1zsy.js → mermaid.core-BDr_Kn5Z.js} +3 -3
  63. package/web-dist/assets/{mindmap-definition-LN4V7U3C-BhguO5c0.js → mindmap-definition-LN4V7U3C-CjIFm3K2.js} +1 -1
  64. package/web-dist/assets/{packet-7NZHBO7P-C9Him4Jg.js → packet-7NZHBO7P-CzCyao17.js} +1 -1
  65. package/web-dist/assets/{pegDiagram-2B236MQR-D4wv-hVO.js → pegDiagram-2B236MQR-BmDMeRcD.js} +1 -1
  66. package/web-dist/assets/{pie-RZYD4A2V-CXMTL6pQ.js → pie-RZYD4A2V-DMM2IkHs.js} +1 -1
  67. package/web-dist/assets/{pieDiagram-ENE6RG2P-CHBrF8Gr.js → pieDiagram-ENE6RG2P-CbwVr3qW.js} +1 -1
  68. package/web-dist/assets/{quadrantDiagram-ABIIQ3AL-yT8E8mdN.js → quadrantDiagram-ABIIQ3AL-De32pmiP.js} +1 -1
  69. package/web-dist/assets/{radar-I7S5WNFK-DTFJXgLK.js → radar-I7S5WNFK-CbsD9oXO.js} +1 -1
  70. package/web-dist/assets/{railroad-3IZDKUUU-9El5FU8p.js → railroad-3IZDKUUU-DBxDhaRB.js} +1 -1
  71. package/web-dist/assets/railroad-abnf-AHOZXSZD-CHHGvNsw.js +1 -0
  72. package/web-dist/assets/railroad-ebnf-EBAXGLYW-CNbn6hsV.js +1 -0
  73. package/web-dist/assets/railroad-peg-LSFZ7HO6-BsBO5cGs.js +1 -0
  74. package/web-dist/assets/{railroadDiagram-RFXS5EU6-DHRB37mq.js → railroadDiagram-RFXS5EU6-Cc2vK3CJ.js} +1 -1
  75. package/web-dist/assets/{requirementDiagram-TGXJPOKE-Cj41jOCz.js → requirementDiagram-TGXJPOKE-BindEO0A.js} +1 -1
  76. package/web-dist/assets/{sankeyDiagram-HTMAVEWB-Czb26Wy-.js → sankeyDiagram-HTMAVEWB-4Y4Mv2hM.js} +1 -1
  77. package/web-dist/assets/{sequenceDiagram-DBY2YBRQ-C_WGyZ5J.js → sequenceDiagram-DBY2YBRQ-BjN0lvxQ.js} +1 -1
  78. package/web-dist/assets/{src-BH3865Hl.js → src-COVUvSFq.js} +1 -1
  79. package/web-dist/assets/{stateDiagram-2N3HPSRC-DwKIv4VY.js → stateDiagram-2N3HPSRC-CW38CSkC.js} +1 -1
  80. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-gZiZetc1.js +1 -0
  81. package/web-dist/assets/{swimlanes-5IMT3BWC-Bf3tF-DM.js → swimlanes-5IMT3BWC-TQBpYgBC.js} +1 -1
  82. package/web-dist/assets/swimlanesDiagram-G3AALYLV-DWpWeiSt.js +8 -0
  83. package/web-dist/assets/{timeline-definition-FHXFAJF6-X_Wo2yjO.js → timeline-definition-FHXFAJF6-BET2st28.js} +1 -1
  84. package/web-dist/assets/{treeView-QDETBFTQ-Cdlwh2BX.js → treeView-QDETBFTQ-C8KMnMpR.js} +1 -1
  85. package/web-dist/assets/{treemap-6X3UGDF4-ByVScQ5B.js → treemap-6X3UGDF4-T0GBmSXN.js} +1 -1
  86. package/web-dist/assets/{vennDiagram-L72KCM5P-B7dNcpqz.js → vennDiagram-L72KCM5P-U1-fDVAv.js} +1 -1
  87. package/web-dist/assets/{wardley-OPB4EBWU-CEiXyYvs.js → wardley-OPB4EBWU-8e8yAPGj.js} +1 -1
  88. package/web-dist/assets/{wardleyDiagram-EHGQE667-CehzwZ8g.js → wardleyDiagram-EHGQE667-CWHLRs2-.js} +1 -1
  89. package/web-dist/assets/{xychartDiagram-FW5EYKEG-BmuVKE3h.js → xychartDiagram-FW5EYKEG-BNqGD1uM.js} +1 -1
  90. package/web-dist/index.html +2 -2
  91. package/web-dist/assets/architecture-TIHT7OUA-BbpJdZVL.js +0 -1
  92. package/web-dist/assets/channel-D0yqk-I_.js +0 -1
  93. package/web-dist/assets/classDiagram-OUVF2IWQ-BrNNI0PJ.js +0 -1
  94. package/web-dist/assets/classDiagram-v2-EOCWNBFH-BrNNI0PJ.js +0 -1
  95. package/web-dist/assets/eventmodeling-45OFAUF4-JhoriiTk.js +0 -1
  96. package/web-dist/assets/flowDiagram-23GEKE2U-BY5NuqLK.js +0 -1
  97. package/web-dist/assets/index-BSpdKQMe.css +0 -2
  98. package/web-dist/assets/railroad-abnf-AHOZXSZD-DfSVqPIB.js +0 -1
  99. package/web-dist/assets/railroad-ebnf-EBAXGLYW-vIxB5rhr.js +0 -1
  100. package/web-dist/assets/railroad-peg-LSFZ7HO6-7hKGS43v.js +0 -1
  101. package/web-dist/assets/stateDiagram-v2-6OUMAXLB-e_B-QQch.js +0 -1
  102. package/web-dist/assets/swimlanesDiagram-G3AALYLV-CrDVZVa-.js +0 -8
@@ -70,6 +70,27 @@ function sweepStaleSockets(options, deps = {}) {
70
70
  });
71
71
  }
72
72
 
73
+ // packages/server/src/backend/socket-ownership.ts
74
+ import { statSync } from "node:fs";
75
+ function socketPathOwnership(socketPath) {
76
+ if (process.platform === "win32") return () => true;
77
+ let bound;
78
+ try {
79
+ const stat = statSync(socketPath);
80
+ bound = { dev: stat.dev, ino: stat.ino };
81
+ } catch {
82
+ return () => true;
83
+ }
84
+ return () => {
85
+ try {
86
+ const now = statSync(socketPath);
87
+ return now.dev === bound.dev && now.ino === bound.ino;
88
+ } catch {
89
+ return false;
90
+ }
91
+ };
92
+ }
93
+
73
94
  // packages/server/src/backend/acp-daemon.ts
74
95
  var MAX_QUEUED_LINES = 2e4;
75
96
  var MAX_QUEUED_BYTES = 64 * 1024 * 1024;
@@ -131,6 +152,7 @@ function main() {
131
152
  let dropped = 0;
132
153
  let idleTimer = null;
133
154
  let published = false;
155
+ let socketPathIsOurs = () => true;
134
156
  const recordOwner = () => {
135
157
  try {
136
158
  const value = JSON.parse(readFileSync(config.recordPath, "utf8"));
@@ -152,7 +174,7 @@ function main() {
152
174
  }
153
175
  }
154
176
  if (published && owner !== null && owner !== process.pid) return;
155
- if (published && process.platform !== "win32") {
177
+ if (published && process.platform !== "win32" && socketPathIsOurs()) {
156
178
  try {
157
179
  unlinkSync2(config.socketPath);
158
180
  } catch {
@@ -196,7 +218,8 @@ function main() {
196
218
  unreachableStrikes = 0;
197
219
  return;
198
220
  }
199
- if (recordOwner() === process.pid) {
221
+ const recorded = recordOwner() === process.pid;
222
+ if (recorded && socketPathIsOurs()) {
200
223
  unreachableStrikes = 0;
201
224
  return;
202
225
  }
@@ -205,7 +228,7 @@ function main() {
205
228
  child.kill("SIGTERM");
206
229
  } catch {
207
230
  }
208
- die(0, "self-collected-record-reassigned");
231
+ die(0, recorded ? "self-collected-socket-lost" : "self-collected-record-reassigned");
209
232
  };
210
233
  const toClient = (line) => {
211
234
  if (client) {
@@ -365,6 +388,7 @@ function main() {
365
388
  server.on("error", () => die(6, "socket-listen-error"));
366
389
  server.listen(config.socketPath, () => {
367
390
  published = true;
391
+ socketPathIsOurs = socketPathOwnership(config.socketPath);
368
392
  writeRecord();
369
393
  armIdleExit();
370
394
  const reachability = setInterval(checkReachable, config.reachabilityCheckMs ?? REACHABILITY_CHECK_MS);
@@ -2,7 +2,7 @@ import { createRequire as __frizzCreateRequire } from "node:module"; const requi
2
2
 
3
3
  // packages/server/src/backend/claude-agent-broker.ts
4
4
  import net from "node:net";
5
- import { readFileSync as readFileSync5, realpathSync as realpathSync2, statSync as statSync3, unlinkSync as unlinkSync3, writeFileSync as writeFileSync3 } from "node:fs";
5
+ import { readFileSync as readFileSync5, realpathSync as realpathSync2, unlinkSync as unlinkSync3, writeFileSync as writeFileSync3 } from "node:fs";
6
6
  import { randomUUID } from "node:crypto";
7
7
  import { fileURLToPath } from "node:url";
8
8
 
@@ -27488,15 +27488,36 @@ function claudeCompactionWindowOf(env) {
27488
27488
  return Number.isInteger(window) && window > 0 ? window : void 0;
27489
27489
  }
27490
27490
 
27491
+ // packages/server/src/backend/socket-ownership.ts
27492
+ import { statSync as statSync2 } from "node:fs";
27493
+ function socketPathOwnership(socketPath) {
27494
+ if (process.platform === "win32") return () => true;
27495
+ let bound;
27496
+ try {
27497
+ const stat = statSync2(socketPath);
27498
+ bound = { dev: stat.dev, ino: stat.ino };
27499
+ } catch {
27500
+ return () => true;
27501
+ }
27502
+ return () => {
27503
+ try {
27504
+ const now = statSync2(socketPath);
27505
+ return now.dev === bound.dev && now.ino === bound.ino;
27506
+ } catch {
27507
+ return false;
27508
+ }
27509
+ };
27510
+ }
27511
+
27491
27512
  // packages/server/src/backend/claude-broker-diagnostics.ts
27492
- import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync4, readFileSync as readFileSync4, renameSync as renameSync2, statSync as statSync2 } from "node:fs";
27513
+ import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync4, readFileSync as readFileSync4, renameSync as renameSync2, statSync as statSync3 } from "node:fs";
27493
27514
  import { join as join6 } from "node:path";
27494
27515
  var MAX_BYTES = 4 * 1024 * 1024;
27495
27516
  function appendRecord(path, record) {
27496
27517
  try {
27497
27518
  mkdirSync4(join6(path, ".."), { recursive: true });
27498
27519
  try {
27499
- if (statSync2(path).size > MAX_BYTES) renameSync2(path, `${path}.1`);
27520
+ if (statSync3(path).size > MAX_BYTES) renameSync2(path, `${path}.1`);
27500
27521
  } catch {
27501
27522
  }
27502
27523
  appendFileSync2(path, `${JSON.stringify(record)}
@@ -27640,7 +27661,7 @@ function runClaudeBroker(config) {
27640
27661
  (error) => shutdown(0, "event-pump-failed", error instanceof Error ? error.message : String(error))
27641
27662
  );
27642
27663
  const armIdle = () => {
27643
- if (client) return;
27664
+ if (client || closed) return;
27644
27665
  clearTimeout(idleTimer);
27645
27666
  idleTimer = setTimeout(() => shutdown(0, "idle-timeout"), IDLE_EXIT_MS);
27646
27667
  };
@@ -27737,16 +27758,7 @@ function runClaudeBroker(config) {
27737
27758
  sock.on("error", () => {
27738
27759
  });
27739
27760
  });
27740
- let socketIdentity = null;
27741
- const socketPathIsOurs = () => {
27742
- if (!socketIdentity) return true;
27743
- try {
27744
- const now = statSync3(config.socketPath);
27745
- return now.dev === socketIdentity.dev && now.ino === socketIdentity.ino;
27746
- } catch {
27747
- return false;
27748
- }
27749
- };
27761
+ let socketPathIsOurs = () => true;
27750
27762
  const recordOwner = () => {
27751
27763
  if (!config.recordPath) return null;
27752
27764
  try {
@@ -27825,13 +27837,7 @@ function runClaudeBroker(config) {
27825
27837
  }
27826
27838
  server.listen(config.socketPath, () => {
27827
27839
  published = true;
27828
- if (process.platform !== "win32") {
27829
- try {
27830
- const bound = statSync3(config.socketPath);
27831
- socketIdentity = { dev: bound.dev, ino: bound.ino };
27832
- } catch {
27833
- }
27834
- }
27840
+ socketPathIsOurs = socketPathOwnership(config.socketPath);
27835
27841
  if (config.recordPath) {
27836
27842
  const record = { daemonPid: process.pid, socketPath: config.socketPath, sessionId: config.sessionId, generation, createdAt: (/* @__PURE__ */ new Date()).toISOString(), capabilities: BROKER_CAPABILITIES, compactionWindow: claudeCompactionWindowOf(config.workerEnv) };
27837
27843
  try {
@@ -70,6 +70,27 @@ function sweepStaleSockets(options, deps = {}) {
70
70
  });
71
71
  }
72
72
 
73
+ // packages/server/src/backend/socket-ownership.ts
74
+ import { statSync } from "node:fs";
75
+ function socketPathOwnership(socketPath) {
76
+ if (process.platform === "win32") return () => true;
77
+ let bound;
78
+ try {
79
+ const stat = statSync(socketPath);
80
+ bound = { dev: stat.dev, ino: stat.ino };
81
+ } catch {
82
+ return () => true;
83
+ }
84
+ return () => {
85
+ try {
86
+ const now = statSync(socketPath);
87
+ return now.dev === bound.dev && now.ino === bound.ino;
88
+ } catch {
89
+ return false;
90
+ }
91
+ };
92
+ }
93
+
73
94
  // packages/server/src/runtime-lease.ts
74
95
  import { existsSync, mkdirSync, readdirSync as readdirSync2, readFileSync, unlinkSync as unlinkSync2, writeFileSync } from "node:fs";
75
96
  import { dirname, join as join2 } from "node:path";
@@ -174,6 +195,7 @@ function main() {
174
195
  let dropped = 0;
175
196
  let idleTimer = null;
176
197
  let published = false;
198
+ let socketPathIsOurs = () => true;
177
199
  const recordOwner = () => {
178
200
  try {
179
201
  const value = JSON.parse(readFileSync2(config.recordPath, "utf8"));
@@ -195,7 +217,7 @@ function main() {
195
217
  }
196
218
  }
197
219
  if (published && owner !== null && owner !== process.pid) return;
198
- if (published && process.platform !== "win32") {
220
+ if (published && process.platform !== "win32" && socketPathIsOurs()) {
199
221
  try {
200
222
  unlinkSync3(config.socketPath);
201
223
  } catch {
@@ -239,7 +261,8 @@ function main() {
239
261
  unreachableStrikes = 0;
240
262
  return;
241
263
  }
242
- if (recordOwner() === process.pid) {
264
+ const recorded = recordOwner() === process.pid;
265
+ if (recorded && socketPathIsOurs()) {
243
266
  unreachableStrikes = 0;
244
267
  return;
245
268
  }
@@ -248,7 +271,7 @@ function main() {
248
271
  child.kill("SIGTERM");
249
272
  } catch {
250
273
  }
251
- die(0, "self-collected-record-reassigned");
274
+ die(0, recorded ? "self-collected-socket-lost" : "self-collected-record-reassigned");
252
275
  };
253
276
  const toClient = (line) => {
254
277
  if (client) {
@@ -380,6 +403,7 @@ function main() {
380
403
  server.on("error", () => die(6, "socket-listen-error"));
381
404
  server.listen(config.socketPath, () => {
382
405
  published = true;
406
+ socketPathIsOurs = socketPathOwnership(config.socketPath);
383
407
  writeRecord();
384
408
  armIdleExit();
385
409
  const reachability = setInterval(checkReachable, config.reachabilityCheckMs ?? REACHABILITY_CHECK_MS);