craftdesk 0.2.0 → 0.4.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 (175) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +968 -92
  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 +303 -7
  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/info.d.ts +8 -0
  12. package/dist/commands/info.d.ts.map +1 -0
  13. package/dist/commands/info.js +66 -0
  14. package/dist/commands/info.js.map +1 -0
  15. package/dist/commands/init.d.ts +5 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +9 -3
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/install.d.ts +5 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +24 -4
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/list.d.ts +5 -0
  24. package/dist/commands/list.d.ts.map +1 -1
  25. package/dist/commands/list.js +72 -7
  26. package/dist/commands/list.js.map +1 -1
  27. package/dist/commands/login.d.ts +8 -0
  28. package/dist/commands/login.d.ts.map +1 -0
  29. package/dist/commands/login.js +158 -0
  30. package/dist/commands/login.js.map +1 -0
  31. package/dist/commands/logout.d.ts +8 -0
  32. package/dist/commands/logout.d.ts.map +1 -0
  33. package/dist/commands/logout.js +51 -0
  34. package/dist/commands/logout.js.map +1 -0
  35. package/dist/commands/outdated.d.ts +23 -0
  36. package/dist/commands/outdated.d.ts.map +1 -0
  37. package/dist/commands/outdated.js +268 -0
  38. package/dist/commands/outdated.js.map +1 -0
  39. package/dist/commands/publish.d.ts +8 -0
  40. package/dist/commands/publish.d.ts.map +1 -0
  41. package/dist/commands/publish.js +198 -0
  42. package/dist/commands/publish.js.map +1 -0
  43. package/dist/commands/remove.d.ts +5 -0
  44. package/dist/commands/remove.d.ts.map +1 -1
  45. package/dist/commands/remove.js +52 -11
  46. package/dist/commands/remove.js.map +1 -1
  47. package/dist/commands/search.d.ts +8 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +60 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/update.d.ts +8 -0
  52. package/dist/commands/update.d.ts.map +1 -0
  53. package/dist/commands/update.js +369 -0
  54. package/dist/commands/update.js.map +1 -0
  55. package/dist/commands/whoami.d.ts +8 -0
  56. package/dist/commands/whoami.d.ts.map +1 -0
  57. package/dist/commands/whoami.js +58 -0
  58. package/dist/commands/whoami.js.map +1 -0
  59. package/dist/converters/base-converter.d.ts +89 -0
  60. package/dist/converters/base-converter.d.ts.map +1 -0
  61. package/dist/converters/base-converter.js +249 -0
  62. package/dist/converters/base-converter.js.map +1 -0
  63. package/dist/converters/continue-converter.d.ts +53 -0
  64. package/dist/converters/continue-converter.d.ts.map +1 -0
  65. package/dist/converters/continue-converter.js +243 -0
  66. package/dist/converters/continue-converter.js.map +1 -0
  67. package/dist/converters/cursor-converter.d.ts +70 -0
  68. package/dist/converters/cursor-converter.d.ts.map +1 -0
  69. package/dist/converters/cursor-converter.js +272 -0
  70. package/dist/converters/cursor-converter.js.map +1 -0
  71. package/dist/index.js +35 -4
  72. package/dist/index.js.map +1 -1
  73. package/dist/services/config-manager.d.ts +128 -10
  74. package/dist/services/config-manager.d.ts.map +1 -1
  75. package/dist/services/config-manager.js +189 -18
  76. package/dist/services/config-manager.js.map +1 -1
  77. package/dist/services/converter.d.ts +53 -0
  78. package/dist/services/converter.d.ts.map +1 -0
  79. package/dist/services/converter.js +185 -0
  80. package/dist/services/converter.js.map +1 -0
  81. package/dist/services/craft-wrapper.d.ts +108 -0
  82. package/dist/services/craft-wrapper.d.ts.map +1 -0
  83. package/dist/services/craft-wrapper.js +268 -0
  84. package/dist/services/craft-wrapper.js.map +1 -0
  85. package/dist/services/git-resolver.d.ts +9 -3
  86. package/dist/services/git-resolver.d.ts.map +1 -1
  87. package/dist/services/git-resolver.js +35 -10
  88. package/dist/services/git-resolver.js.map +1 -1
  89. package/dist/services/installer.d.ts +51 -1
  90. package/dist/services/installer.d.ts.map +1 -1
  91. package/dist/services/installer.js +245 -14
  92. package/dist/services/installer.js.map +1 -1
  93. package/dist/services/plugin-resolver.d.ts +80 -0
  94. package/dist/services/plugin-resolver.d.ts.map +1 -0
  95. package/dist/services/plugin-resolver.js +182 -0
  96. package/dist/services/plugin-resolver.js.map +1 -0
  97. package/dist/services/registry-client.d.ts +132 -5
  98. package/dist/services/registry-client.d.ts.map +1 -1
  99. package/dist/services/registry-client.js +239 -34
  100. package/dist/services/registry-client.js.map +1 -1
  101. package/dist/services/settings-manager.d.ts +151 -0
  102. package/dist/services/settings-manager.d.ts.map +1 -0
  103. package/dist/services/settings-manager.js +333 -0
  104. package/dist/services/settings-manager.js.map +1 -0
  105. package/dist/types/claude-settings.d.ts +155 -0
  106. package/dist/types/claude-settings.d.ts.map +1 -0
  107. package/dist/types/claude-settings.js +20 -0
  108. package/dist/types/claude-settings.js.map +1 -0
  109. package/dist/types/converter.d.ts +98 -0
  110. package/dist/types/converter.d.ts.map +1 -0
  111. package/dist/types/converter.js +6 -0
  112. package/dist/types/converter.js.map +1 -0
  113. package/dist/types/craftdesk-json.d.ts +63 -3
  114. package/dist/types/craftdesk-json.d.ts.map +1 -1
  115. package/dist/types/craftdesk-lock.d.ts +62 -1
  116. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  117. package/dist/utils/crypto.d.ts +23 -0
  118. package/dist/utils/crypto.d.ts.map +1 -0
  119. package/dist/utils/crypto.js +52 -0
  120. package/dist/utils/crypto.js.map +1 -0
  121. package/dist/utils/file-system.d.ts +43 -0
  122. package/dist/utils/file-system.d.ts.map +1 -1
  123. package/dist/utils/file-system.js +45 -2
  124. package/dist/utils/file-system.js.map +1 -1
  125. package/dist/utils/logger.d.ts +75 -0
  126. package/dist/utils/logger.d.ts.map +1 -1
  127. package/dist/utils/logger.js +76 -1
  128. package/dist/utils/logger.js.map +1 -1
  129. package/dist/utils/version-utils.d.ts +63 -0
  130. package/dist/utils/version-utils.d.ts.map +1 -0
  131. package/dist/utils/version-utils.js +130 -0
  132. package/dist/utils/version-utils.js.map +1 -0
  133. package/package.json +36 -9
  134. package/.claude/settings.local.json +0 -17
  135. package/.github/workflows/ci.yml +0 -94
  136. package/API.md +0 -414
  137. package/TESTING.md +0 -263
  138. package/dist/commands/config.d.ts +0 -3
  139. package/dist/commands/config.d.ts.map +0 -1
  140. package/dist/commands/config.js +0 -56
  141. package/dist/commands/config.js.map +0 -1
  142. package/dist/types/config.d.ts +0 -17
  143. package/dist/types/config.d.ts.map +0 -1
  144. package/dist/types/config.js +0 -3
  145. package/dist/types/config.js.map +0 -1
  146. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  147. package/examples/craftdesk-all-sources.json +0 -79
  148. package/examples/craftdesk-git-monorepo.json +0 -41
  149. package/examples/craftdesk-multi-registry.json +0 -40
  150. package/examples/craftdesk-with-registries.json +0 -49
  151. package/examples/simple-craftdesk.json +0 -10
  152. package/src/commands/add.ts +0 -314
  153. package/src/commands/init.ts +0 -55
  154. package/src/commands/install.ts +0 -126
  155. package/src/commands/list.ts +0 -126
  156. package/src/commands/remove.ts +0 -82
  157. package/src/index.ts +0 -56
  158. package/src/services/config-manager.ts +0 -150
  159. package/src/services/git-resolver.ts +0 -370
  160. package/src/services/installer.ts +0 -314
  161. package/src/services/registry-client.ts +0 -163
  162. package/src/types/craftdesk-json.ts +0 -53
  163. package/src/types/craftdesk-lock.ts +0 -38
  164. package/src/utils/file-system.ts +0 -55
  165. package/src/utils/logger.ts +0 -82
  166. package/tests/fixtures/craftdesk-git.json +0 -17
  167. package/tests/fixtures/craftdesk.json +0 -15
  168. package/tests/helpers/test-utils.ts +0 -60
  169. package/tests/integration/init-command.test.ts +0 -70
  170. package/tests/integration/list-command.test.ts +0 -77
  171. package/tests/unit/config-manager.test.ts +0 -228
  172. package/tests/unit/git-resolver.test.ts +0 -303
  173. package/tests/unit/installer.test.ts +0 -105
  174. package/tsconfig.json +0 -20
  175. package/vitest.config.ts +0 -29
@@ -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":"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"}
package/package.json CHANGED
@@ -1,11 +1,26 @@
1
1
  {
2
2
  "name": "craftdesk",
3
- "version": "0.2.0",
4
- "description": "Package manager for Claude Code skills and agents",
3
+ "version": "0.4.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,17 +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
- ],
14
- "deny": [],
15
- "ask": []
16
- }
17
- }
@@ -1,94 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main, master, develop]
6
- pull_request:
7
- branches: [main, master, develop]
8
-
9
- jobs:
10
- test:
11
- name: Test on Node.js ${{ matrix.node-version }}
12
- runs-on: ubuntu-latest
13
-
14
- strategy:
15
- matrix:
16
- node-version: [18.x, 20.x, 22.x]
17
-
18
- steps:
19
- - name: Checkout code
20
- uses: actions/checkout@v4
21
-
22
- - name: Setup Node.js ${{ matrix.node-version }}
23
- uses: actions/setup-node@v4
24
- with:
25
- node-version: ${{ matrix.node-version }}
26
- cache: 'npm'
27
-
28
- - name: Install dependencies
29
- run: npm ci
30
-
31
- - name: Run linter (if configured)
32
- run: npm run lint --if-present
33
-
34
- - name: Run tests
35
- run: npm test
36
-
37
- - name: Generate coverage report
38
- run: npm run test:coverage
39
- if: matrix.node-version == '20.x'
40
-
41
- - name: Upload coverage to Codecov
42
- uses: codecov/codecov-action@v3
43
- if: matrix.node-version == '20.x'
44
- with:
45
- files: ./coverage/coverage-final.json
46
- flags: unittests
47
- name: codecov-umbrella
48
- fail_ci_if_error: false
49
-
50
- build:
51
- name: Build
52
- runs-on: ubuntu-latest
53
- needs: test
54
-
55
- steps:
56
- - name: Checkout code
57
- uses: actions/checkout@v4
58
-
59
- - name: Setup Node.js
60
- uses: actions/setup-node@v4
61
- with:
62
- node-version: '20.x'
63
- cache: 'npm'
64
-
65
- - name: Install dependencies
66
- run: npm ci
67
-
68
- - name: Build TypeScript
69
- run: npm run build
70
-
71
- - name: Verify build artifacts
72
- run: |
73
- test -f dist/index.js || exit 1
74
- echo "Build successful!"
75
-
76
- type-check:
77
- name: Type Check
78
- runs-on: ubuntu-latest
79
-
80
- steps:
81
- - name: Checkout code
82
- uses: actions/checkout@v4
83
-
84
- - name: Setup Node.js
85
- uses: actions/setup-node@v4
86
- with:
87
- node-version: '20.x'
88
- cache: 'npm'
89
-
90
- - name: Install dependencies
91
- run: npm ci
92
-
93
- - name: Run TypeScript compiler check
94
- run: npx tsc --noEmit