@hasna/skills 0.1.61 → 0.1.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +10 -6
  2. package/bin/index.js +14271 -21602
  3. package/bin/mcp.js +3527 -11449
  4. package/bin/migrate.js +53 -3
  5. package/bin/server.js +5140 -2675
  6. package/bin/worker.js +4542 -2129
  7. package/dist/cli/commands/publish.d.ts +2 -0
  8. package/dist/cli/components/App.d.ts +2 -1
  9. package/dist/cli/components/CategorySelect.d.ts +2 -1
  10. package/dist/cli/components/Header.d.ts +2 -1
  11. package/dist/cli/components/InstallProgress.d.ts +2 -1
  12. package/dist/cli/components/SearchView.d.ts +2 -1
  13. package/dist/cli/components/SkillSelect.d.ts +2 -1
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.js +5094 -13755
  16. package/dist/lib/agent-sync.d.ts +38 -3
  17. package/dist/lib/home-adoption.d.ts +91 -0
  18. package/dist/lib/home-census.d.ts +22 -0
  19. package/dist/lib/home-migration.d.ts +61 -0
  20. package/dist/lib/portable-skills-files.d.ts +21 -1
  21. package/dist/lib/portable-skills-types.d.ts +46 -0
  22. package/dist/lib/pull.d.ts +66 -0
  23. package/dist/lib/remote-client.d.ts +6 -0
  24. package/dist/lib/run-state.d.ts +5 -0
  25. package/dist/lib/skill-bundles.d.ts +54 -0
  26. package/dist/lib/skill-contract.d.ts +35 -0
  27. package/dist/lib/skill-hash.d.ts +77 -0
  28. package/dist/sdk/cancel.d.ts +30 -0
  29. package/dist/sdk/dispatcher.d.ts +40 -0
  30. package/dist/sdk/event-sink.d.ts +2 -0
  31. package/dist/sdk/events.d.ts +79 -0
  32. package/dist/sdk/execution/admission.d.ts +44 -0
  33. package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
  34. package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
  35. package/dist/sdk/execution/image-profile.d.ts +73 -0
  36. package/dist/sdk/execution/index.d.ts +15 -0
  37. package/dist/sdk/execution/receipts.d.ts +44 -0
  38. package/dist/sdk/execution/state-machine.d.ts +38 -0
  39. package/dist/sdk/execution/storage.d.ts +158 -0
  40. package/dist/sdk/execution/types.d.ts +130 -0
  41. package/dist/sdk/executor.d.ts +17 -0
  42. package/dist/sdk/governance-store.d.ts +156 -0
  43. package/dist/sdk/governance.d.ts +92 -0
  44. package/dist/sdk/index.d.ts +26 -0
  45. package/dist/sdk/index.js +48730 -0
  46. package/dist/sdk/offline.d.ts +16 -0
  47. package/dist/sdk/outputs.d.ts +71 -0
  48. package/dist/sdk/registry.d.ts +28 -0
  49. package/dist/sdk/runs.d.ts +229 -0
  50. package/dist/sdk/server.d.ts +35 -0
  51. package/dist/sdk/spend.d.ts +36 -0
  52. package/dist/sdk/storage.d.ts +25 -0
  53. package/dist/server/app.d.ts +42 -0
  54. package/dist/server/artifact-storage.d.ts +102 -0
  55. package/dist/server/auth.d.ts +5 -0
  56. package/dist/server/config.d.ts +40 -0
  57. package/dist/server/database-url.d.ts +42 -0
  58. package/dist/server/handlers.d.ts +3 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/migrate.d.ts +13 -0
  61. package/dist/server/migrations-dir.d.ts +18 -0
  62. package/dist/server/redaction.d.ts +1 -0
  63. package/dist/server/registry.d.ts +5 -0
  64. package/dist/server/rows.d.ts +23 -0
  65. package/dist/server/skills-api.d.ts +68 -0
  66. package/dist/server/sqlite-store.d.ts +114 -0
  67. package/dist/server/store-fixtures.d.ts +25 -0
  68. package/dist/server/store.d.ts +144 -0
  69. package/dist/server/types.d.ts +242 -0
  70. package/dist/server/worker.d.ts +4 -0
  71. package/dist/storage.js +32 -0
  72. package/docs/skill-standard.md +211 -39
  73. package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
  74. package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
  75. package/package.json +11 -8
  76. package/schemas/skill.schema.json +181 -0
  77. package/agent-skills/README.md +0 -41
  78. package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
  79. package/agent-skills/inbox/SKILL.md +0 -25
  80. package/agent-skills/inbox/scripts/inbox +0 -109
  81. package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
  82. package/agent-skills/inbox-monitor/SKILL.md +0 -41
  83. package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
  84. package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
  85. package/agent-skills/merge-pr/SKILL.md +0 -85
  86. package/agent-skills/merge-pr/references/merge-safety.md +0 -82
  87. package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
  88. package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
  89. package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
  90. package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
  91. package/agent-skills/skill-goal-execute/SKILL.md +0 -115
  92. package/agent-skills/skill-login/SKILL.md +0 -109
  93. package/agent-skills/skill-project-create/SKILL.md +0 -91
  94. package/agent-skills/skill-publish/SKILL.md +0 -207
  95. package/skills/_common/auth.ts +0 -45
  96. package/skills/_common/http-client.ts +0 -143
  97. package/skills/_common/index.ts +0 -26
  98. package/skills/_common/install.sh +0 -7
  99. package/skills/_common/installer.ts +0 -72
  100. package/skills/_common/skill-install.ts +0 -37
  101. package/skills/_common/vision.ts +0 -374
  102. package/skills/ad-creative-pack/SKILL.md +0 -55
  103. package/skills/ad-creative-pack/package.json +0 -10
  104. package/skills/analyze-data/CLAUDE.md +0 -16
  105. package/skills/analyze-data/SKILL.md +0 -112
  106. package/skills/analyze-data/package.json +0 -23
  107. package/skills/analyze-data/src/analysis.ts +0 -401
  108. package/skills/analyze-data/src/cli.ts +0 -66
  109. package/skills/analyze-data/src/formatters.ts +0 -235
  110. package/skills/analyze-data/src/index.ts +0 -74
  111. package/skills/analyze-data/src/logger.ts +0 -36
  112. package/skills/analyze-data/src/parsers.ts +0 -57
  113. package/skills/analyze-data/src/stats.ts +0 -151
  114. package/skills/analyze-data/src/types.ts +0 -85
  115. package/skills/analyze-data/tsconfig.json +0 -19
  116. package/skills/api-docs-portal/SKILL.md +0 -84
  117. package/skills/api-docs-portal/package.json +0 -35
  118. package/skills/api-docs-portal/src/index.ts +0 -919
  119. package/skills/api-docs-portal/tsconfig.json +0 -17
  120. package/skills/api-test-suite/CLAUDE.md +0 -19
  121. package/skills/api-test-suite/package.json +0 -27
  122. package/skills/api-test-suite/src/index.ts +0 -381
  123. package/skills/api-test-suite/tsconfig.json +0 -10
  124. package/skills/audio-extract/CLAUDE.md +0 -9
  125. package/skills/audio-extract/SKILL.md +0 -73
  126. package/skills/audio-extract/package.json +0 -23
  127. package/skills/audio-extract/src/index.ts +0 -323
  128. package/skills/audio-extract/tsconfig.json +0 -11
  129. package/skills/bio-sequence-tool/CLAUDE.md +0 -19
  130. package/skills/bio-sequence-tool/package.json +0 -27
  131. package/skills/bio-sequence-tool/src/index.ts +0 -85
  132. package/skills/bio-sequence-tool/tsconfig.json +0 -10
  133. package/skills/blog-article/CLAUDE.md +0 -12
  134. package/skills/blog-article/SKILL.md +0 -55
  135. package/skills/blog-article/package.json +0 -10
  136. package/skills/blog-article/tsconfig.json +0 -10
  137. package/skills/brand-assets/SKILL.md +0 -118
  138. package/skills/brand-assets/package.json +0 -35
  139. package/skills/brand-assets/src/cli.ts +0 -155
  140. package/skills/brand-assets/src/constants.ts +0 -8
  141. package/skills/brand-assets/src/extract.ts +0 -236
  142. package/skills/brand-assets/src/index.ts +0 -668
  143. package/skills/brand-assets/src/types.ts +0 -59
  144. package/skills/brand-assets/tsconfig.json +0 -17
  145. package/skills/brand-kit/SKILL.md +0 -54
  146. package/skills/brand-kit/package.json +0 -10
  147. package/skills/businessactivity/CLAUDE.md +0 -176
  148. package/skills/businessactivity/LICENSE +0 -192
  149. package/skills/businessactivity/README.md +0 -287
  150. package/skills/businessactivity/package.json +0 -25
  151. package/skills/businessactivity/scripts/publish.ts +0 -210
  152. package/skills/businessactivity/src/commands/activity.ts +0 -211
  153. package/skills/businessactivity/src/commands/function.ts +0 -227
  154. package/skills/businessactivity/src/commands/owner.ts +0 -193
  155. package/skills/businessactivity/src/commands/profile.ts +0 -121
  156. package/skills/businessactivity/src/commands/responsibility.ts +0 -264
  157. package/skills/businessactivity/src/commands/team.ts +0 -244
  158. package/skills/businessactivity/src/commands/workflow.ts +0 -359
  159. package/skills/businessactivity/src/index.ts +0 -3
  160. package/skills/businessactivity/src/lib/config.ts +0 -167
  161. package/skills/businessactivity/src/lib/output.ts +0 -76
  162. package/skills/businessactivity/src/lib/paths.ts +0 -79
  163. package/skills/businessactivity/src/lib/storage.ts +0 -95
  164. package/skills/businessactivity/src/types/index.ts +0 -86
  165. package/skills/businessactivity/tsconfig.json +0 -29
  166. package/skills/codefix/LICENSE +0 -192
  167. package/skills/codefix/README.md +0 -232
  168. package/skills/codefix/SKILL.md +0 -94
  169. package/skills/codefix/package.json +0 -21
  170. package/skills/codefix/src/fixers/batch.ts +0 -213
  171. package/skills/codefix/src/fixers/detector.ts +0 -160
  172. package/skills/codefix/src/fixers/index.ts +0 -7
  173. package/skills/codefix/src/fixers/runner.ts +0 -522
  174. package/skills/codefix/src/index-local.ts +0 -431
  175. package/skills/codefix/src/index.ts +0 -4
  176. package/skills/codefix/src/types.ts +0 -211
  177. package/skills/codefix/tsconfig.json +0 -15
  178. package/skills/commitpush/SKILL.md +0 -57
  179. package/skills/commitpush/package.json +0 -33
  180. package/skills/commitpush/src/index.ts +0 -34
  181. package/skills/commitpush/tsconfig.json +0 -17
  182. package/skills/commitpushpr/SKILL.md +0 -55
  183. package/skills/commitpushpr/package.json +0 -33
  184. package/skills/commitpushpr/src/index.ts +0 -34
  185. package/skills/commitpushpr/tsconfig.json +0 -17
  186. package/skills/compress-video/CLAUDE.md +0 -9
  187. package/skills/compress-video/SKILL.md +0 -79
  188. package/skills/compress-video/package.json +0 -23
  189. package/skills/compress-video/src/index.ts +0 -473
  190. package/skills/compress-video/tsconfig.json +0 -11
  191. package/skills/contract-review-report/SKILL.md +0 -52
  192. package/skills/contract-review-report/package.json +0 -10
  193. package/skills/customer-feedback-report/SKILL.md +0 -52
  194. package/skills/customer-feedback-report/package.json +0 -10
  195. package/skills/dashboard-builder/CLAUDE.md +0 -19
  196. package/skills/dashboard-builder/package.json +0 -29
  197. package/skills/dashboard-builder/src/index.ts +0 -150
  198. package/skills/dashboard-builder/tsconfig.json +0 -10
  199. package/skills/data-anonymizer/CLAUDE.md +0 -19
  200. package/skills/data-anonymizer/package.json +0 -27
  201. package/skills/data-anonymizer/src/index.ts +0 -183
  202. package/skills/data-anonymizer/tsconfig.json +0 -10
  203. package/skills/database-explorer/CLAUDE.md +0 -19
  204. package/skills/database-explorer/package.json +0 -29
  205. package/skills/database-explorer/src/index.ts +0 -95
  206. package/skills/database-explorer/tsconfig.json +0 -10
  207. package/skills/diff-viewer/CLAUDE.md +0 -19
  208. package/skills/diff-viewer/package.json +0 -30
  209. package/skills/diff-viewer/src/index.ts +0 -164
  210. package/skills/diff-viewer/tsconfig.json +0 -10
  211. package/skills/doc-read/SKILL.md +0 -45
  212. package/skills/doc-read/package.json +0 -29
  213. package/skills/doc-read/src/index.ts +0 -324
  214. package/skills/doc-read/tsconfig.json +0 -8
  215. package/skills/domainpurchase/LICENSE +0 -192
  216. package/skills/domainpurchase/SKILL.md +0 -29
  217. package/skills/domainpurchase/package.json +0 -30
  218. package/skills/domainpurchase/src/index.ts +0 -3
  219. package/skills/domainpurchase/tsconfig.json +0 -21
  220. package/skills/email-sequence/SKILL.md +0 -53
  221. package/skills/email-sequence/package.json +0 -10
  222. package/skills/experiment-power-calculator/CLAUDE.md +0 -19
  223. package/skills/experiment-power-calculator/package.json +0 -29
  224. package/skills/experiment-power-calculator/src/index.ts +0 -86
  225. package/skills/experiment-power-calculator/tsconfig.json +0 -10
  226. package/skills/extract-frames/CLAUDE.md +0 -19
  227. package/skills/extract-frames/package.json +0 -27
  228. package/skills/extract-frames/src/index.ts +0 -616
  229. package/skills/extract-frames/tsconfig.json +0 -10
  230. package/skills/file-organizer/CLAUDE.md +0 -19
  231. package/skills/file-organizer/package.json +0 -27
  232. package/skills/file-organizer/src/index.ts +0 -91
  233. package/skills/file-organizer/tsconfig.json +0 -10
  234. package/skills/folder-tree/CLAUDE.md +0 -19
  235. package/skills/folder-tree/package.json +0 -29
  236. package/skills/folder-tree/src/index.ts +0 -568
  237. package/skills/folder-tree/tsconfig.json +0 -10
  238. package/skills/form-filler/CLAUDE.md +0 -19
  239. package/skills/form-filler/package.json +0 -29
  240. package/skills/form-filler/src/index.ts +0 -81
  241. package/skills/form-filler/tsconfig.json +0 -10
  242. package/skills/generate-api-client/CLAUDE.md +0 -19
  243. package/skills/generate-api-client/package.json +0 -29
  244. package/skills/generate-api-client/src/generator.ts +0 -47
  245. package/skills/generate-api-client/src/index.ts +0 -92
  246. package/skills/generate-api-client/src/logger.ts +0 -34
  247. package/skills/generate-api-client/src/python-generator.ts +0 -245
  248. package/skills/generate-api-client/src/spec-loader.ts +0 -48
  249. package/skills/generate-api-client/src/type-mappers.ts +0 -79
  250. package/skills/generate-api-client/src/types.ts +0 -76
  251. package/skills/generate-api-client/src/typescript-generator.ts +0 -247
  252. package/skills/generate-api-client/tsconfig.json +0 -10
  253. package/skills/generate-chart/CLAUDE.md +0 -19
  254. package/skills/generate-chart/package.json +0 -27
  255. package/skills/generate-chart/src/index.ts +0 -510
  256. package/skills/generate-chart/tsconfig.json +0 -10
  257. package/skills/generate-dockerfile/CLAUDE.md +0 -19
  258. package/skills/generate-dockerfile/package.json +0 -27
  259. package/skills/generate-dockerfile/src/cli.ts +0 -78
  260. package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
  261. package/skills/generate-dockerfile/src/index.ts +0 -81
  262. package/skills/generate-dockerfile/src/logger.ts +0 -30
  263. package/skills/generate-dockerfile/src/project-detection.ts +0 -68
  264. package/skills/generate-dockerfile/src/support-files.ts +0 -171
  265. package/skills/generate-dockerfile/src/types.ts +0 -29
  266. package/skills/generate-dockerfile/tsconfig.json +0 -10
  267. package/skills/generate-env/CLAUDE.md +0 -19
  268. package/skills/generate-env/package.json +0 -29
  269. package/skills/generate-env/src/cli.ts +0 -85
  270. package/skills/generate-env/src/detection.ts +0 -161
  271. package/skills/generate-env/src/env-data.ts +0 -66
  272. package/skills/generate-env/src/generators.ts +0 -240
  273. package/skills/generate-env/src/index.ts +0 -120
  274. package/skills/generate-env/src/runtime.ts +0 -30
  275. package/skills/generate-env/src/types.ts +0 -32
  276. package/skills/generate-env/tsconfig.json +0 -10
  277. package/skills/generate-favicon/CLAUDE.md +0 -19
  278. package/skills/generate-favicon/package.json +0 -29
  279. package/skills/generate-favicon/src/index.ts +0 -421
  280. package/skills/generate-favicon/tsconfig.json +0 -10
  281. package/skills/generate-qrcode/CLAUDE.md +0 -19
  282. package/skills/generate-qrcode/package.json +0 -30
  283. package/skills/generate-qrcode/src/index.ts +0 -584
  284. package/skills/generate-qrcode/tsconfig.json +0 -10
  285. package/skills/generate-resume/CLAUDE.md +0 -19
  286. package/skills/generate-resume/package.json +0 -27
  287. package/skills/generate-resume/src/cli.ts +0 -157
  288. package/skills/generate-resume/src/index.ts +0 -178
  289. package/skills/generate-resume/src/parsers.ts +0 -95
  290. package/skills/generate-resume/src/renderers.ts +0 -538
  291. package/skills/generate-resume/src/security.ts +0 -39
  292. package/skills/generate-resume/src/types.ts +0 -86
  293. package/skills/generate-resume/tsconfig.json +0 -10
  294. package/skills/generate-sitemap/CLAUDE.md +0 -19
  295. package/skills/generate-sitemap/package.json +0 -27
  296. package/skills/generate-sitemap/src/index.ts +0 -626
  297. package/skills/generate-sitemap/tsconfig.json +0 -10
  298. package/skills/gif-maker/CLAUDE.md +0 -19
  299. package/skills/gif-maker/package.json +0 -30
  300. package/skills/gif-maker/src/index.ts +0 -600
  301. package/skills/gif-maker/tsconfig.json +0 -10
  302. package/skills/hook/LICENSE +0 -192
  303. package/skills/hook/README.md +0 -74
  304. package/skills/hook/SKILL.md +0 -85
  305. package/skills/hook/bunfig.toml +0 -5
  306. package/skills/hook/package.json +0 -28
  307. package/skills/hook/src/commands/create.ts +0 -112
  308. package/skills/hook/src/commands/events.ts +0 -37
  309. package/skills/hook/src/commands/validate.ts +0 -117
  310. package/skills/hook/src/index.ts +0 -118
  311. package/skills/hook/src/templates/root.ts +0 -196
  312. package/skills/hook/src/templates/source.ts +0 -647
  313. package/skills/hook/tsconfig.json +0 -18
  314. package/skills/http-server/CLAUDE.md +0 -19
  315. package/skills/http-server/package.json +0 -29
  316. package/skills/http-server/src/index.ts +0 -51
  317. package/skills/http-server/tsconfig.json +0 -10
  318. package/skills/implementation/LICENSE +0 -192
  319. package/skills/implementation/README.md +0 -53
  320. package/skills/implementation/SKILL.md +0 -57
  321. package/skills/implementation/bunfig.toml +0 -5
  322. package/skills/implementation/package.json +0 -28
  323. package/skills/implementation/src/commands/create.ts +0 -187
  324. package/skills/implementation/src/index.ts +0 -62
  325. package/skills/implementation/tsconfig.json +0 -18
  326. package/skills/implementation-plan/CLAUDE.md +0 -19
  327. package/skills/implementation-plan/package.json +0 -29
  328. package/skills/implementation-plan/src/index.ts +0 -520
  329. package/skills/implementation-plan/tsconfig.json +0 -10
  330. package/skills/implementation-todo/CLAUDE.md +0 -19
  331. package/skills/implementation-todo/package.json +0 -29
  332. package/skills/implementation-todo/src/index.ts +0 -429
  333. package/skills/implementation-todo/tsconfig.json +0 -10
  334. package/skills/invoice/.env.example +0 -3
  335. package/skills/invoice/CLAUDE.md +0 -31
  336. package/skills/invoice/LICENSE +0 -192
  337. package/skills/invoice/README.md +0 -70
  338. package/skills/invoice/package.json +0 -26
  339. package/skills/invoice/src/commands/companies.ts +0 -202
  340. package/skills/invoice/src/commands/config.ts +0 -132
  341. package/skills/invoice/src/commands/generate.ts +0 -177
  342. package/skills/invoice/src/commands/invoices.ts +0 -218
  343. package/skills/invoice/src/index.ts +0 -3
  344. package/skills/invoice/src/lib/api.ts +0 -124
  345. package/skills/invoice/src/lib/storage.ts +0 -171
  346. package/skills/invoice/src/types/index.ts +0 -86
  347. package/skills/invoice/src/utils/logger.ts +0 -33
  348. package/skills/invoice/src/utils/paths.ts +0 -25
  349. package/skills/invoice/tsconfig.json +0 -23
  350. package/skills/invoice-reconciliation/SKILL.md +0 -98
  351. package/skills/invoice-reconciliation/package.json +0 -36
  352. package/skills/invoice-reconciliation/src/index.ts +0 -743
  353. package/skills/invoice-reconciliation/tsconfig.json +0 -17
  354. package/skills/landing-page-pack/SKILL.md +0 -55
  355. package/skills/landing-page-pack/package.json +0 -10
  356. package/skills/latex-table-generator/CLAUDE.md +0 -19
  357. package/skills/latex-table-generator/package.json +0 -29
  358. package/skills/latex-table-generator/src/index.ts +0 -113
  359. package/skills/latex-table-generator/tsconfig.json +0 -10
  360. package/skills/logo-design/SKILL.md +0 -94
  361. package/skills/logo-design/package.json +0 -35
  362. package/skills/logo-design/src/cli.ts +0 -132
  363. package/skills/logo-design/src/constants.ts +0 -5
  364. package/skills/logo-design/src/docs.ts +0 -102
  365. package/skills/logo-design/src/geometry.ts +0 -324
  366. package/skills/logo-design/src/index.ts +0 -212
  367. package/skills/logo-design/src/palette.ts +0 -258
  368. package/skills/logo-design/src/types.ts +0 -50
  369. package/skills/logo-design/tsconfig.json +0 -17
  370. package/skills/lorem-generator/CLAUDE.md +0 -19
  371. package/skills/lorem-generator/package.json +0 -29
  372. package/skills/lorem-generator/src/index.ts +0 -59
  373. package/skills/lorem-generator/tsconfig.json +0 -10
  374. package/skills/managemcp/CLAUDE.md +0 -14
  375. package/skills/managemcp/README.md +0 -24
  376. package/skills/managemcp/package.json +0 -16
  377. package/skills/managemcp/src/index.ts +0 -3
  378. package/skills/managemcp/tsconfig.json +0 -27
  379. package/skills/markdown-validator/CLAUDE.md +0 -19
  380. package/skills/markdown-validator/package.json +0 -29
  381. package/skills/markdown-validator/src/index.ts +0 -92
  382. package/skills/markdown-validator/tsconfig.json +0 -10
  383. package/skills/market-research-report/SKILL.md +0 -51
  384. package/skills/market-research-report/package.json +0 -10
  385. package/skills/meeting-pack/SKILL.md +0 -52
  386. package/skills/meeting-pack/package.json +0 -10
  387. package/skills/merge-pdfs/CLAUDE.md +0 -19
  388. package/skills/merge-pdfs/package.json +0 -31
  389. package/skills/merge-pdfs/src/index.ts +0 -427
  390. package/skills/merge-pdfs/tsconfig.json +0 -10
  391. package/skills/migration-plan-pack/SKILL.md +0 -56
  392. package/skills/migration-plan-pack/package.json +0 -10
  393. package/skills/monitor/SKILL.md +0 -69
  394. package/skills/monitor/package.json +0 -33
  395. package/skills/monitor/src/index.ts +0 -34
  396. package/skills/monitor/tsconfig.json +0 -17
  397. package/skills/one-page-website/SKILL.md +0 -128
  398. package/skills/one-page-website/package.json +0 -34
  399. package/skills/one-page-website/src/design.ts +0 -336
  400. package/skills/one-page-website/src/docs.ts +0 -159
  401. package/skills/one-page-website/src/index.ts +0 -357
  402. package/skills/one-page-website/src/page.ts +0 -340
  403. package/skills/one-page-website/src/styles.ts +0 -508
  404. package/skills/one-page-website/src/types.ts +0 -78
  405. package/skills/one-page-website/tsconfig.json +0 -17
  406. package/skills/pdf-generate/CLAUDE.md +0 -19
  407. package/skills/pdf-generate/SKILL.md +0 -86
  408. package/skills/pdf-generate/package.json +0 -21
  409. package/skills/pdf-generate/src/cli.ts +0 -162
  410. package/skills/pdf-generate/src/html.ts +0 -84
  411. package/skills/pdf-generate/src/index.ts +0 -62
  412. package/skills/pdf-generate/src/markdown.ts +0 -27
  413. package/skills/pdf-generate/src/pdf-writer.ts +0 -78
  414. package/skills/pdf-generate/src/runtime.ts +0 -34
  415. package/skills/pdf-generate/src/security.ts +0 -37
  416. package/skills/pdf-generate/src/templates.ts +0 -311
  417. package/skills/pdf-generate/src/types.ts +0 -28
  418. package/skills/pdf-generate/tsconfig.json +0 -16
  419. package/skills/pdf-to-dataset/SKILL.md +0 -88
  420. package/skills/pdf-to-dataset/package.json +0 -37
  421. package/skills/pdf-to-dataset/src/index.ts +0 -790
  422. package/skills/pdf-to-dataset/tsconfig.json +0 -17
  423. package/skills/pdf-to-markdown/SKILL.md +0 -81
  424. package/skills/pdf-to-markdown/package.json +0 -35
  425. package/skills/pdf-to-markdown/src/index.ts +0 -694
  426. package/skills/pdf-to-markdown/tsconfig.json +0 -17
  427. package/skills/performance-audit-report/SKILL.md +0 -49
  428. package/skills/performance-audit-report/package.json +0 -10
  429. package/skills/pitch-deck/SKILL.md +0 -51
  430. package/skills/pitch-deck/package.json +0 -10
  431. package/skills/product-mockup/SKILL.md +0 -107
  432. package/skills/product-mockup/package.json +0 -32
  433. package/skills/product-mockup/src/cli.ts +0 -150
  434. package/skills/product-mockup/src/design.ts +0 -151
  435. package/skills/product-mockup/src/docs.ts +0 -134
  436. package/skills/product-mockup/src/index.ts +0 -182
  437. package/skills/product-mockup/src/render.ts +0 -407
  438. package/skills/product-mockup/src/types.ts +0 -66
  439. package/skills/product-mockup/tsconfig.json +0 -17
  440. package/skills/proposal-pack/SKILL.md +0 -53
  441. package/skills/proposal-pack/package.json +0 -10
  442. package/skills/read-csv/SKILL.md +0 -62
  443. package/skills/read-csv/package.json +0 -37
  444. package/skills/read-csv/src/index.ts +0 -356
  445. package/skills/read-csv/tsconfig.json +0 -17
  446. package/skills/read-excel/SKILL.md +0 -64
  447. package/skills/read-excel/package.json +0 -36
  448. package/skills/read-excel/src/index.ts +0 -266
  449. package/skills/read-excel/tsconfig.json +0 -17
  450. package/skills/regex-tester/CLAUDE.md +0 -19
  451. package/skills/regex-tester/package.json +0 -27
  452. package/skills/regex-tester/src/index.ts +0 -183
  453. package/skills/regex-tester/tsconfig.json +0 -10
  454. package/skills/repo-onboarding-report/SKILL.md +0 -52
  455. package/skills/repo-onboarding-report/package.json +0 -10
  456. package/skills/scancommitpr/SKILL.md +0 -178
  457. package/skills/scancommitpr/package.json +0 -34
  458. package/skills/scancommitpr/src/index.ts +0 -44
  459. package/skills/scancommitpr/tsconfig.json +0 -13
  460. package/skills/scancommitpush/SKILL.md +0 -174
  461. package/skills/scancommitpush/package.json +0 -32
  462. package/skills/scancommitpush/src/index.ts +0 -44
  463. package/skills/scancommitpush/tsconfig.json +0 -13
  464. package/skills/scientific-figure-check/CLAUDE.md +0 -19
  465. package/skills/scientific-figure-check/package.json +0 -29
  466. package/skills/scientific-figure-check/src/index.ts +0 -83
  467. package/skills/scientific-figure-check/tsconfig.json +0 -10
  468. package/skills/security-audit/CLAUDE.md +0 -19
  469. package/skills/security-audit/package.json +0 -27
  470. package/skills/security-audit/src/index.ts +0 -145
  471. package/skills/security-audit/tsconfig.json +0 -10
  472. package/skills/security-audit-report/SKILL.md +0 -52
  473. package/skills/security-audit-report/package.json +0 -10
  474. package/skills/seo-content-pack/SKILL.md +0 -54
  475. package/skills/seo-content-pack/package.json +0 -10
  476. package/skills/siteanalyze/SKILL.md +0 -25
  477. package/skills/siteanalyze/package.json +0 -27
  478. package/skills/siteanalyze/src/index.ts +0 -592
  479. package/skills/slide-deck-generator/SKILL.md +0 -93
  480. package/skills/slide-deck-generator/package.json +0 -38
  481. package/skills/slide-deck-generator/src/cli.ts +0 -133
  482. package/skills/slide-deck-generator/src/index.ts +0 -148
  483. package/skills/slide-deck-generator/src/model.ts +0 -307
  484. package/skills/slide-deck-generator/src/pptx.ts +0 -143
  485. package/skills/slide-deck-generator/src/render.ts +0 -248
  486. package/skills/slide-deck-generator/src/types.ts +0 -114
  487. package/skills/slide-deck-generator/src/utils.ts +0 -53
  488. package/skills/slide-deck-generator/tsconfig.json +0 -17
  489. package/skills/social-content-calendar/SKILL.md +0 -54
  490. package/skills/social-content-calendar/package.json +0 -10
  491. package/skills/split-pdf/CLAUDE.md +0 -19
  492. package/skills/split-pdf/package.json +0 -30
  493. package/skills/split-pdf/src/index.ts +0 -301
  494. package/skills/split-pdf/tsconfig.json +0 -10
  495. package/skills/statistical-test-selector/CLAUDE.md +0 -19
  496. package/skills/statistical-test-selector/package.json +0 -27
  497. package/skills/statistical-test-selector/src/index.ts +0 -75
  498. package/skills/statistical-test-selector/tsconfig.json +0 -10
  499. package/skills/test-suite-generator/SKILL.md +0 -51
  500. package/skills/test-suite-generator/package.json +0 -10
  501. package/skills/tmux-session/SKILL.md +0 -109
  502. package/skills/tmux-session/package.json +0 -33
  503. package/skills/tmux-session/src/index.ts +0 -34
  504. package/skills/tmux-session/tsconfig.json +0 -17
  505. package/skills/todos-plan/SKILL.md +0 -363
  506. package/skills/todos-plan/agents/openai.yaml +0 -4
  507. package/skills/todos-plan/package.json +0 -9
  508. package/skills/todos-plan/src/index.ts +0 -68
  509. package/skills/tsconfig.base.json +0 -12
  510. package/skills/validate-config/CLAUDE.md +0 -19
  511. package/skills/validate-config/package.json +0 -29
  512. package/skills/validate-config/src/index.ts +0 -56
  513. package/skills/validate-config/tsconfig.json +0 -10
  514. package/skills/video-downloader/CLAUDE.md +0 -19
  515. package/skills/video-downloader/package.json +0 -29
  516. package/skills/video-downloader/src/index.ts +0 -561
  517. package/skills/video-downloader/tsconfig.json +0 -10
  518. package/skills/video-highlight-pack/SKILL.md +0 -54
  519. package/skills/video-highlight-pack/package.json +0 -10
  520. package/skills/watermark/CLAUDE.md +0 -19
  521. package/skills/watermark/package.json +0 -32
  522. package/skills/watermark/src/index.ts +0 -587
  523. package/skills/watermark/tsconfig.json +0 -10
@@ -1,218 +0,0 @@
1
- import { Command } from "commander";
2
- import chalk from "chalk";
3
- import {
4
- listInvoicesLocal,
5
- loadInvoiceLocal,
6
- } from "../lib/storage.js";
7
- import {
8
- listInvoices,
9
- getInvoice,
10
- downloadInvoicePdf,
11
- checkApiHealth,
12
- } from "../lib/api.js";
13
- import { logger } from "../utils/logger.js";
14
- import type { Invoice } from "../types/index.js";
15
-
16
- export function registerInvoicesCommand(program: Command): void {
17
- const invoices = program.command("invoices").description("Manage invoices");
18
-
19
- invoices
20
- .command("list")
21
- .alias("ls")
22
- .description("List all invoices")
23
- .option("-n, --limit <count>", "Limit number of invoices", "20")
24
- .option("--api", "Use API instead of local storage")
25
- .option("--json", "Output as JSON")
26
- .action(async (options) => {
27
- try {
28
- let invoiceList: Invoice[];
29
-
30
- if (options.api && (await checkApiHealth())) {
31
- invoiceList = await listInvoices();
32
- } else {
33
- invoiceList = listInvoicesLocal();
34
- }
35
-
36
- invoiceList = invoiceList.slice(0, parseInt(options.limit, 10));
37
-
38
- if (options.json) {
39
- console.log(JSON.stringify(invoiceList, null, 2));
40
- return;
41
- }
42
-
43
- logger.header("Invoices");
44
-
45
- if (invoiceList.length === 0) {
46
- logger.warning("No invoices found");
47
- logger.info("Generate one with: service-invoicegenerate generate --issuer <id> --client <id> -d 'Description' -a 1000");
48
- return;
49
- }
50
-
51
- for (const invoice of invoiceList) {
52
- console.log();
53
- console.log(
54
- chalk.bold.cyan(invoice.number),
55
- getStatusBadge(invoice.status)
56
- );
57
- console.log(
58
- chalk.gray(`${invoice.issuer.name} → ${invoice.client.name}`)
59
- );
60
- console.log(
61
- chalk.yellow("Total:"),
62
- chalk.bold(`${invoice.total.toFixed(2)} ${invoice.currency}`)
63
- );
64
- console.log(
65
- chalk.yellow("Date:"),
66
- invoice.issueDate,
67
- chalk.gray(`Due: ${invoice.dueDate}`)
68
- );
69
- }
70
- } catch (error) {
71
- logger.error(error instanceof Error ? error.message : String(error));
72
- process.exit(1);
73
- }
74
- });
75
-
76
- invoices
77
- .command("show <id>")
78
- .description("Show invoice details")
79
- .option("--json", "Output as JSON")
80
- .action((id, options) => {
81
- // Try to find by ID or invoice number
82
- let invoice = loadInvoiceLocal(id);
83
-
84
- if (!invoice) {
85
- const allInvoices = listInvoicesLocal();
86
- invoice =
87
- allInvoices.find((inv) => inv.number === id) ||
88
- allInvoices.find((inv) => inv.id.startsWith(id)) ||
89
- null;
90
- }
91
-
92
- if (!invoice) {
93
- logger.error(`Invoice not found: ${id}`);
94
- process.exit(1);
95
- }
96
-
97
- if (options.json) {
98
- console.log(JSON.stringify(invoice, null, 2));
99
- return;
100
- }
101
-
102
- logger.header(`Invoice ${invoice.number}`);
103
- console.log(getStatusBadge(invoice.status));
104
- console.log();
105
-
106
- logger.label("ID", invoice.id);
107
- logger.label("Issue Date", invoice.issueDate);
108
- logger.label("Due Date", invoice.dueDate);
109
-
110
- console.log();
111
- console.log(chalk.bold("From:"));
112
- logger.label(" Name", invoice.issuer.name);
113
- if (invoice.issuer.vatNumber) {
114
- logger.label(" VAT", invoice.issuer.vatNumber);
115
- }
116
-
117
- console.log();
118
- console.log(chalk.bold("To:"));
119
- logger.label(" Name", invoice.client.name);
120
- if (invoice.client.vatNumber) {
121
- logger.label(" VAT", invoice.client.vatNumber);
122
- }
123
-
124
- console.log();
125
- console.log(chalk.bold("Items:"));
126
- for (const item of invoice.items) {
127
- console.log(
128
- chalk.gray(" •"),
129
- item.description,
130
- chalk.gray(`(${item.quantity} x ${item.unitPrice.toFixed(2)})`)
131
- );
132
- }
133
-
134
- console.log();
135
- logger.divider();
136
- logger.label("Subtotal", `${invoice.subtotal.toFixed(2)} ${invoice.currency}`);
137
- logger.label("VAT", `${invoice.vatAmount.toFixed(2)} ${invoice.currency}`);
138
- console.log(
139
- chalk.bold("Total:"),
140
- chalk.bold.green(`${invoice.total.toFixed(2)} ${invoice.currency}`)
141
- );
142
-
143
- if (invoice.notes) {
144
- console.log();
145
- console.log(chalk.bold("Notes:"));
146
- console.log(chalk.gray(invoice.notes));
147
- }
148
- });
149
-
150
- invoices
151
- .command("download <id>")
152
- .description("Download invoice as PDF")
153
- .requiredOption("-o, --output <file>", "Output file path")
154
- .action(async (id, options) => {
155
- try {
156
- if (!(await checkApiHealth())) {
157
- logger.error("API service not available");
158
- logger.info("Start the API service with: docker-compose up -d");
159
- process.exit(1);
160
- }
161
-
162
- // Find invoice
163
- let invoice = loadInvoiceLocal(id);
164
- if (!invoice) {
165
- const allInvoices = listInvoicesLocal();
166
- invoice =
167
- allInvoices.find((inv) => inv.number === id) ||
168
- allInvoices.find((inv) => inv.id.startsWith(id)) ||
169
- null;
170
- }
171
-
172
- const invoiceId = invoice?.id || id;
173
-
174
- logger.info(`Downloading PDF for invoice ${id}...`);
175
- await downloadInvoicePdf(invoiceId, options.output);
176
- logger.success(`PDF saved to ${options.output}`);
177
- } catch (error) {
178
- logger.error(error instanceof Error ? error.message : String(error));
179
- process.exit(1);
180
- }
181
- });
182
-
183
- invoices
184
- .command("export <id>")
185
- .description("Export invoice as JSON")
186
- .requiredOption("-o, --output <file>", "Output file path")
187
- .action((id, options) => {
188
- let invoice = loadInvoiceLocal(id);
189
-
190
- if (!invoice) {
191
- const allInvoices = listInvoicesLocal();
192
- invoice =
193
- allInvoices.find((inv) => inv.number === id) ||
194
- allInvoices.find((inv) => inv.id.startsWith(id)) ||
195
- null;
196
- }
197
-
198
- if (!invoice) {
199
- logger.error(`Invoice not found: ${id}`);
200
- process.exit(1);
201
- }
202
-
203
- const fs = require("fs");
204
- fs.writeFileSync(options.output, JSON.stringify(invoice, null, 2));
205
- logger.success(`Invoice exported to ${options.output}`);
206
- });
207
- }
208
-
209
- function getStatusBadge(status: string): string {
210
- const badges: Record<string, string> = {
211
- draft: chalk.gray("[DRAFT]"),
212
- sent: chalk.blue("[SENT]"),
213
- paid: chalk.green("[PAID]"),
214
- overdue: chalk.red("[OVERDUE]"),
215
- cancelled: chalk.yellow("[CANCELLED]"),
216
- };
217
- return badges[status] || chalk.gray(`[${status.toUpperCase()}]`);
218
- }
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- console.log("Usage: skills run invoice -- <command> [options]");
@@ -1,124 +0,0 @@
1
- import type {
2
- Company,
3
- Invoice,
4
- CreateInvoiceRequest,
5
- ApiConfig,
6
- } from "../types/index.js";
7
-
8
- function getApiConfig(): ApiConfig {
9
- return {
10
- baseUrl: process.env.API_BASE_URL || "http://localhost:8007/api/v1",
11
- timeout: parseInt(process.env.API_TIMEOUT || "30000", 10),
12
- };
13
- }
14
-
15
- async function apiRequest<T>(
16
- endpoint: string,
17
- options: RequestInit = {}
18
- ): Promise<T> {
19
- const config = getApiConfig();
20
- const url = `${config.baseUrl}${endpoint}`;
21
-
22
- const controller = new AbortController();
23
- const timeout = setTimeout(() => controller.abort(), config.timeout);
24
-
25
- try {
26
- const response = await fetch(url, {
27
- ...options,
28
- signal: controller.signal,
29
- headers: {
30
- "Content-Type": "application/json",
31
- ...options.headers,
32
- },
33
- });
34
-
35
- if (!response.ok) {
36
- const error = await response.json().catch(() => ({}));
37
- throw new Error(
38
- (error as { detail?: string }).detail ||
39
- `API error: ${response.status} ${response.statusText}`
40
- );
41
- }
42
-
43
- return response.json() as Promise<T>;
44
- } finally {
45
- clearTimeout(timeout);
46
- }
47
- }
48
-
49
- export async function listCompanies(): Promise<Company[]> {
50
- return apiRequest<Company[]>("/companies");
51
- }
52
-
53
- export async function getCompany(id: string): Promise<Company> {
54
- return apiRequest<Company>(`/companies/${id}`);
55
- }
56
-
57
- export async function createCompany(
58
- company: Omit<Company, "id">
59
- ): Promise<Company> {
60
- return apiRequest<Company>("/companies", {
61
- method: "POST",
62
- body: JSON.stringify(company),
63
- });
64
- }
65
-
66
- export async function updateCompany(
67
- id: string,
68
- company: Partial<Company>
69
- ): Promise<Company> {
70
- return apiRequest<Company>(`/companies/${id}`, {
71
- method: "PUT",
72
- body: JSON.stringify(company),
73
- });
74
- }
75
-
76
- export async function deleteCompany(id: string): Promise<void> {
77
- await apiRequest<void>(`/companies/${id}`, {
78
- method: "DELETE",
79
- });
80
- }
81
-
82
- export async function listInvoices(): Promise<Invoice[]> {
83
- return apiRequest<Invoice[]>("/invoices");
84
- }
85
-
86
- export async function getInvoice(id: string): Promise<Invoice> {
87
- return apiRequest<Invoice>(`/invoices/${id}`);
88
- }
89
-
90
- export async function createInvoice(
91
- request: CreateInvoiceRequest
92
- ): Promise<Invoice> {
93
- return apiRequest<Invoice>("/invoices", {
94
- method: "POST",
95
- body: JSON.stringify(request),
96
- });
97
- }
98
-
99
- export async function downloadInvoicePdf(
100
- id: string,
101
- outputPath: string
102
- ): Promise<void> {
103
- const config = getApiConfig();
104
- const url = `${config.baseUrl}/invoices/${id}/pdf`;
105
-
106
- const response = await fetch(url);
107
- if (!response.ok) {
108
- throw new Error(`Failed to download PDF: ${response.statusText}`);
109
- }
110
-
111
- const buffer = await response.arrayBuffer();
112
- const fs = require("fs");
113
- fs.writeFileSync(outputPath, Buffer.from(buffer));
114
- }
115
-
116
- export async function checkApiHealth(): Promise<boolean> {
117
- try {
118
- const config = getApiConfig();
119
- const response = await fetch(`${config.baseUrl.replace("/api/v1", "")}/health`);
120
- return response.ok;
121
- } catch {
122
- return false;
123
- }
124
- }
@@ -1,171 +0,0 @@
1
- import { readFileSync, writeFileSync, existsSync, readdirSync } from "fs";
2
- import { join } from "path";
3
- import type { Company, Invoice } from "../types/index.js";
4
- import { getCompaniesDir, getInvoicesDir, ensureDir } from "../utils/paths.js";
5
-
6
- // Local company storage (for offline mode)
7
- export function saveCompanyLocal(company: Company): void {
8
- const companiesDir = getCompaniesDir();
9
- ensureDir(companiesDir);
10
-
11
- const companyPath = join(companiesDir, `${company.id}.json`);
12
- writeFileSync(companyPath, JSON.stringify(company, null, 2));
13
- }
14
-
15
- export function loadCompanyLocal(id: string): Company | null {
16
- const companyPath = join(getCompaniesDir(), `${id}.json`);
17
-
18
- if (!existsSync(companyPath)) {
19
- return null;
20
- }
21
-
22
- const content = readFileSync(companyPath, "utf-8");
23
- return JSON.parse(content) as Company;
24
- }
25
-
26
- export function listCompaniesLocal(): Company[] {
27
- const companiesDir = getCompaniesDir();
28
-
29
- if (!existsSync(companiesDir)) {
30
- return [];
31
- }
32
-
33
- const files = readdirSync(companiesDir).filter((f) => f.endsWith(".json"));
34
-
35
- return files.map((file) => {
36
- const content = readFileSync(join(companiesDir, file), "utf-8");
37
- return JSON.parse(content) as Company;
38
- });
39
- }
40
-
41
- export function deleteCompanyLocal(id: string): boolean {
42
- const companyPath = join(getCompaniesDir(), `${id}.json`);
43
-
44
- if (!existsSync(companyPath)) {
45
- return false;
46
- }
47
-
48
- const fs = require("fs");
49
- fs.unlinkSync(companyPath);
50
- return true;
51
- }
52
-
53
- // Local invoice storage
54
- export function saveInvoiceLocal(invoice: Invoice): void {
55
- const invoicesDir = getInvoicesDir();
56
- ensureDir(invoicesDir);
57
-
58
- const invoicePath = join(invoicesDir, `${invoice.id}.json`);
59
- writeFileSync(invoicePath, JSON.stringify(invoice, null, 2));
60
- }
61
-
62
- export function loadInvoiceLocal(id: string): Invoice | null {
63
- const invoicePath = join(getInvoicesDir(), `${id}.json`);
64
-
65
- if (!existsSync(invoicePath)) {
66
- return null;
67
- }
68
-
69
- const content = readFileSync(invoicePath, "utf-8");
70
- return JSON.parse(content) as Invoice;
71
- }
72
-
73
- export function listInvoicesLocal(): Invoice[] {
74
- const invoicesDir = getInvoicesDir();
75
-
76
- if (!existsSync(invoicesDir)) {
77
- return [];
78
- }
79
-
80
- const files = readdirSync(invoicesDir).filter((f) => f.endsWith(".json"));
81
-
82
- return files
83
- .map((file) => {
84
- const content = readFileSync(join(invoicesDir, file), "utf-8");
85
- return JSON.parse(content) as Invoice;
86
- })
87
- .sort(
88
- (a, b) =>
89
- new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
90
- );
91
- }
92
-
93
- export function getNextInvoiceNumber(): string {
94
- const invoices = listInvoicesLocal();
95
- const year = new Date().getFullYear();
96
- const prefix = `INV-${year}-`;
97
-
98
- let maxNumber = 0;
99
- for (const invoice of invoices) {
100
- if (invoice.number.startsWith(prefix)) {
101
- const num = parseInt(invoice.number.replace(prefix, ""), 10);
102
- if (!isNaN(num) && num > maxNumber) {
103
- maxNumber = num;
104
- }
105
- }
106
- }
107
-
108
- return `${prefix}${String(maxNumber + 1).padStart(4, "0")}`;
109
- }
110
-
111
- function generateId(): string {
112
- return `${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
113
- }
114
-
115
- export function createLocalCompany(data: Omit<Company, "id">): Company {
116
- const company: Company = {
117
- id: generateId(),
118
- ...data,
119
- };
120
- saveCompanyLocal(company);
121
- return company;
122
- }
123
-
124
- export function createLocalInvoice(
125
- issuer: Company,
126
- client: Company,
127
- items: { description: string; quantity: number; unitPrice: number; vatRate?: number }[],
128
- options: {
129
- currency?: string;
130
- notes?: string;
131
- dueInDays?: number;
132
- } = {}
133
- ): Invoice {
134
- const { currency = "EUR", notes, dueInDays = 30 } = options;
135
- const vatRate = items[0]?.vatRate ?? 19;
136
-
137
- const calculatedItems = items.map((item) => ({
138
- ...item,
139
- vatRate: item.vatRate ?? vatRate,
140
- total: item.quantity * item.unitPrice,
141
- }));
142
-
143
- const subtotal = calculatedItems.reduce((sum, item) => sum + item.total, 0);
144
- const vatAmount = subtotal * (vatRate / 100);
145
- const total = subtotal + vatAmount;
146
-
147
- const now = new Date();
148
- const dueDate = new Date(now);
149
- dueDate.setDate(dueDate.getDate() + dueInDays);
150
-
151
- const invoice: Invoice = {
152
- id: generateId(),
153
- number: getNextInvoiceNumber(),
154
- issuer,
155
- client,
156
- items: calculatedItems,
157
- currency,
158
- subtotal,
159
- vatAmount,
160
- total,
161
- issueDate: now.toISOString().split("T")[0],
162
- dueDate: dueDate.toISOString().split("T")[0],
163
- status: "draft",
164
- notes,
165
- createdAt: now.toISOString(),
166
- updatedAt: now.toISOString(),
167
- };
168
-
169
- saveInvoiceLocal(invoice);
170
- return invoice;
171
- }
@@ -1,86 +0,0 @@
1
- export interface Company {
2
- id: string;
3
- name: string;
4
- vatNumber?: string;
5
- address?: Address;
6
- email?: string;
7
- phone?: string;
8
- bankAccount?: BankAccount;
9
- }
10
-
11
- export interface Address {
12
- street: string;
13
- city: string;
14
- postalCode: string;
15
- country: string;
16
- }
17
-
18
- export interface BankAccount {
19
- bankName: string;
20
- iban: string;
21
- bic?: string;
22
- }
23
-
24
- export interface InvoiceItem {
25
- description: string;
26
- quantity: number;
27
- unitPrice: number;
28
- vatRate?: number;
29
- total?: number;
30
- }
31
-
32
- export interface Invoice {
33
- id: string;
34
- number: string;
35
- issuer: Company;
36
- client: Company;
37
- items: InvoiceItem[];
38
- currency: string;
39
- subtotal: number;
40
- vatAmount: number;
41
- total: number;
42
- issueDate: string;
43
- dueDate: string;
44
- status: InvoiceStatus;
45
- notes?: string;
46
- createdAt: string;
47
- updatedAt: string;
48
- }
49
-
50
- export type InvoiceStatus = "draft" | "sent" | "paid" | "overdue" | "cancelled";
51
-
52
- export interface CreateInvoiceRequest {
53
- issuer: Company;
54
- client: Company;
55
- items: InvoiceItem[];
56
- currency?: string;
57
- issueDate?: string;
58
- dueDate?: string;
59
- notes?: string;
60
- }
61
-
62
- export interface InvoiceTemplate {
63
- id: string;
64
- name: string;
65
- description: string;
66
- styles: TemplateStyles;
67
- }
68
-
69
- export interface TemplateStyles {
70
- primaryColor: string;
71
- fontFamily: string;
72
- fontSize: string;
73
- logoUrl?: string;
74
- }
75
-
76
- export interface ApiConfig {
77
- baseUrl: string;
78
- timeout: number;
79
- }
80
-
81
- export interface GeneratorConfig {
82
- defaultCurrency: string;
83
- defaultVatRate: number;
84
- defaultPaymentTerms: number;
85
- outputDir: string;
86
- }
@@ -1,33 +0,0 @@
1
- import chalk from "chalk";
2
-
3
- export const logger = {
4
- info: (message: string) => console.log(chalk.blue("ℹ"), message),
5
- success: (message: string) => console.log(chalk.green("✓"), message),
6
- warning: (message: string) => console.log(chalk.yellow("⚠"), message),
7
- error: (message: string) => console.log(chalk.red("✗"), message),
8
- debug: (message: string) => {
9
- if (process.env.DEBUG) {
10
- console.log(chalk.gray("🔍"), message);
11
- }
12
- },
13
- step: (step: number, total: number, message: string) => {
14
- console.log(chalk.cyan(`[${step}/${total}]`), message);
15
- },
16
- header: (title: string) => {
17
- console.log();
18
- console.log(chalk.bold.cyan(`═══ ${title} ═══`));
19
- console.log();
20
- },
21
- divider: () => {
22
- console.log(chalk.gray("─".repeat(50)));
23
- },
24
- json: (data: unknown) => {
25
- console.log(JSON.stringify(data, null, 2));
26
- },
27
- table: (data: Record<string, unknown>[]) => {
28
- console.table(data);
29
- },
30
- label: (label: string, value: string) => {
31
- console.log(chalk.gray(label + ":"), value);
32
- },
33
- };
@@ -1,25 +0,0 @@
1
- import { homedir } from "os";
2
- import { join } from "path";
3
-
4
- export function getDataDir(): string {
5
- return join(process.cwd(), "data");
6
- }
7
-
8
- export function getInvoicesDir(): string {
9
- return join(getDataDir(), "invoices");
10
- }
11
-
12
- export function getCompaniesDir(): string {
13
- return join(getDataDir(), "companies");
14
- }
15
-
16
- export function getConfigPath(): string {
17
- return join(homedir(), ".config", "service-invoicegenerate", "config.json");
18
- }
19
-
20
- export function ensureDir(dir: string): void {
21
- const fs = require("fs");
22
- if (!fs.existsSync(dir)) {
23
- fs.mkdirSync(dir, { recursive: true });
24
- }
25
- }
@@ -1,23 +0,0 @@
1
- {
2
- "extends": "../tsconfig.base.json",
3
- "compilerOptions": {
4
- "module": "ESNext",
5
- "types": [
6
- "bun"
7
- ],
8
- "allowSyntheticDefaultImports": true,
9
- "resolveJsonModule": true,
10
- "declarationMap": true,
11
- "outDir": "./dist",
12
- "rootDir": "."
13
- },
14
- "include": [
15
- "bin/**/*",
16
- "src/**/*"
17
- ],
18
- "exclude": [
19
- "node_modules",
20
- "dist",
21
- "legacy"
22
- ]
23
- }