@overdeck/desktop 0.47.0 → 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-10Ur5Dne.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-BNwqxseD.js → advancing-selfheal-8AR68Asf.js} +6 -6
  7. package/server/{agent-gc-C3h9Or3a.js → agent-gc-BmYeT6eH.js} +5 -5
  8. package/server/agent-state-Dq3s84-P.js +3 -0
  9. package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DK1Vay1E.js} +1 -1
  10. package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-rjnzpHDx.js} +6 -6
  11. package/server/agent-state-source-Ds968-j6.js +21 -0
  12. package/server/{agents-J5mEnekq.js → agents-Dls7tfJH.js} +5 -5
  13. package/server/agents-IPSa5kzn.js +3 -0
  14. package/server/{archive-planning-BwhxeP7C.js → archive-planning-Cq7cyinS.js} +51 -24
  15. package/server/archive-planning-MbkGCBIY.js +2 -0
  16. package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
  17. package/server/{assemble-Bgwqv-Ro.js → assemble-BTCmbcfH.js} +20 -13
  18. package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
  19. package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
  20. package/server/{behavior-td6-xhQk.js → behavior-DIMQMRzs.js} +2 -2
  21. package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
  22. package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
  23. package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-3PNmL_p3.js} +2 -2
  24. package/server/{build-info-7yiEpl6u.js → build-info-CJg813Hm.js} +3 -3
  25. package/server/{build-info-CpG__c63.js → build-info-CXyeFsXu.js} +1 -1
  26. package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-9t7G5c1V.js} +1 -1
  27. package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-B2G38R3p.js} +3 -3
  28. package/server/checkpoint-worker.js +1 -1
  29. package/server/{checkpoints-Wm963lm8.js → checkpoints-CuBgiXO-.js} +1 -1
  30. package/server/{checkpoints-D95apurL.js → checkpoints-VTZMd4Qm.js} +2 -2
  31. package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-55SyQaPz.js} +2 -2
  32. package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
  33. package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-Cn0dIu2i.js} +2 -2
  34. package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-B19hdzSA.js} +1 -1
  35. package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
  36. package/server/{cli-Cte9ZFGn.js → cli-C9S84iTy.js} +79 -22
  37. package/server/cli-M1cwZ__d.js +3 -0
  38. package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CJq3KXU6.js} +2 -2
  39. package/server/{cliproxy-DaAbWMjC.js → cliproxy-DgEZlr7Y.js} +1 -1
  40. package/server/{close-issue-BPh1ARCF.js → close-issue-DPxRddGR.js} +5 -5
  41. package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
  42. package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
  43. package/server/{codex-o8FJwzmy.js → codex-B3n_rkwn.js} +1 -1
  44. package/server/{codex-BzGDW_d3.js → codex-CjkD1PJu.js} +6 -6
  45. package/server/{codex-parser-Dt-ycU8L.js → codex-parser-DpB1Il-P.js} +2 -2
  46. package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DZD9ukSE.js} +3 -3
  47. package/server/{config-CL3Gyvja.js → config-C5saf4Ja.js} +1 -1
  48. package/server/{config-BvLe652W.js → config-DnLJATZk.js} +2 -2
  49. package/server/{config-Bi3u1VK7.js → config-DvM8jtQK.js} +2 -2
  50. package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
  51. package/server/{conflict-gate-CX80JYYS.js → conflict-gate-DXa_L28t.js} +1 -1
  52. package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-WfVqgalf.js} +4 -4
  53. package/server/{context-layers-DAG83UZt.js → context-layers-D7UqH9Ab.js} +2 -2
  54. package/server/{context-layers-C_IIysnm.js → context-layers-Dpz3Vd6d.js} +3 -3
  55. package/server/{control-settings-CiqGxXnc.js → control-settings-DVf6pKyv.js} +4 -4
  56. package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-5XuH6OBn.js} +1 -1
  57. package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-COrbnX1J.js} +8 -8
  58. package/server/{conversation-service-DBxoYMDl.js → conversation-service-BufdtnZF.js} +169 -10
  59. package/server/{conversation-service-D_TS2b1r.js → conversation-service-DnUyIiLb.js} +1 -1
  60. package/server/{conversations-D0UEdLtk.js → conversations-B4rxz-Wl.js} +17 -10
  61. package/server/{conversations-BKDVpB-3.js → conversations-D1bwxQMy.js} +1 -1
  62. package/server/{cost-DpgYmYqR.js → cost-CpFDrJUS.js} +46 -2
  63. package/server/{cost-DS1s0DbG.js → cost-KLuwKCW9.js} +3 -3
  64. package/server/{cost-sync-tOCCGnEt.js → cost-sync-cesi9dp8.js} +3 -3
  65. package/server/{dag-BtkgLeqY.js → dag-BYiFMqpU.js} +2 -2
  66. package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
  67. package/server/dashboard-db-worker.js +7 -7
  68. package/server/{deacon-BIblC-WX.js → deacon-BbsWw8a6.js} +3 -3
  69. package/server/{deacon-pLRLbPvR.js → deacon-HdEh0Esp.js} +863 -214
  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-B08gF0mh.js → deacon-nudge-log-BND_97Wo.js} +4 -3
  73. package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
  74. package/server/deacon-swarm-DgWADWd_.js +2 -0
  75. package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-rqrl4TMs.js} +39 -18
  76. package/server/deacon.js +12 -210
  77. package/server/{dead-end-trip-D8A3msX9.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-sYgOxLeb.js → deploy-patrol-kARAkji4.js} +17 -21
  81. package/server/{deploy-queue-VfohaPN_.js → deploy-queue-Bj0HJT1i.js} +2 -2
  82. package/server/{deploy-queue-gHJBycaF.js → deploy-queue-rjTUy1RM.js} +1 -1
  83. package/server/{deploy-window-D4DQb8VP.js → deploy-window-B2IM-9G5.js} +10 -44
  84. package/server/{deploy-window-CFRZ0-kt.js → deploy-window-BNFWnA8D.js} +1 -1
  85. package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-B1mZYXz4.js} +2 -2
  86. package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
  87. package/server/{dist-C3A8B8wM.js → dist-3W--cGMa.js} +1 -1
  88. package/server/dist-BR0QtwmS.js +3 -0
  89. package/server/{dist-src-C0adpegX.js → dist-src-C-Vk2jNk.js} +1 -1
  90. package/server/{docker-Y3PElJb0.js → docker-DH3jUYg1.js} +1 -1
  91. package/server/{docker-BJzlkqYB.js → docker-meuLKLzV.js} +27 -20
  92. package/server/{dod-DlNtcH6n.js → dod-D7-9dCOD.js} +1 -1
  93. package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
  94. package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-CStTgOAf.js} +1 -1
  95. package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
  96. package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-BE3llBWP.js} +1 -1
  97. package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
  98. package/server/{esm-shims-BeObUkaw.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-CF8QDbuV.js → events-CCkFWa7X.js} +1 -1
  102. package/server/{events-BNrvchBg.js → events-zjDQozet.js} +3 -3
  103. package/server/{factory-Cmm9Hsho.js → factory-DhavwKVc.js} +5 -5
  104. package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DWGBKyWd.js} +4 -4
  105. package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-C5DkXmCM.js} +3 -3
  106. package/server/{features-D5km80UI.js → features-CC47YcCX.js} +2 -2
  107. package/server/{feedback-target-BJ5ZADsu.js → feedback-target-D9Tex35_.js} +1 -1
  108. package/server/{feedback-target-DSxEL6lP.js → feedback-target-DoRCR3L-.js} +18 -7
  109. package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CTSuA6lw.js} +1 -1
  110. package/server/{feedback-writer-C27Hak8a.js → feedback-writer-DdsBdtNL.js} +5 -5
  111. package/server/{flywheel-DZZdtiOL.js → flywheel-DHWHzaYK.js} +1 -1
  112. package/server/{flywheel-f662Q-y2.js → flywheel-DJQa9az8.js} +14 -14
  113. package/server/{flywheel-BHx8XuMr.js → flywheel-TacAI9MA.js} +21 -17
  114. package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-D2foPh88.js} +1 -1
  115. package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
  116. package/server/forge-CdlCG9aS.js +3 -0
  117. package/server/{forge-BaKGCya6.js → forge-c8LeC-tw.js} +2 -2
  118. package/server/{from-B3tZbB55.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-B9jG8wa3.js → fts-operations-DP9R-8Q3.js} +3 -3
  121. package/server/{git-utils-Xg4PFN45.js → git-utils-C31x1lpE.js} +1 -1
  122. package/server/{git-utils-CsvYfJU3.js → git-utils-xQ74FoSn.js} +5 -4
  123. package/server/{github-app-Bmg4R9mv.js → github-app-CpQSDlv8.js} +1 -1
  124. package/server/{github-app-CmNk0zLU.js → github-app-D2QuvZ3j.js} +3 -3
  125. package/server/{github-client-qazkPrg0.js → github-client-D9YvJX5D.js} +3 -3
  126. package/server/{github-client-B6KM9_wA.js → github-client-Tpi3PmKX.js} +1 -1
  127. package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-DvBMv-IW.js} +2 -2
  128. package/server/{harness-binary-BSpiXaLw.js → harness-binary-BHxWf_sX.js} +7 -6
  129. package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-bj9WMABA.js} +4 -4
  130. package/server/{health-events-BwX32k8d.js → health-events-bCDPn59Z.js} +2 -2
  131. package/server/{health-events-2Z6Wa9SM.js → health-events-qo7Ss34U.js} +1 -1
  132. package/server/{hooks-DbtbimEf.js → hooks-Dyxtg5fk.js} +2 -2
  133. package/server/{hooks-D1g1jKLI.js → hooks-X2XHBB2b.js} +1 -1
  134. package/server/{hume-DXNiu6nQ.js → hume-DrZEGpqc.js} +2 -2
  135. package/server/hume-YPsy4UA8.js +3 -0
  136. package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
  137. package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
  138. package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-CG2Eo-rr.js} +1 -1
  139. package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
  140. package/server/{injection-Bl8d_jHZ.js → injection-BisQ0lpX.js} +1 -1
  141. package/server/{injection-6AGnXxlj.js → injection-C9sxqbc2.js} +73 -193
  142. package/server/{inspect-agent-nXdIptyh.js → inspect-agent-BoSO51YC.js} +12 -12
  143. package/server/inspect-agent-BykeOH4a.js +2 -0
  144. package/server/{internal-token-DzK385vD.js → internal-token-AvXePaQT.js} +2 -2
  145. package/server/{internal-token-Ias7N8Kg.js → internal-token-Djkj-yqK.js} +1 -1
  146. package/server/{io-B00PBNku.js → io-mxOWMZ7I.js} +6 -6
  147. package/server/{issue-closed-BehTG1be.js → issue-closed-Bj_bCv_0.js} +7 -7
  148. package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-A5YIpDZE.js} +1 -1
  149. package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXUqaHzF.js} +32 -28
  150. package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-BPNEXczv.js} +11 -11
  151. package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-CcaHjKPR.js} +1 -1
  152. package/server/{issues-DQ5-LatB.js → issues-AX-YBeAQ.js} +2 -2
  153. package/server/{jsonl-parser-BDpnGFCl.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-Dwnky8FG.js → label-cleanup-sXUlgdM0.js} +3 -3
  158. package/server/{lifecycle-B4Xdb4cY.js → lifecycle-D2X3al0D.js} +2 -2
  159. package/server/{lifecycle-B3s4sM1G.js → lifecycle-DjlljAZ1.js} +6 -6
  160. package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-C5nVk55o.js} +1 -1
  161. package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-NPm1YtIG.js} +5 -5
  162. package/server/{linear-client-CnbtHiic.js → linear-client--luYwCZg.js} +1 -1
  163. package/server/{linear-client-9uq7fhiV.js → linear-client-B8pLegW1.js} +3 -3
  164. package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
  165. package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
  166. package/server/memory-fts-worker.js +1 -1
  167. package/server/{merge-DiW9RdSB.js → merge-Bx5Bh9pi.js} +3 -3
  168. package/server/{merge-sr8Nrnmi.js → merge-Dqmh_zja.js} +1 -1
  169. package/server/{merge-agent-BLUgRsz3.js → merge-agent-DP9AUY29.js} +33 -33
  170. package/server/{merge-agent-DQTXZk8z.js → merge-agent-DWd0KfiS.js} +1 -1
  171. package/server/{merge-batch-Cp_j9BGk.js → merge-batch-BdmvTEAC.js} +1 -1
  172. package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-BfRwFjRx.js} +1 -1
  173. package/server/{merge-completeness-B46KqhtY.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-DIkBjgwq.js → merge-rebase-BX1xKsrE.js} +2 -2
  177. package/server/{merge-set-CBgHfwM0.js → merge-set-DsLjjLEV.js} +4 -4
  178. package/server/{merge-set-DeUxFsC3.js → merge-set-H6epHOsw.js} +1 -1
  179. package/server/{merge-sync-kr4vqyjM.js → merge-sync-BEdfsQV4.js} +2 -2
  180. package/server/{merge-sync-CpGmk6Ch.js → merge-sync-BebcWWGA.js} +1 -1
  181. package/server/{merge-train-Dmrcus12.js → merge-train-D1I0lNOT.js} +4 -4
  182. package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-D_-C0Pk2.js} +4 -4
  183. package/server/{merge-verification-NvaAd8CZ.js → merge-verification-DN1Ov9bU.js} +6 -6
  184. package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
  185. package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
  186. package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-CL5QG8iv.js} +2 -2
  187. package/server/{no-resume-mode-BgD0JUmM.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-DcgTPPFY.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
  209. package/server/{orphan-proposed-reconciler-B6vJHxtX.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-DMzF5wne.js → pan-dir-DhgKfO86.js} +21 -6
  213. package/server/{paths-sJBSb7Ul.js → paths-BUuhi6jM.js} +17 -17
  214. package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
  215. package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-s8cbpFNV.js} +2 -2
  216. package/server/{pickup-DWhqzliO.js → pickup-2AxtB3dW.js} +1 -1
  217. package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-2_okL5bm.js} +1 -1
  218. package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-Dqv6_0ig.js} +1 -1
  219. package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
  220. package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
  221. package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-CO9rxJgB.js} +1 -1
  222. package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
  223. package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
  224. package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-72WE8GVK.js} +2 -2
  225. package/server/{project-repos-B5pIphKg.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-CgzMBvQF.js → prompts-XkL10m8M.js} +2 -2
  229. package/server/{providers-BJQSnAAp.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-7BgLDsIo.js → pull-requests-B-KrUph5.js} +3 -3
  248. package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DK5k92B4.js} +1 -1
  249. package/server/{queries-C-MUZaIy.js → queries-DVpl1vsU.js} +1212 -193
  250. package/server/{rally-CPysR4T_.js → rally-DbE561hD.js} +3 -3
  251. package/server/rally-O_st_X7n.js +3 -0
  252. package/server/{rally-api-8Ptlp2os.js → rally-api-CZLeEd2C.js} +2 -2
  253. package/server/{rally-api-CgosKdKL.js → rally-api-DaHtn5QN.js} +1 -1
  254. package/server/{rally-client-CCX0hADj.js → rally-client-C-MAl8ur.js} +1 -1
  255. package/server/{rally-client-iYMHWQD7.js → rally-client-Ch3zRsBX.js} +5 -5
  256. package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
  257. package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
  258. package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-C9Li44A3.js} +20 -10
  259. package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-qC0jCNm6.js} +2 -2
  260. package/server/{reconstruct-cache-CMZJ_Vjq.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-B2X9AfFC.js → release-engine-Be5MX5GP.js} +5 -5
  267. package/server/{release-set-G4XKyQ8K.js → release-set-DJv_O6PS.js} +3 -3
  268. package/server/{remote-BXarMvqf.js → remote-BMM3uH2J.js} +3 -3
  269. package/server/{remote-CUhyqjXk.js → remote-C0xVTHA5.js} +3 -3
  270. package/server/{remote-agents-CLZB3Coc.js → remote-agents-BIIoc5pD.js} +1 -1
  271. package/server/{remote-agents-Bba-MgSA.js → remote-agents-EUiZ26bj.js} +7 -7
  272. package/server/{remote-completion-CwAp79EC.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--pOptAEV.js → review-agent-BHGaBoBu.js} +29 -29
  276. package/server/{review-agent-BTCNkq2h.js → review-agent-CD3RQ-tc.js} +1 -1
  277. package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-DyhajWso.js} +6 -6
  278. package/server/{review-context-DFxYOOJW.js → review-context-B-dlsPnx.js} +9 -9
  279. package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
  280. package/server/{review-status-Dma9SFaN.js → review-status-B6wYcOtP.js} +1 -1
  281. package/server/{review-status-CGvlA4o_.js → review-status-CKLk5aZ-.js} +308 -58
  282. package/server/{review-status-emit-DURrmGYX.js → review-status-emit-CJ7UmEVU.js} +3 -3
  283. package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DJRgGX7-.js} +3 -3
  284. package/server/review-status-limits-4EJDCGHO.js +7 -0
  285. package/server/{review-status-source-DIk1JSow.js → review-status-source-7nU3Z2wL.js} +1 -1
  286. package/server/{review-status-source-BLx_1siH.js → review-status-source-BsDYGfyv.js} +1 -1
  287. package/server/{review-status-sync-muT-EBp2.js → review-status-sync-BLssMTEW.js} +1 -1
  288. package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-BxBeHRde.js} +35 -11
  289. package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-5jWuzgpc.js} +90 -16
  290. package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
  291. package/server/{rollup-BQaol5TX.js → rollup-BGIrCEkU.js} +79 -44
  292. package/server/rollup-CZB4UL9q.js +3 -0
  293. package/server/{scanner-C-D2cFdX.js → scanner-DydjXPrz.js} +16 -9
  294. package/server/search-DdtIjAiu.js +395 -0
  295. package/server/{sequence-io-Bmf1EZM5.js → sequence-io-Fw-cLyDs.js} +4 -4
  296. package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-BcpGMt5x.js} +15 -10
  297. package/server/server.js +1258 -438
  298. package/server/{service-CD0DvFvD.js → service-BFFkGsG4.js} +58 -58
  299. package/server/{session-fork-B6cQ5eya.js → session-fork-D0V-3e5P.js} +2 -2
  300. package/server/{session-history-3ON_IJjm.js → session-history-Bta5l9jY.js} +5 -5
  301. package/server/{settings-PilbFZAM.js → settings-Ce8B1daF.js} +2 -2
  302. package/server/{settings-VN0qOh4U.js → settings-E3FnEIUx.js} +3 -3
  303. package/server/settings-eOOJpxi_.js +2 -0
  304. package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-Mt9nJO4i.js} +3 -3
  305. package/server/{shadow-state-CZBp7pwq.js → shadow-state-Bzj_AZCV.js} +1 -1
  306. package/server/{shadow-state-BBk_zacw.js → shadow-state-DrkhoVSx.js} +2 -2
  307. package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-H1GfqP06.js} +2 -2
  308. package/server/{ship-log-7kJfjUX2.js → ship-log-CFUIo4PR.js} +1 -1
  309. package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-DSTq-Wua.js} +1 -1
  310. package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-Hzp3KCJX.js} +7 -7
  311. package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-C0uSA2SL.js} +2 -2
  312. package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DN4son31.js} +23 -21
  313. package/server/{specialist-completion-B07XjWD2.js → specialist-completion-Cf6tpIh1.js} +1 -1
  314. package/server/{specialist-context-DJ-zFyL3.js → specialist-context-DEUEkjIQ.js} +5 -5
  315. package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
  316. package/server/{specialist-logs-Dae-n52_.js → specialist-logs-7Ynue0R7.js} +3 -3
  317. package/server/{specialists-KR3pKulN.js → specialists-CQwBEGlD.js} +1 -1
  318. package/server/{specialists-6PWdtWcg.js → specialists-DAjPgYs_.js} +504 -238
  319. package/server/{specialists-DUiExaxb.js → specialists-Hr6iW9fU.js} +18 -18
  320. package/server/{specialists-Bz-wFT7R.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-vHy2-oCv.js → src-DQnkPN2i.js} +3 -3
  324. package/server/{src-rac0Mepv.js → src-DhfDV0o4.js} +6 -6
  325. package/server/{stack-health-DqLTiEu4.js → stack-health-D_iKwNRg.js} +107 -16
  326. package/server/stack-health-deVSdDwn.js +3 -0
  327. package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-BYJGqhLI.js} +5 -5
  328. package/server/{staleness-CGTZyp6V.js → staleness-CopBDKnA.js} +1 -1
  329. package/server/{staleness-C-a5rBxF.js → staleness-D8WeMUHd.js} +1 -1
  330. package/server/{state-home-722Dkx92.js → state-home-DjN8qduI.js} +24 -3
  331. package/server/{state-mapping-CybR81Uf.js → state-mapping-DlM7OYRW.js} +1 -1
  332. package/server/{state-migrate-2u8wIpoL.js → state-migrate-a2p1gtD7.js} +4 -4
  333. package/server/state-mirror-Cv_XgvT5.js +121 -0
  334. package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-CXJX_kki.js} +1 -1
  335. package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-CbCRSz1v.js} +31 -732
  336. package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
  337. package/server/{summary-fork-BqgmgPDt.js → summary-fork-B61fjRJn.js} +2 -2
  338. package/server/{summary-fork-Df2WFijM.js → summary-fork-B9pszUJN.js} +91 -10
  339. package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-Ar7hgyJq.js} +1 -1
  340. package/server/supervisor/pty-supervisor.js +12 -3
  341. package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CXCFU0Z8.js} +1 -1
  342. package/server/{supervisor-BxqSpjcN.js → supervisor-BvnxbuuF.js} +6 -4
  343. package/server/supervisor-C69kpqvd.js +2 -0
  344. package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-vTw1kqGa.js} +3 -3
  345. package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-LLzTEqsK.js} +3 -3
  346. package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CqKKVJr1.js} +15 -15
  347. package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-CWMq7oyG.js} +8 -7
  348. package/server/{test-verdict-BHgTAwIG.js → test-verdict-NdtgRBuA.js} +1 -1
  349. package/server/{test-verdict-C4i9aqEP.js → test-verdict-diIWE6hz.js} +15 -3
  350. package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-B1Jhrtc8.js} +1 -1
  351. package/server/{tldr-daemon-wvsU6bKv.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-DrxwytsZ.js → token-Bgpjo3tE.js} +2 -2
  355. package/server/token-util-BsjFll-k.js +3 -0
  356. package/server/{token-util-B48BlCba.js → token-util-BymbpkJp.js} +1 -1
  357. package/server/{tracker-config-BcPMElRB.js → tracker-config-4DaKVTfc.js} +2 -2
  358. package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-BDeAXC-q.js} +2 -2
  359. package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-CC5FyxYj.js} +1 -1
  360. package/server/{tunnel-Bp-dRHZz.js → tunnel-CDWkeceJ.js} +1 -1
  361. package/server/{tunnel-DUbUPElU.js → tunnel-CPf5M-Pc.js} +3 -3
  362. package/server/{typed-errors-DyjseiB6.js → typed-errors-9K7Dq_Vn.js} +1 -1
  363. package/server/{typed-errors-CKeoDdU3.js → typed-errors-DrS5fb5z.js} +1 -1
  364. package/server/{types-Cm5ASJbq.js → types-DzlUKiuf.js} +4 -3
  365. package/server/{types-Di8wdakq.js → types-kI9ik8XO.js} +1 -1
  366. package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-c_pxoxEc.js} +5 -5
  367. package/server/{uat-train-4Q0k06CQ.js → uat-train-CWGxBdJO.js} +0 -0
  368. package/server/{uat-train-Dewoatps.js → uat-train-CfCYd2ve.js} +1 -1
  369. package/server/{validate-B0C8p66t.js → validate-f3ItVCfm.js} +3 -3
  370. package/server/{validation-hVOwQk8T.js → validation-5G_wQtea.js} +1 -1
  371. package/server/{validation-B_kIRfNe.js → validation-7tSiCM82.js} +4 -4
  372. package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-9h9dH8uX.js} +1 -1
  373. package/server/{verification-artifact-D70AtckY.js → verification-artifact-C_4WJnf6.js} +1 -1
  374. package/server/{verification-runner-Bc3cJvpC.js → verification-runner-BV5F6wrA.js} +1 -1
  375. package/server/{verification-runner-KZTz6u72.js → verification-runner-D58KmBhK.js} +18 -38
  376. package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-2iT9OHa9.js} +1 -1
  377. package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-D03s4DD1.js} +9 -9
  378. package/server/{workflows-D0vP1WrK.js → workflows-BMBwLYPV.js} +281 -98
  379. package/server/workflows-BOmWGpIh.js +2 -0
  380. package/server/{workspace-DQkRPLlQ.js → workspace-BgflNCH0.js} +3 -3
  381. package/server/{workspace-COWvdibH.js → workspace-Cn9ywfSW.js} +1 -1
  382. package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
  383. package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
  384. package/server/{workspace-config-BdZM4PvZ.js → workspace-config-aUc2nIz6.js} +1 -1
  385. package/server/{workspace-manager-BPgTrG66.js → workspace-manager-Bem7ZBs9.js} +521 -292
  386. package/server/workspace-manager-C0CpNh3t.js +3 -0
  387. package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-C5iSlPRo.js} +1 -1
  388. package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-UKmTYmDQ.js} +2 -2
  389. package/server/{workspaces-CRBJikLp.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-CYXJVG72.js +0 -3
  400. package/server/agents-ePFVoZbu.js +0 -3
  401. package/server/archive-planning-B2XplFzT.js +0 -2
  402. package/server/cli-CjOCSnfj.js +0 -3
  403. package/server/deacon-swarm-B1XkIvfr.js +0 -2
  404. package/server/delivery-BX9HR4wQ.js +0 -3
  405. package/server/dist-B3YPQa5A.js +0 -3
  406. package/server/event-store-5UKzh9Jf.js +0 -3
  407. package/server/forge-B5o319qI.js +0 -3
  408. package/server/fts-db-IVc4_M3f.js +0 -146
  409. package/server/hume-VUCNbTgn.js +0 -3
  410. package/server/inspect-agent-CUwVmr2h.js +0 -2
  411. package/server/merge-ops-1abz6O_P.js +0 -2
  412. package/server/merge-rebase-CJJVAJuz.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-DPjOdfPa.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-D_VW4bJv.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-DDH-02ng.js +0 -44
  435. package/server/resume-mOREjlYu.js +0 -3
  436. package/server/rollup-BR4t_wck.js +0 -3
  437. package/server/settings-CVmWiJ-r.js +0 -2
  438. package/server/specs--enInima.js +0 -3
  439. package/server/stack-health-BikqHSjn.js +0 -3
  440. package/server/supervisor-B4anCCSm.js +0 -2
  441. package/server/tmux-Ctk6RV5l.js +0 -3
  442. package/server/token-util-D411CAq9.js +0 -3
  443. package/server/workflows-DtDX08ed.js +0 -2
  444. package/server/workspace-manager-C1F3XsnS.js +0 -3
@@ -0,0 +1,395 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { a as runMemoryFtsTransactionSync, i as runMemoryFtsStatementSync, n as getMemoryFtsDatabaseSync, r as init_fts_operations, t as closeMemoryFtsDatabasesInProcess } from "./fts-operations-DP9R-8Q3.js";
3
+ import { isAbsolute, relative, resolve } from "node:path";
4
+ import { constants } from "node:fs";
5
+ import { open, realpath } from "node:fs/promises";
6
+ import { Worker } from "node:worker_threads";
7
+ //#region ../../lib/memory/pin-path.ts
8
+ /**
9
+ * Lexically resolve a pinned-doc path against the project root, returning
10
+ * the project-relative path when it stays inside it. Returns null when the
11
+ * resolved target escapes the root via an absolute path elsewhere on disk or
12
+ * a `../` traversal.
13
+ *
14
+ * This check alone is NOT sufficient to gate storing or reading a pin: it
15
+ * only inspects the path string, so an in-project symlink (e.g.
16
+ * `docs/private -> ~/.ssh`) passes lexically while actually pointing outside
17
+ * the project. Use `verifyPinPathContainment` for that — this function
18
+ * remains exported for unpin, which only needs to compute the stored lookup
19
+ * key and must keep working even if the underlying file no longer exists.
20
+ */
21
+ function resolveContainedPinPath(projectRoot, docPath) {
22
+ const absoluteRoot = resolve(projectRoot);
23
+ const rel = relative(absoluteRoot, isAbsolute(docPath) ? resolve(docPath) : resolve(absoluteRoot, docPath));
24
+ if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) return null;
25
+ return rel;
26
+ }
27
+ /**
28
+ * Symlink-safe containment check AND read, combined into a single verified
29
+ * file descriptor. verifyPinPathContainment (path-in, path-out) still leaves
30
+ * a time-of-check/time-of-use gap for a caller that separately re-opens the
31
+ * path afterward — a concurrent local process could retarget a symlink in
32
+ * between (review fix, cycle 3 non-blocking). This opens the realpath-
33
+ * resolved (symlink-free) target once, verifies it's a regular file via
34
+ * `fstat` on that SAME open handle, and reads from that SAME handle — no
35
+ * second path-based lookup exists for anything to race. Returns null on any
36
+ * escape, missing path, or non-regular-file target, exactly like
37
+ * verifyPinPathContainment.
38
+ *
39
+ * Review fix (cycle 4 non-blocking): `realTarget` is still a pathname, and a
40
+ * concurrent local writer could replace its final component with a symlink
41
+ * between the `realpath()` call and this `open()` call. O_NOFOLLOW makes
42
+ * that race fail closed instead of silently following the swapped-in
43
+ * symlink — `open` errors (caught below, returns null) rather than
44
+ * succeeding on an attacker-controlled target. This does not protect
45
+ * replaceable PARENT directory components (a full openat-style walk would),
46
+ * which is why this remains a narrowed, not eliminated, advisory.
47
+ */
48
+ async function readVerifiedPinFile(projectRoot, docPath) {
49
+ const relativePath = resolveContainedPinPath(projectRoot, docPath);
50
+ if (relativePath === null) return null;
51
+ let realRoot;
52
+ let realTarget;
53
+ try {
54
+ realRoot = await realpath(resolve(projectRoot));
55
+ realTarget = await realpath(resolve(projectRoot, relativePath));
56
+ } catch {
57
+ return null;
58
+ }
59
+ const relFromRealRoot = relative(realRoot, realTarget);
60
+ if (relFromRealRoot === "" || relFromRealRoot.startsWith("..") || isAbsolute(relFromRealRoot)) return null;
61
+ let handle;
62
+ try {
63
+ handle = await open(realTarget, constants.O_RDONLY | constants.O_NOFOLLOW);
64
+ if (!(await handle.stat()).isFile()) return null;
65
+ return await handle.readFile("utf8");
66
+ } catch {
67
+ return null;
68
+ } finally {
69
+ await handle?.close().catch(() => {});
70
+ }
71
+ }
72
+ var init_pin_path = __esmMin((() => {}));
73
+ //#endregion
74
+ //#region ../../lib/memory/fts-db.ts
75
+ async function getMemoryFtsDatabase(projectId) {
76
+ const cached = clients.get(projectId);
77
+ if (cached) return cached;
78
+ await postMemoryFtsRequest("initialize", projectId);
79
+ const client = createClient(projectId);
80
+ clients.set(projectId, client);
81
+ return client;
82
+ }
83
+ async function withMemoryFtsDatabase(projectId, operation) {
84
+ return operation(await getMemoryFtsDatabase(projectId));
85
+ }
86
+ function runMemoryFtsStatement(projectId, statement) {
87
+ return postMemoryFtsRequest("statement", projectId, { statement });
88
+ }
89
+ function runMemoryFtsTransaction(projectId, statements) {
90
+ return postMemoryFtsRequest("transaction", projectId, { statements });
91
+ }
92
+ function closeMemoryFtsDatabases() {
93
+ clients.clear();
94
+ closeMemoryFtsDatabasesInProcess();
95
+ if (!worker) return;
96
+ const closing = worker;
97
+ worker = null;
98
+ pendingRequests.forEach((request) => request.reject(/* @__PURE__ */ new Error("Memory FTS worker closed")));
99
+ pendingRequests.clear();
100
+ closing.postMessage({
101
+ id: nextRequestId++,
102
+ operation: "close"
103
+ });
104
+ closing.terminate();
105
+ }
106
+ function createClient(projectId) {
107
+ return {
108
+ exec: async (sql) => {
109
+ await runMemoryFtsStatement(projectId, {
110
+ sql,
111
+ method: "exec"
112
+ });
113
+ },
114
+ prepare: (sql) => ({
115
+ run: (...params) => runMemoryFtsStatement(projectId, {
116
+ sql,
117
+ params,
118
+ method: "run"
119
+ }),
120
+ get: (...params) => runMemoryFtsStatement(projectId, {
121
+ sql,
122
+ params,
123
+ method: "get"
124
+ }),
125
+ all: (...params) => runMemoryFtsStatement(projectId, {
126
+ sql,
127
+ params,
128
+ method: "all"
129
+ })
130
+ })
131
+ };
132
+ }
133
+ function postMemoryFtsRequest(operation, projectId, payload = {}) {
134
+ if (shouldRunInline()) return Promise.resolve().then(() => runInline(operation, projectId, payload));
135
+ const id = nextRequestId++;
136
+ return new Promise((resolve, reject) => {
137
+ pendingRequests.set(id, {
138
+ resolve,
139
+ reject
140
+ });
141
+ const currentWorker = getMemoryFtsWorker();
142
+ currentWorker.ref();
143
+ currentWorker.postMessage({
144
+ id,
145
+ operation,
146
+ projectId,
147
+ ...payload
148
+ });
149
+ });
150
+ }
151
+ function runInline(operation, projectId, payload = {}) {
152
+ switch (operation) {
153
+ case "initialize":
154
+ getMemoryFtsDatabaseSync(requireProjectId(projectId));
155
+ return null;
156
+ case "statement": return runMemoryFtsStatementSync(requireProjectId(projectId), payload.statement);
157
+ case "transaction": return runMemoryFtsTransactionSync(requireProjectId(projectId), payload.statements);
158
+ case "close":
159
+ closeMemoryFtsDatabasesInProcess();
160
+ return null;
161
+ }
162
+ }
163
+ function shouldRunInline() {
164
+ return import.meta.url.endsWith(".ts");
165
+ }
166
+ function requireProjectId(projectId) {
167
+ if (!projectId) throw new Error("Memory FTS request missing projectId");
168
+ return projectId;
169
+ }
170
+ function getMemoryFtsWorker() {
171
+ if (worker) return worker;
172
+ const nextWorker = new Worker(memoryFtsWorkerUrl(), {
173
+ type: "module",
174
+ execArgv: process.execArgv.filter((arg) => !arg.startsWith("--inspect"))
175
+ });
176
+ nextWorker.on("message", (message) => {
177
+ const request = pendingRequests.get(message.id);
178
+ if (!request) return;
179
+ pendingRequests.delete(message.id);
180
+ if (message.ok) request.resolve(message.result);
181
+ else request.reject(new Error(message.error ?? "Memory FTS worker failed"));
182
+ if (pendingRequests.size === 0) nextWorker.unref();
183
+ });
184
+ nextWorker.on("error", (err) => {
185
+ failPendingRequests(err);
186
+ if (worker === nextWorker) worker = null;
187
+ });
188
+ nextWorker.on("exit", (code) => {
189
+ if (worker === nextWorker) worker = null;
190
+ if (code !== 0) failPendingRequests(/* @__PURE__ */ new Error(`Memory FTS worker exited with code ${code}`));
191
+ });
192
+ worker = nextWorker;
193
+ return worker;
194
+ }
195
+ function failPendingRequests(error) {
196
+ pendingRequests.forEach((request) => request.reject(error));
197
+ pendingRequests.clear();
198
+ }
199
+ function memoryFtsWorkerUrl() {
200
+ if (import.meta.url.endsWith("/dist/cli/index.js")) return new URL("../lib/memory/fts-worker.js", import.meta.url);
201
+ if (import.meta.url.endsWith("/dist/index.js") || /\/dist\/fts-db-[^/]+\.js$/.test(import.meta.url)) return new URL("./lib/memory/fts-worker.js", import.meta.url);
202
+ if (import.meta.url.endsWith("/dist/dashboard/server.js") || /\/dist\/dashboard\/fts-db-[^/]+\.js$/.test(import.meta.url)) return new URL("./memory-fts-worker.js", import.meta.url);
203
+ return import.meta.url.endsWith(".ts") ? new URL("./fts-worker.ts", import.meta.url) : new URL("./fts-worker.js", import.meta.url);
204
+ }
205
+ var worker, nextRequestId, pendingRequests, clients;
206
+ var init_fts_db = __esmMin((() => {
207
+ init_fts_operations();
208
+ worker = null;
209
+ nextRequestId = 1;
210
+ pendingRequests = /* @__PURE__ */ new Map();
211
+ clients = /* @__PURE__ */ new Map();
212
+ }));
213
+ //#endregion
214
+ //#region ../../lib/memory/search.ts
215
+ async function searchMemory(input) {
216
+ const matchQuery = buildMatchQuery(input.query);
217
+ if (!matchQuery) return [];
218
+ const limit = normalizeLimit(input.limit);
219
+ const identityPredicate = buildIdentityPredicate(input);
220
+ if (!identityPredicate) return [];
221
+ const rows = await runMemoryFtsStatement(input.projectId, {
222
+ method: "all",
223
+ sql: `
224
+ SELECT
225
+ rowid,
226
+ content,
227
+ display_content,
228
+ source,
229
+ branch,
230
+ entry_date,
231
+ entry_time,
232
+ entry_type,
233
+ files,
234
+ tags,
235
+ doc_type,
236
+ scope,
237
+ project_id,
238
+ workspace_id,
239
+ issue_id,
240
+ run_id,
241
+ session_id,
242
+ agent_role,
243
+ agent_harness,
244
+ bm25(memory_fts) AS bm25
245
+ FROM memory_fts
246
+ WHERE memory_fts MATCH ?
247
+ AND project_id = ?
248
+ ${identityPredicate.sql}
249
+ ${input.docType ? "AND doc_type = ?" : ""}
250
+ AND (? = 1 OR (entry_date || 'T' || entry_time) > COALESCE((
251
+ SELECT MAX(from_timestamp)
252
+ FROM reset_markers
253
+ WHERE (scope = 'project' AND scope_id = memory_fts.project_id)
254
+ OR (scope = 'workspace' AND scope_id = memory_fts.workspace_id)
255
+ OR (scope = 'issue' AND scope_id = memory_fts.issue_id)
256
+ OR (scope = 'session' AND scope_id = memory_fts.session_id)
257
+ ), ''))
258
+ ORDER BY bm25(memory_fts) ASC
259
+ LIMIT ?
260
+ `,
261
+ params: [
262
+ matchQuery,
263
+ input.projectId,
264
+ ...identityPredicate.params,
265
+ ...input.docType ? [input.docType] : [],
266
+ input.includeArchived ? 1 : 0,
267
+ limit * OVERFETCH_RATIO
268
+ ]
269
+ });
270
+ const tokenBudget = input.sibling || input.crossWorkspace ? normalizeSiblingTokenBudget(input.siblingTokenBudget) : null;
271
+ const queryTerms = extractQueryTerms(input.query);
272
+ const now = input.now ?? /* @__PURE__ */ new Date();
273
+ return rows.map((row) => rowToHit(row, tokenBudget, rankHit(row, queryTerms, now))).filter((hit) => matchesTags(hit, input.tags)).sort((a, b) => b.rankScore - a.rankScore || b.entryDate.localeCompare(a.entryDate) || b.entryTime.localeCompare(a.entryTime)).slice(0, limit);
274
+ }
275
+ function buildMatchQuery(query) {
276
+ return extractQueryTerms(query).map((term) => `"${term.replaceAll("\"", "\"\"")}"`).join(" ");
277
+ }
278
+ function extractQueryTerms(query) {
279
+ return query.match(/[\p{L}\p{N}_-]+/gu) ?? [];
280
+ }
281
+ function buildIdentityPredicate(input) {
282
+ if (input.sibling) {
283
+ if (!input.workspaceId || !input.issueId) return null;
284
+ return {
285
+ sql: "AND workspace_id != ? AND issue_id != ?",
286
+ params: [input.workspaceId, input.issueId]
287
+ };
288
+ }
289
+ if (input.crossWorkspace) {
290
+ if (!input.excludeWorkspaceId) return null;
291
+ return {
292
+ sql: "AND workspace_id != ?",
293
+ params: [input.excludeWorkspaceId]
294
+ };
295
+ }
296
+ const clauses = [];
297
+ const params = [];
298
+ if (input.workspaceId) {
299
+ clauses.push("AND workspace_id = ?");
300
+ params.push(input.workspaceId);
301
+ }
302
+ if (input.issueId) {
303
+ clauses.push("AND issue_id = ?");
304
+ params.push(input.issueId);
305
+ }
306
+ return {
307
+ sql: clauses.join("\n "),
308
+ params
309
+ };
310
+ }
311
+ function normalizeLimit(limit) {
312
+ if (limit === void 0) return DEFAULT_LIMIT;
313
+ if (!Number.isInteger(limit) || limit <= 0) return DEFAULT_LIMIT;
314
+ return limit;
315
+ }
316
+ function normalizeSiblingTokenBudget(tokenBudget) {
317
+ if (tokenBudget === void 0) return DEFAULT_SIBLING_TOKEN_BUDGET;
318
+ if (!Number.isInteger(tokenBudget) || tokenBudget <= 0) return DEFAULT_SIBLING_TOKEN_BUDGET;
319
+ return tokenBudget;
320
+ }
321
+ function rankHit(row, queryTerms, now) {
322
+ const tags = splitList(row.tags).map((tag) => tag.toLowerCase());
323
+ const tagSet = new Set(tags);
324
+ const matchingTagCount = new Set(queryTerms.map((term) => term.toLowerCase()).filter((term) => tagSet.has(term))).size;
325
+ const ageDays = ageInDays(`${row.entry_date}T${row.entry_time}`, now);
326
+ const boostedScore = Math.abs(row.bm25) * Math.exp(-RECENCY_DECAY_RATE * ageDays) + TAG_BOOST * matchingTagCount;
327
+ if (ageDays < HIGH_SIGNAL_WINDOW_HOURS / 24 && tags.some((tag) => HIGH_SIGNAL_TAGS.has(tag))) return Math.max(boostedScore, HIGH_SIGNAL_SCORE_FLOOR);
328
+ return boostedScore;
329
+ }
330
+ function ageInDays(timestamp, now) {
331
+ const parsed = Date.parse(timestamp);
332
+ if (Number.isNaN(parsed)) return 0;
333
+ return Math.max(0, (now.getTime() - parsed) / 864e5);
334
+ }
335
+ function rowToHit(row, tokenBudget, rankScore) {
336
+ return {
337
+ rowid: row.rowid,
338
+ content: row.content,
339
+ displayContent: row.display_content,
340
+ source: row.source,
341
+ branch: row.branch,
342
+ entryDate: row.entry_date,
343
+ entryTime: row.entry_time,
344
+ entryType: row.entry_type,
345
+ files: splitList(row.files),
346
+ tags: splitList(row.tags),
347
+ docType: row.doc_type,
348
+ scope: row.scope,
349
+ projectId: row.project_id,
350
+ workspaceId: row.workspace_id,
351
+ issueId: row.issue_id,
352
+ runId: row.run_id,
353
+ sessionId: row.session_id,
354
+ agentRole: row.agent_role,
355
+ agentHarness: row.agent_harness,
356
+ bm25: row.bm25,
357
+ rankScore,
358
+ provenance: `${row.workspace_id}:${row.issue_id}`,
359
+ tokenBudget
360
+ };
361
+ }
362
+ function splitList(value) {
363
+ return value.split(",").map((entry) => entry.trim()).filter(Boolean);
364
+ }
365
+ function matchesTags(hit, tags) {
366
+ if (!tags || tags.length === 0) return true;
367
+ return tags.every((tag) => hit.tags.includes(tag));
368
+ }
369
+ var DEFAULT_LIMIT, OVERFETCH_RATIO, DEFAULT_SIBLING_TOKEN_BUDGET, RECENCY_DECAY_RATE, TAG_BOOST, HIGH_SIGNAL_SCORE_FLOOR, HIGH_SIGNAL_WINDOW_HOURS, HIGH_SIGNAL_TAGS;
370
+ var init_search = __esmMin((() => {
371
+ init_fts_db();
372
+ DEFAULT_LIMIT = 20;
373
+ OVERFETCH_RATIO = 3;
374
+ DEFAULT_SIBLING_TOKEN_BUDGET = 1500;
375
+ RECENCY_DECAY_RATE = .02;
376
+ TAG_BOOST = .3;
377
+ HIGH_SIGNAL_SCORE_FLOOR = 1;
378
+ HIGH_SIGNAL_WINDOW_HOURS = 72;
379
+ HIGH_SIGNAL_TAGS = new Set([
380
+ "error",
381
+ "decision",
382
+ "blocker",
383
+ "shipped",
384
+ "architecture",
385
+ "review-blocker",
386
+ "test-failure",
387
+ "merge-risk",
388
+ "architecture-decision",
389
+ "regression"
390
+ ]);
391
+ }));
392
+ //#endregion
393
+ export { init_fts_db as a, withMemoryFtsDatabase as c, closeMemoryFtsDatabases as i, init_pin_path as l, init_search as n, runMemoryFtsStatement as o, searchMemory as r, runMemoryFtsTransaction as s, buildMatchQuery as t, readVerifiedPinFile as u };
394
+
395
+ //# sourceMappingURL=search-DdtIjAiu.js.map
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ln as init_auto_commit, un as queueAutoCommit } from "./config-yaml-CxdwhAIA.js";
3
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
4
- import { M as getProjectPanPaths, S as init_specs } from "./io-B00PBNku.js";
2
+ import { St as init_auto_commit, wt as queueAutoCommit } from "./config-yaml-BSCqwmX0.js";
3
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
4
+ import { C as init_specs, N as getProjectPanPaths } from "./io-mxOWMZ7I.js";
5
5
  import { dirname, join } from "node:path";
6
6
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
7
  //#region ../../lib/backlog/types.ts
@@ -275,4 +275,4 @@ var init_sequence_io = __esmMin((() => {
275
275
  //#endregion
276
276
  export { parseSequenceMd as n, writeSequenceMd as r, init_sequence_io as t };
277
277
 
278
- //# sourceMappingURL=sequence-io-Bmf1EZM5.js.map
278
+ //# sourceMappingURL=sequence-io-Fw-cLyDs.js.map
@@ -1,8 +1,9 @@
1
1
  import { a as __toCommonJS, n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CGvlA4o_.js";
3
- import { On as determineModel, Rr as getAgentRuntimeStateSync, a as listRunningAgentsSync, b as init_agents, dt as spawnRun, pt as stopAgent, rr as getAgentStateSync } from "./queries-C-MUZaIy.js";
4
- import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-C6ZduvuY.js";
5
- import { n as parseSequenceMd, t as init_sequence_io } from "./sequence-io-Bmf1EZM5.js";
2
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
3
+ import { Et as spawnRun, Gn as determineModel, Ot as stopAgent, a as listRunningAgentsSync, b as init_agents, br as getAgentStateSync, ti as getAgentRuntimeStateSync } from "./queries-DVpl1vsU.js";
4
+ import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-BPNEXczv.js";
5
+ import { N as getProjectPanPaths, P as init_paths } from "./io-mxOWMZ7I.js";
6
+ import { n as parseSequenceMd, t as init_sequence_io } from "./sequence-io-Fw-cLyDs.js";
6
7
  import { dirname, join } from "node:path";
7
8
  import { Effect } from "effect";
8
9
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
@@ -98,7 +99,8 @@ function detectPartOf(childRef, body) {
98
99
  async function collectOpenBacklog(projectRoot, issues, opts) {
99
100
  const now = Date.now();
100
101
  const openIssues = issues.filter((issue) => !CLOSED_STATES.has(issue.state));
101
- const specsDir = join(projectRoot, ".pan", "specs");
102
+ const paths = getProjectPanPaths(projectRoot);
103
+ const specsDir = paths.specsDir;
102
104
  const workspacesDir = join(projectRoot, "workspaces");
103
105
  const issuesWithSpecs = /* @__PURE__ */ new Set();
104
106
  if (!opts?.hasSpecFn) {
@@ -110,7 +112,7 @@ async function collectOpenBacklog(projectRoot, issues, opts) {
110
112
  const manifest = openIssues.map((issue) => {
111
113
  const reviewStatus = getReviewStatusSync(issue.ref);
112
114
  const inPipeline = reviewStatus !== null && reviewStatus.reviewStatus !== "pending" || existsSync(join(workspacesDir, `feature-${issue.ref.toLowerCase()}`));
113
- const hasPrd = opts?.hasPrdFn ? opts.hasPrdFn(issue.ref) : existsSync(join(projectRoot, ".pan", "drafts", `${issue.ref.toUpperCase()}.md`));
115
+ const hasPrd = opts?.hasPrdFn ? opts.hasPrdFn(issue.ref) : existsSync(join(paths.draftsDir, `${issue.ref.toLowerCase()}.md`)) || existsSync(join(paths.draftsDir, `${issue.ref.toUpperCase()}.md`));
114
116
  const ready = opts?.hasSpecFn ? opts.hasSpecFn(issue.ref) : issuesWithSpecs.has(issue.ref.toUpperCase());
115
117
  const createdMs = issue.createdAt ? new Date(issue.createdAt).getTime() : now;
116
118
  return {
@@ -151,6 +153,7 @@ async function collectOpenBacklog(projectRoot, issues, opts) {
151
153
  }
152
154
  var SEQUENCE_MD_PATH, CLOSED_STATES, EPIC_TITLE_RE;
153
155
  var init_backlog_input = __esmMin((() => {
156
+ init_paths();
154
157
  init_review_status();
155
158
  init_sequence_io();
156
159
  SEQUENCE_MD_PATH = ".pan/backlog/sequence.md";
@@ -187,16 +190,18 @@ async function spawnSequencerAgent(pass, opts = {}) {
187
190
  const projectRoot = opts.projectRoot ?? process.cwd();
188
191
  const projectKey = opts.projectKey ?? "overdeck";
189
192
  const batchSize = opts.batchSize ?? 20;
190
- const seqPath = join(projectRoot, ".pan", "backlog", "sequence.md");
191
- const resolvedPass = pass !== "auto" ? pass : existsSync(seqPath) ? "incremental" : "creation";
193
+ const hasPriorSequence = existsSync(join(projectRoot, ".pan", "backlog", "sequence.md"));
194
+ const resolvedPass = pass === "auto" ? hasPriorSequence ? "incremental" : "creation" : pass === "incremental" && !hasPriorSequence ? "creation" : pass;
192
195
  let rawIssues = opts.issues;
193
196
  if (!rawIssues) try {
194
197
  const { getSharedIssueService } = (init_issue_service_singleton(), __toCommonJS(issue_service_singleton_exports));
195
198
  rawIssues = getSharedIssueService().getIssues();
196
- } catch {
199
+ } catch (err) {
200
+ console.warn("[sequencer] issue read model unavailable, falling back to empty issue list:", err);
197
201
  rawIssues = [];
198
202
  }
199
203
  const input = await collectOpenBacklog(projectRoot, normalizeBacklogIssues(rawIssues).filter((issue) => issue.ref.toUpperCase().startsWith("PAN-")));
204
+ if (input.manifest.length === 0) throw new Error(`Sequencer refusing to spawn: backlog manifest is empty (0 open ${projectKey} issues from ${rawIssues.length} raw read-model issues). An empty manifest usually means the issue read model was unavailable or empty at spawn time, not an empty backlog.`);
200
205
  const manifestPath = join(projectRoot, ".pan", "backlog", "manifest.json");
201
206
  await mkdir(dirname(manifestPath), { recursive: true });
202
207
  await writeFile(manifestPath, JSON.stringify(input.manifest, null, 2), "utf-8");
@@ -325,4 +330,4 @@ var init_sequencer_agent = __esmMin((() => {
325
330
  //#endregion
326
331
  export { spawnSequencerAgent as a, init_sequencer_agent as i, clearFinishedSequencerRun as n, getSequencerRunStatus as r, SEQUENCER_AGENT_ID as t };
327
332
 
328
- //# sourceMappingURL=sequencer-agent-CigMyKh2.js.map
333
+ //# sourceMappingURL=sequencer-agent-BcpGMt5x.js.map