@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,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
- }