evolcore 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/CHANGELOG.md +632 -565
  2. package/LICENSE +21 -21
  3. package/README.md +455 -455
  4. package/bin/codex-managed-acl.ps1 +203 -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-availability.js +68 -0
  10. package/dist/agents/baseagent.js +96 -46
  11. package/dist/agents/claude-runner.js +172 -33
  12. package/dist/agents/codex/app-server-client.js +76 -31
  13. package/dist/agents/codex/catalog.js +1 -1
  14. package/dist/agents/codex/diagnostics.js +34 -1
  15. package/dist/agents/codex-runner.js +434 -446
  16. package/dist/agents/ecagent-runner.js +174 -34
  17. package/dist/agents/gemini-runner.js +8 -7
  18. package/dist/agents/runner-types.js +75 -19
  19. package/dist/aun/aid/agentmd.js +151 -36
  20. package/dist/aun/aid/client.js +1 -1
  21. package/dist/aun/aid/control-aid.js +180 -1
  22. package/dist/aun/aid/identity.js +4 -4
  23. package/dist/aun/aid/index.js +1 -1
  24. package/dist/aun/aid/store.js +17 -13
  25. package/dist/aun/group/history.js +303 -0
  26. package/dist/aun/group/identity.js +43 -0
  27. package/dist/aun/group/index.js +5 -0
  28. package/dist/aun/{msg/group.js → group/operations.js} +162 -39
  29. package/dist/aun/{menu-client.js → menu/client.js} +85 -6
  30. package/dist/aun/menu/index.js +2 -0
  31. package/dist/aun/menu/transport.js +49 -0
  32. package/dist/aun/msg/index.js +2 -1
  33. package/dist/aun/msg/managed-operation.js +85 -19
  34. package/dist/aun/msg/mention-schema.js +51 -0
  35. package/dist/aun/msg/p2p.js +19 -9
  36. package/dist/aun/msg/upload.js +43 -80
  37. package/dist/aun/outbox.js +29 -7
  38. package/dist/aun/rpc/client.js +1 -0
  39. package/dist/aun/storage/client.js +39 -50
  40. package/dist/channels/aun.js +842 -318
  41. package/dist/channels/daemon.js +10 -6
  42. package/dist/cli/agent-command.js +212 -89
  43. package/dist/cli/agent-create.js +626 -11
  44. package/dist/cli/agent.js +125 -13
  45. package/dist/cli/aun-commands.js +487 -337
  46. package/dist/cli/bench.js +20 -20
  47. package/dist/cli/config.js +55 -33
  48. package/dist/cli/contact.js +72 -15
  49. package/dist/cli/ctl-command.js +24 -24
  50. package/dist/cli/daemon-commands.js +140 -63
  51. package/dist/cli/diag.js +31 -0
  52. package/dist/cli/fs-command.js +70 -70
  53. package/dist/cli/handoff-command.js +46 -14
  54. package/dist/cli/index.js +91 -79
  55. package/dist/cli/init.js +34 -1
  56. package/dist/cli/link-rules.js +21 -21
  57. package/dist/cli/managed-command-guard.js +5 -1
  58. package/dist/cli/menu-client.js +51 -32
  59. package/dist/cli/model.js +3 -3
  60. package/dist/cli/net-check.js +22 -22
  61. package/dist/cli/queue-command.js +31 -31
  62. package/dist/cli/response.js +32 -32
  63. package/dist/cli/restart-monitor.js +103 -42
  64. package/dist/cli/stats.js +51 -51
  65. package/dist/cli/task-command.js +59 -0
  66. package/dist/cli/task-context.js +97 -49
  67. package/dist/cli/trigger-command.js +74 -64
  68. package/dist/config/builtin-roles.js +11 -0
  69. package/dist/config/config-field-policy.js +11 -0
  70. package/dist/config/config-manager.js +32 -4
  71. package/dist/config/config-operation-service.js +160 -0
  72. package/dist/config/contact-book-store.js +1 -1
  73. package/dist/config/contact-book.js +1 -1
  74. package/dist/config/contact-operation-service.js +97 -8
  75. package/dist/config/peer-role-resolver.js +1 -1
  76. package/dist/config/resolved-config-op.js +30 -7
  77. package/dist/config-store.js +1 -1
  78. package/dist/core/agent-application-service.js +7 -1
  79. package/dist/core/audit/event-key.js +17 -2
  80. package/dist/core/audit/log-integrity.js +34 -8
  81. package/dist/core/auth/agent-delegation.js +48 -14
  82. package/dist/core/auth/auth-gateway.js +2 -0
  83. package/dist/core/auth/authorization-audit.js +53 -49
  84. package/dist/core/auth/operation-authorizer.js +90 -7
  85. package/dist/core/auth/operation-catalog.js +145 -4
  86. package/dist/core/auth/remote-access-store.js +155 -10
  87. package/dist/core/bootstrap-messages.js +66 -7
  88. package/dist/core/bootstrap-service.js +111 -20
  89. package/dist/core/command/agent-control.js +88 -7
  90. package/dist/core/command/agent-storage-menu.js +443 -0
  91. package/dist/core/command/cli-intent-parser.js +19 -0
  92. package/dist/core/command/command-handler.js +159 -65
  93. package/dist/core/command/data-root-resolver.js +273 -0
  94. package/dist/core/command/diag-service.js +118 -0
  95. package/dist/core/command/group-menu.js +7 -2
  96. package/dist/core/command/menu-catalog.js +46 -7
  97. package/dist/core/command/menu-handler.js +392 -100
  98. package/dist/core/command/menu-protocol.js +45 -6
  99. package/dist/core/command/menu-token-store.js +41 -8
  100. package/dist/core/command/role-menu.js +2 -2
  101. package/dist/core/command/slash-gate.js +34 -4
  102. package/dist/core/command/slash-handler.js +123 -43
  103. package/dist/core/event-catalog.js +4 -0
  104. package/dist/core/evolagent-registry.js +28 -2
  105. package/dist/core/group/invite-service.js +924 -0
  106. package/dist/core/handoff/runtime.js +205 -27
  107. package/dist/core/handoff/store.js +193 -4
  108. package/dist/core/interaction-router.js +22 -8
  109. package/dist/core/message/im-renderer.js +146 -34
  110. package/dist/core/message/message-bridge.js +163 -20
  111. package/dist/core/message/message-log.js +5 -3
  112. package/dist/core/message/message-queue.js +99 -41
  113. package/dist/core/message/message-utils.js +1 -0
  114. package/dist/core/message/response-engine.js +755 -144
  115. package/dist/core/model/catalog-service.js +79 -49
  116. package/dist/core/model/context-window-suffix.js +33 -0
  117. package/dist/core/model/model-catalog.js +1 -1
  118. package/dist/core/model/model-permission.js +12 -3
  119. package/dist/core/permission/approval-gateway.js +36 -3
  120. package/dist/core/permission/ec-command-parser.js +112 -41
  121. package/dist/core/permission/protected-paths.js +134 -16
  122. package/dist/core/permission/sandbox-runtime.js +108 -17
  123. package/dist/core/permission/tool-error-code.js +15 -0
  124. package/dist/core/permission/tool-policy.js +9 -8
  125. package/dist/core/relation/peer-identity.js +57 -6
  126. package/dist/core/relation/shared-data.js +106 -0
  127. package/dist/core/role/runtime-policy.js +64 -0
  128. package/dist/core/runtime-lock.js +10 -26
  129. package/dist/core/session/runner-task-history.js +170 -0
  130. package/dist/core/session/session-manager.js +34 -6
  131. package/dist/core/session/session-mapper.js +41 -0
  132. package/dist/core/session/session-turn-coordinator.js +37 -7
  133. package/dist/core/session/session-turns.js +48 -7
  134. package/dist/core/task/task-recovery-service.js +176 -0
  135. package/dist/core/task/task-resume-operation.js +32 -0
  136. package/dist/eck/group-rules-sync.js +5 -3
  137. package/dist/eck/kit-renderer.js +1 -0
  138. package/dist/index.js +588 -217
  139. package/dist/ipc.js +193 -15
  140. package/dist/paths.js +17 -4
  141. package/dist/product.js +2 -0
  142. package/dist/response-system/engines/v1/proactive-flow.js +59 -2
  143. package/dist/stats/billing.js +41 -15
  144. package/dist/stats/db.js +159 -159
  145. package/dist/stats/eck-vars.js +9 -9
  146. package/dist/stats/price-resolver.js +28 -10
  147. package/dist/stats/query.js +139 -139
  148. package/dist/stats/role-budget.js +6 -6
  149. package/dist/stats/writer.js +51 -51
  150. package/dist/trigger/event-source.js +19 -0
  151. package/dist/trigger/feedback.js +233 -40
  152. package/dist/trigger/parser.js +55 -5
  153. package/dist/trigger/patch.js +9 -0
  154. package/dist/trigger/scheduler.js +30 -4
  155. package/dist/trigger/validation.js +20 -3
  156. package/dist/utils/cross-platform.js +30 -1
  157. package/dist/utils/ecweb-utils.js +1 -0
  158. package/dist/utils/error-dict.json +160 -160
  159. package/dist/utils/error-utils.js +61 -2
  160. package/dist/utils/evolcore-version.js +129 -0
  161. package/dist/utils/logger.js +26 -14
  162. package/dist/utils/macos-autostart.js +22 -22
  163. package/dist/utils/model-prices.jsonl +23 -23
  164. package/dist/utils/npm-ops.js +176 -35
  165. package/dist/utils/tool-summary.js +59 -3
  166. package/dist/utils/welcome.js +196 -23
  167. package/ecagent/LICENSE +21 -21
  168. package/ecagent/NOTICE +11 -11
  169. package/ecagent/README.md +61 -61
  170. package/ecagent/dist/harness/agent-harness.js +3 -0
  171. package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
  172. package/ecagent/dist/harness/compaction/compaction.js +83 -83
  173. package/ecagent/dist/harness/messages.js +7 -7
  174. package/ecagent/dist/harness/session/jsonl-storage.js +21 -2
  175. package/kits/docs/GUIDE.md +20 -20
  176. package/kits/docs/INDEX.md +60 -66
  177. package/kits/docs/aun/CHEATSHEET.md +19 -19
  178. package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
  179. package/kits/docs/channels/aun.md +69 -56
  180. package/kits/docs/channels/feishu.md +56 -56
  181. package/kits/docs/context-assembly.md +379 -367
  182. package/kits/docs/eck_templates/GUIDE.template.md +22 -22
  183. package/kits/docs/eck_templates/INDEX.template.md +28 -28
  184. package/kits/docs/eck_templates/path-registry.template.md +33 -33
  185. package/kits/docs/eck_templates/runtime.template.md +19 -19
  186. package/kits/docs/evolcore/INDEX.md +76 -71
  187. package/kits/docs/evolcore/agent-create.md +202 -165
  188. package/kits/docs/evolcore/agent.md +99 -67
  189. package/kits/docs/evolcore/aid.md +68 -60
  190. package/kits/docs/evolcore/codex-windows-sandbox.md +146 -146
  191. package/kits/docs/evolcore/config.md +241 -195
  192. package/kits/docs/evolcore/contact.md +75 -68
  193. package/kits/docs/evolcore/ctl.md +46 -46
  194. package/kits/docs/evolcore/event.md +216 -216
  195. package/kits/docs/evolcore/fs-architecture.md +1215 -1215
  196. package/kits/docs/evolcore/fs.md +110 -110
  197. package/kits/docs/evolcore/group-collaboration.md +244 -244
  198. package/kits/docs/evolcore/group-fs.md +17 -17
  199. package/kits/docs/evolcore/group-rules.md +251 -251
  200. package/kits/docs/evolcore/group.md +267 -152
  201. package/kits/docs/evolcore/menu-client.md +58 -34
  202. package/kits/docs/evolcore/model.md +50 -50
  203. package/kits/docs/evolcore/msg.md +169 -165
  204. package/kits/docs/evolcore/response.md +75 -75
  205. package/kits/docs/evolcore/rpc.md +37 -37
  206. package/kits/docs/evolcore/self-summary.md +29 -29
  207. package/kits/docs/evolcore/stats.md +83 -83
  208. package/kits/docs/evolcore/storage.md +53 -50
  209. package/kits/docs/evolcore/task.md +14 -0
  210. package/kits/docs/evolcore/trigger.md +623 -575
  211. package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
  212. package/kits/docs/identity/PATH_OPS.md +16 -16
  213. package/kits/docs/identity/ROLE_DETAIL.md +25 -25
  214. package/kits/docs/identity/identity-tools.md +26 -26
  215. package/kits/docs/path-registry.md +62 -62
  216. package/kits/docs/prompt-loading-architecture.md +269 -269
  217. package/kits/docs/venues/aun-group.md +45 -45
  218. package/kits/docs/venues/aun-private.md +10 -10
  219. package/kits/docs/venues/client-desktop.md +10 -10
  220. package/kits/docs/venues/client-mobile.md +10 -10
  221. package/kits/docs/venues/feishu-group.md +13 -13
  222. package/kits/docs/venues/feishu-private.md +9 -9
  223. package/kits/docs/venues/group.md +42 -25
  224. package/kits/docs/venues/private.md +10 -10
  225. package/kits/eck_manifest.auxiliary.json +43 -43
  226. package/kits/eck_manifest.json +217 -190
  227. package/kits/eck_message_manifest.json +74 -74
  228. package/kits/migrations/README-role-config-v4.md +32 -32
  229. package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
  230. package/kits/migrations/migrate-role-config-v4.mjs +614 -614
  231. package/kits/migrations/migrate-role-config-v5.mjs +365 -365
  232. package/kits/migrations/rename-config-file.mjs +99 -99
  233. package/kits/rules/01-overview.md +166 -162
  234. package/kits/rules/02-navigation.md +96 -96
  235. package/kits/rules/03-identity.md +36 -36
  236. package/kits/rules/04-relation.md +76 -75
  237. package/kits/rules/05-venue.md +60 -60
  238. package/kits/rules/06-channel.md +65 -63
  239. package/kits/schemas/_meta.json +53 -53
  240. package/kits/schemas/agent-config.schema.1.json +177 -177
  241. package/kits/schemas/agent-config.schema.10.json +395 -395
  242. package/kits/schemas/agent-config.schema.11.json +421 -421
  243. package/kits/schemas/agent-config.schema.12.json +451 -427
  244. package/kits/schemas/agent-config.schema.2.json +239 -239
  245. package/kits/schemas/agent-config.schema.3.json +119 -119
  246. package/kits/schemas/agent-config.schema.4.json +208 -208
  247. package/kits/schemas/agent-config.schema.5.json +326 -326
  248. package/kits/schemas/agent-config.schema.6.json +322 -322
  249. package/kits/schemas/agent-config.schema.7.json +303 -303
  250. package/kits/schemas/agent-config.schema.8.json +304 -304
  251. package/kits/schemas/agent-config.schema.9.json +364 -364
  252. package/kits/schemas/contact-book.schema.1.json +36 -36
  253. package/kits/schemas/contact-book.schema.2.json +43 -43
  254. package/kits/schemas/contact-book.schema.3.json +67 -67
  255. package/kits/schemas/daemon.schema.1.json +91 -91
  256. package/kits/schemas/daemon.schema.2.json +101 -101
  257. package/kits/schemas/daemon.schema.3.json +123 -123
  258. package/kits/schemas/daemon.schema.4.json +136 -136
  259. package/kits/schemas/daemon.schema.5.json +135 -135
  260. package/kits/schemas/daemon.schema.6.json +131 -131
  261. package/kits/schemas/defaults.schema.1.json +81 -81
  262. package/kits/schemas/defaults.schema.2.json +85 -85
  263. package/kits/schemas/defaults.schema.3.json +73 -73
  264. package/kits/schemas/defaults.schema.4.json +107 -107
  265. package/kits/schemas/defaults.schema.5.json +119 -119
  266. package/kits/schemas/menu-exec-schema-commands.md +208 -208
  267. package/kits/schemas/migrations/README.md +30 -30
  268. package/kits/schemas/relation-config.schema.1.json +158 -158
  269. package/kits/schemas/relation-config.schema.2.json +73 -73
  270. package/kits/schemas/relation-config.schema.3.json +50 -50
  271. package/kits/schemas/relation-config.schema.4.json +47 -47
  272. package/kits/schemas/relation-config.schema.5.json +47 -47
  273. package/kits/schemas/relation-config.schema.6.json +46 -46
  274. package/kits/schemas/relation-config.schema.7.json +59 -59
  275. package/kits/schemas/relation-config.schema.8.json +103 -103
  276. package/kits/schemas/role-config.schema.1.json +215 -201
  277. package/kits/schemas/role-registry.schema.1.json +35 -35
  278. package/kits/schemas/single-session.schema.1.json +31 -31
  279. package/kits/schemas/single-session.schema.2.json +57 -57
  280. package/kits/schemas/single-session.schema.3.json +32 -32
  281. package/kits/templates/bootstrap-welcome.md +17 -17
  282. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
  283. package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
  284. package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
  285. package/kits/templates/message-fragments/inject-default.md +2 -2
  286. package/kits/templates/message-fragments/item.md +2 -2
  287. package/kits/templates/roles/admin.json +92 -92
  288. package/kits/templates/roles/member.json +101 -96
  289. package/kits/templates/roles/owner.json +9 -9
  290. package/kits/templates/roles/visitor.json +90 -85
  291. package/kits/templates/system-fragments/baseagent.md +14 -14
  292. package/kits/templates/system-fragments/bootstrap.md +53 -34
  293. package/kits/templates/system-fragments/channel.md +28 -64
  294. package/kits/templates/system-fragments/commands.md +36 -28
  295. package/kits/templates/system-fragments/group-unread-history.md +7 -0
  296. package/kits/templates/system-fragments/identity.md +13 -13
  297. package/kits/templates/system-fragments/relation.md +19 -19
  298. package/kits/templates/system-fragments/reply.md +56 -0
  299. package/kits/templates/system-fragments/session.md +59 -59
  300. package/kits/templates/system-fragments/venue.md +31 -31
  301. package/package.json +104 -98
  302. package/dist/aun/group-identity.js +0 -9
  303. /package/dist/aun/{group-fs-download.js → group/fs-download.js} +0 -0
  304. /package/dist/aun/{msg/group-index.js → group/index-rpc.js} +0 -0
@@ -1,3 +1,4 @@
1
+ import { ExecutionTimeoutError } from '../utils/error-utils.js';
1
2
  import { normalizeExecutionMode } from '../trigger/validation.js';
2
3
  import { resolvePeerRoleDetail } from '../config/peer-role-resolver.js';
3
4
  const DEFAULT_WATCHDOG_MS = 11 * 60 * 1000;
@@ -349,7 +350,7 @@ export class DaemonChannel {
349
350
  watchdogMs: this.watchdogMs,
350
351
  }))
351
352
  return;
352
- this.cancelDeliveryInBackground(slot);
353
+ this.cancelDeliveryInBackground(slot, new ExecutionTimeoutError('daemon_watchdog_timeout', this.watchdogMs));
353
354
  this.settleTerminal(runId, slot);
354
355
  }
355
356
  resetWatchdog(runId, slot) {
@@ -373,20 +374,23 @@ export class DaemonChannel {
373
374
  totalExecutionMs,
374
375
  }))
375
376
  return;
376
- this.cancelDeliveryInBackground(slot);
377
+ this.cancelDeliveryInBackground(slot, new ExecutionTimeoutError('daemon_total_execution_timeout', totalExecutionMs));
377
378
  this.settleTerminal(runId, slot);
378
379
  }
379
- cancelDeliveryInBackground(slot) {
380
- const cancellation = this.cancelDelivery(slot.messageId);
380
+ cancelDeliveryInBackground(slot, timeout) {
381
+ const cancellation = this.cancelDelivery(slot.messageId, timeout);
381
382
  slot.cancellationBarrier = cancellation;
382
383
  void cancellation.then(() => undefined, () => undefined);
383
384
  }
384
- async cancelDelivery(messageId) {
385
+ async cancelDelivery(messageId, timeout) {
385
386
  const queue = this.messageQueue;
386
387
  if (queue.cancel?.(messageId))
387
388
  return;
388
389
  if (queue.cancelActiveAndWait) {
389
- await queue.cancelActiveAndWait(messageId);
390
+ if (timeout)
391
+ await queue.cancelActiveAndWait(messageId, undefined, timeout);
392
+ else
393
+ await queue.cancelActiveAndWait(messageId);
390
394
  return;
391
395
  }
392
396
  queue.cancelActive?.(messageId);
@@ -1,7 +1,23 @@
1
1
  import path from 'path';
2
+ import { MAIN_CLI_BIN, SELF_AID_ENV, SESSION_ID_ENV } from '../product.js';
2
3
  import { getArgValue, isHelpFlag, wantsHelp } from './help.js';
3
4
  import { isHostChinese } from '../utils/locale.js';
4
5
  import { readTaskRuntimeContextFromEnv } from './task-context.js';
6
+ import { parseAgentWelcomeArgs } from './agent-create.js';
7
+ function printBootstrapDeliveries(result) {
8
+ for (const delivery of result?.deliveries ?? []) {
9
+ if (delivery.status === 'sent')
10
+ console.log(` ${delivery.owner}: 消息已被网关接受 (${delivery.messageId})`);
11
+ else if (delivery.status === 'queued')
12
+ console.log(` ${delivery.owner}: 消息已入队,等待重试 (${delivery.outboxId})`);
13
+ else if (delivery.status === 'failed')
14
+ console.error(` ${delivery.owner}: 消息发送失败 [${delivery.code ?? 'unknown'}] ${delivery.error}`);
15
+ else
16
+ console.log(` ${delivery.owner}: 没有消息投递记录`);
17
+ }
18
+ if (result?.error)
19
+ console.error(` 消息状态异常: ${result.error}`);
20
+ }
5
21
  function formatTimeAgo(ms) {
6
22
  const sec = Math.floor(ms / 1000);
7
23
  if (sec < 60)
@@ -26,7 +42,7 @@ function formatBytes(bytes) {
26
42
  export async function cmdAgent(args) {
27
43
  const sub = args[0];
28
44
  const formatJson = getArgValue(args, '--format') === 'json';
29
- const commands = new Set(['list', 'show', 'new', 'enable', 'disable', 'get', 'set', 'persona', 'rename', 'ready', 'reload', 'delete']);
45
+ const commands = new Set(['list', 'show', 'new', 'initialize', 'enable', 'disable', 'get', 'set', 'persona', 'welcome', 'rename', 'ready', 'reload', 'delete']);
30
46
  if (sub === 'create') {
31
47
  const error = { ok: false, code: 'INVALID_COMMAND', error: '`ec agent create` is not a command; use `ec agent new`.' };
32
48
  if (formatJson)
@@ -37,46 +53,79 @@ export async function cmdAgent(args) {
37
53
  return;
38
54
  }
39
55
  if (!sub || isHelpFlag(sub) || (wantsHelp(args) && !commands.has(sub))) {
40
- console.log(`用法: ec agent <command>
41
-
42
- Commands:
43
- list 列出所有 agent
44
- show <aid> 查看 agent 详情(身份 + 配置 + 连接 + 会话 + 路径)
45
- new [aid] 交互式创建 agent
46
- new <aid> --non-interactive ... 非交互式创建
47
- enable <aid> 启用 agent
48
- disable <aid> 停用 agent
49
- get <aid> <key> 读取单个配置字段(支持点路径)
56
+ console.log(`用法: ec agent <command>
57
+
58
+ Commands:
59
+ list 列出所有 agent
60
+ show <aid> 查看 agent 详情(身份 + 配置 + 连接 + 会话 + 路径)
61
+ new [aid] 交互式创建 agent
62
+ new <aid> --non-interactive ... 非交互式创建
63
+ new <aid> --initialize ... 创建并激活(隐含非交互)
64
+ initialize <aid> --resume 恢复一次性初始化
65
+ enable <aid> 启用 agent
66
+ disable <aid> 停用 agent
67
+ get <aid> <key> 读取单个配置字段(支持点路径)
50
68
  set <aid> <key> <val> 修改单个配置字段(支持点路径)
51
69
  persona show 查看当前 Agent 的 persona.md
52
70
  persona --text <text> 用文本设置当前 Agent 的 persona.md
53
71
  persona --file <path> 用 .md/.txt 文件设置当前 Agent 的 persona.md
54
- rename <aid> <name> 修改 agent.md 中的显示名称
55
- ready <aid> 标记 bootstrap 完成,进入 active 状态
56
- reload [aid] 热重载配置(无参数=全量 resync)
57
- delete <aid> [--purge] 删除 agent
58
-
59
- Options:
60
- --format json 输出 JSON 格式
61
- --help, -h 各子命令均支持,查看详细用法
62
-
63
- 示例:
64
- ec agent list
65
- ec agent show mybot.agentid.pub
66
- ec agent new mybot.agentid.pub
67
- ec agent enable mybot.agentid.pub
68
- ec agent get mybot.agentid.pub active_baseagent
72
+ welcome show 查看已确认的 Bootstrap welcome 文案
73
+ welcome --text <text> 保存 Owner 已确认的 Bootstrap welcome 文案
74
+ rename <aid> <name> 修改 agent.md 中的显示名称
75
+ ready <aid> 标记 bootstrap 完成,进入 active 状态
76
+ reload [aid] 热重载配置(无参数=全量 resync)
77
+ delete <aid> [--purge] 删除 agent
78
+
79
+ Options:
80
+ --format json 输出 JSON 格式
81
+ --help, -h 各子命令均支持,查看详细用法
82
+
83
+ 示例:
84
+ ec agent list
85
+ ec agent show mybot.agentid.pub
86
+ ec agent new mybot.agentid.pub
87
+ ec agent enable mybot.agentid.pub
88
+ ec agent get mybot.agentid.pub active_baseagent
69
89
  ec agent set mybot.agentid.pub active_baseagent codex
70
90
  ec agent persona --text "你是一名严谨的诊断工程师。"
71
- ec agent rename mybot.agentid.pub "New Name"
72
- ec agent ready mybot.agentid.pub
91
+ ec agent rename mybot.agentid.pub "New Name"
92
+ ec agent ready mybot.agentid.pub
73
93
  ec agent delete mybot.agentid.pub --purge`);
74
94
  return;
75
95
  }
76
- const { agentList, agentShow, agentCreateInteractive, agentCreateNonInteractive, agentReload, agentEnable, agentDisable, agentGet, agentSet, agentPersona, agentRename, agentDelete, agentReady, runManagedAgentOperation, } = await import('./agent.js');
96
+ if ((sub === 'new' && args.includes('--initialize')) || sub === 'initialize') {
97
+ if (wantsHelp(args)) {
98
+ console.log('ec agent new <aid> --initialize --name <name> --description <text> --tags <json> [--owner <aid> | --owners <json>] [--persona-file <path> | --persona-text <text>] [--wait 0..300] [--dry-run] [--format json]\nec agent initialize <aid> --resume [--wait 0..300] [--format json]\n--initialize implies --non-interactive; waits for activation (default 60 seconds).');
99
+ return;
100
+ }
101
+ try {
102
+ const { runInitializationCommand } = await import('./agent-create.js');
103
+ const result = await runInitializationCommand(args);
104
+ if (formatJson)
105
+ console.log(JSON.stringify(result, null, 2));
106
+ else if (result.dryRun)
107
+ console.log(JSON.stringify(result, null, 2));
108
+ else if (result.ok)
109
+ console.log(`✓ ${result.aid} initialized (active)`);
110
+ else
111
+ console.error(`[${result.code}] ${result.error ?? result.phase ?? 'Initialization failed'}`);
112
+ if (!result.ok)
113
+ process.exitCode = result.code === 'INITIALIZE_PENDING' ? 2 : 1;
114
+ }
115
+ catch (error) {
116
+ const result = { ok: false, code: 'INVALID_ARGS', error: error instanceof Error ? error.message : String(error) };
117
+ if (formatJson)
118
+ console.log(JSON.stringify(result));
119
+ else
120
+ console.error(result.error);
121
+ process.exitCode = 1;
122
+ }
123
+ return;
124
+ }
125
+ const { agentList, agentShow, agentCreateInteractive, agentCreateNonInteractive, agentReload, agentEnable, agentDisable, agentGet, agentSet, agentPersona, agentWelcome, agentRename, agentDelete, agentReady, runManagedAgentOperation, } = await import('./agent.js');
77
126
  const { parseAgentOwnerArgs, parseAgentTags, resolveAgentCreatePlan, validateAgentCreatePlan } = await import('./agent-create.js');
78
- if (process.env.EVOLCORE_SESSION_ID && !wantsHelp(args) && !new Set(['get', 'set', 'persona', 'ready']).has(sub)) {
79
- if (sub === 'new' && !args.includes('--non-interactive')) {
127
+ if (process.env.EVOLCORE_SESSION_ID && !wantsHelp(args) && !new Set(['get', 'set', 'persona', 'welcome', 'ready']).has(sub)) {
128
+ if (sub === 'new' && !args.includes('--non-interactive') && !args.includes('--initialize')) {
80
129
  const error = {
81
130
  ok: false,
82
131
  code: 'MANAGED_NON_INTERACTIVE_REQUIRED',
@@ -137,8 +186,8 @@ Options:
137
186
  // --- list ---
138
187
  if (sub === 'list') {
139
188
  if (wantsHelp(args)) {
140
- console.log(`用法: ec agent list [--format json]
141
-
189
+ console.log(`用法: ec agent list [--format json]
190
+
142
191
  列出所有 agent,显示名称、状态、渠道、项目、基座、最后活跃时间。`);
143
192
  return;
144
193
  }
@@ -208,27 +257,31 @@ Options:
208
257
  // --- new ---
209
258
  if (sub === 'new') {
210
259
  if (wantsHelp(args)) {
211
- console.log(`用法: ec agent new [aid] 交互式创建
212
- ec agent new <aid> --non-interactive [选项]
213
-
214
- 非交互模式选项:
215
- --project <path> 默认: 当前目录
216
- --baseagent <claude|codex|gemini|ecagent>
217
- 默认: defaults 配置,否则检测本机可用基座
260
+ console.log(`用法: ec agent new [aid] 交互式创建
261
+ ec agent new <aid> --non-interactive [选项]
262
+
263
+ 非交互模式选项:
264
+ --initialize 使用显式名片直接完成初始化(隐含 --non-interactive)
265
+ --persona-file <path> 初始化人格 .md/.txt(或 --persona-text <text>)
266
+ --wait <seconds> 初始化等待 0–300 秒,默认 60
267
+ --project <path> 默认: 当前目录
268
+ --baseagent <claude|codex|gemini|ecagent>
269
+ 默认: defaults 配置,否则检测本机可用基座
218
270
  --owner <aid> 默认: daemon.json 第一个 owner
219
271
  --owners <json-array> 多个 Owner;与 --owner 互斥
220
272
  --handoff <context> 当前任务的 Bootstrap 上下文
221
- --name <display-name> 默认: package.json name,否则目录名
273
+ --name <display-name> 默认: package.json name,否则目录名
222
274
  --description <text> 默认: package.json description,否则使用 EvolCore 默认描述
275
+ --type <type> 主体类型: human|agent|group|service|device|org|host(默认 agent)
223
276
  --tags <json-array> 3 到 6 个标签,例如 '["coding","diagnostics","logs"]'
224
- --dry-run 只预览最终参数,不注册 AID、不写文件
225
- --force 覆盖已有 config.json
226
- --format json 输出 JSON
227
-
228
- 示例:
229
- ec agent new mybot.agentid.pub
230
- ec agent new mybot.agentid.pub --non-interactive
231
- ec agent new mybot.agentid.pub --non-interactive --dry-run --format json
277
+ --dry-run 只预览最终参数,不注册 AID、不写文件
278
+ --force 覆盖已有 config.json
279
+ --format json 输出 JSON
280
+
281
+ 示例:
282
+ ec agent new mybot.agentid.pub
283
+ ec agent new mybot.agentid.pub --non-interactive
284
+ ec agent new mybot.agentid.pub --non-interactive --dry-run --format json
232
285
  ec agent new mybot.agentid.pub --non-interactive --project ../project --baseagent claude`);
233
286
  return;
234
287
  }
@@ -286,6 +339,7 @@ Options:
286
339
  handoff: getArg('--handoff'),
287
340
  name: getArg('--name'),
288
341
  description: getArg('--description'),
342
+ type: getArg('--type'),
289
343
  tags,
290
344
  force: args.includes('--force'),
291
345
  });
@@ -324,6 +378,7 @@ Options:
324
378
  owners: plan.owners,
325
379
  name: plan.name,
326
380
  description: plan.description,
381
+ type: plan.type,
327
382
  tags: plan.tags,
328
383
  force: args.includes('--force'),
329
384
  });
@@ -351,6 +406,15 @@ Options:
351
406
  : result.hotLoadError
352
407
  ? ` ✗ 热重载失败:${result.hotLoadError}`
353
408
  : ' ⚠ 服务未运行,下次 ec start 时生效');
409
+ if (result.ownerContactsSynced?.length) {
410
+ console.log(` ✓ 已同步 Owner 联系人: ${result.ownerContactsSynced.join(', ')}`);
411
+ }
412
+ if (result.ownerContactsSkipped?.length) {
413
+ console.log(` ⚠ 无本地联系人簿,跳过 Owner: ${result.ownerContactsSkipped.join(', ')}`);
414
+ }
415
+ if (result.ownerContactSyncErrors?.length) {
416
+ console.log(` ⚠ Owner 联系人同步失败: ${result.ownerContactSyncErrors.join('; ')}`);
417
+ }
354
418
  if (result.ownerBoundAid) {
355
419
  console.log(` ✓ agent owner 已绑定: ${result.ownerBoundAid}`);
356
420
  }
@@ -385,6 +449,15 @@ Options:
385
449
  : result.hotLoadError
386
450
  ? ` ✗ 热重载失败:${result.hotLoadError}`
387
451
  : ' ⚠ 服务未运行,下次 ec start 时生效');
452
+ if (result.ownerContactsSynced?.length) {
453
+ console.log(` ✓ 已同步 Owner 联系人: ${result.ownerContactsSynced.join(', ')}`);
454
+ }
455
+ if (result.ownerContactsSkipped?.length) {
456
+ console.log(` ⚠ 无本地联系人簿,跳过 Owner: ${result.ownerContactsSkipped.join(', ')}`);
457
+ }
458
+ if (result.ownerContactSyncErrors?.length) {
459
+ console.log(` ⚠ Owner 联系人同步失败: ${result.ownerContactSyncErrors.join('; ')}`);
460
+ }
388
461
  if (result.ownerBoundAid) {
389
462
  console.log(` ✓ agent owner 已绑定: ${result.ownerBoundAid}`);
390
463
  }
@@ -420,11 +493,11 @@ Options:
420
493
  // --- reload ---
421
494
  if (sub === 'reload') {
422
495
  if (wantsHelp(args)) {
423
- console.log(`用法: ec agent reload [aid] [--force] [--format json]
424
-
425
- 热重载 agent 配置。
426
- 无参数 全量 resync(扫磁盘,新增上线、删除下线、修改热更新)
427
- <aid> 仅热重载指定 agent
496
+ console.log(`用法: ec agent reload [aid] [--force] [--format json]
497
+
498
+ 热重载 agent 配置。
499
+ 无参数 全量 resync(扫磁盘,新增上线、删除下线、修改热更新)
500
+ <aid> 仅热重载指定 agent
428
501
  --force 中断目标 Agent 的运行中任务并清空排队任务后重载(仅与 <aid> 同用)`);
429
502
  return;
430
503
  }
@@ -456,9 +529,9 @@ Options:
456
529
  // --- enable ---
457
530
  if (sub === 'enable') {
458
531
  if (wantsHelp(args)) {
459
- console.log(`用法: ec agent enable <aid> [--force] [--format json]
460
-
461
- 启用 agent。若服务运行中会热重载,否则下次 ec start 时生效。
532
+ console.log(`用法: ec agent enable <aid> [--force] [--format json]
533
+
534
+ 启用 agent。若服务运行中会热重载,否则下次 ec start 时生效。
462
535
  --force 中断目标 Agent 的运行中任务并清空排队任务后重载`);
463
536
  return;
464
537
  }
@@ -488,9 +561,9 @@ Options:
488
561
  // --- disable ---
489
562
  if (sub === 'disable') {
490
563
  if (wantsHelp(args)) {
491
- console.log(`用法: ec agent disable <aid> [--force] [--format json]
492
-
493
- 停用 agent。若服务运行中会热重载离线,否则在配置中标记为禁用。
564
+ console.log(`用法: ec agent disable <aid> [--force] [--format json]
565
+
566
+ 停用 agent。若服务运行中会热重载离线,否则在配置中标记为禁用。
494
567
  --force 中断目标 Agent 的运行中任务并清空排队任务后重载`);
495
568
  return;
496
569
  }
@@ -596,16 +669,65 @@ Options:
596
669
  console.log(result.content ?? '(persona.md 不存在)');
597
670
  return;
598
671
  }
672
+ if (sub === 'welcome') {
673
+ if (args.length === 2 && isHelpFlag(args[1])) {
674
+ console.log(`用法: ${MAIN_CLI_BIN} agent welcome show [--format json]
675
+ ${MAIN_CLI_BIN} agent welcome --text <text> [--format json]
676
+
677
+ 读取或保存当前 Agent 在 Bootstrap 中经 Owner 确认的 welcome 文案。文案固定保存到 personal/welcome.md。`);
678
+ return;
679
+ }
680
+ let text;
681
+ try {
682
+ ({ text } = parseAgentWelcomeArgs(args.slice(1)));
683
+ }
684
+ catch (error) {
685
+ const result = { ok: false, code: 'INVALID_ARGS', error: error.message };
686
+ if (formatJson)
687
+ console.log(JSON.stringify(result));
688
+ else
689
+ console.error(`❌ ${result.error}`);
690
+ process.exitCode = 1;
691
+ return;
692
+ }
693
+ const taskAid = process.env[SESSION_ID_ENV] ? (readTaskRuntimeContextFromEnv()?.selfAid || '') : '';
694
+ const aid = taskAid || process.env[SELF_AID_ENV] || '';
695
+ if (!aid) {
696
+ const result = { ok: false, code: 'INVALID_ARGS', error: '无法确定当前 Agent AID' };
697
+ if (formatJson)
698
+ console.log(JSON.stringify(result));
699
+ else
700
+ console.error(`❌ ${result.error}`);
701
+ process.exitCode = 1;
702
+ return;
703
+ }
704
+ const result = await agentWelcome(aid, { text });
705
+ if (!result.ok) {
706
+ if (formatJson)
707
+ console.log(JSON.stringify(result));
708
+ else
709
+ console.error(`❌ ${result.error}`);
710
+ process.exitCode = 1;
711
+ return;
712
+ }
713
+ if (formatJson)
714
+ console.log(JSON.stringify(result, null, 2));
715
+ else if (result.saved)
716
+ console.log(`✓ ${aid} welcome.md 已保存`);
717
+ else
718
+ console.log(result.content ?? '(welcome.md 不存在)');
719
+ return;
720
+ }
599
721
  if (sub === 'get') {
600
722
  if (wantsHelp(args)) {
601
- console.log(`用法: ec agent get <aid> <key> [--format json]
602
-
603
- 读取单个配置字段。key 支持点路径,如 "channels.aun.enabled"。
604
- 托管任务通过 daemon 统一鉴权;无会话的本机 CLI 走控制面。
605
-
606
- 示例:
607
- ec agent get mybot.agentid.pub active_baseagent
608
- ec agent get mybot.agentid.pub observable
723
+ console.log(`用法: ec agent get <aid> <key> [--format json]
724
+
725
+ 读取单个配置字段。key 支持点路径,如 "channels.aun.enabled"。
726
+ 托管任务通过 daemon 统一鉴权;无会话的本机 CLI 走控制面。
727
+
728
+ 示例:
729
+ ec agent get mybot.agentid.pub active_baseagent
730
+ ec agent get mybot.agentid.pub observable
609
731
  ec agent get mybot.agentid.pub channels.aun.enabled`);
610
732
  return;
611
733
  }
@@ -637,15 +759,15 @@ Options:
637
759
  // --- set ---
638
760
  if (sub === 'set') {
639
761
  if (wantsHelp(args)) {
640
- console.log(`用法: ec agent set <aid> <key> <value> [--format json]
641
-
642
- 修改单个配置字段。key 支持点路径。本机控制面会尝试热重载;托管任务如需重载须另行执行 agent reload。
643
- 托管任务通过 daemon 统一鉴权;无会话的本机 CLI 走控制面。
644
-
645
- 示例:
646
- ec agent set mybot.agentid.pub active_baseagent codex
647
- ec agent set mybot.agentid.pub observable true
648
- ec agent set mybot.agentid.pub observable false
762
+ console.log(`用法: ec agent set <aid> <key> <value> [--format json]
763
+
764
+ 修改单个配置字段。key 支持点路径。本机控制面会尝试热重载;托管任务如需重载须另行执行 agent reload。
765
+ 托管任务通过 daemon 统一鉴权;无会话的本机 CLI 走控制面。
766
+
767
+ 示例:
768
+ ec agent set mybot.agentid.pub active_baseagent codex
769
+ ec agent set mybot.agentid.pub observable true
770
+ ec agent set mybot.agentid.pub observable false
649
771
  ec agent set mybot.agentid.pub channels.aun.enabled true`);
650
772
  return;
651
773
  }
@@ -677,8 +799,8 @@ Options:
677
799
  // --- ready ---
678
800
  if (sub === 'ready') {
679
801
  if (wantsHelp(args)) {
680
- console.log(`用法: ec agent ready <aid> [--format json]
681
-
802
+ console.log(`用法: ec agent ready <aid> [--format json]
803
+
682
804
  标记 agent bootstrap 已完成,将 lifecycle 切换为 active。该命令允许 agent 在工具调用中自报完成。`);
683
805
  return;
684
806
  }
@@ -701,17 +823,18 @@ Options:
701
823
  console.log(JSON.stringify(result, null, 2));
702
824
  }
703
825
  else {
704
- console.log(`✓ ${aid} lifecycle=active${result.reloaded ? ' (runtime updated)' : ' (daemon offline or not updated)'}`);
826
+ console.log(`✓ ${aid} lifecycle=active${result.reloaded ? ' (runtime updated)' : ''}`);
827
+ printBootstrapDeliveries(result.welcome);
705
828
  }
706
829
  return;
707
830
  }
708
831
  // --- delete ---
709
832
  if (sub === 'delete') {
710
833
  if (wantsHelp(args)) {
711
- console.log(`用法: ec agent delete <aid> [--purge] [--format json]
712
-
713
- 删除 agent 的配置。
714
- --purge 同时清除该 agent 的会话、消息、日志等运行时数据
834
+ console.log(`用法: ec agent delete <aid> [--purge] [--format json]
835
+
836
+ 删除 agent 的配置。
837
+ --purge 同时清除该 agent 的会话、消息、日志等运行时数据
715
838
  默认 仅删除 config.json,运行时数据保留`);
716
839
  return;
717
840
  }
@@ -742,8 +865,8 @@ Options:
742
865
  // --- show ---
743
866
  if (sub === 'show') {
744
867
  if (wantsHelp(args)) {
745
- console.log(`用法: ec agent show <aid> [--format json]
746
-
868
+ console.log(`用法: ec agent show <aid> [--format json]
869
+
747
870
  查看 agent 详情:身份、配置、连接状态、会话路径等。`);
748
871
  return;
749
872
  }
@@ -772,8 +895,8 @@ Options:
772
895
  // --- rename ---
773
896
  if (sub === 'rename') {
774
897
  if (wantsHelp(args)) {
775
- console.log(`用法: ec agent rename <aid> <name> [--format json]
776
-
898
+ console.log(`用法: ec agent rename <aid> <name> [--format json]
899
+
777
900
  修改本地 AIDs/<aid>/agent.md 中的 name 字段。`);
778
901
  return;
779
902
  }
@@ -819,7 +942,7 @@ Options:
819
942
  printAgentShowHuman(result);
820
943
  }
821
944
  function printAgentShowHuman(result) {
822
- console.log(`${result.aid} (${result.status})\n`);
945
+ console.log(`${result.aid} (${result.status}, lifecycle=${result.lifecycle || 'unknown'})\n`);
823
946
  if (result.identity.name || result.identity.description) {
824
947
  console.log(' Identity');
825
948
  if (result.identity.name)