craftdesk 0.3.0 → 0.5.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 (215) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +1609 -132
  3. package/dist/commands/add.d.ts +5 -0
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +306 -8
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/convert.d.ts +8 -0
  8. package/dist/commands/convert.d.ts.map +1 -0
  9. package/dist/commands/convert.js +146 -0
  10. package/dist/commands/convert.js.map +1 -0
  11. package/dist/commands/detect-agents.d.ts +14 -0
  12. package/dist/commands/detect-agents.d.ts.map +1 -0
  13. package/dist/commands/detect-agents.js +86 -0
  14. package/dist/commands/detect-agents.js.map +1 -0
  15. package/dist/commands/embed.d.ts +14 -0
  16. package/dist/commands/embed.d.ts.map +1 -0
  17. package/dist/commands/embed.js +147 -0
  18. package/dist/commands/embed.js.map +1 -0
  19. package/dist/commands/info.d.ts +8 -0
  20. package/dist/commands/info.d.ts.map +1 -0
  21. package/dist/commands/info.js +66 -0
  22. package/dist/commands/info.js.map +1 -0
  23. package/dist/commands/init.d.ts +5 -0
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +8 -2
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/install.d.ts +5 -0
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +24 -4
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/list.d.ts +5 -0
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +75 -7
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/login.d.ts +8 -0
  36. package/dist/commands/login.d.ts.map +1 -0
  37. package/dist/commands/login.js +158 -0
  38. package/dist/commands/login.js.map +1 -0
  39. package/dist/commands/logout.d.ts +8 -0
  40. package/dist/commands/logout.d.ts.map +1 -0
  41. package/dist/commands/logout.js +51 -0
  42. package/dist/commands/logout.js.map +1 -0
  43. package/dist/commands/outdated.d.ts +23 -0
  44. package/dist/commands/outdated.d.ts.map +1 -0
  45. package/dist/commands/outdated.js +268 -0
  46. package/dist/commands/outdated.js.map +1 -0
  47. package/dist/commands/publish.d.ts +8 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +203 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/remove.d.ts +5 -0
  52. package/dist/commands/remove.d.ts.map +1 -1
  53. package/dist/commands/remove.js +51 -10
  54. package/dist/commands/remove.js.map +1 -1
  55. package/dist/commands/search.d.ts +8 -0
  56. package/dist/commands/search.d.ts.map +1 -0
  57. package/dist/commands/search.js +60 -0
  58. package/dist/commands/search.js.map +1 -0
  59. package/dist/commands/setup-multi-agent.d.ts +17 -0
  60. package/dist/commands/setup-multi-agent.d.ts.map +1 -0
  61. package/dist/commands/setup-multi-agent.js +188 -0
  62. package/dist/commands/setup-multi-agent.js.map +1 -0
  63. package/dist/commands/sync.d.ts +14 -0
  64. package/dist/commands/sync.d.ts.map +1 -0
  65. package/dist/commands/sync.js +144 -0
  66. package/dist/commands/sync.js.map +1 -0
  67. package/dist/commands/unembed.d.ts +14 -0
  68. package/dist/commands/unembed.d.ts.map +1 -0
  69. package/dist/commands/unembed.js +96 -0
  70. package/dist/commands/unembed.js.map +1 -0
  71. package/dist/commands/update.d.ts +8 -0
  72. package/dist/commands/update.d.ts.map +1 -0
  73. package/dist/commands/update.js +372 -0
  74. package/dist/commands/update.js.map +1 -0
  75. package/dist/commands/verify.d.ts +14 -0
  76. package/dist/commands/verify.d.ts.map +1 -0
  77. package/dist/commands/verify.js +143 -0
  78. package/dist/commands/verify.js.map +1 -0
  79. package/dist/commands/whoami.d.ts +8 -0
  80. package/dist/commands/whoami.d.ts.map +1 -0
  81. package/dist/commands/whoami.js +58 -0
  82. package/dist/commands/whoami.js.map +1 -0
  83. package/dist/converters/base-converter.d.ts +89 -0
  84. package/dist/converters/base-converter.d.ts.map +1 -0
  85. package/dist/converters/base-converter.js +249 -0
  86. package/dist/converters/base-converter.js.map +1 -0
  87. package/dist/converters/continue-converter.d.ts +53 -0
  88. package/dist/converters/continue-converter.d.ts.map +1 -0
  89. package/dist/converters/continue-converter.js +243 -0
  90. package/dist/converters/continue-converter.js.map +1 -0
  91. package/dist/converters/cursor-converter.d.ts +70 -0
  92. package/dist/converters/cursor-converter.d.ts.map +1 -0
  93. package/dist/converters/cursor-converter.js +272 -0
  94. package/dist/converters/cursor-converter.js.map +1 -0
  95. package/dist/index.js +56 -3
  96. package/dist/index.js.map +1 -1
  97. package/dist/services/agent-detector.d.ts +57 -0
  98. package/dist/services/agent-detector.d.ts.map +1 -0
  99. package/dist/services/agent-detector.js +146 -0
  100. package/dist/services/agent-detector.js.map +1 -0
  101. package/dist/services/config-manager.d.ts +128 -10
  102. package/dist/services/config-manager.d.ts.map +1 -1
  103. package/dist/services/config-manager.js +190 -18
  104. package/dist/services/config-manager.js.map +1 -1
  105. package/dist/services/converter.d.ts +53 -0
  106. package/dist/services/converter.d.ts.map +1 -0
  107. package/dist/services/converter.js +185 -0
  108. package/dist/services/converter.js.map +1 -0
  109. package/dist/services/craft-wrapper.d.ts +108 -0
  110. package/dist/services/craft-wrapper.d.ts.map +1 -0
  111. package/dist/services/craft-wrapper.js +268 -0
  112. package/dist/services/craft-wrapper.js.map +1 -0
  113. package/dist/services/git-resolver.d.ts +9 -3
  114. package/dist/services/git-resolver.d.ts.map +1 -1
  115. package/dist/services/git-resolver.js +44 -20
  116. package/dist/services/git-resolver.js.map +1 -1
  117. package/dist/services/gitignore-manager.d.ts +74 -0
  118. package/dist/services/gitignore-manager.d.ts.map +1 -0
  119. package/dist/services/gitignore-manager.js +188 -0
  120. package/dist/services/gitignore-manager.js.map +1 -0
  121. package/dist/services/installer.d.ts +60 -1
  122. package/dist/services/installer.d.ts.map +1 -1
  123. package/dist/services/installer.js +295 -20
  124. package/dist/services/installer.js.map +1 -1
  125. package/dist/services/multi-agent-sync.d.ts +88 -0
  126. package/dist/services/multi-agent-sync.d.ts.map +1 -0
  127. package/dist/services/multi-agent-sync.js +316 -0
  128. package/dist/services/multi-agent-sync.js.map +1 -0
  129. package/dist/services/plugin-resolver.d.ts +80 -0
  130. package/dist/services/plugin-resolver.d.ts.map +1 -0
  131. package/dist/services/plugin-resolver.js +183 -0
  132. package/dist/services/plugin-resolver.js.map +1 -0
  133. package/dist/services/registry-client.d.ts +132 -5
  134. package/dist/services/registry-client.d.ts.map +1 -1
  135. package/dist/services/registry-client.js +239 -34
  136. package/dist/services/registry-client.js.map +1 -1
  137. package/dist/services/settings-manager.d.ts +151 -0
  138. package/dist/services/settings-manager.d.ts.map +1 -0
  139. package/dist/services/settings-manager.js +333 -0
  140. package/dist/services/settings-manager.js.map +1 -0
  141. package/dist/types/claude-settings.d.ts +155 -0
  142. package/dist/types/claude-settings.d.ts.map +1 -0
  143. package/dist/types/claude-settings.js +20 -0
  144. package/dist/types/claude-settings.js.map +1 -0
  145. package/dist/types/converter.d.ts +98 -0
  146. package/dist/types/converter.d.ts.map +1 -0
  147. package/dist/types/converter.js +6 -0
  148. package/dist/types/converter.js.map +1 -0
  149. package/dist/types/craftdesk-json.d.ts +76 -3
  150. package/dist/types/craftdesk-json.d.ts.map +1 -1
  151. package/dist/types/craftdesk-lock.d.ts +62 -1
  152. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  153. package/dist/types/multi-agent.d.ts +85 -0
  154. package/dist/types/multi-agent.d.ts.map +1 -0
  155. package/dist/types/multi-agent.js +6 -0
  156. package/dist/types/multi-agent.js.map +1 -0
  157. package/dist/utils/crypto.d.ts +23 -0
  158. package/dist/utils/crypto.d.ts.map +1 -0
  159. package/dist/utils/crypto.js +52 -0
  160. package/dist/utils/crypto.js.map +1 -0
  161. package/dist/utils/file-system.d.ts +43 -0
  162. package/dist/utils/file-system.d.ts.map +1 -1
  163. package/dist/utils/file-system.js +45 -2
  164. package/dist/utils/file-system.js.map +1 -1
  165. package/dist/utils/logger.d.ts +75 -0
  166. package/dist/utils/logger.d.ts.map +1 -1
  167. package/dist/utils/logger.js +76 -1
  168. package/dist/utils/logger.js.map +1 -1
  169. package/dist/utils/version-utils.d.ts +63 -0
  170. package/dist/utils/version-utils.d.ts.map +1 -0
  171. package/dist/utils/version-utils.js +130 -0
  172. package/dist/utils/version-utils.js.map +1 -0
  173. package/package.json +36 -9
  174. package/.claude/settings.local.json +0 -19
  175. package/.github/workflows/ci.yml +0 -94
  176. package/API.md +0 -414
  177. package/TESTING.md +0 -263
  178. package/dist/commands/config.d.ts +0 -3
  179. package/dist/commands/config.d.ts.map +0 -1
  180. package/dist/commands/config.js +0 -56
  181. package/dist/commands/config.js.map +0 -1
  182. package/dist/types/config.d.ts +0 -17
  183. package/dist/types/config.d.ts.map +0 -1
  184. package/dist/types/config.js +0 -3
  185. package/dist/types/config.js.map +0 -1
  186. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  187. package/examples/craftdesk-all-sources.json +0 -79
  188. package/examples/craftdesk-git-monorepo.json +0 -41
  189. package/examples/craftdesk-multi-registry.json +0 -40
  190. package/examples/craftdesk-with-registries.json +0 -49
  191. package/examples/simple-craftdesk.json +0 -10
  192. package/src/commands/add.ts +0 -314
  193. package/src/commands/init.ts +0 -55
  194. package/src/commands/install.ts +0 -126
  195. package/src/commands/list.ts +0 -126
  196. package/src/commands/remove.ts +0 -82
  197. package/src/index.ts +0 -56
  198. package/src/services/config-manager.ts +0 -150
  199. package/src/services/git-resolver.ts +0 -373
  200. package/src/services/installer.ts +0 -314
  201. package/src/services/registry-client.ts +0 -163
  202. package/src/types/craftdesk-json.ts +0 -53
  203. package/src/types/craftdesk-lock.ts +0 -38
  204. package/src/utils/file-system.ts +0 -55
  205. package/src/utils/logger.ts +0 -82
  206. package/tests/fixtures/craftdesk-git.json +0 -17
  207. package/tests/fixtures/craftdesk.json +0 -15
  208. package/tests/helpers/test-utils.ts +0 -60
  209. package/tests/integration/init-command.test.ts +0 -70
  210. package/tests/integration/list-command.test.ts +0 -77
  211. package/tests/unit/config-manager.test.ts +0 -228
  212. package/tests/unit/git-resolver.test.ts +0 -303
  213. package/tests/unit/installer.test.ts +0 -105
  214. package/tsconfig.json +0 -20
  215. package/vitest.config.ts +0 -29
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ /**
3
+ * File system utilities for reading and writing CraftDesk configuration files
4
+ */
2
5
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
7
  };
@@ -12,42 +15,82 @@ exports.removeDir = removeDir;
12
15
  exports.exists = exists;
13
16
  const fs_extra_1 = __importDefault(require("fs-extra"));
14
17
  const path_1 = __importDefault(require("path"));
18
+ /**
19
+ * Reads and parses a craftdesk.json file from the specified directory
20
+ *
21
+ * @param dir - Directory containing craftdesk.json (defaults to current working directory)
22
+ * @returns Parsed CraftDeskJson object or null if file doesn't exist or is invalid
23
+ */
15
24
  async function readCraftDeskJson(dir = process.cwd()) {
16
25
  const filePath = path_1.default.join(dir, 'craftdesk.json');
17
26
  try {
18
27
  const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
19
28
  return JSON.parse(content);
20
29
  }
21
- catch (error) {
30
+ catch {
22
31
  return null;
23
32
  }
24
33
  }
34
+ /**
35
+ * Writes a CraftDeskJson object to craftdesk.json with pretty formatting
36
+ *
37
+ * @param data - CraftDeskJson object to write
38
+ * @param dir - Directory to write craftdesk.json to (defaults to current working directory)
39
+ */
25
40
  async function writeCraftDeskJson(data, dir = process.cwd()) {
26
41
  const filePath = path_1.default.join(dir, 'craftdesk.json');
27
42
  const content = JSON.stringify(data, null, 2);
28
43
  await fs_extra_1.default.writeFile(filePath, content, 'utf-8');
29
44
  }
45
+ /**
46
+ * Reads and parses a craftdesk.lock file from the specified directory
47
+ *
48
+ * @param dir - Directory containing craftdesk.lock (defaults to current working directory)
49
+ * @returns Parsed CraftDeskLock object or null if file doesn't exist or is invalid
50
+ */
30
51
  async function readCraftDeskLock(dir = process.cwd()) {
31
52
  const filePath = path_1.default.join(dir, 'craftdesk.lock');
32
53
  try {
33
54
  const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
34
55
  return JSON.parse(content);
35
56
  }
36
- catch (error) {
57
+ catch {
37
58
  return null;
38
59
  }
39
60
  }
61
+ /**
62
+ * Writes a CraftDeskLock object to craftdesk.lock with pretty formatting
63
+ *
64
+ * @param data - CraftDeskLock object to write
65
+ * @param dir - Directory to write craftdesk.lock to (defaults to current working directory)
66
+ */
40
67
  async function writeCraftDeskLock(data, dir = process.cwd()) {
41
68
  const filePath = path_1.default.join(dir, 'craftdesk.lock');
42
69
  const content = JSON.stringify(data, null, 2);
43
70
  await fs_extra_1.default.writeFile(filePath, content, 'utf-8');
44
71
  }
72
+ /**
73
+ * Ensures a directory exists, creating it and any parent directories if needed
74
+ *
75
+ * @param dirPath - Path to the directory to ensure exists
76
+ */
45
77
  async function ensureDir(dirPath) {
46
78
  await fs_extra_1.default.ensureDir(dirPath);
47
79
  }
80
+ /**
81
+ * Recursively removes a directory and all its contents
82
+ *
83
+ * @param dirPath - Path to the directory to remove
84
+ */
48
85
  async function removeDir(dirPath) {
49
86
  await fs_extra_1.default.remove(dirPath);
50
87
  }
88
+ /**
89
+ * Checks if a file or directory exists at the specified path
90
+ *
91
+ * @param filePath - Path to check for existence
92
+ * @returns True if the path exists and is accessible, false otherwise
93
+ */
51
94
  async function exists(filePath) {
52
95
  try {
53
96
  await fs_extra_1.default.access(filePath);
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":";;;;;AAKA,8CASC;AAED,gDAIC;AAED,8CASC;AAED,gDAIC;AAED,8BAEC;AAED,8BAEC;AAED,wBAOC;AAtDD,wDAA0B;AAC1B,gDAAwB;AAIjB,KAAK,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,IAAmB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACvF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,IAAmB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACvF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,kBAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAaH,8CASC;AAQD,gDAIC;AAQD,8CASC;AAQD,gDAIC;AAOD,8BAEC;AAOD,8BAEC;AAQD,wBAOC;AA9FD,wDAA0B;AAC1B,gDAAwB;AAIxB;;;;;GAKG;AACI,KAAK,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAAmB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACvF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAAmB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACvF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,kBAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,18 +1,93 @@
1
+ /**
2
+ * Console logging utility with color support and spinner functionality
3
+ * Provides consistent, formatted output for CLI operations
4
+ */
5
+ /**
6
+ * Logger class for formatted console output
7
+ * Supports success, error, warning, info, debug, and spinner states
8
+ */
1
9
  export declare class Logger {
10
+ /** Current spinner text (null if no spinner is active) */
2
11
  private spinnerText;
12
+ /**
13
+ * Logs a success message with a green checkmark
14
+ *
15
+ * @param message - Success message to display
16
+ */
3
17
  success(message: string): void;
18
+ /**
19
+ * Logs an error message with a red X
20
+ *
21
+ * @param message - Error message to display
22
+ */
4
23
  error(message: string): void;
24
+ /**
25
+ * Logs a warning message with a yellow exclamation mark
26
+ *
27
+ * @param message - Warning message to display
28
+ */
5
29
  warn(message: string): void;
30
+ /**
31
+ * Logs an informational message with a blue arrow
32
+ *
33
+ * @param message - Info message to display
34
+ */
6
35
  info(message: string): void;
36
+ /**
37
+ * Logs a debug message if DEBUG environment variable is set
38
+ *
39
+ * @param message - Debug message to display
40
+ */
7
41
  debug(message: string): void;
42
+ /**
43
+ * Starts a spinner with the specified text
44
+ *
45
+ * @param text - Text to display with the spinner
46
+ */
8
47
  startSpinner(text: string): void;
48
+ /**
49
+ * Updates the current spinner with new text
50
+ *
51
+ * @param text - New text to display
52
+ */
9
53
  updateSpinner(text: string): void;
54
+ /**
55
+ * Completes the spinner with a success state
56
+ *
57
+ * @param text - Optional override text (defaults to current spinner text)
58
+ */
10
59
  succeedSpinner(text?: string): void;
60
+ /**
61
+ * Completes the spinner with a failure state
62
+ *
63
+ * @param text - Optional override text (defaults to current spinner text)
64
+ */
11
65
  failSpinner(text?: string): void;
66
+ /**
67
+ * Stops the current spinner without completing it
68
+ */
12
69
  stopSpinner(): void;
70
+ /**
71
+ * Logs a plain message without formatting
72
+ *
73
+ * @param message - Message to display
74
+ */
13
75
  log(message: string): void;
76
+ /**
77
+ * Wraps text with bold ANSI formatting
78
+ *
79
+ * @param text - Text to make bold
80
+ * @returns Text wrapped with bold ANSI codes
81
+ */
14
82
  bold(text: string): string;
83
+ /**
84
+ * Wraps text with dim ANSI formatting
85
+ *
86
+ * @param text - Text to make dim
87
+ * @returns Text wrapped with dim ANSI codes
88
+ */
15
89
  dim(text: string): string;
16
90
  }
91
+ /** Global logger instance for use throughout the application */
17
92
  export declare const logger: Logger;
18
93
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAaA,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOjC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOnC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhC,WAAW,IAAI,IAAI;IAInB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG1B;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;;GAGG;AACH,qBAAa,MAAM;IACjB,0DAA0D;IAC1D,OAAO,CAAC,WAAW,CAAuB;IAE1C;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOjC;;;;OAIG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOnC;;;;OAIG;IACH,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG1B;AAED,gEAAgE;AAChE,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
+ /**
3
+ * Console logging utility with color support and spinner functionality
4
+ * Provides consistent, formatted output for CLI operations
5
+ */
2
6
  Object.defineProperty(exports, "__esModule", { value: true });
3
7
  exports.logger = exports.Logger = void 0;
4
- // ANSI color codes
8
+ /** ANSI color codes for terminal output styling */
5
9
  const colors = {
6
10
  reset: '\x1b[0m',
7
11
  green: '\x1b[32m',
@@ -13,60 +17,131 @@ const colors = {
13
17
  bold: '\x1b[1m',
14
18
  dim: '\x1b[2m',
15
19
  };
20
+ /**
21
+ * Logger class for formatted console output
22
+ * Supports success, error, warning, info, debug, and spinner states
23
+ */
16
24
  class Logger {
25
+ /** Current spinner text (null if no spinner is active) */
17
26
  spinnerText = null;
27
+ /**
28
+ * Logs a success message with a green checkmark
29
+ *
30
+ * @param message - Success message to display
31
+ */
18
32
  success(message) {
19
33
  console.log(`${colors.green}✓${colors.reset}`, message);
20
34
  }
35
+ /**
36
+ * Logs an error message with a red X
37
+ *
38
+ * @param message - Error message to display
39
+ */
21
40
  error(message) {
22
41
  console.error(`${colors.red}✗${colors.reset}`, message);
23
42
  }
43
+ /**
44
+ * Logs a warning message with a yellow exclamation mark
45
+ *
46
+ * @param message - Warning message to display
47
+ */
24
48
  warn(message) {
25
49
  console.log(`${colors.yellow}!${colors.reset}`, message);
26
50
  }
51
+ /**
52
+ * Logs an informational message with a blue arrow
53
+ *
54
+ * @param message - Info message to display
55
+ */
27
56
  info(message) {
28
57
  console.log(`${colors.blue}→${colors.reset}`, message);
29
58
  }
59
+ /**
60
+ * Logs a debug message if DEBUG environment variable is set
61
+ *
62
+ * @param message - Debug message to display
63
+ */
30
64
  debug(message) {
31
65
  if (process.env.DEBUG) {
32
66
  console.log(`${colors.gray}[DEBUG]${colors.reset}`, message);
33
67
  }
34
68
  }
69
+ /**
70
+ * Starts a spinner with the specified text
71
+ *
72
+ * @param text - Text to display with the spinner
73
+ */
35
74
  startSpinner(text) {
36
75
  this.spinnerText = text;
37
76
  console.log(`${colors.cyan}⋯${colors.reset}`, text);
38
77
  }
78
+ /**
79
+ * Updates the current spinner with new text
80
+ *
81
+ * @param text - New text to display
82
+ */
39
83
  updateSpinner(text) {
40
84
  if (this.spinnerText) {
41
85
  this.spinnerText = text;
42
86
  console.log(' ', text);
43
87
  }
44
88
  }
89
+ /**
90
+ * Completes the spinner with a success state
91
+ *
92
+ * @param text - Optional override text (defaults to current spinner text)
93
+ */
45
94
  succeedSpinner(text) {
46
95
  if (this.spinnerText) {
47
96
  console.log(`${colors.green}✓${colors.reset}`, text || this.spinnerText);
48
97
  this.spinnerText = null;
49
98
  }
50
99
  }
100
+ /**
101
+ * Completes the spinner with a failure state
102
+ *
103
+ * @param text - Optional override text (defaults to current spinner text)
104
+ */
51
105
  failSpinner(text) {
52
106
  if (this.spinnerText) {
53
107
  console.log(`${colors.red}✗${colors.reset}`, text || this.spinnerText);
54
108
  this.spinnerText = null;
55
109
  }
56
110
  }
111
+ /**
112
+ * Stops the current spinner without completing it
113
+ */
57
114
  stopSpinner() {
58
115
  this.spinnerText = null;
59
116
  }
117
+ /**
118
+ * Logs a plain message without formatting
119
+ *
120
+ * @param message - Message to display
121
+ */
60
122
  log(message) {
61
123
  console.log(message);
62
124
  }
125
+ /**
126
+ * Wraps text with bold ANSI formatting
127
+ *
128
+ * @param text - Text to make bold
129
+ * @returns Text wrapped with bold ANSI codes
130
+ */
63
131
  bold(text) {
64
132
  return `${colors.bold}${text}${colors.reset}`;
65
133
  }
134
+ /**
135
+ * Wraps text with dim ANSI formatting
136
+ *
137
+ * @param text - Text to make dim
138
+ * @returns Text wrapped with dim ANSI codes
139
+ */
66
140
  dim(text) {
67
141
  return `${colors.dim}${text}${colors.reset}`;
68
142
  }
69
143
  }
70
144
  exports.Logger = Logger;
145
+ /** Global logger instance for use throughout the application */
71
146
  exports.logger = new Logger();
72
147
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Utilities for version comparison and semantic versioning operations
3
+ * Supports parsing, comparing, and sorting semver version strings
4
+ */
5
+ /**
6
+ * Parses a semantic version string into its components
7
+ *
8
+ * @param version - Version string to parse (e.g., "1.2.3" or "v1.2.3")
9
+ * @returns Object with major, minor, and patch numbers, or null if invalid
10
+ */
11
+ export declare function parseSemver(version: string): {
12
+ major: number;
13
+ minor: number;
14
+ patch: number;
15
+ } | null;
16
+ /**
17
+ * Compares two semantic version strings
18
+ *
19
+ * @param a - First version to compare
20
+ * @param b - Second version to compare
21
+ * @returns -1 if a < b, 0 if a == b, 1 if a > b
22
+ */
23
+ export declare function compareSemver(a: string, b: string): number;
24
+ /**
25
+ * Checks if the latest version is newer than the current version
26
+ *
27
+ * @param current - Current version string
28
+ * @param latest - Latest version string
29
+ * @returns True if latest is newer than current
30
+ */
31
+ export declare function isNewerVersion(current: string, latest: string): boolean;
32
+ /**
33
+ * Sorts an array of version tags by semantic version (newest first)
34
+ *
35
+ * @param tags - Array of version tag strings to sort
36
+ * @returns New array sorted in descending order (newest to oldest)
37
+ */
38
+ export declare function sortTagsBySemver(tags: string[]): string[];
39
+ /**
40
+ * Determines the type of update between two versions
41
+ *
42
+ * @param current - Current version string
43
+ * @param latest - Latest version string
44
+ * @returns Update type ('major', 'minor', or 'patch') or undefined if not parseable
45
+ */
46
+ export declare function getUpdateType(current: string, latest: string): 'major' | 'minor' | 'patch' | undefined;
47
+ /**
48
+ * Pads a string to the right with spaces
49
+ *
50
+ * @param str - String to pad
51
+ * @param len - Desired total length
52
+ * @returns Padded string
53
+ */
54
+ export declare function padRight(str: string, len: number): string;
55
+ /**
56
+ * Wraps text with ANSI color codes for terminal output
57
+ *
58
+ * @param text - Text to colorize
59
+ * @param color - Color to apply
60
+ * @returns Text wrapped with ANSI color codes
61
+ */
62
+ export declare function colorize(text: string, color: 'red' | 'yellow' | 'green' | 'reset'): string;
63
+ //# sourceMappingURL=version-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-utils.d.ts","sourceRoot":"","sources":["../../src/utils/version-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASnG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAezD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAWtG;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAS1F"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ /**
3
+ * Utilities for version comparison and semantic versioning operations
4
+ * Supports parsing, comparing, and sorting semver version strings
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseSemver = parseSemver;
8
+ exports.compareSemver = compareSemver;
9
+ exports.isNewerVersion = isNewerVersion;
10
+ exports.sortTagsBySemver = sortTagsBySemver;
11
+ exports.getUpdateType = getUpdateType;
12
+ exports.padRight = padRight;
13
+ exports.colorize = colorize;
14
+ /**
15
+ * Parses a semantic version string into its components
16
+ *
17
+ * @param version - Version string to parse (e.g., "1.2.3" or "v1.2.3")
18
+ * @returns Object with major, minor, and patch numbers, or null if invalid
19
+ */
20
+ function parseSemver(version) {
21
+ const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)/);
22
+ if (!match)
23
+ return null;
24
+ return {
25
+ major: parseInt(match[1], 10),
26
+ minor: parseInt(match[2], 10),
27
+ patch: parseInt(match[3], 10)
28
+ };
29
+ }
30
+ /**
31
+ * Compares two semantic version strings
32
+ *
33
+ * @param a - First version to compare
34
+ * @param b - Second version to compare
35
+ * @returns -1 if a < b, 0 if a == b, 1 if a > b
36
+ */
37
+ function compareSemver(a, b) {
38
+ const aParsed = parseSemver(a);
39
+ const bParsed = parseSemver(b);
40
+ if (!aParsed || !bParsed) {
41
+ // Fall back to string comparison
42
+ return a.localeCompare(b);
43
+ }
44
+ if (aParsed.major !== bParsed.major) {
45
+ return aParsed.major - bParsed.major;
46
+ }
47
+ if (aParsed.minor !== bParsed.minor) {
48
+ return aParsed.minor - bParsed.minor;
49
+ }
50
+ return aParsed.patch - bParsed.patch;
51
+ }
52
+ /**
53
+ * Checks if the latest version is newer than the current version
54
+ *
55
+ * @param current - Current version string
56
+ * @param latest - Latest version string
57
+ * @returns True if latest is newer than current
58
+ */
59
+ function isNewerVersion(current, latest) {
60
+ return compareSemver(latest, current) > 0;
61
+ }
62
+ /**
63
+ * Sorts an array of version tags by semantic version (newest first)
64
+ *
65
+ * @param tags - Array of version tag strings to sort
66
+ * @returns New array sorted in descending order (newest to oldest)
67
+ */
68
+ function sortTagsBySemver(tags) {
69
+ return [...tags].sort((a, b) => {
70
+ const aParsed = parseSemver(a);
71
+ const bParsed = parseSemver(b);
72
+ if (aParsed && bParsed) {
73
+ // Both are valid semver - sort descending (newest first)
74
+ if (aParsed.major !== bParsed.major)
75
+ return bParsed.major - aParsed.major;
76
+ if (aParsed.minor !== bParsed.minor)
77
+ return bParsed.minor - aParsed.minor;
78
+ return bParsed.patch - aParsed.patch;
79
+ }
80
+ // Fall back to string comparison (reverse for newest first)
81
+ return b.localeCompare(a);
82
+ });
83
+ }
84
+ /**
85
+ * Determines the type of update between two versions
86
+ *
87
+ * @param current - Current version string
88
+ * @param latest - Latest version string
89
+ * @returns Update type ('major', 'minor', or 'patch') or undefined if not parseable
90
+ */
91
+ function getUpdateType(current, latest) {
92
+ const currentParsed = parseSemver(current);
93
+ const latestParsed = parseSemver(latest);
94
+ if (!currentParsed || !latestParsed)
95
+ return undefined;
96
+ if (latestParsed.major > currentParsed.major)
97
+ return 'major';
98
+ if (latestParsed.minor > currentParsed.minor)
99
+ return 'minor';
100
+ if (latestParsed.patch > currentParsed.patch)
101
+ return 'patch';
102
+ return undefined;
103
+ }
104
+ /**
105
+ * Pads a string to the right with spaces
106
+ *
107
+ * @param str - String to pad
108
+ * @param len - Desired total length
109
+ * @returns Padded string
110
+ */
111
+ function padRight(str, len) {
112
+ return str.padEnd(len);
113
+ }
114
+ /**
115
+ * Wraps text with ANSI color codes for terminal output
116
+ *
117
+ * @param text - Text to colorize
118
+ * @param color - Color to apply
119
+ * @returns Text wrapped with ANSI color codes
120
+ */
121
+ function colorize(text, color) {
122
+ const colors = {
123
+ red: '\x1b[31m',
124
+ yellow: '\x1b[33m',
125
+ green: '\x1b[32m',
126
+ reset: '\x1b[0m'
127
+ };
128
+ return `${colors[color]}${text}${colors.reset}`;
129
+ }
130
+ //# sourceMappingURL=version-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-utils.js","sourceRoot":"","sources":["../../src/utils/version-utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAQH,kCASC;AASD,sCAgBC;AASD,wCAEC;AAQD,4CAeC;AASD,sCAWC;AASD,4BAEC;AASD,4BASC;AA3HD;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAE/B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,iCAAiC;QACjC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAc;IAC7C,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,yDAAyD;YACzD,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;gBAAE,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1E,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;gBAAE,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1E,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACvC,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,OAAe,EAAE,MAAc;IAC3D,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAEtD,IAAI,YAAY,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC7D,IAAI,YAAY,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC7D,IAAI,YAAY,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAE7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,GAAW,EAAE,GAAW;IAC/C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,KAA2C;IAChF,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,SAAS;KACjB,CAAC;IAEF,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,26 @@
1
1
  {
2
2
  "name": "craftdesk",
3
- "version": "0.3.0",
4
- "description": "Package manager for Claude Code skills and agents",
3
+ "version": "0.5.0",
4
+ "description": "Package manager for Claude Code skills, agents, commands, hooks, and plugins",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "craftdesk": "./bin/craftdesk.js"
8
8
  },
9
+ "files": [
10
+ "dist/",
11
+ "bin/",
12
+ "README.md",
13
+ "CHANGELOG.md",
14
+ "LICENSE.md"
15
+ ],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/mensfeld/craftdesk.git"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/mensfeld/craftdesk/issues"
22
+ },
23
+ "homepage": "https://github.com/mensfeld/craftdesk#readme",
9
24
  "scripts": {
10
25
  "build": "tsc",
11
26
  "dev": "ts-node src/index.ts",
@@ -14,6 +29,11 @@
14
29
  "test:ui": "vitest --ui",
15
30
  "test:coverage": "vitest run --coverage",
16
31
  "test:watch": "vitest watch",
32
+ "lint": "eslint src/",
33
+ "lint:fix": "eslint src/ --fix",
34
+ "lint:docs": "eslint src/ --rule 'jsdoc/require-jsdoc: error'",
35
+ "docs": "typedoc",
36
+ "docs:watch": "typedoc --watch",
17
37
  "prepare": "npm run build"
18
38
  },
19
39
  "keywords": [
@@ -27,19 +47,26 @@
27
47
  "author": "CraftDesk",
28
48
  "license": "MIT",
29
49
  "dependencies": {
50
+ "adm-zip": "^0.5.10",
30
51
  "axios": "^1.6.2",
31
- "commander": "^11.1.0",
52
+ "commander": "^14.0.0",
32
53
  "fs-extra": "^11.2.0"
33
54
  },
34
55
  "devDependencies": {
35
- "@types/node": "^20.10.5",
56
+ "@types/adm-zip": "^0.5.5",
36
57
  "@types/fs-extra": "^11.0.4",
58
+ "@types/node": "^24.0.0",
59
+ "@typescript-eslint/eslint-plugin": "^8.48.0",
60
+ "@typescript-eslint/parser": "^8.48.0",
61
+ "@vitest/coverage-v8": "^4.0.0",
62
+ "@vitest/ui": "^4.0.0",
63
+ "eslint": "^9.39.1",
64
+ "eslint-plugin-jsdoc": "^62.0.0",
65
+ "typedoc": "^0.28.14",
37
66
  "typescript": "^5.3.3",
38
- "vitest": "^1.0.4",
39
- "@vitest/ui": "^1.0.4",
40
- "@vitest/coverage-v8": "^1.0.4"
67
+ "vitest": "^4.0.0"
41
68
  },
42
69
  "engines": {
43
- "node": ">=18.0.0"
70
+ "node": ">=20.0.0"
44
71
  }
45
- }
72
+ }
@@ -1,19 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(npm run build:*)",
5
- "Bash(cat:*)",
6
- "Bash(git init:*)",
7
- "Bash(git remote add:*)",
8
- "Bash(git add:*)",
9
- "Bash(git commit:*)",
10
- "Bash(git push:*)",
11
- "Bash(npm test)",
12
- "Bash(node /home/mencio/Software/CraftDesk/CraftDesk/cli/dist/index.js:*)",
13
- "Bash(pkill:*)",
14
- "Bash(npm test:*)"
15
- ],
16
- "deny": [],
17
- "ask": []
18
- }
19
- }