@shpitdev/convex-cliproxy-observability 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +201 -0
  3. package/README.md +40 -0
  4. package/dist/capture/index.d.ts +79 -0
  5. package/dist/capture/index.d.ts.map +1 -0
  6. package/dist/capture/index.js +182 -0
  7. package/dist/capture/index.js.map +1 -0
  8. package/dist/client.d.ts +129 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +232 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/component/_generated/api.d.ts +12 -0
  13. package/dist/component/_generated/api.d.ts.map +1 -0
  14. package/dist/component/_generated/api.js +7 -0
  15. package/dist/component/_generated/api.js.map +1 -0
  16. package/dist/component/_generated/component.d.ts +17 -0
  17. package/dist/component/_generated/component.d.ts.map +1 -0
  18. package/dist/component/_generated/component.js +3 -0
  19. package/dist/component/_generated/component.js.map +1 -0
  20. package/dist/component/_generated/dataModel.d.ts +8 -0
  21. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  22. package/dist/component/_generated/dataModel.js +3 -0
  23. package/dist/component/_generated/dataModel.js.map +1 -0
  24. package/dist/component/_generated/server.d.ts +21 -0
  25. package/dist/component/_generated/server.d.ts.map +1 -0
  26. package/dist/component/_generated/server.js +11 -0
  27. package/dist/component/_generated/server.js.map +1 -0
  28. package/dist/component/convex.config.d.ts +4 -0
  29. package/dist/component/convex.config.d.ts.map +1 -0
  30. package/dist/component/convex.config.js +4 -0
  31. package/dist/component/convex.config.js.map +1 -0
  32. package/dist/component/ingest.d.ts +64 -0
  33. package/dist/component/ingest.d.ts.map +1 -0
  34. package/dist/component/ingest.js +309 -0
  35. package/dist/component/ingest.js.map +1 -0
  36. package/dist/component/queries.d.ts +136 -0
  37. package/dist/component/queries.d.ts.map +1 -0
  38. package/dist/component/queries.js +219 -0
  39. package/dist/component/queries.js.map +1 -0
  40. package/dist/component/schema.d.ts +159 -0
  41. package/dist/component/schema.d.ts.map +1 -0
  42. package/dist/component/schema.js +74 -0
  43. package/dist/component/schema.js.map +1 -0
  44. package/dist/content/index.d.ts +8 -0
  45. package/dist/content/index.d.ts.map +1 -0
  46. package/dist/content/index.js +41 -0
  47. package/dist/content/index.js.map +1 -0
  48. package/dist/model-call/index.d.ts +120 -0
  49. package/dist/model-call/index.d.ts.map +1 -0
  50. package/dist/model-call/index.js +96 -0
  51. package/dist/model-call/index.js.map +1 -0
  52. package/dist/projection.d.ts +19 -0
  53. package/dist/projection.d.ts.map +1 -0
  54. package/dist/projection.js +83 -0
  55. package/dist/projection.js.map +1 -0
  56. package/dist/protocols/anthropic-messages.d.ts +11 -0
  57. package/dist/protocols/anthropic-messages.d.ts.map +1 -0
  58. package/dist/protocols/anthropic-messages.js +114 -0
  59. package/dist/protocols/anthropic-messages.js.map +1 -0
  60. package/dist/protocols/chat-completions.d.ts +10 -0
  61. package/dist/protocols/chat-completions.d.ts.map +1 -0
  62. package/dist/protocols/chat-completions.js +89 -0
  63. package/dist/protocols/chat-completions.js.map +1 -0
  64. package/dist/protocols/checkpoint.d.ts +20 -0
  65. package/dist/protocols/checkpoint.d.ts.map +1 -0
  66. package/dist/protocols/checkpoint.js +318 -0
  67. package/dist/protocols/checkpoint.js.map +1 -0
  68. package/dist/protocols/content.d.ts +34 -0
  69. package/dist/protocols/content.d.ts.map +1 -0
  70. package/dist/protocols/content.js +40 -0
  71. package/dist/protocols/content.js.map +1 -0
  72. package/dist/protocols/framing.d.ts +20 -0
  73. package/dist/protocols/framing.d.ts.map +1 -0
  74. package/dist/protocols/framing.js +67 -0
  75. package/dist/protocols/framing.js.map +1 -0
  76. package/dist/protocols/index.d.ts +20 -0
  77. package/dist/protocols/index.d.ts.map +1 -0
  78. package/dist/protocols/index.js +139 -0
  79. package/dist/protocols/index.js.map +1 -0
  80. package/dist/protocols/output.d.ts +4 -0
  81. package/dist/protocols/output.d.ts.map +1 -0
  82. package/dist/protocols/output.js +81 -0
  83. package/dist/protocols/output.js.map +1 -0
  84. package/dist/protocols/responses.d.ts +12 -0
  85. package/dist/protocols/responses.d.ts.map +1 -0
  86. package/dist/protocols/responses.js +189 -0
  87. package/dist/protocols/responses.js.map +1 -0
  88. package/dist/protocols/types.d.ts +27 -0
  89. package/dist/protocols/types.d.ts.map +1 -0
  90. package/dist/protocols/types.js +2 -0
  91. package/dist/protocols/types.js.map +1 -0
  92. package/dist/protocols/usage.d.ts +3 -0
  93. package/dist/protocols/usage.d.ts.map +1 -0
  94. package/dist/protocols/usage.js +27 -0
  95. package/dist/protocols/usage.js.map +1 -0
  96. package/dist/protocols/values.d.ts +10 -0
  97. package/dist/protocols/values.d.ts.map +1 -0
  98. package/dist/protocols/values.js +32 -0
  99. package/dist/protocols/values.js.map +1 -0
  100. package/dist/test.d.ts +155 -0
  101. package/dist/test.d.ts.map +1 -0
  102. package/dist/test.js +8 -0
  103. package/dist/test.js.map +1 -0
  104. package/package.json +90 -0
  105. package/src/capture/index.ts +277 -0
  106. package/src/client.ts +286 -0
  107. package/src/component/_generated/api.ts +19 -0
  108. package/src/component/_generated/component.ts +32 -0
  109. package/src/component/_generated/dataModel.ts +15 -0
  110. package/src/component/_generated/server.ts +43 -0
  111. package/src/component/convex.config.ts +3 -0
  112. package/src/component/ingest.ts +328 -0
  113. package/src/component/queries.ts +248 -0
  114. package/src/component/schema.ts +73 -0
  115. package/src/content/index.ts +53 -0
  116. package/src/model-call/index.ts +224 -0
  117. package/src/projection.ts +99 -0
  118. package/src/protocols/anthropic-messages.ts +115 -0
  119. package/src/protocols/chat-completions.ts +94 -0
  120. package/src/protocols/checkpoint.ts +342 -0
  121. package/src/protocols/content.ts +41 -0
  122. package/src/protocols/framing.ts +62 -0
  123. package/src/protocols/index.ts +140 -0
  124. package/src/protocols/output.ts +78 -0
  125. package/src/protocols/responses.ts +188 -0
  126. package/src/protocols/types.ts +26 -0
  127. package/src/protocols/usage.ts +36 -0
  128. package/src/protocols/values.ts +35 -0
  129. package/src/test.ts +16 -0
@@ -0,0 +1,120 @@
1
+ /** Read contract only: storage and ingestion remain independently owned. */
2
+ export type ModelCallSource = "cliproxy" | "openrouter" | "cliproxy_legacy";
3
+ export type ModelCallState = "in_progress" | "succeeded" | "failed" | "aborted" | "rejected" | "interrupted" | "unknown";
4
+ export type EvidenceState = "complete" | "partial" | "unavailable" | "invalid" | "unsupported";
5
+ export type ExactCorrelation = Partial<Record<"requestId" | "runId" | "jobId" | "traceId" | "rootExecutionId" | "opencodeSessionId" | "operationId" | "stepId" | "partId" | "attemptId", string>>;
6
+ export type UsageMeasurement = {
7
+ value: number;
8
+ nativeField: string;
9
+ source: "client_protocol" | "openrouter_span";
10
+ scope: "call";
11
+ unit: "tokens";
12
+ finality: "final" | "partial" | "unknown";
13
+ semanticsVersion: string;
14
+ };
15
+ export type PrivateContentReference = {
16
+ key: string;
17
+ sha256: string;
18
+ byteLength: number;
19
+ contentType: string;
20
+ };
21
+ export type ModelCallV1 = {
22
+ schemaVersion: 1;
23
+ source: ModelCallSource;
24
+ callId: string;
25
+ sourceDocumentId: string;
26
+ gateway: "cliproxy" | "openrouter";
27
+ deploymentId?: string;
28
+ environment?: "dev" | "prod";
29
+ route?: string;
30
+ configRevision?: string;
31
+ authType: "unknown";
32
+ destinationId?: string;
33
+ instanceId?: string;
34
+ pluginBootId?: string;
35
+ executionId?: string;
36
+ sourceTraceId?: string;
37
+ traceId?: string;
38
+ spanId?: string;
39
+ parentSpanId?: string;
40
+ requestModel?: string;
41
+ responseModel?: string;
42
+ providerName?: string;
43
+ streamed?: boolean;
44
+ operation: "generation" | "token_count" | "discovery" | "unknown";
45
+ tokenCount?: number;
46
+ clientProtocol?: "anthropic_messages" | "responses" | "chat_completions" | "unknown";
47
+ state: ModelCallState;
48
+ completionOutcome?: string;
49
+ executionStatusCode?: number;
50
+ protocolTerminal?: string;
51
+ finishReason?: string;
52
+ startTimeUnixNano?: string;
53
+ endTimeUnixNano?: string;
54
+ latencyMs?: number;
55
+ timeToFirstByteMs?: number;
56
+ timeToFirstContentMs?: number;
57
+ timingSource: "plugin_observed" | "openrouter_span" | "unavailable";
58
+ correlation: ExactCorrelation;
59
+ correlationConflicts: string[];
60
+ inputTokens?: number;
61
+ outputTokens?: number;
62
+ totalTokens?: number;
63
+ reasoningTokens?: number;
64
+ cachedInputTokens?: number;
65
+ usage: UsageMeasurement[];
66
+ cost: {
67
+ kind: "unknown";
68
+ } | {
69
+ kind: "provider_billed" | "proxy_reported";
70
+ currency: string;
71
+ total: string;
72
+ };
73
+ attemptDetail: "unavailable";
74
+ capture: {
75
+ raw: EvidenceState;
76
+ projection: EvidenceState;
77
+ usage: EvidenceState;
78
+ preHook: "unavailable";
79
+ projectedThroughSequence: number;
80
+ persistedThroughSequence: number;
81
+ terminalSequence?: number;
82
+ gaps: string[];
83
+ parserVersion: string;
84
+ pluginVersion?: string;
85
+ redactionVersion?: string;
86
+ lastObservedAt?: string;
87
+ };
88
+ receivedAt: number;
89
+ };
90
+ export type ModelCallSummaryV1 = ModelCallV1;
91
+ /** Structural input: there is no runtime dependency on the OpenRouter component. */
92
+ export type OpenRouterSpanInput = {
93
+ _id: string;
94
+ receivedAt: number;
95
+ totalCost?: number;
96
+ openrouterUsageCost?: number;
97
+ traceId?: string;
98
+ spanId?: string;
99
+ parentSpanId?: string;
100
+ requestModel?: string;
101
+ responseModel?: string;
102
+ providerName?: string;
103
+ streamed?: boolean;
104
+ startTimeUnixNano?: string;
105
+ endTimeUnixNano?: string;
106
+ finishReason?: string;
107
+ requestId?: string;
108
+ runId?: string;
109
+ jobId?: string;
110
+ rootExecutionId?: string;
111
+ opencodeSessionId?: string;
112
+ inputTokens?: number;
113
+ outputTokens?: number;
114
+ totalTokens?: number;
115
+ reasoningTokens?: number;
116
+ cachedInputTokens?: number;
117
+ };
118
+ export declare function fromOpenRouterSpan(span: OpenRouterSpanInput): ModelCallV1;
119
+ export declare function fromLegacyCliproxySpan(span: OpenRouterSpanInput): ModelCallV1;
120
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model-call/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ export function fromOpenRouterSpan(span) {
2
+ const correlation = {};
3
+ for (const field of [
4
+ "requestId",
5
+ "runId",
6
+ "jobId",
7
+ "rootExecutionId",
8
+ "opencodeSessionId",
9
+ ]) {
10
+ if (span[field] !== undefined)
11
+ correlation[field] = span[field];
12
+ }
13
+ const usage = [];
14
+ for (const field of [
15
+ "inputTokens",
16
+ "outputTokens",
17
+ "totalTokens",
18
+ "reasoningTokens",
19
+ "cachedInputTokens",
20
+ ]) {
21
+ const value = span[field];
22
+ if (value !== undefined && Number.isSafeInteger(value) && value >= 0)
23
+ usage.push({
24
+ value,
25
+ nativeField: field,
26
+ source: "openrouter_span",
27
+ scope: "call",
28
+ unit: "tokens",
29
+ finality: "unknown",
30
+ semanticsVersion: "stored_openrouter_span_v1",
31
+ });
32
+ }
33
+ return {
34
+ schemaVersion: 1,
35
+ source: "openrouter",
36
+ callId: `openrouter:${span._id}`,
37
+ sourceDocumentId: span._id,
38
+ gateway: "openrouter",
39
+ authType: "unknown",
40
+ traceId: span.traceId,
41
+ spanId: span.spanId,
42
+ parentSpanId: span.parentSpanId,
43
+ requestModel: span.requestModel,
44
+ responseModel: span.responseModel,
45
+ providerName: span.providerName,
46
+ streamed: span.streamed,
47
+ operation: "generation",
48
+ state: "unknown",
49
+ finishReason: span.finishReason,
50
+ startTimeUnixNano: span.startTimeUnixNano,
51
+ endTimeUnixNano: span.endTimeUnixNano,
52
+ timingSource: "openrouter_span",
53
+ correlation,
54
+ correlationConflicts: [],
55
+ inputTokens: span.inputTokens,
56
+ outputTokens: span.outputTokens,
57
+ totalTokens: span.totalTokens,
58
+ reasoningTokens: span.reasoningTokens,
59
+ cachedInputTokens: span.cachedInputTokens,
60
+ usage,
61
+ cost: typeof (span.totalCost ?? span.openrouterUsageCost) === "number" &&
62
+ Number.isFinite(span.totalCost ?? span.openrouterUsageCost) &&
63
+ (span.totalCost ?? span.openrouterUsageCost) >= 0
64
+ ? {
65
+ kind: "proxy_reported",
66
+ currency: "USD",
67
+ total: String(span.totalCost ?? span.openrouterUsageCost),
68
+ }
69
+ : { kind: "unknown" },
70
+ attemptDetail: "unavailable",
71
+ capture: {
72
+ raw: "unavailable",
73
+ projection: "partial",
74
+ usage: usage.length ? "partial" : "unavailable",
75
+ preHook: "unavailable",
76
+ projectedThroughSequence: 0,
77
+ persistedThroughSequence: 0,
78
+ gaps: ["stream_events_and_attempt_detail_unavailable"],
79
+ parserVersion: "openrouter-structural-v1",
80
+ },
81
+ receivedAt: span.receivedAt,
82
+ };
83
+ }
84
+ export function fromLegacyCliproxySpan(span) {
85
+ const call = fromOpenRouterSpan(span);
86
+ return {
87
+ ...call,
88
+ source: "cliproxy_legacy",
89
+ callId: `cliproxy_legacy:${span._id}`,
90
+ gateway: "cliproxy",
91
+ providerName: undefined,
92
+ timingSource: "unavailable",
93
+ cost: { kind: "unknown" },
94
+ };
95
+ }
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model-call/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { GenericActionCtx, GenericDataModel } from "convex/server";
2
+ import type { CliproxyObservability } from "./client.js";
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: {
6
+ client: CliproxyObservability;
7
+ storage: PrivateCaptureStorage;
8
+ destinationId: string;
9
+ callId: string;
10
+ }): Promise<{
11
+ progressed: boolean;
12
+ more: boolean;
13
+ waitingForGap?: undefined;
14
+ } | {
15
+ progressed: boolean;
16
+ more: boolean;
17
+ waitingForGap: boolean;
18
+ }>;
19
+ //# sourceMappingURL=projection.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,83 @@
1
+ import { resolveCallBlob } from "./content/index.js";
2
+ import { sha256 } from "./capture/index.js";
3
+ import { applyObservation } from "./protocols/checkpoint.js";
4
+ /** Project at most two immutable segments. Host schedules the next page when `more` is true. */
5
+ export async function projectPendingSegments(ctx, options) {
6
+ const { client, destinationId, callId } = options;
7
+ const state = await ctx.runQuery(client.component.queries.getProcessingState, {
8
+ destinationId,
9
+ callId,
10
+ });
11
+ if (!state)
12
+ return { progressed: false, more: false };
13
+ try {
14
+ const page = await ctx.runQuery(client.component.queries.pageEventSegments, {
15
+ destinationId,
16
+ callId,
17
+ afterSequence: state.projectedThroughSequence,
18
+ limit: 2,
19
+ });
20
+ const call = JSON.parse(state.summaryJson);
21
+ call.capture.projectedThroughSequence = state.projectedThroughSequence;
22
+ const checkpoint = JSON.parse(state.checkpointJson);
23
+ if (checkpoint.sseBlob) {
24
+ const stored = await resolveCallBlob(options.storage, [checkpoint.sseBlob], checkpoint.sseBlob);
25
+ checkpoint.sse = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(stored));
26
+ delete checkpoint.sseBlob;
27
+ }
28
+ let through = state.projectedThroughSequence;
29
+ let waitingForGap = false;
30
+ for (const segment of page.segments) {
31
+ if (segment.sequence !== through + 1) {
32
+ waitingForGap = true;
33
+ break;
34
+ }
35
+ 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));
41
+ through = segment.throughSequence;
42
+ }
43
+ if (through === state.projectedThroughSequence)
44
+ return { progressed: false, more: false, waitingForGap };
45
+ // A frame can exceed Convex's checkpoint budget. Persist pending framing bytes
46
+ // privately; the bounded component checkpoint owns the exact reference.
47
+ if (checkpoint.sse && checkpoint.sse.pendingBase64.length > 16 * 1024) {
48
+ const bytes = new TextEncoder().encode(JSON.stringify(checkpoint.sse));
49
+ const digest = await sha256(bytes);
50
+ const ref = {
51
+ key: `observability/cliproxy/v2/${destinationId}/${state.instanceId}/${callId}/parser/${digest}.json`,
52
+ sha256: digest,
53
+ byteLength: bytes.length,
54
+ contentType: "application/json",
55
+ };
56
+ await options.storage.put(ref, bytes);
57
+ checkpoint.sseBlob = ref;
58
+ delete checkpoint.sse;
59
+ }
60
+ const committed = await ctx.runMutation(client.component.ingest.commitProjection, {
61
+ destinationId,
62
+ callId,
63
+ expectedRevision: state.revision,
64
+ throughSequence: through,
65
+ summaryJson: JSON.stringify(call),
66
+ checkpointJson: JSON.stringify(checkpoint),
67
+ });
68
+ return {
69
+ progressed: committed.committed,
70
+ more: !committed.committed || (!page.done && !waitingForGap),
71
+ waitingForGap,
72
+ };
73
+ }
74
+ catch (error) {
75
+ await ctx.runMutation(client.component.ingest.recordProjectionFailure, {
76
+ destinationId,
77
+ callId,
78
+ expectedRevision: state.revision,
79
+ });
80
+ throw error;
81
+ }
82
+ }
83
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { RecordValue } from "./types.js";
2
+ export declare function anthropicMessages(messages: unknown): RecordValue[];
3
+ export declare function assembleAnthropicStream(events: RecordValue[]): {
4
+ response: RecordValue;
5
+ invalid: boolean;
6
+ recognized: boolean;
7
+ unsupported: boolean;
8
+ terminal: boolean;
9
+ terminalUsage: boolean;
10
+ };
11
+ //# sourceMappingURL=anthropic-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/protocols/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,EAAE,CAgDlE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE;;;;;;;EA8D5D"}
@@ -0,0 +1,114 @@
1
+ import { append, count, list, object } from "./values.js";
2
+ export function anthropicMessages(messages) {
3
+ const result = [];
4
+ for (const value of list(messages)) {
5
+ const message = object(value);
6
+ if (!Array.isArray(message.content)) {
7
+ result.push(message);
8
+ continue;
9
+ }
10
+ let content = [];
11
+ let tools = [];
12
+ const flush = () => {
13
+ if (content.length || tools.length)
14
+ result.push({
15
+ role: message.role,
16
+ content,
17
+ ...(tools.length ? { tool_calls: tools } : {}),
18
+ });
19
+ content = [];
20
+ tools = [];
21
+ };
22
+ for (const raw of message.content) {
23
+ const block = object(raw);
24
+ if (block.type === "tool_use") {
25
+ tools.push({
26
+ id: block.id,
27
+ type: "function",
28
+ function: {
29
+ name: block.name,
30
+ arguments: typeof block.partial_json === "string"
31
+ ? block.partial_json
32
+ : JSON.stringify(block.input),
33
+ },
34
+ });
35
+ }
36
+ else if (block.type === "tool_result") {
37
+ flush();
38
+ result.push({
39
+ role: "tool",
40
+ tool_call_id: block.tool_use_id,
41
+ content: block.content,
42
+ is_error: block.is_error,
43
+ });
44
+ }
45
+ else if (block.type === "text")
46
+ content.push({ type: "text", text: block.text });
47
+ else
48
+ content.push(block);
49
+ }
50
+ flush();
51
+ }
52
+ return result;
53
+ }
54
+ export function assembleAnthropicStream(events) {
55
+ let response = {};
56
+ let invalid = false, recognized = false, unsupported = false, terminal = false, terminalUsage = false;
57
+ const blocks = new Map();
58
+ const argumentsByIndex = new Map();
59
+ for (const event of events) {
60
+ const index = count(event.index);
61
+ if (event.type === "message_start") {
62
+ response = { ...object(event.message) };
63
+ recognized = true;
64
+ terminalUsage = false;
65
+ }
66
+ else if (event.type === "content_block_start" && index !== undefined)
67
+ blocks.set(index, { ...object(event.content_block) });
68
+ else if (event.type === "content_block_delta" && index !== undefined) {
69
+ const block = blocks.get(index);
70
+ const delta = object(event.delta);
71
+ if (!block) {
72
+ invalid = true;
73
+ continue;
74
+ }
75
+ if (!["text_delta", "thinking_delta", "signature_delta", "input_json_delta"].includes(String(delta.type)))
76
+ unsupported = true;
77
+ for (const key of ["text", "thinking", "signature"])
78
+ append(block, key, delta[key]);
79
+ if (typeof delta.partial_json === "string")
80
+ argumentsByIndex.set(index, (argumentsByIndex.get(index) ?? "") + delta.partial_json);
81
+ }
82
+ else if (event.type === "message_delta") {
83
+ Object.assign(response, object(event.delta));
84
+ // Message start and final delta are snapshots of different fields, not increments.
85
+ response.usage = { ...object(response.usage), ...object(event.usage) };
86
+ terminalUsage =
87
+ typeof object(event.delta).stop_reason === "string" &&
88
+ count(object(event.usage).output_tokens) !== undefined;
89
+ }
90
+ else if (event.type === "message_stop")
91
+ terminal = true;
92
+ else if (event.type === "error") {
93
+ response.error = event.error;
94
+ recognized = true;
95
+ terminal = true;
96
+ terminalUsage = false;
97
+ }
98
+ }
99
+ for (const [index, argumentsText] of argumentsByIndex) {
100
+ const block = blocks.get(index);
101
+ if (block) {
102
+ try {
103
+ block.input = JSON.parse(argumentsText);
104
+ }
105
+ catch {
106
+ block.partial_json = argumentsText;
107
+ invalid ||= terminal;
108
+ }
109
+ }
110
+ }
111
+ response.content = [...blocks.entries()].toSorted(([a], [b]) => a - b).map(([, value]) => value);
112
+ return { response, invalid, recognized, unsupported, terminal, terminalUsage };
113
+ }
114
+ //# sourceMappingURL=anthropic-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-messages.js","sourceRoot":"","sources":["../../src/protocols/anthropic-messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RecordValue } from "./types.js";
2
+ export declare function assembleChatStream(events: RecordValue[], done: boolean, stockCompleted?: boolean): {
3
+ response: RecordValue;
4
+ invalid: boolean;
5
+ recognized: boolean;
6
+ unsupported: boolean;
7
+ terminal: boolean;
8
+ terminalUsage: boolean;
9
+ };
10
+ //# sourceMappingURL=chat-completions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-completions.d.ts","sourceRoot":"","sources":["../../src/protocols/chat-completions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,UAAQ;;;;;;;EA2F9F"}
@@ -0,0 +1,89 @@
1
+ import { append, count, list, object } from "./values.js";
2
+ export function assembleChatStream(events, done, stockCompleted = false) {
3
+ const response = {};
4
+ let invalid = false, recognized = false, unsupported = false, terminal = false, terminalUsage = false;
5
+ const choices = new Map();
6
+ const tools = new Map();
7
+ for (const event of events) {
8
+ if (Array.isArray(event.choices) || event.error)
9
+ recognized = true;
10
+ for (const key of ["id", "model", "object"])
11
+ if (event[key] !== undefined)
12
+ response[key] = event[key];
13
+ if (event.usage !== undefined && event.usage !== null)
14
+ response.usage = event.usage;
15
+ // Final usage is emitted on an empty choices chunk or with finished choices.
16
+ // A later [DONE] marker cannot turn an earlier running count into final usage.
17
+ if (Array.isArray(event.choices))
18
+ terminalUsage =
19
+ event.usage !== undefined &&
20
+ event.usage !== null &&
21
+ event.choices.every((choice) => typeof object(choice).finish_reason === "string");
22
+ if (event.error) {
23
+ response.error = event.error;
24
+ terminalUsage = false;
25
+ }
26
+ for (const raw of list(event.choices)) {
27
+ const choice = object(raw);
28
+ const index = count(choice.index);
29
+ if (index === undefined) {
30
+ invalid = true;
31
+ continue;
32
+ }
33
+ const saved = choices.get(index) ?? { index, message: { role: "assistant" } };
34
+ const message = object(saved.message);
35
+ const delta = object(choice.delta);
36
+ if (Object.keys(delta).some((key) => ![
37
+ "role",
38
+ "content",
39
+ "reasoning_content",
40
+ "reasoning",
41
+ "refusal",
42
+ "tool_calls",
43
+ "reasoning_details",
44
+ ].includes(key)))
45
+ unsupported = true;
46
+ for (const key of ["content", "reasoning_content", "reasoning", "refusal"])
47
+ append(message, key, delta[key]);
48
+ if (delta.reasoning_details !== undefined)
49
+ message.reasoning_details = [
50
+ ...list(message.reasoning_details),
51
+ ...list(delta.reasoning_details),
52
+ ];
53
+ const byIndex = tools.get(index) ?? new Map();
54
+ for (const rawTool of list(delta.tool_calls)) {
55
+ const tool = object(rawTool);
56
+ const toolIndex = count(tool.index);
57
+ if (toolIndex === undefined) {
58
+ invalid = true;
59
+ continue;
60
+ }
61
+ const savedTool = byIndex.get(toolIndex) ?? { type: "function", function: {} };
62
+ if (tool.id !== undefined)
63
+ savedTool.id = tool.id;
64
+ if (tool.type !== undefined)
65
+ savedTool.type = tool.type;
66
+ for (const key of ["name", "arguments"])
67
+ append(object(savedTool.function), key, object(tool.function)[key]);
68
+ byIndex.set(toolIndex, savedTool);
69
+ }
70
+ tools.set(index, byIndex);
71
+ if (byIndex.size)
72
+ message.tool_calls = [...byIndex.entries()]
73
+ .toSorted(([a], [b]) => a - b)
74
+ .map(([, value]) => value);
75
+ if (choice.finish_reason !== undefined && choice.finish_reason !== null)
76
+ saved.finish_reason = choice.finish_reason;
77
+ choices.set(index, saved);
78
+ }
79
+ }
80
+ response.choices = [...choices.entries()].toSorted(([a], [b]) => a - b).map(([, value]) => value);
81
+ terminal =
82
+ done ||
83
+ response.error !== undefined ||
84
+ (stockCompleted &&
85
+ choices.size > 0 &&
86
+ [...choices.values()].every((choice) => typeof choice.finish_reason === "string"));
87
+ return { response, invalid, recognized, unsupported, terminal, terminalUsage };
88
+ }
89
+ //# sourceMappingURL=chat-completions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-completions.js","sourceRoot":"","sources":["../../src/protocols/chat-completions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ModelCallV1, PrivateContentReference } from "../model-call/index.js";
2
+ import type { CaptureObservationV1 } from "../capture/index.js";
3
+ import { type SSECheckpoint } from "./framing.js";
4
+ import type { RecordValue } from "./types.js";
5
+ /** Bounded semantic state. Emitted text/tools stay in immutable content segments. */
6
+ export type ProjectionCheckpoint = {
7
+ sse?: SSECheckpoint;
8
+ sseBlob?: PrivateContentReference;
9
+ usage?: RecordValue;
10
+ terminal?: string;
11
+ usageFinal?: boolean;
12
+ invalid?: boolean;
13
+ unsupported?: boolean;
14
+ rawGap?: boolean;
15
+ streamed?: boolean;
16
+ inputSeen?: boolean;
17
+ chatFinished?: boolean;
18
+ };
19
+ export declare function applyObservation(call: ModelCallV1, state: ProjectionCheckpoint, o: CaptureObservationV1): void;
20
+ //# sourceMappingURL=checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/protocols/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,uBAAuB,EACxB,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,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;AA2JF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,oBAAoB,EAC3B,CAAC,EAAE,oBAAoB,GACtB,IAAI,CA6JN"}