@sunerpy/opencode-kiro-auth 0.14.0 → 0.14.2
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/core/request/request-handler.js +17 -6
- package/dist/core/request/response-handler.d.ts +3 -1
- package/dist/core/request/response-handler.js +27 -19
- package/dist/plugin/config/loader.js +1 -0
- package/dist/plugin/config/schema.d.ts +12 -3
- package/dist/plugin/config/schema.js +11 -3
- package/package.json +1 -1
|
@@ -242,8 +242,9 @@ export class RequestHandler {
|
|
|
242
242
|
try {
|
|
243
243
|
sdkResponse = await client.send(command, { abortSignal: signal });
|
|
244
244
|
}
|
|
245
|
-
|
|
245
|
+
catch (error) {
|
|
246
246
|
endUpstreamWait();
|
|
247
|
+
throw error;
|
|
247
248
|
}
|
|
248
249
|
sendResolved = true;
|
|
249
250
|
if (apiTimestamp) {
|
|
@@ -251,11 +252,21 @@ export class RequestHandler {
|
|
|
251
252
|
}
|
|
252
253
|
const response = await this.responseHandler.handleSdkSuccess(sdkResponse, model, sdkPrep.conversationId, sdkPrep.streaming, {
|
|
253
254
|
signal,
|
|
254
|
-
onUpstreamWaitStart: () =>
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
255
|
+
onUpstreamWaitStart: ({ eventIndex }) => {
|
|
256
|
+
if (eventIndex === 0) {
|
|
257
|
+
if (!this.config.sdk_response_timeout_enabled)
|
|
258
|
+
endUpstreamWait();
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (!this.config.stream_event_timeout_enabled)
|
|
262
|
+
return;
|
|
263
|
+
beginUpstreamWait('stream event', this.config.request_timeout_ms, {
|
|
264
|
+
model,
|
|
265
|
+
effectiveModel: sdkPrep.effectiveModel,
|
|
266
|
+
region: sdkPrep.region,
|
|
267
|
+
eventIndex
|
|
268
|
+
});
|
|
269
|
+
},
|
|
259
270
|
onUpstreamWaitEnd: endUpstreamWait,
|
|
260
271
|
onIterationError: (error, afterCompletionMetadata) => logger.warn('Kiro SDK event stream iteration failed', {
|
|
261
272
|
model,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { SdkEventStreamIterationError } from './stream-error.js';
|
|
2
2
|
export interface SdkResponseLifecycle {
|
|
3
3
|
signal?: AbortSignal;
|
|
4
|
-
onUpstreamWaitStart?: (
|
|
4
|
+
onUpstreamWaitStart?: (context: {
|
|
5
|
+
eventIndex: number;
|
|
6
|
+
}) => void;
|
|
5
7
|
onUpstreamWaitEnd?: () => void;
|
|
6
8
|
onIterationError?: (error: unknown, afterCompletionMetadata: boolean) => void;
|
|
7
9
|
onComplete?: () => void | Promise<void>;
|
|
@@ -27,6 +27,7 @@ function wrapSdkEventStream(sdkResponse, signal, onUpstreamWaitStart, onUpstream
|
|
|
27
27
|
const rawIterator = eventStream[Symbol.asyncIterator]();
|
|
28
28
|
let closed = false;
|
|
29
29
|
let completionMetadataSeen = false;
|
|
30
|
+
let eventIndex = 0;
|
|
30
31
|
const closeRaw = async () => {
|
|
31
32
|
if (closed)
|
|
32
33
|
return;
|
|
@@ -38,26 +39,33 @@ function wrapSdkEventStream(sdkResponse, signal, onUpstreamWaitStart, onUpstream
|
|
|
38
39
|
await closeRaw();
|
|
39
40
|
throw abortReason(signal);
|
|
40
41
|
}
|
|
41
|
-
onUpstreamWaitStart?.();
|
|
42
|
+
onUpstreamWaitStart?.({ eventIndex });
|
|
42
43
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
44
|
+
let result;
|
|
45
|
+
if (!signal) {
|
|
46
|
+
result = await rawIterator.next();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
result = await new Promise((resolve, reject) => {
|
|
50
|
+
let settled = false;
|
|
51
|
+
const settle = (callback) => {
|
|
52
|
+
if (settled)
|
|
53
|
+
return;
|
|
54
|
+
settled = true;
|
|
55
|
+
signal.removeEventListener('abort', onAbort);
|
|
56
|
+
callback();
|
|
57
|
+
};
|
|
58
|
+
const onAbort = () => {
|
|
59
|
+
void closeRaw();
|
|
60
|
+
settle(() => reject(abortReason(signal)));
|
|
61
|
+
};
|
|
62
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
63
|
+
Promise.resolve(rawIterator.next()).then((nextResult) => settle(() => resolve(nextResult)), (error) => settle(() => reject(error)));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (!result.done)
|
|
67
|
+
eventIndex++;
|
|
68
|
+
return result;
|
|
61
69
|
}
|
|
62
70
|
finally {
|
|
63
71
|
onUpstreamWaitEnd?.();
|
|
@@ -137,6 +137,7 @@ function applyEnvOverrides(config) {
|
|
|
137
137
|
max_request_iterations: parseNumberEnv(env.KIRO_MAX_REQUEST_ITERATIONS, config.max_request_iterations),
|
|
138
138
|
sdk_response_timeout_enabled: parseBooleanEnv(env.KIRO_SDK_RESPONSE_TIMEOUT_ENABLED, config.sdk_response_timeout_enabled),
|
|
139
139
|
sdk_response_timeout_ms: parseNumberEnv(env.KIRO_SDK_RESPONSE_TIMEOUT_MS, config.sdk_response_timeout_ms),
|
|
140
|
+
stream_event_timeout_enabled: parseBooleanEnv(env.KIRO_STREAM_EVENT_TIMEOUT_ENABLED, config.stream_event_timeout_enabled),
|
|
140
141
|
request_timeout_ms: parseNumberEnv(env.KIRO_REQUEST_TIMEOUT_MS, config.request_timeout_ms),
|
|
141
142
|
token_expiry_buffer_ms: parseNumberEnv(env.KIRO_TOKEN_EXPIRY_BUFFER_MS, config.token_expiry_buffer_ms),
|
|
142
143
|
usage_sync_max_retries: parseNumberEnv(env.KIRO_USAGE_SYNC_MAX_RETRIES, config.usage_sync_max_retries),
|
|
@@ -56,18 +56,25 @@ export declare const KiroConfigSchema: z.ZodObject<{
|
|
|
56
56
|
rate_limit_max_retries: z.ZodDefault<z.ZodNumber>;
|
|
57
57
|
max_request_iterations: z.ZodDefault<z.ZodNumber>;
|
|
58
58
|
/**
|
|
59
|
-
* Opt into a fixed deadline
|
|
59
|
+
* Opt into a fixed deadline covering client.send() and the first stream event.
|
|
60
60
|
* Disabled by default because a pending request is ambiguous: Kiro may
|
|
61
61
|
* still be performing a valid long-running generation.
|
|
62
62
|
*/
|
|
63
63
|
sdk_response_timeout_enabled: z.ZodDefault<z.ZodBoolean>;
|
|
64
64
|
/**
|
|
65
|
-
* Maximum wait for
|
|
65
|
+
* Maximum wait for the initial SDK response and first stream event.
|
|
66
66
|
* Only used when sdk_response_timeout_enabled is true.
|
|
67
67
|
*/
|
|
68
68
|
sdk_response_timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
69
69
|
/**
|
|
70
|
-
*
|
|
70
|
+
* Opt into a fixed inactivity deadline between upstream stream events.
|
|
71
|
+
* Disabled by default because a silent event gap is ambiguous: Kiro may
|
|
72
|
+
* still be performing a valid long-running generation.
|
|
73
|
+
*/
|
|
74
|
+
stream_event_timeout_enabled: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
+
/**
|
|
76
|
+
* Maximum inactivity between upstream stream events.
|
|
77
|
+
* Only used when stream_event_timeout_enabled is true.
|
|
71
78
|
*/
|
|
72
79
|
request_timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
73
80
|
token_expiry_buffer_ms: z.ZodDefault<z.ZodNumber>;
|
|
@@ -120,6 +127,7 @@ export declare const KiroConfigSchema: z.ZodObject<{
|
|
|
120
127
|
max_request_iterations: number;
|
|
121
128
|
sdk_response_timeout_enabled: boolean;
|
|
122
129
|
sdk_response_timeout_ms: number;
|
|
130
|
+
stream_event_timeout_enabled: boolean;
|
|
123
131
|
request_timeout_ms: number;
|
|
124
132
|
token_expiry_buffer_ms: number;
|
|
125
133
|
token_keepalive_enabled: boolean;
|
|
@@ -155,6 +163,7 @@ export declare const KiroConfigSchema: z.ZodObject<{
|
|
|
155
163
|
max_request_iterations?: number | undefined;
|
|
156
164
|
sdk_response_timeout_enabled?: boolean | undefined;
|
|
157
165
|
sdk_response_timeout_ms?: number | undefined;
|
|
166
|
+
stream_event_timeout_enabled?: boolean | undefined;
|
|
158
167
|
request_timeout_ms?: number | undefined;
|
|
159
168
|
token_expiry_buffer_ms?: number | undefined;
|
|
160
169
|
token_keepalive_enabled?: boolean | undefined;
|
|
@@ -88,18 +88,25 @@ export const KiroConfigSchema = z.object({
|
|
|
88
88
|
rate_limit_max_retries: z.number().min(0).max(10).default(3),
|
|
89
89
|
max_request_iterations: z.number().min(5).max(1000).default(20),
|
|
90
90
|
/**
|
|
91
|
-
* Opt into a fixed deadline
|
|
91
|
+
* Opt into a fixed deadline covering client.send() and the first stream event.
|
|
92
92
|
* Disabled by default because a pending request is ambiguous: Kiro may
|
|
93
93
|
* still be performing a valid long-running generation.
|
|
94
94
|
*/
|
|
95
95
|
sdk_response_timeout_enabled: z.boolean().default(false),
|
|
96
96
|
/**
|
|
97
|
-
* Maximum wait for
|
|
97
|
+
* Maximum wait for the initial SDK response and first stream event.
|
|
98
98
|
* Only used when sdk_response_timeout_enabled is true.
|
|
99
99
|
*/
|
|
100
100
|
sdk_response_timeout_ms: z.number().min(30000).max(600000).default(300000),
|
|
101
101
|
/**
|
|
102
|
-
*
|
|
102
|
+
* Opt into a fixed inactivity deadline between upstream stream events.
|
|
103
|
+
* Disabled by default because a silent event gap is ambiguous: Kiro may
|
|
104
|
+
* still be performing a valid long-running generation.
|
|
105
|
+
*/
|
|
106
|
+
stream_event_timeout_enabled: z.boolean().default(false),
|
|
107
|
+
/**
|
|
108
|
+
* Maximum inactivity between upstream stream events.
|
|
109
|
+
* Only used when stream_event_timeout_enabled is true.
|
|
103
110
|
*/
|
|
104
111
|
request_timeout_ms: z.number().min(30000).max(600000).default(120000),
|
|
105
112
|
token_expiry_buffer_ms: z.number().min(30000).max(300000).default(300000),
|
|
@@ -153,6 +160,7 @@ export const DEFAULT_CONFIG = {
|
|
|
153
160
|
max_request_iterations: 20,
|
|
154
161
|
sdk_response_timeout_enabled: false,
|
|
155
162
|
sdk_response_timeout_ms: 300000,
|
|
163
|
+
stream_event_timeout_enabled: false,
|
|
156
164
|
request_timeout_ms: 120000,
|
|
157
165
|
token_expiry_buffer_ms: 300000,
|
|
158
166
|
token_keepalive_enabled: false,
|