@yolk-sdk/agent 0.1.0-canary.110 → 0.1.0-canary.112

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 (47) hide show
  1. package/README.md +7 -1
  2. package/dist/client/state.d.mts +86 -86
  3. package/dist/client/state.d.mts.map +1 -1
  4. package/dist/providers/openai/provider.d.mts +18 -1
  5. package/dist/providers/openai/provider.d.mts.map +1 -1
  6. package/dist/providers/openai/provider.mjs +112 -38
  7. package/dist/providers/openai/provider.mjs.map +1 -1
  8. package/dist/providers/opencode/conformance/cases.d.mts +2 -2
  9. package/dist/providers/opencode/conformance/cases.mjs +6 -6
  10. package/dist/providers/opencode/conformance/cases.mjs.map +1 -1
  11. package/dist/providers/opencode/conformance/chat-plain-text.mjs +2 -2
  12. package/dist/providers/opencode/conformance/chat-plain-text.mjs.map +1 -1
  13. package/dist/providers/opencode/conformance/messages-plain-text.mjs +2 -2
  14. package/dist/providers/opencode/conformance/messages-plain-text.mjs.map +1 -1
  15. package/dist/providers/opencode/conformance/responses-commentary-replay.mjs +2 -2
  16. package/dist/providers/opencode/conformance/responses-commentary-replay.mjs.map +1 -1
  17. package/dist/providers/opencode/conformance/responses-plain-text.mjs +2 -2
  18. package/dist/providers/opencode/conformance/responses-plain-text.mjs.map +1 -1
  19. package/dist/providers/opencode/conformance/usage-snapshot.d.mts +1 -1
  20. package/dist/providers/opencode/conformance/usage-snapshot.mjs +3 -3
  21. package/dist/providers/opencode/conformance/usage-snapshot.mjs.map +1 -1
  22. package/dist/providers/opencode/go-provider.d.mts +1 -1
  23. package/dist/providers/opencode/go-provider.d.mts.map +1 -1
  24. package/dist/providers/opencode/go-provider.mjs +43 -5
  25. package/dist/providers/opencode/go-provider.mjs.map +1 -1
  26. package/dist/providers/opencode/usage.d.mts +1 -1
  27. package/dist/providers/opencode/usage.mjs +2 -2
  28. package/dist/providers/opencode/usage.mjs.map +1 -1
  29. package/dist/react/chat-items.d.mts +71 -71
  30. package/dist/react/chat-items.d.mts.map +1 -1
  31. package/dist/react/chat-messages.d.mts +101 -101
  32. package/dist/react/chat-messages.d.mts.map +1 -1
  33. package/dist/skillset/merge.d.mts +2 -2
  34. package/dist/skillset/name.d.mts +2 -2
  35. package/dist/skillset/name.d.mts.map +1 -1
  36. package/dist/tools/ledger.d.mts +24 -24
  37. package/dist/tools/ledger.d.mts.map +1 -1
  38. package/package.json +2 -2
  39. package/src/providers/openai/provider.ts +158 -66
  40. package/src/providers/opencode/conformance/cases.ts +6 -6
  41. package/src/providers/opencode/conformance/chat-plain-text.ts +2 -2
  42. package/src/providers/opencode/conformance/messages-plain-text.ts +2 -2
  43. package/src/providers/opencode/conformance/responses-commentary-replay.ts +2 -2
  44. package/src/providers/opencode/conformance/responses-plain-text.ts +2 -2
  45. package/src/providers/opencode/conformance/usage-snapshot.ts +3 -3
  46. package/src/providers/opencode/go-provider.ts +92 -5
  47. package/src/providers/opencode/usage.ts +1 -1
package/README.md CHANGED
@@ -233,13 +233,19 @@ const GoLayer = makeOpenCodeGoProviderLayer({
233
233
  }).pipe(Layer.provide(FetchHttpClient.layer))
234
234
  ```
235
235
 
236
- The default base URL is `https://opencode.ai/zen/go/v1`. Chat streams SSE (the Go adapter sets
236
+ The default base URL is `https://opencode.ai/inference/go/v1`. Chat streams SSE (the Go adapter sets
237
237
  `streaming: true`) with Bearer auth; Messages uses SSE and `x-api-key`; Responses uses SSE and Bearer
238
238
  auth. All normalize to `LLMEvent`s.
239
239
  Messages retains native tool names and system instructions, without Claude OAuth fingerprinting.
240
240
  Responses sends `max_output_tokens`, unlike Codex. Go requires a nonempty key and positive safe-integer
241
241
  limit at layer construction. `extraHeaders` cannot override required protocol headers, regardless of
242
242
  case. Only override `baseUrl` with a trusted proxy because it receives the credential.
243
+ A chat parser rejection (for example a stream payload that is not JSON), a chat response that is not
244
+ SSE, or a chat or Responses stream ending before its terminal event is retried once, before any
245
+ event, under `<session>.reroute` so Go routes it to another upstream. The session is the request
246
+ `cacheKey`, else the `x-opencode-session` extra header; without either the request is resent
247
+ unchanged. Messages failures are not re-routed. Errors carrying provider metadata read
248
+ `OpenCode Go <cause>`, with the failed check in `provider.providerCode`.
243
249
 
244
250
  Request `reasoningEffort` becomes chat `reasoning_effort`, Messages `output_config.effort` (omitting
245
251
  `minimal`), or Responses `reasoning.effort` with `summary: 'auto'`. `reasoningSummary` changes the
@@ -80,13 +80,6 @@ type AgentToolRun = {
80
80
  readonly result: ToolResult;
81
81
  };
82
82
  declare const AgentToolRun: {
83
- readonly Completed: Data.TaggedEnum.ConstructorFrom<{
84
- readonly _tag: "Completed";
85
- readonly call: ToolCall;
86
- readonly result: ToolResult;
87
- readonly startedAtMs: number;
88
- readonly endedAtMs: number;
89
- }, "_tag">;
90
83
  readonly QuestionRequested: Data.TaggedEnum.ConstructorFrom<{
91
84
  readonly _tag: "QuestionRequested";
92
85
  readonly request: QuestionRequest;
@@ -129,28 +122,45 @@ declare const AgentToolRun: {
129
122
  readonly response: InteractionResponse;
130
123
  readonly request?: InteractionRequest;
131
124
  }, "_tag">;
125
+ readonly InputStreaming: Data.TaggedEnum.ConstructorFrom<{
126
+ readonly _tag: "InputStreaming";
127
+ readonly id: string;
128
+ readonly name?: string;
129
+ readonly input: string;
130
+ }, "_tag">;
131
+ readonly InputReady: Data.TaggedEnum.ConstructorFrom<{
132
+ readonly _tag: "InputReady";
133
+ readonly call: ToolCall;
134
+ }, "_tag">;
135
+ readonly ApprovalRequested: Data.TaggedEnum.ConstructorFrom<{
136
+ readonly _tag: "ApprovalRequested";
137
+ readonly call: ToolCall;
138
+ readonly request?: ToolApprovalRequest;
139
+ }, "_tag">;
132
140
  readonly Denied: Data.TaggedEnum.ConstructorFrom<{
133
141
  readonly _tag: "Denied";
134
142
  readonly toolCallId: string;
135
143
  readonly reason: string;
136
144
  }, "_tag">;
137
- readonly Accepted: Data.TaggedEnum.ConstructorFrom<{
138
- readonly _tag: "Accepted";
145
+ readonly Executing: Data.TaggedEnum.ConstructorFrom<{
146
+ readonly _tag: "Executing";
147
+ readonly call: ToolCall;
148
+ readonly startedAtMs: number; /** Preserve witnessed interaction acceptance across transport interruptions. */
149
+ readonly interaction?: true;
150
+ }, "_tag">;
151
+ readonly Completed: Data.TaggedEnum.ConstructorFrom<{
152
+ readonly _tag: "Completed";
139
153
  readonly call: ToolCall;
140
154
  readonly result: ToolResult;
141
155
  readonly startedAtMs: number;
142
156
  readonly endedAtMs: number;
143
157
  }, "_tag">;
144
- readonly InputStreaming: Data.TaggedEnum.ConstructorFrom<{
145
- readonly _tag: "InputStreaming";
146
- readonly id: string;
147
- readonly name?: string;
148
- readonly input: string;
149
- }, "_tag">;
150
- readonly ApprovalRequested: Data.TaggedEnum.ConstructorFrom<{
151
- readonly _tag: "ApprovalRequested";
158
+ readonly Accepted: Data.TaggedEnum.ConstructorFrom<{
159
+ readonly _tag: "Accepted";
152
160
  readonly call: ToolCall;
153
- readonly request?: ToolApprovalRequest;
161
+ readonly result: ToolResult;
162
+ readonly startedAtMs: number;
163
+ readonly endedAtMs: number;
154
164
  }, "_tag">;
155
165
  readonly Errored: Data.TaggedEnum.ConstructorFrom<{
156
166
  readonly _tag: "Errored";
@@ -163,17 +173,7 @@ declare const AgentToolRun: {
163
173
  readonly call: ToolCall;
164
174
  readonly result: ToolResult;
165
175
  }, "_tag">;
166
- readonly InputReady: Data.TaggedEnum.ConstructorFrom<{
167
- readonly _tag: "InputReady";
168
- readonly call: ToolCall;
169
- }, "_tag">;
170
- readonly Executing: Data.TaggedEnum.ConstructorFrom<{
171
- readonly _tag: "Executing";
172
- readonly call: ToolCall;
173
- readonly startedAtMs: number; /** Preserve witnessed interaction acceptance across transport interruptions. */
174
- readonly interaction?: true;
175
- }, "_tag">;
176
- readonly $is: <Tag extends "Completed" | "QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "Denied" | "Accepted" | "InputStreaming" | "ApprovalRequested" | "Errored" | "ProviderCompleted" | "InputReady" | "Executing">(tag: Tag) => (u: unknown) => u is Extract<{
176
+ readonly $is: <Tag extends "QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "InputStreaming" | "InputReady" | "ApprovalRequested" | "Denied" | "Executing" | "Completed" | "Accepted" | "Errored" | "ProviderCompleted">(tag: Tag) => (u: unknown) => u is Extract<{
177
177
  readonly _tag: "InputStreaming";
178
178
  readonly id: string;
179
179
  readonly name?: string;
@@ -287,13 +287,6 @@ declare const AgentToolRun: {
287
287
  }>;
288
288
  readonly $match: {
289
289
  <Cases extends {
290
- readonly Completed: (args: {
291
- readonly _tag: "Completed";
292
- readonly call: ToolCall;
293
- readonly result: ToolResult;
294
- readonly startedAtMs: number;
295
- readonly endedAtMs: number;
296
- }) => any;
297
290
  readonly QuestionRequested: (args: {
298
291
  readonly _tag: "QuestionRequested";
299
292
  readonly request: QuestionRequest;
@@ -336,43 +329,25 @@ declare const AgentToolRun: {
336
329
  readonly response: InteractionResponse;
337
330
  readonly request?: InteractionRequest;
338
331
  }) => any;
339
- readonly Denied: (args: {
340
- readonly _tag: "Denied";
341
- readonly toolCallId: string;
342
- readonly reason: string;
343
- }) => any;
344
- readonly Accepted: (args: {
345
- readonly _tag: "Accepted";
346
- readonly call: ToolCall;
347
- readonly result: ToolResult;
348
- readonly startedAtMs: number;
349
- readonly endedAtMs: number;
350
- }) => any;
351
332
  readonly InputStreaming: (args: {
352
333
  readonly _tag: "InputStreaming";
353
334
  readonly id: string;
354
335
  readonly name?: string;
355
336
  readonly input: string;
356
337
  }) => any;
338
+ readonly InputReady: (args: {
339
+ readonly _tag: "InputReady";
340
+ readonly call: ToolCall;
341
+ }) => any;
357
342
  readonly ApprovalRequested: (args: {
358
343
  readonly _tag: "ApprovalRequested";
359
344
  readonly call: ToolCall;
360
345
  readonly request?: ToolApprovalRequest;
361
346
  }) => any;
362
- readonly Errored: (args: {
363
- readonly _tag: "Errored";
364
- readonly call: ToolCall;
365
- readonly message: string;
366
- readonly endedAtMs: number;
367
- }) => any;
368
- readonly ProviderCompleted: (args: {
369
- readonly _tag: "ProviderCompleted";
370
- readonly call: ToolCall;
371
- readonly result: ToolResult;
372
- }) => any;
373
- readonly InputReady: (args: {
374
- readonly _tag: "InputReady";
375
- readonly call: ToolCall;
347
+ readonly Denied: (args: {
348
+ readonly _tag: "Denied";
349
+ readonly toolCallId: string;
350
+ readonly reason: string;
376
351
  }) => any;
377
352
  readonly Executing: (args: {
378
353
  readonly _tag: "Executing";
@@ -380,8 +355,6 @@ declare const AgentToolRun: {
380
355
  readonly startedAtMs: number; /** Preserve witnessed interaction acceptance across transport interruptions. */
381
356
  readonly interaction?: true;
382
357
  }) => any;
383
- }>(cases: Cases): (value: AgentToolRun) => import("effect/Unify").Unify<ReturnType<Cases["Completed" | "QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "Denied" | "Accepted" | "InputStreaming" | "ApprovalRequested" | "Errored" | "ProviderCompleted" | "InputReady" | "Executing"]>>;
384
- <Cases extends {
385
358
  readonly Completed: (args: {
386
359
  readonly _tag: "Completed";
387
360
  readonly call: ToolCall;
@@ -389,6 +362,26 @@ declare const AgentToolRun: {
389
362
  readonly startedAtMs: number;
390
363
  readonly endedAtMs: number;
391
364
  }) => any;
365
+ readonly Accepted: (args: {
366
+ readonly _tag: "Accepted";
367
+ readonly call: ToolCall;
368
+ readonly result: ToolResult;
369
+ readonly startedAtMs: number;
370
+ readonly endedAtMs: number;
371
+ }) => any;
372
+ readonly Errored: (args: {
373
+ readonly _tag: "Errored";
374
+ readonly call: ToolCall;
375
+ readonly message: string;
376
+ readonly endedAtMs: number;
377
+ }) => any;
378
+ readonly ProviderCompleted: (args: {
379
+ readonly _tag: "ProviderCompleted";
380
+ readonly call: ToolCall;
381
+ readonly result: ToolResult;
382
+ }) => any;
383
+ }>(cases: Cases): (value: AgentToolRun) => import("effect/Unify").Unify<ReturnType<Cases["QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "InputStreaming" | "InputReady" | "ApprovalRequested" | "Denied" | "Executing" | "Completed" | "Accepted" | "Errored" | "ProviderCompleted"]>>;
384
+ <Cases extends {
392
385
  readonly QuestionRequested: (args: {
393
386
  readonly _tag: "QuestionRequested";
394
387
  readonly request: QuestionRequest;
@@ -431,28 +424,45 @@ declare const AgentToolRun: {
431
424
  readonly response: InteractionResponse;
432
425
  readonly request?: InteractionRequest;
433
426
  }) => any;
427
+ readonly InputStreaming: (args: {
428
+ readonly _tag: "InputStreaming";
429
+ readonly id: string;
430
+ readonly name?: string;
431
+ readonly input: string;
432
+ }) => any;
433
+ readonly InputReady: (args: {
434
+ readonly _tag: "InputReady";
435
+ readonly call: ToolCall;
436
+ }) => any;
437
+ readonly ApprovalRequested: (args: {
438
+ readonly _tag: "ApprovalRequested";
439
+ readonly call: ToolCall;
440
+ readonly request?: ToolApprovalRequest;
441
+ }) => any;
434
442
  readonly Denied: (args: {
435
443
  readonly _tag: "Denied";
436
444
  readonly toolCallId: string;
437
445
  readonly reason: string;
438
446
  }) => any;
439
- readonly Accepted: (args: {
440
- readonly _tag: "Accepted";
447
+ readonly Executing: (args: {
448
+ readonly _tag: "Executing";
449
+ readonly call: ToolCall;
450
+ readonly startedAtMs: number; /** Preserve witnessed interaction acceptance across transport interruptions. */
451
+ readonly interaction?: true;
452
+ }) => any;
453
+ readonly Completed: (args: {
454
+ readonly _tag: "Completed";
441
455
  readonly call: ToolCall;
442
456
  readonly result: ToolResult;
443
457
  readonly startedAtMs: number;
444
458
  readonly endedAtMs: number;
445
459
  }) => any;
446
- readonly InputStreaming: (args: {
447
- readonly _tag: "InputStreaming";
448
- readonly id: string;
449
- readonly name?: string;
450
- readonly input: string;
451
- }) => any;
452
- readonly ApprovalRequested: (args: {
453
- readonly _tag: "ApprovalRequested";
460
+ readonly Accepted: (args: {
461
+ readonly _tag: "Accepted";
454
462
  readonly call: ToolCall;
455
- readonly request?: ToolApprovalRequest;
463
+ readonly result: ToolResult;
464
+ readonly startedAtMs: number;
465
+ readonly endedAtMs: number;
456
466
  }) => any;
457
467
  readonly Errored: (args: {
458
468
  readonly _tag: "Errored";
@@ -465,17 +475,7 @@ declare const AgentToolRun: {
465
475
  readonly call: ToolCall;
466
476
  readonly result: ToolResult;
467
477
  }) => any;
468
- readonly InputReady: (args: {
469
- readonly _tag: "InputReady";
470
- readonly call: ToolCall;
471
- }) => any;
472
- readonly Executing: (args: {
473
- readonly _tag: "Executing";
474
- readonly call: ToolCall;
475
- readonly startedAtMs: number; /** Preserve witnessed interaction acceptance across transport interruptions. */
476
- readonly interaction?: true;
477
- }) => any;
478
- }>(value: AgentToolRun, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Completed" | "QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "Denied" | "Accepted" | "InputStreaming" | "ApprovalRequested" | "Errored" | "ProviderCompleted" | "InputReady" | "Executing"]>>;
478
+ }>(value: AgentToolRun, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "InputStreaming" | "InputReady" | "ApprovalRequested" | "Denied" | "Executing" | "Completed" | "Accepted" | "Errored" | "ProviderCompleted"]>>;
479
479
  };
480
480
  };
481
481
  type AgentClientState = {
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.mts","names":[],"sources":["../../src/client/state.ts"],"mappings":";;;;KAoBY,cAAA;AAAA,KAEA,YAAA;EAAA,SAEG,IAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SAA6B,IAAA,EAAM,QAAA;AAAA;EAAA,SAEnC,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,OAAA,GAAU,mBAAA;AAAA;EAAA,SAEV,IAAA;EAAA,SAAyB,UAAA;EAAA,SAA6B,MAAA;AAAA;EAAA,SACtD,IAAA;EAAA,SAAoC,OAAA,EAAS,eAAA;AAAA;EAAA,SAE7C,IAAA;EAAA,SACA,QAAA,EAAU,gBAAA;EAAA,SACV,OAAA,GAAU,eAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,QAAA,EAAU,gBAAA;EAAA,SACV,OAAA,GAAU,eAAA;AAAA;EAAA,SAEV,IAAA;EAAA,SAAiC,OAAA,EAAS,YAAA;AAAA;EAAA,SAE1C,IAAA;EAAA,SACA,QAAA,EAAU,aAAA;EAAA,SACV,OAAA,GAAU,YAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,QAAA,EAAU,aAAA;EAAA,SACV,OAAA,GAAU,YAAA;AAAA;EAAA,SAEV,IAAA;EAAA,SAAuC,OAAA,EAAS,kBAAA;AAAA;EAAA,SAEhD,IAAA;EAAA,SACA,QAAA,EAAU,mBAAA;EAAA,SACV,OAAA,GAAU,kBAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,QAAA,EAAU,mBAAA;EAAA,SACV,OAAA,GAAU,kBAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,WAAA,UApCoC;EAAA,SAsCpC,WAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,MAAA,EAAQ,UAAA;EAAA,SACR,WAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,MAAA,EAAQ,UAAA;EAAA,SACR,WAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,OAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SAAoC,IAAA,EAAM,QAAA;EAAA,SAAmB,MAAA,EAAQ,UAAA;AAAA;AAAA,cAEvE,YAAA;EAAA;;mBApBQ,QAAA;IAAA,iBACE,UAAA;IAAA;;;;;sBA3CqC,eAAA;EAAA;EAAA;;uBAGnC,gBAAA;IAAA,mBACA,eAAA;EAAA;EAAA;;uBAIA,gBAAA;IAAA,mBACA,eAAA;EAAA;EAAA;;sBAEgC,YAAA;EAAA;EAAA;;uBAGhC,aAAA;IAAA,mBACA,YAAA;EAAA;EAAA;;uBAIA,aAAA;IAAA,mBACA,YAAA;EAAA;EAAA;;sBAEsC,kBAAA;EAAA;EAAA;;uBAGtC,mBAAA;IAAA,mBACA,kBAAA;EAAA;EAAA;;uBAIA,mBAAA;IAAA,mBACA,kBAAA;EAAA;EAAA;;;;;;;mBAkBJ,QAAA;IAAA,iBACE,UAAA;IAAA;;;;;;;;;;;mBAtDF,QAAA;IAAA,mBACI,mBAAA;EAAA;EAAA;;mBA2DJ,QAAA;IAAA;;;;;mBAIoC,QAAA;IAAA,iBAA2B,UAAA;EAAA;EAAA;;mBAnElC,QAAA;EAAA;EAAA;;mBA0C7B,QAAA;IAAA;;;;;;;;;;;;mBA1C6B,QAAA;EAAA;IAAA;;;mBAG7B,QAAA;IAAA,mBACI,mBAAA;EAAA;IAAA;;;;;;;;;sBAGmC,eAAA;EAAA;IAAA;;;uBAGnC,gBAAA;IAAA,mBACA,eAAA;EAAA;IAAA;;;uBAIA,gBAAA;IAAA,mBACA,eAAA;EAAA;IAAA;;;sBAEgC,YAAA;EAAA;IAAA;;;uBAGhC,aAAA;IAAA,mBACA,YAAA;EAAA;IAAA;;;uBAIA,aAAA;IAAA,mBACA,YAAA;EAAA;IAAA;;;sBAEsC,kBAAA;EAAA;IAAA;;;uBAGtC,mBAAA;IAAA,mBACA,kBAAA;EAAA;IAAA;;;uBAIA,mBAAA;IAAA,mBACA,kBAAA;EAAA;IAAA;;;mBAIJ,QAAA;IAAA,8BAvCA;IAAA;;;;;mBA8CA,QAAA;IAAA,iBACE,UAAA;IAAA;;;;;;mBAMF,QAAA;IAAA,iBACE,UAAA;IAAA;;;;;;mBAMF,QAAA;IAAA;;;;;;mBAIoC,QAAA;IAAA,iBAA2B,UAAA;EAAA;IAAA;;;;;;uBAlB/D,QAAA;QAAA,iBACE,UAAA;QAAA;;;;;0BA3CqC,eAAA;MAAA;MAAA;;2BAGnC,gBAAA;QAAA,mBACA,eAAA;MAAA;MAAA;;2BAIA,gBAAA;QAAA,mBACA,eAAA;MAAA;MAAA;;0BAEgC,YAAA;MAAA;MAAA;;2BAGhC,aAAA;QAAA,mBACA,YAAA;MAAA;MAAA;;2BAIA,aAAA;QAAA,mBACA,YAAA;MAAA;MAAA;;0BAEsC,kBAAA;MAAA;MAAA;;2BAGtC,mBAAA;QAAA,mBACA,kBAAA;MAAA;MAAA;;2BAIA,mBAAA;QAAA,mBACA,kBAAA;MAAA;MAAA;;;;;;;uBAkBJ,QAAA;QAAA,iBACE,UAAA;QAAA;;;;;;;;;;;uBAtDF,QAAA;QAAA,mBACI,mBAAA;MAAA;MAAA;;uBA2DJ,QAAA;QAAA;;;;;uBAIoC,QAAA;QAAA,iBAA2B,UAAA;MAAA;MAAA;;uBAnElC,QAAA;MAAA;MAAA;;uBA0C7B,QAAA;QAAA;;;;;;;uBAOA,QAAA;QAAA,iBACE,UAAA;QAAA;;;;;0BA3CqC,eAAA;MAAA;MAAA;;2BAGnC,gBAAA;QAAA,mBACA,eAAA;MAAA;MAAA;;2BAIA,gBAAA;QAAA,mBACA,eAAA;MAAA;MAAA;;0BAEgC,YAAA;MAAA;MAAA;;2BAGhC,aAAA;QAAA,mBACA,YAAA;MAAA;MAAA;;2BAIA,aAAA;QAAA,mBACA,YAAA;MAAA;MAAA;;0BAEsC,kBAAA;MAAA;MAAA;;2BAGtC,mBAAA;QAAA,mBACA,kBAAA;MAAA;MAAA;;2BAIA,mBAAA;QAAA,mBACA,kBAAA;MAAA;MAAA;;;;;;;uBAkBJ,QAAA;QAAA,iBACE,UAAA;QAAA;;;;;;;;;;;uBAtDF,QAAA;QAAA,mBACI,mBAAA;MAAA;MAAA;;uBA2DJ,QAAA;QAAA;;;;;uBAIoC,QAAA;QAAA,iBAA2B,UAAA;MAAA;MAAA;;uBAnElC,QAAA;MAAA;MAAA;;uBA0C7B,QAAA;QAAA;;;;;;KAkCT,gBAAA;EAAA,SACD,MAAA,EAAQ,cAAA;EAAA,SACR,QAAA,EAAU,aAAA,CAAc,YAAA;EAAA,SACxB,YAAA,EAAc,aAAA,CAAc,YAAA;EAAA,SAC5B,IAAA;EAAA,SACA,SAAA;EAAA,SACA,QAAA,EAAU,aAAA,CAAc,YAAA;EAAA,SACxB,KAAA;EAAA,SACA,SAAA,EAAW,UAAA;EAAA,SACX,SAAA,EAAW,UAAA;EAAA,SACX,YAAA,EAAc,aAAA;AAAA;AAAA,KAGb,sBAAA;EAAA,SACD,KAAK;AAAA;AAAA,KAcJ,eAAA,aAA4B,YAAA,KAAiB,KAAA,CAAM,YAAA;AAAA,cAElD,uBAAA,EAAyB,gBAWrC;AAAA,cAwCY,eAAA,GAAmB,GAAA,EAAK,YAAA,KAAY,GAAA;EAAA;;;;;;iBA7JC,QAAA;AAAA;EAAA;iBAG7B,QAAA;EAAA,mBACI,mBAAA;AAAA;EAAA;oBAGmC,eAAA;AAAA;EAAA;oBAWH,YAAA;AAAA;EAAA;oBAWM,kBAAA;AAAA;EAAA;qBAGtC,mBAAA;EAAA,mBACA,kBAAA;AAAA;EAAA;iBASJ,QAAA;EAAA;;;cA+HR,iBAAA,GAAqB,IAAA,EAAM,aAAA,CAAc,YAAA;EAAA;iBAxHjC,QAAA;EAAA,iBACE,UAAA;EAAA;;;cAoIV,wBAAA,GACX,QAAA,EAAU,aAAA,CAAc,WAAA,MACvB,aAAA,CAAc,YAAA;AAAA,cAwNJ,kBAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,GACxB,OAAA,EAAS,YAAA,KACR,eAAA;AAAA,cAUU,eAAA,GAAmB,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,UAAA,KAAa,gBAAA;AAAA,cAMhE,0BAAA,GACX,KAAA,EAAO,gBAAA,EACP,KAAA,EAAO,UAAA,EACP,OAAA,GAAS,sBAAA,KACR,gBAAA;AAAA,cA2SU,sBAAA,GACX,KAAA,EAAO,gBAAA,EACP,OAAA,EAAS,WAAA,KACR,gBAAA;AAAA,cAcU,cAAA,GACX,KAAA,EAAO,gBAAA,EACP,OAAA,WACA,SAAA,GAAW,UAAA,YACV,gBAAA;AAAA,cASU,gBAAA,GAAoB,KAAA,EAAO,gBAAA,KAAmB,gBAOzD;AAAA,cAEW,iBAAA,GACX,MAAA,EAAQ,aAAA,CAAc,UAAA,GACtB,YAAA,GAAc,gBAAA,EACd,OAAA,GAAS,sBAAA,KAA2B,gBAAA"}
1
+ {"version":3,"file":"state.d.mts","names":[],"sources":["../../src/client/state.ts"],"mappings":"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"}
@@ -120,8 +120,25 @@ type OpenAiRequestBodyConfig = {
120
120
  readonly providerName?: string;
121
121
  };
122
122
  declare const toOpenAiRequestBody: (request: LLMRequest, config: OpenAiRequestBodyConfig) => Effect.Effect<OpenAiRequestBody, LLMError>;
123
+ /**
124
+ * `ProviderErrorInfo.providerCode` values (kind `invalid_response`) naming the check a Chat
125
+ * Completions response failed. Fixed literals that never carry upstream values, so hosts can log
126
+ * and persist them:
127
+ *
128
+ * - `invalid_stream_json`: an SSE `data:` payload is not JSON.
129
+ * - `invalid_stream_chunk`: a stream chunk does not match the `chat.completion.chunk` shape.
130
+ * - `invalid_reasoning`: reasoning content is neither a string nor null.
131
+ * - `invalid_tool_call`: a streamed tool call has no id or no name.
132
+ * - `invalid_tool_arguments`: tool call arguments are not JSON.
133
+ * - `invalid_usage`: the usage block lacks its token counts.
134
+ * - `invalid_response_json`: a JSON (non-streaming) response body is not JSON.
135
+ * - `invalid_response_body`: a JSON response does not match the `chat.completion` shape.
136
+ * - `missing_choices`: a JSON response has no choices.
137
+ */
138
+ declare const openAiChatResponseIssues: readonly ["invalid_stream_json", "invalid_stream_chunk", "invalid_reasoning", "invalid_tool_call", "invalid_tool_arguments", "invalid_usage", "invalid_response_json", "invalid_response_body", "missing_choices"];
139
+ type OpenAiChatResponseIssue = (typeof openAiChatResponseIssues)[number];
123
140
  declare const makeOpenAiProviderLayer: (config: OpenAiProviderConfig) => Layer.Layer<LLMProvider, never, HttpClient.HttpClient>;
124
141
  declare const OpenAiProviderLayer: Layer.Layer<LLMProvider, LLMError, never>;
125
142
  //#endregion
126
- export { OpenAiProviderConfig, OpenAiProviderLayer, OpenAiRequestExtras, makeOpenAiProviderLayer, toOpenAiRequestBody };
143
+ export { OpenAiChatResponseIssue, OpenAiProviderConfig, OpenAiProviderLayer, OpenAiRequestExtras, makeOpenAiProviderLayer, openAiChatResponseIssues, toOpenAiRequestBody };
127
144
  //# sourceMappingURL=provider.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.mts","names":[],"sources":["../../../src/providers/openai/provider.ts"],"mappings":";;;;;;;KA+DK,sBAAA;EAAA,SACM,EAAA;EAAA,SACA,IAAI;AAAA;;KAIH,mBAAA;EAAA,UACA,GAAA,WAAc,QAAA,CAAO,IAAI;AAAA;AAAA,KAgJzB,oBAAA;EAAA,SACD,kBAAA;EAAA,SACA,mBAAA,UAlJC;EAAA,SAoJD,oBAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;EArJE;AAAA;AAgJrC;;;EAhJqC,SA2J1B,SAAA,GAAY,mBAAA,EANG;EAAA,SAQf,qBAAA,4CAWmB;EAAA,SATnB,gBAAA;EAeiD;;;;EAAA,SAVjD,SAAA,YAlBA;EAAA,SAoBA,sBAAA,YAjBA;EAAA,SAmBA,gBAAA,GAAmB,sBAAA;EAAA,SACnB,MAAA,EAAQ,QAAA,CAAS,QAAA;EAdjB;;;;EAAA,SAmBA,eAAA,IAAmB,QAAA,aAAqB,QAAA,CAAS,MAAA;AAAA;AAAA,KAGvD,qBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,SAAA;IAAA,SACE,GAAA;EAAA;AAAA;AAAA,KAIR,qBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAA;IAAA,SACE,QAAA;IAAA,SACA,SAAA;EAAA;AAAA;AAAA,KAIR,iBAAA,YAED,aAAA,CAAc,qBAAA,GAAwB,sBAAA,GAAyB,qBAAA;AAAA,KAE9D,cAAA;EAAA,SACM,EAAA;EAAA,SACA,IAAA;EAAA,SACA,QAAA;IAAA,SACE,IAAA;IAAA,SACA,SAAA;EAAA;AAAA;AAAA,KAIR,aAAA;EAAA,SACU,IAAA;EAAA,SAAyB,OAAA;AAAA;EAAA,SACzB,IAAA;EAAA,SAAuB,OAAA,EAAS,iBAAA;AAAA;EAAA,SAEhC,IAAA;EAAA,SACA,OAAA;EAAA,SACA,UAAA,GAAa,aAAA,CAAc,cAAA;EAAA,SAC3B,iBAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SAAuB,YAAA;EAAA,SAA+B,OAAA;AAAA;AAAA,KAEhE,UAAA;EAAA,SACM,IAAA;EAAA,SACA,QAAA;IAAA,SACE,IAAA;IAAA,SACA,WAAA;IAAA,SACA,UAAA,EAAY,QAAA,CAAO,IAAI;EAAA;AAAA;AAAA,KAI/B,iBAAA;EAAA,SACM,KAAA;EAAA,SACA,QAAA,EAAU,aAAA,CAAc,aAAA;EAAA,SACxB,qBAAA;EAAA,SACA,UAAA;EAAA,SACA,MAAA;EAAA,SACA,cAAA;IAAA,SACE,aAAA;EAAA;EAAA,SAEF,SAAA;IAAA,SACE,MAAA,EAAQ,oBAAA;EAAA;EAAA,SAEV,gBAAA,GAAmB,oBAAA;EAAA,SACnB,KAAA,GAAQ,aAAA,CAAc,UAAA;EAAA,SACtB,mBAAA;EAAA,SACA,WAAA;AAAA;AAAA,KAGN,aAAA,IAAiB,GAAA,aAAgB,MAAA,CAAO,MAAM,SAAS,QAAA;AAAA,KAEvD,uBAAA;EAAA,SACM,mBAAA;EAAA,SACA,oBAAA;EAAA,SACA,SAAA;EAAA,SACA,qBAAA;EAAA,SACA,gBAAA;EAAA,SACA,SAAA;EAAA,SACA,sBAAA;EAAA,SACA,aAAA,GAAgB,aAAa;EAAA,SAC7B,YAAA;AAAA;AAAA,cAioBE,mBAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA,EAAQ,uBAAA,KACP,MAAA,CAAO,MAAA,CAAO,iBAAA,EAAmB,QAAA;AAAA,cAm6BvB,uBAAA,GAA2B,MAAA,EAAQ,oBAAA,KAAoB,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA;AAAA,cAYvD,mBAAA,EAAmB,KAAA,CAAA,KAAA,CAAA,WAAA,EAAA,QAAA"}
1
+ {"version":3,"file":"provider.d.mts","names":[],"sources":["../../../src/providers/openai/provider.ts"],"mappings":"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"}
@@ -203,7 +203,6 @@ const snapshotOpenAiRequestExtras = (extraBody, config, providerName) => {
203
203
  }
204
204
  return Effect.succeed(surviving);
205
205
  };
206
- const decodeJsonString = (raw, message) => Schema$1.decodeUnknownEffect(JsonFromJsonString)(raw).pipe(Effect.mapError(schemaErrorToLlmError("invalid_response", message)));
207
206
  const unsupportedContentError = (contentType, providerName) => new LLMError({
208
207
  cause: "provider_error",
209
208
  message: `${contentType} content is not supported by the ${providerName} provider yet`,
@@ -413,7 +412,12 @@ const toOpenAiRequestBody = (request, config) => Effect.gen(function* () {
413
412
  ...toolChoice
414
413
  };
415
414
  });
416
- const parseToolArguments = (raw, providerName) => decodeJsonString(raw, `Invalid ${providerName} tool arguments JSON`);
415
+ const parseToolArguments = (raw, providerIdentity, stream) => Schema$1.decodeUnknownEffect(JsonFromJsonString)(raw).pipe(Effect.mapError(chatSchemaIssueError({
416
+ providerIdentity,
417
+ issue: "invalid_tool_arguments",
418
+ message: `Invalid ${providerIdentity.name} tool arguments JSON`,
419
+ stream
420
+ })));
417
421
  const toLlmEvents = (choice, providerIdentity, reasoningContent) => Effect.gen(function* () {
418
422
  if (choice.finish_reason === "length" || choice.finish_reason === "content_filter") return yield* Effect.fail(new LLMError({
419
423
  cause: "invalid_response",
@@ -426,11 +430,16 @@ const toLlmEvents = (choice, providerIdentity, reasoningContent) => Effect.gen(f
426
430
  })
427
431
  }));
428
432
  const content = choice.message.content ?? "";
429
- const reasoning = reasoningContent ? (yield* Schema$1.decodeUnknownEffect(Schema$1.NullOr(Schema$1.String))(choice.message.reasoning_content ?? choice.message.reasoning ?? null).pipe(Effect.mapError(schemaErrorToLlmError("invalid_response", `Invalid ${providerIdentity.name} reasoning content`)))) ?? "" : "";
433
+ const reasoning = reasoningContent ? (yield* Schema$1.decodeUnknownEffect(Schema$1.NullOr(Schema$1.String))(choice.message.reasoning_content ?? choice.message.reasoning ?? null).pipe(Effect.mapError(chatSchemaIssueError({
434
+ providerIdentity,
435
+ issue: "invalid_reasoning",
436
+ message: `Invalid ${providerIdentity.name} reasoning content`,
437
+ stream: void 0
438
+ })))) ?? "" : "";
430
439
  const textEvents = [];
431
440
  if (reasoning.length > 0) textEvents.push(LLMReasoningDelta$1.make({ text: reasoning }));
432
441
  if (content.length > 0) textEvents.push(LLMTextDelta$1.make({ text: content }));
433
- const toolCallEvents = yield* Effect.forEach(choice.message.tool_calls ?? [], (call) => parseToolArguments(call.function.arguments, providerIdentity.name).pipe(Effect.map((params) => LLMToolCall.make({ call: ToolCall.make({
442
+ const toolCallEvents = yield* Effect.forEach(choice.message.tool_calls ?? [], (call) => parseToolArguments(call.function.arguments, providerIdentity, void 0).pipe(Effect.map((params) => LLMToolCall.make({ call: ToolCall.make({
434
443
  id: call.id,
435
444
  name: call.function.name,
436
445
  params
@@ -481,10 +490,56 @@ const chatSseBlockData = (block) => {
481
490
  payload: data.length > 0 ? data : void 0
482
491
  };
483
492
  };
484
- const invalidChatStreamEvent = (providerIdentity) => new LLMError({
493
+ /**
494
+ * `ProviderErrorInfo.providerCode` values (kind `invalid_response`) naming the check a Chat
495
+ * Completions response failed. Fixed literals that never carry upstream values, so hosts can log
496
+ * and persist them:
497
+ *
498
+ * - `invalid_stream_json`: an SSE `data:` payload is not JSON.
499
+ * - `invalid_stream_chunk`: a stream chunk does not match the `chat.completion.chunk` shape.
500
+ * - `invalid_reasoning`: reasoning content is neither a string nor null.
501
+ * - `invalid_tool_call`: a streamed tool call has no id or no name.
502
+ * - `invalid_tool_arguments`: tool call arguments are not JSON.
503
+ * - `invalid_usage`: the usage block lacks its token counts.
504
+ * - `invalid_response_json`: a JSON (non-streaming) response body is not JSON.
505
+ * - `invalid_response_body`: a JSON response does not match the `chat.completion` shape.
506
+ * - `missing_choices`: a JSON response has no choices.
507
+ */
508
+ const openAiChatResponseIssues = [
509
+ "invalid_stream_json",
510
+ "invalid_stream_chunk",
511
+ "invalid_reasoning",
512
+ "invalid_tool_call",
513
+ "invalid_tool_arguments",
514
+ "invalid_usage",
515
+ "invalid_response_json",
516
+ "invalid_response_body",
517
+ "missing_choices"
518
+ ];
519
+ const chatResponseIssueError = (input) => new LLMError({
485
520
  cause: "invalid_response",
486
- message: `Invalid ${providerIdentity.name} stream event`,
487
- retryable: false
521
+ message: input.message,
522
+ retryable: false,
523
+ provider: input.stream === void 0 ? providerErrorInfo({
524
+ provider: input.providerIdentity.id,
525
+ kind: "invalid_response",
526
+ providerCode: input.issue
527
+ }) : providerErrorInfo({
528
+ provider: input.providerIdentity.id,
529
+ kind: "invalid_response",
530
+ providerCode: input.issue,
531
+ stream: input.stream
532
+ })
533
+ });
534
+ const chatSchemaIssueError = (input) => (error) => chatResponseIssueError({
535
+ ...input,
536
+ message: `${input.message}: ${schemaErrorMessage(error)}`
537
+ });
538
+ const invalidChatStreamEvent = (context, issue, state) => chatResponseIssueError({
539
+ providerIdentity: context.providerIdentity,
540
+ issue,
541
+ message: `Invalid ${context.providerIdentity.name} stream event`,
542
+ stream: chatStreamDiagnostics(context.responseFormat, state)
488
543
  });
489
544
  const chatStreamError = (providerIdentity, raw) => Effect.gen(function* () {
490
545
  const errorCode = yield* decodeOpenAiHttpErrorCode(raw);
@@ -511,20 +566,20 @@ const mergeChatToolCallDelta = (toolCalls, delta) => {
511
566
  };
512
567
  return [...toolCalls.filter((call) => call.index !== index), merged];
513
568
  };
514
- const decodeChatDeltaReasoning = (providerIdentity, reasoning) => Schema$1.decodeUnknownEffect(Schema$1.NullOr(Schema$1.String))(reasoning).pipe(Effect.map((value) => value ?? ""), Effect.mapError(() => invalidChatStreamEvent(providerIdentity)));
515
- const processChatStreamPayload = (providerIdentity, reasoningContent, state, payload) => Effect.gen(function* () {
516
- const parsed = yield* Schema$1.decodeUnknownEffect(JsonFromJsonString)(payload).pipe(Effect.mapError(() => invalidChatStreamEvent(providerIdentity)));
569
+ const decodeChatDeltaReasoning = (context, state, reasoning) => Schema$1.decodeUnknownEffect(Schema$1.NullOr(Schema$1.String))(reasoning).pipe(Effect.map((value) => value ?? ""), Effect.mapError(() => invalidChatStreamEvent(context, "invalid_reasoning", state)));
570
+ const processChatStreamPayload = (context, state, payload) => Effect.gen(function* () {
571
+ const parsed = yield* Schema$1.decodeUnknownEffect(JsonFromJsonString)(payload).pipe(Effect.mapError(() => invalidChatStreamEvent(context, "invalid_stream_json", state)));
517
572
  const envelope = isJsonRecord(parsed) ? jsonRecordField(parsed, "error") : void 0;
518
- if (envelope !== void 0 && isJsonRecord(envelope)) return yield* chatStreamError(providerIdentity, payload);
519
- const chunk = yield* Schema$1.decodeUnknownEffect(OpenAiChatStreamChunk)(parsed).pipe(Effect.mapError(() => invalidChatStreamEvent(providerIdentity)));
573
+ if (envelope !== void 0 && isJsonRecord(envelope)) return yield* chatStreamError(context.providerIdentity, payload);
574
+ const chunk = yield* Schema$1.decodeUnknownEffect(OpenAiChatStreamChunk)(parsed).pipe(Effect.mapError(() => invalidChatStreamEvent(context, "invalid_stream_chunk", state)));
520
575
  const events = [];
521
576
  let toolCalls = state.toolCalls;
522
577
  let finishReason = state.finishReason;
523
578
  let usage = state.usage;
524
579
  for (const choice of chunk.choices ?? []) {
525
580
  if (choice.delta?.content) events.push(LLMTextDelta$1.make({ text: choice.delta.content }));
526
- if (reasoningContent && (choice.delta?.reasoning_content != null || choice.delta?.reasoning != null)) {
527
- const reasoning = yield* decodeChatDeltaReasoning(providerIdentity, choice.delta.reasoning_content ?? choice.delta.reasoning ?? null);
581
+ if (context.reasoningContent && (choice.delta?.reasoning_content != null || choice.delta?.reasoning != null)) {
582
+ const reasoning = yield* decodeChatDeltaReasoning(context, state, choice.delta.reasoning_content ?? choice.delta.reasoning ?? null);
528
583
  if (reasoning.length > 0) events.push(LLMReasoningDelta$1.make({ text: reasoning }));
529
584
  }
530
585
  for (const call of choice.delta?.tool_calls ?? []) toolCalls = mergeChatToolCallDelta(toolCalls, call);
@@ -544,7 +599,7 @@ const processChatStreamPayload = (providerIdentity, reasoningContent, state, pay
544
599
  events
545
600
  };
546
601
  });
547
- const processChatStreamBlock = (providerIdentity, reasoningContent, state, block) => Effect.gen(function* () {
602
+ const processChatStreamBlock = (context, state, block) => Effect.gen(function* () {
548
603
  if (state.streamClosed) return {
549
604
  state,
550
605
  events: []
@@ -559,7 +614,7 @@ const processChatStreamBlock = (providerIdentity, reasoningContent, state, block
559
614
  state: current,
560
615
  events: []
561
616
  };
562
- return yield* processChatStreamPayload(providerIdentity, reasoningContent, current, payload);
617
+ return yield* processChatStreamPayload(context, current, payload);
563
618
  });
564
619
  const chatStreamDiagnostics = (responseFormat, state) => ProviderStreamDiagnostics.make({
565
620
  protocol: "chat-completions",
@@ -569,7 +624,7 @@ const chatStreamDiagnostics = (responseFormat, state) => ProviderStreamDiagnosti
569
624
  outputStarted: state.outputStarted,
570
625
  terminalSeen: state.hasTerminal
571
626
  });
572
- const processChatStreamText = (providerIdentity, reasoningContent, state, text) => Effect.gen(function* () {
627
+ const processChatStreamText = (context, state, text) => Effect.gen(function* () {
573
628
  const split = splitCompleteChatSseBlocks(`${state.buffer}${text}`);
574
629
  let current = {
575
630
  ...state,
@@ -577,7 +632,7 @@ const processChatStreamText = (providerIdentity, reasoningContent, state, text)
577
632
  };
578
633
  const events = [];
579
634
  for (const block of split.completeBlocks) {
580
- const step = yield* processChatStreamBlock(providerIdentity, reasoningContent, current, block);
635
+ const step = yield* processChatStreamBlock(context, current, block);
581
636
  current = step.state;
582
637
  events.push(...step.events);
583
638
  }
@@ -586,7 +641,8 @@ const processChatStreamText = (providerIdentity, reasoningContent, state, text)
586
641
  events
587
642
  };
588
643
  });
589
- const finalizeChatStreamState = (providerIdentity, responseFormat, state) => Effect.gen(function* () {
644
+ const finalizeChatStreamState = (context, state) => Effect.gen(function* () {
645
+ const { providerIdentity, responseFormat } = context;
590
646
  if (!state.hasTerminal) return yield* Effect.fail(new LLMError({
591
647
  cause: "invalid_response",
592
648
  message: `${providerIdentity.name} stream ended before a terminal chunk`,
@@ -625,12 +681,13 @@ const finalizeChatStreamState = (providerIdentity, responseFormat, state) => Eff
625
681
  const toolCallEvents = yield* Effect.forEach(orderedCalls, (call) => {
626
682
  const id = call.id;
627
683
  const name = call.name;
628
- if (id === void 0 || name === void 0) return Effect.fail(new LLMError({
629
- cause: "invalid_response",
684
+ if (id === void 0 || name === void 0) return Effect.fail(chatResponseIssueError({
685
+ providerIdentity,
686
+ issue: "invalid_tool_call",
630
687
  message: `Invalid ${providerIdentity.name} streamed tool call`,
631
- retryable: false
688
+ stream: chatStreamDiagnostics(responseFormat, state)
632
689
  }));
633
- return parseToolArguments(call.arguments, providerIdentity.name).pipe(Effect.map((params) => LLMToolCall.make({ call: ToolCall.make({
690
+ return parseToolArguments(call.arguments, providerIdentity, chatStreamDiagnostics(responseFormat, state)).pipe(Effect.map((params) => LLMToolCall.make({ call: ToolCall.make({
634
691
  id,
635
692
  name,
636
693
  params
@@ -639,7 +696,7 @@ const finalizeChatStreamState = (providerIdentity, responseFormat, state) => Eff
639
696
  const events = [...toolCallEvents];
640
697
  events.push(LLMDone.make({ stopReason: toolCallEvents.length > 0 ? "tool_use" : "stop" }));
641
698
  if (state.usage !== void 0) {
642
- const usage = yield* Schema$1.decodeUnknownEffect(OpenAiUsageResponse)(state.usage).pipe(Effect.mapError(() => invalidChatStreamEvent(providerIdentity)));
699
+ const usage = yield* Schema$1.decodeUnknownEffect(OpenAiUsageResponse)(state.usage).pipe(Effect.mapError(() => invalidChatStreamEvent(context, "invalid_usage", state)));
643
700
  events.push(LLMUsage.make({ usage: toAgentUsage(usage) }));
644
701
  }
645
702
  return events;
@@ -675,15 +732,20 @@ const expectChatSseResponse = (providerIdentity, response) => {
675
732
  }));
676
733
  };
677
734
  const streamOpenAiChatResponse = (providerIdentity, reasoningContent, responseFormat, response) => Stream.unwrap(Ref.make(initialOpenAiChatStreamState).pipe(Effect.map((stateRef) => {
735
+ const context = {
736
+ providerIdentity,
737
+ reasoningContent,
738
+ responseFormat
739
+ };
678
740
  const chunks = response.stream.pipe(Stream.mapError(toHttpClientLlmError(providerIdentity, true)), Stream.tap((chunk) => Ref.update(stateRef, (state) => ({
679
741
  ...state,
680
742
  receivedBytes: state.receivedBytes + chunk.byteLength
681
743
  }))), Stream.decodeText, Stream.mapEffect((chunk) => Effect.gen(function* () {
682
- const step = yield* processChatStreamText(providerIdentity, reasoningContent, yield* Ref.get(stateRef), chunk);
744
+ const step = yield* processChatStreamText(context, yield* Ref.get(stateRef), chunk);
683
745
  yield* Ref.set(stateRef, step.state);
684
746
  return step.events;
685
747
  })), Stream.flatMap((events) => Stream.fromIterable(events)));
686
- const finalEvents = Stream.fromEffect(Ref.get(stateRef).pipe(Effect.flatMap((state) => finalizeChatStreamState(providerIdentity, responseFormat, state)))).pipe(Stream.flatMap((events) => Stream.fromIterable(events)));
748
+ const finalEvents = Stream.fromEffect(Ref.get(stateRef).pipe(Effect.flatMap((state) => finalizeChatStreamState(context, state)))).pipe(Stream.flatMap((events) => Stream.fromIterable(events)));
687
749
  return chunks.pipe(Stream.concat(finalEvents));
688
750
  })));
689
751
  const toHttpClientLlmError = (providerIdentity, retryable) => (error) => new LLMError({
@@ -695,13 +757,19 @@ const toHttpClientLlmError = (providerIdentity, retryable) => (error) => new LLM
695
757
  kind: retryable ? "network" : "unknown"
696
758
  })
697
759
  });
698
- const parseOpenAiResponseJson = (response, providerName) => Effect.gen(function* () {
699
- const raw = yield* response.json.pipe(Effect.mapError((error) => new LLMError({
700
- cause: "invalid_response",
701
- message: `Could not parse ${providerName} response JSON: ${error.message}`,
702
- retryable: false
760
+ const parseOpenAiResponseJson = (response, providerIdentity) => Effect.gen(function* () {
761
+ const raw = yield* response.json.pipe(Effect.mapError((error) => chatResponseIssueError({
762
+ providerIdentity,
763
+ issue: "invalid_response_json",
764
+ message: `Could not parse ${providerIdentity.name} response JSON: ${error.message}`,
765
+ stream: void 0
766
+ })));
767
+ return yield* Schema$1.decodeUnknownEffect(Schema$1.Json)(raw).pipe(Effect.mapError(chatSchemaIssueError({
768
+ providerIdentity,
769
+ issue: "invalid_response_json",
770
+ message: `Could not parse ${providerIdentity.name} response JSON`,
771
+ stream: void 0
703
772
  })));
704
- return yield* Schema$1.decodeUnknownEffect(Schema$1.Json)(raw).pipe(Effect.mapError(schemaErrorToLlmError("invalid_response", `Could not parse ${providerName} response JSON`)));
705
773
  });
706
774
  const openAiRequestBodyFields = (config, providerIdentity, resolvePdfUrl) => {
707
775
  const fields = {
@@ -772,13 +840,19 @@ const sendOpenAiRequestBody = (config, request, providerIdentity, client) => Eff
772
840
  });
773
841
  const sendOpenAiRequest = (config, request, client) => Effect.gen(function* () {
774
842
  const providerIdentity = config.providerIdentity ?? defaultOpenAiProviderIdentity;
775
- const json = yield* parseOpenAiResponseJson(yield* postOpenAiRequest(config, providerIdentity, yield* sendOpenAiRequestBody(config, request, providerIdentity, client), client, request.cacheKey), providerIdentity.name);
776
- const parsed = yield* Schema$1.decodeUnknownEffect(OpenAiChatCompletionResponse)(json).pipe(Effect.mapError(schemaErrorToLlmError("invalid_response", `Invalid ${providerIdentity.name} response`)));
843
+ const json = yield* parseOpenAiResponseJson(yield* postOpenAiRequest(config, providerIdentity, yield* sendOpenAiRequestBody(config, request, providerIdentity, client), client, request.cacheKey), providerIdentity);
844
+ const parsed = yield* Schema$1.decodeUnknownEffect(OpenAiChatCompletionResponse)(json).pipe(Effect.mapError(chatSchemaIssueError({
845
+ providerIdentity,
846
+ issue: "invalid_response_body",
847
+ message: `Invalid ${providerIdentity.name} response`,
848
+ stream: void 0
849
+ })));
777
850
  const choice = parsed.choices[0];
778
- if (choice === void 0) return yield* Effect.fail(new LLMError({
779
- cause: "invalid_response",
851
+ if (choice === void 0) return yield* Effect.fail(chatResponseIssueError({
852
+ providerIdentity,
853
+ issue: "missing_choices",
780
854
  message: `${providerIdentity.name} response contained no choices`,
781
- retryable: false
855
+ stream: void 0
782
856
  }));
783
857
  const events = yield* toLlmEvents(choice, providerIdentity, config.reasoningContent ?? false);
784
858
  if (parsed.usage === void 0) return events;
@@ -801,6 +875,6 @@ const OpenAiProviderLayer = Layer.effect(LLMProvider, Effect.gen(function* () {
801
875
  return LLMProvider.of({ stream: (request) => openAiProviderStream(config, request, client) });
802
876
  })).pipe(Layer.provide(Layer.mergeAll(OpenAiConfigLayer, FetchHttpClient.layer)));
803
877
  //#endregion
804
- export { OpenAiProviderLayer, makeOpenAiProviderLayer, toOpenAiRequestBody };
878
+ export { OpenAiProviderLayer, makeOpenAiProviderLayer, openAiChatResponseIssues, toOpenAiRequestBody };
805
879
 
806
880
  //# sourceMappingURL=provider.mjs.map