@vinkius-core/mcp-fusion 3.1.4 → 3.1.6
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/dist/cli/args.d.ts +26 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +100 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands/create.d.ts +11 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +121 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/deploy.d.ts +3 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -0
- package/dist/cli/commands/deploy.js +234 -0
- package/dist/cli/commands/deploy.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +9 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +54 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/lock.d.ts +5 -0
- package/dist/cli/commands/lock.d.ts.map +1 -0
- package/dist/cli/commands/lock.js +94 -0
- package/dist/cli/commands/lock.js.map +1 -0
- package/dist/cli/commands/remote.d.ts +3 -0
- package/dist/cli/commands/remote.d.ts.map +1 -0
- package/dist/cli/commands/remote.js +37 -0
- package/dist/cli/commands/remote.js.map +1 -0
- package/dist/cli/constants.d.ts +19 -0
- package/dist/cli/constants.d.ts.map +1 -0
- package/dist/cli/constants.js +86 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/fusion.d.ts +13 -131
- package/dist/cli/fusion.d.ts.map +1 -1
- package/dist/cli/fusion.js +27 -642
- package/dist/cli/fusion.js.map +1 -1
- package/dist/cli/progress.d.ts +34 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +102 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/rc.d.ts +11 -0
- package/dist/cli/rc.d.ts.map +1 -0
- package/dist/cli/rc.js +66 -0
- package/dist/cli/rc.js.map +1 -0
- package/dist/cli/registry.d.ts +25 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +86 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/types.d.ts +7 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/utils.d.ts +26 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +63 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/core/createGroup.d.ts.map +1 -1
- package/dist/core/createGroup.js +17 -5
- package/dist/core/createGroup.js.map +1 -1
- package/dist/edge-stub.d.ts +73 -0
- package/dist/edge-stub.d.ts.map +1 -0
- package/dist/edge-stub.js +81 -0
- package/dist/edge-stub.js.map +1 -0
- package/dist/fsm/StateMachineGate.d.ts +20 -0
- package/dist/fsm/StateMachineGate.d.ts.map +1 -1
- package/dist/fsm/StateMachineGate.js +45 -1
- package/dist/fsm/StateMachineGate.js.map +1 -1
- package/dist/server/DevServer.d.ts.map +1 -1
- package/dist/server/DevServer.js +8 -2
- package/dist/server/DevServer.js.map +1 -1
- package/dist/server/ServerAttachment.d.ts.map +1 -1
- package/dist/server/ServerAttachment.js +27 -17
- package/dist/server/ServerAttachment.js.map +1 -1
- package/dist/server/startServer.d.ts +3 -0
- package/dist/server/startServer.d.ts.map +1 -1
- package/dist/server/startServer.js +49 -5
- package/dist/server/startServer.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fusion lock` — generate or verify capability lockfile.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import { compileContracts } from '../../introspection/ToolContract.js';
|
|
6
|
+
import { generateLockfile, writeLockfile, readLockfile, checkLockfile, serializeLockfile, LOCKFILE_NAME, } from '../../introspection/CapabilityLockfile.js';
|
|
7
|
+
import { ProgressTracker } from '../progress.js';
|
|
8
|
+
import { MCP_FUSION_VERSION } from '../constants.js';
|
|
9
|
+
import { resolveRegistry } from '../registry.js';
|
|
10
|
+
import { inferServerEntry } from '../utils.js';
|
|
11
|
+
/** @internal exported for testing */
|
|
12
|
+
export async function commandLock(args, reporter) {
|
|
13
|
+
const progress = new ProgressTracker(reporter);
|
|
14
|
+
if (!args.server) {
|
|
15
|
+
const detected = inferServerEntry(args.cwd);
|
|
16
|
+
if (!detected) {
|
|
17
|
+
console.error('Error: Could not auto-detect server entrypoint.\n');
|
|
18
|
+
console.error('Usage: fusion lock --server ./src/server.ts');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
args.server = detected;
|
|
22
|
+
}
|
|
23
|
+
// Step 1: Resolve & load
|
|
24
|
+
progress.start('resolve', 'Resolving server entrypoint');
|
|
25
|
+
const { registry, name: serverName, promptRegistry } = await resolveRegistry(args.server);
|
|
26
|
+
const displayName = args.name ?? serverName;
|
|
27
|
+
progress.done('resolve', `Resolving (${displayName})`);
|
|
28
|
+
// Step 2: Compile tool contracts
|
|
29
|
+
progress.start('compile', 'Compiling tool contracts');
|
|
30
|
+
const builders = [...registry.getBuilders()];
|
|
31
|
+
const contracts = await compileContracts(builders);
|
|
32
|
+
const toolCount = Object.keys(contracts).length;
|
|
33
|
+
progress.done('compile', 'Compiling tool contracts', `${toolCount} tool${toolCount !== 1 ? 's' : ''}`);
|
|
34
|
+
// Step 3: Discover prompts
|
|
35
|
+
progress.start('prompts', 'Discovering prompts');
|
|
36
|
+
const promptBuilders = [];
|
|
37
|
+
if (promptRegistry && typeof promptRegistry.getBuilders === 'function') {
|
|
38
|
+
promptBuilders.push(...promptRegistry.getBuilders());
|
|
39
|
+
}
|
|
40
|
+
const options = promptBuilders.length > 0 ? { prompts: promptBuilders } : undefined;
|
|
41
|
+
const promptCount = promptBuilders.length;
|
|
42
|
+
progress.done('prompts', 'Discovering prompts', `${promptCount} prompt${promptCount !== 1 ? 's' : ''}`);
|
|
43
|
+
if (args.check) {
|
|
44
|
+
// ── Check Mode ──
|
|
45
|
+
progress.start('read', 'Reading existing lockfile');
|
|
46
|
+
const existing = await readLockfile(args.cwd);
|
|
47
|
+
if (!existing) {
|
|
48
|
+
progress.fail('read', 'Reading existing lockfile', `${LOCKFILE_NAME} not found — run: fusion lock`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
progress.done('read', 'Reading existing lockfile');
|
|
52
|
+
progress.start('verify', 'Verifying integrity');
|
|
53
|
+
const result = await checkLockfile(existing, contracts);
|
|
54
|
+
if (result.ok) {
|
|
55
|
+
progress.done('verify', 'Verifying integrity', 'up to date');
|
|
56
|
+
console.log(`\n✓ ${LOCKFILE_NAME} is up to date.`);
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
progress.fail('verify', 'Verifying integrity', 'stale');
|
|
61
|
+
console.error(`\n✗ ${result.message}`);
|
|
62
|
+
if (result.added.length > 0)
|
|
63
|
+
console.error(` + Tools added: ${result.added.join(', ')}`);
|
|
64
|
+
if (result.removed.length > 0)
|
|
65
|
+
console.error(` - Tools removed: ${result.removed.join(', ')}`);
|
|
66
|
+
if (result.changed.length > 0)
|
|
67
|
+
console.error(` ~ Tools changed: ${result.changed.join(', ')}`);
|
|
68
|
+
if (result.addedPrompts.length > 0)
|
|
69
|
+
console.error(` + Prompts added: ${result.addedPrompts.join(', ')}`);
|
|
70
|
+
if (result.removedPrompts.length > 0)
|
|
71
|
+
console.error(` - Prompts removed: ${result.removedPrompts.join(', ')}`);
|
|
72
|
+
if (result.changedPrompts.length > 0)
|
|
73
|
+
console.error(` ~ Prompts changed: ${result.changedPrompts.join(', ')}`);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// ── Generate Mode ──
|
|
79
|
+
progress.start('generate', 'Computing behavioral digests');
|
|
80
|
+
const lockfile = await generateLockfile(displayName, contracts, MCP_FUSION_VERSION, options);
|
|
81
|
+
progress.done('generate', 'Computing behavioral digests');
|
|
82
|
+
progress.start('write', `Writing ${LOCKFILE_NAME}`);
|
|
83
|
+
await writeLockfile(lockfile, args.cwd);
|
|
84
|
+
progress.done('write', `Writing ${LOCKFILE_NAME}`);
|
|
85
|
+
const tc = Object.keys(lockfile.capabilities.tools).length;
|
|
86
|
+
const pc = lockfile.capabilities.prompts ? Object.keys(lockfile.capabilities.prompts).length : 0;
|
|
87
|
+
const parts = [`${tc} tool${tc !== 1 ? 's' : ''}`];
|
|
88
|
+
if (pc > 0)
|
|
89
|
+
parts.push(`${pc} prompt${pc !== 1 ? 's' : ''}`);
|
|
90
|
+
console.log(`\n✓ ${LOCKFILE_NAME} generated (${parts.join(', ')}).`);
|
|
91
|
+
console.log(` Integrity: ${lockfile.integrityDigest}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/cli/commands/lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,aAAa,GAEhB,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAa,EAAE,QAA2B;IACxE,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IACzD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,WAAW,GAAG,CAAC,CAAC;IAEvD,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,EAAE,GAAG,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEvG,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACjD,MAAM,cAAc,GAAwB,EAAE,CAAC;IAC/C,IAAI,cAAc,IAAI,OAAO,cAAc,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACrE,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAExG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,mBAAmB;QACnB,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,EAAE,GAAG,aAAa,+BAA+B,CAAC,CAAC;YACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAEnD,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,iBAAiB,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChG,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1G,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChH,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,sBAAsB;QACtB,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC7F,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;QAE1D,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,aAAa,EAAE,CAAC,CAAC;QACpD,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,aAAa,EAAE,CAAC,CAAC;QAEnD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,EAAE,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remote.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fusion remote` — manage .fusionrc cloud configuration.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import { resolve } from 'node:path';
|
|
6
|
+
import { ansi, VINKIUS_CLOUD_URL } from '../constants.js';
|
|
7
|
+
import { FUSIONRC, readFusionRc, writeFusionRc } from '../rc.js';
|
|
8
|
+
export async function commandRemote(args) {
|
|
9
|
+
const cwd = args.cwd;
|
|
10
|
+
// fusion remote <url> [--server-id <id>] — set one or both at once
|
|
11
|
+
// fusion remote --server-id <id> — uses default Vinkius Cloud URL
|
|
12
|
+
if (args.remoteUrl || args.serverId) {
|
|
13
|
+
const remote = args.remoteUrl ?? VINKIUS_CLOUD_URL;
|
|
14
|
+
writeFusionRc(cwd, {
|
|
15
|
+
remote,
|
|
16
|
+
...(args.serverId ? { serverId: args.serverId } : {}),
|
|
17
|
+
});
|
|
18
|
+
process.stderr.write(` ${ansi.green('✓')} Remote set to ${ansi.cyan(remote)}${remote === VINKIUS_CLOUD_URL ? ansi.dim(' (default)') : ''}\n`);
|
|
19
|
+
if (args.serverId) {
|
|
20
|
+
process.stderr.write(` ${ansi.green('✓')} Server ID set to ${ansi.cyan(args.serverId)}\n`);
|
|
21
|
+
}
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// fusion remote — print current config
|
|
25
|
+
const config = readFusionRc(cwd);
|
|
26
|
+
if (!config.remote && !config.serverId) {
|
|
27
|
+
process.stderr.write(` ${ansi.yellow('⚠')} No remote configured.\n\n`);
|
|
28
|
+
process.stderr.write(` ${ansi.dim('Quick setup:')}\n`);
|
|
29
|
+
process.stderr.write(` ${ansi.cyan('$')} fusion remote --server-id <uuid>\n\n`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
process.stderr.write(`\n ${ansi.bold('Remote Configuration')}\n\n`);
|
|
33
|
+
process.stderr.write(` ${ansi.dim('API:')} ${config.remote ?? ansi.yellow('not set')}\n`);
|
|
34
|
+
process.stderr.write(` ${ansi.dim('Server:')} ${config.serverId ?? ansi.yellow('not set')}\n`);
|
|
35
|
+
process.stderr.write(` ${ansi.dim('Config:')} ${resolve(cwd, FUSIONRC)}\n\n`);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../src/cli/commands/remote.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAErB,mEAAmE;IACnE,yEAAyE;IACzE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC;QAEnD,aAAa,CAAC,GAAG,EAAE;YACf,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/I,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChG,CAAC;QACD,OAAO;IACX,CAAC;IAED,uCAAuC;IACvC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACnF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** @internal exported for testing */
|
|
2
|
+
export declare const ansi: {
|
|
3
|
+
readonly cyan: (s: string) => string;
|
|
4
|
+
readonly green: (s: string) => string;
|
|
5
|
+
readonly yellow: (s: string) => string;
|
|
6
|
+
readonly dim: (s: string) => string;
|
|
7
|
+
readonly bold: (s: string) => string;
|
|
8
|
+
readonly red: (s: string) => string;
|
|
9
|
+
readonly reset: "\u001B[0m";
|
|
10
|
+
};
|
|
11
|
+
/** @internal exported for testing */
|
|
12
|
+
export declare const MCP_FUSION_VERSION = "1.1.0";
|
|
13
|
+
/** Default API endpoint — Vinkius Cloud production */
|
|
14
|
+
export declare const VINKIUS_CLOUD_URL = "https://cloud.vinkius.com";
|
|
15
|
+
export declare const VALID_TRANSPORTS: readonly ["stdio", "sse"];
|
|
16
|
+
export declare const VALID_VECTORS: readonly ["vanilla", "prisma", "n8n", "openapi", "oauth"];
|
|
17
|
+
/** @internal exported for testing */
|
|
18
|
+
export declare const HELP: string;
|
|
19
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAQA,qCAAqC;AACrC,eAAO,MAAM,IAAI;uBACD,MAAM,KAAG,MAAM;wBACf,MAAM,KAAG,MAAM;yBACf,MAAM,KAAG,MAAM;sBACf,MAAM,KAAG,MAAM;uBACf,MAAM,KAAG,MAAM;sBACf,MAAM,KAAG,MAAM;;CAErB,CAAC;AAIX,qCAAqC;AACrC,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAI7D,eAAO,MAAM,gBAAgB,2BAA4B,CAAC;AAC1D,eAAO,MAAM,aAAa,2DAA4D,CAAC;AAIvF,qCAAqC;AACrC,eAAO,MAAM,IAAI,QA0DT,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI constants — version, help text, ANSI styling.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import { LOCKFILE_NAME } from '../introspection/CapabilityLockfile.js';
|
|
6
|
+
// ─── ANSI Styling (zero dependencies) ────────────────────────────
|
|
7
|
+
/** @internal exported for testing */
|
|
8
|
+
export const ansi = {
|
|
9
|
+
cyan: (s) => `\x1b[36m${s}\x1b[0m`,
|
|
10
|
+
green: (s) => `\x1b[32m${s}\x1b[0m`,
|
|
11
|
+
yellow: (s) => `\x1b[33m${s}\x1b[0m`,
|
|
12
|
+
dim: (s) => `\x1b[2m${s}\x1b[0m`,
|
|
13
|
+
bold: (s) => `\x1b[1m${s}\x1b[0m`,
|
|
14
|
+
red: (s) => `\x1b[31m${s}\x1b[0m`,
|
|
15
|
+
reset: '\x1b[0m',
|
|
16
|
+
};
|
|
17
|
+
// ─── Version ─────────────────────────────────────────────────────
|
|
18
|
+
/** @internal exported for testing */
|
|
19
|
+
export const MCP_FUSION_VERSION = '1.1.0';
|
|
20
|
+
/** Default API endpoint — Vinkius Cloud production */
|
|
21
|
+
export const VINKIUS_CLOUD_URL = 'https://cloud.vinkius.com';
|
|
22
|
+
// ─── Validation Constants ────────────────────────────────────────
|
|
23
|
+
export const VALID_TRANSPORTS = ['stdio', 'sse'];
|
|
24
|
+
export const VALID_VECTORS = ['vanilla', 'prisma', 'n8n', 'openapi', 'oauth'];
|
|
25
|
+
// ─── Help Text ───────────────────────────────────────────────────
|
|
26
|
+
/** @internal exported for testing */
|
|
27
|
+
export const HELP = `
|
|
28
|
+
fusion — MCP Fusion CLI
|
|
29
|
+
|
|
30
|
+
USAGE
|
|
31
|
+
fusion create <name> Scaffold a new MCP Fusion server
|
|
32
|
+
fusion dev --server <entry> Start HMR dev server with auto-reload
|
|
33
|
+
fusion lock Generate or update ${LOCKFILE_NAME}
|
|
34
|
+
fusion lock --check Verify lockfile is up to date (CI gate)
|
|
35
|
+
fusion deploy Bundle, compress & deploy to Edge
|
|
36
|
+
fusion remote Show current remote configuration
|
|
37
|
+
fusion inspect Launch the real-time TUI dashboard
|
|
38
|
+
fusion insp --demo Launch TUI with built-in simulator
|
|
39
|
+
|
|
40
|
+
CREATE OPTIONS
|
|
41
|
+
--transport <stdio|sse> Transport layer (default: stdio)
|
|
42
|
+
--vector <type> Ingestion vector: vanilla, prisma, n8n, openapi, oauth
|
|
43
|
+
--testing Include test suite (default: true)
|
|
44
|
+
--no-testing Skip test suite
|
|
45
|
+
--yes, -y Skip prompts, use defaults
|
|
46
|
+
|
|
47
|
+
DEV OPTIONS
|
|
48
|
+
--server, -s <path> Path to server entrypoint (default: auto-detect)
|
|
49
|
+
--dir, -d <path> Directory to watch for changes (default: auto-detect from server)
|
|
50
|
+
|
|
51
|
+
DEPLOY OPTIONS
|
|
52
|
+
--server, -s <path> Path to server entrypoint (default: auto-detect)
|
|
53
|
+
--token <token> Override FUSION_DEPLOY_TOKEN (connection token)
|
|
54
|
+
|
|
55
|
+
REMOTE OPTIONS
|
|
56
|
+
fusion remote <url> Override API endpoint (default: Vinkius Cloud)
|
|
57
|
+
fusion remote --server-id <id> Set target server UUID
|
|
58
|
+
|
|
59
|
+
INSPECTOR OPTIONS
|
|
60
|
+
--demo, -d Launch with built-in simulator (no server needed)
|
|
61
|
+
--out, -o <mode> Output: tui (default), stderr (headless ECS/K8s)
|
|
62
|
+
--pid, -p <pid> Connect to a specific server PID
|
|
63
|
+
--path <path> Custom IPC socket/pipe path
|
|
64
|
+
|
|
65
|
+
LOCK OPTIONS
|
|
66
|
+
--server, -s <path> Path to server entrypoint
|
|
67
|
+
--name, -n <name> Server name for lockfile header
|
|
68
|
+
--cwd <dir> Project root directory
|
|
69
|
+
|
|
70
|
+
GLOBAL
|
|
71
|
+
--help, -h Show this help message
|
|
72
|
+
|
|
73
|
+
EXAMPLES
|
|
74
|
+
fusion create my-server
|
|
75
|
+
fusion create my-server -y
|
|
76
|
+
fusion create my-server --vector prisma --transport sse
|
|
77
|
+
fusion dev --server ./src/server.ts
|
|
78
|
+
fusion dev --server ./src/server.ts --dir ./src/tools
|
|
79
|
+
fusion lock --server ./src/server.ts
|
|
80
|
+
fusion deploy
|
|
81
|
+
fusion remote --server-id abc-123-def
|
|
82
|
+
fusion remote http://localhost:8080 --server-id abc-123-def
|
|
83
|
+
fusion inspect --demo
|
|
84
|
+
fusion insp --pid 12345
|
|
85
|
+
`.trim();
|
|
86
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,IAAI,EAAI,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,KAAK,EAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,MAAM,EAAE,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,GAAG,EAAK,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS;IACnD,IAAI,EAAI,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS;IACnD,GAAG,EAAK,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS;IACpD,KAAK,EAAE,SAAS;CACV,CAAC;AAEX,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAE7D,oEAAoE;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAEvF,oEAAoE;AAEpE,qCAAqC;AACrC,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;2DAMuC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDvE,CAAC,IAAI,EAAE,CAAC"}
|
package/dist/cli/fusion.d.ts
CHANGED
|
@@ -1,133 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* @internal
|
|
16
|
-
*/
|
|
17
|
-
export type StepStatus = 'pending' | 'running' | 'done' | 'failed';
|
|
18
|
-
/**
|
|
19
|
-
* A progress step emitted during CLI operations.
|
|
20
|
-
* @internal
|
|
21
|
-
*/
|
|
22
|
-
export interface ProgressStep {
|
|
23
|
-
/** Step identifier */
|
|
24
|
-
readonly id: string;
|
|
25
|
-
/** Human-readable label */
|
|
26
|
-
readonly label: string;
|
|
27
|
-
/** Current status */
|
|
28
|
-
readonly status: StepStatus;
|
|
29
|
-
/** Optional detail (e.g. "12 tools, 3 prompts") */
|
|
30
|
-
readonly detail?: string;
|
|
31
|
-
/** Duration in milliseconds (set when done/failed) */
|
|
32
|
-
readonly durationMs?: number;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Callback that receives progress updates.
|
|
36
|
-
* Default implementation writes to stderr like Composer / Yarn.
|
|
37
|
-
* @internal
|
|
38
|
-
*/
|
|
39
|
-
export type ProgressReporter = (step: ProgressStep) => void;
|
|
40
|
-
/**
|
|
41
|
-
* Create the default pretty-print progress reporter.
|
|
42
|
-
* Output goes to stderr so it doesn't pollute piped stdout.
|
|
43
|
-
* @internal exported for testing
|
|
44
|
-
*/
|
|
45
|
-
export declare function createDefaultReporter(): ProgressReporter;
|
|
46
|
-
/**
|
|
47
|
-
* A progress tracker that drives step-by-step progress reporting.
|
|
48
|
-
* @internal exported for testing
|
|
49
|
-
*/
|
|
50
|
-
export declare class ProgressTracker {
|
|
51
|
-
private readonly reporter;
|
|
52
|
-
private startTimes;
|
|
53
|
-
constructor(reporter?: ProgressReporter);
|
|
54
|
-
/** Mark a step as running */
|
|
55
|
-
start(id: string, label: string): void;
|
|
56
|
-
/** Mark a step as completed */
|
|
57
|
-
done(id: string, label: string, detail?: string): void;
|
|
58
|
-
/** Mark a step as failed */
|
|
59
|
-
fail(id: string, label: string, detail?: string): void;
|
|
60
|
-
private elapsed;
|
|
61
|
-
}
|
|
62
|
-
/** @internal exported for testing */
|
|
63
|
-
export declare const MCP_FUSION_VERSION = "1.1.0";
|
|
64
|
-
/** @internal exported for testing */
|
|
65
|
-
export declare const HELP: string;
|
|
66
|
-
/** @internal exported for testing */
|
|
67
|
-
export interface CliArgs {
|
|
68
|
-
command: string;
|
|
69
|
-
check: boolean;
|
|
70
|
-
server: string | undefined;
|
|
71
|
-
name: string | undefined;
|
|
72
|
-
cwd: string;
|
|
73
|
-
help: boolean;
|
|
74
|
-
projectName: string | undefined;
|
|
75
|
-
transport: TransportLayer | undefined;
|
|
76
|
-
vector: IngestionVector | undefined;
|
|
77
|
-
testing: boolean | undefined;
|
|
78
|
-
yes: boolean;
|
|
79
|
-
dir: string | undefined;
|
|
80
|
-
}
|
|
81
|
-
/** @internal exported for testing */
|
|
82
|
-
export declare function parseArgs(argv: string[]): CliArgs;
|
|
83
|
-
/**
|
|
84
|
-
* Duck-typed interface for objects that can provide tool builders.
|
|
85
|
-
* Supports both ToolRegistry and FusionInstance.
|
|
86
|
-
*/
|
|
87
|
-
/** @internal exported for testing */
|
|
88
|
-
export interface RegistryLike {
|
|
89
|
-
getBuilders(): Iterable<import('../core/types.js').ToolBuilder<unknown>>;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Duck-typed interface for objects that can provide prompt builders.
|
|
93
|
-
* Supports PromptRegistry.
|
|
94
|
-
*/
|
|
95
|
-
/** @internal exported for testing */
|
|
96
|
-
export interface PromptRegistryLike {
|
|
97
|
-
getBuilders?(): Iterable<PromptBuilderLike>;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Attempt to load and resolve a tool registry from a server entrypoint.
|
|
101
|
-
*
|
|
102
|
-
* Supports common export patterns:
|
|
103
|
-
* - `export const registry = new ToolRegistry()`
|
|
104
|
-
* - `export default { registry }`
|
|
105
|
-
* - `export const fusion = initFusion()`
|
|
106
|
-
*
|
|
107
|
-
* @internal
|
|
108
|
-
*/
|
|
109
|
-
/** @internal exported for testing */
|
|
110
|
-
export declare function resolveRegistry(serverPath: string): Promise<{
|
|
111
|
-
registry: RegistryLike;
|
|
112
|
-
name: string;
|
|
113
|
-
promptRegistry?: PromptRegistryLike;
|
|
114
|
-
}>;
|
|
115
|
-
/** @internal exported for testing */
|
|
116
|
-
export declare function commandLock(args: CliArgs, reporter?: ProgressReporter): Promise<void>;
|
|
117
|
-
/** @internal exported for testing */
|
|
118
|
-
export declare function commandDev(args: CliArgs, reporter?: ProgressReporter): Promise<void>;
|
|
119
|
-
/**
|
|
120
|
-
* Ask a question via readline with styled ANSI output.
|
|
121
|
-
* @internal exported for testing
|
|
122
|
-
*/
|
|
123
|
-
export declare function ask(rl: {
|
|
124
|
-
question: (q: string, cb: (a: string) => void) => void;
|
|
125
|
-
}, prompt: string, fallback: string): Promise<string>;
|
|
126
|
-
/**
|
|
127
|
-
* Collect project config — either from flags or interactive prompts.
|
|
128
|
-
* @internal exported for testing
|
|
129
|
-
*/
|
|
130
|
-
export declare function collectConfig(args: CliArgs): Promise<ProjectConfig | null>;
|
|
131
|
-
/** @internal exported for testing */
|
|
132
|
-
export declare function commandCreate(args: CliArgs, reporter?: ProgressReporter): Promise<void>;
|
|
2
|
+
import { commandLock } from './commands/lock.js';
|
|
3
|
+
import { commandDev } from './commands/dev.js';
|
|
4
|
+
import { commandCreate } from './commands/create.js';
|
|
5
|
+
export { parseArgs } from './args.js';
|
|
6
|
+
export type { CliArgs } from './args.js';
|
|
7
|
+
export { MCP_FUSION_VERSION, HELP, ansi } from './constants.js';
|
|
8
|
+
export type { StepStatus, ProgressStep, ProgressReporter } from './progress.js';
|
|
9
|
+
export { ProgressTracker, createDefaultReporter } from './progress.js';
|
|
10
|
+
export type { RegistryLike, PromptRegistryLike } from './registry.js';
|
|
11
|
+
export { resolveRegistry } from './registry.js';
|
|
12
|
+
export { collectConfig } from './commands/create.js';
|
|
13
|
+
export { commandLock, commandDev, commandCreate };
|
|
14
|
+
export { ask } from './utils.js';
|
|
133
15
|
//# sourceMappingURL=fusion.d.ts.map
|
package/dist/cli/fusion.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fusion.d.ts","sourceRoot":"","sources":["../../src/cli/fusion.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"fusion.d.ts","sourceRoot":"","sources":["../../src/cli/fusion.ts"],"names":[],"mappings":";AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC"}
|