very-happy-cli 0.2.178 → 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 (217) hide show
  1. package/dist/{AcpBackend-DCQXHRzT.mjs → AcpBackend-B8Zi30Zh.mjs} +135 -16
  2. package/dist/{AcpBackend-CDkAQXYf.cjs → AcpBackend-DfRDtMcG.cjs} +135 -16
  3. package/dist/{AcpSessionManager-DckmUZza.cjs → AcpSessionManager-CASKOnOj.cjs} +38 -4
  4. package/dist/{AcpSessionManager-BXrQcqwC.mjs → AcpSessionManager-i8Rab0xT.mjs} +38 -4
  5. package/dist/{BasePermissionHandler-BVlrEhIi.mjs → BasePermissionHandler-26fKbRCm.mjs} +5 -2
  6. package/dist/{BasePermissionHandler-DyLmKKtO.cjs → BasePermissionHandler-BlM_tfej.cjs} +5 -2
  7. package/dist/acpSessionResume-B9l54P-X.mjs +67 -0
  8. package/dist/acpSessionResume-CR5pmgVo.cjs +74 -0
  9. package/dist/{agentHome-CEp9RMyK.cjs → agentHome-C7Sb7-Tz.cjs} +4 -4
  10. package/dist/{agentHome-C1xi37as.mjs → agentHome-CmGy0NWv.mjs} +4 -4
  11. package/dist/{api-JANhFdZV.cjs → api-DM7b1OKj.cjs} +38 -262
  12. package/dist/{api-Dib0dmqC.mjs → api-Hov8p7CA.mjs} +32 -256
  13. package/dist/{apiMachine-DNTJidYH.mjs → apiMachine-CwGEhQDT.mjs} +62 -15
  14. package/dist/{apiMachine-QhK-sKcr.cjs → apiMachine-DkGRj-Ai.cjs} +64 -17
  15. package/dist/{attachmentContent-bpQTBJ0y.cjs → attachmentContent-CEm13_gF.cjs} +4 -4
  16. package/dist/{attachmentContent-DkkdpSSJ.mjs → attachmentContent-CIn4iPEk.mjs} +2 -2
  17. package/dist/{auth-BRjd2esb.mjs → auth-BG1DY0gj.mjs} +5 -5
  18. package/dist/{auth-DgIV0Cvt.cjs → auth-CBXnm-Mj.cjs} +5 -5
  19. package/dist/{auth-omWDtgR8.cjs → auth-Dawj7pP5.cjs} +8 -8
  20. package/dist/{auth-DNct7VUi.mjs → auth-rggxMpEE.mjs} +8 -8
  21. package/dist/{auto-DKGFOJBo.mjs → auto-CXXLXGeL.mjs} +19 -18
  22. package/dist/{auto-CI16FZmX.cjs → auto-CbYOfoPS.cjs} +19 -18
  23. package/dist/{backgroundTaskActivity-BVwJBl02.mjs → backgroundTaskActivity-8PdPxrvy.mjs} +1 -1
  24. package/dist/{bootstrap-DCQ87Aan.cjs → bootstrap-DoA7okld.cjs} +2 -2
  25. package/dist/{bootstrap-BUagGC_-.mjs → bootstrap-Dt5I1SOl.mjs} +2 -2
  26. package/dist/{browser-Dj_DYQEh.mjs → browser-DUNetFT4.mjs} +1 -1
  27. package/dist/{browser-CSKhc0Bl.cjs → browser-DZ6qRtfH.cjs} +1 -1
  28. package/dist/{claudeCliPath-U4HHmV4r.cjs → claudeCliPath-GaP3UUz1.cjs} +1 -1
  29. package/dist/{claudeLocal-CdIVnOZp.cjs → claudeLocal--DNyMOSv.cjs} +8 -7
  30. package/dist/{claudeLocal-CCCvAeMd.mjs → claudeLocal-OHWQigCl.mjs} +6 -5
  31. package/dist/{claudeLocalLauncher-BmrpaRYJ.mjs → claudeLocalLauncher-BStvfa7M.mjs} +11 -10
  32. package/dist/{claudeLocalLauncher-21-xh5gc.cjs → claudeLocalLauncher-BhvPbcyH.cjs} +13 -12
  33. package/dist/{claudeSessionFork-kYCP1IJB.cjs → claudeSessionFork-Be16vzGc.cjs} +1 -1
  34. package/dist/{claudeSessionFork-DvxMKAmY.mjs → claudeSessionFork-GAVWhiKG.mjs} +1 -1
  35. package/dist/{client-C4zKGjiJ.cjs → client-BWjaHKtj.cjs} +2 -2
  36. package/dist/client-Ca5Pcgy_.mjs +71 -0
  37. package/dist/{client-CnlkkrZO.mjs → client-CnB7kRCT.mjs} +2 -2
  38. package/dist/{client-BTX9hsbr.mjs → client-D4uPb1uu.mjs} +3 -3
  39. package/dist/client-DJplzPjD.cjs +76 -0
  40. package/dist/{client-Dnza1hgN.cjs → client-D_loZ9IK.cjs} +3 -3
  41. package/dist/codex/happyMcpStdioBridge.cjs +24 -15
  42. package/dist/codex/happyMcpStdioBridge.mjs +25 -16
  43. package/dist/{codexAppServerClient-DvkpQgyv.mjs → codexAppServerClient-CO4G6OS4.mjs} +3 -3
  44. package/dist/{codexAppServerClient-CRlBWGn3.cjs → codexAppServerClient-PE-12AsW.cjs} +3 -3
  45. package/dist/{codexCommand-DzxIWXIT.cjs → codexCommand-BNoD1t1C.cjs} +127 -116
  46. package/dist/{codexCommand-BxjogBzU.mjs → codexCommand-B_xUH79E.mjs} +77 -66
  47. package/dist/{codexTermination-C28FzlLb.cjs → codexTermination-BmBbizFK.cjs} +7 -2
  48. package/dist/{codexTermination-ySDNMEhd.mjs → codexTermination-Dx48ma6e.mjs} +7 -2
  49. package/dist/{config-BFB5uJ4t.cjs → config-CtwEUxUP.cjs} +26 -26
  50. package/dist/{config-DwfEpFr3.mjs → config-DSu0Blos.mjs} +3 -3
  51. package/dist/{configuration-4TGMrjul.cjs → configuration-CYO-kPOS.cjs} +1 -1
  52. package/dist/{configuration-DVrb61aY.mjs → configuration-PxzEJumr.mjs} +1 -1
  53. package/dist/{connect-C7FPY0PI.mjs → connect-BQrg3TB6.mjs} +15 -15
  54. package/dist/{connect-QH2VJGBG.cjs → connect-Dq7wndzR.cjs} +28 -28
  55. package/dist/{context-JoKu0V54.cjs → context-6TP-iz_c.cjs} +1 -1
  56. package/dist/{context-B3XPVJlj.mjs → context-CJGRRGWW.mjs} +1 -1
  57. package/dist/{controlClient-BTaZlbC6.cjs → controlClient-Bqv5v5OM.cjs} +3 -3
  58. package/dist/{controlClient-BYKyGyxj.mjs → controlClient-DoeYovwP.mjs} +4 -4
  59. package/dist/{createSessionMetadata-8Fuj2-IV.mjs → createSessionMetadata-DDIChCx8.mjs} +2 -2
  60. package/dist/{createSessionMetadata-B2NynaWZ.cjs → createSessionMetadata-xz767pcG.cjs} +3 -3
  61. package/dist/{defaultPermissionMode-BEWCqJU-.cjs → defaultPermissionMode-PkZGsQDk.cjs} +2 -2
  62. package/dist/{defaultPermissionMode-B8kJG9uI.mjs → defaultPermissionMode-i5KzdK09.mjs} +2 -2
  63. package/dist/{detectCLI-DR9ZaN6B.cjs → detectCLI-BuYR_Qxe.cjs} +4 -4
  64. package/dist/{deterministicJson-C5ZwZ7hu.mjs → deterministicJson-CTEJDqtS.mjs} +217 -12
  65. package/dist/{deterministicJson-BjNQsAjO.cjs → deterministicJson-xqA6DaOm.cjs} +222 -16
  66. package/dist/{doctor-BshRnjLi.cjs → doctor-BrgSlfXn.cjs} +9 -9
  67. package/dist/{doctor-0BiGwJXk.mjs → doctor-IctjVh9T.mjs} +8 -8
  68. package/dist/{doctorReadiness-BCZGcN0a.cjs → doctorReadiness-Dl6yRQCy.cjs} +1 -1
  69. package/dist/{downloadTarget-BN5vZt3K.cjs → downloadTarget-CEb9che-.cjs} +6 -6
  70. package/dist/{downloadTarget-DJPwAZlu.mjs → downloadTarget-jbOz1egC.mjs} +6 -6
  71. package/dist/{ensureDaemonRunning-C5QfToCe.cjs → ensureDaemonRunning-D-HyjGIX.cjs} +6 -6
  72. package/dist/{ensureDaemonRunning-CSmb_mqt.mjs → ensureDaemonRunning-b1e8LCSM.mjs} +5 -5
  73. package/dist/{handleResumeCommand-BwnUZmbo.cjs → handleResumeCommand-BvWVuRwH.cjs} +23 -7
  74. package/dist/{handleResumeCommand-CgjpsdDe.mjs → handleResumeCommand-DpaZvm2c.mjs} +22 -6
  75. package/dist/{index-piJPsTsm.cjs → index-B2p2Mut7.cjs} +259 -53
  76. package/dist/{index-BehVbAsA.mjs → index-BUNnpGFF.mjs} +256 -50
  77. package/dist/{index-Bvldtdny.mjs → index-Bsvbgh9e.mjs} +4 -4
  78. package/dist/{index-BYOZ_8WZ.cjs → index-C64Ufj4D.cjs} +4 -4
  79. package/dist/{index-Clqlu17M.mjs → index-C6Vn5Eac.mjs} +155 -34
  80. package/dist/index-CMf5VbzG.mjs +18 -0
  81. package/dist/index-DmTlDRSL.cjs +24 -0
  82. package/dist/{index-_l1Sdmbi.cjs → index-Dv0Q48P3.cjs} +156 -33
  83. package/dist/{index-BRClDe07.cjs → index-F2UejqYs.cjs} +3 -3
  84. package/dist/{index-BYgfern_.mjs → index-wCbtF4BK.mjs} +3 -3
  85. package/dist/index.cjs +2 -2
  86. package/dist/index.mjs +2 -2
  87. package/dist/{install-BdvKiOQw.mjs → install-BX3lv3NO.mjs} +1 -1
  88. package/dist/{install-Cf6AFSWC.cjs → install-BXvf2E3o.cjs} +1 -1
  89. package/dist/{install-TO4taKW7.cjs → install-C0ANcEAW.cjs} +7 -7
  90. package/dist/{install-fYWHrPcC.mjs → install-CdzSV7qO.mjs} +3 -3
  91. package/dist/{installPiTools-BKnXjrVu.cjs → installPiTools-CL_axh_6.cjs} +1 -1
  92. package/dist/{installTerminalHooks-BQZbvxsZ.cjs → installTerminalHooks-BETLKAtd.cjs} +3 -3
  93. package/dist/lib.cjs +14 -14
  94. package/dist/lib.d.cts +239 -2
  95. package/dist/lib.d.mts +239 -2
  96. package/dist/lib.mjs +14 -14
  97. package/dist/{lidState-BeOwj6eW.cjs → lidState-DWGnm2H4.cjs} +1 -1
  98. package/dist/{lidState-DNMlIhX0.mjs → lidState-bBrmaQd2.mjs} +1 -1
  99. package/dist/{localHappyAgentAuth-Br-mgogg.cjs → localHappyAgentAuth-DZHQnIW9.cjs} +1 -1
  100. package/dist/{localHappyAgentAuth-BezKSFDi.mjs → localHappyAgentAuth-Dn1jYDpt.mjs} +1 -1
  101. package/dist/{logger--vAVtXB_.mjs → logger-BUngm5Xg.mjs} +2 -2
  102. package/dist/{logger-DXTWlPzP.cjs → logger-CphW5nUE.cjs} +2 -2
  103. package/dist/machineMetadata-BQm9YTcI.cjs +79 -0
  104. package/dist/machineMetadata-BXN_bKU3.mjs +68 -0
  105. package/dist/{main-DoMFJ2Cl.cjs → main-B2UV51nK.cjs} +112 -132
  106. package/dist/{main-CshDb5-1.mjs → main-DGkdYfEq.mjs} +106 -126
  107. package/dist/{mcp-pNc1EbQf.cjs → mcp-BFvAEIRz.cjs} +15 -15
  108. package/dist/{mcp-DKT_lrvQ.mjs → mcp-CbTtbs0f.mjs} +15 -15
  109. package/dist/{mirrorProtocol-6IFGPpjJ.mjs → mirrorProtocol-BR4luBC0.mjs} +148 -7
  110. package/dist/{mirrorProtocol-qKflWTX_.cjs → mirrorProtocol-HKPivs5o.cjs} +150 -4
  111. package/dist/{package-B7B03ejW.mjs → package-7Ld1YMhh.mjs} +8 -7
  112. package/dist/{package-DY4zTbKS.cjs → package-KhLqBDX9.cjs} +8 -7
  113. package/dist/panels-C7IVqpJk.mjs +137 -0
  114. package/dist/panels-Njf6GelF.cjs +142 -0
  115. package/dist/{peerTools-3R9RUARX.mjs → peerTools-BOlDRyhi.mjs} +60 -10
  116. package/dist/{peerTools-iy3_6Yc5.cjs → peerTools-DQNlrcqM.cjs} +60 -9
  117. package/dist/{persistence-BfX72dne.cjs → persistence-9BMYspxG.cjs} +2 -2
  118. package/dist/{persistence-DTk4sNpd.mjs → persistence-BFUOHW5h.mjs} +3 -3
  119. package/dist/{piRunnerArgs-CRQVR9o-.cjs → piRunnerArgs-DGaq6VYM.cjs} +8 -2
  120. package/dist/{piRunnerArgs-AT8QJY7x.mjs → piRunnerArgs-H2pgpA5z.mjs} +7 -1
  121. package/dist/{piRuntime-BHRT5MKO.cjs → piRuntime-CT5xv_3h.cjs} +2 -2
  122. package/dist/{piRuntime-E44qTVQ4.mjs → piRuntime-CdN0JAsa.mjs} +2 -2
  123. package/dist/{piTerminal-hI4WFdWm.cjs → piTerminal-0FBtXTHK.cjs} +18 -18
  124. package/dist/{piTerminal-De8nbciM.mjs → piTerminal-C4m9YXAV.mjs} +18 -18
  125. package/dist/processTreeSnapshot-CuLJDNC-.mjs +101 -0
  126. package/dist/processTreeSnapshot-mDbnuojn.cjs +105 -0
  127. package/dist/projectPath-C3ioB4Bu.cjs +13 -0
  128. package/dist/prompt-BOouDaTM.mjs +99 -0
  129. package/dist/prompt-lgF9IE82.cjs +105 -0
  130. package/dist/{attachmentLimits-UyFn8fkQ.mjs → pushNotifications-DCiBEVeC.mjs} +307 -3
  131. package/dist/{attachmentLimits-SqeAHrVC.cjs → pushNotifications-DI92havG.cjs} +308 -2
  132. package/dist/{index-DFPT4HOO.cjs → query-BETKBrnz.cjs} +25 -5
  133. package/dist/{index-CEjJnq05.mjs → query-ywZbQUzR.mjs} +26 -3
  134. package/dist/{rateLimitWindows-XrJiiBpU.mjs → rateLimitWindows-BkfuUB1a.mjs} +1 -1
  135. package/dist/{rateLimitWindows-Czb7_7cK.cjs → rateLimitWindows-YRIYVdo4.cjs} +1 -1
  136. package/dist/{registerCommonHandlers-C0_fyBQ0.cjs → registerCommonHandlers-C7a_dUWs.cjs} +30 -30
  137. package/dist/{registerCommonHandlers-CvIedVRf.mjs → registerCommonHandlers-CTkCvjxt.mjs} +2 -2
  138. package/dist/{registerKillSessionHandler-DYl7l4Ts.cjs → registerKillSessionHandler-CIsvBrVe.cjs} +6 -6
  139. package/dist/{registerKillSessionHandler-gwJ5lTf0.mjs → registerKillSessionHandler-CaqqRYq6.mjs} +6 -6
  140. package/dist/{remoteSessionClient-BRTIOX5b.cjs → remoteSessionClient-D843fkzL.cjs} +5 -5
  141. package/dist/{remoteSessionClient-DRb2Jr5s.mjs → remoteSessionClient-PP-mOKmw.mjs} +5 -5
  142. package/dist/{reportProgressTool-B9nCzbkL.cjs → reportProgressTool-14AXr959.cjs} +84 -2
  143. package/dist/{reportProgressTool-D5tEoXMW.mjs → reportProgressTool-ZOCNjWHr.mjs} +82 -3
  144. package/dist/{resources-JDPugcDq.cjs → resources-CvIlkzpP.cjs} +30 -0
  145. package/dist/{resources-BdFBQi8r.mjs → resources-y9jfyO-_.mjs} +30 -0
  146. package/dist/{run-CKe_WeLW.cjs → run-CAOCYYfT.cjs} +2806 -110
  147. package/dist/{run-BQ_FGaOL.mjs → run-Dajw2E5j.mjs} +2787 -91
  148. package/dist/{runClaude-zrrNcQC_.mjs → runClaude-C6oxWYbp.mjs} +49 -47
  149. package/dist/{runClaude-MHI5IKM-.cjs → runClaude-CRRKt-tm.cjs} +50 -48
  150. package/dist/{runClaudeDeps-RRw-Nusc.cjs → runClaudeDeps-B1ysqTvx.cjs} +310 -237
  151. package/dist/{runClaudeDeps-CVBCokOS.mjs → runClaudeDeps-BcZ68cX3.mjs} +297 -226
  152. package/dist/{runGemini-kipag2ag.mjs → runGemini-D7yKc4wD.mjs} +61 -55
  153. package/dist/{runGemini-D7Lg9yCr.cjs → runGemini-DtKFXqf-.cjs} +89 -83
  154. package/dist/{runOpenClaw-C_lRY3Do.mjs → runOpenClaw-C8ilyLP9.mjs} +19 -19
  155. package/dist/{runOpenClaw-DCcQ0L2N.cjs → runOpenClaw-Cq29mryb.cjs} +20 -20
  156. package/dist/{sandbox-BSyXFVFp.mjs → sandbox-CbCutma4.mjs} +4 -4
  157. package/dist/{sandbox-dMwPTmjm.cjs → sandbox-gIj-EuF4.cjs} +4 -4
  158. package/dist/{selfCheck-DkzDDUsE.cjs → selfCheck-BTGBVthv.cjs} +39 -38
  159. package/dist/selfCheck-Smt-5Xiq.mjs +85 -0
  160. package/dist/{send-dxC0miIA.cjs → send-CZf5lLw_.cjs} +8 -8
  161. package/dist/{send-C-k9nsd3.mjs → send-YZRMQvMJ.mjs} +9 -9
  162. package/dist/{server-DxoTYNlw.mjs → server-BqwXRzFZ.mjs} +4 -4
  163. package/dist/{server-B-W6P7Qr.cjs → server-CknFq6xG.cjs} +6 -6
  164. package/dist/sessionExitLifecycle-CzkLIgNZ.mjs +142 -0
  165. package/dist/sessionExitLifecycle-DFltxXU8.cjs +148 -0
  166. package/dist/{sessionLock-DWX6BbiU.cjs → sessionLock-DRZUcKHT.cjs} +38 -5
  167. package/dist/{sessionLock-DBdtZGOL.mjs → sessionLock-nBXdJxJm.mjs} +36 -5
  168. package/dist/{sessionOps-BAnr7n8t.cjs → sessionOps-BrGiU9-s.cjs} +10 -5
  169. package/dist/{sessionOps-BVoXe12O.mjs → sessionOps-C58iDeD5.mjs} +11 -6
  170. package/dist/{sessionScanner-BtxoeluY.mjs → sessionScanner-Bm57LEXe.mjs} +3 -3
  171. package/dist/{sessionScanner-CDOYsEUD.cjs → sessionScanner-CaO8bLaG.cjs} +3 -3
  172. package/dist/{sessions-C3sZJkzI.mjs → sessions-BXyBHo8n.mjs} +40 -18
  173. package/dist/{sessions-hAitoN-m.cjs → sessions-uzqPCc37.cjs} +39 -16
  174. package/dist/{setupOfflineReconnection-_eD4cuUT.mjs → setupOfflineReconnection-1Qlek3wl.mjs} +2 -2
  175. package/dist/{setupOfflineReconnection-C2EeYTFH.cjs → setupOfflineReconnection-DvvVX3TB.cjs} +2 -2
  176. package/dist/{spawn-Bc9v7pIf.cjs → spawn-DBkodJEO.cjs} +49 -18
  177. package/dist/{spawn-qNrB2CD_.mjs → spawn-vn93PhYL.mjs} +49 -18
  178. package/dist/spawnAgents-CgPMWexP.mjs +79 -0
  179. package/dist/{spawnAgents-BVEaz35W.cjs → spawnAgents-DLNMlhWJ.cjs} +37 -1
  180. package/dist/{spawnHappyCLI-C2stUioM.mjs → spawnHappyCLI-BjFZc_7V.mjs} +1 -1
  181. package/dist/{spawnHappyCLI-fzUagkKV.cjs → spawnHappyCLI-DnUZv0X2.cjs} +2 -2
  182. package/dist/{specialCommands-BJ-nqY4s.cjs → specialCommands-BRufxlqe.cjs} +3 -3
  183. package/dist/{specialCommands-C6W-rVyh.mjs → specialCommands-D3ND9bdg.mjs} +3 -3
  184. package/dist/{startFileWatcher-Bqlqjt93.cjs → startFileWatcher-D9cYzZOq.cjs} +1 -1
  185. package/dist/{startFileWatcher-CR09Snmz.mjs → startFileWatcher-DXJ7yB5v.mjs} +1 -1
  186. package/dist/startupSessionCreate-kdr3m1uX.cjs +26 -0
  187. package/dist/startupSessionCreate-uZ6BM0ty.mjs +24 -0
  188. package/dist/{streamRelay-CJoMk_d2.mjs → streamRelay-DnMCMMfV.mjs} +1 -1
  189. package/dist/{streamRelay-9kBPpbvU.cjs → streamRelay-Dy6amlzx.cjs} +1 -1
  190. package/dist/{sync-Dhmtk66S.cjs → sync-Bn-idAoy.cjs} +1 -1
  191. package/dist/{sync-DbW07iQS.mjs → sync-BvVhDO40.mjs} +1 -1
  192. package/dist/{systemPrompt-CQcuUmVp.mjs → systemPrompt-CIZcJuJF.mjs} +4 -3
  193. package/dist/{systemPrompt-3PYi3EUY.cjs → systemPrompt-DlyEk35T.cjs} +4 -3
  194. package/dist/{teams-DpxLcUU_.cjs → teams-BLeRpDxv.cjs} +8 -8
  195. package/dist/{teams-CwF4Z2fA.mjs → teams-DLY3B5yi.mjs} +8 -8
  196. package/dist/{time-A6zR3Iy6.cjs → time-Cjv0zxQO.cjs} +1 -1
  197. package/dist/{time-BuGWTVP6.mjs → time-D3ETL7Jb.mjs} +1 -1
  198. package/dist/{titleGenerator-D26gvNaS.cjs → titleGenerator-Cgp5ihFb.cjs} +10 -9
  199. package/dist/{titleGenerator-BGEzNWC9.mjs → titleGenerator-Uzbd4utr.mjs} +9 -8
  200. package/dist/{todo-DrZc76H5.mjs → todo-C9Ga-oEM.mjs} +6 -6
  201. package/dist/{todo-73g3NCIO.cjs → todo-pOMcEECE.cjs} +6 -6
  202. package/dist/{tools-CxJp4T1T.cjs → tools-BL7Byl_x.cjs} +1 -1
  203. package/dist/{tools-BtsrQnNS.mjs → tools-Cho7iIWf.mjs} +1 -1
  204. package/dist/{uninstall-DWNYvewQ.cjs → uninstall-CbayEVoV.cjs} +6 -6
  205. package/dist/{uninstall-DOb2mTwV.mjs → uninstall-CvZHVY9C.mjs} +3 -3
  206. package/dist/webPanels-B2_C2-3g.mjs +49 -0
  207. package/dist/webPanels-FCgFKvVe.cjs +53 -0
  208. package/package.json +8 -7
  209. package/dist/machineMetadata-B1H9gNbN.mjs +0 -39
  210. package/dist/machineMetadata-DcUupMje.cjs +0 -42
  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-CF7XGJPb.mjs +0 -84
  215. package/dist/sessionModeFile-ByLbXTbg.mjs +0 -32
  216. package/dist/sessionModeFile-CLLdidiJ.cjs +0 -36
  217. package/dist/spawnAgents-Bw6j4tqz.mjs +0 -45
@@ -1,100 +1,105 @@
1
1
  'use strict';
2
2
 
3
- var auth = require('./auth-DgIV0Cvt.cjs');
4
- var index = require('./index-_l1Sdmbi.cjs');
3
+ var auth = require('./auth-CBXnm-Mj.cjs');
4
+ var index = require('./index-Dv0Q48P3.cjs');
5
+ var deterministicJson = require('./deterministicJson-xqA6DaOm.cjs');
6
+ var client = require('./client-DJplzPjD.cjs');
5
7
  var promises = require('node:fs/promises');
6
8
  var forkBackfill = require('./forkBackfill-8eLDeS73.cjs');
7
9
  var node_crypto = require('node:crypto');
8
10
  var cuid2 = require('@paralleldrive/cuid2');
9
11
  var agentAttachments = require('./agentAttachments-Dbw8iMCZ.cjs');
10
- var attachmentContent = require('./attachmentContent-bpQTBJ0y.cjs');
12
+ var attachmentContent = require('./attachmentContent-CEm13_gF.cjs');
11
13
  var ink = require('ink');
12
- var sessionLock = require('./sessionLock-DWX6BbiU.cjs');
14
+ var sessionLock = require('./sessionLock-DRZUcKHT.cjs');
13
15
  var React = require('react');
14
- var api = require('./api-JANhFdZV.cjs');
15
- var codexAppServerClient = require('./codexAppServerClient-CRlBWGn3.cjs');
16
- var specialCommands = require('./specialCommands-BJ-nqY4s.cjs');
17
- var logger = require('./logger-DXTWlPzP.cjs');
18
- var BasePermissionHandler = require('./BasePermissionHandler-DyLmKKtO.cjs');
19
- var codexTermination = require('./codexTermination-C28FzlLb.cjs');
16
+ var api = require('./api-DM7b1OKj.cjs');
17
+ var codexAppServerClient = require('./codexAppServerClient-PE-12AsW.cjs');
18
+ var specialCommands = require('./specialCommands-BRufxlqe.cjs');
19
+ var logger = require('./logger-CphW5nUE.cjs');
20
+ var BasePermissionHandler = require('./BasePermissionHandler-BlM_tfej.cjs');
21
+ var codexTermination = require('./codexTermination-BmBbizFK.cjs');
20
22
  var node_child_process = require('node:child_process');
21
- var persistence = require('./persistence-BfX72dne.cjs');
22
- var machineMetadata = require('./machineMetadata-DcUupMje.cjs');
23
- var configuration = require('./configuration-4TGMrjul.cjs');
24
- var registerKillSessionHandler = require('./registerKillSessionHandler-DYl7l4Ts.cjs');
25
- var projectPath = require('./projectPath-ChLhdOyt.cjs');
23
+ var persistence = require('./persistence-9BMYspxG.cjs');
24
+ var machineMetadata = require('./machineMetadata-BQm9YTcI.cjs');
25
+ var configuration = require('./configuration-CYO-kPOS.cjs');
26
+ var registerKillSessionHandler = require('./registerKillSessionHandler-CIsvBrVe.cjs');
27
+ var projectPath = require('./projectPath-C3ioB4Bu.cjs');
26
28
  var path = require('node:path');
27
- var createSessionMetadata = require('./createSessionMetadata-B2NynaWZ.cjs');
28
- var deterministicJson = require('./deterministicJson-BjNQsAjO.cjs');
29
- var messageBuffer = require('./messageBuffer-fJMH6uY8.cjs');
30
- var controlClient = require('./controlClient-BTaZlbC6.cjs');
31
- var defaultPermissionMode = require('./defaultPermissionMode-BEWCqJU-.cjs');
29
+ var createSessionMetadata = require('./createSessionMetadata-xz767pcG.cjs');
30
+ var sessionExitLifecycle = require('./sessionExitLifecycle-DFltxXU8.cjs');
31
+ var controlClient = require('./controlClient-Bqv5v5OM.cjs');
32
+ var defaultPermissionMode = require('./defaultPermissionMode-PkZGsQDk.cjs');
32
33
  var authRelay = require('./authRelay-Dy1qU9td.cjs');
33
- var setupOfflineReconnection = require('./setupOfflineReconnection-C2EeYTFH.cjs');
34
+ var setupOfflineReconnection = require('./setupOfflineReconnection-DvvVX3TB.cjs');
35
+ var startupSessionCreate = require('./startupSessionCreate-kdr3m1uX.cjs');
34
36
  var trimIdent = require('./trimIdent-4gvk9Wk6.cjs');
35
37
  var constants = require('./constants-VJ0N6WuG.cjs');
36
38
  var editPaths = require('./editPaths-Bqp4OFPw.cjs');
37
- var ensureDaemonRunning = require('./ensureDaemonRunning-C5QfToCe.cjs');
39
+ var ensureDaemonRunning = require('./ensureDaemonRunning-D-HyjGIX.cjs');
38
40
  require('tweetnacl');
39
41
  require('axios');
40
- require('./time-A6zR3Iy6.cjs');
41
- require('./browser-CSKhc0Bl.cjs');
42
+ require('./time-Cjv0zxQO.cjs');
43
+ require('./browser-DZ6qRtfH.cjs');
42
44
  require('open');
43
45
  require('zod');
44
- require('./attachmentLimits-SqeAHrVC.cjs');
46
+ require('./prompt-lgF9IE82.cjs');
47
+ require('./reportProgressTool-14AXr959.cjs');
48
+ require('./client-BWjaHKtj.cjs');
49
+ require('./precheckCompat-CWOi5c9L.cjs');
50
+ require('./agentGuidance-BtBx2xxE.cjs');
45
51
  require('node:fs');
46
- require('./lidState-BeOwj6eW.cjs');
52
+ require('./client-D_loZ9IK.cjs');
53
+ require('./context-6TP-iz_c.cjs');
54
+ require('./sessionOps-BrGiU9-s.cjs');
55
+ require('socket.io-client');
56
+ require('./backgroundTaskActivity-CBvUdj39.cjs');
57
+ require('./resources-CvIlkzpP.cjs');
58
+ require('./tools-BL7Byl_x.cjs');
59
+ require('./peerTools-DQNlrcqM.cjs');
60
+ require('node:os');
61
+ require('./ids-B6ZC0HGt.cjs');
62
+ require('./remoteSessionClient-D843fkzL.cjs');
63
+ require('@modelcontextprotocol/sdk/server/mcp.js');
64
+ require('node:http');
65
+ require('@modelcontextprotocol/sdk/server/streamableHttp.js');
66
+ require('./limits-C-a7gr04.cjs');
67
+ require('./downloadTarget-CEb9che-.cjs');
68
+ require('./terminals-B_bfC9c2.cjs');
69
+ require('./terminalTitleSuggest-DhvRFX3H.cjs');
70
+ require('./tmuxSocket-D-Xt6Vn-.cjs');
71
+ require('./bootstrap-DoA7okld.cjs');
72
+ require('./package-KhLqBDX9.cjs');
73
+ require('./webPanels-FCgFKvVe.cjs');
74
+ require('./pushNotifications-DI92havG.cjs');
75
+ require('./contentLogMetadata-ZSFk_NjQ.cjs');
76
+ require('./previewPath-B0rBdhy1.cjs');
77
+ require('crypto');
78
+ require('./processTreeSnapshot-mDbnuojn.cjs');
79
+ require('./lidState-DWGnm2H4.cjs');
47
80
  require('os');
48
81
  require('child_process');
49
82
  require('node:events');
50
- require('socket.io-client');
51
- require('./limits-C-a7gr04.cjs');
52
- require('./registerCommonHandlers-C0_fyBQ0.cjs');
83
+ require('./registerCommonHandlers-C7a_dUWs.cjs');
53
84
  require('util');
54
85
  require('fs/promises');
55
- require('crypto');
56
86
  require('path');
57
87
  require('cross-spawn');
58
- require('./sync-Dhmtk66S.cjs');
59
- require('./backgroundTaskActivity-CBvUdj39.cjs');
60
- require('./contentLogMetadata-ZSFk_NjQ.cjs');
88
+ require('./sync-Bn-idAoy.cjs');
61
89
  require('chalk');
62
90
  require('node:readline');
63
91
  require('./manager-HrEj442o.cjs');
64
92
  require('@anthropic-ai/sandbox-runtime');
65
- require('node:os');
66
- require('./package-DY4zTbKS.cjs');
67
- require('./rateLimitWindows-Czb7_7cK.cjs');
93
+ require('./rateLimitWindows-YRIYVdo4.cjs');
68
94
  require('./processTree-CMHWlVse.cjs');
69
95
  require('node:util');
70
- require('./detectCLI-DR9ZaN6B.cjs');
96
+ require('./detectCLI-BuYR_Qxe.cjs');
71
97
  require('fs');
72
- require('./localHappyAgentAuth-Br-mgogg.cjs');
98
+ require('./localHappyAgentAuth-DZHQnIW9.cjs');
73
99
  require('./types-CRS-srZK.cjs');
74
100
  require('url');
75
- require('./client-Dnza1hgN.cjs');
76
- require('./context-JoKu0V54.cjs');
77
- require('./sessionOps-BAnr7n8t.cjs');
78
- require('./resources-JDPugcDq.cjs');
79
- require('./tools-CxJp4T1T.cjs');
80
- require('./reportProgressTool-B9nCzbkL.cjs');
81
- require('./client-C4zKGjiJ.cjs');
82
- require('./precheckCompat-CWOi5c9L.cjs');
83
- require('./agentGuidance-BtBx2xxE.cjs');
84
- require('./peerTools-iy3_6Yc5.cjs');
85
- require('./ids-B6ZC0HGt.cjs');
86
- require('./remoteSessionClient-BRTIOX5b.cjs');
87
- require('@modelcontextprotocol/sdk/server/mcp.js');
88
- require('node:http');
89
- require('@modelcontextprotocol/sdk/server/streamableHttp.js');
90
- require('./downloadTarget-BN5vZt3K.cjs');
91
- require('./terminals-B_bfC9c2.cjs');
92
- require('./terminalTitleSuggest-DhvRFX3H.cjs');
93
- require('./tmuxSocket-D-Xt6Vn-.cjs');
94
- require('./bootstrap-DCQ87Aan.cjs');
95
- require('./previewPath-B0rBdhy1.cjs');
96
- require('./spawnHappyCLI-fzUagkKV.cjs');
97
- require('./doctorReadiness-BCZGcN0a.cjs');
101
+ require('./spawnHappyCLI-DnUZv0X2.cjs');
102
+ require('./doctorReadiness-Dl6yRQCy.cjs');
98
103
 
99
104
  function getStartedSubagents(state) {
100
105
  return state.startedSubagents ?? /* @__PURE__ */ new Set();
@@ -1396,7 +1401,7 @@ async function runCodex(opts) {
1396
1401
  dangerouslySkipPermissions: initialPermissionMode === "yolo" || initialPermissionMode === "bypassPermissions",
1397
1402
  ...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
1398
1403
  ...forkedFromMessageId ? { forkedFromMessageId } : {},
1399
- capabilities: [index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, index.CODEX_STEER_CAPABILITY]
1404
+ capabilities: [index.PROMPT_QUEUE_CAPABILITY, forkBackfill.FORK_BACKFILL_CAPABILITY, persistence.HIBERNATION_CAPABILITY, index.CODEX_STEER_CAPABILITY, index.PROJECT_SESSION_CAPABILITY]
1400
1405
  });
1401
1406
  metadata.attachmentKinds = [...attachmentContent.CLAUDE_ATTACHMENT_KINDS];
1402
1407
  const importCodexThreadId = process.env[IMPORT_CODEX_THREAD_ENV];
@@ -1425,7 +1430,7 @@ async function runCodex(opts) {
1425
1430
  agentStateVersion: parseInt(reconnectAgentStateVersion || "0", 10)
1426
1431
  };
1427
1432
  } else {
1428
- response = await api$1.getOrCreateSession({ tag: sessionTag, metadata, state });
1433
+ response = await startupSessionCreate.createSessionForStartup(() => api$1.getOrCreateSession({ tag: sessionTag, metadata, state }), { startedBy: opts.startedBy, log: (m) => logger.logger.debug(m) });
1429
1434
  }
1430
1435
  if (response) {
1431
1436
  await sessionLock.claimSessionOrExit(response.id, { takeover: !!reconnectSessionId, flavor: "codex" });
@@ -1435,15 +1440,18 @@ async function runCodex(opts) {
1435
1440
  }
1436
1441
  let reconnectSeeded = false;
1437
1442
  let wakingFromHibernation = false;
1443
+ let reconnectReplay = null;
1438
1444
  if (reconnectSessionId && response) {
1439
1445
  const snapshot = await api$1.getSession(response.id, response.encryptionKey, response.encryptionVariant);
1440
1446
  if (snapshot.ok) {
1441
1447
  response = sessionLock.applyServerSnapshot(response, snapshot.session);
1442
1448
  reconnectSeeded = true;
1443
1449
  logger.logger.debug(`[START] Reconnect seeded from server: seq=${snapshot.session.seq} metadataVersion=${snapshot.session.metadataVersion}`);
1444
- const wake = sessionLock.applyHibernationReplay(response);
1450
+ const wake = sessionLock.applyReconnectReplay(response);
1445
1451
  response = wake.response;
1446
- wakingFromHibernation = wake.replaying;
1452
+ reconnectReplay = wake.replay;
1453
+ wakingFromHibernation = wake.replay?.source === "hibernation";
1454
+ if (wake.replay) logger.logger.debug(`[START] Resuming (${wake.replay.source}): replaying records after seq=${response.seq}`);
1447
1455
  } else {
1448
1456
  response = sessionLock.withoutServerSnapshot(response);
1449
1457
  logger.logger.debug(`[START] Reconnect without server snapshot (${snapshot.reason}); skipping existing messages`);
@@ -1451,7 +1459,7 @@ async function runCodex(opts) {
1451
1459
  }
1452
1460
  let session;
1453
1461
  let permissionHandler;
1454
- let client;
1462
+ let client$1;
1455
1463
  let reasoningProcessor;
1456
1464
  let abortInProgress = null;
1457
1465
  let turnActive = false;
@@ -1474,7 +1482,7 @@ async function runCodex(opts) {
1474
1482
  if (reconnectSessionId) {
1475
1483
  session.suppressNextArchiveSignal();
1476
1484
  if (!reconnectSeeded) session.skipExistingMessages();
1477
- if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs();
1485
+ if (!wakingFromHibernation) void session.cancelUndeliveredQueuedInputs(reconnectReplay ? { maxSeq: reconnectReplay.seq } : void 0);
1478
1486
  session.updateMetadata((meta) => sessionLock.mergeReconnectMetadata(meta, metadata, Date.now()));
1479
1487
  }
1480
1488
  if (response) {
@@ -1530,7 +1538,7 @@ async function runCodex(opts) {
1530
1538
  const CODEX_IMAGE_MIME_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp"];
1531
1539
  const steerDeps = {
1532
1540
  ownsTurn: () => turnActive && !abortInProgress && !shouldExit,
1533
- steer: (input) => client.steerTurn(input),
1541
+ steer: (input) => client$1.steerTurn(input),
1534
1542
  stage: (attachments) => attachmentContent.stageClaudeAttachments(attachments, {
1535
1543
  happyHomeDir: configuration.configuration.happyHomeDir,
1536
1544
  sessionId: session.sessionId
@@ -1538,7 +1546,7 @@ async function runCodex(opts) {
1538
1546
  withAttachments: attachmentContent.appendStagedAttachmentsToPrompt,
1539
1547
  unlink: (path) => promises.unlink(path),
1540
1548
  isImage: (file) => CODEX_IMAGE_MIME_TYPES.includes(file.mimeType),
1541
- onSteered: (text) => messageBuffer$1.addMessage(text, "user"),
1549
+ onSteered: (text) => messageBuffer.addMessage(text, "user"),
1542
1550
  log: (message) => logger.logger.debug(message)
1543
1551
  };
1544
1552
  let userMessageDelivery = Promise.resolve();
@@ -1673,8 +1681,8 @@ async function runCodex(opts) {
1673
1681
  if (permissionHandler) {
1674
1682
  permissionHandler.abortAll();
1675
1683
  }
1676
- if (client) {
1677
- const abortResult = await client.abortTurnWithFallback({
1684
+ if (client$1) {
1685
+ const abortResult = await client$1.abortTurnWithFallback({
1678
1686
  gracePeriodMs: 3e3,
1679
1687
  forceRestartOnTimeout: true
1680
1688
  });
@@ -1710,12 +1718,14 @@ async function runCodex(opts) {
1710
1718
  return;
1711
1719
  }
1712
1720
  logger.logger.debug("[Codex] Kill session requested - terminating process");
1721
+ const exitCursor = intent === "offline" && session ? sessionLock.exitCursorStamp(session.messageCursor, Date.now()) : void 0;
1722
+ if (exitCursor) session.freezeInbound();
1713
1723
  await handleAbort("kill");
1714
1724
  logger.logger.debug("[Codex] Abort completed, proceeding with termination");
1715
1725
  try {
1716
- if (session) await codexTermination.settleCodexSession(session, intent, (id) => api$1.deactivateSession(id), (m, e) => logger.logger.debug(m, safeCodexErrorMetadata(e)));
1726
+ if (session) await codexTermination.settleCodexSession(session, intent, (id) => api$1.deactivateSession(id), (m, e) => logger.logger.debug(m, safeCodexErrorMetadata(e)), exitCursor);
1717
1727
  try {
1718
- await client.disconnect();
1728
+ await client$1.disconnect();
1719
1729
  } catch (e) {
1720
1730
  logger.logger.debug("[Codex] Error disconnecting Codex during termination", safeCodexErrorMetadata(e));
1721
1731
  }
@@ -1729,20 +1739,20 @@ async function runCodex(opts) {
1729
1739
  };
1730
1740
  session.rpcHandlerManager.registerHandler("codex-child-read", async (args) => {
1731
1741
  try {
1732
- return await readChildThread(client, args?.threadId);
1742
+ return await readChildThread(client$1, args?.threadId);
1733
1743
  } catch (error) {
1734
1744
  return { error: error instanceof Error ? error.message : "Child read failed" };
1735
1745
  }
1736
1746
  });
1737
1747
  session.rpcHandlerManager.registerHandler("abort", () => handleAbort("user"));
1738
1748
  const disposeTermination = registerKillSessionHandler.registerKillSessionHandler(session.rpcHandlerManager, () => handleKillSession("archive"), session, { processSignals: true, onSignal: () => handleKillSession("offline") });
1739
- const messageBuffer$1 = new messageBuffer.MessageBuffer();
1749
+ const messageBuffer = new sessionExitLifecycle.MessageBuffer();
1740
1750
  const hasTTY = process.stdout.isTTY && process.stdin.isTTY;
1741
1751
  let inkInstance = null;
1742
1752
  if (hasTTY) {
1743
1753
  console.clear();
1744
1754
  inkInstance = ink.render(React.createElement(CodexDisplay, {
1745
- messageBuffer: messageBuffer$1,
1755
+ messageBuffer,
1746
1756
  logPath: process.env.DEBUG ? logger.logger.getLogPath() : void 0,
1747
1757
  onExit: async () => {
1748
1758
  logger.logger.debug("[codex]: Exiting agent via Ctrl-C");
@@ -1761,7 +1771,7 @@ async function runCodex(opts) {
1761
1771
  }
1762
1772
  process.stdin.setEncoding("utf8");
1763
1773
  }
1764
- client = new codexAppServerClient.CodexAppServerClient(sandboxConfig);
1774
+ client$1 = new codexAppServerClient.CodexAppServerClient(sandboxConfig);
1765
1775
  const idleRelease = new CodexIdleReleaseTimer({
1766
1776
  delayMs: resolveCodexIdleReleaseMs(process.env[CODEX_IDLE_RELEASE_ENV]),
1767
1777
  isIdle: () => shouldReleaseIdleCodex({
@@ -1771,7 +1781,7 @@ async function runCodex(opts) {
1771
1781
  abortInProgress: abortInProgress !== null
1772
1782
  }),
1773
1783
  release: async () => {
1774
- const released = await client.releaseIdleProcess();
1784
+ const released = await client$1.releaseIdleProcess();
1775
1785
  if (released) {
1776
1786
  logger.logger.debug("[Codex] Released idle app-server; thread kept for resume on next message");
1777
1787
  }
@@ -1792,7 +1802,7 @@ async function runCodex(opts) {
1792
1802
  session.sendSessionProtocolMessage(envelope);
1793
1803
  }
1794
1804
  });
1795
- client.setApprovalHandler(async (params) => {
1805
+ client$1.setApprovalHandler(async (params) => {
1796
1806
  const toolName = params.type === "exec" ? "CodexBash" : params.type === "patch" ? "CodexPatch" : params.toolName ?? "McpTool";
1797
1807
  const input = params.type === "exec" ? { command: params.command, cwd: params.cwd } : params.type === "patch" ? { changes: params.fileChanges } : params.input ?? {};
1798
1808
  try {
@@ -1805,52 +1815,52 @@ async function runCodex(opts) {
1805
1815
  }
1806
1816
  });
1807
1817
  const editThrottle = new editPaths.EditReportThrottle();
1808
- client.setRateLimitHandler((snapshot) => specialCommands.wrapperRateLimitReporter().observeCodex(snapshot));
1809
- client.setEventHandler((msg) => {
1818
+ client$1.setRateLimitHandler((snapshot) => specialCommands.wrapperRateLimitReporter().observeCodex(snapshot));
1819
+ client$1.setEventHandler((msg) => {
1810
1820
  if (msg.type === "token_count") {
1811
1821
  session.sendAgentUsageSnapshot("codex", msg);
1812
1822
  }
1813
1823
  logger.logger.debug("[Codex] Event metadata", codexEventLogMetadata(msg));
1814
1824
  if (msg.type === "agent_message") {
1815
- messageBuffer$1.addMessage(msg.message, "assistant");
1825
+ messageBuffer.addMessage(msg.message, "assistant");
1816
1826
  } else if (msg.type === "agent_reasoning_delta") ; else if (msg.type === "agent_reasoning") {
1817
- messageBuffer$1.addMessage(`[Thinking] ${msg.text.substring(0, 100)}...`, "system");
1827
+ messageBuffer.addMessage(`[Thinking] ${msg.text.substring(0, 100)}...`, "system");
1818
1828
  } else if (msg.type === "exec_command_begin") {
1819
- messageBuffer$1.addMessage(`Executing: ${msg.command}`, "tool");
1829
+ messageBuffer.addMessage(`Executing: ${msg.command}`, "tool");
1820
1830
  } else if (msg.type === "exec_command_end") {
1821
1831
  const output = msg.output || msg.error || "Command completed";
1822
1832
  const truncatedOutput = output.substring(0, 200);
1823
- messageBuffer$1.addMessage(
1833
+ messageBuffer.addMessage(
1824
1834
  `Result: ${truncatedOutput}${output.length > 200 ? "..." : ""}`,
1825
1835
  "result"
1826
1836
  );
1827
1837
  } else if (msg.type === "task_started") {
1828
- messageBuffer$1.addMessage("Starting task...", "status");
1838
+ messageBuffer.addMessage("Starting task...", "status");
1829
1839
  } else if (msg.type === "task_complete") {
1830
1840
  const failure = describeCodexFailure(msg);
1831
1841
  if (failure) {
1832
- messageBuffer$1.addMessage(`Task failed: ${failure}`, "status");
1842
+ messageBuffer.addMessage(`Task failed: ${failure}`, "status");
1833
1843
  session.sendSessionEvent({ type: "message", message: `Codex error: ${failure}` });
1834
1844
  } else {
1835
- messageBuffer$1.addMessage("Task completed", "status");
1845
+ messageBuffer.addMessage("Task completed", "status");
1836
1846
  }
1837
1847
  } else if (msg.type === "turn_aborted") {
1838
1848
  const failure = describeCodexFailure(msg);
1839
1849
  if (failure) {
1840
- messageBuffer$1.addMessage(`Turn aborted: ${failure}`, "status");
1850
+ messageBuffer.addMessage(`Turn aborted: ${failure}`, "status");
1841
1851
  session.sendSessionEvent({ type: "message", message: `Codex error: ${failure}` });
1842
1852
  } else {
1843
- messageBuffer$1.addMessage("Turn aborted", "status");
1853
+ messageBuffer.addMessage("Turn aborted", "status");
1844
1854
  }
1845
1855
  } else if (msg.type === "turn_retry") {
1846
1856
  const notice = describeCodexRetry(msg);
1847
- messageBuffer$1.addMessage(notice, "status");
1857
+ messageBuffer.addMessage(notice, "status");
1848
1858
  session.sendSessionEvent({ type: "message", message: notice });
1849
1859
  } else if (msg.type === "steer_dropped") {
1850
1860
  const clientIds = Array.isArray(msg.client_ids) ? msg.client_ids.filter((id) => typeof id === "string" && id.length > 0) : [];
1851
1861
  if (clientIds.length > 0) {
1852
1862
  session.sendQueueCancelReason(clientIds, "aborted");
1853
- messageBuffer$1.addMessage("A steered message was not read before the turn ended", "status");
1863
+ messageBuffer.addMessage("A steered message was not read before the turn ended", "status");
1854
1864
  }
1855
1865
  }
1856
1866
  if (msg.type === "task_started") {
@@ -1884,16 +1894,16 @@ async function runCodex(opts) {
1884
1894
  }
1885
1895
  const changeCount = Object.keys(changes).length;
1886
1896
  const filesMsg = changeCount === 1 ? "1 file" : `${changeCount} files`;
1887
- messageBuffer$1.addMessage(`Modifying ${filesMsg}...`, "tool");
1897
+ messageBuffer.addMessage(`Modifying ${filesMsg}...`, "tool");
1888
1898
  }
1889
1899
  if (msg.type === "patch_apply_end") {
1890
1900
  const { stdout, stderr, success } = msg;
1891
1901
  if (success) {
1892
1902
  const message = stdout || "Files modified successfully";
1893
- messageBuffer$1.addMessage(message.substring(0, 200), "result");
1903
+ messageBuffer.addMessage(message.substring(0, 200), "result");
1894
1904
  } else {
1895
1905
  const errorMsg = stderr || "Failed to modify files";
1896
- messageBuffer$1.addMessage(`Error: ${errorMsg.substring(0, 200)}`, "result");
1906
+ messageBuffer.addMessage(`Error: ${errorMsg.substring(0, 200)}`, "result");
1897
1907
  }
1898
1908
  }
1899
1909
  if (msg.type === "turn_diff") {
@@ -1919,7 +1929,7 @@ async function runCodex(opts) {
1919
1929
  }
1920
1930
  }
1921
1931
  });
1922
- const happyServer = await deterministicJson.startHappyServer(session);
1932
+ const happyServer = await deterministicJson.startHappyServer(session, { push: { sendAttention: (input) => api$1.push().sendAttention(input) } });
1923
1933
  const bridgeEntrypoint = path.join(projectPath.projectPath(), "bin", "very-happy-mcp.mjs");
1924
1934
  const mcpServers = {
1925
1935
  [HAPPY_MCP_SERVER_NAME]: {
@@ -1929,13 +1939,14 @@ async function runCodex(opts) {
1929
1939
  };
1930
1940
  let first = true;
1931
1941
  let appendSystemPromptInjected = false;
1942
+ const projectInjector = deterministicJson.createProjectInjector({ client: client.sharedProjectsClient(), sessionId: () => session?.sessionId, metadata: () => session?.getMetadata?.() ?? null, agent: "codex" });
1932
1943
  process.env.VH_PEER_SESSION_ID = session.sessionId;
1933
1944
  try {
1934
1945
  logger.logger.debug("[codex]: client.connect begin");
1935
- await client.connect();
1946
+ await client$1.connect();
1936
1947
  logger.logger.debug("[codex]: client.connect done");
1937
1948
  try {
1938
- discoveredModels = await client.listModels();
1949
+ discoveredModels = await client$1.listModels();
1939
1950
  if (discoveredModels.length > 0) {
1940
1951
  session.updateMetadata((metadata2) => ({
1941
1952
  ...metadata2,
@@ -1954,9 +1965,9 @@ async function runCodex(opts) {
1954
1965
  }
1955
1966
  if (opts.resumeThreadId) {
1956
1967
  await resumeExistingThread({
1957
- client,
1968
+ client: client$1,
1958
1969
  session,
1959
- messageBuffer: messageBuffer$1,
1970
+ messageBuffer,
1960
1971
  threadId: opts.resumeThreadId,
1961
1972
  cwd: process.cwd(),
1962
1973
  mcpServers
@@ -1966,9 +1977,9 @@ async function runCodex(opts) {
1966
1977
  }
1967
1978
  if (!reconnectSessionId && !opts.resumeThreadId && importCodexThreadId) {
1968
1979
  await importCodexThread({
1969
- client,
1980
+ client: client$1,
1970
1981
  session,
1971
- messageBuffer: messageBuffer$1,
1982
+ messageBuffer,
1972
1983
  threadId: importCodexThreadId,
1973
1984
  cwd: process.cwd(),
1974
1985
  mcpServers
@@ -1979,7 +1990,7 @@ async function runCodex(opts) {
1979
1990
  const forkCodexThreadId = process.env.HAPPY_FORK_CODEX_THREAD_ID;
1980
1991
  if (!reconnectSessionId && forkCodexThreadId) {
1981
1992
  try {
1982
- const { thread } = await client.readThread({
1993
+ const { thread } = await client$1.readThread({
1983
1994
  threadId: forkCodexThreadId,
1984
1995
  includeTurns: true
1985
1996
  });
@@ -2076,7 +2087,7 @@ async function runCodex(opts) {
2076
2087
  turnActive = true;
2077
2088
  if (isCodexClearText(message.message)) {
2078
2089
  logger.logger.debug("[Codex] Handling /clear command - resetting Codex thread state");
2079
- client.clearThreadState();
2090
+ client$1.clearThreadState();
2080
2091
  currentTurnId = null;
2081
2092
  codexStartedSubagents = /* @__PURE__ */ new Set();
2082
2093
  codexActiveSubagents = /* @__PURE__ */ new Set();
@@ -2088,7 +2099,7 @@ async function runCodex(opts) {
2088
2099
  appendSystemPromptInjected = false;
2089
2100
  thinking = false;
2090
2101
  session.keepAlive(thinking, "remote");
2091
- messageBuffer$1.addMessage("Context was reset", "status");
2102
+ messageBuffer.addMessage("Context was reset", "status");
2092
2103
  session.sendSessionEvent({ type: "message", message: "Context was reset" });
2093
2104
  session.updateMetadata((currentMetadata) => {
2094
2105
  const nextMetadata = { ...currentMetadata };
@@ -2106,10 +2117,10 @@ async function runCodex(opts) {
2106
2117
  idleRelease.arm();
2107
2118
  continue;
2108
2119
  }
2109
- messageBuffer$1.addMessage(message.message, "user");
2120
+ messageBuffer.addMessage(message.message, "user");
2110
2121
  try {
2111
- await client.ensureConnected();
2112
- const sandboxManagedByHappy = client.sandboxEnabled;
2122
+ await client$1.ensureConnected();
2123
+ const sandboxManagedByHappy = client$1.sandboxEnabled;
2113
2124
  const executionPolicy = resolveCodexExecutionPolicy(
2114
2125
  message.mode.permissionMode,
2115
2126
  sandboxManagedByHappy
@@ -2118,8 +2129,8 @@ async function runCodex(opts) {
2118
2129
  if (effortRefusal) {
2119
2130
  throw new Error(effortRefusal);
2120
2131
  }
2121
- if (!client.hasActiveThread()) {
2122
- const startedThread = await client.startThread({
2132
+ if (!client$1.hasActiveThread()) {
2133
+ const startedThread = await client$1.startThread({
2123
2134
  model: message.mode.model,
2124
2135
  cwd: process.cwd(),
2125
2136
  approvalPolicy: executionPolicy.approvalPolicy,
@@ -2135,7 +2146,7 @@ async function runCodex(opts) {
2135
2146
  message.mode.appendSystemPrompt && !appendSystemPromptInjected
2136
2147
  );
2137
2148
  const turnPrompt = buildCodexTurnPrompt({
2138
- message: message.message,
2149
+ message: await projectInjector.decorate(message.message),
2139
2150
  mode: message.mode,
2140
2151
  includeAppendSystemPrompt,
2141
2152
  includeTitleInstruction: first
@@ -2144,7 +2155,7 @@ async function runCodex(opts) {
2144
2155
  happyHomeDir: configuration.configuration.happyHomeDir,
2145
2156
  sessionId: session.sessionId
2146
2157
  }) : [];
2147
- const result = await client.sendTurnAndWait(attachmentContent.appendStagedAttachmentsToPrompt(turnPrompt, staged), {
2158
+ const result = await client$1.sendTurnAndWait(attachmentContent.appendStagedAttachmentsToPrompt(turnPrompt, staged), {
2148
2159
  images: staged.filter((file) => ["image/jpeg", "image/png", "image/gif", "image/webp"].includes(file.mimeType)).map((file) => file.path),
2149
2160
  model: message.mode.model,
2150
2161
  approvalPolicy: executionPolicy.approvalPolicy,
@@ -2162,11 +2173,11 @@ async function runCodex(opts) {
2162
2173
  logger.logger.warn("Error in codex session", safeCodexErrorMetadata(error));
2163
2174
  const reason = describeThrownTurnError(error);
2164
2175
  if (reason) {
2165
- messageBuffer$1.addMessage(`Task failed: ${reason}`, "status");
2176
+ messageBuffer.addMessage(`Task failed: ${reason}`, "status");
2166
2177
  session.sendSessionEvent({ type: "message", message: `Codex error: ${reason}` });
2167
2178
  } else {
2168
2179
  const tail = codexStderrTailOf(error);
2169
- messageBuffer$1.addMessage("Process exited unexpectedly", "status");
2180
+ messageBuffer.addMessage("Process exited unexpectedly", "status");
2170
2181
  session.sendSessionEvent({ type: "message", message: tail ? `Process exited unexpectedly: ${tail}` : "Process exited unexpectedly" });
2171
2182
  }
2172
2183
  } finally {
@@ -2211,7 +2222,7 @@ async function runCodex(opts) {
2211
2222
  }
2212
2223
  idleRelease.cancel();
2213
2224
  logger.logger.debug("[codex]: client.disconnect begin");
2214
- await client.disconnect();
2225
+ await client$1.disconnect();
2215
2226
  logger.logger.debug("[codex]: client.disconnect done");
2216
2227
  logger.logger.debug("[codex]: happyServer.stop");
2217
2228
  happyServer.stop();
@@ -2235,7 +2246,7 @@ async function runCodex(opts) {
2235
2246
  logger.logger.debug("[codex]: inkInstance.unmount()");
2236
2247
  inkInstance.unmount();
2237
2248
  }
2238
- messageBuffer$1.clear();
2249
+ messageBuffer.clear();
2239
2250
  logActiveHandles("cleanup-end");
2240
2251
  logger.logger.debug("[codex]: Final cleanup completed");
2241
2252
  if (hibernationExit.hibernating && hibernationStamp) {