evolcore 0.0.26 → 0.0.27
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 +25 -0
- package/bin/codex-managed-acl.ps1 +43 -0
- package/dist/agents/baseagent-availability.js +68 -0
- package/dist/agents/claude-runner.js +123 -22
- package/dist/agents/codex/app-server-client.js +63 -26
- package/dist/agents/codex-runner.js +316 -411
- package/dist/agents/ecagent-runner.js +170 -25
- package/dist/agents/gemini-runner.js +6 -0
- package/dist/agents/runner-types.js +50 -2
- package/dist/aun/aid/agentmd.js +73 -31
- package/dist/aun/aid/client.js +1 -1
- package/dist/aun/aid/control-aid.js +180 -1
- package/dist/aun/aid/identity.js +3 -3
- package/dist/aun/group/history.js +303 -0
- package/dist/aun/group/identity.js +43 -0
- package/dist/aun/group/index.js +5 -0
- package/dist/aun/{msg/group.js → group/operations.js} +161 -38
- package/dist/aun/{menu-client.js → menu/client.js} +12 -7
- package/dist/aun/menu/index.js +2 -0
- package/dist/aun/menu/transport.js +49 -0
- package/dist/aun/msg/index.js +2 -1
- package/dist/aun/msg/managed-operation.js +84 -18
- package/dist/aun/msg/mention-schema.js +51 -0
- package/dist/aun/msg/p2p.js +13 -8
- package/dist/aun/msg/upload.js +43 -88
- package/dist/aun/outbox.js +29 -7
- package/dist/aun/rpc/client.js +1 -0
- package/dist/aun/storage/client.js +39 -50
- package/dist/channels/aun.js +522 -233
- package/dist/channels/daemon.js +10 -6
- package/dist/cli/agent-command.js +108 -6
- package/dist/cli/agent-create.js +515 -2
- package/dist/cli/agent.js +109 -8
- package/dist/cli/aun-commands.js +191 -42
- package/dist/cli/config.js +8 -5
- package/dist/cli/contact.js +2 -2
- package/dist/cli/ctl-command.js +2 -2
- package/dist/cli/daemon-commands.js +35 -23
- package/dist/cli/diag.js +2 -2
- package/dist/cli/fs-command.js +3 -3
- package/dist/cli/handoff-command.js +6 -6
- package/dist/cli/index.js +8 -2
- package/dist/cli/init.js +34 -1
- package/dist/cli/managed-command-guard.js +2 -1
- package/dist/cli/menu-client.js +9 -5
- package/dist/cli/model.js +3 -3
- package/dist/cli/queue-command.js +2 -2
- package/dist/cli/response.js +2 -2
- package/dist/cli/restart-monitor.js +16 -2
- package/dist/cli/task-command.js +59 -0
- package/dist/cli/task-context.js +97 -49
- package/dist/cli/trigger-command.js +20 -10
- package/dist/config/builtin-roles.js +10 -0
- package/dist/config/config-field-policy.js +11 -0
- package/dist/config/config-manager.js +32 -4
- package/dist/config/config-operation-service.js +20 -5
- package/dist/config/contact-book-store.js +1 -1
- package/dist/config/contact-book.js +1 -1
- package/dist/config/contact-operation-service.js +1 -1
- package/dist/config/peer-role-resolver.js +1 -1
- package/dist/config/resolved-config-op.js +3 -0
- package/dist/config-store.js +1 -1
- package/dist/core/agent-application-service.js +5 -0
- package/dist/core/audit/event-key.js +17 -2
- package/dist/core/audit/log-integrity.js +34 -8
- package/dist/core/auth/agent-delegation.js +48 -14
- package/dist/core/auth/auth-gateway.js +2 -0
- package/dist/core/auth/authorization-audit.js +34 -38
- package/dist/core/auth/operation-authorizer.js +67 -5
- package/dist/core/auth/operation-catalog.js +110 -0
- package/dist/core/auth/remote-access-store.js +115 -9
- package/dist/core/bootstrap-messages.js +66 -7
- package/dist/core/bootstrap-service.js +110 -19
- package/dist/core/command/agent-control.js +88 -7
- package/dist/core/command/agent-storage-menu.js +443 -0
- package/dist/core/command/cli-intent-parser.js +19 -0
- package/dist/core/command/command-handler.js +76 -39
- package/dist/core/command/data-root-resolver.js +273 -0
- package/dist/core/command/group-menu.js +7 -2
- package/dist/core/command/menu-catalog.js +34 -4
- package/dist/core/command/menu-handler.js +348 -77
- package/dist/core/command/menu-protocol.js +40 -6
- package/dist/core/command/role-menu.js +2 -2
- package/dist/core/command/slash-handler.js +37 -22
- package/dist/core/event-catalog.js +4 -0
- package/dist/core/evolagent-registry.js +28 -2
- package/dist/core/group/invite-service.js +924 -0
- package/dist/core/interaction-router.js +22 -8
- package/dist/core/message/im-renderer.js +76 -15
- package/dist/core/message/message-bridge.js +94 -11
- package/dist/core/message/message-log.js +5 -3
- package/dist/core/message/message-queue.js +73 -41
- package/dist/core/message/response-engine.js +709 -117
- package/dist/core/permission/approval-gateway.js +36 -3
- package/dist/core/permission/ec-command-parser.js +61 -29
- package/dist/core/permission/protected-paths.js +134 -16
- package/dist/core/permission/sandbox-runtime.js +72 -3
- package/dist/core/permission/tool-error-code.js +15 -0
- package/dist/core/permission/tool-policy.js +7 -7
- package/dist/core/relation/peer-identity.js +57 -6
- package/dist/core/relation/shared-data.js +106 -0
- package/dist/core/role/runtime-policy.js +64 -0
- package/dist/core/runtime-lock.js +10 -26
- package/dist/core/session/runner-task-history.js +170 -0
- package/dist/core/session/session-manager.js +34 -6
- package/dist/core/session/session-mapper.js +41 -0
- package/dist/core/session/session-turn-coordinator.js +37 -7
- package/dist/core/session/session-turns.js +48 -7
- package/dist/core/task/task-recovery-service.js +176 -0
- package/dist/core/task/task-resume-operation.js +32 -0
- package/dist/eck/group-rules-sync.js +5 -3
- package/dist/eck/kit-renderer.js +1 -0
- package/dist/index.js +308 -54
- package/dist/ipc.js +141 -15
- package/dist/paths.js +17 -4
- package/dist/product.js +2 -0
- package/dist/trigger/event-source.js +19 -0
- package/dist/trigger/feedback.js +233 -40
- package/dist/trigger/parser.js +55 -5
- package/dist/trigger/patch.js +9 -0
- package/dist/trigger/scheduler.js +30 -4
- package/dist/trigger/validation.js +20 -3
- package/dist/utils/ecweb-utils.js +1 -0
- package/dist/utils/error-utils.js +40 -2
- package/dist/utils/logger.js +23 -13
- package/dist/utils/tool-summary.js +59 -3
- package/dist/utils/welcome.js +174 -1
- package/ecagent/dist/harness/agent-harness.js +3 -0
- package/ecagent/dist/harness/session/jsonl-storage.js +21 -2
- package/kits/docs/INDEX.md +0 -6
- package/kits/docs/channels/aun.md +15 -2
- package/kits/docs/channels/feishu.md +1 -1
- package/kits/docs/context-assembly.md +29 -17
- package/kits/docs/evolcore/INDEX.md +8 -3
- package/kits/docs/evolcore/agent-create.md +39 -7
- package/kits/docs/evolcore/agent.md +33 -1
- package/kits/docs/evolcore/aid.md +9 -1
- package/kits/docs/evolcore/config.md +40 -1
- package/kits/docs/evolcore/group-collaboration.md +1 -1
- package/kits/docs/evolcore/group.md +117 -2
- package/kits/docs/evolcore/menu-client.md +16 -0
- package/kits/docs/evolcore/msg.md +3 -0
- package/kits/docs/evolcore/storage.md +3 -0
- package/kits/docs/evolcore/task.md +14 -0
- package/kits/docs/evolcore/trigger.md +51 -3
- package/kits/docs/venues/group.md +5 -0
- package/kits/eck_manifest.json +27 -0
- package/kits/rules/01-overview.md +11 -7
- package/kits/rules/04-relation.md +2 -1
- package/kits/rules/05-venue.md +1 -1
- package/kits/rules/06-channel.md +6 -4
- package/kits/schemas/agent-config.schema.12.json +25 -1
- package/kits/schemas/daemon.schema.6.json +2 -2
- package/kits/schemas/defaults.schema.5.json +1 -1
- package/kits/schemas/relation-config.schema.1.json +1 -1
- package/kits/schemas/relation-config.schema.5.json +1 -1
- package/kits/schemas/role-config.schema.1.json +14 -0
- package/kits/templates/roles/member.json +5 -0
- package/kits/templates/roles/visitor.json +5 -0
- package/kits/templates/system-fragments/baseagent.md +1 -1
- package/kits/templates/system-fragments/bootstrap.md +26 -9
- package/kits/templates/system-fragments/channel.md +8 -44
- package/kits/templates/system-fragments/commands.md +10 -2
- package/kits/templates/system-fragments/group-unread-history.md +7 -0
- package/kits/templates/system-fragments/reply.md +56 -0
- package/package.json +7 -3
- package/dist/aun/group-identity.js +0 -9
- /package/dist/aun/{group-fs-download.js → group/fs-download.js} +0 -0
- /package/dist/aun/{msg/group-index.js → group/index-rpc.js} +0 -0
|
@@ -24,7 +24,11 @@ ec menu-client request <from-aid> <daemon-aid> \
|
|
|
24
24
|
- 默认授权是远端 `daemon.json.owners` 对发送 AID 的校验。
|
|
25
25
|
- `--remote-token <token>` 使用 daemon 签发的远程访问 token,权限与 daemon-owner 一致。CLI 审计日志不会记录 token 明文。
|
|
26
26
|
- `system/paircode` 例外:仅接受加密的 daemon-owner 请求,已有 remote token 不能换取新配对码。
|
|
27
|
+
- 配对码有效期为 10 分钟,成功兑换一次即失效;并发兑换最多一次成功。再次获取会生成新码,已签发 token 不受影响。
|
|
28
|
+
- 未消费的码由各入口共享,重复获取不延长有效期。发放来源记录在运行时 `data/instance/control-access-tokens.json` 的 `pairingIssuances`:`host-cli` 为宿主机 CLI,`pair` 为 `/pair`,`menu` 为 AUN Menu,`ecweb-local` 为本地 ECWeb。`pair` / `menu` 同时记录已认证 daemon owner 的 `authorizedBy` AID;同一码经多个入口发放时保留全部不同来源与 owner,而不覆盖旧记录。
|
|
29
|
+
- 发放记录包含 `pairingId`、发放/到期时间、`issuers` 和成功兑换时间 `redeemedAt`,保留 30 天;不保存配对码或其哈希。成功兑换的 token 同时保存 `pairingId` / `pairingIssuers`,后续续期与 daemon 重启不丢失来源。旧 token 缺少来源时不补造历史。
|
|
27
30
|
- `--ecweb-token <token>` 是 `--remote-token` 的兼容别名。
|
|
31
|
+
- Menu 请求和响应使用 `message.send` 顶层 `ttl: 60`,接收响应时应支持 volatile 游标和无持久 `seq`;响应若带 `sender_device_id`,服务端会用 `to_device_id` 定向回原设备。
|
|
28
32
|
- `menu.query` / `menu.options` 等待响应超时时自动重发一次相同 request id;写操作不自动重试。
|
|
29
33
|
- 成功时 stdout 是完整 `menu.response` JSON。远端业务错误仍在响应的 `error` 字段中;本地传输/超时错误退出码非 0。独立终端的 ACK 错误也以非零退出码返回;托管模式由 daemon 的正常消费路径处理 ACK。
|
|
30
34
|
|
|
@@ -32,6 +36,8 @@ ec menu-client request <from-aid> <daemon-aid> \
|
|
|
32
36
|
|
|
33
37
|
```json
|
|
34
38
|
{"type":"menu.query","id":"status-1","name":"system","args":{"view":"status"}}
|
|
39
|
+
{"type":"menu.query","id":"baseagents-1","name":"baseagents"}
|
|
40
|
+
{"type":"menu.query","id":"subtasks-1","name":"session","args":{"view":"subtasks"}}
|
|
35
41
|
{"type":"menu.query","id":"monitor-1","name":"system","args":{"view":"monitor"}}
|
|
36
42
|
{"type":"menu.query","id":"logs-1","name":"system","args":{"view":"logs","source":"daemon","limit":200}}
|
|
37
43
|
{"type":"menu.action","id":"paircode-1","name":"system","action":"paircode"}
|
|
@@ -40,3 +46,13 @@ ec menu-client request <from-aid> <daemon-aid> \
|
|
|
40
46
|
```
|
|
41
47
|
|
|
42
48
|
先用 `menu.list` 的 `args.view=catalog`、`context.kind=process` 获取目标 daemon 实际支持的能力和 wire 参数,不要在适配器中另建一套协议字段。
|
|
49
|
+
|
|
50
|
+
`name=baseagents` 查询返回 `{ active, baseagents: [{ id, label, configured, detected, loaded, active, model, effort, version }] }`。
|
|
51
|
+
控制 AID / EC Web 沿用进程管理鉴权,返回 defaults 配置、主机检测、全局已加载 runner;
|
|
52
|
+
发往 Agent AID 时沿用 `agent.baseagent.list` 权限,仅返回当前 Agent 的配置及 runner,`detected=null` 表示未探测主机。
|
|
53
|
+
`menu.options name=baseagent` 仍只提供可切换的已加载后端。
|
|
54
|
+
|
|
55
|
+
子任务示例需发往目标 Agent 的会话;话题可用 `name=topic args={"target":"<threadId>","view":"subtasks"}`。
|
|
56
|
+
返回 `{ scope: "retained-history", tasks: [...] }`。普通 session/topic 状态另带 `subtasks`、`subtasksScope`;
|
|
57
|
+
`/status` 单列“已记录子任务数”,不把它加到主会话轮数中。历史来自现有 `events*.log`,
|
|
58
|
+
受 `EVENT_LOG` 开关和日志保留期限制(当前归档保留 48 小时);无记录不能据此推断从未执行过子任务。
|
|
@@ -49,6 +49,9 @@ ec msg send <from> <to> --payload '<json>'
|
|
|
49
49
|
- `--text <说>` — 附件说明文字(仅 `--file`)
|
|
50
50
|
- `--transcript <text>` — 语音转写(仅 `--as voice`)
|
|
51
51
|
|
|
52
|
+
未指定 `--content-type` 时,附件 MIME 由 SDK 按实际字节识别、后缀回退,附件描述沿用上传后的类型。
|
|
53
|
+
`--as` 控制消息展示类型,与 MIME 独立。
|
|
54
|
+
|
|
52
55
|
托管 Agent 通过 daemon 发送时,若发送方使用 `policyMode: contacts`,私聊普通出站只允许 Owner 或实际 `active` 联系人。无条目、`pending`、`declined` 会拒绝发送并提示:
|
|
53
56
|
|
|
54
57
|
```bash
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# ec task - 会话任务恢复
|
|
2
|
+
|
|
3
|
+
`ec task resume` 统一恢复暂停任务和基础设施异常中断任务。它定位已有会话并读取会话持久化的任务、路由、加密和 baseagent 绑定;恢复时继续原 provider 会话。
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
ec task resume <sessionId>
|
|
7
|
+
ec task resume <sessionId> --format json
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
暂停任务会释放原有的工具门控。异常中断任务会把内部恢复提示排入同一会话,并继续原 baseagent 会话。命令只确认恢复请求已被可靠接纳,不会等待模型运行结束。
|
|
11
|
+
|
|
12
|
+
以下情况会安全结束而不创建新会话:任务已完成或正在运行、任务等待必要输入/审批、会话已删除、原 provider 会话文件不存在、渠道不可用,或任务状态已被更新。
|
|
13
|
+
|
|
14
|
+
独立 CLI 必须通过 daemon 的本地 control token。托管任务使用当前任务 delegation token,并需要 Agent 管理权限;普通 Agent 只能恢复当前 Agent 的会话,daemon scope 才能恢复其它 Agent 的会话。
|
|
@@ -89,7 +89,7 @@ ec trigger update <triggerId> --prompt-file ./prompts/daily-summary-v2.md
|
|
|
89
89
|
|
|
90
90
|
这些来源互斥,只能指定一个。`--cron` 表达式必须加引号,避免被 shell 拆成多个参数。`--every` 是固定间隔,`--cron` 是日历调度。`--once` 创建后立即进入一次 run,完成后自动禁用。
|
|
91
91
|
|
|
92
|
-
`--event` 基于 EventBus 事件触发,事件模式支持精确事件名、命名空间前缀和全量:`message:received`、`message
|
|
92
|
+
`--event` 基于 EventBus 事件触发,事件模式支持精确事件名、命名空间前缀和全量:`message:received`、`message:*`、`*`。创建时可用 `--event-filter <JSON>` 设置事件过滤条件,例如 `--event-filter '{"match":{"sessionId":"meta-1"}}'`;它仅可与 `--event` 一起使用,对应 Trigger V3 定义的 `source.filter`。事件清单、payload 字段和过滤操作见 `$KITS_DOCS/evolcore/event.md`。
|
|
93
93
|
|
|
94
94
|
## 执行类型
|
|
95
95
|
|
|
@@ -103,6 +103,12 @@ Trigger V3 第二阶段使用 `execution.type` 区分执行位置:
|
|
|
103
103
|
|
|
104
104
|
`target-session` 把 `--prompt` 或 `--prompt-file` 的内容当作一条 trigger 来源消息投递进目标会话队列,并等待该会话处理完成。创建时必须显式指定 `--exec target-session`,不会再隐式选择该类型。
|
|
105
105
|
|
|
106
|
+
`target-session` 在主会话/话题会话执行时,默认没有额外的总执行时限,沿用普通任务的 idle watchdog 和 `idleMonitor.maxExecutionTime`;不会因运行超过 30 分钟或 4 小时而被 Trigger 强制结束。独立 `trigger-session` 默认每次 attempt 的总时限为 30 分钟。两者均可用 `--execution-timeout 2h`(definition 中为 `execution.timeoutMs`,毫秒正整数)显式设置,已有的全局任务时限仍可更早生效。`update --execution-timeout default` 清除单个 Trigger 的覆盖;script 继续使用 `--script-timeout`。
|
|
107
|
+
|
|
108
|
+
目标会话每 30 秒核对一次具体 attempt 的队列、runner 与持久化终态。正常运行、排队、暂停及等待审批/回答不会仅因没有文本输出被清理;确认执行状态缺失并持续至少 120 秒后,按 `orphaned_target_session` 失败收尾。丢失的终态事件优先从持久化任务状态补齐。会话查找/创建另有 30 秒基础设施时限,不计为任务执行超时。
|
|
109
|
+
|
|
110
|
+
执行超时发送 `status.timeout` 与 `result.error`;执行状态丢失发送 `status.error` 与 `result.error`。两者都保留任务关联和原因,不映射为消息撤回。`SDK_TIMEOUT` 立即结束当前 attempt,后续是否重试遵循 `onError` 和 `reliability.retry`,每个 attempt 独立计算显式时限。
|
|
111
|
+
|
|
106
112
|
`trigger-session` 在 daemon 内部 trigger 会话执行 prompt,再把最终结果按 feedback 投递;prompt 可来自 `--prompt` 或 `--prompt-file`:
|
|
107
113
|
|
|
108
114
|
```bash
|
|
@@ -236,7 +242,7 @@ ec trigger rm <triggerId> # delete 的兼容别名
|
|
|
236
242
|
|
|
237
243
|
`update` 是 patch 语义,只提交需要修改的字段;未指定字段(包括长 prompt)保持不变。`--prompt-file <path>` 只更新非 script trigger 的 prompt,不接受完整 definition。已有 script trigger 使用 `--script-file <path>` 原地替换脚本内容;脚本路径、runtime、args 和调度配置保持不变:
|
|
238
244
|
|
|
239
|
-
`--script-file` 只能通过本机受控 CLI 读取文件并提交给 daemon;脚本 trigger 属于 daemon-owner 控制面,managed Agent task
|
|
245
|
+
`--script-file` 只能通过本机受控 CLI 读取文件并提交给 daemon;脚本 trigger 属于 daemon-owner 控制面,managed Agent task 不能直接读取本地脚本文件。主机 fullaccess 开关缺失时默认开启;Agent 级 `fullaccess.enabled` 不会自动升级 Trigger,Trigger 仍按自身 execution.permissionMode 规则执行。
|
|
240
246
|
|
|
241
247
|
```bash
|
|
242
248
|
ec trigger update <triggerId> --cron '0 10 * * *'
|
|
@@ -431,6 +437,48 @@ ec trigger create --exec script --file ./trigger-dir --enable
|
|
|
431
437
|
|
|
432
438
|
## 事件触发
|
|
433
439
|
|
|
440
|
+
### 任务异常恢复到原会话
|
|
441
|
+
|
|
442
|
+
`task:error` 可以直接把恢复请求路由到产生异常的原始会话,不需要通过 `ec msg send` 发送模拟的“继续”消息。`target_session` 执行类型配合 `event_session` feedback 时,daemon 从事件中的 `sessionId` 查找原会话,并复用其持久化的 baseagent/provider 会话。
|
|
443
|
+
|
|
444
|
+
daemon 启动时会自动维护一个名为 `__task-recovery` 的系统 Trigger。这里的事件名仍然是 `task:error`;开头的 `__` 只表示 Trigger 的 ID/name 属于 EvolCore daemon 的系统定义,和 `__upgrade-check` 使用同一命名约定,不是事件命名空间。该 Trigger 的 daemon scope 覆盖同一 EvolCore daemon 管理的所有本机 Agent,跨 daemon 或远程 Agent 不在范围内。
|
|
445
|
+
|
|
446
|
+
系统 Trigger 直接调用内部 task recovery service,复用异常任务的原 `sessionId`、Agent AID、provider 会话、task generation 及原对话路由。它不会发送一条伪造的“继续”消息,不创建替代会话,也不会因为 daemon-owned 而把目标 Agent 的普通会话权限提升为操作系统权限。手动 `/resume` 和 `ec task resume <sessionId>` 仍然是同一恢复入口的人工调用方式。
|
|
447
|
+
|
|
448
|
+
下面的 Trigger 覆盖当前 Agent 的所有会话;`agentAid` 过滤避免其它 Agent 的事件进入本 Trigger,`originTriggerId` 排除自身产生的恢复错误,避免递归触发:
|
|
449
|
+
|
|
450
|
+
```json
|
|
451
|
+
{
|
|
452
|
+
"$schema_version": 3.1,
|
|
453
|
+
"agentAid": "<aid>",
|
|
454
|
+
"enabled": true,
|
|
455
|
+
"name": "resume-task-on-error",
|
|
456
|
+
"source": {
|
|
457
|
+
"type": "event",
|
|
458
|
+
"eventPattern": "task:error",
|
|
459
|
+
"filter": {
|
|
460
|
+
"match": {
|
|
461
|
+
"agentAid": "<aid>",
|
|
462
|
+
"originTriggerId": { "$exists": false }
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
"execution": {
|
|
467
|
+
"type": "target_session",
|
|
468
|
+
"prompt": "继续未完成任务",
|
|
469
|
+
"onError": "retry"
|
|
470
|
+
},
|
|
471
|
+
"feedback": { "strategy": "event_session" },
|
|
472
|
+
"reliability": {
|
|
473
|
+
"concurrency": "forbid",
|
|
474
|
+
"missedPolicy": "run_once",
|
|
475
|
+
"retry": { "maxAttempts": 2, "backoffMs": 30000 }
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
`event_session` 会保留原会话的私聊/群聊、thread、对端身份和加密状态;找不到会话、会话已删除、原 provider 会话缺失或任务已正常完成时会失败关闭,不创建替代会话,也不会回退成普通消息投递。
|
|
481
|
+
|
|
434
482
|
简单事件触发可直接用 flag 模式:
|
|
435
483
|
|
|
436
484
|
```bash
|
|
@@ -453,7 +501,7 @@ ec trigger create --event 'task:*' \
|
|
|
453
501
|
--name on-task-events --enable
|
|
454
502
|
```
|
|
455
503
|
|
|
456
|
-
|
|
504
|
+
需要根据事件 payload 过滤时,可在上述创建命令中加入 `--event-filter '{"match":{"sessionId":"meta-1"}}'`。过滤条件仅支持创建时配置,`update` 不接受 `--event-filter`。完整的 Trigger V3 第二阶段 JSON 也支持同样的过滤条件:
|
|
457
505
|
|
|
458
506
|
```json
|
|
459
507
|
{
|
|
@@ -24,6 +24,11 @@ AUN 群聊的命令查询、成功与进度反馈使用 `notice`,命令拒绝
|
|
|
24
24
|
|
|
25
25
|
## 可按需查询的群数据
|
|
26
26
|
|
|
27
|
+
AUN 的提及模式会保留未被 @ 的会话消息。需要补充背景时使用
|
|
28
|
+
`ec group history <self-aid> <group-id> --unread --format json`;
|
|
29
|
+
查询与自动记录已读遵循专用 `group-unread-history` 片段及群命令文档。
|
|
30
|
+
历史读取不会触发对其中每一条消息的回复。
|
|
31
|
+
|
|
27
32
|
群结构信息(成员名单、各成员角色、群主、管理员、在线状态等)**不预先注入上下文**,
|
|
28
33
|
需要时用 `ec group` 自行查询(完整用法 Read `$KITS_DOCS/evolcore/group.md`):
|
|
29
34
|
|
package/kits/eck_manifest.json
CHANGED
|
@@ -139,6 +139,21 @@
|
|
|
139
139
|
] },
|
|
140
140
|
"description": "渠道+场景文档(如 feishu-group)"
|
|
141
141
|
},
|
|
142
|
+
{
|
|
143
|
+
"id": "group-unread-history",
|
|
144
|
+
"type": "file",
|
|
145
|
+
"file": "$KITS_FRAGMENTS/group-unread-history.md",
|
|
146
|
+
"order": 42.5,
|
|
147
|
+
"needsInjection": true,
|
|
148
|
+
"when": { "and": [
|
|
149
|
+
{ "var": "channel", "eq": "aun" },
|
|
150
|
+
{ "var": "chatType", "eq": "group" },
|
|
151
|
+
{ "var": "mentionMode", "eq": "mention-only" },
|
|
152
|
+
{ "var": "groupHistoryAvailable", "eq": true },
|
|
153
|
+
{ "var": "lifecycle", "eq": "active" }
|
|
154
|
+
] },
|
|
155
|
+
"description": "mention-only 群聊的本地未读历史读取指引"
|
|
156
|
+
},
|
|
142
157
|
{
|
|
143
158
|
"id": "relation-group-rules",
|
|
144
159
|
"type": "file",
|
|
@@ -163,6 +178,18 @@
|
|
|
163
178
|
] },
|
|
164
179
|
"description": "客户端环境文档"
|
|
165
180
|
},
|
|
181
|
+
{
|
|
182
|
+
"id": "reply-contract",
|
|
183
|
+
"type": "file",
|
|
184
|
+
"file": "$KITS_FRAGMENTS/reply.md",
|
|
185
|
+
"order": 49,
|
|
186
|
+
"needsInjection": true,
|
|
187
|
+
"when": { "and": [
|
|
188
|
+
{ "var": "channel", "neq": null },
|
|
189
|
+
{ "var": "lifecycle", "in": ["active", "bootstrapping"] }
|
|
190
|
+
] },
|
|
191
|
+
"description": "共用回复规则:当前模式、目标及托管发送边界"
|
|
192
|
+
},
|
|
166
193
|
{
|
|
167
194
|
"id": "channel-layer",
|
|
168
195
|
"type": "file",
|
|
@@ -4,13 +4,13 @@ ECK 的总览:前置概念和框架结构。
|
|
|
4
4
|
|
|
5
5
|
## Base Agent
|
|
6
6
|
|
|
7
|
-
Base agent
|
|
7
|
+
Base agent 是提供推理与生成能力的底层智能,规范值有 `claude`(Claude Code)、`codex`(Codex)、`gemini`(Gemini CLI)、`ecagent`(EvolCore 内置基座)四类。你就是当前会话的 base agent;具体是哪一类以 `[baseagent]` 段注入的 `baseAgentName` 为准,不要默认自己是 Claude Code。
|
|
8
8
|
|
|
9
9
|
### 外部 Coding Agent Skills 边界
|
|
10
10
|
|
|
11
11
|
当前会话由 EvolCore 托管时,不加载、不读取、不执行工作区之外的 coding-agent `SKILL.md`,包括
|
|
12
12
|
`/home/evolcore/skills/eclink/SKILL.md`。该类 skill 只服务于独立运行、未接入 EvolCore 会话上下文的
|
|
13
|
-
Codex/Claude Code
|
|
13
|
+
Codex/Claude Code 等独立工具实例。EvolCore 会话必须遵循本 ECK、daemon IPC 和渠道适配层提供的通信与权限路径。
|
|
14
14
|
|
|
15
15
|
尤其不要在 EvolCore 会话中因为看到 AUN/agent 间通信需求,就自行读取 `eclink` skill 或直接拼接 shell
|
|
16
16
|
命令调用 `ec`;发送必须经过当前会话的 delegated sender,以便锁定 self/peer、角色、审计和回执。
|
|
@@ -37,14 +37,18 @@ AID(Agent Identifier)是主体在 AUN 网络中的唯一身份标识,格
|
|
|
37
37
|
|
|
38
38
|
核心字段:`aid`、`name`(显示名)、`type`、`description`(一句话简介)、`avatar`、`tags`、`visibility`(public/unlisted/private)、`skills`。
|
|
39
39
|
|
|
40
|
-
`type`
|
|
40
|
+
`type` 是可扩展字符串。EvolCore 内置以下常用类型;它们都持有 AID、都能通过 AUN 向你发消息,
|
|
41
|
+
对你而言**都是对端**:
|
|
41
42
|
|
|
42
43
|
| type | 含义 |
|
|
43
44
|
|------|------|
|
|
44
45
|
| `human` | 人类 |
|
|
45
|
-
| `agent` |
|
|
46
|
+
| `agent` | 会用到大模型且没有专用主体类型的服务程序(agent.md 里可写 `Claude Code`/`Codex`/`Gemini CLI`/`ecagent` 等具体 base agent 名) |
|
|
46
47
|
| `group` | 群服务(群本身也有 AID,是一类对端) |
|
|
47
48
|
| `service` | 有 AID 但不使用大模型的服务程序 |
|
|
49
|
+
| `device` | 设备或嵌入式节点 |
|
|
50
|
+
| `org` | 组织主体 |
|
|
51
|
+
| `host` | EvolCore 控制主机的 daemon AID;名称通常为 `<Win/Linux/MacOS>主机-<aid前缀>` |
|
|
48
52
|
|
|
49
53
|
> **群属于关系层**:`group` 是对端的一种,具体群实例的数据与其它对端一样落关系层
|
|
50
54
|
> `$RELATIONS_DIR/<peerKey>/`(见 `04-relation.md`),不落环境层。
|
|
@@ -83,7 +87,7 @@ AUN 把 agent 当网络主体(具备社会人属性:身份/通信/自主),
|
|
|
83
87
|
Evol 前端 EvolCore
|
|
84
88
|
(App/Web/Desktop) Channel 适配层(AUN/飞书/微信/...)
|
|
85
89
|
或其它 AUN 客户端 身份层 / 关系层 / 环境层 / 渠道层 / 会话层
|
|
86
|
-
Base Agent(
|
|
90
|
+
Base Agent(claude / codex / gemini / ecagent)
|
|
87
91
|
|
|
88
92
|
```
|
|
89
93
|
|
|
@@ -138,9 +142,9 @@ evolcore 收到每条消息时,由**声明式 manifest** 决定加载哪些上
|
|
|
138
142
|
| coding(无渠道) | active 时为 rules + 会话层 + baseagent(身份/关系/环境/渠道层因无 channel、无身份而落选) |
|
|
139
143
|
| private(私聊) | rules + 身份层(含 preferences)+ 关系层(对端)+ 环境层 + 渠道层 + 会话层 + baseagent |
|
|
140
144
|
| group(群聊) | rules + 身份层(**无 preferences**)+ 关系层(群)+ 环境层 + 渠道层 + 会话层 + baseagent |
|
|
141
|
-
| bootstrapping |
|
|
145
|
+
| bootstrapping | bootstrap 引导 + 有渠道时的共用回复规则 `[reply]`(含最小身份、目标、chatMode);不加载 rules、完整身份/关系/环境/渠道能力、会话、baseagent 或 commands 段 |
|
|
142
146
|
|
|
143
|
-
>
|
|
147
|
+
> 共用 `reply-contract` 在有渠道且 `lifecycle∈{active,bootstrapping}` 时加载;其余常规段(包括 rules、session、baseagent)都要求 `lifecycle=active`。生命周期缺失按 `active` 处理;非法时,
|
|
144
148
|
> Manifest 不加载任何常规段;agent-owned turn 也不会直接落入普通 runner。
|
|
145
149
|
|
|
146
150
|
三份 manifest 各管一段:`kits/eck_manifest.json`(system prompt 默认)、
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
关系层管理你对所有对端的认知。动态注入的 `peerKey`(`<channel>#<urlEncode(peerId)>`)是对端在所有渠道中的稳定标识。`peerId` 是对端在当前渠道的原生 ID(AUN 是 AID,飞书是 user_id 等),`channel` 是当前渠道类型。
|
|
4
4
|
|
|
5
|
-
**对端包括群**:AID
|
|
5
|
+
**对端包括群**:AID 类型(human/agent/group/service/device/org/host,见 `01-overview.md`)
|
|
6
|
+
对你而言都是对端,数据都在关系层。
|
|
6
7
|
- 私聊:`peerId` = 对端 ID,`peerKey` = `<channel>#<对端ID>`。
|
|
7
8
|
- 群聊:`peerId` = **群 ID**(群本身的 AID / 渠道群 ID),群内所有发言者共用同一个 `peerKey`(群的键)。群规则、群 profile 等**具体群实例数据**落 `$RELATIONS_DIR/<peerKey>/`(如群规则物化到 `relations/<peerKey>/rules.md`)。
|
|
8
9
|
|
package/kits/rules/05-venue.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
| coding | `chatType = null` 且 `lifecycle = active` | rules + 会话层 + baseagent | 本地模式,每条消息都响应 |
|
|
20
20
|
| private | `chatType = private` 且 `lifecycle = active` | 上述 + 身份层(含 persona/working-memory/**preferences**)+ 关系层(对端 profile)+ 环境层 + 渠道层 + commands | 自主模式,回复方式随 `chatMode` |
|
|
21
21
|
| group | `chatType = group` 且 `lifecycle = active` | 同 private,但**无 preferences**;`groupId` 有值加群 profile,`groupRulesPath` 有值加群规则 | 自主模式,`mentionMode` 决定是否响应 |
|
|
22
|
-
| bootstrapping | `lifecycle = bootstrapping` |
|
|
22
|
+
| bootstrapping | `lifecycle = bootstrapping` | bootstrap 引导 + 有渠道时的 `[reply]` 最小通信上下文,其余常规段落选 | 仅推进首次设定,回复方式随实际 `chatMode` |
|
|
23
23
|
|
|
24
24
|
> coding 场景在 agent `active` 时加载 `session` 与 `baseagent`;生命周期缺失按 `active` 处理,非法时按 fail-closed 处理。
|
|
25
25
|
|
package/kits/rules/06-channel.md
CHANGED
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
## 通信规则
|
|
18
18
|
|
|
19
|
-
"当前这一刻怎么回复、怎么发消息"由动态注入的 `[
|
|
20
|
-
|
|
19
|
+
"当前这一刻怎么回复、怎么发消息"由动态注入的 `[reply]` 段决定——它展示运行时解析的 `chatMode`
|
|
20
|
+
并按模式分流,是 Bootstrap 与 active 共用的回复规则。`[channel]` 仅在 active 阶段补充文件、链接、@ 等扩展能力。本节只讲**模式无关的恒定知识**。
|
|
21
21
|
|
|
22
22
|
要点:
|
|
23
|
-
-
|
|
23
|
+
- **回复方式随实际 `chatMode` 走**,以 `[reply]` 段为准,不按对端类型或是否私聊推断:
|
|
24
24
|
- interactive:直接输出即回复
|
|
25
|
-
- proactive
|
|
25
|
+
- proactive:通过托管发送通道正式回复,见 `[reply]` 段(thought.put vs message.send)
|
|
26
26
|
- **附加能力与模式无关、始终需要 CLI**:发文件/图片/语音、@某人、加密、联系第三方
|
|
27
27
|
- **以自己的 AID 为发送者**;拿不到时退回 `ec ctl send "<text>"`
|
|
28
28
|
|
|
@@ -45,6 +45,8 @@
|
|
|
45
45
|
**完整命令集目录(含分类、触发词、适用场景)**:`$KITS_DOCS/evolcore/INDEX.md`。
|
|
46
46
|
单个命令集的详细用法按需 Read 对应文档。
|
|
47
47
|
|
|
48
|
+
托管 Agent 任务禁止调用 `ec start`、`ec stop`、`ec restart` 或 `ec restart-monitor`。这些是宿主终端的进程生命周期命令;源码改动后 Agent 只负责构建并报告需要宿主重启,不得尝试、重试或建议 Agent 自己执行 `ec restart`。
|
|
49
|
+
|
|
48
50
|
共同约定:
|
|
49
51
|
- 以自己的 AID 为发送者
|
|
50
52
|
- 回复方式随 `chatMode` 走(见上方通信规则);附加能力(文件/@/加密/发第三方)任何模式下都用 CLI
|
|
@@ -75,6 +75,17 @@
|
|
|
75
75
|
"active": "已激活,正常运行"
|
|
76
76
|
}
|
|
77
77
|
},
|
|
78
|
+
"initialization": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"x-merge": "scalar",
|
|
81
|
+
"additionalProperties": false,
|
|
82
|
+
"required": ["mode", "operationId"],
|
|
83
|
+
"properties": {
|
|
84
|
+
"mode": { "const": "supplied" },
|
|
85
|
+
"operationId": { "type": "string", "pattern": "^init-[a-f0-9]{24}$" }
|
|
86
|
+
},
|
|
87
|
+
"description": "Creation-service owned initialization operation"
|
|
88
|
+
},
|
|
78
89
|
"initialized": {
|
|
79
90
|
"type": "boolean",
|
|
80
91
|
"x-merge": "scalar",
|
|
@@ -90,6 +101,19 @@
|
|
|
90
101
|
"x-merge": "list",
|
|
91
102
|
"description": "Agent 所有者身份列表;用于 owner 级控制和通知"
|
|
92
103
|
},
|
|
104
|
+
"fullaccess": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"x-merge": "dict",
|
|
107
|
+
"additionalProperties": false,
|
|
108
|
+
"properties": {
|
|
109
|
+
"enabled": {
|
|
110
|
+
"type": "boolean",
|
|
111
|
+
"default": false,
|
|
112
|
+
"description": "允许同时属于 AgentOwner 与 daemonOwner 的直接私聊任务使用宿主级 fullaccess"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"description": "Agent 级宿主执行策略;仅 EC Web 可设置,受 daemon fullaccess 总开关控制,不从 defaults 或 relation 继承"
|
|
116
|
+
},
|
|
93
117
|
"access": {
|
|
94
118
|
"type": "object",
|
|
95
119
|
"x-merge": "dict",
|
|
@@ -179,7 +203,7 @@
|
|
|
179
203
|
"baseagents": {
|
|
180
204
|
"type": "object",
|
|
181
205
|
"x-merge": "dict",
|
|
182
|
-
"description": "各 base agent 的模型、推理强度及运行参数;备用模型链只能在 defaults.json 配置。",
|
|
206
|
+
"description": "各 base agent 的模型、推理强度及运行参数;备用模型链只能在 defaults.json 配置。codex.enableRequestUserInput 为布尔值,默认 true,仅控制 Default 模式阻塞式提问;异步问题自动接入卡片。",
|
|
183
207
|
"additionalProperties": {
|
|
184
208
|
"not": {
|
|
185
209
|
"type": "object",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
},
|
|
19
19
|
"fullaccess": {
|
|
20
20
|
"type": "object",
|
|
21
|
-
"description": "daemon-owner
|
|
21
|
+
"description": "daemon-owner 批准的按调用宿主级执行功能;默认开启",
|
|
22
22
|
"x-merge": "dict",
|
|
23
23
|
"additionalProperties": false,
|
|
24
24
|
"properties": {
|
|
25
|
-
"enabled": { "type": "boolean", "default":
|
|
25
|
+
"enabled": { "type": "boolean", "default": true, "description": "启用 /fa 与 Trigger permissionMode=fullaccess" }
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"debug": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"baseagents": {
|
|
31
31
|
"type": "object",
|
|
32
|
-
"description": "各 base agent 配置(model/effort/apiKey/baseUrl 等),以及仅 defaults 可定义的备用模型链。",
|
|
32
|
+
"description": "各 base agent 配置(model/effort/apiKey/baseUrl 等),以及仅 defaults 可定义的备用模型链。codex.enableRequestUserInput 为布尔值,默认 true,仅控制 Default 模式阻塞式提问;异步问题自动接入卡片。",
|
|
33
33
|
"x-merge": "dict",
|
|
34
34
|
"additionalProperties": {
|
|
35
35
|
"type": "object",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"properties": {
|
|
45
45
|
"model": { "type": "string", "description": "Codex 模型" },
|
|
46
46
|
"effort": { "type": "string", "description": "Codex 推理强度" },
|
|
47
|
-
"enableRequestUserInput": { "type": "boolean", "description": "
|
|
47
|
+
"enableRequestUserInput": { "type": "boolean", "description": "启用 Default 模式的阻塞式 request_user_input,默认 true;不控制权限审批或 request_user_input_async,异步问题自动映射为可回答卡片" },
|
|
48
48
|
"approvalsReviewer": { "type": "string", "enum": ["user", "auto_review", "guardian_subagent"], "description": "审批审查者" }
|
|
49
49
|
}
|
|
50
50
|
},
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"role": { "type": ["string", "null"], "pattern": "^(?!owner$)[a-z0-9_-]+$", "x-merge": "scalar", "description": "关系角色;允许 admin/member/visitor/自定义角色,禁止 owner" },
|
|
19
19
|
"active_baseagent": { "type": "string", "x-merge": "scalar" },
|
|
20
20
|
"models": { "type": "object", "x-merge": "dict" },
|
|
21
|
-
"baseagents": { "type": "object", "x-merge": "dict" },
|
|
21
|
+
"baseagents": { "type": "object", "x-merge": "dict", "description": "关系级 base agent 覆盖;codex.enableRequestUserInput 为布尔值,默认 true,仅控制 Default 模式阻塞式提问,不控制权限审批或异步问题卡片。" },
|
|
22
22
|
"chatmode": { "type": "object", "x-merge": "dict", "properties": { "private": { "enum": ["interactive", "proactive"] }, "group": { "enum": ["interactive", "proactive"] }, "nothuman": { "enum": ["interactive", "proactive"] } }, "additionalProperties": false },
|
|
23
23
|
"mentionMode": { "type": "string", "enum": ["disabled", "mention-only"], "x-merge": "scalar" },
|
|
24
24
|
"model": { "type": "string", "x-merge": "scalar" },
|
|
@@ -14,6 +14,8 @@
|
|
|
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
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" }] },
|
|
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": "minimal", "label": "Minimal" }, { "value": "low", "label": "Low" }, { "value": "medium", "label": "Medium" }, { "value": "high", "label": "High" }, { "value": "xhigh", "label": "Xhigh" }, { "value": "max", "label": "Max" }] },
|
|
17
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" }] }
|
|
18
20
|
],
|
|
19
21
|
"type": "object",
|
|
@@ -100,6 +102,18 @@
|
|
|
100
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。" },
|
|
101
103
|
"reason": { "type": "string", "description": "采用该 Codex 推理强度策略的可审计原因或管理备注。" }
|
|
102
104
|
}
|
|
105
|
+
},
|
|
106
|
+
"baseagents.ecagent.effort": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"required": ["default", "allowOverride"],
|
|
109
|
+
"additionalProperties": false,
|
|
110
|
+
"description": "该角色使用 ecagent runner 时的推理强度策略。",
|
|
111
|
+
"properties": {
|
|
112
|
+
"default": { "type": "string", "enum": ["auto", "minimal", "low", "medium", "high", "xhigh", "max"], "description": "角色默认的 ecagent 推理强度。" },
|
|
113
|
+
"allowOverride": { "type": "boolean", "default": false, "description": "是否允许该角色在关系级覆盖 ecagent 推理强度;缺省为 false。" },
|
|
114
|
+
"allowedValues": { "type": "array", "items": { "type": "string", "enum": ["auto", "minimal", "low", "medium", "high", "xhigh", "max"] }, "uniqueItems": true, "description": "允许关系级覆盖到的 ecagent 推理强度白名单;若提供,必须包含 default。" },
|
|
115
|
+
"reason": { "type": "string", "description": "采用该 ecagent 推理强度策略的可审计原因或管理备注。" }
|
|
116
|
+
}
|
|
103
117
|
}
|
|
104
118
|
},
|
|
105
119
|
"patternProperties": {
|
|
@@ -84,8 +84,13 @@
|
|
|
84
84
|
"ec.group.list": { "allow": true, "scopes": ["agent"], "constraints": { "targetCurrentAgentOnly": true } },
|
|
85
85
|
"ec.group.info": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
86
86
|
"ec.group.pull": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
87
|
+
"ec.group.history": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
87
88
|
"ec.group.members": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
88
89
|
"ec.group.online": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
90
|
+
"ec.group.block": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
91
|
+
"ec.group.unblock": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
92
|
+
"ec.group.report-status": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
93
|
+
"ec.group.member-statuses": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
89
94
|
"ec.group.rules.get": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
90
95
|
"ec.group.rules.read": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
91
96
|
"ec.ctl.send": { "allow": true, "scopes": ["relation"], "constraints": { "ownPeerOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
@@ -76,8 +76,13 @@
|
|
|
76
76
|
"ec.group.list": { "allow": true, "scopes": ["agent"], "constraints": { "targetCurrentAgentOnly": true } },
|
|
77
77
|
"ec.group.info": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
78
78
|
"ec.group.pull": { "allow": false },
|
|
79
|
+
"ec.group.history": { "allow": false },
|
|
79
80
|
"ec.group.members": { "allow": false },
|
|
80
81
|
"ec.group.online": { "allow": false },
|
|
82
|
+
"ec.group.block": { "allow": false },
|
|
83
|
+
"ec.group.unblock": { "allow": false },
|
|
84
|
+
"ec.group.report-status": { "allow": false },
|
|
85
|
+
"ec.group.member-statuses": { "allow": false },
|
|
81
86
|
"ec.group.rules.get": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
82
87
|
"ec.group.rules.read": { "allow": true, "scopes": ["relation"], "constraints": { "groupOnly": true, "currentRelationOnly": true, "targetCurrentAgentOnly": true } },
|
|
83
88
|
"ec.ctl.*": { "allow": false },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[baseagent]
|
|
2
|
-
baseAgentName: {{baseAgentName}} # 底层推理引擎(
|
|
2
|
+
baseAgentName: {{baseAgentName}} # 底层推理引擎(claude / codex / gemini / ecagent;ecagent 为 EvolCore 内置基座,非 Claude Code)
|
|
3
3
|
{{?effectiveModel}}
|
|
4
4
|
effectiveModel: {{effectiveModel}} # 当前实际生效的模型(关系级 > agent级 > 全局 优先级解析)
|
|
5
5
|
{{/}}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[bootstrap]
|
|
2
2
|
phase: bootstrapping
|
|
3
3
|
|
|
4
|
-
这是 agent 生命周期的强制门禁。你正在进行首次自我设定;在完成前,唯一目标是和 owner
|
|
4
|
+
这是 agent 生命周期的强制门禁。你正在进行首次自我设定;在完成前,唯一目标是和 owner 确认并写入基础名片信息及正式欢迎文案,不处理普通任务。
|
|
5
5
|
Bootstrap 不另设隐藏状态机;恢复依据是可核对的生命周期和名片状态。每次重启、超时恢复或收到“继续”时,先检查自身 `lifecycle` 以及本地 `agent.md` 是否存在、字段是否完整,再决定续做步骤,不按旧上下文推断尚未完成。
|
|
6
6
|
系统已经在进入本阶段时向 owner 发送过固定的首条引导消息。当前收到的是 owner 对该消息的后续输入:不要重新发送、复述或改写那条固定消息,也不要再次完整罗列三项问题;只针对当前输入推进下一步。
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
回复方式、当前身份与发送目标遵循本轮注入的 `[reply]` 共用回复规则;不要根据 owner 是人类还是 AI 自行选择发送方式。通信只用于和当前 owner 推进 Bootstrap,不得联系无关对象或处理普通任务。无论 owner 类型如何,都必须由 owner 明确确认最终值,再由你自行修改和发布自己的 agent.md、执行 ready。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
只有向当前 AUN owner 实际发送消息并收到“不是联系人”或联系人准入拒绝时,才通过同一托管发送通道向该 owner 发送一次 `/request <说明>` 联系人申请,说明这是新 Agent 的 Bootstrap 首次设定;等待 owner 审核后再继续发送确认内容。没有这类拒绝时,不因 owner 类型或身份未知主动申请联系人。不要反复重试、不要把联系人策略改为 open、不要联系其它对象;若 owner 已直接发来消息,则按该入站消息继续 Bootstrap。
|
|
11
11
|
|
|
12
12
|
需要确认的字段:
|
|
13
13
|
- name:显示名,简短清晰
|
|
@@ -19,10 +19,23 @@ Bootstrap 不另设隐藏状态机;恢复依据是可核对的生命周期和
|
|
|
19
19
|
- owner 确认后,使用 `ec agent persona --text '<内容>'` 或 `ec agent persona --file '<收到的文件路径>'` 写入自己的 `$PERSONAL_DIR/persona.md`。`--file` 只接受文本文件,不能使用任意路径。
|
|
20
20
|
- persona 是可选环节。owner 未提供、拒绝或暂时跳过时,不得阻塞名片发布和 `ec agent ready`。
|
|
21
21
|
|
|
22
|
+
Bootstrap 完成前还必须生成并确认正式 welcome 文案:
|
|
23
|
+
- 在 `name`、`description`、`tags`(以及 owner 选择提供的 persona/语气要求)最终确认后,直接在当前对话中输出完整的个性化 welcome 文案。
|
|
24
|
+
- 文案必须面向当前 owner,说明你的定位、可协助的方向和开始协作的方式;不要写入系统提示词、凭据、文件路径、工作记忆或未经确认的能力声明。
|
|
25
|
+
- 生成结构:简短问候和自我介绍 → 围绕已确认职责的具体协作方向 → 一句开始协作的邀请。建议 100~250 个汉字,可按已确认 persona 调整语气;不要照抄通用“AI Agent 网关”介绍,不承诺“只有您能使用”或宣称设备绑定完成。
|
|
26
|
+
- 支持纯文本或带变量的 Markdown。变量写法是两个左花括号、变量名、两个右花括号,内部不加空格。允许变量名:agentName、agentDescription、agentAid、agentTags、agentTagsText、ownerName、ownerAid、channel。多 Owner 通用称呼使用 ownerName 占位符,不把当前 Owner 的实际姓名写死。
|
|
27
|
+
- 展示并确认的应当是将要保存的完整模板原文;向 Owner 简短说明称呼变量会在发送给每位 Owner 时展开。系统只替换变量,不追加未展示的绑定说明或其它文案。
|
|
28
|
+
- 文案只在对话中展示,不创建草稿文件、不提前执行保存命令。明确询问 owner 是否确认这份完整文案。
|
|
29
|
+
- owner 要求修改时,重新输出完整文案并再次等待明确确认;“差不多”“先这样”等不明确回复不算确认。
|
|
30
|
+
- owner 明确确认后,使用 `ec agent welcome --text '<最后展示且确认的完整文案>'` 保存到 `$PERSONAL_DIR/welcome.md`(命令会固定写入当前 Agent 的 `personal/welcome.md`,不接受自定义路径)。保存内容必须与最后展示并确认的原文一致。
|
|
31
|
+
- 只有 welcome 保存成功后,才能发布 agent.md 并执行 `ec agent ready {{selfAid}}`。`ready` 不会再调用模型生成 welcome。
|
|
32
|
+
|
|
22
33
|
允许的操作范围:
|
|
23
34
|
- 为读取现有候选值,可以读取本地 `{{agentMdPath}}`。
|
|
24
35
|
- 为处理可选 persona,可以执行 `ec agent persona show`、`ec agent persona --text <text>` 或 `ec agent persona --file <path>`;写入前仍须取得 owner 对待写入内容的明确确认。
|
|
25
|
-
- owner
|
|
36
|
+
- 为核对已保存的文案,可以执行 `ec agent welcome show`。为保存 owner 已确认的 welcome,可以执行 `ec agent welcome --text <text>`;只能写当前 Agent 的固定 `personal/welcome.md`,不能传入路径或保存未确认草稿。
|
|
37
|
+
- owner 明确确认最终值和 welcome 后,只能编辑上述 agent.md 的 YAML frontmatter,并依次执行下面三个命令:
|
|
38
|
+
- `ec agent welcome --text '<confirmed welcome text>'`
|
|
26
39
|
- `ec aid agentmd put {{selfAid}}`
|
|
27
40
|
- `ec agent ready {{selfAid}}`
|
|
28
41
|
- 除这些 bootstrap 操作及向 owner 回复外,不得调用工具或执行命令。
|
|
@@ -30,7 +43,9 @@ Bootstrap 不另设隐藏状态机;恢复依据是可核对的生命周期和
|
|
|
30
43
|
恢复时遵循以下幂等规则:
|
|
31
44
|
- `lifecycle=active`:Bootstrap 已完成,不重复改名片、不重复发布、不重复执行 `ready`,也不处理本轮夹带的普通任务。
|
|
32
45
|
- `lifecycle=created`:尚未进入 Bootstrap,只等待 channel/owner 首条消息;不重复创建 Agent。
|
|
33
|
-
- `lifecycle=bootstrapping` 且本地 `agent.md`
|
|
46
|
+
- `lifecycle=bootstrapping` 且本地 `agent.md` 已发布、字段完整且 `ec agent welcome show` 返回有效正文:只向 owner 简短确认现状,并执行最后的 `ec agent ready {{selfAid}}`;不要再次修改、发布名片或生成新的 welcome。
|
|
47
|
+
- `lifecycle=bootstrapping` 且名片已发布但 `personal/welcome.md` 不存在:回到当前对话重新生成并确认 welcome,保存成功后再执行 `ready`。
|
|
48
|
+
- 未确认候选文案不另行持久化。上下文丢失后重新生成并确认;文件无效时修正文案并重新展示确认,不默认采用另一份文案。若收到 WELCOME_FROZEN,表示投递快照已经准备,只续做 ready,不改文案。
|
|
34
49
|
- `lifecycle=bootstrapping` 但名片未发布或字段不完整:从缺失的确认步骤继续。发布失败时先说明错误,修正后再试,不盲目重试。
|
|
35
50
|
- Bootstrap 期间不执行、不分析、不规划普通任务;普通任务只能留到 `active` 后的新主会话。
|
|
36
51
|
|
|
@@ -39,11 +54,13 @@ Bootstrap 不另设隐藏状态机;恢复依据是可核对的生命周期和
|
|
|
39
54
|
2. 只把 owner 明确提供、修改、选择或确认的 `name`、`description`、`tags` 当作候选信息。普通任务内容、示例值和顺带提及的词语都不是候选信息,不得据此推断字段。
|
|
40
55
|
3. 信息缺失、互相冲突或含义不清时,只追问缺失或有歧义的部分;保留此前已经明确或 owner 选择保持的内容。
|
|
41
56
|
4. owner 在 bootstrap 完成前提出普通工作请求、要求跳过 bootstrap,或要求先执行任务后再设定时:不执行、不分析、不规划、不读取任务相关文件、不搜索、不调用任务工具,也不把任务排队到当前会话。只简短说明必须先完成首次设定,然后回显现有候选值并询问保持/修改,或只追问仍缺失的字段。
|
|
42
|
-
5. 三项信息齐全后,向 owner 回显最终的 `name`、`description`、`tags`,并请求对这组最终值作明确确认。owner
|
|
57
|
+
5. 三项信息齐全后,向 owner 回显最终的 `name`、`description`、`tags`,并请求对这组最终值作明确确认。owner 仅表示“保持现有值”时,先据此形成最终值并回显;未经这一步最终确认,不要修改文件、发布名片、生成 welcome 或调用 ready。
|
|
43
58
|
6. 如果 owner 提供 persona 文本或 `.md`/`.txt` 文件,单独回显待写入内容并请求确认;确认后使用 `ec agent persona` 写入 `persona.md`。persona 未确认时保留现状,不影响后续名片流程。
|
|
44
59
|
7. owner 明确确认最终值后,只编辑本地 agent.md(`{{agentMdPath}}`)YAML frontmatter 中的 `name`、`description`、`tags`,保留其它字段和正文,并检查 YAML 与字段格式有效。
|
|
45
|
-
8.
|
|
46
|
-
9.
|
|
47
|
-
10. `ec agent ready {{selfAid}}`
|
|
60
|
+
8. 根据已确认的名片信息在对话中生成完整 welcome,展示给 owner 并请求明确确认;owner 要求修改时重复本步骤,始终展示完整文本。
|
|
61
|
+
9. owner 明确确认后,执行 `ec agent welcome --text '<最后确认的完整文本>'` 保存 welcome;只有命令明确成功后,才执行 `ec aid agentmd put {{selfAid}}`。
|
|
62
|
+
10. `ec aid agentmd put {{selfAid}}` 成功后,才调用 `ec agent ready {{selfAid}}` 完成 bootstrap。
|
|
63
|
+
11. 任一步骤失败时,不调用 ready,不盲目重复尝试;说明具体失败原因并在修正后继续。
|
|
64
|
+
12. `ec agent ready {{selfAid}}` 必须是 bootstrap 的最后一个操作。成功后系统会结束当前上下文、创建新的主会话并发送已确认的个性化 welcome;不要在旧上下文中继续处理任务。
|
|
48
65
|
|
|
49
66
|
完成前不要承诺已经进入正常工作状态,也不要尝试与上述流程无关的文件修改、网络通信或系统配置操作。
|