@appkit/llamacpp-cli 1.8.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/README.md +249 -40
- package/dist/cli.js +154 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/completion.d.ts +9 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +83 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/monitor.js +1 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/ps.d.ts +1 -3
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +36 -115
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/router/config.d.ts +11 -0
- package/dist/commands/router/config.d.ts.map +1 -0
- package/dist/commands/router/config.js +100 -0
- package/dist/commands/router/config.js.map +1 -0
- package/dist/commands/router/logs.d.ts +12 -0
- package/dist/commands/router/logs.d.ts.map +1 -0
- package/dist/commands/router/logs.js +238 -0
- package/dist/commands/router/logs.js.map +1 -0
- package/dist/commands/router/restart.d.ts +2 -0
- package/dist/commands/router/restart.d.ts.map +1 -0
- package/dist/commands/router/restart.js +39 -0
- package/dist/commands/router/restart.js.map +1 -0
- package/dist/commands/router/start.d.ts +2 -0
- package/dist/commands/router/start.d.ts.map +1 -0
- package/dist/commands/router/start.js +60 -0
- package/dist/commands/router/start.js.map +1 -0
- package/dist/commands/router/status.d.ts +2 -0
- package/dist/commands/router/status.d.ts.map +1 -0
- package/dist/commands/router/status.js +116 -0
- package/dist/commands/router/status.js.map +1 -0
- package/dist/commands/router/stop.d.ts +2 -0
- package/dist/commands/router/stop.d.ts.map +1 -0
- package/dist/commands/router/stop.js +36 -0
- package/dist/commands/router/stop.js.map +1 -0
- package/dist/commands/tui.d.ts +2 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +27 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/lib/completion.d.ts +5 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +195 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +5 -1
- package/dist/lib/model-downloader.d.ts.map +1 -1
- package/dist/lib/model-downloader.js +53 -20
- package/dist/lib/model-downloader.js.map +1 -1
- package/dist/lib/router-logger.d.ts +61 -0
- package/dist/lib/router-logger.d.ts.map +1 -0
- package/dist/lib/router-logger.js +200 -0
- package/dist/lib/router-logger.js.map +1 -0
- package/dist/lib/router-manager.d.ts +103 -0
- package/dist/lib/router-manager.d.ts.map +1 -0
- package/dist/lib/router-manager.js +394 -0
- package/dist/lib/router-manager.js.map +1 -0
- package/dist/lib/router-server.d.ts +61 -0
- package/dist/lib/router-server.d.ts.map +1 -0
- package/dist/lib/router-server.js +485 -0
- package/dist/lib/router-server.js.map +1 -0
- package/dist/tui/ConfigApp.d.ts +7 -0
- package/dist/tui/ConfigApp.d.ts.map +1 -0
- package/dist/tui/ConfigApp.js +1002 -0
- package/dist/tui/ConfigApp.js.map +1 -0
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
- package/dist/tui/HistoricalMonitorApp.js +85 -49
- package/dist/tui/HistoricalMonitorApp.js.map +1 -1
- package/dist/tui/ModelsApp.d.ts +7 -0
- package/dist/tui/ModelsApp.d.ts.map +1 -0
- package/dist/tui/ModelsApp.js +362 -0
- package/dist/tui/ModelsApp.js.map +1 -0
- package/dist/tui/MultiServerMonitorApp.d.ts +6 -1
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
- package/dist/tui/MultiServerMonitorApp.js +1038 -122
- package/dist/tui/MultiServerMonitorApp.js.map +1 -1
- package/dist/tui/RootNavigator.d.ts +7 -0
- package/dist/tui/RootNavigator.d.ts.map +1 -0
- package/dist/tui/RootNavigator.js +55 -0
- package/dist/tui/RootNavigator.js.map +1 -0
- package/dist/tui/SearchApp.d.ts +6 -0
- package/dist/tui/SearchApp.d.ts.map +1 -0
- package/dist/tui/SearchApp.js +451 -0
- package/dist/tui/SearchApp.js.map +1 -0
- package/dist/tui/SplashScreen.d.ts +16 -0
- package/dist/tui/SplashScreen.d.ts.map +1 -0
- package/dist/tui/SplashScreen.js +129 -0
- package/dist/tui/SplashScreen.js.map +1 -0
- package/dist/types/router-config.d.ts +19 -0
- package/dist/types/router-config.d.ts.map +1 -0
- package/dist/types/router-config.js +3 -0
- package/dist/types/router-config.js.map +1 -0
- package/package.json +1 -1
- package/src/cli.ts +121 -10
- package/src/commands/monitor.ts +1 -1
- package/src/commands/ps.ts +44 -133
- package/src/commands/router/config.ts +116 -0
- package/src/commands/router/logs.ts +256 -0
- package/src/commands/router/restart.ts +36 -0
- package/src/commands/router/start.ts +60 -0
- package/src/commands/router/status.ts +119 -0
- package/src/commands/router/stop.ts +33 -0
- package/src/commands/tui.ts +25 -0
- package/src/lib/model-downloader.ts +57 -20
- package/src/lib/router-logger.ts +201 -0
- package/src/lib/router-manager.ts +414 -0
- package/src/lib/router-server.ts +538 -0
- package/src/tui/ConfigApp.ts +1085 -0
- package/src/tui/HistoricalMonitorApp.ts +88 -49
- package/src/tui/ModelsApp.ts +368 -0
- package/src/tui/MultiServerMonitorApp.ts +1163 -122
- package/src/tui/RootNavigator.ts +74 -0
- package/src/tui/SearchApp.ts +511 -0
- package/src/tui/SplashScreen.ts +149 -0
- package/src/types/router-config.ts +25 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.RequestTimer = exports.RouterLogger = void 0;
|
|
37
|
+
const fs = __importStar(require("fs/promises"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
40
|
+
class RouterLogger {
|
|
41
|
+
constructor(verbose = false) {
|
|
42
|
+
this.verbose = verbose;
|
|
43
|
+
this.logFilePath = path.join((0, file_utils_1.getLogsDir)(), 'router.log');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Log a request with timing and outcome
|
|
47
|
+
*/
|
|
48
|
+
async logRequest(entry) {
|
|
49
|
+
// Human-readable format for console
|
|
50
|
+
const humanLog = this.formatHumanReadable(entry);
|
|
51
|
+
// Output request activity to stdout (separate from system messages on stderr)
|
|
52
|
+
console.log(humanLog);
|
|
53
|
+
// Verbose mode: append detailed JSON to log file
|
|
54
|
+
if (this.verbose) {
|
|
55
|
+
const jsonLog = JSON.stringify(entry) + '\n';
|
|
56
|
+
try {
|
|
57
|
+
await fs.appendFile(this.logFilePath, jsonLog, 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error('[Router Logger] Failed to write to log file:', error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format log entry for human reading (console output)
|
|
66
|
+
*/
|
|
67
|
+
formatHumanReadable(entry) {
|
|
68
|
+
const { timestamp, model, endpoint, method, status, statusCode, durationMs, error, backend, prompt } = entry;
|
|
69
|
+
// Color coding based on status (using ANSI codes)
|
|
70
|
+
const statusColor = status === 'success' ? '\x1b[32m' : '\x1b[31m'; // Green or Red
|
|
71
|
+
const resetColor = '\x1b[0m';
|
|
72
|
+
// Base log format (no [Router] prefix, no icons)
|
|
73
|
+
let log = `${statusColor}${statusCode}${resetColor} ${method} ${endpoint} → ${model}`;
|
|
74
|
+
// Add backend if available
|
|
75
|
+
if (backend) {
|
|
76
|
+
log += ` (${backend})`;
|
|
77
|
+
}
|
|
78
|
+
// Add duration
|
|
79
|
+
log += ` ${durationMs}ms`;
|
|
80
|
+
// Add prompt preview if available
|
|
81
|
+
if (prompt) {
|
|
82
|
+
log += ` | "${prompt}"`;
|
|
83
|
+
}
|
|
84
|
+
// Add error if present
|
|
85
|
+
if (error) {
|
|
86
|
+
log += ` | Error: ${error}`;
|
|
87
|
+
}
|
|
88
|
+
return log;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format log entry for LLM parsing (verbose JSON format)
|
|
92
|
+
*/
|
|
93
|
+
static formatForLLM(entry) {
|
|
94
|
+
return JSON.stringify(entry, null, 2);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Read log file and return all entries (for verbose mode)
|
|
98
|
+
*/
|
|
99
|
+
async readLogs(limit) {
|
|
100
|
+
try {
|
|
101
|
+
const content = await fs.readFile(this.logFilePath, 'utf-8');
|
|
102
|
+
const lines = content.trim().split('\n').filter(line => line);
|
|
103
|
+
// Parse JSON entries
|
|
104
|
+
const entries = lines
|
|
105
|
+
.map(line => {
|
|
106
|
+
try {
|
|
107
|
+
return JSON.parse(line);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
.filter((entry) => entry !== null);
|
|
114
|
+
// Apply limit if specified
|
|
115
|
+
if (limit && limit > 0) {
|
|
116
|
+
return entries.slice(-limit);
|
|
117
|
+
}
|
|
118
|
+
return entries;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// Log file doesn't exist or can't be read
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Clear the log file
|
|
127
|
+
*/
|
|
128
|
+
async clearLogs() {
|
|
129
|
+
try {
|
|
130
|
+
await fs.writeFile(this.logFilePath, '', 'utf-8');
|
|
131
|
+
console.error('[Router Logger] Log file cleared');
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error('[Router Logger] Failed to clear log file:', error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get log file size
|
|
139
|
+
*/
|
|
140
|
+
async getLogFileSize() {
|
|
141
|
+
try {
|
|
142
|
+
const stats = await fs.stat(this.logFilePath);
|
|
143
|
+
return stats.size;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Rotate log file if it exceeds threshold
|
|
151
|
+
*/
|
|
152
|
+
async rotateIfNeeded(thresholdMB = 100) {
|
|
153
|
+
const size = await this.getLogFileSize();
|
|
154
|
+
const thresholdBytes = thresholdMB * 1024 * 1024;
|
|
155
|
+
if (size > thresholdBytes) {
|
|
156
|
+
try {
|
|
157
|
+
// Generate timestamp
|
|
158
|
+
const timestamp = new Date()
|
|
159
|
+
.toISOString()
|
|
160
|
+
.replace(/T/, '-')
|
|
161
|
+
.replace(/:/g, '-')
|
|
162
|
+
.replace(/\..+/, '');
|
|
163
|
+
const logsDir = (0, file_utils_1.getLogsDir)();
|
|
164
|
+
const archivedPath = path.join(logsDir, `router.${timestamp}.log`);
|
|
165
|
+
// Rename current log to archived version
|
|
166
|
+
await fs.rename(this.logFilePath, archivedPath);
|
|
167
|
+
console.error(`[Router Logger] Rotated log file to ${archivedPath}`);
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
console.error('[Router Logger] Failed to rotate log file:', error);
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.RouterLogger = RouterLogger;
|
|
179
|
+
/**
|
|
180
|
+
* Utility class for tracking request timing
|
|
181
|
+
*/
|
|
182
|
+
class RequestTimer {
|
|
183
|
+
constructor() {
|
|
184
|
+
this.startTime = Date.now();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get elapsed time in milliseconds
|
|
188
|
+
*/
|
|
189
|
+
elapsed() {
|
|
190
|
+
return Date.now() - this.startTime;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get current ISO timestamp
|
|
194
|
+
*/
|
|
195
|
+
static now() {
|
|
196
|
+
return new Date().toISOString();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
exports.RequestTimer = RequestTimer;
|
|
200
|
+
//# sourceMappingURL=router-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-logger.js","sourceRoot":"","sources":["../../src/lib/router-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { RouterConfig } from '../types/router-config';
|
|
2
|
+
export interface RouterServiceStatus {
|
|
3
|
+
isRunning: boolean;
|
|
4
|
+
pid: number | null;
|
|
5
|
+
exitCode: number | null;
|
|
6
|
+
lastExitReason?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class RouterManager {
|
|
9
|
+
private configDir;
|
|
10
|
+
private logsDir;
|
|
11
|
+
private configPath;
|
|
12
|
+
private launchAgentsDir;
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Initialize router directories
|
|
16
|
+
*/
|
|
17
|
+
initialize(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Get default router configuration
|
|
20
|
+
*/
|
|
21
|
+
getDefaultConfig(): RouterConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Load router configuration
|
|
24
|
+
*/
|
|
25
|
+
loadConfig(): Promise<RouterConfig | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Save router configuration
|
|
28
|
+
*/
|
|
29
|
+
saveConfig(config: RouterConfig): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Update router configuration with partial changes
|
|
32
|
+
*/
|
|
33
|
+
updateConfig(updates: Partial<RouterConfig>): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Delete router configuration
|
|
36
|
+
*/
|
|
37
|
+
deleteConfig(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate plist XML content for the router
|
|
40
|
+
*/
|
|
41
|
+
generatePlist(config: RouterConfig): string;
|
|
42
|
+
/**
|
|
43
|
+
* Create and write plist file
|
|
44
|
+
*/
|
|
45
|
+
createPlist(config: RouterConfig): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Delete plist file
|
|
48
|
+
*/
|
|
49
|
+
deletePlist(config: RouterConfig): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Load service (register with launchctl)
|
|
52
|
+
*/
|
|
53
|
+
loadService(plistPath: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Unload service (unregister from launchctl)
|
|
56
|
+
*/
|
|
57
|
+
unloadService(plistPath: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Start service
|
|
60
|
+
*/
|
|
61
|
+
startService(label: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Stop service
|
|
64
|
+
*/
|
|
65
|
+
stopService(label: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Get service status from launchctl
|
|
68
|
+
*/
|
|
69
|
+
getServiceStatus(label: string): Promise<RouterServiceStatus>;
|
|
70
|
+
/**
|
|
71
|
+
* Interpret exit code to human-readable reason
|
|
72
|
+
*/
|
|
73
|
+
private interpretExitCode;
|
|
74
|
+
/**
|
|
75
|
+
* Wait for service to start (with timeout)
|
|
76
|
+
*/
|
|
77
|
+
waitForServiceStart(label: string, timeoutMs?: number): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Wait for service to stop (with timeout)
|
|
80
|
+
*/
|
|
81
|
+
waitForServiceStop(label: string, timeoutMs?: number): Promise<boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Start router service
|
|
84
|
+
*/
|
|
85
|
+
start(): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* Stop router service
|
|
88
|
+
*/
|
|
89
|
+
stop(): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Restart router service
|
|
92
|
+
*/
|
|
93
|
+
restart(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Get router status
|
|
96
|
+
*/
|
|
97
|
+
getStatus(): Promise<{
|
|
98
|
+
config: RouterConfig;
|
|
99
|
+
status: RouterServiceStatus;
|
|
100
|
+
} | null>;
|
|
101
|
+
}
|
|
102
|
+
export declare const routerManager: RouterManager;
|
|
103
|
+
//# sourceMappingURL=router-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-manager.d.ts","sourceRoot":"","sources":["../../src/lib/router-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAatD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;;IAShC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACH,gBAAgB,IAAI,YAAY;IAiBhC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAOhD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASjE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAkE3C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyCnE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5E;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAY3E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAE,GAAG,IAAI,CAAC;CASzF;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|