happy2 0.0.9 → 0.0.11

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 (235) hide show
  1. package/README.md +19 -0
  2. package/package.json +7 -3
  3. package/packages/happy2-server/PLUGINS.md +330 -0
  4. package/packages/happy2-server/README.md +28 -0
  5. package/packages/happy2-server/dist/index.d.ts +6 -0
  6. package/packages/happy2-server/dist/index.d.ts.map +1 -1
  7. package/packages/happy2-server/dist/index.js +4 -0
  8. package/packages/happy2-server/dist/index.js.map +1 -1
  9. package/packages/happy2-server/dist/modules/agents/daemon.d.ts +10 -13
  10. package/packages/happy2-server/dist/modules/agents/daemon.d.ts.map +1 -1
  11. package/packages/happy2-server/dist/modules/agents/daemon.js +19 -5
  12. package/packages/happy2-server/dist/modules/agents/daemon.js.map +1 -1
  13. package/packages/happy2-server/dist/modules/agents/service.d.ts +9 -1
  14. package/packages/happy2-server/dist/modules/agents/service.d.ts.map +1 -1
  15. package/packages/happy2-server/dist/modules/agents/service.js +59 -2
  16. package/packages/happy2-server/dist/modules/agents/service.js.map +1 -1
  17. package/packages/happy2-server/dist/modules/chat/types.d.ts +1 -1
  18. package/packages/happy2-server/dist/modules/chat/types.d.ts.map +1 -1
  19. package/packages/happy2-server/dist/modules/config/defaults.d.ts.map +1 -1
  20. package/packages/happy2-server/dist/modules/config/defaults.js +3 -0
  21. package/packages/happy2-server/dist/modules/config/defaults.js.map +1 -1
  22. package/packages/happy2-server/dist/modules/config/loader.d.ts.map +1 -1
  23. package/packages/happy2-server/dist/modules/config/loader.js +4 -0
  24. package/packages/happy2-server/dist/modules/config/loader.js.map +1 -1
  25. package/packages/happy2-server/dist/modules/config/paths.d.ts +1 -0
  26. package/packages/happy2-server/dist/modules/config/paths.d.ts.map +1 -1
  27. package/packages/happy2-server/dist/modules/config/paths.js +1 -0
  28. package/packages/happy2-server/dist/modules/config/paths.js.map +1 -1
  29. package/packages/happy2-server/dist/modules/config/paths.test.js +1 -0
  30. package/packages/happy2-server/dist/modules/config/paths.test.js.map +1 -1
  31. package/packages/happy2-server/dist/modules/config/type.d.ts +3 -0
  32. package/packages/happy2-server/dist/modules/config/type.d.ts.map +1 -1
  33. package/packages/happy2-server/dist/modules/integrations/transport.d.ts.map +1 -1
  34. package/packages/happy2-server/dist/modules/integrations/transport.js +8 -1
  35. package/packages/happy2-server/dist/modules/integrations/transport.js.map +1 -1
  36. package/packages/happy2-server/dist/modules/integrations/types.d.ts +2 -0
  37. package/packages/happy2-server/dist/modules/integrations/types.d.ts.map +1 -1
  38. package/packages/happy2-server/dist/modules/integrations/types.js.map +1 -1
  39. package/packages/happy2-server/dist/modules/plugin/catalog.d.ts +13 -0
  40. package/packages/happy2-server/dist/modules/plugin/catalog.d.ts.map +1 -0
  41. package/packages/happy2-server/dist/modules/plugin/catalog.js +359 -0
  42. package/packages/happy2-server/dist/modules/plugin/catalog.js.map +1 -0
  43. package/packages/happy2-server/dist/modules/plugin/catalog.test.d.ts +2 -0
  44. package/packages/happy2-server/dist/modules/plugin/catalog.test.d.ts.map +1 -0
  45. package/packages/happy2-server/dist/modules/plugin/catalog.test.js +139 -0
  46. package/packages/happy2-server/dist/modules/plugin/catalog.test.js.map +1 -0
  47. package/packages/happy2-server/dist/modules/plugin/functions.test.d.ts +2 -0
  48. package/packages/happy2-server/dist/modules/plugin/functions.test.d.ts.map +1 -0
  49. package/packages/happy2-server/dist/modules/plugin/functions.test.js +123 -0
  50. package/packages/happy2-server/dist/modules/plugin/functions.test.js.map +1 -0
  51. package/packages/happy2-server/dist/modules/plugin/httpBridge.d.ts +19 -0
  52. package/packages/happy2-server/dist/modules/plugin/httpBridge.d.ts.map +1 -0
  53. package/packages/happy2-server/dist/modules/plugin/httpBridge.js +206 -0
  54. package/packages/happy2-server/dist/modules/plugin/httpBridge.js.map +1 -0
  55. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.d.ts +3 -0
  56. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.d.ts.map +1 -0
  57. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.js +47 -0
  58. package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.js.map +1 -0
  59. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.d.ts +3 -0
  60. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.d.ts.map +1 -0
  61. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js +69 -0
  62. package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js.map +1 -0
  63. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.d.ts +288 -0
  64. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.d.ts.map +1 -0
  65. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.js +19 -0
  66. package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.js.map +1 -0
  67. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.d.ts +3 -0
  68. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.d.ts.map +1 -0
  69. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js +52 -0
  70. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js.map +1 -0
  71. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.d.ts +2 -0
  72. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.d.ts.map +1 -0
  73. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.js +17 -0
  74. package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.js.map +1 -0
  75. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.d.ts +3 -0
  76. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.d.ts.map +1 -0
  77. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.js +16 -0
  78. package/packages/happy2-server/dist/modules/plugin/impl/pluginFunctionResult.js.map +1 -0
  79. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.d.ts +339 -0
  80. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.d.ts.map +1 -0
  81. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.js +22 -0
  82. package/packages/happy2-server/dist/modules/plugin/impl/pluginSelection.js.map +1 -0
  83. package/packages/happy2-server/dist/modules/plugin/index.d.ts +3 -0
  84. package/packages/happy2-server/dist/modules/plugin/index.d.ts.map +1 -0
  85. package/packages/happy2-server/dist/modules/plugin/index.js +3 -0
  86. package/packages/happy2-server/dist/modules/plugin/index.js.map +1 -0
  87. package/packages/happy2-server/dist/modules/plugin/packageStore.d.ts +15 -0
  88. package/packages/happy2-server/dist/modules/plugin/packageStore.d.ts.map +1 -0
  89. package/packages/happy2-server/dist/modules/plugin/packageStore.js +90 -0
  90. package/packages/happy2-server/dist/modules/plugin/packageStore.js.map +1 -0
  91. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.d.ts +7 -0
  92. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.d.ts.map +1 -0
  93. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.js +9 -0
  94. package/packages/happy2-server/dist/modules/plugin/pluginAuthorizeManagement.js.map +1 -0
  95. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.d.ts +9 -0
  96. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.d.ts.map +1 -0
  97. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js +50 -0
  98. package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js.map +1 -0
  99. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.d.ts +9 -0
  100. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.d.ts.map +1 -0
  101. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.js +15 -0
  102. package/packages/happy2-server/dist/modules/plugin/pluginFindBySource.js.map +1 -0
  103. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.d.ts +23 -0
  104. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.d.ts.map +1 -0
  105. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.js +54 -0
  106. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultAcquire.js.map +1 -0
  107. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.d.ts +13 -0
  108. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.d.ts.map +1 -0
  109. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.js +37 -0
  110. package/packages/happy2-server/dist/modules/plugin/pluginFunctionResultComplete.js.map +1 -0
  111. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.d.ts +17 -0
  112. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.d.ts.map +1 -0
  113. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.js +29 -0
  114. package/packages/happy2-server/dist/modules/plugin/pluginGetImage.js.map +1 -0
  115. package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts +27 -0
  116. package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts.map +1 -0
  117. package/packages/happy2-server/dist/modules/plugin/pluginInstall.js +175 -0
  118. package/packages/happy2-server/dist/modules/plugin/pluginInstall.js.map +1 -0
  119. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.d.ts +9 -0
  120. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.d.ts.map +1 -0
  121. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js +111 -0
  122. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js.map +1 -0
  123. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.d.ts +11 -0
  124. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.d.ts.map +1 -0
  125. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.js +18 -0
  126. package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetStatus.js.map +1 -0
  127. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.d.ts +8 -0
  128. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.d.ts.map +1 -0
  129. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.js +19 -0
  130. package/packages/happy2-server/dist/modules/plugin/pluginInstallationList.js.map +1 -0
  131. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.d.ts +7 -0
  132. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.d.ts.map +1 -0
  133. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.js +13 -0
  134. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListIds.js.map +1 -0
  135. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.d.ts +7 -0
  136. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.d.ts.map +1 -0
  137. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.js +16 -0
  138. package/packages/happy2-server/dist/modules/plugin/pluginInstallationListReadyMcpIds.js.map +1 -0
  139. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.d.ts +15 -0
  140. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.d.ts.map +1 -0
  141. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.js +37 -0
  142. package/packages/happy2-server/dist/modules/plugin/pluginInstallationUpdateStatus.js.map +1 -0
  143. package/packages/happy2-server/dist/modules/plugin/pluginList.d.ts +8 -0
  144. package/packages/happy2-server/dist/modules/plugin/pluginList.d.ts.map +1 -0
  145. package/packages/happy2-server/dist/modules/plugin/pluginList.js +17 -0
  146. package/packages/happy2-server/dist/modules/plugin/pluginList.js.map +1 -0
  147. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.d.ts +14 -0
  148. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.d.ts.map +1 -0
  149. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.js +51 -0
  150. package/packages/happy2-server/dist/modules/plugin/pluginRemoveMissingBuiltins.js.map +1 -0
  151. package/packages/happy2-server/dist/modules/plugin/runtime.d.ts +37 -0
  152. package/packages/happy2-server/dist/modules/plugin/runtime.d.ts.map +1 -0
  153. package/packages/happy2-server/dist/modules/plugin/runtime.js +62 -0
  154. package/packages/happy2-server/dist/modules/plugin/runtime.js.map +1 -0
  155. package/packages/happy2-server/dist/modules/plugin/secrets.d.ts +17 -0
  156. package/packages/happy2-server/dist/modules/plugin/secrets.d.ts.map +1 -0
  157. package/packages/happy2-server/dist/modules/plugin/secrets.js +56 -0
  158. package/packages/happy2-server/dist/modules/plugin/secrets.js.map +1 -0
  159. package/packages/happy2-server/dist/modules/plugin/secrets.test.d.ts +2 -0
  160. package/packages/happy2-server/dist/modules/plugin/secrets.test.d.ts.map +1 -0
  161. package/packages/happy2-server/dist/modules/plugin/secrets.test.js +14 -0
  162. package/packages/happy2-server/dist/modules/plugin/secrets.test.js.map +1 -0
  163. package/packages/happy2-server/dist/modules/plugin/service.d.ts +52 -0
  164. package/packages/happy2-server/dist/modules/plugin/service.d.ts.map +1 -0
  165. package/packages/happy2-server/dist/modules/plugin/service.js +538 -0
  166. package/packages/happy2-server/dist/modules/plugin/service.js.map +1 -0
  167. package/packages/happy2-server/dist/modules/plugin/types.d.ts +157 -0
  168. package/packages/happy2-server/dist/modules/plugin/types.d.ts.map +1 -0
  169. package/packages/happy2-server/dist/modules/plugin/types.js +9 -0
  170. package/packages/happy2-server/dist/modules/plugin/types.js.map +1 -0
  171. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.d.ts +19 -0
  172. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.d.ts.map +1 -0
  173. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.js +97 -0
  174. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.js.map +1 -0
  175. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.d.ts +2 -0
  176. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.d.ts.map +1 -0
  177. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.js +74 -0
  178. package/packages/happy2-server/dist/modules/plugin/utils/ndjsonStreamTransport.test.js.map +1 -0
  179. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.d.ts +29 -0
  180. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.d.ts.map +1 -0
  181. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.js +126 -0
  182. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.js.map +1 -0
  183. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.d.ts +2 -0
  184. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.d.ts.map +1 -0
  185. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.js +75 -0
  186. package/packages/happy2-server/dist/modules/plugin/utils/remoteMcpTransport.test.js.map +1 -0
  187. package/packages/happy2-server/dist/modules/sandbox/index.d.ts +1 -1
  188. package/packages/happy2-server/dist/modules/sandbox/index.d.ts.map +1 -1
  189. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.d.ts +2 -1
  190. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.d.ts.map +1 -1
  191. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.js +117 -3
  192. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.js.map +1 -1
  193. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.test.js +81 -2
  194. package/packages/happy2-server/dist/modules/sandbox/localOciSandboxProvider.test.js.map +1 -1
  195. package/packages/happy2-server/dist/modules/sandbox/types.d.ts +8 -0
  196. package/packages/happy2-server/dist/modules/sandbox/types.d.ts.map +1 -1
  197. package/packages/happy2-server/dist/modules/schema.d.ts +7486 -5588
  198. package/packages/happy2-server/dist/modules/schema.d.ts.map +1 -1
  199. package/packages/happy2-server/dist/modules/schema.js +72 -1
  200. package/packages/happy2-server/dist/modules/schema.js.map +1 -1
  201. package/packages/happy2-server/dist/modules/sync/syncGetDifference.d.ts.map +1 -1
  202. package/packages/happy2-server/dist/modules/sync/syncGetDifference.js +2 -0
  203. package/packages/happy2-server/dist/modules/sync/syncGetDifference.js.map +1 -1
  204. package/packages/happy2-server/dist/routes/plugins.d.ts +8 -0
  205. package/packages/happy2-server/dist/routes/plugins.d.ts.map +1 -0
  206. package/packages/happy2-server/dist/routes/plugins.js +186 -0
  207. package/packages/happy2-server/dist/routes/plugins.js.map +1 -0
  208. package/packages/happy2-server/dist/runner.js +45 -19
  209. package/packages/happy2-server/dist/runner.js.map +1 -1
  210. package/packages/happy2-server/dist/server.d.ts +6 -0
  211. package/packages/happy2-server/dist/server.d.ts.map +1 -1
  212. package/packages/happy2-server/dist/server.js +46 -3
  213. package/packages/happy2-server/dist/server.js.map +1 -1
  214. package/packages/happy2-server/dist/systemService.d.ts +48 -0
  215. package/packages/happy2-server/dist/systemService.d.ts.map +1 -0
  216. package/packages/happy2-server/dist/systemService.js +308 -0
  217. package/packages/happy2-server/dist/systemService.js.map +1 -0
  218. package/packages/happy2-server/dist/systemService.test.d.ts +2 -0
  219. package/packages/happy2-server/dist/systemService.test.d.ts.map +1 -0
  220. package/packages/happy2-server/dist/systemService.test.js +266 -0
  221. package/packages/happy2-server/dist/systemService.test.js.map +1 -0
  222. package/packages/happy2-server/dist/web/assets/index-9SGCQLg7.js +46 -0
  223. package/packages/happy2-server/dist/web/assets/{index-DZ1uRLgV.css → index-DWXBQDJB.css} +1 -1
  224. package/packages/happy2-server/dist/web/index.html +2 -2
  225. package/packages/happy2-server/drizzle/0020_plugins.sql +61 -0
  226. package/packages/happy2-server/drizzle/0021_plugin_function_results.sql +11 -0
  227. package/packages/happy2-server/drizzle/meta/_journal.json +14 -0
  228. package/packages/happy2-server/happy2.example.toml +5 -0
  229. package/packages/happy2-server/plugins/README.md +7 -0
  230. package/packages/happy2-server/plugins/hello/container/Dockerfile +6 -0
  231. package/packages/happy2-server/plugins/hello/plugin.json +16 -0
  232. package/packages/happy2-server/plugins/hello/plugin.png +0 -0
  233. package/packages/happy2-server/plugins/hello/server.mjs +75 -0
  234. package/packages/happy2-server/plugins/hello/skills/hello/SKILL.md +11 -0
  235. package/packages/happy2-server/dist/web/assets/index-DH1SOwNV.js +0 -46
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../sources/modules/integrations/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../sources/modules/integrations/transport.ts"],"names":[],"mappings":"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"}
@@ -126,10 +126,12 @@ export interface WebhookTransportRequest {
126
126
  }>;
127
127
  body: string;
128
128
  headers: Readonly<Record<string, string>>;
129
+ method?: "DELETE" | "POST";
129
130
  }
130
131
  export interface WebhookTransportResponse {
131
132
  statusCode: number;
132
133
  body?: string;
134
+ headers?: Readonly<Record<string, string>>;
133
135
  }
134
136
  export interface WebhookTransport {
135
137
  deliver(request: WebhookTransportRequest): Promise<WebhookTransportResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../sources/modules/integrations/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../sources/modules/integrations/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../sources/modules/integrations/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,KAAK;IACL,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;CACX,CAAC;AAIX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,eAAe;IACf,kBAAkB;IAClB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,YAAY;CACN,CAAC;AA6KX,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAE1B,IAAI;IADjB,YACa,IAA0B,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHN,IAAI;QAIb,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../sources/modules/integrations/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,KAAK;IACL,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;CACX,CAAC;AAIX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,eAAe;IACf,kBAAkB;IAClB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,YAAY;CACN,CAAC;AA+KX,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAE1B,IAAI;IADjB,YACa,IAA0B,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHN,IAAI;QAIb,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ"}
@@ -0,0 +1,13 @@
1
+ import type { PluginPackage } from "./types.js";
2
+ /** Immutable lookup over validated plugin packages supplied by the built-in catalog. */
3
+ export declare class PluginCatalog {
4
+ private readonly packages;
5
+ constructor(packages: readonly PluginPackage[]);
6
+ list(): PluginPackage[];
7
+ get(shortName: string): PluginPackage | undefined;
8
+ }
9
+ /** Loads and fully validates every child package in a built-in plugins directory. */
10
+ export declare function pluginCatalogLoad(root: string): Promise<PluginCatalog>;
11
+ /** Loads one built-in package while rejecting unsafe paths, malformed manifests, invalid skills, and non-square icons. */
12
+ export declare function pluginPackageLoad(directory: string, sourceReference?: string): Promise<PluginPackage>;
13
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/catalog.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGR,aAAa,EAGhB,MAAM,YAAY,CAAC;AA8BpB,wFAAwF;AACxF,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAE9D,YAAY,QAAQ,EAAE,SAAS,aAAa,EAAE,EAQ7C;IAED,IAAI,IAAI,aAAa,EAAE,CAItB;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEhD;CACJ;AAED,qFAAqF;AACrF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAc5E;AAED,0HAA0H;AAC1H,wBAAsB,iBAAiB,CACnC,SAAS,EAAE,MAAM,EACjB,eAAe,SAAsB,GACtC,OAAO,CAAC,aAAa,CAAC,CAsDxB"}
@@ -0,0 +1,359 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, readFile, readdir, realpath } from "node:fs/promises";
3
+ import { basename, join, relative, resolve, sep } from "node:path";
4
+ import sharp from "sharp";
5
+ import { rgbaToThumbHash } from "thumbhash";
6
+ import { parseDocument } from "yaml";
7
+ import { StrictWebhookUrlPolicy } from "../integrations/ssrf.js";
8
+ const MAX_PACKAGE_FILES = 1_000;
9
+ const MAX_PACKAGE_BYTES = 20 * 1024 * 1024;
10
+ const MAX_FILE_BYTES = 5 * 1024 * 1024;
11
+ const MAX_ICON_DIMENSION = 4_096;
12
+ const SHORT_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
13
+ const ENV_KEY = /^[A-Z_][A-Z0-9_]*$/;
14
+ const SKILL_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
15
+ const VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/;
16
+ const HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
17
+ const RESERVED_REMOTE_HEADERS = new Set([
18
+ "__proto__",
19
+ "accept",
20
+ "connection",
21
+ "constructor",
22
+ "content-length",
23
+ "content-type",
24
+ "host",
25
+ "mcp-protocol-version",
26
+ "proxy-authorization",
27
+ "prototype",
28
+ "te",
29
+ "trailer",
30
+ "transfer-encoding",
31
+ "upgrade",
32
+ "user-agent",
33
+ ]);
34
+ /** Immutable lookup over validated plugin packages supplied by the built-in catalog. */
35
+ export class PluginCatalog {
36
+ packages;
37
+ constructor(packages) {
38
+ const indexed = new Map();
39
+ for (const plugin of packages) {
40
+ if (indexed.has(plugin.manifest.shortName))
41
+ throw new Error(`Duplicate plugin shortName ${plugin.manifest.shortName}`);
42
+ indexed.set(plugin.manifest.shortName, plugin);
43
+ }
44
+ this.packages = indexed;
45
+ }
46
+ list() {
47
+ return [...this.packages.values()].sort((left, right) => left.manifest.displayName.localeCompare(right.manifest.displayName));
48
+ }
49
+ get(shortName) {
50
+ return this.packages.get(shortName);
51
+ }
52
+ }
53
+ /** Loads and fully validates every child package in a built-in plugins directory. */
54
+ export async function pluginCatalogLoad(root) {
55
+ let entries;
56
+ try {
57
+ entries = await readdir(root, { withFileTypes: true });
58
+ }
59
+ catch (error) {
60
+ if (error.code === "ENOENT")
61
+ return new PluginCatalog([]);
62
+ throw error;
63
+ }
64
+ const packages = await Promise.all(entries
65
+ .filter((entry) => entry.isDirectory())
66
+ .map((entry) => pluginPackageLoad(join(root, entry.name), entry.name)));
67
+ return new PluginCatalog(packages);
68
+ }
69
+ /** Loads one built-in package while rejecting unsafe paths, malformed manifests, invalid skills, and non-square icons. */
70
+ export async function pluginPackageLoad(directory, sourceReference = basename(directory)) {
71
+ const canonicalDirectory = await realpath(directory);
72
+ const files = await packageFiles(canonicalDirectory);
73
+ const manifestBuffer = files.get("plugin.json");
74
+ const iconBuffer = files.get("plugin.png");
75
+ if (!manifestBuffer)
76
+ throw new Error(`${sourceReference}: plugin.json is required`);
77
+ if (!iconBuffer)
78
+ throw new Error(`${sourceReference}: plugin.png is required`);
79
+ const manifest = manifestParse(manifestBuffer.toString("utf8"), sourceReference);
80
+ if (manifest.shortName !== sourceReference)
81
+ throw new Error(`${sourceReference}: shortName must match the package directory name`);
82
+ const iconImage = sharp(iconBuffer, { limitInputPixels: 16_777_216 });
83
+ const icon = await iconImage.metadata();
84
+ if (icon.format !== "png" ||
85
+ !icon.width ||
86
+ icon.width !== icon.height ||
87
+ icon.width > MAX_ICON_DIMENSION)
88
+ throw new Error(`${sourceReference}: plugin.png must be a square PNG up to 4096 pixels`);
89
+ const skills = await skillsParse(files, sourceReference);
90
+ if (!manifest.mcp && skills.length === 0)
91
+ throw new Error(`${sourceReference}: a plugin must contain at least one skill or MCP server`);
92
+ if (manifest.mcp?.type === "stdio" && manifest.mcp.container)
93
+ requirePackageFile(files, manifest.mcp.container.dockerfile, sourceReference);
94
+ const thumbhashInput = await iconImage
95
+ .clone()
96
+ .resize(100, 100, { fit: "inside", withoutEnlargement: true })
97
+ .ensureAlpha()
98
+ .raw()
99
+ .toBuffer({ resolveWithObject: true });
100
+ return {
101
+ manifest,
102
+ skills,
103
+ directory: canonicalDirectory,
104
+ iconPath: join(canonicalDirectory, "plugin.png"),
105
+ image: {
106
+ contentType: "image/png",
107
+ size: iconBuffer.byteLength,
108
+ width: icon.width,
109
+ height: icon.height,
110
+ thumbhash: Buffer.from(rgbaToThumbHash(thumbhashInput.info.width, thumbhashInput.info.height, thumbhashInput.data)).toString("base64url"),
111
+ checksumSha256: createHash("sha256").update(iconBuffer).digest("hex"),
112
+ },
113
+ packageDigest: digest(files),
114
+ source: { kind: "builtin", reference: sourceReference },
115
+ };
116
+ }
117
+ async function packageFiles(directory) {
118
+ const result = new Map();
119
+ let totalBytes = 0;
120
+ const visit = async (current) => {
121
+ const entries = await readdir(current, { withFileTypes: true });
122
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
123
+ const path = join(current, entry.name);
124
+ const info = await lstat(path);
125
+ if (info.isSymbolicLink())
126
+ throw new Error(`Plugin packages may not contain symlinks: ${path}`);
127
+ if (info.isDirectory()) {
128
+ await visit(path);
129
+ continue;
130
+ }
131
+ if (!info.isFile())
132
+ throw new Error(`Plugin packages may contain only files: ${path}`);
133
+ if (info.size > MAX_FILE_BYTES)
134
+ throw new Error(`Plugin package file is too large: ${path}`);
135
+ if (result.size >= MAX_PACKAGE_FILES)
136
+ throw new Error("Plugin package has too many files");
137
+ totalBytes += info.size;
138
+ if (totalBytes > MAX_PACKAGE_BYTES)
139
+ throw new Error("Plugin package is too large");
140
+ const name = relative(directory, path).split(sep).join("/");
141
+ result.set(name, await readFile(path));
142
+ }
143
+ };
144
+ await visit(directory);
145
+ return result;
146
+ }
147
+ function manifestParse(source, label) {
148
+ let value;
149
+ try {
150
+ value = JSON.parse(source);
151
+ }
152
+ catch {
153
+ throw new Error(`${label}: plugin.json must contain valid JSON`);
154
+ }
155
+ const record = object(value, `${label}: plugin.json`);
156
+ only(record, [
157
+ "schemaVersion",
158
+ "version",
159
+ "displayName",
160
+ "shortName",
161
+ "description",
162
+ "variables",
163
+ "mcp",
164
+ ]);
165
+ if (record.schemaVersion !== 1)
166
+ throw new Error(`${label}: schemaVersion must be 1`);
167
+ const version = string(record.version, "version", 64);
168
+ const versionMatch = VERSION.exec(version);
169
+ if (!versionMatch ||
170
+ versionMatch[4]
171
+ ?.split(".")
172
+ .some((identifier) => /^\d+$/.test(identifier) && identifier.length > 1 && identifier.startsWith("0")))
173
+ throw new Error(`${label}: version must be a valid SemVer version`);
174
+ const shortName = string(record.shortName, "shortName", 64);
175
+ if (!SHORT_NAME.test(shortName))
176
+ throw new Error(`${label}: shortName is invalid`);
177
+ const variables = variableDefinitions(record.variables, label);
178
+ const parsedMcp = record.mcp === undefined ? undefined : mcp(record.mcp, variables, label);
179
+ if (!parsedMcp && variables.length)
180
+ throw new Error(`${label}: variables require an MCP server definition`);
181
+ return {
182
+ schemaVersion: 1,
183
+ version,
184
+ displayName: string(record.displayName, "displayName", 100),
185
+ shortName,
186
+ description: string(record.description, "description", 1_000),
187
+ variables,
188
+ ...(parsedMcp ? { mcp: parsedMcp } : {}),
189
+ };
190
+ }
191
+ function variableDefinitions(value, label) {
192
+ if (value === undefined)
193
+ return [];
194
+ if (!Array.isArray(value) || value.length > 64)
195
+ throw new Error(`${label}: variables must be an array with at most 64 entries`);
196
+ const seen = new Set();
197
+ return value.map((item, index) => {
198
+ const record = object(item, `variables[${index}]`);
199
+ only(record, ["key", "displayName", "description", "kind"]);
200
+ const key = string(record.key, `variables[${index}].key`, 128);
201
+ if (!ENV_KEY.test(key))
202
+ throw new Error(`${label}: variable key ${key} is invalid`);
203
+ if (seen.has(key))
204
+ throw new Error(`${label}: duplicate variable key ${key}`);
205
+ seen.add(key);
206
+ if (record.kind !== "text" && record.kind !== "secret")
207
+ throw new Error(`${label}: variable ${key} kind must be text or secret`);
208
+ return {
209
+ key,
210
+ displayName: string(record.displayName, `${key}.displayName`, 100),
211
+ description: string(record.description, `${key}.description`, 1_000),
212
+ kind: record.kind,
213
+ };
214
+ });
215
+ }
216
+ function mcp(value, variables, label) {
217
+ const record = object(value, "mcp");
218
+ if (record.type === "stdio") {
219
+ only(record, ["type", "command", "args", "container"]);
220
+ const container = record.container === undefined ? undefined : object(record.container, "mcp.container");
221
+ if (container)
222
+ only(container, ["dockerfile"]);
223
+ return {
224
+ type: "stdio",
225
+ command: string(record.command, "mcp.command", 1_000),
226
+ args: stringArray(record.args, "mcp.args", 128, 4_096),
227
+ ...(container
228
+ ? {
229
+ container: {
230
+ dockerfile: relativePath(container.dockerfile, "mcp.container.dockerfile"),
231
+ },
232
+ }
233
+ : {}),
234
+ };
235
+ }
236
+ if (record.type === "remote") {
237
+ only(record, ["type", "url", "headers"]);
238
+ const url = string(record.url, "mcp.url", 4_096);
239
+ let normalizedUrl;
240
+ try {
241
+ normalizedUrl = new StrictWebhookUrlPolicy().validateForStorage(url);
242
+ }
243
+ catch (error) {
244
+ throw new Error(`${label}: ${error instanceof Error ? error.message : "remote MCP URL is invalid"}`);
245
+ }
246
+ const headersRecord = record.headers === undefined ? {} : object(record.headers, "mcp.headers");
247
+ const headers = Object.create(null);
248
+ const headerNames = new Set();
249
+ const declared = new Set(variables.map(({ key }) => key));
250
+ const referenced = new Set();
251
+ for (const [key, raw] of Object.entries(headersRecord)) {
252
+ if (!HEADER_NAME.test(key))
253
+ throw new Error(`${label}: invalid MCP header name ${key}`);
254
+ const normalizedKey = key.toLowerCase();
255
+ if (RESERVED_REMOTE_HEADERS.has(normalizedKey))
256
+ throw new Error(`${label}: MCP header ${key} is managed by Happy`);
257
+ if (headerNames.has(normalizedKey))
258
+ throw new Error(`${label}: duplicate MCP header name ${key}`);
259
+ headerNames.add(normalizedKey);
260
+ const template = string(raw, `mcp.headers.${key}`, 8_192, false);
261
+ if (/\r|\n/.test(template))
262
+ throw new Error(`${label}: MCP header values may not contain newlines`);
263
+ for (const match of template.matchAll(/\$\{([^}]+)\}/g))
264
+ if (!declared.has(match[1]))
265
+ throw new Error(`${label}: MCP header ${key} references undeclared variable ${match[1]}`);
266
+ else
267
+ referenced.add(match[1]);
268
+ headers[key] = template;
269
+ }
270
+ const unused = variables.find(({ key }) => !referenced.has(key));
271
+ if (unused)
272
+ throw new Error(`${label}: remote MCP variable ${unused.key} is not used by a header template`);
273
+ return { type: "remote", url: normalizedUrl, headers };
274
+ }
275
+ throw new Error(`${label}: mcp.type must be stdio or remote`);
276
+ }
277
+ async function skillsParse(files, label) {
278
+ const skillFiles = [...files.keys()].filter((name) => /^skills\/[^/]+\/SKILL\.md$/.test(name));
279
+ const unexpected = [...files.keys()].find((name) => name.startsWith("skills/") && name.split("/").length < 3);
280
+ if (unexpected)
281
+ throw new Error(`${label}: skill files must live below skills/<name>/`);
282
+ const skillDirectories = new Set([...files.keys()]
283
+ .filter((name) => name.startsWith("skills/"))
284
+ .map((name) => name.split("/")[1])
285
+ .filter(Boolean));
286
+ for (const directory of skillDirectories)
287
+ if (!skillFiles.includes(`skills/${directory}/SKILL.md`))
288
+ throw new Error(`${label}: skills/${directory}/SKILL.md is required`);
289
+ return skillFiles.sort().map((path) => {
290
+ const directory = path.split("/")[1];
291
+ if (!SKILL_NAME.test(directory))
292
+ throw new Error(`${label}: invalid skill directory ${directory}`);
293
+ const source = files.get(path).toString("utf8");
294
+ const match = source.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
295
+ if (!match)
296
+ throw new Error(`${label}: ${path} requires YAML frontmatter`);
297
+ const document = parseDocument(match[1], { uniqueKeys: true });
298
+ if (document.errors.length)
299
+ throw new Error(`${label}: ${path} has invalid YAML frontmatter`);
300
+ const frontmatter = object(document.toJSON(), `${path} frontmatter`);
301
+ const name = string(frontmatter.name, `${path} name`, 64);
302
+ const description = string(frontmatter.description, `${path} description`, 1_024);
303
+ if (name !== directory)
304
+ throw new Error(`${label}: ${path} name must match its parent directory`);
305
+ if (!SKILL_NAME.test(name))
306
+ throw new Error(`${label}: ${path} has an invalid skill name`);
307
+ return { name, description, directory: `skills/${directory}` };
308
+ });
309
+ }
310
+ function requirePackageFile(files, path, label) {
311
+ if (!files.has(path))
312
+ throw new Error(`${label}: referenced package file ${path} does not exist`);
313
+ }
314
+ function relativePath(value, name) {
315
+ const path = string(value, name, 1_000);
316
+ const normalized = path.replaceAll("\\", "/");
317
+ if (normalized.startsWith("/") ||
318
+ normalized.split("/").some((part) => !part || part === "." || part === "..") ||
319
+ resolve("/plugin", normalized).split(sep).join("/").startsWith("/plugin/") === false)
320
+ throw new Error(`${name} must be a safe package-relative path`);
321
+ return normalized;
322
+ }
323
+ function digest(files) {
324
+ const hash = createHash("sha256");
325
+ for (const [name, contents] of [...files.entries()].sort(([a], [b]) => a.localeCompare(b))) {
326
+ hash.update(name, "utf8");
327
+ hash.update("\0");
328
+ hash.update(String(contents.byteLength), "utf8");
329
+ hash.update("\0");
330
+ hash.update(contents);
331
+ }
332
+ return `sha256:${hash.digest("hex")}`;
333
+ }
334
+ function object(value, name) {
335
+ if (!value || typeof value !== "object" || Array.isArray(value))
336
+ throw new Error(`${name} must be an object`);
337
+ return value;
338
+ }
339
+ function only(value, allowed) {
340
+ const unexpected = Object.keys(value).find((key) => !allowed.includes(key));
341
+ if (unexpected)
342
+ throw new Error(`Unexpected field ${unexpected}`);
343
+ }
344
+ function string(value, name, maximum, trim = true) {
345
+ if (typeof value !== "string")
346
+ throw new Error(`${name} must be a string`);
347
+ const normalized = trim ? value.trim() : value;
348
+ if (!normalized || normalized.length > maximum || normalized.includes("\u0000"))
349
+ throw new Error(`${name} must contain between 1 and ${maximum} characters`);
350
+ return normalized;
351
+ }
352
+ function stringArray(value, name, maximumItems, maximumLength) {
353
+ if (value === undefined)
354
+ return [];
355
+ if (!Array.isArray(value) || value.length > maximumItems)
356
+ throw new Error(`${name} must be an array with at most ${maximumItems} entries`);
357
+ return value.map((item, index) => string(item, `${name}[${index}]`, maximumLength, false));
358
+ }
359
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../sources/modules/plugin/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=catalog.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.test.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/catalog.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import { mkdtemp, mkdir, readFile, realpath, rm, symlink, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { basename, join } from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { pluginCatalogLoad, pluginPackageLoad } from "./catalog.js";
6
+ import { PluginPackageStore } from "./packageStore.js";
7
+ const SQUARE_PNG = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=", "base64");
8
+ const directories = [];
9
+ afterEach(async () => {
10
+ await Promise.all(directories.splice(0).map((directory) => rm(directory, { force: true, recursive: true })));
11
+ });
12
+ describe("plugin package catalog", () => {
13
+ it("loads a spec-shaped skill and verifies an immutable installed snapshot", async () => {
14
+ const root = await temporaryDirectory();
15
+ const plugin = await packageDirectory(root, "search-tools");
16
+ await mkdir(join(plugin, "skills", "project-search", "references"), { recursive: true });
17
+ await writeFile(join(plugin, "skills", "project-search", "SKILL.md"), "---\nname: project-search\ndescription: Search the current project and its documentation.\n---\n\nSearch carefully.\n");
18
+ await writeFile(join(plugin, "skills", "project-search", "references", "syntax.md"), "# Syntax\n");
19
+ await manifest(plugin, { variables: [], version: "1.0.0+unit.1" });
20
+ const catalog = await pluginCatalogLoad(root);
21
+ const loaded = catalog.get("search-tools");
22
+ expect(loaded.skills).toEqual([
23
+ {
24
+ name: "project-search",
25
+ description: "Search the current project and its documentation.",
26
+ directory: "skills/project-search",
27
+ },
28
+ ]);
29
+ expect(loaded.packageDigest).toMatch(/^sha256:[a-f0-9]{64}$/);
30
+ expect(loaded.image).toMatchObject({
31
+ contentType: "image/png",
32
+ width: 1,
33
+ height: 1,
34
+ size: SQUARE_PNG.byteLength,
35
+ thumbhash: expect.any(String),
36
+ checksumSha256: expect.stringMatching(/^[a-f0-9]{64}$/),
37
+ });
38
+ const installedRoot = await temporaryDirectory();
39
+ const store = new PluginPackageStore(installedRoot);
40
+ const installed = await store.install(loaded, "cmockplugin");
41
+ const snapshot = installed.packageDirectory;
42
+ expect(snapshot).toBe(join(await realpath(installedRoot), "cmockplugin"));
43
+ expect(installed.imageStorageKey).toBe("cmockplugin/plugin.png");
44
+ const copied = await pluginPackageLoad(snapshot, "search-tools");
45
+ expect(copied.packageDigest).toBe(loaded.packageDigest);
46
+ const copiedManifest = JSON.parse(await readFile(join(snapshot, "plugin.json"), "utf8"));
47
+ expect(copiedManifest.shortName).toBe("search-tools");
48
+ await expect(store.verify("cmockplugin", snapshot, "search-tools", loaded.packageDigest)).resolves.toBeUndefined();
49
+ await expect(store.readImage("cmockplugin", snapshot, installed.imageStorageKey, "search-tools", loaded.packageDigest)).resolves.toEqual(SQUARE_PNG);
50
+ await expect(store.install(loaded, "cmockplugin")).resolves.toEqual(installed);
51
+ await writeFile(join(snapshot, "unexpected.txt"), "tampered");
52
+ await expect(store.install(loaded, "cmockplugin")).rejects.toThrow("no longer matches its recorded digest");
53
+ await expect(store.verify("cmockplugin", snapshot, "search-tools", loaded.packageDigest)).rejects.toThrow("no longer matches its recorded digest");
54
+ await rm(snapshot, { force: true, recursive: true });
55
+ await symlink(loaded.directory, snapshot);
56
+ await expect(store.verify("cmockplugin", snapshot, "search-tools", loaded.packageDigest)).rejects.toThrow("outside the plugin package store");
57
+ });
58
+ it("rejects skill directories without SKILL.md, undeclared header variables, and symlinks", async () => {
59
+ const missingSkillRoot = await temporaryDirectory();
60
+ const missingSkill = await packageDirectory(missingSkillRoot, "missing-skill");
61
+ await mkdir(join(missingSkill, "skills", "orphan", "references"), { recursive: true });
62
+ await writeFile(join(missingSkill, "skills", "orphan", "references", "notes.md"), "x");
63
+ await manifest(missingSkill, { variables: [] });
64
+ await expect(pluginCatalogLoad(missingSkillRoot)).rejects.toThrow("skills/orphan/SKILL.md is required");
65
+ const headerRoot = await temporaryDirectory();
66
+ const header = await packageDirectory(headerRoot, "bad-header");
67
+ await manifest(header, {
68
+ variables: [],
69
+ mcp: {
70
+ type: "remote",
71
+ url: "https://mcp.example.com/mcp",
72
+ headers: { authorization: "Bearer ${UNDECLARED}" },
73
+ },
74
+ });
75
+ await expect(pluginCatalogLoad(headerRoot)).rejects.toThrow("references undeclared variable UNDECLARED");
76
+ const unusedVariableRoot = await temporaryDirectory();
77
+ const unusedVariable = await packageDirectory(unusedVariableRoot, "unused-variable");
78
+ await manifest(unusedVariable, {
79
+ variables: [variable("REMOTE_TOKEN")],
80
+ mcp: {
81
+ type: "remote",
82
+ url: "https://mcp.example.com/mcp",
83
+ headers: { authorization: "Static value" },
84
+ },
85
+ });
86
+ await expect(pluginCatalogLoad(unusedVariableRoot)).rejects.toThrow("remote MCP variable REMOTE_TOKEN is not used");
87
+ const privateRemoteRoot = await temporaryDirectory();
88
+ const privateRemote = await packageDirectory(privateRemoteRoot, "private-remote");
89
+ await manifest(privateRemote, {
90
+ variables: [],
91
+ mcp: { type: "remote", url: "https://localhost/mcp", headers: {} },
92
+ });
93
+ await expect(pluginCatalogLoad(privateRemoteRoot)).rejects.toThrow("hostname is not public");
94
+ const symlinkRoot = await temporaryDirectory();
95
+ const linked = await packageDirectory(symlinkRoot, "linked-package");
96
+ await writeFile(join(symlinkRoot, "outside.txt"), "outside");
97
+ await symlink(join(symlinkRoot, "outside.txt"), join(linked, "linked.txt"));
98
+ await manifest(linked, { variables: [], mcp: stdioMcp() });
99
+ await expect(pluginCatalogLoad(symlinkRoot)).rejects.toThrow("Plugin packages may not contain symlinks");
100
+ const versionRoot = await temporaryDirectory();
101
+ const versioned = await packageDirectory(versionRoot, "bad-version");
102
+ await manifest(versioned, { variables: [], version: "1.0.0-01", mcp: stdioMcp() });
103
+ await expect(pluginCatalogLoad(versionRoot)).rejects.toThrow("version must be a valid SemVer version");
104
+ });
105
+ });
106
+ async function temporaryDirectory() {
107
+ const directory = await mkdtemp(join(tmpdir(), "happy2-plugin-unit-"));
108
+ directories.push(directory);
109
+ return directory;
110
+ }
111
+ async function packageDirectory(root, shortName) {
112
+ const directory = join(root, shortName);
113
+ await mkdir(directory, { recursive: true });
114
+ await writeFile(join(directory, "plugin.png"), SQUARE_PNG);
115
+ return directory;
116
+ }
117
+ async function manifest(directory, additions) {
118
+ const shortName = basename(directory);
119
+ await writeFile(join(directory, "plugin.json"), JSON.stringify({
120
+ schemaVersion: 1,
121
+ version: "1.0.0",
122
+ displayName: shortName,
123
+ shortName,
124
+ description: `Plugin package ${shortName}.`,
125
+ ...additions,
126
+ }));
127
+ }
128
+ function stdioMcp() {
129
+ return { type: "stdio", command: "server", args: [] };
130
+ }
131
+ function variable(key) {
132
+ return {
133
+ key,
134
+ displayName: key,
135
+ description: `Configuration for ${key}.`,
136
+ kind: "secret",
137
+ };
138
+ }
139
+ //# sourceMappingURL=catalog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.test.js","sourceRoot":"","sources":["../../../sources/modules/plugin/catalog.test.ts"],"names":[],"mappings":"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"}