@overdeck/desktop 0.49.2 → 0.50.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 (554) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +1 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-CHtDkHEL.js → acceptance-criteria-DFyrgxW5.js} +2 -2
  4. package/server/{active-dashboard-bundle-Byh6sP-q.js → active-dashboard-bundle-DbfgP8TS.js} +2 -2
  5. package/server/{activity-logger-Ck8qoluj.js → activity-logger-DtdKxzPh.js} +1 -1
  6. package/server/{activity-logger-BWZhVphb.js → activity-logger-ru8ggv-d.js} +3 -3
  7. package/server/{advancing-selfheal-65W4yUQi.js → advancing-selfheal-BdZ1iFJf.js} +11 -6
  8. package/server/{agent-gc-BNUudFnt.js → agent-gc-DBMg1vIc.js} +11 -11
  9. package/server/{agent-idle-ONBssBN_.js → agent-idle-CQlwmcRR.js} +11 -11
  10. package/server/{agent-state-CM8iVw5B.js → agent-state-B0v3fvGI.js} +1 -1
  11. package/server/{agent-state-BJhGIJZe.js → agent-state-BnyNoDWQ.js} +345 -402
  12. package/server/{agent-state-service-CiIuwzIs.js → agent-state-service-D95wBjA3.js} +5 -5
  13. package/server/{agent-state-service-CzHfoqKQ.js → agent-state-service-GK2Uy8zc.js} +1 -1
  14. package/server/{agents-DpCuoF65.js → agents-BdkVgjxC.js} +1 -1
  15. package/server/{agents-jXgqpHca.js → agents-DMs1aLRU.js} +4 -4
  16. package/server/{archive-planning-CGkU6UeL.js → archive-planning-CFf5FVHQ.js} +5 -5
  17. package/server/archive-planning-CNSWQPvz.js +2 -0
  18. package/server/{artifact-index-jobs-Ck4NRRkY.js → artifact-index-jobs-BdeB5RIY.js} +2 -2
  19. package/server/{assemble-CyvEBmmq.js → assemble-D88iFkP-.js} +2 -2
  20. package/server/{auto-spawn-consent-Dc4mtM-B.js → auto-spawn-consent-C1avLtkk.js} +7 -7
  21. package/server/{backlog-auto-trigger-CCEpr4YT.js → backlog-auto-trigger-oKIGNBzZ.js} +3 -3
  22. package/server/{behavior-BiCQzqyT.js → behavior-CPX0E2Fj.js} +49 -7
  23. package/server/{bridge-pool-patrol-Ce8rNPym.js → bridge-pool-patrol-DstxbANA.js} +2 -2
  24. package/server/{briefing-freshness-e_OEYZEe.js → briefing-freshness-FF0WLPMc.js} +2 -2
  25. package/server/build-info-Df2tkRrB.js +2 -0
  26. package/server/{build-info-BRw4QlYO.js → build-info-DiA6h4T6.js} +3 -3
  27. package/server/{checkpoint-manager-DOwRGFff.js → checkpoint-manager-CkXA-F6Z.js} +2 -2
  28. package/server/{checkpoint-manager-CKr42Usw.js → checkpoint-manager-D74ueYZp.js} +1 -1
  29. package/server/checkpoint-worker.js +1 -1
  30. package/server/{checkpoints-Cszp_0Np.js → checkpoints-Ds83fUb1.js} +2 -2
  31. package/server/{checkpoints-Cb6CWT4S.js → checkpoints-JIKy0UFv.js} +1 -1
  32. package/server/{claude-hooks-provision-C5JHpxTS.js → claude-hooks-provision-BJ8LNIAe.js} +1 -1
  33. package/server/{claude-hooks-provision-Cer2eFfj.js → claude-hooks-provision-D7Z8kANm.js} +2 -2
  34. package/server/{claude-permissions-Bc5kjX1q.js → claude-permissions-Bn53HCXr.js} +18 -3
  35. package/server/{claude-settings-overlay-m-VVZej1.js → claude-settings-overlay-CqJZjFqv.js} +2 -2
  36. package/server/{claude-settings-overlay-C7rWsnya.js → claude-settings-overlay-QByq1SQa.js} +1 -1
  37. package/server/{cli-BmczsfD6.js → cli-BXmAb7vN.js} +11 -11
  38. package/server/cli-BjznnCC3.js +2 -0
  39. package/server/{cliproxy-BpYpkogS.js → cliproxy-L_2OxNJf.js} +2 -2
  40. package/server/{cliproxy-_yUU0HRY.js → cliproxy-ltFu5xfR.js} +1 -1
  41. package/server/{close-issue-CxvRD0UI.js → close-issue-BZAf0Ii-.js} +5 -5
  42. package/server/{closed-issue-reaper-nMLRi5de.js → closed-issue-reaper-BJa8SbvQ.js} +13 -13
  43. package/server/{closed-issue-reaper-omOcUDBl.js → closed-issue-reaper-DVtyOI4C.js} +1 -1
  44. package/server/{codex-DZhFfcWu.js → codex-BqLZKVNm.js} +1 -1
  45. package/server/{codex-KaSKE-R3.js → codex-DSs-3aOm.js} +6 -6
  46. package/server/{compaction-continuation-Bjfi70G-.js → compaction-continuation-TG0HYkOq.js} +3 -3
  47. package/server/{config-ZGjvuR6J.js → config-Cx3N6gWz.js} +2 -2
  48. package/server/{config-Doq_tF-f.js → config-DP0VV7rX.js} +2 -2
  49. package/server/{config-CH1AqqIQ.js → config-DURnId0k.js} +1 -1
  50. package/server/{config-yaml-D9nfpEx1.js → config-yaml-OoH-ZpTb.js} +48 -9
  51. package/server/{conflict-gate-DcUTY4Gb.js → conflict-gate-SgOELW84.js} +5 -5
  52. package/server/{conflict-gate-D4XCtrm2.js → conflict-gate-pMfhBEVB.js} +1 -1
  53. package/server/{context-layers-BGj2Y9l3.js → context-layers-D0QBOPJJ.js} +2 -2
  54. package/server/{context-layers-BBTKP-Y4.js → context-layers-LY5zt0da.js} +3 -3
  55. package/server/{continue-i7Revg8D.js → continue-Cmzd6leL.js} +2 -2
  56. package/server/{control-settings-BMoDHY1G.js → control-settings-Bdud_B1j.js} +308 -5
  57. package/server/{conversation-compaction-DzIjYMfg.js → conversation-compaction-BX9UR8nl.js} +1 -1
  58. package/server/{conversation-compaction-D4VOmF7p.js → conversation-compaction-dFx_2wpa.js} +8 -8
  59. package/server/{conversation-service-CzZUJFEx.js → conversation-service-B3h1erHm.js} +1 -1
  60. package/server/{conversation-service-tQCIbBVZ.js → conversation-service-zgLM2g2D.js} +37 -13
  61. package/server/{conversations-bFDaD5YN.js → conversations-Ch7UGi0F.js} +1 -1
  62. package/server/{conversations-C75EFFjf.js → conversations-JyrMSeOh.js} +5 -5
  63. package/server/{cost-CiIwxH1D.js → cost-CxXv7ei-.js} +10 -2
  64. package/server/cost-DR57uJFP.js +838 -0
  65. package/server/{cost-BCWEkvro.js → cost-MZ7EZFDc.js} +3 -3
  66. package/server/{cost-sync-DOkdE_yB.js → cost-sync-Bq_dyq9k.js} +3 -3
  67. package/server/{dag-BPc74hwj.js → dag-CKUsr8wB.js} +2 -2
  68. package/server/{dangerous-git-ops-By9iguTP.js → dangerous-git-ops-BOtXCFkT.js} +1 -1
  69. package/server/dashboard-db-worker.js +61 -11
  70. package/server/{deacon-CzSZMtb-.js → deacon-BUOpTnmQ.js} +3 -3
  71. package/server/{deacon-B24dNzr8.js → deacon-C7qZxRuW.js} +125 -165
  72. package/server/{deacon-canonical-state-CkvxRPck.js → deacon-canonical-state-hcaZgjoT.js} +2 -2
  73. package/server/{deacon-event-client-Do6Z2gKl.js → deacon-event-client-Coiopt4u.js} +2 -2
  74. package/server/{deacon-event-client-BYIQBu0T.js → deacon-event-client-DJ71Tifg.js} +1 -1
  75. package/server/{deacon-nudge-log-CzM9JA9t.js → deacon-nudge-log-pcliw8Dr.js} +1 -1
  76. package/server/{deacon-pending-lifecycle-BObEdT-L.js → deacon-pending-lifecycle-Dv0-8bZG.js} +3 -3
  77. package/server/deacon.js +11 -11
  78. package/server/dead-end-trip-B91w2PGV.js +2 -0
  79. package/server/{dead-end-trip-CnVmjnya.js → dead-end-trip-DH_hA7yS.js} +3 -3
  80. package/server/{delivery-gyce0vQ7.js → delivery-zJM4aIkf.js} +1 -1
  81. package/server/{deploy-patrol-CEwwEYDM.js → deploy-patrol-Cv96N0s6.js} +8 -8
  82. package/server/deploy-queue-2cN86Lg4.js +2 -0
  83. package/server/{deploy-queue-r96ojDI3.js → deploy-queue-EcksuKE2.js} +2 -2
  84. package/server/{deploy-window-D_3hhfxt.js → deploy-window-BXbzS0zN.js} +4 -4
  85. package/server/{deploy-window-DeJK8mTK.js → deploy-window-CHgL_TTN.js} +1 -1
  86. package/server/{dev-supervisor-DZWwpENk.js → dev-supervisor-lNaYB136.js} +2 -2
  87. package/server/{devcontainer-renderer-d-9dCV_2.js → devcontainer-renderer-q8q9aXRd.js} +3 -3
  88. package/server/{dist-DsLAsFSh.js → dist-CoR2sivG.js} +1 -1
  89. package/server/dist-FHv1s5ez.js +3 -0
  90. package/server/{docker-CRPHBylA.js → docker-BNd0tMdS.js} +1 -1
  91. package/server/{docker-B2mUBzGk.js → docker-Dk-shfga.js} +3 -3
  92. package/server/{dod-DWtilRLx.js → dod-BAk5arLF.js} +1 -1
  93. package/server/{done-preflight-BDVdWed5.js → done-preflight-AiXnYYAy.js} +1 -1
  94. package/server/{done-preflight-D4ukUf-S.js → done-preflight-CukR3Br8.js} +5 -5
  95. package/server/{durable-review-pipeline-CaCbEJSt.js → durable-review-pipeline-BOEZ0chh.js} +1 -1
  96. package/server/{durable-review-pipeline-B3OS2_He.js → durable-review-pipeline-Djx_lvFd.js} +1 -1
  97. package/server/{ensure-devcontainer-rGSh0JHK.js → ensure-devcontainer-BjMV_gdX.js} +1 -1
  98. package/server/{ensure-devcontainer-BUeBRjmm.js → ensure-devcontainer-YXncXZ5Q.js} +4 -4
  99. package/server/{esm-shims-oAaKIa-a.js → esm-shims-deFq5Hhl.js} +1 -1
  100. package/server/{event-store-Db4w4YIY.js → event-store-CFnLP8w-.js} +1 -1
  101. package/server/{event-store-BCSgMubf.js → event-store-DbjldlXW.js} +5 -5
  102. package/server/{event-store-provider-DlSQND3V.js → event-store-provider-Bu1Qrg6v.js} +1 -1
  103. package/server/{events-B6zioJA_.js → events-Bb2x5ijT.js} +3 -3
  104. package/server/{factory-BrdqXBeK.js → factory-DfIQG-qW.js} +4 -4
  105. package/server/{feature-registry-storage-zh3ZXW6f.js → feature-registry-storage-BzAGS4DA.js} +2 -2
  106. package/server/{features-BGntOWdy.js → features-KxOILHX8.js} +2 -2
  107. package/server/{feedback-stuck-retirement-DpA5u1kt.js → feedback-stuck-retirement-BqTHm-1Z.js} +2 -2
  108. package/server/{feedback-target-D7GxdUYG.js → feedback-target-BjLidX0M.js} +10 -10
  109. package/server/{feedback-target-Ddqk93NF.js → feedback-target-D2CIZFwc.js} +1 -1
  110. package/server/{feedback-writer-CH2846DP.js → feedback-writer-BrSQ4fC-.js} +1 -1
  111. package/server/{feedback-writer-C1gCLFmp.js → feedback-writer-Dgrma-L1.js} +5 -5
  112. package/server/{flywheel-CjW2L7BS.js → flywheel-D5FchYg4.js} +16 -16
  113. package/server/{flywheel-HJt7QdWP.js → flywheel-Ds0eOd1P.js} +1 -1
  114. package/server/{flywheel-v1cCOBx-.js → flywheel-X6kvGnf2.js} +15 -15
  115. package/server/{flywheel-merge-order-D_yyAlND.js → flywheel-merge-order-BTY73Efv.js} +17 -15
  116. package/server/{flywheel-merge-order-4fNRN2F2.js → flywheel-merge-order-PTHnouQS.js} +1 -1
  117. package/server/{forge-RVTCK_5X.js → forge-B08cRXEb.js} +2 -2
  118. package/server/forge-egNLsjVi.js +2 -0
  119. package/server/{from-BnLgKYvw.js → from-C3dzmjSO.js} +1 -1
  120. package/server/{fs-lock-C7J-ugIf.js → fs-lock-DfiYlr5u.js} +2 -2
  121. package/server/{fts-operations-CU0B5WUx.js → fts-operations-Do1SP0w4.js} +2 -2
  122. package/server/{git-info-BSrI9owC.js → git-info-DMOSfJ9I.js} +1 -1
  123. package/server/{git-utils-DW8-jIUJ.js → git-utils-DfpFkvwk.js} +4 -4
  124. package/server/{git-utils-CsKV0Dis.js → git-utils-fcK3ZRNj.js} +1 -1
  125. package/server/{github-app-7ywLhuZO.js → github-app-Co8ZhyUJ.js} +2 -2
  126. package/server/{github-app-Oi5hdn1n.js → github-app-HAqQZZRD.js} +1 -1
  127. package/server/{github-client-Cy0fSj1a.js → github-client-C7MUxFzX.js} +1 -1
  128. package/server/{github-client-DAbuXLuk.js → github-client-wqbDCmlL.js} +2 -2
  129. package/server/{github-pr-lookup-Dhh3ec1V.js → github-pr-lookup-DdLCDdu9.js} +2 -2
  130. package/server/{harness-binary-tMmgJfC1.js → harness-binary-BuakhXkB.js} +2 -2
  131. package/server/{harness-resolve-DusNpVEe.js → harness-resolve-CISjc9FR.js} +4 -4
  132. package/server/{health-events-BYDZ9n2i.js → health-events-9RhRGZK1.js} +1 -1
  133. package/server/{health-events-DNw9Mzw9.js → health-events-CIE7gy34.js} +2 -2
  134. package/server/{hooks-B4wj32l2.js → hooks-CmL3TXla.js} +1 -1
  135. package/server/{hooks-BjBjxqNh.js → hooks-D55VTdQS.js} +2 -2
  136. package/server/{hume-BP9YbxaE.js → hume-1FJmNDTq.js} +2 -2
  137. package/server/hume-gXLmRhmN.js +3 -0
  138. package/server/{identity-C23uY8dZ.js → identity-CZbJ0xpl.js} +3 -3
  139. package/server/{idle-stack-reaper-BSxb1bln.js → idle-stack-reaper-CjovDCet.js} +4 -4
  140. package/server/{idle-stack-reaper-Bw0rU9GC.js → idle-stack-reaper-DhbFdkWv.js} +1 -1
  141. package/server/{in-flight-guard-DuxabAHT.js → in-flight-guard-B7khcBdQ.js} +1 -1
  142. package/server/{infra-CHIvOb9q.js → infra-BbSWNOpH.js} +10 -4
  143. package/server/{injection-BYUt8ml1.js → injection-BSnn_10a.js} +8 -8
  144. package/server/{injection-BviePcm3.js → injection-DsQDBSEi.js} +1 -1
  145. package/server/inspect-agent-BuSYgRQs.js +2 -0
  146. package/server/{inspect-agent-sV_19NxZ.js → inspect-agent-DS8j2v6U.js} +12 -12
  147. package/server/{internal-token-DoVzb4b7.js → internal-token-CUKcTWSG.js} +2 -2
  148. package/server/{internal-token-BOtIRJU7.js → internal-token-CkrMLCLU.js} +1 -1
  149. package/server/{io-DKrWd3gX.js → io-BgzG56av.js} +4 -4
  150. package/server/{issue-closed-6RQsAjDX.js → issue-closed-DZEwD3ol.js} +7 -7
  151. package/server/{issue-lifecycle-DOPVv7xz.js → issue-lifecycle-Bnfbpkmk.js} +1 -1
  152. package/server/{issue-lifecycle-D9nLErvS.js → issue-lifecycle-LgYeE1o2.js} +25 -25
  153. package/server/{issue-service-singleton-B2xy-IS9.js → issue-service-singleton-Bsb0GaY8.js} +10 -10
  154. package/server/{issue-service-singleton-CvgNAWqK.js → issue-service-singleton-COEqWNKE.js} +1 -1
  155. package/server/{issue-title-fallback-DTSCQVu0.js → issue-title-fallback-D4_b2XwP.js} +3 -3
  156. package/server/{issues-e_Ck1Ln2.js → issues-DYAEUW45.js} +2 -2
  157. package/server/{jsonl-parser-DqxVCZ1k.js → jsonl-parser-1IqHI9Yb.js} +3 -3
  158. package/server/{jsonl-resolver-07OS3qOr.js → jsonl-resolver-BJ8Hg-yD.js} +8 -8
  159. package/server/{kimi-code-vtXl2DR5.js → kimi-code-Cdkk9vRU.js} +1 -1
  160. package/server/{kimi-code-BjtAHIz1.js → kimi-code-DwqLCWFw.js} +11 -11
  161. package/server/{kimi-parser-B1lgy2Vt.js → kimi-parser-DFsZQArz.js} +2 -2
  162. package/server/{label-cleanup-D2zUMasf.js → label-cleanup-Bej6xDZK.js} +3 -3
  163. package/server/{lifecycle-0NOEzomy.js → lifecycle-BibLMHBH.js} +2 -2
  164. package/server/{lifecycle-DaCovZwn.js → lifecycle-CMpSB9sn.js} +6 -6
  165. package/server/{lifecycle-io-6WL46dsB.js → lifecycle-io-CCCAMefe.js} +5 -5
  166. package/server/{lifecycle-io-BBMTaP7S.js → lifecycle-io-CLWwYZaR.js} +1 -1
  167. package/server/{linear-client-BTGApNLo.js → linear-client-BtYl16Cy.js} +1 -1
  168. package/server/{linear-client-7fQThJTc.js → linear-client-fpL-qJEa.js} +2 -2
  169. package/server/{linear-mcp-auth-B8pYRsiU.js → linear-mcp-auth-CQ7ROT1X.js} +1 -1
  170. package/server/{linear-mcp-auth-Nk5s3L9M.js → linear-mcp-auth-nAYWoUbH.js} +5 -5
  171. package/server/memory-fts-worker.js +1 -1
  172. package/server/{memory-governor-Cqvbusr4.js → memory-governor-Mi5zF5zw.js} +87 -21
  173. package/server/{memory-pressure-patrol-DPb8foam.js → memory-pressure-patrol-CDeDh46A.js} +38 -14
  174. package/server/{merge-BB_bjJ9a.js → merge-DCuDLiy9.js} +1 -1
  175. package/server/{merge-FZ78_cEz.js → merge-_XIivhkq.js} +3 -3
  176. package/server/{merge-agent-BuoC_PRZ.js → merge-agent-svBDRWB6.js} +2 -2
  177. package/server/{merge-agent-B3jRrlS1.js → merge-agent-zF9vqWqY.js} +31 -31
  178. package/server/{merge-batch-B8bVjFWS.js → merge-batch-BJjzUUL7.js} +1 -1
  179. package/server/{merge-completeness-DQt7Qa7i.js → merge-completeness-CQPqu-pI.js} +4 -4
  180. package/server/{merge-completeness-DkdabVch.js → merge-completeness-CeQheehh.js} +1 -1
  181. package/server/merge-eligibility-CJrBhQQe.js +3 -0
  182. package/server/merge-eligibility-DhxVE8qU.js +51 -0
  183. package/server/merge-ops-CUzpOPtO.js +2 -0
  184. package/server/{merge-rebase-qq40s91P.js → merge-rebase-Bjo45m3k.js} +2 -2
  185. package/server/merge-rebase-DkfcUT60.js +2 -0
  186. package/server/{merge-set-BmRRflt0.js → merge-set-COZvz2nx.js} +4 -4
  187. package/server/{merge-set-BTNYvxM3.js → merge-set-ChxZgjBB.js} +1 -1
  188. package/server/{merge-sync-CJpOa0cZ.js → merge-sync-CCi1Esdx.js} +2 -2
  189. package/server/{merge-sync-0m2Q087q.js → merge-sync-DuJ6Vkl3.js} +1 -1
  190. package/server/{merge-train-iwKqjtCF.js → merge-train-DTJXF8ph.js} +4 -4
  191. package/server/{merge-train-deps-CH5Mr3vN.js → merge-train-deps-C0P0qGKe.js} +4 -4
  192. package/server/{merge-verification-JJc5GC2t.js → merge-verification-C5FexOBZ.js} +6 -6
  193. package/server/{merged-docker-cleanup-worker-CrhTdxZV.js → merged-docker-cleanup-worker-0SEDG3Ao.js} +1 -1
  194. package/server/{merged-docker-cleanup-worker-BOqWA373.js → merged-docker-cleanup-worker-C-kSp_jw.js} +3 -3
  195. package/server/{messaging-nuwStbdQ.js → messaging-DQi-WEFB.js} +1 -1
  196. package/server/{multipart-parser-DxuW_rZV.js → multipart-parser-BYwfKOVU.js} +2 -2
  197. package/server/{no-resume-mode-xuYLFhLw.js → no-resume-mode-DjMQRkId.js} +1 -1
  198. package/server/node_modules/.package-lock.json +28 -28
  199. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/package.json +2 -2
  200. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/70_cli/10_basics.ts +4 -2
  201. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.d.ts.map +1 -1
  202. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js +12 -9
  203. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js.map +1 -1
  204. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js +1 -1
  205. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js.map +1 -1
  206. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +6 -6
  207. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeClusterSocket.ts +15 -12
  208. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocket.ts +1 -1
  209. package/server/node_modules/@types/node/README.md +1 -1
  210. package/server/node_modules/@types/node/buffer.buffer.d.ts +10 -5
  211. package/server/node_modules/@types/node/buffer.d.ts +1 -0
  212. package/server/node_modules/@types/node/crypto.d.ts +2 -4
  213. package/server/node_modules/@types/node/dgram.d.ts +119 -4
  214. package/server/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
  215. package/server/node_modules/@types/node/ffi.d.ts +1 -1
  216. package/server/node_modules/@types/node/fs/promises.d.ts +61 -65
  217. package/server/node_modules/@types/node/fs.d.ts +86 -76
  218. package/server/node_modules/@types/node/http.d.ts +18 -2
  219. package/server/node_modules/@types/node/http2.d.ts +12 -4
  220. package/server/node_modules/@types/node/index.d.ts +1 -0
  221. package/server/node_modules/@types/node/inspector.d.ts +2 -1
  222. package/server/node_modules/@types/node/net.d.ts +108 -16
  223. package/server/node_modules/@types/node/package.json +3 -3
  224. package/server/node_modules/@types/node/perf_hooks.d.ts +31 -19
  225. package/server/node_modules/@types/node/process.d.ts +52 -0
  226. package/server/node_modules/@types/node/quic.d.ts +252 -42
  227. package/server/node_modules/@types/node/sqlite.d.ts +6 -2
  228. package/server/node_modules/@types/node/stream/iter.d.ts +4 -4
  229. package/server/node_modules/@types/node/stream/web.d.ts +20 -0
  230. package/server/node_modules/@types/node/test.d.ts +36 -0
  231. package/server/node_modules/@types/node/tls.d.ts +50 -15
  232. package/server/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
  233. package/server/node_modules/@types/node/ts5.6/index.d.ts +1 -0
  234. package/server/node_modules/@types/node/ts5.7/index.d.ts +1 -0
  235. package/server/node_modules/@types/node/tty.d.ts +4 -3
  236. package/server/node_modules/@types/node/vfs.d.ts +211 -0
  237. package/server/node_modules/@types/node/vm.d.ts +1 -1
  238. package/server/node_modules/@types/node/zlib.d.ts +17 -0
  239. package/server/node_modules/effect/node_modules/uuid/README.md +19 -19
  240. package/server/node_modules/effect/node_modules/uuid/dist/v1.js +7 -3
  241. package/server/node_modules/effect/node_modules/uuid/dist/v7.js +5 -2
  242. package/server/node_modules/effect/node_modules/uuid/dist-node/v1.js +7 -3
  243. package/server/node_modules/effect/node_modules/uuid/dist-node/v7.js +5 -2
  244. package/server/node_modules/effect/node_modules/uuid/package.json +4 -3
  245. package/server/node_modules/msgpackr/README.md +1 -0
  246. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +13 -7
  247. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  248. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  249. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  250. package/server/node_modules/msgpackr/dist/index.js +13 -7
  251. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  252. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  253. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  254. package/server/node_modules/msgpackr/dist/node.cjs +13 -7
  255. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  256. package/server/node_modules/msgpackr/dist/test.js +63 -7
  257. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  258. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +11 -5
  259. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  260. package/server/node_modules/msgpackr/index.d.cts +1 -0
  261. package/server/node_modules/msgpackr/index.d.ts +1 -0
  262. package/server/node_modules/msgpackr/pack.js +2 -2
  263. package/server/node_modules/msgpackr/package.json +1 -1
  264. package/server/node_modules/msgpackr/unpack.js +11 -5
  265. package/server/node_modules/picomatch/lib/parse.js +10 -1
  266. package/server/node_modules/picomatch/lib/scan.js +30 -18
  267. package/server/node_modules/picomatch/package.json +1 -1
  268. package/server/node_modules/protobufjs/dist/light/protobuf.js +59 -6
  269. package/server/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  270. package/server/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  271. package/server/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  272. package/server/node_modules/protobufjs/dist/minimal/protobuf.js +22 -2
  273. package/server/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  274. package/server/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  275. package/server/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  276. package/server/node_modules/protobufjs/dist/protobuf.js +59 -6
  277. package/server/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  278. package/server/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  279. package/server/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  280. package/server/node_modules/protobufjs/package.json +1 -1
  281. package/server/node_modules/protobufjs/src/decoder.js +32 -3
  282. package/server/node_modules/protobufjs/src/reader.js +20 -0
  283. package/server/node_modules/protobufjs/src/wrappers.js +5 -1
  284. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  285. package/server/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
  286. package/server/node_modules/undici/docs/docs/api/EventSource.md +4 -0
  287. package/server/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
  288. package/server/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
  289. package/server/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
  290. package/server/node_modules/undici/lib/core/symbols.js +2 -0
  291. package/server/node_modules/undici/lib/dispatcher/agent.js +7 -2
  292. package/server/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  293. package/server/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
  294. package/server/node_modules/undici/lib/dispatcher/client-h2.js +43 -3
  295. package/server/node_modules/undici/lib/dispatcher/client.js +3 -2
  296. package/server/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  297. package/server/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  298. package/server/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  299. package/server/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +10 -3
  300. package/server/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
  301. package/server/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  302. package/server/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  303. package/server/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +91 -21
  304. package/server/node_modules/undici/lib/handler/cache-handler.js +29 -5
  305. package/server/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  306. package/server/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  307. package/server/node_modules/undici/lib/handler/redirect-handler.js +21 -4
  308. package/server/node_modules/undici/lib/handler/retry-handler.js +148 -30
  309. package/server/node_modules/undici/lib/interceptor/cache.js +65 -12
  310. package/server/node_modules/undici/lib/interceptor/decompress.js +115 -13
  311. package/server/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  312. package/server/node_modules/undici/lib/interceptor/dns.js +7 -0
  313. package/server/node_modules/undici/lib/interceptor/dump.js +10 -23
  314. package/server/node_modules/undici/lib/mock/mock-agent.js +13 -1
  315. package/server/node_modules/undici/lib/mock/mock-utils.js +11 -10
  316. package/server/node_modules/undici/lib/util/cache.js +45 -3
  317. package/server/node_modules/undici/lib/web/cookies/parse.js +150 -147
  318. package/server/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  319. package/server/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  320. package/server/node_modules/undici/lib/web/fetch/index.js +6 -0
  321. package/server/node_modules/undici/lib/web/fetch/request.js +2 -3
  322. package/server/node_modules/undici/lib/web/fetch/util.js +6 -1
  323. package/server/node_modules/undici/lib/web/webidl/index.js +3 -3
  324. package/server/node_modules/undici/lib/web/websocket/connection.js +1 -1
  325. package/server/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  326. package/server/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  327. package/server/node_modules/undici/package.json +3 -3
  328. package/server/node_modules/undici/types/client.d.ts +10 -0
  329. package/server/node_modules/undici/types/interceptors.d.ts +2 -0
  330. package/server/node_modules/undici/types/mock-agent.d.ts +11 -10
  331. package/server/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
  332. package/server/node_modules/undici-types/client.d.ts +8 -3
  333. package/server/node_modules/undici-types/connector.d.ts +1 -0
  334. package/server/node_modules/undici-types/cookies.d.ts +1 -1
  335. package/server/node_modules/undici-types/dispatcher.d.ts +3 -3
  336. package/server/node_modules/undici-types/errors.d.ts +10 -0
  337. package/server/node_modules/undici-types/fetch.d.ts +5 -1
  338. package/server/node_modules/undici-types/handlers.d.ts +2 -0
  339. package/server/node_modules/undici-types/interceptors.d.ts +1 -1
  340. package/server/node_modules/undici-types/mock-interceptor.d.ts +5 -1
  341. package/server/node_modules/undici-types/package.json +1 -1
  342. package/server/node_modules/undici-types/proxy-agent.d.ts +7 -0
  343. package/server/{orphan-proposed-reconciler-gf4TxfZb.js → orphan-proposed-reconciler--V8GIzmY.js} +2 -2
  344. package/server/{orphan-proposed-reconciler-Dmk0kO_p.js → orphan-proposed-reconciler-BSsKWmsB.js} +21 -21
  345. package/server/package-lock.json +29 -29
  346. package/server/package.json +1 -1
  347. package/server/{pan-dir-BMda7tQj.js → pan-dir-COaYhZel.js} +4 -4
  348. package/server/{parked-residue-BiHb8cD7.js → parked-residue-Dvr4W9P6.js} +68 -64
  349. package/server/{paths-DEe9j-kw.js → paths-Cm1Q7Old.js} +2 -2
  350. package/server/{pending-lifecycle-claim-J5uIIJPu.js → pending-lifecycle-claim-yAwDuGS4.js} +1 -1
  351. package/server/{pickup-D1UbSDPd.js → pickup-Dle6k9Xt.js} +1 -1
  352. package/server/{pipeline-agent-reader-D-6okryb.js → pipeline-agent-reader-DCCwbUj8.js} +3 -3
  353. package/server/{pipeline-membership-PGX3Pe8V.js → pipeline-membership-BV4hdkHm.js} +1 -1
  354. package/server/{pipeline-membership-CCbgBzNC.js → pipeline-membership-C9ykcjsn.js} +1 -1
  355. package/server/{pipeline-membership-gather-BRhU7XPx.js → pipeline-membership-gather-DGoDOfKO.js} +1 -1
  356. package/server/{pipeline-membership-gather-BK4dzh0X.js → pipeline-membership-gather-UN7kHpCD.js} +10 -10
  357. package/server/{pipeline-notifier-BNAV9kpa.js → pipeline-notifier-DfH2i_zP.js} +2 -2
  358. package/server/{pipeline-notifier-DvHLaXKb.js → pipeline-notifier-DsCfxoSU.js} +1 -1
  359. package/server/{post-merge-lifecycle-worker-DAWgzXQA.js → post-merge-lifecycle-worker-V51p8tSm.js} +2 -2
  360. package/server/{post-merge-state-DC2_0t12.js → post-merge-state-Cym5NVlB.js} +4 -4
  361. package/server/{prd-locations-BbAvqQmT.js → prd-locations-CPuMD55x.js} +3 -3
  362. package/server/{project-pipelines-By_5WcT4.js → project-pipelines-DdDKdXrG.js} +2 -2
  363. package/server/{project-repos-3bI6t4fO.js → project-repos-CNrLxJDg.js} +1 -1
  364. package/server/{project-repos--QeCg7yQ.js → project-repos-DqAT7YV6.js} +2 -2
  365. package/server/{project-resource-refresh-queue-BaZC79S3.js → project-resource-refresh-queue-C-umDazS.js} +1 -1
  366. package/server/{project-resource-refresh-queue-x-K9mvpP.js → project-resource-refresh-queue-Dh8k2SB7.js} +17 -17
  367. package/server/{projects-LftaVK99.js → projects-Crur9uCa.js} +1 -1
  368. package/server/{prompts-BotGu-6W.js → prompts-CvtVJUpG.js} +2 -2
  369. package/server/{providers-BL1I66sM.js → providers-1BlEh5x1.js} +7 -7
  370. package/server/{providers-Dqgz3MY5.js → providers-Bun8zer5.js} +1 -1
  371. package/server/public/assets/{chunk-BO2N2NFS-D5Fz5jND.js → chunk-BO2N2NFS-DzUNVdeo.js} +4 -4
  372. package/server/public/assets/{diagram-OG6HWLK6-Eux0gWFq.js → diagram-OG6HWLK6-D5iThVwA.js} +1 -1
  373. package/server/public/assets/{dist-D-JX_u7m.js → dist-BLq-IR2D.js} +3 -3
  374. package/server/public/assets/{dist-C3zShwhA.js → dist-RyrOs5EF.js} +1 -1
  375. package/server/public/assets/{ganttDiagram-6RSMTGT7-UH3aweia.js → ganttDiagram-6RSMTGT7-n8bUPXAS.js} +1 -1
  376. package/server/public/assets/{highlighted-body-OFNGDK62-ccIQ-WXS.js → highlighted-body-OFNGDK62-1npo3yiG.js} +1 -1
  377. package/server/public/assets/{index-BTVcdPve.js → index-BvN8bWpz.js} +149 -149
  378. package/server/public/assets/index-DgoS288w.css +1 -0
  379. package/server/public/assets/{linear-Cnnu4YQy.js → linear-Dd96gky1.js} +1 -1
  380. package/server/public/assets/mermaid-GHXKKRXX-fP93Za-W.js +1 -0
  381. package/server/public/assets/{pieDiagram-4H26LBE5-BD8-Tye6.js → pieDiagram-4H26LBE5-CynZvpYP.js} +1 -1
  382. package/server/public/assets/{prod-Ca6aKMts.js → prod-DBuCX9g-.js} +4 -4
  383. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BmSrVyFD.js → quadrantDiagram-W4KKPZXB-BNlEKLKN.js} +1 -1
  384. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CEGy8Das.js → sankeyDiagram-5OEKKPKP-Cq0AMnkD.js} +1 -1
  385. package/server/public/assets/{xychartDiagram-2RQKCTM6-VnQ8iY8s.js → xychartDiagram-2RQKCTM6-D7GXcBy2.js} +1 -1
  386. package/server/public/index.html +2 -2
  387. package/server/pull-requests-DV_rJ-1u.js +2 -0
  388. package/server/{pull-requests-Cp_FDT8-.js → pull-requests-DrhWU9MW.js} +3 -3
  389. package/server/{rally-bQpBzUNf.js → rally-D5QkIZeb.js} +3 -3
  390. package/server/rally-DlXjOIAG.js +3 -0
  391. package/server/{rally-api-Ij1Zt0NI.js → rally-api-BdNfpNGk.js} +1 -1
  392. package/server/{rally-api-CqAIJ8RX.js → rally-api-CNlcoTFM.js} +2 -2
  393. package/server/{rally-client-CN5vh4Ac.js → rally-client-BCU7mVWE.js} +1 -1
  394. package/server/{rally-client-qKbCNRVW.js → rally-client-C3eB9TM-.js} +4 -4
  395. package/server/{rebuild-stack-DrMyA_mA.js → rebuild-stack-BupKggo5.js} +2 -2
  396. package/server/{rebuild-stack-BNOMVh7C.js → rebuild-stack-CNknXJHL.js} +6 -6
  397. package/server/reconciler-ComAOr_F.js +657 -0
  398. package/server/{reconstruct-cache-mxIYCnqs.js → reconstruct-cache-DbjgwKRi.js} +7 -7
  399. package/server/{record-Ug18Cp4V.js → record-C4JJCL2f.js} +1 -1
  400. package/server/{record-update-WyhsREoH.js → record-update-CWwZsp9Y.js} +1 -1
  401. package/server/{record-update-dBGxL9OC.js → record-update-Cl56NqoQ.js} +5 -5
  402. package/server/{recovery-trip-BKLrL6NX.js → recovery-trip-DA7tCXbp.js} +3 -3
  403. package/server/{recovery-trip-wFAixKsg.js → recovery-trip-DFtSA8h5.js} +1 -1
  404. package/server/{release-engine-D9gaCBn9.js → release-engine-Dk99C48O.js} +5 -5
  405. package/server/{release-set-DPHHzEGx.js → release-set-x8KH3nrE.js} +3 -3
  406. package/server/{remote-BUEeUic6.js → remote-BMZmJC5E.js} +3 -3
  407. package/server/{remote-BU6ONLpv.js → remote-DyZIg94K.js} +3 -3
  408. package/server/{remote-agents-CSaTLi3u.js → remote-agents-Blb0vO_M.js} +6 -6
  409. package/server/{remote-agents-BVtASiOF.js → remote-agents-MbWzm5Fh.js} +1 -1
  410. package/server/{remote-completion-CBV3b9TI.js → remote-completion-Bcd13o-J.js} +12 -12
  411. package/server/{resolver-DvSMXty7.js → resolver-CZVWKCx0.js} +7 -7
  412. package/server/{resolver-gxv97jsQ.js → resolver-tJeEkPK5.js} +2 -2
  413. package/server/{resume-DvHuF-bm.js → resume-DmF2andq.js} +1 -1
  414. package/server/{review-agent-esZ0QXdY.js → review-agent-CmJeQc0K.js} +30 -30
  415. package/server/{review-agent-DgkUPRx0.js → review-agent-DM9S22BL.js} +2 -2
  416. package/server/{review-artifacts-DGGEobLp.js → review-artifacts-DCiaejJK.js} +6 -6
  417. package/server/{review-convoy-liveness-DmO8dIBH.js → review-convoy-liveness-C9F1Q1LN.js} +8 -8
  418. package/server/{review-run-recovery-Ct0q7FkE.js → review-run-recovery-C5TEICtx.js} +2 -2
  419. package/server/{review-run-recovery-DHiiw7d8.js → review-run-recovery-CRGBh7xs.js} +1 -1
  420. package/server/{review-status-yOGD2MuK.js → review-status-C3PJkfjv.js} +55 -45
  421. package/server/{review-status-C_kQeeX0.js → review-status-CDs0jQV6.js} +1 -1
  422. package/server/{review-status-emit-BZz1Y_22.js → review-status-emit-De6PF3ZH.js} +3 -3
  423. package/server/{review-status-enrichment-BWH0XW_m.js → review-status-enrichment-CclcG8jk.js} +3 -3
  424. package/server/{review-status-sync-Bq00Loey.js → review-status-sync-B3GKewT_.js} +1 -1
  425. package/server/{review-status-sync-2C9lk85r.js → review-status-sync-wvgdR1yZ.js} +11 -8
  426. package/server/{review-verdict-feedback-CE_tr2iQ.js → review-verdict-feedback-20s9pG0w.js} +7 -7
  427. package/server/{review-verdict-feedback-Brjaxoda.js → review-verdict-feedback-DkMx_cKj.js} +1 -1
  428. package/server/{review-verdict-writer-Ca2V7QSY.js → review-verdict-writer-BcG5RBWF.js} +7 -7
  429. package/server/{review-verdict-writer-CD-4kDVx.js → review-verdict-writer-CaJPCD-q.js} +1 -1
  430. package/server/{rollup-B6g9Nr6L.js → rollup-C-GXHbTG.js} +8 -8
  431. package/server/{rollup--g9ik1XQ.js → rollup-DR250WyW.js} +1 -1
  432. package/server/{scanner-YxIv-fG1.js → scanner-BEAzmMNs.js} +18 -11
  433. package/server/{search-DqMN4__-.js → search-BN0MYpZW.js} +2 -2
  434. package/server/{sequence-io--b3_PsWq.js → sequence-io-BmVO0K-_.js} +4 -4
  435. package/server/{sequencer-agent-CqouKVZG.js → sequencer-agent-CuA9PA_R.js} +6 -6
  436. package/server/server.js +599 -290
  437. package/server/{service-CEp-3iow.js → service-D1SZCxH8.js} +77 -772
  438. package/server/{session-fork-GtoeCh2H.js → session-fork--SMYFKVu.js} +2 -2
  439. package/server/{settings-Ch2pCVtt.js → settings-CETdzCl6.js} +3 -3
  440. package/server/{settings-CLQcdkoD.js → settings-CFi7CdJo.js} +2 -2
  441. package/server/settings-EGNbGKpP.js +2 -0
  442. package/server/{shadow-engineering-BxiFrIKv.js → shadow-engineering-CNTXaC9O.js} +2 -2
  443. package/server/{shadow-state-nGhCNXT2.js → shadow-state-6jSyeXQ7.js} +1 -1
  444. package/server/{shadow-state-CSA1vtxr.js → shadow-state-CtYJGNXt.js} +2 -2
  445. package/server/{shadow-utils-7q5QDmMj.js → shadow-utils-Cq5eMfwI.js} +2 -2
  446. package/server/{ship-log-ie0A_SqV.js → ship-log-D-CphNZx.js} +1 -1
  447. package/server/{ship-record-BM3oVvnL.js → ship-record-STA0P11l.js} +5 -5
  448. package/server/{ship-record-DHWH1hLz.js → ship-record-neN0oUI9.js} +1 -1
  449. package/server/{ship-status-BEkddXMT.js → ship-status-DzDpufmj.js} +2 -2
  450. package/server/{smart-compaction-BkzjVpWL.js → smart-compaction-CdtKIcDk.js} +1 -1
  451. package/server/{smart-compaction-D0TE1lBD.js → smart-compaction-tndAhwoc.js} +7 -7
  452. package/server/{spawn-planning-session-s406rw1N.js → spawn-planning-session-1XLgDLjR.js} +2 -2
  453. package/server/{spawn-planning-session-CkGweSCC.js → spawn-planning-session-CAncCBLX.js} +17 -17
  454. package/server/{specialist-completion-CTAjwH5j.js → specialist-completion-BMv3K54P.js} +1 -1
  455. package/server/{specialist-context-CKasRfYu.js → specialist-context-B054OP_a.js} +5 -5
  456. package/server/{specialist-handoff-logger-DrjrOmmn.js → specialist-handoff-logger-B7jzypoX.js} +2 -2
  457. package/server/{specialist-logs-Du6quZ0_.js → specialist-logs-DVhOLpwy.js} +3 -3
  458. package/server/{specialists-x-kPMhrL.js → specialists-8Pc--yZI.js} +2 -2
  459. package/server/{specialists-B-4zyE4Y.js → specialists-BVBIMc4L.js} +1 -1
  460. package/server/{specialists-b0dMMjWq.js → specialists-CC_Mnc47.js} +333 -118
  461. package/server/{specialists-CuDWiNdB.js → specialists-ChvCD2a-.js} +19 -19
  462. package/server/{specialists-registry-BYjs04iK.js → specialists-registry-Cim1fPcM.js} +2 -2
  463. package/server/{specialists-registry-1y6Rt_F1.js → specialists-registry-CoPNlhud.js} +1 -1
  464. package/server/specs-Dvq4sOy6.js +3 -0
  465. package/server/{src-CZsPs61V.js → src-C7gGe4KU.js} +6 -6
  466. package/server/{src-CY2Wl8IX.js → src-CdwN6WY6.js} +8 -2
  467. package/server/{src-DeQwpuh6.js → src-DMosbuSJ.js} +3 -3
  468. package/server/{stack-health-ypIKtkbE.js → stack-health-CvdnSVBV.js} +1 -1
  469. package/server/{stack-health-BQFSJc0l.js → stack-health-DPXaoAus.js} +3 -3
  470. package/server/{stale-task-claims-C2e1zdMT.js → stale-task-claims-UoNLemTn.js} +5 -5
  471. package/server/{staleness-Fzx_3_Hr.js → staleness-CxZaIhrn.js} +1 -1
  472. package/server/{staleness-CRDK6LFG.js → staleness-r_dkMyMG.js} +1 -1
  473. package/server/{stall-sweeper-QNk4h9m6.js → stall-sweeper-C9S8FYKz.js} +8 -8
  474. package/server/{state-home-DdG8erBI.js → state-home-BhI8O5lU.js} +2 -2
  475. package/server/{state-migrate-C6H3jfHE.js → state-migrate-DtFHcOVZ.js} +6 -6
  476. package/server/{state-mirror-DF4Lfxm0.js → state-mirror-CpuHFxHb.js} +3 -3
  477. package/server/{stuck-remediation-BDa_tXgB.js → stuck-remediation-B4nKm7B2.js} +13 -13
  478. package/server/{stuck-remediation-BVNd9txd.js → stuck-remediation-hSOOYB9B.js} +1 -1
  479. package/server/{substrate-bug-weights-service-BbbCZEtJ.js → substrate-bug-weights-service-B9f0063E.js} +3 -3
  480. package/server/{summary-fork-BvcW6bq0.js → summary-fork-CUyEqFyc.js} +14 -15
  481. package/server/{summary-fork-DIQmtOuV.js → summary-fork-DZcsOvDD.js} +2 -2
  482. package/server/{supervisor-D3jC2c7A.js → supervisor-CGtOs9Em.js} +4 -4
  483. package/server/supervisor-DoJpD33i.js +2 -0
  484. package/server/{swarm-readiness-CMWAQuWM.js → swarm-readiness-0N2p9d2C.js} +3 -3
  485. package/server/{synthesis-verdict-C-pJOPsn.js → synthesis-verdict-CJdseCuz.js} +1 -1
  486. package/server/{synthesis-verdict-DVlrLF9A.js → synthesis-verdict-CQdLbK1-.js} +2 -2
  487. package/server/{system-prerequisites-QKtIYXI2.js → system-prerequisites-DkDOEjQP.js} +2 -2
  488. package/server/{teardown-workspace-cJea1OLo.js → teardown-workspace-BxFMcWu7.js} +16 -16
  489. package/server/{test-agent-queue-C5DI_gWX.js → test-agent-queue-Dxeae55k.js} +6 -6
  490. package/server/{test-verdict-C7kmd2_Y.js → test-verdict-CJ-to_Hc.js} +1 -1
  491. package/server/{test-verdict-DUbDHqeD.js → test-verdict-hW5kILg7.js} +2 -2
  492. package/server/{tldr-daemon-BNQHwblU.js → tldr-daemon-DKCumqHU.js} +1 -1
  493. package/server/{tldr-daemon-CO08YlfQ.js → tldr-daemon-caxXegkF.js} +2 -2
  494. package/server/{tmux-B8zsqD_6.js → tmux-C-hxv71f.js} +2 -2
  495. package/server/{tmux-DWEc4Ld9.js → tmux-CvAEO9yo.js} +2 -2
  496. package/server/{token-Bez-qCB2.js → token-BdfZLRg1.js} +1 -1
  497. package/server/{tracker-config-CJzPhSHv.js → tracker-config-BjqwtkcT.js} +2 -2
  498. package/server/{tracker-utils-DJAOAuMN.js → tracker-utils-0cDe6yil.js} +2 -2
  499. package/server/{traefik-connect-D3H5I6b9.js → traefik-connect-DoQvQ6oJ.js} +1 -1
  500. package/server/{tunnel-BSdKnW0U.js → tunnel-BEM7-jgE.js} +1 -1
  501. package/server/{tunnel-Cr3ctqxp.js → tunnel-SgALz_Pi.js} +3 -3
  502. package/server/{types-fzBp9cYi.js → types-PW4zkxCM.js} +1 -1
  503. package/server/{uat-failure-feedback-IZQ-J8jt.js → uat-failure-feedback-BQzpUFQ6.js} +5 -5
  504. package/server/{uat-promote-verification-DXApKcc2.js → uat-promote-verification-BUltWC-b.js} +5 -5
  505. package/server/{uat-train-CycEzpbE.js → uat-train-B71QG16n.js} +1 -1
  506. package/server/{uat-train-IIZlz7r3.js → uat-train-BLJ0AAIc.js} +0 -0
  507. package/server/{validate-Ur4xH5bN.js → validate-DqEp2Yb9.js} +3 -3
  508. package/server/{validation-Dr6V4PXx.js → validation-DHEsL3RP.js} +4 -4
  509. package/server/{validation-CHovCoTT.js → validation-k4EpMHm0.js} +1 -1
  510. package/server/{verification-artifact-D3viYe_t.js → verification-artifact-Cmhgq4b_.js} +1 -1
  511. package/server/{verification-artifact-k5Ftpg0c.js → verification-artifact-DglwaHke.js} +1 -1
  512. package/server/{verification-runner-Dl13mmsI.js → verification-runner-BC_zNOq5.js} +16 -16
  513. package/server/{verification-runner-BuqGwm2t.js → verification-runner-Bbc-8BbR.js} +1 -1
  514. package/server/{vtt-parser-BSnAB-Og.js → vtt-parser-Va--tv27.js} +1 -1
  515. package/server/{work-agent-prompt-CJJ4tXci.js → work-agent-prompt-CQWlmw_y.js} +1 -1
  516. package/server/{work-agent-prompt-CioeOuM4.js → work-agent-prompt-DM3uza0_.js} +10 -10
  517. package/server/{work-agent-start-Ct1HVh6z.js → work-agent-start-BColr1oI.js} +1 -1
  518. package/server/{work-agent-start-B65Gqn9N.js → work-agent-start-cKf7rly8.js} +2 -2
  519. package/server/workflows-CLrEiTds.js +2 -0
  520. package/server/{workflows-AgFul1xc.js → workflows-DrC85n8j.js} +28 -28
  521. package/server/{workspace-Cy4sDd3q.js → workspace-ChRFy_F9.js} +3 -3
  522. package/server/{workspace-Cu3XlMXt.js → workspace-G3Cus8e9.js} +1 -1
  523. package/server/{workspace-anchor-drift-BI0Hz6zI.js → workspace-anchor-drift-DBbyK_Mf.js} +1 -1
  524. package/server/{workspace-anchor-drift-CMaqvizr.js → workspace-anchor-drift-z7TjOORC.js} +4 -4
  525. package/server/{workspace-config-DRYDO7Zr.js → workspace-config-D-bNq2CF.js} +1 -1
  526. package/server/{workspace-manager-CgovxDrO.js → workspace-manager-Db3pCmr7.js} +16 -16
  527. package/server/{workspace-manager-jfkKAEuO.js → workspace-manager-gz9Amovn.js} +1 -1
  528. package/server/{workspace-metadata-BNzODIv6.js → workspace-metadata-C5Ie2FMZ.js} +2 -2
  529. package/server/{workspace-metadata-BDqXzGGK.js → workspace-metadata-Do-L6GFP.js} +1 -1
  530. package/server/{workspaces-BJdPqx_J.js → workspaces-D0MWw7Mx.js} +123 -696
  531. package/sync-sources/rules/agent-message-delivery.md +21 -14
  532. package/sync-sources/rules/pan-handoff-focus-limit.md +3 -1
  533. package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +94 -46
  534. package/sync-sources/skills/pan-handoff/SKILL.md +13 -2
  535. package/server/archive-planning-BW4MKNI7.js +0 -2
  536. package/server/build-info-Bj2vQEMh.js +0 -2
  537. package/server/cli-BRuzUT_I.js +0 -2
  538. package/server/dead-end-trip-6V_CwveT.js +0 -2
  539. package/server/deploy-queue-CjLErpgw.js +0 -2
  540. package/server/dist-fCA6y2bH.js +0 -3
  541. package/server/forge-bvak6vXJ.js +0 -2
  542. package/server/hume-TYTb6fDU.js +0 -3
  543. package/server/inspect-agent-JFEaYTRa.js +0 -2
  544. package/server/merge-ops-DabXHp2i.js +0 -2
  545. package/server/merge-rebase-CXq0qsgR.js +0 -2
  546. package/server/public/assets/index-2wV4ipy_.css +0 -1
  547. package/server/public/assets/mermaid-GHXKKRXX-Bjto8iJh.js +0 -1
  548. package/server/pull-requests-jVGcVq5G.js +0 -2
  549. package/server/rally-CxhVgIQ6.js +0 -3
  550. package/server/settings-DhtPDmmI.js +0 -2
  551. package/server/specs-IYsFlM-L.js +0 -3
  552. package/server/supervisor-v0cYN2Vp.js +0 -2
  553. package/server/workflows-CfHm8lVd.js +0 -2
  554. package/sync-sources/skills/pan-gauntlet-loop/references/lessons.md +0 -60
@@ -1,60 +1,60 @@
1
1
  import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $t as findProjectByPathSync, E as init_tier_table, Ft as isOverdeckWorkspaceRuntimePath, Gt as shouldCommitLegacyWorkspaceArtifacts, Hi as resolveOhmypiExtensionPath, Ht as init_state_read_home, Kn as extractPrefixSync, Li as getOverdeckHome, Mt as init_state_plane, Nt as isGeneratedGitHookPath, O as resolveTieredExecutionEnabled, Oi as claudeSessionTranscriptExists, On as resolveProjectFromIssueSync, Or as resolveModel, Ri as init_paths, Rt as parsePorcelainStatusPaths, Vi as packageRoot, Wt as resolveStateReadHomeSync, Yn as parseIssueIdSync, _n as listProjectsAsync, fn as init_projects, fr as getProviderForModelSync, g as jsYaml, h as init_js_yaml, k as resolveTieredExecutionEnabledForIssue, ki as encodeClaudeProjectDir, l as isClaudeCodeChannelsEnabled, mr as piProviderForModel, on as getProjectSync, p as loadConfigSync, pr as init_providers, qn as init_issue_id, rr as init_harness_policy, sr as UnknownModelError, t as init_config_yaml, tr as canUseHarnessSync } from "./config-yaml-D9nfpEx1.js";
3
- import { c as getDashboardLoopbackApiUrlSync, p as init_config } from "./config-ZGjvuR6J.js";
4
- import { l as init_activity_logger, o as emitActivityEntrySync, r as emitActivityEntryDurable } from "./activity-logger-BWZhVphb.js";
5
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CHIvOb9q.js";
6
- import { $ as init_pane_choice_menu, C as init_tmux, E as killSession, G as setOption, H as sendRawKeystroke, N as listSessions, U as sessionExists, V as sendKeysAsync, W as sessionExistsSync, a as capturePaneText, ct as BLANKED_PROVIDER_ENV, dt as init_child_env, h as findManagedServerPidSync, j as listSessionNames, p as exactPaneTarget, r as capturePane, s as createSession, tt as paneHasBlockingChoiceMenu, ut as buildChildEnvWithoutTmuxSync, w as isHarnessProcessAlive } from "./tmux-DWEc4Ld9.js";
7
- import { a as getWorkspaceForIssue, o as init_resolver } from "./resolver-gxv97jsQ.js";
8
- import { a as init_event_store, n as getEventStore } from "./event-store-BCSgMubf.js";
9
- import { N as normalizeChannelReplyPayload, T as DomainEvent, n as COMPOSER_COMMAND_MANIFEST, s as getHarnessBehavior, t as init_src } from "./src-CY2Wl8IX.js";
10
- import { f as init_agent_state_sync, h as stateToOverdeckParamsForDb, u as AGENT_COLUMNS_FOR_DB } from "./pipeline-agent-reader-D-6okryb.js";
11
- import { c as ReadModelService, d as getClosedIssueIdsForReadSource, i as EventStoreService, t as IssueLifecycle } from "./issue-lifecycle-D9nLErvS.js";
12
- import { c as init_agents, g as logAgentLifecycleSync, h as init_persistent_logger, m as isTerminalIssueStage, p as getIssueStageSync } from "./agents-jXgqpHca.js";
13
- import { n as ensureSessionContextBriefingFile, r as init_briefing_freshness } from "./briefing-freshness-e_OEYZEe.js";
14
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CiIwxH1D.js";
15
- import { $r as piFifoPaths, A as saveAgentStateSync, At as init_agent_input_detection, Br as getAgentRuntimeBaseCommand, Ci as writeChannelsBridgeMcpConfig, Ct as getAgentWorkspace$1, Di as writePtyToken, Dr as init_spawn_prep, Dt as scanPendingInputsPromise, Ei as init_pty_token, F as writeAgentStateJsonSync, Ft as resumeAgent, H as waitForReadySignal, It as answerSessionPaneChoice, K as saveAgentRuntimeState, Kt as init_operator_interventions, L as clearReadySignal, Lt as captureSessionPaneChoice, Mt as parseCodexApprovalPrompt, Nr as resolveIssueWorkModel, Oi as init_pty_supervisor_locate, Ot as detectAwaitingInputForAgent, P as wipeAgentStateDirs, Pr as resolveStaffing, Qr as init_pi_fifo, Qt as getSessionId, Rt as init_session_pane_choice, S as markAgentStoppedState, Si as init_supervisor_channels, St as getAgentPendingQuestions$1, Ti as init_resume_contract, Tt as isBlockedOnPendingInput, U as getAgentRuntimeState, Ut as messageAgent, W as getAgentRuntimeStateSync, Wr as getProviderAuthMode, Xr as waitForAcpHostReady, Xt as getLatestSessionId, Yt as getActivity, Zr as waitForPromptReady, Zt as getLatestSessionIdSync, _n as listAgentStates, _r as init_bridge_token, _t as init_pending_decision_gate, ar as deliverAgentMessage, bi as dismissDevChannelsDialog, br as checkCodexAuthStatus, c as clearAgentTroubled, ci as determineModel, ct as init_tier_escalation, ei as init_ohmypi_fifo, f as getAgentDir, fi as init_provider_health, fr as setAgentDeliveryMethod, g as getAgentStateSync, gr as BRIDGE_TOKEN_HEADER, gt as detectPendingOperatorDecision, ht as restartAgent, j as setAgentPaused, jr as init_staffing, jt as normalizeAwaitingInputPrompt, k as saveAgentState, ki as resolvePtySupervisorScriptPath, kr as transitionIssueToInProgress, m as getAgentState, mt as recoverAgent, o as clearAgentPaused, or as deliverAgentPermissionDecision, pi as validateProviderHealth, pn as stopAgent, q as init_agents$1, qr as init_runtime_command, qt as operatorInterventionEvent, st as decideEscalation, ti as ohmypiFifoPaths, tn as saveSessionId, ui as getProviderExportsForModel, vn as listRunningAgents, vr as writeBridgeTokenSync, vt as computeAgentEnrichment, wi as buildResumeContract, wr as assertWorkspaceStackHealthyForSpawn, wt as init_agent_enrichment, xi as hasCompletionMarkerForAgent, xr as init_codex_auth, xt as getAgentJsonlPath$1, z as normalizeAgentId, zr as getAcpLauncherFields } from "./agent-state-BJhGIJZe.js";
16
- import { t as init_behavior } from "./behavior-BiCQzqyT.js";
17
- import { i as performHandoff, o as getAgentHealth, r as checkAllTriggers, t as getCloisterService } from "./service-CEp-3iow.js";
18
- import { a as init_feature_registry_population, o as recordFeatureRegistryLifecycle } from "./post-merge-state-DC2_0t12.js";
19
- import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-DoVzb4b7.js";
20
- import { A as init_conversations, C as getConversationByName, D as hasOtherActiveConversationOnTmuxSession, H as removeFavorite, I as markConversationActive, J as setConversationModel, K as setConversationEffort, L as markConversationEnded, P as listConversations, S as getConversationById, at as updateLastAttached, b as createConversation, g as backfillConversationModel, h as archiveConversation, ot as updateSpawnError, q as setConversationHarness, tt as updateConversationDeliveryMethod, y as clearConversationFailureState } from "./conversations-C75EFFjf.js";
21
- import { C as generateLauncherScriptSync, D as normalizeModelOverrideSync, E as init_model_validation, O as requireModelOverrideSync, S as normalizeFlywheelRunId, T as MODEL_ID_PATTERN, b as init_provenance, w as init_launcher_generator } from "./auto-spawn-consent-Dc4mtM-B.js";
22
- import { a as init_claude_permissions, o as resolvePermissionModeSync, r as getClaudePermissionFlagsStringSync, t as BYPASS_PERMISSION_MODE } from "./claude-permissions-Bc5kjX1q.js";
23
- import { A as piGlobalContextFile, D as init_layers, L as workspaceContextFile } from "./assemble-CyvEBmmq.js";
24
- import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-tMmgJfC1.js";
25
- import { c as init_stack_health, o as getWorkspaceStackHealth } from "./stack-health-BQFSJc0l.js";
2
+ import { $t as findProjectByPathSync, Ai as encodeClaudeProjectDir, E as init_tier_table, Ft as isOverdeckWorkspaceRuntimePath, Gt as shouldCommitLegacyWorkspaceArtifacts, Hi as packageRoot, Ht as init_state_read_home, Kn as extractPrefixSync, Mt as init_state_plane, Nt as isGeneratedGitHookPath, O as resolveTieredExecutionEnabled, On as resolveProjectFromIssueSync, Or as resolveModel, Ri as getOverdeckHome, Rt as parsePorcelainStatusPaths, Ui as resolveOhmypiExtensionPath, Wt as resolveStateReadHomeSync, Yn as parseIssueIdSync, _n as listProjectsAsync, fn as init_projects, fr as getProviderForModelSync, g as jsYaml, h as init_js_yaml, k as resolveTieredExecutionEnabledForIssue, ki as claudeSessionTranscriptExists, l as isClaudeCodeChannelsEnabled, mr as piProviderForModel, on as getProjectSync, p as loadConfigSync, pr as init_providers, qn as init_issue_id, rr as init_harness_policy, sr as UnknownModelError, t as init_config_yaml, tr as canUseHarnessSync, zi as init_paths } from "./config-yaml-OoH-ZpTb.js";
3
+ import { c as getDashboardLoopbackApiUrlSync, p as init_config } from "./config-Cx3N6gWz.js";
4
+ import { l as init_activity_logger, o as emitActivityEntrySync, r as emitActivityEntryDurable } from "./activity-logger-ru8ggv-d.js";
5
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BbSWNOpH.js";
6
+ import { $ as init_pane_choice_menu, C as init_tmux, E as killSession, G as setOption, H as sendRawKeystroke, K as tmuxExecAsync, N as listSessions, U as sessionExists, V as sendKeysAsync, W as sessionExistsSync, a as capturePaneText, ct as BLANKED_PROVIDER_ENV, dt as init_child_env, h as findManagedServerPidSync, j as listSessionNames, p as exactPaneTarget, r as capturePane, s as createSession, tt as paneHasBlockingChoiceMenu, ut as buildChildEnvWithoutTmuxSync, w as isHarnessProcessAlive } from "./tmux-CvAEO9yo.js";
7
+ import { a as getWorkspaceForIssue, o as init_resolver } from "./resolver-tJeEkPK5.js";
8
+ import { a as init_event_store, n as getEventStore } from "./event-store-DbjldlXW.js";
9
+ import { N as normalizeChannelReplyPayload, T as DomainEvent, n as COMPOSER_COMMAND_MANIFEST, s as getHarnessBehavior, t as init_src } from "./src-CdwN6WY6.js";
10
+ import { f as init_agent_state_sync, h as stateToOverdeckParamsForDb, u as AGENT_COLUMNS_FOR_DB } from "./pipeline-agent-reader-DCCwbUj8.js";
11
+ import { c as ReadModelService, d as getClosedIssueIdsForReadSource, i as EventStoreService, t as IssueLifecycle } from "./issue-lifecycle-LgYeE1o2.js";
12
+ import { c as init_agents, g as logAgentLifecycleSync, h as init_persistent_logger, m as isTerminalIssueStage, p as getIssueStageSync } from "./agents-DMs1aLRU.js";
13
+ import { n as ensureSessionContextBriefingFile, r as init_briefing_freshness } from "./briefing-freshness-FF0WLPMc.js";
14
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CxXv7ei-.js";
15
+ import { t as init_behavior } from "./behavior-CPX0E2Fj.js";
16
+ import { $r as piFifoPaths, A as saveAgentStateSync, At as init_agent_input_detection, Br as getAgentRuntimeBaseCommand, Ci as writeChannelsBridgeMcpConfig, Ct as getAgentWorkspace$1, Di as writePtyToken, Dr as init_spawn_prep, Dt as scanPendingInputsPromise, Ei as init_pty_token, F as writeAgentStateJsonSync, Ft as resumeAgent, H as waitForReadySignal, It as answerSessionPaneChoice, K as saveAgentRuntimeState, Kt as init_operator_interventions, L as clearReadySignal, Lt as captureSessionPaneChoice, Mt as parseCodexApprovalPrompt, Nr as resolveIssueWorkModel, Oi as init_pty_supervisor_locate, Ot as detectAwaitingInputForAgent, P as wipeAgentStateDirs, Pr as resolveStaffing, Qr as init_pi_fifo, Qt as getSessionId, Rt as init_session_pane_choice, S as markAgentStoppedState, Si as init_supervisor_channels, St as getAgentPendingQuestions$1, Ti as init_resume_contract, Tt as isBlockedOnPendingInput, U as getAgentRuntimeState, Ut as messageAgent, W as getAgentRuntimeStateSync, Wr as getProviderAuthMode, Xr as waitForAcpHostReady, Xt as getLatestSessionId, Yt as getActivity, Zr as waitForPromptReady, Zt as getLatestSessionIdSync, _n as listAgentStates, _r as init_bridge_token, _t as init_pending_decision_gate, ar as deliverAgentMessage, bi as dismissDevChannelsDialog, br as checkCodexAuthStatus, c as clearAgentTroubled, ci as determineModel, ct as init_tier_escalation, ei as init_ohmypi_fifo, f as getAgentDir, fi as init_provider_health, fr as setAgentDeliveryMethod, g as getAgentStateSync, gr as BRIDGE_TOKEN_HEADER, gt as detectPendingOperatorDecision, ht as restartAgent, j as setAgentPaused, jr as init_staffing, jt as normalizeAwaitingInputPrompt, k as saveAgentState, ki as resolvePtySupervisorScriptPath, kr as transitionIssueToInProgress, m as getAgentState, mt as recoverAgent, o as clearAgentPaused, or as deliverAgentPermissionDecision, pi as validateProviderHealth, pn as stopAgent, q as init_agents$1, qr as init_runtime_command, qt as operatorInterventionEvent, st as decideEscalation, ti as ohmypiFifoPaths, tn as saveSessionId, ui as getProviderExportsForModel, vn as listRunningAgents, vr as writeBridgeTokenSync, vt as computeAgentEnrichment, wi as buildResumeContract, wr as assertWorkspaceStackHealthyForSpawn, wt as init_agent_enrichment, xi as hasCompletionMarkerForAgent, xr as init_codex_auth, xt as getAgentJsonlPath$1, z as normalizeAgentId, zr as getAcpLauncherFields } from "./agent-state-BnyNoDWQ.js";
17
+ import { a as init_feature_registry_population, o as recordFeatureRegistryLifecycle } from "./post-merge-state-Cym5NVlB.js";
18
+ import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-CUKcTWSG.js";
19
+ import { A as init_conversations, C as getConversationByName, D as hasOtherActiveConversationOnTmuxSession, H as removeFavorite, I as markConversationActive, J as setConversationModel, K as setConversationEffort, L as markConversationEnded, P as listConversations, S as getConversationById, at as updateLastAttached, b as createConversation, g as backfillConversationModel, h as archiveConversation, ot as updateSpawnError, q as setConversationHarness, tt as updateConversationDeliveryMethod, y as clearConversationFailureState } from "./conversations-JyrMSeOh.js";
20
+ import { C as generateLauncherScriptSync, D as normalizeModelOverrideSync, E as init_model_validation, O as requireModelOverrideSync, S as normalizeFlywheelRunId, T as MODEL_ID_PATTERN, b as init_provenance, w as init_launcher_generator } from "./auto-spawn-consent-C1avLtkk.js";
21
+ import { a as init_claude_permissions, n as ensureClaudePermissionFlagSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-Bn53HCXr.js";
22
+ import { A as piGlobalContextFile, D as init_layers, L as workspaceContextFile } from "./assemble-D88iFkP-.js";
23
+ import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-BuakhXkB.js";
24
+ import { c as init_stack_health, o as getWorkspaceStackHealth } from "./stack-health-DPXaoAus.js";
26
25
  import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, m as init_types } from "./types-pLpbsNto.js";
27
- import { a as generateXBriefFilename, o as init_lifecycle } from "./lifecycle-0NOEzomy.js";
28
- import { C as init_specs, O as writeSpecForIssue, d as readPlan, g as recordTierPromotion, h as readWorkspacePlanSync, p as readTierOverrides, r as findPlan, s as init_io } from "./io-DKrWd3gX.js";
29
- import { a as getDispatchableItems, c as init_dag } from "./dag-BPc74hwj.js";
30
- import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-DusNpVEe.js";
31
- import { a as loadCloisterConfigSync, r as init_config$1 } from "./config-Doq_tF-f.js";
32
- import { a as init_state_home, c as isStateMigrated } from "./state-home-DdG8erBI.js";
33
- import { d as resolveWorkspaceRepoRootsSync, i as init_project_repos, s as resolvePrimaryWorkspaceRepoDirSync } from "./project-repos--QeCg7yQ.js";
34
- import { a as init_lifecycle_io, c as updatePlanStatus, s as transitionXBriefOnMain } from "./lifecycle-io-6WL46dsB.js";
35
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-CJzPhSHv.js";
36
- import { i as issue_service_singleton_exports, n as init_issue_service_singleton } from "./issue-service-singleton-B2xy-IS9.js";
37
- import { d as getReviewStatusSync, h as loadReviewStatuses, o as clearWorkspaceStuck, p as init_review_status, w as setReviewStatusSync } from "./review-status-yOGD2MuK.js";
38
- import { S as parseAcpConversationMessages, b as parseCodexConversationMessages, c as parseEntireConversation, g as init_ohmypi_conversation_parser, h as parsePiConversationMessages, p as init_pi_conversation_parser, t as init_conversation_service, v as parseOhmypiConversationMessages, x as init_acp_conversation_parser, y as init_codex_conversation_parser } from "./conversation-service-tQCIbBVZ.js";
39
- import { i as resolveAgentHarness, l as resolvePiSessionPath, n as readLauncherPinnedSessionId, o as resolveCodexRolloutPath, r as resolveAcpTranscriptPath, t as init_jsonl_resolver } from "./jsonl-resolver-07OS3qOr.js";
40
- import { G as liveOrderIssueLookup, H as getBook, T as resolveLiveFlywheelRunId, w as readFlywheelLaunchMetadata, y as getFlywheelRunDir, z as computeBookProgress } from "./flywheel-CjW2L7BS.js";
41
- import { t as resolveAgentGitInfo } from "./git-info-BSrI9owC.js";
42
- import { d as getResourceConfig, n as classifyMemoryPressure, p as getSystemHealthSnapshot } from "./memory-governor-Cqvbusr4.js";
43
- import { o as stopWorkspaceDocker, r as init_workspace_manager } from "./workspace-manager-CgovxDrO.js";
44
- import "./deacon-B24dNzr8.js";
45
- import { a as init_jsonl_parser, o as normalizeModelName } from "./jsonl-parser-DqxVCZ1k.js";
46
- import { i as getRuntimeForAgent } from "./agent-idle-ONBssBN_.js";
47
- import { t as recordReviewVerdict } from "./review-verdict-writer-Ca2V7QSY.js";
48
- import { r as REVIEW_SUB_ROLES } from "./review-convoy-liveness-DmO8dIBH.js";
49
- import { t as createInFlightGuard } from "./in-flight-guard-DuxabAHT.js";
50
- import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-BNzODIv6.js";
51
- import { t as resolveReviewParentRunState } from "./review-run-recovery-Ct0q7FkE.js";
26
+ import { a as generateXBriefFilename, o as init_lifecycle } from "./lifecycle-BibLMHBH.js";
27
+ import { C as init_specs, O as writeSpecForIssue, d as readPlan, g as recordTierPromotion, h as readWorkspacePlanSync, p as readTierOverrides, r as findPlan, s as init_io } from "./io-BgzG56av.js";
28
+ import { a as getDispatchableItems, c as init_dag } from "./dag-CKUsr8wB.js";
29
+ import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-CISjc9FR.js";
30
+ import { a as loadCloisterConfigSync, r as init_config$1 } from "./config-DP0VV7rX.js";
31
+ import { a as init_state_home, c as isStateMigrated } from "./state-home-BhI8O5lU.js";
32
+ import { d as resolveWorkspaceRepoRootsSync, i as init_project_repos, s as resolvePrimaryWorkspaceRepoDirSync } from "./project-repos-DqAT7YV6.js";
33
+ import { a as init_lifecycle_io, c as updatePlanStatus, s as transitionXBriefOnMain } from "./lifecycle-io-CCCAMefe.js";
34
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-BjqwtkcT.js";
35
+ import { i as issue_service_singleton_exports, n as init_issue_service_singleton } from "./issue-service-singleton-Bsb0GaY8.js";
36
+ import { d as getReviewStatusSync, h as loadReviewStatuses, o as clearWorkspaceStuck, p as init_review_status, w as setReviewStatusSync } from "./review-status-C3PJkfjv.js";
37
+ import { S as parseAcpConversationMessages, b as parseCodexConversationMessages, c as parseEntireConversation, g as init_ohmypi_conversation_parser, h as parsePiConversationMessages, p as init_pi_conversation_parser, t as init_conversation_service, v as parseOhmypiConversationMessages, x as init_acp_conversation_parser, y as init_codex_conversation_parser } from "./conversation-service-zgLM2g2D.js";
38
+ import { i as resolveAgentHarness, l as resolvePiSessionPath, n as readLauncherPinnedSessionId, o as resolveCodexRolloutPath, r as resolveAcpTranscriptPath, t as init_jsonl_resolver } from "./jsonl-resolver-BJ8Hg-yD.js";
39
+ import { G as liveOrderIssueLookup, H as getBook, T as resolveLiveFlywheelRunId, w as readFlywheelLaunchMetadata, y as getFlywheelRunDir, z as computeBookProgress } from "./flywheel-D5FchYg4.js";
40
+ import { t as resolveAgentGitInfo } from "./git-info-DMOSfJ9I.js";
41
+ import { f as getResourceConfig, m as getSystemHealthSnapshot, n as classifyMemoryPressure } from "./memory-governor-Mi5zF5zw.js";
42
+ import { o as stopWorkspaceDocker, r as init_workspace_manager } from "./workspace-manager-Db3pCmr7.js";
43
+ import "./deacon-C7qZxRuW.js";
44
+ import { i as performHandoff, o as getAgentHealth, r as checkAllTriggers, t as getCloisterService } from "./service-D1SZCxH8.js";
45
+ import { a as init_jsonl_parser, o as normalizeModelName } from "./jsonl-parser-1IqHI9Yb.js";
46
+ import { i as getRuntimeForAgent } from "./agent-idle-CQlwmcRR.js";
47
+ import { t as recordReviewVerdict } from "./review-verdict-writer-BcG5RBWF.js";
48
+ import { r as REVIEW_SUB_ROLES } from "./review-convoy-liveness-C9F1Q1LN.js";
49
+ import { t as createInFlightGuard } from "./in-flight-guard-B7khcBdQ.js";
50
+ import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-C5Ie2FMZ.js";
51
+ import { t as resolveReviewParentRunState } from "./review-run-recovery-C5TEICtx.js";
52
52
  import { basename, delimiter, dirname, isAbsolute, join, resolve, sep } from "node:path";
53
53
  import { Cause, Data, Effect, Layer, Option, Schema, Stream } from "effect";
54
- import { homedir, networkInterfaces } from "node:os";
54
+ import { homedir, networkInterfaces, tmpdir } from "node:os";
55
55
  import { createReadStream, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync } from "node:fs";
56
56
  import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
57
- import { access, appendFile, chmod, lstat, mkdir, open, readFile, readdir, realpath, rename, rm, stat, writeFile } from "node:fs/promises";
57
+ import { access, appendFile, chmod, lstat, mkdir, open, readFile, readdir, realpath, rename, rm, stat, unlink, writeFile } from "node:fs/promises";
58
58
  import { randomUUID } from "crypto";
59
59
  import { createHash as createHash$1, createHmac, randomBytes, randomUUID as randomUUID$1, timingSafeEqual } from "node:crypto";
60
60
  import { exec, execFile, spawn } from "node:child_process";
@@ -1893,7 +1893,7 @@ const getAgentOutputRoute = HttpRouter.add("GET", "/api/agents/:id/output", http
1893
1893
  } catch {}
1894
1894
  let stdout;
1895
1895
  if (isRemote && vmName) {
1896
- const { getRemoteAgentOutput } = await import("./remote-agents-BVtASiOF.js");
1896
+ const { getRemoteAgentOutput } = await import("./remote-agents-MbWzm5Fh.js");
1897
1897
  stdout = await getRemoteAgentOutput(id, vmName, parseInt(String(lines), 10) || 100);
1898
1898
  } else stdout = await Effect.runPromise(capturePane(id, parseInt(String(lines), 10) || 100));
1899
1899
  if (!stdout || stdout.trim() === "" || stdout.trim() === "Session not found") {
@@ -2724,7 +2724,7 @@ async function cleanupConversationAttachments(name) {
2724
2724
  * sessions that the lifecycle poller missed. */
2725
2725
  async function cleanupOrphanedConversationAttachments() {
2726
2726
  try {
2727
- const { listConversations } = await import("./conversations-bFDaD5YN.js");
2727
+ const { listConversations } = await import("./conversations-Ch7UGi0F.js");
2728
2728
  const convNames = new Set(listConversations().map((c) => c.name));
2729
2729
  const root = getConversationAttachmentsRoot();
2730
2730
  await runInBatches((await readdir(root, { withFileTypes: true })).filter((entry) => entry.isDirectory() && !convNames.has(entry.name)).map((entry) => join(root, entry.name)), 10, (path) => rm(path, {
@@ -3071,12 +3071,16 @@ async function waitForClaudeReady(tmuxSession) {
3071
3071
  console.warn(`[conversations] Timed out waiting for Claude Code prompt in ${tmuxSession}`);
3072
3072
  }
3073
3073
  function isPiTuiInputReady(snapshot) {
3074
- return /^\s*[❯›>]\s/m.test(snapshot) || /(?:^|\s)0(?:\.\d+)?%\s+context\s+used\b/i.test(snapshot) || /⬢[^\n]*◕/.test(snapshot);
3074
+ return /^\s*[❯›>]\s/m.test(snapshot) || /(?:^|\s)0(?:\.\d+)?%\s+context\s+used\b/i.test(snapshot);
3075
3075
  }
3076
3076
  async function waitForPiTuiReady(tmuxSession, timeoutMs = 6e4) {
3077
3077
  const deadline = Date.now() + timeoutMs;
3078
+ let stableV17FooterPolls = 0;
3078
3079
  while (Date.now() < deadline) {
3079
- if (isPiTuiInputReady(await Effect.runPromise(capturePane(tmuxSession, 40).pipe(Effect.catch(() => Effect.succeed("")))))) {
3080
+ const snapshot = await Effect.runPromise(capturePane(tmuxSession, 40).pipe(Effect.catch(() => Effect.succeed(""))));
3081
+ const mcpConnecting = /Connecting to MCP servers/i.test(snapshot) && !/MCP finished/i.test(snapshot);
3082
+ stableV17FooterPolls = /⬢[^\n]*[◕◉]/.test(snapshot) && !mcpConnecting ? stableV17FooterPolls + 1 : 0;
3083
+ if (isPiTuiInputReady(snapshot) || stableV17FooterPolls >= 21) {
3080
3084
  console.log(`[conversations] Pi TUI ready for ${tmuxSession}`);
3081
3085
  return true;
3082
3086
  }
@@ -3329,8 +3333,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3329
3333
  } else if (model) {
3330
3334
  if (!SAFE_MODEL_PATTERN.test(model)) throw new Error("Invalid model name");
3331
3335
  runtimeCommand = await getAgentRuntimeBaseCommand(model, void 0, void 0, harness);
3332
- const mode = resolvePermissionModeSync();
3333
- if (!runtimeCommand.includes("--permission-mode")) runtimeCommand = `${runtimeCommand} --permission-mode ${mode === "auto" ? "auto" : BYPASS_PERMISSION_MODE}`;
3336
+ runtimeCommand = ensureClaudePermissionFlagSync(runtimeCommand);
3334
3337
  providerExportsStr = (await getProviderExportsForModel(model, harness)).trim();
3335
3338
  if (behavior.transcriptKind === "ohmypi-jsonl") {
3336
3339
  if (getProviderForModelSync(model).name === "openai") {
@@ -3363,7 +3366,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3363
3366
  const codexApprovalPolicy = codexPermMode === "full-access" ? "never" : "on-request";
3364
3367
  const codexSandboxMode = codexPermMode === "full-access" ? "danger-full-access" : codexPermMode === "read-only" ? "read-only" : "workspace-write";
3365
3368
  const codexApprovalsReviewer = codexPermMode === "auto-review" ? "auto_review" : void 0;
3366
- const { initCodexHome, extractThreadIdFromRollout } = await import("./codex-DZhFfcWu.js");
3369
+ const { initCodexHome, extractThreadIdFromRollout } = await import("./codex-BqLZKVNm.js");
3367
3370
  initCodexHome(codexHome, {
3368
3371
  trustedDir: cwd,
3369
3372
  approvalPolicy: codexApprovalPolicy,
@@ -3383,7 +3386,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3383
3386
  if (resume) {
3384
3387
  const pinnedId = await readFile(join(getOverdeckHome(), "agents", tmuxSession, "kimi-session-id"), "utf-8").then((value) => value.trim() || void 0).catch(() => void 0);
3385
3388
  if (pinnedId) {
3386
- const { kimiSessionsRoot } = await import("./kimi-code-vtXl2DR5.js");
3389
+ const { kimiSessionsRoot } = await import("./kimi-code-Cdkk9vRU.js");
3387
3390
  if (await stat(join(kimiSessionsRoot(join(homedir(), ".kimi-code"), cwd), pinnedId, "agents", "main", "wire.jsonl")).then(() => true, () => false)) kimiResumeSessionId = pinnedId;
3388
3391
  }
3389
3392
  }
@@ -3416,7 +3419,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3416
3419
  const launchTmuxAndCaptureSession = async () => {
3417
3420
  let kimiExistingSessionsBefore;
3418
3421
  if (kimiCodeFields && !kimiCodeFields.resumeSessionId) try {
3419
- const { kimiSessionsRoot } = await import("./kimi-code-vtXl2DR5.js");
3422
+ const { kimiSessionsRoot } = await import("./kimi-code-Cdkk9vRU.js");
3420
3423
  kimiExistingSessionsBefore = new Set(await readdir(kimiSessionsRoot(join(homedir(), ".kimi-code"), cwd)));
3421
3424
  } catch {
3422
3425
  kimiExistingSessionsBefore = /* @__PURE__ */ new Set();
@@ -3455,7 +3458,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3455
3458
  } catch {}
3456
3459
  console.log(`[claude-invoke] purpose=conversation-session | model=${model || "default"} | source=conversations.ts:spawnConversationSession | session=${tmuxSession} | resume=${resume} | command="${runtimeCommand}"`);
3457
3460
  try {
3458
- const { preTrustDirectory } = await import("./workspace-manager-jfkKAEuO.js");
3461
+ const { preTrustDirectory } = await import("./workspace-manager-gz9Amovn.js");
3459
3462
  preTrustDirectory(cwd);
3460
3463
  } catch {}
3461
3464
  try {
@@ -3472,7 +3475,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3472
3475
  const codexHomeDir = codexFields.codexHome;
3473
3476
  (async () => {
3474
3477
  try {
3475
- const { waitForCodexRollout, extractThreadIdFromRollout, writeThreadId } = await import("./codex-DZhFfcWu.js");
3478
+ const { waitForCodexRollout, extractThreadIdFromRollout, writeThreadId } = await import("./codex-BqLZKVNm.js");
3476
3479
  const rollout = await waitForCodexRollout(codexHomeDir, 12e4);
3477
3480
  if (rollout) {
3478
3481
  const threadId = extractThreadIdFromRollout(rollout);
@@ -3482,14 +3485,14 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
3482
3485
  })();
3483
3486
  }
3484
3487
  if (kimiCodeFields && kimiExistingSessionsBefore) {
3485
- const { waitForNewKimiSessionAsync, writeKimiSessionId } = await import("./kimi-code-vtXl2DR5.js");
3488
+ const { waitForNewKimiSessionAsync, writeKimiSessionId } = await import("./kimi-code-Cdkk9vRU.js");
3486
3489
  const sessionId = await waitForNewKimiSessionAsync(join(homedir(), ".kimi-code"), cwd, kimiExistingSessionsBefore);
3487
3490
  if (!sessionId) throw new Error(`kimi-code session capture timed out for ${tmuxSession} — no new session directory appeared under the workspace bucket`);
3488
3491
  writeKimiSessionId(tmuxSession, sessionId);
3489
3492
  }
3490
3493
  };
3491
3494
  if (kimiCodeFields) {
3492
- const { withKimiSessionCaptureLock } = await import("./kimi-code-vtXl2DR5.js");
3495
+ const { withKimiSessionCaptureLock } = await import("./kimi-code-Cdkk9vRU.js");
3493
3496
  await withKimiSessionCaptureLock(join(homedir(), ".kimi-code"), cwd, launchTmuxAndCaptureSession);
3494
3497
  } else await launchTmuxAndCaptureSession();
3495
3498
  if (channelsBridgeMcpConfig) dismissDevChannelsDialog(tmuxSession).catch((err) => {
@@ -3759,6 +3762,184 @@ async function handleConversationRestartAll(deps) {
3759
3762
  }
3760
3763
  }
3761
3764
  //#endregion
3765
+ //#region ../../lib/pi-ask-modal.ts
3766
+ /**
3767
+ * PAN-3766 follow-up — answer an ohmypi `ask` modal from the dashboard.
3768
+ *
3769
+ * The conversation message route cannot answer a pi ask: the control channel's
3770
+ * steer/prompt lands in pi's input queue, but the modal holds the UI, so the
3771
+ * answer is swallowed and the agent stays parked. The only way through is to
3772
+ * drive the modal itself with keystrokes, exactly like the codex-approval and
3773
+ * pane-choice paths do for their native menus.
3774
+ *
3775
+ * Safety model mirrors answerSessionPaneChoice: re-verify the live state before
3776
+ * touching the session (pending ask in the transcript, modal footer and
3777
+ * question text on screen, cursor position parsed from the pane), then confirm
3778
+ * the modal is gone afterwards. Any drift returns 409 and the operator answers
3779
+ * in the terminal instead.
3780
+ */
3781
+ init_agent_enrichment();
3782
+ init_jsonl_resolver();
3783
+ init_tmux();
3784
+ const PANE_CAPTURE_LINES = 90;
3785
+ const KEYSTROKE_GAP_MS = 60;
3786
+ const DELIVERY_CONFIRM_WAIT_MS = 700;
3787
+ /** The modal footer hint — the same signature the pane detector keys on. */
3788
+ const PI_ASK_FOOTER_RE = /Enter\s+select\b.*Esc\s+cancel/i;
3789
+ /** Cursor on a numbered option: "❯ ○ 1 · Label" (boxed) or "❯ 1 - Label". */
3790
+ const PI_ASK_CURSOR_NUMBERED_RE = /❯\s*○?\s*(\d+)\s*[·.\-]/;
3791
+ const PI_ASK_CURSOR_OTHER_RE = /❯\s*○?\s*Other\b/i;
3792
+ /** Strip box-drawing chrome and collapse whitespace so wrapped pane lines compare cleanly. */
3793
+ function normalizePaneText(text) {
3794
+ return text.replace(/[╭╮╰╯│├┤┌┐└┘─┬┴┼]/g, " ").replace(/\s+/g, " ").trim();
3795
+ }
3796
+ /** Paste text into the modal's Other input — no Enter; the caller sends that separately. */
3797
+ async function pasteTextIntoSession(sessionName, text) {
3798
+ const sendId = randomUUID$1();
3799
+ const tmpFile = join(tmpdir(), `pan-pi-ask-${sendId}.txt`);
3800
+ const bufferName = `pan-pi-ask-${sendId}`;
3801
+ try {
3802
+ await writeFile(tmpFile, text, "utf-8");
3803
+ await tmuxExecAsync([
3804
+ "load-buffer",
3805
+ "-b",
3806
+ bufferName,
3807
+ tmpFile
3808
+ ], { encoding: "utf-8" });
3809
+ await tmuxExecAsync([
3810
+ "paste-buffer",
3811
+ "-b",
3812
+ bufferName,
3813
+ "-p",
3814
+ "-t",
3815
+ exactPaneTarget(sessionName)
3816
+ ], { encoding: "utf-8" });
3817
+ } finally {
3818
+ await unlink(tmpFile).catch(() => {});
3819
+ }
3820
+ }
3821
+ /**
3822
+ * The cursor's current item position (0-based): numbered options come first,
3823
+ * then "Other (type your own)" as the final item. Null when unparseable.
3824
+ */
3825
+ function piAskCursorPosition(pane, optionCount) {
3826
+ const lines = pane.split("\n");
3827
+ for (let i = lines.length - 1; i >= 0; i--) {
3828
+ const line = lines[i];
3829
+ const numbered = PI_ASK_CURSOR_NUMBERED_RE.exec(line);
3830
+ if (numbered) {
3831
+ const n = Number(numbered[1]);
3832
+ if (n >= 1 && n <= optionCount) return n - 1;
3833
+ return null;
3834
+ }
3835
+ if (PI_ASK_CURSOR_OTHER_RE.test(line)) return optionCount;
3836
+ }
3837
+ return null;
3838
+ }
3839
+ async function answerPiAskModal(sessionName, body, deps = {}) {
3840
+ try {
3841
+ const toolUseId = typeof body["toolUseId"] === "string" ? body["toolUseId"] : "";
3842
+ if (!toolUseId) return {
3843
+ body: { error: "toolUseId is required" },
3844
+ status: 400
3845
+ };
3846
+ const answers = body["answers"];
3847
+ if (!Array.isArray(answers) || answers.length !== 1 || typeof answers[0] !== "string" || !answers[0].trim()) return {
3848
+ body: { error: "answers must contain exactly one non-empty string" },
3849
+ status: 400
3850
+ };
3851
+ const answer = answers[0].trim();
3852
+ if (!await (deps.sessionExists ?? ((name) => Effect.runPromise(sessionExists(name))))(sessionName)) return {
3853
+ body: { error: "Conversation session is not running" },
3854
+ status: 409
3855
+ };
3856
+ const resolveTranscript = deps.resolveTranscript ?? ((name) => resolvePiSessionPath(name));
3857
+ const scanTranscript = deps.scanTranscript ?? scanPendingInputsPromise;
3858
+ const transcript = await resolveTranscript(sessionName);
3859
+ const pending = (transcript ? await scanTranscript(transcript) : null)?.askUserQuestions.find((q) => q.toolId === toolUseId);
3860
+ if (!pending) return {
3861
+ body: {
3862
+ error: "The question is no longer pending — it was answered or superseded",
3863
+ code: "ask-gone"
3864
+ },
3865
+ status: 409
3866
+ };
3867
+ if (pending.questions.length !== 1) return {
3868
+ body: {
3869
+ error: "This ask has multiple questions; answer it in the terminal",
3870
+ code: "multi-question-unsupported"
3871
+ },
3872
+ status: 409
3873
+ };
3874
+ const question = pending.questions[0];
3875
+ const capture = deps.capture ?? capturePaneText;
3876
+ const sendKey = deps.sendKey ?? ((name, key) => Effect.runPromise(sendRawKeystroke(name, key, "pi-ask-answer")));
3877
+ const sendText = deps.sendText ?? pasteTextIntoSession;
3878
+ const sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
3879
+ const pane = await capture(sessionName, PANE_CAPTURE_LINES);
3880
+ if (!PI_ASK_FOOTER_RE.test(pane)) return {
3881
+ body: {
3882
+ error: "The ask modal is no longer on screen",
3883
+ code: "modal-gone"
3884
+ },
3885
+ status: 409
3886
+ };
3887
+ const paneNorm = normalizePaneText(pane);
3888
+ const questionNorm = normalizePaneText(question.question).slice(0, 40);
3889
+ if (questionNorm.length >= 12 && !paneNorm.includes(questionNorm)) return {
3890
+ body: {
3891
+ error: "The ask modal changed since the dialog was rendered — refresh and re-answer",
3892
+ code: "modal-changed"
3893
+ },
3894
+ status: 409
3895
+ };
3896
+ const optionIndex = question.options.findIndex((o) => o.label.trim() === answer);
3897
+ const isCustomText = optionIndex < 0;
3898
+ const targetPosition = isCustomText ? question.options.length : optionIndex;
3899
+ const cursor = piAskCursorPosition(pane, question.options.length);
3900
+ if (cursor === null) return {
3901
+ body: {
3902
+ error: "Could not read the modal cursor — answer it from the terminal",
3903
+ code: "cursor-unknown"
3904
+ },
3905
+ status: 409
3906
+ };
3907
+ const delta = targetPosition - cursor;
3908
+ const navKey = delta > 0 ? "Down" : "Up";
3909
+ for (let i = 0; i < Math.abs(delta); i++) {
3910
+ await sendKey(sessionName, navKey);
3911
+ await sleep(KEYSTROKE_GAP_MS);
3912
+ }
3913
+ await sendKey(sessionName, "Enter");
3914
+ if (isCustomText) {
3915
+ await sleep(KEYSTROKE_GAP_MS * 3);
3916
+ await sendText(sessionName, answer);
3917
+ await sleep(KEYSTROKE_GAP_MS);
3918
+ await sendKey(sessionName, "Enter");
3919
+ }
3920
+ await sleep(DELIVERY_CONFIRM_WAIT_MS);
3921
+ const after = await capture(sessionName, PANE_CAPTURE_LINES);
3922
+ if (PI_ASK_FOOTER_RE.test(after)) return {
3923
+ body: {
3924
+ error: "Keystrokes were sent but the modal is still on screen — answer it from the terminal",
3925
+ code: "delivery-unconfirmed"
3926
+ },
3927
+ status: 409
3928
+ };
3929
+ return { body: {
3930
+ ok: true,
3931
+ answeredLabel: isCustomText ? answer : question.options[optionIndex].label
3932
+ } };
3933
+ } catch (error) {
3934
+ const message = error instanceof Error ? error.message : String(error);
3935
+ console.error("[sessions] pi-ask answer failed:", message);
3936
+ return {
3937
+ body: { error: "Internal server error" },
3938
+ status: 500
3939
+ };
3940
+ }
3941
+ }
3942
+ //#endregion
3762
3943
  //#region ../../lib/overdeck/conversation-delivery.ts
3763
3944
  init_agent_input_detection();
3764
3945
  init_conversations();
@@ -3972,6 +4153,40 @@ async function deliverConversationViaControlChannel(conv, message, options) {
3972
4153
  source: options.source
3973
4154
  });
3974
4155
  }
4156
+ /**
4157
+ * PAN-3766 follow-up — answer a pi conversation's `ask` modal. The control
4158
+ * channel cannot do it: a steer queues behind the modal and is never seen.
4159
+ * The answer must drive the modal with keystrokes (see pi-ask-modal.ts).
4160
+ */
4161
+ async function handleConversationPiAskAnswer(rawId, body, deps = {}) {
4162
+ try {
4163
+ const numericId = Number(rawId);
4164
+ const conv = !Number.isNaN(numericId) && /^\d+$/.test(rawId) ? getConversationById(numericId) : getConversationByName(rawId);
4165
+ if (!conv) return {
4166
+ body: { error: "Conversation not found" },
4167
+ status: 404
4168
+ };
4169
+ if (!isPiControlChannelHarness(conv.harness ?? "claude-code")) return {
4170
+ body: { error: "Not a Pi conversation" },
4171
+ status: 400
4172
+ };
4173
+ if (conv.status === "ended") return {
4174
+ body: { error: "Session has ended — start a new run to interact" },
4175
+ status: 422
4176
+ };
4177
+ return await answerPiAskModal(conv.tmuxSession, body, {
4178
+ ...deps,
4179
+ sessionExists: deps.sessionExists ?? tmuxSessionExists
4180
+ });
4181
+ } catch (error) {
4182
+ const msg = error instanceof Error ? error.message : String(error);
4183
+ console.error("[conversations] pi ask answer failed:", msg);
4184
+ return {
4185
+ body: { error: "Internal server error" },
4186
+ status: 500
4187
+ };
4188
+ }
4189
+ }
3975
4190
  async function handleConversationThinkingLevel(name, body) {
3976
4191
  const conv = getConversationByName(name);
3977
4192
  if (!conv) return jsonResponse({ error: "Conversation not found" }, { status: 404 });
@@ -4447,7 +4662,7 @@ const postInternalAgentPermissionRequestRoute = HttpRouter.add("POST", "/api/int
4447
4662
  error: "missing agent id"
4448
4663
  }, { status: 400 });
4449
4664
  const request = yield* HttpServerRequest.HttpServerRequest;
4450
- const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-BOtIRJU7.js"));
4665
+ const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-CkrMLCLU.js"));
4451
4666
  const expected = getInternalTokenSync();
4452
4667
  if (!expected) return jsonResponse({
4453
4668
  ok: false,
@@ -4744,7 +4959,7 @@ const getAgentHealthHistoryRoute = HttpRouter.add("GET", "/api/agents/:id/health
4744
4959
  const request = yield* HttpServerRequest.HttpServerRequest;
4745
4960
  const urlOpt = HttpServerRequest.toURL(request);
4746
4961
  const hours = Option.isSome(urlOpt) ? urlOpt.value.searchParams.get("hours") ?? "24" : "24";
4747
- const { getHealthHistory } = yield* Effect.promise(() => import("./health-events-BYDZ9n2i.js"));
4962
+ const { getHealthHistory } = yield* Effect.promise(() => import("./health-events-9RhRGZK1.js"));
4748
4963
  const endTime = /* @__PURE__ */ new Date();
4749
4964
  const startTime = /* @__PURE__ */ new Date(endTime.getTime() - parseInt(hours) * 60 * 60 * 1e3);
4750
4965
  const events = getHealthHistory(id, startTime.toISOString(), endTime.toISOString());
@@ -4759,7 +4974,7 @@ function emitAgentRuntimeEvent(id, body, timestamp) {
4759
4974
  return Effect.gen(function* () {
4760
4975
  let eventBody = body;
4761
4976
  if (body["kind"] === "linear_mcp_auth_required" || body["kind"] === "linear_mcp_auth_healthy") {
4762
- const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-CzHfoqKQ.js"));
4977
+ const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-GK2Uy8zc.js"));
4763
4978
  const snapshot = yield* (yield* AgentStateService).get(id);
4764
4979
  eventBody = {
4765
4980
  ...body,
@@ -4794,7 +5009,7 @@ function emitAgentRuntimeEvent(id, body, timestamp) {
4794
5009
  detail: String(decoded.failure)
4795
5010
  }, { status: 400 })
4796
5011
  };
4797
- const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-CzHfoqKQ.js"));
5012
+ const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-GK2Uy8zc.js"));
4798
5013
  yield* (yield* AgentStateService).emit(decoded.success);
4799
5014
  return {
4800
5015
  ok: true,
@@ -4875,13 +5090,13 @@ const postAgentPlanChecklistRoute = HttpRouter.add("POST", "/api/agents/:id/plan
4875
5090
  const auth = yield* Effect.promise(() => validateAgentRuntimeEventAuth(request));
4876
5091
  if (!auth.ok) return auth.response;
4877
5092
  const id = (yield* HttpRouter.params)["id"] ?? "";
4878
- const { getAgentState } = yield* Effect.promise(() => import("./agents-DpCuoF65.js"));
5093
+ const { getAgentState } = yield* Effect.promise(() => import("./agents-BdkVgjxC.js"));
4879
5094
  const state = yield* getAgentState(id);
4880
5095
  if (!state?.workspace || !state.issueId) return jsonResponse({
4881
5096
  success: false,
4882
5097
  error: "agent has no resolvable workspace or issue id"
4883
5098
  }, { status: 422 });
4884
- const { checkIncompletePlanItemsPromise } = yield* Effect.promise(() => import("./done-preflight-BDVdWed5.js"));
5099
+ const { checkIncompletePlanItemsPromise } = yield* Effect.promise(() => import("./done-preflight-AiXnYYAy.js"));
4885
5100
  const incomplete = yield* Effect.promise(() => checkIncompletePlanItemsPromise(state.workspace, state.issueId));
4886
5101
  return jsonResponse({
4887
5102
  success: true,
@@ -4895,7 +5110,7 @@ const getAgentRuntimeRoute = HttpRouter.add("GET", "/api/agents/:id/runtime", ht
4895
5110
  success: false,
4896
5111
  error: "missing agent id"
4897
5112
  }, { status: 400 });
4898
- const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-CzHfoqKQ.js"));
5113
+ const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-GK2Uy8zc.js"));
4899
5114
  const snapshot = yield* (yield* AgentStateService).get(id);
4900
5115
  if (!snapshot) return jsonResponse({
4901
5116
  success: false,
@@ -5086,8 +5301,8 @@ function createAgentStopHandler(lifecycleEvent) {
5086
5301
  yield* stopAgent(id, "operator");
5087
5302
  if (stateBeforeStop?.issueId) yield* Effect.promise(async () => {
5088
5303
  try {
5089
- const { resolveProjectFromIssueSync } = await import("./projects-LftaVK99.js");
5090
- const { findWorkspacePath } = await import("./archive-planning-BW4MKNI7.js");
5304
+ const { resolveProjectFromIssueSync } = await import("./projects-Crur9uCa.js");
5305
+ const { findWorkspacePath } = await import("./archive-planning-CNSWQPvz.js");
5091
5306
  const issueLower = stateBeforeStop.issueId.toLowerCase();
5092
5307
  const workspacePath = findWorkspacePath(resolveProjectFromIssueSync(stateBeforeStop.issueId)?.projectPath ?? process.cwd(), issueLower);
5093
5308
  if (workspacePath) {
@@ -5227,7 +5442,7 @@ const postAgentUnpauseRoute = HttpRouter.add("POST", "/api/agents/:id/unpause",
5227
5442
  if ((yield* getWorkAgentLifecycleState(id)).canResumeSession && updatedState.troubled !== true) {
5228
5443
  resumeTriggered = true;
5229
5444
  yield* Effect.promise(() => appendAgentLifecycleLog(id, "agent.unpause_immediate_resume_triggered"));
5230
- import("./resume-DvHuF-bm.js").then(({ resumeAgent }) => resumeAgent(id)).then((result) => {
5445
+ import("./resume-DmF2andq.js").then(({ resumeAgent }) => resumeAgent(id)).then((result) => {
5231
5446
  if (!result.success) console.warn(`[agents] immediate resume after unpause failed for ${id}: ${result.error}`);
5232
5447
  }).catch((err) => console.warn(`[agents] immediate resume after unpause errored for ${id}:`, err));
5233
5448
  }
@@ -6640,15 +6855,15 @@ async function requestWorkStartAfterContainers(input) {
6640
6855
  function handleRemoteAgentSpawn(input) {
6641
6856
  return Effect.gen(function* () {
6642
6857
  const { issueId, workspacePath, workspaceMetadata, spawnModel, startedBy, autoSpawnConsentRequired, projectPath, spawnGuardrails, lifecycle } = input;
6643
- const { spawnRemoteAgent, checkRemoteSpendCap } = yield* Effect.promise(() => import("./remote-agents-BVtASiOF.js"));
6644
- const { createFlyProviderFromConfig } = yield* Effect.promise(() => import("./remote-BUEeUic6.js"));
6645
- const { loadConfigSync: loadPanConfig } = yield* Effect.promise(() => import("./config-CH1AqqIQ.js"));
6858
+ const { spawnRemoteAgent, checkRemoteSpendCap } = yield* Effect.promise(() => import("./remote-agents-MbWzm5Fh.js"));
6859
+ const { createFlyProviderFromConfig } = yield* Effect.promise(() => import("./remote-BMZmJC5E.js"));
6860
+ const { loadConfigSync: loadPanConfig } = yield* Effect.promise(() => import("./config-DURnId0k.js"));
6646
6861
  const panConfig = loadPanConfig();
6647
6862
  const spendCap = checkRemoteSpendCap(panConfig);
6648
6863
  if (!spendCap.allowed) return jsonResponse({ error: spendCap.message }, { status: 429 });
6649
6864
  const fly = createFlyProviderFromConfig(panConfig.remote);
6650
6865
  yield* Effect.promise(() => fly.syncAllCredentials(workspaceMetadata.vmName));
6651
- const { buildWorkAgentPrompt, getTrackerContext } = yield* Effect.promise(() => import("./work-agent-prompt-CJJ4tXci.js"));
6866
+ const { buildWorkAgentPrompt, getTrackerContext } = yield* Effect.promise(() => import("./work-agent-prompt-CQWlmw_y.js"));
6652
6867
  const trackerContext = yield* Effect.promise(() => getTrackerContext(issueId, workspacePath));
6653
6868
  const agentPrompt = yield* Effect.promise(() => buildWorkAgentPrompt({
6654
6869
  issueId,
@@ -7382,7 +7597,7 @@ const postAgentsRoute = HttpRouter.add("POST", "/api/agents", httpHandler(Effect
7382
7597
  console.warn(`[start-agent] Failed to set plan.status=running (non-fatal): ${planStatusErr?.message ?? planStatusErr}`);
7383
7598
  }
7384
7599
  try {
7385
- const { appendSessionEntry, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-Ug18Cp4V.js");
7600
+ const { appendSessionEntry, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-C4JJCL2f.js");
7386
7601
  await appendSessionEntry(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId, {
7387
7602
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
7388
7603
  reason: "start",
@@ -7830,14 +8045,14 @@ function firePostMergeLifecycle(issueId, options) {
7830
8045
  const normalizedIssueId = parsedIssueId.normalized.toUpperCase();
7831
8046
  const started = postMergeGuard.run(normalizedIssueId, async () => {
7832
8047
  const projectPath = getProjectPathForIssue(parsedIssueId.prefix);
7833
- const { postMergeLifecycle } = await import("./merge-agent-BuoC_PRZ.js");
8048
+ const { postMergeLifecycle } = await import("./merge-agent-svBDRWB6.js");
7834
8049
  const lifecycleOptions = {
7835
8050
  ...options?.verifiedMergedRef ? { verifiedMergedRef: options.verifiedMergedRef } : {},
7836
8051
  ...options?.verifiedMergedRepos?.length ? { verifiedMergedRepos: options.verifiedMergedRepos } : {}
7837
8052
  };
7838
8053
  await postMergeLifecycle(normalizedIssueId, projectPath, options?.sourceBranch, Object.keys(lifecycleOptions).length > 0 ? lifecycleOptions : void 0);
7839
8054
  console.log(`[merge] post-merge lifecycle completed for ${normalizedIssueId}`);
7840
- const { runMergeTrainReconcile } = await import("./merge-train-iwKqjtCF.js");
8055
+ const { runMergeTrainReconcile } = await import("./merge-train-DTJXF8ph.js");
7841
8056
  const outcomes = await runMergeTrainReconcile(normalizedIssueId);
7842
8057
  if (outcomes.length > 0) console.log(`[merge-train] reconciled ${outcomes.length} sibling(s) after ${normalizedIssueId}: ` + outcomes.map((o) => `${o.issueId}=${o.result}`).join(", "));
7843
8058
  }, (err) => console.error(`[merge] post-merge lifecycle failed for ${normalizedIssueId}:`, err));
@@ -7857,15 +8072,15 @@ init_review_status();
7857
8072
  init_io();
7858
8073
  init_tmux();
7859
8074
  const getSpecialistsRoute = HttpRouter.add("GET", "/api/specialists", httpHandler(Effect.gen(function* () {
7860
- const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8075
+ const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
7861
8076
  return jsonResponse({
7862
8077
  specialists: yield* Effect.promise(() => getAllSpecialistStatus()),
7863
8078
  projects: yield* Effect.promise(() => getAllProjectSpecialistStatuses())
7864
8079
  });
7865
8080
  })));
7866
8081
  const postSpecialistsResetAllRoute = HttpRouter.add("POST", "/api/specialists/reset-all", httpHandler(Effect.gen(function* () {
7867
- const { getAllSpecialists, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
7868
- const { clearHookSync } = yield* Effect.promise(() => import("./hooks-B4wj32l2.js"));
8082
+ const { getAllSpecialists, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8083
+ const { clearHookSync } = yield* Effect.promise(() => import("./hooks-CmL3TXla.js"));
7869
8084
  const specialists = getAllSpecialists();
7870
8085
  const results = [];
7871
8086
  for (const specialist of specialists) {
@@ -7924,7 +8139,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
7924
8139
  }
7925
8140
  console.log(`[specialists/done] ${specialist} signaling ${status} for ${normalizedIssueId}`);
7926
8141
  if (specialist === "merge") {
7927
- const { reportSpecialistCompletion } = yield* Effect.promise(() => import("./specialist-completion-CTAjwH5j.js"));
8142
+ const { reportSpecialistCompletion } = yield* Effect.promise(() => import("./specialist-completion-BMv3K54P.js"));
7928
8143
  if (yield* reportSpecialistCompletion(normalizedIssueId, {
7929
8144
  status,
7930
8145
  notes
@@ -7951,7 +8166,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
7951
8166
  if (project) {
7952
8167
  const workspacePath = join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`);
7953
8168
  if (existsSync(workspacePath)) {
7954
- const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CsKV0Dis.js");
8169
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-fcK3ZRNj.js");
7955
8170
  reviewEvidenceHead = await snapshotWorkspaceHeadsPromise(normalizedIssueId, workspacePath);
7956
8171
  }
7957
8172
  }
@@ -8000,7 +8215,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8000
8215
  if (project && failedItemId) {
8001
8216
  const workspacePath = join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`);
8002
8217
  if (existsSync(workspacePath)) {
8003
- const { onInspectComplete } = await import("./inspect-agent-JFEaYTRa.js");
8218
+ const { onInspectComplete } = await import("./inspect-agent-BuSYgRQs.js");
8004
8219
  await Effect.runPromise(onInspectComplete(project.projectKey, normalizedIssueId, failedItemId, "failed", workspacePath, notes));
8005
8220
  }
8006
8221
  }
@@ -8011,7 +8226,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8011
8226
  }
8012
8227
  yield* Effect.promise(async () => {
8013
8228
  try {
8014
- const { getTmuxSessionName, updateRunMetadata, makeSpecialistRegistryKey } = await import("./specialists-x-kPMhrL.js");
8229
+ const { getTmuxSessionName, updateRunMetadata, makeSpecialistRegistryKey } = await import("./specialists-8Pc--yZI.js");
8015
8230
  const projectKey = resolveProjectFromIssueSync(normalizedIssueId)?.projectKey;
8016
8231
  const tmuxSession = projectKey ? getTmuxSessionName(`${specialist}-agent`, projectKey, normalizedIssueId) : getTmuxSessionName(`${specialist}-agent`);
8017
8232
  saveAgentRuntimeState(tmuxSession, {
@@ -8030,7 +8245,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8030
8245
  });
8031
8246
  console.log(`[specialists/done] Cleared registry lock for ${registryKey} (${projectKey})`);
8032
8247
  }
8033
- const { updateSpecialistHandoffStatus } = await import("./specialist-handoff-logger-DrjrOmmn.js");
8248
+ const { updateSpecialistHandoffStatus } = await import("./specialist-handoff-logger-B7jzypoX.js");
8034
8249
  if (await Effect.runPromise(updateSpecialistHandoffStatus(normalizedIssueId, `${specialist}-agent`, status === "passed" ? "completed" : "failed", status === "passed" ? "success" : "failure"))) console.log(`[specialists/done] Updated handoff log: ${specialist}-agent ${normalizedIssueId} → ${status}`);
8035
8250
  } catch (err) {
8036
8251
  console.error(`[specialists/done] Error managing specialist state:`, err);
@@ -8042,7 +8257,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8042
8257
  if (project) {
8043
8258
  const workspacePath = join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`);
8044
8259
  if (existsSync(workspacePath)) {
8045
- const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-CsKV0Dis.js");
8260
+ const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-fcK3ZRNj.js");
8046
8261
  const headAnchor = await snapshotWorkspaceHeadsPromise(normalizedIssueId, workspacePath);
8047
8262
  if (headAnchor) {
8048
8263
  setReviewStatusSync(normalizedIssueId, { reviewedAtCommit: headAnchor });
@@ -8056,7 +8271,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8056
8271
  });
8057
8272
  if (specialist === "inspect" && status === "passed") yield* Effect.promise(async () => {
8058
8273
  try {
8059
- const { onInspectComplete } = await import("./inspect-agent-JFEaYTRa.js");
8274
+ const { onInspectComplete } = await import("./inspect-agent-BuSYgRQs.js");
8060
8275
  const project = resolveProjectFromIssueSync(normalizedIssueId);
8061
8276
  if (project) {
8062
8277
  const workspacePath = join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`);
@@ -8072,7 +8287,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8072
8287
  if (project) {
8073
8288
  if (existsSync(join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`))) {
8074
8289
  setReviewStatusSync(normalizedIssueId, { testStatus: "passed" });
8075
- const { initEventStore } = await import("./event-store-Db4w4YIY.js");
8290
+ const { initEventStore } = await import("./event-store-CFnLP8w-.js");
8076
8291
  await (await initEventStore()).appendAsync({
8077
8292
  type: "test.passed",
8078
8293
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
@@ -8125,8 +8340,8 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8125
8340
  if (notes?.toLowerCase().includes("conflict")) yield* Effect.promise(async () => {
8126
8341
  try {
8127
8342
  const workAgentId = `agent-${normalizedIssueId.toLowerCase()}`;
8128
- const { sessionExists } = await import("./tmux-B8zsqD_6.js");
8129
- const { messageAgent, spawnAgent, getAgentStateSync } = await import("./agents-DpCuoF65.js");
8343
+ const { sessionExists } = await import("./tmux-C-hxv71f.js");
8344
+ const { messageAgent, spawnAgent, getAgentStateSync } = await import("./agents-BdkVgjxC.js");
8130
8345
  if (await Effect.runPromise(sessionExists(workAgentId))) {
8131
8346
  await messageAgent(workAgentId, `MERGE CONFLICT: The merge-agent could not rebase your branch onto main due to conflicts. Please fix this now:\n\n1. git fetch origin main\n2. git rebase origin/main\n3. Resolve any conflicts (git add <file> && git rebase --continue)\n4. git push --force-with-lease\n5. Resubmit: curl -s -X POST http://localhost:3011/api/review/${normalizedIssueId}/request -H "Content-Type: application/json" -d "{}"\n\nConflict details: ${notes}`);
8132
8347
  console.log(`[specialists/done] Sent rebase instructions to ${workAgentId}`);
@@ -8140,7 +8355,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8140
8355
  try {
8141
8356
  const project = resolveProjectFromIssueSync(normalizedIssueId);
8142
8357
  const workspacePath = project ? join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`) : void 0;
8143
- const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-Brjaxoda.js");
8358
+ const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-DkMx_cKj.js");
8144
8359
  const result = await Effect.runPromise(deliverReviewVerdictFeedback({
8145
8360
  issueId: normalizedIssueId,
8146
8361
  verdict: status === "failed" ? "failed" : "blocked",
@@ -8160,7 +8375,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8160
8375
  if (project) {
8161
8376
  const workspacePath = join(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`);
8162
8377
  if (existsSync(workspacePath)) {
8163
- const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-CsKV0Dis.js");
8378
+ const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-fcK3ZRNj.js");
8164
8379
  const reviewedAtCommit = await snapshotWorkspaceHeadsPromise(normalizedIssueId, workspacePath);
8165
8380
  if (reviewedAtCommit) {
8166
8381
  setReviewStatusSync(normalizedIssueId, { reviewedAtCommit });
@@ -8200,7 +8415,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
8200
8415
  });
8201
8416
  })));
8202
8417
  const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/specialists/logs/cleanup-all", httpHandler(Effect.gen(function* () {
8203
- const { cleanupAllLogsSync } = yield* Effect.promise(() => import("./specialist-logs-Du6quZ0_.js"));
8418
+ const { cleanupAllLogsSync } = yield* Effect.promise(() => import("./specialist-logs-DVhOLpwy.js"));
8204
8419
  const results = cleanupAllLogsSync();
8205
8420
  return jsonResponse({
8206
8421
  success: true,
@@ -8210,7 +8425,7 @@ const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/speciali
8210
8425
  });
8211
8426
  })));
8212
8427
  const getSpecialistsProjectsRoute = HttpRouter.add("GET", "/api/specialists/projects", httpHandler(Effect.gen(function* () {
8213
- const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8428
+ const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8214
8429
  return jsonResponse(yield* Effect.promise(() => getAllProjectSpecialistStatuses()));
8215
8430
  })));
8216
8431
  const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/wake", httpHandler(Effect.gen(function* () {
@@ -8254,7 +8469,7 @@ const postSpecialistReportStatusRoute = HttpRouter.add("POST", "/api/specialists
8254
8469
  "blocked",
8255
8470
  "failed"
8256
8471
  ].includes(status)) {
8257
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8472
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8258
8473
  saveAgentRuntimeState(getTmuxSessionName(name), {
8259
8474
  state: "idle",
8260
8475
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
@@ -8376,7 +8591,7 @@ const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/
8376
8591
  const issueId = params["issueId"];
8377
8592
  const type = params["type"];
8378
8593
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8379
- const { getTmuxSessionName, makeSpecialistRegistryKey, getRunMetadata } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8594
+ const { getTmuxSessionName, makeSpecialistRegistryKey, getRunMetadata } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8380
8595
  const tmuxSession = getRunMetadata(project, makeSpecialistRegistryKey(type, issueId)).tmuxSession ?? getTmuxSessionName(type, project, issueId);
8381
8596
  yield* Effect.promise(() => Effect.runPromise(killSession(tmuxSession)).catch(() => {}));
8382
8597
  saveAgentRuntimeState(tmuxSession, {
@@ -8403,7 +8618,7 @@ const getProjectSpecialistRunsRoute = HttpRouter.add("GET", "/api/specialists/:p
8403
8618
  if (limitParam) limit = parseInt(limitParam, 10);
8404
8619
  if (offsetParam) offset = parseInt(offsetParam, 10);
8405
8620
  }
8406
- const { listRunLogsSync } = yield* Effect.promise(() => import("./specialist-logs-Du6quZ0_.js"));
8621
+ const { listRunLogsSync } = yield* Effect.promise(() => import("./specialist-logs-DVhOLpwy.js"));
8407
8622
  return jsonResponse(listRunLogsSync(project, type, {
8408
8623
  limit,
8409
8624
  offset
@@ -8414,7 +8629,7 @@ const getProjectSpecialistRunStreamRoute = HttpRouter.add("GET", "/api/specialis
8414
8629
  const project = params["project"];
8415
8630
  const type = params["type"];
8416
8631
  const runId = params["runId"];
8417
- const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-Du6quZ0_.js"));
8632
+ const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-DVhOLpwy.js"));
8418
8633
  const logPath = getRunLogPath(project, type, runId);
8419
8634
  if (!existsSync(logPath)) return jsonResponse({ error: "Run log not found" }, { status: 404 });
8420
8635
  const encoder = new TextEncoder();
@@ -8473,7 +8688,7 @@ const getProjectSpecialistRunRoute = HttpRouter.add("GET", "/api/specialists/:pr
8473
8688
  const project = params["project"];
8474
8689
  const type = params["type"];
8475
8690
  const runId = params["runId"];
8476
- const { getRunLogSync, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-Du6quZ0_.js"));
8691
+ const { getRunLogSync, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-DVhOLpwy.js"));
8477
8692
  const content = getRunLogSync(project, type, runId);
8478
8693
  if (!content) return jsonResponse({ error: "Run log not found" }, { status: 404 });
8479
8694
  return jsonResponse({
@@ -8487,7 +8702,7 @@ const postProjectSpecialistRunTerminateRoute = HttpRouter.add("POST", "/api/spec
8487
8702
  const project = params["project"];
8488
8703
  const type = params["type"];
8489
8704
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8490
- const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8705
+ const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8491
8706
  yield* Effect.promise(() => terminateSpecialist(project, type));
8492
8707
  return jsonResponse({
8493
8708
  success: true,
@@ -8499,7 +8714,7 @@ const postProjectSpecialistGracePauseRoute = HttpRouter.add("POST", "/api/specia
8499
8714
  const project = params["project"];
8500
8715
  const type = params["type"];
8501
8716
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8502
- const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8717
+ const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8503
8718
  if (pauseGracePeriod(project, type)) return jsonResponse({
8504
8719
  success: true,
8505
8720
  message: "Grace period paused"
@@ -8511,7 +8726,7 @@ const postProjectSpecialistGraceResumeRoute = HttpRouter.add("POST", "/api/speci
8511
8726
  const project = params["project"];
8512
8727
  const type = params["type"];
8513
8728
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8514
- const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8729
+ const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8515
8730
  if (resumeGracePeriod(project, type)) return jsonResponse({
8516
8731
  success: true,
8517
8732
  message: "Grace period resumed"
@@ -8523,7 +8738,7 @@ const postProjectSpecialistGraceExitRoute = HttpRouter.add("POST", "/api/special
8523
8738
  const project = params["project"];
8524
8739
  const type = params["type"];
8525
8740
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8526
- const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8741
+ const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8527
8742
  exitGracePeriod(project, type);
8528
8743
  return jsonResponse({
8529
8744
  success: true,
@@ -8535,7 +8750,7 @@ const getProjectSpecialistGraceRoute = HttpRouter.add("GET", "/api/specialists/:
8535
8750
  const project = params["project"];
8536
8751
  const type = params["type"];
8537
8752
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8538
- const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8753
+ const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8539
8754
  const state = getGracePeriodState(project, type);
8540
8755
  if (state) return jsonResponse(state);
8541
8756
  else return jsonResponse({ error: "No active grace period" }, { status: 404 });
@@ -8544,7 +8759,7 @@ const getProjectSpecialistContextRoute = HttpRouter.add("GET", "/api/specialists
8544
8759
  const params = yield* HttpRouter.params;
8545
8760
  const project = params["project"];
8546
8761
  const type = params["type"];
8547
- const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-CKasRfYu.js"));
8762
+ const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-B054OP_a.js"));
8548
8763
  const digest = loadContextDigest(project, type);
8549
8764
  if (digest) return jsonResponse({ digest });
8550
8765
  else return jsonResponse({ error: "No context digest found" }, { status: 404 });
@@ -8553,7 +8768,7 @@ const postProjectSpecialistContextRegenerateRoute = HttpRouter.add("POST", "/api
8553
8768
  const params = yield* HttpRouter.params;
8554
8769
  const project = params["project"];
8555
8770
  const type = params["type"];
8556
- const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-CKasRfYu.js"));
8771
+ const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-B054OP_a.js"));
8557
8772
  const digest = yield* regenerateContextDigest(project, type);
8558
8773
  if (digest) return jsonResponse({
8559
8774
  digest,
@@ -8572,7 +8787,7 @@ const postProjectSpecialistCompleteRoute = HttpRouter.add("POST", "/api/speciali
8572
8787
  "blocked"
8573
8788
  ].includes(status)) return jsonResponse({ error: "Valid status (passed/failed/blocked) is required" }, { status: 400 });
8574
8789
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
8575
- const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-x-kPMhrL.js"));
8790
+ const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-8Pc--yZI.js"));
8576
8791
  signalSpecialistCompletion(project, type, {
8577
8792
  status,
8578
8793
  notes
@@ -8606,8 +8821,8 @@ const postProjectSpecialistLogsCleanupRoute = HttpRouter.add("POST", "/api/speci
8606
8821
  const params = yield* HttpRouter.params;
8607
8822
  const project = params["project"];
8608
8823
  const type = params["type"];
8609
- const { cleanupOldLogsSync } = yield* Effect.promise(() => import("./specialist-logs-Du6quZ0_.js"));
8610
- const { getSpecialistRetention } = yield* Effect.promise(() => import("./projects-LftaVK99.js"));
8824
+ const { cleanupOldLogsSync } = yield* Effect.promise(() => import("./specialist-logs-DVhOLpwy.js"));
8825
+ const { getSpecialistRetention } = yield* Effect.promise(() => import("./projects-Crur9uCa.js"));
8611
8826
  const retention = getSpecialistRetention(project);
8612
8827
  const deleted = cleanupOldLogsSync(project, type, {
8613
8828
  maxDays: retention.max_days,
@@ -8628,7 +8843,7 @@ const postProjectReviewRestartRoute = HttpRouter.add("POST", "/api/specialists/:
8628
8843
  const project = params["project"];
8629
8844
  const issueId = params["issueId"];
8630
8845
  const { model, harness } = yield* readJsonBody;
8631
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DgkUPRx0.js"));
8846
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DM9S22BL.js"));
8632
8847
  const killResult = yield* killAllReviewerSessions(project, issueId);
8633
8848
  const projectConfig = resolveProjectFromIssueSync(issueId);
8634
8849
  if (!projectConfig) return jsonResponse({ error: `Cannot resolve project for ${issueId}` }, { status: 404 });
@@ -8644,7 +8859,7 @@ const postProjectReviewRestartRoute = HttpRouter.add("POST", "/api/specialists/:
8644
8859
  }));
8645
8860
  branch = stdout.trim() || primaryRepo.sourceBranch;
8646
8861
  } catch {}
8647
- const { spawnReviewRoleForIssue } = yield* Effect.promise(() => import("./review-agent-DgkUPRx0.js"));
8862
+ const { spawnReviewRoleForIssue } = yield* Effect.promise(() => import("./review-agent-DM9S22BL.js"));
8648
8863
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
8649
8864
  const result = yield* spawnReviewRoleForIssue({
8650
8865
  issueId,
@@ -8688,7 +8903,7 @@ const postProjectReviewerRoleRestartRoute = HttpRouter.add("POST", "/api/special
8688
8903
  const { model } = yield* readJsonBody;
8689
8904
  const reviewer = getAgentStateSync(reviewerId);
8690
8905
  yield* Effect.promise(() => Effect.runPromise(killSession(reviewerId)).catch(() => void 0));
8691
- const { spawnReviewSubRoleForIssue } = yield* Effect.promise(() => import("./review-agent-DgkUPRx0.js"));
8906
+ const { spawnReviewSubRoleForIssue } = yield* Effect.promise(() => import("./review-agent-DM9S22BL.js"));
8692
8907
  const result = yield* spawnReviewSubRoleForIssue({
8693
8908
  issueId,
8694
8909
  workspace: parent.workspace,
@@ -8816,6 +9031,6 @@ const specialistsProjectRouteLayer = Layer.mergeAll(getProjectSpecialistStatusRo
8816
9031
  */
8817
9032
  const specialistsRouteLayer = Layer.mergeAll(specialistsLegacyRouteLayer, specialistsProjectRouteLayer);
8818
9033
  //#endregion
8819
- export { ComposerCommandParseError as $, isInsideGitWorkTree as A, cleanupConversationAttachments as B, handleConversationClearForkState as C, jsonResponse as Ct, handleConversationResume as D, handleConversationRestartAll as E, startConversationModelBackfill as F, getConversationAttachmentsRoot as G, cleanupUnreferencedConversationAttachments as H, stopConversationRuntime as I, removeConversationAttachment as J, hasConversationAttachment as K, tmuxSessionExists as L, resolveRegisteredProject as M, shouldReportUnresolvedLiveSession as N, handleConversationStop as O, spawnConversationSession as P, resolvePolicy as Q, waitForPiTuiReady as R, conversationSessionAliveFromState as S, getDefaultCwd as St, handleConversationDelete as T, ensureConversationAttachmentDir as U, cleanupOrphanedConversationAttachments as V, extractConversationAttachmentPaths as W, composerCommandResultHttpStatus as X, runInBatches as Y, handleComposerCommandMessage as Z, isPiControlChannelHarness as _, getHeaderFromMap as _t, agentsRouteLayer as a, resolveRequestedStartedBy as at, validateConversationControlAckOrigin as b, validateOriginHeaders as bt, codexConversationPendingInput as c, spawnPanCli as ct, handleConversationCodexApproval as d, hasDashboardInternalToken as dt, ComposerCommandConfirmationError as et, handleConversationCompact as f, rejectUnauthorizedDashboardRequest as ft, handleConversationThinkingLevel as g, waitForSessionRespawn as gt, handleConversationPlanAction as h, isRespawnPending as ht, validateSpecialistAutoCompleteMetadata as i, isInternalAgentRequest as it, resolveAllowedHarness as j, handleConversationSwitchModel as k, deliverConversationViaControlChannel as l, dashboardCsrfToken as lt, handleConversationDeliveryMethod as m, rejectUnsafeDashboardMutationRequest as mt, _serverManagedMerges as n, evaluateSpawnGuardrails as nt, saveAgentStateAndEmitEvent as o, getWorkAgentLifecycleStateSync as ot, handleConversationControlAck as p, rejectUnauthorizedDashboardSessionMintRequest as pt, isManagedConversationAttachmentPath as q, firePostMergeLifecycle as r, invalidateAgentsCache as rt, saveAgentStateAndEmitEventProgram as s, panCliInvocation as st, specialistsRouteLayer as t, composerCommandConfirmationFromBody as tt, handleConversationAbort as u, dashboardSessionCookieHeader as ut, pickDeliverAs as v, isTrustedOriginForHost as vt, handleConversationCreate as w, jsonStringResponse as wt, conversationNeedsRunningRepair as x, httpHandler as xt, resolveConversationDeliveryMethod as y, validateOrigin as yt, waitForTmuxSession as z };
9034
+ export { resolvePolicy as $, handleConversationSwitchModel as A, waitForTmuxSession as B, conversationSessionAliveFromState as C, getDefaultCwd as Ct, handleConversationRestartAll as D, handleConversationDelete as E, spawnConversationSession as F, extractConversationAttachmentPaths as G, cleanupOrphanedConversationAttachments as H, startConversationModelBackfill as I, isManagedConversationAttachmentPath as J, getConversationAttachmentsRoot as K, stopConversationRuntime as L, resolveAllowedHarness as M, resolveRegisteredProject as N, handleConversationResume as O, shouldReportUnresolvedLiveSession as P, handleComposerCommandMessage as Q, tmuxSessionExists as R, conversationNeedsRunningRepair as S, httpHandler as St, handleConversationCreate as T, jsonStringResponse as Tt, cleanupUnreferencedConversationAttachments as U, cleanupConversationAttachments as V, ensureConversationAttachmentDir as W, runInBatches as X, removeConversationAttachment as Y, composerCommandResultHttpStatus as Z, handleConversationThinkingLevel as _, waitForSessionRespawn as _t, agentsRouteLayer as a, isInternalAgentRequest as at, resolveConversationDeliveryMethod as b, validateOrigin as bt, codexConversationPendingInput as c, panCliInvocation as ct, handleConversationCodexApproval as d, dashboardSessionCookieHeader as dt, ComposerCommandParseError as et, handleConversationCompact as f, hasDashboardInternalToken as ft, handleConversationPlanAction as g, isRespawnPending as gt, handleConversationPiAskAnswer as h, rejectUnsafeDashboardMutationRequest as ht, validateSpecialistAutoCompleteMetadata as i, invalidateAgentsCache as it, isInsideGitWorkTree as j, handleConversationStop as k, deliverConversationViaControlChannel as l, spawnPanCli as lt, handleConversationDeliveryMethod as m, rejectUnauthorizedDashboardSessionMintRequest as mt, _serverManagedMerges as n, composerCommandConfirmationFromBody as nt, saveAgentStateAndEmitEvent as o, resolveRequestedStartedBy as ot, handleConversationControlAck as p, rejectUnauthorizedDashboardRequest as pt, hasConversationAttachment as q, firePostMergeLifecycle as r, evaluateSpawnGuardrails as rt, saveAgentStateAndEmitEventProgram as s, getWorkAgentLifecycleStateSync as st, specialistsRouteLayer as t, ComposerCommandConfirmationError as tt, handleConversationAbort as u, dashboardCsrfToken as ut, isPiControlChannelHarness as v, getHeaderFromMap as vt, handleConversationClearForkState as w, jsonResponse as wt, validateConversationControlAckOrigin as x, validateOriginHeaders as xt, pickDeliverAs as y, isTrustedOriginForHost as yt, waitForPiTuiReady as z };
8820
9035
 
8821
- //# sourceMappingURL=specialists-b0dMMjWq.js.map
9036
+ //# sourceMappingURL=specialists-CC_Mnc47.js.map