@tyvm/knowhow 0.0.115 → 0.0.117

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tyvm/knowhow",
3
- "version": "0.0.115",
3
+ "version": "0.0.117",
4
4
  "description": "ai cli with plugins and agents",
5
5
  "main": "ts_build/src/index.js",
6
6
  "bin": {
@@ -283,19 +283,57 @@ export class CustomVariables {
283
283
  /**
284
284
  * Finds the longest common substring between two strings that is >= minLength.
285
285
  * Returns the substring or null if none found.
286
+ *
287
+ * PERF NOTE: This is O(n*m) in the worst case on the sampled chunks.
288
+ * For large strings, we sample multiple fixed-size chunks (first quarter,
289
+ * second quarter, third quarter, last quarter) so we catch patterns that
290
+ * appear anywhere in the string — not just the prefix — while keeping cost bounded.
286
291
  */
287
- private longestCommonSubstring(a: string, b: string, minLength: number): string | null {
292
+ private longestCommonSubstring(
293
+ a: string,
294
+ b: string,
295
+ minLength: number
296
+ ): string | null {
297
+ // Fast path: exact full match
298
+ if (a === b) return a.length >= minLength ? a : null;
299
+
300
+ // For large strings, sample fixed-size chunks from multiple positions
301
+ // so we catch repeated patterns anywhere in the string without O(n*m) blowup.
302
+ // Chunk size: 200 chars each → at most 200*200=40k iterations per chunk pair.
303
+ const CHUNK_SIZE = 200;
304
+
305
+ const getChunks = (s: string): string[] => {
306
+ if (s.length <= CHUNK_SIZE) return [s];
307
+ const q = Math.floor(s.length / 4);
308
+ return [
309
+ s.slice(0, CHUNK_SIZE), // first quarter
310
+ s.slice(q - CHUNK_SIZE / 2, q + CHUNK_SIZE / 2), // around 1/4 mark
311
+ s.slice(2 * q - CHUNK_SIZE / 2, 2 * q + CHUNK_SIZE / 2), // around midpoint
312
+ s.slice(3 * q - CHUNK_SIZE / 2, 3 * q + CHUNK_SIZE / 2), // around 3/4 mark
313
+ s.slice(-CHUNK_SIZE), // last quarter
314
+ ];
315
+ };
316
+
317
+ const chunksA = getChunks(a);
318
+ const chunksB = getChunks(b);
319
+
320
+ // Run LCS on each chunk pair, return the best match found
288
321
  let best = "";
289
- for (let i = 0; i < a.length - minLength + 1; i++) {
290
- for (let j = a.length; j > i + minLength - 1; j--) {
291
- const sub = a.slice(i, j);
292
- if (sub.length <= best.length) break; // already found longer
293
- if (b.includes(sub)) {
294
- best = sub;
295
- break;
322
+ for (const chunkA of chunksA) {
323
+ for (const chunkB of chunksB) {
324
+ for (let i = 0; i < chunkA.length - minLength + 1; i++) {
325
+ for (let j = chunkA.length; j > i + minLength - 1; j--) {
326
+ const sub = chunkA.slice(i, j);
327
+ if (sub.length <= best.length) break; // already found longer
328
+ if (chunkB.includes(sub)) {
329
+ best = sub;
330
+ break;
331
+ }
332
+ }
296
333
  }
297
334
  }
298
335
  }
336
+
299
337
  return best.length >= minLength ? best : null;
300
338
  }
301
339
 
@@ -436,6 +474,11 @@ export class CustomVariables {
436
474
  const grossTokensSaved = Math.round(totalCharsSaved / 4);
437
475
  const netTokensSaved = grossTokensSaved - hintMessageTokens;
438
476
 
477
+ // Skip the hint if the net savings are negative — the reminder costs more than it saves
478
+ if (netTokensSaved <= 0) {
479
+ return;
480
+ }
481
+
439
482
  // Build example variable suggestions
440
483
  const examples = repeatedEntries.slice(0, maxExamples).map(({ str, count, toolNames }, i) => {
441
484
  const preview = str.trim().slice(0, 80).replace(/\s+/g, " ");
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Benchmark for CustomVariables message processor.
3
+ * Tests with realistic data from the stuck agent (21k char writeFileChunk string).
4
+ * Each test has a hard timeout so we don't get frozen like the agent.
5
+ */
6
+ import { CustomVariables } from "../../src/processors/CustomVariables";
7
+ import { Message } from "../../src/clients/types";
8
+ import { ToolsService } from "../../src/services";
9
+
10
+ function makeMockToolsService(): jest.Mocked<ToolsService> {
11
+ return {
12
+ addTools: jest.fn(),
13
+ addFunctions: jest.fn(),
14
+ getTool: jest.fn().mockReturnValue(undefined),
15
+ callTool: jest.fn(),
16
+ } as any;
17
+ }
18
+
19
+ // Replicate the large string from the stuck agent
20
+ const LARGE_STRING_21K = "# Firecracker Sandbox Disk Architecture v2 — EBS-Backed Storage\n" + "x".repeat(21800);
21
+ const MEDIUM_STRING_200 = "grep -n \"diskGb\\|ebsVolume\\|lastActivityAt\\|idleTimeout\" /Users/micah/dev/knowhow-web/packages/backend/src/services/SandboxService.ts".repeat(2);
22
+ const SHORT_STRING_80 = "grep -r \"snapshot\" /Users/micah/dev/knowhow-web/packages/backend/src";
23
+
24
+ function makeToolCallMessage(toolName: string, arg: string): Message {
25
+ return {
26
+ role: "assistant",
27
+ content: null,
28
+ tool_calls: [
29
+ {
30
+ id: `call_${Math.random().toString(36).slice(2)}`,
31
+ type: "function",
32
+ function: {
33
+ name: toolName,
34
+ arguments: JSON.stringify({ content: arg }),
35
+ },
36
+ },
37
+ ],
38
+ };
39
+ }
40
+
41
+ function makeThread(extraMessages: Message[]): Message[] {
42
+ const systemMsg: Message = {
43
+ role: "system",
44
+ content: "You are a helpful assistant.",
45
+ };
46
+ return [systemMsg, ...extraMessages];
47
+ }
48
+
49
+ /**
50
+ * Run a function with a hard ms timeout.
51
+ * Returns { completed: boolean, elapsedMs: number }
52
+ */
53
+ async function runWithTimeout(
54
+ fn: () => void,
55
+ timeoutMs: number
56
+ ): Promise<{ completed: boolean; elapsedMs: number }> {
57
+ return new Promise((resolve) => {
58
+ let done = false;
59
+ const timer = setTimeout(() => {
60
+ if (!done) {
61
+ done = true;
62
+ resolve({ completed: false, elapsedMs: timeoutMs });
63
+ }
64
+ }, timeoutMs);
65
+
66
+ const start = Date.now();
67
+ // Run in next tick so setTimeout can fire
68
+ setImmediate(() => {
69
+ try {
70
+ fn();
71
+ if (!done) {
72
+ done = true;
73
+ clearTimeout(timer);
74
+ resolve({ completed: true, elapsedMs: Date.now() - start });
75
+ }
76
+ } catch (e) {
77
+ if (!done) {
78
+ done = true;
79
+ clearTimeout(timer);
80
+ resolve({ completed: true, elapsedMs: Date.now() - start });
81
+ }
82
+ }
83
+ });
84
+ });
85
+ }
86
+
87
+ describe("CustomVariables Benchmark", () => {
88
+ // Allow up to 30s for each benchmark test (jest default may be less)
89
+ jest.setTimeout(60000);
90
+
91
+ it("BENCHMARK: longestCommonSubstring with two small strings (baseline)", async () => {
92
+ const cv = new CustomVariables(makeMockToolsService());
93
+ const a = SHORT_STRING_80;
94
+ const b = "cat /Users/micah/dev/knowhow-web/packages/backend/src/services/SandboxService.ts";
95
+
96
+ const start = Date.now();
97
+ // Access the private method via cast
98
+ const result = (cv as any).longestCommonSubstring(a, b, 50);
99
+ const elapsed = Date.now() - start;
100
+
101
+ console.log(`[BENCHMARK] Small vs small (${a.length} x ${b.length} chars): ${elapsed}ms, result length: ${result?.length ?? 0}`);
102
+ expect(elapsed).toBeLessThan(100); // should be instant
103
+ });
104
+
105
+ it("BENCHMARK: longestCommonSubstring with one large string (21k) - DANGER ZONE", async () => {
106
+ const cv = new CustomVariables(makeMockToolsService());
107
+ const a = LARGE_STRING_21K;
108
+ const b = MEDIUM_STRING_200;
109
+
110
+ console.log(`[BENCHMARK] Testing LCS with strings of length ${a.length} x ${b.length}`);
111
+ console.log(`[BENCHMARK] Estimated worst-case iterations: ${a.length * b.length / 1_000_000}M`);
112
+
113
+ const { completed, elapsedMs } = await runWithTimeout(() => {
114
+ (cv as any).longestCommonSubstring(a, b, 50);
115
+ }, 5000); // 5 second timeout
116
+
117
+ console.log(`[BENCHMARK] Large (${a.length}) x Medium (${b.length}): completed=${completed}, elapsed=${elapsedMs}ms`);
118
+ if (!completed) {
119
+ console.log(`[BENCHMARK] ⚠️ LCS DID NOT COMPLETE IN 5 SECONDS - THIS IS THE BUG`);
120
+ }
121
+ // We're just measuring - not enforcing pass/fail here so it doesn't hang CI
122
+ expect(true).toBe(true);
123
+ });
124
+
125
+ it("BENCHMARK: createVariableHintProcessor with realistic agent thread (last 10 msgs)", async () => {
126
+ const cv = new CustomVariables(makeMockToolsService());
127
+
128
+ // Simulate the stuck agent's last 10 messages (from real metadata.json analysis):
129
+ // - one 124-char execCommand
130
+ // - one 67-char readFile
131
+ // - one 21,862-char writeFileChunk
132
+ const messages: Message[] = makeThread([
133
+ // Older messages (60+ of them to simulate real thread)
134
+ ...Array.from({ length: 60 }, (_, i) =>
135
+ ({
136
+ role: i % 2 === 0 ? "user" : "assistant",
137
+ content: `Message ${i}: some content about sandboxes and disk resizing plans.`,
138
+ } as Message)
139
+ ),
140
+ // Last 10 messages - the ones that get scanned
141
+ makeToolCallMessage("execCommand", "mkdir -p /Users/micah/dev/knowhow-web/.knowhow/tasks/host-compaction/"),
142
+ { role: "tool", content: "Created directory", tool_call_id: "x1" } as Message,
143
+ makeToolCallMessage("readFile", "/Users/micah/dev/knowhow-web/.knowhow/tasks/firecracker/disks.md"),
144
+ { role: "tool", content: "File contents...", tool_call_id: "x2" } as Message,
145
+ makeToolCallMessage("execCommand", MEDIUM_STRING_200.slice(0, 124)),
146
+ { role: "tool", content: "grep output", tool_call_id: "x3" } as Message,
147
+ makeToolCallMessage("readFile", "/Users/micah/dev/knowhow-web/.knowhow/tasks/firecracker/disks.md".slice(0, 67)),
148
+ { role: "tool", content: "file read", tool_call_id: "x4" } as Message,
149
+ // The killer - 21k char writeFileChunk
150
+ makeToolCallMessage("writeFileChunk", LARGE_STRING_21K),
151
+ { role: "tool", content: "written", tool_call_id: "x5" } as Message,
152
+ ]);
153
+
154
+ console.log(`[BENCHMARK] Thread has ${messages.length} messages`);
155
+ console.log(`[BENCHMARK] Total thread chars: ${JSON.stringify(messages).length}`);
156
+
157
+ const processor = cv.createRepetitionHintProcessor({
158
+ minLength: 50,
159
+ minRepetitions: 2,
160
+ minSubstringLength: 50,
161
+ recentMessagesWindow: 10,
162
+ throttleMessages: 5,
163
+ });
164
+
165
+ const { completed, elapsedMs } = await runWithTimeout(() => {
166
+ const modifiedMessages = [...messages];
167
+ processor(messages, modifiedMessages);
168
+ }, 10000); // 10 second timeout
169
+
170
+ console.log(`[BENCHMARK] createVariableHintProcessor: completed=${completed}, elapsed=${elapsedMs}ms`);
171
+ if (!completed) {
172
+ console.log(`[BENCHMARK] ⚠️ PROCESSOR DID NOT COMPLETE IN 10 SECONDS - THIS CONFIRMS THE BUG`);
173
+ }
174
+ expect(true).toBe(true);
175
+ });
176
+
177
+ it("BENCHMARK: LCS with two large strings (21k x 21k) - catastrophic case", async () => {
178
+ const cv = new CustomVariables(makeMockToolsService());
179
+ const a = LARGE_STRING_21K;
180
+ const b = LARGE_STRING_21K.split("").reverse().join(""); // different but same length
181
+
182
+ console.log(`[BENCHMARK] Testing LCS with strings of length ${a.length} x ${b.length}`);
183
+ console.log(`[BENCHMARK] Theoretical O(n*m) iterations: ${(a.length * b.length / 1_000_000).toFixed(0)}M`);
184
+
185
+ const { completed, elapsedMs } = await runWithTimeout(() => {
186
+ (cv as any).longestCommonSubstring(a, b, 50);
187
+ }, 3000); // 3 second timeout
188
+
189
+ console.log(`[BENCHMARK] Large (${a.length}) x Large (${b.length}): completed=${completed}, elapsed=${elapsedMs}ms`);
190
+ // After the fix (capping LCS input to 500 chars), this now completes instantly
191
+ expect(completed).toBe(true);
192
+ expect(elapsedMs).toBeLessThan(100); // Should be near-instant with the cap
193
+ });
194
+
195
+ it("BENCHMARK: LCS with strings capped at 500 chars - proposed fix", async () => {
196
+ const cv = new CustomVariables(makeMockToolsService());
197
+ // Simulate the fix: cap strings at 500 chars before LCS
198
+ const MAX_LCS_STRING_LENGTH = 500;
199
+ const a = LARGE_STRING_21K.slice(0, MAX_LCS_STRING_LENGTH);
200
+ const b = LARGE_STRING_21K.split("").reverse().join("").slice(0, MAX_LCS_STRING_LENGTH);
201
+
202
+ console.log(`[BENCHMARK] Testing LCS with capped strings of length ${a.length} x ${b.length}`);
203
+
204
+ const start = Date.now();
205
+ const result = (cv as any).longestCommonSubstring(a, b, 50);
206
+ const elapsed = Date.now() - start;
207
+
208
+ console.log(`[BENCHMARK] Capped (${a.length}) x Capped (${b.length}): ${elapsed}ms, result length: ${result?.length ?? 0}`);
209
+ expect(elapsed).toBeLessThan(50); // Should be instant when capped
210
+ });
211
+
212
+ it("BENCHMARK: processMessage (variable substitution) with large content - should be fast", async () => {
213
+ const cv = new CustomVariables(makeMockToolsService());
214
+
215
+ const largeMessage: Message = {
216
+ role: "assistant",
217
+ content: null,
218
+ tool_calls: [
219
+ {
220
+ id: "call_abc",
221
+ type: "function",
222
+ function: {
223
+ name: "writeFileChunk",
224
+ arguments: JSON.stringify({ content: LARGE_STRING_21K, filePath: "/tmp/test.md" }),
225
+ },
226
+ },
227
+ ],
228
+ };
229
+
230
+ const start = Date.now();
231
+ (cv as any).processMessage(largeMessage);
232
+ const elapsed = Date.now() - start;
233
+
234
+ console.log(`[BENCHMARK] processMessage with 21k char tool call: ${elapsed}ms`);
235
+ expect(elapsed).toBeLessThan(100); // substitution itself should be fast
236
+ });
237
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tyvm/knowhow",
3
- "version": "0.0.115",
3
+ "version": "0.0.117",
4
4
  "description": "ai cli with plugins and agents",
5
5
  "main": "ts_build/src/index.js",
6
6
  "bin": {
@@ -180,15 +180,36 @@ class CustomVariables {
180
180
  return collected;
181
181
  }
182
182
  longestCommonSubstring(a, b, minLength) {
183
+ if (a === b)
184
+ return a.length >= minLength ? a : null;
185
+ const CHUNK_SIZE = 200;
186
+ const getChunks = (s) => {
187
+ if (s.length <= CHUNK_SIZE)
188
+ return [s];
189
+ const q = Math.floor(s.length / 4);
190
+ return [
191
+ s.slice(0, CHUNK_SIZE),
192
+ s.slice(q - CHUNK_SIZE / 2, q + CHUNK_SIZE / 2),
193
+ s.slice(2 * q - CHUNK_SIZE / 2, 2 * q + CHUNK_SIZE / 2),
194
+ s.slice(3 * q - CHUNK_SIZE / 2, 3 * q + CHUNK_SIZE / 2),
195
+ s.slice(-CHUNK_SIZE),
196
+ ];
197
+ };
198
+ const chunksA = getChunks(a);
199
+ const chunksB = getChunks(b);
183
200
  let best = "";
184
- for (let i = 0; i < a.length - minLength + 1; i++) {
185
- for (let j = a.length; j > i + minLength - 1; j--) {
186
- const sub = a.slice(i, j);
187
- if (sub.length <= best.length)
188
- break;
189
- if (b.includes(sub)) {
190
- best = sub;
191
- break;
201
+ for (const chunkA of chunksA) {
202
+ for (const chunkB of chunksB) {
203
+ for (let i = 0; i < chunkA.length - minLength + 1; i++) {
204
+ for (let j = chunkA.length; j > i + minLength - 1; j--) {
205
+ const sub = chunkA.slice(i, j);
206
+ if (sub.length <= best.length)
207
+ break;
208
+ if (chunkB.includes(sub)) {
209
+ best = sub;
210
+ break;
211
+ }
212
+ }
192
213
  }
193
214
  }
194
215
  }
@@ -283,6 +304,9 @@ class CustomVariables {
283
304
  }
284
305
  const grossTokensSaved = Math.round(totalCharsSaved / 4);
285
306
  const netTokensSaved = grossTokensSaved - hintMessageTokens;
307
+ if (netTokensSaved <= 0) {
308
+ return;
309
+ }
286
310
  const examples = repeatedEntries.slice(0, maxExamples).map(({ str, count, toolNames }, i) => {
287
311
  const preview = str.trim().slice(0, 80).replace(/\s+/g, " ");
288
312
  const ellipsis = str.length > 80 ? "…" : "";
@@ -1 +1 @@
1
- {"version":3,"file":"CustomVariables.js","sourceRoot":"","sources":["../../../src/processors/CustomVariables.ts"],"names":[],"mappings":";;;AAUA,MAAa,eAAe;IAQN;IAPZ,SAAS,GAAoB,EAAE,CAAC;IAChC,mBAAmB,GAAG,aAAa,CAAC;IACpC,mBAAmB,GAAG,aAAa,CAAC;IACpC,qBAAqB,GAAG,yBAAyB,CAAC;IAClD,qBAAqB,GAAG,eAAe,CAAC;IACxC,sBAAsB,GAAG,gBAAgB,CAAC;IAElD,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAC5C,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAKO,mBAAmB,CAAC,IAAY;QACtC,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAKO,WAAW,CAAC,IAAY,EAAE,QAAa;QAC7C,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,iCAAiC,IAAI,8DAA8D,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QAChC,OAAO,aAAa,IAAI,8BAA8B,CAAC;IACzD,CAAC;IAKO,WAAW,CAAC,OAAe;QACjC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,iCAAiC,OAAO,8DAA8D,CAAC;QAChH,CAAC;QAED,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,oBAAoB,OAAO,0CAA0C,MAAM,CAAC,IAAI,CACrF,IAAI,CAAC,SAAS,CACf,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAKO,KAAK,CAAC,uBAAuB,CACnC,OAAe,EACf,QAAgB,EAChB,QAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,iCAAiC,OAAO,8DAA8D,CAAC;QAChH,CAAC;QAED,IAAI,CAAC;YAEH,IAAI,UAAe,CAAC;YACpB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,8CAA8C,QAAQ,EAAE,CAAC;YAClE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC9C,EAAE,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC/B,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,UAAU;iBACtB;aACF,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YAEjC,OAAO,yBAAyB,QAAQ,kCAAkC,OAAO,IAAI,CAAC;QACxF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAKO,aAAa;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,oCAAoC,CAAC;QAC9C,CAAC;QAED,MAAM,YAAY,GAAG,aAAa;aAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;oBACjB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;oBAChC,CAAC,CAAC,KAAK;gBACT,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;oBACtC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvD,OAAO,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,+BAA+B,aAAa,CAAC,MAAM,OAAO,YAAY,EAAE,CAAC;IAClF,CAAC;IAKO,cAAc,CAAC,OAAe;QACpC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,iCAAiC,OAAO,8DAA8D,CAAC;QAChH,CAAC;QAED,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,oBAAoB,OAAO,0CAA0C,MAAM,CAAC,IAAI,CACrF,IAAI,CAAC,SAAS,CACf,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,aAAa,OAAO,kCAAkC,CAAC;IAChE,CAAC;IAKO,mBAAmB,CACzB,KAAU,EACV,gBAA6B,IAAI,GAAG,EAAE;QAEtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAE9B,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAElE,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/B,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAGzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBAGD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,MAAM,GAAQ,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAKO,cAAc,CAAC,OAAgB;QAErC,MAAM,gBAAgB,GAAY,EAAE,GAAG,OAAO,EAAE,CAAC;QAGjD,IAAI,OAAO,gBAAgB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjD,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CACjD,gBAAgB,CAAC,OAAO,CACzB,CAAC;QACJ,CAAC;QAGD,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC;YAChC,gBAAgB,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAC3D,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACb,GAAG,QAAQ;gBACX,QAAQ,EAAE;oBACR,GAAG,QAAQ,CAAC,QAAQ;oBACpB,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;iBACjE;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAKD,eAAe,CACb,QAAoC;QAEpC,OAAO,KAAK,EAAE,gBAA2B,EAAE,gBAA2B,EAAE,EAAE;YAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAEpC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACX,CAAC;gBAGD,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAKO,mBAAmB,CAAC,GAAQ,EAAE,UAAoB,EAAE;QAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAMO,sBAAsB,CAC5B,QAAmB,EACnB,SAAiB;QAEjB,MAAM,SAAS,GAA+C,EAAE,CAAC;QACjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,UAAU;gBAAE,SAAS;YAClC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAClD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;wBAC5B,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAMO,sBAAsB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAiB;QACpE,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM;gBACrC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpB,IAAI,GAAG,GAAG,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAKO,kBAAkB,CAAC,QAAkB;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YAEP,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAUD,6BAA6B,CAAC,UAQ1B,EAAE;QACJ,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QACnD,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAC5D,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QAG7C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,GAAG,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC;QAGhF,IAAI,sBAAsB,GAAG,CAAC,QAAQ,CAAC;QAEvC,OAAO,KAAK,EAAE,gBAA2B,EAAE,gBAA2B,EAAE,EAAE;YAExE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACpD,IAAI,mBAAmB,GAAG,sBAAsB,GAAG,gBAAgB,EAAE,CAAC;gBACpE,OAAO;YACT,CAAC;YAGD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqD,CAAC;YAGlF,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAGrE,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAE3E,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;YAID,MAAM,eAAe,GAAG,IAAI,GAAG,EAAqD,CAAC;YAErF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBAEzB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;wBAAE,SAAS;oBAElC,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;oBACjF,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC7C,IAAI,QAAQ,EAAE,CAAC;4BACb,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACjB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;4BACnC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;wBACrC,CAAC;6BAAM,CAAC;4BACN,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE;gCAC1B,KAAK,EAAE,CAAC;gCACR,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;6BAC7C,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAGD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;YACH,CAAC;YAGD,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,MAAM,eAAe,GAAkE,EAAE,CAAC;YAE1F,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;oBACjC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC5E,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACtC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACtC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,sBAAsB,GAAG,mBAAmB,CAAC;gBAG7C,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAIhF,IAAI,eAAe,GAAG,CAAC,CAAC;gBACxB,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC;oBAC7C,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC9C,CAAC;gBACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;gBACzD,MAAM,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;gBAG5D,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC1F,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;oBAC/C,OAAO,CACL,SAAS,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,WAAW,uBAAuB,OAAO,GAAG,QAAQ,GAAG,CAChI,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,MAAM;oBACZ,OAAO,EACL,sDAAsD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;wBACjF,KAAK,gBAAgB,sBAAsB,cAAc,6BAA6B;wBACtF,wFAAwF;wBACxF,kEAAkE;wBAClE,yDAAyD;wBACzD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAKO,aAAa,CAAC,YAA0B;QAE9C,YAAY,CAAC,QAAQ,CAAC;YACpB,iCAAyB;YACzB,iCAAyB;YACzB,yCAAiC;YACjC,mCAA2B;YAC3B,oCAA4B;SAC7B,CAAC,CAAC;QACH,YAAY,CAAC,YAAY,CAAC;YACxB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAY,EAAE,QAAa,EAAE,EAAE;gBAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YACD,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,OAAe,EAAE,EAAE;gBAC9C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,KAAK,EACjC,OAAe,EACf,QAAgB,EAChB,QAAgB,EAChB,EAAE;gBACF,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACzE,CAAC;YACD,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,GAAG,EAAE;gBACjC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9B,CAAC;YACD,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,OAAe,EAAE,EAAE;gBACjD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAKD,gBAAgB;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAKD,cAAc;QACZ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAKD,gBAAgB;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;CACF;AA7fD,0CA6fC;AAEY,QAAA,yBAAyB,GAAS;IAC7C,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,yIAAyI;QAC3I,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,6DAA6D;iBAChE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;SAC/B;KACF;CACF,CAAC;AAEW,QAAA,yBAAyB,GAAS;IAC7C,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qDAAqD;QAClE,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC;AAEW,QAAA,iCAAiC,GAAS;IACrD,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,uEAAuE;QACzE,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iDAAiD;iBAC/D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kDAAkD;iBAChE;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;SAC9C;KACF;CACF,CAAC;AAEW,QAAA,2BAA2B,GAAS;IAC/C,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wDAAwD;QACrE,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF;CACF,CAAC;AAEW,QAAA,4BAA4B,GAAS;IAChD,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,0CAA0C;QACvD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"CustomVariables.js","sourceRoot":"","sources":["../../../src/processors/CustomVariables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const CustomVariables_1 = require("../../src/processors/CustomVariables");
4
+ function makeMockToolsService() {
5
+ return {
6
+ addTools: jest.fn(),
7
+ addFunctions: jest.fn(),
8
+ getTool: jest.fn().mockReturnValue(undefined),
9
+ callTool: jest.fn(),
10
+ };
11
+ }
12
+ const LARGE_STRING_21K = "# Firecracker Sandbox Disk Architecture v2 — EBS-Backed Storage\n" + "x".repeat(21800);
13
+ const MEDIUM_STRING_200 = "grep -n \"diskGb\\|ebsVolume\\|lastActivityAt\\|idleTimeout\" /Users/micah/dev/knowhow-web/packages/backend/src/services/SandboxService.ts".repeat(2);
14
+ const SHORT_STRING_80 = "grep -r \"snapshot\" /Users/micah/dev/knowhow-web/packages/backend/src";
15
+ function makeToolCallMessage(toolName, arg) {
16
+ return {
17
+ role: "assistant",
18
+ content: null,
19
+ tool_calls: [
20
+ {
21
+ id: `call_${Math.random().toString(36).slice(2)}`,
22
+ type: "function",
23
+ function: {
24
+ name: toolName,
25
+ arguments: JSON.stringify({ content: arg }),
26
+ },
27
+ },
28
+ ],
29
+ };
30
+ }
31
+ function makeThread(extraMessages) {
32
+ const systemMsg = {
33
+ role: "system",
34
+ content: "You are a helpful assistant.",
35
+ };
36
+ return [systemMsg, ...extraMessages];
37
+ }
38
+ async function runWithTimeout(fn, timeoutMs) {
39
+ return new Promise((resolve) => {
40
+ let done = false;
41
+ const timer = setTimeout(() => {
42
+ if (!done) {
43
+ done = true;
44
+ resolve({ completed: false, elapsedMs: timeoutMs });
45
+ }
46
+ }, timeoutMs);
47
+ const start = Date.now();
48
+ setImmediate(() => {
49
+ try {
50
+ fn();
51
+ if (!done) {
52
+ done = true;
53
+ clearTimeout(timer);
54
+ resolve({ completed: true, elapsedMs: Date.now() - start });
55
+ }
56
+ }
57
+ catch (e) {
58
+ if (!done) {
59
+ done = true;
60
+ clearTimeout(timer);
61
+ resolve({ completed: true, elapsedMs: Date.now() - start });
62
+ }
63
+ }
64
+ });
65
+ });
66
+ }
67
+ describe("CustomVariables Benchmark", () => {
68
+ jest.setTimeout(60000);
69
+ it("BENCHMARK: longestCommonSubstring with two small strings (baseline)", async () => {
70
+ const cv = new CustomVariables_1.CustomVariables(makeMockToolsService());
71
+ const a = SHORT_STRING_80;
72
+ const b = "cat /Users/micah/dev/knowhow-web/packages/backend/src/services/SandboxService.ts";
73
+ const start = Date.now();
74
+ const result = cv.longestCommonSubstring(a, b, 50);
75
+ const elapsed = Date.now() - start;
76
+ console.log(`[BENCHMARK] Small vs small (${a.length} x ${b.length} chars): ${elapsed}ms, result length: ${result?.length ?? 0}`);
77
+ expect(elapsed).toBeLessThan(100);
78
+ });
79
+ it("BENCHMARK: longestCommonSubstring with one large string (21k) - DANGER ZONE", async () => {
80
+ const cv = new CustomVariables_1.CustomVariables(makeMockToolsService());
81
+ const a = LARGE_STRING_21K;
82
+ const b = MEDIUM_STRING_200;
83
+ console.log(`[BENCHMARK] Testing LCS with strings of length ${a.length} x ${b.length}`);
84
+ console.log(`[BENCHMARK] Estimated worst-case iterations: ${a.length * b.length / 1_000_000}M`);
85
+ const { completed, elapsedMs } = await runWithTimeout(() => {
86
+ cv.longestCommonSubstring(a, b, 50);
87
+ }, 5000);
88
+ console.log(`[BENCHMARK] Large (${a.length}) x Medium (${b.length}): completed=${completed}, elapsed=${elapsedMs}ms`);
89
+ if (!completed) {
90
+ console.log(`[BENCHMARK] ⚠️ LCS DID NOT COMPLETE IN 5 SECONDS - THIS IS THE BUG`);
91
+ }
92
+ expect(true).toBe(true);
93
+ });
94
+ it("BENCHMARK: createVariableHintProcessor with realistic agent thread (last 10 msgs)", async () => {
95
+ const cv = new CustomVariables_1.CustomVariables(makeMockToolsService());
96
+ const messages = makeThread([
97
+ ...Array.from({ length: 60 }, (_, i) => ({
98
+ role: i % 2 === 0 ? "user" : "assistant",
99
+ content: `Message ${i}: some content about sandboxes and disk resizing plans.`,
100
+ })),
101
+ makeToolCallMessage("execCommand", "mkdir -p /Users/micah/dev/knowhow-web/.knowhow/tasks/host-compaction/"),
102
+ { role: "tool", content: "Created directory", tool_call_id: "x1" },
103
+ makeToolCallMessage("readFile", "/Users/micah/dev/knowhow-web/.knowhow/tasks/firecracker/disks.md"),
104
+ { role: "tool", content: "File contents...", tool_call_id: "x2" },
105
+ makeToolCallMessage("execCommand", MEDIUM_STRING_200.slice(0, 124)),
106
+ { role: "tool", content: "grep output", tool_call_id: "x3" },
107
+ makeToolCallMessage("readFile", "/Users/micah/dev/knowhow-web/.knowhow/tasks/firecracker/disks.md".slice(0, 67)),
108
+ { role: "tool", content: "file read", tool_call_id: "x4" },
109
+ makeToolCallMessage("writeFileChunk", LARGE_STRING_21K),
110
+ { role: "tool", content: "written", tool_call_id: "x5" },
111
+ ]);
112
+ console.log(`[BENCHMARK] Thread has ${messages.length} messages`);
113
+ console.log(`[BENCHMARK] Total thread chars: ${JSON.stringify(messages).length}`);
114
+ const processor = cv.createRepetitionHintProcessor({
115
+ minLength: 50,
116
+ minRepetitions: 2,
117
+ minSubstringLength: 50,
118
+ recentMessagesWindow: 10,
119
+ throttleMessages: 5,
120
+ });
121
+ const { completed, elapsedMs } = await runWithTimeout(() => {
122
+ const modifiedMessages = [...messages];
123
+ processor(messages, modifiedMessages);
124
+ }, 10000);
125
+ console.log(`[BENCHMARK] createVariableHintProcessor: completed=${completed}, elapsed=${elapsedMs}ms`);
126
+ if (!completed) {
127
+ console.log(`[BENCHMARK] ⚠️ PROCESSOR DID NOT COMPLETE IN 10 SECONDS - THIS CONFIRMS THE BUG`);
128
+ }
129
+ expect(true).toBe(true);
130
+ });
131
+ it("BENCHMARK: LCS with two large strings (21k x 21k) - catastrophic case", async () => {
132
+ const cv = new CustomVariables_1.CustomVariables(makeMockToolsService());
133
+ const a = LARGE_STRING_21K;
134
+ const b = LARGE_STRING_21K.split("").reverse().join("");
135
+ console.log(`[BENCHMARK] Testing LCS with strings of length ${a.length} x ${b.length}`);
136
+ console.log(`[BENCHMARK] Theoretical O(n*m) iterations: ${(a.length * b.length / 1_000_000).toFixed(0)}M`);
137
+ const { completed, elapsedMs } = await runWithTimeout(() => {
138
+ cv.longestCommonSubstring(a, b, 50);
139
+ }, 3000);
140
+ console.log(`[BENCHMARK] Large (${a.length}) x Large (${b.length}): completed=${completed}, elapsed=${elapsedMs}ms`);
141
+ expect(completed).toBe(true);
142
+ expect(elapsedMs).toBeLessThan(100);
143
+ });
144
+ it("BENCHMARK: LCS with strings capped at 500 chars - proposed fix", async () => {
145
+ const cv = new CustomVariables_1.CustomVariables(makeMockToolsService());
146
+ const MAX_LCS_STRING_LENGTH = 500;
147
+ const a = LARGE_STRING_21K.slice(0, MAX_LCS_STRING_LENGTH);
148
+ const b = LARGE_STRING_21K.split("").reverse().join("").slice(0, MAX_LCS_STRING_LENGTH);
149
+ console.log(`[BENCHMARK] Testing LCS with capped strings of length ${a.length} x ${b.length}`);
150
+ const start = Date.now();
151
+ const result = cv.longestCommonSubstring(a, b, 50);
152
+ const elapsed = Date.now() - start;
153
+ console.log(`[BENCHMARK] Capped (${a.length}) x Capped (${b.length}): ${elapsed}ms, result length: ${result?.length ?? 0}`);
154
+ expect(elapsed).toBeLessThan(50);
155
+ });
156
+ it("BENCHMARK: processMessage (variable substitution) with large content - should be fast", async () => {
157
+ const cv = new CustomVariables_1.CustomVariables(makeMockToolsService());
158
+ const largeMessage = {
159
+ role: "assistant",
160
+ content: null,
161
+ tool_calls: [
162
+ {
163
+ id: "call_abc",
164
+ type: "function",
165
+ function: {
166
+ name: "writeFileChunk",
167
+ arguments: JSON.stringify({ content: LARGE_STRING_21K, filePath: "/tmp/test.md" }),
168
+ },
169
+ },
170
+ ],
171
+ };
172
+ const start = Date.now();
173
+ cv.processMessage(largeMessage);
174
+ const elapsed = Date.now() - start;
175
+ console.log(`[BENCHMARK] processMessage with 21k char tool call: ${elapsed}ms`);
176
+ expect(elapsed).toBeLessThan(100);
177
+ });
178
+ });
179
+ //# sourceMappingURL=CustomVariablesBenchmark.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomVariablesBenchmark.test.js","sourceRoot":"","sources":["../../../tests/processors/CustomVariablesBenchmark.test.ts"],"names":[],"mappings":"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"}