evolcore 0.0.25 → 0.0.26

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 (231) hide show
  1. package/CHANGELOG.md +607 -565
  2. package/LICENSE +21 -21
  3. package/README.md +455 -455
  4. package/bin/codex-managed-acl.ps1 +160 -160
  5. package/bin/codex-managed-hook.mjs +208 -208
  6. package/bin/ec-safe-output.js +327 -327
  7. package/bin/ec.js +40 -29
  8. package/bin/install-codex-managed-hooks.mjs +582 -555
  9. package/dist/agents/baseagent.js +96 -46
  10. package/dist/agents/claude-runner.js +50 -12
  11. package/dist/agents/codex/app-server-client.js +13 -5
  12. package/dist/agents/codex/catalog.js +1 -1
  13. package/dist/agents/codex/diagnostics.js +34 -1
  14. package/dist/agents/codex-runner.js +121 -38
  15. package/dist/agents/ecagent-runner.js +4 -9
  16. package/dist/agents/gemini-runner.js +2 -7
  17. package/dist/agents/runner-types.js +25 -17
  18. package/dist/aun/aid/agentmd.js +81 -8
  19. package/dist/aun/aid/client.js +1 -1
  20. package/dist/aun/aid/identity.js +1 -1
  21. package/dist/aun/aid/index.js +1 -1
  22. package/dist/aun/aid/store.js +17 -13
  23. package/dist/aun/menu-client.js +74 -0
  24. package/dist/aun/msg/group.js +1 -1
  25. package/dist/aun/msg/managed-operation.js +1 -1
  26. package/dist/aun/msg/p2p.js +6 -1
  27. package/dist/aun/msg/upload.js +30 -22
  28. package/dist/channels/aun.js +329 -94
  29. package/dist/cli/agent-command.js +105 -84
  30. package/dist/cli/agent-create.js +112 -10
  31. package/dist/cli/agent.js +16 -5
  32. package/dist/cli/aun-commands.js +297 -296
  33. package/dist/cli/bench.js +20 -20
  34. package/dist/cli/config.js +47 -28
  35. package/dist/cli/contact.js +70 -13
  36. package/dist/cli/ctl-command.js +22 -22
  37. package/dist/cli/daemon-commands.js +105 -40
  38. package/dist/cli/diag.js +31 -0
  39. package/dist/cli/fs-command.js +67 -67
  40. package/dist/cli/handoff-command.js +41 -9
  41. package/dist/cli/index.js +83 -77
  42. package/dist/cli/link-rules.js +21 -21
  43. package/dist/cli/managed-command-guard.js +3 -0
  44. package/dist/cli/menu-client.js +46 -31
  45. package/dist/cli/net-check.js +22 -22
  46. package/dist/cli/queue-command.js +29 -29
  47. package/dist/cli/response.js +30 -30
  48. package/dist/cli/restart-monitor.js +87 -40
  49. package/dist/cli/stats.js +51 -51
  50. package/dist/cli/trigger-command.js +56 -56
  51. package/dist/config/builtin-roles.js +1 -0
  52. package/dist/config/config-operation-service.js +145 -0
  53. package/dist/config/contact-operation-service.js +96 -7
  54. package/dist/config/resolved-config-op.js +27 -7
  55. package/dist/core/agent-application-service.js +2 -1
  56. package/dist/core/auth/authorization-audit.js +20 -12
  57. package/dist/core/auth/operation-authorizer.js +25 -4
  58. package/dist/core/auth/operation-catalog.js +35 -4
  59. package/dist/core/auth/remote-access-store.js +40 -1
  60. package/dist/core/bootstrap-service.js +1 -1
  61. package/dist/core/command/command-handler.js +83 -26
  62. package/dist/core/command/diag-service.js +118 -0
  63. package/dist/core/command/menu-catalog.js +12 -3
  64. package/dist/core/command/menu-handler.js +47 -26
  65. package/dist/core/command/menu-protocol.js +5 -0
  66. package/dist/core/command/menu-token-store.js +41 -8
  67. package/dist/core/command/slash-gate.js +34 -4
  68. package/dist/core/command/slash-handler.js +86 -21
  69. package/dist/core/handoff/runtime.js +205 -27
  70. package/dist/core/handoff/store.js +193 -4
  71. package/dist/core/message/im-renderer.js +72 -21
  72. package/dist/core/message/message-bridge.js +69 -9
  73. package/dist/core/message/message-queue.js +26 -0
  74. package/dist/core/message/message-utils.js +1 -0
  75. package/dist/core/message/response-engine.js +47 -28
  76. package/dist/core/model/catalog-service.js +79 -49
  77. package/dist/core/model/context-window-suffix.js +33 -0
  78. package/dist/core/model/model-catalog.js +1 -1
  79. package/dist/core/model/model-permission.js +12 -3
  80. package/dist/core/permission/ec-command-parser.js +51 -12
  81. package/dist/core/permission/sandbox-runtime.js +36 -14
  82. package/dist/core/permission/tool-policy.js +2 -1
  83. package/dist/index.js +280 -163
  84. package/dist/ipc.js +54 -2
  85. package/dist/response-system/engines/v1/proactive-flow.js +59 -2
  86. package/dist/stats/billing.js +41 -15
  87. package/dist/stats/db.js +159 -159
  88. package/dist/stats/eck-vars.js +9 -9
  89. package/dist/stats/price-resolver.js +28 -10
  90. package/dist/stats/query.js +139 -139
  91. package/dist/stats/role-budget.js +6 -6
  92. package/dist/stats/writer.js +51 -51
  93. package/dist/utils/cross-platform.js +30 -1
  94. package/dist/utils/error-dict.json +160 -160
  95. package/dist/utils/error-utils.js +21 -0
  96. package/dist/utils/evolcore-version.js +129 -0
  97. package/dist/utils/logger.js +3 -1
  98. package/dist/utils/macos-autostart.js +22 -22
  99. package/dist/utils/model-prices.jsonl +23 -23
  100. package/dist/utils/npm-ops.js +176 -35
  101. package/dist/utils/welcome.js +22 -22
  102. package/ecagent/LICENSE +21 -21
  103. package/ecagent/NOTICE +11 -11
  104. package/ecagent/README.md +61 -61
  105. package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
  106. package/ecagent/dist/harness/compaction/compaction.js +83 -83
  107. package/ecagent/dist/harness/messages.js +7 -7
  108. package/kits/docs/GUIDE.md +20 -20
  109. package/kits/docs/INDEX.md +66 -66
  110. package/kits/docs/aun/CHEATSHEET.md +19 -19
  111. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
  112. package/kits/docs/channels/aun.md +56 -56
  113. package/kits/docs/channels/feishu.md +56 -56
  114. package/kits/docs/context-assembly.md +364 -364
  115. package/kits/docs/eck_templates/GUIDE.template.md +22 -22
  116. package/kits/docs/eck_templates/INDEX.template.md +28 -28
  117. package/kits/docs/eck_templates/path-registry.template.md +33 -33
  118. package/kits/docs/eck_templates/runtime.template.md +19 -19
  119. package/kits/docs/evolcore/INDEX.md +71 -71
  120. package/kits/docs/evolcore/agent-create.md +170 -165
  121. package/kits/docs/evolcore/agent.md +66 -66
  122. package/kits/docs/evolcore/aid.md +60 -60
  123. package/kits/docs/evolcore/codex-windows-sandbox.md +146 -146
  124. package/kits/docs/evolcore/config.md +202 -195
  125. package/kits/docs/evolcore/contact.md +75 -68
  126. package/kits/docs/evolcore/ctl.md +46 -46
  127. package/kits/docs/evolcore/event.md +216 -216
  128. package/kits/docs/evolcore/fs-architecture.md +1215 -1215
  129. package/kits/docs/evolcore/fs.md +110 -110
  130. package/kits/docs/evolcore/group-collaboration.md +243 -243
  131. package/kits/docs/evolcore/group-fs.md +17 -17
  132. package/kits/docs/evolcore/group-rules.md +251 -251
  133. package/kits/docs/evolcore/group.md +152 -152
  134. package/kits/docs/evolcore/menu-client.md +42 -34
  135. package/kits/docs/evolcore/model.md +50 -50
  136. package/kits/docs/evolcore/msg.md +166 -165
  137. package/kits/docs/evolcore/response.md +75 -75
  138. package/kits/docs/evolcore/rpc.md +37 -37
  139. package/kits/docs/evolcore/self-summary.md +29 -29
  140. package/kits/docs/evolcore/stats.md +83 -83
  141. package/kits/docs/evolcore/storage.md +50 -50
  142. package/kits/docs/evolcore/trigger.md +575 -575
  143. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
  144. package/kits/docs/identity/PATH_OPS.md +16 -16
  145. package/kits/docs/identity/ROLE_DETAIL.md +25 -25
  146. package/kits/docs/identity/identity-tools.md +26 -26
  147. package/kits/docs/path-registry.md +62 -62
  148. package/kits/docs/prompt-loading-architecture.md +269 -269
  149. package/kits/docs/venues/aun-group.md +45 -45
  150. package/kits/docs/venues/aun-private.md +10 -10
  151. package/kits/docs/venues/client-desktop.md +10 -10
  152. package/kits/docs/venues/client-mobile.md +10 -10
  153. package/kits/docs/venues/feishu-group.md +13 -13
  154. package/kits/docs/venues/feishu-private.md +9 -9
  155. package/kits/docs/venues/group.md +37 -25
  156. package/kits/docs/venues/private.md +10 -10
  157. package/kits/eck_manifest.auxiliary.json +43 -43
  158. package/kits/eck_manifest.json +190 -190
  159. package/kits/eck_message_manifest.json +74 -74
  160. package/kits/migrations/README-role-config-v4.md +32 -32
  161. package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
  162. package/kits/migrations/migrate-role-config-v4.mjs +614 -614
  163. package/kits/migrations/migrate-role-config-v5.mjs +365 -365
  164. package/kits/migrations/rename-config-file.mjs +99 -99
  165. package/kits/rules/01-overview.md +162 -162
  166. package/kits/rules/02-navigation.md +96 -96
  167. package/kits/rules/03-identity.md +36 -36
  168. package/kits/rules/04-relation.md +75 -75
  169. package/kits/rules/05-venue.md +60 -60
  170. package/kits/rules/06-channel.md +63 -63
  171. package/kits/schemas/_meta.json +53 -53
  172. package/kits/schemas/agent-config.schema.1.json +177 -177
  173. package/kits/schemas/agent-config.schema.10.json +395 -395
  174. package/kits/schemas/agent-config.schema.11.json +421 -421
  175. package/kits/schemas/agent-config.schema.12.json +427 -427
  176. package/kits/schemas/agent-config.schema.2.json +239 -239
  177. package/kits/schemas/agent-config.schema.3.json +119 -119
  178. package/kits/schemas/agent-config.schema.4.json +208 -208
  179. package/kits/schemas/agent-config.schema.5.json +326 -326
  180. package/kits/schemas/agent-config.schema.6.json +322 -322
  181. package/kits/schemas/agent-config.schema.7.json +303 -303
  182. package/kits/schemas/agent-config.schema.8.json +304 -304
  183. package/kits/schemas/agent-config.schema.9.json +364 -364
  184. package/kits/schemas/contact-book.schema.1.json +36 -36
  185. package/kits/schemas/contact-book.schema.2.json +43 -43
  186. package/kits/schemas/contact-book.schema.3.json +67 -67
  187. package/kits/schemas/daemon.schema.1.json +91 -91
  188. package/kits/schemas/daemon.schema.2.json +101 -101
  189. package/kits/schemas/daemon.schema.3.json +123 -123
  190. package/kits/schemas/daemon.schema.4.json +136 -136
  191. package/kits/schemas/daemon.schema.5.json +135 -135
  192. package/kits/schemas/daemon.schema.6.json +131 -131
  193. package/kits/schemas/defaults.schema.1.json +81 -81
  194. package/kits/schemas/defaults.schema.2.json +85 -85
  195. package/kits/schemas/defaults.schema.3.json +73 -73
  196. package/kits/schemas/defaults.schema.4.json +107 -107
  197. package/kits/schemas/defaults.schema.5.json +119 -119
  198. package/kits/schemas/menu-exec-schema-commands.md +208 -208
  199. package/kits/schemas/migrations/README.md +30 -30
  200. package/kits/schemas/relation-config.schema.1.json +158 -158
  201. package/kits/schemas/relation-config.schema.2.json +73 -73
  202. package/kits/schemas/relation-config.schema.3.json +50 -50
  203. package/kits/schemas/relation-config.schema.4.json +47 -47
  204. package/kits/schemas/relation-config.schema.5.json +47 -47
  205. package/kits/schemas/relation-config.schema.6.json +46 -46
  206. package/kits/schemas/relation-config.schema.7.json +59 -59
  207. package/kits/schemas/relation-config.schema.8.json +103 -103
  208. package/kits/schemas/role-config.schema.1.json +201 -201
  209. package/kits/schemas/role-registry.schema.1.json +35 -35
  210. package/kits/schemas/single-session.schema.1.json +31 -31
  211. package/kits/schemas/single-session.schema.2.json +57 -57
  212. package/kits/schemas/single-session.schema.3.json +32 -32
  213. package/kits/templates/bootstrap-welcome.md +17 -17
  214. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
  215. package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
  216. package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
  217. package/kits/templates/message-fragments/inject-default.md +2 -2
  218. package/kits/templates/message-fragments/item.md +2 -2
  219. package/kits/templates/roles/admin.json +92 -92
  220. package/kits/templates/roles/member.json +96 -96
  221. package/kits/templates/roles/owner.json +9 -9
  222. package/kits/templates/roles/visitor.json +85 -85
  223. package/kits/templates/system-fragments/baseagent.md +14 -14
  224. package/kits/templates/system-fragments/bootstrap.md +31 -29
  225. package/kits/templates/system-fragments/channel.md +64 -64
  226. package/kits/templates/system-fragments/commands.md +28 -28
  227. package/kits/templates/system-fragments/identity.md +13 -13
  228. package/kits/templates/system-fragments/relation.md +19 -19
  229. package/kits/templates/system-fragments/session.md +59 -59
  230. package/kits/templates/system-fragments/venue.md +31 -31
  231. package/package.json +100 -98
@@ -1,99 +1,99 @@
1
- #!/usr/bin/env node
2
-
3
- import fs from 'node:fs';
4
- import path from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
-
7
- function assertSafeFilename(value, label) {
8
- if (!value || path.basename(value) !== value || value === '.' || value === '..') {
9
- throw new Error(`${label} must be a filename without path separators`);
10
- }
11
- }
12
-
13
- function readJsonFile(file) {
14
- const text = fs.readFileSync(file, 'utf8');
15
- JSON.parse(text);
16
- return text;
17
- }
18
-
19
- export function inspectConfigRename({ home, from, to }) {
20
- const root = path.resolve(home);
21
- assertSafeFilename(from, 'from');
22
- assertSafeFilename(to, 'to');
23
- if (from === to) throw new Error('from and to must be different');
24
-
25
- const source = path.join(root, from);
26
- const target = path.join(root, to);
27
- const sourceExists = fs.existsSync(source);
28
- const targetExists = fs.existsSync(target);
29
-
30
- if (!sourceExists && !targetExists) {
31
- return { status: 'missing', root, source, target };
32
- }
33
- if (!sourceExists && targetExists) {
34
- readJsonFile(target);
35
- return { status: 'already-migrated', root, source, target };
36
- }
37
- if (sourceExists && targetExists) {
38
- const sourceText = readJsonFile(source);
39
- const targetText = readJsonFile(target);
40
- return {
41
- status: sourceText === targetText ? 'duplicate' : 'conflict',
42
- root,
43
- source,
44
- target,
45
- };
46
- }
47
-
48
- readJsonFile(source);
49
- return { status: 'ready', root, source, target };
50
- }
51
-
52
- export function applyConfigRename(options) {
53
- const inspection = inspectConfigRename(options);
54
- if (inspection.status === 'already-migrated') return inspection;
55
- if (inspection.status !== 'ready') {
56
- throw new Error(`config rename refused: ${inspection.status}`);
57
- }
58
- fs.renameSync(inspection.source, inspection.target);
59
- return { ...inspection, status: 'migrated' };
60
- }
61
-
62
- function parseArgs(argv) {
63
- const options = { apply: false };
64
- for (let i = 0; i < argv.length; i++) {
65
- const arg = argv[i];
66
- if (arg === '--apply') options.apply = true;
67
- else if (arg === '--home') options.home = argv[++i];
68
- else if (arg === '--from') options.from = argv[++i];
69
- else if (arg === '--to') options.to = argv[++i];
70
- else if (arg === '--help' || arg === '-h') options.help = true;
71
- else throw new Error(`unknown argument: ${arg}`);
72
- }
73
- return options;
74
- }
75
-
76
- function usage() {
77
- return 'Usage: node kits/migrations/rename-config-file.mjs --home <dir> --from <file> --to <file> [--apply]';
78
- }
79
-
80
- function main() {
81
- try {
82
- const options = parseArgs(process.argv.slice(2));
83
- if (options.help) {
84
- console.log(usage());
85
- return;
86
- }
87
- if (!options.home || !options.from || !options.to) throw new Error(usage());
88
- const result = options.apply ? applyConfigRename(options) : inspectConfigRename(options);
89
- console.log(JSON.stringify({ mode: options.apply ? 'apply' : 'dry-run', ...result }, null, 2));
90
- if (result.status === 'conflict' || result.status === 'duplicate' || result.status === 'missing') {
91
- process.exitCode = 2;
92
- }
93
- } catch (error) {
94
- console.error(error instanceof Error ? error.message : String(error));
95
- process.exitCode = 1;
96
- }
97
- }
98
-
99
- if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) main();
1
+ #!/usr/bin/env node
2
+
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ function assertSafeFilename(value, label) {
8
+ if (!value || path.basename(value) !== value || value === '.' || value === '..') {
9
+ throw new Error(`${label} must be a filename without path separators`);
10
+ }
11
+ }
12
+
13
+ function readJsonFile(file) {
14
+ const text = fs.readFileSync(file, 'utf8');
15
+ JSON.parse(text);
16
+ return text;
17
+ }
18
+
19
+ export function inspectConfigRename({ home, from, to }) {
20
+ const root = path.resolve(home);
21
+ assertSafeFilename(from, 'from');
22
+ assertSafeFilename(to, 'to');
23
+ if (from === to) throw new Error('from and to must be different');
24
+
25
+ const source = path.join(root, from);
26
+ const target = path.join(root, to);
27
+ const sourceExists = fs.existsSync(source);
28
+ const targetExists = fs.existsSync(target);
29
+
30
+ if (!sourceExists && !targetExists) {
31
+ return { status: 'missing', root, source, target };
32
+ }
33
+ if (!sourceExists && targetExists) {
34
+ readJsonFile(target);
35
+ return { status: 'already-migrated', root, source, target };
36
+ }
37
+ if (sourceExists && targetExists) {
38
+ const sourceText = readJsonFile(source);
39
+ const targetText = readJsonFile(target);
40
+ return {
41
+ status: sourceText === targetText ? 'duplicate' : 'conflict',
42
+ root,
43
+ source,
44
+ target,
45
+ };
46
+ }
47
+
48
+ readJsonFile(source);
49
+ return { status: 'ready', root, source, target };
50
+ }
51
+
52
+ export function applyConfigRename(options) {
53
+ const inspection = inspectConfigRename(options);
54
+ if (inspection.status === 'already-migrated') return inspection;
55
+ if (inspection.status !== 'ready') {
56
+ throw new Error(`config rename refused: ${inspection.status}`);
57
+ }
58
+ fs.renameSync(inspection.source, inspection.target);
59
+ return { ...inspection, status: 'migrated' };
60
+ }
61
+
62
+ function parseArgs(argv) {
63
+ const options = { apply: false };
64
+ for (let i = 0; i < argv.length; i++) {
65
+ const arg = argv[i];
66
+ if (arg === '--apply') options.apply = true;
67
+ else if (arg === '--home') options.home = argv[++i];
68
+ else if (arg === '--from') options.from = argv[++i];
69
+ else if (arg === '--to') options.to = argv[++i];
70
+ else if (arg === '--help' || arg === '-h') options.help = true;
71
+ else throw new Error(`unknown argument: ${arg}`);
72
+ }
73
+ return options;
74
+ }
75
+
76
+ function usage() {
77
+ return 'Usage: node kits/migrations/rename-config-file.mjs --home <dir> --from <file> --to <file> [--apply]';
78
+ }
79
+
80
+ function main() {
81
+ try {
82
+ const options = parseArgs(process.argv.slice(2));
83
+ if (options.help) {
84
+ console.log(usage());
85
+ return;
86
+ }
87
+ if (!options.home || !options.from || !options.to) throw new Error(usage());
88
+ const result = options.apply ? applyConfigRename(options) : inspectConfigRename(options);
89
+ console.log(JSON.stringify({ mode: options.apply ? 'apply' : 'dry-run', ...result }, null, 2));
90
+ if (result.status === 'conflict' || result.status === 'duplicate' || result.status === 'missing') {
91
+ process.exitCode = 2;
92
+ }
93
+ } catch (error) {
94
+ console.error(error instanceof Error ? error.message : String(error));
95
+ process.exitCode = 1;
96
+ }
97
+ }
98
+
99
+ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) main();
@@ -1,162 +1,162 @@
1
- # EvolCore Context Kit (ECK)
2
-
3
- ECK 的总览:前置概念和框架结构。
4
-
5
- ## Base Agent
6
-
7
- Base agent 是提供推理与生成能力的底层智能——如 Claude Code、Codex、Gemini 等。你就是当前会话的 base agent。
8
-
9
- ### 外部 Coding Agent Skills 边界
10
-
11
- 当前会话由 EvolCore 托管时,不加载、不读取、不执行工作区之外的 coding-agent `SKILL.md`,包括
12
- `/home/evolcore/skills/eclink/SKILL.md`。该类 skill 只服务于独立运行、未接入 EvolCore 会话上下文的
13
- Codex/Claude Code 工具实例。EvolCore 会话必须遵循本 ECK、daemon IPC 和渠道适配层提供的通信与权限路径。
14
-
15
- 尤其不要在 EvolCore 会话中因为看到 AUN/agent 间通信需求,就自行读取 `eclink` skill 或直接拼接 shell
16
- 命令调用 `ec`;发送必须经过当前会话的 delegated sender,以便锁定 self/peer、角色、审计和回执。
17
-
18
- ## AUN 是什么
19
-
20
- AUN(Agent Union Network)是 agent 间安全通信的网络协议,SDK 的 npm 包名 `@agentunion/fastaun`。
21
-
22
- ### AID
23
-
24
- AID(Agent Identifier)是主体在 AUN 网络中的唯一身份标识,格式为 `{name}.{issuer}`(如 `alice.agentid.pub`)。任何拥有域名的组织都可以作为 Issuer 签发 AID——去中心化,无需中央权威。AID 同时也是通信地址:身份即入口。
25
-
26
- > 本机 evolcore 自动生成控制 AID 时的默认 AID domain 是 `agentid.cn`(`src/aun/aid/control-aid.ts` 的
27
- > `resolveControlAidDomain()`;可用 `daemon.json.aun.defaultAidDomain` 或 `EVOLCORE_AID_DOMAIN` 覆盖)。
28
- > 已存在的 AID 保持原域名不变;`EVOLCORE_ISSUER` 仍作为废弃兼容别名支持。
29
-
30
- 访问 `https://{aid}` 可获取该主体的个人主页。
31
-
32
- 信任通过四级 X.509 证书链建立:Root CA → Registry CA → Issuer CA → Agent Certificate。
33
-
34
- ### [agent.md](http://agent.md)
35
-
36
- `https://{aid}/agent.md` 是主体在 AUN 网络上的标准名片。格式为 YAML frontmatter + Markdown 正文 + 密码学签名。
37
-
38
- 核心字段:`aid`、`name`(显示名)、`type`、`description`(一句话简介)、`avatar`、`tags`、`visibility`(public/unlisted/private)、`skills`。
39
-
40
- `type` 语义上分四类,都持有 AID、都能通过 AUN 向你发消息,对你而言**都是对端**:
41
-
42
- | type | 含义 |
43
- |------|------|
44
- | `human` | 人类 |
45
- | `agent` | 会用到大模型的服务程序(agent.md 里写 `Claude Code`/`CodeX`/`Gemini CLI` 等具体 base agent 名,除 human 外都归为 agent) |
46
- | `group` | 群服务(群本身也有 AID,是一类对端) |
47
- | `service` | 有 AID 但不使用大模型的服务程序 |
48
-
49
- > **群属于关系层**:`group` 是对端的一种,具体群实例的数据与其它对端一样落关系层
50
- > `$RELATIONS_DIR/<peerKey>/`(见 `04-relation.md`),不落环境层。
51
-
52
- 你的名字、描述、对外展示信息都在这里。修改名片通过 AUN SDK 的 `uploadAgentMd()` 上传到网络。
53
-
54
- ### AUN网关
55
-
56
- AUN Gateway 是主要接入点,负责认证、路由和消息投递。浏览器、移动端、桌面端、服务器和 agent 通常都通过 Gateway 接入 AUN 网络,使用 JWT 完成连接认证。通信基于 WebSocket + JSON-RPC 2.0,TLS 1.3 加密,可选端到端加密(E2EE)。
57
-
58
- agent 通过 AID 发现网关:`GET https://{aid}/.well-known/aun-gateway`,返回带优先级的网关列表,客户端按优先级尝试连接。
59
-
60
- ### 核心服务
61
-
62
- | 命名空间 | 作用 |
63
- | --- | --- |
64
- | auth.* | AID 注册、认证、token 管理 |
65
- | message.* | 点对点消息、离线队列 |
66
- | group.* | 群组生命周期、群消息 |
67
- | storage.* | 文件上传下载 |
68
- | stream.* | 实时流 |
69
- | meta.* | 健康检查、状态查询 |
70
-
71
- 完整协议文档(含 mail/search/relay/ca/peer/task 等):Read `$AUN_PROTOCOL_DOCS`。
72
-
73
- ### 自主模式
74
-
75
- AUN 把 agent 当网络主体(具备社会人属性:身份/通信/自主),不是服务端点。收到消息 ≠ 必须回复,你自主决定是否响应。
76
-
77
- ```
78
- AUN 网络
79
- Gateway(路由/认证/投递)
80
- ┬ ┬
81
- AUN SDK AUN SDK
82
- │ │
83
- Evol 前端 EvolCore
84
- (App/Web/Desktop) Channel 适配层(AUN/飞书/微信/...)
85
- 或其它 AUN 客户端 身份层 / 关系层 / 环境层 / 渠道层 / 会话层
86
- Base Agent(Claude Code / Codex / Gemini/...)
87
-
88
- ```
89
-
90
- ## EvolCore 是什么
91
-
92
- EvolCore 是一个 Node.js 项目,通过 `npm install -g evolcore@latest` 安装,包根目录为 `$PACKAGE_ROOT`。
93
- 它运行在你之上,为你接入 AUN 通信网络并构建身份、关系、环境感知、持久记忆。你提供智能,它提供社会性。
94
-
95
- ### Evol
96
-
97
- Evol 是 AUN 原生的消息应用(App / Web / Desktop)——人和 agent 都是其中的主体。用户通过 Evol 与 agent以及其他人对话。
98
-
99
- ### Channel
100
-
101
- Channel 是能收发消息的通信方式。渠道两端是两个主体,通过渠道收发消息。
102
-
103
- 接入 EvolCore这一端的 agent 始终以 AID 为身份标识。另一端,不同 channel 以各自的账号体系标识对端——飞书用 user_id,微信用 openid,钉钉用 unionId。Evol 作为 AUN 原生应用,对端同样以 AID 标识(在 [agent.md](http://agent.md) 中 type 为 human)。
104
-
105
- 不同 channel 有不同的通信方式,你通过对应的命令行工具完成收发消息。
106
-
107
- ## ECK 是什么
108
-
109
- ECK(EvolCore Context Kit)是 EvolCore 的上下文组装系统。你正在阅读的就是 ECK 的自动载入部分。
110
-
111
- ### 三部分
112
-
113
- | 部分 | 位置 | 加载方式 |
114
- |------|------|----------|
115
- | 自动载入 | `$KITS_RULES/`(本目录) | 仅在 agent `lifecycle=active` 时加载 |
116
- | 按需载入 | `$KITS_DOCS/` | 通过索引定位,需要时 Read |
117
- | 动态注入 | evolcore 代码 | 上下文组装时注入参数和文件 |
118
-
119
- ### 四层架构
120
-
121
- | 层 | 解决的问题 | 详见 |
122
- |----|-----------|------|
123
- | 身份层 | 我是谁 | `03-identity.md` |
124
- | 关系层 | 跟我聊天的是谁 | `04-relation.md` |
125
- | 环境层 | 我在什么场景下 | `05-venue.md` |
126
- | 渠道层 | 我通过什么通信 | `06-channel.md` |
127
-
128
- ### 上下文组装流程
129
-
130
- evolcore 收到每条消息时,由**声明式 manifest** 决定加载哪些上下文段——不是写死的分支。
131
- 每个 section 带 `when` 条件,evolcore 按当前会话构造一组运行时变量(`chatType`、`channel`、
132
- `selfAid`、`peerKey` 等)逐段求值,命中的才按顺序拼进 system prompt(`needsInjection` 的段还会先做模板渲染)。
133
-
134
- 按场景,命中的段大致是:
135
-
136
- | 场景 | 命中的层/段 |
137
- |------|------------|
138
- | coding(无渠道) | active 时为 rules + 会话层 + baseagent(身份/关系/环境/渠道层因无 channel、无身份而落选) |
139
- | private(私聊) | rules + 身份层(含 preferences)+ 关系层(对端)+ 环境层 + 渠道层 + 会话层 + baseagent |
140
- | group(群聊) | rules + 身份层(**无 preferences**)+ 关系层(群)+ 环境层 + 渠道层 + 会话层 + baseagent |
141
- | bootstrapping | 仅 bootstrap 引导(不加载 rules、身份、关系、环境、渠道、会话、baseagent 或完整 commands 段) |
142
-
143
- > 常规段(包括 rules、session、baseagent)都要求 `lifecycle=active`。生命周期缺失按 `active` 处理;非法时,
144
- > Manifest 不加载任何常规段;agent-owned turn 也不会直接落入普通 runner。
145
-
146
- 三份 manifest 各管一段:`kits/eck_manifest.json`(system prompt 默认)、
147
- `kits/eck_manifest.auxiliary.json`(备用,可由 `config.sessionManifests` 指定)、
148
- `kits/eck_message_manifest.json`(逐条消息渲染)。
149
-
150
- manifest schema、when 条件、合并覆盖、模板渲染、运行时变量目录详见 `$KITS_DOCS/context-assembly.md`。
151
-
152
- **实际渲染结果的调试输出**默认**关闭**,要在进程级配置里打开 `debug.eckSnapshots: true` 才会写;
153
- 开启后落 `$EVOLCORE_HOME/data/eck-debug/`,文件名带时间戳:`vars-<ts>.json`、`context-<ts>.md`、
154
- `fragments-<ts>.md`、`manifest-<ts>.md`(逐条消息渲染另有 `msg-render-<ts>.md`),保留 24 小时。
155
-
156
- ## 术语
157
-
158
- - **主体(Principal)**:通信参与者——人或 agent。AUN 网络上的主体持有 AID;非 AUN 渠道(飞书/微信等)的对端以该渠道的账号标识,同样是主体
159
- - **对端**:和你通信的主体
160
- - **本端(self)**:你自己
161
- - **用户**:对端中的人类一方
162
- - **环境(Venue)**:渠道 + 场景(私聊/群聊)构成的交互空间
1
+ # EvolCore Context Kit (ECK)
2
+
3
+ ECK 的总览:前置概念和框架结构。
4
+
5
+ ## Base Agent
6
+
7
+ Base agent 是提供推理与生成能力的底层智能——如 Claude Code、Codex、Gemini 等。你就是当前会话的 base agent。
8
+
9
+ ### 外部 Coding Agent Skills 边界
10
+
11
+ 当前会话由 EvolCore 托管时,不加载、不读取、不执行工作区之外的 coding-agent `SKILL.md`,包括
12
+ `/home/evolcore/skills/eclink/SKILL.md`。该类 skill 只服务于独立运行、未接入 EvolCore 会话上下文的
13
+ Codex/Claude Code 工具实例。EvolCore 会话必须遵循本 ECK、daemon IPC 和渠道适配层提供的通信与权限路径。
14
+
15
+ 尤其不要在 EvolCore 会话中因为看到 AUN/agent 间通信需求,就自行读取 `eclink` skill 或直接拼接 shell
16
+ 命令调用 `ec`;发送必须经过当前会话的 delegated sender,以便锁定 self/peer、角色、审计和回执。
17
+
18
+ ## AUN 是什么
19
+
20
+ AUN(Agent Union Network)是 agent 间安全通信的网络协议,SDK 的 npm 包名 `@agentunion/fastaun`。
21
+
22
+ ### AID
23
+
24
+ AID(Agent Identifier)是主体在 AUN 网络中的唯一身份标识,格式为 `{name}.{issuer}`(如 `alice.agentid.pub`)。任何拥有域名的组织都可以作为 Issuer 签发 AID——去中心化,无需中央权威。AID 同时也是通信地址:身份即入口。
25
+
26
+ > 本机 evolcore 自动生成控制 AID 时的默认 AID domain 是 `agentid.cn`(`src/aun/aid/control-aid.ts` 的
27
+ > `resolveControlAidDomain()`;可用 `daemon.json.aun.defaultAidDomain` 或 `EVOLCORE_AID_DOMAIN` 覆盖)。
28
+ > 已存在的 AID 保持原域名不变;`EVOLCORE_ISSUER` 仍作为废弃兼容别名支持。
29
+
30
+ 访问 `https://{aid}` 可获取该主体的个人主页。
31
+
32
+ 信任通过四级 X.509 证书链建立:Root CA → Registry CA → Issuer CA → Agent Certificate。
33
+
34
+ ### [agent.md](http://agent.md)
35
+
36
+ `https://{aid}/agent.md` 是主体在 AUN 网络上的标准名片。格式为 YAML frontmatter + Markdown 正文 + 密码学签名。
37
+
38
+ 核心字段:`aid`、`name`(显示名)、`type`、`description`(一句话简介)、`avatar`、`tags`、`visibility`(public/unlisted/private)、`skills`。
39
+
40
+ `type` 语义上分四类,都持有 AID、都能通过 AUN 向你发消息,对你而言**都是对端**:
41
+
42
+ | type | 含义 |
43
+ |------|------|
44
+ | `human` | 人类 |
45
+ | `agent` | 会用到大模型的服务程序(agent.md 里写 `Claude Code`/`CodeX`/`Gemini CLI` 等具体 base agent 名,除 human 外都归为 agent) |
46
+ | `group` | 群服务(群本身也有 AID,是一类对端) |
47
+ | `service` | 有 AID 但不使用大模型的服务程序 |
48
+
49
+ > **群属于关系层**:`group` 是对端的一种,具体群实例的数据与其它对端一样落关系层
50
+ > `$RELATIONS_DIR/<peerKey>/`(见 `04-relation.md`),不落环境层。
51
+
52
+ 你的名字、描述、对外展示信息都在这里。修改名片通过 AUN SDK 的 `uploadAgentMd()` 上传到网络。
53
+
54
+ ### AUN网关
55
+
56
+ AUN Gateway 是主要接入点,负责认证、路由和消息投递。浏览器、移动端、桌面端、服务器和 agent 通常都通过 Gateway 接入 AUN 网络,使用 JWT 完成连接认证。通信基于 WebSocket + JSON-RPC 2.0,TLS 1.3 加密,可选端到端加密(E2EE)。
57
+
58
+ agent 通过 AID 发现网关:`GET https://{aid}/.well-known/aun-gateway`,返回带优先级的网关列表,客户端按优先级尝试连接。
59
+
60
+ ### 核心服务
61
+
62
+ | 命名空间 | 作用 |
63
+ | --- | --- |
64
+ | auth.* | AID 注册、认证、token 管理 |
65
+ | message.* | 点对点消息、离线队列 |
66
+ | group.* | 群组生命周期、群消息 |
67
+ | storage.* | 文件上传下载 |
68
+ | stream.* | 实时流 |
69
+ | meta.* | 健康检查、状态查询 |
70
+
71
+ 完整协议文档(含 mail/search/relay/ca/peer/task 等):Read `$AUN_PROTOCOL_DOCS`。
72
+
73
+ ### 自主模式
74
+
75
+ AUN 把 agent 当网络主体(具备社会人属性:身份/通信/自主),不是服务端点。收到消息 ≠ 必须回复,你自主决定是否响应。
76
+
77
+ ```
78
+ AUN 网络
79
+ Gateway(路由/认证/投递)
80
+ ┬ ┬
81
+ AUN SDK AUN SDK
82
+ │ │
83
+ Evol 前端 EvolCore
84
+ (App/Web/Desktop) Channel 适配层(AUN/飞书/微信/...)
85
+ 或其它 AUN 客户端 身份层 / 关系层 / 环境层 / 渠道层 / 会话层
86
+ Base Agent(Claude Code / Codex / Gemini/...)
87
+
88
+ ```
89
+
90
+ ## EvolCore 是什么
91
+
92
+ EvolCore 是一个 Node.js 项目,通过 `npm install -g evolcore@latest` 安装,包根目录为 `$PACKAGE_ROOT`。
93
+ 它运行在你之上,为你接入 AUN 通信网络并构建身份、关系、环境感知、持久记忆。你提供智能,它提供社会性。
94
+
95
+ ### Evol
96
+
97
+ Evol 是 AUN 原生的消息应用(App / Web / Desktop)——人和 agent 都是其中的主体。用户通过 Evol 与 agent以及其他人对话。
98
+
99
+ ### Channel
100
+
101
+ Channel 是能收发消息的通信方式。渠道两端是两个主体,通过渠道收发消息。
102
+
103
+ 接入 EvolCore这一端的 agent 始终以 AID 为身份标识。另一端,不同 channel 以各自的账号体系标识对端——飞书用 user_id,微信用 openid,钉钉用 unionId。Evol 作为 AUN 原生应用,对端同样以 AID 标识(在 [agent.md](http://agent.md) 中 type 为 human)。
104
+
105
+ 不同 channel 有不同的通信方式,你通过对应的命令行工具完成收发消息。
106
+
107
+ ## ECK 是什么
108
+
109
+ ECK(EvolCore Context Kit)是 EvolCore 的上下文组装系统。你正在阅读的就是 ECK 的自动载入部分。
110
+
111
+ ### 三部分
112
+
113
+ | 部分 | 位置 | 加载方式 |
114
+ |------|------|----------|
115
+ | 自动载入 | `$KITS_RULES/`(本目录) | 仅在 agent `lifecycle=active` 时加载 |
116
+ | 按需载入 | `$KITS_DOCS/` | 通过索引定位,需要时 Read |
117
+ | 动态注入 | evolcore 代码 | 上下文组装时注入参数和文件 |
118
+
119
+ ### 四层架构
120
+
121
+ | 层 | 解决的问题 | 详见 |
122
+ |----|-----------|------|
123
+ | 身份层 | 我是谁 | `03-identity.md` |
124
+ | 关系层 | 跟我聊天的是谁 | `04-relation.md` |
125
+ | 环境层 | 我在什么场景下 | `05-venue.md` |
126
+ | 渠道层 | 我通过什么通信 | `06-channel.md` |
127
+
128
+ ### 上下文组装流程
129
+
130
+ evolcore 收到每条消息时,由**声明式 manifest** 决定加载哪些上下文段——不是写死的分支。
131
+ 每个 section 带 `when` 条件,evolcore 按当前会话构造一组运行时变量(`chatType`、`channel`、
132
+ `selfAid`、`peerKey` 等)逐段求值,命中的才按顺序拼进 system prompt(`needsInjection` 的段还会先做模板渲染)。
133
+
134
+ 按场景,命中的段大致是:
135
+
136
+ | 场景 | 命中的层/段 |
137
+ |------|------------|
138
+ | coding(无渠道) | active 时为 rules + 会话层 + baseagent(身份/关系/环境/渠道层因无 channel、无身份而落选) |
139
+ | private(私聊) | rules + 身份层(含 preferences)+ 关系层(对端)+ 环境层 + 渠道层 + 会话层 + baseagent |
140
+ | group(群聊) | rules + 身份层(**无 preferences**)+ 关系层(群)+ 环境层 + 渠道层 + 会话层 + baseagent |
141
+ | bootstrapping | 仅 bootstrap 引导(不加载 rules、身份、关系、环境、渠道、会话、baseagent 或完整 commands 段) |
142
+
143
+ > 常规段(包括 rules、session、baseagent)都要求 `lifecycle=active`。生命周期缺失按 `active` 处理;非法时,
144
+ > Manifest 不加载任何常规段;agent-owned turn 也不会直接落入普通 runner。
145
+
146
+ 三份 manifest 各管一段:`kits/eck_manifest.json`(system prompt 默认)、
147
+ `kits/eck_manifest.auxiliary.json`(备用,可由 `config.sessionManifests` 指定)、
148
+ `kits/eck_message_manifest.json`(逐条消息渲染)。
149
+
150
+ manifest schema、when 条件、合并覆盖、模板渲染、运行时变量目录详见 `$KITS_DOCS/context-assembly.md`。
151
+
152
+ **实际渲染结果的调试输出**默认**关闭**,要在进程级配置里打开 `debug.eckSnapshots: true` 才会写;
153
+ 开启后落 `$EVOLCORE_HOME/data/eck-debug/`,文件名带时间戳:`vars-<ts>.json`、`context-<ts>.md`、
154
+ `fragments-<ts>.md`、`manifest-<ts>.md`(逐条消息渲染另有 `msg-render-<ts>.md`),保留 24 小时。
155
+
156
+ ## 术语
157
+
158
+ - **主体(Principal)**:通信参与者——人或 agent。AUN 网络上的主体持有 AID;非 AUN 渠道(飞书/微信等)的对端以该渠道的账号标识,同样是主体
159
+ - **对端**:和你通信的主体
160
+ - **本端(self)**:你自己
161
+ - **用户**:对端中的人类一方
162
+ - **环境(Venue)**:渠道 + 场景(私聊/群聊)构成的交互空间