happy2 0.0.9 → 0.0.12

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 (286) hide show
  1. package/README.md +29 -0
  2. package/package.json +7 -3
  3. package/packages/happy2-server/PLUGINS.md +402 -0
  4. package/packages/happy2-server/README.md +39 -0
  5. package/packages/happy2-server/dist/daemon.d.ts +39 -0
  6. package/packages/happy2-server/dist/daemon.d.ts.map +1 -0
  7. package/packages/happy2-server/dist/daemon.js +302 -0
  8. package/packages/happy2-server/dist/daemon.js.map +1 -0
  9. package/packages/happy2-server/dist/daemon.test.d.ts +2 -0
  10. package/packages/happy2-server/dist/daemon.test.d.ts.map +1 -0
  11. package/packages/happy2-server/dist/daemon.test.js +245 -0
  12. package/packages/happy2-server/dist/daemon.test.js.map +1 -0
  13. package/packages/happy2-server/dist/index.d.ts +7 -1
  14. package/packages/happy2-server/dist/index.d.ts.map +1 -1
  15. package/packages/happy2-server/dist/index.js +5 -1
  16. package/packages/happy2-server/dist/index.js.map +1 -1
  17. package/packages/happy2-server/dist/modules/agents/daemon.d.ts +10 -13
  18. package/packages/happy2-server/dist/modules/agents/daemon.d.ts.map +1 -1
  19. package/packages/happy2-server/dist/modules/agents/daemon.js +19 -5
  20. package/packages/happy2-server/dist/modules/agents/daemon.js.map +1 -1
  21. package/packages/happy2-server/dist/modules/agents/service.d.ts +9 -1
  22. package/packages/happy2-server/dist/modules/agents/service.d.ts.map +1 -1
  23. package/packages/happy2-server/dist/modules/agents/service.js +59 -2
  24. package/packages/happy2-server/dist/modules/agents/service.js.map +1 -1
  25. package/packages/happy2-server/dist/modules/auth/tokens.d.ts +7 -0
  26. package/packages/happy2-server/dist/modules/auth/tokens.d.ts.map +1 -1
  27. package/packages/happy2-server/dist/modules/auth/tokens.js +33 -0
  28. package/packages/happy2-server/dist/modules/auth/tokens.js.map +1 -1
  29. package/packages/happy2-server/dist/modules/auth/tokens.test.d.ts +2 -0
  30. package/packages/happy2-server/dist/modules/auth/tokens.test.d.ts.map +1 -0
  31. package/packages/happy2-server/dist/modules/auth/tokens.test.js +28 -0
  32. package/packages/happy2-server/dist/modules/auth/tokens.test.js.map +1 -0
  33. package/packages/happy2-server/dist/modules/chat/types.d.ts +1 -1
  34. package/packages/happy2-server/dist/modules/chat/types.d.ts.map +1 -1
  35. package/packages/happy2-server/dist/modules/config/defaults.d.ts.map +1 -1
  36. package/packages/happy2-server/dist/modules/config/defaults.js +5 -0
  37. package/packages/happy2-server/dist/modules/config/defaults.js.map +1 -1
  38. package/packages/happy2-server/dist/modules/config/loader.d.ts.map +1 -1
  39. package/packages/happy2-server/dist/modules/config/loader.js +9 -0
  40. package/packages/happy2-server/dist/modules/config/loader.js.map +1 -1
  41. package/packages/happy2-server/dist/modules/config/loader.test.js +15 -0
  42. package/packages/happy2-server/dist/modules/config/loader.test.js.map +1 -1
  43. package/packages/happy2-server/dist/modules/config/paths.d.ts +1 -0
  44. package/packages/happy2-server/dist/modules/config/paths.d.ts.map +1 -1
  45. package/packages/happy2-server/dist/modules/config/paths.js +1 -0
  46. package/packages/happy2-server/dist/modules/config/paths.js.map +1 -1
  47. package/packages/happy2-server/dist/modules/config/paths.test.js +1 -0
  48. package/packages/happy2-server/dist/modules/config/paths.test.js.map +1 -1
  49. package/packages/happy2-server/dist/modules/config/type.d.ts +5 -0
  50. package/packages/happy2-server/dist/modules/config/type.d.ts.map +1 -1
  51. package/packages/happy2-server/dist/modules/integrations/transport.d.ts.map +1 -1
  52. package/packages/happy2-server/dist/modules/integrations/transport.js +8 -1
  53. package/packages/happy2-server/dist/modules/integrations/transport.js.map +1 -1
  54. package/packages/happy2-server/dist/modules/integrations/types.d.ts +2 -0
  55. package/packages/happy2-server/dist/modules/integrations/types.d.ts.map +1 -1
  56. package/packages/happy2-server/dist/modules/integrations/types.js.map +1 -1
  57. package/packages/happy2-server/dist/modules/plugin/catalog.d.ts +13 -0
  58. package/packages/happy2-server/dist/modules/plugin/catalog.d.ts.map +1 -0
  59. package/packages/happy2-server/dist/modules/plugin/catalog.js +400 -0
  60. package/packages/happy2-server/dist/modules/plugin/catalog.js.map +1 -0
  61. package/packages/happy2-server/dist/modules/plugin/catalog.test.d.ts +2 -0
  62. package/packages/happy2-server/dist/modules/plugin/catalog.test.d.ts.map +1 -0
  63. package/packages/happy2-server/dist/modules/plugin/catalog.test.js +172 -0
  64. package/packages/happy2-server/dist/modules/plugin/catalog.test.js.map +1 -0
  65. package/packages/happy2-server/dist/modules/plugin/functions.test.d.ts +2 -0
  66. package/packages/happy2-server/dist/modules/plugin/functions.test.d.ts.map +1 -0
  67. package/packages/happy2-server/dist/modules/plugin/functions.test.js +123 -0
  68. package/packages/happy2-server/dist/modules/plugin/functions.test.js.map +1 -0
  69. package/packages/happy2-server/dist/modules/plugin/httpBridge.d.ts +19 -0
  70. package/packages/happy2-server/dist/modules/plugin/httpBridge.d.ts.map +1 -0
  71. package/packages/happy2-server/dist/modules/plugin/httpBridge.js +206 -0
  72. package/packages/happy2-server/dist/modules/plugin/httpBridge.js.map +1 -0
  73. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.d.ts +3 -0
  74. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.d.ts.map +1 -0
  75. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.js +47 -0
  76. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.js.map +1 -0
  77. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.d.ts +3 -0
  78. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.d.ts.map +1 -0
  79. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js +82 -0
  80. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js.map +1 -0
  81. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.d.ts +3 -0
  82. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.d.ts.map +1 -0
  83. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.js +12 -0
  84. package/packages/happy2-server/dist/modules/plugin/impl/effectiveContainer.js.map +1 -0
  85. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.d.ts +288 -0
  86. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.d.ts.map +1 -0
  87. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.js +19 -0
  88. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.js.map +1 -0
  89. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.d.ts +3 -0
  90. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.d.ts.map +1 -0
  91. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js +63 -0
  92. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js.map +1 -0
  93. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.d.ts +2 -0
  94. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.d.ts.map +1 -0
  95. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.js +17 -0
  96. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.js.map +1 -0
  97. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.d.ts +3 -0
  98. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.d.ts.map +1 -0
  99. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.js +16 -0
  100. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.js.map +1 -0
  101. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.d.ts +339 -0
  102. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.d.ts.map +1 -0
  103. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.js +22 -0
  104. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.js.map +1 -0
  105. package/packages/happy2-server/dist/modules/plugin/index.d.ts +3 -0
  106. package/packages/happy2-server/dist/modules/plugin/index.d.ts.map +1 -0
  107. package/packages/happy2-server/dist/modules/plugin/index.js +3 -0
  108. package/packages/happy2-server/dist/modules/plugin/index.js.map +1 -0
  109. package/packages/happy2-server/dist/modules/plugin/packageStore.d.ts +15 -0
  110. package/packages/happy2-server/dist/modules/plugin/packageStore.d.ts.map +1 -0
  111. package/packages/happy2-server/dist/modules/plugin/packageStore.js +90 -0
  112. package/packages/happy2-server/dist/modules/plugin/packageStore.js.map +1 -0
  113. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.d.ts +7 -0
  114. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.d.ts.map +1 -0
  115. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.js +9 -0
  116. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.js.map +1 -0
  117. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.d.ts +9 -0
  118. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.d.ts.map +1 -0
  119. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js +64 -0
  120. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js.map +1 -0
  121. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.d.ts +10 -0
  122. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.d.ts.map +1 -0
  123. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.js +20 -0
  124. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceAuthorize.js.map +1 -0
  125. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.d.ts +12 -0
  126. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.d.ts.map +1 -0
  127. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.js +44 -0
  128. package/packages/happy2-server/dist/modules/plugin/pluginContainerInstanceInvalidate.js.map +1 -0
  129. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.d.ts +9 -0
  130. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.d.ts.map +1 -0
  131. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.js +15 -0
  132. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.js.map +1 -0
  133. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.d.ts +23 -0
  134. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.d.ts.map +1 -0
  135. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.js +54 -0
  136. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.js.map +1 -0
  137. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.d.ts +13 -0
  138. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.d.ts.map +1 -0
  139. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.js +37 -0
  140. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.js.map +1 -0
  141. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.d.ts +17 -0
  142. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.d.ts.map +1 -0
  143. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.js +29 -0
  144. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.js.map +1 -0
  145. package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts +27 -0
  146. package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts.map +1 -0
  147. package/packages/happy2-server/dist/modules/plugin/pluginInstall.js +180 -0
  148. package/packages/happy2-server/dist/modules/plugin/pluginInstall.js.map +1 -0
  149. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.d.ts +9 -0
  150. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.d.ts.map +1 -0
  151. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js +122 -0
  152. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js.map +1 -0
  153. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.d.ts +11 -0
  154. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.d.ts.map +1 -0
  155. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.js +18 -0
  156. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.js.map +1 -0
  157. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.d.ts +8 -0
  158. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.d.ts.map +1 -0
  159. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.js +19 -0
  160. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.js.map +1 -0
  161. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.d.ts +14 -0
  162. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.d.ts.map +1 -0
  163. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.js +20 -0
  164. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListForHost.js.map +1 -0
  165. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.d.ts +7 -0
  166. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.d.ts.map +1 -0
  167. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.js +13 -0
  168. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.js.map +1 -0
  169. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.d.ts +7 -0
  170. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.d.ts.map +1 -0
  171. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.js +16 -0
  172. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.js.map +1 -0
  173. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.d.ts +16 -0
  174. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.d.ts.map +1 -0
  175. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.js +38 -0
  176. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.js.map +1 -0
  177. package/packages/happy2-server/dist/modules/plugin/pluginList.d.ts +8 -0
  178. package/packages/happy2-server/dist/modules/plugin/pluginList.d.ts.map +1 -0
  179. package/packages/happy2-server/dist/modules/plugin/pluginList.js +17 -0
  180. package/packages/happy2-server/dist/modules/plugin/pluginList.js.map +1 -0
  181. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.d.ts +11 -0
  182. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.d.ts.map +1 -0
  183. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.js +43 -0
  184. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsList.js.map +1 -0
  185. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.d.ts +15 -0
  186. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.d.ts.map +1 -0
  187. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.js +37 -0
  188. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsListReady.js.map +1 -0
  189. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.d.ts +16 -0
  190. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.d.ts.map +1 -0
  191. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.js +71 -0
  192. package/packages/happy2-server/dist/modules/plugin/pluginMcpToolsReplace.js.map +1 -0
  193. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.d.ts +14 -0
  194. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.d.ts.map +1 -0
  195. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.js +51 -0
  196. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.js.map +1 -0
  197. package/packages/happy2-server/dist/modules/plugin/runtime.d.ts +56 -0
  198. package/packages/happy2-server/dist/modules/plugin/runtime.d.ts.map +1 -0
  199. package/packages/happy2-server/dist/modules/plugin/runtime.js +147 -0
  200. package/packages/happy2-server/dist/modules/plugin/runtime.js.map +1 -0
  201. package/packages/happy2-server/dist/modules/plugin/secrets.d.ts +17 -0
  202. package/packages/happy2-server/dist/modules/plugin/secrets.d.ts.map +1 -0
  203. package/packages/happy2-server/dist/modules/plugin/secrets.js +56 -0
  204. package/packages/happy2-server/dist/modules/plugin/secrets.js.map +1 -0
  205. package/packages/happy2-server/dist/modules/plugin/secrets.test.d.ts +2 -0
  206. package/packages/happy2-server/dist/modules/plugin/secrets.test.d.ts.map +1 -0
  207. package/packages/happy2-server/dist/modules/plugin/secrets.test.js +14 -0
  208. package/packages/happy2-server/dist/modules/plugin/secrets.test.js.map +1 -0
  209. package/packages/happy2-server/dist/modules/plugin/service.d.ts +60 -0
  210. package/packages/happy2-server/dist/modules/plugin/service.d.ts.map +1 -0
  211. package/packages/happy2-server/dist/modules/plugin/service.js +584 -0
  212. package/packages/happy2-server/dist/modules/plugin/service.js.map +1 -0
  213. package/packages/happy2-server/dist/modules/plugin/types.d.ts +194 -0
  214. package/packages/happy2-server/dist/modules/plugin/types.d.ts.map +1 -0
  215. package/packages/happy2-server/dist/modules/plugin/types.js +10 -0
  216. package/packages/happy2-server/dist/modules/plugin/types.js.map +1 -0
  217. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.d.ts +19 -0
  218. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.d.ts.map +1 -0
  219. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.js +97 -0
  220. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.js.map +1 -0
  221. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.d.ts +2 -0
  222. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.d.ts.map +1 -0
  223. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.js +74 -0
  224. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.js.map +1 -0
  225. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.d.ts +29 -0
  226. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.d.ts.map +1 -0
  227. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.js +126 -0
  228. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.js.map +1 -0
  229. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.d.ts +2 -0
  230. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.d.ts.map +1 -0
  231. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.js +75 -0
  232. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.js.map +1 -0
  233. package/packages/happy2-server/dist/modules/sandbox/index.d.ts +1 -1
  234. package/packages/happy2-server/dist/modules/sandbox/index.d.ts.map +1 -1
  235. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.d.ts +9 -1
  236. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.d.ts.map +1 -1
  237. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.js +218 -4
  238. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.js.map +1 -1
  239. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.test.js +157 -2
  240. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.test.js.map +1 -1
  241. package/packages/happy2-server/dist/modules/sandbox/types.d.ts +24 -0
  242. package/packages/happy2-server/dist/modules/sandbox/types.d.ts.map +1 -1
  243. package/packages/happy2-server/dist/modules/schema.d.ts +7781 -5489
  244. package/packages/happy2-server/dist/modules/schema.d.ts.map +1 -1
  245. package/packages/happy2-server/dist/modules/schema.js +87 -1
  246. package/packages/happy2-server/dist/modules/schema.js.map +1 -1
  247. package/packages/happy2-server/dist/modules/sync/syncGetDifference.d.ts.map +1 -1
  248. package/packages/happy2-server/dist/modules/sync/syncGetDifference.js +2 -0
  249. package/packages/happy2-server/dist/modules/sync/syncGetDifference.js.map +1 -1
  250. package/packages/happy2-server/dist/routes/pluginHost.d.ts +6 -0
  251. package/packages/happy2-server/dist/routes/pluginHost.d.ts.map +1 -0
  252. package/packages/happy2-server/dist/routes/pluginHost.js +37 -0
  253. package/packages/happy2-server/dist/routes/pluginHost.js.map +1 -0
  254. package/packages/happy2-server/dist/routes/plugins.d.ts +8 -0
  255. package/packages/happy2-server/dist/routes/plugins.d.ts.map +1 -0
  256. package/packages/happy2-server/dist/routes/plugins.js +198 -0
  257. package/packages/happy2-server/dist/routes/plugins.js.map +1 -0
  258. package/packages/happy2-server/dist/runner.js +64 -19
  259. package/packages/happy2-server/dist/runner.js.map +1 -1
  260. package/packages/happy2-server/dist/server.d.ts +8 -0
  261. package/packages/happy2-server/dist/server.d.ts.map +1 -1
  262. package/packages/happy2-server/dist/server.js +65 -3
  263. package/packages/happy2-server/dist/server.js.map +1 -1
  264. package/packages/happy2-server/dist/systemService.d.ts +48 -0
  265. package/packages/happy2-server/dist/systemService.d.ts.map +1 -0
  266. package/packages/happy2-server/dist/systemService.js +323 -0
  267. package/packages/happy2-server/dist/systemService.js.map +1 -0
  268. package/packages/happy2-server/dist/systemService.test.d.ts +2 -0
  269. package/packages/happy2-server/dist/systemService.test.d.ts.map +1 -0
  270. package/packages/happy2-server/dist/systemService.test.js +280 -0
  271. package/packages/happy2-server/dist/systemService.test.js.map +1 -0
  272. package/packages/happy2-server/dist/web/assets/index-9SGCQLg7.js +46 -0
  273. package/packages/happy2-server/dist/web/assets/{index-DZ1uRLgV.css → index-DWXBQDJB.css} +1 -1
  274. package/packages/happy2-server/dist/web/index.html +2 -2
  275. package/packages/happy2-server/drizzle/0020_plugins.sql +61 -0
  276. package/packages/happy2-server/drizzle/0021_plugin_function_results.sql +11 -0
  277. package/packages/happy2-server/drizzle/0022_plugin_container_runtime_tools.sql +16 -0
  278. package/packages/happy2-server/drizzle/meta/_journal.json +21 -0
  279. package/packages/happy2-server/happy2.example.toml +13 -0
  280. package/packages/happy2-server/plugins/README.md +7 -0
  281. package/packages/happy2-server/plugins/hello/container/Dockerfile +6 -0
  282. package/packages/happy2-server/plugins/hello/plugin.json +16 -0
  283. package/packages/happy2-server/plugins/hello/plugin.png +0 -0
  284. package/packages/happy2-server/plugins/hello/server.mjs +75 -0
  285. package/packages/happy2-server/plugins/hello/skills/hello/SKILL.md +11 -0
  286. package/packages/happy2-server/dist/web/assets/index-DH1SOwNV.js +0 -46
@@ -0,0 +1,302 @@
1
+ import { spawn } from "node:child_process";
2
+ import { close, open, writeFileSync } from "node:fs";
3
+ import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { isAbsolute, join, resolve } from "node:path";
5
+ import { parseArgs } from "node:util";
6
+ const daemonDirectoryName = ".happy2";
7
+ const daemonPidFileName = "happy2.pid";
8
+ const daemonLogFileName = "happy2.log";
9
+ const gracefulStopTimeoutMs = 10_000;
10
+ const forcedStopTimeoutMs = 2_000;
11
+ const processExitPollMs = 50;
12
+ export function parseDaemonCommand(arguments_) {
13
+ let positionals;
14
+ let values;
15
+ try {
16
+ const parsed = parseArgs({
17
+ args: [...arguments_],
18
+ allowPositionals: true,
19
+ options: {
20
+ config: { type: "string" },
21
+ help: { type: "boolean", short: "h" },
22
+ },
23
+ });
24
+ positionals = parsed.positionals;
25
+ values = parsed.values;
26
+ }
27
+ catch {
28
+ return { action: "invalid" };
29
+ }
30
+ const action = positionals[0];
31
+ if ((values.help || action === "help") &&
32
+ positionals.length <= 1 &&
33
+ values.config === undefined) {
34
+ return { action: "help" };
35
+ }
36
+ if (action === "start" && positionals.length === 1) {
37
+ return { action: "start", configPath: values.config };
38
+ }
39
+ if (action === "stop" && positionals.length === 1 && values.config === undefined) {
40
+ return { action: "stop" };
41
+ }
42
+ return { action: "invalid" };
43
+ }
44
+ export async function daemonStart(options, host = createDaemonHost()) {
45
+ const paths = daemonPaths(host.cwd);
46
+ await host.directoryCreate(paths.directory);
47
+ const existing = await pidFileRead(paths.pid, host);
48
+ if (existing.kind === "starting" && host.processAlive(existing.pid)) {
49
+ throw new Error(`Happy (2) daemon is already starting as process ${existing.pid}.`);
50
+ }
51
+ if (existing.kind === "pid" && host.processTreeAlive(existing.pid)) {
52
+ throw new Error(`Happy (2) is already running as daemon process ${existing.pid}.`);
53
+ }
54
+ if (existing.kind !== "missing") {
55
+ await host.fileRemove(paths.pid);
56
+ }
57
+ const configPath = await configPathResolve(options.configPath, host);
58
+ if (!(await host.fileCreate(paths.pid, `starting:${process.pid}\n`))) {
59
+ throw new Error("Happy (2) daemon is already starting.");
60
+ }
61
+ const childArguments = [
62
+ ...host.executableArguments,
63
+ host.scriptPath,
64
+ ...(configPath ? ["--config", configPath] : []),
65
+ ];
66
+ let pid;
67
+ try {
68
+ pid = await host.processStart({
69
+ arguments_: childArguments,
70
+ cwd: host.cwd,
71
+ environment: host.environment,
72
+ executablePath: host.executablePath,
73
+ logPath: paths.log,
74
+ pidPath: paths.pid,
75
+ });
76
+ }
77
+ catch (error) {
78
+ if (pid !== undefined)
79
+ signalIfAlive(pid, "SIGKILL", host);
80
+ await host.fileRemove(paths.pid);
81
+ throw error;
82
+ }
83
+ host.log(`Happy (2) daemon started as process ${pid}.`);
84
+ host.log(`PID file: ${paths.pid}`);
85
+ host.log(`Logs: ${paths.log}`);
86
+ }
87
+ export async function daemonStop(host = createDaemonHost()) {
88
+ const { pid: pidPath } = daemonPaths(host.cwd);
89
+ const state = await pidFileRead(pidPath, host);
90
+ if (state.kind === "starting" && host.processAlive(state.pid)) {
91
+ throw new Error(`Happy (2) daemon is still starting as process ${state.pid}.`);
92
+ }
93
+ if (state.kind === "missing" || state.kind === "invalid" || state.kind === "starting") {
94
+ if (state.kind !== "missing")
95
+ await host.fileRemove(pidPath);
96
+ host.log("Happy (2) daemon is not running.");
97
+ return;
98
+ }
99
+ const { pid } = state;
100
+ if (!host.processTreeAlive(pid)) {
101
+ await host.fileRemove(pidPath);
102
+ host.log(`Removed stale Happy (2) daemon PID file for process ${pid}.`);
103
+ return;
104
+ }
105
+ try {
106
+ host.processTreeSignal(pid, "SIGTERM");
107
+ if (!(await processExitWait(pid, gracefulStopTimeoutMs, host))) {
108
+ host.processTreeSignal(pid, "SIGKILL");
109
+ if (!(await processExitWait(pid, forcedStopTimeoutMs, host))) {
110
+ throw new Error(`Happy (2) daemon process ${pid} did not stop.`);
111
+ }
112
+ }
113
+ }
114
+ catch (error) {
115
+ if (host.processTreeAlive(pid))
116
+ throw error;
117
+ }
118
+ await host.fileRemove(pidPath);
119
+ host.log(`Happy (2) daemon process ${pid} was stopped.`);
120
+ }
121
+ export function daemonUsage() {
122
+ return [
123
+ "Usage:",
124
+ " happy2 daemon start [--config /path/to/happy2.toml]",
125
+ " happy2 daemon stop",
126
+ "",
127
+ "The daemon runs in the background. Its PID and logs are stored under ./.happy2.",
128
+ ].join("\n");
129
+ }
130
+ function daemonPaths(cwd) {
131
+ const directory = join(cwd, daemonDirectoryName);
132
+ return {
133
+ directory,
134
+ log: join(directory, daemonLogFileName),
135
+ pid: join(directory, daemonPidFileName),
136
+ };
137
+ }
138
+ async function configPathResolve(configPath, host) {
139
+ if (!configPath)
140
+ return undefined;
141
+ const absolute = isAbsolute(configPath) ? configPath : resolve(host.cwd, configPath);
142
+ if (!(await host.fileExists(absolute))) {
143
+ throw new Error(`Happy (2) config does not exist: ${absolute}`);
144
+ }
145
+ return absolute;
146
+ }
147
+ async function pidFileRead(path, host) {
148
+ if (!(await host.fileExists(path)))
149
+ return { kind: "missing" };
150
+ const contents = (await host.fileRead(path)).trim();
151
+ const starting = /^starting:([1-9]\d*)$/.exec(contents);
152
+ if (starting) {
153
+ const pid = Number(starting[1]);
154
+ return Number.isSafeInteger(pid) ? { kind: "starting", pid } : { kind: "invalid" };
155
+ }
156
+ if (!/^[1-9]\d*$/.test(contents))
157
+ return { kind: "invalid" };
158
+ const pid = Number(contents);
159
+ return Number.isSafeInteger(pid) ? { kind: "pid", pid } : { kind: "invalid" };
160
+ }
161
+ async function processExitWait(pid, timeoutMs, host) {
162
+ const attempts = Math.ceil(timeoutMs / processExitPollMs);
163
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
164
+ if (!host.processTreeAlive(pid))
165
+ return true;
166
+ await host.wait(processExitPollMs);
167
+ }
168
+ return !host.processTreeAlive(pid);
169
+ }
170
+ function signalIfAlive(pid, signal, host) {
171
+ if (!host.processTreeAlive(pid))
172
+ return;
173
+ try {
174
+ host.processTreeSignal(pid, signal);
175
+ }
176
+ catch {
177
+ // Preserve the original file-write error from daemonStart.
178
+ }
179
+ }
180
+ export function createDaemonHost() {
181
+ return {
182
+ cwd: process.cwd(),
183
+ environment: process.env,
184
+ executablePath: process.execPath,
185
+ executableArguments: process.execArgv,
186
+ scriptPath: resolve(process.argv[1] ?? ""),
187
+ async directoryCreate(path) {
188
+ await mkdir(path, { mode: 0o700, recursive: true });
189
+ },
190
+ async fileCreate(path, contents) {
191
+ try {
192
+ await writeFile(path, contents, { encoding: "utf8", flag: "wx", mode: 0o600 });
193
+ return true;
194
+ }
195
+ catch (error) {
196
+ if (error.code === "EEXIST")
197
+ return false;
198
+ throw error;
199
+ }
200
+ },
201
+ async fileExists(path) {
202
+ try {
203
+ await access(path);
204
+ return true;
205
+ }
206
+ catch {
207
+ return false;
208
+ }
209
+ },
210
+ async fileRead(path) {
211
+ return await readFile(path, "utf8");
212
+ },
213
+ async fileRemove(path) {
214
+ await rm(path, { force: true });
215
+ },
216
+ processAlive(pid) {
217
+ try {
218
+ process.kill(pid, 0);
219
+ return true;
220
+ }
221
+ catch (error) {
222
+ return error.code === "EPERM";
223
+ }
224
+ },
225
+ processTreeAlive(pid) {
226
+ try {
227
+ process.kill(-pid, 0);
228
+ return true;
229
+ }
230
+ catch (error) {
231
+ return error.code === "EPERM";
232
+ }
233
+ },
234
+ async processStart(input) {
235
+ const descriptor = await new Promise((resolveDescriptor, reject) => {
236
+ open(input.logPath, "a", 0o600, (error, openedDescriptor) => {
237
+ if (error)
238
+ reject(error);
239
+ else
240
+ resolveDescriptor(openedDescriptor);
241
+ });
242
+ });
243
+ try {
244
+ const child = spawn(input.executablePath, [...input.arguments_], {
245
+ cwd: input.cwd,
246
+ detached: true,
247
+ env: input.environment,
248
+ stdio: ["ignore", descriptor, descriptor],
249
+ });
250
+ const spawned = new Promise((resolveSpawn, reject) => {
251
+ child.once("error", reject);
252
+ child.once("spawn", resolveSpawn);
253
+ });
254
+ if (child.pid === undefined) {
255
+ await spawned;
256
+ throw new Error("Happy (2) daemon did not start.");
257
+ }
258
+ try {
259
+ writeFileSync(input.pidPath, `${child.pid}\n`, {
260
+ encoding: "utf8",
261
+ flag: "w",
262
+ mode: 0o600,
263
+ });
264
+ }
265
+ catch (error) {
266
+ signalProcessGroupIfAlive(child.pid, "SIGKILL");
267
+ throw error;
268
+ }
269
+ try {
270
+ await spawned;
271
+ }
272
+ catch (error) {
273
+ signalProcessGroupIfAlive(child.pid, "SIGKILL");
274
+ throw error;
275
+ }
276
+ child.unref();
277
+ return child.pid;
278
+ }
279
+ finally {
280
+ close(descriptor, () => { });
281
+ }
282
+ },
283
+ processTreeSignal(pid, signal) {
284
+ process.kill(-pid, signal);
285
+ },
286
+ async wait(milliseconds) {
287
+ await new Promise((resolveWait) => setTimeout(resolveWait, milliseconds));
288
+ },
289
+ log(message) {
290
+ console.log(message);
291
+ },
292
+ };
293
+ }
294
+ function signalProcessGroupIfAlive(pid, signal) {
295
+ try {
296
+ process.kill(-pid, signal);
297
+ }
298
+ catch {
299
+ // The process group may already have exited after a failed spawn.
300
+ }
301
+ }
302
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../sources/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=daemon.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.test.d.ts","sourceRoot":"","sources":["../sources/daemon.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,245 @@
1
+ import { execFile } from "node:child_process";
2
+ import { access, mkdtemp, readFile, rm } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { describe, expect, it } from "vitest";
7
+ import { daemonStart, daemonStop, daemonUsage, createDaemonHost, parseDaemonCommand, } from "./daemon.js";
8
+ const execute = promisify(execFile);
9
+ class FakeDaemonHost {
10
+ cwd = "/Users/ada/Happy Work";
11
+ environment = { PATH: "/usr/bin" };
12
+ executablePath = "/opt/node/bin/node";
13
+ executableArguments = ["--import=tsx"];
14
+ scriptPath = "/app/runner.ts";
15
+ files = new Map();
16
+ directories = [];
17
+ starts = [];
18
+ signals = [];
19
+ alive = new Set();
20
+ logs = [];
21
+ startedPid = 4242;
22
+ ignoreTerminate = false;
23
+ waitCount = 0;
24
+ createAllowed = true;
25
+ async directoryCreate(path) {
26
+ this.directories.push(path);
27
+ }
28
+ async fileCreate(path, contents) {
29
+ if (!this.createAllowed || this.files.has(path))
30
+ return false;
31
+ this.files.set(path, contents);
32
+ return true;
33
+ }
34
+ async fileExists(path) {
35
+ return this.files.has(path);
36
+ }
37
+ async fileRead(path) {
38
+ const value = this.files.get(path);
39
+ if (value === undefined)
40
+ throw new Error(`Missing fake file: ${path}`);
41
+ return value;
42
+ }
43
+ async fileRemove(path) {
44
+ this.files.delete(path);
45
+ }
46
+ processAlive(pid) {
47
+ return this.alive.has(pid);
48
+ }
49
+ processTreeAlive(pid) {
50
+ return this.alive.has(pid);
51
+ }
52
+ async processStart(input) {
53
+ this.starts.push(input);
54
+ this.alive.add(this.startedPid);
55
+ this.files.set(input.pidPath, `${this.startedPid}\n`);
56
+ return this.startedPid;
57
+ }
58
+ processTreeSignal(pid, signal) {
59
+ this.signals.push({ pid, signal });
60
+ if (signal === "SIGKILL" || !this.ignoreTerminate)
61
+ this.alive.delete(pid);
62
+ }
63
+ async wait() {
64
+ this.waitCount += 1;
65
+ }
66
+ log(message) {
67
+ this.logs.push(message);
68
+ }
69
+ }
70
+ describe("background daemon lifecycle", () => {
71
+ it("starts a detached foreground invocation and records its PID", async () => {
72
+ const host = new FakeDaemonHost();
73
+ host.files.set("/Users/ada/Happy Work/config/happy2.toml", "[server]\n");
74
+ await daemonStart({ configPath: "config/happy2.toml" }, host);
75
+ expect(host.directories).toEqual(["/Users/ada/Happy Work/.happy2"]);
76
+ expect(host.starts).toEqual([
77
+ {
78
+ arguments_: [
79
+ "--import=tsx",
80
+ "/app/runner.ts",
81
+ "--config",
82
+ "/Users/ada/Happy Work/config/happy2.toml",
83
+ ],
84
+ cwd: "/Users/ada/Happy Work",
85
+ environment: host.environment,
86
+ executablePath: "/opt/node/bin/node",
87
+ logPath: "/Users/ada/Happy Work/.happy2/happy2.log",
88
+ pidPath: "/Users/ada/Happy Work/.happy2/happy2.pid",
89
+ },
90
+ ]);
91
+ expect(host.files.get("/Users/ada/Happy Work/.happy2/happy2.pid")).toBe("4242\n");
92
+ expect(host.logs).toEqual([
93
+ "Happy (2) daemon started as process 4242.",
94
+ "PID file: /Users/ada/Happy Work/.happy2/happy2.pid",
95
+ "Logs: /Users/ada/Happy Work/.happy2/happy2.log",
96
+ ]);
97
+ });
98
+ it("rejects duplicate starts while preserving the live daemon PID", async () => {
99
+ const host = new FakeDaemonHost();
100
+ const pidPath = "/Users/ada/Happy Work/.happy2/happy2.pid";
101
+ host.files.set(pidPath, "111\n");
102
+ host.alive.add(111);
103
+ await expect(daemonStart({}, host)).rejects.toThrow("already running as daemon process 111");
104
+ expect(host.starts).toEqual([]);
105
+ expect(host.files.get(pidPath)).toBe("111\n");
106
+ });
107
+ it("replaces stale and malformed PID files when starting", async () => {
108
+ for (const contents of ["333\n", "not-a-pid\n", "starting:333\n"]) {
109
+ const host = new FakeDaemonHost();
110
+ const pidPath = "/Users/ada/Happy Work/.happy2/happy2.pid";
111
+ host.files.set(pidPath, contents);
112
+ await daemonStart({}, host);
113
+ expect(host.files.get(pidPath)).toBe("4242\n");
114
+ expect(host.starts).toHaveLength(1);
115
+ }
116
+ });
117
+ it("acquires the PID file before spawning so concurrent starts cannot overlap", async () => {
118
+ const host = new FakeDaemonHost();
119
+ host.createAllowed = false;
120
+ await expect(daemonStart({}, host)).rejects.toThrow("daemon is already starting");
121
+ expect(host.starts).toEqual([]);
122
+ });
123
+ it("gracefully stops the process tree and removes its PID file", async () => {
124
+ const host = new FakeDaemonHost();
125
+ const pidPath = "/Users/ada/Happy Work/.happy2/happy2.pid";
126
+ host.files.set(pidPath, "5150\n");
127
+ host.alive.add(5150);
128
+ await daemonStop(host);
129
+ expect(host.signals).toEqual([{ pid: 5150, signal: "SIGTERM" }]);
130
+ expect(host.files.has(pidPath)).toBe(false);
131
+ expect(host.logs).toEqual(["Happy (2) daemon process 5150 was stopped."]);
132
+ });
133
+ it("force-stops a process tree that ignores graceful termination", async () => {
134
+ const host = new FakeDaemonHost();
135
+ const pidPath = "/Users/ada/Happy Work/.happy2/happy2.pid";
136
+ host.files.set(pidPath, "5150\n");
137
+ host.alive.add(5150);
138
+ host.ignoreTerminate = true;
139
+ await daemonStop(host);
140
+ expect(host.signals).toEqual([
141
+ { pid: 5150, signal: "SIGTERM" },
142
+ { pid: 5150, signal: "SIGKILL" },
143
+ ]);
144
+ expect(host.waitCount).toBe(200);
145
+ expect(host.files.has(pidPath)).toBe(false);
146
+ });
147
+ it("cleans stale or invalid PID files and makes stop idempotent", async () => {
148
+ const pidPath = "/Users/ada/Happy Work/.happy2/happy2.pid";
149
+ const staleHost = new FakeDaemonHost();
150
+ staleHost.files.set(pidPath, "8080\n");
151
+ await daemonStop(staleHost);
152
+ expect(staleHost.files.has(pidPath)).toBe(false);
153
+ expect(staleHost.logs).toEqual([
154
+ "Removed stale Happy (2) daemon PID file for process 8080.",
155
+ ]);
156
+ const invalidHost = new FakeDaemonHost();
157
+ invalidHost.files.set(pidPath, "invalid\n");
158
+ await daemonStop(invalidHost);
159
+ expect(invalidHost.files.has(pidPath)).toBe(false);
160
+ expect(invalidHost.logs).toEqual(["Happy (2) daemon is not running."]);
161
+ const startingHost = new FakeDaemonHost();
162
+ startingHost.files.set(pidPath, "starting:9090\n");
163
+ startingHost.alive.add(9090);
164
+ await expect(daemonStop(startingHost)).rejects.toThrow("daemon is still starting as process 9090");
165
+ expect(startingHost.files.get(pidPath)).toBe("starting:9090\n");
166
+ const interruptedStartHost = new FakeDaemonHost();
167
+ interruptedStartHost.files.set(pidPath, "starting:9090\n");
168
+ await daemonStop(interruptedStartHost);
169
+ expect(interruptedStartHost.files.has(pidPath)).toBe(false);
170
+ expect(interruptedStartHost.logs).toEqual(["Happy (2) daemon is not running."]);
171
+ const absentHost = new FakeDaemonHost();
172
+ await daemonStop(absentHost);
173
+ expect(absentHost.logs).toEqual(["Happy (2) daemon is not running."]);
174
+ });
175
+ it("rejects a missing explicit config before spawning", async () => {
176
+ const host = new FakeDaemonHost();
177
+ await expect(daemonStart({ configPath: "missing.toml" }, host)).rejects.toThrow("config does not exist: /Users/ada/Happy Work/missing.toml");
178
+ expect(host.starts).toEqual([]);
179
+ });
180
+ it("parses every daemon action and documents the lifecycle", () => {
181
+ expect(parseDaemonCommand(["start"])).toEqual({
182
+ action: "start",
183
+ configPath: undefined,
184
+ });
185
+ expect(parseDaemonCommand(["start", "--config", "happy2.toml"])).toEqual({
186
+ action: "start",
187
+ configPath: "happy2.toml",
188
+ });
189
+ expect(parseDaemonCommand(["stop"])).toEqual({ action: "stop" });
190
+ expect(parseDaemonCommand(["help"])).toEqual({ action: "help" });
191
+ expect(parseDaemonCommand(["-h"])).toEqual({ action: "help" });
192
+ expect(parseDaemonCommand([])).toEqual({ action: "invalid" });
193
+ expect(parseDaemonCommand(["start", "extra"])).toEqual({ action: "invalid" });
194
+ expect(parseDaemonCommand(["stop", "--config", "happy2.toml"])).toEqual({
195
+ action: "invalid",
196
+ });
197
+ expect(daemonUsage()).toContain("happy2 daemon start");
198
+ expect(daemonUsage()).toContain("happy2 daemon stop");
199
+ expect(daemonUsage()).toContain("PID and logs");
200
+ });
201
+ it("wires daemon help and invalid arguments through the executable CLI", async () => {
202
+ const runner = join(import.meta.dirname, "runner.ts");
203
+ const help = await execute(process.execPath, ["--import=tsx", runner, "daemon", "--help"]);
204
+ expect(help.stdout).toContain("happy2 daemon start");
205
+ expect(help.stderr).toBe("");
206
+ try {
207
+ await execute(process.execPath, ["--import=tsx", runner, "daemon", "--unknown"]);
208
+ throw new Error("Expected invalid daemon arguments to fail.");
209
+ }
210
+ catch (error) {
211
+ expect(error).toMatchObject({ code: 1, stdout: "" });
212
+ expect(error.stderr).toContain("happy2 daemon start");
213
+ expect(error.stderr).not.toContain("Error:");
214
+ }
215
+ });
216
+ it("detaches and terminates a real process group through the production host", async () => {
217
+ if (process.platform === "win32")
218
+ return;
219
+ const directory = await mkdtemp(join(tmpdir(), "happy2-daemon-test-"));
220
+ const host = createDaemonHost();
221
+ host.cwd = directory;
222
+ host.executablePath = "/bin/sh";
223
+ host.executableArguments = ["-c", "trap 'exit 0' TERM; while :; do sleep 1; done"];
224
+ host.scriptPath = "happy2-daemon-test";
225
+ host.log = () => { };
226
+ let pid;
227
+ try {
228
+ await daemonStart({}, host);
229
+ pid = Number(await readFile(join(directory, ".happy2", "happy2.pid"), "utf8"));
230
+ expect(host.processTreeAlive(pid)).toBe(true);
231
+ await daemonStop(host);
232
+ expect(host.processTreeAlive(pid)).toBe(false);
233
+ await expect(access(join(directory, ".happy2", "happy2.pid"))).rejects.toMatchObject({
234
+ code: "ENOENT",
235
+ });
236
+ }
237
+ finally {
238
+ if (pid !== undefined && host.processTreeAlive(pid)) {
239
+ host.processTreeSignal(pid, "SIGKILL");
240
+ }
241
+ await rm(directory, { force: true, recursive: true });
242
+ }
243
+ });
244
+ });
245
+ //# sourceMappingURL=daemon.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../sources/daemon.test.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export { syncInitialize } from "./modules/sync/syncInitialize.js";
16
16
  export { AesGcmSecretProtector } from "./modules/integrations/secrets.js";
17
17
  export { NodeWebhookTransport } from "./modules/integrations/transport.js";
18
18
  export * from "./modules/integrations/types.js";
19
+ export type { ResolvedWebhookUrl, WebhookUrlPolicy } from "./modules/integrations/ssrf.js";
19
20
  export * from "./modules/operations/types.js";
20
21
  export { FileStorage, type FileStorageFileSystem } from "./modules/files/storage.js";
21
22
  export * from "./modules/chat/types.js";
@@ -24,5 +25,10 @@ export * from "./modules/setup/index.js";
24
25
  export * from "./modules/sandbox/index.js";
25
26
  export { userOnboardingUpdateStep } from "./modules/user/userOnboardingUpdateStep.js";
26
27
  export * from "./modules/workspace/index.js";
27
- export { buildServer } from "./server.js";
28
+ export * from "./modules/plugin/index.js";
29
+ export { AesGcmPluginSecretProtector } from "./modules/plugin/secrets.js";
30
+ export type { PluginSecretProtector } from "./modules/plugin/secrets.js";
31
+ export { PluginPackageStore } from "./modules/plugin/packageStore.js";
32
+ export { SandboxPluginMcpRuntime, type PluginLocalOpenInput, type PluginLocalPrepareInput, type PluginMcpRuntime, } from "./modules/plugin/runtime.js";
33
+ export { buildServer, pluginHostApiFor } from "./server.js";
28
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,YAAY,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,cAAc,iCAAiC,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC3F,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACH,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -21,5 +21,9 @@ export * from "./modules/setup/index.js";
21
21
  export * from "./modules/sandbox/index.js";
22
22
  export { userOnboardingUpdateStep } from "./modules/user/userOnboardingUpdateStep.js";
23
23
  export * from "./modules/workspace/index.js";
24
- export { buildServer } from "./server.js";
24
+ export * from "./modules/plugin/index.js";
25
+ export { AesGcmPluginSecretProtector } from "./modules/plugin/secrets.js";
26
+ export { PluginPackageStore } from "./modules/plugin/packageStore.js";
27
+ export { SandboxPluginMcpRuntime, } from "./modules/plugin/runtime.js";
28
+ export { buildServer, pluginHostApiFor } from "./server.js";
25
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,iBAAiB,CAAC;AAI/E,OAAO,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA8B,MAAM,4BAA4B,CAAC;AACrF,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAA6B,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,iBAAiB,CAAC;AAI/E,OAAO,EAAE,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,cAAc,iCAAiC,CAAC;AAEhD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA8B,MAAM,4BAA4B,CAAC;AACrF,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACH,uBAAuB,GAI1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}