visionclaw 0.1.129 → 0.1.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/agent/client-factory.js +1 -1
- package/dist/agent/image-archive.d.ts +66 -0
- package/dist/agent/image-archive.d.ts.map +1 -0
- package/dist/agent/image-archive.js +278 -0
- package/dist/agent/image-archive.js.map +1 -0
- package/dist/agent/image-pruner.d.ts.map +1 -1
- package/dist/agent/image-pruner.js +30 -6
- package/dist/agent/image-pruner.js.map +1 -1
- package/dist/agent/openai-file-session.js +1 -1
- package/dist/agent/openai-session.js +1 -1
- package/dist/agent/openai-tools.js +1 -1
- package/dist/agent/providers/claude/session.d.ts.map +1 -1
- package/dist/agent/providers/claude/session.js.map +1 -1
- package/dist/agent/session.js +1 -1
- package/dist/channels/slack.js +1 -1
- package/dist/channels/sms.js +1 -1
- package/dist/channels/whatsapp.js +1 -1
- package/dist/config/types.d.ts +14 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +13 -0
- package/dist/config/types.js.map +1 -1
- package/dist/data-processing/index.d.ts +6 -0
- package/dist/data-processing/index.d.ts.map +1 -0
- package/dist/data-processing/index.js +6 -0
- package/dist/data-processing/index.js.map +1 -0
- package/dist/data-processing/loader.d.ts +7 -0
- package/dist/data-processing/loader.d.ts.map +1 -0
- package/dist/data-processing/loader.js +55 -0
- package/dist/data-processing/loader.js.map +1 -0
- package/dist/data-processing/record-builder.d.ts +7 -0
- package/dist/data-processing/record-builder.d.ts.map +1 -0
- package/dist/data-processing/record-builder.js +176 -0
- package/dist/data-processing/record-builder.js.map +1 -0
- package/dist/data-processing/restructure.d.ts +11 -0
- package/dist/data-processing/restructure.d.ts.map +1 -0
- package/dist/data-processing/restructure.js +276 -0
- package/dist/data-processing/restructure.js.map +1 -0
- package/dist/data-processing/sanitize.d.ts +12 -0
- package/dist/data-processing/sanitize.d.ts.map +1 -0
- package/dist/data-processing/sanitize.js +229 -0
- package/dist/data-processing/sanitize.js.map +1 -0
- package/dist/data-processing/sdk-transcript.d.ts +13 -0
- package/dist/data-processing/sdk-transcript.d.ts.map +1 -0
- package/dist/data-processing/sdk-transcript.js +370 -0
- package/dist/data-processing/sdk-transcript.js.map +1 -0
- package/dist/data-processing/segmenter.d.ts +14 -0
- package/dist/data-processing/segmenter.d.ts.map +1 -0
- package/dist/data-processing/segmenter.js +77 -0
- package/dist/data-processing/segmenter.js.map +1 -0
- package/dist/data-processing/types.d.ts +99 -0
- package/dist/data-processing/types.d.ts.map +1 -0
- package/dist/data-processing/types.js +40 -0
- package/dist/data-processing/types.js.map +1 -0
- package/dist/files.js +1 -1
- package/dist/google/default-oauth-app.js +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/store.js +1 -1
- package/dist/onboarding/index.d.ts.map +1 -1
- package/dist/onboarding/index.js +28 -18
- package/dist/onboarding/index.js.map +1 -1
- package/dist/onboarding/provisioning-spec.d.ts +2 -0
- package/dist/onboarding/provisioning-spec.d.ts.map +1 -1
- package/dist/onboarding/provisioning-spec.js +3 -1
- package/dist/onboarding/provisioning-spec.js.map +1 -1
- package/dist/onboarding/setup-steps.d.ts.map +1 -1
- package/dist/onboarding/setup-steps.js +5 -3
- package/dist/onboarding/setup-steps.js.map +1 -1
- package/dist/tools/browser.js +1 -1
- package/dist/tools/sleep-interval.js +1 -1
- package/dist/tools/version-check.js +1 -1
- package/dist/utils/backup-paths.js +1 -1
- package/dist-agent/bundle.cjs +9337 -9413
- package/package.json +2 -1
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK transcript loading, segmentation, prior context extraction,
|
|
3
|
+
* and cycle matching.
|
|
4
|
+
*/
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import readline from "node:readline";
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
const BASE64_PLACEHOLDER = "<base64-image>";
|
|
12
|
+
function str(val) {
|
|
13
|
+
return typeof val === "string" ? val : "";
|
|
14
|
+
}
|
|
15
|
+
function extractTextFromContent(content) {
|
|
16
|
+
if (typeof content === "string")
|
|
17
|
+
return content;
|
|
18
|
+
if (Array.isArray(content)) {
|
|
19
|
+
const parts = [];
|
|
20
|
+
for (const block of content) {
|
|
21
|
+
if (block !== null &&
|
|
22
|
+
typeof block === "object" &&
|
|
23
|
+
block.type === "text") {
|
|
24
|
+
parts.push(str(block.text));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return parts.join("\n");
|
|
28
|
+
}
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
function redactBase64(content) {
|
|
32
|
+
if (!Array.isArray(content))
|
|
33
|
+
return content;
|
|
34
|
+
const out = [];
|
|
35
|
+
for (const block of content) {
|
|
36
|
+
if (block !== null && typeof block === "object") {
|
|
37
|
+
const b = block;
|
|
38
|
+
if (b.type === "image") {
|
|
39
|
+
const source = b.source;
|
|
40
|
+
if (source?.type === "base64") {
|
|
41
|
+
out.push({
|
|
42
|
+
type: "image",
|
|
43
|
+
source: {
|
|
44
|
+
type: "base64",
|
|
45
|
+
media_type: source.media_type ?? "image/png",
|
|
46
|
+
data: BASE64_PLACEHOLDER,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (b.type === "tool_result") {
|
|
53
|
+
out.push({
|
|
54
|
+
...b,
|
|
55
|
+
content: redactBase64(b.content),
|
|
56
|
+
});
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
out.push(block);
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Load SDK transcript
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
export async function loadSdkTranscript(transcriptDir) {
|
|
68
|
+
const messages = [];
|
|
69
|
+
// Discover session directories (general/, coding/, etc.)
|
|
70
|
+
const sessionDirs = [];
|
|
71
|
+
for (const name of fs.readdirSync(transcriptDir).sort()) {
|
|
72
|
+
const subdir = path.join(transcriptDir, name);
|
|
73
|
+
if (fs.statSync(subdir).isDirectory() &&
|
|
74
|
+
(fs.existsSync(path.join(subdir, "session.jsonl")) ||
|
|
75
|
+
fs.existsSync(path.join(subdir, "session.archive.jsonl")))) {
|
|
76
|
+
sessionDirs.push(subdir);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (sessionDirs.length === 0) {
|
|
80
|
+
sessionDirs.push(transcriptDir);
|
|
81
|
+
}
|
|
82
|
+
for (const sdir of sessionDirs) {
|
|
83
|
+
const sessionName = path.basename(sdir);
|
|
84
|
+
const archive = path.join(sdir, "session.archive.jsonl");
|
|
85
|
+
const live = path.join(sdir, "session.jsonl");
|
|
86
|
+
let count = 0;
|
|
87
|
+
for (const filePath of [archive, live]) {
|
|
88
|
+
if (!fs.existsSync(filePath))
|
|
89
|
+
continue;
|
|
90
|
+
const rl = readline.createInterface({
|
|
91
|
+
input: fs.createReadStream(filePath, { encoding: "utf-8" }),
|
|
92
|
+
crlfDelay: Infinity,
|
|
93
|
+
});
|
|
94
|
+
for await (const raw of rl) {
|
|
95
|
+
const trimmed = raw.trim();
|
|
96
|
+
if (!trimmed)
|
|
97
|
+
continue;
|
|
98
|
+
try {
|
|
99
|
+
messages.push(JSON.parse(trimmed));
|
|
100
|
+
count++;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Skip malformed lines
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log(` SDK transcript [${sessionName}]: ${count} messages`);
|
|
108
|
+
}
|
|
109
|
+
messages.sort((a, b) => (a.timestamp ?? "").localeCompare(b.timestamp ?? ""));
|
|
110
|
+
console.log(` SDK transcript total: ${messages.length} messages`);
|
|
111
|
+
return messages;
|
|
112
|
+
}
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Segment SDK messages into wake cycles
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
export function segmentSdkWakeCycles(messages) {
|
|
117
|
+
// First pass: find all wake-event indices and compact_boundary indices
|
|
118
|
+
const wakeIndices = [];
|
|
119
|
+
const boundaryIndices = [];
|
|
120
|
+
for (let i = 0; i < messages.length; i++) {
|
|
121
|
+
const msg = messages[i];
|
|
122
|
+
if (msg.type === "system" && msg.subtype === "compact_boundary") {
|
|
123
|
+
boundaryIndices.push(i);
|
|
124
|
+
}
|
|
125
|
+
else if (msg.type === "user") {
|
|
126
|
+
const text = extractTextFromContent(msg.message?.content);
|
|
127
|
+
if (text.includes("[Wake Event]")) {
|
|
128
|
+
wakeIndices.push(i);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Second pass: build cycles with prior context
|
|
133
|
+
const cycles = [];
|
|
134
|
+
for (let ci = 0; ci < wakeIndices.length; ci++) {
|
|
135
|
+
const wi = wakeIndices[ci];
|
|
136
|
+
const nextWi = ci + 1 < wakeIndices.length ? wakeIndices[ci + 1] : messages.length;
|
|
137
|
+
const cycleMessages = messages.slice(wi, nextWi);
|
|
138
|
+
// Prior context: from most recent compact_boundary to this wake event.
|
|
139
|
+
// For early cycles before any compaction, include all messages from start.
|
|
140
|
+
let prior = [];
|
|
141
|
+
const bp = bisectRight(boundaryIndices, wi);
|
|
142
|
+
if (bp > 0) {
|
|
143
|
+
const lastBoundary = boundaryIndices[bp - 1];
|
|
144
|
+
prior = messages.slice(lastBoundary, wi);
|
|
145
|
+
}
|
|
146
|
+
else if (wi > 0) {
|
|
147
|
+
prior = messages.slice(0, wi);
|
|
148
|
+
}
|
|
149
|
+
cycles.push({
|
|
150
|
+
wakeTimestamp: messages[wi].timestamp ?? "",
|
|
151
|
+
messages: cycleMessages,
|
|
152
|
+
priorContext: prior,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return cycles;
|
|
156
|
+
}
|
|
157
|
+
function bisectRight(arr, target) {
|
|
158
|
+
let lo = 0;
|
|
159
|
+
let hi = arr.length;
|
|
160
|
+
while (lo < hi) {
|
|
161
|
+
const mid = (lo + hi) >>> 1;
|
|
162
|
+
if (arr[mid] <= target)
|
|
163
|
+
lo = mid + 1;
|
|
164
|
+
else
|
|
165
|
+
hi = mid;
|
|
166
|
+
}
|
|
167
|
+
return lo;
|
|
168
|
+
}
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// Build prior context
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
export function buildPriorContext(sdkCycle) {
|
|
173
|
+
if (sdkCycle.priorContext.length === 0)
|
|
174
|
+
return null;
|
|
175
|
+
const hasCompactBoundary = sdkCycle.priorContext.some((m) => m.type === "system" && m.subtype === "compact_boundary");
|
|
176
|
+
let compactionSummary = null;
|
|
177
|
+
const messagesToConvert = [];
|
|
178
|
+
for (const msg of sdkCycle.priorContext) {
|
|
179
|
+
if (msg.type === "system" && msg.subtype === "compact_boundary")
|
|
180
|
+
continue;
|
|
181
|
+
if (msg.type === "queue-operation" || msg.type === "progress")
|
|
182
|
+
continue;
|
|
183
|
+
if (msg.type === "user" &&
|
|
184
|
+
compactionSummary === null &&
|
|
185
|
+
messagesToConvert.length === 0) {
|
|
186
|
+
const text = extractTextFromContent(msg.message?.content);
|
|
187
|
+
if (text.includes("continued from a previous conversation")) {
|
|
188
|
+
compactionSummary = text;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
messagesToConvert.push(msg);
|
|
193
|
+
}
|
|
194
|
+
const priorMessages = convertSdkMessages(messagesToConvert);
|
|
195
|
+
if (compactionSummary === null && priorMessages.length === 0) {
|
|
196
|
+
if (hasCompactBoundary) {
|
|
197
|
+
return {
|
|
198
|
+
compaction_summary: null,
|
|
199
|
+
compacted_fresh_start: true,
|
|
200
|
+
prior_messages_count: 0,
|
|
201
|
+
prior_messages: [],
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
compaction_summary: compactionSummary,
|
|
208
|
+
prior_messages_count: priorMessages.length,
|
|
209
|
+
prior_messages: priorMessages,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
// Convert raw SDK messages to clean trajectory entries
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
export function convertSdkMessages(messages) {
|
|
216
|
+
const entries = [];
|
|
217
|
+
for (const msg of messages) {
|
|
218
|
+
const mtype = msg.type ?? "";
|
|
219
|
+
const ts = msg.timestamp ?? "";
|
|
220
|
+
if (mtype === "user") {
|
|
221
|
+
const content = msg.message?.content;
|
|
222
|
+
if (typeof content === "string") {
|
|
223
|
+
if (content.includes("[Wake Event]")) {
|
|
224
|
+
entries.push({ role: "context", content, timestamp: ts });
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
entries.push({ role: "user_message", content, timestamp: ts });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (Array.isArray(content)) {
|
|
231
|
+
const hasWake = content.some((block) => block !== null &&
|
|
232
|
+
typeof block === "object" &&
|
|
233
|
+
block.type === "text" &&
|
|
234
|
+
str(block.text).includes("[Wake Event]"));
|
|
235
|
+
if (hasWake) {
|
|
236
|
+
const redacted = redactBase64(content);
|
|
237
|
+
const textParts = redacted
|
|
238
|
+
.filter((b) => b.type === "text")
|
|
239
|
+
.map((b) => str(b.text));
|
|
240
|
+
const hasImage = content.some((b) => b !== null &&
|
|
241
|
+
typeof b === "object" &&
|
|
242
|
+
b.type === "image");
|
|
243
|
+
let ctxText = textParts.join("\n");
|
|
244
|
+
if (hasImage)
|
|
245
|
+
ctxText += " [+image:base64]";
|
|
246
|
+
entries.push({ role: "context", content: ctxText, timestamp: ts });
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
for (const block of content) {
|
|
250
|
+
if (block !== null &&
|
|
251
|
+
typeof block === "object" &&
|
|
252
|
+
block.type === "tool_result") {
|
|
253
|
+
const b = block;
|
|
254
|
+
let resultContent = b.content;
|
|
255
|
+
if (Array.isArray(resultContent)) {
|
|
256
|
+
resultContent = redactBase64(resultContent);
|
|
257
|
+
}
|
|
258
|
+
const resultText = typeof resultContent === "string"
|
|
259
|
+
? resultContent
|
|
260
|
+
: JSON.stringify(resultContent);
|
|
261
|
+
entries.push({
|
|
262
|
+
role: "tool_result",
|
|
263
|
+
content: resultText,
|
|
264
|
+
timestamp: ts,
|
|
265
|
+
metadata: {
|
|
266
|
+
tool_use_id: str(b.tool_use_id),
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
else if (mtype === "assistant") {
|
|
275
|
+
const contentBlocks = msg.message?.content;
|
|
276
|
+
if (!Array.isArray(contentBlocks))
|
|
277
|
+
continue;
|
|
278
|
+
for (const block of contentBlocks) {
|
|
279
|
+
if (block === null || typeof block !== "object")
|
|
280
|
+
continue;
|
|
281
|
+
const b = block;
|
|
282
|
+
const btype = b.type;
|
|
283
|
+
if (btype === "thinking") {
|
|
284
|
+
entries.push({
|
|
285
|
+
role: "thinking",
|
|
286
|
+
content: str(b.thinking),
|
|
287
|
+
timestamp: ts,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
else if (btype === "text") {
|
|
291
|
+
entries.push({
|
|
292
|
+
role: "assistant",
|
|
293
|
+
content: str(b.text),
|
|
294
|
+
timestamp: ts,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
else if (btype === "tool_use") {
|
|
298
|
+
entries.push({
|
|
299
|
+
role: "tool_call",
|
|
300
|
+
content: str(b.name),
|
|
301
|
+
timestamp: ts,
|
|
302
|
+
metadata: {
|
|
303
|
+
name: str(b.name),
|
|
304
|
+
input: b.input ?? {},
|
|
305
|
+
tool_use_id: str(b.id),
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return entries;
|
|
313
|
+
}
|
|
314
|
+
export function buildSdkTrajectory(sdkCycle) {
|
|
315
|
+
return convertSdkMessages(sdkCycle.messages);
|
|
316
|
+
}
|
|
317
|
+
// ---------------------------------------------------------------------------
|
|
318
|
+
// Index and match SDK cycles to VisionClaw log cycles
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
export function buildSdkCycleIndex(sdkCycles) {
|
|
321
|
+
const index = new Map();
|
|
322
|
+
for (const sc of sdkCycles) {
|
|
323
|
+
index.set(sc.wakeTimestamp, sc);
|
|
324
|
+
}
|
|
325
|
+
return index;
|
|
326
|
+
}
|
|
327
|
+
function localToUtcApprox(localTs) {
|
|
328
|
+
try {
|
|
329
|
+
const dt = new Date(localTs);
|
|
330
|
+
if (isNaN(dt.getTime()))
|
|
331
|
+
return "";
|
|
332
|
+
const iso = dt.toISOString(); // Already UTC
|
|
333
|
+
// Format as YYYY-MM-DDTHH:MM:SS.mmmZ
|
|
334
|
+
return iso.replace(/(\.\d{3})\d*Z$/, "$1Z");
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
return "";
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
export function matchSdkCycle(cycle, sdkIndex, sdkCycles) {
|
|
341
|
+
const sendEntry = cycle.entries.find((e) => e.category === "send");
|
|
342
|
+
if (!sendEntry)
|
|
343
|
+
return undefined;
|
|
344
|
+
const localTs = sendEntry.timestamp;
|
|
345
|
+
const utcTs = localToUtcApprox(localTs);
|
|
346
|
+
if (!utcTs)
|
|
347
|
+
return undefined;
|
|
348
|
+
// Exact match
|
|
349
|
+
const exact = sdkIndex.get(utcTs);
|
|
350
|
+
if (exact)
|
|
351
|
+
return exact;
|
|
352
|
+
// Fuzzy match: find closest within 5 seconds
|
|
353
|
+
const targetMs = new Date(localTs).getTime();
|
|
354
|
+
if (isNaN(targetMs))
|
|
355
|
+
return undefined;
|
|
356
|
+
let best;
|
|
357
|
+
let bestDelta = 5000;
|
|
358
|
+
for (const sc of sdkCycles) {
|
|
359
|
+
const scMs = new Date(sc.wakeTimestamp.replace("Z", "+00:00")).getTime();
|
|
360
|
+
if (isNaN(scMs))
|
|
361
|
+
continue;
|
|
362
|
+
const delta = Math.abs(scMs - targetMs);
|
|
363
|
+
if (delta < bestDelta) {
|
|
364
|
+
bestDelta = delta;
|
|
365
|
+
best = sc;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return best;
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=sdk-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-transcript.js","sourceRoot":"","sources":["../../src/data-processing/sdk-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Segment sorted log entries into wake cycles, then classify them
|
|
3
|
+
* as clean, interrupted, or incomplete.
|
|
4
|
+
*/
|
|
5
|
+
import { WakeCycle, type LogEntry, type ClassifiedCycles } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Walk sorted entries, group into wake->result cycles.
|
|
8
|
+
*/
|
|
9
|
+
export declare function segmentWakeCycles(entries: LogEntry[]): WakeCycle[];
|
|
10
|
+
/**
|
|
11
|
+
* Split cycles into clean, interrupted, and incomplete buckets.
|
|
12
|
+
*/
|
|
13
|
+
export declare function classifyCycles(cycles: WakeCycle[]): ClassifiedCycles;
|
|
14
|
+
//# sourceMappingURL=segmenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmenter.d.ts","sourceRoot":"","sources":["../../src/data-processing/segmenter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAqClE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAgCpE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Segment sorted log entries into wake cycles, then classify them
|
|
3
|
+
* as clean, interrupted, or incomplete.
|
|
4
|
+
*/
|
|
5
|
+
import { WakeCycle } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Walk sorted entries, group into wake->result cycles.
|
|
8
|
+
*/
|
|
9
|
+
export function segmentWakeCycles(entries) {
|
|
10
|
+
const cycles = [];
|
|
11
|
+
let current;
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
if (entry.category === "wake") {
|
|
14
|
+
if (current) {
|
|
15
|
+
cycles.push(current);
|
|
16
|
+
}
|
|
17
|
+
current = new WakeCycle();
|
|
18
|
+
current.entries.push(entry);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (!current)
|
|
22
|
+
continue;
|
|
23
|
+
current.entries.push(entry);
|
|
24
|
+
if (entry.category === "incoming" &&
|
|
25
|
+
entry.message.includes("[interrupt]")) {
|
|
26
|
+
current.hasInterrupts = true;
|
|
27
|
+
}
|
|
28
|
+
if (entry.category === "result") {
|
|
29
|
+
current.hasResult = true;
|
|
30
|
+
cycles.push(current);
|
|
31
|
+
current = undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (current) {
|
|
35
|
+
cycles.push(current);
|
|
36
|
+
}
|
|
37
|
+
return cycles;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Split cycles into clean, interrupted, and incomplete buckets.
|
|
41
|
+
*/
|
|
42
|
+
export function classifyCycles(cycles) {
|
|
43
|
+
const clean = [];
|
|
44
|
+
const interrupted = [];
|
|
45
|
+
const incomplete = [];
|
|
46
|
+
for (const c of cycles) {
|
|
47
|
+
if (!c.hasResult) {
|
|
48
|
+
incomplete.push(c);
|
|
49
|
+
}
|
|
50
|
+
else if (c.hasInterrupts) {
|
|
51
|
+
interrupted.push(c);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Hidden interrupt: incoming after model output started
|
|
55
|
+
let sawModel = false;
|
|
56
|
+
let hasHiddenInterrupt = false;
|
|
57
|
+
for (const e of c.entries) {
|
|
58
|
+
if (e.category === "assistant" || e.category === "tool_call") {
|
|
59
|
+
sawModel = true;
|
|
60
|
+
}
|
|
61
|
+
else if (e.category === "incoming" && sawModel) {
|
|
62
|
+
hasHiddenInterrupt = true;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (hasHiddenInterrupt) {
|
|
67
|
+
c.hasInterrupts = true;
|
|
68
|
+
interrupted.push(c);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
clean.push(c);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { clean, interrupted, incomplete };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=segmenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmenter.js","sourceRoot":"","sources":["../../src/data-processing/segmenter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAwC,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACnD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,OAA8B,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,IACE,KAAK,CAAC,QAAQ,KAAK,UAAU;YAC7B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EACrC,CAAC;YACD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAgB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBAC7D,QAAQ,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,QAAQ,EAAE,CAAC;oBACjD,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the VisionClaw data-processing pipeline.
|
|
3
|
+
*/
|
|
4
|
+
export interface LogEntry {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
level: string;
|
|
7
|
+
category: string;
|
|
8
|
+
message: string;
|
|
9
|
+
data: Record<string, unknown>;
|
|
10
|
+
sourceFile: string;
|
|
11
|
+
lineIndex: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class WakeCycle {
|
|
14
|
+
entries: LogEntry[];
|
|
15
|
+
hasResult: boolean;
|
|
16
|
+
hasInterrupts: boolean;
|
|
17
|
+
get wakeEntry(): LogEntry | undefined;
|
|
18
|
+
get resultEntry(): LogEntry | undefined;
|
|
19
|
+
get trigger(): string;
|
|
20
|
+
get incomingMessages(): LogEntry[];
|
|
21
|
+
get originalIncoming(): LogEntry[];
|
|
22
|
+
get interruptIncoming(): LogEntry[];
|
|
23
|
+
get systemInitEntry(): LogEntry | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface SDKMessage {
|
|
26
|
+
type?: string;
|
|
27
|
+
subtype?: string;
|
|
28
|
+
timestamp?: string;
|
|
29
|
+
message?: {
|
|
30
|
+
role?: string;
|
|
31
|
+
content?: unknown;
|
|
32
|
+
id?: string;
|
|
33
|
+
model?: string;
|
|
34
|
+
stop_reason?: string;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
};
|
|
37
|
+
compactMetadata?: {
|
|
38
|
+
trigger?: string;
|
|
39
|
+
preTokens?: number;
|
|
40
|
+
};
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
export interface SDKWakeCycle {
|
|
44
|
+
wakeTimestamp: string;
|
|
45
|
+
messages: SDKMessage[];
|
|
46
|
+
priorContext: SDKMessage[];
|
|
47
|
+
}
|
|
48
|
+
export type TrajectoryRole = "thinking" | "assistant" | "tool_call" | "tool_result" | "context" | "user_message";
|
|
49
|
+
export interface TrajectoryEntry {
|
|
50
|
+
role: TrajectoryRole;
|
|
51
|
+
content: string;
|
|
52
|
+
timestamp: string;
|
|
53
|
+
metadata?: Record<string, unknown>;
|
|
54
|
+
}
|
|
55
|
+
export interface PromptMeta {
|
|
56
|
+
channel: string;
|
|
57
|
+
sender: string;
|
|
58
|
+
message_id: string;
|
|
59
|
+
timestamp: string;
|
|
60
|
+
is_interrupt: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface InterruptMeta {
|
|
63
|
+
channel: string;
|
|
64
|
+
sender: string;
|
|
65
|
+
message_id: string;
|
|
66
|
+
timestamp: string;
|
|
67
|
+
text: string;
|
|
68
|
+
}
|
|
69
|
+
export interface UsageInfo {
|
|
70
|
+
turns: number | undefined;
|
|
71
|
+
input_tokens: number | undefined;
|
|
72
|
+
output_tokens: number | undefined;
|
|
73
|
+
cost: string | undefined;
|
|
74
|
+
}
|
|
75
|
+
export interface PriorContext {
|
|
76
|
+
compaction_summary: string | null;
|
|
77
|
+
compacted_fresh_start?: boolean;
|
|
78
|
+
prior_messages_count: number;
|
|
79
|
+
prior_messages: TrajectoryEntry[];
|
|
80
|
+
}
|
|
81
|
+
export type TrajectorySource = "sdk_transcript" | "visionclaw_logs";
|
|
82
|
+
export interface OutputRecord {
|
|
83
|
+
system_message: unknown;
|
|
84
|
+
prior_context: PriorContext | null;
|
|
85
|
+
prompt: string;
|
|
86
|
+
prompt_meta: PromptMeta;
|
|
87
|
+
interrupts: InterruptMeta[] | null;
|
|
88
|
+
trajectory: TrajectoryEntry[];
|
|
89
|
+
usage: UsageInfo | null;
|
|
90
|
+
complete: boolean;
|
|
91
|
+
has_interrupts: boolean;
|
|
92
|
+
trajectory_source: TrajectorySource;
|
|
93
|
+
}
|
|
94
|
+
export interface ClassifiedCycles {
|
|
95
|
+
clean: WakeCycle[];
|
|
96
|
+
interrupted: WakeCycle[];
|
|
97
|
+
incomplete: WakeCycle[];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data-processing/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,SAAS;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAM;IACzB,SAAS,UAAS;IAClB,aAAa,UAAS;IAEtB,IAAI,SAAS,IAAI,QAAQ,GAAG,SAAS,CAEpC;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,SAAS,CAKtC;IAED,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED,IAAI,gBAAgB,IAAI,QAAQ,EAAE,CAEjC;IAED,IAAI,gBAAgB,IAAI,QAAQ,EAAE,CAIjC;IAED,IAAI,iBAAiB,IAAI,QAAQ,EAAE,CAIlC;IAED,IAAI,eAAe,IAAI,QAAQ,GAAG,SAAS,CAK1C;CACF;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAMD,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,WAAW,GACX,WAAW,GACX,aAAa,GACb,SAAS,GACT,cAAc,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAMD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,eAAe,EAAE,CAAC;CACnC;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,gBAAgB,CAAC;CACrC;AAMD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the VisionClaw data-processing pipeline.
|
|
3
|
+
*/
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Wake cycle (segment of log entries between wake and result)
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
export class WakeCycle {
|
|
8
|
+
entries = [];
|
|
9
|
+
hasResult = false;
|
|
10
|
+
hasInterrupts = false;
|
|
11
|
+
get wakeEntry() {
|
|
12
|
+
return this.entries.find((e) => e.category === "wake");
|
|
13
|
+
}
|
|
14
|
+
get resultEntry() {
|
|
15
|
+
for (let i = this.entries.length - 1; i >= 0; i--) {
|
|
16
|
+
if (this.entries[i].category === "result")
|
|
17
|
+
return this.entries[i];
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
get trigger() {
|
|
22
|
+
const w = this.wakeEntry;
|
|
23
|
+
if (w?.data)
|
|
24
|
+
return w.data.trigger ?? "unknown";
|
|
25
|
+
return "unknown";
|
|
26
|
+
}
|
|
27
|
+
get incomingMessages() {
|
|
28
|
+
return this.entries.filter((e) => e.category === "incoming");
|
|
29
|
+
}
|
|
30
|
+
get originalIncoming() {
|
|
31
|
+
return this.entries.filter((e) => e.category === "incoming" && !e.message.includes("[interrupt]"));
|
|
32
|
+
}
|
|
33
|
+
get interruptIncoming() {
|
|
34
|
+
return this.entries.filter((e) => e.category === "incoming" && e.message.includes("[interrupt]"));
|
|
35
|
+
}
|
|
36
|
+
get systemInitEntry() {
|
|
37
|
+
return this.entries.find((e) => e.category === "system" && e.message.startsWith("System message: {"));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/data-processing/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,MAAM,OAAO,SAAS;IACpB,OAAO,GAAe,EAAE,CAAC;IACzB,SAAS,GAAG,KAAK,CAAC;IAClB,aAAa,GAAG,KAAK,CAAC;IAEtB,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,WAAW;QACb,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO;QACT,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,EAAE,IAAI;YAAE,OAAQ,CAAC,CAAC,IAAI,CAAC,OAA8B,IAAI,SAAS,CAAC;QACxE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CACtE,CAAC;IACJ,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CACvE,CAAC;IACJ,CAAC;CACF"}
|