@agentunion/fastaun-browser 0.5.11 → 0.5.13

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/_packed_docs/CHANGELOG.md +46 -0
  3. package/_packed_docs/INDEX.md +3 -3
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +1 -1
  5. package/_packed_docs/agent.md/SCHEMA.md +84 -84
  6. package/_packed_docs/aun/345/210/206/345/270/203/345/274/217/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +8 -6
  7. package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +29 -15
  8. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +21 -3
  9. package/_packed_docs/sdk/09-group-rpc-manual.md +29 -2
  10. package/dist/agent-md-schema.d.ts.map +1 -1
  11. package/dist/agent-md-schema.js +8 -4
  12. package/dist/agent-md-schema.js.map +1 -1
  13. package/dist/bundle.js +565 -298
  14. package/dist/client/delivery.d.ts +1 -0
  15. package/dist/client/delivery.d.ts.map +1 -1
  16. package/dist/client/delivery.js +161 -242
  17. package/dist/client/delivery.js.map +1 -1
  18. package/dist/client/group-state.d.ts.map +1 -1
  19. package/dist/client/group-state.js +1 -0
  20. package/dist/client/group-state.js.map +1 -1
  21. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  22. package/dist/client/rpc-pipeline.js +24 -11
  23. package/dist/client/rpc-pipeline.js.map +1 -1
  24. package/dist/client/v2-e2ee.d.ts +0 -1
  25. package/dist/client/v2-e2ee.d.ts.map +1 -1
  26. package/dist/client/v2-e2ee.js +65 -44
  27. package/dist/client/v2-e2ee.js.map +1 -1
  28. package/dist/client.d.ts +14 -0
  29. package/dist/client.d.ts.map +1 -1
  30. package/dist/client.js +341 -18
  31. package/dist/client.js.map +1 -1
  32. package/dist/facades.d.ts +7 -0
  33. package/dist/facades.d.ts.map +1 -1
  34. package/dist/facades.js +44 -0
  35. package/dist/facades.js.map +1 -1
  36. package/dist/seq-tracker.d.ts +2 -2
  37. package/dist/seq-tracker.d.ts.map +1 -1
  38. package/dist/seq-tracker.js +11 -7
  39. package/dist/seq-tracker.js.map +1 -1
  40. package/dist/tools/cross-sdk-agent.js +50 -12
  41. package/dist/tools/cross-sdk-agent.js.map +1 -1
  42. package/dist/transport.d.ts.map +1 -1
  43. package/dist/transport.js +3 -0
  44. package/dist/transport.js.map +1 -1
  45. package/dist/version.d.ts +1 -1
  46. package/dist/version.js +1 -1
  47. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"v2-e2ee.d.ts","sourceRoot":"","sources":["../../src/client/v2-e2ee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v2-e2ee.d.ts","sourceRoot":"","sources":["../../src/client/v2-e2ee.ts"],"names":[],"mappings":"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"}
@@ -67,11 +67,32 @@ function deduplicateForwardPageMessages(value, afterSeq) {
67
67
  }
68
68
  return [...bySeq.entries()].sort(([a], [b]) => a - b).map(([, row]) => row);
69
69
  }
70
- function shouldContinueForwardPage({ rawCount, nextAfterSeq, nextAfter, limit, hasMoreField, hasMore, serverHead, pendingAckSeq, }) {
70
+ function contiguousPullSeq(afterSeq, seqs, proof) {
71
+ // Forward 原始页中的缺号视为服务端永久空号;页完成后按页内最大
72
+ // seq 推进 A,避免单页空洞阻塞后续 pull/ACK。
73
+ let contiguous = seqs.length > 0 ? Math.max(afterSeq, ...seqs) : afterSeq;
74
+ const serverProof = safeNonNegativeSeq(proof);
75
+ return serverProof !== null ? Math.max(contiguous, serverProof) : contiguous;
76
+ }
77
+ function deduplicatePulledResults(messages) {
78
+ const seen = new Set();
79
+ return messages.filter((message) => {
80
+ if (!isJsonObject(message))
81
+ return true;
82
+ const seq = safeNonNegativeSeq(message.seq);
83
+ if (seq === null || seq <= 0)
84
+ return true;
85
+ if (seen.has(seq))
86
+ return false;
87
+ seen.add(seq);
88
+ return true;
89
+ });
90
+ }
91
+ function shouldContinueForwardPage({ rawCount, nextAfterSeq, nextAfter, limit, hasMoreField, hasMore, serverHead, pendingAckSeq, observedUpper, }) {
71
92
  // 无新 seq 或游标未前进时必须停止,避免错误元数据造成循环。
72
93
  if (rawCount <= 0 || nextAfter <= nextAfterSeq)
73
94
  return false;
74
- if (hasMore || serverHead > nextAfter || pendingAckSeq > 0)
95
+ if (hasMore || serverHead > nextAfter || pendingAckSeq > 0 || observedUpper > nextAfter)
75
96
  return true;
76
97
  // 仅旧服务缺失 has_more 时,以满页保留兼容续拉。
77
98
  return !hasMoreField && limit > 0 && rawCount >= limit;
@@ -889,7 +910,7 @@ export class V2E2EECoordinator {
889
910
  client._clientLog.warn(`V2 sender IK pending group bootstrap failed group=${groupId}: ${String(formatE2EEError(exc))}`);
890
911
  }
891
912
  }
892
- if (!session.getPeerIK(fromAid, senderDeviceId)) {
913
+ if (typeof session.getPeerIK === 'function' && !session.getPeerIK(fromAid, senderDeviceId)) {
893
914
  await this.getV2SenderPubDer(fromAid, senderDeviceId);
894
915
  }
895
916
  }
@@ -930,6 +951,8 @@ export class V2E2EECoordinator {
930
951
  client._v2SenderIKPending.delete(key);
931
952
  const seq = Number(entry.msg.seq ?? 0);
932
953
  if (entry.groupId) {
954
+ if (client._delivery.isSelfSentGroupMessage?.(entry.msg))
955
+ continue;
933
956
  plaintext = normalizeGroupMentionMode(plaintext, entry.msg, entry.msg.envelope_json);
934
957
  plaintext.group_id = entry.groupId;
935
958
  await client._publishPulledMessage('group.message_created', `group:${entry.groupId}`, seq, plaintext, false, 'pending_retry');
@@ -1123,6 +1146,9 @@ export class V2E2EECoordinator {
1123
1146
  client._clientLog.warn(`Group Tail 单条消息解密失败,连续性证明仍保留: group=${groupId}, seq=${seq}`);
1124
1147
  return null;
1125
1148
  }
1149
+ if (publish && !history && client._delivery.isSelfSentGroupMessage?.(msg)) {
1150
+ return plaintext;
1151
+ }
1126
1152
  if (publish) {
1127
1153
  if (orderedPublish) {
1128
1154
  await client._delivery.publishOrderedMessage('group.message_created', `group:${groupId}`, seq, plaintext, source);
@@ -1139,14 +1165,6 @@ export class V2E2EECoordinator {
1139
1165
  async decodeInlineGroupMessage(msg, groupId, groupAid) {
1140
1166
  return await this.decodeGroupWindowMessage(msg, groupId, groupAid, false, false, 'inline_push');
1141
1167
  }
1142
- async applyTailFloor(ns, floor) {
1143
- const client = this.client;
1144
- if (!ns || floor <= 0 || client._seqTracker.getContiguousSeq(ns) >= floor)
1145
- return;
1146
- client._seqTracker.forceContiguousSeq(ns, floor);
1147
- client._persistSeq(ns);
1148
- await client._saveSeqTrackerState?.();
1149
- }
1150
1168
  async pullV2TailInternal(params, deferPublish = false) {
1151
1169
  const client = this.client;
1152
1170
  if (params.window_mode !== 'tail')
@@ -1159,9 +1177,6 @@ export class V2E2EECoordinator {
1159
1177
  if (ns)
1160
1178
  client._delivery.onPullStarted?.(ns);
1161
1179
  const result = await client._callRawV2Rpc('message.v2.pull', { window_mode: 'tail', after_seq: afterSeq, limit, _rpc_foreground: true });
1162
- const floor = Number(result.retention_floor_seq ?? 0);
1163
- const previous = ns ? client._seqTracker.getSyncState(ns) : null;
1164
- await this.applyTailFloor(ns, Number.isSafeInteger(floor) ? floor : 0);
1165
1180
  const page = validateTailPage(result, afterSeq, limit);
1166
1181
  if (ns) {
1167
1182
  client._seqTracker.commitTailWindow(ns, {
@@ -1177,8 +1192,6 @@ export class V2E2EECoordinator {
1177
1192
  decoded.push(plaintext);
1178
1193
  }
1179
1194
  const ack = ns ? client._seqTracker.getContiguousSeq(ns) : 0;
1180
- if (previous && ack > previous.ack)
1181
- await this.ackV2(ack);
1182
1195
  if (ns)
1183
1196
  client._delivery.onPullPage?.(ns, decoded.length, result.has_more === true, page.head, typeof result.remaining === 'number' && Number.isSafeInteger(result.remaining) && result.remaining >= 0 ? result.remaining : null, page.messages.length, ack, page.head);
1184
1197
  client._delivery.onPullWorkSettled?.();
@@ -1297,6 +1310,7 @@ export class V2E2EECoordinator {
1297
1310
  ? client._seqTracker.snapshotNamespace(ns)
1298
1311
  : null;
1299
1312
  const pageMaxSeq = seqs.length > 0 ? Math.max(...seqs) : nextAfterSeq;
1313
+ const pageContiguousSeq = contiguousPullSeq(pageContigBefore, seqs, result.contiguous_seq);
1300
1314
  const deferredKeyFetches = new Map();
1301
1315
  let blockedSeq = 0;
1302
1316
  const pageDecryptedBefore = decrypted.length;
@@ -1392,7 +1406,7 @@ export class V2E2EECoordinator {
1392
1406
  const serverAckSeq = parsedServerAckSeq ?? 0;
1393
1407
  const retentionFloor = Math.max(0, Number(result.retention_floor_seq ?? 0));
1394
1408
  if (ns) {
1395
- const commitTarget = blockedSeq > 0 ? pageContigBefore : Math.max(pageContigBefore, Number.isFinite(retentionFloor) ? retentionFloor : 0, pageCount === 1 ? deferredServerCursor : 0, seqs.length > 0 ? pageMaxSeq : pageContigBefore);
1409
+ const commitTarget = Math.max(pageContigBefore, Number.isFinite(retentionFloor) ? retentionFloor : 0, pageCount === 1 ? deferredServerCursor : 0, serverAckSeq, blockedSeq > 0 ? blockedSeq - 1 : pageContiguousSeq);
1396
1410
  let ackSeq = pageContigBefore;
1397
1411
  let contigAdvanced = false;
1398
1412
  try {
@@ -1436,14 +1450,13 @@ export class V2E2EECoordinator {
1436
1450
  const knownServerAckSeq = hasServerAckSeq
1437
1451
  ? serverAckSeq
1438
1452
  : (pageCount === 1 ? deferredServerCursor : 0);
1439
- const ackNeeded = blockedSeq <= 0
1440
- && ackSeq > 0
1453
+ const ackNeeded = ackSeq > 0
1441
1454
  && ackSeq > lastAutoAckSeq
1442
1455
  && ((hasServerAckSeq && ackSeq > serverAckSeq)
1443
1456
  || (contigAdvanced && ackSeq > knownServerAckSeq));
1444
1457
  if (ackNeeded) {
1445
1458
  this.recordForwardAck(ns, ackSeq);
1446
- const nextAfter = Math.max(pageMaxSeq, nextAfterSeq);
1459
+ const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
1447
1460
  const canContinuePage = blockedSeq <= 0 && messages.length > 0 && nextAfter > nextAfterSeq;
1448
1461
  if (canContinuePage) {
1449
1462
  pendingAckSeq = Math.max(pendingAckSeq, ackSeq);
@@ -1457,7 +1470,7 @@ export class V2E2EECoordinator {
1457
1470
  }
1458
1471
  if (ns)
1459
1472
  client._delivery.onPullPage?.(ns, decrypted.length - pageDecryptedBefore, hasMore, pageMaxSeq, typeof result.remaining === 'number' && Number.isSafeInteger(result.remaining) && result.remaining >= 0 ? result.remaining : null, messages.length, client._seqTracker.getContiguousSeq(ns), pageMaxSeq);
1460
- const nextAfter = Math.max(pageMaxSeq, nextAfterSeq);
1473
+ const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
1461
1474
  const rawCount = messages.length;
1462
1475
  if (blockedSeq > 0)
1463
1476
  break;
@@ -1470,6 +1483,8 @@ export class V2E2EECoordinator {
1470
1483
  hasMore,
1471
1484
  serverHead,
1472
1485
  pendingAckSeq,
1486
+ observedUpper: typeof client._seqTracker.getMaxSeenSeq === 'function'
1487
+ ? client._seqTracker.getMaxSeenSeq(ns) : nextAfter,
1473
1488
  });
1474
1489
  if (!shouldContinue)
1475
1490
  break;
@@ -1493,7 +1508,7 @@ export class V2E2EECoordinator {
1493
1508
  }
1494
1509
  }
1495
1510
  client._delivery.onPullWorkSettled?.();
1496
- return decrypted;
1511
+ return deduplicatePulledResults(decrypted);
1497
1512
  }
1498
1513
  async confirmForwardP2PAck(upToSeq, inlineGeneration) {
1499
1514
  const ns = this.client._aid ? `p2p:${this.client._aid}` : '';
@@ -1591,10 +1606,7 @@ export class V2E2EECoordinator {
1591
1606
  if (isJsonObject(result)) {
1592
1607
  const seq = Number(result.seq ?? 0);
1593
1608
  if (seq > 0) {
1594
- const ns = `group:${gid}`;
1595
- client._seqTracker.onMessageSeq(ns, seq);
1596
- client._markPublishedSeq(ns, seq);
1597
- await client._saveSeqTrackerState();
1609
+ client._markPublishedSeq(`group:${gid}`, seq);
1598
1610
  }
1599
1611
  }
1600
1612
  return client._delivery.attachSendResultEnvelope('group.send', withExplicitGroupAid({
@@ -1615,10 +1627,7 @@ export class V2E2EECoordinator {
1615
1627
  if (isJsonObject(result)) {
1616
1628
  const seq = Number(result.seq ?? 0);
1617
1629
  if (seq > 0) {
1618
- const ns = `group:${gid}`;
1619
- client._seqTracker.onMessageSeq(ns, seq);
1620
- client._markPublishedSeq(ns, seq);
1621
- await client._saveSeqTrackerState();
1630
+ client._markPublishedSeq(`group:${gid}`, seq);
1622
1631
  }
1623
1632
  }
1624
1633
  return client._delivery.attachSendResultEnvelope('group.send', withExplicitGroupAid({
@@ -1660,9 +1669,6 @@ export class V2E2EECoordinator {
1660
1669
  const resultAid = String(result.group_aid ?? result.groupAid ?? '').trim();
1661
1670
  if (resultAid)
1662
1671
  groupAid = resultAid;
1663
- const floor = Number(result.retention_floor_message_seq ?? result.retention_floor_seq ?? 0);
1664
- const previous = client._seqTracker.getSyncState(ns);
1665
- await this.applyTailFloor(ns, Number.isSafeInteger(floor) ? floor : 0);
1666
1672
  const page = validateTailPage(result, afterSeq, limit);
1667
1673
  client._seqTracker.commitTailWindow(ns, {
1668
1674
  windowStartSeq: page.windowStart, headSeq: page.head, coveredThroughSeq: page.head, pageLimit: limit,
@@ -1677,8 +1683,6 @@ export class V2E2EECoordinator {
1677
1683
  decoded.push(plaintext);
1678
1684
  }
1679
1685
  const ack = client._seqTracker.getContiguousSeq(ns);
1680
- if (ack > previous.ack)
1681
- await this.ackGroupV2(groupId, ack, groupAid);
1682
1686
  if (ownsCursor)
1683
1687
  client._delivery.onPullPage?.(ns, decoded.length, result.has_more === true, page.head, typeof result.remaining === 'number' && Number.isSafeInteger(result.remaining) && result.remaining >= 0 ? result.remaining : null, page.messages.length, ack, page.head);
1684
1688
  client._delivery.onPullWorkSettled?.();
@@ -1828,6 +1832,7 @@ export class V2E2EECoordinator {
1828
1832
  ? client._seqTracker.snapshotNamespace(ns)
1829
1833
  : null;
1830
1834
  const pageMaxSeq = seqs.length > 0 ? Math.max(...seqs) : nextAfterSeq;
1835
+ const pageContiguousSeq = contiguousPullSeq(pageContigBefore, seqs, result.contiguous_seq);
1831
1836
  const deferredKeyFetches = new Map();
1832
1837
  let blockedSeq = 0;
1833
1838
  const pageDecryptedBefore = decrypted.length;
@@ -1868,7 +1873,12 @@ export class V2E2EECoordinator {
1868
1873
  };
1869
1874
  v1Msg = normalizeGroupMentionMode(v1Msg, msg, msg.envelope_json);
1870
1875
  attachGatewayProximity(v1Msg, msg);
1871
- await client._publishPulledMessage('group.message_created', ns, seq, v1Msg, false);
1876
+ if (!client._delivery.isSelfSentGroupMessage?.(msg)) {
1877
+ await client._publishPulledMessage('group.message_created', ns, seq, v1Msg, false);
1878
+ }
1879
+ else {
1880
+ client._markPublishedSeq(ns, seq);
1881
+ }
1872
1882
  decrypted.push(v1Msg);
1873
1883
  continue;
1874
1884
  }
@@ -1904,7 +1914,12 @@ export class V2E2EECoordinator {
1904
1914
  if (plaintext) {
1905
1915
  plaintext.group_id = gid;
1906
1916
  plaintext.group_aid = eventGroupAid;
1907
- await client._publishPulledMessage('group.message_created', ns, seq, plaintext, false);
1917
+ if (!client._delivery.isSelfSentGroupMessage?.(msg)) {
1918
+ await client._publishPulledMessage('group.message_created', ns, seq, plaintext, false);
1919
+ }
1920
+ else {
1921
+ client._markPublishedSeq(ns, seq);
1922
+ }
1908
1923
  decrypted.push(plaintext);
1909
1924
  }
1910
1925
  }
@@ -1933,7 +1948,12 @@ export class V2E2EECoordinator {
1933
1948
  plaintext = normalizeGroupMentionMode(plaintext, msg, msg.envelope_json);
1934
1949
  plaintext.group_id = gid;
1935
1950
  plaintext.group_aid = eventGroupAid;
1936
- await client._publishPulledMessage('group.message_created', ns, seq, plaintext, false);
1951
+ if (!client._delivery.isSelfSentGroupMessage?.(msg)) {
1952
+ await client._publishPulledMessage('group.message_created', ns, seq, plaintext, false);
1953
+ }
1954
+ else {
1955
+ client._markPublishedSeq(ns, seq);
1956
+ }
1937
1957
  decrypted.push(plaintext);
1938
1958
  }
1939
1959
  const hasServerCursor = cursor !== null && Object.prototype.hasOwnProperty.call(cursor, 'current_seq');
@@ -1942,7 +1962,7 @@ export class V2E2EECoordinator {
1942
1962
  const retentionFloor = Math.max(Number(result.retention_floor_message_seq ?? result.retention_floor_seq ?? 0), Number(cursor?.retention_floor_seq ?? 0));
1943
1963
  const visibilityFloor = Math.max(0, Math.max(0, Number(result.earliest_available_message_seq ?? 1) - 1), Number(cursor?.join_seq ?? 0));
1944
1964
  const effectiveFloor = Math.max(retentionFloor, visibilityFloor);
1945
- const commitTarget = blockedSeq > 0 ? pageContigBefore : Math.max(pageContigBefore, Number.isFinite(effectiveFloor) ? effectiveFloor : 0, ownsCursor && pageCount === 1 ? deferredServerCursor : 0, seqs.length > 0 ? pageMaxSeq : pageContigBefore);
1965
+ const commitTarget = Math.max(pageContigBefore, Number.isFinite(effectiveFloor) ? effectiveFloor : 0, ownsCursor && pageCount === 1 ? deferredServerCursor : 0, cursorCurrentSeq, blockedSeq > 0 ? blockedSeq - 1 : pageContiguousSeq);
1946
1966
  let ackSeq = pageContigBefore;
1947
1967
  let contigAdvanced = false;
1948
1968
  if (ownsCursor) {
@@ -1989,15 +2009,14 @@ export class V2E2EECoordinator {
1989
2009
  const knownServerCursorSeq = hasServerCursor
1990
2010
  ? cursorCurrentSeq
1991
2011
  : (ownsCursor && pageCount === 1 ? deferredServerCursor : 0);
1992
- const ackNeeded = blockedSeq <= 0
1993
- && ackSeq > 0
2012
+ const ackNeeded = ackSeq > 0
1994
2013
  && ackSeq > lastAutoAckSeq
1995
2014
  && ownsCursor
1996
2015
  && ((hasServerCursor && ackSeq > cursorCurrentSeq)
1997
2016
  || (contigAdvanced && ackSeq > knownServerCursorSeq));
1998
2017
  if (ackNeeded) {
1999
2018
  this.recordForwardAck(ns, ackSeq);
2000
- const nextAfter = Math.max(pageMaxSeq, nextAfterSeq);
2019
+ const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
2001
2020
  const canContinuePage = blockedSeq <= 0 && messages.length > 0 && nextAfter > nextAfterSeq && ownsCursor;
2002
2021
  if (canContinuePage) {
2003
2022
  pendingAckSeq = Math.max(pendingAckSeq, ackSeq);
@@ -2008,7 +2027,7 @@ export class V2E2EECoordinator {
2008
2027
  lastAutoAckSeq = Math.max(lastAutoAckSeq, ackSeq);
2009
2028
  }
2010
2029
  }
2011
- const nextAfter = Math.max(pageMaxSeq, nextAfterSeq);
2030
+ const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
2012
2031
  if (!ownsCursor)
2013
2032
  break;
2014
2033
  const rawCount = messages.length;
@@ -2023,6 +2042,8 @@ export class V2E2EECoordinator {
2023
2042
  hasMore,
2024
2043
  serverHead,
2025
2044
  pendingAckSeq,
2045
+ observedUpper: typeof client._seqTracker.getMaxSeenSeq === 'function'
2046
+ ? client._seqTracker.getMaxSeenSeq(ns) : nextAfter,
2026
2047
  });
2027
2048
  if (!shouldContinue)
2028
2049
  break;
@@ -2047,7 +2068,7 @@ export class V2E2EECoordinator {
2047
2068
  }
2048
2069
  }
2049
2070
  client._delivery.onPullWorkSettled?.();
2050
- return decrypted;
2071
+ return deduplicatePulledResults(decrypted);
2051
2072
  }
2052
2073
  async confirmForwardGroupAck(groupId, upToSeq, groupAid) {
2053
2074
  const ns = `group:${String(groupId ?? '').trim()}`;