evolclaw 2.5.8 → 2.5.9

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.
@@ -9,13 +9,14 @@
9
9
  "agentProgressSummaries": true
10
10
  },
11
11
  "openai": {
12
- "apiKey": "your-openai-api-key",
13
- "baseUrl": "https://api.openai.com/v1",
12
+ "apiKey": "",
13
+ "baseUrl": "",
14
14
  "model": "gpt-5.2-codex",
15
15
  "effort": "medium"
16
16
  },
17
17
  "google": {
18
18
  "apiKey": "",
19
+ "baseUrl": "",
19
20
  "model": "gemini-2.5-flash",
20
21
  "cliPath": "",
21
22
  "mode": "cli"
@@ -23,29 +24,25 @@
23
24
  "defaultAgent": "claude"
24
25
  },
25
26
  "channels": {
26
- "defaultChannel": "feishu",
27
+ "defaultChannel": "aun",
27
28
  "feishu": {
28
- "enabled": true,
29
+ "enabled": false,
29
30
  "appId": "",
30
31
  "appSecret": "",
31
- "owner": "",
32
- "flushDelay": 10,
33
- "debounce": 2,
34
- "showActivities": "dm-only"
32
+ "owner": ""
35
33
  },
36
34
  "wechat": {
37
35
  "enabled": false,
38
36
  "baseUrl": "https://ilinkai.weixin.qq.com",
39
37
  "token": "",
40
- "owner": "",
41
- "flushDelay": 3,
42
- "debounce": 2,
43
- "showActivities": "all"
38
+ "owner": ""
44
39
  },
45
40
  "aun": {
46
41
  "enabled": false,
47
- "aid": "your-agent.agentid.pub",
42
+ "aid": "",
48
43
  "owner": "",
44
+ "flushDelay": 4,
45
+ "debounce": 2,
49
46
  "showActivities": "owner-dm-only"
50
47
  }
51
48
  },
@@ -59,11 +56,6 @@
59
56
  "showActivities": "all",
60
57
  "idleMonitor": {
61
58
  "enabled": true,
62
- "timeout": 120,
63
- "safeModeThreshold": 0
64
- },
65
- "debug": {
66
- "flusherDiag": false,
67
- "aunTrace": false
59
+ "timeout": 120
68
60
  }
69
61
  }
@@ -312,11 +312,25 @@ export class AUNChannel {
312
312
  logger.info('[AUN] Agent already initialized, skipping welcome message');
313
313
  return;
314
314
  }
315
+ // Fetch owner's agent.md to derive name and validate type
316
+ const ownerInfo = await this.fetchPeerInfo(owner);
317
+ if (ownerInfo.type !== null && ownerInfo.type !== 'human') {
318
+ logger.warn(`[AUN] Owner ${owner} type is "${ownerInfo.type}" (not human). Consider using a human AID as owner.`);
319
+ }
320
+ // Name: owner agent.md name (first 12 chars) → fallback to owner AID first label (first 12 chars)
321
+ const ownerAidClean = owner.startsWith('@') ? owner.slice(1) : owner;
322
+ let ownerDisplayName;
323
+ if (ownerInfo.name) {
324
+ ownerDisplayName = ownerInfo.name.slice(0, 12);
325
+ }
326
+ else {
327
+ ownerDisplayName = ownerAidClean.split('.')[0].slice(0, 12);
328
+ }
329
+ const agentDisplayName = `${ownerDisplayName}的Evol助手`;
315
330
  // Generate new agent.md with proper fields
316
- const ownerShortId = owner.split('@')[0].slice(0, 8);
317
331
  const newAgentMd = `---
318
332
  aid: "${aid}"
319
- name: "${ownerShortId}的Evol助手"
333
+ name: "${agentDisplayName}"
320
334
  type: "codeagent"
321
335
  version: "1.0.0"
322
336
  description: "EvolClaw AI Agent Gateway - 连接 Claude/Codex 到消息通道"
@@ -327,7 +341,7 @@ tags:
327
341
  initialized: true
328
342
  ---
329
343
 
330
- # ${ownerShortId}的Evol助手
344
+ # ${agentDisplayName}
331
345
 
332
346
  EvolClaw AI Agent 网关,支持多项目会话管理和多 AI 后端切换。
333
347
  `;
package/dist/config.js CHANGED
@@ -379,11 +379,15 @@ function validateConfig(config) {
379
379
  for (const inst of feishuInstances) {
380
380
  if (inst.enabled === false)
381
381
  continue;
382
+ const appId = inst.appId || '';
383
+ const appSecret = inst.appSecret || '';
384
+ if (!appId && !appSecret)
385
+ continue;
382
386
  const label = feishuInstances.length > 1 ? ` [${inst.name}]` : '';
383
- if (!inst.appId || inst.appId.startsWith('YOUR_')) {
387
+ if (!appId || appId.startsWith('YOUR_')) {
384
388
  logger.warn(`⚠ Feishu${label} appId not configured (Feishu channel will be disabled)`);
385
389
  }
386
- if (!inst.appSecret || inst.appSecret.startsWith('YOUR_')) {
390
+ if (!appSecret || appSecret.startsWith('YOUR_')) {
387
391
  logger.warn(`⚠ Feishu${label} appSecret not configured (Feishu channel will be disabled)`);
388
392
  }
389
393
  }
@@ -766,14 +766,15 @@ export async function setupAunAid(rl, _config) {
766
766
  console.log(` ✓ AID ${result.aid} 创建成功`);
767
767
  // 下载 CA 根证书(如果本地不存在),从 SDK 返回的实际网关 URL 派生
768
768
  const caDownloaded = await downloadCaRoot(aunPath, result.gateway || '', ' ');
769
- // 关键:CA 下载后必须重建 client,让 SDK 重新加载 trusted roots
770
- // 否则 uploadAgentMd 会因为 "no trusted roots available" 而失败。
771
- if (caDownloaded) {
769
+ // 关键:SDK 默认 rootCaPath=null,只读取包内 bundled certs
770
+ // 必须显式传 root_ca_path 指向刚下载的 root.crt,uploadAgentMd 才能验证 server cert。
771
+ const caCertPath = path.join(aunPath, 'CA', 'root', 'root.crt');
772
+ if (caDownloaded && fs.existsSync(caCertPath)) {
772
773
  try {
773
774
  await client.close();
774
775
  }
775
776
  catch { /* ignore */ }
776
- client = new AUNClient({ aun_path: aunPath });
777
+ client = new AUNClient({ aun_path: aunPath, root_ca_path: caCertPath });
777
778
  if (gatewayPort) {
778
779
  const domain = aid.split('.').slice(1).join('.');
779
780
  client._gatewayUrl = `wss://gateway.${domain}:${gatewayPort}/aun`;
@@ -421,14 +421,15 @@ export async function cmdInit(options) {
421
421
  const result = await client.auth.createAid({ aid: options.aunAid });
422
422
  // 下载 CA 根证书(如果本地不存在),从 SDK 返回的实际网关 URL 派生
423
423
  const caDownloaded = await downloadCaRoot(aunPath, result.gateway || '');
424
- // 关键:CA 下载后必须重建 client,让 SDK 重新加载 trusted roots
425
- // 否则 uploadAgentMd 会因为 "no trusted roots available" 而失败。
426
- if (caDownloaded) {
424
+ // 关键:SDK 默认 rootCaPath=null,只读取包内 bundled certs
425
+ // 必须显式传 root_ca_path 指向刚下载的 root.crt,uploadAgentMd 才能验证 server cert。
426
+ const caCertPath = path.join(aunPath, 'CA', 'root', 'root.crt');
427
+ if (caDownloaded && fs.existsSync(caCertPath)) {
427
428
  try {
428
429
  await client.close();
429
430
  }
430
431
  catch { }
431
- client = new AUNClient({ aun_path: aunPath });
432
+ client = new AUNClient({ aun_path: aunPath, root_ca_path: caCertPath });
432
433
  }
433
434
  // 写入初始 agent.md(initialized: false)
434
435
  const agentName = options.aunAid.split('.')[0];
@@ -70,7 +70,7 @@ evolclaw init --non-interactive \
70
70
 
71
71
  此命令自动完成:
72
72
  1. 创建配置文件 `~/.evolclaw/data/evolclaw.json`
73
- 2. 安装 `@eleans/aun-core-sdk`
73
+ 2. 安装 `@agentunion/aun-node`
74
74
  3. 创建 AID 密钥对(如本地不存在)
75
75
  4. 下载 CA 根证书到 `~/.aun/CA/root/root.crt`
76
76
  5. 写入初始 `agent.md`(`initialized: false`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evolclaw",
3
- "version": "2.5.8",
3
+ "version": "2.5.9",
4
4
  "description": "Lightweight AI Agent gateway connecting Claude Agent SDK to messaging channels (Feishu, ACP) with multi-project session management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",