@vibe-agent-toolkit/cli 0.1.0 → 0.1.2-rc.1
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/README.md +67 -4
- package/dist/bin.js +17 -12
- package/dist/bin.js.map +1 -1
- package/dist/commands/agent/index.d.ts.map +1 -1
- package/dist/commands/agent/index.js +0 -37
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/audit/cache-detector.d.ts +32 -0
- package/dist/commands/audit/cache-detector.d.ts.map +1 -0
- package/dist/commands/audit/cache-detector.js +68 -0
- package/dist/commands/audit/cache-detector.js.map +1 -0
- package/dist/commands/audit/hierarchical-output.d.ts +41 -0
- package/dist/commands/audit/hierarchical-output.d.ts.map +1 -0
- package/dist/commands/audit/hierarchical-output.js +267 -0
- package/dist/commands/audit/hierarchical-output.js.map +1 -0
- package/dist/commands/audit.d.ts +19 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +404 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/doctor.d.ts +106 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +499 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/mcp/collections.d.ts +48 -0
- package/dist/commands/mcp/collections.d.ts.map +1 -0
- package/dist/commands/mcp/collections.js +130 -0
- package/dist/commands/mcp/collections.js.map +1 -0
- package/dist/commands/mcp/index.d.ts +9 -0
- package/dist/commands/mcp/index.d.ts.map +1 -0
- package/dist/commands/mcp/index.js +80 -0
- package/dist/commands/mcp/index.js.map +1 -0
- package/dist/commands/mcp/list-collections.d.ts +11 -0
- package/dist/commands/mcp/list-collections.d.ts.map +1 -0
- package/dist/commands/mcp/list-collections.js +43 -0
- package/dist/commands/mcp/list-collections.js.map +1 -0
- package/dist/commands/mcp/serve.d.ts +12 -0
- package/dist/commands/mcp/serve.d.ts.map +1 -0
- package/dist/commands/mcp/serve.js +87 -0
- package/dist/commands/mcp/serve.js.map +1 -0
- package/dist/commands/resources/scan.d.ts.map +1 -1
- package/dist/commands/resources/scan.js +8 -0
- package/dist/commands/resources/scan.js.map +1 -1
- package/dist/utils/config-loader.d.ts +6 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/docs/audit.md +446 -0
- package/docs/doctor.md +268 -0
- package/docs/index.md +32 -0
- package/docs/mcp.md +317 -0
- package/package.json +14 -8
- package/dist/commands/agent/audit.d.ts +0 -9
- package/dist/commands/agent/audit.d.ts.map +0 -1
- package/dist/commands/agent/audit.js +0 -139
- package/dist/commands/agent/audit.js.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP collection resolution and loading
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Package names: @vibe-agent-toolkit/vat-example-cat-agents
|
|
6
|
+
* - File paths: ./packages/vat-example-cat-agents
|
|
7
|
+
* - Collection suffix: @scope/package:collection-name
|
|
8
|
+
*
|
|
9
|
+
* Phase 1: Dynamic loading from npm packages or file paths
|
|
10
|
+
* Phase 2+: Global discovery registry
|
|
11
|
+
*/
|
|
12
|
+
import { pathToFileURL } from 'node:url';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve package name or file path to a collection
|
|
15
|
+
*
|
|
16
|
+
* Supports:
|
|
17
|
+
* - @scope/package → import from node_modules
|
|
18
|
+
* - @scope/package:collection → import specific collection
|
|
19
|
+
* - ./path → import from file path
|
|
20
|
+
* - /abs/path → import from absolute path
|
|
21
|
+
*/
|
|
22
|
+
export async function resolveCollection(packageOrPath) {
|
|
23
|
+
const parts = packageOrPath.split(':');
|
|
24
|
+
const packagePart = parts[0] ?? packageOrPath;
|
|
25
|
+
const collectionName = parts[1];
|
|
26
|
+
const importPath = buildImportPath(packagePart);
|
|
27
|
+
const module = await loadCollectionModule(importPath, packageOrPath);
|
|
28
|
+
return selectCollection(module, collectionName, packagePart, packageOrPath);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build import path from package name or file path
|
|
32
|
+
*/
|
|
33
|
+
function buildImportPath(packagePart) {
|
|
34
|
+
const isFilePath = packagePart.startsWith('.') || packagePart.startsWith('/');
|
|
35
|
+
if (isFilePath) {
|
|
36
|
+
// File path: convert to file:// URL for ESM import
|
|
37
|
+
const absolutePath = new URL(packagePart, pathToFileURL(process.cwd() + '/').href).href;
|
|
38
|
+
return `${absolutePath}/dist/mcp-collections.js`;
|
|
39
|
+
}
|
|
40
|
+
// Package name: import from node_modules
|
|
41
|
+
return `${packagePart}/mcp-collections`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load collection module with error handling
|
|
45
|
+
*/
|
|
46
|
+
async function loadCollectionModule(importPath, originalInput) {
|
|
47
|
+
try {
|
|
48
|
+
return (await import(importPath));
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw new Error(`Failed to load MCP collections from '${originalInput}':\n` +
|
|
52
|
+
` Import path: ${importPath}\n` +
|
|
53
|
+
` Error: ${error instanceof Error ? error.message : String(error)}\n\n` +
|
|
54
|
+
`Make sure the package:\n` +
|
|
55
|
+
` 1. Is installed (npm/bun install)\n` +
|
|
56
|
+
` 2. Exports 'mcp-collections' entrypoint\n` +
|
|
57
|
+
` 3. Has been built (bun run build)`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Select collection from module
|
|
62
|
+
*/
|
|
63
|
+
function selectCollection(module, collectionName, packagePart, originalInput) {
|
|
64
|
+
// Explicit collection requested
|
|
65
|
+
if (collectionName) {
|
|
66
|
+
return selectExplicitCollection(module, collectionName, packagePart);
|
|
67
|
+
}
|
|
68
|
+
// Auto-select collection
|
|
69
|
+
if (module.defaultCollection) {
|
|
70
|
+
return module.defaultCollection;
|
|
71
|
+
}
|
|
72
|
+
if (module.catAgents) {
|
|
73
|
+
return module.catAgents; // Legacy support
|
|
74
|
+
}
|
|
75
|
+
if (module.collections) {
|
|
76
|
+
return selectFromCollections(module.collections, packagePart);
|
|
77
|
+
}
|
|
78
|
+
throw new Error(`No MCP collections found in '${originalInput}'.\n` +
|
|
79
|
+
`Package must export:\n` +
|
|
80
|
+
` - collections: Record<string, MCPCollection>\n` +
|
|
81
|
+
` - defaultCollection: MCPCollection (optional)\n\n` +
|
|
82
|
+
`See: packages/vat-example-cat-agents/src/mcp-collections.ts`);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Select explicit collection by name
|
|
86
|
+
*/
|
|
87
|
+
function selectExplicitCollection(module, collectionName, packagePart) {
|
|
88
|
+
const collection = module.collections?.[collectionName];
|
|
89
|
+
if (!collection) {
|
|
90
|
+
const available = module.collections ? Object.keys(module.collections).join(', ') : 'none';
|
|
91
|
+
throw new Error(`Collection '${collectionName}' not found in '${packagePart}'.\n` +
|
|
92
|
+
`Available collections: ${available}\n\n` +
|
|
93
|
+
`Usage: ${packagePart}:${available.split(', ')[0] ?? collectionName}`);
|
|
94
|
+
}
|
|
95
|
+
return collection;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Select collection from collections map
|
|
99
|
+
*/
|
|
100
|
+
function selectFromCollections(collections, packagePart) {
|
|
101
|
+
const collectionNames = Object.keys(collections);
|
|
102
|
+
if (collectionNames.length === 1) {
|
|
103
|
+
const firstKey = collectionNames[0];
|
|
104
|
+
const collection = firstKey ? collections[firstKey] : undefined;
|
|
105
|
+
if (collection) {
|
|
106
|
+
return collection;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (collectionNames.length > 1) {
|
|
110
|
+
throw new Error(`Package '${packagePart}' exports multiple collections.\n` +
|
|
111
|
+
`Please specify which one to use:\n` +
|
|
112
|
+
collectionNames.map((name) => ` ${packagePart}:${name}`).join('\n'));
|
|
113
|
+
}
|
|
114
|
+
throw new Error(`No collections found in collections object`);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* List known packages with MCP collections
|
|
118
|
+
*
|
|
119
|
+
* Phase 1: Hardcoded known packages
|
|
120
|
+
* Phase 2+: Global registry or package.json discovery
|
|
121
|
+
*/
|
|
122
|
+
export function listKnownPackages() {
|
|
123
|
+
return [
|
|
124
|
+
{
|
|
125
|
+
name: '@vibe-agent-toolkit/vat-example-cat-agents',
|
|
126
|
+
description: 'Example cat breeding agents (haiku validator, photo analyzer)',
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../../src/commands/mcp/collections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CA+E1C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP command group - expose VAT agents via Model Context Protocol
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { listCollectionsCommand } from './list-collections.js';
|
|
6
|
+
import { serveCommand } from './serve.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create MCP command group
|
|
9
|
+
*/
|
|
10
|
+
export function createMCPCommand() {
|
|
11
|
+
const mcp = new Command('mcp');
|
|
12
|
+
mcp
|
|
13
|
+
.description('Expose agents via Model Context Protocol (MCP) for Claude Desktop')
|
|
14
|
+
.addHelpText('after', `
|
|
15
|
+
Description:
|
|
16
|
+
MCP Gateway exposes VAT agents as tools that Claude Desktop and other
|
|
17
|
+
MCP clients can discover and use.
|
|
18
|
+
|
|
19
|
+
Phase 1: Package-scoped collections (@scope/package or ./path)
|
|
20
|
+
Phase 2+: Global discovery registry with versioning
|
|
21
|
+
|
|
22
|
+
Examples:
|
|
23
|
+
$ vat mcp list-collections # Show known packages
|
|
24
|
+
$ vat mcp serve @vibe-agent-toolkit/vat-example-cat-agents
|
|
25
|
+
$ vat mcp serve ./packages/vat-example-cat-agents # Local development
|
|
26
|
+
`);
|
|
27
|
+
// vat mcp list-collections
|
|
28
|
+
mcp
|
|
29
|
+
.command('list-collections')
|
|
30
|
+
.description('List known MCP agent packages')
|
|
31
|
+
.option('--debug', 'Enable debug logging')
|
|
32
|
+
.action(listCollectionsCommand);
|
|
33
|
+
// vat mcp serve <package>
|
|
34
|
+
mcp
|
|
35
|
+
.command('serve <package>')
|
|
36
|
+
.description('Start MCP server for agent package')
|
|
37
|
+
.option('--debug', 'Enable debug logging')
|
|
38
|
+
.option('--print-config', 'Print Claude Desktop configuration and exit')
|
|
39
|
+
.addHelpText('after', `
|
|
40
|
+
Description:
|
|
41
|
+
Starts an MCP stdio server exposing agents from the specified package.
|
|
42
|
+
The server runs until terminated (Ctrl+C).
|
|
43
|
+
|
|
44
|
+
Supports:
|
|
45
|
+
- Package names: @scope/package (from node_modules)
|
|
46
|
+
- File paths: ./path or /abs/path (local development)
|
|
47
|
+
- Collection suffix: package:collection-name (if multiple)
|
|
48
|
+
|
|
49
|
+
For Claude Desktop integration, add the generated config to:
|
|
50
|
+
~/.claude/config.json
|
|
51
|
+
|
|
52
|
+
Output:
|
|
53
|
+
- MCP protocol messages on stdout (for Claude Desktop)
|
|
54
|
+
- Logs to stderr (does not interfere with MCP protocol)
|
|
55
|
+
|
|
56
|
+
Examples:
|
|
57
|
+
# Production (from npm)
|
|
58
|
+
$ vat mcp serve @vibe-agent-toolkit/vat-example-cat-agents
|
|
59
|
+
|
|
60
|
+
# Local development (file path)
|
|
61
|
+
$ vat mcp serve ./packages/vat-example-cat-agents
|
|
62
|
+
|
|
63
|
+
# Show Claude Desktop config
|
|
64
|
+
$ vat mcp serve @vibe-agent-toolkit/vat-example-cat-agents --print-config
|
|
65
|
+
|
|
66
|
+
Claude Desktop Config:
|
|
67
|
+
Add to ~/.claude/config.json:
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"vat-agents": {
|
|
71
|
+
"command": "vat",
|
|
72
|
+
"args": ["mcp", "serve", "@vibe-agent-toolkit/vat-example-cat-agents"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
`)
|
|
77
|
+
.action(serveCommand);
|
|
78
|
+
return mcp;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,GAAG;SACA,WAAW,CAAC,mEAAmE,CAAC;SAChF,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;CAYL,CACI,CAAC;IAEJ,2BAA2B;IAC3B,GAAG;SACA,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAElC,0BAA0B;IAC1B,GAAG;SACA,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,gBAAgB,EAAE,6CAA6C,CAAC;SACvE,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCL,CACI;SACA,MAAM,CAAC,YAAY,CAAC,CAAC;IAExB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP list-collections command - lists available agent collections
|
|
3
|
+
*/
|
|
4
|
+
export interface ListCollectionsOptions {
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* List available MCP agent collections
|
|
9
|
+
*/
|
|
10
|
+
export declare function listCollectionsCommand(options: ListCollectionsOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=list-collections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-collections.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/list-collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqCf"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP list-collections command - lists available agent collections
|
|
3
|
+
*/
|
|
4
|
+
import { handleCommandError } from '../../utils/command-error.js';
|
|
5
|
+
import { createLogger } from '../../utils/logger.js';
|
|
6
|
+
import { writeYamlOutput } from '../../utils/output.js';
|
|
7
|
+
import { listKnownPackages } from './collections.js';
|
|
8
|
+
/**
|
|
9
|
+
* List available MCP agent collections
|
|
10
|
+
*/
|
|
11
|
+
export async function listCollectionsCommand(options) {
|
|
12
|
+
const logger = createLogger(options.debug ? { debug: true } : {});
|
|
13
|
+
const startTime = Date.now();
|
|
14
|
+
try {
|
|
15
|
+
const packages = listKnownPackages();
|
|
16
|
+
const output = {
|
|
17
|
+
status: 'success',
|
|
18
|
+
packages: packages.map((p) => ({
|
|
19
|
+
name: p.name,
|
|
20
|
+
description: p.description,
|
|
21
|
+
})),
|
|
22
|
+
count: packages.length,
|
|
23
|
+
duration: `${Date.now() - startTime}ms`,
|
|
24
|
+
};
|
|
25
|
+
writeYamlOutput(output);
|
|
26
|
+
logger.info(`\nAvailable MCP agent packages:\n`);
|
|
27
|
+
for (const pkg of packages) {
|
|
28
|
+
logger.info(` ${pkg.name}`);
|
|
29
|
+
logger.info(` ${pkg.description}\n`);
|
|
30
|
+
}
|
|
31
|
+
logger.info(`Usage:`);
|
|
32
|
+
logger.info(` vat mcp serve <package> # Start MCP server`);
|
|
33
|
+
logger.info(` vat mcp serve <package> --print-config # Show Claude Desktop config\n`);
|
|
34
|
+
logger.info(`Examples:`);
|
|
35
|
+
logger.info(` vat mcp serve @vibe-agent-toolkit/vat-example-cat-agents`);
|
|
36
|
+
logger.info(` vat mcp serve ./packages/vat-example-cat-agents # Local development\n`);
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
handleCommandError(error, logger, startTime, 'MCPListCollections');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=list-collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-collections.js","sourceRoot":"","sources":["../../../src/commands/mcp/list-collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA+B;IAE/B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;YACH,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI;SACxC,CAAC;QAEF,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QAExF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QAExF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP serve command - exposes agent collections via MCP stdio transport
|
|
3
|
+
*/
|
|
4
|
+
export interface ServeCommandOptions {
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
printConfig?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* MCP serve command
|
|
10
|
+
*/
|
|
11
|
+
export declare function serveCommand(packageOrPath: string, options: ServeCommandOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/serve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwDf"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP serve command - exposes agent collections via MCP stdio transport
|
|
3
|
+
*/
|
|
4
|
+
import { StdioMCPGateway, ConsoleLogger, NoOpObservabilityProvider, } from '@vibe-agent-toolkit/gateway-mcp';
|
|
5
|
+
import { handleCommandError } from '../../utils/command-error.js';
|
|
6
|
+
import { createLogger } from '../../utils/logger.js';
|
|
7
|
+
import { resolveCollection } from './collections.js';
|
|
8
|
+
/**
|
|
9
|
+
* Custom observability provider with console logger
|
|
10
|
+
* Extends NoOpObservabilityProvider and overrides getLogger() to provide console output
|
|
11
|
+
*/
|
|
12
|
+
class ConsoleObservabilityProvider extends NoOpObservabilityProvider {
|
|
13
|
+
consoleLogger = new ConsoleLogger();
|
|
14
|
+
getLogger() {
|
|
15
|
+
return this.consoleLogger;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate Claude Desktop configuration for a package
|
|
20
|
+
*/
|
|
21
|
+
function generateClaudeDesktopConfig(packageOrPath) {
|
|
22
|
+
// Use package name as MCP server key (sanitize for JSON key)
|
|
23
|
+
const serverKey = packageOrPath
|
|
24
|
+
.replaceAll('@vibe-agent-toolkit/', 'vat-')
|
|
25
|
+
.replaceAll(/[^a-z0-9-]/gi, '-');
|
|
26
|
+
const config = {
|
|
27
|
+
mcpServers: {
|
|
28
|
+
[serverKey]: {
|
|
29
|
+
command: 'vat',
|
|
30
|
+
args: ['mcp', 'serve', packageOrPath],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
return JSON.stringify(config, null, 2);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* MCP serve command
|
|
38
|
+
*/
|
|
39
|
+
export async function serveCommand(packageOrPath, options) {
|
|
40
|
+
const logger = createLogger(options.debug ? { debug: true } : {});
|
|
41
|
+
const startTime = Date.now();
|
|
42
|
+
try {
|
|
43
|
+
// Handle --print-config flag
|
|
44
|
+
if (options.printConfig) {
|
|
45
|
+
logger.info(`\nClaude Desktop configuration for '${packageOrPath}':\n`);
|
|
46
|
+
logger.info('Add this to ~/.claude/config.json:\n');
|
|
47
|
+
console.log(generateClaudeDesktopConfig(packageOrPath));
|
|
48
|
+
logger.info('\nThen restart Claude Desktop to load the MCP server.');
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
// Resolve collection from package name or file path
|
|
52
|
+
logger.debug(`Resolving MCP collection from: ${packageOrPath}`);
|
|
53
|
+
const collection = await resolveCollection(packageOrPath);
|
|
54
|
+
logger.debug(`Collection resolved: ${collection.name}`);
|
|
55
|
+
logger.debug(`Agents: ${collection.agents.map((a) => a.name).join(', ')}`);
|
|
56
|
+
// Create and start gateway
|
|
57
|
+
const gateway = new StdioMCPGateway({
|
|
58
|
+
agents: collection.agents.map((reg) => ({
|
|
59
|
+
name: reg.name,
|
|
60
|
+
agent: reg.agent,
|
|
61
|
+
})),
|
|
62
|
+
transport: 'stdio',
|
|
63
|
+
observability: new ConsoleObservabilityProvider(),
|
|
64
|
+
});
|
|
65
|
+
logger.info(`Starting MCP gateway: ${collection.agents.length} agent(s) (${Date.now() - startTime}ms)`);
|
|
66
|
+
await gateway.start();
|
|
67
|
+
// Setup graceful shutdown
|
|
68
|
+
process.on('SIGINT', () => {
|
|
69
|
+
logger.info('Shutting down MCP gateway...');
|
|
70
|
+
process.exit(0);
|
|
71
|
+
});
|
|
72
|
+
// Wait for stdin to close (stdio server lifetime = stdin lifetime)
|
|
73
|
+
await new Promise((resolve) => {
|
|
74
|
+
process.stdin.on('end', () => {
|
|
75
|
+
logger.info('Stdin closed, shutting down...');
|
|
76
|
+
resolve();
|
|
77
|
+
});
|
|
78
|
+
process.stdin.on('error', () => {
|
|
79
|
+
resolve();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
handleCommandError(error, logger, startTime, 'MCPServe');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/mcp/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/commands/resources/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/commands/resources/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
|
@@ -25,16 +25,24 @@ export async function scanCommand(pathArg, options) {
|
|
|
25
25
|
return count;
|
|
26
26
|
};
|
|
27
27
|
const totalHeadings = allResources.reduce((sum, resource) => sum + countHeadings(resource.headings), 0);
|
|
28
|
+
// Get duplicate statistics
|
|
29
|
+
const duplicates = registry.getDuplicates();
|
|
30
|
+
const duplicateFileCount = duplicates.reduce((sum, group) => sum + group.length, 0);
|
|
31
|
+
const uniqueResources = registry.getUniqueByChecksum();
|
|
28
32
|
// Output results as YAML
|
|
29
33
|
writeYamlOutput({
|
|
30
34
|
status: 'success',
|
|
31
35
|
filesScanned: stats.totalResources,
|
|
36
|
+
uniqueFiles: uniqueResources.length,
|
|
37
|
+
duplicateGroups: duplicates.length,
|
|
38
|
+
duplicateFiles: duplicateFileCount,
|
|
32
39
|
linksFound: stats.totalLinks,
|
|
33
40
|
anchorsFound: totalHeadings,
|
|
34
41
|
files: allResources.map(resource => ({
|
|
35
42
|
path: resource.filePath,
|
|
36
43
|
links: resource.links.length,
|
|
37
44
|
anchors: countHeadings(resource.headings),
|
|
45
|
+
checksum: resource.checksum,
|
|
38
46
|
})),
|
|
39
47
|
duration: `${duration}ms`,
|
|
40
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/commands/resources/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B,EAC3B,OAAoB;IAEpB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,qCAAqC;QACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,oBAAoB;QACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;QAIhD,MAAM,aAAa,GAAG,CAAC,QAA+B,EAAU,EAAE;YAChE,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACzD,CAAC,CACF,CAAC;QAEF,yBAAyB;QACzB,eAAe,CAAC;YACd,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,KAAK,CAAC,cAAc;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,aAAa;YAC3B,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,QAAQ,CAAC,QAAQ;gBACvB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;gBAC5B,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/commands/resources/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B,EAC3B,OAAoB;IAEpB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,qCAAqC;QACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,oBAAoB;QACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;QAIhD,MAAM,aAAa,GAAG,CAAC,QAA+B,EAAU,EAAE;YAChE,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACzD,CAAC,CACF,CAAC;QAEF,2BAA2B;QAC3B,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,eAAe,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAEvD,yBAAyB;QACzB,eAAe,CAAC;YACd,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,KAAK,CAAC,cAAc;YAClC,WAAW,EAAE,eAAe,CAAC,MAAM;YACnC,eAAe,EAAE,UAAU,CAAC,MAAM;YAClC,cAAc,EAAE,kBAAkB;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,aAAa;YAC3B,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,QAAQ,CAAC,QAAQ;gBACvB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;gBAC5B,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC,CAAC;YACH,QAAQ,EAAE,GAAG,QAAQ,IAAI;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Configuration file loading and validation
|
|
3
3
|
*/
|
|
4
4
|
import { type ProjectConfig } from '../schemas/config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Find configuration file by walking up directory tree
|
|
7
|
+
* @param startDir - Starting directory (defaults to cwd)
|
|
8
|
+
* @returns Path to config file, or null if not found
|
|
9
|
+
*/
|
|
10
|
+
export declare function findConfigPath(startDir?: string): string | null;
|
|
5
11
|
/**
|
|
6
12
|
* Load and validate project configuration
|
|
7
13
|
* @param projectRoot - Project root directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI/F;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CA6B7D"}
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI/F;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc/D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CA6B7D"}
|
|
@@ -6,6 +6,24 @@ import { join } from 'node:path';
|
|
|
6
6
|
import * as yaml from 'js-yaml';
|
|
7
7
|
import { ProjectConfigSchema, DEFAULT_CONFIG } from '../schemas/config.js';
|
|
8
8
|
const CONFIG_FILENAME = 'vibe-agent-toolkit.config.yaml';
|
|
9
|
+
/**
|
|
10
|
+
* Find configuration file by walking up directory tree
|
|
11
|
+
* @param startDir - Starting directory (defaults to cwd)
|
|
12
|
+
* @returns Path to config file, or null if not found
|
|
13
|
+
*/
|
|
14
|
+
export function findConfigPath(startDir) {
|
|
15
|
+
let currentDir = startDir ?? process.cwd();
|
|
16
|
+
const root = '/';
|
|
17
|
+
while (currentDir !== root) {
|
|
18
|
+
const configPath = join(currentDir, CONFIG_FILENAME);
|
|
19
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Dynamic path walking is required for config file search
|
|
20
|
+
if (existsSync(configPath)) {
|
|
21
|
+
return configPath;
|
|
22
|
+
}
|
|
23
|
+
currentDir = join(currentDir, '..');
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
9
27
|
/**
|
|
10
28
|
* Load and validate project configuration
|
|
11
29
|
* @param projectRoot - Project root directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAsB,MAAM,sBAAsB,CAAC;AAE/F,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAEtD,uHAAuH;IACvH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,uHAAuH;QACvH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElC,2BAA2B;QAC3B,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAsB,MAAM,sBAAsB,CAAC;AAE/F,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,IAAI,UAAU,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC;IAEjB,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACrD,8HAA8H;QAC9H,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAEtD,uHAAuH;IACvH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,uHAAuH;QACvH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElC,2BAA2B;QAC3B,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|