agent-config-sync 0.1.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.
@@ -0,0 +1,38 @@
1
+ import type { TargetName } from './types.js';
2
+ /**
3
+ * Show MCP status for the current project.
4
+ */
5
+ export declare function mcpStatus(verbose?: boolean): Promise<void>;
6
+ export interface McpAddOptions {
7
+ packageId: string;
8
+ targets: TargetName[];
9
+ noRegister: boolean;
10
+ }
11
+ /**
12
+ * Add an MCP server to the current project.
13
+ */
14
+ export declare function mcpAdd(options: McpAddOptions): Promise<void>;
15
+ export interface McpRemoveOptions {
16
+ serverName: string;
17
+ targets: TargetName[];
18
+ }
19
+ /**
20
+ * Remove an MCP server from the current project.
21
+ */
22
+ export declare function mcpRemove(options: McpRemoveOptions): Promise<void>;
23
+ export interface McpEnableOptions {
24
+ serverName: string;
25
+ targets: TargetName[];
26
+ }
27
+ /**
28
+ * Enable an MCP server in the current project.
29
+ */
30
+ export declare function mcpEnable(options: McpEnableOptions): Promise<void>;
31
+ export interface McpDisableOptions {
32
+ serverName: string;
33
+ targets: TargetName[];
34
+ }
35
+ /**
36
+ * Disable an MCP server in the current project.
37
+ */
38
+ export declare function mcpDisable(options: McpDisableOptions): Promise<void>;
@@ -0,0 +1,179 @@
1
+ import { discoverProject } from './project-discovery.js';
2
+ import { getMcpServers } from './config-adapters.js';
3
+ // ============================================================================
4
+ // Status Command
5
+ // ============================================================================
6
+ /**
7
+ * Show MCP status for the current project.
8
+ */
9
+ export async function mcpStatus(verbose = false) {
10
+ const discovery = await discoverProject();
11
+ const status = await buildMcpStatus(discovery.root);
12
+ printMcpStatus(status, verbose);
13
+ }
14
+ async function buildMcpStatus(projectRoot) {
15
+ const { targets } = await discoverProject();
16
+ const serverMap = new Map();
17
+ for (const [target, configPath] of targets.entries()) {
18
+ if (!configPath.exists)
19
+ continue;
20
+ const servers = await getMcpServers(target, configPath.path);
21
+ for (const [name, info] of Object.entries(servers)) {
22
+ if (!info.enabled)
23
+ continue;
24
+ const existing = serverMap.get(name);
25
+ if (existing) {
26
+ existing.targets.push(target);
27
+ }
28
+ else {
29
+ serverMap.set(name, {
30
+ name,
31
+ enabled: true,
32
+ targets: [target],
33
+ source: 'inline', // TODO: detect from catalog
34
+ });
35
+ }
36
+ }
37
+ }
38
+ const servers = Array.from(serverMap.values());
39
+ const enabledCount = servers.filter((s) => s.enabled).length;
40
+ return {
41
+ projectRoot,
42
+ servers,
43
+ totalCount: servers.length,
44
+ enabledCount,
45
+ };
46
+ }
47
+ function printMcpStatus(status, verbose) {
48
+ console.log(`Project: ${status.projectRoot}`);
49
+ console.log(`MCP Servers (${status.totalCount} total, ${status.enabledCount} enabled):\n`);
50
+ if (status.servers.length === 0) {
51
+ console.log('No MCP servers configured.');
52
+ console.log('Run `acsync mcp add <package>` to add a server.\n');
53
+ return;
54
+ }
55
+ if (verbose) {
56
+ // Verbose output
57
+ for (const server of status.servers) {
58
+ console.log(`MCP Server: ${server.name}`);
59
+ console.log(` Status: ${server.enabled ? '✓' : '✗'} ${server.enabled ? 'Enabled' : 'Disabled'}`);
60
+ console.log(` Targets: ${server.targets.join(', ') || '(none)'}`);
61
+ console.log(` Source: ${server.source}\n`);
62
+ }
63
+ }
64
+ else {
65
+ // Compact table output
66
+ const NAME_WIDTH = 30;
67
+ const ENABLED_WIDTH = 7;
68
+ const TARGETS_WIDTH = 15;
69
+ const SOURCE_WIDTH = 7;
70
+ const borderH = '┌' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(ENABLED_WIDTH + 2) + '┬' + '─'.repeat(TARGETS_WIDTH + 2) + '┬' + '─'.repeat(SOURCE_WIDTH + 2) + '┐';
71
+ const borderM = '├' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(ENABLED_WIDTH + 2) + '┼' + '─'.repeat(TARGETS_WIDTH + 2) + '┼' + '─'.repeat(SOURCE_WIDTH + 2) + '┤';
72
+ const borderF = '└' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(ENABLED_WIDTH + 2) + '┴' + '─'.repeat(TARGETS_WIDTH + 2) + '┴' + '─'.repeat(SOURCE_WIDTH + 2) + '┘';
73
+ console.log(borderH);
74
+ console.log('│ ' + padRight('Name', NAME_WIDTH) + ' │ ' + padRight('Enabled', ENABLED_WIDTH) + ' │ ' + padRight('Targets', TARGETS_WIDTH) + ' │ ' + padRight('Source', SOURCE_WIDTH) + ' │');
75
+ console.log(borderM);
76
+ for (const server of status.servers) {
77
+ const name = truncate(server.name, NAME_WIDTH);
78
+ const enabled = server.enabled ? '✓' : '✗';
79
+ const targets = truncate(server.targets.join(', ') || '(none)', TARGETS_WIDTH);
80
+ const source = padRight(server.source, SOURCE_WIDTH);
81
+ console.log('│ ' + padRight(name, NAME_WIDTH) + ' │ ' + center(enabled, ENABLED_WIDTH) + ' │ ' + padRight(targets, TARGETS_WIDTH) + ' │ ' + source + ' │');
82
+ }
83
+ console.log(borderF);
84
+ console.log();
85
+ console.log('Run `acsync mcp <name>` for details, `acsync mcp add` to add new servers.\n');
86
+ }
87
+ }
88
+ function truncate(str, maxLen) {
89
+ if (str.length > maxLen) {
90
+ return str.slice(0, maxLen - 1) + '…';
91
+ }
92
+ return str;
93
+ }
94
+ function center(str, width) {
95
+ const len = str.length;
96
+ if (len >= width)
97
+ return str;
98
+ const left = Math.floor((width - len) / 2);
99
+ const right = width - len - left;
100
+ return ' '.repeat(left) + str + ' '.repeat(right);
101
+ }
102
+ function padRight(str, len) {
103
+ return str.padEnd(len, ' ');
104
+ }
105
+ /**
106
+ * Add an MCP server to the current project.
107
+ */
108
+ export async function mcpAdd(options) {
109
+ const { normalizeMcpPackage, getMcp } = await import('./catalog.js');
110
+ // Check if entry exists in catalog first
111
+ let entry = await getMcp(options.packageId);
112
+ // If not in catalog, normalize and optionally add
113
+ if (!entry) {
114
+ entry = normalizeMcpPackage(options.packageId);
115
+ // Add to catalog if --no-register is false
116
+ if (!options.noRegister) {
117
+ const { addMcp } = await import('./catalog.js');
118
+ await addMcp(entry);
119
+ console.log(`Added to catalog: ${entry.id}`);
120
+ }
121
+ }
122
+ // Add to each target
123
+ const discovery = await discoverProject();
124
+ const { addMcpToConfig } = await import('./config-adapters.js');
125
+ for (const target of options.targets) {
126
+ const configPath = discovery.targets.get(target);
127
+ if (!configPath)
128
+ continue;
129
+ await addMcpToConfig(target, configPath.path, entry.id, entry.recipe);
130
+ console.log(`Added to ${target}: ${entry.id}`);
131
+ }
132
+ console.log('\nRun `acsync mcp` to see the updated status.');
133
+ }
134
+ /**
135
+ * Remove an MCP server from the current project.
136
+ */
137
+ export async function mcpRemove(options) {
138
+ const discovery = await discoverProject();
139
+ const { removeMcpFromConfig } = await import('./config-adapters.js');
140
+ for (const target of options.targets) {
141
+ const configPath = discovery.targets.get(target);
142
+ if (!configPath)
143
+ continue;
144
+ await removeMcpFromConfig(target, configPath.path, options.serverName);
145
+ console.log(`Removed from ${target}: ${options.serverName}`);
146
+ }
147
+ console.log('\nRun `acsync mcp` to see the updated status.');
148
+ }
149
+ /**
150
+ * Enable an MCP server in the current project.
151
+ */
152
+ export async function mcpEnable(options) {
153
+ const discovery = await discoverProject();
154
+ const { enableMcpInConfig } = await import('./config-adapters.js');
155
+ for (const target of options.targets) {
156
+ const configPath = discovery.targets.get(target);
157
+ if (!configPath)
158
+ continue;
159
+ await enableMcpInConfig(target, configPath.path, options.serverName);
160
+ console.log(`Enabled in ${target}: ${options.serverName}`);
161
+ }
162
+ console.log('\nRun `acsync mcp` to see the updated status.');
163
+ }
164
+ /**
165
+ * Disable an MCP server in the current project.
166
+ */
167
+ export async function mcpDisable(options) {
168
+ const discovery = await discoverProject();
169
+ const { disableMcpInConfig } = await import('./config-adapters.js');
170
+ for (const target of options.targets) {
171
+ const configPath = discovery.targets.get(target);
172
+ if (!configPath)
173
+ continue;
174
+ await disableMcpInConfig(target, configPath.path, options.serverName);
175
+ console.log(`Disabled in ${target}: ${options.serverName}`);
176
+ }
177
+ console.log('\nRun `acsync mcp` to see the updated status.');
178
+ }
179
+ //# sourceMappingURL=cli-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-mcp.js","sourceRoot":"","sources":["../src/cli-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { TargetName } from './types.js';
2
+ /**
3
+ * Show skill status for the current project.
4
+ */
5
+ export declare function skillStatus(verbose?: boolean): Promise<void>;
6
+ export interface SkillAddOptions {
7
+ skillId: string;
8
+ targets: TargetName[];
9
+ noRegister: boolean;
10
+ }
11
+ /**
12
+ * Add a skill to the current project.
13
+ */
14
+ export declare function skillAdd(options: SkillAddOptions): Promise<void>;
15
+ export interface SkillInstallFromGitHubOptions {
16
+ githubUrl: string;
17
+ skillName?: string;
18
+ targets: TargetName[];
19
+ addToCatalog?: boolean;
20
+ }
21
+ /**
22
+ * Install a skill from a GitHub URL.
23
+ */
24
+ export declare function skillInstallFromGitHub(options: SkillInstallFromGitHubOptions): Promise<void>;
25
+ export interface SkillRemoveOptions {
26
+ skillName: string;
27
+ targets: TargetName[];
28
+ }
29
+ /**
30
+ * Remove a skill from the current project.
31
+ */
32
+ export declare function skillRemove(options: SkillRemoveOptions): Promise<void>;
33
+ export interface SkillEnableOptions {
34
+ skillName: string;
35
+ targets: TargetName[];
36
+ }
37
+ /**
38
+ * Enable a skill in the current project.
39
+ * Note: Skills are always enabled if the SKILL.md file exists.
40
+ * This is a no-op for now but kept for API consistency.
41
+ */
42
+ export declare function skillEnable(options: SkillEnableOptions): Promise<void>;
43
+ export interface SkillDisableOptions {
44
+ skillName: string;
45
+ targets: TargetName[];
46
+ }
47
+ /**
48
+ * Disable a skill in the current project.
49
+ * Note: For skills, disabling is equivalent to removing.
50
+ */
51
+ export declare function skillDisable(options: SkillDisableOptions): Promise<void>;
@@ -0,0 +1,239 @@
1
+ import { discoverProject } from './project-discovery.js';
2
+ import { getSkills, validateSkillName } from './skill-adapters.js';
3
+ // ============================================================================
4
+ // Validation Helpers
5
+ // ============================================================================
6
+ /**
7
+ * Sanitize skill ID for use in content.
8
+ */
9
+ function sanitizeSkillId(skillId) {
10
+ return skillId.replace(/[^\w.-]/g, '').slice(0, 50);
11
+ }
12
+ // ============================================================================
13
+ // Status Command
14
+ // ============================================================================
15
+ /**
16
+ * Show skill status for the current project.
17
+ */
18
+ export async function skillStatus(verbose = false) {
19
+ const discovery = await discoverProject();
20
+ const status = await buildSkillStatus(discovery.root);
21
+ printSkillStatus(status, verbose);
22
+ }
23
+ async function buildSkillStatus(projectRoot) {
24
+ const { targets } = await discoverProject();
25
+ const skillMap = new Map();
26
+ for (const [target, configPath] of targets.entries()) {
27
+ if (!configPath.exists)
28
+ continue;
29
+ const skills = await getSkills(projectRoot, target);
30
+ for (const [name, info] of Object.entries(skills)) {
31
+ if (!info.enabled)
32
+ continue;
33
+ const existing = skillMap.get(name);
34
+ if (existing) {
35
+ existing.targets.push(target);
36
+ }
37
+ else {
38
+ skillMap.set(name, {
39
+ name,
40
+ enabled: true,
41
+ targets: [target],
42
+ source: 'inline', // TODO: detect from catalog
43
+ });
44
+ }
45
+ }
46
+ }
47
+ const skills = Array.from(skillMap.values());
48
+ const enabledCount = skills.filter((s) => s.enabled).length;
49
+ return {
50
+ projectRoot,
51
+ skills,
52
+ totalCount: skills.length,
53
+ enabledCount,
54
+ };
55
+ }
56
+ function printSkillStatus(status, verbose) {
57
+ console.log(`Project: ${status.projectRoot}`);
58
+ console.log(`Skills (${status.totalCount} total, ${status.enabledCount} enabled):\n`);
59
+ if (status.skills.length === 0) {
60
+ console.log('No skills configured.');
61
+ console.log('Run `acsync skill add <name>` to add a skill.\n');
62
+ return;
63
+ }
64
+ if (verbose) {
65
+ // Verbose output
66
+ for (const skill of status.skills) {
67
+ console.log(`Skill: ${skill.name}`);
68
+ console.log(` Status: ${skill.enabled ? '✓' : '✗'} ${skill.enabled ? 'Enabled' : 'Disabled'}`);
69
+ console.log(` Targets: ${skill.targets.join(', ') || '(none)'}`);
70
+ console.log(` Source: ${skill.source}\n`);
71
+ }
72
+ }
73
+ else {
74
+ // Compact table output
75
+ const NAME_WIDTH = 30;
76
+ const ENABLED_WIDTH = 7;
77
+ const TARGETS_WIDTH = 15;
78
+ const SOURCE_WIDTH = 7;
79
+ const borderH = '┌' + '─'.repeat(NAME_WIDTH + 2) + '┬' + '─'.repeat(ENABLED_WIDTH + 2) + '┬' + '─'.repeat(TARGETS_WIDTH + 2) + '┬' + '─'.repeat(SOURCE_WIDTH + 2) + '┐';
80
+ const borderM = '├' + '─'.repeat(NAME_WIDTH + 2) + '┼' + '─'.repeat(ENABLED_WIDTH + 2) + '┼' + '─'.repeat(TARGETS_WIDTH + 2) + '┼' + '─'.repeat(SOURCE_WIDTH + 2) + '┤';
81
+ const borderF = '└' + '─'.repeat(NAME_WIDTH + 2) + '┴' + '─'.repeat(ENABLED_WIDTH + 2) + '┴' + '─'.repeat(TARGETS_WIDTH + 2) + '┴' + '─'.repeat(SOURCE_WIDTH + 2) + '┘';
82
+ console.log(borderH);
83
+ console.log('│ ' + padRight('Name', NAME_WIDTH) + ' │ ' + padRight('Enabled', ENABLED_WIDTH) + ' │ ' + padRight('Targets', TARGETS_WIDTH) + ' │ ' + padRight('Source', SOURCE_WIDTH) + ' │');
84
+ console.log(borderM);
85
+ for (const skill of status.skills) {
86
+ const name = truncate(skill.name, NAME_WIDTH);
87
+ const enabled = skill.enabled ? '✓' : '✗';
88
+ const targets = truncate(skill.targets.join(', ') || '(none)', TARGETS_WIDTH);
89
+ const source = padRight(skill.source, SOURCE_WIDTH);
90
+ console.log('│ ' + padRight(name, NAME_WIDTH) + ' │ ' + center(enabled, ENABLED_WIDTH) + ' │ ' + padRight(targets, TARGETS_WIDTH) + ' │ ' + source + ' │');
91
+ }
92
+ console.log(borderF);
93
+ console.log();
94
+ console.log('Run `acsync skill <name>` for details, `acsync skill add` to add new skills.\n');
95
+ }
96
+ }
97
+ function truncate(str, maxLen) {
98
+ if (str.length > maxLen) {
99
+ return str.slice(0, maxLen - 1) + '…';
100
+ }
101
+ return str;
102
+ }
103
+ function center(str, width) {
104
+ const len = str.length;
105
+ if (len >= width)
106
+ return str;
107
+ const left = Math.floor((width - len) / 2);
108
+ const right = width - len - left;
109
+ return ' '.repeat(left) + str + ' '.repeat(right);
110
+ }
111
+ function padRight(str, len) {
112
+ return str.padEnd(len, ' ');
113
+ }
114
+ /**
115
+ * Add a skill to the current project.
116
+ */
117
+ export async function skillAdd(options) {
118
+ const { normalizeSkillPackage, getSkill, addSkill } = await import('./catalog.js');
119
+ // Validate skill ID
120
+ try {
121
+ validateSkillName(options.skillId);
122
+ }
123
+ catch (error) {
124
+ console.error(`Invalid skill name: ${error instanceof Error ? error.message : String(error)}\n`);
125
+ process.exitCode = 1;
126
+ return;
127
+ }
128
+ // Check if entry exists in catalog first
129
+ let entry = await getSkill(options.skillId);
130
+ // If not in catalog, read from file and optionally add
131
+ if (!entry) {
132
+ // For now, we'll create a basic entry from the skill ID
133
+ // In a full implementation, this would read from a local file or URL
134
+ const sanitizedId = sanitizeSkillId(options.skillId);
135
+ const defaultContent = `---
136
+ name: ${sanitizedId}
137
+ description: Skill: ${sanitizedId}
138
+ ---
139
+
140
+ # ${sanitizedId}
141
+
142
+ Skill content for ${sanitizedId}.
143
+ `;
144
+ entry = normalizeSkillPackage(options.skillId, defaultContent);
145
+ // Add to catalog if --no-register is false
146
+ if (!options.noRegister) {
147
+ await addSkill(entry);
148
+ console.log(`Added to catalog: ${entry.id}`);
149
+ }
150
+ }
151
+ // Add to each target
152
+ const discovery = await discoverProject();
153
+ const { addSkillToConfig } = await import('./skill-adapters.js');
154
+ for (const target of options.targets) {
155
+ await addSkillToConfig(discovery.root, target, entry.id, entry.recipe.content);
156
+ console.log(`Added to ${target}: ${entry.id}`);
157
+ }
158
+ console.log('\nRun `acsync skill` to see the updated status.');
159
+ }
160
+ /**
161
+ * Install a skill from a GitHub URL.
162
+ */
163
+ export async function skillInstallFromGitHub(options) {
164
+ const { installFromGitHub } = await import('./registry.js');
165
+ const { normalizeSkillPackage, addSkill, getSkill } = await import('./catalog.js');
166
+ console.log(`Installing skill from GitHub...`);
167
+ // Download and parse skill
168
+ const { name, content } = await installFromGitHub(options.githubUrl, options.skillName);
169
+ // Validate the parsed skill name
170
+ try {
171
+ validateSkillName(name);
172
+ }
173
+ catch (error) {
174
+ console.error(`Invalid skill name from GitHub: ${error instanceof Error ? error.message : String(error)}\n`);
175
+ process.exitCode = 1;
176
+ return;
177
+ }
178
+ console.log(` Skill name: ${name}`);
179
+ // Add to catalog if requested
180
+ if (options.addToCatalog !== false) {
181
+ const existing = await getSkill(name);
182
+ if (existing && !options.skillName) {
183
+ console.log(`\nSkill already exists in catalog. Use --force to reinstall.`);
184
+ return;
185
+ }
186
+ const entry = normalizeSkillPackage(name, content, {
187
+ displayName: name,
188
+ description: `Skill: ${name}`,
189
+ });
190
+ await addSkill(entry);
191
+ console.log(`✓ Added to catalog: ${entry.id}`);
192
+ }
193
+ // Add to project
194
+ const discovery = await discoverProject();
195
+ const { addSkillToConfig } = await import('./skill-adapters.js');
196
+ for (const target of options.targets) {
197
+ await addSkillToConfig(discovery.root, target, name, content);
198
+ console.log(`✓ Added to ${target}: ${name}`);
199
+ }
200
+ console.log('\nRun `acsync skill` to see the updated status.');
201
+ }
202
+ /**
203
+ * Remove a skill from the current project.
204
+ */
205
+ export async function skillRemove(options) {
206
+ // Validate skill name
207
+ try {
208
+ validateSkillName(options.skillName);
209
+ }
210
+ catch (error) {
211
+ console.error(`Invalid skill name: ${error instanceof Error ? error.message : String(error)}\n`);
212
+ process.exitCode = 1;
213
+ return;
214
+ }
215
+ const discovery = await discoverProject();
216
+ const { removeSkillFromConfig } = await import('./skill-adapters.js');
217
+ for (const target of options.targets) {
218
+ await removeSkillFromConfig(discovery.root, target, options.skillName);
219
+ console.log(`Removed from ${target}: ${options.skillName}`);
220
+ }
221
+ console.log('\nRun `acsync skill` to see the updated status.');
222
+ }
223
+ /**
224
+ * Enable a skill in the current project.
225
+ * Note: Skills are always enabled if the SKILL.md file exists.
226
+ * This is a no-op for now but kept for API consistency.
227
+ */
228
+ export async function skillEnable(options) {
229
+ console.log('Skills are enabled when present. Use `acsync skill add` to add skills.\n');
230
+ }
231
+ /**
232
+ * Disable a skill in the current project.
233
+ * Note: For skills, disabling is equivalent to removing.
234
+ */
235
+ export async function skillDisable(options) {
236
+ // For skills, disable = remove since there's no enabled flag
237
+ await skillRemove(options);
238
+ }
239
+ //# sourceMappingURL=cli-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-skill.js","sourceRoot":"","sources":["../src/cli-skill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAmB,KAAK;IACxD,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtD,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAE5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmG,CAAC;IAE5H,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,SAAS;QAEjC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEpD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,SAAS;YAE5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;oBACjB,IAAI;oBACJ,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,MAAM,CAAC;oBACjB,MAAM,EAAE,QAAQ,EAAE,4BAA4B;iBAC/C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE5D,OAAO;QACL,WAAW;QACX,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA4B,EAAE,OAAgB;IACtE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,UAAU,WAAW,MAAM,CAAC,YAAY,cAAc,CAAC,CAAC;IAEtF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,CAAC,CAAC;QACxB,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,CAAC,CAAC;QAEvB,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACxK,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACxK,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAExK,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7L,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAEpD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;QAC7J,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAc;IAC3C,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,KAAa;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;IACjC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAYD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnF,oBAAoB;IACpB,IAAI,CAAC;QACH,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,yCAAyC;IACzC,IAAI,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5C,uDAAuD;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,wDAAwD;QACxD,qEAAqE;QACrE,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG;QACnB,WAAW;sBACG,WAAW;;;IAG7B,WAAW;;oBAEK,WAAW;CAC9B,CAAC;QACE,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE/D,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC;AAaD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAsC;IACjF,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC5D,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAE/C,2BAA2B;IAC3B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAExF,iCAAiC;IACjC,IAAI,CAAC;QACH,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAErC,8BAA8B;IAC9B,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE;YACjD,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,UAAU,IAAI,EAAE;SAC9B,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC;AAWD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,sBAAsB;IACtB,IAAI,CAAC;QACH,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEtE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC;AAWD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;AAC1F,CAAC;AAWD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,6DAA6D;IAC7D,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};