very-happy-cli 0.2.179 → 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 (214) hide show
  1. package/dist/{AcpBackend-DFipFF7-.cjs → AcpBackend-CgHb_ya5.cjs} +3 -3
  2. package/dist/{AcpBackend-CHp3y7cb.mjs → AcpBackend-DZGCSuXF.mjs} +3 -3
  3. package/dist/{AcpSessionManager-0zpvRJXc.cjs → AcpSessionManager-CacC2EVn.cjs} +1 -1
  4. package/dist/{AcpSessionManager-d2-rKWWa.mjs → AcpSessionManager-DwuPzWBh.mjs} +1 -1
  5. package/dist/{BasePermissionHandler-CH3zuEkA.cjs → BasePermissionHandler-DCP8ZEB4.cjs} +1 -1
  6. package/dist/{BasePermissionHandler-DdZBYIR4.mjs → BasePermissionHandler-Uo-GUjbb.mjs} +1 -1
  7. package/dist/{acpSessionResume-DTGmAPLt.mjs → acpSessionResume-9OLTD6kT.mjs} +1 -1
  8. package/dist/{acpSessionResume-oiCBnAVA.cjs → acpSessionResume-BaVMD80f.cjs} +1 -1
  9. package/dist/{agentHome-CghLvL_1.mjs → agentHome-B1BsKeqD.mjs} +4 -4
  10. package/dist/{agentHome-BWcz8mz0.cjs → agentHome-BtUmGcPX.cjs} +4 -4
  11. package/dist/{api-Cmjfr8Z7.cjs → api-COHFAkb_.cjs} +20 -12
  12. package/dist/{api-CzwFpJQc.mjs → api-Dr3wXL_7.mjs} +21 -13
  13. package/dist/{apiMachine-DJkTEiqy.mjs → apiMachine-CHEzPQdS.mjs} +73 -32
  14. package/dist/{apiMachine-G6OogT08.cjs → apiMachine-D8H7CXaz.cjs} +75 -34
  15. package/dist/{attachmentContent-B2os4HbA.mjs → attachmentContent-1YwtKgWl.mjs} +2 -2
  16. package/dist/{attachmentContent-Bo0UAsSu.cjs → attachmentContent-mIhbtRKl.cjs} +2 -2
  17. package/dist/{auth-DMX0xPNK.mjs → auth-CbZkcMAb.mjs} +8 -8
  18. package/dist/{auth-D6bBUwZa.cjs → auth-CgQP7d0q.cjs} +5 -5
  19. package/dist/{auth-BS6PaOOG.mjs → auth-DZsthtSk.mjs} +5 -5
  20. package/dist/{auth-HEhRaNgL.cjs → auth-Fg8fLadK.cjs} +8 -8
  21. package/dist/{auto-C6I55iOh.cjs → auto-BB7kqSh5.cjs} +19 -19
  22. package/dist/{auto-Cl1SEDcD.mjs → auto-_T-Ud-z5.mjs} +19 -19
  23. package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
  24. package/dist/{bootstrap-iuyufnp3.mjs → bootstrap-B6EkZh4u.mjs} +2 -2
  25. package/dist/{bootstrap-exVucYav.cjs → bootstrap-CYtOtbi7.cjs} +2 -2
  26. package/dist/{browser-CSYum7xH.mjs → browser-C2qhUHSE.mjs} +1 -1
  27. package/dist/{browser-BohJK12g.cjs → browser-DjNNQQk2.cjs} +1 -1
  28. package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
  29. package/dist/{claudeLocal-Dq_R3Ax_.mjs → claudeLocal-BAFjWhZ8.mjs} +6 -6
  30. package/dist/{claudeLocal-re4yjSTx.cjs → claudeLocal-O_w7-fBh.cjs} +8 -8
  31. package/dist/{claudeLocalLauncher-CN67lN7-.mjs → claudeLocalLauncher-CWn30LZR.mjs} +11 -11
  32. package/dist/{claudeLocalLauncher-B4hJHpCA.cjs → claudeLocalLauncher-Df3zg1q0.cjs} +13 -13
  33. package/dist/{claudeSessionFork-BihfD0Ik.mjs → claudeSessionFork-2ZkSTOGn.mjs} +1 -1
  34. package/dist/{claudeSessionFork-DiSMYerV.cjs → claudeSessionFork-pwcKqB-e.cjs} +1 -1
  35. package/dist/{client-BhoEBnuN.mjs → client-BKyU66lg.mjs} +2 -2
  36. package/dist/{client-BKcK1Bi-.cjs → client-CUO3ItoB.cjs} +34 -8
  37. package/dist/{client-wo9nbxuf.mjs → client-CXOnzuOy.mjs} +2 -2
  38. package/dist/{client-ZjOsn6nZ.cjs → client-DWs6k041.cjs} +2 -2
  39. package/dist/{client-CuVdN6PP.cjs → client-D_U2VjO3.cjs} +2 -2
  40. package/dist/{client-DuTDwWSQ.mjs → client-DsQcxVUV.mjs} +34 -9
  41. package/dist/codex/happyMcpStdioBridge.cjs +17 -17
  42. package/dist/codex/happyMcpStdioBridge.mjs +18 -18
  43. package/dist/{codexAppServerClient-Dt5zxrun.cjs → codexAppServerClient-BRX3JZ_5.cjs} +3 -3
  44. package/dist/{codexAppServerClient-BK3zra_1.mjs → codexAppServerClient-C3JO3pwM.mjs} +3 -3
  45. package/dist/{codexCommand-B6pY7CMh.mjs → codexCommand-BZIAAqKS.mjs} +59 -51
  46. package/dist/{codexCommand-CAZ1SLjg.cjs → codexCommand-dKOc5iQl.cjs} +85 -77
  47. package/dist/{codexTermination-DmGbHxcD.cjs → codexTermination-BVR9HeVI.cjs} +7 -2
  48. package/dist/{codexTermination-Cd1Eon_4.mjs → codexTermination-ztFkwHrG.mjs} +7 -2
  49. package/dist/{config-2oMG_fEI.mjs → config-NbHjx8ge.mjs} +3 -3
  50. package/dist/{config-B0uK6K7n.cjs → config-cftYxLC7.cjs} +26 -26
  51. package/dist/{configuration-WMi4idBB.mjs → configuration-BPrfb17M.mjs} +1 -1
  52. package/dist/{configuration-CMHZnp6G.cjs → configuration-C8JgseHy.cjs} +1 -1
  53. package/dist/{connect-uaglGrde.cjs → connect-Br8VMrK1.cjs} +27 -27
  54. package/dist/{connect-BLVHhHzA.mjs → connect-CLD1ai0k.mjs} +14 -14
  55. package/dist/{context-DXzU5bFM.cjs → context-D1lgQTJC.cjs} +1 -1
  56. package/dist/{context-DploEcoN.mjs → context-_YGq8xdH.mjs} +1 -1
  57. package/dist/{controlClient-BWUJrj3t.mjs → controlClient-CkNpT5zS.mjs} +4 -4
  58. package/dist/{controlClient-C-5qCt8W.cjs → controlClient-D68Zj7Q-.cjs} +3 -3
  59. package/dist/{createSessionMetadata-3uXrJgOW.mjs → createSessionMetadata-3WAj3_xl.mjs} +2 -2
  60. package/dist/{createSessionMetadata-BkIzHALd.cjs → createSessionMetadata-DNIbKLHg.cjs} +3 -3
  61. package/dist/{defaultPermissionMode-pS3vmiSg.cjs → defaultPermissionMode-BmvjP32v.cjs} +2 -2
  62. package/dist/{defaultPermissionMode-BzxLh20a.mjs → defaultPermissionMode-DXMznl8v.mjs} +2 -2
  63. package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
  64. package/dist/{deterministicJson-B8z2GPi9.cjs → deterministicJson-BS7D7URE.cjs} +89 -24
  65. package/dist/{deterministicJson-D_whDMFd.mjs → deterministicJson-BcBIKKf1.mjs} +87 -24
  66. package/dist/{doctor-Br1Kcy2J.cjs → doctor-Be7zC0AF.cjs} +10 -9
  67. package/dist/{doctor-CmtSsR2-.mjs → doctor-CoOaPq6w.mjs} +8 -8
  68. package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
  69. package/dist/{downloadTarget-BoNwTIH_.mjs → downloadTarget-CeaAXdJj.mjs} +6 -6
  70. package/dist/{downloadTarget-BQJK_6oH.cjs → downloadTarget-LyOiucn_.cjs} +6 -6
  71. package/dist/{ensureDaemonRunning-Czo9IHJQ.mjs → ensureDaemonRunning--98j7-17.mjs} +5 -5
  72. package/dist/{ensureDaemonRunning-BRUmsq6J.cjs → ensureDaemonRunning-B8z37VKD.cjs} +6 -6
  73. package/dist/fileStore-5qpetZS0.mjs +146 -0
  74. package/dist/fileStore-7qhnbs6N.cjs +152 -0
  75. package/dist/{handleResumeCommand-tKD_Hpxc.cjs → handleResumeCommand-BFZlrFVH.cjs} +7 -7
  76. package/dist/{handleResumeCommand-C8thKjqf.mjs → handleResumeCommand-gO8I4keP.mjs} +6 -6
  77. package/dist/{index-DMqDMT1Q.cjs → index-B5PXbZjW.cjs} +80 -62
  78. package/dist/{index-D09T1m8Y.cjs → index-BRMq9gOe.cjs} +3 -3
  79. package/dist/{index-B0UjHlAe.cjs → index-BkluinoS.cjs} +4 -4
  80. package/dist/{index-CdQI0C9p.mjs → index-CO0n9ue6.mjs} +4 -4
  81. package/dist/{index-DPOa4NhL.mjs → index-CeRXrGnH.mjs} +41 -6
  82. package/dist/{index-C6O2vVjm.cjs → index-Df2eHm3O.cjs} +42 -6
  83. package/dist/{index-BTxHphpV.mjs → index-DneHoQXf.mjs} +80 -62
  84. package/dist/{index-BiyC7cZ3.mjs → index-WUj3954m.mjs} +4 -4
  85. package/dist/{index-D3bidoG8.mjs → index-hQ8LP1C2.mjs} +3 -3
  86. package/dist/{index-CUuc6iCn.cjs → index-jF2t3ACW.cjs} +4 -4
  87. package/dist/index.cjs +2 -2
  88. package/dist/index.mjs +2 -2
  89. package/dist/{install-BX3lv3NO.mjs → install-D0inLCv-.mjs} +1 -1
  90. package/dist/{install-BXvf2E3o.cjs → install-D2NCbeJ-.cjs} +1 -1
  91. package/dist/{install-hnve_9vq.mjs → install-DkYFiVK4.mjs} +3 -3
  92. package/dist/{install-CYRZxS87.cjs → install-FqkSUjPC.cjs} +7 -7
  93. package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
  94. package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
  95. package/dist/lib.cjs +13 -13
  96. package/dist/lib.d.cts +216 -2
  97. package/dist/lib.d.mts +216 -2
  98. package/dist/lib.mjs +13 -13
  99. package/dist/{lidState-Bb8fgXg3.mjs → lidState-DghbfRbr.mjs} +1 -1
  100. package/dist/{lidState-Dv2wwFTj.cjs → lidState-x8cJ8J_9.cjs} +1 -1
  101. package/dist/{localHappyAgentAuth-DjYvkXvV.cjs → localHappyAgentAuth-DZ2kb9uq.cjs} +1 -1
  102. package/dist/{localHappyAgentAuth-NEU7fax7.mjs → localHappyAgentAuth-IKmeRpuQ.mjs} +1 -1
  103. package/dist/{logger-C1GWx3gi.cjs → logger-DgBwUSgS.cjs} +2 -2
  104. package/dist/{logger-BtVhHnD8.mjs → logger-LFr8iPgl.mjs} +2 -2
  105. package/dist/machineMetadata-BglCsfvf.mjs +75 -0
  106. package/dist/machineMetadata-DB03ez4K.cjs +87 -0
  107. package/dist/{main-CWhSsbtU.cjs → main-YQ-Vkakw.cjs} +99 -132
  108. package/dist/{main-B2LWV8DI.mjs → main-_1LSzlLv.mjs} +93 -126
  109. package/dist/{mcp-CARUsXHV.cjs → mcp-BIY80jSc.cjs} +15 -15
  110. package/dist/{mcp-ext92q3Y.mjs → mcp-Csj-mT5Y.mjs} +15 -15
  111. package/dist/{mirrorProtocol-DEy2g1CB.cjs → mirrorProtocol-BphKIAK9.cjs} +15 -6
  112. package/dist/{mirrorProtocol-BwYibqry.mjs → mirrorProtocol-CAxOMBkb.mjs} +15 -6
  113. package/dist/{package-BPPebGQF.mjs → package-DYGwlmXl.mjs} +9 -8
  114. package/dist/{package-SgqTYsjn.cjs → package-NoD8QOOM.cjs} +9 -8
  115. package/dist/{panels-BZ0_Tt7B.mjs → panels-B8zRm7_d.mjs} +5 -5
  116. package/dist/{panels-D1c7q2dD.cjs → panels-DYEc1NyQ.cjs} +5 -5
  117. package/dist/{peerTools-CWKzcQ7u.mjs → peerTools-CK3JYu1k.mjs} +5 -5
  118. package/dist/{peerTools-DRQETXaz.cjs → peerTools-CP-x-Peu.cjs} +5 -5
  119. package/dist/{persistence-BegE7NPa.cjs → persistence-BY-D00wT.cjs} +2 -2
  120. package/dist/{persistence-Cr-wutZ4.mjs → persistence-D2Djrf7t.mjs} +2 -2
  121. package/dist/pi-CqyoZMjI.mjs +380 -0
  122. package/dist/pi-DlsrPCTa.cjs +400 -0
  123. package/dist/{piRunnerArgs-DwvM_yWA.mjs → piRunnerArgs-IZLoL7TG.mjs} +1 -1
  124. package/dist/{piRunnerArgs-Cs-378Vz.cjs → piRunnerArgs-gxLYIZH4.cjs} +1 -1
  125. package/dist/{piRuntime-Bue5mnlc.mjs → piRuntime-D7Y4oHVL.mjs} +2 -2
  126. package/dist/{piRuntime-BG-1td_n.cjs → piRuntime-o5L8uX-W.cjs} +2 -2
  127. package/dist/{piTerminal-G4z-xVyy.cjs → piTerminal-C_-JDkLN.cjs} +18 -18
  128. package/dist/{piTerminal-B5x9X5yV.mjs → piTerminal-Kphx8Uhw.mjs} +18 -18
  129. package/dist/projectPath-C3ioB4Bu.cjs +13 -0
  130. package/dist/{prompt-lgF9IE82.cjs → prompt-Bof2aQkI.cjs} +7 -2
  131. package/dist/{prompt-BOouDaTM.mjs → prompt-QHuFx9j6.mjs} +7 -2
  132. package/dist/{pushNotifications-DaLQUyi0.cjs → pushNotifications-BXoOSq_G.cjs} +14 -4
  133. package/dist/{pushNotifications-BdFjDjQe.mjs → pushNotifications-DXGIhE-A.mjs} +14 -4
  134. package/dist/{query-DYP_W1wp.mjs → query-CcA6DVZK.mjs} +1 -1
  135. package/dist/{query-Ctfg-5gy.cjs → query-CdCxzuaB.cjs} +1 -1
  136. package/dist/{rateLimitWindows-Dj_8voBK.cjs → rateLimitWindows-OpAmdOtC.cjs} +1 -1
  137. package/dist/{rateLimitWindows-CuEqk_0g.mjs → rateLimitWindows-ZtHZHe-l.mjs} +1 -1
  138. package/dist/{registerCommonHandlers-Cj084Sg7.cjs → registerCommonHandlers-CRjBoJLK.cjs} +30 -30
  139. package/dist/{registerCommonHandlers-BAlP7SGc.mjs → registerCommonHandlers-DF6bdDtd.mjs} +2 -2
  140. package/dist/{registerKillSessionHandler-qMju0ZfF.cjs → registerKillSessionHandler-7fOm6ooh.cjs} +6 -6
  141. package/dist/{registerKillSessionHandler-PD0jWtQo.mjs → registerKillSessionHandler-DDCKL3wf.mjs} +6 -6
  142. package/dist/{remoteSessionClient-Bn2qu5C5.mjs → remoteSessionClient-B2POSKFT.mjs} +5 -5
  143. package/dist/{remoteSessionClient-B7i7MkYV.cjs → remoteSessionClient-CFCn42bs.cjs} +5 -5
  144. package/dist/{reportProgressTool-gHItlSzz.mjs → reportProgressTool-tPxEvh6x.mjs} +4 -4
  145. package/dist/{reportProgressTool-CM1JFAHg.cjs → reportProgressTool-th4trcET.cjs} +4 -4
  146. package/dist/{resources-CvIlkzpP.cjs → resources-BPyN59Iv.cjs} +23 -2
  147. package/dist/{resources-y9jfyO-_.mjs → resources-CH1iP6Cv.mjs} +22 -3
  148. package/dist/{run-CNXwIe0A.cjs → run-C_FumCQk.cjs} +2767 -183
  149. package/dist/{run-BM4TxiyN.mjs → run-cKQBbVi4.mjs} +2762 -178
  150. package/dist/{runClaude-C_3I8hvR.mjs → runClaude-CYnM6krL.mjs} +34 -28
  151. package/dist/{runClaude-CWhj2V4Q.cjs → runClaude-z_2YC_aa.cjs} +35 -29
  152. package/dist/{runClaudeDeps-B81cOKnH.cjs → runClaudeDeps-CLubzWnA.cjs} +59 -122
  153. package/dist/{runClaudeDeps-QGrOeDe2.mjs → runClaudeDeps-duS06Pb4.mjs} +52 -114
  154. package/dist/{runGemini-BEdWEZLR.mjs → runGemini-C_Pc2EhH.mjs} +39 -37
  155. package/dist/{runGemini-CgRLYbt5.cjs → runGemini-vEoXV6qT.cjs} +67 -65
  156. package/dist/{runOpenClaw-C1NVmzOL.cjs → runOpenClaw-CXJCtMgB.cjs} +20 -20
  157. package/dist/{runOpenClaw-DdQZAYj1.mjs → runOpenClaw-Cxun1qLC.mjs} +19 -19
  158. package/dist/{sandbox-nocIjliq.cjs → sandbox-CO46H2tK.cjs} +4 -4
  159. package/dist/{sandbox-DjQUdCMG.mjs → sandbox-CsvPnTmz.mjs} +4 -4
  160. package/dist/{selfCheck-DCt4Uzbq.cjs → selfCheck-DIr7Gc0i.cjs} +39 -39
  161. package/dist/selfCheck-NamtBHVB.mjs +85 -0
  162. package/dist/{send-Ct7X4pPU.mjs → send-DMoFg6F1.mjs} +9 -9
  163. package/dist/{send-Dydf_hwZ.cjs → send-X2mfVEyr.cjs} +8 -8
  164. package/dist/{server-CosABFbd.cjs → server-BwTEdbkr.cjs} +6 -6
  165. package/dist/{server-DTQGZMxh.mjs → server-CkqQ0sRH.mjs} +4 -4
  166. package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
  167. package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
  168. package/dist/{sessionLock-DokGab2R.cjs → sessionLock-CdIRJlHH.cjs} +25 -5
  169. package/dist/{sessionLock-WYIyaVO4.mjs → sessionLock-JIfwCqMk.mjs} +24 -5
  170. package/dist/{sessionOps-S-qPBLFf.cjs → sessionOps-DVA-00nR.cjs} +4 -4
  171. package/dist/{sessionOps-BIGgRube.mjs → sessionOps-DqlftXxe.mjs} +5 -5
  172. package/dist/{sessionScanner-o5hnMi5e.mjs → sessionScanner-BI0Vo1xT.mjs} +3 -3
  173. package/dist/{sessionScanner-CIMM2hvZ.cjs → sessionScanner-BMwgGAhY.cjs} +3 -3
  174. package/dist/{sessions-BJHEZpi2.mjs → sessions-D6IimX7b.mjs} +11 -11
  175. package/dist/{sessions-JchI1w3z.cjs → sessions-DjgEcHaT.cjs} +10 -10
  176. package/dist/{setupOfflineReconnection-CNiAt5ZP.cjs → setupOfflineReconnection-CjuCiKY3.cjs} +2 -2
  177. package/dist/{setupOfflineReconnection-DMiBO2y9.mjs → setupOfflineReconnection-DgJK_4m1.mjs} +2 -2
  178. package/dist/{spawn-DgvUNYEo.mjs → spawn-Dvzy-tzc.mjs} +15 -15
  179. package/dist/{spawn-6PD7nnoC.cjs → spawn-rhF28shY.cjs} +15 -15
  180. package/dist/{spawnAgents-P006Hqio.mjs → spawnAgents-CCnlq-FI.mjs} +1 -1
  181. package/dist/{spawnAgents-DsXgegHM.cjs → spawnAgents-iwuqrgR9.cjs} +1 -1
  182. package/dist/{spawnHappyCLI-Dywezwk6.cjs → spawnHappyCLI-DnKmIsEt.cjs} +2 -2
  183. package/dist/{spawnHappyCLI-CCOrEtf9.mjs → spawnHappyCLI-Dq3LLXLb.mjs} +1 -1
  184. package/dist/{specialCommands-DPcd9edP.mjs → specialCommands-CcyZ1hGA.mjs} +3 -3
  185. package/dist/{specialCommands-QxPpkGKf.cjs → specialCommands-Zwr2C6A2.cjs} +3 -3
  186. package/dist/{startFileWatcher-DghDOCO4.mjs → startFileWatcher-4thXDK9d.mjs} +1 -1
  187. package/dist/{startFileWatcher-RECH5qY8.cjs → startFileWatcher-K6hJSyiR.cjs} +1 -1
  188. package/dist/startupSessionCreate-BfByJ16A.mjs +24 -0
  189. package/dist/startupSessionCreate-CKEbq0tL.cjs +26 -0
  190. package/dist/{streamRelay-DlUWKUpo.cjs → streamRelay-Gy8Xfnon.cjs} +1 -1
  191. package/dist/{streamRelay-DMV_TXfS.mjs → streamRelay-LcDvyEjK.mjs} +1 -1
  192. package/dist/{sync-D23jbqVa.cjs → sync-1hQ5KHpL.cjs} +1 -1
  193. package/dist/{sync-CSe0Rf45.mjs → sync-DO-2PU45.mjs} +1 -1
  194. package/dist/{systemPrompt-CFNKnh65.mjs → systemPrompt-BctLfMZs.mjs} +3 -3
  195. package/dist/{systemPrompt-BOy4kU4P.cjs → systemPrompt-Dj7pgkMK.cjs} +3 -3
  196. package/dist/{teams-DyY669f0.mjs → teams-Bu8YeOoF.mjs} +8 -8
  197. package/dist/{teams-Ov2BDT-A.cjs → teams-uQxUlyyz.cjs} +8 -8
  198. package/dist/{time-65DcU6Jx.mjs → time-BcoJaG8E.mjs} +1 -1
  199. package/dist/{time-CrwIMHta.cjs → time-nqa9shu8.cjs} +1 -1
  200. package/dist/{titleGenerator-CS_rh2_J.cjs → titleGenerator-D09XyYYG.cjs} +3 -3
  201. package/dist/{titleGenerator-CiAMxf7s.mjs → titleGenerator-D5r06bhf.mjs} +1 -1
  202. package/dist/{todo-KY-okGii.cjs → todo-CCOnL7pT.cjs} +6 -6
  203. package/dist/{todo-BDONw0sK.mjs → todo-D1q8146q.mjs} +6 -6
  204. package/dist/{tools-D8-PnZEG.mjs → tools-D2E--n1x.mjs} +3 -3
  205. package/dist/{tools-_w52DZG6.cjs → tools-DiCXnAC5.cjs} +3 -3
  206. package/dist/{uninstall-8vnLN-IE.cjs → uninstall-BrNwwwSD.cjs} +6 -6
  207. package/dist/{uninstall-_fjGRP9b.mjs → uninstall-CtwXi1Rt.mjs} +3 -3
  208. package/package.json +9 -8
  209. package/dist/machineMetadata-CLHS9sv_.cjs +0 -42
  210. package/dist/machineMetadata-D-g--oU_.mjs +0 -39
  211. package/dist/messageBuffer-BWlGgR3A.mjs +0 -71
  212. package/dist/messageBuffer-fJMH6uY8.cjs +0 -73
  213. package/dist/projectPath-ChLhdOyt.cjs +0 -13
  214. package/dist/selfCheck-CjCF4C3v.mjs +0 -85
@@ -1,17 +1,23 @@
1
1
  'use strict';
2
2
 
3
3
  var z = require('zod');
4
- var index = require('./index-C6O2vVjm.cjs');
4
+ var index = require('./index-Df2eHm3O.cjs');
5
5
  var axios = require('axios');
6
- var logger = require('./logger-C1GWx3gi.cjs');
7
- var configuration = require('./configuration-CMHZnp6G.cjs');
6
+ var logger = require('./logger-DgBwUSgS.cjs');
7
+ var configuration = require('./configuration-C8JgseHy.cjs');
8
8
  var contentLogMetadata = require('./contentLogMetadata-ZSFk_NjQ.cjs');
9
9
 
10
10
  z.z.object({
11
11
  teamsVersion: z.z.number().int().positive().optional(),
12
12
  teamLaunchVersion: z.z.number().int().positive().optional(),
13
+ /** B-689: daemon acts on the owner's team `retry-operation`. Absent on old daemons. */
14
+ teamRetryVersion: z.z.number().int().positive().optional(),
13
15
  /** B-586: daemon serves the `worktree-*` RPCs. Absent on old daemons. */
14
16
  worktreeVersion: z.z.number().int().positive().optional(),
17
+ /** B-688: daemon serves the `model-config-*` RPCs (harness model/provider config). */
18
+ modelConfigVersion: z.z.number().int().positive().optional(),
19
+ /** B-719: daemon serves `harness-install` (Install / Update buttons for coding-agent CLIs). */
20
+ harnessInstallVersion: z.z.number().int().positive().optional(),
15
21
  host: z.z.string(),
16
22
  platform: z.z.string(),
17
23
  happyCliVersion: z.z.string(),
@@ -76,7 +82,11 @@ const CliUpdateStateSchema = z.z.object({
76
82
  version: z.z.string().nullable(),
77
83
  detail: z.z.string().optional(),
78
84
  at: z.z.number()
79
- }).nullable().optional()
85
+ }).nullable().optional(),
86
+ /** B-718: the machine-level `cliAutoUpdate` setting (absent = not read yet / old daemon). */
87
+ autoUpdateEnabled: z.z.boolean().optional(),
88
+ /** B-718: the last install this machine completed, carried across its handover. */
89
+ lastInstall: z.z.object({ from: z.z.string(), to: z.z.string(), at: z.z.number(), source: z.z.string() }).nullable().optional()
80
90
  });
81
91
  const WebTerminalListItemSchema = z.z.object({
82
92
  id: z.z.string(),
@@ -1,15 +1,21 @@
1
1
  import { z } from 'zod';
2
- import { p as AgentVersionsSchema } from './index-DPOa4NhL.mjs';
2
+ import { p as AgentVersionsSchema } from './index-CeRXrGnH.mjs';
3
3
  import axios from 'axios';
4
- import { l as logger } from './logger-BtVhHnD8.mjs';
5
- import { c as configuration } from './configuration-WMi4idBB.mjs';
4
+ import { l as logger } from './logger-LFr8iPgl.mjs';
5
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
6
6
  import { c as contentLogMetadata } from './contentLogMetadata-BlWI0egu.mjs';
7
7
 
8
8
  z.object({
9
9
  teamsVersion: z.number().int().positive().optional(),
10
10
  teamLaunchVersion: z.number().int().positive().optional(),
11
+ /** B-689: daemon acts on the owner's team `retry-operation`. Absent on old daemons. */
12
+ teamRetryVersion: z.number().int().positive().optional(),
11
13
  /** B-586: daemon serves the `worktree-*` RPCs. Absent on old daemons. */
12
14
  worktreeVersion: z.number().int().positive().optional(),
15
+ /** B-688: daemon serves the `model-config-*` RPCs (harness model/provider config). */
16
+ modelConfigVersion: z.number().int().positive().optional(),
17
+ /** B-719: daemon serves `harness-install` (Install / Update buttons for coding-agent CLIs). */
18
+ harnessInstallVersion: z.number().int().positive().optional(),
13
19
  host: z.string(),
14
20
  platform: z.string(),
15
21
  happyCliVersion: z.string(),
@@ -74,7 +80,11 @@ const CliUpdateStateSchema = z.object({
74
80
  version: z.string().nullable(),
75
81
  detail: z.string().optional(),
76
82
  at: z.number()
77
- }).nullable().optional()
83
+ }).nullable().optional(),
84
+ /** B-718: the machine-level `cliAutoUpdate` setting (absent = not read yet / old daemon). */
85
+ autoUpdateEnabled: z.boolean().optional(),
86
+ /** B-718: the last install this machine completed, carried across its handover. */
87
+ lastInstall: z.object({ from: z.string(), to: z.string(), at: z.number(), source: z.string() }).nullable().optional()
78
88
  });
79
89
  const WebTerminalListItemSchema = z.object({
80
90
  id: z.string(),
@@ -1,6 +1,6 @@
1
1
  import { query as query$1 } from '@anthropic-ai/claude-agent-sdk';
2
2
  import { p as pinSmallFastModel, e as ensureLocalProxyBypass } from './smallFastModel-BLNgMrwR.mjs';
3
- import { l as logger } from './logger-BtVhHnD8.mjs';
3
+ import { l as logger } from './logger-LFr8iPgl.mjs';
4
4
  import { s as snapshotTree, k as killSurvivors } from './processTreeSnapshot-CuLJDNC-.mjs';
5
5
 
6
6
  const HAPPY_DEFAULT_ENTRYPOINT = "remote_mobile";
@@ -2,7 +2,7 @@
2
2
 
3
3
  var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
4
4
  var smallFastModel = require('./smallFastModel-D_uxGMo3.cjs');
5
- var logger = require('./logger-C1GWx3gi.cjs');
5
+ var logger = require('./logger-DgBwUSgS.cjs');
6
6
  var processTreeSnapshot = require('./processTreeSnapshot-mDbnuojn.cjs');
7
7
 
8
8
  const HAPPY_DEFAULT_ENTRYPOINT = "remote_mobile";
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-C1GWx3gi.cjs');
3
+ var logger = require('./logger-DgBwUSgS.cjs');
4
4
 
5
5
  const MAX_WINDOWS_PER_PROVIDER = 8;
6
6
  function finite(value) {
@@ -1,4 +1,4 @@
1
- import { l as logger } from './logger-BtVhHnD8.mjs';
1
+ import { l as logger } from './logger-LFr8iPgl.mjs';
2
2
 
3
3
  const MAX_WINDOWS_PER_PROVIDER = 8;
4
4
  function finite(value) {
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-C1GWx3gi.cjs');
3
+ var logger = require('./logger-DgBwUSgS.cjs');
4
4
  var child_process = require('child_process');
5
5
  var util = require('util');
6
6
  var fs = require('fs/promises');
7
- var crypto = require('crypto');
8
- var path = require('path');
7
+ var require$$3 = require('crypto');
8
+ var require$$1 = require('path');
9
9
  var spawn = require('cross-spawn');
10
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
10
+ var projectPath = require('./projectPath-C3ioB4Bu.cjs');
11
11
  var os = require('os');
12
- var configuration = require('./configuration-CMHZnp6G.cjs');
12
+ var configuration = require('./configuration-C8JgseHy.cjs');
13
13
 
14
14
  function run$1(args, options) {
15
- const RUNNER_PATH = path.resolve(path.join(projectPath.projectPath(), "scripts", "ripgrep_launcher.cjs"));
15
+ const RUNNER_PATH = require$$1.resolve(require$$1.join(projectPath.projectPath(), "scripts", "ripgrep_launcher.cjs"));
16
16
  return new Promise((resolve2, reject) => {
17
17
  const child = spawn.spawn("node", [RUNNER_PATH, JSON.stringify(args)], {
18
18
  stdio: ["pipe", "pipe", "pipe"],
@@ -43,7 +43,7 @@ function run$1(args, options) {
43
43
  function getBinaryPath() {
44
44
  const platformName = os.platform();
45
45
  const binaryName = platformName === "win32" ? "difft.exe" : "difft";
46
- return path.resolve(path.join(projectPath.projectPath(), "tools", "unpacked", binaryName));
46
+ return require$$1.resolve(require$$1.join(projectPath.projectPath(), "tools", "unpacked", binaryName));
47
47
  }
48
48
  function run(args, options) {
49
49
  const binaryPath = getBinaryPath();
@@ -80,9 +80,9 @@ function run(args, options) {
80
80
  }
81
81
 
82
82
  function validatePath(targetPath, workingDirectory) {
83
- const resolvedTarget = path.resolve(workingDirectory, targetPath);
84
- const resolvedWorkingDir = path.resolve(workingDirectory);
85
- if (!resolvedTarget.startsWith(resolvedWorkingDir + path.sep) && resolvedTarget !== resolvedWorkingDir) {
83
+ const resolvedTarget = require$$1.resolve(workingDirectory, targetPath);
84
+ const resolvedWorkingDir = require$$1.resolve(workingDirectory);
85
+ if (!resolvedTarget.startsWith(resolvedWorkingDir + require$$1.sep) && resolvedTarget !== resolvedWorkingDir) {
86
86
  return {
87
87
  valid: false,
88
88
  resolvedPath: resolvedTarget,
@@ -155,9 +155,9 @@ function createUploadFileHandlers(happyHomeDir, now = Date.now, pathQuoteStyle =
155
155
  const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
156
156
  await Promise.all(entries.map(async (entry) => {
157
157
  if (!entry.isFile() || !/^\..+\.[A-Za-z0-9_-]{8,80}\.part$/.test(entry.name)) return;
158
- const path$1 = path.join(dir, entry.name);
159
- const fileStat = await fs.stat(path$1).catch(() => null);
160
- if (fileStat && fileStat.mtimeMs < cutoff) await fs.unlink(path$1).catch(() => {
158
+ const path = require$$1.join(dir, entry.name);
159
+ const fileStat = await fs.stat(path).catch(() => null);
160
+ if (fileStat && fileStat.mtimeMs < cutoff) await fs.unlink(path).catch(() => {
161
161
  });
162
162
  }));
163
163
  };
@@ -165,12 +165,12 @@ function createUploadFileHandlers(happyHomeDir, now = Date.now, pathQuoteStyle =
165
165
  let tempPath = null;
166
166
  try {
167
167
  const buffer = decodeUploadBase64(data.content, MAX_USER_UPLOAD_BYTES);
168
- const dir = path.join(happyHomeDir, "uploads", safeSegment(data.subdir, "misc", 80));
168
+ const dir = require$$1.join(happyHomeDir, "uploads", safeSegment(data.subdir, "misc", 80));
169
169
  await fs.mkdir(dir, { recursive: true });
170
170
  const name = safeFileName(data.name);
171
- const token = crypto.randomUUID().replace(/-/g, "").slice(0, 12);
172
- const target = path.join(dir, uniqueFileName(name, token));
173
- tempPath = path.join(dir, `.${name}.legacy_${crypto.randomUUID().replace(/-/g, "")}.part`);
171
+ const token = require$$3.randomUUID().replace(/-/g, "").slice(0, 12);
172
+ const target = require$$1.join(dir, uniqueFileName(name, token));
173
+ tempPath = require$$1.join(dir, `.${name}.legacy_${require$$3.randomUUID().replace(/-/g, "")}.part`);
174
174
  await fs.writeFile(tempPath, buffer, { flag: "wx" });
175
175
  await fs.rename(tempPath, target);
176
176
  tempPath = null;
@@ -191,12 +191,12 @@ function createUploadFileHandlers(happyHomeDir, now = Date.now, pathQuoteStyle =
191
191
  }
192
192
  if (active.has(uploadId)) throw new Error("Upload id is already active");
193
193
  if (active.size >= MAX_ACTIVE_UPLOADS) throw new Error("Too many active uploads");
194
- const dir = path.join(happyHomeDir, "uploads", safeSegment(data.subdir, "misc", 80));
194
+ const dir = require$$1.join(happyHomeDir, "uploads", safeSegment(data.subdir, "misc", 80));
195
195
  await fs.mkdir(dir, { recursive: true });
196
196
  await sweepExpiredFiles(dir);
197
197
  const name = safeFileName(data.name);
198
- const targetPath = path.join(dir, uniqueFileName(name, crypto.randomUUID().replace(/-/g, "").slice(0, 12)));
199
- const tempPath = path.join(dir, `.${name}.${uploadId}.part`);
198
+ const targetPath = require$$1.join(dir, uniqueFileName(name, require$$3.randomUUID().replace(/-/g, "").slice(0, 12)));
199
+ const tempPath = require$$1.join(dir, `.${name}.${uploadId}.part`);
200
200
  await fs.writeFile(tempPath, Buffer.alloc(0), { flag: "wx" });
201
201
  active.set(uploadId, { tempPath, targetPath, totalSize: data.totalSize, received: 0, touchedAt: now() });
202
202
  return { success: true, size: 0 };
@@ -333,7 +333,7 @@ function registerCommonHandlers(rpcHandlerManager, workingDirectory) {
333
333
  if (data.expectedHash !== null && data.expectedHash !== void 0) {
334
334
  try {
335
335
  const existingBuffer = await fs.readFile(validation.resolvedPath);
336
- const existingHash = crypto.createHash("sha256").update(existingBuffer).digest("hex");
336
+ const existingHash = require$$3.createHash("sha256").update(existingBuffer).digest("hex");
337
337
  if (existingHash !== data.expectedHash) {
338
338
  return {
339
339
  success: false,
@@ -366,7 +366,7 @@ function registerCommonHandlers(rpcHandlerManager, workingDirectory) {
366
366
  }
367
367
  const buffer = Buffer.from(data.content, "base64");
368
368
  await fs.writeFile(validation.resolvedPath, buffer);
369
- const hash = crypto.createHash("sha256").update(buffer).digest("hex");
369
+ const hash = require$$3.createHash("sha256").update(buffer).digest("hex");
370
370
  return { success: true, hash };
371
371
  } catch (error) {
372
372
  logger.logger.debug("Failed to write file:", error);
@@ -387,7 +387,7 @@ function registerCommonHandlers(rpcHandlerManager, workingDirectory) {
387
387
  const entries = await fs.readdir(directoryPath, { withFileTypes: true });
388
388
  const directoryEntries = await Promise.all(
389
389
  entries.map(async (entry) => {
390
- const fullPath = path.join(directoryPath, entry.name);
390
+ const fullPath = require$$1.join(directoryPath, entry.name);
391
391
  let type = "other";
392
392
  let size;
393
393
  let modified;
@@ -428,26 +428,26 @@ function registerCommonHandlers(rpcHandlerManager, workingDirectory) {
428
428
  if (!validation.valid) {
429
429
  return { success: false, error: validation.error };
430
430
  }
431
- async function buildTree(path$1, name, currentDepth) {
431
+ async function buildTree(path, name, currentDepth) {
432
432
  try {
433
- const stats = await fs.stat(path$1);
433
+ const stats = await fs.stat(path);
434
434
  const node = {
435
435
  name,
436
- path: path$1,
436
+ path,
437
437
  type: stats.isDirectory() ? "directory" : "file",
438
438
  size: stats.size,
439
439
  modified: stats.mtime.getTime()
440
440
  };
441
441
  if (stats.isDirectory() && currentDepth < data.maxDepth) {
442
- const entries = await fs.readdir(path$1, { withFileTypes: true });
442
+ const entries = await fs.readdir(path, { withFileTypes: true });
443
443
  const children = [];
444
444
  await Promise.all(
445
445
  entries.map(async (entry) => {
446
446
  if (entry.isSymbolicLink()) {
447
- logger.logger.debug(`Skipping symlink: ${path.join(path$1, entry.name)}`);
447
+ logger.logger.debug(`Skipping symlink: ${require$$1.join(path, entry.name)}`);
448
448
  return;
449
449
  }
450
- const childPath = path.join(path$1, entry.name);
450
+ const childPath = require$$1.join(path, entry.name);
451
451
  const childNode = await buildTree(childPath, entry.name, currentDepth + 1);
452
452
  if (childNode) {
453
453
  children.push(childNode);
@@ -463,7 +463,7 @@ function registerCommonHandlers(rpcHandlerManager, workingDirectory) {
463
463
  }
464
464
  return node;
465
465
  } catch (error) {
466
- logger.logger.debug(`Failed to process ${path$1}:`, error instanceof Error ? error.message : String(error));
466
+ logger.logger.debug(`Failed to process ${path}:`, error instanceof Error ? error.message : String(error));
467
467
  return null;
468
468
  }
469
469
  }
@@ -1,4 +1,4 @@
1
- import { l as logger } from './logger-BtVhHnD8.mjs';
1
+ import { l as logger } from './logger-LFr8iPgl.mjs';
2
2
  import { spawn as spawn$1, exec } from 'child_process';
3
3
  import { promisify } from 'util';
4
4
  import { mkdir, writeFile, appendFile, stat, rename, unlink, readdir, readFile } from 'fs/promises';
@@ -7,7 +7,7 @@ import { resolve, join, sep } from 'path';
7
7
  import { spawn } from 'cross-spawn';
8
8
  import { p as projectPath } from './projectPath-BTBIMB57.mjs';
9
9
  import { platform } from 'os';
10
- import { c as configuration } from './configuration-WMi4idBB.mjs';
10
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
11
11
 
12
12
  function run$1(args, options) {
13
13
  const RUNNER_PATH = resolve(join(projectPath(), "scripts", "ripgrep_launcher.cjs"));
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
- var logger = require('./logger-C1GWx3gi.cjs');
3
+ var logger = require('./logger-DgBwUSgS.cjs');
4
4
  require('axios');
5
5
  require('node:events');
6
6
  require('socket.io-client');
7
- require('./pushNotifications-DaLQUyi0.cjs');
7
+ require('./pushNotifications-BXoOSq_G.cjs');
8
8
  require('node:crypto');
9
9
  require('tweetnacl');
10
- require('./configuration-CMHZnp6G.cjs');
11
- require('./index-C6O2vVjm.cjs');
12
- require('./registerCommonHandlers-Cj084Sg7.cjs');
10
+ require('./configuration-C8JgseHy.cjs');
11
+ require('./index-Df2eHm3O.cjs');
12
+ require('./registerCommonHandlers-CRjBoJLK.cjs');
13
13
  require('os');
14
14
  require('child_process');
15
15
  require('@paralleldrive/cuid2');
16
- require('./persistence-BegE7NPa.cjs');
16
+ require('./persistence-BY-D00wT.cjs');
17
17
  require('chalk');
18
18
  require('./types-CRS-srZK.cjs');
19
19
 
@@ -1,17 +1,17 @@
1
- import { l as logger } from './logger-BtVhHnD8.mjs';
1
+ import { l as logger } from './logger-LFr8iPgl.mjs';
2
2
  import 'axios';
3
3
  import 'node:events';
4
4
  import 'socket.io-client';
5
- import './pushNotifications-BdFjDjQe.mjs';
5
+ import './pushNotifications-DXGIhE-A.mjs';
6
6
  import 'node:crypto';
7
7
  import 'tweetnacl';
8
- import './configuration-WMi4idBB.mjs';
9
- import './index-DPOa4NhL.mjs';
10
- import './registerCommonHandlers-BAlP7SGc.mjs';
8
+ import './configuration-BPrfb17M.mjs';
9
+ import './index-CeRXrGnH.mjs';
10
+ import './registerCommonHandlers-DF6bdDtd.mjs';
11
11
  import 'os';
12
12
  import 'child_process';
13
13
  import '@paralleldrive/cuid2';
14
- import './persistence-Cr-wutZ4.mjs';
14
+ import './persistence-D2Djrf7t.mjs';
15
15
  import 'chalk';
16
16
  import './types-CkqAACXx.mjs';
17
17
 
@@ -1,10 +1,10 @@
1
- import { h as resumeDaemonSession, l as listDaemonSessions } from './controlClient-BWUJrj3t.mjs';
2
- import { d as archiveSession, u as unarchiveSession, h as sessionLiveness, e as sendUserMessage, i as readSessionState, o as openUserScopedSocket } from './sessionOps-BIGgRube.mjs';
3
- import { d as delay } from './time-65DcU6Jx.mjs';
1
+ import { h as resumeDaemonSession, l as listDaemonSessions } from './controlClient-CkNpT5zS.mjs';
2
+ import { d as archiveSession, u as unarchiveSession, h as sessionLiveness, e as sendUserMessage, i as readSessionState, o as openUserScopedSocket } from './sessionOps-DqlftXxe.mjs';
3
+ import { d as delay } from './time-BcoJaG8E.mjs';
4
4
  import axios from 'axios';
5
5
  import { hostname } from 'node:os';
6
- import { c as configuration } from './configuration-WMi4idBB.mjs';
7
- import { r as readSettings, b as readCredentialsForConfiguredRelay } from './persistence-Cr-wutZ4.mjs';
6
+ import { c as configuration } from './configuration-BPrfb17M.mjs';
7
+ import { r as readSettings, b as readCredentialsForConfiguredRelay } from './persistence-D2Djrf7t.mjs';
8
8
  import { randomUUID } from 'node:crypto';
9
9
 
10
10
  const ACTIVE_FRESH_WINDOW_MS = 15 * 60 * 1e3;
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var controlClient = require('./controlClient-C-5qCt8W.cjs');
4
- var sessionOps = require('./sessionOps-S-qPBLFf.cjs');
5
- var time = require('./time-CrwIMHta.cjs');
3
+ var controlClient = require('./controlClient-D68Zj7Q-.cjs');
4
+ var sessionOps = require('./sessionOps-DVA-00nR.cjs');
5
+ var time = require('./time-nqa9shu8.cjs');
6
6
  var axios = require('axios');
7
7
  var os = require('node:os');
8
- var configuration = require('./configuration-CMHZnp6G.cjs');
9
- var persistence = require('./persistence-BegE7NPa.cjs');
8
+ var configuration = require('./configuration-C8JgseHy.cjs');
9
+ var persistence = require('./persistence-BY-D00wT.cjs');
10
10
  var node_crypto = require('node:crypto');
11
11
 
12
12
  const ACTIVE_FRESH_WINDOW_MS = 15 * 60 * 1e3;
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
- import { k as AutomationNameSchema, c as AutomationPrecheckSchema, l as AutomationConcurrencySchema, m as AutomationActionSchema, o as AutomationTriggerSchema } from './index-DPOa4NhL.mjs';
3
- import { a as authenticatedAutomationsClient, b as automationRunIdFromEnv } from './client-wo9nbxuf.mjs';
2
+ import { k as AutomationNameSchema, c as AutomationPrecheckSchema, l as AutomationConcurrencySchema, m as AutomationActionSchema, o as AutomationTriggerSchema } from './index-CeRXrGnH.mjs';
3
+ import { a as authenticatedAutomationsClient, b as automationRunIdFromEnv } from './client-CXOnzuOy.mjs';
4
4
  import { u as updateAutomationChecked, c as createAutomationChecked } from './precheckCompat-DeEbilbr.mjs';
5
- import { P as ProjectsUnsupportedError, a as ProjectRequestError, s as sharedProjectsClient } from './client-BhoEBnuN.mjs';
6
- import { f as formatContextForTool } from './prompt-BOouDaTM.mjs';
5
+ import { P as ProjectsUnsupportedError, a as ProjectRequestError, s as sharedProjectsClient } from './client-BKyU66lg.mjs';
6
+ import { f as formatContextForTool } from './prompt-QHuFx9j6.mjs';
7
7
  import { R as REPORT_PROGRESS_TOOL_NAME, d as REPORT_PROGRESS_TOOL_TITLE, e as REPORT_PROGRESS_TOOL_DESCRIPTION } from './agentGuidance-BDYt2Qy2.mjs';
8
8
 
9
9
  const AUTOMATION_TOOL_NAMES = [
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var z = require('zod');
4
- var index = require('./index-C6O2vVjm.cjs');
5
- var client = require('./client-CuVdN6PP.cjs');
4
+ var index = require('./index-Df2eHm3O.cjs');
5
+ var client = require('./client-D_U2VjO3.cjs');
6
6
  var precheckCompat = require('./precheckCompat-CWOi5c9L.cjs');
7
- var client$1 = require('./client-ZjOsn6nZ.cjs');
8
- var prompt = require('./prompt-lgF9IE82.cjs');
7
+ var client$1 = require('./client-DWs6k041.cjs');
8
+ var prompt = require('./prompt-Bof2aQkI.cjs');
9
9
  var agentGuidance = require('./agentGuidance-BtBx2xxE.cjs');
10
10
 
11
11
  const AUTOMATION_TOOL_NAMES = [
@@ -11,7 +11,7 @@ Use the team_* tools in a managed Very Happy session. If absent, explain that th
11
11
 
12
12
  Start with team_inspect if already assigned. Otherwise team_create or team_join connects the current session. A scoped worker cannot create another root identity or use account-wide tools to bypass its scope.
13
13
 
14
- Work yourself when delegation would add needless overhead. Delegate independent work with a clear goal and acceptance criteria. When delegating within your assignment, pass its parentTaskId. Members may delegate further within their existing authority. After delegating child work, wait for those results instead of continuing parallel edits yourself. Waiting parents yield their execution slot to their children; the team limit counts progressing leaf assignments, not OS processes.
14
+ A team lead delegates by default (see the lead playbook). A member works itself when delegation would add needless overhead. Delegate independent work with a clear goal and acceptance criteria. When delegating within your assignment, pass its parentTaskId. Members may delegate further within their existing authority. After delegating child work, wait for those results instead of continuing parallel edits yourself. Waiting parents yield their execution slot to their children; the team limit counts progressing leaf assignments, not OS processes.
15
15
 
16
16
  Name exactly one integrator for each team. Workers edit only their assigned worktrees; they must not merge main, publish releases, change global daemon or npm installations, or allocate shared backlog IDs. The integrator serializes these operations. Across teams, the owner coordinates shared resources: a worktree is not a global lock.
17
17
 
@@ -25,6 +25,17 @@ A root member may create a persistent schedule for itself with the schedule tool
25
25
 
26
26
  On restart inspect authoritative state and messages before taking new actions. Do not invent completed work from a previous context. Scope credentials are runtime-owned; never read, print, or copy them into prompts.
27
27
  `;
28
+ const TEAM_LEAD_PLAYBOOK = `## Lead playbook
29
+ You coordinate; members do the work. Follow these defaults unless the user says otherwise.
30
+ 1. Delegate first. You split, assign, decide, review and report. Do not write code yourself; only tiny bookkeeping edits are yours. Every file you read or edit spends the context you need to coordinate.
31
+ 2. Run work in parallel. Delegate independent pieces to different members at the same time, within the team's parallel limit (team_inspect shows maxParallel). Accept or return submissions promptly to free slots. Give follow-up work to the member who already worked on that area (assigneeBotId); it keeps the context.
32
+ 3. Prevent conflicts. Before delegating, name the files or modules each task will touch. Give work on the same area to one member in sequence, or agree the boundary and who rebases onto whom before both start. Relay overlaps between members yourself. Merges are serialized and yours.
33
+ 4. Keep the team context. When the user gives a new instruction, or you make a decision, assign work, accept or return a result, or agree a conflict rule, record it at once with mcp__happy__project_note (kind decision, finding or handoff) in the team's project. After a context compaction or restart, read mcp__happy__project_context (full=true) and team_inspect before acting. If it answers "not in a project", ask the user to link this team to a project on the team page.
34
+ 5. Write complete task briefs. Each goal states the background with the user's own words, what to do, acceptance criteria, boundaries (no merging, releasing or touching production unless the user authorized it), and the evidence to hand back (tests, screenshots, CI).
35
+ 6. Review before accepting. A submission is not completion: check its evidence before team_accept. With team_return, say exactly what is wrong and how to fix it. Have a different member re-review security-sensitive changes. An idle member is neither done nor stuck; run team_inspect before chasing it.
36
+ 7. Communicate briefly. Set recipientBotId on every team_message; without it the message goes to the task's assignee. Report to the user conclusion first, with only what they must decide or know.
37
+ 8. Never create a team to recover. If a team tool says this session has no team or no team scope, do not call team_create or team_join: run team_inspect, or tell the user and wait.`;
38
+ const TEAM_MEMBER_RULES = `Before starting, read the team's project context with mcp__happy__project_context; it returns "not in a project" when the team has none. Do only what your task asks. If your work overlaps another member's or needs a wider scope, tell your lead with team_message (recipientBotId = the lead) before going further. Submit with evidence: commands and results, artifact paths, screenshots or CI links.`;
28
39
  const PI_TEAMS_EXTENSION = `// Managed by Very Happy Agent Teams.
29
40
  export default async function(pi) {
30
41
  const managed = !!process.env.HAPPY_MCP_URL;
@@ -45,7 +56,15 @@ export default async function(pi) {
45
56
  const usage = ctx.getContextUsage?.();
46
57
  const contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow;
47
58
  if (!(contextWindow > 0)) return;
48
- const snapshot = {source:'pi', tokens:usage?.tokens ?? null, contextWindow};
59
+ // B-727: model + same-id registry entries let the wrapper tell pi's 128k default from a configured window.
60
+ const model = typeof ctx.model?.id === 'string' ? ctx.model.id.slice(0, 200) : null;
61
+ const provider = typeof ctx.model?.provider === 'string' ? ctx.model.provider.slice(0, 200) : null;
62
+ let peers = [];
63
+ try {
64
+ const bare = model ? model.split('/').pop() : null;
65
+ peers = (ctx.modelRegistry?.getAll?.() || []).filter(m => m && m.provider !== provider && (m.id === model || m.id === bare) && m.contextWindow > 0).slice(0, 8).map(m => ({provider:String(m.provider).slice(0, 200), contextWindow:m.contextWindow}));
66
+ } catch {}
67
+ const snapshot = {source:'pi', tokens:usage?.tokens ?? null, contextWindow, model, provider, event:name, peers};
49
68
  reporting = reporting.catch(() => {}).then(async () => {
50
69
  try { await fetch(contextEndpoint, {method:'POST', redirect:'error', headers:{'content-type':'application/json'}, body:JSON.stringify(snapshot), signal:AbortSignal.timeout(2000)}); } catch {}
51
70
  });
@@ -147,4 +166,6 @@ export default async function(pi) {
147
166
  `;
148
167
 
149
168
  exports.PI_TEAMS_EXTENSION = PI_TEAMS_EXTENSION;
169
+ exports.TEAM_LEAD_PLAYBOOK = TEAM_LEAD_PLAYBOOK;
170
+ exports.TEAM_MEMBER_RULES = TEAM_MEMBER_RULES;
150
171
  exports.TEAM_SKILL = TEAM_SKILL;
@@ -9,7 +9,7 @@ Use the team_* tools in a managed Very Happy session. If absent, explain that th
9
9
 
10
10
  Start with team_inspect if already assigned. Otherwise team_create or team_join connects the current session. A scoped worker cannot create another root identity or use account-wide tools to bypass its scope.
11
11
 
12
- Work yourself when delegation would add needless overhead. Delegate independent work with a clear goal and acceptance criteria. When delegating within your assignment, pass its parentTaskId. Members may delegate further within their existing authority. After delegating child work, wait for those results instead of continuing parallel edits yourself. Waiting parents yield their execution slot to their children; the team limit counts progressing leaf assignments, not OS processes.
12
+ A team lead delegates by default (see the lead playbook). A member works itself when delegation would add needless overhead. Delegate independent work with a clear goal and acceptance criteria. When delegating within your assignment, pass its parentTaskId. Members may delegate further within their existing authority. After delegating child work, wait for those results instead of continuing parallel edits yourself. Waiting parents yield their execution slot to their children; the team limit counts progressing leaf assignments, not OS processes.
13
13
 
14
14
  Name exactly one integrator for each team. Workers edit only their assigned worktrees; they must not merge main, publish releases, change global daemon or npm installations, or allocate shared backlog IDs. The integrator serializes these operations. Across teams, the owner coordinates shared resources: a worktree is not a global lock.
15
15
 
@@ -23,6 +23,17 @@ A root member may create a persistent schedule for itself with the schedule tool
23
23
 
24
24
  On restart inspect authoritative state and messages before taking new actions. Do not invent completed work from a previous context. Scope credentials are runtime-owned; never read, print, or copy them into prompts.
25
25
  `;
26
+ const TEAM_LEAD_PLAYBOOK = `## Lead playbook
27
+ You coordinate; members do the work. Follow these defaults unless the user says otherwise.
28
+ 1. Delegate first. You split, assign, decide, review and report. Do not write code yourself; only tiny bookkeeping edits are yours. Every file you read or edit spends the context you need to coordinate.
29
+ 2. Run work in parallel. Delegate independent pieces to different members at the same time, within the team's parallel limit (team_inspect shows maxParallel). Accept or return submissions promptly to free slots. Give follow-up work to the member who already worked on that area (assigneeBotId); it keeps the context.
30
+ 3. Prevent conflicts. Before delegating, name the files or modules each task will touch. Give work on the same area to one member in sequence, or agree the boundary and who rebases onto whom before both start. Relay overlaps between members yourself. Merges are serialized and yours.
31
+ 4. Keep the team context. When the user gives a new instruction, or you make a decision, assign work, accept or return a result, or agree a conflict rule, record it at once with mcp__happy__project_note (kind decision, finding or handoff) in the team's project. After a context compaction or restart, read mcp__happy__project_context (full=true) and team_inspect before acting. If it answers "not in a project", ask the user to link this team to a project on the team page.
32
+ 5. Write complete task briefs. Each goal states the background with the user's own words, what to do, acceptance criteria, boundaries (no merging, releasing or touching production unless the user authorized it), and the evidence to hand back (tests, screenshots, CI).
33
+ 6. Review before accepting. A submission is not completion: check its evidence before team_accept. With team_return, say exactly what is wrong and how to fix it. Have a different member re-review security-sensitive changes. An idle member is neither done nor stuck; run team_inspect before chasing it.
34
+ 7. Communicate briefly. Set recipientBotId on every team_message; without it the message goes to the task's assignee. Report to the user conclusion first, with only what they must decide or know.
35
+ 8. Never create a team to recover. If a team tool says this session has no team or no team scope, do not call team_create or team_join: run team_inspect, or tell the user and wait.`;
36
+ const TEAM_MEMBER_RULES = `Before starting, read the team's project context with mcp__happy__project_context; it returns "not in a project" when the team has none. Do only what your task asks. If your work overlaps another member's or needs a wider scope, tell your lead with team_message (recipientBotId = the lead) before going further. Submit with evidence: commands and results, artifact paths, screenshots or CI links.`;
26
37
  const PI_TEAMS_EXTENSION = `// Managed by Very Happy Agent Teams.
27
38
  export default async function(pi) {
28
39
  const managed = !!process.env.HAPPY_MCP_URL;
@@ -43,7 +54,15 @@ export default async function(pi) {
43
54
  const usage = ctx.getContextUsage?.();
44
55
  const contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow;
45
56
  if (!(contextWindow > 0)) return;
46
- const snapshot = {source:'pi', tokens:usage?.tokens ?? null, contextWindow};
57
+ // B-727: model + same-id registry entries let the wrapper tell pi's 128k default from a configured window.
58
+ const model = typeof ctx.model?.id === 'string' ? ctx.model.id.slice(0, 200) : null;
59
+ const provider = typeof ctx.model?.provider === 'string' ? ctx.model.provider.slice(0, 200) : null;
60
+ let peers = [];
61
+ try {
62
+ const bare = model ? model.split('/').pop() : null;
63
+ peers = (ctx.modelRegistry?.getAll?.() || []).filter(m => m && m.provider !== provider && (m.id === model || m.id === bare) && m.contextWindow > 0).slice(0, 8).map(m => ({provider:String(m.provider).slice(0, 200), contextWindow:m.contextWindow}));
64
+ } catch {}
65
+ const snapshot = {source:'pi', tokens:usage?.tokens ?? null, contextWindow, model, provider, event:name, peers};
47
66
  reporting = reporting.catch(() => {}).then(async () => {
48
67
  try { await fetch(contextEndpoint, {method:'POST', redirect:'error', headers:{'content-type':'application/json'}, body:JSON.stringify(snapshot), signal:AbortSignal.timeout(2000)}); } catch {}
49
68
  });
@@ -144,4 +163,4 @@ export default async function(pi) {
144
163
  }
145
164
  `;
146
165
 
147
- export { PI_TEAMS_EXTENSION as P, TEAM_SKILL as T };
166
+ export { PI_TEAMS_EXTENSION as P, TEAM_SKILL as T, TEAM_LEAD_PLAYBOOK as a, TEAM_MEMBER_RULES as b };