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.
- package/dist/blocks.d.ts +4 -0
- package/dist/blocks.js +4 -0
- package/dist/blocks.js.map +1 -1
- package/dist/cache-estimator.d.ts +11 -0
- package/dist/cache-estimator.js +61 -0
- package/dist/cache-estimator.js.map +1 -0
- package/dist/endpoints.d.ts +8 -0
- package/dist/endpoints.js +14 -0
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +39 -0
- package/dist/errors.js +82 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-parser.d.ts +127 -26
- package/dist/event-parser.js +256 -48
- package/dist/event-parser.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/models.js +4 -1
- package/dist/models.js.map +1 -1
- package/dist/response-assembler.d.ts +29 -3
- package/dist/response-assembler.js +125 -37
- package/dist/response-assembler.js.map +1 -1
- package/dist/response-stream.d.ts +16 -1
- package/dist/response-stream.js +116 -17
- package/dist/response-stream.js.map +1 -1
- package/dist/stream.d.ts +7 -0
- package/dist/stream.js +249 -19
- package/dist/stream.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/usage-tracking.d.ts +34 -0
- package/dist/usage-tracking.js +88 -0
- package/dist/usage-tracking.js.map +1 -0
- package/package.json +1 -1
package/dist/stream.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// ABOUTME: Core streaming integration for Kiro API requests and responses.
|
|
2
2
|
// ABOUTME: Handles request building, retry logic, event parsing, and token counting.
|
|
3
|
-
import {
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { applyCacheEstimate } from "./cache-estimator.js";
|
|
5
|
+
import { debugEnabled, debugLog, formatSafeError, redactSensitiveText } from "./debug.js";
|
|
4
6
|
import { buildKiroAdditionalModelRequestFields, clampKiroEffort, getKiroEffortConfig } from "./effort.js";
|
|
5
|
-
import { getKiroEndpoints } from "./endpoints.js";
|
|
7
|
+
import { getKiroEndpoints, getKiroRegionFromProfileArn } from "./endpoints.js";
|
|
8
|
+
import { extractKiroReasonCode, KiroApiError, parseRetryAfterMs } from "./errors.js";
|
|
6
9
|
import { getKiroCliCredentials, getKiroCliCredentialsAllowExpired, refreshViaKiroCli } from "./kiro-cli.js";
|
|
7
10
|
import { invalidateKiroProfileArn, KiroManagementHttpError, resetKiroProfileArnCache, resolveKiroProfileArn, } from "./management.js";
|
|
8
11
|
import { isCacheStale, resolveKiroModel, updateKiroModelsCache } from "./models.js";
|
|
@@ -13,6 +16,116 @@ import { readKiroEventStream } from "./response-stream.js";
|
|
|
13
16
|
import { capacityRetryConfig, exponentialBackoff, extractKiroReason, firstTokenTimeoutForModel, isCapacityError, isNonRetryableBodyError, isTooBigError, KIRO_REASON_CODES, MAX_RETRY_DELAY, resolveRequestRateRetryDelay, retryConfig, } from "./retry.js";
|
|
14
17
|
import { kiroTokenTypeHeaders } from "./token-type.js";
|
|
15
18
|
import { abortableDelay, createResponseHeaderDeadline, logCapacityEvent } from "./transport.js";
|
|
19
|
+
import { estimateKiroCreditCost, KIRO_USAGE_TRACKING_DISABLED } from "./usage-tracking.js";
|
|
20
|
+
/**
|
|
21
|
+
* Pluralise an observed-attempt count for a diagnostic. The count is what was
|
|
22
|
+
* actually seen, not the configured retry budget: the two diverge whenever a
|
|
23
|
+
* 403 refresh, a timeout or a mid-stream error already spent part of the shared
|
|
24
|
+
* budget, and a diagnostic that exists to explain a silent failure must not
|
|
25
|
+
* itself assert something that did not happen.
|
|
26
|
+
*
|
|
27
|
+
* Deliberately not worded as "consecutive": the degenerate attempts need not be
|
|
28
|
+
* adjacent. A 403 credential refresh or a mid-stream error can land between two
|
|
29
|
+
* of them and spend the same shared budget, so an unqualified count is the only
|
|
30
|
+
* claim the counter can actually support.
|
|
31
|
+
*/
|
|
32
|
+
function describeAttempts(count) {
|
|
33
|
+
return count === 1 ? "1 attempt" : `${count} attempts`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Cap for wire-derived echo text quoted into a persisted `errorMessage`. The
|
|
37
|
+
* echo pattern `/^\s*(continue|\.+)\s*$/i` admits an arbitrarily long run of
|
|
38
|
+
* dots, and this string is written into the stream's terminal diagnostic.
|
|
39
|
+
* Matches the 200-char cap used for raw tool input in the assembler's parse
|
|
40
|
+
* warning. Tool-name collections use their own whole-value policy in
|
|
41
|
+
* `describeDroppedToolNames`; they are never sliced into partial identities.
|
|
42
|
+
*/
|
|
43
|
+
const DIAGNOSTIC_QUOTE_LIMIT = 200;
|
|
44
|
+
/**
|
|
45
|
+
* INVARIANT: no unbounded integer may be interpolated into a persisted
|
|
46
|
+
* `errorMessage`. Consumers classify that string by pattern-matching its text,
|
|
47
|
+
* and retryable-error predicates in the wild match bare `429|500|502|503|504`
|
|
48
|
+
* with NO word boundary. So a `(5000 chars total)` annotation makes a
|
|
49
|
+
* diagnostic that says "terminal, do not retry" read as a transient HTTP 500
|
|
50
|
+
* and get suppressed — precisely the silent failure these diagnostics exist to
|
|
51
|
+
* defeat, reintroduced by the diagnostic itself.
|
|
52
|
+
*
|
|
53
|
+
* Hence the truncation marker carries no length: the exact length goes to
|
|
54
|
+
* `console.warn`, which no classifier reads. The only integer these diagnostics
|
|
55
|
+
* interpolate is the observed-attempt count, bounded by `maxRetries + 1` = 4.
|
|
56
|
+
*
|
|
57
|
+
* Wire-derived tool names can carry the same trigger text, so they are encoded
|
|
58
|
+
* before entering this diagnostic. See `encodeToolNameForDiagnostic`.
|
|
59
|
+
*/
|
|
60
|
+
function clampForDiagnostic(text) {
|
|
61
|
+
return text.length <= DIAGNOSTIC_QUOTE_LIMIT ? text : `${text.slice(0, DIAGNOSTIC_QUOTE_LIMIT)}… (truncated)`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Encode untrusted bytes without letting their text change how a consumer
|
|
65
|
+
* classifies the surrounding error. Each byte is represented by two letters,
|
|
66
|
+
* A through P, for its high and low nibbles. That alphabet contains no digits
|
|
67
|
+
* and cannot spell any alternative in a retryable-error predicate.
|
|
68
|
+
*/
|
|
69
|
+
function encodeBytesForDiagnostic(bytes) {
|
|
70
|
+
let encoded = "";
|
|
71
|
+
for (const byte of bytes) {
|
|
72
|
+
encoded += String.fromCharCode(65 + (byte >> 4), 65 + (byte & 0x0f));
|
|
73
|
+
}
|
|
74
|
+
return encoded;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Encode one tool-name identity reversibly from its UTF-16 code units. String
|
|
78
|
+
* names retain their exact value. A malformed non-string wire name is prefixed
|
|
79
|
+
* with its runtime type and JSON representation, so it stays distinguishable
|
|
80
|
+
* from a legitimate string with the same rendered text.
|
|
81
|
+
*
|
|
82
|
+
* Using `TextEncoder` here would replace an unpaired surrogate with U+FFFD,
|
|
83
|
+
* corrupting the only persisted identity of a dropped call; JSON permits that
|
|
84
|
+
* escaped shape and the event parser carries it through as a JavaScript string.
|
|
85
|
+
* Quoting any identity verbatim is unsafe: values such as `set_timeout` and
|
|
86
|
+
* `http500_probe` make a terminal diagnostic look transient to consumers.
|
|
87
|
+
*/
|
|
88
|
+
function encodeToolNameForDiagnostic(name) {
|
|
89
|
+
const identity = typeof name === "string" ? name : `${typeof name}:${JSON.stringify(name)}`;
|
|
90
|
+
let encoded = "";
|
|
91
|
+
for (let i = 0; i < identity.length; i++) {
|
|
92
|
+
const codeUnit = identity.charCodeAt(i);
|
|
93
|
+
encoded += String.fromCharCode(65 + (codeUnit >> 12), 65 + ((codeUnit >> 8) & 0x0f), 65 + ((codeUnit >> 4) & 0x0f), 65 + (codeUnit & 0x0f));
|
|
94
|
+
}
|
|
95
|
+
return encoded;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Describe the complete dropped-name set without unbounded output or partial
|
|
99
|
+
* identities. A set that fits is reversible name by name. If the complete set
|
|
100
|
+
* would exceed the diagnostic limit, replace all names with one SHA-256
|
|
101
|
+
* fingerprint. The explicit marker means no valid-looking name prefix can be
|
|
102
|
+
* mistaken for the whole identity, while the fingerprint still lets two
|
|
103
|
+
* records be compared exactly.
|
|
104
|
+
*/
|
|
105
|
+
function describeDroppedToolNames(names) {
|
|
106
|
+
const encoded = names.map((name) => `A-P:${encodeToolNameForDiagnostic(name)}`).join(", ");
|
|
107
|
+
if (encoded.length <= DIAGNOSTIC_QUOTE_LIMIT)
|
|
108
|
+
return encoded;
|
|
109
|
+
const digest = createHash("sha256").update(JSON.stringify(names)).digest();
|
|
110
|
+
return `A-P-DIGEST:${encodeBytesForDiagnostic(digest)} (tool identities fingerprinted)`;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* What the turn's blocks look like, for the exhausted-empty-response
|
|
114
|
+
* diagnostic. "No text and no tool calls" does NOT imply empty content: a
|
|
115
|
+
* reasoning turn that emits only `thinkingText` and then ends is degenerate by
|
|
116
|
+
* that test while a thinking block still exists, and a `ThinkingTagParser`
|
|
117
|
+
* turn can leave a zero-length text block behind. Claiming `empty content`
|
|
118
|
+
* there would assert something not observed.
|
|
119
|
+
*
|
|
120
|
+
* Block TYPES only, never a count: a count is an unbounded integer, which the
|
|
121
|
+
* invariant above forbids.
|
|
122
|
+
*/
|
|
123
|
+
function describeReturnedContent(kinds) {
|
|
124
|
+
const unique = [...new Set(kinds)].sort();
|
|
125
|
+
if (unique.length === 0)
|
|
126
|
+
return "returning empty content";
|
|
127
|
+
return `returning only ${unique.join(" and ")} content`;
|
|
128
|
+
}
|
|
16
129
|
let skipProfileResolutionForTests = false;
|
|
17
130
|
const TEST_PROFILE_ARN = "arn:aws:codewhisperer:us-east-1:000000000000:profile/test";
|
|
18
131
|
/** Reset profile resolution state — exported for stream tests. */
|
|
@@ -37,7 +150,6 @@ export async function* streamKiro(request) {
|
|
|
37
150
|
}
|
|
38
151
|
let accessToken = initialAccessToken;
|
|
39
152
|
const region = model.region ?? "us-east-1";
|
|
40
|
-
const endpoint = new URL("generateAssistantResponse", getKiroEndpoints(region).runtime).toString();
|
|
41
153
|
let managementAuth = { accessToken, region };
|
|
42
154
|
const cliCreds = getKiroCliCredentials() ?? getKiroCliCredentialsAllowExpired();
|
|
43
155
|
const cliProfileArn = cliCreds?.access === accessToken ? cliCreds.profileArn : undefined;
|
|
@@ -65,10 +177,17 @@ export async function* streamKiro(request) {
|
|
|
65
177
|
freshCreds.profileArn ||
|
|
66
178
|
(skipProfileResolutionForTests ? TEST_PROFILE_ARN : await resolveKiroProfileArn(managementAuth));
|
|
67
179
|
}
|
|
180
|
+
// ListAvailableProfiles probes across regions (#104, #131), so an SSO login
|
|
181
|
+
// in one region can legitimately resolve a profile owned by another. The
|
|
182
|
+
// runtime host and the catalog have to follow the profile: sending a
|
|
183
|
+
// cross-region profile ARN to the runtime API fails the whole request with
|
|
184
|
+
// a generic `Improperly formed request.`.
|
|
185
|
+
let runtimeRegion = getKiroRegionFromProfileArn(profileArn) ?? region;
|
|
186
|
+
let endpoint = new URL("generateAssistantResponse", getKiroEndpoints(runtimeRegion).runtime).toString();
|
|
68
187
|
// Refresh the catalog in the background when it has gone stale.
|
|
69
|
-
if (!process.env.VITEST && isCacheStale(
|
|
70
|
-
updateKiroModelsCache(accessToken,
|
|
71
|
-
console.warn(`[kiro-core] Failed to refresh Kiro model catalog in ${
|
|
188
|
+
if (!process.env.VITEST && isCacheStale(runtimeRegion)) {
|
|
189
|
+
updateKiroModelsCache(accessToken, runtimeRegion, profileArn).catch((error) => {
|
|
190
|
+
console.warn(`[kiro-core] Failed to refresh Kiro model catalog in ${runtimeRegion}: ${formatSafeError(error)}`);
|
|
72
191
|
});
|
|
73
192
|
}
|
|
74
193
|
const kiroModelId = resolveKiroModel(model.id, model.kiroModelId);
|
|
@@ -117,8 +236,30 @@ export async function* streamKiro(request) {
|
|
|
117
236
|
systemPrompt = `<thinking_mode>enabled</thinking_mode><max_thinking_length>${budget}</max_thinking_length>${systemPrompt ? `\n${systemPrompt}` : ""}`;
|
|
118
237
|
}
|
|
119
238
|
const assembler = new KiroResponseAssembler(model, thinkingEnabled);
|
|
239
|
+
const usageTracking = request.usageTracking ?? KIRO_USAGE_TRACKING_DISABLED;
|
|
120
240
|
let retryCount = 0;
|
|
121
241
|
const maxRetries = 3;
|
|
242
|
+
/** Degenerate attempts, counted BY SHAPE. Both are counted separately from
|
|
243
|
+
* `retryCount`, which is the shared retry budget also spent by 403 credential
|
|
244
|
+
* refreshes, idle/first-token timeouts and mid-stream errors — so
|
|
245
|
+
* `maxRetries + 1` is NOT the number of empty attempts, and reporting it as
|
|
246
|
+
* such overstates what was observed.
|
|
247
|
+
*
|
|
248
|
+
* Split rather than pooled because the two shapes are not interchangeable and
|
|
249
|
+
* the exhaustion diagnostic is worded from the LAST attempt's shape only. The
|
|
250
|
+
* model can echo on one attempt and return nothing on the next; a single
|
|
251
|
+
* pooled counter would then make "returned no text ... on 4 attempts" out of
|
|
252
|
+
* three empty attempts and one that did carry text, or claim four echoes from
|
|
253
|
+
* one. Each diagnostic reports its own shape's count and, when the other shape
|
|
254
|
+
* also occurred, names it separately. */
|
|
255
|
+
let emptyAttempts = 0;
|
|
256
|
+
let echoAttempts = 0;
|
|
257
|
+
// Cumulative provider-internal retry tallies reported on KiroApiError.
|
|
258
|
+
// `retryCount` cannot stand in for either: it is also consumed by stream
|
|
259
|
+
// errors, idle/first-token timeouts, and empty-response retries, and
|
|
260
|
+
// `capacityRetryCount` resets on every outer iteration.
|
|
261
|
+
let credentialRefreshTotal = 0;
|
|
262
|
+
let capacityRetryTotal = 0;
|
|
122
263
|
const conversationId = request.sessionId ?? crypto.randomUUID();
|
|
123
264
|
requestLoop: while (retryCount <= maxRetries) {
|
|
124
265
|
if (signal?.aborted)
|
|
@@ -210,6 +351,7 @@ export async function* streamKiro(request) {
|
|
|
210
351
|
// Retry transient capacity errors with longer backoff.
|
|
211
352
|
if (isCapacityError(errText) && capacityRetryCount < capacityRetryConfig.maxRetries) {
|
|
212
353
|
capacityRetryCount++;
|
|
354
|
+
capacityRetryTotal++;
|
|
213
355
|
const delayMs = exponentialBackoff(capacityRetryCount - 1, capacityRetryConfig.baseDelayMs, 30_000);
|
|
214
356
|
logCapacityEvent(`INSUFFICIENT_MODEL_CAPACITY — retrying in ${delayMs}ms (${capacityRetryCount}/${capacityRetryConfig.maxRetries})`);
|
|
215
357
|
await abortableDelay(delayMs, signal);
|
|
@@ -237,6 +379,7 @@ export async function* streamKiro(request) {
|
|
|
237
379
|
}
|
|
238
380
|
if (response.status === 403 && !isCapacityError(errText) && retryCount < maxRetries) {
|
|
239
381
|
retryCount++;
|
|
382
|
+
credentialRefreshTotal++;
|
|
240
383
|
// Re-read the shared store first in case another process already
|
|
241
384
|
// rotated the token. If it still contains the rejected token, force
|
|
242
385
|
// kiro-cli to refresh before retrying runtime.
|
|
@@ -263,19 +406,35 @@ export async function* streamKiro(request) {
|
|
|
263
406
|
freshCreds?.profileArn ||
|
|
264
407
|
inheritedDesktopProfileArn ||
|
|
265
408
|
(skipProfileResolutionForTests ? TEST_PROFILE_ARN : await resolveKiroProfileArn(managementAuth));
|
|
409
|
+
// A replacement credential can carry a profile in another region,
|
|
410
|
+
// so re-pin the runtime host before retrying.
|
|
411
|
+
runtimeRegion = getKiroRegionFromProfileArn(profileArn) ?? region;
|
|
412
|
+
endpoint = new URL("generateAssistantResponse", getKiroEndpoints(runtimeRegion).runtime).toString();
|
|
266
413
|
await abortableDelay(exponentialBackoff(retryCount - 1, 500, MAX_RETRY_DELAY), signal);
|
|
267
414
|
break; // break inner loop, continue outer loop
|
|
268
415
|
}
|
|
269
416
|
// Known quota/capacity body markers must not be re-read by a host's own
|
|
270
|
-
// outer auto-retry as a generic retryable 429.
|
|
417
|
+
// outer auto-retry as a generic retryable 429. This covers both hard
|
|
418
|
+
// quota (MONTHLY_REQUEST_COUNT) and exhausted capacity retries
|
|
419
|
+
// (INSUFFICIENT_MODEL_CAPACITY).
|
|
420
|
+
//
|
|
421
|
+
// The three throws below carry identical `message` text to what this
|
|
422
|
+
// provider has always emitted — host adapters and downstream consumers
|
|
423
|
+
// string-match it. KiroApiError adds the classification as typed fields
|
|
424
|
+
// alongside that text; it never changes it.
|
|
425
|
+
const errorMeta = {
|
|
426
|
+
reasonCode: extractKiroReasonCode(errText),
|
|
427
|
+
retryAfterMs: parseRetryAfterMs(response.headers),
|
|
428
|
+
providerAttempts: { credentialRefresh: credentialRefreshTotal, capacity: capacityRetryTotal },
|
|
429
|
+
};
|
|
271
430
|
if (isNonRetryableBodyError(errText) || isCapacityError(errText)) {
|
|
272
|
-
throw new
|
|
431
|
+
throw new KiroApiError(`Kiro API error: ${errText || safeStatusText}`, response.status, errorMeta.reasonCode, errorMeta.retryAfterMs, errorMeta.providerAttempts);
|
|
273
432
|
}
|
|
274
433
|
// Phrase overflow so a host's context-overflow detector recognizes it.
|
|
275
434
|
if (isTooBigError(response.status, errText)) {
|
|
276
|
-
throw new
|
|
435
|
+
throw new KiroApiError(`Kiro API error: context_length_exceeded (${response.status} ${errText})`, response.status, errorMeta.reasonCode, errorMeta.retryAfterMs, errorMeta.providerAttempts);
|
|
277
436
|
}
|
|
278
|
-
throw new
|
|
437
|
+
throw new KiroApiError(`Kiro API error: ${response.status} ${safeStatusText} ${errText}`, response.status, errorMeta.reasonCode, errorMeta.retryAfterMs, errorMeta.providerAttempts);
|
|
279
438
|
}
|
|
280
439
|
break; // success, break inner loop
|
|
281
440
|
}
|
|
@@ -291,6 +450,7 @@ export async function* streamKiro(request) {
|
|
|
291
450
|
assembler.beginAttempt();
|
|
292
451
|
const { frames, outcome } = readKiroEventStream(response.body, {
|
|
293
452
|
firstTokenTimeoutMs: model.firstTokenTimeout ?? firstTokenTimeoutForModel(model.id),
|
|
453
|
+
signal,
|
|
294
454
|
});
|
|
295
455
|
for await (const frame of frames) {
|
|
296
456
|
assembler.handle(frame);
|
|
@@ -301,6 +461,23 @@ export async function* streamKiro(request) {
|
|
|
301
461
|
// Timed out or received an error mid-stream: retry with backoff.
|
|
302
462
|
if (retryCount < maxRetries) {
|
|
303
463
|
retryCount++;
|
|
464
|
+
if (outcome.errorData && debugEnabled()) {
|
|
465
|
+
debugLog("stream.error.typed", [outcome.errorData]);
|
|
466
|
+
}
|
|
467
|
+
// The assembler outlives the retry loop, so anything the aborted
|
|
468
|
+
// attempt already emitted survives into the next one. A typed error
|
|
469
|
+
// frame (throttling/validation/serviceUnavailable) can arrive after
|
|
470
|
+
// partial text, which would otherwise concatenate the abandoned prefix
|
|
471
|
+
// onto the retried response. The degenerate-response retry below
|
|
472
|
+
// discards for the same reason. The usage figures are cleared by
|
|
473
|
+
// `beginAttempt` at the next loop top.
|
|
474
|
+
//
|
|
475
|
+
// The event protocol has no retraction event, so deltas already pushed
|
|
476
|
+
// for the abandoned attempt cannot be withdrawn. The signals a
|
|
477
|
+
// consumer does get are the `reset` event and the fresh `start`
|
|
478
|
+
// emitted for the retried attempt.
|
|
479
|
+
assembler.discard();
|
|
480
|
+
yield* assembler.takeEvents();
|
|
304
481
|
await abortableDelay(exponentialBackoff(retryCount - 1, 1000, MAX_RETRY_DELAY), signal);
|
|
305
482
|
continue;
|
|
306
483
|
}
|
|
@@ -320,7 +497,13 @@ export async function* streamKiro(request) {
|
|
|
320
497
|
// When tool calls *were* present but all got dropped (empty/unparseable
|
|
321
498
|
// input), don't retry — the API did respond, it just sent malformed tool
|
|
322
499
|
// calls. Retrying would likely produce the same result.
|
|
323
|
-
|
|
500
|
+
const degenerate = summary.isEmpty || summary.isEchoLoop;
|
|
501
|
+
if (summary.isEchoLoop)
|
|
502
|
+
echoAttempts++;
|
|
503
|
+
else if (degenerate)
|
|
504
|
+
emptyAttempts++;
|
|
505
|
+
let errorMessage;
|
|
506
|
+
if (degenerate) {
|
|
324
507
|
// Retrying an echo loop means unsaying text already delivered, which only
|
|
325
508
|
// a host that can discard emitted blocks may do. Elsewhere, go straight to
|
|
326
509
|
// the terminal behaviour: strip the echo so the agent loop does not read
|
|
@@ -334,22 +517,69 @@ export async function* streamKiro(request) {
|
|
|
334
517
|
await abortableDelay(exponentialBackoff(retryCount - 1, 1000, MAX_RETRY_DELAY), signal);
|
|
335
518
|
continue;
|
|
336
519
|
}
|
|
520
|
+
// Retries are spent (or the host cannot discard an echo) and the turn
|
|
521
|
+
// still carries nothing usable. The stopReason stays in the existing
|
|
522
|
+
// union — a new member would break every consumer — so the only channel
|
|
523
|
+
// that can say a turn failed while it still looks successful is the
|
|
524
|
+
// `errorMessage` carried on the terminal `done` event. Without it these
|
|
525
|
+
// turns are indistinguishable from an ordinary completion.
|
|
526
|
+
//
|
|
527
|
+
// Deliberately NOT worded as a transient/transport failure: this is
|
|
528
|
+
// terminal, so consumer retry classifiers must not match it and hand it
|
|
529
|
+
// another doomed attempt.
|
|
337
530
|
if (summary.isEchoLoop) {
|
|
531
|
+
// Strip the echo text to prevent the agent loop from interpreting
|
|
532
|
+
// "Continue" as a continuation signal.
|
|
338
533
|
assembler.stripEcho();
|
|
339
|
-
|
|
534
|
+
const alsoEmpty = emptyAttempts > 0 ? ` (plus ${describeAttempts(emptyAttempts)} with no text at all)` : "";
|
|
535
|
+
console.warn(`[kiro-core] Echo loop persisted across ${describeAttempts(echoAttempts)}${alsoEmpty} — stripping "Continue" response (${summary.responseText.length} chars)`);
|
|
536
|
+
errorMessage = `Kiro model echoed its own continuation prompt (${JSON.stringify(clampForDiagnostic(summary.responseText))}) on ${describeAttempts(echoAttempts)}${alsoEmpty} and emitted no tool calls; retry budget exhausted, text stripped, stopReason:"${summary.stopReason}"`;
|
|
340
537
|
}
|
|
341
538
|
else {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
// not actually guarantee.
|
|
346
|
-
console.warn(`[kiro-core] Empty response after ${maxRetries} retries — giving up on this turn`);
|
|
539
|
+
const alsoEchoed = echoAttempts > 0 ? ` (plus ${describeAttempts(echoAttempts)} that echoed the continuation prompt)` : "";
|
|
540
|
+
console.warn(`[kiro-core] Empty response on ${describeAttempts(emptyAttempts)}${alsoEchoed}, retry budget exhausted — returning stopReason:"${summary.stopReason}" to avoid agent loop stall`);
|
|
541
|
+
errorMessage = `Kiro returned no text and no tool calls on ${describeAttempts(emptyAttempts)}${alsoEchoed}; retry budget exhausted, ${describeReturnedContent(assembler.contentKinds())} with stopReason:"${summary.stopReason}"`;
|
|
347
542
|
}
|
|
348
543
|
}
|
|
349
|
-
|
|
544
|
+
// A tool call the model DID make never reached the host: its arguments
|
|
545
|
+
// would not parse, so the assembler dropped it. Nothing else records this
|
|
546
|
+
// — `sawAnyToolCalls` is already true, which is exactly what suppresses the
|
|
547
|
+
// empty-response retry above and the text-dialect fallback — and the block
|
|
548
|
+
// stream simply lacks the call. Unlike the two exhaustion cases, this one
|
|
549
|
+
// is unrecoverable downstream: the call is gone before the events are
|
|
550
|
+
// persisted.
|
|
551
|
+
if (summary.droppedToolCalls.length > 0) {
|
|
552
|
+
const names = describeDroppedToolNames(summary.droppedToolCalls);
|
|
553
|
+
// The reversible names or whole-set fingerprint identify the drops, so
|
|
554
|
+
// the count is not printed: it is unbounded (a turn may carry any
|
|
555
|
+
// number of malformed calls) and unbounded or wire-controlled text
|
|
556
|
+
// here can collide with a consumer's retryable-error pattern.
|
|
557
|
+
const one = summary.droppedToolCalls.length === 1;
|
|
558
|
+
const dropDiagnostic = `Kiro sent ${one ? "a tool call" : "tool calls"} with unparseable arguments (${names}); ${one ? "it was" : "they were"} dropped and never reached the agent, stopReason:"${summary.stopReason}"`;
|
|
559
|
+
// Concatenation is defensive: today the two diagnostics are mutually
|
|
560
|
+
// exclusive, because any drop sets `sawAnyToolCalls` and `degenerate`
|
|
561
|
+
// requires `!sawAnyToolCalls`. Kept so that loosening either predicate
|
|
562
|
+
// appends rather than silently overwriting an exhaustion diagnostic.
|
|
563
|
+
errorMessage = errorMessage ? `${errorMessage}. ${dropDiagnostic}` : dropDiagnostic;
|
|
564
|
+
}
|
|
565
|
+
const { stopReason, usage, wireUsage, metering } = assembler.complete();
|
|
350
566
|
yield* assembler.takeEvents();
|
|
567
|
+
if (!errorMessage) {
|
|
568
|
+
const estimatedRead = applyCacheEstimate(conversationId, usage, wireUsage, usageTracking);
|
|
569
|
+
if (estimatedRead > 0) {
|
|
570
|
+
debugLog("usage.estimate", {
|
|
571
|
+
conversationId,
|
|
572
|
+
estimatedRead,
|
|
573
|
+
input: usage.input,
|
|
574
|
+
cacheRead: usage.cacheRead,
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
const estimatedCost = estimateKiroCreditCost(usageTracking, metering);
|
|
578
|
+
if (estimatedCost !== undefined)
|
|
579
|
+
usage.cost.total = estimatedCost;
|
|
580
|
+
}
|
|
351
581
|
yield { type: "usage", usage };
|
|
352
|
-
yield { type: "done", stopReason };
|
|
582
|
+
yield { type: "done", stopReason, ...(errorMessage ? { errorMessage } : {}) };
|
|
353
583
|
return;
|
|
354
584
|
}
|
|
355
585
|
}
|
package/dist/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -118,6 +118,11 @@ export interface KiroUsage {
|
|
|
118
118
|
*/
|
|
119
119
|
credits?: number;
|
|
120
120
|
creditUnit?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Set when {@link cacheRead} is an estimate from repeated prompt input rather
|
|
123
|
+
* than a wire counter — a host may render it differently or not at all.
|
|
124
|
+
*/
|
|
125
|
+
cacheEstimated?: boolean;
|
|
121
126
|
cost: {
|
|
122
127
|
input: number;
|
|
123
128
|
output: number;
|
|
@@ -178,6 +183,14 @@ export type KiroStreamEvent = {
|
|
|
178
183
|
} | {
|
|
179
184
|
type: "done";
|
|
180
185
|
stopReason: "stop" | "toolUse" | "length";
|
|
186
|
+
/**
|
|
187
|
+
* Terminal diagnostic for a turn that finished but produced less than the
|
|
188
|
+
* model sent — an exhausted empty/echo retry budget, or a tool call
|
|
189
|
+
* dropped for unparseable arguments. Worded as terminal on purpose so a
|
|
190
|
+
* consumer's retryable-error classifier cannot mistake it for a
|
|
191
|
+
* transient transport failure.
|
|
192
|
+
*/
|
|
193
|
+
errorMessage?: string;
|
|
181
194
|
};
|
|
182
195
|
/**
|
|
183
196
|
* An internal retry discarded everything emitted so far. Hosts able to drop
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kiro's published add-on credit rate (https://kiro.dev/pricing/). Used as the
|
|
3
|
+
* conversion default so an enabled config needs no rate at all.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_USD_PER_CREDIT = 0.04;
|
|
6
|
+
/** Match the usual prompt-cache TTL and Anthropic's default cache lifetime. */
|
|
7
|
+
export declare const DEFAULT_ESTIMATED_CACHE_TIMEOUT_MS: number;
|
|
8
|
+
/** Resolved estimation policy. Both estimates are independently opt-in. */
|
|
9
|
+
export interface KiroUsageTracking {
|
|
10
|
+
estimateDollarValue: boolean;
|
|
11
|
+
usdPerCredit: number;
|
|
12
|
+
estimateCacheUsage: boolean;
|
|
13
|
+
estimatedCacheTimeout: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const KIRO_USAGE_TRACKING_DISABLED: KiroUsageTracking;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve an estimation policy from a plain settings record — the shape of
|
|
18
|
+
* upstream's `usageTracking` section, but supplied by the host rather than read
|
|
19
|
+
* from any particular settings file.
|
|
20
|
+
*
|
|
21
|
+
* Each estimate fails closed independently on malformed input.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveKiroUsageTracking(section: unknown): KiroUsageTracking;
|
|
24
|
+
/**
|
|
25
|
+
* Estimated USD-equivalent value of one turn's credits, or `undefined` when the
|
|
26
|
+
* record cannot be trusted.
|
|
27
|
+
*
|
|
28
|
+
* This is a conversion of Kiro's own credit count, NOT a billed amount: credits
|
|
29
|
+
* included in a subscription may carry no marginal charge at all.
|
|
30
|
+
*/
|
|
31
|
+
export declare function estimateKiroCreditCost(tracking: KiroUsageTracking, metering: {
|
|
32
|
+
credits?: number;
|
|
33
|
+
unit?: string;
|
|
34
|
+
} | null | undefined): number | undefined;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// ABOUTME: Opt-in usage tracking config for Kiro dollar-value and cache-usage estimates.
|
|
2
|
+
// ABOUTME: Converts metering credits to USD and configures conservative cache-read estimation.
|
|
3
|
+
/**
|
|
4
|
+
* Kiro's published add-on credit rate (https://kiro.dev/pricing/). Used as the
|
|
5
|
+
* conversion default so an enabled config needs no rate at all.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_USD_PER_CREDIT = 0.04;
|
|
8
|
+
/** Match the usual prompt-cache TTL and Anthropic's default cache lifetime. */
|
|
9
|
+
export const DEFAULT_ESTIMATED_CACHE_TIMEOUT_MS = 5 * 60 * 1000;
|
|
10
|
+
export const KIRO_USAGE_TRACKING_DISABLED = Object.freeze({
|
|
11
|
+
estimateDollarValue: false,
|
|
12
|
+
usdPerCredit: DEFAULT_USD_PER_CREDIT,
|
|
13
|
+
estimateCacheUsage: false,
|
|
14
|
+
estimatedCacheTimeout: DEFAULT_ESTIMATED_CACHE_TIMEOUT_MS,
|
|
15
|
+
});
|
|
16
|
+
/** `MeteringEvent.unit` values that denote credits. The service has emitted both. */
|
|
17
|
+
const CREDIT_UNITS = new Set(["credit", "credits"]);
|
|
18
|
+
/**
|
|
19
|
+
* Resolve an estimation policy from a plain settings record — the shape of
|
|
20
|
+
* upstream's `usageTracking` section, but supplied by the host rather than read
|
|
21
|
+
* from any particular settings file.
|
|
22
|
+
*
|
|
23
|
+
* Each estimate fails closed independently on malformed input.
|
|
24
|
+
*/
|
|
25
|
+
export function resolveKiroUsageTracking(section) {
|
|
26
|
+
const raw = asRecord(section);
|
|
27
|
+
if (!raw)
|
|
28
|
+
return { ...KIRO_USAGE_TRACKING_DISABLED };
|
|
29
|
+
const legacyEnabled = raw.enabled === true;
|
|
30
|
+
const estimateDollarValue = raw.estimateDollarValue === true || legacyEnabled;
|
|
31
|
+
const estimateCacheUsage = raw.estimateCacheUsage === true;
|
|
32
|
+
let usdPerCredit = DEFAULT_USD_PER_CREDIT;
|
|
33
|
+
let estimatedCacheTimeout = DEFAULT_ESTIMATED_CACHE_TIMEOUT_MS;
|
|
34
|
+
if (estimateDollarValue) {
|
|
35
|
+
const rate = resolveNonNegativeNumber(raw.usdPerCredit, DEFAULT_USD_PER_CREDIT);
|
|
36
|
+
if (rate === undefined) {
|
|
37
|
+
console.warn("[kiro-core] Ignoring usageTracking.estimateDollarValue: usdPerCredit must be a finite number >= 0.");
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
usdPerCredit = rate;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let cacheEnabled = estimateCacheUsage;
|
|
44
|
+
if (estimateCacheUsage) {
|
|
45
|
+
const timeout = resolveNonNegativeNumber(raw.estimatedCacheTimeout, DEFAULT_ESTIMATED_CACHE_TIMEOUT_MS);
|
|
46
|
+
if (timeout === undefined) {
|
|
47
|
+
console.warn("[kiro-core] Ignoring usageTracking.estimateCacheUsage: estimatedCacheTimeout must be a finite number >= 0.");
|
|
48
|
+
cacheEnabled = false;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
estimatedCacheTimeout = timeout;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
estimateDollarValue: estimateDollarValue && resolveNonNegativeNumber(raw.usdPerCredit, DEFAULT_USD_PER_CREDIT) !== undefined,
|
|
56
|
+
usdPerCredit,
|
|
57
|
+
estimateCacheUsage: cacheEnabled,
|
|
58
|
+
estimatedCacheTimeout,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Estimated USD-equivalent value of one turn's credits, or `undefined` when the
|
|
63
|
+
* record cannot be trusted.
|
|
64
|
+
*
|
|
65
|
+
* This is a conversion of Kiro's own credit count, NOT a billed amount: credits
|
|
66
|
+
* included in a subscription may carry no marginal charge at all.
|
|
67
|
+
*/
|
|
68
|
+
export function estimateKiroCreditCost(tracking, metering) {
|
|
69
|
+
if (!tracking.estimateDollarValue || !metering)
|
|
70
|
+
return undefined;
|
|
71
|
+
if (typeof metering.unit !== "string" || !CREDIT_UNITS.has(metering.unit.toLowerCase()))
|
|
72
|
+
return undefined;
|
|
73
|
+
const { credits } = metering;
|
|
74
|
+
if (typeof credits !== "number" || !Number.isFinite(credits) || credits < 0)
|
|
75
|
+
return undefined;
|
|
76
|
+
return credits * tracking.usdPerCredit;
|
|
77
|
+
}
|
|
78
|
+
function resolveNonNegativeNumber(value, defaultValue) {
|
|
79
|
+
if (value === undefined)
|
|
80
|
+
return defaultValue;
|
|
81
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0)
|
|
82
|
+
return undefined;
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
function asRecord(value) {
|
|
86
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=usage-tracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-tracking.js","sourceRoot":"","sources":["../src/usage-tracking.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED