@xopcai/xopc 0.0.29 → 0.0.31

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 (632) hide show
  1. package/dist/extensions/telegram/src/adapters/config-surface.js +3 -1
  2. package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
  3. package/dist/extensions/telegram/src/adapters/onboard-cli.js +23 -21
  4. package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +1 -1
  5. package/dist/extensions/telegram/src/adapters/setup-wizard.js +3 -4
  6. package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +1 -1
  7. package/dist/extensions/telegram/src/config-schema.d.ts +0 -1
  8. package/dist/extensions/telegram/src/config-schema.js +17 -4
  9. package/dist/extensions/telegram/src/config-schema.js.map +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +4 -17
  11. package/dist/extensions/telegram/src/plugin.js.map +1 -1
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  14. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  15. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  16. package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js +216 -0
  17. package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js.map +1 -0
  18. package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js → apps-page-CWegY6Kp.js} +2 -2
  19. package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js.map → apps-page-CWegY6Kp.js.map} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js +9 -0
  21. package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js.map +1 -0
  22. package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js +3 -0
  23. package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js.map +1 -0
  24. package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js +2 -0
  25. package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js.map +1 -0
  26. package/dist/gateway/static/root/assets/dist-D0jxbvuz.js +2 -0
  27. package/dist/gateway/static/root/assets/{dist--p2HQ2QF.js.map → dist-D0jxbvuz.js.map} +1 -1
  28. package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js → extension-debug-page-DB630cW8.js} +2 -2
  29. package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js.map → extension-debug-page-DB630cW8.js.map} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js → extension-page-CnoPUBul.js} +2 -2
  31. package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js.map → extension-page-CnoPUBul.js.map} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js → extension-settings-page-BsiOkvBe.js} +2 -2
  33. package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js.map → extension-settings-page-BsiOkvBe.js.map} +1 -1
  34. package/dist/gateway/static/root/assets/{index-CR8zUHGR.js → index-DHLmAIQl.js} +63 -63
  35. package/dist/gateway/static/root/assets/{index-CR8zUHGR.js.map → index-DHLmAIQl.js.map} +1 -1
  36. package/dist/gateway/static/root/assets/index-DoPwy4aU.css +1 -0
  37. package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js +2 -0
  38. package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js.map +1 -0
  39. package/dist/gateway/static/root/assets/sessions-page-Q201-_lP.js +2 -0
  40. package/dist/gateway/static/root/assets/{sessions-page-Be5kIGl_.js.map → sessions-page-Q201-_lP.js.map} +1 -1
  41. package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js +2 -0
  42. package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js.map +1 -0
  43. package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js +3 -0
  44. package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js.map +1 -0
  45. package/dist/gateway/static/root/index.html +2 -2
  46. package/dist/package.js +1 -1
  47. package/dist/src/agent/agent-manager.d.ts +5 -7
  48. package/dist/src/agent/agent-manager.js +21 -19
  49. package/dist/src/agent/agent-manager.js.map +1 -1
  50. package/dist/src/agent/ipc/inbox.js +4 -2
  51. package/dist/src/agent/ipc/inbox.js.map +1 -1
  52. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  53. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  54. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  55. package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
  56. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  57. package/dist/src/agent/prompt/system-prompt.d.ts +0 -2
  58. package/dist/src/agent/prompt/system-prompt.js +3 -17
  59. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  60. package/dist/src/agent/service/btw-query.d.ts +16 -0
  61. package/dist/src/agent/service/btw-query.js +88 -0
  62. package/dist/src/agent/service/btw-query.js.map +1 -0
  63. package/dist/src/agent/service/build-direct-message-content.d.ts +30 -0
  64. package/dist/src/agent/service/build-direct-message-content.js +75 -0
  65. package/dist/src/agent/service/build-direct-message-content.js.map +1 -0
  66. package/dist/src/agent/service/parse-outbound-session-key.d.ts +8 -0
  67. package/dist/src/agent/service/parse-outbound-session-key.js +41 -0
  68. package/dist/src/agent/service/parse-outbound-session-key.js.map +1 -0
  69. package/dist/src/agent/service/process-direct-one-shot.d.ts +34 -0
  70. package/dist/src/agent/service/process-direct-one-shot.js +67 -0
  71. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -0
  72. package/dist/src/agent/service/process-direct-streaming.js +12 -1
  73. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  74. package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +6 -0
  75. package/dist/src/agent/service/reconcile-dreaming-cron.js +70 -0
  76. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -0
  77. package/dist/src/agent/service/session-context-report.d.ts +19 -0
  78. package/dist/src/agent/service/session-context-report.js +47 -0
  79. package/dist/src/agent/service/session-context-report.js.map +1 -0
  80. package/dist/src/agent/service/webchat-tts.d.ts +28 -0
  81. package/dist/src/agent/service/webchat-tts.js +73 -0
  82. package/dist/src/agent/service/webchat-tts.js.map +1 -0
  83. package/dist/src/agent/service.d.ts +8 -12
  84. package/dist/src/agent/service.js +74 -379
  85. package/dist/src/agent/service.js.map +1 -1
  86. package/dist/src/agent/skills/config.js +4 -3
  87. package/dist/src/agent/skills/config.js.map +1 -1
  88. package/dist/src/agent/skills/format-skills-prompt.d.ts +0 -2
  89. package/dist/src/agent/skills/format-skills-prompt.js +3 -24
  90. package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
  91. package/dist/src/agent/skills/hub-lock.js +4 -5
  92. package/dist/src/agent/skills/hub-lock.js.map +1 -1
  93. package/dist/src/agent/skills/index.js +9 -21
  94. package/dist/src/agent/skills/index.js.map +1 -1
  95. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +17 -0
  96. package/dist/src/agent/skills/marketplace/adapter.types.js +1 -0
  97. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.d.ts +2 -0
  98. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +292 -0
  99. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -0
  100. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.d.ts +73 -0
  101. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js +200 -0
  102. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js.map +1 -0
  103. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.d.ts +137 -0
  104. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js +217 -0
  105. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js.map +1 -0
  106. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.d.ts +12 -0
  107. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js +90 -0
  108. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js.map +1 -0
  109. package/dist/src/agent/skills/marketplace/adapters/store/adapter.d.ts +2 -0
  110. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +35 -0
  111. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -0
  112. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +124 -0
  113. package/dist/src/agent/skills/{skills-store-client.js → marketplace/adapters/store/store-api-client.js} +4 -3
  114. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -0
  115. package/dist/src/agent/skills/marketplace/resolve-adapter.d.ts +6 -0
  116. package/dist/src/agent/skills/marketplace/resolve-adapter.js +26 -0
  117. package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +1 -0
  118. package/dist/src/agent/skills/parse-skill-metadata.d.ts +5 -0
  119. package/dist/src/agent/skills/parse-skill-metadata.js +27 -0
  120. package/dist/src/agent/skills/parse-skill-metadata.js.map +1 -0
  121. package/dist/src/agent/skills/skill-markdown-preview-from-raw.d.ts +6 -0
  122. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +64 -0
  123. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +1 -0
  124. package/dist/src/agent/skills/skill-view-path.d.ts +17 -1
  125. package/dist/src/agent/skills/skill-view-path.js +66 -3
  126. package/dist/src/agent/skills/skill-view-path.js.map +1 -1
  127. package/dist/src/agent/skills/skills-marketplace.d.ts +21 -0
  128. package/dist/src/agent/skills/skills-marketplace.js +18 -0
  129. package/dist/src/agent/skills/skills-marketplace.js.map +1 -0
  130. package/dist/src/agent/skills/test-framework.d.ts +0 -1
  131. package/dist/src/agent/skills/test-framework.js +2 -20
  132. package/dist/src/agent/skills/test-framework.js.map +1 -1
  133. package/dist/src/agent/skills/types.d.ts +12 -6
  134. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  135. package/dist/src/agent/tools/image-generate-tool.js +2 -2
  136. package/dist/src/auth/credentials.js +8 -6
  137. package/dist/src/auth/credentials.js.map +1 -1
  138. package/dist/src/auth/profiles/store.js +5 -3
  139. package/dist/src/auth/profiles/store.js.map +1 -1
  140. package/dist/src/channels/manager.js +1 -1
  141. package/dist/src/channels/outbound/persist-store.js +4 -4
  142. package/dist/src/channels/outbound/persist-store.js.map +1 -1
  143. package/dist/src/cli/commands/config.js +8 -6
  144. package/dist/src/cli/commands/config.js.map +1 -1
  145. package/dist/src/cli/commands/doctor/checks/channel-config.js +3 -4
  146. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  147. package/dist/src/cli/commands/init.js +4 -2
  148. package/dist/src/cli/commands/init.js.map +1 -1
  149. package/dist/src/config/loader.js +3 -1
  150. package/dist/src/config/loader.js.map +1 -1
  151. package/dist/src/config/models-json.js +4 -5
  152. package/dist/src/config/models-json.js.map +1 -1
  153. package/dist/src/config/schema.d.ts +12 -4
  154. package/dist/src/config/schema.js +31 -5
  155. package/dist/src/config/schema.js.map +1 -1
  156. package/dist/src/cron/persistence.d.ts +1 -3
  157. package/dist/src/cron/persistence.js +6 -17
  158. package/dist/src/cron/persistence.js.map +1 -1
  159. package/dist/src/cron/validation.js +1 -1
  160. package/dist/src/cron/validation.js.map +1 -1
  161. package/dist/src/extensions/activation-context.js +0 -1
  162. package/dist/src/extensions/activation-context.js.map +1 -1
  163. package/dist/src/extensions/lockfile.js +4 -2
  164. package/dist/src/extensions/lockfile.js.map +1 -1
  165. package/dist/src/gateway/auth.d.ts +0 -9
  166. package/dist/src/gateway/auth.js +1 -12
  167. package/dist/src/gateway/auth.js.map +1 -1
  168. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -1
  169. package/dist/src/gateway/hono/lib/extension-store.js +4 -4
  170. package/dist/src/gateway/hono/lib/extension-store.js.map +1 -1
  171. package/dist/src/gateway/hono/routes/channels.js +5 -3
  172. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  173. package/dist/src/gateway/hono/routes/commands-skills.js +28 -3
  174. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  175. package/dist/src/gateway/hono/routes/config.js +23 -2
  176. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  177. package/dist/src/gateway/hono/routes/sessions.js +124 -2
  178. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  179. package/dist/src/gateway/hono/sse.js +9 -2
  180. package/dist/src/gateway/hono/sse.js.map +1 -1
  181. package/dist/src/gateway/index.js +2 -2
  182. package/dist/src/gateway/lock.js +1 -1
  183. package/dist/src/gateway/service/run-gateway-agent.d.ts +37 -0
  184. package/dist/src/gateway/service/run-gateway-agent.js +163 -0
  185. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -0
  186. package/dist/src/gateway/service/save-webchat-user-message.d.ts +9 -0
  187. package/dist/src/gateway/service/save-webchat-user-message.js +34 -0
  188. package/dist/src/gateway/service/save-webchat-user-message.js.map +1 -0
  189. package/dist/src/gateway/service/session-chat-ids.d.ts +9 -0
  190. package/dist/src/gateway/service/session-chat-ids.js +33 -0
  191. package/dist/src/gateway/service/session-chat-ids.js.map +1 -0
  192. package/dist/src/gateway/service/sse-hub.d.ts +10 -0
  193. package/dist/src/gateway/service/sse-hub.js +55 -0
  194. package/dist/src/gateway/service/sse-hub.js.map +1 -0
  195. package/dist/src/gateway/service/types.d.ts +9 -0
  196. package/dist/src/gateway/service/types.js +1 -0
  197. package/dist/src/gateway/service.d.ts +42 -33
  198. package/dist/src/gateway/service.js +92 -246
  199. package/dist/src/gateway/service.js.map +1 -1
  200. package/dist/src/infra/update-lock.js +4 -2
  201. package/dist/src/infra/update-lock.js.map +1 -1
  202. package/dist/src/infra/update-startup.js +5 -14
  203. package/dist/src/infra/update-startup.js.map +1 -1
  204. package/dist/src/infra/write-file-atomic.d.ts +18 -0
  205. package/dist/src/infra/write-file-atomic.js +115 -0
  206. package/dist/src/infra/write-file-atomic.js.map +1 -0
  207. package/dist/src/session/abort-cutoff.d.ts +6 -0
  208. package/dist/src/session/abort-cutoff.js +10 -0
  209. package/dist/src/session/abort-cutoff.js.map +1 -0
  210. package/dist/src/session/compaction-checkpoints.d.ts +8 -0
  211. package/dist/src/session/compaction-checkpoints.js +21 -0
  212. package/dist/src/session/compaction-checkpoints.js.map +1 -0
  213. package/dist/src/session/config-store.js +4 -2
  214. package/dist/src/session/config-store.js.map +1 -1
  215. package/dist/src/session/index.d.ts +8 -1
  216. package/dist/src/session/index.js +7 -1
  217. package/dist/src/session/manager.d.ts +26 -1
  218. package/dist/src/session/manager.js +39 -2
  219. package/dist/src/session/manager.js.map +1 -1
  220. package/dist/src/session/patch-metadata.d.ts +12 -0
  221. package/dist/src/session/patch-metadata.js +23 -0
  222. package/dist/src/session/patch-metadata.js.map +1 -0
  223. package/dist/src/session/search-index.d.ts +2 -0
  224. package/dist/src/session/search-index.js +30 -2
  225. package/dist/src/session/search-index.js.map +1 -1
  226. package/dist/src/session/session-context-for-llm.d.ts +32 -0
  227. package/dist/src/session/session-context-for-llm.js +60 -0
  228. package/dist/src/session/session-context-for-llm.js.map +1 -0
  229. package/dist/src/session/store.d.ts +53 -2
  230. package/dist/src/session/store.js +427 -145
  231. package/dist/src/session/store.js.map +1 -1
  232. package/dist/src/session/strip-webchat-early-save.d.ts +5 -0
  233. package/dist/src/session/strip-webchat-early-save.js +17 -0
  234. package/dist/src/session/strip-webchat-early-save.js.map +1 -0
  235. package/dist/src/session/transcript-format.d.ts +46 -0
  236. package/dist/src/session/transcript-format.js +88 -0
  237. package/dist/src/session/transcript-format.js.map +1 -0
  238. package/dist/src/session/types.d.ts +37 -0
  239. package/dist/src/session/types.js.map +1 -1
  240. package/dist/src/utils/logger/log-store.js +4 -3
  241. package/dist/src/utils/logger/log-store.js.map +1 -1
  242. package/dist/src/voice/tts/merge-config.js +0 -1
  243. package/dist/src/voice/tts/merge-config.js.map +1 -1
  244. package/dist/src/voice/tts/service.js +1 -2
  245. package/dist/src/voice/tts/service.js.map +1 -1
  246. package/package.json +1 -1
  247. package/skills/business/company-values/SKILL-zh.md +80 -0
  248. package/skills/business/company-values/SKILL.md +80 -0
  249. package/skills/business/find-community/SKILL-zh.md +50 -0
  250. package/skills/business/find-community/SKILL.md +50 -0
  251. package/skills/business/first-customers/SKILL-zh.md +76 -0
  252. package/skills/business/first-customers/SKILL.md +76 -0
  253. package/skills/business/grow-sustainably/SKILL-zh.md +92 -0
  254. package/skills/business/grow-sustainably/SKILL.md +92 -0
  255. package/skills/business/marketing-plan/SKILL-zh.md +100 -0
  256. package/skills/business/marketing-plan/SKILL.md +100 -0
  257. package/skills/business/minimalist-review/SKILL-zh.md +82 -0
  258. package/skills/business/minimalist-review/SKILL.md +82 -0
  259. package/skills/business/mvp/SKILL-zh.md +81 -0
  260. package/skills/business/mvp/SKILL.md +81 -0
  261. package/skills/business/pricing/SKILL-zh.md +64 -0
  262. package/skills/business/pricing/SKILL.md +64 -0
  263. package/skills/business/processize/SKILL-zh.md +91 -0
  264. package/skills/business/processize/SKILL.md +91 -0
  265. package/skills/business/validate-idea/SKILL-zh.md +68 -0
  266. package/skills/business/validate-idea/SKILL.md +68 -0
  267. package/skills/{skill-creator → creative/algorithmic-art}/LICENSE.txt +1 -1
  268. package/skills/creative/algorithmic-art/SKILL-zh.md +405 -0
  269. package/skills/creative/algorithmic-art/SKILL.md +405 -0
  270. package/skills/creative/algorithmic-art/templates/generator_template.js +223 -0
  271. package/skills/creative/algorithmic-art/templates/viewer.html +599 -0
  272. package/skills/creative/canvas-design/LICENSE.txt +202 -0
  273. package/skills/creative/canvas-design/SKILL-zh.md +130 -0
  274. package/skills/creative/canvas-design/SKILL.md +130 -0
  275. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  276. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  277. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  278. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  279. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  280. package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  281. package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  282. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  283. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  284. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  285. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  286. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  287. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  288. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  289. package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  290. package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  291. package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  292. package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  293. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  294. package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  295. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  296. package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  297. package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  298. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  299. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  300. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  301. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  302. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  303. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  304. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  305. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  306. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  307. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  308. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  309. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  310. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  311. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  312. package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  313. package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  314. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  315. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  316. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  317. package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  318. package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  319. package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  320. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  321. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  322. package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  323. package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  324. package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  325. package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  326. package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  327. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  328. package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  329. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  330. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  331. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  332. package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  333. package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  334. package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  335. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  336. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  337. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  338. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  339. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  340. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  341. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  342. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  343. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  344. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  345. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  346. package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  347. package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  348. package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  349. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  350. package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  351. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  352. package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  353. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  354. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  355. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  356. package/skills/creative/frontend-design/LICENSE.txt +177 -0
  357. package/skills/creative/frontend-design/SKILL-zh.md +42 -0
  358. package/skills/creative/frontend-design/SKILL.md +42 -0
  359. package/skills/creative/theme-factory/LICENSE.txt +202 -0
  360. package/skills/creative/theme-factory/SKILL-zh.md +59 -0
  361. package/skills/creative/theme-factory/SKILL.md +59 -0
  362. package/skills/creative/theme-factory/theme-showcase.pdf +0 -0
  363. package/skills/creative/theme-factory/themes/arctic-frost.md +19 -0
  364. package/skills/creative/theme-factory/themes/botanical-garden.md +19 -0
  365. package/skills/creative/theme-factory/themes/desert-rose.md +19 -0
  366. package/skills/creative/theme-factory/themes/forest-canopy.md +19 -0
  367. package/skills/creative/theme-factory/themes/golden-hour.md +19 -0
  368. package/skills/creative/theme-factory/themes/midnight-galaxy.md +19 -0
  369. package/skills/creative/theme-factory/themes/modern-minimalist.md +19 -0
  370. package/skills/creative/theme-factory/themes/ocean-depths.md +19 -0
  371. package/skills/creative/theme-factory/themes/sunset-boulevard.md +19 -0
  372. package/skills/creative/theme-factory/themes/tech-innovation.md +19 -0
  373. package/skills/creative/web-artifacts-builder/LICENSE.txt +202 -0
  374. package/skills/creative/web-artifacts-builder/SKILL-zh.md +74 -0
  375. package/skills/creative/web-artifacts-builder/SKILL.md +74 -0
  376. package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  377. package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  378. package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  379. package/skills/documents/doc-coauthoring/SKILL-zh.md +375 -0
  380. package/skills/documents/doc-coauthoring/SKILL.md +375 -0
  381. package/skills/documents/docx/SKILL-zh.md +590 -0
  382. package/skills/{docx → documents/docx}/SKILL.md +11 -11
  383. package/skills/{docx → documents/docx}/scripts/comment.py +2 -2
  384. package/skills/{docx → documents/docx}/scripts/office/helpers/simplify_redlines.py +1 -1
  385. package/skills/{docx → documents/docx}/scripts/office/pack.py +2 -2
  386. package/skills/{xlsx → documents/docx}/scripts/office/validate.py +2 -2
  387. package/skills/{xlsx → documents/docx}/scripts/office/validators/redlining.py +1 -1
  388. package/skills/documents/pdf/SKILL-zh.md +314 -0
  389. package/skills/documents/pptx/SKILL-zh.md +232 -0
  390. package/skills/{pptx → documents/pptx}/editing.md +3 -3
  391. package/skills/{pptx → documents/pptx}/scripts/office/helpers/simplify_redlines.py +1 -1
  392. package/skills/{xlsx → documents/pptx}/scripts/office/pack.py +2 -2
  393. package/skills/{pptx → documents/pptx}/scripts/office/validate.py +2 -2
  394. package/skills/{docx → documents/pptx}/scripts/office/validators/redlining.py +1 -1
  395. package/skills/documents/xlsx/SKILL-zh.md +292 -0
  396. package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/simplify_redlines.py +1 -1
  397. package/skills/{pptx → documents/xlsx}/scripts/office/pack.py +2 -2
  398. package/skills/{docx → documents/xlsx}/scripts/office/validate.py +2 -2
  399. package/skills/{pptx → documents/xlsx}/scripts/office/validators/redlining.py +1 -1
  400. package/skills/meta/skill-creator/LICENSE.txt +202 -0
  401. package/skills/meta/skill-creator/SKILL-zh.md +483 -0
  402. package/skills/{skill-creator → meta/skill-creator}/SKILL.md +0 -1
  403. package/skills/tools/find-skills/SKILL-zh.md +440 -0
  404. package/skills/tools/github/SKILL-zh.md +48 -0
  405. package/skills/tools/internal-comms/LICENSE.txt +202 -0
  406. package/skills/tools/internal-comms/SKILL-zh.md +32 -0
  407. package/skills/tools/internal-comms/SKILL.md +32 -0
  408. package/skills/tools/internal-comms/examples/3p-updates.md +47 -0
  409. package/skills/tools/internal-comms/examples/company-newsletter.md +65 -0
  410. package/skills/tools/internal-comms/examples/faq-answers.md +30 -0
  411. package/skills/tools/internal-comms/examples/general-comms.md +16 -0
  412. package/skills/tools/summarize/SKILL-zh.md +47 -0
  413. package/skills/tools/weather/SKILL-zh.md +46 -0
  414. package/skills/tools/webapp-testing/LICENSE.txt +202 -0
  415. package/skills/tools/webapp-testing/SKILL-zh.md +96 -0
  416. package/skills/tools/webapp-testing/SKILL.md +96 -0
  417. package/skills/tools/webapp-testing/examples/console_logging.py +35 -0
  418. package/skills/tools/webapp-testing/examples/element_discovery.py +40 -0
  419. package/skills/tools/webapp-testing/examples/static_html_automation.py +33 -0
  420. package/skills/tools/webapp-testing/scripts/with_server.py +106 -0
  421. package/dist/gateway/static/root/assets/agents-CkgFSiCY.js +0 -216
  422. package/dist/gateway/static/root/assets/agents-CkgFSiCY.js.map +0 -1
  423. package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js +0 -9
  424. package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js.map +0 -1
  425. package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js +0 -2
  426. package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js.map +0 -1
  427. package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js +0 -3
  428. package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js.map +0 -1
  429. package/dist/gateway/static/root/assets/dist--p2HQ2QF.js +0 -2
  430. package/dist/gateway/static/root/assets/index-Dnfha4O2.css +0 -1
  431. package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js +0 -2
  432. package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js.map +0 -1
  433. package/dist/gateway/static/root/assets/sessions-page-Be5kIGl_.js +0 -2
  434. package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js +0 -2
  435. package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js.map +0 -1
  436. package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js +0 -3
  437. package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js.map +0 -1
  438. package/dist/src/agent/skills/skills-store-client.d.ts +0 -66
  439. package/dist/src/agent/skills/skills-store-client.js.map +0 -1
  440. package/dist/src/stt/index.d.ts +0 -1
  441. package/dist/src/stt/index.js +0 -8
  442. /package/skills/{docx → documents/docx}/LICENSE.txt +0 -0
  443. /package/skills/{docx → documents/docx}/scripts/__init__.py +0 -0
  444. /package/skills/{docx → documents/docx}/scripts/accept_changes.py +0 -0
  445. /package/skills/{docx → documents/docx}/scripts/office/helpers/__init__.py +0 -0
  446. /package/skills/{docx → documents/docx}/scripts/office/helpers/merge_runs.py +0 -0
  447. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  448. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  449. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  450. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  451. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  452. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  453. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  454. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  455. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  456. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  457. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  458. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  459. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  460. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  461. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  462. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  463. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  464. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  465. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  466. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  467. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  468. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  469. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  470. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  471. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  472. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  473. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  474. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  475. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  476. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  477. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  478. /package/skills/{docx → documents/docx}/scripts/office/schemas/mce/mc.xsd +0 -0
  479. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  480. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  481. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  482. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  483. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  484. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  485. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  486. /package/skills/{docx → documents/docx}/scripts/office/soffice.py +0 -0
  487. /package/skills/{docx → documents/docx}/scripts/office/unpack.py +0 -0
  488. /package/skills/{docx → documents/docx}/scripts/office/validators/__init__.py +0 -0
  489. /package/skills/{docx → documents/docx}/scripts/office/validators/base.py +0 -0
  490. /package/skills/{docx → documents/docx}/scripts/office/validators/docx.py +0 -0
  491. /package/skills/{docx → documents/docx}/scripts/office/validators/pptx.py +0 -0
  492. /package/skills/{docx → documents/docx}/scripts/templates/comments.xml +0 -0
  493. /package/skills/{docx → documents/docx}/scripts/templates/commentsExtended.xml +0 -0
  494. /package/skills/{docx → documents/docx}/scripts/templates/commentsExtensible.xml +0 -0
  495. /package/skills/{docx → documents/docx}/scripts/templates/commentsIds.xml +0 -0
  496. /package/skills/{docx → documents/docx}/scripts/templates/people.xml +0 -0
  497. /package/skills/{pdf → documents/pdf}/LICENSE.txt +0 -0
  498. /package/skills/{pdf → documents/pdf}/SKILL.md +0 -0
  499. /package/skills/{pdf → documents/pdf}/forms.md +0 -0
  500. /package/skills/{pdf → documents/pdf}/reference.md +0 -0
  501. /package/skills/{pdf → documents/pdf}/scripts/check_bounding_boxes.py +0 -0
  502. /package/skills/{pdf → documents/pdf}/scripts/check_fillable_fields.py +0 -0
  503. /package/skills/{pdf → documents/pdf}/scripts/convert_pdf_to_images.py +0 -0
  504. /package/skills/{pdf → documents/pdf}/scripts/create_validation_image.py +0 -0
  505. /package/skills/{pdf → documents/pdf}/scripts/extract_form_field_info.py +0 -0
  506. /package/skills/{pdf → documents/pdf}/scripts/extract_form_structure.py +0 -0
  507. /package/skills/{pdf → documents/pdf}/scripts/fill_fillable_fields.py +0 -0
  508. /package/skills/{pdf → documents/pdf}/scripts/fill_pdf_form_with_annotations.py +0 -0
  509. /package/skills/{pptx → documents/pptx}/LICENSE.txt +0 -0
  510. /package/skills/{pptx → documents/pptx}/SKILL.md +0 -0
  511. /package/skills/{pptx → documents/pptx}/pptxgenjs.md +0 -0
  512. /package/skills/{pptx → documents/pptx}/scripts/__init__.py +0 -0
  513. /package/skills/{pptx → documents/pptx}/scripts/add_slide.py +0 -0
  514. /package/skills/{pptx → documents/pptx}/scripts/clean.py +0 -0
  515. /package/skills/{pptx → documents/pptx}/scripts/office/helpers/__init__.py +0 -0
  516. /package/skills/{pptx → documents/pptx}/scripts/office/helpers/merge_runs.py +0 -0
  517. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  518. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  519. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  520. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  521. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  522. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  523. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  524. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  525. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  526. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  527. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  528. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  529. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  530. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  531. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  532. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  533. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  534. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  535. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  536. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  537. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  538. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  539. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  540. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  541. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  542. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  543. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  544. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  545. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  546. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  547. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  548. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/mce/mc.xsd +0 -0
  549. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  550. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  551. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  552. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  553. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  554. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  555. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  556. /package/skills/{pptx → documents/pptx}/scripts/office/soffice.py +0 -0
  557. /package/skills/{pptx → documents/pptx}/scripts/office/unpack.py +0 -0
  558. /package/skills/{pptx → documents/pptx}/scripts/office/validators/__init__.py +0 -0
  559. /package/skills/{pptx → documents/pptx}/scripts/office/validators/base.py +0 -0
  560. /package/skills/{pptx → documents/pptx}/scripts/office/validators/docx.py +0 -0
  561. /package/skills/{pptx → documents/pptx}/scripts/office/validators/pptx.py +0 -0
  562. /package/skills/{pptx → documents/pptx}/scripts/thumbnail.py +0 -0
  563. /package/skills/{xlsx → documents/xlsx}/LICENSE.txt +0 -0
  564. /package/skills/{xlsx → documents/xlsx}/SKILL.md +0 -0
  565. /package/skills/{skill-creator/scripts → documents/xlsx/scripts/office/helpers}/__init__.py +0 -0
  566. /package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/merge_runs.py +0 -0
  567. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  568. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  569. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  570. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  571. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  572. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  573. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  574. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  575. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  576. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  577. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  578. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  579. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  580. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  581. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  582. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  583. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  584. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  585. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  586. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  587. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  588. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  589. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  590. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  591. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  592. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  593. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  594. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  595. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  596. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  597. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  598. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/mce/mc.xsd +0 -0
  599. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  600. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  601. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  602. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  603. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  604. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  605. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  606. /package/skills/{xlsx → documents/xlsx}/scripts/office/soffice.py +0 -0
  607. /package/skills/{xlsx → documents/xlsx}/scripts/office/unpack.py +0 -0
  608. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/__init__.py +0 -0
  609. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/base.py +0 -0
  610. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/docx.py +0 -0
  611. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/pptx.py +0 -0
  612. /package/skills/{xlsx → documents/xlsx}/scripts/recalc.py +0 -0
  613. /package/skills/{skill-creator → meta/skill-creator}/agents/analyzer.md +0 -0
  614. /package/skills/{skill-creator → meta/skill-creator}/agents/comparator.md +0 -0
  615. /package/skills/{skill-creator → meta/skill-creator}/agents/grader.md +0 -0
  616. /package/skills/{skill-creator → meta/skill-creator}/assets/eval_review.html +0 -0
  617. /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/generate_review.py +0 -0
  618. /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/viewer.html +0 -0
  619. /package/skills/{skill-creator → meta/skill-creator}/references/schemas.md +0 -0
  620. /package/skills/{xlsx/scripts/office/helpers → meta/skill-creator/scripts}/__init__.py +0 -0
  621. /package/skills/{skill-creator → meta/skill-creator}/scripts/aggregate_benchmark.py +0 -0
  622. /package/skills/{skill-creator → meta/skill-creator}/scripts/generate_report.py +0 -0
  623. /package/skills/{skill-creator → meta/skill-creator}/scripts/improve_description.py +0 -0
  624. /package/skills/{skill-creator → meta/skill-creator}/scripts/package_skill.py +0 -0
  625. /package/skills/{skill-creator → meta/skill-creator}/scripts/quick_validate.py +0 -0
  626. /package/skills/{skill-creator → meta/skill-creator}/scripts/run_eval.py +0 -0
  627. /package/skills/{skill-creator → meta/skill-creator}/scripts/run_loop.py +0 -0
  628. /package/skills/{skill-creator → meta/skill-creator}/scripts/utils.py +0 -0
  629. /package/skills/{find-skills → tools/find-skills}/SKILL.md +0 -0
  630. /package/skills/{github → tools/github}/SKILL.md +0 -0
  631. /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
  632. /package/skills/{weather → tools/weather}/SKILL.md +0 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * SkillHub distribution layer (SkillHub CLI `metadata.json` defaults):
3
+ * curated index on COS, lightmake search/download, COS static zip fallback.
4
+ *
5
+ * Registry HTTP: {@link ./registry-client.ts}.
6
+ */
7
+ /** Same shape as store `MarketplacePackageListItem` (avoid importing store adapter). */
8
+ export interface SkillHubEcosystemListItem {
9
+ id: string;
10
+ name: string;
11
+ type: string;
12
+ description: string;
13
+ downloads: number;
14
+ author: {
15
+ username: string;
16
+ avatarUrl: string | null;
17
+ };
18
+ latestVersion?: string;
19
+ updatedAt: string;
20
+ categories?: string[];
21
+ stars?: number;
22
+ sourceLabel?: string;
23
+ }
24
+ export interface SkillHubEcosystemUrls {
25
+ skillsIndexUrl: string;
26
+ searchUrl: string;
27
+ primaryDownloadTemplate: string;
28
+ fallbackDownloadTemplate: string;
29
+ }
30
+ /**
31
+ * SkillHub CLI–aligned endpoints (defaults match official `metadata.json`).
32
+ * Optional env overrides for mirrors/testing only — not part of gateway config.
33
+ */
34
+ export declare function resolveSkillHubEcosystemUrls(): SkillHubEcosystemUrls;
35
+ export declare function assertSkillHubDownloadUrlAllowed(downloadUrl: string, urls: SkillHubEcosystemUrls): URL;
36
+ export interface SkillHubCuratedIndexSkill {
37
+ rank?: number;
38
+ slug: string;
39
+ name?: string;
40
+ description?: string;
41
+ version?: string;
42
+ homepage?: string;
43
+ downloads?: number;
44
+ stars?: number;
45
+ score?: number;
46
+ categories?: string[];
47
+ }
48
+ export interface SkillHubCuratedIndex {
49
+ total?: number;
50
+ skills: SkillHubCuratedIndexSkill[];
51
+ }
52
+ export declare function fetchSkillHubCuratedIndex(urls: SkillHubEcosystemUrls): Promise<SkillHubCuratedIndex>;
53
+ export declare function curatedSkillsToPackageItems(skills: SkillHubCuratedIndexSkill[]): SkillHubEcosystemListItem[];
54
+ export interface LightmakeSearchHit {
55
+ slug: string;
56
+ displayName?: string;
57
+ name?: string;
58
+ summary?: string;
59
+ description?: string;
60
+ description_zh?: string;
61
+ version?: string;
62
+ downloads?: number;
63
+ installs?: number;
64
+ stars?: number;
65
+ owner_name?: string;
66
+ category?: string;
67
+ score?: number;
68
+ updatedAt?: number;
69
+ updated_at?: number;
70
+ }
71
+ export declare function searchSkillHubLightmake(urls: SkillHubEcosystemUrls, query: string, limit: number, timeoutMs?: number): Promise<SkillHubEcosystemListItem[]>;
72
+ export declare function downloadSkillHubZipFromAllowlistedUrl(urls: SkillHubEcosystemUrls, downloadUrl: string): Promise<Buffer>;
73
+ export declare function downloadSkillHubZipFromEcosystem(urls: SkillHubEcosystemUrls, slug: string): Promise<Buffer>;
@@ -0,0 +1,200 @@
1
+ import { MAX_SKILL_ZIP_BYTES } from "../../../managed-store.js";
2
+ //#region src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.ts
3
+ /**
4
+ * SkillHub distribution layer (SkillHub CLI `metadata.json` defaults):
5
+ * curated index on COS, lightmake search/download, COS static zip fallback.
6
+ *
7
+ * Registry HTTP: {@link ./registry-client.ts}.
8
+ */
9
+ const DEFAULT_SKILLS_INDEX_URL = "https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/skills.json";
10
+ const DEFAULT_SEARCH_URL = "https://lightmake.site/api/v1/search";
11
+ const DEFAULT_PRIMARY_DOWNLOAD_TEMPLATE = "https://lightmake.site/api/v1/download?slug={slug}";
12
+ const DEFAULT_FALLBACK_DOWNLOAD_TEMPLATE = "https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/skills/{slug}.zip";
13
+ const DEFAULT_ALLOWED_DOWNLOAD_HOSTS = new Set([
14
+ "lightmake.site",
15
+ "api.skillhub.cn",
16
+ "skillhub-1388575217.cos.ap-guangzhou.myqcloud.com"
17
+ ]);
18
+ const LIGHTMAKE_SEARCH_MAX = 100;
19
+ function templateWithSlug(template, slug) {
20
+ const raw = template.trim();
21
+ if (!raw) return "";
22
+ if (raw.includes("{slug}")) return raw.replaceAll("{slug}", encodeURIComponent(slug.trim()));
23
+ return `${raw.replace(/\/$/, "")}/${encodeURIComponent(slug.trim())}.zip`;
24
+ }
25
+ function hostFromTemplate(template) {
26
+ const t = templateWithSlug(template, "x");
27
+ try {
28
+ return new URL(t).hostname.toLowerCase();
29
+ } catch {
30
+ return;
31
+ }
32
+ }
33
+ /**
34
+ * SkillHub CLI–aligned endpoints (defaults match official `metadata.json`).
35
+ * Optional env overrides for mirrors/testing only — not part of gateway config.
36
+ */
37
+ function resolveSkillHubEcosystemUrls() {
38
+ return {
39
+ skillsIndexUrl: process.env.XOPC_SKILLHUB_SKILLS_INDEX_URL?.trim() || DEFAULT_SKILLS_INDEX_URL,
40
+ searchUrl: process.env.XOPC_SKILLHUB_SEARCH_URL?.trim() || DEFAULT_SEARCH_URL,
41
+ primaryDownloadTemplate: process.env.XOPC_SKILLHUB_PRIMARY_DOWNLOAD_TEMPLATE?.trim() || DEFAULT_PRIMARY_DOWNLOAD_TEMPLATE,
42
+ fallbackDownloadTemplate: process.env.XOPC_SKILLHUB_FALLBACK_DOWNLOAD_TEMPLATE?.trim() || DEFAULT_FALLBACK_DOWNLOAD_TEMPLATE
43
+ };
44
+ }
45
+ function allowedDownloadHosts(urls) {
46
+ const hosts = new Set(DEFAULT_ALLOWED_DOWNLOAD_HOSTS);
47
+ for (const h of [hostFromTemplate(urls.primaryDownloadTemplate), hostFromTemplate(urls.fallbackDownloadTemplate)]) if (h) hosts.add(h);
48
+ try {
49
+ hosts.add(new URL(urls.skillsIndexUrl).hostname.toLowerCase());
50
+ } catch {}
51
+ try {
52
+ hosts.add(new URL(urls.searchUrl).hostname.toLowerCase());
53
+ } catch {}
54
+ return hosts;
55
+ }
56
+ function assertSkillHubDownloadUrlAllowed(downloadUrl, urls) {
57
+ let u;
58
+ try {
59
+ u = new URL(downloadUrl);
60
+ } catch {
61
+ throw new Error("Invalid SkillHub download URL");
62
+ }
63
+ if (u.protocol !== "https:") throw new Error("SkillHub download URL must use HTTPS");
64
+ const host = u.hostname.toLowerCase();
65
+ if (!allowedDownloadHosts(urls).has(host)) throw new Error("SkillHub download URL host is not allowlisted");
66
+ return u;
67
+ }
68
+ async function fetchJson(url, init) {
69
+ const res = await fetch(url, {
70
+ ...init,
71
+ headers: {
72
+ Accept: "application/json",
73
+ ...init?.headers
74
+ }
75
+ });
76
+ const text = await res.text();
77
+ if (!res.ok) {
78
+ let msg = `SkillHub ecosystem request failed (${res.status})`;
79
+ try {
80
+ const j = JSON.parse(text);
81
+ if (j.message) msg = j.message;
82
+ else if (j.error) msg = j.error;
83
+ } catch {
84
+ if (text) msg = text.slice(0, 200);
85
+ }
86
+ throw new Error(msg);
87
+ }
88
+ try {
89
+ return JSON.parse(text);
90
+ } catch {
91
+ throw new Error("SkillHub ecosystem returned invalid JSON");
92
+ }
93
+ }
94
+ async function fetchSkillHubCuratedIndex(urls) {
95
+ const raw = await fetchJson(urls.skillsIndexUrl);
96
+ if (Array.isArray(raw)) return { skills: raw };
97
+ if (raw && typeof raw === "object" && Array.isArray(raw.skills)) return raw;
98
+ throw new Error("SkillHub index JSON must be an object with a skills array");
99
+ }
100
+ function sourceLabelFromHomepage(homepage) {
101
+ const h = homepage?.trim().toLowerCase() ?? "";
102
+ if (h.includes("clawhub")) return "ClawHub";
103
+ if (h.includes("skillhub")) return "SkillHub";
104
+ }
105
+ function curatedSkillsToPackageItems(skills) {
106
+ return skills.map((s) => ({
107
+ id: s.slug,
108
+ name: (s.name ?? s.slug).trim() || s.slug,
109
+ type: "skill",
110
+ description: (s.description ?? "").trim(),
111
+ downloads: typeof s.downloads === "number" ? s.downloads : 0,
112
+ author: {
113
+ username: "skillhub",
114
+ avatarUrl: null
115
+ },
116
+ latestVersion: (s.version ?? "").trim() || void 0,
117
+ updatedAt: String(s.rank ?? s.score ?? 0),
118
+ categories: (s.categories ?? []).map((c) => String(c).trim()).filter(Boolean),
119
+ stars: typeof s.stars === "number" ? s.stars : void 0,
120
+ sourceLabel: sourceLabelFromHomepage(s.homepage)
121
+ }));
122
+ }
123
+ function lightmakeHitToPackageItem(hit) {
124
+ const slug = String(hit.slug || "").trim();
125
+ const desc = (hit.summary ?? hit.description_zh ?? hit.description ?? "").trim() || "";
126
+ const updated = hit.updatedAt ?? hit.updated_at ?? 0;
127
+ const cat = hit.category?.trim();
128
+ return {
129
+ id: slug,
130
+ name: (hit.displayName ?? hit.name ?? slug).trim() || slug,
131
+ type: "skill",
132
+ description: desc,
133
+ downloads: typeof hit.downloads === "number" ? hit.downloads : 0,
134
+ author: {
135
+ username: (hit.owner_name ?? "skillhub").trim() || "skillhub",
136
+ avatarUrl: null
137
+ },
138
+ latestVersion: (hit.version ?? "").trim() || void 0,
139
+ updatedAt: String(updated),
140
+ categories: cat ? [cat] : [],
141
+ stars: typeof hit.stars === "number" ? hit.stars : void 0,
142
+ sourceLabel: "Lightmake"
143
+ };
144
+ }
145
+ async function searchSkillHubLightmake(urls, query, limit, timeoutMs = 8e3) {
146
+ const q = query.trim().toLowerCase();
147
+ if (!q) return [];
148
+ const search = new URL(urls.searchUrl);
149
+ if (search.protocol !== "https:") throw new Error("SkillHub search URL must use HTTPS");
150
+ search.searchParams.set("q", q);
151
+ search.searchParams.set("limit", String(Math.max(1, Math.min(LIGHTMAKE_SEARCH_MAX, limit))));
152
+ const controller = new AbortController();
153
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
154
+ try {
155
+ const results = (await fetchJson(search.toString(), { signal: controller.signal })).results;
156
+ if (!Array.isArray(results)) return [];
157
+ const out = [];
158
+ for (const item of results) {
159
+ if (!item || typeof item !== "object") continue;
160
+ if (!String(item.slug ?? "").trim()) continue;
161
+ out.push(lightmakeHitToPackageItem(item));
162
+ }
163
+ return out;
164
+ } finally {
165
+ clearTimeout(timer);
166
+ }
167
+ }
168
+ async function downloadSkillHubZipFromAllowlistedUrl(urls, downloadUrl) {
169
+ const normalized = assertSkillHubDownloadUrlAllowed(downloadUrl, urls);
170
+ const res = await fetch(normalized.toString(), { redirect: "follow" });
171
+ if (!res.ok) throw new Error(`Failed to download skill archive (${res.status})`);
172
+ const len = res.headers.get("content-length");
173
+ if (len) {
174
+ const n = Number(len);
175
+ if (Number.isFinite(n) && n > 15728640) throw new Error(`Zip exceeds maximum size (${MAX_SKILL_ZIP_BYTES} bytes)`);
176
+ }
177
+ const ab = await res.arrayBuffer();
178
+ const buf = Buffer.from(ab);
179
+ if (buf.length > 15728640) throw new Error(`Zip exceeds maximum size (${MAX_SKILL_ZIP_BYTES} bytes)`);
180
+ return buf;
181
+ }
182
+ async function downloadSkillHubZipFromEcosystem(urls, slug) {
183
+ const candidates = [templateWithSlug(urls.primaryDownloadTemplate, slug), templateWithSlug(urls.fallbackDownloadTemplate, slug)].filter(Boolean);
184
+ const seen = /* @__PURE__ */ new Set();
185
+ let lastErr;
186
+ for (const url of candidates) {
187
+ if (seen.has(url)) continue;
188
+ seen.add(url);
189
+ try {
190
+ return await downloadSkillHubZipFromAllowlistedUrl(urls, url);
191
+ } catch (e) {
192
+ lastErr = e instanceof Error ? e : new Error(String(e));
193
+ }
194
+ }
195
+ throw lastErr ?? /* @__PURE__ */ new Error("SkillHub ecosystem download failed");
196
+ }
197
+ //#endregion
198
+ export { assertSkillHubDownloadUrlAllowed, curatedSkillsToPackageItems, downloadSkillHubZipFromAllowlistedUrl, downloadSkillHubZipFromEcosystem, fetchSkillHubCuratedIndex, resolveSkillHubEcosystemUrls, searchSkillHubLightmake };
199
+
200
+ //# sourceMappingURL=ecosystem-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem-client.js","names":[],"sources":["../../../../../../../src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.ts"],"sourcesContent":["/**\n * SkillHub distribution layer (SkillHub CLI `metadata.json` defaults):\n * curated index on COS, lightmake search/download, COS static zip fallback.\n *\n * Registry HTTP: {@link ./registry-client.ts}.\n */\n\nimport { MAX_SKILL_ZIP_BYTES } from '../../../managed-store.js';\n\n/** Same shape as store `MarketplacePackageListItem` (avoid importing store adapter). */\nexport interface SkillHubEcosystemListItem {\n id: string;\n name: string;\n type: string;\n description: string;\n downloads: number;\n author: { username: string; avatarUrl: string | null };\n latestVersion?: string;\n updatedAt: string;\n categories?: string[];\n stars?: number;\n sourceLabel?: string;\n}\n\nconst DEFAULT_SKILLS_INDEX_URL = 'https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/skills.json';\nconst DEFAULT_SEARCH_URL = 'https://lightmake.site/api/v1/search';\nconst DEFAULT_PRIMARY_DOWNLOAD_TEMPLATE = 'https://lightmake.site/api/v1/download?slug={slug}';\nconst DEFAULT_FALLBACK_DOWNLOAD_TEMPLATE =\n 'https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/skills/{slug}.zip';\n\nconst DEFAULT_ALLOWED_DOWNLOAD_HOSTS = new Set([\n 'lightmake.site',\n 'api.skillhub.cn',\n 'skillhub-1388575217.cos.ap-guangzhou.myqcloud.com',\n]);\n\nconst LIGHTMAKE_SEARCH_MAX = 100;\n\nexport interface SkillHubEcosystemUrls {\n skillsIndexUrl: string;\n searchUrl: string;\n primaryDownloadTemplate: string;\n fallbackDownloadTemplate: string;\n}\n\nfunction templateWithSlug(template: string, slug: string): string {\n const raw = template.trim();\n if (!raw) return '';\n if (raw.includes('{slug}')) {\n return raw.replaceAll('{slug}', encodeURIComponent(slug.trim()));\n }\n const base = raw.replace(/\\/$/, '');\n return `${base}/${encodeURIComponent(slug.trim())}.zip`;\n}\n\nfunction hostFromTemplate(template: string): string | undefined {\n const t = templateWithSlug(template, 'x');\n try {\n return new URL(t).hostname.toLowerCase();\n } catch {\n return undefined;\n }\n}\n\n/**\n * SkillHub CLI–aligned endpoints (defaults match official `metadata.json`).\n * Optional env overrides for mirrors/testing only — not part of gateway config.\n */\nexport function resolveSkillHubEcosystemUrls(): SkillHubEcosystemUrls {\n return {\n skillsIndexUrl: process.env.XOPC_SKILLHUB_SKILLS_INDEX_URL?.trim() || DEFAULT_SKILLS_INDEX_URL,\n searchUrl: process.env.XOPC_SKILLHUB_SEARCH_URL?.trim() || DEFAULT_SEARCH_URL,\n primaryDownloadTemplate:\n process.env.XOPC_SKILLHUB_PRIMARY_DOWNLOAD_TEMPLATE?.trim() || DEFAULT_PRIMARY_DOWNLOAD_TEMPLATE,\n fallbackDownloadTemplate:\n process.env.XOPC_SKILLHUB_FALLBACK_DOWNLOAD_TEMPLATE?.trim() || DEFAULT_FALLBACK_DOWNLOAD_TEMPLATE,\n };\n}\n\nfunction allowedDownloadHosts(urls: SkillHubEcosystemUrls): Set<string> {\n const hosts = new Set(DEFAULT_ALLOWED_DOWNLOAD_HOSTS);\n for (const h of [hostFromTemplate(urls.primaryDownloadTemplate), hostFromTemplate(urls.fallbackDownloadTemplate)]) {\n if (h) hosts.add(h);\n }\n try {\n hosts.add(new URL(urls.skillsIndexUrl).hostname.toLowerCase());\n } catch {\n /* ignore */\n }\n try {\n hosts.add(new URL(urls.searchUrl).hostname.toLowerCase());\n } catch {\n /* ignore */\n }\n return hosts;\n}\n\nexport function assertSkillHubDownloadUrlAllowed(downloadUrl: string, urls: SkillHubEcosystemUrls): URL {\n let u: URL;\n try {\n u = new URL(downloadUrl);\n } catch {\n throw new Error('Invalid SkillHub download URL');\n }\n if (u.protocol !== 'https:') {\n throw new Error('SkillHub download URL must use HTTPS');\n }\n const host = u.hostname.toLowerCase();\n if (!allowedDownloadHosts(urls).has(host)) {\n throw new Error('SkillHub download URL host is not allowlisted');\n }\n return u;\n}\n\nexport interface SkillHubCuratedIndexSkill {\n rank?: number;\n slug: string;\n name?: string;\n description?: string;\n version?: string;\n homepage?: string;\n downloads?: number;\n stars?: number;\n score?: number;\n categories?: string[];\n}\n\nexport interface SkillHubCuratedIndex {\n total?: number;\n skills: SkillHubCuratedIndexSkill[];\n}\n\nasync function fetchJson<T>(url: string, init?: RequestInit): Promise<T> {\n const res = await fetch(url, {\n ...init,\n headers: { Accept: 'application/json', ...init?.headers },\n });\n const text = await res.text();\n if (!res.ok) {\n let msg = `SkillHub ecosystem request failed (${res.status})`;\n try {\n const j = JSON.parse(text) as { message?: string; error?: string };\n if (j.message) msg = j.message;\n else if (j.error) msg = j.error;\n } catch {\n if (text) msg = text.slice(0, 200);\n }\n throw new Error(msg);\n }\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new Error('SkillHub ecosystem returned invalid JSON');\n }\n}\n\nexport async function fetchSkillHubCuratedIndex(urls: SkillHubEcosystemUrls): Promise<SkillHubCuratedIndex> {\n const raw = await fetchJson<unknown>(urls.skillsIndexUrl);\n if (Array.isArray(raw)) {\n return { skills: raw as SkillHubCuratedIndexSkill[] };\n }\n if (raw && typeof raw === 'object' && Array.isArray((raw as SkillHubCuratedIndex).skills)) {\n return raw as SkillHubCuratedIndex;\n }\n throw new Error('SkillHub index JSON must be an object with a skills array');\n}\n\nfunction sourceLabelFromHomepage(homepage?: string): string | undefined {\n const h = homepage?.trim().toLowerCase() ?? '';\n if (h.includes('clawhub')) return 'ClawHub';\n if (h.includes('skillhub')) return 'SkillHub';\n return undefined;\n}\n\nexport function curatedSkillsToPackageItems(skills: SkillHubCuratedIndexSkill[]): SkillHubEcosystemListItem[] {\n return skills.map((s) => ({\n id: s.slug,\n name: (s.name ?? s.slug).trim() || s.slug,\n type: 'skill',\n description: (s.description ?? '').trim(),\n downloads: typeof s.downloads === 'number' ? s.downloads : 0,\n author: { username: 'skillhub', avatarUrl: null },\n latestVersion: (s.version ?? '').trim() || undefined,\n updatedAt: String(s.rank ?? s.score ?? 0),\n categories: (s.categories ?? []).map((c) => String(c).trim()).filter(Boolean),\n stars: typeof s.stars === 'number' ? s.stars : undefined,\n sourceLabel: sourceLabelFromHomepage(s.homepage),\n }));\n}\n\nexport interface LightmakeSearchHit {\n slug: string;\n displayName?: string;\n name?: string;\n summary?: string;\n description?: string;\n description_zh?: string;\n version?: string;\n downloads?: number;\n installs?: number;\n stars?: number;\n owner_name?: string;\n category?: string;\n score?: number;\n updatedAt?: number;\n updated_at?: number;\n}\n\nfunction lightmakeHitToPackageItem(hit: LightmakeSearchHit): SkillHubEcosystemListItem {\n const slug = String(hit.slug || '').trim();\n const desc =\n (hit.summary ?? hit.description_zh ?? hit.description ?? '').trim() || '';\n const updated = hit.updatedAt ?? hit.updated_at ?? 0;\n const cat = hit.category?.trim();\n return {\n id: slug,\n name: (hit.displayName ?? hit.name ?? slug).trim() || slug,\n type: 'skill',\n description: desc,\n downloads: typeof hit.downloads === 'number' ? hit.downloads : 0,\n author: {\n username: (hit.owner_name ?? 'skillhub').trim() || 'skillhub',\n avatarUrl: null,\n },\n latestVersion: (hit.version ?? '').trim() || undefined,\n updatedAt: String(updated),\n categories: cat ? [cat] : [],\n stars: typeof hit.stars === 'number' ? hit.stars : undefined,\n sourceLabel: 'Lightmake',\n };\n}\n\nexport async function searchSkillHubLightmake(\n urls: SkillHubEcosystemUrls,\n query: string,\n limit: number,\n timeoutMs = 8000,\n): Promise<SkillHubEcosystemListItem[]> {\n const q = query.trim().toLowerCase();\n if (!q) return [];\n\n const search = new URL(urls.searchUrl);\n if (search.protocol !== 'https:') {\n throw new Error('SkillHub search URL must use HTTPS');\n }\n search.searchParams.set('q', q);\n search.searchParams.set('limit', String(Math.max(1, Math.min(LIGHTMAKE_SEARCH_MAX, limit))));\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const raw = await fetchJson<{ results?: LightmakeSearchHit[] }>(search.toString(), {\n signal: controller.signal,\n });\n const results = raw.results;\n if (!Array.isArray(results)) {\n return [];\n }\n const out: SkillHubEcosystemListItem[] = [];\n for (const item of results) {\n if (!item || typeof item !== 'object') continue;\n const slug = String((item as LightmakeSearchHit).slug ?? '').trim();\n if (!slug) continue;\n out.push(lightmakeHitToPackageItem(item as LightmakeSearchHit));\n }\n return out;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function downloadSkillHubZipFromAllowlistedUrl(\n urls: SkillHubEcosystemUrls,\n downloadUrl: string,\n): Promise<Buffer> {\n const normalized = assertSkillHubDownloadUrlAllowed(downloadUrl, urls);\n const res = await fetch(normalized.toString(), { redirect: 'follow' });\n if (!res.ok) {\n throw new Error(`Failed to download skill archive (${res.status})`);\n }\n const len = res.headers.get('content-length');\n if (len) {\n const n = Number(len);\n if (Number.isFinite(n) && n > MAX_SKILL_ZIP_BYTES) {\n throw new Error(`Zip exceeds maximum size (${MAX_SKILL_ZIP_BYTES} bytes)`);\n }\n }\n const ab = await res.arrayBuffer();\n const buf = Buffer.from(ab);\n if (buf.length > MAX_SKILL_ZIP_BYTES) {\n throw new Error(`Zip exceeds maximum size (${MAX_SKILL_ZIP_BYTES} bytes)`);\n }\n return buf;\n}\n\nexport async function downloadSkillHubZipFromEcosystem(\n urls: SkillHubEcosystemUrls,\n slug: string,\n): Promise<Buffer> {\n const primary = templateWithSlug(urls.primaryDownloadTemplate, slug);\n const fallback = templateWithSlug(urls.fallbackDownloadTemplate, slug);\n const candidates = [primary, fallback].filter(Boolean);\n const seen = new Set<string>();\n let lastErr: Error | undefined;\n for (const url of candidates) {\n if (seen.has(url)) continue;\n seen.add(url);\n try {\n return await downloadSkillHubZipFromAllowlistedUrl(urls, url);\n } catch (e) {\n lastErr = e instanceof Error ? e : new Error(String(e));\n }\n }\n throw lastErr ?? new Error('SkillHub ecosystem download failed');\n}\n"],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * HTTP client for api.skillhub.cn (registry: detail, files, versions, batch, skillsets, download).
3
+ */
4
+ /** Max bytes when fetching SKILL.md / README for marketplace preview (redirects to COS). */
5
+ export declare const MAX_SKILLHUB_README_BYTES: number;
6
+ /**
7
+ * Prefer SKILL.md, then README.md, then HOW_TO_USE.md (basename match, any directory depth).
8
+ */
9
+ export declare function pickSkillHubDocFilePath(files: SkillHubFile[]): string | null;
10
+ /**
11
+ * Fetches a single text file from the registry (follows redirect to COS when applicable).
12
+ */
13
+ export declare function getSkillHubSkillFileText(slug: string, filePath: string, version?: string): Promise<string>;
14
+ /** skillhub.cn skill metadata */
15
+ export interface SkillHubSkill {
16
+ slug: string;
17
+ displayName: string;
18
+ summary: string;
19
+ summary_zh?: string;
20
+ category: string;
21
+ iconUrl: string | null;
22
+ source: string;
23
+ labels: {
24
+ requires_api_key?: string;
25
+ };
26
+ stats: {
27
+ downloads: number;
28
+ installs: number;
29
+ stars: number;
30
+ comments: number;
31
+ versions: number;
32
+ };
33
+ createdAt: number;
34
+ updatedAt: number;
35
+ tags: Record<string, string>;
36
+ }
37
+ export interface SkillHubSkillDetail {
38
+ skill: SkillHubSkill;
39
+ latestVersion: {
40
+ version: string;
41
+ changelog: string | null;
42
+ createdAt: number;
43
+ securityReports?: {
44
+ keen?: {
45
+ status: string;
46
+ statusText: string;
47
+ reportUrl?: string;
48
+ };
49
+ sanbu?: {
50
+ status: string;
51
+ statusText: string;
52
+ reportUrl?: string;
53
+ };
54
+ };
55
+ };
56
+ owner: {
57
+ handle: string;
58
+ displayName: string;
59
+ image: string | null;
60
+ };
61
+ }
62
+ export interface SkillHubFile {
63
+ path: string;
64
+ sha256: string;
65
+ size: number;
66
+ }
67
+ export interface SkillHubVersion {
68
+ slug: string;
69
+ version: string;
70
+ createdAt: number;
71
+ changelog: string | null;
72
+ securityReports?: {
73
+ keen?: {
74
+ status: string;
75
+ statusText: string;
76
+ reportUrl?: string;
77
+ };
78
+ sanbu?: {
79
+ status: string;
80
+ statusText: string;
81
+ reportUrl?: string;
82
+ };
83
+ };
84
+ }
85
+ export interface SkillHubSkillset {
86
+ id: number;
87
+ slug: string;
88
+ displayName: string;
89
+ summary: string;
90
+ scene: string;
91
+ subScene: string;
92
+ content: string;
93
+ skillSlugs: string[];
94
+ skillCount: number;
95
+ createdAt: number;
96
+ updatedAt: number;
97
+ }
98
+ export interface SkillHubSkillsetListResponse {
99
+ skillSets: SkillHubSkillset[];
100
+ total: number;
101
+ }
102
+ /** Official taxonomy from GET /api/v1/categories (registry). */
103
+ export interface SkillHubRegistryCategoryItem {
104
+ key: string;
105
+ name: string;
106
+ nameEn: string;
107
+ sortOrder: number;
108
+ active: boolean;
109
+ }
110
+ /**
111
+ * SkillHub registry category taxonomy (ids align with {@link SkillHubSkill.category}).
112
+ */
113
+ export declare function listSkillHubRegistryCategories(): Promise<SkillHubRegistryCategoryItem[]>;
114
+ export declare function getSkillHubSkill(slug: string): Promise<SkillHubSkillDetail>;
115
+ export declare function getSkillHubSkillFiles(slug: string, version?: string): Promise<{
116
+ files: SkillHubFile[];
117
+ version: string;
118
+ }>;
119
+ export declare function getSkillHubSkillVersions(slug: string): Promise<SkillHubVersion[]>;
120
+ export declare function downloadSkillHubZipBuffer(slug: string, version?: string): Promise<{
121
+ buffer: Buffer;
122
+ version: string;
123
+ }>;
124
+ export interface SkillHubSkillsetListParams {
125
+ page?: number;
126
+ pageSize?: number;
127
+ keyword?: string;
128
+ scene?: string;
129
+ }
130
+ export declare function listSkillHubSkillsets(opts?: SkillHubSkillsetListParams): Promise<SkillHubSkillsetListResponse>;
131
+ export declare function getSkillHubSkillset(slug: string): Promise<SkillHubSkillset>;
132
+ export declare function batchGetSkillHubSkills(slugs: string[]): Promise<SkillHubSkillDetail[]>;
133
+ export declare function getDefaultSkillSlugs(): Promise<string[]>;
134
+ export declare function searchSkillHubSkills(query: string, maxSlugs?: number): Promise<{
135
+ slugs: string[];
136
+ total: number;
137
+ }>;
@@ -0,0 +1,217 @@
1
+ import { MAX_SKILL_ZIP_BYTES } from "../../../managed-store.js";
2
+ import { fetch } from "undici";
3
+ //#region src/agent/skills/marketplace/adapters/skillhub/registry-client.ts
4
+ /**
5
+ * HTTP client for api.skillhub.cn (registry: detail, files, versions, batch, skillsets, download).
6
+ */
7
+ const SKILLHUB_API_BASE = "https://api.skillhub.cn";
8
+ /** Max bytes when fetching SKILL.md / README for marketplace preview (redirects to COS). */
9
+ const MAX_SKILLHUB_README_BYTES = 512 * 1024;
10
+ function basenameSkillPath(p) {
11
+ const norm = p.replace(/\\/g, "/");
12
+ const parts = norm.split("/");
13
+ return parts[parts.length - 1] || norm;
14
+ }
15
+ /**
16
+ * Prefer SKILL.md, then README.md, then HOW_TO_USE.md (basename match, any directory depth).
17
+ */
18
+ function pickSkillHubDocFilePath(files) {
19
+ const rows = files.map((f) => ({
20
+ path: f.path.replace(/\\/g, "/"),
21
+ base: basenameSkillPath(f.path).toLowerCase()
22
+ }));
23
+ const firstBase = (name) => rows.find((r) => r.base === name.toLowerCase());
24
+ const skillMd = firstBase("SKILL.md") ?? firstBase("skill.md");
25
+ if (skillMd) return skillMd.path;
26
+ const readme = firstBase("README.md") ?? firstBase("readme.md");
27
+ if (readme) return readme.path;
28
+ const how = firstBase("HOW_TO_USE.md");
29
+ if (how) return how.path;
30
+ return null;
31
+ }
32
+ function assertSkillHubReadmeResponseUrl(finalUrl) {
33
+ let u;
34
+ try {
35
+ u = new URL(finalUrl);
36
+ } catch {
37
+ throw new Error("Invalid SkillHub file response URL");
38
+ }
39
+ if (u.protocol !== "https:") throw new Error("SkillHub file response must use HTTPS");
40
+ const host = u.hostname.toLowerCase();
41
+ if (host === "api.skillhub.cn") return;
42
+ if (host.endsWith(".myqcloud.com")) return;
43
+ throw new Error("SkillHub file redirect host is not allowlisted");
44
+ }
45
+ /**
46
+ * Fetches a single text file from the registry (follows redirect to COS when applicable).
47
+ */
48
+ async function getSkillHubSkillFileText(slug, filePath, version) {
49
+ const enc = encodeURIComponent(slug.trim());
50
+ const normPath = filePath.replace(/\\/g, "/");
51
+ const sp = new URLSearchParams({ path: normPath });
52
+ if (version?.trim()) sp.set("version", version.trim());
53
+ const res = await fetch(`${SKILLHUB_API_BASE}/api/v1/skills/${enc}/file?${sp.toString()}`, {
54
+ redirect: "follow",
55
+ headers: { Accept: "text/markdown,text/plain,*/*" }
56
+ });
57
+ if (!res.ok) {
58
+ const text = await res.text().catch(() => "");
59
+ let msg = `SkillHub file request failed (${res.status})`;
60
+ try {
61
+ const j = JSON.parse(text);
62
+ if (typeof j.message === "string") msg = j.message;
63
+ else if (typeof j.error === "string") msg = j.error;
64
+ } catch {
65
+ if (text) msg = text.slice(0, 200);
66
+ }
67
+ throw new Error(msg);
68
+ }
69
+ assertSkillHubReadmeResponseUrl(res.url);
70
+ const len = res.headers.get("content-length");
71
+ if (len) {
72
+ const n = Number(len);
73
+ if (Number.isFinite(n) && n > 524288) throw new Error(`SkillHub file exceeds maximum size (${MAX_SKILLHUB_README_BYTES} bytes)`);
74
+ }
75
+ const ab = await res.arrayBuffer();
76
+ if (ab.byteLength > 524288) throw new Error(`SkillHub file exceeds maximum size (${MAX_SKILLHUB_README_BYTES} bytes)`);
77
+ return new TextDecoder("utf-8").decode(ab);
78
+ }
79
+ /**
80
+ * SkillHub registry category taxonomy (ids align with {@link SkillHubSkill.category}).
81
+ */
82
+ async function listSkillHubRegistryCategories() {
83
+ const raw = await fetchJson(`${SKILLHUB_API_BASE}/api/v1/categories`);
84
+ return (Array.isArray(raw.items) ? raw.items : []).filter((c) => c && typeof c.key === "string" && c.key.trim().length > 0 && c.active !== false);
85
+ }
86
+ async function fetchJson(url, init) {
87
+ const res = await fetch(url, {
88
+ ...init,
89
+ headers: {
90
+ Accept: "application/json",
91
+ ...init?.headers
92
+ }
93
+ });
94
+ const text = await res.text();
95
+ if (!res.ok) {
96
+ let msg = `SkillHub request failed (${res.status})`;
97
+ try {
98
+ const j = JSON.parse(text);
99
+ if (j.message) msg = j.message;
100
+ else if (j.error) msg = j.error;
101
+ } catch {
102
+ if (text) msg = text.slice(0, 200);
103
+ }
104
+ throw new Error(msg);
105
+ }
106
+ try {
107
+ return JSON.parse(text);
108
+ } catch {
109
+ throw new Error("SkillHub returned invalid JSON");
110
+ }
111
+ }
112
+ async function getSkillHubSkill(slug) {
113
+ return fetchJson(`${SKILLHUB_API_BASE}/api/v1/skills/${encodeURIComponent(slug.trim())}`);
114
+ }
115
+ async function getSkillHubSkillFiles(slug, version) {
116
+ return fetchJson(`${SKILLHUB_API_BASE}/api/v1/skills/${encodeURIComponent(slug.trim())}/files${version ? `?version=${encodeURIComponent(version)}` : ""}`);
117
+ }
118
+ async function getSkillHubSkillVersions(slug) {
119
+ return fetchJson(`${SKILLHUB_API_BASE}/api/v1/skills/${encodeURIComponent(slug.trim())}/versions`);
120
+ }
121
+ async function downloadSkillHubZipBuffer(slug, version) {
122
+ let url = `${SKILLHUB_API_BASE}/api/v1/download?slug=${encodeURIComponent(slug.trim())}`;
123
+ if (version?.trim()) url += `&version=${encodeURIComponent(version.trim())}`;
124
+ const res = await fetch(url, { redirect: "follow" });
125
+ if (!res.ok) throw new Error(`Failed to download skill archive (${res.status})`);
126
+ const len = res.headers.get("content-length");
127
+ if (len) {
128
+ const n = Number(len);
129
+ if (Number.isFinite(n) && n > 15728640) throw new Error(`Zip exceeds maximum size (${MAX_SKILL_ZIP_BYTES} bytes)`);
130
+ }
131
+ const ab = await res.arrayBuffer();
132
+ const buf = Buffer.from(ab);
133
+ if (buf.length > 15728640) throw new Error(`Zip exceeds maximum size (${MAX_SKILL_ZIP_BYTES} bytes)`);
134
+ let resolvedVersion = version ?? "1.0.0";
135
+ if (!version?.trim()) try {
136
+ resolvedVersion = (await getSkillHubSkillFiles(slug)).version;
137
+ } catch {}
138
+ return {
139
+ buffer: buf,
140
+ version: resolvedVersion
141
+ };
142
+ }
143
+ async function listSkillHubSkillsets(opts = {}) {
144
+ const page = opts.page ?? 1;
145
+ const pageSize = opts.pageSize ?? 20;
146
+ const sp = new URLSearchParams({
147
+ page: String(page),
148
+ pageSize: String(pageSize)
149
+ });
150
+ if (opts.keyword?.trim()) sp.set("keyword", opts.keyword.trim());
151
+ if (opts.scene?.trim()) sp.set("scene", opts.scene.trim());
152
+ return fetchJson(`${SKILLHUB_API_BASE}/api/v1/skillsets?${sp.toString()}`);
153
+ }
154
+ async function getSkillHubSkillset(slug) {
155
+ return fetchJson(`${SKILLHUB_API_BASE}/api/v1/skillsets/${encodeURIComponent(slug.trim())}`);
156
+ }
157
+ async function batchGetSkillHubSkills(slugs) {
158
+ if (slugs.length === 0) return [];
159
+ return (await fetchJson(`${SKILLHUB_API_BASE}/api/v1/skills/batch`, {
160
+ method: "POST",
161
+ headers: { "Content-Type": "application/json" },
162
+ body: JSON.stringify({ slugs })
163
+ })).items ?? [];
164
+ }
165
+ const SKILLSET_DISCOVERY_PAGE_CAP = 25;
166
+ const MAX_DEFAULT_SLUGS = 200;
167
+ async function getDefaultSkillSlugs() {
168
+ const slugs = /* @__PURE__ */ new Set();
169
+ let page = 1;
170
+ const pageSize = 50;
171
+ let total = Infinity;
172
+ while (page <= SKILLSET_DISCOVERY_PAGE_CAP && slugs.size < MAX_DEFAULT_SLUGS) {
173
+ const response = await listSkillHubSkillsets({
174
+ page,
175
+ pageSize
176
+ });
177
+ total = response.total;
178
+ for (const skillset of response.skillSets) for (const slug of skillset.skillSlugs) slugs.add(slug);
179
+ if (page * pageSize >= total) break;
180
+ page += 1;
181
+ }
182
+ return Array.from(slugs).slice(0, MAX_DEFAULT_SLUGS);
183
+ }
184
+ async function searchSkillHubSkills(query, maxSlugs = 200) {
185
+ const keyword = query.trim();
186
+ if (!keyword) return {
187
+ slugs: [],
188
+ total: 0
189
+ };
190
+ const slugs = [];
191
+ const seen = /* @__PURE__ */ new Set();
192
+ let page = 1;
193
+ const batchSize = 50;
194
+ while (page <= SKILLSET_DISCOVERY_PAGE_CAP) {
195
+ const response = await listSkillHubSkillsets({
196
+ page,
197
+ pageSize: batchSize,
198
+ keyword
199
+ });
200
+ const totalSkillsets = response.total;
201
+ for (const skillset of response.skillSets) for (const slug of skillset.skillSlugs) if (!seen.has(slug)) {
202
+ seen.add(slug);
203
+ slugs.push(slug);
204
+ }
205
+ if (page * batchSize >= totalSkillsets) break;
206
+ page += 1;
207
+ }
208
+ const capped = slugs.slice(0, maxSlugs);
209
+ return {
210
+ slugs: capped,
211
+ total: capped.length
212
+ };
213
+ }
214
+ //#endregion
215
+ export { MAX_SKILLHUB_README_BYTES, batchGetSkillHubSkills, downloadSkillHubZipBuffer, getDefaultSkillSlugs, getSkillHubSkill, getSkillHubSkillFileText, getSkillHubSkillFiles, getSkillHubSkillVersions, getSkillHubSkillset, listSkillHubRegistryCategories, listSkillHubSkillsets, pickSkillHubDocFilePath, searchSkillHubSkills };
216
+
217
+ //# sourceMappingURL=registry-client.js.map