@hasna/skills 0.1.61 → 0.1.63

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