@overdeck/desktop 0.45.24 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +32 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-CCwFGICj.js} +2 -2
  4. package/server/activity-logger-CMthG6Vd.js +3 -0
  5. package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
  6. package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-De1L-Sb4.js} +6 -6
  7. package/server/{agent-gc-CHcnvonI.js → agent-gc-CBULruzm.js} +5 -5
  8. package/server/agent-state-VQk8fY9F.js +3 -0
  9. package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-BlnSkRFA.js} +5 -5
  10. package/server/{agent-state-service-D5UGKIJL.js → agent-state-service-hZpxIw1E.js} +1 -1
  11. package/server/agents-BKKkxKgK.js +3 -0
  12. package/server/{agents-EbI0zCJl.js → agents-C5rWYhb6.js} +4 -4
  13. package/server/archive-planning-0FJ6Xd3b.js +2 -0
  14. package/server/{archive-planning-Du25Jtst.js → archive-planning-C0lAbNB_.js} +16 -24
  15. package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
  16. package/server/{assemble-J2ZZ2C15.js → assemble-DnffNpOo.js} +2 -2
  17. package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
  18. package/server/{behavior-B3exJ42O.js → behavior-CfIg6pKp.js} +2 -2
  19. package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
  20. package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DHmCSLar.js} +2 -2
  21. package/server/{build-info-CZk_TITh.js → build-info-BP160gU7.js} +1 -1
  22. package/server/{build-info-Ie_D0_BT.js → build-info-CuFfxZxp.js} +5 -3
  23. package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DEWD82qK.js} +2 -2
  24. package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-CQB1h765.js → checkpoints-CZvbtLnr.js} +2 -2
  27. package/server/{checkpoints-BJIs5QIA.js → checkpoints-DMTgXuLG.js} +1 -1
  28. package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-CN-xo-do.js} +1 -1
  29. package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
  30. package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CN0cSCPp.js} +2 -2
  31. package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
  32. package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-Dabi9slj.js} +1 -1
  33. package/server/cli-DmXETsw-.js +3 -0
  34. package/server/{cli-RoOx5DUf.js → cli-oCWYA1pE.js} +9 -9
  35. package/server/{cliproxy-C8a1vtTU.js → cliproxy-C8mB3KuB.js} +2 -2
  36. package/server/{cliproxy-fHfIeiGd.js → cliproxy-PGwTX_o8.js} +1 -1
  37. package/server/{close-issue-DoOifFIK.js → close-issue-D5MF5GqF.js} +5 -5
  38. package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
  39. package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-Cltx86x5.js} +37 -16
  40. package/server/{codex-GcHuUF-k.js → codex-BdEsUFWh.js} +1 -1
  41. package/server/{codex-BZXGhUVB.js → codex-Drlf5Xhf.js} +36 -7
  42. package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-DpB89Vqa.js} +2 -2
  43. package/server/compaction-continuation-K2AxQX4H.js +200 -0
  44. package/server/{config-CKxYiCmX.js → config-B2IMcBxx.js} +4 -3
  45. package/server/{config-DzV30TOm.js → config-DV-grfQc.js} +1 -1
  46. package/server/{config-BZ0sHTju.js → config-Dr3pW6w6.js} +2 -2
  47. package/server/{config-yaml-DySPNmKN.js → config-yaml-CmOPzmBb.js} +268 -14
  48. package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-B9cN3SBi.js} +4 -4
  49. package/server/{conflict-gate-BhAY7TUd.js → conflict-gate-Dh754uyA.js} +1 -1
  50. package/server/{context-layers-BrPmE__h.js → context-layers-D6LZo3l1.js} +2 -2
  51. package/server/{context-layers-igZ4FI4_.js → context-layers-dR5YxHYB.js} +3 -3
  52. package/server/{control-settings-BQp7_4uD.js → control-settings-C7DUehE1.js} +49 -19
  53. package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-BoqdDXWF.js} +8 -8
  54. package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
  55. package/server/{conversation-service-DPJ71F33.js → conversation-service-5aCnq1zR.js} +8 -7
  56. package/server/conversation-service-BCxl4f8Z.js +3 -0
  57. package/server/{conversations-6AfUfbwc.js → conversations-BUpYsOZg.js} +4 -4
  58. package/server/{conversations-CAsJF9kh.js → conversations-C34dyIb9.js} +1 -1
  59. package/server/{cost-B2ddP6wq.js → cost-Bgcub5kW.js} +12 -2
  60. package/server/{cost-R-m6Yi-W.js → cost-CvxRrucd.js} +3 -3
  61. package/server/{cost-sync-BsN6ER0n.js → cost-sync-Dv3LUaNW.js} +3 -3
  62. package/server/{dag-B1ucnjDU.js → dag-ombYYt4s.js} +2 -2
  63. package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-BcJPC5Rr.js} +1 -1
  64. package/server/dashboard-db-worker.js +7 -7
  65. package/server/deacon-DrXqT9LQ.js +4 -0
  66. package/server/{deacon-CU_cAYSR.js → deacon-hi9KLPLT.js} +2933 -2704
  67. package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-BNBebzeL.js} +3 -3
  68. package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
  69. package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-DBxUaO-A.js} +13 -13
  70. package/server/deacon-swarm-I2JfX5Tg.js +2 -0
  71. package/server/deacon.js +14 -19
  72. package/server/dead-end-trip-CQcP70ND.js +13 -0
  73. package/server/delivery-Da0zEMY4.js +3 -0
  74. package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-Df-Tmaq0.js} +69 -18
  75. package/server/deploy-queue-9SrhZR63.js +3 -0
  76. package/server/deploy-queue-UjKGYsDe.js +169 -0
  77. package/server/deploy-window-jOiPRHL0.js +3 -0
  78. package/server/{deploy-window-C3F-tihF.js → deploy-window-rpqpWqHA.js} +40 -16
  79. package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-CC46Ig8q.js} +2 -2
  80. package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-68CSCRnu.js} +3 -3
  81. package/server/{dist-Cb_0uvpS.js → dist-CJy72uEg.js} +1 -1
  82. package/server/dist-DSlxIU1H.js +3 -0
  83. package/server/{dist-src-BSoS7mkd.js → dist-src-Bik83hFi.js} +1 -1
  84. package/server/docker-BMVTSFL5.js +3 -0
  85. package/server/{docker-DcMTFTUC.js → docker-Dam7mbIB.js} +2 -2
  86. package/server/{dod-C6n9RV3G.js → dod-Dar-yheg.js} +8 -4
  87. package/server/durable-review-pipeline-CGZ5QBxh.js +17 -0
  88. package/server/durable-review-pipeline-jpgCJZFp.js +3 -0
  89. package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-B057YA81.js} +4 -4
  90. package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-C98V8yW-.js} +1 -1
  91. package/server/{esm-shims-OSHAYaS1.js → esm-shims-Br9BPdkR.js} +1 -1
  92. package/server/{event-store-EV2cMiXj.js → event-store-ELqkVOn0.js} +1 -1
  93. package/server/{event-store-CQL6NeqB.js → event-store-zY5MJHgF.js} +23 -4
  94. package/server/{events-BTdrdEq8.js → events-D6pyqhzM.js} +1 -1
  95. package/server/{events-DTfAe4My.js → events-D9PR1IC0.js} +3 -3
  96. package/server/{factory-CFibJuaw.js → factory-CRoOpGsF.js} +5 -5
  97. package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population--YUXU999.js} +4 -4
  98. package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-BORBTo0y.js} +2 -2
  99. package/server/{features-ez2271oH.js → features--nFkJY8v.js} +2 -2
  100. package/server/{feedback-target-CoFDHiM8.js → feedback-target-C0ZzyHvU.js} +1 -1
  101. package/server/{feedback-target-7mqqwrX6.js → feedback-target-Dt9BsapX.js} +8 -8
  102. package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-BG0RUZiu.js} +5 -5
  103. package/server/{feedback-writer-D3a22RCd.js → feedback-writer-D1fm-5Z8.js} +1 -1
  104. package/server/{flywheel-SVF02Jpq.js → flywheel-BekukH4i.js} +1 -1
  105. package/server/{flywheel-DHrgCphM.js → flywheel-BiT3odRb.js} +23 -15
  106. package/server/{flywheel-DzGtWnJ1.js → flywheel-CLVB55Be.js} +16 -15
  107. package/server/flywheel-merge-order-BJv1DZz1.js +462 -0
  108. package/server/flywheel-merge-order-BKw9o6ku.js +2 -0
  109. package/server/forge-CZbSg6Ds.js +383 -0
  110. package/server/forge-DK3blQb_.js +3 -0
  111. package/server/{from-kNxT0bZC.js → from-D_4_dk7i.js} +1 -1
  112. package/server/{fts-db-CE46vDkZ.js → fts-db-BeOomFa-.js} +2 -2
  113. package/server/{fts-operations-CqY6zl-i.js → fts-operations-BdewJ_g9.js} +2 -2
  114. package/server/git-utils-CI6cwyyC.js +3 -0
  115. package/server/{git-utils-CRw2zLPC.js → git-utils-ameCgDdy.js} +30 -5
  116. package/server/{github-app-C3QrAUd0.js → github-app-CQ1Lo6LA.js} +3 -3
  117. package/server/{github-app-ClZ2lk8D.js → github-app-DtAsvwzK.js} +1 -1
  118. package/server/{github-client-BnIsSrEN.js → github-client-BfyDxuRN.js} +2 -2
  119. package/server/{github-client-DfQYVUaw.js → github-client-Cj0yl_07.js} +1 -1
  120. package/server/github-pr-lookup-BDq6Wznz.js +58 -0
  121. package/server/{harness-binary-DPUi-Pv8.js → harness-binary-DqkftwTb.js} +2 -2
  122. package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-CqMqM1Mb.js} +4 -4
  123. package/server/{health-events-BBcTYQKU.js → health-events-CazRxJUS.js} +2 -2
  124. package/server/{health-events-BDOHby5Q.js → health-events-_xfTaOUs.js} +1 -1
  125. package/server/{hooks-CKZgXlJb.js → hooks-BO3QT1sn.js} +2 -2
  126. package/server/{hooks-DPVX1rwQ.js → hooks-BnJsxlSq.js} +1 -1
  127. package/server/{hume-Cz8igP9E.js → hume-CDYJxqx-.js} +2 -2
  128. package/server/hume-Dq--7rOQ.js +3 -0
  129. package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-BYqERdkE.js} +1 -1
  130. package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
  131. package/server/in-flight-guard-Bq3epG58.js +45 -0
  132. package/server/{infra-BEqFxlJc.js → infra-BjuxvjdS.js} +70 -5
  133. package/server/{injection-CPUIqNhI.js → injection-DZxlV2al.js} +1 -1
  134. package/server/{injection-C8aiVJrF.js → injection-UCf8EsjX.js} +7 -7
  135. package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-6kylZnrm.js} +26 -25
  136. package/server/inspect-agent-BVwDrVrz.js +2 -0
  137. package/server/{internal-token-s0-oKybJ.js → internal-token-DvMTQSOS.js} +2 -2
  138. package/server/{internal-token-BrcU6qfe.js → internal-token-M9omeXM1.js} +1 -1
  139. package/server/{io-C9kF1wtJ.js → io-VHvc0Ssp.js} +43 -26
  140. package/server/{issue-closed-CDJk4pIp.js → issue-closed-B6KJkmHZ.js} +7 -7
  141. package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-9gk3fnXN.js} +1 -1
  142. package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
  143. package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-DmCh7EHj.js} +10 -10
  144. package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-PMx8F1jr.js} +1 -1
  145. package/server/{issues-BMmP_77e.js → issues-CgnQ1OGQ.js} +2 -2
  146. package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-DJOH_O-w.js} +5 -4
  147. package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dv7AV_R1.js} +3 -3
  148. package/server/{label-reconciler-B4iOAjlC.js → label-reconciler--F85rufp.js} +4 -4
  149. package/server/{lifecycle-yPd___5E.js → lifecycle-CTdOWYMi.js} +2 -2
  150. package/server/{lifecycle-xmBfK2GJ.js → lifecycle-DDN8ApVY.js} +6 -7
  151. package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-D-lGdzK3.js} +5 -5
  152. package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-D_zTLvP1.js} +1 -1
  153. package/server/{linear-client-BsuUvkdA.js → linear-client-BQU36QqE.js} +2 -2
  154. package/server/{linear-client-CTskEeT_.js → linear-client-CY4O_Tu3.js} +1 -1
  155. package/server/linear-mcp-auth-BnU4TYfY.js +280 -0
  156. package/server/linear-mcp-auth-NYBq_oHZ.js +2 -0
  157. package/server/memory-fts-worker.js +1 -1
  158. package/server/{merge-CefQNAnq.js → merge-Bpx4jjht.js} +13 -11
  159. package/server/{merge-agent-4WOWlSYA.js → merge-agent-DdMVSV2Y.js} +233 -83
  160. package/server/{merge-agent-CKkgIBPB.js → merge-agent-DrXa1CpW.js} +1 -1
  161. package/server/{merge-batch-ClFn2T-y.js → merge-batch-C5q1c1GX.js} +1 -1
  162. package/server/merge-completeness-BMm8tMyZ.js +277 -0
  163. package/server/merge-completeness-D0ljXbk3.js +3 -0
  164. package/server/{merge-B1DiziGU.js → merge-idOG--29.js} +1 -1
  165. package/server/merge-ops-DdpTiEMt.js +2 -0
  166. package/server/merge-rebase-DGQpYJU3.js +2 -0
  167. package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-xLnMlw5h.js} +3 -3
  168. package/server/{merge-set-DJ8-UErs.js → merge-set-DH7ot3yz.js} +11 -5
  169. package/server/merge-set-DzsOTBg5.js +3 -0
  170. package/server/{merge-sync-VPV28g0g.js → merge-sync-CQ-LgZ1_.js} +406 -153
  171. package/server/merge-sync-Ca7F5JnQ.js +3 -0
  172. package/server/{merge-train-CHopycP0.js → merge-train-DTEMyIu4.js} +18 -8
  173. package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-CNPJzepw.js} +4 -4
  174. package/server/merge-verification-x3JO8Dtz.js +220 -0
  175. package/server/merged-docker-cleanup-worker-CTpC27Bs.js +107 -0
  176. package/server/merged-docker-cleanup-worker-Cdi9apm-.js +3 -0
  177. package/server/{multipart-parser-duPAfSBw.js → multipart-parser-IMSBfePV.js} +2 -2
  178. package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-C5ULAXwO.js} +1 -1
  179. package/server/node_modules/.package-lock.json +27 -27
  180. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  181. package/server/node_modules/@google-cloud/common/package.json +2 -2
  182. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  183. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  184. package/server/node_modules/gaxios/package.json +1 -1
  185. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  186. package/server/node_modules/google-auth-library/package.json +1 -1
  187. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  188. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  189. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  190. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  191. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  193. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  196. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  197. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  198. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  203. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  204. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  205. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  206. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  207. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  208. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  209. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  210. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  211. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  221. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  222. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  225. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  226. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  227. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  228. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  229. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  230. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  231. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  243. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  244. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  245. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  246. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  247. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  248. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  249. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  250. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  251. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  252. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  253. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  254. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  255. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  256. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  257. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  258. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  259. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  260. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  261. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  263. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  264. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  265. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  266. package/server/node_modules/google-gax/package.json +5 -5
  267. package/server/node_modules/retry-request/package.json +4 -4
  268. package/server/node_modules/teeny-request/package.json +5 -5
  269. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  270. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  271. package/server/node_modules/undici/lib/core/request.js +12 -1
  272. package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  273. package/server/node_modules/undici/lib/global.js +36 -16
  274. package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
  275. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  276. package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
  277. package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
  278. package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
  279. package/server/node_modules/undici/lib/util/cache.js +328 -66
  280. package/server/node_modules/undici/lib/util/date.js +23 -6
  281. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  282. package/server/node_modules/undici/package.json +1 -1
  283. package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
  284. package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
  285. package/server/package-lock.json +28 -28
  286. package/server/package.json +1 -1
  287. package/server/{pan-dir-B0c3w0Ya.js → pan-dir-ubraCiUg.js} +24 -10
  288. package/server/{paths-D-xWGHdh.js → paths-cXmOwSbh.js} +2 -2
  289. package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
  290. package/server/{pickup-DUCLWrJY.js → pickup-D8xtG1J2.js} +1 -1
  291. package/server/pipeline-membership-BGSvkT2M.js +3 -0
  292. package/server/pipeline-membership-CrAPLYtf.js +57 -0
  293. package/server/{pipeline-membership-mY3GprlK.js → pipeline-membership-gather-CET40frr.js} +177 -109
  294. package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
  295. package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
  296. package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-ImNXknf0.js} +1 -1
  297. package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
  298. package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-Bim6bThI.js} +2 -2
  299. package/server/{project-repos-B6GycDh9.js → project-repos-C0nuoBGv.js} +7 -3
  300. package/server/project-repos-CRE6Ykow.js +3 -0
  301. package/server/projects-B03Wr-xc.js +3 -0
  302. package/server/{prompts-DxzFXuLl.js → prompts-BEx08AIu.js} +2 -2
  303. package/server/{providers-u4Ga0jOr.js → providers-D7IluJe0.js} +1 -1
  304. package/server/{providers-qQAwGQDW.js → providers-evXhiQeg.js} +7 -7
  305. package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
  306. package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
  307. package/server/public/assets/{dist-D7zYSEA6.js → dist-CxAOHbil.js} +1 -1
  308. package/server/public/assets/{dist-ByIuzMQW.js → dist-DqDRYW6P.js} +3 -3
  309. package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
  310. package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
  311. package/server/public/assets/index-Cc7cnFC4.css +1 -0
  312. package/server/public/assets/index-K0hAYCgV.js +807 -0
  313. package/server/public/assets/{linear-BBbArIcK.js → linear-B4cuEFmO.js} +1 -1
  314. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
  315. package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
  316. package/server/public/assets/{prod-B8vYiu52.js → prod-CN2nHBvX.js} +4 -4
  317. package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
  318. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
  319. package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
  320. package/server/public/index.html +2 -2
  321. package/server/{pull-requests-7N8WKseP.js → pull-requests-Cv7LxzUN.js} +1 -1
  322. package/server/{pull-requests-_lHueOHW.js → pull-requests-DHWiKxo7.js} +19 -10
  323. package/server/{queries-CjNIf-Ub.js → queries-DHJm7bTd.js} +631 -110
  324. package/server/{rally-CyWT_lNO.js → rally-B71M9f4o.js} +3 -3
  325. package/server/rally-YDjU513q.js +3 -0
  326. package/server/{rally-api-ClOSd-Tt.js → rally-api-D5uXN08-.js} +1 -1
  327. package/server/{rally-api-C8e_1JRi.js → rally-api-Dkqmok65.js} +2 -2
  328. package/server/{rally-client-lc-nokqr.js → rally-client-Bfqm6XI4.js} +4 -4
  329. package/server/{rally-client-sgtVqzNU.js → rally-client-CxsA6ExK.js} +1 -1
  330. package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
  331. package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
  332. package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-0EEYReVZ.js} +16 -7
  333. package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-qeRqHZxH.js} +2 -2
  334. package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-BbYFsqLa.js} +7 -6
  335. package/server/record-CtroO946.js +3 -0
  336. package/server/record-update-DH6dLJID.js +3 -0
  337. package/server/{record-update-dE1Aw83j.js → record-update-Z0QCxmMp.js} +124 -34
  338. package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-eJe26h-f.js} +2 -2
  339. package/server/{release-engine-Cx48W7z8.js → release-engine-lPUp-MTd.js} +5 -5
  340. package/server/{release-set-CQfuN9-v.js → release-set-BwGeyZKX.js} +3 -3
  341. package/server/{remote-C_2hasl7.js → remote-BCd02Es1.js} +3 -3
  342. package/server/{remote-ChgimyYa.js → remote-CVGUhXMV.js} +3 -3
  343. package/server/{remote-agents-CA3Ihlxj.js → remote-agents-C1bssi41.js} +2 -2
  344. package/server/{remote-agents-By1ige5O.js → remote-agents-C_VxssLU.js} +300 -46
  345. package/server/{remote-completion-fVe9e_3u.js → remote-completion-DAB0P706.js} +12 -12
  346. package/server/resume-u9byntrq.js +3 -0
  347. package/server/{review-agent-DNboMyW4.js → review-agent-CD4RCI0Y.js} +1 -1
  348. package/server/{review-agent-CIGOQYBD.js → review-agent-CHhI66UP.js} +60 -47
  349. package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-DSMRIfuJ.js} +7 -6
  350. package/server/{review-context-2uj-YQ8J.js → review-context-oFuBbiEE.js} +8 -8
  351. package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
  352. package/server/review-status-BZH8h-6W.js +3 -0
  353. package/server/review-status-emit-CUExtHd5.js +50 -0
  354. package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-QV_hQkgS.js} +4 -4
  355. package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
  356. package/server/review-status-source-ylw5QZUR.js +3 -0
  357. package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-483sujRo.js} +2 -2
  358. package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-NaWvI9Xf.js} +1 -1
  359. package/server/review-status-yljtTd-q.js +7521 -0
  360. package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-BPDn4li_.js} +1 -1
  361. package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-CELeUinh.js} +48 -8
  362. package/server/{rollup-FGsKki9R.js → rollup-DTNvelz9.js} +8 -8
  363. package/server/{rollup-BKQC7jp4.js → rollup-DYZfq1c4.js} +1 -1
  364. package/server/{scanner-CnqEZeDy.js → scanner-CV35oSn4.js} +8 -7
  365. package/server/{sequence-io-D909zgeH.js → sequence-io-DF_8iuhV.js} +4 -4
  366. package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-B2WeCtGi.js} +5 -5
  367. package/server/server.js +1952 -578
  368. package/server/{service-CLeAoU6G.js → service-Br9rpBNA.js} +81 -64
  369. package/server/{session-fork-CHI1XvL9.js → session-fork-D0LY152N.js} +2 -2
  370. package/server/{session-history-BT3IvqhC.js → session-history-BUyK29eq.js} +4 -4
  371. package/server/{settings-BTMvpNFU.js → settings-Bse1Pdcj.js} +3 -3
  372. package/server/settings-CdvIF84R.js +2 -0
  373. package/server/{settings-C0zgxOGf.js → settings-CvVGqNEs.js} +3 -2
  374. package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-BWLa8ODz.js} +2 -2
  375. package/server/{shadow-state-7a-524T8.js → shadow-state-B4fpKxOO.js} +2 -2
  376. package/server/{shadow-state-DnDyjujH.js → shadow-state-FV6PHfEW.js} +1 -1
  377. package/server/{shadow-utils-Db3oroFG.js → shadow-utils-D7asqxOZ.js} +2 -2
  378. package/server/{ship-log-D9MlVzYU.js → ship-log-xplJ8t75.js} +1 -1
  379. package/server/{smart-compaction-CV2ukKND.js → smart-compaction-CPp2Ykf6.js} +1 -1
  380. package/server/{smart-compaction-KCYScAU1.js → smart-compaction-D3U_79f-.js} +8 -7
  381. package/server/{spawn-planning-session-qUC2VWu3.js → spawn-planning-session-1nFi3gfk.js} +1 -1
  382. package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-DGfZ5B8D.js} +17 -17
  383. package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-Br48eiDP.js} +1 -1
  384. package/server/{specialist-context-Bn3dCGS2.js → specialist-context-cVbGnTa3.js} +5 -5
  385. package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
  386. package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Cl5-hqT8.js} +3 -3
  387. package/server/{specialists-CC4r-c2s.js → specialists-CNfYO3G2.js} +975 -227
  388. package/server/{specialists-jiuuyVkp.js → specialists-Cicieuzu.js} +18 -18
  389. package/server/{specialists-CShuVGWT.js → specialists-JHsdU3pA.js} +1 -1
  390. package/server/{specialists-DM6bWjsi.js → specialists-Tdezg_6N.js} +1 -1
  391. package/server/specs-Bt7WJDoC.js +3 -0
  392. package/server/src-CRmCHlma.js +11408 -0
  393. package/server/{src-CXmtj0im.js → src-Ck028hjO.js} +6 -6
  394. package/server/{src-CdmnTM2m.js → src-UWcGe0Ix.js} +3 -3
  395. package/server/{stack-health-Bn3o8FBX.js → stack-health-CJLMrLBl.js} +1 -1
  396. package/server/{stack-health-DxSdG9cW.js → stack-health-DqSqx0zv.js} +7 -5
  397. package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-CYFOUNlT.js} +4 -4
  398. package/server/{staleness-CT34nwr9.js → staleness-BQ-0gMYK.js} +1 -1
  399. package/server/{staleness-DPm7ClwA.js → staleness-D47CUJok.js} +1 -1
  400. package/server/{state-home-Cn_Qu8IX.js → state-home-BYV7qZTW.js} +2 -2
  401. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
  402. package/server/{state-migrate-BGg2ZaOt.js → state-migrate-CvvBtS0Y.js} +4 -4
  403. package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-Wt0UVvu1.js} +1 -1
  404. package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-mkLC6G_t.js} +79 -22
  405. package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
  406. package/server/{summary-fork-DpcxN9tf.js → summary-fork-CD7GOts0.js} +2 -2
  407. package/server/{summary-fork-D1RAk9rJ.js → summary-fork-xiXBnWG9.js} +8 -8
  408. package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-B5SbvDx2.js} +1 -1
  409. package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
  410. package/server/supervisor/pty-supervisor.js +49 -3
  411. package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-B7lp0ElT.js} +2 -2
  412. package/server/{supervisor-wM4ooB5O.js → supervisor-DL788vos.js} +3 -3
  413. package/server/supervisor-UWiQNK-y.js +2 -0
  414. package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-BV14DF5N.js} +3 -3
  415. package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-pdWG6ZQs.js} +2 -2
  416. package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-l2F4_zim.js} +15 -16
  417. package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-qakFIIGz.js} +6 -6
  418. package/server/{test-verdict-bWYBtqBg.js → test-verdict-BJYDggMm.js} +1 -1
  419. package/server/{test-verdict-gscuksPv.js → test-verdict-Gw-btEfb.js} +1 -1
  420. package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-BKOYB616.js} +1 -1
  421. package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-CBaWkV9k.js} +2 -2
  422. package/server/{tmux-R7N7y-Mh.js → tmux-B1Wbxz5o.js} +3 -3
  423. package/server/{tmux-B6z7h_vZ.js → tmux-DQ6jB76i.js} +1 -1
  424. package/server/{launcher-generator-BBWG_SiS.js → tmux-dedup-DbN6MGzM.js} +428 -9
  425. package/server/{token-BK6t8BIT.js → token-Cxbk023d.js} +2 -2
  426. package/server/{token-util-DxXu-vd1.js → token-util-CLq2MmQt.js} +1 -1
  427. package/server/token-util-zlz9U0ki.js +3 -0
  428. package/server/{tracker-config-G6latr8C.js → tracker-config-DZ8Zn2nQ.js} +2 -2
  429. package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-L0FKtjq2.js} +3 -3
  430. package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-bNX6jKkb.js} +1 -1
  431. package/server/{tunnel-CDVKJpRv.js → tunnel-BAm1XgjG.js} +3 -3
  432. package/server/{tunnel-DGdUkGoZ.js → tunnel-CjSnHdTc.js} +1 -1
  433. package/server/{types-5M0lupud.js → types-q67TYYg5.js} +1 -1
  434. package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
  435. package/server/uat-train-Cu-4nvbf.js +2 -0
  436. package/server/uat-train-D5UjcyAa.js +0 -0
  437. package/server/{validate-IfDGkaVR.js → validate-Cxsx5Uz1.js} +8 -6
  438. package/server/{validation-CC9OPqJZ.js → validation-DEaTZafj.js} +1 -1
  439. package/server/{validation-Dw1pzDzr.js → validation-VZgJxmqc.js} +4 -4
  440. package/server/{verification-artifact-B3itKTxu.js → verification-artifact-C85cRTc_.js} +1 -1
  441. package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-g3yuxQDL.js} +1 -1
  442. package/server/{verification-runner-BW4HOKAz.js → verification-runner-DlZI8yhw.js} +1 -1
  443. package/server/{verification-runner-CkgX6EtI.js → verification-runner-KDZIsBj4.js} +40 -18
  444. package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-Jr94BF3Y.js} +1 -1
  445. package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-C-vuP3_J.js} +20 -9
  446. package/server/workflows-CHrx_hcW.js +2 -0
  447. package/server/{workflows-mbQzh6mQ.js → workflows-D0oip4eV.js} +161 -78
  448. package/server/{workspace--8tnhDI0.js → workspace-BqFg__wH.js} +1 -1
  449. package/server/{workspace-BPUws1-_.js → workspace-C0fH3aek.js} +3 -3
  450. package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
  451. package/server/workspace-anchor-drift-CZKofakh.js +224 -0
  452. package/server/{workspace-config-CIVWZOQr.js → workspace-config-B123aZl-.js} +1 -1
  453. package/server/workspace-manager-CDTKjjdU.js +3 -0
  454. package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-CwO-Hek7.js} +156 -117
  455. package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-CQv00QwK.js} +2 -2
  456. package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-D4M8BM4W.js} +1 -1
  457. package/server/{workspaces-Do_9J0LQ.js → workspaces-j1e_6aAT.js} +719 -292
  458. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  459. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  460. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  461. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  462. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  463. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  464. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  465. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  466. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  467. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  468. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  469. package/server/activity-logger-OEUBdfZ8.js +0 -3
  470. package/server/agent-state-Bc3tzUC8.js +0 -3
  471. package/server/agents-wi9NWzs2.js +0 -3
  472. package/server/archive-planning-BZDgzoEj.js +0 -3
  473. package/server/cli-B86rejVV.js +0 -3
  474. package/server/conversation-service-BLd3MYsG.js +0 -3
  475. package/server/deacon-kiQrb4ZT.js +0 -4
  476. package/server/deacon-swarm-C-GwfjJy.js +0 -2
  477. package/server/deploy-window-DkZraDyj.js +0 -3
  478. package/server/dist-Bzy0y69j.js +0 -3
  479. package/server/flywheel-merge-order-UU0tiUld.js +0 -245
  480. package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
  481. package/server/forge-CNFnyqps.js +0 -270
  482. package/server/forge-DXnS_YFH.js +0 -2
  483. package/server/git-utils-D0_yhCgF.js +0 -3
  484. package/server/github-pr-lookup-D16NGsSO.js +0 -44
  485. package/server/hume-ccTf4wTX.js +0 -3
  486. package/server/inspect-agent-Brtz0URj.js +0 -2
  487. package/server/merge-ops-CR44oU9-.js +0 -2
  488. package/server/merge-set-bUqbm3yc.js +0 -3
  489. package/server/merge-sync-BJYeOODr.js +0 -3
  490. package/server/merge-verification-BkaOqPsw.js +0 -124
  491. package/server/project-repos-DXKQsc_m.js +0 -3
  492. package/server/projects-vjjcmiN8.js +0 -3
  493. package/server/public/assets/index-CWeMerGO.js +0 -804
  494. package/server/public/assets/index-CenuJ3Cw.css +0 -1
  495. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
  496. package/server/rally-zhhtXuDP.js +0 -3
  497. package/server/record-CN0pj4_5.js +0 -3
  498. package/server/record-update-bLJxAXH4.js +0 -3
  499. package/server/resume-BFv1PGpA.js +0 -3
  500. package/server/review-status-btEYlaxA.js +0 -3
  501. package/server/review-status-kZj_KyCk.js +0 -1470
  502. package/server/settings-66A6uvIA.js +0 -2
  503. package/server/specs-C8Wsn2XO.js +0 -3
  504. package/server/src-DtcUOZCq.js +0 -4826
  505. package/server/supervisor-FTJAIsAK.js +0 -2
  506. package/server/token-util-DuPuNriz.js +0 -3
  507. package/server/tracker-utils-B4ylXZQK.js +0 -3
  508. package/server/uat-train-B05BWkp-.js +0 -2
  509. package/server/uat-train-DDSrSoV1.js +0 -2152
  510. package/server/workflows-BQu4RFQ-.js +0 -2
  511. package/server/workspace-manager-CWT55qeI.js +0 -3
@@ -1,52 +1,54 @@
1
1
  import { n as __esmMin, o as __toESM } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { B as getProviderEnvSync, Br as getOverdeckHome, C as TIERED_EXECUTION_DIFFICULTIES, D as resolveTieredExecutionEnabled, Ft as resolveProjectForIssue, G as setupCredentialFileAuthSync, Gr as sessionFilePath, H as init_providers, Hr as isDevMode, It as writeAgentHarnessModelSync, K as ensureOpenAICompatibleProxyRunning, L as clearCredentialFileAuthSync, Mt as readIssueRecordForWorkspaceSync, Nr as encodeClaudeProjectDir, Nt as readIssueRecordSync, O as resolveTieredExecutionEnabledForIssue, Ot as init_record, Qn as resolveBareNumericIdSync, R as getBuiltInDefaultHarness, S as DEFAULT_TIERED_EXECUTION_CONFIG, T as init_tier_table, Tn as init_projects, Ur as packageRoot, V as getProviderForModelSync, Vr as init_paths, Wr as resolveOhmypiExtensionPath, Yn as init_issue_id, dt as fnv1a32, er as require_dist, et as init_roles, f as loadConfigSync, fn as findProjectByPathSync, ft as init_percent, gn as getIssuePrefix, hr as AGENTS_DIR, in as shouldCommitLegacyWorkspaceArtifacts, ir as FsError, it as getModelCapabilitySync, l as isClaudeCodeChannelsMcpEnabled, lt as resolveModelIdSync, mr as init_errors, nn as init_state_read_home, nr as ClaudeCredentialParseError, ot as hasModelCapabilitySync, q as init_openai_compatible_proxy, st as init_model_capabilities, t as init_config_yaml, tt as resolveModel, u as isTldrEnabledSync, ut as fmix32, vn as getProjectSwarmHotspots, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
3
- import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-DDlOIAML.js";
4
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BEqFxlJc.js";
5
- import { $ as init_child_env, A as listPaneValues, D as killSession, E as isPaneDead, H as sessionExists, O as killSessionSync, P as listSessionsSync, R as sendEscapeKeyAsync, U as sessionExistsSync, V as sendRawKeystroke, W as setOption, X as BLANKED_PROVIDER_ENV, a as capturePaneSync, c as createSessionSync, i as capturePane, m as exactPaneTarget, s as createSession, w as init_tmux, z as sendKeys } from "./tmux-R7N7y-Mh.js";
6
- import { a as init_event_store, i as initEventStore } from "./event-store-CQL6NeqB.js";
7
- import { a as OHMYPI_BEHAVIOR, o as getHarnessBehavior } from "./src-DtcUOZCq.js";
8
- import { D as listOverdeckAgentStatesSync, E as init_agent_state_sync, O as saveOverdeckAgentStateSync, T as getOverdeckAgentStateSync, h as resetPipelineVerdictsForWorkStartSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
9
- import { i as countAgentsByStatus, o as init_agents$1 } from "./agents-EbI0zCJl.js";
10
- import { n as ensureSessionContextBriefingFile, r as init_briefing_freshness } from "./briefing-freshness-D1wzUIWv.js";
11
- import { o as getPricingSync, s as init_cost } from "./cost-B2ddP6wq.js";
12
- import { _ as init_tier_metrics, g as estimateFeedDeliveryTokens, v as recordTierFeedDelivery } from "./cost-sync-BsN6ER0n.js";
13
- import { a as persistCurrentSessionId, d as isAgentStateServiceInProcess, i as logLauncherSessionPinned, l as getRuntimeSnapshot, n as createFreshSessionIdentity, o as init_persistent_logger, r as init_session_history, s as logAgentLifecycleSync, u as init_agent_runtime_mirror } from "./session-history-BT3IvqhC.js";
14
- import { t as init_behavior } from "./behavior-B3exJ42O.js";
15
- import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
16
- import { i as readReviewStatusMap, n as init_review_status_source, r as isRoleTerminal } from "./review-status-source-CxuEjLGg.js";
17
- import { m as readWorkspacePlanSync, o as init_io } from "./io-C9kF1wtJ.js";
18
- import { c as bridgeGeminiAuthToCliproxy, d as getCliproxyAuthDir, g as getCliproxyLogPath, l as decodeJwtPayload$1, p as getCliproxyClientEnv, s as bridgeCodexAuthToCliproxySync, v as init_cliproxy } from "./cliproxy-C8a1vtTU.js";
19
- import { L as normalizeHarness, R as reactivateConversationForSpawn, S as getConversationByName, k as init_conversations, y as createConversation } from "./conversations-6AfUfbwc.js";
20
- import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-DKZFMbFt.js";
21
- import { a as readCavemanVariant, n as init_workspace } from "./workspace-BPUws1-_.js";
22
- import { a as normalizeModelOverrideSync, i as init_model_validation, n as init_launcher_generator, o as requireModelOverrideSync, s as shellQuoteModelIdSync, t as generateLauncherScriptSync } from "./launcher-generator-BBWG_SiS.js";
23
- import { a as init_claude_permissions, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-DNWEVV6z.js";
24
- import { E as init_layers, I as workspaceContextFile, P as resolveWorkspaceContextFile, c as init_render, i as workspaceContextWithoutProjectLayer, l as renderGlobalLayer, r as init_assemble, u as renderProjectLayer, v as init_harness, y as renderForHarness } from "./assemble-J2ZZ2C15.js";
25
- import { a as extractThreadIdFromRollout, c as initCodexHome, l as init_codex, o as findLatestRollout } from "./codex-BZXGhUVB.js";
26
- import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-DPUi-Pv8.js";
27
- import { f as init_config, m as loadConfigSync$1 } from "./config-BZ0sHTju.js";
28
- import { a as getFlywheelActiveRunIdSync, s as init_control_settings } from "./control-settings-BQp7_4uD.js";
29
- import { n as createTrackerFromConfig, r as init_factory, t as createTracker } from "./factory-CFibJuaw.js";
30
- import { a as getWorkspaceStackHealth, s as init_stack_health } from "./stack-health-DxSdG9cW.js";
31
- import { i as createActiveSlice, l as init_dag, o as getDispatchableItems, s as groupItemsByWave } from "./dag-B1ucnjDU.js";
32
- import { c as generateFixedPointPromptSync, f as initHookSync, n as checkHookSync, p as init_hooks } from "./hooks-CKZgXlJb.js";
33
- import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-3lNZkyT4.js";
34
- import { a as loadCloisterConfigSync, r as init_config$1 } from "./config-CKxYiCmX.js";
35
- import { t as init_reap_terminal_sessions } from "./reap-terminal-sessions-BtHPo6Xc.js";
36
- import { c as isStateMigrated, o as init_state_home } from "./state-home-Cn_Qu8IX.js";
37
- import { n as provisionClaudeHooks, t as init_claude_hooks_provision } from "./claude-hooks-provision-D8GXF3_s.js";
38
- import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-BREGpnLk.js";
39
- import { i as init_git_utils, o as renderWorkspaceGitShowPromise } from "./git-utils-CRw2zLPC.js";
40
- import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-DlP_UjHq.js";
2
+ import { B as getProviderEnvSync, C as TIERED_EXECUTION_DIFFICULTIES, Cr as ClaudeCredentialParseError, D as resolveTieredExecutionEnabled, Fr as init_errors, G as setupCredentialFileAuthSync, Gn as init_projects, H as init_providers, In as getIssuePrefix, Ir as AGENTS_DIR, K as ensureOpenAICompatibleProxyRunning, L as clearCredentialFileAuthSync, Mn as findProjectByPathSync, O as resolveTieredExecutionEnabledForIssue, Pt as init_record, R as getBuiltInDefaultHarness, Rn as getProjectSwarmHotspots, Rt as readIssueRecordForWorkspaceSync, S as DEFAULT_TIERED_EXECUTION_CONFIG, Sn as init_state_read_home, T as init_tier_table, Tr as FsError, Ut as writeAgentHarnessModelSync, V as getProviderForModelSync, Vt as resolveProjectForIssue, ar as resolveProjectFromIssueSync, ci as init_paths, di as resolveOhmypiExtensionPath, dt as fmix32, ei as encodeClaudeProjectDir, et as init_roles, f as loadConfigSync, fi as sessionFilePath, ft as fnv1a32, gr as init_issue_id, it as getModelCapabilitySync, l as isClaudeCodeChannelsMcpEnabled, li as isDevMode, lt as resolveModelIdSync, ot as hasModelCapabilitySync, pt as init_percent, q as init_openai_compatible_proxy, si as getOverdeckHome, st as init_model_capabilities, t as init_config_yaml, tt as resolveModel, u as isTldrEnabledSync, ui as packageRoot, ut as CLIPROXY_GPT56_CONTEXT_WINDOW, wn as shouldCommitLegacyWorkspaceArtifacts, xr as require_dist, yr as resolveBareNumericIdSync, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CmOPzmBb.js";
3
+ import { i as emitActivityTtsSync, o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
4
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BjuxvjdS.js";
5
+ import { A as listPaneValues, D as killSession, E as isPaneDead, H as sessionExists, O as killSessionSync, P as listSessionsSync, Q as BLANKED_PROVIDER_ENV, R as sendEscapeKeyAsync, U as sessionExistsSync, V as sendRawKeystroke, W as setOption, a as capturePaneSync, c as createSessionSync, i as capturePane, m as exactPaneTarget, s as createSession, tt as init_child_env, w as init_tmux, z as sendKeys } from "./tmux-B1Wbxz5o.js";
6
+ import { a as init_event_store, i as initEventStore } from "./event-store-zY5MJHgF.js";
7
+ import { o as OHMYPI_BEHAVIOR, s as getHarnessBehavior } from "./src-CRmCHlma.js";
8
+ import { F as init_pipeline_agent_reader, G as saveOverdeckAgentStateSync, H as getOverdeckAgentStateSync, I as registerPipelineTelemetryAgentReader, S as setReviewStatusSync, U as init_agent_state_sync, W as listOverdeckAgentStatesSync, f as init_review_status, u as getReviewStatusSync, v as resetPipelineVerdictsForWorkStartSync } from "./review-status-yljtTd-q.js";
9
+ import { i as countAgentsByStatus, o as init_agents$1 } from "./agents-C5rWYhb6.js";
10
+ import { n as ensureSessionContextBriefingFile, r as init_briefing_freshness } from "./briefing-freshness-DHmCSLar.js";
11
+ import { o as getPricingSync, s as init_cost } from "./cost-Bgcub5kW.js";
12
+ import { _ as init_tier_metrics, g as estimateFeedDeliveryTokens, v as recordTierFeedDelivery } from "./cost-sync-Dv3LUaNW.js";
13
+ import { a as persistCurrentSessionId, d as isAgentStateServiceInProcess, i as logLauncherSessionPinned, l as getRuntimeSnapshot, n as createFreshSessionIdentity, o as init_persistent_logger, r as init_session_history, s as logAgentLifecycleSync, u as init_agent_runtime_mirror } from "./session-history-BUyK29eq.js";
14
+ import { t as init_behavior } from "./behavior-CfIg6pKp.js";
15
+ import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DvMTQSOS.js";
16
+ import { i as readReviewStatusMap, n as init_review_status_source, r as isRoleTerminal } from "./review-status-source-CpvJnvnQ.js";
17
+ import { m as readWorkspacePlanSync, o as init_io } from "./io-VHvc0Ssp.js";
18
+ import { c as bridgeGeminiAuthToCliproxy, d as getCliproxyAuthDir, g as getCliproxyLogPath, l as decodeJwtPayload$1, p as getCliproxyClientEnv, s as bridgeCodexAuthToCliproxySync, v as init_cliproxy } from "./cliproxy-C8mB3KuB.js";
19
+ import { L as normalizeHarness, R as reactivateConversationForSpawn, S as getConversationByName, k as init_conversations, y as createConversation } from "./conversations-BUpYsOZg.js";
20
+ import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population--YUXU999.js";
21
+ import { a as readCavemanVariant, n as init_workspace } from "./workspace-C0fH3aek.js";
22
+ import { _ as shellQuoteModelIdSync, d as generateLauncherScriptSync, f as init_launcher_generator, g as requireModelOverrideSync, h as normalizeModelOverrideSync, i as completeKeyedSubmit, l as init_tmux_dedup, m as init_model_validation, u as sendKeysDedup } from "./tmux-dedup-DbN6MGzM.js";
23
+ import { a as init_claude_permissions, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-CN0cSCPp.js";
24
+ import { E as init_layers, I as workspaceContextFile, P as resolveWorkspaceContextFile, c as init_render, i as workspaceContextWithoutProjectLayer, l as renderGlobalLayer, r as init_assemble, u as renderProjectLayer, v as init_harness, y as renderForHarness } from "./assemble-DnffNpOo.js";
25
+ import { a as extractThreadIdFromRollout, c as initCodexHome, l as init_codex, o as findLatestRollout } from "./codex-Drlf5Xhf.js";
26
+ import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-DqkftwTb.js";
27
+ import { f as init_config, m as loadConfigSync$1 } from "./config-Dr3pW6w6.js";
28
+ import { a as getFlywheelActiveRunIdSync, s as init_control_settings } from "./control-settings-C7DUehE1.js";
29
+ import { n as createTrackerFromConfig, r as init_factory, t as createTracker } from "./factory-CRoOpGsF.js";
30
+ import { a as getWorkspaceStackHealth, s as init_stack_health } from "./stack-health-DqSqx0zv.js";
31
+ import { i as createActiveSlice, l as init_dag, o as getDispatchableItems, s as groupItemsByWave } from "./dag-ombYYt4s.js";
32
+ import { c as generateFixedPointPromptSync, f as initHookSync, n as checkHookSync, p as init_hooks } from "./hooks-BO3QT1sn.js";
33
+ import { a as init_git_utils, c as rehydrateHeadAnchor, l as renderWorkspaceGitShowPromise } from "./git-utils-ameCgDdy.js";
34
+ import { n as init_workspace_anchor_drift, t as evaluateWorkspaceAnchorDrift } from "./workspace-anchor-drift-CZKofakh.js";
35
+ import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-CqMqM1Mb.js";
36
+ import { a as loadCloisterConfigSync, r as init_config$1 } from "./config-B2IMcBxx.js";
37
+ import { t as init_reap_terminal_sessions } from "./reap-terminal-sessions-CvmwaqKv.js";
38
+ import { c as isStateMigrated, o as init_state_home } from "./state-home-BYV7qZTW.js";
39
+ import { n as provisionClaudeHooks, t as init_claude_hooks_provision } from "./claude-hooks-provision-fvy4RD2b.js";
40
+ import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-D-lGdzK3.js";
41
+ import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-BV14DF5N.js";
42
+ import { createRequire } from "node:module";
41
43
  import { dirname, join, relative } from "node:path";
42
44
  import { Data, Duration, Effect, FileSystem } from "effect";
43
45
  import { appendFileSync, existsSync, mkdirSync, readFileSync, rmSync, statSync, statfsSync, unlinkSync, writeFileSync } from "fs";
44
- import { basename as basename$1, dirname as dirname$1, join as join$1, resolve as resolve$1 } from "path";
46
+ import { basename as basename$1, dirname as dirname$1, join as join$1, relative as relative$1, resolve as resolve$1, sep as sep$1 } from "path";
45
47
  import { homedir } from "os";
46
48
  import { cpus as cpus$1, loadavg as loadavg$1, platform as platform$1, totalmem as totalmem$1 } from "node:os";
47
49
  import { chmodSync as chmodSync$1, closeSync as closeSync$1, constants, cpSync, createReadStream as createReadStream$1, existsSync as existsSync$1, mkdirSync as mkdirSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, renameSync as renameSync$1, rmSync as rmSync$1, statSync as statSync$1, unlinkSync as unlinkSync$1, writeFileSync as writeFileSync$1, writeSync } from "node:fs";
48
- import { chmod, mkdir, readFile, stat as stat$1, writeFile } from "node:fs/promises";
49
- import { randomUUID } from "crypto";
50
+ import { chmod, mkdir, readFile, readdir, readlink, stat as stat$1, writeFile } from "node:fs/promises";
51
+ import { createHash, randomUUID } from "crypto";
50
52
  import { ChildProcess } from "effect/unstable/process";
51
53
  import { mkdir as mkdir$1, open as open$1, readFile as readFile$1, readdir as readdir$1, rename as rename$1, rm as rm$1, stat as stat$2, writeFile as writeFile$1 } from "fs/promises";
52
54
  import { platform as platform$2 } from "process";
@@ -1099,6 +1101,31 @@ var init_identity = __esmMin((() => {
1099
1101
  SINGLETON_AGENT_IDS = new Set(["flywheel-orchestrator", "sequencer-runner"]);
1100
1102
  }));
1101
1103
  //#endregion
1104
+ //#region ../../lib/deploy/active-dashboard-bundle.ts
1105
+ function activeDashboardBundleFile() {
1106
+ return join$1(getOverdeckHome(), "active-dashboard-bundle.json");
1107
+ }
1108
+ function isInside(parent, candidate) {
1109
+ const pathFromParent = relative$1(resolve$1(parent), resolve$1(candidate));
1110
+ return pathFromParent === "" || pathFromParent !== ".." && !pathFromParent.startsWith(`..${sep$1}`);
1111
+ }
1112
+ function readActiveDashboardBundleSync() {
1113
+ try {
1114
+ const parsed = JSON.parse(readFileSync(activeDashboardBundleFile(), "utf8"));
1115
+ if (typeof parsed.repoRoot !== "string" || typeof parsed.deployRoot !== "string" || typeof parsed.serverPath !== "string" || !isInside(parsed.deployRoot, parsed.serverPath) || !existsSync(parsed.serverPath)) return null;
1116
+ return {
1117
+ repoRoot: resolve$1(parsed.repoRoot),
1118
+ deployRoot: resolve$1(parsed.deployRoot),
1119
+ serverPath: resolve$1(parsed.serverPath)
1120
+ };
1121
+ } catch {
1122
+ return null;
1123
+ }
1124
+ }
1125
+ var init_active_dashboard_bundle = __esmMin((() => {
1126
+ init_paths();
1127
+ }));
1128
+ //#endregion
1102
1129
  //#region ../../lib/channels/pty-supervisor-locate.ts
1103
1130
  /**
1104
1131
  * Locate (and if necessary materialize) the PTY supervisor artifact.
@@ -1125,15 +1152,63 @@ var init_identity = __esmMin((() => {
1125
1152
  * (content-hash keyed over the whole staged tree, so an app upgrade
1126
1153
  * refreshes it even when only non-entry files changed) and the vendored
1127
1154
  * packages land under node_modules/ there for normal Node resolution.
1155
+ * 3. <activeBundle.repoRoot>/dist/pty-supervisor.js — the primary checkout a
1156
+ * `pan reload` deployment was built from (PAN-3172).
1128
1157
  *
1129
- * Missing everywhere is a build/packaging defect and throws — never silently
1130
- * degrade a spawn that the caller expects to be supervised.
1158
+ * A candidate is only accepted when its own bare imports actually resolve from
1159
+ * where it sits. Existence alone is not enough: `pan reload` runs the dashboard
1160
+ * out of ~/.overdeck/deployments/dashboard/.pan-reload-generation-{a,b}, and a
1161
+ * generation whose node_modules cannot resolve @lydell/node-pty produces a
1162
+ * supervisor that dies on ERR_MODULE_NOT_FOUND before it ever binds its socket
1163
+ * — every conversation spawned afterwards then died on a socket timeout with no
1164
+ * hint of the real cause (PAN-3172). Falling through to the primary checkout,
1165
+ * whose node_modules is complete, keeps spawns alive; that copy is the same
1166
+ * build, since activateDashboardDeployment() copies the generation's dist/ into
1167
+ * the primary checkout.
1168
+ *
1169
+ * Missing (or unresolvable) everywhere is a build/packaging defect and throws —
1170
+ * never silently degrade a spawn that the caller expects to be supervised.
1171
+ */
1172
+ /**
1173
+ * Bare package specifiers the built supervisor imports but cannot resolve from
1174
+ * its own location. Empty means the artifact can start where it sits.
1175
+ *
1176
+ * Only a genuine module-not-found counts. A package that is present but whose
1177
+ * exports refuse the `require` condition still resolves under `import`, so it
1178
+ * must not be reported as missing.
1131
1179
  */
1180
+ function unresolvedSupervisorImports(scriptPath) {
1181
+ const source = readFileSync$1(scriptPath, "utf8");
1182
+ const requireFrom = createRequire(scriptPath);
1183
+ const missing = /* @__PURE__ */ new Set();
1184
+ for (const match of source.matchAll(IMPORT_SOURCE_PATTERN)) {
1185
+ const specifier = match[2];
1186
+ if (!specifier || !PACKAGE_SPECIFIER_PATTERN.test(specifier)) continue;
1187
+ try {
1188
+ requireFrom.resolve(specifier);
1189
+ } catch (error) {
1190
+ const code = error.code;
1191
+ if (code === "MODULE_NOT_FOUND" || code === "ERR_MODULE_NOT_FOUND") missing.add(specifier);
1192
+ }
1193
+ }
1194
+ return [...missing];
1195
+ }
1132
1196
  function resolvePtySupervisorScriptPath() {
1133
- const built = join(packageRoot, "dist", "pty-supervisor.js");
1134
- if (existsSync$1(built)) return built;
1135
- const staged = join(moduleDir, "supervisor");
1136
- if (existsSync$1(join(staged, "pty-supervisor.js"))) return materializePtySupervisorRuntime(staged);
1197
+ const activeBundle = readActiveDashboardBundleSync();
1198
+ const candidates = [
1199
+ join(packageRoot, "dist", "pty-supervisor.js"),
1200
+ join(moduleDir, "supervisor", "pty-supervisor.js"),
1201
+ ...activeBundle ? [join(activeBundle.repoRoot, "dist", "pty-supervisor.js")] : []
1202
+ ];
1203
+ const rejected = [];
1204
+ for (const candidate of candidates) {
1205
+ if (!existsSync$1(candidate)) continue;
1206
+ const entry = dirname(candidate) === join(moduleDir, "supervisor") ? materializePtySupervisorRuntime(dirname(candidate)) : candidate;
1207
+ const missing = unresolvedSupervisorImports(entry);
1208
+ if (missing.length === 0) return entry;
1209
+ rejected.push(`${entry} cannot resolve ${missing.join(", ")}`);
1210
+ }
1211
+ if (rejected.length > 0) throw new Error(`pty-supervisor cannot start — its dependencies are missing from every built copy: ${rejected.join("; ")}. Reinstall dependencies where the dashboard is running from (\`bun install\`), then rebuild.`);
1137
1212
  throw new Error("pty-supervisor build artifact missing — run `npm run build`.");
1138
1213
  }
1139
1214
  /**
@@ -1192,10 +1267,13 @@ function materializePtySupervisorRuntime(stagedDir, overdeckHome = getOverdeckHo
1192
1267
  }
1193
1268
  return entry;
1194
1269
  }
1195
- var moduleDir;
1270
+ var moduleDir, IMPORT_SOURCE_PATTERN, PACKAGE_SPECIFIER_PATTERN;
1196
1271
  var init_pty_supervisor_locate = __esmMin((() => {
1272
+ init_active_dashboard_bundle();
1197
1273
  init_paths();
1198
1274
  moduleDir = dirname(fileURLToPath(import.meta.url));
1275
+ IMPORT_SOURCE_PATTERN = /\b(?:from|import)\s*\(?\s*(["'])([^"'\n]+)\1/g;
1276
+ PACKAGE_SPECIFIER_PATTERN = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*(?:\/[^\s]*)?$/;
1199
1277
  }));
1200
1278
  //#endregion
1201
1279
  //#region ../../lib/pty-token.ts
@@ -1670,6 +1748,33 @@ function decideResumeGate(block, intent, context = {}) {
1670
1748
  reason: block.reason
1671
1749
  };
1672
1750
  }
1751
+ if (intent === "merge-preparation") {
1752
+ if (block.gate === "paused") {
1753
+ if (block.yieldedByScheduler === true) return {
1754
+ decision: "proceed",
1755
+ clearYield: true
1756
+ };
1757
+ return {
1758
+ decision: "block",
1759
+ reason: `${block.reason}; run pan unpause before merging`,
1760
+ needsYou: true
1761
+ };
1762
+ }
1763
+ if (block.gate === "troubled") return {
1764
+ decision: "block",
1765
+ reason: `${block.reason}; run pan untroubled after investigating the crash`,
1766
+ needsYou: true
1767
+ };
1768
+ if (block.gate === "stopped-by-user") return {
1769
+ decision: "proceed",
1770
+ clearStoppedByUser: true
1771
+ };
1772
+ return {
1773
+ decision: "proceed",
1774
+ overrideFailureBackoff: true,
1775
+ warning: `Merge preparation overrides ${block.reason}`
1776
+ };
1777
+ }
1673
1778
  if (intent === "operator-start") {
1674
1779
  if (block.gate === "paused") return {
1675
1780
  decision: "block",
@@ -1748,12 +1853,14 @@ var init_agent_state = __esmMin((() => {
1748
1853
  init_persistent_logger();
1749
1854
  init_feature_registry_population();
1750
1855
  init_identity();
1856
+ init_pipeline_agent_reader();
1751
1857
  SESSION_EXITED_BEFORE_KICKOFF = "session-exited-before-kickoff";
1752
1858
  toAgentFsError = (operation, path, cause) => new FsError({
1753
1859
  operation,
1754
1860
  path,
1755
1861
  cause
1756
1862
  });
1863
+ registerPipelineTelemetryAgentReader(getAgentStateSync);
1757
1864
  getAgentState = (agentId) => {
1758
1865
  return Effect.try({
1759
1866
  try: () => getAgentStateSync(agentId),
@@ -2569,7 +2676,7 @@ var init_provider_env = __esmMin((() => {
2569
2676
  "NOUS_API_KEY",
2570
2677
  "DASHSCOPE_API_KEY"
2571
2678
  ];
2572
- GPT_56_CODEX_CLIENT_CONTEXT_WINDOW = 372e3;
2679
+ GPT_56_CODEX_CLIENT_CONTEXT_WINDOW = CLIPROXY_GPT56_CONTEXT_WINDOW;
2573
2680
  GPT_56_MODELS = new Set([
2574
2681
  "gpt-5.6-sol",
2575
2682
  "gpt-5.6-terra",
@@ -2883,12 +2990,12 @@ async function claudeSystemPromptFiles(workspace, harness) {
2883
2990
  }
2884
2991
  files.push(await ensureSessionContextBriefingFile());
2885
2992
  if (behavior.contextLayerKind === "pi") {
2886
- const { piGlobalContextFile } = await import("./context-layers-BrPmE__h.js");
2993
+ const { piGlobalContextFile } = await import("./context-layers-D6LZo3l1.js");
2887
2994
  const globalFile = piGlobalContextFile();
2888
2995
  if (existsSync(globalFile)) files.unshift(globalFile);
2889
2996
  }
2890
2997
  if (behavior.contextLayerKind === "codex") {
2891
- const { codexGlobalContextFile } = await import("./context-layers-BrPmE__h.js");
2998
+ const { codexGlobalContextFile } = await import("./context-layers-D6LZo3l1.js");
2892
2999
  const globalFile = codexGlobalContextFile();
2893
3000
  if (existsSync(globalFile)) files.unshift(globalFile);
2894
3001
  }
@@ -3183,7 +3290,7 @@ async function injectPiPromptTimeMemory(agentId, prompt) {
3183
3290
  agentRole: agentState.role ?? "work",
3184
3291
  agentHarness: agentState.harness ?? "claude-code"
3185
3292
  };
3186
- const { injectPromptTimeMemory } = await import("./injection-CPUIqNhI.js");
3293
+ const { injectPromptTimeMemory } = await import("./injection-DZxlV2al.js");
3187
3294
  const result = await injectPromptTimeMemory({
3188
3295
  prompt,
3189
3296
  identity,
@@ -3217,7 +3324,7 @@ async function injectPiConversationMemory(opts, prompt) {
3217
3324
  agentRole: "work",
3218
3325
  agentHarness: "ohmypi"
3219
3326
  };
3220
- const { injectPromptTimeMemory } = await import("./injection-CPUIqNhI.js");
3327
+ const { injectPromptTimeMemory } = await import("./injection-DZxlV2al.js");
3221
3328
  const result = await injectPromptTimeMemory({
3222
3329
  prompt,
3223
3330
  identity,
@@ -3387,7 +3494,7 @@ async function getRoleRuntimeBaseCommand(model, agentName, role, harness = "clau
3387
3494
  }
3388
3495
  const roleInject = definitionPath ? roleSystemPromptInjectionSync(definitionPath, effort) : "";
3389
3496
  const nameFlag = ` --name ${agentName}`;
3390
- const effortFlag = !definitionPath && effort ? ` --effort ${effort}` : "";
3497
+ const effortFlag = !definitionPath ? ` --effort ${effort ?? "high"}` : "";
3391
3498
  const permissionFlags = ` ${getClaudePermissionFlagsStringSync()}`;
3392
3499
  const printFlag = "";
3393
3500
  if (provider.name === "openai" && await getProviderAuthMode(validatedModel) === "subscription") return `claude${printFlag}${roleInject}${permissionFlags} --model ${shellQuoteModelIdSync(CLI_PROXY_MODEL_ALIASES[validatedModel] ?? validatedModel)}${effortFlag}${nameFlag}`;
@@ -3744,7 +3851,7 @@ async function transitionIssueToInReview(issueId, workspacePath) {
3744
3851
  async function buildAgentLaunchConfig(opts) {
3745
3852
  const model = requireModelOverrideSync(opts.model);
3746
3853
  try {
3747
- const { injectOverdeckInfraDeny } = await import("./claude-settings-overlay-DWy-Bb4Y.js");
3854
+ const { injectOverdeckInfraDeny } = await import("./claude-settings-overlay-Dabi9slj.js");
3748
3855
  await Effect.runPromise(injectOverdeckInfraDeny(opts.workspace));
3749
3856
  } catch (err) {
3750
3857
  console.warn(`[agents] injectOverdeckInfraDeny failed for ${opts.agentId} (non-fatal): ${err instanceof Error ? err.message : err}`);
@@ -3832,7 +3939,7 @@ async function retrieveSpawnTimeMemoryContext(input) {
3832
3939
  agentRole: input.role,
3833
3940
  agentHarness: input.harness
3834
3941
  };
3835
- const { injectPromptTimeMemory } = await import("./injection-CPUIqNhI.js");
3942
+ const { injectPromptTimeMemory } = await import("./injection-DZxlV2al.js");
3836
3943
  return (await injectPromptTimeMemory({
3837
3944
  prompt: input.prompt,
3838
3945
  identity,
@@ -3923,7 +4030,7 @@ async function assertWorkspaceStackHealthyForSpawn(issueId, role, allowHost = fa
3923
4030
  record.attempts += 1;
3924
4031
  spawnStackRebuildState.set(normalizedIssue, record);
3925
4032
  console.log(`[agents] Workspace stack for ${normalizedIssue} unhealthy (${details}) — rebuilding before spawn (attempt ${record.attempts}/${SPAWN_STACK_REBUILD_MAX_ATTEMPTS})`);
3926
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-CFvcBHsS.js");
4033
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-qeRqHZxH.js");
3927
4034
  const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[agents] ${normalizedIssue} stack rebuild: ${m}`) })).catch((err) => ({
3928
4035
  success: false,
3929
4036
  error: err instanceof Error ? err.message : String(err)
@@ -4039,6 +4146,64 @@ var init_cv = __esmMin((() => {
4039
4146
  init_errors();
4040
4147
  }));
4041
4148
  //#endregion
4149
+ //#region ../../lib/cloister/verdict-preservation.ts
4150
+ /** Decide whether a fresh work-agent session may keep verdicts earned by the current code. */
4151
+ async function shouldPreservePipelineVerdicts(issueId, workspacePath) {
4152
+ try {
4153
+ const status = getReviewStatusSync(issueId);
4154
+ if (!status) return {
4155
+ preserve: false,
4156
+ reason: "no pipeline verdicts are recorded"
4157
+ };
4158
+ if (!status.reviewedAtCommit) return {
4159
+ preserve: false,
4160
+ reason: "the review verdict has no commit anchor"
4161
+ };
4162
+ if (status.reviewStatus !== "passed" && status.reviewStatus !== "skipped") return {
4163
+ preserve: false,
4164
+ reason: `review is ${status.reviewStatus}`
4165
+ };
4166
+ if (status.testStatus !== "passed") return {
4167
+ preserve: false,
4168
+ reason: `tests are ${status.testStatus}`
4169
+ };
4170
+ if (status.verificationStatus !== "passed") return {
4171
+ preserve: false,
4172
+ reason: `verification is ${status.verificationStatus ?? "missing"}`
4173
+ };
4174
+ const verdict = await evaluateWorkspaceAnchorDrift(issueId, workspacePath, rehydrateHeadAnchor(status.reviewedAtCommit));
4175
+ switch (verdict.kind) {
4176
+ case "current": return {
4177
+ preserve: true,
4178
+ reason: "workspace HEAD matches the reviewed commit anchor"
4179
+ };
4180
+ case "benign": return {
4181
+ preserve: true,
4182
+ reason: "workspace HEAD moved without changing the reviewed code",
4183
+ refreshedAnchor: verdict.currentAnchor
4184
+ };
4185
+ case "drifted": return {
4186
+ preserve: false,
4187
+ reason: "workspace code changed after review"
4188
+ };
4189
+ case "unreadable": return {
4190
+ preserve: false,
4191
+ reason: "the current workspace commit anchor is unreadable"
4192
+ };
4193
+ }
4194
+ } catch (error) {
4195
+ return {
4196
+ preserve: false,
4197
+ reason: `verdict preservation check failed: ${error instanceof Error ? error.message : String(error)}`
4198
+ };
4199
+ }
4200
+ }
4201
+ var init_verdict_preservation = __esmMin((() => {
4202
+ init_git_utils();
4203
+ init_review_status();
4204
+ init_workspace_anchor_drift();
4205
+ }));
4206
+ //#endregion
4042
4207
  //#region ../../lib/bridge-token.ts
4043
4208
  function bridgeTokensDir() {
4044
4209
  return join(getOverdeckHome(), "bridge-tokens");
@@ -4378,7 +4543,7 @@ async function postUnixSocketJson(socketPath, body, timeoutMs, token, tokenHeade
4378
4543
  });
4379
4544
  return;
4380
4545
  }
4381
- finishErr(/* @__PURE__ */ new Error(`socket POST: status ${status}: ${responseBody.slice(0, 100)}`));
4546
+ finishErr(new SocketPostStatusError(status, `socket POST: status ${status}: ${responseBody.slice(0, 100)}`));
4382
4547
  });
4383
4548
  });
4384
4549
  if (timeoutMs !== void 0) {
@@ -4400,8 +4565,9 @@ async function postUnixSocketJson(socketPath, body, timeoutMs, token, tokenHeade
4400
4565
  * MCP, then tmux. Explicit socket methods and ACP targets are strict: ACP prompts
4401
4566
  * cannot fall back to terminal injection because only session/prompt reaches the agent.
4402
4567
  */
4403
- async function deliverAgentMessage(agentId, message, caller = "unknown", deliveryMethod) {
4568
+ async function deliverAgentMessage(agentId, message, caller = "unknown", deliveryMethod, opts = {}) {
4404
4569
  const normalizedId = normalizeAgentId(agentId);
4570
+ const dedupKey = opts.dedupKey;
4405
4571
  let channelsEnabled = false;
4406
4572
  let resolvedMethod = deliveryMethod;
4407
4573
  let state = null;
@@ -4414,6 +4580,7 @@ async function deliverAgentMessage(agentId, message, caller = "unknown", deliver
4414
4580
  }
4415
4581
  const isAcpTarget = state?.harness === "acp";
4416
4582
  if (isAcpTarget && resolvedMethod !== "auto") throw new Error(`MessageDeliveryFailed: ACP delivery failed for ${normalizedId} (${caller}): ACP requires authenticated host RPC delivery`);
4583
+ if (dedupKey !== void 0) return deliverKeyedAgentMessage(normalizedId, message, caller, resolvedMethod ?? "auto", isAcpTarget, dedupKey);
4417
4584
  if (resolvedMethod === "tmux") {
4418
4585
  await assertTmuxTargetCanReceive(normalizedId, caller);
4419
4586
  await Effect.runPromise(sendKeys(normalizedId, message));
@@ -4558,6 +4725,83 @@ async function deliverAgentMessage(agentId, message, caller = "unknown", deliver
4558
4725
  };
4559
4726
  }
4560
4727
  /**
4728
+ * Keyed delivery cascade (PAN-2997). Only two tiers may carry a keyed
4729
+ * message, because only their crash-independent components enforce the key
4730
+ * across the COMPLETE visible side effect:
4731
+ *
4732
+ * - the PTY supervisor reserves the key synchronously (closing the concurrent
4733
+ * same-key race) and completes it only after its single-request
4734
+ * content-plus-Enter injection succeeds; and
4735
+ * - the tmux fallback keeps two-phase pending/terminal session markers owned
4736
+ * by the tmux server across paste, settle, and submit.
4737
+ *
4738
+ * App-server, ACP, and Channels acknowledge receipt without enforcing the
4739
+ * key, so they are never used for keyed payloads: a dashboard crash after
4740
+ * their side effect but before the caller's acknowledgment would replay the
4741
+ * wake. Explicitly requesting one of them with a key is a loud error, not a
4742
+ * silent downgrade.
4743
+ */
4744
+ async function deliverKeyedAgentMessage(normalizedId, message, caller, resolvedMethod, isAcpTarget, dedupKey) {
4745
+ if (isAcpTarget) throw new Error(`MessageDeliveryFailed: keyed delivery failed for ${normalizedId} (${caller}): the ACP tier cannot enforce a dedup key`);
4746
+ if (resolvedMethod === "channels") throw new Error(`MessageDeliveryFailed: keyed delivery failed for ${normalizedId} (${caller}): the Channels tier cannot enforce a dedup key`);
4747
+ if (resolvedMethod === "tmux") return deliverKeyedViaTmux(normalizedId, message, caller, dedupKey);
4748
+ let supervisorFailure;
4749
+ const supervisorSocketPath = join$1(overdeckHomeForSockets(), "sockets", `pty-${normalizedId}.sock`);
4750
+ const ptyToken = await readPtyToken(normalizedId);
4751
+ if (!existsSync(supervisorSocketPath)) supervisorFailure = "socket-missing";
4752
+ else if (!ptyToken) supervisorFailure = "pty-token-missing";
4753
+ else try {
4754
+ const supervisorResponse = await postUnixSocketJson(supervisorSocketPath, {
4755
+ content: message,
4756
+ meta: { caller },
4757
+ dedupKey
4758
+ }, supervisorInjectionBudgetMs(message.length) + SUPERVISOR_CLIENT_MARGIN_MS, ptyToken, PTY_TOKEN_HEADER);
4759
+ await appendChannelDeliveryLog(normalizedId, {
4760
+ path: "supervisor",
4761
+ caller
4762
+ });
4763
+ let deduplicated = false;
4764
+ try {
4765
+ deduplicated = JSON.parse(supervisorResponse.body).deduplicated === true;
4766
+ } catch {}
4767
+ return {
4768
+ ok: true,
4769
+ path: "supervisor",
4770
+ deduplicated
4771
+ };
4772
+ } catch (err) {
4773
+ const reason = err instanceof Error ? err.message : String(err);
4774
+ if (!(err instanceof SocketPostStatusError)) throw new AmbiguousKeyedDeliveryError(normalizedId, caller, reason);
4775
+ supervisorFailure = `socket-post-failed: ${reason}`;
4776
+ }
4777
+ if (resolvedMethod === "supervisor") throw new Error(`MessageDeliveryFailed: PTY supervisor delivery failed for ${normalizedId} (${caller}): ${supervisorFailure}`);
4778
+ await appendChannelDeliveryLog(normalizedId, {
4779
+ path: "tmux",
4780
+ reason: supervisorFailure,
4781
+ caller
4782
+ });
4783
+ return {
4784
+ ...await deliverKeyedViaTmux(normalizedId, message, caller, dedupKey),
4785
+ failure: supervisorFailure
4786
+ };
4787
+ }
4788
+ /**
4789
+ * Keyed tmux delivery: paste under the two-phase marker protocol, then
4790
+ * complete the submit. A replay that finds the pending marker completes the
4791
+ * prior attempt's submission WITHOUT re-pasting; a terminal marker suppresses
4792
+ * the replay entirely.
4793
+ */
4794
+ async function deliverKeyedViaTmux(normalizedId, message, caller, dedupKey) {
4795
+ await assertTmuxTargetCanReceive(normalizedId, caller);
4796
+ const phase = await sendKeysDedup(normalizedId, message, dedupKey, caller);
4797
+ if (phase !== "deduplicated") await completeKeyedSubmit(normalizedId, dedupKey);
4798
+ return {
4799
+ ok: true,
4800
+ path: "tmux",
4801
+ deduplicated: phase === "deduplicated"
4802
+ };
4803
+ }
4804
+ /**
4561
4805
  * PAN-2228: loud failure semantics for the tmux tier. `tmux send-keys` into a
4562
4806
  * session whose pane process has EXITED (a remain-on-exit corpse) succeeds at the
4563
4807
  * tmux level while the message lands nowhere — the zombie-kickoff failure mode
@@ -4716,16 +4960,31 @@ async function setAgentDeliveryMethod(agentId, deliveryMethod) {
4716
4960
  state.deliveryMethod = deliveryMethod;
4717
4961
  await Effect.runPromise(saveAgentState(state));
4718
4962
  }
4719
- var RESUME_TRANSCRIPT_CONFIRM_TIMEOUT_MS, RESUME_TRANSCRIPT_CONFIRM_INTERVAL_MS;
4963
+ var SocketPostStatusError, AmbiguousKeyedDeliveryError, RESUME_TRANSCRIPT_CONFIRM_TIMEOUT_MS, RESUME_TRANSCRIPT_CONFIRM_INTERVAL_MS;
4720
4964
  var init_delivery = __esmMin((() => {
4721
4965
  init_behavior();
4722
4966
  init_agents();
4723
4967
  init_runtime_state();
4724
4968
  init_tmux();
4969
+ init_tmux_dedup();
4725
4970
  init_bridge_token();
4726
4971
  init_pty_token();
4727
4972
  init_injection_budget();
4728
4973
  init_transcript_landing();
4974
+ SocketPostStatusError = class extends Error {
4975
+ status;
4976
+ constructor(status, message) {
4977
+ super(message);
4978
+ this.name = "SocketPostStatusError";
4979
+ this.status = status;
4980
+ }
4981
+ };
4982
+ AmbiguousKeyedDeliveryError = class extends Error {
4983
+ constructor(agentId, caller, reason) {
4984
+ super(`MessageDeliveryFailed: ambiguous keyed delivery for ${agentId} (${caller}): ${reason} — the supervisor may have completed the injection; NOT crossing to the tmux tier with the same key`);
4985
+ this.name = "AmbiguousKeyedDeliveryError";
4986
+ }
4987
+ };
4729
4988
  RESUME_TRANSCRIPT_CONFIRM_TIMEOUT_MS = 3e3;
4730
4989
  RESUME_TRANSCRIPT_CONFIRM_INTERVAL_MS = 100;
4731
4990
  }));
@@ -5224,18 +5483,18 @@ async function spawnRun(issueId, role, options = {}) {
5224
5483
  let reapWarmIdle = false;
5225
5484
  const advancing = role === "review" || role === "test" || role === "ship";
5226
5485
  try {
5227
- const { isPaneDead } = await import("./tmux-B6z7h_vZ.js");
5486
+ const { isPaneDead } = await import("./tmux-DQ6jB76i.js");
5228
5487
  if (await Effect.runPromise(isPaneDead(agentId))) reapWarmIdle = true;
5229
5488
  else if (advancing) {
5230
- const { getReviewStatusSync } = await import("./review-status-btEYlaxA.js");
5231
- const { isRoleTerminal } = await import("./reap-terminal-sessions-7KeHv1R1.js");
5489
+ const { getReviewStatusSync } = await import("./review-status-BZH8h-6W.js");
5490
+ const { isRoleTerminal } = await import("./reap-terminal-sessions-BQ23nriz.js");
5232
5491
  const status = getReviewStatusSync(issueId);
5233
5492
  reapWarmIdle = !!status && isRoleTerminal(role, status);
5234
5493
  }
5235
5494
  } catch {}
5236
5495
  if (!reapWarmIdle) throw new Error(`Role run ${agentId} already running. Use 'pan tell' to message it.`);
5237
5496
  console.log(`[spawn] ${agentId} is warm-idle from the previous cycle — reaping it for the new ${role} dispatch (PAN-2579)`);
5238
- const { killSession } = await import("./tmux-B6z7h_vZ.js");
5497
+ const { killSession } = await import("./tmux-DQ6jB76i.js");
5239
5498
  await Effect.runPromise(killSession(agentId)).catch(() => {});
5240
5499
  }
5241
5500
  await assertWorkspaceStackHealthyForSpawn(issueId, role, options.allowHost, workspace);
@@ -5250,7 +5509,7 @@ async function spawnRun(issueId, role, options = {}) {
5250
5509
  assertCodexNativeAuthForSpawn(resolvedHarness, listAgentStates());
5251
5510
  await ensureLifecycleHooksBeforeLaunch(agentId, resolvedHarness);
5252
5511
  if (getProviderForModelSync(selectedModel).name === "openai" && await getProviderAuthMode(selectedModel) === "subscription") {
5253
- const { isCliproxyRunning } = await import("./cliproxy-fHfIeiGd.js");
5512
+ const { isCliproxyRunning } = await import("./cliproxy-PGwTX_o8.js");
5254
5513
  if (!await Effect.runPromise(isCliproxyRunning())) throw new Error("CLIProxyAPI sidecar is not running. GPT subscription role runs route through a local cliproxy process managed by `pan up`. Run `pan up` (or restart the dashboard) before spawning a GPT role run.");
5255
5514
  }
5256
5515
  const state = {
@@ -5367,7 +5626,7 @@ async function spawnRun(issueId, role, options = {}) {
5367
5626
  const claudeCmd = `bash ${launcherScript}`;
5368
5627
  console.log(`[claude-invoke] purpose=role-run | role=${role} | model=${state.model} | source=agents.ts:spawnRun | session=${agentId} | command="${claudeCmd}"`);
5369
5628
  try {
5370
- const { preTrustDirectory } = await import("./workspace-manager-CWT55qeI.js");
5629
+ const { preTrustDirectory } = await import("./workspace-manager-CDTKjjdU.js");
5371
5630
  preTrustDirectory(workspace);
5372
5631
  } catch {}
5373
5632
  clearReadySignal(agentId);
@@ -5432,9 +5691,9 @@ async function spawnRun(issueId, role, options = {}) {
5432
5691
  }
5433
5692
  markAgentRunning(state);
5434
5693
  try {
5435
- const { stdout } = await execAsync$2("git rev-parse --short=8 HEAD", { cwd: workspace });
5436
- const head = stdout.trim();
5437
- if (head) state.roleRunHead = head;
5694
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CI6cwyyC.js");
5695
+ const headAnchor = await snapshotWorkspaceHeadsPromise(issueId, workspace);
5696
+ if (headAnchor) state.roleRunHead = headAnchor;
5438
5697
  } catch {}
5439
5698
  await Effect.runPromise(saveAgentState(state));
5440
5699
  if (role !== "review") emitActivityEntrySync({
@@ -5462,7 +5721,7 @@ async function spawnAgent(options) {
5462
5721
  });
5463
5722
  console.log(`[DEBUG] Selected model: ${selectedModel}`);
5464
5723
  if (getProviderForModelSync(selectedModel).name === "openai" && await getProviderAuthMode(selectedModel) === "subscription") {
5465
- const { isCliproxyRunning } = await import("./cliproxy-fHfIeiGd.js");
5724
+ const { isCliproxyRunning } = await import("./cliproxy-PGwTX_o8.js");
5466
5725
  if (!await Effect.runPromise(isCliproxyRunning())) throw new Error("CLIProxyAPI sidecar is not running. GPT subscription agents route through a local cliproxy process managed by `pan up`. Run `pan up` (or restart the dashboard) before spawning a GPT agent.");
5467
5726
  }
5468
5727
  const resolvedHarness = await resolveHarness({
@@ -5492,10 +5751,11 @@ async function spawnAgent(options) {
5492
5751
  saveAgentStateSync(state);
5493
5752
  if (role === "work") {
5494
5753
  try {
5495
- if (resetPipelineVerdictsForWorkStartSync(options.issueId)) {
5496
- const { resetPostMergeState } = await import("./merge-agent-CKkgIBPB.js");
5497
- resetPostMergeState(options.issueId);
5498
- }
5754
+ const preservation = await shouldPreservePipelineVerdicts(options.issueId, options.workspace);
5755
+ if (preservation.preserve) {
5756
+ if (preservation.refreshedAnchor) setReviewStatusSync(options.issueId, { reviewedAtCommit: preservation.refreshedAnchor });
5757
+ console.log(`[spawn] Preserved pipeline verdicts for ${options.issueId} — ${preservation.reason}`);
5758
+ } else if (resetPipelineVerdictsForWorkStartSync(options.issueId)) (await import("./merge-agent-DrXa1CpW.js")).resetPostMergeState(options.issueId);
5499
5759
  } catch (err) {
5500
5760
  console.warn(`[agents] Could not reset stale pipeline verdicts for ${options.issueId}: ${err instanceof Error ? err.message : String(err)}`);
5501
5761
  }
@@ -5504,7 +5764,7 @@ async function spawnAgent(options) {
5504
5764
  });
5505
5765
  }
5506
5766
  if (role === "work") try {
5507
- const { writeStoryFeatureContext } = await import("./work-agent-prompt-Du8Vh2aJ.js");
5767
+ const { writeStoryFeatureContext } = await import("./work-agent-prompt-C-vuP3_J.js");
5508
5768
  await writeStoryFeatureContext(options.workspace, options.issueId);
5509
5769
  } catch (ctxErr) {
5510
5770
  console.warn(`[agents] Could not write story feature context for ${options.issueId}: ${ctxErr.message}`);
@@ -5551,7 +5811,7 @@ async function spawnAgent(options) {
5551
5811
  try {
5552
5812
  const venvPath = join$1(options.workspace, ".venv");
5553
5813
  if (isTldrEnabledSync() && existsSync(venvPath)) {
5554
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BYFkts95.js");
5814
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BKOYB616.js");
5555
5815
  const tldrService = getTldrDaemonServiceSync(options.workspace, venvPath);
5556
5816
  if (!(await tldrService.getStatus()).running) {
5557
5817
  await tldrService.start(true);
@@ -5592,13 +5852,13 @@ async function spawnAgent(options) {
5592
5852
  const claudeCmd = `bash ${launcherScript}`;
5593
5853
  console.log(`[claude-invoke] purpose=work-agent | model=${state.model} | source=agents.ts:spawnAgent | session=${agentId} | command="${claudeCmd}"`);
5594
5854
  try {
5595
- const { preTrustDirectory } = await import("./workspace-manager-CWT55qeI.js");
5855
+ const { preTrustDirectory } = await import("./workspace-manager-CDTKjjdU.js");
5596
5856
  preTrustDirectory(options.workspace);
5597
5857
  } catch {}
5598
5858
  try {
5599
- const { isGitHubAppConfigured, generateInstallationToken, configureWorkspaceForBot } = await import("./github-app-ClZ2lk8D.js");
5859
+ const { isGitHubAppConfigured, generateInstallationToken, configureWorkspaceForBot } = await import("./github-app-DtAsvwzK.js");
5600
5860
  if (isGitHubAppConfigured()) {
5601
- const { findProjectByPathSync } = await import("./projects-vjjcmiN8.js");
5861
+ const { findProjectByPathSync } = await import("./projects-B03Wr-xc.js");
5602
5862
  const ghRepo = findProjectByPathSync(resolve$1(options.workspace, "..", ".."))?.github_repo;
5603
5863
  if (ghRepo) {
5604
5864
  const [owner, repo] = ghRepo.split("/");
@@ -5676,7 +5936,7 @@ async function spawnAgent(options) {
5676
5936
  const codexHomeForAgent = join$1(homedir(), ".overdeck", "agents", agentId, "codex-home");
5677
5937
  (async () => {
5678
5938
  try {
5679
- const { waitForCodexRollout, extractThreadIdFromRollout, writeThreadId } = await import("./codex-GcHuUF-k.js");
5939
+ const { waitForCodexRollout, extractThreadIdFromRollout, writeThreadId } = await import("./codex-BdEsUFWh.js");
5680
5940
  const rollout = await waitForCodexRollout(codexHomeForAgent, 12e4);
5681
5941
  if (rollout) {
5682
5942
  const threadId = extractThreadIdFromRollout(rollout);
@@ -5778,6 +6038,7 @@ var init_spawn = __esmMin((() => {
5778
6038
  init_launcher_generator();
5779
6039
  init_providers();
5780
6040
  init_review_status();
6041
+ init_verdict_preservation();
5781
6042
  init_harness_resolve();
5782
6043
  init_harness_binary();
5783
6044
  init_codex_auth();
@@ -6404,11 +6665,77 @@ function sessionRotationRefused(opts) {
6404
6665
  }
6405
6666
  var init_session_rotation = __esmMin((() => {}));
6406
6667
  //#endregion
6668
+ //#region ../../lib/agents/monitor-transport.ts
6669
+ /**
6670
+ * PAN-3015: pull-based monitor transport for Claude Code sessions.
6671
+ *
6672
+ * A `pan monitor` process runs as a background task INSIDE the agent's Claude
6673
+ * Code session. Claude Code surfaces background-command stdout to the model at
6674
+ * the next turn boundary (and wakes an idle session), so a message printed by
6675
+ * the monitor reaches the model without any keystroke injection — no composer
6676
+ * paste, no echo confirmation, no Enter timing.
6677
+ *
6678
+ * This module holds the shared pieces: the presence protocol senders use to
6679
+ * decide the monitor tier is live, the mail-file format, and the drain logic.
6680
+ * The long-running loop lives in `src/cli/commands/monitor.ts`; the delivery
6681
+ * decision lives in `messageAgent` (src/lib/agents/messaging.ts) — mid-session
6682
+ * tells only, never kickoff/resume (no monitor exists before the first turn).
6683
+ * See docs/MONITOR-TRANSPORT.md.
6684
+ */
6685
+ function monitorPresencePath(agentId) {
6686
+ return join$1(getAgentDir(agentId), "monitor.json");
6687
+ }
6688
+ function isPidAlive(pid) {
6689
+ try {
6690
+ process.kill(pid, 0);
6691
+ return true;
6692
+ } catch {
6693
+ return false;
6694
+ }
6695
+ }
6696
+ /**
6697
+ * A monitor counts as live only with BOTH a fresh heartbeat and a live pid —
6698
+ * a dead monitor must fall through to keystroke transports, not strand the
6699
+ * message unread (it stays durable in mail/ either way).
6700
+ */
6701
+ function isMonitorLive(agentId, nowMs = Date.now()) {
6702
+ try {
6703
+ const raw = readFileSync(monitorPresencePath(agentId), "utf-8");
6704
+ const presence = JSON.parse(raw);
6705
+ if (typeof presence.pid !== "number" || typeof presence.heartbeatAt !== "string") return false;
6706
+ const beatMs = Date.parse(presence.heartbeatAt);
6707
+ if (!Number.isFinite(beatMs) || nowMs - beatMs > 45e3) return false;
6708
+ return isPidAlive(presence.pid);
6709
+ } catch {
6710
+ return false;
6711
+ }
6712
+ }
6713
+ /**
6714
+ * Mail-file format (PAN-3015 adds the provenance header; the legacy format is
6715
+ * `# Message\n\n<body>` and must keep parsing):
6716
+ *
6717
+ * # Message
6718
+ *
6719
+ * source: pan-tell
6720
+ * date: 2026-07-24T00:00:00.000Z
6721
+ *
6722
+ * <body>
6723
+ */
6724
+ function formatMailFileContent(body, source, date) {
6725
+ return `# Message\n\nsource: ${source}\ndate: ${date.toISOString()}\n\n${body}\n`;
6726
+ }
6727
+ var init_monitor_transport = __esmMin((() => {
6728
+ init_agent_state();
6729
+ }));
6730
+ //#endregion
6407
6731
  //#region ../../lib/agents/messaging.ts
6408
- function queueAgentMail(agentId, message, pendingTurnEndDelivery = false) {
6732
+ function queueAgentMail(agentId, message, pendingTurnEndDelivery = false, dedupKey, source) {
6409
6733
  const mailDir = join$1(getAgentDir(agentId), "mail");
6410
6734
  mkdirSync(mailDir, { recursive: true });
6411
- writeFileSync(join$1(mailDir, `${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}${pendingTurnEndDelivery ? ".pending" : ""}.md`), `# Message\n\n${message}\n`);
6735
+ const now = /* @__PURE__ */ new Date();
6736
+ const filename = dedupKey !== void 0 ? `dedup-${createHash("sha256").update(dedupKey).digest("hex").slice(0, 24)}.md` : `${now.toISOString().replace(/[:.]/g, "-")}${pendingTurnEndDelivery ? ".pending" : ""}.md`;
6737
+ const content = source ? formatMailFileContent(message, source, now) : `# Message\n\n${message}\n`;
6738
+ writeFileSync(join$1(mailDir, filename), content);
6412
6739
  }
6413
6740
  function resolveAgentDeliveryMethod(state) {
6414
6741
  if (state?.harness === "acp") return "auto";
@@ -6435,6 +6762,34 @@ async function appendTellInterventionForUserSource(normalizedId, caller) {
6435
6762
  source: caller
6436
6763
  });
6437
6764
  }
6765
+ /** Call the delivery door with the idempotency key only when one is set, so
6766
+ * unkeyed callers keep their exact pre-key call shape. */
6767
+ function deliverWithOptionalKey(normalizedId, message, caller, deliveryMethod, dedupKey) {
6768
+ return dedupKey !== void 0 ? deliverAgentMessage(normalizedId, message, caller, deliveryMethod, { dedupKey }) : deliverAgentMessage(normalizedId, message, caller, deliveryMethod);
6769
+ }
6770
+ /**
6771
+ * Keyed delivery to an agent that must be resumed first (PAN-2997 review
6772
+ * cycle 7). The keyed message NEVER rides the resume kickoff prompt: the
6773
+ * kickoff is delivered by components that cannot enforce the key, so a
6774
+ * dashboard crash after the kickoff but before any post-hoc key bookkeeping
6775
+ * would replay the wake. Instead the agent is resumed with its bare
6776
+ * auto-continue prompt, and the keyed message then goes through the keyed
6777
+ * delivery door, where the crash-independent component — the new session's
6778
+ * supervisor key set or the tmux session's two-phase markers — enforces
6779
+ * at-most-once across the whole replay window.
6780
+ */
6781
+ async function resumeThenDeliverKeyed(normalizedId, message, caller, agentState, dedupKey) {
6782
+ const { resumeAgent } = await import("./agents-BKKkxKgK.js");
6783
+ const result = await resumeAgent(normalizedId);
6784
+ if (!result.success) throw new Error(`Failed to auto-resume agent: ${result.error}`);
6785
+ const delivery = await deliverAgentMessage(normalizedId, message, `messageAgent:${caller}`, resolveAgentDeliveryMethod(agentState), { dedupKey });
6786
+ await appendTellInterventionForUserSource(normalizedId, caller);
6787
+ return {
6788
+ delivered: delivery.ok,
6789
+ queuedToMail: false,
6790
+ ...delivery.deduplicated ? { deduplicated: true } : {}
6791
+ };
6792
+ }
6438
6793
  async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6439
6794
  const normalizedId = normalizeAgentId(agentId);
6440
6795
  const agentState = getAgentStateSync(normalizedId);
@@ -6455,7 +6810,7 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6455
6810
  };
6456
6811
  if (agentState?.paused === true) {
6457
6812
  const gateBlockReason = getAgentResumeGateBlockReason(agentState)?.reason ?? "agent is paused";
6458
- queueAgentMail(normalizedId, message);
6813
+ queueAgentMail(normalizedId, message, false, opts.dedupKey);
6459
6814
  logAgentLifecycleSync(normalizedId, `messageAgent queued mail without resume: ${gateBlockReason}`);
6460
6815
  console.log(`[agents] Queued message for ${normalizedId}; ${gateBlockReason}`);
6461
6816
  return {
@@ -6468,7 +6823,7 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6468
6823
  const suspendedGate = decideMessageGate();
6469
6824
  if (suspendedGate.decision !== "proceed") {
6470
6825
  const gateBlockReason = suspendedGate.reason ?? "agent is gated";
6471
- queueAgentMail(normalizedId, message);
6826
+ queueAgentMail(normalizedId, message, false, opts.dedupKey);
6472
6827
  logAgentLifecycleSync(normalizedId, `messageAgent queued mail without resume: ${gateBlockReason}`);
6473
6828
  console.log(`[agents] Queued message for ${normalizedId}; ${gateBlockReason}`);
6474
6829
  return {
@@ -6478,7 +6833,8 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6478
6833
  };
6479
6834
  }
6480
6835
  console.log(`[agents] Auto-resuming suspended agent ${normalizedId} to deliver message`);
6481
- const { resumeAgent } = await import("./agents-wi9NWzs2.js");
6836
+ if (opts.dedupKey !== void 0) return resumeThenDeliverKeyed(normalizedId, message, caller, agentState, opts.dedupKey);
6837
+ const { resumeAgent } = await import("./agents-BKKkxKgK.js");
6482
6838
  const result = await resumeAgent(normalizedId, message);
6483
6839
  if (!result.success) throw new Error(`Failed to auto-resume agent: ${result.error}`);
6484
6840
  if (result.messageDelivered === false) throw new Error(`Agent resumed but ready signal did not fire — message not delivered. Feedback is in the mail queue.`);
@@ -6492,7 +6848,7 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6492
6848
  const stoppedGate = decideMessageGate();
6493
6849
  if (stoppedGate.decision !== "proceed") {
6494
6850
  const gateBlockReason = stoppedGate.reason ?? "agent is gated";
6495
- queueAgentMail(normalizedId, message);
6851
+ queueAgentMail(normalizedId, message, false, opts.dedupKey);
6496
6852
  logAgentLifecycleSync(normalizedId, `messageAgent queued mail without resume: ${gateBlockReason}`);
6497
6853
  console.log(`[agents] Queued message for ${normalizedId}; ${gateBlockReason}`);
6498
6854
  return {
@@ -6502,9 +6858,10 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6502
6858
  };
6503
6859
  }
6504
6860
  console.log(`[agents] Auto-resuming stopped agent ${normalizedId} to deliver feedback (session exists: ${await Effect.runPromise(sessionExists(normalizedId))})`);
6505
- const { resumeAgent } = await import("./agents-wi9NWzs2.js");
6861
+ if (opts.dedupKey !== void 0) return resumeThenDeliverKeyed(normalizedId, message, caller, agentState, opts.dedupKey);
6862
+ const { resumeAgent } = await import("./agents-BKKkxKgK.js");
6506
6863
  const resumeResult = await resumeAgent(normalizedId, message);
6507
- queueAgentMail(normalizedId, message);
6864
+ queueAgentMail(normalizedId, message, false);
6508
6865
  if (resumeResult.success && resumeResult.messageDelivered !== false) {
6509
6866
  await appendTellInterventionForUserSource(normalizedId, caller);
6510
6867
  console.log(`[agents] Resumed ${normalizedId} and delivered feedback`);
@@ -6546,7 +6903,7 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6546
6903
  const resumeModel = agentState.model || "claude-sonnet-4-6";
6547
6904
  const fallbackHarness = agentState.harness ?? "claude-code";
6548
6905
  const harnessLaunch = await prepareHarnessLaunch(fallbackHarness);
6549
- const { assertWorkspaceStackHealthyForSpawn } = await import("./agents-wi9NWzs2.js");
6906
+ const { assertWorkspaceStackHealthyForSpawn } = await import("./agents-BKKkxKgK.js");
6550
6907
  await assertWorkspaceStackHealthyForSpawn(agentState.issueId || normalizedId.replace(/^agent-/, "").toUpperCase(), resumeRole, agentState.hostOverride === true, agentState.workspace);
6551
6908
  const fallbackPiFields = fallbackHarness === "ohmypi" ? await getOhmypiLauncherFields(normalizedId, resumeModel) : {};
6552
6909
  const fallbackCodexFields = fallbackHarness === "codex" ? getCodexLauncherFields(normalizedId, resumeModel, agentState.workspace, resumeRole) : {};
@@ -6610,7 +6967,7 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6610
6967
  console.error(`[agents] Fallback-restarted ${normalizedId} but no session id was recorded — feedback in mail queue`);
6611
6968
  }
6612
6969
  } else {
6613
- const delivery = await deliverAgentMessage(normalizedId, resumeMessage.message, "resumeAgent:resume-prompt", resolveAgentDeliveryMethod(agentState));
6970
+ const delivery = await deliverWithOptionalKey(normalizedId, resumeMessage.message, "resumeAgent:resume-prompt", resolveAgentDeliveryMethod(agentState), opts.dedupKey);
6614
6971
  delivered = delivery.ok;
6615
6972
  if (!delivery.ok) reason = "resume prompt delivery failed";
6616
6973
  }
@@ -6629,12 +6986,26 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6629
6986
  ...reason ? { reason } : {}
6630
6987
  };
6631
6988
  }
6632
- const { loadRemoteAgentState, sendToRemoteAgent } = await import("./remote-agents-CA3Ihlxj.js");
6989
+ const { loadRemoteAgentState, sendToRemoteAgent } = await import("./remote-agents-C1bssi41.js");
6633
6990
  const remoteState = loadRemoteAgentState(normalizedId);
6634
6991
  if (remoteState && remoteState.vmName) {
6635
6992
  console.log(`[agents] Sending message to remote agent ${normalizedId} on ${remoteState.vmName}`);
6993
+ if (opts.dedupKey !== void 0) {
6994
+ const { sendToRemoteAgentKeyed } = await import("./remote-agents-C1bssi41.js");
6995
+ const remoteOutcome = await sendToRemoteAgentKeyed(normalizedId, remoteState.vmName, message, opts.dedupKey);
6996
+ queueAgentMail(normalizedId, message, false, opts.dedupKey);
6997
+ await appendTellInterventionForUserSource(normalizedId, caller);
6998
+ return {
6999
+ delivered: true,
7000
+ queuedToMail: true,
7001
+ ...remoteOutcome === "deduplicated" ? {
7002
+ reason: "deduplicated",
7003
+ deduplicated: true
7004
+ } : {}
7005
+ };
7006
+ }
6636
7007
  await sendToRemoteAgent(normalizedId, remoteState.vmName, message);
6637
- queueAgentMail(normalizedId, message);
7008
+ queueAgentMail(normalizedId, message, false);
6638
7009
  await appendTellInterventionForUserSource(normalizedId, caller);
6639
7010
  return {
6640
7011
  delivered: true,
@@ -6642,13 +7013,24 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6642
7013
  };
6643
7014
  }
6644
7015
  const expectedHarness = agentState?.harness ?? "claude-code";
7016
+ if (expectedHarness === "claude-code" && opts.dedupKey === void 0 && isMonitorLive(normalizedId)) {
7017
+ queueAgentMail(normalizedId, message, false, opts.dedupKey, caller);
7018
+ logAgentLifecycleSync(normalizedId, `messageAgent delivered via monitor mail (caller: ${caller})`);
7019
+ console.log(`[agents] Delivered message to ${normalizedId} via monitor inbox`);
7020
+ await appendTellInterventionForUserSource(normalizedId, caller);
7021
+ return {
7022
+ delivered: true,
7023
+ queuedToMail: true,
7024
+ reason: "monitor"
7025
+ };
7026
+ }
6645
7027
  let appServerState;
6646
7028
  try {
6647
7029
  appServerState = (await getCodexAppServerStatus(normalizedId)).state;
6648
7030
  } catch {}
6649
7031
  if (appServerState && appServerState !== "closed" && appServerState !== "error") {
6650
7032
  if (!claimCodexIdleTurn(normalizedId)) {
6651
- queueAgentMail(normalizedId, message, true);
7033
+ queueAgentMail(normalizedId, message, true, opts.dedupKey);
6652
7034
  logAgentLifecycleSync(normalizedId, "messageAgent queued mail for codex turn-end delivery: agent busy");
6653
7035
  console.log(`[agents] Queued message for ${normalizedId}; codex agent is mid-turn`);
6654
7036
  await appendTellInterventionForUserSource(normalizedId, caller);
@@ -6659,19 +7041,21 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6659
7041
  };
6660
7042
  }
6661
7043
  const deliveryMethod = resolveAgentDeliveryMethod(agentState);
6662
- const delivery = await deliverAgentMessage(normalizedId, message, `messageAgent:${caller}`, deliveryMethod);
6663
- queueAgentMail(normalizedId, message);
7044
+ const delivery = await deliverWithOptionalKey(normalizedId, message, `messageAgent:${caller}`, deliveryMethod, opts.dedupKey);
7045
+ queueAgentMail(normalizedId, message, false, opts.dedupKey);
6664
7046
  await appendTellInterventionForUserSource(normalizedId, caller);
6665
7047
  return {
6666
7048
  delivered: delivery.ok,
6667
- queuedToMail: true
7049
+ queuedToMail: true,
7050
+ ...delivery.deduplicated ? { deduplicated: true } : {}
6668
7051
  };
6669
7052
  }
6670
7053
  if (!await Effect.runPromise(sessionExists(normalizedId))) throw new Error(`Agent ${normalizedId} not running`);
6671
7054
  const panePids = await Effect.runPromise(listPaneValues(normalizedId, "#{pane_pid}"));
6672
7055
  if (panePids.length > 0 && !await hasAgentRuntimeInSubtree(panePids[0], expectedHarness)) {
6673
7056
  console.warn(`[agents] ${normalizedId} tmux session is a zombie (no ${expectedHarness} runtime) — attempting resume`);
6674
- const { resumeAgent } = await import("./agents-wi9NWzs2.js");
7057
+ if (opts.dedupKey !== void 0) return resumeThenDeliverKeyed(normalizedId, message, caller, agentState, opts.dedupKey);
7058
+ const { resumeAgent } = await import("./agents-BKKkxKgK.js");
6675
7059
  const resumeResult = await resumeAgent(normalizedId, message);
6676
7060
  if (resumeResult.success) {
6677
7061
  const delivered = resumeResult.messageDelivered !== false;
@@ -6685,14 +7069,18 @@ async function messageAgent(agentId, message, caller = "internal", opts = {}) {
6685
7069
  }
6686
7070
  if (!await waitForAgentIdle(normalizedId, 5e3)) console.warn(`[agents] ${normalizedId} not at idle prompt after 5s — sending message anyway`);
6687
7071
  const deliveryMethod = resolveAgentDeliveryMethod(agentState);
6688
- const delivery = await deliverAgentMessage(normalizedId, message, `messageAgent:${caller}`, deliveryMethod);
6689
- queueAgentMail(normalizedId, message);
7072
+ const delivery = await deliverWithOptionalKey(normalizedId, message, `messageAgent:${caller}`, deliveryMethod, opts.dedupKey);
7073
+ if (opts.dedupKey === void 0) queueAgentMail(normalizedId, message, false);
6690
7074
  await appendTellInterventionForUserSource(normalizedId, caller);
6691
7075
  return {
6692
7076
  delivered: delivery.ok,
6693
- queuedToMail: true
7077
+ queuedToMail: opts.dedupKey === void 0,
7078
+ ...delivery.deduplicated ? { deduplicated: true } : {}
6694
7079
  };
6695
7080
  }
7081
+ async function messageAgentWithOutcome(agentId, message, caller = "internal", opts = {}) {
7082
+ return (await messageAgent(agentId, message, caller, opts)).delivered ? "delivered" : "queued";
7083
+ }
6696
7084
  var USER_MESSAGE_INTERVENTION_SOURCES;
6697
7085
  var init_messaging = __esmMin((() => {
6698
7086
  init_activity_logger();
@@ -6708,6 +7096,7 @@ var init_messaging = __esmMin((() => {
6708
7096
  init_agent_state();
6709
7097
  init_activity();
6710
7098
  init_delivery();
7099
+ init_monitor_transport();
6711
7100
  init_runtime_state();
6712
7101
  init_runtime_command();
6713
7102
  init_supervisor_channels();
@@ -6840,7 +7229,7 @@ async function buildCompactRecoverySeed(agentId) {
6840
7229
  if (agentState?.workspace && sessionId) {
6841
7230
  const sessionFile = sessionFilePath(agentState.workspace, sessionId);
6842
7231
  try {
6843
- const [{ getConversationCompactionSettings }, { generateSmartSummary }] = await Promise.all([import("./conversation-compaction-eQB5CkOe.js"), import("./smart-compaction-CV2ukKND.js")]);
7232
+ const [{ getConversationCompactionSettings }, { generateSmartSummary }] = await Promise.all([import("./conversation-compaction-Dj4FAKoZ.js"), import("./smart-compaction-CPp2Ykf6.js")]);
6844
7233
  const settings = getConversationCompactionSettings();
6845
7234
  summary = (await Effect.runPromise(generateSmartSummary({
6846
7235
  jsonlPath: sessionFile,
@@ -6851,7 +7240,7 @@ async function buildCompactRecoverySeed(agentId) {
6851
7240
  } catch (err) {
6852
7241
  logAgentLifecycleSync(normalizedId, `compact-recovery smart summary failed (${err instanceof Error ? err.message : String(err)}); trying heuristic fallback`);
6853
7242
  try {
6854
- const { generateFallbackSummary } = await import("./summary-fork-DpcxN9tf.js");
7243
+ const { generateFallbackSummary } = await import("./summary-fork-CD7GOts0.js");
6855
7244
  summary = await Effect.runPromise(generateFallbackSummary(sessionFile));
6856
7245
  } catch (fallbackErr) {
6857
7246
  logAgentLifecycleSync(normalizedId, `compact-recovery fallback summary failed (${fallbackErr instanceof Error ? fallbackErr.message : String(fallbackErr)}); seeding with reseed instructions only`);
@@ -8606,7 +8995,7 @@ async function command(adapters, executable, args) {
8606
8995
  return null;
8607
8996
  }
8608
8997
  }
8609
- function createDarwinHostHealthCollector(adapters = defaultAdapters$1) {
8998
+ function createDarwinHostHealthCollector(adapters = defaultAdapters$2) {
8610
8999
  return {
8611
9000
  platform: "darwin",
8612
9001
  async sample(previous) {
@@ -8646,6 +9035,9 @@ function createDarwinHostHealthCollector(adapters = defaultAdapters$1) {
8646
9035
  committedMemoryBytes: unavailable("macOS does not expose Linux Committed_AS."),
8647
9036
  commitLimitBytes: unavailable("macOS does not expose Linux CommitLimit."),
8648
9037
  virtualCommitmentPercent: unavailable("macOS virtual commitment is unavailable."),
9038
+ inotifyWatchesUsed: unavailable("inotify is Linux-only."),
9039
+ inotifyWatchesMax: unavailable("inotify is Linux-only."),
9040
+ inotifyWatchesUsedPercent: unavailable("inotify is Linux-only."),
8649
9041
  counters: {
8650
9042
  cpu: cpuCounters,
8651
9043
  swap: vmStat?.swap ?? null
@@ -8654,7 +9046,7 @@ function createDarwinHostHealthCollector(adapters = defaultAdapters$1) {
8654
9046
  }
8655
9047
  };
8656
9048
  }
8657
- var execFileAsync$2, COMMAND_TIMEOUT_MS, MIB, DARWIN_MEMORY_PRESSURE_DEFAULTS, defaultAdapters$1;
9049
+ var execFileAsync$2, COMMAND_TIMEOUT_MS, MIB, DARWIN_MEMORY_PRESSURE_DEFAULTS, defaultAdapters$2;
8658
9050
  var init_darwin = __esmMin((() => {
8659
9051
  init_types();
8660
9052
  execFileAsync$2 = promisify(execFile);
@@ -8666,7 +9058,7 @@ var init_darwin = __esmMin((() => {
8666
9058
  swapActivityWarningBytesPerMinute: 64 * MIB,
8667
9059
  swapActivityCriticalBytesPerMinute: 256 * MIB
8668
9060
  });
8669
- defaultAdapters$1 = {
9061
+ defaultAdapters$2 = {
8670
9062
  execFile: async (command, args, timeoutMs) => {
8671
9063
  const { stdout } = await execFileAsync$2(command, [...args], {
8672
9064
  encoding: "utf-8",
@@ -8681,6 +9073,121 @@ var init_darwin = __esmMin((() => {
8681
9073
  };
8682
9074
  }));
8683
9075
  //#endregion
9076
+ //#region ../../lib/system-health/inotify.ts
9077
+ /**
9078
+ * inotify watch/instance accounting for the local user.
9079
+ *
9080
+ * inotify watches are a per-UID kernel budget (fs.inotify.max_user_watches)
9081
+ * shared by every process the user runs — host processes and Docker
9082
+ * containers alike, since containers share the kernel and (in Overdeck's
9083
+ * setups) the same uid. When the budget is exhausted, any program that
9084
+ * tries to add a watch fails with ENOSPC; the classic symptom is a Vite
9085
+ * dev server dying at startup while everything else looks healthy
9086
+ * (PAN-3063, the 2026-07-25 MIN-898 incident).
9087
+ *
9088
+ * The kernel exposes no aggregate usage counter, so the only way to measure
9089
+ * usage is to walk /proc/<pid>/fd for anon_inode:inotify descriptors and sum
9090
+ * the `inotify wd:` lines in the matching fdinfo files. Unprivileged scans
9091
+ * can only read same-uid processes, which conveniently matches the per-UID
9092
+ * scope of the budget itself.
9093
+ */
9094
+ /** Counts `inotify wd:` entries in a /proc/<pid>/fdinfo/<fd> payload. */
9095
+ function countInotifyWatches(fdinfoContent) {
9096
+ let count = 0;
9097
+ for (const line of fdinfoContent.split("\n")) if (line.startsWith("inotify wd:")) count += 1;
9098
+ return count;
9099
+ }
9100
+ function parseProcLimit(content) {
9101
+ const value = Number(content.trim());
9102
+ return Number.isFinite(value) && value > 0 ? value : null;
9103
+ }
9104
+ async function readLimit(adapters, path) {
9105
+ try {
9106
+ return parseProcLimit(await adapters.readFile(path));
9107
+ } catch {
9108
+ return null;
9109
+ }
9110
+ }
9111
+ async function scanPid(adapters, pid) {
9112
+ let fds;
9113
+ try {
9114
+ fds = await adapters.readdir(`/proc/${pid}/fd`);
9115
+ } catch {
9116
+ return null;
9117
+ }
9118
+ let watches = 0;
9119
+ let instances = 0;
9120
+ for (const fd of fds) {
9121
+ let target;
9122
+ try {
9123
+ target = await adapters.readlink(`/proc/${pid}/fd/${fd}`);
9124
+ } catch {
9125
+ continue;
9126
+ }
9127
+ if (!target.includes("inotify")) continue;
9128
+ instances += 1;
9129
+ try {
9130
+ watches += countInotifyWatches(await adapters.readFile(`/proc/${pid}/fdinfo/${fd}`));
9131
+ } catch {}
9132
+ }
9133
+ if (instances === 0) return null;
9134
+ return {
9135
+ pid,
9136
+ watches,
9137
+ instances
9138
+ };
9139
+ }
9140
+ async function readCommand(adapters, pid) {
9141
+ try {
9142
+ const command = (await adapters.readFile(`/proc/${pid}/cmdline`)).replaceAll("\0", " ").trim();
9143
+ return command.length > 120 ? `${command.slice(0, 117)}…` : command;
9144
+ } catch {
9145
+ return `pid ${pid}`;
9146
+ }
9147
+ }
9148
+ /**
9149
+ * Walks /proc and totals inotify watches and instances held by processes
9150
+ * this user can read. Returns null when /proc is unavailable (non-Linux).
9151
+ */
9152
+ async function sampleInotify(adapters = defaultAdapters$1) {
9153
+ let procEntries;
9154
+ try {
9155
+ procEntries = await adapters.readdir("/proc");
9156
+ } catch {
9157
+ return null;
9158
+ }
9159
+ const pids = procEntries.filter((entry) => /^\d+$/.test(entry)).map(Number);
9160
+ const scans = [];
9161
+ for (let i = 0; i < pids.length; i += PID_SCAN_CONCURRENCY) {
9162
+ const chunk = pids.slice(i, i + PID_SCAN_CONCURRENCY);
9163
+ const results = await Promise.all(chunk.map((pid) => scanPid(adapters, pid)));
9164
+ for (const result of results) if (result) scans.push(result);
9165
+ }
9166
+ const [watchesMax, instancesMax] = await Promise.all([readLimit(adapters, "/proc/sys/fs/inotify/max_user_watches"), readLimit(adapters, "/proc/sys/fs/inotify/max_user_instances")]);
9167
+ const top = [...scans].sort((a, b) => b.watches - a.watches).slice(0, 5);
9168
+ const topConsumers = await Promise.all(top.map(async (scan) => ({
9169
+ pid: scan.pid,
9170
+ watches: scan.watches,
9171
+ command: await readCommand(adapters, scan.pid)
9172
+ })));
9173
+ return {
9174
+ watchesUsed: scans.reduce((sum, scan) => sum + scan.watches, 0),
9175
+ watchesMax,
9176
+ instancesUsed: scans.reduce((sum, scan) => sum + scan.instances, 0),
9177
+ instancesMax,
9178
+ topConsumers
9179
+ };
9180
+ }
9181
+ var PID_SCAN_CONCURRENCY, defaultAdapters$1;
9182
+ var init_inotify = __esmMin((() => {
9183
+ PID_SCAN_CONCURRENCY = 32;
9184
+ defaultAdapters$1 = {
9185
+ readdir: (path) => readdir(path),
9186
+ readlink: (path) => readlink(path),
9187
+ readFile: (path) => readFile(path, "utf-8")
9188
+ };
9189
+ }));
9190
+ //#endregion
8684
9191
  //#region ../../lib/system-health/linux.ts
8685
9192
  function parseMemInfo(content) {
8686
9193
  const values = /* @__PURE__ */ new Map();
@@ -8774,10 +9281,16 @@ function percent(part, total) {
8774
9281
  return Math.round(part / total * 1e3) / 10;
8775
9282
  }
8776
9283
  function createLinuxHostHealthCollector(adapters = defaultAdapters) {
9284
+ let inotifyCache = null;
8777
9285
  return {
8778
9286
  platform: "linux",
8779
9287
  async sample(previous) {
8780
9288
  const sampledAtMs = adapters.now();
9289
+ if (!inotifyCache || sampledAtMs - inotifyCache.atMs >= 6e4) inotifyCache = {
9290
+ atMs: sampledAtMs,
9291
+ sample: await adapters.sampleInotify().catch(() => null)
9292
+ };
9293
+ const inotify = inotifyCache.sample;
8781
9294
  const [memInfo, procStat, pressure, vmstat, loadAverage, pageSizeBytes] = await Promise.all([
8782
9295
  readParsed(adapters, "/proc/meminfo", parseMemInfo),
8783
9296
  readParsed(adapters, "/proc/stat", parseProcStat),
@@ -8817,6 +9330,9 @@ function createLinuxHostHealthCollector(adapters = defaultAdapters) {
8817
9330
  committedMemoryBytes: committedMemoryBytes == null ? unavailable("Committed_AS is unavailable.") : available(committedMemoryBytes),
8818
9331
  commitLimitBytes: commitLimitBytes == null ? unavailable("CommitLimit is unavailable.") : available(commitLimitBytes),
8819
9332
  virtualCommitmentPercent: committedMemoryBytes == null || commitLimitBytes == null ? unavailable("Virtual commitment cannot be derived.") : available(percent(committedMemoryBytes, commitLimitBytes)),
9333
+ inotifyWatchesUsed: inotify == null ? unavailable("inotify usage could not be scanned from /proc.") : available(inotify.watchesUsed),
9334
+ inotifyWatchesMax: inotify?.watchesMax == null ? unavailable("fs.inotify.max_user_watches is unavailable.") : available(inotify.watchesMax),
9335
+ inotifyWatchesUsedPercent: inotify == null || inotify.watchesMax == null ? unavailable("inotify watch utilization cannot be derived.") : available(percent(inotify.watchesUsed, inotify.watchesMax)),
8820
9336
  counters: {
8821
9337
  cpu: cpuCounters,
8822
9338
  swap: swapCounters
@@ -8827,6 +9343,7 @@ function createLinuxHostHealthCollector(adapters = defaultAdapters) {
8827
9343
  }
8828
9344
  var execFileAsync$1, KB, LINUX_MEMORY_PRESSURE_DEFAULTS, defaultAdapters;
8829
9345
  var init_linux = __esmMin((() => {
9346
+ init_inotify();
8830
9347
  init_types();
8831
9348
  execFileAsync$1 = promisify(execFile);
8832
9349
  KB = 1024;
@@ -8847,7 +9364,8 @@ var init_linux = __esmMin((() => {
8847
9364
  if (!Number.isFinite(value) || value <= 0) throw new Error("getconf returned an invalid page size");
8848
9365
  return value;
8849
9366
  },
8850
- now: () => Date.now()
9367
+ now: () => Date.now(),
9368
+ sampleInotify: () => sampleInotify()
8851
9369
  };
8852
9370
  }));
8853
9371
  //#endregion
@@ -8902,6 +9420,9 @@ function createUnsupportedCollector(platform = "unsupported") {
8902
9420
  committedMemoryBytes: signal(),
8903
9421
  commitLimitBytes: signal(),
8904
9422
  virtualCommitmentPercent: signal(),
9423
+ inotifyWatchesUsed: signal(),
9424
+ inotifyWatchesMax: signal(),
9425
+ inotifyWatchesUsedPercent: signal(),
8905
9426
  counters: {
8906
9427
  cpu: null,
8907
9428
  swap: null
@@ -9054,7 +9575,7 @@ var init_runtime_census = __esmMin((() => {
9054
9575
  ]);
9055
9576
  runtimeCensusService = createRuntimeCensusService({
9056
9577
  listPanes: async () => {
9057
- const { listAllPaneRecords } = await import("./tmux-B6z7h_vZ.js");
9578
+ const { listAllPaneRecords } = await import("./tmux-DQ6jB76i.js");
9058
9579
  return Effect.runPromise(listAllPaneRecords());
9059
9580
  },
9060
9581
  readProcesses: readRuntimeProcessTable
@@ -9208,6 +9729,6 @@ var init_queries = __esmMin((() => {
9208
9729
  });
9209
9730
  }));
9210
9731
  //#endregion
9211
- export { appendActivity as $, isRole as $n, OHMYPI_AGENT_READY_TIMEOUT_SECONDS as $t, spawnTierSupervisor as A, buildDefaultResumeContinueMessage as An, saveAgentRuntimeState as Ar, deliverAgentPermissionDecision as At, detectCrashedAgents as B, clearAgentPausedSync as Bn, assertWorkspaceStackHealthyForSpawn as Bt, replayCrashedStandingAgent as C, getProviderEnvForModel as Cn, normalizeAgentId as Cr, tryReserveAdvancingSlot as Ct, init_tier_supervisor as D, validateProviderHealth as Dn, getAgentRuntimeState as Dr, init_memory_verdict_cache as Dt, deliverCommitForReview as E, init_provider_health as En, waitForReadySignal as Er, getCachedMemoryVerdict as Et, init_tier_escalation as F, writeChannelsBridgeMcpConfig as Fn, init_codex_auth as Fr, init_transcript_landing as Ft, resumeAgent as G, getAgentDir as Gn, transitionIssueToInProgress as Gt, restartAgent as H, clearAgentTroubledSync as Hn, defaultRunWorkspace as Ht, init_slot_reconcile as I, GOVERNOR_SLOT_PAUSE_REASON_PREFIX as In, paneShowsCodexAuthBurn as Ir, probeTranscriptSince as It, isContextOverflowTail as J, getAgentStateFilePath as Jn, providerDefaultHarnessSync as Jt, init_context_overflow as K, getAgentResumeGateBlockReason as Kn, transitionIssueToInReview as Kt, listSlotAssignments as L, SESSION_EXITED_BEFORE_KICKOFF as Ln, init_ohmypi_parser as Lr, BRIDGE_TOKEN_HEADER as Lt, broadcastCommit as M, decideChannelsForWorkAgent as Mn, init_agent_runtime as Mr, deliverResumeMessageWithTranscriptConfirmation as Mt, init_tier_feed as N, decideSupervisorForWorkAgent as Nn, applyCodexAuthBurnFlag as Nr, setAgentDeliveryMethod as Nt, loadPrdDraft as O, getOpenAIAuthStatus as On, getAgentRuntimeStateSync as Or, setCachedMemoryVerdict as Ot, decideEscalation as P, dismissDevChannelsDialog as Pn, checkCodexAuthStatus as Pr, captureTranscriptUserRecordSnapshot as Pt, operatorInterventionEvent as Q, isAgentTroubled as Qn, resolveTier as Qt, reconcileSlotState as R, __testInternals as Rn, parseOhmypiSessionCostResultSync as Rr, init_bridge_token as Rt, contextWindowForModel as S, determineModel as Sn, isQualifiedAgentId as Sr, resetPatrolDispatchBudget as St, shouldReplayCompactAtTierRunBoundary as T, getProviderTmuxFlags as Tn, waitForAgentIdle as Tr, workResumeSlotsAvailable as Tt, buildCompactRecoverySeed as U, clearYieldForResumeSync as Un, init_spawn_prep as Ut, recoverAgent as V, clearAgentTroubled as Vn, buildAgentLaunchConfig as Vt, init_resume as W, decideResumeGate as Wn, retrieveSpawnTimeMemoryContext as Wt, messageAgent as X, init_agent_state as Xn, resolveStaffing as Xt, init_messaging as Y, getAgentStateSync as Yn, resolveImplicitStaffing as Yt, init_operator_interventions as Z, isAgentPaused as Zn, init_resolve_tier as Zt, init_linux as _, materializeAcpContextFile as _n, init_pty_token as _r, emergencyBrake as _t, listRunningAgentsSync as a, getProviderAuthMode as an, recordAgentFailureSync as ar, saveSessionId as at, init_agents as b, buildCavemanExports as bn, resolvePtySupervisorScriptPath as br, releaseAdvancingSlot as bt, getRuntimeCensus as c, injectPiConversationMemory as cn, saveAgentState as cr, init_spawn as ct, panePidsForSession as d, waitForPromptReady as dn, setAgentPausedSync as dr, init_termination as dt, describeOhmypiSpawnFailure as en, markAgentRunning as er, getActivity as et, refreshRuntimeCensus as f, init_pi_fifo as fn, setAgentYieldedSync as fr, stopAgent as ft, LINUX_MEMORY_PRESSURE_DEFAULTS as g, init_context as gn, readAgentHarnessModelRecordSync as gr, describeRunningAgents as gt, init_collector as h, ohmypiFifoPaths as hn, init_agent_record_sync as hr, countRunningSwarmSlotsForIssue as ht, listRunningAgents as i, getOhmypiLauncherFields as in, recordAgentFailure as ir, init_activity as it, supervisorAgentId as j, buildResumeContinueMessage as jn, getAgentRuntimeSnapshot as jr, deliverInitialPromptWithRetry as jt, shouldSupervise as k, init_openai_auth as kn, init_runtime_state as kr, deliverAgentMessage as kt, getRuntimeCensusSnapshot as l, roleAgentDefinitionPath as ln, saveAgentStateSync as lr, spawnAgent as lt, createHostHealthCollector as m, init_ohmypi_fifo as mn, writeAgentStateJsonSync as mr, countRunningAgents as mt, init_queries as n, getAgentRuntimeBaseCommand as nn, markAgentStoppedState as nr, getLatestSessionIdSync as nt, warnOnBareNumericIssueIds as o, getRoleRuntimeBaseCommand as on, recordStartupSessionExit as or, createOhmypiRuntimeSync as ot, runtimeCensusHasHarnessProcess as p, piFifoPaths as pn, wipeAgentStateDirs as pr, stopAgentSync as pt, isContextOverflowError as q, getAgentState as qn, init_staffing as qt, listAgentStates as r, getCodexLauncherFields as rn, markAgentTroubled as rr, getSessionId as rt, descendantPidsForSession as s, init_runtime_command as sn, resetAgentFailureCount as sr, init_ohmypi as st, dropLegacyAgentStatesMissingRoleAsync as t, getAcpLauncherFields as tn, markAgentRunningState as tr, getLatestSessionId as tt, init_runtime_census as u, waitForAcpHostReady as un, setAgentPaused as ur, spawnRun as ut, DARWIN_MEMORY_PRESSURE_DEFAULTS as v, getClaudeAuthStatus as vn, writePtyToken as vr, getConcurrencyLimits as vt, replayStandingAgent as w, getProviderExportsForModel as wn, resolveAgentTargetSync as wr, tryReserveSwarmSlot as wt, compactAtTierRunBoundary as x, buildSpawnEnvForModel as xn, clearReadySignal as xr, releaseSwarmSlot as xt, init_darwin as y, init_claude_auth as yn, init_pty_supervisor_locate as yr, init_concurrency as yt, autoRecoverAgents as z, clearAgentPaused as zn, writeBridgeTokenSync as zt };
9732
+ export { operatorInterventionEvent as $, getAgentDir as $n, providerDefaultHarnessSync as $t, spawnTierSupervisor as A, getProviderExportsForModel as An, isQualifiedAgentId as Ar, AmbiguousKeyedDeliveryError as At, detectCrashedAgents as B, dismissDevChannelsDialog as Bn, init_agent_runtime as Br, init_transcript_landing as Bt, replayCrashedStandingAgent as C, materializeAcpContextFile as Cn, init_agent_record_sync as Cr, resetPatrolDispatchBudget as Ct, init_tier_supervisor as D, buildSpawnEnvForModel as Dn, init_pty_supervisor_locate as Dr, getCachedMemoryVerdict as Dt, deliverCommitForReview as E, buildCavemanExports as En, writePtyToken as Er, workResumeSlotsAvailable as Et, init_tier_escalation as F, init_openai_auth as Fn, getAgentRuntimeState as Fr, deliverResumeMessageWithTranscriptConfirmation as Ft, resumeAgent as G, SESSION_EXITED_BEFORE_KICKOFF as Gn, init_ohmypi_parser as Gr, assertWorkspaceStackHealthyForSpawn as Gt, restartAgent as H, init_supervisor_channels as Hn, checkCodexAuthStatus as Hr, BRIDGE_TOKEN_HEADER as Ht, init_slot_reconcile as I, buildDefaultResumeContinueMessage as In, getAgentRuntimeStateSync as Ir, init_delivery as It, isContextOverflowTail as J, clearAgentPausedSync as Jn, init_spawn_prep as Jt, init_context_overflow as K, __testInternals as Kn, parseOhmypiSessionCostResultSync as Kr, buildAgentLaunchConfig as Kt, listSlotAssignments as L, buildResumeContinueMessage as Ln, init_runtime_state as Lr, resilientDeliveryMethod as Lt, broadcastCommit as M, init_provider_health as Mn, resolveAgentTargetSync as Mr, deliverAgentMessage as Mt, init_tier_feed as N, validateProviderHealth as Nn, waitForAgentIdle as Nr, deliverAgentPermissionDecision as Nt, loadPrdDraft as O, determineModel as On, resolvePtySupervisorScriptPath as Or, init_memory_verdict_cache as Ot, decideEscalation as P, getOpenAIAuthStatus as Pn, waitForReadySignal as Pr, deliverInitialPromptWithRetry as Pt, init_operator_interventions as Q, decideResumeGate as Qn, init_staffing as Qt, reconcileSlotState as R, decideChannelsForWorkAgent as Rn, saveAgentRuntimeState as Rr, setAgentDeliveryMethod as Rt, contextWindowForModel as S, init_context as Sn, writeAgentStateJsonSync as Sr, releaseSwarmSlot as St, shouldReplayCompactAtTierRunBoundary as T, init_claude_auth as Tn, init_pty_token as Tr, tryReserveSwarmSlot as Tt, buildCompactRecoverySeed as U, writeChannelsBridgeMcpConfig as Un, init_codex_auth as Ur, init_bridge_token as Ut, recoverAgent as V, hasCompletionMarkerForAgent as Vn, applyCodexAuthBurnFlag as Vr, probeTranscriptSince as Vt, init_resume as W, GOVERNOR_SLOT_PAUSE_REASON_PREFIX as Wn, paneShowsCodexAuthBurn as Wr, writeBridgeTokenSync as Wt, messageAgent as X, clearAgentTroubledSync as Xn, transitionIssueToInProgress as Xt, init_messaging as Y, clearAgentTroubled as Yn, retrieveSpawnTimeMemoryContext as Yt, messageAgentWithOutcome as Z, clearYieldForResumeSync as Zn, transitionIssueToInReview as Zt, init_linux as _, waitForPromptReady as _n, saveAgentStateSync as _r, describeRunningAgents as _t, listRunningAgentsSync as a, OHMYPI_AGENT_READY_TIMEOUT_SECONDS as an, isAgentPaused as ar, init_activity as at, init_agents as b, init_ohmypi_fifo as bn, setAgentYieldedSync as br, init_concurrency as bt, getRuntimeCensus as c, getAgentRuntimeBaseCommand as cn, markAgentRunning as cr, init_ohmypi as ct, panePidsForSession as d, getProviderAuthMode as dn, markAgentTroubled as dr, spawnRun as dt, resolveImplicitStaffing as en, getAgentResumeGateBlockReason as er, appendActivity as et, refreshRuntimeCensus as f, getRoleRuntimeBaseCommand as fn, recordAgentFailure as fr, init_termination as ft, LINUX_MEMORY_PRESSURE_DEFAULTS as g, waitForAcpHostReady as gn, saveAgentState as gr, countRunningSwarmSlotsForIssue as gt, init_collector as h, roleAgentDefinitionPath as hn, resetAgentFailureCount as hr, countRunningAgents as ht, listRunningAgents as i, resolveTier as in, init_agent_state as ir, getSessionId as it, supervisorAgentId as j, getProviderTmuxFlags as jn, normalizeAgentId as jr, SocketPostStatusError as jt, shouldSupervise as k, getProviderEnvForModel as kn, clearReadySignal as kr, setCachedMemoryVerdict as kt, getRuntimeCensusSnapshot as l, getCodexLauncherFields as ln, markAgentRunningState as lr, init_spawn as lt, createHostHealthCollector as m, injectPiConversationMemory as mn, recordStartupSessionExit as mr, stopAgentSync as mt, init_queries as n, resolveStaffing as nn, getAgentStateFilePath as nr, getLatestSessionId as nt, warnOnBareNumericIssueIds as o, describeOhmypiSpawnFailure as on, isAgentTroubled as or, saveSessionId as ot, runtimeCensusHasHarnessProcess as p, init_runtime_command as pn, recordAgentFailureSync as pr, stopAgent as pt, isContextOverflowError as q, clearAgentPaused as qn, defaultRunWorkspace as qt, listAgentStates as r, init_resolve_tier as rn, getAgentStateSync as rr, getLatestSessionIdSync as rt, descendantPidsForSession as s, getAcpLauncherFields as sn, isRole as sr, createOhmypiRuntimeSync as st, dropLegacyAgentStatesMissingRoleAsync as t, resolveIssueWorkModel as tn, getAgentState as tr, getActivity as tt, init_runtime_census as u, getOhmypiLauncherFields as un, markAgentStoppedState as ur, spawnAgent as ut, DARWIN_MEMORY_PRESSURE_DEFAULTS as v, init_pi_fifo as vn, setAgentPaused as vr, emergencyBrake as vt, replayStandingAgent as w, getClaudeAuthStatus as wn, readAgentHarnessModelRecordSync as wr, tryReserveAdvancingSlot as wt, compactAtTierRunBoundary as x, ohmypiFifoPaths as xn, wipeAgentStateDirs as xr, releaseAdvancingSlot as xt, init_darwin as y, piFifoPaths as yn, setAgentPausedSync as yr, getConcurrencyLimits as yt, autoRecoverAgents as z, decideSupervisorForWorkAgent as zn, getAgentRuntimeSnapshot as zr, captureTranscriptUserRecordSnapshot as zt };
9212
9733
 
9213
- //# sourceMappingURL=queries-CjNIf-Ub.js.map
9734
+ //# sourceMappingURL=queries-DHJm7bTd.js.map