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,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' | 'plugin';
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,GAAG,QAAQ,CAAC;IACxD,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":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAExE;;GAEG;AACH,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,GAAG,QAAQ,GAAG,YAAY,CAAC;IACvE,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;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB;;;;;;OAMG;YACW,SAAS;IAavB;;;;;;;OAOG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA+B7G;;;;;OAKG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBxD;;;;;;OAMG;IACG,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA+BhG;;;;;;OAMG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3E;;;;;;;OAOG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAiCtE;;;;;;;;;;;;;;OAcG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,GACA,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAgC/E;;;;;;;;;OASG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAA;KAAE,GAC9D,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAkCxD;;;;;;;;;OASG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBxE;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CA0BvB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -5,10 +5,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.registryClient = exports.RegistryClient = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
8
10
  const config_manager_1 = require("./config-manager");
9
11
  const logger_1 = require("../utils/logger");
12
+ /**
13
+ * Client for interacting with CraftDesk registry APIs
14
+ *
15
+ * Handles authentication, craft metadata retrieval, dependency resolution,
16
+ * and publishing operations with the CraftDesk registry server.
17
+ */
10
18
  class RegistryClient {
11
- axiosInstance = null;
19
+ /**
20
+ * Get an authenticated HTTP client for a registry
21
+ *
22
+ * @param registryUrl - The registry URL to connect to
23
+ * @returns Configured axios instance
24
+ * @private
25
+ */
12
26
  async getClient(registryUrl) {
13
27
  const token = await config_manager_1.configManager.getAuthToken(registryUrl);
14
28
  return axios_1.default.create({
@@ -20,10 +34,18 @@ class RegistryClient {
20
34
  timeout: 30000
21
35
  });
22
36
  }
37
+ /**
38
+ * Get information about a craft from the registry
39
+ *
40
+ * @param craftName - Name of the craft (e.g., 'author/name')
41
+ * @param version - Optional specific version to fetch
42
+ * @param registryOverride - Optional registry URL to use instead of default
43
+ * @returns Craft information or null if not found
44
+ */
23
45
  async getCraftInfo(craftName, version, registryOverride) {
24
46
  // Get registry URL - can be overridden by dependency-specific registry
25
47
  const registryUrl = registryOverride
26
- ? await this.resolveRegistry(registryOverride)
48
+ ? await config_manager_1.configManager.resolveRegistryUrl(registryOverride)
27
49
  : await config_manager_1.configManager.getRegistryForCraft(craftName);
28
50
  const client = await this.getClient(registryUrl);
29
51
  // Parse craft name (could be @scope/name or just name)
@@ -37,28 +59,22 @@ class RegistryClient {
37
59
  return response.data.craft || response.data;
38
60
  }
39
61
  catch (error) {
40
- if (error.response?.status === 404) {
62
+ const message = error instanceof Error ? error.message : String(error);
63
+ if (axios_1.default.isAxiosError(error) && error.response?.status === 404) {
41
64
  logger_1.logger.error(`Craft '${craftName}' not found in registry`);
42
65
  }
43
66
  else {
44
- logger_1.logger.error(`Failed to fetch craft info: ${error.message}`);
67
+ logger_1.logger.error(`Failed to fetch craft info: ${message}`);
45
68
  }
46
69
  return null;
47
70
  }
48
71
  }
49
- async resolveRegistry(registry) {
50
- // If it's a URL, use it directly
51
- if (registry.startsWith('http://') || registry.startsWith('https://')) {
52
- return registry;
53
- }
54
- // Look it up in the craftdesk.json registries section
55
- const craftDeskJson = await config_manager_1.configManager.getCraftDeskJson();
56
- if (craftDeskJson?.registries?.[registry]) {
57
- return craftDeskJson.registries[registry].url;
58
- }
59
- // If not found, assume it's a URL without protocol
60
- return `https://${registry}`;
61
- }
72
+ /**
73
+ * List all available versions of a craft
74
+ *
75
+ * @param craftName - Name of the craft to list versions for
76
+ * @returns Array of version strings
77
+ */
62
78
  async listVersions(craftName) {
63
79
  const registryUrl = await config_manager_1.configManager.getRegistryForCraft(craftName);
64
80
  const client = await this.getClient(registryUrl);
@@ -68,14 +84,32 @@ class RegistryClient {
68
84
  return response.data.versions || [];
69
85
  }
70
86
  catch (error) {
71
- logger_1.logger.error(`Failed to fetch versions: ${error.message}`);
87
+ const message = error instanceof Error ? error.message : String(error);
88
+ logger_1.logger.error(`Failed to fetch versions: ${message}`);
72
89
  return [];
73
90
  }
74
91
  }
92
+ /**
93
+ * Resolve dependencies via the registry API
94
+ *
95
+ * @param dependencies - Map of craft names to version constraints
96
+ * @returns Resolved dependencies and lockfile or null on error
97
+ * @throws Error if no registry is configured
98
+ */
75
99
  async resolveDependencies(dependencies) {
76
- // Get the default registry from craftdesk.json or use fallback
100
+ // Get the default registry from craftdesk.json
77
101
  const craftDesk = await config_manager_1.configManager.getCraftDeskJson();
78
- const registryUrl = craftDesk?.registries?.default?.url || 'https://craftdesk.ai';
102
+ const registryUrl = craftDesk?.registries?.default?.url;
103
+ // Registry is required only when trying to use registry features
104
+ if (!registryUrl) {
105
+ throw new Error('No registry configured. To use registry-based crafts, add a registry to your craftdesk.json:\n' +
106
+ '{\n' +
107
+ ' "registries": {\n' +
108
+ ' "default": { "url": "https://your-registry.com" }\n' +
109
+ ' }\n' +
110
+ '}\n\n' +
111
+ 'Note: Git-based dependencies (GitHub URLs) do not require a registry.');
112
+ }
79
113
  const client = await this.getClient(registryUrl);
80
114
  try {
81
115
  logger_1.logger.debug('Resolving dependencies via API...');
@@ -83,26 +117,67 @@ class RegistryClient {
83
117
  return response.data;
84
118
  }
85
119
  catch (error) {
86
- logger_1.logger.error(`Failed to resolve dependencies: ${error.message}`);
120
+ const message = error instanceof Error ? error.message : String(error);
121
+ logger_1.logger.error(`Failed to resolve dependencies: ${message}`);
87
122
  return null;
88
123
  }
89
124
  }
125
+ /**
126
+ * Download a craft archive from a URL
127
+ *
128
+ * @param downloadUrl - URL to download the craft from
129
+ * @param outputPath - Local path to save the downloaded file
130
+ * @throws Error if download fails
131
+ */
90
132
  async downloadCraft(downloadUrl, outputPath) {
91
133
  try {
134
+ // Ensure output directory exists
135
+ const outputDir = path_1.default.dirname(outputPath);
136
+ await fs_1.default.promises.mkdir(outputDir, { recursive: true });
92
137
  const response = await axios_1.default.get(downloadUrl, {
93
- responseType: 'stream'
138
+ responseType: 'stream',
139
+ maxRedirects: 5
94
140
  });
95
- // TODO: Save to file and extract
96
- logger_1.logger.debug(`Downloaded craft from ${downloadUrl}`);
141
+ // Create write stream and pipe response data
142
+ const writer = fs_1.default.createWriteStream(outputPath);
143
+ // Wait for download to complete
144
+ await new Promise((resolve, reject) => {
145
+ // Handle errors from both the response stream and the write stream
146
+ response.data.on('error', (err) => reject(err));
147
+ writer.on('error', (err) => reject(err));
148
+ writer.on('finish', () => resolve());
149
+ // Start piping after handlers are set
150
+ response.data.pipe(writer);
151
+ });
152
+ logger_1.logger.debug(`Downloaded craft archive to ${outputPath}`);
97
153
  }
98
154
  catch (error) {
99
- throw new Error(`Failed to download craft: ${error.message}`);
155
+ const message = error instanceof Error ? error.message : String(error);
156
+ throw new Error(`Failed to download craft: ${message}`);
100
157
  }
101
158
  }
159
+ /**
160
+ * Search for crafts in the registry
161
+ *
162
+ * @param query - Search query string
163
+ * @param type - Optional filter by craft type
164
+ * @returns Array of matching crafts
165
+ * @throws Error if no registry is configured
166
+ */
102
167
  async searchCrafts(query, type) {
103
- // Get the default registry from craftdesk.json or use fallback
168
+ // Get the default registry from craftdesk.json
104
169
  const craftDesk = await config_manager_1.configManager.getCraftDeskJson();
105
- const registryUrl = craftDesk?.registries?.default?.url || 'https://craftdesk.ai';
170
+ const registryUrl = craftDesk?.registries?.default?.url;
171
+ // Registry is required for search
172
+ if (!registryUrl) {
173
+ throw new Error('No registry configured. To search for crafts, add a registry to your craftdesk.json:\n' +
174
+ '{\n' +
175
+ ' "registries": {\n' +
176
+ ' "default": { "url": "https://your-registry.com" }\n' +
177
+ ' }\n' +
178
+ '}\n\n' +
179
+ 'Note: You can still add Git-based dependencies without a registry using GitHub URLs.');
180
+ }
106
181
  const client = await this.getClient(registryUrl);
107
182
  try {
108
183
  const params = { q: query };
@@ -112,21 +187,151 @@ class RegistryClient {
112
187
  return response.data.crafts || [];
113
188
  }
114
189
  catch (error) {
115
- logger_1.logger.error(`Failed to search crafts: ${error.message}`);
190
+ const message = error instanceof Error ? error.message : String(error);
191
+ logger_1.logger.error(`Failed to search crafts: ${message}`);
116
192
  return [];
117
193
  }
118
194
  }
195
+ /**
196
+ * Create a new version for a craft
197
+ *
198
+ * @param author - Craft author
199
+ * @param name - Craft name
200
+ * @param data - Version data including files and metadata
201
+ * @param data.version - Semantic version string (e.g., "1.0.0")
202
+ * @param data.type - Type of craft (skill, agent, command, hook, plugin)
203
+ * @param data.description - Human-readable description of the craft
204
+ * @param data.main_file - Path to the main file (e.g., "SKILL.md")
205
+ * @param data.changelog - Markdown formatted changelog for this version
206
+ * @param data.files - Array of file objects with path and content properties
207
+ * @returns Response from the API
208
+ * @throws Error if authentication fails or craft creation fails
209
+ */
210
+ async createVersion(author, name, data) {
211
+ const registryUrl = await config_manager_1.configManager.getDefaultRegistry();
212
+ if (!registryUrl) {
213
+ throw new Error('No registry configured. Add a registry to craftdesk.json first.');
214
+ }
215
+ const client = await this.getClient(registryUrl);
216
+ try {
217
+ logger_1.logger.debug(`Creating version ${data.version} for ${author}/${name}`);
218
+ const response = await client.post(`/api/v1/crafts/${author}/${name}/versions`, data);
219
+ return response.data;
220
+ }
221
+ catch (error) {
222
+ if (axios_1.default.isAxiosError(error)) {
223
+ if (error.response?.status === 401) {
224
+ throw new Error('Authentication required. Run "craftdesk login" first.');
225
+ }
226
+ else if (error.response?.status === 403) {
227
+ throw new Error('Not authorized to publish to this craft.');
228
+ }
229
+ else if (error.response?.data?.error) {
230
+ throw new Error(error.response.data.error);
231
+ }
232
+ }
233
+ const message = error instanceof Error ? error.message : String(error);
234
+ throw new Error(`Failed to create version: ${message}`);
235
+ }
236
+ }
237
+ /**
238
+ * Publish a craft (change status to published)
239
+ *
240
+ * @param author - Craft author
241
+ * @param name - Craft name
242
+ * @param options - Publishing options (visibility)
243
+ * @param options.visibility - Visibility level: "public", "private", or "organization"
244
+ * @returns Response from the API
245
+ * @throws Error if authentication fails or craft not found
246
+ */
247
+ async publishCraft(author, name, options) {
248
+ const registryUrl = await config_manager_1.configManager.getDefaultRegistry();
249
+ if (!registryUrl) {
250
+ throw new Error('No registry configured. Add a registry to craftdesk.json first.');
251
+ }
252
+ const client = await this.getClient(registryUrl);
253
+ try {
254
+ logger_1.logger.debug(`Publishing ${author}/${name} with visibility: ${options.visibility || 'public'}`);
255
+ const response = await client.patch(`/api/v1/crafts/${author}/${name}/publish`, options);
256
+ return response.data;
257
+ }
258
+ catch (error) {
259
+ if (axios_1.default.isAxiosError(error)) {
260
+ if (error.response?.status === 401) {
261
+ throw new Error('Authentication required. Run "craftdesk login" first.');
262
+ }
263
+ else if (error.response?.status === 403) {
264
+ throw new Error('Not authorized to publish this craft.');
265
+ }
266
+ else if (error.response?.status === 404) {
267
+ throw new Error('Craft not found.');
268
+ }
269
+ else if (error.response?.data?.error) {
270
+ throw new Error(error.response.data.error);
271
+ }
272
+ }
273
+ const message = error instanceof Error ? error.message : String(error);
274
+ throw new Error(`Failed to publish craft: ${message}`);
275
+ }
276
+ }
277
+ /**
278
+ * Verify an API token with a registry
279
+ *
280
+ * Calls GET /api/v1/me to validate the token and get user info
281
+ *
282
+ * @param registryUrl - The URL of the registry
283
+ * @param token - The API token to verify
284
+ * @returns User info if token is valid
285
+ * @throws Error if token is invalid or network error occurs
286
+ */
287
+ async verifyToken(registryUrl, token) {
288
+ try {
289
+ const response = await axios_1.default.get(`${registryUrl}/api/v1/me`, {
290
+ headers: {
291
+ 'Authorization': `Bearer ${token}`,
292
+ 'Content-Type': 'application/json'
293
+ },
294
+ timeout: 10000
295
+ });
296
+ return response.data;
297
+ }
298
+ catch (error) {
299
+ if (axios_1.default.isAxiosError(error) && error.response?.status === 401) {
300
+ throw new Error('Invalid or expired token');
301
+ }
302
+ const message = error instanceof Error ? error.message : String(error);
303
+ throw new Error(`Failed to verify token: ${message}`);
304
+ }
305
+ }
306
+ /**
307
+ * Parse a craft name into author and name components
308
+ *
309
+ * @param craftName - Craft name in 'author/name' or '@author/name' format
310
+ * @returns Tuple of [author, name]
311
+ * @throws Error if craft name format is invalid
312
+ * @private
313
+ */
119
314
  parseCraftName(craftName) {
315
+ // Handle author/name format (e.g., "john/rails-api")
316
+ if (craftName.includes('/') && !craftName.startsWith('@')) {
317
+ const parts = craftName.split('/');
318
+ // Validate exactly 2 non-empty parts
319
+ if (parts.length === 2 && parts[0] && parts[1]) {
320
+ return [parts[0], parts[1]];
321
+ }
322
+ }
323
+ // Handle scoped format: @author/name
120
324
  if (craftName.startsWith('@')) {
121
- // Scoped craft: @acme/skill-name
122
325
  const parts = craftName.substring(1).split('/');
123
- if (parts.length === 2) {
124
- return [`@${parts[0]}`, parts[1]];
326
+ // Validate exactly 2 non-empty parts
327
+ if (parts.length === 2 && parts[0] && parts[1]) {
328
+ return [parts[0], parts[1]];
125
329
  }
126
330
  }
127
- // Assume author is 'anthropic' for unscoped crafts (default)
128
- // This should be configurable or determined by registry
129
- return ['anthropic', craftName];
331
+ // For unscoped names without author, throw error
332
+ // Users must specify author/name format for registry crafts
333
+ throw new Error(`Invalid craft name format: "${craftName}". ` +
334
+ `Registry crafts must use "author/name" format with non-empty author and name (e.g., "john/rails-api")`);
130
335
  }
131
336
  }
132
337
  exports.RegistryClient = RegistryClient;
@@ -1 +1 @@
1
- {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../src/services/registry-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../src/services/registry-client.ts"],"names":[],"mappings":"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"}