@overdeck/desktop 0.46.0 → 0.47.1

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 (388) 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-Cd7ZGZCq.js} +2 -2
  4. package/server/{advancing-selfheal-De1L-Sb4.js → advancing-selfheal-DieFp3qi.js} +6 -6
  5. package/server/{agent-gc-CBULruzm.js → agent-gc-BMcgTDl7.js} +5 -5
  6. package/server/{agent-state-VQk8fY9F.js → agent-state-DyZJia9f.js} +1 -1
  7. package/server/{agent-state-service-BlnSkRFA.js → agent-state-service-BOzQhLjU.js} +15 -9
  8. package/server/agent-state-service-DFO6qvHp.js +2 -0
  9. package/server/agent-state-source-Ca_zCaII.js +21 -0
  10. package/server/{agents-C5rWYhb6.js → agents-CtACUuVG.js} +23 -16
  11. package/server/{agents-BKKkxKgK.js → agents-Dnn4XgdB.js} +1 -1
  12. package/server/archive-planning-BHCd_eL5.js +2 -0
  13. package/server/{archive-planning-C0lAbNB_.js → archive-planning-Binfb99i.js} +10 -6
  14. package/server/{artifact-index-jobs-ug6ZxIP5.js → artifact-index-jobs-Jn7BGOtV.js} +2 -2
  15. package/server/{assemble-DnffNpOo.js → assemble-DsqK9OAq.js} +2 -2
  16. package/server/{tmux-dedup-DbN6MGzM.js → auto-spawn-consent-BooqhC3L.js} +262 -13
  17. package/server/{backlog-auto-trigger-Dh-i9PQf.js → backlog-auto-trigger-BADGPxov.js} +3 -3
  18. package/server/{behavior-CfIg6pKp.js → behavior-B7biGtFT.js} +2 -2
  19. package/server/boot-reconciled-stop-events-bQUzU8ns.js +44 -0
  20. package/server/{bridge-pool-patrol-CUFmjVDN.js → bridge-pool-patrol-DsPj6F7t.js} +1 -1
  21. package/server/{briefing-freshness-DHmCSLar.js → briefing-freshness-CUerZqWd.js} +2 -2
  22. package/server/{build-info-CuFfxZxp.js → build-info-D0q_i8WM.js} +3 -3
  23. package/server/{build-info-BP160gU7.js → build-info-Du74MKiP.js} +1 -1
  24. package/server/{checkpoint-manager-Dxh0FYsv.js → checkpoint-manager-Cu-R5Uzg.js} +1 -1
  25. package/server/{checkpoint-manager-DEWD82qK.js → checkpoint-manager-R5tnaxEY.js} +2 -2
  26. package/server/checkpoint-worker.js +1 -1
  27. package/server/{checkpoints-CZvbtLnr.js → checkpoints-DYtLu-PB.js} +2 -2
  28. package/server/{checkpoints-DMTgXuLG.js → checkpoints-wF84ubZ8.js} +1 -1
  29. package/server/{claude-hooks-provision-fvy4RD2b.js → claude-hooks-provision-DXI3Wqlm.js} +2 -2
  30. package/server/{claude-hooks-provision-CN-xo-do.js → claude-hooks-provision-UKxCeOyj.js} +1 -1
  31. package/server/{claude-permissions-CN0cSCPp.js → claude-permissions-DYVLnX9t.js} +2 -2
  32. package/server/{claude-settings-overlay-CJn35FHQ.js → claude-settings-overlay-DsbpIq2d.js} +2 -2
  33. package/server/{claude-settings-overlay-Dabi9slj.js → claude-settings-overlay-DxP2F_gY.js} +1 -1
  34. package/server/cli-D6mRfUE6.js +3 -0
  35. package/server/{cli-oCWYA1pE.js → cli-DzRKxxP_.js} +9 -9
  36. package/server/{cliproxy-C8mB3KuB.js → cliproxy-CG4meRFc.js} +2 -2
  37. package/server/{cliproxy-PGwTX_o8.js → cliproxy-Cwzw39yN.js} +1 -1
  38. package/server/{close-issue-D5MF5GqF.js → close-issue-BX1bATJy.js} +5 -5
  39. package/server/{closed-issue-reaper-CJ24u0Zt.js → closed-issue-reaper-DvnTSN6a.js} +1 -1
  40. package/server/{closed-issue-reaper-Cltx86x5.js → closed-issue-reaper-hLt0W86J.js} +62 -12
  41. package/server/{codex-Drlf5Xhf.js → codex-BYwi1uyW.js} +6 -6
  42. package/server/{codex-parser-DpB89Vqa.js → codex-parser-Poyz29GE.js} +2 -2
  43. package/server/{codex-BdEsUFWh.js → codex-rnJN3v3_.js} +1 -1
  44. package/server/{compaction-continuation-K2AxQX4H.js → compaction-continuation-DtMfHN0f.js} +3 -3
  45. package/server/{config-Dr3pW6w6.js → config-CX4vk1CV.js} +2 -2
  46. package/server/{config-DV-grfQc.js → config-R793W0yA.js} +1 -1
  47. package/server/{config-B2IMcBxx.js → config-ktAVnp4s.js} +2 -2
  48. package/server/{config-yaml-CmOPzmBb.js → config-yaml-CxdwhAIA.js} +10 -2
  49. package/server/{conflict-gate-B9cN3SBi.js → conflict-gate-BNv6UolH.js} +59 -13
  50. package/server/conflict-gate-BSTlwCtF.js +3 -0
  51. package/server/{context-layers-D6LZo3l1.js → context-layers-DCdaGsRG.js} +2 -2
  52. package/server/{context-layers-dR5YxHYB.js → context-layers-DlWsDiRF.js} +3 -3
  53. package/server/{control-settings-C7DUehE1.js → control-settings-qYYHrIqy.js} +13 -6
  54. package/server/{conversation-compaction-Dj4FAKoZ.js → conversation-compaction-BxUKObHb.js} +1 -1
  55. package/server/{conversation-compaction-BoqdDXWF.js → conversation-compaction-CXQrN3I_.js} +8 -8
  56. package/server/{conversation-service-BCxl4f8Z.js → conversation-service-CDnQ3ayN.js} +1 -1
  57. package/server/{conversation-service-5aCnq1zR.js → conversation-service-CZiUE8Uw.js} +8 -7
  58. package/server/{conversations-BUpYsOZg.js → conversations-D7lR670u.js} +4 -4
  59. package/server/{conversations-C34dyIb9.js → conversations-DXl5YTf4.js} +1 -1
  60. package/server/{cost-Bgcub5kW.js → cost-Aat8HfO_.js} +2 -2
  61. package/server/{cost-CvxRrucd.js → cost-CWvN9FP2.js} +3 -3
  62. package/server/{cost-sync-Dv3LUaNW.js → cost-sync-DiUBXwl6.js} +3 -3
  63. package/server/{dag-ombYYt4s.js → dag-5QlmH0oC.js} +2 -2
  64. package/server/{dangerous-git-ops-BcJPC5Rr.js → dangerous-git-ops-DWX6Og8c.js} +1 -1
  65. package/server/dashboard-db-worker.js +7 -7
  66. package/server/{deacon-hi9KLPLT.js → deacon-B1LD5cJU.js} +741 -211
  67. package/server/{deacon-DrXqT9LQ.js → deacon-PW_bg4uL.js} +3 -3
  68. package/server/{deacon-nudge-log-BNBebzeL.js → deacon-nudge-log-DPHsO14z.js} +3 -3
  69. package/server/{deacon-pending-lifecycle-Cpk0k7Hi.js → deacon-pending-lifecycle-2ZflPxgo.js} +3 -3
  70. package/server/deacon-swarm-BkKR7SXu.js +2 -0
  71. package/server/{deacon-swarm-DBxUaO-A.js → deacon-swarm-DwGUgSVp.js} +15 -14
  72. package/server/deacon.js +8 -8
  73. package/server/{dead-end-trip-CQcP70ND.js → dead-end-trip-B06RFIr2.js} +3 -3
  74. package/server/{delivery-Da0zEMY4.js → delivery-C2M73sBg.js} +1 -1
  75. package/server/{deploy-patrol-Df-Tmaq0.js → deploy-patrol-BNjeCL8u.js} +8 -8
  76. package/server/{deploy-queue-UjKGYsDe.js → deploy-queue-CKT_Ia9p.js} +2 -2
  77. package/server/{deploy-queue-9SrhZR63.js → deploy-queue-DMMYhFC8.js} +1 -1
  78. package/server/{deploy-window-rpqpWqHA.js → deploy-window-DC8lze3d.js} +6 -6
  79. package/server/{deploy-window-jOiPRHL0.js → deploy-window-D_AimdNN.js} +1 -1
  80. package/server/{dev-supervisor-CC46Ig8q.js → dev-supervisor-C4F0vbno.js} +2 -2
  81. package/server/{devcontainer-renderer-68CSCRnu.js → devcontainer-renderer-66sqMQIi.js} +3 -3
  82. package/server/{dist-CJy72uEg.js → dist-C5FT9lTG.js} +1 -1
  83. package/server/dist-qcf9gAP0.js +3 -0
  84. package/server/{dist-src-Bik83hFi.js → dist-src-B-AlGWSl.js} +1 -1
  85. package/server/{docker-BMVTSFL5.js → docker-BxrFhTZ_.js} +1 -1
  86. package/server/{docker-Dam7mbIB.js → docker-CoAT8R0J.js} +2 -2
  87. package/server/{dod-Dar-yheg.js → dod-Bg6wsKTV.js} +26 -5
  88. package/server/durable-review-pipeline-D_DcfIGP.js +3 -0
  89. package/server/{durable-review-pipeline-CGZ5QBxh.js → durable-review-pipeline-HkAgnx0L.js} +5 -2
  90. package/server/{ensure-devcontainer-C98V8yW-.js → ensure-devcontainer-Bg5HJAcO.js} +1 -1
  91. package/server/{ensure-devcontainer-B057YA81.js → ensure-devcontainer-DTxChVuA.js} +4 -4
  92. package/server/{esm-shims-Br9BPdkR.js → esm-shims-CaBWIR7f.js} +1 -1
  93. package/server/{event-store-ELqkVOn0.js → event-store-5UKzh9Jf.js} +1 -1
  94. package/server/{event-store-zY5MJHgF.js → event-store-CrHcVC5_.js} +3 -3
  95. package/server/{events-D6pyqhzM.js → events-ChEFB7Jp.js} +1 -1
  96. package/server/{events-D9PR1IC0.js → events-DhRN-6vM.js} +3 -3
  97. package/server/{factory-CRoOpGsF.js → factory-BezSPaTd.js} +5 -5
  98. package/server/{feature-registry-population--YUXU999.js → feature-registry-population-DhswNiXx.js} +4 -4
  99. package/server/{feature-registry-storage-BORBTo0y.js → feature-registry-storage-CUVNpAso.js} +2 -2
  100. package/server/{features--nFkJY8v.js → features-B2CfNPFw.js} +2 -2
  101. package/server/{feedback-target-C0ZzyHvU.js → feedback-target-CMrEAoeA.js} +1 -1
  102. package/server/{feedback-target-Dt9BsapX.js → feedback-target-VBr9gKgX.js} +18 -7
  103. package/server/{feedback-writer-D1fm-5Z8.js → feedback-writer-CY91ckuw.js} +1 -1
  104. package/server/{feedback-writer-BG0RUZiu.js → feedback-writer-xpFgU632.js} +5 -5
  105. package/server/{flywheel-BiT3odRb.js → flywheel-CTVY3yCG.js} +38 -19
  106. package/server/{flywheel-CLVB55Be.js → flywheel-DQqsSm7P.js} +14 -14
  107. package/server/{flywheel-BekukH4i.js → flywheel-DsICCjTR.js} +1 -1
  108. package/server/{flywheel-merge-order-BKw9o6ku.js → flywheel-merge-order-C-TI4JGu.js} +1 -1
  109. package/server/{flywheel-merge-order-BJv1DZz1.js → flywheel-merge-order-CMGz-imq.js} +7 -7
  110. package/server/forge-D647IMNa.js +3 -0
  111. package/server/{forge-CZbSg6Ds.js → forge-RTNqJe6a.js} +2 -2
  112. package/server/{from-D_4_dk7i.js → from-DxGcivc9.js} +1 -1
  113. package/server/fs-lock-Bre3sGoz.js +130 -0
  114. package/server/{fts-db-BeOomFa-.js → fts-db-wROfFfje.js} +2 -2
  115. package/server/{fts-operations-BdewJ_g9.js → fts-operations-BuTdlZFA.js} +2 -2
  116. package/server/{git-utils-CI6cwyyC.js → git-utils-CedsVume.js} +1 -1
  117. package/server/{git-utils-ameCgDdy.js → git-utils-DtdoEXJk.js} +4 -4
  118. package/server/{github-app-DtAsvwzK.js → github-app-DIE8BkHI.js} +1 -1
  119. package/server/{github-app-CQ1Lo6LA.js → github-app-gVnZcP9B.js} +2 -2
  120. package/server/{github-client-BfyDxuRN.js → github-client-BrAC6ELh.js} +3 -3
  121. package/server/{github-client-Cj0yl_07.js → github-client-CBOkvBUl.js} +1 -1
  122. package/server/{github-pr-lookup-BDq6Wznz.js → github-pr-lookup-CgMULTPf.js} +2 -2
  123. package/server/{harness-binary-DqkftwTb.js → harness-binary-CnBHpd57.js} +2 -2
  124. package/server/{harness-resolve-CqMqM1Mb.js → harness-resolve-BVj6sI8m.js} +4 -4
  125. package/server/{health-events-CazRxJUS.js → health-events-BBWO_Dh9.js} +2 -2
  126. package/server/{health-events-_xfTaOUs.js → health-events-Der6bOkm.js} +1 -1
  127. package/server/{hooks-BnJsxlSq.js → hooks-BJNal-bs.js} +1 -1
  128. package/server/{hooks-BO3QT1sn.js → hooks-BOavco-e.js} +2 -2
  129. package/server/{hume-CDYJxqx-.js → hume-DBocJFkA.js} +2 -2
  130. package/server/hume-DtWN8oV5.js +3 -0
  131. package/server/{idle-stack-reaper-BYqERdkE.js → idle-stack-reaper-CyGxXOfC.js} +1 -1
  132. package/server/{idle-stack-reaper-CnGx_PO_.js → idle-stack-reaper-DQFh8rDh.js} +2 -2
  133. package/server/{in-flight-guard-Bq3epG58.js → in-flight-guard-nXEKoxI7.js} +1 -1
  134. package/server/{infra-BjuxvjdS.js → infra-BDQDRopn.js} +15 -4
  135. package/server/{injection-UCf8EsjX.js → injection-CCopdUKz.js} +7 -7
  136. package/server/{injection-DZxlV2al.js → injection-DfFFEMKL.js} +1 -1
  137. package/server/inspect-agent-CPqXI81t.js +2 -0
  138. package/server/{inspect-agent-6kylZnrm.js → inspect-agent-FCDlNT_i.js} +12 -12
  139. package/server/{internal-token-DvMTQSOS.js → internal-token-BG6yQKNL.js} +2 -2
  140. package/server/{internal-token-M9omeXM1.js → internal-token-BJZa40Ld.js} +1 -1
  141. package/server/{io-VHvc0Ssp.js → io-C0NV7y6C.js} +4 -4
  142. package/server/{issue-closed-B6KJkmHZ.js → issue-closed-CNNGbhWm.js} +8 -8
  143. package/server/{issue-lifecycle-C4Zj0WmE.js → issue-lifecycle-BXfzxFCD.js} +29 -23
  144. package/server/{issue-lifecycle-9gk3fnXN.js → issue-lifecycle-DSH0GpWC.js} +1 -1
  145. package/server/{issue-service-singleton-DmCh7EHj.js → issue-service-singleton-F3A5VP6M.js} +10 -10
  146. package/server/{issue-service-singleton-PMx8F1jr.js → issue-service-singleton-lwFJ4dHk.js} +1 -1
  147. package/server/{issues-CgnQ1OGQ.js → issues-DA-U_MpR.js} +2 -2
  148. package/server/{jsonl-parser-DJOH_O-w.js → jsonl-parser-BXiGANOh.js} +3 -3
  149. package/server/{label-cleanup-Dv7AV_R1.js → label-cleanup-BnxRk0Eo.js} +3 -3
  150. package/server/{lifecycle-CTdOWYMi.js → lifecycle-DOgGnpIv.js} +2 -2
  151. package/server/{lifecycle-DDN8ApVY.js → lifecycle-Di48-w4x.js} +6 -6
  152. package/server/{lifecycle-io-D-lGdzK3.js → lifecycle-io-1XSeczTr.js} +5 -5
  153. package/server/{lifecycle-io-D_zTLvP1.js → lifecycle-io-eVG6v_8-.js} +1 -1
  154. package/server/{linear-client-BQU36QqE.js → linear-client-CYZRrcjp.js} +3 -3
  155. package/server/{linear-client-CY4O_Tu3.js → linear-client-CvGo9n7M.js} +1 -1
  156. package/server/{linear-mcp-auth-BnU4TYfY.js → linear-mcp-auth-Cp0XaP96.js} +5 -5
  157. package/server/{linear-mcp-auth-NYBq_oHZ.js → linear-mcp-auth-DoJnjdPZ.js} +1 -1
  158. package/server/memory-fts-worker.js +1 -1
  159. package/server/{merge-Bpx4jjht.js → merge-DO14mOr3.js} +3 -3
  160. package/server/{merge-idOG--29.js → merge-ZF99ig6A.js} +1 -1
  161. package/server/{merge-agent-DrXa1CpW.js → merge-agent-C1-9zbP_.js} +1 -1
  162. package/server/{merge-agent-DdMVSV2Y.js → merge-agent-gpiRkcvj.js} +31 -31
  163. package/server/{merge-batch-C5q1c1GX.js → merge-batch-C11ocNkO.js} +1 -1
  164. package/server/{merge-completeness-BMm8tMyZ.js → merge-completeness-BUzPZy0E.js} +4 -4
  165. package/server/{merge-completeness-D0ljXbk3.js → merge-completeness-CghMbyX7.js} +1 -1
  166. package/server/merge-ops-7QqziXAh.js +2 -0
  167. package/server/merge-rebase-B4pgzvQJ.js +2 -0
  168. package/server/{merge-rebase-xLnMlw5h.js → merge-rebase-iwlUzZjr.js} +2 -2
  169. package/server/{merge-set-DzsOTBg5.js → merge-set-BymrheTj.js} +1 -1
  170. package/server/{merge-set-DH7ot3yz.js → merge-set-Dbnx4chw.js} +4 -4
  171. package/server/{merge-sync-CQ-LgZ1_.js → merge-sync-CM978zez.js} +7 -4
  172. package/server/merge-sync-CqEtqjI2.js +3 -0
  173. package/server/{merge-train-DTEMyIu4.js → merge-train-DvLcAn1G.js} +4 -4
  174. package/server/{merge-train-deps-CNPJzepw.js → merge-train-deps-Cl_kcRbO.js} +21 -15
  175. package/server/{merge-verification-x3JO8Dtz.js → merge-verification-c9Y9mllw.js} +6 -6
  176. package/server/{merged-docker-cleanup-worker-CTpC27Bs.js → merged-docker-cleanup-worker-CGiDOdv8.js} +3 -3
  177. package/server/{merged-docker-cleanup-worker-Cdi9apm-.js → merged-docker-cleanup-worker-DgsLOx3E.js} +1 -1
  178. package/server/{multipart-parser-IMSBfePV.js → multipart-parser-D0twwRjz.js} +2 -2
  179. package/server/{no-resume-mode-C5ULAXwO.js → no-resume-mode-DZvP0M_S.js} +1 -1
  180. package/server/node_modules/.package-lock.json +4 -4
  181. package/server/node_modules/@types/node/README.md +1 -1
  182. package/server/node_modules/@types/node/crypto.d.ts +1 -1
  183. package/server/node_modules/@types/node/package.json +2 -2
  184. package/server/{orphan-proposed-reconciler-CWmOdM9-.js → orphan-proposed-reconciler-6r2OEfYd.js} +1 -1
  185. package/server/{orphan-proposed-reconciler-Dg6U4ADZ.js → orphan-proposed-reconciler-DtQP6oE_.js} +230 -31
  186. package/server/package-lock.json +5 -5
  187. package/server/package.json +1 -1
  188. package/server/{pan-dir-ubraCiUg.js → pan-dir-DAOb1V2-.js} +4 -4
  189. package/server/{paths-cXmOwSbh.js → paths-DuATV5iE.js} +2 -2
  190. package/server/{pending-lifecycle-claim-DEteYdS9.js → pending-lifecycle-claim-DQUHIDfX.js} +2 -2
  191. package/server/persistent-logger-CBj016pT.js +57 -0
  192. package/server/{pickup-D8xtG1J2.js → pickup-zXZl5lQI.js} +4 -3
  193. package/server/{pipeline-membership-CrAPLYtf.js → pipeline-membership-B2yUcBz7.js} +1 -1
  194. package/server/{pipeline-membership-BGSvkT2M.js → pipeline-membership-DHOXmvba.js} +1 -1
  195. package/server/{pipeline-membership-gather-CET40frr.js → pipeline-membership-gather-BIcJ-N0W.js} +114 -9
  196. package/server/{pipeline-membership-gather-DTfcgxLl.js → pipeline-membership-gather-OkLXuvxR.js} +1 -1
  197. package/server/{pipeline-notifier-ImNXknf0.js → pipeline-notifier-BmwrVKsO.js} +1 -1
  198. package/server/{pipeline-notifier-BuQ0e4hF.js → pipeline-notifier-CxMes51i.js} +2 -2
  199. package/server/{post-merge-lifecycle-worker-DbO10pum.js → post-merge-lifecycle-worker-3u_rA4R0.js} +3 -3
  200. package/server/{project-pipelines-Bim6bThI.js → project-pipelines-C3SPFJ38.js} +2 -2
  201. package/server/{project-repos-C0nuoBGv.js → project-repos-BOpBzkO6.js} +2 -2
  202. package/server/{project-repos-CRE6Ykow.js → project-repos-BgW4lcIa.js} +1 -1
  203. package/server/{projects-B03Wr-xc.js → projects-_n3Zui6K.js} +1 -1
  204. package/server/{prompts-BEx08AIu.js → prompts-B0TtboFm.js} +2 -2
  205. package/server/{providers-D7IluJe0.js → providers-BI1mOBQ4.js} +1 -1
  206. package/server/{providers-evXhiQeg.js → providers-O2smCvSz.js} +7 -7
  207. package/server/public/assets/{chunk-BO2N2NFS-D1s4-Sqp.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
  208. package/server/public/assets/{diagram-OG6HWLK6-1gdMoSF7.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
  209. package/server/public/assets/{dist-DqDRYW6P.js → dist-5zingMiA.js} +3 -3
  210. package/server/public/assets/{dist-CxAOHbil.js → dist-CVxhbI2E.js} +1 -1
  211. package/server/public/assets/{ganttDiagram-6RSMTGT7-BYex-Ec7.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
  212. package/server/public/assets/{highlighted-body-OFNGDK62-DlVkiG0S.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
  213. package/server/public/assets/{index-K0hAYCgV.js → index-DEpY-D1O.js} +148 -148
  214. package/server/public/assets/index-Ddkcz3WT.css +1 -0
  215. package/server/public/assets/{linear-B4cuEFmO.js → linear-BB0jQT16.js} +1 -1
  216. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
  217. package/server/public/assets/{pieDiagram-4H26LBE5-CBHNBIJQ.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
  218. package/server/public/assets/{prod-CN2nHBvX.js → prod-XBLvikex.js} +4 -4
  219. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Bom87VOQ.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
  220. package/server/public/assets/{sankeyDiagram-5OEKKPKP-UrBeyLxk.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
  221. package/server/public/assets/{xychartDiagram-2RQKCTM6-DhkbrIxR.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
  222. package/server/public/index.html +2 -2
  223. package/server/{pull-requests-DHWiKxo7.js → pull-requests-BonZ4WVG.js} +3 -3
  224. package/server/{pull-requests-Cv7LxzUN.js → pull-requests-DNcJUVWA.js} +1 -1
  225. package/server/{queries-DHJm7bTd.js → queries-DCX27GRr.js} +266 -155
  226. package/server/{rally-B71M9f4o.js → rally-Cxe7lKYX.js} +3 -3
  227. package/server/{rally-api-D5uXN08-.js → rally-api-Cp50exEi.js} +1 -1
  228. package/server/{rally-api-Dkqmok65.js → rally-api-CzkKenoi.js} +2 -2
  229. package/server/{rally-client-CxsA6ExK.js → rally-client-Bu3Cekkw.js} +1 -1
  230. package/server/{rally-client-Bfqm6XI4.js → rally-client-CyBBEDHu.js} +5 -5
  231. package/server/rally-x6ztTQo4.js +3 -0
  232. package/server/{reap-terminal-sessions-CvmwaqKv.js → reap-terminal-sessions-CtAhr6L0.js} +2 -2
  233. package/server/{reap-terminal-sessions-BQ23nriz.js → reap-terminal-sessions-DvFqQUnq.js} +2 -2
  234. package/server/{rebuild-stack-qeRqHZxH.js → rebuild-stack-BKYpIPDL.js} +2 -2
  235. package/server/{rebuild-stack-0EEYReVZ.js → rebuild-stack-hCQtprWC.js} +7 -7
  236. package/server/{reconstruct-cache-BbYFsqLa.js → reconstruct-cache-CF2avArx.js} +9 -8
  237. package/server/{record-CtroO946.js → record-BTwWhtBb.js} +1 -1
  238. package/server/{record-update-Z0QCxmMp.js → record-update-DaOKS7Wb.js} +5 -128
  239. package/server/{record-update-DH6dLJID.js → record-update-DhI7eySG.js} +1 -1
  240. package/server/{recovery-trip-eJe26h-f.js → recovery-trip-D-wM9EfB.js} +2 -2
  241. package/server/{release-engine-lPUp-MTd.js → release-engine-_eO3VFth.js} +5 -5
  242. package/server/{release-set-BwGeyZKX.js → release-set-vxgZwwZV.js} +3 -3
  243. package/server/{remote-BCd02Es1.js → remote-BienmcrZ.js} +3 -3
  244. package/server/{remote-CVGUhXMV.js → remote-CVPCc7Vy.js} +3 -3
  245. package/server/{remote-agents-C1bssi41.js → remote-agents-kwsEZvXu.js} +1 -1
  246. package/server/{remote-agents-C_VxssLU.js → remote-agents-kxraOCGT.js} +17 -8
  247. package/server/{remote-completion-DAB0P706.js → remote-completion-BtmZ42aP.js} +13 -13
  248. package/server/resume-DXIIfJNk.js +3 -0
  249. package/server/{review-agent-CHhI66UP.js → review-agent-CIRr0yYt.js} +31 -29
  250. package/server/{review-agent-CD4RCI0Y.js → review-agent-UpAM4DmT.js} +1 -1
  251. package/server/{review-artifacts-DSMRIfuJ.js → review-artifacts-BCODM9ww.js} +5 -5
  252. package/server/{review-context-oFuBbiEE.js → review-context-BBsNrDri.js} +9 -9
  253. package/server/{review-convoy-liveness-CpzrcJ5F.js → review-convoy-liveness-l06_LYCt.js} +2 -2
  254. package/server/review-status-CacDM78F.js +3 -0
  255. package/server/{review-status-yljtTd-q.js → review-status-CwhA9wmd.js} +329 -110
  256. package/server/{review-status-emit-CUExtHd5.js → review-status-emit-BPJwYcRy.js} +3 -3
  257. package/server/{review-status-enrichment-QV_hQkgS.js → review-status-enrichment-DvyZAbGR.js} +3 -3
  258. package/server/{review-status-source-ylw5QZUR.js → review-status-source-B70ekARK.js} +1 -1
  259. package/server/{review-status-source-CpvJnvnQ.js → review-status-source-DWnFE0b6.js} +1 -1
  260. package/server/{review-status-sync-NaWvI9Xf.js → review-status-sync-B0IS6Beh.js} +1 -1
  261. package/server/{review-status-sync-483sujRo.js → review-status-sync-h2CJX6ju.js} +11 -6
  262. package/server/{review-verdict-feedback-BPDn4li_.js → review-verdict-feedback-qRohbFG2.js} +1 -1
  263. package/server/{review-verdict-feedback-CELeUinh.js → review-verdict-feedback-yrrmgps_.js} +91 -15
  264. package/server/{rollup-DTNvelz9.js → rollup-CUoav0Op.js} +8 -8
  265. package/server/{rollup-DYZfq1c4.js → rollup-DxCjJaAM.js} +1 -1
  266. package/server/{scanner-CV35oSn4.js → scanner-ChURu_b-.js} +7 -7
  267. package/server/{sequence-io-DF_8iuhV.js → sequence-io-D9ITDxzq.js} +4 -4
  268. package/server/{sequencer-agent-B2WeCtGi.js → sequencer-agent-m7gmaakW.js} +7 -6
  269. package/server/server.js +435 -418
  270. package/server/{service-Br9rpBNA.js → service-BzFG0Us_.js} +88 -59
  271. package/server/{session-fork-D0LY152N.js → session-fork-KBq4HIHF.js} +2 -2
  272. package/server/{session-history-BUyK29eq.js → session-history-C_EMhIIF.js} +7 -55
  273. package/server/settings-9jSGHBPY.js +2 -0
  274. package/server/{settings-Bse1Pdcj.js → settings-BLbcDqUp.js} +3 -3
  275. package/server/{settings-CvVGqNEs.js → settings-DejgzzLs.js} +2 -2
  276. package/server/{shadow-engineering-BWLa8ODz.js → shadow-engineering-D8R9I8Yl.js} +3 -3
  277. package/server/{shadow-state-FV6PHfEW.js → shadow-state-C0Af4clN.js} +1 -1
  278. package/server/{shadow-state-B4fpKxOO.js → shadow-state-fzIqIMDD.js} +2 -2
  279. package/server/{shadow-utils-D7asqxOZ.js → shadow-utils-Ugca_9ND.js} +2 -2
  280. package/server/{ship-log-xplJ8t75.js → ship-log-VAv-lHrF.js} +1 -1
  281. package/server/{smart-compaction-D3U_79f-.js → smart-compaction-B2Xu5XEb.js} +7 -7
  282. package/server/{smart-compaction-CPp2Ykf6.js → smart-compaction-BcYY_Suf.js} +1 -1
  283. package/server/{spawn-planning-session-DGfZ5B8D.js → spawn-planning-session-DhCoBPct.js} +38 -50
  284. package/server/spawn-planning-session-Dsv-350T.js +3 -0
  285. package/server/{specialist-completion-Br48eiDP.js → specialist-completion-z6v3ZqJE.js} +1 -1
  286. package/server/{specialist-context-cVbGnTa3.js → specialist-context-CrA5azkJ.js} +5 -5
  287. package/server/{specialist-handoff-logger-DK-GTz4s.js → specialist-handoff-logger-CmpZYJMB.js} +2 -2
  288. package/server/{specialist-logs-Cl5-hqT8.js → specialist-logs-BorrIu0x.js} +3 -3
  289. package/server/{specialists-CNfYO3G2.js → specialists-2yLmqph9.js} +298 -180
  290. package/server/{specialists-Tdezg_6N.js → specialists-CH6ah6D-.js} +1 -1
  291. package/server/{specialists-Cicieuzu.js → specialists-Dfx9_Wzb.js} +18 -18
  292. package/server/{specialists-JHsdU3pA.js → specialists-ZdrifiKx.js} +1 -1
  293. package/server/specs-DKV3jIEs.js +3 -0
  294. package/server/{src-Ck028hjO.js → src-B2e5rGu2.js} +6 -6
  295. package/server/{src-CRmCHlma.js → src-B948bGVR.js} +57 -13
  296. package/server/{src-UWcGe0Ix.js → src-Dm_NV7f6.js} +3 -3
  297. package/server/{stack-health-DqSqx0zv.js → stack-health-Bf2WdG4E.js} +2 -2
  298. package/server/{stack-health-CJLMrLBl.js → stack-health-CoWAhA99.js} +1 -1
  299. package/server/{stale-task-claims-CYFOUNlT.js → stale-task-claims-D1Ll8fI5.js} +5 -4
  300. package/server/{staleness-D47CUJok.js → staleness-45qZ_a60.js} +1 -1
  301. package/server/{staleness-BQ-0gMYK.js → staleness-CuED1Psm.js} +1 -1
  302. package/server/{state-home-BYV7qZTW.js → state-home-B4EWfIxF.js} +2 -2
  303. package/server/{state-mapping-BVldLhBf.js → state-mapping-BEONzr8P.js} +1 -1
  304. package/server/{state-migrate-CvvBtS0Y.js → state-migrate-Cd8BH33U.js} +4 -4
  305. package/server/{stuck-remediation-Wt0UVvu1.js → stuck-remediation-ChcooZuk.js} +1 -1
  306. package/server/{stuck-remediation-mkLC6G_t.js → stuck-remediation-DmY5UJLg.js} +24 -23
  307. package/server/{substrate-bug-weights-service-XfLAKnmK.js → substrate-bug-weights-service-BvTWrFUz.js} +3 -3
  308. package/server/{summary-fork-CD7GOts0.js → summary-fork--Jr8duYh.js} +2 -2
  309. package/server/{summary-fork-xiXBnWG9.js → summary-fork-Ct514_Jl.js} +8 -8
  310. package/server/supervisor/{injection-budget-B5SbvDx2.js → injection-budget-B3UyEONL.js} +1 -1
  311. package/server/supervisor/{paths-K3noE4N_.js → paths-BBOnCYlO.js} +10 -2
  312. package/server/supervisor/pty-supervisor.js +4 -4
  313. package/server/supervisor/{pty-token-B7lp0ElT.js → pty-token-CWRffcCa.js} +3 -3
  314. package/server/{supervisor-DL788vos.js → supervisor-B7BHGcNA.js} +3 -3
  315. package/server/supervisor-CyR_mW5B.js +2 -0
  316. package/server/{swarm-readiness-BV14DF5N.js → swarm-readiness-MNE5O8hn.js} +3 -3
  317. package/server/{system-prerequisites-pdWG6ZQs.js → system-prerequisites-Cin9ZgDx.js} +2 -2
  318. package/server/{teardown-workspace-l2F4_zim.js → teardown-workspace-CvBpvc85.js} +15 -15
  319. package/server/{test-agent-queue-qakFIIGz.js → test-agent-queue-DmSIqays.js} +8 -7
  320. package/server/{test-verdict-Gw-btEfb.js → test-verdict-BieVDAV1.js} +1 -1
  321. package/server/{test-verdict-BJYDggMm.js → test-verdict-Cy2jJGTe.js} +1 -1
  322. package/server/{tldr-daemon-BKOYB616.js → tldr-daemon-Ca0eovh3.js} +1 -1
  323. package/server/{tldr-daemon-CBaWkV9k.js → tldr-daemon-IOssGwg7.js} +2 -2
  324. package/server/{tmux-B1Wbxz5o.js → tmux-CfDHob9M.js} +174 -4
  325. package/server/{tmux-DQ6jB76i.js → tmux-Ctk6RV5l.js} +1 -1
  326. package/server/{token-Cxbk023d.js → token-B10VFNOD.js} +2 -2
  327. package/server/{token-util-CLq2MmQt.js → token-util-CZ8WPtdk.js} +1 -1
  328. package/server/token-util-CrfQ2FKf.js +3 -0
  329. package/server/{tracker-config-DZ8Zn2nQ.js → tracker-config-CHbrjg6m.js} +2 -2
  330. package/server/{tracker-utils-L0FKtjq2.js → tracker-utils-DZZq_C0R.js} +2 -2
  331. package/server/{traefik-connect-bNX6jKkb.js → traefik-connect-GHomyBaD.js} +1 -1
  332. package/server/{tunnel-BAm1XgjG.js → tunnel-Bdyb-sNq.js} +3 -3
  333. package/server/{tunnel-CjSnHdTc.js → tunnel-Dz7y434T.js} +1 -1
  334. package/server/{typed-errors-BHhE85Ul.js → typed-errors-BR_RmPS_.js} +1 -1
  335. package/server/{typed-errors-2BTMxkZq.js → typed-errors-Bn_2WRU7.js} +1 -1
  336. package/server/{types-hraoaQIp.js → types-D2ETIB8T.js} +1 -1
  337. package/server/{types-q67TYYg5.js → types-Dh6RI5Vj.js} +1 -1
  338. package/server/{uat-promote-verification-CKB9ZrKC.js → uat-promote-verification-DyvQXvIn.js} +5 -5
  339. package/server/{uat-train-D5UjcyAa.js → uat-train-Dv0Bxer7.js} +0 -0
  340. package/server/{uat-train-Cu-4nvbf.js → uat-train-diX_7shd.js} +1 -1
  341. package/server/{validate-Cxsx5Uz1.js → validate-606KcYZC.js} +3 -3
  342. package/server/{validation-DEaTZafj.js → validation-Cf7aaV5A.js} +1 -1
  343. package/server/{validation-VZgJxmqc.js → validation-CnrDul1x.js} +4 -4
  344. package/server/{verification-artifact-g3yuxQDL.js → verification-artifact-D4b-bio9.js} +1 -1
  345. package/server/{verification-artifact-C85cRTc_.js → verification-artifact-GOaj8u2s.js} +1 -1
  346. package/server/{verification-runner-KDZIsBj4.js → verification-runner-B5MVxDvU.js} +19 -19
  347. package/server/{verification-runner-DlZI8yhw.js → verification-runner-DiPaUP-C.js} +1 -1
  348. package/server/{vtt-parser-Jr94BF3Y.js → vtt-parser-CMU5EZ5R.js} +1 -1
  349. package/server/{work-agent-prompt-C-vuP3_J.js → work-agent-prompt-Csb3fbVR.js} +9 -9
  350. package/server/{workflows-D0oip4eV.js → workflows-D87ajwV6.js} +113 -43
  351. package/server/workflows-DN6NyVGd.js +2 -0
  352. package/server/{workspace-BqFg__wH.js → workspace-AIOM7n00.js} +1 -1
  353. package/server/{workspace-anchor-drift-B4gMRHl4.js → workspace-anchor-drift-19cJ1bH5.js} +1 -1
  354. package/server/{workspace-anchor-drift-CZKofakh.js → workspace-anchor-drift-C3mK5wNI.js} +4 -4
  355. package/server/{workspace-config-B123aZl-.js → workspace-config-CJ7RqQiP.js} +1 -1
  356. package/server/{workspace-C0fH3aek.js → workspace-iD8oULqu.js} +3 -3
  357. package/server/{workspace-manager-CDTKjjdU.js → workspace-manager-B38rFWA1.js} +1 -1
  358. package/server/{workspace-manager-CwO-Hek7.js → workspace-manager-CXfrw4rR.js} +13 -13
  359. package/server/{workspace-metadata-D4M8BM4W.js → workspace-metadata-BuMRco5P.js} +1 -1
  360. package/server/{workspace-metadata-CQv00QwK.js → workspace-metadata-eHSj_NsP.js} +2 -2
  361. package/server/{workspaces-j1e_6aAT.js → workspaces-DbtMX2TM.js} +136 -113
  362. package/sync-sources/skills/pan-merge/SKILL.md +7 -5
  363. package/sync-sources/skills/pan-release/SKILL.md +57 -0
  364. package/server/agent-state-service-hZpxIw1E.js +0 -2
  365. package/server/archive-planning-0FJ6Xd3b.js +0 -2
  366. package/server/cli-DmXETsw-.js +0 -3
  367. package/server/conflict-gate-Dh754uyA.js +0 -3
  368. package/server/deacon-swarm-I2JfX5Tg.js +0 -2
  369. package/server/dist-DSlxIU1H.js +0 -3
  370. package/server/durable-review-pipeline-jpgCJZFp.js +0 -3
  371. package/server/forge-DK3blQb_.js +0 -3
  372. package/server/hume-Dq--7rOQ.js +0 -3
  373. package/server/inspect-agent-BVwDrVrz.js +0 -2
  374. package/server/label-reconciler--F85rufp.js +0 -113
  375. package/server/merge-ops-DdpTiEMt.js +0 -2
  376. package/server/merge-rebase-DGQpYJU3.js +0 -2
  377. package/server/merge-sync-Ca7F5JnQ.js +0 -3
  378. package/server/public/assets/index-Cc7cnFC4.css +0 -1
  379. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +0 -1
  380. package/server/rally-YDjU513q.js +0 -3
  381. package/server/resume-u9byntrq.js +0 -3
  382. package/server/review-status-BZH8h-6W.js +0 -3
  383. package/server/settings-CdvIF84R.js +0 -2
  384. package/server/spawn-planning-session-1nFi3gfk.js +0 -2
  385. package/server/specs-Bt7WJDoC.js +0 -3
  386. package/server/supervisor-UWiQNK-y.js +0 -2
  387. package/server/token-util-zlz9U0ki.js +0 -3
  388. package/server/workflows-CHrx_hcW.js +0 -2
@@ -32,6 +32,7 @@ CREATE TABLE `agents` (
32
32
  `phase` text,
33
33
  `role_run_head` text,
34
34
  `flywheel_run_id` text,
35
+ `started_by` text,
35
36
  `cost_so_far` real,
36
37
  `review_sub_role` text,
37
38
  `review_run_id` text,
@@ -351,7 +352,9 @@ CREATE TABLE `review_status` (
351
352
  `strike_recovery_count` integer DEFAULT 0,
352
353
  `strike_transport_retry_count` integer,
353
354
  `strike_next_attempt_at` integer,
354
- `strike_landing_attempts` text
355
+ `strike_landing_attempts` text,
356
+ `review_cycle_history` text,
357
+ `conflicts_since` text
355
358
  );
356
359
  --> statement-breakpoint
357
360
  CREATE INDEX `review_status_updated_idx` ON `review_status` (`updated_at`);--> statement-breakpoint
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@overdeck/desktop",
3
- "version": "0.46.0",
3
+ "version": "0.47.1",
4
4
  "description": "Overdeck Command Deck — AI agent monitoring desktop app",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,4 +1,4 @@
1
- import { m as readWorkspacePlanSync, o as init_io, v as init_types, y as subItemsOf } from "./io-VHvc0Ssp.js";
1
+ import { m as readWorkspacePlanSync, o as init_io, v as init_types, y as subItemsOf } from "./io-C0NV7y6C.js";
2
2
  import "effect";
3
3
  //#region ../../lib/xbrief/acceptance-criteria.ts
4
4
  init_io();
@@ -59,4 +59,4 @@ function extractACFromDocument(doc) {
59
59
  //#endregion
60
60
  export { getXBriefACStatusSync as n, extractACFromDocument as t };
61
61
 
62
- //# sourceMappingURL=acceptance-criteria-CCwFGICj.js.map
62
+ //# sourceMappingURL=acceptance-criteria-Cd7ZGZCq.js.map
@@ -1,8 +1,8 @@
1
- import { D as killSession, M as listSessionNames, w as init_tmux } from "./tmux-B1Wbxz5o.js";
2
- import { f as init_review_status, m as loadReviewStatuses, u as getReviewStatusSync } from "./review-status-yljtTd-q.js";
3
- import { _r as saveAgentStateSync, b as init_agents, rr as getAgentStateSync, ur as markAgentStoppedState } from "./queries-DHJm7bTd.js";
4
- import { c as logDeaconEventSync, o as init_persistent_logger } from "./session-history-BUyK29eq.js";
5
- import { a as selectMergedAdvancingSessions, t as init_reap_terminal_sessions } from "./reap-terminal-sessions-CvmwaqKv.js";
1
+ import { D as killSession, M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
2
+ import { d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status } from "./review-status-CwhA9wmd.js";
3
+ import { r as logDeaconEventSync, t as init_persistent_logger } from "./persistent-logger-CBj016pT.js";
4
+ import { _r as saveAgentStateSync, b as init_agents, rr as getAgentStateSync, ur as markAgentStoppedState } from "./queries-DCX27GRr.js";
5
+ import { a as selectMergedAdvancingSessions, t as init_reap_terminal_sessions } from "./reap-terminal-sessions-CtAhr6L0.js";
6
6
  import { Effect } from "effect";
7
7
  //#region ../../lib/cloister/advancing-selfheal.ts
8
8
  init_agents();
@@ -135,4 +135,4 @@ async function runBootAdvancingSelfHeal(deps = defaultBootAdvancingSelfHealDeps)
135
135
  //#endregion
136
136
  export { checkMergedAdvancingSessions, markAdvancingSessionStopped, reconcileInFlightJournals, runBootAdvancingSelfHeal };
137
137
 
138
- //# sourceMappingURL=advancing-selfheal-De1L-Sb4.js.map
138
+ //# sourceMappingURL=advancing-selfheal-DieFp3qi.js.map
@@ -1,7 +1,7 @@
1
- import { Pt as init_record, Rt as readIssueRecordForWorkspaceSync } from "./config-yaml-CmOPzmBb.js";
2
- import { c as listAllAgentsSync, l as removeAgentSync, o as init_agents } from "./agents-C5rWYhb6.js";
3
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-L0FKtjq2.js";
4
- import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BVldLhBf.js";
1
+ import { Pt as init_record, Rt as readIssueRecordForWorkspaceSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { c as listAllAgentsSync, l as removeAgentSync, o as init_agents } from "./agents-CtACUuVG.js";
3
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-DZZq_C0R.js";
4
+ import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BEONzr8P.js";
5
5
  import { readdir, readlink } from "fs/promises";
6
6
  import { execFile } from "child_process";
7
7
  import { promisify } from "util";
@@ -112,4 +112,4 @@ function pruneTerminalStoppedAgents() {
112
112
  //#endregion
113
113
  export { pidsWithCwdUnder as a, sweepAutoCloseOutCache as i, pruneTerminalStoppedAgents as n, getAutoCloseOutCanonicalState as r, pruneStoppedAgentsForIssue as t };
114
114
 
115
- //# sourceMappingURL=agent-gc-CBULruzm.js.map
115
+ //# sourceMappingURL=agent-gc-BMcgTDl7.js.map
@@ -1,3 +1,3 @@
1
- import { Jn as clearAgentPausedSync, Xn as clearAgentTroubledSync, ir as init_agent_state, rr as getAgentStateSync, yr as setAgentPausedSync } from "./queries-DHJm7bTd.js";
1
+ import { Jn as clearAgentPausedSync, Xn as clearAgentTroubledSync, ir as init_agent_state, rr as getAgentStateSync, yr as setAgentPausedSync } from "./queries-DCX27GRr.js";
2
2
  init_agent_state();
3
3
  export { clearAgentPausedSync, clearAgentTroubledSync, getAgentStateSync, setAgentPausedSync };
@@ -1,6 +1,7 @@
1
- import { a as init_event_store, i as initEventStore } from "./event-store-zY5MJHgF.js";
2
- import { h as applyEvent, m as INITIAL_READ_MODEL_STATE, t as init_src } from "./src-CRmCHlma.js";
3
- import { f as markAgentStateServiceInProcess, l as getRuntimeSnapshot$1, p as setAgentRuntimeMirror, r as init_session_history, t as appendSessionIdToHistory, u as init_agent_runtime_mirror } from "./session-history-BUyK29eq.js";
1
+ import { a as init_event_store, i as initEventStore } from "./event-store-CrHcVC5_.js";
2
+ import { h as applyEvent, m as INITIAL_READ_MODEL_STATE, t as init_src } from "./src-B948bGVR.js";
3
+ import { n as init_boot_reconciled_stop_events, t as emitBootReconciledStopEvents } from "./boot-reconciled-stop-events-bQUzU8ns.js";
4
+ import { l as markAgentStateServiceInProcess, o as getRuntimeSnapshot$1, r as init_session_history, s as init_agent_runtime_mirror, t as appendSessionIdToHistory, u as setAgentRuntimeMirror } from "./session-history-C_EMhIIF.js";
4
5
  import { Context, Effect, Layer, SubscriptionRef } from "effect";
5
6
  //#region services/agent-state-service.ts
6
7
  /**
@@ -29,6 +30,7 @@ init_src();
29
30
  init_event_store();
30
31
  init_agent_runtime_mirror();
31
32
  init_session_history();
33
+ init_boot_reconciled_stop_events();
32
34
  /**
33
35
  * Event types that affect AgentRuntimeSnapshot. Keep in sync with
34
36
  * `packages/contracts/src/event-reducers.ts` — every case that writes
@@ -58,10 +60,12 @@ const AgentStateServiceLive = Layer.effect(AgentStateService, Effect.gen(functio
58
60
  const store = yield* Effect.promise(() => initEventStore());
59
61
  const ref = yield* SubscriptionRef.make({});
60
62
  const seedFromSources = Effect.gen(function* () {
61
- const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-BbYFsqLa.js"));
62
- const seeded = (yield* Effect.promise(() => reconstructCacheAuto())).agentRuntimeById;
63
+ const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-CF2avArx.js"));
64
+ const result = yield* Effect.promise(() => reconstructCacheAuto());
65
+ const seeded = result.agentRuntimeById;
66
+ yield* Effect.promise(() => emitBootReconciledStopEvents(store, result.markedStoppedIds, seeded, "[AgentStateService] Failed to emit boot-reconciled stop event:"));
63
67
  if (Object.keys(seeded).length > 0) {
64
- yield* SubscriptionRef.update(ref, (current) => mergeRuntimeBySequence(current, seeded));
68
+ yield* SubscriptionRef.update(ref, (current) => mergeRuntimeBySequence(current, seeded, result.agentsById));
65
69
  yield* setAgentRuntimeMirror(yield* SubscriptionRef.get(ref));
66
70
  console.log(`[AgentStateService] Bootstrapped ${Object.keys(seeded).length} runtime snapshot(s) from sources`);
67
71
  }
@@ -82,7 +86,7 @@ const AgentStateServiceLive = Layer.effect(AgentStateService, Effect.gen(functio
82
86
  emit: (event) => Effect.promise(() => store.appendAsync(event)).pipe(Effect.asVoid)
83
87
  };
84
88
  }));
85
- function mergeRuntimeBySequence(current, reconstructed) {
89
+ function mergeRuntimeBySequence(current, reconstructed, reconstructedAgents) {
86
90
  const merged = { ...reconstructed };
87
91
  for (const [id, snap] of Object.entries(current)) {
88
92
  const recon = reconstructed[id];
@@ -90,6 +94,8 @@ function mergeRuntimeBySequence(current, reconstructed) {
90
94
  merged[id] = snap;
91
95
  continue;
92
96
  }
97
+ const sourceAgent = reconstructedAgents[id];
98
+ if (recon.activity === "stopped" && sourceAgent?.hasLiveTmuxSession === false) continue;
93
99
  if ((snap.updatedAtSequence ?? -1) >= (recon.updatedAtSequence ?? 0)) merged[id] = snap;
94
100
  }
95
101
  return merged;
@@ -105,6 +111,6 @@ function applyEventToRef(ref, ev) {
105
111
  });
106
112
  }
107
113
  //#endregion
108
- export { AgentStateServiceLive as n, getRuntimeSnapshot as r, AgentStateService as t };
114
+ export { mergeRuntimeBySequence as i, AgentStateServiceLive as n, getRuntimeSnapshot as r, AgentStateService as t };
109
115
 
110
- //# sourceMappingURL=agent-state-service-BlnSkRFA.js.map
116
+ //# sourceMappingURL=agent-state-service-BOzQhLjU.js.map
@@ -0,0 +1,2 @@
1
+ import { i as mergeRuntimeBySequence, n as AgentStateServiceLive, r as getRuntimeSnapshot, t as AgentStateService } from "./agent-state-service-BOzQhLjU.js";
2
+ export { AgentStateService, AgentStateServiceLive, getRuntimeSnapshot, mergeRuntimeBySequence };
@@ -0,0 +1,21 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ //#region ../../lib/agents/agent-state-source.ts
3
+ function registerFeedbackAgentStateReader(fn) {
4
+ reader = fn;
5
+ }
6
+ function readFeedbackAgentStates() {
7
+ if (!reader) return null;
8
+ try {
9
+ return reader();
10
+ } catch {
11
+ return null;
12
+ }
13
+ }
14
+ var reader;
15
+ var init_agent_state_source = __esmMin((() => {
16
+ reader = null;
17
+ }));
18
+ //#endregion
19
+ export { readFeedbackAgentStates as n, registerFeedbackAgentStateReader as r, init_agent_state_source as t };
20
+
21
+ //# sourceMappingURL=agent-state-source-Ca_zCaII.js.map
@@ -1,7 +1,8 @@
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 { _ as integer, a as EventBus, b as and, c as Records, d as getOverdeckDatabaseSync, f as init_infra, h as text, l as Tmux, 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 { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
+ import { _ as integer, a as EventBus, b as and, c as Records, d as getOverdeckDatabaseSync, f as init_infra, h as text, l as Tmux, 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-DA-U_MpR.js";
5
+ import { n as logAgentLifecycleSync, t as init_persistent_logger } from "./persistent-logger-CBj016pT.js";
5
6
  import { join } from "node:path";
6
7
  import { Context, Effect, Layer, Schema } from "effect";
7
8
  import { readFileSync, readdirSync, rmSync, statSync } from "node:fs";
@@ -71,6 +72,7 @@ function agentStateToOverdeckRow(state) {
71
72
  state.phase ?? null,
72
73
  state.roleRunHead ?? null,
73
74
  state.flywheelRunId ?? null,
75
+ state.startedBy ?? null,
74
76
  state.costSoFar ?? null,
75
77
  state.reviewSubRole ?? null,
76
78
  state.reviewRunId ?? null,
@@ -124,13 +126,7 @@ function parseAgentStateJsonSync(content, fallbackId) {
124
126
  if (!parsed.status) parsed.status = "stopped";
125
127
  return parsed;
126
128
  }
127
- /**
128
- * Read each agent's state.json from ~/.overdeck/agents/ and upsert rows into
129
- * the overdeck agents table. Reconciles running/starting agents against live
130
- * tmux sessions.
131
- *
132
- * Replaces database/agent-backfill.ts backfillAgentsAutoSync for the overdeck layer.
133
- */
129
+ /** Rebuild the agents table from state.json and reconcile statuses against live tmux. */
134
130
  /**
135
131
  * All agent ids matching a prefix — unions the overdeck.db rows and the on-disk state
136
132
  * dirs, so it catches both row-only and dir-only orphans (the two can drift apart).
@@ -174,7 +170,7 @@ function backfillAgentsSync(options) {
174
170
  const liveSessions = options?.listLiveSessions?.() ?? listLiveTmuxSessionNamesSync();
175
171
  let processed = 0;
176
172
  let skipped = 0;
177
- let markedStopped = 0;
173
+ const markedStoppedIds = [];
178
174
  let entries = [];
179
175
  try {
180
176
  entries = readdirSync(agentsDir);
@@ -182,7 +178,8 @@ function backfillAgentsSync(options) {
182
178
  return {
183
179
  processed,
184
180
  skipped,
185
- markedStopped
181
+ markedStopped: 0,
182
+ markedStoppedIds
186
183
  };
187
184
  }
188
185
  const cols = OVERDECK_AGENT_COLUMNS.join(", ");
@@ -212,15 +209,20 @@ function backfillAgentsSync(options) {
212
209
  skipped++;
213
210
  continue;
214
211
  }
212
+ let reconciledStop;
215
213
  if ((state.status === "running" || state.status === "starting") && !liveSessions.has(state.id)) {
214
+ reconciledStop = {
215
+ id: state.id,
216
+ previousStatus: state.status
217
+ };
216
218
  state.status = "stopped";
217
219
  state.stoppedAt = state.stoppedAt ?? (/* @__PURE__ */ new Date()).toISOString();
218
- markedStopped++;
219
220
  }
220
221
  try {
221
222
  const row = agentStateToOverdeckRow(state);
222
223
  ensureIssue.run(row[issueIdIdx], Date.now());
223
224
  upsert.run(...row);
225
+ if (reconciledStop) markedStoppedIds.push(reconciledStop);
224
226
  processed++;
225
227
  if (options?.verbose) console.log(`[backfill] ${state.id} -> ${state.status}`);
226
228
  } catch (err) {
@@ -229,10 +231,12 @@ function backfillAgentsSync(options) {
229
231
  }
230
232
  }
231
233
  })();
234
+ for (const { id, previousStatus } of markedStoppedIds) logAgentLifecycleSync(id, `status changed: ${previousStatus} → stopped (boot backfill reconcile: no live tmux session)`);
232
235
  return {
233
236
  processed,
234
237
  skipped,
235
- markedStopped
238
+ markedStopped: markedStoppedIds.length,
239
+ markedStoppedIds
236
240
  };
237
241
  }
238
242
  /**
@@ -264,7 +268,7 @@ function listAllAgentsSync() {
264
268
  channels_enabled, consecutive_failures, first_failure_in_run_at,
265
269
  last_failure_next_retry_at, stopped_at, paused_at, troubled_at,
266
270
  last_activity, last_failure_reason, phase, role_run_head,
267
- flywheel_run_id, cost_so_far, review_sub_role, review_run_id,
271
+ flywheel_run_id, started_by, cost_so_far, review_sub_role, review_run_id,
268
272
  updated_at
269
273
  FROM agents
270
274
  `).all();
@@ -307,6 +311,7 @@ function listAllAgentsSync() {
307
311
  lastFailureReason: row["last_failure_reason"] ?? null,
308
312
  lastFailureNextRetryAt: fromMs(row["last_failure_next_retry_at"]),
309
313
  flywheelRunId: row["flywheel_run_id"] ?? null,
314
+ startedBy: row["started_by"] ?? null,
310
315
  roleRunHead: row["role_run_head"] ?? null,
311
316
  reviewSubRole: row["review_sub_role"] ?? null,
312
317
  reviewRunId: row["review_run_id"] ?? null,
@@ -329,6 +334,7 @@ var init_agents = __esmMin((() => {
329
334
  init_infra();
330
335
  init_issues();
331
336
  init_paths();
337
+ init_persistent_logger();
332
338
  init_issue_stage_sync();
333
339
  overdeckAgents = sqliteTable("agents", {
334
340
  id: text("id").primaryKey(),
@@ -941,6 +947,7 @@ var init_agents = __esmMin((() => {
941
947
  "phase",
942
948
  "role_run_head",
943
949
  "flywheel_run_id",
950
+ "started_by",
944
951
  "cost_so_far",
945
952
  "review_sub_role",
946
953
  "review_run_id",
@@ -972,4 +979,4 @@ var init_agents = __esmMin((() => {
972
979
  //#endregion
973
980
  export { countAgentsByStatusRole as a, listAllAgentsSync as c, isTerminalIssueStage as d, countAgentsByStatus as i, removeAgentSync as l, AgentsResolverLive as n, init_agents as o, backfillAgentsSync as r, listAgentIdsByPrefixSync as s, AgentsResolver as t, getIssueStageSync as u };
974
981
 
975
- //# sourceMappingURL=agents-C5rWYhb6.js.map
982
+ //# sourceMappingURL=agents-CtACUuVG.js.map
@@ -1,3 +1,3 @@
1
- import { $n as getAgentDir, An as getProviderExportsForModel, Ar as isQualifiedAgentId, B as detectCrashedAgents, Bn as dismissDevChannelsDialog, C as replayCrashedStandingAgent, Dn as buildSpawnEnvForModel, En as buildCavemanExports, Fr as getAgentRuntimeState, Ft as deliverResumeMessageWithTranscriptConfirmation, G as resumeAgent, Gn as SESSION_EXITED_BEFORE_KICKOFF, Gt as assertWorkspaceStackHealthyForSpawn, H as restartAgent, In as buildDefaultResumeContinueMessage, Ir as getAgentRuntimeStateSync, Jn as clearAgentPausedSync, Kn as __testInternals, Kt as buildAgentLaunchConfig, Ln as buildResumeContinueMessage, Mr as resolveAgentTargetSync, Mt as deliverAgentMessage, Nr as waitForAgentIdle, Nt as deliverAgentPermissionDecision, On as determineModel, Pr as waitForReadySignal, Pt as deliverInitialPromptWithRetry, Rn as decideChannelsForWorkAgent, Rr as saveAgentRuntimeState, Rt as setAgentDeliveryMethod, S as contextWindowForModel, Sr as writeAgentStateJsonSync, T as shouldReplayCompactAtTierRunBoundary, U as buildCompactRecoverySeed, Un as writeChannelsBridgeMcpConfig, V as recoverAgent, Wn as GOVERNOR_SLOT_PAUSE_REASON_PREFIX, X as messageAgent, Xn as clearAgentTroubledSync, Xt as transitionIssueToInProgress, Yn as clearAgentTroubled, Yt as retrieveSpawnTimeMemoryContext, Zn as clearYieldForResumeSync, Zt as transitionIssueToInReview, _n as waitForPromptReady, _r as saveAgentStateSync, a as listRunningAgentsSync, an as OHMYPI_AGENT_READY_TIMEOUT_SECONDS, ar as isAgentPaused, b as init_agents, br as setAgentYieldedSync, cn as getAgentRuntimeBaseCommand, dn as getProviderAuthMode, dr as markAgentTroubled, dt as spawnRun, et as appendActivity, fn as getRoleRuntimeBaseCommand, fr as recordAgentFailure, gr as saveAgentState, hn as roleAgentDefinitionPath, hr as resetAgentFailureCount, i as listRunningAgents, it as getSessionId, jn as getProviderTmuxFlags, jr as normalizeAgentId, kn as getProviderEnvForModel, kr as clearReadySignal, lr as markAgentRunningState, mn as injectPiConversationMemory, mt as stopAgentSync, nr as getAgentStateFilePath, nt as getLatestSessionId, o as warnOnBareNumericIssueIds, on as describeOhmypiSpawnFailure, or as isAgentTroubled, ot as saveSessionId, pr as recordAgentFailureSync, pt as stopAgent, qn as clearAgentPaused, r as listAgentStates, rr as getAgentStateSync, rt as getLatestSessionIdSync, sr as isRole, t as dropLegacyAgentStatesMissingRoleAsync, tr as getAgentState, tt as getActivity, ur as markAgentStoppedState, ut as spawnAgent, vr as setAgentPaused, w as replayStandingAgent, x as compactAtTierRunBoundary, xr as wipeAgentStateDirs, yr as setAgentPausedSync, z as autoRecoverAgents, zn as decideSupervisorForWorkAgent } from "./queries-DHJm7bTd.js";
1
+ import { $n as getAgentDir, An as getProviderExportsForModel, B as detectCrashedAgents, Bn as dismissDevChannelsDialog, Br as saveAgentRuntimeState, C as replayCrashedStandingAgent, Dn as buildSpawnEnvForModel, En as buildCavemanExports, Fr as waitForAgentIdle, Ft as deliverResumeMessageWithTranscriptConfirmation, G as resumeAgent, Gn as SESSION_EXITED_BEFORE_KICKOFF, Gt as assertWorkspaceStackHealthyForSpawn, H as restartAgent, In as buildDefaultResumeContinueMessage, Ir as waitForReadySignal, Jn as clearAgentPausedSync, Kn as __testInternals, Kt as buildAgentLaunchConfig, Ln as buildResumeContinueMessage, Lr as getAgentRuntimeState, Mr as isQualifiedAgentId, Mt as deliverAgentMessage, Nr as normalizeAgentId, Nt as deliverAgentPermissionDecision, On as determineModel, Pr as resolveAgentTargetSync, Pt as deliverInitialPromptWithRetry, Rn as decideChannelsForWorkAgent, Rr as getAgentRuntimeStateSync, Rt as setAgentDeliveryMethod, S as contextWindowForModel, Sr as writeAgentStateJsonSync, T as shouldReplayCompactAtTierRunBoundary, U as buildCompactRecoverySeed, Un as writeChannelsBridgeMcpConfig, V as recoverAgent, Wn as GOVERNOR_SLOT_PAUSE_REASON_PREFIX, X as messageAgent, Xn as clearAgentTroubledSync, Xt as transitionIssueToInProgress, Yn as clearAgentTroubled, Yt as retrieveSpawnTimeMemoryContext, Zn as clearYieldForResumeSync, Zt as transitionIssueToInReview, _n as waitForPromptReady, _r as saveAgentStateSync, a as listRunningAgentsSync, an as OHMYPI_AGENT_READY_TIMEOUT_SECONDS, ar as isAgentPaused, b as init_agents, br as setAgentYieldedSync, cn as getAgentRuntimeBaseCommand, dn as getProviderAuthMode, dr as markAgentTroubled, dt as spawnRun, et as appendActivity, fn as getRoleRuntimeBaseCommand, fr as recordAgentFailure, gr as saveAgentState, hn as roleAgentDefinitionPath, hr as resetAgentFailureCount, i as listRunningAgents, it as getSessionId, jn as getProviderTmuxFlags, jr as clearReadySignal, kn as getProviderEnvForModel, lr as markAgentRunningState, mn as injectPiConversationMemory, mt as stopAgentSync, nr as getAgentStateFilePath, nt as getLatestSessionId, o as warnOnBareNumericIssueIds, on as describeOhmypiSpawnFailure, or as isAgentTroubled, ot as saveSessionId, pr as recordAgentFailureSync, pt as stopAgent, qn as clearAgentPaused, r as listAgentStates, rr as getAgentStateSync, rt as getLatestSessionIdSync, sr as isRole, t as dropLegacyAgentStatesMissingRoleAsync, tr as getAgentState, tt as getActivity, ur as markAgentStoppedState, ut as spawnAgent, vr as setAgentPaused, w as replayStandingAgent, x as compactAtTierRunBoundary, xr as wipeAgentStateDirs, yr as setAgentPausedSync, z as autoRecoverAgents, zn as decideSupervisorForWorkAgent } from "./queries-DCX27GRr.js";
2
2
  init_agents();
3
3
  export { GOVERNOR_SLOT_PAUSE_REASON_PREFIX, OHMYPI_AGENT_READY_TIMEOUT_SECONDS, SESSION_EXITED_BEFORE_KICKOFF, __testInternals, appendActivity, assertWorkspaceStackHealthyForSpawn, autoRecoverAgents, buildAgentLaunchConfig, buildCavemanExports, buildCompactRecoverySeed, buildDefaultResumeContinueMessage, buildResumeContinueMessage, buildSpawnEnvForModel, clearAgentPaused, clearAgentPausedSync, clearAgentTroubled, clearAgentTroubledSync, clearReadySignal, clearYieldForResumeSync, compactAtTierRunBoundary, contextWindowForModel, decideChannelsForWorkAgent, decideSupervisorForWorkAgent, deliverAgentMessage, deliverAgentPermissionDecision, deliverInitialPromptWithRetry, deliverResumeMessageWithTranscriptConfirmation, describeOhmypiSpawnFailure, detectCrashedAgents, determineModel, dismissDevChannelsDialog, dropLegacyAgentStatesMissingRoleAsync, getActivity, getAgentDir, getAgentRuntimeBaseCommand, getAgentRuntimeState, getAgentRuntimeStateSync, getAgentState, getAgentStateFilePath, getAgentStateSync, getLatestSessionId, getLatestSessionIdSync, getProviderAuthMode, getProviderEnvForModel, getProviderExportsForModel, getProviderTmuxFlags, getRoleRuntimeBaseCommand, getSessionId, injectPiConversationMemory, isAgentPaused, isAgentTroubled, isQualifiedAgentId, isRole, listAgentStates, listRunningAgents, listRunningAgentsSync, markAgentRunningState, markAgentStoppedState, markAgentTroubled, messageAgent, normalizeAgentId, recordAgentFailure, recordAgentFailureSync, recoverAgent, replayCrashedStandingAgent, replayStandingAgent, resetAgentFailureCount, resolveAgentTargetSync, restartAgent, resumeAgent, retrieveSpawnTimeMemoryContext, roleAgentDefinitionPath, saveAgentRuntimeState, saveAgentState, saveAgentStateSync, saveSessionId, setAgentDeliveryMethod, setAgentPaused, setAgentPausedSync, setAgentYieldedSync, shouldReplayCompactAtTierRunBoundary, spawnAgent, spawnRun, stopAgent, stopAgentSync, transitionIssueToInProgress, transitionIssueToInReview, waitForAgentIdle, waitForPromptReady, waitForReadySignal, warnOnBareNumericIssueIds, wipeAgentStateDirs, writeAgentStateJsonSync, writeChannelsBridgeMcpConfig };
@@ -0,0 +1,2 @@
1
+ import { i as findWorkspacePath } from "./archive-planning-Binfb99i.js";
2
+ export { findWorkspacePath };
@@ -1,7 +1,7 @@
1
- import { Jr as PROJECT_PRDS_COMPLETED_SUBDIR, Kr as PROJECT_DOCS_SUBDIR, Lr as ARCHIVES_DIR, Xr as PROJECT_PRDS_SUBDIR, Yr as PROJECT_PRDS_PLANNED_SUBDIR, ci as init_paths, qr as PROJECT_PRDS_ACTIVE_SUBDIR } from "./config-yaml-CmOPzmBb.js";
2
- import { a as PAN_DIRNAME, c as PAN_SESSIONS_FILENAME, i as PAN_CONTINUE_FILENAME, n as PAN_CONTEXT_FILENAME, s as PAN_FEEDBACK_DIRNAME, u as PAN_SPEC_FILENAME } from "./types-hraoaQIp.js";
3
- import { a as getDraftPath, o as getIssueDraftPath, t as init_pan_dir } from "./pan-dir-ubraCiUg.js";
4
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-q67TYYg5.js";
1
+ import { Jr as PROJECT_PRDS_COMPLETED_SUBDIR, Kr as PROJECT_DOCS_SUBDIR, Lr as ARCHIVES_DIR, Xr as PROJECT_PRDS_SUBDIR, Yr as PROJECT_PRDS_PLANNED_SUBDIR, li as init_paths, qr as PROJECT_PRDS_ACTIVE_SUBDIR } from "./config-yaml-CxdwhAIA.js";
2
+ import { a as PAN_DIRNAME, c as PAN_SESSIONS_FILENAME, i as PAN_CONTINUE_FILENAME, n as PAN_CONTEXT_FILENAME, s as PAN_FEEDBACK_DIRNAME, u as PAN_SPEC_FILENAME } from "./types-D2ETIB8T.js";
3
+ import { a as getDraftPath, o as getIssueDraftPath, t as init_pan_dir } from "./pan-dir-DAOb1V2-.js";
4
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-Dh6RI5Vj.js";
5
5
  import { Effect } from "effect";
6
6
  import { existsSync, readdirSync } from "fs";
7
7
  import { dirname, join } from "path";
@@ -190,10 +190,14 @@ async function movePrdImpl(ctx, opts) {
190
190
  await cp(resolvedSidecarSource, sidecarDest);
191
191
  } catch {}
192
192
  }
193
- await execAsync(`git commit -m "Move ${ctx.issueId} PRD to completed"`, { cwd: ctx.projectPath });
193
+ await execAsync(`git commit -m "chore: move ${ctx.issueId} PRD to completed"`, { cwd: ctx.projectPath });
194
194
  if (pushToRemote) await execAsync("git push", { cwd: ctx.projectPath });
195
195
  return stepOk(step, [`Moved ${formatLabel} from active/ to completed/ via git mv${resolvedSidecarSource ? " (with xBRIEF sidecar)" : ""}`]);
196
196
  } catch {
197
+ if (!existsSync(source.path)) {
198
+ if (existsSync(dest)) return stepFailed(step, "PRD moved to completed/ but the follow-up git commit failed; the rename is staged — commit it and re-run close-out");
199
+ return stepFailed(step, `PRD source ${source.path} is missing — nothing to preserve`);
200
+ }
197
201
  try {
198
202
  await cp(source.path, dest, { recursive: true });
199
203
  if (!existsSync(dest)) return stepFailed(step, "PRD copy appeared to succeed but destination not found");
@@ -282,4 +286,4 @@ function archivePlanning(ctx, opts = {}) {
282
286
  //#endregion
283
287
  export { inferBranchFromWorkspace as a, findWorkspacePath as i, archiveWorkspaceArtifacts as n, movePrd as o, findAllWorkspacePaths as r, findPrdAnywhereSync as s, archivePlanning as t };
284
288
 
285
- //# sourceMappingURL=archive-planning-C0lAbNB_.js.map
289
+ //# sourceMappingURL=archive-planning-Binfb99i.js.map
@@ -1,4 +1,4 @@
1
- import { ci as init_paths, si as getOverdeckHome } from "./config-yaml-CmOPzmBb.js";
1
+ import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
2
2
  import { n as openDatabase, t as init_driver } from "./driver-CKVGi51s.js";
3
3
  import { dirname, join } from "node:path";
4
4
  import { mkdirSync } from "node:fs";
@@ -208,4 +208,4 @@ function unshareArtifactBySlugJob(slug) {
208
208
  //#endregion
209
209
  export { getArtifactBySlugJob, listArtifactsForWorkspaceOrIssueJob, unshareArtifactBySlugJob };
210
210
 
211
- //# sourceMappingURL=artifact-index-jobs-ug6ZxIP5.js.map
211
+ //# sourceMappingURL=artifact-index-jobs-Jn7BGOtV.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Qr as SYNC_SOURCES, ci as init_paths, si as getOverdeckHome } from "./config-yaml-CmOPzmBb.js";
2
+ import { Qr as SYNC_SOURCES, ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
3
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "fs";
4
4
  import { join } from "path";
5
5
  //#region ../../lib/context-layers/layers.ts
@@ -336,4 +336,4 @@ var init_assemble = __esmMin((() => {
336
336
  //#endregion
337
337
  export { projectContextDir as A, ensureProjectLayer as C, legacyProjectContextFile as D, init_layers as E, workspaceContextDir as F, workspaceContextFile as I, readLayerContent as M, resolveProjectContextFile as N, legacyWorkspaceContextFile as O, resolveWorkspaceContextFile as P, codexGlobalContextFile as S, globalContextFile as T, KNOWN_HARNESS_MARKERS as _, REGION_BEGIN as a, validateTemplate as b, init_render as c, userContentOutsideRegion as d, init_rules as f, HARNESS_MARKERS as g, renderBundledRules as h, workspaceContextWithoutProjectLayer as i, projectContextFile as j, piGlobalContextFile as k, renderGlobalLayer as l, readBundledRules as m, PROJECT_LAYER_START as n, REGION_END as o, parseRule as p, init_assemble as r, hasManagedRegion as s, PROJECT_LAYER_END as t, renderProjectLayer as u, init_harness as v, globalContextDir as w, PROJECT_STARTER as x, renderForHarness as y };
338
338
 
339
- //# sourceMappingURL=assemble-DnffNpOo.js.map
339
+ //# sourceMappingURL=assemble-DsqK9OAq.js.map