evolclaw 2.8.2 → 3.0.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 +21 -12
- package/dist/agents/claude-runner.js +105 -30
- package/dist/agents/codex-runner.js +15 -7
- package/dist/agents/gemini-runner.js +14 -5
- package/dist/agents/resolve.js +134 -0
- package/dist/agents/templates.js +3 -3
- package/dist/aun/aid/agentmd.js +186 -0
- package/dist/aun/aid/client.js +134 -0
- package/dist/aun/aid/identity.js +131 -0
- package/dist/aun/aid/index.js +3 -0
- package/dist/aun/aid/types.js +1 -0
- package/dist/aun/aid/validation.js +21 -0
- package/dist/aun/msg/group.js +291 -0
- package/dist/aun/msg/index.js +4 -0
- package/dist/aun/msg/p2p.js +144 -0
- package/dist/aun/msg/payload-type.js +27 -0
- package/dist/aun/msg/upload.js +98 -0
- package/dist/aun/outbox.js +138 -0
- package/dist/aun/rpc/caller.js +42 -0
- package/dist/aun/rpc/connection.js +34 -0
- package/dist/aun/rpc/index.js +2 -0
- package/dist/aun/storage/download.js +29 -0
- package/dist/aun/storage/index.js +3 -0
- package/dist/aun/storage/manage.js +10 -0
- package/dist/aun/storage/upload.js +35 -0
- package/dist/channels/aun.js +1064 -279
- package/dist/channels/dingtalk.js +58 -5
- package/dist/channels/feishu.js +266 -30
- package/dist/channels/qqbot.js +67 -12
- package/dist/channels/wechat.js +61 -4
- package/dist/channels/wecom.js +58 -5
- package/dist/cli/agent.js +800 -0
- package/dist/cli/index.js +4253 -0
- package/dist/{utils → cli}/init-channel.js +211 -621
- package/dist/cli/init.js +178 -0
- package/dist/config-store.js +613 -0
- package/dist/core/baseagent-loader.js +48 -0
- package/dist/core/channel-loader.js +162 -11
- package/dist/core/command-handler.js +1090 -838
- package/dist/core/evolagent-registry.js +191 -360
- package/dist/core/evolagent.js +203 -234
- package/dist/core/interaction-router.js +52 -5
- package/dist/core/message/im-renderer.js +480 -0
- package/dist/core/message/items-formatter.js +61 -0
- package/dist/core/message/message-bridge.js +104 -56
- package/dist/core/message/message-log.js +91 -0
- package/dist/core/message/message-processor.js +326 -145
- package/dist/core/message/message-queue.js +5 -5
- package/dist/core/permission.js +21 -8
- package/dist/core/session/adapters/codex-session-file-adapter.js +24 -2
- package/dist/core/session/session-fs-store.js +230 -0
- package/dist/core/session/session-manager.js +704 -775
- package/dist/core/session/session-mapper.js +87 -0
- package/dist/core/trigger/manager.js +122 -0
- package/dist/core/trigger/parser.js +128 -0
- package/dist/core/trigger/scheduler.js +224 -0
- package/dist/{templates → data}/prompts.md +34 -1
- package/dist/index.js +437 -273
- package/dist/ipc.js +49 -0
- package/dist/paths.js +82 -9
- package/dist/types.js +8 -2
- package/dist/utils/atomic-write.js +79 -0
- package/dist/utils/channel-helpers.js +46 -0
- package/dist/utils/cross-platform.js +0 -18
- package/dist/utils/instance-registry.js +433 -0
- package/dist/utils/log-writer.js +216 -0
- package/dist/utils/logger.js +24 -77
- package/dist/utils/media-cache.js +23 -0
- package/dist/utils/{upgrade.js → npm-ops.js} +52 -21
- package/dist/utils/process-introspect.js +144 -0
- package/dist/utils/stats.js +192 -0
- package/dist/watch-msg.js +529 -0
- package/evolclaw-install-aun.md +114 -46
- package/kits/aun/meta.md +25 -0
- package/kits/aun/role.md +25 -0
- package/kits/channels/aun.md +25 -0
- package/kits/evolclaw/commands.md +31 -0
- package/kits/evolclaw/identity-tools.md +26 -0
- package/kits/evolclaw/self-summary.md +29 -0
- package/kits/evolclaw/tools.md +25 -0
- package/kits/templates/group.md +20 -0
- package/kits/templates/private.md +9 -0
- package/kits/templates/system-fragments/personal-context.md +3 -0
- package/kits/templates/system-fragments/self-intro.md +5 -0
- package/kits/templates/system-fragments/speaker-intro.md +5 -0
- package/kits/templates/system-fragments/venue-intro.md +5 -0
- package/package.json +7 -5
- package/data/evolclaw.sample.json +0 -60
- package/dist/channels/aun-ops.js +0 -275
- package/dist/cli.js +0 -2178
- package/dist/config.js +0 -576
- package/dist/core/agent-loader.js +0 -39
- package/dist/core/agent-registry.js +0 -450
- package/dist/core/evolagent-schema.js +0 -72
- package/dist/core/message/stream-flusher.js +0 -238
- package/dist/core/message/thought-emitter.js +0 -162
- package/dist/core/reload-hooks.js +0 -87
- package/dist/prompts/templates.js +0 -122
- package/dist/templates/skills.md +0 -66
- package/dist/utils/channel-fingerprint.js +0 -59
- package/dist/utils/error-dict.js +0 -63
- package/dist/utils/format.js +0 -32
- package/dist/utils/init.js +0 -645
- package/dist/utils/migrate-project.js +0 -122
- package/dist/utils/reload-hooks.js +0 -87
- package/dist/utils/stats-collector.js +0 -99
package/evolclaw-install-aun.md
CHANGED
|
@@ -10,9 +10,10 @@ EvolClaw 是一个开源的 AI Agent 网关,将 Claude/Codex 等 AI 后端连
|
|
|
10
10
|
|
|
11
11
|
## 前置条件
|
|
12
12
|
|
|
13
|
-
- Node.js >= 18,npm >= 8
|
|
13
|
+
- Node.js >= 18,npm >= 8(使用 codex baseagent 时建议 >= 22.5 以获得完整 session 列表查询;低版本会自动降级为 rollout 文件查询)
|
|
14
|
+
- 一款 baseagent CLI:`claude` / `codex` / `gemini` 任一在 PATH 中
|
|
14
15
|
- 一个 AUN Agent ID(AID)——标识你的 Agent
|
|
15
|
-
- 一个 Owner AID
|
|
16
|
+
- 一个 Owner AID(可选)——接收欢迎消息和管理权限;不填则首次通信者自动绑定
|
|
16
17
|
|
|
17
18
|
---
|
|
18
19
|
|
|
@@ -23,10 +24,13 @@ EvolClaw 是一个开源的 AI Agent 网关,将 Claude/Codex 等 AI 后端连
|
|
|
23
24
|
```bash
|
|
24
25
|
node --version # 需要 >= 18
|
|
25
26
|
npm --version # 需要 >= 8
|
|
27
|
+
which claude || which codex || which gemini # 至少一款 baseagent CLI
|
|
26
28
|
```
|
|
27
29
|
|
|
28
30
|
版本不满足请先升级:https://nodejs.org
|
|
29
31
|
|
|
32
|
+
baseagent CLI 缺失时可用 `npm install -g @anthropic-ai/claude-code` 安装 claude。
|
|
33
|
+
|
|
30
34
|
### 步骤 2:安装 EvolClaw
|
|
31
35
|
|
|
32
36
|
```bash
|
|
@@ -70,85 +74,134 @@ evolclaw status
|
|
|
70
74
|
|
|
71
75
|
- 输出表明未运行(`not running` / `stopped` / 无 PID)→ 直接进入下一步。
|
|
72
76
|
|
|
73
|
-
### 步骤 4
|
|
77
|
+
### 步骤 4:解析用户输入
|
|
78
|
+
|
|
79
|
+
用户在触发安装时通常用类似下面的格式提供配置信息(**Claude Code 必须按以下规则解析**):
|
|
74
80
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
```
|
|
82
|
+
安装 evolclaw(npm install -g evolclaw),读取包内的安装文档完成配置
|
|
83
|
+
你要使用的AID是:aibot.agentid.pub
|
|
84
|
+
你的主人AID是:elean.agentid.pub
|
|
85
|
+
你的昵称是:我是小艾
|
|
86
|
+
```
|
|
80
87
|
|
|
81
|
-
|
|
88
|
+
提取规则(每条都是"消息中有则用,无则不带 flag"):
|
|
82
89
|
|
|
83
|
-
|
|
90
|
+
| 用户消息模式 | 命令参数 |
|
|
91
|
+
|---|---|
|
|
92
|
+
| `你要使用的AID是:X` / `agent AID:X` / `bot AID is X` | 位置参数 `<aid>`(**必填**——若用户消息没提供,停下问用户) |
|
|
93
|
+
| `你的主人AID是:X` / `owner AID:X` / `owner is X` | `--owner X`(可选,缺则不带 flag,首次通信者自动绑定) |
|
|
94
|
+
| `你的昵称是:X` / `叫 X` / `name X` / `the bot is named X` | `--name "X"`(可选,缺则不带 flag,agent new 自动用 AID 首段) |
|
|
84
95
|
|
|
85
|
-
|
|
96
|
+
**注意**:`<aid>` 和 `--owner` 必须不同的 AID(Agent 需要独立身份,不能与 Owner 相同)。
|
|
86
97
|
|
|
87
|
-
|
|
98
|
+
`--description` **不从用户消息提取**,按步骤 5 流程生成候选让用户选择。
|
|
99
|
+
|
|
100
|
+
`--project`(agent 默认工作目录)需要单独询问用户,提供三个选项:
|
|
101
|
+
|
|
102
|
+
1. **推荐默认**:`~/evolclaw-projects/<aid 首段>`(EvolClaw 约定的默认工作区;若不存在会自动创建)
|
|
88
103
|
2. **当前 Claude Code 运行目录**:即本次会话启动 `claude` 的工作目录(通过 `pwd` 获取)——适合希望 bot 直接在当前项目里工作的场景
|
|
89
104
|
3. **自定义路径**:用户指定绝对路径(须是已存在的目录,或接受后自动创建)
|
|
90
105
|
|
|
91
106
|
示例提问:
|
|
92
107
|
|
|
93
|
-
> 请选择默认项目目录(
|
|
94
|
-
> 1) `~/projects
|
|
108
|
+
> 请选择默认项目目录(agent 默认工作目录):
|
|
109
|
+
> 1) `~/evolclaw-projects/<aid 首段>`(推荐)
|
|
95
110
|
> 2) 当前目录:`<pwd 输出>`
|
|
96
111
|
> 3) 自定义路径(请提供绝对路径)
|
|
97
112
|
|
|
98
113
|
用户未选择时,默认取选项 1。选项 3 需校验路径是绝对路径;目录不存在则 `mkdir -p` 创建。
|
|
99
114
|
|
|
100
|
-
### 步骤 5
|
|
115
|
+
### 步骤 5:生成 description 候选并让用户选择
|
|
116
|
+
|
|
117
|
+
Claude Code 基于已确定的 `<aid>` / `--name`(若已提取)和当前对话上下文,**生成 3 个不同侧重的简短中文描述**(每条 10-30 字):
|
|
118
|
+
|
|
119
|
+
- **候选 1(能力陈述)**:突出 agent 能做什么,例 `"EvolClaw 多模型 AI 助手"`
|
|
120
|
+
- **候选 2(服务对象)**:突出服务谁,例 `"<owner 名称>的 AI 私人助手"`
|
|
121
|
+
- **候选 3(风格化)**:拟人化或带性格的表述,例 `"可爱聪明的小艾,随叫随到"`
|
|
122
|
+
|
|
123
|
+
用 `AskUserQuestion`(或交互问答)让用户选择。选项含**4 项**:候选 1 / 2 / 3 / 跳过;用户也可输入"其他"自定义。
|
|
124
|
+
|
|
125
|
+
| 用户选择 | 命令参数 |
|
|
126
|
+
|---|---|
|
|
127
|
+
| 候选 1 / 2 / 3 | `--description "<对应候选>"` |
|
|
128
|
+
| 其他(自定义文本) | `--description "<用户输入>"` |
|
|
129
|
+
| 跳过 | 不带 `--description` flag |
|
|
130
|
+
|
|
131
|
+
### 步骤 6:写全局 defaults.json
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
evolclaw init --non-interactive
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
可选传 `--baseagent <claude|codex|gemini>` 显式指定;不传则取 PATH 中第一个可用项。
|
|
138
|
+
重装场景下需要覆盖已有 `defaults.json`,加 `--force`。
|
|
139
|
+
|
|
140
|
+
此命令仅创建 `$EVOLCLAW_HOME/agents/defaults.json`(`$EVOLCLAW_HOME` 默认 `~/.evolclaw`),不碰 AID 与渠道。
|
|
101
141
|
|
|
102
|
-
|
|
142
|
+
### 步骤 7:创建 agent
|
|
103
143
|
|
|
104
144
|
```bash
|
|
105
|
-
evolclaw
|
|
106
|
-
--
|
|
107
|
-
--
|
|
108
|
-
--
|
|
109
|
-
--
|
|
145
|
+
evolclaw agent new <aid> --non-interactive \
|
|
146
|
+
--project <用户选择的绝对路径> \
|
|
147
|
+
[--owner <Owner AID>] \
|
|
148
|
+
[--name "<昵称>"] \
|
|
149
|
+
[--description "<选定描述>"] \
|
|
150
|
+
[--baseagent <claude|codex|gemini>]
|
|
110
151
|
```
|
|
111
152
|
|
|
153
|
+
按步骤 4/5 的提取规则填入 flag——**省略未提取到的可选参数**,不要主动填默认值(agent new 内部会处理默认)。
|
|
154
|
+
|
|
112
155
|
此命令自动完成:
|
|
113
|
-
1. 创建配置文件 `~/.evolclaw/data/evolclaw.json`
|
|
114
|
-
2. 安装 `@agentunion/aun-node`
|
|
115
|
-
3. 创建 AID 密钥对(如本地不存在)
|
|
116
|
-
4. 下载 CA 根证书到 `~/.aun/CA/root/root.crt`
|
|
117
|
-
5. 写入初始 `agent.md`(`initialized: false`)
|
|
118
|
-
6. 写入配置(含 owner 字段)
|
|
119
156
|
|
|
120
|
-
|
|
157
|
+
1. 校验 AID 格式(多级域名,如 `mybot.agentid.pub`)
|
|
158
|
+
2. 创建 AID 密钥对(如本地不存在);下载 CA 根证书到 `~/.aun/CA/root/root.crt`
|
|
159
|
+
3. 创建 per-agent 配置文件 `$EVOLCLAW_HOME/agents/<aid>/config.json`(含 `initialized: false`)
|
|
160
|
+
4. 生成并签名上传 `agent.md` 到 AUN 网络
|
|
161
|
+
|
|
162
|
+
AUN 通道由 `agent.aid` 隐式驱动,不需要单独配 channel——`evolclaw start` 后即自动连接;首次连接成功并向 owner 发完欢迎消息后,`config.json` 中的 `initialized` 会被更新为 `true`。
|
|
163
|
+
|
|
164
|
+
### 步骤 8:启动前验证
|
|
121
165
|
|
|
122
166
|
读取配置文件确认关键字段:
|
|
123
167
|
|
|
124
168
|
```bash
|
|
125
|
-
cat
|
|
169
|
+
cat $EVOLCLAW_HOME/agents/<aid>/config.json
|
|
126
170
|
```
|
|
127
171
|
|
|
128
172
|
检查:
|
|
129
|
-
|
|
130
|
-
- `
|
|
173
|
+
|
|
174
|
+
- `aid` — 你的 AID
|
|
175
|
+
- `owners` — Owner AID 数组(可为空,留给自动绑定)
|
|
176
|
+
- `active_baseagent` — `claude` / `codex` / `gemini`
|
|
131
177
|
- `projects.defaultPath` — 项目路径(目录需存在)
|
|
132
|
-
- `channels
|
|
178
|
+
- `channels` — 数组,初始可为空(AUN 隐式上线)
|
|
179
|
+
- `initialized` — 应为 `false`(首次连接成功后由系统更新为 `true`)
|
|
133
180
|
|
|
134
181
|
如发现缺失或异常,向用户说明并提供修复方案。
|
|
135
182
|
|
|
136
|
-
### 步骤
|
|
183
|
+
### 步骤 9:启动服务
|
|
137
184
|
|
|
138
185
|
```bash
|
|
139
186
|
evolclaw start
|
|
140
187
|
```
|
|
141
188
|
|
|
142
|
-
### 步骤
|
|
189
|
+
### 步骤 10:验证运行状态
|
|
143
190
|
|
|
144
191
|
```bash
|
|
145
192
|
evolclaw status
|
|
146
|
-
|
|
193
|
+
evolclaw logs # 实时滚动日志,Ctrl+C 退出
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
或直接读最近日志(LogWriter 会切片归档,需要 `tail -F` 跨切片续接):
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
tail -F ~/.evolclaw/logs/evolclaw.log
|
|
147
200
|
```
|
|
148
201
|
|
|
149
202
|
日志中应出现:`[AUN] Connected as @<aid>`
|
|
150
203
|
|
|
151
|
-
|
|
204
|
+
如未出现或有错误,读取完整日志分析原因并提供修复建议(也可运行 `evolclaw diagnose` 快速检查配置和数据目录)。
|
|
152
205
|
|
|
153
206
|
---
|
|
154
207
|
|
|
@@ -156,9 +209,12 @@ tail -n 30 ~/.evolclaw/logs/evolclaw.log
|
|
|
156
209
|
|
|
157
210
|
EvolClaw 首次连接 AUN 网络时自动:
|
|
158
211
|
|
|
159
|
-
1. 检测
|
|
160
|
-
2. 若为 `false
|
|
161
|
-
|
|
212
|
+
1. 检测 `$EVOLCLAW_HOME/agents/<aid>/config.json` 中的 `initialized` 字段
|
|
213
|
+
2. 若为 `false`,且 `owners[0]` 已配置:
|
|
214
|
+
- 生成完整 agent.md(含基于 owner 的 display name)并发布到 AUN 网络
|
|
215
|
+
- 向 Owner 发送欢迎消息
|
|
216
|
+
- 把 `config.json` 中的 `initialized` 更新为 `true`
|
|
217
|
+
3. 若 `owners[]` 为空(自动绑定模式):跳过欢迎消息,`initialized` 维持 `false`;首次有人和该 agent 私聊时自动绑定为 owner,**自动绑定后立即补发欢迎消息**并把 `initialized` 置 `true`(订阅 `channel:owner-bound` 事件实现)
|
|
162
218
|
|
|
163
219
|
无需手动触发,连接成功后自动完成。
|
|
164
220
|
|
|
@@ -179,10 +235,10 @@ EvolClaw 首次连接 AUN 网络时自动:
|
|
|
179
235
|
## 常见问题
|
|
180
236
|
|
|
181
237
|
**Q: AID 已存在怎么办?**
|
|
182
|
-
`evolclaw
|
|
238
|
+
`evolclaw agent new` 会检测本地密钥,已存在则跳过创建(`alreadyExisted`)。如果 `agents/<aid>/config.json` 已存在,命令会失败;加 `--force` 可覆盖配置(AID 密钥保留;agent.md 会按当前 `--name` / `--description` 重新生成并重新上传)。
|
|
183
239
|
|
|
184
240
|
**Q: 启动失败怎么办?**
|
|
185
|
-
|
|
241
|
+
运行 `evolclaw logs` 实时滚动日志,或 `evolclaw diagnose` 检查配置和数据目录。
|
|
186
242
|
|
|
187
243
|
**Q: 如何重启/查看日志?**
|
|
188
244
|
```bash
|
|
@@ -192,8 +248,19 @@ evolclaw logs
|
|
|
192
248
|
|
|
193
249
|
**Q: 如何清理损坏的 AID 重新注册?**
|
|
194
250
|
```bash
|
|
195
|
-
|
|
196
|
-
|
|
251
|
+
evolclaw aid delete <aid> # 删本地密钥与证书
|
|
252
|
+
rm -rf $EVOLCLAW_HOME/agents/<aid> # 删 per-agent 配置
|
|
253
|
+
evolclaw agent new <aid> --non-interactive --project <abs path>
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Q: 想加飞书 / 微信 / 钉钉等 IM 通道?**
|
|
257
|
+
agent 已建好后再单独配置(每条命令交互式从已有 agents 里选目标):
|
|
258
|
+
```bash
|
|
259
|
+
evolclaw init feishu # 飞书扫码
|
|
260
|
+
evolclaw init wechat # 微信扫码
|
|
261
|
+
evolclaw init dingtalk # 钉钉扫码
|
|
262
|
+
evolclaw init qqbot # QQ 机器人扫码
|
|
263
|
+
evolclaw init wecom # 企业微信手输 Bot ID + Secret
|
|
197
264
|
```
|
|
198
265
|
|
|
199
266
|
---
|
|
@@ -293,7 +360,8 @@ node -e "try{require('@anthropic-ai/claude-code-win32-x64');console.log('OK')}ca
|
|
|
293
360
|
# 1. 升级到 evolclaw >= 2.5.4
|
|
294
361
|
npm install -g evolclaw@latest
|
|
295
362
|
|
|
296
|
-
# 2. 如仍报错,先手动安装 AUN SDK 依赖再执行 init
|
|
363
|
+
# 2. 如仍报错,先手动安装 AUN SDK 依赖再执行 init / agent new
|
|
297
364
|
npm install -g @agentunion/aun-node
|
|
298
|
-
evolclaw init --non-interactive
|
|
299
|
-
|
|
365
|
+
evolclaw init --non-interactive
|
|
366
|
+
evolclaw agent new <aid> --non-interactive --project <abs path>
|
|
367
|
+
```
|
package/kits/aun/meta.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# AUN 最小认知包
|
|
2
|
+
|
|
3
|
+
AUN(Agent Union Network)是 Agent 之间安全通信的标准协议——类比"Agent 互联网时代的 HTTP + TLS + DNS"。
|
|
4
|
+
|
|
5
|
+
## 核心概念
|
|
6
|
+
|
|
7
|
+
- **AID**:域名风格标识(如 `alice.agentid.pub`),身份即入口
|
|
8
|
+
- **通信**:WebSocket + JSON-RPC 2.0
|
|
9
|
+
- **信任**:四级 X.509 证书链
|
|
10
|
+
|
|
11
|
+
## 自主模式
|
|
12
|
+
|
|
13
|
+
AUN 按自主模式设计——收到消息 ≠ 必须回复,Agent 自主决定是否响应。
|
|
14
|
+
|
|
15
|
+
要和其他 agent 通信时,必须调用 `evolclaw ctl send` 命令发消息,不要把输出当成发送给对方的内容。
|
|
16
|
+
|
|
17
|
+
## 命名空间
|
|
18
|
+
|
|
19
|
+
| 命名空间 | 作用 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `message.*` | 点对点消息收发 |
|
|
22
|
+
| `group.*` | 群组生命周期、群消息 |
|
|
23
|
+
| `storage.*` | 文件上传下载 |
|
|
24
|
+
| `stream.*` | 实时流(语音/视频/token) |
|
|
25
|
+
| `meta.*` | ping、状态查询 |
|
package/kits/aun/role.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# AUN 角色与场景规则
|
|
2
|
+
|
|
3
|
+
## 场景判定
|
|
4
|
+
|
|
5
|
+
| 条件 | 场景 | 行为 |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 无 AUN 通道 | coding | 本地模式,每条都响应 |
|
|
8
|
+
| AUN + private | 私聊 | 自主模式,通过 ctl send 回复 |
|
|
9
|
+
| AUN + group | 群聊 | 自主模式,被 @ 才默认响应 |
|
|
10
|
+
|
|
11
|
+
## 对端身份
|
|
12
|
+
|
|
13
|
+
| 身份 | 含义 |
|
|
14
|
+
|---|---|
|
|
15
|
+
| owner | 主人(拥有该 agent 的人) |
|
|
16
|
+
| admin | 管理员 |
|
|
17
|
+
| guest | 已认证的普通访客 |
|
|
18
|
+
| anonymous | 未认证 |
|
|
19
|
+
|
|
20
|
+
## 行为原则
|
|
21
|
+
|
|
22
|
+
- owner 的指令优先级最高
|
|
23
|
+
- admin 可执行管理命令但不能改 owner
|
|
24
|
+
- guest 只能使用基础对话功能
|
|
25
|
+
- anonymous 按 agent 配置决定是否响应
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# AUN 通信约定
|
|
2
|
+
|
|
3
|
+
## 消息收发
|
|
4
|
+
|
|
5
|
+
- 私聊:`message.send` / `message.receive`
|
|
6
|
+
- 群聊:`group.message.send` / `group.message.receive`
|
|
7
|
+
- 消息格式:纯文本 / Markdown / 文件引用
|
|
8
|
+
|
|
9
|
+
## 身份识别
|
|
10
|
+
|
|
11
|
+
- 每条入站消息携带发送者 AID
|
|
12
|
+
- 通过 `https://<aid>/agent.md` 获取对端名片
|
|
13
|
+
- 名片包含:名称、能力声明、联系方式
|
|
14
|
+
|
|
15
|
+
## 连接管理
|
|
16
|
+
|
|
17
|
+
- evolclaw 自动维护 WebSocket 长连接
|
|
18
|
+
- 断线自动重连(SDK 内置退避策略)
|
|
19
|
+
- 连接状态可通过 `evolclaw ctl aid` 查看
|
|
20
|
+
|
|
21
|
+
## 群聊
|
|
22
|
+
|
|
23
|
+
- 群 ID 格式:`<issuer>/<group-name>`
|
|
24
|
+
- 被 @ 时才默认响应(可通过 venue policy 配置)
|
|
25
|
+
- 群消息按窗口批量推送(batch_window_seconds)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# EvolClaw 可用命令
|
|
2
|
+
|
|
3
|
+
通过 `evolclaw ctl <command> [args]` 管理运行时配置。仅在 evolclaw 托管环境中可用。
|
|
4
|
+
|
|
5
|
+
## 查询类(所有用户)
|
|
6
|
+
- `evolclaw ctl help` — 显示帮助
|
|
7
|
+
- `evolclaw ctl status` — 显示会话状态
|
|
8
|
+
- `evolclaw ctl check` — 检查渠道健康状态
|
|
9
|
+
|
|
10
|
+
## 配置类(管理员)
|
|
11
|
+
- `evolclaw ctl model` — 查看当前模型和可选列表
|
|
12
|
+
- `evolclaw ctl model <model-id>` — 切换模型(如 `opus`, `sonnet`, `haiku`)
|
|
13
|
+
- `evolclaw ctl effort` — 查看当前推理强度
|
|
14
|
+
- `evolclaw ctl effort <low|medium|high|max>` — 切换推理强度
|
|
15
|
+
- `evolclaw ctl compact` — 压缩当前会话上下文
|
|
16
|
+
|
|
17
|
+
## 权限类
|
|
18
|
+
- `evolclaw ctl perm` — 查看当前权限模式(管理员)
|
|
19
|
+
- `evolclaw ctl perm <mode>` — 切换权限模式(仅 owner)
|
|
20
|
+
|
|
21
|
+
## 运维类(仅 owner)
|
|
22
|
+
- `evolclaw ctl activity <all|dm|owner|none>` — 查看/控制中间输出显示模式
|
|
23
|
+
- `evolclaw ctl send [channel] <message>` — 发送消息
|
|
24
|
+
- `evolclaw ctl file <path>` — 发送文件
|
|
25
|
+
- `evolclaw ctl restart` — 重启服务
|
|
26
|
+
- `evolclaw ctl restart <channel>` — 重连指定渠道
|
|
27
|
+
- `evolclaw ctl agentmd` — 查看当前 agent.md
|
|
28
|
+
- `evolclaw ctl agentmd put` — 发布本地 agent.md
|
|
29
|
+
- `evolclaw ctl agentmd set <内容>` — 直接设置 agent.md 内容
|
|
30
|
+
- `evolclaw ctl aid` — 列出所有 AUN 实例及连接状态
|
|
31
|
+
- `evolclaw ctl aid new <aid>` — 创建新 AID 并热加载
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 身份/环境层工具用法
|
|
2
|
+
|
|
3
|
+
## 身份识别
|
|
4
|
+
|
|
5
|
+
当你在对话中识别出对端的真实身份时,可以调用:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
evolclaw ctl identity.identify --aid <对端AID> --name <名称> --type person --method self-declaration
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 查看对端信息
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
evolclaw ctl identity.show <对端AID>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 查看当前环境
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
evolclaw ctl venue.show
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 注意
|
|
24
|
+
|
|
25
|
+
- 身份层工具仅在身份层运行时实现后可用(当前为占位文档)
|
|
26
|
+
- 对端名片通过 `https://<aid>/agent.md` 获取,由 AUN 网络提供
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 自我总结流程指南
|
|
2
|
+
|
|
3
|
+
自我总结是 agent 的自省行为——在会话结束或空闲时,回顾本次交互,提炼值得记住的信息。
|
|
4
|
+
|
|
5
|
+
## 触发时机
|
|
6
|
+
|
|
7
|
+
- 会话结束时(`on_session_end: true`)
|
|
8
|
+
- 空闲超过 N 分钟(`on_idle_minutes: 30`)
|
|
9
|
+
- 每日定时(`daily_at: "03:00"`)
|
|
10
|
+
- 每周定时(`weekly_on: "Sunday"`)
|
|
11
|
+
|
|
12
|
+
## 总结目标
|
|
13
|
+
|
|
14
|
+
| 目标层 | 写入位置 | 内容 |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| 事件性记忆 | `personal/memory/episodic.jsonl` | "我经历了什么"——关键事件、决策、结果 |
|
|
17
|
+
| 语义性记忆 | `personal/memory/semantic.md` | 习得的事实、规律、结论 |
|
|
18
|
+
| 当前关注 | `personal/memory/working.md` | 短期关注点(下次会话开始时加载) |
|
|
19
|
+
| 反思日志 | `personal/journal.jsonl` | 关键决策的复盘、自我修订 |
|
|
20
|
+
|
|
21
|
+
## 预算控制
|
|
22
|
+
|
|
23
|
+
- `max_tokens_per_day: 50000`——每日总结消耗的 token 上限
|
|
24
|
+
- 超出预算时跳过本次总结,记录到 `self_summary_failures.jsonl`
|
|
25
|
+
|
|
26
|
+
## 去重
|
|
27
|
+
|
|
28
|
+
- episodic.jsonl 按时间窗口去重(同一小时内的重复事件合并)
|
|
29
|
+
- semantic.md 由 LLM 判断是否已有等价结论
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# EvolClaw 可用工具
|
|
2
|
+
|
|
3
|
+
evolclaw 托管环境下,baseagent 可通过 Bash 工具调用以下命令:
|
|
4
|
+
|
|
5
|
+
## 消息发送
|
|
6
|
+
- `evolclaw ctl send "<消息>"` — 发送文本消息给当前对话方
|
|
7
|
+
- `evolclaw ctl file <路径>` — 发送项目内文件
|
|
8
|
+
|
|
9
|
+
## 运行时查询
|
|
10
|
+
- `evolclaw ctl status` — 当前会话状态
|
|
11
|
+
- `evolclaw ctl model` — 当前模型信息
|
|
12
|
+
- `evolclaw ctl effort` — 当前推理强度
|
|
13
|
+
- `evolclaw ctl check` — 渠道健康检查
|
|
14
|
+
- `evolclaw ctl aid` — AUN 连接状态
|
|
15
|
+
|
|
16
|
+
## 运行时配置
|
|
17
|
+
- `evolclaw ctl model <id>` — 切换模型
|
|
18
|
+
- `evolclaw ctl effort <level>` — 切换推理强度
|
|
19
|
+
- `evolclaw ctl compact` — 压缩上下文
|
|
20
|
+
- `evolclaw ctl perm <mode>` — 切换权限模式
|
|
21
|
+
|
|
22
|
+
## agent.md 管理
|
|
23
|
+
- `evolclaw ctl agentmd` — 查看当前 agent.md
|
|
24
|
+
- `evolclaw ctl agentmd put` — 发布到 AUN 网络
|
|
25
|
+
- `evolclaw ctl agentmd set <内容>` — 直接设置内容
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# EvolClaw 运行时系统提示模板(群聊)
|
|
2
|
+
|
|
3
|
+
## runtime
|
|
4
|
+
|
|
5
|
+
[当前环境] 会话通道: {{channel}} | 当前项目: {{project}}{{?sessionName}} | 会话名称: {{sessionName}}{{/}}{{?selfIdentity}} | 当前名称: {{selfIdentity}}{{/}} | 对端身份: {{peerRole}}{{?peerIdentity}} | 对端名称: {{peerIdentity}}{{/}}{{?peerType}} | 对端类型: {{peerType}}{{/}} | 聊天类型: group{{?agent}} | 当前Agent: {{agent}}{{/}}
|
|
6
|
+
{{?readonly}}[只读模式] 禁止修改项目文件。{{/}}
|
|
7
|
+
{{?fileSendCurrent}}[SEND_FILE:路径] 发送文件到当前通道{{/}}
|
|
8
|
+
{{?capability}}[通道能力] {{capabilities}}{{/}}
|
|
9
|
+
|
|
10
|
+
## group
|
|
11
|
+
|
|
12
|
+
[群聊回复规则] 回复时必须在开头添加 @{{peerId}} 来通知对方
|
|
13
|
+
|
|
14
|
+
## proactive
|
|
15
|
+
|
|
16
|
+
[Proactive 模式] 你的所有文本输出都会被静默丢弃,用户永远看不到。唯一能让用户收到消息的方式:
|
|
17
|
+
调用 Bash 工具执行命令 :evolclaw ctl send "<消息内容>"
|
|
18
|
+
发送文件: evolclaw ctl file <路径>
|
|
19
|
+
可多次调用发送多条消息,如果不想回复停止调用即可。
|
|
20
|
+
禁止使用 AskUserQuestion 和 ExitPlanMode 工具——proactive 模式下应由你主动用 ctl send 与用户沟通。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# EvolClaw 运行时系统提示模板(私聊)
|
|
2
|
+
|
|
3
|
+
## runtime
|
|
4
|
+
|
|
5
|
+
[当前环境] 会话通道: {{channel}} | 当前项目: {{project}}{{?sessionName}} | 会话名称: {{sessionName}}{{/}}{{?selfIdentity}} | 当前名称: {{selfIdentity}}{{/}} | 对端身份: {{peerRole}}{{?peerIdentity}} | 对端名称: {{peerIdentity}}{{/}}{{?peerType}} | 对端类型: {{peerType}}{{/}}{{?chatType}} | 聊天类型: {{chatType}}{{/}}{{?agent}} | 当前Agent: {{agent}}{{/}}
|
|
6
|
+
{{?readonly}}[只读模式] 禁止修改项目文件。如需生成文件供用户下载,请写入 .evolclaw/tmp/ 目录后{{readonlySendHint}}{{/}}
|
|
7
|
+
{{?fileSendCurrent}}[SEND_FILE:路径] 发送文件到当前通道{{/}}
|
|
8
|
+
{{?fileSendCross}}[SEND_FILE:{{crossPrimary}}:路径] 发送文件到指定通道(可用: {{crossTypes}}){{/}}
|
|
9
|
+
{{?capability}}[通道能力] {{capabilities}}{{/}}
|
package/package.json
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evolclaw",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
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",
|
|
7
7
|
"bin": {
|
|
8
|
-
"evolclaw": "./dist/cli.js"
|
|
8
|
+
"evolclaw": "./dist/cli/index.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/",
|
|
12
12
|
"!dist/experimental/",
|
|
13
|
-
"
|
|
13
|
+
"kits/",
|
|
14
|
+
"!kits/.kits-version",
|
|
14
15
|
"evolclaw-install-aun.md"
|
|
15
16
|
],
|
|
16
17
|
"scripts": {
|
|
17
18
|
"dev": "tsx watch src/index.ts",
|
|
18
|
-
"build": "tsc && node -e \"const f='dist/cli.js',c=require('fs').readFileSync(f,'utf8');if(!c.startsWith('#!'))require('fs').writeFileSync(f,'#!/usr/bin/env node\\n'+c)\" && node -e \"try{require('child_process').execFileSync('chmod',['+x','dist/cli.js'])}catch{}\" && node -e \"require('fs').
|
|
19
|
+
"build": "tsc && node -e \"const f='dist/cli/index.js',c=require('fs').readFileSync(f,'utf8');if(!c.startsWith('#!'))require('fs').writeFileSync(f,'#!/usr/bin/env node\\n'+c)\" && node -e \"try{require('child_process').execFileSync('chmod',['+x','dist/cli/index.js'])}catch{}\" && node -e \"require('fs').mkdirSync('dist/data',{recursive:true});require('fs').copyFileSync('src/data/prompts.md','dist/data/prompts.md')\"",
|
|
19
20
|
"start": "node dist/index.js",
|
|
20
21
|
"test": "vitest run",
|
|
21
22
|
"test:watch": "vitest",
|
|
@@ -23,8 +24,9 @@
|
|
|
23
24
|
"prepublishOnly": "npm run build && npm test"
|
|
24
25
|
},
|
|
25
26
|
"dependencies": {
|
|
26
|
-
"@agentunion/fastaun": "^0.2.
|
|
27
|
+
"@agentunion/fastaun": "^0.2.20",
|
|
27
28
|
"@anthropic-ai/claude-agent-sdk": "^0.2.100",
|
|
29
|
+
"cron-parser": "^5.5.0",
|
|
28
30
|
"image-type": "^6.0.0",
|
|
29
31
|
"qrcode-terminal": "^0.12.0"
|
|
30
32
|
},
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"agents": {
|
|
3
|
-
"claude": {
|
|
4
|
-
"apiKey": "",
|
|
5
|
-
"baseUrl": "",
|
|
6
|
-
"model": "sonnet",
|
|
7
|
-
"effort": "high",
|
|
8
|
-
"useSettingSources": true,
|
|
9
|
-
"agentProgressSummaries": true
|
|
10
|
-
},
|
|
11
|
-
"codex": {
|
|
12
|
-
"apiKey": "",
|
|
13
|
-
"baseUrl": "",
|
|
14
|
-
"model": "gpt-5.2-codex",
|
|
15
|
-
"effort": "medium"
|
|
16
|
-
},
|
|
17
|
-
"gemini": {
|
|
18
|
-
"apiKey": "",
|
|
19
|
-
"model": "gemini-2.5-flash",
|
|
20
|
-
"cliPath": "",
|
|
21
|
-
"mode": "cli"
|
|
22
|
-
},
|
|
23
|
-
"defaultAgent": "claude"
|
|
24
|
-
},
|
|
25
|
-
"channels": {
|
|
26
|
-
"defaultChannel": "aun",
|
|
27
|
-
"feishu": {
|
|
28
|
-
"enabled": false,
|
|
29
|
-
"appId": "",
|
|
30
|
-
"appSecret": "",
|
|
31
|
-
"owner": ""
|
|
32
|
-
},
|
|
33
|
-
"wechat": {
|
|
34
|
-
"enabled": false,
|
|
35
|
-
"baseUrl": "https://ilinkai.weixin.qq.com",
|
|
36
|
-
"token": "",
|
|
37
|
-
"owner": ""
|
|
38
|
-
},
|
|
39
|
-
"aun": {
|
|
40
|
-
"enabled": false,
|
|
41
|
-
"aid": "",
|
|
42
|
-
"owner": "",
|
|
43
|
-
"flushDelay": 4,
|
|
44
|
-
"debounce": 2,
|
|
45
|
-
"showActivities": "owner-dm-only"
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
"projects": {
|
|
49
|
-
"defaultPath": "/path/to/default/project",
|
|
50
|
-
"autoCreate": true,
|
|
51
|
-
"list": {}
|
|
52
|
-
},
|
|
53
|
-
"flushDelay": 4,
|
|
54
|
-
"debounce": 2,
|
|
55
|
-
"showActivities": "all",
|
|
56
|
-
"idleMonitor": {
|
|
57
|
-
"enabled": true,
|
|
58
|
-
"timeout": 120
|
|
59
|
-
}
|
|
60
|
-
}
|