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
package/dist/cli/agent.js CHANGED
@@ -1,25 +1,31 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { resolvePaths, agentMdPath as getAgentMdPathFromPaths, agentPersonalDir, aunPath as defaultAunPath } from '../paths.js';
3
+ import { SESSION_ID_ENV } from '../product.js';
4
+ import { resolvePaths, agentMdPath as getAgentMdPathFromPaths, agentPersonalDir, agentWelcomePath, aunPath as defaultAunPath } from '../paths.js';
4
5
  import { loadDefaults, loadAllAgents, loadAgent, saveAgent, ensureAgentDirSkeleton } from '../config-store.js';
5
6
  import { initConfigManager } from '../config/config-manager.js';
6
7
  import { resolveConfigCommand } from '../config/resolved-config-op.js';
7
- import { executeResolvedConfigCommand } from '../config/config-operation-service.js';
8
+ import { executeResolvedConfigCommandAsync } from '../config/config-operation-service.js';
8
9
  import { ipcQuery, IpcTransportError } from '../ipc.js';
9
10
  import { CONFIG_SCHEMA_VERSION } from '../types.js';
10
11
  import { ensureInitialRoleRegistry } from '../config/role-service.js';
11
12
  import { agentProjectRootFromDefaults, deriveAgentProjectPath } from '../utils/project-path.js';
12
13
  import { isValidChannelName } from '../core/channel-loader.js';
13
- import { AGENT_DELEGATION_TOKEN_ENV } from '../core/auth/agent-delegation.js';
14
+ import { AGENT_DELEGATION_TOKEN_ENV, readDelegationCredential } from '../core/auth/agent-delegation.js';
14
15
  import { readTaskRuntimeContextFromEnv } from './task-context.js';
16
+ import { isValidAid } from '../aun/aid/validation.js';
15
17
  import { isHClassPath, isLClassPath, isSameOrDescendant } from '../core/permission/protected-paths.js';
18
+ import { findPostBootstrapWelcomeOutbox } from '../core/bootstrap-messages.js';
19
+ import { resolveAgentLifecycle } from '../config/lifecycle.js';
20
+ import { initializationSummary } from './agent-create.js';
21
+ import { parseAgentWelcomeMetadata, readAgentWelcomeTemplate, renderPostBootstrapWelcomeMessage, saveAgentWelcomeTemplate, validateWelcomeTemplate } from '../utils/welcome.js';
16
22
  export { agentCreateInteractive, agentCreateNonInteractive, parseAgentOwnerArgs, resolveAgentCreatePlan, validateAgentCreatePlan, validateAgentOwnerOptions, } from './agent-create.js';
17
23
  /** Route agent lifecycle commands from a managed task through daemon IPC. */
18
24
  export async function runManagedAgentOperation(argv) {
19
25
  const sessionId = process.env.EVOLCORE_SESSION_ID;
20
26
  if (!sessionId)
21
27
  return { ok: false, code: 'MANAGED_ONLY', error: 'agent operation is not running in a managed task' };
22
- const delegationToken = process.env[AGENT_DELEGATION_TOKEN_ENV];
28
+ const delegationToken = readDelegationCredential();
23
29
  if (!delegationToken) {
24
30
  return { ok: false, code: 'DELEGATION_REQUIRED', error: `${AGENT_DELEGATION_TOKEN_ENV} is not set for the active task` };
25
31
  }
@@ -74,6 +80,7 @@ function toAgentListItem(info, stale = false) {
74
80
  name: info.name,
75
81
  personalName: info.personalName || null,
76
82
  status: stale && storedStatus !== 'disabled' && storedStatus !== 'error' ? 'unknown' : storedStatus,
83
+ lifecycle: info.lifecycle ?? null,
77
84
  channels: info.channels || [],
78
85
  projectPath: toPosix(info.projectPath || null),
79
86
  baseagent: info.baseagent || null,
@@ -158,6 +165,27 @@ export async function agentShow(aid) {
158
165
  registry.loadAll();
159
166
  const agent = registry.get(aid);
160
167
  if (!agent) {
168
+ const init = initializationSummary(aid);
169
+ if (init) {
170
+ return {
171
+ ok: true,
172
+ aid,
173
+ status: 'initializing',
174
+ lifecycle: loadAgent(aid)?.lifecycle ?? null,
175
+ identity: { name: null, description: null },
176
+ config: { baseagent: null, model: null, effort: null, chatmode: null, channels: [] },
177
+ connection: null,
178
+ sessions: { active: 0, last_activity: null },
179
+ paths: {
180
+ config: toPosix(path.join(p.agentsDir, aid, 'config.json')),
181
+ agent_md: toPosix(getAgentMdPath(aid)),
182
+ project: null,
183
+ data: toPosix(path.join(p.agentsDir, aid, 'data')),
184
+ },
185
+ initialization: init,
186
+ stale: true,
187
+ };
188
+ }
161
189
  const allList = registry.list();
162
190
  const available = allList.map((i) => i.name).join(', ');
163
191
  return { ok: false, error: `Agent "${aid}" not found.${available ? ` Available: ${available}` : ''}` };
@@ -183,6 +211,7 @@ export async function agentShow(aid) {
183
211
  ok: true,
184
212
  aid,
185
213
  status: agentInfo.status || 'unknown',
214
+ lifecycle: loadAgent(aid)?.lifecycle ?? null,
186
215
  identity,
187
216
  config: {
188
217
  baseagent: agentInfo.baseagent || null,
@@ -202,6 +231,7 @@ export async function agentShow(aid) {
202
231
  project: toPosix(agentInfo.projectPath || null),
203
232
  data: toPosix(path.join(p.agentsDir, aid, 'data')),
204
233
  },
234
+ ...(initializationSummary(aid) ? { initialization: initializationSummary(aid) } : {}),
205
235
  ...(stale ? { stale: true } : {}),
206
236
  };
207
237
  }
@@ -361,7 +391,7 @@ async function runManagedAgentConfig(args, options) {
361
391
  const sessionId = process.env.EVOLCORE_SESSION_ID;
362
392
  if (!sessionId || options.trustedLocal)
363
393
  return { managed: false };
364
- const delegationToken = process.env[AGENT_DELEGATION_TOKEN_ENV];
394
+ const delegationToken = readDelegationCredential();
365
395
  if (!delegationToken) {
366
396
  return {
367
397
  managed: true,
@@ -390,12 +420,22 @@ async function runManagedAgentConfig(args, options) {
390
420
  return { managed: true, error: { ok: false, code: 'DAEMON_UNAVAILABLE', error: 'Unable to connect to the evolcore daemon' } };
391
421
  }
392
422
  }
393
- function executeLocalAgentConfig(args) {
423
+ async function executeLocalAgentConfig(args) {
394
424
  initConfigManager();
395
425
  const resolved = resolveConfigCommand(['config', ...args]);
396
426
  if (!resolved.ok)
397
427
  return { ok: false, code: resolved.code, error: resolved.reason };
398
- return executeResolvedConfigCommand(resolved.command);
428
+ return executeResolvedConfigCommandAsync(resolved.command, {
429
+ role: 'owner',
430
+ roleContext: {
431
+ self: resolved.command.self || '',
432
+ actorRole: 'owner',
433
+ actorRoleSource: 'local-cli',
434
+ isDaemonOwner: false,
435
+ fromControlChannel: false,
436
+ aunAvailable: true,
437
+ },
438
+ });
399
439
  }
400
440
  export async function agentGet(aid, key, options = {}) {
401
441
  const managed = await runManagedAgentConfig(['get', key, '--self', aid], options);
@@ -412,7 +452,7 @@ export async function agentGet(aid, key, options = {}) {
412
452
  return { ok: false, error: `Agent "${aid}" not found` };
413
453
  }
414
454
  try {
415
- const result = executeLocalAgentConfig(['get', key, '--self', aid]);
455
+ const result = await executeLocalAgentConfig(['get', key, '--self', aid]);
416
456
  return result.ok && result.subcommand === 'get'
417
457
  ? { ok: true, aid, key, value: result.value }
418
458
  : { ok: false, code: result.ok ? 'UNEXPECTED_RESULT' : result.code, error: result.ok ? 'config get returned an unexpected result' : result.error };
@@ -438,7 +478,7 @@ export async function agentSet(aid, key, rawValue, options = {}) {
438
478
  }
439
479
  let value;
440
480
  try {
441
- const result = executeLocalAgentConfig(['set', key, rawValue, '--self', aid]);
481
+ const result = await executeLocalAgentConfig(['set', key, rawValue, '--self', aid]);
442
482
  if (!result.ok)
443
483
  return { ok: false, code: result.code, error: result.error };
444
484
  if (result.subcommand !== 'set')
@@ -458,7 +498,7 @@ export async function agentSet(aid, key, rawValue, options = {}) {
458
498
  return { ok: true, aid, key, value, reloaded };
459
499
  }
460
500
  export const AGENT_PERSONA_MAX_BYTES = 64 * 1024;
461
- function validatePersonaContent(content) {
501
+ export function validatePersonaContent(content) {
462
502
  if (content.includes('\0'))
463
503
  return 'persona 只能包含文本内容';
464
504
  if (Buffer.byteLength(content, 'utf8') > AGENT_PERSONA_MAX_BYTES) {
@@ -558,6 +598,78 @@ export async function agentPersona(aid, options = {}) {
558
598
  return { ok: false, code: 'WRITE_FAILED', error: e?.message || String(e) };
559
599
  }
560
600
  }
601
+ /** Read or replace the current Agent's confirmed Bootstrap welcome template. */
602
+ export async function agentWelcome(aid, options = {}) {
603
+ if (!isValidAid(aid))
604
+ return { ok: false, code: 'INVALID_ARGS', error: 'Invalid Agent AID' };
605
+ if (options.text !== undefined) {
606
+ const validation = validateWelcomeTemplate(options.text);
607
+ if (!validation.valid)
608
+ return { ok: false, code: 'INVALID_ARGS', error: validation.errors.join('; ') };
609
+ }
610
+ const managedSession = !!process.env[SESSION_ID_ENV] && !options.trustedLocal;
611
+ const managedArgs = options.text !== undefined
612
+ ? ['welcome', '--text', options.text]
613
+ : ['welcome', 'show'];
614
+ if (managedSession) {
615
+ if (readTaskRuntimeContextFromEnv()?.selfAid !== aid) {
616
+ return { ok: false, code: 'SELF_AGENT_REQUIRED', error: 'welcome only targets the current Agent' };
617
+ }
618
+ const managed = await runManagedAgentOperation(managedArgs);
619
+ if (!managed.ok)
620
+ return managed;
621
+ return {
622
+ ok: true,
623
+ aid,
624
+ content: managed.content ?? null,
625
+ ...(managed.path ? { path: managed.path } : {}),
626
+ ...(managed.saved ? { saved: true } : {}),
627
+ ...(managed.bytes !== undefined ? { bytes: managed.bytes } : {}),
628
+ ...(managed.sha256 ? { sha256: managed.sha256 } : {}),
629
+ };
630
+ }
631
+ const config = loadAgent(aid);
632
+ if (!config)
633
+ return { ok: false, code: 'NOT_FOUND', error: 'Agent not found' };
634
+ if (options.text === undefined) {
635
+ try {
636
+ return { ok: true, aid, content: readAgentWelcomeTemplate(aid), path: agentWelcomePath(aid) };
637
+ }
638
+ catch (e) {
639
+ return { ok: false, code: 'READ_FAILED', error: e instanceof Error ? e.message : String(e) };
640
+ }
641
+ }
642
+ if (resolveAgentLifecycle(config) !== 'bootstrapping' || config.initialization) {
643
+ return { ok: false, code: 'INVALID_LIFECYCLE', error: 'welcome can only be saved during conversational Bootstrap' };
644
+ }
645
+ try {
646
+ if (findPostBootstrapWelcomeOutbox(aid, { includeTerminal: true }).length) {
647
+ if (readAgentWelcomeTemplate(aid) === options.text) {
648
+ return { ok: true, aid, content: options.text, saved: true, path: agentWelcomePath(aid), bytes: Buffer.byteLength(options.text, 'utf8') };
649
+ }
650
+ return { ok: false, code: 'WELCOME_FROZEN', error: 'welcome delivery has already been prepared; resume ready with the saved text' };
651
+ }
652
+ const mdPath = getAgentMdPath(aid);
653
+ const metadata = parseAgentWelcomeMetadata(fs.existsSync(mdPath) ? fs.readFileSync(mdPath, 'utf8') : '');
654
+ try {
655
+ for (const owner of config.owners?.length ? config.owners : [aid]) {
656
+ renderPostBootstrapWelcomeMessage({
657
+ template: options.text, agentName: metadata.name || aid.split('.')[0], agentAid: aid,
658
+ agentDescription: metadata.description, agentTags: metadata.tags,
659
+ ownerAid: owner, ownerName: owner.split('.')[0],
660
+ });
661
+ }
662
+ }
663
+ catch (error) {
664
+ return { ok: false, code: 'WELCOME_INVALID', error: error.message };
665
+ }
666
+ const saved = saveAgentWelcomeTemplate(aid, options.text);
667
+ return { ok: true, aid, content: options.text, ...saved, saved: true };
668
+ }
669
+ catch (e) {
670
+ return { ok: false, code: 'WRITE_FAILED', error: e instanceof Error ? e.message : String(e) };
671
+ }
672
+ }
561
673
  /**
562
674
  * Add or overwrite a channel instance on a per-agent config.
563
675
  *
@@ -693,7 +805,7 @@ export async function agentReady(aid) {
693
805
  }
694
806
  const p = resolvePaths();
695
807
  try {
696
- const delegationToken = managedSessionId ? process.env[AGENT_DELEGATION_TOKEN_ENV] : undefined;
808
+ const delegationToken = managedSessionId ? readDelegationCredential() : undefined;
697
809
  if (managedSessionId && !delegationToken) {
698
810
  return { ok: false, code: 'DELEGATION_REQUIRED', error: `${AGENT_DELEGATION_TOKEN_ENV} is not set for the active task` };
699
811
  }
@@ -703,11 +815,11 @@ export async function agentReady(aid) {
703
815
  ...(managedSessionId ? { sessionId: managedSessionId, delegationToken } : {}),
704
816
  }, 30_000);
705
817
  if (!result)
706
- return { ok: false, code: 'DAEMON_UNAVAILABLE', error: 'Unable to connect to the evolcore daemon; agent ready requires daemon IPC' };
818
+ return { ok: false, code: 'DAEMON_UNAVAILABLE', error: 'Unable to connect to the EvolCore daemon; agent ready requires daemon IPC' };
707
819
  if (!result.ok) {
708
820
  return { ok: false, code: result.code, error: result.error || 'Failed to complete bootstrap' };
709
821
  }
710
- return { ok: true, aid, reloaded: true };
822
+ return { ...result, ok: true, aid, reloaded: result.reloaded === true };
711
823
  }
712
824
  catch (e) {
713
825
  return {