@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,10 +1,10 @@
1
- import { Vr as init_paths, hr as AGENTS_DIR } from "./config-yaml-DySPNmKN.js";
2
- import { D as killSession, H as sessionExists, M as listSessionNames, w as init_tmux } from "./tmux-R7N7y-Mh.js";
3
- import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CBhNdzE4.js";
4
- import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-_d6XhyND.js";
5
- import { a as pidsWithCwdUnder } from "./agent-gc-CHcnvonI.js";
6
- import { i as findWorkspacePath, o as init_archive_planning, r as findAllWorkspacePaths } from "./archive-planning-Du25Jtst.js";
7
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-5M0lupud.js";
1
+ import { Ir as AGENTS_DIR, ci as init_paths } from "./config-yaml-CmOPzmBb.js";
2
+ import { D as killSession, H as sessionExists, M as listSessionNames, w as init_tmux } from "./tmux-B1Wbxz5o.js";
3
+ import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CwO-Hek7.js";
4
+ import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-68CSCRnu.js";
5
+ import { a as pidsWithCwdUnder } from "./agent-gc-CBULruzm.js";
6
+ import { i as findWorkspacePath, r as findAllWorkspacePaths } from "./archive-planning-C0lAbNB_.js";
7
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-q67TYYg5.js";
8
8
  import { Effect } from "effect";
9
9
  import { existsSync } from "fs";
10
10
  import { basename, join } from "path";
@@ -26,7 +26,6 @@ import { promisify } from "util";
26
26
  init_paths();
27
27
  init_tmux();
28
28
  init_types();
29
- init_archive_planning();
30
29
  init_workspace_manager();
31
30
  init_devcontainer_renderer();
32
31
  const execAsync = promisify(exec);
@@ -84,7 +83,7 @@ async function stopTldrDaemonImpl(workspacePath) {
84
83
  const venvPath = join(workspacePath, ".venv");
85
84
  if (!existsSync(venvPath)) return stepSkipped(step, ["No .venv found"]);
86
85
  try {
87
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BYFkts95.js");
86
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-BKOYB616.js");
88
87
  await getTldrDaemonServiceSync(workspacePath, venvPath).stop();
89
88
  return stepOk(step, ["Stopped TLDR daemon"]);
90
89
  } catch {
@@ -103,7 +102,7 @@ function stopDocker(workspacePath, issueLower) {
103
102
  async function stopDockerImpl(workspacePath, issueLower) {
104
103
  const step = "teardown:docker";
105
104
  try {
106
- const { stopWorkspaceDocker } = await import("./workspace-manager-CWT55qeI.js");
105
+ const { stopWorkspaceDocker } = await import("./workspace-manager-CDTKjjdU.js");
107
106
  await Effect.runPromise(stopWorkspaceDocker(workspacePath, issueLower));
108
107
  return stepOk(step, ["Stopped Docker containers"]);
109
108
  } catch {
@@ -407,7 +406,7 @@ function clearShadowState(issueId) {
407
406
  async function clearShadowStateImpl(issueId) {
408
407
  const step = "teardown:shadow-state";
409
408
  try {
410
- const { removeShadowState } = await import("./shadow-state-DnDyjujH.js");
409
+ const { removeShadowState } = await import("./shadow-state-FV6PHfEW.js");
411
410
  if (removeShadowState(issueId).success) return stepOk(step, [`Cleared shadow state for ${issueId}`]);
412
411
  return stepSkipped(step, ["No shadow state found"]);
413
412
  } catch {
@@ -457,7 +456,7 @@ function buildPlaceholders(ctx, opts, workspacePath) {
457
456
  function removeTunnelConfig(tunnelConfig, placeholders) {
458
457
  return Effect.tryPromise({
459
458
  try: async () => {
460
- const { removeTunnelIngress } = await import("./tunnel-DGdUkGoZ.js");
459
+ const { removeTunnelIngress } = await import("./tunnel-CjSnHdTc.js");
461
460
  return stepOk("teardown:tunnel", (await Effect.runPromise(removeTunnelIngress(tunnelConfig, placeholders))).steps || ["Removed tunnel ingress"]);
462
461
  },
463
462
  catch: (err) => err
@@ -469,7 +468,7 @@ function removeTunnelConfig(tunnelConfig, placeholders) {
469
468
  function removeHumeEviConfig(humeConfig, placeholders) {
470
469
  return Effect.tryPromise({
471
470
  try: async () => {
472
- const { deleteHumeConfig } = await import("./hume-ccTf4wTX.js");
471
+ const { deleteHumeConfig } = await import("./hume-Dq--7rOQ.js");
473
472
  return stepOk("teardown:hume", (await Effect.runPromise(deleteHumeConfig(humeConfig, placeholders))).steps || ["Removed Hume EVI config"]);
474
473
  },
475
474
  catch: (err) => err
@@ -514,7 +513,7 @@ function pruneSpecialistRegistry(issueId) {
514
513
  return Effect.tryPromise({
515
514
  try: async () => {
516
515
  const step = "teardown:specialist-registry";
517
- const { pruneSpecialistRegistryEntriesForIssue } = await import("./specialists-DM6bWjsi.js");
516
+ const { pruneSpecialistRegistryEntriesForIssue } = await import("./specialists-Tdezg_6N.js");
518
517
  const removed = pruneSpecialistRegistryEntriesForIssue(issueId);
519
518
  return removed > 0 ? stepOk(step, [`Pruned ${removed} specialist registry entr${removed === 1 ? "y" : "ies"} for ${issueId}`]) : stepSkipped(step, [`No specialist registry entries for ${issueId}`]);
520
519
  },
@@ -525,7 +524,7 @@ function pruneCheckpointRefs(projectPath, issueLower) {
525
524
  return Effect.tryPromise({
526
525
  try: async () => {
527
526
  const step = "teardown:checkpoint-refs";
528
- const { pruneCheckpointRefsForAgents } = await import("./checkpoint-manager-DwbQoqrC.js");
527
+ const { pruneCheckpointRefsForAgents } = await import("./checkpoint-manager-Dxh0FYsv.js");
529
528
  const agentIds = [
530
529
  `agent-${issueLower}`,
531
530
  `planning-${issueLower}`,
@@ -539,4 +538,4 @@ function pruneCheckpointRefs(projectPath, issueLower) {
539
538
  //#endregion
540
539
  export { teardownWorkspace as t };
541
540
 
542
- //# sourceMappingURL=teardown-workspace-DeTTImn-.js.map
541
+ //# sourceMappingURL=teardown-workspace-l2F4_zim.js.map
@@ -1,8 +1,8 @@
1
- import { Tn as init_projects, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
2
- import { b as setReviewStatusSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
3
- import { b as init_agents, ut as spawnRun } from "./queries-CjNIf-Ub.js";
4
- import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-BkaOqPsw.js";
5
- import { r as init_test_verdict, t as clearTestVerdictArtifact } from "./test-verdict-bWYBtqBg.js";
1
+ import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CmOPzmBb.js";
2
+ import { S as setReviewStatusSync, f as init_review_status } from "./review-status-yljtTd-q.js";
3
+ import { b as init_agents, dt as spawnRun } from "./queries-DHJm7bTd.js";
4
+ import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-x3JO8Dtz.js";
5
+ import { r as init_test_verdict, t as clearTestVerdictArtifact } from "./test-verdict-BJYDggMm.js";
6
6
  import { Data, Effect } from "effect";
7
7
  //#region ../../lib/cloister/test-agent-queue.ts
8
8
  /**
@@ -163,4 +163,4 @@ const dispatchTestAgentAndNotify = (issueId, workspace, branch, notifyAgent) =>
163
163
  //#endregion
164
164
  export { buildTestRolePrompt, dispatchTestAgentAndNotify };
165
165
 
166
- //# sourceMappingURL=test-agent-queue-MbxX5vqq.js.map
166
+ //# sourceMappingURL=test-agent-queue-qakFIIGz.js.map
@@ -102,4 +102,4 @@ var init_test_verdict = __esmMin((() => {}));
102
102
  //#endregion
103
103
  export { testVerdictArtifactPath as a, readTestVerdictArtifact as i, decideUnsignaledTestAction as n, init_test_verdict as r, clearTestVerdictArtifact as t };
104
104
 
105
- //# sourceMappingURL=test-verdict-bWYBtqBg.js.map
105
+ //# sourceMappingURL=test-verdict-BJYDggMm.js.map
@@ -1,3 +1,3 @@
1
- import { i as readTestVerdictArtifact, r as init_test_verdict } from "./test-verdict-bWYBtqBg.js";
1
+ import { i as readTestVerdictArtifact, r as init_test_verdict } from "./test-verdict-BJYDggMm.js";
2
2
  init_test_verdict();
3
3
  export { readTestVerdictArtifact };
@@ -1,3 +1,3 @@
1
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-C-69c3OI.js";
1
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-CBaWkV9k.js";
2
2
  init_tldr_daemon();
3
3
  export { getTldrDaemonServiceSync };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { mr as init_errors } from "./config-yaml-DySPNmKN.js";
2
+ import { Fr as init_errors } from "./config-yaml-CmOPzmBb.js";
3
3
  import "effect";
4
4
  import { existsSync, readFileSync, statSync } from "fs";
5
5
  import { join } from "path";
@@ -221,4 +221,4 @@ var init_tldr_daemon = __esmMin((() => {
221
221
  //#endregion
222
222
  export { getTldrDaemonServiceSync as n, init_tldr_daemon as r, TldrDaemonService as t };
223
223
 
224
- //# sourceMappingURL=tldr-daemon-C-69c3OI.js.map
224
+ //# sourceMappingURL=tldr-daemon-CBaWkV9k.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Br as getOverdeckHome, Vr as init_paths, dr as TmuxError, f as loadConfigSync, mr as init_errors, t as init_config_yaml } from "./config-yaml-DySPNmKN.js";
2
+ import { Fr as init_errors, Mr as TmuxError, ci as init_paths, f as loadConfigSync, si as getOverdeckHome, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
3
3
  import { Effect } from "effect";
4
4
  import { appendFileSync, chmodSync, existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
5
5
  import { join } from "path";
@@ -1250,6 +1250,6 @@ var init_tmux = __esmMin((() => {
1250
1250
  getAgentSessions = () => listSessions().pipe(Effect.map((sessions) => sessions.filter((s) => s.name.startsWith("agent-"))));
1251
1251
  }));
1252
1252
  //#endregion
1253
- export { init_child_env as $, listPaneValues as A, sendKeysAsync as B, getWindowDimensions as C, killSession as D, isPaneDead as E, parseTmuxPaneRecords as F, paneTreeHasHarnessProcess as G, sessionExists as H, querySessionSync as I, init_ui_theme as J, colorFgBgForTheme as K, resizeWindow as L, listSessionNames as M, listSessions as N, killSessionSync as O, listSessionsSync as P, buildChildEnvWithoutTmuxSync as Q, sendEscapeKeyAsync as R, getTmuxConfigMode as S, isHarnessProcessAlive as T, sessionExistsSync as U, sendRawKeystroke as V, setOption as W, BLANKED_PROVIDER_ENV as X, setUiTheme as Y, buildChildEnvSync as Z, getAgentSessions as _, capturePaneSync as a, getTmuxBaseArgs as b, createSessionSync as c, ensureManagedTmuxContextOnce as d, ensureOverdeckTmuxServerAsync as f, findManagedServerPidSync as g, exactSession as h, capturePane as i, listPaneValuesSync as j, listAllPaneRecords as k, deliveryVerifyLine as l, exactPaneTarget as m, buildTmuxArgs as n, capturePaneText as o, ensureOverdeckTmuxServerSync as p, getUiThemeSync as q, buildTmuxCommandString as r, createSession as s, MessageDeliveryFailed as t, detectTerminalApiErrorSync as u, getManagedTmuxConfigPath as v, init_tmux as w, getTmuxCommand as x, getManagedTmuxSocketName as y, sendKeys as z };
1253
+ export { buildChildEnvSync as $, listPaneValues as A, sendKeysAsync as B, getWindowDimensions as C, killSession as D, isPaneDead as E, parseTmuxPaneRecords as F, tmuxExecAsync as G, sessionExists as H, querySessionSync as I, colorFgBgForTheme as J, validateSessionName as K, resizeWindow as L, listSessionNames as M, listSessions as N, killSessionSync as O, listSessionsSync as P, BLANKED_PROVIDER_ENV as Q, sendEscapeKeyAsync as R, getTmuxConfigMode as S, isHarnessProcessAlive as T, sessionExistsSync as U, sendRawKeystroke as V, setOption as W, init_ui_theme as X, getUiThemeSync as Y, setUiTheme as Z, getAgentSessions as _, capturePaneSync as a, getTmuxBaseArgs as b, createSessionSync as c, ensureManagedTmuxContextOnce as d, buildChildEnvWithoutTmuxSync as et, ensureOverdeckTmuxServerAsync as f, findManagedServerPidSync as g, exactSession as h, capturePane as i, listPaneValuesSync as j, listAllPaneRecords as k, deliveryVerifyLine as l, exactPaneTarget as m, buildTmuxArgs as n, capturePaneText as o, ensureOverdeckTmuxServerSync as p, paneTreeHasHarnessProcess as q, buildTmuxCommandString as r, createSession as s, MessageDeliveryFailed as t, init_child_env as tt, detectTerminalApiErrorSync as u, getManagedTmuxConfigPath as v, init_tmux as w, getTmuxCommand as x, getManagedTmuxSocketName as y, sendKeys as z };
1254
1254
 
1255
- //# sourceMappingURL=tmux-R7N7y-Mh.js.map
1255
+ //# sourceMappingURL=tmux-B1Wbxz5o.js.map
@@ -1,3 +1,3 @@
1
- import { D as killSession, E as isPaneDead, H as sessionExists, M as listSessionNames, k as listAllPaneRecords, w as init_tmux } from "./tmux-R7N7y-Mh.js";
1
+ import { D as killSession, E as isPaneDead, H as sessionExists, M as listSessionNames, k as listAllPaneRecords, w as init_tmux } from "./tmux-B1Wbxz5o.js";
2
2
  init_tmux();
3
3
  export { isPaneDead, killSession, listAllPaneRecords, listSessionNames, sessionExists };
@@ -1,11 +1,15 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Br as getOverdeckHome, H as init_providers, Ur as packageRoot, Vr as init_paths, W as qualifyPiModel } from "./config-yaml-DySPNmKN.js";
3
- import { J as init_ui_theme, K as colorFgBgForTheme, q as getUiThemeSync } from "./tmux-R7N7y-Mh.js";
4
- import { o as getHarnessBehavior } from "./src-DtcUOZCq.js";
5
- import { t as init_behavior } from "./behavior-B3exJ42O.js";
6
- import { f as toCodexSandboxValue, l as init_codex } from "./codex-BZXGhUVB.js";
2
+ import { H as init_providers, W as qualifyPiModel, ci as init_paths, si as getOverdeckHome, ui as packageRoot } from "./config-yaml-CmOPzmBb.js";
3
+ import { G as tmuxExecAsync, J as colorFgBgForTheme, K as validateSessionName, X as init_ui_theme, Y as getUiThemeSync, w as init_tmux } from "./tmux-B1Wbxz5o.js";
4
+ import { s as getHarnessBehavior } from "./src-CRmCHlma.js";
5
+ import { t as init_behavior } from "./behavior-CfIg6pKp.js";
6
+ import { f as toCodexSandboxValue, l as init_codex } from "./codex-Drlf5Xhf.js";
7
7
  import { dirname, join } from "node:path";
8
8
  import { Data } from "effect";
9
+ import { join as join$1 } from "path";
10
+ import { tmpdir } from "os";
11
+ import { unlink, writeFile } from "fs/promises";
12
+ import { randomUUID } from "node:crypto";
9
13
  //#region ../../lib/model-validation.ts
10
14
  function normalizeModelOverrideSync(value) {
11
15
  if (value === void 0 || value === null) return void 0;
@@ -73,10 +77,35 @@ function buildGitGuardLines(agentId) {
73
77
  "}",
74
78
  "_overdeck_git_command=\"\\$(_overdeck_git_find_command \"\\$@\")\"",
75
79
  "case \"\\$_overdeck_git_command\" in",
76
- " rebase|stash)",
77
- " echo \"Overdeck agents must not run git \\$_overdeck_git_command directly. Use pan sync-main to sync main or pan done to submit.\" >&2",
80
+ " rebase)",
81
+ " echo \"Overdeck agents must not run git rebase directly. Use pan sync-main to sync main or pan done to submit.\" >&2",
78
82
  " exit 1",
79
83
  " ;;",
84
+ " stash)",
85
+ " _overdeck_stash_sub=\"\"",
86
+ " _overdeck_after_stash=0",
87
+ " for _overdeck_git_arg in \"\\$@\"; do",
88
+ " if [ \"\\$_overdeck_after_stash\" = \"1\" ]; then",
89
+ " case \"\\$_overdeck_git_arg\" in",
90
+ " -*) ;;",
91
+ " *)",
92
+ " _overdeck_stash_sub=\"\\$_overdeck_git_arg\"",
93
+ " break",
94
+ " ;;",
95
+ " esac",
96
+ " elif [ \"\\$_overdeck_git_arg\" = \"stash\" ]; then",
97
+ " _overdeck_after_stash=1",
98
+ " fi",
99
+ " done",
100
+ " case \"\\$_overdeck_stash_sub\" in",
101
+ " list|show)",
102
+ " ;;",
103
+ " *)",
104
+ " echo \"Overdeck agents must not run git stash directly (read-only stash list/show are allowed). Use pan sync-main to sync main or pan done to submit.\" >&2",
105
+ " exit 1",
106
+ " ;;",
107
+ " esac",
108
+ " ;;",
80
109
  " reset)",
81
110
  " for _overdeck_git_arg in \"\\$@\"; do",
82
111
  " if [ \"\\$_overdeck_git_arg\" = \"--hard\" ]; then",
@@ -468,6 +497,396 @@ var init_launcher_generator = __esmMin((() => {
468
497
  ];
469
498
  }));
470
499
  //#endregion
471
- export { normalizeModelOverrideSync as a, init_model_validation as i, init_launcher_generator as n, requireModelOverrideSync as o, MODEL_ID_PATTERN as r, shellQuoteModelIdSync as s, generateLauncherScriptSync as t };
500
+ //#region ../../lib/tmux-dedup.ts
501
+ /**
502
+ * Keyed, crash-safe tmux delivery (PAN-2997).
503
+ *
504
+ * The dashboard cannot dedupe a tmux paste from its own state — a crash
505
+ * between the paste and the dashboard's acknowledgment bookkeeping would make
506
+ * recovery re-paste. The dedup record therefore lives in the
507
+ * crash-independent component: per-session tmux user options. All
508
+ * check/paste/mark sequences that must not be interrupted are issued as ONE
509
+ * `if-shell` command list, which the tmux SERVER executes — a dashboard exit
510
+ * cannot interrupt it, and a tmux-server exit kills the agent session itself,
511
+ * so a replay after either crash is correct.
512
+ *
513
+ * The protocol is two-phase so the complete paste-settle-submit transaction
514
+ * survives a dashboard crash: the key becomes terminal only as part of the
515
+ * server-owned submission itself.
516
+ *
517
+ * (none) ──paste──► PENDING ──atomic claim+Enter──► TERMINAL
518
+ *
519
+ * - `sendKeysDedup` atomically pastes and sets the PENDING option only when
520
+ * neither option is set. A replay that finds PENDING (a prior attempt
521
+ * crashed before submitting) returns 'submit-pending' WITHOUT re-pasting.
522
+ * A POISON breadcrumb (a terminal marker that proved false but could not be
523
+ * rolled back) is repaired first and never honored as a dedup.
524
+ * - `completeKeyedSubmit` issues ONE `if-shell`: only when PENDING is
525
+ * present, TERMINAL absent, and the pane alive does the tmux server send
526
+ * the Enter and then flip TERMINAL and clear PENDING — in that order, in a
527
+ * single server-executed command list. After the command the target is
528
+ * re-read: if the pane died, was replaced, or cannot be identified around
529
+ * the Enter, the terminal marker is rolled back under a poison breadcrumb
530
+ * and the pending claim restored. Exactly one caller can become the
531
+ * completer; every other concurrent or post-crash caller loses the
532
+ * server-side condition and sends nothing, so no stray Enter can ever land
533
+ * in a composer holding unrelated text.
534
+ */
535
+ /** Set once the keyed message has been SUBMITTED (Enter sent). */
536
+ function dedupTerminalOptionName(dedupKey) {
537
+ return `@overdeck-dedup-${dedupKey}`;
538
+ }
539
+ /** Set atomically with the paste; cleared when the terminal marker lands. */
540
+ function dedupPendingOptionName(dedupKey) {
541
+ return `@overdeck-dedup-pending-${dedupKey}`;
542
+ }
543
+ /**
544
+ * Rollback-required breadcrumb (cycle 11). Set when a post-submit check
545
+ * proves a terminal marker FALSE but the rollback could not be verified.
546
+ * While this marker exists the terminal marker must never be honored — the
547
+ * next keyed call repairs the markers before anything else.
548
+ */
549
+ function dedupPoisonOptionName(dedupKey) {
550
+ return `@overdeck-dedup-poison-${dedupKey}`;
551
+ }
552
+ /**
553
+ * The pane_pid of the pane that received the keyed paste (cycle 13). Set
554
+ * atomically with the paste (`set-option -F ... '#{pane_pid}'`) and required
555
+ * by the submit condition: recovery may complete an old pending claim with
556
+ * Enter alone ONLY when the current pane IS the pane that holds the pasted
557
+ * content. A replaced pane gets a real re-paste instead.
558
+ */
559
+ function dedupTargetOptionName(dedupKey) {
560
+ return `@overdeck-dedup-target-${dedupKey}`;
561
+ }
562
+ function assertValidDedupKey(dedupKey) {
563
+ if (!DEDUP_KEY_RE.test(dedupKey)) throw new Error(`dedupKey must match [A-Za-z0-9:_-]+, got: ${dedupKey.slice(0, 40)}`);
564
+ }
565
+ /** pane_pid + pane_dead in one read — the identity of the Enter's target. */
566
+ async function readPaneTarget(sessionName) {
567
+ return tmuxExecAsync([
568
+ "display-message",
569
+ "-p",
570
+ "-t",
571
+ sessionName,
572
+ "#{pane_pid} #{pane_dead}"
573
+ ], { encoding: "utf-8" }).then((result) => {
574
+ const [pid = "", dead = ""] = String(result.stdout).trim().split(/\s+/);
575
+ return {
576
+ pid,
577
+ dead: dead === "1"
578
+ };
579
+ }).catch(() => ({
580
+ pid: "",
581
+ dead: true
582
+ }));
583
+ }
584
+ async function readMarker(sessionName, option) {
585
+ return tmuxExecAsync([
586
+ "show-option",
587
+ "-qv",
588
+ "-t",
589
+ sessionName,
590
+ option
591
+ ], { encoding: "utf-8" }).then((result) => String(result.stdout).trim(), () => "");
592
+ }
593
+ /**
594
+ * Fail-CLOSED marker read (cycle 12): `-q` makes an unset user option a clean
595
+ * empty read, so a rejection is always a REAL failure (missing session,
596
+ * unreachable server). Safety-critical markers (the poison breadcrumb) must
597
+ * be read this way — interpreting a failed read as "absent" could honor a
598
+ * false terminal marker or bypass a rollback-required state.
599
+ */
600
+ async function readMarkerStrict(sessionName, option) {
601
+ const result = await tmuxExecAsync([
602
+ "show-option",
603
+ "-qv",
604
+ "-t",
605
+ sessionName,
606
+ option
607
+ ], { encoding: "utf-8" });
608
+ return String(result.stdout).trim();
609
+ }
610
+ /**
611
+ * Clear the poison breadcrumb and VERIFY it is gone with a strict read.
612
+ * EVERY failure here — the clear command, the verification read, or a
613
+ * surviving breadcrumb — is a recoverable KeyedMarkerVerificationError
614
+ * (cycle 14): a repair that stops at this boundary has delivered nothing,
615
+ * so the wake outbox must stay pending, never terminal 'failed'.
616
+ */
617
+ async function clearPoisonVerified(sessionName, poisonOption, context, readStrict = readMarkerStrict) {
618
+ try {
619
+ await tmuxExecAsync([
620
+ "set-option",
621
+ "-u",
622
+ "-t",
623
+ sessionName,
624
+ poisonOption
625
+ ], { encoding: "utf-8" });
626
+ } catch (error) {
627
+ throw new KeyedMarkerVerificationError(sessionName, `poison clear command failed (${context})`, { cause: error });
628
+ }
629
+ let remaining;
630
+ try {
631
+ remaining = await readStrict(sessionName, poisonOption);
632
+ } catch (error) {
633
+ throw new KeyedMarkerVerificationError(sessionName, `post-clear verification read failed (${context})`, { cause: error });
634
+ }
635
+ if (remaining !== "") throw new KeyedMarkerVerificationError(sessionName, `poison breadcrumb survived the clear (${context})`);
636
+ }
637
+ /**
638
+ * Repair a poisoned marker set (cycle 11/12): clear the terminal marker,
639
+ * restore a pending claim, verify both, then clear the breadcrumb — verified.
640
+ * A poisoned terminal is PROVISIONAL: it may be a false claim (rollback was
641
+ * interrupted) or a delivered-but-unverified one, and the tmux tier cannot
642
+ * distinguish them — so repair always rolls back to pending and lets the
643
+ * normal recovery re-drive. An empty Enter on the (already-submitted, live)
644
+ * composer is the worst case; a suppressed wake is never acceptable.
645
+ *
646
+ * Returns normally only when the breadcrumb is verifiably gone; throws
647
+ * otherwise (the caller must NOT submit while a stale breadcrumb survives —
648
+ * a later replay would invalidate a legitimate terminal and re-submit).
649
+ */
650
+ async function repairPoisonedMarkers(sessionName, dedupKey, sendId, readStrict) {
651
+ const terminalOption = dedupTerminalOptionName(dedupKey);
652
+ const pendingOption = dedupPendingOptionName(dedupKey);
653
+ const poisonOption = dedupPoisonOptionName(dedupKey);
654
+ await tmuxExecAsync([
655
+ "set-option",
656
+ "-u",
657
+ "-t",
658
+ sessionName,
659
+ terminalOption,
660
+ ";",
661
+ "set-option",
662
+ "-t",
663
+ sessionName,
664
+ pendingOption,
665
+ sendId
666
+ ], { encoding: "utf-8" });
667
+ let repairedTerminal;
668
+ let repairedPending;
669
+ try {
670
+ [repairedTerminal, repairedPending] = await Promise.all([readStrict(sessionName, terminalOption), readStrict(sessionName, pendingOption)]);
671
+ } catch {
672
+ throw new KeyedMarkerVerificationError(sessionName, `repair verification of key "${dedupKey}"`);
673
+ }
674
+ if (repairedTerminal !== "" || repairedPending === "") throw new Error(`Keyed tmux markers for ${sessionName} are poisoned and could not be repaired (key "${dedupKey}")`);
675
+ await clearPoisonVerified(sessionName, poisonOption, `repair of key "${dedupKey}"`, readStrict);
676
+ }
677
+ /**
678
+ * Deduplicated message paste for the tmux fallback path.
679
+ *
680
+ * Returns 'pasted' when this call pasted (caller must complete the submit),
681
+ * 'submit-pending' when a prior attempt's paste is still awaiting submission
682
+ * (caller must complete the submit — crucially WITHOUT pasting again), and
683
+ * 'deduplicated' when the key is already terminal (caller does nothing; no
684
+ * stray Enter, because the composer may hold unrelated operator text).
685
+ *
686
+ * Throws when the keyed paste did not land and no marker explains why —
687
+ * silent loss must surface as a delivery failure, not as a false dedup.
688
+ */
689
+ async function sendKeysDedup(sessionName, keys, dedupKey, caller, deps = {}) {
690
+ validateSessionName(sessionName);
691
+ assertValidDedupKey(dedupKey);
692
+ const read = deps.readMarker ?? readMarker;
693
+ const readStrict = deps.readMarkerStrict ?? readMarkerStrict;
694
+ const terminalOption = dedupTerminalOptionName(dedupKey);
695
+ const pendingOption = dedupPendingOptionName(dedupKey);
696
+ const poisonOption = dedupPoisonOptionName(dedupKey);
697
+ const sendId = randomUUID();
698
+ let poisonMarker;
699
+ try {
700
+ poisonMarker = await readStrict(sessionName, poisonOption);
701
+ } catch (error) {
702
+ throw new KeyedMarkerVerificationError(sessionName, `initial poison read (key "${dedupKey}")`, { cause: error });
703
+ }
704
+ const repaired = poisonMarker !== "";
705
+ if (repaired) await repairPoisonedMarkers(sessionName, dedupKey, sendId, readStrict);
706
+ const targetOption = dedupTargetOptionName(dedupKey);
707
+ const tmpFile = join$1(tmpdir(), `pan-sendkeys-${sendId}.txt`);
708
+ const bufferName = `pan-${sendId}`;
709
+ try {
710
+ await writeFile(tmpFile, keys, "utf-8");
711
+ await tmuxExecAsync([
712
+ "load-buffer",
713
+ "-b",
714
+ bufferName,
715
+ tmpFile
716
+ ], { encoding: "utf-8" });
717
+ if (!repaired) await tmuxExecAsync([
718
+ "if-shell",
719
+ "-t",
720
+ sessionName,
721
+ `test -z "$(tmux show-option -qv -t ${sessionName} ${pendingOption})" && test -z "$(tmux show-option -qv -t ${sessionName} ${terminalOption})"`,
722
+ `paste-buffer -b ${bufferName} -p -t ${sessionName} \; set-option -t ${sessionName} ${pendingOption} ${sendId} \; set-option -F -t ${sessionName} ${targetOption} '#{pane_pid}'`
723
+ ], { encoding: "utf-8" });
724
+ const [pendingMarker, terminalMarker] = await Promise.all([read(sessionName, pendingOption), read(sessionName, terminalOption)]);
725
+ if (terminalMarker !== "") return "deduplicated";
726
+ if (!repaired && pendingMarker === sendId) return "pasted";
727
+ if (pendingMarker !== "") {
728
+ const recordedTarget = await read(sessionName, targetOption);
729
+ const currentPid = (await (deps.readPaneTarget ?? readPaneTarget)(sessionName)).pid;
730
+ if (recordedTarget !== "" && currentPid !== "" && recordedTarget === currentPid) return "submit-pending";
731
+ await tmuxExecAsync([
732
+ "if-shell",
733
+ "-t",
734
+ sessionName,
735
+ `test -n "$(tmux show-option -qv -t ${sessionName} ${pendingOption})" && test -z "$(tmux show-option -qv -t ${sessionName} ${terminalOption})" && ! test "$(tmux display-message -p -t ${sessionName} '#{pane_pid}')" = "$(tmux show-option -qv -t ${sessionName} ${targetOption})"`,
736
+ `paste-buffer -b ${bufferName} -p -t ${sessionName} \; set-option -t ${sessionName} ${pendingOption} ${sendId} \; set-option -F -t ${sessionName} ${targetOption} '#{pane_pid}'`
737
+ ], { encoding: "utf-8" });
738
+ const [repastedPending, repastedTerminal, repastedTarget] = await Promise.all([
739
+ read(sessionName, pendingOption),
740
+ read(sessionName, terminalOption),
741
+ read(sessionName, targetOption)
742
+ ]);
743
+ if (repastedTerminal !== "") return "deduplicated";
744
+ if (repastedPending === sendId) return "pasted";
745
+ if (repastedPending !== "") {
746
+ const nowPid = (await (deps.readPaneTarget ?? readPaneTarget)(sessionName)).pid;
747
+ if (repastedTarget !== "" && nowPid !== "" && repastedTarget === nowPid) return "submit-pending";
748
+ }
749
+ }
750
+ throw new Error(`Keyed tmux paste for ${sessionName} did not land and no dedup marker was recorded` + (caller ? ` (caller: ${caller})` : ""));
751
+ } finally {
752
+ await unlink(tmpFile).catch(() => {});
753
+ await tmuxExecAsync([
754
+ "delete-buffer",
755
+ "-b",
756
+ bufferName
757
+ ], { encoding: "utf-8" }).catch(() => {});
758
+ }
759
+ }
760
+ /**
761
+ * Complete the paste-settle-submit transaction for a keyed tmux delivery.
762
+ *
763
+ * After the settle window, the SUBMISSION is one server-owned command: a
764
+ * single `if-shell` whose condition requires the pending claim present, the
765
+ * terminal marker absent, AND the pane alive, and whose command list sends
766
+ * the Enter FIRST and then sets the POISON breadcrumb and the TERMINAL
767
+ * marker and clears pending — the terminal is PROVISIONAL from the moment it
768
+ * exists, so a dashboard crash can never strand an honorable-but-unverified
769
+ * terminal (cycle 12). The tmux server executes the whole sequence:
770
+ *
771
+ * - A pane that died during the settle window fails the liveness condition —
772
+ * NO marker changes and NO Enter is sent, so the wake is never recorded as
773
+ * delivered when it never landed. The preserved pending claim lets
774
+ * recovery retry after the agent resumes.
775
+ * - The pre-branch liveness condition is NOT proof of acceptance (cycle 10):
776
+ * the pane can die in the shell-to-branch handoff, and tmux reports
777
+ * send-keys into a remain-on-exit corpse as success. So after the command
778
+ * the target is re-read — if the pane died, was replaced, or cannot be
779
+ * identified around the Enter, the terminal marker is ROLLED BACK and the
780
+ * pending claim restored, and KeyedSubmitTargetDeadError is thrown. The
781
+ * breadcrumb is lifted only after verification, and clearing it is itself
782
+ * verified (cycle 12): a stale breadcrumb would let a later replay
783
+ * invalidate a legitimate terminal and re-submit.
784
+ * - The Enter precedes the terminal transition inside the transaction, so a
785
+ * failed Enter (which aborts the command list) can never leave the key
786
+ * terminal.
787
+ * - Exactly one caller becomes the completer; concurrent or post-crash
788
+ * callers lose the server-side condition and send no stray Enter into a
789
+ * composer that may hold unrelated operator text.
790
+ *
791
+ * Safe to call for both 'pasted' and 'submit-pending' phases; a call whose
792
+ * key is already terminal is a no-op. Throws KeyedSubmitTargetDeadError when
793
+ * the pane is dead (pending claim preserved), and a generic error when both
794
+ * markers vanished without a submission.
795
+ */
796
+ async function completeKeyedSubmit(sessionName, dedupKey, deps = {}) {
797
+ validateSessionName(sessionName);
798
+ assertValidDedupKey(dedupKey);
799
+ const read = deps.readMarker ?? readMarker;
800
+ const readStrict = deps.readMarkerStrict ?? readMarkerStrict;
801
+ const readTarget = deps.readPaneTarget ?? readPaneTarget;
802
+ const terminalOption = dedupTerminalOptionName(dedupKey);
803
+ const pendingOption = dedupPendingOptionName(dedupKey);
804
+ const poisonOption = dedupPoisonOptionName(dedupKey);
805
+ const targetOption = dedupTargetOptionName(dedupKey);
806
+ await new Promise((resolve) => setTimeout(resolve, PASTE_SETTLE_MS));
807
+ const preTarget = await readTarget(sessionName);
808
+ const pendingBefore = await read(sessionName, pendingOption);
809
+ await tmuxExecAsync([
810
+ "if-shell",
811
+ "-t",
812
+ sessionName,
813
+ `test -z "$(tmux show-option -qv -t ${sessionName} ${terminalOption})" && test -n "$(tmux show-option -qv -t ${sessionName} ${pendingOption})" && test "$(tmux display-message -p -t ${sessionName} '#{pane_dead}')" = "0" && test "$(tmux display-message -p -t ${sessionName} '#{pane_pid}')" = "$(tmux show-option -qv -t ${sessionName} ${targetOption})"`,
814
+ `send-keys -t ${sessionName} C-m \; set-option -t ${sessionName} ${poisonOption} 1 \; set-option -t ${sessionName} ${terminalOption} 1 \; set-option -u -t ${sessionName} ${pendingOption}`
815
+ ], { encoding: "utf-8" });
816
+ const [terminalAfter, pendingAfter, postTarget, recordedTarget] = await Promise.all([
817
+ read(sessionName, terminalOption),
818
+ read(sessionName, pendingOption),
819
+ readTarget(sessionName),
820
+ read(sessionName, targetOption)
821
+ ]);
822
+ const targetLost = preTarget.dead || preTarget.pid === "" || postTarget.dead || postTarget.pid !== preTarget.pid;
823
+ if (terminalAfter !== "") {
824
+ if (!targetLost) {
825
+ await clearPoisonVerified(sessionName, poisonOption, `verified delivery of key "${dedupKey}"`, readStrict);
826
+ return;
827
+ }
828
+ await tmuxExecAsync(pendingBefore === "" ? [
829
+ "set-option",
830
+ "-u",
831
+ "-t",
832
+ sessionName,
833
+ terminalOption,
834
+ ";",
835
+ "set-option",
836
+ "-u",
837
+ "-t",
838
+ sessionName,
839
+ pendingOption
840
+ ] : [
841
+ "set-option",
842
+ "-u",
843
+ "-t",
844
+ sessionName,
845
+ terminalOption,
846
+ ";",
847
+ "set-option",
848
+ "-t",
849
+ sessionName,
850
+ pendingOption,
851
+ pendingBefore
852
+ ], { encoding: "utf-8" }).catch(() => {});
853
+ let rolledTerminal;
854
+ let restoredPending;
855
+ try {
856
+ [rolledTerminal, restoredPending] = await Promise.all([readStrict(sessionName, terminalOption), readStrict(sessionName, pendingOption)]);
857
+ } catch {
858
+ throw new KeyedMarkerVerificationError(sessionName, `rollback verification of key "${dedupKey}"`);
859
+ }
860
+ if (rolledTerminal === "" && restoredPending !== "") await clearPoisonVerified(sessionName, poisonOption, `verified rollback of key "${dedupKey}"`, readStrict).catch(() => {});
861
+ throw new KeyedSubmitTargetDeadError(sessionName, dedupKey);
862
+ }
863
+ if (pendingAfter !== "") {
864
+ const replaced = recordedTarget === "" || postTarget.pid === "" || recordedTarget !== postTarget.pid;
865
+ if (targetLost || replaced) throw new KeyedSubmitTargetDeadError(sessionName, dedupKey);
866
+ throw new Error(`Keyed tmux submit for ${sessionName} was rejected with the pending claim intact on a live pane`);
867
+ }
868
+ throw new Error(`Keyed tmux submit for ${sessionName} found neither a pending claim nor a terminal marker — the paste vanished without submission`);
869
+ }
870
+ var DEDUP_KEY_RE, PASTE_SETTLE_MS, KeyedSubmitTargetDeadError, KeyedMarkerVerificationError;
871
+ var init_tmux_dedup = __esmMin((() => {
872
+ init_tmux();
873
+ DEDUP_KEY_RE = /^[A-Za-z0-9:_-]+$/;
874
+ PASTE_SETTLE_MS = 300;
875
+ KeyedSubmitTargetDeadError = class extends Error {
876
+ constructor(sessionName, dedupKey) {
877
+ super(`Keyed tmux submit for ${sessionName} found a dead pane — the Enter was NOT accepted by a live harness, the pending claim for key "${dedupKey}" is preserved, and the key is not terminal`);
878
+ this.name = "KeyedSubmitTargetDeadError";
879
+ }
880
+ };
881
+ KeyedMarkerVerificationError = class extends Error {
882
+ constructor(sessionName, context, options) {
883
+ const causeText = options?.cause instanceof Error ? `: ${options.cause.message}` : "";
884
+ super(`Keyed tmux markers for ${sessionName} could not be verified (${context})${causeText}`, options);
885
+ this.name = "KeyedMarkerVerificationError";
886
+ }
887
+ };
888
+ }));
889
+ //#endregion
890
+ export { shellQuoteModelIdSync as _, dedupPendingOptionName as a, dedupTerminalOptionName as c, generateLauncherScriptSync as d, init_launcher_generator as f, requireModelOverrideSync as g, normalizeModelOverrideSync as h, completeKeyedSubmit as i, init_tmux_dedup as l, init_model_validation as m, KeyedSubmitTargetDeadError as n, dedupPoisonOptionName as o, MODEL_ID_PATTERN as p, assertValidDedupKey as r, dedupTargetOptionName as s, KeyedMarkerVerificationError as t, sendKeysDedup as u };
472
891
 
473
- //# sourceMappingURL=launcher-generator-BBWG_SiS.js.map
892
+ //# sourceMappingURL=tmux-dedup-DbN6MGzM.js.map
@@ -1,5 +1,5 @@
1
1
  import { t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { r as require_token_error, t as require_token_util } from "./token-util-DxXu-vd1.js";
2
+ import { r as require_token_error, t as require_token_util } from "./token-util-CLq2MmQt.js";
3
3
  //#region ../../../node_modules/.bun/@vercel+oidc@3.2.0/node_modules/@vercel/oidc/dist/token.js
4
4
  var require_token = /* @__PURE__ */ __commonJSMin(((exports, module) => {
5
5
  var __defProp = Object.defineProperty;
@@ -54,4 +54,4 @@ var require_token = /* @__PURE__ */ __commonJSMin(((exports, module) => {
54
54
  export default require_token();
55
55
  export {};
56
56
 
57
- //# sourceMappingURL=token-BK6t8BIT.js.map
57
+ //# sourceMappingURL=token-Cxbk023d.js.map
@@ -432,4 +432,4 @@ var require_token_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
432
432
  //#endregion
433
433
  export { require_auth_errors as n, require_token_error as r, require_token_util as t };
434
434
 
435
- //# sourceMappingURL=token-util-DxXu-vd1.js.map
435
+ //# sourceMappingURL=token-util-CLq2MmQt.js.map