@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,349 @@
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 path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const fs_1 = require("fs");
44
+ const interfaces_1 = require("../runtime/interfaces");
45
+ // =============================================================================
46
+ // Logger Tests
47
+ // =============================================================================
48
+ suite('Runtime Interfaces - Logger', () => {
49
+ test('ConsoleLogger has all required methods', () => {
50
+ const logger = new interfaces_1.ConsoleLogger('[Test]');
51
+ assert.strictEqual(typeof logger.debug, 'function');
52
+ assert.strictEqual(typeof logger.info, 'function');
53
+ assert.strictEqual(typeof logger.warn, 'function');
54
+ assert.strictEqual(typeof logger.error, 'function');
55
+ });
56
+ test('NoOpLogger has all required methods', () => {
57
+ const logger = new interfaces_1.NoOpLogger();
58
+ // Should not throw
59
+ logger.debug('test');
60
+ logger.info('test');
61
+ logger.warn('test');
62
+ logger.error('test');
63
+ logger.error('test', new Error('test'));
64
+ });
65
+ });
66
+ // =============================================================================
67
+ // Permission Handler Tests
68
+ // =============================================================================
69
+ suite('Runtime Interfaces - PermissionHandler', () => {
70
+ test('AutoApprovePermissionHandler always allows', async () => {
71
+ const handler = new interfaces_1.AutoApprovePermissionHandler();
72
+ const result = await handler.requestPermission({
73
+ toolName: 'Bash',
74
+ toolInput: { command: 'ls' },
75
+ });
76
+ assert.deepStrictEqual(result, { behavior: 'allow' });
77
+ });
78
+ test('AutoDenyPermissionHandler always denies', async () => {
79
+ const handler = new interfaces_1.AutoDenyPermissionHandler();
80
+ const result = await handler.requestPermission({
81
+ toolName: 'Bash',
82
+ toolInput: { command: 'rm -rf /' },
83
+ });
84
+ assert.strictEqual(result.behavior, 'deny');
85
+ });
86
+ test('AutoDenyPermissionHandler uses custom message', async () => {
87
+ const handler = new interfaces_1.AutoDenyPermissionHandler('Custom deny message');
88
+ const result = await handler.requestPermission({ toolName: 'Write' });
89
+ assert.strictEqual(result.behavior, 'deny');
90
+ if (result.behavior === 'deny') {
91
+ assert.strictEqual(result.message, 'Custom deny message');
92
+ }
93
+ });
94
+ });
95
+ // =============================================================================
96
+ // Edit Tracker Tests
97
+ // =============================================================================
98
+ suite('Runtime Interfaces - EditTracker', () => {
99
+ test('NoOpEditTracker startTracking returns undefined', async () => {
100
+ const tracker = new interfaces_1.NoOpEditTracker();
101
+ const result = await tracker.startTracking('session-1', ['/path/to/file.ts']);
102
+ assert.strictEqual(result, undefined);
103
+ });
104
+ test('NoOpEditTracker stopTracking does not throw', async () => {
105
+ const tracker = new interfaces_1.NoOpEditTracker();
106
+ // Should not throw
107
+ await tracker.stopTracking('session-1', 123);
108
+ });
109
+ test('NoOpEditTracker applyEdit does not throw', async () => {
110
+ const tracker = new interfaces_1.NoOpEditTracker();
111
+ // Should not throw
112
+ await tracker.applyEdit('session-1', '/path/to/file.ts', 'content', true);
113
+ });
114
+ });
115
+ // =============================================================================
116
+ // Session Store Tests
117
+ // =============================================================================
118
+ suite('Runtime Interfaces - SessionStore', () => {
119
+ test('MemorySessionStore get/set works', async () => {
120
+ const store = new interfaces_1.MemorySessionStore();
121
+ // Initially undefined
122
+ assert.strictEqual(store.get('key1'), undefined);
123
+ // Set and get
124
+ await store.set('key1', { foo: 'bar' });
125
+ assert.deepStrictEqual(store.get('key1'), { foo: 'bar' });
126
+ // Overwrite
127
+ await store.set('key1', { foo: 'baz' });
128
+ assert.deepStrictEqual(store.get('key1'), { foo: 'baz' });
129
+ });
130
+ test('MemorySessionStore clear removes all values', async () => {
131
+ const store = new interfaces_1.MemorySessionStore();
132
+ await store.set('key1', 'value1');
133
+ await store.set('key2', 'value2');
134
+ assert.strictEqual(store.get('key1'), 'value1');
135
+ assert.strictEqual(store.get('key2'), 'value2');
136
+ store.clear();
137
+ assert.strictEqual(store.get('key1'), undefined);
138
+ assert.strictEqual(store.get('key2'), undefined);
139
+ });
140
+ test('MemorySessionStore supports different value types', async () => {
141
+ const store = new interfaces_1.MemorySessionStore();
142
+ await store.set('string', 'hello');
143
+ await store.set('number', 42);
144
+ await store.set('boolean', true);
145
+ await store.set('object', { nested: { value: 123 } });
146
+ await store.set('array', [1, 2, 3]);
147
+ assert.strictEqual(store.get('string'), 'hello');
148
+ assert.strictEqual(store.get('number'), 42);
149
+ assert.strictEqual(store.get('boolean'), true);
150
+ assert.deepStrictEqual(store.get('object'), { nested: { value: 123 } });
151
+ assert.deepStrictEqual(store.get('array'), [1, 2, 3]);
152
+ });
153
+ });
154
+ // =============================================================================
155
+ // FileSessionStore Tests
156
+ // =============================================================================
157
+ suite('Runtime Interfaces - FileSessionStore', () => {
158
+ let tempDir;
159
+ let testFilePath;
160
+ setup(async () => {
161
+ tempDir = await fs_1.promises.mkdtemp(path.join(os.tmpdir(), 'agentide-test-'));
162
+ testFilePath = path.join(tempDir, 'sessions.json');
163
+ });
164
+ teardown(async () => {
165
+ try {
166
+ await fs_1.promises.rm(tempDir, { recursive: true, force: true });
167
+ }
168
+ catch {
169
+ // Ignore cleanup errors
170
+ }
171
+ });
172
+ test('FileSessionStore get/set works', async () => {
173
+ const store = new interfaces_1.FileSessionStore(testFilePath);
174
+ await store.load();
175
+ // Initially undefined
176
+ assert.strictEqual(store.get('key1'), undefined);
177
+ // Set and get
178
+ await store.set('key1', { foo: 'bar' });
179
+ assert.deepStrictEqual(store.get('key1'), { foo: 'bar' });
180
+ // Overwrite
181
+ await store.set('key1', { foo: 'baz' });
182
+ assert.deepStrictEqual(store.get('key1'), { foo: 'baz' });
183
+ });
184
+ test('FileSessionStore persists to disk', async () => {
185
+ // Write with first store instance
186
+ const store1 = new interfaces_1.FileSessionStore(testFilePath);
187
+ await store1.load();
188
+ await store1.set('persistent', { data: 'survives' });
189
+ // Read with new store instance
190
+ const store2 = new interfaces_1.FileSessionStore(testFilePath);
191
+ await store2.load();
192
+ assert.deepStrictEqual(store2.get('persistent'), { data: 'survives' });
193
+ });
194
+ test('FileSessionStore handles missing file gracefully', async () => {
195
+ const nonExistentPath = path.join(tempDir, 'does-not-exist.json');
196
+ const store = new interfaces_1.FileSessionStore(nonExistentPath);
197
+ await store.load(); // Should not throw
198
+ assert.strictEqual(store.get('anything'), undefined);
199
+ });
200
+ test('FileSessionStore clear removes all values', async () => {
201
+ const store = new interfaces_1.FileSessionStore(testFilePath);
202
+ await store.load();
203
+ await store.set('key1', 'value1');
204
+ await store.set('key2', 'value2');
205
+ assert.strictEqual(store.get('key1'), 'value1');
206
+ assert.strictEqual(store.get('key2'), 'value2');
207
+ await store.clear();
208
+ assert.strictEqual(store.get('key1'), undefined);
209
+ assert.strictEqual(store.get('key2'), undefined);
210
+ // Verify cleared state persists
211
+ const store2 = new interfaces_1.FileSessionStore(testFilePath);
212
+ await store2.load();
213
+ assert.strictEqual(store2.get('key1'), undefined);
214
+ });
215
+ test('FileSessionStore load is idempotent', async () => {
216
+ const store = new interfaces_1.FileSessionStore(testFilePath);
217
+ await store.load();
218
+ await store.set('key', 'original');
219
+ // Calling load again should not reset state
220
+ await store.load();
221
+ assert.strictEqual(store.get('key'), 'original');
222
+ });
223
+ });
224
+ // =============================================================================
225
+ // DirectorySessionStore Tests (one file per session entry)
226
+ // =============================================================================
227
+ suite('Runtime Interfaces - DirectorySessionStore', () => {
228
+ // session.ts persists the whole map under a single record-valued logical key.
229
+ const KEY = 'agentide.providerSessions.v1';
230
+ let tempDir;
231
+ let dir;
232
+ setup(async () => {
233
+ tempDir = await fs_1.promises.mkdtemp(path.join(os.tmpdir(), 'agentide-dirstore-'));
234
+ dir = path.join(tempDir, 'provider-sessions');
235
+ });
236
+ teardown(async () => {
237
+ try {
238
+ await fs_1.promises.rm(tempDir, { recursive: true, force: true });
239
+ }
240
+ catch {
241
+ // Ignore cleanup errors
242
+ }
243
+ });
244
+ const jsonFiles = async () => (await fs_1.promises.readdir(dir)).filter((f) => f.endsWith('.json'));
245
+ test('stores each entry in its own file and round-trips the merged map', async () => {
246
+ const store = new interfaces_1.DirectorySessionStore(dir);
247
+ await store.set(KEY, { a: { id: 1 }, b: { id: 2 } });
248
+ assert.strictEqual((await jsonFiles()).length, 2);
249
+ // A fresh instance loads the sharded files back into the merged map.
250
+ const store2 = new interfaces_1.DirectorySessionStore(dir);
251
+ assert.deepStrictEqual(store2.get(KEY), { a: { id: 1 }, b: { id: 2 } });
252
+ });
253
+ test('writes only changed entries and deletes removed ones', async () => {
254
+ const store = new interfaces_1.DirectorySessionStore(dir);
255
+ await store.set(KEY, { a: { id: 1 }, b: { id: 2 } });
256
+ // Drop b (as a prune would), keep a.
257
+ await store.set(KEY, { a: { id: 1 } });
258
+ assert.strictEqual((await jsonFiles()).length, 1);
259
+ const store2 = new interfaces_1.DirectorySessionStore(dir);
260
+ assert.deepStrictEqual(store2.get(KEY), { a: { id: 1 } });
261
+ });
262
+ test('migrates a legacy single-file store on first load', async () => {
263
+ // Legacy FileSessionStore layout: { <logicalKey>: { <entryKey>: value } }
264
+ await fs_1.promises.mkdir(tempDir, { recursive: true });
265
+ await fs_1.promises.writeFile(`${dir}.json`, JSON.stringify({ [KEY]: { old: { id: 9 } } }), 'utf-8');
266
+ const store = new interfaces_1.DirectorySessionStore(dir);
267
+ assert.deepStrictEqual(store.get(KEY), { old: { id: 9 } });
268
+ // A subsequent set persists the imported entries as shard files.
269
+ await store.set(KEY, { old: { id: 9 }, fresh: { id: 10 } });
270
+ assert.strictEqual((await jsonFiles()).length, 2);
271
+ });
272
+ });
273
+ // =============================================================================
274
+ // Config Provider Tests
275
+ // =============================================================================
276
+ suite('Runtime Interfaces - ConfigProvider', () => {
277
+ test('StaticConfigProvider get returns configured values', () => {
278
+ const provider = new interfaces_1.StaticConfigProvider({
279
+ 'agentide.claude.maxThinkingTokens': 2048,
280
+ 'agentide.permissions.fileAccess': 'workspace-write',
281
+ });
282
+ assert.strictEqual(provider.get('agentide', 'claude.maxThinkingTokens'), 2048);
283
+ assert.strictEqual(provider.get('agentide', 'permissions.fileAccess'), 'workspace-write');
284
+ });
285
+ test('StaticConfigProvider get returns default for missing key', () => {
286
+ const provider = new interfaces_1.StaticConfigProvider({});
287
+ assert.strictEqual(provider.get('agentide', 'missing.key'), undefined);
288
+ assert.strictEqual(provider.get('agentide', 'missing.key', 'default'), 'default');
289
+ });
290
+ test('StaticConfigProvider getCustomProviders returns configured providers', () => {
291
+ const customProviders = {
292
+ 'openrouter': {
293
+ baseUrl: 'https://openrouter.ai/api/v1',
294
+ overrideOpenAIBaseUrl: 'https://openrouter.ai/api/v1',
295
+ },
296
+ };
297
+ const provider = new interfaces_1.StaticConfigProvider({}, customProviders);
298
+ const result = provider.getCustomProviders();
299
+ assert.deepStrictEqual(result, customProviders);
300
+ });
301
+ test('StaticConfigProvider getEngineSettings returns configured settings', () => {
302
+ const engineSettings = {
303
+ claudeMaxThinkingTokens: 4096,
304
+ claudeCheapModel: 'claude-haiku-4-5-20251001',
305
+ };
306
+ const provider = new interfaces_1.StaticConfigProvider({}, {}, engineSettings);
307
+ const result = provider.getEngineSettings();
308
+ assert.deepStrictEqual(result, engineSettings);
309
+ });
310
+ test('StaticConfigProvider returns empty defaults', () => {
311
+ const provider = new interfaces_1.StaticConfigProvider();
312
+ assert.deepStrictEqual(provider.getCustomProviders(), {});
313
+ assert.deepStrictEqual(provider.getEngineSettings(), {});
314
+ });
315
+ });
316
+ // =============================================================================
317
+ // Integration Tests
318
+ // =============================================================================
319
+ suite('Runtime Interfaces - Integration', () => {
320
+ test('MemorySessionStore can be used for eval mode (fresh state)', async () => {
321
+ const store = new interfaces_1.MemorySessionStore();
322
+ // Simulate session 1
323
+ await store.set('session-1', { threadId: 'abc123' });
324
+ // Clear for fresh state (eval mode)
325
+ store.clear();
326
+ // Session should be gone
327
+ assert.strictEqual(store.get('session-1'), undefined);
328
+ });
329
+ test('AutoApprovePermissionHandler is suitable for eval mode', async () => {
330
+ const handler = new interfaces_1.AutoApprovePermissionHandler();
331
+ // All permissions should be auto-approved
332
+ const dangerous = await handler.requestPermission({ toolName: 'Bash', toolInput: { command: 'rm -rf /' } });
333
+ assert.strictEqual(dangerous.behavior, 'allow');
334
+ const write = await handler.requestPermission({ toolName: 'Write', toolInput: { path: '/etc/passwd' } });
335
+ assert.strictEqual(write.behavior, 'allow');
336
+ });
337
+ test('StaticConfigProvider can override VS Code settings', () => {
338
+ // This simulates eval mode where we might want different settings
339
+ const evalConfig = new interfaces_1.StaticConfigProvider({
340
+ 'agentide.permissions.fileAccess': 'full',
341
+ }, {}, {
342
+ claudeMaxThinkingTokens: 8192,
343
+ claudeCheapModel: 'claude-haiku-4-5-20251001',
344
+ });
345
+ assert.strictEqual(evalConfig.get('agentide', 'permissions.fileAccess'), 'full');
346
+ assert.strictEqual(evalConfig.getEngineSettings().claudeMaxThinkingTokens, 8192);
347
+ assert.strictEqual(evalConfig.getEngineSettings().claudeCheapModel, 'claude-haiku-4-5-20251001');
348
+ });
349
+ });
@@ -0,0 +1,72 @@
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
+ const assert = __importStar(require("assert"));
40
+ const scheduledFleetStorage_1 = require("../analytics/dashboard/scheduledFleetStorage");
41
+ suite('scheduledFleetStorage', () => {
42
+ test('parses vscode-chat-session local resource', () => {
43
+ const sessionId = (0, scheduledFleetStorage_1.parseSessionIdFromChatResource)('vscode-chat-session://local/MzY3MThiMzgtZjY1ZC00OWEyLTkzYjUtYTNmYWNhZDgyNmZm');
44
+ assert.strictEqual(sessionId, '36718b38-f65d-49a2-93b5-a3facad826ff');
45
+ });
46
+ test('buildChatSessionResourceFromSessionId round-trips with parse', () => {
47
+ const id = '36718b38-f65d-49a2-93b5-a3facad826ff';
48
+ const resource = (0, scheduledFleetStorage_1.buildChatSessionResourceFromSessionId)(id);
49
+ assert.strictEqual((0, scheduledFleetStorage_1.parseSessionIdFromChatResource)(resource), id);
50
+ });
51
+ test('merges enrichment hints preferring newest runAt per session', () => {
52
+ const merged = (0, scheduledFleetStorage_1.mergeScheduledSnapshots)([{
53
+ id: 'live-1',
54
+ sessionId: 'fb53245a-7ce9-4131-b240-cac895c32c38',
55
+ sessionResource: 'vscode-chat-session://local/x',
56
+ messageText: 'live',
57
+ runAt: 100,
58
+ model: 'agentide-litellm::litellm/claude-opus-4-7',
59
+ }], [{
60
+ id: 'db-1',
61
+ sessionId: 'fb53245a-7ce9-4131-b240-cac895c32c38',
62
+ sessionResource: 'vscode-chat-session://local/x',
63
+ messageText: 'fired one-shot',
64
+ runAt: 200,
65
+ model: 'agentide-cursor::auto',
66
+ engine: 'cursor',
67
+ }]);
68
+ assert.strictEqual(merged.length, 1);
69
+ assert.strictEqual(merged[0].model, 'agentide-cursor::auto');
70
+ assert.strictEqual(merged[0].engine, 'cursor');
71
+ });
72
+ });
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Serve Hardening Test Suite
4
+ *
5
+ * Pure-helper tests: state-dir resolution, identity headers, CORS, turn limiting, body cap.
6
+ * Auth and credential checking are the deploy layer's responsibility — not tested here.
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 os = __importStar(require("os"));
45
+ const path = __importStar(require("path"));
46
+ const stream_1 = require("stream");
47
+ const serve_hardening_1 = require("../cli/serve-hardening");
48
+ suite('serve-hardening: resolveStateDir', () => {
49
+ test('explicit --state-dir wins and is absolute and non-ephemeral', () => {
50
+ const r = (0, serve_hardening_1.resolveStateDir)('./state', {});
51
+ assert.strictEqual(r.ephemeral, false);
52
+ assert.ok(path.isAbsolute(r.dir));
53
+ assert.ok(r.dir.endsWith(`${path.sep}state`));
54
+ });
55
+ test('AGENTHIPPO_HOME is used when no --state-dir', () => {
56
+ const r = (0, serve_hardening_1.resolveStateDir)(undefined, { AGENTHIPPO_HOME: '/data/.agent-hippo' });
57
+ assert.strictEqual(r.ephemeral, false);
58
+ assert.strictEqual(r.dir, path.join('/data/.agent-hippo', 'serve-state'));
59
+ });
60
+ test('falls back to tmpdir and flags ephemeral', () => {
61
+ const r = (0, serve_hardening_1.resolveStateDir)(undefined, {});
62
+ assert.strictEqual(r.ephemeral, true);
63
+ assert.ok(r.dir.startsWith(os.tmpdir()));
64
+ });
65
+ });
66
+ suite('serve-hardening: resolveBindHost', () => {
67
+ test('defaults to loopback', () => {
68
+ assert.strictEqual((0, serve_hardening_1.resolveBindHost)(undefined, {}), serve_hardening_1.DEFAULT_BIND_HOST);
69
+ assert.strictEqual(serve_hardening_1.DEFAULT_BIND_HOST, '127.0.0.1');
70
+ });
71
+ test('explicit --host wins over env', () => {
72
+ assert.strictEqual((0, serve_hardening_1.resolveBindHost)('0.0.0.0', { AGENTHIPPO_SERVE_HOST: '10.0.0.1' }), '0.0.0.0');
73
+ });
74
+ test('AGENTHIPPO_SERVE_HOST used when no flag', () => {
75
+ assert.strictEqual((0, serve_hardening_1.resolveBindHost)(undefined, { AGENTHIPPO_SERVE_HOST: '0.0.0.0' }), '0.0.0.0');
76
+ });
77
+ });
78
+ suite('serve-hardening: clientIp', () => {
79
+ const reqWith = (headers, remote = '203.0.113.9') => ({ headers, socket: { remoteAddress: remote } });
80
+ test('falls back to socket address with no XFF', () => {
81
+ assert.strictEqual((0, serve_hardening_1.clientIp)(reqWith({})), '203.0.113.9');
82
+ });
83
+ test('uses the right-most XFF entry (the IP the trusted proxy observed)', () => {
84
+ assert.strictEqual((0, serve_hardening_1.clientIp)(reqWith({ 'x-forwarded-for': 'evil-spoof, 198.51.100.7' })), '198.51.100.7');
85
+ });
86
+ });
87
+ suite('serve-hardening: RateLimiter', () => {
88
+ test('allows up to the cap within a window then rejects', () => {
89
+ const lim = new serve_hardening_1.RateLimiter(2, 60_000);
90
+ const t0 = 1_000;
91
+ assert.strictEqual(lim.tryConsume('k', t0), true);
92
+ assert.strictEqual(lim.tryConsume('k', t0), true);
93
+ assert.strictEqual(lim.tryConsume('k', t0), false);
94
+ });
95
+ test('window resets after it elapses', () => {
96
+ const lim = new serve_hardening_1.RateLimiter(1, 1_000);
97
+ assert.strictEqual(lim.tryConsume('k', 0), true);
98
+ assert.strictEqual(lim.tryConsume('k', 500), false);
99
+ assert.strictEqual(lim.tryConsume('k', 1_001), true);
100
+ });
101
+ test('separate keys have separate budgets', () => {
102
+ const lim = new serve_hardening_1.RateLimiter(1);
103
+ assert.strictEqual(lim.tryConsume('a'), true);
104
+ assert.strictEqual(lim.tryConsume('b'), true);
105
+ assert.strictEqual(lim.tryConsume('a'), false);
106
+ });
107
+ test('zero / negative disables the limiter', () => {
108
+ const lim = new serve_hardening_1.RateLimiter(0);
109
+ for (let i = 0; i < 100; i++) {
110
+ assert.strictEqual(lim.tryConsume('k'), true);
111
+ }
112
+ });
113
+ });
114
+ suite('serve-hardening: resolveUserId', () => {
115
+ test('X-Agent-User header wins over body', () => {
116
+ const id = (0, serve_hardening_1.resolveUserId)({ 'x-agent-user': 'alice' }, { user_id: 'bob' });
117
+ assert.strictEqual(id, 'alice');
118
+ });
119
+ test('Databricks X-Forwarded-Email', () => {
120
+ assert.strictEqual((0, serve_hardening_1.resolveUserId)({ 'x-forwarded-email': 'priya@meridian.com' }, undefined), 'priya@meridian.com');
121
+ });
122
+ test('Cloud Run IAP prefixed value is stripped to the email', () => {
123
+ const id = (0, serve_hardening_1.resolveUserId)({ 'x-goog-authenticated-user-email': 'accounts.google.com:marco@meridian.com' }, undefined);
124
+ assert.strictEqual(id, 'marco@meridian.com');
125
+ });
126
+ test('Cloudflare Access header', () => {
127
+ assert.strictEqual((0, serve_hardening_1.resolveUserId)({ 'cf-access-authenticated-user-email': 'susan@meridian.com' }, undefined), 'susan@meridian.com');
128
+ });
129
+ test('falls back to body.user_id when no header', () => {
130
+ assert.strictEqual((0, serve_hardening_1.resolveUserId)({}, { user_id: 'bob' }), 'bob');
131
+ });
132
+ test('undefined when nothing present', () => {
133
+ assert.strictEqual((0, serve_hardening_1.resolveUserId)({}, undefined), undefined);
134
+ assert.strictEqual((0, serve_hardening_1.resolveUserId)({}, { user_id: ' ' }), undefined);
135
+ });
136
+ });
137
+ suite('serve-hardening: corsHeaders', () => {
138
+ test('always wide-open (serve is always behind a proxy)', () => {
139
+ const h = (0, serve_hardening_1.corsHeaders)();
140
+ assert.strictEqual(h['Access-Control-Allow-Origin'], '*');
141
+ assert.ok(h['Access-Control-Allow-Methods']);
142
+ assert.ok(h['Access-Control-Allow-Headers']);
143
+ });
144
+ });
145
+ suite('serve-hardening: TurnLimiter', () => {
146
+ test('allows up to the cap then rejects', () => {
147
+ const lim = new serve_hardening_1.TurnLimiter(2);
148
+ assert.strictEqual(lim.tryConsume('s1'), true);
149
+ assert.strictEqual(lim.tryConsume('s1'), true);
150
+ assert.strictEqual(lim.tryConsume('s1'), false);
151
+ });
152
+ test('separate sessions have separate budgets', () => {
153
+ const lim = new serve_hardening_1.TurnLimiter(1);
154
+ assert.strictEqual(lim.tryConsume('s1'), true);
155
+ assert.strictEqual(lim.tryConsume('s2'), true);
156
+ assert.strictEqual(lim.tryConsume('s1'), false);
157
+ });
158
+ test('zero / negative cap disables the limiter', () => {
159
+ const lim = new serve_hardening_1.TurnLimiter(0);
160
+ for (let i = 0; i < 100; i++) {
161
+ assert.strictEqual(lim.tryConsume('s'), true);
162
+ }
163
+ });
164
+ test('reset clears a session', () => {
165
+ const lim = new serve_hardening_1.TurnLimiter(1);
166
+ assert.strictEqual(lim.tryConsume('s1'), true);
167
+ assert.strictEqual(lim.tryConsume('s1'), false);
168
+ lim.reset('s1');
169
+ assert.strictEqual(lim.tryConsume('s1'), true);
170
+ });
171
+ });
172
+ function fakeReq(body) {
173
+ const stream = new stream_1.PassThrough();
174
+ stream.end(Buffer.from(body, 'utf8'));
175
+ return stream;
176
+ }
177
+ suite('serve-hardening: readBodyWithCap', () => {
178
+ test('reads a small body', async () => {
179
+ const text = await (0, serve_hardening_1.readBodyWithCap)(fakeReq('{"message":"hi"}'), 1024);
180
+ assert.strictEqual(text, '{"message":"hi"}');
181
+ });
182
+ test('rejects an oversized body with tooLarge flag', async () => {
183
+ const big = 'x'.repeat(50);
184
+ await assert.rejects(() => (0, serve_hardening_1.readBodyWithCap)(fakeReq(big), 10), (err) => {
185
+ assert.strictEqual(err.tooLarge, true);
186
+ return true;
187
+ });
188
+ });
189
+ test('default cap is 1 MiB', () => {
190
+ assert.strictEqual(serve_hardening_1.DEFAULT_MAX_BODY_BYTES, 1024 * 1024);
191
+ });
192
+ });