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.
Files changed (165) hide show
  1. package/benchmark-packages/automationbench/RESOURCES.md +27 -0
  2. package/benchmark-packages/automationbench/resources.mjs +86 -0
  3. package/benchmark-packages/shared-tree/README.md +14 -0
  4. package/benchmark-packages/shared-tree/import.mjs +39 -0
  5. package/dist/scripts/canary-automation-resources.js +86 -0
  6. package/dist/scripts/canary-automation-resources.js.map +1 -0
  7. package/dist/scripts/canary-resource-empty-daemon.js +195 -0
  8. package/dist/scripts/canary-resource-empty-daemon.js.map +1 -0
  9. package/dist/scripts/canary-resources.js +89 -0
  10. package/dist/scripts/canary-resources.js.map +1 -0
  11. package/dist/scripts/check-architecture.js +6 -5
  12. package/dist/scripts/check-architecture.js.map +1 -1
  13. package/dist/scripts/resource-space-sampler.js +83 -0
  14. package/dist/scripts/resource-space-sampler.js.map +1 -0
  15. package/dist/src/adapters/providers/shared.js +0 -1
  16. package/dist/src/adapters/providers/shared.js.map +1 -1
  17. package/dist/src/backends/harbor/backend.js +5 -1
  18. package/dist/src/backends/harbor/backend.js.map +1 -1
  19. package/dist/src/backends/harbor/resource-admission.js +23 -0
  20. package/dist/src/backends/harbor/resource-admission.js.map +1 -0
  21. package/dist/src/cli/commands/resources.js +23 -0
  22. package/dist/src/cli/commands/resources.js.map +1 -0
  23. package/dist/src/cli/main.js +2 -0
  24. package/dist/src/cli/main.js.map +1 -1
  25. package/dist/src/control-plane/remote-offer-contract.js +11 -2
  26. package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
  27. package/dist/src/control-plane/remote-result-transport.js +10 -0
  28. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  29. package/dist/src/control-plane/remote-work-coordinator.js +4 -1
  30. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  31. package/dist/src/control-plane/remote-work-inputs.js +16 -4
  32. package/dist/src/control-plane/remote-work-inputs.js.map +1 -1
  33. package/dist/src/control-plane/remote-worker-client.js +22 -0
  34. package/dist/src/control-plane/remote-worker-client.js.map +1 -1
  35. package/dist/src/control-plane/remote-worker-codecs.js +1 -1
  36. package/dist/src/control-plane/remote-worker-codecs.js.map +1 -1
  37. package/dist/src/control-plane/remote-worker-protocol.js +12 -2
  38. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  39. package/dist/src/control-plane/remote-worker-runner.js +1 -1
  40. package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
  41. package/dist/src/control-plane/remote-workers.js +2 -1
  42. package/dist/src/control-plane/remote-workers.js.map +1 -1
  43. package/dist/src/domain/validation.js +41 -6
  44. package/dist/src/domain/validation.js.map +1 -1
  45. package/dist/src/evals/benchmark-adapter-manifest.js +4 -0
  46. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
  47. package/dist/src/evals/benchmark-candidate.js +11 -3
  48. package/dist/src/evals/benchmark-candidate.js.map +1 -1
  49. package/dist/src/evals/eval-result-builder.js +22 -1
  50. package/dist/src/evals/eval-result-builder.js.map +1 -1
  51. package/dist/src/evals/index.js +1 -0
  52. package/dist/src/evals/index.js.map +1 -1
  53. package/dist/src/evals/planned-execution.js +5 -14
  54. package/dist/src/evals/planned-execution.js.map +1 -1
  55. package/dist/src/evals/request.js +9 -0
  56. package/dist/src/evals/request.js.map +1 -1
  57. package/dist/src/evals/resource-eval-lifecycle.js +31 -0
  58. package/dist/src/evals/resource-eval-lifecycle.js.map +1 -0
  59. package/dist/src/evals/resource-legacy-export.js +57 -0
  60. package/dist/src/evals/resource-legacy-export.js.map +1 -0
  61. package/dist/src/evals/service.js +5 -20
  62. package/dist/src/evals/service.js.map +1 -1
  63. package/dist/src/evals/task-resources.js +12 -4
  64. package/dist/src/evals/task-resources.js.map +1 -1
  65. package/dist/src/evals/trial-bundle-files.js +81 -0
  66. package/dist/src/evals/trial-bundle-files.js.map +1 -0
  67. package/dist/src/evals/trial-import.js +7 -78
  68. package/dist/src/evals/trial-import.js.map +1 -1
  69. package/dist/src/foundation/durable-json.js +33 -0
  70. package/dist/src/foundation/durable-json.js.map +1 -0
  71. package/dist/src/foundation/index.js +2 -0
  72. package/dist/src/foundation/index.js.map +1 -1
  73. package/dist/src/foundation/resource-image-references.js +52 -0
  74. package/dist/src/foundation/resource-image-references.js.map +1 -0
  75. package/dist/src/images/gc.js +2 -2
  76. package/dist/src/images/gc.js.map +1 -1
  77. package/dist/src/images/registry.js +27 -2
  78. package/dist/src/images/registry.js.map +1 -1
  79. package/dist/src/resources/api.js +207 -0
  80. package/dist/src/resources/api.js.map +1 -0
  81. package/dist/src/resources/bundle.js +117 -0
  82. package/dist/src/resources/bundle.js.map +1 -0
  83. package/dist/src/resources/evidence.js +93 -0
  84. package/dist/src/resources/evidence.js.map +1 -0
  85. package/dist/src/resources/gc.js +123 -0
  86. package/dist/src/resources/gc.js.map +1 -0
  87. package/dist/src/resources/index.js +14 -0
  88. package/dist/src/resources/index.js.map +1 -0
  89. package/dist/src/resources/materialize.js +143 -0
  90. package/dist/src/resources/materialize.js.map +1 -0
  91. package/dist/src/resources/object-store.js +191 -0
  92. package/dist/src/resources/object-store.js.map +1 -0
  93. package/dist/src/resources/oci-layer-validation.js +202 -0
  94. package/dist/src/resources/oci-layer-validation.js.map +1 -0
  95. package/dist/src/resources/oci-provider.js +101 -0
  96. package/dist/src/resources/oci-provider.js.map +1 -0
  97. package/dist/src/resources/oci-registry-bundle.js +253 -0
  98. package/dist/src/resources/oci-registry-bundle.js.map +1 -0
  99. package/dist/src/resources/protocol.js +222 -0
  100. package/dist/src/resources/protocol.js.map +1 -0
  101. package/dist/src/resources/result-retention.js +93 -0
  102. package/dist/src/resources/result-retention.js.map +1 -0
  103. package/dist/src/resources/role-context.js +54 -0
  104. package/dist/src/resources/role-context.js.map +1 -0
  105. package/dist/src/resources/stats.js +36 -0
  106. package/dist/src/resources/stats.js.map +1 -0
  107. package/dist/src/resources/store.js +310 -0
  108. package/dist/src/resources/store.js.map +1 -0
  109. package/dist/src/resources/tasks.js +153 -0
  110. package/dist/src/resources/tasks.js.map +1 -0
  111. package/dist/src/resources/transfer.js +162 -0
  112. package/dist/src/resources/transfer.js.map +1 -0
  113. package/dist/src/resources/views.js +130 -0
  114. package/dist/src/resources/views.js.map +1 -0
  115. package/dist/src/trajectories/analysis.js +31 -9
  116. package/dist/src/trajectories/analysis.js.map +1 -1
  117. package/dist/src/trajectories/chunk-projection.js +24 -11
  118. package/dist/src/trajectories/chunk-projection.js.map +1 -1
  119. package/dist/src/trajectories/contract.js +4 -0
  120. package/dist/src/trajectories/contract.js.map +1 -1
  121. package/dist/src/trajectories/dsh-chunk-contract.js +2 -2
  122. package/dist/src/trajectories/dsh-chunk-contract.js.map +1 -1
  123. package/dist/src/trajectories/dsh-contract.js +114 -17
  124. package/dist/src/trajectories/dsh-contract.js.map +1 -1
  125. package/dist/src/trajectories/embedded-stream.js +95 -0
  126. package/dist/src/trajectories/embedded-stream.js.map +1 -0
  127. package/dist/src/trajectories/events-chunk-drill.js +40 -0
  128. package/dist/src/trajectories/events-chunk-drill.js.map +1 -1
  129. package/dist/src/trajectories/events-page.js +43 -3
  130. package/dist/src/trajectories/events-page.js.map +1 -1
  131. package/dist/src/trajectories/format.js +3 -7
  132. package/dist/src/trajectories/format.js.map +1 -1
  133. package/dist/src/trajectories/index.js +1 -1
  134. package/dist/src/trajectories/index.js.map +1 -1
  135. package/dist/src/trajectories/providers/deepseek-codec.js +134 -0
  136. package/dist/src/trajectories/providers/deepseek-codec.js.map +1 -0
  137. package/dist/src/trajectories/providers/deepseek.js +32 -20
  138. package/dist/src/trajectories/providers/deepseek.js.map +1 -1
  139. package/dist/src/trajectories/request-attempt.js +16 -3
  140. package/dist/src/trajectories/request-attempt.js.map +1 -1
  141. package/dist/src/trajectories/store.js +28 -13
  142. package/dist/src/trajectories/store.js.map +1 -1
  143. package/dist/src/trajectories/stream-reader.js +12 -4
  144. package/dist/src/trajectories/stream-reader.js.map +1 -1
  145. package/dist/src/trajectories/surface-fold.js +26 -6
  146. package/dist/src/trajectories/surface-fold.js.map +1 -1
  147. package/dist/src/trajectories/unstarted-tool-repair.js +65 -0
  148. package/dist/src/trajectories/unstarted-tool-repair.js.map +1 -0
  149. package/dist/src/workers/remote-harbor-work-spec.js +9 -3
  150. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
  151. package/dist/src/workers/remote-harbor-worker.js +24 -9
  152. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  153. package/docs/resource-storage.zh-CN.md +95 -0
  154. package/docs/schemas/execution-provider-status.schema.json +20 -0
  155. package/docs/schemas/hitch-resource-dataset-v2.schema.json +590 -0
  156. package/docs/schemas/hitch-resource-lock-v1.schema.json +341 -0
  157. package/docs/schemas/hitch-resource-plan-v1.schema.json +423 -0
  158. package/docs/schemas/hitch-resource-selection-v1.schema.json +608 -0
  159. package/docs/schemas/hitch-tree-v1.schema.json +75 -0
  160. package/docs/schemas/remote-harbor-work-spec.schema.json +47 -3
  161. package/docs/schemas/remote-work-offer.schema.json +2 -1
  162. package/docs/schemas/remote-worker-registration.schema.json +20 -0
  163. package/docs/schemas/trajectory-analysis.schema.json +17 -3
  164. package/package.json +9 -3
  165. 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":"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"}
@@ -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
- const fold = new IncrementalSurfaceFold();
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":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,WAAW,EACX,aAAa,EACb,YAAY,EACZ,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEjG,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AACxC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC;AAEpC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,uBAAuB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB;IACvG,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB;IACvK,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa;IACzG,WAAW,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB;IACvG,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,2BAA2B,EAAE,UAAU;IAC/G,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,yBAAyB,EAAE,2BAA2B;IACzG,uBAAuB,EAAE,yBAAyB,EAAE,WAAW,EAAE,oBAAoB,EAAE,0BAA0B;IACjH,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,iCAAiC;IAC1F,wBAAwB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB;IAC/G,wCAAwC,EAAE,kBAAkB,EAAE,iCAAiC,EAAE,aAAa;IAC9G,wBAAwB,EAAE,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB;CAClI,CAAC,CAAC;AA0DH,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAiC,EACjC,UAAqC,EAAE;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,0BAA0B,CAAC;IAChE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,cAAc,GAAG,4BAA4B,CAAC;IACpD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,uBAAuB,EAAE,CAAC;IAC/E,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,IAAI,MAAM,CAAC,UAAU;QAAE,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,IAAI,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACxC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,WAAW,GAAc,EAAE,CAAC;IAClC,MAAM,cAAc,GAA4C,EAAE,CAAC;IACnE,MAAM,iBAAiB,GAAwB,EAAE,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,gCAAgC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,YAAY,GAAY,IAAI,CAAC;IACjC,IAAI,eAAmC,CAAC;IACxC,IAAI,4BAA4B,GAAG,KAAK,CAAC;IAEzC,MAAM,UAAU,GAAG,CAAC,GAAW,EAA4B,EAAE,CAAC,CAAC;QAC7D,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG;QACH,cAAc;QACd,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAc,CAAC;QAC7D,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACvE,gBAAgB;QAChB,UAAU;QACV,UAAU;KACX,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,CAAC,KAAmB,EAAE,IAAY,EAAE,IAAY,EAAE,cAA8B,EAAQ,EAAE;QAC/G,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAClC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI;YACJ,IAAI;YACJ,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,GAAG,CAAC,cAAc,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,QAAQ,EAAE,kBAAkB,CAC1B,cAAc,CAAC,OAAO,EACtB,UAAU,CAAC,cAAc,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,EAChD,cAAc,CACf;aACF,CAAC;YACF,YAAY,EAAE,KAAK,CAAC,GAAG;YACvB,gBAAgB,EAAE,IAAI,CAAC,QAAQ;YAC/B,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC;SAClF,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACnE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,UAAU,CAAC,oBAAoB,KAAK,CAAC,GAAG,kCAAkC,EAAE;gBACpF,IAAI,EAAE,yCAAyC;gBAC/C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;YAAE,4BAA4B,GAAG,IAAI,CAAC;QACxE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YACvI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAAC,8BAA8B,KAAK,CAAC,GAAG,KAAM,KAAe,CAAC,OAAO,EAAE,EAAE;gBAC3F,IAAI,EAAE,uCAAuC;gBAC7C,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,MAAM,IAAI,UAAU,CAAC,yCAAyC,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,GAAG,EAAE,EAAE;gBAC9F,IAAI,EAAE,yCAAyC;gBAC/C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,cAAc,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtE,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,WAAW,CACT,WAAW,EACX,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,CACX,CAAC;YACF,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;YACvI,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjF,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,EAC1E,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAChG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,IAAmC;gBACrD,UAAU,EAAE,KAAK,CAAC,SAAwC;gBAC1D,OAAO,EAAE,kBAAkB,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;aAC3F,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3F,IAAI,KAAK;oBAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;YACnD,YAAY,GAAG,kBAAkB,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YACxH,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC;YAC5B,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;SAC7C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;SACrD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,gBAAgB,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACjF,MAAM,MAAM,GAA8B;QACxC,cAAc,EAAE,GAAG;QACnB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,MAAM,EAAE;YACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAC1B,gBAAgB,EAAE,IAAI,CAAC,MAAM;YAC7B,eAAe,EAAE,IAAI,CAAC,KAAK;YAC3B,WAAW,EAAE,IAAI,CAAC,UAAU;YAC5B,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3C;QACD,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE;YACP,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;YAC5D,KAAK;YACL,iBAAiB,EAAE,IAAI,CAAC,eAAe;YACvC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,iBAAiB;YACrC,eAAe,EAAE,cAAc;SAChC;QACD,MAAM,EAAE,WAAW;QACnB,eAAe,EAAE,cAAc;QAC/B,mBAAmB,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9D,QAAQ,EAAE;YACR,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;YAC9D,MAAM,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YACvF,OAAO,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;gBACjG,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,UAAU;YACd,cAAc,EAAE,aAAa;SAC9B;QACD,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;KAC/E,CAAC;IACF,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,QAAgB,EAAE,SAAS,GAAG,gCAAgC;IACjH,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,GAAG,SAAS,6BAA6B,KAAK,iCAAiC,QAAQ,gDAAgD,EAAE;YAC5J,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAiC,EAAE,QAAgB;IAC/E,IAAI,CAAC;QACH,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,gCAAgC;YAAE,MAAM,KAAK,CAAC;QACnG,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC,CAAC,EAAE,CAAC;YACJ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;YAChD,MAAM;YACN,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC;YACjC,QAAQ,EAAE,CAAC;SACZ,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,CAAC,OAAO,sBAAsB,MAAM,EAAE,EAAE;YACnE,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;AACrI,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;IACnD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;WACnE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,UAAU,CAAC,uCAAuC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACzI,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAgC,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;IACnD,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1H,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAmB,EAAE,OAAiC;IACpF,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;IACnD,IAAI,aAAsB,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACpC,aAAa,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACzE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACzC,aAAa,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAClD,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACvJ,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;QACjE,aAAa,GAAG,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC/D,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC9C,aAAa,GAAG,EAAE,GAAG,QAAQ,EAAE,kBAAkB,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,aAAa;QACnB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,yBAAyB,EAAE;gBACzB,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM;gBACnC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5C,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;oBAC/B,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACnC,CAAC;aACH;SACF,CAAC;KACH,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrB,OAAO,gBAAgB,CAAC,SAAS,CAAC;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE;QAClF,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;WACpG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;WACjG,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B;IACjD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,SAAS,CAAC,GAAwB,EAAE,GAAW;IACtD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChF,CAAC"}
@@ -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
- if (type === "block-start") {
34
- const kind = partialStreamKind(chunk.blockType);
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: "data.chunk.delta",
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) {