@f2a/network 0.1.3 → 0.2.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/README.md +278 -63
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +29 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/config.d.ts +176 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +386 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/daemon.d.ts +54 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +572 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/index.js +90 -16
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +13 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +352 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/core/e2ee-crypto.d.ts +127 -1
- package/dist/core/e2ee-crypto.d.ts.map +1 -1
- package/dist/core/e2ee-crypto.js +446 -12
- package/dist/core/e2ee-crypto.js.map +1 -1
- package/dist/core/f2a.d.ts +2 -1
- package/dist/core/f2a.d.ts.map +1 -1
- package/dist/core/f2a.js +6 -2
- package/dist/core/f2a.js.map +1 -1
- package/dist/core/identity/encrypted-key-store.d.ts +19 -0
- package/dist/core/identity/encrypted-key-store.d.ts.map +1 -0
- package/dist/core/identity/encrypted-key-store.js +72 -0
- package/dist/core/identity/encrypted-key-store.js.map +1 -0
- package/dist/core/identity/identity-manager.d.ts +133 -0
- package/dist/core/identity/identity-manager.d.ts.map +1 -0
- package/dist/core/identity/identity-manager.js +454 -0
- package/dist/core/identity/identity-manager.js.map +1 -0
- package/dist/core/identity/index.d.ts +8 -0
- package/dist/core/identity/index.d.ts.map +1 -0
- package/dist/core/identity/index.js +7 -0
- package/dist/core/identity/index.js.map +1 -0
- package/dist/core/identity/types.d.ts +70 -0
- package/dist/core/identity/types.d.ts.map +1 -0
- package/dist/core/identity/types.js +17 -0
- package/dist/core/identity/types.js.map +1 -0
- package/dist/core/p2p-network.d.ts +26 -0
- package/dist/core/p2p-network.d.ts.map +1 -1
- package/dist/core/p2p-network.js +434 -105
- package/dist/core/p2p-network.js.map +1 -1
- package/dist/core/reputation-security.d.ts +15 -0
- package/dist/core/reputation-security.d.ts.map +1 -1
- package/dist/core/reputation-security.js +73 -3
- package/dist/core/reputation-security.js.map +1 -1
- package/dist/core/reputation.d.ts +129 -4
- package/dist/core/reputation.d.ts.map +1 -1
- package/dist/core/reputation.js +294 -1
- package/dist/core/reputation.js.map +1 -1
- package/dist/core/review-committee.d.ts +2 -2
- package/dist/core/review-committee.d.ts.map +1 -1
- package/dist/core/review-committee.js +17 -0
- package/dist/core/review-committee.js.map +1 -1
- package/dist/daemon/control-server.d.ts.map +1 -1
- package/dist/daemon/control-server.js +44 -1
- package/dist/daemon/control-server.js.map +1 -1
- package/dist/daemon/webhook.d.ts +3 -0
- package/dist/daemon/webhook.d.ts.map +1 -1
- package/dist/daemon/webhook.js +318 -6
- package/dist/daemon/webhook.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/result.d.ts +1 -1
- package/dist/types/result.d.ts.map +1 -1
- package/dist/types/result.js.map +1 -1
- package/dist/utils/crypto-utils.d.ts +17 -0
- package/dist/utils/crypto-utils.d.ts.map +1 -0
- package/dist/utils/crypto-utils.js +28 -0
- package/dist/utils/crypto-utils.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +9 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +3 -1
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/signature.d.ts +47 -1
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +166 -11
- package/dist/utils/signature.js.map +1 -1
- package/package.json +2 -1
package/dist/core/e2ee-crypto.js
CHANGED
|
@@ -3,22 +3,117 @@
|
|
|
3
3
|
* 使用 X25519 + AES-256-GCM 实现 Agent 间加密通信
|
|
4
4
|
*/
|
|
5
5
|
import { x25519 } from '@noble/curves/ed25519.js';
|
|
6
|
-
import { randomBytes, createCipheriv, createDecipheriv, hkdfSync } from 'crypto';
|
|
6
|
+
import { randomBytes, createCipheriv, createDecipheriv, createHmac, hkdfSync, timingSafeEqual } from 'crypto';
|
|
7
7
|
import { Logger } from '../utils/logger.js';
|
|
8
8
|
// AES-256-GCM 参数
|
|
9
9
|
const AES_KEY_SIZE = 32; // 256 bits
|
|
10
10
|
const AES_IV_SIZE = 16; // 128 bits
|
|
11
11
|
const AES_TAG_SIZE = 16; // 128 bits
|
|
12
|
+
// P2-7 修复:使用常量 SALT_SIZE 并保持一致
|
|
13
|
+
const SALT_SIZE = 16; // 128 bits
|
|
12
14
|
/**
|
|
13
15
|
* 密钥管理器
|
|
16
|
+
* P2-1 修复:实现 Disposable 接口
|
|
14
17
|
*/
|
|
15
18
|
export class E2EECrypto {
|
|
16
19
|
keyPair = null;
|
|
17
20
|
peerPublicKeys = new Map();
|
|
18
21
|
sharedSecrets = new Map();
|
|
19
22
|
logger;
|
|
23
|
+
/** P2-10 修复:IV 使用记录,用于检测 IV 重用 */
|
|
24
|
+
usedIVs = new Map();
|
|
25
|
+
/** P2-10 修复:IV 重用警告阈值 */
|
|
26
|
+
static IV_REUSE_WARN_THRESHOLD = 1000;
|
|
27
|
+
/** P1-2 修复:待处理的密钥确认挑战 */
|
|
28
|
+
pendingChallenges = new Map();
|
|
29
|
+
/** P1-2 修复:已确认的密钥 */
|
|
30
|
+
keyConfirmed = new Map();
|
|
31
|
+
/** P1-1 修复:挑战清理定时器 */
|
|
32
|
+
challengeCleanupTimer = null;
|
|
33
|
+
/** P1-1 修复:挑战过期时间(5分钟) */
|
|
34
|
+
static CHALLENGE_EXPIRY_MS = 5 * 60 * 1000;
|
|
35
|
+
/** P1-1 修复:清理间隔(每分钟) */
|
|
36
|
+
static CHALLENGE_CLEANUP_INTERVAL_MS = 60 * 1000;
|
|
20
37
|
constructor() {
|
|
21
38
|
this.logger = new Logger({ component: 'E2EE' });
|
|
39
|
+
this.startChallengeCleanup();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* P1-1 修复:启动挑战清理定时器
|
|
43
|
+
*/
|
|
44
|
+
startChallengeCleanup() {
|
|
45
|
+
this.challengeCleanupTimer = setInterval(() => {
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
let cleaned = 0;
|
|
48
|
+
for (const [key, challenge] of this.pendingChallenges) {
|
|
49
|
+
if (now - challenge.timestamp > E2EECrypto.CHALLENGE_EXPIRY_MS) {
|
|
50
|
+
this.pendingChallenges.delete(key);
|
|
51
|
+
cleaned++;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (cleaned > 0) {
|
|
55
|
+
this.logger.debug('Cleaned expired challenges', { count: cleaned });
|
|
56
|
+
}
|
|
57
|
+
}, E2EECrypto.CHALLENGE_CLEANUP_INTERVAL_MS);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* P1-2 修复:注销对等方,清理所有相关资源
|
|
61
|
+
* P1-4 修复:删除共享密钥前先零填充
|
|
62
|
+
* @param peerId 对等方标识
|
|
63
|
+
*/
|
|
64
|
+
unregisterPeer(peerId) {
|
|
65
|
+
// P1-4 修复:清理共享密钥前先零填充
|
|
66
|
+
const sharedSecret = this.sharedSecrets.get(peerId);
|
|
67
|
+
if (sharedSecret) {
|
|
68
|
+
sharedSecret.fill(0);
|
|
69
|
+
}
|
|
70
|
+
this.sharedSecrets.delete(peerId);
|
|
71
|
+
// 清理对等方公钥
|
|
72
|
+
this.peerPublicKeys.delete(peerId);
|
|
73
|
+
// 清理密钥确认状态
|
|
74
|
+
const confirmKey = `confirmed:${peerId}`;
|
|
75
|
+
this.keyConfirmed.delete(confirmKey);
|
|
76
|
+
// 清理 IV 记录
|
|
77
|
+
this.usedIVs.delete(peerId);
|
|
78
|
+
// 清理相关的 pendingChallenges
|
|
79
|
+
const challengeKey = `challenge:${peerId}`;
|
|
80
|
+
const counterChallengeKey = `counter:${peerId}`;
|
|
81
|
+
this.pendingChallenges.delete(challengeKey);
|
|
82
|
+
this.pendingChallenges.delete(counterChallengeKey);
|
|
83
|
+
this.logger.info('Peer unregistered and resources cleaned', { peerId: peerId.slice(0, 16) });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* P1-1 修复:停止清理定时器,释放资源
|
|
87
|
+
* P1-4 修复:清理共享密钥前先零填充
|
|
88
|
+
* R2-1 修复:零填充 privateKey,最敏感的密钥材料
|
|
89
|
+
*/
|
|
90
|
+
stop() {
|
|
91
|
+
if (this.challengeCleanupTimer) {
|
|
92
|
+
clearInterval(this.challengeCleanupTimer);
|
|
93
|
+
this.challengeCleanupTimer = null;
|
|
94
|
+
}
|
|
95
|
+
// R2-1 修复:零填充 privateKey,这是最敏感的密钥材料
|
|
96
|
+
if (this.keyPair?.privateKey) {
|
|
97
|
+
this.keyPair.privateKey.fill(0);
|
|
98
|
+
this.keyPair = null;
|
|
99
|
+
}
|
|
100
|
+
// P1-4 修复:零填充所有共享密钥
|
|
101
|
+
for (const secret of this.sharedSecrets.values()) {
|
|
102
|
+
secret.fill(0);
|
|
103
|
+
}
|
|
104
|
+
// 清理所有资源
|
|
105
|
+
this.pendingChallenges.clear();
|
|
106
|
+
this.keyConfirmed.clear();
|
|
107
|
+
this.usedIVs.clear();
|
|
108
|
+
this.sharedSecrets.clear();
|
|
109
|
+
this.peerPublicKeys.clear();
|
|
110
|
+
this.logger.info('E2EECrypto stopped and all resources cleaned');
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* P2-1 修复:实现 Disposable 接口
|
|
114
|
+
*/
|
|
115
|
+
[Symbol.dispose]() {
|
|
116
|
+
this.stop();
|
|
22
117
|
}
|
|
23
118
|
/**
|
|
24
119
|
* 初始化密钥对
|
|
@@ -31,9 +126,33 @@ export class E2EECrypto {
|
|
|
31
126
|
}
|
|
32
127
|
/**
|
|
33
128
|
* 从已有密钥初始化
|
|
129
|
+
* P1-2: 添加输入验证
|
|
34
130
|
*/
|
|
35
131
|
initializeWithKeyPair(privateKey, publicKey) {
|
|
132
|
+
// 验证私钥长度 (X25519 私钥应为 32 字节)
|
|
133
|
+
if (privateKey.length !== 32) {
|
|
134
|
+
throw new Error(`Invalid private key length: expected 32 bytes, got ${privateKey.length}`);
|
|
135
|
+
}
|
|
136
|
+
// 验证公钥长度 (X25519 公钥应为 32 字节)
|
|
137
|
+
if (publicKey.length !== 32) {
|
|
138
|
+
throw new Error(`Invalid public key length: expected 32 bytes, got ${publicKey.length}`);
|
|
139
|
+
}
|
|
140
|
+
// 验证公私钥配对
|
|
141
|
+
try {
|
|
142
|
+
const derivedPublicKey = x25519.getPublicKey(privateKey);
|
|
143
|
+
const publicKeyMatch = Buffer.from(derivedPublicKey).equals(Buffer.from(publicKey));
|
|
144
|
+
if (!publicKeyMatch) {
|
|
145
|
+
throw new Error('Public key does not match the private key. The key pair is invalid.');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
// 如果派生失败,可能是无效的私钥
|
|
150
|
+
throw new Error(`Invalid key pair: ${error instanceof Error ? error.message : String(error)}`);
|
|
151
|
+
}
|
|
36
152
|
this.keyPair = { privateKey, publicKey };
|
|
153
|
+
this.logger.info('Key pair initialized successfully', {
|
|
154
|
+
publicKeyPrefix: Buffer.from(publicKey).toString('hex').slice(0, 16)
|
|
155
|
+
});
|
|
37
156
|
}
|
|
38
157
|
/**
|
|
39
158
|
* 获取公钥 (用于广播)
|
|
@@ -45,15 +164,24 @@ export class E2EECrypto {
|
|
|
45
164
|
}
|
|
46
165
|
/**
|
|
47
166
|
* 注册对等方的公钥
|
|
167
|
+
* P2-3 修复:使用 Uint8Array.slice() 创建不可变副本
|
|
48
168
|
*/
|
|
49
169
|
registerPeerPublicKey(peerId, publicKeyBase64) {
|
|
50
170
|
try {
|
|
51
171
|
const publicKey = Buffer.from(publicKeyBase64, 'base64');
|
|
52
|
-
|
|
172
|
+
// P3-1 修复:重命名为 Copy 以更准确反映语义(可修改的副本)
|
|
173
|
+
const publicKeyCopy = new Uint8Array(publicKey);
|
|
174
|
+
this.peerPublicKeys.set(peerId, publicKeyCopy);
|
|
53
175
|
// 预计算共享密钥
|
|
54
176
|
if (this.keyPair) {
|
|
55
|
-
const sharedSecret = x25519.getSharedSecret(this.keyPair.privateKey,
|
|
56
|
-
|
|
177
|
+
const sharedSecret = x25519.getSharedSecret(this.keyPair.privateKey, publicKeyCopy);
|
|
178
|
+
// P3-1 修复:重命名为 Copy 以更准确反映语义
|
|
179
|
+
const sharedSecretCopy = new Uint8Array(sharedSecret);
|
|
180
|
+
this.sharedSecrets.set(peerId, sharedSecretCopy);
|
|
181
|
+
// P2-10 修复:初始化 IV 记录集
|
|
182
|
+
if (!this.usedIVs.has(peerId)) {
|
|
183
|
+
this.usedIVs.set(peerId, new Set());
|
|
184
|
+
}
|
|
57
185
|
}
|
|
58
186
|
}
|
|
59
187
|
catch (error) {
|
|
@@ -66,6 +194,48 @@ export class E2EECrypto {
|
|
|
66
194
|
canEncryptTo(peerId) {
|
|
67
195
|
return this.sharedSecrets.has(peerId);
|
|
68
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* P2-13 修复:提取独立的 IV 生成方法,处理碰撞检测
|
|
199
|
+
* P1-4 修复:添加最多 10 次尝试的循环逻辑
|
|
200
|
+
* P2-2 修复:当 ivSet 不存在时,创建并记录 IV,防止重用
|
|
201
|
+
* @param peerId 对等方标识
|
|
202
|
+
* @returns 唯一的 IV,如果无法生成则抛出错误
|
|
203
|
+
*/
|
|
204
|
+
generateUniqueIV(peerId) {
|
|
205
|
+
// 确保 ivSet 存在
|
|
206
|
+
let ivSet = this.usedIVs.get(peerId);
|
|
207
|
+
if (!ivSet) {
|
|
208
|
+
ivSet = new Set();
|
|
209
|
+
this.usedIVs.set(peerId, ivSet);
|
|
210
|
+
}
|
|
211
|
+
const maxAttempts = 10;
|
|
212
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
213
|
+
const iv = randomBytes(AES_IV_SIZE);
|
|
214
|
+
const ivBase64 = iv.toString('base64');
|
|
215
|
+
if (!ivSet.has(ivBase64)) {
|
|
216
|
+
// IV 唯一,记录并返回
|
|
217
|
+
ivSet.add(ivBase64);
|
|
218
|
+
// P2-10 修复:清理过期的 IV 记录,防止内存泄漏
|
|
219
|
+
if (ivSet.size > E2EECrypto.IV_REUSE_WARN_THRESHOLD) {
|
|
220
|
+
this.logger.warn('IV usage count exceeded threshold, clearing old records', {
|
|
221
|
+
peerId: peerId.slice(0, 16),
|
|
222
|
+
count: ivSet.size
|
|
223
|
+
});
|
|
224
|
+
// 保留最近的一半记录
|
|
225
|
+
const entries = Array.from(ivSet);
|
|
226
|
+
ivSet.clear();
|
|
227
|
+
entries.slice(-Math.floor(E2EECrypto.IV_REUSE_WARN_THRESHOLD / 2)).forEach(e => ivSet.add(e));
|
|
228
|
+
}
|
|
229
|
+
return iv;
|
|
230
|
+
}
|
|
231
|
+
// IV 碰撞,重试
|
|
232
|
+
if (attempt === 0) {
|
|
233
|
+
this.logger.warn('IV collision detected, regenerating', { peerId: peerId.slice(0, 16) });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// P2-17 修复:达到 maxAttempts 时抛出错误,让调用方正确处理
|
|
237
|
+
throw new Error(`Failed to generate unique IV after ${maxAttempts} attempts. This is extremely unlikely and may indicate a cryptographic issue.`);
|
|
238
|
+
}
|
|
69
239
|
/**
|
|
70
240
|
* 加密消息
|
|
71
241
|
*/
|
|
@@ -80,12 +250,13 @@ export class E2EECrypto {
|
|
|
80
250
|
return null;
|
|
81
251
|
}
|
|
82
252
|
try {
|
|
83
|
-
//
|
|
84
|
-
const salt = randomBytes(
|
|
253
|
+
// P2-7 修复:使用常量 SALT_SIZE
|
|
254
|
+
const salt = randomBytes(SALT_SIZE);
|
|
85
255
|
// 从共享密钥派生 AES 密钥
|
|
86
256
|
const aesKey = this.deriveAESKey(sharedSecret, salt);
|
|
87
|
-
//
|
|
88
|
-
|
|
257
|
+
// P2-13 修复:使用独立的 IV 生成方法
|
|
258
|
+
// P1-4 修复:包含循环尝试逻辑
|
|
259
|
+
const iv = this.generateUniqueIV(peerId);
|
|
89
260
|
// 创建加密器
|
|
90
261
|
const cipher = createCipheriv('aes-256-gcm', aesKey, iv);
|
|
91
262
|
// 添加 AAD (如果有)
|
|
@@ -107,7 +278,7 @@ export class E2EECrypto {
|
|
|
107
278
|
};
|
|
108
279
|
}
|
|
109
280
|
catch (error) {
|
|
110
|
-
this.logger.error('Encryption failed', { error });
|
|
281
|
+
this.logger.error('Encryption failed', { error: error instanceof Error ? error.message : String(error) });
|
|
111
282
|
return null;
|
|
112
283
|
}
|
|
113
284
|
}
|
|
@@ -123,8 +294,17 @@ export class E2EECrypto {
|
|
|
123
294
|
// 使用发送方公钥计算共享密钥
|
|
124
295
|
const senderPublicKey = Buffer.from(encrypted.senderPublicKey, 'base64');
|
|
125
296
|
const sharedSecret = x25519.getSharedSecret(this.keyPair.privateKey, senderPublicKey);
|
|
126
|
-
//
|
|
127
|
-
|
|
297
|
+
// P2 修复:强制要求盐值,不使用硬编码默认值
|
|
298
|
+
if (!encrypted.salt) {
|
|
299
|
+
this.logger.error('Decryption failed: missing salt value. Salt is required for security.');
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
const salt = Buffer.from(encrypted.salt, 'base64');
|
|
303
|
+
// P2-7 修复:使用常量 SALT_SIZE 验证盐值长度
|
|
304
|
+
if (salt.length < SALT_SIZE) {
|
|
305
|
+
this.logger.error('Decryption failed: salt value too short. Minimum 16 bytes required.');
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
128
308
|
const aesKey = this.deriveAESKey(sharedSecret, salt);
|
|
129
309
|
// 解码参数
|
|
130
310
|
const iv = Buffer.from(encrypted.iv, 'base64');
|
|
@@ -142,7 +322,24 @@ export class E2EECrypto {
|
|
|
142
322
|
return plaintext;
|
|
143
323
|
}
|
|
144
324
|
catch (error) {
|
|
145
|
-
|
|
325
|
+
// 增强错误处理:区分不同类型的解密失败
|
|
326
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
327
|
+
const errorType = errorMessage.includes('authTag') || errorMessage.includes('authentication')
|
|
328
|
+
? 'AUTH_FAILED'
|
|
329
|
+
: errorMessage.includes('invalid') || errorMessage.includes('corrupt')
|
|
330
|
+
? 'INVALID_FORMAT'
|
|
331
|
+
: 'DECRYPTION_ERROR';
|
|
332
|
+
this.logger.error('Decryption failed', {
|
|
333
|
+
errorType,
|
|
334
|
+
errorMessage,
|
|
335
|
+
hasKey: !!this.keyPair,
|
|
336
|
+
hasSalt: !!encrypted.salt,
|
|
337
|
+
ciphertextLength: encrypted.ciphertext?.length || 0
|
|
338
|
+
});
|
|
339
|
+
// 安全提示:认证失败可能表示消息被篡改
|
|
340
|
+
if (errorType === 'AUTH_FAILED') {
|
|
341
|
+
this.logger.warn('Possible message tampering detected: authentication tag verification failed');
|
|
342
|
+
}
|
|
146
343
|
return null;
|
|
147
344
|
}
|
|
148
345
|
}
|
|
@@ -184,6 +381,243 @@ export class E2EECrypto {
|
|
|
184
381
|
getRegisteredPeerCount() {
|
|
185
382
|
return this.peerPublicKeys.size;
|
|
186
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* P1-2 修复:生成密钥确认挑战
|
|
386
|
+
* 在密钥交换后,用于验证双方拥有相同的共享密钥
|
|
387
|
+
* @param peerId 对等方标识
|
|
388
|
+
* @returns 挑战数据
|
|
389
|
+
*/
|
|
390
|
+
generateKeyConfirmationChallenge(peerId) {
|
|
391
|
+
if (!this.keyPair) {
|
|
392
|
+
this.logger.error('Cannot generate challenge: not initialized');
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
const sharedSecret = this.sharedSecrets.get(peerId);
|
|
396
|
+
if (!sharedSecret) {
|
|
397
|
+
this.logger.error('Cannot generate challenge: no shared secret for peer', { peerId });
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
// 生成随机挑战
|
|
401
|
+
const challenge = randomBytes(32).toString('base64');
|
|
402
|
+
const timestamp = Date.now();
|
|
403
|
+
const random = randomBytes(8).toString('hex');
|
|
404
|
+
// P1-3 修复:使用包含 timestamp 和 random 的键名格式,避免并发冲突
|
|
405
|
+
const challengeKey = `challenge:${peerId}:${timestamp}:${random}`;
|
|
406
|
+
this.pendingChallenges.set(challengeKey, {
|
|
407
|
+
challenge,
|
|
408
|
+
timestamp
|
|
409
|
+
});
|
|
410
|
+
return {
|
|
411
|
+
challenge,
|
|
412
|
+
senderId: Buffer.from(this.keyPair.publicKey).toString('base64').slice(0, 16),
|
|
413
|
+
timestamp
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* P1-2 修复:响应密钥确认挑战
|
|
418
|
+
* 使用共享密钥加密挑战数据作为证明
|
|
419
|
+
* @param peerId 对等方标识
|
|
420
|
+
* @param challenge 收到的挑战
|
|
421
|
+
* @returns 响应数据和反向挑战
|
|
422
|
+
*/
|
|
423
|
+
respondToKeyConfirmationChallenge(peerId, challenge) {
|
|
424
|
+
if (!this.keyPair) {
|
|
425
|
+
this.logger.error('Cannot respond to challenge: not initialized');
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
const sharedSecret = this.sharedSecrets.get(peerId);
|
|
429
|
+
if (!sharedSecret) {
|
|
430
|
+
this.logger.error('Cannot respond to challenge: no shared secret for peer', { peerId });
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
// 验证时间戳防止重放攻击(5分钟有效期)
|
|
434
|
+
// P1-6 修复:拒绝未来时间戳,只允许过去的时间戳
|
|
435
|
+
// R2-3 说明:5分钟 tolerance 对于分布式系统是合理的,考虑:
|
|
436
|
+
// - 时钟同步偏差(NTP 通常 < 100ms,极端情况可达秒级)
|
|
437
|
+
// - 消息传输延迟(跨区域可达秒级)
|
|
438
|
+
// - 系统处理延迟
|
|
439
|
+
const now = Date.now();
|
|
440
|
+
const maxAge = 5 * 60 * 1000; // 5 分钟
|
|
441
|
+
// P1-6 修复:拒绝未来时间戳
|
|
442
|
+
if (challenge.timestamp > now + maxAge) {
|
|
443
|
+
this.logger.error('Challenge timestamp is in the future');
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
if (challenge.timestamp < now - maxAge) {
|
|
447
|
+
this.logger.error('Challenge timestamp expired');
|
|
448
|
+
return null;
|
|
449
|
+
}
|
|
450
|
+
// 使用共享密钥加密挑战数据作为响应
|
|
451
|
+
// 这证明我们拥有正确的共享密钥
|
|
452
|
+
// P1-5 修复:使用 HMAC 而非 Hash,防止长度扩展攻击
|
|
453
|
+
const challengeResponse = createHmac('sha256', sharedSecret)
|
|
454
|
+
.update(challenge.challenge)
|
|
455
|
+
.digest('base64');
|
|
456
|
+
// 生成反向挑战
|
|
457
|
+
const counterChallenge = randomBytes(32).toString('base64');
|
|
458
|
+
const timestamp = Date.now();
|
|
459
|
+
const random = randomBytes(8).toString('hex');
|
|
460
|
+
// P1-3 修复:使用包含 timestamp 和 random 的键名格式,避免并发冲突
|
|
461
|
+
const counterChallengeKey = `counter:${peerId}:${timestamp}:${random}`;
|
|
462
|
+
this.pendingChallenges.set(counterChallengeKey, {
|
|
463
|
+
challenge: counterChallenge,
|
|
464
|
+
timestamp
|
|
465
|
+
});
|
|
466
|
+
return {
|
|
467
|
+
challengeResponse,
|
|
468
|
+
counterChallenge,
|
|
469
|
+
senderId: Buffer.from(this.keyPair.publicKey).toString('base64').slice(0, 16),
|
|
470
|
+
timestamp
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* P2-14 修复:提取公共的挑战响应验证逻辑
|
|
475
|
+
* @param peerId 对等方标识
|
|
476
|
+
* @param response 实际收到的响应
|
|
477
|
+
* @param expectedChallenge 原始挑战数据
|
|
478
|
+
* @returns 验证结果
|
|
479
|
+
*/
|
|
480
|
+
verifyChallengeResponse(peerId, response, expectedChallenge) {
|
|
481
|
+
const sharedSecret = this.sharedSecrets.get(peerId);
|
|
482
|
+
if (!sharedSecret) {
|
|
483
|
+
this.logger.error('Cannot verify response: no shared secret for peer', { peerId });
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
// P1-5 修复:使用 HMAC 而非 Hash,防止长度扩展攻击
|
|
487
|
+
const expectedResponse = createHmac('sha256', sharedSecret)
|
|
488
|
+
.update(expectedChallenge)
|
|
489
|
+
.digest('base64');
|
|
490
|
+
// P3-1 修复:使用 timingSafeEqual 防止时序攻击
|
|
491
|
+
try {
|
|
492
|
+
const responseBuffer = Buffer.from(response, 'base64');
|
|
493
|
+
const expectedBuffer = Buffer.from(expectedResponse, 'base64');
|
|
494
|
+
if (responseBuffer.length !== expectedBuffer.length) {
|
|
495
|
+
this.logger.error('Challenge response length mismatch', { peerId });
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
return timingSafeEqual(responseBuffer, expectedBuffer);
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
// 长度不匹配或其他错误
|
|
502
|
+
return false;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* P1-2 修复:验证密钥确认响应并响应反向挑战
|
|
507
|
+
* 完成双向密钥确认
|
|
508
|
+
* @param peerId 对等方标识
|
|
509
|
+
* @param response 收到的响应
|
|
510
|
+
* @param originalChallenge 原始挑战数据
|
|
511
|
+
* @returns 反向挑战的响应,如果验证失败返回 null
|
|
512
|
+
*/
|
|
513
|
+
verifyKeyConfirmationResponse(peerId, response, originalChallenge) {
|
|
514
|
+
const sharedSecret = this.sharedSecrets.get(peerId);
|
|
515
|
+
if (!sharedSecret) {
|
|
516
|
+
this.logger.error('Cannot verify response: no shared secret for peer', { peerId });
|
|
517
|
+
return { success: false };
|
|
518
|
+
}
|
|
519
|
+
// 验证时间戳
|
|
520
|
+
const now = Date.now();
|
|
521
|
+
const maxAge = 5 * 60 * 1000; // 5 分钟
|
|
522
|
+
// P1-6 修复:拒绝未来时间戳
|
|
523
|
+
if (response.timestamp > now + maxAge) {
|
|
524
|
+
this.logger.error('Response timestamp is in the future');
|
|
525
|
+
return { success: false };
|
|
526
|
+
}
|
|
527
|
+
if (response.timestamp < now - maxAge) {
|
|
528
|
+
this.logger.error('Response timestamp expired');
|
|
529
|
+
return { success: false };
|
|
530
|
+
}
|
|
531
|
+
// P2-14 修复:使用公共验证方法
|
|
532
|
+
if (!this.verifyChallengeResponse(peerId, response.challengeResponse, originalChallenge)) {
|
|
533
|
+
this.logger.error('Challenge response verification failed', { peerId });
|
|
534
|
+
return { success: false };
|
|
535
|
+
}
|
|
536
|
+
// 响应反向挑战
|
|
537
|
+
// P1-5 修复:使用 HMAC 而非 Hash
|
|
538
|
+
const counterChallengeResponse = createHmac('sha256', sharedSecret)
|
|
539
|
+
.update(response.counterChallenge)
|
|
540
|
+
.digest('base64');
|
|
541
|
+
// 标记密钥确认完成
|
|
542
|
+
const confirmKey = `confirmed:${peerId}`;
|
|
543
|
+
this.keyConfirmed.set(confirmKey, true);
|
|
544
|
+
this.logger.info('Key exchange confirmed with peer', { peerId: peerId.slice(0, 16) });
|
|
545
|
+
return {
|
|
546
|
+
success: true,
|
|
547
|
+
counterChallengeResponse
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* P1-2 修复:验证反向挑战的响应
|
|
552
|
+
* P1-5 修复:使用 HMAC 而非 Hash
|
|
553
|
+
* @param peerId 对等方标识
|
|
554
|
+
* @param counterChallengeResponse 反向挑战的响应
|
|
555
|
+
* @param originalCounterChallenge 原始反向挑战
|
|
556
|
+
* @returns 验证结果
|
|
557
|
+
*/
|
|
558
|
+
verifyCounterChallengeResponse(peerId, counterChallengeResponse, originalCounterChallenge) {
|
|
559
|
+
// P2-14 修复:使用公共验证方法
|
|
560
|
+
if (!this.verifyChallengeResponse(peerId, counterChallengeResponse, originalCounterChallenge)) {
|
|
561
|
+
this.logger.error('Counter challenge response verification failed', { peerId });
|
|
562
|
+
return false;
|
|
563
|
+
}
|
|
564
|
+
// 标记密钥确认完成
|
|
565
|
+
const confirmKey = `confirmed:${peerId}`;
|
|
566
|
+
this.keyConfirmed.set(confirmKey, true);
|
|
567
|
+
this.logger.info('Key exchange fully confirmed with peer', { peerId: peerId.slice(0, 16) });
|
|
568
|
+
return true;
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* P1-2 修复:检查与对等方的密钥是否已确认
|
|
572
|
+
*/
|
|
573
|
+
isKeyConfirmed(peerId) {
|
|
574
|
+
const confirmKey = `confirmed:${peerId}`;
|
|
575
|
+
return this.keyConfirmed.get(confirmKey) === true;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* P1-2 修复:执行完整的双向密钥确认流程
|
|
579
|
+
* 这是一个便捷方法,封装了完整的确认流程
|
|
580
|
+
* @param peerId 对等方标识
|
|
581
|
+
* @param sendChallenge 发送挑战的函数
|
|
582
|
+
* @param receiveResponse 接收响应的函数
|
|
583
|
+
* @returns 确认是否成功
|
|
584
|
+
*/
|
|
585
|
+
async confirmKeyExchange(peerId, sendChallenge, receiveCounterResponse) {
|
|
586
|
+
try {
|
|
587
|
+
// 生成挑战
|
|
588
|
+
const challenge = this.generateKeyConfirmationChallenge(peerId);
|
|
589
|
+
if (!challenge) {
|
|
590
|
+
return false;
|
|
591
|
+
}
|
|
592
|
+
// 发送挑战并等待响应
|
|
593
|
+
const response = await sendChallenge(challenge);
|
|
594
|
+
if (!response) {
|
|
595
|
+
this.logger.error('No response received for key confirmation challenge', { peerId });
|
|
596
|
+
return false;
|
|
597
|
+
}
|
|
598
|
+
// 验证响应
|
|
599
|
+
const result = this.verifyKeyConfirmationResponse(peerId, response, challenge.challenge);
|
|
600
|
+
if (!result.success || !result.counterChallengeResponse) {
|
|
601
|
+
return false;
|
|
602
|
+
}
|
|
603
|
+
// 如果需要验证反向挑战响应
|
|
604
|
+
if (receiveCounterResponse) {
|
|
605
|
+
const verified = await receiveCounterResponse(result.counterChallengeResponse);
|
|
606
|
+
if (!verified) {
|
|
607
|
+
this.logger.error('Counter challenge response verification failed', { peerId });
|
|
608
|
+
return false;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
return true;
|
|
612
|
+
}
|
|
613
|
+
catch (error) {
|
|
614
|
+
this.logger.error('Key exchange confirmation failed with exception', {
|
|
615
|
+
peerId: peerId.slice(0, 16),
|
|
616
|
+
error: error instanceof Error ? error.message : String(error)
|
|
617
|
+
});
|
|
618
|
+
return false;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
187
621
|
}
|
|
188
622
|
// 单例导出
|
|
189
623
|
export const defaultE2EECrypto = new E2EECrypto();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2ee-crypto.js","sourceRoot":"","sources":["../../src/core/e2ee-crypto.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"e2ee-crypto.js","sourceRoot":"","sources":["../../src/core/e2ee-crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/core/f2a.d.ts
CHANGED
|
@@ -52,8 +52,9 @@ export declare class F2A extends EventEmitter<F2AEvents> implements F2AInstance
|
|
|
52
52
|
stop(): Promise<void>;
|
|
53
53
|
/**
|
|
54
54
|
* 注册能力
|
|
55
|
+
* P3.3 修复:返回 Result 类型,统一错误处理
|
|
55
56
|
*/
|
|
56
|
-
registerCapability(capability: AgentCapability, handler: (params: Record<string, unknown>) => Promise<unknown>): void
|
|
57
|
+
registerCapability(capability: AgentCapability, handler: (params: Record<string, unknown>) => Promise<unknown>): Result<void>;
|
|
57
58
|
/**
|
|
58
59
|
* 获取已注册的能力
|
|
59
60
|
*/
|
package/dist/core/f2a.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"f2a.d.ts","sourceRoot":"","sources":["../../src/core/f2a.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"f2a.d.ts","sourceRoot":"","sources":["../../src/core/f2a.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,kBAAkB,EAUnB,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGtB,kBAAkB,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACtH,eAAe,IAAI,eAAe,EAAE,CAAC;IAGrC,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1D,iBAAiB,IAAI,SAAS,EAAE,CAAC;IACjC,WAAW,IAAI,SAAS,EAAE,CAAC;IAG3B,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAGhF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAGlI,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,eAAe,IAAI,MAAM,EAAE,CAAC;IAG5B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1D,eAAe,IAAI,MAAM,CAAC;IAC1B,YAAY,IAAI,OAAO,CAAC;CACzB;AAED,qBAAa,GAAI,SAAQ,YAAY,CAAC,SAAS,CAAE,YAAW,WAAW;IACrE,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,sBAAsB,CAAgD;IAC9E,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAcP;;;OAGG;IACH,IAAI,SAAS,IAAI,SAAS,CAMzB;IAED;;OAEG;WACU,MAAM,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IA0C3D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IA6BpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;;OAGG;IACH,kBAAkB,CAChB,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,MAAM,CAAC,IAAI,CAAC;IA0Bf;;OAEG;IACH,eAAe,IAAI,eAAe,EAAE;IASpC;;OAEG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI/D;;OAEG;IACH,iBAAiB,IAAI,SAAS,EAAE;IAMhC;;OAEG;IACH,WAAW,IAAI,SAAS,EAAE;IAqB1B;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAgJrF;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAU3B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAI/D;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;YACW,iBAAiB;IA+D/B;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,EACxC,MAAM,CAAC,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAsBxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAGhC"}
|
package/dist/core/f2a.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 整合 P2P 网络、能力发现与任务委托
|
|
4
4
|
*/
|
|
5
5
|
import { EventEmitter } from 'eventemitter3';
|
|
6
|
+
import { randomUUID } from 'crypto';
|
|
6
7
|
import { P2PNetwork } from './p2p-network.js';
|
|
7
8
|
import { Logger } from '../utils/logger.js';
|
|
8
9
|
import { validateAgentCapability, validateTaskDelegateOptions } from '../utils/validation.js';
|
|
@@ -114,6 +115,7 @@ export class F2A extends EventEmitter {
|
|
|
114
115
|
}
|
|
115
116
|
/**
|
|
116
117
|
* 注册能力
|
|
118
|
+
* P3.3 修复:返回 Result 类型,统一错误处理
|
|
117
119
|
*/
|
|
118
120
|
registerCapability(capability, handler) {
|
|
119
121
|
// 验证能力定义
|
|
@@ -122,7 +124,7 @@ export class F2A extends EventEmitter {
|
|
|
122
124
|
this.logger.error('Invalid capability definition', {
|
|
123
125
|
errors: validation.error.errors
|
|
124
126
|
});
|
|
125
|
-
|
|
127
|
+
return failureFromError('INVALID_PARAMS', `Invalid capability: ${validation.error.errors.map(e => e.message).join(', ')}`);
|
|
126
128
|
}
|
|
127
129
|
this.registeredCapabilities.set(capability.name, {
|
|
128
130
|
...capability,
|
|
@@ -131,6 +133,7 @@ export class F2A extends EventEmitter {
|
|
|
131
133
|
// 更新 agentInfo
|
|
132
134
|
this.updateAgentCapabilities();
|
|
133
135
|
this.logger.info('Registered capability', { name: capability.name });
|
|
136
|
+
return success(undefined);
|
|
134
137
|
}
|
|
135
138
|
/**
|
|
136
139
|
* 获取已注册的能力
|
|
@@ -192,7 +195,8 @@ export class F2A extends EventEmitter {
|
|
|
192
195
|
});
|
|
193
196
|
return failureFromError('INVALID_OPTIONS', `Invalid options: ${validation.error.errors.map(e => e.message).join(', ')}`);
|
|
194
197
|
}
|
|
195
|
-
|
|
198
|
+
// P3.1 修复:使用 randomUUID() 替代 Math.random()
|
|
199
|
+
const taskId = `task-${randomUUID()}`;
|
|
196
200
|
this.logger.info('Delegating task', {
|
|
197
201
|
taskId,
|
|
198
202
|
capability: options.capability,
|