@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,755 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) AgentHippo.ai. All rights reserved.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /*---------------------------------------------------------------------------------------------
6
+ * Store - Publish and install from a configurable GitHub repo.
7
+ *
8
+ * Design:
9
+ * - Default repo: github.com/agenthippoai/agenthippo-store (configurable via setting)
10
+ * - Structure: agent-packs/, skills/, mcp/, engines/
11
+ * - Versioning: Path-prefixed tags (e.g., agent-packs/code-review/v1.0.0)
12
+ * - Publishing: Fork → Branch → PR workflow
13
+ * - Auth: Only required for publishing (PR submission)
14
+ *--------------------------------------------------------------------------------------------*/
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.formatStoreUrl = exports.parseStoreUrl = exports.STORE_CONFIG = exports.getRegistry = exports.formatStorePullRequestError = exports.isForkOfStoreRepo = exports.getTagsApiUrl = exports.getStoreIndexUrl = exports.getStorePath = exports.DEFAULT_STORE_BRANCH = exports.DEFAULT_STORE_REPO = exports.DEFAULT_STORE_OWNER = exports.STORE_PATHS = exports.STORE_ICONS = void 0;
17
+ exports.listStoreVersions = listStoreVersions;
18
+ exports.getLatestStoreVersion = getLatestStoreVersion;
19
+ exports.downloadFromStore = downloadFromStore;
20
+ exports.downloadFromExternalGitHub = downloadFromExternalGitHub;
21
+ exports.canPublishDirectlyToStore = canPublishDirectlyToStore;
22
+ exports.publishToStore = publishToStore;
23
+ exports.parseGitHubUrl = parseGitHubUrl;
24
+ exports.detectArtifactType = detectArtifactType;
25
+ exports.isStoreUrl = isStoreUrl;
26
+ exports.listStoreIndex = listStoreIndex;
27
+ const utils_1 = require("../utils");
28
+ const github_1 = require("../agentpack/github");
29
+ // Import shared types and utilities for local use
30
+ const shared_1 = require("./shared");
31
+ // Re-export shared types and utilities for consumers of this module
32
+ // Note: parseStoreUrl, parseGitHubUrl, isStoreUrl, formatStoreUrl are defined locally as wrappers
33
+ var shared_2 = require("./shared");
34
+ Object.defineProperty(exports, "STORE_ICONS", { enumerable: true, get: function () { return shared_2.STORE_ICONS; } });
35
+ Object.defineProperty(exports, "STORE_PATHS", { enumerable: true, get: function () { return shared_2.STORE_PATHS; } });
36
+ Object.defineProperty(exports, "DEFAULT_STORE_OWNER", { enumerable: true, get: function () { return shared_2.DEFAULT_STORE_OWNER; } });
37
+ Object.defineProperty(exports, "DEFAULT_STORE_REPO", { enumerable: true, get: function () { return shared_2.DEFAULT_STORE_REPO; } });
38
+ Object.defineProperty(exports, "DEFAULT_STORE_BRANCH", { enumerable: true, get: function () { return shared_2.DEFAULT_STORE_BRANCH; } });
39
+ Object.defineProperty(exports, "getStorePath", { enumerable: true, get: function () { return shared_2.getStorePath; } });
40
+ Object.defineProperty(exports, "getStoreIndexUrl", { enumerable: true, get: function () { return shared_2.getStoreIndexUrl; } });
41
+ Object.defineProperty(exports, "getTagsApiUrl", { enumerable: true, get: function () { return shared_2.getTagsApiUrl; } });
42
+ Object.defineProperty(exports, "isForkOfStoreRepo", { enumerable: true, get: function () { return shared_2.isForkOfStoreRepo; } });
43
+ Object.defineProperty(exports, "formatStorePullRequestError", { enumerable: true, get: function () { return shared_2.formatStorePullRequestError; } });
44
+ // Re-export registry for convenience
45
+ var index_1 = require("../registry/index");
46
+ Object.defineProperty(exports, "getRegistry", { enumerable: true, get: function () { return index_1.getRegistry; } });
47
+ // -----------------------------------------------------------------------------
48
+ // Configuration (VS Code-specific: reads from settings)
49
+ // -----------------------------------------------------------------------------
50
+ /**
51
+ * Get the configured store repo. Reads from VS Code settings if available.
52
+ */
53
+ function getStoreRepo() {
54
+ const repoEnv = process.env.AGENTHIPPO_STORE_REPO?.trim();
55
+ if (repoEnv) {
56
+ const match = repoEnv.match(/^(?:https?:\/\/github\.com\/)?([^/]+)\/([^/]+?)(?:\.git)?$/);
57
+ if (match) {
58
+ return { owner: match[1], repo: match[2] };
59
+ }
60
+ const parts = repoEnv.split('/').filter(Boolean);
61
+ if (parts.length === 2) {
62
+ return { owner: parts[0], repo: parts[1] };
63
+ }
64
+ }
65
+ try {
66
+ // Try to read from VS Code settings (lazy load to avoid bundling issues)
67
+ // eslint-disable-next-line no-eval
68
+ const vscode = eval('require')('vscode');
69
+ const config = vscode.workspace.getConfiguration('agentide');
70
+ const storeUrl = config.get('storeRepo');
71
+ if (storeUrl) {
72
+ // Parse owner/repo format
73
+ const match = storeUrl.match(/^(?:https?:\/\/github\.com\/)?([^/]+)\/([^/]+?)(?:\.git)?$/);
74
+ if (match) {
75
+ return { owner: match[1], repo: match[2] };
76
+ }
77
+ }
78
+ }
79
+ catch {
80
+ // Not in VS Code context, use default
81
+ }
82
+ return { owner: shared_1.DEFAULT_STORE_OWNER, repo: shared_1.DEFAULT_STORE_REPO };
83
+ }
84
+ exports.STORE_CONFIG = {
85
+ get owner() { return getStoreRepo().owner; },
86
+ get repo() { return getStoreRepo().repo; },
87
+ defaultBranch: shared_1.DEFAULT_STORE_BRANCH,
88
+ paths: shared_1.STORE_PATHS,
89
+ };
90
+ // StoreVersion is re-exported from shared.ts
91
+ // -----------------------------------------------------------------------------
92
+ // Version Management
93
+ // -----------------------------------------------------------------------------
94
+ /**
95
+ * List available versions for an artifact in the store.
96
+ * Tries unauthenticated first, prompts for auth only if needed.
97
+ */
98
+ async function listStoreVersions(type, slug) {
99
+ const prefix = `${(0, shared_1.getStorePath)(type)}/${slug}/v`;
100
+ const url = `https://api.github.com/repos/${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}/git/refs/tags`;
101
+ // Try unauthenticated first
102
+ let response = await fetch(url, {
103
+ headers: {
104
+ Accept: 'application/vnd.github.v3+json',
105
+ 'User-Agent': 'AgentIDE',
106
+ },
107
+ });
108
+ // If failed, try with auth
109
+ if (!response.ok && (response.status === 401 || response.status === 403 || response.status === 429)) {
110
+ const token = await (0, github_1.getGitHubToken)();
111
+ response = await fetch(url, {
112
+ headers: {
113
+ Authorization: `Bearer ${token}`,
114
+ Accept: 'application/vnd.github.v3+json',
115
+ 'User-Agent': 'AgentIDE',
116
+ },
117
+ });
118
+ }
119
+ if (!response.ok) {
120
+ if (response.status === 404) {
121
+ return []; // No tags yet
122
+ }
123
+ throw new Error(`Failed to list tags: ${response.statusText}`);
124
+ }
125
+ const refs = (await response.json());
126
+ // Filter and parse versions
127
+ const versions = [];
128
+ for (const { ref } of refs) {
129
+ const tagName = ref.replace('refs/tags/', '');
130
+ if (tagName.startsWith(prefix)) {
131
+ const version = tagName.slice(prefix.length - 1); // Keep the 'v'
132
+ versions.push({
133
+ version: version.replace(/^v/, ''),
134
+ tagName,
135
+ isPrerelease: /-(alpha|beta|rc|pre)/.test(version),
136
+ });
137
+ }
138
+ }
139
+ // Sort by version (newest first)
140
+ return versions.sort((a, b) => {
141
+ // Simple semver comparison (could use semver library for proper comparison)
142
+ return b.version.localeCompare(a.version, undefined, { numeric: true });
143
+ });
144
+ }
145
+ /**
146
+ * Get the latest version for an artifact.
147
+ */
148
+ async function getLatestStoreVersion(type, slug, includePrerelease = false) {
149
+ const versions = await listStoreVersions(type, slug);
150
+ if (includePrerelease) {
151
+ return versions[0] || null;
152
+ }
153
+ return versions.find(v => !v.isPrerelease) || null;
154
+ }
155
+ // -----------------------------------------------------------------------------
156
+ // Install from Store (Tarball, Unauthenticated First)
157
+ // -----------------------------------------------------------------------------
158
+ const zlib_1 = require("zlib");
159
+ /**
160
+ * Parse a tar archive into a map of path → content.
161
+ */
162
+ function parseTar(data) {
163
+ const files = new Map();
164
+ let offset = 0;
165
+ while (offset < data.length - 512) {
166
+ const header = data.subarray(offset, offset + 512);
167
+ if (header.every(b => b === 0)) {
168
+ break;
169
+ }
170
+ const name = header.subarray(0, 100).toString('utf-8').replace(/\0/g, '').trim();
171
+ const sizeOctal = header.subarray(124, 136).toString('utf-8').replace(/\0/g, '').trim();
172
+ const typeFlag = header[156];
173
+ if (!name) {
174
+ offset += 512;
175
+ continue;
176
+ }
177
+ const size = parseInt(sizeOctal, 8) || 0;
178
+ offset += 512;
179
+ if (typeFlag === 0 || typeFlag === 48) {
180
+ files.set(name, Buffer.from(data.subarray(offset, offset + size)));
181
+ }
182
+ offset += Math.ceil(size / 512) * 512;
183
+ }
184
+ return files;
185
+ }
186
+ /**
187
+ * Download files for an artifact from the store.
188
+ * Uses tarball download, tries unauthenticated first.
189
+ */
190
+ async function downloadFromStore(options, outputChannel) {
191
+ const { type, slug, version, includePrerelease } = options;
192
+ const typePath = (0, shared_1.getStorePath)(type);
193
+ // Resolve version
194
+ let targetRef;
195
+ if (version === 'main' || version === 'latest') {
196
+ // Explicit main branch request
197
+ targetRef = exports.STORE_CONFIG.defaultBranch;
198
+ if (outputChannel) {
199
+ (0, utils_1.logInfo)(outputChannel, `[Store] Using ${targetRef} branch (latest)`);
200
+ }
201
+ }
202
+ else if (version) {
203
+ targetRef = `${typePath}/${slug}/v${version.replace(/^v/, '')}`;
204
+ }
205
+ else {
206
+ const latest = await getLatestStoreVersion(type, slug, includePrerelease);
207
+ if (latest) {
208
+ targetRef = latest.tagName;
209
+ if (outputChannel) {
210
+ (0, utils_1.logInfo)(outputChannel, `[Store] Using latest version: ${latest.version}`);
211
+ }
212
+ }
213
+ else {
214
+ // No tags found - try to download from main branch
215
+ targetRef = exports.STORE_CONFIG.defaultBranch;
216
+ if (outputChannel) {
217
+ (0, utils_1.logInfo)(outputChannel, `[Store] No version tags found, using ${targetRef} branch`);
218
+ }
219
+ }
220
+ }
221
+ if (outputChannel) {
222
+ (0, utils_1.logInfo)(outputChannel, `[Store] Downloading ${type}/${slug} at ${targetRef}`);
223
+ }
224
+ // Download tarball (unauthenticated first)
225
+ const encodedRef = encodeURIComponent(targetRef);
226
+ const url = `https://api.github.com/repos/${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}/tarball/${encodedRef}`;
227
+ let response = await fetch(url, {
228
+ headers: {
229
+ 'User-Agent': 'AgentIDE',
230
+ Accept: 'application/vnd.github.v3+json',
231
+ },
232
+ redirect: 'follow',
233
+ });
234
+ // If failed, try with auth
235
+ if (!response.ok) {
236
+ if (response.status === 401 || response.status === 403 || response.status === 404 || response.status === 429) {
237
+ if (outputChannel) {
238
+ (0, utils_1.logInfo)(outputChannel, `[Store] Requires authentication, signing in...`);
239
+ }
240
+ const token = await (0, github_1.getGitHubToken)();
241
+ response = await fetch(url, {
242
+ headers: {
243
+ 'User-Agent': 'AgentIDE',
244
+ Accept: 'application/vnd.github.v3+json',
245
+ Authorization: `Bearer ${token}`,
246
+ },
247
+ redirect: 'follow',
248
+ });
249
+ }
250
+ if (!response.ok) {
251
+ throw new Error(`Version ${version || 'latest'} not found for ${type} "${slug}"`);
252
+ }
253
+ }
254
+ // Download and decompress
255
+ const gzipped = Buffer.from(await response.arrayBuffer());
256
+ const tarData = (0, zlib_1.gunzipSync)(gzipped);
257
+ const allFiles = parseTar(tarData);
258
+ // Filter to files in our artifact's folder
259
+ const artifactPath = `${typePath}/${slug}/`;
260
+ const result = [];
261
+ for (const [fullPath, content] of allFiles) {
262
+ // Strip top-level directory (e.g., "repo-commit/")
263
+ const slashIndex = fullPath.indexOf('/');
264
+ if (slashIndex === -1) {
265
+ continue;
266
+ }
267
+ const relativePath = fullPath.slice(slashIndex + 1);
268
+ if (relativePath.startsWith(artifactPath)) {
269
+ const artifactRelativePath = relativePath.slice(artifactPath.length);
270
+ if (artifactRelativePath) {
271
+ result.push({ path: artifactRelativePath, content });
272
+ if (outputChannel) {
273
+ (0, utils_1.logInfo)(outputChannel, `[Store] ↓ ${artifactRelativePath}`);
274
+ }
275
+ }
276
+ }
277
+ }
278
+ return result;
279
+ }
280
+ /**
281
+ * Download files from any GitHub repository.
282
+ * Used for installing from external sources like anthropics/skills.
283
+ */
284
+ async function downloadFromExternalGitHub(options, outputChannel) {
285
+ const { owner, repo, ref = 'main', path } = options;
286
+ if (outputChannel) {
287
+ (0, utils_1.logInfo)(outputChannel, `[GitHub] Downloading ${owner}/${repo}${path ? `/${path}` : ''} at ${ref}`);
288
+ }
289
+ // Download tarball
290
+ const encodedRef = encodeURIComponent(ref);
291
+ const url = `https://api.github.com/repos/${owner}/${repo}/tarball/${encodedRef}`;
292
+ let response = await fetch(url, {
293
+ headers: {
294
+ 'User-Agent': 'AgentIDE',
295
+ Accept: 'application/vnd.github.v3+json',
296
+ },
297
+ redirect: 'follow',
298
+ });
299
+ // If failed, try with auth
300
+ if (!response.ok) {
301
+ if (response.status === 401 || response.status === 403 || response.status === 404 || response.status === 429) {
302
+ if (outputChannel) {
303
+ (0, utils_1.logInfo)(outputChannel, `[GitHub] Requires authentication, signing in...`);
304
+ }
305
+ const token = await (0, github_1.getGitHubToken)();
306
+ response = await fetch(url, {
307
+ headers: {
308
+ 'User-Agent': 'AgentIDE',
309
+ Accept: 'application/vnd.github.v3+json',
310
+ Authorization: `Bearer ${token}`,
311
+ },
312
+ redirect: 'follow',
313
+ });
314
+ }
315
+ if (!response.ok) {
316
+ throw new Error(`Failed to download from ${owner}/${repo}@${ref}: ${response.statusText}`);
317
+ }
318
+ }
319
+ const buffer = Buffer.from(await response.arrayBuffer());
320
+ const decompressed = (0, zlib_1.gunzipSync)(buffer);
321
+ const tarFiles = parseTar(decompressed);
322
+ // Find root directory in tarball (GitHub adds prefix like "repo-sha/")
323
+ let rootPrefix = '';
324
+ for (const name of tarFiles.keys()) {
325
+ if (name.includes('/')) {
326
+ rootPrefix = name.split('/')[0] + '/';
327
+ break;
328
+ }
329
+ }
330
+ // If path specified, filter to only files in that path
331
+ const pathPrefix = path ? `${rootPrefix}${path}/` : rootPrefix;
332
+ const result = [];
333
+ for (const [name, content] of tarFiles) {
334
+ if (name.startsWith(pathPrefix)) {
335
+ const relativePath = name.slice(pathPrefix.length);
336
+ if (relativePath && !relativePath.endsWith('/')) {
337
+ result.push({
338
+ path: relativePath,
339
+ content: content.toString('utf-8'),
340
+ });
341
+ }
342
+ }
343
+ }
344
+ if (result.length === 0) {
345
+ throw new Error(`No files found in ${owner}/${repo}${path ? `/${path}` : ''} at ${ref}`);
346
+ }
347
+ if (outputChannel) {
348
+ (0, utils_1.logInfo)(outputChannel, `[GitHub] Downloaded ${result.length} files`);
349
+ }
350
+ return result;
351
+ }
352
+ async function getRepoForkMetadata(owner, repo) {
353
+ const token = await (0, github_1.getGitHubToken)();
354
+ const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {
355
+ headers: {
356
+ Authorization: `Bearer ${token}`,
357
+ Accept: 'application/vnd.github.v3+json',
358
+ 'User-Agent': 'AgentIDE',
359
+ },
360
+ });
361
+ if (response.status === 404) {
362
+ return null;
363
+ }
364
+ if (!response.ok) {
365
+ throw new Error(`Failed to inspect repo ${owner}/${repo}: ${response.statusText}`);
366
+ }
367
+ const data = await response.json();
368
+ return {
369
+ fork: data.fork === true,
370
+ parentFullName: data.parent?.full_name,
371
+ };
372
+ }
373
+ function assertStoreFork(owner, repo, metadata) {
374
+ if ((0, shared_1.isForkOfStoreRepo)(metadata, exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo)) {
375
+ return;
376
+ }
377
+ throw new Error(`Your GitHub repo ${owner}/${repo} is not a fork of ${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}.\n\n` +
378
+ `Publishing requires a fork of the store repository. Either delete or rename ${owner}/${repo} ` +
379
+ `and retry (AgentIDE will create a proper fork), or fork ${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo} on GitHub.`);
380
+ }
381
+ /**
382
+ * Sync the fork's default branch with upstream when possible.
383
+ */
384
+ async function syncForkWithUpstream(forkOwner, forkRepo) {
385
+ const token = await (0, github_1.getGitHubToken)();
386
+ const response = await fetch(`https://api.github.com/repos/${forkOwner}/${forkRepo}/merge-upstream`, {
387
+ method: 'POST',
388
+ headers: {
389
+ Authorization: `Bearer ${token}`,
390
+ Accept: 'application/vnd.github.v3+json',
391
+ 'User-Agent': 'AgentIDE',
392
+ 'Content-Type': 'application/json',
393
+ },
394
+ body: JSON.stringify({ branch: exports.STORE_CONFIG.defaultBranch }),
395
+ });
396
+ // Best-effort: publish branches from upstream SHA even if sync fails.
397
+ if (response.ok || response.status === 409) {
398
+ return;
399
+ }
400
+ // Log but don't throw — the publish branch will be based on upstream SHA directly.
401
+ const errorBody = await response.text().catch(() => '');
402
+ console.warn(`[Store] Warning: fork sync returned ${response.status}: ${errorBody.slice(0, 200)}`);
403
+ }
404
+ /**
405
+ * Fork the central store repo if not already forked.
406
+ */
407
+ async function ensureFork() {
408
+ const token = await (0, github_1.getGitHubToken)();
409
+ const user = await (0, github_1.getGitHubUser)();
410
+ // Check if fork already exists
411
+ const existingFork = await (0, github_1.getRepo)(user.login, exports.STORE_CONFIG.repo);
412
+ if (existingFork) {
413
+ const metadata = await getRepoForkMetadata(user.login, exports.STORE_CONFIG.repo);
414
+ if (!metadata) {
415
+ throw new Error(`Fork repo not found: ${user.login}/${exports.STORE_CONFIG.repo}`);
416
+ }
417
+ assertStoreFork(user.login, exports.STORE_CONFIG.repo, metadata);
418
+ return existingFork;
419
+ }
420
+ // Check if source repo exists
421
+ const sourceRepo = await (0, github_1.getRepo)(exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo);
422
+ if (!sourceRepo) {
423
+ throw new Error(`Store repo not found: ${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}\n\n` +
424
+ `If using a custom store, ensure the repo exists and is accessible.\n` +
425
+ `Setting: agentide.storeRepo`);
426
+ }
427
+ // Create fork
428
+ const response = await fetch(`https://api.github.com/repos/${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}/forks`, {
429
+ method: 'POST',
430
+ headers: {
431
+ Authorization: `Bearer ${token}`,
432
+ Accept: 'application/vnd.github.v3+json',
433
+ 'User-Agent': 'AgentIDE',
434
+ },
435
+ });
436
+ if (!response.ok) {
437
+ const errorBody = await response.text().catch(() => '');
438
+ if (response.status === 403) {
439
+ throw new Error(`Cannot fork store: Permission denied.\n\n` +
440
+ `Ensure your GitHub token has the 'repo' scope.\n` +
441
+ `Try: Sign out and sign in again with GitHub.`);
442
+ }
443
+ if (response.status === 404) {
444
+ throw new Error(`Store repo not found: ${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}\n\n` +
445
+ `The repository may be private or doesn't exist.`);
446
+ }
447
+ throw new Error(`Failed to fork store: ${response.status} ${response.statusText}\n${errorBody}`);
448
+ }
449
+ const fork = (await response.json());
450
+ // Wait for fork to be ready (GitHub needs a moment)
451
+ await new Promise(resolve => setTimeout(resolve, 2000));
452
+ return fork;
453
+ }
454
+ /**
455
+ * Create (or reset) a publish branch on the fork from upstream's default branch.
456
+ */
457
+ async function ensurePublishBranch(forkOwner, forkRepo, branchName) {
458
+ const token = await (0, github_1.getGitHubToken)();
459
+ const baseSha = await (0, github_1.getBranchSha)(exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo, exports.STORE_CONFIG.defaultBranch);
460
+ const headers = {
461
+ Authorization: `Bearer ${token}`,
462
+ Accept: 'application/vnd.github.v3+json',
463
+ 'User-Agent': 'AgentIDE',
464
+ 'Content-Type': 'application/json',
465
+ };
466
+ const createResponse = await fetch(`https://api.github.com/repos/${forkOwner}/${forkRepo}/git/refs`, {
467
+ method: 'POST',
468
+ headers,
469
+ body: JSON.stringify({
470
+ ref: `refs/heads/${branchName}`,
471
+ sha: baseSha,
472
+ }),
473
+ });
474
+ if (createResponse.ok) {
475
+ return;
476
+ }
477
+ if (createResponse.status === 422) {
478
+ const patchResponse = await fetch(`https://api.github.com/repos/${forkOwner}/${forkRepo}/git/refs/heads/${encodeURIComponent(branchName)}`, {
479
+ method: 'PATCH',
480
+ headers,
481
+ body: JSON.stringify({ sha: baseSha, force: true }),
482
+ });
483
+ if (patchResponse.ok) {
484
+ return;
485
+ }
486
+ const patchError = await patchResponse.text();
487
+ throw new Error(`Failed to reset publish branch: ${patchResponse.status} ${patchError}`);
488
+ }
489
+ const error = await createResponse.text();
490
+ if (createResponse.status === 403 && error.includes('personal access token')) {
491
+ const orgHint = forkOwner === exports.STORE_CONFIG.owner
492
+ ? `\n\nIf this is an organization repo, authorize the token for SSO: GitHub → Settings → Developer settings → Personal access tokens → your token → Configure SSO → Authorize ${exports.STORE_CONFIG.owner}.`
493
+ : '';
494
+ throw new Error(`Failed to create publish branch: token cannot write to ${forkOwner}/${forkRepo}.${orgHint}`);
495
+ }
496
+ throw new Error(`Failed to create publish branch: ${createResponse.status} ${error}`);
497
+ }
498
+ /**
499
+ * Check whether the token has push access to a repo via the GitHub API permissions field.
500
+ */
501
+ async function verifyGitWriteAccess(owner, repo) {
502
+ const token = await (0, github_1.getGitHubToken)();
503
+ const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {
504
+ headers: {
505
+ Authorization: `Bearer ${token}`,
506
+ Accept: 'application/vnd.github.v3+json',
507
+ 'User-Agent': 'AgentIDE',
508
+ },
509
+ });
510
+ if (!response.ok) {
511
+ return false;
512
+ }
513
+ const data = await response.json();
514
+ return data.permissions?.push === true || data.permissions?.admin === true;
515
+ }
516
+ /**
517
+ * Whether the authenticated user can push directly to the configured store repo.
518
+ */
519
+ async function canPublishDirectlyToStore() {
520
+ return verifyGitWriteAccess(exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo);
521
+ }
522
+ /**
523
+ * Create a pull request into the store repo.
524
+ * @param head Branch name for same-repo PRs, or `owner:branch` for cross-repo PRs.
525
+ */
526
+ async function createPullRequest(head, title, body, forkOwnerForErrors) {
527
+ const token = await (0, github_1.getGitHubToken)();
528
+ const response = await fetch(`https://api.github.com/repos/${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}/pulls`, {
529
+ method: 'POST',
530
+ headers: {
531
+ Authorization: `Bearer ${token}`,
532
+ Accept: 'application/vnd.github.v3+json',
533
+ 'User-Agent': 'AgentIDE',
534
+ 'Content-Type': 'application/json',
535
+ },
536
+ body: JSON.stringify({
537
+ title,
538
+ body,
539
+ head,
540
+ base: exports.STORE_CONFIG.defaultBranch,
541
+ }),
542
+ });
543
+ if (!response.ok) {
544
+ const error = await response.text();
545
+ throw new Error((0, shared_1.formatStorePullRequestError)(error, exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo, forkOwnerForErrors));
546
+ }
547
+ const pr = (await response.json());
548
+ return { url: pr.html_url, number: pr.number };
549
+ }
550
+ /**
551
+ * Publish an artifact to the store.
552
+ * Maintainers with push access publish directly to the store repo; others use fork + PR.
553
+ */
554
+ async function publishToStore(options, outputChannel) {
555
+ const { type, slug, version, files, changelog } = options;
556
+ const typePath = (0, shared_1.getStorePath)(type);
557
+ const tagName = `${typePath}/${slug}/v${version}`;
558
+ const branchName = `publish-${type}-${slug}-v${version}`;
559
+ if (outputChannel) {
560
+ (0, utils_1.logInfo)(outputChannel, `[Store] Publishing ${type} "${slug}" v${version}...`);
561
+ }
562
+ const publishDirect = await canPublishDirectlyToStore();
563
+ let targetOwner;
564
+ let targetRepo;
565
+ let prHead;
566
+ let forkOwnerForErrors;
567
+ if (publishDirect) {
568
+ targetOwner = exports.STORE_CONFIG.owner;
569
+ targetRepo = exports.STORE_CONFIG.repo;
570
+ prHead = branchName;
571
+ if (outputChannel) {
572
+ (0, utils_1.logInfo)(outputChannel, `[Store] Publishing directly to ${targetOwner}/${targetRepo}...`);
573
+ }
574
+ }
575
+ else {
576
+ if (outputChannel) {
577
+ (0, utils_1.logInfo)(outputChannel, `[Store] Ensuring fork exists...`);
578
+ }
579
+ const fork = await ensureFork();
580
+ targetOwner = fork.owner.login;
581
+ targetRepo = fork.name;
582
+ prHead = `${fork.owner.login}:${branchName}`;
583
+ forkOwnerForErrors = fork.owner.login;
584
+ if (outputChannel) {
585
+ (0, utils_1.logInfo)(outputChannel, `[Store] Syncing fork with upstream...`);
586
+ }
587
+ await syncForkWithUpstream(fork.owner.login, fork.name);
588
+ }
589
+ if (outputChannel) {
590
+ (0, utils_1.logInfo)(outputChannel, `[Store] Creating branch: ${branchName}`);
591
+ }
592
+ await ensurePublishBranch(targetOwner, targetRepo, branchName);
593
+ if (outputChannel) {
594
+ (0, utils_1.logInfo)(outputChannel, `[Store] Committing ${files.length} files...`);
595
+ }
596
+ const filesToCommit = files.map(file => ({
597
+ path: `${typePath}/${slug}/${file.path}`,
598
+ content: file.content,
599
+ }));
600
+ await (0, github_1.commitMultipleFiles)(targetOwner, targetRepo, branchName, filesToCommit, `Add ${type}/${slug} v${version}`);
601
+ if (outputChannel) {
602
+ for (const file of files) {
603
+ (0, utils_1.logInfo)(outputChannel, `[Store] ✓ ${file.path}`);
604
+ }
605
+ }
606
+ if (outputChannel) {
607
+ (0, utils_1.logInfo)(outputChannel, `[Store] Creating pull request...`);
608
+ }
609
+ const prBody = `
610
+ ## New ${type}: ${slug} v${version}
611
+
612
+ ${changelog || 'No changelog provided.'}
613
+
614
+ ---
615
+ *Submitted via AgentIDE*
616
+ `;
617
+ const pr = await createPullRequest(prHead, `[${type}] Add ${slug} v${version}`, prBody, forkOwnerForErrors);
618
+ if (outputChannel) {
619
+ (0, utils_1.logInfo)(outputChannel, `[Store] OK Created PR: ${pr.url}`);
620
+ }
621
+ return {
622
+ prUrl: pr.url,
623
+ prNumber: pr.number,
624
+ tagName,
625
+ };
626
+ }
627
+ // -----------------------------------------------------------------------------
628
+ // URL Parsing
629
+ // -----------------------------------------------------------------------------
630
+ // -----------------------------------------------------------------------------
631
+ // URL Parsing and Type Detection
632
+ // -----------------------------------------------------------------------------
633
+ /**
634
+ * Parse any GitHub URL into components.
635
+ * Uses STORE_CONFIG to determine if URL points to the configured store repo.
636
+ */
637
+ function parseGitHubUrl(url) {
638
+ return (0, shared_1.parseGitHubUrl)(url, exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo);
639
+ }
640
+ /**
641
+ * Detect artifact type from a GitHub repo by checking for marker files.
642
+ * - agent.yaml → pack
643
+ * - SKILL.md → skill
644
+ * - .mcp.json or mcp.json → mcp
645
+ * - engine.manifest.json → engine
646
+ */
647
+ async function detectArtifactType(owner, repo, ref, path, outputChannel) {
648
+ const basePath = path ? `${path}/` : '';
649
+ const baseRef = ref || 'main';
650
+ const checkFile = async (filePath) => {
651
+ const url = `https://api.github.com/repos/${owner}/${repo}/contents/${basePath}${filePath}?ref=${baseRef}`;
652
+ try {
653
+ const response = await fetch(url, {
654
+ headers: {
655
+ Accept: 'application/vnd.github.v3+json',
656
+ 'User-Agent': 'AgentIDE',
657
+ },
658
+ });
659
+ return response.ok;
660
+ }
661
+ catch {
662
+ return false;
663
+ }
664
+ };
665
+ if (outputChannel) {
666
+ (0, utils_1.logInfo)(outputChannel, `[Store] Detecting artifact type for ${owner}/${repo}/${basePath}...`);
667
+ }
668
+ // Check in order of specificity
669
+ if (await checkFile('agent.yaml')) {
670
+ return 'pack';
671
+ }
672
+ if (await checkFile('SKILL.md')) {
673
+ return 'skill';
674
+ }
675
+ if (await checkFile('.mcp.json') || await checkFile('mcp.json')) {
676
+ return 'mcp';
677
+ }
678
+ if (await checkFile('engine.manifest.json')) {
679
+ return 'engine';
680
+ }
681
+ if (await checkFile('view.yaml') && await checkFile('panel-entry.yaml')) {
682
+ return 'view';
683
+ }
684
+ throw new Error(`Cannot detect artifact type in ${owner}/${repo}${path ? `/${path}` : ''}. Expected agent.yaml, SKILL.md, .mcp.json, engine.manifest.json, or view.yaml with panel-entry.yaml`);
685
+ }
686
+ /**
687
+ * Parse a store URL into components.
688
+ * Re-exports shared parseStoreUrl.
689
+ */
690
+ exports.parseStoreUrl = shared_1.parseStoreUrl;
691
+ /**
692
+ * Check if a URL looks like a store URL.
693
+ * Uses STORE_CONFIG to determine if URL points to the configured store repo.
694
+ */
695
+ function isStoreUrl(url) {
696
+ return (0, shared_1.isStoreUrl)(url, exports.STORE_CONFIG.owner, exports.STORE_CONFIG.repo);
697
+ }
698
+ /**
699
+ * List all artifacts available in the store.
700
+ */
701
+ async function listStoreIndex(type, outputChannel) {
702
+ const items = [];
703
+ // Fetch directory listing from GitHub
704
+ const typePaths = type
705
+ ? [(0, shared_1.getStorePath)(type)]
706
+ : [
707
+ exports.STORE_CONFIG.paths.packs,
708
+ exports.STORE_CONFIG.paths.skills,
709
+ exports.STORE_CONFIG.paths.mcp,
710
+ exports.STORE_CONFIG.paths.engines,
711
+ exports.STORE_CONFIG.paths.spotlightViews,
712
+ ];
713
+ for (const typePath of typePaths) {
714
+ const url = `https://api.github.com/repos/${exports.STORE_CONFIG.owner}/${exports.STORE_CONFIG.repo}/contents/${typePath}`;
715
+ try {
716
+ const response = await fetch(url, {
717
+ headers: {
718
+ Accept: 'application/vnd.github.v3+json',
719
+ 'User-Agent': 'AgentIDE',
720
+ },
721
+ });
722
+ if (!response.ok) {
723
+ if (outputChannel) {
724
+ (0, utils_1.logInfo)(outputChannel, `[Store] No ${typePath} directory found`);
725
+ }
726
+ continue;
727
+ }
728
+ const entries = (await response.json());
729
+ for (const entry of entries) {
730
+ if (entry.type === 'dir') {
731
+ const artifactType = typePath === exports.STORE_CONFIG.paths.packs ? 'pack' :
732
+ typePath === exports.STORE_CONFIG.paths.skills ? 'skill' :
733
+ typePath === exports.STORE_CONFIG.paths.mcp ? 'mcp' :
734
+ typePath === exports.STORE_CONFIG.paths.engines ? 'engine' : 'view';
735
+ items.push({
736
+ type: artifactType,
737
+ slug: entry.name,
738
+ path: entry.path,
739
+ });
740
+ }
741
+ }
742
+ }
743
+ catch (e) {
744
+ if (outputChannel) {
745
+ (0, utils_1.logInfo)(outputChannel, `[Store] Error listing ${typePath}: ${e}`);
746
+ }
747
+ }
748
+ }
749
+ return items;
750
+ }
751
+ /**
752
+ * Format a store URL.
753
+ * Re-exports shared formatStoreUrl.
754
+ */
755
+ exports.formatStoreUrl = shared_1.formatStoreUrl;