@overdeck/desktop 0.47.1 → 0.48.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 (444) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +59 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-Cd7ZGZCq.js → acceptance-criteria-DmtLDbtt.js} +2 -2
  4. package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
  5. package/server/activity-logger-K7FYGF_z.js +3 -0
  6. package/server/{advancing-selfheal-DieFp3qi.js → advancing-selfheal-8AR68Asf.js} +6 -6
  7. package/server/{agent-gc-BMcgTDl7.js → agent-gc-BmYeT6eH.js} +5 -5
  8. package/server/agent-state-Dq3s84-P.js +3 -0
  9. package/server/{agent-state-service-DFO6qvHp.js → agent-state-service-DK1Vay1E.js} +1 -1
  10. package/server/{agent-state-service-BOzQhLjU.js → agent-state-service-rjnzpHDx.js} +6 -6
  11. package/server/{agent-state-source-Ca_zCaII.js → agent-state-source-Ds968-j6.js} +1 -1
  12. package/server/{agents-CtACUuVG.js → agents-Dls7tfJH.js} +5 -5
  13. package/server/agents-IPSa5kzn.js +3 -0
  14. package/server/{archive-planning-Binfb99i.js → archive-planning-Cq7cyinS.js} +51 -24
  15. package/server/archive-planning-MbkGCBIY.js +2 -0
  16. package/server/{artifact-index-jobs-Jn7BGOtV.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
  17. package/server/{assemble-DsqK9OAq.js → assemble-BTCmbcfH.js} +20 -13
  18. package/server/{auto-spawn-consent-BooqhC3L.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
  19. package/server/{backlog-auto-trigger-BADGPxov.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
  20. package/server/{behavior-B7biGtFT.js → behavior-DIMQMRzs.js} +2 -2
  21. package/server/{boot-reconciled-stop-events-bQUzU8ns.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
  22. package/server/{bridge-pool-patrol-DsPj6F7t.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
  23. package/server/{briefing-freshness-CUerZqWd.js → briefing-freshness-3PNmL_p3.js} +2 -2
  24. package/server/{build-info-D0q_i8WM.js → build-info-CJg813Hm.js} +3 -3
  25. package/server/{build-info-Du74MKiP.js → build-info-CXyeFsXu.js} +1 -1
  26. package/server/{checkpoint-manager-Cu-R5Uzg.js → checkpoint-manager-9t7G5c1V.js} +1 -1
  27. package/server/{checkpoint-manager-R5tnaxEY.js → checkpoint-manager-B2G38R3p.js} +3 -3
  28. package/server/checkpoint-worker.js +1 -1
  29. package/server/{checkpoints-wF84ubZ8.js → checkpoints-CuBgiXO-.js} +1 -1
  30. package/server/{checkpoints-DYtLu-PB.js → checkpoints-VTZMd4Qm.js} +2 -2
  31. package/server/{claude-hooks-provision-DXI3Wqlm.js → claude-hooks-provision-55SyQaPz.js} +2 -2
  32. package/server/{claude-hooks-provision-UKxCeOyj.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
  33. package/server/{claude-permissions-DYVLnX9t.js → claude-permissions-Cn0dIu2i.js} +2 -2
  34. package/server/{claude-settings-overlay-DxP2F_gY.js → claude-settings-overlay-B19hdzSA.js} +1 -1
  35. package/server/{claude-settings-overlay-DsbpIq2d.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
  36. package/server/{cli-DzRKxxP_.js → cli-C9S84iTy.js} +79 -22
  37. package/server/cli-M1cwZ__d.js +3 -0
  38. package/server/{cliproxy-CG4meRFc.js → cliproxy-CJq3KXU6.js} +2 -2
  39. package/server/{cliproxy-Cwzw39yN.js → cliproxy-DgEZlr7Y.js} +1 -1
  40. package/server/{close-issue-BX1bATJy.js → close-issue-DPxRddGR.js} +5 -5
  41. package/server/{closed-issue-reaper-hLt0W86J.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
  42. package/server/{closed-issue-reaper-DvnTSN6a.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
  43. package/server/{codex-rnJN3v3_.js → codex-B3n_rkwn.js} +1 -1
  44. package/server/{codex-BYwi1uyW.js → codex-CjkD1PJu.js} +6 -6
  45. package/server/{codex-parser-Poyz29GE.js → codex-parser-DpB1Il-P.js} +2 -2
  46. package/server/{compaction-continuation-DtMfHN0f.js → compaction-continuation-DZD9ukSE.js} +3 -3
  47. package/server/{config-R793W0yA.js → config-C5saf4Ja.js} +1 -1
  48. package/server/{config-CX4vk1CV.js → config-DnLJATZk.js} +2 -2
  49. package/server/{config-ktAVnp4s.js → config-DvM8jtQK.js} +2 -2
  50. package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
  51. package/server/{conflict-gate-BSTlwCtF.js → conflict-gate-DXa_L28t.js} +1 -1
  52. package/server/{conflict-gate-BNv6UolH.js → conflict-gate-WfVqgalf.js} +4 -4
  53. package/server/{context-layers-DCdaGsRG.js → context-layers-D7UqH9Ab.js} +2 -2
  54. package/server/{context-layers-DlWsDiRF.js → context-layers-Dpz3Vd6d.js} +3 -3
  55. package/server/{control-settings-qYYHrIqy.js → control-settings-DVf6pKyv.js} +4 -4
  56. package/server/{conversation-compaction-BxUKObHb.js → conversation-compaction-5XuH6OBn.js} +1 -1
  57. package/server/{conversation-compaction-CXQrN3I_.js → conversation-compaction-COrbnX1J.js} +8 -8
  58. package/server/{conversation-service-CZiUE8Uw.js → conversation-service-BufdtnZF.js} +169 -10
  59. package/server/{conversation-service-CDnQ3ayN.js → conversation-service-DnUyIiLb.js} +1 -1
  60. package/server/{conversations-D7lR670u.js → conversations-B4rxz-Wl.js} +17 -10
  61. package/server/{conversations-DXl5YTf4.js → conversations-D1bwxQMy.js} +1 -1
  62. package/server/{cost-Aat8HfO_.js → cost-CpFDrJUS.js} +46 -2
  63. package/server/{cost-CWvN9FP2.js → cost-KLuwKCW9.js} +3 -3
  64. package/server/{cost-sync-DiUBXwl6.js → cost-sync-cesi9dp8.js} +3 -3
  65. package/server/{dag-5QlmH0oC.js → dag-BYiFMqpU.js} +2 -2
  66. package/server/{dangerous-git-ops-DWX6Og8c.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
  67. package/server/dashboard-db-worker.js +7 -7
  68. package/server/{deacon-PW_bg4uL.js → deacon-BbsWw8a6.js} +3 -3
  69. package/server/{deacon-B1LD5cJU.js → deacon-HdEh0Esp.js} +672 -181
  70. package/server/deacon-event-client-C93rvOT7.js +237 -0
  71. package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
  72. package/server/{deacon-nudge-log-DPHsO14z.js → deacon-nudge-log-BND_97Wo.js} +4 -3
  73. package/server/{deacon-pending-lifecycle-2ZflPxgo.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
  74. package/server/deacon-swarm-DgWADWd_.js +2 -0
  75. package/server/{deacon-swarm-DwGUgSVp.js → deacon-swarm-rqrl4TMs.js} +39 -18
  76. package/server/deacon.js +12 -210
  77. package/server/{dead-end-trip-B06RFIr2.js → dead-end-trip-DSF23CLX.js} +4 -3
  78. package/server/dead-end-trip-zKlS4v6f.js +2 -0
  79. package/server/delivery-CsbQdZkS.js +3 -0
  80. package/server/{deploy-patrol-BNjeCL8u.js → deploy-patrol-kARAkji4.js} +17 -21
  81. package/server/{deploy-queue-CKT_Ia9p.js → deploy-queue-Bj0HJT1i.js} +2 -2
  82. package/server/{deploy-queue-DMMYhFC8.js → deploy-queue-rjTUy1RM.js} +1 -1
  83. package/server/{deploy-window-DC8lze3d.js → deploy-window-B2IM-9G5.js} +10 -44
  84. package/server/{deploy-window-D_AimdNN.js → deploy-window-BNFWnA8D.js} +1 -1
  85. package/server/{dev-supervisor-C4F0vbno.js → dev-supervisor-B1mZYXz4.js} +2 -2
  86. package/server/{devcontainer-renderer-66sqMQIi.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
  87. package/server/{dist-C5FT9lTG.js → dist-3W--cGMa.js} +1 -1
  88. package/server/dist-BR0QtwmS.js +3 -0
  89. package/server/{dist-src-B-AlGWSl.js → dist-src-C-Vk2jNk.js} +1 -1
  90. package/server/{docker-BxrFhTZ_.js → docker-DH3jUYg1.js} +1 -1
  91. package/server/{docker-CoAT8R0J.js → docker-meuLKLzV.js} +27 -20
  92. package/server/{dod-Bg6wsKTV.js → dod-D7-9dCOD.js} +1 -1
  93. package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
  94. package/server/{durable-review-pipeline-D_DcfIGP.js → durable-review-pipeline-CStTgOAf.js} +1 -1
  95. package/server/{durable-review-pipeline-HkAgnx0L.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
  96. package/server/{ensure-devcontainer-Bg5HJAcO.js → ensure-devcontainer-BE3llBWP.js} +1 -1
  97. package/server/{ensure-devcontainer-DTxChVuA.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
  98. package/server/{esm-shims-CaBWIR7f.js → esm-shims-Bzy4ZzNU.js} +1 -1
  99. package/server/event-store-COd2tOx8.js +3 -0
  100. package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
  101. package/server/{events-ChEFB7Jp.js → events-CCkFWa7X.js} +1 -1
  102. package/server/{events-DhRN-6vM.js → events-zjDQozet.js} +3 -3
  103. package/server/{factory-BezSPaTd.js → factory-DhavwKVc.js} +5 -5
  104. package/server/{feature-registry-population-DhswNiXx.js → feature-registry-population-DWGBKyWd.js} +4 -4
  105. package/server/{feature-registry-storage-CUVNpAso.js → feature-registry-storage-C5DkXmCM.js} +3 -3
  106. package/server/{features-B2CfNPFw.js → features-CC47YcCX.js} +2 -2
  107. package/server/{feedback-target-CMrEAoeA.js → feedback-target-D9Tex35_.js} +1 -1
  108. package/server/{feedback-target-VBr9gKgX.js → feedback-target-DoRCR3L-.js} +8 -8
  109. package/server/{feedback-writer-CY91ckuw.js → feedback-writer-CTSuA6lw.js} +1 -1
  110. package/server/{feedback-writer-xpFgU632.js → feedback-writer-DdsBdtNL.js} +5 -5
  111. package/server/{flywheel-DsICCjTR.js → flywheel-DHWHzaYK.js} +1 -1
  112. package/server/{flywheel-DQqsSm7P.js → flywheel-DJQa9az8.js} +14 -14
  113. package/server/{flywheel-CTVY3yCG.js → flywheel-TacAI9MA.js} +21 -17
  114. package/server/{flywheel-merge-order-C-TI4JGu.js → flywheel-merge-order-D2foPh88.js} +1 -1
  115. package/server/{flywheel-merge-order-CMGz-imq.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
  116. package/server/forge-CdlCG9aS.js +3 -0
  117. package/server/{forge-RTNqJe6a.js → forge-c8LeC-tw.js} +2 -2
  118. package/server/{from-DxGcivc9.js → from-BogSwvr2.js} +1 -1
  119. package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
  120. package/server/{fts-operations-BuTdlZFA.js → fts-operations-DP9R-8Q3.js} +3 -3
  121. package/server/{git-utils-CedsVume.js → git-utils-C31x1lpE.js} +1 -1
  122. package/server/{git-utils-DtdoEXJk.js → git-utils-xQ74FoSn.js} +5 -4
  123. package/server/{github-app-DIE8BkHI.js → github-app-CpQSDlv8.js} +1 -1
  124. package/server/{github-app-gVnZcP9B.js → github-app-D2QuvZ3j.js} +3 -3
  125. package/server/{github-client-BrAC6ELh.js → github-client-D9YvJX5D.js} +3 -3
  126. package/server/{github-client-CBOkvBUl.js → github-client-Tpi3PmKX.js} +1 -1
  127. package/server/{github-pr-lookup-CgMULTPf.js → github-pr-lookup-DvBMv-IW.js} +2 -2
  128. package/server/{harness-binary-CnBHpd57.js → harness-binary-BHxWf_sX.js} +7 -6
  129. package/server/{harness-resolve-BVj6sI8m.js → harness-resolve-bj9WMABA.js} +4 -4
  130. package/server/{health-events-BBWO_Dh9.js → health-events-bCDPn59Z.js} +2 -2
  131. package/server/{health-events-Der6bOkm.js → health-events-qo7Ss34U.js} +1 -1
  132. package/server/{hooks-BOavco-e.js → hooks-Dyxtg5fk.js} +2 -2
  133. package/server/{hooks-BJNal-bs.js → hooks-X2XHBB2b.js} +1 -1
  134. package/server/{hume-DBocJFkA.js → hume-DrZEGpqc.js} +2 -2
  135. package/server/hume-YPsy4UA8.js +3 -0
  136. package/server/{idle-stack-reaper-DQFh8rDh.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
  137. package/server/{idle-stack-reaper-CyGxXOfC.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
  138. package/server/{in-flight-guard-nXEKoxI7.js → in-flight-guard-CG2Eo-rr.js} +1 -1
  139. package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
  140. package/server/{injection-DfFFEMKL.js → injection-BisQ0lpX.js} +1 -1
  141. package/server/{injection-CCopdUKz.js → injection-C9sxqbc2.js} +73 -193
  142. package/server/{inspect-agent-FCDlNT_i.js → inspect-agent-BoSO51YC.js} +12 -12
  143. package/server/inspect-agent-BykeOH4a.js +2 -0
  144. package/server/{internal-token-BG6yQKNL.js → internal-token-AvXePaQT.js} +2 -2
  145. package/server/{internal-token-BJZa40Ld.js → internal-token-Djkj-yqK.js} +1 -1
  146. package/server/{io-C0NV7y6C.js → io-mxOWMZ7I.js} +6 -6
  147. package/server/{issue-closed-CNNGbhWm.js → issue-closed-Bj_bCv_0.js} +7 -7
  148. package/server/{issue-lifecycle-DSH0GpWC.js → issue-lifecycle-A5YIpDZE.js} +1 -1
  149. package/server/{issue-lifecycle-BXfzxFCD.js → issue-lifecycle-BXUqaHzF.js} +32 -28
  150. package/server/{issue-service-singleton-F3A5VP6M.js → issue-service-singleton-BPNEXczv.js} +11 -11
  151. package/server/{issue-service-singleton-lwFJ4dHk.js → issue-service-singleton-CcaHjKPR.js} +1 -1
  152. package/server/{issues-DA-U_MpR.js → issues-AX-YBeAQ.js} +2 -2
  153. package/server/{jsonl-parser-BXiGANOh.js → jsonl-parser-CgYWQ20q.js} +7 -3
  154. package/server/kimi-code-BYbme0aV.js +579 -0
  155. package/server/kimi-code-D_Ppt82c.js +3 -0
  156. package/server/kimi-parser-B-JBg3Pv.js +147 -0
  157. package/server/{label-cleanup-BnxRk0Eo.js → label-cleanup-sXUlgdM0.js} +3 -3
  158. package/server/{lifecycle-DOgGnpIv.js → lifecycle-D2X3al0D.js} +2 -2
  159. package/server/{lifecycle-Di48-w4x.js → lifecycle-DjlljAZ1.js} +6 -6
  160. package/server/{lifecycle-io-eVG6v_8-.js → lifecycle-io-C5nVk55o.js} +1 -1
  161. package/server/{lifecycle-io-1XSeczTr.js → lifecycle-io-NPm1YtIG.js} +5 -5
  162. package/server/{linear-client-CvGo9n7M.js → linear-client--luYwCZg.js} +1 -1
  163. package/server/{linear-client-CYZRrcjp.js → linear-client-B8pLegW1.js} +3 -3
  164. package/server/{linear-mcp-auth-Cp0XaP96.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
  165. package/server/{linear-mcp-auth-DoJnjdPZ.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
  166. package/server/memory-fts-worker.js +1 -1
  167. package/server/{merge-DO14mOr3.js → merge-Bx5Bh9pi.js} +3 -3
  168. package/server/{merge-ZF99ig6A.js → merge-Dqmh_zja.js} +1 -1
  169. package/server/{merge-agent-gpiRkcvj.js → merge-agent-DP9AUY29.js} +33 -33
  170. package/server/{merge-agent-C1-9zbP_.js → merge-agent-DWd0KfiS.js} +1 -1
  171. package/server/{merge-batch-C11ocNkO.js → merge-batch-BdmvTEAC.js} +1 -1
  172. package/server/{merge-completeness-CghMbyX7.js → merge-completeness-BfRwFjRx.js} +1 -1
  173. package/server/{merge-completeness-BUzPZy0E.js → merge-completeness-C1FevcDT.js} +4 -4
  174. package/server/merge-ops-B98tKc1e.js +2 -0
  175. package/server/merge-rebase-BLykMwPO.js +2 -0
  176. package/server/{merge-rebase-iwlUzZjr.js → merge-rebase-BX1xKsrE.js} +2 -2
  177. package/server/{merge-set-Dbnx4chw.js → merge-set-DsLjjLEV.js} +4 -4
  178. package/server/{merge-set-BymrheTj.js → merge-set-H6epHOsw.js} +1 -1
  179. package/server/{merge-sync-CM978zez.js → merge-sync-BEdfsQV4.js} +2 -2
  180. package/server/{merge-sync-CqEtqjI2.js → merge-sync-BebcWWGA.js} +1 -1
  181. package/server/{merge-train-DvLcAn1G.js → merge-train-D1I0lNOT.js} +4 -4
  182. package/server/{merge-train-deps-Cl_kcRbO.js → merge-train-deps-D_-C0Pk2.js} +4 -4
  183. package/server/{merge-verification-c9Y9mllw.js → merge-verification-DN1Ov9bU.js} +6 -6
  184. package/server/{merged-docker-cleanup-worker-CGiDOdv8.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
  185. package/server/{merged-docker-cleanup-worker-DgsLOx3E.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
  186. package/server/{multipart-parser-D0twwRjz.js → multipart-parser-CL5QG8iv.js} +2 -2
  187. package/server/{no-resume-mode-DZvP0M_S.js → no-resume-mode-DUR7Hi98.js} +1 -1
  188. package/server/node_modules/.package-lock.json +7 -7
  189. package/server/node_modules/brace-expansion/README.md +23 -1
  190. package/server/node_modules/brace-expansion/index.js +206 -85
  191. package/server/node_modules/brace-expansion/package.json +1 -1
  192. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
  193. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  194. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  195. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  196. package/server/node_modules/msgpackr/dist/index.js +34 -28
  197. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  198. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  199. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  200. package/server/node_modules/msgpackr/dist/node.cjs +36 -29
  201. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  202. package/server/node_modules/msgpackr/dist/test.js +63 -32
  203. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  204. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
  205. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  206. package/server/node_modules/msgpackr/package.json +1 -1
  207. package/server/node_modules/msgpackr/unpack.js +34 -28
  208. package/server/{orphan-proposed-reconciler-6r2OEfYd.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
  209. package/server/{orphan-proposed-reconciler-DtQP6oE_.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
  210. package/server/package-lock.json +8 -8
  211. package/server/package.json +1 -1
  212. package/server/{pan-dir-DAOb1V2-.js → pan-dir-DhgKfO86.js} +21 -6
  213. package/server/{paths-DuATV5iE.js → paths-BUuhi6jM.js} +17 -17
  214. package/server/{pending-lifecycle-claim-DQUHIDfX.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
  215. package/server/{persistent-logger-CBj016pT.js → persistent-logger-s8cbpFNV.js} +2 -2
  216. package/server/{pickup-zXZl5lQI.js → pickup-2AxtB3dW.js} +1 -1
  217. package/server/{pipeline-membership-DHOXmvba.js → pipeline-membership-2_okL5bm.js} +1 -1
  218. package/server/{pipeline-membership-B2yUcBz7.js → pipeline-membership-Dqv6_0ig.js} +1 -1
  219. package/server/{pipeline-membership-gather-OkLXuvxR.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
  220. package/server/{pipeline-membership-gather-BIcJ-N0W.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
  221. package/server/{pipeline-notifier-BmwrVKsO.js → pipeline-notifier-CO9rxJgB.js} +1 -1
  222. package/server/{pipeline-notifier-CxMes51i.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
  223. package/server/{post-merge-lifecycle-worker-3u_rA4R0.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
  224. package/server/{project-pipelines-C3SPFJ38.js → project-pipelines-72WE8GVK.js} +2 -2
  225. package/server/{project-repos-BOpBzkO6.js → project-repos-BAqDwtvi.js} +16 -11
  226. package/server/project-repos-Df90Zw7Y.js +3 -0
  227. package/server/projects-WqMWCdpa.js +3 -0
  228. package/server/{prompts-B0TtboFm.js → prompts-XkL10m8M.js} +2 -2
  229. package/server/{providers-O2smCvSz.js → providers-ClGPGkQ8.js} +15 -12
  230. package/server/providers-DFUOed8u.js +3 -0
  231. package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
  232. package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
  233. package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
  234. package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
  235. package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
  236. package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
  237. package/server/public/assets/index-Cml-kHo6.css +1 -0
  238. package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
  239. package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
  240. package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
  241. package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
  242. package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
  243. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
  244. package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
  245. package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
  246. package/server/public/index.html +2 -2
  247. package/server/{pull-requests-BonZ4WVG.js → pull-requests-B-KrUph5.js} +3 -3
  248. package/server/{pull-requests-DNcJUVWA.js → pull-requests-DK5k92B4.js} +1 -1
  249. package/server/{queries-DCX27GRr.js → queries-DVpl1vsU.js} +1212 -193
  250. package/server/{rally-Cxe7lKYX.js → rally-DbE561hD.js} +3 -3
  251. package/server/rally-O_st_X7n.js +3 -0
  252. package/server/{rally-api-CzkKenoi.js → rally-api-CZLeEd2C.js} +2 -2
  253. package/server/{rally-api-Cp50exEi.js → rally-api-DaHtn5QN.js} +1 -1
  254. package/server/{rally-client-Bu3Cekkw.js → rally-client-C-MAl8ur.js} +1 -1
  255. package/server/{rally-client-CyBBEDHu.js → rally-client-Ch3zRsBX.js} +5 -5
  256. package/server/{reap-terminal-sessions-CtAhr6L0.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
  257. package/server/{reap-terminal-sessions-DvFqQUnq.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
  258. package/server/{rebuild-stack-hCQtprWC.js → rebuild-stack-C9Li44A3.js} +20 -10
  259. package/server/{rebuild-stack-BKYpIPDL.js → rebuild-stack-qC0jCNm6.js} +2 -2
  260. package/server/{reconstruct-cache-CF2avArx.js → reconstruct-cache-BHyiAg02.js} +7 -7
  261. package/server/record-aVzu-LGm.js +3 -0
  262. package/server/record-update-CZh46a2f.js +617 -0
  263. package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
  264. package/server/recovery-trip-CSNWSLDn.js +77 -0
  265. package/server/recovery-trip-_16hFKv4.js +3 -0
  266. package/server/{release-engine-_eO3VFth.js → release-engine-Be5MX5GP.js} +5 -5
  267. package/server/{release-set-vxgZwwZV.js → release-set-DJv_O6PS.js} +3 -3
  268. package/server/{remote-BienmcrZ.js → remote-BMM3uH2J.js} +3 -3
  269. package/server/{remote-CVPCc7Vy.js → remote-C0xVTHA5.js} +3 -3
  270. package/server/{remote-agents-kwsEZvXu.js → remote-agents-BIIoc5pD.js} +1 -1
  271. package/server/{remote-agents-kxraOCGT.js → remote-agents-EUiZ26bj.js} +7 -7
  272. package/server/{remote-completion-BtmZ42aP.js → remote-completion-BS4tJUn8.js} +13 -13
  273. package/server/resolver-BvHd6RE4.js +163 -0
  274. package/server/resume-9thEqAQR.js +3 -0
  275. package/server/{review-agent-CIRr0yYt.js → review-agent-BHGaBoBu.js} +29 -29
  276. package/server/{review-agent-UpAM4DmT.js → review-agent-CD3RQ-tc.js} +1 -1
  277. package/server/{review-artifacts-BCODM9ww.js → review-artifacts-DyhajWso.js} +6 -6
  278. package/server/{review-context-BBsNrDri.js → review-context-B-dlsPnx.js} +9 -9
  279. package/server/{review-convoy-liveness-l06_LYCt.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
  280. package/server/{review-status-CacDM78F.js → review-status-B6wYcOtP.js} +1 -1
  281. package/server/{review-status-CwhA9wmd.js → review-status-CKLk5aZ-.js} +306 -59
  282. package/server/{review-status-emit-BPJwYcRy.js → review-status-emit-CJ7UmEVU.js} +3 -3
  283. package/server/{review-status-enrichment-DvyZAbGR.js → review-status-enrichment-DJRgGX7-.js} +3 -3
  284. package/server/review-status-limits-4EJDCGHO.js +7 -0
  285. package/server/{review-status-source-DWnFE0b6.js → review-status-source-7nU3Z2wL.js} +1 -1
  286. package/server/{review-status-source-B70ekARK.js → review-status-source-BsDYGfyv.js} +1 -1
  287. package/server/{review-status-sync-B0IS6Beh.js → review-status-sync-BLssMTEW.js} +1 -1
  288. package/server/{review-status-sync-h2CJX6ju.js → review-status-sync-BxBeHRde.js} +35 -11
  289. package/server/{review-verdict-feedback-yrrmgps_.js → review-verdict-feedback-5jWuzgpc.js} +22 -10
  290. package/server/{review-verdict-feedback-qRohbFG2.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
  291. package/server/{rollup-CUoav0Op.js → rollup-BGIrCEkU.js} +79 -44
  292. package/server/rollup-CZB4UL9q.js +3 -0
  293. package/server/{scanner-ChURu_b-.js → scanner-DydjXPrz.js} +16 -9
  294. package/server/search-DdtIjAiu.js +395 -0
  295. package/server/{sequence-io-D9ITDxzq.js → sequence-io-Fw-cLyDs.js} +4 -4
  296. package/server/{sequencer-agent-m7gmaakW.js → sequencer-agent-BcpGMt5x.js} +15 -10
  297. package/server/server.js +1258 -438
  298. package/server/{service-BzFG0Us_.js → service-BFFkGsG4.js} +58 -58
  299. package/server/{session-fork-KBq4HIHF.js → session-fork-D0V-3e5P.js} +2 -2
  300. package/server/{session-history-C_EMhIIF.js → session-history-Bta5l9jY.js} +5 -5
  301. package/server/{settings-DejgzzLs.js → settings-Ce8B1daF.js} +2 -2
  302. package/server/{settings-BLbcDqUp.js → settings-E3FnEIUx.js} +3 -3
  303. package/server/settings-eOOJpxi_.js +2 -0
  304. package/server/{shadow-engineering-D8R9I8Yl.js → shadow-engineering-Mt9nJO4i.js} +3 -3
  305. package/server/{shadow-state-C0Af4clN.js → shadow-state-Bzj_AZCV.js} +1 -1
  306. package/server/{shadow-state-fzIqIMDD.js → shadow-state-DrkhoVSx.js} +2 -2
  307. package/server/{shadow-utils-Ugca_9ND.js → shadow-utils-H1GfqP06.js} +2 -2
  308. package/server/{ship-log-VAv-lHrF.js → ship-log-CFUIo4PR.js} +1 -1
  309. package/server/{smart-compaction-BcYY_Suf.js → smart-compaction-DSTq-Wua.js} +1 -1
  310. package/server/{smart-compaction-B2Xu5XEb.js → smart-compaction-Hzp3KCJX.js} +7 -7
  311. package/server/{spawn-planning-session-Dsv-350T.js → spawn-planning-session-C0uSA2SL.js} +2 -2
  312. package/server/{spawn-planning-session-DhCoBPct.js → spawn-planning-session-DN4son31.js} +23 -21
  313. package/server/{specialist-completion-z6v3ZqJE.js → specialist-completion-Cf6tpIh1.js} +1 -1
  314. package/server/{specialist-context-CrA5azkJ.js → specialist-context-DEUEkjIQ.js} +5 -5
  315. package/server/{specialist-handoff-logger-CmpZYJMB.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
  316. package/server/{specialist-logs-BorrIu0x.js → specialist-logs-7Ynue0R7.js} +3 -3
  317. package/server/{specialists-ZdrifiKx.js → specialists-CQwBEGlD.js} +1 -1
  318. package/server/{specialists-2yLmqph9.js → specialists-DAjPgYs_.js} +504 -238
  319. package/server/{specialists-Dfx9_Wzb.js → specialists-Hr6iW9fU.js} +18 -18
  320. package/server/{specialists-CH6ah6D-.js → specialists-MOoeB4A8.js} +1 -1
  321. package/server/specs-Dl88cbKY.js +3 -0
  322. package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
  323. package/server/{src-Dm_NV7f6.js → src-DQnkPN2i.js} +3 -3
  324. package/server/{src-B2e5rGu2.js → src-DhfDV0o4.js} +6 -6
  325. package/server/{stack-health-Bf2WdG4E.js → stack-health-D_iKwNRg.js} +107 -16
  326. package/server/stack-health-deVSdDwn.js +3 -0
  327. package/server/{stale-task-claims-D1Ll8fI5.js → stale-task-claims-BYJGqhLI.js} +5 -5
  328. package/server/{staleness-CuED1Psm.js → staleness-CopBDKnA.js} +1 -1
  329. package/server/{staleness-45qZ_a60.js → staleness-D8WeMUHd.js} +1 -1
  330. package/server/{state-home-B4EWfIxF.js → state-home-DjN8qduI.js} +24 -3
  331. package/server/{state-mapping-BEONzr8P.js → state-mapping-DlM7OYRW.js} +1 -1
  332. package/server/{state-migrate-Cd8BH33U.js → state-migrate-a2p1gtD7.js} +4 -4
  333. package/server/state-mirror-Cv_XgvT5.js +121 -0
  334. package/server/{stuck-remediation-ChcooZuk.js → stuck-remediation-CXJX_kki.js} +1 -1
  335. package/server/{stuck-remediation-DmY5UJLg.js → stuck-remediation-CbCRSz1v.js} +31 -732
  336. package/server/{substrate-bug-weights-service-BvTWrFUz.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
  337. package/server/{summary-fork--Jr8duYh.js → summary-fork-B61fjRJn.js} +2 -2
  338. package/server/{summary-fork-Ct514_Jl.js → summary-fork-B9pszUJN.js} +91 -10
  339. package/server/supervisor/{injection-budget-B3UyEONL.js → injection-budget-Ar7hgyJq.js} +1 -1
  340. package/server/supervisor/pty-supervisor.js +12 -3
  341. package/server/supervisor/{pty-token-CWRffcCa.js → pty-token-CXCFU0Z8.js} +1 -1
  342. package/server/{supervisor-B7BHGcNA.js → supervisor-BvnxbuuF.js} +6 -4
  343. package/server/supervisor-C69kpqvd.js +2 -0
  344. package/server/{swarm-readiness-MNE5O8hn.js → swarm-readiness-vTw1kqGa.js} +3 -3
  345. package/server/{system-prerequisites-Cin9ZgDx.js → system-prerequisites-LLzTEqsK.js} +3 -3
  346. package/server/{teardown-workspace-CvBpvc85.js → teardown-workspace-CqKKVJr1.js} +15 -15
  347. package/server/{test-agent-queue-DmSIqays.js → test-agent-queue-CWMq7oyG.js} +8 -7
  348. package/server/{test-verdict-BieVDAV1.js → test-verdict-NdtgRBuA.js} +1 -1
  349. package/server/{test-verdict-Cy2jJGTe.js → test-verdict-diIWE6hz.js} +15 -3
  350. package/server/{tldr-daemon-Ca0eovh3.js → tldr-daemon-B1Jhrtc8.js} +1 -1
  351. package/server/{tldr-daemon-IOssGwg7.js → tldr-daemon-Bpls1CJB.js} +2 -2
  352. package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
  353. package/server/tmux-Cjpx8L8u.js +4 -0
  354. package/server/{token-B10VFNOD.js → token-Bgpjo3tE.js} +2 -2
  355. package/server/token-util-BsjFll-k.js +3 -0
  356. package/server/{token-util-CZ8WPtdk.js → token-util-BymbpkJp.js} +1 -1
  357. package/server/{tracker-config-CHbrjg6m.js → tracker-config-4DaKVTfc.js} +2 -2
  358. package/server/{tracker-utils-DZZq_C0R.js → tracker-utils-BDeAXC-q.js} +2 -2
  359. package/server/{traefik-connect-GHomyBaD.js → traefik-connect-CC5FyxYj.js} +1 -1
  360. package/server/{tunnel-Dz7y434T.js → tunnel-CDWkeceJ.js} +1 -1
  361. package/server/{tunnel-Bdyb-sNq.js → tunnel-CPf5M-Pc.js} +3 -3
  362. package/server/{typed-errors-Bn_2WRU7.js → typed-errors-9K7Dq_Vn.js} +1 -1
  363. package/server/{typed-errors-BR_RmPS_.js → typed-errors-DrS5fb5z.js} +1 -1
  364. package/server/{types-D2ETIB8T.js → types-DzlUKiuf.js} +4 -3
  365. package/server/{types-Dh6RI5Vj.js → types-kI9ik8XO.js} +1 -1
  366. package/server/{uat-promote-verification-DyvQXvIn.js → uat-promote-verification-c_pxoxEc.js} +5 -5
  367. package/server/{uat-train-Dv0Bxer7.js → uat-train-CWGxBdJO.js} +0 -0
  368. package/server/{uat-train-diX_7shd.js → uat-train-CfCYd2ve.js} +1 -1
  369. package/server/{validate-606KcYZC.js → validate-f3ItVCfm.js} +3 -3
  370. package/server/{validation-Cf7aaV5A.js → validation-5G_wQtea.js} +1 -1
  371. package/server/{validation-CnrDul1x.js → validation-7tSiCM82.js} +4 -4
  372. package/server/{verification-artifact-GOaj8u2s.js → verification-artifact-9h9dH8uX.js} +1 -1
  373. package/server/{verification-artifact-D4b-bio9.js → verification-artifact-C_4WJnf6.js} +1 -1
  374. package/server/{verification-runner-DiPaUP-C.js → verification-runner-BV5F6wrA.js} +1 -1
  375. package/server/{verification-runner-B5MVxDvU.js → verification-runner-D58KmBhK.js} +18 -38
  376. package/server/{vtt-parser-CMU5EZ5R.js → vtt-parser-2iT9OHa9.js} +1 -1
  377. package/server/{work-agent-prompt-Csb3fbVR.js → work-agent-prompt-D03s4DD1.js} +9 -9
  378. package/server/{workflows-D87ajwV6.js → workflows-BMBwLYPV.js} +281 -98
  379. package/server/workflows-BOmWGpIh.js +2 -0
  380. package/server/{workspace-iD8oULqu.js → workspace-BgflNCH0.js} +3 -3
  381. package/server/{workspace-AIOM7n00.js → workspace-Cn9ywfSW.js} +1 -1
  382. package/server/{workspace-anchor-drift-19cJ1bH5.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
  383. package/server/{workspace-anchor-drift-C3mK5wNI.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
  384. package/server/{workspace-config-CJ7RqQiP.js → workspace-config-aUc2nIz6.js} +1 -1
  385. package/server/{workspace-manager-CXfrw4rR.js → workspace-manager-Bem7ZBs9.js} +521 -292
  386. package/server/workspace-manager-C0CpNh3t.js +3 -0
  387. package/server/{workspace-metadata-BuMRco5P.js → workspace-metadata-C5iSlPRo.js} +1 -1
  388. package/server/{workspace-metadata-eHSj_NsP.js → workspace-metadata-UKmTYmDQ.js} +2 -2
  389. package/server/{workspaces-DbtMX2TM.js → workspaces-DqxgwDZ8.js} +143 -113
  390. package/sync-sources/hooks/notification-hook +12 -1
  391. package/sync-sources/hooks/pan-hook-lib.sh +226 -0
  392. package/sync-sources/hooks/session-start-hook +31 -4
  393. package/sync-sources/hooks/work-agent-stop-hook +23 -1
  394. package/sync-sources/skills/pan-memory/SKILL.md +19 -3
  395. package/sync-sources/skills/pan-projects/SKILL.md +9 -0
  396. package/sync-sources/skills/pan-restart/SKILL.md +26 -7
  397. package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
  398. package/server/activity-logger-CMthG6Vd.js +0 -3
  399. package/server/agent-state-DyZJia9f.js +0 -3
  400. package/server/agents-Dnn4XgdB.js +0 -3
  401. package/server/archive-planning-BHCd_eL5.js +0 -2
  402. package/server/cli-D6mRfUE6.js +0 -3
  403. package/server/deacon-swarm-BkKR7SXu.js +0 -2
  404. package/server/delivery-C2M73sBg.js +0 -3
  405. package/server/dist-qcf9gAP0.js +0 -3
  406. package/server/event-store-5UKzh9Jf.js +0 -3
  407. package/server/forge-D647IMNa.js +0 -3
  408. package/server/fts-db-wROfFfje.js +0 -146
  409. package/server/hume-DtWN8oV5.js +0 -3
  410. package/server/inspect-agent-CPqXI81t.js +0 -2
  411. package/server/merge-ops-7QqziXAh.js +0 -2
  412. package/server/merge-rebase-B4pgzvQJ.js +0 -2
  413. package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
  414. package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
  415. package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
  416. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
  417. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
  418. package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
  419. package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
  420. package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
  421. package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
  422. package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
  423. package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
  424. package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  425. package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
  426. package/server/project-repos-BgW4lcIa.js +0 -3
  427. package/server/projects-_n3Zui6K.js +0 -3
  428. package/server/providers-BI1mOBQ4.js +0 -3
  429. package/server/public/assets/index-Ddkcz3WT.css +0 -1
  430. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
  431. package/server/rally-x6ztTQo4.js +0 -3
  432. package/server/record-BTwWhtBb.js +0 -3
  433. package/server/record-update-DaOKS7Wb.js +0 -277
  434. package/server/recovery-trip-D-wM9EfB.js +0 -44
  435. package/server/resume-DXIIfJNk.js +0 -3
  436. package/server/rollup-DxCjJaAM.js +0 -3
  437. package/server/settings-9jSGHBPY.js +0 -2
  438. package/server/specs-DKV3jIEs.js +0 -3
  439. package/server/stack-health-CoWAhA99.js +0 -3
  440. package/server/supervisor-CyR_mW5B.js +0 -2
  441. package/server/tmux-Ctk6RV5l.js +0 -3
  442. package/server/token-util-CrfQ2FKf.js +0 -3
  443. package/server/workflows-DN6NyVGd.js +0 -2
  444. package/server/workspace-manager-B38rFWA1.js +0 -3
@@ -1,7 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
- import { o as init_activity_logger, s as setActivityEventStoreProvider } from "./activity-logger-CyteR4JO.js";
4
- import { A as init_paths$1, d as getOverdeckDatabaseSync, f as init_infra, k as getOverdeckDatabasePath } from "./infra-BDQDRopn.js";
2
+ import { hi as init_paths, mi as getOverdeckHome } from "./config-yaml-BSCqwmX0.js";
3
+ import { c as init_activity_logger, l as setActivityEventStoreProvider } from "./activity-logger-Co5qljIj.js";
4
+ import { A as init_paths$1, d as getOverdeckDatabaseSync, f as init_infra, k as getOverdeckDatabasePath } from "./infra-CTrmVqc_.js";
5
+ import { a as getWorkspaceForIssue, o as init_resolver } from "./resolver-BvHd6RE4.js";
6
+ import { t as init_review_status_limits } from "./review-status-limits-4EJDCGHO.js";
5
7
  import { existsSync } from "node:fs";
6
8
  import { EventEmitter } from "node:events";
7
9
  import { mkdir } from "node:fs/promises";
@@ -21,6 +23,45 @@ import { mkdir } from "node:fs/promises";
21
23
  * const past = store.readFrom(0);
22
24
  * const unsub = store.subscribe(event => console.log(event));
23
25
  */
26
+ /** Default workspace-id resolver: the real workspaces resolver against the global overdeck.db. */
27
+ function defaultResolveWorkspaceId(issueId) {
28
+ return getWorkspaceForIssue(issueId)?.id;
29
+ }
30
+ /**
31
+ * PAN-1990 D-10/WI-11: stamp `workspaceId` onto any issue-bearing event
32
+ * payload that omits it, so a producer that only knows `issueId` still
33
+ * reaches workspace-scoped consumers without every call site resolving the
34
+ * lookup itself. Never overwrites a payload that already carries a
35
+ * `workspaceId` — some producers (e.g. operatorInterventionEvent) resolve it
36
+ * themselves at construction time and that value wins.
37
+ *
38
+ * Review fix (non-blocking, test isolation/perf): the resolver is injected
39
+ * (defaulting to the real one) so a store built with a mock DbAdapter for
40
+ * unit tests can opt out of touching the global overdeck.db, and resolution
41
+ * is wrapped in try/catch so a resolver failure — e.g. a test DB that isn't
42
+ * in a state this lookup expects — degrades to "no stamp" rather than
43
+ * breaking the append itself.
44
+ */
45
+ function withWorkspaceId(event, resolveWorkspaceId) {
46
+ const payload = event["payload"];
47
+ if (!payload || typeof payload !== "object") return event;
48
+ const record = payload;
49
+ if (record["workspaceId"] !== void 0 || typeof record["issueId"] !== "string") return event;
50
+ let workspaceId;
51
+ try {
52
+ workspaceId = resolveWorkspaceId(record["issueId"]);
53
+ } catch {
54
+ return event;
55
+ }
56
+ if (!workspaceId) return event;
57
+ return {
58
+ ...event,
59
+ payload: {
60
+ ...record,
61
+ workspaceId
62
+ }
63
+ };
64
+ }
24
65
  function rowToStored(row) {
25
66
  return {
26
67
  sequence: row.sequence,
@@ -46,11 +87,60 @@ async function openEventDb() {
46
87
  if (!existsSync(home)) await mkdir(home, { recursive: true });
47
88
  return getOverdeckDatabaseSync(getOverdeckDatabasePath());
48
89
  }
90
+ function truncateHistoryNote(notes) {
91
+ if (!notes || notes.length <= 500) return notes;
92
+ return notes.slice(0, 499) + "…";
93
+ }
49
94
  /**
50
- * Create an EventStore from a pre-opened DbAdapter.
51
- * Call openEventDb() first to get the adapter.
95
+ * Enforce review.status_changed payload bounds at the persistence door.
96
+ * Returns the bounded JSON string if changes were needed, or the original string unchanged.
97
+ * Applied before every append/appendOnce to prevent unbounded payloads from entering the store.
52
98
  */
53
- function createEventStore(db) {
99
+ function boundReviewStatusPayload(payload) {
100
+ try {
101
+ const parsed = JSON.parse(payload);
102
+ const history = parsed.status?.history;
103
+ if (!Array.isArray(history)) return payload;
104
+ const needsHistorySlice = history.length > 20;
105
+ let needsNoteTruncation = false;
106
+ for (const entry of history) if (entry.notes && entry.notes.length > 500) {
107
+ needsNoteTruncation = true;
108
+ break;
109
+ }
110
+ if (!needsHistorySlice && !needsNoteTruncation) return payload;
111
+ const boundedHistory = needsHistorySlice ? history.slice(-20) : history;
112
+ for (const entry of boundedHistory) entry.notes = truncateHistoryNote(entry.notes);
113
+ parsed.status.history = boundedHistory;
114
+ return JSON.stringify(parsed);
115
+ } catch {
116
+ return payload;
117
+ }
118
+ }
119
+ /**
120
+ * PAN-3253: Boot-time trim for older review.status_changed rows.
121
+ * On one machine, this event type was 80% of a 1.3 GB overdeck.db.
122
+ * Delegates to boundReviewStatusPayload to enforce the same bounds
123
+ * that prevent new unbounded payloads from entering at the append door.
124
+ */
125
+ function trimReviewStatusHistoryPayloads(db) {
126
+ const rows = db.prepare(`SELECT sequence, payload FROM events WHERE type = 'review.status_changed' AND length(payload) > ?`).all([OVERSIZED_REVIEW_PAYLOAD_CHARS]);
127
+ const update = db.prepare("UPDATE events SET payload = ? WHERE sequence = ?");
128
+ let trimmed = 0;
129
+ let savedChars = 0;
130
+ for (const row of rows) {
131
+ const bounded = boundReviewStatusPayload(row.payload);
132
+ if (bounded === row.payload) continue;
133
+ update.run([bounded, row.sequence]);
134
+ trimmed += 1;
135
+ savedChars += row.payload.length - bounded.length;
136
+ }
137
+ return {
138
+ trimmed,
139
+ savedChars
140
+ };
141
+ }
142
+ function createEventStore(db, options) {
143
+ const resolveWorkspaceId = options?.resolveWorkspaceId ?? defaultResolveWorkspaceId;
54
144
  const emitter = new EventEmitter();
55
145
  emitter.setMaxListeners(0);
56
146
  const insertStmt = db.prepare(`INSERT INTO events (type, timestamp, payload) VALUES (?, ?, ?)`);
@@ -69,6 +159,16 @@ function createEventStore(db) {
69
159
  ) latest ON e.sequence = latest.max_seq
70
160
  ORDER BY e.sequence ASC`);
71
161
  const purgeTypeStmt = db.prepare(`DELETE FROM events WHERE type = ?`);
162
+ let idempotencyStmts = null;
163
+ function getIdempotencyStmts() {
164
+ idempotencyStmts ??= {
165
+ claim: db.prepare(`INSERT OR IGNORE INTO event_idempotency (key, sequence, created_at) VALUES (?, ?, ?)`),
166
+ read: db.prepare(`SELECT sequence FROM event_idempotency WHERE key = ?`),
167
+ setSeq: db.prepare(`UPDATE event_idempotency SET sequence = ? WHERE key = ?`),
168
+ compact: db.prepare(`DELETE FROM event_idempotency WHERE created_at < ?`)
169
+ };
170
+ return idempotencyStmts;
171
+ }
72
172
  let writeQueue = [];
73
173
  let flushScheduled = false;
74
174
  function scheduleFlush() {
@@ -110,8 +210,10 @@ function createEventStore(db) {
110
210
  }, 0);
111
211
  }
112
212
  function append(event) {
213
+ event = withWorkspaceId(event, resolveWorkspaceId);
113
214
  const timestamp = eventTimestampMillis(event);
114
- const payload = JSON.stringify(event["payload"] ?? {});
215
+ let payload = JSON.stringify(event["payload"] ?? {});
216
+ if (event.type === "review.status_changed") payload = boundReviewStatusPayload(payload);
115
217
  insertStmt.run([
116
218
  event.type,
117
219
  timestamp,
@@ -128,9 +230,11 @@ function createEventStore(db) {
128
230
  return sequence;
129
231
  }
130
232
  function appendAsync(event) {
233
+ event = withWorkspaceId(event, resolveWorkspaceId);
131
234
  return new Promise((resolve) => {
132
235
  const timestamp = eventTimestampMillis(event);
133
- const payload = JSON.stringify(event["payload"] ?? {});
236
+ let payload = JSON.stringify(event["payload"] ?? {});
237
+ if (event.type === "review.status_changed") payload = boundReviewStatusPayload(payload);
134
238
  writeQueue.push({
135
239
  type: event.type,
136
240
  timestamp,
@@ -142,6 +246,7 @@ function createEventStore(db) {
142
246
  });
143
247
  }
144
248
  function emitOnly(event) {
249
+ event = withWorkspaceId(event, resolveWorkspaceId);
145
250
  const timestamp = eventTimestampMillis(event);
146
251
  const stored = {
147
252
  sequence: -1,
@@ -162,6 +267,10 @@ function createEventStore(db) {
162
267
  const sevenDaysAgo = Date.now() - 10080 * 60 * 1e3;
163
268
  const result = compactStmt.run([sevenDaysAgo]);
164
269
  if (result.changes > 0) console.log(`[event-store] Compacted ${result.changes} events older than 7 days`);
270
+ try {
271
+ const claims = getIdempotencyStmts().compact.run([sevenDaysAgo]);
272
+ if (claims.changes > 0) console.log(`[event-store] Compacted ${claims.changes} idempotency keys older than 7 days`);
273
+ } catch {}
165
274
  }
166
275
  function purgeType(type) {
167
276
  return purgeTypeStmt.run([type]).changes;
@@ -175,6 +284,53 @@ function createEventStore(db) {
175
284
  function queryLatestPerIssue(type) {
176
285
  return queryLatestPerIssueStmt.all([type]).map(rowToStored);
177
286
  }
287
+ function appendOnce(event, idempotencyKey) {
288
+ event = withWorkspaceId(event, resolveWorkspaceId);
289
+ const stmts = getIdempotencyStmts();
290
+ const timestamp = eventTimestampMillis(event);
291
+ let payload = JSON.stringify(event["payload"] ?? {});
292
+ if (event.type === "review.status_changed") payload = boundReviewStatusPayload(payload);
293
+ let sequence = 0;
294
+ let duplicate = false;
295
+ db.exec("BEGIN IMMEDIATE");
296
+ try {
297
+ stmts.claim.run([
298
+ idempotencyKey,
299
+ 0,
300
+ Date.now()
301
+ ]);
302
+ const claimed = stmts.read.get([idempotencyKey]);
303
+ if (claimed && claimed.sequence !== 0) {
304
+ duplicate = true;
305
+ sequence = claimed.sequence;
306
+ } else {
307
+ insertStmt.run([
308
+ event.type,
309
+ timestamp,
310
+ payload
311
+ ]);
312
+ sequence = lastRowIdStmt.get()?.sequence ?? 0;
313
+ stmts.setSeq.run([sequence, idempotencyKey]);
314
+ }
315
+ db.exec("COMMIT");
316
+ } catch (err) {
317
+ try {
318
+ db.exec("ROLLBACK");
319
+ } catch {}
320
+ idempotencyStmts = null;
321
+ throw err;
322
+ }
323
+ if (!duplicate) emitter.emit("event", {
324
+ sequence,
325
+ type: event.type,
326
+ timestamp: new Date(timestamp).toISOString(),
327
+ payload: JSON.parse(payload)
328
+ });
329
+ return {
330
+ outcome: duplicate ? "duplicate" : "appended",
331
+ sequence
332
+ };
333
+ }
178
334
  function queryByTypesSince(types, afterSequence) {
179
335
  if (types.length === 0) return [];
180
336
  const placeholders = types.map(() => "?").join(", ");
@@ -190,6 +346,7 @@ function createEventStore(db) {
190
346
  readFrom,
191
347
  queryByType,
192
348
  queryLatestPerIssue,
349
+ appendOnce,
193
350
  queryByTypesSince,
194
351
  subscribe,
195
352
  compact,
@@ -220,6 +377,19 @@ async function initEventStore() {
220
377
  console.error("[event-store] incremental_vacuum failed (non-fatal):", err);
221
378
  }
222
379
  }
380
+ try {
381
+ const trim = trimReviewStatusHistoryPayloads(db);
382
+ if (trim.trimmed > 0) {
383
+ const savedMb = Math.round(trim.savedChars / (1024 * 1024));
384
+ console.log(`[event-store] Trimmed history in ${trim.trimmed} review.status_changed payloads (~${savedMb} MB reclaimed)`);
385
+ if (trim.savedChars > 64 * 1024 * 1024) {
386
+ db.exec("VACUUM");
387
+ console.log("[event-store] VACUUM completed after review-history trim");
388
+ } else db.exec("PRAGMA incremental_vacuum");
389
+ }
390
+ } catch (err) {
391
+ console.error("[event-store] review-history payload trim failed (non-fatal):", err);
392
+ }
223
393
  _store = store;
224
394
  setActivityEventStoreProvider(() => store);
225
395
  return store;
@@ -242,17 +412,20 @@ function getEventStore() {
242
412
  if (!_store) throw new Error("[event-store] getEventStore() called before initEventStore() resolved. Use initEventStore() for async initialization.");
243
413
  return _store;
244
414
  }
245
- var _store, _db, _initPromise;
415
+ var OVERSIZED_REVIEW_PAYLOAD_CHARS, _store, _db, _initPromise;
246
416
  var init_event_store = __esmMin((() => {
247
417
  init_paths();
248
418
  init_activity_logger();
249
419
  init_paths$1();
250
420
  init_infra();
421
+ init_resolver();
422
+ init_review_status_limits();
423
+ OVERSIZED_REVIEW_PAYLOAD_CHARS = 16 * 1024;
251
424
  _store = null;
252
425
  _db = null;
253
426
  _initPromise = null;
254
427
  }));
255
428
  //#endregion
256
- export { init_event_store as a, initEventStore as i, getEventStore as n, openEventDb as o, getSharedDb as r, createEventStore as t };
429
+ export { init_event_store as a, initEventStore as i, getEventStore as n, openEventDb as o, getSharedDb as r, trimReviewStatusHistoryPayloads as s, createEventStore as t };
257
430
 
258
- //# sourceMappingURL=event-store-CrHcVC5_.js.map
431
+ //# sourceMappingURL=event-store-D_AR-Y78.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_events, o as readEventsSync } from "./events-DhRN-6vM.js";
1
+ import { i as init_events, o as readEventsSync } from "./events-zjDQozet.js";
2
2
  init_events();
3
3
  export { readEventsSync };
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, Gn as init_projects, Yn as listProjectsSync, gr as init_issue_id, hr as extractPrefixSync } from "./config-yaml-CxdwhAIA.js";
3
- import { d as init_cost_sync, f as insertCostEventSync } from "./cost-sync-DiUBXwl6.js";
2
+ import { Mn as extractPrefixSync, Nn as init_issue_id, Vr as init_errors, cn as init_projects, fn as listProjectsSync } from "./config-yaml-BSCqwmX0.js";
3
+ import { d as init_cost_sync, f as insertCostEventSync } from "./cost-sync-cesi9dp8.js";
4
4
  import "effect";
5
5
  import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "fs";
6
6
  import { join } from "path";
@@ -245,4 +245,4 @@ var init_events = __esmMin((() => {
245
245
  //#endregion
246
246
  export { readEventsFromLineSync as a, tailEventsSync as c, init_events as i, init_wal as l, deduplicateEventsSync as n, readEventsSync as o, getLastEventMetadataSync as r, replaceEventsFileSync as s, appendCostEventSync as t };
247
247
 
248
- //# sourceMappingURL=events-DhRN-6vM.js.map
248
+ //# sourceMappingURL=events-zjDQozet.js.map
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Dr as GitHubApiError, Fr as init_errors, f as loadConfigSync, kr as LinearApiError, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
- import { n as init_dist_src, t as Octokit } from "./dist-src-B-AlGWSl.js";
4
- import { a as TrackerAuthError, i as NotImplementedError, o as init_interface, r as IssueNotFoundError } from "./rally-api-CzkKenoi.js";
5
- import { n as init_rally, t as RallyTracker } from "./rally-Cxe7lKYX.js";
2
+ import { Mr as GitHubApiError, Pr as LinearApiError, Vr as init_errors, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-BSCqwmX0.js";
3
+ import { n as init_dist_src, t as Octokit } from "./dist-src-C-Vk2jNk.js";
4
+ import { a as TrackerAuthError, i as NotImplementedError, o as init_interface, r as IssueNotFoundError } from "./rally-api-CZLeEd2C.js";
5
+ import { n as init_rally, t as RallyTracker } from "./rally-DbE561hD.js";
6
6
  import { Effect } from "effect";
7
7
  import { LinearClient } from "@linear/sdk";
8
8
  //#region ../../lib/tracker/linear.ts
@@ -719,4 +719,4 @@ var init_factory = __esmMin((() => {
719
719
  //#endregion
720
720
  export { init_linear as a, LinearTracker as i, createTrackerFromConfig as n, init_factory as r, createTracker as t };
721
721
 
722
- //# sourceMappingURL=factory-BezSPaTd.js.map
722
+ //# sourceMappingURL=factory-DhavwKVc.js.map
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
- import { r as updateFeatureRegistryOwnership, t as init_feature_registry_storage } from "./feature-registry-storage-CUVNpAso.js";
4
- import { t as init_providers } from "./providers-O2smCvSz.js";
2
+ import { t as init_config_yaml } from "./config-yaml-BSCqwmX0.js";
3
+ import { r as updateFeatureRegistryOwnership, t as init_feature_registry_storage } from "./feature-registry-storage-C5DkXmCM.js";
4
+ import { t as init_providers } from "./providers-ClGPGkQ8.js";
5
5
  import { basename } from "node:path";
6
6
  import { Schema } from "effect";
7
7
  //#region ../../lib/registry/feature-registry-population.ts
@@ -40,4 +40,4 @@ var init_feature_registry_population = __esmMin((() => {
40
40
  //#endregion
41
41
  export { recordFeatureRegistryLifecycle as n, init_feature_registry_population as t };
42
42
 
43
- //# sourceMappingURL=feature-registry-population-DhswNiXx.js.map
43
+ //# sourceMappingURL=feature-registry-population-DWGBKyWd.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ci as getOverdeckHome, li as init_paths } from "./config-yaml-CxdwhAIA.js";
3
- import { n as openDatabase, t as init_driver } from "./driver-CKVGi51s.js";
2
+ import { hi as init_paths, mi as getOverdeckHome } from "./config-yaml-BSCqwmX0.js";
3
+ import { n as openDatabase, t as init_driver } from "./driver-CmsY2RLl.js";
4
4
  import { dirname, join } from "node:path";
5
5
  import { mkdirSync } from "node:fs";
6
6
  import { randomUUID } from "node:crypto";
@@ -263,4 +263,4 @@ var init_feature_registry_storage = __esmMin((() => {
263
263
  //#endregion
264
264
  export { listFeatureRegistryEntries as n, updateFeatureRegistryOwnership as r, init_feature_registry_storage as t };
265
265
 
266
- //# sourceMappingURL=feature-registry-storage-CUVNpAso.js.map
266
+ //# sourceMappingURL=feature-registry-storage-C5DkXmCM.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
2
+ import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-BSCqwmX0.js";
3
3
  //#region ../../lib/background-ai/features.ts
4
4
  /**
5
5
  * The single gate every background AI caller must consult before invoking a
@@ -18,4 +18,4 @@ var init_features = __esmMin((() => {
18
18
  //#endregion
19
19
  export { isBackgroundFeatureEnabled as n, init_features as t };
20
20
 
21
- //# sourceMappingURL=features-B2CfNPFw.js.map
21
+ //# sourceMappingURL=features-CC47YcCX.js.map
@@ -1,3 +1,3 @@
1
- import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-VBr9gKgX.js";
1
+ import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-DoRCR3L-.js";
2
2
  init_feedback_target();
3
3
  export { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou };
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, Pt as init_record, ar as resolveProjectFromIssueSync, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
3
- import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
4
- import { H as sessionExists, M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
5
- import { n as readFeedbackAgentStates, t as init_agent_state_source } from "./agent-state-source-Ca_zCaII.js";
2
+ import { Q as readIssueRecordSync, Sn as resolveProjectFromIssueSync, cn as init_projects, nn as getProjectSync, q as init_record } from "./config-yaml-BSCqwmX0.js";
3
+ import { i as updateIssueRecord, r as init_record_update } from "./record-update-CZh46a2f.js";
4
+ import { C as init_tmux, V as sessionExists, j as listSessionNames } from "./tmux-CImZaX4q.js";
5
+ import { n as readFeedbackAgentStates, t as init_agent_state_source } from "./agent-state-source-Ds968-j6.js";
6
6
  import { Effect } from "effect";
7
7
  //#region ../../lib/cloister/feedback-target.ts
8
8
  async function isLiveSession(agentId) {
@@ -118,7 +118,7 @@ async function resolveIssueFeedbackTarget(issueId, opts = {}) {
118
118
  */
119
119
  async function resurrectAgentForFeedback(agentId, issueId) {
120
120
  try {
121
- const { getAgentStateSync, clearAgentPausedSync, clearAgentTroubledSync } = await import("./agent-state-DyZJia9f.js");
121
+ const { getAgentStateSync, clearAgentPausedSync, clearAgentTroubledSync } = await import("./agent-state-Dq3s84-P.js");
122
122
  const state = getAgentStateSync(agentId);
123
123
  if (!state) return false;
124
124
  if (state.paused === true) {
@@ -134,7 +134,7 @@ async function resurrectAgentForFeedback(agentId, issueId) {
134
134
  console.warn(`[feedback-target] ${agentId} is gated (troubled=${state.troubled === true}, failures=${state.consecutiveFailures ?? 0}) — clearing for one resurrection attempt to deliver ${issueId} feedback; failure tracking re-trips the gate on another crash`);
135
135
  clearAgentTroubledSync(agentId);
136
136
  }
137
- const { resumeAgent } = await import("./resume-DXIIfJNk.js");
137
+ const { resumeAgent } = await import("./resume-9thEqAQR.js");
138
138
  const result = await resumeAgent(agentId);
139
139
  if (!result.success) {
140
140
  console.warn(`[feedback-target] Failed to resurrect ${agentId} for ${issueId} feedback: ${result.error}`);
@@ -148,7 +148,7 @@ async function resurrectAgentForFeedback(agentId, issueId) {
148
148
  }
149
149
  async function surfaceIssueFeedbackNeedsYou(issueId, reason, details = {}) {
150
150
  try {
151
- const { markWorkspaceStuck, FEEDBACK_DELIVERY_STUCK_REASON } = await import("./review-status-CacDM78F.js");
151
+ const { markWorkspaceStuck, FEEDBACK_DELIVERY_STUCK_REASON } = await import("./review-status-B6wYcOtP.js");
152
152
  markWorkspaceStuck(issueId, FEEDBACK_DELIVERY_STUCK_REASON, {
153
153
  reason,
154
154
  ...details
@@ -168,4 +168,4 @@ var init_feedback_target = __esmMin((() => {
168
168
  //#endregion
169
169
  export { resolveIssueFeedbackTarget as n, surfaceIssueFeedbackNeedsYou as r, init_feedback_target as t };
170
170
 
171
- //# sourceMappingURL=feedback-target-VBr9gKgX.js.map
171
+ //# sourceMappingURL=feedback-target-DoRCR3L-.js.map
@@ -1,3 +1,3 @@
1
- import { a as writeFeedbackFile, i as init_feedback_writer, n as archiveFeedbackFiles, r as clearFeedbackFiles, t as FeedbackWriteError } from "./feedback-writer-xpFgU632.js";
1
+ import { a as writeFeedbackFile, i as init_feedback_writer, n as archiveFeedbackFiles, r as clearFeedbackFiles, t as FeedbackWriteError } from "./feedback-writer-DdsBdtNL.js";
2
2
  init_feedback_writer();
3
3
  export { FeedbackWriteError, archiveFeedbackFiles, clearFeedbackFiles, writeFeedbackFile };
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
3
- import { I as getWorkspacePanPaths } from "./io-C0NV7y6C.js";
4
- import { c as clearFeedback, l as readFeedback, t as init_pan_dir, u as writeFeedback } from "./pan-dir-DAOb1V2-.js";
5
- import { a as init_lifecycle_io, n as appendFeedbackEntryForIssue, o as readContinueStateForIssue, r as clearFeedbackForIssue, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-1XSeczTr.js";
2
+ import { Sn as resolveProjectFromIssueSync, cn as init_projects } from "./config-yaml-BSCqwmX0.js";
3
+ import { R as getWorkspacePanPaths } from "./io-mxOWMZ7I.js";
4
+ import { c as clearFeedback, l as readFeedback, t as init_pan_dir, u as writeFeedback } from "./pan-dir-DhgKfO86.js";
5
+ import { a as init_lifecycle_io, n as appendFeedbackEntryForIssue, o as readContinueStateForIssue, r as clearFeedbackForIssue, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-NPm1YtIG.js";
6
6
  import { Data, Effect } from "effect";
7
7
  import { existsSync } from "fs";
8
8
  import { join } from "path";
@@ -149,4 +149,4 @@ var init_feedback_writer = __esmMin((() => {
149
149
  //#endregion
150
150
  export { writeFeedbackFile as a, init_feedback_writer as i, archiveFeedbackFiles as n, clearFeedbackFiles as r, FeedbackWriteError as t };
151
151
 
152
- //# sourceMappingURL=feedback-writer-xpFgU632.js.map
152
+ //# sourceMappingURL=feedback-writer-DdsBdtNL.js.map
@@ -1,2 +1,2 @@
1
- import { c as pauseFlywheel, l as resumeFlywheel } from "./flywheel-CTVY3yCG.js";
1
+ import { c as pauseFlywheel, l as resumeFlywheel } from "./flywheel-TacAI9MA.js";
2
2
  export { pauseFlywheel, resumeFlywheel };
@@ -1,16 +1,16 @@
1
- import { Cn as resolveStateReadHomeSync, Gn as init_projects, Mn as findProjectByPathSync, Sn as init_state_read_home, f as loadConfigSync, t as init_config_yaml, tt as resolveModel } from "./config-yaml-CxdwhAIA.js";
2
- import { H as sessionExists, w as init_tmux } from "./tmux-CfDHob9M.js";
3
- import { C as FlywheelStatus, p as FlywheelStats, t as init_src } from "./src-B948bGVR.js";
4
- import { b as init_agents } from "./queries-DCX27GRr.js";
5
- import { s as init_internal_token } from "./internal-token-BG6yQKNL.js";
6
- import { c as init_control_settings, f as isFlywheelAutoPickupBacklog, i as getFlywheelActiveRunId, m as isFlywheelRequireUatBeforeMerge } from "./control-settings-qYYHrIqy.js";
7
- import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-BVj6sI8m.js";
8
- import { f as init_github_app } from "./github-app-gVnZcP9B.js";
9
- import "./substrate-bug-weights-service-BvTWrFUz.js";
10
- import { t as init_sequence_io } from "./sequence-io-D9ITDxzq.js";
11
- import { A as advanceQueue, B as getBook, D as writeFlywheelLaunchMetadata, L as setStatus, O as writeLatestFlywheelStatus, S as nextFlywheelRunId, _ as clearFlywheelGate, d as spawnFlywheel, h as resolvePrimaryWorktreeRoot, m as requireFlywheelBrief, n as abortSpawnedFlywheel, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, v as getFlywheelRunDetail, w as readFlywheelLaunchMetadata, x as listFlywheelRuns, y as getFlywheelRunDir, z as computeBookProgress } from "./flywheel-CTVY3yCG.js";
12
- import { r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject } from "./flywheel-merge-order-CMGz-imq.js";
13
- import { r as validateBookForStart } from "./validate-606KcYZC.js";
1
+ import { Bt as resolveStateReadHomeSync, Yt as findProjectByPathSync, cn as init_projects, dr as resolveModel, f as loadConfigSync, t as init_config_yaml, zt as init_state_read_home } from "./config-yaml-BSCqwmX0.js";
2
+ import { C as init_tmux, V as sessionExists } from "./tmux-CImZaX4q.js";
3
+ import { C as FlywheelStatus, p as FlywheelStats, t as init_src } from "./src-BYdwL_n-.js";
4
+ import { b as init_agents } from "./queries-DVpl1vsU.js";
5
+ import { s as init_internal_token } from "./internal-token-AvXePaQT.js";
6
+ import { c as init_control_settings, f as isFlywheelAutoPickupBacklog, i as getFlywheelActiveRunId, m as isFlywheelRequireUatBeforeMerge } from "./control-settings-DVf6pKyv.js";
7
+ import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-bj9WMABA.js";
8
+ import { f as init_github_app } from "./github-app-D2QuvZ3j.js";
9
+ import "./substrate-bug-weights-service-DxpopNd9.js";
10
+ import { t as init_sequence_io } from "./sequence-io-Fw-cLyDs.js";
11
+ import { A as advanceQueue, B as getBook, D as writeFlywheelLaunchMetadata, L as setStatus, O as writeLatestFlywheelStatus, S as nextFlywheelRunId, _ as clearFlywheelGate, d as spawnFlywheel, h as resolvePrimaryWorktreeRoot, m as requireFlywheelBrief, n as abortSpawnedFlywheel, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, v as getFlywheelRunDetail, w as readFlywheelLaunchMetadata, x as listFlywheelRuns, y as getFlywheelRunDir, z as computeBookProgress } from "./flywheel-TacAI9MA.js";
12
+ import { r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject } from "./flywheel-merge-order-DRtex2Dt.js";
13
+ import { r as validateBookForStart } from "./validate-f3ItVCfm.js";
14
14
  import { join } from "node:path";
15
15
  import { Effect, Schema } from "effect";
16
16
  import { freemem, totalmem } from "node:os";
@@ -475,4 +475,4 @@ createFlywheelCompleteCommand({
475
475
  //#endregion
476
476
  export { flywheelReportCommand, startFlywheelRun };
477
477
 
478
- //# sourceMappingURL=flywheel-DQqsSm7P.js.map
478
+ //# sourceMappingURL=flywheel-DJQa9az8.js.map
@@ -1,17 +1,18 @@
1
1
  import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Cn as resolveStateReadHomeSync, Gn as init_projects, Mn as findProjectByPathSync, Rn as getProjectSwarmHotspots, Sn as init_state_read_home, cn as flushAutoCommits, ln as init_auto_commit, un as queueAutoCommit } from "./config-yaml-CxdwhAIA.js";
3
- import { C as FlywheelStatus, S as FlywheelRunId, d as OrderBook, f as OrderBookIndexEntry, t as init_src } from "./src-B948bGVR.js";
4
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CwhA9wmd.js";
5
- import { a as countAgentsByStatusRole, o as init_agents } from "./agents-CtACUuVG.js";
6
- import { $n as getAgentDir, Er as init_resume_contract, Tr as buildResumeContract, b as init_agents$1, dt as spawnRun, pt as stopAgent } from "./queries-DCX27GRr.js";
7
- import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-F3A5VP6M.js";
8
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BG6yQKNL.js";
9
- import { C as setFlywheelGloballyPaused, c as init_control_settings, f as isFlywheelAutoPickupBacklog, i as getFlywheelActiveRunId, m as isFlywheelRequireUatBeforeMerge, p as isFlywheelGloballyPaused, x as setFlywheelActiveRunId } from "./control-settings-qYYHrIqy.js";
10
- import { n as parseSequenceMd, t as init_sequence_io } from "./sequence-io-D9ITDxzq.js";
11
- import { h as init_pickup, r as LEGACY_PARKED_LABELS, u as computeCohort } from "./pickup-zXZl5lQI.js";
12
- import { a as gatherProjectLensSignals, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-BIcJ-N0W.js";
13
- import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-B2yUcBz7.js";
14
- import { a as computePredictedConflictSignals, l as pickFromSequence, o as declaredIssueFootprint } from "./flywheel-merge-order-CMGz-imq.js";
2
+ import { Bt as resolveStateReadHomeSync, St as init_auto_commit, Yt as findProjectByPathSync, cn as init_projects, tn as getProjectSwarmHotspots, wt as queueAutoCommit, xt as flushAutoCommits, zt as init_state_read_home } from "./config-yaml-BSCqwmX0.js";
3
+ import { C as FlywheelStatus, S as FlywheelRunId, d as OrderBook, f as OrderBookIndexEntry, t as init_src } from "./src-BYdwL_n-.js";
4
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
5
+ import { a as countAgentsByStatusRole, o as init_agents } from "./agents-Dls7tfJH.js";
6
+ import { Et as spawnRun, Hr as buildResumeContract, Ot as stopAgent, Ur as init_resume_contract, b as init_agents$1, gr as getAgentDir } from "./queries-DVpl1vsU.js";
7
+ import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-BPNEXczv.js";
8
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-AvXePaQT.js";
9
+ import { N as getProjectPanPaths, P as init_paths } from "./io-mxOWMZ7I.js";
10
+ import { C as setFlywheelGloballyPaused, c as init_control_settings, f as isFlywheelAutoPickupBacklog, i as getFlywheelActiveRunId, m as isFlywheelRequireUatBeforeMerge, p as isFlywheelGloballyPaused, x as setFlywheelActiveRunId } from "./control-settings-DVf6pKyv.js";
11
+ import { n as parseSequenceMd, t as init_sequence_io } from "./sequence-io-Fw-cLyDs.js";
12
+ import { h as init_pickup, r as LEGACY_PARKED_LABELS, u as computeCohort } from "./pickup-2AxtB3dW.js";
13
+ import { a as gatherProjectLensSignals, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-CtJ_7aGf.js";
14
+ import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-Dqv6_0ig.js";
15
+ import { a as computePredictedConflictSignals, l as pickFromSequence, o as declaredIssueFootprint } from "./flywheel-merge-order-DRtex2Dt.js";
15
16
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
16
17
  import { Effect, Schema } from "effect";
17
18
  import { homedir } from "node:os";
@@ -25,6 +26,7 @@ init_state_read_home();
25
26
  init_auto_commit();
26
27
  init_internal_token();
27
28
  init_review_status();
29
+ init_paths();
28
30
  init_agents$1();
29
31
  init_sequence_io();
30
32
  init_pickup();
@@ -800,7 +802,7 @@ function buildClassifyLookups(projectRoot, opts = {}) {
800
802
  labelsByIssue.set(id, names);
801
803
  }
802
804
  } catch {}
803
- const specsDir = join(projectRoot, ".pan", "specs");
805
+ const specsDir = getProjectPanPaths(projectRoot).specsDir;
804
806
  const specIssues = /* @__PURE__ */ new Set();
805
807
  if (existsSync(specsDir)) for (const f of readdirSync(specsDir)) {
806
808
  const m = /^[\d-]+-([A-Z]+-\d+)-/i.exec(f);
@@ -821,6 +823,7 @@ function buildClassifyLookups(projectRoot, opts = {}) {
821
823
  }
822
824
  //#endregion
823
825
  //#region ../../lib/cloister/flywheel.ts
826
+ init_paths();
824
827
  init_sequence_io();
825
828
  init_projects();
826
829
  init_state_read_home();
@@ -913,7 +916,8 @@ async function flywheelRunConfigurationSection(options, runId) {
913
916
  if (row.author && AUTHORIZED_AUTHORS.has(row.author)) return true;
914
917
  return (typeof row.assignee === "string" ? row.assignee : row.assignee?.name) === "eltmon";
915
918
  };
916
- const specsDir = join(projectRoot, ".pan", "specs");
919
+ const paths = getProjectPanPaths(projectRoot);
920
+ const specsDir = paths.specsDir;
917
921
  const issuesWithSpecs = /* @__PURE__ */ new Set();
918
922
  const declaredFootprints = [];
919
923
  if (existsSync(specsDir)) for (const f of readdirSync(specsDir)) {
@@ -931,7 +935,7 @@ async function flywheelRunConfigurationSection(options, runId) {
931
935
  const isReadyOrHasPrd = (issueId) => {
932
936
  const id = issueId.toUpperCase();
933
937
  if (issuesWithSpecs.has(id)) return true;
934
- return existsSync(join(projectRoot, ".pan", "drafts", `${id}.md`));
938
+ return existsSync(join(paths.draftsDir, `${id}.md`));
935
939
  };
936
940
  const membershipAvailable = Boolean(projectConfig?.github_repo);
937
941
  const memberships = projectConfig?.github_repo ? (await gatherProjectLensSignals(projectConfig)).map(resolvePipelineMembership) : [];
@@ -1108,4 +1112,4 @@ async function resumeFlywheel(options = {}) {
1108
1112
  //#endregion
1109
1113
  export { advanceQueue as A, getBook as B, readCurrentLatestFlywheelStatus as C, writeFlywheelLaunchMetadata as D, subscribeLatestFlywheelStatus as E, setItemRequirements as F, liveOrderIssueLookup as H, setSettings as I, setStatus as L, moveItem as M, removeItem as N, writeLatestFlywheelStatus as O, renameBook as P, backlogCandidates as R, nextFlywheelRunId as S, resolveLiveFlywheelRunId as T, listBooks as V, clearFlywheelGate as _, isFlywheelDevcontainerRuntime as a, isFlywheelRunId as b, pauseFlywheel as c, spawnFlywheel as d, spawnFlywheelAgent as f, abortFlywheelRun as g, resolvePrimaryWorktreeRoot as h, buildFlywheelResumePrompt as i, createBook as j, addItems as k, resumeFlywheel as l, requireFlywheelBrief as m, abortSpawnedFlywheel as n, isIssueInResolvedPipeline as o, buildClassifyLookups as p, activeOrderBookIssues as r, loadResumeSessionId as s, FLYWHEEL_ORCHESTRATOR_AGENT_ID as t, saveResumeSessionId as u, getFlywheelRunDetail as v, readFlywheelLaunchMetadata as w, listFlywheelRuns as x, getFlywheelRunDir as y, computeBookProgress as z };
1110
1114
 
1111
- //# sourceMappingURL=flywheel-CTVY3yCG.js.map
1115
+ //# sourceMappingURL=flywheel-TacAI9MA.js.map
@@ -1,2 +1,2 @@
1
- import { a as computePredictedConflictSignals, c as orderMergeCandidates, d as planUatCandidate, f as resolveMergeQueuePrUrl, i as computePolyrepoMergeQueueFromCandidates, l as pickFromSequence, n as changedFilesVsMain, o as declaredIssueFootprint, p as reviewRecordEligibility, r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject, t as MERGE_QUEUE_GIT_CONCURRENCY, u as planMergeTrain } from "./flywheel-merge-order-CMGz-imq.js";
1
+ import { a as computePredictedConflictSignals, c as orderMergeCandidates, d as planUatCandidate, f as resolveMergeQueuePrUrl, i as computePolyrepoMergeQueueFromCandidates, l as pickFromSequence, n as changedFilesVsMain, o as declaredIssueFootprint, p as reviewRecordEligibility, r as computeMergeQueueFromCandidates, s as listEligibleCandidatesByProject, t as MERGE_QUEUE_GIT_CONCURRENCY, u as planMergeTrain } from "./flywheel-merge-order-DRtex2Dt.js";
2
2
  export { MERGE_QUEUE_GIT_CONCURRENCY, changedFilesVsMain, computeMergeQueueFromCandidates, computePolyrepoMergeQueueFromCandidates, computePredictedConflictSignals, declaredIssueFootprint, listEligibleCandidatesByProject, orderMergeCandidates, pickFromSequence, planMergeTrain, planUatCandidate, resolveMergeQueuePrUrl, reviewRecordEligibility };
@@ -1,9 +1,9 @@
1
- import { Gn as init_projects, Mn as findProjectByPathSync, Rn as getProjectSwarmHotspots, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
- import { d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status, v as mergeGateEligibility } from "./review-status-CwhA9wmd.js";
3
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-DZZq_C0R.js";
4
- import { l as init_dag, r as compileGlob } from "./dag-5QlmH0oC.js";
5
- import { n as computeIssueFootprint, r as init_swarm_readiness } from "./swarm-readiness-MNE5O8hn.js";
6
- import { g as isAutoPickable, h as init_pickup, l as classifyIssue } from "./pickup-zXZl5lQI.js";
1
+ import { Sn as resolveProjectFromIssueSync, Yt as findProjectByPathSync, cn as init_projects, tn as getProjectSwarmHotspots } from "./config-yaml-BSCqwmX0.js";
2
+ import { d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status, v as mergeGateEligibility } from "./review-status-CKLk5aZ-.js";
3
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-BDeAXC-q.js";
4
+ import { l as init_dag, r as compileGlob } from "./dag-BYiFMqpU.js";
5
+ import { n as computeIssueFootprint, r as init_swarm_readiness } from "./swarm-readiness-vTw1kqGa.js";
6
+ import { g as isAutoPickable, h as init_pickup, l as classifyIssue } from "./pickup-2AxtB3dW.js";
7
7
  import { Effect } from "effect";
8
8
  import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
9
9
  //#region ../../lib/flywheel-merge-order.ts
@@ -459,4 +459,4 @@ function pickFromSequence(nodes, opts) {
459
459
  //#endregion
460
460
  export { computePredictedConflictSignals as a, orderMergeCandidates as c, planUatCandidate as d, resolveMergeQueuePrUrl as f, computePolyrepoMergeQueueFromCandidates as i, pickFromSequence as l, changedFilesVsMain as n, declaredIssueFootprint as o, reviewRecordEligibility as p, computeMergeQueueFromCandidates as r, listEligibleCandidatesByProject as s, MERGE_QUEUE_GIT_CONCURRENCY as t, planMergeTrain as u };
461
461
 
462
- //# sourceMappingURL=flywheel-merge-order-CMGz-imq.js.map
462
+ //# sourceMappingURL=flywheel-merge-order-DRtex2Dt.js.map
@@ -0,0 +1,3 @@
1
+ import { n as getForgeAdapter, r as init_forge } from "./forge-c8LeC-tw.js";
2
+ init_forge();
3
+ export { getForgeAdapter };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { S as parsePullRequestRef, d as getPullRequestState, f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead, x as mergePullRequestWithApp } from "./github-app-gVnZcP9B.js";
2
+ import { S as parsePullRequestRef, d as getPullRequestState, f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead, x as mergePullRequestWithApp } from "./github-app-D2QuvZ3j.js";
3
3
  import { join } from "node:path";
4
4
  import { Data, Effect } from "effect";
5
5
  import { tmpdir } from "node:os";
@@ -380,4 +380,4 @@ var init_forge = __esmMin((() => {
380
380
  //#endregion
381
381
  export { parseArtifactRef as i, getForgeAdapter as n, init_forge as r, GITHUB_MERGE_TIMEOUT_MS as t };
382
382
 
383
- //# sourceMappingURL=forge-RTNqJe6a.js.map
383
+ //# sourceMappingURL=forge-c8LeC-tw.js.map