@sunerpy/opencode-kiro-auth 0.13.2 → 0.13.3
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.
|
@@ -74,14 +74,23 @@ export class RequestHandler {
|
|
|
74
74
|
abortFromInbound();
|
|
75
75
|
else
|
|
76
76
|
inboundSignal?.addEventListener('abort', abortFromInbound, { once: true });
|
|
77
|
-
|
|
77
|
+
let timeout;
|
|
78
|
+
const refreshRequestDeadline = () => {
|
|
79
|
+
if (requestController.signal.aborted)
|
|
80
|
+
return;
|
|
81
|
+
if (timeout)
|
|
82
|
+
clearDeadlineTimeout(timeout);
|
|
83
|
+
timeout = setDeadlineTimeout(() => requestController.abort(new DOMException('Kiro request timed out', 'TimeoutError')), this.config.request_timeout_ms);
|
|
84
|
+
};
|
|
85
|
+
refreshRequestDeadline();
|
|
78
86
|
let requestCleanupDone = false;
|
|
79
87
|
let responseOwnsLifecycle = false;
|
|
80
88
|
const cleanupRequest = () => {
|
|
81
89
|
if (requestCleanupDone)
|
|
82
90
|
return;
|
|
83
91
|
requestCleanupDone = true;
|
|
84
|
-
|
|
92
|
+
if (timeout)
|
|
93
|
+
clearDeadlineTimeout(timeout);
|
|
85
94
|
inboundSignal?.removeEventListener('abort', abortFromInbound);
|
|
86
95
|
};
|
|
87
96
|
const signal = requestController.signal;
|
|
@@ -189,11 +198,13 @@ export class RequestHandler {
|
|
|
189
198
|
};
|
|
190
199
|
const sdkResponse = await client.send(command, { abortSignal: signal });
|
|
191
200
|
sendResolved = true;
|
|
201
|
+
refreshRequestDeadline();
|
|
192
202
|
if (apiTimestamp) {
|
|
193
203
|
this.logSdkResponse(sdkPrep, apiTimestamp);
|
|
194
204
|
}
|
|
195
205
|
const response = await this.responseHandler.handleSdkSuccess(sdkResponse, model, sdkPrep.conversationId, sdkPrep.streaming, {
|
|
196
206
|
signal,
|
|
207
|
+
onActivity: refreshRequestDeadline,
|
|
197
208
|
onComplete: completeRequest,
|
|
198
209
|
onTerminal: cleanupRequest,
|
|
199
210
|
onCancel: (reason) => requestController.abort(reason),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SdkEventStreamIterationError } from './stream-error.js';
|
|
2
2
|
export interface SdkResponseLifecycle {
|
|
3
3
|
signal?: AbortSignal;
|
|
4
|
+
onActivity?: () => void;
|
|
4
5
|
onComplete?: () => void | Promise<void>;
|
|
5
6
|
onTerminal?: () => void;
|
|
6
7
|
onCancel?: (reason: unknown) => void;
|
|
@@ -11,7 +11,7 @@ async function closeIterator(iterator) {
|
|
|
11
11
|
}
|
|
12
12
|
catch { }
|
|
13
13
|
}
|
|
14
|
-
function wrapSdkEventStream(sdkResponse, signal) {
|
|
14
|
+
function wrapSdkEventStream(sdkResponse, signal, onActivity) {
|
|
15
15
|
const eventStream = sdkResponse.generateAssistantResponseResponse;
|
|
16
16
|
if (!eventStream || typeof eventStream[Symbol.asyncIterator] !== 'function') {
|
|
17
17
|
return { response: sdkResponse, closeRaw: async () => { } };
|
|
@@ -25,8 +25,13 @@ function wrapSdkEventStream(sdkResponse, signal) {
|
|
|
25
25
|
await closeIterator(rawIterator);
|
|
26
26
|
};
|
|
27
27
|
const nextRaw = async () => {
|
|
28
|
+
const recordActivity = (result) => {
|
|
29
|
+
if (!result.done)
|
|
30
|
+
onActivity?.();
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
28
33
|
if (!signal)
|
|
29
|
-
return rawIterator.next();
|
|
34
|
+
return rawIterator.next().then(recordActivity);
|
|
30
35
|
if (signal.aborted) {
|
|
31
36
|
await closeRaw();
|
|
32
37
|
throw abortReason(signal);
|
|
@@ -45,7 +50,7 @@ function wrapSdkEventStream(sdkResponse, signal) {
|
|
|
45
50
|
settle(() => reject(abortReason(signal)));
|
|
46
51
|
};
|
|
47
52
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
48
|
-
Promise.resolve(rawIterator.next()).then((result) => settle(() => resolve(result)), (error) => settle(() => reject(error)));
|
|
53
|
+
Promise.resolve(rawIterator.next()).then((result) => settle(() => resolve(recordActivity(result))), (error) => settle(() => reject(error)));
|
|
49
54
|
});
|
|
50
55
|
};
|
|
51
56
|
const wrappedIterator = {
|
|
@@ -94,7 +99,7 @@ export class ResponseHandler {
|
|
|
94
99
|
if (streaming) {
|
|
95
100
|
return this.handleSdkStreaming(sdkResponse, model, conversationId, lifecycle);
|
|
96
101
|
}
|
|
97
|
-
return this.handleSdkNonStreaming(sdkResponse, model, conversationId, lifecycle
|
|
102
|
+
return this.handleSdkNonStreaming(sdkResponse, model, conversationId, lifecycle);
|
|
98
103
|
}
|
|
99
104
|
async handleStreaming(response, model, conversationId) {
|
|
100
105
|
const s = transformKiroStream(response, model, conversationId);
|
|
@@ -113,7 +118,7 @@ export class ResponseHandler {
|
|
|
113
118
|
}), { headers: { 'Content-Type': 'text/event-stream' } });
|
|
114
119
|
}
|
|
115
120
|
async handleSdkStreaming(sdkResponse, model, conversationId, lifecycle) {
|
|
116
|
-
const wrapped = wrapSdkEventStream(sdkResponse, lifecycle.signal);
|
|
121
|
+
const wrapped = wrapSdkEventStream(sdkResponse, lifecycle.signal, lifecycle.onActivity);
|
|
117
122
|
const transformed = transformSdkStream(wrapped.response, model, conversationId);
|
|
118
123
|
const buffered = [];
|
|
119
124
|
let firstSemantic;
|
|
@@ -215,14 +220,14 @@ export class ResponseHandler {
|
|
|
215
220
|
}
|
|
216
221
|
}, { highWaterMark: 0 }), { headers: { 'Content-Type': 'text/event-stream' } });
|
|
217
222
|
}
|
|
218
|
-
async handleSdkNonStreaming(sdkResponse, model, conversationId,
|
|
223
|
+
async handleSdkNonStreaming(sdkResponse, model, conversationId, lifecycle) {
|
|
219
224
|
// For non-streaming SDK responses, collect all events
|
|
220
225
|
let content = '';
|
|
221
226
|
let reasoningContent = '';
|
|
222
227
|
const toolCalls = [];
|
|
223
228
|
let inputTokens = 0;
|
|
224
229
|
let outputTokens = 0;
|
|
225
|
-
const wrapped = wrapSdkEventStream(sdkResponse, signal);
|
|
230
|
+
const wrapped = wrapSdkEventStream(sdkResponse, lifecycle.signal, lifecycle.onActivity);
|
|
226
231
|
const eventStream = wrapped.response.generateAssistantResponseResponse;
|
|
227
232
|
if (eventStream) {
|
|
228
233
|
try {
|
|
@@ -243,7 +248,7 @@ export class ResponseHandler {
|
|
|
243
248
|
}
|
|
244
249
|
}
|
|
245
250
|
finally {
|
|
246
|
-
if (signal?.aborted)
|
|
251
|
+
if (lifecycle.signal?.aborted)
|
|
247
252
|
await wrapped.closeRaw();
|
|
248
253
|
}
|
|
249
254
|
}
|