@hasna/skills 0.1.61 → 0.1.63

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 (523) hide show
  1. package/README.md +10 -6
  2. package/bin/index.js +14271 -21602
  3. package/bin/mcp.js +3527 -11449
  4. package/bin/migrate.js +53 -3
  5. package/bin/server.js +5140 -2675
  6. package/bin/worker.js +4542 -2129
  7. package/dist/cli/commands/publish.d.ts +2 -0
  8. package/dist/cli/components/App.d.ts +2 -1
  9. package/dist/cli/components/CategorySelect.d.ts +2 -1
  10. package/dist/cli/components/Header.d.ts +2 -1
  11. package/dist/cli/components/InstallProgress.d.ts +2 -1
  12. package/dist/cli/components/SearchView.d.ts +2 -1
  13. package/dist/cli/components/SkillSelect.d.ts +2 -1
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.js +5094 -13755
  16. package/dist/lib/agent-sync.d.ts +38 -3
  17. package/dist/lib/home-adoption.d.ts +91 -0
  18. package/dist/lib/home-census.d.ts +22 -0
  19. package/dist/lib/home-migration.d.ts +61 -0
  20. package/dist/lib/portable-skills-files.d.ts +21 -1
  21. package/dist/lib/portable-skills-types.d.ts +46 -0
  22. package/dist/lib/pull.d.ts +66 -0
  23. package/dist/lib/remote-client.d.ts +6 -0
  24. package/dist/lib/run-state.d.ts +5 -0
  25. package/dist/lib/skill-bundles.d.ts +54 -0
  26. package/dist/lib/skill-contract.d.ts +35 -0
  27. package/dist/lib/skill-hash.d.ts +77 -0
  28. package/dist/sdk/cancel.d.ts +30 -0
  29. package/dist/sdk/dispatcher.d.ts +40 -0
  30. package/dist/sdk/event-sink.d.ts +2 -0
  31. package/dist/sdk/events.d.ts +79 -0
  32. package/dist/sdk/execution/admission.d.ts +44 -0
  33. package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
  34. package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
  35. package/dist/sdk/execution/image-profile.d.ts +73 -0
  36. package/dist/sdk/execution/index.d.ts +15 -0
  37. package/dist/sdk/execution/receipts.d.ts +44 -0
  38. package/dist/sdk/execution/state-machine.d.ts +38 -0
  39. package/dist/sdk/execution/storage.d.ts +158 -0
  40. package/dist/sdk/execution/types.d.ts +130 -0
  41. package/dist/sdk/executor.d.ts +17 -0
  42. package/dist/sdk/governance-store.d.ts +156 -0
  43. package/dist/sdk/governance.d.ts +92 -0
  44. package/dist/sdk/index.d.ts +26 -0
  45. package/dist/sdk/index.js +48730 -0
  46. package/dist/sdk/offline.d.ts +16 -0
  47. package/dist/sdk/outputs.d.ts +71 -0
  48. package/dist/sdk/registry.d.ts +28 -0
  49. package/dist/sdk/runs.d.ts +229 -0
  50. package/dist/sdk/server.d.ts +35 -0
  51. package/dist/sdk/spend.d.ts +36 -0
  52. package/dist/sdk/storage.d.ts +25 -0
  53. package/dist/server/app.d.ts +42 -0
  54. package/dist/server/artifact-storage.d.ts +102 -0
  55. package/dist/server/auth.d.ts +5 -0
  56. package/dist/server/config.d.ts +40 -0
  57. package/dist/server/database-url.d.ts +42 -0
  58. package/dist/server/handlers.d.ts +3 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/migrate.d.ts +13 -0
  61. package/dist/server/migrations-dir.d.ts +18 -0
  62. package/dist/server/redaction.d.ts +1 -0
  63. package/dist/server/registry.d.ts +5 -0
  64. package/dist/server/rows.d.ts +23 -0
  65. package/dist/server/skills-api.d.ts +68 -0
  66. package/dist/server/sqlite-store.d.ts +114 -0
  67. package/dist/server/store-fixtures.d.ts +25 -0
  68. package/dist/server/store.d.ts +144 -0
  69. package/dist/server/types.d.ts +242 -0
  70. package/dist/server/worker.d.ts +4 -0
  71. package/dist/storage.js +32 -0
  72. package/docs/skill-standard.md +211 -39
  73. package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
  74. package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
  75. package/package.json +11 -8
  76. package/schemas/skill.schema.json +181 -0
  77. package/agent-skills/README.md +0 -41
  78. package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
  79. package/agent-skills/inbox/SKILL.md +0 -25
  80. package/agent-skills/inbox/scripts/inbox +0 -109
  81. package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
  82. package/agent-skills/inbox-monitor/SKILL.md +0 -41
  83. package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
  84. package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
  85. package/agent-skills/merge-pr/SKILL.md +0 -85
  86. package/agent-skills/merge-pr/references/merge-safety.md +0 -82
  87. package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
  88. package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
  89. package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
  90. package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
  91. package/agent-skills/skill-goal-execute/SKILL.md +0 -115
  92. package/agent-skills/skill-login/SKILL.md +0 -109
  93. package/agent-skills/skill-project-create/SKILL.md +0 -91
  94. package/agent-skills/skill-publish/SKILL.md +0 -207
  95. package/skills/_common/auth.ts +0 -45
  96. package/skills/_common/http-client.ts +0 -143
  97. package/skills/_common/index.ts +0 -26
  98. package/skills/_common/install.sh +0 -7
  99. package/skills/_common/installer.ts +0 -72
  100. package/skills/_common/skill-install.ts +0 -37
  101. package/skills/_common/vision.ts +0 -374
  102. package/skills/ad-creative-pack/SKILL.md +0 -55
  103. package/skills/ad-creative-pack/package.json +0 -10
  104. package/skills/analyze-data/CLAUDE.md +0 -16
  105. package/skills/analyze-data/SKILL.md +0 -112
  106. package/skills/analyze-data/package.json +0 -23
  107. package/skills/analyze-data/src/analysis.ts +0 -401
  108. package/skills/analyze-data/src/cli.ts +0 -66
  109. package/skills/analyze-data/src/formatters.ts +0 -235
  110. package/skills/analyze-data/src/index.ts +0 -74
  111. package/skills/analyze-data/src/logger.ts +0 -36
  112. package/skills/analyze-data/src/parsers.ts +0 -57
  113. package/skills/analyze-data/src/stats.ts +0 -151
  114. package/skills/analyze-data/src/types.ts +0 -85
  115. package/skills/analyze-data/tsconfig.json +0 -19
  116. package/skills/api-docs-portal/SKILL.md +0 -84
  117. package/skills/api-docs-portal/package.json +0 -35
  118. package/skills/api-docs-portal/src/index.ts +0 -919
  119. package/skills/api-docs-portal/tsconfig.json +0 -17
  120. package/skills/api-test-suite/CLAUDE.md +0 -19
  121. package/skills/api-test-suite/package.json +0 -27
  122. package/skills/api-test-suite/src/index.ts +0 -381
  123. package/skills/api-test-suite/tsconfig.json +0 -10
  124. package/skills/audio-extract/CLAUDE.md +0 -9
  125. package/skills/audio-extract/SKILL.md +0 -73
  126. package/skills/audio-extract/package.json +0 -23
  127. package/skills/audio-extract/src/index.ts +0 -323
  128. package/skills/audio-extract/tsconfig.json +0 -11
  129. package/skills/bio-sequence-tool/CLAUDE.md +0 -19
  130. package/skills/bio-sequence-tool/package.json +0 -27
  131. package/skills/bio-sequence-tool/src/index.ts +0 -85
  132. package/skills/bio-sequence-tool/tsconfig.json +0 -10
  133. package/skills/blog-article/CLAUDE.md +0 -12
  134. package/skills/blog-article/SKILL.md +0 -55
  135. package/skills/blog-article/package.json +0 -10
  136. package/skills/blog-article/tsconfig.json +0 -10
  137. package/skills/brand-assets/SKILL.md +0 -118
  138. package/skills/brand-assets/package.json +0 -35
  139. package/skills/brand-assets/src/cli.ts +0 -155
  140. package/skills/brand-assets/src/constants.ts +0 -8
  141. package/skills/brand-assets/src/extract.ts +0 -236
  142. package/skills/brand-assets/src/index.ts +0 -668
  143. package/skills/brand-assets/src/types.ts +0 -59
  144. package/skills/brand-assets/tsconfig.json +0 -17
  145. package/skills/brand-kit/SKILL.md +0 -54
  146. package/skills/brand-kit/package.json +0 -10
  147. package/skills/businessactivity/CLAUDE.md +0 -176
  148. package/skills/businessactivity/LICENSE +0 -192
  149. package/skills/businessactivity/README.md +0 -287
  150. package/skills/businessactivity/package.json +0 -25
  151. package/skills/businessactivity/scripts/publish.ts +0 -210
  152. package/skills/businessactivity/src/commands/activity.ts +0 -211
  153. package/skills/businessactivity/src/commands/function.ts +0 -227
  154. package/skills/businessactivity/src/commands/owner.ts +0 -193
  155. package/skills/businessactivity/src/commands/profile.ts +0 -121
  156. package/skills/businessactivity/src/commands/responsibility.ts +0 -264
  157. package/skills/businessactivity/src/commands/team.ts +0 -244
  158. package/skills/businessactivity/src/commands/workflow.ts +0 -359
  159. package/skills/businessactivity/src/index.ts +0 -3
  160. package/skills/businessactivity/src/lib/config.ts +0 -167
  161. package/skills/businessactivity/src/lib/output.ts +0 -76
  162. package/skills/businessactivity/src/lib/paths.ts +0 -79
  163. package/skills/businessactivity/src/lib/storage.ts +0 -95
  164. package/skills/businessactivity/src/types/index.ts +0 -86
  165. package/skills/businessactivity/tsconfig.json +0 -29
  166. package/skills/codefix/LICENSE +0 -192
  167. package/skills/codefix/README.md +0 -232
  168. package/skills/codefix/SKILL.md +0 -94
  169. package/skills/codefix/package.json +0 -21
  170. package/skills/codefix/src/fixers/batch.ts +0 -213
  171. package/skills/codefix/src/fixers/detector.ts +0 -160
  172. package/skills/codefix/src/fixers/index.ts +0 -7
  173. package/skills/codefix/src/fixers/runner.ts +0 -522
  174. package/skills/codefix/src/index-local.ts +0 -431
  175. package/skills/codefix/src/index.ts +0 -4
  176. package/skills/codefix/src/types.ts +0 -211
  177. package/skills/codefix/tsconfig.json +0 -15
  178. package/skills/commitpush/SKILL.md +0 -57
  179. package/skills/commitpush/package.json +0 -33
  180. package/skills/commitpush/src/index.ts +0 -34
  181. package/skills/commitpush/tsconfig.json +0 -17
  182. package/skills/commitpushpr/SKILL.md +0 -55
  183. package/skills/commitpushpr/package.json +0 -33
  184. package/skills/commitpushpr/src/index.ts +0 -34
  185. package/skills/commitpushpr/tsconfig.json +0 -17
  186. package/skills/compress-video/CLAUDE.md +0 -9
  187. package/skills/compress-video/SKILL.md +0 -79
  188. package/skills/compress-video/package.json +0 -23
  189. package/skills/compress-video/src/index.ts +0 -473
  190. package/skills/compress-video/tsconfig.json +0 -11
  191. package/skills/contract-review-report/SKILL.md +0 -52
  192. package/skills/contract-review-report/package.json +0 -10
  193. package/skills/customer-feedback-report/SKILL.md +0 -52
  194. package/skills/customer-feedback-report/package.json +0 -10
  195. package/skills/dashboard-builder/CLAUDE.md +0 -19
  196. package/skills/dashboard-builder/package.json +0 -29
  197. package/skills/dashboard-builder/src/index.ts +0 -150
  198. package/skills/dashboard-builder/tsconfig.json +0 -10
  199. package/skills/data-anonymizer/CLAUDE.md +0 -19
  200. package/skills/data-anonymizer/package.json +0 -27
  201. package/skills/data-anonymizer/src/index.ts +0 -183
  202. package/skills/data-anonymizer/tsconfig.json +0 -10
  203. package/skills/database-explorer/CLAUDE.md +0 -19
  204. package/skills/database-explorer/package.json +0 -29
  205. package/skills/database-explorer/src/index.ts +0 -95
  206. package/skills/database-explorer/tsconfig.json +0 -10
  207. package/skills/diff-viewer/CLAUDE.md +0 -19
  208. package/skills/diff-viewer/package.json +0 -30
  209. package/skills/diff-viewer/src/index.ts +0 -164
  210. package/skills/diff-viewer/tsconfig.json +0 -10
  211. package/skills/doc-read/SKILL.md +0 -45
  212. package/skills/doc-read/package.json +0 -29
  213. package/skills/doc-read/src/index.ts +0 -324
  214. package/skills/doc-read/tsconfig.json +0 -8
  215. package/skills/domainpurchase/LICENSE +0 -192
  216. package/skills/domainpurchase/SKILL.md +0 -29
  217. package/skills/domainpurchase/package.json +0 -30
  218. package/skills/domainpurchase/src/index.ts +0 -3
  219. package/skills/domainpurchase/tsconfig.json +0 -21
  220. package/skills/email-sequence/SKILL.md +0 -53
  221. package/skills/email-sequence/package.json +0 -10
  222. package/skills/experiment-power-calculator/CLAUDE.md +0 -19
  223. package/skills/experiment-power-calculator/package.json +0 -29
  224. package/skills/experiment-power-calculator/src/index.ts +0 -86
  225. package/skills/experiment-power-calculator/tsconfig.json +0 -10
  226. package/skills/extract-frames/CLAUDE.md +0 -19
  227. package/skills/extract-frames/package.json +0 -27
  228. package/skills/extract-frames/src/index.ts +0 -616
  229. package/skills/extract-frames/tsconfig.json +0 -10
  230. package/skills/file-organizer/CLAUDE.md +0 -19
  231. package/skills/file-organizer/package.json +0 -27
  232. package/skills/file-organizer/src/index.ts +0 -91
  233. package/skills/file-organizer/tsconfig.json +0 -10
  234. package/skills/folder-tree/CLAUDE.md +0 -19
  235. package/skills/folder-tree/package.json +0 -29
  236. package/skills/folder-tree/src/index.ts +0 -568
  237. package/skills/folder-tree/tsconfig.json +0 -10
  238. package/skills/form-filler/CLAUDE.md +0 -19
  239. package/skills/form-filler/package.json +0 -29
  240. package/skills/form-filler/src/index.ts +0 -81
  241. package/skills/form-filler/tsconfig.json +0 -10
  242. package/skills/generate-api-client/CLAUDE.md +0 -19
  243. package/skills/generate-api-client/package.json +0 -29
  244. package/skills/generate-api-client/src/generator.ts +0 -47
  245. package/skills/generate-api-client/src/index.ts +0 -92
  246. package/skills/generate-api-client/src/logger.ts +0 -34
  247. package/skills/generate-api-client/src/python-generator.ts +0 -245
  248. package/skills/generate-api-client/src/spec-loader.ts +0 -48
  249. package/skills/generate-api-client/src/type-mappers.ts +0 -79
  250. package/skills/generate-api-client/src/types.ts +0 -76
  251. package/skills/generate-api-client/src/typescript-generator.ts +0 -247
  252. package/skills/generate-api-client/tsconfig.json +0 -10
  253. package/skills/generate-chart/CLAUDE.md +0 -19
  254. package/skills/generate-chart/package.json +0 -27
  255. package/skills/generate-chart/src/index.ts +0 -510
  256. package/skills/generate-chart/tsconfig.json +0 -10
  257. package/skills/generate-dockerfile/CLAUDE.md +0 -19
  258. package/skills/generate-dockerfile/package.json +0 -27
  259. package/skills/generate-dockerfile/src/cli.ts +0 -78
  260. package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
  261. package/skills/generate-dockerfile/src/index.ts +0 -81
  262. package/skills/generate-dockerfile/src/logger.ts +0 -30
  263. package/skills/generate-dockerfile/src/project-detection.ts +0 -68
  264. package/skills/generate-dockerfile/src/support-files.ts +0 -171
  265. package/skills/generate-dockerfile/src/types.ts +0 -29
  266. package/skills/generate-dockerfile/tsconfig.json +0 -10
  267. package/skills/generate-env/CLAUDE.md +0 -19
  268. package/skills/generate-env/package.json +0 -29
  269. package/skills/generate-env/src/cli.ts +0 -85
  270. package/skills/generate-env/src/detection.ts +0 -161
  271. package/skills/generate-env/src/env-data.ts +0 -66
  272. package/skills/generate-env/src/generators.ts +0 -240
  273. package/skills/generate-env/src/index.ts +0 -120
  274. package/skills/generate-env/src/runtime.ts +0 -30
  275. package/skills/generate-env/src/types.ts +0 -32
  276. package/skills/generate-env/tsconfig.json +0 -10
  277. package/skills/generate-favicon/CLAUDE.md +0 -19
  278. package/skills/generate-favicon/package.json +0 -29
  279. package/skills/generate-favicon/src/index.ts +0 -421
  280. package/skills/generate-favicon/tsconfig.json +0 -10
  281. package/skills/generate-qrcode/CLAUDE.md +0 -19
  282. package/skills/generate-qrcode/package.json +0 -30
  283. package/skills/generate-qrcode/src/index.ts +0 -584
  284. package/skills/generate-qrcode/tsconfig.json +0 -10
  285. package/skills/generate-resume/CLAUDE.md +0 -19
  286. package/skills/generate-resume/package.json +0 -27
  287. package/skills/generate-resume/src/cli.ts +0 -157
  288. package/skills/generate-resume/src/index.ts +0 -178
  289. package/skills/generate-resume/src/parsers.ts +0 -95
  290. package/skills/generate-resume/src/renderers.ts +0 -538
  291. package/skills/generate-resume/src/security.ts +0 -39
  292. package/skills/generate-resume/src/types.ts +0 -86
  293. package/skills/generate-resume/tsconfig.json +0 -10
  294. package/skills/generate-sitemap/CLAUDE.md +0 -19
  295. package/skills/generate-sitemap/package.json +0 -27
  296. package/skills/generate-sitemap/src/index.ts +0 -626
  297. package/skills/generate-sitemap/tsconfig.json +0 -10
  298. package/skills/gif-maker/CLAUDE.md +0 -19
  299. package/skills/gif-maker/package.json +0 -30
  300. package/skills/gif-maker/src/index.ts +0 -600
  301. package/skills/gif-maker/tsconfig.json +0 -10
  302. package/skills/hook/LICENSE +0 -192
  303. package/skills/hook/README.md +0 -74
  304. package/skills/hook/SKILL.md +0 -85
  305. package/skills/hook/bunfig.toml +0 -5
  306. package/skills/hook/package.json +0 -28
  307. package/skills/hook/src/commands/create.ts +0 -112
  308. package/skills/hook/src/commands/events.ts +0 -37
  309. package/skills/hook/src/commands/validate.ts +0 -117
  310. package/skills/hook/src/index.ts +0 -118
  311. package/skills/hook/src/templates/root.ts +0 -196
  312. package/skills/hook/src/templates/source.ts +0 -647
  313. package/skills/hook/tsconfig.json +0 -18
  314. package/skills/http-server/CLAUDE.md +0 -19
  315. package/skills/http-server/package.json +0 -29
  316. package/skills/http-server/src/index.ts +0 -51
  317. package/skills/http-server/tsconfig.json +0 -10
  318. package/skills/implementation/LICENSE +0 -192
  319. package/skills/implementation/README.md +0 -53
  320. package/skills/implementation/SKILL.md +0 -57
  321. package/skills/implementation/bunfig.toml +0 -5
  322. package/skills/implementation/package.json +0 -28
  323. package/skills/implementation/src/commands/create.ts +0 -187
  324. package/skills/implementation/src/index.ts +0 -62
  325. package/skills/implementation/tsconfig.json +0 -18
  326. package/skills/implementation-plan/CLAUDE.md +0 -19
  327. package/skills/implementation-plan/package.json +0 -29
  328. package/skills/implementation-plan/src/index.ts +0 -520
  329. package/skills/implementation-plan/tsconfig.json +0 -10
  330. package/skills/implementation-todo/CLAUDE.md +0 -19
  331. package/skills/implementation-todo/package.json +0 -29
  332. package/skills/implementation-todo/src/index.ts +0 -429
  333. package/skills/implementation-todo/tsconfig.json +0 -10
  334. package/skills/invoice/.env.example +0 -3
  335. package/skills/invoice/CLAUDE.md +0 -31
  336. package/skills/invoice/LICENSE +0 -192
  337. package/skills/invoice/README.md +0 -70
  338. package/skills/invoice/package.json +0 -26
  339. package/skills/invoice/src/commands/companies.ts +0 -202
  340. package/skills/invoice/src/commands/config.ts +0 -132
  341. package/skills/invoice/src/commands/generate.ts +0 -177
  342. package/skills/invoice/src/commands/invoices.ts +0 -218
  343. package/skills/invoice/src/index.ts +0 -3
  344. package/skills/invoice/src/lib/api.ts +0 -124
  345. package/skills/invoice/src/lib/storage.ts +0 -171
  346. package/skills/invoice/src/types/index.ts +0 -86
  347. package/skills/invoice/src/utils/logger.ts +0 -33
  348. package/skills/invoice/src/utils/paths.ts +0 -25
  349. package/skills/invoice/tsconfig.json +0 -23
  350. package/skills/invoice-reconciliation/SKILL.md +0 -98
  351. package/skills/invoice-reconciliation/package.json +0 -36
  352. package/skills/invoice-reconciliation/src/index.ts +0 -743
  353. package/skills/invoice-reconciliation/tsconfig.json +0 -17
  354. package/skills/landing-page-pack/SKILL.md +0 -55
  355. package/skills/landing-page-pack/package.json +0 -10
  356. package/skills/latex-table-generator/CLAUDE.md +0 -19
  357. package/skills/latex-table-generator/package.json +0 -29
  358. package/skills/latex-table-generator/src/index.ts +0 -113
  359. package/skills/latex-table-generator/tsconfig.json +0 -10
  360. package/skills/logo-design/SKILL.md +0 -94
  361. package/skills/logo-design/package.json +0 -35
  362. package/skills/logo-design/src/cli.ts +0 -132
  363. package/skills/logo-design/src/constants.ts +0 -5
  364. package/skills/logo-design/src/docs.ts +0 -102
  365. package/skills/logo-design/src/geometry.ts +0 -324
  366. package/skills/logo-design/src/index.ts +0 -212
  367. package/skills/logo-design/src/palette.ts +0 -258
  368. package/skills/logo-design/src/types.ts +0 -50
  369. package/skills/logo-design/tsconfig.json +0 -17
  370. package/skills/lorem-generator/CLAUDE.md +0 -19
  371. package/skills/lorem-generator/package.json +0 -29
  372. package/skills/lorem-generator/src/index.ts +0 -59
  373. package/skills/lorem-generator/tsconfig.json +0 -10
  374. package/skills/managemcp/CLAUDE.md +0 -14
  375. package/skills/managemcp/README.md +0 -24
  376. package/skills/managemcp/package.json +0 -16
  377. package/skills/managemcp/src/index.ts +0 -3
  378. package/skills/managemcp/tsconfig.json +0 -27
  379. package/skills/markdown-validator/CLAUDE.md +0 -19
  380. package/skills/markdown-validator/package.json +0 -29
  381. package/skills/markdown-validator/src/index.ts +0 -92
  382. package/skills/markdown-validator/tsconfig.json +0 -10
  383. package/skills/market-research-report/SKILL.md +0 -51
  384. package/skills/market-research-report/package.json +0 -10
  385. package/skills/meeting-pack/SKILL.md +0 -52
  386. package/skills/meeting-pack/package.json +0 -10
  387. package/skills/merge-pdfs/CLAUDE.md +0 -19
  388. package/skills/merge-pdfs/package.json +0 -31
  389. package/skills/merge-pdfs/src/index.ts +0 -427
  390. package/skills/merge-pdfs/tsconfig.json +0 -10
  391. package/skills/migration-plan-pack/SKILL.md +0 -56
  392. package/skills/migration-plan-pack/package.json +0 -10
  393. package/skills/monitor/SKILL.md +0 -69
  394. package/skills/monitor/package.json +0 -33
  395. package/skills/monitor/src/index.ts +0 -34
  396. package/skills/monitor/tsconfig.json +0 -17
  397. package/skills/one-page-website/SKILL.md +0 -128
  398. package/skills/one-page-website/package.json +0 -34
  399. package/skills/one-page-website/src/design.ts +0 -336
  400. package/skills/one-page-website/src/docs.ts +0 -159
  401. package/skills/one-page-website/src/index.ts +0 -357
  402. package/skills/one-page-website/src/page.ts +0 -340
  403. package/skills/one-page-website/src/styles.ts +0 -508
  404. package/skills/one-page-website/src/types.ts +0 -78
  405. package/skills/one-page-website/tsconfig.json +0 -17
  406. package/skills/pdf-generate/CLAUDE.md +0 -19
  407. package/skills/pdf-generate/SKILL.md +0 -86
  408. package/skills/pdf-generate/package.json +0 -21
  409. package/skills/pdf-generate/src/cli.ts +0 -162
  410. package/skills/pdf-generate/src/html.ts +0 -84
  411. package/skills/pdf-generate/src/index.ts +0 -62
  412. package/skills/pdf-generate/src/markdown.ts +0 -27
  413. package/skills/pdf-generate/src/pdf-writer.ts +0 -78
  414. package/skills/pdf-generate/src/runtime.ts +0 -34
  415. package/skills/pdf-generate/src/security.ts +0 -37
  416. package/skills/pdf-generate/src/templates.ts +0 -311
  417. package/skills/pdf-generate/src/types.ts +0 -28
  418. package/skills/pdf-generate/tsconfig.json +0 -16
  419. package/skills/pdf-to-dataset/SKILL.md +0 -88
  420. package/skills/pdf-to-dataset/package.json +0 -37
  421. package/skills/pdf-to-dataset/src/index.ts +0 -790
  422. package/skills/pdf-to-dataset/tsconfig.json +0 -17
  423. package/skills/pdf-to-markdown/SKILL.md +0 -81
  424. package/skills/pdf-to-markdown/package.json +0 -35
  425. package/skills/pdf-to-markdown/src/index.ts +0 -694
  426. package/skills/pdf-to-markdown/tsconfig.json +0 -17
  427. package/skills/performance-audit-report/SKILL.md +0 -49
  428. package/skills/performance-audit-report/package.json +0 -10
  429. package/skills/pitch-deck/SKILL.md +0 -51
  430. package/skills/pitch-deck/package.json +0 -10
  431. package/skills/product-mockup/SKILL.md +0 -107
  432. package/skills/product-mockup/package.json +0 -32
  433. package/skills/product-mockup/src/cli.ts +0 -150
  434. package/skills/product-mockup/src/design.ts +0 -151
  435. package/skills/product-mockup/src/docs.ts +0 -134
  436. package/skills/product-mockup/src/index.ts +0 -182
  437. package/skills/product-mockup/src/render.ts +0 -407
  438. package/skills/product-mockup/src/types.ts +0 -66
  439. package/skills/product-mockup/tsconfig.json +0 -17
  440. package/skills/proposal-pack/SKILL.md +0 -53
  441. package/skills/proposal-pack/package.json +0 -10
  442. package/skills/read-csv/SKILL.md +0 -62
  443. package/skills/read-csv/package.json +0 -37
  444. package/skills/read-csv/src/index.ts +0 -356
  445. package/skills/read-csv/tsconfig.json +0 -17
  446. package/skills/read-excel/SKILL.md +0 -64
  447. package/skills/read-excel/package.json +0 -36
  448. package/skills/read-excel/src/index.ts +0 -266
  449. package/skills/read-excel/tsconfig.json +0 -17
  450. package/skills/regex-tester/CLAUDE.md +0 -19
  451. package/skills/regex-tester/package.json +0 -27
  452. package/skills/regex-tester/src/index.ts +0 -183
  453. package/skills/regex-tester/tsconfig.json +0 -10
  454. package/skills/repo-onboarding-report/SKILL.md +0 -52
  455. package/skills/repo-onboarding-report/package.json +0 -10
  456. package/skills/scancommitpr/SKILL.md +0 -178
  457. package/skills/scancommitpr/package.json +0 -34
  458. package/skills/scancommitpr/src/index.ts +0 -44
  459. package/skills/scancommitpr/tsconfig.json +0 -13
  460. package/skills/scancommitpush/SKILL.md +0 -174
  461. package/skills/scancommitpush/package.json +0 -32
  462. package/skills/scancommitpush/src/index.ts +0 -44
  463. package/skills/scancommitpush/tsconfig.json +0 -13
  464. package/skills/scientific-figure-check/CLAUDE.md +0 -19
  465. package/skills/scientific-figure-check/package.json +0 -29
  466. package/skills/scientific-figure-check/src/index.ts +0 -83
  467. package/skills/scientific-figure-check/tsconfig.json +0 -10
  468. package/skills/security-audit/CLAUDE.md +0 -19
  469. package/skills/security-audit/package.json +0 -27
  470. package/skills/security-audit/src/index.ts +0 -145
  471. package/skills/security-audit/tsconfig.json +0 -10
  472. package/skills/security-audit-report/SKILL.md +0 -52
  473. package/skills/security-audit-report/package.json +0 -10
  474. package/skills/seo-content-pack/SKILL.md +0 -54
  475. package/skills/seo-content-pack/package.json +0 -10
  476. package/skills/siteanalyze/SKILL.md +0 -25
  477. package/skills/siteanalyze/package.json +0 -27
  478. package/skills/siteanalyze/src/index.ts +0 -592
  479. package/skills/slide-deck-generator/SKILL.md +0 -93
  480. package/skills/slide-deck-generator/package.json +0 -38
  481. package/skills/slide-deck-generator/src/cli.ts +0 -133
  482. package/skills/slide-deck-generator/src/index.ts +0 -148
  483. package/skills/slide-deck-generator/src/model.ts +0 -307
  484. package/skills/slide-deck-generator/src/pptx.ts +0 -143
  485. package/skills/slide-deck-generator/src/render.ts +0 -248
  486. package/skills/slide-deck-generator/src/types.ts +0 -114
  487. package/skills/slide-deck-generator/src/utils.ts +0 -53
  488. package/skills/slide-deck-generator/tsconfig.json +0 -17
  489. package/skills/social-content-calendar/SKILL.md +0 -54
  490. package/skills/social-content-calendar/package.json +0 -10
  491. package/skills/split-pdf/CLAUDE.md +0 -19
  492. package/skills/split-pdf/package.json +0 -30
  493. package/skills/split-pdf/src/index.ts +0 -301
  494. package/skills/split-pdf/tsconfig.json +0 -10
  495. package/skills/statistical-test-selector/CLAUDE.md +0 -19
  496. package/skills/statistical-test-selector/package.json +0 -27
  497. package/skills/statistical-test-selector/src/index.ts +0 -75
  498. package/skills/statistical-test-selector/tsconfig.json +0 -10
  499. package/skills/test-suite-generator/SKILL.md +0 -51
  500. package/skills/test-suite-generator/package.json +0 -10
  501. package/skills/tmux-session/SKILL.md +0 -109
  502. package/skills/tmux-session/package.json +0 -33
  503. package/skills/tmux-session/src/index.ts +0 -34
  504. package/skills/tmux-session/tsconfig.json +0 -17
  505. package/skills/todos-plan/SKILL.md +0 -363
  506. package/skills/todos-plan/agents/openai.yaml +0 -4
  507. package/skills/todos-plan/package.json +0 -9
  508. package/skills/todos-plan/src/index.ts +0 -68
  509. package/skills/tsconfig.base.json +0 -12
  510. package/skills/validate-config/CLAUDE.md +0 -19
  511. package/skills/validate-config/package.json +0 -29
  512. package/skills/validate-config/src/index.ts +0 -56
  513. package/skills/validate-config/tsconfig.json +0 -10
  514. package/skills/video-downloader/CLAUDE.md +0 -19
  515. package/skills/video-downloader/package.json +0 -29
  516. package/skills/video-downloader/src/index.ts +0 -561
  517. package/skills/video-downloader/tsconfig.json +0 -10
  518. package/skills/video-highlight-pack/SKILL.md +0 -54
  519. package/skills/video-highlight-pack/package.json +0 -10
  520. package/skills/watermark/CLAUDE.md +0 -19
  521. package/skills/watermark/package.json +0 -32
  522. package/skills/watermark/src/index.ts +0 -587
  523. package/skills/watermark/tsconfig.json +0 -10
@@ -1,27 +0,0 @@
1
- {
2
- "name": "generate-sitemap",
3
- "version": "0.1.0",
4
- "description": "Generate Sitemap skill",
5
- "type": "module",
6
- "bin": {
7
- "generate-sitemap": "./src/index.ts"
8
- },
9
- "scripts": {
10
- "dev": "bun run src/index.ts",
11
- "build": "bun build src/index.ts --outdir dist --target node",
12
- "typecheck": "tsc --noEmit"
13
- },
14
- "dependencies": {},
15
- "devDependencies": {
16
- "@types/bun": "latest",
17
- "typescript": "^5.7.0"
18
- },
19
- "publishConfig": {
20
- "access": "restricted",
21
- "registry": "https://registry.npmjs.org/"
22
- },
23
- "files": [
24
- "src",
25
- "tsconfig.json"
26
- ]
27
- }
@@ -1,626 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- /**
4
- * Generate Sitemap Skill
5
- *
6
- * Generates XML sitemaps for websites with support for:
7
- * - Automated website crawling
8
- * - Manual URL input from file or CLI
9
- * - Priority and change frequency settings
10
- * - Sitemap indexes for large sites (>50k URLs)
11
- * - Last modified dates
12
- */
13
-
14
- import { parseArgs } from "util";
15
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
16
- import { join, dirname, basename } from "path";
17
- import { gzipSync } from "zlib";
18
-
19
- // ============================================================================
20
- // Types
21
- // ============================================================================
22
-
23
- interface SitemapURL {
24
- loc: string;
25
- lastmod?: string;
26
- changefreq?: ChangeFrequency;
27
- priority?: number;
28
- }
29
-
30
- type ChangeFrequency =
31
- | "always"
32
- | "hourly"
33
- | "daily"
34
- | "weekly"
35
- | "monthly"
36
- | "yearly"
37
- | "never";
38
-
39
- interface CrawlOptions {
40
- maxDepth?: number;
41
- maxUrls?: number;
42
- excludePatterns?: string[];
43
- includePatterns?: string[];
44
- followExternal?: boolean;
45
- timeout?: number;
46
- userAgent?: string;
47
- }
48
-
49
- interface GenerateOptions {
50
- file?: string;
51
- crawl?: boolean;
52
- depth?: number;
53
- maxUrls?: number;
54
- priority?: number;
55
- changefreq?: ChangeFrequency;
56
- lastmod?: string;
57
- output?: string;
58
- index?: boolean;
59
- compress?: boolean;
60
- pretty?: boolean;
61
- exclude?: string[];
62
- include?: string[];
63
- followExternal?: boolean;
64
- timeout?: number;
65
- userAgent?: string;
66
- }
67
-
68
- // ============================================================================
69
- // Constants
70
- // ============================================================================
71
-
72
- const SITEMAP_XMLNS = "http://www.sitemaps.org/schemas/sitemap/0.9";
73
- const MAX_URLS_PER_SITEMAP = 50000;
74
- const DEFAULT_TIMEOUT = 5000;
75
- const DEFAULT_USER_AGENT = "skills.md-sitemap-generator/1.0";
76
- const RATE_LIMIT_DELAY = 200; // 5 requests per second
77
-
78
- // ============================================================================
79
- // URL Parser & Validator
80
- // ============================================================================
81
-
82
- function isValidUrl(url: string): boolean {
83
- try {
84
- const parsed = new URL(url);
85
- return parsed.protocol === "http:" || parsed.protocol === "https:";
86
- } catch {
87
- return false;
88
- }
89
- }
90
-
91
- function normalizeUrl(url: string): string {
92
- try {
93
- const parsed = new URL(url);
94
- // Remove trailing slash except for root
95
- if (parsed.pathname !== "/" && parsed.pathname.endsWith("/")) {
96
- parsed.pathname = parsed.pathname.slice(0, -1);
97
- }
98
- // Remove hash
99
- parsed.hash = "";
100
- return parsed.toString();
101
- } catch {
102
- return url;
103
- }
104
- }
105
-
106
- function matchesPattern(url: string, pattern: string): boolean {
107
- const regex = new RegExp(
108
- pattern
109
- .replace(/\*/g, ".*")
110
- .replace(/\?/g, ".")
111
- );
112
- return regex.test(url);
113
- }
114
-
115
- // ============================================================================
116
- // File Parser
117
- // ============================================================================
118
-
119
- function parseUrlsFile(filePath: string, defaultOptions: Partial<SitemapURL>): SitemapURL[] {
120
- if (!existsSync(filePath)) {
121
- throw new Error(`File not found: ${filePath}`);
122
- }
123
-
124
- const content = readFileSync(filePath, "utf-8");
125
- const lines = content.split("\n").filter(line => {
126
- const trimmed = line.trim();
127
- return trimmed && !trimmed.startsWith("#");
128
- });
129
-
130
- const urls: SitemapURL[] = [];
131
-
132
- for (const line of lines) {
133
- const parts = line.trim().split(/\s+/);
134
- if (parts.length === 0) continue;
135
-
136
- const url = parts[0];
137
- if (!isValidUrl(url)) {
138
- console.warn(`⚠️ Skipping invalid URL: ${url}`);
139
- continue;
140
- }
141
-
142
- const sitemapUrl: SitemapURL = {
143
- loc: normalizeUrl(url),
144
- priority: parts[1] ? parseFloat(parts[1]) : defaultOptions.priority,
145
- changefreq: (parts[2] as ChangeFrequency) || defaultOptions.changefreq,
146
- lastmod: parts[3] || defaultOptions.lastmod,
147
- };
148
-
149
- urls.push(sitemapUrl);
150
- }
151
-
152
- return urls;
153
- }
154
-
155
- // ============================================================================
156
- // Web Crawler
157
- // ============================================================================
158
-
159
- class WebCrawler {
160
- private visited = new Set<string>();
161
- private baseUrl: URL;
162
- private options: CrawlOptions;
163
-
164
- constructor(baseUrl: string, options: CrawlOptions = {}) {
165
- this.baseUrl = new URL(baseUrl);
166
- this.options = {
167
- maxDepth: options.maxDepth,
168
- maxUrls: options.maxUrls || MAX_URLS_PER_SITEMAP,
169
- excludePatterns: options.excludePatterns || [],
170
- includePatterns: options.includePatterns || [],
171
- followExternal: options.followExternal || false,
172
- timeout: options.timeout || DEFAULT_TIMEOUT,
173
- userAgent: options.userAgent || DEFAULT_USER_AGENT,
174
- };
175
- }
176
-
177
- async crawl(): Promise<SitemapURL[]> {
178
- console.log(`🕷️ Starting crawl of ${this.baseUrl.toString()}`);
179
- console.log(` Max depth: ${this.options.maxDepth || "unlimited"}`);
180
- console.log(` Max URLs: ${this.options.maxUrls}`);
181
-
182
- const urls: SitemapURL[] = [];
183
- await this.crawlRecursive(this.baseUrl.toString(), 0, urls);
184
-
185
- console.log(`✅ Crawl complete: ${urls.length} URLs discovered`);
186
- return urls;
187
- }
188
-
189
- private async crawlRecursive(
190
- url: string,
191
- depth: number,
192
- urls: SitemapURL[]
193
- ): Promise<void> {
194
- // Check limits
195
- if (this.options.maxDepth && depth > this.options.maxDepth) return;
196
- if (urls.length >= this.options.maxUrls!) return;
197
-
198
- const normalizedUrl = normalizeUrl(url);
199
-
200
- // Check if already visited
201
- if (this.visited.has(normalizedUrl)) return;
202
- this.visited.add(normalizedUrl);
203
-
204
- // Check domain (unless followExternal is enabled)
205
- const urlObj = new URL(url);
206
- if (!this.options.followExternal && urlObj.hostname !== this.baseUrl.hostname) {
207
- return;
208
- }
209
-
210
- // Apply filters
211
- if (!this.shouldIncludeUrl(url)) return;
212
-
213
- // Add to sitemap
214
- urls.push({
215
- loc: normalizedUrl,
216
- lastmod: new Date().toISOString().split("T")[0],
217
- changefreq: "weekly",
218
- priority: depth === 0 ? 1.0 : Math.max(0.1, 1.0 - depth * 0.2),
219
- });
220
-
221
- console.log(` [${depth}] ${normalizedUrl}`);
222
-
223
- // Fetch and parse links
224
- try {
225
- const links = await this.fetchLinks(url);
226
-
227
- // Rate limiting
228
- await new Promise(resolve => setTimeout(resolve, RATE_LIMIT_DELAY));
229
-
230
- // Crawl children
231
- for (const link of links) {
232
- if (urls.length >= this.options.maxUrls!) break;
233
- await this.crawlRecursive(link, depth + 1, urls);
234
- }
235
- } catch (error) {
236
- console.warn(` ⚠️ Failed to crawl ${url}:`, (error as Error).message);
237
- }
238
- }
239
-
240
- private async fetchLinks(url: string): Promise<string[]> {
241
- const controller = new AbortController();
242
- const timeoutId = setTimeout(() => controller.abort(), this.options.timeout);
243
-
244
- try {
245
- const response = await fetch(url, {
246
- headers: {
247
- "User-Agent": this.options.userAgent!,
248
- },
249
- signal: controller.signal,
250
- });
251
-
252
- clearTimeout(timeoutId);
253
-
254
- if (!response.ok) {
255
- throw new Error(`HTTP ${response.status}`);
256
- }
257
-
258
- const contentType = response.headers.get("content-type") || "";
259
- if (!contentType.includes("text/html")) {
260
- return [];
261
- }
262
-
263
- const html = await response.text();
264
- return this.extractLinks(html, url);
265
- } catch (error) {
266
- clearTimeout(timeoutId);
267
- throw error;
268
- }
269
- }
270
-
271
- private extractLinks(html: string, baseUrl: string): string[] {
272
- const links: string[] = [];
273
- const linkRegex = /<a[^>]+href=["']([^"']+)["']/gi;
274
- let match;
275
-
276
- while ((match = linkRegex.exec(html)) !== null) {
277
- try {
278
- const href = match[1];
279
- const absoluteUrl = new URL(href, baseUrl).toString();
280
-
281
- if (isValidUrl(absoluteUrl)) {
282
- links.push(absoluteUrl);
283
- }
284
- } catch {
285
- // Skip invalid URLs
286
- }
287
- }
288
-
289
- return [...new Set(links)]; // Remove duplicates
290
- }
291
-
292
- private shouldIncludeUrl(url: string): boolean {
293
- // Check exclude patterns
294
- for (const pattern of this.options.excludePatterns!) {
295
- if (matchesPattern(url, pattern)) {
296
- return false;
297
- }
298
- }
299
-
300
- // Check include patterns (if any)
301
- if (this.options.includePatterns!.length > 0) {
302
- return this.options.includePatterns!.some(pattern =>
303
- matchesPattern(url, pattern)
304
- );
305
- }
306
-
307
- return true;
308
- }
309
- }
310
-
311
- // ============================================================================
312
- // XML Generator
313
- // ============================================================================
314
-
315
- function generateSitemapXML(urls: SitemapURL[], pretty: boolean = false): string {
316
- const indent = pretty ? " " : "";
317
- const newline = pretty ? "\n" : "";
318
-
319
- let xml = `<?xml version="1.0" encoding="UTF-8"?>${newline}`;
320
- xml += `<urlset xmlns="${SITEMAP_XMLNS}">${newline}`;
321
-
322
- for (const url of urls) {
323
- xml += `${indent}<url>${newline}`;
324
- xml += `${indent}${indent}<loc>${escapeXml(url.loc)}</loc>${newline}`;
325
-
326
- if (url.lastmod) {
327
- xml += `${indent}${indent}<lastmod>${url.lastmod}</lastmod>${newline}`;
328
- }
329
-
330
- if (url.changefreq) {
331
- xml += `${indent}${indent}<changefreq>${url.changefreq}</changefreq>${newline}`;
332
- }
333
-
334
- if (url.priority !== undefined) {
335
- xml += `${indent}${indent}<priority>${url.priority.toFixed(1)}</priority>${newline}`;
336
- }
337
-
338
- xml += `${indent}</url>${newline}`;
339
- }
340
-
341
- xml += `</urlset>`;
342
- return xml;
343
- }
344
-
345
- function generateSitemapIndexXML(
346
- sitemaps: Array<{ loc: string; lastmod: string }>,
347
- pretty: boolean = false
348
- ): string {
349
- const indent = pretty ? " " : "";
350
- const newline = pretty ? "\n" : "";
351
-
352
- let xml = `<?xml version="1.0" encoding="UTF-8"?>${newline}`;
353
- xml += `<sitemapindex xmlns="${SITEMAP_XMLNS}">${newline}`;
354
-
355
- for (const sitemap of sitemaps) {
356
- xml += `${indent}<sitemap>${newline}`;
357
- xml += `${indent}${indent}<loc>${escapeXml(sitemap.loc)}</loc>${newline}`;
358
- xml += `${indent}${indent}<lastmod>${sitemap.lastmod}</lastmod>${newline}`;
359
- xml += `${indent}</sitemap>${newline}`;
360
- }
361
-
362
- xml += `</sitemapindex>`;
363
- return xml;
364
- }
365
-
366
- function escapeXml(str: string): string {
367
- return str
368
- .replace(/&/g, "&amp;")
369
- .replace(/</g, "&lt;")
370
- .replace(/>/g, "&gt;")
371
- .replace(/"/g, "&quot;")
372
- .replace(/'/g, "&apos;");
373
- }
374
-
375
- // ============================================================================
376
- // File Writer
377
- // ============================================================================
378
-
379
- function writeOutput(
380
- content: string,
381
- outputPath: string,
382
- compress: boolean = false
383
- ): void {
384
- // Ensure directory exists
385
- const dir = dirname(outputPath);
386
- if (!existsSync(dir)) {
387
- mkdirSync(dir, { recursive: true });
388
- }
389
-
390
- if (compress) {
391
- const compressed = gzipSync(Buffer.from(content));
392
- const gzPath = outputPath.endsWith(".gz") ? outputPath : `${outputPath}.gz`;
393
- writeFileSync(gzPath, compressed);
394
- console.log(`💾 Saved compressed sitemap: ${gzPath}`);
395
- } else {
396
- writeFileSync(outputPath, content, "utf-8");
397
- console.log(`💾 Saved sitemap: ${outputPath}`);
398
- }
399
- }
400
-
401
- // ============================================================================
402
- // Main Generator
403
- // ============================================================================
404
-
405
- async function generateSitemap(
406
- inputUrls: string[],
407
- options: GenerateOptions
408
- ): Promise<void> {
409
- console.log("🗺️ Generate Sitemap v1.0.0\n");
410
-
411
- let urls: SitemapURL[] = [];
412
-
413
- // Parse input from file
414
- if (options.file) {
415
- console.log(`📂 Reading URLs from file: ${options.file}`);
416
- urls = parseUrlsFile(options.file, {
417
- priority: options.priority,
418
- changefreq: options.changefreq,
419
- lastmod: options.lastmod,
420
- });
421
- }
422
- // Or from manual input
423
- else if (inputUrls.length > 0) {
424
- for (const url of inputUrls) {
425
- if (isValidUrl(url)) {
426
- urls.push({
427
- loc: normalizeUrl(url),
428
- priority: options.priority,
429
- changefreq: options.changefreq,
430
- lastmod: options.lastmod,
431
- });
432
- }
433
- }
434
- }
435
-
436
- // If first URL and crawl enabled (or no file provided)
437
- if (inputUrls.length > 0 && (options.crawl || !options.file)) {
438
- const baseUrl = inputUrls[0];
439
- if (isValidUrl(baseUrl)) {
440
- const crawler = new WebCrawler(baseUrl, {
441
- maxDepth: options.depth,
442
- maxUrls: options.maxUrls,
443
- excludePatterns: options.exclude,
444
- includePatterns: options.include,
445
- followExternal: options.followExternal,
446
- timeout: options.timeout,
447
- userAgent: options.userAgent,
448
- });
449
-
450
- const crawledUrls = await crawler.crawl();
451
-
452
- // Merge with manual URLs (deduplicate)
453
- const urlMap = new Map<string, SitemapURL>();
454
-
455
- for (const url of urls) {
456
- urlMap.set(url.loc, url);
457
- }
458
-
459
- for (const url of crawledUrls) {
460
- if (!urlMap.has(url.loc)) {
461
- urlMap.set(url.loc, url);
462
- }
463
- }
464
-
465
- urls = Array.from(urlMap.values());
466
- }
467
- }
468
-
469
- if (urls.length === 0) {
470
- console.error("❌ No URLs to generate sitemap. Provide URLs via file, CLI, or enable crawling.");
471
- process.exit(1);
472
- }
473
-
474
- console.log(`\n📊 Total URLs: ${urls.length}`);
475
-
476
- // Determine output path
477
- const outputPath = options.output || join(
478
- process.env.SKILLS_OUTPUT_DIR || "./",
479
- "sitemap.xml"
480
- );
481
-
482
- // Generate sitemap(s)
483
- if (options.index && urls.length > options.maxUrls!) {
484
- // Generate multiple sitemaps with index
485
- console.log(`📑 Generating sitemap index (${Math.ceil(urls.length / options.maxUrls!)} sitemaps)`);
486
-
487
- const baseDir = dirname(outputPath);
488
- const baseName = basename(outputPath, ".xml");
489
- const sitemapFiles: Array<{ loc: string; lastmod: string }> = [];
490
-
491
- for (let i = 0; i < urls.length; i += options.maxUrls!) {
492
- const chunk = urls.slice(i, i + options.maxUrls!);
493
- const chunkIndex = Math.floor(i / options.maxUrls!) + 1;
494
- const chunkPath = join(baseDir, `${baseName}_${chunkIndex}.xml`);
495
-
496
- const xml = generateSitemapXML(chunk, options.pretty);
497
- writeOutput(xml, chunkPath, options.compress);
498
-
499
- // Get base URL for sitemap location
500
- const firstUrl = new URL(chunk[0].loc);
501
- const sitemapLoc = `${firstUrl.protocol}//${firstUrl.hostname}/${basename(chunkPath)}`;
502
-
503
- sitemapFiles.push({
504
- loc: sitemapLoc,
505
- lastmod: new Date().toISOString().split("T")[0],
506
- });
507
- }
508
-
509
- // Generate index
510
- const indexXml = generateSitemapIndexXML(sitemapFiles, options.pretty);
511
- const indexPath = join(baseDir, `${baseName}_index.xml`);
512
- writeOutput(indexXml, indexPath, options.compress);
513
-
514
- console.log(`\n✅ Generated sitemap index with ${sitemapFiles.length} sitemaps`);
515
- } else {
516
- // Generate single sitemap
517
- const xml = generateSitemapXML(urls, options.pretty);
518
- writeOutput(xml, outputPath, options.compress);
519
-
520
- console.log(`\n✅ Generated sitemap with ${urls.length} URLs`);
521
- }
522
-
523
- console.log("\n📍 Next steps:");
524
- console.log(" 1. Upload sitemap to your website root");
525
- console.log(" 2. Submit to search engines (Google Search Console, Bing Webmaster)");
526
- console.log(" 3. Add sitemap location to robots.txt:");
527
- console.log(` Sitemap: https://example.com/${basename(outputPath)}`);
528
- }
529
-
530
- // ============================================================================
531
- // CLI Entry Point
532
- // ============================================================================
533
-
534
- async function main() {
535
- try {
536
- const { values, positionals } = parseArgs({
537
- args: process.argv.slice(2),
538
- options: {
539
- file: { type: "string" },
540
- crawl: { type: "boolean", default: true },
541
- depth: { type: "string" },
542
- "max-urls": { type: "string", default: "50000" },
543
- priority: { type: "string", default: "0.5" },
544
- changefreq: { type: "string", default: "weekly" },
545
- lastmod: { type: "string" },
546
- output: { type: "string" },
547
- index: { type: "boolean", default: false },
548
- compress: { type: "boolean", default: false },
549
- pretty: { type: "boolean", default: true },
550
- exclude: { type: "string", multiple: true },
551
- include: { type: "string", multiple: true },
552
- "follow-external": { type: "boolean", default: false },
553
- timeout: { type: "string", default: "5000" },
554
- "user-agent": { type: "string" },
555
- help: { type: "boolean", short: "h" },
556
- },
557
- allowPositionals: true,
558
- });
559
-
560
- if (values.help) {
561
- console.log(`
562
- Generate Sitemap v1.0.0
563
-
564
- Usage:
565
- bun run src/index.ts [urls...] [options]
566
-
567
- Examples:
568
- bun run src/index.ts https://example.com
569
- bun run src/index.ts --file urls.txt --output sitemap.xml
570
- bun run src/index.ts https://example.com --depth 3 --index
571
-
572
- Options:
573
- --file <path> Path to file with URLs
574
- --crawl Enable crawling (default: true)
575
- --depth <number> Max crawl depth
576
- --max-urls <number> Max URLs per sitemap (default: 50000)
577
- --priority <number> Default priority 0.0-1.0 (default: 0.5)
578
- --changefreq <freq> Change frequency (default: weekly)
579
- --lastmod <date> Last modified date (ISO 8601)
580
- --output <path> Output path (default: ./sitemap.xml)
581
- --index Generate sitemap index
582
- --compress Compress to .xml.gz
583
- --pretty Pretty print XML (default: true)
584
- --exclude <pattern> Exclude URL pattern (can repeat)
585
- --include <pattern> Include URL pattern (can repeat)
586
- --follow-external Follow external links
587
- --timeout <ms> Request timeout (default: 5000)
588
- --user-agent <string> Custom User-Agent
589
- -h, --help Show this help
590
- `);
591
- process.exit(0);
592
- }
593
-
594
- const options: GenerateOptions = {
595
- file: values.file as string | undefined,
596
- crawl: values.crawl as boolean,
597
- depth: values.depth ? parseInt(values.depth as string) : undefined,
598
- maxUrls: parseInt(values["max-urls"] as string),
599
- priority: parseFloat(values.priority as string),
600
- changefreq: values.changefreq as ChangeFrequency,
601
- lastmod: values.lastmod as string | undefined,
602
- output: values.output as string | undefined,
603
- index: values.index as boolean,
604
- compress: values.compress as boolean,
605
- pretty: values.pretty as boolean,
606
- exclude: values.exclude as string[] | undefined,
607
- include: values.include as string[] | undefined,
608
- followExternal: values["follow-external"] as boolean,
609
- timeout: parseInt(values.timeout as string),
610
- userAgent: values["user-agent"] as string | undefined,
611
- };
612
-
613
- await generateSitemap(positionals, options);
614
-
615
- } catch (error) {
616
- console.error("\n❌ Error:", (error as Error).message);
617
- process.exit(1);
618
- }
619
- }
620
-
621
- // Run if executed directly
622
- if (import.meta.main) {
623
- main();
624
- }
625
-
626
- export { generateSitemap, WebCrawler, generateSitemapXML, generateSitemapIndexXML };
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "dist"
5
- },
6
- "include": [
7
- "src/**/*",
8
- "bin/**/*"
9
- ]
10
- }
@@ -1,19 +0,0 @@
1
- # gif-maker
2
-
3
- Gif Maker skill.
4
-
5
- ## Tech Stack
6
-
7
- - Runtime: Bun
8
- - Language: TypeScript
9
- - CLI: Commander.js
10
-
11
- ## CLI
12
-
13
- ```bash
14
- gif-maker run
15
- ```
16
-
17
- ## Data Directory
18
-
19
- ~/.skill/gif-maker/