@hasna/skills 0.1.62 → 0.1.64

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