@kangentic/protocol 0.1.1 → 0.3.0
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/LICENSE +659 -4
- package/dist/capabilities/board-tools.d.ts +22 -0
- package/dist/capabilities/verbs.d.ts +1 -1
- package/dist/crypto/slot.d.ts +1 -0
- package/dist/events/event.d.ts +77 -16
- package/dist/events/payloads.d.ts +256 -0
- package/dist/index.cjs +1364 -52
- package/dist/index.d.ts +7 -2
- package/dist/index.mjs +1328 -52
- package/dist/version.d.ts +1 -1
- package/dist/wire/framing.d.ts +4 -0
- package/dist/wire/json-value.d.ts +9 -0
- package/dist/wire/payloads.d.ts +164 -0
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -20,13 +20,17 @@ var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: tr
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
+
BOARD_TOOL_READ_NAMES: () => BOARD_TOOL_READ_NAMES,
|
|
24
|
+
BOARD_TOOL_WRITE_NAMES: () => BOARD_TOOL_WRITE_NAMES,
|
|
23
25
|
CAPABILITY_VERBS: () => CAPABILITY_VERBS,
|
|
26
|
+
COMPRESSION_THRESHOLD: () => COMPRESSION_THRESHOLD,
|
|
24
27
|
CipherState: () => CipherState,
|
|
25
28
|
ED25519_KEY_LENGTH: () => ED25519_KEY_LENGTH,
|
|
26
29
|
FrameTag: () => FrameTag,
|
|
27
30
|
HandshakeState: () => HandshakeState,
|
|
28
31
|
IKPSK0_PATTERN: () => IKPSK0_PATTERN,
|
|
29
32
|
KK_PATTERN: () => KK_PATTERN,
|
|
33
|
+
MAX_DECODED_LENGTH: () => MAX_DECODED_LENGTH,
|
|
30
34
|
MAX_FRAME_LENGTH: () => MAX_FRAME_LENGTH,
|
|
31
35
|
PAIRING_URI_SCHEME: () => PAIRING_URI_SCHEME,
|
|
32
36
|
PROTOCOL_VERSION: () => PROTOCOL_VERSION,
|
|
@@ -43,6 +47,7 @@ __export(index_exports, {
|
|
|
43
47
|
decodeMessage: () => decodeMessage,
|
|
44
48
|
decodePairingQrPayload: () => decodePairingQrPayload,
|
|
45
49
|
deriveSecretstreamPair: () => deriveSecretstreamPair,
|
|
50
|
+
deriveSessionSlotId: () => deriveSessionSlotId,
|
|
46
51
|
deriveShortAuthenticationString: () => deriveShortAuthenticationString,
|
|
47
52
|
encodeMessage: () => encodeMessage,
|
|
48
53
|
encodePairingQrPayload: () => encodePairingQrPayload,
|
|
@@ -52,8 +57,30 @@ __export(index_exports, {
|
|
|
52
57
|
generateEd25519KeyPair: () => generateEd25519KeyPair,
|
|
53
58
|
generateX25519KeyPair: () => generateX25519KeyPair,
|
|
54
59
|
hexToBytes: () => hexToBytes,
|
|
60
|
+
isActivityReasonWire: () => isActivityReasonWire,
|
|
61
|
+
isActivityStateWire: () => isActivityStateWire,
|
|
62
|
+
isBoardToolReadName: () => isBoardToolReadName,
|
|
63
|
+
isBoardToolWriteName: () => isBoardToolWriteName,
|
|
64
|
+
isBridgeEvent: () => isBridgeEvent,
|
|
55
65
|
isCapabilityVerb: () => isCapabilityVerb,
|
|
66
|
+
isJsonValue: () => isJsonValue,
|
|
67
|
+
isRecord: () => isRecord,
|
|
56
68
|
isRosterEntryExpired: () => isRosterEntryExpired,
|
|
69
|
+
parseActivityEventPayload: () => parseActivityEventPayload,
|
|
70
|
+
parseBacklogItemWire: () => parseBacklogItemWire,
|
|
71
|
+
parseBoardColumnWire: () => parseBoardColumnWire,
|
|
72
|
+
parseBoardTaskWire: () => parseBoardTaskWire,
|
|
73
|
+
parseCapabilityRequestPayload: () => parseCapabilityRequestPayload,
|
|
74
|
+
parseDiffFileContentWire: () => parseDiffFileContentWire,
|
|
75
|
+
parseDiffFileListWire: () => parseDiffFileListWire,
|
|
76
|
+
parseReadBoardResponsePayload: () => parseReadBoardResponsePayload,
|
|
77
|
+
parseReadDiffResponsePayload: () => parseReadDiffResponsePayload,
|
|
78
|
+
parseReadStreamResponsePayload: () => parseReadStreamResponsePayload,
|
|
79
|
+
parseSessionEventWire: () => parseSessionEventWire,
|
|
80
|
+
parseSessionUsageWire: () => parseSessionUsageWire,
|
|
81
|
+
parseTranscriptEntriesWire: () => parseTranscriptEntriesWire,
|
|
82
|
+
parseTranscriptEventPayload: () => parseTranscriptEventPayload,
|
|
83
|
+
parseTranscriptWindowResponsePayload: () => parseTranscriptWindowResponsePayload,
|
|
57
84
|
randomBytes: () => randomBytes4,
|
|
58
85
|
rosterDeviceCapabilitySet: () => rosterDeviceCapabilitySet,
|
|
59
86
|
signRosterEntry: () => signRosterEntry,
|
|
@@ -65,7 +92,7 @@ __export(index_exports, {
|
|
|
65
92
|
module.exports = __toCommonJS(index_exports);
|
|
66
93
|
|
|
67
94
|
// src/version.ts
|
|
68
|
-
var PROTOCOL_VERSION = "
|
|
95
|
+
var PROTOCOL_VERSION = "2";
|
|
69
96
|
function encodeProtocolVersion(version = PROTOCOL_VERSION) {
|
|
70
97
|
return new TextEncoder().encode(`kangentic-bridge-v${version}`);
|
|
71
98
|
}
|
|
@@ -695,12 +722,12 @@ function asciiToBytes(ascii) {
|
|
|
695
722
|
});
|
|
696
723
|
}
|
|
697
724
|
var isPosBig = (n) => typeof n === "bigint" && _0n <= n;
|
|
698
|
-
function inRange(n, min,
|
|
699
|
-
return isPosBig(n) && isPosBig(min) && isPosBig(
|
|
725
|
+
function inRange(n, min, max2) {
|
|
726
|
+
return isPosBig(n) && isPosBig(min) && isPosBig(max2) && min <= n && n < max2;
|
|
700
727
|
}
|
|
701
|
-
function aInRange(title, n, min,
|
|
702
|
-
if (!inRange(n, min,
|
|
703
|
-
throw new RangeError("expected valid " + title + ": " + min + " <= n < " +
|
|
728
|
+
function aInRange(title, n, min, max2) {
|
|
729
|
+
if (!inRange(n, min, max2))
|
|
730
|
+
throw new RangeError("expected valid " + title + ": " + min + " <= n < " + max2 + ", got " + n);
|
|
704
731
|
}
|
|
705
732
|
function bitLen(n) {
|
|
706
733
|
if (n < _0n)
|
|
@@ -977,10 +1004,10 @@ function nLength(n, nBitLength) {
|
|
|
977
1004
|
throw new Error("invalid n length: expected positive n, got " + n);
|
|
978
1005
|
if (nBitLength !== void 0 && nBitLength < 1)
|
|
979
1006
|
throw new Error("invalid n length: expected positive bit length, got " + nBitLength);
|
|
980
|
-
const
|
|
981
|
-
if (nBitLength !== void 0 && nBitLength <
|
|
982
|
-
throw new Error(`invalid n length: expected bit length (${
|
|
983
|
-
const _nBitLength = nBitLength !== void 0 ? nBitLength :
|
|
1007
|
+
const bits2 = bitLen(n);
|
|
1008
|
+
if (nBitLength !== void 0 && nBitLength < bits2)
|
|
1009
|
+
throw new Error(`invalid n length: expected bit length (${bits2}) >= n.length (${nBitLength})`);
|
|
1010
|
+
const _nBitLength = nBitLength !== void 0 ? nBitLength : bits2;
|
|
984
1011
|
const nByteLength = Math.ceil(_nBitLength / 8);
|
|
985
1012
|
return { nBitLength: _nBitLength, nByteLength };
|
|
986
1013
|
}
|
|
@@ -1135,9 +1162,9 @@ function normalizeZ(c, points) {
|
|
|
1135
1162
|
const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z));
|
|
1136
1163
|
return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));
|
|
1137
1164
|
}
|
|
1138
|
-
function validateW(W,
|
|
1139
|
-
if (!Number.isSafeInteger(W) || W <= 0 || W >
|
|
1140
|
-
throw new Error("invalid window size, expected [1.." +
|
|
1165
|
+
function validateW(W, bits2) {
|
|
1166
|
+
if (!Number.isSafeInteger(W) || W <= 0 || W > bits2)
|
|
1167
|
+
throw new Error("invalid window size, expected [1.." + bits2 + "], got W=" + W);
|
|
1141
1168
|
}
|
|
1142
1169
|
function calcWOpts(W, scalarBits) {
|
|
1143
1170
|
validateW(W, scalarBits);
|
|
@@ -1150,16 +1177,16 @@ function calcWOpts(W, scalarBits) {
|
|
|
1150
1177
|
}
|
|
1151
1178
|
function calcOffsets(n, window, wOpts) {
|
|
1152
1179
|
const { windowSize, mask, maxNumber, shiftBy } = wOpts;
|
|
1153
|
-
let
|
|
1180
|
+
let wbits2 = Number(n & mask);
|
|
1154
1181
|
let nextN = n >> shiftBy;
|
|
1155
|
-
if (
|
|
1156
|
-
|
|
1182
|
+
if (wbits2 > windowSize) {
|
|
1183
|
+
wbits2 -= maxNumber;
|
|
1157
1184
|
nextN += _1n3;
|
|
1158
1185
|
}
|
|
1159
1186
|
const offsetStart = window * windowSize;
|
|
1160
|
-
const offset = offsetStart + Math.abs(
|
|
1161
|
-
const isZero =
|
|
1162
|
-
const isNeg =
|
|
1187
|
+
const offset = offsetStart + Math.abs(wbits2) - 1;
|
|
1188
|
+
const isZero = wbits2 === 0;
|
|
1189
|
+
const isNeg = wbits2 < 0;
|
|
1163
1190
|
const isNegF = window % 2 !== 0;
|
|
1164
1191
|
const offsetF = offsetStart;
|
|
1165
1192
|
return { nextN, offset, isZero, isNeg, isNegF, offsetF };
|
|
@@ -1179,11 +1206,11 @@ var wNAF = class {
|
|
|
1179
1206
|
Fn;
|
|
1180
1207
|
bits;
|
|
1181
1208
|
// Parametrized with a given Point class (not individual point)
|
|
1182
|
-
constructor(Point,
|
|
1209
|
+
constructor(Point, bits2) {
|
|
1183
1210
|
this.BASE = Point.BASE;
|
|
1184
1211
|
this.ZERO = Point.ZERO;
|
|
1185
1212
|
this.Fn = Point.Fn;
|
|
1186
|
-
this.bits =
|
|
1213
|
+
this.bits = bits2;
|
|
1187
1214
|
}
|
|
1188
1215
|
// non-const time multiplication ladder
|
|
1189
1216
|
_unsafeLadder(elm, n, p = this.ZERO) {
|
|
@@ -1327,8 +1354,8 @@ function createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {
|
|
|
1327
1354
|
}
|
|
1328
1355
|
const Fp2 = createField(CURVE.p, curveOpts.Fp, FpFnLE);
|
|
1329
1356
|
const Fn2 = createField(CURVE.n, curveOpts.Fn, FpFnLE);
|
|
1330
|
-
const
|
|
1331
|
-
const params = ["Gx", "Gy", "a",
|
|
1357
|
+
const _b2 = type === "weierstrass" ? "b" : "d";
|
|
1358
|
+
const params = ["Gx", "Gy", "a", _b2];
|
|
1332
1359
|
for (const p of params) {
|
|
1333
1360
|
if (!Fp2.isValid(CURVE[p]))
|
|
1334
1361
|
throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);
|
|
@@ -1429,8 +1456,8 @@ function edwards(params, extraOpts = {}) {
|
|
|
1429
1456
|
const lastByte = bytes[len - 1];
|
|
1430
1457
|
normed[len - 1] = lastByte & ~128;
|
|
1431
1458
|
const y = bytesToNumberLE(normed);
|
|
1432
|
-
const
|
|
1433
|
-
aInRange("point.y", y, _0n4,
|
|
1459
|
+
const max2 = zip215 ? MASK : Fp2.ORDER;
|
|
1460
|
+
aInRange("point.y", y, _0n4, max2);
|
|
1434
1461
|
const y2 = modP(y * y);
|
|
1435
1462
|
const u = modP(y2 - _1n4);
|
|
1436
1463
|
const v = modP(d * y2 - a);
|
|
@@ -4236,6 +4263,708 @@ function deriveShortAuthenticationString(handshakeHash) {
|
|
|
4236
4263
|
return { digits, emoji };
|
|
4237
4264
|
}
|
|
4238
4265
|
|
|
4266
|
+
// src/crypto/slot.ts
|
|
4267
|
+
var SESSION_SLOT_LABEL = "kangentic-session-slot-v1";
|
|
4268
|
+
var SESSION_SLOT_LENGTH = 16;
|
|
4269
|
+
function deriveSessionSlotId(desktopStaticPublicKey, phoneStaticPublicKey) {
|
|
4270
|
+
const material = concatBytes4(desktopStaticPublicKey, phoneStaticPublicKey);
|
|
4271
|
+
return bytesToHex(deriveLabeledKey(material, SESSION_SLOT_LABEL, SESSION_SLOT_LENGTH));
|
|
4272
|
+
}
|
|
4273
|
+
|
|
4274
|
+
// ../../node_modules/fflate/esm/index.mjs
|
|
4275
|
+
var import_module = require("module");
|
|
4276
|
+
var require2 = (0, import_module.createRequire)("/");
|
|
4277
|
+
var _a;
|
|
4278
|
+
var Worker;
|
|
4279
|
+
var isMarkedAsUntransferable;
|
|
4280
|
+
try {
|
|
4281
|
+
_a = require2("worker_threads"), Worker = _a.Worker, isMarkedAsUntransferable = _a.isMarkedAsUntransferable;
|
|
4282
|
+
} catch (e) {
|
|
4283
|
+
}
|
|
4284
|
+
var u8 = Uint8Array;
|
|
4285
|
+
var u16 = Uint16Array;
|
|
4286
|
+
var i32 = Int32Array;
|
|
4287
|
+
var fleb = new u8([
|
|
4288
|
+
0,
|
|
4289
|
+
0,
|
|
4290
|
+
0,
|
|
4291
|
+
0,
|
|
4292
|
+
0,
|
|
4293
|
+
0,
|
|
4294
|
+
0,
|
|
4295
|
+
0,
|
|
4296
|
+
1,
|
|
4297
|
+
1,
|
|
4298
|
+
1,
|
|
4299
|
+
1,
|
|
4300
|
+
2,
|
|
4301
|
+
2,
|
|
4302
|
+
2,
|
|
4303
|
+
2,
|
|
4304
|
+
3,
|
|
4305
|
+
3,
|
|
4306
|
+
3,
|
|
4307
|
+
3,
|
|
4308
|
+
4,
|
|
4309
|
+
4,
|
|
4310
|
+
4,
|
|
4311
|
+
4,
|
|
4312
|
+
5,
|
|
4313
|
+
5,
|
|
4314
|
+
5,
|
|
4315
|
+
5,
|
|
4316
|
+
0,
|
|
4317
|
+
/* unused */
|
|
4318
|
+
0,
|
|
4319
|
+
0,
|
|
4320
|
+
/* impossible */
|
|
4321
|
+
0
|
|
4322
|
+
]);
|
|
4323
|
+
var fdeb = new u8([
|
|
4324
|
+
0,
|
|
4325
|
+
0,
|
|
4326
|
+
0,
|
|
4327
|
+
0,
|
|
4328
|
+
1,
|
|
4329
|
+
1,
|
|
4330
|
+
2,
|
|
4331
|
+
2,
|
|
4332
|
+
3,
|
|
4333
|
+
3,
|
|
4334
|
+
4,
|
|
4335
|
+
4,
|
|
4336
|
+
5,
|
|
4337
|
+
5,
|
|
4338
|
+
6,
|
|
4339
|
+
6,
|
|
4340
|
+
7,
|
|
4341
|
+
7,
|
|
4342
|
+
8,
|
|
4343
|
+
8,
|
|
4344
|
+
9,
|
|
4345
|
+
9,
|
|
4346
|
+
10,
|
|
4347
|
+
10,
|
|
4348
|
+
11,
|
|
4349
|
+
11,
|
|
4350
|
+
12,
|
|
4351
|
+
12,
|
|
4352
|
+
13,
|
|
4353
|
+
13,
|
|
4354
|
+
/* unused */
|
|
4355
|
+
0,
|
|
4356
|
+
0
|
|
4357
|
+
]);
|
|
4358
|
+
var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
|
|
4359
|
+
var freb = function(eb, start) {
|
|
4360
|
+
var b = new u16(31);
|
|
4361
|
+
for (var i = 0; i < 31; ++i) {
|
|
4362
|
+
b[i] = start += 1 << eb[i - 1];
|
|
4363
|
+
}
|
|
4364
|
+
var r = new i32(b[30]);
|
|
4365
|
+
for (var i = 1; i < 30; ++i) {
|
|
4366
|
+
for (var j = b[i]; j < b[i + 1]; ++j) {
|
|
4367
|
+
r[j] = j - b[i] << 5 | i;
|
|
4368
|
+
}
|
|
4369
|
+
}
|
|
4370
|
+
return { b, r };
|
|
4371
|
+
};
|
|
4372
|
+
var _a = freb(fleb, 2);
|
|
4373
|
+
var fl = _a.b;
|
|
4374
|
+
var revfl = _a.r;
|
|
4375
|
+
fl[28] = 258, revfl[258] = 28;
|
|
4376
|
+
var _b = freb(fdeb, 0);
|
|
4377
|
+
var fd = _b.b;
|
|
4378
|
+
var revfd = _b.r;
|
|
4379
|
+
var rev = new u16(32768);
|
|
4380
|
+
for (i = 0; i < 32768; ++i) {
|
|
4381
|
+
x = (i & 43690) >> 1 | (i & 21845) << 1;
|
|
4382
|
+
x = (x & 52428) >> 2 | (x & 13107) << 2;
|
|
4383
|
+
x = (x & 61680) >> 4 | (x & 3855) << 4;
|
|
4384
|
+
rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
|
|
4385
|
+
}
|
|
4386
|
+
var x;
|
|
4387
|
+
var i;
|
|
4388
|
+
var hMap = (function(cd, mb, r) {
|
|
4389
|
+
var s = cd.length;
|
|
4390
|
+
var i = 0;
|
|
4391
|
+
var l = new u16(mb);
|
|
4392
|
+
for (; i < s; ++i) {
|
|
4393
|
+
if (cd[i])
|
|
4394
|
+
++l[cd[i] - 1];
|
|
4395
|
+
}
|
|
4396
|
+
var le = new u16(mb);
|
|
4397
|
+
for (i = 1; i < mb; ++i) {
|
|
4398
|
+
le[i] = le[i - 1] + l[i - 1] << 1;
|
|
4399
|
+
}
|
|
4400
|
+
var co;
|
|
4401
|
+
if (r) {
|
|
4402
|
+
co = new u16(1 << mb);
|
|
4403
|
+
var rvb = 15 - mb;
|
|
4404
|
+
for (i = 0; i < s; ++i) {
|
|
4405
|
+
if (cd[i]) {
|
|
4406
|
+
var sv = i << 4 | cd[i];
|
|
4407
|
+
var r_1 = mb - cd[i];
|
|
4408
|
+
var v = le[cd[i] - 1]++ << r_1;
|
|
4409
|
+
for (var m = v | (1 << r_1) - 1; v <= m; ++v) {
|
|
4410
|
+
co[rev[v] >> rvb] = sv;
|
|
4411
|
+
}
|
|
4412
|
+
}
|
|
4413
|
+
}
|
|
4414
|
+
} else {
|
|
4415
|
+
co = new u16(s);
|
|
4416
|
+
for (i = 0; i < s; ++i) {
|
|
4417
|
+
if (cd[i]) {
|
|
4418
|
+
co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i];
|
|
4419
|
+
}
|
|
4420
|
+
}
|
|
4421
|
+
}
|
|
4422
|
+
return co;
|
|
4423
|
+
});
|
|
4424
|
+
var flt = new u8(288);
|
|
4425
|
+
for (i = 0; i < 144; ++i)
|
|
4426
|
+
flt[i] = 8;
|
|
4427
|
+
var i;
|
|
4428
|
+
for (i = 144; i < 256; ++i)
|
|
4429
|
+
flt[i] = 9;
|
|
4430
|
+
var i;
|
|
4431
|
+
for (i = 256; i < 280; ++i)
|
|
4432
|
+
flt[i] = 7;
|
|
4433
|
+
var i;
|
|
4434
|
+
for (i = 280; i < 288; ++i)
|
|
4435
|
+
flt[i] = 8;
|
|
4436
|
+
var i;
|
|
4437
|
+
var fdt = new u8(32);
|
|
4438
|
+
for (i = 0; i < 32; ++i)
|
|
4439
|
+
fdt[i] = 5;
|
|
4440
|
+
var i;
|
|
4441
|
+
var flm = /* @__PURE__ */ hMap(flt, 9, 0);
|
|
4442
|
+
var flrm = /* @__PURE__ */ hMap(flt, 9, 1);
|
|
4443
|
+
var fdm = /* @__PURE__ */ hMap(fdt, 5, 0);
|
|
4444
|
+
var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
|
|
4445
|
+
var max = function(a) {
|
|
4446
|
+
var m = a[0];
|
|
4447
|
+
for (var i = 1; i < a.length; ++i) {
|
|
4448
|
+
if (a[i] > m)
|
|
4449
|
+
m = a[i];
|
|
4450
|
+
}
|
|
4451
|
+
return m;
|
|
4452
|
+
};
|
|
4453
|
+
var bits = function(d, p, m) {
|
|
4454
|
+
var o = p / 8 | 0;
|
|
4455
|
+
return (d[o] | d[o + 1] << 8) >> (p & 7) & m;
|
|
4456
|
+
};
|
|
4457
|
+
var bits16 = function(d, p) {
|
|
4458
|
+
var o = p / 8 | 0;
|
|
4459
|
+
return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
|
|
4460
|
+
};
|
|
4461
|
+
var shft = function(p) {
|
|
4462
|
+
return (p + 7) / 8 | 0;
|
|
4463
|
+
};
|
|
4464
|
+
var slc = function(v, s, e) {
|
|
4465
|
+
if (s == null || s < 0)
|
|
4466
|
+
s = 0;
|
|
4467
|
+
if (e == null || e > v.length)
|
|
4468
|
+
e = v.length;
|
|
4469
|
+
return new u8(v.subarray(s, e));
|
|
4470
|
+
};
|
|
4471
|
+
var ec = [
|
|
4472
|
+
"unexpected EOF",
|
|
4473
|
+
"invalid block type",
|
|
4474
|
+
"invalid length/literal",
|
|
4475
|
+
"invalid distance",
|
|
4476
|
+
"stream finished",
|
|
4477
|
+
"no stream handler",
|
|
4478
|
+
,
|
|
4479
|
+
// determined by compression function
|
|
4480
|
+
"no callback",
|
|
4481
|
+
"invalid UTF-8 data",
|
|
4482
|
+
"extra field too long",
|
|
4483
|
+
"date not in range 1980-2099",
|
|
4484
|
+
"filename too long",
|
|
4485
|
+
"stream finishing",
|
|
4486
|
+
"invalid zip data"
|
|
4487
|
+
// determined by unknown compression method
|
|
4488
|
+
];
|
|
4489
|
+
var err = function(ind, msg, nt) {
|
|
4490
|
+
var e = new Error(msg || ec[ind]);
|
|
4491
|
+
e.code = ind;
|
|
4492
|
+
if (Error.captureStackTrace)
|
|
4493
|
+
Error.captureStackTrace(e, err);
|
|
4494
|
+
if (!nt)
|
|
4495
|
+
throw e;
|
|
4496
|
+
return e;
|
|
4497
|
+
};
|
|
4498
|
+
var inflt = function(dat, st, buf, dict) {
|
|
4499
|
+
var sl = dat.length, dl = dict ? dict.length : 0;
|
|
4500
|
+
if (!sl || st.f && !st.l)
|
|
4501
|
+
return buf || new u8(0);
|
|
4502
|
+
var noBuf = !buf;
|
|
4503
|
+
var resize = noBuf || st.i != 2;
|
|
4504
|
+
var noSt = st.i;
|
|
4505
|
+
if (noBuf)
|
|
4506
|
+
buf = new u8(sl * 3);
|
|
4507
|
+
var cbuf = function(l2) {
|
|
4508
|
+
var bl = buf.length;
|
|
4509
|
+
if (l2 > bl) {
|
|
4510
|
+
var nbuf = new u8(Math.max(bl * 2, l2));
|
|
4511
|
+
nbuf.set(buf);
|
|
4512
|
+
buf = nbuf;
|
|
4513
|
+
}
|
|
4514
|
+
};
|
|
4515
|
+
var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
|
|
4516
|
+
var tbts = sl * 8;
|
|
4517
|
+
do {
|
|
4518
|
+
if (!lm) {
|
|
4519
|
+
final = bits(dat, pos, 1);
|
|
4520
|
+
var type = bits(dat, pos + 1, 3);
|
|
4521
|
+
pos += 3;
|
|
4522
|
+
if (!type) {
|
|
4523
|
+
var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;
|
|
4524
|
+
if (t > sl) {
|
|
4525
|
+
if (noSt)
|
|
4526
|
+
err(0);
|
|
4527
|
+
break;
|
|
4528
|
+
}
|
|
4529
|
+
if (resize)
|
|
4530
|
+
cbuf(bt + l);
|
|
4531
|
+
buf.set(dat.subarray(s, t), bt);
|
|
4532
|
+
st.b = bt += l, st.p = pos = t * 8, st.f = final;
|
|
4533
|
+
continue;
|
|
4534
|
+
} else if (type == 1)
|
|
4535
|
+
lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
|
|
4536
|
+
else if (type == 2) {
|
|
4537
|
+
var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
|
|
4538
|
+
var tl = hLit + bits(dat, pos + 5, 31) + 1;
|
|
4539
|
+
pos += 14;
|
|
4540
|
+
var ldt = new u8(tl);
|
|
4541
|
+
var clt = new u8(19);
|
|
4542
|
+
for (var i = 0; i < hcLen; ++i) {
|
|
4543
|
+
clt[clim[i]] = bits(dat, pos + i * 3, 7);
|
|
4544
|
+
}
|
|
4545
|
+
pos += hcLen * 3;
|
|
4546
|
+
var clb = max(clt), clbmsk = (1 << clb) - 1;
|
|
4547
|
+
var clm = hMap(clt, clb, 1);
|
|
4548
|
+
for (var i = 0; i < tl; ) {
|
|
4549
|
+
var r = clm[bits(dat, pos, clbmsk)];
|
|
4550
|
+
pos += r & 15;
|
|
4551
|
+
var s = r >> 4;
|
|
4552
|
+
if (s < 16) {
|
|
4553
|
+
ldt[i++] = s;
|
|
4554
|
+
} else {
|
|
4555
|
+
var c = 0, n = 0;
|
|
4556
|
+
if (s == 16)
|
|
4557
|
+
n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
|
|
4558
|
+
else if (s == 17)
|
|
4559
|
+
n = 3 + bits(dat, pos, 7), pos += 3;
|
|
4560
|
+
else if (s == 18)
|
|
4561
|
+
n = 11 + bits(dat, pos, 127), pos += 7;
|
|
4562
|
+
while (n--)
|
|
4563
|
+
ldt[i++] = c;
|
|
4564
|
+
}
|
|
4565
|
+
}
|
|
4566
|
+
var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
|
|
4567
|
+
lbt = max(lt);
|
|
4568
|
+
dbt = max(dt);
|
|
4569
|
+
lm = hMap(lt, lbt, 1);
|
|
4570
|
+
dm = hMap(dt, dbt, 1);
|
|
4571
|
+
} else
|
|
4572
|
+
err(1);
|
|
4573
|
+
if (pos > tbts) {
|
|
4574
|
+
if (noSt)
|
|
4575
|
+
err(0);
|
|
4576
|
+
break;
|
|
4577
|
+
}
|
|
4578
|
+
}
|
|
4579
|
+
if (resize)
|
|
4580
|
+
cbuf(bt + 131072);
|
|
4581
|
+
var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
|
|
4582
|
+
var lpos = pos;
|
|
4583
|
+
for (; ; lpos = pos) {
|
|
4584
|
+
var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
|
|
4585
|
+
pos += c & 15;
|
|
4586
|
+
if (pos > tbts) {
|
|
4587
|
+
if (noSt)
|
|
4588
|
+
err(0);
|
|
4589
|
+
break;
|
|
4590
|
+
}
|
|
4591
|
+
if (!c)
|
|
4592
|
+
err(2);
|
|
4593
|
+
if (sym < 256)
|
|
4594
|
+
buf[bt++] = sym;
|
|
4595
|
+
else if (sym == 256) {
|
|
4596
|
+
lpos = pos, lm = null;
|
|
4597
|
+
break;
|
|
4598
|
+
} else {
|
|
4599
|
+
var add2 = sym - 254;
|
|
4600
|
+
if (sym > 264) {
|
|
4601
|
+
var i = sym - 257, b = fleb[i];
|
|
4602
|
+
add2 = bits(dat, pos, (1 << b) - 1) + fl[i];
|
|
4603
|
+
pos += b;
|
|
4604
|
+
}
|
|
4605
|
+
var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
|
|
4606
|
+
if (!d)
|
|
4607
|
+
err(3);
|
|
4608
|
+
pos += d & 15;
|
|
4609
|
+
var dt = fd[dsym];
|
|
4610
|
+
if (dsym > 3) {
|
|
4611
|
+
var b = fdeb[dsym];
|
|
4612
|
+
dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
|
|
4613
|
+
}
|
|
4614
|
+
if (pos > tbts) {
|
|
4615
|
+
if (noSt)
|
|
4616
|
+
err(0);
|
|
4617
|
+
break;
|
|
4618
|
+
}
|
|
4619
|
+
if (resize)
|
|
4620
|
+
cbuf(bt + 131072);
|
|
4621
|
+
var end = bt + add2;
|
|
4622
|
+
if (bt < dt) {
|
|
4623
|
+
var shift = dl - dt, dend = Math.min(dt, end);
|
|
4624
|
+
if (shift + bt < 0)
|
|
4625
|
+
err(3);
|
|
4626
|
+
for (; bt < dend; ++bt)
|
|
4627
|
+
buf[bt] = dict[shift + bt];
|
|
4628
|
+
}
|
|
4629
|
+
for (; bt < end; ++bt)
|
|
4630
|
+
buf[bt] = buf[bt - dt];
|
|
4631
|
+
}
|
|
4632
|
+
}
|
|
4633
|
+
st.l = lm, st.p = lpos, st.b = bt, st.f = final;
|
|
4634
|
+
if (lm)
|
|
4635
|
+
final = 1, st.m = lbt, st.d = dm, st.n = dbt;
|
|
4636
|
+
} while (!final);
|
|
4637
|
+
return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
|
|
4638
|
+
};
|
|
4639
|
+
var wbits = function(d, p, v) {
|
|
4640
|
+
v <<= p & 7;
|
|
4641
|
+
var o = p / 8 | 0;
|
|
4642
|
+
d[o] |= v;
|
|
4643
|
+
d[o + 1] |= v >> 8;
|
|
4644
|
+
};
|
|
4645
|
+
var wbits16 = function(d, p, v) {
|
|
4646
|
+
v <<= p & 7;
|
|
4647
|
+
var o = p / 8 | 0;
|
|
4648
|
+
d[o] |= v;
|
|
4649
|
+
d[o + 1] |= v >> 8;
|
|
4650
|
+
d[o + 2] |= v >> 16;
|
|
4651
|
+
};
|
|
4652
|
+
var hTree = function(d, mb) {
|
|
4653
|
+
var t = [];
|
|
4654
|
+
for (var i = 0; i < d.length; ++i) {
|
|
4655
|
+
if (d[i])
|
|
4656
|
+
t.push({ s: i, f: d[i] });
|
|
4657
|
+
}
|
|
4658
|
+
var s = t.length;
|
|
4659
|
+
var t2 = t.slice();
|
|
4660
|
+
if (!s)
|
|
4661
|
+
return { t: et, l: 0 };
|
|
4662
|
+
if (s == 1) {
|
|
4663
|
+
var v = new u8(t[0].s + 1);
|
|
4664
|
+
v[t[0].s] = 1;
|
|
4665
|
+
return { t: v, l: 1 };
|
|
4666
|
+
}
|
|
4667
|
+
t.sort(function(a, b) {
|
|
4668
|
+
return a.f - b.f;
|
|
4669
|
+
});
|
|
4670
|
+
t.push({ s: -1, f: 25001 });
|
|
4671
|
+
var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
|
|
4672
|
+
t[0] = { s: -1, f: l.f + r.f, l, r };
|
|
4673
|
+
while (i1 != s - 1) {
|
|
4674
|
+
l = t[t[i0].f < t[i2].f ? i0++ : i2++];
|
|
4675
|
+
r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
|
|
4676
|
+
t[i1++] = { s: -1, f: l.f + r.f, l, r };
|
|
4677
|
+
}
|
|
4678
|
+
var maxSym = t2[0].s;
|
|
4679
|
+
for (var i = 1; i < s; ++i) {
|
|
4680
|
+
if (t2[i].s > maxSym)
|
|
4681
|
+
maxSym = t2[i].s;
|
|
4682
|
+
}
|
|
4683
|
+
var tr = new u16(maxSym + 1);
|
|
4684
|
+
var mbt = ln(t[i1 - 1], tr, 0);
|
|
4685
|
+
if (mbt > mb) {
|
|
4686
|
+
var i = 0, dt = 0;
|
|
4687
|
+
var lft = mbt - mb, cst = 1 << lft;
|
|
4688
|
+
t2.sort(function(a, b) {
|
|
4689
|
+
return tr[b.s] - tr[a.s] || a.f - b.f;
|
|
4690
|
+
});
|
|
4691
|
+
for (; i < s; ++i) {
|
|
4692
|
+
var i2_1 = t2[i].s;
|
|
4693
|
+
if (tr[i2_1] > mb) {
|
|
4694
|
+
dt += cst - (1 << mbt - tr[i2_1]);
|
|
4695
|
+
tr[i2_1] = mb;
|
|
4696
|
+
} else
|
|
4697
|
+
break;
|
|
4698
|
+
}
|
|
4699
|
+
dt >>= lft;
|
|
4700
|
+
while (dt > 0) {
|
|
4701
|
+
var i2_2 = t2[i].s;
|
|
4702
|
+
if (tr[i2_2] < mb)
|
|
4703
|
+
dt -= 1 << mb - tr[i2_2]++ - 1;
|
|
4704
|
+
else
|
|
4705
|
+
++i;
|
|
4706
|
+
}
|
|
4707
|
+
for (; i >= 0 && dt; --i) {
|
|
4708
|
+
var i2_3 = t2[i].s;
|
|
4709
|
+
if (tr[i2_3] == mb) {
|
|
4710
|
+
--tr[i2_3];
|
|
4711
|
+
++dt;
|
|
4712
|
+
}
|
|
4713
|
+
}
|
|
4714
|
+
mbt = mb;
|
|
4715
|
+
}
|
|
4716
|
+
return { t: new u8(tr), l: mbt };
|
|
4717
|
+
};
|
|
4718
|
+
var ln = function(n, l, d) {
|
|
4719
|
+
return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;
|
|
4720
|
+
};
|
|
4721
|
+
var lc = function(c) {
|
|
4722
|
+
var s = c.length;
|
|
4723
|
+
while (s && !c[--s])
|
|
4724
|
+
;
|
|
4725
|
+
var cl = new u16(++s);
|
|
4726
|
+
var cli = 0, cln = c[0], cls = 1;
|
|
4727
|
+
var w = function(v) {
|
|
4728
|
+
cl[cli++] = v;
|
|
4729
|
+
};
|
|
4730
|
+
for (var i = 1; i <= s; ++i) {
|
|
4731
|
+
if (c[i] == cln && i != s)
|
|
4732
|
+
++cls;
|
|
4733
|
+
else {
|
|
4734
|
+
if (!cln && cls > 2) {
|
|
4735
|
+
for (; cls > 138; cls -= 138)
|
|
4736
|
+
w(32754);
|
|
4737
|
+
if (cls > 2) {
|
|
4738
|
+
w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
|
|
4739
|
+
cls = 0;
|
|
4740
|
+
}
|
|
4741
|
+
} else if (cls > 3) {
|
|
4742
|
+
w(cln), --cls;
|
|
4743
|
+
for (; cls > 6; cls -= 6)
|
|
4744
|
+
w(8304);
|
|
4745
|
+
if (cls > 2)
|
|
4746
|
+
w(cls - 3 << 5 | 8208), cls = 0;
|
|
4747
|
+
}
|
|
4748
|
+
while (cls--)
|
|
4749
|
+
w(cln);
|
|
4750
|
+
cls = 1;
|
|
4751
|
+
cln = c[i];
|
|
4752
|
+
}
|
|
4753
|
+
}
|
|
4754
|
+
return { c: cl.subarray(0, cli), n: s };
|
|
4755
|
+
};
|
|
4756
|
+
var clen = function(cf, cl) {
|
|
4757
|
+
var l = 0;
|
|
4758
|
+
for (var i = 0; i < cl.length; ++i)
|
|
4759
|
+
l += cf[i] * cl[i];
|
|
4760
|
+
return l;
|
|
4761
|
+
};
|
|
4762
|
+
var wfblk = function(out, pos, dat) {
|
|
4763
|
+
var s = dat.length;
|
|
4764
|
+
var o = shft(pos + 2);
|
|
4765
|
+
out[o] = s & 255;
|
|
4766
|
+
out[o + 1] = s >> 8;
|
|
4767
|
+
out[o + 2] = out[o] ^ 255;
|
|
4768
|
+
out[o + 3] = out[o + 1] ^ 255;
|
|
4769
|
+
for (var i = 0; i < s; ++i)
|
|
4770
|
+
out[o + i + 4] = dat[i];
|
|
4771
|
+
return (o + 4 + s) * 8;
|
|
4772
|
+
};
|
|
4773
|
+
var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
|
|
4774
|
+
wbits(out, p++, final);
|
|
4775
|
+
++lf[256];
|
|
4776
|
+
var _a2 = hTree(lf, 15), dlt = _a2.t, mlb = _a2.l;
|
|
4777
|
+
var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l;
|
|
4778
|
+
var _c = lc(dlt), lclt = _c.c, nlc = _c.n;
|
|
4779
|
+
var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;
|
|
4780
|
+
var lcfreq = new u16(19);
|
|
4781
|
+
for (var i = 0; i < lclt.length; ++i)
|
|
4782
|
+
++lcfreq[lclt[i] & 31];
|
|
4783
|
+
for (var i = 0; i < lcdt.length; ++i)
|
|
4784
|
+
++lcfreq[lcdt[i] & 31];
|
|
4785
|
+
var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;
|
|
4786
|
+
var nlcc = 19;
|
|
4787
|
+
for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
|
|
4788
|
+
;
|
|
4789
|
+
var flen = bl + 5 << 3;
|
|
4790
|
+
var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
|
|
4791
|
+
var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];
|
|
4792
|
+
if (bs >= 0 && flen <= ftlen && flen <= dtlen)
|
|
4793
|
+
return wfblk(out, p, dat.subarray(bs, bs + bl));
|
|
4794
|
+
var lm, ll, dm, dl;
|
|
4795
|
+
wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
|
|
4796
|
+
if (dtlen < ftlen) {
|
|
4797
|
+
lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
|
|
4798
|
+
var llm = hMap(lct, mlcb, 0);
|
|
4799
|
+
wbits(out, p, nlc - 257);
|
|
4800
|
+
wbits(out, p + 5, ndc - 1);
|
|
4801
|
+
wbits(out, p + 10, nlcc - 4);
|
|
4802
|
+
p += 14;
|
|
4803
|
+
for (var i = 0; i < nlcc; ++i)
|
|
4804
|
+
wbits(out, p + 3 * i, lct[clim[i]]);
|
|
4805
|
+
p += 3 * nlcc;
|
|
4806
|
+
var lcts = [lclt, lcdt];
|
|
4807
|
+
for (var it = 0; it < 2; ++it) {
|
|
4808
|
+
var clct = lcts[it];
|
|
4809
|
+
for (var i = 0; i < clct.length; ++i) {
|
|
4810
|
+
var len = clct[i] & 31;
|
|
4811
|
+
wbits(out, p, llm[len]), p += lct[len];
|
|
4812
|
+
if (len > 15)
|
|
4813
|
+
wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12;
|
|
4814
|
+
}
|
|
4815
|
+
}
|
|
4816
|
+
} else {
|
|
4817
|
+
lm = flm, ll = flt, dm = fdm, dl = fdt;
|
|
4818
|
+
}
|
|
4819
|
+
for (var i = 0; i < li; ++i) {
|
|
4820
|
+
var sym = syms[i];
|
|
4821
|
+
if (sym > 255) {
|
|
4822
|
+
var len = sym >> 18 & 31;
|
|
4823
|
+
wbits16(out, p, lm[len + 257]), p += ll[len + 257];
|
|
4824
|
+
if (len > 7)
|
|
4825
|
+
wbits(out, p, sym >> 23 & 31), p += fleb[len];
|
|
4826
|
+
var dst = sym & 31;
|
|
4827
|
+
wbits16(out, p, dm[dst]), p += dl[dst];
|
|
4828
|
+
if (dst > 3)
|
|
4829
|
+
wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst];
|
|
4830
|
+
} else {
|
|
4831
|
+
wbits16(out, p, lm[sym]), p += ll[sym];
|
|
4832
|
+
}
|
|
4833
|
+
}
|
|
4834
|
+
wbits16(out, p, lm[256]);
|
|
4835
|
+
return p + ll[256];
|
|
4836
|
+
};
|
|
4837
|
+
var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
|
|
4838
|
+
var et = /* @__PURE__ */ new u8(0);
|
|
4839
|
+
var dflt = function(dat, lvl, plvl, pre, post, st) {
|
|
4840
|
+
var s = st.z || dat.length;
|
|
4841
|
+
var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);
|
|
4842
|
+
var w = o.subarray(pre, o.length - post);
|
|
4843
|
+
var lst = st.l;
|
|
4844
|
+
var pos = (st.r || 0) & 7;
|
|
4845
|
+
if (lvl) {
|
|
4846
|
+
if (pos)
|
|
4847
|
+
w[0] = st.r >> 3;
|
|
4848
|
+
var opt = deo[lvl - 1];
|
|
4849
|
+
var n = opt >> 13, c = opt & 8191;
|
|
4850
|
+
var msk_1 = (1 << plvl) - 1;
|
|
4851
|
+
var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);
|
|
4852
|
+
var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
|
|
4853
|
+
var hsh = function(i2) {
|
|
4854
|
+
return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;
|
|
4855
|
+
};
|
|
4856
|
+
var syms = new i32(25e3);
|
|
4857
|
+
var lf = new u16(288), df = new u16(32);
|
|
4858
|
+
var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;
|
|
4859
|
+
for (; i + 2 < s; ++i) {
|
|
4860
|
+
var hv = hsh(i);
|
|
4861
|
+
var imod = i & 32767, pimod = head[hv];
|
|
4862
|
+
prev[imod] = pimod;
|
|
4863
|
+
head[hv] = imod;
|
|
4864
|
+
if (wi <= i) {
|
|
4865
|
+
var rem = s - i;
|
|
4866
|
+
if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) {
|
|
4867
|
+
pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
|
|
4868
|
+
li = lc_1 = eb = 0, bs = i;
|
|
4869
|
+
for (var j = 0; j < 286; ++j)
|
|
4870
|
+
lf[j] = 0;
|
|
4871
|
+
for (var j = 0; j < 30; ++j)
|
|
4872
|
+
df[j] = 0;
|
|
4873
|
+
}
|
|
4874
|
+
var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;
|
|
4875
|
+
if (rem > 2 && hv == hsh(i - dif)) {
|
|
4876
|
+
var maxn = Math.min(n, rem) - 1;
|
|
4877
|
+
var maxd = Math.min(32767, i);
|
|
4878
|
+
var ml = Math.min(258, rem);
|
|
4879
|
+
while (dif <= maxd && --ch_1 && imod != pimod) {
|
|
4880
|
+
if (dat[i + l] == dat[i + l - dif]) {
|
|
4881
|
+
var nl = 0;
|
|
4882
|
+
for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
|
|
4883
|
+
;
|
|
4884
|
+
if (nl > l) {
|
|
4885
|
+
l = nl, d = dif;
|
|
4886
|
+
if (nl > maxn)
|
|
4887
|
+
break;
|
|
4888
|
+
var mmd = Math.min(dif, nl - 2);
|
|
4889
|
+
var md = 0;
|
|
4890
|
+
for (var j = 0; j < mmd; ++j) {
|
|
4891
|
+
var ti = i - dif + j & 32767;
|
|
4892
|
+
var pti = prev[ti];
|
|
4893
|
+
var cd = ti - pti & 32767;
|
|
4894
|
+
if (cd > md)
|
|
4895
|
+
md = cd, pimod = ti;
|
|
4896
|
+
}
|
|
4897
|
+
}
|
|
4898
|
+
}
|
|
4899
|
+
imod = pimod, pimod = prev[imod];
|
|
4900
|
+
dif += imod - pimod & 32767;
|
|
4901
|
+
}
|
|
4902
|
+
}
|
|
4903
|
+
if (d) {
|
|
4904
|
+
syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];
|
|
4905
|
+
var lin = revfl[l] & 31, din = revfd[d] & 31;
|
|
4906
|
+
eb += fleb[lin] + fdeb[din];
|
|
4907
|
+
++lf[257 + lin];
|
|
4908
|
+
++df[din];
|
|
4909
|
+
wi = i + l;
|
|
4910
|
+
++lc_1;
|
|
4911
|
+
} else {
|
|
4912
|
+
syms[li++] = dat[i];
|
|
4913
|
+
++lf[dat[i]];
|
|
4914
|
+
}
|
|
4915
|
+
}
|
|
4916
|
+
}
|
|
4917
|
+
for (i = Math.max(i, wi); i < s; ++i) {
|
|
4918
|
+
syms[li++] = dat[i];
|
|
4919
|
+
++lf[dat[i]];
|
|
4920
|
+
}
|
|
4921
|
+
pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
|
|
4922
|
+
if (!lst) {
|
|
4923
|
+
st.r = pos & 7 | w[pos / 8 | 0] << 3;
|
|
4924
|
+
pos -= 7;
|
|
4925
|
+
st.h = head, st.p = prev, st.i = i, st.w = wi;
|
|
4926
|
+
}
|
|
4927
|
+
} else {
|
|
4928
|
+
for (var i = st.w || 0; i < s + lst; i += 65535) {
|
|
4929
|
+
var e = i + 65535;
|
|
4930
|
+
if (e >= s) {
|
|
4931
|
+
w[pos / 8 | 0] = lst;
|
|
4932
|
+
e = s;
|
|
4933
|
+
}
|
|
4934
|
+
pos = wfblk(w, pos + 1, dat.subarray(i, e));
|
|
4935
|
+
}
|
|
4936
|
+
st.i = s;
|
|
4937
|
+
}
|
|
4938
|
+
return slc(o, 0, pre + shft(pos) + post);
|
|
4939
|
+
};
|
|
4940
|
+
var dopt = function(dat, opt, pre, post, st) {
|
|
4941
|
+
if (!st) {
|
|
4942
|
+
st = { l: 1 };
|
|
4943
|
+
if (opt.dictionary) {
|
|
4944
|
+
var dict = opt.dictionary.subarray(-32768);
|
|
4945
|
+
var newDat = new u8(dict.length + dat.length);
|
|
4946
|
+
newDat.set(dict);
|
|
4947
|
+
newDat.set(dat, dict.length);
|
|
4948
|
+
dat = newDat;
|
|
4949
|
+
st.w = dict.length;
|
|
4950
|
+
}
|
|
4951
|
+
}
|
|
4952
|
+
return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20 : 12 + opt.mem, pre, post, st);
|
|
4953
|
+
};
|
|
4954
|
+
function deflateSync(data, opts) {
|
|
4955
|
+
return dopt(data, opts || {}, 0, 0);
|
|
4956
|
+
}
|
|
4957
|
+
function inflateSync(data, opts) {
|
|
4958
|
+
return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
|
|
4959
|
+
}
|
|
4960
|
+
var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
|
|
4961
|
+
var tds = 0;
|
|
4962
|
+
try {
|
|
4963
|
+
td.decode(et, { stream: true });
|
|
4964
|
+
tds = 1;
|
|
4965
|
+
} catch (e) {
|
|
4966
|
+
}
|
|
4967
|
+
|
|
4239
4968
|
// src/capabilities/verbs.ts
|
|
4240
4969
|
var CAPABILITY_VERBS = [
|
|
4241
4970
|
"read-stream",
|
|
@@ -4243,7 +4972,10 @@ var CAPABILITY_VERBS = [
|
|
|
4243
4972
|
"read-diff",
|
|
4244
4973
|
"send-user-message",
|
|
4245
4974
|
"move-task",
|
|
4246
|
-
"answer-permission-prompt"
|
|
4975
|
+
"answer-permission-prompt",
|
|
4976
|
+
"interactive-terminal",
|
|
4977
|
+
"board-tool-read",
|
|
4978
|
+
"board-tool-write"
|
|
4247
4979
|
];
|
|
4248
4980
|
function isCapabilityVerb(value) {
|
|
4249
4981
|
return CAPABILITY_VERBS.includes(value);
|
|
@@ -4259,32 +4991,93 @@ function capabilitySetToArray(capabilities) {
|
|
|
4259
4991
|
return Array.from(capabilities);
|
|
4260
4992
|
}
|
|
4261
4993
|
|
|
4994
|
+
// src/wire/json-value.ts
|
|
4995
|
+
function isJsonValue(value) {
|
|
4996
|
+
if (value === null) return true;
|
|
4997
|
+
const valueType = typeof value;
|
|
4998
|
+
if (valueType === "boolean" || valueType === "number" || valueType === "string") return true;
|
|
4999
|
+
if (Array.isArray(value)) return value.every(isJsonValue);
|
|
5000
|
+
if (valueType === "object") return Object.values(value).every(isJsonValue);
|
|
5001
|
+
return false;
|
|
5002
|
+
}
|
|
5003
|
+
function isRecord(value) {
|
|
5004
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5005
|
+
}
|
|
5006
|
+
|
|
4262
5007
|
// src/wire/framing.ts
|
|
4263
5008
|
var MAX_FRAME_LENGTH = 1024 * 1024;
|
|
5009
|
+
var MAX_DECODED_LENGTH = 4 * 1024 * 1024;
|
|
5010
|
+
var COMPRESSION_THRESHOLD = 4 * 1024;
|
|
5011
|
+
var FRAME_FORMAT_DEFLATE = 1;
|
|
5012
|
+
var JSON_OPEN_BRACE = 123;
|
|
5013
|
+
var DEFLATE_HEADER_LENGTH = 5;
|
|
4264
5014
|
function encodeMessage(message) {
|
|
4265
|
-
const
|
|
4266
|
-
if (
|
|
5015
|
+
const json = new TextEncoder().encode(JSON.stringify(message));
|
|
5016
|
+
if (json.length > MAX_DECODED_LENGTH) {
|
|
5017
|
+
throw new Error(`Encoded bridge message exceeds ${MAX_DECODED_LENGTH} bytes before compression`);
|
|
5018
|
+
}
|
|
5019
|
+
let frame = json;
|
|
5020
|
+
if (json.length > COMPRESSION_THRESHOLD) {
|
|
5021
|
+
const compressed = deflateSync(json);
|
|
5022
|
+
if (compressed.length + DEFLATE_HEADER_LENGTH < json.length) {
|
|
5023
|
+
frame = new Uint8Array(DEFLATE_HEADER_LENGTH + compressed.length);
|
|
5024
|
+
frame[0] = FRAME_FORMAT_DEFLATE;
|
|
5025
|
+
new DataView(frame.buffer).setUint32(1, json.length, true);
|
|
5026
|
+
frame.set(compressed, DEFLATE_HEADER_LENGTH);
|
|
5027
|
+
}
|
|
5028
|
+
}
|
|
5029
|
+
if (frame.length > MAX_FRAME_LENGTH) {
|
|
4267
5030
|
throw new Error(`Encoded bridge message exceeds ${MAX_FRAME_LENGTH} bytes`);
|
|
4268
5031
|
}
|
|
4269
|
-
return
|
|
5032
|
+
return frame;
|
|
4270
5033
|
}
|
|
4271
5034
|
function decodeMessage(bytes) {
|
|
4272
5035
|
if (bytes.length > MAX_FRAME_LENGTH) {
|
|
4273
5036
|
throw new Error(`Bridge message frame exceeds ${MAX_FRAME_LENGTH} bytes`);
|
|
4274
5037
|
}
|
|
4275
|
-
|
|
5038
|
+
if (bytes.length === 0) throw new Error("Bridge message frame is empty");
|
|
5039
|
+
let json;
|
|
5040
|
+
if (bytes[0] === JSON_OPEN_BRACE) {
|
|
5041
|
+
json = bytes;
|
|
5042
|
+
} else if (bytes[0] === FRAME_FORMAT_DEFLATE) {
|
|
5043
|
+
if (bytes.length < DEFLATE_HEADER_LENGTH + 1) throw new Error("Compressed bridge message frame is truncated");
|
|
5044
|
+
const declaredLength = new DataView(bytes.buffer, bytes.byteOffset).getUint32(1, true);
|
|
5045
|
+
if (declaredLength === 0 || declaredLength > MAX_DECODED_LENGTH) {
|
|
5046
|
+
throw new Error(`Compressed bridge message declares an invalid decoded length: ${declaredLength}`);
|
|
5047
|
+
}
|
|
5048
|
+
json = inflateSync(bytes.subarray(DEFLATE_HEADER_LENGTH), { out: new Uint8Array(declaredLength) });
|
|
5049
|
+
if (json.length !== declaredLength) {
|
|
5050
|
+
throw new Error("Compressed bridge message decoded length does not match its declaration");
|
|
5051
|
+
}
|
|
5052
|
+
} else {
|
|
5053
|
+
throw new Error(`Unknown bridge message frame format: 0x${bytes[0].toString(16)}`);
|
|
5054
|
+
}
|
|
5055
|
+
const parsed = JSON.parse(new TextDecoder().decode(json));
|
|
4276
5056
|
return validateBridgeMessage(parsed);
|
|
4277
5057
|
}
|
|
4278
|
-
function
|
|
4279
|
-
if (
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
}
|
|
4286
|
-
|
|
4287
|
-
|
|
5058
|
+
function validateEvent(event) {
|
|
5059
|
+
if (typeof event.kind !== "string") throw new Error('event message missing a valid "kind"');
|
|
5060
|
+
if (!isJsonValue(event.payload)) throw new Error("event payload is not JSON-serializable");
|
|
5061
|
+
switch (event.kind) {
|
|
5062
|
+
case "transcript":
|
|
5063
|
+
case "activity":
|
|
5064
|
+
case "terminal": {
|
|
5065
|
+
if (typeof event.sessionId !== "string") throw new Error(`"${event.kind}" event is missing "sessionId"`);
|
|
5066
|
+
if (typeof event.taskId !== "string") throw new Error(`"${event.kind}" event is missing "taskId"`);
|
|
5067
|
+
return event;
|
|
5068
|
+
}
|
|
5069
|
+
case "board": {
|
|
5070
|
+
if (typeof event.projectId !== "string") throw new Error('"board" event is missing "projectId"');
|
|
5071
|
+
if (event.taskId !== void 0 && typeof event.taskId !== "string") throw new Error('"board" event has a non-string "taskId"');
|
|
5072
|
+
return event;
|
|
5073
|
+
}
|
|
5074
|
+
case "diff": {
|
|
5075
|
+
if (typeof event.taskId !== "string") throw new Error('"diff" event is missing "taskId"');
|
|
5076
|
+
return event;
|
|
5077
|
+
}
|
|
5078
|
+
default:
|
|
5079
|
+
throw new Error(`event message has an unknown event kind: ${event.kind}`);
|
|
5080
|
+
}
|
|
4288
5081
|
}
|
|
4289
5082
|
function validateBridgeMessage(value) {
|
|
4290
5083
|
if (!isRecord(value) || typeof value.type !== "string") {
|
|
@@ -4313,18 +5106,8 @@ function validateBridgeMessage(value) {
|
|
|
4313
5106
|
};
|
|
4314
5107
|
}
|
|
4315
5108
|
case "event": {
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
throw new Error('event message missing a valid "event"');
|
|
4319
|
-
}
|
|
4320
|
-
if (typeof event.taskId !== "string") throw new Error('event is missing "taskId"');
|
|
4321
|
-
if (!isJsonValue(event.payload)) throw new Error("event payload is not JSON-serializable");
|
|
4322
|
-
if (event.kind === "transcript" || event.kind === "activity") {
|
|
4323
|
-
if (typeof event.sessionId !== "string") throw new Error(`"${event.kind}" event is missing "sessionId"`);
|
|
4324
|
-
} else if (event.kind !== "board") {
|
|
4325
|
-
throw new Error(`event message has an unknown event kind: ${event.kind}`);
|
|
4326
|
-
}
|
|
4327
|
-
return { type: "event", event };
|
|
5109
|
+
if (!isRecord(value.event)) throw new Error('event message missing a valid "event"');
|
|
5110
|
+
return { type: "event", event: validateEvent(value.event) };
|
|
4328
5111
|
}
|
|
4329
5112
|
default:
|
|
4330
5113
|
throw new Error(`Unknown bridge message type: ${value.type}`);
|
|
@@ -4351,6 +5134,410 @@ function unwrapSessionFrame(frame) {
|
|
|
4351
5134
|
return { kind, payload: frame.subarray(1) };
|
|
4352
5135
|
}
|
|
4353
5136
|
|
|
5137
|
+
// src/events/payloads.ts
|
|
5138
|
+
var DIFF_FILE_STATUSES = ["A", "M", "D", "R", "C", "U"];
|
|
5139
|
+
var TRANSCRIPT_SYSTEM_SUBTYPES = ["compaction", "command", "command_output", "session_boundary"];
|
|
5140
|
+
function requireString(record, field, context) {
|
|
5141
|
+
const value = record[field];
|
|
5142
|
+
if (typeof value !== "string") throw new Error(`${context} is missing a string "${field}"`);
|
|
5143
|
+
return value;
|
|
5144
|
+
}
|
|
5145
|
+
function requireNumber(record, field, context) {
|
|
5146
|
+
const value = record[field];
|
|
5147
|
+
if (typeof value !== "number") throw new Error(`${context} is missing a number "${field}"`);
|
|
5148
|
+
return value;
|
|
5149
|
+
}
|
|
5150
|
+
function requireBoolean(record, field, context) {
|
|
5151
|
+
const value = record[field];
|
|
5152
|
+
if (typeof value !== "boolean") throw new Error(`${context} is missing a boolean "${field}"`);
|
|
5153
|
+
return value;
|
|
5154
|
+
}
|
|
5155
|
+
function isTranscriptBlockWire(value) {
|
|
5156
|
+
if (!isRecord(value)) return false;
|
|
5157
|
+
if (value.type === "text" || value.type === "thinking") return typeof value.text === "string";
|
|
5158
|
+
if (value.type === "tool_use") return typeof value.id === "string" && typeof value.name === "string" && "input" in value;
|
|
5159
|
+
return false;
|
|
5160
|
+
}
|
|
5161
|
+
function isTranscriptEntryWire(value) {
|
|
5162
|
+
if (!isRecord(value)) return false;
|
|
5163
|
+
if (typeof value.uuid !== "string" || typeof value.ts !== "number") return false;
|
|
5164
|
+
switch (value.kind) {
|
|
5165
|
+
case "user":
|
|
5166
|
+
return typeof value.text === "string";
|
|
5167
|
+
case "assistant":
|
|
5168
|
+
return Array.isArray(value.blocks) && value.blocks.every(isTranscriptBlockWire);
|
|
5169
|
+
case "tool_result":
|
|
5170
|
+
return typeof value.toolUseId === "string" && typeof value.content === "string";
|
|
5171
|
+
case "system":
|
|
5172
|
+
return typeof value.subtype === "string" && TRANSCRIPT_SYSTEM_SUBTYPES.includes(value.subtype) && typeof value.text === "string";
|
|
5173
|
+
default:
|
|
5174
|
+
return false;
|
|
5175
|
+
}
|
|
5176
|
+
}
|
|
5177
|
+
function parseTranscriptEntriesWire(payload) {
|
|
5178
|
+
if (!Array.isArray(payload)) throw new Error("transcript payload must be an array of entries");
|
|
5179
|
+
return payload.map((entry, index) => {
|
|
5180
|
+
if (!isTranscriptEntryWire(entry)) throw new Error(`transcript payload entry ${index} is malformed`);
|
|
5181
|
+
return entry;
|
|
5182
|
+
});
|
|
5183
|
+
}
|
|
5184
|
+
function parseTranscriptEventPayload(payload) {
|
|
5185
|
+
if (!isRecord(payload)) throw new Error("transcript payload must be an object");
|
|
5186
|
+
const revision = requireNumber(payload, "revision", "transcript payload");
|
|
5187
|
+
const totalEntries = requireNumber(payload, "totalEntries", "transcript payload");
|
|
5188
|
+
if (!Number.isInteger(revision) || revision < 0) throw new Error('transcript payload has an invalid "revision"');
|
|
5189
|
+
if (!Number.isInteger(totalEntries) || totalEntries < 0) throw new Error('transcript payload has an invalid "totalEntries"');
|
|
5190
|
+
if (payload.mode === "reset") return { mode: "reset", revision, totalEntries };
|
|
5191
|
+
if (payload.mode !== "delta") throw new Error('transcript payload has an invalid "mode"');
|
|
5192
|
+
if (!Array.isArray(payload.upserts)) throw new Error('transcript delta is missing "upserts"');
|
|
5193
|
+
const upserts = payload.upserts.map((upsert, position) => {
|
|
5194
|
+
if (!isRecord(upsert) || typeof upsert.index !== "number" || !Number.isInteger(upsert.index) || upsert.index < 0) {
|
|
5195
|
+
throw new Error(`transcript delta upsert ${position} has an invalid "index"`);
|
|
5196
|
+
}
|
|
5197
|
+
if (!isTranscriptEntryWire(upsert.entry)) throw new Error(`transcript delta upsert ${position} has a malformed "entry"`);
|
|
5198
|
+
return { index: upsert.index, entry: upsert.entry };
|
|
5199
|
+
});
|
|
5200
|
+
return { mode: "delta", revision, totalEntries, upserts };
|
|
5201
|
+
}
|
|
5202
|
+
function isActivityStateWire(value) {
|
|
5203
|
+
return value === "thinking" || value === "idle" || value === "permission";
|
|
5204
|
+
}
|
|
5205
|
+
function isActivityReasonWire(value) {
|
|
5206
|
+
if (!isRecord(value)) return false;
|
|
5207
|
+
switch (value.kind) {
|
|
5208
|
+
case "idle":
|
|
5209
|
+
case "permission":
|
|
5210
|
+
case "turn-active":
|
|
5211
|
+
return true;
|
|
5212
|
+
case "tool":
|
|
5213
|
+
return typeof value.pendingCount === "number" && (value.currentTool === null || typeof value.currentTool === "string");
|
|
5214
|
+
case "subagent":
|
|
5215
|
+
return typeof value.depth === "number";
|
|
5216
|
+
case "background-shell":
|
|
5217
|
+
return typeof value.count === "number" && Array.isArray(value.ids) && value.ids.every((id) => typeof id === "string");
|
|
5218
|
+
default:
|
|
5219
|
+
return false;
|
|
5220
|
+
}
|
|
5221
|
+
}
|
|
5222
|
+
function parseSessionUsageWire(payload) {
|
|
5223
|
+
if (!isRecord(payload)) throw new Error("usage payload must be an object");
|
|
5224
|
+
const contextWindow = payload.contextWindow;
|
|
5225
|
+
if (!isRecord(contextWindow)) throw new Error('usage payload is missing "contextWindow"');
|
|
5226
|
+
const cost = payload.cost;
|
|
5227
|
+
if (!isRecord(cost)) throw new Error('usage payload is missing "cost"');
|
|
5228
|
+
const model = payload.model;
|
|
5229
|
+
if (!isRecord(model)) throw new Error('usage payload is missing "model"');
|
|
5230
|
+
return {
|
|
5231
|
+
contextWindow: {
|
|
5232
|
+
usedPercentage: requireNumber(contextWindow, "usedPercentage", "usage contextWindow"),
|
|
5233
|
+
usedTokens: requireNumber(contextWindow, "usedTokens", "usage contextWindow"),
|
|
5234
|
+
cacheTokens: requireNumber(contextWindow, "cacheTokens", "usage contextWindow"),
|
|
5235
|
+
totalInputTokens: requireNumber(contextWindow, "totalInputTokens", "usage contextWindow"),
|
|
5236
|
+
totalOutputTokens: requireNumber(contextWindow, "totalOutputTokens", "usage contextWindow"),
|
|
5237
|
+
contextWindowSize: requireNumber(contextWindow, "contextWindowSize", "usage contextWindow")
|
|
5238
|
+
},
|
|
5239
|
+
cost: {
|
|
5240
|
+
totalCostUsd: requireNumber(cost, "totalCostUsd", "usage cost"),
|
|
5241
|
+
totalDurationMs: requireNumber(cost, "totalDurationMs", "usage cost")
|
|
5242
|
+
},
|
|
5243
|
+
...typeof payload.toolCallCount === "number" ? { toolCallCount: payload.toolCallCount } : {},
|
|
5244
|
+
model: {
|
|
5245
|
+
id: requireString(model, "id", "usage model"),
|
|
5246
|
+
displayName: requireString(model, "displayName", "usage model"),
|
|
5247
|
+
...typeof model.effort === "string" ? { effort: model.effort } : {}
|
|
5248
|
+
}
|
|
5249
|
+
};
|
|
5250
|
+
}
|
|
5251
|
+
function parseSessionEventWire(payload) {
|
|
5252
|
+
if (!isRecord(payload)) throw new Error("session event payload must be an object");
|
|
5253
|
+
return {
|
|
5254
|
+
ts: requireNumber(payload, "ts", "session event"),
|
|
5255
|
+
type: requireString(payload, "type", "session event"),
|
|
5256
|
+
...typeof payload.tool === "string" ? { tool: payload.tool } : {},
|
|
5257
|
+
...typeof payload.toolId === "string" ? { toolId: payload.toolId } : {},
|
|
5258
|
+
...typeof payload.detail === "string" ? { detail: payload.detail } : {}
|
|
5259
|
+
};
|
|
5260
|
+
}
|
|
5261
|
+
function parseStringArray(value, context) {
|
|
5262
|
+
if (!Array.isArray(value) || !value.every((item) => typeof item === "string")) {
|
|
5263
|
+
throw new Error(`${context} is not a string array`);
|
|
5264
|
+
}
|
|
5265
|
+
return value;
|
|
5266
|
+
}
|
|
5267
|
+
function nullableString(record, field) {
|
|
5268
|
+
const value = record[field];
|
|
5269
|
+
return typeof value === "string" ? value : null;
|
|
5270
|
+
}
|
|
5271
|
+
function nullableNumber(record, field) {
|
|
5272
|
+
const value = record[field];
|
|
5273
|
+
return typeof value === "number" ? value : null;
|
|
5274
|
+
}
|
|
5275
|
+
function parseBoardColumnWire(value) {
|
|
5276
|
+
if (!isRecord(value)) throw new Error("board column must be an object");
|
|
5277
|
+
return {
|
|
5278
|
+
id: requireString(value, "id", "board column"),
|
|
5279
|
+
name: requireString(value, "name", "board column"),
|
|
5280
|
+
description: nullableString(value, "description"),
|
|
5281
|
+
role: nullableString(value, "role"),
|
|
5282
|
+
position: requireNumber(value, "position", "board column"),
|
|
5283
|
+
color: requireString(value, "color", "board column"),
|
|
5284
|
+
icon: nullableString(value, "icon"),
|
|
5285
|
+
is_archived: requireBoolean(value, "is_archived", "board column"),
|
|
5286
|
+
is_ghost: requireBoolean(value, "is_ghost", "board column")
|
|
5287
|
+
};
|
|
5288
|
+
}
|
|
5289
|
+
function parseBoardTaskWire(value) {
|
|
5290
|
+
if (!isRecord(value)) throw new Error("board task must be an object");
|
|
5291
|
+
return {
|
|
5292
|
+
id: requireString(value, "id", "board task"),
|
|
5293
|
+
display_id: requireNumber(value, "display_id", "board task"),
|
|
5294
|
+
title: requireString(value, "title", "board task"),
|
|
5295
|
+
description: typeof value.description === "string" ? value.description : "",
|
|
5296
|
+
swimlane_id: requireString(value, "swimlane_id", "board task"),
|
|
5297
|
+
position: requireNumber(value, "position", "board task"),
|
|
5298
|
+
agent: nullableString(value, "agent"),
|
|
5299
|
+
session_id: nullableString(value, "session_id"),
|
|
5300
|
+
worktree_path: nullableString(value, "worktree_path"),
|
|
5301
|
+
branch_name: nullableString(value, "branch_name"),
|
|
5302
|
+
pr_number: nullableNumber(value, "pr_number"),
|
|
5303
|
+
pr_url: nullableString(value, "pr_url"),
|
|
5304
|
+
pr_state: nullableString(value, "pr_state"),
|
|
5305
|
+
base_branch: nullableString(value, "base_branch"),
|
|
5306
|
+
labels: Array.isArray(value.labels) ? parseStringArray(value.labels, "board task labels") : [],
|
|
5307
|
+
priority: typeof value.priority === "number" ? value.priority : 0,
|
|
5308
|
+
attachment_count: typeof value.attachment_count === "number" ? value.attachment_count : 0,
|
|
5309
|
+
archived_at: nullableString(value, "archived_at"),
|
|
5310
|
+
created_at: requireString(value, "created_at", "board task"),
|
|
5311
|
+
updated_at: requireString(value, "updated_at", "board task")
|
|
5312
|
+
};
|
|
5313
|
+
}
|
|
5314
|
+
function parseBacklogItemWire(value) {
|
|
5315
|
+
if (!isRecord(value)) throw new Error("backlog item must be an object");
|
|
5316
|
+
return {
|
|
5317
|
+
id: requireString(value, "id", "backlog item"),
|
|
5318
|
+
title: requireString(value, "title", "backlog item"),
|
|
5319
|
+
description: typeof value.description === "string" ? value.description : "",
|
|
5320
|
+
priority: typeof value.priority === "number" ? value.priority : 0,
|
|
5321
|
+
labels: Array.isArray(value.labels) ? parseStringArray(value.labels, "backlog item labels") : [],
|
|
5322
|
+
position: requireNumber(value, "position", "backlog item"),
|
|
5323
|
+
item_type: nullableString(value, "item_type"),
|
|
5324
|
+
external_url: nullableString(value, "external_url"),
|
|
5325
|
+
attachment_count: typeof value.attachment_count === "number" ? value.attachment_count : 0,
|
|
5326
|
+
created_at: requireString(value, "created_at", "backlog item"),
|
|
5327
|
+
updated_at: requireString(value, "updated_at", "backlog item")
|
|
5328
|
+
};
|
|
5329
|
+
}
|
|
5330
|
+
function parseDiffFileListWire(payload) {
|
|
5331
|
+
if (!isRecord(payload)) throw new Error("diff file list must be an object");
|
|
5332
|
+
if (!Array.isArray(payload.files)) throw new Error('diff file list is missing "files"');
|
|
5333
|
+
const files = payload.files.map((file, index) => {
|
|
5334
|
+
if (!isRecord(file)) throw new Error(`diff file entry ${index} must be an object`);
|
|
5335
|
+
const status = requireString(file, "status", `diff file entry ${index}`);
|
|
5336
|
+
if (!DIFF_FILE_STATUSES.includes(status)) throw new Error(`diff file entry ${index} has an invalid "status"`);
|
|
5337
|
+
return {
|
|
5338
|
+
path: requireString(file, "path", `diff file entry ${index}`),
|
|
5339
|
+
status,
|
|
5340
|
+
insertions: requireNumber(file, "insertions", `diff file entry ${index}`),
|
|
5341
|
+
deletions: requireNumber(file, "deletions", `diff file entry ${index}`),
|
|
5342
|
+
...typeof file.oldPath === "string" ? { oldPath: file.oldPath } : {},
|
|
5343
|
+
binary: requireBoolean(file, "binary", `diff file entry ${index}`)
|
|
5344
|
+
};
|
|
5345
|
+
});
|
|
5346
|
+
return {
|
|
5347
|
+
files,
|
|
5348
|
+
totalInsertions: requireNumber(payload, "totalInsertions", "diff file list"),
|
|
5349
|
+
totalDeletions: requireNumber(payload, "totalDeletions", "diff file list")
|
|
5350
|
+
};
|
|
5351
|
+
}
|
|
5352
|
+
function parseDiffFileContentWire(payload) {
|
|
5353
|
+
if (!isRecord(payload)) throw new Error("diff file content must be an object");
|
|
5354
|
+
return {
|
|
5355
|
+
original: requireString(payload, "original", "diff file content"),
|
|
5356
|
+
modified: requireString(payload, "modified", "diff file content"),
|
|
5357
|
+
language: requireString(payload, "language", "diff file content")
|
|
5358
|
+
};
|
|
5359
|
+
}
|
|
5360
|
+
|
|
5361
|
+
// src/wire/payloads.ts
|
|
5362
|
+
function parseReadStreamResponsePayload(payload) {
|
|
5363
|
+
if (!isRecord(payload)) throw new Error("read-stream response must be an object");
|
|
5364
|
+
if (typeof payload.scrollback !== "string") throw new Error('read-stream response is missing "scrollback"');
|
|
5365
|
+
if (!isRecord(payload.activity)) throw new Error('read-stream response is missing "activity"');
|
|
5366
|
+
const state = payload.activity.state;
|
|
5367
|
+
const reason = payload.activity.reason;
|
|
5368
|
+
if (state !== null && !isActivityStateWire(state)) throw new Error('read-stream response has an invalid activity "state"');
|
|
5369
|
+
if (reason !== null && !isActivityReasonWire(reason)) throw new Error('read-stream response has an invalid activity "reason"');
|
|
5370
|
+
if (payload.awaitedPromptId !== null && typeof payload.awaitedPromptId !== "string") {
|
|
5371
|
+
throw new Error('read-stream response has an invalid "awaitedPromptId"');
|
|
5372
|
+
}
|
|
5373
|
+
return {
|
|
5374
|
+
scrollback: payload.scrollback,
|
|
5375
|
+
activity: { state: state ?? null, reason: reason ?? null },
|
|
5376
|
+
usage: payload.usage === null || payload.usage === void 0 ? null : parseSessionUsageWire(payload.usage),
|
|
5377
|
+
awaitedPromptId: payload.awaitedPromptId ?? null
|
|
5378
|
+
};
|
|
5379
|
+
}
|
|
5380
|
+
function parseTranscriptWindowResponsePayload(payload) {
|
|
5381
|
+
if (!isRecord(payload)) throw new Error("transcript-window response must be an object");
|
|
5382
|
+
const { revision, totalEntries, startIndex } = payload;
|
|
5383
|
+
if (typeof revision !== "number" || !Number.isInteger(revision) || revision < 0) {
|
|
5384
|
+
throw new Error('transcript-window response has an invalid "revision"');
|
|
5385
|
+
}
|
|
5386
|
+
if (typeof totalEntries !== "number" || !Number.isInteger(totalEntries) || totalEntries < 0) {
|
|
5387
|
+
throw new Error('transcript-window response has an invalid "totalEntries"');
|
|
5388
|
+
}
|
|
5389
|
+
if (typeof startIndex !== "number" || !Number.isInteger(startIndex) || startIndex < 0) {
|
|
5390
|
+
throw new Error('transcript-window response has an invalid "startIndex"');
|
|
5391
|
+
}
|
|
5392
|
+
return {
|
|
5393
|
+
revision,
|
|
5394
|
+
totalEntries,
|
|
5395
|
+
startIndex,
|
|
5396
|
+
entries: parseTranscriptEntriesWire(payload.entries)
|
|
5397
|
+
};
|
|
5398
|
+
}
|
|
5399
|
+
function parseReadStreamRequestPayload(payload) {
|
|
5400
|
+
if (!isRecord(payload)) throw new Error("read-stream payload must be an object");
|
|
5401
|
+
if (typeof payload.sessionId !== "string") throw new Error('read-stream payload missing "sessionId"');
|
|
5402
|
+
if (payload.action !== "subscribe" && payload.action !== "unsubscribe" && payload.action !== "transcript-window") {
|
|
5403
|
+
throw new Error('read-stream payload has an invalid "action"');
|
|
5404
|
+
}
|
|
5405
|
+
const request = { sessionId: payload.sessionId, action: payload.action };
|
|
5406
|
+
if (payload.beforeIndex !== void 0) {
|
|
5407
|
+
if (typeof payload.beforeIndex !== "number" || !Number.isInteger(payload.beforeIndex) || payload.beforeIndex < 0) {
|
|
5408
|
+
throw new Error('read-stream payload has an invalid "beforeIndex"');
|
|
5409
|
+
}
|
|
5410
|
+
request.beforeIndex = payload.beforeIndex;
|
|
5411
|
+
}
|
|
5412
|
+
if (payload.limit !== void 0) {
|
|
5413
|
+
if (typeof payload.limit !== "number" || !Number.isInteger(payload.limit) || payload.limit < 1) {
|
|
5414
|
+
throw new Error('read-stream payload has an invalid "limit"');
|
|
5415
|
+
}
|
|
5416
|
+
request.limit = payload.limit;
|
|
5417
|
+
}
|
|
5418
|
+
return request;
|
|
5419
|
+
}
|
|
5420
|
+
function parseReadBoardResponsePayload(payload) {
|
|
5421
|
+
if (!isRecord(payload)) throw new Error("read-board response must be an object");
|
|
5422
|
+
if (Array.isArray(payload.projects)) {
|
|
5423
|
+
const projects = payload.projects.map((project, index) => {
|
|
5424
|
+
if (!isRecord(project) || typeof project.id !== "string" || typeof project.name !== "string") {
|
|
5425
|
+
throw new Error(`read-board project ${index} is malformed`);
|
|
5426
|
+
}
|
|
5427
|
+
return { id: project.id, name: project.name };
|
|
5428
|
+
});
|
|
5429
|
+
return { projects };
|
|
5430
|
+
}
|
|
5431
|
+
if (typeof payload.projectId !== "string") throw new Error('read-board response is missing "projectId"');
|
|
5432
|
+
if (!Array.isArray(payload.columns)) throw new Error('read-board response is missing "columns"');
|
|
5433
|
+
if (!Array.isArray(payload.tasks)) throw new Error('read-board response is missing "tasks"');
|
|
5434
|
+
if (!Array.isArray(payload.backlog)) throw new Error('read-board response is missing "backlog"');
|
|
5435
|
+
return {
|
|
5436
|
+
projectId: payload.projectId,
|
|
5437
|
+
columns: payload.columns.map((column) => parseBoardColumnWire(column)),
|
|
5438
|
+
tasks: payload.tasks.map((task) => parseBoardTaskWire(task)),
|
|
5439
|
+
backlog: payload.backlog.map((item) => parseBacklogItemWire(item))
|
|
5440
|
+
};
|
|
5441
|
+
}
|
|
5442
|
+
function parseReadBoardRequestPayload(payload) {
|
|
5443
|
+
if (!isRecord(payload)) throw new Error("read-board payload must be an object");
|
|
5444
|
+
if (payload.projectId !== void 0 && typeof payload.projectId !== "string") {
|
|
5445
|
+
throw new Error('read-board payload has a non-string "projectId"');
|
|
5446
|
+
}
|
|
5447
|
+
if (payload.action !== void 0 && payload.action !== "subscribe" && payload.action !== "unsubscribe") {
|
|
5448
|
+
throw new Error('read-board payload has an invalid "action"');
|
|
5449
|
+
}
|
|
5450
|
+
return { projectId: payload.projectId, action: payload.action };
|
|
5451
|
+
}
|
|
5452
|
+
function parseReadDiffResponsePayload(payload) {
|
|
5453
|
+
if (!isRecord(payload)) throw new Error("read-diff response must be an object");
|
|
5454
|
+
return "files" in payload ? parseDiffFileListWire(payload) : parseDiffFileContentWire(payload);
|
|
5455
|
+
}
|
|
5456
|
+
function parseReadDiffRequestPayload(payload) {
|
|
5457
|
+
if (!isRecord(payload)) throw new Error("read-diff payload must be an object");
|
|
5458
|
+
if (typeof payload.taskId !== "string") throw new Error('read-diff payload missing "taskId"');
|
|
5459
|
+
if (typeof payload.projectId !== "string") throw new Error('read-diff payload missing "projectId"');
|
|
5460
|
+
if (payload.filePath !== void 0 && typeof payload.filePath !== "string") {
|
|
5461
|
+
throw new Error('read-diff payload has a non-string "filePath"');
|
|
5462
|
+
}
|
|
5463
|
+
if (payload.scope !== void 0 && payload.scope !== "working" && payload.scope !== "staged" && payload.scope !== "branch") {
|
|
5464
|
+
throw new Error('read-diff payload has an invalid "scope"');
|
|
5465
|
+
}
|
|
5466
|
+
if (payload.action !== void 0 && payload.action !== "subscribe" && payload.action !== "unsubscribe") {
|
|
5467
|
+
throw new Error('read-diff payload has an invalid "action"');
|
|
5468
|
+
}
|
|
5469
|
+
return {
|
|
5470
|
+
taskId: payload.taskId,
|
|
5471
|
+
projectId: payload.projectId,
|
|
5472
|
+
filePath: payload.filePath,
|
|
5473
|
+
scope: payload.scope,
|
|
5474
|
+
action: payload.action
|
|
5475
|
+
};
|
|
5476
|
+
}
|
|
5477
|
+
function parseSendUserMessageRequestPayload(payload) {
|
|
5478
|
+
if (!isRecord(payload)) throw new Error("send-user-message payload must be an object");
|
|
5479
|
+
if (typeof payload.sessionId !== "string") throw new Error('send-user-message payload missing "sessionId"');
|
|
5480
|
+
if (typeof payload.text !== "string") throw new Error('send-user-message payload missing "text"');
|
|
5481
|
+
return { sessionId: payload.sessionId, text: payload.text };
|
|
5482
|
+
}
|
|
5483
|
+
function parseMoveTaskRequestPayload(payload) {
|
|
5484
|
+
if (!isRecord(payload)) throw new Error("move-task payload must be an object");
|
|
5485
|
+
if (typeof payload.taskId !== "string") throw new Error('move-task payload missing "taskId"');
|
|
5486
|
+
if (typeof payload.targetSwimlaneId !== "string") throw new Error('move-task payload missing "targetSwimlaneId"');
|
|
5487
|
+
if (typeof payload.targetPosition !== "number") throw new Error('move-task payload missing "targetPosition"');
|
|
5488
|
+
if (typeof payload.projectId !== "string") throw new Error('move-task payload missing "projectId"');
|
|
5489
|
+
return {
|
|
5490
|
+
taskId: payload.taskId,
|
|
5491
|
+
targetSwimlaneId: payload.targetSwimlaneId,
|
|
5492
|
+
targetPosition: payload.targetPosition,
|
|
5493
|
+
projectId: payload.projectId
|
|
5494
|
+
};
|
|
5495
|
+
}
|
|
5496
|
+
function parseAnswerPermissionPromptRequestPayload(payload) {
|
|
5497
|
+
if (!isRecord(payload)) throw new Error("answer-permission-prompt payload must be an object");
|
|
5498
|
+
if (typeof payload.sessionId !== "string") throw new Error('answer-permission-prompt payload missing "sessionId"');
|
|
5499
|
+
if (typeof payload.promptId !== "string") throw new Error('answer-permission-prompt payload missing "promptId"');
|
|
5500
|
+
if (typeof payload.keystrokes !== "string") throw new Error('answer-permission-prompt payload missing "keystrokes"');
|
|
5501
|
+
return { sessionId: payload.sessionId, promptId: payload.promptId, keystrokes: payload.keystrokes };
|
|
5502
|
+
}
|
|
5503
|
+
function parseInteractiveTerminalRequestPayload(payload) {
|
|
5504
|
+
if (!isRecord(payload)) throw new Error("interactive-terminal payload must be an object");
|
|
5505
|
+
if (typeof payload.sessionId !== "string") throw new Error('interactive-terminal payload missing "sessionId"');
|
|
5506
|
+
if (typeof payload.data !== "string") throw new Error('interactive-terminal payload missing "data"');
|
|
5507
|
+
return { sessionId: payload.sessionId, data: payload.data };
|
|
5508
|
+
}
|
|
5509
|
+
function parseBoardToolRequestPayload(payload) {
|
|
5510
|
+
if (!isRecord(payload)) throw new Error("board-tool payload must be an object");
|
|
5511
|
+
if (typeof payload.tool !== "string") throw new Error('board-tool payload missing "tool"');
|
|
5512
|
+
if (payload.params === void 0 || !isJsonValue(payload.params)) throw new Error('board-tool payload missing a JSON "params"');
|
|
5513
|
+
return { tool: payload.tool, params: payload.params };
|
|
5514
|
+
}
|
|
5515
|
+
function parseCapabilityRequestPayload(verb, payload) {
|
|
5516
|
+
switch (verb) {
|
|
5517
|
+
case "read-stream":
|
|
5518
|
+
return parseReadStreamRequestPayload(payload);
|
|
5519
|
+
case "read-board":
|
|
5520
|
+
return parseReadBoardRequestPayload(payload);
|
|
5521
|
+
case "read-diff":
|
|
5522
|
+
return parseReadDiffRequestPayload(payload);
|
|
5523
|
+
case "send-user-message":
|
|
5524
|
+
return parseSendUserMessageRequestPayload(payload);
|
|
5525
|
+
case "move-task":
|
|
5526
|
+
return parseMoveTaskRequestPayload(payload);
|
|
5527
|
+
case "answer-permission-prompt":
|
|
5528
|
+
return parseAnswerPermissionPromptRequestPayload(payload);
|
|
5529
|
+
case "interactive-terminal":
|
|
5530
|
+
return parseInteractiveTerminalRequestPayload(payload);
|
|
5531
|
+
case "board-tool-read":
|
|
5532
|
+
case "board-tool-write":
|
|
5533
|
+
return parseBoardToolRequestPayload(payload);
|
|
5534
|
+
default: {
|
|
5535
|
+
const exhaustiveCheck = verb;
|
|
5536
|
+
throw new Error(`Unknown capability verb: ${String(exhaustiveCheck)}`);
|
|
5537
|
+
}
|
|
5538
|
+
}
|
|
5539
|
+
}
|
|
5540
|
+
|
|
4354
5541
|
// src/wire/base64url.ts
|
|
4355
5542
|
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
4356
5543
|
var DECODE_MAP = {};
|
|
@@ -4512,15 +5699,117 @@ function rosterDeviceCapabilitySet(entry) {
|
|
|
4512
5699
|
function capabilitySetToRosterCapabilities(capabilities) {
|
|
4513
5700
|
return capabilitySetToArray(capabilities);
|
|
4514
5701
|
}
|
|
5702
|
+
|
|
5703
|
+
// src/capabilities/board-tools.ts
|
|
5704
|
+
var BOARD_TOOL_READ_NAMES = [
|
|
5705
|
+
"search_tasks",
|
|
5706
|
+
"find_task",
|
|
5707
|
+
"get_current_task",
|
|
5708
|
+
"get_task_stats",
|
|
5709
|
+
"get_usage_stats",
|
|
5710
|
+
"board_summary",
|
|
5711
|
+
"list_sessions",
|
|
5712
|
+
"get_session_history",
|
|
5713
|
+
"get_column_detail",
|
|
5714
|
+
"get_handoff_context",
|
|
5715
|
+
"get_transcript",
|
|
5716
|
+
"get_session_files",
|
|
5717
|
+
"get_session_events"
|
|
5718
|
+
];
|
|
5719
|
+
var BOARD_TOOL_WRITE_NAMES = [
|
|
5720
|
+
"create_task",
|
|
5721
|
+
"update_task",
|
|
5722
|
+
"delete_task",
|
|
5723
|
+
"link_pr",
|
|
5724
|
+
"remove_attachment",
|
|
5725
|
+
"update_column",
|
|
5726
|
+
"create_backlog_task",
|
|
5727
|
+
"promote_backlog",
|
|
5728
|
+
"update_backlog_item",
|
|
5729
|
+
"delete_backlog_item"
|
|
5730
|
+
];
|
|
5731
|
+
function isBoardToolReadName(value) {
|
|
5732
|
+
return BOARD_TOOL_READ_NAMES.includes(value);
|
|
5733
|
+
}
|
|
5734
|
+
function isBoardToolWriteName(value) {
|
|
5735
|
+
return BOARD_TOOL_WRITE_NAMES.includes(value);
|
|
5736
|
+
}
|
|
5737
|
+
|
|
5738
|
+
// src/events/event.ts
|
|
5739
|
+
var BOARD_CHANGES = ["task-created", "task-updated", "task-deleted", "swimlane-updated", "backlog-changed"];
|
|
5740
|
+
function parseActivityEventPayload(payload) {
|
|
5741
|
+
if (!isRecord(payload)) throw new Error("activity payload must be an object");
|
|
5742
|
+
switch (payload.type) {
|
|
5743
|
+
case "activity": {
|
|
5744
|
+
if (!isActivityStateWire(payload.state)) throw new Error('activity payload has an invalid "state"');
|
|
5745
|
+
if (!isActivityReasonWire(payload.reason)) throw new Error('activity payload has an invalid "reason"');
|
|
5746
|
+
return { type: "activity", state: payload.state, reason: payload.reason };
|
|
5747
|
+
}
|
|
5748
|
+
case "usage":
|
|
5749
|
+
return { type: "usage", usage: parseSessionUsageWire(payload.usage) };
|
|
5750
|
+
case "event":
|
|
5751
|
+
return { type: "event", event: parseSessionEventWire(payload.event) };
|
|
5752
|
+
case "permission": {
|
|
5753
|
+
if (typeof payload.promptId !== "string") throw new Error('permission payload is missing "promptId"');
|
|
5754
|
+
if (typeof payload.pending !== "boolean") throw new Error('permission payload is missing "pending"');
|
|
5755
|
+
return { type: "permission", promptId: payload.promptId, pending: payload.pending };
|
|
5756
|
+
}
|
|
5757
|
+
default:
|
|
5758
|
+
throw new Error('activity payload has an unknown "type"');
|
|
5759
|
+
}
|
|
5760
|
+
}
|
|
5761
|
+
function isBridgeEvent(value) {
|
|
5762
|
+
if (!isRecord(value)) return false;
|
|
5763
|
+
switch (value.kind) {
|
|
5764
|
+
case "transcript": {
|
|
5765
|
+
if (typeof value.sessionId !== "string" || typeof value.taskId !== "string") return false;
|
|
5766
|
+
try {
|
|
5767
|
+
parseTranscriptEventPayload(value.payload);
|
|
5768
|
+
return true;
|
|
5769
|
+
} catch {
|
|
5770
|
+
return false;
|
|
5771
|
+
}
|
|
5772
|
+
}
|
|
5773
|
+
case "activity": {
|
|
5774
|
+
if (typeof value.sessionId !== "string" || typeof value.taskId !== "string") return false;
|
|
5775
|
+
try {
|
|
5776
|
+
parseActivityEventPayload(value.payload);
|
|
5777
|
+
return true;
|
|
5778
|
+
} catch {
|
|
5779
|
+
return false;
|
|
5780
|
+
}
|
|
5781
|
+
}
|
|
5782
|
+
case "terminal": {
|
|
5783
|
+
if (typeof value.sessionId !== "string" || typeof value.taskId !== "string") return false;
|
|
5784
|
+
return isRecord(value.payload) && typeof value.payload.data === "string";
|
|
5785
|
+
}
|
|
5786
|
+
case "board": {
|
|
5787
|
+
if (typeof value.projectId !== "string") return false;
|
|
5788
|
+
if (value.taskId !== void 0 && typeof value.taskId !== "string") return false;
|
|
5789
|
+
if (!isRecord(value.payload)) return false;
|
|
5790
|
+
const change = value.payload.change;
|
|
5791
|
+
if (typeof change !== "string" || !BOARD_CHANGES.includes(change)) return false;
|
|
5792
|
+
return Array.isArray(value.payload.ids) && value.payload.ids.every((id) => typeof id === "string");
|
|
5793
|
+
}
|
|
5794
|
+
case "diff":
|
|
5795
|
+
return typeof value.taskId === "string" && value.payload === null;
|
|
5796
|
+
default:
|
|
5797
|
+
return false;
|
|
5798
|
+
}
|
|
5799
|
+
}
|
|
4515
5800
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4516
5801
|
0 && (module.exports = {
|
|
5802
|
+
BOARD_TOOL_READ_NAMES,
|
|
5803
|
+
BOARD_TOOL_WRITE_NAMES,
|
|
4517
5804
|
CAPABILITY_VERBS,
|
|
5805
|
+
COMPRESSION_THRESHOLD,
|
|
4518
5806
|
CipherState,
|
|
4519
5807
|
ED25519_KEY_LENGTH,
|
|
4520
5808
|
FrameTag,
|
|
4521
5809
|
HandshakeState,
|
|
4522
5810
|
IKPSK0_PATTERN,
|
|
4523
5811
|
KK_PATTERN,
|
|
5812
|
+
MAX_DECODED_LENGTH,
|
|
4524
5813
|
MAX_FRAME_LENGTH,
|
|
4525
5814
|
PAIRING_URI_SCHEME,
|
|
4526
5815
|
PROTOCOL_VERSION,
|
|
@@ -4537,6 +5826,7 @@ function capabilitySetToRosterCapabilities(capabilities) {
|
|
|
4537
5826
|
decodeMessage,
|
|
4538
5827
|
decodePairingQrPayload,
|
|
4539
5828
|
deriveSecretstreamPair,
|
|
5829
|
+
deriveSessionSlotId,
|
|
4540
5830
|
deriveShortAuthenticationString,
|
|
4541
5831
|
encodeMessage,
|
|
4542
5832
|
encodePairingQrPayload,
|
|
@@ -4546,8 +5836,30 @@ function capabilitySetToRosterCapabilities(capabilities) {
|
|
|
4546
5836
|
generateEd25519KeyPair,
|
|
4547
5837
|
generateX25519KeyPair,
|
|
4548
5838
|
hexToBytes,
|
|
5839
|
+
isActivityReasonWire,
|
|
5840
|
+
isActivityStateWire,
|
|
5841
|
+
isBoardToolReadName,
|
|
5842
|
+
isBoardToolWriteName,
|
|
5843
|
+
isBridgeEvent,
|
|
4549
5844
|
isCapabilityVerb,
|
|
5845
|
+
isJsonValue,
|
|
5846
|
+
isRecord,
|
|
4550
5847
|
isRosterEntryExpired,
|
|
5848
|
+
parseActivityEventPayload,
|
|
5849
|
+
parseBacklogItemWire,
|
|
5850
|
+
parseBoardColumnWire,
|
|
5851
|
+
parseBoardTaskWire,
|
|
5852
|
+
parseCapabilityRequestPayload,
|
|
5853
|
+
parseDiffFileContentWire,
|
|
5854
|
+
parseDiffFileListWire,
|
|
5855
|
+
parseReadBoardResponsePayload,
|
|
5856
|
+
parseReadDiffResponsePayload,
|
|
5857
|
+
parseReadStreamResponsePayload,
|
|
5858
|
+
parseSessionEventWire,
|
|
5859
|
+
parseSessionUsageWire,
|
|
5860
|
+
parseTranscriptEntriesWire,
|
|
5861
|
+
parseTranscriptEventPayload,
|
|
5862
|
+
parseTranscriptWindowResponsePayload,
|
|
4551
5863
|
randomBytes,
|
|
4552
5864
|
rosterDeviceCapabilitySet,
|
|
4553
5865
|
signRosterEntry,
|