@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,11 +1,11 @@
1
1
  import { n as __esmMin, r as __exportAll } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as init_projects, ar as resolveProjectFromIssueSync, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-CxdwhAIA.js";
3
- import { n as openDatabase, t as init_driver } from "./driver-CKVGi51s.js";
4
- import { g as loadReviewStatusesForIssues, p as init_review_status } from "./review-status-CwhA9wmd.js";
5
- import { a as init_tracker_config, n as getLinearApiKey, o as validateRallyConfig, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-CHbrjg6m.js";
6
- import { n as init_dist_src, t as Octokit } from "./dist-src-B-AlGWSl.js";
7
- import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BEONzr8P.js";
8
- import { o as init_io, p as readWorkspacePlan, r as findPlan } from "./io-C0NV7y6C.js";
2
+ import { Sn as resolveProjectFromIssueSync, cn as init_projects, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-BSCqwmX0.js";
3
+ import { n as openDatabase, t as init_driver } from "./driver-CmsY2RLl.js";
4
+ import { g as loadReviewStatusesForIssues, p as init_review_status } from "./review-status-CKLk5aZ-.js";
5
+ import { a as init_tracker_config, n as getLinearApiKey, o as validateRallyConfig, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-4DaKVTfc.js";
6
+ import { n as init_dist_src, t as Octokit } from "./dist-src-C-Vk2jNk.js";
7
+ import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-DlM7OYRW.js";
8
+ import { m as readWorkspacePlan, r as findPlan, s as init_io } from "./io-mxOWMZ7I.js";
9
9
  import { Effect } from "effect";
10
10
  import { existsSync } from "fs";
11
11
  import { join } from "path";
@@ -865,7 +865,7 @@ var init_issue_data_service = __esmMin((() => {
865
865
  async ensureShadowStateLoaded() {
866
866
  if (this.shadowStateModule) return;
867
867
  try {
868
- this.shadowStateModule = await import("./shadow-state-C0Af4clN.js");
868
+ this.shadowStateModule = await import("./shadow-state-Bzj_AZCV.js");
869
869
  await this.refreshShadowStatesCache();
870
870
  } catch {}
871
871
  }
@@ -1408,8 +1408,8 @@ var init_issue_data_service = __esmMin((() => {
1408
1408
  }
1409
1409
  if (!this.cache.isStale("rally", "issues") && this.trackers.rally.lastFetchedIssues.length > 0) return;
1410
1410
  try {
1411
- const { RallyTracker } = await import("./rally-x6ztTQo4.js");
1412
- const { findProjectsByRallyProject } = await import("./projects-_n3Zui6K.js");
1411
+ const { RallyTracker } = await import("./rally-O_st_X7n.js");
1412
+ const { findProjectsByRallyProject } = await import("./projects-WqMWCdpa.js");
1413
1413
  const rallyProjects = findProjectsByRallyProject();
1414
1414
  let allFormatted = [];
1415
1415
  if (rallyProjects.length > 0) {
@@ -1504,4 +1504,4 @@ var init_issue_service_singleton = __esmMin((() => {
1504
1504
  //#endregion
1505
1505
  export { CacheService as a, startSharedIssueService as i, init_issue_service_singleton as n, init_cache_service as o, issue_service_singleton_exports as r, parseIntegerHeader as s, getSharedIssueService as t };
1506
1506
 
1507
- //# sourceMappingURL=issue-service-singleton-F3A5VP6M.js.map
1507
+ //# sourceMappingURL=issue-service-singleton-BPNEXczv.js.map
@@ -1,3 +1,3 @@
1
- import { i as startSharedIssueService, n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-F3A5VP6M.js";
1
+ import { i as startSharedIssueService, n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-BPNEXczv.js";
2
2
  init_issue_service_singleton();
3
3
  export { getSharedIssueService, startSharedIssueService };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { _ as integer, a as EventBus, c as Records, f as init_infra, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, x as eq } from "./infra-BDQDRopn.js";
2
+ import { _ as integer, a as EventBus, c as Records, f as init_infra, h as text, m as sqliteTable, p as init_sqlite_core, r as Db, v as init_drizzle_orm, x as eq } from "./infra-CTrmVqc_.js";
3
3
  import { Context, Effect, Layer, Schema } from "effect";
4
4
  import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
5
5
  //#region ../../lib/overdeck/issues.ts
@@ -350,4 +350,4 @@ var init_issues = __esmMin((() => {
350
350
  //#endregion
351
351
  export { init_issues as n, IssueId as t };
352
352
 
353
- //# sourceMappingURL=issues-DA-U_MpR.js.map
353
+ //# sourceMappingURL=issues-AX-YBeAQ.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fr as init_errors, li as init_paths, ti as encodeClaudeProjectDir } from "./config-yaml-CxdwhAIA.js";
3
- import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-Aat8HfO_.js";
2
+ import { Vr as init_errors, hi as init_paths, si as encodeClaudeProjectDir } from "./config-yaml-BSCqwmX0.js";
3
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CpFDrJUS.js";
4
4
  import "effect";
5
5
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
6
6
  import { basename, join } from "path";
@@ -93,6 +93,10 @@ function normalizeModelName(model) {
93
93
  provider: "custom",
94
94
  model
95
95
  };
96
+ if (model.startsWith("ql-")) return {
97
+ provider: "custom",
98
+ model
99
+ };
96
100
  return {
97
101
  provider: "anthropic",
98
102
  model: "claude-sonnet-4"
@@ -243,4 +247,4 @@ var init_jsonl_parser = __esmMin((() => {
243
247
  //#endregion
244
248
  export { init_jsonl_parser as a, getSessionFilesSync as i, getAllSessionFilesSync as n, normalizeModelName as o, getProjectDirsSync as r, parseClaudeSessionSync as s, getActiveSessionModelSync as t };
245
249
 
246
- //# sourceMappingURL=jsonl-parser-BXiGANOh.js.map
250
+ //# sourceMappingURL=jsonl-parser-CgYWQ20q.js.map
@@ -0,0 +1,579 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { hi as init_paths, mi as getOverdeckHome } from "./config-yaml-BSCqwmX0.js";
3
+ import { n as init_fs_lock, r as isPidDead } from "./fs-lock-D_GeJtXl.js";
4
+ import { c as getRuntimeBehavior } from "./src-BYdwL_n-.js";
5
+ import { Gr as writePtyToken, Kr as init_pty_supervisor_locate, Pr as saveAgentStateSync, Wr as init_pty_token, Zt as init_delivery, br as getAgentStateSync, n as init_queries, qr as resolvePtySupervisorScriptPath, qt as deliverAgentMessage, r as listAgentStates, xr as init_agent_state } from "./queries-DVpl1vsU.js";
6
+ import { t as init_behavior } from "./behavior-DIMQMRzs.js";
7
+ import { C as generateLauncherScriptSync, w as init_launcher_generator } from "./auto-spawn-consent-lXqRJ1Dr.js";
8
+ import { _ as tmuxKillSession, g as tmuxCreateSession, h as init_tmux_cli, v as tmuxSessionExists } from "./codex-CjkD1PJu.js";
9
+ import { i as prepareHarnessLaunch, r as init_harness_binary } from "./harness-binary-BHxWf_sX.js";
10
+ import { n as parseKimiSessionSync, t as init_kimi_parser } from "./kimi-parser-B-JBg3Pv.js";
11
+ import { basename, dirname, join } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
14
+ import { mkdir, readFile, readdir, rename, rm, stat as stat$1, writeFile } from "node:fs/promises";
15
+ import { exec } from "node:child_process";
16
+ import { promisify } from "node:util";
17
+ import { createHash } from "node:crypto";
18
+ //#region ../../lib/runtimes/kimi-code.ts
19
+ /**
20
+ * Kimi Code CLI runtime adapter (PAN-1837).
21
+ *
22
+ * Native TUI — not ACP. Kimi writes its own session tree at
23
+ * `<kimiHome>/sessions/<workDirKey>/<sessionId>/agents/main/wire.jsonl`,
24
+ * where `workDirKey = wd_<basename(workDir)>_<sha256(workDir).hex[:12]>`
25
+ * (verified empirically against installed kimi 0.29.2, wi-fixture/D2 — Kimi
26
+ * does not expose this derivation directly). Kimi generates its own session
27
+ * id; it cannot be preset via a launch flag (D2/erratum E1: no --session, no
28
+ * --work-dir). The id is captured post-launch as the session directory that
29
+ * newly appears under the workspace's bucket, then persisted at
30
+ * `~/.overdeck/agents/<id>/kimi-session-id` (mirrors codex's thread-id file)
31
+ * so later introspection calls avoid re-walking the bucket.
32
+ *
33
+ * Delivery: PTY supervisor is primary (KIMI_CODE_BEHAVIOR.supportsPtySupervisor
34
+ * is true, same as claude-code). sendMessage delegates to the existing generic
35
+ * deliverAgentMessage() cascade (supervisor -> channels -> async tmux paste)
36
+ * rather than re-implementing that tiering here — deliverAgentMessage already
37
+ * dispatches on socket existence, not a hardcoded harness list, so kimi-code
38
+ * flows through it for free once its PTY supervisor socket exists.
39
+ *
40
+ * getTokenUsage/getSessionCost delegate to wi8b's parseKimiSessionSync,
41
+ * which sums every usage.record in the wire.jsonl — Kimi's own server-side
42
+ * context cache accounting.
43
+ */
44
+ /**
45
+ * Compute Kimi's on-disk workDirKey bucket name for a working directory.
46
+ * Verified against `wd_kimi-fixture-scratch_ef33f89ad7cf` (workDir
47
+ * `/tmp/kimi-fixture-scratch`) and several pre-existing real sessions on the
48
+ * machine that produced the wi-fixture capture (e.g.
49
+ * `wd_overdeck_b289e7acb782`, `wd_feature-pan-2858_1dc66dc5021d`).
50
+ */
51
+ function kimiWorkDirKey(workDir) {
52
+ const hash = createHash("sha256").update(workDir).digest("hex").slice(0, 12);
53
+ return `wd_${basename(workDir)}_${hash}`;
54
+ }
55
+ /** Absolute path to the session bucket Kimi writes for a working directory. */
56
+ function kimiSessionsRoot(kimiHome, workDir) {
57
+ return join(kimiHome, "sessions", kimiWorkDirKey(workDir));
58
+ }
59
+ /**
60
+ * Locate wire.jsonl for a specific captured session id under the workspace's
61
+ * bucket. Falls back to the newest session directory when the captured id's
62
+ * wire.jsonl is missing (e.g. never captured, or the id file is stale).
63
+ */
64
+ function findKimiWirePath(kimiHome, workspace, sessionId) {
65
+ if (sessionId) {
66
+ const candidate = join(kimiSessionsRoot(kimiHome, workspace), sessionId, "agents", "main", "wire.jsonl");
67
+ if (existsSync(candidate)) return candidate;
68
+ }
69
+ return findLatestKimiSession(kimiHome, workspace);
70
+ }
71
+ /** Fallback: the newest session directory by wire.jsonl mtime under the workspace's bucket. */
72
+ function findLatestKimiSession(kimiHome, workspace) {
73
+ const bucketDir = kimiSessionsRoot(kimiHome, workspace);
74
+ let entries;
75
+ try {
76
+ entries = readdirSync(bucketDir);
77
+ } catch {
78
+ return null;
79
+ }
80
+ let newest = null;
81
+ for (const entry of entries) {
82
+ const wirePath = join(bucketDir, entry, "agents", "main", "wire.jsonl");
83
+ let mtimeMs;
84
+ try {
85
+ mtimeMs = statSync(wirePath).mtimeMs;
86
+ } catch {
87
+ continue;
88
+ }
89
+ if (!newest || mtimeMs > newest.mtimeMs) newest = {
90
+ path: wirePath,
91
+ mtimeMs
92
+ };
93
+ }
94
+ return newest?.path ?? null;
95
+ }
96
+ /**
97
+ * Async twin of {@link findKimiWirePath} (PAN-1837 review fix, P2). The
98
+ * dashboard's transcript resolver runs on the event loop and Command Deck
99
+ * polling re-resolves the same session repeatedly, so the sync
100
+ * readdirSync/statSync walk here would block the loop on every poll as a
101
+ * session's history grows. Runtime-side sync callers (kill/spawn lifecycle)
102
+ * keep using the sync versions above — this pair exists only for dashboard
103
+ * routes, per the runtime's own documented sync contract.
104
+ */
105
+ async function findKimiWirePathAsync(kimiHome, workspace, sessionId) {
106
+ if (sessionId) {
107
+ const candidate = join(kimiSessionsRoot(kimiHome, workspace), sessionId, "agents", "main", "wire.jsonl");
108
+ try {
109
+ await stat$1(candidate);
110
+ return candidate;
111
+ } catch {}
112
+ }
113
+ return findLatestKimiSessionAsync(kimiHome, workspace);
114
+ }
115
+ /** Async twin of {@link findLatestKimiSession} — see {@link findKimiWirePathAsync}. */
116
+ async function findLatestKimiSessionAsync(kimiHome, workspace) {
117
+ const bucketDir = kimiSessionsRoot(kimiHome, workspace);
118
+ let entries;
119
+ try {
120
+ entries = await readdir(bucketDir);
121
+ } catch {
122
+ return null;
123
+ }
124
+ let newest = null;
125
+ for (const entry of entries) {
126
+ const wirePath = join(bucketDir, entry, "agents", "main", "wire.jsonl");
127
+ let mtimeMs;
128
+ try {
129
+ mtimeMs = (await stat$1(wirePath)).mtimeMs;
130
+ } catch {
131
+ continue;
132
+ }
133
+ if (!newest || mtimeMs > newest.mtimeMs) newest = {
134
+ path: wirePath,
135
+ mtimeMs
136
+ };
137
+ }
138
+ return newest?.path ?? null;
139
+ }
140
+ function kimiHomeDefault() {
141
+ return join(homedir(), ".kimi-code");
142
+ }
143
+ /**
144
+ * Poll a workspace's Kimi session bucket for a directory that did not exist
145
+ * in `existingBefore`, returning the newest such directory's name (the
146
+ * session id) once one appears. Standalone so both KimiCodeRuntimeSync.spawnAgent
147
+ * and the production `pan start` spawn path (spawn-prep.ts, which builds its
148
+ * own launcher/tmux session rather than delegating to this class) can capture
149
+ * the session id the same way — mirroring codex's standalone
150
+ * waitForCodexRollout/extractThreadIdFromRollout pair.
151
+ */
152
+ async function waitForNewKimiSession(kimiHome, workspace, existingBefore, timeoutMs = SPAWN_READY_TIMEOUT_MS) {
153
+ const bucketDir = kimiSessionsRoot(kimiHome, workspace);
154
+ const deadline = Date.now() + timeoutMs;
155
+ while (Date.now() < deadline) {
156
+ let entries = [];
157
+ try {
158
+ entries = readdirSync(bucketDir);
159
+ } catch {
160
+ entries = [];
161
+ }
162
+ const fresh = entries.filter((entry) => !existingBefore.has(entry));
163
+ if (fresh.length > 0) {
164
+ let newest = null;
165
+ for (const name of fresh) {
166
+ let mtimeMs;
167
+ try {
168
+ mtimeMs = statSync(join(bucketDir, name)).mtimeMs;
169
+ } catch {
170
+ continue;
171
+ }
172
+ if (!newest || mtimeMs > newest.mtimeMs) newest = {
173
+ name,
174
+ mtimeMs
175
+ };
176
+ }
177
+ if (newest) return newest.name;
178
+ }
179
+ await delay(POLL_INTERVAL_MS);
180
+ }
181
+ return null;
182
+ }
183
+ /**
184
+ * Async twin of {@link waitForNewKimiSession} (PAN-1837 review fix, P2). The
185
+ * conversation-spawn capture task runs on the dashboard event loop, so its
186
+ * 250ms poll loop must not block on readdirSync/statSync — runtime-side sync
187
+ * callers (kill/spawn lifecycle) keep the sync version above.
188
+ */
189
+ async function waitForNewKimiSessionAsync(kimiHome, workspace, existingBefore, timeoutMs = SPAWN_READY_TIMEOUT_MS) {
190
+ const bucketDir = kimiSessionsRoot(kimiHome, workspace);
191
+ const deadline = Date.now() + timeoutMs;
192
+ while (Date.now() < deadline) {
193
+ let entries = [];
194
+ try {
195
+ entries = await readdir(bucketDir);
196
+ } catch {
197
+ entries = [];
198
+ }
199
+ const fresh = entries.filter((entry) => !existingBefore.has(entry));
200
+ if (fresh.length > 0) {
201
+ let newest = null;
202
+ for (const name of fresh) {
203
+ let mtimeMs;
204
+ try {
205
+ mtimeMs = (await stat$1(join(bucketDir, name))).mtimeMs;
206
+ } catch {
207
+ continue;
208
+ }
209
+ if (!newest || mtimeMs > newest.mtimeMs) newest = {
210
+ name,
211
+ mtimeMs
212
+ };
213
+ }
214
+ if (newest) return newest.name;
215
+ }
216
+ await delay(POLL_INTERVAL_MS);
217
+ }
218
+ return null;
219
+ }
220
+ /** Persist the captured session id to `<overdeckHome>/agents/<id>/kimi-session-id` (mirrors codex's thread-id file). */
221
+ function writeKimiSessionId(agentId, sessionId, overdeckHome = getOverdeckHome()) {
222
+ writeFileSync(join(overdeckHome, "agents", agentId, "kimi-session-id"), sessionId, "utf-8");
223
+ }
224
+ /** Deterministic, filesystem-safe lock path for a Kimi session bucket. */
225
+ function kimiCaptureLockPath(bucketKey) {
226
+ const hash = createHash("sha256").update(bucketKey).digest("hex").slice(0, 24);
227
+ return join(getOverdeckHome(), "locks", "kimi-capture", `${hash}.lock`);
228
+ }
229
+ async function readKimiCaptureLockOwner(lockPath) {
230
+ try {
231
+ const parsed = JSON.parse(await readFile(join(lockPath, "owner.json"), "utf8"));
232
+ if (typeof parsed.pid !== "number" || !Number.isInteger(parsed.pid) || parsed.pid <= 0) return {};
233
+ return parsed;
234
+ } catch {
235
+ return {};
236
+ }
237
+ }
238
+ /**
239
+ * True once the lock directory itself (not owner.json) is older than the
240
+ * stale-age bound. mkdir sets this directory's mtime at creation, and it is
241
+ * never touched again once owner.json (a fresh directory entry) — if ever
242
+ * written — settles, so this is trustworthy even when owner.json itself
243
+ * never made it to disk.
244
+ */
245
+ async function isKimiCaptureLockDirStale(lockPath) {
246
+ try {
247
+ const dirStat = await stat$1(lockPath);
248
+ return Date.now() - dirStat.mtimeMs > KIMI_CAPTURE_LOCK_STALE_AGE_MS;
249
+ } catch {
250
+ return true;
251
+ }
252
+ }
253
+ async function acquireKimiCaptureLock(lockPath) {
254
+ await mkdir(dirname(lockPath), {
255
+ recursive: true,
256
+ mode: 448
257
+ });
258
+ const deadline = Date.now() + KIMI_CAPTURE_LOCK_MAX_WAIT_MS;
259
+ for (;;) {
260
+ try {
261
+ await mkdir(lockPath, { mode: 448 });
262
+ const owner = {
263
+ pid: process.pid,
264
+ acquiredAt: (/* @__PURE__ */ new Date()).toISOString()
265
+ };
266
+ const tmpPath = join(lockPath, `owner.${process.pid}.${Date.now()}.tmp`);
267
+ try {
268
+ await writeFile(tmpPath, JSON.stringify(owner, null, 2), "utf8");
269
+ await rename(tmpPath, join(lockPath, "owner.json"));
270
+ } catch (error) {
271
+ try {
272
+ await rm(tmpPath, { force: true });
273
+ } catch {}
274
+ try {
275
+ await rm(lockPath, {
276
+ recursive: true,
277
+ force: true
278
+ });
279
+ } catch {}
280
+ throw error;
281
+ }
282
+ return;
283
+ } catch (error) {
284
+ if (error.code !== "EEXIST") throw error;
285
+ const owner = await readKimiCaptureLockOwner(lockPath);
286
+ if (owner.pid !== void 0) {
287
+ if (isPidDead(owner.pid)) {
288
+ await rm(lockPath, {
289
+ recursive: true,
290
+ force: true
291
+ });
292
+ continue;
293
+ }
294
+ } else if (await isKimiCaptureLockDirStale(lockPath)) {
295
+ await rm(lockPath, {
296
+ recursive: true,
297
+ force: true
298
+ });
299
+ continue;
300
+ }
301
+ }
302
+ if (Date.now() >= deadline) throw new KimiCaptureLockTimeoutError(lockPath, KIMI_CAPTURE_LOCK_MAX_WAIT_MS);
303
+ await delay(KIMI_CAPTURE_LOCK_POLL_MS);
304
+ }
305
+ }
306
+ async function releaseKimiCaptureLock(lockPath) {
307
+ await rm(lockPath, {
308
+ recursive: true,
309
+ force: true
310
+ });
311
+ }
312
+ async function withKimiSessionCaptureLock(kimiHome, workspace, fn) {
313
+ const lockPath = kimiCaptureLockPath(kimiSessionsRoot(kimiHome, workspace));
314
+ await acquireKimiCaptureLock(lockPath);
315
+ try {
316
+ return await fn();
317
+ } finally {
318
+ await releaseKimiCaptureLock(lockPath);
319
+ }
320
+ }
321
+ function delay(ms) {
322
+ return new Promise((resolve) => setTimeout(resolve, ms));
323
+ }
324
+ function shellQuote(value) {
325
+ return `'${value.replace(/'/g, `'\\''`)}'`;
326
+ }
327
+ async function pollUntilSessionGone(agentId, timeoutMs) {
328
+ const deadline = Date.now() + timeoutMs;
329
+ while (Date.now() < deadline) {
330
+ if (!await tmuxSessionExists(agentId)) return true;
331
+ await delay(POLL_INTERVAL_MS);
332
+ }
333
+ return false;
334
+ }
335
+ function createKimiCodeRuntimeSync(options = {}) {
336
+ return new KimiCodeRuntimeSync(options);
337
+ }
338
+ var execAsync, SPAWN_READY_TIMEOUT_MS, POLL_INTERVAL_MS, KimiCodeSpawnTimeout, KIMI_CAPTURE_LOCK_POLL_MS, KIMI_CAPTURE_LOCK_MAX_WAIT_MS, KIMI_CAPTURE_LOCK_STALE_AGE_MS, KimiCaptureLockTimeoutError, KimiCodeRuntimeSync;
339
+ var init_kimi_code = __esmMin((() => {
340
+ init_agent_state();
341
+ init_queries();
342
+ init_delivery();
343
+ init_pty_supervisor_locate();
344
+ init_pty_token();
345
+ init_launcher_generator();
346
+ init_harness_binary();
347
+ init_kimi_parser();
348
+ init_paths();
349
+ init_fs_lock();
350
+ init_behavior();
351
+ init_tmux_cli();
352
+ execAsync = promisify(exec);
353
+ SPAWN_READY_TIMEOUT_MS = 6e4;
354
+ POLL_INTERVAL_MS = 250;
355
+ KimiCodeSpawnTimeout = class extends Error {
356
+ code = "KIMI_CODE_SPAWN_TIMEOUT";
357
+ constructor(agentId) {
358
+ super(`Kimi Code agent ${agentId} did not write a new session under its workDirKey bucket within ${SPAWN_READY_TIMEOUT_MS}ms`);
359
+ this.name = "KimiCodeSpawnTimeout";
360
+ }
361
+ };
362
+ KIMI_CAPTURE_LOCK_POLL_MS = 250;
363
+ KIMI_CAPTURE_LOCK_MAX_WAIT_MS = 9e4;
364
+ KIMI_CAPTURE_LOCK_STALE_AGE_MS = 75e3;
365
+ KimiCaptureLockTimeoutError = class extends Error {
366
+ constructor(lockPath, waitedMs) {
367
+ super(`Timed out after ${waitedMs}ms waiting for the Kimi session-capture lock at ${lockPath} — another process is still holding it.`);
368
+ this.name = "KimiCaptureLockTimeoutError";
369
+ }
370
+ };
371
+ KimiCodeRuntimeSync = class {
372
+ name = "kimi-code";
373
+ overdeckHomeOverride;
374
+ kimiHomeOverride;
375
+ execCommand;
376
+ prepareLaunch;
377
+ resolveAgentStates;
378
+ deliverMessage;
379
+ resolveSupervisorScriptPath;
380
+ writePtyTokenFor;
381
+ constructor(options = {}) {
382
+ this.overdeckHomeOverride = options.overdeckHome;
383
+ this.kimiHomeOverride = options.kimiHome;
384
+ this.execCommand = options.execCommand ?? (async (command) => execAsync(command));
385
+ this.prepareLaunch = options.prepareLaunch ?? (() => prepareHarnessLaunch("kimi-code"));
386
+ this.resolveAgentStates = options.listAgentStates ?? (() => listAgentStates());
387
+ this.deliverMessage = options.deliverMessage ?? ((agentId, message) => deliverAgentMessage(agentId, message, "runtime:kimi-code"));
388
+ this.resolveSupervisorScriptPath = options.resolveSupervisorScriptPath ?? resolvePtySupervisorScriptPath;
389
+ this.writePtyTokenFor = options.writePtyTokenFor ?? writePtyToken;
390
+ }
391
+ getHarnessBehavior() {
392
+ return getRuntimeBehavior("kimi-code");
393
+ }
394
+ getSessionPath(agentId) {
395
+ const workspace = this.workspaceFor(agentId);
396
+ if (!workspace) return null;
397
+ return findKimiWirePath(this.kimiHome(), workspace, this.readSessionId(agentId));
398
+ }
399
+ getLastActivity(agentId) {
400
+ const path = this.getSessionPath(agentId);
401
+ if (!path) return null;
402
+ try {
403
+ return statSync(path).mtime;
404
+ } catch {
405
+ return null;
406
+ }
407
+ }
408
+ getHeartbeat(agentId) {
409
+ const lastActivity = this.getLastActivity(agentId);
410
+ if (!lastActivity) return null;
411
+ return {
412
+ timestamp: lastActivity,
413
+ agentId,
414
+ source: "jsonl",
415
+ confidence: "medium"
416
+ };
417
+ }
418
+ getTokenUsage(agentId) {
419
+ const path = this.getSessionPath(agentId);
420
+ if (!path) return null;
421
+ return parseKimiSessionSync(path)?.usage ?? null;
422
+ }
423
+ getSessionCost(agentId) {
424
+ const path = this.getSessionPath(agentId);
425
+ if (!path) return null;
426
+ const parsed = parseKimiSessionSync(path);
427
+ if (!parsed) return null;
428
+ return {
429
+ inputCost: 0,
430
+ outputCost: 0,
431
+ cacheReadCost: 0,
432
+ cacheWriteCost: 0,
433
+ totalCost: parsed.cost_v2 ?? parsed.cost ?? 0,
434
+ currency: "USD"
435
+ };
436
+ }
437
+ async sendMessage(agentId, message) {
438
+ const result = await this.deliverMessage(agentId, message);
439
+ if (!result.ok) throw new Error(`Kimi Code agent ${agentId}: message delivery failed${result.failure ? ` (${result.failure})` : ""}`);
440
+ }
441
+ async killAgent(agentId) {
442
+ try {
443
+ await this.execCommand(`tmux -L overdeck send-keys -t ${shellQuote(agentId)} C-c 2>/dev/null || true`);
444
+ } catch {}
445
+ if (await pollUntilSessionGone(agentId, 2e3)) return;
446
+ let panePid = null;
447
+ try {
448
+ const { stdout } = await this.execCommand(`tmux -L overdeck list-panes -t ${shellQuote(agentId)} -F '#{pane_pid}' 2>/dev/null`);
449
+ panePid = stdout.trim() || null;
450
+ if (panePid) await this.execCommand(`kill -TERM -- -${panePid} 2>/dev/null || kill -TERM ${panePid} 2>/dev/null || true`);
451
+ } catch {}
452
+ if (await pollUntilSessionGone(agentId, 5e3)) return;
453
+ if (panePid) try {
454
+ await this.execCommand(`kill -KILL -- -${panePid} 2>/dev/null || kill -KILL ${panePid} 2>/dev/null || true`);
455
+ } catch {}
456
+ if (await tmuxSessionExists(agentId)) await tmuxKillSession(agentId);
457
+ }
458
+ async spawnAgent(config) {
459
+ const { pathExport } = await this.prepareLaunch();
460
+ const model = config.model ?? "";
461
+ const bucketDir = kimiSessionsRoot(this.kimiHome(), config.workspace);
462
+ let existingBefore = /* @__PURE__ */ new Set();
463
+ try {
464
+ existingBefore = new Set(readdirSync(bucketDir));
465
+ } catch {}
466
+ mkdirSync(join(this.home(), "agents", config.agentId), { recursive: true });
467
+ const supervisorScriptPath = this.resolveSupervisorScriptPath();
468
+ await this.writePtyTokenFor(config.agentId);
469
+ const launcherContent = generateLauncherScriptSync({
470
+ role: "work",
471
+ workingDir: config.workspace,
472
+ harness: "kimi-code",
473
+ kimiCodeModel: model,
474
+ kimiCodeYolo: true,
475
+ extraEnvExports: [pathExport],
476
+ overdeckEnv: { agentId: config.agentId },
477
+ setTerminalEnv: true,
478
+ useSupervisor: true,
479
+ supervisorScriptPath,
480
+ unsetProviderEnv: true
481
+ });
482
+ const launcherScript = this.agentPath(config.agentId, "launcher.sh");
483
+ writeFileSync(launcherScript, launcherContent, { mode: 493 });
484
+ await tmuxCreateSession(config.agentId, config.workspace, `bash ${shellQuote(launcherScript)}`, config.env ?? {});
485
+ try {
486
+ const sessionId = await this.waitForNewSessionId(config.workspace, existingBefore);
487
+ if (!sessionId) throw new KimiCodeSpawnTimeout(config.agentId);
488
+ this.writeSessionId(config.agentId, sessionId);
489
+ this.markSupervisorEnabled(config.agentId);
490
+ if (config.prompt) await this.sendMessage(config.agentId, config.prompt);
491
+ return {
492
+ id: config.agentId,
493
+ sessionId,
494
+ runtime: "kimi-code",
495
+ model,
496
+ workspace: config.workspace,
497
+ startedAt: /* @__PURE__ */ new Date()
498
+ };
499
+ } catch (error) {
500
+ if (await tmuxSessionExists(config.agentId)) await tmuxKillSession(config.agentId);
501
+ throw error;
502
+ }
503
+ }
504
+ listSessions(workspace) {
505
+ const sessions = [];
506
+ for (const state of this.resolveAgentStates()) {
507
+ if (state.harness !== "kimi-code") continue;
508
+ if (workspace && state.workspace !== workspace) continue;
509
+ const sessionId = this.readSessionId(state.id);
510
+ if (!sessionId) continue;
511
+ const sessionPath = findKimiWirePath(this.kimiHome(), state.workspace, sessionId);
512
+ let lastActivity;
513
+ try {
514
+ lastActivity = statSync(sessionPath ?? "").mtime;
515
+ } catch {
516
+ continue;
517
+ }
518
+ sessions.push({
519
+ id: sessionId,
520
+ agentId: state.id,
521
+ workspace: state.workspace,
522
+ model: state.model ?? "",
523
+ startedAt: new Date(state.startedAt),
524
+ lastActivity,
525
+ tokenUsage: {
526
+ inputTokens: 0,
527
+ outputTokens: 0
528
+ }
529
+ });
530
+ }
531
+ return sessions;
532
+ }
533
+ async isRunning(agentId) {
534
+ return tmuxSessionExists(agentId);
535
+ }
536
+ home() {
537
+ return this.overdeckHomeOverride ?? getOverdeckHome();
538
+ }
539
+ kimiHome() {
540
+ return this.kimiHomeOverride ?? kimiHomeDefault();
541
+ }
542
+ agentPath(agentId, file) {
543
+ return join(this.home(), "agents", agentId, file);
544
+ }
545
+ workspaceFor(agentId) {
546
+ return getAgentStateSync(agentId)?.workspace ?? null;
547
+ }
548
+ readSessionId(agentId) {
549
+ try {
550
+ return readFileSync(this.agentPath(agentId, "kimi-session-id"), "utf-8").trim() || null;
551
+ } catch {
552
+ return null;
553
+ }
554
+ }
555
+ writeSessionId(agentId, sessionId) {
556
+ writeKimiSessionId(agentId, sessionId, this.home());
557
+ }
558
+ /**
559
+ * Best-effort: mark the persisted agent state as supervisor-enabled so
560
+ * prepareSupervisorForRelaunch (supervisor-channels.ts) re-supervises this
561
+ * agent on relaunch instead of falling back to useSupervisor:false. A
562
+ * no-op when no state has been saved for this agent yet (some callers of
563
+ * this adapter's spawnAgent create state afterward).
564
+ */
565
+ markSupervisorEnabled(agentId) {
566
+ const state = getAgentStateSync(agentId);
567
+ if (!state) return;
568
+ state.supervisorEnabled = true;
569
+ saveAgentStateSync(state);
570
+ }
571
+ async waitForNewSessionId(workspace, existingBefore) {
572
+ return waitForNewKimiSession(this.kimiHome(), workspace, existingBefore);
573
+ }
574
+ };
575
+ }));
576
+ //#endregion
577
+ export { findKimiWirePath as a, findLatestKimiSessionAsync as c, kimiSessionsRoot as d, kimiWorkDirKey as f, writeKimiSessionId as g, withKimiSessionCaptureLock as h, createKimiCodeRuntimeSync as i, init_kimi_code as l, waitForNewKimiSessionAsync as m, KimiCodeRuntimeSync as n, findKimiWirePathAsync as o, waitForNewKimiSession as p, KimiCodeSpawnTimeout as r, findLatestKimiSession as s, KimiCaptureLockTimeoutError as t, kimiCaptureLockPath as u };
578
+
579
+ //# sourceMappingURL=kimi-code-BYbme0aV.js.map
@@ -0,0 +1,3 @@
1
+ import { d as kimiSessionsRoot, g as writeKimiSessionId, h as withKimiSessionCaptureLock, l as init_kimi_code, m as waitForNewKimiSessionAsync, o as findKimiWirePathAsync } from "./kimi-code-BYbme0aV.js";
2
+ init_kimi_code();
3
+ export { findKimiWirePathAsync, kimiSessionsRoot, waitForNewKimiSessionAsync, withKimiSessionCaptureLock, writeKimiSessionId };