skillstore-cli 1.0.0

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 (231) hide show
  1. package/README.md +95 -0
  2. package/data/bundles/devflow-complete.json +19 -0
  3. package/data/free-skills/devflow-agile/manifest.json +19 -0
  4. package/data/free-skills/devflow-agile/plugin/commands/agile/retro.md +23 -0
  5. package/data/free-skills/devflow-agile/plugin/commands/agile/review.md +21 -0
  6. package/data/free-skills/devflow-agile/plugin/commands/agile/sprint.md +30 -0
  7. package/data/free-skills/devflow-agile/plugin/commands/agile/standup.md +20 -0
  8. package/data/free-skills/devflow-agile/plugin/commands/agile.md +35 -0
  9. package/data/free-skills/devflow-agile/plugin/commands/devflow.md +42 -0
  10. package/data/free-skills/devflow-agile/plugin/skills/developer/SKILL.md +93 -0
  11. package/data/free-skills/devflow-agile/plugin/skills/developer/assets/sample-output.md +182 -0
  12. package/data/free-skills/devflow-agile/plugin/skills/developer/references/clean-architecture.md +361 -0
  13. package/data/free-skills/devflow-agile/plugin/skills/developer/references/clean-code-guide.md +207 -0
  14. package/data/free-skills/devflow-agile/plugin/skills/developer/references/debugging-methodology.md +191 -0
  15. package/data/free-skills/devflow-agile/template/agents/agile-coach.md +76 -0
  16. package/data/free-skills/devflow-agile/template/workflows/agile-sprint-workflow.md +81 -0
  17. package/data/free-skills/devflow-bootstrap/manifest.json +8 -0
  18. package/data/free-skills/devflow-bootstrap/plugin/commands/bootstrap/auto.md +31 -0
  19. package/data/free-skills/devflow-bootstrap/plugin/commands/bootstrap.md +38 -0
  20. package/data/free-skills/devflow-bootstrap/plugin/commands/devflow.md +20 -0
  21. package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/SKILL.md +56 -0
  22. package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/assets/sample-output.md +216 -0
  23. package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/references/architecture-decisions.md +254 -0
  24. package/data/free-skills/devflow-bootstrap/plugin/skills/project-scaffold/references/stack-templates.md +400 -0
  25. package/data/free-skills/devflow-bootstrap/template/agents/bootstrap-specialist.md +56 -0
  26. package/data/free-skills/devflow-bootstrap/template/workflows/bootstrap-workflow.md +70 -0
  27. package/data/free-skills/devflow-docs/manifest.json +8 -0
  28. package/data/free-skills/devflow-docs/plugin/commands/devflow.md +20 -0
  29. package/data/free-skills/devflow-docs/plugin/commands/docs/generate.md +17 -0
  30. package/data/free-skills/devflow-docs/plugin/commands/docs/parse.md +19 -0
  31. package/data/free-skills/devflow-docs/plugin/commands/docs.md +26 -0
  32. package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/SKILL.md +59 -0
  33. package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/assets/sample-output.md +114 -0
  34. package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/references/extraction-techniques.md +115 -0
  35. package/data/free-skills/devflow-docs/plugin/skills/pdf-processor/references/ocr-strategies.md +167 -0
  36. package/data/free-skills/devflow-docs/template/agents/docs-specialist.md +35 -0
  37. package/data/free-skills/devflow-docs/template/workflows/docs-workflow.md +70 -0
  38. package/data/free-skills/devflow-postproject/manifest.json +13 -0
  39. package/data/free-skills/devflow-postproject/plugin/commands/devflow.md +34 -0
  40. package/data/free-skills/devflow-postproject/plugin/commands/postproject/handover.md +21 -0
  41. package/data/free-skills/devflow-postproject/plugin/commands/postproject/retro.md +21 -0
  42. package/data/free-skills/devflow-postproject/plugin/commands/postproject/support.md +21 -0
  43. package/data/free-skills/devflow-postproject/plugin/commands/postproject.md +32 -0
  44. package/data/free-skills/devflow-postproject/plugin/skills/retrospective/SKILL.md +70 -0
  45. package/data/free-skills/devflow-postproject/plugin/skills/retrospective/assets/sample-output.md +79 -0
  46. package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/facilitation-techniques.md +178 -0
  47. package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/lessons-learned-template.md +118 -0
  48. package/data/free-skills/devflow-postproject/plugin/skills/retrospective/references/retro-techniques.md +100 -0
  49. package/data/free-skills/devflow-postproject/template/agents/transition-manager.md +71 -0
  50. package/data/free-skills/devflow-postproject/template/workflows/transition-workflow.md +72 -0
  51. package/data/free-skills/devflow-presale/manifest.json +15 -0
  52. package/data/free-skills/devflow-presale/plugin/commands/devflow.md +47 -0
  53. package/data/free-skills/devflow-presale/plugin/commands/presale/analyze.md +30 -0
  54. package/data/free-skills/devflow-presale/plugin/commands/presale/estimate.md +30 -0
  55. package/data/free-skills/devflow-presale/plugin/commands/presale/price.md +30 -0
  56. package/data/free-skills/devflow-presale/plugin/commands/presale/propose.md +30 -0
  57. package/data/free-skills/devflow-presale/plugin/commands/presale.md +42 -0
  58. package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/SKILL.md +63 -0
  59. package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/assets/sample-output.md +129 -0
  60. package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/references/extraction-framework.md +140 -0
  61. package/data/free-skills/devflow-presale/plugin/skills/requirement-analysis/references/output-template.md +132 -0
  62. package/data/free-skills/devflow-presale/template/agents/presale-lead.md +83 -0
  63. package/data/free-skills/devflow-presale/template/agents/proposal-reviewer.md +63 -0
  64. package/data/free-skills/devflow-presale/template/workflows/presale-workflow.md +70 -0
  65. package/data/registry/categories.json +7 -0
  66. package/data/registry/packages.json +184 -0
  67. package/data/shared/framework/agents/brainstormer.md +74 -0
  68. package/data/shared/framework/agents/code-reviewer.md +87 -0
  69. package/data/shared/framework/agents/debugger.md +84 -0
  70. package/data/shared/framework/agents/docs-manager.md +55 -0
  71. package/data/shared/framework/agents/git-manager.md +59 -0
  72. package/data/shared/framework/agents/planner.md +68 -0
  73. package/data/shared/framework/agents/researcher.md +66 -0
  74. package/data/shared/framework/agents/tester.md +65 -0
  75. package/data/shared/framework/commands/cook/auto.md +27 -0
  76. package/data/shared/framework/commands/cook.md +45 -0
  77. package/data/shared/framework/commands/fix/ci.md +21 -0
  78. package/data/shared/framework/commands/fix/test.md +26 -0
  79. package/data/shared/framework/commands/fix/types.md +29 -0
  80. package/data/shared/framework/commands/fix.md +26 -0
  81. package/data/shared/framework/commands/git/cm.md +37 -0
  82. package/data/shared/framework/commands/git/pr.md +40 -0
  83. package/data/shared/framework/config/CLAUDE.md.template +26 -0
  84. package/data/shared/framework/config/settings.json +41 -0
  85. package/data/shared/framework/config/skillstore.config.json +29 -0
  86. package/data/shared/framework/hooks/discord-notify.sh +85 -0
  87. package/data/shared/framework/hooks/docs-sync.sh +53 -0
  88. package/data/shared/framework/hooks/modularization-hook.js +103 -0
  89. package/data/shared/framework/hooks/notification.js +94 -0
  90. package/data/shared/framework/hooks/quality-gate.js +109 -0
  91. package/data/shared/framework/hooks/scout-block.js +77 -0
  92. package/data/shared/framework/hooks/telegram-notify.sh +77 -0
  93. package/data/shared/framework/protocols/error-recovery.md +80 -0
  94. package/data/shared/framework/protocols/orchestration-protocol.md +112 -0
  95. package/data/shared/framework/quality/review-protocol.md +76 -0
  96. package/data/shared/framework/quality/verification-protocol.md +66 -0
  97. package/data/shared/framework/rules/development-rules.md +75 -0
  98. package/data/shared/framework/skills/backend-development/SKILL.md +77 -0
  99. package/data/shared/framework/skills/backend-development/assets/sample-output.md +175 -0
  100. package/data/shared/framework/skills/backend-development/references/advanced-patterns.md +180 -0
  101. package/data/shared/framework/skills/backend-development/references/api-design-guide.md +160 -0
  102. package/data/shared/framework/skills/backend-development/references/architecture-patterns.md +183 -0
  103. package/data/shared/framework/skills/backend-development/references/observability-resilience.md +155 -0
  104. package/data/shared/framework/skills/backend-development/references/troubleshooting.md +199 -0
  105. package/data/shared/framework/skills/codebase-analysis/SKILL.md +72 -0
  106. package/data/shared/framework/skills/codebase-analysis/assets/sample-output.md +263 -0
  107. package/data/shared/framework/skills/codebase-analysis/references/analysis-techniques.md +241 -0
  108. package/data/shared/framework/skills/codebase-analysis/references/dependency-mapping.md +280 -0
  109. package/data/shared/framework/skills/codebase-analysis/references/tech-debt-assessment.md +208 -0
  110. package/data/shared/framework/skills/databases/SKILL.md +72 -0
  111. package/data/shared/framework/skills/databases/assets/sample-output.md +212 -0
  112. package/data/shared/framework/skills/databases/references/advanced-data-patterns.md +259 -0
  113. package/data/shared/framework/skills/databases/references/query-optimization.md +214 -0
  114. package/data/shared/framework/skills/databases/references/schema-design.md +159 -0
  115. package/data/shared/framework/skills/databases/references/troubleshooting.md +214 -0
  116. package/data/shared/framework/skills/debugging-investigation/SKILL.md +84 -0
  117. package/data/shared/framework/skills/debugging-investigation/assets/sample-output.md +314 -0
  118. package/data/shared/framework/skills/debugging-investigation/references/systematic-debugging.md +197 -0
  119. package/data/shared/framework/skills/debugging-investigation/references/tool-specific-guides.md +202 -0
  120. package/data/shared/framework/skills/debugging-investigation/references/troubleshooting-patterns.md +196 -0
  121. package/data/shared/framework/skills/frontend-development/SKILL.md +67 -0
  122. package/data/shared/framework/skills/frontend-development/assets/sample-output.md +110 -0
  123. package/data/shared/framework/skills/frontend-development/references/component-patterns.md +112 -0
  124. package/data/shared/framework/skills/frontend-development/references/performance-guide.md +169 -0
  125. package/data/shared/framework/skills/frontend-development/references/routing-forms-realtime.md +374 -0
  126. package/data/shared/framework/skills/frontend-development/references/ssr-rsc-patterns.md +284 -0
  127. package/data/shared/framework/skills/frontend-development/references/troubleshooting.md +154 -0
  128. package/data/shared/framework/skills/mobile-development/SKILL.md +67 -0
  129. package/data/shared/framework/skills/mobile-development/assets/sample-output.md +382 -0
  130. package/data/shared/framework/skills/mobile-development/references/mobile-patterns.md +681 -0
  131. package/data/shared/framework/skills/mobile-development/references/mobile-performance.md +524 -0
  132. package/data/shared/framework/skills/mobile-development/references/troubleshooting.md +158 -0
  133. package/data/shared/framework/skills/security-audit/SKILL.md +83 -0
  134. package/data/shared/framework/skills/security-audit/assets/sample-output.md +451 -0
  135. package/data/shared/framework/skills/security-audit/references/owasp-checklist.md +580 -0
  136. package/data/shared/framework/skills/security-audit/references/secure-coding-patterns.md +433 -0
  137. package/data/shared/framework/skills/security-audit/references/vulnerability-remediation.md +331 -0
  138. package/data/shared/framework/skills/ui-generation/SKILL.md +70 -0
  139. package/data/shared/framework/skills/ui-generation/assets/sample-output.md +139 -0
  140. package/data/shared/framework/skills/ui-generation/references/accessibility-responsive.md +127 -0
  141. package/data/shared/framework/skills/ui-generation/references/compound-components.md +252 -0
  142. package/data/shared/framework/skills/ui-generation/references/generation-patterns.md +110 -0
  143. package/data/shared/framework/skills/ui-generation/references/storybook-design-system.md +278 -0
  144. package/data/shared/framework/skills/ui-generation/references/troubleshooting.md +198 -0
  145. package/data/shared/framework/workflows/documentation-management.md +58 -0
  146. package/data/shared/framework/workflows/primary-workflow.md +88 -0
  147. package/dist/commands/activate.d.ts +3 -0
  148. package/dist/commands/activate.d.ts.map +1 -0
  149. package/dist/commands/activate.js +34 -0
  150. package/dist/commands/activate.js.map +1 -0
  151. package/dist/commands/bundle.d.ts +3 -0
  152. package/dist/commands/bundle.d.ts.map +1 -0
  153. package/dist/commands/bundle.js +64 -0
  154. package/dist/commands/bundle.js.map +1 -0
  155. package/dist/commands/install.d.ts +3 -0
  156. package/dist/commands/install.d.ts.map +1 -0
  157. package/dist/commands/install.js +99 -0
  158. package/dist/commands/install.js.map +1 -0
  159. package/dist/commands/list.d.ts +3 -0
  160. package/dist/commands/list.d.ts.map +1 -0
  161. package/dist/commands/list.js +37 -0
  162. package/dist/commands/list.js.map +1 -0
  163. package/dist/commands/search.d.ts +3 -0
  164. package/dist/commands/search.d.ts.map +1 -0
  165. package/dist/commands/search.js +30 -0
  166. package/dist/commands/search.js.map +1 -0
  167. package/dist/commands/status.d.ts +3 -0
  168. package/dist/commands/status.d.ts.map +1 -0
  169. package/dist/commands/status.js +35 -0
  170. package/dist/commands/status.js.map +1 -0
  171. package/dist/commands/update.d.ts +3 -0
  172. package/dist/commands/update.d.ts.map +1 -0
  173. package/dist/commands/update.js +68 -0
  174. package/dist/commands/update.js.map +1 -0
  175. package/dist/download/cache.d.ts +3 -0
  176. package/dist/download/cache.d.ts.map +1 -0
  177. package/dist/download/cache.js +18 -0
  178. package/dist/download/cache.js.map +1 -0
  179. package/dist/download/client.d.ts +2 -0
  180. package/dist/download/client.d.ts.map +1 -0
  181. package/dist/download/client.js +58 -0
  182. package/dist/download/client.js.map +1 -0
  183. package/dist/index.d.ts +3 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +23 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/installer/file-copier.d.ts +6 -0
  188. package/dist/installer/file-copier.d.ts.map +1 -0
  189. package/dist/installer/file-copier.js +32 -0
  190. package/dist/installer/file-copier.js.map +1 -0
  191. package/dist/installer/plugin-installer.d.ts +12 -0
  192. package/dist/installer/plugin-installer.d.ts.map +1 -0
  193. package/dist/installer/plugin-installer.js +33 -0
  194. package/dist/installer/plugin-installer.js.map +1 -0
  195. package/dist/installer/template-installer.d.ts +12 -0
  196. package/dist/installer/template-installer.d.ts.map +1 -0
  197. package/dist/installer/template-installer.js +45 -0
  198. package/dist/installer/template-installer.js.map +1 -0
  199. package/dist/license/crypto.d.ts +16 -0
  200. package/dist/license/crypto.d.ts.map +1 -0
  201. package/dist/license/crypto.js +50 -0
  202. package/dist/license/crypto.js.map +1 -0
  203. package/dist/license/license-store.d.ts +19 -0
  204. package/dist/license/license-store.d.ts.map +1 -0
  205. package/dist/license/license-store.js +99 -0
  206. package/dist/license/license-store.js.map +1 -0
  207. package/dist/license/validator.d.ts +32 -0
  208. package/dist/license/validator.d.ts.map +1 -0
  209. package/dist/license/validator.js +81 -0
  210. package/dist/license/validator.js.map +1 -0
  211. package/dist/registry/loader.d.ts +30 -0
  212. package/dist/registry/loader.d.ts.map +1 -0
  213. package/dist/registry/loader.js +22 -0
  214. package/dist/registry/loader.js.map +1 -0
  215. package/dist/registry/search-engine.d.ts +9 -0
  216. package/dist/registry/search-engine.d.ts.map +1 -0
  217. package/dist/registry/search-engine.js +30 -0
  218. package/dist/registry/search-engine.js.map +1 -0
  219. package/dist/utils/config.d.ts +14 -0
  220. package/dist/utils/config.d.ts.map +1 -0
  221. package/dist/utils/config.js +28 -0
  222. package/dist/utils/config.js.map +1 -0
  223. package/dist/utils/logger.d.ts +9 -0
  224. package/dist/utils/logger.d.ts.map +1 -0
  225. package/dist/utils/logger.js +22 -0
  226. package/dist/utils/logger.js.map +1 -0
  227. package/dist/utils/paths.d.ts +20 -0
  228. package/dist/utils/paths.d.ts.map +1 -0
  229. package/dist/utils/paths.js +79 -0
  230. package/dist/utils/paths.js.map +1 -0
  231. package/package.json +54 -0
@@ -0,0 +1,99 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes, scryptSync, } from "node:crypto";
2
+ import { hostname, userInfo } from "node:os";
3
+ import fse from "fs-extra";
4
+ import { LICENSE_PATH, SKILLSTORE_HOME } from "../utils/paths.js";
5
+ import { parseLicenseKey, validateLicenseKey, } from "./crypto.js";
6
+ function getDerivedKey() {
7
+ const machineId = `${hostname()}-${userInfo().username}-skillstore-v1`;
8
+ return scryptSync(machineId, "skillstore-salt-v1", 32);
9
+ }
10
+ function encrypt(data) {
11
+ const key = getDerivedKey();
12
+ const iv = randomBytes(16);
13
+ const cipher = createCipheriv("aes-256-gcm", key, iv);
14
+ let encrypted = cipher.update(data, "utf8", "hex");
15
+ encrypted += cipher.final("hex");
16
+ const authTag = cipher.getAuthTag().toString("hex");
17
+ return `${iv.toString("hex")}:${authTag}:${encrypted}`;
18
+ }
19
+ function decrypt(data) {
20
+ const key = getDerivedKey();
21
+ const [ivHex, authTagHex, encrypted] = data.split(":");
22
+ const iv = Buffer.from(ivHex, "hex");
23
+ const authTag = Buffer.from(authTagHex, "hex");
24
+ const decipher = createDecipheriv("aes-256-gcm", key, iv);
25
+ decipher.setAuthTag(authTag);
26
+ let decrypted = decipher.update(encrypted, "hex", "utf8");
27
+ decrypted += decipher.final("utf8");
28
+ return decrypted;
29
+ }
30
+ export async function loadLicenseStore() {
31
+ await fse.ensureDir(SKILLSTORE_HOME);
32
+ if (!(await fse.pathExists(LICENSE_PATH))) {
33
+ return { licenses: [] };
34
+ }
35
+ const raw = await fse.readFile(LICENSE_PATH, "utf8");
36
+ const trimmed = raw.trim();
37
+ // Migration: if file starts with '{', it's unencrypted JSON — migrate
38
+ if (trimmed.startsWith("{")) {
39
+ const store = JSON.parse(trimmed);
40
+ // Re-save as encrypted
41
+ await saveLicenseStore(store);
42
+ return store;
43
+ }
44
+ // Encrypted format: iv:authTag:ciphertext
45
+ try {
46
+ const decrypted = decrypt(trimmed);
47
+ return JSON.parse(decrypted);
48
+ }
49
+ catch {
50
+ // Corrupted file — start fresh
51
+ return { licenses: [] };
52
+ }
53
+ }
54
+ async function saveLicenseStore(store) {
55
+ await fse.ensureDir(SKILLSTORE_HOME);
56
+ const json = JSON.stringify(store, null, 2);
57
+ const encrypted = encrypt(json);
58
+ await fse.writeFile(LICENSE_PATH, encrypted, "utf8");
59
+ }
60
+ export async function activateLicense(key) {
61
+ if (!validateLicenseKey(key)) {
62
+ return { success: false, message: "Invalid license key" };
63
+ }
64
+ const parts = parseLicenseKey(key);
65
+ const store = await loadLicenseStore();
66
+ const existing = store.licenses.find((l) => l.key === key);
67
+ if (existing) {
68
+ return {
69
+ success: true,
70
+ message: "License already activated",
71
+ tier: parts.tier,
72
+ };
73
+ }
74
+ store.licenses.push({
75
+ key,
76
+ tier: parts.tier,
77
+ packageHash: parts.packageHash,
78
+ activatedAt: new Date().toISOString(),
79
+ });
80
+ await saveLicenseStore(store);
81
+ return {
82
+ success: true,
83
+ message: `License activated: ${parts.tier} tier`,
84
+ tier: parts.tier,
85
+ };
86
+ }
87
+ export async function hasLicenseForPackage(packageHash) {
88
+ const store = await loadLicenseStore();
89
+ return store.licenses.some((l) => l.packageHash === packageHash || l.tier === "BUNDLE");
90
+ }
91
+ export async function getActiveTier() {
92
+ const store = await loadLicenseStore();
93
+ if (store.licenses.some((l) => l.tier === "BUNDLE"))
94
+ return "BUNDLE";
95
+ if (store.licenses.some((l) => l.tier === "SINGLE"))
96
+ return "SINGLE";
97
+ return "FREE";
98
+ }
99
+ //# sourceMappingURL=license-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-store.js","sourceRoot":"","sources":["../../src/license/license-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface AccessResult {
2
+ allowed: boolean;
3
+ reason?: string;
4
+ }
5
+ export interface PackageAccessResult {
6
+ allowed: boolean;
7
+ blockedSkills: string[];
8
+ freeSkillsAvailable: string[];
9
+ }
10
+ /**
11
+ * Framework skills that are always free regardless of license tier.
12
+ * These are core skills shared across all packages.
13
+ */
14
+ export declare const FRAMEWORK_SKILLS: string[];
15
+ /**
16
+ * Check if a skill is a framework skill (always free).
17
+ */
18
+ export declare function isFrameworkSkill(skillName: string): boolean;
19
+ /**
20
+ * Check if user can access a specific skill within a package.
21
+ * Framework skills: always accessible.
22
+ * Free tier: first skill of each package is free.
23
+ * Single tier: all skills in licensed packages.
24
+ * Bundle tier: all skills in all packages.
25
+ */
26
+ export declare function checkSkillAccess(packageName: string, skillName: string, freeSkills: string[]): Promise<AccessResult>;
27
+ /**
28
+ * Bulk check access for all skills in a package.
29
+ * Returns which skills are blocked and which free skills are available.
30
+ */
31
+ export declare function checkPackageAccess(packageName: string, allSkills: string[], freeSkills: string[]): Promise<PackageAccessResult>;
32
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/license/validator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EASpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,YAAY,CAAC,CAiCvB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAkB9B"}
@@ -0,0 +1,81 @@
1
+ import { getPackageHash } from "./crypto.js";
2
+ import { getActiveTier, hasLicenseForPackage } from "./license-store.js";
3
+ /**
4
+ * Framework skills that are always free regardless of license tier.
5
+ * These are core skills shared across all packages.
6
+ */
7
+ export const FRAMEWORK_SKILLS = [
8
+ "frontend-development",
9
+ "backend-development",
10
+ "databases",
11
+ "mobile-development",
12
+ "ui-generation",
13
+ "debugging-investigation",
14
+ "codebase-analysis",
15
+ "security-audit",
16
+ ];
17
+ /**
18
+ * Check if a skill is a framework skill (always free).
19
+ */
20
+ export function isFrameworkSkill(skillName) {
21
+ return FRAMEWORK_SKILLS.includes(skillName);
22
+ }
23
+ /**
24
+ * Check if user can access a specific skill within a package.
25
+ * Framework skills: always accessible.
26
+ * Free tier: first skill of each package is free.
27
+ * Single tier: all skills in licensed packages.
28
+ * Bundle tier: all skills in all packages.
29
+ */
30
+ export async function checkSkillAccess(packageName, skillName, freeSkills) {
31
+ // Framework skills are always accessible
32
+ if (isFrameworkSkill(skillName)) {
33
+ return { allowed: true };
34
+ }
35
+ // Free skills are always accessible
36
+ if (freeSkills.includes(skillName)) {
37
+ return { allowed: true };
38
+ }
39
+ const tier = await getActiveTier();
40
+ if (tier === "BUNDLE") {
41
+ return { allowed: true };
42
+ }
43
+ if (tier === "SINGLE") {
44
+ const hash = getPackageHash(packageName);
45
+ const hasLicense = await hasLicenseForPackage(hash);
46
+ if (hasLicense) {
47
+ return { allowed: true };
48
+ }
49
+ return {
50
+ allowed: false,
51
+ reason: `No license for package ${packageName}. Run: skillstore activate <license-key>`,
52
+ };
53
+ }
54
+ return {
55
+ allowed: false,
56
+ reason: `Skill "${skillName}" requires a license. Free preview includes: ${freeSkills.join(", ")}`,
57
+ };
58
+ }
59
+ /**
60
+ * Bulk check access for all skills in a package.
61
+ * Returns which skills are blocked and which free skills are available.
62
+ */
63
+ export async function checkPackageAccess(packageName, allSkills, freeSkills) {
64
+ const blockedSkills = [];
65
+ const freeSkillsAvailable = [];
66
+ for (const skill of allSkills) {
67
+ const result = await checkSkillAccess(packageName, skill, freeSkills);
68
+ if (result.allowed) {
69
+ freeSkillsAvailable.push(skill);
70
+ }
71
+ else {
72
+ blockedSkills.push(skill);
73
+ }
74
+ }
75
+ return {
76
+ allowed: blockedSkills.length === 0,
77
+ blockedSkills,
78
+ freeSkillsAvailable,
79
+ };
80
+ }
81
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/license/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAazE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,sBAAsB;IACtB,qBAAqB;IACrB,WAAW;IACX,oBAAoB;IACpB,eAAe;IACf,yBAAyB;IACzB,mBAAmB;IACnB,gBAAgB;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,SAAiB,EACjB,UAAoB;IAEpB,yCAAyC;IACzC,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IAEnC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,0BAA0B,WAAW,0CAA0C;SACxF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,UAAU,SAAS,gDAAgD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KACnG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,SAAmB,EACnB,UAAoB;IAEpB,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,mBAAmB,GAAa,EAAE,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;QACnC,aAAa;QACb,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface PackageInfo {
2
+ name: string;
3
+ displayName: string;
4
+ description: string;
5
+ version: string;
6
+ category: string;
7
+ skills: SkillInfo[];
8
+ freeSkills: string[];
9
+ price: {
10
+ single: number;
11
+ currency: string;
12
+ };
13
+ }
14
+ export interface SkillInfo {
15
+ name: string;
16
+ description: string;
17
+ }
18
+ export interface CategoryInfo {
19
+ id: string;
20
+ name: string;
21
+ description: string;
22
+ }
23
+ export interface Registry {
24
+ packages: PackageInfo[];
25
+ categories: CategoryInfo[];
26
+ }
27
+ export declare function loadRegistry(): Promise<Registry>;
28
+ export declare function getPackage(name: string): Promise<PackageInfo | undefined>;
29
+ export declare function getPackagesByCategory(category: string): Promise<PackageInfo[]>;
30
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAWtD;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAGlC;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,EAAE,CAAC,CAGxB"}
@@ -0,0 +1,22 @@
1
+ import fse from "fs-extra";
2
+ import { join } from "node:path";
3
+ import { getRegistryPath } from "../utils/paths.js";
4
+ export async function loadRegistry() {
5
+ const registryPath = getRegistryPath();
6
+ const packagesPath = join(registryPath, "packages.json");
7
+ const categoriesPath = join(registryPath, "categories.json");
8
+ const [packages, categories] = await Promise.all([
9
+ fse.readJson(packagesPath),
10
+ fse.readJson(categoriesPath),
11
+ ]);
12
+ return { packages, categories };
13
+ }
14
+ export async function getPackage(name) {
15
+ const { packages } = await loadRegistry();
16
+ return packages.find((p) => p.name === name);
17
+ }
18
+ export async function getPackagesByCategory(category) {
19
+ const { packages } = await loadRegistry();
20
+ return packages.filter((p) => p.category === category);
21
+ }
22
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAgCpD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAE7D,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,GAAG,CAAC,QAAQ,CAAC,YAAY,CAA2B;QACpD,GAAG,CAAC,QAAQ,CAAC,cAAc,CAA4B;KACxD,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY;IAEZ,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB;IAEhB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IAC1C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PackageInfo, SkillInfo } from "./loader.js";
2
+ interface SearchResult {
3
+ package: PackageInfo;
4
+ matchedSkills: SkillInfo[];
5
+ score: number;
6
+ }
7
+ export declare function searchPackages(packages: PackageInfo[], query: string): SearchResult[];
8
+ export {};
9
+ //# sourceMappingURL=search-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../src/registry/search-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,UAAU,YAAY;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,GACZ,YAAY,EAAE,CA8BhB"}
@@ -0,0 +1,30 @@
1
+ import Fuse from "fuse.js";
2
+ export function searchPackages(packages, query) {
3
+ // Search in package names and descriptions
4
+ const packageFuse = new Fuse(packages, {
5
+ keys: [
6
+ { name: "name", weight: 2 },
7
+ { name: "displayName", weight: 2 },
8
+ { name: "description", weight: 1 },
9
+ { name: "skills.name", weight: 1.5 },
10
+ { name: "skills.description", weight: 0.5 },
11
+ ],
12
+ threshold: 0.4,
13
+ includeScore: true,
14
+ });
15
+ const results = packageFuse.search(query);
16
+ return results.map((r) => {
17
+ // Find which skills matched
18
+ const skillFuse = new Fuse(r.item.skills, {
19
+ keys: ["name", "description"],
20
+ threshold: 0.4,
21
+ });
22
+ const matchedSkills = skillFuse.search(query).map((s) => s.item);
23
+ return {
24
+ package: r.item,
25
+ matchedSkills,
26
+ score: r.score ?? 0,
27
+ };
28
+ });
29
+ }
30
+ //# sourceMappingURL=search-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.js","sourceRoot":"","sources":["../../src/registry/search-engine.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAS3B,MAAM,UAAU,cAAc,CAC5B,QAAuB,EACvB,KAAa;IAEb,2CAA2C;IAC3C,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE;QACrC,IAAI,EAAE;YACJ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;YAC3B,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;YAClC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;YAClC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;YACpC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE;SAC5C;QACD,SAAS,EAAE,GAAG;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,4BAA4B;QAC5B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;YACxC,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;YAC7B,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjE,OAAO;YACL,OAAO,EAAE,CAAC,CAAC,IAAI;YACf,aAAa;YACb,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface SkillStoreConfig {
2
+ installedPackages: InstalledPackage[];
3
+ }
4
+ export interface InstalledPackage {
5
+ name: string;
6
+ version: string;
7
+ mode: "plugin" | "template";
8
+ installedAt: string;
9
+ projectDir: string;
10
+ }
11
+ export declare function loadConfig(): Promise<SkillStoreConfig>;
12
+ export declare function saveConfig(config: SkillStoreConfig): Promise<void>;
13
+ export declare function addInstalledPackage(pkg: InstalledPackage): Promise<void>;
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAM5D;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9E"}
@@ -0,0 +1,28 @@
1
+ import fse from "fs-extra";
2
+ import { CONFIG_PATH, SKILLSTORE_HOME } from "./paths.js";
3
+ const DEFAULT_CONFIG = {
4
+ installedPackages: [],
5
+ };
6
+ export async function loadConfig() {
7
+ await fse.ensureDir(SKILLSTORE_HOME);
8
+ if (await fse.pathExists(CONFIG_PATH)) {
9
+ return fse.readJson(CONFIG_PATH);
10
+ }
11
+ return { ...DEFAULT_CONFIG };
12
+ }
13
+ export async function saveConfig(config) {
14
+ await fse.ensureDir(SKILLSTORE_HOME);
15
+ await fse.writeJson(CONFIG_PATH, config, { spaces: 2 });
16
+ }
17
+ export async function addInstalledPackage(pkg) {
18
+ const config = await loadConfig();
19
+ const existing = config.installedPackages.findIndex((p) => p.name === pkg.name && p.projectDir === pkg.projectDir);
20
+ if (existing >= 0) {
21
+ config.installedPackages[existing] = pkg;
22
+ }
23
+ else {
24
+ config.installedPackages.push(pkg);
25
+ }
26
+ await saveConfig(config);
27
+ }
28
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAc1D,MAAM,cAAc,GAAqB;IACvC,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAwB;IACvD,MAAM,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACrC,MAAM,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAqB;IAC7D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,SAAS,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,CAC9D,CAAC;IACF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const logger: {
2
+ info(msg: string): void;
3
+ success(msg: string): void;
4
+ warn(msg: string): void;
5
+ error(msg: string): void;
6
+ dim(msg: string): void;
7
+ table(rows: Record<string, string>[]): void;
8
+ };
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;cACP,MAAM;iBAGH,MAAM;cAGT,MAAM;eAGL,MAAM;aAGR,MAAM;gBAGH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;CAGrC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import chalk from "chalk";
2
+ export const logger = {
3
+ info(msg) {
4
+ console.log(chalk.blue("ℹ"), msg);
5
+ },
6
+ success(msg) {
7
+ console.log(chalk.green("✔"), msg);
8
+ },
9
+ warn(msg) {
10
+ console.log(chalk.yellow("⚠"), msg);
11
+ },
12
+ error(msg) {
13
+ console.error(chalk.red("✖"), msg);
14
+ },
15
+ dim(msg) {
16
+ console.log(chalk.dim(msg));
17
+ },
18
+ table(rows) {
19
+ console.table(rows);
20
+ },
21
+ };
22
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,CAAC,GAAW;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,GAAW;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,IAA8B;QAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const SKILLSTORE_HOME: string;
2
+ export declare const LICENSE_PATH: string;
3
+ export declare const CONFIG_PATH: string;
4
+ export declare function isNpmMode(): boolean;
5
+ export declare function getHomePath(): string;
6
+ export declare function getRegistryPath(): string;
7
+ export declare function getPackagesPath(): string;
8
+ export declare function getSharedFrameworkPath(): string;
9
+ export declare function getBundlesPath(): string;
10
+ export declare function getClaudeDir(projectDir?: string): string;
11
+ export declare function getSkillsDir(projectDir?: string): string;
12
+ export declare function getCommandsDir(projectDir?: string): string;
13
+ export declare function getAgentsDir(projectDir?: string): string;
14
+ export declare function getWorkflowsDir(projectDir?: string): string;
15
+ export declare function getConfigDir(projectDir?: string): string;
16
+ export declare function getRulesDir(projectDir?: string): string;
17
+ export declare function getHooksDir(projectDir?: string): string;
18
+ export declare function getProtocolsDir(projectDir?: string): string;
19
+ export declare function getQualityDir(projectDir?: string): string;
20
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,QAAiC,CAAC;AAC9D,eAAO,MAAM,YAAY,QAAwC,CAAC;AAClE,eAAO,MAAM,WAAW,QAAuC,CAAC;AAKhE,wBAAgB,SAAS,IAAI,OAAO,CAKnC;AAMD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAK/C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED,wBAAgB,YAAY,CAAC,UAAU,GAAE,MAAsB,GAAG,MAAM,CAEvE;AAED,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,79 @@
1
+ import { homedir } from "node:os";
2
+ import { join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { existsSync } from "node:fs";
5
+ const __dirname = fileURLToPath(new URL(".", import.meta.url));
6
+ export const SKILLSTORE_HOME = join(homedir(), ".skillstore");
7
+ export const LICENSE_PATH = join(SKILLSTORE_HOME, "license.json");
8
+ export const CONFIG_PATH = join(SKILLSTORE_HOME, "config.json");
9
+ // Detect npm global install vs monorepo dev
10
+ // Dev mode: ../../../packages/ exists (monorepo structure)
11
+ // npm mode: ../../data/ exists but ../../../packages/ does NOT
12
+ export function isNpmMode() {
13
+ const devPackagesDir = resolve(__dirname, "../../../packages");
14
+ if (existsSync(devPackagesDir))
15
+ return false;
16
+ const dataDir = resolve(__dirname, "../../data");
17
+ return existsSync(dataDir);
18
+ }
19
+ function getDataDir() {
20
+ return resolve(__dirname, "../../data");
21
+ }
22
+ export function getHomePath() {
23
+ return SKILLSTORE_HOME;
24
+ }
25
+ export function getRegistryPath() {
26
+ if (isNpmMode()) {
27
+ return resolve(getDataDir(), "registry");
28
+ }
29
+ return resolve(__dirname, "../../../registry");
30
+ }
31
+ export function getPackagesPath() {
32
+ if (isNpmMode()) {
33
+ return resolve(getDataDir(), "free-skills");
34
+ }
35
+ return resolve(__dirname, "../../../packages");
36
+ }
37
+ export function getSharedFrameworkPath() {
38
+ if (isNpmMode()) {
39
+ return resolve(getDataDir(), "shared", "framework");
40
+ }
41
+ return resolve(__dirname, "../../../shared/framework");
42
+ }
43
+ export function getBundlesPath() {
44
+ if (isNpmMode()) {
45
+ return resolve(getDataDir(), "bundles");
46
+ }
47
+ return resolve(__dirname, "../../../bundles");
48
+ }
49
+ export function getClaudeDir(projectDir = process.cwd()) {
50
+ return join(projectDir, ".claude");
51
+ }
52
+ export function getSkillsDir(projectDir) {
53
+ return join(getClaudeDir(projectDir), "skills");
54
+ }
55
+ export function getCommandsDir(projectDir) {
56
+ return join(getClaudeDir(projectDir), "commands");
57
+ }
58
+ export function getAgentsDir(projectDir) {
59
+ return join(getClaudeDir(projectDir), "agents");
60
+ }
61
+ export function getWorkflowsDir(projectDir) {
62
+ return join(getClaudeDir(projectDir), "workflows");
63
+ }
64
+ export function getConfigDir(projectDir) {
65
+ return join(getClaudeDir(projectDir), "config");
66
+ }
67
+ export function getRulesDir(projectDir) {
68
+ return join(getClaudeDir(projectDir), "rules");
69
+ }
70
+ export function getHooksDir(projectDir) {
71
+ return join(getClaudeDir(projectDir), "hooks");
72
+ }
73
+ export function getProtocolsDir(projectDir) {
74
+ return join(getClaudeDir(projectDir), "protocols");
75
+ }
76
+ export function getQualityDir(projectDir) {
77
+ return join(getClaudeDir(projectDir), "quality");
78
+ }
79
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;AAEhE,4CAA4C;AAC5C,2DAA2D;AAC3D,+DAA+D;AAC/D,MAAM,UAAU,SAAS;IACvB,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC/D,IAAI,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,aAAqB,OAAO,CAAC,GAAG,EAAE;IAC7D,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAmB;IAChD,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAmB;IACjD,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAmB;IAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAmB;IAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAmB;IACjD,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAmB;IAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "skillstore-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool for SkillStore — install and manage Claude Code skill packages",
5
+ "type": "module",
6
+ "bin": {
7
+ "skillstore": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "data"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "test": "vitest",
17
+ "lint": "tsc --noEmit",
18
+ "prepublishOnly": "npm run build && tsx scripts/prepare-publish.ts"
19
+ },
20
+ "keywords": [
21
+ "skillstore",
22
+ "claude",
23
+ "claude-code",
24
+ "ai",
25
+ "skills",
26
+ "cli"
27
+ ],
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/ddviet/SkillStore.git",
32
+ "directory": "cli"
33
+ },
34
+ "homepage": "https://skillstore.dev",
35
+ "dependencies": {
36
+ "chalk": "^5.3.0",
37
+ "commander": "^12.1.0",
38
+ "fs-extra": "^11.2.0",
39
+ "fuse.js": "^7.0.0",
40
+ "ora": "^8.1.0",
41
+ "tar": "^7.5.12"
42
+ },
43
+ "devDependencies": {
44
+ "@supabase/supabase-js": "^2.99.3",
45
+ "@types/fs-extra": "^11.0.4",
46
+ "@types/node": "^20.14.0",
47
+ "tsx": "^4.19.0",
48
+ "typescript": "^5.5.0",
49
+ "vitest": "^2.0.0"
50
+ },
51
+ "engines": {
52
+ "node": ">=18.0.0"
53
+ }
54
+ }