@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,407 +0,0 @@
1
- import { FONT_STACK, MONO_STACK, xmlEscape } from "./design.js";
2
- import type { SceneInput, SceneOutput } from "./types.js";
3
-
4
- export function round(value: number): number {
5
- return Math.round(value * 100) / 100;
6
- }
7
-
8
- function rect(
9
- x: number,
10
- y: number,
11
- width: number,
12
- height: number,
13
- fill: string,
14
- radius = 0,
15
- extra = "",
16
- ): string {
17
- return `<rect x="${round(x)}" y="${round(y)}" width="${round(width)}" height="${round(height)}" rx="${round(
18
- radius,
19
- )}" fill="${fill}"${extra ? ` ${extra}` : ""}/>`;
20
- }
21
-
22
- function text(
23
- x: number,
24
- y: number,
25
- content: string,
26
- fill: string,
27
- size: number,
28
- weight = 500,
29
- anchor: "start" | "middle" | "end" = "start",
30
- stack = FONT_STACK,
31
- ): string {
32
- return `<text x="${round(x)}" y="${round(y)}" font-family="${stack}" font-size="${size}" font-weight="${weight}" fill="${fill}" text-anchor="${anchor}" dominant-baseline="central">${xmlEscape(
33
- content,
34
- )}</text>`;
35
- }
36
-
37
- function placeholderLines(
38
- x: number,
39
- y: number,
40
- width: number,
41
- count: number,
42
- fill: string,
43
- rng: () => number,
44
- lineHeight = 14,
45
- gap = 10,
46
- ): string {
47
- const parts: string[] = [];
48
- for (let i = 0; i < count; i += 1) {
49
- const w = width * (0.55 + rng() * 0.45);
50
- parts.push(rect(x, y + i * (lineHeight + gap), w, lineHeight, fill, lineHeight / 2, 'fill-opacity="0.55"'));
51
- }
52
- return parts.join("\n ");
53
- }
54
-
55
- function truncate(value: string, max: number): string {
56
- return value.length <= max ? value : `${value.slice(0, Math.max(0, max - 1)).trimEnd()}…`;
57
- }
58
-
59
- /* ------------------------------------------------------------------ */
60
- /* scene renderers */
61
- /* ------------------------------------------------------------------ */
62
-
63
- export function renderBrowser(input: SceneInput): SceneOutput {
64
- const { tokens, rng } = input;
65
- const width = 1280;
66
- const height = 800;
67
- const pad = 48;
68
- const winX = pad;
69
- const winY = pad;
70
- const winW = width - pad * 2;
71
- const winH = height - pad * 2;
72
- const chromeH = 88;
73
- const tabH = 38;
74
- const r = tokens.radius + 4;
75
-
76
- const tabs = ["Overview", truncate(input.product, 18), "Docs"];
77
- let tabX = winX + 76;
78
- const tabParts: string[] = [];
79
- tabs.forEach((label, i) => {
80
- const w = 34 + label.length * 8.2;
81
- const active = i === 1;
82
- tabParts.push(
83
- rect(tabX, winY + 10, w, tabH, active ? tokens.surface : tokens.surfaceAlt, 8),
84
- text(tabX + 16, winY + 10 + tabH / 2, label, active ? tokens.text : tokens.muted, 13, active ? 600 : 500),
85
- );
86
- tabX += w + 8;
87
- });
88
-
89
- const contentY = winY + chromeH;
90
- const contentH = winH - chromeH;
91
- const heroPad = 56;
92
-
93
- const body = ` <rect id="canvas" width="${width}" height="${height}" fill="${tokens.background}"/>
94
- <g id="window">
95
- ${rect(winX, winY, winW, winH, tokens.surface, r)}
96
- ${rect(winX, winY, winW, winH, "none", r, `stroke="${tokens.border}" stroke-width="1"`)}
97
- </g>
98
- <g id="chrome">
99
- ${rect(winX, winY, winW, chromeH, tokens.surfaceAlt, r)}
100
- ${rect(winX, winY + chromeH - r, winW, r, tokens.surfaceAlt, 0)}
101
- <line x1="${winX}" y1="${contentY}" x2="${winX + winW}" y2="${contentY}" stroke="${tokens.border}" stroke-width="1"/>
102
- <circle cx="${winX + 26}" cy="${winY + 28}" r="6" fill="#FF5F57"/>
103
- <circle cx="${winX + 46}" cy="${winY + 28}" r="6" fill="#FEBC2E"/>
104
- <circle cx="${winX + 66}" cy="${winY + 28}" r="6" fill="#28C840"/>
105
- </g>
106
- <g id="tab-bar">
107
- ${tabParts.join("\n ")}
108
- </g>
109
- <g id="url-pill">
110
- ${rect(winX + 24, winY + 56, winW - 168, 24, tokens.dark ? tokens.background : "#FFFFFF", 12, `stroke="${tokens.border}" stroke-width="1"`)}
111
- <path d="M ${winX + 40} ${winY + 66} a 5 5 0 0 1 10 0 v 4 h -10 z" fill="none" stroke="${tokens.muted}" stroke-width="1.6"/>
112
- ${text(winX + 58, winY + 68, input.url, tokens.muted, 12, 500, "start", MONO_STACK)}
113
- ${rect(winX + winW - 128, winY + 58, 20, 20, tokens.border, 6)}
114
- ${rect(winX + winW - 100, winY + 58, 20, 20, tokens.border, 6)}
115
- <circle cx="${winX + winW - 46}" cy="${winY + 68}" r="11" fill="${tokens.accent}"/>
116
- </g>
117
- <g id="page-content">
118
- ${rect(winX + heroPad, contentY + 56, 120, 26, tokens.accentSoft, 13)}
119
- ${text(winX + heroPad + 60, contentY + 69, "NEW", tokens.accent, 12, 700, "middle")}
120
- ${text(winX + heroPad, contentY + 120, truncate(input.title, 42), tokens.text, 44, 700)}
121
- ${placeholderLines(winX + heroPad, contentY + 168, 520, 3, tokens.muted, rng)}
122
- ${rect(winX + heroPad, contentY + 258, 168, 48, tokens.accent, tokens.radius)}
123
- ${text(winX + heroPad + 84, contentY + 282, "Get started", tokens.dark ? "#0B0D12" : "#FFFFFF", 15, 600, "middle")}
124
- ${rect(winX + heroPad + 188, contentY + 258, 148, 48, "none", tokens.radius, `stroke="${tokens.border}" stroke-width="1.5"`)}
125
- ${text(winX + heroPad + 262, contentY + 282, "See a demo", tokens.text, 15, 600, "middle")}
126
- ${rect(winX + winW - heroPad - 460, contentY + 56, 460, contentH - 112, tokens.surfaceAlt, tokens.radius + 4, `stroke="${tokens.border}" stroke-width="1"`)}
127
- ${rect(winX + winW - heroPad - 424, contentY + 96, 388, 34, tokens.border, 8, 'fill-opacity="0.6"')}
128
- ${[0, 1, 2]
129
- .map((i) =>
130
- rect(
131
- winX + winW - heroPad - 424,
132
- contentY + 154 + i * 78,
133
- 388,
134
- 62,
135
- tokens.surface,
136
- tokens.radius,
137
- `stroke="${tokens.border}" stroke-width="1"`,
138
- ),
139
- )
140
- .join("\n ")}
141
- ${[0, 1, 2]
142
- .map((i) => `<circle cx="${winX + winW - heroPad - 396}" cy="${contentY + 185 + i * 78}" r="14" fill="${tokens.accentSoft}"/>`)
143
- .join("\n ")}
144
- </g>`;
145
-
146
- return {
147
- width,
148
- height,
149
- body,
150
- layers: ["canvas", "window", "chrome", "tab-bar", "url-pill", "page-content"],
151
- notes: "Desktop browser frame at 1280x800 with traffic lights, a three-tab bar, a URL pill, and a two-column marketing page body.",
152
- };
153
- }
154
-
155
- export function renderPhone(input: SceneInput): SceneOutput {
156
- const { tokens, rng } = input;
157
- const width = 720;
158
- const height = 1000;
159
- const bodyW = 360;
160
- const bodyH = 740;
161
- const bodyX = (width - bodyW) / 2;
162
- const bodyY = (height - bodyH) / 2;
163
- const bezel = 12;
164
- const screenX = bodyX + bezel;
165
- const screenY = bodyY + bezel;
166
- const screenW = bodyW - bezel * 2;
167
- const screenH = bodyH - bezel * 2;
168
-
169
- const cards = [0, 1, 2].map((i) =>
170
- [
171
- rect(screenX + 20, screenY + 250 + i * 108, screenW - 40, 92, tokens.surfaceAlt, tokens.radius, `stroke="${tokens.border}" stroke-width="1"`),
172
- `<circle cx="${screenX + 52}" cy="${screenY + 296 + i * 108}" r="18" fill="${tokens.accentSoft}"/>`,
173
- rect(screenX + 84, screenY + 278 + i * 108, 140, 12, tokens.text, 6, 'fill-opacity="0.75"'),
174
- rect(screenX + 84, screenY + 300 + i * 108, 96, 10, tokens.muted, 5, 'fill-opacity="0.6"'),
175
- ].join("\n "),
176
- );
177
-
178
- const body = ` <rect id="canvas" width="${width}" height="${height}" fill="${tokens.background}"/>
179
- <g id="device-body">
180
- ${rect(bodyX, bodyY, bodyW, bodyH, tokens.dark ? "#15171C" : "#1B1D22", 46)}
181
- ${rect(bodyX, bodyY, bodyW, bodyH, "none", 46, 'stroke="#000000" stroke-opacity="0.35" stroke-width="2"')}
182
- ${rect(bodyX + bodyW, bodyY + 190, 3, 74, "#2A2D34", 2)}
183
- ${rect(bodyX - 3, bodyY + 160, 3, 46, "#2A2D34", 2)}
184
- </g>
185
- <g id="screen">
186
- ${rect(screenX, screenY, screenW, screenH, tokens.surface, 36)}
187
- </g>
188
- <g id="status-bar">
189
- ${text(screenX + 26, screenY + 30, "9:41", tokens.text, 13, 700)}
190
- ${rect(screenX + screenW - 74, screenY + 24, 18, 11, tokens.text, 2, 'fill-opacity="0.8"')}
191
- ${rect(screenX + screenW - 50, screenY + 23, 26, 13, tokens.text, 4, 'fill-opacity="0.8"')}
192
- ${rect(screenX + screenW / 2 - 46, screenY + 6, 92, 26, "#0B0B0F", 13)}
193
- </g>
194
- <g id="app-content">
195
- ${text(screenX + 26, screenY + 92, truncate(input.title, 22), tokens.text, 26, 700)}
196
- ${placeholderLines(screenX + 26, screenY + 124, screenW - 80, 2, tokens.muted, rng, 11, 9)}
197
- ${rect(screenX + 26, screenY + 182, screenW - 52, 44, tokens.accent, tokens.radius)}
198
- ${text(screenX + screenW / 2, screenY + 204, "Continue", tokens.dark ? "#0B0D12" : "#FFFFFF", 15, 600, "middle")}
199
- ${cards.join("\n ")}
200
- </g>
201
- <g id="tab-bar">
202
- ${rect(screenX, screenY + screenH - 76, screenW, 76, tokens.surfaceAlt, 0)}
203
- <line x1="${screenX}" y1="${screenY + screenH - 76}" x2="${screenX + screenW}" y2="${screenY + screenH - 76}" stroke="${tokens.border}" stroke-width="1"/>
204
- ${[0, 1, 2, 3]
205
- .map((i) => {
206
- const cx = screenX + screenW * (0.16 + i * 0.226);
207
- const active = i === 0;
208
- return `<circle cx="${round(cx)}" cy="${screenY + screenH - 46}" r="9" fill="${active ? tokens.accent : tokens.muted}" fill-opacity="${active ? 1 : 0.5}"/>`;
209
- })
210
- .join("\n ")}
211
- ${rect(screenX + screenW / 2 - 62, screenY + screenH - 16, 124, 5, tokens.muted, 3)}
212
- </g>`;
213
-
214
- return {
215
- width,
216
- height,
217
- body,
218
- layers: ["canvas", "device-body", "screen", "status-bar", "app-content", "tab-bar"],
219
- notes: "Phone bezel at 720x1000 with a rounded body, side buttons, notch, status bar, app content stack, and a four-item tab bar.",
220
- };
221
- }
222
-
223
- export function renderLaptop(input: SceneInput): SceneOutput {
224
- const { tokens, rng } = input;
225
- const width = 1280;
226
- const height = 840;
227
- const lidW = 960;
228
- const lidH = 600;
229
- const lidX = (width - lidW) / 2;
230
- const lidY = 60;
231
- const bezel = 18;
232
- const screenX = lidX + bezel;
233
- const screenY = lidY + bezel + 10;
234
- const screenW = lidW - bezel * 2;
235
- const screenH = lidH - bezel * 2 - 10;
236
-
237
- const body = ` <rect id="canvas" width="${width}" height="${height}" fill="${tokens.background}"/>
238
- <g id="lid">
239
- ${rect(lidX, lidY, lidW, lidH, tokens.dark ? "#15171C" : "#1B1D22", 18)}
240
- <circle cx="${width / 2}" cy="${lidY + 14}" r="3" fill="#3A3D44"/>
241
- </g>
242
- <g id="screen">
243
- ${rect(screenX, screenY, screenW, screenH, tokens.surface, 6)}
244
- </g>
245
- <g id="app-window">
246
- ${rect(screenX, screenY, screenW, 44, tokens.surfaceAlt, 6)}
247
- <line x1="${screenX}" y1="${screenY + 44}" x2="${screenX + screenW}" y2="${screenY + 44}" stroke="${tokens.border}" stroke-width="1"/>
248
- <circle cx="${screenX + 22}" cy="${screenY + 22}" r="5" fill="#FF5F57"/>
249
- <circle cx="${screenX + 40}" cy="${screenY + 22}" r="5" fill="#FEBC2E"/>
250
- <circle cx="${screenX + 58}" cy="${screenY + 22}" r="5" fill="#28C840"/>
251
- ${text(screenX + screenW / 2, screenY + 22, truncate(input.product, 46), tokens.muted, 13, 500, "middle")}
252
- ${text(screenX + 48, screenY + 116, truncate(input.title, 40), tokens.text, 34, 700)}
253
- ${placeholderLines(screenX + 48, screenY + 158, 420, 3, tokens.muted, rng)}
254
- ${rect(screenX + 48, screenY + 244, 152, 42, tokens.accent, tokens.radius)}
255
- ${text(screenX + 124, screenY + 265, "Start free", tokens.dark ? "#0B0D12" : "#FFFFFF", 14, 600, "middle")}
256
- ${rect(screenX + screenW - 400, screenY + 88, 348, screenH - 152, tokens.surfaceAlt, tokens.radius, `stroke="${tokens.border}" stroke-width="1"`)}
257
- ${[0, 1, 2, 3, 4, 5, 6]
258
- .map((i) => {
259
- const h = 30 + Math.floor(rng() * 130);
260
- const x = screenX + screenW - 368 + i * 44;
261
- const y = screenY + screenH - 120 - h;
262
- return rect(x, y, 26, h, i % 2 === 0 ? tokens.accent : tokens.accentSoft, 6);
263
- })
264
- .join("\n ")}
265
- </g>
266
- <g id="base">
267
- <path d="M ${lidX - 90} ${lidY + lidH} L ${lidX + lidW + 90} ${lidY + lidH} L ${lidX + lidW + 150} ${lidY + lidH + 34} L ${lidX - 150} ${lidY + lidH + 34} Z" fill="${tokens.dark ? "#1D2026" : "#25282E"}"/>
268
- ${rect(width / 2 - 70, lidY + lidH + 4, 140, 6, "#33363D", 3)}
269
- <path d="M ${lidX - 150} ${lidY + lidH + 34} L ${lidX + lidW + 150} ${lidY + lidH + 34} L ${lidX + lidW + 150} ${lidY + lidH + 42} L ${lidX - 150} ${lidY + lidH + 42} Z" fill="${tokens.dark ? "#101216" : "#15171B"}"/>
270
- </g>`;
271
-
272
- return {
273
- width,
274
- height,
275
- body,
276
- layers: ["canvas", "lid", "screen", "app-window", "base"],
277
- notes: "Laptop mockup at 1280x840 with a bezelled lid, camera dot, in-screen app window, bar chart panel, and a tapered base.",
278
- };
279
- }
280
-
281
- export function renderDashboard(input: SceneInput): SceneOutput {
282
- const { tokens, rng } = input;
283
- const width = 1440;
284
- const height = 900;
285
- const sidebarW = 240;
286
- const headerH = 72;
287
- const gutter = 28;
288
- const contentX = sidebarW + gutter;
289
- const contentW = width - sidebarW - gutter * 2;
290
-
291
- const navItems = ["Overview", "Usage", "Customers", "Billing", "Reports", "Settings"];
292
- const nav = navItems
293
- .map((label, i) => {
294
- const y = headerH + 34 + i * 46;
295
- const active = i === 0;
296
- return [
297
- active ? rect(14, y - 4, sidebarW - 28, 38, tokens.accentSoft, tokens.radius) : "",
298
- `<circle cx="38" cy="${y + 15}" r="7" fill="${active ? tokens.accent : tokens.muted}" fill-opacity="${active ? 1 : 0.55}"/>`,
299
- text(58, y + 15, label, active ? tokens.text : tokens.muted, 14, active ? 600 : 500),
300
- ]
301
- .filter(Boolean)
302
- .join("\n ");
303
- })
304
- .join("\n ");
305
-
306
- const kpiSpecs: Array<{ label: string; value: () => string }> = [
307
- { label: "MRR", value: () => `$${(Math.floor(rng() * 800) + 120).toLocaleString("en-US")}k` },
308
- { label: "Active seats", value: () => `${(Math.floor(rng() * 9000) + 400).toLocaleString("en-US")}` },
309
- { label: "Churn", value: () => `${(rng() * 3 + 0.4).toFixed(1)}%` },
310
- { label: "NRR", value: () => `${Math.floor(rng() * 40) + 100}%` },
311
- ];
312
- const kpiW = (contentW - gutter * 3) / 4;
313
- const kpis = kpiSpecs
314
- .map(({ label, value: makeValue }, i) => {
315
- const x = contentX + i * (kpiW + gutter);
316
- const y = headerH + gutter;
317
- const value = makeValue();
318
- const delta = `${rng() > 0.35 ? "+" : "-"}${(rng() * 12).toFixed(1)}%`;
319
- return [
320
- rect(x, y, kpiW, 118, tokens.surface, tokens.radius, `stroke="${tokens.border}" stroke-width="1"`),
321
- text(x + 20, y + 30, label, tokens.muted, 12, 600),
322
- text(x + 20, y + 66, value, tokens.text, 30, 700),
323
- rect(x + 20, y + 90, 64, 20, tokens.accentSoft, 10),
324
- text(x + 52, y + 100, delta, tokens.accent, 11, 600, "middle"),
325
- ].join("\n ");
326
- })
327
- .join("\n ");
328
-
329
- const chartY = headerH + gutter + 118 + gutter;
330
- const chartH = 300;
331
- const chartW = contentW * 0.62;
332
- const bars = Array.from({ length: 12 }, (_, i) => {
333
- const h = 40 + Math.floor(rng() * (chartH - 130));
334
- const barW = (chartW - 96) / 12 - 12;
335
- const x = contentX + 48 + i * ((chartW - 96) / 12);
336
- return rect(x, chartY + chartH - 48 - h, barW, h, i === 8 ? tokens.accent : tokens.accentSoft, 6);
337
- }).join("\n ");
338
-
339
- const linePoints = Array.from({ length: 12 }, (_, i) => {
340
- const x = contentX + chartW + gutter + 40 + i * ((contentW - chartW - gutter - 80) / 11);
341
- const y = chartY + 90 + Math.floor(rng() * 140);
342
- return `${round(x)},${round(y)}`;
343
- }).join(" ");
344
-
345
- const tableY = chartY + chartH + gutter;
346
- const rows = Array.from({ length: 4 }, (_, i) => {
347
- const y = tableY + 66 + i * 44;
348
- return [
349
- `<circle cx="${contentX + 34}" cy="${y}" r="11" fill="${tokens.accentSoft}"/>`,
350
- rect(contentX + 56, y - 6, 150 + Math.floor(rng() * 80), 12, tokens.text, 6, 'fill-opacity="0.72"'),
351
- rect(contentX + contentW * 0.45, y - 6, 90, 12, tokens.muted, 6, 'fill-opacity="0.5"'),
352
- rect(contentX + contentW * 0.66, y - 6, 70, 12, tokens.muted, 6, 'fill-opacity="0.5"'),
353
- rect(contentX + contentW - 96, y - 12, 72, 24, tokens.accentSoft, 12),
354
- ].join("\n ");
355
- }).join("\n ");
356
-
357
- const body = ` <rect id="canvas" width="${width}" height="${height}" fill="${tokens.background}"/>
358
- <g id="sidebar">
359
- ${rect(0, 0, sidebarW, height, tokens.surface, 0)}
360
- <line x1="${sidebarW}" y1="0" x2="${sidebarW}" y2="${height}" stroke="${tokens.border}" stroke-width="1"/>
361
- ${rect(20, 24, 26, 26, tokens.accent, 8)}
362
- ${text(58, 37, truncate(input.product, 16), tokens.text, 15, 700)}
363
- ${nav}
364
- </g>
365
- <g id="header">
366
- ${rect(sidebarW, 0, width - sidebarW, headerH, tokens.surface, 0)}
367
- <line x1="${sidebarW}" y1="${headerH}" x2="${width}" y2="${headerH}" stroke="${tokens.border}" stroke-width="1"/>
368
- ${text(contentX, headerH / 2, truncate(input.title, 44), tokens.text, 20, 700)}
369
- ${rect(width - 300, 20, 180, 32, tokens.surfaceAlt, 16, `stroke="${tokens.border}" stroke-width="1"`)}
370
- ${text(width - 282, 36, "Search", tokens.muted, 12, 500)}
371
- ${rect(width - 104, 20, 32, 32, tokens.accentSoft, 16)}
372
- <circle cx="${width - 44}" cy="36" r="16" fill="${tokens.accent}"/>
373
- </g>
374
- <g id="kpi-row">
375
- ${kpis}
376
- </g>
377
- <g id="chart-bar">
378
- ${rect(contentX, chartY, chartW, chartH, tokens.surface, tokens.radius, `stroke="${tokens.border}" stroke-width="1"`)}
379
- ${text(contentX + 24, chartY + 32, "Revenue by month", tokens.text, 14, 600)}
380
- <line x1="${contentX + 32}" y1="${chartY + chartH - 48}" x2="${contentX + chartW - 32}" y2="${chartY + chartH - 48}" stroke="${tokens.border}" stroke-width="1"/>
381
- ${bars}
382
- </g>
383
- <g id="chart-line">
384
- ${rect(contentX + chartW + gutter, chartY, contentW - chartW - gutter, chartH, tokens.surface, tokens.radius, `stroke="${tokens.border}" stroke-width="1"`)}
385
- ${text(contentX + chartW + gutter + 24, chartY + 32, "Activation trend", tokens.text, 14, 600)}
386
- <polyline points="${linePoints}" fill="none" stroke="${tokens.accent}" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
387
- </g>
388
- <g id="table">
389
- ${rect(contentX, tableY, contentW, height - tableY - gutter, tokens.surface, tokens.radius, `stroke="${tokens.border}" stroke-width="1"`)}
390
- ${text(contentX + 24, tableY + 30, "Recent accounts", tokens.text, 14, 600)}
391
- <line x1="${contentX}" y1="${tableY + 48}" x2="${contentX + contentW}" y2="${tableY + 48}" stroke="${tokens.border}" stroke-width="1"/>
392
- ${rows}
393
- </g>`;
394
-
395
- return {
396
- width,
397
- height,
398
- body,
399
- layers: ["canvas", "sidebar", "header", "kpi-row", "chart-bar", "chart-line", "table"],
400
- notes: "Analytics dashboard at 1440x900 with a six-item sidebar, header search, four KPI cards, a bar chart, a line chart, and a four-row table.",
401
- };
402
- }
403
-
404
- /* ------------------------------------------------------------------ */
405
- /* cli */
406
- /* ------------------------------------------------------------------ */
407
-
@@ -1,66 +0,0 @@
1
- export type Scene = "browser" | "device" | "dashboard";
2
- export type DeviceKind = "auto" | "phone" | "laptop";
3
-
4
- export interface CliOptions {
5
- product?: string;
6
- title?: string;
7
- scene: Scene;
8
- device: DeviceKind;
9
- variants: number;
10
- style: string;
11
- audience: string;
12
- accent?: string;
13
- url: string;
14
- output: string;
15
- json: boolean;
16
- }
17
-
18
- export interface Tokens {
19
- name: string;
20
- background: string;
21
- surface: string;
22
- surfaceAlt: string;
23
- border: string;
24
- text: string;
25
- muted: string;
26
- accent: string;
27
- accentSoft: string;
28
- radius: number;
29
- dark: boolean;
30
- }
31
-
32
- export interface VariantPlan {
33
- id: string;
34
- index: number;
35
- seed: number;
36
- scene: Scene;
37
- device?: "phone" | "laptop";
38
- width: number;
39
- height: number;
40
- file: string;
41
- tokens: Tokens;
42
- layers: string[];
43
- notes: string;
44
- }
45
-
46
- /* ------------------------------------------------------------------ */
47
- /* deterministic randomness */
48
- /* ------------------------------------------------------------------ */
49
-
50
- export interface SceneInput {
51
- title: string;
52
- product: string;
53
- url: string;
54
- tokens: Tokens;
55
- rng: () => number;
56
- index: number;
57
- }
58
-
59
- export interface SceneOutput {
60
- width: number;
61
- height: number;
62
- body: string;
63
- layers: string[];
64
- notes: string;
65
- }
66
-
@@ -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,53 +0,0 @@
1
- ---
2
- name: proposal-pack
3
- description: Generate client proposal packages with proposal, SOW, pricing, timeline, assumptions, cover email, Markdown, and PDF artifacts.
4
- kind: instruction
5
- ---
6
-
7
- # Proposal Pack
8
-
9
- Generate a client-ready proposal package for agencies, consultants, SaaS services, and implementation teams.
10
-
11
- ## Requirements
12
-
13
- None. This is an instruction skill: it is prose an agent follows, so it needs no
14
- credentials, no network access, and no local runtime.
15
-
16
- ## Usage
17
-
18
- Ask an agent for the deliverables below and give it the inputs. Reading this file
19
- IS the invocation; `skills run` refuses instruction skills on purpose.
20
-
21
- ## Inputs
22
-
23
- | Input | Description | Default |
24
- |--------|-------------|---------|
25
- | `project` | Project scope or proposal brief. Positional text also works. | required |
26
- | `client` | Client or account name. | Client |
27
- | `budget` | Budget range or fixed price. | To be confirmed |
28
- | `timeline` | Delivery timeline. | 4-6 weeks |
29
- | `services` | Comma-separated services or workstreams. | discovery, implementation, enablement |
30
- | `tone` | `executive`, `friendly`, or `technical`. | executive |
31
-
32
- ## Deliverables
33
-
34
- - `proposal.md`
35
- - `statement-of-work.md`
36
- - `pricing.csv`
37
- - `timeline.csv`
38
- - `assumptions.md`
39
- - `cover-email.md`
40
- - `manifest.json`
41
-
42
- ## Method
43
-
44
- 1. Open by restating the client's problem in their words. A proposal that starts
45
- with your company loses before it is read.
46
- 2. Scope by outcome, then by deliverable. Make the exclusions explicit — most
47
- disputes come from what was never written down.
48
- 3. Tie pricing to the scope structure so a scope change has an obvious price
49
- consequence.
50
- 4. Build the timeline with client-side dependencies named, since those are the
51
- usual cause of slip.
52
- 5. List assumptions plainly; each one is a risk you are asking the client to accept.
53
- 6. Keep the cover email short: problem, approach, price range, next step.
@@ -1,10 +0,0 @@
1
- {
2
- "name": "proposal-pack",
3
- "version": "0.1.0",
4
- "private": true,
5
- "description": "Generate client proposal packages",
6
- "type": "module",
7
- "skills": {
8
- "kind": "instruction"
9
- }
10
- }
@@ -1,62 +0,0 @@
1
- ---
2
- name: read-csv
3
- description: Parse CSV files into structured JSON with delimiter auto-detection, header handling, common encoding support, and streaming reads for large files.
4
- ---
5
-
6
- # Read CSV
7
-
8
- Parse CSV files from disk and return structured JSON that is easy to inspect, transform, or hand to another tool.
9
-
10
- ## Features
11
-
12
- - Delimiter auto-detection for comma, tab, semicolon, and pipe
13
- - Header detection with `auto`, `true`, and `false` modes
14
- - Common encoding support (`utf8`, `utf16le`, `utf16be`, `latin1`, `win1252`)
15
- - Streaming parser for large files
16
- - Optional row limits and file output
17
-
18
- ## Usage
19
-
20
- ```bash
21
- # Parse a CSV with auto-detected headers and delimiter
22
- read-csv --input ./customers.csv
23
-
24
- # Force tab-delimited parsing and save output
25
- read-csv --input ./report.tsv --delimiter tab --output ./report.json
26
-
27
- # Parse with explicit header handling
28
- read-csv --input ./raw.csv --headers false
29
-
30
- # Preview the first 100 rows only
31
- read-csv --input ./large.csv --limit 100
32
- ```
33
-
34
- ## Options
35
-
36
- | Option | Description | Default |
37
- |--------|-------------|---------|
38
- | `-i, --input <path>` | CSV file to parse | required |
39
- | `-d, --delimiter <value>` | Delimiter (`comma`, `tab`, `semicolon`, `pipe`, or literal character) | auto |
40
- | `-e, --encoding <value>` | Input encoding (`auto`, `utf8`, `utf16le`, `utf16be`, `latin1`, `win1252`) | auto |
41
- | `--headers <mode>` | Header mode: `auto`, `true`, `false` | auto |
42
- | `-l, --limit <n>` | Stop after parsing `n` rows | unlimited |
43
- | `-o, --output <path>` | Save JSON result to a file | stdout |
44
- | `--help` | Show usage | |
45
- | `--version` | Show version | |
46
-
47
- ## Output Shape
48
-
49
- ```json
50
- {
51
- "input": "/absolute/path/to/file.csv",
52
- "encoding": "utf8",
53
- "delimiter": ",",
54
- "hasHeader": true,
55
- "columns": ["id", "email", "plan"],
56
- "rowCount": 2,
57
- "truncated": false,
58
- "rows": [
59
- { "id": "1", "email": "a@example.com", "plan": "pro" }
60
- ]
61
- }
62
- ```
@@ -1,37 +0,0 @@
1
- {
2
- "name": "read-csv",
3
- "version": "0.1.0",
4
- "description": "Parse CSV files into structured JSON with delimiter and encoding detection",
5
- "type": "module",
6
- "main": "src/index.ts",
7
- "bin": {
8
- "read-csv": "src/index.ts"
9
- },
10
- "files": [
11
- "src",
12
- "SKILL.md",
13
- "tsconfig.json"
14
- ],
15
- "publishConfig": {
16
- "access": "restricted"
17
- },
18
- "keywords": [
19
- "csv",
20
- "parser",
21
- "data",
22
- "cli",
23
- "skill"
24
- ],
25
- "scripts": {
26
- "start": "bun run src/index.ts",
27
- "typecheck": "tsc --noEmit"
28
- },
29
- "dependencies": {
30
- "csv-parse": "^5.5.6",
31
- "iconv-lite": "^0.6.3"
32
- },
33
- "devDependencies": {
34
- "@types/bun": "latest",
35
- "typescript": "^5.7.0"
36
- }
37
- }