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