@overdeck/desktop 0.46.0 → 0.47.0

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 (387) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +4 -1
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-CCwFGICj.js → acceptance-criteria-10Ur5Dne.js} +2 -2
  4. package/server/{advancing-selfheal-De1L-Sb4.js → advancing-selfheal-BNwqxseD.js} +6 -6
  5. package/server/{agent-gc-CBULruzm.js → agent-gc-C3h9Or3a.js} +5 -5
  6. package/server/{agent-state-VQk8fY9F.js → agent-state-CYXJVG72.js} +1 -1
  7. package/server/agent-state-service-C63p_ftq.js +2 -0
  8. package/server/{agent-state-service-BlnSkRFA.js → agent-state-service-Ds6OeFvo.js} +15 -9
  9. package/server/{agents-C5rWYhb6.js → agents-J5mEnekq.js} +23 -16
  10. package/server/{agents-BKKkxKgK.js → agents-ePFVoZbu.js} +1 -1
  11. package/server/archive-planning-B2XplFzT.js +2 -0
  12. package/server/{archive-planning-C0lAbNB_.js → archive-planning-BwhxeP7C.js} +10 -6
  13. package/server/{artifact-index-jobs-ug6ZxIP5.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
  14. package/server/{assemble-DnffNpOo.js → assemble-Bgwqv-Ro.js} +2 -2
  15. package/server/{tmux-dedup-DbN6MGzM.js → auto-spawn-consent-CQ9Bi9q6.js} +262 -13
  16. package/server/{backlog-auto-trigger-Dh-i9PQf.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
  17. package/server/{behavior-CfIg6pKp.js → behavior-td6-xhQk.js} +2 -2
  18. package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
  19. package/server/{bridge-pool-patrol-CUFmjVDN.js → bridge-pool-patrol-CYH2OLb5.js} +1 -1
  20. package/server/{briefing-freshness-DHmCSLar.js → briefing-freshness-DRqZ8lAz.js} +2 -2
  21. package/server/{build-info-CuFfxZxp.js → build-info-7yiEpl6u.js} +3 -3
  22. package/server/{build-info-BP160gU7.js → build-info-CpG__c63.js} +1 -1
  23. package/server/{checkpoint-manager-Dxh0FYsv.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
  24. package/server/{checkpoint-manager-DEWD82qK.js → checkpoint-manager-DBcyNR8w.js} +2 -2
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-CZvbtLnr.js → checkpoints-D95apurL.js} +2 -2
  27. package/server/{checkpoints-DMTgXuLG.js → checkpoints-Wm963lm8.js} +1 -1
  28. package/server/{claude-hooks-provision-CN-xo-do.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
  29. package/server/{claude-hooks-provision-fvy4RD2b.js → claude-hooks-provision-Bjitl9aI.js} +2 -2
  30. package/server/{claude-permissions-CN0cSCPp.js → claude-permissions-CpbpvUQ2.js} +2 -2
  31. package/server/{claude-settings-overlay-Dabi9slj.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
  32. package/server/{claude-settings-overlay-CJn35FHQ.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
  33. package/server/cli-CjOCSnfj.js +3 -0
  34. package/server/{cli-oCWYA1pE.js → cli-Cte9ZFGn.js} +9 -9
  35. package/server/{cliproxy-C8mB3KuB.js → cliproxy-C5fMJ7rY.js} +2 -2
  36. package/server/{cliproxy-PGwTX_o8.js → cliproxy-DaAbWMjC.js} +1 -1
  37. package/server/{close-issue-D5MF5GqF.js → close-issue-BPh1ARCF.js} +5 -5
  38. package/server/{closed-issue-reaper-CJ24u0Zt.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
  39. package/server/{closed-issue-reaper-Cltx86x5.js → closed-issue-reaper-DoOZqGFK.js} +62 -12
  40. package/server/{codex-Drlf5Xhf.js → codex-BzGDW_d3.js} +6 -6
  41. package/server/{codex-BdEsUFWh.js → codex-o8FJwzmy.js} +1 -1
  42. package/server/{codex-parser-DpB89Vqa.js → codex-parser-Dt-ycU8L.js} +2 -2
  43. package/server/{compaction-continuation-K2AxQX4H.js → compaction-continuation-CvXpbZ4w.js} +3 -3
  44. package/server/{config-B2IMcBxx.js → config-Bi3u1VK7.js} +2 -2
  45. package/server/{config-Dr3pW6w6.js → config-BvLe652W.js} +2 -2
  46. package/server/{config-DV-grfQc.js → config-CL3Gyvja.js} +1 -1
  47. package/server/{config-yaml-CmOPzmBb.js → config-yaml-CxdwhAIA.js} +10 -2
  48. package/server/conflict-gate-CX80JYYS.js +3 -0
  49. package/server/{conflict-gate-B9cN3SBi.js → conflict-gate-E4nt7ZeS.js} +59 -13
  50. package/server/{context-layers-dR5YxHYB.js → context-layers-C_IIysnm.js} +3 -3
  51. package/server/{context-layers-D6LZo3l1.js → context-layers-DAG83UZt.js} +2 -2
  52. package/server/{control-settings-C7DUehE1.js → control-settings-CiqGxXnc.js} +13 -6
  53. package/server/{conversation-compaction-Dj4FAKoZ.js → conversation-compaction-BE3CNtHF.js} +1 -1
  54. package/server/{conversation-compaction-BoqdDXWF.js → conversation-compaction-D6-yLtqt.js} +8 -8
  55. package/server/{conversation-service-5aCnq1zR.js → conversation-service-DBxoYMDl.js} +8 -7
  56. package/server/{conversation-service-BCxl4f8Z.js → conversation-service-D_TS2b1r.js} +1 -1
  57. package/server/{conversations-C34dyIb9.js → conversations-BKDVpB-3.js} +1 -1
  58. package/server/{conversations-BUpYsOZg.js → conversations-D0UEdLtk.js} +4 -4
  59. package/server/{cost-CvxRrucd.js → cost-DS1s0DbG.js} +3 -3
  60. package/server/{cost-Bgcub5kW.js → cost-DpgYmYqR.js} +2 -2
  61. package/server/{cost-sync-Dv3LUaNW.js → cost-sync-tOCCGnEt.js} +3 -3
  62. package/server/{dag-ombYYt4s.js → dag-BtkgLeqY.js} +2 -2
  63. package/server/{dangerous-git-ops-BcJPC5Rr.js → dangerous-git-ops-CFLykHWt.js} +1 -1
  64. package/server/dashboard-db-worker.js +7 -7
  65. package/server/{deacon-DrXqT9LQ.js → deacon-BIblC-WX.js} +3 -3
  66. package/server/{deacon-nudge-log-BNBebzeL.js → deacon-nudge-log-B08gF0mh.js} +3 -3
  67. package/server/{deacon-hi9KLPLT.js → deacon-pLRLbPvR.js} +548 -176
  68. package/server/{deacon-pending-lifecycle-Cpk0k7Hi.js → deacon-pending-lifecycle-B-Io84AP.js} +3 -3
  69. package/server/deacon-swarm-B1XkIvfr.js +2 -0
  70. package/server/{deacon-swarm-DBxUaO-A.js → deacon-swarm-v5PMun-m.js} +15 -14
  71. package/server/deacon.js +8 -8
  72. package/server/{dead-end-trip-CQcP70ND.js → dead-end-trip-D8A3msX9.js} +3 -3
  73. package/server/{delivery-Da0zEMY4.js → delivery-BX9HR4wQ.js} +1 -1
  74. package/server/{deploy-patrol-Df-Tmaq0.js → deploy-patrol-sYgOxLeb.js} +8 -8
  75. package/server/{deploy-queue-UjKGYsDe.js → deploy-queue-VfohaPN_.js} +2 -2
  76. package/server/{deploy-queue-9SrhZR63.js → deploy-queue-gHJBycaF.js} +1 -1
  77. package/server/{deploy-window-jOiPRHL0.js → deploy-window-CFRZ0-kt.js} +1 -1
  78. package/server/{deploy-window-rpqpWqHA.js → deploy-window-D4DQb8VP.js} +6 -6
  79. package/server/{dev-supervisor-CC46Ig8q.js → dev-supervisor-DiOBDM1c.js} +2 -2
  80. package/server/{devcontainer-renderer-68CSCRnu.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
  81. package/server/dist-B3YPQa5A.js +3 -0
  82. package/server/{dist-CJy72uEg.js → dist-C3A8B8wM.js} +1 -1
  83. package/server/{dist-src-Bik83hFi.js → dist-src-C0adpegX.js} +1 -1
  84. package/server/{docker-Dam7mbIB.js → docker-BJzlkqYB.js} +2 -2
  85. package/server/{docker-BMVTSFL5.js → docker-Y3PElJb0.js} +1 -1
  86. package/server/{dod-Dar-yheg.js → dod-DlNtcH6n.js} +26 -5
  87. package/server/{durable-review-pipeline-CGZ5QBxh.js → durable-review-pipeline-Cibps-Rg.js} +5 -2
  88. package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
  89. package/server/{ensure-devcontainer-B057YA81.js → ensure-devcontainer-BAofzBPv.js} +4 -4
  90. package/server/{ensure-devcontainer-C98V8yW-.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
  91. package/server/{esm-shims-Br9BPdkR.js → esm-shims-BeObUkaw.js} +1 -1
  92. package/server/{event-store-ELqkVOn0.js → event-store-5UKzh9Jf.js} +1 -1
  93. package/server/{event-store-zY5MJHgF.js → event-store-CrHcVC5_.js} +3 -3
  94. package/server/{events-D9PR1IC0.js → events-BNrvchBg.js} +3 -3
  95. package/server/{events-D6pyqhzM.js → events-CF8QDbuV.js} +1 -1
  96. package/server/{factory-CRoOpGsF.js → factory-Cmm9Hsho.js} +5 -5
  97. package/server/{feature-registry-population--YUXU999.js → feature-registry-population-B6HpNWRy.js} +4 -4
  98. package/server/{feature-registry-storage-BORBTo0y.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
  99. package/server/{features--nFkJY8v.js → features-D5km80UI.js} +2 -2
  100. package/server/{feedback-target-C0ZzyHvU.js → feedback-target-BJ5ZADsu.js} +1 -1
  101. package/server/{feedback-target-Dt9BsapX.js → feedback-target-DSxEL6lP.js} +7 -7
  102. package/server/{feedback-writer-BG0RUZiu.js → feedback-writer-C27Hak8a.js} +5 -5
  103. package/server/{feedback-writer-D1fm-5Z8.js → feedback-writer-CoB9Z6aU.js} +1 -1
  104. package/server/{flywheel-BiT3odRb.js → flywheel-BHx8XuMr.js} +38 -19
  105. package/server/{flywheel-BekukH4i.js → flywheel-DZZdtiOL.js} +1 -1
  106. package/server/{flywheel-CLVB55Be.js → flywheel-f662Q-y2.js} +14 -14
  107. package/server/{flywheel-merge-order-BJv1DZz1.js → flywheel-merge-order-D_xLMbJU.js} +7 -7
  108. package/server/{flywheel-merge-order-BKw9o6ku.js → flywheel-merge-order-Dil0LmdN.js} +1 -1
  109. package/server/forge-B5o319qI.js +3 -0
  110. package/server/{forge-CZbSg6Ds.js → forge-BaKGCya6.js} +2 -2
  111. package/server/{from-D_4_dk7i.js → from-B3tZbB55.js} +1 -1
  112. package/server/fs-lock-Bre3sGoz.js +130 -0
  113. package/server/{fts-db-BeOomFa-.js → fts-db-IVc4_M3f.js} +2 -2
  114. package/server/{fts-operations-BdewJ_g9.js → fts-operations-B9jG8wa3.js} +2 -2
  115. package/server/{git-utils-ameCgDdy.js → git-utils-CsvYfJU3.js} +4 -4
  116. package/server/{git-utils-CI6cwyyC.js → git-utils-Xg4PFN45.js} +1 -1
  117. package/server/{github-app-DtAsvwzK.js → github-app-Bmg4R9mv.js} +1 -1
  118. package/server/{github-app-CQ1Lo6LA.js → github-app-CmNk0zLU.js} +2 -2
  119. package/server/{github-client-Cj0yl_07.js → github-client-B6KM9_wA.js} +1 -1
  120. package/server/{github-client-BfyDxuRN.js → github-client-qazkPrg0.js} +3 -3
  121. package/server/{github-pr-lookup-BDq6Wznz.js → github-pr-lookup-DAcVeRLK.js} +2 -2
  122. package/server/{harness-binary-DqkftwTb.js → harness-binary-BSpiXaLw.js} +2 -2
  123. package/server/{harness-resolve-CqMqM1Mb.js → harness-resolve-BAJu5MX8.js} +4 -4
  124. package/server/{health-events-_xfTaOUs.js → health-events-2Z6Wa9SM.js} +1 -1
  125. package/server/{health-events-CazRxJUS.js → health-events-BwX32k8d.js} +2 -2
  126. package/server/{hooks-BnJsxlSq.js → hooks-D1g1jKLI.js} +1 -1
  127. package/server/{hooks-BO3QT1sn.js → hooks-DbtbimEf.js} +2 -2
  128. package/server/{hume-CDYJxqx-.js → hume-DXNiu6nQ.js} +2 -2
  129. package/server/hume-VUCNbTgn.js +3 -0
  130. package/server/{idle-stack-reaper-BYqERdkE.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
  131. package/server/{idle-stack-reaper-CnGx_PO_.js → idle-stack-reaper-Cy-dQzW4.js} +2 -2
  132. package/server/{in-flight-guard-Bq3epG58.js → in-flight-guard-D-sSkADM.js} +1 -1
  133. package/server/{infra-BjuxvjdS.js → infra-BDQDRopn.js} +15 -4
  134. package/server/{injection-UCf8EsjX.js → injection-6AGnXxlj.js} +7 -7
  135. package/server/{injection-DZxlV2al.js → injection-Bl8d_jHZ.js} +1 -1
  136. package/server/inspect-agent-CUwVmr2h.js +2 -0
  137. package/server/{inspect-agent-6kylZnrm.js → inspect-agent-nXdIptyh.js} +12 -12
  138. package/server/{internal-token-DvMTQSOS.js → internal-token-DzK385vD.js} +2 -2
  139. package/server/{internal-token-M9omeXM1.js → internal-token-Ias7N8Kg.js} +1 -1
  140. package/server/{io-VHvc0Ssp.js → io-B00PBNku.js} +4 -4
  141. package/server/{issue-closed-B6KJkmHZ.js → issue-closed-BehTG1be.js} +8 -8
  142. package/server/{issue-lifecycle-C4Zj0WmE.js → issue-lifecycle-Birk-ifu.js} +29 -23
  143. package/server/{issue-lifecycle-9gk3fnXN.js → issue-lifecycle-BqSuQvbn.js} +1 -1
  144. package/server/{issue-service-singleton-PMx8F1jr.js → issue-service-singleton-B2wXiIlw.js} +1 -1
  145. package/server/{issue-service-singleton-DmCh7EHj.js → issue-service-singleton-C6ZduvuY.js} +10 -10
  146. package/server/{issues-CgnQ1OGQ.js → issues-DQ5-LatB.js} +2 -2
  147. package/server/{jsonl-parser-DJOH_O-w.js → jsonl-parser-BDpnGFCl.js} +3 -3
  148. package/server/{label-cleanup-Dv7AV_R1.js → label-cleanup-Dwnky8FG.js} +3 -3
  149. package/server/{lifecycle-DDN8ApVY.js → lifecycle-B3s4sM1G.js} +6 -6
  150. package/server/{lifecycle-CTdOWYMi.js → lifecycle-B4Xdb4cY.js} +2 -2
  151. package/server/{lifecycle-io-D_zTLvP1.js → lifecycle-io-CzTHEooc.js} +1 -1
  152. package/server/{lifecycle-io-D-lGdzK3.js → lifecycle-io-DCo6s6ks.js} +5 -5
  153. package/server/{linear-client-BQU36QqE.js → linear-client-9uq7fhiV.js} +3 -3
  154. package/server/{linear-client-CY4O_Tu3.js → linear-client-CnbtHiic.js} +1 -1
  155. package/server/{linear-mcp-auth-BnU4TYfY.js → linear-mcp-auth-BxUOzswy.js} +5 -5
  156. package/server/{linear-mcp-auth-NYBq_oHZ.js → linear-mcp-auth-D46fBCLf.js} +1 -1
  157. package/server/memory-fts-worker.js +1 -1
  158. package/server/{merge-Bpx4jjht.js → merge-DiW9RdSB.js} +3 -3
  159. package/server/{merge-agent-DdMVSV2Y.js → merge-agent-BLUgRsz3.js} +31 -31
  160. package/server/{merge-agent-DrXa1CpW.js → merge-agent-DQTXZk8z.js} +1 -1
  161. package/server/{merge-batch-C5q1c1GX.js → merge-batch-Cp_j9BGk.js} +1 -1
  162. package/server/{merge-completeness-BMm8tMyZ.js → merge-completeness-B46KqhtY.js} +4 -4
  163. package/server/{merge-completeness-D0ljXbk3.js → merge-completeness-BLbB5-6n.js} +1 -1
  164. package/server/merge-ops-1abz6O_P.js +2 -0
  165. package/server/merge-rebase-CJJVAJuz.js +2 -0
  166. package/server/{merge-rebase-xLnMlw5h.js → merge-rebase-DIkBjgwq.js} +2 -2
  167. package/server/{merge-set-DH7ot3yz.js → merge-set-CBgHfwM0.js} +4 -4
  168. package/server/{merge-set-DzsOTBg5.js → merge-set-DeUxFsC3.js} +1 -1
  169. package/server/{merge-idOG--29.js → merge-sr8Nrnmi.js} +1 -1
  170. package/server/merge-sync-CpGmk6Ch.js +3 -0
  171. package/server/{merge-sync-CQ-LgZ1_.js → merge-sync-kr4vqyjM.js} +7 -4
  172. package/server/{merge-train-DTEMyIu4.js → merge-train-Dmrcus12.js} +4 -4
  173. package/server/{merge-train-deps-CNPJzepw.js → merge-train-deps-D_uGX91G.js} +21 -15
  174. package/server/{merge-verification-x3JO8Dtz.js → merge-verification-NvaAd8CZ.js} +6 -6
  175. package/server/{merged-docker-cleanup-worker-Cdi9apm-.js → merged-docker-cleanup-worker-DH_hrGPI.js} +1 -1
  176. package/server/{merged-docker-cleanup-worker-CTpC27Bs.js → merged-docker-cleanup-worker-Y1R06TEl.js} +3 -3
  177. package/server/{multipart-parser-IMSBfePV.js → multipart-parser-R-oC8dQg.js} +2 -2
  178. package/server/{no-resume-mode-C5ULAXwO.js → no-resume-mode-BgD0JUmM.js} +1 -1
  179. package/server/node_modules/.package-lock.json +4 -4
  180. package/server/node_modules/@types/node/README.md +1 -1
  181. package/server/node_modules/@types/node/crypto.d.ts +1 -1
  182. package/server/node_modules/@types/node/package.json +2 -2
  183. package/server/{orphan-proposed-reconciler-Dg6U4ADZ.js → orphan-proposed-reconciler-B6vJHxtX.js} +230 -31
  184. package/server/{orphan-proposed-reconciler-CWmOdM9-.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
  185. package/server/package-lock.json +5 -5
  186. package/server/package.json +1 -1
  187. package/server/{pan-dir-ubraCiUg.js → pan-dir-DMzF5wne.js} +4 -4
  188. package/server/{paths-cXmOwSbh.js → paths-sJBSb7Ul.js} +2 -2
  189. package/server/{pending-lifecycle-claim-DEteYdS9.js → pending-lifecycle-claim-DilzGfgk.js} +2 -2
  190. package/server/persistent-logger-H_VjuOu7.js +57 -0
  191. package/server/{pickup-D8xtG1J2.js → pickup-DWhqzliO.js} +4 -3
  192. package/server/{pipeline-membership-BGSvkT2M.js → pipeline-membership-C88VBnhJ.js} +1 -1
  193. package/server/{pipeline-membership-CrAPLYtf.js → pipeline-membership-D9SBvItj.js} +1 -1
  194. package/server/{pipeline-membership-gather-DTfcgxLl.js → pipeline-membership-gather-4eR-7Tqy.js} +1 -1
  195. package/server/{pipeline-membership-gather-CET40frr.js → pipeline-membership-gather-CeVGnNJ2.js} +114 -9
  196. package/server/{pipeline-notifier-BuQ0e4hF.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
  197. package/server/{pipeline-notifier-ImNXknf0.js → pipeline-notifier-DT6xLFao.js} +1 -1
  198. package/server/{post-merge-lifecycle-worker-DbO10pum.js → post-merge-lifecycle-worker-8HIeS_J6.js} +3 -3
  199. package/server/{project-pipelines-Bim6bThI.js → project-pipelines-9SKt2bEc.js} +2 -2
  200. package/server/{project-repos-C0nuoBGv.js → project-repos-B5pIphKg.js} +2 -2
  201. package/server/{project-repos-CRE6Ykow.js → project-repos-DPjOdfPa.js} +1 -1
  202. package/server/{projects-B03Wr-xc.js → projects-_n3Zui6K.js} +1 -1
  203. package/server/{prompts-BEx08AIu.js → prompts-CgzMBvQF.js} +2 -2
  204. package/server/{providers-D7IluJe0.js → providers-BI1mOBQ4.js} +1 -1
  205. package/server/{providers-evXhiQeg.js → providers-BJQSnAAp.js} +7 -7
  206. package/server/public/assets/{chunk-BO2N2NFS-D1s4-Sqp.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
  207. package/server/public/assets/{diagram-OG6HWLK6-1gdMoSF7.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
  208. package/server/public/assets/{dist-DqDRYW6P.js → dist-5zingMiA.js} +3 -3
  209. package/server/public/assets/{dist-CxAOHbil.js → dist-CVxhbI2E.js} +1 -1
  210. package/server/public/assets/{ganttDiagram-6RSMTGT7-BYex-Ec7.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
  211. package/server/public/assets/{highlighted-body-OFNGDK62-DlVkiG0S.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
  212. package/server/public/assets/{index-K0hAYCgV.js → index-DEpY-D1O.js} +148 -148
  213. package/server/public/assets/index-Ddkcz3WT.css +1 -0
  214. package/server/public/assets/{linear-B4cuEFmO.js → linear-BB0jQT16.js} +1 -1
  215. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
  216. package/server/public/assets/{pieDiagram-4H26LBE5-CBHNBIJQ.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
  217. package/server/public/assets/{prod-CN2nHBvX.js → prod-XBLvikex.js} +4 -4
  218. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Bom87VOQ.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
  219. package/server/public/assets/{sankeyDiagram-5OEKKPKP-UrBeyLxk.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
  220. package/server/public/assets/{xychartDiagram-2RQKCTM6-DhkbrIxR.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
  221. package/server/public/index.html +2 -2
  222. package/server/{pull-requests-DHWiKxo7.js → pull-requests-7BgLDsIo.js} +3 -3
  223. package/server/{pull-requests-Cv7LxzUN.js → pull-requests-Dq0y6IxE.js} +1 -1
  224. package/server/{queries-DHJm7bTd.js → queries-C-MUZaIy.js} +266 -155
  225. package/server/{rally-B71M9f4o.js → rally-CPysR4T_.js} +3 -3
  226. package/server/rally-D_VW4bJv.js +3 -0
  227. package/server/{rally-api-Dkqmok65.js → rally-api-8Ptlp2os.js} +2 -2
  228. package/server/{rally-api-D5uXN08-.js → rally-api-CgosKdKL.js} +1 -1
  229. package/server/{rally-client-CxsA6ExK.js → rally-client-CCX0hADj.js} +1 -1
  230. package/server/{rally-client-Bfqm6XI4.js → rally-client-iYMHWQD7.js} +5 -5
  231. package/server/{reap-terminal-sessions-BQ23nriz.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
  232. package/server/{reap-terminal-sessions-CvmwaqKv.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
  233. package/server/{rebuild-stack-0EEYReVZ.js → rebuild-stack-CMdgaylx.js} +7 -7
  234. package/server/{rebuild-stack-qeRqHZxH.js → rebuild-stack-DqcOVmJO.js} +2 -2
  235. package/server/{reconstruct-cache-BbYFsqLa.js → reconstruct-cache-CMZJ_Vjq.js} +9 -8
  236. package/server/{record-CtroO946.js → record-BTwWhtBb.js} +1 -1
  237. package/server/{record-update-Z0QCxmMp.js → record-update-DaOKS7Wb.js} +5 -128
  238. package/server/{record-update-DH6dLJID.js → record-update-DhI7eySG.js} +1 -1
  239. package/server/{recovery-trip-eJe26h-f.js → recovery-trip-DDH-02ng.js} +2 -2
  240. package/server/{release-engine-lPUp-MTd.js → release-engine-B2X9AfFC.js} +5 -5
  241. package/server/{release-set-BwGeyZKX.js → release-set-G4XKyQ8K.js} +3 -3
  242. package/server/{remote-BCd02Es1.js → remote-BXarMvqf.js} +3 -3
  243. package/server/{remote-CVGUhXMV.js → remote-CUhyqjXk.js} +3 -3
  244. package/server/{remote-agents-C_VxssLU.js → remote-agents-Bba-MgSA.js} +17 -8
  245. package/server/{remote-agents-C1bssi41.js → remote-agents-CLZB3Coc.js} +1 -1
  246. package/server/{remote-completion-DAB0P706.js → remote-completion-CwAp79EC.js} +13 -13
  247. package/server/resume-mOREjlYu.js +3 -0
  248. package/server/{review-agent-CHhI66UP.js → review-agent--pOptAEV.js} +31 -29
  249. package/server/{review-agent-CD4RCI0Y.js → review-agent-BTCNkq2h.js} +1 -1
  250. package/server/{review-artifacts-DSMRIfuJ.js → review-artifacts-BNmw8dWE.js} +5 -5
  251. package/server/{review-context-oFuBbiEE.js → review-context-DFxYOOJW.js} +9 -9
  252. package/server/{review-convoy-liveness-CpzrcJ5F.js → review-convoy-liveness-BgU_1jJf.js} +2 -2
  253. package/server/{review-status-yljtTd-q.js → review-status-CGvlA4o_.js} +326 -110
  254. package/server/review-status-Dma9SFaN.js +3 -0
  255. package/server/{review-status-emit-CUExtHd5.js → review-status-emit-DURrmGYX.js} +3 -3
  256. package/server/{review-status-enrichment-QV_hQkgS.js → review-status-enrichment-8NiNXi5W.js} +3 -3
  257. package/server/{review-status-source-ylw5QZUR.js → review-status-source-BLx_1siH.js} +1 -1
  258. package/server/{review-status-source-CpvJnvnQ.js → review-status-source-DIk1JSow.js} +1 -1
  259. package/server/{review-status-sync-483sujRo.js → review-status-sync-0GxOqeqF.js} +11 -6
  260. package/server/{review-status-sync-NaWvI9Xf.js → review-status-sync-muT-EBp2.js} +1 -1
  261. package/server/{review-verdict-feedback-BPDn4li_.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
  262. package/server/{review-verdict-feedback-CELeUinh.js → review-verdict-feedback-xJNdqBnX.js} +23 -9
  263. package/server/{rollup-DTNvelz9.js → rollup-BQaol5TX.js} +8 -8
  264. package/server/{rollup-DYZfq1c4.js → rollup-BR4t_wck.js} +1 -1
  265. package/server/{scanner-CV35oSn4.js → scanner-C-D2cFdX.js} +7 -7
  266. package/server/{sequence-io-DF_8iuhV.js → sequence-io-Bmf1EZM5.js} +4 -4
  267. package/server/{sequencer-agent-B2WeCtGi.js → sequencer-agent-CigMyKh2.js} +7 -6
  268. package/server/server.js +435 -418
  269. package/server/{service-Br9rpBNA.js → service-CD0DvFvD.js} +88 -59
  270. package/server/{session-fork-D0LY152N.js → session-fork-B6cQ5eya.js} +2 -2
  271. package/server/{session-history-BUyK29eq.js → session-history-3ON_IJjm.js} +7 -55
  272. package/server/settings-CVmWiJ-r.js +2 -0
  273. package/server/{settings-CvVGqNEs.js → settings-PilbFZAM.js} +2 -2
  274. package/server/{settings-Bse1Pdcj.js → settings-VN0qOh4U.js} +3 -3
  275. package/server/{shadow-engineering-BWLa8ODz.js → shadow-engineering-DXvx77oE.js} +3 -3
  276. package/server/{shadow-state-B4fpKxOO.js → shadow-state-BBk_zacw.js} +2 -2
  277. package/server/{shadow-state-FV6PHfEW.js → shadow-state-CZBp7pwq.js} +1 -1
  278. package/server/{shadow-utils-D7asqxOZ.js → shadow-utils-DdZ05AJS.js} +2 -2
  279. package/server/{ship-log-xplJ8t75.js → ship-log-7kJfjUX2.js} +1 -1
  280. package/server/{smart-compaction-CPp2Ykf6.js → smart-compaction-8fA5k5XN.js} +1 -1
  281. package/server/{smart-compaction-D3U_79f-.js → smart-compaction-ByhL9cRS.js} +7 -7
  282. package/server/{spawn-planning-session-DGfZ5B8D.js → spawn-planning-session-pcF-YeFE.js} +38 -50
  283. package/server/spawn-planning-session-vLUJoFjy.js +3 -0
  284. package/server/{specialist-completion-Br48eiDP.js → specialist-completion-B07XjWD2.js} +1 -1
  285. package/server/{specialist-context-cVbGnTa3.js → specialist-context-DJ-zFyL3.js} +5 -5
  286. package/server/{specialist-handoff-logger-DK-GTz4s.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
  287. package/server/{specialist-logs-Cl5-hqT8.js → specialist-logs-Dae-n52_.js} +3 -3
  288. package/server/{specialists-CNfYO3G2.js → specialists-6PWdtWcg.js} +298 -180
  289. package/server/{specialists-Tdezg_6N.js → specialists-Bz-wFT7R.js} +1 -1
  290. package/server/{specialists-Cicieuzu.js → specialists-DUiExaxb.js} +18 -18
  291. package/server/{specialists-JHsdU3pA.js → specialists-KR3pKulN.js} +1 -1
  292. package/server/specs--enInima.js +3 -0
  293. package/server/{src-CRmCHlma.js → src-B948bGVR.js} +57 -13
  294. package/server/{src-Ck028hjO.js → src-rac0Mepv.js} +6 -6
  295. package/server/{src-UWcGe0Ix.js → src-vHy2-oCv.js} +3 -3
  296. package/server/{stack-health-CJLMrLBl.js → stack-health-BikqHSjn.js} +1 -1
  297. package/server/{stack-health-DqSqx0zv.js → stack-health-DqLTiEu4.js} +2 -2
  298. package/server/{stale-task-claims-CYFOUNlT.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
  299. package/server/{staleness-D47CUJok.js → staleness-C-a5rBxF.js} +1 -1
  300. package/server/{staleness-BQ-0gMYK.js → staleness-CGTZyp6V.js} +1 -1
  301. package/server/{state-home-BYV7qZTW.js → state-home-722Dkx92.js} +2 -2
  302. package/server/{state-mapping-BVldLhBf.js → state-mapping-CybR81Uf.js} +1 -1
  303. package/server/{state-migrate-CvvBtS0Y.js → state-migrate-2u8wIpoL.js} +4 -4
  304. package/server/{stuck-remediation-mkLC6G_t.js → stuck-remediation-CC6q3eqQ.js} +24 -23
  305. package/server/{stuck-remediation-Wt0UVvu1.js → stuck-remediation-r1TJu68G.js} +1 -1
  306. package/server/{substrate-bug-weights-service-XfLAKnmK.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
  307. package/server/{summary-fork-CD7GOts0.js → summary-fork-BqgmgPDt.js} +2 -2
  308. package/server/{summary-fork-xiXBnWG9.js → summary-fork-Df2WFijM.js} +8 -8
  309. package/server/supervisor/{injection-budget-B5SbvDx2.js → injection-budget-Cg_KIb3o.js} +1 -1
  310. package/server/supervisor/{paths-K3noE4N_.js → paths-BBOnCYlO.js} +10 -2
  311. package/server/supervisor/pty-supervisor.js +4 -4
  312. package/server/supervisor/{pty-token-B7lp0ElT.js → pty-token-BbjwEUUM.js} +3 -3
  313. package/server/supervisor-B4anCCSm.js +2 -0
  314. package/server/{supervisor-DL788vos.js → supervisor-BxqSpjcN.js} +3 -3
  315. package/server/{swarm-readiness-BV14DF5N.js → swarm-readiness-DfFxa9-n.js} +3 -3
  316. package/server/{system-prerequisites-pdWG6ZQs.js → system-prerequisites-ICLSkhhZ.js} +2 -2
  317. package/server/{teardown-workspace-l2F4_zim.js → teardown-workspace-DRdi_CPa.js} +15 -15
  318. package/server/{test-agent-queue-qakFIIGz.js → test-agent-queue-A_-p-i0I.js} +8 -7
  319. package/server/{test-verdict-Gw-btEfb.js → test-verdict-BHgTAwIG.js} +1 -1
  320. package/server/{test-verdict-BJYDggMm.js → test-verdict-C4i9aqEP.js} +1 -1
  321. package/server/{tldr-daemon-BKOYB616.js → tldr-daemon-CvWXBhX1.js} +1 -1
  322. package/server/{tldr-daemon-CBaWkV9k.js → tldr-daemon-wvsU6bKv.js} +2 -2
  323. package/server/{tmux-B1Wbxz5o.js → tmux-CfDHob9M.js} +174 -4
  324. package/server/{tmux-DQ6jB76i.js → tmux-Ctk6RV5l.js} +1 -1
  325. package/server/{token-Cxbk023d.js → token-DrxwytsZ.js} +2 -2
  326. package/server/{token-util-CLq2MmQt.js → token-util-B48BlCba.js} +1 -1
  327. package/server/token-util-D411CAq9.js +3 -0
  328. package/server/{tracker-config-DZ8Zn2nQ.js → tracker-config-BcPMElRB.js} +2 -2
  329. package/server/{tracker-utils-L0FKtjq2.js → tracker-utils-CJ6BHjcD.js} +2 -2
  330. package/server/{traefik-connect-bNX6jKkb.js → traefik-connect-DZ6nMYMj.js} +1 -1
  331. package/server/{tunnel-CjSnHdTc.js → tunnel-Bp-dRHZz.js} +1 -1
  332. package/server/{tunnel-BAm1XgjG.js → tunnel-DUbUPElU.js} +3 -3
  333. package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
  334. package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
  335. package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
  336. package/server/{types-q67TYYg5.js → types-Di8wdakq.js} +1 -1
  337. package/server/{uat-promote-verification-CKB9ZrKC.js → uat-promote-verification-CoJuh7XO.js} +5 -5
  338. package/server/{uat-train-D5UjcyAa.js → uat-train-4Q0k06CQ.js} +0 -0
  339. package/server/{uat-train-Cu-4nvbf.js → uat-train-Dewoatps.js} +1 -1
  340. package/server/{validate-Cxsx5Uz1.js → validate-B0C8p66t.js} +3 -3
  341. package/server/{validation-VZgJxmqc.js → validation-B_kIRfNe.js} +4 -4
  342. package/server/{validation-DEaTZafj.js → validation-hVOwQk8T.js} +1 -1
  343. package/server/{verification-artifact-C85cRTc_.js → verification-artifact-BxlxTiYK.js} +1 -1
  344. package/server/{verification-artifact-g3yuxQDL.js → verification-artifact-D70AtckY.js} +1 -1
  345. package/server/{verification-runner-DlZI8yhw.js → verification-runner-Bc3cJvpC.js} +1 -1
  346. package/server/{verification-runner-KDZIsBj4.js → verification-runner-KZTz6u72.js} +19 -19
  347. package/server/{vtt-parser-Jr94BF3Y.js → vtt-parser-CE_i3Bcw.js} +1 -1
  348. package/server/{work-agent-prompt-C-vuP3_J.js → work-agent-prompt-ByrPAzOy.js} +9 -9
  349. package/server/{workflows-D0oip4eV.js → workflows-D0vP1WrK.js} +113 -43
  350. package/server/workflows-DtDX08ed.js +2 -0
  351. package/server/{workspace-BqFg__wH.js → workspace-COWvdibH.js} +1 -1
  352. package/server/{workspace-C0fH3aek.js → workspace-DQkRPLlQ.js} +3 -3
  353. package/server/{workspace-anchor-drift-CZKofakh.js → workspace-anchor-drift-DXYIAHzr.js} +4 -4
  354. package/server/{workspace-anchor-drift-B4gMRHl4.js → workspace-anchor-drift-pwz23TI1.js} +1 -1
  355. package/server/{workspace-config-B123aZl-.js → workspace-config-BdZM4PvZ.js} +1 -1
  356. package/server/{workspace-manager-CwO-Hek7.js → workspace-manager-BPgTrG66.js} +13 -13
  357. package/server/{workspace-manager-CDTKjjdU.js → workspace-manager-C1F3XsnS.js} +1 -1
  358. package/server/{workspace-metadata-D4M8BM4W.js → workspace-metadata-CdjzAP8x.js} +1 -1
  359. package/server/{workspace-metadata-CQv00QwK.js → workspace-metadata-DkO_iTLo.js} +2 -2
  360. package/server/{workspaces-j1e_6aAT.js → workspaces-CRBJikLp.js} +136 -113
  361. package/sync-sources/skills/pan-merge/SKILL.md +7 -5
  362. package/sync-sources/skills/pan-release/SKILL.md +57 -0
  363. package/server/agent-state-service-hZpxIw1E.js +0 -2
  364. package/server/archive-planning-0FJ6Xd3b.js +0 -2
  365. package/server/cli-DmXETsw-.js +0 -3
  366. package/server/conflict-gate-Dh754uyA.js +0 -3
  367. package/server/deacon-swarm-I2JfX5Tg.js +0 -2
  368. package/server/dist-DSlxIU1H.js +0 -3
  369. package/server/durable-review-pipeline-jpgCJZFp.js +0 -3
  370. package/server/forge-DK3blQb_.js +0 -3
  371. package/server/hume-Dq--7rOQ.js +0 -3
  372. package/server/inspect-agent-BVwDrVrz.js +0 -2
  373. package/server/label-reconciler--F85rufp.js +0 -113
  374. package/server/merge-ops-DdpTiEMt.js +0 -2
  375. package/server/merge-rebase-DGQpYJU3.js +0 -2
  376. package/server/merge-sync-Ca7F5JnQ.js +0 -3
  377. package/server/public/assets/index-Cc7cnFC4.css +0 -1
  378. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +0 -1
  379. package/server/rally-YDjU513q.js +0 -3
  380. package/server/resume-u9byntrq.js +0 -3
  381. package/server/review-status-BZH8h-6W.js +0 -3
  382. package/server/settings-CdvIF84R.js +0 -2
  383. package/server/spawn-planning-session-1nFi3gfk.js +0 -2
  384. package/server/specs-Bt7WJDoC.js +0 -3
  385. package/server/supervisor-UWiQNK-y.js +0 -2
  386. package/server/token-util-zlz9U0ki.js +0 -3
  387. package/server/workflows-CHrx_hcW.js +0 -2
@@ -1,6 +1,6 @@
1
- import { _r as normalizeIssueIdSync, gr as init_issue_id, hr as extractPrefixSync, mr as extractNumberSync } from "./config-yaml-CmOPzmBb.js";
2
- import { b as init_agents, gr as saveAgentState, tr as getAgentState, ur as markAgentStoppedState } from "./queries-DHJm7bTd.js";
3
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-q67TYYg5.js";
1
+ import { _r as normalizeIssueIdSync, gr as init_issue_id, hr as extractPrefixSync, mr as extractNumberSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { b as init_agents, gr as saveAgentState, tr as getAgentState, ur as markAgentStoppedState } from "./queries-C-MUZaIy.js";
3
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-Di8wdakq.js";
4
4
  import { Effect } from "effect";
5
5
  import { exec } from "child_process";
6
6
  import { promisify } from "util";
@@ -227,7 +227,7 @@ function closeRallyDirect(ctx) {
227
227
  async function closeRallyDirectImpl(ctx) {
228
228
  const step = "close-issue:transition";
229
229
  if (!ctx.rally) return stepFailed(step, "Rally config not provided");
230
- const { RallyTracker } = await import("./rally-YDjU513q.js");
230
+ const { RallyTracker } = await import("./rally-D_VW4bJv.js");
231
231
  const tracker = new RallyTracker({
232
232
  apiKey: ctx.rally.apiKey,
233
233
  server: ctx.rally.server,
@@ -327,4 +327,4 @@ async function applyLabelLinearImpl(ctx, apiKey) {
327
327
  //#endregion
328
328
  export { closeIssue as t };
329
329
 
330
- //# sourceMappingURL=close-issue-D5MF5GqF.js.map
330
+ //# sourceMappingURL=close-issue-BPh1ARCF.js.map
@@ -1,2 +1,2 @@
1
- import { t as handleIssueStatusChangedClosed } from "./closed-issue-reaper-Cltx86x5.js";
1
+ import { t as handleIssueStatusChangedClosed } from "./closed-issue-reaper-DoOZqGFK.js";
2
2
  export { handleIssueStatusChangedClosed };
@@ -1,12 +1,12 @@
1
- import { Gn as init_projects, Ir as AGENTS_DIR, Pt as init_record, Vt as resolveProjectForIssue, Yn as listProjectsSync, ci as init_paths, gr as init_issue_id } from "./config-yaml-CmOPzmBb.js";
1
+ import { Gn as init_projects, Ir as AGENTS_DIR, Pt as init_record, Vt as resolveProjectForIssue, Yn as listProjectsSync, gr as init_issue_id, li as init_paths } from "./config-yaml-CxdwhAIA.js";
2
2
  import { o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
3
- import { D as killSession, M as listSessionNames, w as init_tmux } from "./tmux-B1Wbxz5o.js";
4
- import { f as init_review_status, m as loadReviewStatuses } from "./review-status-yljtTd-q.js";
5
- import { b as init_agents, i as listRunningAgents, pt as stopAgent } from "./queries-DHJm7bTd.js";
6
- import { i as teardownWorkspaceDockerByNamePromise, n as init_docker } from "./docker-Dam7mbIB.js";
7
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-B6KJkmHZ.js";
8
- import "./archive-planning-C0lAbNB_.js";
9
- import "./close-issue-D5MF5GqF.js";
3
+ import { D as killSession, M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
4
+ import { C as setReviewStatusSync, G as readJournalStatus, W as init_review_status_record_sync, h as loadReviewStatuses, p as init_review_status } from "./review-status-CGvlA4o_.js";
5
+ import { b as init_agents, i as listRunningAgents, pt as stopAgent } from "./queries-C-MUZaIy.js";
6
+ import { i as teardownWorkspaceDockerByNamePromise, n as init_docker } from "./docker-BJzlkqYB.js";
7
+ import { i as isTrackerIssueClosed, n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BehTG1be.js";
8
+ import "./archive-planning-BwhxeP7C.js";
9
+ import "./close-issue-BPh1ARCF.js";
10
10
  import { join } from "node:path";
11
11
  import { Data, Effect } from "effect";
12
12
  import "fs";
@@ -20,6 +20,7 @@ import { promisify as promisify$1 } from "util";
20
20
  init_activity_logger();
21
21
  init_projects();
22
22
  init_record();
23
+ init_review_status_record_sync();
23
24
  init_agents();
24
25
  init_issue_closed();
25
26
  init_paths();
@@ -252,6 +253,7 @@ async function reapIssueResidue(projectPath, issueId) {
252
253
  //#endregion
253
254
  //#region ../../lib/cloister/closed-issue-reaper.ts
254
255
  init_paths();
256
+ init_review_status();
255
257
  init_tmux();
256
258
  function issueIdFromStatelessSession(sessionName) {
257
259
  const match = sessionName.match(/^(?:inspect|strike)-([a-z0-9]+-\d+)(?:-|$)/i);
@@ -291,6 +293,52 @@ async function isClosedIssue(issueId, closedChecks) {
291
293
  }
292
294
  return promise;
293
295
  }
296
+ async function isTrackerClosedIssue(issueId, trackerClosedChecks) {
297
+ let promise = trackerClosedChecks.get(issueId);
298
+ if (!promise) {
299
+ promise = isTrackerIssueClosed(issueId);
300
+ trackerClosedChecks.set(issueId, promise);
301
+ }
302
+ return promise;
303
+ }
304
+ function hasUnservicedReviewRequest(status) {
305
+ if (status.reviewStatus !== "pending" || !status.reviewRequestedAt) return false;
306
+ return !status.reviewSpawnedAt || new Date(status.reviewRequestedAt).getTime() > new Date(status.reviewSpawnedAt).getTime();
307
+ }
308
+ async function reapClosedIssueReviewRequests(trackerClosedChecks) {
309
+ const actions = [];
310
+ const pendingStatuses = Object.entries(loadReviewStatuses()).filter(([, status]) => status.reviewStatus === "pending");
311
+ for (let offset = 0; offset < pendingStatuses.length; offset += 4) {
312
+ const batch = pendingStatuses.slice(offset, offset + 4);
313
+ const candidates = (await Promise.all(batch.map(async ([issueId, dbStatus]) => {
314
+ const journal = await readJournalStatus(issueId);
315
+ const existing = {
316
+ ...dbStatus,
317
+ ...journal?.durable ?? {},
318
+ issueId
319
+ };
320
+ for (const field of journal?.clearedFields ?? []) delete existing[field];
321
+ return hasUnservicedReviewRequest(existing) ? [issueId, existing] : null;
322
+ }))).filter((candidate) => candidate !== null);
323
+ const trackerClosedCandidates = (await Promise.all(candidates.map(async ([issueId, existing]) => await isTrackerClosedIssue(issueId, trackerClosedChecks) ? [issueId, existing] : null))).filter((candidate) => candidate !== null);
324
+ for (const [issueId, existing] of trackerClosedCandidates) {
325
+ setReviewStatusSync(issueId, {
326
+ reviewRequestedAt: void 0,
327
+ reviewSpawnedAt: void 0
328
+ }, existing);
329
+ const action = `Cleared unserviced review request for ${issueId} — parent issue is closed`;
330
+ actions.push(action);
331
+ console.log(`[deacon] ${action}`);
332
+ emitActivityEntrySync({
333
+ source: "cloister",
334
+ level: "info",
335
+ issueId,
336
+ message: `[deacon] cleared unserviced review request for ${issueId} — parent issue is closed`
337
+ });
338
+ }
339
+ }
340
+ return actions;
341
+ }
294
342
  async function reapClosedIssueResidue(projectPath, issueId, actions, reapedIssueKeys) {
295
343
  const key = `${projectPath}:${issueId}`;
296
344
  if (reapedIssueKeys.has(key)) return;
@@ -365,6 +413,7 @@ async function handleIssueStatusChangedClosed(issueId) {
365
413
  async function reconcileClosedIssueAgents() {
366
414
  const actions = [];
367
415
  const closedChecks = /* @__PURE__ */ new Map();
416
+ const trackerClosedChecks = /* @__PURE__ */ new Map();
368
417
  const reapedAgentIds = /* @__PURE__ */ new Set();
369
418
  const closedIssueIds = /* @__PURE__ */ new Set();
370
419
  const reapedIssueKeys = /* @__PURE__ */ new Set();
@@ -417,7 +466,7 @@ async function reconcileClosedIssueAgents() {
417
466
  }
418
467
  let mergedIssueIds = devnetIssueIds ? [] : null;
419
468
  if (openDevnetIssueIds.length > 0) try {
420
- const { getReviewStatusesSync } = await import("./review-status-BZH8h-6W.js");
469
+ const { getReviewStatusesSync } = await import("./review-status-Dma9SFaN.js");
421
470
  const statuses = getReviewStatusesSync(openDevnetIssueIds);
422
471
  mergedIssueIds = openDevnetIssueIds.filter((issueId) => statuses[issueId]?.mergeStatus === "merged");
423
472
  } catch (error) {
@@ -425,14 +474,15 @@ async function reconcileClosedIssueAgents() {
425
474
  actions.push(`Failed to resolve merged-issue Docker cleanup status: ${error}`);
426
475
  }
427
476
  if (mergedIssueIds) try {
428
- const { reconcileMergedDockerCleanupQueue } = await import("./merged-docker-cleanup-worker-Cdi9apm-.js");
477
+ const { reconcileMergedDockerCleanupQueue } = await import("./merged-docker-cleanup-worker-DH_hrGPI.js");
429
478
  actions.push(...reconcileMergedDockerCleanupQueue(mergedIssueIds));
430
479
  } catch (error) {
431
480
  actions.push(`Failed to reconcile merged-issue Docker cleanup queue: ${error}`);
432
481
  }
482
+ actions.push(...await reapClosedIssueReviewRequests(trackerClosedChecks));
433
483
  return actions;
434
484
  }
435
485
  //#endregion
436
- export { reconcileClosedIssueAgents as n, handleIssueStatusChangedClosed as t };
486
+ export { reapClosedIssueReviewRequests as n, reconcileClosedIssueAgents as r, handleIssueStatusChangedClosed as t };
437
487
 
438
- //# sourceMappingURL=closed-issue-reaper-Cltx86x5.js.map
488
+ //# sourceMappingURL=closed-issue-reaper-DoOZqGFK.js.map
@@ -1,9 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, h as jsYaml, m as init_js_yaml } from "./config-yaml-CmOPzmBb.js";
3
- import { a as CODEX_BEHAVIOR } from "./src-CRmCHlma.js";
4
- import { r as parseCodexSessionSync, t as init_codex_parser } from "./codex-parser-DpB89Vqa.js";
5
- import { t as init_behavior } from "./behavior-CfIg6pKp.js";
6
- import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-DqkftwTb.js";
2
+ import { Fr as init_errors, h as jsYaml, m as init_js_yaml } from "./config-yaml-CxdwhAIA.js";
3
+ import { a as CODEX_BEHAVIOR } from "./src-B948bGVR.js";
4
+ import { r as parseCodexSessionSync, t as init_codex_parser } from "./codex-parser-Dt-ycU8L.js";
5
+ import { t as init_behavior } from "./behavior-td6-xhQk.js";
6
+ import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-BSpiXaLw.js";
7
7
  import { basename, dirname, join } from "node:path";
8
8
  import "effect";
9
9
  import { homedir } from "node:os";
@@ -715,4 +715,4 @@ var init_codex = __esmMin((() => {
715
715
  //#endregion
716
716
  export { tmuxKillSession as _, extractThreadIdFromRollout as a, initCodexHome as c, seedCodexRulesSymlink as d, toCodexSandboxValue as f, tmuxCreateSession as g, init_tmux_cli as h, createCodexRuntimeSync as i, init_codex as l, writeThreadId as m, CodexSpawnTimeout as n, findLatestRollout as o, waitForCodexRollout as p, codexHome as r, findRolloutPath as s, CodexRuntimeSync as t, seedCodexAuthSymlink as u, tmuxSessionExists as v };
717
717
 
718
- //# sourceMappingURL=codex-Drlf5Xhf.js.map
718
+ //# sourceMappingURL=codex-BzGDW_d3.js.map
@@ -1,3 +1,3 @@
1
- import { a as extractThreadIdFromRollout, c as initCodexHome, l as init_codex, m as writeThreadId, o as findLatestRollout, p as waitForCodexRollout, s as findRolloutPath } from "./codex-Drlf5Xhf.js";
1
+ import { a as extractThreadIdFromRollout, c as initCodexHome, l as init_codex, m as writeThreadId, o as findLatestRollout, p as waitForCodexRollout, s as findRolloutPath } from "./codex-BzGDW_d3.js";
2
2
  init_codex();
3
3
  export { extractThreadIdFromRollout, findLatestRollout, findRolloutPath, initCodexHome, waitForCodexRollout, writeThreadId };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { o as getPricingSync, s as init_cost } from "./cost-Bgcub5kW.js";
2
+ import { o as getPricingSync, s as init_cost } from "./cost-DpgYmYqR.js";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  //#region ../../lib/cost-parsers/codex-parser.ts
5
5
  /**
@@ -244,4 +244,4 @@ var init_codex_parser = __esmMin((() => {
244
244
  //#endregion
245
245
  export { parseCodexSessionCostEventsSync as n, parseCodexSessionSync as r, init_codex_parser as t };
246
246
 
247
- //# sourceMappingURL=codex-parser-DpB89Vqa.js.map
247
+ //# sourceMappingURL=codex-parser-Dt-ycU8L.js.map
@@ -1,5 +1,5 @@
1
- import { ci as init_paths, fi as sessionFilePath } from "./config-yaml-CmOPzmBb.js";
2
- import { Hn as init_supervisor_channels, Ir as getAgentRuntimeStateSync, Lr as init_runtime_state, Vn as hasCompletionMarkerForAgent, ir as init_agent_state, rr as getAgentStateSync } from "./queries-DHJm7bTd.js";
1
+ import { li as init_paths, pi as sessionFilePath } from "./config-yaml-CxdwhAIA.js";
2
+ import { Hn as init_supervisor_channels, Rr as getAgentRuntimeStateSync, Vn as hasCompletionMarkerForAgent, ir as init_agent_state, rr as getAgentStateSync, zr as init_runtime_state } from "./queries-C-MUZaIy.js";
3
3
  import { join } from "node:path";
4
4
  import { homedir } from "node:os";
5
5
  import { existsSync, readdirSync } from "node:fs";
@@ -197,4 +197,4 @@ async function maybeContinueCompactedAgent(args) {
197
197
  //#endregion
198
198
  export { maybeContinueCompactedAgent };
199
199
 
200
- //# sourceMappingURL=compaction-continuation-K2AxQX4H.js.map
200
+ //# sourceMappingURL=compaction-continuation-CvXpbZ4w.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Gr as OVERDECK_HOME, Tr as FsError, ci as init_paths, wr as ConfigError } from "./config-yaml-CmOPzmBb.js";
2
+ import { Fr as init_errors, Gr as OVERDECK_HOME, Tr as FsError, li as init_paths, wr as ConfigError } from "./config-yaml-CxdwhAIA.js";
3
3
  import { t as require_toml } from "./toml-CeLDATih.js";
4
4
  import { Effect } from "effect";
5
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -290,4 +290,4 @@ var init_config = __esmMin((() => {
290
290
  //#endregion
291
291
  export { loadCloisterConfigSync as a, loadCloisterConfig as i, getHealthThresholdsMs as n, saveCloisterConfigSync as o, init_config as r, shouldAutoStart as s, DEFAULT_CLOISTER_CONFIG as t };
292
292
 
293
- //# sourceMappingURL=config-B2IMcBxx.js.map
293
+ //# sourceMappingURL=config-Bi3u1VK7.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Hr as CONFIG_FILE, Tr as FsError, ci as init_paths, f as loadConfigSync$1, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
2
+ import { Fr as init_errors, Hr as CONFIG_FILE, Tr as FsError, f as loadConfigSync$1, li as init_paths, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
3
  import { t as require_toml } from "./toml-CeLDATih.js";
4
4
  import { Effect } from "effect";
5
5
  import { existsSync, promises, readFileSync, writeFileSync } from "fs";
@@ -253,4 +253,4 @@ var init_config = __esmMin((() => {
253
253
  //#endregion
254
254
  export { saveConfigSync as _, getConversationsConfigSync as a, getDefaultConfig as c, getDevrootPathSync as d, init_config as f, saveConfig as g, normalizeRemoteConfig as h, getConversationsConfig as i, getDefaultConfigSync as l, loadConfigSync as m, findDevrootForProject as n, getDashboardApiUrl as o, loadConfig as p, findDevrootForProjectSync as r, getDashboardApiUrlSync as s, checkDevrootDeprecation as t, getDevrootPath as u };
255
255
 
256
- //# sourceMappingURL=config-Dr3pW6w6.js.map
256
+ //# sourceMappingURL=config-BvLe652W.js.map
@@ -1,3 +1,3 @@
1
- import { _ as saveConfigSync, a as getConversationsConfigSync, c as getDefaultConfig, d as getDevrootPathSync, f as init_config, g as saveConfig, h as normalizeRemoteConfig, i as getConversationsConfig, l as getDefaultConfigSync, m as loadConfigSync, n as findDevrootForProject, o as getDashboardApiUrl, p as loadConfig, r as findDevrootForProjectSync, s as getDashboardApiUrlSync, t as checkDevrootDeprecation, u as getDevrootPath } from "./config-Dr3pW6w6.js";
1
+ import { _ as saveConfigSync, a as getConversationsConfigSync, c as getDefaultConfig, d as getDevrootPathSync, f as init_config, g as saveConfig, h as normalizeRemoteConfig, i as getConversationsConfig, l as getDefaultConfigSync, m as loadConfigSync, n as findDevrootForProject, o as getDashboardApiUrl, p as loadConfig, r as findDevrootForProjectSync, s as getDashboardApiUrlSync, t as checkDevrootDeprecation, u as getDevrootPath } from "./config-BvLe652W.js";
2
2
  init_config();
3
3
  export { checkDevrootDeprecation, findDevrootForProject, findDevrootForProjectSync, getConversationsConfig, getConversationsConfigSync, getDashboardApiUrl, getDashboardApiUrlSync, getDefaultConfig, getDefaultConfigSync, getDevrootPath, getDevrootPathSync, loadConfig, loadConfigSync, normalizeRemoteConfig, saveConfig, saveConfigSync };
@@ -124,6 +124,14 @@ function sessionFilePath(cwd, sessionId) {
124
124
  const encodedCwd = encodeClaudeProjectDir(cwd);
125
125
  return join$1(homedir(), ".claude", "projects", encodedCwd, `${sessionId}.jsonl`);
126
126
  }
127
+ /**
128
+ * Single existence check every Claude resume probe must use. Mirrors the
129
+ * JSONL resolver's `jsonl-missing` detection so stale session IDs are never
130
+ * treated as resumable (PAN-3194).
131
+ */
132
+ function claudeSessionTranscriptExists(cwd, sessionId) {
133
+ return existsSync(sessionFilePath(cwd, sessionId));
134
+ }
127
135
  var OVERDECK_HOME, CONFIG_DIR, SKILLS_DIR, AGENTS_DIR, BIN_DIR, COSTS_DIR, ARCHIVES_DIR, LOGS_DIR, TRAEFIK_DIR, CONFIG_FILE, CLAUDE_DIR, TEMPLATES_DIR, currentDir, packageRoot, SYNC_SOURCES_ROOT, SYNC_SOURCES, CACHE_AGENTS_DIR, CACHE_RULES_DIR, DOCS_DIR, PRDS_DIR, PROJECT_DOCS_SUBDIR, PROJECT_PRDS_SUBDIR, PROJECT_PRDS_ACTIVE_SUBDIR, PROJECT_PRDS_PLANNED_SUBDIR, PROJECT_PRDS_COMPLETED_SUBDIR;
128
136
  var init_paths = __esmMin((() => {
129
137
  OVERDECK_HOME = process.env.OVERDECK_HOME || join$1(homedir(), ".overdeck");
@@ -14967,6 +14975,6 @@ var init_config_yaml = __esmMin((() => {
14967
14975
  init_load();
14968
14976
  }));
14969
14977
  //#endregion
14970
- export { derefWorkhorse as $, registerProject as $n, TRAEFIK_DIR as $r, writeRecordResumePointSync as $t, canUseHarnessSync as A, extractTeamPrefix as An, MergeConflictError as Ar, getIssueRecordPath as At, getProviderEnvSync as B, getSpecialistConfig as Bn, CACHE_RULES_DIR as Br, readRecordContinueViewSync as Bt, TIERED_EXECUTION_DIFFICULTIES as C, resolveStateReadHomeSync as Cn, ClaudeCredentialParseError as Cr, buildOwnUri as Ct, resolveTieredExecutionEnabled as D, PROJECTS_CONFIG_FILE as Dn, GitHubApiError as Dr, ensureIssueRecord as Dt, resolveTieredExecutionBlock as E, projectKey as En, GitError as Er, clearRecordFeedbackSync as Et, PROVIDERS as F, findProjectsByRallyProject as Fn, init_errors as Fr, markRecordPipelineClosedOutSync as Ft, setupCredentialFileAuthSync as G, init_projects as Gn, OVERDECK_HOME as Gr, writeCloseOutDodGateSync as Gt, init_providers as H, getSpecialistRetention as Hn, CONFIG_FILE as Hr, writeAgentHarnessModel as Ht, UnknownModelError as I, getIssuePrefix as In, AGENTS_DIR as Ir, queueIssueRecordCommit as It, defaultBackgroundAiFeatures as J, listProjects as Jn, PROJECT_PRDS_COMPLETED_SUBDIR as Jr, writeRecordDecisions as Jt, ensureOpenAICompatibleProxyRunning as K, initializeProjectsConfig as Kn, PROJECT_DOCS_SUBDIR as Kr, writeIssueRecordForWorkspaceSync as Kt, clearCredentialFileAuthSync as L, getProject as Ln, ARCHIVES_DIR as Lr, readIssueRecord as Lt, init_harness_policy as M, findProjectByPathSync as Mn, TmuxError as Mr, getIssueWorkspacePath as Mt, KIMI_CODING_BASE_URL as N, findProjectByTeam as Nn, TrackerError as Nr, getProjectConfigFromWorkspacePath as Nt, resolveTieredExecutionEnabledForIssue as O, ProjectRenameError as On, InvalidAgentIdError as Or, ensureIssueRecordSync as Ot, KIMI_PLATFORM_BASE_URL as P, findProjectByTeamSync as Pn, VcsError as Pr, init_record as Pt, computeModelOrigin as Q, projects_exports as Qn, SYNC_SOURCES as Qr, writeRecordResumePoint as Qt, getBuiltInDefaultHarness as R, getProjectSwarmHotspots as Rn, BIN_DIR as Rr, readIssueRecordForWorkspaceSync as Rt, DEFAULT_TIERED_EXECUTION_CONFIG as S, init_state_read_home as Sn, CheckpointError as Sr, appendSessionEntrySync as St, init_tier_table as T, init_project_key as Tn, FsError as Tr, clearIssueOwner as Tt, piProviderForModel as U, hasProjects as Un, COSTS_DIR as Ur, writeAgentHarnessModelSync as Ut, getProviderForModelSync as V, getSpecialistPromptOverride as Vn, CLAUDE_DIR as Vr, resolveProjectForIssue as Vt, qualifyPiModel as W, hasProjectsSync as Wn, LOGS_DIR as Wr, writeCloseOutDodGate as Wt, DEFAULT_ROLES as X, loadProjectsConfig as Xn, PROJECT_PRDS_SUBDIR as Xr, writeRecordHazards as Xt, init_registry as Y, listProjectsSync as Yn, PROJECT_PRDS_PLANNED_SUBDIR as Yr, writeRecordDecisionsSync as Yt, DEFAULT_WORKHORSES as Z, loadProjectsConfigSync as Zn, SKILLS_DIR as Zr, writeRecordHazardsSync as Zt, getDefaultDocsConfig as _, isStatePlanePath as _n, normalizeIssueIdSync as _r, RECORD_DIRNAME as _t, getConversationsConfigSync as a, getHandoffsDir as ai, writeStatusOverridesSync as an, resolveProjectFromIssueSync as ar, getModelEffortLevelsSync as at, DEFAULT_CONFIG as b, init_state_migration_lock as bn, resolveIssueIdSync as br, appendFeedbackEntrySync as bt, isClaudeCodeChannelsEnabled as c, init_paths as ci, flushAutoCommits as cn, saveProjectsConfigSync as cr, modelSupportsImagesSync as ct, loadConfigNoMigration as d, resolveOhmypiExtensionPath as di, reconcileStatePlaneDrift as dn, setProjectSwarmPolicySync as dr, fmix32 as dt, encodeClaudeProjectDir as ei, writeRecordScopeDriftSync as en, registerProjectSync as er, init_roles as et, loadConfigSync as f, sessionFilePath as fi, STATE_BRANCH_PATHS as fn, unregisterProject as fr, fnv1a32 as ft, mergeConfigs as g, isStatePlaneOnlyStatus as gn, init_issue_id as gr, ROLE_EFFORTS as gt, jsYaml as h, init_state_plane as hn, extractPrefixSync as hr, PARENT_MODEL_REF as ht, getConversationsConfig as i, getDocsTelemetryPath as ii, writeStatusOverrideSync as in, resolveProjectFromIssue as ir, getModelCapabilitySync as it, canUseModelWithAuthSync as j, findProjectByPath as jn, ProcessSpawnError as jr, getIssueRecordPathForWorkspace as jt, validateTieredExecutionConfig as k, createDefaultProjectsConfig as kn, LinearApiError as kr, getIssueRecordBasePath as kt, isClaudeCodeChannelsMcpEnabled as l, isDevMode as li, init_auto_commit as ln, setProjectAutoMergeDefaultSync as lr, resolveModelIdSync as lt, init_js_yaml as m, getMainDivergence as mn, extractNumberSync as mr, COMPLIANCE_MODES as mt, clearConfigCache as n, getDocsDisableStatePath as ni, writeRecordTieredExecutionOverrideSync as nn, renameProjectSync as nr, MODEL_CAPABILITIES as nt, getGlobalConfigPath as o, getLegacyHome as oi, deriveProjectRoot as on, resolveProjectPath as or, hasModelCapabilitySync as ot, updateConversationsConfig as p, STATE_PLANE_PATHS as pn, unregisterProjectSync as pr, init_percent as pt, init_openai_compatible_proxy as q, initializeProjectsConfigSync as qn, PROJECT_PRDS_ACTIVE_SUBDIR as qr, writeIssueRecordSync as qt, getConversationSearchConfigSync as r, getDocsIndexPath as ri, writeStatusOverride as rn, resolveInfraRepo as rr, MODEL_DEPRECATIONS as rt, init_load as s, getOverdeckHome as si, flushAllPendingAutoCommits as sn, saveProjectsConfig as sr, init_model_capabilities as st, init_config_yaml as t, getDocsBudgetStatePath as ti, writeRecordTieredExecutionOverride as tn, renameProject as tr, resolveModel as tt, isTldrEnabledSync as u, packageRoot as ui, queueAutoCommit as un, setProjectMergeTrainSync as ur, CLIPROXY_GPT56_CONTEXT_WINDOW as ut, getDefaultTtsDaemonConfig as v, parsePorcelainStatusPaths as vn, parseIssueIdSync as vr, RECORD_SCHEMA_VERSION as vt, TieredExecutionConfigError as w, shouldCommitLegacyWorkspaceArtifacts as wn, ConfigError as wr, claimIssueOwner as wt, init_defaults as x, STATE_BRANCH as xn, require_dist as xr, appendSessionEntry as xt, mergeTtsDaemonConfigs as y, acquireStateMigrationLock as yn, resolveBareNumericIdSync as yr, appendFeedbackEntry as yt, getKimiAnthropicBaseUrl as z, getProjectSync as zn, CACHE_AGENTS_DIR as zr, readIssueRecordSync as zt };
14978
+ export { derefWorkhorse as $, registerProject as $n, TRAEFIK_DIR as $r, writeRecordResumePointSync as $t, canUseHarnessSync as A, extractTeamPrefix as An, MergeConflictError as Ar, getIssueRecordPath as At, getProviderEnvSync as B, getSpecialistConfig as Bn, CACHE_RULES_DIR as Br, readRecordContinueViewSync as Bt, TIERED_EXECUTION_DIFFICULTIES as C, resolveStateReadHomeSync as Cn, ClaudeCredentialParseError as Cr, buildOwnUri as Ct, resolveTieredExecutionEnabled as D, PROJECTS_CONFIG_FILE as Dn, GitHubApiError as Dr, ensureIssueRecord as Dt, resolveTieredExecutionBlock as E, projectKey as En, GitError as Er, clearRecordFeedbackSync as Et, PROVIDERS as F, findProjectsByRallyProject as Fn, init_errors as Fr, markRecordPipelineClosedOutSync as Ft, setupCredentialFileAuthSync as G, init_projects as Gn, OVERDECK_HOME as Gr, writeCloseOutDodGateSync as Gt, init_providers as H, getSpecialistRetention as Hn, CONFIG_FILE as Hr, writeAgentHarnessModel as Ht, UnknownModelError as I, getIssuePrefix as In, AGENTS_DIR as Ir, queueIssueRecordCommit as It, defaultBackgroundAiFeatures as J, listProjects as Jn, PROJECT_PRDS_COMPLETED_SUBDIR as Jr, writeRecordDecisions as Jt, ensureOpenAICompatibleProxyRunning as K, initializeProjectsConfig as Kn, PROJECT_DOCS_SUBDIR as Kr, writeIssueRecordForWorkspaceSync as Kt, clearCredentialFileAuthSync as L, getProject as Ln, ARCHIVES_DIR as Lr, readIssueRecord as Lt, init_harness_policy as M, findProjectByPathSync as Mn, TmuxError as Mr, getIssueWorkspacePath as Mt, KIMI_CODING_BASE_URL as N, findProjectByTeam as Nn, TrackerError as Nr, getProjectConfigFromWorkspacePath as Nt, resolveTieredExecutionEnabledForIssue as O, ProjectRenameError as On, InvalidAgentIdError as Or, ensureIssueRecordSync as Ot, KIMI_PLATFORM_BASE_URL as P, findProjectByTeamSync as Pn, VcsError as Pr, init_record as Pt, computeModelOrigin as Q, projects_exports as Qn, SYNC_SOURCES as Qr, writeRecordResumePoint as Qt, getBuiltInDefaultHarness as R, getProjectSwarmHotspots as Rn, BIN_DIR as Rr, readIssueRecordForWorkspaceSync as Rt, DEFAULT_TIERED_EXECUTION_CONFIG as S, init_state_read_home as Sn, CheckpointError as Sr, appendSessionEntrySync as St, init_tier_table as T, init_project_key as Tn, FsError as Tr, clearIssueOwner as Tt, piProviderForModel as U, hasProjects as Un, COSTS_DIR as Ur, writeAgentHarnessModelSync as Ut, getProviderForModelSync as V, getSpecialistPromptOverride as Vn, CLAUDE_DIR as Vr, resolveProjectForIssue as Vt, qualifyPiModel as W, hasProjectsSync as Wn, LOGS_DIR as Wr, writeCloseOutDodGate as Wt, DEFAULT_ROLES as X, loadProjectsConfig as Xn, PROJECT_PRDS_SUBDIR as Xr, writeRecordHazards as Xt, init_registry as Y, listProjectsSync as Yn, PROJECT_PRDS_PLANNED_SUBDIR as Yr, writeRecordDecisionsSync as Yt, DEFAULT_WORKHORSES as Z, loadProjectsConfigSync as Zn, SKILLS_DIR as Zr, writeRecordHazardsSync as Zt, getDefaultDocsConfig as _, isStatePlanePath as _n, normalizeIssueIdSync as _r, RECORD_DIRNAME as _t, getConversationsConfigSync as a, getDocsTelemetryPath as ai, writeStatusOverridesSync as an, resolveProjectFromIssueSync as ar, getModelEffortLevelsSync as at, DEFAULT_CONFIG as b, init_state_migration_lock as bn, resolveIssueIdSync as br, appendFeedbackEntrySync as bt, isClaudeCodeChannelsEnabled as c, getOverdeckHome as ci, flushAutoCommits as cn, saveProjectsConfigSync as cr, modelSupportsImagesSync as ct, loadConfigNoMigration as d, packageRoot as di, reconcileStatePlaneDrift as dn, setProjectSwarmPolicySync as dr, fmix32 as dt, claudeSessionTranscriptExists as ei, writeRecordScopeDriftSync as en, registerProjectSync as er, init_roles as et, loadConfigSync as f, resolveOhmypiExtensionPath as fi, STATE_BRANCH_PATHS as fn, unregisterProject as fr, fnv1a32 as ft, mergeConfigs as g, isStatePlaneOnlyStatus as gn, init_issue_id as gr, ROLE_EFFORTS as gt, jsYaml as h, init_state_plane as hn, extractPrefixSync as hr, PARENT_MODEL_REF as ht, getConversationsConfig as i, getDocsIndexPath as ii, writeStatusOverrideSync as in, resolveProjectFromIssue as ir, getModelCapabilitySync as it, canUseModelWithAuthSync as j, findProjectByPath as jn, ProcessSpawnError as jr, getIssueRecordPathForWorkspace as jt, validateTieredExecutionConfig as k, createDefaultProjectsConfig as kn, LinearApiError as kr, getIssueRecordBasePath as kt, isClaudeCodeChannelsMcpEnabled as l, init_paths as li, init_auto_commit as ln, setProjectAutoMergeDefaultSync as lr, resolveModelIdSync as lt, init_js_yaml as m, getMainDivergence as mn, extractNumberSync as mr, COMPLIANCE_MODES as mt, clearConfigCache as n, getDocsBudgetStatePath as ni, writeRecordTieredExecutionOverrideSync as nn, renameProjectSync as nr, MODEL_CAPABILITIES as nt, getGlobalConfigPath as o, getHandoffsDir as oi, deriveProjectRoot as on, resolveProjectPath as or, hasModelCapabilitySync as ot, updateConversationsConfig as p, sessionFilePath as pi, STATE_PLANE_PATHS as pn, unregisterProjectSync as pr, init_percent as pt, init_openai_compatible_proxy as q, initializeProjectsConfigSync as qn, PROJECT_PRDS_ACTIVE_SUBDIR as qr, writeIssueRecordSync as qt, getConversationSearchConfigSync as r, getDocsDisableStatePath as ri, writeStatusOverride as rn, resolveInfraRepo as rr, MODEL_DEPRECATIONS as rt, init_load as s, getLegacyHome as si, flushAllPendingAutoCommits as sn, saveProjectsConfig as sr, init_model_capabilities as st, init_config_yaml as t, encodeClaudeProjectDir as ti, writeRecordTieredExecutionOverride as tn, renameProject as tr, resolveModel as tt, isTldrEnabledSync as u, isDevMode as ui, queueAutoCommit as un, setProjectMergeTrainSync as ur, CLIPROXY_GPT56_CONTEXT_WINDOW as ut, getDefaultTtsDaemonConfig as v, parsePorcelainStatusPaths as vn, parseIssueIdSync as vr, RECORD_SCHEMA_VERSION as vt, TieredExecutionConfigError as w, shouldCommitLegacyWorkspaceArtifacts as wn, ConfigError as wr, claimIssueOwner as wt, init_defaults as x, STATE_BRANCH as xn, require_dist as xr, appendSessionEntry as xt, mergeTtsDaemonConfigs as y, acquireStateMigrationLock as yn, resolveBareNumericIdSync as yr, appendFeedbackEntry as yt, getKimiAnthropicBaseUrl as z, getProjectSync as zn, CACHE_AGENTS_DIR as zr, readIssueRecordSync as zt };
14971
14979
 
14972
- //# sourceMappingURL=config-yaml-CmOPzmBb.js.map
14980
+ //# sourceMappingURL=config-yaml-CxdwhAIA.js.map
@@ -0,0 +1,3 @@
1
+ import { i as init_conflict_gate, s as resolveConflictGate, t as buildRealConflictGateDeps } from "./conflict-gate-E4nt7ZeS.js";
2
+ init_conflict_gate();
3
+ export { buildRealConflictGateDeps, resolveConflictGate };
@@ -1,16 +1,16 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
3
- import { S as setReviewStatusSync, f as init_review_status, u as getReviewStatusSync } from "./review-status-yljtTd-q.js";
4
- import { X as messageAgent, b as init_agents, dt as spawnRun } from "./queries-DHJm7bTd.js";
3
+ import { C as setReviewStatusSync, d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
4
+ import { X as messageAgent, b as init_agents, dt as spawnRun } from "./queries-C-MUZaIy.js";
5
5
  import { exec } from "node:child_process";
6
6
  import { promisify } from "node:util";
7
7
  //#region ../../lib/cloister/conflict-gate.ts
8
8
  /**
9
- * Non-destructively checks whether HEAD can merge with origin/<targetBranch>.
10
- * Uses git merge-tree only — never git merge — so HEAD, the index, and the
11
- * working tree are left untouched.
9
+ * Non-destructively checks whether HEAD can merge with origin/<targetBranch>,
10
+ * returning the conflicting paths (if any). Uses git merge-tree only — never
11
+ * git merge — so HEAD, the index, and the working tree are left untouched.
12
12
  */
13
- async function checkBranchMergeability(workspacePath, targetBranch, deps = {}) {
13
+ async function probeBranchConflictPaths(workspacePath, targetBranch, deps = {}) {
14
14
  const run = deps.exec ?? execAsync;
15
15
  const options = {
16
16
  cwd: workspacePath,
@@ -21,14 +21,54 @@ async function checkBranchMergeability(workspacePath, targetBranch, deps = {}) {
21
21
  try {
22
22
  await run(`git fetch origin ${shellQuote(targetBranch)}`, options);
23
23
  } catch {
24
- return "unknown";
24
+ return {
25
+ mergeability: "unknown",
26
+ paths: []
27
+ };
25
28
  }
26
29
  try {
27
30
  const result = await run(`git merge-tree --write-tree --name-only HEAD ${shellQuote(`origin/${targetBranch}`)}`, options);
28
- return outputHasConflictMarker(result.stdout, result.stderr) ? "conflicts" : "clean";
31
+ if (outputHasConflictMarker(result.stdout, result.stderr)) return {
32
+ mergeability: "conflicts",
33
+ paths: parseMergeTreeNameOnly(toText(result.stdout))
34
+ };
35
+ return {
36
+ mergeability: "clean",
37
+ paths: []
38
+ };
29
39
  } catch (err) {
30
- return mergeTreeFailureIndicatesConflict(err) ? "conflicts" : "unknown";
40
+ if (mergeTreeFailureIndicatesConflict(err)) return {
41
+ mergeability: "conflicts",
42
+ paths: parseMergeTreeNameOnly(toText(err.stdout))
43
+ };
44
+ return {
45
+ mergeability: "unknown",
46
+ paths: []
47
+ };
48
+ }
49
+ }
50
+ /**
51
+ * Non-destructively checks whether HEAD can merge with origin/<targetBranch>.
52
+ * Thin wrapper over probeBranchConflictPaths — kept for callers that only
53
+ * need the tri-state result.
54
+ */
55
+ async function checkBranchMergeability(workspacePath, targetBranch, deps = {}) {
56
+ return (await probeBranchConflictPaths(workspacePath, targetBranch, deps)).mergeability;
57
+ }
58
+ /**
59
+ * Parses `git merge-tree --write-tree --name-only` stdout. Line 1 is the
60
+ * tree OID; subsequent lines up to (not including) the first blank line are
61
+ * the conflicting paths.
62
+ */
63
+ function parseMergeTreeNameOnly(stdout) {
64
+ const lines = stdout.split("\n");
65
+ const paths = [];
66
+ for (let i = 1; i < lines.length; i += 1) {
67
+ const line = lines[i];
68
+ if (line === "") break;
69
+ paths.push(line);
31
70
  }
71
+ return paths;
32
72
  }
33
73
  function buildRealConflictGateDeps(overrides = {}) {
34
74
  const runSpawn = overrides.spawnRun ?? spawnRun;
@@ -47,7 +87,10 @@ function buildRealConflictGateDeps(overrides = {}) {
47
87
  const prompt = buildConflictResolverPrompt(input);
48
88
  let dispatchState = "dispatched";
49
89
  try {
50
- await runSpawn(input.issueId, "work", { prompt });
90
+ await runSpawn(input.issueId, "work", {
91
+ prompt,
92
+ startedBy: "conflict-gate"
93
+ });
51
94
  } catch (err) {
52
95
  if (isAlreadyRunningError(err)) {
53
96
  await deliverMessage(`agent-${input.issueId.toLowerCase()}`, prompt, "conflict-gate");
@@ -77,7 +120,10 @@ async function resolveConflictGate(issueId, workspacePath, targetBranch, deps) {
77
120
  const mergeability = await getCachedMergeability(issueId, checkedAtMs, workspacePath, targetBranch, deps);
78
121
  if (mergeability === "clean") {
79
122
  const remainingBlockers = (status.blockerReasons ?? []).filter((blocker) => !isMergeBlocker(blocker));
80
- await deps.setReviewStatus(issueId, { blockerReasons: remainingBlockers.length > 0 ? remainingBlockers : void 0 }, status);
123
+ await deps.setReviewStatus(issueId, {
124
+ blockerReasons: remainingBlockers.length > 0 ? remainingBlockers : void 0,
125
+ conflictsSince: void 0
126
+ }, status);
81
127
  deps.log?.(`[conflict-gate] ${issueId}: cleared stale merge blocker; review can proceed`);
82
128
  return {
83
129
  gated: false,
@@ -228,6 +274,6 @@ var init_conflict_gate = __esmMin((() => {
228
274
  probeInFlight = /* @__PURE__ */ new Map();
229
275
  }));
230
276
  //#endregion
231
- export { resolveConflictGate as a, init_conflict_gate as i, checkBranchMergeability as n, getCachedConflictGateMergeability as r, buildRealConflictGateDeps as t };
277
+ export { parseMergeTreeNameOnly as a, init_conflict_gate as i, checkBranchMergeability as n, probeBranchConflictPaths as o, getCachedConflictGateMergeability as r, resolveConflictGate as s, buildRealConflictGateDeps as t };
232
278
 
233
- //# sourceMappingURL=conflict-gate-B9cN3SBi.js.map
279
+ //# sourceMappingURL=conflict-gate-E4nt7ZeS.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, ci as init_paths } from "./config-yaml-CmOPzmBb.js";
3
- import { E as init_layers, c as init_render, f as init_rules, r as init_assemble } from "./assemble-DnffNpOo.js";
2
+ import { Fr as init_errors, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
+ import { E as init_layers, c as init_render, f as init_rules, r as init_assemble } from "./assemble-Bgwqv-Ro.js";
4
4
  import "effect";
5
5
  import "fs";
6
6
  import "path";
@@ -34,4 +34,4 @@ var init_context_layers = __esmMin((() => {
34
34
  //#endregion
35
35
  export { init_context_layers as t };
36
36
 
37
- //# sourceMappingURL=context-layers-dR5YxHYB.js.map
37
+ //# sourceMappingURL=context-layers-C_IIysnm.js.map
@@ -1,4 +1,4 @@
1
- import { S as codexGlobalContextFile, k as piGlobalContextFile } from "./assemble-DnffNpOo.js";
2
- import { t as init_context_layers } from "./context-layers-dR5YxHYB.js";
1
+ import { S as codexGlobalContextFile, k as piGlobalContextFile } from "./assemble-Bgwqv-Ro.js";
2
+ import { t as init_context_layers } from "./context-layers-C_IIysnm.js";
3
3
  init_context_layers();
4
4
  export { codexGlobalContextFile, piGlobalContextFile };
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, Zn as loadProjectsConfigSync, zn as getProjectSync } from "./config-yaml-CmOPzmBb.js";
3
- import { _ as integer, a as EventBus, d as getOverdeckDatabaseSync, f as init_infra, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, x as eq } from "./infra-BjuxvjdS.js";
4
- import { n as init_issues, t as IssueId } from "./issues-CgnQ1OGQ.js";
2
+ import { Gn as init_projects, Zn as loadProjectsConfigSync, zn as getProjectSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { _ as integer, a as EventBus, d as getOverdeckDatabaseSync, f as init_infra, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, x as eq } from "./infra-BDQDRopn.js";
4
+ import { n as init_issues, t as IssueId } from "./issues-DQ5-LatB.js";
5
5
  import { Context, Effect, Layer, Schema } from "effect";
6
6
  import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
7
7
  //#region ../../lib/overdeck/control-settings.ts
@@ -26,6 +26,12 @@ function setSetting(key, value) {
26
26
  overdeckDb().prepare(`INSERT INTO app_settings (key, value, updated_at) VALUES (?, ?, ?)
27
27
  ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`).run(key, value, now);
28
28
  }
29
+ function getLastCleanShutdownAt() {
30
+ return getSetting(DASHBOARD_LAST_CLEAN_SHUTDOWN_AT_KEY);
31
+ }
32
+ function setLastCleanShutdownAt(iso) {
33
+ setSetting(DASHBOARD_LAST_CLEAN_SHUTDOWN_AT_KEY, iso);
34
+ }
29
35
  function parseBootReconciliationDecision(value) {
30
36
  if (value && BOOT_RECONCILIATION_DECISIONS.has(value)) return value;
31
37
  return null;
@@ -160,7 +166,7 @@ function setMergeTrainEnabled(enabled) {
160
166
  function getFlywheelActiveRunIdSync() {
161
167
  return getOverdeckDatabaseSync().prepare(`SELECT value FROM app_settings WHERE key = 'flywheel.active_run_id'`).get()?.value ?? null;
162
168
  }
163
- var appSettings, issuePolicy, FlywheelConfig, FlywheelConfigPatch, FlywheelRuntime, IssuePolicy, ProjectKey, ProjectConfig, ProjectNotFound, SettingsResolver, SettingsWriter, ConfigResolver, DEACON_GLOBAL_PAUSE_KEY, CLOISTER_SPAWNS_PAUSED_KEY, FLYWHEEL_GLOBAL_PAUSE_KEY, FLYWHEEL_ACTIVE_RUN_ID_KEY, FLYWHEEL_AUTO_PICKUP_BACKLOG_KEY, FLYWHEEL_REQUIRE_UAT_BEFORE_MERGE_KEY, FLYWHEEL_MERGE_TRAIN_ENABLED_KEY, MERGE_TRAIN_ENABLED_KEY, BOOT_RECONCILIATION_DECISION_KEY, BOOT_RECONCILIATION_PER_AGENT_KEY, BOOT_RECONCILIATION_DECIDED_AT_KEY, BOOT_RECONCILIATION_BOOT_ID_KEY, BOOT_RECONCILIATION_BOOT_STARTED_AT_KEY, BOOT_RECONCILIATION_GRACE_DEADLINE_KEY, BOOT_RECONCILIATION_GRACE_EXTENSIONS_KEY, BOOT_RECONCILIATION_DECISIONS;
169
+ var appSettings, issuePolicy, FlywheelConfig, FlywheelConfigPatch, FlywheelRuntime, IssuePolicy, ProjectKey, ProjectConfig, ProjectNotFound, SettingsResolver, SettingsWriter, ConfigResolver, DEACON_GLOBAL_PAUSE_KEY, CLOISTER_SPAWNS_PAUSED_KEY, FLYWHEEL_GLOBAL_PAUSE_KEY, FLYWHEEL_ACTIVE_RUN_ID_KEY, FLYWHEEL_AUTO_PICKUP_BACKLOG_KEY, FLYWHEEL_REQUIRE_UAT_BEFORE_MERGE_KEY, FLYWHEEL_MERGE_TRAIN_ENABLED_KEY, MERGE_TRAIN_ENABLED_KEY, DASHBOARD_LAST_CLEAN_SHUTDOWN_AT_KEY, BOOT_RECONCILIATION_DECISION_KEY, BOOT_RECONCILIATION_PER_AGENT_KEY, BOOT_RECONCILIATION_DECIDED_AT_KEY, BOOT_RECONCILIATION_BOOT_ID_KEY, BOOT_RECONCILIATION_BOOT_STARTED_AT_KEY, BOOT_RECONCILIATION_GRACE_DEADLINE_KEY, BOOT_RECONCILIATION_GRACE_EXTENSIONS_KEY, BOOT_RECONCILIATION_DECISIONS;
164
170
  var init_control_settings = __esmMin((() => {
165
171
  init_drizzle_orm();
166
172
  init_sqlite_core();
@@ -411,6 +417,7 @@ var init_control_settings = __esmMin((() => {
411
417
  FLYWHEEL_REQUIRE_UAT_BEFORE_MERGE_KEY = "flywheel.require_uat_before_merge";
412
418
  FLYWHEEL_MERGE_TRAIN_ENABLED_KEY = "flywheel.merge_train_enabled";
413
419
  MERGE_TRAIN_ENABLED_KEY = "merge_train.enabled";
420
+ DASHBOARD_LAST_CLEAN_SHUTDOWN_AT_KEY = "dashboard.last_clean_shutdown_at";
414
421
  BOOT_RECONCILIATION_DECISION_KEY = "boot_reconciliation.decision";
415
422
  BOOT_RECONCILIATION_PER_AGENT_KEY = "boot_reconciliation.per_agent";
416
423
  BOOT_RECONCILIATION_DECIDED_AT_KEY = "boot_reconciliation.decided_at";
@@ -431,6 +438,6 @@ var init_control_settings = __esmMin((() => {
431
438
  })).add(HttpApiEndpoint.get("listProjects", "/projects", { success: Schema.Array(ProjectConfig) }));
432
439
  }));
433
440
  //#endregion
434
- export { setFlywheelRequireUatBeforeMerge as C, stampBootReconciliation as E, setFlywheelGloballyPaused as S, setSetting as T, setCloisterSpawnsPausedSync as _, getFlywheelActiveRunIdSync as a, setFlywheelActiveRunId as b, isCloisterSpawnsPausedSync as c, isFlywheelAutoPickupBacklog as d, isFlywheelGloballyPaused as f, setBootReconciliationGrace as g, setBootReconciliationDecision as h, getFlywheelActiveRunId as i, isDeaconGloballyPaused as l, isMergeTrainEnabled as m, FLYWHEEL_GLOBAL_PAUSE_KEY as n, getSetting as o, isFlywheelRequireUatBeforeMerge as p, getBootReconciliationState as r, init_control_settings as s, FLYWHEEL_ACTIVE_RUN_ID_KEY as t, isDeaconGloballyPausedSync as u, setDeaconGloballyPaused as v, setMergeTrainEnabled as w, setFlywheelAutoPickupBacklog as x, setDeaconGloballyPausedSync as y };
441
+ export { setFlywheelGloballyPaused as C, setSetting as D, setMergeTrainEnabled as E, stampBootReconciliation as O, setFlywheelAutoPickupBacklog as S, setLastCleanShutdownAt as T, setBootReconciliationGrace as _, getFlywheelActiveRunIdSync as a, setDeaconGloballyPausedSync as b, init_control_settings as c, isDeaconGloballyPausedSync as d, isFlywheelAutoPickupBacklog as f, setBootReconciliationDecision as g, isMergeTrainEnabled as h, getFlywheelActiveRunId as i, isCloisterSpawnsPausedSync as l, isFlywheelRequireUatBeforeMerge as m, FLYWHEEL_GLOBAL_PAUSE_KEY as n, getLastCleanShutdownAt as o, isFlywheelGloballyPaused as p, getBootReconciliationState as r, getSetting as s, FLYWHEEL_ACTIVE_RUN_ID_KEY as t, isDeaconGloballyPaused as u, setCloisterSpawnsPausedSync as v, setFlywheelRequireUatBeforeMerge as w, setFlywheelActiveRunId as x, setDeaconGloballyPaused as y };
435
442
 
436
- //# sourceMappingURL=control-settings-C7DUehE1.js.map
443
+ //# sourceMappingURL=control-settings-CiqGxXnc.js.map
@@ -1,3 +1,3 @@
1
- import { a as init_conversation_compaction, c as shouldInterceptManualCompact, i as getConversationCompactionSettings, n as compactConversationNative, o as isCompacting, r as estimateContextTokens, s as maybeCompactBeforeRespawn, t as buildCompactionRuntimeInfo } from "./conversation-compaction-BoqdDXWF.js";
1
+ import { a as init_conversation_compaction, c as shouldInterceptManualCompact, i as getConversationCompactionSettings, n as compactConversationNative, o as isCompacting, r as estimateContextTokens, s as maybeCompactBeforeRespawn, t as buildCompactionRuntimeInfo } from "./conversation-compaction-D6-yLtqt.js";
2
2
  init_conversation_compaction();
3
3
  export { buildCompactionRuntimeInfo, compactConversationNative, estimateContextTokens, getConversationCompactionSettings, isCompacting, maybeCompactBeforeRespawn, shouldInterceptManualCompact };
@@ -1,11 +1,11 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
3
- import { a as init_event_store, n as getEventStore } from "./event-store-zY5MJHgF.js";
4
- import { An as getProviderExportsForModel, b as init_agents, cn as getAgentRuntimeBaseCommand } from "./queries-DHJm7bTd.js";
5
- import { n as isBackgroundFeatureEnabled, t as init_features } from "./features--nFkJY8v.js";
6
- import { t as init_conversation_service, u as findLastCompactBoundary } from "./conversation-service-5aCnq1zR.js";
7
- import { r as init_smart_compaction, t as generateSmartSummary } from "./smart-compaction-D3U_79f-.js";
8
- import { a as generateFallbackSummary, l as init_summary_fork } from "./summary-fork-xiXBnWG9.js";
2
+ import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
+ import { a as init_event_store, n as getEventStore } from "./event-store-CrHcVC5_.js";
4
+ import { An as getProviderExportsForModel, b as init_agents, cn as getAgentRuntimeBaseCommand } from "./queries-C-MUZaIy.js";
5
+ import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-D5km80UI.js";
6
+ import { t as init_conversation_service, u as findLastCompactBoundary } from "./conversation-service-DBxoYMDl.js";
7
+ import { r as init_smart_compaction, t as generateSmartSummary } from "./smart-compaction-ByhL9cRS.js";
8
+ import { a as generateFallbackSummary, l as init_summary_fork } from "./summary-fork-Df2WFijM.js";
9
9
  import { dirname, join } from "node:path";
10
10
  import { Effect } from "effect";
11
11
  import { existsSync } from "node:fs";
@@ -179,4 +179,4 @@ var init_conversation_compaction = __esmMin((() => {
179
179
  //#endregion
180
180
  export { init_conversation_compaction as a, shouldInterceptManualCompact as c, getConversationCompactionSettings as i, compactConversationNative as n, isCompacting as o, estimateContextTokens as r, maybeCompactBeforeRespawn as s, buildCompactionRuntimeInfo as t };
181
181
 
182
- //# sourceMappingURL=conversation-compaction-BoqdDXWF.js.map
182
+ //# sourceMappingURL=conversation-compaction-D6-yLtqt.js.map
@@ -1,9 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ci as init_paths, lt as resolveModelIdSync, nt as MODEL_CAPABILITIES, st as init_model_capabilities } from "./config-yaml-CmOPzmBb.js";
3
- import { s as getHarnessBehavior } from "./src-CRmCHlma.js";
4
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-Bgcub5kW.js";
5
- import { r as parseCodexSessionSync, t as init_codex_parser } from "./codex-parser-DpB89Vqa.js";
6
- import { t as init_behavior } from "./behavior-CfIg6pKp.js";
2
+ import { li as init_paths, lt as resolveModelIdSync, nt as MODEL_CAPABILITIES, st as init_model_capabilities } from "./config-yaml-CxdwhAIA.js";
3
+ import { s as getHarnessBehavior } from "./src-B948bGVR.js";
4
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-DpgYmYqR.js";
5
+ import { r as parseCodexSessionSync, t as init_codex_parser } from "./codex-parser-Dt-ycU8L.js";
6
+ import { t as init_behavior } from "./behavior-td6-xhQk.js";
7
7
  import "node:path";
8
8
  import "node:os";
9
9
  import { open, readFile, stat, watch } from "node:fs/promises";
@@ -522,7 +522,8 @@ function summarizeToolInputForWorkLog(toolName, input) {
522
522
  const todos = Array.isArray(input.todos) ? input.todos : void 0;
523
523
  return todos ? `${todos.length} item${todos.length === 1 ? "" : "s"}` : void 0;
524
524
  }
525
- case "Task": {
525
+ case "Task":
526
+ case "Agent": {
526
527
  const description = asString(input.description);
527
528
  const subagentType = asString(input.subagent_type);
528
529
  if (description && subagentType) return truncate(`${subagentType}: ${description}`);
@@ -2062,4 +2063,4 @@ var init_conversation_service = __esmMin((() => {
2062
2063
  //#endregion
2063
2064
  export { init_codex_conversation_parser as _, contextUsageFromParseResult as a, parseAcpConversationMessages as b, parseEntireConversation as c, init_pi_conversation_parser as d, isPiSessionFile as f, parseOhmypiConversationMessages as g, isOhmypiSessionFile as h, computeContextUsage as i, parseFromLastCompactBoundary as l, init_ohmypi_conversation_parser as m, gateSnapshotEmission as n, summarizeConversationActivity as o, parsePiConversationMessages as p, watchConversation as r, parseConversationMessages as s, init_conversation_service as t, findLastCompactBoundary as u, parseCodexConversationMessages as v, init_acp_conversation_parser as y };
2064
2065
 
2065
- //# sourceMappingURL=conversation-service-5aCnq1zR.js.map
2066
+ //# sourceMappingURL=conversation-service-DBxoYMDl.js.map
@@ -1,3 +1,3 @@
1
- import { i as computeContextUsage, t as init_conversation_service, u as findLastCompactBoundary } from "./conversation-service-5aCnq1zR.js";
1
+ import { i as computeContextUsage, t as init_conversation_service, u as findLastCompactBoundary } from "./conversation-service-DBxoYMDl.js";
2
2
  init_conversation_service();
3
3
  export { computeContextUsage, findLastCompactBoundary };
@@ -1,3 +1,3 @@
1
- import { M as listConversations, k as init_conversations } from "./conversations-BUpYsOZg.js";
1
+ import { M as listConversations, k as init_conversations } from "./conversations-D0UEdLtk.js";
2
2
  init_conversations();
3
3
  export { listConversations };
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ci as init_paths, si as getOverdeckHome } from "./config-yaml-CmOPzmBb.js";
3
- import { T as isNull, _ as integer, a as EventBus, b as and, d as getOverdeckDatabaseSync, f as init_infra, g as real, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, w as isNotNull, x as eq } from "./infra-BjuxvjdS.js";
4
- import { a as init_event_store, n as getEventStore } from "./event-store-zY5MJHgF.js";
2
+ import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
+ import { T as isNull, _ as integer, a as EventBus, b as and, d as getOverdeckDatabaseSync, f as init_infra, g as real, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, w as isNotNull, x as eq } from "./infra-BDQDRopn.js";
4
+ import { a as init_event_store, n as getEventStore } from "./event-store-CrHcVC5_.js";
5
5
  import { join } from "node:path";
6
6
  import { Context, Effect, Layer, Schema, Stream } from "effect";
7
7
  import { readFileSync } from "node:fs";
@@ -1585,4 +1585,4 @@ var init_conversations = __esmMin((() => {
1585
1585
  //#endregion
1586
1586
  export { updateConversationForkFallbackReason as $, isAgentConversationName as A, removeFavorite as B, getConversationByTmuxSession as C, searchFtsSessions as Ct, importLegacyConversation as D, hasOtherActiveConversationOnTmuxSession as E, upsertDiscoveredSession as Et, markConversationEnded as F, setConversationHarness as G, setClearedToConvId as H, markConversationRunning as I, setForkRequest as J, setConversationModel as K, normalizeHarness as L, listConversations as M, listFavoritedIds as N, incrementForkRetryCount as O, markConversationActive as P, updateConversationDeliveryMethod as Q, reactivateConversationForSpawn as R, getConversationByName as S, markEnrichmentFailed as St, getStuckForks as T, updateEnrichment as Tt, setConversationClaudeSessionId as U, resolveLiveSessionId as V, setConversationEffort as W, unarchiveConversation as X, setImportedConversationLinks as Y, updateConversationCost as Z, canRefineTitle as _, getDiscoveredStats as _t, ConversationName as a, aggregateDiscoveredSessionCost as at, getConversationByClaudeSessionId as b, insertEmbedding as bt, ConversationsResolver as c, countDiscoveredSessions as ct, TitleSource as d, findDiscoveredSessionIds as dt, updateConversationTitle as et, Transcript as f, findDiscoveredSessions as ft, backfillConversationModel as g, getDiscoveredSessionBySessionId as gt, archiveConversation as h, getDiscoveredSessionByJsonlPath as ht, ConversationId as i, findConversationForCostSessionSync as it, listArchivedConversationsWithEnrichment as j, init_conversations as k, Harness as l, countFtsSessions as lt, TranscriptsWriter as m, getDiscoveredSessionById as mt, BackingFile as n, updateLastAttached as nt, ConversationNotFound as o, aggregateDiscoveredSessionCostBy as ot, TranscriptsResolver as p, findEnrichedSessionIdsMissingEmbedding as pt, setFavorite as q, Conversation as r, updateSpawnError as rt, ConversationWriter as s, buildFilterSql as st, AlreadyArchived as t, updateForkStatus as tt, NotArchived as u, ensureDiscoveredSessionsSchema as ut, canReplaceTitle as v, getEmbedding as vt, getConversationLedgerCosts as w, topKCosine as wt, getConversationById as x, loadEmbeddings as xt, createConversation as y, init_discovered_sessions as yt, recordConversationHandoff as z };
1587
1587
 
1588
- //# sourceMappingURL=conversations-BUpYsOZg.js.map
1588
+ //# sourceMappingURL=conversations-D0UEdLtk.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { o as getPricingSync, s as init_cost$1, t as calculateCostSync } from "./cost-Bgcub5kW.js";
3
- import { i as init_events, t as appendCostEventSync } from "./events-D9PR1IC0.js";
2
+ import { o as getPricingSync, s as init_cost$1, t as calculateCostSync } from "./cost-DpgYmYqR.js";
3
+ import { i as init_events, t as appendCostEventSync } from "./events-BNrvchBg.js";
4
4
  //#region ../../lib/background-ai/cost.ts
5
5
  /** The cost-source tag prefix used for every background AI event. */
6
6
  function backgroundCostSource(feature) {
@@ -52,4 +52,4 @@ var init_cost = __esmMin((() => {
52
52
  //#endregion
53
53
  export { recordBackgroundAiCost as n, init_cost as t };
54
54
 
55
- //# sourceMappingURL=cost-CvxRrucd.js.map
55
+ //# sourceMappingURL=cost-DS1s0DbG.js.map