@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
@@ -1,33 +1,34 @@
1
- import { Br as getOverdeckHome, Jn as extractPrefixSync, Nr as encodeClaudeProjectDir, Tn as init_projects, Vr as init_paths, Yn as init_issue_id, dr as TmuxError, ir as FsError, mr as init_errors, zn as resolveProjectFromIssueSync } from "./config-yaml-DvyMuOle.js";
2
- import { O as killSessionSync, U as sessionExistsSync, a as capturePaneSync, i as capturePane, j as listPaneValuesSync, u as detectTerminalApiErrorSync, w as init_tmux, z as sendKeys } from "./tmux-ftABRAmc.js";
3
- import { r as CLAUDE_CODE_BEHAVIOR } from "./src-U7_kTPEE.js";
4
- import { c as getReviewStatusSync, l as init_review_status } from "./review-status-A7quS5KJ.js";
5
- import { Bn as getAgentDir, Cr as getAgentRuntimeStateSync, G as resumeAgent, Qn as markAgentTroubled, Sr as getAgentRuntimeState, Tr as saveAgentRuntimeState, Wn as getAgentStateSync, X as messageAgent, a as listRunningAgentsSync, b as init_agents, ir as saveAgentStateSync, it as init_activity, lt as spawnAgent, nt as getLatestSessionIdSync, ot as createOhmypiRuntimeSync, st as init_ohmypi, un as init_pi_fifo, vn as determineModel } from "./queries-6d7Cdtm7.js";
6
- import { c as logDeaconEventSync, o as init_persistent_logger } from "./session-history-CVZDpS3c.js";
7
- import { t as init_behavior } from "./behavior-B_-4EKF3.js";
8
- import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-B4itFzDo.js";
9
- import { m as readWorkspacePlanSync, o as init_io } from "./io-B3_AHDfr.js";
10
- import { n as init_launcher_generator } from "./launcher-generator-CHVm7bGT.js";
11
- import { i as createCodexRuntimeSync, l as init_codex } from "./codex-TmSi-yTv.js";
12
- import { n as init_harness_binary } from "./harness-binary-CVio2m-u.js";
13
- import { f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, s as init_control_settings } from "./control-settings-aP1ANIlI.js";
14
- import { l as init_dag, o as getDispatchableItems } from "./dag-CdOjJVDT.js";
15
- import { a as loadCloisterConfigSync, r as init_config, t as DEFAULT_CLOISTER_CONFIG } from "./config-DjLOdbgT.js";
16
- import { a as init_jsonl_parser, i as getSessionFilesSync, r as getProjectDirsSync, s as parseClaudeSessionSync } from "./jsonl-parser-Dhflo1SH.js";
17
- import { t as recordRecoveryFailure } from "./recovery-trip-BJtIQuag.js";
18
- import "node:path";
1
+ import { Fr as init_errors, Gn as init_projects, Mr as TmuxError, Tr as FsError, ar as resolveProjectFromIssueSync, ci as init_paths, ei as encodeClaudeProjectDir, gr as init_issue_id, hr as extractPrefixSync, si as getOverdeckHome, ui as packageRoot } from "./config-yaml-CmOPzmBb.js";
2
+ import { O as killSessionSync, U as sessionExistsSync, a as capturePaneSync, i as capturePane, j as listPaneValuesSync, u as detectTerminalApiErrorSync, w as init_tmux, z as sendKeys } from "./tmux-B1Wbxz5o.js";
3
+ import { c as getRuntimeBehavior, i as CLAUDE_CODE_BEHAVIOR } from "./src-CRmCHlma.js";
4
+ import { f as init_review_status, u as getReviewStatusSync } from "./review-status-yljtTd-q.js";
5
+ import { $n as getAgentDir, Cn as materializeAcpContextFile, Fr as getAgentRuntimeState, G as resumeAgent, Ht as BRIDGE_TOKEN_HEADER, Ir as getAgentRuntimeStateSync, On as determineModel, Rr as saveAgentRuntimeState, Sn as init_context, Ut as init_bridge_token, X as messageAgent, _r as saveAgentStateSync, a as listRunningAgentsSync, at as init_activity, b as init_agents, ct as init_ohmypi, dr as markAgentTroubled, n as init_queries, r as listAgentStates, rr as getAgentStateSync, rt as getLatestSessionIdSync, st as createOhmypiRuntimeSync, ut as spawnAgent, vn as init_pi_fifo } from "./queries-DHJm7bTd.js";
6
+ import { c as logDeaconEventSync, o as init_persistent_logger } from "./session-history-BUyK29eq.js";
7
+ import { t as init_behavior } from "./behavior-CfIg6pKp.js";
8
+ import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-DZ8Zn2nQ.js";
9
+ import { m as readWorkspacePlanSync, o as init_io } from "./io-VHvc0Ssp.js";
10
+ import { f as init_launcher_generator } from "./tmux-dedup-DbN6MGzM.js";
11
+ import { _ as tmuxKillSession, g as tmuxCreateSession, h as init_tmux_cli, i as createCodexRuntimeSync, l as init_codex, v as tmuxSessionExists } from "./codex-Drlf5Xhf.js";
12
+ import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-DqkftwTb.js";
13
+ import { f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, s as init_control_settings } from "./control-settings-C7DUehE1.js";
14
+ import { l as init_dag, o as getDispatchableItems } from "./dag-ombYYt4s.js";
15
+ import { a as loadCloisterConfigSync, r as init_config, t as DEFAULT_CLOISTER_CONFIG } from "./config-B2IMcBxx.js";
16
+ import { a as init_jsonl_parser, i as getSessionFilesSync, r as getProjectDirsSync, s as parseClaudeSessionSync } from "./jsonl-parser-DJOH_O-w.js";
17
+ import { t as recordRecoveryFailure } from "./recovery-trip-eJe26h-f.js";
18
+ import { join } from "node:path";
19
19
  import { Effect } from "effect";
20
20
  import { existsSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "fs";
21
21
  import { join as join$1 } from "path";
22
22
  import { homedir } from "os";
23
23
  import "node:os";
24
- import "node:fs";
24
+ import { existsSync as existsSync$1, readFileSync as readFileSync$1, rmSync as rmSync$1, statSync as statSync$1 } from "node:fs";
25
25
  import { readFile, readdir, stat as stat$1 } from "fs/promises";
26
26
  import { exec } from "node:child_process";
27
27
  import { promisify } from "node:util";
28
28
  import { exec as exec$1 } from "child_process";
29
29
  import { promisify as promisify$1 } from "util";
30
30
  import "node:crypto";
31
+ import { request } from "node:http";
31
32
  //#region ../../lib/agent-input-detection.ts
32
33
  init_paths();
33
34
  init_issue_id();
@@ -36,13 +37,16 @@ init_behavior();
36
37
  init_persistent_logger();
37
38
  init_review_status();
38
39
  init_io();
40
+ init_tmux_cli();
39
41
  init_harness_binary();
40
42
  init_codex();
41
43
  init_launcher_generator();
42
44
  init_dag();
45
+ init_bridge_token();
43
46
  init_ohmypi();
44
47
  init_activity();
45
48
  init_agents();
49
+ init_queries();
46
50
  init_tmux();
47
51
  init_errors();
48
52
  const ANSI_PATTERN = /\x1b\[[0-9;?]*[ -/]*[@-~]/g;
@@ -50,6 +54,7 @@ const MAX_PROMPT_CHARS = 2e3;
50
54
  const PANE_DETECTION_CACHE_TTL_MS = 1e4;
51
55
  const MAX_PANE_DETECTION_CACHE_ENTRIES = 256;
52
56
  const MAX_CONCURRENT_PANE_DETECTIONS = 4;
57
+ const MAX_MENU_FOOTER_LINES = 4;
53
58
  const paneDetectionCache = /* @__PURE__ */ new Map();
54
59
  const paneDetectionInFlight = /* @__PURE__ */ new Map();
55
60
  const paneDetectionWaiters = [];
@@ -103,6 +108,32 @@ function isCurrentPromptIndex(lines, index, maxTrailingLines = 0) {
103
108
  if (index < 0) return false;
104
109
  return lines.length - index <= maxTrailingLines + 1;
105
110
  }
111
+ /**
112
+ * PAN-3068 — a harness footer hint line: key/action pairs separated by "·",
113
+ * e.g. "Esc to cancel · Tab to amend · ctrl+e to explain". Every segment must
114
+ * open with a key name, so real post-answer output ("● Bash(git status)") never
115
+ * qualifies.
116
+ */
117
+ function looksLikeHarnessFooterHint(line) {
118
+ const segments = line.split("·").map((segment) => segment.trim()).filter(Boolean);
119
+ if (segments.length === 0) return false;
120
+ return segments.every((segment) => /^(?:esc(?:ape)?|tab|enter|return|space|backspace|shift\+\S+|ctrl\+\S+|alt\+\S+|\?)\b/i.test(segment) || /^press\s+\S+/i.test(segment));
121
+ }
122
+ /**
123
+ * PAN-3068 — the permission menu is still on screen when nothing but harness
124
+ * footer chrome follows its final option. Claude Code renders "Esc to cancel ·
125
+ * Tab to amend · ctrl+e to explain" below "3. No", so the old rule (the option
126
+ * must be the literal last pane line) meant Claude permission prompts were
127
+ * *never* detected — agents froze on a permission gate while the dashboard
128
+ * reported them healthy and working. Real output below the menu means the
129
+ * prompt was answered and scrolled, so it still clears.
130
+ */
131
+ function isPermissionMenuStillOnScreen(lines, menuEndIndex) {
132
+ if (menuEndIndex < 0) return false;
133
+ const trailing = lines.slice(menuEndIndex + 1);
134
+ if (trailing.length > MAX_MENU_FOOTER_LINES) return false;
135
+ return trailing.every(looksLikeHarnessFooterHint);
136
+ }
106
137
  function findPermissionMenuEndIndex(lines, menuStartIndex) {
107
138
  if (menuStartIndex < 0) return -1;
108
139
  const end = Math.min(lines.length, menuStartIndex + 8);
@@ -162,7 +193,7 @@ function detectAwaitingInputFromPaneSync(pane, options = {}) {
162
193
  if (looksLikeClaudePermissionMenu(recentText) && looksLikePermissionText(recentText)) {
163
194
  const menuIndex = lastIndexMatching(lines, (line) => /❯?\s*1\.\s*Yes\b/i.test(line));
164
195
  const menuEndIndex = findPermissionMenuEndIndex(lines, menuIndex);
165
- if (isRecentPromptIndex(lines, menuIndex) && isCurrentPromptIndex(lines, menuEndIndex)) return {
196
+ if (isRecentPromptIndex(lines, menuIndex) && isPermissionMenuStillOnScreen(lines, menuEndIndex)) return {
166
197
  reason: "tool_permission",
167
198
  prompt: snippetAround(lines, menuIndex, 10, 3)
168
199
  };
@@ -303,10 +334,37 @@ function parseCodexApprovalPrompt(text) {
303
334
  */
304
335
  init_errors();
305
336
  init_tracker_config();
306
- const execAsync$1 = promisify$1(exec$1);
337
+ const execAsync$2 = promisify$1(exec$1);
307
338
  function appendPaneDetectionKind(detection, kinds) {
308
339
  if (detection?.reason === "session_resume" && !kinds.includes("sessionResume")) kinds.push("sessionResume");
309
340
  if (detection?.reason === "rate_limit" && !kinds.includes("rateLimit")) kinds.push("rateLimit");
341
+ if (detection?.reason === "tool_permission" && !kinds.includes("permissionRequest")) kinds.push("permissionRequest");
342
+ }
343
+ /**
344
+ * PAN-3070 — the reasons that mean the agent is parked and cannot advance a
345
+ * single tool call until a human answers. An agent in this state must never be
346
+ * reported as `resolution: working` / `status: healthy`.
347
+ *
348
+ * `other` is deliberately excluded. PAN-1591 showed it is set by the generic
349
+ * pane/runtime/fallback detections that carry no answerable prompt — trusting it
350
+ * here would report agents as blocked while they are working normally.
351
+ */
352
+ const BLOCKING_AWAITING_INPUT_REASONS = new Set([
353
+ "tool_permission",
354
+ "user_question",
355
+ "disambiguation",
356
+ "confirmation",
357
+ "planning_done",
358
+ "session_resume",
359
+ "rate_limit"
360
+ ]);
361
+ /**
362
+ * PAN-3070 — the single predicate every "is this agent stuck?" surface consults.
363
+ * Takes the detection fields rather than a whole enrichment so the REST listing,
364
+ * the enrichment itself, and tests all judge from the same two values.
365
+ */
366
+ function isBlockedOnPendingInput(agent) {
367
+ return agent.hasPendingQuestion === true && BLOCKING_AWAITING_INPUT_REASONS.has(agent.pendingQuestionReason ?? "");
310
368
  }
311
369
  function isOwnActiveSpecialist(role) {
312
370
  return role === "review" || role === "test" || role === "ship";
@@ -357,7 +415,7 @@ async function getAgentWorkspacePromise(agentId) {
357
415
  const workspace = getAgentStateSync(agentId)?.workspace;
358
416
  if (workspace) return workspace;
359
417
  try {
360
- const { stdout: paneCwd } = await execAsync$1(`tmux display-message -t ${agentId} -p '#{pane_current_path}' 2>/dev/null`, { encoding: "utf-8" });
418
+ const { stdout: paneCwd } = await execAsync$2(`tmux display-message -t ${agentId} -p '#{pane_current_path}' 2>/dev/null`, { encoding: "utf-8" });
361
419
  const trimmed = paneCwd.trim();
362
420
  if (trimmed && existsSync(trimmed)) return trimmed;
363
421
  } catch {}
@@ -655,7 +713,10 @@ async function computeAgentEnrichmentPromise(agentId, startedAt, hasActiveSpecia
655
713
  pendingInputKinds,
656
714
  pendingAskUserQuestion,
657
715
  pendingProposedPlan: shouldSuppressPendingInput ? void 0 : scan.pendingProposedPlan,
658
- resolution: runtimeState?.resolution || "working",
716
+ resolution: isBlockedOnPendingInput({
717
+ hasPendingQuestion,
718
+ pendingQuestionReason: detection?.reason
719
+ }) ? "needs_input" : runtimeState?.resolution || "working",
659
720
  resolutionCount: runtimeState?.resolutionCount || 0,
660
721
  jsonlScan: scan
661
722
  };
@@ -986,6 +1047,277 @@ init_errors();
986
1047
  init_paths();
987
1048
  promisify(exec);
988
1049
  //#endregion
1050
+ //#region ../../lib/runtimes/acp.ts
1051
+ init_context();
1052
+ init_harness_binary();
1053
+ init_paths();
1054
+ init_behavior();
1055
+ const execAsync = promisify(exec);
1056
+ const HOST_REQUEST_TIMEOUT_MS = 5e3;
1057
+ const SPAWN_READY_TIMEOUT_MS = 3e4;
1058
+ const POLL_INTERVAL_MS = 100;
1059
+ var AcpSpawnTimeout = class extends Error {
1060
+ code = "ACP_SPAWN_TIMEOUT";
1061
+ constructor(agentId) {
1062
+ super(`ACP agent ${agentId} did not write acp-session-id within ${SPAWN_READY_TIMEOUT_MS}ms`);
1063
+ this.name = "AcpSpawnTimeout";
1064
+ }
1065
+ };
1066
+ var AcpRuntimeSync = class {
1067
+ name = "acp";
1068
+ provider;
1069
+ overdeckHome;
1070
+ execCommand;
1071
+ prepareLaunch;
1072
+ resolveAgentStates;
1073
+ constructor(options = {}) {
1074
+ this.provider = options.provider ?? "kimi";
1075
+ this.overdeckHome = options.overdeckHome;
1076
+ this.execCommand = options.execCommand ?? execAsync;
1077
+ this.prepareLaunch = options.prepareLaunch ?? (() => prepareHarnessLaunch("acp"));
1078
+ this.resolveAgentStates = options.listAgentStates ?? (() => listAgentStates());
1079
+ }
1080
+ getHarnessBehavior() {
1081
+ return getRuntimeBehavior("acp");
1082
+ }
1083
+ getSessionPath(agentId) {
1084
+ return join(this.home(), "agents", agentId, "acp-session.jsonl");
1085
+ }
1086
+ getLastActivity(agentId) {
1087
+ try {
1088
+ return statSync$1(this.getSessionPath(agentId)).mtime;
1089
+ } catch {
1090
+ return null;
1091
+ }
1092
+ }
1093
+ getHeartbeat(agentId) {
1094
+ const lastActivity = this.getLastActivity(agentId);
1095
+ if (!lastActivity) return null;
1096
+ return {
1097
+ timestamp: lastActivity,
1098
+ agentId,
1099
+ source: "jsonl",
1100
+ confidence: "medium"
1101
+ };
1102
+ }
1103
+ getTokenUsage(_agentId) {
1104
+ return null;
1105
+ }
1106
+ getSessionCost(_agentId) {
1107
+ return null;
1108
+ }
1109
+ async sendMessage(agentId, message) {
1110
+ const socketPath = this.socketPath(agentId);
1111
+ if (!existsSync$1(socketPath)) throw new Error(`ACP agent ${agentId}: host socket is not available`);
1112
+ const token = this.readToken(agentId);
1113
+ if (!token) throw new Error(`ACP agent ${agentId}: missing acp-token`);
1114
+ await postUnixSocketJson(socketPath, token, {
1115
+ op: "message",
1116
+ content: message
1117
+ }, HOST_REQUEST_TIMEOUT_MS);
1118
+ }
1119
+ async killAgent(agentId) {
1120
+ const socketPath = this.socketPath(agentId);
1121
+ const token = this.readToken(agentId);
1122
+ if (existsSync$1(socketPath) && token) try {
1123
+ await postUnixSocketJson(socketPath, token, { op: "interrupt" }, HOST_REQUEST_TIMEOUT_MS);
1124
+ } catch {}
1125
+ if (await pollUntilSessionGone(agentId, 2e3)) return;
1126
+ let panePid = null;
1127
+ try {
1128
+ const { stdout } = await this.execCommand(`tmux -L overdeck list-panes -t ${shellQuote(agentId)} -F '#{pane_pid}' 2>/dev/null`);
1129
+ panePid = stdout.trim() || null;
1130
+ if (panePid) await this.execCommand(`kill -TERM -- -${panePid} 2>/dev/null || kill -TERM ${panePid} 2>/dev/null || true`);
1131
+ } catch {}
1132
+ if (await pollUntilSessionGone(agentId, 5e3)) return;
1133
+ if (panePid) try {
1134
+ await this.execCommand(`kill -KILL -- -${panePid} 2>/dev/null || kill -KILL ${panePid} 2>/dev/null || true`);
1135
+ } catch {}
1136
+ if (await tmuxSessionExists(agentId)) await tmuxKillSession(agentId);
1137
+ }
1138
+ async spawnAgent(config) {
1139
+ const provider = config.provider ?? this.provider;
1140
+ const { binaryPath } = await this.prepareLaunch();
1141
+ const contextFile = materializeAcpContextFile(join(this.home(), "agents", config.agentId), config.workspace);
1142
+ const command = [
1143
+ "node",
1144
+ shellQuote(join(packageRoot, "dist", "acp-host.js")),
1145
+ "--agent",
1146
+ shellQuote(config.agentId),
1147
+ "--provider",
1148
+ shellQuote(provider),
1149
+ "--workspace",
1150
+ shellQuote(config.workspace),
1151
+ "--binary-path",
1152
+ shellQuote(binaryPath),
1153
+ "--context-file",
1154
+ shellQuote(contextFile)
1155
+ ];
1156
+ if (config.sessionId) command.push("--resume", shellQuote(config.sessionId));
1157
+ if (config.model) command.push("--model", shellQuote(config.model));
1158
+ rmSync$1(this.agentPath(config.agentId, "acp-session-id"), { force: true });
1159
+ rmSync$1(this.agentPath(config.agentId, "acp-launch-error"), { force: true });
1160
+ await tmuxCreateSession(config.agentId, config.workspace, command.join(" "), {
1161
+ ...config.env,
1162
+ OVERDECK_AGENT_ID: config.agentId
1163
+ });
1164
+ try {
1165
+ const sessionId = await this.waitForSessionId(config.agentId);
1166
+ if (!sessionId) throw new AcpSpawnTimeout(config.agentId);
1167
+ if (config.prompt) await this.sendMessage(config.agentId, config.prompt);
1168
+ return {
1169
+ id: config.agentId,
1170
+ sessionId,
1171
+ runtime: "acp",
1172
+ model: config.model ?? "",
1173
+ workspace: config.workspace,
1174
+ startedAt: /* @__PURE__ */ new Date()
1175
+ };
1176
+ } catch (error) {
1177
+ if (await tmuxSessionExists(config.agentId)) await tmuxKillSession(config.agentId);
1178
+ throw error;
1179
+ }
1180
+ }
1181
+ listSessions(workspace) {
1182
+ const sessions = [];
1183
+ for (const state of this.resolveAgentStates()) {
1184
+ if (state.harness !== "acp") continue;
1185
+ if (workspace && state.workspace !== workspace) continue;
1186
+ const sessionId = this.readSessionId(state.id);
1187
+ if (!sessionId) continue;
1188
+ const sessionPath = this.getSessionPath(state.id);
1189
+ let lastActivity;
1190
+ try {
1191
+ lastActivity = statSync$1(sessionPath).mtime;
1192
+ } catch {
1193
+ try {
1194
+ lastActivity = statSync$1(this.agentPath(state.id, "acp-session-id")).mtime;
1195
+ } catch {
1196
+ continue;
1197
+ }
1198
+ }
1199
+ sessions.push({
1200
+ id: sessionId,
1201
+ agentId: state.id,
1202
+ workspace: state.workspace,
1203
+ model: state.model ?? "",
1204
+ startedAt: new Date(state.startedAt),
1205
+ lastActivity,
1206
+ tokenUsage: {
1207
+ inputTokens: 0,
1208
+ outputTokens: 0
1209
+ }
1210
+ });
1211
+ }
1212
+ return sessions;
1213
+ }
1214
+ async isRunning(agentId) {
1215
+ return tmuxSessionExists(agentId);
1216
+ }
1217
+ home() {
1218
+ return this.overdeckHome ?? getOverdeckHome();
1219
+ }
1220
+ agentPath(agentId, file) {
1221
+ return join(this.home(), "agents", agentId, file);
1222
+ }
1223
+ socketPath(agentId) {
1224
+ return join(this.home(), "sockets", `acp-${agentId}.sock`);
1225
+ }
1226
+ readToken(agentId) {
1227
+ try {
1228
+ return readFileSync$1(this.agentPath(agentId, "acp-token"), "utf8").trim() || null;
1229
+ } catch {
1230
+ return null;
1231
+ }
1232
+ }
1233
+ readLaunchError(agentId) {
1234
+ try {
1235
+ return readFileSync$1(this.agentPath(agentId, "acp-launch-error"), "utf8").trim() || null;
1236
+ } catch {
1237
+ return null;
1238
+ }
1239
+ }
1240
+ readSessionId(agentId) {
1241
+ try {
1242
+ return readFileSync$1(this.agentPath(agentId, "acp-session-id"), "utf8").trim() || null;
1243
+ } catch {
1244
+ return null;
1245
+ }
1246
+ }
1247
+ async waitForSessionId(agentId) {
1248
+ const deadline = Date.now() + SPAWN_READY_TIMEOUT_MS;
1249
+ while (Date.now() < deadline) {
1250
+ const launchError = this.readLaunchError(agentId);
1251
+ if (launchError) throw new Error(`ACP host ${agentId} failed to start: ${launchError}`);
1252
+ const sessionId = this.readSessionId(agentId);
1253
+ if (sessionId) return sessionId;
1254
+ await delay(POLL_INTERVAL_MS);
1255
+ }
1256
+ return null;
1257
+ }
1258
+ };
1259
+ async function pollUntilSessionGone(agentId, timeoutMs) {
1260
+ const deadline = Date.now() + timeoutMs;
1261
+ while (Date.now() < deadline) {
1262
+ if (!await tmuxSessionExists(agentId)) return true;
1263
+ await delay(POLL_INTERVAL_MS);
1264
+ }
1265
+ return false;
1266
+ }
1267
+ function delay(ms) {
1268
+ return new Promise((resolve) => setTimeout(resolve, ms));
1269
+ }
1270
+ function shellQuote(value) {
1271
+ return `'${value.replace(/'/g, `'\\''`)}'`;
1272
+ }
1273
+ function postUnixSocketJson(socketPath, token, body, timeoutMs) {
1274
+ return new Promise((resolve, reject) => {
1275
+ let settled = false;
1276
+ let timeout;
1277
+ const finish = (callback) => {
1278
+ if (settled) return;
1279
+ settled = true;
1280
+ if (timeout) clearTimeout(timeout);
1281
+ callback();
1282
+ };
1283
+ const client = request({
1284
+ socketPath,
1285
+ path: "/",
1286
+ method: "POST",
1287
+ headers: {
1288
+ "content-type": "application/json",
1289
+ [BRIDGE_TOKEN_HEADER]: token
1290
+ }
1291
+ }, (response) => {
1292
+ const chunks = [];
1293
+ response.on("data", (chunk) => chunks.push(chunk));
1294
+ response.on("end", () => {
1295
+ const responseBody = Buffer.concat(chunks).toString("utf8");
1296
+ const status = response.statusCode ?? 0;
1297
+ if (status < 200 || status >= 300) {
1298
+ finish(() => reject(/* @__PURE__ */ new Error(`ACP host returned HTTP ${status}: ${responseBody}`)));
1299
+ return;
1300
+ }
1301
+ finish(() => resolve({
1302
+ status,
1303
+ body: responseBody
1304
+ }));
1305
+ });
1306
+ });
1307
+ if (timeoutMs !== void 0) {
1308
+ timeout = setTimeout(() => {
1309
+ client.destroy(/* @__PURE__ */ new Error(`ACP host request timed out after ${timeoutMs}ms`));
1310
+ }, timeoutMs);
1311
+ timeout.unref?.();
1312
+ }
1313
+ client.once("error", (error) => finish(() => reject(error)));
1314
+ client.end(JSON.stringify(body));
1315
+ });
1316
+ }
1317
+ function createAcpRuntimeSync(options = {}) {
1318
+ return new AcpRuntimeSync(options);
1319
+ }
1320
+ //#endregion
989
1321
  //#region ../../lib/runtimes/index.ts
990
1322
  init_behavior();
991
1323
  init_agents();
@@ -1028,6 +1360,7 @@ var RuntimeRegistry = class {
1028
1360
  const harness = state.harness;
1029
1361
  if (harness === "ohmypi" || harness === "pi") return this.get("ohmypi") ?? null;
1030
1362
  if (harness === "codex") return this.get("codex") ?? null;
1363
+ if (harness === "acp") return this.get("acp") ?? null;
1031
1364
  return this.get("claude-code") ?? null;
1032
1365
  }
1033
1366
  };
@@ -1047,6 +1380,7 @@ function getGlobalRegistry() {
1047
1380
  globalRegistry.register(createClaudeCodeRuntimeSync());
1048
1381
  globalRegistry.register(createOhmypiRuntimeSync());
1049
1382
  globalRegistry.register(createCodexRuntimeSync());
1383
+ globalRegistry.register(createAcpRuntimeSync());
1050
1384
  }
1051
1385
  return globalRegistry;
1052
1386
  }
@@ -1421,7 +1755,7 @@ async function remediateFlywheelOrchestrator(agentId, now, actions, reason) {
1421
1755
  now
1422
1756
  });
1423
1757
  if (decision.kind === "noop") return;
1424
- const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-DMCUzDWg.js");
1758
+ const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-BekukH4i.js");
1425
1759
  const prev = readStuckRemediationState(agentId);
1426
1760
  const nowIso = new Date(now).toISOString();
1427
1761
  if (decision.kind === "escalate") {
@@ -1525,6 +1859,6 @@ async function checkStuckAgentRemediation(opts = {}) {
1525
1859
  return actions;
1526
1860
  }
1527
1861
  //#endregion
1528
- export { parseCodexApprovalPrompt as _, isAgentIdleForNudge as a, countPendingAskUserQuestionsForAgent as c, getAgentPendingQuestions as d, getAgentWorkspace as f, normalizeAwaitingInputPrompt as g, detectAwaitingInputFromPaneSync as h, shouldSkipReviewStatus as i, getAgentJsonlMtime as l, detectAwaitingInputForAgent as m, decideFlywheelRemediation as n, getRuntimeForAgent as o, scanPendingInputsPromise as p, shouldSkipIdlePokeForAgent as r, computeAgentEnrichment as s, checkStuckAgentRemediation as t, getAgentJsonlPath as u };
1862
+ export { normalizeAwaitingInputPrompt as _, isAgentIdleForNudge as a, countPendingAskUserQuestionsForAgent as c, getAgentPendingQuestions as d, getAgentWorkspace as f, detectAwaitingInputFromPaneSync as g, detectAwaitingInputForAgent as h, shouldSkipReviewStatus as i, getAgentJsonlMtime as l, scanPendingInputsPromise as m, decideFlywheelRemediation as n, getRuntimeForAgent as o, isBlockedOnPendingInput as p, shouldSkipIdlePokeForAgent as r, computeAgentEnrichment as s, checkStuckAgentRemediation as t, getAgentJsonlPath as u, parseCodexApprovalPrompt as v };
1529
1863
 
1530
- //# sourceMappingURL=stuck-remediation-CzEov_fq.js.map
1864
+ //# sourceMappingURL=stuck-remediation-mkLC6G_t.js.map
@@ -1,5 +1,5 @@
1
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CzaSOgul.js";
2
- import { a as init_event_store, i as initEventStore, r as getSharedDb } from "./event-store-tdiY5eDZ.js";
1
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BjuxvjdS.js";
2
+ import { a as init_event_store, i as initEventStore, r as getSharedDb } from "./event-store-zY5MJHgF.js";
3
3
  //#region ../../lib/overdeck/flywheel-substrate-bugs.ts
4
4
  init_infra();
5
5
  function parseAffectedCriteriaColumn(value) {
@@ -871,4 +871,4 @@ async function listSubstrateBugWeights(window = "30d", deps = {}) {
871
871
  //#endregion
872
872
  export { getByIssueId as a, parseFlywheelStatsWindow as i, derivePipelineRunStatsInputs as n, markFixed as o, computeFlywheelStats as r, upsert as s, listSubstrateBugWeights as t };
873
873
 
874
- //# sourceMappingURL=substrate-bug-weights-service-BH66lhm7.js.map
874
+ //# sourceMappingURL=substrate-bug-weights-service-XfLAKnmK.js.map
@@ -1,4 +1,4 @@
1
- import "./smart-compaction-r4pHQBIr.js";
2
- import { a as generateFallbackSummary, l as init_summary_fork } from "./summary-fork-DHhJIsAL.js";
1
+ import "./smart-compaction-D3U_79f-.js";
2
+ import { a as generateFallbackSummary, l as init_summary_fork } from "./summary-fork-xiXBnWG9.js";
3
3
  init_summary_fork();
4
4
  export { generateFallbackSummary };
@@ -1,13 +1,12 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gr as sessionFilePath, Rr as getHandoffsDir, Ur as packageRoot, Vr as init_paths, f as loadConfigSync, ir as FsError, mr as init_errors, t as init_config_yaml } from "./config-yaml-DvyMuOle.js";
3
- import { b as init_agents, kt as deliverAgentMessage } from "./queries-6d7Cdtm7.js";
4
- import { k as init_conversations } from "./conversations-DbOs1e9Q.js";
5
- import { a as init_stack_health, i as getWorkspaceStackHealth } from "./stack-health-puygdaMd.js";
6
- import { a as runModelSummary, i as parseEntries, o as serializeConversation, r as init_smart_compaction, s as summarizeSerializedText, t as generateSmartSummary } from "./smart-compaction-r4pHQBIr.js";
2
+ import { Fr as init_errors, Tr as FsError, ai as getHandoffsDir, ci as init_paths, f as loadConfigSync, fi as sessionFilePath, si as getOverdeckHome, t as init_config_yaml, ui as packageRoot } from "./config-yaml-CmOPzmBb.js";
3
+ import { Mt as deliverAgentMessage, b as init_agents } from "./queries-DHJm7bTd.js";
4
+ import { k as init_conversations } from "./conversations-BUpYsOZg.js";
5
+ import { a as getWorkspaceStackHealth, s as init_stack_health } from "./stack-health-DqSqx0zv.js";
6
+ import { a as runModelSummary, i as parseEntries, o as serializeConversation, r as init_smart_compaction, s as summarizeSerializedText, t as generateSmartSummary } from "./smart-compaction-D3U_79f-.js";
7
7
  import { join } from "node:path";
8
8
  import { Effect } from "effect";
9
9
  import { join as join$1 } from "path";
10
- import { homedir } from "node:os";
11
10
  import { existsSync } from "node:fs";
12
11
  import { access, readFile, readdir, writeFile } from "node:fs/promises";
13
12
  import { mkdir as mkdir$1 } from "fs/promises";
@@ -24,6 +23,8 @@ import "node:crypto";
24
23
  * - Pi records have top-level `type: 'message'|'session'|'model_change'|
25
24
  * 'thinking_level_change'|...`, with the user/assistant role nested in
26
25
  * `entry.message.role` and blocks of type `text|thinking|toolCall|toolResult`.
26
+ * - ACP records have top-level `role`, `content`, and optional normalized
27
+ * `toolCalls` written by the persistent ACP host.
27
28
  * - Future harnesses (Codex, etc.) will have their own shapes.
28
29
  *
29
30
  * The handoff authoring pipeline doesn't care about any of that. It needs
@@ -43,7 +44,7 @@ import "node:crypto";
43
44
  * ISO timestamp prefix so this is deterministic.
44
45
  */
45
46
  async function resolvePiSessionFileFromTmux(tmuxSession) {
46
- const sessionDir = join(homedir(), ".overdeck", "agents", tmuxSession, "sessions");
47
+ const sessionDir = join(getOverdeckHome(), "agents", tmuxSession, "sessions");
47
48
  if (!existsSync(sessionDir)) return null;
48
49
  try {
49
50
  const entries = (await readdir(sessionDir)).filter((name) => name.endsWith(".jsonl"));
@@ -75,6 +76,28 @@ function serializePiEntry(entry, includeThinking) {
75
76
  if (lines.length === 1) return void 0;
76
77
  return lines.join("\n");
77
78
  }
79
+ function truncateAcpToolDetail(value) {
80
+ return value.length > ACP_TOOL_DETAIL_MAX_CHARS ? `${value.slice(0, ACP_TOOL_DETAIL_MAX_CHARS)}…` : value;
81
+ }
82
+ function serializeAcpToolCall(toolCall) {
83
+ const name = toolCall.title?.trim() || toolCall.kind?.trim();
84
+ if (!name) return void 0;
85
+ const lines = [`[tool_use: ${name}${toolCall.status ? ` (${toolCall.status})` : ""}]`];
86
+ if (toolCall.command?.trim()) lines.push(`$ ${truncateAcpToolDetail(toolCall.command.trim())}`);
87
+ if (toolCall.detail?.trim()) lines.push(truncateAcpToolDetail(toolCall.detail.trim()));
88
+ return lines.join("\n");
89
+ }
90
+ function serializeAcpEntry(entry) {
91
+ if (entry.role !== "user" && entry.role !== "assistant" && entry.role !== "tool" && entry.role !== "system") return;
92
+ const lines = [`[${entry.role}]`];
93
+ if (typeof entry.content === "string" && entry.content.trim()) lines.push(entry.content);
94
+ if (Array.isArray(entry.toolCalls)) for (const toolCall of entry.toolCalls) {
95
+ if (!toolCall || typeof toolCall !== "object") continue;
96
+ const serialized = serializeAcpToolCall(toolCall);
97
+ if (serialized) lines.push(serialized);
98
+ }
99
+ return lines.length > 1 ? lines.join("\n") : void 0;
100
+ }
78
101
  /**
79
102
  * Look up the transcript adapter for a harness. Unknown harnesses default to
80
103
  * the Claude Code adapter — that matches the conservative behavior of the rest
@@ -83,7 +106,7 @@ function serializePiEntry(entry, includeThinking) {
83
106
  function getTranscriptAdapter(harness) {
84
107
  return REGISTRY[harness ?? "claude-code"] ?? claudeCodeAdapter;
85
108
  }
86
- var claudeCodeAdapter, piAdapter, REGISTRY;
109
+ var claudeCodeAdapter, piAdapter, ACP_TOOL_DETAIL_MAX_CHARS, acpAdapter, REGISTRY;
87
110
  var init_transcript_adapter = __esmMin((() => {
88
111
  init_paths();
89
112
  init_smart_compaction();
@@ -155,10 +178,53 @@ var init_transcript_adapter = __esmMin((() => {
155
178
  };
156
179
  }
157
180
  };
181
+ ACP_TOOL_DETAIL_MAX_CHARS = 500;
182
+ acpAdapter = {
183
+ name: "acp",
184
+ supportsPlainForkAsSource: false,
185
+ supportsSourceAuthoredHandoff: false,
186
+ async resolveSessionFile(conv) {
187
+ const path = join(getOverdeckHome(), "agents", conv.tmuxSession, "acp-session.jsonl");
188
+ return existsSync(path) ? path : null;
189
+ },
190
+ async serializeTranscript(sessionFile) {
191
+ const content = await readFile(sessionFile, "utf-8");
192
+ const parts = [];
193
+ for (const line of content.split("\n")) {
194
+ if (!line.trim()) continue;
195
+ let entry;
196
+ try {
197
+ entry = JSON.parse(line);
198
+ } catch {
199
+ continue;
200
+ }
201
+ const serialized = serializeAcpEntry(entry);
202
+ if (serialized) parts.push(serialized);
203
+ }
204
+ return parts.join("\n\n");
205
+ },
206
+ async compactSummary(sessionFile, options) {
207
+ const serialized = await acpAdapter.serializeTranscript(sessionFile);
208
+ if (!serialized.trim()) return {
209
+ summary: "",
210
+ summaryModel: null
211
+ };
212
+ return {
213
+ summary: await summarizeSerializedText(serialized, {
214
+ model: options?.model,
215
+ richMode: options?.richMode ?? false,
216
+ harness: options?.harness ?? "claude-code",
217
+ timeoutMs: options?.timeoutMs
218
+ }),
219
+ summaryModel: options?.model ?? null
220
+ };
221
+ }
222
+ };
158
223
  REGISTRY = {
159
224
  "claude-code": claudeCodeAdapter,
160
225
  "ohmypi": piAdapter,
161
- "codex": claudeCodeAdapter
226
+ "codex": claudeCodeAdapter,
227
+ "acp": acpAdapter
162
228
  };
163
229
  }));
164
230
  //#endregion
@@ -442,11 +508,11 @@ async function generateSummaryForFork(jsonlPath, summaryModel, includeThinkingIn
442
508
  }
443
509
  }
444
510
  async function reserveSummaryForkSessionPromise(cwd) {
445
- const { reserveForkSession } = await import("./session-fork-BQ8_6H32.js");
511
+ const { reserveForkSession } = await import("./session-fork-D0LY152N.js");
446
512
  return reserveForkSession(cwd);
447
513
  }
448
514
  async function copySessionFromCompactBoundaryPromise(sourcePath, destPath) {
449
- const { copySessionForFork } = await import("./session-fork-BQ8_6H32.js");
515
+ const { copySessionForFork } = await import("./session-fork-D0LY152N.js");
450
516
  return copySessionForFork(sourcePath, destPath, { fullHistory: false });
451
517
  }
452
518
  /** Effect variant of generateFallbackSummary. */
@@ -521,4 +587,4 @@ var init_summary_fork = __esmMin((() => {
521
587
  //#endregion
522
588
  export { init_transcript_adapter as _, generateFallbackSummary as a, handoffPreconditionFallbackReason as c, prependFallbackFocus as d, requestHandoffFromAgent as f, getTranscriptAdapter as g, validateHandoffDoc as h, copySessionFromCompactBoundary as i, init_summary_fork as l, sanitizeHandoffDoc as m, HandoffValidationError as n, generateSummaryForFork as o, reserveSummaryForkSession as p, authorHandoffExternal as r, handoffFailureReason as s, HandoffStallError as t, logHandoffFallback as u };
523
589
 
524
- //# sourceMappingURL=summary-fork-DHhJIsAL.js.map
590
+ //# sourceMappingURL=summary-fork-xiXBnWG9.js.map