@agenthippo-ai/agenthippo 0.1.0

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 (480) hide show
  1. package/LICENSE +21 -0
  2. package/bin/agenthippo.js +2 -0
  3. package/out/agentpack/github.js +547 -0
  4. package/out/agentpack/index.js +66 -0
  5. package/out/agentpack/install.js +297 -0
  6. package/out/agentpack/manager.js +441 -0
  7. package/out/agentpack/manifest.js +135 -0
  8. package/out/agentpack/paths.js +475 -0
  9. package/out/agentpack/publish.js +248 -0
  10. package/out/agentpack/stores.js +554 -0
  11. package/out/agentpack/types.js +5 -0
  12. package/out/analytics/dashboard/artifactManager.js +439 -0
  13. package/out/analytics/dashboard/fleetDisplayUtils.js +159 -0
  14. package/out/analytics/dashboard/fleetOrchestrator.js +142 -0
  15. package/out/analytics/dashboard/fleetRegistry.js +79 -0
  16. package/out/analytics/dashboard/fleetRowDefaults.js +87 -0
  17. package/out/analytics/dashboard/fleetScriptAdapter.js +146 -0
  18. package/out/analytics/dashboard/fleetStatusUtils.js +30 -0
  19. package/out/analytics/dashboard/fleetTitleUtils.js +68 -0
  20. package/out/analytics/dashboard/fleetTypes.js +29 -0
  21. package/out/analytics/dashboard/index.js +17 -0
  22. package/out/analytics/dashboard/indexingService.js +422 -0
  23. package/out/analytics/dashboard/localFleetAdapter.js +222 -0
  24. package/out/analytics/dashboard/performanceMonitor.js +76 -0
  25. package/out/analytics/dashboard/processManager.js +209 -0
  26. package/out/analytics/dashboard/provider.js +3885 -0
  27. package/out/analytics/dashboard/queryRunner.js +994 -0
  28. package/out/analytics/dashboard/refreshPolicy.js +16 -0
  29. package/out/analytics/dashboard/scheduledFleetFingerprint.js +22 -0
  30. package/out/analytics/dashboard/scheduledFleetStorage.js +241 -0
  31. package/out/analytics/dashboard/scheduledFleetUtils.js +22 -0
  32. package/out/analytics/dashboard/sessionEventFleetStats.js +118 -0
  33. package/out/analytics/dashboard/sessionJsonlFleet.js +204 -0
  34. package/out/analytics/dashboard/teamViewDiscovery.js +106 -0
  35. package/out/analytics/dashboard/viewsConfigMerge.js +221 -0
  36. package/out/analytics/dashboard/webview/analytics-panel.html +155 -0
  37. package/out/analytics/dashboard/webview/codicon.ttf +0 -0
  38. package/out/analytics/dashboard/webview/index.html +78 -0
  39. package/out/analytics/dashboard/webview/panel.js +2295 -0
  40. package/out/analytics/dashboard/webview/runtime-bridge.js +82 -0
  41. package/out/analytics/dashboard/webview/styles.css +1009 -0
  42. package/out/analytics/lifecycle.js +43 -0
  43. package/out/analytics/service.js +1279 -0
  44. package/out/analytics/sessionEvents.js +231 -0
  45. package/out/auth/bootstrapApply.js +72 -0
  46. package/out/auth/brokerClient.js +126 -0
  47. package/out/auth/callbackUri.js +59 -0
  48. package/out/auth/callbackUriParse.js +59 -0
  49. package/out/auth/githubStoreGate.js +70 -0
  50. package/out/auth/loopbackAuthServer.js +165 -0
  51. package/out/auth/pkce.js +9 -0
  52. package/out/auth/provider.js +239 -0
  53. package/out/auth/sessionStore.js +193 -0
  54. package/out/auth/signInFlow.js +182 -0
  55. package/out/auth/types.js +12 -0
  56. package/out/auth-broker/config.js +62 -0
  57. package/out/auth-broker/jwt.js +105 -0
  58. package/out/auth-broker/pkce.js +57 -0
  59. package/out/auth-broker/server.js +539 -0
  60. package/out/auth-broker/store.js +273 -0
  61. package/out/base-prompts/gateway/openclaw-starter.json5 +144 -0
  62. package/out/base-prompts/gateway/slack-socket-mode-minimal.manifest.json +44 -0
  63. package/out/base-prompts/mcp-servers/.mcp.json +13 -0
  64. package/out/base-prompts/mcp-servers/langfuse-analytics/README.md +142 -0
  65. package/out/base-prompts/mcp-servers/langfuse-analytics/mcp.json +13 -0
  66. package/out/base-prompts/mcp-servers/langfuse-analytics/package-lock.json +1192 -0
  67. package/out/base-prompts/mcp-servers/langfuse-analytics/package.json +23 -0
  68. package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/run-with-env.sh +12 -0
  69. package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/sdk-test.js +102 -0
  70. package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/simple-test.js +137 -0
  71. package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/test-client.js +118 -0
  72. package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/test-server.js +209 -0
  73. package/out/base-prompts/mcp-servers/langfuse-analytics/src/client.ts +431 -0
  74. package/out/base-prompts/mcp-servers/langfuse-analytics/src/index.ts +270 -0
  75. package/out/base-prompts/mcp-servers/langfuse-analytics/tsconfig.json +18 -0
  76. package/out/base-prompts/rules/AGENTS.md +204 -0
  77. package/out/base-prompts/skills/agent-browser/SKILL.md +102 -0
  78. package/out/base-prompts/skills/agent-builder/SKILL.md +73 -0
  79. package/out/base-prompts/skills/agent-builder/references/agent-pack.md +63 -0
  80. package/out/base-prompts/skills/agent-builder/references/crewai.md +66 -0
  81. package/out/base-prompts/skills/agent-builder/references/langchain.md +60 -0
  82. package/out/base-prompts/skills/agent-builder/references/raw-sdk.md +73 -0
  83. package/out/base-prompts/skills/agent-engine-creator/SKILL.md +586 -0
  84. package/out/base-prompts/skills/agent-engine-installer/SKILL.md +106 -0
  85. package/out/base-prompts/skills/agent-engine-installer/scripts/install-engine.mjs +259 -0
  86. package/out/base-prompts/skills/agent-engine-installer/scripts/install-engine.ps1 +189 -0
  87. package/out/base-prompts/skills/agenthippo-cli/SKILL.md +69 -0
  88. package/out/base-prompts/skills/agenthippo-cli/scripts/install.sh +63 -0
  89. package/out/base-prompts/skills/agentpack-creator/SKILL.md +375 -0
  90. package/out/base-prompts/skills/agentpack-creator/references/agent-templates.md +261 -0
  91. package/out/base-prompts/skills/agentpack-creator/references/agents-md-guide.md +195 -0
  92. package/out/base-prompts/skills/agentpack-creator/scripts/init_pack.py +391 -0
  93. package/out/base-prompts/skills/agentpack-creator/scripts/init_pack_test.py +294 -0
  94. package/out/base-prompts/skills/agentpack-testbench/SKILL.md +135 -0
  95. package/out/base-prompts/skills/algorithmic-art/LICENSE.txt +202 -0
  96. package/out/base-prompts/skills/algorithmic-art/SKILL.md +405 -0
  97. package/out/base-prompts/skills/algorithmic-art/templates/generator_template.js +223 -0
  98. package/out/base-prompts/skills/algorithmic-art/templates/viewer.html +599 -0
  99. package/out/base-prompts/skills/debug-agent/SKILL.md +83 -0
  100. package/out/base-prompts/skills/desktop-automation/SKILL.md +166 -0
  101. package/out/base-prompts/skills/desktop-automation/references/agenthippo-ui-recipes.md +441 -0
  102. package/out/base-prompts/skills/desktop-automation/scripts/windows-desktop-uia.psm1 +280 -0
  103. package/out/base-prompts/skills/docx/LICENSE.txt +30 -0
  104. package/out/base-prompts/skills/docx/SKILL.md +197 -0
  105. package/out/base-prompts/skills/docx/docx-js.md +350 -0
  106. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  107. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  108. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  109. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  110. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  111. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  112. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  113. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  114. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  115. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  116. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  117. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  118. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  119. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  120. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  121. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  122. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  123. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  124. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  125. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  126. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  127. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  128. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  129. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  130. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  131. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  132. package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  133. package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  134. package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  135. package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  136. package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  137. package/out/base-prompts/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  138. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  139. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  140. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  141. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  142. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  143. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  144. package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  145. package/out/base-prompts/skills/docx/ooxml/scripts/pack.py +159 -0
  146. package/out/base-prompts/skills/docx/ooxml/scripts/unpack.py +29 -0
  147. package/out/base-prompts/skills/docx/ooxml/scripts/validate.py +69 -0
  148. package/out/base-prompts/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  149. package/out/base-prompts/skills/docx/ooxml/scripts/validation/base.py +951 -0
  150. package/out/base-prompts/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  151. package/out/base-prompts/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  152. package/out/base-prompts/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  153. package/out/base-prompts/skills/docx/ooxml.md +610 -0
  154. package/out/base-prompts/skills/docx/scripts/__init__.py +1 -0
  155. package/out/base-prompts/skills/docx/scripts/document.py +1276 -0
  156. package/out/base-prompts/skills/docx/scripts/templates/comments.xml +3 -0
  157. package/out/base-prompts/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  158. package/out/base-prompts/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  159. package/out/base-prompts/skills/docx/scripts/templates/commentsIds.xml +3 -0
  160. package/out/base-prompts/skills/docx/scripts/templates/people.xml +3 -0
  161. package/out/base-prompts/skills/docx/scripts/utilities.py +374 -0
  162. package/out/base-prompts/skills/gateway-outbound/SKILL.md +136 -0
  163. package/out/base-prompts/skills/mcp-builder/LICENSE.txt +202 -0
  164. package/out/base-prompts/skills/mcp-builder/SKILL.md +328 -0
  165. package/out/base-prompts/skills/mcp-builder/reference/evaluation.md +602 -0
  166. package/out/base-prompts/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  167. package/out/base-prompts/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  168. package/out/base-prompts/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  169. package/out/base-prompts/skills/mcp-builder/scripts/connections.py +151 -0
  170. package/out/base-prompts/skills/mcp-builder/scripts/evaluation.py +373 -0
  171. package/out/base-prompts/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  172. package/out/base-prompts/skills/mcp-builder/scripts/requirements.txt +2 -0
  173. package/out/base-prompts/skills/openclaw/SKILL.md +406 -0
  174. package/out/base-prompts/skills/openclaw/scripts/run-smoke.sh +61 -0
  175. package/out/base-prompts/skills/pdf/LICENSE.txt +30 -0
  176. package/out/base-prompts/skills/pdf/SKILL.md +294 -0
  177. package/out/base-prompts/skills/pdf/forms.md +205 -0
  178. package/out/base-prompts/skills/pdf/reference.md +612 -0
  179. package/out/base-prompts/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  180. package/out/base-prompts/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  181. package/out/base-prompts/skills/pdf/scripts/check_fillable_fields.py +12 -0
  182. package/out/base-prompts/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  183. package/out/base-prompts/skills/pdf/scripts/create_validation_image.py +41 -0
  184. package/out/base-prompts/skills/pdf/scripts/extract_form_field_info.py +152 -0
  185. package/out/base-prompts/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  186. package/out/base-prompts/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  187. package/out/base-prompts/skills/pptx/LICENSE.txt +30 -0
  188. package/out/base-prompts/skills/pptx/SKILL.md +484 -0
  189. package/out/base-prompts/skills/pptx/html2pptx.md +625 -0
  190. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  191. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  192. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  193. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  194. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  195. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  196. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  197. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  198. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  199. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  200. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  201. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  202. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  203. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  204. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  205. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  206. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  207. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  208. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  209. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  210. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  211. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  212. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  213. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  214. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  215. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  216. package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  217. package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  218. package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  219. package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  220. package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  221. package/out/base-prompts/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  222. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  223. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  224. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  225. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  226. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  227. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  228. package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  229. package/out/base-prompts/skills/pptx/ooxml/scripts/pack.py +159 -0
  230. package/out/base-prompts/skills/pptx/ooxml/scripts/unpack.py +29 -0
  231. package/out/base-prompts/skills/pptx/ooxml/scripts/validate.py +69 -0
  232. package/out/base-prompts/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  233. package/out/base-prompts/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  234. package/out/base-prompts/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  235. package/out/base-prompts/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  236. package/out/base-prompts/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  237. package/out/base-prompts/skills/pptx/ooxml.md +427 -0
  238. package/out/base-prompts/skills/pptx/scripts/html2pptx.js +984 -0
  239. package/out/base-prompts/skills/pptx/scripts/inventory.py +1020 -0
  240. package/out/base-prompts/skills/pptx/scripts/rearrange.py +231 -0
  241. package/out/base-prompts/skills/pptx/scripts/replace.py +385 -0
  242. package/out/base-prompts/skills/pptx/scripts/thumbnail.py +450 -0
  243. package/out/base-prompts/skills/prompt-lab/SKILL.md +149 -0
  244. package/out/base-prompts/skills/prompt-lab/scripts/query-analytics.sh +2551 -0
  245. package/out/base-prompts/skills/skill-creator/LICENSE.txt +202 -0
  246. package/out/base-prompts/skills/skill-creator/SKILL.md +371 -0
  247. package/out/base-prompts/skills/skill-creator/references/output-patterns.md +82 -0
  248. package/out/base-prompts/skills/skill-creator/references/workflows.md +28 -0
  249. package/out/base-prompts/skills/skill-creator/scripts/init_skill.py +303 -0
  250. package/out/base-prompts/skills/skill-creator/scripts/package_skill.py +110 -0
  251. package/out/base-prompts/skills/skill-creator/scripts/quick_validate.py +95 -0
  252. package/out/base-prompts/skills/skill-installer/SKILL.md +251 -0
  253. package/out/base-prompts/skills/skill-installer/references/store-api.md +219 -0
  254. package/out/base-prompts/skills/spotlight-dashboard/SKILL.md +83 -0
  255. package/out/base-prompts/skills/spotlight-insights/SKILL.md +101 -0
  256. package/out/base-prompts/skills/spotlight-optimize/SKILL.md +93 -0
  257. package/out/base-prompts/skills/spotlight-optimize/scripts/query-analytics.sh +2551 -0
  258. package/out/base-prompts/skills/spotlight-query/SKILL.md +314 -0
  259. package/out/base-prompts/skills/spotlight-query/references/otel-schema.md +163 -0
  260. package/out/base-prompts/skills/spotlight-query/scripts/query-analytics.sh +2551 -0
  261. package/out/base-prompts/skills/spotlight-query/scripts/query-analytics.test.sh +744 -0
  262. package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/sessions/sess-test-1.jsonl +14 -0
  263. package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/traces/.duckdb-index.json +7 -0
  264. package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/traces/sample.jsonl +5 -0
  265. package/out/base-prompts/skills/spotlight-report/SKILL.md +86 -0
  266. package/out/base-prompts/skills/spotlight-visualize/SKILL.md +92 -0
  267. package/out/base-prompts/skills/spotlight-visualize/scripts/query-analytics.sh +2551 -0
  268. package/out/base-prompts/skills/xlsx/LICENSE.txt +30 -0
  269. package/out/base-prompts/skills/xlsx/SKILL.md +289 -0
  270. package/out/base-prompts/skills/xlsx/recalc.py +178 -0
  271. package/out/branding.js +23 -0
  272. package/out/cli/commands/anywhere.js +66 -0
  273. package/out/cli/commands/ask.js +243 -0
  274. package/out/cli/commands/auth-broker.js +24 -0
  275. package/out/cli/commands/auth.js +219 -0
  276. package/out/cli/commands/chat.js +354 -0
  277. package/out/cli/commands/deploy.js +223 -0
  278. package/out/cli/commands/gateway.js +160 -0
  279. package/out/cli/commands/pack.js +220 -0
  280. package/out/cli/commands/probe-custom-engine.js +82 -0
  281. package/out/cli/commands/serve.js +583 -0
  282. package/out/cli/commands/store.js +919 -0
  283. package/out/cli/credential-context.js +113 -0
  284. package/out/cli/deploy-init.js +2087 -0
  285. package/out/cli/deps.js +238 -0
  286. package/out/cli/index.js +390 -0
  287. package/out/cli/pack-loader.js +376 -0
  288. package/out/cli/run-custom-engine-runner.js +318 -0
  289. package/out/cli/runtime.js +409 -0
  290. package/out/cli/serve-hardening.js +325 -0
  291. package/out/cli/state-sync.js +135 -0
  292. package/out/cli/utils.js +220 -0
  293. package/out/cli/vscode-shim.js +86 -0
  294. package/out/engines/base.js +159 -0
  295. package/out/engines/claude.js +1215 -0
  296. package/out/engines/codex.js +759 -0
  297. package/out/engines/custom.js +632 -0
  298. package/out/engines/customEngineIpc.js +95 -0
  299. package/out/engines/customEngineRunnerEmbed.js +107 -0
  300. package/out/engines/customRegistry.js +274 -0
  301. package/out/engines/embeddedCustomEngineRunner.generated.js +9 -0
  302. package/out/engines/engineApiKey.js +138 -0
  303. package/out/engines/factory.js +45 -0
  304. package/out/engines/install.js +372 -0
  305. package/out/engines/persistentEngineWorker.js +320 -0
  306. package/out/engines/publish.js +341 -0
  307. package/out/engines/types.js +17 -0
  308. package/out/examples/run-headless-repl.js +291 -0
  309. package/out/examples/run-headless.js +187 -0
  310. package/out/extension.js +4472 -0
  311. package/out/gateway/bridge.js +805 -0
  312. package/out/gateway/cli-agent-id.js +36 -0
  313. package/out/gateway/client.js +303 -0
  314. package/out/gateway/client.test.js +395 -0
  315. package/out/gateway/gateway-scope-errors.js +14 -0
  316. package/out/gateway/gatewayBackup.js +76 -0
  317. package/out/gateway/gatewayRouteIndex.js +371 -0
  318. package/out/gateway/gatewaySessionStore.js +243 -0
  319. package/out/gateway/index.js +31 -0
  320. package/out/gateway/lifecycle.js +3056 -0
  321. package/out/gateway/openclaw-channel-routing.js +317 -0
  322. package/out/gateway/outboundHandles.js +373 -0
  323. package/out/gateway/outboundPaths.js +72 -0
  324. package/out/gateway/outboundSend.js +254 -0
  325. package/out/gateway/protocol.js +48 -0
  326. package/out/gateway/resetMappings.js +52 -0
  327. package/out/gateway/service.js +1244 -0
  328. package/out/gateway/sessionRouting.js +77 -0
  329. package/out/headless/index.js +505 -0
  330. package/out/headless/sync.js +473 -0
  331. package/out/mcp/publish.js +143 -0
  332. package/out/mcp.js +597 -0
  333. package/out/permissions.js +108 -0
  334. package/out/permissions.mapping.yaml +68 -0
  335. package/out/registry/index.js +332 -0
  336. package/out/remote/handleRemoteChat.js +122 -0
  337. package/out/remote/remotePackStatusBar.js +103 -0
  338. package/out/remote/serveClient.js +216 -0
  339. package/out/remoteSkills.js +191 -0
  340. package/out/runtime/index.js +32 -0
  341. package/out/runtime/interfaces/config-provider.js +32 -0
  342. package/out/runtime/interfaces/edit-tracker.js +22 -0
  343. package/out/runtime/interfaces/index.js +29 -0
  344. package/out/runtime/interfaces/logger.js +40 -0
  345. package/out/runtime/interfaces/permission-handler.js +66 -0
  346. package/out/runtime/interfaces/session-store.js +342 -0
  347. package/out/runtime/vscode/index.js +20 -0
  348. package/out/runtime/vscode/vscode-config-provider.js +77 -0
  349. package/out/runtime/vscode/vscode-edit-tracker.js +120 -0
  350. package/out/runtime/vscode/vscode-logger.js +30 -0
  351. package/out/runtime/vscode/vscode-permission-handler.js +72 -0
  352. package/out/runtime/vscode/vscode-session-store.js +22 -0
  353. package/out/scripts/agentide-litellm.ps1 +501 -0
  354. package/out/scripts/agentide-litellm.sh +700 -0
  355. package/out/scripts/agentide_litellm_hooks_v1.py +604 -0
  356. package/out/scripts/analytics/agent-fleet-widget.js +954 -0
  357. package/out/scripts/analytics/agentide-litellm-otel.config.yaml +160 -0
  358. package/out/scripts/analytics/default-seed-scripts.json +12 -0
  359. package/out/scripts/analytics/duckdbLocator.js +29 -0
  360. package/out/scripts/analytics/fleet-local-adapter.js +246 -0
  361. package/out/scripts/analytics/fleet-workflow.sh +263 -0
  362. package/out/scripts/analytics/generate-default-charts.py +685 -0
  363. package/out/scripts/analytics/hotspot-analysis-widget.js +909 -0
  364. package/out/scripts/analytics/index-traces.py +1394 -0
  365. package/out/scripts/analytics/install-analytics.sh +286 -0
  366. package/out/scripts/analytics/live-fleet-4-collector.cjs +315 -0
  367. package/out/scripts/analytics/live-fleet-4-daemon.mjs +134 -0
  368. package/out/scripts/analytics/live-fleet-4-widget.cjs +433 -0
  369. package/out/scripts/analytics/otel-collector.yaml +55 -0
  370. package/out/scripts/analytics/query-analytics.ps1 +396 -0
  371. package/out/scripts/analytics/query-analytics.sh +2551 -0
  372. package/out/scripts/analytics/session-comparison-widget.js +1468 -0
  373. package/out/scripts/analytics/session-timeline-widget.js +2137 -0
  374. package/out/scripts/analytics/setup-analytics.ps1 +432 -0
  375. package/out/scripts/analytics/setup-analytics.sh +854 -0
  376. package/out/scripts/analytics/start-analytics.ps1 +169 -0
  377. package/out/scripts/analytics/start-analytics.sh +323 -0
  378. package/out/scripts/analytics/token-cost-flamegraph-widget.js +954 -0
  379. package/out/scripts/analytics/token-cost-trend-widget.js +1062 -0
  380. package/out/scripts/analytics/workflows-collector.cjs +315 -0
  381. package/out/scripts/analytics/workflows-daemon.mjs +186 -0
  382. package/out/scripts/analytics/workflows-widget.cjs +433 -0
  383. package/out/scripts/analytics/wow-model-widget.js +191 -0
  384. package/out/scripts/gateway/Dockerfile.serve +45 -0
  385. package/out/scripts/gateway/docker-serve.sh +248 -0
  386. package/out/scripts/gateway/setup-gateway-server.ps1 +953 -0
  387. package/out/scripts/gateway/setup-gateway-server.sh +935 -0
  388. package/out/scripts/gateway/setup-gateway.ps1 +1813 -0
  389. package/out/scripts/gateway/setup-gateway.sh +1541 -0
  390. package/out/scripts/setup-cli.ps1 +86 -0
  391. package/out/scripts/setup-cli.sh +117 -0
  392. package/out/scripts/tools-manifest.json +83 -0
  393. package/out/scripts/vendor-tools.mjs +234 -0
  394. package/out/session.js +272 -0
  395. package/out/shared/agentEngines.js +170 -0
  396. package/out/shared/index.js +109 -0
  397. package/out/shared/models.js +235 -0
  398. package/out/shared/providers.js +202 -0
  399. package/out/skills/publish.js +178 -0
  400. package/out/spotlight/install.js +339 -0
  401. package/out/spotlight/publish.js +544 -0
  402. package/out/spotlight/yaml.js +31 -0
  403. package/out/store/github/setup.js +235 -0
  404. package/out/store/github/templates/build-index.ts +339 -0
  405. package/out/store/github/templates/build-index.yml +97 -0
  406. package/out/store/github/templates/package.json +11 -0
  407. package/out/store/index.js +755 -0
  408. package/out/store/oramaIndex.js +884 -0
  409. package/out/store/shared.js +241 -0
  410. package/out/sync.js +1827 -0
  411. package/out/terminalLogger.js +358 -0
  412. package/out/test/agentEnvFile.test.js +97 -0
  413. package/out/test/agentYaml.test.js +373 -0
  414. package/out/test/agentpack.test.js +639 -0
  415. package/out/test/analytics-lifecycle.test.js +174 -0
  416. package/out/test/analytics.test.js +524 -0
  417. package/out/test/auth-bootstrapApply.test.js +102 -0
  418. package/out/test/auth-broker.test.js +434 -0
  419. package/out/test/auth-callback.test.js +62 -0
  420. package/out/test/branding.test.js +229 -0
  421. package/out/test/cli-agent-id.test.js +55 -0
  422. package/out/test/credential-context.test.js +105 -0
  423. package/out/test/customEngineInstall.test.js +100 -0
  424. package/out/test/customRegistry.test.js +122 -0
  425. package/out/test/deploy-init.test.js +532 -0
  426. package/out/test/deps-auto-install.test.js +81 -0
  427. package/out/test/engine-integration.test.js +297 -0
  428. package/out/test/enginePaths.test.js +195 -0
  429. package/out/test/enginePublish.test.js +82 -0
  430. package/out/test/fleetDisplayUtils.test.js +96 -0
  431. package/out/test/gateway-client.test.js +381 -0
  432. package/out/test/gateway-lifecycle.test.js +608 -0
  433. package/out/test/gateway-outbound.test.js +531 -0
  434. package/out/test/gateway-reset-mappings.test.js +221 -0
  435. package/out/test/gateway-route-index.test.js +235 -0
  436. package/out/test/gateway-session-routing.test.js +47 -0
  437. package/out/test/gateway-session-store.test.js +216 -0
  438. package/out/test/github.test.js +232 -0
  439. package/out/test/headless-sync.test.js +279 -0
  440. package/out/test/helpers/manifest-fixtures.js +27 -0
  441. package/out/test/mcp-obo.test.js +82 -0
  442. package/out/test/mcp.test.js +307 -0
  443. package/out/test/openclaw-channel-routing.test.js +191 -0
  444. package/out/test/pathSafety.test.js +63 -0
  445. package/out/test/permissions.test.js +175 -0
  446. package/out/test/persistent-engine-worker.test.js +220 -0
  447. package/out/test/refreshPolicy.test.js +60 -0
  448. package/out/test/registry.test.js +351 -0
  449. package/out/test/runtime.test.js +349 -0
  450. package/out/test/scheduledFleetStorage.test.js +72 -0
  451. package/out/test/serve-hardening.test.js +192 -0
  452. package/out/test/serveClient.test.js +173 -0
  453. package/out/test/sessionJsonlFleet.test.js +78 -0
  454. package/out/test/shared.test.js +173 -0
  455. package/out/test/skills-mcp.test.js +299 -0
  456. package/out/test/spotlightPublish.test.js +299 -0
  457. package/out/test/spotlightYaml.test.js +58 -0
  458. package/out/test/state-sync-peer.test.js +74 -0
  459. package/out/test/store.test.js +331 -0
  460. package/out/test/stores.test.js +504 -0
  461. package/out/test/sync-switch.test.js +251 -0
  462. package/out/test/teamViewDiscovery.test.js +90 -0
  463. package/out/test/toolPath.test.js +120 -0
  464. package/out/test/utils.test.js +308 -0
  465. package/out/test/viewsConfigMerge.test.js +180 -0
  466. package/out/test/windows-command-line.test.js +75 -0
  467. package/out/utils/agentEnvFile.js +131 -0
  468. package/out/utils/binary.js +175 -0
  469. package/out/utils/index.js +37 -0
  470. package/out/utils/network.js +74 -0
  471. package/out/utils/pathSafety.js +60 -0
  472. package/out/utils/paths.js +116 -0
  473. package/out/utils/pid.js +180 -0
  474. package/out/utils/pythonRunner.js +258 -0
  475. package/out/utils/resolveNodeBinary.js +168 -0
  476. package/out/utils/toolPath.js +83 -0
  477. package/out/utils/windowsCommandLine.js +29 -0
  478. package/out/utils.js +915 -0
  479. package/out/workspaceFolders.js +59 -0
  480. package/package.json +41 -0
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) AgentHippo.ai. All rights reserved.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ require("mocha");
40
+ const assert = __importStar(require("assert"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const branding_1 = require("../branding");
45
+ const paths_1 = require("../agentpack/paths");
46
+ // Import copyDirRecursiveWithTransform directly to avoid vscode dependency
47
+ // This is a simplified re-implementation for testing only
48
+ async function copyDirRecursiveWithTransformForTest(sourceDir, targetDir, transformMd) {
49
+ await fs.promises.mkdir(targetDir, { recursive: true });
50
+ const entries = await fs.promises.readdir(sourceDir, { withFileTypes: true });
51
+ for (const entry of entries) {
52
+ const src = path.join(sourceDir, entry.name);
53
+ const dst = path.join(targetDir, entry.name);
54
+ if (entry.isDirectory()) {
55
+ await copyDirRecursiveWithTransformForTest(src, dst, transformMd);
56
+ }
57
+ else if (entry.isFile()) {
58
+ const lowerName = entry.name.toLowerCase();
59
+ if (lowerName.endsWith('.md')) {
60
+ const content = await fs.promises.readFile(src, 'utf8');
61
+ await fs.promises.writeFile(dst, transformMd(content), 'utf8');
62
+ }
63
+ else {
64
+ await fs.promises.copyFile(src, dst);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ // =============================================================================
70
+ // Branding Constants Tests
71
+ // =============================================================================
72
+ suite('Branding Constants', () => {
73
+ test('AGENTIDE_BRAND_NAME is defined', () => {
74
+ assert.ok(branding_1.AGENTIDE_BRAND_NAME, 'Brand name should be defined');
75
+ assert.strictEqual(typeof branding_1.AGENTIDE_BRAND_NAME, 'string');
76
+ });
77
+ test('AGENTIDE_DIR_NAME is defined and starts with dot', () => {
78
+ assert.ok(branding_1.AGENTIDE_DIR_NAME, 'Directory name should be defined');
79
+ assert.strictEqual(typeof branding_1.AGENTIDE_DIR_NAME, 'string');
80
+ assert.ok(branding_1.AGENTIDE_DIR_NAME.startsWith('.'), 'Directory name should start with a dot');
81
+ });
82
+ test('AGENT_CONSTANTS.AGENTIDE_DIR_NAME matches branding', () => {
83
+ assert.strictEqual(paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, branding_1.AGENTIDE_DIR_NAME, 'AGENT_CONSTANTS should use the same value as branding');
84
+ });
85
+ });
86
+ // =============================================================================
87
+ // applyBrandingTokens Tests
88
+ // =============================================================================
89
+ suite('applyBrandingTokens', () => {
90
+ test('replaces {{AGENT_BRAND}} with brand name', () => {
91
+ const input = 'Welcome to {{AGENT_BRAND}}!';
92
+ const result = (0, branding_1.applyBrandingTokens)(input);
93
+ assert.strictEqual(result, `Welcome to ${branding_1.AGENTIDE_BRAND_NAME}!`);
94
+ });
95
+ test('replaces {{AGENTIDE_BRAND}} with brand name', () => {
96
+ const input = 'Powered by {{AGENTIDE_BRAND}}';
97
+ const result = (0, branding_1.applyBrandingTokens)(input);
98
+ assert.strictEqual(result, `Powered by ${branding_1.AGENTIDE_BRAND_NAME}`);
99
+ });
100
+ test('replaces {{BRAND_FOLDER}} with directory name', () => {
101
+ const input = 'Files are stored in {{BRAND_FOLDER}}/agents/';
102
+ const result = (0, branding_1.applyBrandingTokens)(input);
103
+ assert.strictEqual(result, `Files are stored in ${branding_1.AGENTIDE_DIR_NAME}/agents/`);
104
+ });
105
+ test('replaces multiple tokens in same string', () => {
106
+ const input = '{{AGENT_BRAND}} stores data in {{BRAND_FOLDER}}/sessions/';
107
+ const result = (0, branding_1.applyBrandingTokens)(input);
108
+ assert.strictEqual(result, `${branding_1.AGENTIDE_BRAND_NAME} stores data in ${branding_1.AGENTIDE_DIR_NAME}/sessions/`);
109
+ });
110
+ test('replaces multiple occurrences of same token', () => {
111
+ const input = '{{BRAND_FOLDER}}/agents/ and {{BRAND_FOLDER}}/sessions/';
112
+ const result = (0, branding_1.applyBrandingTokens)(input);
113
+ assert.strictEqual(result, `${branding_1.AGENTIDE_DIR_NAME}/agents/ and ${branding_1.AGENTIDE_DIR_NAME}/sessions/`);
114
+ });
115
+ test('leaves text without tokens unchanged', () => {
116
+ const input = 'No tokens here';
117
+ const result = (0, branding_1.applyBrandingTokens)(input);
118
+ assert.strictEqual(result, input);
119
+ });
120
+ test('handles empty string', () => {
121
+ const result = (0, branding_1.applyBrandingTokens)('');
122
+ assert.strictEqual(result, '');
123
+ });
124
+ test('is case-sensitive (does not replace lowercase)', () => {
125
+ const input = '{{agent_brand}} and {{brand_folder}}';
126
+ const result = (0, branding_1.applyBrandingTokens)(input);
127
+ assert.strictEqual(result, input, 'Lowercase tokens should not be replaced');
128
+ });
129
+ });
130
+ // =============================================================================
131
+ // brandify Tests
132
+ // =============================================================================
133
+ suite('brandify', () => {
134
+ test('replaces AgentIDE with brand name', () => {
135
+ const input = 'Welcome to AgentIDE!';
136
+ const result = (0, branding_1.brandify)(input);
137
+ assert.strictEqual(result, `Welcome to ${branding_1.AGENTIDE_BRAND_NAME}!`);
138
+ });
139
+ test('applies branding tokens and replaces AgentIDE', () => {
140
+ const input = '{{AGENT_BRAND}} (AgentIDE) folder: {{BRAND_FOLDER}}';
141
+ const result = (0, branding_1.brandify)(input);
142
+ assert.strictEqual(result, `${branding_1.AGENTIDE_BRAND_NAME} (${branding_1.AGENTIDE_BRAND_NAME}) folder: ${branding_1.AGENTIDE_DIR_NAME}`);
143
+ });
144
+ });
145
+ // =============================================================================
146
+ // copyDirRecursiveWithTransform Tests
147
+ // =============================================================================
148
+ suite('copyDirRecursiveWithTransform', () => {
149
+ let tempDir;
150
+ let srcDir;
151
+ let dstDir;
152
+ setup(() => {
153
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'branding-test-'));
154
+ srcDir = path.join(tempDir, 'src');
155
+ dstDir = path.join(tempDir, 'dst');
156
+ fs.mkdirSync(srcDir, { recursive: true });
157
+ });
158
+ teardown(() => {
159
+ fs.rmSync(tempDir, { recursive: true, force: true });
160
+ });
161
+ test('applies transform to .md files', async () => {
162
+ // Create source file with token
163
+ const mdContent = 'Files in {{BRAND_FOLDER}}/skills/';
164
+ fs.writeFileSync(path.join(srcDir, 'README.md'), mdContent);
165
+ // Copy with transform
166
+ await copyDirRecursiveWithTransformForTest(srcDir, dstDir, branding_1.applyBrandingTokens);
167
+ // Verify transform was applied
168
+ const result = fs.readFileSync(path.join(dstDir, 'README.md'), 'utf8');
169
+ assert.strictEqual(result, `Files in ${branding_1.AGENTIDE_DIR_NAME}/skills/`);
170
+ });
171
+ test('does not transform non-md files', async () => {
172
+ // Create source files
173
+ const jsContent = 'const folder = "{{BRAND_FOLDER}}";';
174
+ fs.writeFileSync(path.join(srcDir, 'script.js'), jsContent);
175
+ // Copy with transform
176
+ await copyDirRecursiveWithTransformForTest(srcDir, dstDir, branding_1.applyBrandingTokens);
177
+ // Verify .js file was NOT transformed
178
+ const result = fs.readFileSync(path.join(dstDir, 'script.js'), 'utf8');
179
+ assert.strictEqual(result, jsContent, 'Non-md files should not be transformed');
180
+ });
181
+ test('handles nested directories', async () => {
182
+ // Create nested structure
183
+ const nestedDir = path.join(srcDir, 'subdir');
184
+ fs.mkdirSync(nestedDir, { recursive: true });
185
+ fs.writeFileSync(path.join(nestedDir, 'SKILL.md'), 'Path: {{BRAND_FOLDER}}/agents/');
186
+ // Copy with transform
187
+ await copyDirRecursiveWithTransformForTest(srcDir, dstDir, branding_1.applyBrandingTokens);
188
+ // Verify nested file was transformed
189
+ const result = fs.readFileSync(path.join(dstDir, 'subdir', 'SKILL.md'), 'utf8');
190
+ assert.strictEqual(result, `Path: ${branding_1.AGENTIDE_DIR_NAME}/agents/`);
191
+ });
192
+ test('handles mixed content', async () => {
193
+ // Create mixed content
194
+ fs.writeFileSync(path.join(srcDir, 'doc.md'), '{{AGENT_BRAND}} guide');
195
+ fs.writeFileSync(path.join(srcDir, 'config.json'), '{"path": "{{BRAND_FOLDER}}"}');
196
+ fs.writeFileSync(path.join(srcDir, 'notes.MD'), 'Uppercase extension: {{BRAND_FOLDER}}');
197
+ // Copy with transform
198
+ await copyDirRecursiveWithTransformForTest(srcDir, dstDir, branding_1.applyBrandingTokens);
199
+ // .md transformed
200
+ assert.strictEqual(fs.readFileSync(path.join(dstDir, 'doc.md'), 'utf8'), `${branding_1.AGENTIDE_BRAND_NAME} guide`);
201
+ // .json NOT transformed
202
+ assert.strictEqual(fs.readFileSync(path.join(dstDir, 'config.json'), 'utf8'), '{"path": "{{BRAND_FOLDER}}"}');
203
+ // .MD (uppercase) transformed
204
+ assert.strictEqual(fs.readFileSync(path.join(dstDir, 'notes.MD'), 'utf8'), `Uppercase extension: ${branding_1.AGENTIDE_DIR_NAME}`);
205
+ });
206
+ test('creates destination directory if it does not exist', async () => {
207
+ fs.writeFileSync(path.join(srcDir, 'test.md'), 'content');
208
+ const newDst = path.join(tempDir, 'new', 'nested', 'dst');
209
+ await copyDirRecursiveWithTransformForTest(srcDir, newDst, branding_1.applyBrandingTokens);
210
+ assert.ok(fs.existsSync(path.join(newDst, 'test.md')));
211
+ });
212
+ });
213
+ // =============================================================================
214
+ // Path Consistency Tests
215
+ // =============================================================================
216
+ suite('Path Constants Consistency', () => {
217
+ test('AGENT_CONSTANTS uses AGENTIDE_DIR_NAME from branding', () => {
218
+ // This ensures the constant is imported from branding, not hardcoded
219
+ assert.strictEqual(paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, branding_1.AGENTIDE_DIR_NAME, 'Path constants should derive from branding module');
220
+ });
221
+ test('AGENTIDE_DIR_NAME does not contain path separators', () => {
222
+ assert.ok(!branding_1.AGENTIDE_DIR_NAME.includes('/') && !branding_1.AGENTIDE_DIR_NAME.includes('\\'), 'Directory name should not contain path separators');
223
+ });
224
+ test('AGENTIDE_DIR_NAME is a valid directory name', () => {
225
+ // Should not contain characters invalid for directory names
226
+ const invalidChars = /[<>:"|?*]/;
227
+ assert.ok(!invalidChars.test(branding_1.AGENTIDE_DIR_NAME), 'Directory name should not contain invalid filesystem characters');
228
+ });
229
+ });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("node:assert/strict"));
37
+ const node_test_1 = require("node:test");
38
+ const cli_agent_id_js_1 = require("../gateway/cli-agent-id.js");
39
+ (0, node_test_1.describe)('cli-agent-id', () => {
40
+ (0, node_test_1.test)('resolveCliGatewayAgentId uses agenthippo-cli for default pack', () => {
41
+ assert.strictEqual((0, cli_agent_id_js_1.resolveCliGatewayAgentId)('default'), cli_agent_id_js_1.CLI_GATEWAY_AGENT_PREFIX);
42
+ assert.strictEqual((0, cli_agent_id_js_1.resolveCliGatewayAgentId)('Default'), cli_agent_id_js_1.CLI_GATEWAY_AGENT_PREFIX);
43
+ assert.strictEqual((0, cli_agent_id_js_1.resolveCliGatewayAgentId)(''), cli_agent_id_js_1.CLI_GATEWAY_AGENT_PREFIX);
44
+ });
45
+ (0, node_test_1.test)('resolveCliGatewayAgentId suffixes named packs', () => {
46
+ assert.strictEqual((0, cli_agent_id_js_1.resolveCliGatewayAgentId)('data-analyst'), 'agenthippo-cli-data-analyst');
47
+ assert.strictEqual((0, cli_agent_id_js_1.resolveCliGatewayAgentId)('Data Analyst'), 'agenthippo-cli-data-analyst');
48
+ });
49
+ (0, node_test_1.test)('isCliGatewayAgentId recognizes CLI gateway ids', () => {
50
+ assert.strictEqual((0, cli_agent_id_js_1.isCliGatewayAgentId)('agenthippo-cli'), true);
51
+ assert.strictEqual((0, cli_agent_id_js_1.isCliGatewayAgentId)('agenthippo-cli-data-analyst'), true);
52
+ assert.strictEqual((0, cli_agent_id_js_1.isCliGatewayAgentId)('default'), false);
53
+ assert.strictEqual((0, cli_agent_id_js_1.isCliGatewayAgentId)('ide-agenthippo-vscode'), false);
54
+ });
55
+ });
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Credential Context Test Suite (serve-v3 §11.1, Design B)
4
+ *
5
+ * The request-scoped credential primitive: presence, fail-closed access, and
6
+ * — most important — isolation between concurrent async turns.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ require("mocha");
43
+ const assert = __importStar(require("assert"));
44
+ const credential_context_1 = require("../cli/credential-context");
45
+ const serve_hardening_1 = require("../cli/serve-hardening");
46
+ suite('credential-context: presence + fail-closed', () => {
47
+ test('no credential outside a run scope', () => {
48
+ assert.strictEqual((0, credential_context_1.currentCredential)(), undefined);
49
+ assert.throws(() => (0, credential_context_1.requireUserId)(), /fail-closed/);
50
+ });
51
+ test('credential visible inside the scope', async () => {
52
+ await (0, credential_context_1.runWithCredential)({ userId: 'alice@acme.com', dataToken: 'tok' }, async () => {
53
+ assert.strictEqual((0, credential_context_1.requireUserId)(), 'alice@acme.com');
54
+ assert.strictEqual((0, credential_context_1.currentCredential)()?.dataToken, 'tok');
55
+ });
56
+ });
57
+ test('scope is cleared after the run returns', async () => {
58
+ await (0, credential_context_1.runWithCredential)({ userId: 'alice@acme.com' }, async () => undefined);
59
+ assert.strictEqual((0, credential_context_1.currentCredential)(), undefined);
60
+ });
61
+ test('returns the callback value (sync and async)', async () => {
62
+ const sync = await (0, credential_context_1.runWithCredential)({ userId: 'a' }, () => 42);
63
+ assert.strictEqual(sync, 42);
64
+ const asyncVal = await (0, credential_context_1.runWithCredential)({ userId: 'a' }, async () => {
65
+ await Promise.resolve();
66
+ return (0, credential_context_1.requireUserId)();
67
+ });
68
+ assert.strictEqual(asyncVal, 'a');
69
+ });
70
+ test('credential survives across awaits within the same turn', async () => {
71
+ await (0, credential_context_1.runWithCredential)({ userId: 'priya@meridian.com' }, async () => {
72
+ await new Promise((r) => setTimeout(r, 5));
73
+ assert.strictEqual((0, credential_context_1.requireUserId)(), 'priya@meridian.com');
74
+ });
75
+ });
76
+ });
77
+ suite('credential-context: concurrent isolation (the load-bearing property)', () => {
78
+ test('two interleaved turns never see each other\'s user', async () => {
79
+ // Interleave alice and bob with deliberate awaits; each must keep its own identity.
80
+ const run = (user, delay) => (0, credential_context_1.runWithCredential)({ userId: user }, async () => {
81
+ await new Promise((r) => setTimeout(r, delay));
82
+ const seen1 = (0, credential_context_1.requireUserId)();
83
+ await new Promise((r) => setTimeout(r, delay));
84
+ const seen2 = (0, credential_context_1.requireUserId)();
85
+ return [seen1, seen2];
86
+ });
87
+ const [alice, bob] = await Promise.all([
88
+ run('alice@acme.com', 8),
89
+ run('bob@acme.com', 3),
90
+ ]);
91
+ assert.deepStrictEqual(alice, ['alice@acme.com', 'alice@acme.com']);
92
+ assert.deepStrictEqual(bob, ['bob@acme.com', 'bob@acme.com']);
93
+ });
94
+ });
95
+ suite('credential-context: resolveDataToken (the OBO token seam)', () => {
96
+ test('Databricks X-Forwarded-Access-Token', () => {
97
+ assert.strictEqual((0, serve_hardening_1.resolveDataToken)({ 'x-forwarded-access-token': 'obo-123' }), 'obo-123');
98
+ });
99
+ test('generic X-Agent-Data-Token', () => {
100
+ assert.strictEqual((0, serve_hardening_1.resolveDataToken)({ 'x-agent-data-token': 'tok-9' }), 'tok-9');
101
+ });
102
+ test('undefined when absent', () => {
103
+ assert.strictEqual((0, serve_hardening_1.resolveDataToken)({}), undefined);
104
+ });
105
+ });
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) AgentHippo.ai. All rights reserved.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ require("mocha");
40
+ const assert = __importStar(require("assert"));
41
+ const fs = __importStar(require("fs"));
42
+ const os = __importStar(require("os"));
43
+ const path = __importStar(require("path"));
44
+ const install_1 = require("../engines/install");
45
+ suite('Custom engine install', () => {
46
+ let tempDir;
47
+ let originalAgentHomeDir;
48
+ let originalAgentHippoHome;
49
+ setup(() => {
50
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'agentide-engine-install-'));
51
+ originalAgentHomeDir = process.env.AGENT_HOME_DIR;
52
+ originalAgentHippoHome = process.env.AGENTHIPPO_HOME;
53
+ delete process.env.AGENT_HOME_DIR;
54
+ process.env.AGENTHIPPO_HOME = path.join(tempDir, 'home');
55
+ });
56
+ teardown(() => {
57
+ fs.rmSync(tempDir, { recursive: true, force: true });
58
+ restoreEnv('AGENT_HOME_DIR', originalAgentHomeDir);
59
+ restoreEnv('AGENTHIPPO_HOME', originalAgentHippoHome);
60
+ });
61
+ test('installs, lists, and uninstalls an engine from the home root', async () => {
62
+ const result = await (0, install_1.installCustomEngineFromFiles)([
63
+ {
64
+ path: 'engine.manifest.json',
65
+ content: JSON.stringify({
66
+ version: 2,
67
+ id: 'test-engine',
68
+ displayName: 'Test Engine',
69
+ entry: 'engine.mjs',
70
+ promptInjection: { mode: 'env-only' },
71
+ }),
72
+ },
73
+ {
74
+ path: 'engine.mjs',
75
+ content: 'export default { async run() {} };\n',
76
+ },
77
+ ], {
78
+ runNpmCi: false,
79
+ });
80
+ assert.strictEqual(result.id, 'test-engine');
81
+ assert.strictEqual(result.installDir, path.join((0, install_1.getDefaultCustomEnginesInstallRoot)(), 'test-engine'));
82
+ const installed = await (0, install_1.listInstalledCustomEngines)();
83
+ assert.deepStrictEqual(installed.map(engine => engine.id), ['test-engine']);
84
+ const removed = await (0, install_1.uninstallCustomEngine)('test-engine');
85
+ assert.strictEqual(removed.removed, true);
86
+ assert.strictEqual(fs.existsSync(result.installDir), false);
87
+ assert.deepStrictEqual(await (0, install_1.listInstalledCustomEngines)(), []);
88
+ });
89
+ test('rejects unsafe uninstall ids', async () => {
90
+ await assert.rejects(() => (0, install_1.uninstallCustomEngine)('../outside'), /Custom engine id must contain only lowercase letters/);
91
+ });
92
+ });
93
+ function restoreEnv(name, value) {
94
+ if (value === undefined) {
95
+ delete process.env[name];
96
+ }
97
+ else {
98
+ process.env[name] = value;
99
+ }
100
+ }
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) AgentHippo.ai. All rights reserved.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ require("mocha");
40
+ const assert = __importStar(require("assert"));
41
+ const fs = __importStar(require("fs"));
42
+ const os = __importStar(require("os"));
43
+ const path = __importStar(require("path"));
44
+ const customRegistry_1 = require("../engines/customRegistry");
45
+ suite('Custom engine registry', () => {
46
+ let tempDir;
47
+ let originalAgentHippoCustomEnginesDir;
48
+ let originalAgentideCustomEnginesDir;
49
+ let originalAgentHomeDir;
50
+ let originalAgentHippoHome;
51
+ setup(() => {
52
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'agentide-custom-registry-'));
53
+ originalAgentHippoCustomEnginesDir = process.env.AGENTHIPPO_CUSTOM_ENGINES_DIR;
54
+ originalAgentideCustomEnginesDir = process.env.AGENTIDE_CUSTOM_ENGINES_DIR;
55
+ originalAgentHomeDir = process.env.AGENT_HOME_DIR;
56
+ originalAgentHippoHome = process.env.AGENTHIPPO_HOME;
57
+ delete process.env.AGENTHIPPO_CUSTOM_ENGINES_DIR;
58
+ delete process.env.AGENTIDE_CUSTOM_ENGINES_DIR;
59
+ delete process.env.AGENT_HOME_DIR;
60
+ delete process.env.AGENTHIPPO_HOME;
61
+ });
62
+ teardown(() => {
63
+ fs.rmSync(tempDir, { recursive: true, force: true });
64
+ restoreEnv('AGENTHIPPO_CUSTOM_ENGINES_DIR', originalAgentHippoCustomEnginesDir);
65
+ restoreEnv('AGENTIDE_CUSTOM_ENGINES_DIR', originalAgentideCustomEnginesDir);
66
+ restoreEnv('AGENT_HOME_DIR', originalAgentHomeDir);
67
+ restoreEnv('AGENTHIPPO_HOME', originalAgentHippoHome);
68
+ });
69
+ test('parses configured search path strings and arrays', () => {
70
+ const first = path.join(tempDir, 'first');
71
+ const second = path.join(tempDir, 'second');
72
+ const third = path.join(tempDir, 'third');
73
+ assert.deepStrictEqual((0, customRegistry_1.parseCustomEngineSearchPath)([first, `${second}${path.delimiter}${third}`]), [first, second, third]);
74
+ });
75
+ test('adds configured directories before environment and home roots', () => {
76
+ const configured = path.join(tempDir, 'configured');
77
+ const envRoot = path.join(tempDir, 'env');
78
+ process.env.AGENTHIPPO_CUSTOM_ENGINES_DIR = envRoot;
79
+ const roots = (0, customRegistry_1.getCustomEngineSearchRoots)(undefined, configured);
80
+ assert.strictEqual(roots[0], path.resolve(configured));
81
+ assert.strictEqual(roots[1], path.resolve(envRoot));
82
+ });
83
+ test('includes custom engine installer home root', () => {
84
+ const agentHome = path.join(tempDir, 'agent-home');
85
+ process.env.AGENTHIPPO_HOME = agentHome;
86
+ const roots = (0, customRegistry_1.getCustomEngineSearchRoots)(undefined, undefined);
87
+ assert.strictEqual(roots[0], path.join(agentHome, 'engines'));
88
+ });
89
+ test('discovers manifests from configured directories', () => {
90
+ const configured = path.join(tempDir, 'engines');
91
+ writeCustomEngineManifest(configured, 'external-test-engine');
92
+ const manifests = (0, customRegistry_1.discoverCustomEngineManifests)(undefined, configured);
93
+ const manifest = manifests.find(item => item.id === 'external-test-engine');
94
+ assert.ok(manifest);
95
+ assert.strictEqual(manifest.displayName, 'External Test Engine');
96
+ assert.strictEqual(manifest.searchRoot, path.resolve(configured));
97
+ });
98
+ });
99
+ function restoreEnv(name, value) {
100
+ if (value === undefined) {
101
+ delete process.env[name];
102
+ }
103
+ else {
104
+ process.env[name] = value;
105
+ }
106
+ }
107
+ function writeCustomEngineManifest(root, id) {
108
+ const engineDir = path.join(root, id);
109
+ fs.mkdirSync(engineDir, { recursive: true });
110
+ fs.writeFileSync(path.join(engineDir, 'engine.manifest.json'), JSON.stringify({
111
+ version: 2,
112
+ id,
113
+ displayName: 'External Test Engine',
114
+ entry: 'engine.mjs',
115
+ promptInjection: {
116
+ mode: 'env-only',
117
+ },
118
+ model: {
119
+ defaultModel: 'test-model',
120
+ },
121
+ }, null, 2), 'utf8');
122
+ }