evolcore 0.0.33 → 0.0.34
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 +37 -0
- package/bin/ec.js +3 -2
- package/bin/install-codex-managed-hooks.mjs +12 -1
- package/dist/agents/baseagent-availability.js +20 -36
- package/dist/agents/claude-runner.js +82 -13
- package/dist/agents/codex/diagnostics.js +37 -11
- package/dist/agents/codex-runner.js +218 -44
- package/dist/agents/ecagent-runner.js +73 -20
- package/dist/agents/runner-types.js +5 -6
- package/dist/aun/aid/identity.js +1 -1
- package/dist/channels/aun.js +16 -6
- package/dist/channels/daemon.js +6 -3
- package/dist/cli/aun-commands.js +3 -2
- package/dist/cli/ctl-command.js +3 -1
- package/dist/cli/daemon-commands.js +120 -19
- package/dist/cli/fs-command.js +2 -1
- package/dist/cli/index.js +20 -6
- package/dist/cli/integrity-command.js +196 -0
- package/dist/cli/memory-command.js +158 -145
- package/dist/cli/thread-command.js +5 -3
- package/dist/cli/trigger-command.js +6 -1
- package/dist/config/config-field-policy.js +4 -0
- package/dist/config/config-manager.js +19 -0
- package/dist/config/contact-book-store.js +5 -0
- package/dist/config/role-service.js +13 -0
- package/dist/config/runtime-env.js +16 -0
- package/dist/config-store.js +30 -0
- package/dist/core/audit/log-integrity.js +3 -1
- package/dist/core/auth/agent-delegation.js +108 -35
- package/dist/core/auth/delegation-diagnostics.js +414 -0
- package/dist/core/auth/operation-authorizer.js +1 -1
- package/dist/core/auth/operation-catalog.js +16 -0
- package/dist/core/command/agent-control.js +18 -26
- package/dist/core/command/command-handler.js +138 -4
- package/dist/core/command/daemon-diagnostics.js +1 -0
- package/dist/core/command/menu-catalog.js +3 -0
- package/dist/core/command/menu-handler.js +22 -7
- package/dist/core/command/menu-protocol.js +1 -0
- package/dist/core/command/slash-handler.js +2 -0
- package/dist/core/daemon-bootstrap.js +4 -7
- package/dist/core/file-integrity/read.js +61 -0
- package/dist/core/file-integrity/store.js +262 -0
- package/dist/core/ipc-registration.js +36 -1
- package/dist/core/memory/batch-meta.js +132 -0
- package/dist/core/memory/consolidation-context.js +35 -14
- package/dist/core/memory/consolidation-ops-records.js +14 -16
- package/dist/core/memory/consolidation.js +91 -26
- package/dist/core/memory/index-manager.js +19 -28
- package/dist/core/memory/memory-admin.js +19 -14
- package/dist/core/memory/memory-document.js +53 -9
- package/dist/core/memory/memory-writer.js +30 -15
- package/dist/core/message/im-renderer.js +20 -4
- package/dist/core/message/message-bridge.js +2 -1
- package/dist/core/message/response-engine.js +584 -47
- package/dist/core/permission/ec-command-parser.js +93 -4
- package/dist/core/permission/protected-paths.js +5 -1
- package/dist/core/permission/readonly-shell-query.js +43 -5
- package/dist/core/permission/session-path-grants.js +334 -0
- package/dist/core/permission/tool-canonical.js +226 -0
- package/dist/core/permission/tool-policy.js +30 -62
- package/dist/core/role/runtime-policy.js +21 -10
- package/dist/core/session/session-fs-store.js +123 -8
- package/dist/core/session/session-manager.js +75 -5
- package/dist/core/skill/index-generator.js +17 -3
- package/dist/core/system-session/grants.js +40 -0
- package/dist/core/system-session/memory.js +222 -0
- package/dist/core/system-session/registry.js +74 -0
- package/dist/core/system-session/types.js +14 -0
- package/dist/core/thread/thread-service.js +13 -20
- package/dist/eck/kit-renderer.js +7 -2
- package/dist/eck/manifest-engine.js +24 -4
- package/dist/index.js +11 -2
- package/dist/ipc.js +51 -40
- package/dist/paths.js +70 -0
- package/dist/stats/billing.js +20 -8
- package/dist/trigger/feedback.js +6 -1
- package/dist/trigger/parser.js +8 -1
- package/dist/trigger/system-definitions.js +3 -3
- package/dist/utils/cross-platform.js +11 -2
- package/dist/utils/error-dict.json +18 -4
- package/dist/utils/error-utils.js +121 -0
- package/dist/utils/instance-registry.js +13 -8
- package/dist/utils/log-writer.js +12 -0
- package/dist/utils/process-introspect.js +11 -0
- package/kits/docs/context-assembly.md +0 -1
- package/kits/docs/evolcore/agent-create.md +5 -4
- package/kits/docs/evolcore/agent.md +2 -2
- package/kits/docs/evolcore/config.md +2 -2
- package/kits/docs/evolcore/ctl.md +2 -2
- package/kits/docs/evolcore/ec-capabilities.md +1 -1
- package/kits/docs/evolcore/fs-architecture.md +4 -5
- package/kits/docs/evolcore/fs.md +1 -1
- package/kits/docs/evolcore/group-collaboration.md +2 -2
- package/kits/docs/evolcore/group.md +10 -10
- package/kits/docs/evolcore/memory-architecture.md +4 -5
- package/kits/docs/evolcore/memory-consolidation.md +18 -14
- package/kits/docs/evolcore/memory-tags.md +3 -1
- package/kits/docs/evolcore/memory.md +24 -12
- package/kits/docs/evolcore/model.md +16 -0
- package/kits/docs/evolcore/msg.md +7 -7
- package/kits/docs/evolcore/thread-chain.md +5 -5
- package/kits/docs/prompt-loading-architecture.md +0 -1
- package/kits/eck_manifest.json +0 -20
- package/kits/eck_manifest.memory.json +0 -12
- package/kits/rules/01-overview.md +11 -0
- package/kits/rules/03-identity.md +6 -3
- package/kits/rules/06-channel.md +1 -1
- package/kits/rules/07-memory-and-thread.md +12 -15
- package/kits/schemas/_meta.json +7 -1
- package/kits/schemas/agent-config.schema.13.json +1 -1
- package/kits/schemas/daemon.schema.7.json +140 -0
- package/kits/skills/ec-group/SKILL.md +4 -4
- package/kits/skills/ec-skill/scripts/cli.mjs +1 -1
- package/kits/skills/ec-skill/scripts/skill.mjs +1 -1
- package/kits/templates/memory-consolidation/forget.md +2 -2
- package/kits/templates/memory-consolidation/generalize.md +4 -4
- package/kits/templates/memory-consolidation/notes.md +11 -11
- package/kits/templates/memory-consolidation/profile.md +3 -3
- package/kits/templates/memory-consolidation/promote.md +3 -3
- package/kits/templates/memory-consolidation/workflow.md +6 -6
- package/kits/templates/message-fragments/handoff-request-to-target.md +1 -1
- package/kits/templates/system-fragments/bootstrap.md +4 -3
- package/kits/templates/system-fragments/channel.md +2 -2
- package/kits/templates/system-fragments/memory.md +16 -9
- package/kits/templates/system-fragments/reply.md +6 -6
- package/kits/templates/system-fragments/session.md +1 -1
- package/package.json +4 -3
- package/dist/core/memory/memory-session-policy.js +0 -41
- package/dist/core/memory/memory-signature.js +0 -257
|
@@ -9,40 +9,40 @@
|
|
|
9
9
|
- 仅在 evolcore 托管会话中可用(通过 daemon IPC 执行,依赖 `EVOLCORE_SESSION_ID`)。
|
|
10
10
|
- `note` 写入当前关系,**必须有对端**(peerKey);没有对端的会话不要调用。
|
|
11
11
|
- `memory.enableRelation=false` 时整个命令族被拒绝。
|
|
12
|
-
- **不要用 Write / Edit 直接写记忆文件,也不要用 baseagent
|
|
12
|
+
- **不要用 Write / Edit 直接写记忆文件,也不要用 baseagent 的原生记忆工具**:绕过完整性台账和索引,会被当作带外修改恢复掉,整理会话也不感知。
|
|
13
13
|
- `create` / `update` / `archive` 只在整理会话(`sessionType=memory`)里可用,主会话调用会被拒绝。
|
|
14
14
|
|
|
15
15
|
## note 写入
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
ec memory note --slug <slug> [--tags <tag1
|
|
18
|
+
ec memory note --slug <slug> [--tags '<tag1>,<tag2>'] [--speakers '<id1>,<id2>'] '<正文>'
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
| 参数 | 说明 |
|
|
22
22
|
|------|------|
|
|
23
23
|
| `--slug` | **必填**。字母/数字/连字符,1-64 字符,当前关系内唯一,后续 update / drop 靠它定位 |
|
|
24
|
-
| `--tags` |
|
|
25
|
-
| `--speakers` |
|
|
24
|
+
| `--tags` | 可选。写法固定为 `--tags 'tag1,tag2'`:单引号包住,逗号分隔。取值见 `$KITS_DOCS/evolcore/memory-tags.md` |
|
|
25
|
+
| `--speakers` | 可选,**群聊专用**。写法固定为 `--speakers '<aid1>,<aid2>'`:单引号包住,逗号分隔。填本条 note 涉及的发言人 AID 或渠道原生 ID。整理会话会据此把发言人相关信息分流写入各发言人自己的 relation 记忆,而不是只落在群的 relation 下。私聊场景无需填写。 |
|
|
26
26
|
| 正文 | 必填。写清事实本身即可,不用组织成索引描述 |
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
ec memory note --slug commit-chinese --tags
|
|
30
|
-
|
|
29
|
+
ec memory note --slug commit-chinese --tags 'rule,long-term' \
|
|
30
|
+
'对端要求:commit message 必须用中文,并列出所有功能改动点。'
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
note
|
|
33
|
+
note 是原料:不进索引、不进台账,由整理会话读取后决定留下什么。
|
|
34
34
|
|
|
35
35
|
## note 修改
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
ec memory note update <slug> [--slug <新slug>] [--tags
|
|
38
|
+
ec memory note update <slug> [--slug <新slug>] [--tags 'tag1,tag2'] ['<新正文>']
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
不传的字段保持不变;至少提供一项。判据:**还是在说同一件事 → update;不是 → 新建。**
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
ec memory note update commit-chinese --tags
|
|
45
|
-
|
|
44
|
+
ec memory note update commit-chinese --tags 'rule,long-term' \
|
|
45
|
+
'commit 消息必须用中文;代码注释可以是英文'
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
## note 撤销
|
|
@@ -87,19 +87,31 @@ context: C:\...\consolidation-batches\20261005T103000-toleiliang4.agentid
|
|
|
87
87
|
|
|
88
88
|
反馈规则:手动、上下文压缩、renew、`/new` 四种触发路径都会把整理结果反馈回**发起时的会话和话题**(用发起时抓取的 channelId / peerId / threadId 直接投递,不依赖会话 ID 是否变化)。只有定时触发不发反馈——结果只记录在整理批次目录的 `ops.jsonl` 里,供事后审计。
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
反馈内容取整理会话写入任务书指定反馈文件(`<batchDir>/scratch/feedback.txt`)的文本;未写入时回退到默认模板(模式、触发方式、耗时、新建/更新/归档条数等统计)。
|
|
91
91
|
|
|
92
92
|
没有 `--scope`,作用域由模式唯一决定。
|
|
93
93
|
|
|
94
|
+
## JSON 输出
|
|
95
|
+
|
|
96
|
+
所有子命令都支持在末尾加 `--format json`,取值只能是 `json`。
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
ec memory note list --format json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
成功时 stdout 输出 daemon 返回的结果对象,如 `{ "ok": true, "filePath": "..." }`、`{ "ok": true, "notes": [...] }`;
|
|
103
|
+
失败时 stdout 输出 `{ "ok": false, "code": "...", "error": "..." }` 并以退出码 1 结束,参数错误另带 `usage` 字段。
|
|
104
|
+
|
|
94
105
|
## 常见报错
|
|
95
106
|
|
|
96
107
|
| 报错 | 原因与处理 |
|
|
97
108
|
|------|-----------|
|
|
98
|
-
| `必须提供 --slug` | 写入漏了 `--slug`,补上:`ec memory note --slug <slug>
|
|
109
|
+
| `必须提供 --slug` | 写入漏了 `--slug`,补上:`ec memory note --slug <slug> '<正文>'` |
|
|
99
110
|
| `必须提供记忆内容(content)` | 正文缺失或被 shell 吞掉,正文整体加引号 |
|
|
100
111
|
| `SLUG_EXISTS: 该 slug 已存在同名 note: <路径>` | 撞名。补充同一件事 → `note update <slug>`;确实是新事 → 换 slug |
|
|
101
112
|
| `至少提供一项要改的内容` | `note update` 只给了 slug,补 `--slug` / `--tags` / 正文之一 |
|
|
102
113
|
| `未知参数: --xxx` | 参数拼错,未识别的参数一律报错 |
|
|
114
|
+
| `--format 仅支持 json: <值>` | `--format` 后只能跟 `json` |
|
|
103
115
|
| `--scope 已废弃` | 改用 `--mode` |
|
|
104
116
|
| `<op> 只能由整理会话(sessionType=memory)调用` | 主会话调用了 `create` / `update` / `archive`,改用 `ec memory note` |
|
|
105
117
|
|
|
@@ -49,3 +49,19 @@ ec model check [--self <aid>]
|
|
|
49
49
|
- 本地终端直接运行时不伪造远端角色。显式传入 `--role` 可检查该角色的模型可见性和有效模型。
|
|
50
50
|
- `use`、`effort`、`reset` 不直接修改角色策略;传入 role 写作用域会返回 `ROLE_POLICY_MANAGED`。
|
|
51
51
|
- `check` 会连接已配置的模型网关并发送最小探测请求;未配置自定义网关时跳过 API 探测。
|
|
52
|
+
|
|
53
|
+
## 模型参数与执行窗口
|
|
54
|
+
|
|
55
|
+
公共统计层通过 `resolveModelSpec()` 读取 `model-prices.jsonl`,但统计参数不等于底层执行器配置。
|
|
56
|
+
|
|
57
|
+
| Base agent | 执行与统计的处理方式 |
|
|
58
|
+
|------------|--------------------|
|
|
59
|
+
| Claude Code | 由参数表解析窗口,设置 SDK 自动压缩阈值;查询与手动压缩使用同一解析路径 |
|
|
60
|
+
| ecagent | 由参数表设置模型对象的 `contextWindow` 和输出上限 `maxTokens`;查询、手动压缩和上下文统计共用参数 |
|
|
61
|
+
| Codex | 优先使用 app-server 实时窗口;缺窗口时仅用参数表补齐统计,不修改 Codex 的执行窗口或压缩配置 |
|
|
62
|
+
| Gemini | 执行窗口和压缩仍交给 Gemini CLI 管理,不从参数表注入执行参数 |
|
|
63
|
+
|
|
64
|
+
Claude Code 和 ecagent 的窗口优先级为:显式 `[1m]` / `[200k]` 后缀 → 有效参数表记录 → runner 原有硬编码兜底。
|
|
65
|
+
ecagent 发给网关的模型 ID 不携带窗口后缀。Codex 没有实时窗口且参数表也无记录时,不虚构通用窗口。
|
|
66
|
+
|
|
67
|
+
模型理论窗口与网关、团队的请求额度是不同限制;查表得到 1M 窗口,不代表可以突破团队的 200K 请求上限。
|
|
@@ -17,22 +17,22 @@
|
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
# 文本(明文)
|
|
20
|
-
ec msg send <from> <to>
|
|
20
|
+
ec msg send <from> <to> '<text>'
|
|
21
21
|
|
|
22
22
|
# 从文件读取文本内容(用于超长消息或避免 Shell 转义)
|
|
23
23
|
ec msg send <from> <to> --text-from-file <path>
|
|
24
24
|
|
|
25
25
|
# 文本(密文 E2EE)
|
|
26
|
-
ec msg send <from> <to>
|
|
26
|
+
ec msg send <from> <to> '<text>' --encrypt
|
|
27
27
|
|
|
28
28
|
# 强制明文(同时出现时优先于 --encrypt)
|
|
29
|
-
ec msg send <from> <to>
|
|
29
|
+
ec msg send <from> <to> '<text>' --no-encrypt
|
|
30
30
|
|
|
31
31
|
# 文件:--as 可选 image|video|voice|file(默认按扩展名推断)
|
|
32
32
|
ec msg send <from> <to> --file <path> [--as <type>]
|
|
33
33
|
|
|
34
34
|
# 链接卡片
|
|
35
|
-
ec msg send <from> <to> --link <url> [--title
|
|
35
|
+
ec msg send <from> <to> --link <url> [--title '<title>'] [--description '<desc>']
|
|
36
36
|
|
|
37
37
|
# 自定义 payload(JSON)
|
|
38
38
|
ec msg send <from> <to> --payload '<json>'
|
|
@@ -67,7 +67,7 @@ ec contact unblock <target-aid> --self <self-aid>
|
|
|
67
67
|
|
|
68
68
|
非托管环境的 `ec msg send` 是独立 AUN CLI 发送,不读取或要求 `agents/<aid>/config.json`,因此不会触发这套 Agent 联系人准入判断。
|
|
69
69
|
|
|
70
|
-
在 EvolCore 会话内,发送会经过当前 session 的 self/peer/role 鉴权。`visitor` 或 `member` 默认只允许回复当前对端;要联系当前对端以外的对象,必须通过话题路由:先 `ec thread list <对方AID>` 选话题(没有就 `ec thread create`),再用 `ec msg send
|
|
70
|
+
在 EvolCore 会话内,发送会经过当前 session 的 self/peer/role 鉴权。`visitor` 或 `member` 默认只允许回复当前对端;要联系当前对端以外的对象,必须通过话题路由:先 `ec thread list <对方AID>` 选话题(没有就 `ec thread create`),再用 `ec msg send '<text>' --thread <threadId> --check-every <时长>` 发送;from/to 由话题推断,无需手写。不带 `--thread` 直接改目标会被拒绝。完整话题路由操作序列见 `[memory-and-thread]` 段。没有成功 JSON 回执(含 `message_id`/`status`)不得声称已发送。
|
|
71
71
|
|
|
72
72
|
成功输出:`✓ 已发送 <message_id> seq=<n> status=<status>`
|
|
73
73
|
|
|
@@ -163,6 +163,6 @@ ec msg history <self-aid> <target-aid> \
|
|
|
163
163
|
仅当无法使用 `ec msg send` 时(如拿不到自己的 AID),可用 `ec ctl send`,它自动继承当前会话的 AID 和对端:
|
|
164
164
|
|
|
165
165
|
```bash
|
|
166
|
-
ec ctl send
|
|
167
|
-
ec ctl send --encrypt
|
|
166
|
+
ec ctl send '<text>'
|
|
167
|
+
ec ctl send --encrypt '<text>'
|
|
168
168
|
```
|
|
@@ -27,7 +27,7 @@ ec thread history <peer>/<threadId> --self <selfAid> --limit 20
|
|
|
27
27
|
# 第六步:查看/写入 summary
|
|
28
28
|
ec thread summary show <peer>/<threadId> --self <selfAid>
|
|
29
29
|
# 写入时必须带 --name(同时设标题);不想改名传 -(详见「话题摘要」一节)
|
|
30
|
-
ec thread summary set <peer>/<threadId>
|
|
30
|
+
ec thread summary set <peer>/<threadId> '<摘要内容>' --name '<新标题>' --self <selfAid>
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## 什么时候用
|
|
@@ -120,13 +120,13 @@ ec thread delete <peer>/<threadId> # 软删除:session 文件移入 _trash/
|
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
122
|
# 完整形式
|
|
123
|
-
ec msg send <from> <to>
|
|
123
|
+
ec msg send <from> <to> '<消息内容>' --thread <threadId>
|
|
124
124
|
|
|
125
125
|
# 托管会话简化形式(from/to 自动从运行时上下文推断)
|
|
126
|
-
ec msg send
|
|
126
|
+
ec msg send '<消息内容>' --thread <threadId>
|
|
127
127
|
|
|
128
128
|
# 附带复查 Trigger(跨话题时必填;每 30m 唤醒本端回查)
|
|
129
|
-
ec msg send
|
|
129
|
+
ec msg send '<消息内容>' --thread <threadId> --check-every 30m
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
注意事项:
|
|
@@ -176,7 +176,7 @@ ec thread summary show <peer>/<threadId>
|
|
|
176
176
|
# 写入摘要 —— --name 必填:同时把话题改成这个标题
|
|
177
177
|
ec thread summary set <peer>/<threadId> "项目A需求已确认,正在开发登录模块" --name "项目A登录模块"
|
|
178
178
|
# 不想改话题名就显式传 -
|
|
179
|
-
ec thread summary set <peer>/<threadId>
|
|
179
|
+
ec thread summary set <peer>/<threadId> '<摘要内容>' --name -
|
|
180
180
|
|
|
181
181
|
# 支持 CAS(乐观锁),防止并发覆盖
|
|
182
182
|
ec thread summary set <peer>/<threadId> "新内容" --name - --if-rev 3
|
|
@@ -103,7 +103,6 @@
|
|
|
103
103
|
| 10 | rules | always | ✗ | `$KITS_RULES/` 目录(ECK 核心规则) |
|
|
104
104
|
| 20 | identity-layer | chatType≠null | ✓ | 身份层 fragment |
|
|
105
105
|
| 21 | persona | chatType≠null | ✗ | `$PERSONAL_DIR/persona.md` |
|
|
106
|
-
| 21.5 | personal-profile | chatType≠null | ✗ | `$PERSONAL_DIR/personal.md` |
|
|
107
106
|
| 30 | relation-layer | chatType∈{private,group} | ✓ | 关系层 fragment |
|
|
108
107
|
| 35 | memory | memoryEnableRelation≠false | ✓ | 记忆系统 fragment(按 sessionType 分支) |
|
|
109
108
|
| 36 | agent-memory | memoryEnableAgent≠false | ✗ | `$PERSONAL_DIR/memory/MEMORY.md` |
|
package/kits/eck_manifest.json
CHANGED
|
@@ -91,26 +91,6 @@
|
|
|
91
91
|
},
|
|
92
92
|
"description": "人格档案(persona.md)"
|
|
93
93
|
},
|
|
94
|
-
{
|
|
95
|
-
"id": "personal-profile",
|
|
96
|
-
"type": "file",
|
|
97
|
-
"file": "$PERSONAL_DIR/personal.md",
|
|
98
|
-
"order": 21.5,
|
|
99
|
-
"needsInjection": false,
|
|
100
|
-
"when": {
|
|
101
|
-
"and": [
|
|
102
|
-
{
|
|
103
|
-
"var": "chatType",
|
|
104
|
-
"neq": null
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"var": "lifecycle",
|
|
108
|
-
"eq": "active"
|
|
109
|
-
}
|
|
110
|
-
]
|
|
111
|
-
},
|
|
112
|
-
"description": "个人资料(personal.md)"
|
|
113
|
-
},
|
|
114
94
|
{
|
|
115
95
|
"id": "relation-layer",
|
|
116
96
|
"type": "file",
|
|
@@ -45,18 +45,6 @@
|
|
|
45
45
|
},
|
|
46
46
|
"description": "人格档案(判断记忆取舍时的行为准则参考)"
|
|
47
47
|
},
|
|
48
|
-
{
|
|
49
|
-
"id": "personal-profile",
|
|
50
|
-
"type": "file",
|
|
51
|
-
"file": "$PERSONAL_DIR/personal.md",
|
|
52
|
-
"order": 26,
|
|
53
|
-
"needsInjection": false,
|
|
54
|
-
"when": {
|
|
55
|
-
"var": "lifecycle",
|
|
56
|
-
"eq": "active"
|
|
57
|
-
},
|
|
58
|
-
"description": "个人资料与工作背景(判断记忆取舍时的自身定位参考)"
|
|
59
|
-
},
|
|
60
48
|
{
|
|
61
49
|
"id": "peer-profile",
|
|
62
50
|
"type": "file",
|
|
@@ -148,6 +148,17 @@ manifest schema、when 条件、合并覆盖、模板渲染、运行时变量目
|
|
|
148
148
|
开启后落 `$EVOLCORE_HOME/data/eck-debug/`,文件名带时间戳:`vars-<ts>.json`、`context-<ts>.md`、
|
|
149
149
|
`fragments-<ts>.md`、`manifest-<ts>.md`(逐条消息渲染另有 `msg-render-<ts>.md`),保留 24 小时。
|
|
150
150
|
|
|
151
|
+
## 命令行的引号写法
|
|
152
|
+
|
|
153
|
+
`ec` 命令里的自由文本参数(消息正文、`--desc`、`--prompt`、`--name`、`--question`、
|
|
154
|
+
`--reason` 等)**一律用单引号包住**(`'…'`)。
|
|
155
|
+
|
|
156
|
+
用双引号的话,正文里的反引号(`` ` ``)和 `$` 会被 shell 当作命令替换或变量展开,
|
|
157
|
+
命令会被拒绝——`ec` 只接受能确认为字面量的命令。
|
|
158
|
+
|
|
159
|
+
正文里不要出现半角撇号本身(会提前闭合引号);需要时用 `ʼ`(U+02BC)或 `'`(U+FF07)代替。
|
|
160
|
+
单引号内无法转义单引号,改写措辞也是一种办法。
|
|
161
|
+
|
|
151
162
|
## 术语
|
|
152
163
|
|
|
153
164
|
- **主体(Principal)**:通信参与者——人或 agent。AUN 网络上的主体持有 AID;非 AUN 渠道(飞书/微信等)的对端以该渠道的账号标识,同样是主体
|
|
@@ -17,8 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
| 路径 | 用途 | 实际状态 |
|
|
19
19
|
|------|------|----------|
|
|
20
|
-
| `persona.md` |
|
|
21
|
-
| `personal.md` | 个人资料与工作背景 | evolcore 自动注入;当前 Agent 在 owner 权限下可直接编辑 |
|
|
20
|
+
| `persona.md` | 人格(行为规范、身份认知)+ 个人资料与工作背景 + `## Bootstrap 交接` | evolcore 自动注入;通过 `ec agent persona` 读写,owner 会话中也可用文件工具直接编辑 |
|
|
22
21
|
| `memory/MEMORY.md` | agent 级 consolidated 记忆索引 | manifest order 36 注入(受 `memory.enableAgent` 开关控制) |
|
|
23
22
|
| `memory/pending/` | 待整理记忆(note) | 主会话写入,不注入 |
|
|
24
23
|
| `memory/consolidated/` | 正式记忆文件(签名) | 整理会话产出,通过 MEMORY.md 索引按需读取 |
|
|
@@ -26,6 +25,10 @@
|
|
|
26
25
|
| `$EVOLCORE_HOME/memory/owner/<ownerAid>/MEMORY.md` | owner 级 consolidated 记忆索引 | manifest order 37 注入(受 `memory.enableOwner` 开关控制) |
|
|
27
26
|
| `skills/` 目录 | 预留 | 会被创建,但目前无人读写 |
|
|
28
27
|
|
|
28
|
+
> `persona.md` 是**唯一**的人格/资料文件(`personal.md` 已废弃并入)。整体设置用
|
|
29
|
+
> `ec agent persona --text`(**整体覆盖**);只改其中某一段(如 `## Bootstrap 交接`)
|
|
30
|
+
> 用文件工具直接编辑,**不要**用 `--text` 单写一段,否则会冲掉其它段落。
|
|
31
|
+
|
|
29
32
|
`memory/episodic.jsonl`、`memory/semantic.md`、`style.md`、`goals.md`、`journal.jsonl`
|
|
30
33
|
是早期设计稿里的约定,**源码尚未实现读写**——不要假设写了就会生效。
|
|
31
34
|
|
|
@@ -34,7 +37,7 @@
|
|
|
34
37
|
- **注入条件**是 `chatType ≠ null` 且 `lifecycle = active`(即处于正常运行阶段的渠道会话),不是"有没有注入 AID"。生命周期变量缺失时按 `active` 处理;非法生命周期仍失败关闭。本地 coding 模式也不注入。
|
|
35
38
|
- persona.md 由 evolcore **自动前置**进 system prompt,你不需要主动 Read。
|
|
36
39
|
- persona.md 缺失时**没有默认人格兜底**,只是这一段不出现;行为约束改由 `kits/rules/` + `roles/` 权限定义承担。
|
|
37
|
-
-
|
|
40
|
+
- `persona.md` 缺失时跳过注入;文件位于 `$PERSONAL_DIR/persona.md`。通过 `ec agent persona show`、`ec agent persona --text <text>` 或 `ec agent persona --file <path>` 管理,修改后按 mtime 自动刷新(必要时可 `ec agent reload`)。
|
|
38
41
|
- 改完 persona.md 后 `ec agent reload` 生效(mtime 门控缓存)。
|
|
39
42
|
|
|
40
43
|
不同 AID 可以有不同 persona——切换身份即切换人格。
|
package/kits/rules/06-channel.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
- interactive:直接输出即回复
|
|
25
25
|
- proactive:通过托管发送通道正式回复,见 `[reply]` 段(thought.put vs message.send)
|
|
26
26
|
- **附加能力与模式无关、始终需要 CLI**:发文件/图片/语音、@某人、加密、联系第三方
|
|
27
|
-
- **以自己的 AID 为发送者**;拿不到时退回 `ec ctl send
|
|
27
|
+
- **以自己的 AID 为发送者**;拿不到时退回 `ec ctl send '<text>'`
|
|
28
28
|
|
|
29
29
|
### 命令返回值
|
|
30
30
|
|
|
@@ -33,16 +33,13 @@
|
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
# 写入新 note
|
|
36
|
-
ec memory note --slug <slug> [--tags <tag1
|
|
36
|
+
ec memory note --slug <slug> [--tags '<tag1>,<tag2>'] '<正文>'
|
|
37
37
|
|
|
38
38
|
# 修改已有 note
|
|
39
|
-
ec memory note
|
|
40
|
-
|
|
41
|
-
# 查看记忆概览
|
|
42
|
-
ec memory show
|
|
39
|
+
ec memory note update <slug> '<新正文>'
|
|
43
40
|
|
|
44
41
|
# 查看待整理 notes
|
|
45
|
-
ec memory
|
|
42
|
+
ec memory note list
|
|
46
43
|
|
|
47
44
|
# 触发整理会话(将 notes 归档为正式记忆)
|
|
48
45
|
ec memory consolidate
|
|
@@ -88,8 +85,8 @@ ec thread list <对方AID> --self <selfAid>
|
|
|
88
85
|
ec thread create <对方AID> --name "问题跟踪" --self <selfAid> # 返回 threadId
|
|
89
86
|
|
|
90
87
|
# 2. 带上话题发送;托管会话中 from/to 由话题推断,--check-every 必填
|
|
91
|
-
ec msg send
|
|
92
|
-
ec group send
|
|
88
|
+
ec msg send '<text>' --thread <threadId> --check-every 5m
|
|
89
|
+
ec group send '<text>' --thread <threadId> --check-every 5m # 群对端
|
|
93
90
|
```
|
|
94
91
|
|
|
95
92
|
- 不带 `--thread` 而直接把目标换成第三方,会被运行时拒绝(只能联系当前对端/群)
|
|
@@ -114,8 +111,8 @@ ec group send "<text>" --thread <threadId> --check-every 5m # 群对端
|
|
|
114
111
|
- 避免:日期、轮次序号、"话题会话"等占位词
|
|
115
112
|
|
|
116
113
|
```bash
|
|
117
|
-
ec thread rename current
|
|
118
|
-
ec thread rename <peer>/<threadId>
|
|
114
|
+
ec thread rename current '<新名称>' # 托管会话
|
|
115
|
+
ec thread rename <peer>/<threadId> '<新名称>' --self <selfAid> # 宿主终端
|
|
119
116
|
```
|
|
120
117
|
|
|
121
118
|
### 话题摘要维护
|
|
@@ -130,15 +127,15 @@ ec thread rename <peer>/<threadId> "<新名称>" --self <selfAid> # 宿主终
|
|
|
130
127
|
```bash
|
|
131
128
|
# 情形 A:就在当前话题里总结(对话在上下文,增量就是本轮对话,不用读历史)
|
|
132
129
|
ec thread summary show current # 1. 看上次摘要 + coveredThroughTs
|
|
133
|
-
ec thread summary set current
|
|
130
|
+
ec thread summary set current '<摘要内容>' --name '<新标题>' # 2. 写摘要 + 标题(--name 必填)
|
|
134
131
|
# 游标自动推进;不想改名就传 --name -
|
|
135
132
|
|
|
136
133
|
# 情形 B:从别的话题/别处总结(必须读增量)
|
|
137
134
|
ec thread summary show <peer>/<threadId> # 1. 拿 coveredThroughTs
|
|
138
135
|
ec thread history <peer>/<threadId> --after <coveredThroughTs> --limit 50 # 2. 读增量
|
|
139
136
|
ec thread history <peer>/<threadId> --before <最早ts-1> --limit 50 # 3. 增量多则往回翻页
|
|
140
|
-
ec thread summary set <peer>/<threadId>
|
|
141
|
-
ec thread rename <peer>/<threadId>
|
|
137
|
+
ec thread summary set <peer>/<threadId> '<摘要内容>' # 4. 读完再写(游标自动推进)
|
|
138
|
+
ec thread rename <peer>/<threadId> '<新名称>' # 5. 必要时改名
|
|
142
139
|
```
|
|
143
140
|
|
|
144
141
|
**关键约束**:`summary set` 把游标设为**当时话题的最新一条**,所以跨话题总结**必须先把增量读完再写**——
|
|
@@ -171,10 +168,10 @@ ec thread rename <peer>/<threadId> "<新名称>" # 5.
|
|
|
171
168
|
ec thread summary show current
|
|
172
169
|
|
|
173
170
|
# 写入摘要(单 agent)
|
|
174
|
-
ec thread summary set current
|
|
171
|
+
ec thread summary set current '<摘要内容>'
|
|
175
172
|
|
|
176
173
|
# 写入摘要(多 agent 协作,用 CAS 防覆盖)
|
|
177
|
-
ec thread summary set current
|
|
174
|
+
ec thread summary set current '<摘要内容>' --if-rev <当前rev>
|
|
178
175
|
|
|
179
176
|
# 查看摘要历史
|
|
180
177
|
ec thread summary log current
|
package/kits/schemas/_meta.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemas": {
|
|
3
3
|
"daemon": {
|
|
4
|
-
"currentVersion":
|
|
4
|
+
"currentVersion": 7
|
|
5
5
|
},
|
|
6
6
|
"defaults": {
|
|
7
7
|
"currentVersion": 5
|
|
@@ -26,6 +26,12 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"history": [
|
|
29
|
+
{
|
|
30
|
+
"schema": "daemon",
|
|
31
|
+
"version": 7,
|
|
32
|
+
"date": "2026-10-16",
|
|
33
|
+
"description": "add hot-reloadable delegated authorization diagnostic persistence switch"
|
|
34
|
+
},
|
|
29
35
|
{
|
|
30
36
|
"schema": "daemon",
|
|
31
37
|
"version": 1,
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"description": "允许同时属于 AgentOwner 与 daemonOwner 的直接私聊任务使用宿主级 fullaccess"
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
|
-
"description": "Agent
|
|
123
|
+
"description": "Agent 级宿主执行策略;已认证 EC Web 或目标 Agent 与 daemon 的双 Owner 直接 Menu 可设置,不从 defaults 或 relation 继承"
|
|
124
124
|
},
|
|
125
125
|
"access": {
|
|
126
126
|
"type": "object",
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "daemon.schema.7.json",
|
|
4
|
+
"title": "ProcessConfig v7 (daemon.json)",
|
|
5
|
+
"description": "进程级配置:daemon 自身运行配置,链外独立作用域,不进覆盖链。",
|
|
6
|
+
"x-logical-name": "daemon",
|
|
7
|
+
"x-scope": "process",
|
|
8
|
+
"type": "object",
|
|
9
|
+
"additionalProperties": false,
|
|
10
|
+
"properties": {
|
|
11
|
+
"$schema_version": { "type": "number", "const": 7, "default": 7, "x-merge": "scalar" },
|
|
12
|
+
"aid": { "type": "string", "description": "daemon 默认身份 AID", "x-merge": "scalar" },
|
|
13
|
+
"owners": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": { "type": "string" },
|
|
16
|
+
"description": "进程控制面鉴权名单(谁能远程管 daemon)",
|
|
17
|
+
"x-merge": "list"
|
|
18
|
+
},
|
|
19
|
+
"debug": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"description": "进程级调试配置;唯一合法来源为 daemon.json,不参与 Agent 覆盖链",
|
|
22
|
+
"x-merge": "dict",
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"properties": {
|
|
25
|
+
"logLevel": { "type": "string", "enum": ["DEBUG", "INFO", "WARN", "ERROR"], "description": "daemon 日志级别" },
|
|
26
|
+
"aunTrace": { "type": "boolean", "description": "是否记录 AUN 协议 trace" },
|
|
27
|
+
"aunSdkLog": { "type": "boolean", "description": "是否启用 AUN SDK 调试日志" },
|
|
28
|
+
"upmsg": { "type": "boolean", "description": "是否向 Agent owner 发送 daemon 上线通知" },
|
|
29
|
+
"eckSnapshots": { "type": "boolean", "default": false, "description": "是否写入可能包含敏感上下文的 ECK 旁路调试快照" }
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"tunnel": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"description": "内网穿透配置",
|
|
35
|
+
"x-merge": "dict",
|
|
36
|
+
"properties": {
|
|
37
|
+
"targets": { "type": "array", "description": "穿透目标列表", "items": { "type": "object" } }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"aun": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"description": "AUN 进程配置",
|
|
43
|
+
"x-merge": "dict",
|
|
44
|
+
"properties": {
|
|
45
|
+
"gatewayUrl": { "not": {}, "description": "已移除;网关由 fastaun 缓存和 AID discovery 决定" },
|
|
46
|
+
"defaultAidDomain": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$",
|
|
49
|
+
"description": "自动生成控制 AID 与 benchmark AID 使用的后缀域名;不影响已有 AID"
|
|
50
|
+
},
|
|
51
|
+
"minEvolVersion": { "type": "string", "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$", "description": "AUN Menu 允许的最低 Evol 客户端版本;省略时不限制" },
|
|
52
|
+
"menuTokenRequired": { "type": "boolean", "default": false, "description": "是否要求普通 AUN Menu 请求携带有效 menu_token;默认 false" },
|
|
53
|
+
"defaultEncrypt": { "type": "boolean", "description": "所有 daemon 管理的 AUN 通道共用的出站默认加密值;省略时为 true" }
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"services": {
|
|
57
|
+
"type": "array",
|
|
58
|
+
"description": "daemon 管理的本机服务及其可选 AUN 代理",
|
|
59
|
+
"x-merge": "list",
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"additionalProperties": false,
|
|
63
|
+
"required": ["name", "enabled"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"name": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"pattern": "^[a-z0-9_-]+$",
|
|
68
|
+
"description": "服务的逻辑标识,同时作为 AUN 代理路由名;ecweb 表示本机 EC Web 服务实例"
|
|
69
|
+
},
|
|
70
|
+
"enabled": { "type": "boolean", "default": true, "description": "是否启用本机服务实例" },
|
|
71
|
+
"port": { "type": "integer", "minimum": 1, "maximum": 65535, "description": "本机服务期望监听端口" },
|
|
72
|
+
"proxy": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"additionalProperties": false,
|
|
75
|
+
"allOf": [
|
|
76
|
+
{
|
|
77
|
+
"if": { "properties": { "enabled": { "const": true }, "source": { "const": "static" } }, "required": ["enabled", "source"] },
|
|
78
|
+
"then": { "required": ["endpoint", "visibility"] }
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"if": { "properties": { "enabled": { "const": true } }, "required": ["enabled"] },
|
|
82
|
+
"then": { "required": ["source", "visibility"] }
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"properties": {
|
|
86
|
+
"enabled": { "type": "boolean", "default": false, "description": "是否通过 AUN Service Proxy 暴露该服务" },
|
|
87
|
+
"source": { "type": "string", "enum": ["instance", "static"], "description": "instance 表示自动发现同名本机服务;static 使用 endpoint 显式回连" },
|
|
88
|
+
"endpoint": { "type": "string", "maxLength": 2048, "description": "source=static 时使用的本机 HTTP/HTTPS 或 WS/WSS 回连地址" },
|
|
89
|
+
"serviceType": { "type": "string", "enum": ["http", "websocket", "ssh"], "default": "http", "description": "AUN 中公布的服务类型" },
|
|
90
|
+
"visibility": { "type": "string", "enum": ["public", "private", "aun-auth"], "default": "private", "description": "AUN Service Proxy 访问策略" },
|
|
91
|
+
"metadata": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"description": "非敏感服务描述;不得包含 endpoint、token、secret、cookie 等敏感信息",
|
|
94
|
+
"additionalProperties": { "type": "string", "maxLength": 8192 }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"configSnapshots": { "type": "boolean", "default": true, "description": "是否自动维护配置快照、启动日志和自检回落", "x-merge": "scalar" },
|
|
102
|
+
"restartRecovery": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"description": "重启失败后的自动修复配置;仅控制 restart-monitor 的 Claude self-heal",
|
|
105
|
+
"x-merge": "dict",
|
|
106
|
+
"additionalProperties": false,
|
|
107
|
+
"properties": {
|
|
108
|
+
"enabled": { "type": "boolean", "default": false, "description": "是否在重启失败后执行 Claude 自动修复;默认关闭" }
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"delegationDiagnostics": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"description": "任务授权诊断持久化;仅用于排障,不恢复授权,事件保留 180 天、历史状态保留 90 天",
|
|
114
|
+
"x-merge": "dict",
|
|
115
|
+
"additionalProperties": false,
|
|
116
|
+
"properties": {
|
|
117
|
+
"enabled": { "type": "boolean", "default": true, "description": "是否持久化任务授权诊断;关闭后保留历史,内存诊断与权限校验不受影响,保存后热生效" }
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"idleMonitor": {
|
|
121
|
+
"type": "object",
|
|
122
|
+
"description": "流式输出空闲监控配置",
|
|
123
|
+
"x-merge": "dict",
|
|
124
|
+
"properties": {
|
|
125
|
+
"enabled": { "type": "boolean", "default": true, "description": "是否启用空闲监控" },
|
|
126
|
+
"timeout": { "type": "number", "default": 120, "description": "空闲超时秒数" },
|
|
127
|
+
"apiRetryTimeout": { "type": "number", "description": "API 重试尝试连续无事件时的超时秒数;未设置时继承 timeout" },
|
|
128
|
+
"maxExecutionTime": { "type": "number", "description": "单个任务总执行时限(秒);未配置、非数字或小于等于 0 表示不限制" }
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"watch": {
|
|
132
|
+
"type": "object",
|
|
133
|
+
"description": "日志监听配置",
|
|
134
|
+
"x-merge": "dict",
|
|
135
|
+
"properties": {
|
|
136
|
+
"logTypes": { "type": "array", "description": "要监听的日志类型", "items": { "type": "string" } }
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -39,13 +39,13 @@ license: MIT
|
|
|
39
39
|
命令语法只在此处完整写一遍,别处引用本节:
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
ec group send <selfAid> <groupId>
|
|
42
|
+
ec group send <selfAid> <groupId> '<text>' [选项]
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
| 选项 | 说明 |
|
|
46
46
|
|---|---|
|
|
47
47
|
| `--encrypt` / `--no-encrypt` | 必选一个,跟随收到消息的加密状态;不得省略后依赖默认 |
|
|
48
|
-
| `--mention <
|
|
48
|
+
| `--mention '<aid1>,<aid2>'` | @ 成员。写法固定为单引号包住、逗号分隔多个 aid,可重复传入 |
|
|
49
49
|
| `--mention-all` | @ 所有人 |
|
|
50
50
|
| `--file <path> [--as image\|video\|voice\|file]` | 发文件 |
|
|
51
51
|
| `--payload '<json>'` | 附加结构化数据 |
|
|
@@ -53,7 +53,7 @@ ec group send <selfAid> <groupId> "<text>" [选项]
|
|
|
53
53
|
其它硬约束(同见 `[reply]` 段):
|
|
54
54
|
|
|
55
55
|
- 一次 shell 调用只跑一条完整的 `ec` 命令,不拼接管道、重定向或子 shell。
|
|
56
|
-
-
|
|
56
|
+
- 正文一律用半角单引号包住;正文里的双引号、反引号和 `$` 前加反斜杠;半角撇号用 `ʼ`(U+02BC)或 `'`(U+FF07)代替。
|
|
57
57
|
- **正文必须以引号包住**。正文以 `/` 开头时尤其要注意——Git Bash 会把裸的 `/effort` 当成路径做 MSYS 转换,
|
|
58
58
|
实际发出去的是 `C:/Program Files/Git/effort`。这不是命令没生效,是正文被 shell 改了。
|
|
59
59
|
- 一轮任务可能发 0 到多条消息。发成功就继续做剩下的,不要重复发同一条。
|
|
@@ -211,7 +211,7 @@ ec group rules <selfAid> <groupId> get [--format json]
|
|
|
211
211
|
|
|
212
212
|
```bash
|
|
213
213
|
# 发消息(唯一完整语法在第二节)
|
|
214
|
-
ec group send <selfAid> <groupId>
|
|
214
|
+
ec group send <selfAid> <groupId> '<text>' [--encrypt|--no-encrypt] [--mention '<aid1>,<aid2>']
|
|
215
215
|
|
|
216
216
|
# 查上下文
|
|
217
217
|
ec group history <selfAid> <groupId> --limit 50 --format json
|
|
@@ -15,7 +15,7 @@ const USAGE = `ec skill —— EC 技能管理
|
|
|
15
15
|
用法:
|
|
16
16
|
ec skill list [--json] 列出所有技能
|
|
17
17
|
ec skill info <name> [--json] 查看单个技能详情
|
|
18
|
-
ec skill create <name> [--desc
|
|
18
|
+
ec skill create <name> [--desc '...'] [--force] [--enable]
|
|
19
19
|
新建技能骨架(默认禁用)
|
|
20
20
|
ec skill install <源> [--force] [--enable] 安装技能(目录 / .zip / .md,默认禁用)
|
|
21
21
|
ec skill remove <name> 删除本机技能
|
|
@@ -367,7 +367,7 @@ export function resolveSkillDirArg(target) {
|
|
|
367
367
|
|
|
368
368
|
export function cmdCreate(name, { desc = '', force = false, enable = false, json = false } = {}) {
|
|
369
369
|
assertPermission('local'); // 骨架固定建在本机级,与 install 同档
|
|
370
|
-
if (!name) throw new Error(
|
|
370
|
+
if (!name) throw new Error(`缺少技能名。用法:ec skill create <name> --desc '...'`);
|
|
371
371
|
if (!NAME_RE.test(name)) {
|
|
372
372
|
throw new Error(`技能名「${name}」不符合 kebab-case(小写字母/数字/连字符,如 my-skill)`);
|
|
373
373
|
}
|
|
@@ -63,9 +63,9 @@ ec memory archive <路径>
|
|
|
63
63
|
若干条超期记忆**单独每一条都不值得续期,但合起来值得留一条**时,产出一条合并版:
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
ec memory create --scope <本次会话的 scope> --slug <slug> --desc
|
|
66
|
+
ec memory create --scope <本次会话的 scope> --slug <slug> --desc '一句话描述' \
|
|
67
67
|
--tags <...> [--keywords <...>] \
|
|
68
|
-
--replaces
|
|
68
|
+
--replaces '<旧文件1>,<旧文件2>,...' \
|
|
69
69
|
"<合并后的完整内容>"
|
|
70
70
|
```
|
|
71
71
|
|