nolo-cli 0.54.0 → 0.61.0-alpha.2

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 (154) hide show
  1. package/README.md +3 -3
  2. package/{_executeModel-OPTKYHJA.js → _executeModel-CKT6RGTL.js} +48 -45
  3. package/{action-ORXWW2ZG.js → action-76JX3JX3.js} +7 -6
  4. package/{addContentAction-53BZ34AE.js → addContentAction-V3NAZRTJ.js} +6 -5
  5. package/{addDialogAgentAction-JRYUS54Y.js → addDialogAgentAction-RZOAF46K.js} +5 -4
  6. package/{agentDeleteCommand-FJIWU2BS.js → agentDeleteCommand-VN7NPXQ4.js} +30 -27
  7. package/{agentEmailCommands-CE32L43B.js → agentEmailCommands-F2TNAV4A.js} +59 -56
  8. package/{agentGrantCommands-2LEZDADN.js → agentGrantCommands-R3VQEZJR.js} +1 -1
  9. package/{agentListCommands-VJNKULIK.js → agentListCommands-OSM2ANI3.js} +61 -31
  10. package/{agentMachineCommands-HCJ3WQXL.js → agentMachineCommands-MTPWYVRV.js} +31 -28
  11. package/{agentPullCommand-M552CYSI.js → agentPullCommand-N7L2CT7L.js} +2 -2
  12. package/{agentRecordCommands-QFWERED4.js → agentRecordCommands-VWAWTVVC.js} +57 -54
  13. package/{agentRunCommand-G3GQMUNN.js → agentRunCommand-PLZOBNVK.js} +61 -58
  14. package/{agentRunControl-INKFDXDA.js → agentRunControl-WECMOO6O.js} +11 -6
  15. package/{agentRuntimeLocal-K327ELSL.js → agentRuntimeLocal-XCJLRWQE.js} +26 -23
  16. package/{agentSlice-ODKF4J6M.js → agentSlice-F6DOP4IW.js} +8 -7
  17. package/{appDeleteCommands-XUXMFDI4.js → appDeleteCommands-3BCFTRFJ.js} +30 -27
  18. package/{appDeployCommands-37F4GPCU.js → appDeployCommands-B4GMHCYA.js} +30 -27
  19. package/{appDeployStatusCommands-WSPU7TUK.js → appDeployStatusCommands-4MN36WIG.js} +30 -27
  20. package/{appGetCommands-YLOBA3EM.js → appGetCommands-4GJIEUAX.js} +30 -27
  21. package/{appListCommands-UD62R5ME.js → appListCommands-CHU53GSX.js} +30 -27
  22. package/{authCommand-OK6HLHGS.js → authCommand-WOTWLJNF.js} +35 -29
  23. package/{authCommands-2DUIUEMT.js → authCommands-ILTBI6JV.js} +7 -5
  24. package/{chatQueueReduxAdapter-TV2TUOQS.js → chatQueueReduxAdapter-HNSQXNIR.js} +20 -18
  25. package/{chunk-HPW5MNDQ.js → chunk-22BTGNSP.js} +113 -57
  26. package/{chunk-TR4DXUYX.js → chunk-2HPRMEEZ.js} +1180 -736
  27. package/{chunk-UNZDCI3O.js → chunk-2KDR4CWE.js} +35 -4
  28. package/{chunk-3ZTR7ZO4.js → chunk-2PGGC63K.js} +1 -1
  29. package/{chunk-JXIP6ZWH.js → chunk-37QVS7BU.js} +18 -5
  30. package/{chunk-EA5OYZVD.js → chunk-37XDGCY7.js} +1 -1
  31. package/chunk-3BLB7QKO.js +433 -0
  32. package/{chunk-CS6TCJ7E.js → chunk-3JQ2NRYU.js} +30 -7
  33. package/{chunk-RHMDMTDK.js → chunk-3JWKQDA4.js} +2 -2
  34. package/{chunk-3LKZRP7E.js → chunk-3QGUVVX5.js} +2 -2
  35. package/{chunk-SSXTSPSG.js → chunk-45YO6H7P.js} +71 -30
  36. package/{chunk-EJE33XNR.js → chunk-4C4ST2YE.js} +1521 -565
  37. package/{chunk-YLCUU3WM.js → chunk-4NJEIGBQ.js} +5 -5
  38. package/{chunk-K4NISKOR.js → chunk-5ZYA4JJ3.js} +47 -17
  39. package/{chunk-3Y2K5O2R.js → chunk-7A3RRUCQ.js} +125 -40
  40. package/{chunk-5FCIPEKT.js → chunk-7O7KH4X5.js} +1051 -926
  41. package/{chunk-6HDYSFLO.js → chunk-7UF7CQ6B.js} +3 -3
  42. package/{chunk-SUEIAK5N.js → chunk-AQMVUA7N.js} +1 -0
  43. package/{chunk-WQHGJHAL.js → chunk-AVE2YR4F.js} +732 -726
  44. package/{chunk-6COJEAYH.js → chunk-B7DXRX7F.js} +44 -37
  45. package/chunk-BFU6C242.js +66 -0
  46. package/{chunk-IA3A5373.js → chunk-C3FZR5EC.js} +1 -1
  47. package/{chunk-IWUMSAQF.js → chunk-CJCJF5XB.js} +26 -3
  48. package/{chunk-UGBHDMHI.js → chunk-CP7VIDZ7.js} +1 -1
  49. package/{chunk-JON2PHYT.js → chunk-CTCW7U7N.js} +1 -1
  50. package/{chunk-YBFJQC2M.js → chunk-D5XKNNUV.js} +65 -42
  51. package/{chunk-7NYDJAQ7.js → chunk-DNNSCSA2.js} +5 -5
  52. package/{chunk-NI2BS6UD.js → chunk-DWUCB2A3.js} +1 -1
  53. package/{chunk-AA564GBL.js → chunk-DZZL7UBV.js} +1 -1
  54. package/{chunk-75MSWWUE.js → chunk-E6RGHPDR.js} +5 -3
  55. package/chunk-EDKF7RX4.js +30 -0
  56. package/{chunk-FJHMLRDQ.js → chunk-ES6CVKVD.js} +21 -27
  57. package/{chunk-SYYUU7EV.js → chunk-FHAGENAS.js} +2 -3
  58. package/{chunk-NJUQBYFJ.js → chunk-FKFMIBTT.js} +3 -1
  59. package/{chunk-INZZJSQF.js → chunk-FZGV4FGK.js} +24 -12
  60. package/{chunk-YQBXOHE6.js → chunk-GAL47RNP.js} +1 -1
  61. package/{chunk-UOWXD4VN.js → chunk-HBPV76EK.js} +335 -243
  62. package/{chunk-MLEZPE3U.js → chunk-HLU5Q2GV.js} +4 -4
  63. package/{chunk-TC6P4NDR.js → chunk-HQP7HJDL.js} +6 -6
  64. package/{chunk-7FAS3NEF.js → chunk-IYCUMIYS.js} +19 -15
  65. package/{chunk-AUVFJGPC.js → chunk-JX5PJCWS.js} +7 -5
  66. package/{chunk-LYGNQHUW.js → chunk-JYYZCK2Z.js} +2 -4
  67. package/{chunk-XOJRZUPF.js → chunk-KWSQR2KK.js} +14 -29
  68. package/{chunk-2WBFJHQA.js → chunk-L7B47JXR.js} +34 -39
  69. package/{chunk-EICIFHVS.js → chunk-LAFC3B2I.js} +1 -1
  70. package/{chunk-N4JKMCY3.js → chunk-LJKICKVC.js} +2 -2
  71. package/chunk-M3JEW6N6.js +193 -0
  72. package/{chunk-LRGKOI5Y.js → chunk-MBOEV4L2.js} +7 -3
  73. package/{chunk-SVDMVX4G.js → chunk-MMZ6ZTVO.js} +112 -73
  74. package/{chunk-JDSUTNYY.js → chunk-MP64VFGD.js} +2 -2
  75. package/{chunk-NFLA6GSU.js → chunk-MXUDQZXQ.js} +44 -5
  76. package/chunk-N4G4PKQ6.js +23 -0
  77. package/{chunk-KXKQO4Q6.js → chunk-NTW5GWDM.js} +58 -1
  78. package/chunk-ONXOABJR.js +215 -0
  79. package/{chunk-TY3ADTX5.js → chunk-OZX2IPKM.js} +7 -2
  80. package/{chunk-Q4XZVZPN.js → chunk-P7OOB7QP.js} +1 -1
  81. package/{chunk-XIJZOCSP.js → chunk-PEZJEQAO.js} +1 -1
  82. package/{chunk-SWJGJMTW.js → chunk-PQDIDWGX.js} +1 -1
  83. package/chunk-PSCNXBYA.js +11 -0
  84. package/{chunk-BY2FF2C4.js → chunk-QEFJJS2I.js} +55 -73
  85. package/{chunk-BG7J6Y5X.js → chunk-QEW2MFDQ.js} +1 -1
  86. package/{chunk-KLIBF3BY.js → chunk-RDBARW6T.js} +8 -3
  87. package/{chunk-ZVOHVJI3.js → chunk-RJ2SAFB5.js} +82 -35
  88. package/{chunk-MYMBBB6Q.js → chunk-RVWRKFUB.js} +5 -3
  89. package/{chunk-43CXXVJD.js → chunk-RXX4GDIH.js} +1 -1
  90. package/chunk-SEJ5OS6F.js +49 -0
  91. package/{chunk-SAJSBPI2.js → chunk-SOJM57FX.js} +5 -2
  92. package/{chunk-EKLRRZIN.js → chunk-SPAQ4PVV.js} +0 -5
  93. package/{chunk-L7NG2M6H.js → chunk-TRV2MIDW.js} +89 -74
  94. package/{chunk-5UAYZEXO.js → chunk-UZPQSVM6.js} +1 -1
  95. package/{chunk-SVC3GGUA.js → chunk-VMWYBIXG.js} +7 -5
  96. package/{chunk-ZHXJ6M7T.js → chunk-W7XHHYWM.js} +4 -0
  97. package/{chunk-UR66XPVF.js → chunk-XAVSS3KE.js} +21 -3
  98. package/{chunk-A65UV3M5.js → chunk-XOKOSO35.js} +10 -19
  99. package/{chunk-VZMUOPYG.js → chunk-XTJTN3RW.js} +46 -3
  100. package/{chunk-T5HJEUQN.js → chunk-YCDWJX45.js} +1 -1
  101. package/{chunk-BBTN4NQD.js → chunk-Z4QSJILV.js} +85 -13
  102. package/{chunk-O5FLGN2L.js → chunk-ZRSJ3JEH.js} +6 -2
  103. package/{cliExecutor-BBUVQU4L.js → cliExecutor-HG3S345O.js} +1 -1
  104. package/{codingSkills-BCQXRZOI.js → codingSkills-VDXQYWX4.js} +2 -2
  105. package/{contentThunks-KNI6VXLT.js → contentThunks-7YG2ZYQC.js} +21 -19
  106. package/{cooldownCommands-GI5NNWGL.js → cooldownCommands-BSCH2W7P.js} +2 -2
  107. package/{createAgentAutomationAction-OK4L33KF.js → createAgentAutomationAction-PJQSCAIO.js} +23 -21
  108. package/{createDialogAction-JDSMY4AY.js → createDialogAction-SFEJX6SP.js} +23 -21
  109. package/{createPageAction-T7RA3HCG.js → createPageAction-B7WRHOQO.js} +24 -22
  110. package/{dbSlice-TVX6SN2T.js → dbSlice-IBVOBVMS.js} +5 -4
  111. package/{deleteFile-JYKRT7C3.js → deleteFile-FWP2PSBG.js} +3 -2
  112. package/{dialogCommands-UQZYWOOV.js → dialogCommands-VL2X22QC.js} +30 -27
  113. package/{dialogSlice-TYW2G7IL.js → dialogSlice-ANMACABO.js} +20 -18
  114. package/{docCreateCommands-OA6HZBWO.js → docCreateCommands-ITLGZ5YI.js} +29 -26
  115. package/{docDeleteCommands-KBB3YQI2.js → docDeleteCommands-LH3YNL4C.js} +30 -27
  116. package/{docReadCommands-ZLMFVC67.js → docReadCommands-YAJ77F36.js} +29 -26
  117. package/{docStore-2URPBVCS.js → docStore-D4HGHPWI.js} +6 -5
  118. package/{docUpdateCommands-HMH5KUON.js → docUpdateCommands-DQBOMH2G.js} +29 -26
  119. package/{getPricing-RFOPUWHY.js → getPricing-NM3NUTAS.js} +4 -4
  120. package/handleSendMessageAction-DF2OABGW.js +675 -0
  121. package/index.js +79 -88
  122. package/{lib-2ZTNRXR4.js → lib-FRRS27KN.js} +63 -28
  123. package/{localRuntimeAuthority-KQDAE64E.js → localRuntimeAuthority-R5UBODT3.js} +6 -4
  124. package/{localRuntimeDb-PF7CFKDL.js → localRuntimeDb-P37ZTX55.js} +1 -1
  125. package/{machineCommands-RK6L7ZWL.js → machineCommands-JXDYQ5LB.js} +296 -79
  126. package/{machineWsRunDispatch-3X64DW2Z.js → machineWsRunDispatch-3QHI7JX5.js} +55 -52
  127. package/{memberThunks-THZYZFSN.js → memberThunks-VZI6G7YZ.js} +10 -8
  128. package/{models-JVKUEER5.js → models-FAMINFZ7.js} +2 -2
  129. package/package.json +3 -2
  130. package/{read-K4JU4MQC.js → read-2BYWW7AA.js} +3 -2
  131. package/{readDocTool-LQGR6FUN.js → readDocTool-LC3A7QTB.js} +1 -1
  132. package/{readlineWorkspace-XUFJV3RS.js → readlineWorkspace-KVZTEAHB.js} +4365 -2795
  133. package/{removeDialogAgentAction-ECHCFB7N.js → removeDialogAgentAction-SFYZXHNK.js} +8 -7
  134. package/{runAgentClientLoop-24GQ2AW6.js → runAgentClientLoop-KGTEL7ZP.js} +49 -45
  135. package/{runtimeDoctorCommands-JKTTN723.js → runtimeDoctorCommands-CROTMULY.js} +7 -5
  136. package/{setDialogExtraReferencesAction-KCVJNGMB.js → setDialogExtraReferencesAction-Q32RGFTA.js} +6 -5
  137. package/{setPrimaryDialogAgentAction-VDOBOMKC.js → setPrimaryDialogAgentAction-BFYJHUJS.js} +8 -7
  138. package/{settingSlice-VR2IJSXC.js → settingSlice-IRUU4VFB.js} +6 -5
  139. package/{skillDiscovery-2QTZINON.js → skillDiscovery-NTRLM6KP.js} +1 -1
  140. package/{spaceCommands-S5YJJXL7.js → spaceCommands-KNAYWMCZ.js} +33 -215
  141. package/{streamAgentChatTurn-QHKP3ABO.js → streamAgentChatTurn-FLYPTXKZ.js} +105 -73
  142. package/{switchDialogAgentAction-5L4UP7VI.js → switchDialogAgentAction-L2KOKCGG.js} +5 -4
  143. package/{tableCommands-R6WFRDYF.js → tableCommands-SUNTHAYX.js} +1 -1
  144. package/{toolApiClient-53U4UDFF.js → toolApiClient-VGYUB4P5.js} +2 -1
  145. package/{tools-SSXSTC3O.js → tools-CVLUXK6P.js} +37 -34
  146. package/{tuiSummaryLlmCaller-URFJHFC5.js → tuiSummaryLlmCaller-F3DPFFZM.js} +15 -13
  147. package/{updateCommands-IYKLF3JX.js → updateCommands-AJYSD73Y.js} +2 -2
  148. package/{updateDialogTitleAction-YFYAEW3T.js → updateDialogTitleAction-HWJIZEIV.js} +23 -21
  149. package/agentSuperviseCommands-5AR3DKNN.js +0 -640
  150. package/chunk-6IGD47IC.js +0 -19
  151. package/chunk-FD36SCCD.js +0 -105
  152. package/chunk-GRFK2XP4.js +0 -230
  153. package/chunk-HJTAGT3W.js +0 -370
  154. package/handleSendMessageAction-GO53TY7U.js +0 -409
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isAgentRunTerminalStatus
3
- } from "./chunk-KXKQO4Q6.js";
3
+ } from "./chunk-NTW5GWDM.js";
4
4
  import {
5
5
  isCompiledBinary,
6
6
  resolveCliEntrypointPath
@@ -335,12 +335,6 @@ async function popQueueMessages(queuePath, depsOrFs = {}) {
335
335
  const entries = await popAllQueueEntries(queuePath, depsOrFs);
336
336
  return entries.map((e) => e.text);
337
337
  }
338
- function resolveRunReportPath(runId, env, homedir = nodeHomedir) {
339
- return join(resolveRunsDir(env, homedir), `${runId}.report.md`);
340
- }
341
- function resolveRunReportJsonPath(runId, env, homedir = nodeHomedir) {
342
- return join(resolveRunsDir(env, homedir), `${runId}.report.json`);
343
- }
344
338
  function defaultGenerateRunId() {
345
339
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
346
340
  const random = Math.random().toString(36).slice(2, 8);
@@ -602,8 +596,6 @@ async function gcRunRecords(deps = {}, options = {}) {
602
596
  const jsonPath = resolveRunRecordPath(record.runId, deps.env, deps.homedir);
603
597
  const logPath = resolveRunLogPath(record.runId, deps.env, deps.homedir);
604
598
  const queuePath = record.queuePath ?? resolveRunQueuePath(record.runId, deps.env, deps.homedir);
605
- const reportPath = resolveRunReportPath(record.runId, deps.env, deps.homedir);
606
- const reportJsonPath = resolveRunReportJsonPath(record.runId, deps.env, deps.homedir);
607
599
  const msgPath = record.msgFile ?? join(resolveRunsDir(deps.env, deps.homedir), `${record.runId}.msg.md`);
608
600
  const logOk = tryUnlinkFile(fs, logPath);
609
601
  const msgOk = tryUnlinkFile(fs, msgPath);
@@ -617,8 +609,9 @@ async function gcRunRecords(deps = {}, options = {}) {
617
609
  queueOk = false;
618
610
  }
619
611
  }
620
- tryUnlinkFile(fs, reportPath);
621
- tryUnlinkFile(fs, reportJsonPath);
612
+ const runsDirForLegacy = resolveRunsDir(deps.env, deps.homedir);
613
+ tryUnlinkFile(fs, join(runsDirForLegacy, `${record.runId}.report.md`));
614
+ tryUnlinkFile(fs, join(runsDirForLegacy, `${record.runId}.report.json`));
622
615
  if (!logOk || !msgOk || !queueOk) {
623
616
  failedIds.push(record.runId);
624
617
  continue;
@@ -897,21 +890,60 @@ function releaseRunRecordAck(runId, token, deps = {}) {
897
890
  writeRunRecord(record, deps);
898
891
  });
899
892
  }
900
- function finalizeRunRecord(runId, update, deps = {}) {
901
- withRunRecordLock(runId, deps, () => {
902
- const record = readRunRecord(runId, deps);
903
- if (!record) return;
893
+ function transitionRunToTerminal(runId, update, deps = {}, options = {}) {
894
+ const settled = withRunRecordLock(runId, deps, () => {
895
+ const record2 = readRunRecord(runId, deps);
896
+ if (!record2) return { kind: "not_found" };
897
+ const orphanCorrection = options.allowOverOrphaned === true && record2.status === "orphaned" && (update.status === "done" || update.status === "failed");
898
+ if (isAgentRunTerminalStatus(record2.status) && !orphanCorrection) {
899
+ return { kind: "kept", record: record2 };
900
+ }
904
901
  const now = deps.now ?? (() => /* @__PURE__ */ new Date());
905
- record.status = update.status;
906
- if (typeof update.exitCode === "number") record.exitCode = update.exitCode;
907
- if (update.dialogId) record.dialogId = update.dialogId;
902
+ record2.status = update.status;
903
+ if (typeof update.exitCode === "number") record2.exitCode = update.exitCode;
904
+ if (update.dialogId) record2.dialogId = update.dialogId;
908
905
  if (typeof update.credits === "number" && Number.isFinite(update.credits)) {
909
- record.credits = update.credits;
906
+ record2.credits = update.credits;
910
907
  }
911
- record.endedAt = now().toISOString();
912
- if (record.note?.startsWith("orphaned:")) record.note = void 0;
913
- writeRunRecord(record, deps);
914
- });
908
+ if (update.dodResults && update.dodResults.length > 0) {
909
+ record2.dodResults = update.dodResults;
910
+ }
911
+ record2.endedAt = now().toISOString();
912
+ if (typeof update.note === "string" && update.note.trim()) {
913
+ record2.note = update.note.trim();
914
+ }
915
+ if (record2.note?.startsWith("orphaned:")) record2.note = void 0;
916
+ writeRunRecord(record2, deps);
917
+ return { kind: "transitioned", record: record2 };
918
+ }, { strict: true });
919
+ if (settled !== void 0) return settled;
920
+ const record = readRunRecord(runId, deps);
921
+ if (!record) return { kind: "not_found" };
922
+ if (isAgentRunTerminalStatus(record.status)) return { kind: "kept", record };
923
+ return { kind: "contended", record };
924
+ }
925
+ var AUTHORITATIVE_SETTLE_MAX_ATTEMPTS = 4;
926
+ var AUTHORITATIVE_SETTLE_RETRY_DELAY_MS = 15;
927
+ async function settleRunTerminalAuthoritatively(runId, update, deps = {}, transition = transitionRunToTerminal) {
928
+ const attempt = () => transition(runId, update, deps, { allowOverOrphaned: true });
929
+ let result = attempt();
930
+ for (let attemptNo = 1; result?.kind === "contended" && attemptNo < AUTHORITATIVE_SETTLE_MAX_ATTEMPTS; attemptNo += 1) {
931
+ await (deps.sleep ?? defaultSleep)(AUTHORITATIVE_SETTLE_RETRY_DELAY_MS);
932
+ result = attempt();
933
+ }
934
+ if (result?.kind === "contended") {
935
+ console.error(
936
+ `[nolo] authoritative settlement for run ${runId} lost the record lock ${AUTHORITATIVE_SETTLE_MAX_ATTEMPTS} times; durable record still ${result.record.status} \u2014 terminal status pending reconcile, child outcome (exitCode/dialogId/credits/DoD) may be lost`
937
+ );
938
+ } else if (result?.kind === "kept" && result.record.status !== update.status) {
939
+ console.warn(
940
+ `[nolo] run ${runId} already terminal (${result.record.status}); keeping the durable outcome over intended ${update.status}`
941
+ );
942
+ }
943
+ return result ?? { kind: "not_found" };
944
+ }
945
+ function finalizeRunRecord(runId, update, deps = {}) {
946
+ transitionRunToTerminal(runId, update, deps);
915
947
  }
916
948
  function isPidGone(pid, deps = {}) {
917
949
  const kill = deps.kill ?? ((p, s) => process.kill(p, s));
@@ -1349,12 +1381,18 @@ async function runSignalCommand(args, signal, verb, deps) {
1349
1381
  `);
1350
1382
  return 1;
1351
1383
  }
1352
- if (typeof record.pid !== "number") {
1353
- deps.output.write(`Run has no pid: ${record.runId}
1384
+ const reconciled = checkStaleRun(record.runId, deps) ?? record;
1385
+ if (isAgentRunTerminalStatus(reconciled.status)) {
1386
+ deps.output.write(`Run ${reconciled.runId} is already ${reconciled.status}.
1387
+ `);
1388
+ return 0;
1389
+ }
1390
+ if (typeof reconciled.pid !== "number") {
1391
+ deps.output.write(`Run has no pid: ${reconciled.runId}
1354
1392
  `);
1355
1393
  return 1;
1356
1394
  }
1357
- const confirmed = await terminateRunProcess(record, signal, deps);
1395
+ const confirmed = await terminateRunProcess(reconciled, signal, deps);
1358
1396
  if (!confirmed) {
1359
1397
  deps.output.write(
1360
1398
  `Failed to ${verb} ${record.runId} (pid ${record.pid}): process still alive after SIGKILL.
@@ -1362,9 +1400,10 @@ async function runSignalCommand(args, signal, verb, deps) {
1362
1400
  );
1363
1401
  return 1;
1364
1402
  }
1365
- finalizeRunRecord(record.runId, { status: "killed" }, deps);
1403
+ const transition = transitionRunToTerminal(reconciled.runId, { status: "killed" }, deps);
1366
1404
  deps.output.write(
1367
- `Stopped ${record.runId} (pid ${record.pid}): process group confirmed gone.
1405
+ transition.kind === "contended" ? `Stopped ${reconciled.runId} (pid ${reconciled.pid}): process group confirmed gone; terminal status pending reconcile.
1406
+ ` : `Stopped ${reconciled.runId} (pid ${reconciled.pid}): process group confirmed gone.
1368
1407
  `
1369
1408
  );
1370
1409
  return 0;
@@ -1404,8 +1443,6 @@ export {
1404
1443
  popAllQueueEntries,
1405
1444
  popSingleQueueMessage,
1406
1445
  popQueueMessages,
1407
- resolveRunReportPath,
1408
- resolveRunReportJsonPath,
1409
1446
  defaultGenerateRunId,
1410
1447
  defaultGenerateBatchId,
1411
1448
  writeRunRecord,
@@ -1432,6 +1469,10 @@ export {
1432
1469
  claimRunRecord,
1433
1470
  commitRunRecordClaim,
1434
1471
  releaseRunRecordAck,
1472
+ transitionRunToTerminal,
1473
+ AUTHORITATIVE_SETTLE_MAX_ATTEMPTS,
1474
+ AUTHORITATIVE_SETTLE_RETRY_DELAY_MS,
1475
+ settleRunTerminalAuthoritatively,
1435
1476
  finalizeRunRecord,
1436
1477
  isPidGone,
1437
1478
  defaultGetProcessStartTime,