agent-hitch 0.2.12 → 0.2.14
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/benchmark-packages/automationbench/RESOURCES.md +27 -0
- package/benchmark-packages/automationbench/resources.mjs +86 -0
- package/benchmark-packages/shared-tree/README.md +14 -0
- package/benchmark-packages/shared-tree/import.mjs +39 -0
- package/dist/scripts/canary-automation-resources.js +86 -0
- package/dist/scripts/canary-automation-resources.js.map +1 -0
- package/dist/scripts/canary-resource-empty-daemon.js +195 -0
- package/dist/scripts/canary-resource-empty-daemon.js.map +1 -0
- package/dist/scripts/canary-resources.js +89 -0
- package/dist/scripts/canary-resources.js.map +1 -0
- package/dist/scripts/check-architecture.js +6 -5
- package/dist/scripts/check-architecture.js.map +1 -1
- package/dist/scripts/resource-space-sampler.js +83 -0
- package/dist/scripts/resource-space-sampler.js.map +1 -0
- package/dist/src/adapters/providers/shared.js +0 -1
- package/dist/src/adapters/providers/shared.js.map +1 -1
- package/dist/src/backends/harbor/backend.js +5 -1
- package/dist/src/backends/harbor/backend.js.map +1 -1
- package/dist/src/backends/harbor/resource-admission.js +23 -0
- package/dist/src/backends/harbor/resource-admission.js.map +1 -0
- package/dist/src/cli/commands/resources.js +23 -0
- package/dist/src/cli/commands/resources.js.map +1 -0
- package/dist/src/cli/main.js +2 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/control-plane/remote-offer-contract.js +11 -2
- package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
- package/dist/src/control-plane/remote-result-transport.js +10 -0
- package/dist/src/control-plane/remote-result-transport.js.map +1 -1
- package/dist/src/control-plane/remote-work-coordinator.js +4 -1
- package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
- package/dist/src/control-plane/remote-work-inputs.js +16 -4
- package/dist/src/control-plane/remote-work-inputs.js.map +1 -1
- package/dist/src/control-plane/remote-worker-client.js +22 -0
- package/dist/src/control-plane/remote-worker-client.js.map +1 -1
- package/dist/src/control-plane/remote-worker-codecs.js +1 -1
- package/dist/src/control-plane/remote-worker-codecs.js.map +1 -1
- package/dist/src/control-plane/remote-worker-protocol.js +12 -2
- package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
- package/dist/src/control-plane/remote-worker-runner.js +1 -1
- package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
- package/dist/src/control-plane/remote-workers.js +2 -1
- package/dist/src/control-plane/remote-workers.js.map +1 -1
- package/dist/src/domain/validation.js +41 -6
- package/dist/src/domain/validation.js.map +1 -1
- package/dist/src/evals/benchmark-adapter-manifest.js +4 -0
- package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
- package/dist/src/evals/benchmark-candidate.js +11 -3
- package/dist/src/evals/benchmark-candidate.js.map +1 -1
- package/dist/src/evals/eval-result-builder.js +22 -1
- package/dist/src/evals/eval-result-builder.js.map +1 -1
- package/dist/src/evals/index.js +1 -0
- package/dist/src/evals/index.js.map +1 -1
- package/dist/src/evals/planned-execution.js +5 -14
- package/dist/src/evals/planned-execution.js.map +1 -1
- package/dist/src/evals/request.js +9 -0
- package/dist/src/evals/request.js.map +1 -1
- package/dist/src/evals/resource-eval-lifecycle.js +31 -0
- package/dist/src/evals/resource-eval-lifecycle.js.map +1 -0
- package/dist/src/evals/resource-legacy-export.js +57 -0
- package/dist/src/evals/resource-legacy-export.js.map +1 -0
- package/dist/src/evals/service.js +5 -20
- package/dist/src/evals/service.js.map +1 -1
- package/dist/src/evals/task-resources.js +12 -4
- package/dist/src/evals/task-resources.js.map +1 -1
- package/dist/src/evals/trial-bundle-files.js +81 -0
- package/dist/src/evals/trial-bundle-files.js.map +1 -0
- package/dist/src/evals/trial-import.js +7 -78
- package/dist/src/evals/trial-import.js.map +1 -1
- package/dist/src/foundation/durable-json.js +33 -0
- package/dist/src/foundation/durable-json.js.map +1 -0
- package/dist/src/foundation/index.js +2 -0
- package/dist/src/foundation/index.js.map +1 -1
- package/dist/src/foundation/resource-image-references.js +52 -0
- package/dist/src/foundation/resource-image-references.js.map +1 -0
- package/dist/src/images/gc.js +2 -2
- package/dist/src/images/gc.js.map +1 -1
- package/dist/src/images/registry.js +27 -2
- package/dist/src/images/registry.js.map +1 -1
- package/dist/src/resources/api.js +207 -0
- package/dist/src/resources/api.js.map +1 -0
- package/dist/src/resources/bundle.js +117 -0
- package/dist/src/resources/bundle.js.map +1 -0
- package/dist/src/resources/evidence.js +93 -0
- package/dist/src/resources/evidence.js.map +1 -0
- package/dist/src/resources/gc.js +123 -0
- package/dist/src/resources/gc.js.map +1 -0
- package/dist/src/resources/index.js +14 -0
- package/dist/src/resources/index.js.map +1 -0
- package/dist/src/resources/materialize.js +143 -0
- package/dist/src/resources/materialize.js.map +1 -0
- package/dist/src/resources/object-store.js +191 -0
- package/dist/src/resources/object-store.js.map +1 -0
- package/dist/src/resources/oci-layer-validation.js +202 -0
- package/dist/src/resources/oci-layer-validation.js.map +1 -0
- package/dist/src/resources/oci-provider.js +101 -0
- package/dist/src/resources/oci-provider.js.map +1 -0
- package/dist/src/resources/oci-registry-bundle.js +253 -0
- package/dist/src/resources/oci-registry-bundle.js.map +1 -0
- package/dist/src/resources/protocol.js +222 -0
- package/dist/src/resources/protocol.js.map +1 -0
- package/dist/src/resources/result-retention.js +93 -0
- package/dist/src/resources/result-retention.js.map +1 -0
- package/dist/src/resources/role-context.js +54 -0
- package/dist/src/resources/role-context.js.map +1 -0
- package/dist/src/resources/stats.js +36 -0
- package/dist/src/resources/stats.js.map +1 -0
- package/dist/src/resources/store.js +310 -0
- package/dist/src/resources/store.js.map +1 -0
- package/dist/src/resources/tasks.js +153 -0
- package/dist/src/resources/tasks.js.map +1 -0
- package/dist/src/resources/transfer.js +162 -0
- package/dist/src/resources/transfer.js.map +1 -0
- package/dist/src/resources/views.js +130 -0
- package/dist/src/resources/views.js.map +1 -0
- package/dist/src/trajectories/analysis.js +31 -9
- package/dist/src/trajectories/analysis.js.map +1 -1
- package/dist/src/trajectories/chunk-projection.js +24 -11
- package/dist/src/trajectories/chunk-projection.js.map +1 -1
- package/dist/src/trajectories/contract.js +4 -0
- package/dist/src/trajectories/contract.js.map +1 -1
- package/dist/src/trajectories/dsh-chunk-contract.js +2 -2
- package/dist/src/trajectories/dsh-chunk-contract.js.map +1 -1
- package/dist/src/trajectories/dsh-contract.js +114 -17
- package/dist/src/trajectories/dsh-contract.js.map +1 -1
- package/dist/src/trajectories/embedded-stream.js +95 -0
- package/dist/src/trajectories/embedded-stream.js.map +1 -0
- package/dist/src/trajectories/events-chunk-drill.js +40 -0
- package/dist/src/trajectories/events-chunk-drill.js.map +1 -1
- package/dist/src/trajectories/events-page.js +43 -3
- package/dist/src/trajectories/events-page.js.map +1 -1
- package/dist/src/trajectories/format.js +3 -7
- package/dist/src/trajectories/format.js.map +1 -1
- package/dist/src/trajectories/index.js +1 -1
- package/dist/src/trajectories/index.js.map +1 -1
- package/dist/src/trajectories/providers/deepseek-codec.js +134 -0
- package/dist/src/trajectories/providers/deepseek-codec.js.map +1 -0
- package/dist/src/trajectories/providers/deepseek.js +32 -20
- package/dist/src/trajectories/providers/deepseek.js.map +1 -1
- package/dist/src/trajectories/request-attempt.js +16 -3
- package/dist/src/trajectories/request-attempt.js.map +1 -1
- package/dist/src/trajectories/store.js +28 -13
- package/dist/src/trajectories/store.js.map +1 -1
- package/dist/src/trajectories/stream-reader.js +12 -4
- package/dist/src/trajectories/stream-reader.js.map +1 -1
- package/dist/src/trajectories/surface-fold.js +26 -6
- package/dist/src/trajectories/surface-fold.js.map +1 -1
- package/dist/src/trajectories/unstarted-tool-repair.js +65 -0
- package/dist/src/trajectories/unstarted-tool-repair.js.map +1 -0
- package/dist/src/workers/remote-harbor-work-spec.js +9 -3
- package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
- package/dist/src/workers/remote-harbor-worker.js +24 -9
- package/dist/src/workers/remote-harbor-worker.js.map +1 -1
- package/docs/resource-storage.zh-CN.md +95 -0
- package/docs/schemas/execution-provider-status.schema.json +20 -0
- package/docs/schemas/hitch-resource-dataset-v2.schema.json +590 -0
- package/docs/schemas/hitch-resource-lock-v1.schema.json +341 -0
- package/docs/schemas/hitch-resource-plan-v1.schema.json +423 -0
- package/docs/schemas/hitch-resource-selection-v1.schema.json +608 -0
- package/docs/schemas/hitch-tree-v1.schema.json +75 -0
- package/docs/schemas/remote-harbor-work-spec.schema.json +47 -3
- package/docs/schemas/remote-work-offer.schema.json +2 -1
- package/docs/schemas/remote-worker-registration.schema.json +20 -0
- package/docs/schemas/trajectory-analysis.schema.json +17 -3
- package/package.json +9 -3
- package/test-contracts/hitch-resources-v1.json +197 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, open, rename, rm, statfs } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { canonical, identity, natural, object, parseResource, sha } from "./protocol.js";
|
|
5
|
+
import { parseResourceSelection, preflightResourceTask } from "./tasks.js";
|
|
6
|
+
export function parseResourceDelivery(value) {
|
|
7
|
+
const raw = object(value, ["protocol", "selection", "objects", "images", "plans", "digest"]);
|
|
8
|
+
if (raw.protocol !== "hitch-resource-delivery@1" || !Array.isArray(raw.objects) || !Array.isArray(raw.images) || !Array.isArray(raw.plans))
|
|
9
|
+
throw new TypeError("invalid resource delivery");
|
|
10
|
+
const selection = parseResourceSelection(raw.selection);
|
|
11
|
+
const objects = raw.objects.map(v => { const o = object(v, ["digest", "size"]); return { digest: sha(o.digest), size: natural(o.size) }; });
|
|
12
|
+
if (canonical(objects.map(o => o.digest)) !== canonical([...new Set(objects.map(o => o.digest))].sort()))
|
|
13
|
+
throw new TypeError("delivery objects must be sorted and unique");
|
|
14
|
+
const images = raw.images.map(item => {
|
|
15
|
+
const i = object(item, ["resource", "reference", "configDigest"]), resource = parseResource(i.resource);
|
|
16
|
+
if (resource.kind !== "oci-image" || typeof i.reference !== "string" || !i.reference.endsWith(`@${resource.manifestDigest}`) || /[\s\0]/.test(i.reference))
|
|
17
|
+
throw new TypeError("invalid delivery image");
|
|
18
|
+
return { resource, reference: i.reference, configDigest: sha(i.configDigest) };
|
|
19
|
+
});
|
|
20
|
+
const expectedImages = [...new Set(selection.tasks.flatMap(task => Object.values(task.lock.resources)
|
|
21
|
+
.filter(resource => resource.kind === "oci-image").map(resource => canonical(resource))))].sort((a, b) => a.localeCompare(b));
|
|
22
|
+
if (canonical(images.map(image => canonical(image.resource))) !== canonical(expectedImages))
|
|
23
|
+
throw new TypeError("delivery images must exactly match the sorted unique selection closure");
|
|
24
|
+
const plans = raw.plans.map(v => { const p = object(v, ["taskId", "digest"]); if (typeof p.taskId !== "string")
|
|
25
|
+
throw new TypeError("invalid delivery plan"); return { taskId: p.taskId, digest: sha(p.digest) }; });
|
|
26
|
+
if (canonical(plans.map(p => p.taskId)) !== canonical(selection.tasks.map(t => t.task_id)))
|
|
27
|
+
throw new TypeError("delivery plans do not match selection");
|
|
28
|
+
const { digest, ...body } = raw;
|
|
29
|
+
if (sha(digest) !== identity(raw.protocol, body))
|
|
30
|
+
throw new TypeError("resource delivery digest mismatch");
|
|
31
|
+
return raw;
|
|
32
|
+
}
|
|
33
|
+
export async function createResourceDelivery(store, selection, owner, generation, signal) {
|
|
34
|
+
return store.admission(() => assembleResourceDelivery(store, selection, owner, generation, signal));
|
|
35
|
+
}
|
|
36
|
+
async function assembleResourceDelivery(store, selection, owner, generation, signal) {
|
|
37
|
+
selection = parseResourceSelection(selection);
|
|
38
|
+
const objects = new Map(), images = new Map(), plans = [];
|
|
39
|
+
for (const task of selection.tasks) {
|
|
40
|
+
const checked = await preflightResourceTask(store, task, { owner: `${owner}:${task.task_id}`, generation, platform: selection.manifest.execution.platform, ...(signal ? { signal } : {}) });
|
|
41
|
+
plans.push({ taskId: task.task_id, digest: checked.plan.digest });
|
|
42
|
+
for (const digest of checked.closure.objectDigests)
|
|
43
|
+
objects.set(digest, await store.objects.verify(digest));
|
|
44
|
+
for (const image of checked.closure.images) {
|
|
45
|
+
const resource = task.lock.resources[image.resource];
|
|
46
|
+
if (resource?.kind !== "oci-image")
|
|
47
|
+
throw new Error("delivery image not declared");
|
|
48
|
+
images.set(canonical(resource), { resource, reference: image.reference, configDigest: image.configDigest });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const body = { protocol: "hitch-resource-delivery@1", selection, objects: [...objects].sort(([a], [b]) => a.localeCompare(b)).map(([digest, size]) => ({ digest, size })), images: [...images].sort(([a], [b]) => a.localeCompare(b)).map(([, i]) => i), plans };
|
|
52
|
+
return parseResourceDelivery({ ...body, digest: identity(body.protocol, body) });
|
|
53
|
+
}
|
|
54
|
+
function interruptible(pending, signal) {
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const abort = () => { signal.removeEventListener("abort", abort); reject(signal.reason); };
|
|
57
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
58
|
+
pending.then(value => { signal.removeEventListener("abort", abort); resolve(value); }, error => { signal.removeEventListener("abort", abort); reject(error); });
|
|
59
|
+
if (signal.aborted)
|
|
60
|
+
abort();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async function* boundedRead(reader, item, signal) {
|
|
64
|
+
const opened = Promise.resolve().then(() => { signal.throwIfAborted(); return reader(item, signal); }).then(stream => stream[Symbol.asyncIterator]());
|
|
65
|
+
let finished = false;
|
|
66
|
+
try {
|
|
67
|
+
const iterator = await interruptible(opened, signal);
|
|
68
|
+
while (true) {
|
|
69
|
+
signal.throwIfAborted();
|
|
70
|
+
const next = await interruptible(Promise.resolve(iterator.next()), signal);
|
|
71
|
+
if (next.done) {
|
|
72
|
+
finished = true;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
yield next.value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
// Close late readers too, but never let uncooperative stream cleanup retain the store lock.
|
|
80
|
+
if (!finished)
|
|
81
|
+
void opened.then(iterator => iterator.return?.()).catch(() => { });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** One bounded object stream at a time. Existing bytes are verified, never overwritten. */
|
|
85
|
+
export async function receiveResourceDelivery(store, value, reader, owner, generation, signal) {
|
|
86
|
+
const delivery = parseResourceDelivery(value), limits = store.objects.budget;
|
|
87
|
+
if (delivery.objects.length > limits.maxFiles || delivery.objects.some(o => o.size > limits.maxObjectBytes) || delivery.objects.reduce((n, o) => n + o.size, 0) > limits.maxTotalBytes)
|
|
88
|
+
throw new Error("resource transfer budget exceeded");
|
|
89
|
+
const received = await store.locked(async () => {
|
|
90
|
+
const lease = await store.beginLease(owner, "import"), staging = path.join(store.directory, "staging", lease.id);
|
|
91
|
+
let transferredBytes = 0, missingObjects = 0;
|
|
92
|
+
await mkdir(staging, { recursive: true });
|
|
93
|
+
try {
|
|
94
|
+
for (const item of delivery.objects) {
|
|
95
|
+
signal?.throwIfAborted();
|
|
96
|
+
await store.protect(lease, item.digest);
|
|
97
|
+
const target = store.objects.objectPath(item.digest), existing = await lstat(target).catch(e => { if (e.code !== "ENOENT")
|
|
98
|
+
throw e; return undefined; });
|
|
99
|
+
if (existing) {
|
|
100
|
+
await store.objects.verify(item.digest, item.size);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const quarantine = path.join(store.directory, "quarantine", item.digest.slice(7));
|
|
104
|
+
if (await lstat(quarantine).catch(e => { if (e.code !== "ENOENT")
|
|
105
|
+
throw e; return undefined; })) {
|
|
106
|
+
await store.objects.verify(item.digest, item.size, quarantine);
|
|
107
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
108
|
+
await rename(quarantine, target);
|
|
109
|
+
await rm(path.join(store.directory, "quarantine-index", `${item.digest.slice(7)}.json`), { force: true });
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const space = await statfs(staging, { bigint: true });
|
|
113
|
+
if (space.bsize * space.bavail < BigInt(item.size + limits.minFreeBytes))
|
|
114
|
+
throw new Error("resource transfer free-space reserve exceeded");
|
|
115
|
+
const file = path.join(staging, randomUUID()), output = await open(file, "wx", 0o600);
|
|
116
|
+
let size = 0;
|
|
117
|
+
const timeout = AbortSignal.timeout(120_000), bounded = signal ? AbortSignal.any([signal, timeout]) : timeout;
|
|
118
|
+
try {
|
|
119
|
+
for await (const chunk of boundedRead(reader, item, bounded)) {
|
|
120
|
+
bounded.throwIfAborted();
|
|
121
|
+
size += chunk.byteLength;
|
|
122
|
+
if (size > item.size)
|
|
123
|
+
throw new Error("resource transfer exceeds declared size");
|
|
124
|
+
await output.writeFile(chunk);
|
|
125
|
+
}
|
|
126
|
+
bounded.throwIfAborted();
|
|
127
|
+
await output.sync();
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
await output.close();
|
|
131
|
+
}
|
|
132
|
+
if (size !== item.size)
|
|
133
|
+
throw new Error("resource transfer is truncated");
|
|
134
|
+
await store.objects.verify(item.digest, item.size, file);
|
|
135
|
+
signal?.throwIfAborted();
|
|
136
|
+
await store.objects.publish(file, item.digest, item.size, d => store.protect(lease, d));
|
|
137
|
+
missingObjects++;
|
|
138
|
+
transferredBytes += size;
|
|
139
|
+
}
|
|
140
|
+
return { leaseId: lease.id, transferredBytes, missingObjects };
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
await rm(staging, { recursive: true, force: true });
|
|
144
|
+
}
|
|
145
|
+
}, signal);
|
|
146
|
+
// Producer protection survives failures until an operator confirms recovery.
|
|
147
|
+
const expected = new Set();
|
|
148
|
+
for (const task of delivery.selection.tasks) {
|
|
149
|
+
const checked = await preflightResourceTask(store, task, { owner: `${owner}:${task.task_id}`, generation, platform: delivery.selection.manifest.execution.platform, ...(signal ? { signal } : {}) });
|
|
150
|
+
if (checked.plan.digest !== delivery.plans.find(p => p.taskId === task.task_id)?.digest)
|
|
151
|
+
throw new Error("remote resource plan changed");
|
|
152
|
+
checked.closure.objectDigests.forEach(d => expected.add(d));
|
|
153
|
+
for (const i of checked.closure.images)
|
|
154
|
+
if (!delivery.images.some(e => e.resource.manifestDigest === i.manifestDigest && e.resource.platform === i.platform && e.configDigest === i.configDigest))
|
|
155
|
+
throw new Error("remote OCI config changed");
|
|
156
|
+
}
|
|
157
|
+
if (canonical([...expected].sort()) !== canonical(delivery.objects.map(o => o.digest)))
|
|
158
|
+
throw new Error("delivery contains an incomplete or extraneous closure");
|
|
159
|
+
await store.finishLease(received.leaseId, "ended");
|
|
160
|
+
return received;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../src/resources/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAiB,MAAM,eAAe,CAAC;AAExG,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAA0B,MAAM,YAAY,CAAC;AAUnG,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7F,IAAI,GAAG,CAAC,QAAQ,KAAK,2BAA2B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;IAC7L,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5I,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IAC5K,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxG,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAC1M,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IACjF,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aAClG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAChI,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,wEAAwE,CAAC,CAAC;IAC3L,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrN,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACzJ,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3G,OAAO,GAAkC,CAAC;AAC5C,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAoB,EAAE,SAA4B,EAAE,KAAa,EAAE,UAAkB,EAAE,MAAoB;IACtJ,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AACtG,CAAC;AACD,KAAK,UAAU,wBAAwB,CAAC,KAAoB,EAAE,SAA4B,EAAE,KAAa,EAAE,UAAkB,EAAE,MAAoB;IACjJ,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,EAA8C,EAAE,KAAK,GAA8B,EAAE,CAAC;IACjJ,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5L,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5G,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,2BAAoC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,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,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1Q,OAAO,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC;AAGD,SAAS,aAAa,CAAI,OAAmB,EAAE,MAAmB;IAChE,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChK,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,WAAW,CAAC,MAA4B,EAAE,IAAyC,EAAE,MAAmB;IACtH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtJ,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,4FAA4F;QAC5F,IAAI,CAAC,QAAQ;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAoB,EAAE,KAAc,EAAE,MAA4B,EAAE,KAAa,EAAE,UAAkB,EAAE,MAAoB;IACvK,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7E,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC7O,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC;QAC/J,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,EAAE,cAAc,EAAE,CAAC;gBAAC,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzJ,IAAI,QAAQ,EAAE,CAAC;oBAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,IAAI,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAAC,MAAM,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAAC,SAAS;gBAChR,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAClM,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACpG,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC9G,IAAI,CAAC;oBAAC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;wBAAC,OAAO,CAAC,cAAc,EAAE,CAAC;wBAAC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;wBAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;4BAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;wBAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAAC,CAAC;oBAAC,OAAO,CAAC,cAAc,EAAE,CAAC;oBAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;wBACrR,CAAC;oBAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC;gBACjC,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAC1E,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAAC,MAAM,EAAE,cAAc,EAAE,CAAC;gBACnF,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,cAAc,EAAE,CAAC;gBAAC,gBAAgB,IAAI,IAAI,CAAC;YACtI,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;QACjE,CAAC;gBAAS,CAAC;YAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;IACpE,CAAC,EAAE,MAAM,CAAC,CAAC;IACX,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACzI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAClP,CAAC;IACD,IAAI,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACjK,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,QAAQ,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { chmod, copyFile, lstat, mkdir, readFile, readdir, rename, rm, statfs } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { durableWriteJSON } from "../foundation/index.js";
|
|
6
|
+
import { canonical, hash, object, parseStrictJson, parseTree } from "./protocol.js";
|
|
7
|
+
const names = (directory) => readdir(directory).catch(e => { if (e.code !== "ENOENT")
|
|
8
|
+
throw e; return []; });
|
|
9
|
+
async function verifyView(store, directory, tree) {
|
|
10
|
+
const expected = new Map(tree.entries.map(e => [e.path, e]));
|
|
11
|
+
const visit = async (dir, prefix = "") => {
|
|
12
|
+
if (!(await lstat(dir)).isDirectory())
|
|
13
|
+
throw new Error("descriptor view is not a directory");
|
|
14
|
+
for (const name of await readdir(dir)) {
|
|
15
|
+
const rel = prefix ? `${prefix}/${name}` : name, entry = expected.get(rel);
|
|
16
|
+
if (!entry)
|
|
17
|
+
throw new Error("descriptor view contains extra content");
|
|
18
|
+
expected.delete(rel);
|
|
19
|
+
const file = path.join(dir, name), info = await lstat(file);
|
|
20
|
+
if (entry.kind === "directory")
|
|
21
|
+
await visit(file, rel);
|
|
22
|
+
else if (!info.isFile() || Boolean(info.mode & 0o111) !== entry.executable || await store.objects.verify(entry.digest, entry.size, file) !== entry.size)
|
|
23
|
+
throw new Error("descriptor view changed");
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
await visit(directory);
|
|
27
|
+
if (expected.size)
|
|
28
|
+
throw new Error("descriptor view incomplete");
|
|
29
|
+
}
|
|
30
|
+
/** Bounded cache of small descriptors. Large external bindings never enter it. */
|
|
31
|
+
export async function resourceDescriptorDirectory(store, task) {
|
|
32
|
+
return store.locked(async () => {
|
|
33
|
+
const key = task.sourceTree.manifestDigest.slice(7), ref = path.join(store.directory, "descriptor-views", key), isolated = path.join(store.directory, "view-quarantine", key), tree = await store.objects.readTree(task.sourceTree.manifestDigest);
|
|
34
|
+
const size = tree.entries.reduce((n, e) => n + (e.kind === "file" ? e.size : 0), 0);
|
|
35
|
+
if (size > 32 * 1024 ** 2)
|
|
36
|
+
throw new Error("task descriptor exceeds 32 MiB; declare large inputs as resources");
|
|
37
|
+
if (await lstat(ref).catch(e => { if (e.code !== "ENOENT")
|
|
38
|
+
throw e; return undefined; })) {
|
|
39
|
+
await verifyView(store, ref, tree);
|
|
40
|
+
return ref;
|
|
41
|
+
}
|
|
42
|
+
if (await lstat(isolated).catch(e => { if (e.code !== "ENOENT")
|
|
43
|
+
throw e; return undefined; })) {
|
|
44
|
+
await verifyView(store, isolated, tree);
|
|
45
|
+
await mkdir(path.dirname(ref), { recursive: true });
|
|
46
|
+
await rename(isolated, ref);
|
|
47
|
+
await rm(path.join(store.directory, "view-quarantine-index", `${key}.json`), { force: true });
|
|
48
|
+
return ref;
|
|
49
|
+
}
|
|
50
|
+
let cached = 0;
|
|
51
|
+
const measure = async (dir) => { for (const name of await names(dir)) {
|
|
52
|
+
const file = path.join(dir, name), info = await lstat(file);
|
|
53
|
+
if (info.isDirectory())
|
|
54
|
+
await measure(file);
|
|
55
|
+
else if (info.isFile())
|
|
56
|
+
cached += info.size;
|
|
57
|
+
else
|
|
58
|
+
throw new Error("unsafe descriptor cache entry");
|
|
59
|
+
} };
|
|
60
|
+
await measure(path.dirname(ref));
|
|
61
|
+
await measure(path.dirname(isolated));
|
|
62
|
+
if (cached + size > store.objects.budget.maxViewBytes)
|
|
63
|
+
throw new Error("descriptor view cache budget exceeded; inspect and release unused roots before explicit GC");
|
|
64
|
+
const temp = `${ref}.${randomUUID()}.tmp`;
|
|
65
|
+
await mkdir(temp, { recursive: true, mode: 0o700 });
|
|
66
|
+
try {
|
|
67
|
+
const space = await statfs(temp, { bigint: true });
|
|
68
|
+
if (space.bsize * space.bavail < BigInt(size + store.objects.budget.minFreeBytes))
|
|
69
|
+
throw new Error("descriptor view free-space reserve exceeded");
|
|
70
|
+
for (const entry of tree.entries) {
|
|
71
|
+
const target = path.join(temp, entry.path);
|
|
72
|
+
if (entry.kind === "directory")
|
|
73
|
+
await mkdir(target);
|
|
74
|
+
else {
|
|
75
|
+
await store.objects.verify(entry.digest, entry.size);
|
|
76
|
+
await copyFile(store.objects.objectPath(entry.digest), target, constants.COPYFILE_EXCL);
|
|
77
|
+
await chmod(target, entry.executable ? 0o755 : 0o644);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
await verifyView(store, temp, tree);
|
|
81
|
+
await rename(temp, ref);
|
|
82
|
+
return ref;
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
await rm(temp, { recursive: true, force: true });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/** Caller holds the same store lock used by view creation and root acquisition. */
|
|
90
|
+
export async function planViewGc(store, marked, graceMs) {
|
|
91
|
+
const active = path.join(store.directory, "descriptor-views"), quarantine = path.join(store.directory, "view-quarantine"), index = path.join(store.directory, "view-quarantine-index");
|
|
92
|
+
const isolated = new Map(), eligible = new Map();
|
|
93
|
+
for (const key of await names(quarantine)) {
|
|
94
|
+
if (!/^[a-f0-9]{64}$/.test(key))
|
|
95
|
+
throw new Error("unknown quarantined descriptor view");
|
|
96
|
+
const record = object(parseStrictJson(await readFile(path.join(index, `${key}.json`), "utf8")), ["protocol", "tree", "at"]), tree = parseTree(record.tree);
|
|
97
|
+
if (record.protocol !== "hitch-view-quarantine@1" || hash(canonical(tree)) !== `sha256:${key}` || !Number.isSafeInteger(record.at))
|
|
98
|
+
throw new Error("invalid descriptor quarantine identity");
|
|
99
|
+
await verifyView(store, path.join(quarantine, key), tree);
|
|
100
|
+
isolated.set(key, { tree, at: record.at });
|
|
101
|
+
}
|
|
102
|
+
for (const key of await names(active)) {
|
|
103
|
+
if (!/^[a-f0-9]{64}$/.test(key))
|
|
104
|
+
continue; // Interrupted private staging is retained for explicit recovery.
|
|
105
|
+
const tree = await store.objects.readTree(`sha256:${key}`);
|
|
106
|
+
await verifyView(store, path.join(active, key), tree);
|
|
107
|
+
if (!marked.has(`sha256:${key}`))
|
|
108
|
+
eligible.set(key, tree);
|
|
109
|
+
}
|
|
110
|
+
return async () => {
|
|
111
|
+
for (const [key, record] of isolated) {
|
|
112
|
+
if (marked.has(`sha256:${key}`)) {
|
|
113
|
+
await mkdir(active, { recursive: true });
|
|
114
|
+
await rename(path.join(quarantine, key), path.join(active, key));
|
|
115
|
+
await rm(path.join(index, `${key}.json`));
|
|
116
|
+
}
|
|
117
|
+
else if (Date.now() - record.at >= graceMs) {
|
|
118
|
+
await rm(path.join(quarantine, key), { recursive: true });
|
|
119
|
+
await rm(path.join(index, `${key}.json`));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
for (const [key, tree] of eligible) {
|
|
123
|
+
await mkdir(quarantine, { recursive: true });
|
|
124
|
+
await durableWriteJSON(path.join(index, `${key}.json`), { protocol: "hitch-view-quarantine@1", tree, at: Date.now() });
|
|
125
|
+
await rename(path.join(active, key), path.join(quarantine, key));
|
|
126
|
+
}
|
|
127
|
+
return { quarantined: [...eligible.keys()] };
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=views.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/resources/views.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { HitchError, sha256JSON } from "../foundation/index.js";
|
|
|
2
2
|
import { acceptChunk, chunkGroupKey, chunkSummary, groupHasPartialEvidence, } from "./chunk-projection.js";
|
|
3
3
|
import { defaultCredentialValues, isPublicEventType, mergeRedactionCounts, projectBoundedJson, redactionEntries, sensitivePathValues, } from "./content-projection.js";
|
|
4
4
|
import { canonicalRequestHeader } from "./dsh-contract.js";
|
|
5
|
+
import { iterateEmbeddedAssistantStream } from "./embedded-stream.js";
|
|
5
6
|
import { IncrementalRequestAttemptTracker } from "./request-attempt.js";
|
|
6
7
|
import { scanCanonicalTrajectory } from "./stream-reader.js";
|
|
7
8
|
import { deriveSurfaceMessage, IncrementalSurfaceFold, isSurfaceEvent } from "./surface-fold.js";
|
|
@@ -11,13 +12,16 @@ const DEFAULT_PREVIEW_BYTES = 12 * 1024;
|
|
|
11
12
|
const DEFAULT_TAIL_BYTES = 4 * 1024;
|
|
12
13
|
const KNOWN_EVENT_TYPES = new Set([
|
|
13
14
|
"agent-preset/selected", "agent/inbox/spliced", "approval/asked", "approval/decided", "approval/policy",
|
|
14
|
-
"assistant/chunk", "assistant/message", "command/done", "command/run", "compaction/end", "compaction/prune",
|
|
15
|
+
"assistant/chunk", "assistant/message", "assistant/attempt", "system/message", "developer/message", "command/done", "command/run", "compaction/end", "compaction/prune",
|
|
15
16
|
"compaction/start", "compaction/summary", "feedback/record", "goal/change", "hook/invoked", "hook/result",
|
|
16
17
|
"llm/retry", "llm/retry-started", "permission/preset", "plan/mode", "request/context", "request/header",
|
|
17
18
|
"sandbox/mode", "schedule/change", "session/end-seed", "session/title", "session/title-llm-request", "step/end",
|
|
18
19
|
"step/start", "subagent/descriptor", "todo/write", "tool-workflow/agent-end", "tool-workflow/agent-start",
|
|
19
20
|
"tool-workflow/run-end", "tool-workflow/run-start", "tool/call", "tool/code-dispatch", "tool/code-dispatch-start",
|
|
20
21
|
"tool/result", "turn/end", "turn/start", "user/message", "web/deepseek-search-llm-request",
|
|
22
|
+
"deliverables/presented", "feedback/message-delete", "feedback/message-put", "image/offload", "model/selection",
|
|
23
|
+
"session-log-deepseek/delivery-accepted", "subagent/catalog", "subagent/model-selection-policy", "team/member",
|
|
24
|
+
"team/message/delivered", "team/message/queued", "team/task", "tool/ptc-dispatch", "tool/ptc-dispatch-start", "workspace/changes",
|
|
21
25
|
]);
|
|
22
26
|
/** Build the bounded trajectory analysis schema v1 surface and diagnostic projection in one scan. */
|
|
23
27
|
export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
@@ -29,7 +33,8 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
29
33
|
const redactions = new Map();
|
|
30
34
|
if (source.redactions)
|
|
31
35
|
mergeRedactionCounts(redactions, source.redactions);
|
|
32
|
-
|
|
36
|
+
let fold = new IncrementalSurfaceFold();
|
|
37
|
+
let foldInitialized = false;
|
|
33
38
|
const nodes = [];
|
|
34
39
|
const diagnostics = [];
|
|
35
40
|
const requestHeaders = [];
|
|
@@ -40,6 +45,7 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
40
45
|
const omitted = new Map();
|
|
41
46
|
let latestHeader = null;
|
|
42
47
|
let latestHeaderSeq;
|
|
48
|
+
let hasUnprojectedSurfaceEffects = false;
|
|
43
49
|
const contextFor = (seq) => ({
|
|
44
50
|
runId: source.runId,
|
|
45
51
|
seq,
|
|
@@ -67,7 +73,11 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
67
73
|
...(latestHeaderSeq === undefined ? {} : { request_header_seq: latestHeaderSeq }),
|
|
68
74
|
});
|
|
69
75
|
};
|
|
70
|
-
const scan = await scanCanonicalTrajectory(source, (event) => {
|
|
76
|
+
const scan = await scanCanonicalTrajectory(source, (event, header) => {
|
|
77
|
+
if (!foldInitialized) {
|
|
78
|
+
fold = new IncrementalSurfaceFold(header.version);
|
|
79
|
+
foldInitialized = true;
|
|
80
|
+
}
|
|
71
81
|
if (!isPublicEventType(event.type, credentialValues, pathValues)) {
|
|
72
82
|
throw new HitchError(`trajectory event ${event.seq} has an unsafe public event type`, {
|
|
73
83
|
code: "trajectory_projection_unsafe_event_type",
|
|
@@ -75,8 +85,10 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
75
85
|
});
|
|
76
86
|
}
|
|
77
87
|
const step = eventStep(event);
|
|
88
|
+
if (event.type === "image/offload")
|
|
89
|
+
hasUnprojectedSurfaceEffects = true;
|
|
78
90
|
const requestAttempt = requestAttempts.accept(event);
|
|
79
|
-
if ((event.type === "assistant/message" || event.type === "llm/retry") && step && requestAttempt) {
|
|
91
|
+
if ((event.type === "assistant/message" || event.type === "assistant/attempt" || event.type === "llm/retry") && step && requestAttempt) {
|
|
80
92
|
recordBoundary(event, step.turn, step.step, requestAttempt);
|
|
81
93
|
}
|
|
82
94
|
try {
|
|
@@ -107,6 +119,12 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
107
119
|
increment(omitted, event.type);
|
|
108
120
|
return;
|
|
109
121
|
}
|
|
122
|
+
const data = event.data;
|
|
123
|
+
if ((event.type === "assistant/message" || event.type === "assistant/attempt") && Array.isArray(data.stream) && step && requestAttempt) {
|
|
124
|
+
for (const { chunk, recordIndex } of iterateEmbeddedAssistantStream(data.stream)) {
|
|
125
|
+
acceptChunk(chunkGroups, event, step.turn, step.step, requestAttempt.attempt, requestAttempt.retryId, requestAttempt.retrySeq, chunk, credentialValues, pathValues, redactions, { recordIndex, recordCount: data.stream.length });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
110
128
|
if (isSurfaceEvent(event)) {
|
|
111
129
|
nodes.push({
|
|
112
130
|
seq: event.seq,
|
|
@@ -122,7 +140,7 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
122
140
|
}
|
|
123
141
|
if (event.type === "request/header") {
|
|
124
142
|
const data = event.data;
|
|
125
|
-
latestHeader = projectBoundedJson(canonicalRequestHeader(data.header), contextFor(event.seq), "header");
|
|
143
|
+
latestHeader = projectBoundedJson(canonicalRequestHeader(data.header, header.version), contextFor(event.seq), "header");
|
|
126
144
|
latestHeaderSeq = event.seq;
|
|
127
145
|
requestHeaders.push({ seq: event.seq, header: latestHeader });
|
|
128
146
|
}
|
|
@@ -147,7 +165,7 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
147
165
|
},
|
|
148
166
|
header: latestHeader,
|
|
149
167
|
surface: {
|
|
150
|
-
fidelity: "exact",
|
|
168
|
+
fidelity: hasUnprojectedSurfaceEffects ? "partial" : "exact",
|
|
151
169
|
nodes,
|
|
152
170
|
current_node_seqs: fold.currentNodeSeqs,
|
|
153
171
|
replacements: fold.replacements,
|
|
@@ -158,7 +176,7 @@ export async function projectTrajectoryAnalysis(source, options = {}) {
|
|
|
158
176
|
chunk_summaries: chunkSummaries,
|
|
159
177
|
omitted_event_types: sortedCounts(Object.fromEntries(omitted)),
|
|
160
178
|
coverage: {
|
|
161
|
-
surface: "complete",
|
|
179
|
+
surface: hasUnprojectedSurfaceEffects ? "partial" : "complete",
|
|
162
180
|
chunks: chunkGroups.size === 0 ? "omitted" : hasPartialChunks ? "partial" : "coalesced",
|
|
163
181
|
content: containsExcerpt({ nodes, diagnostics, requestBoundaries, requestHeaders, chunkSummaries })
|
|
164
182
|
? "excerpted"
|
|
@@ -230,10 +248,14 @@ function projectDiagnosticEvent(event, context) {
|
|
|
230
248
|
else if (event.type === "user/message") {
|
|
231
249
|
projectedData = { surface_node_seq: event.seq };
|
|
232
250
|
}
|
|
233
|
-
else if (event.type === "assistant/message" || event.type === "tool/result") {
|
|
234
|
-
const { message: _message, ...metadata } = data;
|
|
251
|
+
else if (event.type === "assistant/message" || event.type === "tool/result" || event.type === "system/message" || event.type === "developer/message") {
|
|
252
|
+
const { message: _message, stream: _stream, ...metadata } = data;
|
|
235
253
|
projectedData = { ...metadata, surface_node_seq: event.seq };
|
|
236
254
|
}
|
|
255
|
+
else if (event.type === "assistant/attempt") {
|
|
256
|
+
const { stream: _stream, ...metadata } = data;
|
|
257
|
+
projectedData = { ...metadata, stream_summary_seq: event.seq };
|
|
258
|
+
}
|
|
237
259
|
else {
|
|
238
260
|
projectedData = data;
|
|
239
261
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../src/trajectories/analysis.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../src/trajectories/analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ const TAIL_BYTES = 4 * 1024;
|
|
|
4
4
|
export function chunkGroupKey(turn, step, attempt) {
|
|
5
5
|
return `${turn}:${step}:${attempt}`;
|
|
6
6
|
}
|
|
7
|
-
export function acceptChunk(groups, event, turn, step, attempt, retryId, retrySeq, chunk, credentialValues, pathValues, redactions) {
|
|
7
|
+
export function acceptChunk(groups, event, turn, step, attempt, retryId, retrySeq, chunk, credentialValues, pathValues, redactions, embedded) {
|
|
8
8
|
const key = chunkGroupKey(turn, step, attempt);
|
|
9
9
|
let group = groups.get(key);
|
|
10
10
|
if (!group) {
|
|
@@ -28,10 +28,15 @@ export function acceptChunk(groups, event, turn, step, attempt, retryId, retrySe
|
|
|
28
28
|
}
|
|
29
29
|
group.lastSeq = event.seq;
|
|
30
30
|
group.count += 1;
|
|
31
|
+
if (embedded)
|
|
32
|
+
group.embeddedRecordCount = embedded.recordCount;
|
|
31
33
|
const type = typeof chunk.type === "string" ? chunk.type : "unknown";
|
|
32
34
|
increment(group.types, type);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
const implicitKind = embedded && !group.openPartialStreams.has(chunk.index)
|
|
36
|
+
? type === "text-delta" ? "text" : type === "reasoning-delta" ? "reasoning" : type === "tool-call-delta" ? "tool_arguments" : undefined
|
|
37
|
+
: undefined;
|
|
38
|
+
if (type === "block-start" || implicitKind) {
|
|
39
|
+
const kind = implicitKind ?? partialStreamKind(chunk.blockType);
|
|
35
40
|
if (kind && Number.isSafeInteger(chunk.index)) {
|
|
36
41
|
const stream = {
|
|
37
42
|
blockIndex: chunk.index,
|
|
@@ -39,15 +44,19 @@ export function acceptChunk(groups, event, turn, step, attempt, retryId, retrySe
|
|
|
39
44
|
kind,
|
|
40
45
|
accumulator: chunkAccumulator(credentialValues, pathValues, redactions),
|
|
41
46
|
sourceCount: 0,
|
|
47
|
+
sourceField: embedded ? `data.stream.${embedded.recordIndex}.delta` : "data.chunk.delta",
|
|
42
48
|
};
|
|
43
49
|
group.partialStreams.push(stream);
|
|
44
50
|
group.openPartialStreams.set(stream.blockIndex, stream);
|
|
45
51
|
}
|
|
46
52
|
}
|
|
47
|
-
if (type === "usage")
|
|
53
|
+
if (type === "usage") {
|
|
48
54
|
group.usage = { seq: event.seq, value: chunk.usage };
|
|
55
|
+
group.usageField = embedded ? `data.stream.${embedded.recordIndex}.chunk.usage` : "data.chunk.usage";
|
|
56
|
+
}
|
|
49
57
|
if (type === "finish") {
|
|
50
58
|
group.finishReason = { seq: event.seq, value: chunk.reason };
|
|
59
|
+
group.finishReasonField = embedded ? `data.stream.${embedded.recordIndex}.chunk.reason` : "data.chunk.reason";
|
|
51
60
|
group.terminalFailure = isTerminalFailure(chunk.reason);
|
|
52
61
|
}
|
|
53
62
|
if (typeof chunk.text === "string") {
|
|
@@ -78,11 +87,12 @@ export function chunkSummary(group, runId, contextFor) {
|
|
|
78
87
|
count: group.count,
|
|
79
88
|
types: sortedCounts(Object.fromEntries(group.types)),
|
|
80
89
|
model_boundary_seq: group.firstSeq,
|
|
90
|
+
...(group.embeddedRecordCount === undefined ? {} : { stream_field: "data.stream", record_count: group.embeddedRecordCount }),
|
|
81
91
|
...(group.usage === undefined ? {} : {
|
|
82
|
-
usage: projectBoundedJson(group.usage.value, contextFor(group.usage.seq), "data.chunk.usage"),
|
|
92
|
+
usage: projectBoundedJson(group.usage.value, contextFor(group.usage.seq), group.usageField ?? "data.chunk.usage"),
|
|
83
93
|
}),
|
|
84
94
|
...(group.finishReason === undefined ? {} : {
|
|
85
|
-
finish_reason: projectBoundedJson(group.finishReason.value, contextFor(group.finishReason.seq), "data.chunk.reason"),
|
|
95
|
+
finish_reason: projectBoundedJson(group.finishReason.value, contextFor(group.finishReason.seq), group.finishReasonField ?? "data.chunk.reason"),
|
|
86
96
|
}),
|
|
87
97
|
};
|
|
88
98
|
if (group.assembled || group.terminalFailure)
|
|
@@ -113,9 +123,10 @@ function partialEvidence(group, runId) {
|
|
|
113
123
|
content: (stream?.accumulator ?? group.emptyPartialAccumulator).excerpt({
|
|
114
124
|
runId,
|
|
115
125
|
seq: stream?.blockStartSeq ?? group.firstSeq,
|
|
116
|
-
field: "data.chunk.delta",
|
|
126
|
+
field: stream?.sourceField ?? (group.embeddedRecordCount === undefined ? "data.chunk.delta" : "data.stream"),
|
|
117
127
|
}),
|
|
118
|
-
source_seq_count: sourceCount,
|
|
128
|
+
source_seq_count: group.embeddedRecordCount === undefined ? sourceCount : Math.min(1, sourceCount),
|
|
129
|
+
...(group.embeddedRecordCount === undefined ? {} : { source_chunk_count: sourceCount }),
|
|
119
130
|
};
|
|
120
131
|
}
|
|
121
132
|
return {
|
|
@@ -127,11 +138,13 @@ function partialEvidence(group, runId) {
|
|
|
127
138
|
content: stream.accumulator.excerpt({
|
|
128
139
|
runId,
|
|
129
140
|
seq: stream.blockStartSeq,
|
|
130
|
-
field:
|
|
141
|
+
field: stream.sourceField,
|
|
131
142
|
}),
|
|
132
|
-
source_seq_count: stream.sourceCount,
|
|
143
|
+
source_seq_count: group.embeddedRecordCount === undefined ? stream.sourceCount : Math.min(1, stream.sourceCount),
|
|
144
|
+
...(group.embeddedRecordCount === undefined ? {} : { source_chunk_count: stream.sourceCount }),
|
|
133
145
|
})),
|
|
134
|
-
source_seq_count: sourceCount,
|
|
146
|
+
source_seq_count: group.embeddedRecordCount === undefined ? sourceCount : Math.min(1, sourceCount),
|
|
147
|
+
...(group.embeddedRecordCount === undefined ? {} : { source_chunk_count: sourceCount }),
|
|
135
148
|
};
|
|
136
149
|
}
|
|
137
150
|
function partialStreamKind(value) {
|