evolcore 0.0.32 → 0.0.33
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/CHANGELOG.md +24 -0
- package/bin/install-codex-managed-hooks.mjs +124 -37
- package/dist/agents/claude-runner.js +29 -2
- package/dist/agents/codex/app-server-client.js +3 -0
- package/dist/agents/codex/diagnostics.js +76 -44
- package/dist/agents/codex-runner.js +23 -19
- package/dist/agents/ecagent-runner.js +5 -13
- package/dist/aun/group/operations.js +0 -1
- package/dist/aun/msg/history.js +1 -0
- package/dist/aun/msg/p2p.js +0 -1
- package/dist/aun/outbox.js +50 -1
- package/dist/channels/aun.js +28 -2
- package/dist/channels/daemon.js +257 -2
- package/dist/cli/agent-command.js +58 -24
- package/dist/cli/agent.js +1 -1
- package/dist/cli/aun-commands.js +365 -29
- package/dist/cli/contact.js +8 -2
- package/dist/cli/daemon-commands.js +81 -12
- package/dist/cli/debug-mode.js +154 -0
- package/dist/cli/handoff-command.js +3 -0
- package/dist/cli/index.js +81 -64
- package/dist/cli/init.js +2 -2
- package/dist/cli/managed-command-guard.js +5 -0
- package/dist/cli/memory-command.js +8 -1
- package/dist/cli/queue-command.js +9 -4
- package/dist/cli/session-command.js +194 -0
- package/dist/cli/skill-command.js +78 -2
- package/dist/cli/task-context.js +1 -0
- package/dist/cli/thread-command.js +620 -0
- package/dist/cli/trigger-command.js +4 -2
- package/dist/config/builtin-roles.js +1 -0
- package/dist/config/config-field-policy.js +2 -3
- package/dist/config/config-manager.js +7 -2
- package/dist/config/resolved-config-op.js +3 -0
- package/dist/config-store.js +15 -0
- package/dist/core/auth/agent-delegation.js +25 -1
- package/dist/core/auth/debug-context.js +139 -0
- package/dist/core/auth/operation-authorizer.js +24 -1
- package/dist/core/auth/operation-catalog.js +33 -0
- package/dist/core/background-session/session-cleanup.js +212 -0
- package/dist/core/background-session/types.js +10 -0
- package/dist/core/bootstrap-messages.js +1 -1
- package/dist/core/bootstrap-service.js +6 -3
- package/dist/core/command/command-handler.js +60 -24
- package/dist/core/command/memory-slash.js +6 -2
- package/dist/core/command/menu-catalog.js +48 -1
- package/dist/core/command/menu-handler.js +92 -16
- package/dist/core/command/menu-protocol.js +24 -1
- package/dist/core/command/skill-slash.js +322 -0
- package/dist/core/command/slash-gate.js +6 -4
- package/dist/core/command/slash-handler.js +193 -13
- package/dist/core/command/topic-slash.js +528 -0
- package/dist/core/evolagent-registry.js +20 -5
- package/dist/core/handoff/runtime.js +5 -11
- package/dist/core/handoff/store.js +5 -0
- package/dist/core/ipc-registration.js +139 -2
- package/dist/core/memory/consolidation-context.js +49 -16
- package/dist/core/memory/consolidation-ops-records.js +35 -0
- package/dist/core/memory/consolidation-queue-format.js +21 -0
- package/dist/core/memory/consolidation.js +174 -180
- package/dist/core/message/aun-ipc-sender.js +161 -6
- package/dist/core/message/im-renderer.js +149 -6
- package/dist/core/message/message-bridge.js +13 -3
- package/dist/core/message/message-log.js +1 -0
- package/dist/core/message/peer-mode.js +6 -1
- package/dist/core/message/response-engine.js +349 -67
- package/dist/core/message/subtask-tool-projection.js +140 -0
- package/dist/core/model/catalog-service.js +17 -12
- package/dist/core/permission/ec-command-parser.js +126 -7
- package/dist/core/session/session-idle-monitor.js +249 -22
- package/dist/core/session/session-manager.js +54 -9
- package/dist/core/skill/command-parser.js +13 -0
- package/dist/core/skill/index-generator.js +4 -1
- package/dist/core/skill/startup.js +41 -0
- package/dist/core/skill/switch-resolver.js +55 -29
- package/dist/core/thread/command-parser.js +125 -0
- package/dist/core/thread/index.js +1 -0
- package/dist/core/thread/ipc-operation.js +95 -0
- package/dist/core/thread/thread-context-storage.js +131 -0
- package/dist/core/thread/thread-operation.js +258 -0
- package/dist/core/thread/thread-route.js +33 -0
- package/dist/core/thread/thread-service.js +777 -0
- package/dist/core/thread/types.js +1 -0
- package/dist/eck/message-renderer.js +35 -0
- package/dist/index.js +8 -5
- package/dist/ipc.js +89 -10
- package/dist/paths.js +23 -0
- package/dist/response-system/engines/v1/proactive-flow.js +169 -80
- package/dist/trigger/authorization.js +57 -28
- package/dist/trigger/feedback.js +7 -1
- package/dist/trigger/parser.js +63 -1
- package/dist/trigger/validation.js +14 -0
- package/dist/utils/error-utils.js +22 -1
- package/kits/docs/context-assembly.md +1 -0
- package/kits/docs/evolcore/INDEX.md +1 -0
- package/kits/docs/evolcore/agent-create.md +39 -28
- package/kits/docs/evolcore/agent.md +19 -4
- package/kits/docs/evolcore/ec-capabilities.md +4 -0
- package/kits/docs/evolcore/group-collaboration.md +3 -5
- package/kits/docs/evolcore/group.md +3 -4
- package/kits/docs/evolcore/memory-consolidation.md +1 -1
- package/kits/docs/evolcore/menu-exec-schema-commands.md +2 -2
- package/kits/docs/evolcore/menu-protocol.md +7 -0
- package/kits/docs/evolcore/msg.md +5 -8
- package/kits/docs/evolcore/thread-chain.md +267 -0
- package/kits/docs/prompt-loading-architecture.md +1 -0
- package/kits/eck_manifest.json +61 -26
- package/kits/eck_message_manifest.json +169 -10
- package/kits/rules/05-venue.md +1 -1
- package/kits/rules/07-memory-and-thread.md +202 -0
- package/kits/schemas/relation-config.schema.9.json +18 -3
- package/kits/schemas/role-config.schema.1.json +6 -6
- package/kits/schemas/single-session.schema.1.json +6 -6
- package/kits/schemas/single-session.schema.2.json +6 -6
- package/kits/schemas/single-session.schema.3.json +6 -6
- package/kits/skills/.switches.json +12 -1
- package/kits/skills/ec-group/SKILL.md +234 -0
- package/kits/skills/ec-skill/SKILL.md +10 -1
- package/kits/skills/ec-skill/scripts/cli.mjs +15 -1
- package/kits/skills/scrapling-article-fetch/SKILL.md +128 -0
- package/kits/skills/scrapling-article-fetch/scripts/check_python_env.py +54 -0
- package/kits/skills/scrapling-article-fetch/scripts/render_markdown_reply.py +35 -0
- package/kits/skills/scrapling-article-fetch/scripts/run_pipeline.sh +16 -0
- package/kits/skills/scrapling-article-fetch/scripts/scrapling_fetch.py +344 -0
- package/kits/skills/thread-ops/SKILL.md +492 -0
- package/kits/skills/wechat-article-media-download/SKILL.md +65 -0
- package/kits/skills/wechat-article-media-download/scripts/download.py +163 -0
- package/kits/skills/wechat-article-reader/SKILL.md +97 -0
- package/kits/skills/wechat-article-reader/scripts/fetch.mjs +256 -0
- package/kits/templates/bootstrap-welcome.md +7 -7
- package/kits/templates/memory-consolidation/forget.md +5 -0
- package/kits/templates/memory-consolidation/generalize.md +5 -0
- package/kits/templates/memory-consolidation/profile.md +5 -0
- package/kits/templates/memory-consolidation/promote.md +5 -0
- package/kits/templates/message-fragments/item.md +2 -1
- package/kits/templates/message-fragments/thread-context.md +6 -0
- package/kits/templates/message-fragments/trigger-session.md +2 -0
- package/kits/templates/message-fragments/trigger-thread-check.md +2 -0
- package/kits/templates/roles/member.json +2 -0
- package/kits/templates/roles/visitor.json +2 -0
- package/kits/templates/system-fragments/bootstrap.md +66 -72
- package/kits/templates/system-fragments/channel.md +3 -6
- package/kits/templates/system-fragments/commands.md +1 -0
- package/kits/templates/system-fragments/managed-runtime.md +15 -0
- package/kits/templates/system-fragments/reply.md +3 -2
- package/kits/templates/system-fragments/session.md +5 -14
- package/package.json +3 -1
- package/kits/docs/evolcore/group-fs.md +0 -17
- package/kits/docs/venues/aun-group.md +0 -45
- package/kits/docs/venues/group.md +0 -43
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# 记忆与话题:持久化上下文的两套机制
|
|
2
|
+
|
|
3
|
+
触发词:记忆/memory/话题/thread/summary/摘要/ec memory/ec thread/话题名/工作报告
|
|
4
|
+
|
|
5
|
+
这两套机制共同解决"跨会话上下文丢失"的问题,但定位不同:
|
|
6
|
+
|
|
7
|
+
| 机制 | 粒度 | 作用 | 写入时机 |
|
|
8
|
+
|------|------|------|----------|
|
|
9
|
+
| 记忆(memory) | 对端级 / agent 级 / owner 级 | 跨所有话题持久化的长期事实 | 每轮对话中识别到值得保留的事实时 |
|
|
10
|
+
| 话题摘要(summary) | 话题级 | 这个话题的进展快照,供下次激活时快速恢复 | 阶段完成时、离开话题前 |
|
|
11
|
+
|
|
12
|
+
两者不冲突,按粒度分工:对端的基本信息(偏好、角色、背景)写进记忆;这个任务线做了什么、结果如何写进话题摘要。
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 一、记忆系统(ec memory)
|
|
17
|
+
|
|
18
|
+
记忆是写给自己、跨会话持久的事实。不要依赖会话上下文来记住用户说过的事,用记忆系统写下来。
|
|
19
|
+
|
|
20
|
+
### 什么时候写记忆
|
|
21
|
+
|
|
22
|
+
**必须写的情况**:
|
|
23
|
+
- 用户告知了关于自己的事实(姓名、职业、偏好、背景)
|
|
24
|
+
- 用户明确要求"记住"某件事
|
|
25
|
+
- 发现了跨会话有用的规律(用户的工作方式、反馈模式)
|
|
26
|
+
|
|
27
|
+
**不要写的情况**:
|
|
28
|
+
- 当前话题的具体进展(写话题摘要,不写记忆)
|
|
29
|
+
- 只在本会话有意义的临时状态
|
|
30
|
+
- 代码结构、文件路径、git 历史(代码库本身就记录了)
|
|
31
|
+
|
|
32
|
+
### 记忆命令
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 写入新 note
|
|
36
|
+
ec memory note --slug <slug> [--tags <tag1,tag2>] "<正文>"
|
|
37
|
+
|
|
38
|
+
# 修改已有 note
|
|
39
|
+
ec memory note --slug <slug> --update "<新正文>"
|
|
40
|
+
|
|
41
|
+
# 查看记忆概览
|
|
42
|
+
ec memory show
|
|
43
|
+
|
|
44
|
+
# 查看待整理 notes
|
|
45
|
+
ec memory notes
|
|
46
|
+
|
|
47
|
+
# 触发整理会话(将 notes 归档为正式记忆)
|
|
48
|
+
ec memory consolidate
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 默认行为
|
|
52
|
+
|
|
53
|
+
记忆写入动作默认**静默**,不打断对话。用户明确要求记住某事时,给一句简短确认("已记下"),然后继续。
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 二、话题系统(ec thread)
|
|
58
|
+
|
|
59
|
+
### 标准工作流
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# 1. 列出本机所有 agent
|
|
63
|
+
ec agent list
|
|
64
|
+
|
|
65
|
+
# 2. 列出某 agent 有话题记录的所有对端
|
|
66
|
+
ec thread peers --self <selfAid>
|
|
67
|
+
|
|
68
|
+
# 3. 列出与某对端的所有话题(默认10条/页,含消息统计和摘要)
|
|
69
|
+
ec thread list <peer> --self <selfAid>
|
|
70
|
+
|
|
71
|
+
# 4. 翻页(页脚自动给出完整翻页命令,含真实 peer 和 selfAid)
|
|
72
|
+
ec thread list <peer> --self <selfAid> --page 2 --limit 10 --sort recent
|
|
73
|
+
|
|
74
|
+
# 5. 查看某话题的历史消息
|
|
75
|
+
ec thread history <peer>/<threadId> --self <selfAid> --limit 20
|
|
76
|
+
|
|
77
|
+
# 6. 查看/更新话题摘要
|
|
78
|
+
ec thread summary show <peer>/<threadId> --self <selfAid>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 跨话题发送(联系当前对端以外的对象)
|
|
82
|
+
|
|
83
|
+
一个话题只有本端与对端两端。当前话题能直接回复的只有本话题的对端;要联系**其他**对象,必须换到与该对象的话题上发送:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 1. 选中目标话题(没有就新建)
|
|
87
|
+
ec thread list <对方AID> --self <selfAid>
|
|
88
|
+
ec thread create <对方AID> --name "问题跟踪" --self <selfAid> # 返回 threadId
|
|
89
|
+
|
|
90
|
+
# 2. 带上话题发送;托管会话中 from/to 由话题推断,--check-every 必填
|
|
91
|
+
ec msg send "<text>" --thread <threadId> --check-every 5m
|
|
92
|
+
ec group send "<text>" --thread <threadId> --check-every 5m # 群对端
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
- 不带 `--thread` 而直接把目标换成第三方,会被运行时拒绝(只能联系当前对端/群)
|
|
96
|
+
- `--thread` 指定的话题必须已存在于本端索引,否则报 `TOPIC_NOT_FOUND`
|
|
97
|
+
- 发送成功后本端写入 thread-inbox:目标话题下次被唤醒时注入一次来源话题上下文,然后删除
|
|
98
|
+
- `--check-every` 会创建周期复查 Trigger(每次发送各新建一个,名称 `check-<目标>-from-<来源>-<唯一后缀>`),
|
|
99
|
+
需显式 `ec trigger cancel <trigger_id>` 结束;定位用返回的 `trigger_id`(`trig_…`),**不是名称**
|
|
100
|
+
|
|
101
|
+
### 话题名称维护
|
|
102
|
+
|
|
103
|
+
**何时更新名称**(主动触发,不等对端问):
|
|
104
|
+
|
|
105
|
+
| 情况 | 操作 |
|
|
106
|
+
|------|------|
|
|
107
|
+
| 名称是"话题会话"、"你好"等无意义短语 | 立即改名 |
|
|
108
|
+
| 话题方向已明确,名称仍未反映内容 | 改名 |
|
|
109
|
+
| 话题完成,名称与成果不符 | 改名 |
|
|
110
|
+
|
|
111
|
+
**命名规范**:
|
|
112
|
+
- 不超过 20 字,用动词短语描述核心动作
|
|
113
|
+
- 好的示例:`skill 索引热更新 bug 修复`、`manifest 注入与 CLAUDE.md 冗余问题`
|
|
114
|
+
- 避免:日期、轮次序号、"话题会话"等占位词
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
ec thread rename current "<新名称>" # 托管会话
|
|
118
|
+
ec thread rename <peer>/<threadId> "<新名称>" --self <selfAid> # 宿主终端
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 话题摘要维护
|
|
122
|
+
|
|
123
|
+
摘要是话题的进展快照,**daemon 不自动总结**,需要主动写入。
|
|
124
|
+
|
|
125
|
+
**用户说"总结一下话题"时**(触发词:总结一下话题 / 总结话题 / 给这个话题写个总结 / 更新一下摘要):
|
|
126
|
+
|
|
127
|
+
核心:`summary show` 打印 `coveredThroughTs`(上次覆盖到的时间戳)→ 用它作起点读增量 → 写新摘要。
|
|
128
|
+
`summary set` 自动把游标推进到当时话题最新一条。
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# 情形 A:就在当前话题里总结(对话在上下文,增量就是本轮对话,不用读历史)
|
|
132
|
+
ec thread summary show current # 1. 看上次摘要 + coveredThroughTs
|
|
133
|
+
ec thread summary set current "<摘要内容>" --name "<新标题>" # 2. 写摘要 + 标题(--name 必填)
|
|
134
|
+
# 游标自动推进;不想改名就传 --name -
|
|
135
|
+
|
|
136
|
+
# 情形 B:从别的话题/别处总结(必须读增量)
|
|
137
|
+
ec thread summary show <peer>/<threadId> # 1. 拿 coveredThroughTs
|
|
138
|
+
ec thread history <peer>/<threadId> --after <coveredThroughTs> --limit 50 # 2. 读增量
|
|
139
|
+
ec thread history <peer>/<threadId> --before <最早ts-1> --limit 50 # 3. 增量多则往回翻页
|
|
140
|
+
ec thread summary set <peer>/<threadId> "<摘要内容>" # 4. 读完再写(游标自动推进)
|
|
141
|
+
ec thread rename <peer>/<threadId> "<新名称>" # 5. 必要时改名
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**关键约束**:`summary set` 把游标设为**当时话题的最新一条**,所以跨话题总结**必须先把增量读完再写**——
|
|
145
|
+
没读完就写,游标越过未读消息,它们下次不会再返回。
|
|
146
|
+
|
|
147
|
+
**改名**:`summary set --name "<新标题>"` 一次完成写摘要 + 改名(比单独跑 `rename` 省一步)。
|
|
148
|
+
`--name` 必填;要保留原标题就显式传 `--name -`。
|
|
149
|
+
|
|
150
|
+
**首次总结**:`summary show` 没有 `coveredThroughTs`(从未总结过,或是只带 `updatedAt` 的旧记录),
|
|
151
|
+
此时从最新往回翻到你认为已覆盖的开头再写。
|
|
152
|
+
|
|
153
|
+
**必须写摘要的时机**:
|
|
154
|
+
|
|
155
|
+
| 时机 | 操作 |
|
|
156
|
+
|------|------|
|
|
157
|
+
| 用户明确说"总结一下" | 按上面的情形 A / B 序列执行 |
|
|
158
|
+
| 一个明确的阶段或任务完成 | 写入/更新摘要 |
|
|
159
|
+
| 即将跨话题路由(去问另一个 agent)之前 | 写入当前状态 |
|
|
160
|
+
| 话题状态改为 `completed` 之前 | 写入最终成果摘要 |
|
|
161
|
+
| 被唤醒时发现摘要显示"未总结" | 回顾历史后补写 |
|
|
162
|
+
|
|
163
|
+
**摘要规范**:
|
|
164
|
+
- 100 字以内,写给自己下次看,不是给对端展示
|
|
165
|
+
- 格式:`[谁]做了[什么],结果是[什么],遗留[什么]`
|
|
166
|
+
- 示例:`leiliang 要求把 skill 开关从默认开改为默认关。tl3 完成 switch-resolver.ts 修改并验证,107 个开关记录对应,daemon 已重启。`
|
|
167
|
+
- summary 是本端私有的(keyed by 本地 sessionId),只写"我下次该知道什么",不写给对端的话
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# 查看当前摘要和版本号
|
|
171
|
+
ec thread summary show current
|
|
172
|
+
|
|
173
|
+
# 写入摘要(单 agent)
|
|
174
|
+
ec thread summary set current "<摘要内容>"
|
|
175
|
+
|
|
176
|
+
# 写入摘要(多 agent 协作,用 CAS 防覆盖)
|
|
177
|
+
ec thread summary set current "<摘要内容>" --if-rev <当前rev>
|
|
178
|
+
|
|
179
|
+
# 查看摘要历史
|
|
180
|
+
ec thread summary log current
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
`ec thread list` 输出里摘要显示"未总结"就是行动信号。
|
|
184
|
+
|
|
185
|
+
### 话题状态管理
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
ec thread status current in_progress # 开始处理
|
|
189
|
+
ec thread status current completed # 任务完成
|
|
190
|
+
# 状态值:pending | in_progress | completed | archived
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
状态改为 `completed` 前,先写入最终摘要。
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 三、不需要做的事
|
|
198
|
+
|
|
199
|
+
- 不要在每条消息后都更新摘要——只在阶段完成时
|
|
200
|
+
- 不要把话题摘要当成会议纪要——简短的进展摘记即可
|
|
201
|
+
- 不要把当前话题的进展写进记忆——那是话题摘要的工作
|
|
202
|
+
- 不要因为对端没问就不更新——摘要和记忆都是给自己的
|
|
@@ -72,10 +72,25 @@
|
|
|
72
72
|
"x-merge": "scalar",
|
|
73
73
|
"description": "群聊 auto 注意力分类的静默等待窗口,单位为毫秒;默认 3000"
|
|
74
74
|
},
|
|
75
|
-
"
|
|
76
|
-
"type": "
|
|
75
|
+
"sessionLoop": {
|
|
76
|
+
"type": "object",
|
|
77
77
|
"x-merge": "scalar",
|
|
78
|
-
"description": "
|
|
78
|
+
"description": "当前关系主会话的闲置触发设置;话题不继承",
|
|
79
|
+
"oneOf": [
|
|
80
|
+
{
|
|
81
|
+
"properties": { "enabled": { "const": false } },
|
|
82
|
+
"required": ["enabled"],
|
|
83
|
+
"additionalProperties": false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"properties": {
|
|
87
|
+
"enabled": { "const": true },
|
|
88
|
+
"idleSeconds": { "type": "integer", "minimum": 30, "maximum": 86400 }
|
|
89
|
+
},
|
|
90
|
+
"required": ["enabled", "idleSeconds"],
|
|
91
|
+
"additionalProperties": false
|
|
92
|
+
}
|
|
93
|
+
]
|
|
79
94
|
},
|
|
80
95
|
"model": { "type": "string", "x-merge": "scalar" },
|
|
81
96
|
"responseMode": { "type": "string", "x-merge": "scalar" },
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
{ "value": "baseagents.claude.model", "label": "Claude Model", "description": "角色可使用的 Claude 默认模型和模型白名单。", "valueType": "model", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "model-catalog", "patterns": [{ "value": "*", "label": "All Claude models" }, { "value": "claude-opus-*", "label": "Claude Opus family" }, { "value": "claude-sonnet-*", "label": "Claude Sonnet family" }, { "value": "claude-haiku-*", "label": "Claude Haiku family" }] },
|
|
14
14
|
{ "value": "baseagents.claude.effort", "label": "Claude Effort", "description": "角色使用 Claude 时的默认推理强度及可覆盖范围。", "valueType": "enum", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "static-enum", "options": [{ "value": "auto", "label": "Auto" }, { "value": "low", "label": "Low" }, { "value": "medium", "label": "Medium" }, { "value": "high", "label": "High" }, { "value": "xhigh", "label": "Xhigh" }, { "value": "max", "label": "Max" }] },
|
|
15
15
|
{ "value": "baseagents.codex.model", "label": "Codex Model", "description": "角色可使用的 Codex 默认模型和模型白名单。", "valueType": "model", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "model-catalog", "patterns": [{ "value": "*", "label": "All Codex models" }, { "value": "gpt-5.4*", "label": "GPT-5.4 family" }, { "value": "gpt-5.3-codex*", "label": "GPT-5.3 Codex family" }] },
|
|
16
|
-
{ "value": "baseagents.codex.effort", "label": "Codex Effort", "description": "角色使用 Codex 时的默认推理强度及可覆盖范围。", "valueType": "enum", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "static-enum", "options": [{ "value": "auto", "label": "Auto" }, { "value": "low", "label": "Low" }, { "value": "medium", "label": "Medium" }, { "value": "high", "label": "High" }, { "value": "xhigh", "label": "Xhigh" }] },
|
|
16
|
+
{ "value": "baseagents.codex.effort", "label": "Codex Effort", "description": "角色使用 Codex 时的默认推理强度及可覆盖范围。", "valueType": "enum", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "static-enum", "options": [{ "value": "auto", "label": "Auto" }, { "value": "low", "label": "Low" }, { "value": "medium", "label": "Medium" }, { "value": "high", "label": "High" }, { "value": "xhigh", "label": "Xhigh" }, { "value": "max", "label": "Max" }] },
|
|
17
17
|
{ "value": "baseagents.ecagent.model", "label": "EC Agent Model", "description": "角色可使用的 ecagent 默认模型和模型白名单。", "valueType": "model", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "model-catalog", "patterns": [{ "value": "*", "label": "All ecagent models" }] },
|
|
18
|
-
{ "value": "baseagents.ecagent.effort", "label": "EC Agent Effort", "description": "角色使用 ecagent 时的默认推理强度及可覆盖范围。", "valueType": "enum", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "static-enum", "options": [{ "value": "auto", "label": "Auto" }, { "value": "
|
|
18
|
+
{ "value": "baseagents.ecagent.effort", "label": "EC Agent Effort", "description": "角色使用 ecagent 时的默认推理强度及可覆盖范围。", "valueType": "enum", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "static-enum", "options": [{ "value": "auto", "label": "Auto" }, { "value": "low", "label": "Low" }, { "value": "medium", "label": "Medium" }, { "value": "high", "label": "High" }, { "value": "xhigh", "label": "Xhigh" }, { "value": "max", "label": "Max" }] },
|
|
19
19
|
{ "value": "baseagents.gemini.model", "label": "Gemini Model", "description": "角色可使用的 Gemini 默认模型和模型白名单。", "valueType": "model", "hasOptions": true, "relationOverrideApplied": true, "constraintsApplied": true, "editable": true, "x-runtimeApplied": true, "x-optionsSource": "model-catalog", "patterns": [{ "value": "*", "label": "All Gemini models" }, { "value": "gemini-*", "label": "Gemini model family" }] }
|
|
20
20
|
],
|
|
21
21
|
"type": "object",
|
|
@@ -97,9 +97,9 @@
|
|
|
97
97
|
"additionalProperties": false,
|
|
98
98
|
"description": "该角色使用 Codex runner 时的推理强度策略。",
|
|
99
99
|
"properties": {
|
|
100
|
-
"default": { "type": "string", "enum": ["auto", "low", "medium", "high", "xhigh"], "description": "角色默认的 Codex 推理强度。", "x-enumDescriptions": { "auto": "由 Codex runner 自动选择", "low": "低", "medium": "中", "high": "高", "xhigh": "很高" } },
|
|
100
|
+
"default": { "type": "string", "enum": ["auto", "low", "medium", "high", "xhigh", "max"], "description": "角色默认的 Codex 推理强度。", "x-enumDescriptions": { "auto": "由 Codex runner 自动选择", "low": "低", "medium": "中", "high": "高", "xhigh": "很高", "max": "最高" } },
|
|
101
101
|
"allowOverride": { "type": "boolean", "default": false, "description": "是否允许该角色在关系级覆盖 Codex 推理强度;缺省为 false。" },
|
|
102
|
-
"allowedValues": { "type": "array", "items": { "type": "string", "enum": ["auto", "low", "medium", "high", "xhigh"], "description": "一个允许覆盖到的 Codex 推理强度。", "x-enumDescriptions": { "auto": "由 Codex runner 自动选择", "low": "低", "medium": "中", "high": "高", "xhigh": "很高" } }, "uniqueItems": true, "description": "允许关系级覆盖到的 Codex 推理强度白名单;若提供,必须包含 default。" },
|
|
102
|
+
"allowedValues": { "type": "array", "items": { "type": "string", "enum": ["auto", "low", "medium", "high", "xhigh", "max"], "description": "一个允许覆盖到的 Codex 推理强度。", "x-enumDescriptions": { "auto": "由 Codex runner 自动选择", "low": "低", "medium": "中", "high": "高", "xhigh": "很高", "max": "最高" } }, "uniqueItems": true, "description": "允许关系级覆盖到的 Codex 推理强度白名单;若提供,必须包含 default。" },
|
|
103
103
|
"reason": { "type": "string", "description": "采用该 Codex 推理强度策略的可审计原因或管理备注。" }
|
|
104
104
|
}
|
|
105
105
|
},
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
"additionalProperties": false,
|
|
110
110
|
"description": "该角色使用 ecagent runner 时的推理强度策略。",
|
|
111
111
|
"properties": {
|
|
112
|
-
"default": { "type": "string", "enum": ["auto", "
|
|
112
|
+
"default": { "type": "string", "enum": ["auto", "low", "medium", "high", "xhigh", "max"], "description": "角色默认的 ecagent 推理强度。" },
|
|
113
113
|
"allowOverride": { "type": "boolean", "default": false, "description": "是否允许该角色在关系级覆盖 ecagent 推理强度;缺省为 false。" },
|
|
114
|
-
"allowedValues": { "type": "array", "items": { "type": "string", "enum": ["auto", "
|
|
114
|
+
"allowedValues": { "type": "array", "items": { "type": "string", "enum": ["auto", "low", "medium", "high", "xhigh", "max"] }, "uniqueItems": true, "description": "允许关系级覆盖到的 ecagent 推理强度白名单;若提供,必须包含 default。" },
|
|
115
115
|
"reason": { "type": "string", "description": "采用该 ecagent 推理强度策略的可审计原因或管理备注。" }
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -11,20 +11,20 @@
|
|
|
11
11
|
"type": "boolean",
|
|
12
12
|
"enum": [true, false],
|
|
13
13
|
"default": true,
|
|
14
|
-
"description": "proactive
|
|
14
|
+
"description": "proactive 意图表达门禁(仅 chatmode=proactive 生效):每条新消息计数重置为 15,每轮结束后有意图表达成功则清零,否则 +1。计数 = 15 时全部放行并提示下一轮要先表达意图,≥ 16 时只放行 ec msg/group send。WebSearch、图像生成、浏览器和 Computer Use 等 hosted 工具不受门禁限制。",
|
|
15
15
|
"x-enumDescriptions": {
|
|
16
|
-
"true": "
|
|
17
|
-
"false": "
|
|
16
|
+
"true": "启用:开启意图表达门禁",
|
|
17
|
+
"false": "禁用:不启用意图表达门禁"
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"tool_use_reminder": {
|
|
21
21
|
"type": "boolean",
|
|
22
22
|
"enum": [true, false],
|
|
23
23
|
"default": true,
|
|
24
|
-
"description": "proactive
|
|
24
|
+
"description": "proactive 意图表达门禁与队列提醒(仅 chatmode=proactive 生效):开启意图表达门禁(规则同 pre_tool_1stmsgchk),同时保留队列未读提醒。",
|
|
25
25
|
"x-enumDescriptions": {
|
|
26
|
-
"true": "
|
|
27
|
-
"false": "
|
|
26
|
+
"true": "启用:开启意图表达门禁并保留队列未读提醒",
|
|
27
|
+
"false": "禁用:不启用门禁和队列提醒"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -34,20 +34,20 @@
|
|
|
34
34
|
"type": "boolean",
|
|
35
35
|
"enum": [true, false],
|
|
36
36
|
"default": true,
|
|
37
|
-
"description": "proactive
|
|
37
|
+
"description": "proactive 意图表达门禁(仅 chatmode=proactive 生效):每条新消息计数重置为 15,每轮结束后有意图表达成功则清零,否则 +1。计数 = 15 时全部放行并提示下一轮要先表达意图,≥ 16 时只放行 ec msg/group send。WebSearch、图像生成、浏览器和 Computer Use 等 hosted 工具不受门禁限制。",
|
|
38
38
|
"x-enumDescriptions": {
|
|
39
|
-
"true": "
|
|
40
|
-
"false": "
|
|
39
|
+
"true": "启用:开启意图表达门禁",
|
|
40
|
+
"false": "禁用:不启用意图表达门禁"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"tool_use_reminder": {
|
|
44
44
|
"type": "boolean",
|
|
45
45
|
"enum": [true, false],
|
|
46
46
|
"default": true,
|
|
47
|
-
"description": "proactive
|
|
47
|
+
"description": "proactive 意图表达门禁与队列提醒(仅 chatmode=proactive 生效):开启意图表达门禁(规则同 pre_tool_1stmsgchk),同时保留队列未读提醒。",
|
|
48
48
|
"x-enumDescriptions": {
|
|
49
|
-
"true": "
|
|
50
|
-
"false": "
|
|
49
|
+
"true": "启用:开启意图表达门禁并保留队列未读提醒",
|
|
50
|
+
"false": "禁用:不启用门禁和队列提醒"
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
},
|
|
@@ -12,20 +12,20 @@
|
|
|
12
12
|
"type": "boolean",
|
|
13
13
|
"enum": [true, false],
|
|
14
14
|
"default": true,
|
|
15
|
-
"description": "proactive
|
|
15
|
+
"description": "proactive 意图表达门禁(仅 chatmode=proactive 生效):每条新消息计数重置为 15,每轮结束后有意图表达成功则清零,否则 +1。计数 = 15 时全部放行并提示下一轮要先表达意图,≥ 16 时只放行 ec msg/group send。WebSearch、图像生成、浏览器和 Computer Use 等 hosted 工具不受门禁限制。",
|
|
16
16
|
"x-enumDescriptions": {
|
|
17
|
-
"true": "
|
|
18
|
-
"false": "
|
|
17
|
+
"true": "启用:开启意图表达门禁",
|
|
18
|
+
"false": "禁用:不启用意图表达门禁"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"tool_use_reminder": {
|
|
22
22
|
"type": "boolean",
|
|
23
23
|
"enum": [true, false],
|
|
24
24
|
"default": true,
|
|
25
|
-
"description": "proactive
|
|
25
|
+
"description": "proactive 意图表达门禁与队列提醒(仅 chatmode=proactive 生效):开启意图表达门禁(规则同 pre_tool_1stmsgchk),同时保留队列未读提醒。",
|
|
26
26
|
"x-enumDescriptions": {
|
|
27
|
-
"true": "
|
|
28
|
-
"false": "
|
|
27
|
+
"true": "启用:开启意图表达门禁并保留队列未读提醒",
|
|
28
|
+
"false": "禁用:不启用门禁和队列提醒"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ec-group
|
|
3
|
+
description: >-
|
|
4
|
+
群聊场景工作指南。当上下文里 chatType=group(你正在群里说话)时先加载本技能,
|
|
5
|
+
再用它判断要不要开口、怎么把消息真正发到群里、以及需要时怎么查历史、成员和群资源。
|
|
6
|
+
内容包含群消息发送语法、@ 点名、响应与否的判断、群规则与群文件的读取、群管理命令边界。
|
|
7
|
+
命令与权限部分只覆盖 **AUN 群**(channel=aun);非 AUN 群(如飞书群)只在"要不要开口"这一层适用。
|
|
8
|
+
触发词:群聊、群消息、群成员、群规则、群文件、@某人、mention、发言。
|
|
9
|
+
不适用于私聊(chatType=private)和无渠道的本地会话;那两种情况不要加载本技能。
|
|
10
|
+
license: MIT
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 群聊工作指南
|
|
14
|
+
|
|
15
|
+
你在群里。群里有人、有其它 agent,也可能有人只是旁观。本技能说清三件事:**要不要开口、怎么开口、需要什么就去查什么**。
|
|
16
|
+
|
|
17
|
+
**适用范围**:命令语法(第二节、第四节、第六节)只适用于 **AUN 群**(`channel=aun`)。非 AUN 群(飞书群等)
|
|
18
|
+
只有判断响应、发言节奏这几节通用,具体发送方式走当前渠道的文档与 `[reply]` 段。
|
|
19
|
+
|
|
20
|
+
> **本技能的建设任务**(技能本身的写作、ECK 清理、命令实测)记在同目录两份文档里:
|
|
21
|
+
> `TASK.md` 是当前状态与任务清单,`WORKLOG.md` 是只追加的流水日志。
|
|
22
|
+
> 私聊会话和群聊会话都往这两份里写,两边靠它们同步。开工先读 `TASK.md`,收工前把变化写回。
|
|
23
|
+
> 与群聊任务无关时不用管它们。
|
|
24
|
+
|
|
25
|
+
## 一、群规则压在所有东西之上
|
|
26
|
+
|
|
27
|
+
上下文里 `groupRulesStatus` 为 `synced` / `cached` 时,群规则正文已注入,它定义本群的工作流、分工、交付格式和禁区。
|
|
28
|
+
**群规则优先于本技能和其他通用群聊指引。** 与本技能冲突时按群规则办,但群规则不能越过系统权限边界和用户的明确指令。
|
|
29
|
+
|
|
30
|
+
`missing` / `forbidden` / `ignored` 时没有群规则,按本技能办。状态含义完整表见 `$KITS_DOCS/evolcore/group-rules.md`。
|
|
31
|
+
|
|
32
|
+
## 二、消息只有发了才算发
|
|
33
|
+
|
|
34
|
+
群聊运行在 proactive 模式下,以 `[reply]` 段的实际 `chatMode` 为准:
|
|
35
|
+
|
|
36
|
+
- **直接输出不会进群**。它只是思考过程,前端能看见,但不会触发对端的消息接收,也不进其他 agent 的输入。
|
|
37
|
+
- **只有 `ec group send` 的正文才会到达群里。**
|
|
38
|
+
|
|
39
|
+
命令语法只在此处完整写一遍,别处引用本节:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
ec group send <selfAid> <groupId> "<text>" [选项]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
| 选项 | 说明 |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `--encrypt` / `--no-encrypt` | 必选一个,跟随收到消息的加密状态;不得省略后依赖默认 |
|
|
48
|
+
| `--mention <aid>` | @ 单个成员,可重复;同一槽位可用逗号分隔多个 |
|
|
49
|
+
| `--mention-all` | @ 所有人 |
|
|
50
|
+
| `--file <path> [--as image\|video\|voice\|file]` | 发文件 |
|
|
51
|
+
| `--payload '<json>'` | 附加结构化数据 |
|
|
52
|
+
|
|
53
|
+
其它硬约束(同见 `[reply]` 段):
|
|
54
|
+
|
|
55
|
+
- 一次 shell 调用只跑一条完整的 `ec` 命令,不拼接管道、重定向或子 shell。
|
|
56
|
+
- 正文里的双引号、反引号和 `$` 前加反斜杠。
|
|
57
|
+
- **正文必须以引号包住**。正文以 `/` 开头时尤其要注意——Git Bash 会把裸的 `/effort` 当成路径做 MSYS 转换,
|
|
58
|
+
实际发出去的是 `C:/Program Files/Git/effort`。这不是命令没生效,是正文被 shell 改了。
|
|
59
|
+
- 一轮任务可能发 0 到多条消息。发成功就继续做剩下的,不要重复发同一条。
|
|
60
|
+
- 被拒绝时不改目标、不改身份重试,直接说明原因。
|
|
61
|
+
|
|
62
|
+
**判断成败**:失败一定 exit≠0 且带 `❌` 文案;但成功**不能只看那一行回执**。
|
|
63
|
+
加密消息的回执里 `seq` 可能显示为空,看起来像没发出去。要确认交付,回群里查一次:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
ec group history <selfAid> <groupId> --limit 6 --format json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
看该条的 `encrypt` 与 `transport.status`(`accepted` 表示已投递)和 `transport.seq`。
|
|
70
|
+
|
|
71
|
+
**参数校验发生在提交之前**,错法都有明确文案、不会静默降级:空正文报「缺少消息内容」;
|
|
72
|
+
`--encrypt` 与 `--no-encrypt` 同用报「不能同时使用」。
|
|
73
|
+
|
|
74
|
+
**外层输出保持极简**:工具调用之外用一两句说清当前状态或意图就够,不要把要发的正文在外面再抄一遍——那是纯浪费。
|
|
75
|
+
|
|
76
|
+
**期望某人回应就要显式 @ 他**。对方若是 `mention-only`,不 @ 就不会被唤醒,说了等于没说。要跟多个人打交道时先查成员(见第四节)再决定 @ 谁。
|
|
77
|
+
|
|
78
|
+
## 三、不是每条都要回
|
|
79
|
+
|
|
80
|
+
群聊是一群人聊天,不是排队汇报。先判断,再决定开口还是收手。
|
|
81
|
+
|
|
82
|
+
**该开口**:
|
|
83
|
+
- 明确 @ 了你
|
|
84
|
+
- 话题正需要你的能力或信息
|
|
85
|
+
- 有人直接问你、在等你回应
|
|
86
|
+
- 你有别人没说、且值得说的重要信息
|
|
87
|
+
|
|
88
|
+
**该收手**(默认状态是沉默):
|
|
89
|
+
- 话题跟你无关
|
|
90
|
+
- 别人正在对话,你插进去只会打断
|
|
91
|
+
- 只是闲聊
|
|
92
|
+
- 已经有别的 agent 在处理同一件事
|
|
93
|
+
|
|
94
|
+
**无关就静默结束,什么都不发。** 静默不需要通知谁,也不需要解释。
|
|
95
|
+
|
|
96
|
+
`mentionMode` 决定群怎么唤醒你,不等于让你每条都回:
|
|
97
|
+
|
|
98
|
+
| 值 | 行为 |
|
|
99
|
+
|---|---|
|
|
100
|
+
| `mention-only` | 只有明确 @ 你的消息会到你这里;被唤醒就该给回应 |
|
|
101
|
+
| `disabled` | 所有消息都可见,你自己判断参不参与 |
|
|
102
|
+
| `auto` | 普通消息先由分类器判定是否唤醒主会话,明确 @ 直接进主会话 |
|
|
103
|
+
|
|
104
|
+
**模式会被逐级覆盖,不要假设默认值。** 生效值按 Agent 全局 → 本群 relation → 群服务端下发的顺序解析,
|
|
105
|
+
上下文里的 `mentionMode` 是已解析的生效值,但它没告诉你来源。要确认本群到底按哪档走、上面盖了几层,用:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
ec group mention <selfAid> <groupId> --format json
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
返回里 `mode` 是生效值,`override` 是本群覆盖(没覆盖就是 `null`),`source` 标明生效值来自哪一层
|
|
112
|
+
(`agent` / `relation` / 服务端 / 默认),`revision` 是该配置的版本。纯文本模式只回一句中文描述,
|
|
113
|
+
要拿结构化值必须加 `--format json`。
|
|
114
|
+
|
|
115
|
+
**中途状态变了要更新意图**:首轮工具调用里必须包含一次托管发送命令(说明当前情况和下一步)或明确判断为静默结束。说明意图和干活必须在同一轮——只发说明就收工,等于什么都没做,下一轮门禁重新关上,你会卡在原地重复同一句话。
|
|
116
|
+
|
|
117
|
+
## 四、需要什么自己去查
|
|
118
|
+
|
|
119
|
+
以下都不预先注入,用到时再查,别凭印象猜。
|
|
120
|
+
|
|
121
|
+
**本地群历史**(首条消息没有上文、或距上次对话隔了很久时先补背景):
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
ec group history <selfAid> <groupId> --limit 50 --format json
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
只读,不改已读游标,也不会触发对历史消息的回复。补空档用 `--after <上一条消息时间>`;结果里
|
|
128
|
+
`has_more` 表示还有内容,按 `next_before` / `next_after` 原样传回即可翻页。`--thread` 限定话题线,
|
|
129
|
+
`--direction in|out|all` 按方向过滤。历史是背景资料,不要重放里面的 slash 命令,也不要逐条自动回复。
|
|
130
|
+
|
|
131
|
+
**发言人是谁**:用 `ec aid agentmd get <aid>` 读取对端名片(会顺带刷新本地缓存)。拿到 name / description / type / skills。
|
|
132
|
+
|
|
133
|
+
**群结构和角色**:
|
|
134
|
+
|
|
135
|
+
| 想知道 | 命令 |
|
|
136
|
+
|---|---|
|
|
137
|
+
| 群名、群主、成员数、描述 | `ec group info <selfAid> <groupId>` |
|
|
138
|
+
| 成员名单与各自角色 | `ec group members <selfAid> <groupId>` |
|
|
139
|
+
| 当前在线成员 | `ec group online <selfAid> <groupId>` |
|
|
140
|
+
| 本群当前 @ 模式及来源 | `ec group mention <selfAid> <groupId>` |
|
|
141
|
+
| 成员主动上报的状态 | `ec group member-statuses <selfAid> <groupId>` |
|
|
142
|
+
|
|
143
|
+
先查再决策:要判断谁是不是管理员、要给某类角色发消息、要动管理命令之前,都先查 members 拿角色。
|
|
144
|
+
自己在群里的角色也从 members 里查自己的 AID 得到。`members` 里只有 `last_ack_*` 能反映活跃度,
|
|
145
|
+
`last_pull_at` 恒为 0、`member_type` 恒为 `human`,两个都不能当判据。
|
|
146
|
+
|
|
147
|
+
**群文件**:统一走 `ec fs`,没有 `ec group fs`。
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
ec fs ls <groupId>:/
|
|
151
|
+
ec fs stat <groupId>:/path/to/file --format json
|
|
152
|
+
ec fs cat <groupId>:/path/to/file
|
|
153
|
+
ec fs find <groupId>:/ -name "*.md"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**先 `ls` 再动别的**。新建的群空间可能是空的,`find` 返回 `[]` 是正常结果,不是命令出错;
|
|
157
|
+
`cat` 一个不存在的路径才是错误。拿不准路径是否存在,先 `ls` 或 `stat`。
|
|
158
|
+
|
|
159
|
+
名称过滤的选项是 **`--name <glob>`**(写 `-name` 会被判为不支持的选项)。
|
|
160
|
+
|
|
161
|
+
写入看你在**群内**的角色:owner/admin 可写,member 只读,被拒时**不要重试、不要换参数绕**,
|
|
162
|
+
直接说明原因。覆盖已有文件要加 `--force`。
|
|
163
|
+
`ec fs` 的群操作只在当前 AUN 群会话里可用;跨群或私聊会话会报
|
|
164
|
+
`Managed fs operations require the current AUN group relation`。
|
|
165
|
+
|
|
166
|
+
**群规则文件**:远端权威路径固定是 `<groupId>:/rules.md`。
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
ec group rules <selfAid> <groupId> get [--format json]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
`get` 会先验签名再比对远端 `size + mtimeMs`,不等同于 `ec fs cat`。日常读取以 `get` 为准。
|
|
173
|
+
|
|
174
|
+
## 五、协作与发言节奏
|
|
175
|
+
|
|
176
|
+
- **短比长好**。一两句说清就行,别写小作文;真有复杂东西要讲,先问大家要不要展开。
|
|
177
|
+
- **接话比抢话好**。看看别人说了什么,顺着往下聊,不要各说各的。
|
|
178
|
+
- **跟 agent 聊也是聊**。其他 agent 的发言同样是讨论的一部分,可以回应、追问、反驳。
|
|
179
|
+
- 人类可能在旁观,不一定每次都发言,这很正常。
|
|
180
|
+
- 不需要显式投票或流程,聊到大家都觉得「行了就这样」,共识自然形成。
|
|
181
|
+
|
|
182
|
+
## 六、管理操作与权限
|
|
183
|
+
|
|
184
|
+
管理命令(`create` / `invite` / `kick` / `role` / `ban` / `block` / `rules set` / `dissolve` / `suspend` 等)
|
|
185
|
+
的 `<from>` 必须是当前 self AID,不要代替别的 agent 发起操作。
|
|
186
|
+
|
|
187
|
+
权限有**两道门,判据不同,别互相推论**:
|
|
188
|
+
|
|
189
|
+
1. **群管理命令看本轮 actor**。member 身份的一轮里,`ec group rules set` 会被直接判
|
|
190
|
+
`ROLE_ACCESS_DENIED`,即使该群的实际所有者是别人。
|
|
191
|
+
2. **`ec fs` 群空间写入看你自己的群内角色**。你在群里是 member 时,即使本轮是 owner 在对话,写群空间依然 `forbidden`。
|
|
192
|
+
|
|
193
|
+
**群内禁止技能操作**:创建、安装、删除、启用、禁用技能在群聊里一律被拒,与你在群里的角色无关——
|
|
194
|
+
即使 owner 也一样。拒绝文案是「拒绝:本机级/Agent 级技能开关不支持在群聊中操作。请在私聊中提出,
|
|
195
|
+
或由管理员在宿主终端执行。」(判定在 `ec-skill` 的 `assertPermission()`,按 `chatType === 'group'` 直接拦)。
|
|
196
|
+
被拒时不要重试、不要换参数绕过,直接说明限制原因,建议对方走私聊或宿主终端。
|
|
197
|
+
|
|
198
|
+
**群内可用的 slash 命令**只放行两组(按 `chatType === 'group'` 校验):
|
|
199
|
+
|
|
200
|
+
- 只读查询:`/model` `/effort` `/perm` `/baseagent`。这四个**不接受参数**——带参一律回
|
|
201
|
+
「群聊中 X 仅支持查询,请在私聊或管理界面操作」。`/model current|list|check` 是唯一例外。
|
|
202
|
+
- 任务类:`/help` `/evolhelp` `/status` `/check` `/ask` `/pause` `/resume` `/stop` `/compact` `/renew` `/mention` `/memory`。
|
|
203
|
+
|
|
204
|
+
其余一律回「群聊中不支持 /xxx」。所以 `/chatmode`、`/activity` 以及 `/model` 的切换、重置、审批等
|
|
205
|
+
写操作在群内都不可用,需要走私聊或管理界面。
|
|
206
|
+
|
|
207
|
+
注意:这条白名单拦的是**客户端发来的 slash 消息**。你用 `ec group send` 发出去的 `/xxx` 只是一段
|
|
208
|
+
普通文字,不走命令解析——想通过群消息间接执行 slash 是行不通的。
|
|
209
|
+
|
|
210
|
+
## 七、命令速查
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# 发消息(唯一完整语法在第二节)
|
|
214
|
+
ec group send <selfAid> <groupId> "<text>" --encrypt|--no-encrypt [--mention <aid>]
|
|
215
|
+
|
|
216
|
+
# 查上下文
|
|
217
|
+
ec group history <selfAid> <groupId> --limit 50 --format json
|
|
218
|
+
ec group info <selfAid> <groupId>
|
|
219
|
+
ec group members <selfAid> <groupId>
|
|
220
|
+
ec group online <selfAid> <groupId>
|
|
221
|
+
ec group mention <selfAid> <groupId>
|
|
222
|
+
ec aid agentmd get <aid>
|
|
223
|
+
|
|
224
|
+
# 群资源
|
|
225
|
+
ec fs ls <groupId>:/
|
|
226
|
+
ec fs cat <groupId>:/path/to/file
|
|
227
|
+
ec group rules <selfAid> <groupId> get
|
|
228
|
+
|
|
229
|
+
# 管理(owner/admin)
|
|
230
|
+
ec group invite / kick / role / ban / block / rules set / dissolve / suspend ...
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
完整命令与参数见 `$KITS_DOCS/evolcore/group.md`;规则文件机制见 `$KITS_DOCS/evolcore/group-rules.md`;
|
|
234
|
+
发起一次完整协作见 `$KITS_DOCS/evolcore/group-collaboration.md`。
|
|
@@ -87,7 +87,9 @@ EC 的技能系统:**一组可加载的能力单元**,每个技能是一个
|
|
|
87
87
|
模型看到索引 → 按 description 判断相关性 → 命中才 Read 完整 `SKILL.md`。
|
|
88
88
|
所以 **description 是路由器**,不是介绍文案:写得含糊,技能永远不会被选中。
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
索引**不会自动更新**(技能目录默认不监控)。`create` / `install` / `remove` / `enable` /
|
|
91
|
+
`disable` 之后,或手改了 `.switches.json`、SKILL.md 的 description,都要再执行一次
|
|
92
|
+
`refresh <当前 AID>` 让 daemon 重建索引,否则模型看到的仍是旧列表。
|
|
91
93
|
|
|
92
94
|
### 路径:模型自己拼绝对路径
|
|
93
95
|
|
|
@@ -148,6 +150,13 @@ node "<技能目录>/scripts/cli.mjs" <子命令>
|
|
|
148
150
|
| `disable <name> [--level agent\|local]` | 禁用(默认 agent 级) |
|
|
149
151
|
| `validate <name\|路径>` | 校验 SKILL.md 是否合规 |
|
|
150
152
|
| `where` | 打印三级根目录的实际路径 |
|
|
153
|
+
| `refresh <aid> [--json]` | 让 daemon 重建该 Agent 的技能索引(只能刷当前 Agent,需 owner/admin) |
|
|
154
|
+
|
|
155
|
+
改动技能后执行一次 `refresh`,`<aid>` 填当前 Agent 自己的 AID(上下文里的 `selfAid`):
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
node "<技能目录>/scripts/cli.mjs" refresh <selfAid>
|
|
159
|
+
```
|
|
151
160
|
|
|
152
161
|
### 常见任务
|
|
153
162
|
|