evolcore 0.0.32 → 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 +61 -0
- package/bin/ec.js +3 -2
- package/bin/install-codex-managed-hooks.mjs +135 -37
- package/dist/agents/baseagent-availability.js +20 -36
- package/dist/agents/claude-runner.js +111 -15
- package/dist/agents/codex/app-server-client.js +3 -0
- package/dist/agents/codex/diagnostics.js +112 -54
- package/dist/agents/codex-runner.js +241 -63
- package/dist/agents/ecagent-runner.js +78 -33
- package/dist/agents/runner-types.js +5 -6
- package/dist/aun/aid/identity.js +1 -1
- 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 +44 -8
- package/dist/channels/daemon.js +261 -3
- package/dist/cli/agent-command.js +58 -24
- package/dist/cli/agent.js +1 -1
- package/dist/cli/aun-commands.js +368 -31
- package/dist/cli/contact.js +8 -2
- package/dist/cli/ctl-command.js +3 -1
- package/dist/cli/daemon-commands.js +197 -27
- package/dist/cli/debug-mode.js +154 -0
- package/dist/cli/fs-command.js +2 -1
- package/dist/cli/handoff-command.js +3 -0
- package/dist/cli/index.js +98 -67
- package/dist/cli/init.js +2 -2
- package/dist/cli/integrity-command.js +196 -0
- package/dist/cli/managed-command-guard.js +5 -0
- package/dist/cli/memory-command.js +166 -146
- 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 +622 -0
- package/dist/cli/trigger-command.js +10 -3
- package/dist/config/builtin-roles.js +1 -0
- package/dist/config/config-field-policy.js +6 -3
- package/dist/config/config-manager.js +26 -2
- package/dist/config/contact-book-store.js +5 -0
- package/dist/config/resolved-config-op.js +3 -0
- package/dist/config/role-service.js +13 -0
- package/dist/config/runtime-env.js +16 -0
- package/dist/config-store.js +45 -0
- package/dist/core/audit/log-integrity.js +3 -1
- package/dist/core/auth/agent-delegation.js +133 -36
- package/dist/core/auth/debug-context.js +139 -0
- package/dist/core/auth/delegation-diagnostics.js +414 -0
- package/dist/core/auth/operation-authorizer.js +25 -2
- package/dist/core/auth/operation-catalog.js +49 -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/agent-control.js +18 -26
- package/dist/core/command/command-handler.js +197 -27
- package/dist/core/command/daemon-diagnostics.js +1 -0
- package/dist/core/command/memory-slash.js +6 -2
- package/dist/core/command/menu-catalog.js +51 -1
- package/dist/core/command/menu-handler.js +114 -23
- package/dist/core/command/menu-protocol.js +25 -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 +195 -13
- package/dist/core/command/topic-slash.js +528 -0
- package/dist/core/daemon-bootstrap.js +4 -7
- package/dist/core/evolagent-registry.js +20 -5
- package/dist/core/file-integrity/read.js +61 -0
- package/dist/core/file-integrity/store.js +262 -0
- package/dist/core/handoff/runtime.js +5 -11
- package/dist/core/handoff/store.js +5 -0
- package/dist/core/ipc-registration.js +175 -3
- package/dist/core/memory/batch-meta.js +132 -0
- package/dist/core/memory/consolidation-context.js +83 -29
- package/dist/core/memory/consolidation-ops-records.js +49 -16
- package/dist/core/memory/consolidation-queue-format.js +21 -0
- package/dist/core/memory/consolidation.js +264 -205
- 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/aun-ipc-sender.js +161 -6
- package/dist/core/message/im-renderer.js +169 -10
- package/dist/core/message/message-bridge.js +15 -4
- 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 +929 -110
- 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 +217 -9
- 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-idle-monitor.js +249 -22
- package/dist/core/session/session-manager.js +129 -14
- package/dist/core/skill/command-parser.js +13 -0
- package/dist/core/skill/index-generator.js +21 -4
- package/dist/core/skill/startup.js +41 -0
- package/dist/core/skill/switch-resolver.js +55 -29
- 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/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 +770 -0
- package/dist/core/thread/types.js +1 -0
- package/dist/eck/kit-renderer.js +7 -2
- package/dist/eck/manifest-engine.js +24 -4
- package/dist/eck/message-renderer.js +35 -0
- package/dist/index.js +19 -7
- package/dist/ipc.js +140 -50
- package/dist/paths.js +93 -0
- package/dist/response-system/engines/v1/proactive-flow.js +169 -80
- package/dist/stats/billing.js +20 -8
- package/dist/trigger/authorization.js +57 -28
- package/dist/trigger/feedback.js +13 -2
- package/dist/trigger/parser.js +70 -1
- package/dist/trigger/system-definitions.js +3 -3
- package/dist/trigger/validation.js +14 -0
- package/dist/utils/cross-platform.js +11 -2
- package/dist/utils/error-dict.json +18 -4
- package/dist/utils/error-utils.js +143 -1
- 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 +1 -1
- package/kits/docs/evolcore/INDEX.md +1 -0
- package/kits/docs/evolcore/agent-create.md +40 -28
- package/kits/docs/evolcore/agent.md +21 -6
- package/kits/docs/evolcore/config.md +2 -2
- package/kits/docs/evolcore/ctl.md +2 -2
- package/kits/docs/evolcore/ec-capabilities.md +5 -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 +4 -6
- package/kits/docs/evolcore/group.md +11 -12
- package/kits/docs/evolcore/memory-architecture.md +4 -5
- package/kits/docs/evolcore/memory-consolidation.md +19 -15
- package/kits/docs/evolcore/memory-tags.md +3 -1
- package/kits/docs/evolcore/memory.md +24 -12
- package/kits/docs/evolcore/menu-exec-schema-commands.md +2 -2
- package/kits/docs/evolcore/menu-protocol.md +7 -0
- package/kits/docs/evolcore/model.md +16 -0
- package/kits/docs/evolcore/msg.md +8 -11
- package/kits/docs/evolcore/thread-chain.md +267 -0
- package/kits/docs/prompt-loading-architecture.md +1 -1
- package/kits/eck_manifest.json +55 -40
- package/kits/eck_manifest.memory.json +0 -12
- package/kits/eck_message_manifest.json +169 -10
- package/kits/rules/01-overview.md +11 -0
- package/kits/rules/03-identity.md +6 -3
- package/kits/rules/05-venue.md +1 -1
- package/kits/rules/06-channel.md +1 -1
- package/kits/rules/07-memory-and-thread.md +199 -0
- 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/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 +16 -2
- package/kits/skills/ec-skill/scripts/skill.mjs +1 -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 +7 -2
- package/kits/templates/memory-consolidation/generalize.md +9 -4
- package/kits/templates/memory-consolidation/notes.md +11 -11
- package/kits/templates/memory-consolidation/profile.md +8 -3
- package/kits/templates/memory-consolidation/promote.md +8 -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/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 +67 -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/memory.md +16 -9
- package/kits/templates/system-fragments/reply.md +7 -6
- package/kits/templates/system-fragments/session.md +5 -14
- package/package.json +6 -3
- package/dist/core/memory/memory-session-policy.js +0 -41
- package/dist/core/memory/memory-signature.js +0 -257
- 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
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
│ │ ├─ 读上下文文件 │
|
|
24
24
|
│ │ ├─ 读候选记忆 │
|
|
25
25
|
│ │ ├─ create/update/archive
|
|
26
|
-
│ │ │ ├─
|
|
26
|
+
│ │ │ ├─ 登记
|
|
27
27
|
│ │ │ ├─ 日志落盘
|
|
28
28
|
│ │◄──── 会话结束 ───────────┤ │
|
|
29
29
|
│ onConsolidationComplete() │ │
|
|
@@ -63,24 +63,24 @@
|
|
|
63
63
|
|
|
64
64
|
## 三、三个写命令
|
|
65
65
|
|
|
66
|
-
整理会话只能用这三个命令写正式记忆。**不允许用 Write / Edit
|
|
66
|
+
整理会话只能用这三个命令写正式记忆。**不允许用 Write / Edit 直接写文件**——那会绕过完整性台账和索引,被当作带外修改恢复掉。
|
|
67
67
|
|
|
68
68
|
### create — 新建
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
ec memory create --scope <relation|agent|owner> --slug <slug> --desc
|
|
72
|
-
--tags <tag1
|
|
71
|
+
ec memory create --scope <relation|agent|owner> --slug <slug> --desc '一句话描述' \
|
|
72
|
+
--tags '<tag1>,<tag2>' [--keywords '<kw1>,<kw2>'] [--replaces '<路径1>,<路径2>'] '<正文>'
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
-
|
|
75
|
+
- 程序负责写入 `consolidated/`、登记完整性台账、重建索引。
|
|
76
76
|
- `--replaces` 指定的旧文件会被自动归档——**合并、纠正内容、升格作用域都走这条路径**,一次调用完成,不会出现「新的写了、旧的没归档」的重复记忆。
|
|
77
77
|
- **目标 slug 已存在且未在 `--replaces` 里列出 → 拒绝**,报错回传已有文件路径。这是防止漏用 `--replaces` 导致静默覆盖的闸门。
|
|
78
|
-
- **正文上限 10KB**,超出报 `MEMORY_TOO_LARGE
|
|
78
|
+
- **正文上限 10KB**,超出报 `MEMORY_TOO_LARGE`。这不是技术限制,而是记忆的性质决定的:一条记忆应当是**一句话能说清的结论**。内容确实那么多时,拆成多条分别 `create`,或把细节留在归档文件里、记忆只记结论。
|
|
79
79
|
|
|
80
80
|
### update — 只改标签
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
ec memory update <路径> --tags <tag1
|
|
83
|
+
ec memory update <路径> --tags '<tag1>,<tag2>' # 整体替换标签
|
|
84
84
|
ec memory update <路径> --touch # 刷新 mtime 与 updatedAt,用于续期
|
|
85
85
|
```
|
|
86
86
|
|
|
@@ -175,12 +175,17 @@ daemon 按整理会话的模式校验 `--scope`:
|
|
|
175
175
|
|
|
176
176
|
**能**:
|
|
177
177
|
|
|
178
|
-
- 用 Read / Glob / Grep
|
|
178
|
+
- 用 Read / Glob / Grep 读任务书、`processing/`、`consolidated/`、`MEMORY.md`、本对话流水。
|
|
179
179
|
- 用 Bash 执行**单条** `ec memory create` / `update` / `archive` 写正式记忆。
|
|
180
|
+
- 用 Write / Edit 写任务书里指定的**反馈文件**(`<batchDir>/scratch/feedback.txt`)。
|
|
181
|
+
这是本会话唯一可写的文件:其余任何路径(含同目录下的其他文件)都拒绝。
|
|
182
|
+
未写入则收尾时回退到默认统计模板(模式、触发方式、耗时、新建/更新/归档条数等)。
|
|
183
|
+
`scratch/` 是会话期临时工作区:收尾时读出反馈写入 `batch.md` 的 `feedbackText`,随后整个目录删除(不分成败)。
|
|
180
184
|
|
|
181
185
|
**不能**(程序拦截,提示「整理会话不允许执行此命令」):
|
|
182
186
|
|
|
183
|
-
- Write / Edit / MultiEdit / NotebookEdit(Codex
|
|
187
|
+
- Write / Edit / MultiEdit / NotebookEdit(Codex 的文件变更同理)写反馈文件以外的任何路径——直接写文件绕过完整性台账和索引。
|
|
188
|
+
- 经由 shell 写文件(`apply_patch`、重定向、`tee` 等):同一个入参在不同 runner 里的含义不同,无法证明它写的就是那个文件。
|
|
184
189
|
- 子代理(Agent / Task)、PowerShell——能绕开本策略。
|
|
185
190
|
- Bash 里的其他任何命令,包括 `ls`、`cat`、`npm`、`git`,以及 `ec memory note` / `ec memory consolidate`
|
|
186
191
|
(note 是主会话入口,用了会把结果变回原料;consolidate 会形成循环)。
|
|
@@ -194,7 +199,7 @@ daemon 按整理会话的模式校验 `--scope`:
|
|
|
194
199
|
|
|
195
200
|
- 逐一读取所有 consolidated 文件查重。先查 `MEMORY.md` 索引,只在发现高度相似的描述时才读那一条确认。
|
|
196
201
|
|
|
197
|
-
实现:`src/core/
|
|
202
|
+
实现:`src/core/system-session/memory.ts`,由 response-engine 在 `sessionType=memory` 的会话上挂为最终判定(`systemSessionCheck`);同一份声明(`grants()`:可读根 + 唯一可写文件)同时交给 runner 的沙箱 / 工具执行器,Claude / Codex / ecagent 三个 runner 共用,与角色体系无关。整理 trigger 不带 `permissionMode`,不会进入 fullaccess,策略不会被跳过。
|
|
198
203
|
|
|
199
204
|
---
|
|
200
205
|
|
|
@@ -206,13 +211,12 @@ daemon 按整理会话的模式校验 `--scope`:
|
|
|
206
211
|
├── pending/ # note 写入;整理前整体移到 processing/
|
|
207
212
|
│ └── archive/ # 被 drop 的 note
|
|
208
213
|
├── processing/ # 整理中快照
|
|
209
|
-
├── consolidated/ #
|
|
214
|
+
├── consolidated/ # 正式记忆(已登记完整性台账),文件名即 <slug>.md
|
|
210
215
|
└── archive/
|
|
211
|
-
|
|
212
|
-
└── invalid/ # 验签失败或未签名的文件
|
|
216
|
+
└── notes/ # 整理完成的 pending 原件
|
|
213
217
|
```
|
|
214
218
|
|
|
215
|
-
**索引**:每个作用域一份,上限 `memory.indexMaxBytes`(默认 5KB
|
|
219
|
+
**索引**:每个作用域一份,上限 `memory.indexMaxBytes`(默认 5KB)。重建时**逐份过完整性台账**:被带外修改的先恢复到最后登记的版本再进索引,被改动且无法恢复的跳过、不移动文件。筛选顺序:
|
|
216
220
|
|
|
217
221
|
1. `important`、`urgent`、`profile` 必进,**永不淘汰**
|
|
218
222
|
2. `in-progress`、`pending`、`blocked`
|
|
@@ -256,7 +260,7 @@ daemon 按整理会话的模式校验 `--scope`:
|
|
|
256
260
|
|
|
257
261
|
## 十、session.md 的注入
|
|
258
262
|
|
|
259
|
-
整理会话也加载 `$KITS_FRAGMENTS/session.md`,但其中的 proactive 行为约束(群聊要不要响应、首次调用工具前先发言、每 N 次调用汇报进展、`ec group send` / `ec msg send`
|
|
263
|
+
整理会话也加载 `$KITS_FRAGMENTS/session.md`,但其中的 proactive 行为约束(群聊要不要响应、首次调用工具前先发言、每 N 次调用汇报进展、`ec group send` / `ec msg send` 语法速查)**不会渲染**。
|
|
260
264
|
|
|
261
265
|
原因:整理会话由触发器创建,`peerType` 是 `system`、`chatType` 是 `private`。`resolveChatModeForPeer` 对 system 对端有硬约束,返回 `interactive`,而 proactive 那段的条件是 `{{?chatMode=proactive}}`,所以整块跳过。已实测确认。
|
|
262
266
|
|
|
@@ -53,7 +53,9 @@ tags: [important, long-term, rule, verified]
|
|
|
53
53
|
- 打上 `to-generalize` → 下次泛化模式会扫到它,评估能否升到 agent 级。
|
|
54
54
|
- 打上 `to-promote` → 下次提升模式会扫到它,评估能否升到 owner 级。
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
**打标的地方**:整理会话写正式记忆(`ec memory create --tags 'a,b'`,事后用 `ec memory update --tags 'a,b'` 整体替换),主会话写 note(`ec memory note --tags 'a,b'`)。note 的标签是临时的,整理会话读取后决定去留。
|
|
57
|
+
|
|
58
|
+
写法固定为单引号包住、逗号分隔:`--tags 'to-generalize,urgent'`。
|
|
57
59
|
|
|
58
60
|
**清标的两种方式**:
|
|
59
61
|
|
|
@@ -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
|
|
|
@@ -175,8 +175,8 @@
|
|
|
175
175
|
|
|
176
176
|
| 字段 | 类型 | 默认 | 作用 |
|
|
177
177
|
|---|---|---|---|
|
|
178
|
-
| `pre_tool_1stmsgchk` | boolean | `true` |
|
|
179
|
-
| `tool_use_reminder` | boolean | `true` |
|
|
178
|
+
| `pre_tool_1stmsgchk` | boolean | `true` | 意图表达门禁:每条新消息计数重置为 15,每轮结束后有意图表达成功则清零否则 +1。计数 = 15 时全部放行并提示下一轮要先表达意图,≥ 16 时只放行 ec msg/group send |
|
|
179
|
+
| `tool_use_reminder` | boolean | `true` | 意图表达门禁与队列提醒:开启意图表达门禁(规则同 pre_tool_1stmsgchk),同时保留队列未读提醒 |
|
|
180
180
|
|
|
181
181
|
- schema 里的 `default` 即**运行时出厂默认**——宿主组装 `modeConfig` 时先铺这层默认(`coordinator.schemaDefaults`),再叠用户显式桶值;flow 层不再硬编码默认。
|
|
182
182
|
- `chatmode` 本身**不在此桶**:它由宿主按对端类型解析后强制注入 `modeConfig.chatmode`,与「选哪个模式」正交。
|
|
@@ -119,6 +119,13 @@ Menu Protocol 是 EvolCore 在 AUN `message.send` 之上建立的**应用层协
|
|
|
119
119
|
}
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
+
`name="session"` 且 `args.resource="loop"` 时,`value` 必须是 JSON boolean:
|
|
123
|
+
`true` 开启当前可信主会话或话题的一次闲置触发,`false` 关闭;开启时可在
|
|
124
|
+
`args.idleSeconds` 指定 30–86400 的整数,省略时使用 300 秒。目标由当前关系和可信
|
|
125
|
+
`thread_id` 自动选择,不接受 `sessionId`、`threadId` 或跨关系目标;关闭时不能携带
|
|
126
|
+
`idleSeconds`。查询使用 `menu.query`、`name="session"`、`args.view="loop"`,返回值会标明
|
|
127
|
+
实际目标级别 `relation-main` 或 `topic-session` 及 `sessionId`。
|
|
128
|
+
|
|
122
129
|
### `menu.action`
|
|
123
130
|
|
|
124
131
|
触发动作类命令(如创建 agent、重启、生成配对码)。**不自动重试**。
|
|
@@ -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
|
-
ec msg send <from> <to> --text-from-file <path>
|
|
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>'
|
|
@@ -46,7 +46,6 @@ ec msg send <from> <to> --payload '<json>'
|
|
|
46
46
|
- `--encrypt` — 端到端加密
|
|
47
47
|
- `--no-encrypt` — 强制明文发送,优先于 `--encrypt`
|
|
48
48
|
- `--thread <id>` — 指定话题 ID(多话题路由)
|
|
49
|
-
- `--return <none|required>` — 跨会话发送必填;`none` 仅补充目标上下文,`required` 将回答回流来源。Trigger 任务只能使用 `none`
|
|
50
49
|
- `--content-type <mime>` — 显式覆盖 MIME(仅 `--file`)
|
|
51
50
|
- `--text <说>` — 附件说明文字(仅 `--file`)
|
|
52
51
|
- `--transcript <text>` — 语音转写(仅 `--as voice`)
|
|
@@ -68,9 +67,7 @@ ec contact unblock <target-aid> --self <self-aid>
|
|
|
68
67
|
|
|
69
68
|
非托管环境的 `ec msg send` 是独立 AUN CLI 发送,不读取或要求 `agents/<aid>/config.json`,因此不会触发这套 Agent 联系人准入判断。
|
|
70
69
|
|
|
71
|
-
在 EvolCore
|
|
72
|
-
默认只允许回复当前对端;从一个 agent 会话转发给第三个 agent 属于 relay 操作,可能因
|
|
73
|
-
`ownPeerOnly` 被拒绝。没有成功 JSON 回执(含 `message_id`/`status`)不得声称已发送。
|
|
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`)不得声称已发送。
|
|
74
71
|
|
|
75
72
|
成功输出:`✓ 已发送 <message_id> seq=<n> status=<status>`
|
|
76
73
|
|
|
@@ -166,6 +163,6 @@ ec msg history <self-aid> <target-aid> \
|
|
|
166
163
|
仅当无法使用 `ec msg send` 时(如拿不到自己的 AID),可用 `ec ctl send`,它自动继承当前会话的 AID 和对端:
|
|
167
164
|
|
|
168
165
|
```bash
|
|
169
|
-
ec ctl send
|
|
170
|
-
ec ctl send --encrypt
|
|
166
|
+
ec ctl send '<text>'
|
|
167
|
+
ec ctl send --encrypt '<text>'
|
|
171
168
|
```
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
# ec thread — 话题链命令
|
|
2
|
+
|
|
3
|
+
话题(Thread)是在私聊或群聊关系里切出的独立对话分支。一组对话可以同时推进多个话题,每个话题有自己的上下文、历史和生命周期,互不干扰。话题链(Thread Chain)则是跨会话、跨 agent 的协作机制:A 可以把一条任务"分支"到 B 的某个话题,B 也可以在自己的话题里继续工作,两者通过 `ec msg send --thread` 和 thread-inbox 上下文注入关联起来。
|
|
4
|
+
|
|
5
|
+
触发词:话题/thread/跨会话/委托/ec thread/话题链/summary/删除话题/thread-inbox/跨会话上下文。
|
|
6
|
+
|
|
7
|
+
## 标准工作流
|
|
8
|
+
|
|
9
|
+
话题是对端级别的操作,先找到 agent 和对端,再操作话题:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 第一步:列出本机所有 agent(找到目标 selfAid)
|
|
13
|
+
ec agent list
|
|
14
|
+
|
|
15
|
+
# 第二步:列出该 agent 有话题记录的所有对端
|
|
16
|
+
ec thread peers --self <selfAid>
|
|
17
|
+
|
|
18
|
+
# 第三步:列出与某对端的所有话题(默认每页10条)
|
|
19
|
+
ec thread list <peer> --self <selfAid>
|
|
20
|
+
|
|
21
|
+
# 第四步:翻页(页脚会给出完整翻页命令)
|
|
22
|
+
ec thread list <peer> --self <selfAid> --page 2 --limit 10 --sort recent
|
|
23
|
+
|
|
24
|
+
# 第五步:查看某话题的历史消息
|
|
25
|
+
ec thread history <peer>/<threadId> --self <selfAid> --limit 20
|
|
26
|
+
|
|
27
|
+
# 第六步:查看/写入 summary
|
|
28
|
+
ec thread summary show <peer>/<threadId> --self <selfAid>
|
|
29
|
+
# 写入时必须带 --name(同时设标题);不想改名传 -(详见「话题摘要」一节)
|
|
30
|
+
ec thread summary set <peer>/<threadId> '<摘要内容>' --name '<新标题>' --self <selfAid>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 什么时候用
|
|
34
|
+
|
|
35
|
+
- 同一对端有多条并行任务线(项目 A、项目 B 分开管理)
|
|
36
|
+
- 跨 agent 委托:A 向 B 发起一个话题,B 接收后在自己的话题里处理
|
|
37
|
+
- 需要给某段对话贴标签、跟踪状态(pending / in_progress / completed / archived)
|
|
38
|
+
- 想保存话题摘要(summary),供下次激活时快速恢复上下文
|
|
39
|
+
- 整理完成或废弃的话题时(删除话题)
|
|
40
|
+
|
|
41
|
+
主会话(主对话,无 threadId)不能删除。话题是主会话之外额外创建的分支。
|
|
42
|
+
|
|
43
|
+
## 基础操作
|
|
44
|
+
|
|
45
|
+
### 列出话题
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ec thread peers # 列出该 agent 有话题的所有对端
|
|
49
|
+
ec thread list <peer>
|
|
50
|
+
ec thread list <peer> --status in_progress
|
|
51
|
+
ec thread list <peer> --label 项目A
|
|
52
|
+
ec thread list <peer> --unlabeled
|
|
53
|
+
ec thread list <peer> --sort recent --limit 20
|
|
54
|
+
ec thread list <peer> --format json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`ec thread list` 必须带 `<peer>` 参数,不带 peer 会报错并提示用 `ec thread peers` 查找对端。每条话题显示消息(24h/总计)统计、最后一条消息截断(50字)和当前摘要(未设置时显示"未总结")。
|
|
58
|
+
|
|
59
|
+
### 查看话题详情
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
ec thread show <peer>/<threadId>
|
|
63
|
+
ec thread show current # 当前任务所在话题
|
|
64
|
+
ec thread show <peer> # 该对端的主会话
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 读取话题历史消息
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
ec thread history <peer>/<threadId>
|
|
71
|
+
ec thread history <peer>/<threadId> --limit 100
|
|
72
|
+
ec thread history <peer>/<threadId> --after 1700000000000
|
|
73
|
+
ec thread history <peer>/<threadId> --before 1700000000000
|
|
74
|
+
ec thread history <peer>/<threadId> --format json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
托管会话中可以直接用 `ec msg history --thread <id>`,from/to 会自动从运行时上下文推断:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
ec msg history --thread <threadId>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`ec thread history` 是推荐用法。
|
|
84
|
+
|
|
85
|
+
### 新建话题
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
ec thread create <peer> --name "项目A需求讨论"
|
|
89
|
+
ec thread create <peer> --name "项目A" --label 项目A --status in_progress
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
创建成功后返回 `threadId`,格式为 `thread-<ms>-<seq4>-<rand4>`(如 `thread-1791028341906-0000-136a`)。创建时会自动向对端发一条系统消息通知。
|
|
93
|
+
|
|
94
|
+
### 修改话题
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
ec thread rename <peer>/<threadId> "新名称"
|
|
98
|
+
ec thread label <peer>/<threadId> 重要
|
|
99
|
+
ec thread label <peer>/<threadId> --clear # 清除标签
|
|
100
|
+
ec thread status <peer>/<threadId> completed # pending|in_progress|completed|archived
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`/name` 和 `/rename` 也会同步更新话题索引。
|
|
104
|
+
|
|
105
|
+
### 删除话题
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
ec thread delete <peer>/<threadId> # 软删除:session 文件移入 _trash/,索引条目删除
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
删除后话题从索引中消失,`ec thread list` 不再显示。底层 session 文件通过 `unbindSession` 机制移入 `chatDir/_trash/`,与系统其他删除行为一致。不能删除正在处理中(busy)的话题,也不能删除主会话。
|
|
112
|
+
|
|
113
|
+
删除时会自动取消该话题的所有关联 Trigger,防止 ghost wakeup。
|
|
114
|
+
|
|
115
|
+
删除后历史仍可通过 `ec thread history <peer>/<threadId>` 读取(直接读 messages.jsonl,不依赖索引)。
|
|
116
|
+
|
|
117
|
+
## 跨会话发送(话题链核心)
|
|
118
|
+
|
|
119
|
+
在托管会话中,`ec msg send` 支持 `--thread` 参数直接路由到某个话题:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# 完整形式
|
|
123
|
+
ec msg send <from> <to> '<消息内容>' --thread <threadId>
|
|
124
|
+
|
|
125
|
+
# 托管会话简化形式(from/to 自动从运行时上下文推断)
|
|
126
|
+
ec msg send '<消息内容>' --thread <threadId>
|
|
127
|
+
|
|
128
|
+
# 附带复查 Trigger(跨话题时必填;每 30m 唤醒本端回查)
|
|
129
|
+
ec msg send '<消息内容>' --thread <threadId> --check-every 30m
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
注意事项:
|
|
133
|
+
|
|
134
|
+
- `--thread` 指定的话题必须已存在于本端索引(`ec thread list` 可见),否则返回 `TOPIC_NOT_FOUND`
|
|
135
|
+
- **跨话题发送时 `--check-every` 为必填项**,不指定会直接报错。取值如 `5m` / `30m` / `2h` / `1d`
|
|
136
|
+
- 跨话题发送成功后,系统会在**本端**写一条 thread-inbox 记录。目标话题下次被唤醒时,
|
|
137
|
+
这条记录会以「⟵ 跨会话上下文 · 来源话题:xxx」的形式注入一次,然后删除
|
|
138
|
+
- `--check-every` 会创建周期复查 Trigger(名称 `check-<目标>-from-<来源>-<唯一后缀>`,`kind=thread-check`),
|
|
139
|
+
每隔指定时长唤醒本端话题,提示回查目标话题与来源话题,直到显式
|
|
140
|
+
`ec trigger cancel <triggerId>` 结束。**每次发送都新建一个 Trigger**,取消/调整用
|
|
141
|
+
返回的 `trigger_id`(形如 `trig_…`)——`ec trigger` 的定位标识是 **id 不是名称**
|
|
142
|
+
- `--trigger-prompt "<text>"` 可选,用于替换复查 prompt 中的自定义段(默认给出通用的检查/决策指引)
|
|
143
|
+
|
|
144
|
+
### 跨会话委托的完整流程
|
|
145
|
+
|
|
146
|
+
**A 委托 B 处理某个任务:**
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# A 向 B 的话题 T2 发送任务,并设置周期复查
|
|
150
|
+
ec msg send "请处理项目A的数据清洗" --thread thread-T2-xxxx --check-every 2h
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**B 接收时感知来源上下文:**
|
|
154
|
+
|
|
155
|
+
B 的目标话题下次被唤醒时,prompt 开头会注入一条跨会话上下文,格式如下:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
‹跨会话上下文 · 来源话题:thread-T1-xxxx · 对端:alice.agentid.cn · 发送于:2026-10-10 10:00›
|
|
159
|
+
⚠️ 来源话题在发送后已有 3 条新消息(10:01 - 10:15)—— 处理前建议先回查该话题的空洞期消息。
|
|
160
|
+
🔔 复查 Trigger:trig_1791765199642_5371c8ff(尚未触发/待处理)
|
|
161
|
+
【原消息内容】
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
注入只发生一次。之后 B 靠自身上下文记住"我从哪个话题跨过来的",可随时用
|
|
165
|
+
`ec thread history <来源peer>/<来源话题>` 回查空洞期消息。
|
|
166
|
+
|
|
167
|
+
## 话题摘要(Summary)
|
|
168
|
+
|
|
169
|
+
摘要用于跨会话保留话题的核心信息,在下次激活或委托时快速恢复上下文。
|
|
170
|
+
daemon 不自动总结,需要 agent 主动写入。
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# 查看当前摘要(同时打印 coveredThroughTs 覆盖游标)
|
|
174
|
+
ec thread summary show <peer>/<threadId>
|
|
175
|
+
|
|
176
|
+
# 写入摘要 —— --name 必填:同时把话题改成这个标题
|
|
177
|
+
ec thread summary set <peer>/<threadId> "项目A需求已确认,正在开发登录模块" --name "项目A登录模块"
|
|
178
|
+
# 不想改话题名就显式传 -
|
|
179
|
+
ec thread summary set <peer>/<threadId> '<摘要内容>' --name -
|
|
180
|
+
|
|
181
|
+
# 支持 CAS(乐观锁),防止并发覆盖
|
|
182
|
+
ec thread summary set <peer>/<threadId> "新内容" --name - --if-rev 3
|
|
183
|
+
|
|
184
|
+
# 查看历史版本
|
|
185
|
+
ec thread summary log <peer>/<threadId>
|
|
186
|
+
|
|
187
|
+
# 清空当前摘要(历史版本保留)
|
|
188
|
+
ec thread summary clear <peer>/<threadId>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 覆盖游标与增量总结
|
|
192
|
+
|
|
193
|
+
`summary set` 会在写入时自动记录 `coveredThroughTs`——**当时该话题最后一条消息的时间戳**,
|
|
194
|
+
表示"这条摘要覆盖到哪"。`summary show` 会把它打印出来。
|
|
195
|
+
|
|
196
|
+
下次总结时用它作起点,只读增量(不必拍脑袋定 `--limit`):
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# 1. 拿覆盖游标
|
|
200
|
+
ec thread summary show <peer>/<threadId> # 输出中的 coveredThroughTs
|
|
201
|
+
|
|
202
|
+
# 2. 读游标之后的增量(首次总结无游标时省略 --after,全量读)
|
|
203
|
+
ec thread history <peer>/<threadId> --after <coveredThroughTs> --limit 50
|
|
204
|
+
|
|
205
|
+
# 3. 增量较多时往回翻页(history 支持 before 逆序分页)
|
|
206
|
+
ec thread history <peer>/<threadId> --before <本页最早一条的ts> --limit 50
|
|
207
|
+
|
|
208
|
+
# 4. 读完增量后写摘要,游标自动推进到当前最新一条
|
|
209
|
+
ec thread summary set <peer>/<threadId> "新摘要" --name -
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**约束**:`summary set` 把游标设为**写入时刻话题的最新一条**,所以跨话题总结必须**先把增量读完再写**——
|
|
213
|
+
没读完就写,游标会越过未读的那段,它们下次不会再被返回。
|
|
214
|
+
|
|
215
|
+
存储位置:`~/.evolcore/agents/<selfAid>/data/threads/summaries/<sessionId>.summary.jsonl`。
|
|
216
|
+
|
|
217
|
+
CAS 说明:`--if-rev <n>` 指定当前已知的版本号;若实际版本不匹配,写入失败并返回 `SUMMARY_CAS_CONFLICT`。先用 `show` 拿到当前 rev,再带上 `--if-rev` 写入,可防止并发覆盖。
|
|
218
|
+
|
|
219
|
+
## 重建索引
|
|
220
|
+
|
|
221
|
+
话题索引损坏或和 session 文件不同步时,可以重建。
|
|
222
|
+
|
|
223
|
+
索引与摘要、跨会话收件箱统一收在 `~/.evolcore/agents/<selfAid>/data/threads/` 下:
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
data/threads/
|
|
227
|
+
├── index.json 话题索引
|
|
228
|
+
├── summaries/ 话题摘要(<sessionId>.summary.jsonl)
|
|
229
|
+
└── inbox/ 跨会话上下文收件箱
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
ec thread rebuild-index
|
|
234
|
+
ec thread rebuild-index --agent <aid> # 跨身份操作
|
|
235
|
+
ec thread rebuild-index --check # 只检查不写盘
|
|
236
|
+
ec thread check-index # 同 rebuild-index --check
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## 引用格式(\<ref\>)
|
|
240
|
+
|
|
241
|
+
命令里的 `<ref>` 参数支持三种格式:
|
|
242
|
+
|
|
243
|
+
| 格式 | 含义 |
|
|
244
|
+
|---|---|
|
|
245
|
+
| `current` | 当前任务所在话题 |
|
|
246
|
+
| `<peer>` | 该对端的主会话 |
|
|
247
|
+
| `<peer>/<threadId>` | 指定话题,如 `bob.agentid.cn/thread-xxx-0001-aaaa` |
|
|
248
|
+
|
|
249
|
+
## 话题状态值
|
|
250
|
+
|
|
251
|
+
| 值 | 含义 |
|
|
252
|
+
|---|---|
|
|
253
|
+
| `pending` | 待开始(默认) |
|
|
254
|
+
| `in_progress` | 进行中 |
|
|
255
|
+
| `completed` | 已完成 |
|
|
256
|
+
| `archived` | 已归档 |
|
|
257
|
+
|
|
258
|
+
## 常见错误码
|
|
259
|
+
|
|
260
|
+
| 错误码 | 含义 | 处理建议 |
|
|
261
|
+
|---|---|---|
|
|
262
|
+
| `TOPIC_NOT_FOUND` | 话题不存在或 threadId 错误 | 用 `ec thread list <peer>` 确认 threadId |
|
|
263
|
+
| `TOPIC_CONFLICT` | 同名话题已存在 | 改名或用现有话题 |
|
|
264
|
+
| `TOPIC_BUSY` | 话题正在处理中 | 等待处理完成后再删除 |
|
|
265
|
+
| `SUMMARY_CAS_CONFLICT` | 摘要版本冲突 | 重新 `show` 获取最新 rev,再重试 |
|
|
266
|
+
| `INVALID_NAME` | 话题名称不合法 | 名称不能为空,不超过 80 字符 |
|
|
267
|
+
| `NAME_TOO_LONG` | 话题名称超过 80 字符 | 缩短名称 |
|
|
@@ -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` |
|
|
@@ -117,6 +116,7 @@
|
|
|
117
116
|
| 55 | commands | channel≠null | ✓ | 命令集能力卡 |
|
|
118
117
|
| 60 | session | always | ✓ | 会话层 fragment(含 localDate/weekday) |
|
|
119
118
|
| 70 | baseagent | baseAgent≠null | ✓ | base agent 配置 fragment |
|
|
119
|
+
| 80 | managed-runtime-notice | lifecycle=active | ✓ | 托管运行时提示(勿重复读 $KITS_RULES/ 与 CLAUDE.md 指令) |
|
|
120
120
|
|
|
121
121
|
### 输出结构
|
|
122
122
|
|