@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
@@ -124,6 +124,14 @@ function sessionFilePath(cwd, sessionId) {
124
124
  const encodedCwd = encodeClaudeProjectDir(cwd);
125
125
  return join(homedir(), ".claude", "projects", encodedCwd, `${sessionId}.jsonl`);
126
126
  }
127
+ /**
128
+ * Single existence check every Claude resume probe must use. Mirrors the
129
+ * JSONL resolver's `jsonl-missing` detection so stale session IDs are never
130
+ * treated as resumable (PAN-3194).
131
+ */
132
+ function claudeSessionTranscriptExists(cwd, sessionId) {
133
+ return existsSync(sessionFilePath(cwd, sessionId));
134
+ }
127
135
  /** Extract the session UUID from a full JSONL file path. */
128
136
  function sessionIdFromFile(sessionFile) {
129
137
  if (!sessionFile) return void 0;
@@ -221,6 +229,6 @@ var init_paths = __esmMin((() => {
221
229
  ];
222
230
  }));
223
231
  //#endregion
224
- export { getLegacyHome as $, PRD_PUBLISHED_DIR as A, SYNC_TARGET as B, HEARTBEATS_DIR as C, OVERDECK_HOME as D, LOGS_DIR as E, PROJECT_PRDS_SUBDIR as F, encodeClaudeProjectDir as G, TRAEFIK_CERTS_DIR as H, SETTINGS_FILE as I, getDocsDisableStatePath as J, getDocsBudgetStatePath as K, SKILLS_DIR as L, PROJECT_PRDS_ACTIVE_SUBDIR as M, PROJECT_PRDS_COMPLETED_SUBDIR as N, PRDS_DIR as O, PROJECT_PRDS_PLANNED_SUBDIR as P, getHandoffsDir as Q, SYNC_SOURCES as R, HANDOFFS_DIR as S, LEGACY_RUNTIME_DIRS as T, TRAEFIK_DIR as U, TEMPLATES_DIR as V, TRAEFIK_DYNAMIC_DIR as W, getDocsPaths as X, getDocsIndexPath as Y, getDocsTelemetryPath as Z, DOCS_BUDGET_STATE_FILE as _, BIN_DIR as a, piExtensionCandidates as at, DOCS_INDEX_FILE as b, CACHE_RULES_DIR as c, resolvePiExtensionPath as ct, CLAUDE_DIR as d, getOverdeckHome as et, CLAUDE_MD_TEMPLATES as f, COSTS_DIR as g, CONFIG_FILE as h, BACKUPS_DIR as i, packageRoot as it, PROJECT_DOCS_SUBDIR as j, PRD_DRAFTS_DIR as k, CACHE_SKILLS_DIR as l, sessionFilePath as lt, CONFIG_DIR as m, AGENT_SKILLS_DIR as n, isDevMode as nt, CACHE_AGENTS_DIR as o, resolveOhmypiExtensionPath as ot, COMMANDS_DIR as p, getDocsDir as q, ARCHIVES_DIR as r, ohmypiExtensionCandidates as rt, CACHE_MANIFEST as s, resolvePackageRootForDir as st, AGENTS_DIR as t, init_paths as tt, CERTS_DIR as u, sessionIdFromFile as ut, DOCS_DIR as v, INIT_DIRS as w, DOCS_TELEMETRY_FILE as x, DOCS_DISABLE_STATE_FILE as y, SYNC_SOURCES_ROOT as z };
232
+ export { getHandoffsDir as $, PRD_PUBLISHED_DIR as A, SYNC_TARGET as B, HEARTBEATS_DIR as C, OVERDECK_HOME as D, LOGS_DIR as E, PROJECT_PRDS_SUBDIR as F, claudeSessionTranscriptExists as G, TRAEFIK_CERTS_DIR as H, SETTINGS_FILE as I, getDocsDir as J, encodeClaudeProjectDir as K, SKILLS_DIR as L, PROJECT_PRDS_ACTIVE_SUBDIR as M, PROJECT_PRDS_COMPLETED_SUBDIR as N, PRDS_DIR as O, PROJECT_PRDS_PLANNED_SUBDIR as P, getDocsTelemetryPath as Q, SYNC_SOURCES as R, HANDOFFS_DIR as S, LEGACY_RUNTIME_DIRS as T, TRAEFIK_DIR as U, TEMPLATES_DIR as V, TRAEFIK_DYNAMIC_DIR as W, getDocsIndexPath as X, getDocsDisableStatePath as Y, getDocsPaths as Z, DOCS_BUDGET_STATE_FILE as _, BIN_DIR as a, packageRoot as at, DOCS_INDEX_FILE as b, CACHE_RULES_DIR as c, resolvePackageRootForDir as ct, CLAUDE_DIR as d, sessionIdFromFile as dt, getLegacyHome as et, CLAUDE_MD_TEMPLATES as f, COSTS_DIR as g, CONFIG_FILE as h, BACKUPS_DIR as i, ohmypiExtensionCandidates as it, PROJECT_DOCS_SUBDIR as j, PRD_DRAFTS_DIR as k, CACHE_SKILLS_DIR as l, resolvePiExtensionPath as lt, CONFIG_DIR as m, AGENT_SKILLS_DIR as n, init_paths as nt, CACHE_AGENTS_DIR as o, piExtensionCandidates as ot, COMMANDS_DIR as p, getDocsBudgetStatePath as q, ARCHIVES_DIR as r, isDevMode as rt, CACHE_MANIFEST as s, resolveOhmypiExtensionPath as st, AGENTS_DIR as t, getOverdeckHome as tt, CERTS_DIR as u, sessionFilePath as ut, DOCS_DIR as v, INIT_DIRS as w, DOCS_TELEMETRY_FILE as x, DOCS_DISABLE_STATE_FILE as y, SYNC_SOURCES_ROOT as z };
225
233
 
226
- //# sourceMappingURL=paths-K3noE4N_.js.map
234
+ //# sourceMappingURL=paths-BBOnCYlO.js.map
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { et as getOverdeckHome, tt as init_paths } from "./paths-K3noE4N_.js";
3
- import { n as init_pty_token, r as readPtyToken, t as PTY_TOKEN_HEADER } from "./pty-token-B7lp0ElT.js";
4
- import { a as inputSettleMs, i as init_injection_budget, o as purgeSettleMs, r as echoConfirmTimeoutMs, t as INPUT_PURGE_MAX_CHARS } from "./injection-budget-B5SbvDx2.js";
2
+ import { nt as init_paths, tt as getOverdeckHome } from "./paths-BBOnCYlO.js";
3
+ import { n as init_pty_token, r as readPtyToken, t as PTY_TOKEN_HEADER } from "./pty-token-CWRffcCa.js";
4
+ import { a as inputSettleMs, i as init_injection_budget, o as purgeSettleMs, r as echoConfirmTimeoutMs, t as INPUT_PURGE_MAX_CHARS } from "./injection-budget-B3UyEONL.js";
5
5
  import { existsSync } from "node:fs";
6
- import { join } from "node:path";
7
6
  import { appendFile, chmod, mkdir, unlink } from "node:fs/promises";
7
+ import { join } from "node:path";
8
8
  import { timingSafeEqual } from "node:crypto";
9
9
  import { pathToFileURL } from "node:url";
10
10
  import { createServer } from "node:http";
@@ -1,8 +1,8 @@
1
1
  import { t as __esmMin } from "./chunk-ruWRV7i3.js";
2
- import { et as getOverdeckHome, tt as init_paths } from "./paths-K3noE4N_.js";
2
+ import { nt as init_paths, tt as getOverdeckHome } from "./paths-BBOnCYlO.js";
3
3
  import "node:fs";
4
- import { join } from "node:path";
5
4
  import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
5
+ import { join } from "node:path";
6
6
  import { randomBytes } from "node:crypto";
7
7
  //#region src/lib/pty-token.ts
8
8
  function ptyTokenDir(agentId) {
@@ -40,4 +40,4 @@ var init_pty_token = __esmMin((() => {
40
40
  //#endregion
41
41
  export { writePtyToken as i, init_pty_token as n, readPtyToken as r, PTY_TOKEN_HEADER as t };
42
42
 
43
- //# sourceMappingURL=pty-token-B7lp0ElT.js.map
43
+ //# sourceMappingURL=pty-token-CWRffcCa.js.map
@@ -1,6 +1,6 @@
1
- import { $r as TRAEFIK_DIR, Fr as init_errors, Gr as OVERDECK_HOME, Hr as CONFIG_FILE, Wr as LOGS_DIR, ci as init_paths } from "./config-yaml-CmOPzmBb.js";
1
+ import { $r as TRAEFIK_DIR, Fr as init_errors, Gr as OVERDECK_HOME, Hr as CONFIG_FILE, Wr as LOGS_DIR, li as init_paths } from "./config-yaml-CxdwhAIA.js";
2
2
  import { t as require_toml } from "./toml-CeLDATih.js";
3
- import { t as init_dev_supervisor } from "./dev-supervisor-CC46Ig8q.js";
3
+ import { t as init_dev_supervisor } from "./dev-supervisor-C4F0vbno.js";
4
4
  import { join } from "node:path";
5
5
  import "effect";
6
6
  import { existsSync, readFileSync } from "fs";
@@ -72,4 +72,4 @@ function getSupervisorUrlSync() {
72
72
  //#endregion
73
73
  export { getSupervisorUrlSync as n, getSupervisorPortSync as t };
74
74
 
75
- //# sourceMappingURL=supervisor-DL788vos.js.map
75
+ //# sourceMappingURL=supervisor-B7BHGcNA.js.map
@@ -0,0 +1,2 @@
1
+ import { n as getSupervisorUrlSync } from "./supervisor-B7BHGcNA.js";
2
+ export { getSupervisorUrlSync };
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { S as init_specs } from "./io-VHvc0Ssp.js";
3
- import { c as hasFileOverlap, l as init_dag, o as getDispatchableItems, r as compileGlob, s as groupItemsByWave } from "./dag-ombYYt4s.js";
2
+ import { S as init_specs } from "./io-C0NV7y6C.js";
3
+ import { c as hasFileOverlap, l as init_dag, o as getDispatchableItems, r as compileGlob, s as groupItemsByWave } from "./dag-5QlmH0oC.js";
4
4
  import "effect";
5
5
  //#region ../../lib/xbrief/swarm-readiness.ts
6
6
  function computeIssueFootprint(doc) {
@@ -112,4 +112,4 @@ var init_swarm_readiness = __esmMin((() => {
112
112
  //#endregion
113
113
  export { computeIssueFootprint as n, init_swarm_readiness as r, analyzeSwarmReadiness as t };
114
114
 
115
- //# sourceMappingURL=swarm-readiness-BV14DF5N.js.map
115
+ //# sourceMappingURL=swarm-readiness-MNE5O8hn.js.map
@@ -1,4 +1,4 @@
1
- import { a as resolveExecutable, o as resolveHarnessBinary, r as init_harness_binary } from "./harness-binary-DqkftwTb.js";
1
+ import { a as resolveExecutable, o as resolveHarnessBinary, r as init_harness_binary } from "./harness-binary-CnBHpd57.js";
2
2
  import { homedir } from "node:os";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -247,4 +247,4 @@ async function checkSystemPrerequisites(probe = defaultProbe, resolver = default
247
247
  //#endregion
248
248
  export { checkSystemPrerequisites, collectSetupDiagnostics };
249
249
 
250
- //# sourceMappingURL=system-prerequisites-pdWG6ZQs.js.map
250
+ //# sourceMappingURL=system-prerequisites-Cin9ZgDx.js.map
@@ -1,10 +1,10 @@
1
- import { Ir as AGENTS_DIR, ci as init_paths } from "./config-yaml-CmOPzmBb.js";
2
- import { D as killSession, H as sessionExists, M as listSessionNames, w as init_tmux } from "./tmux-B1Wbxz5o.js";
3
- import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CwO-Hek7.js";
4
- import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-68CSCRnu.js";
5
- import { a as pidsWithCwdUnder } from "./agent-gc-CBULruzm.js";
6
- import { i as findWorkspacePath, r as findAllWorkspacePaths } from "./archive-planning-C0lAbNB_.js";
7
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-q67TYYg5.js";
1
+ import { Ir as AGENTS_DIR, li as init_paths } from "./config-yaml-CxdwhAIA.js";
2
+ import { D as killSession, H as sessionExists, M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
3
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CXfrw4rR.js";
4
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-66sqMQIi.js";
5
+ import { a as pidsWithCwdUnder } from "./agent-gc-BMcgTDl7.js";
6
+ import { i as findWorkspacePath, r as findAllWorkspacePaths } from "./archive-planning-Binfb99i.js";
7
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-Dh6RI5Vj.js";
8
8
  import { Effect } from "effect";
9
9
  import { existsSync } from "fs";
10
10
  import { basename, join } from "path";
@@ -83,7 +83,7 @@ async function stopTldrDaemonImpl(workspacePath) {
83
83
  const venvPath = join(workspacePath, ".venv");
84
84
  if (!existsSync(venvPath)) return stepSkipped(step, ["No .venv found"]);
85
85
  try {
86
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BKOYB616.js");
86
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-Ca0eovh3.js");
87
87
  await getTldrDaemonServiceSync(workspacePath, venvPath).stop();
88
88
  return stepOk(step, ["Stopped TLDR daemon"]);
89
89
  } catch {
@@ -102,7 +102,7 @@ function stopDocker(workspacePath, issueLower) {
102
102
  async function stopDockerImpl(workspacePath, issueLower) {
103
103
  const step = "teardown:docker";
104
104
  try {
105
- const { stopWorkspaceDocker } = await import("./workspace-manager-CDTKjjdU.js");
105
+ const { stopWorkspaceDocker } = await import("./workspace-manager-B38rFWA1.js");
106
106
  await Effect.runPromise(stopWorkspaceDocker(workspacePath, issueLower));
107
107
  return stepOk(step, ["Stopped Docker containers"]);
108
108
  } catch {
@@ -406,7 +406,7 @@ function clearShadowState(issueId) {
406
406
  async function clearShadowStateImpl(issueId) {
407
407
  const step = "teardown:shadow-state";
408
408
  try {
409
- const { removeShadowState } = await import("./shadow-state-FV6PHfEW.js");
409
+ const { removeShadowState } = await import("./shadow-state-C0Af4clN.js");
410
410
  if (removeShadowState(issueId).success) return stepOk(step, [`Cleared shadow state for ${issueId}`]);
411
411
  return stepSkipped(step, ["No shadow state found"]);
412
412
  } catch {
@@ -456,7 +456,7 @@ function buildPlaceholders(ctx, opts, workspacePath) {
456
456
  function removeTunnelConfig(tunnelConfig, placeholders) {
457
457
  return Effect.tryPromise({
458
458
  try: async () => {
459
- const { removeTunnelIngress } = await import("./tunnel-CjSnHdTc.js");
459
+ const { removeTunnelIngress } = await import("./tunnel-Dz7y434T.js");
460
460
  return stepOk("teardown:tunnel", (await Effect.runPromise(removeTunnelIngress(tunnelConfig, placeholders))).steps || ["Removed tunnel ingress"]);
461
461
  },
462
462
  catch: (err) => err
@@ -468,7 +468,7 @@ function removeTunnelConfig(tunnelConfig, placeholders) {
468
468
  function removeHumeEviConfig(humeConfig, placeholders) {
469
469
  return Effect.tryPromise({
470
470
  try: async () => {
471
- const { deleteHumeConfig } = await import("./hume-Dq--7rOQ.js");
471
+ const { deleteHumeConfig } = await import("./hume-DtWN8oV5.js");
472
472
  return stepOk("teardown:hume", (await Effect.runPromise(deleteHumeConfig(humeConfig, placeholders))).steps || ["Removed Hume EVI config"]);
473
473
  },
474
474
  catch: (err) => err
@@ -513,7 +513,7 @@ function pruneSpecialistRegistry(issueId) {
513
513
  return Effect.tryPromise({
514
514
  try: async () => {
515
515
  const step = "teardown:specialist-registry";
516
- const { pruneSpecialistRegistryEntriesForIssue } = await import("./specialists-Tdezg_6N.js");
516
+ const { pruneSpecialistRegistryEntriesForIssue } = await import("./specialists-CH6ah6D-.js");
517
517
  const removed = pruneSpecialistRegistryEntriesForIssue(issueId);
518
518
  return removed > 0 ? stepOk(step, [`Pruned ${removed} specialist registry entr${removed === 1 ? "y" : "ies"} for ${issueId}`]) : stepSkipped(step, [`No specialist registry entries for ${issueId}`]);
519
519
  },
@@ -524,7 +524,7 @@ function pruneCheckpointRefs(projectPath, issueLower) {
524
524
  return Effect.tryPromise({
525
525
  try: async () => {
526
526
  const step = "teardown:checkpoint-refs";
527
- const { pruneCheckpointRefsForAgents } = await import("./checkpoint-manager-Dxh0FYsv.js");
527
+ const { pruneCheckpointRefsForAgents } = await import("./checkpoint-manager-Cu-R5Uzg.js");
528
528
  const agentIds = [
529
529
  `agent-${issueLower}`,
530
530
  `planning-${issueLower}`,
@@ -538,4 +538,4 @@ function pruneCheckpointRefs(projectPath, issueLower) {
538
538
  //#endregion
539
539
  export { teardownWorkspace as t };
540
540
 
541
- //# sourceMappingURL=teardown-workspace-l2F4_zim.js.map
541
+ //# sourceMappingURL=teardown-workspace-CvBpvc85.js.map
@@ -1,8 +1,8 @@
1
- import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CmOPzmBb.js";
2
- import { S as setReviewStatusSync, f as init_review_status } from "./review-status-yljtTd-q.js";
3
- import { b as init_agents, dt as spawnRun } from "./queries-DHJm7bTd.js";
4
- import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-x3JO8Dtz.js";
5
- import { r as init_test_verdict, t as clearTestVerdictArtifact } from "./test-verdict-BJYDggMm.js";
1
+ import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { C as setReviewStatusSync, p as init_review_status } from "./review-status-CwhA9wmd.js";
3
+ import { b as init_agents, dt as spawnRun } from "./queries-DCX27GRr.js";
4
+ import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-c9Y9mllw.js";
5
+ import { r as init_test_verdict, t as clearTestVerdictArtifact } from "./test-verdict-Cy2jJGTe.js";
6
6
  import { Data, Effect } from "effect";
7
7
  //#region ../../lib/cloister/test-agent-queue.ts
8
8
  /**
@@ -98,7 +98,8 @@ const dispatchTestAgentAndNotify = (issueId, workspace, branch, notifyAgent) =>
98
98
  const spawnResult = yield* Effect.tryPromise({
99
99
  try: () => spawnRun(issueId, "test", {
100
100
  workspace,
101
- prompt
101
+ prompt,
102
+ startedBy: "test-agent-queue"
102
103
  }),
103
104
  catch: (cause) => {
104
105
  return new TestDispatchError({
@@ -163,4 +164,4 @@ const dispatchTestAgentAndNotify = (issueId, workspace, branch, notifyAgent) =>
163
164
  //#endregion
164
165
  export { buildTestRolePrompt, dispatchTestAgentAndNotify };
165
166
 
166
- //# sourceMappingURL=test-agent-queue-qakFIIGz.js.map
167
+ //# sourceMappingURL=test-agent-queue-DmSIqays.js.map
@@ -1,3 +1,3 @@
1
- import { i as readTestVerdictArtifact, r as init_test_verdict } from "./test-verdict-BJYDggMm.js";
1
+ import { i as readTestVerdictArtifact, r as init_test_verdict } from "./test-verdict-Cy2jJGTe.js";
2
2
  init_test_verdict();
3
3
  export { readTestVerdictArtifact };
@@ -102,4 +102,4 @@ var init_test_verdict = __esmMin((() => {}));
102
102
  //#endregion
103
103
  export { testVerdictArtifactPath as a, readTestVerdictArtifact as i, decideUnsignaledTestAction as n, init_test_verdict as r, clearTestVerdictArtifact as t };
104
104
 
105
- //# sourceMappingURL=test-verdict-BJYDggMm.js.map
105
+ //# sourceMappingURL=test-verdict-Cy2jJGTe.js.map
@@ -1,3 +1,3 @@
1
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-CBaWkV9k.js";
1
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-IOssGwg7.js";
2
2
  init_tldr_daemon();
3
3
  export { getTldrDaemonServiceSync };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors } from "./config-yaml-CmOPzmBb.js";
2
+ import { Fr as init_errors } from "./config-yaml-CxdwhAIA.js";
3
3
  import "effect";
4
4
  import { existsSync, readFileSync, statSync } from "fs";
5
5
  import { join } from "path";
@@ -221,4 +221,4 @@ var init_tldr_daemon = __esmMin((() => {
221
221
  //#endregion
222
222
  export { getTldrDaemonServiceSync as n, init_tldr_daemon as r, TldrDaemonService as t };
223
223
 
224
- //# sourceMappingURL=tldr-daemon-CBaWkV9k.js.map
224
+ //# sourceMappingURL=tldr-daemon-IOssGwg7.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Mr as TmuxError, ci as init_paths, f as loadConfigSync, si as getOverdeckHome, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
2
+ import { Fr as init_errors, Mr as TmuxError, ci as getOverdeckHome, f as loadConfigSync, li as init_paths, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
3
  import { Effect } from "effect";
4
4
  import { appendFileSync, chmodSync, existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
5
5
  import { join } from "path";
@@ -164,6 +164,174 @@ var init_tmux_process_tree = __esmMin((() => {
164
164
  ]);
165
165
  }));
166
166
  //#endregion
167
+ //#region ../../lib/pane-choice-menu.ts
168
+ function cleanLine(line) {
169
+ return line.replace(ANSI_PATTERN, "").replace(/[\x00-\x1f\x7f]/g, "").replace(/\s+$/g, "");
170
+ }
171
+ /**
172
+ * PAN-3068 shape — key/action pairs separated by "·". Every segment must open
173
+ * with a key name, so real post-answer output never qualifies.
174
+ */
175
+ function looksLikeHarnessFooterHint(line) {
176
+ const segments = line.split("·").map((s) => s.trim()).filter(Boolean);
177
+ if (segments.length === 0) return false;
178
+ return segments.every((segment) => /^(?:esc(?:ape)?|tab|enter|return|space|backspace|shift\+\S+|ctrl\+\S+|alt\+\S+|\?)\b/i.test(segment) || /^press\s+\S+/i.test(segment));
179
+ }
180
+ /** "1. Yes / 2. Yes, and allow… / 3. No" — owned by the permission-menu path. */
181
+ function looksLikePermissionOptions(options) {
182
+ if (options.length !== 3) return false;
183
+ return /^yes$/i.test(options[0].label) && /^yes,?\s*(?:and\s*)?(?:allow|don't ask|always)/i.test(options[1].label) && /^no\b/i.test(options[2].label);
184
+ }
185
+ function parseOptionLine(line) {
186
+ const match = OPTION_LINE.exec(line);
187
+ if (!match) return null;
188
+ const number = Number(match[2]);
189
+ if (!Number.isInteger(number) || number < 1 || number > MAX_OPTIONS) return null;
190
+ const rawLabel = match[3].trim();
191
+ if (rawLabel.length === 0 || rawLabel.length > MAX_LABEL_CHARS) return null;
192
+ return {
193
+ cursor: Boolean(match[1]),
194
+ number,
195
+ rawLabel
196
+ };
197
+ }
198
+ /**
199
+ * Parse the last numbered-choice menu in the pane, or null when the pane is
200
+ * not currently blocked on one. See the module header for the conservative
201
+ * acceptance rules.
202
+ *
203
+ * `mode: 'guard'` keeps the menus card rendering excludes — permission prompts
204
+ * and multi-selects. A caller that only wants to know "is this pane blocked on
205
+ * a menu?" must see those too; see `paneHasBlockingChoiceMenu`.
206
+ */
207
+ function parsePaneChoiceMenu(paneText, opts = {}) {
208
+ const mode = opts.mode ?? "card";
209
+ if (!paneText) return null;
210
+ const lines = paneText.split("\n").map(cleanLine);
211
+ let end = lines.length - 1;
212
+ while (end >= 0 && lines[end].trim() === "") end -= 1;
213
+ if (end < 0) return null;
214
+ let lastOption = -1;
215
+ for (let i = end; i >= 0; i -= 1) {
216
+ if (parseOptionLine(lines[i])) {
217
+ lastOption = i;
218
+ break;
219
+ }
220
+ if (end - i > MAX_TRAILING_LINES + MAX_OPTIONS) break;
221
+ }
222
+ if (lastOption < 0) return null;
223
+ const optionLines = [];
224
+ let firstOption = lastOption;
225
+ for (let i = lastOption; i >= 0; i -= 1) {
226
+ const parsed = parseOptionLine(lines[i]);
227
+ if (!parsed) break;
228
+ optionLines.unshift(parsed);
229
+ firstOption = i;
230
+ }
231
+ if (optionLines.length < 2 || optionLines.length > MAX_OPTIONS) return null;
232
+ for (let i = 0; i < optionLines.length; i += 1) if (optionLines[i].number !== i + 1) return null;
233
+ const cursorRows = optionLines.map((opt, index) => opt.cursor ? index : -1).filter((index) => index >= 0);
234
+ if (cursorRows.length > 1) return null;
235
+ const trailing = lines.slice(lastOption + 1).filter((line) => line.trim() !== "");
236
+ if (trailing.length > MAX_TRAILING_LINES) return null;
237
+ let footerHint = null;
238
+ for (const line of trailing) {
239
+ if (BARE_PROMPT_LINE.test(line)) return null;
240
+ if (SEPARATOR_LINE.test(line)) continue;
241
+ if (looksLikeHarnessFooterHint(line.trim())) {
242
+ if (footerHint === null) footerHint = line.trim();
243
+ continue;
244
+ }
245
+ return null;
246
+ }
247
+ const options = optionLines.map((opt) => {
248
+ const recommended = RECOMMENDED_SUFFIX.test(opt.rawLabel);
249
+ return {
250
+ number: opt.number,
251
+ label: recommended ? opt.rawLabel.replace(RECOMMENDED_SUFFIX, "") : opt.rawLabel,
252
+ recommended
253
+ };
254
+ });
255
+ if (mode === "card") {
256
+ if (looksLikePermissionOptions(options)) return null;
257
+ if (footerHint && /space\s+to\s+(?:select|toggle)/i.test(footerHint)) return null;
258
+ }
259
+ const contextLines = [];
260
+ let paragraphs = 0;
261
+ let i = firstOption - 1;
262
+ while (i >= 0 && lines[i].trim() === "") i -= 1;
263
+ for (; i >= 0 && contextLines.length < MAX_CONTEXT_LINES; i -= 1) {
264
+ const line = lines[i];
265
+ if (SEPARATOR_LINE.test(line) || BARE_PROMPT_LINE.test(line)) break;
266
+ if (parseOptionLine(line)) break;
267
+ if (line.trim() === "") {
268
+ if (paragraphs >= 2) break;
269
+ let j = i - 1;
270
+ while (j >= 0 && lines[j].trim() === "") j -= 1;
271
+ if (j < 0 || SEPARATOR_LINE.test(lines[j]) || BARE_PROMPT_LINE.test(lines[j]) || parseOptionLine(lines[j])) break;
272
+ i = j + 1;
273
+ continue;
274
+ }
275
+ if (lines[i + 1] === void 0 || lines[i + 1].trim() === "") paragraphs += 1;
276
+ contextLines.unshift(line.trim());
277
+ }
278
+ const hasCursor = cursorRows.length === 1;
279
+ if (!hasCursor && footerHint === null) return null;
280
+ const confidence = hasCursor && footerHint !== null ? "high" : "low";
281
+ return {
282
+ title: contextLines[0] ?? options[0].label,
283
+ contextLines,
284
+ options,
285
+ selectedIndex: hasCursor ? cursorRows[0] : 0,
286
+ footerHint,
287
+ confidence
288
+ };
289
+ }
290
+ /**
291
+ * True when the pane is blocked on ANY numbered menu, including the permission
292
+ * and multi-select shapes card rendering skips.
293
+ *
294
+ * Callers that would otherwise press Enter with nothing verified in the
295
+ * composer MUST consult this first: a bare Enter confirms the menu's
296
+ * highlighted row, which answers a question nobody asked. The session-resume
297
+ * gate defaults to "Resume from summary", so a stray Enter there discards the
298
+ * operator's full session (PAN-3212).
299
+ */
300
+ function paneHasBlockingChoiceMenu(paneText) {
301
+ return parsePaneChoiceMenu(paneText, { mode: "guard" }) !== null;
302
+ }
303
+ /** Stable identity for patrol dedupe — same menu re-parsed must not re-surface. */
304
+ function paneChoiceMenuSignature(menu) {
305
+ return `${menu.title}::${menu.options.map((o) => `${o.number}:${o.label}`).join("|")}`;
306
+ }
307
+ /**
308
+ * Literal tmux keystrokes answering the menu with `selectedIndex`: arrow the
309
+ * cursor from its current row to the target, then confirm. Claude Code menus
310
+ * move the ❯ cursor with ↑/↓ and confirm with Enter; number keys are not
311
+ * guaranteed across harness versions, so arrows are the universal path.
312
+ */
313
+ function buildChoiceKeystrokes(menu, selectedIndex) {
314
+ const clamped = Math.max(0, Math.min(selectedIndex, menu.options.length - 1));
315
+ const from = menu.selectedIndex;
316
+ const keys = [];
317
+ for (let i = from; i < clamped; i += 1) keys.push("Down");
318
+ for (let i = from; i > clamped; i -= 1) keys.push("Up");
319
+ keys.push("Enter");
320
+ return keys;
321
+ }
322
+ var ANSI_PATTERN, OPTION_LINE, SEPARATOR_LINE, BARE_PROMPT_LINE, MAX_TRAILING_LINES, MAX_CONTEXT_LINES, MAX_OPTIONS, MAX_LABEL_CHARS, RECOMMENDED_SUFFIX;
323
+ var init_pane_choice_menu = __esmMin((() => {
324
+ ANSI_PATTERN = /\x1b\[[0-9;?]*[ -/]*[@-~]/g;
325
+ OPTION_LINE = /^\s*(❯|›)?\s*(\d{1,2})[.)]\s+(\S.*)$/;
326
+ SEPARATOR_LINE = /^\s*[─━═]{6,}\s*$/;
327
+ BARE_PROMPT_LINE = /^\s*(❯|›)\s*$/;
328
+ MAX_TRAILING_LINES = 6;
329
+ MAX_CONTEXT_LINES = 8;
330
+ MAX_OPTIONS = 9;
331
+ MAX_LABEL_CHARS = 100;
332
+ RECOMMENDED_SUFFIX = /\s*\((recommended)\)\s*$/i;
333
+ }));
334
+ //#endregion
167
335
  //#region ../../lib/tmux.ts
168
336
  function validateSessionName(name) {
169
337
  if (!VALID_SESSION_NAME_RE.test(name)) throw new Error(`Invalid tmux session name: ${name}`);
@@ -881,6 +1049,7 @@ var init_tmux = __esmMin((() => {
881
1049
  init_errors();
882
1050
  init_ui_theme();
883
1051
  init_tmux_process_tree();
1052
+ init_pane_choice_menu();
884
1053
  execFileAsync = promisify(execFile);
885
1054
  VALID_SESSION_NAME_RE = /^[a-zA-Z0-9._-]+$/;
886
1055
  DEFAULT_TMUX_WINDOW_COLS = 200;
@@ -1198,7 +1367,8 @@ var init_tmux = __esmMin((() => {
1198
1367
  bufferName
1199
1368
  ], { encoding: "utf-8" }).catch(() => {});
1200
1369
  if (!pasteVerified) {
1201
- const snapshot = await capturePaneText(sessionName, 30);
1370
+ const snapshot = await capturePaneText(sessionName, 90);
1371
+ if (paneHasBlockingChoiceMenu(snapshot)) throw new MessageDeliveryFailed(`Delivery to ${sessionName} aborted: the pane is blocked on a choice menu, so the paste never reached the composer and Enter would answer that menu`, sessionName, snapshot);
1202
1372
  console.warn(`[tmux] Paste verification failed for ${sessionName} after ${PASTE_MAX_ATTEMPTS} attempts × ${VERIFY_TIMEOUT_MS}ms. Sending Enter anyway to avoid orphaned input. Snapshot:\n${snapshot.slice(0, 500)}`);
1203
1373
  }
1204
1374
  await tmuxExecAsync([
@@ -1250,6 +1420,6 @@ var init_tmux = __esmMin((() => {
1250
1420
  getAgentSessions = () => listSessions().pipe(Effect.map((sessions) => sessions.filter((s) => s.name.startsWith("agent-"))));
1251
1421
  }));
1252
1422
  //#endregion
1253
- export { buildChildEnvSync as $, listPaneValues as A, sendKeysAsync as B, getWindowDimensions as C, killSession as D, isPaneDead as E, parseTmuxPaneRecords as F, tmuxExecAsync as G, sessionExists as H, querySessionSync as I, colorFgBgForTheme as J, validateSessionName as K, resizeWindow as L, listSessionNames as M, listSessions as N, killSessionSync as O, listSessionsSync as P, BLANKED_PROVIDER_ENV as Q, sendEscapeKeyAsync as R, getTmuxConfigMode as S, isHarnessProcessAlive as T, sessionExistsSync as U, sendRawKeystroke as V, setOption as W, init_ui_theme as X, getUiThemeSync as Y, setUiTheme as Z, getAgentSessions as _, capturePaneSync as a, getTmuxBaseArgs as b, createSessionSync as c, ensureManagedTmuxContextOnce as d, buildChildEnvWithoutTmuxSync as et, ensureOverdeckTmuxServerAsync as f, findManagedServerPidSync as g, exactSession as h, capturePane as i, listPaneValuesSync as j, listAllPaneRecords as k, deliveryVerifyLine as l, exactPaneTarget as m, buildTmuxArgs as n, capturePaneText as o, ensureOverdeckTmuxServerSync as p, paneTreeHasHarnessProcess as q, buildTmuxCommandString as r, createSession as s, MessageDeliveryFailed as t, init_child_env as tt, detectTerminalApiErrorSync as u, getManagedTmuxConfigPath as v, init_tmux as w, getTmuxCommand as x, getManagedTmuxSocketName as y, sendKeys as z };
1423
+ export { colorFgBgForTheme as $, listPaneValues as A, sendKeysAsync as B, getWindowDimensions as C, killSession as D, isPaneDead as E, parseTmuxPaneRecords as F, tmuxExecAsync as G, sessionExists as H, querySessionSync as I, init_pane_choice_menu as J, validateSessionName as K, resizeWindow as L, listSessionNames as M, listSessions as N, killSessionSync as O, listSessionsSync as P, paneTreeHasHarnessProcess as Q, sendEscapeKeyAsync as R, getTmuxConfigMode as S, isHarnessProcessAlive as T, sessionExistsSync as U, sendRawKeystroke as V, setOption as W, paneHasBlockingChoiceMenu as X, paneChoiceMenuSignature as Y, parsePaneChoiceMenu as Z, getAgentSessions as _, capturePaneSync as a, buildChildEnvWithoutTmuxSync as at, getTmuxBaseArgs as b, createSessionSync as c, ensureManagedTmuxContextOnce as d, getUiThemeSync as et, ensureOverdeckTmuxServerAsync as f, findManagedServerPidSync as g, exactSession as h, capturePane as i, buildChildEnvSync as it, listPaneValuesSync as j, listAllPaneRecords as k, deliveryVerifyLine as l, exactPaneTarget as m, buildTmuxArgs as n, setUiTheme as nt, capturePaneText as o, init_child_env as ot, ensureOverdeckTmuxServerSync as p, buildChoiceKeystrokes as q, buildTmuxCommandString as r, BLANKED_PROVIDER_ENV as rt, createSession as s, MessageDeliveryFailed as t, init_ui_theme as tt, detectTerminalApiErrorSync as u, getManagedTmuxConfigPath as v, init_tmux as w, getTmuxCommand as x, getManagedTmuxSocketName as y, sendKeys as z };
1254
1424
 
1255
- //# sourceMappingURL=tmux-B1Wbxz5o.js.map
1425
+ //# sourceMappingURL=tmux-CfDHob9M.js.map
@@ -1,3 +1,3 @@
1
- import { D as killSession, E as isPaneDead, H as sessionExists, M as listSessionNames, k as listAllPaneRecords, w as init_tmux } from "./tmux-B1Wbxz5o.js";
1
+ import { D as killSession, E as isPaneDead, H as sessionExists, M as listSessionNames, k as listAllPaneRecords, w as init_tmux } from "./tmux-CfDHob9M.js";
2
2
  init_tmux();
3
3
  export { isPaneDead, killSession, listAllPaneRecords, listSessionNames, sessionExists };
@@ -1,5 +1,5 @@
1
1
  import { t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { r as require_token_error, t as require_token_util } from "./token-util-CLq2MmQt.js";
2
+ import { r as require_token_error, t as require_token_util } from "./token-util-CZ8WPtdk.js";
3
3
  //#region ../../../node_modules/.bun/@vercel+oidc@3.2.0/node_modules/@vercel/oidc/dist/token.js
4
4
  var require_token = /* @__PURE__ */ __commonJSMin(((exports, module) => {
5
5
  var __defProp = Object.defineProperty;
@@ -54,4 +54,4 @@ var require_token = /* @__PURE__ */ __commonJSMin(((exports, module) => {
54
54
  export default require_token();
55
55
  export {};
56
56
 
57
- //# sourceMappingURL=token-Cxbk023d.js.map
57
+ //# sourceMappingURL=token-B10VFNOD.js.map
@@ -432,4 +432,4 @@ var require_token_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
432
432
  //#endregion
433
433
  export { require_auth_errors as n, require_token_error as r, require_token_util as t };
434
434
 
435
- //# sourceMappingURL=token-util-CLq2MmQt.js.map
435
+ //# sourceMappingURL=token-util-CZ8WPtdk.js.map
@@ -0,0 +1,3 @@
1
+ import { t as require_token_util } from "./token-util-CZ8WPtdk.js";
2
+ export default require_token_util();
3
+ export {};
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, In as getIssuePrefix, Zn as loadProjectsConfigSync, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
2
+ import { Gn as init_projects, In as getIssuePrefix, Zn as loadProjectsConfigSync, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
3
  import { existsSync } from "fs";
4
4
  import { join } from "path";
5
5
  import { homedir } from "os";
@@ -142,4 +142,4 @@ var init_tracker_config = __esmMin((() => {
142
142
  //#endregion
143
143
  export { init_tracker_config as a, initTrackerConfigCache as i, getLinearApiKey as n, validateRallyConfig as o, getRallyConfig as r, getGitHubConfig as t };
144
144
 
145
- //# sourceMappingURL=tracker-config-DZ8Zn2nQ.js.map
145
+ //# sourceMappingURL=tracker-config-CHbrjg6m.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Gn as init_projects, In as getIssuePrefix, Zn as loadProjectsConfigSync, gr as init_issue_id, hr as extractPrefixSync, mr as extractNumberSync, vr as parseIssueIdSync } from "./config-yaml-CmOPzmBb.js";
2
+ import { Fr as init_errors, Gn as init_projects, In as getIssuePrefix, Zn as loadProjectsConfigSync, gr as init_issue_id, hr as extractPrefixSync, mr as extractNumberSync, vr as parseIssueIdSync } from "./config-yaml-CxdwhAIA.js";
3
3
  import "effect";
4
4
  import { existsSync, readFileSync } from "fs";
5
5
  import { join } from "path";
@@ -120,4 +120,4 @@ var init_tracker_utils = __esmMin((() => {
120
120
  //#endregion
121
121
  export { resolveGitHubIssueSync as n, resolveTrackerTypeSync as r, init_tracker_utils as t };
122
122
 
123
- //# sourceMappingURL=tracker-utils-L0FKtjq2.js.map
123
+ //# sourceMappingURL=tracker-utils-DZZq_C0R.js.map
@@ -69,4 +69,4 @@ var init_traefik_connect = __esmMin((() => {
69
69
  //#endregion
70
70
  export { reconcileTraefikNetworks as n, init_traefik_connect as t };
71
71
 
72
- //# sourceMappingURL=traefik-connect-bNX6jKkb.js.map
72
+ //# sourceMappingURL=traefik-connect-GHomyBaD.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Nr as TrackerError } from "./config-yaml-CmOPzmBb.js";
3
- import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-B123aZl-.js";
2
+ import { Fr as init_errors, Nr as TrackerError } from "./config-yaml-CxdwhAIA.js";
3
+ import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-CJ7RqQiP.js";
4
4
  import { Effect } from "effect";
5
5
  import { readFileSync } from "fs";
6
6
  import { resolve } from "path";
@@ -217,4 +217,4 @@ var init_tunnel = __esmMin((() => {
217
217
  //#endregion
218
218
  export { init_tunnel as n, removeTunnelIngress as r, addTunnelIngress as t };
219
219
 
220
- //# sourceMappingURL=tunnel-BAm1XgjG.js.map
220
+ //# sourceMappingURL=tunnel-Bdyb-sNq.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_tunnel, r as removeTunnelIngress } from "./tunnel-BAm1XgjG.js";
1
+ import { n as init_tunnel, r as removeTunnelIngress } from "./tunnel-Bdyb-sNq.js";
2
2
  init_tunnel();
3
3
  export { removeTunnelIngress };
@@ -1,3 +1,3 @@
1
- import { a as RateLimited, c as TrackerNotConfigured, d as init_typed_errors, i as PlanEmpty, l as WorkspaceCreateError, n as AgentStartError, o as TasksNotInitialized, r as IssueNotFound, s as TrackerApiError, t as AgentAlreadyRunning, u as WorkspaceNotFound } from "./typed-errors-2BTMxkZq.js";
1
+ import { a as RateLimited, c as TrackerNotConfigured, d as init_typed_errors, i as PlanEmpty, l as WorkspaceCreateError, n as AgentStartError, o as TasksNotInitialized, r as IssueNotFound, s as TrackerApiError, t as AgentAlreadyRunning, u as WorkspaceNotFound } from "./typed-errors-Bn_2WRU7.js";
2
2
  init_typed_errors();
3
3
  export { AgentAlreadyRunning, AgentStartError, IssueNotFound, PlanEmpty, RateLimited, TasksNotInitialized, TrackerApiError, TrackerNotConfigured, WorkspaceCreateError, WorkspaceNotFound };
@@ -23,4 +23,4 @@ var init_typed_errors = __esmMin((() => {
23
23
  //#endregion
24
24
  export { RateLimited as a, TrackerNotConfigured as c, init_typed_errors as d, PlanEmpty as i, WorkspaceCreateError as l, AgentStartError as n, TasksNotInitialized as o, IssueNotFound as r, TrackerApiError as s, AgentAlreadyRunning as t, WorkspaceNotFound as u };
25
25
 
26
- //# sourceMappingURL=typed-errors-2BTMxkZq.js.map
26
+ //# sourceMappingURL=typed-errors-Bn_2WRU7.js.map
@@ -36,4 +36,4 @@ var init_types = __esmMin((() => {
36
36
  //#endregion
37
37
  export { PAN_DIRNAME as a, PAN_SESSIONS_FILENAME as c, WORKSPACE_RUNTIME_DIRNAME as d, asPanSpecDocument as f, PAN_CONTINUE_FILENAME as i, PAN_SPECS_DIRNAME as l, isPanSpecStatus as m, PAN_CONTEXT_FILENAME as n, PAN_DRAFTS_DIRNAME as o, init_types as p, PAN_CONTINUES_DIRNAME as r, PAN_FEEDBACK_DIRNAME as s, LEGACY_WORKSPACE_RUNTIME_DIRNAME as t, PAN_SPEC_FILENAME as u };
38
38
 
39
- //# sourceMappingURL=types-hraoaQIp.js.map
39
+ //# sourceMappingURL=types-D2ETIB8T.js.map
@@ -59,4 +59,4 @@ var init_types = __esmMin((() => {}));
59
59
  //#endregion
60
60
  export { stepSkipped as a, stepOk as i, init_types as n, stepFailed as r, getLinearApiKey as t };
61
61
 
62
- //# sourceMappingURL=types-q67TYYg5.js.map
62
+ //# sourceMappingURL=types-Dh6RI5Vj.js.map
@@ -1,7 +1,7 @@
1
- import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CmOPzmBb.js";
2
- import { S as setReviewStatusSync, f as init_review_status, u as getReviewStatusSync } from "./review-status-yljtTd-q.js";
3
- import { k as listUatGenerationsSync, s as init_merge_sync } from "./merge-sync-CQ-LgZ1_.js";
4
- import { a as init_git_utils, c as rehydrateHeadAnchor } from "./git-utils-ameCgDdy.js";
1
+ import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { C as setReviewStatusSync, d as getReviewStatusSync, p as init_review_status } from "./review-status-CwhA9wmd.js";
3
+ import { A as listUatGenerationsSync, c as init_merge_sync } from "./merge-sync-CM978zez.js";
4
+ import { a as init_git_utils, c as rehydrateHeadAnchor } from "./git-utils-DtdoEXJk.js";
5
5
  import { execFile } from "node:child_process";
6
6
  import { promisify } from "node:util";
7
7
  //#region ../../lib/cloister/uat-promote-verification.ts
@@ -89,4 +89,4 @@ async function healUatPromotionVerification(issueId, deps = DEFAULT_HEAL_DEPS) {
89
89
  //#endregion
90
90
  export { buildUatPromotionStamp, healUatPromotionVerification, recordUatPromotionVerdicts };
91
91
 
92
- //# sourceMappingURL=uat-promote-verification-CKB9ZrKC.js.map
92
+ //# sourceMappingURL=uat-promote-verification-DyvQXvIn.js.map
@@ -1,2 +1,2 @@
1
- import { a as postUatGenerationStackPayload, c as runUatTrainReconcileAllProjects, i as postUatGenerationPromotePayload, l as startUatTrainReconciler, n as getUatCandidatePayload, o as resolveUatProjectRoot, r as getUatGenerationsPayload, s as runUatTrainReconcile, t as canStartUatTrainReconciler, u as stopUatTrainReconciler } from "./uat-train-D5UjcyAa.js";
1
+ import { a as postUatGenerationStackPayload, c as runUatTrainReconcileAllProjects, i as postUatGenerationPromotePayload, l as startUatTrainReconciler, n as getUatCandidatePayload, o as resolveUatProjectRoot, r as getUatGenerationsPayload, s as runUatTrainReconcile, t as canStartUatTrainReconciler, u as stopUatTrainReconciler } from "./uat-train-Dv0Bxer7.js";
2
2
  export { canStartUatTrainReconciler, getUatCandidatePayload, getUatGenerationsPayload, postUatGenerationPromotePayload, postUatGenerationStackPayload, resolveUatProjectRoot, runUatTrainReconcile, runUatTrainReconcileAllProjects, startUatTrainReconciler, stopUatTrainReconciler };