@rool-dev/cli 0.1.0 → 0.1.1-dev.7b36bc9
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 +18 -2
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +78 -13
- package/dist/chat.js.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/space.d.ts +2 -0
- package/dist/space.d.ts.map +1 -0
- package/dist/space.js +121 -0
- package/dist/space.js.map +1 -0
- package/package.json +1 -1
- package/dist/spaces.d.ts +0 -2
- package/dist/spaces.d.ts.map +0 -1
- package/dist/spaces.js +0 -29
- package/dist/spaces.js.map +0 -1
package/README.md
CHANGED
|
@@ -19,7 +19,10 @@ rool <command> [options]
|
|
|
19
19
|
| Command | Description |
|
|
20
20
|
|---------|-------------|
|
|
21
21
|
| `chat <prompt>` | Send a prompt to a space |
|
|
22
|
-
| `
|
|
22
|
+
| `chat` | Interactive chat mode |
|
|
23
|
+
| `space list` | List all spaces |
|
|
24
|
+
| `space create <name>` | Create a new space |
|
|
25
|
+
| `space delete <name>` | Delete a space |
|
|
23
26
|
| `user` | Show current user info |
|
|
24
27
|
| `logout` | Log out |
|
|
25
28
|
|
|
@@ -30,6 +33,7 @@ rool <command> [options]
|
|
|
30
33
|
| `-s, --space <name>` | Space name (default: "Rool CLI") |
|
|
31
34
|
| `-c, --conversation <id>` | Conversation ID (default: "rool-dev") |
|
|
32
35
|
| `-u, --url <url>` | API URL (default: https://api.rool.dev) |
|
|
36
|
+
| `-y, --yes` | Skip confirmation prompts |
|
|
33
37
|
|
|
34
38
|
### Examples
|
|
35
39
|
|
|
@@ -37,11 +41,23 @@ rool <command> [options]
|
|
|
37
41
|
# Chat with the default space
|
|
38
42
|
rool chat "What is the capital of France?"
|
|
39
43
|
|
|
44
|
+
# Interactive chat mode
|
|
45
|
+
rool chat
|
|
46
|
+
|
|
40
47
|
# Use a specific space
|
|
41
48
|
rool chat -s "My Project" "Summarize the current state"
|
|
42
49
|
|
|
43
50
|
# List your spaces
|
|
44
|
-
rool
|
|
51
|
+
rool space list
|
|
52
|
+
|
|
53
|
+
# Create a new space
|
|
54
|
+
rool space create "My New Project"
|
|
55
|
+
|
|
56
|
+
# Delete a space (with confirmation)
|
|
57
|
+
rool space delete "Old Project"
|
|
58
|
+
|
|
59
|
+
# Delete without confirmation
|
|
60
|
+
rool space delete "Old Project" -y
|
|
45
61
|
|
|
46
62
|
# Show user info
|
|
47
63
|
rool user
|
package/dist/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxD"}
|
package/dist/chat.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
|
+
import * as readline from 'node:readline';
|
|
1
2
|
import { RoolClient } from '@rool-dev/client';
|
|
2
3
|
import { NodeAuthProvider } from '@rool-dev/client/node';
|
|
3
|
-
import { parseArgs
|
|
4
|
+
import { parseArgs } from './args.js';
|
|
4
5
|
import { formatMarkdown } from './format.js';
|
|
5
6
|
export async function chat(args) {
|
|
6
7
|
const { space: spaceName, conversation: conversationId, url: apiUrl, rest } = parseArgs(args);
|
|
7
8
|
const prompt = rest.join(' ');
|
|
8
|
-
if (!prompt) {
|
|
9
|
-
console.error('Usage: rool chat <prompt> [options]');
|
|
10
|
-
console.error('');
|
|
11
|
-
printCommonOptions();
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
9
|
const authProvider = new NodeAuthProvider();
|
|
15
10
|
const client = new RoolClient({ baseUrl: apiUrl, authProvider });
|
|
16
11
|
// Login if needed (NodeAuthProvider opens browser and awaits callback)
|
|
@@ -28,11 +23,81 @@ export async function chat(args) {
|
|
|
28
23
|
else {
|
|
29
24
|
space = await client.createSpace(spaceName, { conversationId });
|
|
30
25
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
if (prompt) {
|
|
27
|
+
// One-shot mode
|
|
28
|
+
await sendPrompt(space, prompt);
|
|
29
|
+
space.close();
|
|
30
|
+
client.destroy();
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Interactive mode
|
|
34
|
+
await interactiveMode(space, client);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function clearStatusLine() {
|
|
38
|
+
process.stdout.clearLine(0);
|
|
39
|
+
process.stdout.cursorTo(0);
|
|
40
|
+
}
|
|
41
|
+
async function sendPrompt(space, prompt) {
|
|
42
|
+
// Subscribe to progress updates
|
|
43
|
+
const onUpdate = () => {
|
|
44
|
+
const latest = space.getInteractions().at(-1);
|
|
45
|
+
if (!latest || latest.output !== null)
|
|
46
|
+
return;
|
|
47
|
+
const tool = latest.toolCalls.at(-1);
|
|
48
|
+
clearStatusLine();
|
|
49
|
+
process.stdout.write(tool ? `[${tool.name}]` : 'Thinking...');
|
|
50
|
+
};
|
|
51
|
+
space.on('interactionsUpdated', onUpdate);
|
|
52
|
+
try {
|
|
53
|
+
const result = await space.prompt(prompt);
|
|
54
|
+
clearStatusLine();
|
|
55
|
+
console.log(formatMarkdown(result.message));
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
clearStatusLine();
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
space.off('interactionsUpdated', onUpdate);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async function interactiveMode(space, client) {
|
|
66
|
+
const rl = readline.createInterface({
|
|
67
|
+
input: process.stdin,
|
|
68
|
+
output: process.stdout,
|
|
69
|
+
prompt: '> ',
|
|
70
|
+
});
|
|
71
|
+
console.log('Interactive mode. Type "exit" or press Ctrl+D to quit.');
|
|
72
|
+
console.log('');
|
|
73
|
+
rl.prompt();
|
|
74
|
+
rl.on('line', async (line) => {
|
|
75
|
+
const input = line.trim();
|
|
76
|
+
if (input === 'exit' || input === 'quit') {
|
|
77
|
+
rl.close();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!input) {
|
|
81
|
+
rl.prompt();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await sendPrompt(space, input);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
89
|
+
}
|
|
90
|
+
console.log('');
|
|
91
|
+
rl.prompt();
|
|
92
|
+
});
|
|
93
|
+
rl.on('close', () => {
|
|
94
|
+
console.log('');
|
|
95
|
+
space.close();
|
|
96
|
+
client.destroy();
|
|
97
|
+
});
|
|
98
|
+
// Handle Ctrl+C gracefully
|
|
99
|
+
rl.on('SIGINT', () => {
|
|
100
|
+
rl.close();
|
|
101
|
+
});
|
|
37
102
|
}
|
|
38
103
|
//# sourceMappingURL=chat.js.map
|
package/dist/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { chat } from './chat.js';
|
|
3
|
-
import {
|
|
3
|
+
import { space } from './space.js';
|
|
4
4
|
import { user } from './user.js';
|
|
5
5
|
import { logout } from './logout.js';
|
|
6
6
|
import { printCommonOptions } from './args.js';
|
|
@@ -8,10 +8,10 @@ function printUsage() {
|
|
|
8
8
|
console.error('Usage: rool <command> [options]');
|
|
9
9
|
console.error('');
|
|
10
10
|
console.error('Commands:');
|
|
11
|
-
console.error(' chat
|
|
12
|
-
console.error(' spaces
|
|
13
|
-
console.error(' user
|
|
14
|
-
console.error(' logout
|
|
11
|
+
console.error(' chat [prompt] Chat with a space (interactive if no prompt)');
|
|
12
|
+
console.error(' space <subcommand> Manage spaces (list, create, delete)');
|
|
13
|
+
console.error(' user Show current user info');
|
|
14
|
+
console.error(' logout Log out');
|
|
15
15
|
console.error('');
|
|
16
16
|
printCommonOptions();
|
|
17
17
|
}
|
|
@@ -21,8 +21,12 @@ async function main() {
|
|
|
21
21
|
case 'chat':
|
|
22
22
|
await chat(args);
|
|
23
23
|
break;
|
|
24
|
+
case 'space':
|
|
25
|
+
await space(args);
|
|
26
|
+
break;
|
|
24
27
|
case 'spaces':
|
|
25
|
-
|
|
28
|
+
// Alias: "rool spaces" = "rool space list"
|
|
29
|
+
await space(['list', ...args]);
|
|
26
30
|
break;
|
|
27
31
|
case 'user':
|
|
28
32
|
await user(args);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,SAAS,UAAU;IACjB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,kBAAkB,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,2CAA2C;YAC3C,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM;QACR;YACE,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/space.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AAkGA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCzD"}
|
package/dist/space.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import * as readline from 'node:readline';
|
|
2
|
+
import { RoolClient } from '@rool-dev/client';
|
|
3
|
+
import { NodeAuthProvider } from '@rool-dev/client/node';
|
|
4
|
+
import { parseArgs } from './args.js';
|
|
5
|
+
function printUsage() {
|
|
6
|
+
console.error('Usage: rool space <command> [options]');
|
|
7
|
+
console.error('');
|
|
8
|
+
console.error('Commands:');
|
|
9
|
+
console.error(' list List all spaces');
|
|
10
|
+
console.error(' create <name> Create a new space');
|
|
11
|
+
console.error(' delete <name> [-y] Delete a space');
|
|
12
|
+
console.error('');
|
|
13
|
+
console.error('Options:');
|
|
14
|
+
console.error(' -u, --url <url> API URL (default: https://api.rool.dev)');
|
|
15
|
+
console.error(' -y, --yes Skip confirmation prompt');
|
|
16
|
+
}
|
|
17
|
+
async function confirm(message) {
|
|
18
|
+
const rl = readline.createInterface({
|
|
19
|
+
input: process.stdin,
|
|
20
|
+
output: process.stdout,
|
|
21
|
+
});
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
rl.question(`${message} (y/N) `, (answer) => {
|
|
24
|
+
rl.close();
|
|
25
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function getClient(apiUrl) {
|
|
30
|
+
const authProvider = new NodeAuthProvider();
|
|
31
|
+
const client = new RoolClient({ baseUrl: apiUrl, authProvider });
|
|
32
|
+
if (!await client.isAuthenticated()) {
|
|
33
|
+
console.log('Opening browser to authenticate...');
|
|
34
|
+
await client.login();
|
|
35
|
+
}
|
|
36
|
+
return client;
|
|
37
|
+
}
|
|
38
|
+
async function listSpaces(apiUrl) {
|
|
39
|
+
const client = await getClient(apiUrl);
|
|
40
|
+
const list = await client.listSpaces();
|
|
41
|
+
if (list.length === 0) {
|
|
42
|
+
console.log('No spaces found.');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
for (const s of list) {
|
|
46
|
+
console.log(`${s.id} ${s.name} (${s.role})`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
client.destroy();
|
|
50
|
+
}
|
|
51
|
+
async function createSpace(apiUrl, name) {
|
|
52
|
+
const client = await getClient(apiUrl);
|
|
53
|
+
const newSpace = await client.createSpace(name);
|
|
54
|
+
console.log(`Created space: ${newSpace.id} ${newSpace.name}`);
|
|
55
|
+
newSpace.close();
|
|
56
|
+
client.destroy();
|
|
57
|
+
}
|
|
58
|
+
async function deleteSpace(apiUrl, name, skipConfirm) {
|
|
59
|
+
const client = await getClient(apiUrl);
|
|
60
|
+
const list = await client.listSpaces();
|
|
61
|
+
const spaceInfo = list.find(s => s.name === name);
|
|
62
|
+
if (!spaceInfo) {
|
|
63
|
+
console.error(`Space not found: "${name}"`);
|
|
64
|
+
client.destroy();
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
if (spaceInfo.role !== 'owner') {
|
|
68
|
+
console.error(`Cannot delete space: you are not the owner (role: ${spaceInfo.role})`);
|
|
69
|
+
client.destroy();
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
if (!skipConfirm) {
|
|
73
|
+
const confirmed = await confirm(`Delete space "${name}" (${spaceInfo.id})? This cannot be undone.`);
|
|
74
|
+
if (!confirmed) {
|
|
75
|
+
console.log('Cancelled.');
|
|
76
|
+
client.destroy();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
await client.deleteSpace(spaceInfo.id);
|
|
81
|
+
console.log(`Deleted space: ${name}`);
|
|
82
|
+
client.destroy();
|
|
83
|
+
}
|
|
84
|
+
export async function space(args) {
|
|
85
|
+
const { url: apiUrl, rest } = parseArgs(args);
|
|
86
|
+
const [subcommand, ...subargs] = rest;
|
|
87
|
+
// Check for -y/--yes flag in remaining args
|
|
88
|
+
const yesIndex = subargs.findIndex(a => a === '-y' || a === '--yes');
|
|
89
|
+
const skipConfirm = yesIndex !== -1;
|
|
90
|
+
if (skipConfirm) {
|
|
91
|
+
subargs.splice(yesIndex, 1);
|
|
92
|
+
}
|
|
93
|
+
switch (subcommand) {
|
|
94
|
+
case 'list':
|
|
95
|
+
case undefined:
|
|
96
|
+
await listSpaces(apiUrl);
|
|
97
|
+
break;
|
|
98
|
+
case 'create': {
|
|
99
|
+
const name = subargs.join(' ');
|
|
100
|
+
if (!name) {
|
|
101
|
+
console.error('Usage: rool space create <name>');
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
await createSpace(apiUrl, name);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case 'delete': {
|
|
108
|
+
const name = subargs.join(' ');
|
|
109
|
+
if (!name) {
|
|
110
|
+
console.error('Usage: rool space delete <name> [-y]');
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
await deleteSpace(apiUrl, name, skipConfirm);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
default:
|
|
117
|
+
printUsage();
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=space.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/spaces.d.ts
DELETED
package/dist/spaces.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spaces.d.ts","sourceRoot":"","sources":["../src/spaces.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B1D"}
|
package/dist/spaces.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { RoolClient } from '@rool-dev/client';
|
|
2
|
-
import { NodeAuthProvider } from '@rool-dev/client/node';
|
|
3
|
-
import { parseArgs, printCommonOptions } from './args.js';
|
|
4
|
-
export async function spaces(args) {
|
|
5
|
-
const { url: apiUrl, rest } = parseArgs(args);
|
|
6
|
-
if (rest.length > 0) {
|
|
7
|
-
console.error('Usage: rool spaces [options]');
|
|
8
|
-
console.error('');
|
|
9
|
-
printCommonOptions();
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const authProvider = new NodeAuthProvider();
|
|
13
|
-
const client = new RoolClient({ baseUrl: apiUrl, authProvider });
|
|
14
|
-
if (!await client.isAuthenticated()) {
|
|
15
|
-
console.log('Opening browser to authenticate...');
|
|
16
|
-
await client.login();
|
|
17
|
-
}
|
|
18
|
-
const list = await client.listSpaces();
|
|
19
|
-
if (list.length === 0) {
|
|
20
|
-
console.log('No spaces found.');
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
for (const space of list) {
|
|
24
|
-
console.log(`${space.id} ${space.name} (${space.role})`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
client.destroy();
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=spaces.js.map
|
package/dist/spaces.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spaces.js","sourceRoot":"","sources":["../src/spaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,kBAAkB,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAEvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC"}
|