@visorcraft/idlehands 2.2.5 → 2.2.8
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/agent/capture.js +98 -0
- package/dist/agent/capture.js.map +1 -0
- package/dist/agent/client-pool.js +115 -0
- package/dist/agent/client-pool.js.map +1 -0
- package/dist/agent/conversation-branch.js +50 -0
- package/dist/agent/conversation-branch.js.map +1 -0
- package/dist/agent/tools-schema.js +16 -3
- package/dist/agent/tools-schema.js.map +1 -1
- package/dist/agent.js +320 -118
- package/dist/agent.js.map +1 -1
- package/dist/bot/basic-commands.js +8 -0
- package/dist/bot/basic-commands.js.map +1 -1
- package/dist/bot/budget-command.js +74 -0
- package/dist/bot/budget-command.js.map +1 -0
- package/dist/bot/capture-commands.js +82 -0
- package/dist/bot/capture-commands.js.map +1 -0
- package/dist/bot/command-logic.js +6 -0
- package/dist/bot/command-logic.js.map +1 -1
- package/dist/bot/commands.js +90 -1
- package/dist/bot/commands.js.map +1 -1
- package/dist/bot/cost-command.js +80 -0
- package/dist/bot/cost-command.js.map +1 -0
- package/dist/bot/diff-command.js +48 -0
- package/dist/bot/diff-command.js.map +1 -0
- package/dist/bot/discord-commands.js +36 -1
- package/dist/bot/discord-commands.js.map +1 -1
- package/dist/bot/metrics-command.js +51 -0
- package/dist/bot/metrics-command.js.map +1 -0
- package/dist/bot/rollback-command.js +33 -0
- package/dist/bot/rollback-command.js.map +1 -0
- package/dist/bot/telegram.js +9 -1
- package/dist/bot/telegram.js.map +1 -1
- package/dist/cli/commands/editing.js +11 -2
- package/dist/cli/commands/editing.js.map +1 -1
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -1
- package/dist/progress/turn-progress.js +203 -129
- package/dist/progress/turn-progress.js.map +1 -1
- package/dist/routing/hysteresis.js +69 -0
- package/dist/routing/hysteresis.js.map +1 -0
- package/dist/tools/transaction.js +60 -0
- package/dist/tools/transaction.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CaptureManager — Records API request/response exchanges to JSONL files
|
|
3
|
+
* with optional redaction of sensitive headers (API keys, tokens).
|
|
4
|
+
*
|
|
5
|
+
* Extracted from agent.ts to reduce file size and isolate capture concerns.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'node:fs/promises';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
export class CaptureManager {
|
|
10
|
+
enabled = false;
|
|
11
|
+
redactEnabled = true;
|
|
12
|
+
filePath;
|
|
13
|
+
lastRecord = null;
|
|
14
|
+
capturesDir;
|
|
15
|
+
constructor(stateDir) {
|
|
16
|
+
this.capturesDir = path.join(stateDir, 'captures');
|
|
17
|
+
}
|
|
18
|
+
// ── Public API (matches previous closures) ──────────────────────────
|
|
19
|
+
async on(filePath) {
|
|
20
|
+
const target = filePath?.trim() ? path.resolve(filePath) : this.defaultPath();
|
|
21
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
22
|
+
await fs.appendFile(target, '', 'utf8');
|
|
23
|
+
this.enabled = true;
|
|
24
|
+
this.filePath = target;
|
|
25
|
+
return target;
|
|
26
|
+
}
|
|
27
|
+
off() {
|
|
28
|
+
this.enabled = false;
|
|
29
|
+
}
|
|
30
|
+
async last(filePath) {
|
|
31
|
+
if (!this.lastRecord) {
|
|
32
|
+
throw new Error('No captured request/response pair is available yet.');
|
|
33
|
+
}
|
|
34
|
+
const target = filePath?.trim()
|
|
35
|
+
? path.resolve(filePath)
|
|
36
|
+
: this.filePath || this.defaultPath();
|
|
37
|
+
await this.appendRecord(this.lastRecord, target);
|
|
38
|
+
return target;
|
|
39
|
+
}
|
|
40
|
+
setRedact(enabled) {
|
|
41
|
+
this.redactEnabled = enabled;
|
|
42
|
+
}
|
|
43
|
+
getRedact() {
|
|
44
|
+
return this.redactEnabled;
|
|
45
|
+
}
|
|
46
|
+
open() {
|
|
47
|
+
return this.filePath || null;
|
|
48
|
+
}
|
|
49
|
+
get path() {
|
|
50
|
+
return this.filePath;
|
|
51
|
+
}
|
|
52
|
+
// ── Exchange hook (attach to OpenAIClient) ──────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Returns a hook function suitable for `client.setExchangeHook()`.
|
|
55
|
+
* The hook stores the last record and, if capture is enabled, appends it.
|
|
56
|
+
*/
|
|
57
|
+
createExchangeHook() {
|
|
58
|
+
return async (record) => {
|
|
59
|
+
this.lastRecord = record;
|
|
60
|
+
if (!this.enabled)
|
|
61
|
+
return;
|
|
62
|
+
const outFile = this.filePath || this.defaultPath();
|
|
63
|
+
this.filePath = outFile;
|
|
64
|
+
await this.appendRecord(record, outFile);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// ── Internal helpers ────────────────────────────────────────────────
|
|
68
|
+
defaultPath() {
|
|
69
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
70
|
+
return path.join(this.capturesDir, `${stamp}.jsonl`);
|
|
71
|
+
}
|
|
72
|
+
redactRecord(record) {
|
|
73
|
+
if (!this.redactEnabled)
|
|
74
|
+
return record;
|
|
75
|
+
const redacted = JSON.parse(JSON.stringify(record));
|
|
76
|
+
const walk = (obj) => {
|
|
77
|
+
if (!obj || typeof obj !== 'object')
|
|
78
|
+
return;
|
|
79
|
+
for (const key of Object.keys(obj)) {
|
|
80
|
+
const lower = key.toLowerCase();
|
|
81
|
+
if (lower === 'authorization' || lower === 'api-key' || lower === 'x-api-key') {
|
|
82
|
+
obj[key] = '[REDACTED]';
|
|
83
|
+
}
|
|
84
|
+
else if (typeof obj[key] === 'object') {
|
|
85
|
+
walk(obj[key]);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
walk(redacted);
|
|
90
|
+
return redacted;
|
|
91
|
+
}
|
|
92
|
+
async appendRecord(record, outPath) {
|
|
93
|
+
await fs.mkdir(path.dirname(outPath), { recursive: true });
|
|
94
|
+
const safe = this.redactRecord(record);
|
|
95
|
+
await fs.appendFile(outPath, JSON.stringify(safe) + '\n', 'utf8');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/agent/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export class ClientPool {
|
|
2
|
+
routedClients = new Map();
|
|
3
|
+
probedEndpoints = new Set();
|
|
4
|
+
primary;
|
|
5
|
+
primaryEndpoint;
|
|
6
|
+
apiKey;
|
|
7
|
+
cfg;
|
|
8
|
+
capture;
|
|
9
|
+
ClientCtor;
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
this.primary = opts.primary;
|
|
12
|
+
this.primaryEndpoint = opts.primaryEndpoint;
|
|
13
|
+
this.apiKey = opts.apiKey;
|
|
14
|
+
this.cfg = opts.cfg;
|
|
15
|
+
this.capture = opts.capture;
|
|
16
|
+
this.ClientCtor = opts.ClientCtor;
|
|
17
|
+
}
|
|
18
|
+
/** Get or create a client for the given endpoint. Returns primary if no endpoint or same as primary. */
|
|
19
|
+
getForEndpoint(endpoint) {
|
|
20
|
+
if (!endpoint)
|
|
21
|
+
return this.primary;
|
|
22
|
+
const normalized = this.normalize(endpoint);
|
|
23
|
+
if (!normalized || normalized === this.normalize(this.primaryEndpoint))
|
|
24
|
+
return this.primary;
|
|
25
|
+
const existing = this.routedClients.get(normalized);
|
|
26
|
+
if (existing)
|
|
27
|
+
return existing;
|
|
28
|
+
const routed = new this.ClientCtor(normalized, this.apiKey, this.cfg.verbose);
|
|
29
|
+
this.applyRuntimeOptions(routed);
|
|
30
|
+
this.attachCaptureHook(routed);
|
|
31
|
+
this.routedClients.set(normalized, routed);
|
|
32
|
+
return routed;
|
|
33
|
+
}
|
|
34
|
+
/** Probe an endpoint's connection if not already probed. */
|
|
35
|
+
async probeIfNeeded(endpoint) {
|
|
36
|
+
const normalized = this.normalize(endpoint);
|
|
37
|
+
if (!normalized || this.probedEndpoints.has(normalized))
|
|
38
|
+
return;
|
|
39
|
+
const client = this.getForEndpoint(endpoint);
|
|
40
|
+
if (typeof client.probeConnection === 'function') {
|
|
41
|
+
try {
|
|
42
|
+
await client.probeConnection();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// best-effort
|
|
46
|
+
}
|
|
47
|
+
this.probedEndpoints.add(normalized);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Attach capture hook to the primary client. */
|
|
51
|
+
attachToPrimary() {
|
|
52
|
+
this.attachCaptureHook(this.primary);
|
|
53
|
+
}
|
|
54
|
+
/** Clear all cached clients and probed endpoints (e.g. on endpoint change). */
|
|
55
|
+
reset() {
|
|
56
|
+
this.routedClients.clear();
|
|
57
|
+
this.probedEndpoints.clear();
|
|
58
|
+
}
|
|
59
|
+
/** Mark an endpoint as already probed. */
|
|
60
|
+
markProbed(endpoint) {
|
|
61
|
+
this.probedEndpoints.add(this.normalize(endpoint));
|
|
62
|
+
}
|
|
63
|
+
/** Check if an endpoint has been probed. */
|
|
64
|
+
isProbed(endpoint) {
|
|
65
|
+
return this.probedEndpoints.has(this.normalize(endpoint));
|
|
66
|
+
}
|
|
67
|
+
/** Update the primary client reference (e.g. after setEndpoint). */
|
|
68
|
+
setPrimary(client) {
|
|
69
|
+
this.primary = client;
|
|
70
|
+
}
|
|
71
|
+
/** Close all routed clients. */
|
|
72
|
+
async closeAll() {
|
|
73
|
+
for (const c of this.routedClients.values()) {
|
|
74
|
+
if (typeof c.close === 'function') {
|
|
75
|
+
try {
|
|
76
|
+
await c.close();
|
|
77
|
+
}
|
|
78
|
+
catch { /* ignore */ }
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
this.routedClients.clear();
|
|
82
|
+
this.probedEndpoints.clear();
|
|
83
|
+
}
|
|
84
|
+
normalize(endpoint) {
|
|
85
|
+
return endpoint.trim().replace(/\/+$/, '');
|
|
86
|
+
}
|
|
87
|
+
applyRuntimeOptions(target) {
|
|
88
|
+
if (typeof target.setVerbose === 'function') {
|
|
89
|
+
target.setVerbose(this.cfg.verbose);
|
|
90
|
+
}
|
|
91
|
+
if (typeof this.cfg.response_timeout === 'number' && this.cfg.response_timeout > 0) {
|
|
92
|
+
target.setResponseTimeout(this.cfg.response_timeout);
|
|
93
|
+
}
|
|
94
|
+
if (typeof target.setConnectionTimeout === 'function' &&
|
|
95
|
+
typeof this.cfg.connection_timeout === 'number' &&
|
|
96
|
+
this.cfg.connection_timeout > 0) {
|
|
97
|
+
target.setConnectionTimeout(this.cfg.connection_timeout);
|
|
98
|
+
}
|
|
99
|
+
if (typeof target.setInitialConnectionCheck === 'function' &&
|
|
100
|
+
typeof this.cfg.initial_connection_check === 'boolean') {
|
|
101
|
+
target.setInitialConnectionCheck(this.cfg.initial_connection_check);
|
|
102
|
+
}
|
|
103
|
+
if (typeof target.setInitialConnectionProbeTimeout === 'function' &&
|
|
104
|
+
typeof this.cfg.initial_connection_timeout === 'number' &&
|
|
105
|
+
this.cfg.initial_connection_timeout > 0) {
|
|
106
|
+
target.setInitialConnectionProbeTimeout(this.cfg.initial_connection_timeout);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
attachCaptureHook(target) {
|
|
110
|
+
if (typeof target.setExchangeHook !== 'function')
|
|
111
|
+
return;
|
|
112
|
+
target.setExchangeHook(this.capture.createExchangeHook());
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=client-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-pool.js","sourceRoot":"","sources":["../../src/agent/client-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationBranch — Lightweight conversation checkpointing and rollback.
|
|
3
|
+
*
|
|
4
|
+
* Snapshots the messages array at each user turn boundary, allowing
|
|
5
|
+
* `/rollback` to restore the conversation to a previous state.
|
|
6
|
+
*/
|
|
7
|
+
export class ConversationBranch {
|
|
8
|
+
checkpoints = [];
|
|
9
|
+
maxCheckpoints;
|
|
10
|
+
constructor(maxCheckpoints = 20) {
|
|
11
|
+
this.maxCheckpoints = maxCheckpoints;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Save a checkpoint before a new user turn starts.
|
|
15
|
+
* Call this at the beginning of `ask()`, before the user message is appended.
|
|
16
|
+
*/
|
|
17
|
+
checkpoint(messageCount, instructionPreview) {
|
|
18
|
+
this.checkpoints.push({
|
|
19
|
+
messageCount,
|
|
20
|
+
createdAt: Date.now(),
|
|
21
|
+
preview: instructionPreview.slice(0, 100),
|
|
22
|
+
});
|
|
23
|
+
// Keep bounded
|
|
24
|
+
if (this.checkpoints.length > this.maxCheckpoints) {
|
|
25
|
+
this.checkpoints.shift();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pop the most recent checkpoint and return the target message count.
|
|
30
|
+
* Returns null if no checkpoints exist.
|
|
31
|
+
*/
|
|
32
|
+
rollback() {
|
|
33
|
+
return this.checkpoints.pop() ?? null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* List available checkpoints (most recent first).
|
|
37
|
+
*/
|
|
38
|
+
list() {
|
|
39
|
+
return [...this.checkpoints].reverse();
|
|
40
|
+
}
|
|
41
|
+
/** Number of available rollback points. */
|
|
42
|
+
get depth() {
|
|
43
|
+
return this.checkpoints.length;
|
|
44
|
+
}
|
|
45
|
+
/** Clear all checkpoints (e.g. on session reset). */
|
|
46
|
+
reset() {
|
|
47
|
+
this.checkpoints = [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=conversation-branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-branch.js","sourceRoot":"","sources":["../../src/agent/conversation-branch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAAiB,EAAE,CAAC;IACtB,cAAc,CAAS;IAExC,YAAY,cAAc,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,YAAoB,EAAE,kBAA0B;QACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SAC1C,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,2CAA2C;IAC3C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,qDAAqD;IACrD,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -13,6 +13,14 @@ const int = (min, max) => ({
|
|
|
13
13
|
...(max !== undefined && { maximum: max }),
|
|
14
14
|
});
|
|
15
15
|
const SCHEMA_CACHE = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Tools that are read-only / lightweight — kept in the fast-lane slim schema.
|
|
18
|
+
* Everything else (write, edit, patch, insert, undo, spawn) is omitted.
|
|
19
|
+
*/
|
|
20
|
+
const FAST_LANE_TOOLS = new Set([
|
|
21
|
+
'read_file', 'read_files', 'list_dir', 'search_files', 'exec',
|
|
22
|
+
'vault_search',
|
|
23
|
+
]);
|
|
16
24
|
function cacheKey(opts) {
|
|
17
25
|
return [
|
|
18
26
|
opts?.activeVaultTools ? 'a1' : 'a0',
|
|
@@ -20,6 +28,7 @@ function cacheKey(opts) {
|
|
|
20
28
|
opts?.sysMode ? 's1' : 's0',
|
|
21
29
|
opts?.lspTools ? 'l1' : 'l0',
|
|
22
30
|
opts?.allowSpawnTask === false ? 'sp0' : 'sp1',
|
|
31
|
+
opts?.slimFast ? 'sf1' : 'sf0',
|
|
23
32
|
].join('|');
|
|
24
33
|
}
|
|
25
34
|
export function buildToolsSchema(opts) {
|
|
@@ -78,7 +87,7 @@ export function buildToolsSchema(opts) {
|
|
|
78
87
|
type: 'function',
|
|
79
88
|
function: {
|
|
80
89
|
name: 'write_file',
|
|
81
|
-
description: 'Write file (atomic, backup). Existing non-empty files require overwrite=true (or force=true).',
|
|
90
|
+
description: 'Write file (atomic, backup). Prefer edit_range/apply_patch for edits to existing files; use write_file mainly for new files or intentional full rewrites. Existing non-empty files require overwrite=true (or force=true).',
|
|
82
91
|
parameters: obj({ path: str(), content: str(), overwrite: bool(), force: bool() }, [
|
|
83
92
|
'path',
|
|
84
93
|
'content',
|
|
@@ -273,9 +282,13 @@ export function buildToolsSchema(opts) {
|
|
|
273
282
|
if (opts?.mcpTools?.length) {
|
|
274
283
|
schemas.push(...opts.mcpTools);
|
|
275
284
|
}
|
|
285
|
+
// Fast-lane slim: keep only read-only / lightweight tools to reduce token overhead.
|
|
286
|
+
const final = opts?.slimFast
|
|
287
|
+
? schemas.filter((t) => FAST_LANE_TOOLS.has(t.function.name))
|
|
288
|
+
: schemas;
|
|
276
289
|
if (canUseCache) {
|
|
277
|
-
SCHEMA_CACHE.set(key,
|
|
290
|
+
SCHEMA_CACHE.set(key, final);
|
|
278
291
|
}
|
|
279
|
-
return
|
|
292
|
+
return final;
|
|
280
293
|
}
|
|
281
294
|
//# sourceMappingURL=tools-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools-schema.js","sourceRoot":"","sources":["../../src/agent/tools-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,GAAG,GAAG,CAAC,UAA+B,EAAE,WAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU;IACV,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACzC,MAAM,GAAG,GAAG,CAAC,GAAY,EAAE,GAAY,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,SAAS;IACf,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1C,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;AAErD,SAAS,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"tools-schema.js","sourceRoot":"","sources":["../../src/agent/tools-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,GAAG,GAAG,CAAC,UAA+B,EAAE,WAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU;IACV,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACzC,MAAM,GAAG,GAAG,CAAC,GAAY,EAAE,GAAY,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,SAAS;IACf,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1C,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;AAErD;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM;IAC7D,cAAc;CACf,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,IAOjB;IACC,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACpC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAChC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC3B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC5B,IAAI,EAAE,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QAC9C,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;KAC/B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAShC;IACC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;IAC5C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAiB;QAC5B,+EAA+E;QAC/E,gFAAgF;QAChF,+EAA+E;QAC/E;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,WAAW,EACT,uGAAuG;gBACzG,UAAU,EAAE,GAAG,CACb;oBACE,IAAI,EAAE,GAAG,EAAE;oBACX,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;oBACzB,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;oBAClB,MAAM,EAAE,GAAG,EAAE;oBACb,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;oBACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACjE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;iBAC5B,EACD,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,uGAAuG;gBACzG,UAAU,EAAE,GAAG,CACb;oBACE,QAAQ,EAAE;wBACR,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,GAAG,CACR;4BACE,IAAI,EAAE,GAAG,EAAE;4BACX,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;4BACzB,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;4BAClB,MAAM,EAAE,GAAG,EAAE;4BACb,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;4BACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;4BACjE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;yBAC5B,EACD,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB;qBACF;iBACF,EACD,CAAC,UAAU,CAAC,CACb;aACF;SACF;QAED,+EAA+E;QAC/E,eAAe;QACf,+EAA+E;QAC/E;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,4NAA4N;gBAC9N,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;oBACjF,MAAM;oBACN,SAAS;iBACV,CAAC;aACH;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;gBACnB,WAAW,EACT,sYAAsY;gBACxY,UAAU,EAAE,GAAG,CACb;oBACE,KAAK,EAAE,GAAG,EAAE;oBACZ,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;oBACtC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;iBACjB,EACD,CAAC,OAAO,EAAE,OAAO,CAAC,CACnB;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,khBAAkhB;gBACphB,UAAU,EAAE,GAAG,CACb;oBACE,IAAI,EAAE,GAAG,EAAE;oBACX,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBAClB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;oBAChB,WAAW,EAAE,GAAG,EAAE;iBACnB,EACD,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAClD;aACF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,0EAA0E;gBACvF,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;oBACtF,MAAM;oBACN,UAAU;oBACV,UAAU;iBACX,CAAC;aACH;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,6CAA6C;gBAC1D,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aACrF;SACF;QAED,+EAA+E;QAC/E,iDAAiD;QACjD,+EAA+E;QAC/E;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,UAAU;gBAChB,WAAW,EACT,yHAAyH;gBAC3H,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;aACxF;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,wBAAwB;gBACrC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;oBACzF,SAAS;oBACT,MAAM;iBACP,CAAC;aACH;SACF;QAED,+EAA+E;QAC/E,yBAAyB;QACzB,+EAA+E;QAC/E;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,uCAAuC;gBACpD,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;aACnF;SACF;KACF,CAAC;IAEF,IAAI,IAAI,EAAE,cAAc,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,2CAA2C;gBACxD,UAAU,EAAE,GAAG,CACb;oBACE,IAAI,EAAE,GAAG,EAAE;oBACX,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC9C,KAAK,EAAE,GAAG,EAAE;oBACZ,QAAQ,EAAE,GAAG,EAAE;oBACf,cAAc,EAAE,GAAG,EAAE;oBACrB,UAAU,EAAE,GAAG,EAAE;oBACjB,WAAW,EAAE,GAAG,EAAE;oBAClB,aAAa,EAAE,GAAG,EAAE;oBACpB,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC;qBACzD;iBACF,EACD,CAAC,MAAM,CAAC,CACT;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,eAAe;gBAC5B,UAAU,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;aAC3D;SACF,EACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,mBAAmB;gBAChC,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAChE;SACF,CACF,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;QAC9B,4EAA4E;QAC5E,oEAAoE;QACpE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,kKAAkK;gBACpK,UAAU,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;aAC3D;SACF,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,kBAAyB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CACV;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,4DAA4D;gBACzE,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;aACtD;SACF,EACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,oDAAoD;gBACjE,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;aAC3C;SACF,EACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,uCAAuC;gBACpD,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE;oBAC9D,MAAM;oBACN,MAAM;oBACN,WAAW;iBACZ,CAAC;aACH;SACF,EACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,yCAAyC;gBACtD,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE;oBAC9D,MAAM;oBACN,MAAM;oBACN,WAAW;iBACZ,CAAC;aACH;SACF,EACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,4CAA4C;gBACzD,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE;oBAClF,MAAM;oBACN,MAAM;oBACN,WAAW;iBACZ,CAAC;aACH;SACF,CACF,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,oFAAoF;IACpF,MAAM,KAAK,GAAG,IAAI,EAAE,QAAQ;QAC1B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,OAAO,CAAC;IAEZ,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|