evolcore 0.0.35 → 0.0.37
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 +42 -0
- package/README.md +6 -0
- package/bin/install-codex-managed-hooks.mjs +20 -3
- package/dist/agents/baseagent-availability.js +1 -1
- package/dist/agents/baseagent.js +88 -0
- package/dist/agents/claude-runner.js +59 -12
- package/dist/agents/codex/app-server-client.js +18 -1
- package/dist/agents/codex-runner.js +262 -21
- package/dist/agents/ecagent-runner.js +47 -11
- package/dist/agents/gemini-runner.js +36 -12
- package/dist/aun/aid/client.js +4 -3
- package/dist/aun/aid/control-aid.js +270 -8
- package/dist/aun/aid/identity.js +6 -3
- package/dist/aun/aid/ownership-operation.js +58 -0
- package/dist/aun/aid/store.js +1 -0
- package/dist/aun/group/fs-download.js +67 -2
- package/dist/aun/group/history.js +20 -5
- package/dist/aun/group/operations.js +8 -2
- package/dist/aun/menu/client.js +39 -2
- package/dist/aun/menu/transport.js +1 -1
- package/dist/aun/msg/history.js +43 -4
- package/dist/aun/msg/managed-operation.js +30 -53
- package/dist/aun/msg/p2p.js +51 -15
- package/dist/aun/outbox.js +4 -0
- package/dist/channels/aun.js +260 -73
- package/dist/channels/daemon.js +6 -4
- package/dist/channels/feishu.js +3 -0
- package/dist/cli/agent-command.js +161 -223
- package/dist/cli/agent-create.js +190 -223
- package/dist/cli/agent.js +3 -1
- package/dist/cli/aid-bind-command.js +53 -0
- package/dist/cli/aun-commands.js +384 -91
- package/dist/cli/bench.js +1 -1
- package/dist/cli/cli-argv.js +74 -0
- package/dist/cli/daemon-commands.js +105 -74
- package/dist/cli/diag.js +1 -1
- package/dist/cli/fs-command.js +18 -19
- package/dist/cli/getmeta-command.js +159 -6
- package/dist/cli/index.js +6 -12
- package/dist/cli/init-channel.js +8 -55
- package/dist/cli/init.js +125 -218
- package/dist/cli/queue-command.js +11 -8
- package/dist/cli/restart-monitor.js +177 -85
- package/dist/cli/session-command.js +1 -1
- package/dist/cli/stats.js +7 -5
- package/dist/cli/thread-command.js +103 -30
- package/dist/cli/trigger-command.js +1 -1
- package/dist/cli/watch-msg-diag.js +1 -0
- package/dist/config/access-policy.js +2 -2
- package/dist/config/boot-log.js +14 -11
- package/dist/config/config-field-policy.js +9 -1
- package/dist/config/config-manager.js +176 -90
- package/dist/config/config-operation-service.js +7 -14
- package/dist/config/contact-book-store.js +142 -26
- package/dist/config/contact-book.js +4 -2
- package/dist/config/lifecycle.js +1 -1
- package/dist/config/owner-config.js +96 -0
- package/dist/config/peer-role-resolver.js +12 -18
- package/dist/config/providers-config.js +382 -0
- package/dist/config/providers-import.js +74 -0
- package/dist/config/providers-management.js +328 -0
- package/dist/config/providers.js +22 -0
- package/dist/config/resolved-config-op.js +17 -14
- package/dist/config/snapshot.js +28 -16
- package/dist/config-store.js +18 -14
- package/dist/core/agent-ipc-registration.js +21 -63
- package/dist/core/agent-runtime.js +16 -5
- package/dist/core/auth/agent-delegation.js +199 -25
- package/dist/core/auth/auth-gateway.js +44 -2
- package/dist/core/auth/authorization-denial.js +1 -1
- package/dist/core/auth/debug-context.js +2 -1
- package/dist/core/auth/delegation-authorization.js +2 -2
- package/dist/core/auth/delegation-diagnostics.js +4 -1
- package/dist/core/auth/operation-authorizer.js +10 -1
- package/dist/core/auth/operation-catalog.js +19 -1
- package/dist/core/bootstrap-service.js +43 -20
- package/dist/core/channel-loader.js +0 -1
- package/dist/core/channel-runtime.js +30 -4
- package/dist/core/command/agent-control.js +196 -37
- package/dist/core/command/cli-intent-parser.js +60 -4
- package/dist/core/command/command-handler.js +212 -60
- package/dist/core/command/connect-menu.js +1 -0
- package/dist/core/command/diag-service.js +5 -4
- package/dist/core/command/file-search.js +368 -0
- package/dist/core/command/menu-catalog.js +2 -1
- package/dist/core/command/menu-handler.js +292 -107
- package/dist/core/command/menu-protocol.js +23 -0
- package/dist/core/command/role-menu.js +7 -19
- package/dist/core/command/skill-slash.js +130 -25
- package/dist/core/command/slash-handler.js +101 -53
- package/dist/core/command/topic-slash.js +16 -5
- package/dist/core/daemon-bootstrap.js +7 -1
- package/dist/core/daemon-control.js +19 -1
- package/dist/core/daemon-lifecycle.js +2 -1
- package/dist/core/event-catalog.js +2 -0
- package/dist/core/evolagent-registry.js +13 -2
- package/dist/core/evolagent.js +3 -6
- package/dist/core/handoff/ipc-registration.js +2 -2
- package/dist/core/handoff/runtime.js +40 -6
- package/dist/core/handoff/store.js +1 -0
- package/dist/core/inference/text-inference.js +95 -6
- package/dist/core/ipc-registration.js +43 -24
- package/dist/core/memory/consolidation-context.js +4 -1
- package/dist/core/memory/consolidation.js +25 -14
- package/dist/core/message/aun-ipc-sender.js +296 -88
- package/dist/core/message/aun-request-registry.js +226 -0
- package/dist/core/message/create-status.js +33 -4
- package/dist/core/message/message-bridge.js +62 -13
- package/dist/core/message/message-log.js +0 -1
- package/dist/core/message/message-queue.js +4 -1
- package/dist/core/message/message-utils.js +8 -1
- package/dist/core/message/peer-mode.js +17 -9
- package/dist/core/message/response-engine.js +266 -124
- package/dist/core/message/retry-scheduler.js +11 -8
- package/dist/core/model/catalog-service.js +60 -18
- package/dist/core/model/model-catalog.js +112 -9
- package/dist/core/model/model-fallback.js +94 -26
- package/dist/core/ownership/owner-resolver.js +687 -0
- package/dist/core/permission/approval-gateway.js +196 -62
- package/dist/core/permission/ec-command-parser.js +138 -25
- package/dist/core/permission/filesystem-approval-scope.js +141 -0
- package/dist/core/permission/protected-paths.js +14 -1
- package/dist/core/permission/sandbox-runtime.js +171 -18
- package/dist/core/permission/tool-policy.js +13 -2
- package/dist/core/role/runtime-policy.js +3 -4
- package/dist/core/session/session-idle-monitor.js +10 -8
- package/dist/core/session/session-manager.js +72 -45
- package/dist/core/session/session-mapper.js +18 -7
- package/dist/core/session/session-renew.js +5 -4
- package/dist/core/session/session-title.js +2 -1
- package/dist/core/session/session-turn-coordinator.js +4 -2
- package/dist/core/skill/index-generator.js +2 -16
- package/dist/core/task/task-recovery-service.js +15 -2
- package/dist/core/thread/command-parser.js +28 -13
- package/dist/core/thread/index.js +1 -0
- package/dist/core/thread/ipc-operation.js +11 -8
- package/dist/core/thread/thread-operation.js +79 -44
- package/dist/core/thread/thread-route.js +54 -6
- package/dist/core/thread/thread-service.js +236 -45
- package/dist/core/thread/topic-id.js +248 -0
- package/dist/eck/kit-renderer.js +1 -1
- package/dist/eck/message-renderer.js +12 -2
- package/dist/index.js +50 -27
- package/dist/ipc.js +59 -6
- package/dist/paths.js +1 -0
- package/dist/product.js +1 -0
- package/dist/response-system/engines/v1/proactive-flow.js +10 -3
- package/dist/stats/db.js +8 -0
- package/dist/stats/writer.js +26 -4
- package/dist/trigger/authorization.js +48 -3
- package/dist/trigger/feedback.js +28 -10
- package/dist/trigger/ipc-service.js +86 -10
- package/dist/trigger/local-files.js +55 -23
- package/dist/trigger/scheduler.js +57 -11
- package/dist/trigger/system-definitions.js +1 -0
- package/dist/trigger/validation.js +44 -15
- package/dist/utils/aid-bind.js +17 -297
- package/dist/utils/avatar-upload.js +16 -4
- package/dist/utils/cross-platform.js +115 -36
- package/dist/utils/ecweb-supervisor.js +1 -1
- package/dist/utils/ecweb-utils.js +8 -1
- package/dist/utils/error-utils.js +44 -6
- package/dist/utils/instance-registry.js +12 -2
- package/dist/utils/npm-ops.js +102 -27
- package/dist/utils/package-version-info.js +72 -27
- package/dist/utils/restart-safety.js +50 -0
- package/dist/utils/upgrade-jobs.js +304 -0
- package/dist/utils/windows-autostart.js +17 -10
- package/kits/docs/INDEX.md +5 -0
- package/kits/docs/aun/ABILITY_CALLING.md +239 -0
- package/kits/docs/evolcore/INDEX.md +14 -3
- package/kits/docs/evolcore/agent-create.md +55 -141
- package/kits/docs/evolcore/agent.md +38 -16
- package/kits/docs/evolcore/aid.md +34 -0
- package/kits/docs/evolcore/config.md +20 -1
- package/kits/docs/evolcore/event.md +2 -2
- package/kits/docs/evolcore/fs.md +18 -2
- package/kits/docs/evolcore/group-collaboration.md +13 -246
- package/kits/docs/evolcore/group.md +2 -1
- package/kits/docs/evolcore/memory-consolidation-batches.md +1 -1
- package/kits/docs/evolcore/menu-protocol.md +65 -1
- package/kits/docs/evolcore/msg.md +64 -2
- package/kits/docs/evolcore/skill.md +86 -0
- package/kits/docs/evolcore/stats.md +6 -0
- package/kits/docs/evolcore/task.md +2 -0
- package/kits/docs/evolcore/thread-chain.md +145 -51
- package/kits/docs/evolcore/trigger.md +48 -3
- package/kits/eck_manifest.json +21 -0
- package/kits/eck_message_manifest.json +4 -4
- package/kits/migrations/migrate-role-config-v5.mjs +20 -7
- package/kits/rules/01-overview.md +2 -1
- package/kits/rules/03-identity.md +3 -1
- package/kits/rules/04-relation.md +1 -1
- package/kits/rules/07-memory-and-thread.md +1 -1
- package/kits/schemas/_meta.json +16 -1
- package/kits/schemas/agent-config.schema.13.json +44 -2
- package/kits/schemas/contact-book.schema.3.json +5 -0
- package/kits/schemas/daemon.schema.6.json +3 -1
- package/kits/schemas/daemon.schema.8.json +329 -0
- package/kits/schemas/defaults.schema.5.json +39 -3
- package/kits/schemas/providers.schema.1.json +76 -0
- package/kits/schemas/relation-config.schema.9.json +5 -1
- package/kits/skills/.switches.json +28 -0
- package/kits/skills/aid-ability/SKILL.md +214 -0
- package/kits/skills/ec-agent-create/SKILL.md +162 -0
- package/kits/skills/ec-group/SKILL.md +2 -1
- package/kits/skills/ec-group-collaboration/SKILL.md +228 -0
- package/kits/skills/ec-identity/SKILL.md +143 -0
- package/kits/skills/ec-skill/scripts/cli.mjs +36 -3
- package/kits/skills/ec-skill/scripts/skill.mjs +202 -15
- package/kits/skills/ec-trigger/SKILL.md +167 -0
- package/kits/skills/ec-trigger/references/examples.md +153 -0
- package/kits/skills/thread-ops/SKILL.md +108 -420
- package/kits/templates/message-fragments/thread-context.md +1 -2
- package/kits/templates/message-fragments/trigger-thread-check.md +1 -1
- package/kits/templates/roles/member.json +1 -1
- package/kits/templates/roles/visitor.json +1 -0
- package/kits/templates/system-fragments/bootstrap.md +1 -0
- package/kits/templates/system-fragments/channel.md +2 -1
- package/kits/templates/system-fragments/commands.md +5 -4
- package/kits/templates/system-fragments/identity.md +2 -0
- package/kits/templates/system-fragments/session.md +1 -1
- package/kits/templates/system-fragments/venue.md +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ec-group-collaboration
|
|
3
|
+
description: >-
|
|
4
|
+
发起并协调 AUN Agent 群聊协作,从明确目标、建群和邀请,到发布群规则、分派任务、共享产物及验收收尾。
|
|
5
|
+
当用户要求“建协作群”“组织 Agent 协作”“拉几个助手一起做”“分派群任务”或汇总协作交付时使用,
|
|
6
|
+
私聊发起和已有群继续协作都适用。不用于普通群内聊天、飞书等非 AUN 群管理,或本机子代理调度。
|
|
7
|
+
license: MIT
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 发起 AUN 群聊协作
|
|
11
|
+
|
|
12
|
+
目标是让每个任务都有明确负责人、输入、交付物和验收结论。
|
|
13
|
+
本技能组织群生命周期、规则、消息和文件;完整参数继续查 `$KITS_DOCS/evolcore/group.md`。
|
|
14
|
+
示例即使连续列出多步,每次工具调用也只运行一条完整的 `ec` 命令,并在核对回执后继续。
|
|
15
|
+
|
|
16
|
+
若当前 `chatType=group`,先加载 `ec-group`,按当前群规则和 `[reply]` 判断响应及发送方式。
|
|
17
|
+
需要联系当前对端或群以外的对象时,先加载 `thread-ops`,按其话题链规则发送。
|
|
18
|
+
本技能不授予额外的发信、群管理或文件权限。
|
|
19
|
+
|
|
20
|
+
## 1. 明确协作范围
|
|
21
|
+
|
|
22
|
+
1. 确定目标、参与者 AID、职责、交付位置、验收条件、截止时间和汇报频率。
|
|
23
|
+
使用 Owner 明确提供或已可靠取得的 AID,不从显示名拼凑地址,不邀请未确认的对象。
|
|
24
|
+
2. 根据已有授权确定群可见性和入群方式。临时协作推荐 `private` + `invite_only`;
|
|
25
|
+
参与者或访问范围有歧义时,只澄清缺失部分。
|
|
26
|
+
3. 检查是否已有合适的群,避免为同一任务重复建群:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
ec group list <selfAid> --format json
|
|
30
|
+
ec group info <selfAid> <groupId> --format json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
以下命令每条独立调用。群管理的发送者必须是当前 `selfAid`,不使用其它 Agent 的身份,
|
|
34
|
+
不传独立连接参数 `--aun-path` 或 `--app`。
|
|
35
|
+
|
|
36
|
+
## 2. 创建或核对协作群
|
|
37
|
+
|
|
38
|
+
群名称必填,简介说明目标。默认由服务生成群 AID,不根据显示名猜测地址;
|
|
39
|
+
需要自定义地址时使用已确定的 `--group-id <aid>`。
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
ec group create <selfAid> 'Project Alpha 协作' --visibility private --description 'Project Alpha 的实现与复核协作' --join-mode invite_only --format json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
从成功响应的 `group.group_aid`(兼容字段 `group.group_id`)取得实际群 AID。
|
|
46
|
+
默认地址形如 `g-12345.agentid.cn`,issuer 以服务返回为准。保存返回的地址并检查:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
ec group info <selfAid> <groupId> --format json
|
|
50
|
+
ec group members <selfAid> <groupId> --format json
|
|
51
|
+
ec group rules <selfAid> <groupId> --format json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
创建者成为群 owner。普通执行者保持 member,确需管理群的需求发起者或协作者才设为 admin。
|
|
55
|
+
入群策略、成员角色和任务职责是不同概念;不为一次任务自动转让群主或提升所有成员权限。
|
|
56
|
+
|
|
57
|
+
## 3. 确认成员可协作并邀请
|
|
58
|
+
|
|
59
|
+
1. 本机托管 Agent 用 `ec agent get <aid> lifecycle` 或 `ec agent show <aid>` 核对 `lifecycle=active`。
|
|
60
|
+
远程 Agent 无法在本机查到时,由其 Owner 或已授权渠道核实;在线和名片存在不能证明已激活。
|
|
61
|
+
2. 尚在 Bootstrap 的 Agent 先完成创建,不向其分派普通任务。
|
|
62
|
+
需要创建协作者时加载 `ec-agent-create`,串行创建并验收。
|
|
63
|
+
3. 邀请已确认的成员,再查询实际成员状态:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
ec group invite <selfAid> <groupId> <implementerAid> <reviewerAid>
|
|
67
|
+
ec group members <selfAid> <groupId> --format json
|
|
68
|
+
ec group online <selfAid> <groupId> --format json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
邀请已发出不等于已入群。EvolCore 托管 Agent 收到邀请后由其 Owner 审核,
|
|
72
|
+
不会自动加入;等待审核并核对成员列表后再下发任务,不重复邀请或替其它 Agent 接受邀请。
|
|
73
|
+
成员和邀请查询需要分页时按返回结果继续读取,不能把第一页当作全部成员。
|
|
74
|
+
|
|
75
|
+
只有当前身份具备群管理权限且确有管理职责时,才设置角色:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
ec group role <selfAid> <groupId> <memberAid> admin
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 4. 发布最小群规则
|
|
82
|
+
|
|
83
|
+
先区分两项:入群策略控制谁能加入,`/rules.md` 定义工作方式。
|
|
84
|
+
已有群先读取有效规则并遵循它;更新既有规则时保留仍适用的约定。
|
|
85
|
+
下面的入群策略写操作仅用于新群或已获准的策略变更;已有群沿用已确认的策略。
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
ec group rules <selfAid> <groupId> --mode invite_only
|
|
89
|
+
ec group rules <selfAid> <groupId> get --format json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
在当前会话 `$TMPDIR` 准备不超过 4 KiB 的 UTF-8 Markdown 规则文件,
|
|
93
|
+
例如 `$TMPDIR/aun-collaboration-rules.md`。至少写清协调、侦察、分析、策略四类职责,
|
|
94
|
+
同一成员可以承担多类职责;按任务补充执行、复核、交付和升级路径。
|
|
95
|
+
|
|
96
|
+
规则示例,成员 AID 和任务目标须替换成已确认的实际值:
|
|
97
|
+
|
|
98
|
+
```markdown
|
|
99
|
+
# Project Alpha 协作规则
|
|
100
|
+
|
|
101
|
+
## 目标与职责
|
|
102
|
+
- coordinator.agentid.pub:协调任务、作策略取舍并汇总验收。
|
|
103
|
+
- implementer.agentid.pub:侦察现状、实现变更并报告验证结果。
|
|
104
|
+
- reviewer.agentid.pub:分析方案、复核交付并标出风险。
|
|
105
|
+
|
|
106
|
+
## 任务与交付
|
|
107
|
+
- 任务须包含编号、负责人、输入、交付物、截止时间和验收条件。
|
|
108
|
+
- 状态变化、阻塞和完成都在群里报告,并 @ 负责接收的成员。
|
|
109
|
+
- 产物放在群空间 /collab/ 对应任务目录;草稿和未验证项明确标注。
|
|
110
|
+
|
|
111
|
+
## 升级
|
|
112
|
+
- 权限不足、需求冲突或预计延期时,@coordinator.agentid.pub。
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
发布并复读验证:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
ec group rules <selfAid> <groupId> set "$TMPDIR/aun-collaboration-rules.md"
|
|
119
|
+
ec group rules <selfAid> <groupId> get --format json
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
仅 `status=ok` 表示规则有效。`ec fs cp` 只改文件,随后还必须显式 `publish`。
|
|
123
|
+
`/rules.md` 放稳定入口约定,任务记录和大块资料放其它群文件。
|
|
124
|
+
签名、状态和本地加载策略见 `$KITS_DOCS/evolcore/group-rules.md`。
|
|
125
|
+
|
|
126
|
+
## 5. 分派任务并建立跟进
|
|
127
|
+
|
|
128
|
+
每个任务至少包含稳定编号、唯一负责人、复核人、输入、交付物、验收条件和截止时间。
|
|
129
|
+
需要回应就明确 @ 对应 AID,不把“发到群里”当成所有成员都已收到并接受任务。
|
|
130
|
+
正文写出实际输入、验收条件及时间和时区,不用仅当前会话知道的“按已确认约定”代替。
|
|
131
|
+
以下正文里的占位内容也必须填入实际值后才能发送。
|
|
132
|
+
|
|
133
|
+
### 当前就在目标群
|
|
134
|
+
|
|
135
|
+
使用完整发送者与群 AID,在当前话题发送:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
ec group send <selfAid> <groupId> '[A-001] 负责人:<implementerAid>;复核:<reviewerAid>。输入:<任务输入>。交付:/collab/A-001/。验收:<可验证的通过条件>。截止:<时间与时区>。请先回复 ACK,再按群规则汇报。' --mention '<implementerAid>,<reviewerAid>' --encrypt
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 从私聊或其它群发起
|
|
142
|
+
|
|
143
|
+
这是跨话题发送。先保存来源话题摘要,再查找或创建与目标群的话题:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
ec thread list <groupId>
|
|
147
|
+
ec thread create <groupId> --name 'Project Alpha 协作'
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
使用返回的裸话题 ID;已有合适话题就复用,不为每条消息重复创建。
|
|
151
|
+
发送时由话题推断身份和目标,`--check-every` 必填:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
ec group send '[A-001] 负责人:<implementerAid>;复核:<reviewerAid>。输入:<任务输入>。交付:/collab/A-001/。验收:<可验证的通过条件>。截止:<时间与时区>。请先回复 ACK,再按群规则汇报。' --thread <threadId> --check-every 10m --mention '<implementerAid>,<reviewerAid>' --encrypt
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
示例使用密文;实际发送按 `[reply]` 和已核实的目标加密要求选择 `--encrypt` 或 `--no-encrypt`,
|
|
158
|
+
不得省略后依赖默认。加密状态不明确时先核实,不擅自降为明文。
|
|
159
|
+
一次 shell 调用只执行一条完整发送命令,不拼接管道、重定向、子 shell 或其它命令。
|
|
160
|
+
|
|
161
|
+
保存回执中的 `trigger_id` 和消息 ID。发送后由目标话题继续处理,不在来源会话阻塞等待。
|
|
162
|
+
收到复查时按 `thread-ops` 回查来源新指示、判断进展并更新原复查;
|
|
163
|
+
不为同一轮跟进反复发送 `--check-every` 创建重复 trigger。
|
|
164
|
+
|
|
165
|
+
## 6. 共享产物并读取进展
|
|
166
|
+
|
|
167
|
+
群空间统一使用 `ec fs`:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
ec fs mkdir -p <groupId>:/collab/A-001/
|
|
171
|
+
ec fs cp ./api-refactor.patch <groupId>:/collab/A-001/api-refactor.patch
|
|
172
|
+
ec fs cp ./regression-report.md <groupId>:/collab/A-001/regression-report.md
|
|
173
|
+
ec fs ls <groupId>:/collab/A-001/
|
|
174
|
+
ec fs cat <groupId>:/collab/A-001/regression-report.md
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
群文件权限由后端校验。权限失败时检查入群状态和角色,不用个人 storage 的 ACL、token 或 chmod 绕过。
|
|
178
|
+
临时下载放本会话 `$TMPDIR`;正文超出 `cat` 预算时下载读取,参数见 `$KITS_DOCS/evolcore/fs.md`。
|
|
179
|
+
|
|
180
|
+
进展消息使用任务编号和 `IN_PROGRESS`、`BLOCKED`、`DONE`,说明已完成项、阻塞及下一步。
|
|
181
|
+
补历史优先查询本地记录:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
ec group history <selfAid> <groupId> --limit 50 --format json
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
按 `has_more`、`next_before` / `next_after` 提供的游标继续读取,具体格式见群命令手册。
|
|
188
|
+
这是只读查询,不推进消费游标;托管协作不使用 `group pull/ack` 补上下文。
|
|
189
|
+
本地历史只覆盖本机已记录的消息,缺少记录时明确说明,不推断对方从未回复。
|
|
190
|
+
|
|
191
|
+
## 7. 验收并收尾
|
|
192
|
+
|
|
193
|
+
1. 核对每个任务状态、产物路径、复核结论、验证证据及未解决风险。
|
|
194
|
+
`DONE` 自报不能代替验收,未验证项必须明确标出。
|
|
195
|
+
2. 在群里发布最终汇总,列出通过或未通过、交付物、遗留责任人及下一步。
|
|
196
|
+
发信仍按第 5 节区分同话题和跨话题,不切换目标直接发送。
|
|
197
|
+
3. 跨话题复查完成后,用回执中的 `trig_…` ID 删除对应 trigger:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
ec trigger delete <trigger_id>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
4. 更新话题摘要;需要向来源需求方汇报时走 `thread-ops`,
|
|
204
|
+
汇报产生的复查也要在对应跟进结束后收尾。
|
|
205
|
+
5. 群默认保留。解散或转让群主必须在已有明确授权范围内执行,
|
|
206
|
+
不把“协作完成”解释为自动解散并删除共享历史。
|
|
207
|
+
|
|
208
|
+
## 输出与异常
|
|
209
|
+
|
|
210
|
+
交付汇报写明群 AID、协作话题、任务及负责人、产物位置、验收结论、阻塞和遗留复查。
|
|
211
|
+
没有真实验证或未等到成员确认时,如实标明阶段,不宣称整个协作已经完成。
|
|
212
|
+
|
|
213
|
+
| 现象 | 处理 |
|
|
214
|
+
|---|---|
|
|
215
|
+
| 创建后报群不存在 | 核对实际响应中的群 AID 和创建状态,不猜测或重复建群 |
|
|
216
|
+
| `ROLE_ACCESS_DENIED` | 核对当前身份、群成员与角色;交由有权限者处理,不换身份绕过 |
|
|
217
|
+
| 邀请发出但成员未加入 | 等待目标 Owner 审核,核对成员状态,不直接分派任务 |
|
|
218
|
+
| `file_mismatch` | 核对当前规则内容,确认是预期版本后由有权限者发布 |
|
|
219
|
+
| 规则过大或编码无效 | 压缩至 4 KiB 内的 UTF-8 入口规则,其它资料另存 |
|
|
220
|
+
| `CHECK_EVERY_REQUIRED` / 话题路由拒绝 | 先定位真实话题,再带 `--thread` 与复查周期发送 |
|
|
221
|
+
| 消息已发出但复查未创建 | 记录回执错误,按 `thread-ops` 补跟进,不重发原任务 |
|
|
222
|
+
|
|
223
|
+
## 参考
|
|
224
|
+
|
|
225
|
+
- `$KITS_DOCS/evolcore/group.md`:命令参数、邀请审核和群历史分页。
|
|
226
|
+
- `$KITS_DOCS/evolcore/group-rules.md`:规则签名、发布与加载机制。
|
|
227
|
+
- `$KITS_DOCS/evolcore/fs.md`:群空间文件操作及边界。
|
|
228
|
+
- `$KITS_DOCS/evolcore/thread-chain.md`:话题与跨话题跟进机制。
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ec-identity
|
|
3
|
+
description: >-
|
|
4
|
+
身份与联系人:我是谁、我认识谁、这个名字指的是哪个 AID。
|
|
5
|
+
用于查改自己的名片(名字、描述、标签、头像)、查别人名片、按名字找人、
|
|
6
|
+
维护联系人(添加、拉黑、待审申请)。用户说"我是谁""我的名片""改个名字"
|
|
7
|
+
"改描述""换头像""这个人是谁""查一下 X""帮我找 XX""联系人""通讯录"
|
|
8
|
+
"加他/拉黑他""有没有这个人"时使用。
|
|
9
|
+
不适用于判断对端权限角色(那是关系层 relation config),
|
|
10
|
+
也不适用于跨话题发消息(用 thread-ops)。
|
|
11
|
+
license: MIT
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# EC Identity 操作规程
|
|
15
|
+
|
|
16
|
+
**本 skill 只讲决策与边界**:哪个身份查什么、名字怎么转成 AID、写操作什么时候允许。
|
|
17
|
+
参数细节看 `ec aid --help`、`ec contact --help` 和 `$KITS_DOCS/evolcore/aid.md`、`contact.md`。
|
|
18
|
+
|
|
19
|
+
## 一、身份有三个层次,不要混用
|
|
20
|
+
|
|
21
|
+
| 层 | 字段 | 权威性 | 用在哪 |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| `selfAid` | `dddd.agentid.pub` | **唯一权威** | 鉴权、路由、发送者、落盘路径 |
|
|
24
|
+
| 名片 `name` | `夙夜无偕1号·罗辑` | 仅展示 | 给人看、在列表里显示 |
|
|
25
|
+
| 联系人 `displayName` | 本地别名 | 仅本端 | 自己记的称呼 |
|
|
26
|
+
|
|
27
|
+
判断"是不是我"用 `selfAid`,永远不要用名字比对。名字会改、可能为空、可能重名。
|
|
28
|
+
|
|
29
|
+
## 二、我是谁
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
ec aid show <selfAid> # 证书/私钥/签名能力(不含名片正文)
|
|
33
|
+
ec aid agentmd get <selfAid> # 名片正文,下载 + 验签 + 刷新本地缓存
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`ec aid show` **不返回名片内容**——只有证书和密钥状态。想看名字、描述、标签、头像,用 `agentmd get`。
|
|
37
|
+
|
|
38
|
+
改名片(仅 `request` / `bypass` 模式,且只能改自己):
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
ec aid agentmd set <selfAid> name '新名字'
|
|
42
|
+
ec aid agentmd set <selfAid> description '一句话简介'
|
|
43
|
+
ec aid agentmd set <selfAid> tags '["coding","tools"]'
|
|
44
|
+
ec aid avatar <selfAid> --file <本地图片>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
可改字段只有 `name` / `type` / `description` / `version` / `tags`。`set` 只改 frontmatter
|
|
48
|
+
对应字段,保留正文,然后签名发布。
|
|
49
|
+
|
|
50
|
+
**不要**直接读 `$EVOLCORE_HOME/AIDs/<aid>/agent.md`——H 类保护会直接拒绝 `cat`/`Read`。
|
|
51
|
+
|
|
52
|
+
## 三、我认识谁
|
|
53
|
+
|
|
54
|
+
按可靠性排序,**逐层往下找,找到就停**:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 1. 聊过的人——最实用,自带名片名和活跃时间
|
|
58
|
+
ec thread peers --self <selfAid>
|
|
59
|
+
|
|
60
|
+
# 2. 正式联系人——有 status/role 语义,但可能没有 displayName
|
|
61
|
+
ec contact list --all --format json
|
|
62
|
+
ec contact list --pending # 只有待审的
|
|
63
|
+
ec contact list --blocked # 只有拉黑的
|
|
64
|
+
|
|
65
|
+
# 3. 已知 AID 想看名片
|
|
66
|
+
ec aid lookup <aid> # 含正文,不验签,快
|
|
67
|
+
ec aid agentmd get <aid> # 验签,慢一点,适合需要确认真伪时
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
三者覆盖的是不同集合:`thread peers` 是"聊过的",`contact list` 是"登记过的"。
|
|
71
|
+
一个人可能聊过但没进联系人簿,也可能在联系人簿里但从没说过话。
|
|
72
|
+
|
|
73
|
+
## 四、按名字找人(反直觉的部分)
|
|
74
|
+
|
|
75
|
+
**没有名字反查索引。** `relations/_index/name_*.json` 是空壳目录,源码里零调用点。
|
|
76
|
+
`search.query` 之类的 AUN 检索协议有文档定义,但 fastaun 和 evolcore 都未实现。
|
|
77
|
+
|
|
78
|
+
所以 `<名字> → AID` 只能这样:
|
|
79
|
+
|
|
80
|
+
1. `ec thread peers --self <selfAid>`,肉眼/AI 匹配名字列
|
|
81
|
+
2. 匹配不上 → `ec contact list --all --format json` 看 `displayName`
|
|
82
|
+
3. 还没有 → **直接问用户要 AID**
|
|
83
|
+
|
|
84
|
+
**禁止**猜测或拼凑 AID(比如"老王"猜成 `wang.agentid.pub`)。猜错会发给陌生人。
|
|
85
|
+
|
|
86
|
+
用户说"给小罗发消息"这类话时,先确认小罗是谁——除非 `thread peers` 里唯一命中。
|
|
87
|
+
|
|
88
|
+
## 五、联系人维护
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
ec contact add <aid> # 托管会话只能加当前私聊对端,走 Owner 审核
|
|
92
|
+
ec contact approve <aid> --request-id <id> # owner/admin
|
|
93
|
+
ec contact reject <aid> --request-id <id> # owner/admin
|
|
94
|
+
ec contact block <aid> # 仅 owner
|
|
95
|
+
ec contact unblock <aid> # 仅 owner
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
要点:
|
|
99
|
+
|
|
100
|
+
- 托管会话里 `add` **不可以凭空加任何人**,只能针对当前私聊对端;结果进 `pending`,
|
|
101
|
+
给 Owner 发审核卡片,Owner 点了"通过"才变 `active`。
|
|
102
|
+
- `block` 只影响**本端入站**,不代表对端也拉黑了你。而且写操作会被 daemon 拒绝发送。
|
|
103
|
+
- Owner 关系来自 `config.json` 的 `owners[]`,**不能用 `ec contact` 改**。
|
|
104
|
+
列表里 `"source": "owner"` 的那些条目是自动物化的,不可删。
|
|
105
|
+
|
|
106
|
+
## 六、数据落在哪
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
$EVOLCORE_HOME/agents/<selfAid>/
|
|
110
|
+
├── config.json ← Agent 配置(channels/models/owners),联系人不在里面
|
|
111
|
+
├── contact.json ← ★ 联系人簿本体,独立 schema($schema_version: 3)
|
|
112
|
+
└── data/contact/
|
|
113
|
+
├── operations.jsonl ← 每次变更的操作日志
|
|
114
|
+
└── audit.jsonl ← 审计
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`contact.json` 的每条记录:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"displayName": "老王", // 可选,本地别名
|
|
122
|
+
"aliases": ["aun:xxx", "feishu:ou_xxx"], // 跨渠道身份绑定,把多个账号合并成一个人
|
|
123
|
+
"status": "active", // active | blocked | pending | declined
|
|
124
|
+
"pendingRequest": { "id": "...", "submittedAt": "...", "expiresAt": "..." }
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 七、已知缺口(不要假装它们不存在)
|
|
129
|
+
|
|
130
|
+
| 缺口 | 现状 | 怎么办 |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| `displayName` 无 CLI 写入口 | store 层 `set-display-name` mutation 已实现,`ec contact` 没暴露 | 想改只能通过 connect-menu 协议;否则先别承诺 |
|
|
133
|
+
| 名字反查 | 未实现 | 走第三、四节的顺序查找 |
|
|
134
|
+
| `search.*` 检索 | 协议有定义,SDK 与 evolcore 未实现 | 不要尝试调用,会失败 |
|
|
135
|
+
|
|
136
|
+
## 八、禁忌
|
|
137
|
+
|
|
138
|
+
1. **不要**用名字判断身份或权限——一律用 `selfAid`。
|
|
139
|
+
2. **不要**直读 `$EVOLCORE_HOME/AIDs/` 或 `contact.json`——H 类保护会拒绝。
|
|
140
|
+
3. **不要**在托管会话跑 `ec aid list` / `new` / `delete`,会被拒绝。
|
|
141
|
+
4. **不要**猜 AID。查不到就问用户。
|
|
142
|
+
5. **不要**用 `ec aid show` 找名片正文——它不返回。
|
|
143
|
+
6. 改名片、改头像是对外发布,动手前跟用户确认内容。
|
|
@@ -13,7 +13,11 @@ import { spawnSync } from 'node:child_process';
|
|
|
13
13
|
const USAGE = `ec skill —— EC 技能管理
|
|
14
14
|
|
|
15
15
|
用法:
|
|
16
|
-
ec skill
|
|
16
|
+
ec skill load <name> [--source builtin|local] [--with-frontmatter]
|
|
17
|
+
加载技能正文(输出 SKILL.md 内容 + skillDir)
|
|
18
|
+
ec skill path <name> [--json] 查看技能 SKILL.md 完整路径(含状态和时间戳)
|
|
19
|
+
ec skill list [--all] [--filter '<kw1,kw2>']... [--page <n>] [--limit <n>] [--json]
|
|
20
|
+
列出技能(默认仅启用;--all 全部;--filter 匹配名称+描述,组内逗号分隔为 OR,多组之间为 AND;超过 limit 条自动分页)
|
|
17
21
|
ec skill info <name> [--json] 查看单个技能详情
|
|
18
22
|
ec skill create <name> [--desc '...'] [--force] [--enable]
|
|
19
23
|
新建技能骨架(默认禁用)
|
|
@@ -28,8 +32,9 @@ const USAGE = `ec skill —— EC 技能管理
|
|
|
28
32
|
ec skill refresh <aid> [--json] 重建该 Agent 的技能索引(经 daemon)
|
|
29
33
|
|
|
30
34
|
说明:
|
|
35
|
+
- 加载技能用 load,输出正文末尾附带 skillDir 绝对路径,脚本路径以此为根
|
|
31
36
|
- 安装目标只能是本机级(Agent 级只放开关,不放 SKILL.md)
|
|
32
|
-
- create / install
|
|
37
|
+
- create / install 装完默认禁用,确认后再用 enable 启用(--enable 可一步到位)
|
|
33
38
|
- 内置级(随包发布)不可写、不可删
|
|
34
39
|
- 技能目录默认不再自动监控:create / install / remove / enable / disable 之后,
|
|
35
40
|
执行一次 ec skill refresh <aid> 才会更新注入给模型的技能索引
|
|
@@ -44,6 +49,16 @@ function parseArgs(argv) {
|
|
|
44
49
|
else if (a === '--force') flags.force = true;
|
|
45
50
|
else if (a === '--enable') flags.enable = true;
|
|
46
51
|
else if (a === '--help' || a === '-h') flags.help = true;
|
|
52
|
+
else if (a === '--filter') {
|
|
53
|
+
// --filter 可多次出现,累积成数组;单个值内逗号分隔
|
|
54
|
+
const val = argv[i + 1];
|
|
55
|
+
if (val !== undefined && !val.startsWith('--')) {
|
|
56
|
+
(flags.filter = flags.filter || []).push(val);
|
|
57
|
+
i++;
|
|
58
|
+
} else {
|
|
59
|
+
flags.filter = flags.filter || [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
47
62
|
else if (a.startsWith('--')) {
|
|
48
63
|
const key = a.slice(2);
|
|
49
64
|
const val = argv[i + 1];
|
|
@@ -84,8 +99,26 @@ async function main() {
|
|
|
84
99
|
};
|
|
85
100
|
|
|
86
101
|
switch (sub) {
|
|
102
|
+
case 'path':
|
|
103
|
+
emit(S.cmdPath(positional[0], { json: asJson }));
|
|
104
|
+
return 0;
|
|
105
|
+
|
|
106
|
+
case 'load': {
|
|
107
|
+
const withFrontmatter = Boolean(flags['with-frontmatter']);
|
|
108
|
+
const source = flags.source || null;
|
|
109
|
+
emit(S.cmdLoad(positional[0], { source, withFrontmatter, json: asJson }));
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
87
113
|
case 'list':
|
|
88
|
-
emit(S.cmdList({
|
|
114
|
+
emit(S.cmdList({
|
|
115
|
+
json: asJson,
|
|
116
|
+
all: Boolean(flags.all),
|
|
117
|
+
filter: flags.filter || [],
|
|
118
|
+
page: flags.page ? parseInt(flags.page, 10) || 1 : 1,
|
|
119
|
+
limit: flags.limit ? parseInt(flags.limit, 10) || 20 : 20,
|
|
120
|
+
paginateJson: flags.page !== undefined || flags.limit !== undefined,
|
|
121
|
+
}));
|
|
89
122
|
return 0;
|
|
90
123
|
|
|
91
124
|
case 'info':
|