@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,69 +0,0 @@
1
- ---
2
- name: monitor
3
- description: Interact with the open-monitor MCP — check machine health, list processes, kill memory hogs, run doctor, manage cron jobs, trigger cache cleanup
4
- user_invocable: true
5
- ---
6
-
7
- # monitor
8
-
9
- Use the `monitor_*` MCP tools from `@hasna/monitor` to help the user manage their machines.
10
-
11
- ## Prerequisites check
12
-
13
- If any `monitor_*` tool call fails with "tool not found" or "MCP not connected", tell the user:
14
-
15
- ```text
16
- The open-monitor MCP is not installed. Add it with:
17
- claude mcp add monitor -- monitor-mcp
18
- Then restart Claude Code and try again.
19
- ```
20
-
21
- ## Use cases
22
-
23
- ### Check machine health
24
- **Trigger**: "how is the machine doing?", "machine health", "system status", "is everything ok?"
25
-
26
- 1. Call `monitor_health` (no args, or `machine_id: "local"`)
27
- 2. Call `monitor_snapshot` to get current CPU/memory/disk
28
- 3. Summarize: overall status, any alerts, top resource users
29
-
30
- ### List memory hogs
31
- **Trigger**: "what's eating memory?", "high memory processes", "memory usage", "what's using RAM?"
32
-
33
- 1. Call `monitor_processes`
34
- 2. Show a table: PID, name, memory (MB), CPU%
35
- 3. Offer to kill any if the user wants
36
-
37
- ### Kill a process
38
- **Trigger**: "kill pid 1234", "kill process X", "stop process Y"
39
-
40
- 1. Confirm the process name/PID with the user if ambiguous
41
- 2. Call `monitor_kill` with `pid: <pid>` and `signal: "SIGTERM"`
42
- 3. Report the result; if it failed, offer `SIGKILL`
43
-
44
- ### Run doctor
45
- **Trigger**: "run doctor", "doctor check", "health check", "diagnose"
46
-
47
- 1. Call `monitor_doctor` (optionally with `machine_id`)
48
- 2. Show the full report: status per check, recommended actions
49
- 3. If any checks failed, summarize what to fix
50
-
51
- ### Trigger cache cleanup
52
- **Trigger**: "clean caches", "clear dev caches", "free up disk", "cleanup npm/bun/pip cache"
53
-
54
- 1. Find the `cache-cleaner` cron job: call `monitor_cron_jobs` with `action: "list"`
55
- 2. Run it with `monitor_cron_jobs`
56
- 3. Report what changed
57
-
58
- ### List cron jobs
59
- **Trigger**: "show monitor jobs", "what cron jobs are set up?", "monitor schedule"
60
-
61
- 1. Call `monitor_cron_jobs` with `action: "list"`
62
- 2. Show a table: name, schedule, action type, enabled, last run
63
- 3. Offer to enable/disable or run any job
64
-
65
- ## Output style
66
-
67
- - Use tables for process lists and cron job lists
68
- - Lead with the summary and keep details below it
69
- - Always show the machine ID being queried (default: local)
@@ -1,33 +0,0 @@
1
- {
2
- "name": "monitor",
3
- "version": "0.1.0",
4
- "description": "Instruction-set skill for operating the open-monitor MCP",
5
- "type": "module",
6
- "main": "src/index.ts",
7
- "bin": {
8
- "monitor": "src/index.ts"
9
- },
10
- "files": [
11
- "src",
12
- "SKILL.md",
13
- "tsconfig.json"
14
- ],
15
- "publishConfig": {
16
- "access": "restricted"
17
- },
18
- "keywords": [
19
- "monitor",
20
- "mcp",
21
- "machine",
22
- "ops",
23
- "skill"
24
- ],
25
- "scripts": {
26
- "start": "bun run src/index.ts",
27
- "typecheck": "tsc --noEmit"
28
- },
29
- "devDependencies": {
30
- "@types/bun": "latest",
31
- "typescript": "^5.7.0"
32
- }
33
- }
@@ -1,34 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- const VERSION = "0.1.0";
4
-
5
- function printHelp(): void {
6
- console.log(`monitor - Instruction-set skill
7
-
8
- DESCRIPTION:
9
- Guides an agent through common open-monitor MCP workflows:
10
- - machine health and doctor checks
11
- - process inspection and safe termination
12
- - cron job inspection and execution
13
- - cache cleanup and operational summaries
14
-
15
- USAGE:
16
- skills docs monitor
17
- skills install monitor --for claude
18
- `);
19
- }
20
-
21
- const args = process.argv.slice(2);
22
-
23
- if (args.includes("--version") || args.includes("-v")) {
24
- console.log(VERSION);
25
- process.exit(0);
26
- }
27
-
28
- if (args.includes("--help") || args.includes("-h") || args.length === 0) {
29
- printHelp();
30
- process.exit(0);
31
- }
32
-
33
- console.log("This is an instruction-set skill. Install it for an agent with:");
34
- console.log(" skills install monitor --for claude");
@@ -1,17 +0,0 @@
1
- {
2
- "extends": "../tsconfig.base.json",
3
- "compilerOptions": {
4
- "module": "ESNext",
5
- "outDir": "./dist",
6
- "rootDir": "./src",
7
- "resolveJsonModule": true,
8
- "noEmit": true
9
- },
10
- "include": [
11
- "src/**/*"
12
- ],
13
- "exclude": [
14
- "node_modules",
15
- "dist"
16
- ]
17
- }
@@ -1,128 +0,0 @@
1
- ---
2
- name: one-page-website
3
- description: Generate a deployable static one-page website — semantic responsive HTML with inlined tokenized CSS, progressive-enhancement JavaScript, dark mode, a section map, copy, and deploy notes. No build step and no external requests.
4
- ---
5
-
6
- # One Page Website
7
-
8
- Generate a complete static one-page site: hero, features, proof, pricing, FAQ,
9
- and CTA. The output is plain HTML, CSS, and JavaScript that you can open with
10
- `file://` or drop on any static host. There is no bundler, no framework, no
11
- webfont fetch, and no third-party request of any kind — which also means no
12
- API keys and no network access at generation time.
13
-
14
- ## Requirements
15
-
16
- - Bun (the skill runs as `bun run src/index.ts`).
17
- - No API keys, no network access, no environment variables.
18
- - One runtime dependency: `marked`, used only to parse `--copy` markdown. Run
19
- `bun install` in this skill directory. If it is missing you get
20
- `Missing dependency 'marked'. Run bun install in this skill directory.`
21
-
22
- ## Usage
23
-
24
- ```bash
25
- # the whole page from a name and a headline
26
- skills run one-page-website -- --name "MeterKit" --tagline "Usage billing that finance actually trusts"
27
-
28
- # short page, bold look
29
- skills run one-page-website -- "Relay" --sections hero,features,cta --style bold
30
-
31
- # inject your own copy and lock the brand color
32
- skills run one-page-website -- --name "MeterKit" --copy ./copy.md --accent "#0F7B7B" -o ./out
33
-
34
- # name your own feature cards
35
- skills run one-page-website -- --name "Ledgerly" --features "Double-entry core,Close in a day,Auditor-ready exports"
36
-
37
- # machine-readable summary
38
- skills run one-page-website -- --name "Relay" --json
39
- ```
40
-
41
- Then serve it:
42
-
43
- ```bash
44
- cd out/site && python3 -m http.server 8000
45
- ```
46
-
47
- Run the skill directly from its directory with `bun run src/index.ts --help`.
48
-
49
- ## Options
50
-
51
- | Option | Description | Default |
52
- |--------|-------------|---------|
53
- | `--name <text>` | Brand or product name. A positional string also works. | required |
54
- | `--tagline <text>` | Hero headline. | generated from the name |
55
- | `--sections <list>` | Comma list drawn from `hero,features,proof,pricing,faq,cta`. Unknown names fail with the valid list. `hero` is always included. | all six |
56
- | `--style <text>` | Style direction, matched against the presets below. | `clean` |
57
- | `--copy <file>` | Markdown file whose headings override the generated copy. See below. | none |
58
- | `--goal <text>` | Primary CTA label, also used for the closing heading. | `Book a demo` |
59
- | `--audience <text>` | Who the page is for. Appears in the lead and the testimonial. | `software teams` |
60
- | `--features <list>` | Comma list of feature card titles. | generated |
61
- | `--accent <hex>` | Force the accent color. | from the style preset |
62
- | `--output <dir>`, `-o` | Output directory. | `./one-page-website` |
63
- | `--json` | Print the run summary as JSON on stdout. | off |
64
- | `--help` | Show help and exit 0. | |
65
- | `--version` | Print the version. | |
66
-
67
- ### Style presets
68
-
69
- | Preset | Triggers on | Look |
70
- |--------|-------------|------|
71
- | `clean` (default) | clean, polished, quiet, refined, saas, minimal, crisp | System sans, blue accent, 10px radii |
72
- | `editorial` | editorial, magazine, serif, print, sharp | Serif display face, near-square corners, red accent |
73
- | `bold` | bold, loud, playful, vivid, energetic, startup | Heavy 800-weight headings, large radii, magenta accent |
74
- | `warm` | warm, human, friendly, approachable, amber | Amber accent, soft radii |
75
- | `technical` | technical, developer, mono, terminal, engineering, infra | Monospace display face, tight radii, teal accent |
76
-
77
- Presets set CSS custom properties only. Everything downstream — dark mode, both
78
- button variants, the CTA band — derives from those tokens.
79
-
80
- ## Using `--copy`
81
-
82
- Point `--copy` at a markdown file. The mapping is:
83
-
84
- - An `# H1` becomes the hero headline.
85
- - Any prose before the first `## H2` becomes the hero lead.
86
- - An `## H2` whose slug matches a section id (`features`, `proof`, `pricing`,
87
- `faq`, `cta`, `hero`) has its body rendered into that section as rich text,
88
- above the generated content.
89
- - Any other `## H2` becomes a new section with its own id, nav entry, and
90
- anchor, inserted just before the CTA.
91
-
92
- Markdown lists, tables, code blocks, and blockquotes are all styled by the
93
- `.rich-text` rules. Run once without `--copy`, edit the emitted `copy.md`, then
94
- re-run with `--copy copy.md`.
95
-
96
- ## Outputs
97
-
98
- | File | Contents |
99
- |------|----------|
100
- | `site/index.html` | The page. Stylesheet inlined in `<style>` so a cold visit is one request. |
101
- | `site/styles.css` | The identical stylesheet as a standalone file, if you prefer to link it. |
102
- | `site/script.js` | Mobile nav, single-open FAQ, smooth scroll with focus management, scrollspy, header shadow. |
103
- | `site/README.md` | How to serve it, how to split the CSS, what each token does. |
104
- | `section-map.json` | Every section id, nav label, anchor, and whether a copy override was applied. |
105
- | `copy.md` | The generated copy in markdown, ready to edit and feed back through `--copy`. |
106
- | `deploy-notes.md` | Netlify / Cloudflare / GitHub Pages / S3 commands, cache headers, a CSP, and a pre-ship checklist. |
107
- | `manifest.json` | Every file written, with byte sizes and the run inputs. |
108
-
109
- ## What "progressive enhancement" means here
110
-
111
- - The FAQ is native `<details>`/`<summary>`. It opens and closes with JavaScript
112
- disabled; the script only adds single-open behaviour.
113
- - The mobile menu button ships `hidden` and is revealed by the script. With
114
- JavaScript off, the nav list stays visible instead of being trapped behind a
115
- dead button.
116
- - Anchor clicks move focus to the target element so keyboard and screen reader
117
- users land where sighted users do.
118
- - `scroll-behavior: smooth` is inside a `prefers-reduced-motion: no-preference`
119
- guard, and the script checks the same media query.
120
- - Dark mode is a `@media (prefers-color-scheme: dark)` block that overrides only
121
- color tokens.
122
-
123
- ## Accessibility
124
-
125
- Skip link to `#main`, landmark elements (`header`, `nav[aria-label]`, `main`,
126
- `footer`), exactly one `<h1>`, `aria-labelledby` on every section,
127
- `aria-expanded` on the nav toggle, `aria-current` maintained by the scrollspy,
128
- and a visible `:focus-visible` ring on every interactive element.
@@ -1,34 +0,0 @@
1
- {
2
- "name": "one-page-website",
3
- "version": "0.1.0",
4
- "private": true,
5
- "description": "Generate a deployable static one-page website with semantic HTML, tokenized CSS, progressive-enhancement JS, and deploy notes",
6
- "type": "module",
7
- "main": "src/index.ts",
8
- "bin": {
9
- "one-page-website": "src/index.ts"
10
- },
11
- "files": [
12
- "src",
13
- "SKILL.md",
14
- "tsconfig.json"
15
- ],
16
- "keywords": [
17
- "website",
18
- "landing-page",
19
- "static-site",
20
- "html",
21
- "skill"
22
- ],
23
- "scripts": {
24
- "start": "bun run src/index.ts",
25
- "typecheck": "tsc --noEmit"
26
- },
27
- "dependencies": {
28
- "marked": "^12.0.2"
29
- },
30
- "devDependencies": {
31
- "@types/bun": "latest",
32
- "typescript": "^5.7.0"
33
- }
34
- }
@@ -1,336 +0,0 @@
1
- import type { CliOptions, Content, Tokens } from "./types.js";
2
-
3
- export function fnv1a(input: string): number {
4
- let hash = 0x811c9dc5;
5
- for (let i = 0; i < input.length; i += 1) {
6
- hash ^= input.charCodeAt(i);
7
- hash = Math.imul(hash, 0x01000193) >>> 0;
8
- }
9
- return hash >>> 0;
10
- }
11
-
12
- function mulberry32(seed: number): () => number {
13
- let a = seed >>> 0;
14
- return () => {
15
- a = (a + 0x6d2b79f5) >>> 0;
16
- let t = a;
17
- t = Math.imul(t ^ (t >>> 15), t | 1);
18
- t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
19
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
20
- };
21
- }
22
-
23
- /* ------------------------------------------------------------------ */
24
- /* helpers */
25
- /* ------------------------------------------------------------------ */
26
-
27
- export function escapeHtml(value: string): string {
28
- return value.replace(/[&<>"']/g, (char) => {
29
- switch (char) {
30
- case "&":
31
- return "&amp;";
32
- case "<":
33
- return "&lt;";
34
- case ">":
35
- return "&gt;";
36
- case '"':
37
- return "&quot;";
38
- default:
39
- return "&#39;";
40
- }
41
- });
42
- }
43
-
44
- export function slugify(value: string): string {
45
- return (
46
- value
47
- .toLowerCase()
48
- .normalize("NFKD")
49
- .replace(/[^a-z0-9]+/g, "-")
50
- .replace(/^-+|-+$/g, "") || "section"
51
- );
52
- }
53
-
54
- export function titleCase(value: string): string {
55
- return value
56
- .split(/[-\s]+/)
57
- .filter(Boolean)
58
- .map((word) => word[0].toUpperCase() + word.slice(1))
59
- .join(" ");
60
- }
61
-
62
- function clamp(value: number, min: number, max: number): number {
63
- return Math.min(max, Math.max(min, value));
64
- }
65
-
66
- export function hslToHex(h: number, s: number, l: number): string {
67
- const hue = ((h % 360) + 360) % 360;
68
- const sat = clamp(s, 0, 1);
69
- const lit = clamp(l, 0, 1);
70
- const c = (1 - Math.abs(2 * lit - 1)) * sat;
71
- const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));
72
- const m = lit - c / 2;
73
- let rgb: [number, number, number];
74
- if (hue < 60) rgb = [c, x, 0];
75
- else if (hue < 120) rgb = [x, c, 0];
76
- else if (hue < 180) rgb = [0, c, x];
77
- else if (hue < 240) rgb = [0, x, c];
78
- else if (hue < 300) rgb = [x, 0, c];
79
- else rgb = [c, 0, x];
80
- const toHex = (v: number) =>
81
- Math.round((v + m) * 255)
82
- .toString(16)
83
- .padStart(2, "0")
84
- .toUpperCase();
85
- return `#${toHex(rgb[0])}${toHex(rgb[1])}${toHex(rgb[2])}`;
86
- }
87
-
88
- export function normalizeHex(token: string): string | null {
89
- const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(token.trim());
90
- if (!match) return null;
91
- const body = match[1];
92
- const full =
93
- body.length === 3
94
- ? body
95
- .split("")
96
- .map((c) => c + c)
97
- .join("")
98
- : body;
99
- return `#${full.toUpperCase()}`;
100
- }
101
-
102
- function hexToRgb(hex: string): [number, number, number] {
103
- const value = hex.replace("#", "");
104
- return [
105
- Number.parseInt(value.slice(0, 2), 16),
106
- Number.parseInt(value.slice(2, 4), 16),
107
- Number.parseInt(value.slice(4, 6), 16),
108
- ];
109
- }
110
-
111
- function relativeLuminance(hex: string): number {
112
- const [r, g, b] = hexToRgb(hex).map((channel) => {
113
- const c = channel / 255;
114
- return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
115
- });
116
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
117
- }
118
-
119
- function readableOn(hex: string): string {
120
- return relativeLuminance(hex) > 0.5 ? "#10131A" : "#FFFFFF";
121
- }
122
-
123
- /* ------------------------------------------------------------------ */
124
- /* style presets */
125
- /* ------------------------------------------------------------------ */
126
-
127
- interface StylePreset {
128
- name: string;
129
- hue: number;
130
- keywords: string[];
131
- fontDisplay: string;
132
- fontSans: string;
133
- radius: string;
134
- radiusLg: string;
135
- headingWeight: number;
136
- headingTracking: string;
137
- measure: string;
138
- }
139
-
140
- const SYSTEM_SANS =
141
- "system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif";
142
- const SYSTEM_SERIF = "Georgia, Cambria, 'Times New Roman', 'Noto Serif', serif";
143
- const SYSTEM_MONO =
144
- "ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace";
145
-
146
- const STYLE_PRESETS: StylePreset[] = [
147
- {
148
- name: "editorial",
149
- hue: 8,
150
- keywords: ["editorial", "magazine", "serif", "print", "sharp"],
151
- fontDisplay: SYSTEM_SERIF,
152
- fontSans: SYSTEM_SANS,
153
- radius: "4px",
154
- radiusLg: "8px",
155
- headingWeight: 700,
156
- headingTracking: "-0.01em",
157
- measure: "68ch",
158
- },
159
- {
160
- name: "bold",
161
- hue: 288,
162
- keywords: ["bold", "loud", "playful", "vivid", "energetic", "startup"],
163
- fontDisplay: SYSTEM_SANS,
164
- fontSans: SYSTEM_SANS,
165
- radius: "14px",
166
- radiusLg: "26px",
167
- headingWeight: 800,
168
- headingTracking: "-0.035em",
169
- measure: "60ch",
170
- },
171
- {
172
- name: "warm",
173
- hue: 24,
174
- keywords: ["warm", "human", "friendly", "approachable", "amber"],
175
- fontDisplay: SYSTEM_SANS,
176
- fontSans: SYSTEM_SANS,
177
- radius: "12px",
178
- radiusLg: "20px",
179
- headingWeight: 700,
180
- headingTracking: "-0.02em",
181
- measure: "64ch",
182
- },
183
- {
184
- name: "technical",
185
- hue: 172,
186
- keywords: ["technical", "developer", "mono", "terminal", "engineering", "infra"],
187
- fontDisplay: SYSTEM_MONO,
188
- fontSans: SYSTEM_SANS,
189
- radius: "6px",
190
- radiusLg: "10px",
191
- headingWeight: 700,
192
- headingTracking: "-0.02em",
193
- measure: "66ch",
194
- },
195
- {
196
- name: "clean",
197
- hue: 222,
198
- keywords: ["clean", "polished", "quiet", "refined", "saas", "minimal", "crisp"],
199
- fontDisplay: SYSTEM_SANS,
200
- fontSans: SYSTEM_SANS,
201
- radius: "10px",
202
- radiusLg: "18px",
203
- headingWeight: 700,
204
- headingTracking: "-0.025em",
205
- measure: "64ch",
206
- },
207
- ];
208
-
209
- export function selectPreset(style: string): StylePreset {
210
- const lower = style.toLowerCase();
211
- for (const preset of STYLE_PRESETS) {
212
- if (preset.keywords.some((keyword) => lower.includes(keyword))) return preset;
213
- }
214
- return STYLE_PRESETS[STYLE_PRESETS.length - 1];
215
- }
216
-
217
- export function buildTokens(preset: StylePreset, accentOverride?: string): Tokens {
218
- const accent = accentOverride ?? hslToHex(preset.hue, 0.68, 0.44);
219
- return {
220
- preset: preset.name,
221
- hue: preset.hue,
222
- accent,
223
- accentContrast: readableOn(accent),
224
- fontDisplay: preset.fontDisplay,
225
- fontSans: preset.fontSans,
226
- fontMono: SYSTEM_MONO,
227
- radius: preset.radius,
228
- radiusLg: preset.radiusLg,
229
- headingWeight: preset.headingWeight,
230
- headingTracking: preset.headingTracking,
231
- measure: preset.measure,
232
- };
233
- }
234
-
235
- const FEATURE_BANK: Array<{ title: string; body: string }> = [
236
- { title: "Set up in minutes", body: "Connect your stack, pick the defaults that fit, and go live the same afternoon. No migration project, no professional services line item." },
237
- { title: "Answers, not dashboards", body: "Every view leads with the number that changes a decision, then lets you drill into the rows behind it when you need the detail." },
238
- { title: "Built for the whole team", body: "Roles, shared views, and comment threads mean the people who own the outcome do not have to file a ticket to see the data." },
239
- { title: "Auditable by default", body: "Every change is recorded with who, what, and when. Export the log whenever finance, security, or a customer asks for it." },
240
- { title: "Fits your workflow", body: "A documented API, webhooks, and a CLI so the thing you already built keeps working instead of being replaced." },
241
- { title: "Predictable pricing", body: "Usage is metered transparently and shown before it bills. No surprise overage invoice at the end of the quarter." },
242
- ];
243
-
244
- const FAQ_BANK: Array<{ q: string; a: string }> = [
245
- { q: "How long does setup take?", a: "Most teams are live the same day. The guided setup walks through connecting a data source, inviting your team, and turning on the first workflow." },
246
- { q: "Can we try it before committing?", a: "Yes. Every plan starts with a full-feature trial, no card required. Nothing is deleted if you decide not to continue — you can export everything." },
247
- { q: "How does pricing work?", a: "You pay for the plan tier plus metered usage above the included allowance. Usage is shown live in the app so there is never a surprise invoice." },
248
- { q: "Where is our data stored?", a: "Data is encrypted in transit and at rest. You choose the storage region during setup, and you can request a full export or deletion at any time." },
249
- { q: "Do you integrate with what we already use?", a: "There is a documented REST API, outbound webhooks, and a CLI. If a first-party integration is missing, the API covers the same surface." },
250
- { q: "What does support look like?", a: "Email support on every plan, shared Slack or Teams channel on the higher tiers, and a public status page with incident history." },
251
- ];
252
-
253
- /* ------------------------------------------------------------------ */
254
- /* copy generation */
255
- /* ------------------------------------------------------------------ */
256
-
257
-
258
- export function buildContent(options: CliOptions, seed: number): Content {
259
- const rng = mulberry32(seed);
260
- const name = options.name!.trim();
261
- const audience = options.audience.trim();
262
- const goal = options.goal.trim();
263
- const tagline = (options.tagline ?? `${name} makes the hard part of your workflow routine`).trim();
264
-
265
- const featureTitles = options.features
266
- ? options.features
267
- .split(",")
268
- .map((entry) => entry.trim())
269
- .filter(Boolean)
270
- : [];
271
-
272
- const features =
273
- featureTitles.length > 0
274
- ? featureTitles.slice(0, 6).map((title, index) => ({
275
- title,
276
- body: FEATURE_BANK[index % FEATURE_BANK.length].body,
277
- }))
278
- : FEATURE_BANK.slice(0, 6);
279
-
280
- const stats = [
281
- { value: `${40 + Math.floor(rng() * 50)}%`, label: "less manual work in the first month" },
282
- { value: `${2 + Math.floor(rng() * 8)}x`, label: "faster from question to answer" },
283
- { value: `${90 + Math.floor(rng() * 9)}.${Math.floor(rng() * 9)}%`, label: "uptime over the last twelve months" },
284
- ];
285
-
286
- return {
287
- name,
288
- tagline,
289
- lead: `${name} is built for ${audience}. Replace the spreadsheet-and-screenshot routine with one place that stays current, explains itself, and holds up when someone asks how the number was produced.`,
290
- eyebrow: "New",
291
- goal,
292
- audience,
293
- features,
294
- stats,
295
- quote: {
296
- text: `We replaced three internal tools and a standing meeting with ${name}. The part I did not expect was how quickly the rest of the team stopped asking me for numbers.`,
297
- author: "A. Okafor",
298
- role: `Operations lead, ${audience}`,
299
- },
300
- tiers: [
301
- {
302
- name: "Starter",
303
- price: "$0",
304
- cadence: "forever",
305
- blurb: "For one person proving it works.",
306
- items: ["1 workspace", "Up to 3 sources", "7-day history", "Community support"],
307
- featured: false,
308
- },
309
- {
310
- name: "Team",
311
- price: `$${20 + Math.floor(rng() * 40)}`,
312
- cadence: "per seat / month",
313
- blurb: `For ${audience} running this every week.`,
314
- items: ["Unlimited sources", "Roles and shared views", "12-month history", "API, webhooks, and CLI", "Email support"],
315
- featured: true,
316
- },
317
- {
318
- name: "Scale",
319
- price: "Custom",
320
- cadence: "annual",
321
- blurb: "For the version with an audit requirement.",
322
- items: ["SSO and SCIM", "Region selection", "Audit log export", "99.9% uptime SLA", "Shared Slack channel"],
323
- featured: false,
324
- },
325
- ],
326
- faqs: FAQ_BANK.slice(0, 5),
327
- ctaHeading: `Ready to ${goal.toLowerCase()}?`,
328
- ctaBody: `Start with the free tier, or talk to us about the version with the audit trail. Either way you will know within an afternoon whether ${name} fits.`,
329
- year: new Date().getFullYear(),
330
- };
331
- }
332
-
333
- /* ------------------------------------------------------------------ */
334
- /* markdown copy overrides */
335
- /* ------------------------------------------------------------------ */
336
-