@agentunion/fastaun 0.5.20 → 0.5.22

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 (128) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/_packed_docs/CHANGELOG.md +104 -0
  3. package/_packed_docs/INDEX.md +59 -34
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +59 -52
  5. package/_packed_docs/agent.md/working/AID/347/261/273/345/236/213-owner/345/205/263/347/263/273/344/270/216/346/215/242owner/347/274/226/346/216/222/346/226/271/346/241/210.md +530 -0
  6. package/_packed_docs/agent.md/working/AID/347/261/273/345/236/213-owner/345/205/263/347/263/273/345/256/214/346/225/264/350/256/276/350/256/241/344/270/216/345/256/236/346/226/275/350/256/241/345/210/222.md +685 -0
  7. package/_packed_docs/agent.md/working/agent.md-schema/344/270/216/347/255/276/345/217/221/351/252/214/347/255/276/346/265/201/347/250/213/346/276/204/346/270/205.md +349 -0
  8. package/_packed_docs/agent.md/working//346/234/254/345/234/260Docker/346/265/213/350/257/225Bug/346/270/205/345/215/225.md +40 -0
  9. 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 +307 -67
  10. package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +41 -15
  11. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1433 -1392
  12. package/_packed_docs/protocol/08-AUN-E2EE.md +17 -12
  13. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +30 -8
  14. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/211.md +2 -0
  15. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +33 -22
  16. package/_packed_docs/sdk/0.5.21-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +368 -0
  17. package/_packed_docs/sdk/0.5.21-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +350 -0
  18. package/_packed_docs/sdk/0.5.22-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +212 -0
  19. package/_packed_docs/sdk/0.5.22-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +199 -0
  20. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +1 -1
  21. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +5 -1
  22. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +64 -64
  23. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +4 -1
  24. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +42 -39
  25. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +163 -14
  26. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +48 -47
  27. package/_packed_docs/sdk/09-group-rpc-manual.md +15 -2
  28. package/_packed_docs/sdk/09-message-rpc-manual.md +250 -160
  29. package/_packed_docs/sdk/09-storage-rpc-manual.md +64 -7
  30. package/_packed_docs/sdk/09-/345/207/255/350/257/201/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +73 -0
  31. package/_packed_docs/sdk/09-/347/273/204/347/273/207/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +90 -0
  32. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +33 -25
  33. package/_packed_docs/sdk/INDEX.md +67 -33
  34. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +74 -57
  35. package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +312 -300
  36. package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +322 -382
  37. package/_packed_docs/sdk/Ownership2.1-TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +708 -708
  38. package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +28 -20
  39. package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +190 -97
  40. package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +158 -127
  41. package/dist/agent-md-schema.js +6 -4
  42. package/dist/agent-md-schema.js.map +1 -1
  43. package/dist/agent-md.d.ts +22 -2
  44. package/dist/agent-md.js +92 -68
  45. package/dist/agent-md.js.map +1 -1
  46. package/dist/aid-store.d.ts +13 -0
  47. package/dist/aid-store.js +50 -15
  48. package/dist/aid-store.js.map +1 -1
  49. package/dist/auth.d.ts +1 -0
  50. package/dist/auth.js +22 -2
  51. package/dist/auth.js.map +1 -1
  52. package/dist/cert-utils.d.ts +1 -0
  53. package/dist/cert-utils.js +13 -0
  54. package/dist/cert-utils.js.map +1 -1
  55. package/dist/client/delivery.d.ts +87 -1
  56. package/dist/client/delivery.js +1387 -139
  57. package/dist/client/delivery.js.map +1 -1
  58. package/dist/client/group-state.js +3 -0
  59. package/dist/client/group-state.js.map +1 -1
  60. package/dist/client/rpc-pipeline.d.ts +4 -1
  61. package/dist/client/rpc-pipeline.js +149 -37
  62. package/dist/client/rpc-pipeline.js.map +1 -1
  63. package/dist/client/v2-e2ee.d.ts +12 -2
  64. package/dist/client/v2-e2ee.js +831 -304
  65. package/dist/client/v2-e2ee.js.map +1 -1
  66. package/dist/client.d.ts +26 -2
  67. package/dist/client.js +412 -68
  68. package/dist/client.js.map +1 -1
  69. package/dist/config.d.ts +4 -0
  70. package/dist/config.js +1 -0
  71. package/dist/config.js.map +1 -1
  72. package/dist/events.d.ts +18 -1
  73. package/dist/events.js +148 -9
  74. package/dist/events.js.map +1 -1
  75. package/dist/facades.d.ts +43 -1
  76. package/dist/facades.js +363 -7
  77. package/dist/facades.js.map +1 -1
  78. package/dist/group-fs.d.ts +1 -0
  79. package/dist/group-fs.js +37 -19
  80. package/dist/group-fs.js.map +1 -1
  81. package/dist/index.d.ts +5 -3
  82. package/dist/index.js +1 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/keystore/aid-db.d.ts +6 -1
  85. package/dist/keystore/aid-db.js +184 -42
  86. package/dist/keystore/aid-db.js.map +1 -1
  87. package/dist/keystore/index.d.ts +14 -0
  88. package/dist/keystore/local-token-store.d.ts +9 -1
  89. package/dist/keystore/local-token-store.js +79 -14
  90. package/dist/keystore/local-token-store.js.map +1 -1
  91. package/dist/org-protocol.d.ts +46 -0
  92. package/dist/org-protocol.js +802 -12
  93. package/dist/org-protocol.js.map +1 -1
  94. package/dist/ownership-v21.d.ts +36 -5
  95. package/dist/ownership-v21.js +168 -52
  96. package/dist/ownership-v21.js.map +1 -1
  97. package/dist/ownership-workflow.d.ts +24 -2
  98. package/dist/ownership-workflow.js +682 -41
  99. package/dist/ownership-workflow.js.map +1 -1
  100. package/dist/secret-store/file-store.js +84 -0
  101. package/dist/secret-store/file-store.js.map +1 -1
  102. package/dist/seq-tracker.d.ts +1 -0
  103. package/dist/seq-tracker.js +2 -2
  104. package/dist/seq-tracker.js.map +1 -1
  105. package/dist/storage/lowlevel.d.ts +6 -0
  106. package/dist/storage/lowlevel.js +24 -7
  107. package/dist/storage/lowlevel.js.map +1 -1
  108. package/dist/storage/read-cache.d.ts +70 -0
  109. package/dist/storage/read-cache.js +625 -0
  110. package/dist/storage/read-cache.js.map +1 -0
  111. package/dist/storage/vfs.d.ts +2 -0
  112. package/dist/storage/vfs.js +50 -15
  113. package/dist/storage/vfs.js.map +1 -1
  114. package/dist/tools/cross-sdk-agent.d.ts +86 -3
  115. package/dist/tools/cross-sdk-agent.js +758 -46
  116. package/dist/tools/cross-sdk-agent.js.map +1 -1
  117. package/dist/transport.d.ts +3 -0
  118. package/dist/transport.js +104 -46
  119. package/dist/transport.js.map +1 -1
  120. package/dist/types.d.ts +1 -0
  121. package/dist/v2/e2ee/encrypt-group.js +1 -0
  122. package/dist/v2/e2ee/encrypt-group.js.map +1 -1
  123. package/dist/v2/e2ee/encrypt-p2p.js +1 -0
  124. package/dist/v2/e2ee/encrypt-p2p.js.map +1 -1
  125. package/dist/v2/e2ee/types.d.ts +1 -0
  126. package/dist/version.d.ts +1 -1
  127. package/dist/version.js +1 -1
  128. package/package.json +1 -1
@@ -108,6 +108,7 @@ export declare class RPCTransport {
108
108
  setMetaObserver(observer: MetaObserver | null): void;
109
109
  setProtocolMetaObserver(observer: MetaObserver | null): void;
110
110
  setProtocolDisconnectCallback(callback: DisconnectCallback | null): void;
111
+ getTraceMode(): string;
111
112
  /** 设置 trace 模式:off / log / diag */
112
113
  setTraceMode(mode: string): void;
113
114
  /** 注册 trace observer;observer(traceInfo) 在每次 RPC/事件携带 _trace 时调用。 */
@@ -142,6 +143,8 @@ export declare class RPCTransport {
142
143
  * 发送 JSON-RPC 2.0 请求并等待响应。
143
144
  */
144
145
  call(method: string, params?: RpcParams, timeout?: number, trace?: string, background?: boolean): Promise<RpcResult>;
146
+ private _callWithSent;
147
+ private _call;
145
148
  private _callLocal;
146
149
  /** 发送 JSON-RPC 2.0 Notification,不分配 id,也不等待响应。 */
147
150
  notify(method: string, params?: RpcParams | null): Promise<void>;
package/dist/transport.js CHANGED
@@ -713,6 +713,12 @@ export class RPCTransport {
713
713
  pending.reject(new ConnectionError('stale transport worker response'));
714
714
  return;
715
715
  }
716
+ if (message.type === 'sent') {
717
+ const onSent = pending.onSent;
718
+ delete pending.onSent;
719
+ void onSent?.();
720
+ return;
721
+ }
716
722
  this._workerPending.delete(message.id);
717
723
  if (pending.timer !== null)
718
724
  clearTimeout(pending.timer);
@@ -720,15 +726,22 @@ export class RPCTransport {
720
726
  && message.ok && typeof message.generation === 'number') {
721
727
  this._workerGeneration = message.generation;
722
728
  }
723
- if (message.ok)
724
- pending.resolve(message.result);
725
- else {
726
- if (pending.commandType === 'connect' && pending.connectAttempt === this._workerConnectAttempt) {
727
- this._workerGeneration = null;
728
- this._workerBufferedEvents = [];
729
+ const settleReply = () => {
730
+ if (message.ok)
731
+ pending.resolve(message.result);
732
+ else {
733
+ if (pending.commandType === 'connect' && pending.connectAttempt === this._workerConnectAttempt) {
734
+ this._workerGeneration = null;
735
+ this._workerBufferedEvents = [];
736
+ }
737
+ pending.reject(deserializeWorkerError(message.error));
729
738
  }
730
- pending.reject(deserializeWorkerError(message.error));
739
+ };
740
+ if (pending.sentCheckpoint && (message.ok || !pending.onSent)) {
741
+ void pending.sentCheckpoint.then(settleReply, pending.reject);
731
742
  }
743
+ else
744
+ settleReply();
732
745
  });
733
746
  worker.on('error', (error) => {
734
747
  this._disableNetworkWorker(worker, error);
@@ -856,8 +869,12 @@ export class RPCTransport {
856
869
  const targetAid = this._serviceEventCurrentAid();
857
870
  const targetVersion = this._serviceEventIdentityVersion();
858
871
  const value = structuredClone(payload);
859
- void Promise.resolve().then(() => this._serviceEventVerifier(event, value)).then((result) => {
860
- if (result.signature_valid === true && typeof result.credential_known === 'boolean' && current() && targetAid === this._serviceEventCurrentAid() && targetVersion === this._serviceEventIdentityVersion())
872
+ void Promise.resolve().then(() => {
873
+ if (!current() || targetAid !== this._serviceEventCurrentAid() || targetVersion !== this._serviceEventIdentityVersion())
874
+ return null;
875
+ return this._serviceEventVerifier(event, value);
876
+ }).then((result) => {
877
+ if (result?.signature_valid === true && typeof result.credential_known === 'boolean' && current() && targetAid === this._serviceEventCurrentAid() && targetVersion === this._serviceEventIdentityVersion())
861
878
  this._dispatcher.enqueue(event, value);
862
879
  }).catch(() => { });
863
880
  }
@@ -867,7 +884,7 @@ export class RPCTransport {
867
884
  for (const message of buffered)
868
885
  this._handleWorkerEvent(message);
869
886
  }
870
- _workerCommand(command, connectAttempt) {
887
+ _workerCommand(command, connectAttempt, onSent, sentCheckpoint) {
871
888
  this._ensureNetworkWorker();
872
889
  if (!this._worker)
873
890
  return Promise.reject(new ConnectionError('transport worker unavailable'));
@@ -898,6 +915,8 @@ export class RPCTransport {
898
915
  timer,
899
916
  commandType: command.type,
900
917
  connectAttempt,
918
+ onSent,
919
+ sentCheckpoint,
901
920
  });
902
921
  const postCommand = () => {
903
922
  if (!this._workerPending.has(id))
@@ -987,6 +1006,9 @@ export class RPCTransport {
987
1006
  this._onDisconnect = callback;
988
1007
  this._protocolDisconnectCallback = callback !== null;
989
1008
  }
1009
+ getTraceMode() {
1010
+ return this._traceMode;
1011
+ }
990
1012
  /** 设置 trace 模式:off / log / diag */
991
1013
  setTraceMode(mode) {
992
1014
  if (mode !== 'off' && mode !== 'log' && mode !== 'diag') {
@@ -1488,12 +1510,34 @@ export class RPCTransport {
1488
1510
  * 发送 JSON-RPC 2.0 请求并等待响应。
1489
1511
  */
1490
1512
  call(method, params, timeout, trace, background = false) {
1513
+ return this._call(method, params, timeout, trace, background);
1514
+ }
1515
+ _callWithSent(method, params, onSent, timeout, trace, background = false) {
1516
+ let resolveSent;
1517
+ let rejectSent;
1518
+ const sent = new Promise((resolve, reject) => { resolveSent = resolve; rejectSent = reject; });
1519
+ let request;
1520
+ const recordSent = async () => {
1521
+ try {
1522
+ await onSent();
1523
+ resolveSent();
1524
+ }
1525
+ catch (error) {
1526
+ rejectSent(error);
1527
+ request?.cancel?.();
1528
+ }
1529
+ };
1530
+ request = this._call(method, params, timeout, trace, background, recordSent, sent);
1531
+ const result = Promise.all([request, sent]).then(([response]) => response);
1532
+ return Object.assign(result, { cancel: request.cancel });
1533
+ }
1534
+ _call(method, params, timeout, trace, background = false, onSent, sentCheckpoint) {
1491
1535
  if (this._worker) {
1492
1536
  const requestContext = trafficLogContext('outbound', params ?? {});
1493
1537
  const requestLog = withLogContext(this._logger, requestContext);
1494
1538
  const responseLog = withLogContext(requestLog, { direction: 'inbound', peerAid: requestContext.peerAid });
1495
1539
  requestLog.debug(`RPC request queued: method=${method}`);
1496
- const request = this._workerCommand({ type: 'call', method, params, timeout, trace, background });
1540
+ const request = this._workerCommand({ type: 'call', method, params, timeout, trace, background, ...(onSent ? { trackSent: true } : {}) }, undefined, onSent, sentCheckpoint);
1497
1541
  const result = request.then((result) => {
1498
1542
  responseLog.debug(`RPC response ok: method=${method}`);
1499
1543
  return result;
@@ -1503,9 +1547,9 @@ export class RPCTransport {
1503
1547
  });
1504
1548
  return Object.assign(result, { cancel: request.cancel });
1505
1549
  }
1506
- return this._enqueueActorStart(() => this._callLocal(method, params, timeout, trace, background), () => new TimeoutError(`rpc cancelled: ${method}`, { retryable: true }));
1550
+ return this._enqueueActorStart(() => this._callLocal(method, params, timeout, trace, background, onSent, sentCheckpoint), () => new TimeoutError(`rpc cancelled: ${method}`, { retryable: true }));
1507
1551
  }
1508
- _callLocal(method, params, timeout, trace, background = false) {
1552
+ _callLocal(method, params, timeout, trace, background = false, onSent, sentCheckpoint) {
1509
1553
  if (this._closed || !this._ws) {
1510
1554
  const suffix = this._lastCloseCode !== null ? `: close code ${this._lastCloseCode}` : '';
1511
1555
  throw new ConnectionError(`transport not connected${suffix}`, {
@@ -1558,42 +1602,48 @@ export class RPCTransport {
1558
1602
  const pending = {
1559
1603
  resolve: (response) => {
1560
1604
  clearTimeout(timer);
1561
- const elapsed = Date.now() - tStart;
1562
- if (response.error !== undefined) {
1563
- responseLog.debug(`RPC error response: method=${method}, id=${rpcId}, elapsed=${elapsed}ms, error=${JSON.stringify(response.error)}`);
1564
- if (traceId) {
1565
- responseLog.info(`[trace=${traceId}] rpc_recv method=${method} rpc_id=${rpcId} duration_ms=${elapsed} status=error`);
1566
- }
1567
- // 处理 error 路径的 _trace
1568
- const respTrace = response._trace;
1569
- if (respTrace && typeof respTrace === 'object' && !Array.isArray(respTrace)) {
1570
- this._handleResponseTrace(method, 'error', elapsed, respTrace, responseLog);
1571
- }
1572
- reject(mapRemoteError(response.error));
1573
- }
1574
- else if (response.result !== undefined) {
1575
- responseLog.debug(`RPC response ok: method=${method}, id=${rpcId}, elapsed=${elapsed}ms ${summarizeDict(response.result, DIAG_RESULT_FIELDS)}`);
1576
- if (traceId) {
1577
- responseLog.info(`[trace=${traceId}] rpc_recv method=${method} rpc_id=${rpcId} duration_ms=${elapsed} status=ok`);
1605
+ const acceptResponse = () => {
1606
+ const elapsed = Date.now() - tStart;
1607
+ if (response.error !== undefined) {
1608
+ responseLog.debug(`RPC error response: method=${method}, id=${rpcId}, elapsed=${elapsed}ms, error=${JSON.stringify(response.error)}`);
1609
+ if (traceId) {
1610
+ responseLog.info(`[trace=${traceId}] rpc_recv method=${method} rpc_id=${rpcId} duration_ms=${elapsed} status=error`);
1611
+ }
1612
+ // 处理 error 路径的 _trace
1613
+ const respTrace = response._trace;
1614
+ if (respTrace && typeof respTrace === 'object' && !Array.isArray(respTrace)) {
1615
+ this._handleResponseTrace(method, 'error', elapsed, respTrace, responseLog);
1616
+ }
1617
+ reject(mapRemoteError(response.error));
1578
1618
  }
1579
- // 透传 envelope._meta 给 observer
1580
- if (this._metaObserver !== null) {
1581
- const meta = response._meta;
1582
- if (meta !== null && typeof meta === 'object' && !Array.isArray(meta)) {
1583
- this._queueObserver('meta_observer', this._metaObserver, meta);
1619
+ else if (response.result !== undefined) {
1620
+ responseLog.debug(`RPC response ok: method=${method}, id=${rpcId}, elapsed=${elapsed}ms ${summarizeDict(response.result, DIAG_RESULT_FIELDS)}`);
1621
+ if (traceId) {
1622
+ responseLog.info(`[trace=${traceId}] rpc_recv method=${method} rpc_id=${rpcId} duration_ms=${elapsed} status=ok`);
1584
1623
  }
1624
+ // 透传 envelope._meta 给 observer
1625
+ if (this._metaObserver !== null) {
1626
+ const meta = response._meta;
1627
+ if (meta !== null && typeof meta === 'object' && !Array.isArray(meta)) {
1628
+ this._queueObserver('meta_observer', this._metaObserver, meta);
1629
+ }
1630
+ }
1631
+ // 处理 success 路径的 _trace
1632
+ const respTrace = response._trace;
1633
+ if (respTrace && typeof respTrace === 'object' && !Array.isArray(respTrace)) {
1634
+ this._handleResponseTrace(method, 'ok', elapsed, respTrace, responseLog);
1635
+ }
1636
+ resolve(response.result);
1585
1637
  }
1586
- // 处理 success 路径的 _trace
1587
- const respTrace = response._trace;
1588
- if (respTrace && typeof respTrace === 'object' && !Array.isArray(respTrace)) {
1589
- this._handleResponseTrace(method, 'ok', elapsed, respTrace, responseLog);
1638
+ else {
1639
+ responseLog.warn(`RPC response missing result or error: method=${method}, id=${rpcId}, elapsed=${elapsed}ms`);
1640
+ reject(new SerializationError(`rpc response missing result and error: ${method}`));
1590
1641
  }
1591
- resolve(response.result);
1592
- }
1593
- else {
1594
- responseLog.warn(`RPC response missing result or error: method=${method}, id=${rpcId}, elapsed=${elapsed}ms`);
1595
- reject(new SerializationError(`rpc response missing result and error: ${method}`));
1596
- }
1642
+ };
1643
+ if (sentCheckpoint)
1644
+ void sentCheckpoint.then(acceptResponse, reject);
1645
+ else
1646
+ acceptResponse();
1597
1647
  },
1598
1648
  reject: (err) => {
1599
1649
  clearTimeout(timer);
@@ -1615,6 +1665,7 @@ export class RPCTransport {
1615
1665
  timeoutMs: effectiveTimeout,
1616
1666
  background: backgroundRpc,
1617
1667
  logger: requestLog,
1668
+ onSent,
1618
1669
  });
1619
1670
  if (backgroundRpc) {
1620
1671
  this._rpcQueue.pop();
@@ -1627,6 +1678,7 @@ export class RPCTransport {
1627
1678
  timeoutMs: effectiveTimeout,
1628
1679
  background: true,
1629
1680
  logger: requestLog,
1681
+ onSent,
1630
1682
  });
1631
1683
  }
1632
1684
  this._drainRpcQueue();
@@ -1804,6 +1856,7 @@ export class RPCTransport {
1804
1856
  }
1805
1857
  this._sendText(entry.payload, `rpc ${entry.method}`, () => this._pending.get(entry.rpcId) === entry.pending).then(() => {
1806
1858
  entry.logger.debug(`RPC request sent: method=${entry.method}, id=${entry.rpcId}, background=${entry.background}`);
1859
+ return entry.onSent?.();
1807
1860
  }).catch((err) => {
1808
1861
  if (this._pending.get(entry.rpcId) !== entry.pending)
1809
1862
  return;
@@ -2199,7 +2252,12 @@ if (!isMainThread && Boolean(workerData?.aunTransportWorker) && parentPort) {
2199
2252
  break;
2200
2253
  }
2201
2254
  case 'call': {
2202
- const request = actor.call(String(command.method ?? ''), command.params ?? undefined, command.timeout, command.trace, Boolean(command.background));
2255
+ const request = (command.trackSent
2256
+ ? actor['_callWithSent'](String(command.method ?? ''), command.params ?? undefined, async () => {
2257
+ if (id)
2258
+ parentPort.postMessage({ type: 'sent', id, generation: bridgeGeneration() });
2259
+ }, command.timeout, command.trace, Boolean(command.background))
2260
+ : actor.call(String(command.method ?? ''), command.params ?? undefined, command.timeout, command.trace, Boolean(command.background)));
2203
2261
  if (id)
2204
2262
  active.set(id, request);
2205
2263
  result = await request;