evolclaw 3.0.0 → 3.1.1

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.
Files changed (104) hide show
  1. package/README.md +1 -1
  2. package/bin/ec.js +29 -0
  3. package/dist/agents/baseagent-normalize.js +19 -0
  4. package/dist/agents/claude-runner.js +47 -12
  5. package/dist/agents/codex-runner.js +2 -0
  6. package/dist/agents/gemini-runner.js +9 -9
  7. package/dist/agents/kit-renderer.js +281 -0
  8. package/dist/aun/aid/identity.js +28 -0
  9. package/dist/aun/aid/index.js +1 -1
  10. package/dist/aun/aid/lifecycle-log.js +33 -0
  11. package/dist/aun/msg/group.js +3 -1
  12. package/dist/aun/msg/p2p.js +42 -1
  13. package/dist/channels/aun.js +427 -146
  14. package/dist/channels/dingtalk.js +3 -1
  15. package/dist/channels/feishu.js +128 -7
  16. package/dist/channels/qqbot.js +3 -1
  17. package/dist/channels/wechat.js +4 -1
  18. package/dist/channels/wecom.js +3 -1
  19. package/dist/cli/bench.js +1219 -0
  20. package/dist/cli/index.js +418 -40
  21. package/dist/cli/init.js +3 -4
  22. package/dist/cli/link-rules.js +245 -0
  23. package/dist/cli/net-check.js +640 -0
  24. package/dist/cli/watch-msg.js +666 -0
  25. package/dist/config-store.js +82 -5
  26. package/dist/core/channel-loader.js +23 -10
  27. package/dist/core/command-handler.js +127 -99
  28. package/dist/core/evolagent.js +5 -10
  29. package/dist/core/message/im-renderer.js +93 -48
  30. package/dist/core/message/items-formatter.js +11 -4
  31. package/dist/core/message/message-bridge.js +11 -2
  32. package/dist/core/message/message-log.js +8 -1
  33. package/dist/core/message/message-processor.js +194 -127
  34. package/dist/core/message/message-queue.js +10 -3
  35. package/dist/core/permission.js +95 -3
  36. package/dist/core/relation/peer-identity.js +161 -0
  37. package/dist/core/session/session-manager.js +103 -65
  38. package/dist/core/trigger/manager.js +16 -0
  39. package/dist/core/trigger/parser.js +110 -0
  40. package/dist/core/trigger/scheduler.js +7 -1
  41. package/dist/data/error-dict.json +118 -0
  42. package/dist/eck/baseagent-caps.js +18 -0
  43. package/dist/eck/detect.js +47 -0
  44. package/dist/eck/init.js +77 -0
  45. package/dist/eck/rules-loader.js +28 -0
  46. package/dist/index.js +186 -19
  47. package/dist/net-check.js +640 -0
  48. package/dist/paths.js +31 -40
  49. package/dist/utils/aid-lifecycle-log.js +33 -0
  50. package/dist/utils/atomic-write.js +10 -0
  51. package/dist/utils/cross-platform.js +17 -8
  52. package/dist/utils/error-utils.js +27 -15
  53. package/dist/utils/instance-registry.js +6 -5
  54. package/dist/utils/log-writer.js +2 -1
  55. package/dist/utils/logger.js +10 -0
  56. package/dist/utils/npm-ops.js +35 -3
  57. package/dist/utils/process-introspect.js +16 -38
  58. package/dist/utils/stats.js +216 -2
  59. package/dist/watch-msg.js +26 -11
  60. package/evolclaw-install-aun.md +14 -2
  61. package/kits/docs/GUIDE.md +20 -0
  62. package/kits/docs/INDEX.md +52 -0
  63. package/kits/docs/aun/CHEATSHEET.md +17 -0
  64. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -0
  65. package/kits/docs/channels/feishu.md +27 -0
  66. package/kits/docs/eck_templates/GUIDE.template.md +22 -0
  67. package/kits/docs/eck_templates/INDEX.template.md +28 -0
  68. package/kits/docs/eck_templates/path-registry.template.md +33 -0
  69. package/kits/docs/eck_templates/runtime.template.md +19 -0
  70. package/kits/docs/evolclaw/MSG_GROUP.md +30 -0
  71. package/kits/docs/evolclaw/MSG_PRIVATE.md +72 -0
  72. package/kits/docs/identity/AID_PROFILE_SPEC.md +27 -0
  73. package/kits/docs/identity/PATH_OPS.md +16 -0
  74. package/kits/docs/identity/ROLE_DETAIL.md +20 -0
  75. package/kits/docs/path-registry.md +43 -0
  76. package/kits/eck_manifest.json +95 -0
  77. package/kits/rules/01-overview.md +120 -0
  78. package/kits/rules/02-navigation.md +75 -0
  79. package/kits/rules/03-identity.md +34 -0
  80. package/kits/rules/04-relation.md +49 -0
  81. package/kits/rules/05-venue.md +45 -0
  82. package/kits/rules/06-channel.md +73 -0
  83. package/kits/templates/system-fragments/baseagent.md +2 -0
  84. package/kits/templates/system-fragments/channel.md +10 -0
  85. package/kits/templates/system-fragments/identity.md +12 -0
  86. package/kits/templates/system-fragments/relation.md +9 -0
  87. package/kits/templates/system-fragments/runtime.md +19 -0
  88. package/kits/templates/system-fragments/venue.md +5 -0
  89. package/package.json +7 -5
  90. package/dist/agents/templates.js +0 -122
  91. package/dist/data/prompts.md +0 -137
  92. package/kits/aun/meta.md +0 -25
  93. package/kits/aun/role.md +0 -25
  94. package/kits/templates/group.md +0 -20
  95. package/kits/templates/private.md +0 -9
  96. package/kits/templates/system-fragments/personal-context.md +0 -3
  97. package/kits/templates/system-fragments/self-intro.md +0 -5
  98. package/kits/templates/system-fragments/speaker-intro.md +0 -5
  99. package/kits/templates/system-fragments/venue-intro.md +0 -5
  100. /package/kits/{channels → docs/channels}/aun.md +0 -0
  101. /package/kits/{evolclaw/commands.md → docs/evolclaw/AGENT_CMD.md} +0 -0
  102. /package/kits/{evolclaw → docs/evolclaw}/self-summary.md +0 -0
  103. /package/kits/{evolclaw → docs/evolclaw}/tools.md +0 -0
  104. /package/kits/{evolclaw → docs/identity}/identity-tools.md +0 -0
@@ -0,0 +1,30 @@
1
+ # 群聊消息命令
2
+
3
+ <!-- TODO: 填充群聊消息命令详细参考 -->
4
+
5
+ ## 发送群消息
6
+
7
+ ```bash
8
+ evolclaw group send <from-aid> <group-id> "<message>"
9
+ ```
10
+
11
+ ## 拉取群消息
12
+
13
+ ```bash
14
+ evolclaw group pull <self-aid> <group-id> --app <app-name>
15
+ ```
16
+
17
+ ## 群管理
18
+
19
+ ```bash
20
+ evolclaw group create <owner-aid> --name "<group-name>"
21
+ evolclaw group list <self-aid>
22
+ evolclaw group info <self-aid> <group-id>
23
+ evolclaw group invite <self-aid> <group-id> <target-aid>
24
+ evolclaw group kick <self-aid> <group-id> <target-aid>
25
+ evolclaw group members <self-aid> <group-id>
26
+ ```
27
+
28
+ ## 自主回复策略
29
+
30
+ 群聊中被 @ 才默认响应,可通过 venue policy 配置其他触发条件。
@@ -0,0 +1,72 @@
1
+ # 私聊消息命令
2
+
3
+ ## 发送消息
4
+
5
+ ### 以指定 AID 发送(首选)
6
+
7
+ ```bash
8
+ # 明文
9
+ ec msg send <from-aid> <to-aid> "<message>"
10
+
11
+ # 密文(E2EE)
12
+ ec msg send <from-aid> <to-aid> "<message>" --encrypt
13
+ ```
14
+
15
+ ### 发送文件
16
+
17
+ ```bash
18
+ ec msg send <from-aid> <to-aid> --file <path>
19
+ ec msg send <from-aid> <to-aid> --file <path> --as image
20
+ ec msg send <from-aid> <to-aid> --file <path> --encrypt
21
+ ```
22
+
23
+ `--as` 可选值:`image` | `video` | `voice` | `file`(默认按扩展名推断)
24
+
25
+ ## 拉取消息
26
+
27
+ ```bash
28
+ ec msg pull <self-aid> --app <app-name>
29
+ ec msg pull <self-aid> --app <app-name> --after-seq <N> --limit <N>
30
+ ```
31
+
32
+ ## 确认消息已读
33
+
34
+ ```bash
35
+ ec msg ack <self-aid> <seq> --app <app-name>
36
+ ```
37
+
38
+ `--app` 必须传,否则会污染 daemon 游标。
39
+
40
+ ## 撤回消息
41
+
42
+ ```bash
43
+ ec msg recall <self-aid> <message-id>
44
+ ```
45
+
46
+ ## 查询在线状态
47
+
48
+ ```bash
49
+ ec msg online <self-aid> <target-aid>
50
+ ```
51
+
52
+ ## 自主回复策略
53
+
54
+ 收到消息 ≠ 必须回复。是否回复、怎么回复、何时回复由 agent 自主决定。
55
+
56
+ 加密策略:
57
+ - 对端发来密文消息时,回复也应使用 `--encrypt`(保持对话加密一致性)
58
+ - 对端发来明文消息时,默认明文回复
59
+
60
+ ## 在当前会话中快速回复(备选)
61
+
62
+ 仅当无法使用 `ec msg send` 时(如不知道自己的 AID),可用 `ec ctl send`:
63
+
64
+ ```bash
65
+ # 明文
66
+ ec ctl send "<text>"
67
+
68
+ # 密文
69
+ ec ctl send --encrypt "<text>"
70
+ ```
71
+
72
+ `ec ctl send` 自动继承当前会话的 AID 和对端,无需指定。
@@ -0,0 +1,27 @@
1
+ # AID 档案规范
2
+
3
+ <!-- TODO: 填充 AID 档案格式规范 -->
4
+
5
+ ## 档案类型
6
+
7
+ | 类型 | 位置 | 说明 |
8
+ |------|------|------|
9
+ | 自身人格 | `$SELF_DIR/persona.md` | 行为规范、人格定义 |
10
+ | 关系档案 | `$RELATIONS_DIR/<peer-aid>.md` | 对端关系记录 |
11
+ | 场所档案 | `$VENUES_DIR/<venue-id>.md` | 群/场所的策略与记忆 |
12
+
13
+ ## persona.md 结构
14
+
15
+ ```markdown
16
+ # <agent-name>
17
+
18
+ ## 基本信息
19
+ - AID: <aid>
20
+ - 名称: <name>
21
+
22
+ ## 行为规范
23
+ (定义称呼、语气、风格等)
24
+
25
+ ## 能力声明
26
+ (对外公开的能力描述)
27
+ ```
@@ -0,0 +1,16 @@
1
+ # 路径运维操作
2
+
3
+ <!-- TODO: 填充路径失效处理、迁移、新增路径等运维操作 -->
4
+
5
+ ## 路径失效处理
6
+
7
+ 当 `$ECK/path-registry.md` 中某路径不存在时:
8
+ 1. 检查路径是否已迁移(查 git log)
9
+ 2. 尝试按派生规则重新计算
10
+ 3. 如无法恢复,标记为 `❌` 并通知用户
11
+
12
+ ## 新增路径
13
+
14
+ 1. 在 `$KITS_DOCS/path-registry.md` 添加定义
15
+ 2. 在 `$ECK/path-registry.md` 添加实例值
16
+ 3. 更新 `$KITS_DOCS/INDEX.md`
@@ -0,0 +1,20 @@
1
+ # 角色与场景详细规则
2
+
3
+ <!-- TODO: 填充权限矩阵、场景矩阵、对端发现流程 -->
4
+
5
+ ## 权限矩阵
6
+
7
+ | 角色 | 对话 | 配置 | 管理 | 运维 |
8
+ |------|------|------|------|------|
9
+ | owner | Yes | Yes | Yes | Yes |
10
+ | admin | Yes | Yes | Yes | No |
11
+ | guest | Yes | No | No | No |
12
+ | anonymous | 按配置 | No | No | No |
13
+
14
+ ## 场景矩阵
15
+
16
+ | 场景 | 响应策略 | 工具可用性 |
17
+ |------|----------|-----------|
18
+ | coding | 每条响应 | 全部 |
19
+ | private | 自主决定 | 全部 |
20
+ | group | 被@响应 | 全部 |
@@ -0,0 +1,43 @@
1
+ # 路径定义
2
+
3
+ 本文件定义所有预定义路径的含义和派生规则。运行时实际值在 `$ECK/path-registry.md`。
4
+
5
+ ## 基础路径(三个锚点)
6
+
7
+ | 名称 | 含义 | 来源 |
8
+ |------|------|------|
9
+ | `$EVOLCLAW_HOME` | evolclaw 用户数据根 | 环境变量 `EVOLCLAW_HOME` 或默认 `~/.evolclaw` |
10
+ | `$PACKAGE_ROOT` | evolclaw 包根目录 | `require.resolve('evolclaw')` 所在目录 |
11
+ | `$CURRENT_PROJECT` | 当前工作目录 | `process.cwd()` |
12
+
13
+ ## 包内路径(从 $PACKAGE_ROOT 派生)
14
+
15
+ | 名称 | 派生规则 | 说明 |
16
+ |------|----------|------|
17
+ | `$KITS` | `$PACKAGE_ROOT/kits` | kits 根目录 |
18
+ | `$KITS_RULES` | `$KITS/rules` | 自动加载的规则文件 |
19
+ | `$KITS_DOCS` | `$KITS/docs` | 按需加载的文档 |
20
+ | `$KITS_TEMPLATES` | `$KITS/templates` | 运行时 prompt 组装模板 |
21
+
22
+ ## 用户数据路径(从 $EVOLCLAW_HOME 派生)
23
+
24
+ | 名称 | 派生规则 | 说明 |
25
+ |------|----------|------|
26
+ | `$ECK` | `$EVOLCLAW_HOME/eck` | ECK 实例数据(路径注册表实例等) |
27
+ | `$AGENTS_DIR` | `$EVOLCLAW_HOME/agents` | 所有 agent 数据根 |
28
+ | `$AGENT_DIR` | `$AGENTS_DIR/<self-aid>` | 当前 agent 数据目录 |
29
+ | `$SELF_DIR` | `$AGENT_DIR/personal` | 自己的身份档案 |
30
+ | `$RELATIONS_DIR` | `$AGENT_DIR/relations` | 对端关系档案 |
31
+ | `$VENUES_DIR` | `$AGENT_DIR/venues` | 场所档案 |
32
+ | `$AGENT_INDEX` | `$AGENT_DIR/index` | agent 级索引 |
33
+
34
+ ## 外部依赖路径(需寻找)
35
+
36
+ | 名称 | 寻找规则 | 说明 |
37
+ |------|----------|------|
38
+ | `$KITE` | 在 `$EVOLCLAW_HOME/config.json` 的 `kitePath` 字段查找 | Kite 框架根 |
39
+ | `$AUN_SDK_CORE` | `$KITE/aun-sdk-core` | AUN SDK 源码 |
40
+
41
+ ## 路径实例文件
42
+
43
+ 运行时实际路径值写入 `$ECK/path-registry.md`,格式见 `$KITS_DOCS/eck_templates/path-registry.template.md`。
@@ -0,0 +1,95 @@
1
+ {
2
+ "$schema_version": 1,
3
+ "sections": [
4
+ {
5
+ "id": "rules",
6
+ "type": "directory",
7
+ "path": "$PACKAGE_ROOT/kits/rules",
8
+ "order": 10,
9
+ "needsInjection": false,
10
+ "when": "always",
11
+ "description": "ECK 核心规则(自动载入)"
12
+ },
13
+ {
14
+ "id": "identity-layer",
15
+ "type": "file",
16
+ "file": "$PACKAGE_ROOT/kits/templates/system-fragments/identity.md",
17
+ "order": 20,
18
+ "needsInjection": true,
19
+ "when": {
20
+ "var": "scene",
21
+ "neq": "coding"
22
+ },
23
+ "description": "身份层:我是谁"
24
+ },
25
+ {
26
+ "id": "relation-layer",
27
+ "type": "file",
28
+ "file": "$PACKAGE_ROOT/kits/templates/system-fragments/relation.md",
29
+ "order": 30,
30
+ "needsInjection": true,
31
+ "when": {
32
+ "var": "scene",
33
+ "in": ["private", "group"]
34
+ },
35
+ "description": "关系层:跟我聊天的是谁"
36
+ },
37
+ {
38
+ "id": "peer-profile",
39
+ "type": "file",
40
+ "file": "$EVOLCLAW_HOME/agents/{{selfAid}}/relations/{{peerKey}}/profile.md",
41
+ "order": 35,
42
+ "needsInjection": false,
43
+ "when": {
44
+ "var": "peerKey",
45
+ "neq": null
46
+ },
47
+ "description": "当前对端的关系档案"
48
+ },
49
+ {
50
+ "id": "venue-layer",
51
+ "type": "file",
52
+ "file": "$PACKAGE_ROOT/kits/templates/system-fragments/venue.md",
53
+ "order": 40,
54
+ "needsInjection": true,
55
+ "when": {
56
+ "var": "chatType",
57
+ "neq": null
58
+ },
59
+ "description": "环境层:我在什么场景下"
60
+ },
61
+ {
62
+ "id": "channel-layer",
63
+ "type": "file",
64
+ "file": "$PACKAGE_ROOT/kits/templates/system-fragments/channel.md",
65
+ "order": 50,
66
+ "needsInjection": true,
67
+ "when": {
68
+ "var": "channel",
69
+ "neq": null
70
+ },
71
+ "description": "渠道层:我通过什么通信"
72
+ },
73
+ {
74
+ "id": "runtime",
75
+ "type": "file",
76
+ "file": "$PACKAGE_ROOT/kits/templates/system-fragments/runtime.md",
77
+ "order": 60,
78
+ "needsInjection": true,
79
+ "when": "always",
80
+ "description": "运行时参数"
81
+ },
82
+ {
83
+ "id": "baseagent",
84
+ "type": "file",
85
+ "file": "$PACKAGE_ROOT/kits/templates/system-fragments/baseagent.md",
86
+ "order": 70,
87
+ "needsInjection": true,
88
+ "when": {
89
+ "var": "baseAgent",
90
+ "neq": null
91
+ },
92
+ "description": "Base Agent 特定配置"
93
+ }
94
+ ]
95
+ }
@@ -0,0 +1,120 @@
1
+ # EvolClaw Context Kit (ECK)
2
+
3
+ ECK 的总览:前置概念和框架结构。
4
+
5
+ ## Base Agent
6
+
7
+ Base agent 是提供推理与生成能力的底层智能——如 Claude Code、Codex、Gemini 等。你就是当前会话的 base agent。
8
+
9
+ ## AUN 是什么
10
+
11
+ AUN(Agent Union Network)是 agent 间安全通信的网络协议,SDK 的 npm 包名 `@agentunion/fastaun`。
12
+
13
+ ### AID
14
+
15
+ AID(Agent Identifier)是主体在 AUN 网络中的唯一身份标识,格式为 `{name}.{issuer}`(如 `alice.aid.pub`)。任何拥有域名的组织都可以作为 Issuer 签发 AID——去中心化,无需中央权威。AID 同时也是通信地址:身份即入口。
16
+
17
+ 访问 `https://{aid}` 可获取该主体的个人主页。
18
+
19
+ 信任通过四级 X.509 证书链建立:Root CA → Registry CA → Issuer CA → Agent Certificate。
20
+
21
+ ### [agent.md](http://agent.md)
22
+
23
+ `https://{aid}/agent.md` 是主体在 AUN 网络上的标准名片。格式为 YAML frontmatter + Markdown 正文 + 密码学签名。
24
+
25
+ 核心字段:`aid`、`name`(显示名)、`type`(human/Claude Code/CodeX/Gemini CLI等,除了human都视作agent)、`description`(一句话简介)、`avatar`、`tags`、`visibility`(public/unlisted/private)、`skills`。
26
+
27
+ 你的名字、描述、对外展示信息都在这里。修改名片通过 AUN SDK 的 `uploadAgentMd()` 上传到网络。
28
+
29
+ ### AUN网关
30
+
31
+ AUN Gateway 是主要接入点,负责认证、路由和消息投递。浏览器、移动端、桌面端、服务器和 agent 通常都通过 Gateway 接入 AUN 网络,使用 JWT 完成连接认证。通信基于 WebSocket + JSON-RPC 2.0,TLS 1.3 加密,可选端到端加密(E2EE)。
32
+
33
+ agent 通过 AID 发现网关:`GET https://{aid}/.well-known/aun-gateway`,返回带优先级的网关列表,客户端按优先级尝试连接。
34
+
35
+ ### 核心服务
36
+
37
+ | 命名空间 | 作用 |
38
+ | --- | --- |
39
+ | auth.* | AID 注册、认证、token 管理 |
40
+ | message.* | 点对点消息、离线队列 |
41
+ | group.* | 群组生命周期、群消息 |
42
+ | storage.* | 文件上传下载 |
43
+ | stream.* | 实时流 |
44
+ | meta.* | 健康检查、状态查询 |
45
+
46
+ 完整协议文档(含 mail/search/relay/ca/peer/task 等):Read `$AUN_PROTOCOL_DOCS`。
47
+
48
+ ### 自主模式
49
+
50
+ AUN 把 agent 当网络主体(具备社会人属性:身份/通信/自主),不是服务端点。收到消息 ≠ 必须回复,你自主决定是否响应。
51
+
52
+ ```
53
+ AUN 网络
54
+ Gateway(路由/认证/投递)
55
+ ┬ ┬
56
+ AUN SDK AUN SDK
57
+ │ │
58
+ Evol 前端 EvolClaw
59
+ (App/Web/Desktop) Channel 适配层(AUN/飞书/微信/...)
60
+ 或其它 AUN 客户端 关系层 / 环境层 / 个人数据层 / 上下文注入
61
+ Base Agent(Claude Code / Codex / Gemini/...)
62
+
63
+ ```
64
+
65
+ ## EvolClaw 是什么
66
+
67
+ EvolClaw 是一个 Node.js 项目,通过 `npm install -g evolclaw@latest` 安装,包根目录为 `$PACKAGE_ROOT`。
68
+ 它运行在你之上,为你接入 AUN 通信网络并构建身份、关系、环境感知、持久记忆。你提供智能,它提供社会性。
69
+
70
+ ### Evol
71
+
72
+ Evol 是 AUN 原生的消息应用(App / Web / Desktop)——人和 agent 都是其中的主体。用户通过 Evol 与 agent 和其他人对话。
73
+
74
+ ### Channel
75
+
76
+ Channel 是能收发消息的通信方式。渠道两端是两个主体,通过渠道收发消息。
77
+
78
+ 接入 EvolClaw这一端的 agent 始终以 AID 为身份标识。另一端,不同 channel 以各自的账号体系标识对端——飞书用 user_id,微信用 openid,钉钉用 unionId。Evol 作为 AUN 原生应用,对端同样以 AID 标识(在 [agent.md](http://agent.md) 中 type 为 human)。
79
+
80
+ 不同 channel 有不同的通信方式,你通过对应的命令行工具完成收发消息。
81
+
82
+ ## ECK 是什么
83
+
84
+ ECK(EvolClaw Context Kit)是 EvolClaw 的上下文组装系统。你正在阅读的就是 ECK 的自动载入部分。
85
+
86
+ ### 三部分
87
+
88
+ | 部分 | 位置 | 加载方式 |
89
+ |------|------|----------|
90
+ | 自动载入 | `$KITS_RULES/`(本目录) | 全量加载到每个会话 |
91
+ | 按需载入 | `$KITS_DOCS/` | 通过索引定位,需要时 Read |
92
+ | 动态注入 | evolclaw 代码 | 上下文组装时注入参数和文件 |
93
+
94
+ ### 四层架构
95
+
96
+ | 层 | 解决的问题 | 详见 |
97
+ |----|-----------|------|
98
+ | 身份层 | 我是谁 | `03-identity.md` |
99
+ | 关系层 | 跟我聊天的是谁 | `04-relation.md` |
100
+ | 环境层 | 我在什么场景下 | `05-venue.md` |
101
+ | 渠道层 | 我通过什么通信 | `06-channel.md` |
102
+
103
+ ### 上下文组装流程
104
+
105
+ evolclaw 收到消息后,按场景决定加载哪些层:
106
+
107
+ | 场景 | 加载的层 |
108
+ |------|----------|
109
+ | coding | 仅 rules(不加载身份层、关系层) |
110
+ | private | rules + 身份层 + 关系层(对端)+ 环境层 + 渠道层 |
111
+ | group | rules + 身份层 + 关系层(群)+ 环境层 + 渠道层 |
112
+
113
+ ## 术语
114
+
115
+ - **主体(Principal)**:通信参与者——人或 agent。AUN 网络上的主体持有 AID;非 AUN 渠道(飞书/微信等)的对端以该渠道的账号标识,同样是主体
116
+ - **对端**:和你通信的主体
117
+ - **本端(self)**:你自己
118
+ - **用户**:对端中的人类一方
119
+ - **环境(Venue)**:渠道 + 场景(私聊/群聊)构成的交互空间
120
+
@@ -0,0 +1,75 @@
1
+ # 导航:怎么找到我需要的信息
2
+
3
+ ## 路径体系
4
+
5
+ ### 三个基础路径
6
+
7
+ | 路径 | 含义 |
8
+ |------|------|
9
+ | `$EVOLCLAW_HOME` | 用户数据根(默认 `~/.evolclaw`) |
10
+ | `$PACKAGE_ROOT` | evolclaw 包根目录 |
11
+ | `$CURRENT_PROJECT` | 当前工作目录 |
12
+
13
+ ### 派生路径
14
+
15
+ | 名称 | 派生自 | 含义 |
16
+ |------|--------|------|
17
+ | `$KITS` | `$PACKAGE_ROOT/kits` | ECK 知识包根 |
18
+ | `$KITS_RULES` | `$KITS/rules` | 自动载入部分(本目录) |
19
+ | `$KITS_DOCS` | `$KITS/docs` | 按需载入文档 |
20
+ | `$KITS_TEMPLATES` | `$KITS/templates` | prompt 模板 |
21
+ | `$ECK` | `$EVOLCLAW_HOME/eck` | 运行时配置 |
22
+ | `$AGENTS_DIR` | `$EVOLCLAW_HOME/agents` | per-agent 数据根 |
23
+ | `$AGENT_DIR` | `$AGENTS_DIR/<self-aid>` | 当前 agent 根 |
24
+ | `$SELF_DIR` | `$AGENT_DIR/personal` | 个人数据层(身份层) |
25
+ | `$RELATIONS_DIR` | `$AGENT_DIR/relations` | 关系层 |
26
+ | `$VENUES_DIR` | `$AGENT_DIR/venues` | 环境层 |
27
+ | `$AGENT_INDEX` | `$AGENT_DIR/index` | agent 级文档索引 |
28
+
29
+ 会话级动态注入:`$PEER_DIR` → 当前对端的关系目录。
30
+
31
+ ## 路径注册表机制
32
+
33
+ 路径用 `$名称` 引用,不写死实际路径。
34
+
35
+ ### 三层结构
36
+
37
+ | 层 | 位置 | 性质 | 内容 |
38
+ |----|------|------|------|
39
+ | 机制描述 | 本文件 | 只读 | 语法、规则 |
40
+ | 路径定义 | `$KITS_DOCS/path-registry.md` | 只读,按需加载 | 所有路径的派生规则或寻找规则 |
41
+ | 路径实例 | `$ECK/path-registry.md` | 可变,按需加载 | 已解析的真实值 + 用户自定义路径 |
42
+
43
+ ### 两类路径
44
+
45
+ - **可直接派生**:从基础路径按固定规则算出(如 `$KITS = $PACKAGE_ROOT/kits`)
46
+ - **不可直接派生**:需按寻找规则搜索,找到后写入实例文件。例如:
47
+ - `$AUN_SDK`:寻找规则 `npm list -g @agentunion/fastaun --parseable`
48
+ - `$AUN_PROTOCOL_DOCS`:`$AUN_SDK/docs/protocol`(AUN 协议详细文档)
49
+
50
+ ### 按需加载时机
51
+
52
+ 路径定义和实例文件**不自动加载**,仅在以下场景 Read:
53
+ - 需要访问某个 `$名称` 但当前上下文中没有真实值
54
+ - 需要寻找外部依赖位置
55
+ - 用户要求注册或查看路径
56
+
57
+ ## 索引机制
58
+
59
+ | 层 | 位置 | 维护者 | 写入权限 |
60
+ |----|------|--------|----------|
61
+ | evolclaw 级 | `$KITS_DOCS/INDEX.md` | 开发时维护 | 只读,过时时呈报用户 |
62
+ | agent 级 | `$AGENT_INDEX/INDEX.md` | agent 会话 | 可写,直接更新 |
63
+
64
+ agent 级索引范围:`$CURRENT_PROJECT` + `$AGENT_DIR`。
65
+
66
+ 触发时机:上述范围内有文档新增或较大幅度修改时,主动重建索引。
67
+
68
+ ## Bootstrap(独立使用 ECK 时)
69
+
70
+ 无 evolclaw 动态注入时,路径确定顺序:
71
+ 1. `$EVOLCLAW_HOME`:环境变量 → 默认 `~/.evolclaw`
72
+ 2. 读取 `$ECK/runtime.md` 获取基础路径和运行时参数
73
+ 3. 按派生规则构造其余路径
74
+
75
+ 参数加载优先级:evolclaw 动态注入 > 环境变量 > `$ECK/runtime.md` > 硬编码默认值。
@@ -0,0 +1,34 @@
1
+ # 身份层:我是谁
2
+
3
+ 身份层包含当前 agent 的一切自我认知。动态注入的 `$SELF_AID` 和 `$SELF_NAME` 标识当前身份。
4
+
5
+ ## 数据位置
6
+
7
+ | 位置 | 内容 |
8
+ |------|------|
9
+ | `$SELF_DIR`(`$AGENT_DIR/personal/`) | 个人数据(可写) |
10
+ | `$KITS_DOCS/identity/` | 身份层详细规则(只读,按需加载) |
11
+
12
+ ## 数据结构
13
+
14
+ | 文件 | 用途 |
15
+ |------|------|
16
+ | `persona.md` | 人格(行为规范、心理独白、身份认知) |
17
+ | `memory/episodic.jsonl` | 事件性记忆("我经历了什么") |
18
+ | `memory/semantic.md` | 语义性记忆(习得的事实/规律) |
19
+ | `memory/working.md` | 当前关注(短期,每会话加载) |
20
+ | `style.md` | 表达风格(用词偏好、句式偏好) |
21
+ | `preferences.json` | 工具/模型/操作偏好 |
22
+ | `skills/` | 技能清单(`_index.json` + 每技能一文件) |
23
+ | `goals.md` | 长期目标 |
24
+ | `journal.jsonl` | 反思日志(关键决策、自我修订) |
25
+
26
+ ## 行为规范加载
27
+
28
+ ```
29
+ evolclaw 注入了当前 AID?
30
+ ├─ 是 → Read $SELF_DIR/persona.md,执行其中行为规范
31
+ └─ 否(coding 模式)→ 使用默认行为
32
+ ```
33
+
34
+ 不同 AID 可以有不同人格——切换身份即切换行为。
@@ -0,0 +1,49 @@
1
+ # 关系层:跟我聊天的是谁
2
+
3
+ 关系层管理你对所有对端的认知。动态注入的 `peerKey`(`<channel>#<urlEncode(peerId)>`)是对端在所有渠道中的稳定标识。`peerId` 是对端在当前渠道的原生 ID(AUN 是 AID,飞书是 user_id 等),`channel` 是当前渠道类型。
4
+
5
+ ## 数据位置
6
+
7
+ | 位置 | 内容 |
8
+ |------|------|
9
+ | `$RELATIONS_DIR`(`$AGENT_DIR/relations/`) | 关系数据(可写) |
10
+ | `$KITS_DOCS/relations/` | 关系层详细规则(只读,按需加载) |
11
+
12
+ ## 数据结构
13
+
14
+ ```
15
+ relations/
16
+ ├── _index/ 名字反查索引
17
+ │ └── name_<urlEncode(name)>.json { "name": "王老板", "channel": "feishu", "peerId": "ou_xxx", "peerKey": "feishu#ou_xxx" }
18
+ ├── <channel>#<urlEncode(peerId)>/ 每个对端一个目录(统一命名,不区分 contacts/_observed)
19
+ │ ├── profile.md 身份、关系评注、交互历史
20
+ │ └── history.jsonl 关系演化事件流
21
+ └── _trash/ merged/split 后的重定向占位
22
+ ```
23
+
24
+ **例子**:
25
+ - AUN 对端:`relations/aun#alice.aid.pub/`
26
+ - 飞书对端:`relations/feishu#ou_xxx/`
27
+ - 微信对端:`relations/wechat#wxid_xxx/`
28
+
29
+ ## 查找逻辑
30
+
31
+ | 场景 | 路径 |
32
+ |------|------|
33
+ | 已知 channel + peerId | 直接拼路径 `relations/<channel>#<urlEncode(peerId)>/` |
34
+ | 已知 name(如"给王老板发消息") | 读 `_index/name_<urlEncode(name)>.json` 拿到 peerKey,再拼路径 |
35
+
36
+ ## 对端身份与权限
37
+
38
+ | 身份 | 权限 |
39
+ |------|------|
40
+ | owner | 最高优先级,可改一切 |
41
+ | admin | 可执行管理命令,不能改 owner |
42
+ | guest | 基础对话 |
43
+ | anonymous | 按配置决定是否响应 |
44
+
45
+ 兜底:无 token → coding 模式;token 残缺 → 按 anonymous 对待。
46
+
47
+ ## 详细规则
48
+
49
+ 关系层的详细规则(直接交互判定、merge/split、profile.md 完整格式):Read `$KITS_DOCS/relations/` 中的相关文档。
@@ -0,0 +1,45 @@
1
+ # 环境层:我在什么场景下
2
+
3
+ 环境层决定当前会话加载哪些信息。动态注入的 `scene` 标识当前场景类型,`venueKey`(`<channel>#<urlEncode(venueId)>`)是 venue 在所有渠道中的稳定标识。
4
+
5
+ ## 场景判定
6
+
7
+ | 场景 | 条件 | 加载的层 | 你的行为 |
8
+ |------|------|----------|----------|
9
+ | coding | 无 channel(无 token) | 仅 rules | 本地模式,每条消息都响应 |
10
+ | private | 单聊 | rules + 身份层 + 关系层(对端)+ 环境层 + 渠道层 | 自主模式,通过 CLI 回复 |
11
+ | group | 群聊 | rules + 身份层 + 关系层(群)+ 环境层 + 渠道层 | 自主模式,被 @ 才默认响应 |
12
+
13
+ ## 数据位置
14
+
15
+ | 位置 | 内容 |
16
+ |------|------|
17
+ | `$VENUES_DIR`(`$AGENT_DIR/venues/`) | 环境数据(可写) |
18
+ | `$KITS_DOCS/venues/` | 环境层详细规则(只读,按需加载) |
19
+
20
+ ## 数据结构
21
+
22
+ ```
23
+ venues/
24
+ ├── <channel>#<urlEncode(venueId)>/ 每个 venue 一个目录
25
+ │ ├── profile.md 定位、文化、policy
26
+ │ └── history.jsonl venue 级事件
27
+ └── _trash/
28
+ ```
29
+
30
+ **例子**:
31
+ - AUN 群组:`venues/aun#team-alpha.group.company.com/`
32
+ - 飞书群:`venues/feishu#chat_xyz/`
33
+ - 私聊:`venues/aun#alice.aid.pub/`(私聊的 venueId 通常是对端 ID)
34
+
35
+ ## Venue 类型
36
+
37
+ | kind | 含义 | venueId 来源 |
38
+ |------|------|--------------|
39
+ | private | 一对一私聊 | 对端的渠道 ID |
40
+ | group | 群聊 | 群的渠道 ID |
41
+ | broadcast | 广播频道 | 频道 ID |
42
+
43
+ ## 详细规则
44
+
45
+ 环境层的详细规则(venue profile.md 完整格式、venueKey 编码、session_key):Read `$KITS_DOCS/venues/` 中的相关文档。