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