@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,538 +0,0 @@
1
- import { escapeHtml, sanitizeUrl } from "./security";
2
- import type { CoverLetterData, ResumeData } from "./types";
3
-
4
- export function generateResumeHTML(data: ResumeData): string {
5
- const templateStyles = getTemplateStyles(data.template);
6
- const layoutStyles = getLayoutStyles(data.layout);
7
- const fontFamily = getFontFamily(data.font);
8
- const fontSizes = getFontSizes(data.fontSize);
9
- const spacingValue = getSpacingValue(data.spacing);
10
-
11
- return `<!DOCTYPE html>
12
- <html lang="en">
13
- <head>
14
- <meta charset="UTF-8">
15
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
16
- <title>${escapeHtml(data.name)} - Resume</title>
17
- <style>
18
- * {
19
- margin: 0;
20
- padding: 0;
21
- box-sizing: border-box;
22
- }
23
- body {
24
- font-family: ${fontFamily};
25
- line-height: 1.6;
26
- color: #333;
27
- background: #f5f5f5;
28
- padding: 20px;
29
- }
30
- .resume-container {
31
- max-width: 850px;
32
- margin: 0 auto;
33
- background: white;
34
- ${layoutStyles.container}
35
- ${data.atsFriendly ? "box-shadow: none;" : "box-shadow: 0 0 20px rgba(0,0,0,0.1);"}
36
- }
37
- .resume-header {
38
- ${templateStyles.header}
39
- padding: ${spacingValue * 1.5}px;
40
- ${!data.atsFriendly ? `border-bottom: 3px solid ${data.color};` : ""}
41
- text-align: ${layoutStyles.headerAlign};
42
- }
43
- ${data.includePhoto && data.photo ? `
44
- .profile-photo {
45
- width: 120px;
46
- height: 120px;
47
- border-radius: ${data.template === "classic" ? "0" : "50%"};
48
- object-fit: cover;
49
- margin: 0 auto 20px;
50
- ${!data.atsFriendly ? `border: 3px solid ${data.color};` : ""}
51
- }
52
- ` : ""}
53
- .name {
54
- font-size: ${fontSizes.name};
55
- font-weight: 700;
56
- color: ${data.atsFriendly ? "#333" : data.color};
57
- margin-bottom: 10px;
58
- }
59
- .title {
60
- font-size: ${fontSizes.title};
61
- color: #666;
62
- margin-bottom: 15px;
63
- font-weight: 400;
64
- }
65
- .contact-info {
66
- display: flex;
67
- ${layoutStyles.contactLayout}
68
- gap: 15px;
69
- font-size: ${fontSizes.contact};
70
- color: #666;
71
- margin-top: 10px;
72
- }
73
- .contact-item {
74
- display: inline-flex;
75
- align-items: center;
76
- gap: 5px;
77
- }
78
- .contact-item a {
79
- color: ${data.color};
80
- text-decoration: none;
81
- }
82
- .resume-body {
83
- ${layoutStyles.body}
84
- padding: ${spacingValue}px;
85
- }
86
- .section {
87
- margin-bottom: ${spacingValue * 1.5}px;
88
- }
89
- .section-title {
90
- font-size: ${fontSizes.sectionTitle};
91
- font-weight: 700;
92
- color: ${data.atsFriendly ? "#333" : data.color};
93
- margin-bottom: ${spacingValue * 0.5}px;
94
- ${!data.atsFriendly ? `border-bottom: 2px solid ${data.color}; padding-bottom: 5px;` : ""}
95
- text-transform: uppercase;
96
- letter-spacing: 1px;
97
- }
98
- .summary-text {
99
- font-size: ${fontSizes.body};
100
- line-height: 1.8;
101
- color: #555;
102
- }
103
- .entry {
104
- margin-bottom: ${spacingValue}px;
105
- }
106
- .entry-header {
107
- display: flex;
108
- justify-content: space-between;
109
- align-items: baseline;
110
- margin-bottom: 5px;
111
- flex-wrap: wrap;
112
- }
113
- .entry-title {
114
- font-size: ${fontSizes.entryTitle};
115
- font-weight: 600;
116
- color: #333;
117
- }
118
- .entry-subtitle {
119
- font-size: ${fontSizes.body};
120
- color: ${data.color};
121
- font-weight: 500;
122
- }
123
- .entry-dates {
124
- font-size: ${fontSizes.small};
125
- color: #888;
126
- font-style: italic;
127
- }
128
- .entry-description {
129
- font-size: ${fontSizes.body};
130
- color: #555;
131
- line-height: 1.7;
132
- margin-top: 5px;
133
- }
134
- .skills-grid {
135
- display: grid;
136
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
137
- gap: 15px;
138
- }
139
- .skill-item {
140
- display: flex;
141
- flex-direction: column;
142
- gap: 5px;
143
- }
144
- .skill-name {
145
- font-size: ${fontSizes.body};
146
- font-weight: 500;
147
- color: #333;
148
- }
149
- .skill-level {
150
- display: flex;
151
- gap: 3px;
152
- }
153
- .skill-dot {
154
- width: 12px;
155
- height: 12px;
156
- border-radius: 50%;
157
- background: #e5e5e5;
158
- }
159
- .skill-dot.filled {
160
- background: ${data.color};
161
- }
162
- .projects-list, .certs-list, .languages-list {
163
- display: grid;
164
- gap: ${spacingValue * 0.8}px;
165
- }
166
- .project-item, .cert-item, .language-item {
167
- display: flex;
168
- flex-direction: column;
169
- gap: 3px;
170
- }
171
- .item-name {
172
- font-size: ${fontSizes.body};
173
- font-weight: 600;
174
- color: #333;
175
- }
176
- .item-link {
177
- color: ${data.color};
178
- text-decoration: none;
179
- font-size: ${fontSizes.small};
180
- }
181
- .item-description {
182
- font-size: ${fontSizes.body};
183
- color: #555;
184
- }
185
- ${layoutStyles.sidebar ? `
186
- .sidebar {
187
- ${layoutStyles.sidebar}
188
- padding: ${spacingValue}px;
189
- background: #f8f9fa;
190
- }
191
- .main-content {
192
- flex: 1;
193
- padding: ${spacingValue}px;
194
- }
195
- ` : ""}
196
- @media print {
197
- body {
198
- background: white;
199
- padding: 0;
200
- }
201
- .resume-container {
202
- box-shadow: none;
203
- max-width: 100%;
204
- }
205
- }
206
- </style>
207
- </head>
208
- <body>
209
- <div class="resume-container">
210
- <div class="resume-header">
211
- ${data.includePhoto && data.photo ? `<img src="${sanitizeUrl(data.photo)}" alt="${escapeHtml(data.name)}" class="profile-photo">` : ""}
212
- <h1 class="name">${escapeHtml(data.name)}</h1>
213
- ${data.title ? `<div class="title">${escapeHtml(data.title)}</div>` : ""}
214
- <div class="contact-info">
215
- ${data.email ? `<span class="contact-item">✉ <a href="mailto:${escapeHtml(data.email)}">${escapeHtml(data.email)}</a></span>` : ""}
216
- ${data.phone ? `<span class="contact-item">📞 ${escapeHtml(data.phone)}</span>` : ""}
217
- ${data.location ? `<span class="contact-item">📍 ${escapeHtml(data.location)}</span>` : ""}
218
- ${data.website ? `<span class="contact-item">🌐 <a href="${sanitizeUrl(data.website)}">${escapeHtml(data.website)}</a></span>` : ""}
219
- ${data.linkedin ? `<span class="contact-item">💼 <a href="${sanitizeUrl(data.linkedin)}">LinkedIn</a></span>` : ""}
220
- ${data.github ? `<span class="contact-item">💻 <a href="${sanitizeUrl(data.github)}">GitHub</a></span>` : ""}
221
- </div>
222
- </div>
223
-
224
- <div class="resume-body">
225
- ${data.summary ? `
226
- <div class="section">
227
- <h2 class="section-title">Professional Summary</h2>
228
- <p class="summary-text">${escapeHtml(data.summary)}</p>
229
- </div>
230
- ` : ""}
231
-
232
- ${data.experience.length > 0 ? `
233
- <div class="section">
234
- <h2 class="section-title">Experience</h2>
235
- ${data.experience.map(exp => `
236
- <div class="entry">
237
- <div class="entry-header">
238
- <div>
239
- <div class="entry-title">${escapeHtml(exp.title)}</div>
240
- <div class="entry-subtitle">${escapeHtml(exp.company)}</div>
241
- </div>
242
- <div class="entry-dates">${escapeHtml(exp.dates)}</div>
243
- </div>
244
- <div class="entry-description">${escapeHtml(exp.description)}</div>
245
- </div>
246
- `).join("")}
247
- </div>
248
- ` : ""}
249
-
250
- ${data.education.length > 0 ? `
251
- <div class="section">
252
- <h2 class="section-title">Education</h2>
253
- ${data.education.map(edu => `
254
- <div class="entry">
255
- <div class="entry-header">
256
- <div>
257
- <div class="entry-title">${escapeHtml(edu.degree)}</div>
258
- <div class="entry-subtitle">${escapeHtml(edu.school)}</div>
259
- </div>
260
- <div class="entry-dates">${escapeHtml(edu.dates)}</div>
261
- </div>
262
- ${edu.details ? `<div class="entry-description">${escapeHtml(edu.details)}</div>` : ""}
263
- </div>
264
- `).join("")}
265
- </div>
266
- ` : ""}
267
-
268
- ${data.skills.length > 0 ? `
269
- <div class="section">
270
- <h2 class="section-title">Skills</h2>
271
- <div class="skills-grid">
272
- ${data.skills.map(skill => `
273
- <div class="skill-item">
274
- <div class="skill-name">${escapeHtml(skill.name)}</div>
275
- <div class="skill-level">
276
- ${Array.from({ length: 5 }, (_, i) => `
277
- <div class="skill-dot ${i < skill.level ? "filled" : ""}"></div>
278
- `).join("")}
279
- </div>
280
- </div>
281
- `).join("")}
282
- </div>
283
- </div>
284
- ` : ""}
285
-
286
- ${data.projects.length > 0 ? `
287
- <div class="section">
288
- <h2 class="section-title">Projects</h2>
289
- <div class="projects-list">
290
- ${data.projects.map(project => `
291
- <div class="project-item">
292
- <div class="item-name">${escapeHtml(project.name)}</div>
293
- ${project.url ? `<a href="${sanitizeUrl(project.url)}" class="item-link">${escapeHtml(project.url)}</a>` : ""}
294
- <div class="item-description">${escapeHtml(project.description)}</div>
295
- </div>
296
- `).join("")}
297
- </div>
298
- </div>
299
- ` : ""}
300
-
301
- ${data.certifications.length > 0 ? `
302
- <div class="section">
303
- <h2 class="section-title">Certifications</h2>
304
- <div class="certs-list">
305
- ${data.certifications.map(cert => `
306
- <div class="cert-item">
307
- <div class="item-name">${escapeHtml(cert.name)}</div>
308
- <div class="item-description">${escapeHtml(cert.year)}${cert.issuer ? ` • ${escapeHtml(cert.issuer)}` : ""}</div>
309
- </div>
310
- `).join("")}
311
- </div>
312
- </div>
313
- ` : ""}
314
-
315
- ${data.languages.length > 0 ? `
316
- <div class="section">
317
- <h2 class="section-title">Languages</h2>
318
- <div class="languages-list">
319
- ${data.languages.map(lang => `
320
- <div class="language-item">
321
- <div class="item-name">${escapeHtml(lang.name)}</div>
322
- <div class="item-description">${escapeHtml(lang.proficiency)}</div>
323
- </div>
324
- `).join("")}
325
- </div>
326
- </div>
327
- ` : ""}
328
- </div>
329
- </div>
330
- </body>
331
- </html>`;
332
- }
333
-
334
- // Generate cover letter HTML
335
- export function generateCoverLetterHTML(data: CoverLetterData): string {
336
- const today = new Date().toLocaleDateString("en-US", {
337
- year: "numeric",
338
- month: "long",
339
- day: "numeric",
340
- });
341
-
342
- return `<!DOCTYPE html>
343
- <html lang="en">
344
- <head>
345
- <meta charset="UTF-8">
346
- <title>Cover Letter - ${escapeHtml(data.name)}</title>
347
- <style>
348
- * { margin: 0; padding: 0; box-sizing: border-box; }
349
- body {
350
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
351
- line-height: 1.8;
352
- color: #333;
353
- background: #f5f5f5;
354
- padding: 40px 20px;
355
- }
356
- .letter-container {
357
- max-width: 650px;
358
- margin: 0 auto;
359
- background: white;
360
- padding: 60px;
361
- box-shadow: 0 0 20px rgba(0,0,0,0.1);
362
- }
363
- .sender-info { margin-bottom: 40px; }
364
- .sender-name { font-size: 18px; font-weight: 600; margin-bottom: 5px; }
365
- .sender-details { font-size: 14px; color: #666; }
366
- .date { margin-bottom: 30px; font-size: 14px; color: #666; }
367
- .recipient-info { margin-bottom: 30px; }
368
- .recipient-name { font-size: 16px; font-weight: 600; margin-bottom: 5px; }
369
- .letter-body { font-size: 15px; line-height: 1.8; white-space: pre-wrap; margin-bottom: 30px; }
370
- .closing { font-size: 15px; }
371
- @media print {
372
- body { background: white; padding: 0; }
373
- .letter-container { box-shadow: none; padding: 40px; }
374
- }
375
- </style>
376
- </head>
377
- <body>
378
- <div class="letter-container">
379
- <div class="sender-info">
380
- <div class="sender-name">${escapeHtml(data.name)}</div>
381
- <div class="sender-details">
382
- ${escapeHtml(data.email) || ""} ${data.phone ? `• ${escapeHtml(data.phone)}` : ""} ${data.location ? `• ${escapeHtml(data.location)}` : ""}
383
- </div>
384
- </div>
385
- <div class="date">${today}</div>
386
- <div class="recipient-info">
387
- <div class="recipient-name">Hiring Manager</div>
388
- <div>${escapeHtml(data.position)}</div>
389
- <div>${escapeHtml(data.company)}</div>
390
- </div>
391
- <div class="letter-body">${escapeHtml(data.content)}</div>
392
- <div class="closing">
393
- <p>Sincerely,</p>
394
- <p style="margin-top: 20px;">${escapeHtml(data.name)}</p>
395
- </div>
396
- </div>
397
- </body>
398
- </html>`;
399
- }
400
-
401
- // Generate markdown resume
402
- export function generateMarkdown(data: ResumeData): string {
403
- let md = `# ${data.name}\n\n`;
404
-
405
- if (data.title) md += `**${data.title}**\n\n`;
406
-
407
- const contact = [
408
- data.email && `📧 ${data.email}`,
409
- data.phone && `📞 ${data.phone}`,
410
- data.location && `📍 ${data.location}`,
411
- data.website && `🌐 ${data.website}`,
412
- data.linkedin && `💼 ${data.linkedin}`,
413
- data.github && `💻 ${data.github}`,
414
- ].filter(Boolean);
415
-
416
- if (contact.length > 0) md += `${contact.join(" • ")}\n\n`;
417
-
418
- if (data.summary) md += `## Professional Summary\n\n${data.summary}\n\n`;
419
-
420
- if (data.experience.length > 0) {
421
- md += `## Experience\n\n`;
422
- data.experience.forEach((exp) => {
423
- md += `### ${exp.title}\n**${exp.company}** • ${exp.dates}\n\n${exp.description}\n\n`;
424
- });
425
- }
426
-
427
- if (data.education.length > 0) {
428
- md += `## Education\n\n`;
429
- data.education.forEach((edu) => {
430
- md += `### ${edu.degree}\n**${edu.school}** • ${edu.dates}\n`;
431
- if (edu.details) md += `\n${edu.details}\n`;
432
- md += `\n`;
433
- });
434
- }
435
-
436
- if (data.skills.length > 0) {
437
- md += `## Skills\n\n`;
438
- data.skills.forEach((skill) => {
439
- const level = "●".repeat(skill.level) + "○".repeat(5 - skill.level);
440
- md += `- **${skill.name}**: ${level}\n`;
441
- });
442
- md += `\n`;
443
- }
444
-
445
- if (data.projects.length > 0) {
446
- md += `## Projects\n\n`;
447
- data.projects.forEach((project) => {
448
- md += `### ${project.name}\n${project.description}`;
449
- if (project.url) md += `\n\n${project.url}`;
450
- md += `\n\n`;
451
- });
452
- }
453
-
454
- if (data.certifications.length > 0) {
455
- md += `## Certifications\n\n`;
456
- data.certifications.forEach((cert) => {
457
- md += `- **${cert.name}** (${cert.year})`;
458
- if (cert.issuer) md += ` - ${cert.issuer}`;
459
- md += `\n`;
460
- });
461
- md += `\n`;
462
- }
463
-
464
- if (data.languages.length > 0) {
465
- md += `## Languages\n\n`;
466
- data.languages.forEach((lang) => {
467
- md += `- **${lang.name}**: ${lang.proficiency}\n`;
468
- });
469
- }
470
-
471
- return md;
472
- }
473
-
474
- // Helper functions for styles
475
- function getTemplateStyles(template: string) {
476
- const templates: Record<string, any> = {
477
- modern: { header: "background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;" },
478
- classic: { header: "background: #2c3e50; color: white;" },
479
- minimal: { header: "background: white; color: #333; border-bottom: 1px solid #e5e5e5;" },
480
- creative: { header: "background: linear-gradient(45deg, #ff6b6b, #feca57); color: white;" },
481
- executive: { header: "background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); color: white;" },
482
- technical: { header: "background: #1a1a1a; color: #00ff00; font-family: 'Courier New', monospace;" },
483
- };
484
- return templates[template] || templates.modern;
485
- }
486
-
487
- function getLayoutStyles(layout: string) {
488
- const layouts: Record<string, any> = {
489
- "single-column": {
490
- container: "padding: 40px 60px;",
491
- headerAlign: "center",
492
- contactLayout: "flex-wrap: wrap; justify-content: center;",
493
- body: "",
494
- },
495
- "two-column": {
496
- container: "display: grid; grid-template-columns: 250px 1fr;",
497
- headerAlign: "left",
498
- contactLayout: "flex-direction: column; align-items: flex-start;",
499
- body: "grid-column: 2;",
500
- sidebar: "grid-column: 1; grid-row: 1 / span 2;",
501
- },
502
- sidebar: {
503
- container: "display: flex;",
504
- headerAlign: "left",
505
- contactLayout: "flex-direction: column;",
506
- body: "flex: 1;",
507
- sidebar: "width: 200px; background: #f8f9fa;",
508
- },
509
- };
510
- return layouts[layout] || layouts["single-column"];
511
- }
512
-
513
- function getFontFamily(font: string): string {
514
- const fonts: Record<string, string> = {
515
- inter: "'Inter', -apple-system, BlinkMacSystemFont, sans-serif",
516
- roboto: "'Roboto', sans-serif",
517
- lato: "'Lato', sans-serif",
518
- "open-sans": "'Open Sans', sans-serif",
519
- poppins: "'Poppins', sans-serif",
520
- };
521
- return fonts[font] || fonts.inter;
522
- }
523
-
524
- function getFontSizes(size: string) {
525
- const sizes: Record<string, any> = {
526
- small: { name: "28px", title: "16px", contact: "12px", sectionTitle: "16px", entryTitle: "15px", body: "13px", small: "11px" },
527
- medium: { name: "32px", title: "18px", contact: "14px", sectionTitle: "18px", entryTitle: "16px", body: "14px", small: "12px" },
528
- large: { name: "36px", title: "20px", contact: "15px", sectionTitle: "20px", entryTitle: "17px", body: "15px", small: "13px" },
529
- };
530
- return sizes[size] || sizes.medium;
531
- }
532
-
533
- function getSpacingValue(spacing: string): number {
534
- const values: Record<string, number> = { compact: 15, normal: 25, spacious: 35 };
535
- return values[spacing] || values.normal;
536
- }
537
-
538
- // Main function
@@ -1,39 +0,0 @@
1
- export function escapeHtml(str: string | undefined | null): string {
2
- if (str === undefined || str === null) return "";
3
- return String(str)
4
- .replace(/&/g, "&amp;")
5
- .replace(/</g, "&lt;")
6
- .replace(/>/g, "&gt;")
7
- .replace(/"/g, "&quot;")
8
- .replace(/'/g, "&#x27;");
9
- }
10
-
11
- /**
12
- * Sanitize a URL to prevent javascript: and data: URL injection
13
- * Only allows http:, https:, relative paths, and protocol-relative URLs
14
- */
15
- export function sanitizeUrl(url: string | undefined | null): string {
16
- if (!url) return "";
17
- const trimmed = url.trim();
18
- const lowerUrl = trimmed.toLowerCase();
19
- // Block dangerous protocols
20
- if (
21
- lowerUrl.startsWith("javascript:") ||
22
- lowerUrl.startsWith("data:") ||
23
- lowerUrl.startsWith("vbscript:")
24
- ) {
25
- return "";
26
- }
27
- // Allow safe protocols and relative URLs
28
- if (
29
- lowerUrl.startsWith("http://") ||
30
- lowerUrl.startsWith("https://") ||
31
- lowerUrl.startsWith("mailto:") ||
32
- lowerUrl.startsWith("tel:") ||
33
- lowerUrl.startsWith("/") ||
34
- !lowerUrl.includes(":")
35
- ) {
36
- return escapeHtml(trimmed);
37
- }
38
- return "";
39
- }
@@ -1,86 +0,0 @@
1
- export interface Experience {
2
- title: string;
3
- company: string;
4
- dates: string;
5
- description: string;
6
- }
7
-
8
- export interface Education {
9
- degree: string;
10
- school: string;
11
- dates: string;
12
- details?: string;
13
- }
14
-
15
- export interface Skill {
16
- name: string;
17
- level: number;
18
- }
19
-
20
- export interface Project {
21
- name: string;
22
- description: string;
23
- url?: string;
24
- }
25
-
26
- export interface Certification {
27
- name: string;
28
- year: string;
29
- issuer?: string;
30
- }
31
-
32
- export interface Language {
33
- name: string;
34
- proficiency: string;
35
- }
36
-
37
- export interface ResumeData {
38
- // Contact
39
- name: string;
40
- email?: string;
41
- phone?: string;
42
- location?: string;
43
- website?: string;
44
- linkedin?: string;
45
- github?: string;
46
- portfolio?: string;
47
- twitter?: string;
48
- photo?: string;
49
-
50
- // Professional
51
- title?: string;
52
- summary?: string;
53
-
54
- // Sections
55
- experience: Experience[];
56
- education: Education[];
57
- skills: Skill[];
58
- projects: Project[];
59
- certifications: Certification[];
60
- languages: Language[];
61
-
62
- // Design
63
- template: string;
64
- layout: string;
65
- color: string;
66
- font: string;
67
- fontSize: string;
68
- spacing: string;
69
- atsFriendly: boolean;
70
- includePhoto: boolean;
71
- pageNumbers: boolean;
72
- }
73
-
74
- export interface CoverLetterData {
75
- name: string;
76
- email?: string;
77
- phone?: string;
78
- location?: string;
79
- company: string;
80
- position: string;
81
- content: string;
82
- template: string;
83
- date: string;
84
- }
85
-
86
- // Parse command line arguments
@@ -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
- # generate-sitemap
2
-
3
- Generate Sitemap skill.
4
-
5
- ## Tech Stack
6
-
7
- - Runtime: Bun
8
- - Language: TypeScript
9
- - CLI: Commander.js
10
-
11
- ## CLI
12
-
13
- ```bash
14
- generate-sitemap run
15
- ```
16
-
17
- ## Data Directory
18
-
19
- ~/.skill/generate-sitemap/