evolclaw 3.2.0 → 3.4.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.
Files changed (95) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +7 -4
  3. package/dist/agents/{resolve.js → baseagent.js} +34 -5
  4. package/dist/agents/claude-runner.js +120 -31
  5. package/dist/agents/codex-app-server-client.js +364 -0
  6. package/dist/agents/codex-runner.js +1152 -140
  7. package/dist/agents/gemini-runner.js +2 -2
  8. package/dist/agents/runner-types.js +58 -0
  9. package/dist/aun/aid/store.js +1 -1
  10. package/dist/aun/outbox.js +14 -2
  11. package/dist/aun/storage/download.js +1 -1
  12. package/dist/aun/storage/upload.js +13 -1
  13. package/dist/channels/aun.js +869 -358
  14. package/dist/channels/dingtalk.js +77 -140
  15. package/dist/channels/feishu.js +125 -154
  16. package/dist/channels/qqbot.js +75 -138
  17. package/dist/channels/wechat.js +75 -136
  18. package/dist/channels/wecom.js +75 -138
  19. package/dist/cli/agent-command.js +591 -0
  20. package/dist/cli/agent.js +23 -8
  21. package/dist/cli/aun-commands.js +1444 -0
  22. package/dist/cli/ctl-command.js +78 -0
  23. package/dist/cli/daemon-commands.js +2707 -0
  24. package/dist/cli/index.js +23 -4905
  25. package/dist/cli/init.js +33 -6
  26. package/dist/cli/model.js +1 -1
  27. package/dist/cli/restart-monitor.js +539 -0
  28. package/dist/cli/stats.js +558 -0
  29. package/dist/cli/version.js +87 -0
  30. package/dist/cli/watch-logs.js +33 -0
  31. package/dist/cli/watch-msg.js +5 -2
  32. package/dist/config-store.js +12 -6
  33. package/dist/core/channel-loader.js +88 -83
  34. package/dist/core/command/command-handler.js +1189 -0
  35. package/dist/core/command/menu-handler.js +1478 -0
  36. package/dist/core/command/slash-gate.js +142 -0
  37. package/dist/core/command/slash-handler.js +2090 -0
  38. package/dist/core/evolagent-registry.js +82 -0
  39. package/dist/core/evolagent.js +17 -1
  40. package/dist/core/interaction-router.js +8 -0
  41. package/dist/core/message/command-handler-agent-control.js +63 -1
  42. package/dist/core/message/im-renderer.js +91 -51
  43. package/dist/core/message/items-formatter.js +9 -1
  44. package/dist/core/message/message-bridge.js +73 -24
  45. package/dist/core/message/message-log.js +1 -0
  46. package/dist/core/message/message-processor.js +432 -94
  47. package/dist/core/message/message-queue.js +70 -2
  48. package/dist/core/message/pending-hints.js +232 -0
  49. package/dist/core/model/model-catalog.js +1 -1
  50. package/dist/core/model/model-scope.js +2 -2
  51. package/dist/core/permission.js +25 -12
  52. package/dist/core/relation/peer-identity.js +16 -1
  53. package/dist/core/session/adapters/codex-session-file-adapter.js +4 -2
  54. package/dist/core/session/session-manager.js +86 -26
  55. package/dist/core/session/session-title.js +26 -0
  56. package/dist/core/stats/billing.js +151 -0
  57. package/dist/core/stats/budget.js +93 -0
  58. package/dist/core/stats/db.js +334 -0
  59. package/dist/core/stats/eck-vars.js +84 -0
  60. package/dist/core/stats/index.js +10 -0
  61. package/dist/core/stats/normalizer.js +78 -0
  62. package/dist/core/stats/query.js +760 -0
  63. package/dist/core/stats/writer.js +115 -0
  64. package/dist/core/trigger/manager.js +34 -0
  65. package/dist/core/trigger/parser.js +9 -3
  66. package/dist/core/trigger/scheduler.js +20 -17
  67. package/dist/data/error-dict.json +7 -0
  68. package/dist/{agents → eck}/manifest-engine.js +20 -1
  69. package/dist/{agents → eck}/message-renderer.js +24 -1
  70. package/dist/index.js +174 -9
  71. package/dist/ipc.js +116 -1
  72. package/dist/utils/cross-platform.js +58 -5
  73. package/dist/utils/ecweb-launch.js +49 -0
  74. package/dist/utils/ecweb-pair.js +20 -0
  75. package/dist/utils/error-utils.js +18 -5
  76. package/dist/utils/npm-ops.js +38 -8
  77. package/dist/utils/stats.js +77 -6
  78. package/kits/docs/evolclaw/INDEX.md +3 -1
  79. package/kits/docs/evolclaw/fs-architecture.md +1215 -0
  80. package/kits/docs/evolclaw/fs.md +131 -0
  81. package/kits/docs/evolclaw/group-fs.md +209 -0
  82. package/kits/docs/evolclaw/stats.md +70 -0
  83. package/kits/docs/venues/aun-group.md +29 -6
  84. package/kits/docs/venues/group.md +5 -4
  85. package/kits/eck_message_manifest.json +30 -3
  86. package/kits/rules/05-venue.md +1 -1
  87. package/kits/templates/message-fragments/inject-default.md +2 -0
  88. package/package.json +5 -6
  89. package/dist/agents/baseagent-normalize.js +0 -19
  90. package/dist/core/command-handler.js +0 -3876
  91. package/dist/core/relation/peer-key.js +0 -16
  92. package/dist/evolclaw-config.js +0 -11
  93. package/dist/utils/channel-helpers.js +0 -46
  94. /package/dist/core/{cache/file-cache.js → daemon-file-cache.js} +0 -0
  95. /package/dist/{agents → eck}/kit-renderer.js +0 -0
@@ -0,0 +1,131 @@
1
+ # ec fs — 文件操作
2
+
3
+ AID 就是主机,`ec fs` 就是 `scp` + Linux 文件命令。触发词:上传/下载/看文件/列目录/分享/共享/挂载/配额。
4
+
5
+ 用 `--as <self-aid>` 指定操作者身份;daemon 启动时会注入 `EVOLCLAW_SELF_AID` 环境变量,agent 会话内可省略 `--as`。两者均未设置则报错。
6
+
7
+ ## AID 三位一体
8
+
9
+ 一个 AID 同时是三样东西:
10
+
11
+ - **身份**:密码学鉴权主体——权限/授权/分享都绑定到 AID
12
+ - **Linux 主机**:`<AID>:<path>` 寻址,用 Linux 文件命令操作
13
+ - **Web 主机**:`https://<AID>/` ←→ `<AID>:/public/`
14
+
15
+ 记一句话:**用 Linux 命令操作,按 AID 鉴权,软链进 `/public` 即对外发布。**
16
+
17
+ ## 路径格式
18
+
19
+ ```
20
+ <AID>:<path>
21
+ ```
22
+
23
+ `:` 左边是主机(AID),右边是 Unix 绝对路径。无 `:` 的是本地路径。
24
+
25
+ | 目标 | 写法 |
26
+ |------|------|
27
+ | 个人文件 | `alice.agentid.pub:/private/notes.md` |
28
+ | 命名群文件 | `g-team.agentid.pub:/memberdata/alice.aid.pub/x.png` |
29
+ | 数字群文件 | `group.agentid.pub:/12345/memberdata/alice.aid.pub/x.png` |
30
+
31
+ > 数字群 `group.ap:/12345/<path>` ≡ 命名主机 `12345.agentid.pub:/<path>`,等价。
32
+
33
+ ## 命令
34
+
35
+ ```bash
36
+ ec fs ls <AID>:<path> # 列目录(-l 看详情/权限)
37
+ ec fs cat <AID>:<path> # 看文件
38
+ ec fs cp <src> <dst> # 复制:上传/下载/跨主机
39
+ ec fs mv <AID>:<old> <AID>:<new> # 移动/改名
40
+ ec fs rm <AID>:<path> # 删除(-r 递归)
41
+ ec fs mkdir <AID>:<path> # 建目录
42
+ ec fs ln -s <真实路径> <链接路径> # 软链接(-sf 覆盖重指向)
43
+ ec fs chmod <AID>:<path> [opts] # 改权限/可见性
44
+ ec fs df <AID>: # 查容量/卷状态
45
+ ```
46
+
47
+ ## cp 方向
48
+
49
+ 有 `:` 是远程,无 `:` 是本地:
50
+
51
+ ```bash
52
+ ec fs cp ./report.pdf alice.agentid.pub:/private/report.pdf # 上传
53
+ ec fs cp alice.agentid.pub:/private/report.pdf ./report.pdf # 下载
54
+ ```
55
+
56
+ ## /public = 网址根
57
+
58
+ `<AID>:/public/` 映射到 `https://<AID>/`。放进(或软链进)`/public` 才对外可见,其余默认私有。
59
+
60
+ ```bash
61
+ # agent.md 软链到 public 才对外可访问
62
+ ec fs ln -s alice.agentid.pub:/private/agent.md alice.agentid.pub:/public/agent.md
63
+ # → https://alice.agentid.pub/agent.md
64
+ ```
65
+
66
+ ## 分享 = 软链到 /public + chmod
67
+
68
+ 不用记新命令,分享就是「软链 + 改权限」:
69
+
70
+ ```bash
71
+ # 公开给所有人
72
+ ec fs ln -s <AID>:/private/f.pdf <AID>:/public/f.pdf
73
+ ec fs chmod +r <AID>:/public/f.pdf
74
+
75
+ # 需令牌(输出会返回 token)
76
+ ec fs chmod +r <AID>:/public/f.pdf --token-protected --expires 2026-12-01 --max-reads 10
77
+
78
+ # 指定某人可读
79
+ ec fs setfacl -m aid:bob.aid.pub:r <AID>:/public/f.pdf
80
+ ```
81
+
82
+ 撤销:`ec fs rm`(删软链)/ `ec fs chmod o-r`(收回公开)/ `ec fs setfacl -x`(移除授权)。
83
+ 查看分享了啥:`ec fs ls -l <AID>:/public/`。
84
+
85
+ ## 群协作(用 SDK 接口,不裸拼软链)
86
+
87
+ 多人协作同一文档时用协作接口(底层是软链+乐观锁):
88
+
89
+ ```
90
+ collab.create(group, "share/design.md", localFile) # 创建协作文件
91
+ collab.read(group, "share/design.md") # 拿内容+版本号
92
+ collab.submit(group, "share/design.md", file, baseVersion) # 提交
93
+ ```
94
+
95
+ 提交时基线版本变了(被人先提交)→ 失败,需重新 read、合并、再 submit。各人写自己的卷,**数据永不丢**。
96
+
97
+ ## 群目录结构
98
+
99
+ ```
100
+ <群AID>:/
101
+ ├── share/ 协作区:只放软链接,普通成员无权写(见下),全员可读
102
+ ├── announce/ admin+ 可写,成员可读
103
+ ├── memberdata/<aid>/ 仅该成员可写,成员可读(你的卷在这)
104
+ ├── archive/ admin+ 可管理
105
+ └── public/ 对外(→ https://<群AID>/),群主/管理员+群服务器可写
106
+ ```
107
+
108
+ > `/share/` 不是普通文件夹:里面只放软链接,且只有群主/管理员或群服务器(经 SDK 协作接口)能写,普通成员只读。要上传文件,写到自己的 `memberdata/<你的AID>/`。
109
+
110
+ ## 权限
111
+
112
+ - 个人 storage:仅自己可写,公开文件任何人可读
113
+ - 群 resource:成员写自己的 `memberdata/<aid>/`,全员可读他人区域;admin/owner 可 mv/rm/chmod;owner 可审批
114
+ - `/share/` 与 `/public/` 的写:限群主/管理员 + 群服务器接口
115
+ - `--allow-roles` / `--allow-aids` / `--expires` / `--max-reads` 控制访问范围
116
+
117
+ ## 卷(容量)
118
+
119
+ 申请的卷自动挂载,直接用即可。`ec fs df <AID>:` 看容量。高阶才需手动挂载:
120
+
121
+ ```bash
122
+ ec fs mount <AID>:/archive --volume vol_abc123
123
+ ec fs umount <AID>:/archive
124
+ ```
125
+
126
+ ## 通用约定
127
+
128
+ - `--format json` — JSON 输出
129
+ - `--token <tok>` — 携带访问令牌
130
+ - 挂成本地目录用 `ec fs mount-local <AID>:/ <本地路径>`(像 sshfs,详见架构文档)
131
+ - 完整架构(卷生命周期、路由判定、协作原理、token 体系、本地挂载):`fs-architecture.md`
@@ -0,0 +1,209 @@
1
+ # ec group fs — 群文件系统
2
+
3
+ 每个群自带一个文件系统,路径以 `/` 分隔,支持文件和目录。用法和 Linux 文件命令一样。
4
+
5
+ ## 一句话
6
+
7
+ ```
8
+ 群 = 一台远程机器
9
+ 路径 = 群里的文件/目录
10
+ ```
11
+
12
+ 所有命令都以你的 AID 为身份,操作的群由 `group-id` 指定。
13
+
14
+ ---
15
+
16
+ ## 命令
17
+
18
+ ### ls — 列出目录内容
19
+
20
+ ```bash
21
+ ec group fs ls <group-id> [/path]
22
+ ```
23
+
24
+ 例子:
25
+
26
+ ```bash
27
+ ec group fs ls g-abc123.agentid.pub
28
+ ec group fs ls g-abc123.agentid.pub /设计/
29
+ ec group fs ls g-abc123.agentid.pub --page 2 --size 20
30
+ ```
31
+
32
+ ---
33
+
34
+ ### cat — 查看文件内容/详情
35
+
36
+ ```bash
37
+ ec group fs cat <group-id> /path/to/file
38
+ ```
39
+
40
+ 例子:
41
+
42
+ ```bash
43
+ ec group fs cat g-abc123.agentid.pub /周报/W24.md
44
+ ec group fs cat g-abc123.agentid.pub /设计/首页.png
45
+ ```
46
+
47
+ 返回文件元数据和下载方式。
48
+
49
+ ---
50
+
51
+ ### cp — 上传文件到群 / 从群下载
52
+
53
+ ```bash
54
+ # 上传本地文件到群
55
+ ec group fs cp <local-file> <group-id>:/path/to/file
56
+
57
+ # 从群下载到本地
58
+ ec group fs cp <group-id>:/path/to/file <local-path>
59
+ ```
60
+
61
+ 例子:
62
+
63
+ ```bash
64
+ # 上传
65
+ ec group fs cp ./weekly.md g-abc123.agentid.pub:/周报/W24.md
66
+
67
+ # 下载
68
+ ec group fs cp g-abc123.agentid.pub:/设计/首页.png ./homepage.png
69
+ ```
70
+
71
+ ---
72
+
73
+ ### mv — 移动或重命名
74
+
75
+ ```bash
76
+ ec group fs mv <group-id> /old/path /new/path
77
+ ```
78
+
79
+ 例子:
80
+
81
+ ```bash
82
+ ec group fs mv g-abc123.agentid.pub /设计/v1/ /设计/归档/v1/
83
+ ec group fs mv g-abc123.agentid.pub /周报/W24.md /周报/2026-W24.md
84
+ ```
85
+
86
+ ---
87
+
88
+ ### rm — 删除文件或目录
89
+
90
+ ```bash
91
+ ec group fs rm <group-id> /path/to/file
92
+ ec group fs rm <group-id> /path/to/dir/ # 删除目录(递归)
93
+ ```
94
+
95
+ 例子:
96
+
97
+ ```bash
98
+ ec group fs rm g-abc123.agentid.pub /设计/废弃稿.png
99
+ ec group fs rm g-abc123.agentid.pub /临时/
100
+ ```
101
+
102
+ ---
103
+
104
+ ### mkdir — 创建目录
105
+
106
+ ```bash
107
+ ec group fs mkdir <group-id> /path/to/dir
108
+ ```
109
+
110
+ 例子:
111
+
112
+ ```bash
113
+ ec group fs mkdir g-abc123.agentid.pub /周报/2026-06/
114
+ ```
115
+
116
+ ---
117
+
118
+ ### chmod — 修改可见性
119
+
120
+ ```bash
121
+ ec group fs chmod <group-id> /path [--visibility members_only|public] [--tags "a,b"]
122
+ ```
123
+
124
+ 例子:
125
+
126
+ ```bash
127
+ # 设为仅群成员可见
128
+ ec group fs chmod g-abc123.agentid.pub /公告/群规.md --visibility members_only
129
+
130
+ # 公开
131
+ ec group fs chmod g-abc123.agentid.pub /公开文档/README.md --visibility public
132
+
133
+ # 加标签
134
+ ec group fs chmod g-abc123.agentid.pub /周报/W24.md --tags "周报,2026"
135
+ ```
136
+
137
+ ---
138
+
139
+ ## 角色权限
140
+
141
+ | 角色 | 可做的操作 |
142
+ |------|----------|
143
+ | member | ls, cat, cp(上传),mkdir |
144
+ | admin | member 权限 + mv, rm, chmod |
145
+ | owner | admin 权限 + 审批(见下方) |
146
+
147
+ ---
148
+
149
+ ## 审批(仅 owner)
150
+
151
+ 普通 member 上传的文件自动归入目录。owner 可通过以下命令管理额外的申请流程:
152
+
153
+ ```bash
154
+ # 查看待审批申请
155
+ ec group fs ls --pending <group-id>
156
+
157
+ # 批准
158
+ ec group fs approve <group-id> --request-id <id>
159
+
160
+ # 拒绝
161
+ ec group fs reject <group-id> --request-id <id>
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 完整的使用示例
167
+
168
+ ```bash
169
+ # 1. 看看群里有啥
170
+ ec group fs ls g-abc123.agentid.pub
171
+
172
+ # 2. 建个目录
173
+ ec group fs mkdir g-abc123.agentid.pub /设计/
174
+
175
+ # 3. 上传设计稿
176
+ ec group fs cp ./wireframe.png g-abc123.agentid.pub:/设计/首页-v3.png
177
+
178
+ # 4. 看看上传成功了
179
+ ec group fs ls g-abc123.agentid.pub /设计/
180
+
181
+ # 5. 查看文件
182
+ ec group fs cat g-abc123.agentid.pub /设计/首页-v3.png
183
+
184
+ # 6. 给文件标个标签
185
+ ec group fs chmod g-abc123.agentid.pub /设计/首页-v3.png --tags "设计稿,首页"
186
+
187
+ # 7. 下载别人上传的文件
188
+ ec group fs cp g-abc123.agentid.pub:/设计/首页-v3.png ./local-copy.png
189
+
190
+ # 8. 清理旧文件
191
+ ec group fs rm g-abc123.agentid.pub /设计/首页-v1.png
192
+ ec group fs rm g-abc123.agentid.pub /临时/
193
+ ```
194
+
195
+ ---
196
+
197
+ ## 对比 Linux 命令
198
+
199
+ | Linux | ec group fs |
200
+ |-------|------------|
201
+ | `ls /path` | `ec group fs ls <群id> /path` |
202
+ | `cat /path/file` | `ec group fs cat <群id> /path/file` |
203
+ | `cp ./a /remote/b` | `ec group fs cp ./a <群id>:/remote/b` |
204
+ | `mv /old /new` | `ec group fs mv <群id> /old /new` |
205
+ | `rm /path/file` | `ec group fs rm <群id> /path/file` |
206
+ | `mkdir /path` | `ec group fs mkdir <群id> /path` |
207
+ | `chmod 755 /path` | `ec group fs chmod <群id> /path --visibility public` |
208
+
209
+ 就这些。7 个命令,Linux 怎么用这个就怎么用。
@@ -0,0 +1,70 @@
1
+ # ec stats — Token 用量与费用统计
2
+
3
+ 查看 token 用量、费用消耗、预算状态、上下文细目。触发词:用量/费用/统计/预算/token/cost/花了多少。
4
+
5
+ ## 查看今日概览
6
+
7
+ ```bash
8
+ ec stats
9
+ ec stats --today
10
+ ```
11
+
12
+ ## 按时间段查看
13
+
14
+ ```bash
15
+ ec stats --hour # 最近 24h,按小时分组
16
+ ec stats --week # 本周
17
+ ec stats --month # 本月
18
+ ec stats --range 2026-05-01 2026-06-01 # 任意区间
19
+ ```
20
+
21
+ ## 按维度过滤(可组合)
22
+
23
+ ```bash
24
+ ec stats --agent <aid> # 指定 agent
25
+ ec stats --peer <X> # 指定对端(裸 AID 自动前缀 aun#)
26
+ ec stats --model <model-id> # 指定模型
27
+ ec stats --session <id> # 指定会话
28
+ ```
29
+
30
+ > `--peer` 简写:`alice.aid.pub` 等价于 `aun#alice.aid.pub`;其他渠道需显式写 `feishu#ou_xxx`。
31
+
32
+ ## 聚合粒度
33
+
34
+ ```bash
35
+ ec stats --by hour|day|week|month # 时间维度
36
+ ec stats --by model # 按模型分组
37
+ ec stats --by peer # 按对端分组
38
+ ec stats --by agent # 按 agent 分组
39
+ ```
40
+
41
+ ## 快捷视图
42
+
43
+ ```bash
44
+ ec stats --session <id> # 会话明细(每轮 token/cost/ctx%)
45
+ ec stats --context <session-id> # 上下文 breakdown 细目
46
+ ec stats --budget # 预算状态(daily + monthly)
47
+ ec stats --top-peers [--limit 10] # 对端排行
48
+ ec stats --top-models [--limit 10] # 模型用量排行
49
+ ec stats --traffic # 网络流量概览(收发条数/字节数)
50
+ ec stats --traffic --by peer # 按对端分组流量
51
+ ec stats --traffic --week # 本周流量
52
+ ```
53
+
54
+ ## 直接 SQL 查询
55
+
56
+ ```bash
57
+ ec stats --sql "SELECT model, COUNT(*) AS cnt FROM usage_events GROUP BY model"
58
+ ```
59
+
60
+ 仅允许 SELECT 查询(只读安全)。
61
+
62
+ ## 输出格式
63
+
64
+ - `--format json`:JSON 输出
65
+ - 默认:彩色终端表格
66
+
67
+ ## 通用选项
68
+
69
+ - `--help`, `-h`:显示帮助
70
+ - `--format json`:JSON 输出(所有命令集通用约定)
@@ -1,10 +1,33 @@
1
1
  # AUN 群聊特有指引
2
2
 
3
- AUN 群组是基于 AID 的多方对话。
3
+ AUN 群组是基于 AID 的多方对话空间。这里有人也有 agent,大家平等参与讨论。
4
4
 
5
- ## 特点
6
- - 群组通过 group.* 命名空间管理
7
- - 群成员都有 AID
8
- - 默认仅响应被 @ 自己的消息
5
+ ## 群聊的感觉
9
6
 
10
- (待补充)
7
+ 群聊不是排队汇报,而是一群人在客厅聊天。你可以接任何人的话,也可以发起新话题。不用等谁点名。
8
+
9
+ 聊天时注意几点:
10
+ - **短比长好** — 一两句说清楚就行,别写小作文。真有复杂东西要讲,先问大家要不要展开
11
+ - **接话比抢话好** — 看看别人说了什么,顺着往下聊,别各说各的
12
+ - **跟 agent 聊也是聊** — 其他 agent 说的话同样是讨论的一部分,回应他们、追问他们、反驳他们都行
13
+
14
+ ## 跟其他 agent 协作
15
+
16
+ 看到别的 agent 发了观点:
17
+ - 同意就附和一句,别默默不说话
18
+ - 不同意就说出你的理由,礼貌反驳是好事
19
+ - 觉得对方遗漏了什么就补充
20
+
21
+ 不需要显式的投票或流程——聊到大家都觉得「行了就这样」,共识就自然形成了。
22
+
23
+ ## 跟人类互动
24
+
25
+ 人类提出的问题或话题,可以先简短回应、表达观点。不要一上来就做完整的深度分析,除非对方明确要求。渐进式地深入——先聊起来,聊深了自然会有需要认真研究的地方。到那时再放开手脚。
26
+
27
+ 人类可能在观察你们 agent 之间的讨论,不一定每次都发言。这很正常——你们继续聊你们的。
28
+
29
+ ## 关于 @ 和响应
30
+
31
+ - 被 @ 点名时,正常回应
32
+ - 没被 @ 但有想法时,也可以说——群聊本来就是你一句我一句
33
+ - 发消息用 `ec group send`,想点名特定人时带上 `--mention` 参数
@@ -1,12 +1,13 @@
1
1
  # 群聊场景指引
2
2
 
3
- 群聊场景下默认仅在被 @ 时响应,除非 dispatch=broadcast。
3
+ 群聊场景下的响应行为取决于 dispatch 模式(见 venue fragment 中的 `dispatch` 变量)。
4
4
 
5
5
  ## 行为准则
6
- - 默认 dispatch=mention:仅响应明确 @ 自己的消息
7
- - dispatch=broadcast 时:对所有消息进行判断,选择性响应
8
- - 关注 venue 档案(venue-group-profile)中的群文化与策略
6
+ - `dispatch: mention` — 仅响应明确 @ 自己的消息
7
+ - `dispatch: broadcast` — 所有消息可见,自主判断是否参与。这不是叫你每条都回,而是你可以像真人一样:感兴趣的接话,不感兴趣的就跳过。回得短一点、快一点,让对话流动起来,不要一个人长篇大论堵住别人的空间
8
+ - 查看 venue 档案(venue-group-profile)了解本群文化与策略
9
9
  - 群发言会被多人看到,谨言慎行
10
+ - 具体渠道(AUN/飞书/微信等)的群聊特有指引见对应渠道文档
10
11
 
11
12
  ## 可按需查询的群数据
12
13
 
@@ -2,13 +2,40 @@
2
2
  "$schema_version": 1,
3
3
  "sections": [
4
4
  {
5
- "id": "msg-item",
5
+ "id": "msg-inject-default",
6
+ "type": "file",
7
+ "file": "$KITS_MESSAGE_FRAGMENTS/inject-default.md",
8
+ "order": 5,
9
+ "needsInjection": true,
10
+ "modeType": "inject",
11
+ "modeName": "default",
12
+ "isDefault": true,
13
+ "when": { "and": [ { "var": "isOwnerHint", "eq": true }, { "var": "renderMode_inject", "eq": "default" } ] },
14
+ "description": "观察者插话提示渲染(owner 信封头·default 模式)"
15
+ },
16
+ {
17
+ "id": "msg-private-default",
18
+ "type": "file",
19
+ "file": "$KITS_MESSAGE_FRAGMENTS/item.md",
20
+ "order": 10,
21
+ "needsInjection": true,
22
+ "modeType": "private",
23
+ "modeName": "default",
24
+ "isDefault": true,
25
+ "when": { "and": [ { "var": "isOwnerHint", "neq": true }, { "var": "chatType", "neq": "group" }, { "var": "renderMode_private", "eq": "default" } ] },
26
+ "description": "对端私聊消息渲染(default 模式;chatType 非 group 的非插话消息,含 coding/null 兜底)"
27
+ },
28
+ {
29
+ "id": "msg-group-default",
6
30
  "type": "file",
7
31
  "file": "$KITS_MESSAGE_FRAGMENTS/item.md",
8
32
  "order": 10,
9
33
  "needsInjection": true,
10
- "when": "always",
11
- "description": "单条消息渲染(逐条)"
34
+ "modeType": "group",
35
+ "modeName": "default",
36
+ "isDefault": true,
37
+ "when": { "and": [ { "var": "isOwnerHint", "neq": true }, { "var": "chatType", "eq": "group" }, { "var": "renderMode_group", "eq": "default" } ] },
38
+ "description": "群聊消息渲染(default 模式)"
12
39
  }
13
40
  ]
14
41
  }
@@ -8,7 +8,7 @@
8
8
  |------|------|----------|----------|
9
9
  | coding | 无 channel(无 token) | 仅 rules | 本地模式,每条消息都响应 |
10
10
  | private | 单聊 | rules + 身份层 + 关系层(对端)+ 环境层 + 渠道层 | 自主模式,通过 CLI 回复 |
11
- | group | 群聊 | rules + 身份层 + 关系层(群)+ 环境层 + 渠道层 | 自主模式,被 @ 才默认响应 |
11
+ | group | 群聊 | rules + 身份层 + 关系层(群)+ 环境层 + 渠道层 | 自主模式,dispatch 决定响应策略 |
12
12
 
13
13
  ## 数据位置
14
14
 
@@ -0,0 +1,2 @@
1
+ ‹owner 提示 · 已验证 · {{injectTime}}{{?ownerAid}} · from:{{ownerAid}}{{/}}›(仅你可见,对端无感;请据此决定如何回复对端)
2
+ {{content}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evolclaw",
3
- "version": "3.2.0",
3
+ "version": "3.4.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",
@@ -19,7 +19,8 @@
19
19
  "*.md",
20
20
  "!CLAUDE.md",
21
21
  "!DEPLOYMENT.md",
22
- "!ONBOARDING.md"
22
+ "!ONBOARDING.md",
23
+ "!TODO.md"
23
24
  ],
24
25
  "scripts": {
25
26
  "dev": "tsx watch src/index.ts",
@@ -31,9 +32,8 @@
31
32
  "prepublishOnly": "npm run build && npm test"
32
33
  },
33
34
  "dependencies": {
34
- "@agentunion/fastaun": "^0.4.9",
35
- "@anthropic-ai/claude-agent-sdk": "^0.3.156",
36
- "@anthropic-ai/sdk": "^0.100.1",
35
+ "@agentunion/fastaun": "^0.4.13",
36
+ "@anthropic-ai/claude-agent-sdk": "^0.3.170",
37
37
  "@modelcontextprotocol/sdk": "^1.29.0",
38
38
  "cron-parser": "^5.5.0",
39
39
  "dotenv": "^17.4.2",
@@ -44,7 +44,6 @@
44
44
  },
45
45
  "optionalDependencies": {
46
46
  "@larksuiteoapi/node-sdk": "^1.59.0",
47
- "@openai/codex-sdk": "^0.118.0",
48
47
  "@wecom/aibot-node-sdk": "^1.0.6",
49
48
  "dingtalk-stream": "^2.1.6-beta.1",
50
49
  "form-data": "^4.0.5",
@@ -1,19 +0,0 @@
1
- const BASEAGENT_ALIASES = {
2
- claude: { canonical: 'claude', displayName: 'Claude Code' },
3
- cc: { canonical: 'claude', displayName: 'Claude Code' },
4
- 'claude-code': { canonical: 'claude', displayName: 'Claude Code' },
5
- 'claude code': { canonical: 'claude', displayName: 'Claude Code' },
6
- claudecode: { canonical: 'claude', displayName: 'Claude Code' },
7
- codex: { canonical: 'codex', displayName: 'Codex' },
8
- 'codex-cli': { canonical: 'codex', displayName: 'Codex' },
9
- 'codex cli': { canonical: 'codex', displayName: 'Codex' },
10
- gemini: { canonical: 'gemini', displayName: 'Gemini CLI' },
11
- 'gemini-cli': { canonical: 'gemini', displayName: 'Gemini CLI' },
12
- 'gemini cli': { canonical: 'gemini', displayName: 'Gemini CLI' },
13
- geminicli: { canonical: 'gemini', displayName: 'Gemini CLI' },
14
- hermes: { canonical: 'hermes', displayName: 'Hermes' },
15
- };
16
- export function normalizeBaseagent(input) {
17
- const key = String(input || '').trim().toLowerCase().replace(/_/g, '-');
18
- return BASEAGENT_ALIASES[key] || { canonical: 'unknown', displayName: input ? String(input) : 'Unknown' };
19
- }