@shpitdev/convex-cliproxy-observability 0.1.0
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 +11 -0
- package/LICENSE +201 -0
- package/README.md +40 -0
- package/dist/capture/index.d.ts +79 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +182 -0
- package/dist/capture/index.js.map +1 -0
- package/dist/client.d.ts +129 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +232 -0
- package/dist/client.js.map +1 -0
- package/dist/component/_generated/api.d.ts +12 -0
- package/dist/component/_generated/api.d.ts.map +1 -0
- package/dist/component/_generated/api.js +7 -0
- package/dist/component/_generated/api.js.map +1 -0
- package/dist/component/_generated/component.d.ts +17 -0
- package/dist/component/_generated/component.d.ts.map +1 -0
- package/dist/component/_generated/component.js +3 -0
- package/dist/component/_generated/component.js.map +1 -0
- package/dist/component/_generated/dataModel.d.ts +8 -0
- package/dist/component/_generated/dataModel.d.ts.map +1 -0
- package/dist/component/_generated/dataModel.js +3 -0
- package/dist/component/_generated/dataModel.js.map +1 -0
- package/dist/component/_generated/server.d.ts +21 -0
- package/dist/component/_generated/server.d.ts.map +1 -0
- package/dist/component/_generated/server.js +11 -0
- package/dist/component/_generated/server.js.map +1 -0
- package/dist/component/convex.config.d.ts +4 -0
- package/dist/component/convex.config.d.ts.map +1 -0
- package/dist/component/convex.config.js +4 -0
- package/dist/component/convex.config.js.map +1 -0
- package/dist/component/ingest.d.ts +64 -0
- package/dist/component/ingest.d.ts.map +1 -0
- package/dist/component/ingest.js +309 -0
- package/dist/component/ingest.js.map +1 -0
- package/dist/component/queries.d.ts +136 -0
- package/dist/component/queries.d.ts.map +1 -0
- package/dist/component/queries.js +219 -0
- package/dist/component/queries.js.map +1 -0
- package/dist/component/schema.d.ts +159 -0
- package/dist/component/schema.d.ts.map +1 -0
- package/dist/component/schema.js +74 -0
- package/dist/component/schema.js.map +1 -0
- package/dist/content/index.d.ts +8 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +41 -0
- package/dist/content/index.js.map +1 -0
- package/dist/model-call/index.d.ts +120 -0
- package/dist/model-call/index.d.ts.map +1 -0
- package/dist/model-call/index.js +96 -0
- package/dist/model-call/index.js.map +1 -0
- package/dist/projection.d.ts +19 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +83 -0
- package/dist/projection.js.map +1 -0
- package/dist/protocols/anthropic-messages.d.ts +11 -0
- package/dist/protocols/anthropic-messages.d.ts.map +1 -0
- package/dist/protocols/anthropic-messages.js +114 -0
- package/dist/protocols/anthropic-messages.js.map +1 -0
- package/dist/protocols/chat-completions.d.ts +10 -0
- package/dist/protocols/chat-completions.d.ts.map +1 -0
- package/dist/protocols/chat-completions.js +89 -0
- package/dist/protocols/chat-completions.js.map +1 -0
- package/dist/protocols/checkpoint.d.ts +20 -0
- package/dist/protocols/checkpoint.d.ts.map +1 -0
- package/dist/protocols/checkpoint.js +318 -0
- package/dist/protocols/checkpoint.js.map +1 -0
- package/dist/protocols/content.d.ts +34 -0
- package/dist/protocols/content.d.ts.map +1 -0
- package/dist/protocols/content.js +40 -0
- package/dist/protocols/content.js.map +1 -0
- package/dist/protocols/framing.d.ts +20 -0
- package/dist/protocols/framing.d.ts.map +1 -0
- package/dist/protocols/framing.js +67 -0
- package/dist/protocols/framing.js.map +1 -0
- package/dist/protocols/index.d.ts +20 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +139 -0
- package/dist/protocols/index.js.map +1 -0
- package/dist/protocols/output.d.ts +4 -0
- package/dist/protocols/output.d.ts.map +1 -0
- package/dist/protocols/output.js +81 -0
- package/dist/protocols/output.js.map +1 -0
- package/dist/protocols/responses.d.ts +12 -0
- package/dist/protocols/responses.d.ts.map +1 -0
- package/dist/protocols/responses.js +189 -0
- package/dist/protocols/responses.js.map +1 -0
- package/dist/protocols/types.d.ts +27 -0
- package/dist/protocols/types.d.ts.map +1 -0
- package/dist/protocols/types.js +2 -0
- package/dist/protocols/types.js.map +1 -0
- package/dist/protocols/usage.d.ts +3 -0
- package/dist/protocols/usage.d.ts.map +1 -0
- package/dist/protocols/usage.js +27 -0
- package/dist/protocols/usage.js.map +1 -0
- package/dist/protocols/values.d.ts +10 -0
- package/dist/protocols/values.d.ts.map +1 -0
- package/dist/protocols/values.js +32 -0
- package/dist/protocols/values.js.map +1 -0
- package/dist/test.d.ts +155 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +8 -0
- package/dist/test.js.map +1 -0
- package/package.json +90 -0
- package/src/capture/index.ts +277 -0
- package/src/client.ts +286 -0
- package/src/component/_generated/api.ts +19 -0
- package/src/component/_generated/component.ts +32 -0
- package/src/component/_generated/dataModel.ts +15 -0
- package/src/component/_generated/server.ts +43 -0
- package/src/component/convex.config.ts +3 -0
- package/src/component/ingest.ts +328 -0
- package/src/component/queries.ts +248 -0
- package/src/component/schema.ts +73 -0
- package/src/content/index.ts +53 -0
- package/src/model-call/index.ts +224 -0
- package/src/projection.ts +99 -0
- package/src/protocols/anthropic-messages.ts +115 -0
- package/src/protocols/chat-completions.ts +94 -0
- package/src/protocols/checkpoint.ts +342 -0
- package/src/protocols/content.ts +41 -0
- package/src/protocols/framing.ts +62 -0
- package/src/protocols/index.ts +140 -0
- package/src/protocols/output.ts +78 -0
- package/src/protocols/responses.ts +188 -0
- package/src/protocols/types.ts +26 -0
- package/src/protocols/usage.ts +36 -0
- package/src/protocols/values.ts +35 -0
- package/src/test.ts +16 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { decodeBody } from "../capture/index.js";
|
|
2
|
+
import { assembleResponsesStream } from "./responses.js";
|
|
3
|
+
import { SSEReader } from "./framing.js";
|
|
4
|
+
import { count, list, nanoTime, object, parseObject } from "./values.js";
|
|
5
|
+
import { extractUsage } from "./usage.js";
|
|
6
|
+
const usageFields = [
|
|
7
|
+
"input_tokens",
|
|
8
|
+
"output_tokens",
|
|
9
|
+
"total_tokens",
|
|
10
|
+
"prompt_tokens",
|
|
11
|
+
"completion_tokens",
|
|
12
|
+
"cache_read_input_tokens",
|
|
13
|
+
"cache_creation_input_tokens",
|
|
14
|
+
];
|
|
15
|
+
function boundedUsage(value) {
|
|
16
|
+
const raw = object(value);
|
|
17
|
+
const out = {};
|
|
18
|
+
for (const field of usageFields) {
|
|
19
|
+
if (count(raw[field]) !== undefined)
|
|
20
|
+
out[field] = raw[field];
|
|
21
|
+
}
|
|
22
|
+
for (const field of [
|
|
23
|
+
"input_tokens_details",
|
|
24
|
+
"output_tokens_details",
|
|
25
|
+
"prompt_tokens_details",
|
|
26
|
+
"completion_tokens_details",
|
|
27
|
+
"cache_creation",
|
|
28
|
+
]) {
|
|
29
|
+
const detail = object(raw[field]);
|
|
30
|
+
const safe = {};
|
|
31
|
+
for (const name of [
|
|
32
|
+
"cached_tokens",
|
|
33
|
+
"reasoning_tokens",
|
|
34
|
+
"thinking_tokens",
|
|
35
|
+
"ephemeral_5m_input_tokens",
|
|
36
|
+
"ephemeral_1h_input_tokens",
|
|
37
|
+
]) {
|
|
38
|
+
if (count(detail[name]) !== undefined)
|
|
39
|
+
safe[name] = detail[name];
|
|
40
|
+
}
|
|
41
|
+
if (Object.keys(safe).length)
|
|
42
|
+
out[field] = safe;
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
function semantic(event) {
|
|
47
|
+
const delta = object(event.delta);
|
|
48
|
+
return ([delta.text, delta.thinking, delta.partial_json].some((x) => typeof x === "string" && x.length > 0) ||
|
|
49
|
+
(typeof event.delta === "string" && event.delta.length > 0) ||
|
|
50
|
+
list(event.choices).some((c) => {
|
|
51
|
+
const d = object(object(c).delta);
|
|
52
|
+
return ([d.content, d.reasoning_content, d.reasoning].some((x) => typeof x === "string" && x.length > 0) || list(d.tool_calls).length > 0);
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
function observeProtocol(call, state, event, stream) {
|
|
56
|
+
const protocol = call.clientProtocol;
|
|
57
|
+
const type = event.type;
|
|
58
|
+
if (stream && protocol === "responses") {
|
|
59
|
+
// Shared assembler determines whether the event vocabulary is supported; sequence
|
|
60
|
+
// validation belongs to selected-call content replay, not this scalar checkpoint.
|
|
61
|
+
if (assembleResponsesStream([event]).unsupported)
|
|
62
|
+
state.unsupported = true;
|
|
63
|
+
}
|
|
64
|
+
if (typeof event.model === "string")
|
|
65
|
+
call.responseModel = event.model.slice(0, 256);
|
|
66
|
+
if (protocol === "responses") {
|
|
67
|
+
const response = stream ? object(event.response) : event;
|
|
68
|
+
if (!stream ||
|
|
69
|
+
["response.completed", "response.failed", "response.incomplete"].includes(String(type))) {
|
|
70
|
+
const status = String(response.status);
|
|
71
|
+
if (response.object !== "response" ||
|
|
72
|
+
typeof response.id !== "string" ||
|
|
73
|
+
!Array.isArray(response.output) ||
|
|
74
|
+
!["completed", "failed", "incomplete"].includes(status) ||
|
|
75
|
+
(stream && type !== `response.${status}`)) {
|
|
76
|
+
state.invalid = true;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (typeof response.model === "string")
|
|
80
|
+
call.responseModel = response.model.slice(0, 256);
|
|
81
|
+
state.terminal = status;
|
|
82
|
+
state.usage = response.usage === undefined ? undefined : boundedUsage(response.usage);
|
|
83
|
+
state.usageFinal = response.usage !== undefined;
|
|
84
|
+
call.finishReason = status;
|
|
85
|
+
}
|
|
86
|
+
else if (["response.created", "response.queued", "response.in_progress"].includes(String(type))) {
|
|
87
|
+
if (response.object !== "response" || typeof response.id !== "string")
|
|
88
|
+
state.invalid = true;
|
|
89
|
+
else if (typeof response.model === "string")
|
|
90
|
+
call.responseModel = response.model.slice(0, 256);
|
|
91
|
+
}
|
|
92
|
+
else if (type === "error") {
|
|
93
|
+
state.terminal = "failed";
|
|
94
|
+
state.usageFinal = false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (protocol === "anthropic_messages") {
|
|
98
|
+
if (!stream || type === "message_start") {
|
|
99
|
+
const message = stream ? object(event.message) : event;
|
|
100
|
+
if (message.type !== "message" ||
|
|
101
|
+
typeof message.id !== "string" ||
|
|
102
|
+
!Array.isArray(message.content)) {
|
|
103
|
+
state.invalid = true;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (typeof message.model === "string")
|
|
107
|
+
call.responseModel = message.model.slice(0, 256);
|
|
108
|
+
state.usage = boundedUsage(message.usage);
|
|
109
|
+
if (!stream) {
|
|
110
|
+
state.terminal = "completed";
|
|
111
|
+
state.usageFinal = message.usage !== undefined;
|
|
112
|
+
call.finishReason =
|
|
113
|
+
typeof message.stop_reason === "string" ? message.stop_reason : undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (type === "message_delta") {
|
|
117
|
+
state.usage = { ...state.usage, ...boundedUsage(event.usage) };
|
|
118
|
+
const reason = object(event.delta).stop_reason;
|
|
119
|
+
state.usageFinal =
|
|
120
|
+
typeof reason === "string" && count(object(event.usage).output_tokens) !== undefined;
|
|
121
|
+
if (typeof reason === "string")
|
|
122
|
+
call.finishReason = reason;
|
|
123
|
+
}
|
|
124
|
+
if (type === "message_stop")
|
|
125
|
+
state.terminal = "completed";
|
|
126
|
+
if (type === "error") {
|
|
127
|
+
state.terminal = "failed";
|
|
128
|
+
state.usageFinal = false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (protocol === "chat_completions") {
|
|
132
|
+
const choices = list(event.choices);
|
|
133
|
+
const finished = choices.every((x) => typeof object(x).finish_reason === "string");
|
|
134
|
+
if (choices.length) {
|
|
135
|
+
state.chatFinished = finished;
|
|
136
|
+
const reason = object(choices[0]).finish_reason;
|
|
137
|
+
if (typeof reason === "string")
|
|
138
|
+
call.finishReason = reason;
|
|
139
|
+
}
|
|
140
|
+
if (event.usage !== undefined) {
|
|
141
|
+
state.usage = boundedUsage(event.usage);
|
|
142
|
+
state.usageFinal = Array.isArray(event.choices) && finished;
|
|
143
|
+
}
|
|
144
|
+
if (!stream) {
|
|
145
|
+
state.terminal = event.error ? "failed" : finished ? "completed" : undefined;
|
|
146
|
+
state.usageFinal = state.terminal === "completed" && event.usage !== undefined;
|
|
147
|
+
}
|
|
148
|
+
if (event.error) {
|
|
149
|
+
state.terminal = "failed";
|
|
150
|
+
state.usageFinal = false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export function applyObservation(call, state, o) {
|
|
155
|
+
if (o.sequence !== call.capture.projectedThroughSequence + 1)
|
|
156
|
+
throw new Error("projection sequence gap");
|
|
157
|
+
if (o.gap) {
|
|
158
|
+
state.rawGap = true;
|
|
159
|
+
if (!call.capture.gaps.includes(o.gap) && call.capture.gaps.length < 8)
|
|
160
|
+
call.capture.gaps.push(o.gap.slice(0, 128));
|
|
161
|
+
}
|
|
162
|
+
const body = decodeBody(o);
|
|
163
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
164
|
+
if (o.kind === "request") {
|
|
165
|
+
state.inputSeen = true;
|
|
166
|
+
if (o.requestedModel)
|
|
167
|
+
call.requestModel = o.requestedModel.slice(0, 256);
|
|
168
|
+
call.correlation = o.correlation ?? {};
|
|
169
|
+
call.correlationConflicts = o.correlationConflicts ?? [];
|
|
170
|
+
call.traceId = o.correlation?.traceId;
|
|
171
|
+
call.sourceTraceId = o.sourceTraceId;
|
|
172
|
+
try {
|
|
173
|
+
const input = parseObject(decoder.decode(body));
|
|
174
|
+
state.streamed = input.stream === true;
|
|
175
|
+
call.streamed = state.streamed;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
state.invalid = true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (o.kind === "response" || o.kind === "stream_chunk" || o.kind === "completion") {
|
|
182
|
+
if (call.timeToFirstByteMs === undefined && (o.observedBodyBytes ?? body.length) > 0)
|
|
183
|
+
call.timeToFirstByteMs = o.offsetNs / 1e6;
|
|
184
|
+
try {
|
|
185
|
+
if (o.kind === "response" && body.length) {
|
|
186
|
+
const event = parseObject(decoder.decode(body));
|
|
187
|
+
if (call.operation === "generation")
|
|
188
|
+
observeProtocol(call, state, event, false);
|
|
189
|
+
else {
|
|
190
|
+
state.terminal = "completed";
|
|
191
|
+
if (call.operation === "token_count")
|
|
192
|
+
call.tokenCount = count(event.input_tokens);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if ((o.kind === "stream_chunk" || o.kind === "completion") && body.length) {
|
|
196
|
+
const reader = new SSEReader(state.sse);
|
|
197
|
+
for (const frame of reader.feed(body, o.observedAt)) {
|
|
198
|
+
if (frame.data === "[DONE]") {
|
|
199
|
+
if (call.clientProtocol === "chat_completions" && state.chatFinished)
|
|
200
|
+
state.terminal = "completed";
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const event = parseObject(frame.data);
|
|
204
|
+
if (call.timeToFirstContentMs === undefined && semantic(event))
|
|
205
|
+
call.timeToFirstContentMs = o.offsetNs / 1e6;
|
|
206
|
+
observeProtocol(call, state, event, true);
|
|
207
|
+
}
|
|
208
|
+
state.sse = reader.checkpoint();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
state.invalid = true;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (o.kind === "completion") {
|
|
216
|
+
try {
|
|
217
|
+
if (new SSEReader(state.sse).finish().truncated)
|
|
218
|
+
state.invalid = true;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
state.invalid = true;
|
|
222
|
+
}
|
|
223
|
+
delete state.sse;
|
|
224
|
+
delete state.sseBlob;
|
|
225
|
+
if (call.clientProtocol === "chat_completions" &&
|
|
226
|
+
state.chatFinished &&
|
|
227
|
+
o.completionOutcome === "succeeded")
|
|
228
|
+
state.terminal = "completed";
|
|
229
|
+
call.completionOutcome = o.completionOutcome;
|
|
230
|
+
call.executionStatusCode = o.executionStatusCode;
|
|
231
|
+
call.endTimeUnixNano = nanoTime(o.executionCompletedAt);
|
|
232
|
+
const start = nanoTime(o.executionStartedAt);
|
|
233
|
+
if (start)
|
|
234
|
+
call.startTimeUnixNano = start;
|
|
235
|
+
if (start && call.endTimeUnixNano)
|
|
236
|
+
call.latencyMs = Number(BigInt(call.endTimeUnixNano) - BigInt(start)) / 1e6;
|
|
237
|
+
call.capture.terminalSequence = o.sequence;
|
|
238
|
+
call.state =
|
|
239
|
+
o.completionOutcome === "canceled"
|
|
240
|
+
? "aborted"
|
|
241
|
+
: o.completionOutcome === "failed"
|
|
242
|
+
? "failed"
|
|
243
|
+
: o.completionOutcome === "rejected"
|
|
244
|
+
? "rejected"
|
|
245
|
+
: state.terminal === "completed"
|
|
246
|
+
? "succeeded"
|
|
247
|
+
: state.terminal === "failed" || state.terminal === "incomplete"
|
|
248
|
+
? "failed"
|
|
249
|
+
: "unknown";
|
|
250
|
+
}
|
|
251
|
+
call.protocolTerminal = state.terminal;
|
|
252
|
+
const final = !!state.terminal && state.usageFinal && !state.invalid && !state.unsupported && !state.rawGap;
|
|
253
|
+
const projection = {
|
|
254
|
+
version: 1,
|
|
255
|
+
protocol: call.clientProtocol ?? "unknown",
|
|
256
|
+
requestState: "absent",
|
|
257
|
+
responseState: final ? "decoded" : "truncated",
|
|
258
|
+
scalars: {},
|
|
259
|
+
metadata: {},
|
|
260
|
+
};
|
|
261
|
+
if (state.usage && call.operation === "generation") {
|
|
262
|
+
extractUsage(projection, state.usage);
|
|
263
|
+
const measurements = [];
|
|
264
|
+
for (const field of usageFields) {
|
|
265
|
+
const value = count(state.usage[field]);
|
|
266
|
+
if (value !== undefined)
|
|
267
|
+
measurements.push({
|
|
268
|
+
value,
|
|
269
|
+
nativeField: field,
|
|
270
|
+
source: "client_protocol",
|
|
271
|
+
scope: "call",
|
|
272
|
+
unit: "tokens",
|
|
273
|
+
finality: final ? "final" : "partial",
|
|
274
|
+
semanticsVersion: String(projection.metadata.tokenSemantics),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
for (const [key, detail] of Object.entries(state.usage)) {
|
|
278
|
+
if (!detail || typeof detail !== "object")
|
|
279
|
+
continue;
|
|
280
|
+
for (const [field, raw] of Object.entries(detail)) {
|
|
281
|
+
const value = count(raw);
|
|
282
|
+
if (value !== undefined)
|
|
283
|
+
measurements.push({
|
|
284
|
+
value,
|
|
285
|
+
nativeField: `${key}.${field}`,
|
|
286
|
+
source: "client_protocol",
|
|
287
|
+
scope: "call",
|
|
288
|
+
unit: "tokens",
|
|
289
|
+
finality: final ? "final" : "partial",
|
|
290
|
+
semanticsVersion: String(projection.metadata.tokenSemantics),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
call.usage = measurements;
|
|
295
|
+
for (const field of [
|
|
296
|
+
"inputTokens",
|
|
297
|
+
"outputTokens",
|
|
298
|
+
"totalTokens",
|
|
299
|
+
"reasoningTokens",
|
|
300
|
+
"cachedInputTokens",
|
|
301
|
+
])
|
|
302
|
+
call[field] = final ? projection.scalars[field] : undefined;
|
|
303
|
+
}
|
|
304
|
+
call.capture.lastObservedAt = o.observedAt;
|
|
305
|
+
call.capture.projectedThroughSequence = o.sequence;
|
|
306
|
+
call.capture.persistedThroughSequence = o.sequence;
|
|
307
|
+
call.capture.raw =
|
|
308
|
+
call.capture.terminalSequence === o.sequence && !state.rawGap ? "complete" : "partial";
|
|
309
|
+
call.capture.projection = state.invalid
|
|
310
|
+
? "invalid"
|
|
311
|
+
: state.unsupported
|
|
312
|
+
? "unsupported"
|
|
313
|
+
: state.terminal
|
|
314
|
+
? "complete"
|
|
315
|
+
: "partial";
|
|
316
|
+
call.capture.usage = call.usage.length ? (final ? "complete" : "partial") : "unavailable";
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/protocols/checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const output: z.ZodObject<{
|
|
3
|
+
format: z.ZodLiteral<"cliproxy_response_v1">;
|
|
4
|
+
protocol: z.ZodEnum<{
|
|
5
|
+
anthropic_messages: "anthropic_messages";
|
|
6
|
+
responses: "responses";
|
|
7
|
+
chat_completions: "chat_completions";
|
|
8
|
+
}>;
|
|
9
|
+
completion: z.ZodString;
|
|
10
|
+
reasoning: z.ZodString;
|
|
11
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
12
|
+
role: z.ZodOptional<z.ZodString>;
|
|
13
|
+
content: z.ZodOptional<z.ZodUnknown>;
|
|
14
|
+
tool_call_id: z.ZodOptional<z.ZodString>;
|
|
15
|
+
tool_calls: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
type: z.ZodLiteral<"function">;
|
|
18
|
+
function: z.ZodObject<{
|
|
19
|
+
name: z.ZodString;
|
|
20
|
+
arguments: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
}, z.core.$strip>>>;
|
|
23
|
+
}, z.core.$loose>>;
|
|
24
|
+
native: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export type CliproxyOutput = z.infer<typeof output>;
|
|
27
|
+
export declare function decodeCliproxyOutput(raw?: string): {
|
|
28
|
+
state: "absent" | "invalid" | "unsupported" | "truncated";
|
|
29
|
+
} | {
|
|
30
|
+
state: "decoded";
|
|
31
|
+
content: CliproxyOutput;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/protocols/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;iBAOV,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AACpD,wBAAgB,oBAAoB,CAClC,GAAG,CAAC,EAAE,MAAM,GAEV;IAAE,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;CAAE,GAC7D;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAahD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const toolCall = z.object({
|
|
3
|
+
id: z.string(),
|
|
4
|
+
type: z.literal("function"),
|
|
5
|
+
function: z.object({ name: z.string(), arguments: z.string() }),
|
|
6
|
+
});
|
|
7
|
+
const message = z
|
|
8
|
+
.object({
|
|
9
|
+
role: z.string().optional(),
|
|
10
|
+
content: z.unknown().optional(),
|
|
11
|
+
tool_call_id: z.string().optional(),
|
|
12
|
+
tool_calls: z.array(toolCall).optional(),
|
|
13
|
+
})
|
|
14
|
+
.loose();
|
|
15
|
+
const output = z.object({
|
|
16
|
+
format: z.literal("cliproxy_response_v1"),
|
|
17
|
+
protocol: z.enum(["chat_completions", "anthropic_messages", "responses"]),
|
|
18
|
+
completion: z.string(),
|
|
19
|
+
reasoning: z.string(),
|
|
20
|
+
messages: z.array(message),
|
|
21
|
+
native: z.record(z.string(), z.unknown()),
|
|
22
|
+
});
|
|
23
|
+
export function decodeCliproxyOutput(raw) {
|
|
24
|
+
if (raw === undefined)
|
|
25
|
+
return { state: "absent" };
|
|
26
|
+
let value;
|
|
27
|
+
try {
|
|
28
|
+
value = JSON.parse(raw);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { state: "invalid" };
|
|
32
|
+
}
|
|
33
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
34
|
+
return { state: "unsupported" };
|
|
35
|
+
if (!("format" in value) || value.format !== "cliproxy_response_v1")
|
|
36
|
+
return { state: "unsupported" };
|
|
37
|
+
const parsed = output.safeParse(value);
|
|
38
|
+
return parsed.success ? { state: "decoded", content: parsed.data } : { state: "invalid" };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/protocols/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAChE,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC;KACd,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,KAAK,EAAE,CAAC;AACX,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAClC,GAAY;IAIZ,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IACjG,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,sBAAsB;QACjE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC5F,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Incremental SSE framing. Times belong to the observation containing the final byte. */
|
|
2
|
+
export type SSEFrame = {
|
|
3
|
+
data: string;
|
|
4
|
+
event?: string;
|
|
5
|
+
observedAt?: string;
|
|
6
|
+
};
|
|
7
|
+
export type SSECheckpoint = {
|
|
8
|
+
pendingBase64: string;
|
|
9
|
+
};
|
|
10
|
+
export declare class SSEReader {
|
|
11
|
+
private maxBytes;
|
|
12
|
+
private pending;
|
|
13
|
+
constructor(checkpoint?: SSECheckpoint, maxBytes?: number);
|
|
14
|
+
feed(bytes: Uint8Array, observedAt?: string): SSEFrame[];
|
|
15
|
+
finish(): {
|
|
16
|
+
truncated: boolean;
|
|
17
|
+
};
|
|
18
|
+
checkpoint(): SSECheckpoint;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=framing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framing.d.ts","sourceRoot":"","sources":["../../src/protocols/framing.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AACtD,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ;IAHlB,OAAO,CAAC,OAAO,CAAa;gBAE1B,UAAU,GAAE,aAAqC,EACzC,QAAQ,SAAc;IAKhC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAuCxD,MAAM,IAAI;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE;IAKhC,UAAU,IAAI,aAAa;CAK5B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export class SSEReader {
|
|
2
|
+
maxBytes;
|
|
3
|
+
pending;
|
|
4
|
+
constructor(checkpoint = { pendingBase64: "" }, maxBytes = 1024 * 1024) {
|
|
5
|
+
this.maxBytes = maxBytes;
|
|
6
|
+
this.pending = Uint8Array.from(atob(checkpoint.pendingBase64), (c) => c.charCodeAt(0));
|
|
7
|
+
if (this.pending.length > maxBytes)
|
|
8
|
+
throw new Error("SSE frame limit");
|
|
9
|
+
}
|
|
10
|
+
feed(bytes, observedAt) {
|
|
11
|
+
const combined = new Uint8Array(this.pending.length + bytes.length);
|
|
12
|
+
combined.set(this.pending);
|
|
13
|
+
combined.set(bytes, this.pending.length);
|
|
14
|
+
const frames = [];
|
|
15
|
+
let start = 0;
|
|
16
|
+
for (let i = 0; i < combined.length; i++) {
|
|
17
|
+
const delimiter = combined[i] === 13 &&
|
|
18
|
+
combined[i + 1] === 10 &&
|
|
19
|
+
combined[i + 2] === 13 &&
|
|
20
|
+
combined[i + 3] === 10
|
|
21
|
+
? 4
|
|
22
|
+
: combined[i] === 10 && combined[i + 1] === 10
|
|
23
|
+
? 2
|
|
24
|
+
: combined[i] === 13 && combined[i + 1] === 13
|
|
25
|
+
? 2
|
|
26
|
+
: 0;
|
|
27
|
+
if (i - start > this.maxBytes)
|
|
28
|
+
throw new Error("SSE frame limit");
|
|
29
|
+
if (!delimiter)
|
|
30
|
+
continue;
|
|
31
|
+
const block = new TextDecoder("utf-8", { fatal: true }).decode(combined.subarray(start, i));
|
|
32
|
+
const data = [];
|
|
33
|
+
let event;
|
|
34
|
+
for (const line of block.split(/\r\n|\r|\n/)) {
|
|
35
|
+
if (line.startsWith(":"))
|
|
36
|
+
continue;
|
|
37
|
+
const colon = line.indexOf(":");
|
|
38
|
+
const field = colon < 0 ? line : line.slice(0, colon);
|
|
39
|
+
const value = (colon < 0 ? "" : line.slice(colon + 1)).replace(/^ /, "");
|
|
40
|
+
if (field === "data")
|
|
41
|
+
data.push(value);
|
|
42
|
+
else if (field === "event")
|
|
43
|
+
event = value;
|
|
44
|
+
}
|
|
45
|
+
if (data.length)
|
|
46
|
+
frames.push({ data: data.join("\n"), event, observedAt });
|
|
47
|
+
i += delimiter - 1;
|
|
48
|
+
start = i + 1;
|
|
49
|
+
}
|
|
50
|
+
this.pending = combined.slice(start);
|
|
51
|
+
if (this.pending.length > this.maxBytes)
|
|
52
|
+
throw new Error("SSE frame limit");
|
|
53
|
+
return frames;
|
|
54
|
+
}
|
|
55
|
+
finish() {
|
|
56
|
+
return {
|
|
57
|
+
truncated: new TextDecoder("utf-8", { fatal: true }).decode(this.pending).trim().length > 0,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
checkpoint() {
|
|
61
|
+
let raw = "";
|
|
62
|
+
for (const byte of this.pending)
|
|
63
|
+
raw += String.fromCharCode(byte);
|
|
64
|
+
return { pendingBase64: btoa(raw) };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=framing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../../src/protocols/framing.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IAIV;IAHF,OAAO,CAAa;IAC5B,YACE,aAA4B,EAAE,aAAa,EAAE,EAAE,EAAE,EACzC,WAAW,IAAI,GAAG,IAAI;QAAtB,aAAQ,GAAR,QAAQ,CAAc;QAE9B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,KAAiB,EAAE,UAAmB;QACzC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACpE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,SAAS,GACb,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;gBAClB,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;gBACtB,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;gBACtB,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;gBACpB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;oBAC5C,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;wBAC5C,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAClE,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,KAAyB,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzE,IAAI,KAAK,KAAK,MAAM;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAClC,IAAI,KAAK,KAAK,OAAO;oBAAE,KAAK,GAAG,KAAK,CAAC;YAC5C,CAAC;YACD,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;YACnB,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM;QACJ,OAAO;YACL,SAAS,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;SAC5F,CAAC;IACJ,CAAC;IACD,UAAU;QACR,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO;YAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { assembleResponsesStream } from "./responses.js";
|
|
2
|
+
import { assembleChatStream } from "./chat-completions.js";
|
|
3
|
+
import { assembleAnthropicStream } from "./anthropic-messages.js";
|
|
4
|
+
import type { CliproxyProjection } from "./types.js";
|
|
5
|
+
export { SSEReader } from "./framing.js";
|
|
6
|
+
export type { SSEFrame, SSECheckpoint } from "./framing.js";
|
|
7
|
+
export type { CliproxyProjection, ProjectionState } from "./types.js";
|
|
8
|
+
export { assembleResponsesStream, assembleChatStream, assembleAnthropicStream };
|
|
9
|
+
export { nanoTime } from "./values.js";
|
|
10
|
+
export declare const PARSER_VERSION = "client-protocol-v1";
|
|
11
|
+
export declare function protocolForRoute(route: string): CliproxyProjection["protocol"];
|
|
12
|
+
/** Bounded replay helper for fixtures and selected-call export; never fetches data itself. */
|
|
13
|
+
export declare function projectCapturedPayloads(args: {
|
|
14
|
+
route: string;
|
|
15
|
+
request?: Uint8Array;
|
|
16
|
+
response?: Uint8Array;
|
|
17
|
+
chunks?: readonly Uint8Array[];
|
|
18
|
+
complete?: boolean;
|
|
19
|
+
}): CliproxyProjection;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocols/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,eAAO,MAAM,cAAc,uBAAuB,CAAC;AACnD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAM9E;AACD,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,kBAAkB,CAgHrB"}
|