ns-omp-provider-kiro 0.2.0 → 0.2.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.
- package/README.md +1 -1
- package/dist/index.js +126 -128
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Published on npm as `ns-omp-provider-kiro`:
|
|
|
8
8
|
omp plugin install ns-omp-provider-kiro
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Pin a version with `omp plugin install ns-omp-provider-kiro@0.2.
|
|
11
|
+
Pin a version with `omp plugin install ns-omp-provider-kiro@0.2.1` — bare
|
|
12
12
|
names, scoped names, and `name@version` all resolve as npm specs.
|
|
13
13
|
|
|
14
14
|
### From a local build
|
package/dist/index.js
CHANGED
|
@@ -2468,134 +2468,6 @@ init_management();
|
|
|
2468
2468
|
init_models();
|
|
2469
2469
|
init_oauth();
|
|
2470
2470
|
|
|
2471
|
-
// ../kiro-core/dist/retry.js
|
|
2472
|
-
init_models();
|
|
2473
|
-
var FIRST_TOKEN_TIMEOUT = 9e4;
|
|
2474
|
-
var REQUEST_HEADER_TIMEOUT = 9e4;
|
|
2475
|
-
function firstTokenTimeoutForModel(modelId) {
|
|
2476
|
-
if (retryConfig.firstTokenTimeoutMs !== FIRST_TOKEN_TIMEOUT) {
|
|
2477
|
-
return retryConfig.firstTokenTimeoutMs;
|
|
2478
|
-
}
|
|
2479
|
-
const model = kiroModels.find((m) => m.id === modelId);
|
|
2480
|
-
return model?.firstTokenTimeout ?? FIRST_TOKEN_TIMEOUT;
|
|
2481
|
-
}
|
|
2482
|
-
var retryConfig = {
|
|
2483
|
-
firstTokenTimeoutMs: FIRST_TOKEN_TIMEOUT,
|
|
2484
|
-
requestHeaderTimeoutMs: REQUEST_HEADER_TIMEOUT
|
|
2485
|
-
};
|
|
2486
|
-
function exponentialBackoff(attempt, baseMs, maxMs) {
|
|
2487
|
-
return Math.min(baseMs * 2 ** attempt, maxMs);
|
|
2488
|
-
}
|
|
2489
|
-
var MAX_RETRY_DELAY = 1e4;
|
|
2490
|
-
var REQUEST_RATE_FALLBACK_DELAY_MS = 1e4;
|
|
2491
|
-
function extractKiroReason(errorText) {
|
|
2492
|
-
if (!errorText)
|
|
2493
|
-
return void 0;
|
|
2494
|
-
try {
|
|
2495
|
-
const parsed = JSON.parse(errorText);
|
|
2496
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
2497
|
-
return void 0;
|
|
2498
|
-
const reason = parsed.reason;
|
|
2499
|
-
return typeof reason === "string" && reason.length > 0 ? reason : void 0;
|
|
2500
|
-
} catch {
|
|
2501
|
-
return void 0;
|
|
2502
|
-
}
|
|
2503
|
-
}
|
|
2504
|
-
function parseRetryAfterMs(headers, nowMs = Date.now()) {
|
|
2505
|
-
const get = headers?.get?.bind(headers);
|
|
2506
|
-
if (!get)
|
|
2507
|
-
return void 0;
|
|
2508
|
-
const milliseconds = nonNegativeNumber(get("retry-after-ms"));
|
|
2509
|
-
if (milliseconds !== void 0)
|
|
2510
|
-
return Math.round(milliseconds);
|
|
2511
|
-
const retryAfter = get("retry-after");
|
|
2512
|
-
if (retryAfter !== null && retryAfter.trim() !== "") {
|
|
2513
|
-
const seconds = Number(retryAfter);
|
|
2514
|
-
if (Number.isFinite(seconds)) {
|
|
2515
|
-
if (seconds >= 0) {
|
|
2516
|
-
const delayMs = seconds * 1e3;
|
|
2517
|
-
if (Number.isFinite(delayMs))
|
|
2518
|
-
return Math.round(delayMs);
|
|
2519
|
-
}
|
|
2520
|
-
} else {
|
|
2521
|
-
const dateMs = Date.parse(retryAfter);
|
|
2522
|
-
if (!Number.isNaN(dateMs))
|
|
2523
|
-
return Math.max(0, dateMs - nowMs);
|
|
2524
|
-
}
|
|
2525
|
-
}
|
|
2526
|
-
const resetAfterSeconds = nonNegativeNumber(get("x-ratelimit-reset-after"));
|
|
2527
|
-
if (resetAfterSeconds !== void 0) {
|
|
2528
|
-
const delayMs = resetAfterSeconds * 1e3;
|
|
2529
|
-
if (Number.isFinite(delayMs))
|
|
2530
|
-
return Math.round(delayMs);
|
|
2531
|
-
}
|
|
2532
|
-
return void 0;
|
|
2533
|
-
}
|
|
2534
|
-
function resolveRequestRateRetryDelay(headers, nowMs = Date.now()) {
|
|
2535
|
-
const advertisedDelayMs = parseRetryAfterMs(headers, nowMs);
|
|
2536
|
-
const requestedDelayMs = advertisedDelayMs ?? REQUEST_RATE_FALLBACK_DELAY_MS;
|
|
2537
|
-
return {
|
|
2538
|
-
delayMs: Math.min(requestedDelayMs, MAX_RETRY_DELAY),
|
|
2539
|
-
...advertisedDelayMs !== void 0 ? { advertisedDelayMs } : {},
|
|
2540
|
-
capped: requestedDelayMs > MAX_RETRY_DELAY
|
|
2541
|
-
};
|
|
2542
|
-
}
|
|
2543
|
-
function nonNegativeNumber(value) {
|
|
2544
|
-
if (value === null || value.trim() === "")
|
|
2545
|
-
return void 0;
|
|
2546
|
-
const parsed = Number(value);
|
|
2547
|
-
return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
|
|
2548
|
-
}
|
|
2549
|
-
var KIRO_REASON_CODES = Object.freeze({
|
|
2550
|
-
/** Request body exceeded the service's size threshold. */
|
|
2551
|
-
CONTENT_LENGTH_EXCEEDS_THRESHOLD: "CONTENT_LENGTH_EXCEEDS_THRESHOLD",
|
|
2552
|
-
/** Prose-only size rejection; the service sends no reason code for this one. */
|
|
2553
|
-
INPUT_TOO_LONG: "Input is too long",
|
|
2554
|
-
/** Monthly request quota exhausted — hard limit, not transient. */
|
|
2555
|
-
MONTHLY_REQUEST_COUNT: "MONTHLY_REQUEST_COUNT",
|
|
2556
|
-
/** Model capacity temporarily unavailable — transient, worth retrying. */
|
|
2557
|
-
INSUFFICIENT_MODEL_CAPACITY: "INSUFFICIENT_MODEL_CAPACITY",
|
|
2558
|
-
/** Short-window request throttle — retry only within the provider budget. */
|
|
2559
|
-
USER_REQUEST_RATE_EXCEEDED: "USER_REQUEST_RATE_EXCEEDED",
|
|
2560
|
-
/**
|
|
2561
|
-
* Generic request-validation rejection, returned for a malformed body of any
|
|
2562
|
-
* size (empty `content`, history referencing tools absent from the catalog).
|
|
2563
|
-
* Not a size signal: classifying it as "too big" makes the caller compact a
|
|
2564
|
-
* history that was never the problem, a loop it can never satisfy.
|
|
2565
|
-
*/
|
|
2566
|
-
REQUEST_BODY_INVALID: "REQUEST_BODY_INVALID"
|
|
2567
|
-
});
|
|
2568
|
-
var TOO_BIG_PATTERNS = Object.freeze([
|
|
2569
|
-
KIRO_REASON_CODES.CONTENT_LENGTH_EXCEEDS_THRESHOLD,
|
|
2570
|
-
KIRO_REASON_CODES.INPUT_TOO_LONG
|
|
2571
|
-
]);
|
|
2572
|
-
var NON_RETRYABLE_BODY_PATTERNS = Object.freeze([KIRO_REASON_CODES.MONTHLY_REQUEST_COUNT]);
|
|
2573
|
-
var CAPACITY_PATTERN = KIRO_REASON_CODES.INSUFFICIENT_MODEL_CAPACITY;
|
|
2574
|
-
var CAPACITY_MAX_RETRIES = 3;
|
|
2575
|
-
var CAPACITY_BASE_DELAY_MS = 5e3;
|
|
2576
|
-
var capacityRetryConfig = {
|
|
2577
|
-
maxRetries: CAPACITY_MAX_RETRIES,
|
|
2578
|
-
baseDelayMs: CAPACITY_BASE_DELAY_MS
|
|
2579
|
-
};
|
|
2580
|
-
function isTooBigError(status, errorText) {
|
|
2581
|
-
return status === 413 || status === 400 && TOO_BIG_PATTERNS.some((p) => errorText.includes(p));
|
|
2582
|
-
}
|
|
2583
|
-
function isNonRetryableBodyError(errorText) {
|
|
2584
|
-
return NON_RETRYABLE_BODY_PATTERNS.some((p) => errorText.includes(p));
|
|
2585
|
-
}
|
|
2586
|
-
function isCapacityError(errorText) {
|
|
2587
|
-
return errorText.includes(CAPACITY_PATTERN);
|
|
2588
|
-
}
|
|
2589
|
-
|
|
2590
|
-
// ../kiro-core/dist/stream.js
|
|
2591
|
-
init_debug();
|
|
2592
|
-
init_effort();
|
|
2593
|
-
init_endpoints();
|
|
2594
|
-
init_kiro_cli();
|
|
2595
|
-
init_management();
|
|
2596
|
-
init_models();
|
|
2597
|
-
init_oauth();
|
|
2598
|
-
|
|
2599
2471
|
// ../kiro-core/dist/request-builder.js
|
|
2600
2472
|
init_debug();
|
|
2601
2473
|
|
|
@@ -4294,7 +4166,133 @@ function readKiroEventStream(body, options) {
|
|
|
4294
4166
|
return { frames: frames(), outcome };
|
|
4295
4167
|
}
|
|
4296
4168
|
|
|
4169
|
+
// ../kiro-core/dist/retry.js
|
|
4170
|
+
init_models();
|
|
4171
|
+
var FIRST_TOKEN_TIMEOUT = 9e4;
|
|
4172
|
+
var REQUEST_HEADER_TIMEOUT = 9e4;
|
|
4173
|
+
function firstTokenTimeoutForModel(modelId) {
|
|
4174
|
+
if (retryConfig.firstTokenTimeoutMs !== FIRST_TOKEN_TIMEOUT) {
|
|
4175
|
+
return retryConfig.firstTokenTimeoutMs;
|
|
4176
|
+
}
|
|
4177
|
+
const model = kiroModels.find((m) => m.id === modelId);
|
|
4178
|
+
return model?.firstTokenTimeout ?? FIRST_TOKEN_TIMEOUT;
|
|
4179
|
+
}
|
|
4180
|
+
var retryConfig = {
|
|
4181
|
+
firstTokenTimeoutMs: FIRST_TOKEN_TIMEOUT,
|
|
4182
|
+
requestHeaderTimeoutMs: REQUEST_HEADER_TIMEOUT
|
|
4183
|
+
};
|
|
4184
|
+
function exponentialBackoff(attempt, baseMs, maxMs) {
|
|
4185
|
+
return Math.min(baseMs * 2 ** attempt, maxMs);
|
|
4186
|
+
}
|
|
4187
|
+
var MAX_RETRY_DELAY = 1e4;
|
|
4188
|
+
var REQUEST_RATE_FALLBACK_DELAY_MS = 1e4;
|
|
4189
|
+
function extractKiroReason(errorText) {
|
|
4190
|
+
if (!errorText)
|
|
4191
|
+
return void 0;
|
|
4192
|
+
try {
|
|
4193
|
+
const parsed = JSON.parse(errorText);
|
|
4194
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
4195
|
+
return void 0;
|
|
4196
|
+
const reason = parsed.reason;
|
|
4197
|
+
return typeof reason === "string" && reason.length > 0 ? reason : void 0;
|
|
4198
|
+
} catch {
|
|
4199
|
+
return void 0;
|
|
4200
|
+
}
|
|
4201
|
+
}
|
|
4202
|
+
function parseRetryAfterMs(headers, nowMs = Date.now()) {
|
|
4203
|
+
const get = headers?.get?.bind(headers);
|
|
4204
|
+
if (!get)
|
|
4205
|
+
return void 0;
|
|
4206
|
+
const milliseconds = nonNegativeNumber(get("retry-after-ms"));
|
|
4207
|
+
if (milliseconds !== void 0)
|
|
4208
|
+
return Math.round(milliseconds);
|
|
4209
|
+
const retryAfter = get("retry-after");
|
|
4210
|
+
if (retryAfter !== null && retryAfter.trim() !== "") {
|
|
4211
|
+
const seconds = Number(retryAfter);
|
|
4212
|
+
if (Number.isFinite(seconds)) {
|
|
4213
|
+
if (seconds >= 0) {
|
|
4214
|
+
const delayMs = seconds * 1e3;
|
|
4215
|
+
if (Number.isFinite(delayMs))
|
|
4216
|
+
return Math.round(delayMs);
|
|
4217
|
+
}
|
|
4218
|
+
} else {
|
|
4219
|
+
const dateMs = Date.parse(retryAfter);
|
|
4220
|
+
if (!Number.isNaN(dateMs))
|
|
4221
|
+
return Math.max(0, dateMs - nowMs);
|
|
4222
|
+
}
|
|
4223
|
+
}
|
|
4224
|
+
const resetAfterSeconds = nonNegativeNumber(get("x-ratelimit-reset-after"));
|
|
4225
|
+
if (resetAfterSeconds !== void 0) {
|
|
4226
|
+
const delayMs = resetAfterSeconds * 1e3;
|
|
4227
|
+
if (Number.isFinite(delayMs))
|
|
4228
|
+
return Math.round(delayMs);
|
|
4229
|
+
}
|
|
4230
|
+
return void 0;
|
|
4231
|
+
}
|
|
4232
|
+
function resolveRequestRateRetryDelay(headers, nowMs = Date.now()) {
|
|
4233
|
+
const advertisedDelayMs = parseRetryAfterMs(headers, nowMs);
|
|
4234
|
+
const requestedDelayMs = advertisedDelayMs ?? REQUEST_RATE_FALLBACK_DELAY_MS;
|
|
4235
|
+
return {
|
|
4236
|
+
delayMs: Math.min(requestedDelayMs, MAX_RETRY_DELAY),
|
|
4237
|
+
...advertisedDelayMs !== void 0 ? { advertisedDelayMs } : {},
|
|
4238
|
+
capped: requestedDelayMs > MAX_RETRY_DELAY
|
|
4239
|
+
};
|
|
4240
|
+
}
|
|
4241
|
+
function nonNegativeNumber(value) {
|
|
4242
|
+
if (value === null || value.trim() === "")
|
|
4243
|
+
return void 0;
|
|
4244
|
+
const parsed = Number(value);
|
|
4245
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
|
|
4246
|
+
}
|
|
4247
|
+
var KIRO_REASON_CODES = Object.freeze({
|
|
4248
|
+
/** Request body exceeded the service's size threshold. */
|
|
4249
|
+
CONTENT_LENGTH_EXCEEDS_THRESHOLD: "CONTENT_LENGTH_EXCEEDS_THRESHOLD",
|
|
4250
|
+
/** Prose-only size rejection; the service sends no reason code for this one. */
|
|
4251
|
+
INPUT_TOO_LONG: "Input is too long",
|
|
4252
|
+
/** Monthly request quota exhausted — hard limit, not transient. */
|
|
4253
|
+
MONTHLY_REQUEST_COUNT: "MONTHLY_REQUEST_COUNT",
|
|
4254
|
+
/** Model capacity temporarily unavailable — transient, worth retrying. */
|
|
4255
|
+
INSUFFICIENT_MODEL_CAPACITY: "INSUFFICIENT_MODEL_CAPACITY",
|
|
4256
|
+
/** Short-window request throttle — retry only within the provider budget. */
|
|
4257
|
+
USER_REQUEST_RATE_EXCEEDED: "USER_REQUEST_RATE_EXCEEDED",
|
|
4258
|
+
/**
|
|
4259
|
+
* Generic request-validation rejection, returned for a malformed body of any
|
|
4260
|
+
* size (empty `content`, history referencing tools absent from the catalog).
|
|
4261
|
+
* Not a size signal: classifying it as "too big" makes the caller compact a
|
|
4262
|
+
* history that was never the problem, a loop it can never satisfy.
|
|
4263
|
+
*/
|
|
4264
|
+
REQUEST_BODY_INVALID: "REQUEST_BODY_INVALID"
|
|
4265
|
+
});
|
|
4266
|
+
var TOO_BIG_PATTERNS = Object.freeze([
|
|
4267
|
+
KIRO_REASON_CODES.CONTENT_LENGTH_EXCEEDS_THRESHOLD,
|
|
4268
|
+
KIRO_REASON_CODES.INPUT_TOO_LONG
|
|
4269
|
+
]);
|
|
4270
|
+
var NON_RETRYABLE_BODY_PATTERNS = Object.freeze([KIRO_REASON_CODES.MONTHLY_REQUEST_COUNT]);
|
|
4271
|
+
var CAPACITY_PATTERN = KIRO_REASON_CODES.INSUFFICIENT_MODEL_CAPACITY;
|
|
4272
|
+
var CAPACITY_MAX_RETRIES = 3;
|
|
4273
|
+
var CAPACITY_BASE_DELAY_MS = 5e3;
|
|
4274
|
+
var capacityRetryConfig = {
|
|
4275
|
+
maxRetries: CAPACITY_MAX_RETRIES,
|
|
4276
|
+
baseDelayMs: CAPACITY_BASE_DELAY_MS
|
|
4277
|
+
};
|
|
4278
|
+
function isTooBigError(status, errorText) {
|
|
4279
|
+
return status === 413 || status === 400 && TOO_BIG_PATTERNS.some((p) => errorText.includes(p));
|
|
4280
|
+
}
|
|
4281
|
+
function isNonRetryableBodyError(errorText) {
|
|
4282
|
+
return NON_RETRYABLE_BODY_PATTERNS.some((p) => errorText.includes(p));
|
|
4283
|
+
}
|
|
4284
|
+
function isCapacityError(errorText) {
|
|
4285
|
+
return errorText.includes(CAPACITY_PATTERN);
|
|
4286
|
+
}
|
|
4287
|
+
|
|
4297
4288
|
// ../kiro-core/dist/stream.js
|
|
4289
|
+
init_debug();
|
|
4290
|
+
init_effort();
|
|
4291
|
+
init_endpoints();
|
|
4292
|
+
init_kiro_cli();
|
|
4293
|
+
init_management();
|
|
4294
|
+
init_models();
|
|
4295
|
+
init_oauth();
|
|
4298
4296
|
init_token_type();
|
|
4299
4297
|
|
|
4300
4298
|
// ../kiro-core/dist/transport.js
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ns-omp-provider-kiro",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "OMP (oh-my-pi) provider plugin: adds Kiro (AWS CodeWhisperer/Q) models via your kiro-cli login",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"README.md"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"ns-kiro-core": "0.2.
|
|
40
|
+
"ns-kiro-core": "0.2.1"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"@oh-my-pi/pi-ai": ">=18.1.0",
|