@ai-sdk/harness-opencode 1.0.136 → 1.0.137

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ai-sdk/harness-opencode
2
2
 
3
+ ## 1.0.137
4
+
5
+ ### Patch Changes
6
+
7
+ - 82b6142: fix(harness-opencode): stop aborted OpenCode turns before starting the next turn
8
+ - Updated dependencies [8c65988]
9
+ - Updated dependencies [8182916]
10
+ - Updated dependencies [527a163]
11
+ - @ai-sdk/provider@4.0.21
12
+ - @ai-sdk/provider-utils@5.0.53
13
+ - @ai-sdk/harness@1.0.135
14
+
3
15
  ## 1.0.136
4
16
 
5
17
  ### Patch Changes
@@ -1988,6 +1988,9 @@ async function legacySessionPrompt({ client, sessionId, start, prompt: promptTex
1988
1988
  }]
1989
1989
  });
1990
1990
  }
1991
+ async function legacySessionAbort({ client, sessionId }) {
1992
+ return client.session.abort({ sessionID: sessionId });
1993
+ }
1991
1994
  async function legacySessionSummarize({ client, sessionId, model }) {
1992
1995
  return client.session.summarize({
1993
1996
  sessionID: sessionId,
@@ -2062,6 +2065,24 @@ async function ensureSession({ client, start, emit }) {
2062
2065
  async function runPrompt({ client, sessionId, start, turn, emit }) {
2063
2066
  const eventsAbort = new AbortController();
2064
2067
  const turnSettled = createDeferred();
2068
+ const promptRequestSettled = createDeferred();
2069
+ let abortSessionPromise;
2070
+ const abortSession = () => {
2071
+ eventsAbort.abort();
2072
+ turn.experimental_userMessages.close();
2073
+ turnSettled.resolve("aborted");
2074
+ abortSessionPromise ??= (async () => {
2075
+ await promptRequestSettled.promise;
2076
+ const aborted = await legacySessionAbort({
2077
+ client,
2078
+ sessionId
2079
+ });
2080
+ if (aborted.error) throw new Error(`OpenCode session abort failed: ${formatError(aborted.error)}`);
2081
+ })();
2082
+ abortSessionPromise.catch(() => {});
2083
+ };
2084
+ turn.abortSignal.addEventListener("abort", abortSession, { once: true });
2085
+ if (turn.abortSignal.aborted) abortSession();
2065
2086
  let sawContent = false;
2066
2087
  let sawFinishStep = false;
2067
2088
  let sawBusy = false;
@@ -2190,20 +2211,43 @@ async function runPrompt({ client, sessionId, start, turn, emit }) {
2190
2211
  }
2191
2212
  }
2192
2213
  })();
2193
- const prompted = await legacySessionPrompt({
2194
- client,
2195
- sessionId,
2196
- start
2197
- });
2198
- if (prompted.error) {
2199
- eventsAbort.abort();
2200
- turn.experimental_userMessages.close(/* @__PURE__ */ new Error(`OpenCode prompt failed: ${formatError(prompted.error)}`));
2201
- throw new Error(`OpenCode prompt failed: ${formatError(prompted.error)}`);
2202
- }
2214
+ if (!turn.abortSignal.aborted) {
2215
+ let prompted;
2216
+ try {
2217
+ prompted = await legacySessionPrompt({
2218
+ client,
2219
+ sessionId,
2220
+ start
2221
+ });
2222
+ } catch (error) {
2223
+ promptRequestSettled.resolve(void 0);
2224
+ turn.abortSignal.removeEventListener("abort", abortSession);
2225
+ eventsAbort.abort();
2226
+ turn.experimental_userMessages.close(error);
2227
+ throw error;
2228
+ }
2229
+ promptRequestSettled.resolve(void 0);
2230
+ if (prompted.error) {
2231
+ turn.abortSignal.removeEventListener("abort", abortSession);
2232
+ eventsAbort.abort();
2233
+ turn.experimental_userMessages.close(/* @__PURE__ */ new Error(`OpenCode prompt failed: ${formatError(prompted.error)}`));
2234
+ throw new Error(`OpenCode prompt failed: ${formatError(prompted.error)}`);
2235
+ }
2236
+ } else promptRequestSettled.resolve(void 0);
2203
2237
  const settlement = await turnSettled.promise;
2238
+ turn.abortSignal.removeEventListener("abort", abortSession);
2204
2239
  eventsAbort.abort();
2205
2240
  await eventLoop.catch(() => {});
2206
2241
  await userMessageLoop.catch(() => {});
2242
+ if (settlement === "aborted") {
2243
+ try {
2244
+ await abortSessionPromise;
2245
+ } catch (error) {
2246
+ closeRuntime();
2247
+ throw error;
2248
+ }
2249
+ return;
2250
+ }
2207
2251
  if (settlement === "stream-ended") throw new Error("OpenCode event stream ended before the turn settled.");
2208
2252
  if (terminalError) throw new Error(terminalError);
2209
2253
  if (!sawFinishStep) {