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.
- package/CHANGELOG.md +88 -0
- package/README.md +1609 -132
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +306 -8
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/convert.d.ts +8 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +146 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/detect-agents.d.ts +14 -0
- package/dist/commands/detect-agents.d.ts.map +1 -0
- package/dist/commands/detect-agents.js +86 -0
- package/dist/commands/detect-agents.js.map +1 -0
- package/dist/commands/embed.d.ts +14 -0
- package/dist/commands/embed.d.ts.map +1 -0
- package/dist/commands/embed.js +147 -0
- package/dist/commands/embed.js.map +1 -0
- package/dist/commands/info.d.ts +8 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +66 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +24 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +75 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +51 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/outdated.d.ts +23 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +268 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +203 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +5 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +51 -10
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +60 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/setup-multi-agent.d.ts +17 -0
- package/dist/commands/setup-multi-agent.d.ts.map +1 -0
- package/dist/commands/setup-multi-agent.js +188 -0
- package/dist/commands/setup-multi-agent.js.map +1 -0
- package/dist/commands/sync.d.ts +14 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +144 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/unembed.d.ts +14 -0
- package/dist/commands/unembed.d.ts.map +1 -0
- package/dist/commands/unembed.js +96 -0
- package/dist/commands/unembed.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +372 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +14 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +143 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +58 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/converters/base-converter.d.ts +89 -0
- package/dist/converters/base-converter.d.ts.map +1 -0
- package/dist/converters/base-converter.js +249 -0
- package/dist/converters/base-converter.js.map +1 -0
- package/dist/converters/continue-converter.d.ts +53 -0
- package/dist/converters/continue-converter.d.ts.map +1 -0
- package/dist/converters/continue-converter.js +243 -0
- package/dist/converters/continue-converter.js.map +1 -0
- package/dist/converters/cursor-converter.d.ts +70 -0
- package/dist/converters/cursor-converter.d.ts.map +1 -0
- package/dist/converters/cursor-converter.js +272 -0
- package/dist/converters/cursor-converter.js.map +1 -0
- package/dist/index.js +56 -3
- package/dist/index.js.map +1 -1
- package/dist/services/agent-detector.d.ts +57 -0
- package/dist/services/agent-detector.d.ts.map +1 -0
- package/dist/services/agent-detector.js +146 -0
- package/dist/services/agent-detector.js.map +1 -0
- package/dist/services/config-manager.d.ts +128 -10
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +190 -18
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/converter.d.ts +53 -0
- package/dist/services/converter.d.ts.map +1 -0
- package/dist/services/converter.js +185 -0
- package/dist/services/converter.js.map +1 -0
- package/dist/services/craft-wrapper.d.ts +108 -0
- package/dist/services/craft-wrapper.d.ts.map +1 -0
- package/dist/services/craft-wrapper.js +268 -0
- package/dist/services/craft-wrapper.js.map +1 -0
- package/dist/services/git-resolver.d.ts +9 -3
- package/dist/services/git-resolver.d.ts.map +1 -1
- package/dist/services/git-resolver.js +44 -20
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/gitignore-manager.d.ts +74 -0
- package/dist/services/gitignore-manager.d.ts.map +1 -0
- package/dist/services/gitignore-manager.js +188 -0
- package/dist/services/gitignore-manager.js.map +1 -0
- package/dist/services/installer.d.ts +60 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +295 -20
- package/dist/services/installer.js.map +1 -1
- package/dist/services/multi-agent-sync.d.ts +88 -0
- package/dist/services/multi-agent-sync.d.ts.map +1 -0
- package/dist/services/multi-agent-sync.js +316 -0
- package/dist/services/multi-agent-sync.js.map +1 -0
- package/dist/services/plugin-resolver.d.ts +80 -0
- package/dist/services/plugin-resolver.d.ts.map +1 -0
- package/dist/services/plugin-resolver.js +183 -0
- package/dist/services/plugin-resolver.js.map +1 -0
- package/dist/services/registry-client.d.ts +132 -5
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +239 -34
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/settings-manager.d.ts +151 -0
- package/dist/services/settings-manager.d.ts.map +1 -0
- package/dist/services/settings-manager.js +333 -0
- package/dist/services/settings-manager.js.map +1 -0
- package/dist/types/claude-settings.d.ts +155 -0
- package/dist/types/claude-settings.d.ts.map +1 -0
- package/dist/types/claude-settings.js +20 -0
- package/dist/types/claude-settings.js.map +1 -0
- package/dist/types/converter.d.ts +98 -0
- package/dist/types/converter.d.ts.map +1 -0
- package/dist/types/converter.js +6 -0
- package/dist/types/converter.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +76 -3
- package/dist/types/craftdesk-json.d.ts.map +1 -1
- package/dist/types/craftdesk-lock.d.ts +62 -1
- package/dist/types/craftdesk-lock.d.ts.map +1 -1
- package/dist/types/multi-agent.d.ts +85 -0
- package/dist/types/multi-agent.d.ts.map +1 -0
- package/dist/types/multi-agent.js +6 -0
- package/dist/types/multi-agent.js.map +1 -0
- package/dist/utils/crypto.d.ts +23 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +52 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file-system.d.ts +43 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +45 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +76 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/version-utils.d.ts +63 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +130 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +36 -9
- package/.claude/settings.local.json +0 -19
- package/.github/workflows/ci.yml +0 -94
- package/API.md +0 -414
- package/TESTING.md +0 -263
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -56
- package/dist/commands/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -17
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -3
- package/dist/types/config.js.map +0 -1
- package/docs/DEPENDENCY_RESOLUTION.md +0 -237
- package/examples/craftdesk-all-sources.json +0 -79
- package/examples/craftdesk-git-monorepo.json +0 -41
- package/examples/craftdesk-multi-registry.json +0 -40
- package/examples/craftdesk-with-registries.json +0 -49
- package/examples/simple-craftdesk.json +0 -10
- package/src/commands/add.ts +0 -314
- package/src/commands/init.ts +0 -55
- package/src/commands/install.ts +0 -126
- package/src/commands/list.ts +0 -126
- package/src/commands/remove.ts +0 -82
- package/src/index.ts +0 -56
- package/src/services/config-manager.ts +0 -150
- package/src/services/git-resolver.ts +0 -373
- package/src/services/installer.ts +0 -314
- package/src/services/registry-client.ts +0 -163
- package/src/types/craftdesk-json.ts +0 -53
- package/src/types/craftdesk-lock.ts +0 -38
- package/src/utils/file-system.ts +0 -55
- package/src/utils/logger.ts +0 -82
- package/tests/fixtures/craftdesk-git.json +0 -17
- package/tests/fixtures/craftdesk.json +0 -15
- package/tests/helpers/test-utils.ts +0 -60
- package/tests/integration/init-command.test.ts +0 -70
- package/tests/integration/list-command.test.ts +0 -77
- package/tests/unit/config-manager.test.ts +0 -228
- package/tests/unit/git-resolver.test.ts +0 -303
- package/tests/unit/installer.test.ts +0 -105
- package/tsconfig.json +0 -20
- 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"}
|