stitchkit 0.68.11 → 0.69.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/README.md +30 -1
- package/dist/agent-runtime/coding-tool-contract.d.ts +155 -0
- package/dist/agent-runtime/coding-tool-contract.d.ts.map +1 -0
- package/dist/agent-runtime/coding-tool-files.d.ts +3 -0
- package/dist/agent-runtime/coding-tool-files.d.ts.map +1 -0
- package/dist/agent-runtime/coding-tool-paths.d.ts +19 -0
- package/dist/agent-runtime/coding-tool-paths.d.ts.map +1 -0
- package/dist/agent-runtime/coding-tool-search-patch.d.ts +3 -0
- package/dist/agent-runtime/coding-tool-search-patch.d.ts.map +1 -0
- package/dist/agent-runtime/coding-tool-shell.d.ts +3 -0
- package/dist/agent-runtime/coding-tool-shell.d.ts.map +1 -0
- package/dist/agent-runtime/coding-tools.d.ts +17 -0
- package/dist/agent-runtime/coding-tools.d.ts.map +1 -0
- package/dist/agent-runtime/compaction.d.ts +2 -0
- package/dist/agent-runtime/compaction.d.ts.map +1 -1
- package/dist/agent-runtime/contained-files.d.ts +31 -0
- package/dist/agent-runtime/contained-files.d.ts.map +1 -0
- package/dist/agent-runtime/control-schema.d.ts +1074 -0
- package/dist/agent-runtime/control-schema.d.ts.map +1 -0
- package/dist/agent-runtime/conversations.d.ts +128 -0
- package/dist/agent-runtime/conversations.d.ts.map +1 -0
- package/dist/agent-runtime/event-schema.d.ts +96 -0
- package/dist/agent-runtime/event-schema.d.ts.map +1 -1
- package/dist/agent-runtime/harness-contract.d.ts +169 -0
- package/dist/agent-runtime/harness-contract.d.ts.map +1 -0
- package/dist/agent-runtime/harness-control.d.ts +25 -0
- package/dist/agent-runtime/harness-control.d.ts.map +1 -0
- package/dist/agent-runtime/harness-file-resources.d.ts +33 -0
- package/dist/agent-runtime/harness-file-resources.d.ts.map +1 -0
- package/dist/agent-runtime/harness-resources.d.ts +5 -0
- package/dist/agent-runtime/harness-resources.d.ts.map +1 -0
- package/dist/agent-runtime/harness.d.ts +12 -0
- package/dist/agent-runtime/harness.d.ts.map +1 -0
- package/dist/agent-runtime/history.d.ts +2 -0
- package/dist/agent-runtime/history.d.ts.map +1 -1
- package/dist/agent-runtime/models.d.ts +199 -0
- package/dist/agent-runtime/models.d.ts.map +1 -1
- package/dist/agent-runtime/prompt.d.ts +2 -0
- package/dist/agent-runtime/prompt.d.ts.map +1 -1
- package/dist/agent-runtime/run-execution.d.ts.map +1 -1
- package/dist/agent-runtime/runtime.d.ts +11 -3
- package/dist/agent-runtime/runtime.d.ts.map +1 -1
- package/dist/agent-runtime/schemas.d.ts +49 -0
- package/dist/agent-runtime/schemas.d.ts.map +1 -1
- package/dist/agent-runtime/sqlite.d.ts +2 -0
- package/dist/agent-runtime/sqlite.d.ts.map +1 -1
- package/dist/agent-runtime/store-driver.d.ts +61 -212
- package/dist/agent-runtime/store-driver.d.ts.map +1 -1
- package/dist/agent-runtime/store.d.ts +368 -1
- package/dist/agent-runtime/store.d.ts.map +1 -1
- package/dist/agent-runtime/terminal-commit.d.ts +12 -1
- package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
- package/dist/agent-runtime/terminal-status.d.ts +8 -0
- package/dist/agent-runtime/terminal-status.d.ts.map +1 -1
- package/dist/agent-runtime-browser.d.ts +1 -0
- package/dist/agent-runtime-browser.d.ts.map +1 -1
- package/dist/agent-runtime-browser.js +217 -1
- package/dist/agent-runtime-coding-tools.d.ts +2 -0
- package/dist/agent-runtime-coding-tools.d.ts.map +1 -0
- package/dist/agent-runtime-coding-tools.js +706 -0
- package/dist/agent-runtime-harness.d.ts +2 -0
- package/dist/agent-runtime-harness.d.ts.map +1 -0
- package/dist/agent-runtime-harness.js +700 -0
- package/dist/agent-runtime-openrouter.d.ts +14 -1
- package/dist/agent-runtime-openrouter.d.ts.map +1 -1
- package/dist/agent-runtime-openrouter.js +211 -0
- package/dist/agent-runtime-sqlite-bun.js +4 -3
- package/dist/agent-runtime-sqlite-node.js +4 -3
- package/dist/agent-runtime.d.ts +5 -3
- package/dist/agent-runtime.d.ts.map +1 -1
- package/dist/agent-runtime.js +106 -2580
- package/dist/application/diagnostic-journal-contract.d.ts +164 -0
- package/dist/application/diagnostic-journal-contract.d.ts.map +1 -0
- package/dist/application/diagnostic-journal-manager.d.ts +12 -0
- package/dist/application/diagnostic-journal-manager.d.ts.map +1 -0
- package/dist/application/diagnostic-journal-storage.d.ts +29 -0
- package/dist/application/diagnostic-journal-storage.d.ts.map +1 -0
- package/dist/application/diagnostic-journal.d.ts +11 -0
- package/dist/application/diagnostic-journal.d.ts.map +1 -0
- package/dist/application.d.ts +2 -0
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +561 -17
- package/dist/browser/socket-io.d.ts.map +1 -1
- package/dist/cli.js +8 -6
- package/dist/{index-8vpzxg55.js → index-10gbbbaa.js} +103 -2
- package/dist/index-3eqrkqhg.js +2565 -0
- package/dist/{index-hcx9yypn.js → index-444747ww.js} +7 -7
- package/dist/{index-hxh98zbm.js → index-d1jsvkyk.js} +1 -1
- package/dist/index-es0h4w26.js +63 -0
- package/dist/{index-grgvpbch.js → index-gqdfpv4n.js} +4 -2
- package/dist/{index-bt5179zb.js → index-h7ctj1kp.js} +5 -3
- package/dist/{index-y2ctppmg.js → index-h8vn1jcr.js} +7 -73
- package/dist/{index-hqza5nde.js → index-hsabxjz0.js} +78 -77
- package/dist/index-kg9xx84n.js +73 -0
- package/dist/{index-hb0mncmj.js → index-kxxyvkka.js} +2 -2
- package/dist/{index-2t6zt5cg.js → index-mbxds404.js} +7 -5
- package/dist/{index-f24xg2cw.js → index-p1be103g.js} +1 -1
- package/dist/{index-xyvxez9r.js → index-q7gdep2c.js} +5 -5
- package/dist/{index-t23p2b68.js → index-t4dpby6e.js} +1 -1
- package/dist/index-tg3m2ec5.js +157 -0
- package/dist/index-v3dpzpjw.js +92 -0
- package/dist/{index-eqqyd9v8.js → index-wwst0td5.js} +2 -46
- package/dist/{index-ysphyxax.js → index-x1th9s8c.js} +23 -2
- package/dist/index-xxsq3ca1.js +51 -0
- package/dist/{index-22tjt2rk.js → index-zh459sfj.js} +1 -1
- package/dist/index.js +51 -37
- package/dist/internal/ai-sdk-typed.d.ts +14 -0
- package/dist/internal/ai-sdk-typed.d.ts.map +1 -0
- package/dist/node.js +5 -5
- package/dist/observability/index.js +4 -4
- package/dist/realtime/request.d.ts +5 -0
- package/dist/realtime/request.d.ts.map +1 -1
- package/dist/remote.js +6 -6
- package/dist/server/index.js +9 -9
- package/dist/testing.js +5 -5
- package/dist/tool-invoker.js +6 -5
- package/dist/tools.js +21 -17
- package/llms-full.txt +342 -27
- package/package.json +10 -2
- package/dist/{index-pgsyp3xh.js → index-x18ndp4p.js} +3 -3
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// src/agent-runtime/models.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var AgentModelCapabilitySchema = z.enum(["tools", "vision", "reasoning", "files"]);
|
|
4
|
+
var AgentModelDescriptorSchema = z.object({
|
|
5
|
+
provider: z.string().min(1),
|
|
6
|
+
modelId: z.string().min(1),
|
|
7
|
+
contextWindow: z.int().positive(),
|
|
8
|
+
capabilities: z.array(AgentModelCapabilitySchema),
|
|
9
|
+
observedAt: z.iso.datetime({ offset: true }).optional(),
|
|
10
|
+
source: z.string().min(1).optional(),
|
|
11
|
+
availability: z.enum(["available", "unavailable"]).optional()
|
|
12
|
+
});
|
|
13
|
+
var AgentModelRegistrySnapshotSchema = z.object({
|
|
14
|
+
schemaVersion: z.literal(1),
|
|
15
|
+
source: z.string().min(1),
|
|
16
|
+
observedAt: z.iso.datetime({ offset: true }),
|
|
17
|
+
models: z.record(z.string().min(1), AgentModelDescriptorSchema)
|
|
18
|
+
});
|
|
19
|
+
var AgentModelPriceSchema = z.object({
|
|
20
|
+
currency: z.string().length(3),
|
|
21
|
+
inputPerToken: z.string().regex(/^\d+(?:\.\d+)?$/).optional(),
|
|
22
|
+
outputPerToken: z.string().regex(/^\d+(?:\.\d+)?$/).optional()
|
|
23
|
+
}).strict();
|
|
24
|
+
var AgentModelMetricSchema = z.object({
|
|
25
|
+
metric: z.string().min(1),
|
|
26
|
+
value: z.number(),
|
|
27
|
+
unit: z.enum(["index", "elo", "percent", "milliseconds"]),
|
|
28
|
+
source: z.string().min(1),
|
|
29
|
+
observedAt: z.iso.datetime({ offset: true })
|
|
30
|
+
}).strict();
|
|
31
|
+
var AgentModelPopularitySchema = z.object({
|
|
32
|
+
rank: z.int().positive(),
|
|
33
|
+
window: z.literal("week"),
|
|
34
|
+
source: z.string().min(1),
|
|
35
|
+
observedAt: z.iso.datetime({ offset: true })
|
|
36
|
+
}).strict();
|
|
37
|
+
var AgentModelCatalogEntrySchema = z.object({
|
|
38
|
+
id: z.string().min(1),
|
|
39
|
+
name: z.string().min(1),
|
|
40
|
+
descriptor: AgentModelDescriptorSchema,
|
|
41
|
+
description: z.string().optional(),
|
|
42
|
+
price: AgentModelPriceSchema.optional(),
|
|
43
|
+
popularity: AgentModelPopularitySchema.optional(),
|
|
44
|
+
metrics: z.array(AgentModelMetricSchema)
|
|
45
|
+
}).strict();
|
|
46
|
+
var AgentModelCatalogSchema = z.object({
|
|
47
|
+
schemaVersion: z.literal(1),
|
|
48
|
+
source: z.string().min(1),
|
|
49
|
+
observedAt: z.iso.datetime({ offset: true }),
|
|
50
|
+
completeness: z.enum(["complete", "partial"]),
|
|
51
|
+
models: z.array(AgentModelCatalogEntrySchema),
|
|
52
|
+
diagnostics: z.array(z.string())
|
|
53
|
+
}).strict();
|
|
54
|
+
var AgentModelSelectionSchema = z.object({
|
|
55
|
+
modelId: z.string().min(1),
|
|
56
|
+
selectedAt: z.iso.datetime({ offset: true })
|
|
57
|
+
}).strict();
|
|
58
|
+
var AgentModelSearchInputSchema = z.object({ query: z.string().max(256).default(""), limit: z.int().positive().max(200) }).strict();
|
|
59
|
+
var AgentModelSearchResultSchema = z.object({
|
|
60
|
+
models: z.array(AgentModelCatalogEntrySchema),
|
|
61
|
+
total: z.int().nonnegative(),
|
|
62
|
+
truncated: z.boolean()
|
|
63
|
+
}).strict();
|
|
64
|
+
function searchAgentModelCatalog(catalog, rawInput) {
|
|
65
|
+
const input = AgentModelSearchInputSchema.parse(rawInput);
|
|
66
|
+
const terms = input.query.toLocaleLowerCase().trim().split(/\s+/).filter(Boolean);
|
|
67
|
+
const matches = catalog.models.filter((model) => {
|
|
68
|
+
const searchable = `${model.id}
|
|
69
|
+
${model.name}
|
|
70
|
+
${model.description ?? ""}`.toLocaleLowerCase();
|
|
71
|
+
return terms.every((term) => searchable.includes(term));
|
|
72
|
+
});
|
|
73
|
+
return AgentModelSearchResultSchema.parse({
|
|
74
|
+
models: matches.slice(0, input.limit),
|
|
75
|
+
total: matches.length,
|
|
76
|
+
truncated: matches.length > input.limit
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function createMemoryAgentModelSelectionStore() {
|
|
80
|
+
const selections = new Map;
|
|
81
|
+
return {
|
|
82
|
+
load: (conversationId) => selections.get(conversationId),
|
|
83
|
+
save(conversationId, rawSelection) {
|
|
84
|
+
selections.set(conversationId, AgentModelSelectionSchema.parse(rawSelection));
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function defineModelRegistry(config) {
|
|
89
|
+
const descriptors = new Map;
|
|
90
|
+
for (const key in config.models) {
|
|
91
|
+
const declaration = config.models[key];
|
|
92
|
+
if (declaration)
|
|
93
|
+
descriptors.set(key, AgentModelDescriptorSchema.parse(declaration));
|
|
94
|
+
}
|
|
95
|
+
const descriptor = (key) => {
|
|
96
|
+
const found = descriptors.get(key);
|
|
97
|
+
if (!found)
|
|
98
|
+
throw new Error(`Unknown agent model: ${key}`);
|
|
99
|
+
return found;
|
|
100
|
+
};
|
|
101
|
+
const supports = (key, capabilities) => {
|
|
102
|
+
const available = new Set(descriptor(key).capabilities);
|
|
103
|
+
return capabilities.every((capability) => available.has(capability));
|
|
104
|
+
};
|
|
105
|
+
const preflight = (key, required = []) => {
|
|
106
|
+
const selected = descriptor(key);
|
|
107
|
+
if (selected.availability === "unavailable") {
|
|
108
|
+
throw new Error(`Agent model ${key} is unavailable`);
|
|
109
|
+
}
|
|
110
|
+
if (!supports(key, required)) {
|
|
111
|
+
throw new Error(`Agent model ${key} does not satisfy required capabilities`);
|
|
112
|
+
}
|
|
113
|
+
if (!config.providers[selected.provider]) {
|
|
114
|
+
throw new Error(`Unknown agent model provider: ${selected.provider}`);
|
|
115
|
+
}
|
|
116
|
+
return selected;
|
|
117
|
+
};
|
|
118
|
+
return {
|
|
119
|
+
keys: () => [...descriptors.keys()],
|
|
120
|
+
descriptor,
|
|
121
|
+
supports,
|
|
122
|
+
preflight,
|
|
123
|
+
resolve(key, required = []) {
|
|
124
|
+
const selected = preflight(key, required);
|
|
125
|
+
const provider = config.providers[selected.provider];
|
|
126
|
+
if (!provider)
|
|
127
|
+
throw new Error(`Unknown agent model provider: ${selected.provider}`);
|
|
128
|
+
return {
|
|
129
|
+
descriptor: selected,
|
|
130
|
+
model: provider.create(selected.modelId),
|
|
131
|
+
...provider.normalizeUsage && { normalizeUsage: provider.normalizeUsage }
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
snapshot(input) {
|
|
135
|
+
return AgentModelRegistrySnapshotSchema.parse({
|
|
136
|
+
schemaVersion: 1,
|
|
137
|
+
source: input.source,
|
|
138
|
+
observedAt: input.observedAt,
|
|
139
|
+
models: Object.fromEntries(descriptors.entries())
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function validateAgentModelSnapshot(input, policy) {
|
|
145
|
+
if (!Number.isSafeInteger(policy.maxAgeMs) || policy.maxAgeMs < 0) {
|
|
146
|
+
throw new TypeError("maxAgeMs must be a non-negative safe integer");
|
|
147
|
+
}
|
|
148
|
+
const snapshot = AgentModelRegistrySnapshotSchema.parse(input);
|
|
149
|
+
const now = policy.now?.() ?? new Date;
|
|
150
|
+
const age = now.getTime() - new Date(snapshot.observedAt).getTime();
|
|
151
|
+
if (age < 0 || age > policy.maxAgeMs) {
|
|
152
|
+
throw new Error(`Agent model snapshot from ${snapshot.source} is stale`);
|
|
153
|
+
}
|
|
154
|
+
return snapshot;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export { AgentModelCapabilitySchema, AgentModelDescriptorSchema, AgentModelRegistrySnapshotSchema, AgentModelPriceSchema, AgentModelMetricSchema, AgentModelPopularitySchema, AgentModelCatalogEntrySchema, AgentModelCatalogSchema, AgentModelSelectionSchema, AgentModelSearchInputSchema, AgentModelSearchResultSchema, searchAgentModelCatalog, createMemoryAgentModelSelectionStore, defineModelRegistry, validateAgentModelSnapshot };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// src/agent-runtime/contained-files.ts
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { lstat, open, readdir, realpath } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
async function readContainedUtf8File(absolute, maxBytes) {
|
|
6
|
+
const handle = await open(absolute, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
7
|
+
try {
|
|
8
|
+
const metadata = await handle.stat();
|
|
9
|
+
if (!metadata.isFile())
|
|
10
|
+
throw new Error("Contained path is not a regular file");
|
|
11
|
+
if (metadata.size > maxBytes)
|
|
12
|
+
throw new Error("Contained file exceeds byte budget");
|
|
13
|
+
const buffer = Buffer.alloc(metadata.size);
|
|
14
|
+
let offset = 0;
|
|
15
|
+
while (offset < buffer.byteLength) {
|
|
16
|
+
const { bytesRead } = await handle.read(buffer, offset, buffer.byteLength - offset, offset);
|
|
17
|
+
if (bytesRead === 0)
|
|
18
|
+
break;
|
|
19
|
+
offset += bytesRead;
|
|
20
|
+
}
|
|
21
|
+
if (offset !== metadata.size)
|
|
22
|
+
throw new Error("Contained file changed while being read");
|
|
23
|
+
return {
|
|
24
|
+
text: new TextDecoder("utf-8", { fatal: true }).decode(buffer),
|
|
25
|
+
bytes: offset,
|
|
26
|
+
mode: metadata.mode
|
|
27
|
+
};
|
|
28
|
+
} finally {
|
|
29
|
+
await handle.close();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function inside(root, target) {
|
|
33
|
+
const relative = path.relative(root, target);
|
|
34
|
+
return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
|
|
35
|
+
}
|
|
36
|
+
async function walkContainedFiles(input) {
|
|
37
|
+
const scan = await scanContainedFiles({ ...input, symlinks: "refuse" });
|
|
38
|
+
if (scan.truncated)
|
|
39
|
+
throw new Error("Contained file traversal exceeded its bounds");
|
|
40
|
+
return scan.files;
|
|
41
|
+
}
|
|
42
|
+
async function scanContainedFiles(input) {
|
|
43
|
+
const root = await realpath(input.root);
|
|
44
|
+
const files = [];
|
|
45
|
+
let truncated = false;
|
|
46
|
+
let skippedDirectories = 0;
|
|
47
|
+
let skippedSymlinks = 0;
|
|
48
|
+
const visit = async (directory, depth) => {
|
|
49
|
+
if (truncated)
|
|
50
|
+
return;
|
|
51
|
+
if (depth > input.maxDepth) {
|
|
52
|
+
truncated = true;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
56
|
+
entries.sort((left, right) => left.name.localeCompare(right.name));
|
|
57
|
+
for (const entry of entries) {
|
|
58
|
+
const absolute = path.join(directory, entry.name);
|
|
59
|
+
const metadata = await lstat(absolute);
|
|
60
|
+
if (metadata.isSymbolicLink()) {
|
|
61
|
+
if (input.symlinks === "refuse") {
|
|
62
|
+
throw new Error(`Contained file traversal refuses symlink: ${path.relative(root, absolute)}`);
|
|
63
|
+
}
|
|
64
|
+
skippedSymlinks += 1;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (metadata.isDirectory()) {
|
|
68
|
+
const relative = path.relative(root, absolute);
|
|
69
|
+
if (input.excludeDirectory?.(relative)) {
|
|
70
|
+
skippedDirectories += 1;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
await visit(absolute, depth + 1);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!metadata.isFile())
|
|
77
|
+
continue;
|
|
78
|
+
const resolved = await realpath(absolute);
|
|
79
|
+
if (!inside(root, resolved))
|
|
80
|
+
throw new Error("Contained file traversal escaped root");
|
|
81
|
+
if (files.length >= input.maxFiles) {
|
|
82
|
+
truncated = true;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
files.push({ absolute: resolved, relative: path.relative(root, resolved) });
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
await visit(root, 0);
|
|
89
|
+
return { files, truncated, skippedDirectories, skippedSymlinks };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { readContainedUtf8File, walkContainedFiles, scanContainedFiles };
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./index-y2ctppmg.js";
|
|
4
|
-
import {
|
|
5
|
-
projectRuntimeTool,
|
|
6
|
-
projectToolSurface
|
|
2
|
+
projectRuntimeTool
|
|
7
3
|
} from "./index-22by16v6.js";
|
|
8
4
|
|
|
9
5
|
// src/tools/runtime-tool.ts
|
|
@@ -87,44 +83,4 @@ function runtimeToolMountable(definition, assertName = true) {
|
|
|
87
83
|
};
|
|
88
84
|
}
|
|
89
85
|
|
|
90
|
-
|
|
91
|
-
function collectToolSurface({
|
|
92
|
-
surface,
|
|
93
|
-
transport,
|
|
94
|
-
assertUniqueNames = true,
|
|
95
|
-
...collectConfig
|
|
96
|
-
}) {
|
|
97
|
-
const entries = [];
|
|
98
|
-
const append = (entry) => {
|
|
99
|
-
entries.push(entry);
|
|
100
|
-
};
|
|
101
|
-
for (const projected of projectToolSurface(surface, transport, {
|
|
102
|
-
extend: collectConfig.extend,
|
|
103
|
-
flattenUnionInput: collectConfig.flattenUnionInput,
|
|
104
|
-
assertNames: collectConfig.assertNames,
|
|
105
|
-
assertUniqueNames
|
|
106
|
-
})) {
|
|
107
|
-
if (projected.kind === "contract") {
|
|
108
|
-
const mountable = contractToolMountable(projected, collectConfig.extend);
|
|
109
|
-
append({
|
|
110
|
-
kind: "contract",
|
|
111
|
-
service: projected.serviceName,
|
|
112
|
-
action: mountable.method.key,
|
|
113
|
-
mountable,
|
|
114
|
-
projection: projected
|
|
115
|
-
});
|
|
116
|
-
} else {
|
|
117
|
-
append({
|
|
118
|
-
kind: "runtime",
|
|
119
|
-
service: projected.serviceName,
|
|
120
|
-
action: projected.action,
|
|
121
|
-
mountable: runtimeToolMountable(projected.source, false),
|
|
122
|
-
definition: projected.source,
|
|
123
|
-
projection: projected
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return entries;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export { defineRuntimeTool, createRuntimeToolFactory, collectToolSurface };
|
|
86
|
+
export { defineRuntimeTool, createRuntimeToolFactory, runtimeToolMountable };
|
|
@@ -44,6 +44,19 @@ var AgentToolResultPartSchema = z.object({
|
|
|
44
44
|
outcome: z.enum(["success", "error", "interrupted"]),
|
|
45
45
|
output: z.json().optional()
|
|
46
46
|
});
|
|
47
|
+
var AgentToolApprovalRequestPartSchema = z.object({
|
|
48
|
+
type: z.literal("tool-approval-request"),
|
|
49
|
+
approvalId: z.string().min(1),
|
|
50
|
+
callId: z.string().min(1),
|
|
51
|
+
isAutomatic: z.boolean().optional(),
|
|
52
|
+
signature: z.string().min(1).optional()
|
|
53
|
+
});
|
|
54
|
+
var AgentToolApprovalResponsePartSchema = z.object({
|
|
55
|
+
type: z.literal("tool-approval-response"),
|
|
56
|
+
approvalId: z.string().min(1),
|
|
57
|
+
approved: z.boolean(),
|
|
58
|
+
reason: z.string().min(1).optional()
|
|
59
|
+
});
|
|
47
60
|
var AgentOpaquePartSchema = z.object({
|
|
48
61
|
type: z.literal("provider"),
|
|
49
62
|
envelope: AgentProviderEnvelopeSchema
|
|
@@ -59,10 +72,18 @@ var AgentMessagePartSchema = z.discriminatedUnion("type", [
|
|
|
59
72
|
AgentSourcePartSchema,
|
|
60
73
|
AgentToolCallPartSchema,
|
|
61
74
|
AgentToolResultPartSchema,
|
|
75
|
+
AgentToolApprovalRequestPartSchema,
|
|
76
|
+
AgentToolApprovalResponsePartSchema,
|
|
62
77
|
AgentOpaquePartSchema,
|
|
63
78
|
AgentControlPartSchema
|
|
64
79
|
]);
|
|
65
|
-
var AgentMessageRoleSchema = z.enum([
|
|
80
|
+
var AgentMessageRoleSchema = z.enum([
|
|
81
|
+
"user",
|
|
82
|
+
"assistant",
|
|
83
|
+
"tool",
|
|
84
|
+
"system",
|
|
85
|
+
"summary"
|
|
86
|
+
]);
|
|
66
87
|
var AgentMessageStatusSchema = z.enum([
|
|
67
88
|
"committed",
|
|
68
89
|
"streaming",
|
|
@@ -256,4 +277,4 @@ var AgentRunMetricsSchema = z.object({
|
|
|
256
277
|
ttftMs: z.number().nonnegative().optional()
|
|
257
278
|
});
|
|
258
279
|
|
|
259
|
-
export { AgentRecordIdSchema, AgentRecordVersionSchema, AgentTimestampSchema, AgentJsonObjectSchema, AgentProviderEnvelopeSchema, AgentTextPartSchema, AgentReasoningPartSchema, AgentFilePartSchema, AgentSourcePartSchema, AgentToolCallPartSchema, AgentToolResultPartSchema, AgentOpaquePartSchema, AgentControlPartSchema, AgentMessagePartSchema, AgentMessageRoleSchema, AgentMessageStatusSchema, AgentMessageSchema, AgentAssistantPlaceholderSchema, AgentRunStateSchema, AgentRunQueuePrioritySchema, AgentTerminalReasonSchema, runStateForTerminalReason, AgentProvenanceSchema, AgentUsageValueSchema, AgentCostValueSchema, AgentUsageSchema, AgentRunSchema, AgentSnapshotSchema, AgentRunMetricsSchema };
|
|
280
|
+
export { AgentRecordIdSchema, AgentRecordVersionSchema, AgentTimestampSchema, AgentJsonObjectSchema, AgentProviderEnvelopeSchema, AgentTextPartSchema, AgentReasoningPartSchema, AgentFilePartSchema, AgentSourcePartSchema, AgentToolCallPartSchema, AgentToolResultPartSchema, AgentToolApprovalRequestPartSchema, AgentToolApprovalResponsePartSchema, AgentOpaquePartSchema, AgentControlPartSchema, AgentMessagePartSchema, AgentMessageRoleSchema, AgentMessageStatusSchema, AgentMessageSchema, AgentAssistantPlaceholderSchema, AgentRunStateSchema, AgentRunQueuePrioritySchema, AgentTerminalReasonSchema, runStateForTerminalReason, AgentProvenanceSchema, AgentUsageValueSchema, AgentCostValueSchema, AgentUsageSchema, AgentRunSchema, AgentSnapshotSchema, AgentRunMetricsSchema };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
runtimeToolMountable
|
|
3
|
+
} from "./index-wwst0td5.js";
|
|
4
|
+
import {
|
|
5
|
+
contractToolMountable
|
|
6
|
+
} from "./index-kg9xx84n.js";
|
|
7
|
+
import {
|
|
8
|
+
projectToolSurface
|
|
9
|
+
} from "./index-22by16v6.js";
|
|
10
|
+
|
|
11
|
+
// src/tools/surface.ts
|
|
12
|
+
function collectToolSurface({
|
|
13
|
+
surface,
|
|
14
|
+
transport,
|
|
15
|
+
assertUniqueNames = true,
|
|
16
|
+
...collectConfig
|
|
17
|
+
}) {
|
|
18
|
+
const entries = [];
|
|
19
|
+
const append = (entry) => {
|
|
20
|
+
entries.push(entry);
|
|
21
|
+
};
|
|
22
|
+
for (const projected of projectToolSurface(surface, transport, {
|
|
23
|
+
extend: collectConfig.extend,
|
|
24
|
+
flattenUnionInput: collectConfig.flattenUnionInput,
|
|
25
|
+
assertNames: collectConfig.assertNames,
|
|
26
|
+
assertUniqueNames
|
|
27
|
+
})) {
|
|
28
|
+
if (projected.kind === "contract") {
|
|
29
|
+
const mountable = contractToolMountable(projected, collectConfig.extend);
|
|
30
|
+
append({
|
|
31
|
+
kind: "contract",
|
|
32
|
+
service: projected.serviceName,
|
|
33
|
+
action: mountable.method.key,
|
|
34
|
+
mountable,
|
|
35
|
+
projection: projected
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
append({
|
|
39
|
+
kind: "runtime",
|
|
40
|
+
service: projected.serviceName,
|
|
41
|
+
action: projected.action,
|
|
42
|
+
mountable: runtimeToolMountable(projected.source, false),
|
|
43
|
+
definition: projected.source,
|
|
44
|
+
projection: projected
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return entries;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { collectToolSurface };
|
package/dist/index.js
CHANGED
|
@@ -1492,13 +1492,18 @@ function observeRealtimeRequestPhase(trace, phase) {
|
|
|
1492
1492
|
phase,
|
|
1493
1493
|
elapsedMs: performance.now() - trace.startedAt
|
|
1494
1494
|
};
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
if (
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1495
|
+
const observers = trace.observeRequest && trace.observeRequest !== trace.observeClient ? [trace.observeClient, trace.observeRequest] : [trace.observeClient ?? trace.observeRequest];
|
|
1496
|
+
for (const observer of observers) {
|
|
1497
|
+
if (!observer)
|
|
1498
|
+
continue;
|
|
1499
|
+
try {
|
|
1500
|
+
const result = observer(observation);
|
|
1501
|
+
if (result)
|
|
1502
|
+
Promise.resolve(result).catch(() => {
|
|
1503
|
+
return;
|
|
1504
|
+
});
|
|
1505
|
+
} catch {}
|
|
1506
|
+
}
|
|
1502
1507
|
}
|
|
1503
1508
|
function socketIoPacketIdentity(data, expected) {
|
|
1504
1509
|
if (typeof data !== "string")
|
|
@@ -1636,7 +1641,7 @@ function bindRealtimeClient(contract, transport, { onRejected, logger } = {}) {
|
|
|
1636
1641
|
if (!definition?.ack) {
|
|
1637
1642
|
throw new Error(`Realtime request "${event}" has no acknowledgement schema`);
|
|
1638
1643
|
}
|
|
1639
|
-
const pending = transport.emitWithAck(event, parsedArgs,
|
|
1644
|
+
const pending = transport.emitWithAck(event, parsedArgs, options);
|
|
1640
1645
|
const trace = realtimeRequestTraces.get(pending);
|
|
1641
1646
|
if (trace)
|
|
1642
1647
|
realtimeRequestTraces.delete(pending);
|
|
@@ -1684,6 +1689,7 @@ function createSocketIOClientInternal(config, onRequestPhase) {
|
|
|
1684
1689
|
let reconnectTimer = null;
|
|
1685
1690
|
const pendingRequestDisconnects = new Set;
|
|
1686
1691
|
const requestTracesByNativeKey = new Map;
|
|
1692
|
+
const observedRequestEngines = new WeakSet;
|
|
1687
1693
|
let startingRequestTrace = null;
|
|
1688
1694
|
const serverDisconnectDelay = config.reconnectOnServerDisconnect ?? 1000;
|
|
1689
1695
|
const connectionListeners = new Set;
|
|
@@ -1701,6 +1707,36 @@ function createSocketIOClientInternal(config, onRequestPhase) {
|
|
|
1701
1707
|
reconnectTimer = null;
|
|
1702
1708
|
}
|
|
1703
1709
|
}
|
|
1710
|
+
function attachRequestPhaseEngineListeners(target) {
|
|
1711
|
+
const engine = target.io.engine;
|
|
1712
|
+
if (!engine || observedRequestEngines.has(engine))
|
|
1713
|
+
return;
|
|
1714
|
+
observedRequestEngines.add(engine);
|
|
1715
|
+
engine.on("packetCreate", (packet) => {
|
|
1716
|
+
if (!startingRequestTrace || packet.type !== "message")
|
|
1717
|
+
return;
|
|
1718
|
+
const identity = socketIoPacketIdentity(packet.data, "event");
|
|
1719
|
+
if (!identity)
|
|
1720
|
+
return;
|
|
1721
|
+
const key = packetIdentityKey(identity);
|
|
1722
|
+
startingRequestTrace.nativeKey = key;
|
|
1723
|
+
requestTracesByNativeKey.set(key, startingRequestTrace);
|
|
1724
|
+
observeRealtimeRequestPhase(startingRequestTrace, "engine-handoff");
|
|
1725
|
+
});
|
|
1726
|
+
engine.on("packet", (packet) => {
|
|
1727
|
+
if (packet.type !== "message")
|
|
1728
|
+
return;
|
|
1729
|
+
const identity = socketIoPacketIdentity(packet.data, "ack");
|
|
1730
|
+
if (!identity)
|
|
1731
|
+
return;
|
|
1732
|
+
const key = packetIdentityKey(identity);
|
|
1733
|
+
const trace = requestTracesByNativeKey.get(key);
|
|
1734
|
+
if (!trace || trace.closed)
|
|
1735
|
+
return;
|
|
1736
|
+
observeRealtimeRequestPhase(trace, "engine-ack-received");
|
|
1737
|
+
requestTracesByNativeKey.delete(key);
|
|
1738
|
+
});
|
|
1739
|
+
}
|
|
1704
1740
|
function openSocket(io) {
|
|
1705
1741
|
if (!desiredConnected || socket)
|
|
1706
1742
|
return;
|
|
@@ -1720,33 +1756,8 @@ function createSocketIOClientInternal(config, onRequestPhase) {
|
|
|
1720
1756
|
});
|
|
1721
1757
|
if (onRequestPhase) {
|
|
1722
1758
|
socket.io.on("open", () => {
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
return;
|
|
1726
|
-
engine.on("packetCreate", (packet) => {
|
|
1727
|
-
if (!startingRequestTrace || packet.type !== "message")
|
|
1728
|
-
return;
|
|
1729
|
-
const identity = socketIoPacketIdentity(packet.data, "event");
|
|
1730
|
-
if (!identity)
|
|
1731
|
-
return;
|
|
1732
|
-
const key = packetIdentityKey(identity);
|
|
1733
|
-
startingRequestTrace.nativeKey = key;
|
|
1734
|
-
requestTracesByNativeKey.set(key, startingRequestTrace);
|
|
1735
|
-
observeRealtimeRequestPhase(startingRequestTrace, "engine-handoff");
|
|
1736
|
-
});
|
|
1737
|
-
engine.on("packet", (packet) => {
|
|
1738
|
-
if (packet.type !== "message")
|
|
1739
|
-
return;
|
|
1740
|
-
const identity = socketIoPacketIdentity(packet.data, "ack");
|
|
1741
|
-
if (!identity)
|
|
1742
|
-
return;
|
|
1743
|
-
const key = packetIdentityKey(identity);
|
|
1744
|
-
const trace = requestTracesByNativeKey.get(key);
|
|
1745
|
-
if (!trace || trace.closed)
|
|
1746
|
-
return;
|
|
1747
|
-
observeRealtimeRequestPhase(trace, "engine-ack-received");
|
|
1748
|
-
requestTracesByNativeKey.delete(key);
|
|
1749
|
-
});
|
|
1759
|
+
if (socket)
|
|
1760
|
+
attachRequestPhaseEngineListeners(socket);
|
|
1750
1761
|
});
|
|
1751
1762
|
}
|
|
1752
1763
|
socket.on("connect", () => notifyConnection(true));
|
|
@@ -1858,11 +1869,12 @@ function createSocketIOClientInternal(config, onRequestPhase) {
|
|
|
1858
1869
|
return true;
|
|
1859
1870
|
},
|
|
1860
1871
|
emitWithAck(event, args, options) {
|
|
1861
|
-
const trace = onRequestPhase ? {
|
|
1872
|
+
const trace = onRequestPhase || options.onPhase ? {
|
|
1862
1873
|
requestId: crypto.randomUUID(),
|
|
1863
1874
|
event,
|
|
1864
1875
|
startedAt: performance.now(),
|
|
1865
|
-
|
|
1876
|
+
observeClient: onRequestPhase,
|
|
1877
|
+
observeRequest: options.onPhase,
|
|
1866
1878
|
closed: false
|
|
1867
1879
|
} : undefined;
|
|
1868
1880
|
const closeTrace = (phase) => {
|
|
@@ -1881,6 +1893,8 @@ function createSocketIOClientInternal(config, onRequestPhase) {
|
|
|
1881
1893
|
realtimeRequestTraces.set(pending2, trace);
|
|
1882
1894
|
return pending2;
|
|
1883
1895
|
}
|
|
1896
|
+
if (trace)
|
|
1897
|
+
attachRequestPhaseEngineListeners(active);
|
|
1884
1898
|
const pending = new Promise((resolve, reject) => {
|
|
1885
1899
|
let settled = false;
|
|
1886
1900
|
const finish = (result) => {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ModelMessage, streamText, type ToolSet } from 'ai';
|
|
2
|
+
/**
|
|
3
|
+
* AI SDK derives conditional `toolsContext` requirements from each structural tool in a generic
|
|
4
|
+
* set. AgentRuntime receives that set after canonical mounting, so TypeScript cannot prove the
|
|
5
|
+
* conditional options object even though the SDK validates it at this adapter boundary.
|
|
6
|
+
*/
|
|
7
|
+
export declare function streamAgentTextBoundary<TOOLS extends ToolSet>(options: unknown): ReturnType<typeof streamText<TOOLS, never>>;
|
|
8
|
+
/**
|
|
9
|
+
* `modelMessageSchema` in the current AI SDK runtime validates approval requests but strips their
|
|
10
|
+
* optional signature even though the public type and approval verifier require it. Validate the
|
|
11
|
+
* full message first, then restore only the already-validated string at this SDK adapter boundary.
|
|
12
|
+
*/
|
|
13
|
+
export declare function modelMessageWithApprovalSignature(input: unknown): ModelMessage;
|
|
14
|
+
//# sourceMappingURL=ai-sdk-typed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-typed.d.ts","sourceRoot":"","sources":["../../src/internal/ai-sdk-typed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAsB,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAGrF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,OAAO,EAC3D,OAAO,EAAE,OAAO,GACf,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAI7C;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAsB9E"}
|
package/dist/node.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
createHandler,
|
|
6
6
|
createSocketIOServer,
|
|
7
7
|
createUnixClientTransport
|
|
8
|
-
} from "./index-
|
|
8
|
+
} from "./index-444747ww.js";
|
|
9
9
|
import {
|
|
10
10
|
createImplement,
|
|
11
11
|
createImplementRegistry,
|
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
createScopedImplementRegistry,
|
|
15
15
|
implement,
|
|
16
16
|
implementRegistry
|
|
17
|
-
} from "./index-
|
|
18
|
-
import"./index-
|
|
17
|
+
} from "./index-d1jsvkyk.js";
|
|
18
|
+
import"./index-p1be103g.js";
|
|
19
19
|
import"./index-7b188kmz.js";
|
|
20
20
|
import {
|
|
21
21
|
ShutdownOptionsSchema,
|
|
@@ -24,8 +24,7 @@ import {
|
|
|
24
24
|
ShutdownStatusSchema,
|
|
25
25
|
createServerLifecycle
|
|
26
26
|
} from "./index-dk6e56g0.js";
|
|
27
|
-
import"./index-
|
|
28
|
-
import"./index-qyrqwr4c.js";
|
|
27
|
+
import"./index-x18ndp4p.js";
|
|
29
28
|
import {
|
|
30
29
|
AppError,
|
|
31
30
|
appError,
|
|
@@ -36,6 +35,7 @@ import {
|
|
|
36
35
|
rateLimited,
|
|
37
36
|
unauthorized
|
|
38
37
|
} from "./index-0w9abg87.js";
|
|
38
|
+
import"./index-qyrqwr4c.js";
|
|
39
39
|
import"./index-6k1937bx.js";
|
|
40
40
|
// src/server/node.ts
|
|
41
41
|
import { serve } from "srvx/node";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
redact,
|
|
11
11
|
sanitizePayload,
|
|
12
12
|
truncatePreview
|
|
13
|
-
} from "../index-
|
|
13
|
+
} from "../index-zh459sfj.js";
|
|
14
14
|
import {
|
|
15
15
|
getRequestContext,
|
|
16
16
|
getTraceId,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
setRequestError,
|
|
22
22
|
setRequestUser,
|
|
23
23
|
wrapInRequestContext
|
|
24
|
-
} from "../index-
|
|
24
|
+
} from "../index-p1be103g.js";
|
|
25
25
|
import {
|
|
26
26
|
childSpan,
|
|
27
27
|
createTraceContext,
|
|
@@ -30,11 +30,11 @@ import {
|
|
|
30
30
|
recordedErrorMessage,
|
|
31
31
|
resolvePropagationContext,
|
|
32
32
|
resolveTraceContext
|
|
33
|
-
} from "../index-
|
|
33
|
+
} from "../index-x18ndp4p.js";
|
|
34
|
+
import"../index-0w9abg87.js";
|
|
34
35
|
import {
|
|
35
36
|
isRecord
|
|
36
37
|
} from "../index-qyrqwr4c.js";
|
|
37
|
-
import"../index-0w9abg87.js";
|
|
38
38
|
import"../index-6k1937bx.js";
|
|
39
39
|
|
|
40
40
|
// src/observability/audit.ts
|
|
@@ -27,6 +27,11 @@ export type RealtimeRequestPhaseHook = (event: RealtimeRequestPhaseEvent) => voi
|
|
|
27
27
|
export interface RealtimeRequestOptions {
|
|
28
28
|
/** Maximum acknowledgement wait in milliseconds. Must be finite and > 0. */
|
|
29
29
|
timeoutMs: number;
|
|
30
|
+
/**
|
|
31
|
+
* Observe phases for this invocation only. Correlate through the hook's local
|
|
32
|
+
* closure; no caller metadata is retained or transmitted with the request.
|
|
33
|
+
*/
|
|
34
|
+
onPhase?: RealtimeRequestPhaseHook;
|
|
30
35
|
}
|
|
31
36
|
export declare class RealtimeRequestTimeoutError extends Error {
|
|
32
37
|
readonly code = "REALTIME_REQUEST_TIMEOUT";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/realtime/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,4EAA4E;AAC5E,eAAO,MAAM,0BAA0B;;;;;;EAMrC,CAAC;AAEH,gFAAgF;AAChF,eAAO,MAAM,+BAA+B;;;;;;;;;;;kBAOjC,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACxF,MAAM,MAAM,wBAAwB,GAAG,CACrC,KAAK,EAAE,yBAAyB,KAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/realtime/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,4EAA4E;AAC5E,eAAO,MAAM,0BAA0B;;;;;;EAMrC,CAAC;AAEH,gFAAgF;AAChF,eAAO,MAAM,+BAA+B;;;;;;;;;;;kBAOjC,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACxF,MAAM,MAAM,wBAAwB,GAAG,CACrC,KAAK,EAAE,yBAAyB,KAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YAAY,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAK3C;CACF;AAED,qBAAa,gCAAiC,SAAQ,KAAK;IACzD,QAAQ,CAAC,IAAI,mCAAmC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,YAAY,KAAK,EAAE,MAAM,EAIxB;CACF;AAED,qBAAa,0CAA2C,SAAQ,KAAK;IACnE,QAAQ,CAAC,IAAI,8CAA8C;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,YAAY,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAIxC;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,IAAI,+BAA+B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IAEtD,YACE,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,sBAAsB,EAAE,EAOlC;CACF"}
|