@happier-dev/stack 0.2.12 → 0.2.14-preview.1

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 (524) hide show
  1. package/README.md +2 -2
  2. package/node_modules/@happier-dev/agents/dist/acp.d.ts +14 -1
  3. package/node_modules/@happier-dev/agents/dist/acp.d.ts.map +1 -1
  4. package/node_modules/@happier-dev/agents/dist/acp.js +88 -0
  5. package/node_modules/@happier-dev/agents/dist/acp.js.map +1 -1
  6. package/node_modules/@happier-dev/agents/dist/auth.d.ts +1 -1
  7. package/node_modules/@happier-dev/agents/dist/auth.d.ts.map +1 -1
  8. package/node_modules/@happier-dev/agents/dist/auth.js +33 -0
  9. package/node_modules/@happier-dev/agents/dist/auth.js.map +1 -1
  10. package/node_modules/@happier-dev/agents/dist/index.d.ts +7 -7
  11. package/node_modules/@happier-dev/agents/dist/index.d.ts.map +1 -1
  12. package/node_modules/@happier-dev/agents/dist/index.js +7 -7
  13. package/node_modules/@happier-dev/agents/dist/index.js.map +1 -1
  14. package/node_modules/@happier-dev/agents/dist/localCli.d.ts +8 -2
  15. package/node_modules/@happier-dev/agents/dist/localCli.d.ts.map +1 -1
  16. package/node_modules/@happier-dev/agents/dist/localCli.js +38 -8
  17. package/node_modules/@happier-dev/agents/dist/localCli.js.map +1 -1
  18. package/node_modules/@happier-dev/agents/dist/localControl.d.ts +5 -0
  19. package/node_modules/@happier-dev/agents/dist/localControl.d.ts.map +1 -1
  20. package/node_modules/@happier-dev/agents/dist/localControl.js +21 -0
  21. package/node_modules/@happier-dev/agents/dist/localControl.js.map +1 -1
  22. package/node_modules/@happier-dev/agents/dist/manifest.d.ts +213 -12
  23. package/node_modules/@happier-dev/agents/dist/manifest.d.ts.map +1 -1
  24. package/node_modules/@happier-dev/agents/dist/manifest.js +135 -14
  25. package/node_modules/@happier-dev/agents/dist/manifest.js.map +1 -1
  26. package/node_modules/@happier-dev/agents/dist/models.d.ts.map +1 -1
  27. package/node_modules/@happier-dev/agents/dist/models.js +64 -4
  28. package/node_modules/@happier-dev/agents/dist/models.js.map +1 -1
  29. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/claudeRemote.d.ts +15 -0
  30. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/claudeRemote.d.ts.map +1 -1
  31. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/claudeRemote.js +7 -0
  32. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/claudeRemote.js.map +1 -1
  33. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/kimi.d.ts +3 -32
  34. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/kimi.d.ts.map +1 -1
  35. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/kimi.js +2 -21
  36. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/kimi.js.map +1 -1
  37. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/opencode.d.ts +25 -0
  38. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/opencode.d.ts.map +1 -1
  39. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/opencode.js +13 -0
  40. package/node_modules/@happier-dev/agents/dist/providerSettings/definitions/opencode.js.map +1 -1
  41. package/node_modules/@happier-dev/agents/dist/providerSettings/index.d.ts +3 -4
  42. package/node_modules/@happier-dev/agents/dist/providerSettings/index.d.ts.map +1 -1
  43. package/node_modules/@happier-dev/agents/dist/providerSettings/index.js +2 -2
  44. package/node_modules/@happier-dev/agents/dist/providerSettings/index.js.map +1 -1
  45. package/node_modules/@happier-dev/agents/dist/providers/claude/contextWindow.d.ts +2 -2
  46. package/node_modules/@happier-dev/agents/dist/providers/claude/contextWindow.d.ts.map +1 -1
  47. package/node_modules/@happier-dev/agents/dist/providers/claude/contextWindow.js +6 -2
  48. package/node_modules/@happier-dev/agents/dist/providers/claude/contextWindow.js.map +1 -1
  49. package/node_modules/@happier-dev/agents/dist/providers/claude/effort.d.ts.map +1 -1
  50. package/node_modules/@happier-dev/agents/dist/providers/claude/effort.js +4 -0
  51. package/node_modules/@happier-dev/agents/dist/providers/claude/effort.js.map +1 -1
  52. package/node_modules/@happier-dev/agents/dist/providers/claude/flagshipModel.d.ts +1 -1
  53. package/node_modules/@happier-dev/agents/dist/providers/claude/flagshipModel.d.ts.map +1 -1
  54. package/node_modules/@happier-dev/agents/dist/providers/claude/flagshipModel.js +1 -1
  55. package/node_modules/@happier-dev/agents/dist/providers/claude/flagshipModel.js.map +1 -1
  56. package/node_modules/@happier-dev/agents/dist/providers/claude/index.d.ts +1 -0
  57. package/node_modules/@happier-dev/agents/dist/providers/claude/index.d.ts.map +1 -1
  58. package/node_modules/@happier-dev/agents/dist/providers/claude/index.js +1 -0
  59. package/node_modules/@happier-dev/agents/dist/providers/claude/index.js.map +1 -1
  60. package/node_modules/@happier-dev/agents/dist/providers/claude/internalEventTypes.d.ts +3 -0
  61. package/node_modules/@happier-dev/agents/dist/providers/claude/internalEventTypes.d.ts.map +1 -0
  62. package/node_modules/@happier-dev/agents/dist/providers/claude/internalEventTypes.js +27 -0
  63. package/node_modules/@happier-dev/agents/dist/providers/claude/internalEventTypes.js.map +1 -0
  64. package/node_modules/@happier-dev/agents/dist/providers/providerCliRuntime.d.ts +33 -0
  65. package/node_modules/@happier-dev/agents/dist/providers/providerCliRuntime.d.ts.map +1 -1
  66. package/node_modules/@happier-dev/agents/dist/providers/providerCliRuntime.js +121 -6
  67. package/node_modules/@happier-dev/agents/dist/providers/providerCliRuntime.js.map +1 -1
  68. package/node_modules/@happier-dev/agents/dist/sessionControls/existingSessionAutomationPolicy.d.ts +16 -0
  69. package/node_modules/@happier-dev/agents/dist/sessionControls/existingSessionAutomationPolicy.d.ts.map +1 -1
  70. package/node_modules/@happier-dev/agents/dist/sessionControls/existingSessionAutomationPolicy.js +34 -7
  71. package/node_modules/@happier-dev/agents/dist/sessionControls/existingSessionAutomationPolicy.js.map +1 -1
  72. package/node_modules/@happier-dev/agents/dist/sessionControls/providerSessionBackends.d.ts +5 -0
  73. package/node_modules/@happier-dev/agents/dist/sessionControls/providerSessionBackends.d.ts.map +1 -1
  74. package/node_modules/@happier-dev/agents/dist/sessionControls/providerSessionBackends.js +9 -17
  75. package/node_modules/@happier-dev/agents/dist/sessionControls/providerSessionBackends.js.map +1 -1
  76. package/node_modules/@happier-dev/agents/dist/sessionControls/vendorResumePolicy.d.ts +10 -1
  77. package/node_modules/@happier-dev/agents/dist/sessionControls/vendorResumePolicy.d.ts.map +1 -1
  78. package/node_modules/@happier-dev/agents/dist/sessionControls/vendorResumePolicy.js +30 -1
  79. package/node_modules/@happier-dev/agents/dist/sessionControls/vendorResumePolicy.js.map +1 -1
  80. package/node_modules/@happier-dev/agents/dist/sessionModes.d.ts.map +1 -1
  81. package/node_modules/@happier-dev/agents/dist/sessionModes.js +10 -1
  82. package/node_modules/@happier-dev/agents/dist/sessionModes.js.map +1 -1
  83. package/node_modules/@happier-dev/agents/dist/types.d.ts +7 -5
  84. package/node_modules/@happier-dev/agents/dist/types.d.ts.map +1 -1
  85. package/node_modules/@happier-dev/agents/dist/types.js +4 -4
  86. package/node_modules/@happier-dev/agents/dist/types.js.map +1 -1
  87. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliBinaryArtifactPayload.d.ts.map +1 -1
  88. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliBinaryArtifactPayload.js +17 -21
  89. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliBinaryArtifactPayload.js.map +1 -1
  90. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliOptionalComponentArtifactPayload.d.ts +9 -0
  91. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliOptionalComponentArtifactPayload.d.ts.map +1 -0
  92. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliOptionalComponentArtifactPayload.js +45 -0
  93. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildCliOptionalComponentArtifactPayload.js.map +1 -0
  94. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildServerBinaryArtifactPayload.d.ts.map +1 -1
  95. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildServerBinaryArtifactPayload.js +18 -5
  96. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/buildServerBinaryArtifactPayload.js.map +1 -1
  97. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/commands.d.ts +2 -1
  98. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/commands.d.ts.map +1 -1
  99. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/commands.js +7 -1
  100. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/commands.js.map +1 -1
  101. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/finalizeRuntimeArtifactPayload.d.ts +2 -1
  102. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/finalizeRuntimeArtifactPayload.d.ts.map +1 -1
  103. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/finalizeRuntimeArtifactPayload.js +348 -13
  104. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/finalizeRuntimeArtifactPayload.js.map +1 -1
  105. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/index.d.ts +1 -0
  106. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/index.d.ts.map +1 -1
  107. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/index.js +1 -0
  108. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/index.js.map +1 -1
  109. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/refreshCliBinaryArtifactRuntimeAssetBuildManifest.d.ts +3 -0
  110. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/refreshCliBinaryArtifactRuntimeAssetBuildManifest.d.ts.map +1 -1
  111. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/refreshCliBinaryArtifactRuntimeAssetBuildManifest.js +19 -0
  112. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/refreshCliBinaryArtifactRuntimeAssetBuildManifest.js.map +1 -1
  113. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/targets.d.ts +1 -0
  114. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/targets.d.ts.map +1 -1
  115. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/targets.js +14 -0
  116. package/node_modules/@happier-dev/cli-common/dist/componentArtifacts/targets.js.map +1 -1
  117. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/acquisitionProgress.d.ts +14 -0
  118. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/acquisitionProgress.d.ts.map +1 -0
  119. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/acquisitionProgress.js +34 -0
  120. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/acquisitionProgress.js.map +1 -0
  121. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/componentCatalog.d.ts +27 -1
  122. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/componentCatalog.d.ts.map +1 -1
  123. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/componentCatalog.js +29 -1
  124. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/componentCatalog.js.map +1 -1
  125. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/copyRuntimePayloadTree.d.ts +1 -1
  126. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/copyRuntimePayloadTree.d.ts.map +1 -1
  127. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/copyRuntimePayloadTree.js +6 -14
  128. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/copyRuntimePayloadTree.js.map +1 -1
  129. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/ensureHappierCliPathExposure.d.ts +125 -0
  130. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/ensureHappierCliPathExposure.d.ts.map +1 -0
  131. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/ensureHappierCliPathExposure.js +494 -0
  132. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/ensureHappierCliPathExposure.js.map +1 -0
  133. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/extractReleasePayloadRootFromArchive.d.ts +1 -0
  134. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/extractReleasePayloadRootFromArchive.d.ts.map +1 -1
  135. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/extractReleasePayloadRootFromArchive.js +1 -0
  136. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/extractReleasePayloadRootFromArchive.js.map +1 -1
  137. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliChoice.d.ts +27 -0
  138. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliChoice.d.ts.map +1 -0
  139. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliChoice.js +36 -0
  140. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliChoice.js.map +1 -0
  141. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliOrigin.d.ts +31 -0
  142. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliOrigin.d.ts.map +1 -0
  143. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliOrigin.js +81 -0
  144. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/happierCliOrigin.js.map +1 -0
  145. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/index.d.ts +14 -8
  146. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/index.d.ts.map +1 -1
  147. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/index.js +8 -5
  148. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/index.js.map +1 -1
  149. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/installVersionedPayload.d.ts +54 -1
  150. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/installVersionedPayload.d.ts.map +1 -1
  151. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/installVersionedPayload.js +92 -24
  152. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/installVersionedPayload.js.map +1 -1
  153. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/prepareFirstPartyComponentPayloadFromGitHubRelease.d.ts +25 -1
  154. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/prepareFirstPartyComponentPayloadFromGitHubRelease.d.ts.map +1 -1
  155. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/prepareFirstPartyComponentPayloadFromGitHubRelease.js +79 -45
  156. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/prepareFirstPartyComponentPayloadFromGitHubRelease.js.map +1 -1
  157. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/restoreInstalledPayloadState.d.ts +50 -0
  158. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/restoreInstalledPayloadState.d.ts.map +1 -0
  159. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/restoreInstalledPayloadState.js +136 -0
  160. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/restoreInstalledPayloadState.js.map +1 -0
  161. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/runManagedCliUpdate.d.ts +117 -0
  162. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/runManagedCliUpdate.d.ts.map +1 -0
  163. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/runManagedCliUpdate.js +272 -0
  164. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/runManagedCliUpdate.js.map +1 -0
  165. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/selfHostServerEnv.d.ts.map +1 -1
  166. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/selfHostServerEnv.js +19 -13
  167. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/selfHostServerEnv.js.map +1 -1
  168. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/serverRuntimeArtifactLayout.d.ts +0 -4
  169. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/serverRuntimeArtifactLayout.d.ts.map +1 -1
  170. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/serverRuntimeArtifactLayout.js +0 -20
  171. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/serverRuntimeArtifactLayout.js.map +1 -1
  172. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/withFirstPartyPayloadMutationLock.d.ts +36 -0
  173. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/withFirstPartyPayloadMutationLock.d.ts.map +1 -0
  174. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/withFirstPartyPayloadMutationLock.js +155 -0
  175. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/withFirstPartyPayloadMutationLock.js.map +1 -0
  176. package/node_modules/@happier-dev/cli-common/dist/fs/windowsProtectedAcl.d.ts.map +1 -1
  177. package/node_modules/@happier-dev/cli-common/dist/fs/windowsProtectedAcl.js +20 -16
  178. package/node_modules/@happier-dev/cli-common/dist/fs/windowsProtectedAcl.js.map +1 -1
  179. package/node_modules/@happier-dev/cli-common/dist/output/index.d.ts +1 -0
  180. package/node_modules/@happier-dev/cli-common/dist/output/index.d.ts.map +1 -1
  181. package/node_modules/@happier-dev/cli-common/dist/output/index.js +1 -0
  182. package/node_modules/@happier-dev/cli-common/dist/output/index.js.map +1 -1
  183. package/node_modules/@happier-dev/cli-common/dist/output/planet.d.ts.map +1 -1
  184. package/node_modules/@happier-dev/cli-common/dist/output/planet.js +19 -52
  185. package/node_modules/@happier-dev/cli-common/dist/output/planet.js.map +1 -1
  186. package/node_modules/@happier-dev/cli-common/dist/process/index.d.ts +2 -1
  187. package/node_modules/@happier-dev/cli-common/dist/process/index.d.ts.map +1 -1
  188. package/node_modules/@happier-dev/cli-common/dist/process/index.js +1 -1
  189. package/node_modules/@happier-dev/cli-common/dist/process/index.js.map +1 -1
  190. package/node_modules/@happier-dev/cli-common/dist/process/runCommandStreaming.d.ts +39 -0
  191. package/node_modules/@happier-dev/cli-common/dist/process/runCommandStreaming.d.ts.map +1 -1
  192. package/node_modules/@happier-dev/cli-common/dist/process/runCommandStreaming.js +95 -28
  193. package/node_modules/@happier-dev/cli-common/dist/process/runCommandStreaming.js.map +1 -1
  194. package/node_modules/@happier-dev/cli-common/dist/process/windows/resolveWindowsCommandInvocation.d.ts +6 -1
  195. package/node_modules/@happier-dev/cli-common/dist/process/windows/resolveWindowsCommandInvocation.d.ts.map +1 -1
  196. package/node_modules/@happier-dev/cli-common/dist/process/windows/resolveWindowsCommandInvocation.js +7 -2
  197. package/node_modules/@happier-dev/cli-common/dist/process/windows/resolveWindowsCommandInvocation.js.map +1 -1
  198. package/node_modules/@happier-dev/cli-common/dist/providers/index.d.ts +6 -4
  199. package/node_modules/@happier-dev/cli-common/dist/providers/index.d.ts.map +1 -1
  200. package/node_modules/@happier-dev/cli-common/dist/providers/index.js +4 -3
  201. package/node_modules/@happier-dev/cli-common/dist/providers/index.js.map +1 -1
  202. package/node_modules/@happier-dev/cli-common/dist/providers/install.d.ts +27 -1
  203. package/node_modules/@happier-dev/cli-common/dist/providers/install.d.ts.map +1 -1
  204. package/node_modules/@happier-dev/cli-common/dist/providers/install.js +164 -56
  205. package/node_modules/@happier-dev/cli-common/dist/providers/install.js.map +1 -1
  206. package/node_modules/@happier-dev/cli-common/dist/providers/installCommandTimeout.d.ts +7 -0
  207. package/node_modules/@happier-dev/cli-common/dist/providers/installCommandTimeout.d.ts.map +1 -0
  208. package/node_modules/@happier-dev/cli-common/dist/providers/installCommandTimeout.js +17 -0
  209. package/node_modules/@happier-dev/cli-common/dist/providers/installCommandTimeout.js.map +1 -0
  210. package/node_modules/@happier-dev/cli-common/dist/providers/managedPnpm.d.ts +10 -0
  211. package/node_modules/@happier-dev/cli-common/dist/providers/managedPnpm.d.ts.map +1 -1
  212. package/node_modules/@happier-dev/cli-common/dist/providers/managedPnpm.js +47 -10
  213. package/node_modules/@happier-dev/cli-common/dist/providers/managedPnpm.js.map +1 -1
  214. package/node_modules/@happier-dev/cli-common/dist/providers/resolution.d.ts +8 -0
  215. package/node_modules/@happier-dev/cli-common/dist/providers/resolution.d.ts.map +1 -1
  216. package/node_modules/@happier-dev/cli-common/dist/providers/resolution.js +71 -0
  217. package/node_modules/@happier-dev/cli-common/dist/providers/resolution.js.map +1 -1
  218. package/node_modules/@happier-dev/cli-common/dist/providers/update.d.ts +54 -0
  219. package/node_modules/@happier-dev/cli-common/dist/providers/update.d.ts.map +1 -0
  220. package/node_modules/@happier-dev/cli-common/dist/providers/update.js +184 -0
  221. package/node_modules/@happier-dev/cli-common/dist/providers/update.js.map +1 -0
  222. package/node_modules/@happier-dev/cli-common/dist/service/launchd.d.ts +7 -0
  223. package/node_modules/@happier-dev/cli-common/dist/service/launchd.d.ts.map +1 -1
  224. package/node_modules/@happier-dev/cli-common/dist/service/launchd.js +1 -1
  225. package/node_modules/@happier-dev/cli-common/dist/service/launchd.js.map +1 -1
  226. package/node_modules/@happier-dev/cli-common/dist/service/manager.d.ts.map +1 -1
  227. package/node_modules/@happier-dev/cli-common/dist/service/manager.js +20 -1
  228. package/node_modules/@happier-dev/cli-common/dist/service/manager.js.map +1 -1
  229. package/node_modules/@happier-dev/cli-common/dist/service/windows.d.ts +7 -0
  230. package/node_modules/@happier-dev/cli-common/dist/service/windows.d.ts.map +1 -1
  231. package/node_modules/@happier-dev/cli-common/dist/service/windows.js +9 -31
  232. package/node_modules/@happier-dev/cli-common/dist/service/windows.js.map +1 -1
  233. package/node_modules/@happier-dev/cli-common/dist/systemTasks/runSystemTask.d.ts +2 -0
  234. package/node_modules/@happier-dev/cli-common/dist/systemTasks/runSystemTask.d.ts.map +1 -1
  235. package/node_modules/@happier-dev/cli-common/dist/systemTasks/runSystemTask.js +8 -0
  236. package/node_modules/@happier-dev/cli-common/dist/systemTasks/runSystemTask.js.map +1 -1
  237. package/node_modules/@happier-dev/cli-common/dist/update/index.d.ts +70 -1
  238. package/node_modules/@happier-dev/cli-common/dist/update/index.d.ts.map +1 -1
  239. package/node_modules/@happier-dev/cli-common/dist/update/index.js +102 -5
  240. package/node_modules/@happier-dev/cli-common/dist/update/index.js.map +1 -1
  241. package/node_modules/@happier-dev/cli-common/dist/workspaces/index.d.ts +1 -0
  242. package/node_modules/@happier-dev/cli-common/dist/workspaces/index.d.ts.map +1 -1
  243. package/node_modules/@happier-dev/cli-common/dist/workspaces/index.js +24 -2
  244. package/node_modules/@happier-dev/cli-common/dist/workspaces/index.js.map +1 -1
  245. package/node_modules/@happier-dev/cli-common/nodePtySpawnHelperPermissions.cjs +48 -0
  246. package/node_modules/@happier-dev/cli-common/nodePtySpawnHelperPermissions.d.cts +2 -0
  247. package/node_modules/@happier-dev/cli-common/numericPlanetFrame.d.mts +12 -0
  248. package/node_modules/@happier-dev/cli-common/numericPlanetFrame.mjs +36 -0
  249. package/node_modules/@happier-dev/cli-common/package.json +11 -0
  250. package/node_modules/@happier-dev/connection-supervisor/dist/createManagedConnectionSupervisor.d.ts.map +1 -1
  251. package/node_modules/@happier-dev/connection-supervisor/dist/createManagedConnectionSupervisor.js +16 -6
  252. package/node_modules/@happier-dev/connection-supervisor/dist/createManagedConnectionSupervisor.js.map +1 -1
  253. package/node_modules/@happier-dev/connection-supervisor/dist/createManagedEndpointSupervisor.d.ts.map +1 -1
  254. package/node_modules/@happier-dev/connection-supervisor/dist/createManagedEndpointSupervisor.js +7 -1
  255. package/node_modules/@happier-dev/connection-supervisor/dist/createManagedEndpointSupervisor.js.map +1 -1
  256. package/node_modules/@happier-dev/connection-supervisor/dist/index.d.ts +1 -1
  257. package/node_modules/@happier-dev/connection-supervisor/dist/index.d.ts.map +1 -1
  258. package/node_modules/@happier-dev/connection-supervisor/dist/managedConnectionTypes.d.ts +5 -1
  259. package/node_modules/@happier-dev/connection-supervisor/dist/managedConnectionTypes.d.ts.map +1 -1
  260. package/node_modules/@happier-dev/connection-supervisor/dist/managedEndpointSupervisorTypes.d.ts +3 -2
  261. package/node_modules/@happier-dev/connection-supervisor/dist/managedEndpointSupervisorTypes.d.ts.map +1 -1
  262. package/node_modules/@happier-dev/protocol/dist/account/settings/accountSettings.d.ts +4 -0
  263. package/node_modules/@happier-dev/protocol/dist/account/settings/accountSettings.d.ts.map +1 -1
  264. package/node_modules/@happier-dev/protocol/dist/account/settings/accountSettings.js +2 -0
  265. package/node_modules/@happier-dev/protocol/dist/account/settings/accountSettings.js.map +1 -1
  266. package/node_modules/@happier-dev/protocol/dist/actions/actionExecutor.d.ts.map +1 -1
  267. package/node_modules/@happier-dev/protocol/dist/actions/actionExecutor.js +4 -9
  268. package/node_modules/@happier-dev/protocol/dist/actions/actionExecutor.js.map +1 -1
  269. package/node_modules/@happier-dev/protocol/dist/actions/actionSpecs.d.ts +7 -0
  270. package/node_modules/@happier-dev/protocol/dist/actions/actionSpecs.d.ts.map +1 -1
  271. package/node_modules/@happier-dev/protocol/dist/actions/actionSpecs.js +27 -17
  272. package/node_modules/@happier-dev/protocol/dist/actions/actionSpecs.js.map +1 -1
  273. package/node_modules/@happier-dev/protocol/dist/actions/actionToolExposure.d.ts +6 -1
  274. package/node_modules/@happier-dev/protocol/dist/actions/actionToolExposure.d.ts.map +1 -1
  275. package/node_modules/@happier-dev/protocol/dist/actions/actionToolExposure.js +11 -1
  276. package/node_modules/@happier-dev/protocol/dist/actions/actionToolExposure.js.map +1 -1
  277. package/node_modules/@happier-dev/protocol/dist/actions/executionRunActionPermissionMode.d.ts +5 -2
  278. package/node_modules/@happier-dev/protocol/dist/actions/executionRunActionPermissionMode.d.ts.map +1 -1
  279. package/node_modules/@happier-dev/protocol/dist/actions/executionRunActionPermissionMode.js +25 -3
  280. package/node_modules/@happier-dev/protocol/dist/actions/executionRunActionPermissionMode.js.map +1 -1
  281. package/node_modules/@happier-dev/protocol/dist/actions/index.d.ts +1 -1
  282. package/node_modules/@happier-dev/protocol/dist/actions/index.d.ts.map +1 -1
  283. package/node_modules/@happier-dev/protocol/dist/actions/index.js +1 -1
  284. package/node_modules/@happier-dev/protocol/dist/actions/index.js.map +1 -1
  285. package/node_modules/@happier-dev/protocol/dist/bugReports/export.d.ts +19 -0
  286. package/node_modules/@happier-dev/protocol/dist/bugReports/export.d.ts.map +1 -0
  287. package/node_modules/@happier-dev/protocol/dist/bugReports/export.js +17 -0
  288. package/node_modules/@happier-dev/protocol/dist/bugReports/export.js.map +1 -0
  289. package/node_modules/@happier-dev/protocol/dist/bugReports/submit.d.ts.map +1 -1
  290. package/node_modules/@happier-dev/protocol/dist/bugReports/submit.js +6 -5
  291. package/node_modules/@happier-dev/protocol/dist/bugReports/submit.js.map +1 -1
  292. package/node_modules/@happier-dev/protocol/dist/bugReports.d.ts +1 -0
  293. package/node_modules/@happier-dev/protocol/dist/bugReports.d.ts.map +1 -1
  294. package/node_modules/@happier-dev/protocol/dist/bugReports.js +1 -0
  295. package/node_modules/@happier-dev/protocol/dist/bugReports.js.map +1 -1
  296. package/node_modules/@happier-dev/protocol/dist/connect/accountUsage.d.ts +4 -0
  297. package/node_modules/@happier-dev/protocol/dist/connect/accountUsage.d.ts.map +1 -1
  298. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceAuthGroupMemberRuntimeStatePolicy.d.ts.map +1 -1
  299. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceAuthGroupMemberRuntimeStatePolicy.js +3 -0
  300. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceAuthGroupMemberRuntimeStatePolicy.js.map +1 -1
  301. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceQuotaLimitSelection.d.ts +11 -0
  302. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceQuotaLimitSelection.d.ts.map +1 -0
  303. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceQuotaLimitSelection.js +20 -0
  304. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceQuotaLimitSelection.js.map +1 -0
  305. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceSchemas.d.ts +127 -0
  306. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceSchemas.d.ts.map +1 -1
  307. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceSchemas.js +45 -1
  308. package/node_modules/@happier-dev/protocol/dist/connect/connectedServiceSchemas.js.map +1 -1
  309. package/node_modules/@happier-dev/protocol/dist/connect/normalizeConnectedServiceSelectionInput.d.ts +5 -4
  310. package/node_modules/@happier-dev/protocol/dist/connect/normalizeConnectedServiceSelectionInput.d.ts.map +1 -1
  311. package/node_modules/@happier-dev/protocol/dist/connect/normalizeConnectedServiceSelectionInput.js +8 -2
  312. package/node_modules/@happier-dev/protocol/dist/connect/normalizeConnectedServiceSelectionInput.js.map +1 -1
  313. package/node_modules/@happier-dev/protocol/dist/connect/quotaObservationTime.d.ts +21 -0
  314. package/node_modules/@happier-dev/protocol/dist/connect/quotaObservationTime.d.ts.map +1 -0
  315. package/node_modules/@happier-dev/protocol/dist/connect/quotaObservationTime.js +39 -0
  316. package/node_modules/@happier-dev/protocol/dist/connect/quotaObservationTime.js.map +1 -0
  317. package/node_modules/@happier-dev/protocol/dist/daemonExecutionRuns.d.ts +12 -0
  318. package/node_modules/@happier-dev/protocol/dist/daemonExecutionRuns.d.ts.map +1 -1
  319. package/node_modules/@happier-dev/protocol/dist/daemonExecutionRuns.js +2 -1
  320. package/node_modules/@happier-dev/protocol/dist/daemonExecutionRuns.js.map +1 -1
  321. package/node_modules/@happier-dev/protocol/dist/daemonTerminal.d.ts +9 -0
  322. package/node_modules/@happier-dev/protocol/dist/daemonTerminal.d.ts.map +1 -1
  323. package/node_modules/@happier-dev/protocol/dist/daemonTerminal.js +4 -0
  324. package/node_modules/@happier-dev/protocol/dist/daemonTerminal.js.map +1 -1
  325. package/node_modules/@happier-dev/protocol/dist/diagnostics/doctorSnapshot.d.ts +129 -0
  326. package/node_modules/@happier-dev/protocol/dist/diagnostics/doctorSnapshot.d.ts.map +1 -1
  327. package/node_modules/@happier-dev/protocol/dist/diagnostics/doctorSnapshot.js +48 -0
  328. package/node_modules/@happier-dev/protocol/dist/diagnostics/doctorSnapshot.js.map +1 -1
  329. package/node_modules/@happier-dev/protocol/dist/directSessions/daemonRpcV1.d.ts +197 -0
  330. package/node_modules/@happier-dev/protocol/dist/directSessions/daemonRpcV1.d.ts.map +1 -1
  331. package/node_modules/@happier-dev/protocol/dist/directSessions/daemonRpcV1.js +74 -2
  332. package/node_modules/@happier-dev/protocol/dist/directSessions/daemonRpcV1.js.map +1 -1
  333. package/node_modules/@happier-dev/protocol/dist/encryption/clientEncryptionRequirement.d.ts +12 -0
  334. package/node_modules/@happier-dev/protocol/dist/encryption/clientEncryptionRequirement.d.ts.map +1 -0
  335. package/node_modules/@happier-dev/protocol/dist/encryption/clientEncryptionRequirement.js +15 -0
  336. package/node_modules/@happier-dev/protocol/dist/encryption/clientEncryptionRequirement.js.map +1 -0
  337. package/node_modules/@happier-dev/protocol/dist/executionRunObservationTimeout.d.ts +2 -0
  338. package/node_modules/@happier-dev/protocol/dist/executionRunObservationTimeout.d.ts.map +1 -0
  339. package/node_modules/@happier-dev/protocol/dist/executionRunObservationTimeout.js +2 -0
  340. package/node_modules/@happier-dev/protocol/dist/executionRunObservationTimeout.js.map +1 -0
  341. package/node_modules/@happier-dev/protocol/dist/executionRunRequestedConfiguration.d.ts +16 -0
  342. package/node_modules/@happier-dev/protocol/dist/executionRunRequestedConfiguration.d.ts.map +1 -0
  343. package/node_modules/@happier-dev/protocol/dist/executionRunRequestedConfiguration.js +26 -0
  344. package/node_modules/@happier-dev/protocol/dist/executionRunRequestedConfiguration.js.map +1 -0
  345. package/node_modules/@happier-dev/protocol/dist/executionRunStartRequest.d.ts +6 -2
  346. package/node_modules/@happier-dev/protocol/dist/executionRunStartRequest.d.ts.map +1 -1
  347. package/node_modules/@happier-dev/protocol/dist/executionRunStartRequest.js +5 -2
  348. package/node_modules/@happier-dev/protocol/dist/executionRunStartRequest.js.map +1 -1
  349. package/node_modules/@happier-dev/protocol/dist/executionRuns.d.ts +16 -2
  350. package/node_modules/@happier-dev/protocol/dist/executionRuns.d.ts.map +1 -1
  351. package/node_modules/@happier-dev/protocol/dist/executionRuns.js +4 -0
  352. package/node_modules/@happier-dev/protocol/dist/executionRuns.js.map +1 -1
  353. package/node_modules/@happier-dev/protocol/dist/features/catalog.d.ts +12 -0
  354. package/node_modules/@happier-dev/protocol/dist/features/catalog.d.ts.map +1 -1
  355. package/node_modules/@happier-dev/protocol/dist/features/catalog.js +12 -0
  356. package/node_modules/@happier-dev/protocol/dist/features/catalog.js.map +1 -1
  357. package/node_modules/@happier-dev/protocol/dist/features/decision.d.ts +2 -0
  358. package/node_modules/@happier-dev/protocol/dist/features/decision.d.ts.map +1 -1
  359. package/node_modules/@happier-dev/protocol/dist/features/embeddedFeaturePolicies.generated.d.ts +1 -1
  360. package/node_modules/@happier-dev/protocol/dist/features/embeddedFeaturePolicies.generated.d.ts.map +1 -1
  361. package/node_modules/@happier-dev/protocol/dist/features/embeddedFeaturePolicies.generated.js +1 -1
  362. package/node_modules/@happier-dev/protocol/dist/features/embeddedFeaturePolicies.generated.js.map +1 -1
  363. package/node_modules/@happier-dev/protocol/dist/features/payload/featureGatesSchema.d.ts +6 -0
  364. package/node_modules/@happier-dev/protocol/dist/features/payload/featureGatesSchema.d.ts.map +1 -1
  365. package/node_modules/@happier-dev/protocol/dist/features/payload/featureGatesSchema.js +4 -0
  366. package/node_modules/@happier-dev/protocol/dist/features/payload/featureGatesSchema.js.map +1 -1
  367. package/node_modules/@happier-dev/protocol/dist/features/payload/featuresResponseSchema.d.ts +6 -0
  368. package/node_modules/@happier-dev/protocol/dist/features/payload/featuresResponseSchema.d.ts.map +1 -1
  369. package/node_modules/@happier-dev/protocol/dist/index.d.ts +18 -11
  370. package/node_modules/@happier-dev/protocol/dist/index.d.ts.map +1 -1
  371. package/node_modules/@happier-dev/protocol/dist/index.js +18 -11
  372. package/node_modules/@happier-dev/protocol/dist/index.js.map +1 -1
  373. package/node_modules/@happier-dev/protocol/dist/installables.d.ts +36 -2
  374. package/node_modules/@happier-dev/protocol/dist/installables.d.ts.map +1 -1
  375. package/node_modules/@happier-dev/protocol/dist/installables.js +29 -1
  376. package/node_modules/@happier-dev/protocol/dist/installables.js.map +1 -1
  377. package/node_modules/@happier-dev/protocol/dist/machines/cliUpdateFacts.d.ts +92 -0
  378. package/node_modules/@happier-dev/protocol/dist/machines/cliUpdateFacts.d.ts.map +1 -0
  379. package/node_modules/@happier-dev/protocol/dist/machines/cliUpdateFacts.js +70 -0
  380. package/node_modules/@happier-dev/protocol/dist/machines/cliUpdateFacts.js.map +1 -0
  381. package/node_modules/@happier-dev/protocol/dist/machines/index.d.ts +1 -0
  382. package/node_modules/@happier-dev/protocol/dist/machines/index.d.ts.map +1 -1
  383. package/node_modules/@happier-dev/protocol/dist/machines/index.js +1 -0
  384. package/node_modules/@happier-dev/protocol/dist/machines/index.js.map +1 -1
  385. package/node_modules/@happier-dev/protocol/dist/mcpServers/daemonRpcV1.d.ts +42 -0
  386. package/node_modules/@happier-dev/protocol/dist/mcpServers/daemonRpcV1.d.ts.map +1 -1
  387. package/node_modules/@happier-dev/protocol/dist/mcpServers/previewV1.d.ts +14 -0
  388. package/node_modules/@happier-dev/protocol/dist/mcpServers/previewV1.d.ts.map +1 -1
  389. package/node_modules/@happier-dev/protocol/dist/prompts/executionRunsGuidanceV1.d.ts.map +1 -1
  390. package/node_modules/@happier-dev/protocol/dist/prompts/executionRunsGuidanceV1.js +2 -1
  391. package/node_modules/@happier-dev/protocol/dist/prompts/executionRunsGuidanceV1.js.map +1 -1
  392. package/node_modules/@happier-dev/protocol/dist/providers/agentProviderIdsV1.d.ts +8 -1
  393. package/node_modules/@happier-dev/protocol/dist/providers/agentProviderIdsV1.d.ts.map +1 -1
  394. package/node_modules/@happier-dev/protocol/dist/providers/agentProviderIdsV1.js +18 -1
  395. package/node_modules/@happier-dev/protocol/dist/providers/agentProviderIdsV1.js.map +1 -1
  396. package/node_modules/@happier-dev/protocol/dist/providers/agy/installables.d.ts +7 -0
  397. package/node_modules/@happier-dev/protocol/dist/providers/agy/installables.d.ts.map +1 -0
  398. package/node_modules/@happier-dev/protocol/dist/providers/agy/installables.js +6 -0
  399. package/node_modules/@happier-dev/protocol/dist/providers/agy/installables.js.map +1 -0
  400. package/node_modules/@happier-dev/protocol/dist/push/expoPushDelivery.d.ts +1 -0
  401. package/node_modules/@happier-dev/protocol/dist/push/expoPushDelivery.d.ts.map +1 -1
  402. package/node_modules/@happier-dev/protocol/dist/push/expoPushDelivery.js +1 -1
  403. package/node_modules/@happier-dev/protocol/dist/push/expoPushDelivery.js.map +1 -1
  404. package/node_modules/@happier-dev/protocol/dist/rpc.d.ts +5 -0
  405. package/node_modules/@happier-dev/protocol/dist/rpc.d.ts.map +1 -1
  406. package/node_modules/@happier-dev/protocol/dist/rpc.js +5 -0
  407. package/node_modules/@happier-dev/protocol/dist/rpc.js.map +1 -1
  408. package/node_modules/@happier-dev/protocol/dist/sessionAgentTransition.d.ts +40 -0
  409. package/node_modules/@happier-dev/protocol/dist/sessionAgentTransition.d.ts.map +1 -1
  410. package/node_modules/@happier-dev/protocol/dist/sessionAgentTransition.js +17 -0
  411. package/node_modules/@happier-dev/protocol/dist/sessionAgentTransition.js.map +1 -1
  412. package/node_modules/@happier-dev/protocol/dist/sessionControl/contract.d.ts +26 -0
  413. package/node_modules/@happier-dev/protocol/dist/sessionControl/contract.d.ts.map +1 -1
  414. package/node_modules/@happier-dev/protocol/dist/sessionControl/contract.js +2 -0
  415. package/node_modules/@happier-dev/protocol/dist/sessionControl/contract.js.map +1 -1
  416. package/node_modules/@happier-dev/protocol/dist/sessionControl/handoff/handoffSchemas.d.ts +27 -0
  417. package/node_modules/@happier-dev/protocol/dist/sessionControl/handoff/handoffSchemas.d.ts.map +1 -1
  418. package/node_modules/@happier-dev/protocol/dist/sessionControl/handoff/handoffTypes.d.ts +3 -0
  419. package/node_modules/@happier-dev/protocol/dist/sessionControl/handoff/handoffTypes.d.ts.map +1 -1
  420. package/node_modules/@happier-dev/protocol/dist/sessionFolders/folderAssignments.d.ts +1 -0
  421. package/node_modules/@happier-dev/protocol/dist/sessionFolders/folderAssignments.d.ts.map +1 -1
  422. package/node_modules/@happier-dev/protocol/dist/sessionMessages/sessionMessageMeta.d.ts +2 -0
  423. package/node_modules/@happier-dev/protocol/dist/sessionMessages/sessionMessageMeta.d.ts.map +1 -1
  424. package/node_modules/@happier-dev/protocol/dist/sessionMessages/sessionMessageMeta.js +7 -0
  425. package/node_modules/@happier-dev/protocol/dist/sessionMessages/sessionMessageMeta.js.map +1 -1
  426. package/node_modules/@happier-dev/protocol/dist/sessionMetadata/sessionPermissionModes.d.ts +8 -0
  427. package/node_modules/@happier-dev/protocol/dist/sessionMetadata/sessionPermissionModes.d.ts.map +1 -1
  428. package/node_modules/@happier-dev/protocol/dist/sessionMetadata/sessionPermissionModes.js +13 -0
  429. package/node_modules/@happier-dev/protocol/dist/sessionMetadata/sessionPermissionModes.js.map +1 -1
  430. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/snapshot.d.ts +3 -0
  431. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/snapshot.d.ts.map +1 -1
  432. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/snapshot.js +1 -0
  433. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/snapshot.js.map +1 -1
  434. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/standings.d.ts +4 -1
  435. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/standings.d.ts.map +1 -1
  436. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/standings.js +6 -1
  437. package/node_modules/@happier-dev/protocol/dist/sessionOrganization/standings.js.map +1 -1
  438. package/node_modules/@happier-dev/protocol/dist/sessionWorkState/sessionWorkStateRpc.d.ts +2 -0
  439. package/node_modules/@happier-dev/protocol/dist/sessionWorkState/sessionWorkStateRpc.d.ts.map +1 -1
  440. package/node_modules/@happier-dev/protocol/dist/socketRpc.d.ts +11 -0
  441. package/node_modules/@happier-dev/protocol/dist/socketRpc.d.ts.map +1 -1
  442. package/node_modules/@happier-dev/protocol/dist/socketRpc.js +9 -0
  443. package/node_modules/@happier-dev/protocol/dist/socketRpc.js.map +1 -1
  444. package/node_modules/@happier-dev/protocol/dist/spawnSession.d.ts +13 -0
  445. package/node_modules/@happier-dev/protocol/dist/spawnSession.d.ts.map +1 -1
  446. package/node_modules/@happier-dev/protocol/dist/spawnSession.js +5 -0
  447. package/node_modules/@happier-dev/protocol/dist/spawnSession.js.map +1 -1
  448. package/node_modules/@happier-dev/protocol/dist/structuredMessages/executionRunCompletionV1.d.ts.map +1 -1
  449. package/node_modules/@happier-dev/protocol/dist/structuredMessages/executionRunCompletionV1.js +12 -1
  450. package/node_modules/@happier-dev/protocol/dist/structuredMessages/executionRunCompletionV1.js.map +1 -1
  451. package/node_modules/@happier-dev/protocol/dist/systemTasks/acquisitionProgress.d.ts +36 -0
  452. package/node_modules/@happier-dev/protocol/dist/systemTasks/acquisitionProgress.d.ts.map +1 -0
  453. package/node_modules/@happier-dev/protocol/dist/systemTasks/acquisitionProgress.js +23 -0
  454. package/node_modules/@happier-dev/protocol/dist/systemTasks/acquisitionProgress.js.map +1 -0
  455. package/node_modules/@happier-dev/protocol/dist/systemTasks/index.d.ts +2 -0
  456. package/node_modules/@happier-dev/protocol/dist/systemTasks/index.d.ts.map +1 -1
  457. package/node_modules/@happier-dev/protocol/dist/systemTasks/index.js +2 -0
  458. package/node_modules/@happier-dev/protocol/dist/systemTasks/index.js.map +1 -1
  459. package/node_modules/@happier-dev/protocol/dist/systemTasks/setupThisComputerTaskContract.d.ts +180 -0
  460. package/node_modules/@happier-dev/protocol/dist/systemTasks/setupThisComputerTaskContract.d.ts.map +1 -0
  461. package/node_modules/@happier-dev/protocol/dist/systemTasks/setupThisComputerTaskContract.js +234 -0
  462. package/node_modules/@happier-dev/protocol/dist/systemTasks/setupThisComputerTaskContract.js.map +1 -0
  463. package/node_modules/@happier-dev/protocol/dist/updates.d.ts +12 -0
  464. package/node_modules/@happier-dev/protocol/dist/updates.d.ts.map +1 -1
  465. package/node_modules/@happier-dev/protocol/dist/updates.js +11 -2
  466. package/node_modules/@happier-dev/protocol/dist/updates.js.map +1 -1
  467. package/node_modules/@happier-dev/release-runtime/dist/archiveExtraction.d.ts.map +1 -1
  468. package/node_modules/@happier-dev/release-runtime/dist/archiveExtraction.js +11 -4
  469. package/node_modules/@happier-dev/release-runtime/dist/archiveExtraction.js.map +1 -1
  470. package/node_modules/@happier-dev/release-runtime/dist/github.d.ts +1 -0
  471. package/node_modules/@happier-dev/release-runtime/dist/github.d.ts.map +1 -1
  472. package/node_modules/@happier-dev/release-runtime/dist/github.js +7 -5
  473. package/node_modules/@happier-dev/release-runtime/dist/github.js.map +1 -1
  474. package/node_modules/@happier-dev/release-runtime/dist/http.d.ts +11 -12
  475. package/node_modules/@happier-dev/release-runtime/dist/http.d.ts.map +1 -1
  476. package/node_modules/@happier-dev/release-runtime/dist/http.js +32 -4
  477. package/node_modules/@happier-dev/release-runtime/dist/http.js.map +1 -1
  478. package/node_modules/@happier-dev/release-runtime/dist/index.d.ts +1 -0
  479. package/node_modules/@happier-dev/release-runtime/dist/index.d.ts.map +1 -1
  480. package/node_modules/@happier-dev/release-runtime/dist/index.js +1 -0
  481. package/node_modules/@happier-dev/release-runtime/dist/index.js.map +1 -1
  482. package/node_modules/@happier-dev/release-runtime/dist/verifiedDownload.d.ts +10 -0
  483. package/node_modules/@happier-dev/release-runtime/dist/verifiedDownload.d.ts.map +1 -1
  484. package/node_modules/@happier-dev/release-runtime/dist/verifiedDownload.js +21 -11
  485. package/node_modules/@happier-dev/release-runtime/dist/verifiedDownload.js.map +1 -1
  486. package/package.json +1 -1
  487. package/scripts/auth.mjs +1 -1
  488. package/scripts/auth_login_print_includes_configure_links.test.mjs +9 -0
  489. package/scripts/build.mjs +8 -1
  490. package/scripts/daemon.mjs +14 -1
  491. package/scripts/daemon_start_verification.integration.test.mjs +103 -26
  492. package/scripts/ghops.test.mjs +3 -9
  493. package/scripts/happier_main.mjs +11 -0
  494. package/scripts/provision/macos-lima-hstack-repeat-validation.test.mjs +10 -17
  495. package/scripts/self_host_launchd.real.integration.test.mjs +3 -5
  496. package/scripts/self_host_runtime.mjs +9 -10
  497. package/scripts/self_host_runtime.test.mjs +2 -2
  498. package/scripts/stack/stack_environment.sanitization.test.mjs +5 -0
  499. package/scripts/stack_happy_cmd.integration.test.mjs +74 -44
  500. package/scripts/testkit/core/lima_guest_harness.mjs +32 -0
  501. package/scripts/testkit/core/lima_guest_harness.test.mjs +61 -0
  502. package/scripts/testkit/core/stub_happier_cli_server_set.mjs +51 -0
  503. package/scripts/testkit/stack_happier_cli_command_testkit.mjs +20 -2
  504. package/scripts/utils/dev_targets/mutagen_project.mjs +6 -0
  505. package/scripts/utils/dev_targets/mutagen_project.test.mjs +4 -0
  506. package/scripts/utils/dev_targets/remote_commands.mjs +3 -1
  507. package/scripts/utils/dev_targets/supervisor.mjs +29 -7
  508. package/scripts/utils/dev_targets/supervisor.test.mjs +19 -1
  509. package/scripts/utils/env/scrub_env.mjs +1 -0
  510. package/scripts/utils/expo/command.mjs +28 -4
  511. package/scripts/utils/expo/expo.mjs +29 -1
  512. package/scripts/utils/expo/expo_shared_tmpdir.test.mjs +56 -1
  513. package/scripts/utils/server/apply_runtime_server_sqlite_env.test.mjs +2 -2
  514. package/scripts/utils/server/resolve_stack_server_port.test.mjs +6 -3
  515. package/scripts/utils/stack/server_profile_reconciliation.mjs +68 -16
  516. package/scripts/utils/stack/server_profile_reconciliation.test.mjs +41 -0
  517. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/releaseAssetBundle.d.ts +0 -17
  518. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/releaseAssetBundle.d.ts.map +0 -1
  519. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/releaseAssetBundle.js +0 -90
  520. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/releaseAssetBundle.js.map +0 -1
  521. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/rollbackVersionedPayload.d.ts +0 -13
  522. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/rollbackVersionedPayload.d.ts.map +0 -1
  523. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/rollbackVersionedPayload.js +0 -65
  524. package/node_modules/@happier-dev/cli-common/dist/firstPartyRuntime/rollbackVersionedPayload.js.map +0 -1
@@ -6,20 +6,18 @@ import { fileURLToPath } from 'node:url';
6
6
  import { runNodeCapture } from './testkit/stack_script_command_testkit.mjs';
7
7
  import { createStackHappierCliCommandFixture } from './testkit/stack_happier_cli_command_testkit.mjs';
8
8
  import { createRuntimeSnapshotFixture } from './testkit/runtime_snapshot_testkit.mjs';
9
+ import { buildStubHappierServerSetSource } from './testkit/core/stub_happier_cli_server_set.mjs';
9
10
  import { buildStackStableScopeId } from './utils/auth/stable_scope_id.mjs';
10
11
 
11
12
  const scriptsDir = dirname(fileURLToPath(import.meta.url));
12
13
  const rootDir = dirname(scriptsDir);
13
14
 
14
- function buildStubHappyCliScript({ message }) {
15
+ const SERVER_SET_CALL_LOG_FILE_NAME = '.hstack-test-server-set-calls.ndjson';
16
+
17
+ function buildStubHappyCliScript({ message, ignoreServerSet = false }) {
15
18
  return [
16
- `import { appendFileSync } from 'node:fs';`,
17
- `import { join } from 'node:path';`,
18
19
  `const args = process.argv.slice(2);`,
19
- `if (args[0] === 'server' && args[1] === 'set') {`,
20
- ` appendFileSync(join(process.env.HAPPIER_HOME_DIR, '.hstack-test-server-set-calls.ndjson'), JSON.stringify(args) + '\\n');`,
21
- ` process.exit(0);`,
22
- `}`,
20
+ buildStubHappierServerSetSource({ ignoreServerSet, callLogFileName: SERVER_SET_CALL_LOG_FILE_NAME }),
23
21
  `console.log(JSON.stringify({`,
24
22
  ` message: ${JSON.stringify(message)},`,
25
23
  ` args,`,
@@ -42,7 +40,7 @@ async function createHappyStackFixture(
42
40
  {
43
41
  prefix,
44
42
  stackName = 'exp-test',
45
- serverPort = 3999,
43
+ serverPort,
46
44
  stubType = 'success',
47
45
  message = 'hello',
48
46
  errorMessage = 'stub failure',
@@ -59,17 +57,23 @@ async function createHappyStackFixture(
59
57
  distIndexScript:
60
58
  stubType === 'failing'
61
59
  ? buildFailingStubHappyCliScript({ errorMessage })
62
- : buildStubHappyCliScript({ message }),
60
+ : buildStubHappyCliScript({
61
+ message,
62
+ ignoreServerSet: stubType === 'legacy-ignore-server-set',
63
+ }),
63
64
  });
64
65
  if (!includePinnedServerPortInEnvFile) {
65
66
  await fixture.writeStackEnv({ port: '' });
66
67
  }
67
68
 
68
- if (stackCliSettings) {
69
+ const resolvedStackCliSettings = typeof stackCliSettings === 'function'
70
+ ? stackCliSettings({ serverPort: fixture.serverPort })
71
+ : stackCliSettings;
72
+ if (resolvedStackCliSettings) {
69
73
  await mkdir(join(fixture.storageDir, stackName, 'cli'), { recursive: true });
70
74
  await writeFile(
71
75
  join(fixture.storageDir, stackName, 'cli', 'settings.json'),
72
- JSON.stringify(stackCliSettings, null, 2) + '\n',
76
+ JSON.stringify(resolvedStackCliSettings, null, 2) + '\n',
73
77
  'utf-8',
74
78
  );
75
79
  }
@@ -83,7 +87,7 @@ async function createHappyStackFixture(
83
87
  stackName,
84
88
  ephemeral: true,
85
89
  ownerPid: runtimeOwnerPid,
86
- ports: { server: serverPort },
90
+ ports: { server: fixture.serverPort },
87
91
  processes: { serverPid: runtimeServerPid },
88
92
  },
89
93
  null,
@@ -95,6 +99,7 @@ async function createHappyStackFixture(
95
99
 
96
100
  return {
97
101
  stackName: fixture.stackName,
102
+ serverPort: fixture.serverPort,
98
103
  storageDir: fixture.storageDir,
99
104
  baseEnv: fixture.baseEnv,
100
105
  };
@@ -104,7 +109,6 @@ test('hstack stack happier <name> runs CLI under that stack env', async (t) => {
104
109
  const fixture = await createHappyStackFixture(t, {
105
110
  prefix: 'happier-stack-stack-happy-',
106
111
  message: 'hello',
107
- serverPort: 3999,
108
112
  });
109
113
 
110
114
  const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), 'stack', 'happier', fixture.stackName], {
@@ -118,14 +122,13 @@ test('hstack stack happier <name> runs CLI under that stack env', async (t) => {
118
122
  assert.equal(out.stack, fixture.stackName);
119
123
  assert.ok(String(out.envFile).endsWith(`/${fixture.stackName}/env`), `expected envFile to end with /${fixture.stackName}/env, got: ${out.envFile}`);
120
124
  assert.equal(out.homeDir, join(fixture.storageDir, fixture.stackName, 'cli'));
121
- assert.equal(out.serverUrl, 'http://127.0.0.1:3999');
125
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
122
126
  });
123
127
 
124
128
  test('hstack stack happier <name> overrides pre-set HAPPIER_* env vars with stack-scoped values', async (t) => {
125
129
  const fixture = await createHappyStackFixture(t, {
126
130
  prefix: 'happier-stack-stack-happy-override-',
127
131
  message: 'override',
128
- serverPort: 4123,
129
132
  });
130
133
 
131
134
  const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), 'stack', 'happier', fixture.stackName], {
@@ -143,14 +146,13 @@ test('hstack stack happier <name> overrides pre-set HAPPIER_* env vars with stac
143
146
  assert.equal(out.message, 'override');
144
147
  assert.equal(out.stack, fixture.stackName);
145
148
  assert.equal(out.homeDir, join(fixture.storageDir, fixture.stackName, 'cli'));
146
- assert.equal(out.serverUrl, 'http://127.0.0.1:4123');
149
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
147
150
  });
148
151
 
149
152
  test('hstack stack happier <name> ignores stale cloud settings defaults and keeps stack-local server urls', async (t) => {
150
153
  const fixture = await createHappyStackFixture(t, {
151
154
  prefix: 'happier-stack-stack-happy-ignore-settings-',
152
155
  message: 'ignore-settings-defaults',
153
- serverPort: 44123,
154
156
  stackCliSettings: {
155
157
  schemaVersion: 6,
156
158
  onboardingCompleted: false,
@@ -179,15 +181,14 @@ test('hstack stack happier <name> ignores stale cloud settings defaults and keep
179
181
  assert.equal(out.message, 'ignore-settings-defaults');
180
182
  assert.equal(out.stack, fixture.stackName);
181
183
  assert.equal(out.homeDir, join(fixture.storageDir, fixture.stackName, 'cli'));
182
- assert.equal(out.serverUrl, 'http://127.0.0.1:44123');
183
- assert.equal(out.webappUrl, 'http://localhost:44123');
184
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
185
+ assert.equal(out.webappUrl, `http://localhost:${fixture.serverPort}`);
184
186
  });
185
187
 
186
188
  test('hstack stack happier <name> delegates stack profile reconciliation to the selected CLI runtime', async (t) => {
187
189
  const fixture = await createHappyStackFixture(t, {
188
190
  prefix: 'happier-stack-stack-happy-seed-settings-',
189
191
  message: 'seed-settings',
190
- serverPort: 45123,
191
192
  stackCliSettings: {
192
193
  schemaVersion: 6,
193
194
  onboardingCompleted: false,
@@ -207,7 +208,7 @@ test('hstack stack happier <name> delegates stack profile reconciliation to the
207
208
  });
208
209
 
209
210
  const settingsPath = join(fixture.storageDir, fixture.stackName, 'cli', 'settings.json');
210
- const serverSetCallsPath = join(fixture.storageDir, fixture.stackName, 'cli', '.hstack-test-server-set-calls.ndjson');
211
+ const serverSetCallsPath = join(fixture.storageDir, fixture.stackName, 'cli', SERVER_SET_CALL_LOG_FILE_NAME);
211
212
 
212
213
  const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), 'stack', 'happier', fixture.stackName], {
213
214
  cwd: rootDir,
@@ -226,24 +227,60 @@ test('hstack stack happier <name> delegates stack profile reconciliation to the
226
227
  '--server-id',
227
228
  out.activeServerId,
228
229
  '--server-url',
229
- 'http://127.0.0.1:45123',
230
+ `http://127.0.0.1:${fixture.serverPort}`,
230
231
  '--local-server-url',
231
- 'http://127.0.0.1:45123',
232
+ `http://127.0.0.1:${fixture.serverPort}`,
232
233
  '--webapp-url',
233
- 'http://localhost:45123',
234
+ `http://localhost:${fixture.serverPort}`,
234
235
  '--migrate-matching-profile-state',
235
236
  '--json',
236
237
  ]]);
237
238
 
238
239
  const settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
239
- assert.equal(settings.activeServerId, 'cloud', 'the wrapper must not mutate settings behind the CLI owner');
240
+ assert.equal(settings.activeServerId, out.activeServerId, 'the selected CLI must own the reconciled active profile');
241
+ assert.equal(settings.servers[out.activeServerId].serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
242
+ // The CLI collapses a local URL equal to the relay URL; only the relay URL is persisted.
243
+ assert.equal(settings.servers[out.activeServerId].localServerUrl, undefined);
244
+ assert.equal(settings.servers[out.activeServerId].webappUrl, `http://localhost:${fixture.serverPort}`);
245
+ });
246
+
247
+ test('hstack stack happier <name> rejects a CLI that exits successfully without reconciling the stack profile', async (t) => {
248
+ const fixture = await createHappyStackFixture(t, {
249
+ prefix: 'happier-stack-stack-happy-legacy-server-set-',
250
+ message: 'must-not-run',
251
+ stubType: 'legacy-ignore-server-set',
252
+ stackCliSettings: {
253
+ schemaVersion: 6,
254
+ onboardingCompleted: false,
255
+ activeServerId: 'cloud',
256
+ servers: {
257
+ cloud: {
258
+ id: 'cloud',
259
+ name: 'Happier Cloud',
260
+ serverUrl: 'https://api.happier.dev',
261
+ webappUrl: 'https://app.happier.dev',
262
+ createdAt: 0,
263
+ updatedAt: 0,
264
+ lastUsedAt: 0,
265
+ },
266
+ },
267
+ },
268
+ });
269
+
270
+ const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), 'stack', 'happier', fixture.stackName], {
271
+ cwd: rootDir,
272
+ env: fixture.baseEnv,
273
+ });
274
+
275
+ assert.notEqual(res.code, 0, `expected reconciliation verification to fail\nstdout:\n${res.stdout}\nstderr:\n${res.stderr}`);
276
+ assert.match(res.stderr, /did not apply the requested stack relay profile/i);
277
+ assert.doesNotMatch(res.stdout, /must-not-run/);
240
278
  });
241
279
 
242
280
  test('hstack stack happier <name> uses stack.runtime.json ports when env file does not pin HAPPIER_STACK_SERVER_PORT', async (t) => {
243
281
  const fixture = await createHappyStackFixture(t, {
244
282
  prefix: 'happier-stack-stack-happy-runtime-ports-',
245
283
  message: 'runtime-ports',
246
- serverPort: 4777,
247
284
  includePinnedServerPortInEnvFile: false,
248
285
  // Simulate a stale owner pid but a still-running server process.
249
286
  runtimeOwnerPid: 999999,
@@ -259,7 +296,7 @@ test('hstack stack happier <name> uses stack.runtime.json ports when env file do
259
296
  const out = JSON.parse(res.stdout.trim());
260
297
  assert.equal(out.message, 'runtime-ports');
261
298
  assert.equal(out.stack, fixture.stackName);
262
- assert.equal(out.serverUrl, 'http://127.0.0.1:4777');
299
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
263
300
  });
264
301
 
265
302
  test('hstack stack happier <name> forwards wrapper runtime flags to happier.mjs', async (t) => {
@@ -290,7 +327,6 @@ test('hstack happier (HAPPIER_STACK_STACK set) uses stack.runtime.json ports whe
290
327
  const fixture = await createHappyStackFixture(t, {
291
328
  prefix: 'happier-stack-happy-runtime-ports-',
292
329
  message: 'runtime-ports-env',
293
- serverPort: 4888,
294
330
  includePinnedServerPortInEnvFile: false,
295
331
  // Simulate a stale owner pid but a still-running server process.
296
332
  runtimeOwnerPid: 999999,
@@ -315,16 +351,15 @@ test('hstack happier (HAPPIER_STACK_STACK set) uses stack.runtime.json ports whe
315
351
  const out = JSON.parse(res.stdout.trim());
316
352
  assert.equal(out.message, 'runtime-ports-env');
317
353
  assert.equal(out.stack, fixture.stackName);
318
- assert.equal(out.serverUrl, 'http://127.0.0.1:4888');
319
- assert.equal(out.webappUrl, 'http://localhost:4888');
354
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
355
+ assert.equal(out.webappUrl, `http://localhost:${fixture.serverPort}`);
320
356
  });
321
357
 
322
358
  test('hstack happier keeps the stable scope when another settings profile matches the stack URL', async (t) => {
323
359
  const fixture = await createHappyStackFixture(t, {
324
360
  prefix: 'happier-stack-explicit-stack-scope-',
325
361
  message: 'explicit-stack-scope',
326
- serverPort: 5123,
327
- stackCliSettings: {
362
+ stackCliSettings: ({ serverPort }) => ({
328
363
  schemaVersion: 6,
329
364
  onboardingCompleted: true,
330
365
  activeServerId: 'stack-local',
@@ -332,14 +367,14 @@ test('hstack happier keeps the stable scope when another settings profile matche
332
367
  'stack-local': {
333
368
  id: 'stack-local',
334
369
  name: 'Stack Local',
335
- serverUrl: 'http://127.0.0.1:5123',
336
- webappUrl: 'http://localhost:5123',
370
+ serverUrl: `http://127.0.0.1:${serverPort}`,
371
+ webappUrl: `http://localhost:${serverPort}`,
337
372
  createdAt: 0,
338
373
  updatedAt: 0,
339
374
  lastUsedAt: 0,
340
375
  },
341
376
  },
342
- },
377
+ }),
343
378
  });
344
379
 
345
380
  const env = {
@@ -360,8 +395,8 @@ test('hstack happier keeps the stable scope when another settings profile matche
360
395
  assert.equal(out.stack, fixture.stackName);
361
396
  assert.ok(String(out.envFile).endsWith(`/${fixture.stackName}/env`), `expected envFile to end with /${fixture.stackName}/env, got: ${out.envFile}`);
362
397
  assert.equal(out.homeDir, join(fixture.storageDir, fixture.stackName, 'cli'));
363
- assert.equal(out.serverUrl, 'http://127.0.0.1:5123');
364
- assert.equal(out.webappUrl, 'http://localhost:5123');
398
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
399
+ assert.equal(out.webappUrl, `http://localhost:${fixture.serverPort}`);
365
400
  assert.equal(
366
401
  out.activeServerId,
367
402
  buildStackStableScopeId({ stackName: fixture.stackName, cliIdentity: 'default' }),
@@ -372,7 +407,6 @@ test('hstack stack happier <name> --identity=<name> uses identity-scoped HAPPIER
372
407
  const fixture = await createHappyStackFixture(t, {
373
408
  prefix: 'happier-stack-stack-happy-identity-',
374
409
  message: 'identity',
375
- serverPort: 3999,
376
410
  });
377
411
  const identity = 'account-a';
378
412
 
@@ -386,14 +420,13 @@ test('hstack stack happier <name> --identity=<name> uses identity-scoped HAPPIER
386
420
  assert.equal(out.message, 'identity');
387
421
  assert.equal(out.stack, fixture.stackName);
388
422
  assert.equal(out.homeDir, join(fixture.storageDir, fixture.stackName, 'cli-identities', identity));
389
- assert.equal(out.serverUrl, 'http://127.0.0.1:3999');
423
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
390
424
  });
391
425
 
392
426
  test('hstack <stack> happier ... shorthand runs CLI under that stack env', async (t) => {
393
427
  const fixture = await createHappyStackFixture(t, {
394
428
  prefix: 'happy-stacks-stack-happy-',
395
429
  message: 'shorthand',
396
- serverPort: 4101,
397
430
  });
398
431
 
399
432
  const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), fixture.stackName, 'happier'], { cwd: rootDir, env: fixture.baseEnv });
@@ -402,7 +435,7 @@ test('hstack <stack> happier ... shorthand runs CLI under that stack env', async
402
435
  const out = JSON.parse(res.stdout.trim());
403
436
  assert.equal(out.message, 'shorthand');
404
437
  assert.equal(out.stack, fixture.stackName);
405
- assert.equal(out.serverUrl, 'http://127.0.0.1:4101');
438
+ assert.equal(out.serverUrl, `http://127.0.0.1:${fixture.serverPort}`);
406
439
  });
407
440
 
408
441
  test('hstack stack happier <name> does not print wrapper stack traces on CLI failure', async (t) => {
@@ -410,7 +443,6 @@ test('hstack stack happier <name> does not print wrapper stack traces on CLI fai
410
443
  prefix: 'happy-stacks-stack-happy-fail-',
411
444
  stubType: 'failing',
412
445
  errorMessage: 'stub failure',
413
- serverPort: 3999,
414
446
  });
415
447
 
416
448
  const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), 'stack', 'happier', fixture.stackName, 'attach', 'abc'], {
@@ -428,7 +460,6 @@ test('hstack stack <name> happier ... stack-name-first shorthand works', async (
428
460
  const fixture = await createHappyStackFixture(t, {
429
461
  prefix: 'happier-stack-stack-happy-name-first-',
430
462
  message: 'name-first',
431
- serverPort: 3999,
432
463
  });
433
464
 
434
465
  const res = await runNodeCapture([join(rootDir, 'bin', 'hstack.mjs'), 'stack', fixture.stackName, 'happier'], {
@@ -446,7 +477,6 @@ test('hstack stack bug-report <name> forwards bug-report command under stack env
446
477
  const fixture = await createHappyStackFixture(t, {
447
478
  prefix: 'happier-stack-stack-bug-report-',
448
479
  message: 'bug-report-alias',
449
- serverPort: 4099,
450
480
  });
451
481
 
452
482
  const res = await runNodeCapture(
@@ -0,0 +1,32 @@
1
+ import { filterEnvForSpawn } from './env_scope.mjs';
2
+
3
+ export function createLimaTestEnv(parentEnv = process.env) {
4
+ // These shell fixtures run on the host, not in a VM. Inheriting stack or
5
+ // provider settings can give a fixture access to the developer's live daemon.
6
+ return {
7
+ ...filterEnvForSpawn(parentEnv, { keepKeys: ['TMPDIR', 'TMP', 'TEMP', 'LANG', 'LC_ALL'] }),
8
+ PATH: '/usr/bin:/bin:/usr/sbin:/sbin',
9
+ };
10
+ }
11
+
12
+ // A real Lima guest has its own login files and PATH. Our process-boundary fake
13
+ // must not source the host's /etc/profile, which can restore the real Happier CLI
14
+ // ahead of fixture executables (including when the caller prefixes bash with env).
15
+ export const limaGuestExec = `
16
+ if [[ "\${1:-}" == "env" ]]; then
17
+ shift
18
+ while [[ "\${1:-}" == *=* ]]; do export "$1"; shift; done
19
+ fi
20
+ unset BASH_ENV ENV
21
+ if [[ "\${1:-}" != "bash" || ( "\${2:-}" != "-lc" && "\${2:-}" != "-c" && "\${2:-}" != "-s" ) ]]; then
22
+ echo "unsupported fake Lima guest command: $*" >&2
23
+ exit 2
24
+ fi
25
+ shift
26
+ if [[ "$1" == "-lc" ]]; then shift; set -- -c "$@"; fi
27
+ # Guest daemon process matching belongs to the VM's process namespace. These
28
+ # fixtures have no real guest processes and must never match host daemons.
29
+ pkill() { return 0; }
30
+ export -f pkill
31
+ exec /bin/bash --noprofile --norc "$@"
32
+ `;
@@ -0,0 +1,61 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { mkdtemp, writeFile, access } from 'node:fs/promises';
5
+ import { tmpdir } from 'node:os';
6
+ import { join } from 'node:path';
7
+
8
+ import { createLimaTestEnv, limaGuestExec } from './lima_guest_harness.mjs';
9
+
10
+ test('Lima fixtures exclude ambient stack, provider, shell, and executable selection', () => {
11
+ const env = createLimaTestEnv({
12
+ PATH: '/real/user/bin',
13
+ HOME: '/real/user',
14
+ HAPPIER_HOME_DIR: '/real/stack/cli',
15
+ HAPPIER_ACTIVE_SERVER_ID: 'live-server',
16
+ HAPPIER_QA_STACK_NAME: 'live-stack',
17
+ WSREPL_QA_VM_HAPPIER_MODE: 'autoupdate',
18
+ CLAUDE_CONFIG_DIR: '/real/claude',
19
+ CODEX_HOME: '/real/codex',
20
+ BASH_ENV: '/real/shell-startup',
21
+ NODE_OPTIONS: '--import=/real/preload.mjs',
22
+ TMPDIR: '/tmp/fixture-parent',
23
+ LANG: 'en_US.UTF-8',
24
+ });
25
+ assert.equal(env.HAPPIER_HOME_DIR, undefined);
26
+ assert.equal(env.HAPPIER_ACTIVE_SERVER_ID, undefined);
27
+ assert.equal(env.HAPPIER_QA_STACK_NAME, undefined);
28
+ assert.equal(env.HOME, undefined);
29
+ assert.equal(env.CLAUDE_CONFIG_DIR, undefined);
30
+ assert.equal(env.CODEX_HOME, undefined);
31
+ assert.equal(env.BASH_ENV, undefined);
32
+ assert.equal(env.NODE_OPTIONS, undefined);
33
+ assert.equal(env.WSREPL_QA_VM_HAPPIER_MODE, undefined);
34
+ assert.ok(!env.PATH.includes('/real/user/bin'));
35
+ assert.equal(env.TMPDIR, '/tmp/fixture-parent');
36
+ assert.equal(env.LANG, 'en_US.UTF-8');
37
+ });
38
+
39
+ test('fake Lima executes guest scripts without a host login shell, preserving explicit guest environment and argv', () => {
40
+ for (const prefix of [[], ['env', 'LIMA_INSTANCE=fixture-vm']]) {
41
+ const result = spawnSync('/bin/bash', ['--noprofile', '--norc', '-c', limaGuestExec, 'fake-lima',
42
+ ...prefix, 'bash', '-lc',
43
+ 'if shopt -q login_shell; then exit 42; fi; printf "%s\\n" "${LIMA_INSTANCE:-}" "$1"',
44
+ 'guest', 'argument with spaces',
45
+ ], { env: { PATH: '/usr/bin:/bin', HOME: '/tmp' }, encoding: 'utf8' });
46
+ assert.equal(result.status, 0, result.stderr);
47
+ assert.equal(result.stdout, `${prefix.length ? 'fixture-vm' : ''}\nargument with spaces\n`);
48
+ }
49
+ });
50
+
51
+ test('fake guest daemon cleanup cannot invoke host process matching', async () => {
52
+ const root = await mkdtemp(join(tmpdir(), 'lima-guest-process-boundary-'));
53
+ const marker = join(root, 'host-pkill-invoked');
54
+ await writeFile(join(root, 'pkill'), '#!/bin/bash\nprintf called > "$HOST_KILL_MARKER"\n', { mode: 0o755 });
55
+ const result = spawnSync('/bin/bash', ['-c', limaGuestExec, 'fake-lima', 'bash', '-lc',
56
+ 'pkill -f "package-dist/index.mjs daemon start-sync"; printf done',
57
+ ], { env: { PATH: `${root}:/usr/bin:/bin`, HOME: root, HOST_KILL_MARKER: marker }, encoding: 'utf8' });
58
+ assert.equal(result.status, 0, result.stderr);
59
+ assert.equal(result.stdout, 'done');
60
+ await assert.rejects(access(marker), { code: 'ENOENT' });
61
+ });
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Source fragment that gives a stub Happier CLI script a `server set` implementation.
3
+ *
4
+ * The fragment expects `args` (the CLI argv slice) to be in scope and runs inside an ESM script,
5
+ * so it may use top-level `await`. It persists the profile the way the real CLI profile writer does
6
+ * (`apps/cli/src/server/serverProfiles.ts`): the active profile switches to the requested id,
7
+ * unrelated profile fields survive, the settings schema is stamped to the supported version, and a
8
+ * `localServerUrl` equal to `serverUrl` is not written because the CLI collapses that split.
9
+ * Keep it aligned with that writer; stack reconciliation checks read the persisted shape.
10
+ *
11
+ * - `ignoreServerSet`: exit successfully without touching settings, like a legacy CLI that does not
12
+ * understand the stack profile flags.
13
+ * - `callLogFileName`: when set, append each `server set` argv as one JSON line to this file inside
14
+ * the CLI home before handling the command.
15
+ */
16
+ export function buildStubHappierServerSetSource({ ignoreServerSet = false, callLogFileName = null } = {}) {
17
+ return `
18
+ if (args[0] === 'server' && args[1] === 'set') {
19
+ const { appendFileSync, readFileSync, writeFileSync } = await import('node:fs');
20
+ const { join } = await import('node:path');
21
+ const home = process.env.HAPPIER_HOME_DIR || process.env.HAPPIER_STACK_CLI_HOME_DIR;
22
+ if (!home) process.exit(2);
23
+ ${callLogFileName ? `appendFileSync(join(home, ${JSON.stringify(callLogFileName)}), JSON.stringify(args) + '\\n');` : ''}
24
+ ${ignoreServerSet ? 'process.exit(0);' : ''}
25
+ const value = (name) => {
26
+ const index = args.indexOf(name);
27
+ return index >= 0 ? String(args[index + 1] || '') : '';
28
+ };
29
+ const serverId = value('--server-id');
30
+ const serverUrl = value('--server-url');
31
+ const localServerUrl = value('--local-server-url');
32
+ const settingsPath = join(home, 'settings.json');
33
+ const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
34
+ const { localServerUrl: previousLocalServerUrl, ...current } = settings.servers?.[serverId] ?? {};
35
+ settings.schemaVersion = Math.max(Number(settings.schemaVersion || 0), 6);
36
+ settings.activeServerId = serverId;
37
+ settings.servers = {
38
+ ...(settings.servers ?? {}),
39
+ [serverId]: {
40
+ ...current,
41
+ id: serverId,
42
+ serverUrl,
43
+ ...(localServerUrl && localServerUrl !== serverUrl ? { localServerUrl } : {}),
44
+ webappUrl: value('--webapp-url'),
45
+ },
46
+ };
47
+ writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\\n', 'utf-8');
48
+ process.exit(0);
49
+ }
50
+ `;
51
+ }
@@ -1,20 +1,37 @@
1
1
  import { mkdir, writeFile } from 'node:fs/promises';
2
+ import { createServer } from 'node:net';
2
3
  import { join } from 'node:path';
3
4
 
4
5
  import { ensureMinimalMonorepoLayout } from './core/minimal_monorepo_layout.mjs';
5
6
  import { writeStubHappierCliFiles } from './core/stub_happier_cli_files.mjs';
6
7
  import { createTempFixture } from './core/temp_fixture.mjs';
7
8
 
9
+ async function allocateAvailableLocalhostPort() {
10
+ const server = createServer();
11
+ await new Promise((resolve, reject) => {
12
+ server.once('error', reject);
13
+ server.listen(0, '127.0.0.1', resolve);
14
+ });
15
+ const address = server.address();
16
+ if (!address || typeof address === 'string') {
17
+ await new Promise((resolve) => server.close(resolve));
18
+ throw new Error('expected an allocated localhost TCP port');
19
+ }
20
+ await new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
21
+ return address.port;
22
+ }
23
+
8
24
  export async function createStackHappierCliCommandFixture(
9
25
  t,
10
26
  {
11
27
  prefix,
12
28
  stackName = 'exp-test',
13
- serverPort = 4101,
29
+ serverPort,
14
30
  distIndexScript,
15
31
  binHappierScript = "import '../dist/index.mjs';\n",
16
32
  } = {},
17
33
  ) {
34
+ const resolvedServerPort = serverPort ?? await allocateAvailableLocalhostPort();
18
35
  const fixture = await createTempFixture(t, { prefix });
19
36
  const tmp = fixture.root;
20
37
  const storageDir = join(tmp, 'storage');
@@ -36,7 +53,7 @@ export async function createStackHappierCliCommandFixture(
36
53
  async function writeStackEnv({
37
54
  name = stackName,
38
55
  cliHomeDir = stackCliHome,
39
- port = serverPort,
56
+ port = resolvedServerPort,
40
57
  repoDir = monoRoot,
41
58
  } = {}) {
42
59
  const envPath = join(storageDir, name, 'env');
@@ -64,6 +81,7 @@ export async function createStackHappierCliCommandFixture(
64
81
  workspaceDir,
65
82
  monoRoot,
66
83
  stackName,
84
+ serverPort: resolvedServerPort,
67
85
  stackCliHome,
68
86
  envPath,
69
87
  writeStackEnv,
@@ -40,6 +40,12 @@ const DEFAULT_IGNORES = [
40
40
  // Expo prebuild generates this entire Git-ignored tree for the target's
41
41
  // native identity and toolchain. Replication would undo its Info.plist.
42
42
  'apps/ui/ios',
43
+ // Desktop preparation owns these generated sidecars and their JS runtime companions.
44
+ // Replicating a local build would replace the target-native executable after Cargo builds it.
45
+ 'apps/ui/src-tauri/binaries',
46
+ 'apps/ui/src-tauri/systemTasks',
47
+ 'apps/ui/src-tauri/ssh',
48
+ 'apps/ui/src-tauri/integrations',
43
49
  'apps/ui/android/app/build',
44
50
  'apps/ui/android/build',
45
51
  'apps/ui/android/.gradle',
@@ -77,6 +77,10 @@ test('renderMutagenProject creates one-way source replicas while retaining targe
77
77
  '.dist.hstack-*',
78
78
  '.cxx',
79
79
  'apps/ui/ios',
80
+ 'apps/ui/src-tauri/binaries',
81
+ 'apps/ui/src-tauri/systemTasks',
82
+ 'apps/ui/src-tauri/ssh',
83
+ 'apps/ui/src-tauri/integrations',
80
84
  'apps/ui/android/app/build',
81
85
  'apps/ui/android/build',
82
86
  'apps/ui/android/.gradle',
@@ -1,5 +1,7 @@
1
1
  import { resolveEffectiveDbProvider } from '../server/effective_db_provider.mjs';
2
2
 
3
+ export const DEFAULT_REMOTE_STACK_STARTUP_TIMEOUT_MS = 30 * 60_000;
4
+
3
5
  function posixQuote(value) {
4
6
  return `'${String(value).replace(/'/g, `'\"'\"'`)}'`;
5
7
  }
@@ -299,7 +301,7 @@ function resolveRemoteStackInvocation(target, {
299
301
  ]),
300
302
  ...(stablePublicExpoPort == null ? [] : [`HAPPIER_STACK_EXPO_PUBLIC_PORT=${stablePublicExpoPort}`]),
301
303
  ...(expoPublicUrl && !resolveExpoPublicUrlOnTarget ? [`EXPO_PACKAGER_PROXY_URL=${expoPublicUrl}`] : []),
302
- 'HAPPIER_CLI_PKGROLL_TIMEOUT_MS=1800000',
304
+ `HAPPIER_CLI_PKGROLL_TIMEOUT_MS=${DEFAULT_REMOTE_STACK_STARTUP_TIMEOUT_MS}`,
303
305
  ...(normalizedServices.daemon && deferDaemonStartUntilCredentials
304
306
  ? ['HAPPIER_STACK_DAEMON_WAIT_FOR_AUTH=1']
305
307
  : []),
@@ -12,6 +12,7 @@ import {
12
12
  resolveMutagenSessionName,
13
13
  } from './mutagen_project.mjs';
14
14
  import {
15
+ DEFAULT_REMOTE_STACK_STARTUP_TIMEOUT_MS,
15
16
  buildRemoteBootstrapCommand,
16
17
  buildRemoteStackCommand,
17
18
  buildRemoteStackStopCommand,
@@ -22,6 +23,13 @@ import {
22
23
  buildSshWorkerArgs,
23
24
  } from './remote_commands.mjs';
24
25
 
26
+ export function resolveRemoteServerReadyTimeoutMs(env = process.env) {
27
+ const configured = Number.parseInt(String(env.HAPPIER_STACK_SERVER_READY_TIMEOUT_MS ?? ''), 10);
28
+ return Number.isFinite(configured) && configured >= 1_000
29
+ ? configured
30
+ : DEFAULT_REMOTE_STACK_STARTUP_TIMEOUT_MS;
31
+ }
32
+
25
33
  export function resolveDefaultRemoteServerPort({
26
34
  localServerPort,
27
35
  targetIndex,
@@ -65,8 +73,7 @@ async function defaultWaitForProcess(child) {
65
73
  }
66
74
 
67
75
  async function defaultWaitForServerReady({ url, env = process.env, signal } = {}) {
68
- const configured = Number.parseInt(String(env.HAPPIER_STACK_SERVER_READY_TIMEOUT_MS ?? ''), 10);
69
- const timeoutMs = Number.isFinite(configured) && configured >= 1_000 ? configured : 120_000;
76
+ const timeoutMs = resolveRemoteServerReadyTimeoutMs(env);
70
77
  const deadline = Date.now() + timeoutMs;
71
78
  while (!signal?.aborted && Date.now() < deadline) {
72
79
  if ((await fetchHappierHealth(url)).ok) return;
@@ -137,12 +144,12 @@ async function prepareOpenSsh({ targets, mutagenDir, env }) {
137
144
  for (const executable of ['ssh', 'scp']) {
138
145
  await writeFile(
139
146
  join(opensshDir, executable),
140
- `#!/bin/sh\nexec /usr/bin/${executable} -F ${shellQuote(configPath)} -o ControlMaster=no "$@"\n`,
147
+ `#!/bin/sh\nexec /usr/bin/${executable} -F ${shellQuote(configPath)} -o ControlMaster=no -o ControlPath=none "$@"\n`,
141
148
  { mode: 0o700 },
142
149
  );
143
150
  }
144
151
  return {
145
- sshArgs: ['-F', configPath, '-o', 'ControlMaster=no'],
152
+ sshArgs: ['-F', configPath, '-o', 'ControlMaster=no', '-o', 'ControlPath=none'],
146
153
  mutagenEnv: { ...env, MUTAGEN_SSH_PATH: opensshDir },
147
154
  };
148
155
  }
@@ -542,8 +549,11 @@ export async function startStackDevTargets(
542
549
  tunnelsByTarget.set(target.name, tunnel);
543
550
  }
544
551
  if (!services.server) {
545
- requireSuccessful(
546
- await runProcess({
552
+ const readinessDeadline = Date.now() + resolveRemoteServerReadyTimeoutMs(env);
553
+ let readinessAttempt = 0;
554
+ let readinessResult;
555
+ do {
556
+ readinessResult = await runProcess({
547
557
  label: `remote:${target.name}`,
548
558
  command: 'ssh',
549
559
  args: [
@@ -554,7 +564,19 @@ export async function startStackDevTargets(
554
564
  buildRemoteForwardProbeCommand(target, { remoteServerPort }),
555
565
  ],
556
566
  env: infraEnv,
557
- }),
567
+ });
568
+ if (readinessResult?.code === 0 || tunnel.exitCode != null || Date.now() >= readinessDeadline) {
569
+ break;
570
+ }
571
+ readinessAttempt += 1;
572
+ const retryOutcome = await Promise.race([
573
+ waitForRetry({ attempt: readinessAttempt, delayMs: 5_000, target }).then(() => 'retry'),
574
+ closeRequested.then(() => 'close'),
575
+ ]);
576
+ if (retryOutcome === 'close' || closed) return null;
577
+ } while (!closed);
578
+ requireSuccessful(
579
+ readinessResult,
558
580
  `${target.name} reverse tunnel readiness`,
559
581
  );
560
582
  }