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
@@ -0,0 +1,80 @@
1
+ /**
2
+ * PluginResolver - Resolves plugin dependencies
3
+ *
4
+ * Handles:
5
+ * - Reading plugin craftdesk.json files
6
+ * - Flattening nested dependencies
7
+ * - Building plugin dependency tree
8
+ * - Detecting circular dependencies
9
+ */
10
+ import type { PluginDependencyTree } from '../types/craftdesk-lock';
11
+ /**
12
+ * Information about a resolved plugin dependency
13
+ */
14
+ export interface ResolvedPlugin {
15
+ name: string;
16
+ version: string;
17
+ dependencies: Record<string, string | import('../types/craftdesk-json').DependencyConfig>;
18
+ isDependency: boolean;
19
+ requiredBy: string[];
20
+ }
21
+ /**
22
+ * Service for resolving plugin dependencies and building dependency trees
23
+ *
24
+ * Handles recursive dependency resolution, circular dependency detection,
25
+ * and flattening nested plugin dependencies
26
+ */
27
+ export declare class PluginResolver {
28
+ private resolvedPlugins;
29
+ private resolutionStack;
30
+ /**
31
+ * Resolve plugin dependencies recursively
32
+ *
33
+ * @param pluginPath - Path to plugin directory
34
+ * @param parentName - Name of parent plugin (for tracking requiredBy)
35
+ * @returns Flattened dependency map
36
+ */
37
+ resolvePluginDependencies(pluginPath: string, parentName?: string): Promise<Record<string, ResolvedPlugin>>;
38
+ /**
39
+ * Build plugin dependency tree for lockfile
40
+ *
41
+ * @returns Plugin dependency tree structure
42
+ */
43
+ buildPluginTree(): PluginDependencyTree;
44
+ /**
45
+ * Get flattened dependencies
46
+ *
47
+ * This is what goes into craftdesk.json
48
+ *
49
+ * @returns Flattened dependency map
50
+ */
51
+ getFlattenedDependencies(): Record<string, string | import('../types/craftdesk-json').DependencyConfig>;
52
+ /**
53
+ * Get only directly installed plugins (not dependencies)
54
+ *
55
+ * @returns Array of directly installed plugins
56
+ */
57
+ getDirectPlugins(): ResolvedPlugin[];
58
+ /**
59
+ * Get only dependency plugins (not directly installed)
60
+ *
61
+ * @returns Array of dependency plugins
62
+ */
63
+ getDependencyPlugins(): ResolvedPlugin[];
64
+ /**
65
+ * Read plugin manifest (craftdesk.json)
66
+ *
67
+ * @param pluginPath - Path to plugin directory
68
+ * @returns Parsed manifest or null if not found
69
+ * @private
70
+ */
71
+ private readPluginManifest;
72
+ /**
73
+ * Reset resolver state
74
+ *
75
+ * Clears all resolved plugins and resolution stack
76
+ */
77
+ reset(): void;
78
+ }
79
+ export declare const pluginResolver: PluginResolver;
80
+ //# sourceMappingURL=plugin-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-resolver.d.ts","sourceRoot":"","sources":["../../src/services/plugin-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,yBAAyB,EAAE,gBAAgB,CAAC,CAAC;IAC1F,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,eAAe,CAAgB;IAEvC;;;;;;OAMG;IACG,yBAAyB,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAiE1C;;;;OAIG;IACH,eAAe,IAAI,oBAAoB;IAevC;;;;;;OAMG;IACH,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,yBAAyB,EAAE,gBAAgB,CAAC;IAoBvG;;;;OAIG;IACH,gBAAgB,IAAI,cAAc,EAAE;IAIpC;;;;OAIG;IACH,oBAAoB,IAAI,cAAc,EAAE;IAIxC;;;;;;OAMG;YACW,kBAAkB;IAgBhC;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * PluginResolver - Resolves plugin dependencies
4
+ *
5
+ * Handles:
6
+ * - Reading plugin craftdesk.json files
7
+ * - Flattening nested dependencies
8
+ * - Building plugin dependency tree
9
+ * - Detecting circular dependencies
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.pluginResolver = exports.PluginResolver = void 0;
16
+ const fs_extra_1 = __importDefault(require("fs-extra"));
17
+ const path_1 = __importDefault(require("path"));
18
+ const logger_1 = require("../utils/logger");
19
+ /**
20
+ * Service for resolving plugin dependencies and building dependency trees
21
+ *
22
+ * Handles recursive dependency resolution, circular dependency detection,
23
+ * and flattening nested plugin dependencies
24
+ */
25
+ class PluginResolver {
26
+ resolvedPlugins = new Map();
27
+ resolutionStack = [];
28
+ /**
29
+ * Resolve plugin dependencies recursively
30
+ *
31
+ * @param pluginPath - Path to plugin directory
32
+ * @param parentName - Name of parent plugin (for tracking requiredBy)
33
+ * @returns Flattened dependency map
34
+ */
35
+ async resolvePluginDependencies(pluginPath, parentName) {
36
+ // Read plugin's craftdesk.json
37
+ const manifest = await this.readPluginManifest(pluginPath);
38
+ if (!manifest) {
39
+ throw new Error(`No craftdesk.json found in plugin: ${pluginPath}`);
40
+ }
41
+ const pluginName = manifest.name;
42
+ // Check for circular dependencies
43
+ if (this.resolutionStack.includes(pluginName)) {
44
+ const cycle = [...this.resolutionStack, pluginName].join(' → ');
45
+ throw new Error(`Circular dependency detected: ${cycle}`);
46
+ }
47
+ // Add to resolution stack
48
+ this.resolutionStack.push(pluginName);
49
+ try {
50
+ // If already resolved, just add requiredBy
51
+ if (this.resolvedPlugins.has(pluginName)) {
52
+ const existing = this.resolvedPlugins.get(pluginName);
53
+ if (parentName && !existing.requiredBy.includes(parentName)) {
54
+ existing.requiredBy.push(parentName);
55
+ }
56
+ return Object.fromEntries(this.resolvedPlugins);
57
+ }
58
+ // Create resolved entry
59
+ const resolved = {
60
+ name: pluginName,
61
+ version: manifest.version,
62
+ dependencies: manifest.dependencies || {},
63
+ isDependency: !!parentName,
64
+ requiredBy: parentName ? [parentName] : []
65
+ };
66
+ this.resolvedPlugins.set(pluginName, resolved);
67
+ // Recursively resolve dependencies
68
+ if (manifest.dependencies) {
69
+ for (const [depName, depVersion] of Object.entries(manifest.dependencies)) {
70
+ // Skip if dependency is a string (version) - these are resolved by registry
71
+ if (typeof depVersion === 'string') {
72
+ logger_1.logger.debug(`Dependency ${depName} will be resolved by registry`);
73
+ continue;
74
+ }
75
+ // Handle git dependencies with subdirectories
76
+ if (depVersion.git && depVersion.path) {
77
+ // Dependency is in a subdirectory of git repo - we'll need to clone and resolve
78
+ logger_1.logger.debug(`Dependency ${depName} requires git clone for resolution`);
79
+ continue;
80
+ }
81
+ }
82
+ }
83
+ return Object.fromEntries(this.resolvedPlugins);
84
+ }
85
+ finally {
86
+ // Remove from resolution stack
87
+ this.resolutionStack.pop();
88
+ }
89
+ }
90
+ /**
91
+ * Build plugin dependency tree for lockfile
92
+ *
93
+ * @returns Plugin dependency tree structure
94
+ */
95
+ buildPluginTree() {
96
+ const tree = {};
97
+ for (const [name, plugin] of this.resolvedPlugins) {
98
+ tree[name] = {
99
+ version: plugin.version,
100
+ dependencies: Object.keys(plugin.dependencies),
101
+ isDependency: plugin.isDependency,
102
+ requiredBy: plugin.requiredBy
103
+ };
104
+ }
105
+ return tree;
106
+ }
107
+ /**
108
+ * Get flattened dependencies
109
+ *
110
+ * This is what goes into craftdesk.json
111
+ *
112
+ * @returns Flattened dependency map
113
+ */
114
+ getFlattenedDependencies() {
115
+ const flattened = {};
116
+ for (const [name, plugin] of this.resolvedPlugins) {
117
+ flattened[name] = plugin.version;
118
+ // Add plugin's dependencies
119
+ for (const [depName, depVersion] of Object.entries(plugin.dependencies)) {
120
+ if (typeof depVersion === 'string') {
121
+ flattened[depName] = depVersion;
122
+ }
123
+ else {
124
+ // Complex dependency config - we'll add it as-is
125
+ flattened[depName] = depVersion;
126
+ }
127
+ }
128
+ }
129
+ return flattened;
130
+ }
131
+ /**
132
+ * Get only directly installed plugins (not dependencies)
133
+ *
134
+ * @returns Array of directly installed plugins
135
+ */
136
+ getDirectPlugins() {
137
+ return Array.from(this.resolvedPlugins.values()).filter(p => !p.isDependency);
138
+ }
139
+ /**
140
+ * Get only dependency plugins (not directly installed)
141
+ *
142
+ * @returns Array of dependency plugins
143
+ */
144
+ getDependencyPlugins() {
145
+ return Array.from(this.resolvedPlugins.values()).filter(p => p.isDependency);
146
+ }
147
+ /**
148
+ * Read plugin manifest (craftdesk.json)
149
+ *
150
+ * @param pluginPath - Path to plugin directory
151
+ * @returns Parsed manifest or null if not found
152
+ * @private
153
+ */
154
+ async readPluginManifest(pluginPath) {
155
+ const manifestPath = path_1.default.join(pluginPath, 'craftdesk.json');
156
+ try {
157
+ if (await fs_extra_1.default.pathExists(manifestPath)) {
158
+ const content = await fs_extra_1.default.readFile(manifestPath, 'utf-8');
159
+ return JSON.parse(content);
160
+ }
161
+ return null;
162
+ }
163
+ catch (error) {
164
+ const message = error instanceof Error ? error.message : String(error);
165
+ logger_1.logger.debug(`Failed to read plugin manifest at ${manifestPath}: ${message}`);
166
+ return null;
167
+ }
168
+ }
169
+ /**
170
+ * Reset resolver state
171
+ *
172
+ * Clears all resolved plugins and resolution stack
173
+ */
174
+ reset() {
175
+ this.resolvedPlugins.clear();
176
+ this.resolutionStack = [];
177
+ }
178
+ }
179
+ exports.PluginResolver = PluginResolver;
180
+ // Export singleton instance
181
+ exports.pluginResolver = new PluginResolver();
182
+ //# sourceMappingURL=plugin-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-resolver.js","sourceRoot":"","sources":["../../src/services/plugin-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,153 @@
1
+ import type { CraftDeskLock, LockEntry } from '../types/craftdesk-lock';
2
+ /**
3
+ * Information about a craft from the registry
4
+ */
1
5
  export interface CraftInfo {
2
6
  name: string;
3
7
  author: string;
4
8
  version: string;
5
- type: 'skill' | 'agent' | 'command' | 'hook';
9
+ type: 'skill' | 'agent' | 'command' | 'hook' | 'plugin' | 'collection';
6
10
  description?: string;
7
11
  dependencies?: Record<string, string>;
8
12
  download_url?: string;
9
13
  integrity?: string;
10
14
  }
15
+ /**
16
+ * Information about a registry user
17
+ */
18
+ export interface UserInfo {
19
+ username: string;
20
+ email: string;
21
+ organization?: string;
22
+ }
23
+ /**
24
+ * Response from dependency resolution API
25
+ */
11
26
  export interface ResolveResponse {
12
- resolved: Record<string, any>;
13
- lockfile: any;
27
+ resolved: Record<string, LockEntry>;
28
+ lockfile: CraftDeskLock;
14
29
  }
30
+ /**
31
+ * Client for interacting with CraftDesk registry APIs
32
+ *
33
+ * Handles authentication, craft metadata retrieval, dependency resolution,
34
+ * and publishing operations with the CraftDesk registry server.
35
+ */
15
36
  export declare class RegistryClient {
16
- private axiosInstance;
37
+ /**
38
+ * Get an authenticated HTTP client for a registry
39
+ *
40
+ * @param registryUrl - The registry URL to connect to
41
+ * @returns Configured axios instance
42
+ * @private
43
+ */
17
44
  private getClient;
45
+ /**
46
+ * Get information about a craft from the registry
47
+ *
48
+ * @param craftName - Name of the craft (e.g., 'author/name')
49
+ * @param version - Optional specific version to fetch
50
+ * @param registryOverride - Optional registry URL to use instead of default
51
+ * @returns Craft information or null if not found
52
+ */
18
53
  getCraftInfo(craftName: string, version?: string, registryOverride?: string): Promise<CraftInfo | null>;
19
- private resolveRegistry;
54
+ /**
55
+ * List all available versions of a craft
56
+ *
57
+ * @param craftName - Name of the craft to list versions for
58
+ * @returns Array of version strings
59
+ */
20
60
  listVersions(craftName: string): Promise<string[]>;
61
+ /**
62
+ * Resolve dependencies via the registry API
63
+ *
64
+ * @param dependencies - Map of craft names to version constraints
65
+ * @returns Resolved dependencies and lockfile or null on error
66
+ * @throws Error if no registry is configured
67
+ */
21
68
  resolveDependencies(dependencies: Record<string, string>): Promise<ResolveResponse | null>;
69
+ /**
70
+ * Download a craft archive from a URL
71
+ *
72
+ * @param downloadUrl - URL to download the craft from
73
+ * @param outputPath - Local path to save the downloaded file
74
+ * @throws Error if download fails
75
+ */
22
76
  downloadCraft(downloadUrl: string, outputPath: string): Promise<void>;
77
+ /**
78
+ * Search for crafts in the registry
79
+ *
80
+ * @param query - Search query string
81
+ * @param type - Optional filter by craft type
82
+ * @returns Array of matching crafts
83
+ * @throws Error if no registry is configured
84
+ */
23
85
  searchCrafts(query: string, type?: string): Promise<CraftInfo[]>;
86
+ /**
87
+ * Create a new version for a craft
88
+ *
89
+ * @param author - Craft author
90
+ * @param name - Craft name
91
+ * @param data - Version data including files and metadata
92
+ * @param data.version - Semantic version string (e.g., "1.0.0")
93
+ * @param data.type - Type of craft (skill, agent, command, hook, plugin)
94
+ * @param data.description - Human-readable description of the craft
95
+ * @param data.main_file - Path to the main file (e.g., "SKILL.md")
96
+ * @param data.changelog - Markdown formatted changelog for this version
97
+ * @param data.files - Array of file objects with path and content properties
98
+ * @returns Response from the API
99
+ * @throws Error if authentication fails or craft creation fails
100
+ */
101
+ createVersion(author: string, name: string, data: {
102
+ version: string;
103
+ type?: string;
104
+ description?: string;
105
+ main_file?: string;
106
+ changelog?: string;
107
+ files: Array<{
108
+ path: string;
109
+ content: string;
110
+ }>;
111
+ }): Promise<{
112
+ success: boolean;
113
+ download_url?: string;
114
+ [key: string]: unknown;
115
+ }>;
116
+ /**
117
+ * Publish a craft (change status to published)
118
+ *
119
+ * @param author - Craft author
120
+ * @param name - Craft name
121
+ * @param options - Publishing options (visibility)
122
+ * @param options.visibility - Visibility level: "public", "private", or "organization"
123
+ * @returns Response from the API
124
+ * @throws Error if authentication fails or craft not found
125
+ */
126
+ publishCraft(author: string, name: string, options: {
127
+ visibility?: 'public' | 'private' | 'organization';
128
+ }): Promise<{
129
+ success: boolean;
130
+ [key: string]: unknown;
131
+ }>;
132
+ /**
133
+ * Verify an API token with a registry
134
+ *
135
+ * Calls GET /api/v1/me to validate the token and get user info
136
+ *
137
+ * @param registryUrl - The URL of the registry
138
+ * @param token - The API token to verify
139
+ * @returns User info if token is valid
140
+ * @throws Error if token is invalid or network error occurs
141
+ */
142
+ verifyToken(registryUrl: string, token: string): Promise<UserInfo>;
143
+ /**
144
+ * Parse a craft name into author and name components
145
+ *
146
+ * @param craftName - Craft name in 'author/name' or '@author/name' format
147
+ * @returns Tuple of [author, name]
148
+ * @throws Error if craft name format is invalid
149
+ * @private
150
+ */
24
151
  private parseCraftName;
25
152
  }
26
153
  export declare const registryClient: RegistryClient;
@@ -1 +1 @@
1
- {"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../src/services/registry-client.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,EAAE,GAAG,CAAC;CACf;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAA8B;YAErC,SAAS;IAajB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YA8B/F,eAAe;IAgBvB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAelD,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAiB1F,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBtE,OAAO,CAAC,cAAc;CAavB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../src/services/registry-client.ts"],"names":[],"mappings":"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"}