@shpitdev/convex-cliproxy-observability 0.3.6 → 0.3.7

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 (40) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -2
  3. package/dist/capture/content-health.d.ts +4 -1
  4. package/dist/capture/content-health.d.ts.map +1 -1
  5. package/dist/capture/content-health.js +6 -5
  6. package/dist/capture/content-health.js.map +1 -1
  7. package/dist/capture/index.d.ts +21 -0
  8. package/dist/capture/index.d.ts.map +1 -1
  9. package/dist/capture/index.js +53 -0
  10. package/dist/capture/index.js.map +1 -1
  11. package/dist/component/_generated/api.d.ts.map +1 -1
  12. package/dist/component/_generated/api.js.map +1 -1
  13. package/dist/component/_generated/component.d.ts.map +1 -1
  14. package/dist/component/ingest.d.ts +1 -0
  15. package/dist/component/ingest.d.ts.map +1 -1
  16. package/dist/projection.d.ts +6 -3
  17. package/dist/projection.d.ts.map +1 -1
  18. package/dist/projection.js +55 -7
  19. package/dist/projection.js.map +1 -1
  20. package/dist/protocols/body-parts.d.ts +19 -0
  21. package/dist/protocols/body-parts.d.ts.map +1 -0
  22. package/dist/protocols/body-parts.js +56 -0
  23. package/dist/protocols/body-parts.js.map +1 -0
  24. package/dist/protocols/checkpoint.d.ts +16 -1
  25. package/dist/protocols/checkpoint.d.ts.map +1 -1
  26. package/dist/protocols/checkpoint.js +48 -14
  27. package/dist/protocols/checkpoint.js.map +1 -1
  28. package/dist/protocols/index.d.ts +1 -0
  29. package/dist/protocols/index.d.ts.map +1 -1
  30. package/dist/protocols/index.js +1 -0
  31. package/dist/protocols/index.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/capture/content-health.ts +8 -5
  34. package/src/capture/index.ts +74 -0
  35. package/src/component/_generated/api.ts +5 -6
  36. package/src/component/_generated/component.ts +6 -6
  37. package/src/projection.ts +71 -16
  38. package/src/protocols/body-parts.ts +58 -0
  39. package/src/protocols/checkpoint.ts +51 -13
  40. package/src/protocols/index.ts +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.7
4
+
5
+ - Native 0.2.5 stores request, after-auth, non-stream response bodies and single stream callbacks larger than 1 MiB as exact ordered parts instead of dropping them. Parts use consecutive sequences; each record carries `bodyPart: { index, count, offset, totalBytes, totalSha256 }`, every part but the last holds exactly 1 MiB, and readers verify the whole-body digest. Record body, envelope (2 MiB), segment (1408 KiB), sequence/ACK, FULL/WAL and retention bounds are unchanged.
6
+ - The receiver validates split parts alongside unchanged historical records. `/protocols` exports `BodyPartAssembler` for exact reassembly and `stockHookPieces` for block or split-callback replay. Package projection reassembles split bodies up to 8 MiB (`MAX_PROJECTED_SPLIT_BYTES`) from owned segments and rejects a split body interrupted across segments. Larger split bodies stay raw-complete without projection allocating them: a request takes streaming from protocol evidence, and a response or stream body reports `frame_limit`.
7
+ - Source-repository reader fixture `fixtures/body-part-v1.ndjson`: the two exact native 0.2.5 `request` parts of a 1,100,069-byte streamed Responses body, captured through official stock 8.0.23 during private qualification.
8
+ - Native 0.2.5 no longer rejects stock hook callbacks by whole-frame size. Stock header-init frames carry two undecoded base64 request copies; only retained fields are bounded. An unreadable callback marks only the call it names (`unreadable_callback`); without a recoverable request ID it is an unknown loss and never marks unrelated active calls.
9
+ - A split body is admitted all-or-nothing against the unchanged byte pool and 256 shared record slots. Parts share one buffer, so the item is charged that buffer once, 16 KiB per part, and 3 MiB serialization headroom for the one part its writer holds. A rejected body records its exact known loss at one sequence.
10
+ - Content health adds optional `missedCalls`: enrolled calls that could not start a capture scope, with their known request bytes counted lost. Older health senders remain accepted.
11
+ - Deploy receiver 0.3.7 and split-aware readers before native 0.2.5. Readers that do not reassemble parts see partial JSON per record and must not treat them as complete content.
12
+
3
13
  ## 0.3.6
4
14
 
5
15
  - Preserve streamed content in bounded, byte-identical stock hook blocks rather than one durable record per callback. The shared `expandStockHookBlock` helper restores parser boundaries for receiver projection and selected-call readers.
package/README.md CHANGED
@@ -69,7 +69,7 @@ Mount `@shpitdev/convex-cliproxy-observability/convex.config` with `app.use`. Co
69
69
 
70
70
  The host supplies `PrivateCaptureStorage.put/get` and a durable `scheduleProjection` callback. Projection actions call `projectPendingSegments`, rescheduling when `more` is true. Scheduler failure returns 503 after the raw receipt, making exporter retries safe. The host must monitor and recover failed projection actions; persisted raw content and receipts remain independently readable. No TTL or cleanup cron removes calls, receipts or content by default.
71
71
 
72
- The receiver accepts `CaptureSegmentV1` from the `/capture` export: immutable NDJSON batches of up to 256 contiguous observations. A segment is at most 1408 KiB; the outer JSON envelope is at most 2 MiB. Each observation payload is at most 1 MiB. The exporter must persist batch boundaries before retrying. Identical identities and digests deduplicate; changed digests or overlapping ranges conflict.
72
+ The receiver accepts `CaptureSegmentV1` from the `/capture` export: immutable NDJSON batches of up to 256 contiguous observations. A segment is at most 1408 KiB; the outer JSON envelope is at most 2 MiB. Each observation payload is at most 1 MiB; native 0.2.5 splits larger bodies into ordered `bodyPart` records (up to 256) that readers reassemble. The exporter must persist batch boundaries before retrying. Identical identities and digests deduplicate; changed digests or overlapping ranges conflict.
73
73
 
74
74
  ## Reads and evidence
75
75
 
@@ -81,7 +81,7 @@ The receiver accepts `CaptureSegmentV1` from the `/capture` export: immutable ND
81
81
 
82
82
  For `capturePolicy: hook-body-v1`, decode each observation body from base64 and verify `contentBytes`/`contentSha256` before presenting it. Keep callbacks separate for raw evidence; their bytes may be partial JSON or UTF-8. `request_after_auth` is executed-request evidence, not the original client request. `executionModel`, `executionProtocol`, `selectedAuthId` and `selectedAuthIndex` are exact stock fields, not inferred provider or attempt identities. Header collections and opaque auth metadata are excluded. Model payload content is unredacted and must remain private.
83
83
 
84
- `projectCapturedPayloads` reconstructs selected-call content from bounded pages. For `hook-content-block-v1`, verify the whole record body/digest, then use the shared `/protocols` export `expandStockHookBlock(body, stockHookChunkLengths)` before replay. Never treat concatenated bare JSON objects as one frame. Deploy receiver 0.3.6 and compatible readers before the producer. Keep gaps and incomplete capture explicit; an incomplete terminal may have no known provider outcome. Pass `stockHookChunks: true` only for raw stock hook pieces from either hook policy; historical observations already contain canonical framing. Its 16 MiB replay limit is a read-operation bound, not a retention limit. Larger calls remain available through raw event pages. Summary checkpoints retain scalar state and private references for large unfinished frames; immutable segments retain text, reasoning, tools and native usage snapshots.
84
+ `projectCapturedPayloads` reconstructs selected-call content from bounded pages. For `hook-content-block-v1`, verify the whole record body/digest, then use the shared `/protocols` export `expandStockHookBlock(body, stockHookChunkLengths)` before replay. Never treat concatenated bare JSON objects as one frame. Deploy receiver 0.3.7 and compatible readers before the producer. Native 0.2.5 records with `bodyPart` are exact 1 MiB slices of one larger body: feed every validated observation, in sequence order, to `/protocols`' `BodyPartAssembler` and use the body it returns at the final part (it verifies order, offsets, length and SHA-256); `stockHookPieces(observation, body)` returns block callbacks or the single split callback. Bound `BodyPartAssembler(maxBytes)` to the read budget; in a 64 MiB Convex action, 8 MiB (`MAX_PROJECTED_SPLIT_BYTES`, which package projection uses) leaves room to decode the result. Keep gaps and incomplete capture explicit; an incomplete terminal may have no known provider outcome. Pass `stockHookChunks: true` only for raw stock hook pieces from either hook policy; historical observations already contain canonical framing. Its 16 MiB replay limit is a read-operation bound, not a retention limit. Larger calls remain available through raw event pages. Summary checkpoints retain scalar state and private references for large unfinished frames; immutable segments retain text, reasoning, tools and native usage snapshots.
85
85
 
86
86
  ## Provider, tokens and cost
87
87
 
@@ -1,5 +1,6 @@
1
1
  /** Local durable ACK counts. They do not claim remote persistence or projection. */
2
2
  export declare const contentHealthValidator: import("convex/values").VObject<{
3
+ missedCalls?: number | undefined;
3
4
  observedBytes: number;
4
5
  committedBytes: number;
5
6
  lostBytes: number;
@@ -16,11 +17,13 @@ export declare const contentHealthValidator: import("convex/values").VObject<{
16
17
  lostBytes: import("convex/values").VFloat64<number, "required">;
17
18
  unconfirmedBytes: import("convex/values").VFloat64<number, "required">;
18
19
  unknownLosses: import("convex/values").VFloat64<number, "required">;
20
+ /** Native 0.2.5: enrolled calls that could not start a scope. Optional for older senders. */
21
+ missedCalls: import("convex/values").VFloat64<number | undefined, "optional">;
19
22
  streamCallbacks: import("convex/values").VFloat64<number, "required">;
20
23
  incompleteCalls: import("convex/values").VFloat64<number, "required">;
21
24
  capacityRejections: import("convex/values").VFloat64<number, "required">;
22
25
  retainedChargedBytes: import("convex/values").VFloat64<number, "required">;
23
26
  peakChargedBytes: import("convex/values").VFloat64<number, "required">;
24
- }, "required", "observedBytes" | "committedBytes" | "lostBytes" | "unconfirmedBytes" | "unknownLosses" | "streamCallbacks" | "incompleteCalls" | "capacityRejections" | "retainedChargedBytes" | "peakChargedBytes">;
27
+ }, "required", "observedBytes" | "committedBytes" | "lostBytes" | "unconfirmedBytes" | "unknownLosses" | "missedCalls" | "streamCallbacks" | "incompleteCalls" | "capacityRejections" | "retainedChargedBytes" | "peakChargedBytes">;
25
28
  export declare function validContentHealth(value: unknown): boolean;
26
29
  //# sourceMappingURL=content-health.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-health.d.ts","sourceRoot":"","sources":["../../src/capture/content-health.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;oNAWjC,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAY1D"}
1
+ {"version":3,"file":"content-health.d.ts","sourceRoot":"","sources":["../../src/capture/content-health.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;IAMjC,6FAA6F;;;;;;;oOAO7F,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAa1D"}
@@ -6,6 +6,8 @@ export const contentHealthValidator = v.object({
6
6
  lostBytes: v.number(),
7
7
  unconfirmedBytes: v.number(),
8
8
  unknownLosses: v.number(),
9
+ /** Native 0.2.5: enrolled calls that could not start a scope. Optional for older senders. */
10
+ missedCalls: v.optional(v.number()),
9
11
  streamCallbacks: v.number(),
10
12
  incompleteCalls: v.number(),
11
13
  capacityRejections: v.number(),
@@ -18,11 +20,10 @@ export function validContentHealth(value) {
18
20
  if (value === null || typeof value !== "object" || Array.isArray(value))
19
21
  return false;
20
22
  const counters = value;
21
- return (Object.keys(counters).length === Object.keys(contentHealthValidator.fields).length &&
22
- Object.keys(contentHealthValidator.fields).every((key) => {
23
- const n = counters[key];
24
- return typeof n === "number" && Number.isSafeInteger(n) && n >= 0;
25
- }) &&
23
+ const fields = Object.keys(contentHealthValidator.fields);
24
+ return (Object.keys(counters).every((key) => fields.includes(key)) &&
25
+ fields.every((key) => key === "missedCalls" || key in counters) &&
26
+ Object.values(counters).every((n) => typeof n === "number" && Number.isSafeInteger(n) && n >= 0) &&
26
27
  counters.retainedChargedBytes <= counters.peakChargedBytes);
27
28
  }
28
29
  //# sourceMappingURL=content-health.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-health.js","sourceRoot":"","sources":["../../src/capture/content-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC9B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,QAAQ,GAAG,KAAgC,CAAC;IAClD,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,MAAM;QAClF,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACvD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,CAAC,CAAC;QACD,QAAQ,CAAC,oBAA+B,IAAK,QAAQ,CAAC,gBAA2B,CACnF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"content-health.js","sourceRoot":"","sources":["../../src/capture/content-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,6FAA6F;IAC7F,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC9B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,QAAQ,GAAG,KAAgC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,aAAa,IAAI,GAAG,IAAI,QAAQ,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClE;QACA,QAAQ,CAAC,oBAA+B,IAAK,QAAQ,CAAC,gBAA2B,CACnF,CAAC;AACJ,CAAC"}
@@ -1,6 +1,22 @@
1
1
  import type { ExactCorrelation } from "../model-call/index.js";
2
2
  export declare const MAX_ENVELOPE_BYTES: number;
3
3
  export declare const MAX_CONTENT_BYTES: number;
4
+ /** One split body spans at most the producer's 256 shared data-record slots. */
5
+ export declare const MAX_BODY_PARTS = 256;
6
+ /**
7
+ * Native 0.2.5 splits a body larger than `MAX_CONTENT_BYTES` into exact ordered
8
+ * parts with consecutive sequences. Every part but the last holds exactly
9
+ * `MAX_CONTENT_BYTES`; `offset` is `index * MAX_CONTENT_BYTES`. Concatenate in
10
+ * index order and verify `totalBytes`/`totalSha256` (see `/protocols`
11
+ * `BodyPartAssembler`). A split stream callback is one stock callback.
12
+ */
13
+ export type BodyPartV1 = {
14
+ index: number;
15
+ count: number;
16
+ offset: number;
17
+ totalBytes: number;
18
+ totalSha256: string;
19
+ };
4
20
  export type CaptureObservationV1 = {
5
21
  schemaVersion: 1;
6
22
  pluginVersion: string;
@@ -32,6 +48,7 @@ export type CaptureObservationV1 = {
32
48
  observedBodyBytes?: number;
33
49
  bodyFraming?: "stock_json_chunk" | "stock_sse_candidate" | "stock_hook_chunk" | "stock_hook_block";
34
50
  stockHookChunkLengths?: number[];
51
+ bodyPart?: BodyPartV1;
35
52
  lostContentBytes?: number;
36
53
  captureIncomplete?: boolean;
37
54
  contentSha256: string;
@@ -63,6 +80,9 @@ export declare function validateObservation(raw: Uint8Array, expected: {
63
80
  callId: string;
64
81
  digest: string;
65
82
  }>;
83
+ type PartPosition = Pick<CaptureObservationV1, "kind" | "sequence" | "bodyPart">;
84
+ /** True when `next` is the part that must follow `previous` in one split body. */
85
+ export declare function continuesBodyPart(previous: PartPosition, next: PartPosition): boolean;
66
86
  /** One immutable NDJSON segment batches observations: no per-token Convex writes. */
67
87
  export type CaptureSegmentV1 = {
68
88
  schemaVersion: 1;
@@ -89,4 +109,5 @@ export declare function validateSegment(raw: Uint8Array, expected: {
89
109
  identity: string;
90
110
  digest: string;
91
111
  }>;
112
+ export {};
92
113
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,eAAO,MAAM,kBAAkB,QAAkB,CAAC;AAClD,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAC7C,gFAAgF;AAChF,eAAO,MAAM,cAAc,MAAM,CAAC;AASlC;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,cAAc,GAAG,uBAAuB,CAAC;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EACA,SAAS,GACT,oBAAoB,GACpB,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,gBAAgB,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EACV,kBAAkB,GAAG,qBAAqB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IACvF,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AACF,wBAAsB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D;AACD,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,oBAAoB,mBAahE;AACD,wBAAsB,YAAY,CAChC,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,GAAG,YAAY,GAAG,cAAc,GAAG,WAAW,CAAC,mBAO7F;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,oBAAoB,GAAG,UAAU,CAW9D;AACD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;;;;;;GAuPpE;AAgCD,KAAK,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;AACjF,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,WAa3E;AAED,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AACF,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAC7C,wBAAsB,eAAe,CACnC,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;;;;;;;GA2EpE"}
@@ -1,6 +1,8 @@
1
1
  import { expandStockHookBlock } from "../protocols/stock-block.js";
2
2
  export const MAX_ENVELOPE_BYTES = 2 * 1024 * 1024;
3
3
  export const MAX_CONTENT_BYTES = 1024 * 1024;
4
+ /** One split body spans at most the producer's 256 shared data-record slots. */
5
+ export const MAX_BODY_PARTS = 256;
4
6
  const id = /^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,199}$/;
5
7
  const routes = new Set([
6
8
  "GET /v1/models",
@@ -70,6 +72,7 @@ export async function validateObservation(raw, expected) {
70
72
  "correlationConflicts",
71
73
  "stockChunkIndex",
72
74
  "stockHookChunkLengths",
75
+ "bodyPart",
73
76
  "lostContentBytes",
74
77
  "captureIncomplete",
75
78
  "body",
@@ -200,6 +203,8 @@ export async function validateObservation(raw, expected) {
200
203
  !["stock_json_chunk", "stock_sse_candidate", "stock_hook_chunk", "stock_hook_block"].includes(o.bodyFraming))
201
204
  throw new Error("invalid body framing");
202
205
  const body = decodeBody(o);
206
+ if (o.bodyPart !== undefined)
207
+ validateBodyPart(o, body);
203
208
  if (o.bodyFraming === "stock_hook_block") {
204
209
  if (o.capturePolicy !== "hook-content-block-v1" || o.kind !== "stream_chunk")
205
210
  throw new Error("stock block policy required");
@@ -245,6 +250,45 @@ export async function validateObservation(raw, expected) {
245
250
  digest: await sha256(raw),
246
251
  };
247
252
  }
253
+ const partKinds = new Set(["request", "request_after_auth", "response", "stream_chunk"]);
254
+ function validateBodyPart(o, body) {
255
+ const part = o.bodyPart;
256
+ const keys = ["index", "count", "offset", "totalBytes", "totalSha256"];
257
+ if (!part ||
258
+ typeof part !== "object" ||
259
+ Array.isArray(part) ||
260
+ Object.keys(part).length !== keys.length ||
261
+ !keys.every((key) => key in part))
262
+ throw new Error("invalid body part");
263
+ const { index, count, offset, totalBytes, totalSha256 } = part;
264
+ if (o.capturePolicy !== "hook-content-block-v1" ||
265
+ !partKinds.has(o.kind) ||
266
+ ![index, count, offset, totalBytes].every(Number.isSafeInteger) ||
267
+ count < 2 ||
268
+ count > MAX_BODY_PARTS ||
269
+ index < 0 ||
270
+ index >= count ||
271
+ offset !== index * MAX_CONTENT_BYTES ||
272
+ totalBytes <= (count - 1) * MAX_CONTENT_BYTES ||
273
+ totalBytes > count * MAX_CONTENT_BYTES ||
274
+ body.byteLength !== Math.min(MAX_CONTENT_BYTES, totalBytes - offset) ||
275
+ typeof totalSha256 !== "string" ||
276
+ !/^[a-f0-9]{64}$/.test(totalSha256))
277
+ throw new Error("invalid body part");
278
+ }
279
+ /** True when `next` is the part that must follow `previous` in one split body. */
280
+ export function continuesBodyPart(previous, next) {
281
+ const a = previous.bodyPart;
282
+ const b = next.bodyPart;
283
+ return (!!a &&
284
+ !!b &&
285
+ next.kind === previous.kind &&
286
+ next.sequence === previous.sequence + 1 &&
287
+ b.index === a.index + 1 &&
288
+ b.count === a.count &&
289
+ b.totalBytes === a.totalBytes &&
290
+ b.totalSha256 === a.totalSha256);
291
+ }
248
292
  export const MAX_SEGMENT_BYTES = 1408 * 1024;
249
293
  export async function validateSegment(raw, expected) {
250
294
  if (raw.length > MAX_ENVELOPE_BYTES)
@@ -287,6 +331,15 @@ export async function validateSegment(raw, expected) {
287
331
  o.configRevision !== first.configRevision ||
288
332
  (o.kind === "completion" && index !== observations.length - 1)))
289
333
  throw new Error("inconsistent segment lifecycle");
334
+ // Parts of one split body are consecutive; neighbors within a segment must chain.
335
+ for (const [index, o] of observations.entries()) {
336
+ const previous = observations[index - 1];
337
+ if (!previous)
338
+ continue;
339
+ const open = previous.bodyPart && previous.bodyPart.index < previous.bodyPart.count - 1;
340
+ if ((open || (o.bodyPart && o.bodyPart.index > 0)) && !continuesBodyPart(previous, o))
341
+ throw new Error("body part order mismatch");
342
+ }
290
343
  const callId = await callIdentity(first);
291
344
  const identity = await sha256(new TextEncoder().encode(JSON.stringify([
292
345
  envelope.destinationId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capture/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,QAAA,MAAM,OAAO,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,OAAO,CAAC;CACzB,CAAiB,CAAC;AAEnB,eAAO,MAAM,GAAG,EAAE,SAAS,CAAC,OAAO,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAiB,CAAC;AAC9F,eAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,OAAO,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAiB,CAAC;AACrG,eAAO,MAAM,UAAU,EAAqC,EAAE,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlF,QAAA,MAAM,OAAO,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,OAAO,CAAC;CACzB,CAAiB,CAAC;AAEnB,eAAO,MAAM,GAAG,EAAE,SAAS,CAAC,OAAO,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAiB,CAAC;AAC9F,eAAO,MAAM,QAAQ,EAAE,SAAS,CAC9B,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CACnB,CAAC;AAClB,eAAO,MAAM,UAAU,EAAqC,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AASpB,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAGR,MAAa,CAAC;AAEnB,MAAM,CAAC,MAAM,GAAG,GAAgE,MAAa,CAAC;AAC9F,MAAM,CAAC,MAAM,QAAQ,GAAkE,MAAa,CAAC;AACrG,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAKpB,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAGR,MAAa,CAAC;AAEnB,MAAM,CAAC,MAAM,GAAG,GAAgE,MAAa,CAAC;AAC9F,MAAM,CAAC,MAAM,QAAQ,GAGjB,MAAa,CAAC;AAClB,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAC;AAE9C,KAAK,cAAc,CAAC,UAAU,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAC7D,UAAU,SAAS,eAAe,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GAC9D,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GACpE,KAAK,CAAC;AAEZ,KAAK,aAAa,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAAI;KAC3D,GAAG,IAAI,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAC3E,GAAG,GACH,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CAC9C,CAAC;AAEF,KAAK,iBAAiB,CAAC,UAAU,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAChE,UAAU,SAAS,kBAAkB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GACjE,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GACvE,KAAK,CAAC;AAEZ,KAAK,eAAe,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAAI;KAC7D,GAAG,IAAI,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAC9E,GAAG,GACH,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAAI;IAC/E,MAAM,EAAE,eAAe,CAAC,OAAO,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,aAAa,CAAC,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC;CAC9C,CAAC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAC;AAE9C,KAAK,cAAc,CAAC,UAAU,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAC7D,UAAU,SAAS,eAAe,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GAC9D,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GACpE,KAAK,CAAC;AAEZ,KAAK,aAAa,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAAI;KAE1D,GAAG,IAAI,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAC3F,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrC,CAAC;AAEF,KAAK,iBAAiB,CAAC,UAAU,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAChE,UAAU,SAAS,kBAAkB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GACjE,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GACvE,KAAK,CAAC;AAEZ,KAAK,eAAe,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,SAAS,IAAI;KAE5D,GAAG,IAAI,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAC9F,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IAAI;IAC/E,MAAM,EAAE,eAAe,CAAC,OAAO,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,aAAa,CAAC,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC;CAC9C,CAAC"}
@@ -59,6 +59,7 @@ export declare const recordHealth: import("convex/server").RegisteredMutation<"p
59
59
  observedAt: string;
60
60
  } | undefined;
61
61
  content?: {
62
+ missedCalls?: number | undefined;
62
63
  observedBytes: number;
63
64
  committedBytes: number;
64
65
  lostBytes: number;
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/component/ingest.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgLhB,CAAC;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;GAmD3B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;iBAclC,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EvB,CAAC"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/component/ingest.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgLhB,CAAC;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;GAmD3B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;iBAclC,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EvB,CAAC"}
@@ -1,13 +1,15 @@
1
1
  import type { GenericActionCtx, GenericDataModel } from "convex/server";
2
2
  import type { CliproxyObservability } from "./client.js";
3
3
  import { type PrivateCaptureStorage } from "./content/index.js";
4
- /** Project at most two immutable segments. Host schedules the next page when `more` is true. */
5
- export declare function projectPendingSegments(ctx: Pick<GenericActionCtx<GenericDataModel>, "runQuery" | "runMutation">, options: {
4
+ type ProjectionContext = Pick<GenericActionCtx<GenericDataModel>, "runQuery" | "runMutation">;
5
+ type ProjectionOptions = {
6
6
  client: CliproxyObservability;
7
7
  storage: PrivateCaptureStorage;
8
8
  destinationId: string;
9
9
  callId: string;
10
- }): Promise<{
10
+ };
11
+ /** Project at most two immutable segments. Host schedules the next page when `more` is true. */
12
+ export declare function projectPendingSegments(ctx: ProjectionContext, options: ProjectionOptions): Promise<{
11
13
  progressed: boolean;
12
14
  more: boolean;
13
15
  waitingForGap?: undefined;
@@ -16,4 +18,5 @@ export declare function projectPendingSegments(ctx: Pick<GenericActionCtx<Generi
16
18
  more: boolean;
17
19
  waitingForGap: boolean;
18
20
  }>;
21
+ export {};
19
22
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAmB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAIjF,gGAAgG;AAChG,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,EACzE,OAAO,EAAE;IACP,MAAM,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;;;;;;;;GAoFF"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAmB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AASjF,KAAK,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC;AAC9F,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA2CF,gGAAgG;AAChG,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;;;;;;;;GA4F9F"}
@@ -1,6 +1,42 @@
1
1
  import { resolveCallBlob } from "./content/index.js";
2
- import { sha256 } from "./capture/index.js";
3
- import { applyObservation } from "./protocols/checkpoint.js";
2
+ import { decodeBody, sha256 } from "./capture/index.js";
3
+ import { MAX_PROJECTED_SPLIT_BYTES, applyObservation, } from "./protocols/checkpoint.js";
4
+ import { BodyPartAssembler } from "./protocols/body-parts.js";
5
+ const segmentLines = (content) => new TextDecoder("utf-8", { fatal: true }).decode(content).split("\n").filter(Boolean);
6
+ /**
7
+ * A split body spans several immutable segments and projection pages. Re-read
8
+ * its owned segments from the first part and return the exact verified body.
9
+ */
10
+ async function reassembleSplitBody(ctx, options, fromSegment, final) {
11
+ const parts = new BodyPartAssembler();
12
+ const first = final.sequence - final.bodyPart.index;
13
+ let after = fromSegment - 1;
14
+ while (after < final.sequence) {
15
+ const page = await ctx.runQuery(options.client.component.queries.pageEventSegments, {
16
+ destinationId: options.destinationId,
17
+ callId: options.callId,
18
+ afterSequence: after,
19
+ limit: 8,
20
+ });
21
+ if (!page.segments.length || page.segments[0].sequence !== after + 1)
22
+ throw new Error("split body segment unavailable");
23
+ for (const segment of page.segments) {
24
+ if (segment.sequence > final.sequence)
25
+ break;
26
+ const content = await resolveCallBlob(options.storage, [segment.reference], segment.reference);
27
+ for (const line of segmentLines(content)) {
28
+ const o = JSON.parse(line);
29
+ if (o.sequence < first || o.sequence > final.sequence)
30
+ continue;
31
+ const whole = await parts.push(o, decodeBody(o));
32
+ if (whole)
33
+ return whole;
34
+ }
35
+ after = segment.throughSequence;
36
+ }
37
+ }
38
+ throw new Error("split body incomplete");
39
+ }
4
40
  /** Project at most two immutable segments. Host schedules the next page when `more` is true. */
5
41
  export async function projectPendingSegments(ctx, options) {
6
42
  const { client, destinationId, callId } = options;
@@ -33,11 +69,23 @@ export async function projectPendingSegments(ctx, options) {
33
69
  break;
34
70
  }
35
71
  const content = await resolveCallBlob(options.storage, [segment.reference], segment.reference);
36
- for (const line of new TextDecoder("utf-8", { fatal: true })
37
- .decode(content)
38
- .split("\n")
39
- .filter(Boolean))
40
- applyObservation(call, checkpoint, JSON.parse(line));
72
+ for (const line of segmentLines(content)) {
73
+ const o = JSON.parse(line);
74
+ const part = o.bodyPart;
75
+ if (part?.index === 0)
76
+ checkpoint.bodyPartSegment = segment.sequence;
77
+ if (part && part.index === part.count - 1) {
78
+ if (checkpoint.bodyPartSegment === undefined)
79
+ throw new Error("split body start missing");
80
+ const whole = part.totalBytes > MAX_PROJECTED_SPLIT_BYTES
81
+ ? null
82
+ : await reassembleSplitBody(ctx, options, checkpoint.bodyPartSegment, o);
83
+ applyObservation(call, checkpoint, o, whole);
84
+ delete checkpoint.bodyPartSegment;
85
+ }
86
+ else
87
+ applyObservation(call, checkpoint, o);
88
+ }
41
89
  through = segment.throughSequence;
42
90
  }
43
91
  if (through === state.projectedThroughSequence)
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAA8B,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,MAAM,EAA6B,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAA6B,MAAM,2BAA2B,CAAC;AAExF,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAyE,EACzE,OAKC;IAED,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;QAC5E,aAAa;QACb,MAAM;KACP,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC1E,aAAa;YACb,MAAM;YACN,aAAa,EAAE,KAAK,CAAC,wBAAwB;YAC7C,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAgB,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,wBAAwB,GAAG,KAAK,CAAC,wBAAwB,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAyB,CAAC;QAC5E,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,OAAO,CAAC,OAAO,EACf,CAAC,UAAU,CAAC,OAAO,CAAC,EACpB,UAAU,CAAC,OAAO,CACnB,CAAC;YACF,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACtF,OAAO,UAAU,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC,wBAAwB,CAAC;QAC7C,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC;gBACrC,aAAa,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,eAAe,CACnC,OAAO,CAAC,OAAO,EACf,CAAC,OAAO,CAAC,SAAS,CAAC,EACnB,OAAO,CAAC,SAAS,CAClB,CAAC;YACF,KAAK,MAAM,IAAI,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACzD,MAAM,CAAC,OAAO,CAAC;iBACf,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;gBAChB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC,CAAC;YAC/E,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,CAAC,wBAAwB;YAC5C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAC3D,+EAA+E;QAC/E,wEAAwE;QACxE,IAAI,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YACtE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG;gBACV,GAAG,EAAE,6BAA6B,aAAa,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,WAAW,MAAM,OAAO;gBACrG,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,WAAW,EAAE,kBAAkB;aAChC,CAAC;YACF,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;YACzB,OAAO,UAAU,CAAC,GAAG,CAAC;QACxB,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAChF,aAAa;YACb,MAAM;YACN,gBAAgB,EAAE,KAAK,CAAC,QAAQ;YAChC,eAAe,EAAE,OAAO;YACxB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACjC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;SAC3C,CAAC,CAAC;QACH,OAAO;YACL,UAAU,EAAE,SAAS,CAAC,SAAS;YAC/B,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC;YAC5D,aAAa;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE;YACrE,aAAa;YACb,MAAM;YACN,gBAAgB,EAAE,KAAK,CAAC,QAAQ;SACjC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type CaptureObservationV1 } from "../capture/index.js";
2
+ /**
3
+ * Reassembles native 0.2.5 split bodies from validated observations read in
4
+ * sequence order. `push` returns a whole observation's body unchanged, nothing
5
+ * for an earlier part, and the exact original body at the final part once its
6
+ * length and SHA-256 match. Interleaved, missing or reordered parts throw.
7
+ */
8
+ export declare class BodyPartAssembler {
9
+ #private;
10
+ readonly maxBytes: number;
11
+ /** `maxBytes` bounds the buffer one split body may allocate. */
12
+ constructor(maxBytes?: number);
13
+ /** A split body has started but its final part has not been pushed. */
14
+ get pending(): boolean;
15
+ push(o: CaptureObservationV1, body: Uint8Array): Promise<Uint8Array | undefined>;
16
+ }
17
+ /** Stock callbacks in a block, or the one callback a split stream body carries. */
18
+ export declare function stockHookPieces(o: Pick<CaptureObservationV1, "bodyPart" | "stockHookChunkLengths">, body: Uint8Array): readonly Uint8Array[];
19
+ //# sourceMappingURL=body-parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-parts.d.ts","sourceRoot":"","sources":["../../src/protocols/body-parts.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B;;;;;GAKG;AACH,qBAAa,iBAAiB;;IAGhB,QAAQ,CAAC,QAAQ;IAD7B,gEAAgE;gBAC3C,QAAQ,SAAqC;IAClE,uEAAuE;IACvE,IAAI,OAAO,IAAI,OAAO,CAErB;IACK,IAAI,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CA0BvF;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,uBAAuB,CAAC,EACnE,IAAI,EAAE,UAAU,GACf,SAAS,UAAU,EAAE,CAEvB"}
@@ -0,0 +1,56 @@
1
+ import { MAX_BODY_PARTS, MAX_CONTENT_BYTES, continuesBodyPart, sha256, } from "../capture/index.js";
2
+ import { expandStockHookBlock } from "./stock-block.js";
3
+ /**
4
+ * Reassembles native 0.2.5 split bodies from validated observations read in
5
+ * sequence order. `push` returns a whole observation's body unchanged, nothing
6
+ * for an earlier part, and the exact original body at the final part once its
7
+ * length and SHA-256 match. Interleaved, missing or reordered parts throw.
8
+ */
9
+ export class BodyPartAssembler {
10
+ maxBytes;
11
+ #open;
12
+ /** `maxBytes` bounds the buffer one split body may allocate. */
13
+ constructor(maxBytes = MAX_BODY_PARTS * MAX_CONTENT_BYTES) {
14
+ this.maxBytes = maxBytes;
15
+ }
16
+ /** A split body has started but its final part has not been pushed. */
17
+ get pending() {
18
+ return this.#open !== undefined;
19
+ }
20
+ async push(o, body) {
21
+ const part = o.bodyPart;
22
+ const open = this.#open;
23
+ if (!part) {
24
+ if (open)
25
+ throw new Error("body part interrupted");
26
+ return body;
27
+ }
28
+ if (part.index === 0) {
29
+ if (open)
30
+ throw new Error("body part interrupted");
31
+ if (part.totalBytes > this.maxBytes)
32
+ throw new Error("body part read limit");
33
+ this.#open = { previous: o, body: new Uint8Array(part.totalBytes), written: 0 };
34
+ }
35
+ else if (!open || !continuesBodyPart(open.previous, o)) {
36
+ throw new Error("body part order mismatch");
37
+ }
38
+ const current = this.#open;
39
+ if (part.offset !== current.written || body.byteLength > part.totalBytes - current.written)
40
+ throw new Error("body part offset mismatch");
41
+ current.body.set(body, part.offset);
42
+ current.written += body.byteLength;
43
+ current.previous = o;
44
+ if (part.index < part.count - 1)
45
+ return undefined;
46
+ this.#open = undefined;
47
+ if (current.written !== part.totalBytes || (await sha256(current.body)) !== part.totalSha256)
48
+ throw new Error("body part digest mismatch");
49
+ return current.body;
50
+ }
51
+ }
52
+ /** Stock callbacks in a block, or the one callback a split stream body carries. */
53
+ export function stockHookPieces(o, body) {
54
+ return o.bodyPart ? [body] : expandStockHookBlock(body, o.stockHookChunkLengths ?? []);
55
+ }
56
+ //# sourceMappingURL=body-parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-parts.js","sourceRoot":"","sources":["../../src/protocols/body-parts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,GAEP,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAGP;IAFrB,KAAK,CAAyE;IAC9E,gEAAgE;IAChE,YAAqB,WAAW,cAAc,GAAG,iBAAiB;QAA7C,aAAQ,GAAR,QAAQ,CAAqC;IAAG,CAAC;IACtE,uEAAuE;IACvE,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IAClC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAuB,EAAE,IAAgB;QAClD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC7E,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAClF,CAAC;aAAM,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAM,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO;YACxF,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW;YAC1F,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAC7B,CAAmE,EACnE,IAAgB;IAEhB,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;AACzF,CAAC"}
@@ -17,6 +17,21 @@ export type ProjectionCheckpoint = {
17
17
  streamed?: boolean;
18
18
  inputSeen?: boolean;
19
19
  chatFinished?: boolean;
20
+ /** First segment of an unfinished split body; projection reassembles from there. */
21
+ bodyPartSegment?: number;
22
+ /** Last part of an unfinished split body; the next observation must continue it. */
23
+ openBodyPart?: Pick<CaptureObservationV1, "kind" | "sequence" | "bodyPart">;
20
24
  };
21
- export declare function applyObservation(call: ModelCallV1, state: ProjectionCheckpoint, o: CaptureObservationV1): void;
25
+ /**
26
+ * Split bodies up to this size are reassembled for scalar projection. Larger ones
27
+ * stay complete in raw segments; projection does not allocate them in a 64 MiB
28
+ * Convex action.
29
+ */
30
+ export declare const MAX_PROJECTED_SPLIT_BYTES: number;
31
+ /**
32
+ * Earlier parts of a split body only advance the sequence. The final part needs
33
+ * the exact reassembled body (`BodyPartAssembler`) as `assembled`, or `null` when
34
+ * the body exceeds `MAX_PROJECTED_SPLIT_BYTES` and its semantics are not projected.
35
+ */
36
+ export declare function applyObservation(call: ModelCallV1, state: ProjectionCheckpoint, o: CaptureObservationV1, assembled?: Uint8Array | null): void;
22
37
  //# sourceMappingURL=checkpoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/protocols/checkpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,KAAK,EAAsB,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,qFAAqF;AACrF,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AA8JF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,oBAAoB,EAC3B,CAAC,EAAE,oBAAoB,GACtB,IAAI,CAwMN"}
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/protocols/checkpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,KAAK,EAAsB,WAAW,EAAE,MAAM,YAAY,CAAC;AAClE,qFAAqF;AACrF,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,YAAY,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;CAC7E,CAAC;AA8JF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,QAAkB,CAAC;AACzD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,oBAAoB,EAC3B,CAAC,EAAE,oBAAoB,EACvB,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,GAC5B,IAAI,CA8NN"}