@overdeck/desktop 0.45.23 → 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 (549) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +34 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DOA0KgXx.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-BBu6DSNm.js → advancing-selfheal-De1L-Sb4.js} +6 -6
  7. package/server/{agent-gc-BV1q_2EV.js → agent-gc-CBULruzm.js} +5 -5
  8. package/server/agent-state-VQk8fY9F.js +3 -0
  9. package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BlnSkRFA.js} +5 -5
  10. package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-hZpxIw1E.js} +1 -1
  11. package/server/agents-BKKkxKgK.js +3 -0
  12. package/server/{agents-B4Bjbkfv.js → agents-C5rWYhb6.js} +4 -4
  13. package/server/archive-planning-0FJ6Xd3b.js +2 -0
  14. package/server/{archive-planning-DYrYojxl.js → archive-planning-C0lAbNB_.js} +16 -24
  15. package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
  16. package/server/assemble-DnffNpOo.js +339 -0
  17. package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
  18. package/server/{behavior-B_-4EKF3.js → behavior-CfIg6pKp.js} +2 -2
  19. package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
  20. package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-DHmCSLar.js} +2 -2
  21. package/server/{build-info-DgTqZkL5.js → build-info-BP160gU7.js} +1 -1
  22. package/server/{build-info-BT096lEl.js → build-info-CuFfxZxp.js} +5 -3
  23. package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-DEWD82qK.js} +2 -2
  24. package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-C-AXLfYT.js → checkpoints-CZvbtLnr.js} +2 -2
  27. package/server/{checkpoints-CpgCjAlN.js → checkpoints-DMTgXuLG.js} +1 -1
  28. package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-CN-xo-do.js} +1 -1
  29. package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
  30. package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-CN0cSCPp.js} +2 -2
  31. package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
  32. package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-Dabi9slj.js} +1 -1
  33. package/server/cli-DmXETsw-.js +3 -0
  34. package/server/{cli-vBeXbPrq.js → cli-oCWYA1pE.js} +9 -9
  35. package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8mB3KuB.js} +2 -2
  36. package/server/{cliproxy-DW0V86F8.js → cliproxy-PGwTX_o8.js} +1 -1
  37. package/server/{close-issue-Dn_4c4G8.js → close-issue-D5MF5GqF.js} +5 -5
  38. package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
  39. package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Cltx86x5.js} +37 -16
  40. package/server/{codex-Dg7Is5yb.js → codex-BdEsUFWh.js} +1 -1
  41. package/server/{codex-TmSi-yTv.js → codex-Drlf5Xhf.js} +37 -8
  42. package/server/{codex-parser-C4gSH-IR.js → codex-parser-DpB89Vqa.js} +2 -2
  43. package/server/compaction-continuation-K2AxQX4H.js +200 -0
  44. package/server/{config-DjLOdbgT.js → config-B2IMcBxx.js} +4 -3
  45. package/server/{config-DUIhMN_T.js → config-DV-grfQc.js} +1 -1
  46. package/server/{config-CCvjQf27.js → config-Dr3pW6w6.js} +2 -2
  47. package/server/{config-yaml-DvyMuOle.js → config-yaml-CmOPzmBb.js} +290 -22
  48. package/server/{conflict-gate-CmrYpa47.js → conflict-gate-B9cN3SBi.js} +4 -4
  49. package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-Dh754uyA.js} +1 -1
  50. package/server/context-layers-D6LZo3l1.js +4 -0
  51. package/server/context-layers-dR5YxHYB.js +37 -0
  52. package/server/{control-settings-aP1ANIlI.js → control-settings-C7DUehE1.js} +49 -19
  53. package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-BoqdDXWF.js} +8 -8
  54. package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
  55. package/server/{conversation-service-Du-MTNpJ.js → conversation-service-5aCnq1zR.js} +331 -20
  56. package/server/conversation-service-BCxl4f8Z.js +3 -0
  57. package/server/{conversations-DbOs1e9Q.js → conversations-BUpYsOZg.js} +5 -5
  58. package/server/{conversations-6mPANqvL.js → conversations-C34dyIb9.js} +1 -1
  59. package/server/{cost-Ca0YTWDw.js → cost-Bgcub5kW.js} +12 -2
  60. package/server/{cost-CW4WSe72.js → cost-CvxRrucd.js} +3 -3
  61. package/server/{cost-sync-C0VdGme1.js → cost-sync-Dv3LUaNW.js} +3 -3
  62. package/server/{dag-CdOjJVDT.js → dag-ombYYt4s.js} +2 -2
  63. package/server/{dangerous-git-ops-CT-IypG3.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-pRnyD5w9.js → deacon-hi9KLPLT.js} +2998 -2659
  67. package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-BNBebzeL.js} +3 -3
  68. package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
  69. package/server/{deacon-swarm-DftYRDo8.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-Bjsho_ha.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-DeP_OIRk.js → deploy-window-rpqpWqHA.js} +40 -16
  79. package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-CC46Ig8q.js} +2 -2
  80. package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-68CSCRnu.js} +3 -3
  81. package/server/{dist-DyRx4cI7.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-BK7HIcBj.js → docker-Dam7mbIB.js} +2 -2
  86. package/server/{dod-BrSfUHm0.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-DseivYEy.js → ensure-devcontainer-B057YA81.js} +4 -4
  90. package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-C98V8yW-.js} +1 -1
  91. package/server/{esm-shims-CbI3BVkl.js → esm-shims-Br9BPdkR.js} +1 -1
  92. package/server/{event-store-Cr5PQwFC.js → event-store-ELqkVOn0.js} +1 -1
  93. package/server/{event-store-tdiY5eDZ.js → event-store-zY5MJHgF.js} +23 -4
  94. package/server/{events-CvvGK6LT.js → events-D6pyqhzM.js} +1 -1
  95. package/server/{events-CC1dgUpx.js → events-D9PR1IC0.js} +3 -3
  96. package/server/{factory-CynerjXO.js → factory-CRoOpGsF.js} +5 -5
  97. package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population--YUXU999.js} +4 -4
  98. package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BORBTo0y.js} +2 -2
  99. package/server/{features-Dhxz-wLc.js → features--nFkJY8v.js} +2 -2
  100. package/server/{feedback-target-iygZwmMc.js → feedback-target-C0ZzyHvU.js} +1 -1
  101. package/server/{feedback-target-CPS15Vte.js → feedback-target-Dt9BsapX.js} +8 -8
  102. package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-BG0RUZiu.js} +5 -5
  103. package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D1fm-5Z8.js} +1 -1
  104. package/server/flywheel-BekukH4i.js +2 -0
  105. package/server/flywheel-BiT3odRb.js +1092 -0
  106. package/server/flywheel-CLVB55Be.js +478 -0
  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-CJ_aH5jD.js → from-D_4_dk7i.js} +1 -1
  112. package/server/{fts-db-CKgg0VKg.js → fts-db-BeOomFa-.js} +2 -2
  113. package/server/{fts-operations-BrL_VTRr.js → fts-operations-BdewJ_g9.js} +2 -2
  114. package/server/git-utils-CI6cwyyC.js +3 -0
  115. package/server/{git-utils-BVa07a4a.js → git-utils-ameCgDdy.js} +93 -3
  116. package/server/{github-app-CMBdIFBQ.js → github-app-CQ1Lo6LA.js} +19 -8
  117. package/server/{github-app-CPfoFAdV.js → github-app-DtAsvwzK.js} +1 -1
  118. package/server/{github-client--XVlDpwM.js → github-client-BfyDxuRN.js} +2 -2
  119. package/server/{github-client-B4QsdE-X.js → github-client-Cj0yl_07.js} +1 -1
  120. package/server/github-pr-lookup-BDq6Wznz.js +58 -0
  121. package/server/{harness-binary-CVio2m-u.js → harness-binary-DqkftwTb.js} +32 -6
  122. package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-CqMqM1Mb.js} +18 -9
  123. package/server/{health-events-C9B8y1Hm.js → health-events-CazRxJUS.js} +2 -2
  124. package/server/{health-events-CpfvuVmm.js → health-events-_xfTaOUs.js} +1 -1
  125. package/server/{hooks-DUXw8A0-.js → hooks-BO3QT1sn.js} +2 -2
  126. package/server/{hooks-ltecuFqZ.js → hooks-BnJsxlSq.js} +1 -1
  127. package/server/{hume-BEq0bUDg.js → hume-CDYJxqx-.js} +2 -2
  128. package/server/hume-Dq--7rOQ.js +3 -0
  129. package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-BYqERdkE.js} +1 -1
  130. package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
  131. package/server/in-flight-guard-Bq3epG58.js +45 -0
  132. package/server/{infra-CzaSOgul.js → infra-BjuxvjdS.js} +80 -5
  133. package/server/{injection-oNZeoDhL.js → injection-DZxlV2al.js} +1 -1
  134. package/server/{injection-DZ0PfYa4.js → injection-UCf8EsjX.js} +191 -183
  135. package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-6kylZnrm.js} +139 -82
  136. package/server/inspect-agent-BVwDrVrz.js +2 -0
  137. package/server/{internal-token-Bb4XeV2x.js → internal-token-DvMTQSOS.js} +2 -2
  138. package/server/{internal-token-DXdfprGr.js → internal-token-M9omeXM1.js} +1 -1
  139. package/server/{io-B3_AHDfr.js → io-VHvc0Ssp.js} +43 -26
  140. package/server/{issue-closed-zhdvQicO.js → issue-closed-B6KJkmHZ.js} +7 -7
  141. package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-9gk3fnXN.js} +1 -1
  142. package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
  143. package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-DmCh7EHj.js} +10 -10
  144. package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-PMx8F1jr.js} +1 -1
  145. package/server/{issues-B6ToV6x1.js → issues-CgnQ1OGQ.js} +2 -2
  146. package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-DJOH_O-w.js} +5 -4
  147. package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-Dv7AV_R1.js} +3 -3
  148. package/server/{label-reconciler-DdWbHEBu.js → label-reconciler--F85rufp.js} +4 -4
  149. package/server/{lifecycle-DfeyBDwA.js → lifecycle-CTdOWYMi.js} +2 -2
  150. package/server/{lifecycle-sycO16hj.js → lifecycle-DDN8ApVY.js} +6 -7
  151. package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-D-lGdzK3.js} +5 -5
  152. package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-D_zTLvP1.js} +1 -1
  153. package/server/{linear-client-D4zqMnX7.js → linear-client-BQU36QqE.js} +2 -2
  154. package/server/{linear-client-DqhDQO9k.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-C_ZEhbqI.js → merge-Bpx4jjht.js} +13 -11
  159. package/server/{merge-agent-XrB80vfT.js → merge-agent-DdMVSV2Y.js} +233 -83
  160. package/server/{merge-agent-BQM3a8z5.js → merge-agent-DrXa1CpW.js} +1 -1
  161. package/server/{merge-batch-Bwoyr8Je.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-DK23JEdS.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-C1KIVr0s.js → merge-rebase-xLnMlw5h.js} +3 -3
  168. package/server/merge-set-DH7ot3yz.js +89 -0
  169. package/server/merge-set-DzsOTBg5.js +3 -0
  170. package/server/{merge-sync-DZ9dojJn.js → merge-sync-CQ-LgZ1_.js} +406 -153
  171. package/server/merge-sync-Ca7F5JnQ.js +3 -0
  172. package/server/{merge-train-DxDfBTjr.js → merge-train-DTEMyIu4.js} +18 -8
  173. package/server/{merge-train-deps-CyYQUksx.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-Dt8YPN5S.js → multipart-parser-IMSBfePV.js} +2 -2
  178. package/server/{no-resume-mode-Cx3K0hHi.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/README.md +5 -0
  270. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  271. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  272. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  273. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  274. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  275. package/server/node_modules/undici/docs/docs/index.md +5 -0
  276. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  277. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  278. package/server/node_modules/undici/lib/core/request.js +13 -2
  279. package/server/node_modules/undici/lib/core/util.js +6 -1
  280. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  281. package/server/node_modules/undici/lib/dispatcher/client-h1.js +42 -8
  282. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  283. package/server/node_modules/undici/lib/global.js +36 -16
  284. package/server/node_modules/undici/lib/handler/cache-handler.js +269 -61
  285. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +13 -3
  286. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  287. package/server/node_modules/undici/lib/handler/retry-handler.js +30 -4
  288. package/server/node_modules/undici/lib/interceptor/cache.js +159 -52
  289. package/server/node_modules/undici/lib/interceptor/decompress.js +9 -2
  290. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  291. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  292. package/server/node_modules/undici/lib/util/cache.js +372 -68
  293. package/server/node_modules/undici/lib/util/date.js +23 -6
  294. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  295. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  296. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  297. package/server/node_modules/undici/package.json +2 -2
  298. package/server/node_modules/undici/types/client.d.ts +2 -2
  299. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  300. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  301. package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
  302. package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
  303. package/server/package-lock.json +28 -28
  304. package/server/package.json +1 -1
  305. package/server/{pan-dir-DeVUgwA7.js → pan-dir-ubraCiUg.js} +24 -10
  306. package/server/{paths-_zEts6wc.js → paths-cXmOwSbh.js} +2 -2
  307. package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
  308. package/server/{pickup-Dd0Znxxy.js → pickup-D8xtG1J2.js} +17 -16
  309. package/server/pipeline-membership-BGSvkT2M.js +3 -0
  310. package/server/pipeline-membership-CrAPLYtf.js +57 -0
  311. package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-gather-CET40frr.js} +177 -109
  312. package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
  313. package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
  314. package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-ImNXknf0.js} +1 -1
  315. package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
  316. package/server/{project-pipelines-2sK1apsO.js → project-pipelines-Bim6bThI.js} +2 -2
  317. package/server/project-repos-C0nuoBGv.js +98 -0
  318. package/server/project-repos-CRE6Ykow.js +3 -0
  319. package/server/projects-B03Wr-xc.js +3 -0
  320. package/server/{prompts-Dp4Tpk39.js → prompts-BEx08AIu.js} +2 -2
  321. package/server/{providers-DKkBXhxU.js → providers-D7IluJe0.js} +1 -1
  322. package/server/{providers-DV7ec8l7.js → providers-evXhiQeg.js} +7 -7
  323. package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
  324. package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
  325. package/server/public/assets/{dist-BWR4qFiV.js → dist-CxAOHbil.js} +1 -1
  326. package/server/public/assets/{dist-DEmlBBNQ.js → dist-DqDRYW6P.js} +3 -3
  327. package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
  328. package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
  329. package/server/public/assets/index-Cc7cnFC4.css +1 -0
  330. package/server/public/assets/index-K0hAYCgV.js +807 -0
  331. package/server/public/assets/{linear-C9zFQpkX.js → linear-B4cuEFmO.js} +1 -1
  332. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
  333. package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
  334. package/server/public/assets/{prod-B1jCQihw.js → prod-CN2nHBvX.js} +4 -4
  335. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
  336. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
  337. package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
  338. package/server/public/index.html +2 -2
  339. package/server/{pull-requests--Ib2jTgy.js → pull-requests-Cv7LxzUN.js} +1 -1
  340. package/server/{pull-requests-CXIhdCYD.js → pull-requests-DHWiKxo7.js} +19 -10
  341. package/server/{queries-6d7Cdtm7.js → queries-DHJm7bTd.js} +1134 -203
  342. package/server/{rally-B708-nZn.js → rally-B71M9f4o.js} +3 -3
  343. package/server/rally-YDjU513q.js +3 -0
  344. package/server/{rally-api-yjQ0TfHd.js → rally-api-D5uXN08-.js} +1 -1
  345. package/server/{rally-api-nY0ZANw3.js → rally-api-Dkqmok65.js} +2 -2
  346. package/server/{rally-client-B1EJhfV0.js → rally-client-Bfqm6XI4.js} +4 -4
  347. package/server/{rally-client-CULK2XAY.js → rally-client-CxsA6ExK.js} +1 -1
  348. package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
  349. package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
  350. package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-0EEYReVZ.js} +36 -36
  351. package/server/rebuild-stack-qeRqHZxH.js +4 -0
  352. package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-BbYFsqLa.js} +7 -6
  353. package/server/record-CtroO946.js +3 -0
  354. package/server/record-update-DH6dLJID.js +3 -0
  355. package/server/{record-update-Dq0t2uBG.js → record-update-Z0QCxmMp.js} +124 -34
  356. package/server/{recovery-trip-BJtIQuag.js → recovery-trip-eJe26h-f.js} +2 -2
  357. package/server/{release-engine-DZpmGGzb.js → release-engine-lPUp-MTd.js} +5 -5
  358. package/server/{release-set-hnXd_kga.js → release-set-BwGeyZKX.js} +3 -3
  359. package/server/{remote-Br-ZWVIP.js → remote-BCd02Es1.js} +3 -3
  360. package/server/{remote-4tiENDaI.js → remote-CVGUhXMV.js} +3 -3
  361. package/server/{remote-agents-CRCg1L4H.js → remote-agents-C1bssi41.js} +2 -2
  362. package/server/{remote-agents-nmty1mLu.js → remote-agents-C_VxssLU.js} +300 -46
  363. package/server/{remote-completion-BbWNd10K.js → remote-completion-DAB0P706.js} +12 -12
  364. package/server/resume-u9byntrq.js +3 -0
  365. package/server/{review-agent-DJRO8EG8.js → review-agent-CD4RCI0Y.js} +1 -1
  366. package/server/{review-agent-sKkE1FEL.js → review-agent-CHhI66UP.js} +61 -44
  367. package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-DSMRIfuJ.js} +7 -6
  368. package/server/{review-context-BgX3lcCx.js → review-context-oFuBbiEE.js} +69 -25
  369. package/server/{in-flight-guard-aQ1IxeI3.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
  370. package/server/review-status-BZH8h-6W.js +3 -0
  371. package/server/review-status-emit-CUExtHd5.js +50 -0
  372. package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-QV_hQkgS.js} +4 -4
  373. package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
  374. package/server/review-status-source-ylw5QZUR.js +3 -0
  375. package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-483sujRo.js} +10 -5
  376. package/server/{review-status-sync-To3-iS-N.js → review-status-sync-NaWvI9Xf.js} +1 -1
  377. package/server/review-status-yljtTd-q.js +7521 -0
  378. package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-BPDn4li_.js} +1 -1
  379. package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CELeUinh.js} +48 -8
  380. package/server/{rollup-WA0VD-Rr.js → rollup-DTNvelz9.js} +8 -8
  381. package/server/{rollup-B53Y81xK.js → rollup-DYZfq1c4.js} +1 -1
  382. package/server/{scanner-D2743cp8.js → scanner-CV35oSn4.js} +42 -14
  383. package/server/{sequence-io-Cg0zYj_E.js → sequence-io-DF_8iuhV.js} +4 -4
  384. package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-B2WeCtGi.js} +5 -5
  385. package/server/server.js +3899 -672
  386. package/server/{service-DCpB_SGd.js → service-Br9rpBNA.js} +83 -65
  387. package/server/{session-fork-BQ8_6H32.js → session-fork-D0LY152N.js} +2 -2
  388. package/server/{session-history-CVZDpS3c.js → session-history-BUyK29eq.js} +4 -4
  389. package/server/{settings-BZ5m1UCl.js → settings-Bse1Pdcj.js} +3 -3
  390. package/server/settings-CdvIF84R.js +2 -0
  391. package/server/{settings-ylxwqwQG.js → settings-CvVGqNEs.js} +3 -2
  392. package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BWLa8ODz.js} +2 -2
  393. package/server/{shadow-state-Dh-HzF2J.js → shadow-state-B4fpKxOO.js} +2 -2
  394. package/server/{shadow-state-C2_epgx2.js → shadow-state-FV6PHfEW.js} +1 -1
  395. package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-D7asqxOZ.js} +2 -2
  396. package/server/{ship-log-ClSMIzZX.js → ship-log-xplJ8t75.js} +1 -1
  397. package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CPp2Ykf6.js} +1 -1
  398. package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-D3U_79f-.js} +8 -7
  399. package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-1nFi3gfk.js} +1 -1
  400. package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DGfZ5B8D.js} +30 -23
  401. package/server/{specialist-completion-BXhav38U.js → specialist-completion-Br48eiDP.js} +1 -1
  402. package/server/{specialist-context-DtrYvGJ-.js → specialist-context-cVbGnTa3.js} +5 -5
  403. package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
  404. package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-Cl5-hqT8.js} +3 -3
  405. package/server/{specialists-JVO00bs7.js → specialists-CNfYO3G2.js} +1634 -457
  406. package/server/{specialists-DyFeedjn.js → specialists-Cicieuzu.js} +21 -19
  407. package/server/{specialists-D5fRZXmN.js → specialists-JHsdU3pA.js} +1 -1
  408. package/server/{specialists-DVj0hvaL.js → specialists-Tdezg_6N.js} +1 -1
  409. package/server/specs-Bt7WJDoC.js +3 -0
  410. package/server/src-CRmCHlma.js +11408 -0
  411. package/server/{src-CG9mCkP6.js → src-Ck028hjO.js} +6 -6
  412. package/server/{src-CMTQGyCK.js → src-UWcGe0Ix.js} +5 -5
  413. package/server/stack-health-CJLMrLBl.js +3 -0
  414. package/server/{stack-health-puygdaMd.js → stack-health-DqSqx0zv.js} +68 -12
  415. package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-CYFOUNlT.js} +4 -4
  416. package/server/{staleness-Cbl_w4Bw.js → staleness-BQ-0gMYK.js} +1 -1
  417. package/server/{staleness-Bpy41ngS.js → staleness-D47CUJok.js} +1 -1
  418. package/server/{state-home-CIGjwNfJ.js → state-home-BYV7qZTW.js} +2 -2
  419. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
  420. package/server/{state-migrate-Dkzaxvny.js → state-migrate-CvvBtS0Y.js} +4 -4
  421. package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-Wt0UVvu1.js} +1 -1
  422. package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-mkLC6G_t.js} +360 -26
  423. package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
  424. package/server/{summary-fork-D8bXjCr7.js → summary-fork-CD7GOts0.js} +2 -2
  425. package/server/{summary-fork-DHhJIsAL.js → summary-fork-xiXBnWG9.js} +78 -12
  426. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-B5SbvDx2.js} +2 -41
  427. package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
  428. package/server/supervisor/pty-supervisor.js +49 -2
  429. package/server/supervisor/pty-token-B7lp0ElT.js +43 -0
  430. package/server/{supervisor-BO-Zk_h-.js → supervisor-DL788vos.js} +3 -3
  431. package/server/supervisor-UWiQNK-y.js +2 -0
  432. package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-BV14DF5N.js} +3 -3
  433. package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-pdWG6ZQs.js} +56 -29
  434. package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-l2F4_zim.js} +15 -16
  435. package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-qakFIIGz.js} +6 -6
  436. package/server/{test-verdict-CmUBK5cT.js → test-verdict-BJYDggMm.js} +1 -1
  437. package/server/{test-verdict-DFjjIHR5.js → test-verdict-Gw-btEfb.js} +1 -1
  438. package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BKOYB616.js} +1 -1
  439. package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-CBaWkV9k.js} +2 -2
  440. package/server/{tmux-ftABRAmc.js → tmux-B1Wbxz5o.js} +3 -3
  441. package/server/{tmux-DoThH6aj.js → tmux-DQ6jB76i.js} +1 -1
  442. package/server/tmux-dedup-DbN6MGzM.js +892 -0
  443. package/server/{token-CsOhvw42.js → token-Cxbk023d.js} +2 -2
  444. package/server/{token-util-CTmczIfW.js → token-util-CLq2MmQt.js} +1 -1
  445. package/server/token-util-zlz9U0ki.js +3 -0
  446. package/server/{tracker-config-B4itFzDo.js → tracker-config-DZ8Zn2nQ.js} +2 -2
  447. package/server/{tracker-utils-tnxxqROg.js → tracker-utils-L0FKtjq2.js} +3 -3
  448. package/server/{traefik-connect-m73vGebA.js → traefik-connect-bNX6jKkb.js} +1 -1
  449. package/server/{tunnel-B2vxjx_b.js → tunnel-BAm1XgjG.js} +3 -3
  450. package/server/{tunnel-Cgj-IGIl.js → tunnel-CjSnHdTc.js} +1 -1
  451. package/server/{types-BBNjPcqU.js → types-q67TYYg5.js} +1 -1
  452. package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
  453. package/server/uat-train-Cu-4nvbf.js +2 -0
  454. package/server/uat-train-D5UjcyAa.js +0 -0
  455. package/server/validate-Cxsx5Uz1.js +179 -0
  456. package/server/{validation-CIi6pnI2.js → validation-DEaTZafj.js} +1 -1
  457. package/server/{validation-B5JxoPUS.js → validation-VZgJxmqc.js} +4 -4
  458. package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-C85cRTc_.js} +1 -1
  459. package/server/{verification-artifact-BcnIbigL.js → verification-artifact-g3yuxQDL.js} +1 -1
  460. package/server/{verification-runner-CDj4lD4t.js → verification-runner-DlZI8yhw.js} +1 -1
  461. package/server/{verification-runner-Br0S_Ous.js → verification-runner-KDZIsBj4.js} +114 -107
  462. package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-Jr94BF3Y.js} +1 -1
  463. package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-C-vuP3_J.js} +20 -9
  464. package/server/workflows-CHrx_hcW.js +2 -0
  465. package/server/{workflows-C9WmILql.js → workflows-D0oip4eV.js} +161 -78
  466. package/server/{workspace-DuUdndHe.js → workspace-BqFg__wH.js} +1 -1
  467. package/server/{workspace-BVl4rihN.js → workspace-C0fH3aek.js} +3 -3
  468. package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
  469. package/server/workspace-anchor-drift-CZKofakh.js +224 -0
  470. package/server/{workspace-config-cEGcO6UT.js → workspace-config-B123aZl-.js} +1 -1
  471. package/server/workspace-manager-CDTKjjdU.js +3 -0
  472. package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CwO-Hek7.js} +206 -116
  473. package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-CQv00QwK.js} +2 -2
  474. package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-D4M8BM4W.js} +1 -1
  475. package/server/{workspaces-hWvy9eKs.js → workspaces-j1e_6aAT.js} +736 -290
  476. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  477. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  478. package/sync-sources/hooks/record-cost-event.js +6 -4
  479. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  480. package/sync-sources/skills/okf/README.md +11 -3
  481. package/sync-sources/skills/okf/SKILL.md +12 -1
  482. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  483. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  484. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  485. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  486. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  487. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  488. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  489. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  490. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  491. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  492. package/sync-sources/skills/pan-start/SKILL.md +4 -0
  493. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  494. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  495. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  496. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  497. package/server/activity-logger-OEUBdfZ8.js +0 -3
  498. package/server/agent-state-Bg0lhqwj.js +0 -3
  499. package/server/agents-FlIgQ3ql.js +0 -3
  500. package/server/archive-planning-zkJb3BeM.js +0 -3
  501. package/server/cli-BsVIHwzC.js +0 -3
  502. package/server/context-layers-B3Nt58jl.js +0 -4
  503. package/server/context-layers-ZYFcWiyc.js +0 -165
  504. package/server/conversation-service-Up7FEzIC.js +0 -3
  505. package/server/deacon-DYSEJb48.js +0 -4
  506. package/server/deacon-swarm-9jRLS5Ke.js +0 -2
  507. package/server/deploy-window-CM6W1-c6.js +0 -3
  508. package/server/dist-Bd3vn0Hw.js +0 -3
  509. package/server/flywheel-DMCUzDWg.js +0 -2
  510. package/server/flywheel-DSSpWmqF.js +0 -522
  511. package/server/flywheel-DcBkQvgE.js +0 -207
  512. package/server/flywheel-merge-order-C-6zRLvM.js +0 -2
  513. package/server/flywheel-merge-order-DxbQKE1d.js +0 -244
  514. package/server/forge-B-ZWyTRm.js +0 -2
  515. package/server/forge-Ch9gCFod.js +0 -270
  516. package/server/git-utils-Dry_Ka_D.js +0 -3
  517. package/server/github-pr-lookup-BRbDW-qk.js +0 -44
  518. package/server/hume-B_DbflNM.js +0 -3
  519. package/server/inspect-agent-ch-F-5Ci.js +0 -2
  520. package/server/launcher-generator-CHVm7bGT.js +0 -379
  521. package/server/layers-DzxSTGNA.js +0 -93
  522. package/server/merge-blockers-BsFjGrQ8.js +0 -41
  523. package/server/merge-ops-DlB1IM0Y.js +0 -2
  524. package/server/merge-set-DLz0MkGT.js +0 -139
  525. package/server/merge-set-DnSYdBEp.js +0 -3
  526. package/server/merge-sync-SSv3E-pl.js +0 -3
  527. package/server/merge-verification-CSizH3HY.js +0 -124
  528. package/server/projects-9SkRpES9.js +0 -3
  529. package/server/public/assets/index-CUr1xv8w.css +0 -1
  530. package/server/public/assets/index-CsSuZQBI.js +0 -802
  531. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
  532. package/server/rally-njs_mJrt.js +0 -3
  533. package/server/rebuild-stack-kA7XngID.js +0 -3
  534. package/server/record-t6V-3Dcj.js +0 -3
  535. package/server/record-update-DACtKh6_.js +0 -3
  536. package/server/resume-CcKqnTvE.js +0 -3
  537. package/server/review-status-A7quS5KJ.js +0 -1454
  538. package/server/review-status-C6n6-9f_.js +0 -3
  539. package/server/settings-D0OSwos5.js +0 -2
  540. package/server/specs-nN45DG2X.js +0 -3
  541. package/server/src-U7_kTPEE.js +0 -4733
  542. package/server/stack-health-Df0YEZKa.js +0 -3
  543. package/server/supervisor-BPy-o1A8.js +0 -2
  544. package/server/token-util-DrHg8abn.js +0 -3
  545. package/server/tracker-utils-BePq_oj-.js +0 -3
  546. package/server/uat-train-CuEn0t9M.js +0 -2152
  547. package/server/uat-train-cKfM-_WW.js +0 -2
  548. package/server/workflows-D90rMOya.js +0 -2
  549. package/server/workspace-manager-ZTdJAy9M.js +0 -3
@@ -0,0 +1,58 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-CQ1Lo6LA.js";
3
+ import { Effect } from "effect";
4
+ import { execFile } from "node:child_process";
5
+ import { promisify } from "node:util";
6
+ //#region ../../lib/github-pr-lookup.ts
7
+ function githubPrLookupSource() {
8
+ return isGitHubAppConfigured() ? "GitHub App PR lookup" : "gh pr list";
9
+ }
10
+ async function lookupPullRequestForBranch(owner, repo, branchName) {
11
+ if (isGitHubAppConfigured()) {
12
+ const pr = (await Effect.runPromise(listPullRequestsForHead(owner, repo, branchName, "all")))[0];
13
+ if (!pr) return null;
14
+ return {
15
+ number: pr.number,
16
+ state: pr.merged ? "MERGED" : pr.state.toUpperCase(),
17
+ mergedAt: pr.mergedAt
18
+ };
19
+ }
20
+ const { stdout } = await execFileAsync("gh", [
21
+ "pr",
22
+ "list",
23
+ "--repo",
24
+ `${owner}/${repo}`,
25
+ "--head",
26
+ branchName,
27
+ "--state",
28
+ "all",
29
+ "--json",
30
+ "number,state,mergedAt",
31
+ "--limit",
32
+ "1"
33
+ ], {
34
+ encoding: "utf-8",
35
+ timeout: 15e3
36
+ });
37
+ const trimmed = stdout.trim();
38
+ if (!trimmed) return null;
39
+ const [pr] = JSON.parse(trimmed);
40
+ if (!pr || !Number.isFinite(pr.number)) return null;
41
+ return {
42
+ number: pr.number,
43
+ state: typeof pr.state === "string" ? pr.state.toUpperCase() : "CLOSED",
44
+ mergedAt: typeof pr.mergedAt === "string" ? pr.mergedAt : null
45
+ };
46
+ }
47
+ async function lookupPullRequestNumberForBranch(owner, repo, branchName) {
48
+ return (await lookupPullRequestForBranch(owner, repo, branchName))?.number ?? null;
49
+ }
50
+ var execFileAsync;
51
+ var init_github_pr_lookup = __esmMin((() => {
52
+ init_github_app();
53
+ execFileAsync = promisify(execFile);
54
+ }));
55
+ //#endregion
56
+ export { lookupPullRequestNumberForBranch as i, init_github_pr_lookup as n, lookupPullRequestForBranch as r, githubPrLookupSource as t };
57
+
58
+ //# sourceMappingURL=github-pr-lookup-BDq6Wznz.js.map
@@ -1,4 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
2
3
  import { delimiter, dirname, isAbsolute, join, resolve } from "node:path";
3
4
  import { homedir } from "node:os";
4
5
  import { constants } from "node:fs";
@@ -28,6 +29,15 @@ async function resolveExecutable(binary, options = {}) {
28
29
  const pathValue = options.pathValue ?? process.env["PATH"] ?? "";
29
30
  const accessExecutable = options.accessExecutable ?? ((path) => access(path, constants.X_OK));
30
31
  const runCommand = options.runCommand ?? defaultRunCommand;
32
+ if (options.executablePath !== void 0) {
33
+ if (!isAbsolute(options.executablePath)) throw new Error(`Configured executable path must be absolute: ${options.executablePath}`);
34
+ try {
35
+ await accessExecutable(options.executablePath);
36
+ return options.executablePath;
37
+ } catch {
38
+ return null;
39
+ }
40
+ }
31
41
  const pathMatch = await firstExecutable(pathValue.split(delimiter).filter(Boolean).map((directory) => isAbsolute(directory) ? directory : resolve(cwd, directory)), binary, accessExecutable);
32
42
  if (pathMatch) return pathMatch;
33
43
  const fixedMatch = await firstExecutable([
@@ -60,14 +70,28 @@ async function resolveExecutable(binary, options = {}) {
60
70
  function harnessBinaryName(harness) {
61
71
  return HARNESS_BINARY_BY_RUNTIME[harness];
62
72
  }
73
+ function configuredHarnessBinaryPath(harness) {
74
+ if (harness !== "acp") return void 0;
75
+ return loadConfigSync().config.acp?.kimi?.binaryPath;
76
+ }
77
+ function withConfiguredExecutable(harness, options = {}) {
78
+ if (options.executablePath !== void 0) return options;
79
+ const executablePath = configuredHarnessBinaryPath(harness);
80
+ return executablePath === void 0 ? options : {
81
+ ...options,
82
+ executablePath
83
+ };
84
+ }
63
85
  async function resolveHarnessBinary(harness, options) {
64
- return resolveExecutable(harnessBinaryName(harness), options);
86
+ return resolveExecutable(harnessBinaryName(harness), withConfiguredExecutable(harness, options));
65
87
  }
66
88
  async function requireHarnessBinary(harness, options) {
67
89
  const binary = harnessBinaryName(harness);
68
- const resolved = await resolveExecutable(binary, options);
90
+ const effectiveOptions = withConfiguredExecutable(harness, options);
91
+ const resolved = await resolveExecutable(binary, effectiveOptions);
69
92
  if (resolved) return resolved;
70
- const harnessName = harness === "claude-code" ? "Claude Code" : harness === "ohmypi" ? "OhMyPi" : "Codex CLI";
93
+ const harnessName = harness === "claude-code" ? "Claude Code" : harness === "ohmypi" ? "OhMyPi" : harness === "codex" ? "Codex CLI" : "Kimi Code CLI";
94
+ if (effectiveOptions.executablePath) throw new Error(`${harnessName} configured executable "${effectiveOptions.executablePath}" was not found or is not executable. Fix its configured path, then restart Overdeck. No terminal session was created.`);
71
95
  throw new Error(`${harnessName} executable "${binary}" was not found. Install ${harnessName} or add its installation directory to PATH, then restart Overdeck. No terminal session was created.`);
72
96
  }
73
97
  function shellQuote(value) {
@@ -85,12 +109,14 @@ async function prepareHarnessLaunch(harness, options) {
85
109
  }
86
110
  var execFileAsync, SAFE_BINARY_NAME, HARNESS_BINARY_BY_RUNTIME, defaultRunCommand;
87
111
  var init_harness_binary = __esmMin((() => {
112
+ init_config_yaml();
88
113
  execFileAsync = promisify(execFile);
89
114
  SAFE_BINARY_NAME = /^[A-Za-z0-9._+-]+$/;
90
115
  HARNESS_BINARY_BY_RUNTIME = {
91
116
  "claude-code": "claude",
92
117
  ohmypi: "omp",
93
- codex: "codex"
118
+ codex: "codex",
119
+ acp: "kimi"
94
120
  };
95
121
  defaultRunCommand = async (command, args) => {
96
122
  const { stdout } = await execFileAsync(command, args, {
@@ -101,6 +127,6 @@ var init_harness_binary = __esmMin((() => {
101
127
  };
102
128
  }));
103
129
  //#endregion
104
- export { resolveHarnessBinary as a, resolveExecutable as i, init_harness_binary as n, prepareHarnessLaunch as r, harnessBinaryName as t };
130
+ export { resolveExecutable as a, prepareHarnessLaunch as i, harnessBinaryName as n, resolveHarnessBinary as o, init_harness_binary as r, configuredHarnessBinaryPath as t };
105
131
 
106
- //# sourceMappingURL=harness-binary-CVio2m-u.js.map
132
+ //# sourceMappingURL=harness-binary-DqkftwTb.js.map
@@ -1,17 +1,22 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { A as canUseHarnessSync, H as init_providers, M as init_harness_policy, R as getBuiltInDefaultHarness, V as getProviderForModelSync, f as loadConfigSync, j as canUseModelWithAuthSync, t as init_config_yaml } from "./config-yaml-DvyMuOle.js";
3
- import { a as resolveHarnessBinary, n as init_harness_binary, t as harnessBinaryName } from "./harness-binary-CVio2m-u.js";
2
+ import { A as canUseHarnessSync, H as init_providers, M as init_harness_policy, R as getBuiltInDefaultHarness, V as getProviderForModelSync, f as loadConfigSync, j as canUseModelWithAuthSync, t as init_config_yaml } from "./config-yaml-CmOPzmBb.js";
3
+ import { n as harnessBinaryName, o as resolveHarnessBinary, r as init_harness_binary, t as configuredHarnessBinaryPath } from "./harness-binary-DqkftwTb.js";
4
4
  //#region ../../lib/harness-resolve.ts
5
5
  async function getProviderAuthModeForModel(model) {
6
- const { getProviderAuthMode } = await import("./agents-FlIgQ3ql.js");
6
+ const { getProviderAuthMode } = await import("./agents-BKKkxKgK.js");
7
7
  return getProviderAuthMode(model);
8
8
  }
9
+ function assertHarnessProviderSupported(harness, provider) {
10
+ if (harness === "acp" && provider !== "kimi") throw new HarnessResolutionError(`ACP provider ${provider} is not supported; Kimi is the only ACP provider in v1.`);
11
+ }
9
12
  async function hasHarnessBinary(harness) {
10
13
  if (harness === "claude-code") return true;
11
- const cached = harnessAvailabilityCache.get(harness);
14
+ const executablePath = configuredHarnessBinaryPath(harness);
15
+ const cacheKey = `${harness}\0${executablePath ?? ""}`;
16
+ const cached = harnessAvailabilityCache.get(cacheKey);
12
17
  if (cached) return cached;
13
- const check = resolveHarnessBinary(harness).then((resolved) => resolved !== null);
14
- harnessAvailabilityCache.set(harness, check);
18
+ const check = resolveHarnessBinary(harness, executablePath ? { executablePath } : void 0).then((resolved) => resolved !== null);
19
+ harnessAvailabilityCache.set(cacheKey, check);
15
20
  return check;
16
21
  }
17
22
  function logBuiltInDefaultNotice(provider, harness) {
@@ -37,9 +42,13 @@ async function resolveHarness(input) {
37
42
  console.warn(`harness ${winner} denied for ${provider}: ${decision.reason ?? "policy denied"} — falling back to native claude-code`);
38
43
  return "claude-code";
39
44
  }
45
+ assertHarnessProviderSupported(winner, provider);
40
46
  if (!await hasHarnessBinary(winner)) {
41
- const binary = harnessBinaryName(winner);
42
- if (builtInHarness && builtInHarness !== "claude-code") throw new HarnessResolutionError(`Harness ${winner} (provider default for ${input.model}) has no installed ${binary} binary at spawn — refusing to silently fall back to claude-code. Install ${binary} (check its PATH) and retry.`);
47
+ const binary = configuredHarnessBinaryPath(winner) ?? harnessBinaryName(winner);
48
+ if (winner === "acp" || builtInHarness && builtInHarness !== "claude-code") {
49
+ const remediation = configuredHarnessBinaryPath(winner) ? `Fix the configured executable path ${binary} and retry.` : `Install ${binary} (check its PATH) and retry.`;
50
+ throw new HarnessResolutionError(`Harness ${winner} for ${input.model} has no installed ${binary} binary at spawn — refusing to silently fall back to claude-code. ${remediation}`);
51
+ }
43
52
  console.warn(`harness ${winner} requested for ${provider}, but ${binary} is not installed — falling back to native claude-code`);
44
53
  return "claude-code";
45
54
  }
@@ -63,4 +72,4 @@ var init_harness_resolve = __esmMin((() => {
63
72
  //#endregion
64
73
  export { resolveHarness as n, init_harness_resolve as t };
65
74
 
66
- //# sourceMappingURL=harness-resolve-qHJBhy3Z.js.map
75
+ //# sourceMappingURL=harness-resolve-CqMqM1Mb.js.map
@@ -1,4 +1,4 @@
1
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CzaSOgul.js";
1
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BjuxvjdS.js";
2
2
  //#region ../../lib/overdeck/health-events.ts
3
3
  init_infra();
4
4
  function parseMetadata(row) {
@@ -66,4 +66,4 @@ function getHealthHistory(agentId, startTime, endTime) {
66
66
  //#endregion
67
67
  export { getLatestHealthEvent as n, writeHealthEvent as r, getHealthHistory as t };
68
68
 
69
- //# sourceMappingURL=health-events-C9B8y1Hm.js.map
69
+ //# sourceMappingURL=health-events-CazRxJUS.js.map
@@ -1,2 +1,2 @@
1
- import { n as getLatestHealthEvent, r as writeHealthEvent, t as getHealthHistory } from "./health-events-C9B8y1Hm.js";
1
+ import { n as getLatestHealthEvent, r as writeHealthEvent, t as getHealthHistory } from "./health-events-CazRxJUS.js";
2
2
  export { getHealthHistory, getLatestHealthEvent, writeHealthEvent };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Vr as init_paths, hr as AGENTS_DIR, ir as FsError, mr as init_errors } from "./config-yaml-DvyMuOle.js";
2
+ import { Fr as init_errors, Ir as AGENTS_DIR, Tr as FsError, ci as init_paths } from "./config-yaml-CmOPzmBb.js";
3
3
  import { Effect } from "effect";
4
4
  import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from "fs";
5
5
  import { join } from "path";
@@ -294,4 +294,4 @@ var init_hooks = __esmMin((() => {
294
294
  //#endregion
295
295
  export { pushToHookSync as _, collectMail as a, sendMail as b, generateFixedPointPromptSync as c, initHook as d, initHookSync as f, pushToHook as g, popFromHookSync as h, clearHookSync as i, getHook as l, popFromHook as m, checkHookSync as n, collectMailSync as o, init_hooks as p, clearHook as r, generateFixedPointPrompt as s, checkHook as t, getHookSync as u, reorderHookItems as v, sendMailSync as x, reorderHookItemsSync as y };
296
296
 
297
- //# sourceMappingURL=hooks-DUXw8A0-.js.map
297
+ //# sourceMappingURL=hooks-BO3QT1sn.js.map
@@ -1,3 +1,3 @@
1
- import { _ as pushToHookSync, a as collectMail, b as sendMail, c as generateFixedPointPromptSync, d as initHook, f as initHookSync, g as pushToHook, h as popFromHookSync, i as clearHookSync, l as getHook, m as popFromHook, n as checkHookSync, o as collectMailSync, p as init_hooks, r as clearHook, s as generateFixedPointPrompt, t as checkHook, u as getHookSync, v as reorderHookItems, x as sendMailSync, y as reorderHookItemsSync } from "./hooks-DUXw8A0-.js";
1
+ import { _ as pushToHookSync, a as collectMail, b as sendMail, c as generateFixedPointPromptSync, d as initHook, f as initHookSync, g as pushToHook, h as popFromHookSync, i as clearHookSync, l as getHook, m as popFromHook, n as checkHookSync, o as collectMailSync, p as init_hooks, r as clearHook, s as generateFixedPointPrompt, t as checkHook, u as getHookSync, v as reorderHookItems, x as sendMailSync, y as reorderHookItemsSync } from "./hooks-BO3QT1sn.js";
2
2
  init_hooks();
3
3
  export { checkHook, checkHookSync, clearHook, clearHookSync, collectMail, collectMailSync, generateFixedPointPrompt, generateFixedPointPromptSync, getHook, getHookSync, initHook, initHookSync, popFromHook, popFromHookSync, pushToHook, pushToHookSync, reorderHookItems, reorderHookItemsSync, sendMail, sendMailSync };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-cEGcO6UT.js";
2
+ import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-B123aZl-.js";
3
3
  import { Data, Effect } from "effect";
4
4
  //#region ../../lib/hume.ts
5
5
  /**
@@ -189,4 +189,4 @@ var init_hume = __esmMin((() => {
189
189
  //#endregion
190
190
  export { init_hume as i, createHumeConfig as n, deleteHumeConfig as r, HumeApiError as t };
191
191
 
192
- //# sourceMappingURL=hume-BEq0bUDg.js.map
192
+ //# sourceMappingURL=hume-CDYJxqx-.js.map
@@ -0,0 +1,3 @@
1
+ import { i as init_hume, r as deleteHumeConfig } from "./hume-CDYJxqx-.js";
2
+ init_hume();
3
+ export { deleteHumeConfig };
@@ -1,2 +1,2 @@
1
- import { t as handleAgentLifecycleEventForIdleStack } from "./idle-stack-reaper-w1ISSlhs.js";
1
+ import { t as handleAgentLifecycleEventForIdleStack } from "./idle-stack-reaper-CnGx_PO_.js";
2
2
  export { handleAgentLifecycleEventForIdleStack };
@@ -1,5 +1,5 @@
1
- import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-DDlOIAML.js";
2
- import { M as listSessionNames, w as init_tmux } from "./tmux-ftABRAmc.js";
1
+ import { o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
2
+ import { M as listSessionNames, w as init_tmux } from "./tmux-B1Wbxz5o.js";
3
3
  import { Effect } from "effect";
4
4
  import { exec } from "child_process";
5
5
  import { promisify } from "util";
@@ -36,8 +36,21 @@ const execAsync = promisify(exec);
36
36
  */
37
37
  /** Idle duration before a workspace's UI stack is reaped. */
38
38
  const GRACE_MS = 600 * 1e3;
39
+ /**
40
+ * Idle duration before a workspace's FULL stack is reaped (all services except
41
+ * the dev attach target). The 10-minute UI tier only matches the overdeck
42
+ * project's own server/frontend naming, so other projects' stacks (postgres,
43
+ * redis, api/JVM, vite) lived forever — 35 myn-feature containers were resident
44
+ * for agents stopped 17h+, and that idle RSS feeds the memory-governor pressure
45
+ * that forces scheduler yields (MIN-858/MIN-891 yielded under it, 2026-07-25).
46
+ */
47
+ const FULL_STACK_GRACE_MS = 7200 * 1e3;
39
48
  /** `overdeck-feature-<issue>-server-1` / `-frontend-1`. */
40
49
  const UI_CONTAINER_RE = /^overdeck-feature-([a-z0-9]+-\d+)-(server|frontend)-1$/i;
50
+ /** Compose project names end in `feature-<issue>` by construction (stack-health). */
51
+ const FEATURE_PROJECT_RE = /(?:^|[-_])feature-([a-z0-9]+-\d+)$/i;
52
+ /** Never stop the `dev` container — it is the operator's VS Code attach target. */
53
+ const DEV_CONTAINER_RE = /-dev-1$/i;
41
54
  /**
42
55
  * issueLower -> epoch ms first observed idle. Module-level so the grace clock
43
56
  * survives across patrol cycles within the deacon process. Tolerates transient
@@ -63,13 +76,34 @@ function defaultDeps() {
63
76
  const { stdout } = await execAsync(`docker ps --format '{{.Names}}'`, { timeout: 15e3 });
64
77
  return stdout.split("\n").map((s) => s.trim()).filter(Boolean);
65
78
  },
79
+ listComposeContainers: async () => {
80
+ const { stdout } = await execAsync(`docker ps --format '{{.Names}}\t{{json .Labels}}'`, { timeout: 15e3 });
81
+ const out = [];
82
+ for (const line of stdout.split("\n")) {
83
+ const tab = line.indexOf(" ");
84
+ if (tab <= 0) continue;
85
+ const name = line.slice(0, tab).trim();
86
+ if (!name) continue;
87
+ try {
88
+ const labels = JSON.parse(line.slice(tab + 1));
89
+ out.push({
90
+ name,
91
+ composeProject: labels["com.docker.compose.project"]
92
+ });
93
+ } catch {
94
+ out.push({ name });
95
+ }
96
+ }
97
+ return out;
98
+ },
66
99
  listSessions: () => Effect.runPromise(listSessionNames()),
67
100
  stopContainers: async (names) => {
68
101
  if (names.length === 0) return;
69
102
  await execAsync(`docker stop ${names.map((n) => `"${n}"`).join(" ")}`, { timeout: 6e4 });
70
103
  },
71
104
  now: () => Date.now(),
72
- graceMs: GRACE_MS
105
+ graceMs: GRACE_MS,
106
+ fullStackGraceMs: FULL_STACK_GRACE_MS
73
107
  };
74
108
  }
75
109
  async function reconcileIdleWorkspaceStacks(deps = {}) {
@@ -94,8 +128,10 @@ async function reconcileIdleWorkspaceStacks(deps = {}) {
94
128
  arr.push(name);
95
129
  byIssue.set(issueLower, arr);
96
130
  }
97
- for (const issue of [...firstIdleAt.keys()]) if (!byIssue.has(issue)) firstIdleAt.delete(issue);
98
- if (byIssue.size === 0) return actions;
131
+ for (const issue of [...firstIdleAt.keys()]) {
132
+ if (issue.startsWith("full:")) continue;
133
+ if (!byIssue.has(issue)) firstIdleAt.delete(issue);
134
+ }
99
135
  const sessionBlob = (await d.listSessions().catch(() => [])).join("\n").toLowerCase();
100
136
  const nowMs = d.now();
101
137
  for (const [issueLower, names] of byIssue) {
@@ -127,9 +163,66 @@ async function reconcileIdleWorkspaceStacks(deps = {}) {
127
163
  console.warn(`[deacon] idle-stack reaper: failed to stop ${issueLower} UI containers: ${err?.message ?? err}`);
128
164
  }
129
165
  }
166
+ let composeContainers = [];
167
+ try {
168
+ composeContainers = await d.listComposeContainers();
169
+ } catch {
170
+ composeContainers = [];
171
+ }
172
+ const byProject = /* @__PURE__ */ new Map();
173
+ for (const c of composeContainers) {
174
+ if (!c.composeProject) continue;
175
+ const m = c.composeProject.match(FEATURE_PROJECT_RE);
176
+ if (!m) continue;
177
+ const entry = byProject.get(c.composeProject) ?? {
178
+ issueLower: m[1].toLowerCase(),
179
+ names: []
180
+ };
181
+ entry.names.push(c.name);
182
+ byProject.set(c.composeProject, entry);
183
+ }
184
+ for (const key of [...firstIdleAt.keys()]) {
185
+ if (!key.startsWith("full:")) continue;
186
+ if (!byProject.has(key.slice(5))) firstIdleAt.delete(key);
187
+ }
188
+ for (const [project, { issueLower, names }] of byProject) {
189
+ const clockKey = `full:${project}`;
190
+ if (sessionBlob.includes(issueLower)) {
191
+ firstIdleAt.delete(clockKey);
192
+ continue;
193
+ }
194
+ const since = firstIdleAt.get(clockKey);
195
+ if (since === void 0) {
196
+ firstIdleAt.set(clockKey, nowMs);
197
+ continue;
198
+ }
199
+ if (nowMs - since < d.fullStackGraceMs) continue;
200
+ const targets = names.filter((n) => !DEV_CONTAINER_RE.test(n));
201
+ if (targets.length === 0) {
202
+ firstIdleAt.delete(clockKey);
203
+ continue;
204
+ }
205
+ try {
206
+ await d.stopContainers(targets);
207
+ firstIdleAt.delete(clockKey);
208
+ const issueId = issueLower.toUpperCase();
209
+ const idleMin = Math.round((nowMs - since) / 6e4);
210
+ const action = `Reaped idle workspace stack for ${issueId} — stopped ${targets.length}/${names.length} container(s) in ${project} after ${idleMin}m idle (no agent, no tmux)`;
211
+ actions.push(action);
212
+ console.log(`[deacon] ${action}`);
213
+ emitActivityEntrySync({
214
+ source: "cloister",
215
+ level: "info",
216
+ issueId,
217
+ message: `[deacon] reaped idle workspace stack for ${issueId} — ${targets.length} container(s) stopped, dev attach target preserved`
218
+ });
219
+ } catch (err) {
220
+ console.warn(`[deacon] idle-stack reaper: failed to stop ${project} containers: ${err?.message ?? err}`);
221
+ }
222
+ }
130
223
  return actions;
131
224
  }
132
225
  //#endregion
133
226
  export { reconcileIdleWorkspaceStacks as n, handleAgentLifecycleEventForIdleStack as t };
134
227
 
135
- //# sourceMappingURL=idle-stack-reaper-w1ISSlhs.js.map
228
+ //# sourceMappingURL=idle-stack-reaper-CnGx_PO_.js.map
@@ -0,0 +1,45 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ //#region ../../lib/cloister/in-flight-guard.ts
3
+ function createPromiseCoalescer() {
4
+ const inFlight = /* @__PURE__ */ new Map();
5
+ return {
6
+ run(key, task) {
7
+ const existing = inFlight.get(key);
8
+ if (existing) return existing;
9
+ const p = task();
10
+ inFlight.set(key, p);
11
+ p.catch(() => {}).finally(() => inFlight.delete(key));
12
+ return p;
13
+ },
14
+ isInFlight(key) {
15
+ return inFlight.has(key);
16
+ }
17
+ };
18
+ }
19
+ function createInFlightGuard() {
20
+ const inFlight = /* @__PURE__ */ new Set();
21
+ return {
22
+ run(key, task, onError) {
23
+ if (inFlight.has(key)) return false;
24
+ inFlight.add(key);
25
+ (async () => {
26
+ try {
27
+ await task();
28
+ } catch (err) {
29
+ onError?.(err);
30
+ } finally {
31
+ inFlight.delete(key);
32
+ }
33
+ })();
34
+ return true;
35
+ },
36
+ isInFlight(key) {
37
+ return inFlight.has(key);
38
+ }
39
+ };
40
+ }
41
+ var init_in_flight_guard = __esmMin((() => {}));
42
+ //#endregion
43
+ export { createPromiseCoalescer as n, init_in_flight_guard as r, createInFlightGuard as t };
44
+
45
+ //# sourceMappingURL=in-flight-guard-Bq3epG58.js.map
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Br as getOverdeckHome, Nt as readIssueRecordSync, Ot as init_record, Ur as packageRoot, Vr as init_paths$1, wt as getIssueRecordPath } from "./config-yaml-DvyMuOle.js";
2
+ import { At as getIssueRecordPath, Pt as init_record, ci as init_paths$1, si as getOverdeckHome, ui as packageRoot, zt as readIssueRecordSync } from "./config-yaml-CmOPzmBb.js";
3
3
  import { n as openDatabase, t as init_driver$1 } from "./driver-CKVGi51s.js";
4
- import { n as updateIssueRecord, t as init_record_update } from "./record-update-Dq0t2uBG.js";
5
- import { D as killSession, H as sessionExists, _ as getAgentSessions, w as init_tmux } from "./tmux-ftABRAmc.js";
4
+ import { i as updateIssueRecord, r as init_record_update } from "./record-update-Z0QCxmMp.js";
5
+ import { D as killSession, H as sessionExists, _ as getAgentSessions, w as init_tmux } from "./tmux-B1Wbxz5o.js";
6
6
  import { dirname, isAbsolute, join } from "node:path";
7
7
  import { Context, Effect, Layer, Queue, Stream } from "effect";
8
8
  import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
@@ -4720,8 +4720,11 @@ function ensureRuntimeIndexesSync(db) {
4720
4720
  runSchemaTopUp(db, "ALTER TABLE `review_status` ADD COLUMN `strike_ready_at` integer");
4721
4721
  runSchemaTopUp(db, "ALTER TABLE `review_status` ADD COLUMN `strike_landing_state` text");
4722
4722
  runSchemaTopUp(db, "ALTER TABLE `review_status` ADD COLUMN `strike_recovery_count` integer DEFAULT 0");
4723
+ runSchemaTopUp(db, "ALTER TABLE `review_status` ADD COLUMN `strike_transport_retry_count` integer");
4724
+ runSchemaTopUp(db, "ALTER TABLE `review_status` ADD COLUMN `strike_next_attempt_at` integer");
4723
4725
  runSchemaTopUp(db, "ALTER TABLE `review_status` ADD COLUMN `strike_landing_attempts` text");
4724
4726
  ensureReleaseSetTablesSync(db);
4727
+ ensureUatGenerationRepoTablesSync(db);
4725
4728
  runSchemaTopUp(db, "ALTER TABLE `flywheel_substrate_bugs` ADD COLUMN `affected_criteria` text");
4726
4729
  runSchemaTopUp(db, "CREATE INDEX IF NOT EXISTS `cost_session_id_idx` ON `cost_events` (`session_id`)");
4727
4730
  runSchemaTopUp(db, "CREATE INDEX IF NOT EXISTS `idx_cost_agent_id` ON `cost_events` (`agent_id`, `ts`)");
@@ -4776,6 +4779,51 @@ function ensureReleaseSetTablesSync(db) {
4776
4779
  db.exec("CREATE UNIQUE INDEX IF NOT EXISTS `release_set_components_issue_component_idx` ON `release_set_components` (`issue_id`,`component_key`)");
4777
4780
  db.exec("CREATE INDEX IF NOT EXISTS `release_set_components_issue_order_idx` ON `release_set_components` (`issue_id`,`release_order`,`component_key`)");
4778
4781
  }
4782
+ /**
4783
+ * Idempotent schema top-up for per-repo UAT generation tables (PAN-3093).
4784
+ * A polyrepo generation spans N member repos, so its per-repo branch, base SHA,
4785
+ * worktree, and publish state cannot live in the single-valued `uat_generations`
4786
+ * columns. Existing overdeck.db files predate these tables and need them added
4787
+ * without a migration reset — same shape as ensureReleaseSetTablesSync above.
4788
+ */
4789
+ function ensureUatGenerationRepoTablesSync(db) {
4790
+ db.exec(`
4791
+ CREATE TABLE IF NOT EXISTS \`uat_generation_repos\` (
4792
+ \`uat_name\` text NOT NULL,
4793
+ \`repo_key\` text NOT NULL,
4794
+ \`repo_path\` text NOT NULL,
4795
+ \`branch\` text NOT NULL,
4796
+ \`base_sha\` text NOT NULL,
4797
+ \`target_branch\` text DEFAULT 'main' NOT NULL,
4798
+ \`worktree_path\` text NOT NULL,
4799
+ \`merge_order\` integer DEFAULT 0 NOT NULL,
4800
+ \`promoted_at\` integer,
4801
+ \`merge_sha\` text,
4802
+ PRIMARY KEY(\`uat_name\`, \`repo_key\`),
4803
+ FOREIGN KEY (\`uat_name\`) REFERENCES \`uat_generations\`(\`name\`) ON UPDATE no action ON DELETE no action
4804
+ )
4805
+ `);
4806
+ db.exec("CREATE INDEX IF NOT EXISTS `uat_generation_repos_uat_order_idx` ON `uat_generation_repos` (`uat_name`,`merge_order`)");
4807
+ db.exec(`
4808
+ CREATE TABLE IF NOT EXISTS \`uat_generation_member_repos\` (
4809
+ \`uat_name\` text NOT NULL,
4810
+ \`issue_id\` text NOT NULL,
4811
+ \`repo_key\` text NOT NULL,
4812
+ \`branch\` text NOT NULL,
4813
+ \`head_sha\` text NOT NULL,
4814
+ \`merge_order_in_repo\` integer DEFAULT 0 NOT NULL,
4815
+ PRIMARY KEY(\`uat_name\`, \`issue_id\`, \`repo_key\`),
4816
+ FOREIGN KEY (\`uat_name\`) REFERENCES \`uat_generations\`(\`name\`) ON UPDATE no action ON DELETE no action,
4817
+ FOREIGN KEY (\`issue_id\`) REFERENCES \`issues\`(\`id\`) ON UPDATE no action ON DELETE no action
4818
+ )
4819
+ `);
4820
+ db.exec("CREATE INDEX IF NOT EXISTS `uat_generation_member_repos_uat_idx` ON `uat_generation_member_repos` (`uat_name`,`issue_id`)");
4821
+ runSchemaTopUp(db, "CREATE INDEX IF NOT EXISTS `uat_generations_uncleaned_terminal_idx` ON `uat_generations` (`project_root`,`status`) WHERE `cleaned_at` IS NULL");
4822
+ runSchemaTopUp(db, "ALTER TABLE `uat_generation_repos` ADD COLUMN `target_branch` text DEFAULT 'main' NOT NULL");
4823
+ runSchemaTopUp(db, "ALTER TABLE `uat_generation_repos` ADD COLUMN `merge_sha` text");
4824
+ runSchemaTopUp(db, "ALTER TABLE `uat_generation_resolutions` ADD COLUMN `kind` text");
4825
+ runSchemaTopUp(db, "ALTER TABLE `uat_generation_resolutions` ADD COLUMN `note` text");
4826
+ }
4779
4827
  function warnSchemaDriftSync(db) {
4780
4828
  try {
4781
4829
  const report = auditOverdeckSchemaSync(db, OVERDECK_SCHEMA_TOP_UP_EXPECTATIONS);
@@ -4927,6 +4975,14 @@ var init_infra = __esmMin((() => {
4927
4975
  table: "review_status",
4928
4976
  column: "strike_recovery_count"
4929
4977
  },
4978
+ {
4979
+ table: "review_status",
4980
+ column: "strike_transport_retry_count"
4981
+ },
4982
+ {
4983
+ table: "review_status",
4984
+ column: "strike_next_attempt_at"
4985
+ },
4930
4986
  {
4931
4987
  table: "review_status",
4932
4988
  column: "strike_landing_attempts"
@@ -4966,6 +5022,22 @@ var init_infra = __esmMin((() => {
4966
5022
  {
4967
5023
  table: "agents",
4968
5024
  column: "last_yield_resume_at"
5025
+ },
5026
+ {
5027
+ table: "uat_generation_repos",
5028
+ column: "target_branch"
5029
+ },
5030
+ {
5031
+ table: "uat_generation_repos",
5032
+ column: "merge_sha"
5033
+ },
5034
+ {
5035
+ table: "uat_generation_resolutions",
5036
+ column: "kind"
5037
+ },
5038
+ {
5039
+ table: "uat_generation_resolutions",
5040
+ column: "note"
4969
5041
  }
4970
5042
  ],
4971
5043
  indexes: [
@@ -4974,7 +5046,10 @@ var init_infra = __esmMin((() => {
4974
5046
  "idx_cost_issue_upper",
4975
5047
  "release_sets_project_idx",
4976
5048
  "release_set_components_issue_component_idx",
4977
- "release_set_components_issue_order_idx"
5049
+ "release_set_components_issue_order_idx",
5050
+ "uat_generation_repos_uat_order_idx",
5051
+ "uat_generation_member_repos_uat_idx",
5052
+ "uat_generations_uncleaned_terminal_idx"
4978
5053
  ]
4979
5054
  };
4980
5055
  overdeckEvents = sqliteTable("events", {
@@ -5093,4 +5168,4 @@ var init_infra = __esmMin((() => {
5093
5168
  //#endregion
5094
5169
  export { init_paths as A, inArray as C, sql as D, like as E, OVERDECK_MIGRATION_PATH as O, gte as S, isNull as T, integer as _, EventBus as a, and as b, Records as c, getOverdeckDatabaseSync as d, init_infra as f, real as g, text as h, DbLive as i, getOverdeckDatabasePath as k, Tmux as l, sqliteTable as m, CostArchiveLive as n, EventBusLive as o, init_sqlite_core as p, Db as r, Forge as s, CostArchive as t, TmuxLive as u, init_drizzle_orm as v, isNotNull as w, eq as x, desc as y };
5095
5170
 
5096
- //# sourceMappingURL=infra-CzaSOgul.js.map
5171
+ //# sourceMappingURL=infra-BjuxvjdS.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_injection, r as injectPromptTimeMemory } from "./injection-DZ0PfYa4.js";
1
+ import { n as init_injection, r as injectPromptTimeMemory } from "./injection-UCf8EsjX.js";
2
2
  init_injection();
3
3
  export { injectPromptTimeMemory };