zelari-code 2.8.0 → 2.9.1

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.
@@ -162,6 +162,7 @@ export async function runAgentMissionSlice(deps) {
162
162
  tools: toolSpecs,
163
163
  toolRegistry: deps.toolRegistry,
164
164
  providerStream: deps.providerStream,
165
+ buildLiveness: { mutationRequired: writeRetry, maxRecoveries: 2 },
165
166
  cwd: deps.projectRoot,
166
167
  maxToolCallsPerTurn: maxToolCalls,
167
168
  maxToolLoopIterations: maxToolLoop,
@@ -1 +1 @@
1
- {"version":3,"file":"missionSlice.js","sourceRoot":"","sources":["../../src/cli/missionSlice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"missionSlice.js","sourceRoot":"","sources":["../../src/cli/missionSlice.ts"],"names":[],"mappings":"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"}
@@ -1,53 +1,165 @@
1
1
  /**
2
- * Provider harness profiles — single source of model-aware policy.
3
- *
4
- * Context window, reasoning replay, prompt-cache expectations, sampling
5
- * defaults and compaction thresholds used to live as ad-hoc literals
6
- * (`deepseek-v4` regex in tokenBudget, temperature 0.7 in the OpenAI
7
- * adapter, 85/95% clamps in applyBudgetPolicy). Consumers read from
8
- * {@link capabilitiesFor}; Kraken core stays provider-agnostic.
9
- *
10
- * Profile `deepseek-v4` currently matches the previous hardcoded values
11
- * (1M ctx, cache priced, reasoning replay, same 70/85/95 compaction)
12
- * so existing tests stay green. New knobs go here, not in call sites.
2
+ * OpenAI-compatible provider profiles — the only layer that knows provider
3
+ * wire quirks. Core liveness, completion and progress policy stay neutral.
13
4
  */
14
- const DEFAULT_CAPS = Object.freeze({
5
+ function frozenProfile(input) {
6
+ if (input.reasoning.levels)
7
+ Object.freeze(input.reasoning.levels);
8
+ Object.freeze(input.reasoning);
9
+ Object.freeze(input.promptCache);
10
+ Object.freeze(input.toolCalling);
11
+ Object.freeze(input.buildRecovery);
12
+ Object.freeze(input.wire);
13
+ Object.freeze(input.sampling);
14
+ Object.freeze(input.compaction);
15
+ return Object.freeze(input);
16
+ }
17
+ const SHARED_COMPACTION = { warnAt: 0.7, compactAt: 0.85, hardAt: 0.95 };
18
+ const DEFAULT_CAPS = frozenProfile({
15
19
  contextWindow: 400_000,
16
- reasoning: Object.freeze({
17
- supported: true,
18
- levels: Object.freeze(['low', 'medium', 'high']),
19
- replayReasoning: true,
20
- }),
21
- promptCache: Object.freeze({ supported: true, pricedCacheRead: false }),
22
- toolCalling: Object.freeze({ parallel: true }),
23
- sampling: Object.freeze({ temperature: 0.7 }),
24
- compaction: Object.freeze({ warnAt: 0.7, compactAt: 0.85, hardAt: 0.95 }),
20
+ reasoning: { supported: true, levels: ['low', 'medium', 'high'], replayReasoning: true },
21
+ promptCache: { supported: true, pricedCacheRead: false },
22
+ toolCalling: { parallel: true },
23
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
24
+ wire: {
25
+ grokRequestHeaders: false,
26
+ omitAutoToolChoice: false,
27
+ toolCallDeltasResetIdle: false,
28
+ retriesBeforeOutput: 0,
29
+ strictSseJson: false,
30
+ },
31
+ sampling: { temperature: 0.7 },
32
+ compaction: { ...SHARED_COMPACTION },
25
33
  profile: 'default',
26
34
  });
27
- const DEEPSEEK_V4_CAPS = Object.freeze({
35
+ const DEEPSEEK_V4_CAPS = frozenProfile({
28
36
  contextWindow: 1_000_000,
29
- reasoning: Object.freeze({
30
- supported: true,
31
- levels: Object.freeze(['high', 'max']),
32
- replayReasoning: true,
33
- }),
34
- promptCache: Object.freeze({ supported: true, pricedCacheRead: true }),
35
- toolCalling: Object.freeze({ parallel: true }),
36
- sampling: Object.freeze({ temperature: 0.7 }),
37
- compaction: Object.freeze({ warnAt: 0.7, compactAt: 0.85, hardAt: 0.95 }),
37
+ reasoning: { supported: true, levels: ['high', 'max'], replayReasoning: true },
38
+ promptCache: { supported: true, pricedCacheRead: true },
39
+ toolCalling: { parallel: true },
40
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
41
+ wire: {
42
+ grokRequestHeaders: false,
43
+ omitAutoToolChoice: false,
44
+ toolCallDeltasResetIdle: false,
45
+ retriesBeforeOutput: 0,
46
+ strictSseJson: false,
47
+ },
48
+ sampling: { temperature: 0.7 },
49
+ compaction: { ...SHARED_COMPACTION },
38
50
  profile: 'deepseek-v4',
39
51
  });
40
- /** Model-id detector. The only `deepseek-v4` capability regex in src/. */
41
- const DEEPSEEK_V4_RE = /^deepseek-v4(\.|-|$)/i;
42
- export function resolveHarnessProfile(model) {
43
- if (model && DEEPSEEK_V4_RE.test(model))
52
+ const GROK_CAPS = frozenProfile({
53
+ contextWindow: 500_000,
54
+ reasoning: {
55
+ supported: true,
56
+ levels: ['low', 'medium', 'high', 'xhigh'],
57
+ replayReasoning: false,
58
+ },
59
+ promptCache: {
60
+ supported: true,
61
+ pricedCacheRead: true,
62
+ conversationAffinityHeader: 'x-grok-conv-id',
63
+ },
64
+ toolCalling: { parallel: true },
65
+ buildRecovery: { forceToolChoice: true, maxForcedTurns: 1 },
66
+ wire: {
67
+ grokRequestHeaders: true,
68
+ omitAutoToolChoice: true,
69
+ toolCallDeltasResetIdle: true,
70
+ retriesBeforeOutput: 1,
71
+ strictSseJson: true,
72
+ },
73
+ sampling: { temperature: 0.7 },
74
+ compaction: { ...SHARED_COMPACTION },
75
+ profile: 'grok',
76
+ });
77
+ const MINIMAX_M3_CAPS = frozenProfile({
78
+ contextWindow: 1_000_000,
79
+ reasoning: { supported: true, replayReasoning: true },
80
+ promptCache: { supported: false, pricedCacheRead: false },
81
+ toolCalling: { parallel: true },
82
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
83
+ wire: {
84
+ grokRequestHeaders: false,
85
+ omitAutoToolChoice: false,
86
+ toolCallDeltasResetIdle: false,
87
+ retriesBeforeOutput: 0,
88
+ strictSseJson: false,
89
+ },
90
+ sampling: { temperature: 0.7 },
91
+ compaction: { ...SHARED_COMPACTION },
92
+ profile: 'minimax',
93
+ });
94
+ const MINIMAX_M2_CAPS = frozenProfile({
95
+ contextWindow: 204_800,
96
+ reasoning: { supported: true, replayReasoning: true },
97
+ promptCache: { supported: false, pricedCacheRead: false },
98
+ toolCalling: { parallel: true },
99
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
100
+ wire: {
101
+ grokRequestHeaders: false,
102
+ omitAutoToolChoice: false,
103
+ toolCallDeltasResetIdle: false,
104
+ retriesBeforeOutput: 0,
105
+ strictSseJson: false,
106
+ },
107
+ sampling: { temperature: 0.7 },
108
+ compaction: { ...SHARED_COMPACTION },
109
+ profile: 'minimax',
110
+ });
111
+ const GLM_CAPS = frozenProfile({
112
+ contextWindow: 200_000,
113
+ reasoning: { supported: true, replayReasoning: true },
114
+ promptCache: { supported: true, pricedCacheRead: false },
115
+ toolCalling: { parallel: true },
116
+ buildRecovery: { forceToolChoice: false, maxForcedTurns: 0 },
117
+ wire: {
118
+ grokRequestHeaders: false,
119
+ omitAutoToolChoice: false,
120
+ toolCallDeltasResetIdle: false,
121
+ retriesBeforeOutput: 0,
122
+ strictSseJson: false,
123
+ },
124
+ sampling: { temperature: 0.7 },
125
+ compaction: { ...SHARED_COMPACTION },
126
+ profile: 'glm',
127
+ });
128
+ const DEEPSEEK_RE = /^deepseek-(?:v4(?:\.|-|$)|chat$|reasoner$)/i;
129
+ const GROK_RE = /^grok(?:\.|-|$)/i;
130
+ const MINIMAX_RE = /^minimax(?:\.|-|$)/i;
131
+ const MINIMAX_M3_RE = /^minimax-m3(?:\.|-|$)/i;
132
+ const GLM_RE = /^glm(?:\.|-|$)/i;
133
+ export function resolveHarnessProfile(model, providerId) {
134
+ const provider = providerId?.trim().toLowerCase();
135
+ if (provider === 'deepseek')
136
+ return 'deepseek-v4';
137
+ if (provider === 'grok')
138
+ return 'grok';
139
+ if (provider === 'minimax')
140
+ return 'minimax';
141
+ if (provider === 'glm')
142
+ return 'glm';
143
+ if (model && DEEPSEEK_RE.test(model))
44
144
  return 'deepseek-v4';
145
+ if (model && GROK_RE.test(model))
146
+ return 'grok';
147
+ if (model && MINIMAX_RE.test(model))
148
+ return 'minimax';
149
+ if (model && GLM_RE.test(model))
150
+ return 'glm';
45
151
  return 'default';
46
152
  }
47
- export function capabilitiesFor(model) {
48
- return resolveHarnessProfile(model) === 'deepseek-v4' ? DEEPSEEK_V4_CAPS : DEFAULT_CAPS;
153
+ export function capabilitiesFor(model, providerId) {
154
+ switch (resolveHarnessProfile(model, providerId)) {
155
+ case 'deepseek-v4': return DEEPSEEK_V4_CAPS;
156
+ case 'grok': return GROK_CAPS;
157
+ case 'minimax': return model && MINIMAX_M3_RE.test(model) ? MINIMAX_M3_CAPS : MINIMAX_M2_CAPS;
158
+ case 'glm': return GLM_CAPS;
159
+ default: return DEFAULT_CAPS;
160
+ }
49
161
  }
50
- export function isDeepSeekV4Model(model) {
51
- return resolveHarnessProfile(model) === 'deepseek-v4';
162
+ export function isDeepSeekV4Model(model, providerId) {
163
+ return resolveHarnessProfile(model, providerId) === 'deepseek-v4';
52
164
  }
53
165
  //# sourceMappingURL=capabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/cli/provider/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoCH,MAAM,YAAY,GAAmC,MAAM,CAAC,MAAM,CAAC;IACjE,aAAa,EAAE,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAa;QAC5D,eAAe,EAAE,IAAI;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IACvE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAmC,MAAM,CAAC,MAAM,CAAC;IACrE,aAAa,EAAE,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAa;QAClD,eAAe,EAAE,IAAI;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,qBAAqB,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,qBAAqB,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/cli/provider/capabilities.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,12 @@
12
12
  *
13
13
  * Implements ProviderStreamFn (AsyncIterable<ProviderDelta>).
14
14
  */
15
+ import { randomUUID } from 'node:crypto';
15
16
  import { getOAuthToken, resolveApiKeyWithMeta } from '../keyStore.js';
16
17
  import { getProviderConfig, getModelForProvider, getCustomEndpoint, getThinkingForProvider } from '../providerConfig.js';
17
18
  import { translateOpenAiCompatibleThinking } from '../thinking.js';
18
19
  import { capabilitiesFor } from './capabilities.js';
20
+ import { SseDataDecoder } from './sse.js';
19
21
  /**
20
22
  * v1.5.2: transient-HTTP retry. A single 429/5xx/network failure used to flip
21
23
  * the whole council member turn to `reason:'error'` (AgentHarness treats any
@@ -140,8 +142,9 @@ export async function readChunkWithTimeout(reader, opts) {
140
142
  reader.read(),
141
143
  new Promise((_, reject) => {
142
144
  idleTimer = setTimeout(() => {
143
- reject(new Error(`Provider stream idle for ${Math.round(waitMs / 1000)}s ` +
144
- `(no tokens). The model/gateway stalled try again or switch model. ` +
145
+ const totalIdleMs = Math.max(opts.idleMs, Date.now() - opts.lastUsefulAt());
146
+ reject(new Error(`Provider stream idle for ${Math.round(totalIdleMs / 1000)}s ` +
147
+ `(no useful deltas). The model/gateway stalled — try again or switch model. ` +
145
148
  `Override with ZELARI_PROVIDER_STREAM_IDLE_MS.`));
146
149
  }, waitMs);
147
150
  if (opts.signal) {
@@ -252,6 +255,34 @@ export function parseCachedPromptTokens(usage) {
252
255
  }
253
256
  return 0;
254
257
  }
258
+ /**
259
+ * Parse the two error envelopes emitted inside xAI/OpenAI-compatible SSE:
260
+ * nested OpenAI (`error: { message, type, code }`) and flat xAI gateway
261
+ * (`code: string, error: string`). Normal completion chunks return null.
262
+ */
263
+ export function parseOpenAiStreamError(value) {
264
+ if (!value || typeof value !== 'object' || Array.isArray(value))
265
+ return null;
266
+ const root = value;
267
+ const nested = root.error;
268
+ if (nested && typeof nested === 'object' && !Array.isArray(nested)) {
269
+ const error = nested;
270
+ const message = typeof error.message === 'string' && error.message.trim()
271
+ ? error.message.trim()
272
+ : 'unknown error';
273
+ const type = typeof error.type === 'string' && error.type.trim()
274
+ ? error.type.trim()
275
+ : 'server_error';
276
+ return `Provider stream error (${type}): ${message}`;
277
+ }
278
+ if (typeof nested === 'string' && nested.trim()) {
279
+ const type = typeof root.code === 'string' && root.code.trim()
280
+ ? root.code.trim()
281
+ : 'server_error';
282
+ return `Provider stream error (${type}): ${nested.trim()}`;
283
+ }
284
+ return null;
285
+ }
255
286
  /**
256
287
  * Resolve baseUrl for a given provider. Priority:
257
288
  * 1. Custom endpoint persisted via `/provider custom <url>` (wins always)
@@ -368,7 +399,8 @@ function mapAgentMessage(m, vision) {
368
399
  return { role: m.role, content: m.content };
369
400
  }
370
401
  export function openaiCompatibleProvider(config) {
371
- return async function* (params) {
402
+ const run = async function* (params, streamRetryAttempt = 0) {
403
+ const capabilities = capabilitiesFor(params.model, config.providerId);
372
404
  // Map the provider-neutral AgentMessage[] into the OpenAI chat format.
373
405
  // The harness keeps tool results as { role: 'tool', toolCallId, content }
374
406
  // and assistant tool-call turns as { role: 'assistant', content,
@@ -404,7 +436,7 @@ export function openaiCompatibleProvider(config) {
404
436
  model: params.model,
405
437
  messages,
406
438
  stream: true,
407
- temperature: generation?.temperature ?? capabilitiesFor(params.model).sampling.temperature,
439
+ temperature: generation?.temperature ?? capabilities.sampling.temperature,
408
440
  // Task G.4.2 — request the provider to send real token usage in
409
441
  // the final chunk (gated by `stream_options.include_usage` on the
410
442
  // OpenAI-compatible API). Providers that don't honor this (some
@@ -451,7 +483,41 @@ export function openaiCompatibleProvider(config) {
451
483
  parameters: t.parameters,
452
484
  },
453
485
  }));
454
- body.tool_choice = 'auto';
486
+ const recoveryAttempt = generation?.recoveryAttempt ?? 1;
487
+ const forceRecoveryTool = generation?.toolChoice === 'required' &&
488
+ capabilities.buildRecovery.forceToolChoice &&
489
+ recoveryAttempt <= capabilities.buildRecovery.maxForcedTurns;
490
+ if (forceRecoveryTool) {
491
+ body.tool_choice = 'required';
492
+ }
493
+ else if (!capabilities.wire.omitAutoToolChoice) {
494
+ body.tool_choice = 'auto';
495
+ }
496
+ }
497
+ const headers = {
498
+ 'Content-Type': 'application/json',
499
+ Authorization: `Bearer ${config.apiKey}`,
500
+ ...(config.extraHeaders ?? {}),
501
+ };
502
+ const affinityHeader = capabilities.promptCache.conversationAffinityHeader;
503
+ const conversationId = params.conversationId?.trim();
504
+ const safeConversationId = conversationId &&
505
+ conversationId.length <= 256 &&
506
+ !/[\u0000-\u001f\u007f]/.test(conversationId)
507
+ ? conversationId
508
+ : undefined;
509
+ if (affinityHeader && safeConversationId) {
510
+ headers[affinityHeader] = safeConversationId;
511
+ }
512
+ if (capabilities.wire.grokRequestHeaders) {
513
+ // Mirrors the public Grok Build harness request identity. conv/session
514
+ // remain stable for affinity; req-id is unique per HTTP attempt.
515
+ headers.Accept = 'text/event-stream';
516
+ headers['x-grok-client-identifier'] = 'zelari-code';
517
+ headers['x-grok-req-id'] = `zelari-${randomUUID()}`;
518
+ headers['x-grok-model-override'] = params.model;
519
+ if (safeConversationId)
520
+ headers['x-grok-session-id'] = safeConversationId;
455
521
  }
456
522
  // v1.5.2: retry transient failures (429/5xx + network errors) on the
457
523
  // initial response. Retries happen BEFORE any stream byte is read, so
@@ -483,10 +549,7 @@ export function openaiCompatibleProvider(config) {
483
549
  try {
484
550
  response = await fetch(`${config.baseUrl}/chat/completions`, {
485
551
  method: 'POST',
486
- headers: {
487
- 'Content-Type': 'application/json',
488
- Authorization: `Bearer ${config.apiKey}`,
489
- },
552
+ headers,
490
553
  body: JSON.stringify(body),
491
554
  // Cancel aborts the HTTP request; stream idle is enforced below
492
555
  // per-chunk so active multi-minute streams are not killed.
@@ -556,7 +619,7 @@ export function openaiCompatibleProvider(config) {
556
619
  }
557
620
  const reader = response.body.getReader();
558
621
  const decoder = new TextDecoder();
559
- let buffer = '';
622
+ const sseDecoder = new SseDataDecoder();
560
623
  // Accumulator for OpenAI tool_calls streaming (Task A1).
561
624
  // Args JSON is delivered incrementally; we emit a `tool_call` delta
562
625
  // when the accumulated args for a given index parse to a complete
@@ -565,6 +628,7 @@ export function openaiCompatibleProvider(config) {
565
628
  // only at the end) still execute tools — critical for MiniMax-M3.
566
629
  const toolCallAccumulator = new Map();
567
630
  let emittedToolCall = false;
631
+ let emittedProviderDelta = false;
568
632
  /** MiniMax reasoning_split may stream cumulative `reasoning_details[].text`. */
569
633
  let reasoningDetailsBuf = '';
570
634
  const tryParseArgs = (raw) => {
@@ -592,6 +656,7 @@ export function openaiCompatibleProvider(config) {
592
656
  continue; // incomplete JSON — leave dropped
593
657
  toolCallAccumulator.delete(idx);
594
658
  emittedToolCall = true;
659
+ emittedProviderDelta = true;
595
660
  markUseful();
596
661
  yield {
597
662
  kind: 'tool_call',
@@ -634,21 +699,23 @@ export function openaiCompatibleProvider(config) {
634
699
  catch {
635
700
  /* ignore */
636
701
  }
702
+ if (!emittedProviderDelta &&
703
+ streamRetryAttempt < capabilities.wire.retriesBeforeOutput) {
704
+ await abortableSleep(backoffDelay(streamRetryAttempt, null), params.signal);
705
+ yield* run(params, streamRetryAttempt + 1);
706
+ return;
707
+ }
637
708
  yield { kind: 'error', message: msg };
638
709
  return;
639
710
  }
640
711
  const { value, done } = chunk;
641
- if (done)
642
- break;
643
- buffer += decoder.decode(value, { stream: true });
644
- // SSE format: lines starting with "data: "
645
- const lines = buffer.split('\n');
646
- buffer = lines.pop() ?? ''; // keep the incomplete line in buffer
647
- for (const line of lines) {
648
- const trimmed = line.trim();
649
- if (!trimmed.startsWith('data:'))
712
+ const decoded = done
713
+ ? decoder.decode()
714
+ : decoder.decode(value, { stream: true });
715
+ const events = sseDecoder.push(decoded, done);
716
+ for (const data of events) {
717
+ if (data.length === 0)
650
718
  continue;
651
- const data = trimmed.slice(5).trim();
652
719
  if (data === '[DONE]') {
653
720
  yield* flushToolAccumulator();
654
721
  // If tools ran but the provider never sent finish_reason=tool_calls
@@ -660,7 +727,25 @@ export function openaiCompatibleProvider(config) {
660
727
  return;
661
728
  }
662
729
  try {
663
- const parsed = JSON.parse(data);
730
+ const rawParsed = JSON.parse(data);
731
+ const streamError = parseOpenAiStreamError(rawParsed);
732
+ if (streamError) {
733
+ try {
734
+ await reader.cancel(streamError);
735
+ }
736
+ catch {
737
+ /* ignore */
738
+ }
739
+ if (!emittedProviderDelta &&
740
+ streamRetryAttempt < capabilities.wire.retriesBeforeOutput) {
741
+ await abortableSleep(backoffDelay(streamRetryAttempt, null), params.signal);
742
+ yield* run(params, streamRetryAttempt + 1);
743
+ return;
744
+ }
745
+ yield { kind: 'error', message: streamError };
746
+ return;
747
+ }
748
+ const parsed = rawParsed;
664
749
  const choice = parsed.choices?.[0];
665
750
  const delta = choice?.delta;
666
751
  // Task G.4.2 — emit a `usage` delta whenever the provider
@@ -679,6 +764,7 @@ export function openaiCompatibleProvider(config) {
679
764
  : promptTokens + completionTokens;
680
765
  const cachedPromptTokens = parseCachedPromptTokens(parsed.usage);
681
766
  markUseful();
767
+ emittedProviderDelta = true;
682
768
  yield {
683
769
  kind: 'usage',
684
770
  usage: {
@@ -691,6 +777,7 @@ export function openaiCompatibleProvider(config) {
691
777
  }
692
778
  if (typeof delta?.content === 'string' && delta.content.length > 0) {
693
779
  markUseful();
780
+ emittedProviderDelta = true;
694
781
  yield { kind: 'text', delta: delta.content };
695
782
  }
696
783
  // Chain-of-thought / reasoning channel. GLM, DeepSeek, Qwen and
@@ -703,6 +790,7 @@ export function openaiCompatibleProvider(config) {
703
790
  delta?.reasoning;
704
791
  if (typeof reasoning === 'string' && reasoning.length > 0) {
705
792
  markUseful();
793
+ emittedProviderDelta = true;
706
794
  yield { kind: 'thinking', delta: reasoning };
707
795
  }
708
796
  // MiniMax-M3 reasoning_split format: reasoning_details[{text}]
@@ -720,6 +808,7 @@ export function openaiCompatibleProvider(config) {
720
808
  reasoningDetailsBuf = t;
721
809
  if (piece.length > 0) {
722
810
  markUseful();
811
+ emittedProviderDelta = true;
723
812
  yield { kind: 'thinking', delta: piece };
724
813
  }
725
814
  }
@@ -727,6 +816,7 @@ export function openaiCompatibleProvider(config) {
727
816
  // Non-cumulative chunk — treat as a fresh delta.
728
817
  reasoningDetailsBuf += t;
729
818
  markUseful();
819
+ emittedProviderDelta = true;
730
820
  yield { kind: 'thinking', delta: t };
731
821
  }
732
822
  }
@@ -734,6 +824,13 @@ export function openaiCompatibleProvider(config) {
734
824
  // OpenAI tool_calls are streamed incrementally — accumulate args
735
825
  // per index and emit a tool_call delta when the args JSON closes.
736
826
  if (Array.isArray(delta?.tool_calls)) {
827
+ if (capabilities.wire.toolCallDeltasResetIdle &&
828
+ delta.tool_calls.length > 0) {
829
+ // Grok Build treats every partial function-call fragment as
830
+ // model progress. A large write_file payload can stream for
831
+ // minutes before its JSON is complete enough to emit.
832
+ markUseful();
833
+ }
737
834
  // Accumulate args fragments only — parsing happens once at
738
835
  // flush time (finish_reason / [DONE] / stream end). The old
739
836
  // heuristic re-parsed the whole accumulated buffer on every
@@ -762,6 +859,7 @@ export function openaiCompatibleProvider(config) {
762
859
  if (choice?.finish_reason) {
763
860
  yield* flushToolAccumulator();
764
861
  markUseful();
862
+ emittedProviderDelta = true;
765
863
  const reason = choice.finish_reason === 'stop' && emittedToolCall
766
864
  ? 'tool_calls'
767
865
  : choice.finish_reason;
@@ -769,9 +867,18 @@ export function openaiCompatibleProvider(config) {
769
867
  }
770
868
  }
771
869
  catch {
772
- // Skip malformed lines
870
+ if (capabilities.wire.strictSseJson) {
871
+ yield {
872
+ kind: 'error',
873
+ message: 'Malformed Grok SSE data event (expected Chat Completions JSON).',
874
+ };
875
+ return;
876
+ }
877
+ // Lenient compatibility for third-party OpenAI-shaped gateways.
773
878
  }
774
879
  }
880
+ if (done)
881
+ break;
775
882
  }
776
883
  // Stream ended without [DONE] — still flush tools + finish.
777
884
  yield* flushToolAccumulator();
@@ -784,6 +891,7 @@ export function openaiCompatibleProvider(config) {
784
891
  reader.releaseLock();
785
892
  }
786
893
  };
894
+ return (params) => run(params);
787
895
  }
788
896
  /**
789
897
  * Helper: read env + keyStore + providerConfig and return a configured