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,372 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createUpdateCommand = createUpdateCommand;
7
+ const commander_1 = require("commander");
8
+ const child_process_1 = require("child_process");
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const file_system_1 = require("../utils/file-system");
12
+ const logger_1 = require("../utils/logger");
13
+ const registry_client_1 = require("../services/registry-client");
14
+ const installer_1 = require("../services/installer");
15
+ const config_manager_1 = require("../services/config-manager");
16
+ const version_utils_1 = require("../utils/version-utils");
17
+ /**
18
+ * Creates the update command for updating installed crafts to newer versions.
19
+ *
20
+ * @returns The configured Commander command instance
21
+ */
22
+ function createUpdateCommand() {
23
+ return new commander_1.Command('update')
24
+ .description('Update installed crafts to newer versions')
25
+ .argument('[craft]', 'Specific craft to update (optional)')
26
+ .option('--dry-run', 'Preview updates without applying')
27
+ .option('--git-only', 'Only update git-based dependencies')
28
+ .option('--registry-only', 'Only update registry dependencies')
29
+ .option('--latest', 'Ignore version constraints, update to latest')
30
+ .action(async (craft, options) => {
31
+ await updateCommand(craft, options);
32
+ });
33
+ }
34
+ async function updateCommand(craftName, options) {
35
+ try {
36
+ // Read craftdesk.json for project info
37
+ const craftDeskJson = await (0, file_system_1.readCraftDeskJson)();
38
+ if (!craftDeskJson) {
39
+ logger_1.logger.error('No craftdesk.json found in current directory');
40
+ process.exit(1);
41
+ }
42
+ // Read lockfile to get installed versions
43
+ const lockfile = await (0, file_system_1.readCraftDeskLock)();
44
+ if (!lockfile || !lockfile.crafts || Object.keys(lockfile.crafts).length === 0) {
45
+ logger_1.logger.warn('No crafts installed. Run "craftdesk install" first.');
46
+ process.exit(0);
47
+ }
48
+ logger_1.logger.info('Checking for updates...\n');
49
+ // Find available updates
50
+ const updates = await findAvailableUpdates(lockfile, options);
51
+ // Filter to specific craft if provided
52
+ const toUpdate = craftName
53
+ ? updates.filter(u => u.name === craftName || u.name.endsWith(`/${craftName}`))
54
+ : updates;
55
+ if (craftName && toUpdate.length === 0) {
56
+ const inLockfile = Object.keys(lockfile.crafts).find(n => n === craftName || n.endsWith(`/${craftName}`));
57
+ if (inLockfile) {
58
+ logger_1.logger.success(`${craftName} is already up to date!`);
59
+ }
60
+ else {
61
+ logger_1.logger.error(`Craft '${craftName}' is not installed.`);
62
+ process.exit(1);
63
+ }
64
+ return;
65
+ }
66
+ if (toUpdate.length === 0) {
67
+ logger_1.logger.success('All crafts are up to date!');
68
+ return;
69
+ }
70
+ // Display update preview
71
+ displayUpdatePreview(toUpdate);
72
+ if (options.dryRun) {
73
+ logger_1.logger.info('\nRun without --dry-run to apply updates.');
74
+ return;
75
+ }
76
+ // Perform updates
77
+ logger_1.logger.info('\nUpdating crafts...\n');
78
+ let successCount = 0;
79
+ let errorCount = 0;
80
+ for (const update of toUpdate) {
81
+ try {
82
+ logger_1.logger.startSpinner(`Updating ${update.name}...`);
83
+ // Get new lock entry
84
+ const newEntry = await fetchNewLockEntry(update, options.latest);
85
+ if (!newEntry) {
86
+ logger_1.logger.failSpinner(`Failed to fetch update info for ${update.name}`);
87
+ errorCount++;
88
+ continue;
89
+ }
90
+ // Remove old installation
91
+ const installPath = config_manager_1.configManager.getInstallPath();
92
+ const typeDir = installer_1.installer.getTypeDirectory(update.lockEntry.type);
93
+ const craftDir = path_1.default.join(process.cwd(), installPath, typeDir, update.name);
94
+ if (await fs_extra_1.default.pathExists(craftDir)) {
95
+ await fs_extra_1.default.remove(craftDir);
96
+ }
97
+ // Install new version
98
+ await installer_1.installer.installCraft(update.name, newEntry);
99
+ // Update lockfile entry
100
+ lockfile.crafts[update.name] = newEntry;
101
+ // Update craftdesk.json dependency if needed
102
+ if (craftDeskJson.dependencies && craftDeskJson.dependencies[update.name]) {
103
+ const currentDep = craftDeskJson.dependencies[update.name];
104
+ // Only update if using exact version or if --latest flag
105
+ const isString = typeof currentDep === 'string';
106
+ const usesCaretRange = isString && currentDep.startsWith('^');
107
+ if (options.latest || !usesCaretRange) {
108
+ if (isString) {
109
+ craftDeskJson.dependencies[update.name] = newEntry.version;
110
+ }
111
+ else {
112
+ // It's a DependencyConfig - update version field
113
+ const depConfig = craftDeskJson.dependencies[update.name];
114
+ depConfig.version = newEntry.version;
115
+ }
116
+ }
117
+ }
118
+ logger_1.logger.succeedSpinner(`Updated ${update.name}: ${(0, version_utils_1.colorize)(update.current, 'red')} → ${(0, version_utils_1.colorize)(newEntry.version, 'green')}`);
119
+ successCount++;
120
+ }
121
+ catch (error) {
122
+ const message = error instanceof Error ? error.message : String(error);
123
+ logger_1.logger.failSpinner(`Failed to update ${update.name}: ${message}`);
124
+ errorCount++;
125
+ }
126
+ }
127
+ // Update lockfile metadata
128
+ lockfile.generatedAt = new Date().toISOString();
129
+ if (lockfile.metadata) {
130
+ lockfile.metadata.totalCrafts = Object.keys(lockfile.crafts).length;
131
+ }
132
+ // Write updated files
133
+ await (0, file_system_1.writeCraftDeskLock)(lockfile);
134
+ await (0, file_system_1.writeCraftDeskJson)(craftDeskJson);
135
+ // Summary
136
+ console.log('');
137
+ if (successCount > 0) {
138
+ logger_1.logger.success(`Updated ${successCount} craft(s)`);
139
+ }
140
+ if (errorCount > 0) {
141
+ logger_1.logger.warn(`${errorCount} craft(s) failed to update`);
142
+ }
143
+ }
144
+ catch (error) {
145
+ const message = error instanceof Error ? error.message : String(error);
146
+ logger_1.logger.error(`Failed to update: ${message}`);
147
+ process.exit(1);
148
+ }
149
+ }
150
+ async function findAvailableUpdates(lockfile, options) {
151
+ const updates = [];
152
+ for (const [name, entry] of Object.entries(lockfile.crafts)) {
153
+ const lockEntry = entry;
154
+ // Skip based on options
155
+ if (options.gitOnly && !lockEntry.git)
156
+ continue;
157
+ if (options.registryOnly && lockEntry.git)
158
+ continue;
159
+ try {
160
+ let updateInfo = null;
161
+ if (lockEntry.git) {
162
+ // Git-based dependency
163
+ updateInfo = await checkGitUpdate(name, lockEntry);
164
+ }
165
+ else {
166
+ // Registry-based dependency
167
+ updateInfo = await checkRegistryUpdate(name, lockEntry);
168
+ }
169
+ if (updateInfo && updateInfo.current !== updateInfo.latest) {
170
+ updates.push(updateInfo);
171
+ }
172
+ }
173
+ catch (error) {
174
+ const message = error instanceof Error ? error.message : String(error);
175
+ logger_1.logger.debug(`Failed to check ${name}: ${message}`);
176
+ }
177
+ }
178
+ return updates;
179
+ }
180
+ async function checkRegistryUpdate(name, entry) {
181
+ try {
182
+ const craftInfo = await registry_client_1.registryClient.getCraftInfo(name);
183
+ if (!craftInfo) {
184
+ logger_1.logger.debug(`Could not fetch registry info for ${name}`);
185
+ return null;
186
+ }
187
+ const latestVersion = craftInfo.version || 'unknown';
188
+ const currentVersion = entry.version;
189
+ if (latestVersion === 'unknown' || latestVersion === currentVersion) {
190
+ return null;
191
+ }
192
+ return {
193
+ name,
194
+ current: currentVersion,
195
+ latest: latestVersion,
196
+ type: entry.type,
197
+ source: 'registry',
198
+ lockEntry: entry
199
+ };
200
+ }
201
+ catch (error) {
202
+ const message = error instanceof Error ? error.message : String(error);
203
+ logger_1.logger.debug(`Registry check failed for ${name}: ${message}`);
204
+ return null;
205
+ }
206
+ }
207
+ async function checkGitUpdate(name, entry) {
208
+ if (!entry.git)
209
+ return null;
210
+ try {
211
+ const gitUrl = entry.git;
212
+ const currentCommit = entry.commit || entry.integrity;
213
+ const currentTag = entry.tag;
214
+ const currentBranch = entry.branch || 'main';
215
+ let latestDisplay = '';
216
+ let hasUpdate = false;
217
+ if (currentTag) {
218
+ // Check for newer tags
219
+ const tags = getRemoteTags(gitUrl);
220
+ if (tags.length > 0) {
221
+ const sortedTags = (0, version_utils_1.sortTagsBySemver)(tags);
222
+ latestDisplay = sortedTags[0] || currentTag;
223
+ hasUpdate = latestDisplay !== currentTag && (0, version_utils_1.isNewerVersion)(currentTag, latestDisplay);
224
+ }
225
+ else {
226
+ return null;
227
+ }
228
+ }
229
+ else {
230
+ // Check for newer commits on branch
231
+ const latestCommit = getRemoteHeadCommit(gitUrl, currentBranch);
232
+ if (latestCommit && currentCommit) {
233
+ const shortCurrent = currentCommit.substring(0, 7);
234
+ const shortLatest = latestCommit.substring(0, 7);
235
+ latestDisplay = shortLatest;
236
+ hasUpdate = shortCurrent !== shortLatest && latestCommit !== currentCommit;
237
+ }
238
+ else {
239
+ return null;
240
+ }
241
+ }
242
+ if (!hasUpdate)
243
+ return null;
244
+ const currentDisplay = currentTag || currentCommit?.substring(0, 7) || 'unknown';
245
+ return {
246
+ name,
247
+ current: currentDisplay,
248
+ latest: latestDisplay,
249
+ type: entry.type,
250
+ source: 'git',
251
+ lockEntry: entry
252
+ };
253
+ }
254
+ catch (error) {
255
+ const message = error instanceof Error ? error.message : String(error);
256
+ logger_1.logger.debug(`Git check failed for ${name}: ${message}`);
257
+ return null;
258
+ }
259
+ }
260
+ async function fetchNewLockEntry(update, _latest) {
261
+ if (update.source === 'registry') {
262
+ // Fetch from registry
263
+ const craftInfo = await registry_client_1.registryClient.getCraftInfo(update.name, update.latest);
264
+ if (!craftInfo)
265
+ return null;
266
+ return {
267
+ version: craftInfo.version,
268
+ resolved: craftInfo.download_url || update.lockEntry.resolved,
269
+ integrity: craftInfo.integrity || update.lockEntry.integrity,
270
+ type: craftInfo.type,
271
+ author: craftInfo.author,
272
+ registry: update.lockEntry.registry,
273
+ dependencies: craftInfo.dependencies || update.lockEntry.dependencies
274
+ };
275
+ }
276
+ else {
277
+ // Git source - update tag/commit
278
+ const newEntry = { ...update.lockEntry };
279
+ if (!update.lockEntry.git) {
280
+ throw new Error('Git URL is required for git-based update');
281
+ }
282
+ if (update.lockEntry.tag) {
283
+ // Update to new tag
284
+ newEntry.tag = update.latest;
285
+ newEntry.version = update.latest.replace(/^v/, '');
286
+ // Get commit hash for new tag
287
+ const commit = getRemoteTagCommit(update.lockEntry.git, update.latest);
288
+ if (commit) {
289
+ newEntry.commit = commit;
290
+ newEntry.integrity = commit;
291
+ }
292
+ }
293
+ else {
294
+ // Update to new commit
295
+ const branch = update.lockEntry.branch || 'main';
296
+ const latestCommit = getRemoteHeadCommit(update.lockEntry.git, branch);
297
+ if (latestCommit) {
298
+ newEntry.commit = latestCommit;
299
+ newEntry.integrity = latestCommit;
300
+ newEntry.version = `0.0.0-${latestCommit.substring(0, 7)}`;
301
+ }
302
+ }
303
+ return newEntry;
304
+ }
305
+ }
306
+ function displayUpdatePreview(updates) {
307
+ const nameWidth = Math.max(30, ...updates.map(u => u.name.length + 2));
308
+ const colWidth = 14;
309
+ console.log('');
310
+ console.log((0, version_utils_1.padRight)('Craft', nameWidth) +
311
+ (0, version_utils_1.padRight)('Current', colWidth) +
312
+ (0, version_utils_1.padRight)('Latest', colWidth) +
313
+ 'Source');
314
+ console.log('-'.repeat(nameWidth + colWidth * 2 + 10));
315
+ for (const update of updates) {
316
+ const _updateType = (0, version_utils_1.getUpdateType)(update.current, update.latest);
317
+ const sourceCol = update.source === 'git' ? 'git' : 'registry';
318
+ console.log((0, version_utils_1.padRight)(update.name, nameWidth) +
319
+ (0, version_utils_1.colorize)((0, version_utils_1.padRight)(update.current, colWidth), 'red') +
320
+ (0, version_utils_1.colorize)((0, version_utils_1.padRight)(update.latest, colWidth), 'green') +
321
+ sourceCol);
322
+ }
323
+ console.log('');
324
+ logger_1.logger.info(`${updates.length} craft(s) can be updated.`);
325
+ }
326
+ function getRemoteTags(gitUrl) {
327
+ try {
328
+ const output = (0, child_process_1.execFileSync)('git', ['ls-remote', '--tags', gitUrl], {
329
+ encoding: 'utf8',
330
+ timeout: 15000
331
+ });
332
+ const tags = [];
333
+ const lines = output.split('\n');
334
+ for (const line of lines) {
335
+ const match = line.match(/refs\/tags\/([^^]+)$/);
336
+ if (match && match[1]) {
337
+ tags.push(match[1]);
338
+ }
339
+ }
340
+ return tags;
341
+ }
342
+ catch {
343
+ return [];
344
+ }
345
+ }
346
+ function getRemoteHeadCommit(gitUrl, branch) {
347
+ try {
348
+ const output = (0, child_process_1.execFileSync)('git', ['ls-remote', gitUrl, `refs/heads/${branch}`], {
349
+ encoding: 'utf8',
350
+ timeout: 15000
351
+ });
352
+ const match = output.match(/^([a-f0-9]+)/);
353
+ return match ? match[1] : null;
354
+ }
355
+ catch {
356
+ return null;
357
+ }
358
+ }
359
+ function getRemoteTagCommit(gitUrl, tag) {
360
+ try {
361
+ const output = (0, child_process_1.execFileSync)('git', ['ls-remote', gitUrl, `refs/tags/${tag}`], {
362
+ encoding: 'utf8',
363
+ timeout: 15000
364
+ });
365
+ const match = output.match(/^([a-f0-9]+)/);
366
+ return match ? match[1] : null;
367
+ }
368
+ catch {
369
+ return null;
370
+ }
371
+ }
372
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * verify command - Verify sync status across AI agents
3
+ *
4
+ * Checks if crafts are in sync across all configured agent directories
5
+ * by comparing checksums. Reports any drift or missing copies.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * Creates the 'verify' command for verifying sync status
10
+ *
11
+ * @returns Commander command instance configured for sync verification
12
+ */
13
+ export declare function createVerifyCommand(): Command;
14
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA8I7C"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * verify command - Verify sync status across AI agents
4
+ *
5
+ * Checks if crafts are in sync across all configured agent directories
6
+ * by comparing checksums. Reports any drift or missing copies.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createVerifyCommand = createVerifyCommand;
10
+ const commander_1 = require("commander");
11
+ const logger_1 = require("../utils/logger");
12
+ const multi_agent_sync_1 = require("../services/multi-agent-sync");
13
+ const config_manager_1 = require("../services/config-manager");
14
+ /**
15
+ * Creates the 'verify' command for verifying sync status
16
+ *
17
+ * @returns Commander command instance configured for sync verification
18
+ */
19
+ function createVerifyCommand() {
20
+ return new commander_1.Command('verify')
21
+ .description('Verify sync status of crafts across AI agents')
22
+ .option('-c, --craft <name>', 'Verify specific craft by name')
23
+ .option('-v, --verbose', 'Show detailed checksum information')
24
+ .option('-f, --format <format>', 'Output format (text or json)', 'text')
25
+ .action(async (options) => {
26
+ try {
27
+ // Check if multi-agent sync is enabled
28
+ const config = await config_manager_1.configManager.getCraftDeskJson();
29
+ if (!config?.multiAgent?.enabled) {
30
+ logger_1.logger.error('Multi-agent sync is not enabled');
31
+ console.log('\nTo enable multi-agent sync, run:');
32
+ console.log(' craftdesk setup-multi-agent\n');
33
+ process.exit(1);
34
+ }
35
+ logger_1.logger.startSpinner('Verifying sync status...');
36
+ if (options.craft) {
37
+ // Verify specific craft
38
+ const status = await multi_agent_sync_1.multiAgentSync.verifySync(options.craft);
39
+ logger_1.logger.stopSpinner();
40
+ if (options.format === 'json') {
41
+ console.log(JSON.stringify(status, null, 2));
42
+ return;
43
+ }
44
+ console.log(`\n🔍 Sync Status: ${options.craft}\n`);
45
+ console.log(`Canonical: ${config.multiAgent.canonical}/skills/${options.craft}`);
46
+ if (options.verbose) {
47
+ console.log(`Checksum: ${status.canonicalChecksum}`);
48
+ }
49
+ else {
50
+ console.log(`Checksum: ${status.canonicalChecksum.substring(0, 16)}...`);
51
+ }
52
+ console.log('');
53
+ if (status.inSync) {
54
+ console.log(`✅ All copies are in sync`);
55
+ console.log(`\nSynced locations (${status.inSyncLocations.length}):`);
56
+ for (const location of status.inSyncLocations) {
57
+ console.log(` ✓ ${location}`);
58
+ }
59
+ }
60
+ else {
61
+ console.log(`❌ Some copies are out of sync`);
62
+ if (status.inSyncLocations.length > 0) {
63
+ console.log(`\nIn sync (${status.inSyncLocations.length}):`);
64
+ for (const location of status.inSyncLocations) {
65
+ console.log(` ✓ ${location}`);
66
+ }
67
+ }
68
+ console.log(`\nOut of sync (${status.outOfSync.length}):`);
69
+ for (const location of status.outOfSync) {
70
+ const reasonIcon = location.reason === 'missing' ? '❌' : '⚠️';
71
+ console.log(` ${reasonIcon} ${location.path}`);
72
+ console.log(` Reason: ${location.reason}`);
73
+ if (options.verbose && location.actualChecksum) {
74
+ console.log(` Expected: ${location.expectedChecksum}`);
75
+ console.log(` Actual: ${location.actualChecksum}`);
76
+ }
77
+ }
78
+ console.log(`\n💡 Run \`craftdesk sync --craft ${options.craft}\` to fix`);
79
+ }
80
+ console.log('');
81
+ }
82
+ else {
83
+ // Verify all crafts
84
+ const statuses = await multi_agent_sync_1.multiAgentSync.verifyAllCrafts();
85
+ logger_1.logger.stopSpinner();
86
+ if (options.format === 'json') {
87
+ console.log(JSON.stringify(statuses, null, 2));
88
+ return;
89
+ }
90
+ if (statuses.length === 0) {
91
+ console.log('\nℹ️ No crafts found to verify\n');
92
+ return;
93
+ }
94
+ console.log(`\n🔍 Sync Status: All Crafts\n`);
95
+ const inSync = statuses.filter(s => s.inSync);
96
+ const outOfSync = statuses.filter(s => !s.inSync);
97
+ // Show summary first
98
+ console.log(`Summary:`);
99
+ console.log(` Total crafts: ${statuses.length}`);
100
+ console.log(` In sync: ${inSync.length}`);
101
+ console.log(` Out of sync: ${outOfSync.length}`);
102
+ console.log('');
103
+ // Show out of sync crafts
104
+ if (outOfSync.length > 0) {
105
+ console.log(`❌ Out of Sync (${outOfSync.length}):\n`);
106
+ for (const status of outOfSync) {
107
+ console.log(` ${status.craftName}`);
108
+ for (const location of status.outOfSync) {
109
+ const reasonIcon = location.reason === 'missing' ? '❌' : '⚠️';
110
+ console.log(` ${reasonIcon} ${location.path} (${location.reason})`);
111
+ if (options.verbose && location.actualChecksum) {
112
+ console.log(` Expected: ${location.expectedChecksum?.substring(0, 16)}...`);
113
+ console.log(` Actual: ${location.actualChecksum.substring(0, 16)}...`);
114
+ }
115
+ }
116
+ console.log('');
117
+ }
118
+ console.log(`💡 Run \`craftdesk sync\` to fix all issues\n`);
119
+ }
120
+ // Show in sync crafts if verbose
121
+ if (options.verbose && inSync.length > 0) {
122
+ console.log(`✅ In Sync (${inSync.length}):\n`);
123
+ for (const status of inSync) {
124
+ console.log(` ✓ ${status.craftName}`);
125
+ console.log(` Checksum: ${status.canonicalChecksum.substring(0, 16)}...`);
126
+ console.log(` Locations: ${status.inSyncLocations.length}`);
127
+ console.log('');
128
+ }
129
+ }
130
+ else if (outOfSync.length === 0) {
131
+ console.log(`✅ All ${inSync.length} craft(s) are in sync!\n`);
132
+ }
133
+ }
134
+ }
135
+ catch (error) {
136
+ logger_1.logger.failSpinner('Failed to verify sync status');
137
+ const message = error instanceof Error ? error.message : String(error);
138
+ logger_1.logger.error(`Error: ${message}`);
139
+ process.exit(1);
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Creates the whoami command for displaying the currently authenticated user.
4
+ *
5
+ * @returns The configured Commander command instance
6
+ */
7
+ export declare function createWhoamiCommand(): Command;
8
+ //# sourceMappingURL=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWhoamiCommand = createWhoamiCommand;
4
+ const commander_1 = require("commander");
5
+ const config_manager_1 = require("../services/config-manager");
6
+ const registry_client_1 = require("../services/registry-client");
7
+ const logger_1 = require("../utils/logger");
8
+ /**
9
+ * Creates the whoami command for displaying the currently authenticated user.
10
+ *
11
+ * @returns The configured Commander command instance
12
+ */
13
+ function createWhoamiCommand() {
14
+ return new commander_1.Command('whoami')
15
+ .description('Display the currently logged in user')
16
+ .option('--registry <url>', 'Registry URL to check')
17
+ .action(async (options) => {
18
+ await whoamiCommand(options);
19
+ });
20
+ }
21
+ async function whoamiCommand(options) {
22
+ try {
23
+ // 1. Get registry URL
24
+ const registryUrl = options.registry || await config_manager_1.configManager.getDefaultRegistry();
25
+ if (!registryUrl) {
26
+ logger_1.logger.error('No registry configured.');
27
+ logger_1.logger.info('Either specify --registry <url> or add a default registry to craftdesk.json');
28
+ process.exit(1);
29
+ }
30
+ // 2. Get token from config
31
+ const token = await config_manager_1.configManager.getAuthToken(registryUrl);
32
+ if (!token) {
33
+ logger_1.logger.info('Not logged in');
34
+ logger_1.logger.info(`Run "craftdesk login --registry ${registryUrl}" to authenticate`);
35
+ process.exit(1);
36
+ }
37
+ // 3. Verify token and get user info
38
+ const userInfo = await registry_client_1.registryClient.verifyToken(registryUrl, token);
39
+ // 4. Display user info
40
+ logger_1.logger.log(userInfo.username);
41
+ if (userInfo.organization) {
42
+ logger_1.logger.info(`Organization: ${userInfo.organization}`);
43
+ }
44
+ logger_1.logger.info(`Registry: ${registryUrl}`);
45
+ }
46
+ catch (error) {
47
+ const message = error instanceof Error ? error.message : String(error);
48
+ if (message.includes('Invalid') || message.includes('expired')) {
49
+ logger_1.logger.error('Token is invalid or expired');
50
+ logger_1.logger.info('Run "craftdesk login" to re-authenticate');
51
+ }
52
+ else {
53
+ logger_1.logger.error(message);
54
+ }
55
+ process.exit(1);
56
+ }
57
+ }
58
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;AAcA,kDAOC;AArBD,yCAAoC;AACpC,+DAA2D;AAC3D,iEAA6D;AAC7D,4CAAyC;AAMzC;;;;GAIG;AACH,SAAgB,mBAAmB;IACjC,OAAO,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QACvC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,8BAAa,CAAC,kBAAkB,EAAE,CAAC;QAEjF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACxC,eAAM,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,8BAAa,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,mCAAmC,WAAW,mBAAmB,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,MAAM,gCAAc,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEtE,uBAAuB;QACvB,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,eAAM,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;IAE1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,eAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}