@overdeck/desktop 0.45.12 → 0.45.15

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 (355) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +33 -0
  2. package/package.json +7 -2
  3. package/server/{acceptance-criteria-1LHgD9vg.js → acceptance-criteria-DHZk2ceV.js} +2 -2
  4. package/server/{advancing-selfheal-BqsLWqEM.js → advancing-selfheal-CSuZ31bB.js} +5 -5
  5. package/server/{agent-gc-CUb52n7s.js → agent-gc-D_DxfBHR.js} +3 -3
  6. package/server/{agent-state-D-moNwhA.js → agent-state-EP2QFV9n.js} +1 -1
  7. package/server/{agent-state-service-BzESvLOf.js → agent-state-service-BZkvgQf4.js} +5 -5
  8. package/server/{agent-state-service-BaZH7sXJ.js → agent-state-service-C_2ZAQRP.js} +1 -1
  9. package/server/{agents-B5LfpLPv.js → agents-CsOzAmRg.js} +145 -78
  10. package/server/{agents-C4kZ8a2r.js → agents-DCvyTXNU.js} +1 -1
  11. package/server/{archive-planning-BbZe-8IK.js → archive-planning-CTILQRnV.js} +1 -1
  12. package/server/{archive-planning-oX1pj6nY.js → archive-planning-DkivCk1A.js} +4 -4
  13. package/server/{artifact-index-jobs-DGr6bxev.js → artifact-index-jobs-CmsvQ1ey.js} +2 -2
  14. package/server/auto-commit-QAfsu3Sb.js +3 -0
  15. package/server/{backlog-auto-trigger-BlJHikOm.js → backlog-auto-trigger-ueRaT8Dy.js} +2 -2
  16. package/server/{bd-process-lock-i3CYMS-B.js → bd-process-lock-D3S4T4o-.js} +32 -11
  17. package/server/{beads-DD7fYCl5.js → beads-BGGxrkZ5.js} +96 -196
  18. package/server/{beads-BNU-fb48.js → beads-CYsLiyIM.js} +1 -1
  19. package/server/{beads-query-e6oku4P5.js → beads-query-B1DlJVp9.js} +24 -99
  20. package/server/beads-restore-CyygSmmn.js +23 -0
  21. package/server/{behavior-CPf0pbOt.js → behavior-Cpj03N4v.js} +3 -3
  22. package/server/{briefing-freshness-B2FdLwIv.js → briefing-freshness-Kh5V8RTh.js} +4 -4
  23. package/server/{checkpoint-manager-eFgaMMu4.js → checkpoint-manager-CAFos8e1.js} +1 -1
  24. package/server/{checkpoint-manager-JryW6MpM.js → checkpoint-manager-fu9oVsR-.js} +2 -2
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-qvOqvMuC.js → checkpoints-1BqOlS4q.js} +2 -2
  27. package/server/{checkpoints-BK17oicz.js → checkpoints-DvhGi8P_.js} +1 -1
  28. package/server/claude-hooks-provision-s_wdpeVj.js +360 -0
  29. package/server/{claude-permissions-B6bWGh9d.js → claude-permissions-CaWqysff.js} +2 -2
  30. package/server/{claude-settings-overlay-BPdhTPjo.js → claude-settings-overlay-BbA4FbVI.js} +1 -1
  31. package/server/{claude-settings-overlay-CRyyKKXQ.js → claude-settings-overlay-CcTf0xzG.js} +2 -2
  32. package/server/{cli-B75AieAM.js → cli-BwCvCUBK.js} +9 -9
  33. package/server/cli-ClIQwgMI.js +3 -0
  34. package/server/{cliproxy-CCzwuSNe.js → cliproxy-BsoNNDAj.js} +2 -2
  35. package/server/{cliproxy-DOQf66G9.js → cliproxy-C2xC-3vH.js} +1 -1
  36. package/server/{close-issue-_X3MXJyG.js → close-issue-BleIwP3f.js} +5 -5
  37. package/server/{closed-issue-reaper-CLR7ClsO.js → closed-issue-reaper-BwUUvjEW.js} +1 -1
  38. package/server/{closed-issue-reaper-BsUfBSjM.js → closed-issue-reaper-mC5pujeb.js} +102 -30
  39. package/server/{codex-CY-QRuU9.js → codex-B7DTpwEw.js} +1 -1
  40. package/server/{codex-B4KEpX5V.js → codex-DW60_5j2.js} +5 -5
  41. package/server/{compact-beads-cZds2MTr.js → compact-beads-CK_hHEnB.js} +1 -1
  42. package/server/{compact-beads-uEDccC76.js → compact-beads-DKL54y6j.js} +15 -8
  43. package/server/{config-DARrpYWA.js → config-BRNQJXhA.js} +1 -1
  44. package/server/{config-8sjaU6jZ.js → config-ZNnMpIlh.js} +2 -2
  45. package/server/{config-yaml-ClpGgrf6.js → config-yaml-Dcz-8uit.js} +29 -3
  46. package/server/{conflict-gate-Ds9_2yjd.js → conflict-gate-DGT8jCLp.js} +1 -1
  47. package/server/{conflict-gate-BtB_o-Vi.js → conflict-gate-DTje2Ll7.js} +3 -3
  48. package/server/{context-layers-r2ywnQYA.js → context-layers-BdUCQ-cl.js} +3 -3
  49. package/server/{context-layers-CRCk1QG7.js → context-layers-ByOWUjUg.js} +2 -2
  50. package/server/{control-settings-D1B3u6HP.js → control-settings-DwkAeooY.js} +4 -4
  51. package/server/{conversation-compaction-D86Zo2Ci.js → conversation-compaction-OTYgd6eg.js} +8 -8
  52. package/server/{conversation-compaction-CZRVk4hg.js → conversation-compaction-WYQZUVDm.js} +1 -1
  53. package/server/{conversation-service-CuTVU8dV.js → conversation-service-BR1OgvxO.js} +5 -5
  54. package/server/{conversation-service-CkL-6MuG.js → conversation-service-C_kNZPLx.js} +1 -1
  55. package/server/{conversations-DfJKBDwB.js → conversations-DG2M8WnT.js} +4 -4
  56. package/server/{conversations-BmWEluPL.js → conversations-izHvSoAR.js} +1 -1
  57. package/server/{cost-DAPYN6iA.js → cost-B2mj17iG.js} +3 -3
  58. package/server/{cost-CCnqa5xK.js → cost-DQ2ajr_m.js} +2 -2
  59. package/server/{cost-sync-BDL10Nwu.js → cost-sync-gTayEuWP.js} +3 -3
  60. package/server/{dag-Dv2r5bVD.js → dag-CqTehWpY.js} +3 -3
  61. package/server/{dangerous-git-ops-Dcw7PbYo.js → dangerous-git-ops-DDWQlPC3.js} +1 -1
  62. package/server/dashboard-db-worker.js +6 -6
  63. package/server/{deacon-DYnZH7kC.js → deacon-BqW9HMew.js} +3 -3
  64. package/server/{deacon-CM0MxbS8.js → deacon-DrKDBeJL.js} +161 -1594
  65. package/server/{deacon-nudge-log-B-naf89q.js → deacon-nudge-log-D1wEK6zF.js} +1 -1
  66. package/server/deacon-swarm-BY5hKNaU.js +2 -0
  67. package/server/{deacon-swarm-BstYoz8Q.js → deacon-swarm-CO_A7xyd.js} +12 -105
  68. package/server/deacon.js +7 -7
  69. package/server/{devcontainer-renderer-CaYOG9JN.js → devcontainer-renderer-BQolp_qZ.js} +3 -3
  70. package/server/{dist-BIC8spJ0.js → dist-Bc32rWJB.js} +1 -1
  71. package/server/dist-DGTwcZhI.js +3 -0
  72. package/server/{docker-DDI1shu3.js → docker-s-esqZ__.js} +67 -28
  73. package/server/{ensure-devcontainer-DCAg3ksz.js → ensure-devcontainer-DA4-jF6R.js} +4 -4
  74. package/server/{ensure-devcontainer-CbSXvN9W.js → ensure-devcontainer-pUVaT0h3.js} +1 -1
  75. package/server/{esm-shims-DiV9jHa_.js → esm-shims-CJHy8CZY.js} +1 -1
  76. package/server/{event-store-DU3HkZlN.js → event-store-CcJAhKCl.js} +1 -1
  77. package/server/{event-store-DCMqyI07.js → event-store-DRte2Rwt.js} +3 -3
  78. package/server/{events-BfiosVAn.js → events-Bej1w_k8.js} +3 -3
  79. package/server/{events-DLRxpSuV.js → events-CtsLScn8.js} +1 -1
  80. package/server/export-Dx_qJ3h8.js +87 -0
  81. package/server/{factory-BMtWV9iv.js → factory-FN727tWr.js} +4 -4
  82. package/server/{feature-registry-population-DA7bO6Zn.js → feature-registry-population-ie-yBcQC.js} +4 -4
  83. package/server/{feature-registry-storage-nAY1fbBt.js → feature-registry-storage-CkZTFSsn.js} +2 -2
  84. package/server/{features-DMu7eGmU.js → features-Dtm9ABuz.js} +2 -2
  85. package/server/{feedback-target-DHqcw3cN.js → feedback-target-BYtpyt1i.js} +6 -6
  86. package/server/{feedback-target-B2SEai8-.js → feedback-target-DVJQDiE4.js} +1 -1
  87. package/server/{feedback-writer-DMBdS_jL.js → feedback-writer-DOUhyIW2.js} +1 -1
  88. package/server/{feedback-writer-qvm7UON7.js → feedback-writer-fdE1BzeL.js} +4 -4
  89. package/server/{flywheel-k4FPtCQ_.js → flywheel-Bi82iiNl.js} +1 -1
  90. package/server/{flywheel-Dfpx4bIV.js → flywheel-Bv3wv2S6.js} +23 -15
  91. package/server/{flywheel-D2LdPSic.js → flywheel-CUErLAyN.js} +13 -13
  92. package/server/{flywheel-merge-order-CB4lbXeJ.js → flywheel-merge-order-BaEN3iyN.js} +7 -7
  93. package/server/{flywheel-merge-order-CttTazRY.js → flywheel-merge-order-DXjeBnJ1.js} +1 -1
  94. package/server/{forge-CoPFXFyl.js → forge-ButEdJ31.js} +2 -2
  95. package/server/forge-XlDgPQWs.js +2 -0
  96. package/server/{from-B0YoJl9-.js → from-CbtTxftl.js} +1 -1
  97. package/server/{fts-db-DAHW1yA_.js → fts-db-CBgBLZcL.js} +2 -2
  98. package/server/{fts-operations-DDXDBi0d.js → fts-operations-CI9Xuo_1.js} +2 -2
  99. package/server/{git-utils-DbfC0zls.js → git-utils-BCLRWQ-y.js} +1 -1
  100. package/server/{git-utils-B90Zjzfl.js → git-utils-ClfpP47N.js} +2 -2
  101. package/server/{github-app-C7lftMNj.js → github-app-DRD2woO0.js} +1 -1
  102. package/server/{github-app-BecAnXRX.js → github-app-DscZ0_B6.js} +2 -2
  103. package/server/{github-client-D21rCIXk.js → github-client-DpiZnxGH.js} +2 -2
  104. package/server/{github-client-BwtKZtM0.js → github-client-iFRw8f7e.js} +1 -1
  105. package/server/{github-pr-lookup-CzVWuysl.js → github-pr-lookup-D-EBexxC.js} +2 -2
  106. package/server/{harness-resolve-SkRJm4a7.js → harness-resolve-iMjyNUJ2.js} +3 -3
  107. package/server/{health-events-DA_JLpgZ.js → health-events-B_WsQyYm.js} +1 -1
  108. package/server/{health-events-BT0aAfeA.js → health-events-CRdxDFN2.js} +2 -2
  109. package/server/{hooks-BQxRXtRb.js → hooks-C1ScyVxP.js} +1 -1
  110. package/server/{hooks-DxEn2BoY.js → hooks-C9b7Vqpw.js} +2 -2
  111. package/server/hume-K1pi8jC4.js +3 -0
  112. package/server/{hume-DkVOs1Qi.js → hume-TQ5pvOZ_.js} +2 -2
  113. package/server/{idle-stack-reaper-DGy7tvC9.js → idle-stack-reaper-B1kG7B_X.js} +2 -2
  114. package/server/{idle-stack-reaper-C7fJL8jH.js → idle-stack-reaper-iFVOAoJy.js} +1 -1
  115. package/server/{infra-DE3C4PMr.js → infra-bpq1MHKU.js} +50 -3
  116. package/server/{injection-Dt22tGvS.js → injection-BLWfwTVZ.js} +1 -1
  117. package/server/{injection-Cc4Qt8LZ.js → injection-DJqWld1v.js} +7 -7
  118. package/server/inspect-agent-477VxQim.js +2 -0
  119. package/server/{inspect-agent-DOaCDkCF.js → inspect-agent-DytCsltn.js} +9 -9
  120. package/server/{internal-token-nobT6FhA.js → internal-token-CCaWaTwE.js} +1 -1
  121. package/server/{internal-token-B_1YLWLI.js → internal-token-CjlhdufS.js} +2 -2
  122. package/server/{io-A7ZuOBkz.js → io-BiQ2Cs3k.js} +2 -2
  123. package/server/{issue-closed-Da3DeomA.js → issue-closed-FApNiOOs.js} +4 -4
  124. package/server/{issue-lifecycle-Bd9XBJAQ.js → issue-lifecycle-BkFWNjlD.js} +1 -1
  125. package/server/{issue-lifecycle-543pQX9D.js → issue-lifecycle-C-K53ASY.js} +21 -21
  126. package/server/{issue-service-singleton-Brc3t0SV.js → issue-service-singleton-CuHGpJJP.js} +8 -8
  127. package/server/{issue-service-singleton-BC2JLZi7.js → issue-service-singleton-bG1WdSdQ.js} +1 -1
  128. package/server/{issues-D3kt9UWE.js → issues-CwQMphDH.js} +2 -2
  129. package/server/jsonl-parser-dNIjHgym.js +245 -0
  130. package/server/{label-cleanup-w9X_T3AQ.js → label-cleanup-DYvAZknd.js} +3 -3
  131. package/server/{layers-Cwe1J-9o.js → layers-CD6FysRU.js} +2 -2
  132. package/server/{lifecycle-f1GbDK33.js → lifecycle-C_73gi-C.js} +7 -7
  133. package/server/{lifecycle-io-D56q8zlO.js → lifecycle-io-C_Wu0_i-.js} +1 -1
  134. package/server/{lifecycle-io-Bqvj0m3i.js → lifecycle-io-CeYxP3cE.js} +4 -4
  135. package/server/{linear-client-Bh4T4S-c.js → linear-client-4qoKnuQu.js} +1 -1
  136. package/server/{linear-client-CfJMTAYd.js → linear-client-EtVyblVz.js} +2 -2
  137. package/server/memory-fts-worker.js +1 -1
  138. package/server/{merge-ZrXFM3jv.js → merge-7rqkTUm2.js} +3 -3
  139. package/server/merge-agent-36wfYm2u.js +3 -0
  140. package/server/{merge-agent-CHHs5S_0.js → merge-agent-4Zhlgvqp.js} +62 -27
  141. package/server/{merge-batch-BwhGdlh4.js → merge-batch-itfnwdsT.js} +1 -1
  142. package/server/{merge-blockers-BMhDpMl_.js → merge-blockers-Bto_Oe_o.js} +2 -2
  143. package/server/{merge-DRMPa8CQ.js → merge-brm721Es.js} +1 -1
  144. package/server/merge-ops-PzqsW69V.js +2 -0
  145. package/server/{merge-rebase-R7MfqpiE.js → merge-rebase-Czfqfe4q.js} +2 -2
  146. package/server/{merge-set-B3Breacq.js → merge-set-BIkGQL9j.js} +9 -5
  147. package/server/{merge-set-D-iXNP0I.js → merge-set-G1RHcu3D.js} +1 -1
  148. package/server/{merge-sync-DHWbGtjR.js → merge-sync-B43Dybea.js} +2 -2
  149. package/server/{merge-sync-bOOtfeXR.js → merge-sync-DIrmlZUr.js} +1 -1
  150. package/server/{merge-train-98ptZrPT.js → merge-train-DGqVuNZV.js} +3 -3
  151. package/server/{merge-train-deps-B5FWJTE2.js → merge-train-deps-q15XLnAS.js} +4 -4
  152. package/server/{merge-verification-BGiuiXAK.js → merge-verification-Cqfxx6bE.js} +4 -4
  153. package/server/{multipart-parser-D7mzNNDm.js → multipart-parser-CiPxxfUH.js} +2 -2
  154. package/server/node_modules/.package-lock.json +1 -1
  155. package/server/{orphan-proposed-reconciler-BSGCNJ6X.js → orphan-proposed-reconciler-BWWHn4Lr.js} +15 -39
  156. package/server/{orphan-proposed-reconciler-CSuxivr9.js → orphan-proposed-reconciler-DAD9FJtQ.js} +1 -1
  157. package/server/package-lock.json +2 -2
  158. package/server/package.json +1 -1
  159. package/server/{pan-dir-DoPtdHrp.js → pan-dir-Bj7Hy8iu.js} +3 -3
  160. package/server/{paths-CVDLPxXp.js → paths-C9DkhIOT.js} +2 -2
  161. package/server/{pickup-KLRUhThD.js → pickup-CKRuGDsB.js} +1 -1
  162. package/server/{pipeline-notifier-BtYHbBPl.js → pipeline-notifier-BkKbQ8ji.js} +1 -1
  163. package/server/{pipeline-notifier-WD2dnOsR.js → pipeline-notifier-CAurUste.js} +2 -2
  164. package/server/project-pipelines-BRWaGmI4.js +162 -0
  165. package/server/projects-KJ94e50I.js +3 -0
  166. package/server/{prompts-Cg7e9FPb.js → prompts-DfI5qbTW.js} +2 -2
  167. package/server/{providers-fLduChnX.js → providers-CWDXoaMA.js} +7 -7
  168. package/server/providers-D-5txBRc.js +3 -0
  169. package/server/public/assets/{chunk-BO2N2NFS-aNlsGDCu.js → chunk-BO2N2NFS-ClukPsZQ.js} +4 -4
  170. package/server/public/assets/{diagram-OG6HWLK6-CnjkrvT8.js → diagram-OG6HWLK6-Avtvq2qI.js} +1 -1
  171. package/server/public/assets/{dist-Bg3Sbsx4.js → dist-BEHQuasD.js} +3 -3
  172. package/server/public/assets/{dist-CGKBCieA.js → dist-BvmY-qb1.js} +1 -1
  173. package/server/public/assets/{ganttDiagram-6RSMTGT7-C8LLKj23.js → ganttDiagram-6RSMTGT7-7KhCd0fH.js} +1 -1
  174. package/server/public/assets/{highlighted-body-OFNGDK62-BSDEUvhW.js → highlighted-body-OFNGDK62-iQoBMTf0.js} +1 -1
  175. package/server/public/assets/index-DUFDmvmH.css +1 -0
  176. package/server/public/assets/index-DnTZ2QeN.js +796 -0
  177. package/server/public/assets/{linear-DEbYZoxg.js → linear-CiJHW9g5.js} +1 -1
  178. package/server/public/assets/mermaid-GHXKKRXX-DZJOwgBG.js +1 -0
  179. package/server/public/assets/{pieDiagram-4H26LBE5-BtZL5pXE.js → pieDiagram-4H26LBE5-BOhmvUhW.js} +1 -1
  180. package/server/public/assets/{prod-DYVvIyuh.js → prod-DmLBBqat.js} +4 -4
  181. package/server/public/assets/{quadrantDiagram-W4KKPZXB-a7vS8Jc8.js → quadrantDiagram-W4KKPZXB-Cjku660G.js} +1 -1
  182. package/server/public/assets/{sankeyDiagram-5OEKKPKP-Ckbq2SWH.js → sankeyDiagram-5OEKKPKP-D52w5oPh.js} +1 -1
  183. package/server/public/assets/{xychartDiagram-2RQKCTM6-DJyeNa99.js → xychartDiagram-2RQKCTM6-BTO07_Iv.js} +1 -1
  184. package/server/public/index.html +2 -2
  185. package/server/{pull-requests-1WXmTBlo.js → pull-requests-Bmre-Xlz.js} +3 -3
  186. package/server/{pull-requests-D2SjJIwY.js → pull-requests-CKZPWhjD.js} +1 -1
  187. package/server/{rally-8aQlLLVj.js → rally-BBd9tQ__.js} +3 -3
  188. package/server/rally-Dc2Wnxw2.js +3 -0
  189. package/server/{rally-api-BtvwdX6d.js → rally-api-DDc85HIz.js} +1 -1
  190. package/server/{rally-api-H5I2CBO0.js → rally-api-DxZFObI_.js} +2 -2
  191. package/server/{rally-client-Bt-qHiOh.js → rally-client-BADHn0m_.js} +1 -1
  192. package/server/{rally-client-33CYZYYu.js → rally-client-DvvLiAQP.js} +4 -4
  193. package/server/{reap-terminal-sessions-CAmURC2h.js → reap-terminal-sessions-D6JDJsqF.js} +1 -1
  194. package/server/{reap-terminal-sessions-BwJb2DLJ.js → reap-terminal-sessions-D_xvy-Mk.js} +1 -1
  195. package/server/{rebuild-stack-KHkkrGjx.js → rebuild-stack-D19i080j.js} +6 -6
  196. package/server/{rebuild-stack-CXSgAGPR.js → rebuild-stack-GOsWqXi3.js} +1 -1
  197. package/server/{reconstruct-cache-D_Ml65_6.js → reconstruct-cache-lQrG4xGg.js} +6 -6
  198. package/server/record-pyB6VA32.js +3 -0
  199. package/server/recovery-trip-Dfh1tNHn.js +98 -0
  200. package/server/release-engine-DxcMWRuK.js +306 -0
  201. package/server/release-set-BYsgX7o6.js +125 -0
  202. package/server/{remote-CGuognN3.js → remote-8W2Yhygw.js} +3 -3
  203. package/server/{remote-D0Old0Cv.js → remote-DmeL21dF.js} +3 -3
  204. package/server/{remote-agents-DfhMq6kQ.js → remote-agents-BfQBE6MN.js} +5 -5
  205. package/server/{remote-agents-UHoi4oGr.js → remote-agents-DlvbzO7m.js} +1 -1
  206. package/server/{remote-completion-RZYePR_0.js → remote-completion-BgkiSQmx.js} +12 -12
  207. package/server/resolver-dTpSSzaH.js +158 -0
  208. package/server/resume-DhcIqsTm.js +3 -0
  209. package/server/{review-agent-sZBCpEVv.js → review-agent-D025Wt7w.js} +22 -22
  210. package/server/{review-agent-uwVftH98.js → review-agent-Rub0OpZc.js} +1 -1
  211. package/server/{review-artifacts-C7a45b1_.js → review-artifacts-CX951jTU.js} +6 -6
  212. package/server/{review-context-CErbQpKL.js → review-context-DGGGR_w5.js} +7 -7
  213. package/server/{review-monitor-DHD9m_kh.js → review-monitor-0_qqMcnS.js} +2 -2
  214. package/server/{review-status-gPndPUBc.js → review-status-4qqLkRMu.js} +24 -17
  215. package/server/{review-status-JhQ3qlDS.js → review-status-Br6lAFGO.js} +1 -1
  216. package/server/{review-status-enrichment-qWvWckYN.js → review-status-enrichment-Cr8m3uVL.js} +3 -3
  217. package/server/{review-status-sync-B_GrEke8.js → review-status-sync-D3KUhsdA.js} +1 -1
  218. package/server/{review-status-sync-D3A9KX95.js → review-status-sync-OC-l1lNt.js} +9 -5
  219. package/server/{review-verdict-feedback-4WZ5ZdbC.js → review-verdict-feedback-DrWMuRaj.js} +6 -6
  220. package/server/{review-verdict-feedback-Zo0r_z4m.js → review-verdict-feedback-YOzmsq9G.js} +1 -1
  221. package/server/{rollup-BrUIKMv_.js → rollup-CnxbwaLH.js} +8 -8
  222. package/server/{rollup-Bmhn80tB.js → rollup-DmazRY0j.js} +1 -1
  223. package/server/{scanner-BIGumel_.js → scanner-DE1MqAaF.js} +7 -7
  224. package/server/{sequence-io-DA0akEQN.js → sequence-io-C0uoqfGx.js} +4 -4
  225. package/server/{sequencer-agent-DeflKafB.js → sequencer-agent-i-b2u4SJ.js} +10 -6
  226. package/server/server.js +1115 -297
  227. package/server/{service-V0sUK-OR.js → service-D0_gh2tl.js} +1668 -1408
  228. package/server/{session-fork-Yx3UcAQf.js → session-fork-DZ12vipL.js} +2 -2
  229. package/server/{settings-CFEeQRj2.js → settings-ByqjPtFO.js} +2 -2
  230. package/server/{settings-CxVate0h.js → settings-DCC4BAqj.js} +3 -3
  231. package/server/settings-yydgaqhv.js +2 -0
  232. package/server/{shadow-engineering-BRxnVSDk.js → shadow-engineering-BhnmtW5m.js} +2 -2
  233. package/server/{shadow-state-1aS8FijU.js → shadow-state-ByXZehsy.js} +1 -1
  234. package/server/{shadow-state-BiMwdyl1.js → shadow-state-CKm8xWX9.js} +2 -2
  235. package/server/{ship-log-CMWH3H5-.js → ship-log-DE_0Cv_i.js} +1 -1
  236. package/server/{smart-compaction-Bw1K_Sbl.js → smart-compaction-D5Zen3AA.js} +7 -7
  237. package/server/{smart-compaction-xblMyVpT.js → smart-compaction-h4_ca6Uk.js} +1 -1
  238. package/server/{spawn-planning-session-CzDFSKAQ.js → spawn-planning-session-Bgi7Ub02.js} +1 -1
  239. package/server/{spawn-planning-session-DxLxcM7m.js → spawn-planning-session-Dueit4WX.js} +15 -15
  240. package/server/{specialist-completion-BiEXUHfD.js → specialist-completion-BZ8M-WZ0.js} +1 -1
  241. package/server/{specialist-context-BfkTA81h.js → specialist-context-BMq83C58.js} +5 -5
  242. package/server/{specialist-handoff-logger-BiKuLtNm.js → specialist-handoff-logger-BxX1YefH.js} +2 -2
  243. package/server/{specialist-logs-CFJjGsLC.js → specialist-logs-BWZYcJ6P.js} +3 -3
  244. package/server/{specialists-DdvpFNt1.js → specialists-8ZAguXef.js} +1 -1
  245. package/server/{specialists-B4byf18k.js → specialists-BudKrjOu.js} +76 -76
  246. package/server/{specialists-DjHbwQ_p.js → specialists-DrPrC9Y9.js} +20 -256
  247. package/server/{specialists-BLIreoE7.js → specialists-ZkW4Mb7U.js} +1 -1
  248. package/server/specs-DwoAEGrW.js +3 -0
  249. package/server/{src-fgbU-jJ-.js → src-DHn4Rd2F.js} +25 -3
  250. package/server/{src-mK_M_ZIj.js → src-DNUUqkec.js} +6 -6
  251. package/server/{src-CALBEUMX.js → src-Dv6L03vW.js} +3 -3
  252. package/server/{stack-health-BFM8YlHw.js → stack-health-Dclm7_tu.js} +1 -1
  253. package/server/{stack-health-Qd7rPiVe.js → stack-health-DxsTx7II.js} +2 -2
  254. package/server/{state-home-C2Bicw9N.js → state-home-CRowbXqU.js} +6 -6
  255. package/server/stuck-remediation-CFWUP8_I.js +1491 -0
  256. package/server/stuck-remediation-CLHd-lrF.js +2 -0
  257. package/server/{summary-fork-EWWBvzgE.js → summary-fork-CKc01Our.js} +2 -2
  258. package/server/{summary-fork-DezPkJSm.js → summary-fork-CtCwBJ2Z.js} +8 -8
  259. package/server/{supervisor-D5GC5jUM.js → supervisor-BA5D72Qa.js} +2 -2
  260. package/server/supervisor-DHjumXlL.js +2 -0
  261. package/server/{swarm-readiness-Cf9mommA.js → swarm-readiness-CL5sM9B1.js} +3 -3
  262. package/server/{system-prerequisites-BsI9hxh9.js → system-prerequisites-DmFSXIE5.js} +13 -1
  263. package/server/{teardown-workspace-CWz1pbEK.js → teardown-workspace-DWmFJzTw.js} +37 -68
  264. package/server/{test-agent-queue-TiVXe3ZT.js → test-agent-queue-DjsQoV5X.js} +6 -6
  265. package/server/{test-verdict-CCDd25uN.js → test-verdict-BSqsQp3G.js} +1 -1
  266. package/server/{test-verdict-Bm4uv_AA.js → test-verdict-D1AmZ2c0.js} +1 -1
  267. package/server/{tldr-daemon-C_1frSDj.js → tldr-daemon-C-MGomL8.js} +2 -2
  268. package/server/{tldr-daemon-Big5IZ_M.js → tldr-daemon-DD9rI5gA.js} +1 -1
  269. package/server/{tmux-D57f-XNv.js → tmux-C_d-lSIq.js} +2 -2
  270. package/server/{tmux-DClqWwb8.js → tmux-x291Gjjb.js} +1 -1
  271. package/server/{token-_qujO3JZ.js → token-DfBf1bsd.js} +1 -1
  272. package/server/{tracker-config-BmdJU_w6.js → tracker-config-CNODpd11.js} +2 -2
  273. package/server/{tracker-config-B_Ubts1Z.js → tracker-config-DItsdelv.js} +1 -1
  274. package/server/{tracker-utils-Bg-Sevcv.js → tracker-utils-B9ZoVA9b.js} +1 -1
  275. package/server/{tracker-utils-CWFt6jjV.js → tracker-utils-Ch2_5GGf.js} +2 -2
  276. package/server/{traefik-connect-5EP1WS_Z.js → traefik-connect-BF4x_LUQ.js} +1 -1
  277. package/server/{tunnel-hOBNQbmF.js → tunnel-YD80_IHr.js} +1 -1
  278. package/server/{tunnel-UBf2vyAL.js → tunnel-r_5nHAI6.js} +3 -3
  279. package/server/{types-B5u3NxMl.js → types-33JEP4LZ.js} +1 -1
  280. package/server/{uat-train-DGkIkLxu.js → uat-train-DDI00aqD.js} +1 -1
  281. package/server/{uat-train-qNanv5hN.js → uat-train-DjkFWXge.js} +25 -25
  282. package/server/{validation-C4wegCvH.js → validation-DUTiJnyz.js} +4 -4
  283. package/server/{validation-B0QaLIHP.js → validation-ict8hnXk.js} +1 -1
  284. package/server/{verification-runner-DdleMNLq.js → verification-runner-ATaLbpr5.js} +1 -1
  285. package/server/{verification-runner-CntudBes.js → verification-runner-inLgeQux.js} +12 -12
  286. package/server/{vtt-parser-CKc-smWM.js → vtt-parser-QnRfcjiU.js} +1 -1
  287. package/server/{work-agent-prompt-CG5jFV9A.js → work-agent-prompt-fZljjA1_.js} +12 -12
  288. package/server/{workflows-BK2xs_a8.js → workflows-oBnJ7Tm0.js} +14 -14
  289. package/server/workflows-tU7KKxQi.js +2 -0
  290. package/server/{workspace-C9lC5o3E.js → workspace-B2WOW9Hw.js} +1 -1
  291. package/server/{workspace-CLrSIRCx.js → workspace-CNuW2j41.js} +3 -3
  292. package/server/{workspace-config-DA8U97k9.js → workspace-config-CBgMGhWs.js} +1 -1
  293. package/server/{workspace-manager-BJhW2sky.js → workspace-manager-CB-R07R3.js} +12 -12
  294. package/server/{workspace-manager-Cb2a7bg9.js → workspace-manager-DjUAJCSs.js} +1 -1
  295. package/server/{workspace-metadata-QQmo_Z0l.js → workspace-metadata-9Nn5kgRl.js} +2 -2
  296. package/server/{workspace-metadata-CTRnr323.js → workspace-metadata-Fd58uUQG.js} +1 -1
  297. package/server/{workspaces-Ca4zZs12.js → workspaces-BjWXntty.js} +106 -120
  298. package/server/writer-CQMGzEkw.js +3 -0
  299. package/server/writer-fe1-8iGc.js +251 -0
  300. package/sync-sources/hooks/ask-user-question-hook +87 -0
  301. package/sync-sources/hooks/auto-approve-hook +96 -0
  302. package/sync-sources/hooks/codex-notify-hook +62 -0
  303. package/sync-sources/hooks/gh-issue-trailer-hook +4 -0
  304. package/sync-sources/hooks/gh-issue-trailer-hook.d.ts +7 -0
  305. package/sync-sources/hooks/gh-issue-trailer-hook.d.ts.map +1 -0
  306. package/sync-sources/hooks/gh-issue-trailer-hook.js +239 -0
  307. package/sync-sources/hooks/gh-issue-trailer-hook.js.map +1 -0
  308. package/sync-sources/hooks/gh-issue-trailer-hook.ts +296 -0
  309. package/sync-sources/hooks/git-hooks/post-checkout +109 -0
  310. package/sync-sources/hooks/heartbeat-hook +113 -0
  311. package/sync-sources/hooks/notification-hook +70 -0
  312. package/sync-sources/hooks/notify-complete +79 -0
  313. package/sync-sources/hooks/pan-hook-lib.sh +153 -0
  314. package/sync-sources/hooks/permission-event-hook +24 -0
  315. package/sync-sources/hooks/post-compact-hook +25 -0
  316. package/sync-sources/hooks/pre-compact-hook +26 -0
  317. package/sync-sources/hooks/pre-tool-hook +35 -0
  318. package/sync-sources/hooks/record-cost-event.d.ts +1 -0
  319. package/sync-sources/hooks/record-cost-event.js +31859 -0
  320. package/sync-sources/hooks/record-cost-event.js.map +1 -0
  321. package/sync-sources/hooks/record-cost-event.ts +267 -0
  322. package/sync-sources/hooks/rtk-bash-filter +152 -0
  323. package/sync-sources/hooks/session-start-hook +80 -0
  324. package/sync-sources/hooks/specialist-stop-hook +106 -0
  325. package/sync-sources/hooks/statusline.sh +169 -0
  326. package/sync-sources/hooks/stop-hook +217 -0
  327. package/sync-sources/hooks/tldr-post-edit +72 -0
  328. package/sync-sources/hooks/tldr-read-enforcer +340 -0
  329. package/sync-sources/hooks/tmux-send-keys-guard +87 -0
  330. package/sync-sources/hooks/tsdown.config.ts +14 -0
  331. package/sync-sources/hooks/user-prompt-submit-hook +57 -0
  332. package/sync-sources/hooks/work-agent-stop-hook +424 -0
  333. package/server/auto-commit-CGQlb4rV.js +0 -3
  334. package/server/bd-mutex-BItGvLQ8.js +0 -35
  335. package/server/beads-restore-CMbDSB5R.js +0 -60
  336. package/server/cli-Ch_BWJB2.js +0 -3
  337. package/server/deacon-swarm-CSWGRfzr.js +0 -2
  338. package/server/dist-BUplB3Od.js +0 -3
  339. package/server/forge-IgLR0Ist.js +0 -2
  340. package/server/hume-x9voULey.js +0 -3
  341. package/server/inspect-agent-CYoWAeeB.js +0 -2
  342. package/server/merge-agent-CfohxFWM.js +0 -3
  343. package/server/merge-ops-Czke6UAp.js +0 -2
  344. package/server/projects-Bqfwuqet.js +0 -3
  345. package/server/providers-JjK6izqX.js +0 -3
  346. package/server/public/assets/index-CZiADHcL.css +0 -1
  347. package/server/public/assets/index-LQIfhmgI.js +0 -796
  348. package/server/public/assets/mermaid-GHXKKRXX-CZOsRYoT.js +0 -1
  349. package/server/rally-Ba9QoNYc.js +0 -3
  350. package/server/record-De2syxNB.js +0 -3
  351. package/server/resume-CmxF3Kjz.js +0 -3
  352. package/server/settings-DEhYpW0k.js +0 -2
  353. package/server/specs-CVH1kvz3.js +0 -3
  354. package/server/supervisor-DQMK2e3I.js +0 -2
  355. package/server/workflows-pKw9yRSV.js +0 -2
@@ -1,11 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { i as runBdWithRetry, n as init_bd_process_lock, r as readBdProcessLockHolder, t as BdTransientFailure } from "./bd-process-lock-i3CYMS-B.js";
2
+ import { n as init_resolver, t as createBeadsResolver } from "./resolver-dTpSSzaH.js";
3
3
  import { Data, Effect } from "effect";
4
- import { existsSync } from "fs";
5
- import { basename, dirname, join } from "path";
6
- import { readFile } from "node:fs/promises";
7
- import { execFile } from "child_process";
8
- import { promisify } from "util";
4
+ import { basename, dirname } from "path";
9
5
  //#region ../../lib/beads-query.ts
10
6
  function normalizeIssueLabel(issueId) {
11
7
  return issueId.toLowerCase();
@@ -51,106 +47,34 @@ function groupReadyBeadsByIssue(beads, issueLabels) {
51
47
  }
52
48
  return result;
53
49
  }
54
- async function readAllBeadsFromJsonl(workspacePath) {
55
- try {
56
- const jsonlPath = join(workspacePath, ".beads", "issues.jsonl");
57
- if (!existsSync(jsonlPath)) return [];
58
- const raw = await readFile(jsonlPath, "utf-8");
59
- const beads = [];
60
- for (const line of raw.split("\n")) {
61
- if (!line.trim()) continue;
62
- try {
63
- const entry = JSON.parse(line);
64
- beads.push(toBeadEntry(entry, beadLabels(entry)));
65
- } catch {}
66
- }
67
- return beads;
68
- } catch {
69
- return [];
70
- }
71
- }
72
- async function readBeadsFromJsonl(workspacePath, issueId) {
73
- const issueLabel = normalizeIssueLabel(issueId);
74
- return (await readAllBeadsFromJsonl(workspacePath)).filter((bead) => labelMatchesIssue(bead.labels, issueLabel));
75
- }
76
50
  async function queryBeadsForIssuePromise(workspacePath, issueId, retryOptions = {}) {
77
- try {
78
- const { stdout } = await runBdWithRetry(`query beads for ${issueId}`, () => execFileAsync("bd", [
79
- "list",
80
- "--json",
81
- "-l",
82
- issueId.toLowerCase(),
83
- "--status",
84
- "all",
85
- "--limit",
86
- "0"
87
- ], {
88
- encoding: "utf-8",
89
- cwd: workspacePath,
90
- timeout: 1e4
91
- }), {
92
- ...retryOptions,
93
- workspacePath
94
- });
95
- const parsed = JSON.parse(stdout || "[]");
96
- return { beads: Array.isArray(parsed) ? parsed : [] };
97
- } catch (error) {
98
- return {
99
- beads: await readBeadsFromJsonl(workspacePath, issueId),
100
- transientFailure: error instanceof BdTransientFailure ? error : void 0
101
- };
102
- }
51
+ const result = await createBeadsResolver(workspacePath, { retry: retryOptions }).getBeadsForIssue(issueId);
52
+ return result.ok ? { beads: result.value.map((entry) => toBeadEntry(entry, beadLabels(entry))) } : {
53
+ beads: [],
54
+ stale: true,
55
+ reason: result.reason,
56
+ transientFailure: result.transient ? result.error : void 0
57
+ };
103
58
  }
104
59
  async function queryReadyBeadsByIssueLabelsPromise(workspacePath, issueIds, retryOptions = {}) {
105
60
  const issueLabels = Array.from(new Set(issueIds.map(normalizeIssueLabel)));
106
61
  if (issueLabels.length === 0) return { byIssue: {} };
107
- try {
108
- if (await readBdProcessLockHolder({ workspacePath })) return { byIssue: groupReadyBeadsByIssue(await readAllBeadsFromJsonl(workspacePath), issueLabels) };
109
- const { stdout } = await runBdWithRetry(`query ready beads for ${issueLabels.join(",")}`, () => execFileAsync("bd", [
110
- "list",
111
- "--json",
112
- "--status",
113
- "all",
114
- "--limit",
115
- "0"
116
- ], {
117
- encoding: "utf-8",
118
- cwd: workspacePath,
119
- timeout: 1e4
120
- }), {
121
- ...retryOptions,
122
- workspacePath
123
- });
124
- const parsed = JSON.parse(stdout || "[]");
125
- return { byIssue: groupReadyBeadsByIssue(Array.isArray(parsed) ? parsed.map((entry) => toBeadEntry(entry, beadLabels(entry))) : [], issueLabels) };
126
- } catch (error) {
127
- return {
128
- byIssue: groupReadyBeadsByIssue(await readAllBeadsFromJsonl(workspacePath), issueLabels),
129
- transientFailure: error instanceof BdTransientFailure ? error : void 0
130
- };
131
- }
62
+ const result = await createBeadsResolver(workspacePath, { retry: retryOptions }).getAllBeads();
63
+ if (result.ok) return { byIssue: groupReadyBeadsByIssue(result.value.map((entry) => toBeadEntry(entry, beadLabels(entry))), issueLabels) };
64
+ return {
65
+ byIssue: Object.fromEntries(issueLabels.map((label) => [label, []])),
66
+ stale: true,
67
+ reason: result.reason,
68
+ transientFailure: result.transient ? result.error : void 0
69
+ };
132
70
  }
133
71
  async function queryBeadByIdPromise(workspacePath, beadId) {
134
- try {
135
- const { stdout } = await execFileAsync("bd", [
136
- "show",
137
- beadId,
138
- "--json"
139
- ], {
140
- encoding: "utf-8",
141
- cwd: workspacePath,
142
- timeout: 1e4
143
- });
144
- const parsed = JSON.parse(stdout || "[]");
145
- return (Array.isArray(parsed) ? parsed : [parsed])[0] ?? null;
146
- } catch {
147
- return null;
148
- }
72
+ const result = await createBeadsResolver(workspacePath).getBeadById(beadId);
73
+ return result.ok ? result.value : null;
149
74
  }
150
- var execFileAsync, BeadsMissingError, queryBeadsForIssue, queryReadyBeadsByIssueLabels, assertIssueHasBeads, queryBeadById;
75
+ var BeadsMissingError, queryBeadsForIssue, queryReadyBeadsByIssueLabels, assertIssueHasBeads, queryBeadById;
151
76
  var init_beads_query = __esmMin((() => {
152
- init_bd_process_lock();
153
- execFileAsync = promisify(execFile);
77
+ init_resolver();
154
78
  BeadsMissingError = class extends Data.TaggedError("BeadsMissingError") {};
155
79
  queryBeadsForIssue = (workspacePath, issueId, retryOptions = {}) => Effect.promise(() => queryBeadsForIssuePromise(workspacePath, issueId, retryOptions));
156
80
  queryReadyBeadsByIssueLabels = (workspacePath, issueIds, retryOptions = {}) => Effect.promise(() => queryReadyBeadsByIssueLabelsPromise(workspacePath, issueIds, retryOptions));
@@ -159,7 +83,8 @@ var init_beads_query = __esmMin((() => {
159
83
  if (result.beads.length === 0) return yield* Effect.fail(new BeadsMissingError({
160
84
  issueId,
161
85
  workspacePath,
162
- transientFailure: result.transientFailure
86
+ transientFailure: result.transientFailure,
87
+ staleReason: result.reason
163
88
  }));
164
89
  });
165
90
  queryBeadById = (workspacePath, beadId) => Effect.promise(() => queryBeadByIdPromise(workspacePath, beadId));
@@ -167,4 +92,4 @@ var init_beads_query = __esmMin((() => {
167
92
  //#endregion
168
93
  export { queryBeadsForIssue as a, queryBeadById as i, assertIssueHasBeads as n, queryReadyBeadsByIssueLabels as o, init_beads_query as r, resolveBeadsQueryRoot as s, BeadsMissingError as t };
169
94
 
170
- //# sourceMappingURL=beads-query-e6oku4P5.js.map
95
+ //# sourceMappingURL=beads-query-B1DlJVp9.js.map
@@ -0,0 +1,23 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { n as init_export, t as exportBeadsJsonl } from "./export-Dx_qJ3h8.js";
3
+ import { Effect } from "effect";
4
+ //#region ../../lib/beads-restore.ts
5
+ /**
6
+ * Repair a missing derived beads export from canonical Dolt state.
7
+ *
8
+ * The old implementation restored a tracked JSONL snapshot from git, which
9
+ * could revive stale rows. Dolt is authoritative; repair is now a validated
10
+ * re-export through the one JSONL writer.
11
+ */
12
+ var restoreTrackedBeadsExport;
13
+ var init_beads_restore = __esmMin((() => {
14
+ init_export();
15
+ restoreTrackedBeadsExport = (workspacePath) => Effect.tryPromise({
16
+ try: () => exportBeadsJsonl(workspacePath).then(() => void 0),
17
+ catch: () => void 0
18
+ }).pipe(Effect.catch(() => Effect.void));
19
+ }));
20
+ //#endregion
21
+ export { restoreTrackedBeadsExport as n, init_beads_restore as t };
22
+
23
+ //# sourceMappingURL=beads-restore-CyygSmmn.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { t as init_src } from "./src-fgbU-jJ-.js";
3
- import { o as getPricingSync, s as init_cost } from "./cost-CCnqa5xK.js";
2
+ import { t as init_src } from "./src-DHn4Rd2F.js";
3
+ import { o as getPricingSync, s as init_cost } from "./cost-DQ2ajr_m.js";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  //#region ../../lib/cost-parsers/codex-parser.ts
6
6
  /**
@@ -250,4 +250,4 @@ var init_behavior = __esmMin((() => {
250
250
  //#endregion
251
251
  export { parseCodexSessionSync as i, init_codex_parser as n, parseCodexSessionCostEventsSync as r, init_behavior as t };
252
252
 
253
- //# sourceMappingURL=behavior-CPf0pbOt.js.map
253
+ //# sourceMappingURL=behavior-Cpj03N4v.js.map
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-ClpGgrf6.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-DE3C4PMr.js";
4
- import { n as init_issues, t as IssueId } from "./issues-D3kt9UWE.js";
2
+ import { Kr as getOverdeckHome, qr as init_paths } from "./config-yaml-Dcz-8uit.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-bpq1MHKU.js";
4
+ import { n as init_issues, t as IssueId } from "./issues-CwQMphDH.js";
5
5
  import { join } from "node:path";
6
6
  import { Context, Effect, Layer, Schema } from "effect";
7
7
  import { dirname as dirname$1, join as join$1 } from "path";
@@ -1098,4 +1098,4 @@ var init_briefing_freshness = __esmMin((() => {
1098
1098
  //#endregion
1099
1099
  export { resolveSessionContextBriefingPath as a, backfillAgentsSync as c, init_agents as d, listAgentIdsByPrefixSync as f, isTerminalIssueStage as g, getIssueStageSync as h, recordBriefingSessionStart as i, countAgentsByStatus as l, removeAgentSync as m, ensureSessionContextBriefingFile as n, AgentsResolver as o, listAllAgentsSync as p, init_briefing_freshness as r, AgentsResolverLive as s, appendFreshBriefingUpdate as t, countAgentsByStatusRole as u };
1100
1100
 
1101
- //# sourceMappingURL=briefing-freshness-B2FdLwIv.js.map
1101
+ //# sourceMappingURL=briefing-freshness-Kh5V8RTh.js.map
@@ -1,3 +1,3 @@
1
- import { _ as pruneStaleCheckpointRefs, g as pruneCheckpointRefsForAgents, h as listCheckpoints, i as deleteLegacyCheckpointRefs, m as init_checkpoint_manager, p as getCheckpointTimestamp, s as diffCheckpointFiles } from "./checkpoint-manager-JryW6MpM.js";
1
+ import { _ as pruneStaleCheckpointRefs, g as pruneCheckpointRefsForAgents, h as listCheckpoints, i as deleteLegacyCheckpointRefs, m as init_checkpoint_manager, p as getCheckpointTimestamp, s as diffCheckpointFiles } from "./checkpoint-manager-fu9oVsR-.js";
2
2
  init_checkpoint_manager();
3
3
  export { deleteLegacyCheckpointRefs, diffCheckpointFiles, getCheckpointTimestamp, listCheckpoints, pruneCheckpointRefsForAgents, pruneStaleCheckpointRefs };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { _r as VcsError, ar as CheckpointError, dr as InvalidAgentIdError, ln as init_state_plane, on as STATE_BRANCH_PATHS, vr as init_errors } from "./config-yaml-ClpGgrf6.js";
2
+ import { br as init_errors, pr as InvalidAgentIdError, sn as STATE_BRANCH_PATHS, sr as CheckpointError, un as init_state_plane, yr as VcsError } from "./config-yaml-Dcz-8uit.js";
3
3
  import { Effect, Layer } from "effect";
4
4
  import { join } from "path";
5
5
  import { tmpdir } from "os";
@@ -663,4 +663,4 @@ var init_checkpoint_manager = __esmMin((() => {
663
663
  //#endregion
664
664
  export { pruneStaleCheckpointRefs as _, diffAgainstMain as a, diffCheckpoints as c, diffPatchSinceCommit as d, findCommitAtTime as f, pruneCheckpointRefsForAgents as g, listCheckpoints as h, deleteLegacyCheckpointRefs as i, diffFilesAgainstHead as l, init_checkpoint_manager as m, checkpointStateExclusions as n, diffAgainstMainFiles as o, getCheckpointTimestamp as p, deleteCheckpoint as r, diffCheckpointFiles as s, captureCheckpoint as t, diffPatchFilesAgainstHead as u };
665
665
 
666
- //# sourceMappingURL=checkpoint-manager-JryW6MpM.js.map
666
+ //# sourceMappingURL=checkpoint-manager-fu9oVsR-.js.map
@@ -1,4 +1,4 @@
1
- import { a as releaseTranscriptRange, i as listTranscriptCheckpoints, n as commitTranscriptRange, r as getTranscriptCheckpoint, t as claimTranscriptRange } from "./checkpoints-qvOqvMuC.js";
1
+ import { a as releaseTranscriptRange, i as listTranscriptCheckpoints, n as commitTranscriptRange, r as getTranscriptCheckpoint, t as claimTranscriptRange } from "./checkpoints-1BqOlS4q.js";
2
2
  import { parentPort } from "node:worker_threads";
3
3
  //#region ../../lib/memory/checkpoint-worker.ts
4
4
  function runOperation(operation, payload) {
@@ -1,4 +1,4 @@
1
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-DE3C4PMr.js";
1
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-bpq1MHKU.js";
2
2
  import { randomUUID } from "node:crypto";
3
3
  //#region ../../lib/overdeck/transcript-checkpoint-sync.ts
4
4
  /**
@@ -195,4 +195,4 @@ function getTranscriptCheckpoint(sessionId) {
195
195
  //#endregion
196
196
  export { releaseTranscriptRange as a, listTranscriptCheckpoints as i, commitTranscriptRange as n, getTranscriptCheckpoint as r, claimTranscriptRange as t };
197
197
 
198
- //# sourceMappingURL=checkpoints-qvOqvMuC.js.map
198
+ //# sourceMappingURL=checkpoints-1BqOlS4q.js.map
@@ -1,2 +1,2 @@
1
- import { a as releaseTranscriptRange, i as listTranscriptCheckpoints, n as commitTranscriptRange, r as getTranscriptCheckpoint, t as claimTranscriptRange } from "./checkpoints-qvOqvMuC.js";
1
+ import { a as releaseTranscriptRange, i as listTranscriptCheckpoints, n as commitTranscriptRange, r as getTranscriptCheckpoint, t as claimTranscriptRange } from "./checkpoints-1BqOlS4q.js";
2
2
  export { claimTranscriptRange, commitTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints, releaseTranscriptRange };
@@ -0,0 +1,360 @@
1
+ import { Cr as BIN_DIR, Lr as SYNC_SOURCES, qr as init_paths } from "./config-yaml-Dcz-8uit.js";
2
+ import { join } from "node:path";
3
+ import { copyFileSync, existsSync, mkdirSync, readdirSync, renameSync, unlinkSync, writeFileSync } from "fs";
4
+ import { basename as basename$1, dirname as dirname$1, join as join$1 } from "path";
5
+ import { homedir } from "node:os";
6
+ import { chmodSync as chmodSync$1, copyFileSync as copyFileSync$1, existsSync as existsSync$1, mkdirSync as mkdirSync$1 } from "node:fs";
7
+ import { readFile } from "node:fs/promises";
8
+ import { execFile } from "node:child_process";
9
+ import { promisify } from "node:util";
10
+ //#region ../../lib/claude-hooks-registration.ts
11
+ /**
12
+ * Overdeck's Claude Code hook registration — single source of truth for
13
+ * WHICH hook scripts exist and WHERE they register in ~/.claude/settings.json.
14
+ *
15
+ * Consumed by two installers that must never drift:
16
+ * - `pan admin hooks install` (src/cli/commands/setup/hooks.ts) — the
17
+ * interactive CLI path.
18
+ * - the desktop boot provisioner (src/lib/claude-hooks-provision.ts) — the
19
+ * non-interactive path for machines that never run the pan CLI (PAN-2595).
20
+ *
21
+ * Registration is delta-only: existing entries (including hand-customized
22
+ * matchers) are left alone; only missing Overdeck hooks are appended, and
23
+ * stale pre-rebrand `panopticon/bin` twins are pruned (PAN-2530).
24
+ */
25
+ /**
26
+ * Hook scripts copied from sync-sources/hooks/ to ~/.overdeck/bin/.
27
+ * (Comments preserved from the original setupHooksCommand list.)
28
+ */
29
+ const HOOK_SCRIPT_NAMES = [
30
+ "pan-hook-lib.sh",
31
+ "pre-tool-hook",
32
+ "ask-user-question-hook",
33
+ "auto-approve-hook",
34
+ "heartbeat-hook",
35
+ "stop-hook",
36
+ "notification-hook",
37
+ "specialist-stop-hook",
38
+ "work-agent-stop-hook",
39
+ "session-start-hook",
40
+ "user-prompt-submit-hook",
41
+ "pre-compact-hook",
42
+ "post-compact-hook",
43
+ "record-cost-event.js",
44
+ "gh-issue-trailer-hook",
45
+ "gh-issue-trailer-hook.js",
46
+ "tldr-read-enforcer",
47
+ "tldr-post-edit",
48
+ "rtk-bash-filter",
49
+ "permission-event-hook",
50
+ "tmux-send-keys-guard"
51
+ ];
52
+ /**
53
+ * The settings.json registration table. Order matters only for readability;
54
+ * see setupHooksCommand for the per-entry rationale comments (PAN-1402,
55
+ * PAN-1024, PAN-1084, PAN-1520).
56
+ */
57
+ const OVERDECK_HOOK_REGISTRATIONS = [
58
+ {
59
+ hookType: "PreToolUse",
60
+ scriptName: "pre-tool-hook"
61
+ },
62
+ {
63
+ hookType: "PreToolUse",
64
+ scriptName: "auto-approve-hook"
65
+ },
66
+ {
67
+ hookType: "PreToolUse",
68
+ scriptName: "gh-issue-trailer-hook",
69
+ matcher: "Bash"
70
+ },
71
+ {
72
+ hookType: "PreToolUse",
73
+ scriptName: "tmux-send-keys-guard",
74
+ matcher: "Bash"
75
+ },
76
+ {
77
+ hookType: "PreToolUse",
78
+ scriptName: "ask-user-question-hook",
79
+ matcher: "AskUserQuestion"
80
+ },
81
+ {
82
+ hookType: "PostToolUse",
83
+ scriptName: "heartbeat-hook"
84
+ },
85
+ {
86
+ hookType: "PostToolUse",
87
+ scriptName: "permission-event-hook"
88
+ },
89
+ {
90
+ hookType: "Stop",
91
+ scriptName: "stop-hook"
92
+ },
93
+ {
94
+ hookType: "Stop",
95
+ scriptName: "permission-event-hook"
96
+ },
97
+ {
98
+ hookType: "SessionStart",
99
+ scriptName: "session-start-hook"
100
+ },
101
+ {
102
+ hookType: "Notification",
103
+ scriptName: "notification-hook"
104
+ },
105
+ {
106
+ hookType: "UserPromptSubmit",
107
+ scriptName: "user-prompt-submit-hook"
108
+ },
109
+ {
110
+ hookType: "PreCompact",
111
+ scriptName: "pre-compact-hook"
112
+ },
113
+ {
114
+ hookType: "PostCompact",
115
+ scriptName: "post-compact-hook"
116
+ },
117
+ {
118
+ hookType: "PermissionRequest",
119
+ scriptName: "permission-event-hook"
120
+ },
121
+ {
122
+ hookType: "PreToolUse",
123
+ scriptName: "tldr-read-enforcer",
124
+ matcher: "Read",
125
+ requiresPython3: true
126
+ },
127
+ {
128
+ hookType: "PostToolUse",
129
+ scriptName: "tldr-post-edit",
130
+ matcher: "Edit|Write",
131
+ requiresPython3: true
132
+ }
133
+ ];
134
+ /**
135
+ * Per-hook-type detection of whether a Overdeck hook is already registered.
136
+ * PAN-800: rewritten from an all-or-nothing short-circuit to a delta-install
137
+ * check so users with older installs still get SessionStart/Notification/etc.
138
+ * added without having to wipe their settings.
139
+ */
140
+ function isHookConfigured(settings, hookType, binDir, scriptName) {
141
+ return (settings?.hooks?.[hookType] || []).some((hookConfig) => hookConfig.hooks?.some((hook) => (hook.command?.includes(join$1(binDir, scriptName)) ?? false) || (hook.command?.includes(`overdeck/bin/${scriptName}`) ?? false)));
142
+ }
143
+ /**
144
+ * PAN-2530: Remove stale pre-rebrand hook entries that point at the old
145
+ * `~/.panopticon/bin/<scriptName>` path.
146
+ *
147
+ * Before the PAN-1952 rebrand, hooks were installed under `panopticon/bin/`.
148
+ * `isHookConfigured()` only recognizes the current `overdeck/bin/` path, so a
149
+ * re-sync after the rename added the new hook *alongside* the legacy one,
150
+ * leaving both registered and both firing (e.g. ask-user-question-hook fired
151
+ * twice, one copy still branded "Panopticon"). Prune any legacy entry for this
152
+ * script so exactly one hook survives after install.
153
+ *
154
+ * Mutates `settings` in place. Returns true if anything was removed.
155
+ */
156
+ function pruneLegacyPanopticonHook(settings, hookType, scriptName) {
157
+ const list = settings?.hooks?.[hookType];
158
+ if (!list) return false;
159
+ const isLegacy = (command) => command?.includes(`panopticon/bin/${scriptName}`) ?? false;
160
+ let removed = false;
161
+ const next = [];
162
+ for (const hookConfig of list) {
163
+ const originalHooks = hookConfig.hooks ?? [];
164
+ const keptHooks = originalHooks.filter((hook) => {
165
+ if (isLegacy(hook.command)) {
166
+ removed = true;
167
+ return false;
168
+ }
169
+ return true;
170
+ });
171
+ if (keptHooks.length > 0 || originalHooks.length === 0) next.push(keptHooks.length === originalHooks.length ? hookConfig : {
172
+ ...hookConfig,
173
+ hooks: keptHooks
174
+ });
175
+ }
176
+ if (removed) settings.hooks[hookType] = next;
177
+ return removed;
178
+ }
179
+ function addOverdeckHookIfMissing(settings, hookType, binDir, scriptName, matcher = ".*") {
180
+ if (!settings.hooks) settings.hooks = {};
181
+ pruneLegacyPanopticonHook(settings, hookType, scriptName);
182
+ if (isHookConfigured(settings, hookType, binDir, scriptName)) return false;
183
+ (settings.hooks[hookType] ??= []).push({
184
+ matcher,
185
+ hooks: [{
186
+ type: "command",
187
+ command: join$1(binDir, scriptName)
188
+ }]
189
+ });
190
+ return true;
191
+ }
192
+ /**
193
+ * Apply the full Overdeck registration table to `settings` (mutated in place,
194
+ * delta-only). Returns what changed so callers can decide whether to write.
195
+ */
196
+ function applyOverdeckHookRegistrations(settings, binDir, opts) {
197
+ const added = [];
198
+ const removed = [];
199
+ for (const reg of OVERDECK_HOOK_REGISTRATIONS) {
200
+ if (reg.requiresPython3 && !opts.python3Available) continue;
201
+ if (pruneLegacyPanopticonHook(settings, reg.hookType, reg.scriptName)) removed.push(`${reg.hookType}:${reg.scriptName}`);
202
+ if (addOverdeckHookIfMissing(settings, reg.hookType, binDir, reg.scriptName, reg.matcher ?? ".*")) added.push(`${reg.hookType}:${reg.scriptName}`);
203
+ }
204
+ return {
205
+ added,
206
+ removed
207
+ };
208
+ }
209
+ /**
210
+ * Copy the file to `<path>.pan-backup-<iso>` adjacent to the original.
211
+ * Returns the backup path, or null if the file did not exist.
212
+ *
213
+ * Backups go alongside the file (not in tmpdir) so users can find them
214
+ * easily and so we don't pay EXDEV on the copy.
215
+ */
216
+ function backupSettingsSync(path) {
217
+ if (!existsSync(path)) return null;
218
+ const backupPath = `${path}.pan-backup-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
219
+ copyFileSync(path, backupPath);
220
+ return backupPath;
221
+ }
222
+ /**
223
+ * Keep the most recent `SETTINGS_BACKUP_KEEP` backups for the given
224
+ * settings file, delete the rest. Backups are sorted lexically — the
225
+ * ISO-8601 timestamp in the suffix makes that equivalent to chronological.
226
+ *
227
+ * Silent on per-file delete failure; the next prune cycle will retry.
228
+ */
229
+ function pruneBackupsSync(settingsPath, keep = 5) {
230
+ const dir = dirname$1(settingsPath);
231
+ const prefix = `${basename$1(settingsPath)}.pan-backup-`;
232
+ let entries;
233
+ try {
234
+ entries = readdirSync(dir);
235
+ } catch {
236
+ return;
237
+ }
238
+ const backups = entries.filter((e) => e.startsWith(prefix)).sort().reverse();
239
+ for (const stale of backups.slice(keep)) try {
240
+ unlinkSync(join$1(dir, stale));
241
+ } catch {}
242
+ }
243
+ /**
244
+ * Atomic JSON write: serialize, write to a tmpfile in the same directory,
245
+ * rename onto the target. Crash or out-of-disk between the open and the
246
+ * rename leaves the original file intact.
247
+ *
248
+ * tmpfile lives in the same directory (not tmpdir) so the rename is a
249
+ * single-filesystem op — POSIX guarantees that's atomic.
250
+ */
251
+ function atomicWriteJsonSync(path, value) {
252
+ const dir = dirname$1(path);
253
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
254
+ const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}`;
255
+ writeFileSync(tmpPath, `${JSON.stringify(value, null, 2)}\n`, "utf-8");
256
+ renameSync(tmpPath, path);
257
+ }
258
+ //#endregion
259
+ //#region ../../lib/claude-hooks-provision.ts
260
+ /**
261
+ * Non-interactive Claude Code hook provisioning for machines that never run
262
+ * the pan CLI — the desktop app (PAN-2595).
263
+ *
264
+ * Mirrors what `pan admin hooks install` does, minus everything interactive:
265
+ * copy the hook scripts from sync-sources/hooks/ into ~/.overdeck/bin/, then
266
+ * delta-register them in ~/.claude/settings.json via the shared table
267
+ * (src/lib/claude-hooks-registration.ts). Safe-settings guarantees hold
268
+ * (PAN-1137): an unparseable settings.json is never overwritten — we skip
269
+ * with a reason instead of process.exit — and every write is backed up and
270
+ * atomic. Idempotent: a machine with everything registered results in no
271
+ * write at all.
272
+ *
273
+ * Never throws; returns a result the caller can log. Runs async probes only
274
+ * (no execSync — this is server-boot-reachable code).
275
+ */
276
+ init_paths();
277
+ const execFileAsync = promisify(execFile);
278
+ async function commandAvailable(cmd, args) {
279
+ try {
280
+ await execFileAsync(cmd, args, { timeout: 1e4 });
281
+ return true;
282
+ } catch {
283
+ return false;
284
+ }
285
+ }
286
+ async function provisionClaudeHooks(options = {}) {
287
+ const settingsPath = options.settingsPath ?? join(homedir(), ".claude", "settings.json");
288
+ const binDir = options.binDir ?? BIN_DIR;
289
+ const none = {
290
+ changed: false,
291
+ binariesSynced: 0,
292
+ registered: [],
293
+ pruned: []
294
+ };
295
+ try {
296
+ if (!existsSync$1(SYNC_SOURCES.hooks)) return {
297
+ ok: false,
298
+ reason: `hook sources not shipped in this install (${SYNC_SOURCES.hooks})`,
299
+ ...none
300
+ };
301
+ if (!await commandAvailable("jq", ["--version"])) return {
302
+ ok: false,
303
+ reason: "jq is not installed — hooks require it (see the setup checklist)",
304
+ ...none
305
+ };
306
+ mkdirSync$1(binDir, { recursive: true });
307
+ let binariesSynced = 0;
308
+ for (const scriptName of HOOK_SCRIPT_NAMES) {
309
+ const sourcePath = join(SYNC_SOURCES.hooks, scriptName);
310
+ if (!existsSync$1(sourcePath)) return {
311
+ ok: false,
312
+ reason: `hook script missing from install: ${sourcePath}`,
313
+ ...none
314
+ };
315
+ copyFileSync$1(sourcePath, join(binDir, scriptName));
316
+ chmodSync$1(join(binDir, scriptName), 493);
317
+ binariesSynced++;
318
+ }
319
+ let settings = {};
320
+ if (existsSync$1(settingsPath)) try {
321
+ settings = JSON.parse(await readFile(settingsPath, "utf-8"));
322
+ } catch (err) {
323
+ return {
324
+ ok: false,
325
+ reason: `${settingsPath} is not valid JSON (${err instanceof Error ? err.message : String(err)}) — refusing to write; fix or restore a .pan-backup first`,
326
+ ...none,
327
+ binariesSynced
328
+ };
329
+ }
330
+ const python3Available = await commandAvailable("python3", ["--version"]);
331
+ const { added, removed } = applyOverdeckHookRegistrations(settings, binDir, { python3Available });
332
+ if (added.length === 0 && removed.length === 0) return {
333
+ ok: true,
334
+ changed: false,
335
+ binariesSynced,
336
+ registered: [],
337
+ pruned: []
338
+ };
339
+ backupSettingsSync(settingsPath);
340
+ atomicWriteJsonSync(settingsPath, settings);
341
+ pruneBackupsSync(settingsPath);
342
+ return {
343
+ ok: true,
344
+ changed: true,
345
+ binariesSynced,
346
+ registered: added,
347
+ pruned: removed
348
+ };
349
+ } catch (err) {
350
+ return {
351
+ ok: false,
352
+ reason: err instanceof Error ? err.message : String(err),
353
+ ...none
354
+ };
355
+ }
356
+ }
357
+ //#endregion
358
+ export { provisionClaudeHooks };
359
+
360
+ //# sourceMappingURL=claude-hooks-provision-s_wdpeVj.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-ClpGgrf6.js";
2
+ import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-Dcz-8uit.js";
3
3
  import "effect";
4
4
  //#region ../../lib/claude-permissions.ts
5
5
  /** Read PAN_YOLO from the current process env. Returns the implied mode, or undefined if unset/unparseable. */
@@ -94,4 +94,4 @@ var init_claude_permissions = __esmMin((() => {
94
94
  //#endregion
95
95
  export { init_claude_permissions as a, getClaudePermissionFlagsSync as i, buildClaudeUserSettingsSync as n, resolvePermissionModeSync as o, getClaudePermissionFlagsStringSync as r, BYPASS_PERMISSION_MODE as t };
96
96
 
97
- //# sourceMappingURL=claude-permissions-B6bWGh9d.js.map
97
+ //# sourceMappingURL=claude-permissions-CaWqysff.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_claude_settings_overlay, r as injectOverdeckInfraDeny } from "./claude-settings-overlay-CRyyKKXQ.js";
1
+ import { n as init_claude_settings_overlay, r as injectOverdeckInfraDeny } from "./claude-settings-overlay-CcTf0xzG.js";
2
2
  init_claude_settings_overlay();
3
3
  export { injectOverdeckInfraDeny };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { cr as FsError, vr as init_errors } from "./config-yaml-ClpGgrf6.js";
2
+ import { br as init_errors, ur as FsError } from "./config-yaml-Dcz-8uit.js";
3
3
  import { Effect, FileSystem } from "effect";
4
4
  import { join } from "path";
5
5
  import { homedir, tmpdir } from "os";
@@ -142,4 +142,4 @@ var init_claude_settings_overlay = __esmMin((() => {
142
142
  //#endregion
143
143
  export { init_claude_settings_overlay as n, injectOverdeckInfraDeny as r, detectProviderEnvConflicts as t };
144
144
 
145
- //# sourceMappingURL=claude-settings-overlay-CRyyKKXQ.js.map
145
+ //# sourceMappingURL=claude-settings-overlay-CcTf0xzG.js.map