@nodetool-ai/execution 0.8.1 → 0.8.3
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 +23 -127
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/app-debug/app-spec.d.ts.map +1 -1
- package/dist/app-debug/app-spec.js +3 -0
- package/dist/app-debug/app-spec.js.map +1 -1
- package/dist/app-debug/application-target.d.ts +1 -1
- package/dist/app-debug/application-target.d.ts.map +1 -1
- package/dist/app-debug/application-target.js +5 -3
- package/dist/app-debug/application-target.js.map +1 -1
- package/dist/app-debug/index.d.ts +4 -2
- package/dist/app-debug/index.d.ts.map +1 -1
- package/dist/app-debug/index.js +3 -2
- package/dist/app-debug/index.js.map +1 -1
- package/dist/app-debug/run-recording.d.ts +20 -0
- package/dist/app-debug/run-recording.d.ts.map +1 -0
- package/dist/app-debug/run-recording.js +105 -0
- package/dist/app-debug/run-recording.js.map +1 -0
- package/dist/app-debug/runtime.d.ts +2 -0
- package/dist/app-debug/runtime.d.ts.map +1 -1
- package/dist/app-debug/runtime.js +19 -4
- package/dist/app-debug/runtime.js.map +1 -1
- package/dist/app-debug/simulate.d.ts +10 -1
- package/dist/app-debug/simulate.d.ts.map +1 -1
- package/dist/app-debug/simulate.js +67 -27
- package/dist/app-debug/simulate.js.map +1 -1
- package/dist/app-debug/summarize.d.ts +1 -0
- package/dist/app-debug/summarize.d.ts.map +1 -1
- package/dist/app-debug/summarize.js +1 -0
- package/dist/app-debug/summarize.js.map +1 -1
- package/dist/app-debug/types.d.ts +6 -4
- package/dist/app-debug/types.d.ts.map +1 -1
- package/dist/app-run-generation.d.ts +8 -0
- package/dist/app-run-generation.d.ts.map +1 -0
- package/dist/app-run-generation.js +61 -0
- package/dist/app-run-generation.js.map +1 -0
- package/dist/browser-app-run.d.ts +10 -0
- package/dist/browser-app-run.d.ts.map +1 -0
- package/dist/browser-app-run.js +108 -0
- package/dist/browser-app-run.js.map +1 -0
- package/dist/browser-run-spans.d.ts +4 -0
- package/dist/browser-run-spans.d.ts.map +1 -0
- package/dist/browser-run-spans.js +115 -0
- package/dist/browser-run-spans.js.map +1 -0
- package/dist/browser-trace-policy.d.ts +12 -0
- package/dist/browser-trace-policy.d.ts.map +1 -0
- package/dist/browser-trace-policy.js +40 -0
- package/dist/browser-trace-policy.js.map +1 -0
- package/dist/cost-ledger.d.ts +3 -0
- package/dist/cost-ledger.d.ts.map +1 -1
- package/dist/cost-ledger.js +23 -2
- package/dist/cost-ledger.js.map +1 -1
- package/dist/debug/types.d.ts +1 -0
- package/dist/debug/types.d.ts.map +1 -1
- package/dist/debug/verdict.d.ts +26 -1
- package/dist/debug/verdict.d.ts.map +1 -1
- package/dist/debug/verdict.js +36 -0
- package/dist/debug/verdict.js.map +1 -1
- package/dist/generation-lifecycle.d.ts +5 -4
- package/dist/generation-lifecycle.d.ts.map +1 -1
- package/dist/generation-lifecycle.js +71 -10
- package/dist/generation-lifecycle.js.map +1 -1
- package/dist/generation-recovery-worker.d.ts.map +1 -1
- package/dist/generation-recovery-worker.js +2 -0
- package/dist/generation-recovery-worker.js.map +1 -1
- package/dist/generation-tracker.d.ts +2 -15
- package/dist/generation-tracker.d.ts.map +1 -1
- package/dist/generation-tracker.js +92 -6
- package/dist/generation-tracker.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/js-script-debug/index.d.ts +1 -0
- package/dist/js-script-debug/index.d.ts.map +1 -1
- package/dist/js-script-debug/index.js +1 -0
- package/dist/js-script-debug/index.js.map +1 -1
- package/dist/js-script-debug/report.d.ts.map +1 -1
- package/dist/js-script-debug/report.js +9 -24
- package/dist/js-script-debug/report.js.map +1 -1
- package/dist/js-script-debug/type-check.d.ts +16 -0
- package/dist/js-script-debug/type-check.d.ts.map +1 -0
- package/dist/js-script-debug/type-check.js +150 -0
- package/dist/js-script-debug/type-check.js.map +1 -0
- package/dist/js-script-debug/validate.d.ts +8 -0
- package/dist/js-script-debug/validate.d.ts.map +1 -1
- package/dist/js-script-debug/validate.js +4 -0
- package/dist/js-script-debug/validate.js.map +1 -1
- package/dist/message-stream.d.ts +1 -32
- package/dist/message-stream.d.ts.map +1 -1
- package/dist/message-stream.js +1 -57
- package/dist/message-stream.js.map +1 -1
- package/dist/partial-run.d.ts +65 -0
- package/dist/partial-run.d.ts.map +1 -0
- package/dist/partial-run.js +300 -0
- package/dist/partial-run.js.map +1 -0
- package/dist/preflight.d.ts +43 -2
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +78 -4
- package/dist/preflight.js.map +1 -1
- package/dist/run-trace-store.d.ts +9 -0
- package/dist/run-trace-store.d.ts.map +1 -0
- package/dist/run-trace-store.js +57 -0
- package/dist/run-trace-store.js.map +1 -0
- package/dist/runs.d.ts +16 -0
- package/dist/runs.d.ts.map +1 -0
- package/dist/runs.js +431 -0
- package/dist/runs.js.map +1 -0
- package/dist/service/app-debug-service.d.ts +4 -2
- package/dist/service/app-debug-service.d.ts.map +1 -1
- package/dist/service/app-debug-service.js +73 -31
- package/dist/service/app-debug-service.js.map +1 -1
- package/dist/service/app-operation.d.ts +39 -0
- package/dist/service/app-operation.d.ts.map +1 -0
- package/dist/service/app-operation.js +271 -0
- package/dist/service/app-operation.js.map +1 -0
- package/dist/service/app-run-server.d.ts +3 -1
- package/dist/service/app-run-server.d.ts.map +1 -1
- package/dist/service/app-run-server.js +22 -14
- package/dist/service/app-run-server.js.map +1 -1
- package/dist/service/index.d.ts +5 -1
- package/dist/service/index.d.ts.map +1 -1
- package/dist/service/index.js +2 -0
- package/dist/service/index.js.map +1 -1
- package/dist/service/run-trace-lifecycle.d.ts +34 -0
- package/dist/service/run-trace-lifecycle.d.ts.map +1 -0
- package/dist/service/run-trace-lifecycle.js +135 -0
- package/dist/service/run-trace-lifecycle.js.map +1 -0
- package/dist/service/workflow-run.d.ts +47 -16
- package/dist/service/workflow-run.d.ts.map +1 -1
- package/dist/service/workflow-run.js +210 -78
- package/dist/service/workflow-run.js.map +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +109 -100
- package/dist/session.js.map +1 -1
- package/dist/sketch-debug/markdown.d.ts.map +1 -1
- package/dist/sketch-debug/markdown.js +1 -0
- package/dist/sketch-debug/markdown.js.map +1 -1
- package/dist/sketch-debug/report.d.ts.map +1 -1
- package/dist/sketch-debug/report.js +19 -28
- package/dist/sketch-debug/report.js.map +1 -1
- package/dist/sketch-debug/types.d.ts +2 -0
- package/dist/sketch-debug/types.d.ts.map +1 -1
- package/dist/timeline-debug/frame-geometry.d.ts +120 -0
- package/dist/timeline-debug/frame-geometry.d.ts.map +1 -0
- package/dist/timeline-debug/frame-geometry.js +238 -0
- package/dist/timeline-debug/frame-geometry.js.map +1 -0
- package/dist/timeline-debug/index.d.ts +1 -0
- package/dist/timeline-debug/index.d.ts.map +1 -1
- package/dist/timeline-debug/index.js +1 -0
- package/dist/timeline-debug/index.js.map +1 -1
- package/dist/timeline-debug/legibility.d.ts +8 -4
- package/dist/timeline-debug/legibility.d.ts.map +1 -1
- package/dist/timeline-debug/legibility.js +47 -18
- package/dist/timeline-debug/legibility.js.map +1 -1
- package/dist/timeline-debug/report.d.ts.map +1 -1
- package/dist/timeline-debug/report.js +16 -25
- package/dist/timeline-debug/report.js.map +1 -1
- package/dist/timeline-debug/score.d.ts +110 -0
- package/dist/timeline-debug/score.d.ts.map +1 -0
- package/dist/timeline-debug/score.js +231 -0
- package/dist/timeline-debug/score.js.map +1 -0
- package/dist/timeline-debug/showcase.d.ts +12 -0
- package/dist/timeline-debug/showcase.d.ts.map +1 -1
- package/dist/timeline-debug/showcase.js +669 -13
- package/dist/timeline-debug/showcase.js.map +1 -1
- package/dist/timeline-debug/validate.d.ts.map +1 -1
- package/dist/timeline-debug/validate.js +121 -2
- package/dist/timeline-debug/validate.js.map +1 -1
- package/dist/types.d.ts +18 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +13 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAChI,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EACvF,KAAK,oBAAoB,EAC/C,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS;IAA9F,YAAqB,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAE9G;CACF;AAkBD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAEjJ;AAID,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUpG;AAqDD,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwC3G;AAgCD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2BvH;AAGD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BpH;AACD,yFAAyF;AACzF,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiB3H;AACD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAe,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAU1I"}
|
package/dist/runs.js
ADDED
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { TRACE_RESTRICTED_CAPABILITY_MODULES, RUN_SUMMARY_SPAN_LIMIT, RUN_READER_STRING_LIMIT, RUN_READER_CONTENT_LIMIT, recombineTraceRecord, runListOptionsSchema, runGetOptionsSchema, runTraceOptionsSchema, runLogsOptionsSchema, runAwaitOptionsSchema, runUpdatesOptionsSchema } from "@nodetool-ai/protocol";
|
|
4
|
+
import { resolveRunReader, findRunReaderSource, queryRunReaders, queryRunReaderSpans, queryRunReaderGenerationIds, queryRunReaderDocuments, queryRunReaderAppMetadata, queryRunReaderAppContent, queryRunReaderAppContentPresent, queryRunReaderGenerationCosts, encodeRunListCursor, RunTraceError } from "@nodetool-ai/models";
|
|
5
|
+
export class RunsError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(code, message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.name = "RunsError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function validate(schema, input) {
|
|
14
|
+
const result = schema.safeParse(input);
|
|
15
|
+
if (!result.success) {
|
|
16
|
+
throw new RunsError("invalid_input", result.error.message);
|
|
17
|
+
}
|
|
18
|
+
return result.data;
|
|
19
|
+
}
|
|
20
|
+
async function modelRead(read) {
|
|
21
|
+
try {
|
|
22
|
+
return await read();
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error instanceof RunTraceError) {
|
|
26
|
+
throw new RunsError(error.code === "conflict" ? "ambiguous" : error.code, error.message);
|
|
27
|
+
}
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function resolve(userId, id) {
|
|
32
|
+
const run = await modelRead(() => resolveRunReader(userId, id));
|
|
33
|
+
if (!run) {
|
|
34
|
+
throw new RunsError("not_found", "Run not found");
|
|
35
|
+
}
|
|
36
|
+
return run;
|
|
37
|
+
}
|
|
38
|
+
export async function findRunForSource(userId, kind, sourceId) {
|
|
39
|
+
return modelRead(() => findRunReaderSource(userId, kind, sourceId));
|
|
40
|
+
}
|
|
41
|
+
function publicRunRecord(run) {
|
|
42
|
+
return { ...run, error: run.error?.slice(0, 500) ?? null, parents: run.parents.slice(0, 20), parents_limited: run.parents.length > 20 };
|
|
43
|
+
}
|
|
44
|
+
export async function listRuns(userId, options = {}) {
|
|
45
|
+
const parsed = validate(runListOptionsSchema, options);
|
|
46
|
+
if (parsed.since && parsed.until && parsed.since > parsed.until) {
|
|
47
|
+
throw new RunsError("invalid_input", "since must precede until");
|
|
48
|
+
}
|
|
49
|
+
const rows = await modelRead(() => queryRunReaders(userId, parsed));
|
|
50
|
+
const runs = rows.slice(0, parsed.limit);
|
|
51
|
+
const last = runs.at(-1);
|
|
52
|
+
return { runs: runs.map((run) => {
|
|
53
|
+
const record = publicRunRecord(run);
|
|
54
|
+
if (run.app) {
|
|
55
|
+
record.app = run.app;
|
|
56
|
+
}
|
|
57
|
+
return record;
|
|
58
|
+
}), next_cursor: rows.length > parsed.limit && last ? encodeRunListCursor(last) : null };
|
|
59
|
+
}
|
|
60
|
+
function compareSpans(a, b) {
|
|
61
|
+
return a.metadata.start_time_ms - b.metadata.start_time_ms || a.span_id.localeCompare(b.span_id);
|
|
62
|
+
}
|
|
63
|
+
/** Iterative traversal visits each span once, including disconnected and cyclic components. */
|
|
64
|
+
function spanTree(rows) {
|
|
65
|
+
const sorted = [...rows].sort(compareSpans);
|
|
66
|
+
const byId = new Map(sorted.map((row) => [row.span_id, row]));
|
|
67
|
+
const children = new Map();
|
|
68
|
+
const roots = [];
|
|
69
|
+
let incomplete = false;
|
|
70
|
+
for (const row of sorted) {
|
|
71
|
+
const parent = row.metadata.parent_span_id;
|
|
72
|
+
if (parent && byId.has(parent) && parent !== row.span_id) {
|
|
73
|
+
const siblings = children.get(parent) ?? [];
|
|
74
|
+
siblings.push(row);
|
|
75
|
+
children.set(parent, siblings);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
roots.push(row);
|
|
79
|
+
if (parent) {
|
|
80
|
+
incomplete = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
const ordered = [];
|
|
86
|
+
const visit = (root) => {
|
|
87
|
+
const queue = [{ row: root, depth: 0 }];
|
|
88
|
+
for (let index = 0; index < queue.length; index++) {
|
|
89
|
+
const entry = queue[index];
|
|
90
|
+
if (!entry || seen.has(entry.row.span_id)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
seen.add(entry.row.span_id);
|
|
94
|
+
ordered.push(entry);
|
|
95
|
+
for (const child of children.get(entry.row.span_id) ?? []) {
|
|
96
|
+
queue.push({ row: child, depth: entry.depth + 1 });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
for (const root of roots) {
|
|
101
|
+
visit(root);
|
|
102
|
+
}
|
|
103
|
+
for (const row of sorted) {
|
|
104
|
+
if (!seen.has(row.span_id)) {
|
|
105
|
+
incomplete = true;
|
|
106
|
+
visit(row);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { ordered, byId, children, incomplete };
|
|
110
|
+
}
|
|
111
|
+
function scopedRows(run, rows) {
|
|
112
|
+
if (!run.parent_run_id) {
|
|
113
|
+
return rows;
|
|
114
|
+
}
|
|
115
|
+
if (!run.root_span_id) {
|
|
116
|
+
return rows.filter((row) => row.run_id === run.id);
|
|
117
|
+
}
|
|
118
|
+
const tree = spanTree(rows);
|
|
119
|
+
const allowed = new Set();
|
|
120
|
+
const queue = [run.root_span_id];
|
|
121
|
+
for (let index = 0; index < queue.length; index++) {
|
|
122
|
+
const id = queue[index];
|
|
123
|
+
if (!id || allowed.has(id)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
allowed.add(id);
|
|
127
|
+
for (const child of tree.children.get(id) ?? []) {
|
|
128
|
+
queue.push(child.span_id);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return rows.filter((row) => allowed.has(row.span_id));
|
|
132
|
+
}
|
|
133
|
+
function flags(run, rows, incomplete = false) {
|
|
134
|
+
const expired = Boolean(run.content_expired || rows.some((row) => row.content_expired));
|
|
135
|
+
const suppressed = rows.some((row) => TRACE_RESTRICTED_CAPABILITY_MODULES.some((module) => row.metadata.attributes["tool.module"] === module || row.metadata.attributes["capability.module"] === module));
|
|
136
|
+
return { content_state: run.origin === "public" ? "public" : expired ? "expired" : rows.some((row) => row.has_content) ? "available" : suppressed ? "suppressed" : "absent",
|
|
137
|
+
content_expired: expired, truncated: Boolean(run.truncated || rows.some((row) => row.truncated)), incomplete: Boolean(run.incomplete || incomplete || rows.some((row) => row.incomplete)) };
|
|
138
|
+
}
|
|
139
|
+
function spanSummary(row) {
|
|
140
|
+
return { span_id: row.span_id, parent_span_id: row.metadata.parent_span_id, name: row.metadata.name, status: row.metadata.status.code,
|
|
141
|
+
duration_ms: row.metadata.duration_ms, error: row.error_summary?.slice(0, 500) ?? null };
|
|
142
|
+
}
|
|
143
|
+
export async function getRun(userId, id, options = {}) {
|
|
144
|
+
const parsed = validate(runGetOptionsSchema, options);
|
|
145
|
+
const run = await resolve(userId, id);
|
|
146
|
+
const all = await queryRunReaderSpans(userId, run);
|
|
147
|
+
const rows = scopedRows(run, all);
|
|
148
|
+
const tree = spanTree(rows);
|
|
149
|
+
const depths = new Map(tree.ordered.map((entry) => [entry.row.span_id, entry.depth]));
|
|
150
|
+
const failed = [...rows].filter((row) => row.metadata.status.code === "ERROR").sort((a, b) => a.metadata.end_time_ms - b.metadata.end_time_ms || (depths.get(b.span_id) ?? 0) - (depths.get(a.span_id) ?? 0) || compareSpans(a, b))[0];
|
|
151
|
+
const path = [];
|
|
152
|
+
const pathIds = new Set();
|
|
153
|
+
let current = failed;
|
|
154
|
+
while (current && !pathIds.has(current.span_id)) {
|
|
155
|
+
pathIds.add(current.span_id);
|
|
156
|
+
path.push(current);
|
|
157
|
+
current = current.metadata.parent_span_id ? tree.byId.get(current.metadata.parent_span_id) : undefined;
|
|
158
|
+
}
|
|
159
|
+
path.reverse();
|
|
160
|
+
const counts = new Map();
|
|
161
|
+
const costs = new Map();
|
|
162
|
+
const generations = new Set();
|
|
163
|
+
const documents = new Set();
|
|
164
|
+
const chargedGenerations = new Set();
|
|
165
|
+
for (const row of rows) {
|
|
166
|
+
counts.set(row.metadata.name, (counts.get(row.metadata.name) ?? 0) + 1);
|
|
167
|
+
const attrs = row.metadata.attributes;
|
|
168
|
+
const cost = attrs["gen_ai.usage.cost_usd"];
|
|
169
|
+
const provider = attrs["llm.provider"] ?? attrs["gen_ai.system"] ?? attrs["generation.provider"];
|
|
170
|
+
if (typeof cost === "number" && Number.isFinite(cost) && typeof provider === "string") {
|
|
171
|
+
const name = provider.slice(0, 200);
|
|
172
|
+
costs.set(name, (costs.get(name) ?? 0) + cost);
|
|
173
|
+
if (typeof attrs["generation.id"] === "string") {
|
|
174
|
+
chargedGenerations.add(attrs["generation.id"]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (typeof attrs["generation.id"] === "string") {
|
|
178
|
+
generations.add(attrs["generation.id"]);
|
|
179
|
+
}
|
|
180
|
+
if (run.kind !== "app" && run.origin !== "public" && !run.content_expired && typeof attrs["document.id"] === "string") {
|
|
181
|
+
documents.add(attrs["document.id"]);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
for (const generation of await queryRunReaderGenerationIds(userId, run)) {
|
|
185
|
+
generations.add(generation);
|
|
186
|
+
}
|
|
187
|
+
const documentReferences = await queryRunReaderDocuments(userId, run);
|
|
188
|
+
for (const document of documentReferences) {
|
|
189
|
+
documents.add(document.id);
|
|
190
|
+
}
|
|
191
|
+
for (const generation of await queryRunReaderGenerationCosts(userId, run, [...generations].slice(0, 100))) {
|
|
192
|
+
generations.add(generation.id);
|
|
193
|
+
if (!chargedGenerations.has(generation.id) && generation.cost !== null && Number.isFinite(generation.cost)) {
|
|
194
|
+
const provider = generation.provider.slice(0, 200);
|
|
195
|
+
costs.set(provider, (costs.get(provider) ?? 0) + generation.cost);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const app = await queryRunReaderAppMetadata(userId, run);
|
|
199
|
+
const record = publicRunRecord(run);
|
|
200
|
+
if (app) {
|
|
201
|
+
record.app = app;
|
|
202
|
+
}
|
|
203
|
+
if (record.app && parsed.include_content) {
|
|
204
|
+
const content = await queryRunReaderAppContent(userId, run);
|
|
205
|
+
const budget = { remaining: RUN_READER_CONTENT_LIMIT, string_limit: RUN_READER_CONTENT_LIMIT };
|
|
206
|
+
record.app.inputs = content.inputs ? boundedAttributes(content.inputs, budget) : null;
|
|
207
|
+
record.app.outputs = content.outputs ? boundedAttributes(content.outputs, budget) : null;
|
|
208
|
+
record.app.content_limited = Boolean(content.content_limited || budget.limited);
|
|
209
|
+
}
|
|
210
|
+
const recordingFlags = flags(run, rows, tree.incomplete);
|
|
211
|
+
if (recordingFlags.content_state === "absent" && await queryRunReaderAppContentPresent(userId, run)) {
|
|
212
|
+
recordingFlags.content_state = "available";
|
|
213
|
+
}
|
|
214
|
+
const failurePath = path.length > RUN_SUMMARY_SPAN_LIMIT ? [...path.slice(0, RUN_SUMMARY_SPAN_LIMIT - 1), ...path.slice(-1)] : path;
|
|
215
|
+
return { run: record, summary: { ...recordingFlags, first_failed_span_id: failed?.span_id ?? null,
|
|
216
|
+
failure_path: failurePath.map(spanSummary), cost_by_provider: Object.fromEntries([...costs].sort(([a], [b]) => a.localeCompare(b)).slice(0, 20)),
|
|
217
|
+
slowest_spans: [...rows].sort((a, b) => b.metadata.duration_ms - a.metadata.duration_ms || compareSpans(a, b)).slice(0, RUN_SUMMARY_SPAN_LIMIT).map(spanSummary),
|
|
218
|
+
counts_by_name: Object.fromEntries([...counts].sort(([a], [b]) => a.localeCompare(b)).slice(0, 50)), span_count: rows.length, event_count: rows.reduce((count, row) => count + row.metadata.events.length, 0),
|
|
219
|
+
documents: documentReferences.slice(0, 100), documents_limited: documentReferences.length > 100, generation_ids: [...generations].sort().slice(0, 100), document_ids: [...documents].sort().slice(0, 100),
|
|
220
|
+
summary_truncated: path.length > RUN_SUMMARY_SPAN_LIMIT || counts.size > 50 || costs.size > 20 || generations.size > 100 || documents.size > 100 } };
|
|
221
|
+
}
|
|
222
|
+
function boundedValue(value, budget) {
|
|
223
|
+
if (budget.remaining <= 0) {
|
|
224
|
+
return "[reader limit]";
|
|
225
|
+
}
|
|
226
|
+
const encoded = JSON.stringify(value) ?? "null";
|
|
227
|
+
const limit = Math.min(budget.string_limit ?? RUN_READER_STRING_LIMIT, budget.remaining);
|
|
228
|
+
if (Buffer.byteLength(encoded) > limit) {
|
|
229
|
+
budget.limited = true;
|
|
230
|
+
}
|
|
231
|
+
const result = Buffer.byteLength(encoded) > limit ? `${Buffer.from(typeof value === "string" ? value : encoded).subarray(0, Math.max(0, limit / 2 - 20)).toString()}[reader limit]` : value;
|
|
232
|
+
const size = Buffer.byteLength(JSON.stringify(result) ?? "null");
|
|
233
|
+
if (size > budget.remaining) {
|
|
234
|
+
budget.remaining = 0;
|
|
235
|
+
budget.limited = true;
|
|
236
|
+
return "[reader limit]";
|
|
237
|
+
}
|
|
238
|
+
budget.remaining -= size;
|
|
239
|
+
return result;
|
|
240
|
+
}
|
|
241
|
+
function boundedAttributes(attrs, budget) {
|
|
242
|
+
const result = {};
|
|
243
|
+
if (Object.keys(attrs).length > 100) {
|
|
244
|
+
budget.limited = true;
|
|
245
|
+
}
|
|
246
|
+
for (const [inputKey, value] of Object.entries(attrs).slice(0, 100)) {
|
|
247
|
+
const key = inputKey.slice(0, 200);
|
|
248
|
+
const size = Buffer.byteLength(JSON.stringify(key)) + 3;
|
|
249
|
+
if (budget.remaining <= size) {
|
|
250
|
+
budget.remaining = 0;
|
|
251
|
+
budget.limited = true;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
budget.remaining -= size;
|
|
255
|
+
result[key] = boundedValue(value, budget);
|
|
256
|
+
}
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
function boundedRecord(record, budget, fullEvents = false) {
|
|
260
|
+
const attributes = (attrs) => boundedAttributes(attrs, budget);
|
|
261
|
+
const status = { code: record.status.code };
|
|
262
|
+
if (record.status.message !== undefined) {
|
|
263
|
+
status.message = String(boundedValue(record.status.message, budget));
|
|
264
|
+
}
|
|
265
|
+
const events = record.events.slice(0, Math.min(fullEvents ? 1_000 : 128, budget.events));
|
|
266
|
+
budget.events -= events.length;
|
|
267
|
+
if (events.length < record.events.length) {
|
|
268
|
+
budget.limited = true;
|
|
269
|
+
}
|
|
270
|
+
return { ...record, name: record.name.slice(0, 200), status, attributes: attributes(record.attributes), resource: attributes(record.resource),
|
|
271
|
+
events: events.map((event) => ({ ...event, name: event.name.slice(0, 200), attributes: attributes(event.attributes ?? {}) })) };
|
|
272
|
+
}
|
|
273
|
+
export async function getRunTrace(userId, id, options = {}) {
|
|
274
|
+
const parsed = validate(runTraceOptionsSchema, options);
|
|
275
|
+
if (parsed.include_content && !parsed.focus_span_id) {
|
|
276
|
+
throw new RunsError("invalid_input", "Content drill-down requires focus_span_id");
|
|
277
|
+
}
|
|
278
|
+
const run = await resolve(userId, id);
|
|
279
|
+
const rows = scopedRows(run, await queryRunReaderSpans(userId, run));
|
|
280
|
+
const tree = spanTree(rows);
|
|
281
|
+
let entries = tree.ordered;
|
|
282
|
+
if (parsed.focus_span_id) {
|
|
283
|
+
const focus = tree.byId.get(parsed.focus_span_id);
|
|
284
|
+
if (!focus) {
|
|
285
|
+
throw new RunsError("not_found", "Span not found in run");
|
|
286
|
+
}
|
|
287
|
+
entries = [];
|
|
288
|
+
const seen = new Set();
|
|
289
|
+
const queue = [{ row: focus, depth: 0 }];
|
|
290
|
+
for (let index = 0; index < queue.length; index++) {
|
|
291
|
+
const entry = queue[index];
|
|
292
|
+
if (!entry || seen.has(entry.row.span_id)) {
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
seen.add(entry.row.span_id);
|
|
296
|
+
entries.push(entry);
|
|
297
|
+
for (const child of tree.children.get(entry.row.span_id) ?? []) {
|
|
298
|
+
queue.push({ row: child, depth: entry.depth + 1 });
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const errorPath = new Set();
|
|
303
|
+
if (parsed.errors_only) {
|
|
304
|
+
for (const entry of entries) {
|
|
305
|
+
if (entry.row.metadata.status.code !== "ERROR") {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
let row = entry.row;
|
|
309
|
+
while (row && !errorPath.has(row.span_id)) {
|
|
310
|
+
errorPath.add(row.span_id);
|
|
311
|
+
row = row.metadata.parent_span_id ? tree.byId.get(row.metadata.parent_span_id) : undefined;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
const filtered = entries.filter((entry) => entry.depth <= parsed.depth && (!parsed.name || entry.row.metadata.name.includes(parsed.name)) && (!parsed.errors_only || errorPath.has(entry.row.span_id)));
|
|
316
|
+
const contentRows = parsed.include_content && parsed.focus_span_id ? await queryRunReaderSpans(userId, run, { includeContent: true, spanIds: [parsed.focus_span_id] }) : [];
|
|
317
|
+
const content = new Map(contentRows.map((row) => [row.span_id, row.content]));
|
|
318
|
+
const budget = { remaining: RUN_READER_CONTENT_LIMIT, events: 200 };
|
|
319
|
+
const nodes = filtered.slice(0, parsed.limit).map(({ row, depth }) => {
|
|
320
|
+
budget.string_limit = parsed.include_content && row.span_id === parsed.focus_span_id ? RUN_READER_CONTENT_LIMIT : RUN_READER_STRING_LIMIT;
|
|
321
|
+
return { depth, record: boundedRecord(recombineTraceRecord(row.metadata, content.get(row.span_id) ?? null), budget) };
|
|
322
|
+
});
|
|
323
|
+
return { run: publicRunRecord(run), nodes, ...flags(run, rows, tree.incomplete), next_cursor: null, limited: filtered.length > parsed.limit || Boolean(budget.limited) || budget.remaining <= 0 || budget.events <= 0 };
|
|
324
|
+
}
|
|
325
|
+
const logsCursorSchema = z.object({ time_ms: z.number(), id: z.string() });
|
|
326
|
+
function logCursor(log) { return Buffer.from(JSON.stringify({ time_ms: log.time_ms, id: log.id })).toString("base64url"); }
|
|
327
|
+
export async function getRunLogs(userId, id, options = {}) {
|
|
328
|
+
const parsed = validate(runLogsOptionsSchema, options);
|
|
329
|
+
const run = await resolve(userId, id);
|
|
330
|
+
const rows = scopedRows(run, await queryRunReaderSpans(userId, run));
|
|
331
|
+
const logs = [];
|
|
332
|
+
let cursor;
|
|
333
|
+
if (parsed.cursor) {
|
|
334
|
+
try {
|
|
335
|
+
cursor = logsCursorSchema.parse(JSON.parse(Buffer.from(parsed.cursor, "base64url").toString()));
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
throw new RunsError("invalid_input", "Invalid log cursor");
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
for (const row of rows) {
|
|
342
|
+
if (parsed.span_id && row.span_id !== parsed.span_id) {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
const record = recombineTraceRecord(row.metadata, parsed.include_content ? row.content : null);
|
|
346
|
+
for (const [index, event] of record.events.entries()) {
|
|
347
|
+
const attrs = event.attributes ?? {};
|
|
348
|
+
const level = attrs["log.level"] ?? attrs.level;
|
|
349
|
+
const source = attrs["log.source"] ?? attrs.source;
|
|
350
|
+
const entry = { id: `${row.span_id}:${event.id ?? index}`, span_id: row.span_id, span_name: record.name, time_ms: event.time_ms, name: event.name,
|
|
351
|
+
level: typeof level === "string" ? level : null, source: typeof source === "string" ? source : null, attributes: attrs };
|
|
352
|
+
if ((parsed.level && entry.level !== parsed.level) || (parsed.source && entry.source !== parsed.source) || (parsed.since_ms !== undefined && entry.time_ms < parsed.since_ms) || (parsed.until_ms !== undefined && entry.time_ms > parsed.until_ms)) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
if (cursor && (entry.time_ms < cursor.time_ms || entry.time_ms === cursor.time_ms && entry.id <= cursor.id)) {
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
logs.push(entry);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
logs.sort((a, b) => a.time_ms - b.time_ms || a.id.localeCompare(b.id));
|
|
362
|
+
const page = parsed.newest ? logs.slice(-parsed.limit) : logs.slice(0, parsed.limit);
|
|
363
|
+
const budget = { remaining: RUN_READER_CONTENT_LIMIT, string_limit: parsed.include_content && parsed.span_id ? RUN_READER_CONTENT_LIMIT : RUN_READER_STRING_LIMIT };
|
|
364
|
+
const spanIds = [...new Set(page.map((entry) => entry.span_id))];
|
|
365
|
+
const contentRows = parsed.include_content ? await queryRunReaderSpans(userId, run, { includeContent: true, spanIds: spanIds.slice(0, 10) }) : [];
|
|
366
|
+
const contents = new Map();
|
|
367
|
+
for (const row of contentRows) {
|
|
368
|
+
for (const [index, event] of recombineTraceRecord(row.metadata, row.content).events.entries()) {
|
|
369
|
+
contents.set(`${row.span_id}:${event.id ?? index}`, event);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
const bounded = page.map((entry) => {
|
|
373
|
+
const content = contents.get(entry.id);
|
|
374
|
+
const attrs = content?.attributes ?? entry.attributes;
|
|
375
|
+
return { ...entry, name: (content?.name ?? entry.name).slice(0, 200), attributes: boundedAttributes(attrs, budget) };
|
|
376
|
+
});
|
|
377
|
+
const last = page.at(-1);
|
|
378
|
+
return { run: publicRunRecord(run), logs: bounded, ...flags(run, rows), next_cursor: !parsed.newest && logs.length > parsed.limit && last ? logCursor(last) : null, limited: Boolean(budget.limited) || budget.remaining <= 0 || parsed.include_content && spanIds.length > 10 };
|
|
379
|
+
}
|
|
380
|
+
/** Polling reads latest snapshots. It deliberately never promises append-only replay. */
|
|
381
|
+
export async function readRunUpdates(userId, id, options = {}) {
|
|
382
|
+
const parsed = validate(runUpdatesOptionsSchema, options);
|
|
383
|
+
const run = await resolve(userId, id);
|
|
384
|
+
const all = scopedRows(run, await queryRunReaderSpans(userId, run));
|
|
385
|
+
const rows = all.filter((row) => row.cursor > parsed.cursor);
|
|
386
|
+
const page = [];
|
|
387
|
+
let eventCount = 0;
|
|
388
|
+
for (const row of rows) {
|
|
389
|
+
if (page.length >= (parsed.include_content ? Math.min(10, parsed.limit) : parsed.limit) || page.length > 0 && eventCount + row.metadata.events.length > 200) {
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
page.push(row);
|
|
393
|
+
eventCount += row.metadata.events.length;
|
|
394
|
+
}
|
|
395
|
+
const budget = { remaining: RUN_READER_CONTENT_LIMIT, events: Math.max(200, eventCount) };
|
|
396
|
+
const contentRows = parsed.include_content ? await queryRunReaderSpans(userId, run, { includeContent: true, spanIds: page.map((row) => row.span_id) }) : [];
|
|
397
|
+
const content = new Map(contentRows.map((row) => [row.span_id, row.content]));
|
|
398
|
+
const recordingFlags = flags(run, all);
|
|
399
|
+
return { run: publicRunRecord(run), ...recordingFlags, records: page.map((row) => ({ kind: validate(z.enum(["span_started", "span_updated", "span_ended", "span_event"]), row.update_kind),
|
|
400
|
+
record: boundedRecord(recombineTraceRecord(row.metadata, content.get(row.span_id) ?? null), budget, true), run_id: row.run_id, cursor: row.cursor,
|
|
401
|
+
content_expired: Boolean(row.content_expired), truncated: Boolean(row.truncated), incomplete: Boolean(row.incomplete) })), cursor: page.at(-1)?.cursor ?? parsed.cursor,
|
|
402
|
+
has_more: rows.length > page.length, resnapshot_required: true, limited: Boolean(budget.limited) || budget.remaining <= 0 || budget.events <= 0,
|
|
403
|
+
trace_settled: Boolean(run.root_span_id && all.some((row) => row.span_id === run.root_span_id && row.update_kind === "span_ended") && all.every((row) => row.update_kind === "span_ended")) };
|
|
404
|
+
}
|
|
405
|
+
export async function awaitRun(userId, id, options = {}) {
|
|
406
|
+
const parsed = validate(runAwaitOptionsSchema, options);
|
|
407
|
+
const deadline = Date.now() + parsed.timeout_ms;
|
|
408
|
+
while (true) {
|
|
409
|
+
if (options.signal?.aborted) {
|
|
410
|
+
throw new RunsError("aborted", "Waiting for run was aborted");
|
|
411
|
+
}
|
|
412
|
+
const run = await resolve(userId, id);
|
|
413
|
+
if (run.status !== "running") {
|
|
414
|
+
return getRun(userId, run.id);
|
|
415
|
+
}
|
|
416
|
+
const remaining = deadline - Date.now();
|
|
417
|
+
if (remaining <= 0) {
|
|
418
|
+
throw new RunsError("timeout", "Timed out waiting for run");
|
|
419
|
+
}
|
|
420
|
+
try {
|
|
421
|
+
await delay(Math.min(parsed.poll_interval_ms, remaining), undefined, { signal: options.signal });
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
if (options.signal?.aborted) {
|
|
425
|
+
throw new RunsError("aborted", "Waiting for run was aborted");
|
|
426
|
+
}
|
|
427
|
+
throw error;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=runs.js.map
|
package/dist/runs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mCAAmC,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,wBAAwB,EAC9G,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAI7J,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,mBAAmB,EAC3Q,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,SAAU,SAAQ,KAAK;IACb,IAAI;IAAzB,YAAqB,IAAyE,EAAE,OAAe;QAC7G,KAAK,CAAC,OAAO,CAAC,CAAC;oBADI,IAAI;QACP,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1C,CAAC;CACF;AACD,SAAS,QAAQ,CAAI,MAAoB,EAAE,KAAc;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAAC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACpF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AACD,KAAK,UAAU,SAAS,CAAI,IAAsB;IAChD,IAAI,CAAC;QAAC,OAAO,MAAM,IAAI,EAAE,CAAC;IAAC,CAAC;IAC5B,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACjI,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AACD,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,EAAU;IAC/C,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAkC,EAAE,QAAgB;IACzG,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC;AACD,SAAS,eAAe,CAAC,GAAyB;IAChD,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;AAC1I,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,OAAO,GAAmB,EAAE;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAC;IAAC,CAAC;IACtI,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9G,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YAAC,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3F,CAAC;AACD,SAAS,YAAY,CAAC,CAAgB,EAAE,CAAgB;IACtD,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACnG,CAAC;AAOD,+FAA+F;AAC/F,SAAS,QAAQ,CAAC,IAAqB;IACrC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAAC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAAC,IAAI,UAAU,GAAG,KAAK,CAAC;IAC/G,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC3C,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClG,CAAC;aAAM,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,MAAM,EAAE,CAAC;gBAAC,UAAU,GAAG,IAAI,CAAC;YAAC,CAAC;QAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,MAAM,OAAO,GAAiD,EAAE,CAAC;IACjG,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAQ,EAAE;QAC1C,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YACpF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QACpH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAAC,UAAU,GAAG,IAAI,CAAC;YAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAAC,CAAC;IAC5F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC;AACD,SAAS,UAAU,CAAC,GAAyB,EAAE,IAAqB;IAClE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAAC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;IAClG,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,KAAK,CAAC,GAAyB,EAAE,IAAqB,EAAE,UAAU,GAAG,KAAK;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;IAC1M,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;QACzK,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;AAChM,CAAC;AACD,SAAS,WAAW,CAAC,GAAkB;IACrC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;QACnI,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7F,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,EAAU,EAAE,OAAO,GAAkB,EAAE;IAClF,MAAM,MAAM,GAAG,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAAC,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1J,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvO,MAAM,IAAI,GAAoB,EAAE,CAAC;IAAC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,IAAI,OAAO,GAA8B,MAAM,CAAC;IACrH,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAAC,CAAC;IAC9M,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAAC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAAC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5M,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAC,MAAM,IAAI,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACjG,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,IAAI,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YAAC,CAAC;QAAC,CAAC;QACnR,IAAI,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAAC,CAAC;QAC5F,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAAC,CAAC;IACjK,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,MAAM,2BAA2B,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IACzG,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtE,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;QAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAC1E,KAAK,MAAM,UAAU,IAAI,MAAM,6BAA6B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1G,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IACxO,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IAAC,CAAC;IAC7H,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,MAAM,MAAM,GAAiB,EAAE,SAAS,EAAE,wBAAwB,EAAE,YAAY,EAAE,wBAAwB,EAAE,CAAC;QAC1K,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,cAAc,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,+BAA+B,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QAAC,cAAc,CAAC,aAAa,GAAG,WAAW,CAAC;IAAC,CAAC;IACpJ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpI,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,cAAc,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI;YAC/F,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChJ,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;YAChK,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7M,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,MAAM,GAAG,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACzM,iBAAiB,EAAE,IAAI,CAAC,MAAM,GAAG,sBAAsB,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;AACzJ,CAAC;AAED,SAAS,YAAY,CAAI,KAAQ,EAAE,MAAoB;IACrD,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,gBAAgB,CAAC;IAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,uBAAuB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,CAAC;QAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5L,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;IACjE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAAC,OAAO,gBAAgB,CAAC;IAAC,CAAC;IACtG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAAC,OAAO,MAAM,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAuB,EAAE,MAAoB;IACtE,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5F,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;YAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAAC,MAAM;QAAC,CAAC;QACrF,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,aAAa,CAAC,MAAmB,EAAE,MAAyC,EAAE,UAAU,GAAG,KAAK;IACvG,MAAM,UAAU,GAAG,CAAC,KAA8B,EAA2B,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjH,MAAM,MAAM,GAA0B,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAClH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IACzH,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAAC,CAAC;IACpE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3I,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACpI,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,EAAU,EAAE,OAAO,GAAoB,EAAE;IACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAAC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;IAAC,CAAC;IAC3I,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzI,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAAC,CAAC;QAC7H,OAAO,GAAG,EAAE,CAAC;QAAC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAAC,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACvF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QAAC,CAAC;IAC7H,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC7D,IAAI,GAAG,GAA8B,KAAK,CAAC,GAAG,CAAC;YAC/C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAAC,CAAC;QACxK,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxM,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5K,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,MAAM,MAAM,GAAsC,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACtL,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACnE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC1I,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IACxH,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;AAC1N,CAAC;AACD,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3E,SAAS,SAAS,CAAC,GAAW,IAAY,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3I,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,EAAU,EAAE,OAAO,GAAmB,EAAE;IACvF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAAC,MAAM,IAAI,GAAa,EAAE,CAAC;IAChG,IAAI,MAAoD,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;QAAC,CAAC;IAAC,CAAC;IACrM,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACnE,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/F,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;YAC1I,MAAM,KAAK,GAAW,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;gBACvJ,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YAC3H,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAClQ,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC1H,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,MAAM,GAAiB,EAAE,SAAS,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;IACxQ,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClJ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAClE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAAC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;IAAC,CAAC;IACjM,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,MAAM,KAAK,GAAG,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;QAC9F,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;IACvH,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;AACnR,CAAC;AACD,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,EAAU,EAAE,OAAO,GAAsB,EAAE;IAC9F,MAAM,MAAM,GAAG,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjG,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAAC,MAAM,IAAI,GAAoB,EAAE,CAAC;IAAC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAAC,MAAM;QAAC,CAAC;QACvK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3D,CAAC;IACD,MAAM,MAAM,GAAsC,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;IAC7H,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5J,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;YACxL,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM;YACjJ,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM;QACvK,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAC/I,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,KAAK,YAAY,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC;AAClM,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,EAAU,EAAE,OAAO,GAA+C,EAAE;IACjH,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IACzG,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAAC,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QAAC,CAAC;QAC/F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAChE,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;QAAC,CAAC;QAC7H,IAAI,CAAC;YAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAAC,CAAC;QACzG,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAAC,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IAChI,CAAC;AACH,CAAC"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { JsScriptOperationRunner } from "../app-debug/script-operation.js";
|
|
21
21
|
import type { NodeRegistry } from "@nodetool-ai/node-sdk";
|
|
22
|
-
import type
|
|
22
|
+
import { ProcessingContext, type StorageAdapter } from "@nodetool-ai/runtime";
|
|
23
23
|
import type { AppWorkflowRecord, InteractionStep } from "../app-debug/index.js";
|
|
24
24
|
/**
|
|
25
25
|
* A refusal the caller turns into its own transport error. `code` is the
|
|
@@ -54,7 +54,7 @@ export interface AppDebugRequest {
|
|
|
54
54
|
export interface AppDebugDeps {
|
|
55
55
|
registry?: NodeRegistry;
|
|
56
56
|
/** Load a workflow's graph by id, scoped to the user. */
|
|
57
|
-
loadWorkflow?: (userId: string, id: string) => Promise<AppWorkflowRecord | null>;
|
|
57
|
+
loadWorkflow?: (userId: string, id: string, version?: number) => Promise<AppWorkflowRecord | null>;
|
|
58
58
|
/** Load an application row by id. */
|
|
59
59
|
loadApplication?: (userId: string, id: string) => Promise<{
|
|
60
60
|
id: string;
|
|
@@ -67,6 +67,8 @@ export interface AppDebugDeps {
|
|
|
67
67
|
* such an operation reports as unexecutable instead of being skipped.
|
|
68
68
|
*/
|
|
69
69
|
runScript?: JsScriptOperationRunner;
|
|
70
|
+
context?: ProcessingContext;
|
|
71
|
+
scriptRunner?: (context: ProcessingContext, input: Parameters<JsScriptOperationRunner>[0]) => ReturnType<JsScriptOperationRunner>;
|
|
70
72
|
/** The store `asset://<id>` inputs in the app's workflows resolve through. */
|
|
71
73
|
assetStorage?: StorageAdapter | null;
|
|
72
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-debug-service.d.ts","sourceRoot":"","sources":["../../src/service/app-debug-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"app-debug-service.d.ts","sourceRoot":"","sources":["../../src/service/app-debug-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgBH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS9E,OAAO,KAAK,EAEV,iBAAiB,EACjB,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAc/B;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;IAD9C,YACW,IAAI,EAAE,eAAe,GAAG,WAAW,EAC5C,OAAO,EAAE,MAAM,EAIhB;CACF;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,8EAA8E;IAC9E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACvC,qCAAqC;IACrC,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrE;;;;OAIG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAClI,8EAA8E;IAC9E,YAAY,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAgID;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,eAAe,EACrB,eAAe,EAAE,YAAY,EAC7B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkGlC"}
|