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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-detector.js","sourceRoot":"","sources":["../../src/services/agent-detector.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,17 @@
1
1
  import { CraftDeskJson } from '../types/craftdesk-json';
2
+ /**
3
+ * Global configuration stored in ~/.craftdesk/config.json
4
+ * Used for persistent authentication tokens across sessions
5
+ */
6
+ interface GlobalConfig {
7
+ registries: {
8
+ [url: string]: {
9
+ token: string;
10
+ user: string;
11
+ };
12
+ };
13
+ defaultRegistry?: string;
14
+ }
2
15
  /**
3
16
  * Manages configuration for the CraftDesk CLI
4
17
  *
@@ -14,6 +27,7 @@ import { CraftDeskJson } from '../types/craftdesk-json';
14
27
  */
15
28
  export declare class ConfigManager {
16
29
  private craftDeskJson;
30
+ private globalConfig;
17
31
  /**
18
32
  * Gets the appropriate registry URL for a given craft
19
33
  *
@@ -38,26 +52,79 @@ export declare class ConfigManager {
38
52
  */
39
53
  getRegistryForCraft(craftName: string): Promise<string>;
40
54
  /**
41
- * Retrieves authentication token for a registry from environment variables
55
+ * Retrieves authentication token for a registry
42
56
  *
43
- * Looks for tokens in environment variables with the pattern:
44
- * CRAFTDESK_AUTH_{REGISTRY_NAME_UPPERCASE}
57
+ * Token precedence (first match wins):
58
+ * 1. Environment variable: CRAFTDESK_AUTH_{REGISTRY_NAME_UPPERCASE}
59
+ * 2. Global config file: ~/.craftdesk/config.json
45
60
  *
46
- * Hyphens in registry names are converted to underscores.
61
+ * Environment variables take precedence to allow CI/CD overrides.
47
62
  *
48
- * @param registryName - The name of the registry from craftdesk.json
63
+ * @param registryUrl - The URL of the registry (e.g., 'https://craftdesk.ai')
49
64
  * @returns The auth token if found, null otherwise
50
65
  *
51
66
  * @example
52
67
  * ```typescript
53
- * // For registry named 'company-private', looks for CRAFTDESK_AUTH_COMPANY_PRIVATE
54
- * const token = await configManager.getAuthToken('company-private');
68
+ * // Check for token (env var or config file)
69
+ * const token = await configManager.getAuthToken('https://craftdesk.ai');
70
+ *
71
+ * // Environment variable override:
72
+ * // export CRAFTDESK_AUTH_DEFAULT=token_abc123
73
+ * ```
74
+ */
75
+ getAuthToken(registryUrl: string): Promise<string | null>;
76
+ /**
77
+ * Convert registry URL or name to environment variable name suffix
78
+ *
79
+ * @param registryUrl - The registry URL or name to convert
80
+ * @returns Environment variable name suffix (e.g., 'CRAFTDESK_AI')
81
+ * @private
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // URL to env name
86
+ * getRegistryEnvName('https://craftdesk.ai');
87
+ * // Returns: 'CRAFTDESK_AI'
88
+ *
89
+ * // Registry name to env name
90
+ * getRegistryEnvName('company-private');
91
+ * // Returns: 'COMPANY_PRIVATE'
92
+ * ```
93
+ */
94
+ private getRegistryEnvName;
95
+ /**
96
+ * Gets the default registry URL from craftdesk.json
97
+ *
98
+ * @returns The default registry URL, or null if not configured
99
+ */
100
+ getDefaultRegistry(): Promise<string | null>;
101
+ /**
102
+ * Resolves a registry identifier to a full URL
103
+ *
104
+ * Handles three cases:
105
+ * 1. Full URL (http:// or https://) - returned as-is
106
+ * 2. Registry name - looked up in craftdesk.json registries section
107
+ * 3. Hostname - prefixed with https://
108
+ *
109
+ * @param registry - A URL, registry name, or hostname
110
+ * @returns The resolved registry URL
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * // Full URL - returned as-is
115
+ * await configManager.resolveRegistryUrl('https://my-registry.com');
116
+ * // Returns: 'https://my-registry.com'
55
117
  *
56
- * // Usage in shell:
57
- * // export CRAFTDESK_AUTH_COMPANY_PRIVATE=token_abc123
118
+ * // Registry name from craftdesk.json
119
+ * await configManager.resolveRegistryUrl('company-private');
120
+ * // Returns: 'https://company.internal' (from craftdesk.json)
121
+ *
122
+ * // Hostname - prefixed with https://
123
+ * await configManager.resolveRegistryUrl('my-registry.com');
124
+ * // Returns: 'https://my-registry.com'
58
125
  * ```
59
126
  */
60
- getAuthToken(registryName: string): Promise<string | null>;
127
+ resolveRegistryUrl(registry: string): Promise<string>;
61
128
  /**
62
129
  * Returns the installation path for crafts
63
130
  *
@@ -83,6 +150,57 @@ export declare class ConfigManager {
83
150
  * ```
84
151
  */
85
152
  getCraftDeskJson(): Promise<CraftDeskJson | null>;
153
+ /**
154
+ * Gets the path to the global config file
155
+ *
156
+ * @returns Path to ~/.craftdesk/config.json
157
+ */
158
+ getGlobalConfigPath(): string;
159
+ /**
160
+ * Loads the global configuration from ~/.craftdesk/config.json
161
+ *
162
+ * Returns an empty config if the file doesn't exist
163
+ *
164
+ * @returns The global configuration object
165
+ */
166
+ loadGlobalConfig(): Promise<GlobalConfig>;
167
+ /**
168
+ * Saves the global configuration to ~/.craftdesk/config.json
169
+ *
170
+ * Creates the .craftdesk directory if it doesn't exist
171
+ *
172
+ * @param config - The global configuration to save
173
+ */
174
+ saveGlobalConfig(config: GlobalConfig): Promise<void>;
175
+ /**
176
+ * Sets the authentication token for a registry
177
+ * Saves the token and username to the global config file
178
+ *
179
+ * @param registryUrl - The URL of the registry
180
+ * @param token - The API token to store
181
+ * @param username - The username associated with the token
182
+ */
183
+ setAuthToken(registryUrl: string, token: string, username: string): Promise<void>;
184
+ /**
185
+ * Removes the authentication token for a registry
186
+ *
187
+ * @param registryUrl - The URL of the registry to remove auth for
188
+ * @returns true if a token was removed, false if no token existed
189
+ */
190
+ removeAuthToken(registryUrl: string): Promise<boolean>;
191
+ /**
192
+ * Gets the stored username for a registry
193
+ *
194
+ * @param registryUrl - The URL of the registry
195
+ * @returns The username if found, null otherwise
196
+ */
197
+ getStoredUsername(registryUrl: string): Promise<string | null>;
198
+ /**
199
+ * Clears the cached global config
200
+ * Useful for testing or after external modifications
201
+ */
202
+ clearGlobalConfigCache(): void;
86
203
  }
87
204
  export declare const configManager: ConfigManager;
205
+ export {};
88
206
  //# sourceMappingURL=config-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/services/config-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA8B;IAEnD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B7D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAahE;;;;;;OAMG;IACH,cAAc,IAAI,MAAM;IAKxB;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAcxD;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/services/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;GAGG;AACH,UAAU,YAAY;IACpB,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B7D;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY/D;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKlD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB3D;;;;;;OAMG;IACH,cAAc,IAAI,MAAM;IAKxB;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBvD;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;IAK7B;;;;;;OAMG;IACG,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAiB/C;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D;;;;;;;OAOG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvF;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5D;;;;;OAKG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKpE;;;OAGG;IACH,sBAAsB,IAAI,IAAI;CAG/B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.configManager = exports.ConfigManager = void 0;
7
7
  const fs_extra_1 = __importDefault(require("fs-extra"));
8
8
  const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
9
10
  /**
10
11
  * Manages configuration for the CraftDesk CLI
11
12
  *
@@ -21,6 +22,7 @@ const path_1 = __importDefault(require("path"));
21
22
  */
22
23
  class ConfigManager {
23
24
  craftDeskJson = null;
25
+ globalConfig = null;
24
26
  /**
25
27
  * Gets the appropriate registry URL for a given craft
26
28
  *
@@ -53,7 +55,7 @@ class ConfigManager {
53
55
  if (craftName.startsWith('@') && craftDesk.registries) {
54
56
  const scope = craftName.split('/')[0];
55
57
  // Look for a registry with matching scope
56
- for (const [name, registry] of Object.entries(craftDesk.registries)) {
58
+ for (const [_name, registry] of Object.entries(craftDesk.registries)) {
57
59
  if (registry.scope === scope) {
58
60
  return registry.url;
59
61
  }
@@ -67,34 +69,111 @@ class ConfigManager {
67
69
  return 'https://craftdesk.ai';
68
70
  }
69
71
  /**
70
- * Retrieves authentication token for a registry from environment variables
72
+ * Retrieves authentication token for a registry
71
73
  *
72
- * Looks for tokens in environment variables with the pattern:
73
- * CRAFTDESK_AUTH_{REGISTRY_NAME_UPPERCASE}
74
+ * Token precedence (first match wins):
75
+ * 1. Environment variable: CRAFTDESK_AUTH_{REGISTRY_NAME_UPPERCASE}
76
+ * 2. Global config file: ~/.craftdesk/config.json
74
77
  *
75
- * Hyphens in registry names are converted to underscores.
78
+ * Environment variables take precedence to allow CI/CD overrides.
76
79
  *
77
- * @param registryName - The name of the registry from craftdesk.json
80
+ * @param registryUrl - The URL of the registry (e.g., 'https://craftdesk.ai')
78
81
  * @returns The auth token if found, null otherwise
79
82
  *
80
83
  * @example
81
84
  * ```typescript
82
- * // For registry named 'company-private', looks for CRAFTDESK_AUTH_COMPANY_PRIVATE
83
- * const token = await configManager.getAuthToken('company-private');
85
+ * // Check for token (env var or config file)
86
+ * const token = await configManager.getAuthToken('https://craftdesk.ai');
84
87
  *
85
- * // Usage in shell:
86
- * // export CRAFTDESK_AUTH_COMPANY_PRIVATE=token_abc123
88
+ * // Environment variable override:
89
+ * // export CRAFTDESK_AUTH_DEFAULT=token_abc123
87
90
  * ```
88
91
  */
89
- async getAuthToken(registryName) {
92
+ async getAuthToken(registryUrl) {
93
+ // 1. Check environment variable first (for CI/CD overrides)
94
+ const envVar = `CRAFTDESK_AUTH_${this.getRegistryEnvName(registryUrl)}`;
95
+ if (process.env[envVar]) {
96
+ return process.env[envVar] || null;
97
+ }
98
+ // 2. Check global config file
99
+ const config = await this.loadGlobalConfig();
100
+ return config.registries[registryUrl]?.token || null;
101
+ }
102
+ /**
103
+ * Convert registry URL or name to environment variable name suffix
104
+ *
105
+ * @param registryUrl - The registry URL or name to convert
106
+ * @returns Environment variable name suffix (e.g., 'CRAFTDESK_AI')
107
+ * @private
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * // URL to env name
112
+ * getRegistryEnvName('https://craftdesk.ai');
113
+ * // Returns: 'CRAFTDESK_AI'
114
+ *
115
+ * // Registry name to env name
116
+ * getRegistryEnvName('company-private');
117
+ * // Returns: 'COMPANY_PRIVATE'
118
+ * ```
119
+ */
120
+ getRegistryEnvName(registryUrl) {
121
+ try {
122
+ const url = new URL(registryUrl);
123
+ return url.hostname.toUpperCase().replace(/[.-]/g, '_');
124
+ }
125
+ catch {
126
+ // Not a URL - treat as registry name and convert directly
127
+ return registryUrl.toUpperCase().replace(/[.-]/g, '_');
128
+ }
129
+ }
130
+ /**
131
+ * Gets the default registry URL from craftdesk.json
132
+ *
133
+ * @returns The default registry URL, or null if not configured
134
+ */
135
+ async getDefaultRegistry() {
90
136
  const craftDesk = await this.getCraftDeskJson();
91
- if (!craftDesk?.registries?.[registryName]) {
92
- return null;
137
+ return craftDesk?.registries?.default?.url || null;
138
+ }
139
+ /**
140
+ * Resolves a registry identifier to a full URL
141
+ *
142
+ * Handles three cases:
143
+ * 1. Full URL (http:// or https://) - returned as-is
144
+ * 2. Registry name - looked up in craftdesk.json registries section
145
+ * 3. Hostname - prefixed with https://
146
+ *
147
+ * @param registry - A URL, registry name, or hostname
148
+ * @returns The resolved registry URL
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * // Full URL - returned as-is
153
+ * await configManager.resolveRegistryUrl('https://my-registry.com');
154
+ * // Returns: 'https://my-registry.com'
155
+ *
156
+ * // Registry name from craftdesk.json
157
+ * await configManager.resolveRegistryUrl('company-private');
158
+ * // Returns: 'https://company.internal' (from craftdesk.json)
159
+ *
160
+ * // Hostname - prefixed with https://
161
+ * await configManager.resolveRegistryUrl('my-registry.com');
162
+ * // Returns: 'https://my-registry.com'
163
+ * ```
164
+ */
165
+ async resolveRegistryUrl(registry) {
166
+ // If it's already a full URL, use it directly
167
+ if (registry.startsWith('http://') || registry.startsWith('https://')) {
168
+ return registry;
169
+ }
170
+ // Look it up in the craftdesk.json registries section by name
171
+ const craftDeskJson = await this.getCraftDeskJson();
172
+ if (craftDeskJson?.registries?.[registry]) {
173
+ return craftDeskJson.registries[registry].url;
93
174
  }
94
- // Auth tokens should be in environment variables for security
95
- // e.g., CRAFTDESK_AUTH_COMPANY_PRIVATE
96
- const envVar = `CRAFTDESK_AUTH_${registryName.toUpperCase().replace(/-/g, '_')}`;
97
- return process.env[envVar] || null;
175
+ // Assume it's a hostname without protocol
176
+ return `https://${registry}`;
98
177
  }
99
178
  /**
100
179
  * Returns the installation path for crafts
@@ -133,10 +212,103 @@ class ConfigManager {
133
212
  this.craftDeskJson = JSON.parse(content);
134
213
  return this.craftDeskJson;
135
214
  }
136
- catch (error) {
215
+ catch {
137
216
  return null;
138
217
  }
139
218
  }
219
+ // ============================================================
220
+ // Global Configuration Methods (~/.craftdesk/config.json)
221
+ // ============================================================
222
+ /**
223
+ * Gets the path to the global config file
224
+ *
225
+ * @returns Path to ~/.craftdesk/config.json
226
+ */
227
+ getGlobalConfigPath() {
228
+ const home = os_1.default.homedir();
229
+ return path_1.default.join(home, '.craftdesk', 'config.json');
230
+ }
231
+ /**
232
+ * Loads the global configuration from ~/.craftdesk/config.json
233
+ *
234
+ * Returns an empty config if the file doesn't exist
235
+ *
236
+ * @returns The global configuration object
237
+ */
238
+ async loadGlobalConfig() {
239
+ if (this.globalConfig) {
240
+ return this.globalConfig;
241
+ }
242
+ const configPath = this.getGlobalConfigPath();
243
+ try {
244
+ const content = await fs_extra_1.default.readFile(configPath, 'utf-8');
245
+ const config = JSON.parse(content);
246
+ this.globalConfig = config;
247
+ return config;
248
+ }
249
+ catch {
250
+ // Return empty config if file doesn't exist
251
+ return { registries: {} };
252
+ }
253
+ }
254
+ /**
255
+ * Saves the global configuration to ~/.craftdesk/config.json
256
+ *
257
+ * Creates the .craftdesk directory if it doesn't exist
258
+ *
259
+ * @param config - The global configuration to save
260
+ */
261
+ async saveGlobalConfig(config) {
262
+ const configPath = this.getGlobalConfigPath();
263
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(configPath));
264
+ await fs_extra_1.default.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
265
+ this.globalConfig = config;
266
+ }
267
+ /**
268
+ * Sets the authentication token for a registry
269
+ * Saves the token and username to the global config file
270
+ *
271
+ * @param registryUrl - The URL of the registry
272
+ * @param token - The API token to store
273
+ * @param username - The username associated with the token
274
+ */
275
+ async setAuthToken(registryUrl, token, username) {
276
+ const config = await this.loadGlobalConfig();
277
+ config.registries[registryUrl] = { token, user: username };
278
+ await this.saveGlobalConfig(config);
279
+ }
280
+ /**
281
+ * Removes the authentication token for a registry
282
+ *
283
+ * @param registryUrl - The URL of the registry to remove auth for
284
+ * @returns true if a token was removed, false if no token existed
285
+ */
286
+ async removeAuthToken(registryUrl) {
287
+ const config = await this.loadGlobalConfig();
288
+ if (config.registries[registryUrl]) {
289
+ delete config.registries[registryUrl];
290
+ await this.saveGlobalConfig(config);
291
+ return true;
292
+ }
293
+ return false;
294
+ }
295
+ /**
296
+ * Gets the stored username for a registry
297
+ *
298
+ * @param registryUrl - The URL of the registry
299
+ * @returns The username if found, null otherwise
300
+ */
301
+ async getStoredUsername(registryUrl) {
302
+ const config = await this.loadGlobalConfig();
303
+ return config.registries[registryUrl]?.user || null;
304
+ }
305
+ /**
306
+ * Clears the cached global config
307
+ * Useful for testing or after external modifications
308
+ */
309
+ clearGlobalConfigCache() {
310
+ this.globalConfig = null;
311
+ }
140
312
  }
141
313
  exports.ConfigManager = ConfigManager;
142
314
  exports.configManager = new ConfigManager();
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/services/config-manager.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;AAC1B,gDAAwB;AAIxB;;;;;;;;;;;;GAYG;AACH,MAAa,aAAa;IAChB,aAAa,GAAyB,IAAI,CAAC;IAEnD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,mBAAmB,CAAC,SAAiB;QACzC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,sBAAsB,CAAC;QAChC,CAAC;QAED,6DAA6D;QAC7D,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtC,0CAA0C;YAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpE,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC7B,OAAO,QAAQ,CAAC,GAAG,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1C,CAAC;QAED,iBAAiB;QACjB,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,YAAY,CAAC,YAAoB;QACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEhD,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8DAA8D;QAC9D,uCAAuC;QACvC,MAAM,MAAM,GAAG,kBAAkB,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACjF,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACH,cAAc;QACZ,+CAA+C;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAjID,sCAiIC;AAEY,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/services/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ConversionOptions, ConversionResult, SupportedFormat } from '../types/converter';
2
+ /**
3
+ * Service for converting crafts between formats
4
+ */
5
+ export declare class ConverterService {
6
+ /**
7
+ * Create a converter instance for the specified format
8
+ *
9
+ * @param options - Conversion options
10
+ * @returns Converter instance
11
+ * @throws Error if format is not supported
12
+ */
13
+ private createConverter;
14
+ /**
15
+ * Convert a craft from a directory
16
+ *
17
+ * @param craftDir - Directory containing the craft
18
+ * @param options - Conversion options
19
+ * @returns Conversion result
20
+ */
21
+ convertFromDirectory(craftDir: string, options: ConversionOptions): Promise<ConversionResult>;
22
+ /**
23
+ * Convert and write output files
24
+ *
25
+ * @param craftDir - Directory containing the craft
26
+ * @param options - Conversion options
27
+ * @param outputDir - Optional output directory
28
+ * @returns Conversion result
29
+ */
30
+ convertAndWrite(craftDir: string, options: ConversionOptions, outputDir?: string): Promise<ConversionResult>;
31
+ /**
32
+ * Convert all installed crafts
33
+ *
34
+ * @param claudeDir - Claude directory path
35
+ * @param options - Conversion options
36
+ * @param outputDir - Optional output directory
37
+ * @returns Array of craft names with conversion results
38
+ */
39
+ convertAllInstalled(claudeDir: string, options: ConversionOptions, outputDir?: string): Promise<Array<{
40
+ craft: string;
41
+ result: ConversionResult;
42
+ }>>;
43
+ /**
44
+ * Get list of supported formats
45
+ *
46
+ * @returns Array of supported formats with descriptions
47
+ */
48
+ getSupportedFormats(): Array<{
49
+ format: SupportedFormat;
50
+ description: string;
51
+ }>;
52
+ }
53
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/services/converter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAEhB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAgBvB;;;;;;OAMG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IAuD5B;;;;;;;OAOG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC;IAqC5B;;;;;;;OAOG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IA4C9D;;;;OAIG;IACH,mBAAmB,IAAI,KAAK,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAO/E"}