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.
Files changed (224) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +6 -0
  3. package/bin/install-codex-managed-hooks.mjs +20 -3
  4. package/dist/agents/baseagent-availability.js +1 -1
  5. package/dist/agents/baseagent.js +88 -0
  6. package/dist/agents/claude-runner.js +59 -12
  7. package/dist/agents/codex/app-server-client.js +18 -1
  8. package/dist/agents/codex-runner.js +262 -21
  9. package/dist/agents/ecagent-runner.js +47 -11
  10. package/dist/agents/gemini-runner.js +36 -12
  11. package/dist/aun/aid/client.js +4 -3
  12. package/dist/aun/aid/control-aid.js +270 -8
  13. package/dist/aun/aid/identity.js +6 -3
  14. package/dist/aun/aid/ownership-operation.js +58 -0
  15. package/dist/aun/aid/store.js +1 -0
  16. package/dist/aun/group/fs-download.js +67 -2
  17. package/dist/aun/group/history.js +20 -5
  18. package/dist/aun/group/operations.js +8 -2
  19. package/dist/aun/menu/client.js +39 -2
  20. package/dist/aun/menu/transport.js +1 -1
  21. package/dist/aun/msg/history.js +43 -4
  22. package/dist/aun/msg/managed-operation.js +30 -53
  23. package/dist/aun/msg/p2p.js +51 -15
  24. package/dist/aun/outbox.js +4 -0
  25. package/dist/channels/aun.js +260 -73
  26. package/dist/channels/daemon.js +6 -4
  27. package/dist/channels/feishu.js +3 -0
  28. package/dist/cli/agent-command.js +161 -223
  29. package/dist/cli/agent-create.js +190 -223
  30. package/dist/cli/agent.js +3 -1
  31. package/dist/cli/aid-bind-command.js +53 -0
  32. package/dist/cli/aun-commands.js +384 -91
  33. package/dist/cli/bench.js +1 -1
  34. package/dist/cli/cli-argv.js +74 -0
  35. package/dist/cli/daemon-commands.js +105 -74
  36. package/dist/cli/diag.js +1 -1
  37. package/dist/cli/fs-command.js +18 -19
  38. package/dist/cli/getmeta-command.js +159 -6
  39. package/dist/cli/index.js +6 -12
  40. package/dist/cli/init-channel.js +8 -55
  41. package/dist/cli/init.js +125 -218
  42. package/dist/cli/queue-command.js +11 -8
  43. package/dist/cli/restart-monitor.js +177 -85
  44. package/dist/cli/session-command.js +1 -1
  45. package/dist/cli/stats.js +7 -5
  46. package/dist/cli/thread-command.js +103 -30
  47. package/dist/cli/trigger-command.js +1 -1
  48. package/dist/cli/watch-msg-diag.js +1 -0
  49. package/dist/config/access-policy.js +2 -2
  50. package/dist/config/boot-log.js +14 -11
  51. package/dist/config/config-field-policy.js +9 -1
  52. package/dist/config/config-manager.js +176 -90
  53. package/dist/config/config-operation-service.js +7 -14
  54. package/dist/config/contact-book-store.js +142 -26
  55. package/dist/config/contact-book.js +4 -2
  56. package/dist/config/lifecycle.js +1 -1
  57. package/dist/config/owner-config.js +96 -0
  58. package/dist/config/peer-role-resolver.js +12 -18
  59. package/dist/config/providers-config.js +382 -0
  60. package/dist/config/providers-import.js +74 -0
  61. package/dist/config/providers-management.js +328 -0
  62. package/dist/config/providers.js +22 -0
  63. package/dist/config/resolved-config-op.js +17 -14
  64. package/dist/config/snapshot.js +28 -16
  65. package/dist/config-store.js +18 -14
  66. package/dist/core/agent-ipc-registration.js +21 -63
  67. package/dist/core/agent-runtime.js +16 -5
  68. package/dist/core/auth/agent-delegation.js +199 -25
  69. package/dist/core/auth/auth-gateway.js +44 -2
  70. package/dist/core/auth/authorization-denial.js +1 -1
  71. package/dist/core/auth/debug-context.js +2 -1
  72. package/dist/core/auth/delegation-authorization.js +2 -2
  73. package/dist/core/auth/delegation-diagnostics.js +4 -1
  74. package/dist/core/auth/operation-authorizer.js +10 -1
  75. package/dist/core/auth/operation-catalog.js +19 -1
  76. package/dist/core/bootstrap-service.js +43 -20
  77. package/dist/core/channel-loader.js +0 -1
  78. package/dist/core/channel-runtime.js +30 -4
  79. package/dist/core/command/agent-control.js +196 -37
  80. package/dist/core/command/cli-intent-parser.js +60 -4
  81. package/dist/core/command/command-handler.js +212 -60
  82. package/dist/core/command/connect-menu.js +1 -0
  83. package/dist/core/command/diag-service.js +5 -4
  84. package/dist/core/command/file-search.js +368 -0
  85. package/dist/core/command/menu-catalog.js +2 -1
  86. package/dist/core/command/menu-handler.js +292 -107
  87. package/dist/core/command/menu-protocol.js +23 -0
  88. package/dist/core/command/role-menu.js +7 -19
  89. package/dist/core/command/skill-slash.js +130 -25
  90. package/dist/core/command/slash-handler.js +101 -53
  91. package/dist/core/command/topic-slash.js +16 -5
  92. package/dist/core/daemon-bootstrap.js +7 -1
  93. package/dist/core/daemon-control.js +19 -1
  94. package/dist/core/daemon-lifecycle.js +2 -1
  95. package/dist/core/event-catalog.js +2 -0
  96. package/dist/core/evolagent-registry.js +13 -2
  97. package/dist/core/evolagent.js +3 -6
  98. package/dist/core/handoff/ipc-registration.js +2 -2
  99. package/dist/core/handoff/runtime.js +40 -6
  100. package/dist/core/handoff/store.js +1 -0
  101. package/dist/core/inference/text-inference.js +95 -6
  102. package/dist/core/ipc-registration.js +43 -24
  103. package/dist/core/memory/consolidation-context.js +4 -1
  104. package/dist/core/memory/consolidation.js +25 -14
  105. package/dist/core/message/aun-ipc-sender.js +296 -88
  106. package/dist/core/message/aun-request-registry.js +226 -0
  107. package/dist/core/message/create-status.js +33 -4
  108. package/dist/core/message/message-bridge.js +62 -13
  109. package/dist/core/message/message-log.js +0 -1
  110. package/dist/core/message/message-queue.js +4 -1
  111. package/dist/core/message/message-utils.js +8 -1
  112. package/dist/core/message/peer-mode.js +17 -9
  113. package/dist/core/message/response-engine.js +266 -124
  114. package/dist/core/message/retry-scheduler.js +11 -8
  115. package/dist/core/model/catalog-service.js +60 -18
  116. package/dist/core/model/model-catalog.js +112 -9
  117. package/dist/core/model/model-fallback.js +94 -26
  118. package/dist/core/ownership/owner-resolver.js +687 -0
  119. package/dist/core/permission/approval-gateway.js +196 -62
  120. package/dist/core/permission/ec-command-parser.js +138 -25
  121. package/dist/core/permission/filesystem-approval-scope.js +141 -0
  122. package/dist/core/permission/protected-paths.js +14 -1
  123. package/dist/core/permission/sandbox-runtime.js +171 -18
  124. package/dist/core/permission/tool-policy.js +13 -2
  125. package/dist/core/role/runtime-policy.js +3 -4
  126. package/dist/core/session/session-idle-monitor.js +10 -8
  127. package/dist/core/session/session-manager.js +72 -45
  128. package/dist/core/session/session-mapper.js +18 -7
  129. package/dist/core/session/session-renew.js +5 -4
  130. package/dist/core/session/session-title.js +2 -1
  131. package/dist/core/session/session-turn-coordinator.js +4 -2
  132. package/dist/core/skill/index-generator.js +2 -16
  133. package/dist/core/task/task-recovery-service.js +15 -2
  134. package/dist/core/thread/command-parser.js +28 -13
  135. package/dist/core/thread/index.js +1 -0
  136. package/dist/core/thread/ipc-operation.js +11 -8
  137. package/dist/core/thread/thread-operation.js +79 -44
  138. package/dist/core/thread/thread-route.js +54 -6
  139. package/dist/core/thread/thread-service.js +236 -45
  140. package/dist/core/thread/topic-id.js +248 -0
  141. package/dist/eck/kit-renderer.js +1 -1
  142. package/dist/eck/message-renderer.js +12 -2
  143. package/dist/index.js +50 -27
  144. package/dist/ipc.js +59 -6
  145. package/dist/paths.js +1 -0
  146. package/dist/product.js +1 -0
  147. package/dist/response-system/engines/v1/proactive-flow.js +10 -3
  148. package/dist/stats/db.js +8 -0
  149. package/dist/stats/writer.js +26 -4
  150. package/dist/trigger/authorization.js +48 -3
  151. package/dist/trigger/feedback.js +28 -10
  152. package/dist/trigger/ipc-service.js +86 -10
  153. package/dist/trigger/local-files.js +55 -23
  154. package/dist/trigger/scheduler.js +57 -11
  155. package/dist/trigger/system-definitions.js +1 -0
  156. package/dist/trigger/validation.js +44 -15
  157. package/dist/utils/aid-bind.js +17 -297
  158. package/dist/utils/avatar-upload.js +16 -4
  159. package/dist/utils/cross-platform.js +115 -36
  160. package/dist/utils/ecweb-supervisor.js +1 -1
  161. package/dist/utils/ecweb-utils.js +8 -1
  162. package/dist/utils/error-utils.js +44 -6
  163. package/dist/utils/instance-registry.js +12 -2
  164. package/dist/utils/npm-ops.js +102 -27
  165. package/dist/utils/package-version-info.js +72 -27
  166. package/dist/utils/restart-safety.js +50 -0
  167. package/dist/utils/upgrade-jobs.js +304 -0
  168. package/dist/utils/windows-autostart.js +17 -10
  169. package/kits/docs/INDEX.md +5 -0
  170. package/kits/docs/aun/ABILITY_CALLING.md +239 -0
  171. package/kits/docs/evolcore/INDEX.md +14 -3
  172. package/kits/docs/evolcore/agent-create.md +55 -141
  173. package/kits/docs/evolcore/agent.md +38 -16
  174. package/kits/docs/evolcore/aid.md +34 -0
  175. package/kits/docs/evolcore/config.md +20 -1
  176. package/kits/docs/evolcore/event.md +2 -2
  177. package/kits/docs/evolcore/fs.md +18 -2
  178. package/kits/docs/evolcore/group-collaboration.md +13 -246
  179. package/kits/docs/evolcore/group.md +2 -1
  180. package/kits/docs/evolcore/memory-consolidation-batches.md +1 -1
  181. package/kits/docs/evolcore/menu-protocol.md +65 -1
  182. package/kits/docs/evolcore/msg.md +64 -2
  183. package/kits/docs/evolcore/skill.md +86 -0
  184. package/kits/docs/evolcore/stats.md +6 -0
  185. package/kits/docs/evolcore/task.md +2 -0
  186. package/kits/docs/evolcore/thread-chain.md +145 -51
  187. package/kits/docs/evolcore/trigger.md +48 -3
  188. package/kits/eck_manifest.json +21 -0
  189. package/kits/eck_message_manifest.json +4 -4
  190. package/kits/migrations/migrate-role-config-v5.mjs +20 -7
  191. package/kits/rules/01-overview.md +2 -1
  192. package/kits/rules/03-identity.md +3 -1
  193. package/kits/rules/04-relation.md +1 -1
  194. package/kits/rules/07-memory-and-thread.md +1 -1
  195. package/kits/schemas/_meta.json +16 -1
  196. package/kits/schemas/agent-config.schema.13.json +44 -2
  197. package/kits/schemas/contact-book.schema.3.json +5 -0
  198. package/kits/schemas/daemon.schema.6.json +3 -1
  199. package/kits/schemas/daemon.schema.8.json +329 -0
  200. package/kits/schemas/defaults.schema.5.json +39 -3
  201. package/kits/schemas/providers.schema.1.json +76 -0
  202. package/kits/schemas/relation-config.schema.9.json +5 -1
  203. package/kits/skills/.switches.json +28 -0
  204. package/kits/skills/aid-ability/SKILL.md +214 -0
  205. package/kits/skills/ec-agent-create/SKILL.md +162 -0
  206. package/kits/skills/ec-group/SKILL.md +2 -1
  207. package/kits/skills/ec-group-collaboration/SKILL.md +228 -0
  208. package/kits/skills/ec-identity/SKILL.md +143 -0
  209. package/kits/skills/ec-skill/scripts/cli.mjs +36 -3
  210. package/kits/skills/ec-skill/scripts/skill.mjs +202 -15
  211. package/kits/skills/ec-trigger/SKILL.md +167 -0
  212. package/kits/skills/ec-trigger/references/examples.md +153 -0
  213. package/kits/skills/thread-ops/SKILL.md +108 -420
  214. package/kits/templates/message-fragments/thread-context.md +1 -2
  215. package/kits/templates/message-fragments/trigger-thread-check.md +1 -1
  216. package/kits/templates/roles/member.json +1 -1
  217. package/kits/templates/roles/visitor.json +1 -0
  218. package/kits/templates/system-fragments/bootstrap.md +1 -0
  219. package/kits/templates/system-fragments/channel.md +2 -1
  220. package/kits/templates/system-fragments/commands.md +5 -4
  221. package/kits/templates/system-fragments/identity.md +2 -0
  222. package/kits/templates/system-fragments/session.md +1 -1
  223. package/kits/templates/system-fragments/venue.md +1 -1
  224. package/package.json +4 -3
@@ -91,6 +91,27 @@
91
91
  },
92
92
  "description": "人格档案(persona.md)"
93
93
  },
94
+ {
95
+ "id": "peer-self-intro",
96
+ "type": "file",
97
+ "file": "$RELATIONS_DIR/{{peerKey}}/self-intro.md",
98
+ "order": 28,
99
+ "needsInjection": false,
100
+ "optional": true,
101
+ "when": {
102
+ "and": [
103
+ {
104
+ "var": "peerKey",
105
+ "neq": null
106
+ },
107
+ {
108
+ "var": "lifecycle",
109
+ "eq": "active"
110
+ }
111
+ ]
112
+ },
113
+ "description": "本端向该对端的自我介绍流水"
114
+ },
94
115
  {
95
116
  "id": "relation-layer",
96
117
  "type": "file",
@@ -115,11 +115,11 @@
115
115
  },
116
116
  {
117
117
  "var": "triggerMsgKind",
118
- "eq": "thread-check"
118
+ "eq": "cross-thread-review"
119
119
  }
120
120
  ]
121
121
  },
122
- "description": "跨话题复查 Trigger 专属渲染(kind=thread-check:来源话题 + 目标话题 + 周期)"
122
+ "description": "跨话题复查通知专属渲染(kind=cross-thread-review:来源话题 + 目标话题 + 周期)"
123
123
  },
124
124
  {
125
125
  "id": "msg-trigger-session",
@@ -138,7 +138,7 @@
138
138
  },
139
139
  {
140
140
  "var": "triggerMsgKind",
141
- "neq": "thread-check"
141
+ "neq": "cross-thread-review"
142
142
  }
143
143
  ]
144
144
  },
@@ -157,7 +157,7 @@
157
157
  "var": "isThreadContext",
158
158
  "eq": true
159
159
  },
160
- "description": "跨会话上下文注入(来源话题 + 空洞提示 + 复查 Trigger)"
160
+ "description": "跨话题上下文注入(来源话题 + 空洞提示 + 复查 Trigger)"
161
161
  },
162
162
  {
163
163
  "id": "msg-private-default",
@@ -102,8 +102,9 @@ function appendChange(changes, file, kind, before, value) {
102
102
  function planMigration(home) {
103
103
  const validators = loadValidators();
104
104
  const agentsRoot = path.join(home, 'agents');
105
- if (!fs.existsSync(agentsRoot)) return { home, changes: [], summary: { agentsScanned: 0, agentsMigrated: 0, rolesWritten: 0 } };
105
+ if (!fs.existsSync(agentsRoot)) return { home, changes: [], problems: [], summary: { agentsScanned: 0, agentsMigrated: 0, rolesWritten: 0 } };
106
106
  const changes = [];
107
+ const problems = [];
107
108
  const summary = { agentsScanned: 0, agentsMigrated: 0, rolesWritten: 0 };
108
109
 
109
110
  for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
@@ -111,13 +112,26 @@ function planMigration(home) {
111
112
  const agentFile = path.join(agentsRoot, entry.name, 'config.json');
112
113
  if (!fs.existsSync(agentFile)) continue;
113
114
  summary.agentsScanned += 1;
115
+ try {
116
+ planAgent(entry.name, agentFile);
117
+ } catch (error) {
118
+ // 单个 Agent 的配置问题只跳过该 Agent,不中止整批迁移。
119
+ problems.push({ file: agentFile, detail: error instanceof Error ? error.message : String(error) });
120
+ }
121
+ }
122
+
123
+ return { home, changes, problems, summary };
124
+
125
+ function planAgent(agentDirName, agentFile) {
114
126
  const { value: input, text: agentText } = readJson(agentFile);
115
127
  if (!isRecord(input)) throw new Error(`${agentFile}: Agent config must be an object`);
116
128
  if (typeof input.$schema_version === 'number' && input.$schema_version > 5) {
117
- throw new Error(`${agentFile}: unsupported future Agent schema version ${input.$schema_version}`);
129
+ // 已经比 v5 新的 Agent 不需要本次迁移;跳过而不是中止。
130
+ problems.push({ file: agentFile, detail: `skipped: future Agent schema version ${input.$schema_version}` });
131
+ return;
118
132
  }
119
133
 
120
- const rolesDir = path.join(agentsRoot, entry.name, 'roles');
134
+ const rolesDir = path.join(agentsRoot, agentDirName, 'roles');
121
135
  const registryFile = path.join(rolesDir, 'index.json');
122
136
  if (fs.existsSync(registryFile) && input.roles !== undefined) {
123
137
  throw new Error(`${agentFile}: both config.roles and roles/index.json exist; resolve the ambiguous role source before migration`);
@@ -135,7 +149,7 @@ function planMigration(home) {
135
149
  summary.rolesWritten += 1;
136
150
  }
137
151
  }
138
- continue;
152
+ return;
139
153
  }
140
154
 
141
155
  const policy = isRecord(input.roles) ? input.roles : {};
@@ -159,7 +173,7 @@ function planMigration(home) {
159
173
  const registry = { $schema_version: 1, roles: roleIds, defaultRoles };
160
174
  validateOrThrow(validators.registry, registry, registryFile);
161
175
 
162
- const relationsDir = path.join(agentsRoot, entry.name, 'relations');
176
+ const relationsDir = path.join(agentsRoot, agentDirName, 'relations');
163
177
  if (fs.existsSync(relationsDir)) {
164
178
  const visit = dir => {
165
179
  for (const relationEntry of fs.readdirSync(dir, { withFileTypes: true })) {
@@ -194,7 +208,6 @@ function planMigration(home) {
194
208
  appendChange(changes, agentFile, 'agent', agentText, output);
195
209
  summary.agentsMigrated += 1;
196
210
  }
197
- return { home, changes, summary };
198
211
  }
199
212
 
200
213
  function assertDaemonStopped(home) {
@@ -350,7 +363,7 @@ export function runMigration(options = {}) {
350
363
  recoverMigrationJournal(home);
351
364
  const plan = planMigration(home);
352
365
  const backup = options.apply ? applyMigration(plan) : null;
353
- return { ok: true, mode: options.apply ? 'applied' : 'dry-run', home, changedFiles: plan.changes.length, backup, summary: plan.summary };
366
+ return { ok: true, mode: options.apply ? 'applied' : 'dry-run', home, changedFiles: plan.changes.length, backup, summary: plan.summary, problems: plan.problems };
354
367
  } finally {
355
368
  releaseLock();
356
369
  }
@@ -44,7 +44,8 @@ AID(Agent Identifier)是主体在 AUN 网络中的唯一身份标识,格
44
44
  > **群属于关系层**:`group` 是对端的一种,具体群实例的数据与其它对端一样落关系层
45
45
  > `$RELATIONS_DIR/<peerKey>/`(见 `04-relation.md`),不落环境层。
46
46
 
47
- 你的名字、描述、对外展示信息都在这里。修改名片通过 AUN SDK 的 `uploadAgentMd()` 上传到网络。
47
+ 你的名字、描述、对外展示信息都在这里。读写名片一律走 CLI:`ec aid agentmd get <aid>` 读取(下载+验签),
48
+ `ec aid agentmd set <aid> <字段> <值>` 或 `ec aid agentmd put <aid>` 发布。不要直接读 `$EVOLCORE_HOME/AIDs/` 下的文件,也不要自己调 SDK。
48
49
 
49
50
  ### AUN网关
50
51
 
@@ -1,9 +1,11 @@
1
1
  # 身份层:我是谁
2
2
 
3
3
  身份层是当前 agent 的自我认知。ECK 在 identity fragment 注入 `selfAid`(当前 AID),
4
- 并把 `$EVOLCORE_HOME/AIDs/<aid>/agent.md` frontmatter 的 `name` 投影为 `selfName`。
4
+ 并把名片 `$EVOLCORE_HOME/AIDs/<aid>/agent.md` frontmatter 的 `name` 投影为 `selfName`。
5
5
  `selfName` 仅用于展示,名片缺失或尚未拉取完成时可能为空;身份与授权判断必须使用 `selfAid`。
6
6
 
7
+ 查看名片用 `ec aid agentmd get <aid>`(下载+验签)。该目录是受保护路径,直读会被拒绝。
8
+
7
9
  ## 数据位置
8
10
 
9
11
  | 位置 | 内容 |
@@ -50,7 +50,7 @@ relations/
50
50
  ## 查找逻辑
51
51
 
52
52
  已知 channel + peerId → 直接拼 `relations/<channel>#<urlEncode(peerId)>/`。这是**唯一可用的查找路径**;
53
- 只知道名字("给王老板发消息")时没有索引可查,用 `ec aid`/联系人命令或直接问用户。
53
+ 只知道名字("给王老板发消息")时**没有反查索引**(`_index/name_*.json` 是空壳,无实现),直接问用户要 AID。
54
54
 
55
55
  ## 对端身份与权限
56
56
 
@@ -93,7 +93,7 @@ ec group send '<text>' --thread <threadId> --check-every 5m # 群对端
93
93
  - `--thread` 指定的话题必须已存在于本端索引,否则报 `TOPIC_NOT_FOUND`
94
94
  - 发送成功后本端写入 thread-inbox:目标话题下次被唤醒时注入一次来源话题上下文,然后删除
95
95
  - `--check-every` 会创建周期复查 Trigger(每次发送各新建一个,名称 `check-<目标>-from-<来源>-<唯一后缀>`),
96
- 需显式 `ec trigger cancel <trigger_id>` 结束;定位用返回的 `trigger_id`(`trig_…`),**不是名称**
96
+ 需显式 `ec trigger delete <trigger_id>` 结束(不要用 `cancel`,那只是 disable,会留下挂起的死 Trigger);定位用返回的 `trigger_id`(`trig_…`),**不是名称**
97
97
 
98
98
  ### 话题名称维护
99
99
 
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "schemas": {
3
+ "providers": {
4
+ "currentVersion": 1
5
+ },
3
6
  "daemon": {
4
- "currentVersion": 7
7
+ "currentVersion": 8
5
8
  },
6
9
  "defaults": {
7
10
  "currentVersion": 5
@@ -26,6 +29,18 @@
26
29
  }
27
30
  },
28
31
  "history": [
32
+ {
33
+ "schema": "providers",
34
+ "version": 1,
35
+ "date": "2026-10-20",
36
+ "description": "global providers managed by ConfigManager"
37
+ },
38
+ {
39
+ "schema": "daemon",
40
+ "version": 8,
41
+ "date": "2026-10-19",
42
+ "description": "add npm autoOnStart and testPackages upgrade policy"
43
+ },
29
44
  {
30
45
  "schema": "daemon",
31
46
  "version": 7,
@@ -64,6 +64,7 @@
64
64
  "default": "active",
65
65
  "enum": [
66
66
  "created",
67
+ "ownerpending",
67
68
  "bootstrapping",
68
69
  "active"
69
70
  ],
@@ -71,6 +72,7 @@
71
72
  "description": "agent 生命周期状态;缺失时按 active 处理",
72
73
  "x-enumDescriptions": {
73
74
  "created": "已创建,尚未进入引导流程",
75
+ "ownerpending": "初始名片已发布,等待协议 Owner 共识",
74
76
  "bootstrapping": "引导中(初始化配置/身份)",
75
77
  "active": "已激活,正常运行"
76
78
  }
@@ -109,6 +111,11 @@
109
111
  "x-merge": "list",
110
112
  "description": "Agent 所有者身份列表;用于 owner 级控制和通知"
111
113
  },
114
+ "owner": {
115
+ "type": "string",
116
+ "description": "本地兼容的单个 Agent Owner AID;与 owners 合并读取",
117
+ "x-merge": "scalar"
118
+ },
112
119
  "fullaccess": {
113
120
  "type": "object",
114
121
  "x-merge": "dict",
@@ -257,7 +264,7 @@
257
264
  "active_baseagent": {
258
265
  "type": "string",
259
266
  "x-merge": "scalar",
260
- "description": "默认使用的 base agent 标识,例如 claude 或 codex"
267
+ "description": "默认使用的 base agent 标识:claude/codex/gemini/ecagent"
261
268
  },
262
269
  "baseagents": {
263
270
  "type": "object",
@@ -267,10 +274,16 @@
267
274
  "not": {
268
275
  "type": "object",
269
276
  "required": [
270
- "fallbackModels"
277
+ "fallback"
271
278
  ]
272
279
  },
273
280
  "properties": {
281
+ "provider": { "type": "string", "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$" },
282
+ "providerServiceType": { "type": "string", "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$" },
283
+ "fallbackModels": {
284
+ "not": {},
285
+ "description": "已废除;备用模型链仅允许在 defaults.json 中使用 fallback 配置。"
286
+ },
274
287
  "headers": {
275
288
  "type": "object",
276
289
  "propertyNames": {
@@ -314,6 +327,35 @@
314
327
  }
315
328
  }
316
329
  },
330
+ "Services": {
331
+ "type": "object",
332
+ "description": "按用途选择 provider、模型和推理强度;服务类型名称可扩展。",
333
+ "x-merge": "dict",
334
+ "propertyNames": { "pattern": "^[A-Za-z0-9_-]+$" },
335
+ "additionalProperties": {
336
+ "type": "object",
337
+ "additionalProperties": false,
338
+ "properties": {
339
+ "provider": { "type": "string", "minLength": 1 },
340
+ "model": { "type": "string", "minLength": 1 },
341
+ "effort": { "type": "string", "minLength": 1 },
342
+ "fallback": {
343
+ "type": "array",
344
+ "maxItems": 3,
345
+ "items": {
346
+ "type": "object",
347
+ "additionalProperties": false,
348
+ "required": ["model"],
349
+ "properties": {
350
+ "provider": { "type": "string", "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$" },
351
+ "model": { "type": "string", "minLength": 1 },
352
+ "effort": { "type": "string", "minLength": 1 }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ }
358
+ },
317
359
  "projects": {
318
360
  "type": "object",
319
361
  "x-merge": "dict",
@@ -30,6 +30,11 @@
30
30
  },
31
31
  "uniqueItems": true
32
32
  },
33
+ "managementRole": {
34
+ "type": "string",
35
+ "enum": ["owner", "admin"],
36
+ "description": "系统维护的 Agent 管理身份投影,不作为授权来源"
37
+ },
33
38
  "status": {
34
39
  "type": "string",
35
40
  "enum": ["active", "blocked", "pending", "declined"],
@@ -10,10 +10,12 @@
10
10
  "properties": {
11
11
  "$schema_version": { "type": "number", "const": 6, "default": 6, "x-merge": "scalar" },
12
12
  "aid": { "type": "string", "description": "daemon 默认身份 AID", "x-merge": "scalar" },
13
+ "owner": { "type": "string", "description": "本地兼容 Owner AID;不代表 Ownership 共识已完成", "x-merge": "scalar" },
13
14
  "owners": {
14
15
  "type": "array",
15
16
  "items": { "type": "string" },
16
- "description": "进程控制面鉴权名单(谁能远程管 daemon)",
17
+ "uniqueItems": true,
18
+ "description": "本地兼容 Owner AID 列表;与 Ownership 共识 Owner 并行生效",
17
19
  "x-merge": "list"
18
20
  },
19
21
  "debug": {
@@ -0,0 +1,329 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "daemon.schema.8.json",
4
+ "title": "ProcessConfig v8 (daemon.json)",
5
+ "description": "进程级配置:daemon 自身运行配置,链外独立作用域,不进覆盖链。",
6
+ "x-logical-name": "daemon",
7
+ "x-scope": "process",
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "$schema_version": {
12
+ "type": "number",
13
+ "const": 8,
14
+ "default": 8,
15
+ "x-merge": "scalar"
16
+ },
17
+ "aid": {
18
+ "type": "string",
19
+ "description": "daemon 默认身份 AID",
20
+ "x-merge": "scalar"
21
+ },
22
+ "owner": {
23
+ "type": "string",
24
+ "description": "本地兼容 Owner AID;不代表 Ownership 共识已完成",
25
+ "x-merge": "scalar"
26
+ },
27
+ "owners": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "string"
31
+ },
32
+ "description": "进程控制面鉴权名单(谁能远程管 daemon)",
33
+ "x-merge": "list"
34
+ },
35
+ "debug": {
36
+ "type": "object",
37
+ "description": "进程级调试配置;唯一合法来源为 daemon.json,不参与 Agent 覆盖链",
38
+ "x-merge": "dict",
39
+ "additionalProperties": false,
40
+ "properties": {
41
+ "logLevel": {
42
+ "type": "string",
43
+ "enum": [
44
+ "DEBUG",
45
+ "INFO",
46
+ "WARN",
47
+ "ERROR"
48
+ ],
49
+ "description": "daemon 日志级别"
50
+ },
51
+ "aunTrace": {
52
+ "type": "boolean",
53
+ "description": "是否记录 AUN 协议 trace"
54
+ },
55
+ "aunSdkLog": {
56
+ "type": "boolean",
57
+ "description": "是否启用 AUN SDK 调试日志"
58
+ },
59
+ "upmsg": {
60
+ "type": "boolean",
61
+ "description": "是否向 Agent owner 发送 daemon 上线通知"
62
+ },
63
+ "eckSnapshots": {
64
+ "type": "boolean",
65
+ "default": false,
66
+ "description": "是否写入可能包含敏感上下文的 ECK 旁路调试快照"
67
+ }
68
+ }
69
+ },
70
+ "tunnel": {
71
+ "type": "object",
72
+ "description": "内网穿透配置",
73
+ "x-merge": "dict",
74
+ "properties": {
75
+ "targets": {
76
+ "type": "array",
77
+ "description": "穿透目标列表",
78
+ "items": {
79
+ "type": "object"
80
+ }
81
+ }
82
+ }
83
+ },
84
+ "aun": {
85
+ "type": "object",
86
+ "description": "AUN 进程配置",
87
+ "x-merge": "dict",
88
+ "properties": {
89
+ "gatewayUrl": {
90
+ "not": {},
91
+ "description": "已移除;网关由 fastaun 缓存和 AID discovery 决定"
92
+ },
93
+ "defaultAidDomain": {
94
+ "type": "string",
95
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)+$",
96
+ "description": "自动生成控制 AID 与 benchmark AID 使用的后缀域名;不影响已有 AID"
97
+ },
98
+ "minEvolVersion": {
99
+ "type": "string",
100
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$",
101
+ "description": "AUN Menu 允许的最低 Evol 客户端版本;省略时不限制"
102
+ },
103
+ "menuTokenRequired": {
104
+ "type": "boolean",
105
+ "default": false,
106
+ "description": "是否要求普通 AUN Menu 请求携带有效 menu_token;默认 false"
107
+ },
108
+ "defaultEncrypt": {
109
+ "type": "boolean",
110
+ "description": "所有 daemon 管理的 AUN 通道共用的出站默认加密值;省略时为 true"
111
+ }
112
+ }
113
+ },
114
+ "services": {
115
+ "type": "array",
116
+ "description": "daemon 管理的本机服务及其可选 AUN 代理",
117
+ "x-merge": "list",
118
+ "items": {
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": [
122
+ "name",
123
+ "enabled"
124
+ ],
125
+ "properties": {
126
+ "name": {
127
+ "type": "string",
128
+ "pattern": "^[a-z0-9_-]+$",
129
+ "description": "服务的逻辑标识,同时作为 AUN 代理路由名;ecweb 表示本机 EC Web 服务实例"
130
+ },
131
+ "enabled": {
132
+ "type": "boolean",
133
+ "default": true,
134
+ "description": "是否启用本机服务实例"
135
+ },
136
+ "port": {
137
+ "type": "integer",
138
+ "minimum": 1,
139
+ "maximum": 65535,
140
+ "description": "本机服务期望监听端口"
141
+ },
142
+ "proxy": {
143
+ "type": "object",
144
+ "additionalProperties": false,
145
+ "allOf": [
146
+ {
147
+ "if": {
148
+ "properties": {
149
+ "enabled": {
150
+ "const": true
151
+ },
152
+ "source": {
153
+ "const": "static"
154
+ }
155
+ },
156
+ "required": [
157
+ "enabled",
158
+ "source"
159
+ ]
160
+ },
161
+ "then": {
162
+ "required": [
163
+ "endpoint",
164
+ "visibility"
165
+ ]
166
+ }
167
+ },
168
+ {
169
+ "if": {
170
+ "properties": {
171
+ "enabled": {
172
+ "const": true
173
+ }
174
+ },
175
+ "required": [
176
+ "enabled"
177
+ ]
178
+ },
179
+ "then": {
180
+ "required": [
181
+ "source",
182
+ "visibility"
183
+ ]
184
+ }
185
+ }
186
+ ],
187
+ "properties": {
188
+ "enabled": {
189
+ "type": "boolean",
190
+ "default": false,
191
+ "description": "是否通过 AUN Service Proxy 暴露该服务"
192
+ },
193
+ "source": {
194
+ "type": "string",
195
+ "enum": [
196
+ "instance",
197
+ "static"
198
+ ],
199
+ "description": "instance 表示自动发现同名本机服务;static 使用 endpoint 显式回连"
200
+ },
201
+ "endpoint": {
202
+ "type": "string",
203
+ "maxLength": 2048,
204
+ "description": "source=static 时使用的本机 HTTP/HTTPS 或 WS/WSS 回连地址"
205
+ },
206
+ "serviceType": {
207
+ "type": "string",
208
+ "enum": [
209
+ "http",
210
+ "websocket",
211
+ "ssh"
212
+ ],
213
+ "default": "http",
214
+ "description": "AUN 中公布的服务类型"
215
+ },
216
+ "visibility": {
217
+ "type": "string",
218
+ "enum": [
219
+ "public",
220
+ "private",
221
+ "aun-auth"
222
+ ],
223
+ "default": "private",
224
+ "description": "AUN Service Proxy 访问策略"
225
+ },
226
+ "metadata": {
227
+ "type": "object",
228
+ "description": "非敏感服务描述;不得包含 endpoint、token、secret、cookie 等敏感信息",
229
+ "additionalProperties": {
230
+ "type": "string",
231
+ "maxLength": 8192
232
+ }
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ },
239
+ "configSnapshots": {
240
+ "type": "boolean",
241
+ "default": true,
242
+ "description": "是否自动维护配置快照、启动日志和自检回落",
243
+ "x-merge": "scalar"
244
+ },
245
+ "restartRecovery": {
246
+ "type": "object",
247
+ "description": "重启失败后的自动修复配置;仅控制 restart-monitor 的 Claude self-heal",
248
+ "x-merge": "dict",
249
+ "additionalProperties": false,
250
+ "properties": {
251
+ "enabled": {
252
+ "type": "boolean",
253
+ "default": false,
254
+ "description": "是否在重启失败后执行 Claude 自动修复;默认关闭"
255
+ }
256
+ }
257
+ },
258
+ "delegationDiagnostics": {
259
+ "type": "object",
260
+ "description": "任务授权诊断持久化;仅用于排障,不恢复授权,事件保留 180 天、历史状态保留 90 天",
261
+ "x-merge": "dict",
262
+ "additionalProperties": false,
263
+ "properties": {
264
+ "enabled": {
265
+ "type": "boolean",
266
+ "default": true,
267
+ "description": "是否持久化任务授权诊断;关闭后保留历史,内存诊断与权限校验不受影响,保存后热生效"
268
+ }
269
+ }
270
+ },
271
+ "idleMonitor": {
272
+ "type": "object",
273
+ "description": "流式输出空闲监控配置",
274
+ "x-merge": "dict",
275
+ "properties": {
276
+ "enabled": {
277
+ "type": "boolean",
278
+ "default": true,
279
+ "description": "是否启用空闲监控"
280
+ },
281
+ "timeout": {
282
+ "type": "number",
283
+ "default": 120,
284
+ "description": "空闲超时秒数"
285
+ },
286
+ "apiRetryTimeout": {
287
+ "type": "number",
288
+ "description": "API 重试尝试连续无事件时的超时秒数;未设置时继承 timeout"
289
+ },
290
+ "maxExecutionTime": {
291
+ "type": "number",
292
+ "description": "单个任务总执行时限(秒);未配置、非数字或小于等于 0 表示不限制"
293
+ }
294
+ }
295
+ },
296
+ "watch": {
297
+ "type": "object",
298
+ "description": "日志监听配置",
299
+ "x-merge": "dict",
300
+ "properties": {
301
+ "logTypes": {
302
+ "type": "array",
303
+ "description": "要监听的日志类型",
304
+ "items": {
305
+ "type": "string"
306
+ }
307
+ }
308
+ }
309
+ },
310
+ "upgrade": {
311
+ "type": "object",
312
+ "description": "npm 更新策略;不影响手动更新和显式重启",
313
+ "x-merge": "dict",
314
+ "additionalProperties": false,
315
+ "properties": {
316
+ "autoOnStart": {
317
+ "type": "boolean",
318
+ "default": true,
319
+ "description": "启动时检查并应用 EvolCore 更新"
320
+ },
321
+ "testPackages": {
322
+ "type": "boolean",
323
+ "default": false,
324
+ "description": "使用 test 标签而非 latest 稳定版"
325
+ }
326
+ }
327
+ }
328
+ }
329
+ }