@overdeck/desktop 0.45.24 → 0.47.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 (528) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +36 -1
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-10Ur5Dne.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-BNwqxseD.js} +6 -6
  7. package/server/{agent-gc-CHcnvonI.js → agent-gc-C3h9Or3a.js} +5 -5
  8. package/server/agent-state-CYXJVG72.js +3 -0
  9. package/server/agent-state-service-C63p_ftq.js +2 -0
  10. package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-Ds6OeFvo.js} +15 -9
  11. package/server/{agents-EbI0zCJl.js → agents-J5mEnekq.js} +23 -16
  12. package/server/agents-ePFVoZbu.js +3 -0
  13. package/server/archive-planning-B2XplFzT.js +2 -0
  14. package/server/{archive-planning-Du25Jtst.js → archive-planning-BwhxeP7C.js} +22 -26
  15. package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
  16. package/server/{assemble-J2ZZ2C15.js → assemble-Bgwqv-Ro.js} +2 -2
  17. package/server/auto-spawn-consent-CQ9Bi9q6.js +1141 -0
  18. package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
  19. package/server/{behavior-B3exJ42O.js → behavior-td6-xhQk.js} +2 -2
  20. package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
  21. package/server/bridge-pool-patrol-CYH2OLb5.js +136 -0
  22. package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DRqZ8lAz.js} +2 -2
  23. package/server/{build-info-Ie_D0_BT.js → build-info-7yiEpl6u.js} +5 -3
  24. package/server/{build-info-CZk_TITh.js → build-info-CpG__c63.js} +1 -1
  25. package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
  26. package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DBcyNR8w.js} +2 -2
  27. package/server/checkpoint-worker.js +1 -1
  28. package/server/{checkpoints-CQB1h765.js → checkpoints-D95apurL.js} +2 -2
  29. package/server/{checkpoints-BJIs5QIA.js → checkpoints-Wm963lm8.js} +1 -1
  30. package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
  31. package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-Bjitl9aI.js} +13 -2
  32. package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CpbpvUQ2.js} +2 -2
  33. package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
  34. package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
  35. package/server/cli-CjOCSnfj.js +3 -0
  36. package/server/{cli-RoOx5DUf.js → cli-Cte9ZFGn.js} +9 -9
  37. package/server/{cliproxy-C8a1vtTU.js → cliproxy-C5fMJ7rY.js} +2 -2
  38. package/server/{cliproxy-fHfIeiGd.js → cliproxy-DaAbWMjC.js} +1 -1
  39. package/server/{close-issue-DoOifFIK.js → close-issue-BPh1ARCF.js} +5 -5
  40. package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
  41. package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-DoOZqGFK.js} +88 -17
  42. package/server/{codex-BZXGhUVB.js → codex-BzGDW_d3.js} +36 -7
  43. package/server/{codex-GcHuUF-k.js → codex-o8FJwzmy.js} +1 -1
  44. package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-Dt-ycU8L.js} +2 -2
  45. package/server/compaction-continuation-CvXpbZ4w.js +200 -0
  46. package/server/{config-CKxYiCmX.js → config-Bi3u1VK7.js} +4 -3
  47. package/server/{config-BZ0sHTju.js → config-BvLe652W.js} +2 -2
  48. package/server/{config-DzV30TOm.js → config-CL3Gyvja.js} +1 -1
  49. package/server/{config-yaml-DySPNmKN.js → config-yaml-CxdwhAIA.js} +276 -14
  50. package/server/conflict-gate-CX80JYYS.js +3 -0
  51. package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-E4nt7ZeS.js} +60 -14
  52. package/server/{context-layers-igZ4FI4_.js → context-layers-C_IIysnm.js} +3 -3
  53. package/server/{context-layers-BrPmE__h.js → context-layers-DAG83UZt.js} +2 -2
  54. package/server/{control-settings-BQp7_4uD.js → control-settings-CiqGxXnc.js} +56 -19
  55. package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-BE3CNtHF.js} +1 -1
  56. package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-D6-yLtqt.js} +8 -8
  57. package/server/{conversation-service-DPJ71F33.js → conversation-service-DBxoYMDl.js} +10 -8
  58. package/server/conversation-service-D_TS2b1r.js +3 -0
  59. package/server/{conversations-CAsJF9kh.js → conversations-BKDVpB-3.js} +1 -1
  60. package/server/{conversations-6AfUfbwc.js → conversations-D0UEdLtk.js} +4 -4
  61. package/server/{cost-R-m6Yi-W.js → cost-DS1s0DbG.js} +3 -3
  62. package/server/{cost-B2ddP6wq.js → cost-DpgYmYqR.js} +12 -2
  63. package/server/{cost-sync-BsN6ER0n.js → cost-sync-tOCCGnEt.js} +3 -3
  64. package/server/{dag-B1ucnjDU.js → dag-BtkgLeqY.js} +2 -2
  65. package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-CFLykHWt.js} +1 -1
  66. package/server/dashboard-db-worker.js +7 -7
  67. package/server/deacon-BIblC-WX.js +4 -0
  68. package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-B08gF0mh.js} +3 -3
  69. package/server/{deacon-CU_cAYSR.js → deacon-pLRLbPvR.js} +3308 -2707
  70. package/server/deacon-pending-lifecycle-B-Io84AP.js +33 -0
  71. package/server/deacon-swarm-B1XkIvfr.js +2 -0
  72. package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-v5PMun-m.js} +15 -14
  73. package/server/deacon.js +14 -19
  74. package/server/dead-end-trip-D8A3msX9.js +13 -0
  75. package/server/delivery-BX9HR4wQ.js +3 -0
  76. package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-sYgOxLeb.js} +69 -18
  77. package/server/deploy-queue-VfohaPN_.js +169 -0
  78. package/server/deploy-queue-gHJBycaF.js +3 -0
  79. package/server/deploy-window-CFRZ0-kt.js +3 -0
  80. package/server/{deploy-window-C3F-tihF.js → deploy-window-D4DQb8VP.js} +40 -16
  81. package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-DiOBDM1c.js} +2 -2
  82. package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
  83. package/server/dist-B3YPQa5A.js +3 -0
  84. package/server/{dist-Cb_0uvpS.js → dist-C3A8B8wM.js} +1 -1
  85. package/server/{dist-src-BSoS7mkd.js → dist-src-C0adpegX.js} +1 -1
  86. package/server/{docker-DcMTFTUC.js → docker-BJzlkqYB.js} +2 -2
  87. package/server/docker-Y3PElJb0.js +3 -0
  88. package/server/dod-DlNtcH6n.js +91 -0
  89. package/server/durable-review-pipeline-Cibps-Rg.js +20 -0
  90. package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
  91. package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-BAofzBPv.js} +4 -4
  92. package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
  93. package/server/{esm-shims-OSHAYaS1.js → esm-shims-BeObUkaw.js} +1 -1
  94. package/server/{event-store-EV2cMiXj.js → event-store-5UKzh9Jf.js} +1 -1
  95. package/server/{event-store-CQL6NeqB.js → event-store-CrHcVC5_.js} +23 -4
  96. package/server/{events-DTfAe4My.js → events-BNrvchBg.js} +3 -3
  97. package/server/{events-BTdrdEq8.js → events-CF8QDbuV.js} +1 -1
  98. package/server/{factory-CFibJuaw.js → factory-Cmm9Hsho.js} +5 -5
  99. package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population-B6HpNWRy.js} +4 -4
  100. package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
  101. package/server/{features-ez2271oH.js → features-D5km80UI.js} +2 -2
  102. package/server/{feedback-target-CoFDHiM8.js → feedback-target-BJ5ZADsu.js} +1 -1
  103. package/server/{feedback-target-7mqqwrX6.js → feedback-target-DSxEL6lP.js} +8 -8
  104. package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-C27Hak8a.js} +5 -5
  105. package/server/{feedback-writer-D3a22RCd.js → feedback-writer-CoB9Z6aU.js} +1 -1
  106. package/server/{flywheel-DHrgCphM.js → flywheel-BHx8XuMr.js} +47 -20
  107. package/server/{flywheel-SVF02Jpq.js → flywheel-DZZdtiOL.js} +1 -1
  108. package/server/{flywheel-DzGtWnJ1.js → flywheel-f662Q-y2.js} +16 -15
  109. package/server/flywheel-merge-order-D_xLMbJU.js +462 -0
  110. package/server/flywheel-merge-order-Dil0LmdN.js +2 -0
  111. package/server/forge-B5o319qI.js +3 -0
  112. package/server/forge-BaKGCya6.js +383 -0
  113. package/server/{from-kNxT0bZC.js → from-B3tZbB55.js} +1 -1
  114. package/server/fs-lock-Bre3sGoz.js +130 -0
  115. package/server/{fts-db-CE46vDkZ.js → fts-db-IVc4_M3f.js} +2 -2
  116. package/server/{fts-operations-CqY6zl-i.js → fts-operations-B9jG8wa3.js} +2 -2
  117. package/server/{git-utils-CRw2zLPC.js → git-utils-CsvYfJU3.js} +30 -5
  118. package/server/git-utils-Xg4PFN45.js +3 -0
  119. package/server/{github-app-ClZ2lk8D.js → github-app-Bmg4R9mv.js} +1 -1
  120. package/server/{github-app-C3QrAUd0.js → github-app-CmNk0zLU.js} +3 -3
  121. package/server/{github-client-DfQYVUaw.js → github-client-B6KM9_wA.js} +1 -1
  122. package/server/{github-client-BnIsSrEN.js → github-client-qazkPrg0.js} +3 -3
  123. package/server/github-pr-lookup-DAcVeRLK.js +58 -0
  124. package/server/{harness-binary-DPUi-Pv8.js → harness-binary-BSpiXaLw.js} +2 -2
  125. package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-BAJu5MX8.js} +4 -4
  126. package/server/{health-events-BDOHby5Q.js → health-events-2Z6Wa9SM.js} +1 -1
  127. package/server/{health-events-BBcTYQKU.js → health-events-BwX32k8d.js} +2 -2
  128. package/server/{hooks-DPVX1rwQ.js → hooks-D1g1jKLI.js} +1 -1
  129. package/server/{hooks-CKZgXlJb.js → hooks-DbtbimEf.js} +2 -2
  130. package/server/{hume-Cz8igP9E.js → hume-DXNiu6nQ.js} +2 -2
  131. package/server/hume-VUCNbTgn.js +3 -0
  132. package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
  133. package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-Cy-dQzW4.js} +99 -6
  134. package/server/in-flight-guard-D-sSkADM.js +45 -0
  135. package/server/{infra-BEqFxlJc.js → infra-BDQDRopn.js} +81 -5
  136. package/server/{injection-C8aiVJrF.js → injection-6AGnXxlj.js} +7 -7
  137. package/server/{injection-CPUIqNhI.js → injection-Bl8d_jHZ.js} +1 -1
  138. package/server/inspect-agent-CUwVmr2h.js +2 -0
  139. package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-nXdIptyh.js} +26 -25
  140. package/server/{internal-token-s0-oKybJ.js → internal-token-DzK385vD.js} +2 -2
  141. package/server/{internal-token-BrcU6qfe.js → internal-token-Ias7N8Kg.js} +1 -1
  142. package/server/{io-C9kF1wtJ.js → io-B00PBNku.js} +44 -27
  143. package/server/{issue-closed-CDJk4pIp.js → issue-closed-BehTG1be.js} +8 -8
  144. package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-Birk-ifu.js} +42 -30
  145. package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-BqSuQvbn.js} +1 -1
  146. package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-B2wXiIlw.js} +1 -1
  147. package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-C6ZduvuY.js} +10 -10
  148. package/server/{issues-BMmP_77e.js → issues-DQ5-LatB.js} +2 -2
  149. package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-BDpnGFCl.js} +5 -4
  150. package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dwnky8FG.js} +3 -3
  151. package/server/{lifecycle-xmBfK2GJ.js → lifecycle-B3s4sM1G.js} +6 -7
  152. package/server/{lifecycle-yPd___5E.js → lifecycle-B4Xdb4cY.js} +2 -2
  153. package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-CzTHEooc.js} +1 -1
  154. package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-DCo6s6ks.js} +5 -5
  155. package/server/{linear-client-BsuUvkdA.js → linear-client-9uq7fhiV.js} +3 -3
  156. package/server/{linear-client-CTskEeT_.js → linear-client-CnbtHiic.js} +1 -1
  157. package/server/linear-mcp-auth-BxUOzswy.js +280 -0
  158. package/server/linear-mcp-auth-D46fBCLf.js +2 -0
  159. package/server/memory-fts-worker.js +1 -1
  160. package/server/{merge-CefQNAnq.js → merge-DiW9RdSB.js} +13 -11
  161. package/server/{merge-agent-4WOWlSYA.js → merge-agent-BLUgRsz3.js} +234 -84
  162. package/server/{merge-agent-CKkgIBPB.js → merge-agent-DQTXZk8z.js} +1 -1
  163. package/server/{merge-batch-ClFn2T-y.js → merge-batch-Cp_j9BGk.js} +1 -1
  164. package/server/merge-completeness-B46KqhtY.js +277 -0
  165. package/server/merge-completeness-BLbB5-6n.js +3 -0
  166. package/server/merge-ops-1abz6O_P.js +2 -0
  167. package/server/merge-rebase-CJJVAJuz.js +2 -0
  168. package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-DIkBjgwq.js} +3 -3
  169. package/server/{merge-set-DJ8-UErs.js → merge-set-CBgHfwM0.js} +11 -5
  170. package/server/merge-set-DeUxFsC3.js +3 -0
  171. package/server/{merge-B1DiziGU.js → merge-sr8Nrnmi.js} +1 -1
  172. package/server/merge-sync-CpGmk6Ch.js +3 -0
  173. package/server/{merge-sync-VPV28g0g.js → merge-sync-kr4vqyjM.js} +409 -153
  174. package/server/{merge-train-CHopycP0.js → merge-train-Dmrcus12.js} +18 -8
  175. package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-D_uGX91G.js} +21 -15
  176. package/server/merge-verification-NvaAd8CZ.js +220 -0
  177. package/server/merged-docker-cleanup-worker-DH_hrGPI.js +3 -0
  178. package/server/merged-docker-cleanup-worker-Y1R06TEl.js +107 -0
  179. package/server/{multipart-parser-duPAfSBw.js → multipart-parser-R-oC8dQg.js} +2 -2
  180. package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-BgD0JUmM.js} +1 -1
  181. package/server/node_modules/.package-lock.json +30 -30
  182. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  183. package/server/node_modules/@google-cloud/common/package.json +2 -2
  184. package/server/node_modules/@types/node/README.md +1 -1
  185. package/server/node_modules/@types/node/crypto.d.ts +1 -1
  186. package/server/node_modules/@types/node/package.json +2 -2
  187. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  188. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  189. package/server/node_modules/gaxios/package.json +1 -1
  190. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  191. package/server/node_modules/google-auth-library/package.json +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  193. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  196. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  197. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  198. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  203. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  204. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  205. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  206. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  207. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  208. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  209. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  210. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  211. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  221. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  222. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  225. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  226. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  227. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  228. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  229. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  230. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  231. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  243. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  244. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  245. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  246. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  247. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  248. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  249. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  250. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  251. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  252. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  253. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  254. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  255. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  256. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  257. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  258. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  259. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  260. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  261. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  263. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  264. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  265. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  266. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  267. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  268. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  269. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  270. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  271. package/server/node_modules/google-gax/package.json +5 -5
  272. package/server/node_modules/retry-request/package.json +4 -4
  273. package/server/node_modules/teeny-request/package.json +5 -5
  274. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  275. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  276. package/server/node_modules/undici/lib/core/request.js +12 -1
  277. package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  278. package/server/node_modules/undici/lib/global.js +36 -16
  279. package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
  280. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  281. package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
  282. package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
  283. package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
  284. package/server/node_modules/undici/lib/util/cache.js +328 -66
  285. package/server/node_modules/undici/lib/util/date.js +23 -6
  286. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  287. package/server/node_modules/undici/package.json +1 -1
  288. package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-B6vJHxtX.js} +242 -34
  289. package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
  290. package/server/package-lock.json +31 -31
  291. package/server/package.json +1 -1
  292. package/server/{pan-dir-B0c3w0Ya.js → pan-dir-DMzF5wne.js} +25 -11
  293. package/server/{paths-D-xWGHdh.js → paths-sJBSb7Ul.js} +2 -2
  294. package/server/pending-lifecycle-claim-DilzGfgk.js +110 -0
  295. package/server/persistent-logger-H_VjuOu7.js +57 -0
  296. package/server/{pickup-DUCLWrJY.js → pickup-DWhqzliO.js} +4 -3
  297. package/server/pipeline-membership-C88VBnhJ.js +3 -0
  298. package/server/pipeline-membership-D9SBvItj.js +57 -0
  299. package/server/pipeline-membership-gather-4eR-7Tqy.js +3 -0
  300. package/server/pipeline-membership-gather-CeVGnNJ2.js +593 -0
  301. package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
  302. package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-DT6xLFao.js} +1 -1
  303. package/server/post-merge-lifecycle-worker-8HIeS_J6.js +50 -0
  304. package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-9SKt2bEc.js} +2 -2
  305. package/server/{project-repos-B6GycDh9.js → project-repos-B5pIphKg.js} +7 -3
  306. package/server/project-repos-DPjOdfPa.js +3 -0
  307. package/server/projects-_n3Zui6K.js +3 -0
  308. package/server/{prompts-DxzFXuLl.js → prompts-CgzMBvQF.js} +2 -2
  309. package/server/{providers-u4Ga0jOr.js → providers-BI1mOBQ4.js} +1 -1
  310. package/server/{providers-qQAwGQDW.js → providers-BJQSnAAp.js} +7 -7
  311. package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
  312. package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
  313. package/server/public/assets/{dist-ByIuzMQW.js → dist-5zingMiA.js} +3 -3
  314. package/server/public/assets/{dist-D7zYSEA6.js → dist-CVxhbI2E.js} +1 -1
  315. package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
  316. package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
  317. package/server/public/assets/index-DEpY-D1O.js +807 -0
  318. package/server/public/assets/index-Ddkcz3WT.css +1 -0
  319. package/server/public/assets/{linear-BBbArIcK.js → linear-BB0jQT16.js} +1 -1
  320. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
  321. package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
  322. package/server/public/assets/{prod-B8vYiu52.js → prod-XBLvikex.js} +4 -4
  323. package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
  324. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
  325. package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
  326. package/server/public/index.html +2 -2
  327. package/server/{pull-requests-_lHueOHW.js → pull-requests-7BgLDsIo.js} +19 -10
  328. package/server/{pull-requests-7N8WKseP.js → pull-requests-Dq0y6IxE.js} +1 -1
  329. package/server/{queries-CjNIf-Ub.js → queries-C-MUZaIy.js} +824 -192
  330. package/server/{rally-CyWT_lNO.js → rally-CPysR4T_.js} +3 -3
  331. package/server/rally-D_VW4bJv.js +3 -0
  332. package/server/{rally-api-C8e_1JRi.js → rally-api-8Ptlp2os.js} +2 -2
  333. package/server/{rally-api-ClOSd-Tt.js → rally-api-CgosKdKL.js} +1 -1
  334. package/server/{rally-client-sgtVqzNU.js → rally-client-CCX0hADj.js} +1 -1
  335. package/server/{rally-client-lc-nokqr.js → rally-client-iYMHWQD7.js} +5 -5
  336. package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
  337. package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
  338. package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-CMdgaylx.js} +16 -7
  339. package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-DqcOVmJO.js} +2 -2
  340. package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-CMZJ_Vjq.js} +9 -7
  341. package/server/record-BTwWhtBb.js +3 -0
  342. package/server/{record-update-dE1Aw83j.js → record-update-DaOKS7Wb.js} +124 -157
  343. package/server/record-update-DhI7eySG.js +3 -0
  344. package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-DDH-02ng.js} +2 -2
  345. package/server/{release-engine-Cx48W7z8.js → release-engine-B2X9AfFC.js} +5 -5
  346. package/server/{release-set-CQfuN9-v.js → release-set-G4XKyQ8K.js} +3 -3
  347. package/server/{remote-C_2hasl7.js → remote-BXarMvqf.js} +3 -3
  348. package/server/{remote-ChgimyYa.js → remote-CUhyqjXk.js} +3 -3
  349. package/server/{remote-agents-By1ige5O.js → remote-agents-Bba-MgSA.js} +311 -48
  350. package/server/{remote-agents-CA3Ihlxj.js → remote-agents-CLZB3Coc.js} +2 -2
  351. package/server/{remote-completion-fVe9e_3u.js → remote-completion-CwAp79EC.js} +13 -13
  352. package/server/resume-mOREjlYu.js +3 -0
  353. package/server/{review-agent-CIGOQYBD.js → review-agent--pOptAEV.js} +65 -50
  354. package/server/{review-agent-DNboMyW4.js → review-agent-BTCNkq2h.js} +1 -1
  355. package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-BNmw8dWE.js} +7 -6
  356. package/server/{review-context-2uj-YQ8J.js → review-context-DFxYOOJW.js} +9 -9
  357. package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-BgU_1jJf.js} +3 -44
  358. package/server/review-status-CGvlA4o_.js +7737 -0
  359. package/server/review-status-Dma9SFaN.js +3 -0
  360. package/server/review-status-emit-DURrmGYX.js +50 -0
  361. package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-8NiNXi5W.js} +4 -4
  362. package/server/review-status-source-BLx_1siH.js +3 -0
  363. package/server/{review-status-source-CxuEjLGg.js → review-status-source-DIk1JSow.js} +24 -3
  364. package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-0GxOqeqF.js} +11 -6
  365. package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-muT-EBp2.js} +1 -1
  366. package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
  367. package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-xJNdqBnX.js} +65 -11
  368. package/server/{rollup-FGsKki9R.js → rollup-BQaol5TX.js} +8 -8
  369. package/server/{rollup-BKQC7jp4.js → rollup-BR4t_wck.js} +1 -1
  370. package/server/{scanner-CnqEZeDy.js → scanner-C-D2cFdX.js} +8 -7
  371. package/server/{sequence-io-D909zgeH.js → sequence-io-Bmf1EZM5.js} +4 -4
  372. package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-CigMyKh2.js} +7 -6
  373. package/server/server.js +2005 -614
  374. package/server/{service-CLeAoU6G.js → service-CD0DvFvD.js} +114 -68
  375. package/server/{session-fork-CHI1XvL9.js → session-fork-B6cQ5eya.js} +2 -2
  376. package/server/{session-history-BT3IvqhC.js → session-history-3ON_IJjm.js} +7 -55
  377. package/server/settings-CVmWiJ-r.js +2 -0
  378. package/server/{settings-C0zgxOGf.js → settings-PilbFZAM.js} +3 -2
  379. package/server/{settings-BTMvpNFU.js → settings-VN0qOh4U.js} +3 -3
  380. package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-DXvx77oE.js} +3 -3
  381. package/server/{shadow-state-7a-524T8.js → shadow-state-BBk_zacw.js} +2 -2
  382. package/server/{shadow-state-DnDyjujH.js → shadow-state-CZBp7pwq.js} +1 -1
  383. package/server/{shadow-utils-Db3oroFG.js → shadow-utils-DdZ05AJS.js} +2 -2
  384. package/server/{ship-log-D9MlVzYU.js → ship-log-7kJfjUX2.js} +1 -1
  385. package/server/{smart-compaction-CV2ukKND.js → smart-compaction-8fA5k5XN.js} +1 -1
  386. package/server/{smart-compaction-KCYScAU1.js → smart-compaction-ByhL9cRS.js} +8 -7
  387. package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-pcF-YeFE.js} +38 -50
  388. package/server/spawn-planning-session-vLUJoFjy.js +3 -0
  389. package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-B07XjWD2.js} +1 -1
  390. package/server/{specialist-context-Bn3dCGS2.js → specialist-context-DJ-zFyL3.js} +5 -5
  391. package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
  392. package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Dae-n52_.js} +3 -3
  393. package/server/{specialists-CC4r-c2s.js → specialists-6PWdtWcg.js} +1177 -311
  394. package/server/{specialists-DM6bWjsi.js → specialists-Bz-wFT7R.js} +1 -1
  395. package/server/{specialists-jiuuyVkp.js → specialists-DUiExaxb.js} +18 -18
  396. package/server/{specialists-CShuVGWT.js → specialists-KR3pKulN.js} +1 -1
  397. package/server/specs--enInima.js +3 -0
  398. package/server/src-B948bGVR.js +11452 -0
  399. package/server/{src-CXmtj0im.js → src-rac0Mepv.js} +6 -6
  400. package/server/{src-CdmnTM2m.js → src-vHy2-oCv.js} +3 -3
  401. package/server/{stack-health-Bn3o8FBX.js → stack-health-BikqHSjn.js} +1 -1
  402. package/server/{stack-health-DxSdG9cW.js → stack-health-DqLTiEu4.js} +7 -5
  403. package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
  404. package/server/{staleness-DPm7ClwA.js → staleness-C-a5rBxF.js} +1 -1
  405. package/server/{staleness-CT34nwr9.js → staleness-CGTZyp6V.js} +1 -1
  406. package/server/{state-home-Cn_Qu8IX.js → state-home-722Dkx92.js} +2 -2
  407. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-CybR81Uf.js} +1 -1
  408. package/server/{state-migrate-BGg2ZaOt.js → state-migrate-2u8wIpoL.js} +4 -4
  409. package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-CC6q3eqQ.js} +84 -26
  410. package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-r1TJu68G.js} +1 -1
  411. package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
  412. package/server/{summary-fork-DpcxN9tf.js → summary-fork-BqgmgPDt.js} +2 -2
  413. package/server/{summary-fork-D1RAk9rJ.js → summary-fork-Df2WFijM.js} +8 -8
  414. package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-Cg_KIb3o.js} +1 -1
  415. package/server/supervisor/{paths-DehGY2Fj.js → paths-BBOnCYlO.js} +10 -2
  416. package/server/supervisor/pty-supervisor.js +50 -4
  417. package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-BbjwEUUM.js} +3 -3
  418. package/server/supervisor-B4anCCSm.js +2 -0
  419. package/server/{supervisor-wM4ooB5O.js → supervisor-BxqSpjcN.js} +3 -3
  420. package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-DfFxa9-n.js} +3 -3
  421. package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-ICLSkhhZ.js} +2 -2
  422. package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-DRdi_CPa.js} +15 -16
  423. package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-A_-p-i0I.js} +8 -7
  424. package/server/{test-verdict-gscuksPv.js → test-verdict-BHgTAwIG.js} +1 -1
  425. package/server/{test-verdict-bWYBtqBg.js → test-verdict-C4i9aqEP.js} +1 -1
  426. package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-CvWXBhX1.js} +1 -1
  427. package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-wvsU6bKv.js} +2 -2
  428. package/server/{tmux-R7N7y-Mh.js → tmux-CfDHob9M.js} +174 -4
  429. package/server/{tmux-B6z7h_vZ.js → tmux-Ctk6RV5l.js} +1 -1
  430. package/server/{token-BK6t8BIT.js → token-DrxwytsZ.js} +2 -2
  431. package/server/{token-util-DxXu-vd1.js → token-util-B48BlCba.js} +1 -1
  432. package/server/token-util-D411CAq9.js +3 -0
  433. package/server/{tracker-config-G6latr8C.js → tracker-config-BcPMElRB.js} +2 -2
  434. package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-CJ6BHjcD.js} +3 -3
  435. package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-DZ6nMYMj.js} +1 -1
  436. package/server/{tunnel-DGdUkGoZ.js → tunnel-Bp-dRHZz.js} +1 -1
  437. package/server/{tunnel-CDVKJpRv.js → tunnel-DUbUPElU.js} +3 -3
  438. package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
  439. package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
  440. package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
  441. package/server/{types-5M0lupud.js → types-Di8wdakq.js} +1 -1
  442. package/server/uat-promote-verification-CoJuh7XO.js +92 -0
  443. package/server/uat-train-4Q0k06CQ.js +0 -0
  444. package/server/uat-train-Dewoatps.js +2 -0
  445. package/server/{validate-IfDGkaVR.js → validate-B0C8p66t.js} +8 -6
  446. package/server/{validation-Dw1pzDzr.js → validation-B_kIRfNe.js} +4 -4
  447. package/server/{validation-CC9OPqJZ.js → validation-hVOwQk8T.js} +1 -1
  448. package/server/{verification-artifact-B3itKTxu.js → verification-artifact-BxlxTiYK.js} +1 -1
  449. package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-D70AtckY.js} +1 -1
  450. package/server/{verification-runner-BW4HOKAz.js → verification-runner-Bc3cJvpC.js} +1 -1
  451. package/server/{verification-runner-CkgX6EtI.js → verification-runner-KZTz6u72.js} +40 -18
  452. package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-CE_i3Bcw.js} +1 -1
  453. package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-ByrPAzOy.js} +20 -9
  454. package/server/{workflows-mbQzh6mQ.js → workflows-D0vP1WrK.js} +252 -99
  455. package/server/workflows-DtDX08ed.js +2 -0
  456. package/server/{workspace--8tnhDI0.js → workspace-COWvdibH.js} +1 -1
  457. package/server/{workspace-BPUws1-_.js → workspace-DQkRPLlQ.js} +3 -3
  458. package/server/workspace-anchor-drift-DXYIAHzr.js +224 -0
  459. package/server/workspace-anchor-drift-pwz23TI1.js +3 -0
  460. package/server/{workspace-config-CIVWZOQr.js → workspace-config-BdZM4PvZ.js} +1 -1
  461. package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-BPgTrG66.js} +157 -118
  462. package/server/workspace-manager-C1F3XsnS.js +3 -0
  463. package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-CdjzAP8x.js} +1 -1
  464. package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-DkO_iTLo.js} +2 -2
  465. package/server/{workspaces-Do_9J0LQ.js → workspaces-CRBJikLp.js} +749 -299
  466. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  467. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  468. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  469. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  470. package/sync-sources/skills/pan-merge/SKILL.md +7 -5
  471. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  472. package/sync-sources/skills/pan-release/SKILL.md +57 -0
  473. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  474. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  475. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  476. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  477. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  478. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  479. package/server/activity-logger-OEUBdfZ8.js +0 -3
  480. package/server/agent-state-Bc3tzUC8.js +0 -3
  481. package/server/agent-state-service-D5UGKIJL.js +0 -2
  482. package/server/agents-wi9NWzs2.js +0 -3
  483. package/server/archive-planning-BZDgzoEj.js +0 -3
  484. package/server/cli-B86rejVV.js +0 -3
  485. package/server/conflict-gate-BhAY7TUd.js +0 -3
  486. package/server/conversation-service-BLd3MYsG.js +0 -3
  487. package/server/deacon-kiQrb4ZT.js +0 -4
  488. package/server/deacon-swarm-C-GwfjJy.js +0 -2
  489. package/server/deploy-window-DkZraDyj.js +0 -3
  490. package/server/dist-Bzy0y69j.js +0 -3
  491. package/server/dod-C6n9RV3G.js +0 -66
  492. package/server/flywheel-merge-order-UU0tiUld.js +0 -245
  493. package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
  494. package/server/forge-CNFnyqps.js +0 -270
  495. package/server/forge-DXnS_YFH.js +0 -2
  496. package/server/git-utils-D0_yhCgF.js +0 -3
  497. package/server/github-pr-lookup-D16NGsSO.js +0 -44
  498. package/server/hume-ccTf4wTX.js +0 -3
  499. package/server/inspect-agent-Brtz0URj.js +0 -2
  500. package/server/label-reconciler-B4iOAjlC.js +0 -113
  501. package/server/launcher-generator-BBWG_SiS.js +0 -473
  502. package/server/merge-ops-CR44oU9-.js +0 -2
  503. package/server/merge-set-bUqbm3yc.js +0 -3
  504. package/server/merge-sync-BJYeOODr.js +0 -3
  505. package/server/merge-verification-BkaOqPsw.js +0 -124
  506. package/server/pipeline-membership-mY3GprlK.js +0 -420
  507. package/server/project-repos-DXKQsc_m.js +0 -3
  508. package/server/projects-vjjcmiN8.js +0 -3
  509. package/server/public/assets/index-CWeMerGO.js +0 -804
  510. package/server/public/assets/index-CenuJ3Cw.css +0 -1
  511. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
  512. package/server/rally-zhhtXuDP.js +0 -3
  513. package/server/record-CN0pj4_5.js +0 -3
  514. package/server/record-update-bLJxAXH4.js +0 -3
  515. package/server/resume-BFv1PGpA.js +0 -3
  516. package/server/review-status-btEYlaxA.js +0 -3
  517. package/server/review-status-kZj_KyCk.js +0 -1470
  518. package/server/settings-66A6uvIA.js +0 -2
  519. package/server/spawn-planning-session-qUC2VWu3.js +0 -2
  520. package/server/specs-C8Wsn2XO.js +0 -3
  521. package/server/src-DtcUOZCq.js +0 -4826
  522. package/server/supervisor-FTJAIsAK.js +0 -2
  523. package/server/token-util-DuPuNriz.js +0 -3
  524. package/server/tracker-utils-B4ylXZQK.js +0 -3
  525. package/server/uat-train-B05BWkp-.js +0 -2
  526. package/server/uat-train-DDSrSoV1.js +0 -2152
  527. package/server/workflows-BQu4RFQ-.js +0 -2
  528. package/server/workspace-manager-CWT55qeI.js +0 -3
@@ -114,16 +114,80 @@ function validateCookiePath (path) {
114
114
  }
115
115
 
116
116
  /**
117
- * I have no idea why these values aren't allowed to be honest,
118
- * but Deno tests these. - Khafra
117
+ * <let-dig> ::= <letter> | <digit>
118
+ *
119
+ * <letter> ::= any one of the 52 alphabetic characters A through Z in
120
+ * upper case and a through z in lower case
121
+ *
122
+ * <digit> ::= any one of the ten digits 0 through 9r
123
+ *
124
+ * @see https://www.rfc-editor.org/rfc/rfc1034#section-3.5
125
+ * @param {number} code
126
+ */
127
+ function isLetterOrDigit (code) {
128
+ return (
129
+ (code >= 0x30 && code <= 0x39) || // 0-9
130
+ (code >= 0x41 && code <= 0x5A) || // A-Z
131
+ (code >= 0x61 && code <= 0x7A) // a-z
132
+ )
133
+ }
134
+
135
+ /**
136
+ * Validates a cookie domain against the "preferred name syntax".
137
+ *
138
+ * <domain> ::= <subdomain> | " "
139
+ * <subdomain> ::= <label> | <subdomain> "." <label>
140
+ * <label> ::= <let-dig> [ [ <ldh-str> ] <let-dig> ]
141
+ * <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
142
+ * <let-dig-hyp> ::= <let-dig> | "-"
143
+ *
144
+ * @see https://www.rfc-editor.org/rfc/rfc1034#section-3.5
145
+ * @see https://www.rfc-editor.org/rfc/rfc1123#section-2.1
146
+ * @see https://www.rfc-editor.org/rfc/rfc1035#section-2.3.4
119
147
  * @param {string} domain
120
148
  */
121
149
  function validateCookieDomain (domain) {
122
- if (
123
- domain.startsWith('-') ||
124
- domain.endsWith('.') ||
125
- domain.endsWith('-')
126
- ) {
150
+ // <domain> ::= <subdomain> | " "
151
+ if (domain === ' ') {
152
+ return
153
+ }
154
+
155
+ if (domain.length > 255) {
156
+ throw new Error('Invalid cookie domain')
157
+ }
158
+
159
+ let labelLength = 0
160
+
161
+ for (let i = 0; i < domain.length; ++i) {
162
+ const code = domain.charCodeAt(i)
163
+
164
+ if (code === 0x2E) {
165
+ if (labelLength === 0) {
166
+ throw new Error('Invalid cookie domain')
167
+ }
168
+
169
+ if (domain.charCodeAt(i - 1) === 0x2D) { // "-"
170
+ throw new Error('Invalid cookie domain')
171
+ }
172
+
173
+ labelLength = 0
174
+ continue
175
+ }
176
+
177
+ if (labelLength === 0 && !isLetterOrDigit(code)) {
178
+ throw new Error('Invalid cookie domain')
179
+ }
180
+
181
+ if (!isLetterOrDigit(code) && code !== 0x2D) { // "-"
182
+ throw new Error('Invalid cookie domain')
183
+ }
184
+
185
+ if (++labelLength > 63) {
186
+ throw new Error('Invalid cookie domain')
187
+ }
188
+ }
189
+
190
+ if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 0x2D) { // "-"
127
191
  throw new Error('Invalid cookie domain')
128
192
  }
129
193
  }
@@ -266,7 +330,13 @@ function stringify (cookie) {
266
330
 
267
331
  const [key, ...value] = part.split('=')
268
332
 
269
- out.push(`${key.trim()}=${value.join('=')}`)
333
+ const trimmedKey = key.trim()
334
+ const joinedValue = value.join('=')
335
+
336
+ validateCookieName(trimmedKey)
337
+ validateCookieValue(joinedValue)
338
+
339
+ out.push(`${trimmedKey}=${joinedValue}`)
270
340
  }
271
341
 
272
342
  return out.join('; ')
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "undici",
3
- "version": "8.8.0",
3
+ "version": "8.9.0",
4
4
  "description": "An HTTP/1.1 client, written from scratch for Node.js",
5
5
  "homepage": "https://undici.nodejs.org",
6
6
  "bugs": {
@@ -1,37 +1,193 @@
1
- import { On as listProjects, Tn as init_projects, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
2
- import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-DDlOIAML.js";
3
- import { M as listSessionNames, w as init_tmux } from "./tmux-R7N7y-Mh.js";
4
- import { c as getReviewStatusSync, l as init_review_status } from "./review-status-kZj_KyCk.js";
5
- import { b as init_agents, qn as getAgentState } from "./queries-CjNIf-Ub.js";
6
- import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
7
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
8
- import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-yPd___5E.js";
9
- import { d as readPlanSync, i as findPlanSync, o as init_io } from "./io-C9kF1wtJ.js";
10
- import { i as loadCloisterConfig, r as init_config } from "./config-CKxYiCmX.js";
11
- import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-C3QrAUd0.js";
12
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CDJk4pIp.js";
1
+ import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { Gn as init_projects, Jn as listProjects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
4
+ import { M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
5
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
6
+ import { b as init_agents, tr as getAgentState } from "./queries-C-MUZaIy.js";
7
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-CJ6BHjcD.js";
8
+ import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-C6ZduvuY.js";
9
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DzK385vD.js";
10
+ import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-B4Xdb4cY.js";
11
+ import { S as init_specs, d as readPlanSync, i as findPlanSync, o as init_io, x as findSpecByIssue } from "./io-B00PBNku.js";
12
+ import { a as readAutoSpawnOnFinalizeFlagAsync } from "./auto-spawn-consent-CQ9Bi9q6.js";
13
+ import { c as init_control_settings, f as isFlywheelAutoPickupBacklog } from "./control-settings-CiqGxXnc.js";
14
+ import { i as loadCloisterConfig, r as init_config } from "./config-Bi3u1VK7.js";
15
+ import { f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead } from "./github-app-CmNk0zLU.js";
16
+ import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-DWhqzliO.js";
17
+ import { r as activeOrderBookIssues } from "./flywheel-BHx8XuMr.js";
18
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BehTG1be.js";
19
+ import { t as recordDeadEndNeedsYou } from "./dead-end-trip-D8A3msX9.js";
20
+ import "./spawn-planning-session-pcF-YeFE.js";
13
21
  import { Effect } from "effect";
14
22
  import { existsSync, readdirSync } from "fs";
15
23
  import { join } from "path";
16
24
  import { readFile, readdir } from "fs/promises";
17
25
  import { exec } from "child_process";
18
26
  import { promisify } from "util";
19
- //#region ../../lib/cloister/orphan-proposed-reconciler.ts
20
- init_agents();
27
+ //#region ../../lib/cloister/autonomous-work-dispatch.ts
21
28
  init_activity_logger();
29
+ init_tmux();
30
+ init_tracker_utils();
22
31
  init_internal_token();
23
- init_projects();
32
+ init_lifecycle();
24
33
  init_review_status();
25
- init_tmux();
26
34
  init_io();
27
- init_lifecycle();
35
+ init_agents();
28
36
  init_github_app();
29
- init_tracker_utils();
37
+ init_pickup();
38
+ init_control_settings();
39
+ init_specs();
40
+ init_projects();
41
+ const RELEASE_CONTEXT_CACHE_MS = 5e3;
42
+ let autoPickupCache = null;
43
+ const activeBookCache = /* @__PURE__ */ new Map();
44
+ function getSharedIssues() {
45
+ const { getSharedIssueService } = (init_issue_service_singleton(), __toCommonJS(issue_service_singleton_exports));
46
+ return getSharedIssueService().getIssues();
47
+ }
48
+ async function defaultFindPlannedState(projectRoot, issueId) {
49
+ const entry = await Effect.runPromise(findSpecByIssue(projectRoot, issueId).pipe(Effect.catch(() => Effect.succeed(null))));
50
+ if (!entry) return null;
51
+ return {
52
+ status: entry.status,
53
+ itemCount: Array.isArray(entry.document.plan?.items) ? entry.document.plan.items.length : 0
54
+ };
55
+ }
56
+ function isPlannedState(state) {
57
+ return state !== null && (state.status === "proposed" || state.status === "active") && state.itemCount > 0;
58
+ }
59
+ async function cachedAutoPickup(deps, now) {
60
+ if (deps.isAutoPickupBacklog) return deps.isAutoPickupBacklog();
61
+ if (autoPickupCache && autoPickupCache.expiresAt > now) return autoPickupCache.value;
62
+ const value = isFlywheelAutoPickupBacklog();
63
+ autoPickupCache = {
64
+ value,
65
+ expiresAt: now + RELEASE_CONTEXT_CACHE_MS
66
+ };
67
+ return value;
68
+ }
69
+ async function cachedActiveBookIssues(projectRoot, deps, now) {
70
+ if (deps.activeBookIssues) return deps.activeBookIssues(projectRoot);
71
+ const cached = activeBookCache.get(projectRoot);
72
+ if (cached && cached.expiresAt > now) return cached.value;
73
+ const value = await activeOrderBookIssues(projectRoot);
74
+ activeBookCache.set(projectRoot, {
75
+ value,
76
+ expiresAt: now + RELEASE_CONTEXT_CACHE_MS
77
+ });
78
+ return value;
79
+ }
80
+ function emptyInput(labels, planned = false) {
81
+ return {
82
+ labels,
83
+ planned,
84
+ autoPickupBacklog: false,
85
+ activeBookMember: false,
86
+ autoSpawnOnFinalizeConsent: false
87
+ };
88
+ }
89
+ async function gatherAutonomousWorkDispatchInput(issueId, deps = {}) {
90
+ const normalizedIssueId = issueId.trim().toUpperCase();
91
+ let labels = null;
92
+ try {
93
+ const issue = (deps.getIssues ?? getSharedIssues)().find((candidate) => typeof candidate["identifier"] === "string" && candidate["identifier"].toUpperCase() === normalizedIssueId);
94
+ if (issue) labels = (Array.isArray(issue["labels"]) ? issue["labels"] : []).map((label) => typeof label === "string" ? label : label?.name ?? "").filter((label) => Boolean(label));
95
+ } catch {}
96
+ const labelDecision = decideAutonomousWorkDispatch({ ...emptyInput(labels, true) });
97
+ if (!labelDecision.allow && labelDecision.code !== "not-released") return emptyInput(labels);
98
+ let project = null;
99
+ let planned = deps.knownPlanned === true;
100
+ if (!planned) try {
101
+ project = (deps.resolveProject ?? resolveProjectFromIssueSync)(normalizedIssueId);
102
+ planned = Boolean(project && isPlannedState(await (deps.findPlannedState ?? defaultFindPlannedState)(project.projectPath, normalizedIssueId)));
103
+ } catch {
104
+ planned = false;
105
+ }
106
+ if (!planned) return emptyInput(labels);
107
+ if (new Set(labels?.map((label) => label.toLowerCase())).has("released")) return emptyInput(labels, true);
108
+ if (!project) try {
109
+ project = (deps.resolveProject ?? resolveProjectFromIssueSync)(normalizedIssueId);
110
+ } catch {
111
+ project = null;
112
+ }
113
+ const now = (deps.now ?? Date.now)();
114
+ const [autoPickupBacklog, activeIssues, autoSpawnOnFinalizeConsent] = await Promise.all([
115
+ cachedAutoPickup(deps, now).catch(() => false),
116
+ project ? cachedActiveBookIssues(project.projectPath, deps, now).catch(() => /* @__PURE__ */ new Set()) : /* @__PURE__ */ new Set(),
117
+ Promise.resolve((deps.readAutoSpawnConsent ?? readAutoSpawnOnFinalizeFlagAsync)(normalizedIssueId)).catch(() => false)
118
+ ]);
119
+ return {
120
+ labels,
121
+ planned: true,
122
+ autoPickupBacklog,
123
+ activeBookMember: activeIssues.has(normalizedIssueId),
124
+ autoSpawnOnFinalizeConsent
125
+ };
126
+ }
127
+ function decideAutonomousWorkDispatch(input) {
128
+ if (input.labels === null) return {
129
+ allow: false,
130
+ code: "labels-unavailable",
131
+ reason: "Autonomous work dispatch was refused because tracker labels are unavailable, so ready, released, parked, vetoed, objection, and epic state cannot be verified. Restore label access or run pan start manually."
132
+ };
133
+ const labels = new Set(input.labels.map((label) => label.toLowerCase()));
134
+ const hasLabel = (label) => labels.has(label);
135
+ if (hasLabel("parked") || LEGACY_PARKED_LABELS.some(hasLabel)) return {
136
+ allow: false,
137
+ code: "parked",
138
+ reason: "Autonomous work dispatch was refused because the issue is parked. Remove the parked label before allowing autonomous work, or run pan start manually."
139
+ };
140
+ if (hasLabel("vetoed")) return {
141
+ allow: false,
142
+ code: "vetoed",
143
+ reason: "Autonomous work dispatch was refused because the issue is vetoed. Remove the veto before allowing autonomous work, or run pan start manually."
144
+ };
145
+ if (hasLabel("objection")) return {
146
+ allow: false,
147
+ code: "objection",
148
+ reason: "Autonomous work dispatch was refused because the issue has an open objection. Resolve the objection before allowing autonomous work, or run pan start manually."
149
+ };
150
+ if (hasLabel("epic")) return {
151
+ allow: false,
152
+ code: "epic",
153
+ reason: "Autonomous work dispatch was refused because the issue is an epic container. Start one of its child issues instead."
154
+ };
155
+ if (!hasLabel("ready")) return {
156
+ allow: false,
157
+ code: "not-ready",
158
+ reason: "Autonomous work dispatch was refused because the issue is not ready. Add the ready label before allowing autonomous work, or run pan start manually."
159
+ };
160
+ if (!input.planned) return {
161
+ allow: false,
162
+ code: "not-planned",
163
+ reason: "Autonomous work dispatch was refused because no active implementation plan with work items is available. Complete planning or run pan start manually."
164
+ };
165
+ const releaseSource = hasLabel("released") ? "released-label" : input.autoPickupBacklog ? "auto-pickup" : input.activeBookMember ? "active-order-book" : input.autoSpawnOnFinalizeConsent ? "planning-consent" : null;
166
+ if (!releaseSource) return {
167
+ allow: false,
168
+ code: "not-released",
169
+ reason: "Autonomous work dispatch was refused because the issue is not released and no release override applies. Add the released label, enable auto-pickup, include the issue in the active order book, or launch planning with auto-start; alternatively, run pan start manually."
170
+ };
171
+ return {
172
+ allow: true,
173
+ releaseSource
174
+ };
175
+ }
176
+ //#endregion
177
+ //#region ../../lib/cloister/orphan-proposed-reconciler.ts
178
+ /**
179
+ * Reconciles proposed specs only after the shared autonomous-work pickup gate
180
+ * passes; explicit planning auto-start consent is a release source, not a bypass
181
+ * for readiness, tracker-label availability, or blocker labels.
182
+ */
183
+ init_projects();
30
184
  init_config();
31
185
  init_issue_closed();
32
186
  const DEFAULT_ATTEMPT_INTERVAL_MS = 300 * 1e3;
187
+ const MAX_PICKUP_REFUSAL_REASONS = 512;
33
188
  const execAsync = promisify(exec);
34
189
  const attemptCooldowns = /* @__PURE__ */ new Map();
190
+ const pickupRefusalReasons = /* @__PURE__ */ new Map();
35
191
  const terminalClosedIssueIds = /* @__PURE__ */ new Set();
36
192
  let scanInFlight = false;
37
193
  function hasReviewPipelinePresence(status) {
@@ -90,8 +246,17 @@ async function defaultHasOpenPrForBranch(projectPath, issueId) {
90
246
  const branch = `feature/${issueId.toLowerCase()}`;
91
247
  try {
92
248
  const resolved = resolveGitHubIssueSync(issueId);
93
- if (isGitHubAppConfigured() && resolved.isGitHub) return (await Effect.runPromise(listPullRequestsForHead(resolved.owner, resolved.repo, branch, "open"))).length > 0;
94
- const result = await execAsync(`gh pr list --head ${branch} --state open --json number --limit 1`, { cwd: projectPath });
249
+ if (!resolved.isGitHub) {
250
+ logReconcilerDiagnostic("open-pr-check-skipped", {
251
+ projectPath,
252
+ issueId,
253
+ branch,
254
+ reason: "non-github-tracker"
255
+ });
256
+ return false;
257
+ }
258
+ if (isGitHubAppConfigured()) return (await Effect.runPromise(listPullRequestsForHead(resolved.owner, resolved.repo, branch, "open"))).length > 0;
259
+ const result = await execAsync(`gh pr list --repo ${resolved.owner}/${resolved.repo} --head ${branch} --state open --json number --limit 1`, { cwd: projectPath });
95
260
  const stdout = typeof result === "string" ? result : result.stdout;
96
261
  const prs = JSON.parse(stdout ?? "[]");
97
262
  return Array.isArray(prs) && prs.length > 0;
@@ -166,7 +331,7 @@ function classifySpawnSkip(status, body) {
166
331
  if (status === 422 && /already closed|closed issue|cannot start an agent for a closed issue/i.test(error)) return "closed-issue";
167
332
  return "spawn-failed";
168
333
  }
169
- async function spawnWorkAgentThroughAgentsEndpoint(issueId, dashboardOrigin = internalDashboardOrigin()) {
334
+ async function spawnWorkAgentThroughAgentsEndpoint(issueId, dashboardOrigin = internalDashboardOrigin(), autoSpawnConsentRequired = false) {
170
335
  const internalToken = getInternalTokenSync();
171
336
  const response = await fetch(new URL("/api/agents", dashboardOrigin), {
172
337
  method: "POST",
@@ -177,13 +342,16 @@ async function spawnWorkAgentThroughAgentsEndpoint(issueId, dashboardOrigin = in
177
342
  },
178
343
  body: JSON.stringify({
179
344
  issueId,
180
- role: "work"
345
+ role: "work",
346
+ startedBy: "orphan-proposed-reconciler",
347
+ autoSpawnConsentRequired
181
348
  })
182
349
  });
183
350
  const body = await response.json().catch(() => ({}));
184
351
  const agentId = typeof body["agentId"] === "string" ? body["agentId"] : `agent-${issueId.toLowerCase()}`;
185
352
  if (response.ok && body["success"] !== false) return {
186
353
  spawned: true,
354
+ ...body["startingContainers"] === true ? { queued: true } : {},
187
355
  agentId
188
356
  };
189
357
  return {
@@ -208,7 +376,8 @@ async function triggerRebuildAndStart(issueId, dashboardOrigin = internalDashboa
208
376
  "content-type": "application/json",
209
377
  origin: dashboardOrigin,
210
378
  ...internalToken ? { [INTERNAL_TOKEN_HEADER]: internalToken } : {}
211
- }
379
+ },
380
+ body: JSON.stringify({ startedBy: "workspace-rebuild-recovery" })
212
381
  });
213
382
  const body = await response.json().catch(() => ({}));
214
383
  if (response.ok && body["success"] !== false) return { triggered: true };
@@ -246,10 +415,30 @@ function emitReconcilerActivity(level, message, details = {}, issueId = "ALL") {
246
415
  function logReconcilerDiagnostic(kind, info = {}) {
247
416
  console.debug(`[orphan-proposed-reconciler] ${kind}`, info);
248
417
  }
418
+ async function recordPickupRefusal(issueId, now, decision) {
419
+ const reason = `pickup-gate:${decision.code}`;
420
+ logReconcilerDiagnostic("spawn-skipped", {
421
+ issueId,
422
+ reason
423
+ });
424
+ attemptCooldowns.set(issueId, now);
425
+ if (pickupRefusalReasons.get(issueId) !== decision.reason) {
426
+ if (!pickupRefusalReasons.has(issueId) && pickupRefusalReasons.size >= MAX_PICKUP_REFUSAL_REASONS) {
427
+ const oldestIssueId = pickupRefusalReasons.keys().next().value;
428
+ if (oldestIssueId) pickupRefusalReasons.delete(oldestIssueId);
429
+ }
430
+ pickupRefusalReasons.set(issueId, decision.reason);
431
+ await recordDeadEndNeedsYou(issueId, "orphan-proposed-pickup-gate", "proposed", decision.reason);
432
+ }
433
+ return [`Skipped orphan proposed spec ${issueId}: ${reason}`];
434
+ }
435
+ async function defaultEvaluatePickupGate(issueId) {
436
+ return decideAutonomousWorkDispatch(await gatherAutonomousWorkDispatchInput(issueId, { knownPlanned: true }));
437
+ }
249
438
  /**
250
- * PAN-1908: reactive orphan-proposed handler. When a spec reaches `proposed`
251
- * and no work agent is running/starting, spawn a work agent for that issue
252
- * without scanning all project specs.
439
+ * PAN-1908: reactive orphan-proposed handler. When a spec reaches `proposed`,
440
+ * the autonomous-work pickup gate allows it, and no work agent is
441
+ * running/starting, spawn a work agent without scanning all project specs.
253
442
  */
254
443
  async function handleOrphanProposedSpec(issueId, options = {}) {
255
444
  const upperIssueId = issueId.trim().toUpperCase();
@@ -315,8 +504,20 @@ async function handleOrphanProposedSpec(issueId, options = {}) {
315
504
  });
316
505
  return [];
317
506
  }
507
+ let pickupGate;
508
+ try {
509
+ pickupGate = await (options.evaluatePickupGate ?? defaultEvaluatePickupGate)(upperIssueId);
510
+ } catch (error) {
511
+ pickupGate = {
512
+ allow: false,
513
+ code: "labels-unavailable",
514
+ reason: `Autonomous work dispatch was refused because pickup evaluation failed: ${error instanceof Error ? error.message : String(error)}`
515
+ };
516
+ }
517
+ if (!pickupGate.allow) return recordPickupRefusal(upperIssueId, now, pickupGate);
518
+ pickupRefusalReasons.delete(upperIssueId);
318
519
  const agentId = `agent-${issueLower}`;
319
- const agentState = await Effect.runPromise(getAgentState(agentId).pipe(Effect.catch(() => Effect.succeed(null))));
520
+ const agentState = options.getAgentStateForIssue ? await options.getAgentStateForIssue(agentId) : await Effect.runPromise(getAgentState(agentId).pipe(Effect.catch(() => Effect.succeed(null))));
320
521
  if (agentState?.status === "starting" || agentState?.status === "running") {
321
522
  logReconcilerDiagnostic("spawn-skipped", {
322
523
  issueId: upperIssueId,
@@ -331,7 +532,7 @@ async function handleOrphanProposedSpec(issueId, options = {}) {
331
532
  });
332
533
  return [];
333
534
  }
334
- if (hasIssueScopedSession(await Effect.runPromise(listSessionNames().pipe(Effect.catch(() => Effect.succeed([])))), agentId)) {
535
+ if (hasIssueScopedSession(options.tmuxSessionNames ?? await Effect.runPromise(listSessionNames().pipe(Effect.catch(() => Effect.succeed([])))), agentId)) {
335
536
  logReconcilerDiagnostic("spawn-skipped", {
336
537
  issueId: upperIssueId,
337
538
  reason: "issue-scoped-session"
@@ -385,15 +586,17 @@ async function handleOrphanProposedSpec(issueId, options = {}) {
385
586
  }
386
587
  attemptCooldowns.set(upperIssueId, now);
387
588
  try {
388
- const spawn = await (options.spawnWorkAgent ?? ((id) => spawnWorkAgentThroughAgentsEndpoint(id, options.dashboardOrigin)))(upperIssueId);
589
+ const autoSpawnConsentRequired = pickupGate.releaseSource === "planning-consent";
590
+ const spawn = await (options.spawnWorkAgent ?? ((id, required) => spawnWorkAgentThroughAgentsEndpoint(id, options.dashboardOrigin, required)))(upperIssueId, autoSpawnConsentRequired);
389
591
  if (spawn.spawned) {
390
- emitReconcilerActivity("success", `Started work agent for ${upperIssueId} — proposed spec had tasks but no running agent`, {
592
+ emitReconcilerActivity("success", spawn.queued ? `Queued container startup for ${upperIssueId} before work-agent spawn` : `Started work agent for ${upperIssueId} — proposed spec had tasks but no running agent`, {
391
593
  issueId: upperIssueId,
392
594
  agentId: spawn.agentId,
595
+ queued: spawn.queued === true,
393
596
  projectKey,
394
597
  projectPath
395
598
  }, upperIssueId);
396
- return [`Spawned work agent for orphan proposed spec ${upperIssueId}`];
599
+ return [spawn.queued ? `Queued container startup for orphan proposed spec ${upperIssueId}` : `Spawned work agent for orphan proposed spec ${upperIssueId}`];
397
600
  }
398
601
  const reason = spawn.skippedReason ?? "spawn-failed";
399
602
  if (reason === "closed-issue") {
@@ -444,6 +647,8 @@ async function reconcileOrphanProposedSpecs(options = {}) {
444
647
  try {
445
648
  const actions = [];
446
649
  const candidates = await findOrphanProposedSpecsForReconciler(options);
650
+ const liveCandidateIds = new Set(candidates.map((candidate) => candidate.issueId));
651
+ for (const issueId of pickupRefusalReasons.keys()) if (!liveCandidateIds.has(issueId)) pickupRefusalReasons.delete(issueId);
447
652
  for (const candidate of candidates) {
448
653
  let planDoc;
449
654
  try {
@@ -458,6 +663,7 @@ async function reconcileOrphanProposedSpecs(options = {}) {
458
663
  const result = await handleOrphanProposedSpec(candidate.issueId, {
459
664
  spawnWorkAgent: options.spawnWorkAgent,
460
665
  hasOpenPrForBranch: options.hasOpenPrForBranch,
666
+ evaluatePickupGate: options.evaluatePickupGate,
461
667
  dashboardOrigin: options.dashboardOrigin,
462
668
  config: {
463
669
  enabled: true,
@@ -470,7 +676,9 @@ async function reconcileOrphanProposedSpecs(options = {}) {
470
676
  spec: {
471
677
  path: candidate.specPath,
472
678
  doc: planDoc
473
- }
679
+ },
680
+ tmuxSessionNames: options.tmuxSessionNames,
681
+ getAgentStateForIssue: options.getAgentStateForIssue
474
682
  });
475
683
  actions.push(...result);
476
684
  }
@@ -480,6 +688,6 @@ async function reconcileOrphanProposedSpecs(options = {}) {
480
688
  }
481
689
  }
482
690
  //#endregion
483
- export { spawnWorkAgentThroughAgentsEndpoint as a, reconcileOrphanProposedSpecs as i, handleOrphanProposedSpec as n, triggerRebuildAndStart as o, hasReviewPipelinePresence as r, findOrphanProposedSpecsForReconciler as t };
691
+ export { spawnWorkAgentThroughAgentsEndpoint as a, gatherAutonomousWorkDispatchInput as c, reconcileOrphanProposedSpecs as i, handleOrphanProposedSpec as n, triggerRebuildAndStart as o, hasReviewPipelinePresence as r, decideAutonomousWorkDispatch as s, findOrphanProposedSpecsForReconciler as t };
484
692
 
485
- //# sourceMappingURL=orphan-proposed-reconciler-BvKkWMJQ.js.map
693
+ //# sourceMappingURL=orphan-proposed-reconciler-B6vJHxtX.js.map
@@ -1,2 +1,2 @@
1
- import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-BvKkWMJQ.js";
1
+ import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-B6vJHxtX.js";
2
2
  export { handleOrphanProposedSpec };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@overdeck/desktop-server",
3
- "version": "0.45.24",
3
+ "version": "0.47.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@overdeck/desktop-server",
9
- "version": "0.45.24",
9
+ "version": "0.47.0",
10
10
  "dependencies": {
11
11
  "@effect/platform-node": "4.0.0-beta.73",
12
12
  "@google-cloud/speech": "7.3.1",
@@ -37,9 +37,9 @@
37
37
  }
38
38
  },
39
39
  "node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared": {
40
- "version": "4.0.0-beta.101",
41
- "resolved": "https://registry.npmjs.org/@effect/platform-node-shared/-/platform-node-shared-4.0.0-beta.101.tgz",
42
- "integrity": "sha512-g4L7XiyJSNJLJVhlslyg2zBCQsoKQf1y1gd+Yfd+3wD9ymC+m7ymbd/5FGqnT1aXV6E2AwRr4D/R1eyRUikvWQ==",
40
+ "version": "4.0.0-beta.102",
41
+ "resolved": "https://registry.npmjs.org/@effect/platform-node-shared/-/platform-node-shared-4.0.0-beta.102.tgz",
42
+ "integrity": "sha512-gVd793I72MrkX4dXo7eYtRKfNj0RW4eMRfVEKEJI16h2+mBDCzQ+gqMrog2hSTHQnaIbvbYShNQ4TVGuRCYZeQ==",
43
43
  "license": "MIT",
44
44
  "dependencies": {
45
45
  "@types/ws": "^8.18.1",
@@ -49,13 +49,13 @@
49
49
  "node": ">=18.0.0"
50
50
  },
51
51
  "peerDependencies": {
52
- "effect": "^4.0.0-beta.101"
52
+ "effect": "^4.0.0-beta.102"
53
53
  }
54
54
  },
55
55
  "node_modules/@google-cloud/common": {
56
- "version": "6.0.1",
57
- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-6.0.1.tgz",
58
- "integrity": "sha512-1uvKzbmAWUdchIYRsg0f4rUmezOamWuVBSWAPAhnYoUE5OiPEx6v6JOxFIdr3MsrqV+6fyLV3EI1vMPlHoeRvw==",
56
+ "version": "6.1.0",
57
+ "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-6.1.0.tgz",
58
+ "integrity": "sha512-Ohjxjvusr65+SiEVBrilpyn1ir9CM8ZqWjcf7bA8ph1GCunxI6bbwtcl7iGl67A7Lr4Nz7WpNzITNETwggc7pw==",
59
59
  "license": "Apache-2.0",
60
60
  "dependencies": {
61
61
  "@google-cloud/projectify": "^4.0.0",
@@ -63,7 +63,7 @@
63
63
  "arrify": "^2.0.0",
64
64
  "duplexify": "^4.1.3",
65
65
  "extend": "^3.0.2",
66
- "google-auth-library": "^10.0.0-rc.1",
66
+ "google-auth-library": "^10.6.2",
67
67
  "html-entities": "^2.5.2",
68
68
  "retry-request": "^8.0.0",
69
69
  "teeny-request": "^10.0.0"
@@ -446,9 +446,9 @@
446
446
  }
447
447
  },
448
448
  "node_modules/@types/node": {
449
- "version": "26.1.1",
450
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
451
- "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
449
+ "version": "26.1.2",
450
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
451
+ "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
452
452
  "license": "MIT",
453
453
  "dependencies": {
454
454
  "undici-types": "~8.3.0"
@@ -1033,9 +1033,9 @@
1033
1033
  }
1034
1034
  },
1035
1035
  "node_modules/gaxios": {
1036
- "version": "7.2.0",
1037
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.2.0.tgz",
1038
- "integrity": "sha512-CUVb4wcYe+771XevyH6HtGmXFAGGKkIC3kswAP8Z1JCe0j80JMaTPZH930DWFrvo0atjh18Arc0pEyUCWa5bfg==",
1036
+ "version": "7.3.0",
1037
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.3.0.tgz",
1038
+ "integrity": "sha512-RB5vLV+vvQeoFPCX4QMK6/hjVkbIamPp1QSUD0CiZcnj12qbpiL+pLbYtgD+oZkWl0tl9z+o2Utp+MpM3QRhBA==",
1039
1039
  "license": "Apache-2.0",
1040
1040
  "dependencies": {
1041
1041
  "extend": "^3.0.2",
@@ -1091,9 +1091,9 @@
1091
1091
  }
1092
1092
  },
1093
1093
  "node_modules/google-auth-library": {
1094
- "version": "10.9.0",
1095
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.9.0.tgz",
1096
- "integrity": "sha512-xtvUqvINPhTaBm7nXqlYPcrMHJPm1lCNdSovxnKKhTm+4JsvQ+KGVYJViLoH9Yxu8w+T0Qv5HubzYT9BLrppJg==",
1094
+ "version": "10.9.1",
1095
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.9.1.tgz",
1096
+ "integrity": "sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw==",
1097
1097
  "license": "Apache-2.0",
1098
1098
  "dependencies": {
1099
1099
  "base64-js": "^1.3.0",
@@ -1108,9 +1108,9 @@
1108
1108
  }
1109
1109
  },
1110
1110
  "node_modules/google-gax": {
1111
- "version": "5.0.7",
1112
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-5.0.7.tgz",
1113
- "integrity": "sha512-EhiqaWWJ+9h7sCcKJTsoo6tMcjokVHhWsbSuWCnZJT4vIBP3y4mAoFLnt9SzgkVZeq24ZsFaArr06nnYYku2yA==",
1111
+ "version": "5.0.8",
1112
+ "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-5.0.8.tgz",
1113
+ "integrity": "sha512-M4vpZcXQIC1gqIVGQ7eaU3jXQA6zecStyTXu514TYfThlgSurYJOxHZo9fzU6hAgwPWvuEynAVHWyaIk80VeEA==",
1114
1114
  "license": "Apache-2.0",
1115
1115
  "dependencies": {
1116
1116
  "@grpc/grpc-js": "^1.12.6",
@@ -1646,9 +1646,9 @@
1646
1646
  }
1647
1647
  },
1648
1648
  "node_modules/retry-request": {
1649
- "version": "8.0.3",
1650
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-8.0.3.tgz",
1651
- "integrity": "sha512-qqoc4kkGgP9cmQDWELlOpAmfgJOg0Yi7MT82ZjiPWu451ayju4itwomjM4/dBEliify8C1b3tSaeCOldugtwPQ==",
1649
+ "version": "8.0.4",
1650
+ "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-8.0.4.tgz",
1651
+ "integrity": "sha512-pI6/7eabUYkZxamkOq0g0uMxKLLGnjzhefY+vL8bVXag5rto4OU2YBTPytWLuHH7aEKD6fn7kJycQfid0Mwnkw==",
1652
1652
  "license": "MIT",
1653
1653
  "dependencies": {
1654
1654
  "extend": "^3.0.2",
@@ -1938,9 +1938,9 @@
1938
1938
  "license": "MIT"
1939
1939
  },
1940
1940
  "node_modules/teeny-request": {
1941
- "version": "10.1.3",
1942
- "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-10.1.3.tgz",
1943
- "integrity": "sha512-5yDliI1uWkYPo7W+Zvrxg6YmoWuj5iC5EydewqrRTvc68nyMTZhlPPlLg6cptUGfbQAb+N9XDPDPzF6N081lug==",
1941
+ "version": "10.1.4",
1942
+ "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-10.1.4.tgz",
1943
+ "integrity": "sha512-R1Cg4Vu0UULeDfHL/kjABLaTW++9yD/B6n2g48y5dJ04hsEaxcfmAqbNDzNsbqAYJyIpZafjklLG9YxRu9uzOg==",
1944
1944
  "license": "Apache-2.0",
1945
1945
  "dependencies": {
1946
1946
  "http-proxy-agent": "^7.0.0",
@@ -1962,9 +1962,9 @@
1962
1962
  }
1963
1963
  },
1964
1964
  "node_modules/undici": {
1965
- "version": "8.8.0",
1966
- "resolved": "https://registry.npmjs.org/undici/-/undici-8.8.0.tgz",
1967
- "integrity": "sha512-ubshXMXwF3MQIMF1y/WxZdNBnjEKeSg2wF5mcGUtU55YTw34tnVVpKRlLf7ruDXZ5344KokPVX4RBx1wJm64Bw==",
1965
+ "version": "8.9.0",
1966
+ "resolved": "https://registry.npmjs.org/undici/-/undici-8.9.0.tgz",
1967
+ "integrity": "sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==",
1968
1968
  "license": "MIT",
1969
1969
  "engines": {
1970
1970
  "node": ">=22.19.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@overdeck/desktop-server",
3
- "version": "0.45.24",
3
+ "version": "0.47.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {