@ai-sdk/harness-opencode 1.0.136 → 1.0.139
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 +24 -0
- package/dist/bridge/index.mjs +54 -10
- package/dist/bridge/index.mjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -7
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/bridge/index.ts +66 -12
- package/src/opencode-harness.ts +41 -8
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["SandboxSession"],"sources":["../src/opencode-auth.ts","../src/opencode-harness.ts","../src/version.ts","../src/index.ts"],"mappings":";;;;;KAmMY,6BAA6B;;;KCxG7B;WACD,OAAO;;;;;;WAMP,uBAAuB;;;;;;WAMvB,iBAAiB;;;;;WAKjB,aAAa;WACb;;;;;;WAMA;WACA;;;;;WAKA,eAAe;WACf;;;;;;;WAOA,YAAY;;;;;WAKZ,kBAAkB;;cAKvB;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["SandboxSession"],"sources":["../src/opencode-auth.ts","../src/opencode-harness.ts","../src/version.ts","../src/index.ts"],"mappings":";;;;;KAmMY,6BAA6B;;;KCxG7B;WACD,OAAO;;;;;;WAMP,uBAAuB;;;;;;WAMvB,iBAAiB;;;;;WAKjB,aAAa;WACb;;;;;;WAMA;WACA;;;;;WAKA,eAAe;WACf;;;;;;;WAOA,YAAY;;;;;WAKZ,kBAAkB;;cAKvB;;;;;;;;;;;;;QAu0Ci9Y;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;QAAzP;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;UAA4K;;;;;;UAAgJ;;;;;;;;;;;;QAAhJ;;;;;;QAAgJ;;;;;;;;;;;;QAArjB;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;QAA4K;;;;;;QAAgJ;;;;;;;;;;;;;;;;;;UAArjB;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;;;;;;;;;;;QAAzP;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;QAAzP;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;UAA4K;;;;;;UAAgJ;;;;;;;;;;;;QAAhJ;;;;;;QAAgJ;;;;;;;;;;;;;;;;;;;UAArjB;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA9sChsZ,eACd,WAAU,0BACT,iBAAiB;;;qBCrQP;;;;;;;qBCIA,oCAAQ;;;;;;;;;;;;;QAOs21D;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;QAAzP;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;UAA4K;;;;;;UAAgJ;;;;;;;;;;;;QAAhJ;;;;;;QAAgJ;;;;;;;;;;;;QAArjB;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;QAA4K;;;;;;QAAgJ;;;;;;;;;;;;;;;;;;UAArjB;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;;;;;;;;;;;QAAzP;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;QAAzP;QAAoC;;;UAAmE;UAAsC;;QAAiE;QAA2C;;;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;;;;;UAAzP;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C;;;;;;;;;UAA4K;;;;;;UAAgJ;;;;;;;;;;;;QAAhJ;;;;;;QAAgJ;;;;;;;;;;;;;;;;;;;UAArjB;UAAoC;;;YAAmE;YAAsC;;UAAiE;UAA2C"}
|
package/dist/index.js
CHANGED
|
@@ -713,7 +713,7 @@ const startMessageSchema = harnessV1BridgeStartBaseSchema.extend({
|
|
|
713
713
|
z.discriminatedUnion("type", [startMessageSchema, ...harnessV1BridgeInboundCommandSchemas]);
|
|
714
714
|
//#endregion
|
|
715
715
|
//#region src/version.ts
|
|
716
|
-
const VERSION = "1.0.
|
|
716
|
+
const VERSION = "1.0.139";
|
|
717
717
|
//#endregion
|
|
718
718
|
//#region src/opencode-harness.ts
|
|
719
719
|
/**
|
|
@@ -1241,12 +1241,17 @@ function createSession({ sessionId, channel, proc, provider, reasoningVariant, o
|
|
|
1241
1241
|
let pendingResumeSessionId = seedResumeSessionOnFirstPrompt ? openCodeSessionId : void 0;
|
|
1242
1242
|
let selectedModel;
|
|
1243
1243
|
let activeTurn = false;
|
|
1244
|
+
let pendingTurnDrain = Promise.resolve();
|
|
1244
1245
|
const pendingCompactionParts = [];
|
|
1245
1246
|
channel.on("bridge-thread", (msg) => {
|
|
1246
1247
|
latestOpenCodeSessionId = msg.threadId;
|
|
1247
1248
|
});
|
|
1248
1249
|
const wireTurn = (turnOpts) => {
|
|
1249
1250
|
activeTurn = true;
|
|
1251
|
+
let resolveTurnDrain;
|
|
1252
|
+
pendingTurnDrain = new Promise((resolve) => {
|
|
1253
|
+
resolveTurnDrain = resolve;
|
|
1254
|
+
});
|
|
1250
1255
|
let pendingResolve;
|
|
1251
1256
|
let pendingReject;
|
|
1252
1257
|
const done = new Promise((resolve, reject) => {
|
|
@@ -1259,7 +1264,11 @@ function createSession({ sessionId, channel, proc, provider, reasoningVariant, o
|
|
|
1259
1264
|
onReconnect: (listener) => channel.onReconnect(listener)
|
|
1260
1265
|
}) : void 0;
|
|
1261
1266
|
const unsubs = [];
|
|
1267
|
+
let isSettled = false;
|
|
1268
|
+
let isFinished = false;
|
|
1269
|
+
let drainingAfterAbort = false;
|
|
1262
1270
|
const forward = (event) => {
|
|
1271
|
+
if (isSettled) return;
|
|
1263
1272
|
try {
|
|
1264
1273
|
turnOpts.emit(event);
|
|
1265
1274
|
} catch {}
|
|
@@ -1280,35 +1289,49 @@ function createSession({ sessionId, channel, proc, provider, reasoningVariant, o
|
|
|
1280
1289
|
"compaction",
|
|
1281
1290
|
"raw"
|
|
1282
1291
|
];
|
|
1283
|
-
|
|
1292
|
+
const finishTurn = () => {
|
|
1293
|
+
if (isFinished) return;
|
|
1294
|
+
isFinished = true;
|
|
1295
|
+
activeTurn = false;
|
|
1296
|
+
if (turnOpts.abortSignal) turnOpts.abortSignal.removeEventListener("abort", onAbort);
|
|
1297
|
+
for (const u of unsubs) u();
|
|
1298
|
+
resolveTurnDrain();
|
|
1299
|
+
};
|
|
1284
1300
|
const settleSuccess = () => {
|
|
1285
1301
|
if (isSettled) return;
|
|
1286
1302
|
isSettled = true;
|
|
1287
|
-
activeTurn = false;
|
|
1288
1303
|
userMessageSubmitter?.close();
|
|
1289
|
-
for (const u of unsubs) u();
|
|
1290
1304
|
pendingResolve();
|
|
1305
|
+
finishTurn();
|
|
1291
1306
|
};
|
|
1292
1307
|
const settleError = (err) => {
|
|
1293
1308
|
if (isSettled) return;
|
|
1294
1309
|
isSettled = true;
|
|
1295
|
-
activeTurn = false;
|
|
1296
1310
|
userMessageSubmitter?.close(err);
|
|
1297
|
-
for (const u of unsubs) u();
|
|
1298
1311
|
pendingReject(err);
|
|
1312
|
+
finishTurn();
|
|
1299
1313
|
};
|
|
1300
1314
|
for (const type of eventTypes) unsubs.push(channel.on(type, (msg) => {
|
|
1301
1315
|
forward(msg);
|
|
1302
1316
|
}));
|
|
1303
1317
|
unsubs.push(channel.on("finish", (msg) => {
|
|
1318
|
+
if (drainingAfterAbort) {
|
|
1319
|
+
finishTurn();
|
|
1320
|
+
return;
|
|
1321
|
+
}
|
|
1304
1322
|
forward(msg);
|
|
1305
1323
|
settleSuccess();
|
|
1306
1324
|
}));
|
|
1307
1325
|
unsubs.push(channel.on("error", (msg) => {
|
|
1326
|
+
if (drainingAfterAbort) return;
|
|
1308
1327
|
forward(msg);
|
|
1309
1328
|
settleError(msg.error);
|
|
1310
1329
|
}));
|
|
1311
1330
|
const onClose = (_code, reason) => {
|
|
1331
|
+
if (drainingAfterAbort) {
|
|
1332
|
+
finishTurn();
|
|
1333
|
+
return;
|
|
1334
|
+
}
|
|
1312
1335
|
if (isSettled) return;
|
|
1313
1336
|
if (reason === "suspended") {
|
|
1314
1337
|
settleSuccess();
|
|
@@ -1322,7 +1345,11 @@ function createSession({ sessionId, channel, proc, provider, reasoningVariant, o
|
|
|
1322
1345
|
try {
|
|
1323
1346
|
channel.send({ type: "abort" });
|
|
1324
1347
|
} catch {}
|
|
1325
|
-
|
|
1348
|
+
const error = turnOpts.abortSignal?.reason ?? new DOMException("Aborted", "AbortError");
|
|
1349
|
+
isSettled = true;
|
|
1350
|
+
drainingAfterAbort = true;
|
|
1351
|
+
userMessageSubmitter?.close(error);
|
|
1352
|
+
pendingReject(error);
|
|
1326
1353
|
};
|
|
1327
1354
|
if (turnOpts.abortSignal) {
|
|
1328
1355
|
if (turnOpts.abortSignal.aborted) onAbort();
|
|
@@ -1366,6 +1393,7 @@ function createSession({ sessionId, channel, proc, provider, reasoningVariant, o
|
|
|
1366
1393
|
...debug ? { debug } : {}
|
|
1367
1394
|
});
|
|
1368
1395
|
const prepareTurn = async (opts) => {
|
|
1396
|
+
await pendingTurnDrain;
|
|
1369
1397
|
if (opts.responseFormat?.type === "json" && opts.responseFormat.schema == null) throw new HarnessCapabilityUnsupportedError({
|
|
1370
1398
|
message: "Harness 'opencode' requires a JSON schema for structured output.",
|
|
1371
1399
|
harnessId: "opencode"
|