evolclaw 2.2.0 → 2.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/README.md +49 -27
- package/data/evolclaw.sample.json +6 -3
- package/dist/agents/claude-runner.js +125 -52
- package/dist/agents/codex-runner.js +10 -5
- package/dist/agents/gemini-runner.js +425 -0
- package/dist/channels/aun.js +247 -84
- package/dist/channels/feishu.js +556 -96
- package/dist/channels/wechat.js +98 -74
- package/dist/cli.js +132 -50
- package/dist/config.js +185 -31
- package/dist/core/channel-loader.js +11 -4
- package/dist/core/command-handler.js +750 -209
- package/dist/core/interaction-router.js +68 -0
- package/dist/core/message/message-bridge.js +216 -0
- package/dist/core/{message-processor.js → message/message-processor.js} +386 -105
- package/dist/core/{message-queue.js → message/message-queue.js} +1 -1
- package/dist/{utils → core/message}/stream-debouncer.js +1 -1
- package/dist/{utils → core/message}/stream-flusher.js +73 -13
- package/dist/core/permission.js +212 -11
- package/dist/core/{adapters → session/adapters}/claude-session-file-adapter.js +2 -2
- package/dist/core/{adapters → session/adapters}/codex-session-file-adapter.js +117 -52
- package/dist/core/session/adapters/gemini-session-file-adapter.js +177 -0
- package/dist/{utils → core/session}/session-file-health.js +1 -1
- package/dist/core/{session-manager.js → session/session-manager.js} +57 -11
- package/dist/index.js +138 -54
- package/dist/{core/ipc-server.js → ipc.js} +36 -1
- package/dist/types.js +3 -0
- package/dist/utils/cross-platform.js +38 -1
- package/dist/utils/error-utils.js +130 -5
- package/dist/utils/init-channel.js +649 -0
- package/dist/utils/init.js +55 -150
- package/dist/utils/logger.js +8 -3
- package/dist/utils/media-cache.js +207 -0
- package/dist/{core → utils}/stats-collector.js +16 -0
- package/package.json +3 -3
- package/dist/core/message-bridge.js +0 -187
- package/dist/utils/init-feishu.js +0 -263
- package/dist/utils/init-wechat.js +0 -172
- package/dist/utils/ipc-client.js +0 -36
- package/dist/utils/permission-utils.js +0 -71
- /package/dist/{utils → core/message}/message-cache.js +0 -0
- /package/dist/{utils → core/message}/stream-idle-monitor.js +0 -0
- /package/dist/core/{session-file-adapter.js → session/session-file-adapter.js} +0 -0
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// 危险命令黑名单(正则表达式)
|
|
2
|
-
const DANGEROUS_PATTERNS = [
|
|
3
|
-
// Unix
|
|
4
|
-
/\brm\s+-\w*r\w*f/, // rm -rf
|
|
5
|
-
/\bsudo\b/, // sudo
|
|
6
|
-
/\bmkfs\b/, // mkfs (格式化文件系统)
|
|
7
|
-
/\bdd\s+if=/, // dd (磁盘操作)
|
|
8
|
-
/\bchmod\s+777/, // chmod 777 (危险权限)
|
|
9
|
-
/>\s*\/dev\//, // 重定向到设备文件
|
|
10
|
-
/\bshutdown\b/, // 关机
|
|
11
|
-
/\breboot\b/, // 重启
|
|
12
|
-
// Windows
|
|
13
|
-
/\bformat\s+[a-zA-Z]:/i, // format C: (格式化磁盘)
|
|
14
|
-
/\brd\s+\/s/i, // rd /s (递归删除目录)
|
|
15
|
-
/\bdel\s+\/[sfq]/i, // del /f, /s, /q (强制删除)
|
|
16
|
-
/\breg\s+delete/i, // reg delete (删除注册表)
|
|
17
|
-
/\bnet\s+stop/i, // net stop (停止服务)
|
|
18
|
-
];
|
|
19
|
-
/**
|
|
20
|
-
* 黑名单检查(用于 PreToolUse hook)
|
|
21
|
-
* 检查危险命令模式,非黑名单一律放行
|
|
22
|
-
*/
|
|
23
|
-
export async function checkBlacklist(toolName, input) {
|
|
24
|
-
// 只检查 Bash 工具,其余工具全部放行
|
|
25
|
-
if (toolName === 'Bash') {
|
|
26
|
-
const cmd = input.command || '';
|
|
27
|
-
// 空命令直接放行
|
|
28
|
-
if (!cmd || cmd.trim() === '') {
|
|
29
|
-
return { behavior: 'allow', updatedInput: input };
|
|
30
|
-
}
|
|
31
|
-
// 检查黑名单
|
|
32
|
-
for (const pattern of DANGEROUS_PATTERNS) {
|
|
33
|
-
if (pattern.test(cmd)) {
|
|
34
|
-
return {
|
|
35
|
-
behavior: 'deny',
|
|
36
|
-
message: `⛔ 危险命令被拦截: ${cmd.substring(0, 80)}`
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// 默认允许
|
|
42
|
-
return { behavior: 'allow', updatedInput: input };
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* 工具输入摘要(提取工具调用的可读描述,供权限审批和消息展示使用)
|
|
46
|
-
*/
|
|
47
|
-
export function summarizeToolInput(toolName, input) {
|
|
48
|
-
if (!input)
|
|
49
|
-
return '';
|
|
50
|
-
const extractors = {
|
|
51
|
-
'Read': (i) => i.file_path,
|
|
52
|
-
'Edit': (i) => i.file_path,
|
|
53
|
-
'Write': (i) => i.file_path,
|
|
54
|
-
'Bash': (i) => i.command?.substring(0, 80),
|
|
55
|
-
'Grep': (i) => `pattern: ${i.pattern}`,
|
|
56
|
-
'Glob': (i) => `pattern: ${i.pattern}`,
|
|
57
|
-
'Agent': (i) => i.description || i.prompt?.substring(0, 80),
|
|
58
|
-
};
|
|
59
|
-
const extractor = extractors[toolName];
|
|
60
|
-
if (extractor) {
|
|
61
|
-
const result = extractor(input);
|
|
62
|
-
if (result)
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
65
|
-
return input.description
|
|
66
|
-
|| input.file_path
|
|
67
|
-
|| input.pattern
|
|
68
|
-
|| input.command?.substring(0, 80)
|
|
69
|
-
|| input.prompt?.substring(0, 80)
|
|
70
|
-
|| '';
|
|
71
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|