very-happy-cli 0.2.179 → 0.2.180

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 (204) hide show
  1. package/dist/{AcpBackend-CHp3y7cb.mjs → AcpBackend-B8Zi30Zh.mjs} +3 -3
  2. package/dist/{AcpBackend-DFipFF7-.cjs → AcpBackend-DfRDtMcG.cjs} +3 -3
  3. package/dist/{AcpSessionManager-0zpvRJXc.cjs → AcpSessionManager-CASKOnOj.cjs} +1 -1
  4. package/dist/{AcpSessionManager-d2-rKWWa.mjs → AcpSessionManager-i8Rab0xT.mjs} +1 -1
  5. package/dist/{BasePermissionHandler-DdZBYIR4.mjs → BasePermissionHandler-26fKbRCm.mjs} +1 -1
  6. package/dist/{BasePermissionHandler-CH3zuEkA.cjs → BasePermissionHandler-BlM_tfej.cjs} +1 -1
  7. package/dist/{acpSessionResume-DTGmAPLt.mjs → acpSessionResume-B9l54P-X.mjs} +1 -1
  8. package/dist/{acpSessionResume-oiCBnAVA.cjs → acpSessionResume-CR5pmgVo.cjs} +1 -1
  9. package/dist/{agentHome-BWcz8mz0.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
  10. package/dist/{agentHome-CghLvL_1.mjs → agentHome-CmGy0NWv.mjs} +4 -4
  11. package/dist/{api-Cmjfr8Z7.cjs → api-DM7b1OKj.cjs} +20 -12
  12. package/dist/{api-CzwFpJQc.mjs → api-Hov8p7CA.mjs} +21 -13
  13. package/dist/{apiMachine-DJkTEiqy.mjs → apiMachine-CwGEhQDT.mjs} +33 -14
  14. package/dist/{apiMachine-G6OogT08.cjs → apiMachine-DkGRj-Ai.cjs} +35 -16
  15. package/dist/{attachmentContent-Bo0UAsSu.cjs → attachmentContent-CEm13_gF.cjs} +2 -2
  16. package/dist/{attachmentContent-B2os4HbA.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
  17. package/dist/{auth-BS6PaOOG.mjs → auth-BG1DY0gj.mjs} +5 -5
  18. package/dist/{auth-D6bBUwZa.cjs → auth-CBXnm-Mj.cjs} +5 -5
  19. package/dist/{auth-HEhRaNgL.cjs → auth-Dawj7pP5.cjs} +8 -8
  20. package/dist/{auth-DMX0xPNK.mjs → auth-rggxMpEE.mjs} +8 -8
  21. package/dist/{auto-Cl1SEDcD.mjs → auto-CXXLXGeL.mjs} +17 -17
  22. package/dist/{auto-C6I55iOh.cjs → auto-CbYOfoPS.cjs} +17 -17
  23. package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
  24. package/dist/{bootstrap-exVucYav.cjs → bootstrap-DoA7okld.cjs} +2 -2
  25. package/dist/{bootstrap-iuyufnp3.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
  26. package/dist/{browser-CSYum7xH.mjs → browser-DUNetFT4.mjs} +1 -1
  27. package/dist/{browser-BohJK12g.cjs → browser-DZ6qRtfH.cjs} +1 -1
  28. package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
  29. package/dist/{claudeLocal-re4yjSTx.cjs → claudeLocal--DNyMOSv.cjs} +7 -7
  30. package/dist/{claudeLocal-Dq_R3Ax_.mjs → claudeLocal-OHWQigCl.mjs} +5 -5
  31. package/dist/{claudeLocalLauncher-CN67lN7-.mjs → claudeLocalLauncher-BStvfa7M.mjs} +10 -10
  32. package/dist/{claudeLocalLauncher-B4hJHpCA.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +12 -12
  33. package/dist/{claudeSessionFork-DiSMYerV.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
  34. package/dist/{claudeSessionFork-BihfD0Ik.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
  35. package/dist/{client-CuVdN6PP.cjs → client-BWjaHKtj.cjs} +2 -2
  36. package/dist/{client-BhoEBnuN.mjs → client-Ca5Pcgy_.mjs} +2 -2
  37. package/dist/{client-wo9nbxuf.mjs → client-CnB7kRCT.mjs} +2 -2
  38. package/dist/{client-DuTDwWSQ.mjs → client-D4uPb1uu.mjs} +3 -3
  39. package/dist/{client-ZjOsn6nZ.cjs → client-DJplzPjD.cjs} +2 -2
  40. package/dist/{client-BKcK1Bi-.cjs → client-D_loZ9IK.cjs} +3 -3
  41. package/dist/codex/happyMcpStdioBridge.cjs +16 -16
  42. package/dist/codex/happyMcpStdioBridge.mjs +17 -17
  43. package/dist/{codexAppServerClient-BK3zra_1.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
  44. package/dist/{codexAppServerClient-Dt5zxrun.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
  45. package/dist/{codexCommand-CAZ1SLjg.cjs → codexCommand-BNoD1t1C.cjs} +80 -74
  46. package/dist/{codexCommand-B6pY7CMh.mjs → codexCommand-B_xUH79E.mjs} +54 -48
  47. package/dist/{codexTermination-DmGbHxcD.cjs → codexTermination-BmBbizFK.cjs} +7 -2
  48. package/dist/{codexTermination-Cd1Eon_4.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
  49. package/dist/{config-B0uK6K7n.cjs → config-CtwEUxUP.cjs} +26 -26
  50. package/dist/{config-2oMG_fEI.mjs → config-DSu0Blos.mjs} +3 -3
  51. package/dist/{configuration-CMHZnp6G.cjs → configuration-CYO-kPOS.cjs} +1 -1
  52. package/dist/{configuration-WMi4idBB.mjs → configuration-PxzEJumr.mjs} +1 -1
  53. package/dist/{connect-BLVHhHzA.mjs → connect-BQrg3TB6.mjs} +14 -14
  54. package/dist/{connect-uaglGrde.cjs → connect-Dq7wndzR.cjs} +27 -27
  55. package/dist/{context-DXzU5bFM.cjs → context-6TP-iz_c.cjs} +1 -1
  56. package/dist/{context-DploEcoN.mjs → context-CJGRRGWW.mjs} +1 -1
  57. package/dist/{controlClient-C-5qCt8W.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
  58. package/dist/{controlClient-BWUJrj3t.mjs → controlClient-DoeYovwP.mjs} +4 -4
  59. package/dist/{createSessionMetadata-3uXrJgOW.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
  60. package/dist/{createSessionMetadata-BkIzHALd.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
  61. package/dist/{defaultPermissionMode-pS3vmiSg.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
  62. package/dist/{defaultPermissionMode-BzxLh20a.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
  63. package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
  64. package/dist/{deterministicJson-D_whDMFd.mjs → deterministicJson-CTEJDqtS.mjs} +12 -12
  65. package/dist/{deterministicJson-B8z2GPi9.cjs → deterministicJson-xqA6DaOm.cjs} +14 -14
  66. package/dist/{doctor-Br1Kcy2J.cjs → doctor-BrgSlfXn.cjs} +9 -9
  67. package/dist/{doctor-CmtSsR2-.mjs → doctor-IctjVh9T.mjs} +8 -8
  68. package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
  69. package/dist/{downloadTarget-BQJK_6oH.cjs → downloadTarget-CEb9che-.cjs} +6 -6
  70. package/dist/{downloadTarget-BoNwTIH_.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
  71. package/dist/{ensureDaemonRunning-BRUmsq6J.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
  72. package/dist/{ensureDaemonRunning-Czo9IHJQ.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
  73. package/dist/{handleResumeCommand-tKD_Hpxc.cjs → handleResumeCommand-BvWVuRwH.cjs} +7 -7
  74. package/dist/{handleResumeCommand-C8thKjqf.mjs → handleResumeCommand-DpaZvm2c.mjs} +6 -6
  75. package/dist/{index-DMqDMT1Q.cjs → index-B2p2Mut7.cjs} +42 -41
  76. package/dist/{index-BTxHphpV.mjs → index-BUNnpGFF.mjs} +42 -41
  77. package/dist/{index-CdQI0C9p.mjs → index-Bsvbgh9e.mjs} +4 -4
  78. package/dist/{index-B0UjHlAe.cjs → index-C64Ufj4D.cjs} +4 -4
  79. package/dist/{index-DPOa4NhL.mjs → index-C6Vn5Eac.mjs} +2 -0
  80. package/dist/{index-BiyC7cZ3.mjs → index-CMf5VbzG.mjs} +4 -4
  81. package/dist/{index-CUuc6iCn.cjs → index-DmTlDRSL.cjs} +4 -4
  82. package/dist/{index-C6O2vVjm.cjs → index-Dv0Q48P3.cjs} +2 -0
  83. package/dist/{index-D09T1m8Y.cjs → index-F2UejqYs.cjs} +3 -3
  84. package/dist/{index-D3bidoG8.mjs → index-wCbtF4BK.mjs} +3 -3
  85. package/dist/index.cjs +2 -2
  86. package/dist/index.mjs +2 -2
  87. package/dist/{install-CYRZxS87.cjs → install-C0ANcEAW.cjs} +7 -7
  88. package/dist/{install-hnve_9vq.mjs → install-CdzSV7qO.mjs} +3 -3
  89. package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
  90. package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
  91. package/dist/lib.cjs +13 -13
  92. package/dist/lib.d.cts +177 -1
  93. package/dist/lib.d.mts +177 -1
  94. package/dist/lib.mjs +13 -13
  95. package/dist/{lidState-Dv2wwFTj.cjs → lidState-DWGnm2H4.cjs} +1 -1
  96. package/dist/{lidState-Bb8fgXg3.mjs → lidState-bBrmaQd2.mjs} +1 -1
  97. package/dist/{localHappyAgentAuth-DjYvkXvV.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
  98. package/dist/{localHappyAgentAuth-NEU7fax7.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
  99. package/dist/{logger-BtVhHnD8.mjs → logger-BUngm5Xg.mjs} +2 -2
  100. package/dist/{logger-C1GWx3gi.cjs → logger-CphW5nUE.cjs} +2 -2
  101. package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
  102. package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
  103. package/dist/{main-CWhSsbtU.cjs → main-B2UV51nK.cjs} +99 -132
  104. package/dist/{main-B2LWV8DI.mjs → main-DGkdYfEq.mjs} +93 -126
  105. package/dist/{mcp-CARUsXHV.cjs → mcp-BFvAEIRz.cjs} +15 -15
  106. package/dist/{mcp-ext92q3Y.mjs → mcp-CbTtbs0f.mjs} +15 -15
  107. package/dist/{mirrorProtocol-BwYibqry.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
  108. package/dist/{mirrorProtocol-DEy2g1CB.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
  109. package/dist/{package-BPPebGQF.mjs → package-7Ld1YMhh.mjs} +8 -7
  110. package/dist/{package-SgqTYsjn.cjs → package-KhLqBDX9.cjs} +8 -7
  111. package/dist/{panels-BZ0_Tt7B.mjs → panels-C7IVqpJk.mjs} +5 -5
  112. package/dist/{panels-D1c7q2dD.cjs → panels-Njf6GelF.cjs} +5 -5
  113. package/dist/{peerTools-CWKzcQ7u.mjs → peerTools-BOlDRyhi.mjs} +5 -5
  114. package/dist/{peerTools-DRQETXaz.cjs → peerTools-DQNlrcqM.cjs} +5 -5
  115. package/dist/{persistence-BegE7NPa.cjs → persistence-9BMYspxG.cjs} +2 -2
  116. package/dist/{persistence-Cr-wutZ4.mjs → persistence-BFUOHW5h.mjs} +2 -2
  117. package/dist/{piRunnerArgs-Cs-378Vz.cjs → piRunnerArgs-DGaq6VYM.cjs} +1 -1
  118. package/dist/{piRunnerArgs-DwvM_yWA.mjs → piRunnerArgs-H2pgpA5z.mjs} +1 -1
  119. package/dist/{piRuntime-BG-1td_n.cjs → piRuntime-CT5xv_3h.cjs} +1 -1
  120. package/dist/{piRuntime-Bue5mnlc.mjs → piRuntime-CdN0JAsa.mjs} +1 -1
  121. package/dist/{piTerminal-G4z-xVyy.cjs → piTerminal-0FBtXTHK.cjs} +17 -17
  122. package/dist/{piTerminal-B5x9X5yV.mjs → piTerminal-C4m9YXAV.mjs} +17 -17
  123. package/dist/projectPath-C3ioB4Bu.cjs +13 -0
  124. package/dist/{pushNotifications-BdFjDjQe.mjs → pushNotifications-DCiBEVeC.mjs} +7 -3
  125. package/dist/{pushNotifications-DaLQUyi0.cjs → pushNotifications-DI92havG.cjs} +7 -3
  126. package/dist/{query-Ctfg-5gy.cjs → query-BETKBrnz.cjs} +1 -1
  127. package/dist/{query-DYP_W1wp.mjs → query-ywZbQUzR.mjs} +1 -1
  128. package/dist/{rateLimitWindows-CuEqk_0g.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
  129. package/dist/{rateLimitWindows-Dj_8voBK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
  130. package/dist/{registerCommonHandlers-Cj084Sg7.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
  131. package/dist/{registerCommonHandlers-BAlP7SGc.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
  132. package/dist/{registerKillSessionHandler-qMju0ZfF.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
  133. package/dist/{registerKillSessionHandler-PD0jWtQo.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
  134. package/dist/{remoteSessionClient-B7i7MkYV.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
  135. package/dist/{remoteSessionClient-Bn2qu5C5.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
  136. package/dist/{reportProgressTool-CM1JFAHg.cjs → reportProgressTool-14AXr959.cjs} +3 -3
  137. package/dist/{reportProgressTool-gHItlSzz.mjs → reportProgressTool-ZOCNjWHr.mjs} +3 -3
  138. package/dist/{run-CNXwIe0A.cjs → run-CAOCYYfT.cjs} +2650 -90
  139. package/dist/{run-BM4TxiyN.mjs → run-Dajw2E5j.mjs} +2644 -84
  140. package/dist/{runClaude-C_3I8hvR.mjs → runClaude-C6oxWYbp.mjs} +34 -28
  141. package/dist/{runClaude-CWhj2V4Q.cjs → runClaude-CRRKt-tm.cjs} +35 -29
  142. package/dist/{runClaudeDeps-B81cOKnH.cjs → runClaudeDeps-B1ysqTvx.cjs} +54 -119
  143. package/dist/{runClaudeDeps-QGrOeDe2.mjs → runClaudeDeps-BcZ68cX3.mjs} +47 -111
  144. package/dist/{runGemini-BEdWEZLR.mjs → runGemini-D7yKc4wD.mjs} +35 -35
  145. package/dist/{runGemini-CgRLYbt5.cjs → runGemini-DtKFXqf-.cjs} +63 -63
  146. package/dist/{runOpenClaw-DdQZAYj1.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
  147. package/dist/{runOpenClaw-C1NVmzOL.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
  148. package/dist/{sandbox-DjQUdCMG.mjs → sandbox-CbCutma4.mjs} +4 -4
  149. package/dist/{sandbox-nocIjliq.cjs → sandbox-gIj-EuF4.cjs} +4 -4
  150. package/dist/{selfCheck-DCt4Uzbq.cjs → selfCheck-BTGBVthv.cjs} +39 -39
  151. package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
  152. package/dist/{send-Dydf_hwZ.cjs → send-CZf5lLw_.cjs} +8 -8
  153. package/dist/{send-Ct7X4pPU.mjs → send-YZRMQvMJ.mjs} +9 -9
  154. package/dist/{server-DTQGZMxh.mjs → server-BqwXRzFZ.mjs} +4 -4
  155. package/dist/{server-CosABFbd.cjs → server-CknFq6xG.cjs} +6 -6
  156. package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
  157. package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
  158. package/dist/{sessionLock-DokGab2R.cjs → sessionLock-DRZUcKHT.cjs} +25 -5
  159. package/dist/{sessionLock-WYIyaVO4.mjs → sessionLock-nBXdJxJm.mjs} +24 -5
  160. package/dist/{sessionOps-S-qPBLFf.cjs → sessionOps-BrGiU9-s.cjs} +4 -4
  161. package/dist/{sessionOps-BIGgRube.mjs → sessionOps-C58iDeD5.mjs} +5 -5
  162. package/dist/{sessionScanner-o5hnMi5e.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
  163. package/dist/{sessionScanner-CIMM2hvZ.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
  164. package/dist/{sessions-BJHEZpi2.mjs → sessions-BXyBHo8n.mjs} +11 -11
  165. package/dist/{sessions-JchI1w3z.cjs → sessions-uzqPCc37.cjs} +10 -10
  166. package/dist/{setupOfflineReconnection-DMiBO2y9.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
  167. package/dist/{setupOfflineReconnection-CNiAt5ZP.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
  168. package/dist/{spawn-6PD7nnoC.cjs → spawn-DBkodJEO.cjs} +15 -15
  169. package/dist/{spawn-DgvUNYEo.mjs → spawn-vn93PhYL.mjs} +15 -15
  170. package/dist/{spawnAgents-P006Hqio.mjs → spawnAgents-CgPMWexP.mjs} +1 -1
  171. package/dist/{spawnAgents-DsXgegHM.cjs → spawnAgents-DLNMlhWJ.cjs} +1 -1
  172. package/dist/{spawnHappyCLI-CCOrEtf9.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
  173. package/dist/{spawnHappyCLI-Dywezwk6.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
  174. package/dist/{specialCommands-QxPpkGKf.cjs → specialCommands-BRufxlqe.cjs} +3 -3
  175. package/dist/{specialCommands-DPcd9edP.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
  176. package/dist/{startFileWatcher-RECH5qY8.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
  177. package/dist/{startFileWatcher-DghDOCO4.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
  178. package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
  179. package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
  180. package/dist/{streamRelay-DMV_TXfS.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
  181. package/dist/{streamRelay-DlUWKUpo.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
  182. package/dist/{sync-D23jbqVa.cjs → sync-Bn-idAoy.cjs} +1 -1
  183. package/dist/{sync-CSe0Rf45.mjs → sync-BvVhDO40.mjs} +1 -1
  184. package/dist/{systemPrompt-CFNKnh65.mjs → systemPrompt-CIZcJuJF.mjs} +2 -2
  185. package/dist/{systemPrompt-BOy4kU4P.cjs → systemPrompt-DlyEk35T.cjs} +2 -2
  186. package/dist/{teams-Ov2BDT-A.cjs → teams-BLeRpDxv.cjs} +6 -6
  187. package/dist/{teams-DyY669f0.mjs → teams-DLY3B5yi.mjs} +6 -6
  188. package/dist/{time-CrwIMHta.cjs → time-Cjv0zxQO.cjs} +1 -1
  189. package/dist/{time-65DcU6Jx.mjs → time-D3ETL7Jb.mjs} +1 -1
  190. package/dist/{titleGenerator-CS_rh2_J.cjs → titleGenerator-Cgp5ihFb.cjs} +3 -3
  191. package/dist/{titleGenerator-CiAMxf7s.mjs → titleGenerator-Uzbd4utr.mjs} +1 -1
  192. package/dist/{todo-BDONw0sK.mjs → todo-C9Ga-oEM.mjs} +6 -6
  193. package/dist/{todo-KY-okGii.cjs → todo-pOMcEECE.cjs} +6 -6
  194. package/dist/{tools-_w52DZG6.cjs → tools-BL7Byl_x.cjs} +1 -1
  195. package/dist/{tools-D8-PnZEG.mjs → tools-Cho7iIWf.mjs} +1 -1
  196. package/dist/{uninstall-8vnLN-IE.cjs → uninstall-CbayEVoV.cjs} +6 -6
  197. package/dist/{uninstall-_fjGRP9b.mjs → uninstall-CvZHVY9C.mjs} +3 -3
  198. package/package.json +8 -7
  199. package/dist/machineMetadata-CLHS9sv_.cjs +0 -42
  200. package/dist/machineMetadata-D-g--oU_.mjs +0 -39
  201. package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
  202. package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
  203. package/dist/projectPath-ChLhdOyt.cjs +0 -13
  204. package/dist/selfCheck-CjCF4C3v.mjs +0 -85
@@ -1,4 +1,4 @@
1
- import { p as packageJson } from './package-BPPebGQF.mjs';
1
+ import { p as packageJson } from './package-7Ld1YMhh.mjs';
2
2
  import module$1 from 'node:module';
3
3
  import { existsSync } from 'node:fs';
4
4
  import { readdir, rm } from 'node:fs/promises';
@@ -57,10 +57,10 @@ async function pruneStaleCompileCaches(happyHomeDir, cliVersion) {
57
57
  async function run(args) {
58
58
  enableCompileCacheIfPossible(packageJson.version);
59
59
  if (isStandaloneVersionRequest(args) || isSelfCheckRequest(args)) {
60
- const { selfCheckMain } = await import('./selfCheck-CjCF4C3v.mjs');
60
+ const { selfCheckMain } = await import('./selfCheck-Smt-5Xiq.mjs');
61
61
  process.exit(await selfCheckMain({ verbose: isSelfCheckRequest(args) }));
62
62
  }
63
- const { main } = await import('./main-B2LWV8DI.mjs');
63
+ const { main } = await import('./main-DGkdYfEq.mjs');
64
64
  await main();
65
65
  }
66
66
  void run(process.argv.slice(2));
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- require('./package-SgqTYsjn.cjs');
4
- require('./index-D09T1m8Y.cjs');
3
+ require('./package-KhLqBDX9.cjs');
4
+ require('./index-F2UejqYs.cjs');
5
5
  require('node:module');
6
6
  require('node:fs');
7
7
  require('node:fs/promises');
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import './package-BPPebGQF.mjs';
2
- import './index-D3bidoG8.mjs';
1
+ import './package-7Ld1YMhh.mjs';
2
+ import './index-wCbtF4BK.mjs';
3
3
  import 'node:module';
4
4
  import 'node:fs';
5
5
  import 'node:fs/promises';
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-C1GWx3gi.cjs');
4
- var fs = require('fs');
3
+ var logger = require('./logger-CphW5nUE.cjs');
4
+ var require$$0 = require('fs');
5
5
  var child_process = require('child_process');
6
6
  var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
7
7
  var os = require('os');
8
8
  require('chalk');
9
9
  require('node:util');
10
- require('./configuration-CMHZnp6G.cjs');
10
+ require('./configuration-CYO-kPOS.cjs');
11
11
  require('node:fs');
12
12
  require('node:os');
13
13
  require('node:path');
14
- require('./package-SgqTYsjn.cjs');
14
+ require('./package-KhLqBDX9.cjs');
15
15
  require('node:fs/promises');
16
16
 
17
17
  const PLIST_LABEL = "com.happy-cli.daemon";
18
18
  const PLIST_FILE = `/Library/LaunchDaemons/${PLIST_LABEL}.plist`;
19
19
  async function install$1() {
20
20
  try {
21
- if (fs.existsSync(PLIST_FILE)) {
21
+ if (require$$0.existsSync(PLIST_FILE)) {
22
22
  logger.logger.info("Daemon plist already exists. Uninstalling first...");
23
23
  child_process.execSync(`launchctl unload ${PLIST_FILE}`, { stdio: "inherit" });
24
24
  }
@@ -62,8 +62,8 @@ async function install$1() {
62
62
  </dict>
63
63
  </plist>
64
64
  `);
65
- fs.writeFileSync(PLIST_FILE, plistContent);
66
- fs.chmodSync(PLIST_FILE, 420);
65
+ require$$0.writeFileSync(PLIST_FILE, plistContent);
66
+ require$$0.chmodSync(PLIST_FILE, 420);
67
67
  logger.logger.info(`Created daemon plist at ${PLIST_FILE}`);
68
68
  child_process.execSync(`launchctl load ${PLIST_FILE}`, { stdio: "inherit" });
69
69
  logger.logger.info("Daemon installed and started successfully");
@@ -1,15 +1,15 @@
1
- import { l as logger } from './logger-BtVhHnD8.mjs';
1
+ import { l as logger } from './logger-BUngm5Xg.mjs';
2
2
  import { existsSync, writeFileSync, chmodSync } from 'fs';
3
3
  import { execSync } from 'child_process';
4
4
  import { t as trimIdent } from './trimIdent-BAjmv_TG.mjs';
5
5
  import os from 'os';
6
6
  import 'chalk';
7
7
  import 'node:util';
8
- import './configuration-WMi4idBB.mjs';
8
+ import './configuration-PxzEJumr.mjs';
9
9
  import 'node:fs';
10
10
  import 'node:os';
11
11
  import 'node:path';
12
- import './package-BPPebGQF.mjs';
12
+ import './package-7Ld1YMhh.mjs';
13
13
  import 'node:fs/promises';
14
14
 
15
15
  const PLIST_LABEL = "com.happy-cli.daemon";
@@ -5,7 +5,7 @@ var os = require('node:os');
5
5
  var path = require('node:path');
6
6
  var node_url = require('node:url');
7
7
  var node_crypto = require('node:crypto');
8
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
8
+ var projectPath = require('./projectPath-C3ioB4Bu.cjs');
9
9
  require('path');
10
10
  require('url');
11
11
 
@@ -5,11 +5,11 @@ var path = require('node:path');
5
5
  var os = require('node:os');
6
6
  var node_child_process = require('node:child_process');
7
7
  var chalk = require('chalk');
8
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
9
- var doctorReadiness = require('./doctorReadiness-BCZGcN0a.cjs');
8
+ var projectPath = require('./projectPath-C3ioB4Bu.cjs');
9
+ var doctorReadiness = require('./doctorReadiness-Dl6yRQCy.cjs');
10
10
  require('path');
11
11
  require('url');
12
- require('./detectCLI-DR9ZaN6B.cjs');
12
+ require('./detectCLI-BuYR_Qxe.cjs');
13
13
  require('child_process');
14
14
  require('os');
15
15
  require('fs');
package/dist/lib.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./api-Cmjfr8Z7.cjs');
4
- var logger = require('./logger-C1GWx3gi.cjs');
5
- var configuration = require('./configuration-CMHZnp6G.cjs');
3
+ var api = require('./api-DM7b1OKj.cjs');
4
+ var logger = require('./logger-CphW5nUE.cjs');
5
+ var configuration = require('./configuration-CYO-kPOS.cjs');
6
6
  var types = require('./types-CRS-srZK.cjs');
7
7
  require('axios');
8
- require('./lidState-Dv2wwFTj.cjs');
8
+ require('./lidState-DWGnm2H4.cjs');
9
9
  require('./authRelay-Dy1qU9td.cjs');
10
10
  require('node:crypto');
11
11
  require('tweetnacl');
@@ -13,32 +13,32 @@ require('os');
13
13
  require('child_process');
14
14
  require('node:events');
15
15
  require('socket.io-client');
16
- require('./pushNotifications-DaLQUyi0.cjs');
16
+ require('./pushNotifications-DI92havG.cjs');
17
17
  require('zod');
18
- require('./index-C6O2vVjm.cjs');
18
+ require('./index-Dv0Q48P3.cjs');
19
19
  require('@paralleldrive/cuid2');
20
20
  require('./contentLogMetadata-ZSFk_NjQ.cjs');
21
21
  require('./limits-C-a7gr04.cjs');
22
- require('./time-CrwIMHta.cjs');
23
- require('./registerCommonHandlers-Cj084Sg7.cjs');
22
+ require('./time-Cjv0zxQO.cjs');
23
+ require('./registerCommonHandlers-C7a_dUWs.cjs');
24
24
  require('util');
25
25
  require('fs/promises');
26
26
  require('crypto');
27
27
  require('path');
28
28
  require('cross-spawn');
29
- require('./projectPath-ChLhdOyt.cjs');
29
+ require('./projectPath-C3ioB4Bu.cjs');
30
30
  require('url');
31
- require('./sync-D23jbqVa.cjs');
31
+ require('./sync-Bn-idAoy.cjs');
32
32
  require('./backgroundTaskActivity-CBvUdj39.cjs');
33
- require('./controlClient-C-5qCt8W.cjs');
34
- require('./persistence-BegE7NPa.cjs');
33
+ require('./controlClient-Bqv5v5OM.cjs');
34
+ require('./persistence-9BMYspxG.cjs');
35
35
  require('node:fs/promises');
36
36
  require('node:fs');
37
37
  require('chalk');
38
38
  require('node:util');
39
39
  require('node:path');
40
40
  require('node:os');
41
- require('./package-SgqTYsjn.cjs');
41
+ require('./package-KhLqBDX9.cjs');
42
42
 
43
43
 
44
44
 
package/dist/lib.d.cts CHANGED
@@ -367,7 +367,9 @@ type Session = {
367
367
  declare const MachineMetadataSchema: z$1.ZodObject<{
368
368
  teamsVersion: z$1.ZodOptional<z$1.ZodNumber>;
369
369
  teamLaunchVersion: z$1.ZodOptional<z$1.ZodNumber>;
370
+ teamRetryVersion: z$1.ZodOptional<z$1.ZodNumber>;
370
371
  worktreeVersion: z$1.ZodOptional<z$1.ZodNumber>;
372
+ modelConfigVersion: z$1.ZodOptional<z$1.ZodNumber>;
371
373
  host: z$1.ZodString;
372
374
  platform: z$1.ZodString;
373
375
  happyCliVersion: z$1.ZodString;
@@ -757,6 +759,18 @@ type Metadata = {
757
759
  idleMs: number;
758
760
  v: 1;
759
761
  };
762
+ /**
763
+ * B-679: written by a wrapper that went OFFLINE (SIGTERM / SIGINT: `sessions
764
+ * stop`, daemon stop / upgrade, shutdown); cleared by the next wrapper on
765
+ * reconnect. `seq` = its message cursor — user input stored above it (sent
766
+ * to the offline session) was never routed and is replayed on resume. Old
767
+ * clients ignore it.
768
+ */
769
+ exitCursor?: {
770
+ at: number;
771
+ seq: number;
772
+ v: 1;
773
+ };
760
774
  /** B-587: user opted this session out of idle hibernation (web ⋯ menu). */
761
775
  keepAwake?: boolean;
762
776
  flavor?: string;
@@ -1283,7 +1297,9 @@ declare class ApiSessionClient extends EventEmitter {
1283
1297
  * session down. Needs no socket; POSTs through the same session-message
1284
1298
  * channel so the web receives it identically to a cancel-button tombstone.
1285
1299
  */
1286
- cancelUndeliveredQueuedInputs(): Promise<void>;
1300
+ cancelUndeliveredQueuedInputs(opts?: {
1301
+ maxSeq?: number;
1302
+ }): Promise<void>;
1287
1303
  /**
1288
1304
  * Send a message to session
1289
1305
  * @param body - Message body (can be MessageContent or raw content for agent messages)
@@ -1488,6 +1504,24 @@ interface WebPanel {
1488
1504
  embed: boolean;
1489
1505
  }
1490
1506
 
1507
+ /**
1508
+ * B-689: why a daemon-spawned wrapper died before it reported its session.
1509
+ *
1510
+ * The wrapper runs with `stdio: 'ignore'`, so the daemon cannot read its
1511
+ * stderr; the wrapper's own log file is the record (utils/exitReason.ts writes
1512
+ * an `[EXIT] …` line on every non-zero exit). Older wrappers have no `[EXIT]`
1513
+ * line — fall back to the last logged error.
1514
+ */
1515
+ type StartupExit = {
1516
+ /** The process is confirmed gone (exited, or stopped after the timeout). */
1517
+ exited: boolean;
1518
+ code: number | null;
1519
+ signal: string | null;
1520
+ /** No session report within the spawn window; the daemon stopped it. */
1521
+ timedOut?: boolean;
1522
+ reason?: string;
1523
+ };
1524
+
1491
1525
  /**
1492
1526
  * The backends the daemon can spawn as a remote session.
1493
1527
  *
@@ -1584,8 +1618,148 @@ type SpawnSessionResult = {
1584
1618
  } | {
1585
1619
  type: 'error';
1586
1620
  errorMessage: string;
1621
+ startupExit?: StartupExit;
1587
1622
  };
1588
1623
 
1624
+ /**
1625
+ * B-688 wire shapes for the `model-config-*` machine RPCs
1626
+ * (spec specs/2026-10-custom-models.md). Mirrored by the web in
1627
+ * packages/happy-web-v2/src/sync/modelConfigTypes.ts — keep both in step.
1628
+ *
1629
+ * Patch convention: a field left `undefined` keeps the file's value; `null`
1630
+ * or '' removes the key Very Happy manages. Secrets never come back: reads
1631
+ * return `SecretView`, never the value.
1632
+ */
1633
+
1634
+ declare const MODEL_CONFIG_CAPABILITY_VERSION = 1;
1635
+ type HarnessId = 'claude' | 'codex' | 'gemini' | 'pi';
1636
+ interface SecretView {
1637
+ /** none: nothing configured; command: a helper/command the user wrote (not shown). */
1638
+ mode: 'none' | 'literal' | 'env' | 'command';
1639
+ /** `sk-a…9f3c` / `••••` for literal; never the value. */
1640
+ masked?: string;
1641
+ envName?: string;
1642
+ /** Whether the daemon's environment (inherited by sessions) defines envName. */
1643
+ envPresent?: boolean;
1644
+ }
1645
+ interface ConfigWarning {
1646
+ code: string;
1647
+ message: string;
1648
+ }
1649
+ interface FileView {
1650
+ role: string;
1651
+ path: string;
1652
+ exists: boolean;
1653
+ error?: {
1654
+ code: string;
1655
+ message: string;
1656
+ };
1657
+ }
1658
+ interface BackupView {
1659
+ id: string;
1660
+ createdAt: number;
1661
+ reason: string;
1662
+ files: string[];
1663
+ }
1664
+ /** Per-harness current values, already masked. Shape depends on the harness. */
1665
+ interface HarnessCurrent {
1666
+ baseUrl?: string | null;
1667
+ apiKey?: SecretView;
1668
+ authHeader?: 'bearer' | 'x-api-key';
1669
+ model?: string | null;
1670
+ opusModel?: string | null;
1671
+ sonnetModel?: string | null;
1672
+ haikuModel?: string | null;
1673
+ pickerModels?: string[];
1674
+ providerId?: string | null;
1675
+ providerName?: string | null;
1676
+ api?: string | null;
1677
+ models?: string[];
1678
+ defaultModel?: string | null;
1679
+ /** codex/pi: provider currently selected by the harness. */
1680
+ activeProvider?: string | null;
1681
+ active?: boolean;
1682
+ }
1683
+ interface HarnessConfigView {
1684
+ harness: HarnessId;
1685
+ /** Harness binary found on the daemon's PATH. */
1686
+ installed: boolean;
1687
+ files: FileView[];
1688
+ /** sha256 over all files; `apply`/`restore` refuse when the disk moved on. */
1689
+ baseHash: string;
1690
+ current: HarnessCurrent;
1691
+ /** codex/pi: user-defined provider ids in the file. */
1692
+ providers?: string[];
1693
+ /** Model keys the web should offer in this harness's composer picker. */
1694
+ pickerModels: string[];
1695
+ backups: BackupView[];
1696
+ warnings: ConfigWarning[];
1697
+ }
1698
+ interface ModelConfigReadResult {
1699
+ version: typeof MODEL_CONFIG_CAPABILITY_VERSION;
1700
+ harnesses: HarnessConfigView[];
1701
+ }
1702
+ interface FileDiff {
1703
+ path: string;
1704
+ /** Unified diff with secrets masked; '' when unchanged. */
1705
+ diff: string;
1706
+ created: boolean;
1707
+ deleted: boolean;
1708
+ }
1709
+ interface ModelConfigApplyResult {
1710
+ harness: HarnessId;
1711
+ dryRun: boolean;
1712
+ changed: boolean;
1713
+ baseHash: string;
1714
+ files: FileDiff[];
1715
+ warnings: ConfigWarning[];
1716
+ backup?: BackupView;
1717
+ /** Fresh view after a real write. */
1718
+ config?: HarnessConfigView;
1719
+ }
1720
+
1721
+ interface ModelConfigServiceOptions {
1722
+ /** The home the harnesses resolve `~` against (the daemon user's). */
1723
+ home: string;
1724
+ /** The daemon's environment: harness dir overrides + env-reference presence. */
1725
+ env: NodeJS.ProcessEnv;
1726
+ /** Very Happy home; backups and the audit log live under it. */
1727
+ happyHomeDir: string;
1728
+ isInstalled?: (binary: string) => boolean;
1729
+ /** Called after a successful write (e.g. re-run the Claude auth preflight). */
1730
+ onChanged?: (harness: HarnessId) => void;
1731
+ now?: () => number;
1732
+ }
1733
+ declare class ModelConfigService {
1734
+ private readonly opts;
1735
+ private readonly backups;
1736
+ private readonly auditPath;
1737
+ private chain;
1738
+ constructor(opts: ModelConfigServiceOptions);
1739
+ private get ctx();
1740
+ private serialize;
1741
+ private loadFiles;
1742
+ readOne(harness: HarnessId, providerId?: string): Promise<HarnessConfigView>;
1743
+ read(params?: {
1744
+ harness?: unknown;
1745
+ providerId?: unknown;
1746
+ }): Promise<ModelConfigReadResult>;
1747
+ private diffs;
1748
+ private write;
1749
+ private audit;
1750
+ apply(params: {
1751
+ patch?: unknown;
1752
+ baseHash?: unknown;
1753
+ dryRun?: unknown;
1754
+ }): Promise<ModelConfigApplyResult>;
1755
+ restore(params: {
1756
+ harness?: unknown;
1757
+ backupId?: unknown;
1758
+ baseHash?: unknown;
1759
+ dryRun?: unknown;
1760
+ }): Promise<ModelConfigApplyResult>;
1761
+ }
1762
+
1589
1763
  /** Agent-specific visible-screen adapters. Unknown is deliberately not idle. */
1590
1764
  type CodingAgentKind = 'claude' | 'codex' | 'pi';
1591
1765
 
@@ -1827,6 +2001,8 @@ declare class ApiMachineClient {
1827
2001
  }>;
1828
2002
  setStore: (store: 'auto' | 'file') => Promise<ClaudeAuthState>;
1829
2003
  }): void;
2004
+ /** B-688 machine RPCs `model-config-*` (modules/modelConfig/modelConfigRpc.ts). */
2005
+ setModelConfigService(service: ModelConfigService): void;
1830
2006
  /**
1831
2007
  * B-506: the five `sessions.*` methods a CLI on ANOTHER machine of this
1832
2008
  * account calls to read / message sessions this daemon spawned. Plaintext
package/dist/lib.d.mts CHANGED
@@ -367,7 +367,9 @@ type Session = {
367
367
  declare const MachineMetadataSchema: z$1.ZodObject<{
368
368
  teamsVersion: z$1.ZodOptional<z$1.ZodNumber>;
369
369
  teamLaunchVersion: z$1.ZodOptional<z$1.ZodNumber>;
370
+ teamRetryVersion: z$1.ZodOptional<z$1.ZodNumber>;
370
371
  worktreeVersion: z$1.ZodOptional<z$1.ZodNumber>;
372
+ modelConfigVersion: z$1.ZodOptional<z$1.ZodNumber>;
371
373
  host: z$1.ZodString;
372
374
  platform: z$1.ZodString;
373
375
  happyCliVersion: z$1.ZodString;
@@ -757,6 +759,18 @@ type Metadata = {
757
759
  idleMs: number;
758
760
  v: 1;
759
761
  };
762
+ /**
763
+ * B-679: written by a wrapper that went OFFLINE (SIGTERM / SIGINT: `sessions
764
+ * stop`, daemon stop / upgrade, shutdown); cleared by the next wrapper on
765
+ * reconnect. `seq` = its message cursor — user input stored above it (sent
766
+ * to the offline session) was never routed and is replayed on resume. Old
767
+ * clients ignore it.
768
+ */
769
+ exitCursor?: {
770
+ at: number;
771
+ seq: number;
772
+ v: 1;
773
+ };
760
774
  /** B-587: user opted this session out of idle hibernation (web ⋯ menu). */
761
775
  keepAwake?: boolean;
762
776
  flavor?: string;
@@ -1283,7 +1297,9 @@ declare class ApiSessionClient extends EventEmitter {
1283
1297
  * session down. Needs no socket; POSTs through the same session-message
1284
1298
  * channel so the web receives it identically to a cancel-button tombstone.
1285
1299
  */
1286
- cancelUndeliveredQueuedInputs(): Promise<void>;
1300
+ cancelUndeliveredQueuedInputs(opts?: {
1301
+ maxSeq?: number;
1302
+ }): Promise<void>;
1287
1303
  /**
1288
1304
  * Send a message to session
1289
1305
  * @param body - Message body (can be MessageContent or raw content for agent messages)
@@ -1488,6 +1504,24 @@ interface WebPanel {
1488
1504
  embed: boolean;
1489
1505
  }
1490
1506
 
1507
+ /**
1508
+ * B-689: why a daemon-spawned wrapper died before it reported its session.
1509
+ *
1510
+ * The wrapper runs with `stdio: 'ignore'`, so the daemon cannot read its
1511
+ * stderr; the wrapper's own log file is the record (utils/exitReason.ts writes
1512
+ * an `[EXIT] …` line on every non-zero exit). Older wrappers have no `[EXIT]`
1513
+ * line — fall back to the last logged error.
1514
+ */
1515
+ type StartupExit = {
1516
+ /** The process is confirmed gone (exited, or stopped after the timeout). */
1517
+ exited: boolean;
1518
+ code: number | null;
1519
+ signal: string | null;
1520
+ /** No session report within the spawn window; the daemon stopped it. */
1521
+ timedOut?: boolean;
1522
+ reason?: string;
1523
+ };
1524
+
1491
1525
  /**
1492
1526
  * The backends the daemon can spawn as a remote session.
1493
1527
  *
@@ -1584,8 +1618,148 @@ type SpawnSessionResult = {
1584
1618
  } | {
1585
1619
  type: 'error';
1586
1620
  errorMessage: string;
1621
+ startupExit?: StartupExit;
1587
1622
  };
1588
1623
 
1624
+ /**
1625
+ * B-688 wire shapes for the `model-config-*` machine RPCs
1626
+ * (spec specs/2026-10-custom-models.md). Mirrored by the web in
1627
+ * packages/happy-web-v2/src/sync/modelConfigTypes.ts — keep both in step.
1628
+ *
1629
+ * Patch convention: a field left `undefined` keeps the file's value; `null`
1630
+ * or '' removes the key Very Happy manages. Secrets never come back: reads
1631
+ * return `SecretView`, never the value.
1632
+ */
1633
+
1634
+ declare const MODEL_CONFIG_CAPABILITY_VERSION = 1;
1635
+ type HarnessId = 'claude' | 'codex' | 'gemini' | 'pi';
1636
+ interface SecretView {
1637
+ /** none: nothing configured; command: a helper/command the user wrote (not shown). */
1638
+ mode: 'none' | 'literal' | 'env' | 'command';
1639
+ /** `sk-a…9f3c` / `••••` for literal; never the value. */
1640
+ masked?: string;
1641
+ envName?: string;
1642
+ /** Whether the daemon's environment (inherited by sessions) defines envName. */
1643
+ envPresent?: boolean;
1644
+ }
1645
+ interface ConfigWarning {
1646
+ code: string;
1647
+ message: string;
1648
+ }
1649
+ interface FileView {
1650
+ role: string;
1651
+ path: string;
1652
+ exists: boolean;
1653
+ error?: {
1654
+ code: string;
1655
+ message: string;
1656
+ };
1657
+ }
1658
+ interface BackupView {
1659
+ id: string;
1660
+ createdAt: number;
1661
+ reason: string;
1662
+ files: string[];
1663
+ }
1664
+ /** Per-harness current values, already masked. Shape depends on the harness. */
1665
+ interface HarnessCurrent {
1666
+ baseUrl?: string | null;
1667
+ apiKey?: SecretView;
1668
+ authHeader?: 'bearer' | 'x-api-key';
1669
+ model?: string | null;
1670
+ opusModel?: string | null;
1671
+ sonnetModel?: string | null;
1672
+ haikuModel?: string | null;
1673
+ pickerModels?: string[];
1674
+ providerId?: string | null;
1675
+ providerName?: string | null;
1676
+ api?: string | null;
1677
+ models?: string[];
1678
+ defaultModel?: string | null;
1679
+ /** codex/pi: provider currently selected by the harness. */
1680
+ activeProvider?: string | null;
1681
+ active?: boolean;
1682
+ }
1683
+ interface HarnessConfigView {
1684
+ harness: HarnessId;
1685
+ /** Harness binary found on the daemon's PATH. */
1686
+ installed: boolean;
1687
+ files: FileView[];
1688
+ /** sha256 over all files; `apply`/`restore` refuse when the disk moved on. */
1689
+ baseHash: string;
1690
+ current: HarnessCurrent;
1691
+ /** codex/pi: user-defined provider ids in the file. */
1692
+ providers?: string[];
1693
+ /** Model keys the web should offer in this harness's composer picker. */
1694
+ pickerModels: string[];
1695
+ backups: BackupView[];
1696
+ warnings: ConfigWarning[];
1697
+ }
1698
+ interface ModelConfigReadResult {
1699
+ version: typeof MODEL_CONFIG_CAPABILITY_VERSION;
1700
+ harnesses: HarnessConfigView[];
1701
+ }
1702
+ interface FileDiff {
1703
+ path: string;
1704
+ /** Unified diff with secrets masked; '' when unchanged. */
1705
+ diff: string;
1706
+ created: boolean;
1707
+ deleted: boolean;
1708
+ }
1709
+ interface ModelConfigApplyResult {
1710
+ harness: HarnessId;
1711
+ dryRun: boolean;
1712
+ changed: boolean;
1713
+ baseHash: string;
1714
+ files: FileDiff[];
1715
+ warnings: ConfigWarning[];
1716
+ backup?: BackupView;
1717
+ /** Fresh view after a real write. */
1718
+ config?: HarnessConfigView;
1719
+ }
1720
+
1721
+ interface ModelConfigServiceOptions {
1722
+ /** The home the harnesses resolve `~` against (the daemon user's). */
1723
+ home: string;
1724
+ /** The daemon's environment: harness dir overrides + env-reference presence. */
1725
+ env: NodeJS.ProcessEnv;
1726
+ /** Very Happy home; backups and the audit log live under it. */
1727
+ happyHomeDir: string;
1728
+ isInstalled?: (binary: string) => boolean;
1729
+ /** Called after a successful write (e.g. re-run the Claude auth preflight). */
1730
+ onChanged?: (harness: HarnessId) => void;
1731
+ now?: () => number;
1732
+ }
1733
+ declare class ModelConfigService {
1734
+ private readonly opts;
1735
+ private readonly backups;
1736
+ private readonly auditPath;
1737
+ private chain;
1738
+ constructor(opts: ModelConfigServiceOptions);
1739
+ private get ctx();
1740
+ private serialize;
1741
+ private loadFiles;
1742
+ readOne(harness: HarnessId, providerId?: string): Promise<HarnessConfigView>;
1743
+ read(params?: {
1744
+ harness?: unknown;
1745
+ providerId?: unknown;
1746
+ }): Promise<ModelConfigReadResult>;
1747
+ private diffs;
1748
+ private write;
1749
+ private audit;
1750
+ apply(params: {
1751
+ patch?: unknown;
1752
+ baseHash?: unknown;
1753
+ dryRun?: unknown;
1754
+ }): Promise<ModelConfigApplyResult>;
1755
+ restore(params: {
1756
+ harness?: unknown;
1757
+ backupId?: unknown;
1758
+ baseHash?: unknown;
1759
+ dryRun?: unknown;
1760
+ }): Promise<ModelConfigApplyResult>;
1761
+ }
1762
+
1589
1763
  /** Agent-specific visible-screen adapters. Unknown is deliberately not idle. */
1590
1764
  type CodingAgentKind = 'claude' | 'codex' | 'pi';
1591
1765
 
@@ -1827,6 +2001,8 @@ declare class ApiMachineClient {
1827
2001
  }>;
1828
2002
  setStore: (store: 'auto' | 'file') => Promise<ClaudeAuthState>;
1829
2003
  }): void;
2004
+ /** B-688 machine RPCs `model-config-*` (modules/modelConfig/modelConfigRpc.ts). */
2005
+ setModelConfigService(service: ModelConfigService): void;
1830
2006
  /**
1831
2007
  * B-506: the five `sessions.*` methods a CLI on ANOTHER machine of this
1832
2008
  * account calls to read / message sessions this daemon spawned. Plaintext
package/dist/lib.mjs CHANGED
@@ -1,9 +1,9 @@
1
- export { A as ApiClient, a as ApiSessionClient } from './api-CzwFpJQc.mjs';
2
- export { l as logger } from './logger-BtVhHnD8.mjs';
3
- export { c as configuration } from './configuration-WMi4idBB.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient } from './api-Hov8p7CA.mjs';
2
+ export { l as logger } from './logger-BUngm5Xg.mjs';
3
+ export { c as configuration } from './configuration-PxzEJumr.mjs';
4
4
  export { R as RawJSONLinesSchema } from './types-CkqAACXx.mjs';
5
5
  import 'axios';
6
- import './lidState-Bb8fgXg3.mjs';
6
+ import './lidState-bBrmaQd2.mjs';
7
7
  import './authRelay-DhQhkBvX.mjs';
8
8
  import 'node:crypto';
9
9
  import 'tweetnacl';
@@ -11,14 +11,14 @@ import 'os';
11
11
  import 'child_process';
12
12
  import 'node:events';
13
13
  import 'socket.io-client';
14
- import './pushNotifications-BdFjDjQe.mjs';
14
+ import './pushNotifications-DCiBEVeC.mjs';
15
15
  import 'zod';
16
- import './index-DPOa4NhL.mjs';
16
+ import './index-C6Vn5Eac.mjs';
17
17
  import '@paralleldrive/cuid2';
18
18
  import './contentLogMetadata-BlWI0egu.mjs';
19
19
  import './limits-DIo7rEBR.mjs';
20
- import './time-65DcU6Jx.mjs';
21
- import './registerCommonHandlers-BAlP7SGc.mjs';
20
+ import './time-D3ETL7Jb.mjs';
21
+ import './registerCommonHandlers-CTkCvjxt.mjs';
22
22
  import 'util';
23
23
  import 'fs/promises';
24
24
  import 'crypto';
@@ -26,14 +26,14 @@ import 'path';
26
26
  import 'cross-spawn';
27
27
  import './projectPath-BTBIMB57.mjs';
28
28
  import 'url';
29
- import './sync-CSe0Rf45.mjs';
30
- import './backgroundTaskActivity-BVwJBl02.mjs';
31
- import './controlClient-BWUJrj3t.mjs';
32
- import './persistence-Cr-wutZ4.mjs';
29
+ import './sync-BvVhDO40.mjs';
30
+ import './backgroundTaskActivity-8PdPxrvy.mjs';
31
+ import './controlClient-DoeYovwP.mjs';
32
+ import './persistence-BFUOHW5h.mjs';
33
33
  import 'node:fs/promises';
34
34
  import 'node:fs';
35
35
  import 'chalk';
36
36
  import 'node:util';
37
37
  import 'node:path';
38
38
  import 'node:os';
39
- import './package-BPPebGQF.mjs';
39
+ import './package-7Ld1YMhh.mjs';