@hasna/skills 0.1.62 → 0.1.64

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 (541) hide show
  1. package/README.md +38 -12
  2. package/bin/index.js +15743 -21709
  3. package/bin/mcp.js +3866 -11522
  4. package/bin/migrate.js +281 -35
  5. package/bin/server.js +5805 -2682
  6. package/bin/worker.js +5280 -2388
  7. package/dist/cli/commands/publish.d.ts +2 -0
  8. package/dist/cli/commands/registry-reconcile.d.ts +2 -0
  9. package/dist/cli/components/App.d.ts +2 -1
  10. package/dist/cli/components/CategorySelect.d.ts +2 -1
  11. package/dist/cli/components/Header.d.ts +2 -1
  12. package/dist/cli/components/InstallProgress.d.ts +2 -1
  13. package/dist/cli/components/SearchView.d.ts +2 -1
  14. package/dist/cli/components/SkillSelect.d.ts +2 -1
  15. package/dist/index.d.ts +5 -2
  16. package/dist/index.js +5386 -13739
  17. package/dist/lib/agent-sync.d.ts +61 -6
  18. package/dist/lib/auth-store.d.ts +37 -0
  19. package/dist/lib/config.d.ts +51 -0
  20. package/dist/lib/home-adoption.d.ts +91 -0
  21. package/dist/lib/home-census.d.ts +26 -0
  22. package/dist/lib/home-migration.d.ts +60 -0
  23. package/dist/lib/native-storage.d.ts +1 -1
  24. package/dist/lib/portable-skills-files.d.ts +21 -1
  25. package/dist/lib/portable-skills-types.d.ts +46 -0
  26. package/dist/lib/portable-skills.d.ts +35 -6
  27. package/dist/lib/pull.d.ts +97 -0
  28. package/dist/lib/registry-reconcile.d.ts +114 -0
  29. package/dist/lib/registry.d.ts +7 -4
  30. package/dist/lib/remote-client.d.ts +124 -1
  31. package/dist/lib/remote-registry.d.ts +26 -0
  32. package/dist/lib/revision.d.ts +29 -0
  33. package/dist/lib/run-state.d.ts +5 -0
  34. package/dist/lib/skill-bundles.d.ts +54 -0
  35. package/dist/lib/skill-contract.d.ts +35 -0
  36. package/dist/lib/skill-hash.d.ts +77 -0
  37. package/dist/sdk/cancel.d.ts +30 -0
  38. package/dist/sdk/dispatcher.d.ts +40 -0
  39. package/dist/sdk/event-sink.d.ts +2 -0
  40. package/dist/sdk/events.d.ts +79 -0
  41. package/dist/sdk/execution/admission.d.ts +44 -0
  42. package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
  43. package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
  44. package/dist/sdk/execution/image-profile.d.ts +73 -0
  45. package/dist/sdk/execution/index.d.ts +15 -0
  46. package/dist/sdk/execution/receipts.d.ts +44 -0
  47. package/dist/sdk/execution/state-machine.d.ts +38 -0
  48. package/dist/sdk/execution/storage.d.ts +158 -0
  49. package/dist/sdk/execution/types.d.ts +130 -0
  50. package/dist/sdk/executor.d.ts +17 -0
  51. package/dist/sdk/governance-store.d.ts +156 -0
  52. package/dist/sdk/governance.d.ts +92 -0
  53. package/dist/sdk/index.d.ts +26 -0
  54. package/dist/sdk/index.js +49728 -0
  55. package/dist/sdk/offline.d.ts +16 -0
  56. package/dist/sdk/outputs.d.ts +71 -0
  57. package/dist/sdk/registry.d.ts +28 -0
  58. package/dist/sdk/runs.d.ts +229 -0
  59. package/dist/sdk/server.d.ts +35 -0
  60. package/dist/sdk/spend.d.ts +36 -0
  61. package/dist/sdk/storage.d.ts +25 -0
  62. package/dist/server/app.d.ts +42 -0
  63. package/dist/server/artifact-storage.d.ts +102 -0
  64. package/dist/server/auth.d.ts +5 -0
  65. package/dist/server/config.d.ts +50 -0
  66. package/dist/server/database-url.d.ts +42 -0
  67. package/dist/server/handlers.d.ts +3 -0
  68. package/dist/server/index.d.ts +2 -0
  69. package/dist/server/migrate.d.ts +13 -0
  70. package/dist/server/migrations-dir.d.ts +18 -0
  71. package/dist/server/redaction.d.ts +1 -0
  72. package/dist/server/registry.d.ts +5 -0
  73. package/dist/server/rows.d.ts +24 -0
  74. package/dist/server/skills-api.d.ts +170 -0
  75. package/dist/server/sqlite-store.d.ts +131 -0
  76. package/dist/server/store-fixtures.d.ts +25 -0
  77. package/dist/server/store.d.ts +170 -0
  78. package/dist/server/types.d.ts +337 -0
  79. package/dist/server/worker.d.ts +4 -0
  80. package/dist/storage.js +39 -2
  81. package/docs/skill-standard.md +211 -39
  82. package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
  83. package/migrations/postgres/0004_hosted_pins.sql +28 -0
  84. package/migrations/postgres/0005_revision_tombstone_registry.sql +37 -0
  85. package/migrations/postgres/0005_tag_projection.sql +36 -0
  86. package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
  87. package/migrations/sqlite/0004_hosted_pins.sql +21 -0
  88. package/migrations/sqlite/0005_revision_tombstone_registry.sql +18 -0
  89. package/migrations/sqlite/0005_tag_projection.sql +25 -0
  90. package/package.json +12 -8
  91. package/schemas/skill.schema.json +181 -0
  92. package/agent-skills/README.md +0 -41
  93. package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
  94. package/agent-skills/inbox/SKILL.md +0 -25
  95. package/agent-skills/inbox/scripts/inbox +0 -109
  96. package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
  97. package/agent-skills/inbox-monitor/SKILL.md +0 -41
  98. package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
  99. package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
  100. package/agent-skills/merge-pr/SKILL.md +0 -85
  101. package/agent-skills/merge-pr/references/merge-safety.md +0 -82
  102. package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
  103. package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
  104. package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
  105. package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
  106. package/agent-skills/skill-goal-execute/SKILL.md +0 -115
  107. package/agent-skills/skill-login/SKILL.md +0 -109
  108. package/agent-skills/skill-project-create/SKILL.md +0 -91
  109. package/agent-skills/skill-publish/SKILL.md +0 -254
  110. package/agent-skills/skill-publish/scripts/capture_registry.js +0 -47
  111. package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +0 -143
  112. package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +0 -231
  113. package/skills/_common/auth.ts +0 -45
  114. package/skills/_common/http-client.ts +0 -143
  115. package/skills/_common/index.ts +0 -26
  116. package/skills/_common/install.sh +0 -7
  117. package/skills/_common/installer.ts +0 -72
  118. package/skills/_common/skill-install.ts +0 -37
  119. package/skills/_common/vision.ts +0 -374
  120. package/skills/ad-creative-pack/SKILL.md +0 -55
  121. package/skills/ad-creative-pack/package.json +0 -10
  122. package/skills/analyze-data/CLAUDE.md +0 -16
  123. package/skills/analyze-data/SKILL.md +0 -112
  124. package/skills/analyze-data/package.json +0 -23
  125. package/skills/analyze-data/src/analysis.ts +0 -401
  126. package/skills/analyze-data/src/cli.ts +0 -66
  127. package/skills/analyze-data/src/formatters.ts +0 -235
  128. package/skills/analyze-data/src/index.ts +0 -74
  129. package/skills/analyze-data/src/logger.ts +0 -36
  130. package/skills/analyze-data/src/parsers.ts +0 -57
  131. package/skills/analyze-data/src/stats.ts +0 -151
  132. package/skills/analyze-data/src/types.ts +0 -85
  133. package/skills/analyze-data/tsconfig.json +0 -19
  134. package/skills/api-docs-portal/SKILL.md +0 -84
  135. package/skills/api-docs-portal/package.json +0 -35
  136. package/skills/api-docs-portal/src/index.ts +0 -919
  137. package/skills/api-docs-portal/tsconfig.json +0 -17
  138. package/skills/api-test-suite/CLAUDE.md +0 -19
  139. package/skills/api-test-suite/package.json +0 -27
  140. package/skills/api-test-suite/src/index.ts +0 -381
  141. package/skills/api-test-suite/tsconfig.json +0 -10
  142. package/skills/audio-extract/CLAUDE.md +0 -9
  143. package/skills/audio-extract/SKILL.md +0 -73
  144. package/skills/audio-extract/package.json +0 -23
  145. package/skills/audio-extract/src/index.ts +0 -323
  146. package/skills/audio-extract/tsconfig.json +0 -11
  147. package/skills/bio-sequence-tool/CLAUDE.md +0 -19
  148. package/skills/bio-sequence-tool/package.json +0 -27
  149. package/skills/bio-sequence-tool/src/index.ts +0 -85
  150. package/skills/bio-sequence-tool/tsconfig.json +0 -10
  151. package/skills/blog-article/CLAUDE.md +0 -12
  152. package/skills/blog-article/SKILL.md +0 -55
  153. package/skills/blog-article/package.json +0 -10
  154. package/skills/blog-article/tsconfig.json +0 -10
  155. package/skills/brand-assets/SKILL.md +0 -118
  156. package/skills/brand-assets/package.json +0 -35
  157. package/skills/brand-assets/src/cli.ts +0 -155
  158. package/skills/brand-assets/src/constants.ts +0 -8
  159. package/skills/brand-assets/src/extract.ts +0 -236
  160. package/skills/brand-assets/src/index.ts +0 -668
  161. package/skills/brand-assets/src/types.ts +0 -59
  162. package/skills/brand-assets/tsconfig.json +0 -17
  163. package/skills/brand-kit/SKILL.md +0 -54
  164. package/skills/brand-kit/package.json +0 -10
  165. package/skills/businessactivity/CLAUDE.md +0 -176
  166. package/skills/businessactivity/LICENSE +0 -192
  167. package/skills/businessactivity/README.md +0 -287
  168. package/skills/businessactivity/package.json +0 -25
  169. package/skills/businessactivity/scripts/publish.ts +0 -210
  170. package/skills/businessactivity/src/commands/activity.ts +0 -211
  171. package/skills/businessactivity/src/commands/function.ts +0 -227
  172. package/skills/businessactivity/src/commands/owner.ts +0 -193
  173. package/skills/businessactivity/src/commands/profile.ts +0 -121
  174. package/skills/businessactivity/src/commands/responsibility.ts +0 -264
  175. package/skills/businessactivity/src/commands/team.ts +0 -244
  176. package/skills/businessactivity/src/commands/workflow.ts +0 -359
  177. package/skills/businessactivity/src/index.ts +0 -3
  178. package/skills/businessactivity/src/lib/config.ts +0 -167
  179. package/skills/businessactivity/src/lib/output.ts +0 -76
  180. package/skills/businessactivity/src/lib/paths.ts +0 -79
  181. package/skills/businessactivity/src/lib/storage.ts +0 -95
  182. package/skills/businessactivity/src/types/index.ts +0 -86
  183. package/skills/businessactivity/tsconfig.json +0 -29
  184. package/skills/codefix/LICENSE +0 -192
  185. package/skills/codefix/README.md +0 -232
  186. package/skills/codefix/SKILL.md +0 -94
  187. package/skills/codefix/package.json +0 -21
  188. package/skills/codefix/src/fixers/batch.ts +0 -213
  189. package/skills/codefix/src/fixers/detector.ts +0 -160
  190. package/skills/codefix/src/fixers/index.ts +0 -7
  191. package/skills/codefix/src/fixers/runner.ts +0 -522
  192. package/skills/codefix/src/index-local.ts +0 -431
  193. package/skills/codefix/src/index.ts +0 -4
  194. package/skills/codefix/src/types.ts +0 -211
  195. package/skills/codefix/tsconfig.json +0 -15
  196. package/skills/commitpush/SKILL.md +0 -57
  197. package/skills/commitpush/package.json +0 -33
  198. package/skills/commitpush/src/index.ts +0 -34
  199. package/skills/commitpush/tsconfig.json +0 -17
  200. package/skills/commitpushpr/SKILL.md +0 -55
  201. package/skills/commitpushpr/package.json +0 -33
  202. package/skills/commitpushpr/src/index.ts +0 -34
  203. package/skills/commitpushpr/tsconfig.json +0 -17
  204. package/skills/compress-video/CLAUDE.md +0 -9
  205. package/skills/compress-video/SKILL.md +0 -79
  206. package/skills/compress-video/package.json +0 -23
  207. package/skills/compress-video/src/index.ts +0 -473
  208. package/skills/compress-video/tsconfig.json +0 -11
  209. package/skills/contract-review-report/SKILL.md +0 -52
  210. package/skills/contract-review-report/package.json +0 -10
  211. package/skills/customer-feedback-report/SKILL.md +0 -52
  212. package/skills/customer-feedback-report/package.json +0 -10
  213. package/skills/dashboard-builder/CLAUDE.md +0 -19
  214. package/skills/dashboard-builder/package.json +0 -29
  215. package/skills/dashboard-builder/src/index.ts +0 -150
  216. package/skills/dashboard-builder/tsconfig.json +0 -10
  217. package/skills/data-anonymizer/CLAUDE.md +0 -19
  218. package/skills/data-anonymizer/package.json +0 -27
  219. package/skills/data-anonymizer/src/index.ts +0 -183
  220. package/skills/data-anonymizer/tsconfig.json +0 -10
  221. package/skills/database-explorer/CLAUDE.md +0 -19
  222. package/skills/database-explorer/package.json +0 -29
  223. package/skills/database-explorer/src/index.ts +0 -95
  224. package/skills/database-explorer/tsconfig.json +0 -10
  225. package/skills/diff-viewer/CLAUDE.md +0 -19
  226. package/skills/diff-viewer/package.json +0 -30
  227. package/skills/diff-viewer/src/index.ts +0 -164
  228. package/skills/diff-viewer/tsconfig.json +0 -10
  229. package/skills/doc-read/SKILL.md +0 -45
  230. package/skills/doc-read/package.json +0 -29
  231. package/skills/doc-read/src/index.ts +0 -324
  232. package/skills/doc-read/tsconfig.json +0 -8
  233. package/skills/domainpurchase/LICENSE +0 -192
  234. package/skills/domainpurchase/SKILL.md +0 -29
  235. package/skills/domainpurchase/package.json +0 -30
  236. package/skills/domainpurchase/src/index.ts +0 -3
  237. package/skills/domainpurchase/tsconfig.json +0 -21
  238. package/skills/email-sequence/SKILL.md +0 -53
  239. package/skills/email-sequence/package.json +0 -10
  240. package/skills/experiment-power-calculator/CLAUDE.md +0 -19
  241. package/skills/experiment-power-calculator/package.json +0 -29
  242. package/skills/experiment-power-calculator/src/index.ts +0 -86
  243. package/skills/experiment-power-calculator/tsconfig.json +0 -10
  244. package/skills/extract-frames/CLAUDE.md +0 -19
  245. package/skills/extract-frames/package.json +0 -27
  246. package/skills/extract-frames/src/index.ts +0 -616
  247. package/skills/extract-frames/tsconfig.json +0 -10
  248. package/skills/file-organizer/CLAUDE.md +0 -19
  249. package/skills/file-organizer/package.json +0 -27
  250. package/skills/file-organizer/src/index.ts +0 -91
  251. package/skills/file-organizer/tsconfig.json +0 -10
  252. package/skills/folder-tree/CLAUDE.md +0 -19
  253. package/skills/folder-tree/package.json +0 -29
  254. package/skills/folder-tree/src/index.ts +0 -568
  255. package/skills/folder-tree/tsconfig.json +0 -10
  256. package/skills/form-filler/CLAUDE.md +0 -19
  257. package/skills/form-filler/package.json +0 -29
  258. package/skills/form-filler/src/index.ts +0 -81
  259. package/skills/form-filler/tsconfig.json +0 -10
  260. package/skills/generate-api-client/CLAUDE.md +0 -19
  261. package/skills/generate-api-client/package.json +0 -29
  262. package/skills/generate-api-client/src/generator.ts +0 -47
  263. package/skills/generate-api-client/src/index.ts +0 -92
  264. package/skills/generate-api-client/src/logger.ts +0 -34
  265. package/skills/generate-api-client/src/python-generator.ts +0 -245
  266. package/skills/generate-api-client/src/spec-loader.ts +0 -48
  267. package/skills/generate-api-client/src/type-mappers.ts +0 -79
  268. package/skills/generate-api-client/src/types.ts +0 -76
  269. package/skills/generate-api-client/src/typescript-generator.ts +0 -247
  270. package/skills/generate-api-client/tsconfig.json +0 -10
  271. package/skills/generate-chart/CLAUDE.md +0 -19
  272. package/skills/generate-chart/package.json +0 -27
  273. package/skills/generate-chart/src/index.ts +0 -510
  274. package/skills/generate-chart/tsconfig.json +0 -10
  275. package/skills/generate-dockerfile/CLAUDE.md +0 -19
  276. package/skills/generate-dockerfile/package.json +0 -27
  277. package/skills/generate-dockerfile/src/cli.ts +0 -78
  278. package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
  279. package/skills/generate-dockerfile/src/index.ts +0 -81
  280. package/skills/generate-dockerfile/src/logger.ts +0 -30
  281. package/skills/generate-dockerfile/src/project-detection.ts +0 -68
  282. package/skills/generate-dockerfile/src/support-files.ts +0 -171
  283. package/skills/generate-dockerfile/src/types.ts +0 -29
  284. package/skills/generate-dockerfile/tsconfig.json +0 -10
  285. package/skills/generate-env/CLAUDE.md +0 -19
  286. package/skills/generate-env/package.json +0 -29
  287. package/skills/generate-env/src/cli.ts +0 -85
  288. package/skills/generate-env/src/detection.ts +0 -161
  289. package/skills/generate-env/src/env-data.ts +0 -66
  290. package/skills/generate-env/src/generators.ts +0 -240
  291. package/skills/generate-env/src/index.ts +0 -120
  292. package/skills/generate-env/src/runtime.ts +0 -30
  293. package/skills/generate-env/src/types.ts +0 -32
  294. package/skills/generate-env/tsconfig.json +0 -10
  295. package/skills/generate-favicon/CLAUDE.md +0 -19
  296. package/skills/generate-favicon/package.json +0 -29
  297. package/skills/generate-favicon/src/index.ts +0 -421
  298. package/skills/generate-favicon/tsconfig.json +0 -10
  299. package/skills/generate-qrcode/CLAUDE.md +0 -19
  300. package/skills/generate-qrcode/package.json +0 -30
  301. package/skills/generate-qrcode/src/index.ts +0 -584
  302. package/skills/generate-qrcode/tsconfig.json +0 -10
  303. package/skills/generate-resume/CLAUDE.md +0 -19
  304. package/skills/generate-resume/package.json +0 -27
  305. package/skills/generate-resume/src/cli.ts +0 -157
  306. package/skills/generate-resume/src/index.ts +0 -178
  307. package/skills/generate-resume/src/parsers.ts +0 -95
  308. package/skills/generate-resume/src/renderers.ts +0 -538
  309. package/skills/generate-resume/src/security.ts +0 -39
  310. package/skills/generate-resume/src/types.ts +0 -86
  311. package/skills/generate-resume/tsconfig.json +0 -10
  312. package/skills/generate-sitemap/CLAUDE.md +0 -19
  313. package/skills/generate-sitemap/package.json +0 -27
  314. package/skills/generate-sitemap/src/index.ts +0 -626
  315. package/skills/generate-sitemap/tsconfig.json +0 -10
  316. package/skills/gif-maker/CLAUDE.md +0 -19
  317. package/skills/gif-maker/package.json +0 -30
  318. package/skills/gif-maker/src/index.ts +0 -600
  319. package/skills/gif-maker/tsconfig.json +0 -10
  320. package/skills/hook/LICENSE +0 -192
  321. package/skills/hook/README.md +0 -74
  322. package/skills/hook/SKILL.md +0 -85
  323. package/skills/hook/bunfig.toml +0 -5
  324. package/skills/hook/package.json +0 -28
  325. package/skills/hook/src/commands/create.ts +0 -112
  326. package/skills/hook/src/commands/events.ts +0 -37
  327. package/skills/hook/src/commands/validate.ts +0 -117
  328. package/skills/hook/src/index.ts +0 -118
  329. package/skills/hook/src/templates/root.ts +0 -196
  330. package/skills/hook/src/templates/source.ts +0 -647
  331. package/skills/hook/tsconfig.json +0 -18
  332. package/skills/http-server/CLAUDE.md +0 -19
  333. package/skills/http-server/package.json +0 -29
  334. package/skills/http-server/src/index.ts +0 -51
  335. package/skills/http-server/tsconfig.json +0 -10
  336. package/skills/implementation/LICENSE +0 -192
  337. package/skills/implementation/README.md +0 -53
  338. package/skills/implementation/SKILL.md +0 -57
  339. package/skills/implementation/bunfig.toml +0 -5
  340. package/skills/implementation/package.json +0 -28
  341. package/skills/implementation/src/commands/create.ts +0 -187
  342. package/skills/implementation/src/index.ts +0 -62
  343. package/skills/implementation/tsconfig.json +0 -18
  344. package/skills/implementation-plan/CLAUDE.md +0 -19
  345. package/skills/implementation-plan/package.json +0 -29
  346. package/skills/implementation-plan/src/index.ts +0 -520
  347. package/skills/implementation-plan/tsconfig.json +0 -10
  348. package/skills/implementation-todo/CLAUDE.md +0 -19
  349. package/skills/implementation-todo/package.json +0 -29
  350. package/skills/implementation-todo/src/index.ts +0 -429
  351. package/skills/implementation-todo/tsconfig.json +0 -10
  352. package/skills/invoice/.env.example +0 -3
  353. package/skills/invoice/CLAUDE.md +0 -31
  354. package/skills/invoice/LICENSE +0 -192
  355. package/skills/invoice/README.md +0 -70
  356. package/skills/invoice/package.json +0 -26
  357. package/skills/invoice/src/commands/companies.ts +0 -202
  358. package/skills/invoice/src/commands/config.ts +0 -132
  359. package/skills/invoice/src/commands/generate.ts +0 -177
  360. package/skills/invoice/src/commands/invoices.ts +0 -218
  361. package/skills/invoice/src/index.ts +0 -3
  362. package/skills/invoice/src/lib/api.ts +0 -124
  363. package/skills/invoice/src/lib/storage.ts +0 -171
  364. package/skills/invoice/src/types/index.ts +0 -86
  365. package/skills/invoice/src/utils/logger.ts +0 -33
  366. package/skills/invoice/src/utils/paths.ts +0 -25
  367. package/skills/invoice/tsconfig.json +0 -23
  368. package/skills/invoice-reconciliation/SKILL.md +0 -98
  369. package/skills/invoice-reconciliation/package.json +0 -36
  370. package/skills/invoice-reconciliation/src/index.ts +0 -743
  371. package/skills/invoice-reconciliation/tsconfig.json +0 -17
  372. package/skills/landing-page-pack/SKILL.md +0 -55
  373. package/skills/landing-page-pack/package.json +0 -10
  374. package/skills/latex-table-generator/CLAUDE.md +0 -19
  375. package/skills/latex-table-generator/package.json +0 -29
  376. package/skills/latex-table-generator/src/index.ts +0 -113
  377. package/skills/latex-table-generator/tsconfig.json +0 -10
  378. package/skills/logo-design/SKILL.md +0 -94
  379. package/skills/logo-design/package.json +0 -35
  380. package/skills/logo-design/src/cli.ts +0 -132
  381. package/skills/logo-design/src/constants.ts +0 -5
  382. package/skills/logo-design/src/docs.ts +0 -102
  383. package/skills/logo-design/src/geometry.ts +0 -324
  384. package/skills/logo-design/src/index.ts +0 -212
  385. package/skills/logo-design/src/palette.ts +0 -258
  386. package/skills/logo-design/src/types.ts +0 -50
  387. package/skills/logo-design/tsconfig.json +0 -17
  388. package/skills/lorem-generator/CLAUDE.md +0 -19
  389. package/skills/lorem-generator/package.json +0 -29
  390. package/skills/lorem-generator/src/index.ts +0 -59
  391. package/skills/lorem-generator/tsconfig.json +0 -10
  392. package/skills/managemcp/CLAUDE.md +0 -14
  393. package/skills/managemcp/README.md +0 -24
  394. package/skills/managemcp/package.json +0 -16
  395. package/skills/managemcp/src/index.ts +0 -3
  396. package/skills/managemcp/tsconfig.json +0 -27
  397. package/skills/markdown-validator/CLAUDE.md +0 -19
  398. package/skills/markdown-validator/package.json +0 -29
  399. package/skills/markdown-validator/src/index.ts +0 -92
  400. package/skills/markdown-validator/tsconfig.json +0 -10
  401. package/skills/market-research-report/SKILL.md +0 -51
  402. package/skills/market-research-report/package.json +0 -10
  403. package/skills/meeting-pack/SKILL.md +0 -52
  404. package/skills/meeting-pack/package.json +0 -10
  405. package/skills/merge-pdfs/CLAUDE.md +0 -19
  406. package/skills/merge-pdfs/package.json +0 -31
  407. package/skills/merge-pdfs/src/index.ts +0 -427
  408. package/skills/merge-pdfs/tsconfig.json +0 -10
  409. package/skills/migration-plan-pack/SKILL.md +0 -56
  410. package/skills/migration-plan-pack/package.json +0 -10
  411. package/skills/monitor/SKILL.md +0 -69
  412. package/skills/monitor/package.json +0 -33
  413. package/skills/monitor/src/index.ts +0 -34
  414. package/skills/monitor/tsconfig.json +0 -17
  415. package/skills/one-page-website/SKILL.md +0 -128
  416. package/skills/one-page-website/package.json +0 -34
  417. package/skills/one-page-website/src/design.ts +0 -336
  418. package/skills/one-page-website/src/docs.ts +0 -159
  419. package/skills/one-page-website/src/index.ts +0 -357
  420. package/skills/one-page-website/src/page.ts +0 -340
  421. package/skills/one-page-website/src/styles.ts +0 -508
  422. package/skills/one-page-website/src/types.ts +0 -78
  423. package/skills/one-page-website/tsconfig.json +0 -17
  424. package/skills/pdf-generate/CLAUDE.md +0 -19
  425. package/skills/pdf-generate/SKILL.md +0 -86
  426. package/skills/pdf-generate/package.json +0 -21
  427. package/skills/pdf-generate/src/cli.ts +0 -162
  428. package/skills/pdf-generate/src/html.ts +0 -84
  429. package/skills/pdf-generate/src/index.ts +0 -62
  430. package/skills/pdf-generate/src/markdown.ts +0 -27
  431. package/skills/pdf-generate/src/pdf-writer.ts +0 -78
  432. package/skills/pdf-generate/src/runtime.ts +0 -34
  433. package/skills/pdf-generate/src/security.ts +0 -37
  434. package/skills/pdf-generate/src/templates.ts +0 -311
  435. package/skills/pdf-generate/src/types.ts +0 -28
  436. package/skills/pdf-generate/tsconfig.json +0 -16
  437. package/skills/pdf-to-dataset/SKILL.md +0 -88
  438. package/skills/pdf-to-dataset/package.json +0 -37
  439. package/skills/pdf-to-dataset/src/index.ts +0 -790
  440. package/skills/pdf-to-dataset/tsconfig.json +0 -17
  441. package/skills/pdf-to-markdown/SKILL.md +0 -81
  442. package/skills/pdf-to-markdown/package.json +0 -35
  443. package/skills/pdf-to-markdown/src/index.ts +0 -694
  444. package/skills/pdf-to-markdown/tsconfig.json +0 -17
  445. package/skills/performance-audit-report/SKILL.md +0 -49
  446. package/skills/performance-audit-report/package.json +0 -10
  447. package/skills/pitch-deck/SKILL.md +0 -51
  448. package/skills/pitch-deck/package.json +0 -10
  449. package/skills/product-mockup/SKILL.md +0 -107
  450. package/skills/product-mockup/package.json +0 -32
  451. package/skills/product-mockup/src/cli.ts +0 -150
  452. package/skills/product-mockup/src/design.ts +0 -151
  453. package/skills/product-mockup/src/docs.ts +0 -134
  454. package/skills/product-mockup/src/index.ts +0 -182
  455. package/skills/product-mockup/src/render.ts +0 -407
  456. package/skills/product-mockup/src/types.ts +0 -66
  457. package/skills/product-mockup/tsconfig.json +0 -17
  458. package/skills/proposal-pack/SKILL.md +0 -53
  459. package/skills/proposal-pack/package.json +0 -10
  460. package/skills/read-csv/SKILL.md +0 -62
  461. package/skills/read-csv/package.json +0 -37
  462. package/skills/read-csv/src/index.ts +0 -356
  463. package/skills/read-csv/tsconfig.json +0 -17
  464. package/skills/read-excel/SKILL.md +0 -64
  465. package/skills/read-excel/package.json +0 -36
  466. package/skills/read-excel/src/index.ts +0 -266
  467. package/skills/read-excel/tsconfig.json +0 -17
  468. package/skills/regex-tester/CLAUDE.md +0 -19
  469. package/skills/regex-tester/package.json +0 -27
  470. package/skills/regex-tester/src/index.ts +0 -183
  471. package/skills/regex-tester/tsconfig.json +0 -10
  472. package/skills/repo-onboarding-report/SKILL.md +0 -52
  473. package/skills/repo-onboarding-report/package.json +0 -10
  474. package/skills/scancommitpr/SKILL.md +0 -178
  475. package/skills/scancommitpr/package.json +0 -34
  476. package/skills/scancommitpr/src/index.ts +0 -44
  477. package/skills/scancommitpr/tsconfig.json +0 -13
  478. package/skills/scancommitpush/SKILL.md +0 -174
  479. package/skills/scancommitpush/package.json +0 -32
  480. package/skills/scancommitpush/src/index.ts +0 -44
  481. package/skills/scancommitpush/tsconfig.json +0 -13
  482. package/skills/scientific-figure-check/CLAUDE.md +0 -19
  483. package/skills/scientific-figure-check/package.json +0 -29
  484. package/skills/scientific-figure-check/src/index.ts +0 -83
  485. package/skills/scientific-figure-check/tsconfig.json +0 -10
  486. package/skills/security-audit/CLAUDE.md +0 -19
  487. package/skills/security-audit/package.json +0 -27
  488. package/skills/security-audit/src/index.ts +0 -145
  489. package/skills/security-audit/tsconfig.json +0 -10
  490. package/skills/security-audit-report/SKILL.md +0 -52
  491. package/skills/security-audit-report/package.json +0 -10
  492. package/skills/seo-content-pack/SKILL.md +0 -54
  493. package/skills/seo-content-pack/package.json +0 -10
  494. package/skills/siteanalyze/SKILL.md +0 -25
  495. package/skills/siteanalyze/package.json +0 -27
  496. package/skills/siteanalyze/src/index.ts +0 -592
  497. package/skills/slide-deck-generator/SKILL.md +0 -93
  498. package/skills/slide-deck-generator/package.json +0 -38
  499. package/skills/slide-deck-generator/src/cli.ts +0 -133
  500. package/skills/slide-deck-generator/src/index.ts +0 -148
  501. package/skills/slide-deck-generator/src/model.ts +0 -307
  502. package/skills/slide-deck-generator/src/pptx.ts +0 -143
  503. package/skills/slide-deck-generator/src/render.ts +0 -248
  504. package/skills/slide-deck-generator/src/types.ts +0 -114
  505. package/skills/slide-deck-generator/src/utils.ts +0 -53
  506. package/skills/slide-deck-generator/tsconfig.json +0 -17
  507. package/skills/social-content-calendar/SKILL.md +0 -54
  508. package/skills/social-content-calendar/package.json +0 -10
  509. package/skills/split-pdf/CLAUDE.md +0 -19
  510. package/skills/split-pdf/package.json +0 -30
  511. package/skills/split-pdf/src/index.ts +0 -301
  512. package/skills/split-pdf/tsconfig.json +0 -10
  513. package/skills/statistical-test-selector/CLAUDE.md +0 -19
  514. package/skills/statistical-test-selector/package.json +0 -27
  515. package/skills/statistical-test-selector/src/index.ts +0 -75
  516. package/skills/statistical-test-selector/tsconfig.json +0 -10
  517. package/skills/test-suite-generator/SKILL.md +0 -51
  518. package/skills/test-suite-generator/package.json +0 -10
  519. package/skills/tmux-session/SKILL.md +0 -109
  520. package/skills/tmux-session/package.json +0 -33
  521. package/skills/tmux-session/src/index.ts +0 -34
  522. package/skills/tmux-session/tsconfig.json +0 -17
  523. package/skills/todos-plan/SKILL.md +0 -363
  524. package/skills/todos-plan/agents/openai.yaml +0 -4
  525. package/skills/todos-plan/package.json +0 -9
  526. package/skills/todos-plan/src/index.ts +0 -68
  527. package/skills/tsconfig.base.json +0 -12
  528. package/skills/validate-config/CLAUDE.md +0 -19
  529. package/skills/validate-config/package.json +0 -29
  530. package/skills/validate-config/src/index.ts +0 -56
  531. package/skills/validate-config/tsconfig.json +0 -10
  532. package/skills/video-downloader/CLAUDE.md +0 -19
  533. package/skills/video-downloader/package.json +0 -29
  534. package/skills/video-downloader/src/index.ts +0 -561
  535. package/skills/video-downloader/tsconfig.json +0 -10
  536. package/skills/video-highlight-pack/SKILL.md +0 -54
  537. package/skills/video-highlight-pack/package.json +0 -10
  538. package/skills/watermark/CLAUDE.md +0 -19
  539. package/skills/watermark/package.json +0 -32
  540. package/skills/watermark/src/index.ts +0 -587
  541. 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/