ns-kiro-core 0.2.3 → 0.3.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.
@@ -13,8 +13,9 @@ const ECHO_NOISE_PATTERN = /^\s*(continue|\.+)\s*$/i;
13
13
  * Accumulates one response.
14
14
  *
15
15
  * Block indexes are monotonic across the whole call, including across an
16
- * internal retry, so the buffer and the usage totals outlive a single attempt
17
- * while everything else is reset by {@link beginAttempt}.
16
+ * internal retry, so the buffer outlives a single attempt while everything
17
+ * else — including the usage figures — is reset by {@link beginAttempt}:
18
+ * a discarded attempt must not bill the turn that replaced it.
18
19
  */
19
20
  export class KiroResponseAssembler {
20
21
  model;
@@ -30,6 +31,7 @@ export class KiroResponseAssembler {
30
31
  totalContent = "";
31
32
  lastContentData = "";
32
33
  usageEvent = null;
34
+ meteringEvent = null;
33
35
  receivedContextUsage = false;
34
36
  thinkingParser = null;
35
37
  nativeThinkingBlockIndex = null;
@@ -37,16 +39,19 @@ export class KiroResponseAssembler {
37
39
  textBlockIndex = null;
38
40
  emittedToolCalls = 0;
39
41
  sawAnyToolCalls = false;
42
+ droppedToolCalls = [];
40
43
  currentToolCall = null;
44
+ stopReason = "stop";
41
45
  constructor(model, thinkingEnabled) {
42
46
  this.model = model;
43
47
  this.thinkingEnabled = thinkingEnabled;
44
48
  }
45
- /** Clear per-attempt state. Block indexes and accumulated usage are kept. */
49
+ /** Clear per-attempt state. Only block indexes are kept. */
46
50
  beginAttempt() {
47
51
  this.totalContent = "";
48
52
  this.lastContentData = "";
49
53
  this.usageEvent = null;
54
+ this.meteringEvent = null;
50
55
  this.receivedContextUsage = false;
51
56
  this.thinkingParser = this.thinkingEnabled ? new ThinkingTagParser(this.blocks) : null;
52
57
  this.nativeThinkingBlockIndex = null;
@@ -54,7 +59,23 @@ export class KiroResponseAssembler {
54
59
  this.textBlockIndex = null;
55
60
  this.emittedToolCalls = 0;
56
61
  this.sawAnyToolCalls = false;
62
+ this.droppedToolCalls = [];
57
63
  this.currentToolCall = null;
64
+ // Every wire-derived usage figure lives on `usage`, which outlives the
65
+ // retry loop, so an abandoned attempt's accounting would otherwise be
66
+ // billed to the turn that replaced it.
67
+ this.usage.input = 0;
68
+ this.usage.output = 0;
69
+ this.usage.totalTokens = 0;
70
+ this.usage.cost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };
71
+ // Optional fields stay absent rather than 0: absent means "the service did
72
+ // not report it", which a retried turn must not overwrite with a stale or
73
+ // invented figure.
74
+ delete this.usage.cacheRead;
75
+ delete this.usage.cacheWrite;
76
+ delete this.usage.contextPercent;
77
+ delete this.usage.credits;
78
+ delete this.usage.creditUnit;
58
79
  }
59
80
  /** Hand over the events buffered so far. */
60
81
  takeEvents() {
@@ -134,7 +155,10 @@ export class KiroResponseAssembler {
134
155
  break;
135
156
  }
136
157
  case "usage": {
137
- this.usageEvent = event.data;
158
+ // Every metadataEvent field is optional, so the service may split
159
+ // tokenUsage and stopReason/stopDetails across frames. Merge so a
160
+ // later partial frame cannot erase counts already received.
161
+ this.usageEvent = { ...(this.usageEvent ?? {}), ...event.data };
138
162
  // The parsed event keeps only the fields this package understands.
139
163
  // Log the frame verbatim so a field Kiro adds — cache counters above
140
164
  // all — is visible without having to guess its name first.
@@ -142,6 +166,12 @@ export class KiroResponseAssembler {
142
166
  debugLog("response.usageRaw", payload);
143
167
  break;
144
168
  }
169
+ case "metering": {
170
+ this.meteringEvent = event.data;
171
+ if (debugEnabled())
172
+ debugLog("stream.metering", [event.data]);
173
+ break;
174
+ }
145
175
  // followupPrompt events are intentionally ignored
146
176
  }
147
177
  }
@@ -150,18 +180,45 @@ export class KiroResponseAssembler {
150
180
  * text-dialect recovery and echo-stripping passes.
151
181
  */
152
182
  endTurn() {
153
- if (this.currentToolCall && this.emitToolCall(this.currentToolCall))
154
- this.emittedToolCalls++;
183
+ if (this.currentToolCall) {
184
+ if (this.emitToolCall(this.currentToolCall))
185
+ this.emittedToolCalls++;
186
+ else
187
+ this.droppedToolCalls.push(this.currentToolCall.name);
188
+ }
155
189
  this.currentToolCall = null;
156
190
  this.endNativeThinking();
157
191
  if (this.thinkingParser) {
158
192
  this.thinkingParser.finalize();
159
193
  this.textBlockIndex = this.thinkingParser.getTextBlockIndex();
160
194
  }
195
+ // Deliberately still gated on `sawAnyToolCalls`, so it does NOT run when a
196
+ // native call arrived and was dropped for unparseable arguments. Widening it
197
+ // to `emittedToolCalls === 0` would enable text recovery on exactly the path
198
+ // where `KiroModel.recoverTextToolCalls === false` says not to (Claude). The
199
+ // drop is reported instead via `droppedToolCalls`.
161
200
  this.recoverTextToolCalls();
162
201
  this.stripEchoNoise();
163
202
  const responseText = this.textBlockIndex === null ? "" : this.blocks.getText(this.textBlockIndex);
164
203
  const hasText = responseText.length > 0;
204
+ // Resolved here — before the caller's retry-exhaustion warnings — so those
205
+ // diagnostics can report the value actually assigned. It reads only
206
+ // `receivedContextUsage` and `emittedToolCalls`, both final at this point.
207
+ //
208
+ // Use `emittedToolCalls`, not the count seen on the wire: a turn whose calls
209
+ // were all dropped for unparseable input must not report `toolUse`, because
210
+ // an empty turn with a tool-use stop stalls an agent loop waiting for
211
+ // results that will never arrive.
212
+ //
213
+ // `length` is inferred, not reported: Kiro sends no stop reason, so a turn
214
+ // that produced no tool call and never carried a contextUsage frame is
215
+ // treated as cut short.
216
+ this.stopReason =
217
+ !this.receivedContextUsage && this.emittedToolCalls === 0
218
+ ? "length"
219
+ : this.emittedToolCalls > 0
220
+ ? "toolUse"
221
+ : "stop";
165
222
  return {
166
223
  responseText,
167
224
  hasText,
@@ -169,6 +226,8 @@ export class KiroResponseAssembler {
169
226
  emittedToolCalls: this.emittedToolCalls,
170
227
  isEchoLoop: hasText && !this.sawAnyToolCalls && ECHO_NOISE_PATTERN.test(responseText),
171
228
  isEmpty: !hasText && !this.sawAnyToolCalls,
229
+ stopReason: this.stopReason,
230
+ droppedToolCalls: this.droppedToolCalls,
172
231
  };
173
232
  }
174
233
  /** Drop an echo the caller decided not to retry, so it is not read as a continuation signal. */
@@ -176,6 +235,10 @@ export class KiroResponseAssembler {
176
235
  if (this.textBlockIndex !== null)
177
236
  this.blocks.setText(this.textBlockIndex, "");
178
237
  }
238
+ /** Kinds of the blocks this attempt produced, for the exhaustion diagnostic. */
239
+ contentKinds() {
240
+ return this.blocks.kinds();
241
+ }
179
242
  /** Close the text block and settle usage and the stop reason. */
180
243
  complete() {
181
244
  if (this.textBlockIndex !== null)
@@ -185,43 +248,46 @@ export class KiroResponseAssembler {
185
248
  // tiktoken estimate over everything the assistant emitted — text plus
186
249
  // tool-call input JSON. Otherwise tool-call-only turns report 0 output
187
250
  // tokens and break consumers that watch it.
251
+ // `KiroWireUsage.inputTokens` is `TokenUsage.uncachedInputTokens` — the
252
+ // input billed at full rate, NOT total input — with the cache counts as
253
+ // siblings, so the cache counts must land whenever `input` is taken from
254
+ // the wire; otherwise a cached turn reports a fraction of its real input.
188
255
  if (this.usageEvent?.inputTokens !== undefined)
189
256
  this.usage.input = this.usageEvent.inputTokens;
190
257
  this.usage.output = this.usageEvent?.outputTokens ?? countTokens(this.totalContent);
191
- this.usage.totalTokens = this.usage.input + this.usage.output;
258
+ // `TokenUsage.totalTokens` is required on the wire while the cache counts
259
+ // are optional, so the service's own total is the authoritative figure —
260
+ // recomputing from components silently under-reports whenever a component
261
+ // is omitted. Prefer it and fall back to the sum.
262
+ this.usage.totalTokens =
263
+ this.usageEvent?.totalTokens ??
264
+ this.usage.input +
265
+ (this.usageEvent?.cacheReadInputTokens ?? 0) +
266
+ (this.usageEvent?.cacheWriteInputTokens ?? 0) +
267
+ this.usage.output;
192
268
  // Only set when reported: leaving these absent is what tells a host that
193
269
  // Kiro said nothing about caching, rather than that nothing was cached.
194
- if (this.usageEvent?.cacheReadTokens !== undefined)
195
- this.usage.cacheRead = this.usageEvent.cacheReadTokens;
196
- if (this.usageEvent?.cacheWriteTokens !== undefined)
197
- this.usage.cacheWrite = this.usageEvent.cacheWriteTokens;
198
- if (this.usageEvent?.credits !== undefined)
199
- this.usage.credits = this.usageEvent.credits;
200
- if (this.usageEvent?.creditUnit !== undefined)
201
- this.usage.creditUnit = this.usageEvent.creditUnit;
270
+ if (this.usageEvent?.cacheReadInputTokens !== undefined)
271
+ this.usage.cacheRead = this.usageEvent.cacheReadInputTokens;
272
+ if (this.usageEvent?.cacheWriteInputTokens !== undefined)
273
+ this.usage.cacheWrite = this.usageEvent.cacheWriteInputTokens;
274
+ // The metering frame is the only usage figure Kiro actually sends: a
275
+ // credit count, not tokens.
276
+ if (this.meteringEvent?.credits !== undefined)
277
+ this.usage.credits = this.meteringEvent.credits;
278
+ if (this.meteringEvent?.unit !== undefined)
279
+ this.usage.creditUnit = this.meteringEvent.unit;
202
280
  this.usage.cost = calculateKiroCost(this.model.cost, this.usage);
203
- // Use `emittedToolCalls`, not the count seen on the wire: a turn whose calls
204
- // were all dropped for unparseable input must not report `toolUse`, because
205
- // an empty turn with a tool-use stop stalls an agent loop waiting for
206
- // results that will never arrive.
207
- //
208
- // `length` is inferred, not reported: Kiro sends no stop reason, so a turn
209
- // that produced no tool call and never carried a contextUsage frame is
210
- // treated as cut short.
281
+ const stopReason = this.stopReason;
211
282
  //
212
- // That rests on contextUsage closing every complete response. Checked
213
- // 2026-09-06 across a short reply, a ~5000-character one, a tool-call turn,
214
- // a model with no effort schema (claude-haiku-4.5) and a non-Claude model
215
- // (glm-5): the frame arrived in all five, so its absence really does mark an
216
- // abnormal turn. `response.done` logs `receivedContextUsage` in case a later
217
- // Kiro stops sending it — a false `length` is read by hosts as truncation
218
- // and prepends TRUNCATION_NOTICE, asking the model to continue work it
219
- // already finished.
220
- const stopReason = !this.receivedContextUsage && this.emittedToolCalls === 0
221
- ? "length"
222
- : this.emittedToolCalls > 0
223
- ? "toolUse"
224
- : "stop";
283
+ // The `length` heuristic rests on contextUsage closing every complete
284
+ // response. Checked 2026-09-06 across a short reply, a ~5000-character one,
285
+ // a tool-call turn, a model with no effort schema (claude-haiku-4.5) and a
286
+ // non-Claude model (glm-5): the frame arrived in all five, so its absence
287
+ // really does mark an abnormal turn. `response.done` logs
288
+ // `receivedContextUsage` in case a later Kiro stops sending it — a false
289
+ // `length` is read by hosts as truncation and prepends TRUNCATION_NOTICE,
290
+ // asking the model to continue work it already finished.
225
291
  debugLog("response.done", {
226
292
  stopReason,
227
293
  receivedContextUsage: this.receivedContextUsage,
@@ -230,7 +296,12 @@ export class KiroResponseAssembler {
230
296
  textLen: this.textBlockIndex === null ? 0 : this.blocks.getText(this.textBlockIndex).length,
231
297
  usage: this.usage,
232
298
  });
233
- return { stopReason, usage: this.usage };
299
+ return {
300
+ stopReason,
301
+ usage: this.usage,
302
+ wireUsage: this.usageEvent,
303
+ metering: this.meteringEvent,
304
+ };
234
305
  }
235
306
  ensureNativeThinkingBlock() {
236
307
  if (this.nativeThinkingBlockIndex === null)
@@ -255,6 +326,10 @@ export class KiroResponseAssembler {
255
326
  args = JSON.parse(state.input);
256
327
  }
257
328
  catch (e) {
329
+ // Returning false drops the call: nothing is emitted for it, so the call
330
+ // the model made never reaches the agent. Callers record the name in
331
+ // `droppedToolCalls` so the turn can carry a diagnostic about it — a
332
+ // console warning is invisible to whoever reads the transcript.
258
333
  console.warn(`[kiro-core] Failed to parse tool input for "${state.name}" (toolUseId: ${state.toolUseId}): ${formatSafeError(e)}. Raw input (${state.input.length} chars): ${redactSensitiveText(state.input.substring(0, 200))}`);
259
334
  return false;
260
335
  }
@@ -269,6 +344,8 @@ export class KiroResponseAssembler {
269
344
  return;
270
345
  if (this.emitToolCall(this.currentToolCall))
271
346
  this.emittedToolCalls++;
347
+ else
348
+ this.droppedToolCalls.push(this.currentToolCall.name);
272
349
  this.currentToolCall = null;
273
350
  }
274
351
  /**
@@ -311,6 +388,17 @@ export class KiroResponseAssembler {
311
388
  if (this.emitToolCall({ toolUseId: call.toolUseId, name: call.name, input: JSON.stringify(call.arguments) })) {
312
389
  this.emittedToolCalls++;
313
390
  }
391
+ else {
392
+ // Unreachable as written, and kept deliberately. Both dialects hand
393
+ // over an in-memory object — bracket-tool-parser's is itself a
394
+ // successful `JSON.parse` result, invoke-tool-parser's is a record of
395
+ // raw parameter strings — so `JSON.stringify` of either always
396
+ // round-trips and `emitToolCall`'s only `false` return, a
397
+ // `JSON.parse` throw, cannot fire here. It stays so that a future
398
+ // parser change passing raw text through cannot silently reintroduce
399
+ // the very dropped-call blindness this change exists to remove.
400
+ this.droppedToolCalls.push(call.name);
401
+ }
314
402
  }
315
403
  }
316
404
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"response-assembler.js","sourceRoot":"","sources":["../src/response-assembler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response-assembler.js","sourceRoot":"","sources":["../src/response-assembler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type KiroWireEvent } from "./event-parser.js";
1
+ import { type KiroErrorData, type KiroWireEvent } from "./event-parser.js";
2
2
  /** Longest gap between two frames before the response is treated as stalled. */
3
3
  export declare const IDLE_TIMEOUT = 300000;
4
4
  /**
@@ -10,6 +10,13 @@ export interface KiroEventStreamOutcome {
10
10
  idleTimedOut: boolean;
11
11
  /** Message from a Smithy protocol error or a Kiro `error` frame. */
12
12
  error: string | null;
13
+ /**
14
+ * Structured detail for the last modeled exception frame. The `error` string
15
+ * stays the retry/throw contract; this keeps `kind`, `reason`, and
16
+ * `retryAfterMilliseconds` addressable instead of only readable as prose
17
+ * inside that string.
18
+ */
19
+ errorData?: KiroErrorData;
13
20
  }
14
21
  export interface KiroWireEventFrame {
15
22
  event: KiroWireEvent;
@@ -19,6 +26,8 @@ export interface KiroWireEventFrame {
19
26
  export interface KiroEventStreamOptions {
20
27
  firstTokenTimeoutMs: number;
21
28
  idleTimeoutMs?: number;
29
+ /** Caller abort — cancels the body read instead of waiting out the response. */
30
+ signal?: AbortSignal;
22
31
  }
23
32
  export interface KiroEventStreamReader {
24
33
  frames: AsyncGenerator<KiroWireEventFrame>;
@@ -35,5 +44,11 @@ export interface KiroEventStreamReader {
35
44
  * A Kiro `error` frame ends the stream and is not yielded — it carries no
36
45
  * content, and every caller treats it as the same retryable failure as a
37
46
  * protocol error.
47
+ *
48
+ * A caller abort throws out of `frames` instead of reporting through
49
+ * `outcome`: the interrupt is not a retryable stream condition, and surfacing
50
+ * it as one would burn the retry budget on a cancelled turn. The throw
51
+ * propagates through the consuming generator to the host adapter, which maps
52
+ * it to an `aborted` stop reason.
38
53
  */
39
54
  export declare function readKiroEventStream(body: ReadableStream<Uint8Array>, options: KiroEventStreamOptions): KiroEventStreamReader;
@@ -2,7 +2,7 @@
2
2
  // ABOUTME: Owns framing and the stall timeouts; block assembly lives elsewhere.
3
3
  import { UniversalEventStreamMarshaller } from "@smithy/core/event-streams";
4
4
  import { debugEnabled, debugLog } from "./debug.js";
5
- import { parseKiroEvent } from "./event-parser.js";
5
+ import { parseKiroEvent, parseKiroExceptionFrame } from "./event-parser.js";
6
6
  /** Longest gap between two frames before the response is treated as stalled. */
7
7
  export const IDLE_TIMEOUT = 300_000;
8
8
  const eventStreamMarshaller = new UniversalEventStreamMarshaller({
@@ -19,11 +19,18 @@ const eventStreamMarshaller = new UniversalEventStreamMarshaller({
19
19
  * A Kiro `error` frame ends the stream and is not yielded — it carries no
20
20
  * content, and every caller treats it as the same retryable failure as a
21
21
  * protocol error.
22
+ *
23
+ * A caller abort throws out of `frames` instead of reporting through
24
+ * `outcome`: the interrupt is not a retryable stream condition, and surfacing
25
+ * it as one would burn the retry budget on a cancelled turn. The throw
26
+ * propagates through the consuming generator to the host adapter, which maps
27
+ * it to an `aborted` stop reason.
22
28
  */
23
29
  export function readKiroEventStream(body, options) {
24
30
  const outcome = { firstTokenTimedOut: false, idleTimedOut: false, error: null };
25
31
  const idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT;
26
32
  const bodyReader = body.getReader();
33
+ const callerSignal = options.signal;
27
34
  async function* frames() {
28
35
  let idleTimer = null;
29
36
  const resetIdle = () => {
@@ -34,6 +41,17 @@ export function readKiroEventStream(body, options) {
34
41
  void bodyReader.cancel().catch(() => { });
35
42
  }, idleTimeoutMs);
36
43
  };
44
+ // Cancel the body read as soon as the caller aborts (e.g. user presses
45
+ // Esc mid-stream). Without this, the read loop below keeps consuming the
46
+ // event stream until the server finishes the response, which makes an
47
+ // interrupt appear to hang for the remainder of the generation.
48
+ const onCallerStreamAbort = () => {
49
+ void bodyReader.cancel().catch(() => { });
50
+ };
51
+ if (callerSignal?.aborted)
52
+ onCallerStreamAbort();
53
+ else
54
+ callerSignal?.addEventListener("abort", onCallerStreamAbort, { once: true });
37
55
  // Smithy's marshaller handles chunk reassembly, CRC validation, protocol
38
56
  // error/exception detection, and payload deserialization.
39
57
  const bodyIterable = {
@@ -57,6 +75,50 @@ export function readKiroEventStream(body, options) {
57
75
  if (!entry)
58
76
  throw new Error("Received an empty event stream message");
59
77
  const [key, msg] = entry;
78
+ // The four error members of ChatResponseStream target `@error` shapes,
79
+ // so the service frames them as `:message-type: exception`. The
80
+ // marshaller keys those by `:exception-type` and throws whatever this
81
+ // callback returns, so returning the bare payload would discard the
82
+ // modeled class. Return an Error carrying the parsed detail instead.
83
+ if (msg.headers[":message-type"]?.value === "exception") {
84
+ // Parsed defensively, and BEFORE the shared parse below: an exception
85
+ // body that is empty or not JSON would otherwise throw a SyntaxError
86
+ // out of this deserializer, and the caller would report
87
+ // "Unexpected end of JSON input" with the modeled class gone — the
88
+ // exact loss this routing removes. The class lives in the header, so
89
+ // it survives a body we cannot read. The same-service client's own
90
+ // bridge takes this position too (sse-middleware.ts: "Non-JSON body:
91
+ // still throw a typed exception with a fallback message").
92
+ let parsedException = {};
93
+ try {
94
+ const decoded = JSON.parse(utf8Decoder.decode(msg.body));
95
+ if (decoded && typeof decoded === "object")
96
+ parsedException = decoded;
97
+ }
98
+ catch {
99
+ // Header-only classification below.
100
+ }
101
+ // An unmodeled member (a fifth error added server-side, or `$unknown`)
102
+ // still arrives keyed by `:exception-type`. Smithy's own fail-open path
103
+ // is unreachable here — it only triggers when the deserializer returns
104
+ // a `$unknown` property, which this one never does — so without a
105
+ // fallback the marshaller would throw the bare parsed body and the
106
+ // member name would be lost in exactly the way this routing exists to
107
+ // prevent. Synthesize the same typed shape with `kind: "unknown"`.
108
+ const data = parseKiroExceptionFrame(key, parsedException) ?? {
109
+ error: key,
110
+ kind: "unknown",
111
+ ...(typeof parsedException.message === "string" ? { message: parsedException.message } : {}),
112
+ ...(typeof parsedException.reason === "string" ? { reason: parsedException.reason } : {}),
113
+ ...(typeof parsedException.retryAfterMilliseconds === "number"
114
+ ? { retryAfterMilliseconds: parsedException.retryAfterMilliseconds }
115
+ : {}),
116
+ };
117
+ const error = new Error(data.message ? `${data.error}: ${data.message}` : data.error);
118
+ error.name = data.error;
119
+ error.kiroError = data;
120
+ return { [key]: error };
121
+ }
60
122
  const parsed = JSON.parse(utf8Decoder.decode(msg.body));
61
123
  return { [key]: parsed };
62
124
  });
@@ -65,30 +127,54 @@ export function readKiroEventStream(body, options) {
65
127
  const FIRST_TOKEN_SENTINEL = Symbol("firstTokenTimeout");
66
128
  try {
67
129
  while (true) {
130
+ if (callerSignal?.aborted) {
131
+ // Surface the abort instead of treating the cancelled read as a
132
+ // retryable stream error; the adapter maps this to a stopReason of
133
+ // "aborted".
134
+ throw callerSignal.reason ?? new Error("Request aborted");
135
+ }
68
136
  let iterResult;
69
137
  try {
70
138
  if (!gotFirstToken) {
71
139
  const readPromise = iterator.next();
72
- const result = await Promise.race([
73
- readPromise,
74
- new Promise((resolve) => setTimeout(() => resolve(FIRST_TOKEN_SENTINEL), options.firstTokenTimeoutMs)),
75
- ]);
76
- if (result === FIRST_TOKEN_SENTINEL) {
77
- readPromise.catch(() => { }); // suppress dangling rejection
78
- void bodyReader.cancel().catch(() => { });
79
- outcome.firstTokenTimedOut = true;
80
- return;
140
+ let firstTokenTimer;
141
+ try {
142
+ const result = await Promise.race([
143
+ readPromise,
144
+ new Promise((resolve) => {
145
+ firstTokenTimer = setTimeout(() => resolve(FIRST_TOKEN_SENTINEL), options.firstTokenTimeoutMs);
146
+ }),
147
+ ]);
148
+ if (result === FIRST_TOKEN_SENTINEL) {
149
+ readPromise.catch(() => { }); // suppress dangling rejection
150
+ void bodyReader.cancel().catch(() => { });
151
+ outcome.firstTokenTimedOut = true;
152
+ return;
153
+ }
154
+ iterResult = result;
155
+ gotFirstToken = true;
156
+ resetIdle();
157
+ }
158
+ finally {
159
+ // The losing timeout branch of the race must not keep a ref'd
160
+ // timer alive until it fires: an uncleared 90 s handle holds the
161
+ // Node event loop open long after a print-mode caller has
162
+ // finished its turn (upstream #154).
163
+ if (firstTokenTimer !== undefined)
164
+ clearTimeout(firstTokenTimer);
81
165
  }
82
- iterResult = result;
83
- gotFirstToken = true;
84
- resetIdle();
85
166
  }
86
167
  else {
87
168
  iterResult = await iterator.next();
88
169
  }
89
170
  }
90
171
  catch (e) {
91
- // Smithy throws on `:message-type` error/exception headers.
172
+ // Smithy throws on `:message-type` error/exception headers. A modeled
173
+ // exception frame arrives here as the Error built in the
174
+ // deserializer above, with its parsed detail attached.
175
+ const kiroError = e?.kiroError;
176
+ if (kiroError)
177
+ outcome.errorData = kiroError;
92
178
  outcome.error =
93
179
  e instanceof Error
94
180
  ? e.message
@@ -99,23 +185,36 @@ export function readKiroEventStream(body, options) {
99
185
  if (done)
100
186
  return;
101
187
  resetIdle();
102
- const payload = Object.values(value)[0];
103
- const event = parseKiroEvent(payload);
188
+ // The marshaller keys each frame by its modeled `ChatResponseStream`
189
+ // union member (from the `:event-type` header). Route on that key
190
+ // instead of guessing the member from which fields are populated.
191
+ const frameEntry = Object.entries(value)[0];
192
+ if (!frameEntry)
193
+ continue;
194
+ const [frameKey, framePayload] = frameEntry;
195
+ const event = parseKiroEvent(frameKey, (framePayload ?? {}));
104
196
  if (!event)
105
197
  continue;
198
+ if (event.type === "ignored") {
199
+ if (debugEnabled())
200
+ debugLog("stream.events.ignored", [event.data.key]);
201
+ continue;
202
+ }
106
203
  if (debugEnabled())
107
204
  debugLog("stream.events", [event]);
108
205
  if (event.type === "error") {
109
206
  outcome.error = event.data.message ? `${event.data.error}: ${event.data.message}` : event.data.error;
207
+ outcome.errorData = event.data;
110
208
  void bodyReader.cancel().catch(() => { });
111
209
  return;
112
210
  }
113
- yield { event, payload };
211
+ yield { event, payload: framePayload };
114
212
  }
115
213
  }
116
214
  finally {
117
215
  if (idleTimer)
118
216
  clearTimeout(idleTimer);
217
+ callerSignal?.removeEventListener("abort", onCallerStreamAbort);
119
218
  }
120
219
  }
121
220
  return { frames: frames(), outcome };
@@ -1 +1 @@
1
- {"version":3,"file":"response-stream.js","sourceRoot":"","sources":["../src/response-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response-stream.js","sourceRoot":"","sources":["../src/response-stream.ts"],"names":[],"mappings":"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"}
package/dist/stream.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type KiroModel } from "./models.js";
2
2
  import type { KiroEffort, KiroMessage, KiroStreamEvent, KiroTool } from "./types.js";
3
+ import { type KiroUsageTracking } from "./usage-tracking.js";
3
4
  /** One model call, fully assembled by the host adapter. */
4
5
  export interface KiroStreamRequest {
5
6
  model: KiroModel;
@@ -21,6 +22,12 @@ export interface KiroStreamRequest {
21
22
  * behaviour instead of retrying mid-response.
22
23
  */
23
24
  canDiscardEmittedBlocks?: boolean;
25
+ /**
26
+ * Opt-in usage estimates (credit→USD value, cache-read estimation). Absent
27
+ * means disabled; the core never reads a settings file on its own — the host
28
+ * resolves the policy and passes it here.
29
+ */
30
+ usageTracking?: KiroUsageTracking;
24
31
  }
25
32
  /** Reset profile resolution state — exported for stream tests. */
26
33
  export declare function resetProfileArnCache(resolved?: boolean): void;