@chendpoc/pi-memory 0.2.0 → 0.2.2
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 +352 -63
- package/assets/pi-memory-logo.png +0 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/preflight.d.ts +8 -0
- package/dist/config/preflight.d.ts.map +1 -0
- package/dist/config/preflight.js +22 -0
- package/dist/config/preflight.js.map +1 -0
- package/dist/constants/env.d.ts +3 -0
- package/dist/constants/env.d.ts.map +1 -1
- package/dist/constants/env.js +3 -0
- package/dist/constants/env.js.map +1 -1
- package/dist/constants/preflight.d.ts +7 -0
- package/dist/constants/preflight.d.ts.map +1 -1
- package/dist/constants/preflight.js +7 -0
- package/dist/constants/preflight.js.map +1 -1
- package/dist/constants/timing.d.ts +2 -0
- package/dist/constants/timing.d.ts.map +1 -1
- package/dist/constants/timing.js +2 -0
- package/dist/constants/timing.js.map +1 -1
- package/dist/pi-extension.d.ts.map +1 -1
- package/dist/pi-extension.js +21 -2
- package/dist/pi-extension.js.map +1 -1
- package/dist/preflight/episodic.d.ts +7 -1
- package/dist/preflight/episodic.d.ts.map +1 -1
- package/dist/preflight/episodic.js +20 -4
- package/dist/preflight/episodic.js.map +1 -1
- package/dist/preflight/intentCache.d.ts +13 -0
- package/dist/preflight/intentCache.d.ts.map +1 -0
- package/dist/preflight/intentCache.js +37 -0
- package/dist/preflight/intentCache.js.map +1 -0
- package/dist/preflight/queryIntent.d.ts +14 -5
- package/dist/preflight/queryIntent.d.ts.map +1 -1
- package/dist/preflight/queryIntent.js +27 -11
- package/dist/preflight/queryIntent.js.map +1 -1
- package/dist/sidecar/warmup.d.ts +6 -0
- package/dist/sidecar/warmup.d.ts.map +1 -0
- package/dist/sidecar/warmup.js +39 -0
- package/dist/sidecar/warmup.js.map +1 -0
- package/doc/README-zh.md +394 -0
- package/doc/ROADMAP-zh.md +52 -0
- package/doc/ROADMAP.md +52 -0
- package/package.json +5 -1
- package/src/config/index.ts +1 -0
- package/src/config/preflight.ts +34 -0
- package/src/constants/env.ts +3 -0
- package/src/constants/preflight.ts +9 -0
- package/src/constants/timing.ts +2 -0
- package/src/pi-extension.ts +22 -2
- package/src/preflight/episodic.ts +28 -4
- package/src/preflight/intentCache.ts +44 -0
- package/src/preflight/queryIntent.ts +46 -12
- package/src/sidecar/warmup.ts +50 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/constants/timing.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,OAAO,CAAC;AAErD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAEpD,kDAAkD;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,2BAA2B,CAAC;AAExE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,qDAAqD;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,uDAAuD;AACvD,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAAC;AAErD,sEAAsE;AACtE,MAAM,CAAC,MAAM,qCAAqC,GAAG,UAAU,CAAC;AAEhE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC,iCAAiC;AACjC,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAClD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,mCAAmC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/constants/timing.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,OAAO,CAAC;AAErD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAEpD,kDAAkD;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,2BAA2B,CAAC;AAExE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,qDAAqD;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,uDAAuD;AACvD,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAAC;AAErD,sEAAsE;AACtE,MAAM,CAAC,MAAM,qCAAqC,GAAG,UAAU,CAAC;AAEhE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC,iCAAiC;AACjC,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAClD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,mCAAmC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,oFAAoF;AACpF,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAEnD,oCAAoC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-extension.d.ts","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"pi-extension.d.ts","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AA0HtF,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwKhE;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/pi-extension.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import findLastIndex from "lodash/findLastIndex.js";
|
|
2
2
|
import { createLlmClient } from "./adapters/llm/index.js";
|
|
3
3
|
import { loadEnv, readPiMemoryEnv, resolveMemoryAgentDir } from "./config/index.js";
|
|
4
|
+
import { readPreflightRuntimeConfig } from "./config/preflight.js";
|
|
4
5
|
import { createConsolidateScheduler, startConsolidateInterval } from "./consolidate/scheduler.js";
|
|
5
6
|
import { registerCommands } from "./commands/index.js";
|
|
6
7
|
import { registerCompactHandlers } from "./compact/register.js";
|
|
7
8
|
import { runEpisodicPreflight } from "./preflight/episodic.js";
|
|
9
|
+
import { queryIntentCache } from "./preflight/intentCache.js";
|
|
8
10
|
import { mergePrivateMemoryBlocks, renderMemoryCapPrivateMemory } from "./preflight/render.js";
|
|
9
11
|
import { isSubagentSession } from "./preflight/session.js";
|
|
10
12
|
import { injectPrivateMemoryContext } from "./preflight/strip.js";
|
|
@@ -12,6 +14,7 @@ import { enqueueShutdownMetadata, readParentSession } from "./shutdown/enqueue.j
|
|
|
12
14
|
import { resolveSidecarPaths } from "./sidecar/paths.js";
|
|
13
15
|
import { formatTimestamp } from "./utils/time.js";
|
|
14
16
|
import { createReindexScheduler } from "./sidecar/reindexBridge.js";
|
|
17
|
+
import { warmSidecar } from "./sidecar/warmup.js";
|
|
15
18
|
import { ensureSidecarRunning, stopSidecar } from "./sidecar/sidecarManager.js";
|
|
16
19
|
import { MemoryStore } from "./store/memoryStore.js";
|
|
17
20
|
loadEnv();
|
|
@@ -25,6 +28,7 @@ let sessionMemoryCap = null;
|
|
|
25
28
|
let turnPreflight = null;
|
|
26
29
|
let isFirstTurn = false;
|
|
27
30
|
let isSubagent = false;
|
|
31
|
+
let sessionId = null;
|
|
28
32
|
function getUserMessageText(message) {
|
|
29
33
|
if (message.role !== "user")
|
|
30
34
|
return null;
|
|
@@ -57,6 +61,14 @@ async function bootstrapSidecar() {
|
|
|
57
61
|
socketPath: sidecarPaths.socketPath,
|
|
58
62
|
dbPath: sidecarPaths.dbPath,
|
|
59
63
|
});
|
|
64
|
+
if (readPreflightRuntimeConfig().warmSidecar) {
|
|
65
|
+
try {
|
|
66
|
+
await warmSidecar(sidecarPaths.socketPath);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// warm is best-effort
|
|
70
|
+
}
|
|
71
|
+
}
|
|
60
72
|
reindexScheduler ??= createReindexScheduler({
|
|
61
73
|
sidecar: sidecarPaths,
|
|
62
74
|
agentDir: memoryStore.agentDir,
|
|
@@ -97,6 +109,7 @@ export default function piMemoryExtension(pi) {
|
|
|
97
109
|
isSubagent = isSubagentSession(ctx);
|
|
98
110
|
isFirstTurn = true;
|
|
99
111
|
turnPreflight = null;
|
|
112
|
+
sessionId = ctx.sessionManager.getSessionFile() ?? null;
|
|
100
113
|
await refreshLlm(ctx, pi);
|
|
101
114
|
try {
|
|
102
115
|
await bootstrapSidecar();
|
|
@@ -118,6 +131,9 @@ export default function piMemoryExtension(pi) {
|
|
|
118
131
|
enqueuedAt: formatTimestamp(),
|
|
119
132
|
}).catch(() => { });
|
|
120
133
|
}
|
|
134
|
+
if (sessionId) {
|
|
135
|
+
queryIntentCache.clearSession(sessionId);
|
|
136
|
+
}
|
|
121
137
|
stopConsolidateInterval?.();
|
|
122
138
|
stopConsolidateInterval = null;
|
|
123
139
|
consolidateScheduler = null;
|
|
@@ -129,6 +145,7 @@ export default function piMemoryExtension(pi) {
|
|
|
129
145
|
turnPreflight = null;
|
|
130
146
|
isFirstTurn = false;
|
|
131
147
|
isSubagent = false;
|
|
148
|
+
sessionId = null;
|
|
132
149
|
try {
|
|
133
150
|
await stopSidecar();
|
|
134
151
|
}
|
|
@@ -166,7 +183,8 @@ export default function piMemoryExtension(pi) {
|
|
|
166
183
|
agentDir: memoryStore.agentDir,
|
|
167
184
|
store: memoryStore,
|
|
168
185
|
llm: llmClient,
|
|
169
|
-
|
|
186
|
+
forceEpisodic: forceHelper,
|
|
187
|
+
sessionId: sessionId ?? undefined,
|
|
170
188
|
budgetMs: env.preflightBudgetMs,
|
|
171
189
|
signal: ctx.signal,
|
|
172
190
|
onProgress: workingUi?.update,
|
|
@@ -208,7 +226,8 @@ export default function piMemoryExtension(pi) {
|
|
|
208
226
|
agentDir: memoryStore.agentDir,
|
|
209
227
|
store: memoryStore,
|
|
210
228
|
llm: llmClient,
|
|
211
|
-
|
|
229
|
+
forceEpisodic: userTurnCount === 1,
|
|
230
|
+
sessionId: sessionId ?? undefined,
|
|
212
231
|
budgetMs: env.preflightBudgetMs,
|
|
213
232
|
signal: ctx.signal,
|
|
214
233
|
});
|
package/dist/pi-extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-extension.js","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAkB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAA6B,MAAM,4BAA4B,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAyB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,CAAC;AAOV,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,IAAI,YAAY,GAAkD,IAAI,CAAC;AACvE,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AACrD,IAAI,oBAAoB,GAAgC,IAAI,CAAC;AAC7D,IAAI,uBAAuB,GAAwB,IAAI,CAAC;AACxD,IAAI,SAAS,GAAqB,IAAI,CAAC;AACvC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAC3C,IAAI,aAAa,GAAyB,IAAI,CAAC;AAC/C,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,IAAI,UAAU,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"pi-extension.js","sourceRoot":"","sources":["../src/pi-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,13 @@ export type EpisodicPreflightOptions = {
|
|
|
5
5
|
agentDir: string;
|
|
6
6
|
store: MemoryStore;
|
|
7
7
|
llm?: LlmClient | null;
|
|
8
|
+
/** Force episodic gate (first turn); does not force helper LLM. */
|
|
9
|
+
forceEpisodic?: boolean;
|
|
10
|
+
/** Force helper LLM intent extraction. */
|
|
11
|
+
forceIntent?: boolean;
|
|
12
|
+
/** @deprecated Use forceEpisodic */
|
|
8
13
|
force?: boolean;
|
|
14
|
+
sessionId?: string;
|
|
9
15
|
budgetMs?: number;
|
|
10
16
|
signal?: AbortSignal;
|
|
11
17
|
onProgress?: (message: string) => void;
|
|
@@ -14,7 +20,7 @@ export type EpisodicPreflightResult = {
|
|
|
14
20
|
privateContext: string;
|
|
15
21
|
};
|
|
16
22
|
/**
|
|
17
|
-
* Fail-silent episodic preflight: QueryIntent (
|
|
23
|
+
* Fail-silent episodic preflight: QueryIntent (optional) → buildRetrievalQuery → sidecar.query → fallback.
|
|
18
24
|
*/
|
|
19
25
|
export declare function runEpisodicPreflight(userInput: string, options: EpisodicPreflightOptions): Promise<EpisodicPreflightResult | null>;
|
|
20
26
|
//# sourceMappingURL=episodic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"episodic.d.ts","sourceRoot":"","sources":["../../src/preflight/episodic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"episodic.d.ts","sourceRoot":"","sources":["../../src/preflight/episodic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAa3D,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,mEAAmE;IACnE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAsCF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAqGzC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readPreflightRuntimeConfig } from "../config/preflight.js";
|
|
1
2
|
import { resolvePreflightBudget } from "../config/preflightBudget.js";
|
|
2
3
|
import { debugMemory } from "../utils/debugLog.js";
|
|
3
4
|
import { nowMs, remainingMs } from "../utils/time.js";
|
|
@@ -31,12 +32,18 @@ async function withTimeout(promise, timeoutMs, signal) {
|
|
|
31
32
|
});
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
|
-
* Fail-silent episodic preflight: QueryIntent (
|
|
35
|
+
* Fail-silent episodic preflight: QueryIntent (optional) → buildRetrievalQuery → sidecar.query → fallback.
|
|
35
36
|
*/
|
|
36
37
|
export async function runEpisodicPreflight(userInput, options) {
|
|
37
38
|
const startedAt = nowMs();
|
|
39
|
+
const forceEpisodic = options.forceEpisodic ?? options.force ?? false;
|
|
40
|
+
const runtime = readPreflightRuntimeConfig();
|
|
38
41
|
try {
|
|
39
|
-
if (
|
|
42
|
+
if (await options.store.isEmpty()) {
|
|
43
|
+
debugMemory("preflight", "skipped", { reason: "empty" });
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
if (!shouldRunEpisodicPreflight(userInput, forceEpisodic)) {
|
|
40
47
|
debugMemory("preflight", "skipped", { reason: "gate" });
|
|
41
48
|
return null;
|
|
42
49
|
}
|
|
@@ -46,11 +53,18 @@ export async function runEpisodicPreflight(userInput, options) {
|
|
|
46
53
|
const intentStartedAt = nowMs();
|
|
47
54
|
const intentBudget = Math.min(budget.intentMs, remainingMs(deadline));
|
|
48
55
|
let intent;
|
|
56
|
+
let intentSkipped = false;
|
|
57
|
+
let intentCacheHit = false;
|
|
49
58
|
try {
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
const extracted = await withTimeout(extractQueryIntent(userInput, options.llm ?? null, {
|
|
60
|
+
forceIntent: options.forceIntent,
|
|
52
61
|
signal: options.signal,
|
|
62
|
+
sessionId: options.sessionId,
|
|
63
|
+
intentCache: runtime.intentCache,
|
|
53
64
|
}), intentBudget, options.signal);
|
|
65
|
+
intent = extracted.intent;
|
|
66
|
+
intentSkipped = extracted.skipped;
|
|
67
|
+
intentCacheHit = extracted.cacheHit;
|
|
54
68
|
}
|
|
55
69
|
catch {
|
|
56
70
|
intent = { raw_query: userInput.trim() };
|
|
@@ -91,6 +105,8 @@ export async function runEpisodicPreflight(userInput, options) {
|
|
|
91
105
|
}
|
|
92
106
|
debugMemory("preflight", "recall", {
|
|
93
107
|
intent_ms: intentMs,
|
|
108
|
+
intent_skipped: intentSkipped,
|
|
109
|
+
intent_cache_hit: intentCacheHit,
|
|
94
110
|
sidecar_ms: sidecarMs,
|
|
95
111
|
total_ms: nowMs() - startedAt,
|
|
96
112
|
cache_hit: cacheHit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"episodic.js","sourceRoot":"","sources":["../../src/preflight/episodic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"episodic.js","sourceRoot":"","sources":["../../src/preflight/episodic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { QueryIntent } from "./queryIntent.js";
|
|
2
|
+
declare class QueryIntentCache {
|
|
3
|
+
private readonly lru;
|
|
4
|
+
get(sessionId: string | undefined, userInput: string): QueryIntent | null;
|
|
5
|
+
set(sessionId: string | undefined, userInput: string, intent: QueryIntent): void;
|
|
6
|
+
clearSession(sessionId: string): void;
|
|
7
|
+
/** @internal test hook */
|
|
8
|
+
resetForTests(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare const queryIntentCache: QueryIntentCache;
|
|
11
|
+
export declare function resetQueryIntentCacheForTests(): void;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=intentCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intentCache.d.ts","sourceRoot":"","sources":["../../src/preflight/intentCache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAUpD,cAAM,gBAAgB;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwE;IAE5F,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAKzE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAKhF,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOrC,0BAA0B;IAC1B,aAAa,IAAI,IAAI;CAGtB;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAEvD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { LRUCache } from "lru-cache";
|
|
2
|
+
import { INTENT_CACHE_MAX_ENTRIES } from "../constants/preflight.js";
|
|
3
|
+
function normalizeInput(input) {
|
|
4
|
+
return input.trim().replace(/\s+/g, " ").toLowerCase();
|
|
5
|
+
}
|
|
6
|
+
function cacheKey(sessionId, userInput) {
|
|
7
|
+
return `${sessionId}\0${normalizeInput(userInput)}`;
|
|
8
|
+
}
|
|
9
|
+
class QueryIntentCache {
|
|
10
|
+
lru = new LRUCache({ max: INTENT_CACHE_MAX_ENTRIES });
|
|
11
|
+
get(sessionId, userInput) {
|
|
12
|
+
if (!sessionId)
|
|
13
|
+
return null;
|
|
14
|
+
return this.lru.get(cacheKey(sessionId, userInput)) ?? null;
|
|
15
|
+
}
|
|
16
|
+
set(sessionId, userInput, intent) {
|
|
17
|
+
if (!sessionId)
|
|
18
|
+
return;
|
|
19
|
+
this.lru.set(cacheKey(sessionId, userInput), intent);
|
|
20
|
+
}
|
|
21
|
+
clearSession(sessionId) {
|
|
22
|
+
const prefix = `${sessionId}\0`;
|
|
23
|
+
for (const key of this.lru.keys()) {
|
|
24
|
+
if (key.startsWith(prefix))
|
|
25
|
+
this.lru.delete(key);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** @internal test hook */
|
|
29
|
+
resetForTests() {
|
|
30
|
+
this.lru.clear();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export const queryIntentCache = new QueryIntentCache();
|
|
34
|
+
export function resetQueryIntentCacheForTests() {
|
|
35
|
+
queryIntentCache.resetForTests();
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=intentCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intentCache.js","sourceRoot":"","sources":["../../src/preflight/intentCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB,EAAE,SAAiB;IACpD,OAAO,GAAG,SAAS,KAAK,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,gBAAgB;IACH,GAAG,GAAG,IAAI,QAAQ,CAAsB,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAE5F,GAAG,CAAC,SAA6B,EAAE,SAAiB;QAClD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC;IAC9D,CAAC;IAED,GAAG,CAAC,SAA6B,EAAE,SAAiB,EAAE,MAAmB;QACvE,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,aAAa;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEvD,MAAM,UAAU,6BAA6B;IAC3C,gBAAgB,CAAC,aAAa,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -9,12 +9,21 @@ export declare const QueryIntentSchema: Type.TObject<{
|
|
|
9
9
|
}>;
|
|
10
10
|
export type QueryIntent = Static<typeof QueryIntentSchema>;
|
|
11
11
|
export declare function parseQueryIntent(value: unknown): QueryIntent;
|
|
12
|
-
export declare function shouldRunEpisodicPreflight(query: string,
|
|
13
|
-
export declare function shouldExtractIntent(query: string,
|
|
12
|
+
export declare function shouldRunEpisodicPreflight(query: string, forceEpisodic?: boolean): boolean;
|
|
13
|
+
export declare function shouldExtractIntent(query: string, forceIntent?: boolean): boolean;
|
|
14
14
|
/** Pure function: concatenate intent fields into a sidecar query string. */
|
|
15
15
|
export declare function buildRetrievalQuery(intent: QueryIntent, userInput: string): string;
|
|
16
|
-
export
|
|
17
|
-
|
|
16
|
+
export type ExtractQueryIntentOptions = {
|
|
17
|
+
forceIntent?: boolean;
|
|
18
18
|
signal?: AbortSignal;
|
|
19
|
-
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
intentCache?: boolean;
|
|
21
|
+
intentRetries?: number;
|
|
22
|
+
};
|
|
23
|
+
export type ExtractQueryIntentResult = {
|
|
24
|
+
intent: QueryIntent;
|
|
25
|
+
skipped: boolean;
|
|
26
|
+
cacheHit: boolean;
|
|
27
|
+
};
|
|
28
|
+
export declare function extractQueryIntent(userInput: string, llm: LlmClient | null, options?: ExtractQueryIntentOptions): Promise<ExtractQueryIntentResult>;
|
|
20
29
|
//# sourceMappingURL=queryIntent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryIntent.d.ts","sourceRoot":"","sources":["../../src/preflight/queryIntent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"queryIntent.d.ts","sourceRoot":"","sources":["../../src/preflight/queryIntent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAU5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,yFAAyF;AACzF,eAAO,MAAM,iBAAiB;;;;;EAQ7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAK5D;AAQD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,OAAO,CAOxF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,OAAO,CAI/E;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOlF;AAWD,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,SAAS,GAAG,IAAI,EACrB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAiCnC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import compact from "lodash/compact.js";
|
|
2
2
|
import { Type } from "typebox";
|
|
3
3
|
import { Value } from "typebox/value";
|
|
4
|
-
import {
|
|
4
|
+
import { readPreflightRuntimeConfig } from "../config/preflight.js";
|
|
5
|
+
import { DEFAULT_INTENT_RETRIES, MEMORY_CUE_RE, PREFLIGHT_EXTRACT_MIN_LENGTH, PREFLIGHT_SKIP_MIN_LENGTH, } from "../constants/preflight.js";
|
|
6
|
+
import { queryIntentCache } from "./intentCache.js";
|
|
5
7
|
/** Structured intent from helper LLM — simpler than crafting a search query directly. */
|
|
6
8
|
export const QueryIntentSchema = Type.Object({
|
|
7
9
|
raw_query: Type.Optional(Type.String()),
|
|
@@ -20,11 +22,11 @@ Return ONLY valid JSON with optional keys: raw_query, what, who, where.
|
|
|
20
22
|
Use raw_query when the whole message should be searched verbatim.
|
|
21
23
|
User message:
|
|
22
24
|
`;
|
|
23
|
-
export function shouldRunEpisodicPreflight(query,
|
|
25
|
+
export function shouldRunEpisodicPreflight(query, forceEpisodic = false) {
|
|
24
26
|
const trimmed = query.trim();
|
|
25
27
|
if (!trimmed)
|
|
26
28
|
return false;
|
|
27
|
-
if (
|
|
29
|
+
if (forceEpisodic)
|
|
28
30
|
return true;
|
|
29
31
|
if (trimmed.startsWith("/"))
|
|
30
32
|
return false;
|
|
@@ -32,8 +34,8 @@ export function shouldRunEpisodicPreflight(query, force = false) {
|
|
|
32
34
|
return false;
|
|
33
35
|
return MEMORY_CUE_RE.test(trimmed) || trimmed.length >= PREFLIGHT_EXTRACT_MIN_LENGTH;
|
|
34
36
|
}
|
|
35
|
-
export function shouldExtractIntent(query,
|
|
36
|
-
if (
|
|
37
|
+
export function shouldExtractIntent(query, forceIntent = false) {
|
|
38
|
+
if (forceIntent)
|
|
37
39
|
return true;
|
|
38
40
|
if (query.trim().length >= PREFLIGHT_EXTRACT_MIN_LENGTH)
|
|
39
41
|
return true;
|
|
@@ -58,18 +60,32 @@ function extractJsonObject(text) {
|
|
|
58
60
|
}
|
|
59
61
|
export async function extractQueryIntent(userInput, llm, options = {}) {
|
|
60
62
|
const fallback = { raw_query: userInput.trim() };
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
const runtime = readPreflightRuntimeConfig();
|
|
64
|
+
const useCache = options.intentCache ?? runtime.intentCache;
|
|
65
|
+
if (useCache && options.sessionId) {
|
|
66
|
+
const cached = queryIntentCache.get(options.sessionId, userInput);
|
|
67
|
+
if (cached) {
|
|
68
|
+
return { intent: cached, skipped: false, cacheHit: true };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!llm || !shouldExtractIntent(userInput, options.forceIntent)) {
|
|
72
|
+
return { intent: fallback, skipped: true, cacheHit: false };
|
|
63
73
|
}
|
|
64
|
-
|
|
74
|
+
const retries = options.intentRetries ?? runtime.intentRetries ?? DEFAULT_INTENT_RETRIES;
|
|
75
|
+
const maxAttempts = Math.max(1, retries + 1);
|
|
76
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
65
77
|
try {
|
|
66
78
|
const raw = await llm.complete(`${INTENT_PROMPT}${userInput}`, options.signal);
|
|
67
|
-
|
|
79
|
+
const intent = parseQueryIntent(extractJsonObject(raw));
|
|
80
|
+
if (useCache && options.sessionId) {
|
|
81
|
+
queryIntentCache.set(options.sessionId, userInput, intent);
|
|
82
|
+
}
|
|
83
|
+
return { intent, skipped: false, cacheHit: false };
|
|
68
84
|
}
|
|
69
85
|
catch {
|
|
70
|
-
//
|
|
86
|
+
// retry or fallback
|
|
71
87
|
}
|
|
72
88
|
}
|
|
73
|
-
return fallback;
|
|
89
|
+
return { intent: fallback, skipped: false, cacheHit: false };
|
|
74
90
|
}
|
|
75
91
|
//# sourceMappingURL=queryIntent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryIntent.js","sourceRoot":"","sources":["../../src/preflight/queryIntent.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"queryIntent.js","sourceRoot":"","sources":["../../src/preflight/queryIntent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type WarmSidecarOptions = {
|
|
2
|
+
queryTimeoutMs?: number;
|
|
3
|
+
};
|
|
4
|
+
/** Pre-open sidecar DB and optionally smoke-test embed + vec paths. Fail-silent. */
|
|
5
|
+
export declare function warmSidecar(socketPath: string, options?: WarmSidecarOptions): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=warmup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warmup.d.ts","sourceRoot":"","sources":["../../src/sidecar/warmup.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,oFAAoF;AACpF,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAoCf"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { fetchIndexStats, ping, query } from "./client.js";
|
|
2
|
+
import { SIDECAR_WARMUP_QUERY_TIMEOUT_MS } from "../constants/timing.js";
|
|
3
|
+
import { debugMemory } from "../utils/debugLog.js";
|
|
4
|
+
import { nowMs } from "../utils/time.js";
|
|
5
|
+
/** Pre-open sidecar DB and optionally smoke-test embed + vec paths. Fail-silent. */
|
|
6
|
+
export async function warmSidecar(socketPath, options = {}) {
|
|
7
|
+
const startedAt = nowMs();
|
|
8
|
+
if (!(await ping(socketPath))) {
|
|
9
|
+
debugMemory("sidecar", "warm", { ok: false, reason: "ping" });
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const statsStartedAt = nowMs();
|
|
13
|
+
const statsResult = await fetchIndexStats(socketPath);
|
|
14
|
+
const statsMs = nowMs() - statsStartedAt;
|
|
15
|
+
if ("error" in statsResult) {
|
|
16
|
+
debugMemory("sidecar", "warm", { ok: false, stats_ms: statsMs, reason: "stats" });
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
let queryMs = 0;
|
|
20
|
+
if (statsResult.stats.chunk_count > 0) {
|
|
21
|
+
const queryStartedAt = nowMs();
|
|
22
|
+
const queryTimeoutMs = options.queryTimeoutMs ?? SIDECAR_WARMUP_QUERY_TIMEOUT_MS;
|
|
23
|
+
try {
|
|
24
|
+
await query(socketPath, ".", queryTimeoutMs);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// warm query is best-effort
|
|
28
|
+
}
|
|
29
|
+
queryMs = nowMs() - queryStartedAt;
|
|
30
|
+
}
|
|
31
|
+
debugMemory("sidecar", "warm", {
|
|
32
|
+
ok: true,
|
|
33
|
+
stats_ms: statsMs,
|
|
34
|
+
query_ms: queryMs,
|
|
35
|
+
chunks: statsResult.stats.chunk_count,
|
|
36
|
+
total_ms: nowMs() - startedAt,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=warmup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warmup.js","sourceRoot":"","sources":["../../src/sidecar/warmup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAMzC,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,UAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAE1B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,EAAE,GAAG,cAAc,CAAC;IAEzC,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,KAAK,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,+BAA+B,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QACD,OAAO,GAAG,KAAK,EAAE,GAAG,cAAc,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE;QAC7B,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW;QACrC,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS;KAC9B,CAAC,CAAC;AACL,CAAC"}
|