@hasna/skills 0.0.2 → 0.0.3

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 (387) hide show
  1. package/bin/index.js +253 -715
  2. package/bin/mcp.js +221 -683
  3. package/package.json +1 -1
  4. package/src/cli/cli.test.ts +14 -14
  5. package/src/cli/index.tsx +1 -1
  6. package/src/lib/installer.test.ts +41 -41
  7. package/src/lib/registry.test.ts +10 -10
  8. package/src/lib/registry.ts +10 -472
  9. package/src/lib/skillinfo.test.ts +12 -12
  10. package/src/mcp/index.ts +1 -1
  11. package/skills/skill-architecture-docs/CLAUDE.md +0 -19
  12. package/skills/skill-architecture-docs/package.json +0 -32
  13. package/skills/skill-architecture-docs/src/index.ts +0 -543
  14. package/skills/skill-auto-format/CLAUDE.md +0 -19
  15. package/skills/skill-auto-format/package.json +0 -32
  16. package/skills/skill-auto-format/src/index.ts +0 -103
  17. package/skills/skill-auto-format/tsconfig.json +0 -14
  18. package/skills/skill-brainstorm/README.md +0 -17
  19. package/skills/skill-brainstorm/install.sh +0 -112
  20. package/skills/skill-brainstorm/src/auth.ts +0 -49
  21. package/skills/skill-brainstorm/src/installer.ts +0 -324
  22. package/skills/skill-brainstorm/src/skill-install.ts +0 -205
  23. package/skills/skill-browser-agent/CLAUDE.md +0 -19
  24. package/skills/skill-browser-agent/package.json +0 -32
  25. package/skills/skill-browser-agent/src/index.ts +0 -626
  26. package/skills/skill-browser-agent/tsconfig.json +0 -14
  27. package/skills/skill-browseruse/LICENSE +0 -21
  28. package/skills/skill-browseruse/README.md +0 -27
  29. package/skills/skill-browseruse/SKILL.md +0 -113
  30. package/skills/skill-browseruse/install.sh +0 -112
  31. package/skills/skill-browseruse/package.json +0 -31
  32. package/skills/skill-browseruse/src/auth.ts +0 -49
  33. package/skills/skill-browseruse/src/installer.ts +0 -324
  34. package/skills/skill-browseruse/src/skill-install.ts +0 -174
  35. package/skills/skill-calculate/LICENSE +0 -21
  36. package/skills/skill-calculate/README.md +0 -17
  37. package/skills/skill-calculate/install.sh +0 -112
  38. package/skills/skill-calculate/package.json +0 -31
  39. package/skills/skill-calculate/src/auth.ts +0 -49
  40. package/skills/skill-calculate/src/installer.ts +0 -324
  41. package/skills/skill-calculate/src/skill-install.ts +0 -205
  42. package/skills/skill-chromedevtools/LICENSE +0 -21
  43. package/skills/skill-chromedevtools/README.md +0 -27
  44. package/skills/skill-chromedevtools/SKILL.md +0 -110
  45. package/skills/skill-chromedevtools/install.sh +0 -112
  46. package/skills/skill-chromedevtools/package.json +0 -31
  47. package/skills/skill-chromedevtools/src/auth.ts +0 -49
  48. package/skills/skill-chromedevtools/src/installer.ts +0 -324
  49. package/skills/skill-chromedevtools/src/skill-install.ts +0 -174
  50. package/skills/skill-companyguide/LICENSE +0 -21
  51. package/skills/skill-companyguide/README.md +0 -17
  52. package/skills/skill-companyguide/install.sh +0 -112
  53. package/skills/skill-companyguide/package.json +0 -31
  54. package/skills/skill-companyguide/src/auth.ts +0 -49
  55. package/skills/skill-companyguide/src/installer.ts +0 -324
  56. package/skills/skill-companyguide/src/skill-install.ts +0 -205
  57. package/skills/skill-compose-gmail/tsconfig.json +0 -14
  58. package/skills/skill-context7/LICENSE +0 -21
  59. package/skills/skill-context7/README.md +0 -27
  60. package/skills/skill-context7/SKILL.md +0 -103
  61. package/skills/skill-context7/install.sh +0 -112
  62. package/skills/skill-context7/package.json +0 -31
  63. package/skills/skill-context7/src/auth.ts +0 -49
  64. package/skills/skill-context7/src/installer.ts +0 -324
  65. package/skills/skill-context7/src/skill-install.ts +0 -174
  66. package/skills/skill-crawl/LICENSE +0 -21
  67. package/skills/skill-crawl/README.md +0 -17
  68. package/skills/skill-crawl/install.sh +0 -112
  69. package/skills/skill-crawl/package.json +0 -31
  70. package/skills/skill-crawl/src/auth.ts +0 -49
  71. package/skills/skill-crawl/src/installer.ts +0 -324
  72. package/skills/skill-crawl/src/skill-install.ts +0 -205
  73. package/skills/skill-csv-transformer/CLAUDE.md +0 -19
  74. package/skills/skill-csv-transformer/package.json +0 -32
  75. package/skills/skill-csv-transformer/src/index.ts +0 -81
  76. package/skills/skill-csv-transformer/tsconfig.json +0 -14
  77. package/skills/skill-debug/LICENSE +0 -21
  78. package/skills/skill-debug/README.md +0 -17
  79. package/skills/skill-debug/install.sh +0 -112
  80. package/skills/skill-debug/package.json +0 -31
  81. package/skills/skill-debug/src/auth.ts +0 -49
  82. package/skills/skill-debug/src/installer.ts +0 -324
  83. package/skills/skill-debug/src/skill-install.ts +0 -205
  84. package/skills/skill-deep-research/CLAUDE.md +0 -19
  85. package/skills/skill-deep-research/package.json +0 -32
  86. package/skills/skill-deep-research/src/index.ts +0 -1149
  87. package/skills/skill-deep-research/tsconfig.json +0 -14
  88. package/skills/skill-dns-manager/CLAUDE.md +0 -19
  89. package/skills/skill-dns-manager/package.json +0 -32
  90. package/skills/skill-dns-manager/src/index.ts +0 -92
  91. package/skills/skill-dns-manager/tsconfig.json +0 -14
  92. package/skills/skill-download/LICENSE +0 -21
  93. package/skills/skill-download/README.md +0 -17
  94. package/skills/skill-download/install.sh +0 -112
  95. package/skills/skill-download/package.json +0 -31
  96. package/skills/skill-download/src/auth.ts +0 -49
  97. package/skills/skill-download/src/installer.ts +0 -324
  98. package/skills/skill-download/src/skill-install.ts +0 -205
  99. package/skills/skill-exa/LICENSE +0 -21
  100. package/skills/skill-exa/README.md +0 -26
  101. package/skills/skill-exa/SKILL.md +0 -92
  102. package/skills/skill-exa/install.sh +0 -112
  103. package/skills/skill-exa/package.json +0 -31
  104. package/skills/skill-exa/src/auth.ts +0 -49
  105. package/skills/skill-exa/src/installer.ts +0 -324
  106. package/skills/skill-exa/src/skill-install.ts +0 -174
  107. package/skills/skill-filesearch/LICENSE +0 -21
  108. package/skills/skill-filesearch/README.md +0 -17
  109. package/skills/skill-filesearch/install.sh +0 -112
  110. package/skills/skill-filesearch/package.json +0 -31
  111. package/skills/skill-filesearch/src/auth.ts +0 -49
  112. package/skills/skill-filesearch/src/installer.ts +0 -324
  113. package/skills/skill-filesearch/src/skill-install.ts +0 -205
  114. package/skills/skill-fill/LICENSE +0 -21
  115. package/skills/skill-fill/README.md +0 -17
  116. package/skills/skill-fill/install.sh +0 -112
  117. package/skills/skill-fill/package.json +0 -31
  118. package/skills/skill-fill/src/auth.ts +0 -49
  119. package/skills/skill-fill/src/installer.ts +0 -324
  120. package/skills/skill-fill/src/skill-install.ts +0 -205
  121. package/skills/skill-generate-audio/CLAUDE.md +0 -3
  122. package/skills/skill-generate-audio/SKILL.md +0 -53
  123. package/skills/skill-generate-audio/package.json +0 -30
  124. package/skills/skill-generate-audio/src/index.ts +0 -656
  125. package/skills/skill-generate-audio/tsconfig.json +0 -18
  126. package/skills/skill-generate-readme/CLAUDE.md +0 -19
  127. package/skills/skill-generate-readme/package.json +0 -32
  128. package/skills/skill-generate-readme/src/index.ts +0 -867
  129. package/skills/skill-generate-readme/tsconfig.json +0 -14
  130. package/skills/skill-generate-slides/CLAUDE.md +0 -19
  131. package/skills/skill-generate-slides/package.json +0 -32
  132. package/skills/skill-generate-slides/src/ai.ts +0 -140
  133. package/skills/skill-generate-slides/src/cli.ts +0 -161
  134. package/skills/skill-generate-slides/src/export.ts +0 -65
  135. package/skills/skill-generate-slides/src/index.ts +0 -1417
  136. package/skills/skill-generate-slides/src/layout.ts +0 -31
  137. package/skills/skill-generate-slides/src/parse.ts +0 -282
  138. package/skills/skill-generate-slides/src/render.ts +0 -711
  139. package/skills/skill-generate-slides/tsconfig.json +0 -14
  140. package/skills/skill-get-api-docs/CLAUDE.md +0 -19
  141. package/skills/skill-get-api-docs/package.json +0 -32
  142. package/skills/skill-get-api-docs/src/index.ts +0 -1176
  143. package/skills/skill-get-api-docs/tsconfig.json +0 -14
  144. package/skills/skill-googledrive/LICENSE +0 -21
  145. package/skills/skill-googledrive/README.md +0 -27
  146. package/skills/skill-googledrive/SKILL.md +0 -140
  147. package/skills/skill-googledrive/install.sh +0 -112
  148. package/skills/skill-googledrive/package.json +0 -31
  149. package/skills/skill-googledrive/src/auth.ts +0 -49
  150. package/skills/skill-googledrive/src/installer.ts +0 -324
  151. package/skills/skill-googledrive/src/skill-install.ts +0 -174
  152. package/skills/skill-grant-compliance-scanner/CLAUDE.md +0 -19
  153. package/skills/skill-grant-compliance-scanner/package.json +0 -32
  154. package/skills/skill-grant-compliance-scanner/src/index.ts +0 -94
  155. package/skills/skill-grant-compliance-scanner/tsconfig.json +0 -14
  156. package/skills/skill-hubsearch/LICENSE +0 -21
  157. package/skills/skill-hubsearch/README.md +0 -17
  158. package/skills/skill-hubsearch/install.sh +0 -112
  159. package/skills/skill-hubsearch/package.json +0 -31
  160. package/skills/skill-hubsearch/src/auth.ts +0 -49
  161. package/skills/skill-hubsearch/src/installer.ts +0 -324
  162. package/skills/skill-hubsearch/src/skill-install.ts +0 -205
  163. package/skills/skill-implementation-architecture/CLAUDE.md +0 -19
  164. package/skills/skill-implementation-architecture/package.json +0 -32
  165. package/skills/skill-implementation-architecture/src/index.ts +0 -460
  166. package/skills/skill-implementation-architecture/tsconfig.json +0 -14
  167. package/skills/skill-implementation-audit/CLAUDE.md +0 -19
  168. package/skills/skill-implementation-audit/package.json +0 -32
  169. package/skills/skill-implementation-audit/src/index.ts +0 -502
  170. package/skills/skill-implementation-audit/tsconfig.json +0 -14
  171. package/skills/skill-implementation-cost/CLAUDE.md +0 -19
  172. package/skills/skill-implementation-cost/package.json +0 -32
  173. package/skills/skill-implementation-cost/src/index.ts +0 -873
  174. package/skills/skill-implementation-cost/tsconfig.json +0 -14
  175. package/skills/skill-implementation-dispatch/CLAUDE.md +0 -19
  176. package/skills/skill-implementation-dispatch/package.json +0 -32
  177. package/skills/skill-implementation-dispatch/src/index.ts +0 -390
  178. package/skills/skill-implementation-dispatch/tsconfig.json +0 -14
  179. package/skills/skill-implementation-hook/CLAUDE.md +0 -19
  180. package/skills/skill-implementation-hook/package.json +0 -32
  181. package/skills/skill-implementation-hook/src/index.ts +0 -787
  182. package/skills/skill-implementation-hook/tsconfig.json +0 -14
  183. package/skills/skill-implementation-index/CLAUDE.md +0 -19
  184. package/skills/skill-implementation-index/package.json +0 -32
  185. package/skills/skill-implementation-index/src/index.ts +0 -767
  186. package/skills/skill-implementation-index/tsconfig.json +0 -14
  187. package/skills/skill-implementation-init/CLAUDE.md +0 -19
  188. package/skills/skill-implementation-init/package.json +0 -32
  189. package/skills/skill-implementation-init/src/index.ts +0 -378
  190. package/skills/skill-implementation-init/tsconfig.json +0 -14
  191. package/skills/skill-implementation-memento/CLAUDE.md +0 -19
  192. package/skills/skill-implementation-memento/package.json +0 -32
  193. package/skills/skill-implementation-memento/src/index.ts +0 -442
  194. package/skills/skill-implementation-memento/tsconfig.json +0 -14
  195. package/skills/skill-linear/LICENSE +0 -21
  196. package/skills/skill-linear/README.md +0 -28
  197. package/skills/skill-linear/SKILL.md +0 -94
  198. package/skills/skill-linear/install.sh +0 -112
  199. package/skills/skill-linear/package.json +0 -31
  200. package/skills/skill-linear/src/auth.ts +0 -49
  201. package/skills/skill-linear/src/installer.ts +0 -324
  202. package/skills/skill-linear/src/skill-install.ts +0 -174
  203. package/skills/skill-mail/LICENSE +0 -21
  204. package/skills/skill-mail/README.md +0 -17
  205. package/skills/skill-mail/install.sh +0 -112
  206. package/skills/skill-mail/package.json +0 -31
  207. package/skills/skill-mail/src/auth.ts +0 -49
  208. package/skills/skill-mail/src/installer.ts +0 -324
  209. package/skills/skill-mail/src/skill-install.ts +0 -205
  210. package/skills/skill-manage-gmail/CLAUDE.md +0 -19
  211. package/skills/skill-manage-gmail/package.json +0 -32
  212. package/skills/skill-manage-gmail/src/index.ts +0 -504
  213. package/skills/skill-manage-gmail/tsconfig.json +0 -14
  214. package/skills/skill-merch-mockup-factory/CLAUDE.md +0 -19
  215. package/skills/skill-merch-mockup-factory/package.json +0 -32
  216. package/skills/skill-merch-mockup-factory/src/index.ts +0 -296
  217. package/skills/skill-merch-mockup-factory/tsconfig.json +0 -14
  218. package/skills/skill-message/LICENSE +0 -21
  219. package/skills/skill-message/README.md +0 -17
  220. package/skills/skill-message/install.sh +0 -112
  221. package/skills/skill-message/package.json +0 -31
  222. package/skills/skill-message/src/auth.ts +0 -49
  223. package/skills/skill-message/src/installer.ts +0 -324
  224. package/skills/skill-message/src/skill-install.ts +0 -205
  225. package/skills/skill-newsletter-campaign-planner/CLAUDE.md +0 -19
  226. package/skills/skill-newsletter-campaign-planner/package.json +0 -32
  227. package/skills/skill-newsletter-campaign-planner/src/index.ts +0 -252
  228. package/skills/skill-newsletter-campaign-planner/tsconfig.json +0 -14
  229. package/skills/skill-notify/LICENSE +0 -21
  230. package/skills/skill-notify/README.md +0 -17
  231. package/skills/skill-notify/install.sh +0 -112
  232. package/skills/skill-notify/package.json +0 -31
  233. package/skills/skill-notify/src/auth.ts +0 -49
  234. package/skills/skill-notify/src/installer.ts +0 -324
  235. package/skills/skill-notify/src/skill-install.ts +0 -205
  236. package/skills/skill-notion/LICENSE +0 -21
  237. package/skills/skill-notion/README.md +0 -27
  238. package/skills/skill-notion/SKILL.md +0 -115
  239. package/skills/skill-notion/install.sh +0 -112
  240. package/skills/skill-notion/package.json +0 -31
  241. package/skills/skill-notion/src/auth.ts +0 -49
  242. package/skills/skill-notion/src/installer.ts +0 -324
  243. package/skills/skill-notion/src/skill-install.ts +0 -174
  244. package/skills/skill-parse-pdf/CLAUDE.md +0 -19
  245. package/skills/skill-parse-pdf/package.json +0 -32
  246. package/skills/skill-parse-pdf/src/index.ts +0 -581
  247. package/skills/skill-parse-pdf/tsconfig.json +0 -14
  248. package/skills/skill-playwright/LICENSE +0 -21
  249. package/skills/skill-playwright/README.md +0 -27
  250. package/skills/skill-playwright/SKILL.md +0 -116
  251. package/skills/skill-playwright/install.sh +0 -112
  252. package/skills/skill-playwright/package.json +0 -31
  253. package/skills/skill-playwright/src/auth.ts +0 -49
  254. package/skills/skill-playwright/src/installer.ts +0 -324
  255. package/skills/skill-playwright/src/skill-install.ts +0 -174
  256. package/skills/skill-projectbuild/LICENSE +0 -21
  257. package/skills/skill-projectbuild/README.md +0 -17
  258. package/skills/skill-projectbuild/install.sh +0 -112
  259. package/skills/skill-projectbuild/package.json +0 -31
  260. package/skills/skill-projectbuild/src/auth.ts +0 -49
  261. package/skills/skill-projectbuild/src/installer.ts +0 -324
  262. package/skills/skill-projectbuild/src/skill-install.ts +0 -205
  263. package/skills/skill-read-gmail/CLAUDE.md +0 -19
  264. package/skills/skill-read-gmail/package.json +0 -32
  265. package/skills/skill-read-gmail/src/index.ts +0 -343
  266. package/skills/skill-read-gmail/tsconfig.json +0 -14
  267. package/skills/skill-remember/LICENSE +0 -21
  268. package/skills/skill-remember/README.md +0 -17
  269. package/skills/skill-remember/install.sh +0 -112
  270. package/skills/skill-remember/package.json +0 -31
  271. package/skills/skill-remember/src/auth.ts +0 -49
  272. package/skills/skill-remember/src/installer.ts +0 -324
  273. package/skills/skill-remember/src/skill-install.ts +0 -205
  274. package/skills/skill-schedule/README.md +0 -17
  275. package/skills/skill-schedule/install.sh +0 -112
  276. package/skills/skill-schedule/src/auth.ts +0 -49
  277. package/skills/skill-schedule/src/installer.ts +0 -324
  278. package/skills/skill-schedule/src/skill-install.ts +0 -205
  279. package/skills/skill-search/LICENSE +0 -21
  280. package/skills/skill-search/README.md +0 -17
  281. package/skills/skill-search/install.sh +0 -112
  282. package/skills/skill-search/package.json +0 -31
  283. package/skills/skill-search/src/auth.ts +0 -49
  284. package/skills/skill-search/src/installer.ts +0 -324
  285. package/skills/skill-search/src/skill-install.ts +0 -205
  286. package/skills/skill-shadcn/LICENSE +0 -21
  287. package/skills/skill-shadcn/README.md +0 -27
  288. package/skills/skill-shadcn/SKILL.md +0 -113
  289. package/skills/skill-shadcn/install.sh +0 -112
  290. package/skills/skill-shadcn/package.json +0 -31
  291. package/skills/skill-shadcn/src/auth.ts +0 -49
  292. package/skills/skill-shadcn/src/installer.ts +0 -324
  293. package/skills/skill-shadcn/src/skill-install.ts +0 -174
  294. package/skills/skill-shadcn-theme/CLAUDE.md +0 -19
  295. package/skills/skill-shadcn-theme/package.json +0 -32
  296. package/skills/skill-shadcn-theme/src/index.ts +0 -16
  297. package/skills/skill-shadcn-theme/tsconfig.json +0 -14
  298. package/skills/skill-social-template-kit/CLAUDE.md +0 -19
  299. package/skills/skill-social-template-kit/package.json +0 -32
  300. package/skills/skill-social-template-kit/src/index.ts +0 -303
  301. package/skills/skill-social-template-kit/tsconfig.json +0 -14
  302. package/skills/skill-summarize/LICENSE +0 -21
  303. package/skills/skill-summarize/README.md +0 -17
  304. package/skills/skill-summarize/install.sh +0 -112
  305. package/skills/skill-summarize/package.json +0 -31
  306. package/skills/skill-summarize/src/auth.ts +0 -49
  307. package/skills/skill-summarize/src/installer.ts +0 -324
  308. package/skills/skill-summarize/src/skill-install.ts +0 -205
  309. package/skills/skill-sync/LICENSE +0 -21
  310. package/skills/skill-sync/README.md +0 -17
  311. package/skills/skill-sync/install.sh +0 -112
  312. package/skills/skill-sync/package.json +0 -31
  313. package/skills/skill-sync/src/auth.ts +0 -49
  314. package/skills/skill-sync/src/installer.ts +0 -324
  315. package/skills/skill-sync/src/skill-install.ts +0 -205
  316. package/skills/skill-time-blocking-orchestrator/CLAUDE.md +0 -19
  317. package/skills/skill-time-blocking-orchestrator/package.json +0 -32
  318. package/skills/skill-time-blocking-orchestrator/src/index.ts +0 -328
  319. package/skills/skill-time-blocking-orchestrator/tsconfig.json +0 -14
  320. package/skills/skill-transform/.env.example +0 -2
  321. package/skills/skill-transform/LICENSE +0 -21
  322. package/skills/skill-transform/README.md +0 -17
  323. package/skills/skill-transform/SKILL.md +0 -127
  324. package/skills/skill-transform/install.sh +0 -112
  325. package/skills/skill-transform/package.json +0 -37
  326. package/skills/skill-transform/src/auth.ts +0 -49
  327. package/skills/skill-transform/src/http-client.ts +0 -128
  328. package/skills/skill-transform/src/index-http.ts +0 -111
  329. package/skills/skill-transform/src/index-local.ts +0 -368
  330. package/skills/skill-transform/src/index.ts +0 -111
  331. package/skills/skill-transform/src/installer.ts +0 -324
  332. package/skills/skill-transform/src/skill-install.ts +0 -205
  333. package/skills/skill-transform/src/transformers/ai-transformer.ts +0 -202
  334. package/skills/skill-transform/src/transformers/format-detector.ts +0 -147
  335. package/skills/skill-transform/src/types.ts +0 -95
  336. package/skills/skill-transform/tsconfig.json +0 -18
  337. package/skills/skill-translate/LICENSE +0 -21
  338. package/skills/skill-translate/README.md +0 -17
  339. package/skills/skill-translate/install.sh +0 -112
  340. package/skills/skill-translate/package.json +0 -31
  341. package/skills/skill-translate/src/auth.ts +0 -49
  342. package/skills/skill-translate/src/installer.ts +0 -324
  343. package/skills/skill-translate/src/skill-install.ts +0 -205
  344. package/skills/skill-vendor-comparison-coach/CLAUDE.md +0 -19
  345. package/skills/skill-vendor-comparison-coach/package.json +0 -32
  346. package/skills/skill-vendor-comparison-coach/src/index.ts +0 -337
  347. package/skills/skill-vendor-comparison-coach/tsconfig.json +0 -14
  348. package/skills/skill-videodownload/.env.example +0 -5
  349. package/skills/skill-videodownload/CLAUDE.md +0 -64
  350. package/skills/skill-videodownload/LICENSE +0 -21
  351. package/skills/skill-videodownload/README.md +0 -166
  352. package/skills/skill-videodownload/package.json +0 -49
  353. package/skills/skill-videodownload/src/commands/config.ts +0 -89
  354. package/skills/skill-videodownload/src/commands/download.ts +0 -61
  355. package/skills/skill-videodownload/src/commands/info.ts +0 -83
  356. package/skills/skill-videodownload/src/commands/list.ts +0 -84
  357. package/skills/skill-videodownload/src/lib/downloader.ts +0 -270
  358. package/skills/skill-videodownload/src/lib/storage.ts +0 -167
  359. package/skills/skill-videodownload/src/types/index.ts +0 -64
  360. package/skills/skill-videodownload/src/utils/logger.ts +0 -49
  361. package/skills/skill-videodownload/src/utils/paths.ts +0 -94
  362. package/skills/skill-videodownload/tsconfig.json +0 -17
  363. package/skills/skill-voiceover/.env.example +0 -5
  364. package/skills/skill-voiceover/CLAUDE.md +0 -40
  365. package/skills/skill-voiceover/LICENSE +0 -21
  366. package/skills/skill-voiceover/README.md +0 -64
  367. package/skills/skill-voiceover/package.json +0 -43
  368. package/skills/skill-voiceover/src/commands/config.ts +0 -38
  369. package/skills/skill-voiceover/src/commands/generate.ts +0 -37
  370. package/skills/skill-voiceover/src/commands/voices.ts +0 -33
  371. package/skills/skill-voiceover/src/lib/generator.ts +0 -159
  372. package/skills/skill-voiceover/src/lib/storage.ts +0 -55
  373. package/skills/skill-voiceover/src/types/index.ts +0 -55
  374. package/skills/skill-voiceover/src/utils/logger.ts +0 -30
  375. package/skills/skill-voiceover/src/utils/paths.ts +0 -22
  376. package/skills/skill-voiceover/tsconfig.json +0 -17
  377. package/skills/skill-websearch/LICENSE +0 -21
  378. package/skills/skill-websearch/README.md +0 -17
  379. package/skills/skill-websearch/install.sh +0 -112
  380. package/skills/skill-websearch/package.json +0 -31
  381. package/skills/skill-websearch/src/auth.ts +0 -49
  382. package/skills/skill-websearch/src/installer.ts +0 -324
  383. package/skills/skill-websearch/src/skill-install.ts +0 -205
  384. /package/skills/{skill-compose-gmail → skill-gmail}/CLAUDE.md +0 -0
  385. /package/skills/{skill-compose-gmail → skill-gmail}/package.json +0 -0
  386. /package/skills/{skill-compose-gmail → skill-gmail}/src/index.ts +0 -0
  387. /package/skills/{skill-architecture-docs → skill-gmail}/tsconfig.json +0 -0
@@ -1,1176 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { existsSync, mkdirSync, appendFileSync, readFileSync, writeFileSync } from "fs";
4
- import { join, resolve } from "path";
5
- import { randomUUID } from "crypto";
6
-
7
- // Constants
8
- const SKILL_NAME = "skill-get-api-docs";
9
- const SESSION_ID = randomUUID().slice(0, 8);
10
- const SESSION_TIMESTAMP = new Date()
11
- .toISOString()
12
- .replace(/[:.]/g, "_")
13
- .replace(/-/g, "_")
14
- .slice(0, 19)
15
- .toLowerCase();
16
-
17
- // Environment
18
- const SKILLS_OUTPUT_DIR = process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills");
19
- const EXPORTS_DIR = join(SKILLS_OUTPUT_DIR, "exports", SKILL_NAME, SESSION_ID);
20
- const LOGS_DIR = join(SKILLS_OUTPUT_DIR, "logs", SKILL_NAME);
21
- const CACHE_DIR = join(SKILLS_OUTPUT_DIR, "cache", SKILL_NAME);
22
-
23
- // Types
24
- interface DocSource {
25
- name: string;
26
- displayName: string;
27
- category: string;
28
- baseUrl: string;
29
- docsUrl: string;
30
- apiReference?: string;
31
- github?: string;
32
- sections?: string[];
33
- }
34
-
35
- interface FetchedDoc {
36
- tool: string;
37
- displayName: string;
38
- version: string;
39
- source: string;
40
- sections: DocSection[];
41
- examples: CodeExample[];
42
- fetchedAt: string;
43
- }
44
-
45
- interface DocSection {
46
- title: string;
47
- content: string;
48
- subsections?: DocSection[];
49
- }
50
-
51
- interface CodeExample {
52
- title: string;
53
- language: string;
54
- code: string;
55
- description?: string;
56
- }
57
-
58
- interface Options {
59
- tool: string;
60
- section?: string;
61
- search?: string;
62
- version?: string;
63
- format: "markdown" | "json" | "html";
64
- list: boolean;
65
- examples: boolean;
66
- verbose: boolean;
67
- }
68
-
69
- // Documentation sources registry
70
- const DOC_SOURCES: Record<string, DocSource> = {
71
- // AI & Machine Learning
72
- openai: {
73
- name: "openai",
74
- displayName: "OpenAI API",
75
- category: "AI & Machine Learning",
76
- baseUrl: "https://platform.openai.com",
77
- docsUrl: "https://platform.openai.com/docs/api-reference",
78
- sections: ["authentication", "models", "chat", "embeddings", "images", "audio", "fine-tuning", "assistants"],
79
- },
80
- anthropic: {
81
- name: "anthropic",
82
- displayName: "Anthropic Claude API",
83
- category: "AI & Machine Learning",
84
- baseUrl: "https://docs.anthropic.com",
85
- docsUrl: "https://docs.anthropic.com/en/api",
86
- sections: ["authentication", "messages", "models", "streaming", "vision", "tool-use"],
87
- },
88
- "google-ai": {
89
- name: "google-ai",
90
- displayName: "Google AI (Gemini)",
91
- category: "AI & Machine Learning",
92
- baseUrl: "https://ai.google.dev",
93
- docsUrl: "https://ai.google.dev/api/rest",
94
- sections: ["getting-started", "models", "generate-content", "embeddings", "files"],
95
- },
96
- langchain: {
97
- name: "langchain",
98
- displayName: "LangChain",
99
- category: "AI & Machine Learning",
100
- baseUrl: "https://js.langchain.com",
101
- docsUrl: "https://js.langchain.com/docs",
102
- github: "https://github.com/langchain-ai/langchainjs",
103
- sections: ["getting-started", "llms", "chains", "agents", "memory", "retrievers"],
104
- },
105
- huggingface: {
106
- name: "huggingface",
107
- displayName: "Hugging Face",
108
- category: "AI & Machine Learning",
109
- baseUrl: "https://huggingface.co",
110
- docsUrl: "https://huggingface.co/docs/api-inference",
111
- sections: ["inference", "models", "datasets", "spaces"],
112
- },
113
- replicate: {
114
- name: "replicate",
115
- displayName: "Replicate",
116
- category: "AI & Machine Learning",
117
- baseUrl: "https://replicate.com",
118
- docsUrl: "https://replicate.com/docs/reference/http",
119
- sections: ["authentication", "predictions", "models", "deployments", "webhooks"],
120
- },
121
-
122
- // Cloud Providers
123
- "aws-s3": {
124
- name: "aws-s3",
125
- displayName: "AWS S3",
126
- category: "Cloud Providers",
127
- baseUrl: "https://docs.aws.amazon.com",
128
- docsUrl: "https://docs.aws.amazon.com/s3/index.html",
129
- sections: ["buckets", "objects", "access-control", "encryption", "lifecycle"],
130
- },
131
- "aws-lambda": {
132
- name: "aws-lambda",
133
- displayName: "AWS Lambda",
134
- category: "Cloud Providers",
135
- baseUrl: "https://docs.aws.amazon.com",
136
- docsUrl: "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html",
137
- sections: ["getting-started", "functions", "triggers", "layers", "concurrency"],
138
- },
139
- vercel: {
140
- name: "vercel",
141
- displayName: "Vercel",
142
- category: "Cloud Providers",
143
- baseUrl: "https://vercel.com",
144
- docsUrl: "https://vercel.com/docs",
145
- sections: ["deployments", "domains", "functions", "edge", "storage", "analytics"],
146
- },
147
- cloudflare: {
148
- name: "cloudflare",
149
- displayName: "Cloudflare",
150
- category: "Cloud Providers",
151
- baseUrl: "https://developers.cloudflare.com",
152
- docsUrl: "https://developers.cloudflare.com/api",
153
- sections: ["workers", "pages", "r2", "d1", "kv", "durable-objects"],
154
- },
155
- netlify: {
156
- name: "netlify",
157
- displayName: "Netlify",
158
- category: "Cloud Providers",
159
- baseUrl: "https://docs.netlify.com",
160
- docsUrl: "https://docs.netlify.com/api/get-started/",
161
- sections: ["sites", "deploys", "forms", "functions", "identity"],
162
- },
163
-
164
- // Databases
165
- postgresql: {
166
- name: "postgresql",
167
- displayName: "PostgreSQL",
168
- category: "Databases",
169
- baseUrl: "https://www.postgresql.org",
170
- docsUrl: "https://www.postgresql.org/docs/current/",
171
- sections: ["sql", "functions", "indexes", "transactions", "extensions"],
172
- },
173
- mongodb: {
174
- name: "mongodb",
175
- displayName: "MongoDB",
176
- category: "Databases",
177
- baseUrl: "https://www.mongodb.com",
178
- docsUrl: "https://www.mongodb.com/docs/manual/",
179
- sections: ["crud", "aggregation", "indexes", "transactions", "replication"],
180
- },
181
- redis: {
182
- name: "redis",
183
- displayName: "Redis",
184
- category: "Databases",
185
- baseUrl: "https://redis.io",
186
- docsUrl: "https://redis.io/docs/",
187
- sections: ["commands", "data-types", "clients", "pubsub", "streams"],
188
- },
189
- supabase: {
190
- name: "supabase",
191
- displayName: "Supabase",
192
- category: "Databases",
193
- baseUrl: "https://supabase.com",
194
- docsUrl: "https://supabase.com/docs/reference",
195
- sections: ["database", "auth", "storage", "functions", "realtime"],
196
- },
197
- prisma: {
198
- name: "prisma",
199
- displayName: "Prisma ORM",
200
- category: "Databases",
201
- baseUrl: "https://www.prisma.io",
202
- docsUrl: "https://www.prisma.io/docs/reference",
203
- github: "https://github.com/prisma/prisma",
204
- sections: ["schema", "client", "migrations", "queries", "relations"],
205
- },
206
- drizzle: {
207
- name: "drizzle",
208
- displayName: "Drizzle ORM",
209
- category: "Databases",
210
- baseUrl: "https://orm.drizzle.team",
211
- docsUrl: "https://orm.drizzle.team/docs/overview",
212
- github: "https://github.com/drizzle-team/drizzle-orm",
213
- sections: ["schema", "queries", "relations", "migrations", "studio"],
214
- },
215
-
216
- // Web Frameworks
217
- nextjs: {
218
- name: "nextjs",
219
- displayName: "Next.js",
220
- category: "Web Frameworks",
221
- baseUrl: "https://nextjs.org",
222
- docsUrl: "https://nextjs.org/docs",
223
- github: "https://github.com/vercel/next.js",
224
- sections: ["app-router", "pages-router", "api-routes", "data-fetching", "styling", "deployment"],
225
- },
226
- react: {
227
- name: "react",
228
- displayName: "React",
229
- category: "Web Frameworks",
230
- baseUrl: "https://react.dev",
231
- docsUrl: "https://react.dev/reference/react",
232
- github: "https://github.com/facebook/react",
233
- sections: ["components", "hooks", "apis", "dom", "server"],
234
- },
235
- vue: {
236
- name: "vue",
237
- displayName: "Vue.js",
238
- category: "Web Frameworks",
239
- baseUrl: "https://vuejs.org",
240
- docsUrl: "https://vuejs.org/api/",
241
- github: "https://github.com/vuejs/core",
242
- sections: ["composition-api", "options-api", "built-ins", "sfc", "ssr"],
243
- },
244
- svelte: {
245
- name: "svelte",
246
- displayName: "Svelte",
247
- category: "Web Frameworks",
248
- baseUrl: "https://svelte.dev",
249
- docsUrl: "https://svelte.dev/docs",
250
- github: "https://github.com/sveltejs/svelte",
251
- sections: ["components", "reactivity", "stores", "motion", "sveltekit"],
252
- },
253
- express: {
254
- name: "express",
255
- displayName: "Express.js",
256
- category: "Web Frameworks",
257
- baseUrl: "https://expressjs.com",
258
- docsUrl: "https://expressjs.com/en/4x/api.html",
259
- github: "https://github.com/expressjs/express",
260
- sections: ["application", "request", "response", "router", "middleware"],
261
- },
262
- hono: {
263
- name: "hono",
264
- displayName: "Hono",
265
- category: "Web Frameworks",
266
- baseUrl: "https://hono.dev",
267
- docsUrl: "https://hono.dev/docs",
268
- github: "https://github.com/honojs/hono",
269
- sections: ["routing", "middleware", "context", "helpers", "adapters"],
270
- },
271
-
272
- // Payment & Commerce
273
- stripe: {
274
- name: "stripe",
275
- displayName: "Stripe",
276
- category: "Payment & Commerce",
277
- baseUrl: "https://stripe.com",
278
- docsUrl: "https://stripe.com/docs/api",
279
- sections: ["authentication", "customers", "payments", "subscriptions", "webhooks", "checkout"],
280
- },
281
- paypal: {
282
- name: "paypal",
283
- displayName: "PayPal",
284
- category: "Payment & Commerce",
285
- baseUrl: "https://developer.paypal.com",
286
- docsUrl: "https://developer.paypal.com/docs/api/overview/",
287
- sections: ["authentication", "orders", "payments", "subscriptions", "webhooks"],
288
- },
289
- shopify: {
290
- name: "shopify",
291
- displayName: "Shopify",
292
- category: "Payment & Commerce",
293
- baseUrl: "https://shopify.dev",
294
- docsUrl: "https://shopify.dev/docs/api",
295
- sections: ["admin-api", "storefront-api", "webhooks", "apps", "themes"],
296
- },
297
-
298
- // Communication
299
- twilio: {
300
- name: "twilio",
301
- displayName: "Twilio",
302
- category: "Communication",
303
- baseUrl: "https://www.twilio.com",
304
- docsUrl: "https://www.twilio.com/docs/usage/api",
305
- sections: ["sms", "voice", "video", "conversations", "verify"],
306
- },
307
- sendgrid: {
308
- name: "sendgrid",
309
- displayName: "SendGrid",
310
- category: "Communication",
311
- baseUrl: "https://sendgrid.com",
312
- docsUrl: "https://docs.sendgrid.com/api-reference",
313
- sections: ["mail-send", "templates", "contacts", "stats", "webhooks"],
314
- },
315
- resend: {
316
- name: "resend",
317
- displayName: "Resend",
318
- category: "Communication",
319
- baseUrl: "https://resend.com",
320
- docsUrl: "https://resend.com/docs/api-reference/introduction",
321
- sections: ["emails", "domains", "api-keys", "audiences", "react-email"],
322
- },
323
- slack: {
324
- name: "slack",
325
- displayName: "Slack API",
326
- category: "Communication",
327
- baseUrl: "https://api.slack.com",
328
- docsUrl: "https://api.slack.com/methods",
329
- sections: ["authentication", "messaging", "files", "users", "channels", "apps"],
330
- },
331
- discord: {
332
- name: "discord",
333
- displayName: "Discord API",
334
- category: "Communication",
335
- baseUrl: "https://discord.com",
336
- docsUrl: "https://discord.com/developers/docs/intro",
337
- sections: ["authentication", "channels", "guilds", "users", "webhooks", "interactions"],
338
- },
339
-
340
- // Developer Tools
341
- github: {
342
- name: "github",
343
- displayName: "GitHub API",
344
- category: "Developer Tools",
345
- baseUrl: "https://github.com",
346
- docsUrl: "https://docs.github.com/en/rest",
347
- sections: ["authentication", "repositories", "issues", "pull-requests", "actions", "webhooks"],
348
- },
349
- gitlab: {
350
- name: "gitlab",
351
- displayName: "GitLab API",
352
- category: "Developer Tools",
353
- baseUrl: "https://gitlab.com",
354
- docsUrl: "https://docs.gitlab.com/ee/api/",
355
- sections: ["authentication", "projects", "merge-requests", "pipelines", "issues"],
356
- },
357
- docker: {
358
- name: "docker",
359
- displayName: "Docker",
360
- category: "Developer Tools",
361
- baseUrl: "https://docs.docker.com",
362
- docsUrl: "https://docs.docker.com/reference/",
363
- sections: ["dockerfile", "compose", "cli", "api", "registry"],
364
- },
365
- kubernetes: {
366
- name: "kubernetes",
367
- displayName: "Kubernetes",
368
- category: "Developer Tools",
369
- baseUrl: "https://kubernetes.io",
370
- docsUrl: "https://kubernetes.io/docs/reference/",
371
- sections: ["pods", "deployments", "services", "configmaps", "secrets", "kubectl"],
372
- },
373
- };
374
-
375
- // Utility functions
376
- function ensureDir(dir: string): void {
377
- if (!existsSync(dir)) {
378
- mkdirSync(dir, { recursive: true });
379
- }
380
- }
381
-
382
- function log(message: string, level: "info" | "error" | "success" | "warn" = "info"): void {
383
- const timestamp = new Date().toISOString();
384
- const logFile = join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`);
385
-
386
- ensureDir(LOGS_DIR);
387
-
388
- const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
389
- appendFileSync(logFile, logEntry);
390
-
391
- const prefixes: Record<string, string> = {
392
- info: "[INFO]",
393
- error: "[ERROR]",
394
- success: "[SUCCESS]",
395
- warn: "[WARN]",
396
- };
397
-
398
- console.log(`${prefixes[level]} ${message}`);
399
- }
400
-
401
- function parseArguments(): Options {
402
- const args = process.argv.slice(2);
403
-
404
- const options: Options = {
405
- tool: "",
406
- format: "markdown",
407
- list: false,
408
- examples: true,
409
- verbose: false,
410
- };
411
-
412
- for (let i = 0; i < args.length; i++) {
413
- const arg = args[i];
414
-
415
- switch (arg) {
416
- case "--section":
417
- options.section = args[++i];
418
- break;
419
- case "--search":
420
- options.search = args[++i];
421
- break;
422
- case "--version":
423
- options.version = args[++i];
424
- break;
425
- case "--format":
426
- options.format = args[++i] as "markdown" | "json" | "html";
427
- break;
428
- case "--list":
429
- options.list = true;
430
- break;
431
- case "--examples":
432
- options.examples = true;
433
- break;
434
- case "--no-examples":
435
- options.examples = false;
436
- break;
437
- case "--verbose":
438
- options.verbose = true;
439
- break;
440
- case "--help":
441
- case "-h":
442
- printHelp();
443
- process.exit(0);
444
- default:
445
- if (!arg.startsWith("-") && !options.tool) {
446
- options.tool = arg.toLowerCase();
447
- }
448
- break;
449
- }
450
- }
451
-
452
- return options;
453
- }
454
-
455
- function printHelp(): void {
456
- console.log(`
457
- Get API Documentation - Fetch latest API docs for popular tools
458
-
459
- Usage:
460
- skills run get-api-docs -- <tool> [options]
461
-
462
- Arguments:
463
- tool Name of the tool/API to fetch docs for
464
-
465
- Options:
466
- --section <name> Specific section to retrieve
467
- --search <query> Search within documentation
468
- --version <version> Specific version (default: latest)
469
- --format <format> Output format: markdown, json, html (default: markdown)
470
- --list List all supported tools
471
- --examples Include code examples (default: true)
472
- --no-examples Exclude code examples
473
- --verbose Show detailed progress
474
- --help, -h Show this help
475
-
476
- Examples:
477
- skills run get-api-docs -- openai
478
- skills run get-api-docs -- stripe --section webhooks
479
- skills run get-api-docs -- nextjs --search "server actions"
480
- skills run get-api-docs -- --list
481
- `);
482
- }
483
-
484
- function listTools(): void {
485
- console.log("\n# Supported Tools & APIs\n");
486
-
487
- const categories: Record<string, DocSource[]> = {};
488
-
489
- for (const source of Object.values(DOC_SOURCES)) {
490
- if (!categories[source.category]) {
491
- categories[source.category] = [];
492
- }
493
- categories[source.category].push(source);
494
- }
495
-
496
- for (const [category, sources] of Object.entries(categories)) {
497
- console.log(`## ${category}\n`);
498
- for (const source of sources) {
499
- console.log(`- **${source.displayName}** (\`${source.name}\`)`);
500
- if (source.sections) {
501
- console.log(` Sections: ${source.sections.join(", ")}`);
502
- }
503
- }
504
- console.log("");
505
- }
506
- }
507
-
508
- async function fetchDocumentation(source: DocSource, options: Options): Promise<FetchedDoc> {
509
- if (options.verbose) {
510
- log(`Fetching documentation from ${source.docsUrl}...`);
511
- }
512
-
513
- // In a real implementation, this would scrape or fetch from the actual docs
514
- // For now, we'll generate structured documentation based on the source info
515
- const sections = await generateDocSections(source, options);
516
- const examples = options.examples ? await generateExamples(source, options) : [];
517
-
518
- return {
519
- tool: source.name,
520
- displayName: source.displayName,
521
- version: options.version || "latest",
522
- source: source.docsUrl,
523
- sections,
524
- examples,
525
- fetchedAt: new Date().toISOString(),
526
- };
527
- }
528
-
529
- async function generateDocSections(source: DocSource, options: Options): Promise<DocSection[]> {
530
- const sections: DocSection[] = [];
531
-
532
- // Overview section
533
- sections.push({
534
- title: "Overview",
535
- content: `${source.displayName} is a powerful API/tool in the ${source.category} category.\n\n` +
536
- `**Official Documentation:** ${source.docsUrl}\n` +
537
- (source.github ? `**GitHub Repository:** ${source.github}\n` : "") +
538
- `**Base URL:** ${source.baseUrl}`,
539
- });
540
-
541
- // Getting Started section
542
- sections.push({
543
- title: "Getting Started",
544
- content: getGettingStartedContent(source),
545
- });
546
-
547
- // Authentication section (for APIs)
548
- if (source.category !== "Databases" && source.category !== "Developer Tools") {
549
- sections.push({
550
- title: "Authentication",
551
- content: getAuthenticationContent(source),
552
- });
553
- }
554
-
555
- // Add available sections
556
- if (source.sections) {
557
- const filteredSections = options.section
558
- ? source.sections.filter((s) => s.toLowerCase().includes(options.section!.toLowerCase()))
559
- : source.sections;
560
-
561
- for (const sectionName of filteredSections) {
562
- sections.push({
563
- title: formatSectionTitle(sectionName),
564
- content: getSectionContent(source, sectionName),
565
- });
566
- }
567
- }
568
-
569
- // Filter by search if provided
570
- if (options.search) {
571
- const searchLower = options.search.toLowerCase();
572
- return sections.filter(
573
- (section) =>
574
- section.title.toLowerCase().includes(searchLower) ||
575
- section.content.toLowerCase().includes(searchLower)
576
- );
577
- }
578
-
579
- return sections;
580
- }
581
-
582
- function formatSectionTitle(section: string): string {
583
- return section
584
- .split("-")
585
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
586
- .join(" ");
587
- }
588
-
589
- function getGettingStartedContent(source: DocSource): string {
590
- const contents: Record<string, string> = {
591
- openai: `## Installation
592
-
593
- \`\`\`bash
594
- npm install openai
595
- # or
596
- bun add openai
597
- \`\`\`
598
-
599
- ## Quick Start
600
-
601
- \`\`\`typescript
602
- import OpenAI from 'openai';
603
-
604
- const openai = new OpenAI({
605
- apiKey: process.env.OPENAI_API_KEY,
606
- });
607
-
608
- const completion = await openai.chat.completions.create({
609
- model: "gpt-4",
610
- messages: [{ role: "user", content: "Hello!" }],
611
- });
612
-
613
- console.log(completion.choices[0].message.content);
614
- \`\`\``,
615
-
616
- anthropic: `## Installation
617
-
618
- \`\`\`bash
619
- npm install @anthropic-ai/sdk
620
- # or
621
- bun add @anthropic-ai/sdk
622
- \`\`\`
623
-
624
- ## Quick Start
625
-
626
- \`\`\`typescript
627
- import Anthropic from '@anthropic-ai/sdk';
628
-
629
- const anthropic = new Anthropic({
630
- apiKey: process.env.ANTHROPIC_API_KEY,
631
- });
632
-
633
- const message = await anthropic.messages.create({
634
- model: "claude-3-5-sonnet-20241022",
635
- max_tokens: 1024,
636
- messages: [{ role: "user", content: "Hello, Claude!" }],
637
- });
638
-
639
- console.log(message.content[0].text);
640
- \`\`\``,
641
-
642
- stripe: `## Installation
643
-
644
- \`\`\`bash
645
- npm install stripe
646
- # or
647
- bun add stripe
648
- \`\`\`
649
-
650
- ## Quick Start
651
-
652
- \`\`\`typescript
653
- import Stripe from 'stripe';
654
-
655
- const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
656
-
657
- // Create a customer
658
- const customer = await stripe.customers.create({
659
- email: 'customer@example.com',
660
- });
661
-
662
- // Create a payment intent
663
- const paymentIntent = await stripe.paymentIntents.create({
664
- amount: 1000,
665
- currency: 'usd',
666
- customer: customer.id,
667
- });
668
- \`\`\``,
669
-
670
- nextjs: `## Installation
671
-
672
- \`\`\`bash
673
- npx create-next-app@latest my-app
674
- # or
675
- bunx create-next-app@latest my-app
676
- \`\`\`
677
-
678
- ## Project Structure (App Router)
679
-
680
- \`\`\`
681
- my-app/
682
- ├── app/
683
- │ ├── layout.tsx # Root layout
684
- │ ├── page.tsx # Home page
685
- │ ├── api/ # API routes
686
- │ └── [slug]/ # Dynamic routes
687
- ├── components/
688
- ├── lib/
689
- └── public/
690
- \`\`\``,
691
-
692
- react: `## Installation
693
-
694
- \`\`\`bash
695
- npm create vite@latest my-app -- --template react-ts
696
- # or
697
- bunx create-vite my-app --template react-ts
698
- \`\`\`
699
-
700
- ## Quick Start
701
-
702
- \`\`\`tsx
703
- import { useState } from 'react';
704
-
705
- function Counter() {
706
- const [count, setCount] = useState(0);
707
-
708
- return (
709
- <button onClick={() => setCount(count + 1)}>
710
- Count: {count}
711
- </button>
712
- );
713
- }
714
- \`\`\``,
715
-
716
- supabase: `## Installation
717
-
718
- \`\`\`bash
719
- npm install @supabase/supabase-js
720
- # or
721
- bun add @supabase/supabase-js
722
- \`\`\`
723
-
724
- ## Quick Start
725
-
726
- \`\`\`typescript
727
- import { createClient } from '@supabase/supabase-js';
728
-
729
- const supabase = createClient(
730
- process.env.SUPABASE_URL!,
731
- process.env.SUPABASE_ANON_KEY!
732
- );
733
-
734
- // Query data
735
- const { data, error } = await supabase
736
- .from('users')
737
- .select('*')
738
- .eq('active', true);
739
- \`\`\``,
740
-
741
- prisma: `## Installation
742
-
743
- \`\`\`bash
744
- npm install prisma @prisma/client
745
- npx prisma init
746
- \`\`\`
747
-
748
- ## Quick Start
749
-
750
- \`\`\`typescript
751
- import { PrismaClient } from '@prisma/client';
752
-
753
- const prisma = new PrismaClient();
754
-
755
- // Query data
756
- const users = await prisma.user.findMany({
757
- where: { active: true },
758
- include: { posts: true },
759
- });
760
- \`\`\``,
761
-
762
- drizzle: `## Installation
763
-
764
- \`\`\`bash
765
- npm install drizzle-orm postgres
766
- npm install -D drizzle-kit
767
- \`\`\`
768
-
769
- ## Quick Start
770
-
771
- \`\`\`typescript
772
- import { drizzle } from 'drizzle-orm/postgres-js';
773
- import postgres from 'postgres';
774
-
775
- const client = postgres(process.env.DATABASE_URL!);
776
- const db = drizzle(client);
777
-
778
- // Query data
779
- const users = await db.select().from(usersTable);
780
- \`\`\``,
781
- };
782
-
783
- return contents[source.name] || `Visit ${source.docsUrl} to get started with ${source.displayName}.`;
784
- }
785
-
786
- function getAuthenticationContent(source: DocSource): string {
787
- const contents: Record<string, string> = {
788
- openai: `## API Key Authentication
789
-
790
- Get your API key from [OpenAI Platform](https://platform.openai.com/api-keys).
791
-
792
- \`\`\`typescript
793
- const openai = new OpenAI({
794
- apiKey: process.env.OPENAI_API_KEY,
795
- });
796
- \`\`\`
797
-
798
- **Environment Variable:**
799
- \`\`\`bash
800
- OPENAI_API_KEY=sk-...
801
- \`\`\``,
802
-
803
- anthropic: `## API Key Authentication
804
-
805
- Get your API key from [Anthropic Console](https://console.anthropic.com/).
806
-
807
- \`\`\`typescript
808
- const anthropic = new Anthropic({
809
- apiKey: process.env.ANTHROPIC_API_KEY,
810
- });
811
- \`\`\`
812
-
813
- **Environment Variable:**
814
- \`\`\`bash
815
- ANTHROPIC_API_KEY=sk-ant-...
816
- \`\`\``,
817
-
818
- stripe: `## API Key Authentication
819
-
820
- Get your API keys from [Stripe Dashboard](https://dashboard.stripe.com/apikeys).
821
-
822
- \`\`\`typescript
823
- const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
824
- \`\`\`
825
-
826
- **Environment Variables:**
827
- \`\`\`bash
828
- STRIPE_SECRET_KEY=sk_live_...
829
- STRIPE_PUBLISHABLE_KEY=pk_live_...
830
- STRIPE_WEBHOOK_SECRET=whsec_...
831
- \`\`\``,
832
-
833
- github: `## Personal Access Token
834
-
835
- Create a token at [GitHub Settings](https://github.com/settings/tokens).
836
-
837
- \`\`\`typescript
838
- const octokit = new Octokit({
839
- auth: process.env.GITHUB_TOKEN,
840
- });
841
- \`\`\`
842
-
843
- **Using gh CLI:**
844
- \`\`\`bash
845
- gh auth login
846
- \`\`\``,
847
-
848
- vercel: `## API Token
849
-
850
- Create a token at [Vercel Account Settings](https://vercel.com/account/tokens).
851
-
852
- \`\`\`typescript
853
- const response = await fetch('https://api.vercel.com/v9/projects', {
854
- headers: {
855
- Authorization: \`Bearer \${process.env.VERCEL_TOKEN}\`,
856
- },
857
- });
858
- \`\`\``,
859
- };
860
-
861
- return contents[source.name] || `Authentication is required. Check ${source.docsUrl} for details.`;
862
- }
863
-
864
- function getSectionContent(source: DocSource, section: string): string {
865
- // This would be dynamically fetched in a real implementation
866
- return `See the official documentation for detailed information about ${formatSectionTitle(section)}:\n\n` +
867
- `${source.docsUrl}/${section}`;
868
- }
869
-
870
- async function generateExamples(source: DocSource, options: Options): Promise<CodeExample[]> {
871
- const examples: CodeExample[] = [];
872
-
873
- const sourceExamples: Record<string, CodeExample[]> = {
874
- openai: [
875
- {
876
- title: "Chat Completion",
877
- language: "typescript",
878
- code: `const completion = await openai.chat.completions.create({
879
- model: "gpt-4",
880
- messages: [
881
- { role: "system", content: "You are a helpful assistant." },
882
- { role: "user", content: "What is TypeScript?" },
883
- ],
884
- });`,
885
- description: "Basic chat completion request",
886
- },
887
- {
888
- title: "Streaming Response",
889
- language: "typescript",
890
- code: `const stream = await openai.chat.completions.create({
891
- model: "gpt-4",
892
- messages: [{ role: "user", content: "Tell me a story" }],
893
- stream: true,
894
- });
895
-
896
- for await (const chunk of stream) {
897
- process.stdout.write(chunk.choices[0]?.delta?.content || "");
898
- }`,
899
- description: "Streaming chat completion",
900
- },
901
- ],
902
- anthropic: [
903
- {
904
- title: "Message Creation",
905
- language: "typescript",
906
- code: `const message = await anthropic.messages.create({
907
- model: "claude-3-5-sonnet-20241022",
908
- max_tokens: 1024,
909
- messages: [{ role: "user", content: "Explain quantum computing" }],
910
- });`,
911
- description: "Basic message request",
912
- },
913
- {
914
- title: "Tool Use",
915
- language: "typescript",
916
- code: `const message = await anthropic.messages.create({
917
- model: "claude-3-5-sonnet-20241022",
918
- max_tokens: 1024,
919
- tools: [{
920
- name: "get_weather",
921
- description: "Get weather for a location",
922
- input_schema: {
923
- type: "object",
924
- properties: { location: { type: "string" } },
925
- required: ["location"],
926
- },
927
- }],
928
- messages: [{ role: "user", content: "What's the weather in Tokyo?" }],
929
- });`,
930
- description: "Using tools/function calling",
931
- },
932
- ],
933
- stripe: [
934
- {
935
- title: "Create Payment Intent",
936
- language: "typescript",
937
- code: `const paymentIntent = await stripe.paymentIntents.create({
938
- amount: 2000, // $20.00
939
- currency: 'usd',
940
- automatic_payment_methods: { enabled: true },
941
- });`,
942
- description: "Create a payment intent for $20",
943
- },
944
- {
945
- title: "Handle Webhook",
946
- language: "typescript",
947
- code: `const event = stripe.webhooks.constructEvent(
948
- body,
949
- signature,
950
- process.env.STRIPE_WEBHOOK_SECRET
951
- );
952
-
953
- switch (event.type) {
954
- case 'payment_intent.succeeded':
955
- const paymentIntent = event.data.object;
956
- // Handle successful payment
957
- break;
958
- }`,
959
- description: "Process Stripe webhook events",
960
- },
961
- ],
962
- nextjs: [
963
- {
964
- title: "Server Component",
965
- language: "tsx",
966
- code: `// app/users/page.tsx
967
- async function UsersPage() {
968
- const users = await db.query.users.findMany();
969
-
970
- return (
971
- <ul>
972
- {users.map((user) => (
973
- <li key={user.id}>{user.name}</li>
974
- ))}
975
- </ul>
976
- );
977
- }
978
-
979
- export default UsersPage;`,
980
- description: "Server component with data fetching",
981
- },
982
- {
983
- title: "Server Action",
984
- language: "tsx",
985
- code: `'use server'
986
-
987
- export async function createUser(formData: FormData) {
988
- const name = formData.get('name') as string;
989
-
990
- await db.insert(users).values({ name });
991
-
992
- revalidatePath('/users');
993
- }`,
994
- description: "Server action for form submission",
995
- },
996
- ],
997
- };
998
-
999
- return sourceExamples[source.name] || [];
1000
- }
1001
-
1002
- function formatAsMarkdown(doc: FetchedDoc): string {
1003
- let output = `# ${doc.displayName} Documentation\n\n`;
1004
- output += `> Version: ${doc.version} | Source: ${doc.source}\n`;
1005
- output += `> Fetched: ${doc.fetchedAt}\n\n`;
1006
- output += `---\n\n`;
1007
-
1008
- for (const section of doc.sections) {
1009
- output += `## ${section.title}\n\n`;
1010
- output += `${section.content}\n\n`;
1011
- }
1012
-
1013
- if (doc.examples.length > 0) {
1014
- output += `## Code Examples\n\n`;
1015
- for (const example of doc.examples) {
1016
- output += `### ${example.title}\n\n`;
1017
- if (example.description) {
1018
- output += `${example.description}\n\n`;
1019
- }
1020
- output += `\`\`\`${example.language}\n${example.code}\n\`\`\`\n\n`;
1021
- }
1022
- }
1023
-
1024
- return output;
1025
- }
1026
-
1027
- function formatAsJSON(doc: FetchedDoc): string {
1028
- return JSON.stringify(doc, null, 2);
1029
- }
1030
-
1031
- function formatAsHTML(doc: FetchedDoc): string {
1032
- let html = `<!DOCTYPE html>
1033
- <html lang="en">
1034
- <head>
1035
- <meta charset="UTF-8">
1036
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
1037
- <title>${doc.displayName} Documentation</title>
1038
- <style>
1039
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
1040
- pre { background: #f4f4f4; padding: 16px; border-radius: 8px; overflow-x: auto; }
1041
- code { font-family: 'SF Mono', Monaco, monospace; }
1042
- h1 { border-bottom: 2px solid #333; padding-bottom: 10px; }
1043
- h2 { color: #333; margin-top: 40px; }
1044
- blockquote { border-left: 4px solid #ddd; margin: 0; padding-left: 16px; color: #666; }
1045
- </style>
1046
- </head>
1047
- <body>
1048
- <h1>${doc.displayName} Documentation</h1>
1049
- <blockquote>
1050
- <p>Version: ${doc.version} | Source: <a href="${doc.source}">${doc.source}</a></p>
1051
- </blockquote>
1052
- `;
1053
-
1054
- for (const section of doc.sections) {
1055
- html += ` <h2>${section.title}</h2>\n`;
1056
- html += ` <div>${section.content.replace(/\n/g, "<br>")}</div>\n`;
1057
- }
1058
-
1059
- if (doc.examples.length > 0) {
1060
- html += ` <h2>Code Examples</h2>\n`;
1061
- for (const example of doc.examples) {
1062
- html += ` <h3>${example.title}</h3>\n`;
1063
- if (example.description) {
1064
- html += ` <p>${example.description}</p>\n`;
1065
- }
1066
- html += ` <pre><code>${escapeHtml(example.code)}</code></pre>\n`;
1067
- }
1068
- }
1069
-
1070
- html += `</body>\n</html>`;
1071
- return html;
1072
- }
1073
-
1074
- function escapeHtml(text: string): string {
1075
- return text
1076
- .replace(/&/g, "&amp;")
1077
- .replace(/</g, "&lt;")
1078
- .replace(/>/g, "&gt;")
1079
- .replace(/"/g, "&quot;")
1080
- .replace(/'/g, "&#039;");
1081
- }
1082
-
1083
- // Main execution
1084
- async function main(): Promise<void> {
1085
- const startTime = Date.now();
1086
-
1087
- log(`Starting ${SKILL_NAME} session: ${SESSION_ID}`);
1088
-
1089
- const options = parseArguments();
1090
-
1091
- if (options.verbose) {
1092
- log(`Options: ${JSON.stringify(options)}`);
1093
- }
1094
-
1095
- // Handle --list flag
1096
- if (options.list) {
1097
- listTools();
1098
- process.exit(0);
1099
- }
1100
-
1101
- // Validate tool argument
1102
- if (!options.tool) {
1103
- console.error("Error: Please specify a tool/API name.");
1104
- console.error("Use --list to see all supported tools.");
1105
- console.error("\nExample: skills run get-api-docs -- openai");
1106
- process.exit(1);
1107
- }
1108
-
1109
- // Find the documentation source
1110
- const source = DOC_SOURCES[options.tool];
1111
- if (!source) {
1112
- console.error(`Error: Unknown tool "${options.tool}".`);
1113
- console.error("Use --list to see all supported tools.");
1114
-
1115
- // Suggest similar tools
1116
- const suggestions = Object.keys(DOC_SOURCES).filter(
1117
- (key) =>
1118
- key.includes(options.tool) ||
1119
- DOC_SOURCES[key].displayName.toLowerCase().includes(options.tool.toLowerCase())
1120
- );
1121
- if (suggestions.length > 0) {
1122
- console.error(`\nDid you mean: ${suggestions.join(", ")}?`);
1123
- }
1124
-
1125
- process.exit(1);
1126
- }
1127
-
1128
- try {
1129
- log(`Fetching documentation for ${source.displayName}...`);
1130
-
1131
- const doc = await fetchDocumentation(source, options);
1132
-
1133
- // Format output
1134
- let output: string;
1135
- let extension: string;
1136
-
1137
- switch (options.format) {
1138
- case "json":
1139
- output = formatAsJSON(doc);
1140
- extension = "json";
1141
- break;
1142
- case "html":
1143
- output = formatAsHTML(doc);
1144
- extension = "html";
1145
- break;
1146
- default:
1147
- output = formatAsMarkdown(doc);
1148
- extension = "md";
1149
- }
1150
-
1151
- // Ensure export directory exists
1152
- ensureDir(EXPORTS_DIR);
1153
-
1154
- // Save to file
1155
- const outputFile = join(EXPORTS_DIR, `${source.name}-docs.${extension}`);
1156
- writeFileSync(outputFile, output, "utf-8");
1157
-
1158
- log(`Documentation saved to: ${outputFile}`, "success");
1159
-
1160
- // Print to console
1161
- console.log("\n" + "=".repeat(60) + "\n");
1162
- console.log(output);
1163
-
1164
- const duration = Date.now() - startTime;
1165
- log(`Completed in ${duration}ms`, "success");
1166
-
1167
- } catch (error) {
1168
- log(`Error: ${error instanceof Error ? error.message : String(error)}`, "error");
1169
- if (options.verbose && error instanceof Error) {
1170
- console.error(error.stack);
1171
- }
1172
- process.exit(1);
1173
- }
1174
- }
1175
-
1176
- main();