@cydm/pie 2.7.4 → 2.7.5
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/builtin/extensions/ask-user/index.js +3 -3
- package/dist/builtin/extensions/plan-mode/index.js +3 -3
- package/dist/builtin/extensions/subagent/index.js +8 -7
- package/dist/builtin/extensions/todo/index.js +17 -24
- package/dist/builtin/skills/computer-use-axi/SKILL.md +7 -2
- package/dist/builtin/skills/computer-use-axi/computer-use-axi-broker.js +357 -206
- package/dist/builtin/skills/computer-use-axi/computer-use-axi-runtime.js +92 -15
- package/dist/chunks/{chunk-FIE3SSLW.js → chunk-BFHCZVNO.js} +7805 -7110
- package/dist/chunks/{chunk-P2B62ZPU.js → chunk-MLRF72MK.js} +57 -38
- package/dist/chunks/{chunk-VGVCDW7P.js → chunk-OOUL3DRE.js} +2 -2
- package/dist/chunks/{chunk-Z4EIBY2E.js → chunk-SUPAWIKP.js} +588 -47
- package/dist/chunks/{src-EVCOTFBU.js → src-DV4UYUNJ.js} +2 -2
- package/dist/chunks/{test-stream-24BCZPP5.js → test-stream-SWO34GSS.js} +1 -1
- package/dist/cli.js +177 -531
- package/package.json +2 -2
|
@@ -512,6 +512,338 @@ function hashText(text) {
|
|
|
512
512
|
return hasher.digest();
|
|
513
513
|
}
|
|
514
514
|
|
|
515
|
+
// ../../node_modules/@noble/hashes/esm/utils.js
|
|
516
|
+
function isBytes(a) {
|
|
517
|
+
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
|
|
518
|
+
}
|
|
519
|
+
function abytes(b, ...lengths) {
|
|
520
|
+
if (!isBytes(b))
|
|
521
|
+
throw new Error("Uint8Array expected");
|
|
522
|
+
if (lengths.length > 0 && !lengths.includes(b.length))
|
|
523
|
+
throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length);
|
|
524
|
+
}
|
|
525
|
+
function aexists(instance, checkFinished = true) {
|
|
526
|
+
if (instance.destroyed)
|
|
527
|
+
throw new Error("Hash instance has been destroyed");
|
|
528
|
+
if (checkFinished && instance.finished)
|
|
529
|
+
throw new Error("Hash#digest() has already been called");
|
|
530
|
+
}
|
|
531
|
+
function aoutput(out, instance) {
|
|
532
|
+
abytes(out);
|
|
533
|
+
const min = instance.outputLen;
|
|
534
|
+
if (out.length < min) {
|
|
535
|
+
throw new Error("digestInto() expects output buffer of length at least " + min);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
function clean(...arrays) {
|
|
539
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
540
|
+
arrays[i].fill(0);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
function createView(arr) {
|
|
544
|
+
return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
|
|
545
|
+
}
|
|
546
|
+
function rotr(word, shift) {
|
|
547
|
+
return word << 32 - shift | word >>> shift;
|
|
548
|
+
}
|
|
549
|
+
function utf8ToBytes(str) {
|
|
550
|
+
if (typeof str !== "string")
|
|
551
|
+
throw new Error("string expected");
|
|
552
|
+
return new Uint8Array(new TextEncoder().encode(str));
|
|
553
|
+
}
|
|
554
|
+
function toBytes(data) {
|
|
555
|
+
if (typeof data === "string")
|
|
556
|
+
data = utf8ToBytes(data);
|
|
557
|
+
abytes(data);
|
|
558
|
+
return data;
|
|
559
|
+
}
|
|
560
|
+
var Hash = class {
|
|
561
|
+
};
|
|
562
|
+
function createHasher(hashCons) {
|
|
563
|
+
const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
|
|
564
|
+
const tmp = hashCons();
|
|
565
|
+
hashC.outputLen = tmp.outputLen;
|
|
566
|
+
hashC.blockLen = tmp.blockLen;
|
|
567
|
+
hashC.create = () => hashCons();
|
|
568
|
+
return hashC;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// ../../node_modules/@noble/hashes/esm/_md.js
|
|
572
|
+
function setBigUint64(view, byteOffset, value, isLE) {
|
|
573
|
+
if (typeof view.setBigUint64 === "function")
|
|
574
|
+
return view.setBigUint64(byteOffset, value, isLE);
|
|
575
|
+
const _32n = BigInt(32);
|
|
576
|
+
const _u32_max = BigInt(4294967295);
|
|
577
|
+
const wh = Number(value >> _32n & _u32_max);
|
|
578
|
+
const wl = Number(value & _u32_max);
|
|
579
|
+
const h = isLE ? 4 : 0;
|
|
580
|
+
const l = isLE ? 0 : 4;
|
|
581
|
+
view.setUint32(byteOffset + h, wh, isLE);
|
|
582
|
+
view.setUint32(byteOffset + l, wl, isLE);
|
|
583
|
+
}
|
|
584
|
+
function Chi(a, b, c) {
|
|
585
|
+
return a & b ^ ~a & c;
|
|
586
|
+
}
|
|
587
|
+
function Maj(a, b, c) {
|
|
588
|
+
return a & b ^ a & c ^ b & c;
|
|
589
|
+
}
|
|
590
|
+
var HashMD = class extends Hash {
|
|
591
|
+
constructor(blockLen, outputLen, padOffset, isLE) {
|
|
592
|
+
super();
|
|
593
|
+
this.finished = false;
|
|
594
|
+
this.length = 0;
|
|
595
|
+
this.pos = 0;
|
|
596
|
+
this.destroyed = false;
|
|
597
|
+
this.blockLen = blockLen;
|
|
598
|
+
this.outputLen = outputLen;
|
|
599
|
+
this.padOffset = padOffset;
|
|
600
|
+
this.isLE = isLE;
|
|
601
|
+
this.buffer = new Uint8Array(blockLen);
|
|
602
|
+
this.view = createView(this.buffer);
|
|
603
|
+
}
|
|
604
|
+
update(data) {
|
|
605
|
+
aexists(this);
|
|
606
|
+
data = toBytes(data);
|
|
607
|
+
abytes(data);
|
|
608
|
+
const { view, buffer, blockLen } = this;
|
|
609
|
+
const len = data.length;
|
|
610
|
+
for (let pos = 0; pos < len; ) {
|
|
611
|
+
const take = Math.min(blockLen - this.pos, len - pos);
|
|
612
|
+
if (take === blockLen) {
|
|
613
|
+
const dataView = createView(data);
|
|
614
|
+
for (; blockLen <= len - pos; pos += blockLen)
|
|
615
|
+
this.process(dataView, pos);
|
|
616
|
+
continue;
|
|
617
|
+
}
|
|
618
|
+
buffer.set(data.subarray(pos, pos + take), this.pos);
|
|
619
|
+
this.pos += take;
|
|
620
|
+
pos += take;
|
|
621
|
+
if (this.pos === blockLen) {
|
|
622
|
+
this.process(view, 0);
|
|
623
|
+
this.pos = 0;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
this.length += data.length;
|
|
627
|
+
this.roundClean();
|
|
628
|
+
return this;
|
|
629
|
+
}
|
|
630
|
+
digestInto(out) {
|
|
631
|
+
aexists(this);
|
|
632
|
+
aoutput(out, this);
|
|
633
|
+
this.finished = true;
|
|
634
|
+
const { buffer, view, blockLen, isLE } = this;
|
|
635
|
+
let { pos } = this;
|
|
636
|
+
buffer[pos++] = 128;
|
|
637
|
+
clean(this.buffer.subarray(pos));
|
|
638
|
+
if (this.padOffset > blockLen - pos) {
|
|
639
|
+
this.process(view, 0);
|
|
640
|
+
pos = 0;
|
|
641
|
+
}
|
|
642
|
+
for (let i = pos; i < blockLen; i++)
|
|
643
|
+
buffer[i] = 0;
|
|
644
|
+
setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);
|
|
645
|
+
this.process(view, 0);
|
|
646
|
+
const oview = createView(out);
|
|
647
|
+
const len = this.outputLen;
|
|
648
|
+
if (len % 4)
|
|
649
|
+
throw new Error("_sha2: outputLen should be aligned to 32bit");
|
|
650
|
+
const outLen = len / 4;
|
|
651
|
+
const state = this.get();
|
|
652
|
+
if (outLen > state.length)
|
|
653
|
+
throw new Error("_sha2: outputLen bigger than state");
|
|
654
|
+
for (let i = 0; i < outLen; i++)
|
|
655
|
+
oview.setUint32(4 * i, state[i], isLE);
|
|
656
|
+
}
|
|
657
|
+
digest() {
|
|
658
|
+
const { buffer, outputLen } = this;
|
|
659
|
+
this.digestInto(buffer);
|
|
660
|
+
const res = buffer.slice(0, outputLen);
|
|
661
|
+
this.destroy();
|
|
662
|
+
return res;
|
|
663
|
+
}
|
|
664
|
+
_cloneInto(to) {
|
|
665
|
+
to || (to = new this.constructor());
|
|
666
|
+
to.set(...this.get());
|
|
667
|
+
const { blockLen, buffer, length, finished, destroyed, pos } = this;
|
|
668
|
+
to.destroyed = destroyed;
|
|
669
|
+
to.finished = finished;
|
|
670
|
+
to.length = length;
|
|
671
|
+
to.pos = pos;
|
|
672
|
+
if (length % blockLen)
|
|
673
|
+
to.buffer.set(buffer);
|
|
674
|
+
return to;
|
|
675
|
+
}
|
|
676
|
+
clone() {
|
|
677
|
+
return this._cloneInto();
|
|
678
|
+
}
|
|
679
|
+
};
|
|
680
|
+
var SHA256_IV = /* @__PURE__ */ Uint32Array.from([
|
|
681
|
+
1779033703,
|
|
682
|
+
3144134277,
|
|
683
|
+
1013904242,
|
|
684
|
+
2773480762,
|
|
685
|
+
1359893119,
|
|
686
|
+
2600822924,
|
|
687
|
+
528734635,
|
|
688
|
+
1541459225
|
|
689
|
+
]);
|
|
690
|
+
|
|
691
|
+
// ../../node_modules/@noble/hashes/esm/sha2.js
|
|
692
|
+
var SHA256_K = /* @__PURE__ */ Uint32Array.from([
|
|
693
|
+
1116352408,
|
|
694
|
+
1899447441,
|
|
695
|
+
3049323471,
|
|
696
|
+
3921009573,
|
|
697
|
+
961987163,
|
|
698
|
+
1508970993,
|
|
699
|
+
2453635748,
|
|
700
|
+
2870763221,
|
|
701
|
+
3624381080,
|
|
702
|
+
310598401,
|
|
703
|
+
607225278,
|
|
704
|
+
1426881987,
|
|
705
|
+
1925078388,
|
|
706
|
+
2162078206,
|
|
707
|
+
2614888103,
|
|
708
|
+
3248222580,
|
|
709
|
+
3835390401,
|
|
710
|
+
4022224774,
|
|
711
|
+
264347078,
|
|
712
|
+
604807628,
|
|
713
|
+
770255983,
|
|
714
|
+
1249150122,
|
|
715
|
+
1555081692,
|
|
716
|
+
1996064986,
|
|
717
|
+
2554220882,
|
|
718
|
+
2821834349,
|
|
719
|
+
2952996808,
|
|
720
|
+
3210313671,
|
|
721
|
+
3336571891,
|
|
722
|
+
3584528711,
|
|
723
|
+
113926993,
|
|
724
|
+
338241895,
|
|
725
|
+
666307205,
|
|
726
|
+
773529912,
|
|
727
|
+
1294757372,
|
|
728
|
+
1396182291,
|
|
729
|
+
1695183700,
|
|
730
|
+
1986661051,
|
|
731
|
+
2177026350,
|
|
732
|
+
2456956037,
|
|
733
|
+
2730485921,
|
|
734
|
+
2820302411,
|
|
735
|
+
3259730800,
|
|
736
|
+
3345764771,
|
|
737
|
+
3516065817,
|
|
738
|
+
3600352804,
|
|
739
|
+
4094571909,
|
|
740
|
+
275423344,
|
|
741
|
+
430227734,
|
|
742
|
+
506948616,
|
|
743
|
+
659060556,
|
|
744
|
+
883997877,
|
|
745
|
+
958139571,
|
|
746
|
+
1322822218,
|
|
747
|
+
1537002063,
|
|
748
|
+
1747873779,
|
|
749
|
+
1955562222,
|
|
750
|
+
2024104815,
|
|
751
|
+
2227730452,
|
|
752
|
+
2361852424,
|
|
753
|
+
2428436474,
|
|
754
|
+
2756734187,
|
|
755
|
+
3204031479,
|
|
756
|
+
3329325298
|
|
757
|
+
]);
|
|
758
|
+
var SHA256_W = /* @__PURE__ */ new Uint32Array(64);
|
|
759
|
+
var SHA256 = class extends HashMD {
|
|
760
|
+
constructor(outputLen = 32) {
|
|
761
|
+
super(64, outputLen, 8, false);
|
|
762
|
+
this.A = SHA256_IV[0] | 0;
|
|
763
|
+
this.B = SHA256_IV[1] | 0;
|
|
764
|
+
this.C = SHA256_IV[2] | 0;
|
|
765
|
+
this.D = SHA256_IV[3] | 0;
|
|
766
|
+
this.E = SHA256_IV[4] | 0;
|
|
767
|
+
this.F = SHA256_IV[5] | 0;
|
|
768
|
+
this.G = SHA256_IV[6] | 0;
|
|
769
|
+
this.H = SHA256_IV[7] | 0;
|
|
770
|
+
}
|
|
771
|
+
get() {
|
|
772
|
+
const { A, B, C, D, E, F, G, H } = this;
|
|
773
|
+
return [A, B, C, D, E, F, G, H];
|
|
774
|
+
}
|
|
775
|
+
// prettier-ignore
|
|
776
|
+
set(A, B, C, D, E, F, G, H) {
|
|
777
|
+
this.A = A | 0;
|
|
778
|
+
this.B = B | 0;
|
|
779
|
+
this.C = C | 0;
|
|
780
|
+
this.D = D | 0;
|
|
781
|
+
this.E = E | 0;
|
|
782
|
+
this.F = F | 0;
|
|
783
|
+
this.G = G | 0;
|
|
784
|
+
this.H = H | 0;
|
|
785
|
+
}
|
|
786
|
+
process(view, offset) {
|
|
787
|
+
for (let i = 0; i < 16; i++, offset += 4)
|
|
788
|
+
SHA256_W[i] = view.getUint32(offset, false);
|
|
789
|
+
for (let i = 16; i < 64; i++) {
|
|
790
|
+
const W15 = SHA256_W[i - 15];
|
|
791
|
+
const W2 = SHA256_W[i - 2];
|
|
792
|
+
const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3;
|
|
793
|
+
const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10;
|
|
794
|
+
SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0;
|
|
795
|
+
}
|
|
796
|
+
let { A, B, C, D, E, F, G, H } = this;
|
|
797
|
+
for (let i = 0; i < 64; i++) {
|
|
798
|
+
const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);
|
|
799
|
+
const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0;
|
|
800
|
+
const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);
|
|
801
|
+
const T2 = sigma0 + Maj(A, B, C) | 0;
|
|
802
|
+
H = G;
|
|
803
|
+
G = F;
|
|
804
|
+
F = E;
|
|
805
|
+
E = D + T1 | 0;
|
|
806
|
+
D = C;
|
|
807
|
+
C = B;
|
|
808
|
+
B = A;
|
|
809
|
+
A = T1 + T2 | 0;
|
|
810
|
+
}
|
|
811
|
+
A = A + this.A | 0;
|
|
812
|
+
B = B + this.B | 0;
|
|
813
|
+
C = C + this.C | 0;
|
|
814
|
+
D = D + this.D | 0;
|
|
815
|
+
E = E + this.E | 0;
|
|
816
|
+
F = F + this.F | 0;
|
|
817
|
+
G = G + this.G | 0;
|
|
818
|
+
H = H + this.H | 0;
|
|
819
|
+
this.set(A, B, C, D, E, F, G, H);
|
|
820
|
+
}
|
|
821
|
+
roundClean() {
|
|
822
|
+
clean(SHA256_W);
|
|
823
|
+
}
|
|
824
|
+
destroy() {
|
|
825
|
+
this.set(0, 0, 0, 0, 0, 0, 0, 0);
|
|
826
|
+
clean(this.buffer);
|
|
827
|
+
}
|
|
828
|
+
};
|
|
829
|
+
var sha256 = /* @__PURE__ */ createHasher(() => new SHA256());
|
|
830
|
+
|
|
831
|
+
// ../../packages/platform/src/sha256.ts
|
|
832
|
+
function createSha256Hasher() {
|
|
833
|
+
const hash = sha256.create();
|
|
834
|
+
return {
|
|
835
|
+
update(bytes) {
|
|
836
|
+
hash.update(bytes);
|
|
837
|
+
},
|
|
838
|
+
digestHex() {
|
|
839
|
+
const bytes = hash.digest();
|
|
840
|
+
let hex = "";
|
|
841
|
+
for (const byte of bytes) hex += byte.toString(16).padStart(2, "0");
|
|
842
|
+
return hex;
|
|
843
|
+
}
|
|
844
|
+
};
|
|
845
|
+
}
|
|
846
|
+
|
|
515
847
|
// ../../packages/platform/src/detector.ts
|
|
516
848
|
function isPuerTS() {
|
|
517
849
|
try {
|
|
@@ -3126,7 +3458,7 @@ var NodeConnection = class {
|
|
|
3126
3458
|
this.resolveClosed = resolve;
|
|
3127
3459
|
});
|
|
3128
3460
|
socket.on("error", (error) => this.fail(failure(
|
|
3129
|
-
error.code === "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH" ? "overflow" : this.opened ? "protocol" : "
|
|
3461
|
+
error.code === "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH" ? "overflow" : !this.opened ? "handshake" : error.code?.startsWith("WS_ERR_") ? "protocol" : "closed",
|
|
3130
3462
|
"WebSocket transport failed"
|
|
3131
3463
|
)));
|
|
3132
3464
|
socket.on("open", () => {
|
|
@@ -5626,12 +5958,21 @@ var DEFAULT_RESPONSES_STREAM_IDLE_TIMEOUT_MS = 2 * 60 * 1e3;
|
|
|
5626
5958
|
var DEFAULT_RESPONSES_FIRST_BYTE_TIMEOUT_MS = 3 * 60 * 1e3;
|
|
5627
5959
|
var REASONING_STREAM_IDLE_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
5628
5960
|
var REASONING_FIRST_BYTE_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
5629
|
-
function
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
|
|
5633
|
-
|
|
5634
|
-
|
|
5961
|
+
async function* readSSEData(lines) {
|
|
5962
|
+
let data = [];
|
|
5963
|
+
let firstLine = true;
|
|
5964
|
+
for await (const rawLine of lines) {
|
|
5965
|
+
let line = rawLine.endsWith("\r") ? rawLine.slice(0, -1) : rawLine;
|
|
5966
|
+
if (firstLine && line.startsWith("\uFEFF")) line = line.slice(1);
|
|
5967
|
+
firstLine = false;
|
|
5968
|
+
if (line === "") {
|
|
5969
|
+
if (data.length > 0) yield data.join("\n");
|
|
5970
|
+
data = [];
|
|
5971
|
+
} else if (line === "data" || line.startsWith("data:")) {
|
|
5972
|
+
const value = line === "data" ? "" : line.slice(5);
|
|
5973
|
+
data.push(value.startsWith(" ") ? value.slice(1) : value);
|
|
5974
|
+
}
|
|
5975
|
+
}
|
|
5635
5976
|
}
|
|
5636
5977
|
function singleAttemptSupport() {
|
|
5637
5978
|
let capabilities;
|
|
@@ -5687,8 +6028,11 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5687
6028
|
let budgets = {};
|
|
5688
6029
|
let totalTimer;
|
|
5689
6030
|
let internalTimeout;
|
|
5690
|
-
let localFailure =
|
|
6031
|
+
let localFailure = true;
|
|
5691
6032
|
let providerRejected = false;
|
|
6033
|
+
let providerErrorMessage;
|
|
6034
|
+
let transportLost = false;
|
|
6035
|
+
let endedWithoutTerminal = false;
|
|
5692
6036
|
const requestAbort = new AbortController();
|
|
5693
6037
|
const onUserAbort = () => requestAbort.abort();
|
|
5694
6038
|
const clearTotalTimer = () => {
|
|
@@ -5767,6 +6111,7 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5767
6111
|
};
|
|
5768
6112
|
const body = JSON.stringify(payload);
|
|
5769
6113
|
reportSubmission(options, body, { transport: "sse", reusedConnection: false, continuation: false, attempt: 1 });
|
|
6114
|
+
localFailure = false;
|
|
5770
6115
|
submitted = true;
|
|
5771
6116
|
phase = "submission_attempted";
|
|
5772
6117
|
lifecycle();
|
|
@@ -5779,20 +6124,36 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5779
6124
|
retryPolicy: "never",
|
|
5780
6125
|
...resolved.http,
|
|
5781
6126
|
label: `${model.provider}/${model.id}`
|
|
6127
|
+
}).catch((error) => {
|
|
6128
|
+
const status = error && typeof error === "object" ? error.status ?? error.statusCode : void 0;
|
|
6129
|
+
if (typeof status === "number" && status >= 400) {
|
|
6130
|
+
providerRejected = true;
|
|
6131
|
+
providerErrorMessage = `API error ${status}: ${error instanceof Error ? error.message : "request rejected"}`;
|
|
6132
|
+
}
|
|
6133
|
+
transportLost = !providerRejected && !(error instanceof ResponsesProtocolError || error instanceof SyntaxError);
|
|
6134
|
+
throw error;
|
|
5782
6135
|
});
|
|
5783
6136
|
if (!response.ok) {
|
|
5784
|
-
const errorBody = await response.text().catch(() => "");
|
|
5785
6137
|
providerRejected = true;
|
|
5786
|
-
|
|
6138
|
+
providerErrorMessage = `API error ${response.status}`;
|
|
6139
|
+
const errorBody = await response.text().catch(() => "");
|
|
6140
|
+
if (errorBody) providerErrorMessage += `: ${errorBody}`;
|
|
6141
|
+
throw new Error(providerErrorMessage);
|
|
5787
6142
|
}
|
|
5788
6143
|
if (!response.readSSELines) {
|
|
5789
|
-
throw new
|
|
6144
|
+
throw new ResponsesProtocolError("SSE streaming not supported on this platform");
|
|
6145
|
+
}
|
|
6146
|
+
async function* transportLines() {
|
|
6147
|
+
try {
|
|
6148
|
+
yield* response.readSSELines(requestAbort.signal);
|
|
6149
|
+
} catch (error) {
|
|
6150
|
+
transportLost = !(error instanceof ResponsesProtocolError || error instanceof SyntaxError);
|
|
6151
|
+
throw error;
|
|
6152
|
+
}
|
|
5790
6153
|
}
|
|
5791
|
-
for await (const
|
|
6154
|
+
for await (const data of readSSEData(transportLines())) {
|
|
5792
6155
|
receivedMessageCount += 1;
|
|
5793
6156
|
lastReceiveAt = monotonicNow();
|
|
5794
|
-
const data = parseSSEDataLine2(line);
|
|
5795
|
-
if (data === null) continue;
|
|
5796
6157
|
if (phase === "submission_attempted") {
|
|
5797
6158
|
phase = "first_application_message";
|
|
5798
6159
|
lifecycle();
|
|
@@ -5813,7 +6174,9 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5813
6174
|
if (typeof event.type === "string" && (event.type.startsWith("response.output") || event.type.startsWith("response.content") || event.type.startsWith("response.reasoning"))) {
|
|
5814
6175
|
sawModelContent = true;
|
|
5815
6176
|
}
|
|
5816
|
-
|
|
6177
|
+
const events = reducer.feed(event);
|
|
6178
|
+
if (reducer.isTerminal && reducer.message.stopReason === "error") reducer.message.retryable = false;
|
|
6179
|
+
for (const assistantEvent of events) {
|
|
5817
6180
|
stream.push(assistantEvent);
|
|
5818
6181
|
}
|
|
5819
6182
|
if (reducer.isTerminal) {
|
|
@@ -5831,6 +6194,7 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5831
6194
|
if (requestAbort.signal.aborted) {
|
|
5832
6195
|
throw new Error(internalTimeout ? `Responses request timeout (${internalTimeout})` : "Request was aborted");
|
|
5833
6196
|
}
|
|
6197
|
+
endedWithoutTerminal = true;
|
|
5834
6198
|
throw reducer.finishWithoutTerminal();
|
|
5835
6199
|
} catch (error) {
|
|
5836
6200
|
if (reducer.isTerminal) {
|
|
@@ -5844,10 +6208,11 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5844
6208
|
if (!internalTimeout && (adapterTimeoutKind === "first_byte" || adapterTimeoutKind === "stream_idle")) {
|
|
5845
6209
|
internalTimeout = adapterTimeoutKind === "first_byte" ? "first_response" : "stream_idle";
|
|
5846
6210
|
}
|
|
5847
|
-
|
|
6211
|
+
const protocolFailure = !endedWithoutTerminal && (error instanceof ResponsesProtocolError || error instanceof SyntaxError || !transportLost && error instanceof TypeError);
|
|
6212
|
+
message.errorMessage = providerErrorMessage ?? (internalTimeout && !protocolFailure ? `Responses request timeout (${internalTimeout}) after ${Math.round(monotonicNow() - startedAt)}ms` : error instanceof Error ? error.message : JSON.stringify(error));
|
|
5848
6213
|
const compat = getResponsesCompat(model);
|
|
5849
|
-
const streamLost = !internalTimeout && submitted && !localFailure && !providerRejected && message.stopReason === "error";
|
|
5850
|
-
if (internalTimeout && compat.timeoutReplay) {
|
|
6214
|
+
const streamLost = (endedWithoutTerminal || transportLost) && !protocolFailure && !internalTimeout && submitted && !localFailure && !providerRejected && message.stopReason === "error";
|
|
6215
|
+
if (internalTimeout && !protocolFailure && submitted && !providerRejected && !localFailure && !userAborted && compat.timeoutReplay) {
|
|
5851
6216
|
message.replayEligible = true;
|
|
5852
6217
|
message.replayClass = internalTimeout;
|
|
5853
6218
|
} else if (streamLost && compat.timeoutReplay) {
|
|
@@ -5873,9 +6238,112 @@ function streamResponsesSSE(model, context, options) {
|
|
|
5873
6238
|
return stream;
|
|
5874
6239
|
}
|
|
5875
6240
|
|
|
6241
|
+
// ../../packages/ai/src/providers/responses/responses-continuation.ts
|
|
6242
|
+
function jsonSha256(value) {
|
|
6243
|
+
return hashJson(value);
|
|
6244
|
+
}
|
|
6245
|
+
function hashJson(value, parts) {
|
|
6246
|
+
const hash = createSha256Hasher();
|
|
6247
|
+
const bytes = new Uint8Array(8192);
|
|
6248
|
+
let used = 0;
|
|
6249
|
+
const byte = (n) => {
|
|
6250
|
+
bytes[used++] = n;
|
|
6251
|
+
if (used === bytes.length) {
|
|
6252
|
+
hash.update(bytes);
|
|
6253
|
+
used = 0;
|
|
6254
|
+
}
|
|
6255
|
+
};
|
|
6256
|
+
const emit = (text) => {
|
|
6257
|
+
for (let i = 0; i < text.length; i++) {
|
|
6258
|
+
const cp = text.codePointAt(i);
|
|
6259
|
+
if (cp < 128) byte(cp);
|
|
6260
|
+
else if (cp < 2048) {
|
|
6261
|
+
byte(192 | cp >> 6);
|
|
6262
|
+
byte(128 | cp & 63);
|
|
6263
|
+
} else if (cp < 65536) {
|
|
6264
|
+
byte(224 | cp >> 12);
|
|
6265
|
+
byte(128 | cp >> 6 & 63);
|
|
6266
|
+
byte(128 | cp & 63);
|
|
6267
|
+
} else {
|
|
6268
|
+
byte(240 | cp >> 18);
|
|
6269
|
+
byte(128 | cp >> 12 & 63);
|
|
6270
|
+
byte(128 | cp >> 6 & 63);
|
|
6271
|
+
byte(128 | cp & 63);
|
|
6272
|
+
i++;
|
|
6273
|
+
}
|
|
6274
|
+
}
|
|
6275
|
+
};
|
|
6276
|
+
const string = (text) => {
|
|
6277
|
+
emit('"');
|
|
6278
|
+
for (let start = 0; start < text.length; ) {
|
|
6279
|
+
let end = Math.min(start + 2048, text.length);
|
|
6280
|
+
if (end < text.length && text.charCodeAt(end - 1) >= 55296 && text.charCodeAt(end - 1) <= 56319) end--;
|
|
6281
|
+
const escaped = JSON.stringify(text.slice(start, end));
|
|
6282
|
+
emit(escaped.slice(1, -1));
|
|
6283
|
+
start = end;
|
|
6284
|
+
}
|
|
6285
|
+
emit('"');
|
|
6286
|
+
};
|
|
6287
|
+
const ancestors = /* @__PURE__ */ new Set();
|
|
6288
|
+
const omitted = (v) => v === void 0 || typeof v === "function" || typeof v === "symbol";
|
|
6289
|
+
const visit = (v) => {
|
|
6290
|
+
if (typeof v === "string") {
|
|
6291
|
+
string(v);
|
|
6292
|
+
return;
|
|
6293
|
+
}
|
|
6294
|
+
if (v === null || typeof v !== "object") {
|
|
6295
|
+
const encoded = JSON.stringify(v);
|
|
6296
|
+
if (encoded === void 0) throw new TypeError("Not a JSON value");
|
|
6297
|
+
emit(encoded);
|
|
6298
|
+
return;
|
|
6299
|
+
}
|
|
6300
|
+
const prototype = Object.getPrototypeOf(v);
|
|
6301
|
+
if (!Array.isArray(v) && prototype !== Object.prototype && prototype !== null || typeof v.toJSON === "function") throw new TypeError("Not a JSON snapshot");
|
|
6302
|
+
if (ancestors.has(v)) throw new TypeError("Circular JSON snapshot");
|
|
6303
|
+
ancestors.add(v);
|
|
6304
|
+
if (Array.isArray(v)) {
|
|
6305
|
+
emit("[");
|
|
6306
|
+
for (let i = 0; i < v.length; i++) {
|
|
6307
|
+
if (Object.getOwnPropertyDescriptor(v, i)?.get) throw new TypeError("Not a JSON snapshot");
|
|
6308
|
+
if (i) emit(",");
|
|
6309
|
+
visit(omitted(v[i]) ? null : v[i]);
|
|
6310
|
+
}
|
|
6311
|
+
emit("]");
|
|
6312
|
+
} else {
|
|
6313
|
+
emit("{");
|
|
6314
|
+
let first = true;
|
|
6315
|
+
for (const key of Object.keys(v)) {
|
|
6316
|
+
if (Object.getOwnPropertyDescriptor(v, key)?.get) throw new TypeError("Not a JSON snapshot");
|
|
6317
|
+
const entry = v[key];
|
|
6318
|
+
if (omitted(entry)) continue;
|
|
6319
|
+
if (!first) emit(",");
|
|
6320
|
+
first = false;
|
|
6321
|
+
string(key);
|
|
6322
|
+
emit(":");
|
|
6323
|
+
visit(entry);
|
|
6324
|
+
}
|
|
6325
|
+
emit("}");
|
|
6326
|
+
}
|
|
6327
|
+
ancestors.delete(v);
|
|
6328
|
+
};
|
|
6329
|
+
if (parts) {
|
|
6330
|
+
emit("[");
|
|
6331
|
+
for (let i = 0; i < parts.count + parts.output.length; i++) {
|
|
6332
|
+
if (i) emit(",");
|
|
6333
|
+
const item = i < parts.count ? parts.input[i] : parts.output[i - parts.count];
|
|
6334
|
+
visit(omitted(item) ? null : item);
|
|
6335
|
+
}
|
|
6336
|
+
emit("]");
|
|
6337
|
+
} else visit(value);
|
|
6338
|
+
if (used) hash.update(bytes.subarray(0, used));
|
|
6339
|
+
return hash.digestHex();
|
|
6340
|
+
}
|
|
6341
|
+
function inputSha256(input, count = input.length, output = []) {
|
|
6342
|
+
return hashJson(void 0, { input, count, output });
|
|
6343
|
+
}
|
|
6344
|
+
|
|
5876
6345
|
// ../../packages/ai/src/providers/responses/responses-ws.ts
|
|
5877
6346
|
var owners = /* @__PURE__ */ new WeakMap();
|
|
5878
|
-
var MAX_ANCHOR_BYTES = 1024 * 1024;
|
|
5879
6347
|
var DEFAULT_CONNECT_TIMEOUT_MS = 3e4;
|
|
5880
6348
|
var DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = 2 * 60 * 1e3;
|
|
5881
6349
|
var DEFAULT_STREAM_IDLE_TIMEOUT_MS = 2 * 60 * 1e3;
|
|
@@ -5991,9 +6459,22 @@ function streamResponsesWS(model, context, options) {
|
|
|
5991
6459
|
void (async () => {
|
|
5992
6460
|
let sent = false;
|
|
5993
6461
|
let finished = false;
|
|
6462
|
+
let candidateAnchor;
|
|
5994
6463
|
let terminalEvents = [];
|
|
5995
6464
|
let fallback = false;
|
|
5996
6465
|
let timedOut;
|
|
6466
|
+
let providerRejected = false;
|
|
6467
|
+
let localFailure = true;
|
|
6468
|
+
let transportLost = false;
|
|
6469
|
+
let endedWithoutTerminal = false;
|
|
6470
|
+
const transportIO = async (operation) => {
|
|
6471
|
+
try {
|
|
6472
|
+
return await operation();
|
|
6473
|
+
} catch (error) {
|
|
6474
|
+
transportLost = !(error instanceof ResponsesProtocolError || error instanceof SyntaxError) && (!(error instanceof WebSocketTransportError) || error.kind === "closed" || error.kind === "timeout");
|
|
6475
|
+
throw error;
|
|
6476
|
+
}
|
|
6477
|
+
};
|
|
5997
6478
|
let retryDecision = "none";
|
|
5998
6479
|
let requestTimer;
|
|
5999
6480
|
let totalTimer;
|
|
@@ -6160,12 +6641,23 @@ function streamResponsesWS(model, context, options) {
|
|
|
6160
6641
|
}
|
|
6161
6642
|
const key = options?.apiKey || getEnvApiKey(model.provider, model.apiKeyEnv);
|
|
6162
6643
|
if (!key) throw new Error(`No API key for provider: ${model.provider}`);
|
|
6163
|
-
const
|
|
6644
|
+
const encoded = buildResponsesCreateEvent(model, context, options);
|
|
6645
|
+
const { input, ...encodedSettings } = encoded;
|
|
6646
|
+
const settings = JSON.parse(JSON.stringify(encodedSettings));
|
|
6647
|
+
const payload = { ...settings, input };
|
|
6164
6648
|
const headers = { Authorization: `Bearer ${key}`, ...model.headers, ...options?.headers };
|
|
6165
|
-
const
|
|
6166
|
-
|
|
6649
|
+
const endpoint = websocketUrl(model.baseUrl);
|
|
6650
|
+
let continuationReason = "no_anchor";
|
|
6651
|
+
const identityValue = [1, model.provider, model.api, model.id, endpoint, headers, settings, compat];
|
|
6652
|
+
let identity;
|
|
6653
|
+
try {
|
|
6654
|
+
identity = jsonSha256(identityValue);
|
|
6655
|
+
} catch {
|
|
6656
|
+
}
|
|
6657
|
+
if (!identity) state.anchor = void 0;
|
|
6167
6658
|
clearConnectionIdleTimer(state);
|
|
6168
|
-
if (state.identity !== identity || state.connection?.state() !== "open") {
|
|
6659
|
+
if (!identity || state.identity !== identity || state.connection?.state() !== "open") {
|
|
6660
|
+
if (state.anchor) continuationReason = state.identity !== identity ? "identity_changed" : "connection_changed";
|
|
6169
6661
|
const stale = state.connection;
|
|
6170
6662
|
state.connection = void 0;
|
|
6171
6663
|
state.anchor = void 0;
|
|
@@ -6176,18 +6668,19 @@ function streamResponsesWS(model, context, options) {
|
|
|
6176
6668
|
reusedConnection = !!state.connection;
|
|
6177
6669
|
if (state.abort.signal.aborted) throw new Error("Request aborted");
|
|
6178
6670
|
lifecycle("request_start");
|
|
6671
|
+
localFailure = false;
|
|
6179
6672
|
const client = getWebSocketClient();
|
|
6180
6673
|
if (!client) {
|
|
6181
6674
|
if (options?.transport === "auto") {
|
|
6182
6675
|
await runSSEFallback();
|
|
6183
6676
|
return;
|
|
6184
6677
|
}
|
|
6185
|
-
throw new
|
|
6678
|
+
throw new ResponsesProtocolError("WebSocket transport is not available on this host.");
|
|
6186
6679
|
}
|
|
6187
6680
|
let connection = state.connection;
|
|
6188
6681
|
if (!connection) {
|
|
6189
6682
|
try {
|
|
6190
|
-
connection = await client.connect(
|
|
6683
|
+
connection = await client.connect(endpoint, {
|
|
6191
6684
|
headers,
|
|
6192
6685
|
signal: requestAbort.signal,
|
|
6193
6686
|
connectTimeoutMs: budgets.connectTimeoutMs
|
|
@@ -6196,6 +6689,7 @@ function streamResponsesWS(model, context, options) {
|
|
|
6196
6689
|
if (error instanceof WebSocketTransportError && error.kind === "timeout") timedOut = "connect";
|
|
6197
6690
|
if (error instanceof WebSocketTransportError && error.kind === "handshake" && !options?.signal?.aborted && !state.abort.signal.aborted) {
|
|
6198
6691
|
const status = error.status ?? 0;
|
|
6692
|
+
providerRejected = status > 0;
|
|
6199
6693
|
const endpointHasNoWebsockets = options?.transport === "auto" && [404, 405, 426, 501].includes(status);
|
|
6200
6694
|
const wsEdgeRefused = status === 0 || status === 429 || status >= 500 && status <= 599;
|
|
6201
6695
|
if (endpointHasNoWebsockets || wsEdgeRefused) {
|
|
@@ -6217,28 +6711,57 @@ function streamResponsesWS(model, context, options) {
|
|
|
6217
6711
|
const activeConnection = connection;
|
|
6218
6712
|
const fullInput = input;
|
|
6219
6713
|
const anchor = state.anchor;
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
|
|
6714
|
+
let prefixHashMs = 0;
|
|
6715
|
+
if (options?.onPayload) continuationReason = "payload_hook";
|
|
6716
|
+
else if (!compat.responsesContinuation) continuationReason = "disabled";
|
|
6717
|
+
else if (!identity) continuationReason = "hash_unavailable";
|
|
6718
|
+
else if (anchor) continuationReason = fullInput.length <= anchor.confirmedItemCount ? "history_shortened" : "history_changed";
|
|
6719
|
+
if (!options?.onPayload && compat.responsesContinuation && identity && anchor && anchor.connectionGeneration === connectionGeneration && anchor.requestIdentitySha256 === identity && fullInput.length > anchor.confirmedItemCount) {
|
|
6720
|
+
const hashStarted = monotonicNow();
|
|
6721
|
+
try {
|
|
6722
|
+
if (inputSha256(fullInput, anchor.confirmedItemCount) === anchor.prefixSha256) {
|
|
6723
|
+
continuationReason = "verified_prefix";
|
|
6724
|
+
payload.previous_response_id = anchor.responseId;
|
|
6725
|
+
payload.input = fullInput.slice(anchor.confirmedItemCount);
|
|
6726
|
+
}
|
|
6727
|
+
} catch {
|
|
6728
|
+
continuationReason = "hash_unavailable";
|
|
6729
|
+
}
|
|
6730
|
+
prefixHashMs = monotonicNow() - hashStarted;
|
|
6223
6731
|
}
|
|
6224
6732
|
state.anchor = void 0;
|
|
6225
6733
|
for (let attempt = 0; attempt < 2; attempt++) {
|
|
6226
6734
|
let rebuild = false;
|
|
6227
|
-
|
|
6735
|
+
let body;
|
|
6736
|
+
try {
|
|
6737
|
+
options?.onPayload?.(payload);
|
|
6738
|
+
body = JSON.stringify(payload);
|
|
6739
|
+
} catch (error) {
|
|
6740
|
+
localFailure = true;
|
|
6741
|
+
throw error;
|
|
6742
|
+
}
|
|
6228
6743
|
if (state.abort.signal.aborted || requestAbort.signal.aborted) throw new Error("Request aborted");
|
|
6229
6744
|
sent = true;
|
|
6230
|
-
|
|
6231
|
-
|
|
6745
|
+
reportSubmission(options, body, {
|
|
6746
|
+
transport: "websocket",
|
|
6747
|
+
reusedConnection: reusedConnection || attempt > 0,
|
|
6748
|
+
continuation: !!payload.previous_response_id,
|
|
6749
|
+
attempt: attempt + 1,
|
|
6750
|
+
continuationReason,
|
|
6751
|
+
fullInputItems: fullInput.length,
|
|
6752
|
+
sentInputItems: Array.isArray(payload.input) ? payload.input.length : void 0,
|
|
6753
|
+
prefixHashMs
|
|
6754
|
+
});
|
|
6232
6755
|
lifecycle("submission_attempted", { submissionAttempted: true });
|
|
6233
6756
|
armPhaseTimer("first_response", budgets.firstResponseTimeoutMs);
|
|
6234
|
-
await activeConnection.send(body, { signal: requestAbort.signal });
|
|
6757
|
+
await transportIO(() => activeConnection.send(body, { signal: requestAbort.signal }));
|
|
6235
6758
|
let started = false;
|
|
6236
6759
|
let responseId;
|
|
6237
6760
|
const receiveIterator = activeConnection.receive(requestAbort.signal)[Symbol.asyncIterator]();
|
|
6238
6761
|
let receiveDone = false;
|
|
6239
6762
|
try {
|
|
6240
6763
|
while (true) {
|
|
6241
|
-
const step = await receiveIterator.next();
|
|
6764
|
+
const step = await transportIO(() => receiveIterator.next());
|
|
6242
6765
|
if (step.done) {
|
|
6243
6766
|
receiveDone = true;
|
|
6244
6767
|
break;
|
|
@@ -6261,6 +6784,7 @@ function streamResponsesWS(model, context, options) {
|
|
|
6261
6784
|
if (!started && attempt === 0 && payload.previous_response_id && event.type === "error" && event.status === 400 && isRecord2(event.error) && event.error.code === "previous_response_not_found" && event.error.param === "previous_response_id") {
|
|
6262
6785
|
delete payload.previous_response_id;
|
|
6263
6786
|
payload.input = fullInput;
|
|
6787
|
+
continuationReason = "previous_response_not_found";
|
|
6264
6788
|
rebuild = true;
|
|
6265
6789
|
break;
|
|
6266
6790
|
}
|
|
@@ -6278,10 +6802,19 @@ function streamResponsesWS(model, context, options) {
|
|
|
6278
6802
|
if (reducer.message.stopReason === "error") reducer.message.retryable = false;
|
|
6279
6803
|
const response = reducer.terminalResponse;
|
|
6280
6804
|
state.lastResponseId = response?.id;
|
|
6281
|
-
if (!options?.onPayload && response?.status === "completed" && reducer.message.stopReason !== "error") {
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
|
|
6805
|
+
if (!options?.onPayload && compat.responsesContinuation && identity && response?.status === "completed" && reducer.message.stopReason !== "error") {
|
|
6806
|
+
try {
|
|
6807
|
+
const output = buildResponsesOutput(reducer.message);
|
|
6808
|
+
candidateAnchor = {
|
|
6809
|
+
version: 1,
|
|
6810
|
+
responseId: response.id,
|
|
6811
|
+
confirmedItemCount: fullInput.length + output.length,
|
|
6812
|
+
prefixSha256: inputSha256(fullInput, fullInput.length, output),
|
|
6813
|
+
requestIdentitySha256: identity,
|
|
6814
|
+
connectionGeneration
|
|
6815
|
+
};
|
|
6816
|
+
} catch {
|
|
6817
|
+
}
|
|
6285
6818
|
}
|
|
6286
6819
|
finished = true;
|
|
6287
6820
|
clearRequestTimers();
|
|
@@ -6302,7 +6835,10 @@ function streamResponsesWS(model, context, options) {
|
|
|
6302
6835
|
retryDecision = "rebuild_previous_response";
|
|
6303
6836
|
continue;
|
|
6304
6837
|
}
|
|
6305
|
-
if (!reducer.isTerminal)
|
|
6838
|
+
if (!reducer.isTerminal) {
|
|
6839
|
+
endedWithoutTerminal = true;
|
|
6840
|
+
throw reducer.finishWithoutTerminal();
|
|
6841
|
+
}
|
|
6306
6842
|
break;
|
|
6307
6843
|
}
|
|
6308
6844
|
} catch (error) {
|
|
@@ -6311,16 +6847,20 @@ function streamResponsesWS(model, context, options) {
|
|
|
6311
6847
|
const userAborted = options?.signal?.aborted === true;
|
|
6312
6848
|
const ownerDisposed = !userAborted && !timedOut && state.abort.signal.aborted;
|
|
6313
6849
|
message.stopReason = userAborted || ownerDisposed ? "aborted" : "error";
|
|
6314
|
-
const
|
|
6850
|
+
const protocolFailure = !endedWithoutTerminal && (error instanceof ResponsesProtocolError || error instanceof SyntaxError || !transportLost && error instanceof TypeError || error instanceof WebSocketTransportError && (error.kind === "protocol" || error.kind === "overflow"));
|
|
6851
|
+
const cause = providerRejected && error instanceof WebSocketTransportError ? `${error.message} (HTTP status ${error.status})` : timedOut && !protocolFailure ? `Responses request timeout (${timedOut}) after ${ageMs()}ms` : error instanceof Error ? error.message : String(error);
|
|
6315
6852
|
message.errorMessage = cause;
|
|
6316
|
-
const streamLost = !timedOut && message.stopReason === "error";
|
|
6317
|
-
if (timedOut && compat.timeoutReplay) {
|
|
6853
|
+
const streamLost = (endedWithoutTerminal || transportLost) && !protocolFailure && sent && !timedOut && !providerRejected && message.stopReason === "error";
|
|
6854
|
+
if (timedOut && timedOut !== "connect" && !protocolFailure && !localFailure && sent && !providerRejected && !userAborted && !ownerDisposed && compat.timeoutReplay) {
|
|
6318
6855
|
message.replayEligible = true;
|
|
6319
6856
|
message.replayClass = timedOut;
|
|
6320
6857
|
} else if (streamLost && compat.timeoutReplay) {
|
|
6321
6858
|
message.replayEligible = true;
|
|
6322
6859
|
message.replayClass = receivedMessageCount === 0 ? "stream_lost" : "stream_lost_partial";
|
|
6323
6860
|
}
|
|
6861
|
+
if (localFailure || providerRejected || protocolFailure) {
|
|
6862
|
+
message.retryable = false;
|
|
6863
|
+
}
|
|
6324
6864
|
if (sent) {
|
|
6325
6865
|
if (streamLost && receivedMessageCount === 0) {
|
|
6326
6866
|
retryDecision = message.replayEligible ? "replay_exempt_stream_lost" : "stream_lost_no_evidence";
|
|
@@ -6339,9 +6879,10 @@ function streamResponsesWS(model, context, options) {
|
|
|
6339
6879
|
options?.signal?.removeEventListener("abort", abort);
|
|
6340
6880
|
state.busy = false;
|
|
6341
6881
|
const cancelSource = cleanupCancelSource ?? (options?.signal?.aborted ? "user" : timedOut ? "internal_timeout" : state.abort.signal.aborted ? "owner_disposal" : "none");
|
|
6342
|
-
const retain = finished && !fallback && !receiveCleanupFailed && !!options?.transportOwner && reducer.message.stopReason !== "error" && !timedOut && state.connection
|
|
6882
|
+
const retain = finished && !fallback && !receiveCleanupFailed && !!options?.transportOwner && reducer.message.stopReason !== "error" && !timedOut && state.connection?.state() === "open" && !state.abort.signal.aborted && owners.get(owner) === state && state.requestGeneration === requestGeneration && state.connectionGeneration === connectionGeneration;
|
|
6343
6883
|
if (!retain) disposeState(owner, state);
|
|
6344
6884
|
else if (state.connection) {
|
|
6885
|
+
state.anchor = candidateAnchor;
|
|
6345
6886
|
armConnectionIdleRecycle(state, state.connection, connectionGeneration, budgets.connectionIdleTimeoutMs);
|
|
6346
6887
|
}
|
|
6347
6888
|
const cleanupOutcome = receiveCleanupFailed ? "cleanup_failed" : retain ? "connection_reused" : finished ? "connection_closed" : "request_abandoned";
|
|
@@ -6743,7 +7284,7 @@ function FNV1A64(byte) {
|
|
|
6743
7284
|
Accumulator = Accumulator ^ Bytes[byte];
|
|
6744
7285
|
Accumulator = Accumulator * Prime % Size;
|
|
6745
7286
|
}
|
|
6746
|
-
function
|
|
7287
|
+
function Hash2(value) {
|
|
6747
7288
|
Accumulator = BigInt("14695981039346656037");
|
|
6748
7289
|
Visit(value);
|
|
6749
7290
|
return Accumulator;
|
|
@@ -6784,7 +7325,7 @@ function FromArray(schema, references, value) {
|
|
|
6784
7325
|
if (schema.uniqueItems === true && !(function() {
|
|
6785
7326
|
const set = /* @__PURE__ */ new Set();
|
|
6786
7327
|
for (const element of value) {
|
|
6787
|
-
const hashed =
|
|
7328
|
+
const hashed = Hash2(element);
|
|
6788
7329
|
if (set.has(hashed)) {
|
|
6789
7330
|
return false;
|
|
6790
7331
|
} else {
|
|
@@ -7304,7 +7845,7 @@ function* FromArray2(schema, references, path, value) {
|
|
|
7304
7845
|
if (schema.uniqueItems === true && !(function() {
|
|
7305
7846
|
const set = /* @__PURE__ */ new Set();
|
|
7306
7847
|
for (const element of value) {
|
|
7307
|
-
const hashed =
|
|
7848
|
+
const hashed = Hash2(element);
|
|
7308
7849
|
if (set.has(hashed)) {
|
|
7309
7850
|
return false;
|
|
7310
7851
|
} else {
|
|
@@ -9783,7 +10324,7 @@ __export(value_exports, {
|
|
|
9783
10324
|
Encode: () => Encode,
|
|
9784
10325
|
Equal: () => Equal,
|
|
9785
10326
|
Errors: () => Errors,
|
|
9786
|
-
Hash: () =>
|
|
10327
|
+
Hash: () => Hash2,
|
|
9787
10328
|
Mutate: () => Mutate,
|
|
9788
10329
|
Parse: () => Parse,
|
|
9789
10330
|
Patch: () => Patch,
|
|
@@ -9889,7 +10430,7 @@ export {
|
|
|
9889
10430
|
modelSupportsToolPurpose,
|
|
9890
10431
|
sortToolModelCandidatesByCapability,
|
|
9891
10432
|
Deref,
|
|
9892
|
-
Hash,
|
|
10433
|
+
Hash2 as Hash,
|
|
9893
10434
|
Errors,
|
|
9894
10435
|
TransformDecodeCheckError,
|
|
9895
10436
|
TransformDecode,
|