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
package/dist/index.js CHANGED
@@ -7,12 +7,21 @@ const install_1 = require("./commands/install");
7
7
  const add_1 = require("./commands/add");
8
8
  const remove_1 = require("./commands/remove");
9
9
  const list_1 = require("./commands/list");
10
+ const search_1 = require("./commands/search");
11
+ const info_1 = require("./commands/info");
12
+ const outdated_1 = require("./commands/outdated");
13
+ const update_1 = require("./commands/update");
14
+ const publish_1 = require("./commands/publish");
15
+ const login_1 = require("./commands/login");
16
+ const logout_1 = require("./commands/logout");
17
+ const whoami_1 = require("./commands/whoami");
18
+ const convert_1 = require("./commands/convert");
10
19
  const logger_1 = require("./utils/logger");
11
20
  const program = new commander_1.Command();
12
21
  program
13
22
  .name('craftdesk')
14
23
  .description('CLI for managing CraftDesk AI capabilities')
15
- .version('0.2.0', '-v, --version')
24
+ .version('0.3.0', '-v, --version')
16
25
  .option('-d, --debug', 'Enable debug output', () => {
17
26
  process.env.DEBUG = 'true';
18
27
  });
@@ -22,6 +31,15 @@ program.addCommand((0, install_1.createInstallCommand)());
22
31
  program.addCommand((0, add_1.createAddCommand)());
23
32
  program.addCommand((0, remove_1.createRemoveCommand)());
24
33
  program.addCommand((0, list_1.createListCommand)());
34
+ program.addCommand((0, search_1.createSearchCommand)());
35
+ program.addCommand((0, info_1.createInfoCommand)());
36
+ program.addCommand((0, outdated_1.createOutdatedCommand)());
37
+ program.addCommand((0, update_1.createUpdateCommand)());
38
+ program.addCommand((0, publish_1.createPublishCommand)());
39
+ program.addCommand((0, login_1.createLoginCommand)());
40
+ program.addCommand((0, logout_1.createLogoutCommand)());
41
+ program.addCommand((0, whoami_1.createWhoamiCommand)());
42
+ program.addCommand((0, convert_1.createConvertCommand)());
25
43
  // Add aliases
26
44
  program.command('i', { hidden: true }).action(() => {
27
45
  program.parse(['', '', 'install', ...process.argv.slice(3)]);
@@ -39,9 +57,22 @@ if (process.argv.length === 2) {
39
57
  logger_1.logger.log('Dependency management for AI capabilities');
40
58
  logger_1.logger.log('');
41
59
  logger_1.logger.log('Getting started:');
42
- logger_1.logger.log(' craftdesk init Create a new craftdesk.json file');
43
- logger_1.logger.log(' craftdesk install Install all dependencies');
44
- logger_1.logger.log(' craftdesk add <pkg> Add a new dependency');
60
+ logger_1.logger.log(' craftdesk init Create a new craftdesk.json file');
61
+ logger_1.logger.log(' craftdesk search <q> Search for crafts in registry');
62
+ logger_1.logger.log(' craftdesk info <name> Show craft information');
63
+ logger_1.logger.log(' craftdesk add <pkg> Add a new dependency');
64
+ logger_1.logger.log(' craftdesk install Install all dependencies');
65
+ logger_1.logger.log(' craftdesk outdated Check for newer versions');
66
+ logger_1.logger.log(' craftdesk update Update crafts to newer versions');
67
+ logger_1.logger.log(' craftdesk publish Publish a craft to the registry');
68
+ logger_1.logger.log('');
69
+ logger_1.logger.log('Format Conversion:');
70
+ logger_1.logger.log(' craftdesk convert Convert crafts to other AI editor formats');
71
+ logger_1.logger.log('');
72
+ logger_1.logger.log('Authentication:');
73
+ logger_1.logger.log(' craftdesk login Authenticate with a registry');
74
+ logger_1.logger.log(' craftdesk logout Remove authentication');
75
+ logger_1.logger.log(' craftdesk whoami Show logged in user');
45
76
  logger_1.logger.log('');
46
77
  logger_1.logger.log('Run "craftdesk --help" for full command list');
47
78
  process.exit(0);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,gDAA0D;AAC1D,wCAAkD;AAClD,8CAAwD;AACxD,0CAAoD;AACpD,2CAAwC;AAExC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;KACjC,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAgB,GAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,IAAA,4BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AAExC,cAAc;AACd,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;IACjD,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,iBAAiB;AACjB,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,eAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3D,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,eAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC/B,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACxD,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC/B,eAAM,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACtE,eAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC9D,eAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC1D,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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;IAgB/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,102 @@ 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
+ this.globalConfig = JSON.parse(content);
246
+ return this.globalConfig;
247
+ }
248
+ catch {
249
+ // Return empty config if file doesn't exist
250
+ return { registries: {} };
251
+ }
252
+ }
253
+ /**
254
+ * Saves the global configuration to ~/.craftdesk/config.json
255
+ *
256
+ * Creates the .craftdesk directory if it doesn't exist
257
+ *
258
+ * @param config - The global configuration to save
259
+ */
260
+ async saveGlobalConfig(config) {
261
+ const configPath = this.getGlobalConfigPath();
262
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(configPath));
263
+ await fs_extra_1.default.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
264
+ this.globalConfig = config;
265
+ }
266
+ /**
267
+ * Sets the authentication token for a registry
268
+ * Saves the token and username to the global config file
269
+ *
270
+ * @param registryUrl - The URL of the registry
271
+ * @param token - The API token to store
272
+ * @param username - The username associated with the token
273
+ */
274
+ async setAuthToken(registryUrl, token, username) {
275
+ const config = await this.loadGlobalConfig();
276
+ config.registries[registryUrl] = { token, user: username };
277
+ await this.saveGlobalConfig(config);
278
+ }
279
+ /**
280
+ * Removes the authentication token for a registry
281
+ *
282
+ * @param registryUrl - The URL of the registry to remove auth for
283
+ * @returns true if a token was removed, false if no token existed
284
+ */
285
+ async removeAuthToken(registryUrl) {
286
+ const config = await this.loadGlobalConfig();
287
+ if (config.registries[registryUrl]) {
288
+ delete config.registries[registryUrl];
289
+ await this.saveGlobalConfig(config);
290
+ return true;
291
+ }
292
+ return false;
293
+ }
294
+ /**
295
+ * Gets the stored username for a registry
296
+ *
297
+ * @param registryUrl - The URL of the registry
298
+ * @returns The username if found, null otherwise
299
+ */
300
+ async getStoredUsername(registryUrl) {
301
+ const config = await this.loadGlobalConfig();
302
+ return config.registries[registryUrl]?.user || null;
303
+ }
304
+ /**
305
+ * Clears the cached global config
306
+ * Useful for testing or after external modifications
307
+ */
308
+ clearGlobalConfigCache() {
309
+ this.globalConfig = null;
310
+ }
140
311
  }
141
312
  exports.ConfigManager = ConfigManager;
142
313
  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"}