very-happy-cli 0.2.180 → 0.2.181

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 (200) hide show
  1. package/dist/{AcpBackend-DfRDtMcG.cjs → AcpBackend-CgHb_ya5.cjs} +3 -3
  2. package/dist/{AcpBackend-B8Zi30Zh.mjs → AcpBackend-DZGCSuXF.mjs} +3 -3
  3. package/dist/{AcpSessionManager-CASKOnOj.cjs → AcpSessionManager-CacC2EVn.cjs} +1 -1
  4. package/dist/{AcpSessionManager-i8Rab0xT.mjs → AcpSessionManager-DwuPzWBh.mjs} +1 -1
  5. package/dist/{BasePermissionHandler-BlM_tfej.cjs → BasePermissionHandler-DCP8ZEB4.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-26fKbRCm.mjs → BasePermissionHandler-Uo-GUjbb.mjs} +1 -1
  7. package/dist/{acpSessionResume-B9l54P-X.mjs → acpSessionResume-9OLTD6kT.mjs} +1 -1
  8. package/dist/{acpSessionResume-CR5pmgVo.cjs → acpSessionResume-BaVMD80f.cjs} +1 -1
  9. package/dist/{agentHome-CmGy0NWv.mjs → agentHome-B1BsKeqD.mjs} +4 -4
  10. package/dist/{agentHome-C7Sb7-Tz.cjs → agentHome-BtUmGcPX.cjs} +4 -4
  11. package/dist/{api-DM7b1OKj.cjs → api-COHFAkb_.cjs} +10 -10
  12. package/dist/{api-Hov8p7CA.mjs → api-Dr3wXL_7.mjs} +10 -10
  13. package/dist/{apiMachine-CwGEhQDT.mjs → apiMachine-CHEzPQdS.mjs} +54 -32
  14. package/dist/{apiMachine-DkGRj-Ai.cjs → apiMachine-D8H7CXaz.cjs} +55 -33
  15. package/dist/{attachmentContent-CIn4iPEk.mjs → attachmentContent-1YwtKgWl.mjs} +2 -2
  16. package/dist/{attachmentContent-CEm13_gF.cjs → attachmentContent-mIhbtRKl.cjs} +2 -2
  17. package/dist/{auth-rggxMpEE.mjs → auth-CbZkcMAb.mjs} +8 -8
  18. package/dist/{auth-CBXnm-Mj.cjs → auth-CgQP7d0q.cjs} +5 -5
  19. package/dist/{auth-BG1DY0gj.mjs → auth-DZsthtSk.mjs} +5 -5
  20. package/dist/{auth-Dawj7pP5.cjs → auth-Fg8fLadK.cjs} +8 -8
  21. package/dist/{auto-CbYOfoPS.cjs → auto-BB7kqSh5.cjs} +18 -18
  22. package/dist/{auto-CXXLXGeL.mjs → auto-_T-Ud-z5.mjs} +18 -18
  23. package/dist/{bootstrap-Dt5I1SOl.mjs → bootstrap-B6EkZh4u.mjs} +2 -2
  24. package/dist/{bootstrap-DoA7okld.cjs → bootstrap-CYtOtbi7.cjs} +2 -2
  25. package/dist/{browser-DUNetFT4.mjs → browser-C2qhUHSE.mjs} +1 -1
  26. package/dist/{browser-DZ6qRtfH.cjs → browser-DjNNQQk2.cjs} +1 -1
  27. package/dist/{claudeLocal-OHWQigCl.mjs → claudeLocal-BAFjWhZ8.mjs} +6 -6
  28. package/dist/{claudeLocal--DNyMOSv.cjs → claudeLocal-O_w7-fBh.cjs} +6 -6
  29. package/dist/{claudeLocalLauncher-BStvfa7M.mjs → claudeLocalLauncher-CWn30LZR.mjs} +11 -11
  30. package/dist/{claudeLocalLauncher-BhvPbcyH.cjs → claudeLocalLauncher-Df3zg1q0.cjs} +11 -11
  31. package/dist/{claudeSessionFork-GAVWhiKG.mjs → claudeSessionFork-2ZkSTOGn.mjs} +1 -1
  32. package/dist/{claudeSessionFork-Be16vzGc.cjs → claudeSessionFork-pwcKqB-e.cjs} +1 -1
  33. package/dist/{client-Ca5Pcgy_.mjs → client-BKyU66lg.mjs} +2 -2
  34. package/dist/{client-D_loZ9IK.cjs → client-CUO3ItoB.cjs} +34 -8
  35. package/dist/{client-CnB7kRCT.mjs → client-CXOnzuOy.mjs} +2 -2
  36. package/dist/{client-DJplzPjD.cjs → client-DWs6k041.cjs} +2 -2
  37. package/dist/{client-BWjaHKtj.cjs → client-D_U2VjO3.cjs} +2 -2
  38. package/dist/{client-D4uPb1uu.mjs → client-DsQcxVUV.mjs} +34 -9
  39. package/dist/codex/happyMcpStdioBridge.cjs +17 -17
  40. package/dist/codex/happyMcpStdioBridge.mjs +17 -17
  41. package/dist/{codexAppServerClient-PE-12AsW.cjs → codexAppServerClient-BRX3JZ_5.cjs} +3 -3
  42. package/dist/{codexAppServerClient-CO4G6OS4.mjs → codexAppServerClient-C3JO3pwM.mjs} +3 -3
  43. package/dist/{codexCommand-B_xUH79E.mjs → codexCommand-BZIAAqKS.mjs} +47 -45
  44. package/dist/{codexCommand-BNoD1t1C.cjs → codexCommand-dKOc5iQl.cjs} +47 -45
  45. package/dist/{codexTermination-BmBbizFK.cjs → codexTermination-BVR9HeVI.cjs} +1 -1
  46. package/dist/{codexTermination-Dx48ma6e.mjs → codexTermination-ztFkwHrG.mjs} +1 -1
  47. package/dist/{config-DSu0Blos.mjs → config-NbHjx8ge.mjs} +3 -3
  48. package/dist/{config-CtwEUxUP.cjs → config-cftYxLC7.cjs} +3 -3
  49. package/dist/{configuration-PxzEJumr.mjs → configuration-BPrfb17M.mjs} +1 -1
  50. package/dist/{configuration-CYO-kPOS.cjs → configuration-C8JgseHy.cjs} +1 -1
  51. package/dist/{connect-Dq7wndzR.cjs → connect-Br8VMrK1.cjs} +13 -13
  52. package/dist/{connect-BQrg3TB6.mjs → connect-CLD1ai0k.mjs} +13 -13
  53. package/dist/{context-6TP-iz_c.cjs → context-D1lgQTJC.cjs} +1 -1
  54. package/dist/{context-CJGRRGWW.mjs → context-_YGq8xdH.mjs} +1 -1
  55. package/dist/{controlClient-DoeYovwP.mjs → controlClient-CkNpT5zS.mjs} +3 -3
  56. package/dist/{controlClient-Bqv5v5OM.cjs → controlClient-D68Zj7Q-.cjs} +3 -3
  57. package/dist/{createSessionMetadata-DDIChCx8.mjs → createSessionMetadata-3WAj3_xl.mjs} +2 -2
  58. package/dist/{createSessionMetadata-xz767pcG.cjs → createSessionMetadata-DNIbKLHg.cjs} +2 -2
  59. package/dist/{defaultPermissionMode-PkZGsQDk.cjs → defaultPermissionMode-BmvjP32v.cjs} +2 -2
  60. package/dist/{defaultPermissionMode-i5KzdK09.mjs → defaultPermissionMode-DXMznl8v.mjs} +2 -2
  61. package/dist/{deterministicJson-xqA6DaOm.cjs → deterministicJson-BS7D7URE.cjs} +87 -22
  62. package/dist/{deterministicJson-CTEJDqtS.mjs → deterministicJson-BcBIKKf1.mjs} +87 -24
  63. package/dist/{doctor-BrgSlfXn.cjs → doctor-Be7zC0AF.cjs} +8 -7
  64. package/dist/{doctor-IctjVh9T.mjs → doctor-CoOaPq6w.mjs} +8 -8
  65. package/dist/{downloadTarget-jbOz1egC.mjs → downloadTarget-CeaAXdJj.mjs} +6 -6
  66. package/dist/{downloadTarget-CEb9che-.cjs → downloadTarget-LyOiucn_.cjs} +6 -6
  67. package/dist/{ensureDaemonRunning-b1e8LCSM.mjs → ensureDaemonRunning--98j7-17.mjs} +5 -5
  68. package/dist/{ensureDaemonRunning-D-HyjGIX.cjs → ensureDaemonRunning-B8z37VKD.cjs} +5 -5
  69. package/dist/fileStore-5qpetZS0.mjs +146 -0
  70. package/dist/fileStore-7qhnbs6N.cjs +152 -0
  71. package/dist/{handleResumeCommand-BvWVuRwH.cjs → handleResumeCommand-BFZlrFVH.cjs} +5 -5
  72. package/dist/{handleResumeCommand-DpaZvm2c.mjs → handleResumeCommand-gO8I4keP.mjs} +5 -5
  73. package/dist/{index-B2p2Mut7.cjs → index-B5PXbZjW.cjs} +77 -60
  74. package/dist/{index-F2UejqYs.cjs → index-BRMq9gOe.cjs} +3 -3
  75. package/dist/{index-C64Ufj4D.cjs → index-BkluinoS.cjs} +4 -4
  76. package/dist/{index-Bsvbgh9e.mjs → index-CO0n9ue6.mjs} +4 -4
  77. package/dist/{index-C6Vn5Eac.mjs → index-CeRXrGnH.mjs} +39 -6
  78. package/dist/{index-Dv0Q48P3.cjs → index-Df2eHm3O.cjs} +40 -6
  79. package/dist/{index-BUNnpGFF.mjs → index-DneHoQXf.mjs} +78 -61
  80. package/dist/{index-CMf5VbzG.mjs → index-WUj3954m.mjs} +4 -4
  81. package/dist/{index-wCbtF4BK.mjs → index-hQ8LP1C2.mjs} +3 -3
  82. package/dist/{index-DmTlDRSL.cjs → index-jF2t3ACW.cjs} +4 -4
  83. package/dist/index.cjs +2 -2
  84. package/dist/index.mjs +2 -2
  85. package/dist/{install-BX3lv3NO.mjs → install-D0inLCv-.mjs} +1 -1
  86. package/dist/{install-BXvf2E3o.cjs → install-D2NCbeJ-.cjs} +1 -1
  87. package/dist/{install-CdzSV7qO.mjs → install-DkYFiVK4.mjs} +3 -3
  88. package/dist/{install-C0ANcEAW.cjs → install-FqkSUjPC.cjs} +3 -3
  89. package/dist/lib.cjs +12 -12
  90. package/dist/lib.d.cts +39 -1
  91. package/dist/lib.d.mts +39 -1
  92. package/dist/lib.mjs +12 -12
  93. package/dist/{lidState-bBrmaQd2.mjs → lidState-DghbfRbr.mjs} +1 -1
  94. package/dist/{lidState-DWGnm2H4.cjs → lidState-x8cJ8J_9.cjs} +1 -1
  95. package/dist/{localHappyAgentAuth-DZHQnIW9.cjs → localHappyAgentAuth-DZ2kb9uq.cjs} +1 -1
  96. package/dist/{localHappyAgentAuth-Dn1jYDpt.mjs → localHappyAgentAuth-IKmeRpuQ.mjs} +1 -1
  97. package/dist/{logger-CphW5nUE.cjs → logger-DgBwUSgS.cjs} +2 -2
  98. package/dist/{logger-BUngm5Xg.mjs → logger-LFr8iPgl.mjs} +2 -2
  99. package/dist/{machineMetadata-BXN_bKU3.mjs → machineMetadata-BglCsfvf.mjs} +11 -4
  100. package/dist/{machineMetadata-BQm9YTcI.cjs → machineMetadata-DB03ez4K.cjs} +11 -3
  101. package/dist/{main-B2UV51nK.cjs → main-YQ-Vkakw.cjs} +45 -45
  102. package/dist/{main-DGkdYfEq.mjs → main-_1LSzlLv.mjs} +45 -45
  103. package/dist/{mcp-BFvAEIRz.cjs → mcp-BIY80jSc.cjs} +14 -14
  104. package/dist/{mcp-CbTtbs0f.mjs → mcp-Csj-mT5Y.mjs} +14 -14
  105. package/dist/{mirrorProtocol-HKPivs5o.cjs → mirrorProtocol-BphKIAK9.cjs} +16 -153
  106. package/dist/{mirrorProtocol-BR4luBC0.mjs → mirrorProtocol-CAxOMBkb.mjs} +19 -151
  107. package/dist/{package-7Ld1YMhh.mjs → package-DYGwlmXl.mjs} +8 -8
  108. package/dist/{package-KhLqBDX9.cjs → package-NoD8QOOM.cjs} +8 -8
  109. package/dist/{panels-C7IVqpJk.mjs → panels-B8zRm7_d.mjs} +5 -5
  110. package/dist/{panels-Njf6GelF.cjs → panels-DYEc1NyQ.cjs} +5 -5
  111. package/dist/{peerTools-BOlDRyhi.mjs → peerTools-CK3JYu1k.mjs} +5 -5
  112. package/dist/{peerTools-DQNlrcqM.cjs → peerTools-CP-x-Peu.cjs} +5 -5
  113. package/dist/{persistence-9BMYspxG.cjs → persistence-BY-D00wT.cjs} +2 -2
  114. package/dist/{persistence-BFUOHW5h.mjs → persistence-D2Djrf7t.mjs} +2 -2
  115. package/dist/pi-CqyoZMjI.mjs +380 -0
  116. package/dist/pi-DlsrPCTa.cjs +400 -0
  117. package/dist/{piRunnerArgs-H2pgpA5z.mjs → piRunnerArgs-IZLoL7TG.mjs} +1 -1
  118. package/dist/{piRunnerArgs-DGaq6VYM.cjs → piRunnerArgs-gxLYIZH4.cjs} +1 -1
  119. package/dist/{piRuntime-CdN0JAsa.mjs → piRuntime-D7Y4oHVL.mjs} +2 -2
  120. package/dist/{piRuntime-CT5xv_3h.cjs → piRuntime-o5L8uX-W.cjs} +2 -2
  121. package/dist/{piTerminal-0FBtXTHK.cjs → piTerminal-C_-JDkLN.cjs} +17 -17
  122. package/dist/{piTerminal-C4m9YXAV.mjs → piTerminal-Kphx8Uhw.mjs} +17 -17
  123. package/dist/{prompt-lgF9IE82.cjs → prompt-Bof2aQkI.cjs} +7 -2
  124. package/dist/{prompt-BOouDaTM.mjs → prompt-QHuFx9j6.mjs} +7 -2
  125. package/dist/{pushNotifications-DI92havG.cjs → pushNotifications-BXoOSq_G.cjs} +10 -4
  126. package/dist/{pushNotifications-DCiBEVeC.mjs → pushNotifications-DXGIhE-A.mjs} +10 -4
  127. package/dist/{query-ywZbQUzR.mjs → query-CcA6DVZK.mjs} +1 -1
  128. package/dist/{query-BETKBrnz.cjs → query-CdCxzuaB.cjs} +1 -1
  129. package/dist/{rateLimitWindows-YRIYVdo4.cjs → rateLimitWindows-OpAmdOtC.cjs} +1 -1
  130. package/dist/{rateLimitWindows-BkfuUB1a.mjs → rateLimitWindows-ZtHZHe-l.mjs} +1 -1
  131. package/dist/{registerCommonHandlers-C7a_dUWs.cjs → registerCommonHandlers-CRjBoJLK.cjs} +2 -2
  132. package/dist/{registerCommonHandlers-CTkCvjxt.mjs → registerCommonHandlers-DF6bdDtd.mjs} +2 -2
  133. package/dist/{registerKillSessionHandler-CIsvBrVe.cjs → registerKillSessionHandler-7fOm6ooh.cjs} +6 -6
  134. package/dist/{registerKillSessionHandler-CaqqRYq6.mjs → registerKillSessionHandler-DDCKL3wf.mjs} +6 -6
  135. package/dist/{remoteSessionClient-PP-mOKmw.mjs → remoteSessionClient-B2POSKFT.mjs} +5 -5
  136. package/dist/{remoteSessionClient-D843fkzL.cjs → remoteSessionClient-CFCn42bs.cjs} +5 -5
  137. package/dist/{reportProgressTool-ZOCNjWHr.mjs → reportProgressTool-tPxEvh6x.mjs} +4 -4
  138. package/dist/{reportProgressTool-14AXr959.cjs → reportProgressTool-th4trcET.cjs} +4 -4
  139. package/dist/{resources-CvIlkzpP.cjs → resources-BPyN59Iv.cjs} +23 -2
  140. package/dist/{resources-y9jfyO-_.mjs → resources-CH1iP6Cv.mjs} +22 -3
  141. package/dist/{run-CAOCYYfT.cjs → run-C_FumCQk.cjs} +618 -594
  142. package/dist/{run-Dajw2E5j.mjs → run-cKQBbVi4.mjs} +554 -530
  143. package/dist/{runClaude-C6oxWYbp.mjs → runClaude-CYnM6krL.mjs} +22 -22
  144. package/dist/{runClaude-CRRKt-tm.cjs → runClaude-z_2YC_aa.cjs} +22 -22
  145. package/dist/{runClaudeDeps-B1ysqTvx.cjs → runClaudeDeps-CLubzWnA.cjs} +43 -41
  146. package/dist/{runClaudeDeps-BcZ68cX3.mjs → runClaudeDeps-duS06Pb4.mjs} +48 -46
  147. package/dist/{runGemini-D7yKc4wD.mjs → runGemini-C_Pc2EhH.mjs} +37 -35
  148. package/dist/{runGemini-DtKFXqf-.cjs → runGemini-vEoXV6qT.cjs} +37 -35
  149. package/dist/{runOpenClaw-Cq29mryb.cjs → runOpenClaw-CXJCtMgB.cjs} +18 -18
  150. package/dist/{runOpenClaw-C8ilyLP9.mjs → runOpenClaw-Cxun1qLC.mjs} +18 -18
  151. package/dist/{sandbox-gIj-EuF4.cjs → sandbox-CO46H2tK.cjs} +4 -4
  152. package/dist/{sandbox-CbCutma4.mjs → sandbox-CsvPnTmz.mjs} +4 -4
  153. package/dist/{selfCheck-BTGBVthv.cjs → selfCheck-DIr7Gc0i.cjs} +36 -36
  154. package/dist/selfCheck-NamtBHVB.mjs +85 -0
  155. package/dist/{send-YZRMQvMJ.mjs → send-DMoFg6F1.mjs} +8 -8
  156. package/dist/{send-CZf5lLw_.cjs → send-X2mfVEyr.cjs} +8 -8
  157. package/dist/{server-CknFq6xG.cjs → server-BwTEdbkr.cjs} +6 -6
  158. package/dist/{server-BqwXRzFZ.mjs → server-CkqQ0sRH.mjs} +4 -4
  159. package/dist/{sessionLock-DRZUcKHT.cjs → sessionLock-CdIRJlHH.cjs} +3 -3
  160. package/dist/{sessionLock-nBXdJxJm.mjs → sessionLock-JIfwCqMk.mjs} +3 -3
  161. package/dist/{sessionOps-BrGiU9-s.cjs → sessionOps-DVA-00nR.cjs} +4 -4
  162. package/dist/{sessionOps-C58iDeD5.mjs → sessionOps-DqlftXxe.mjs} +4 -4
  163. package/dist/{sessionScanner-Bm57LEXe.mjs → sessionScanner-BI0Vo1xT.mjs} +3 -3
  164. package/dist/{sessionScanner-CaO8bLaG.cjs → sessionScanner-BMwgGAhY.cjs} +3 -3
  165. package/dist/{sessions-BXyBHo8n.mjs → sessions-D6IimX7b.mjs} +10 -10
  166. package/dist/{sessions-uzqPCc37.cjs → sessions-DjgEcHaT.cjs} +10 -10
  167. package/dist/{setupOfflineReconnection-DvvVX3TB.cjs → setupOfflineReconnection-CjuCiKY3.cjs} +2 -2
  168. package/dist/{setupOfflineReconnection-1Qlek3wl.mjs → setupOfflineReconnection-DgJK_4m1.mjs} +2 -2
  169. package/dist/{spawn-vn93PhYL.mjs → spawn-Dvzy-tzc.mjs} +14 -14
  170. package/dist/{spawn-DBkodJEO.cjs → spawn-rhF28shY.cjs} +14 -14
  171. package/dist/{spawnAgents-CgPMWexP.mjs → spawnAgents-CCnlq-FI.mjs} +1 -1
  172. package/dist/{spawnAgents-DLNMlhWJ.cjs → spawnAgents-iwuqrgR9.cjs} +1 -1
  173. package/dist/{spawnHappyCLI-DnUZv0X2.cjs → spawnHappyCLI-DnKmIsEt.cjs} +1 -1
  174. package/dist/{spawnHappyCLI-BjFZc_7V.mjs → spawnHappyCLI-Dq3LLXLb.mjs} +1 -1
  175. package/dist/{specialCommands-D3ND9bdg.mjs → specialCommands-CcyZ1hGA.mjs} +3 -3
  176. package/dist/{specialCommands-BRufxlqe.cjs → specialCommands-Zwr2C6A2.cjs} +3 -3
  177. package/dist/{startFileWatcher-DXJ7yB5v.mjs → startFileWatcher-4thXDK9d.mjs} +1 -1
  178. package/dist/{startFileWatcher-D9cYzZOq.cjs → startFileWatcher-K6hJSyiR.cjs} +1 -1
  179. package/dist/{startupSessionCreate-uZ6BM0ty.mjs → startupSessionCreate-BfByJ16A.mjs} +1 -1
  180. package/dist/{startupSessionCreate-kdr3m1uX.cjs → startupSessionCreate-CKEbq0tL.cjs} +1 -1
  181. package/dist/{streamRelay-Dy6amlzx.cjs → streamRelay-Gy8Xfnon.cjs} +1 -1
  182. package/dist/{streamRelay-DnMCMMfV.mjs → streamRelay-LcDvyEjK.mjs} +1 -1
  183. package/dist/{sync-Bn-idAoy.cjs → sync-1hQ5KHpL.cjs} +1 -1
  184. package/dist/{sync-BvVhDO40.mjs → sync-DO-2PU45.mjs} +1 -1
  185. package/dist/{systemPrompt-CIZcJuJF.mjs → systemPrompt-BctLfMZs.mjs} +3 -3
  186. package/dist/{systemPrompt-DlyEk35T.cjs → systemPrompt-Dj7pgkMK.cjs} +3 -3
  187. package/dist/{teams-DLY3B5yi.mjs → teams-Bu8YeOoF.mjs} +8 -8
  188. package/dist/{teams-BLeRpDxv.cjs → teams-uQxUlyyz.cjs} +8 -8
  189. package/dist/{time-D3ETL7Jb.mjs → time-BcoJaG8E.mjs} +1 -1
  190. package/dist/{time-Cjv0zxQO.cjs → time-nqa9shu8.cjs} +1 -1
  191. package/dist/{titleGenerator-Cgp5ihFb.cjs → titleGenerator-D09XyYYG.cjs} +2 -2
  192. package/dist/{titleGenerator-Uzbd4utr.mjs → titleGenerator-D5r06bhf.mjs} +1 -1
  193. package/dist/{todo-pOMcEECE.cjs → todo-CCOnL7pT.cjs} +6 -6
  194. package/dist/{todo-C9Ga-oEM.mjs → todo-D1q8146q.mjs} +6 -6
  195. package/dist/{tools-Cho7iIWf.mjs → tools-D2E--n1x.mjs} +3 -3
  196. package/dist/{tools-BL7Byl_x.cjs → tools-DiCXnAC5.cjs} +3 -3
  197. package/dist/{uninstall-CbayEVoV.cjs → uninstall-BrNwwwSD.cjs} +3 -3
  198. package/dist/{uninstall-CvZHVY9C.mjs → uninstall-CtwXi1Rt.mjs} +3 -3
  199. package/package.json +8 -8
  200. package/dist/selfCheck-Smt-5Xiq.mjs +0 -85
@@ -0,0 +1,146 @@
1
+ import { randomBytes, createHash } from 'node:crypto';
2
+ import { promises, constants } from 'node:fs';
3
+ import { join, dirname, basename } from 'node:path';
4
+
5
+ const MAX_CONFIG_BYTES = 1024 * 1024;
6
+ const MAX_BACKUPS_PER_HARNESS = 20;
7
+ class ModelConfigError extends Error {
8
+ constructor(code, message) {
9
+ super(message);
10
+ this.code = code;
11
+ this.name = "ModelConfigError";
12
+ }
13
+ }
14
+ function sha256(text) {
15
+ return createHash("sha256").update(text).digest("hex");
16
+ }
17
+ async function readConfigFile(path) {
18
+ let stat;
19
+ try {
20
+ stat = await promises.stat(path);
21
+ } catch (error) {
22
+ if (error.code === "ENOENT") {
23
+ return { path, exists: false, content: "", hash: sha256(""), mode: null };
24
+ }
25
+ throw new ModelConfigError("read-failed", `Cannot read ${path}: ${error.message}`);
26
+ }
27
+ if (!stat.isFile()) throw new ModelConfigError("not-a-file", `${path} is not a regular file`);
28
+ if (stat.size > MAX_CONFIG_BYTES) throw new ModelConfigError("file-too-large", `${path} is larger than ${MAX_CONFIG_BYTES} bytes`);
29
+ const content = await promises.readFile(path, "utf8");
30
+ return { path, exists: true, content, hash: sha256(content), mode: stat.mode & 511 };
31
+ }
32
+ async function resolveWriteTarget(path) {
33
+ try {
34
+ return await promises.realpath(path);
35
+ } catch (error) {
36
+ if (error.code === "ENOENT") {
37
+ try {
38
+ const link = await promises.readlink(path);
39
+ return link.startsWith("/") ? link : join(dirname(path), link);
40
+ } catch {
41
+ return path;
42
+ }
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ async function atomicWriteFile(path, content, mode) {
48
+ const target = await resolveWriteTarget(path);
49
+ const dir = dirname(target);
50
+ await promises.mkdir(dir, { recursive: true, mode: 448 });
51
+ const tmp = join(dir, `.${basename(target)}.vh-tmp-${process.pid}-${randomBytes(4).toString("hex")}`);
52
+ const handle = await promises.open(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, mode ?? 384);
53
+ try {
54
+ await handle.writeFile(content, "utf8");
55
+ await handle.sync();
56
+ } catch (error) {
57
+ await handle.close().catch(() => {
58
+ });
59
+ await promises.unlink(tmp).catch(() => {
60
+ });
61
+ throw error;
62
+ }
63
+ await handle.close();
64
+ try {
65
+ if (mode !== null) await promises.chmod(tmp, mode);
66
+ await promises.rename(tmp, target);
67
+ } catch (error) {
68
+ await promises.unlink(tmp).catch(() => {
69
+ });
70
+ throw error;
71
+ }
72
+ try {
73
+ const dirHandle = await promises.open(dir, "r");
74
+ await dirHandle.sync().catch(() => {
75
+ });
76
+ await dirHandle.close();
77
+ } catch {
78
+ }
79
+ }
80
+ const BACKUP_ID = /^\d{13}-[0-9a-f]{8}$/;
81
+ const HARNESS_DIR = /^[a-z][a-z0-9-]{0,31}$/;
82
+ class BackupStore {
83
+ constructor(root) {
84
+ this.root = root;
85
+ }
86
+ harnessDir(harness) {
87
+ if (!HARNESS_DIR.test(harness)) throw new ModelConfigError("invalid-harness", "Invalid harness");
88
+ return join(this.root, harness);
89
+ }
90
+ async create(harness, reason, files, now = Date.now()) {
91
+ const id = `${now}-${randomBytes(4).toString("hex")}`;
92
+ const dir = join(this.harnessDir(harness), id);
93
+ await promises.mkdir(dir, { recursive: true, mode: 448 });
94
+ const manifest = { id, createdAt: now, reason, files: files.map((f, i) => ({ path: f.path, blob: f.content === null ? null : `f${i}`, mode: f.mode })) };
95
+ for (const [i, file] of files.entries()) {
96
+ if (file.content !== null) await promises.writeFile(join(dir, `f${i}`), file.content, { encoding: "utf8", mode: 384 });
97
+ }
98
+ await promises.writeFile(join(dir, "manifest.json"), JSON.stringify(manifest, null, 2), { encoding: "utf8", mode: 384 });
99
+ await this.prune(harness);
100
+ return { id, createdAt: now, reason, files: files.map((f) => f.path) };
101
+ }
102
+ async list(harness) {
103
+ let names;
104
+ try {
105
+ names = await promises.readdir(this.harnessDir(harness));
106
+ } catch {
107
+ return [];
108
+ }
109
+ const entries = [];
110
+ for (const name of names.filter((n) => BACKUP_ID.test(n))) {
111
+ try {
112
+ const manifest = JSON.parse(await promises.readFile(join(this.harnessDir(harness), name, "manifest.json"), "utf8"));
113
+ entries.push({ id: name, createdAt: Number(manifest.createdAt) || 0, reason: String(manifest.reason ?? ""), files: (manifest.files ?? []).map((f) => f.path) });
114
+ } catch {
115
+ }
116
+ }
117
+ return entries.sort((a, b) => b.createdAt - a.createdAt);
118
+ }
119
+ async read(harness, id) {
120
+ if (!BACKUP_ID.test(id)) throw new ModelConfigError("invalid-backup", "Invalid backup id");
121
+ const dir = join(this.harnessDir(harness), id);
122
+ let manifest;
123
+ try {
124
+ manifest = JSON.parse(await promises.readFile(join(dir, "manifest.json"), "utf8"));
125
+ } catch {
126
+ throw new ModelConfigError("backup-not-found", "Backup not found");
127
+ }
128
+ const out = [];
129
+ for (const file of manifest.files) {
130
+ out.push({
131
+ path: file.path,
132
+ content: file.blob === null ? null : await promises.readFile(join(dir, file.blob), "utf8"),
133
+ mode: typeof file.mode === "number" ? file.mode : null
134
+ });
135
+ }
136
+ return out;
137
+ }
138
+ async prune(harness) {
139
+ const entries = await this.list(harness);
140
+ for (const stale of entries.slice(MAX_BACKUPS_PER_HARNESS)) {
141
+ await promises.rm(join(this.harnessDir(harness), stale.id), { recursive: true, force: true });
142
+ }
143
+ }
144
+ }
145
+
146
+ export { BackupStore as B, ModelConfigError as M, atomicWriteFile as a, readConfigFile as r, sha256 as s };
@@ -0,0 +1,152 @@
1
+ 'use strict';
2
+
3
+ var node_crypto = require('node:crypto');
4
+ var node_fs = require('node:fs');
5
+ var path = require('node:path');
6
+
7
+ const MAX_CONFIG_BYTES = 1024 * 1024;
8
+ const MAX_BACKUPS_PER_HARNESS = 20;
9
+ class ModelConfigError extends Error {
10
+ constructor(code, message) {
11
+ super(message);
12
+ this.code = code;
13
+ this.name = "ModelConfigError";
14
+ }
15
+ }
16
+ function sha256(text) {
17
+ return node_crypto.createHash("sha256").update(text).digest("hex");
18
+ }
19
+ async function readConfigFile(path) {
20
+ let stat;
21
+ try {
22
+ stat = await node_fs.promises.stat(path);
23
+ } catch (error) {
24
+ if (error.code === "ENOENT") {
25
+ return { path, exists: false, content: "", hash: sha256(""), mode: null };
26
+ }
27
+ throw new ModelConfigError("read-failed", `Cannot read ${path}: ${error.message}`);
28
+ }
29
+ if (!stat.isFile()) throw new ModelConfigError("not-a-file", `${path} is not a regular file`);
30
+ if (stat.size > MAX_CONFIG_BYTES) throw new ModelConfigError("file-too-large", `${path} is larger than ${MAX_CONFIG_BYTES} bytes`);
31
+ const content = await node_fs.promises.readFile(path, "utf8");
32
+ return { path, exists: true, content, hash: sha256(content), mode: stat.mode & 511 };
33
+ }
34
+ async function resolveWriteTarget(path$1) {
35
+ try {
36
+ return await node_fs.promises.realpath(path$1);
37
+ } catch (error) {
38
+ if (error.code === "ENOENT") {
39
+ try {
40
+ const link = await node_fs.promises.readlink(path$1);
41
+ return link.startsWith("/") ? link : path.join(path.dirname(path$1), link);
42
+ } catch {
43
+ return path$1;
44
+ }
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ async function atomicWriteFile(path$1, content, mode) {
50
+ const target = await resolveWriteTarget(path$1);
51
+ const dir = path.dirname(target);
52
+ await node_fs.promises.mkdir(dir, { recursive: true, mode: 448 });
53
+ const tmp = path.join(dir, `.${path.basename(target)}.vh-tmp-${process.pid}-${node_crypto.randomBytes(4).toString("hex")}`);
54
+ const handle = await node_fs.promises.open(tmp, node_fs.constants.O_WRONLY | node_fs.constants.O_CREAT | node_fs.constants.O_EXCL, mode ?? 384);
55
+ try {
56
+ await handle.writeFile(content, "utf8");
57
+ await handle.sync();
58
+ } catch (error) {
59
+ await handle.close().catch(() => {
60
+ });
61
+ await node_fs.promises.unlink(tmp).catch(() => {
62
+ });
63
+ throw error;
64
+ }
65
+ await handle.close();
66
+ try {
67
+ if (mode !== null) await node_fs.promises.chmod(tmp, mode);
68
+ await node_fs.promises.rename(tmp, target);
69
+ } catch (error) {
70
+ await node_fs.promises.unlink(tmp).catch(() => {
71
+ });
72
+ throw error;
73
+ }
74
+ try {
75
+ const dirHandle = await node_fs.promises.open(dir, "r");
76
+ await dirHandle.sync().catch(() => {
77
+ });
78
+ await dirHandle.close();
79
+ } catch {
80
+ }
81
+ }
82
+ const BACKUP_ID = /^\d{13}-[0-9a-f]{8}$/;
83
+ const HARNESS_DIR = /^[a-z][a-z0-9-]{0,31}$/;
84
+ class BackupStore {
85
+ constructor(root) {
86
+ this.root = root;
87
+ }
88
+ harnessDir(harness) {
89
+ if (!HARNESS_DIR.test(harness)) throw new ModelConfigError("invalid-harness", "Invalid harness");
90
+ return path.join(this.root, harness);
91
+ }
92
+ async create(harness, reason, files, now = Date.now()) {
93
+ const id = `${now}-${node_crypto.randomBytes(4).toString("hex")}`;
94
+ const dir = path.join(this.harnessDir(harness), id);
95
+ await node_fs.promises.mkdir(dir, { recursive: true, mode: 448 });
96
+ const manifest = { id, createdAt: now, reason, files: files.map((f, i) => ({ path: f.path, blob: f.content === null ? null : `f${i}`, mode: f.mode })) };
97
+ for (const [i, file] of files.entries()) {
98
+ if (file.content !== null) await node_fs.promises.writeFile(path.join(dir, `f${i}`), file.content, { encoding: "utf8", mode: 384 });
99
+ }
100
+ await node_fs.promises.writeFile(path.join(dir, "manifest.json"), JSON.stringify(manifest, null, 2), { encoding: "utf8", mode: 384 });
101
+ await this.prune(harness);
102
+ return { id, createdAt: now, reason, files: files.map((f) => f.path) };
103
+ }
104
+ async list(harness) {
105
+ let names;
106
+ try {
107
+ names = await node_fs.promises.readdir(this.harnessDir(harness));
108
+ } catch {
109
+ return [];
110
+ }
111
+ const entries = [];
112
+ for (const name of names.filter((n) => BACKUP_ID.test(n))) {
113
+ try {
114
+ const manifest = JSON.parse(await node_fs.promises.readFile(path.join(this.harnessDir(harness), name, "manifest.json"), "utf8"));
115
+ entries.push({ id: name, createdAt: Number(manifest.createdAt) || 0, reason: String(manifest.reason ?? ""), files: (manifest.files ?? []).map((f) => f.path) });
116
+ } catch {
117
+ }
118
+ }
119
+ return entries.sort((a, b) => b.createdAt - a.createdAt);
120
+ }
121
+ async read(harness, id) {
122
+ if (!BACKUP_ID.test(id)) throw new ModelConfigError("invalid-backup", "Invalid backup id");
123
+ const dir = path.join(this.harnessDir(harness), id);
124
+ let manifest;
125
+ try {
126
+ manifest = JSON.parse(await node_fs.promises.readFile(path.join(dir, "manifest.json"), "utf8"));
127
+ } catch {
128
+ throw new ModelConfigError("backup-not-found", "Backup not found");
129
+ }
130
+ const out = [];
131
+ for (const file of manifest.files) {
132
+ out.push({
133
+ path: file.path,
134
+ content: file.blob === null ? null : await node_fs.promises.readFile(path.join(dir, file.blob), "utf8"),
135
+ mode: typeof file.mode === "number" ? file.mode : null
136
+ });
137
+ }
138
+ return out;
139
+ }
140
+ async prune(harness) {
141
+ const entries = await this.list(harness);
142
+ for (const stale of entries.slice(MAX_BACKUPS_PER_HARNESS)) {
143
+ await node_fs.promises.rm(path.join(this.harnessDir(harness), stale.id), { recursive: true, force: true });
144
+ }
145
+ }
146
+ }
147
+
148
+ exports.BackupStore = BackupStore;
149
+ exports.ModelConfigError = ModelConfigError;
150
+ exports.atomicWriteFile = atomicWriteFile;
151
+ exports.readConfigFile = readConfigFile;
152
+ exports.sha256 = sha256;
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
3
  var node_fs = require('node:fs');
4
- var spawnHappyCLI = require('./spawnHappyCLI-DnUZv0X2.cjs');
4
+ var spawnHappyCLI = require('./spawnHappyCLI-DnKmIsEt.cjs');
5
5
  var axios = require('axios');
6
6
  var tweetnacl = require('tweetnacl');
7
7
  var z = require('zod');
8
8
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
9
- var configuration = require('./configuration-CYO-kPOS.cjs');
10
- var localHappyAgentAuth = require('./localHappyAgentAuth-DZHQnIW9.cjs');
9
+ var configuration = require('./configuration-C8JgseHy.cjs');
10
+ var localHappyAgentAuth = require('./localHappyAgentAuth-DZ2kb9uq.cjs');
11
11
  require('cross-spawn');
12
12
  require('node:path');
13
13
  require('./projectPath-C3ioB4Bu.cjs');
14
14
  require('path');
15
15
  require('url');
16
- require('./logger-CphW5nUE.cjs');
16
+ require('./logger-DgBwUSgS.cjs');
17
17
  require('chalk');
18
18
  require('node:util');
19
19
  require('node:crypto');
20
20
  require('node:os');
21
- require('./package-KhLqBDX9.cjs');
21
+ require('./package-NoD8QOOM.cjs');
22
22
  require('node:fs/promises');
23
23
 
24
24
  const ResumableMetadataSchema = z.z.object({
@@ -1,22 +1,22 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { s as spawnHappyCLI } from './spawnHappyCLI-BjFZc_7V.mjs';
2
+ import { s as spawnHappyCLI } from './spawnHappyCLI-Dq3LLXLb.mjs';
3
3
  import axios, { AxiosError } from 'axios';
4
4
  import tweetnacl from 'tweetnacl';
5
5
  import { z } from 'zod';
6
6
  import { d as decodeBase64, a as decryptWithDataKey, b as decryptLegacy } from './authRelay-DhQhkBvX.mjs';
7
- import { c as configuration } from './configuration-PxzEJumr.mjs';
8
- import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-Dn1jYDpt.mjs';
7
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
8
+ import { g as getLocalHappyAgentCredentialPath, r as readLocalHappyAgentCredentials } from './localHappyAgentAuth-IKmeRpuQ.mjs';
9
9
  import 'cross-spawn';
10
10
  import 'node:path';
11
11
  import './projectPath-BTBIMB57.mjs';
12
12
  import 'path';
13
13
  import 'url';
14
- import './logger-BUngm5Xg.mjs';
14
+ import './logger-LFr8iPgl.mjs';
15
15
  import 'chalk';
16
16
  import 'node:util';
17
17
  import 'node:crypto';
18
18
  import 'node:os';
19
- import './package-7Ld1YMhh.mjs';
19
+ import './package-DYGwlmXl.mjs';
20
20
  import 'node:fs/promises';
21
21
 
22
22
  const ResumableMetadataSchema = z.object({
@@ -1,91 +1,93 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-DfRDtMcG.cjs');
4
- var logger = require('./logger-CphW5nUE.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-CASKOnOj.cjs');
6
- var index = require('./index-Dv0Q48P3.cjs');
3
+ var AcpBackend = require('./AcpBackend-CgHb_ya5.cjs');
4
+ var logger = require('./logger-DgBwUSgS.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-CacC2EVn.cjs');
6
+ var index = require('./index-Df2eHm3O.cjs');
7
+ var deterministicJson = require('./deterministicJson-BS7D7URE.cjs');
7
8
  var agentAttachments = require('./agentAttachments-Dbw8iMCZ.cjs');
8
- var configuration = require('./configuration-CYO-kPOS.cjs');
9
- var attachmentContent = require('./attachmentContent-CEm13_gF.cjs');
10
- var piRuntime = require('./piRuntime-CT5xv_3h.cjs');
9
+ var configuration = require('./configuration-C8JgseHy.cjs');
10
+ var attachmentContent = require('./attachmentContent-mIhbtRKl.cjs');
11
+ var piRuntime = require('./piRuntime-o5L8uX-W.cjs');
11
12
  var node_crypto = require('node:crypto');
12
13
  var path = require('node:path');
13
- var api = require('./api-DM7b1OKj.cjs');
14
- var deterministicJson = require('./deterministicJson-xqA6DaOm.cjs');
15
- var client = require('./client-DJplzPjD.cjs');
16
- var registerKillSessionHandler = require('./registerKillSessionHandler-CIsvBrVe.cjs');
17
- var persistence = require('./persistence-9BMYspxG.cjs');
18
- var machineMetadata = require('./machineMetadata-BQm9YTcI.cjs');
19
- var createSessionMetadata = require('./createSessionMetadata-xz767pcG.cjs');
20
- var setupOfflineReconnection = require('./setupOfflineReconnection-DvvVX3TB.cjs');
21
- var startupSessionCreate = require('./startupSessionCreate-kdr3m1uX.cjs');
22
- var controlClient = require('./controlClient-Bqv5v5OM.cjs');
14
+ var api = require('./api-COHFAkb_.cjs');
15
+ var client = require('./client-DWs6k041.cjs');
16
+ var registerKillSessionHandler = require('./registerKillSessionHandler-7fOm6ooh.cjs');
17
+ var persistence = require('./persistence-BY-D00wT.cjs');
18
+ var machineMetadata = require('./machineMetadata-DB03ez4K.cjs');
19
+ var createSessionMetadata = require('./createSessionMetadata-DNIbKLHg.cjs');
20
+ var setupOfflineReconnection = require('./setupOfflineReconnection-CjuCiKY3.cjs');
21
+ var startupSessionCreate = require('./startupSessionCreate-CKEbq0tL.cjs');
22
+ var controlClient = require('./controlClient-D68Zj7Q-.cjs');
23
23
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
24
- var sessionLock = require('./sessionLock-DRZUcKHT.cjs');
25
- var acpSessionResume = require('./acpSessionResume-CR5pmgVo.cjs');
26
- var streamRelay = require('./streamRelay-Dy6amlzx.cjs');
24
+ var sessionLock = require('./sessionLock-CdIRJlHH.cjs');
25
+ var acpSessionResume = require('./acpSessionResume-BaVMD80f.cjs');
26
+ var streamRelay = require('./streamRelay-Gy8Xfnon.cjs');
27
27
  var projectPath = require('./projectPath-C3ioB4Bu.cjs');
28
- var BasePermissionHandler = require('./BasePermissionHandler-BlM_tfej.cjs');
29
- var titleGenerator = require('./titleGenerator-Cgp5ihFb.cjs');
28
+ var BasePermissionHandler = require('./BasePermissionHandler-DCP8ZEB4.cjs');
29
+ var titleGenerator = require('./titleGenerator-D09XyYYG.cjs');
30
30
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
31
31
  require('node:child_process');
32
32
  require('@agentclientprotocol/sdk');
33
- require('./time-Cjv0zxQO.cjs');
33
+ require('./time-nqa9shu8.cjs');
34
34
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
35
35
  require('./processTree-CMHWlVse.cjs');
36
- require('./package-KhLqBDX9.cjs');
36
+ require('./package-NoD8QOOM.cjs');
37
37
  require('chalk');
38
38
  require('node:util');
39
39
  require('node:fs');
40
40
  require('@paralleldrive/cuid2');
41
41
  require('zod');
42
+ require('./prompt-Bof2aQkI.cjs');
43
+ require('./reportProgressTool-th4trcET.cjs');
44
+ require('./client-D_U2VjO3.cjs');
45
+ require('./precheckCompat-CWOi5c9L.cjs');
46
+ require('./agentGuidance-BtBx2xxE.cjs');
47
+ require('./trimIdent-4gvk9Wk6.cjs');
42
48
  require('node:os');
49
+ require('./pi-DlsrPCTa.cjs');
50
+ require('./fileStore-7qhnbs6N.cjs');
43
51
  require('node:fs/promises');
44
- require('./pushNotifications-DI92havG.cjs');
52
+ require('./client-CUO3ItoB.cjs');
53
+ require('./context-D1lgQTJC.cjs');
54
+ require('./sessionOps-DVA-00nR.cjs');
45
55
  require('axios');
46
- require('./resources-CvIlkzpP.cjs');
47
- require('./lidState-DWGnm2H4.cjs');
48
- require('os');
49
- require('child_process');
50
- require('node:events');
51
56
  require('socket.io-client');
52
- require('./limits-C-a7gr04.cjs');
53
- require('./registerCommonHandlers-C7a_dUWs.cjs');
54
- require('util');
55
- require('fs/promises');
56
- require('crypto');
57
- require('path');
58
- require('cross-spawn');
59
- require('./sync-Bn-idAoy.cjs');
60
57
  require('./backgroundTaskActivity-CBvUdj39.cjs');
61
- require('./prompt-lgF9IE82.cjs');
62
- require('./reportProgressTool-14AXr959.cjs');
63
- require('./client-BWjaHKtj.cjs');
64
- require('./precheckCompat-CWOi5c9L.cjs');
65
- require('./agentGuidance-BtBx2xxE.cjs');
66
- require('./trimIdent-4gvk9Wk6.cjs');
67
- require('./client-D_loZ9IK.cjs');
68
- require('./context-6TP-iz_c.cjs');
69
- require('./sessionOps-BrGiU9-s.cjs');
70
- require('./tools-BL7Byl_x.cjs');
71
- require('./peerTools-DQNlrcqM.cjs');
58
+ require('./resources-BPyN59Iv.cjs');
59
+ require('./tools-DiCXnAC5.cjs');
60
+ require('./peerTools-CP-x-Peu.cjs');
72
61
  require('./ids-B6ZC0HGt.cjs');
73
- require('./remoteSessionClient-D843fkzL.cjs');
62
+ require('./remoteSessionClient-CFCn42bs.cjs');
74
63
  require('@modelcontextprotocol/sdk/server/mcp.js');
75
64
  require('node:http');
76
65
  require('@modelcontextprotocol/sdk/server/streamableHttp.js');
77
- require('./downloadTarget-CEb9che-.cjs');
66
+ require('./limits-C-a7gr04.cjs');
67
+ require('./downloadTarget-LyOiucn_.cjs');
78
68
  require('./terminals-B_bfC9c2.cjs');
79
69
  require('./terminalTitleSuggest-DhvRFX3H.cjs');
80
70
  require('./tmuxSocket-D-Xt6Vn-.cjs');
81
- require('./bootstrap-DoA7okld.cjs');
71
+ require('./bootstrap-CYtOtbi7.cjs');
82
72
  require('./webPanels-FCgFKvVe.cjs');
73
+ require('./pushNotifications-BXoOSq_G.cjs');
83
74
  require('./previewPath-B0rBdhy1.cjs');
75
+ require('crypto');
76
+ require('./lidState-x8cJ8J_9.cjs');
77
+ require('os');
78
+ require('child_process');
79
+ require('node:events');
80
+ require('./registerCommonHandlers-CRjBoJLK.cjs');
81
+ require('util');
82
+ require('fs/promises');
83
+ require('path');
84
+ require('cross-spawn');
85
+ require('./sync-1hQ5KHpL.cjs');
84
86
  require('tweetnacl');
85
87
  require('./types-CRS-srZK.cjs');
86
88
  require('./detectCLI-BuYR_Qxe.cjs');
87
89
  require('fs');
88
- require('./localHappyAgentAuth-DZHQnIW9.cjs');
90
+ require('./localHappyAgentAuth-DZ2kb9uq.cjs');
89
91
  require('./processTreeSnapshot-mDbnuojn.cjs');
90
92
  require('url');
91
93
  require('node:module');
@@ -105,6 +107,18 @@ function createAcpBackend(options) {
105
107
  return new AcpBackend.AcpBackend(backendOptions);
106
108
  }
107
109
 
110
+ const SLASH_COMMAND = /^\/[A-Za-z][A-Za-z0-9_.:-]*(?:\s|$)/;
111
+ function isAgentSlashCommand(message) {
112
+ return typeof message === "string" && SLASH_COMMAND.test(message.trimStart());
113
+ }
114
+ async function buildAcpPrompt(message, opts) {
115
+ if (isAgentSlashCommand(message)) return { prompt: message, slashCommand: true };
116
+ const projected = await opts.decorate(message);
117
+ return { prompt: opts.todoNoteSent ? projected : `${projected}
118
+
119
+ ${opts.todoNote}`, slashCommand: false };
120
+ }
121
+
108
122
  const MAX_DETAIL_CHARS = 400;
109
123
  function detailOf(error) {
110
124
  if (error instanceof Error) return error.message;
@@ -911,8 +925,10 @@ async function runAcp(opts) {
911
925
  assistant: isAssistantVariant,
912
926
  ...piSteer ? { piSteer } : {},
913
927
  push: { sendAttention: (input) => api$1.push().sendAttention(input) },
914
- ...opts.agentName === "pi" ? { onContextUsage: (contextUsage) => {
915
- session.updateAgentState((state2) => ({ ...state2, contextUsage }));
928
+ // B-727: pi's report is resolved against models.json (pi's 128k default ≠ a configured window).
929
+ ...opts.agentName === "pi" ? { onContextUsage: (report) => {
930
+ const modelsJson = deterministicJson.readPiModelsJson();
931
+ session.updateAgentState((state2) => ({ ...state2, contextUsage: deterministicJson.resolvePiContextUsage(report, modelsJson, state2.contextUsage, Date.now()) }));
916
932
  } } : {}
917
933
  });
918
934
  if (opts.agentName === "pi") session.updateAgentState((state2) => ({ ...state2, contextUsage: null }));
@@ -1455,10 +1471,11 @@ async function runAcp(opts) {
1455
1471
  if (typeof batch.mode.effort === "string") {
1456
1472
  await switchEffortIfRequested(batch.mode.effort, modelChanged);
1457
1473
  }
1458
- const projected = await projectInjector.decorate(batch.message);
1459
- const prompt = todoDiscoverySent ? projected : `${projected}
1460
-
1461
- ${index.BUILTIN_TODO_DISCOVERY}`;
1474
+ const { prompt, slashCommand } = await buildAcpPrompt(batch.message, {
1475
+ todoNoteSent: todoDiscoverySent,
1476
+ todoNote: index.BUILTIN_TODO_DISCOVERY,
1477
+ decorate: (m) => projectInjector.decorate(m)
1478
+ });
1462
1479
  const attachments = batch.attachments ?? [];
1463
1480
  const staged = attachments.length ? await attachmentContent.stageClaudeAttachments(attachments, {
1464
1481
  happyHomeDir: configuration.configuration.happyHomeDir,
@@ -1471,7 +1488,7 @@ ${index.BUILTIN_TODO_DISCOVERY}`;
1471
1488
  } finally {
1472
1489
  promptInFlight = false;
1473
1490
  }
1474
- todoDiscoverySent = true;
1491
+ if (!slashCommand) todoDiscoverySent = true;
1475
1492
  const stopReason = outcome && typeof outcome === "object" ? outcome.stopReason : void 0;
1476
1493
  if (stopReason === "error") {
1477
1494
  throw new Error("the turn ended with an error reported by the agent");
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _package = require('./package-KhLqBDX9.cjs');
3
+ var _package = require('./package-NoD8QOOM.cjs');
4
4
  var module$1 = require('node:module');
5
5
  var node_fs = require('node:fs');
6
6
  var promises = require('node:fs/promises');
@@ -59,10 +59,10 @@ async function pruneStaleCompileCaches(happyHomeDir, cliVersion) {
59
59
  async function run(args) {
60
60
  enableCompileCacheIfPossible(_package.packageJson.version);
61
61
  if (isStandaloneVersionRequest(args) || isSelfCheckRequest(args)) {
62
- const { selfCheckMain } = await Promise.resolve().then(function () { return require('./selfCheck-BTGBVthv.cjs'); });
62
+ const { selfCheckMain } = await Promise.resolve().then(function () { return require('./selfCheck-DIr7Gc0i.cjs'); });
63
63
  process.exit(await selfCheckMain({ verbose: isSelfCheckRequest(args) }));
64
64
  }
65
- const { main } = await Promise.resolve().then(function () { return require('./main-B2UV51nK.cjs'); });
65
+ const { main } = await Promise.resolve().then(function () { return require('./main-YQ-Vkakw.cjs'); });
66
66
  await main();
67
67
  }
68
68
  void run(process.argv.slice(2));
@@ -2,14 +2,14 @@
2
2
 
3
3
  var node_fs = require('node:fs');
4
4
  var os = require('node:os');
5
- var logger = require('./logger-CphW5nUE.cjs');
6
- var persistence = require('./persistence-9BMYspxG.cjs');
5
+ var logger = require('./logger-DgBwUSgS.cjs');
6
+ var persistence = require('./persistence-BY-D00wT.cjs');
7
7
  var loginShellEnv = require('./loginShellEnv-BkuYtExZ.cjs');
8
8
  require('chalk');
9
9
  require('node:util');
10
- require('./configuration-CYO-kPOS.cjs');
10
+ require('./configuration-C8JgseHy.cjs');
11
11
  require('node:path');
12
- require('./package-KhLqBDX9.cjs');
12
+ require('./package-NoD8QOOM.cjs');
13
13
  require('node:fs/promises');
14
14
  require('zod');
15
15
  require('./authRelay-Dy1qU9td.cjs');
@@ -1,14 +1,14 @@
1
1
  import { statSync, readdirSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
- import { l as logger } from './logger-BUngm5Xg.mjs';
4
- import { r as readSettings } from './persistence-BFUOHW5h.mjs';
3
+ import { l as logger } from './logger-LFr8iPgl.mjs';
4
+ import { r as readSettings } from './persistence-D2Djrf7t.mjs';
5
5
  import { d as describeAgentHome, C as CLAUDE_CONFIG_DIR_ENV, a as CODEX_HOME_ENV, f as findClaudeConversation, b as agentHomeCandidates, c as findCodexThread, r as resolveAgentHomes, A as AGENT_HOME_ENV_NAMES, g as agentHomeEnv, p as probeLoginShellEnv } from './loginShellEnv-Dw8M7tkI.mjs';
6
6
  export { h as claudeConversationPath, i as claudeProjectDirName, j as codexRolloutFileMatches, e as expandHomePath } from './loginShellEnv-Dw8M7tkI.mjs';
7
7
  import 'chalk';
8
8
  import 'node:util';
9
- import './configuration-PxzEJumr.mjs';
9
+ import './configuration-BPrfb17M.mjs';
10
10
  import 'node:path';
11
- import './package-7Ld1YMhh.mjs';
11
+ import './package-DYGwlmXl.mjs';
12
12
  import 'node:fs/promises';
13
13
  import 'zod';
14
14
  import './authRelay-DhQhkBvX.mjs';