evolcore 0.0.32 → 0.0.33

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 (150) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/bin/install-codex-managed-hooks.mjs +124 -37
  3. package/dist/agents/claude-runner.js +29 -2
  4. package/dist/agents/codex/app-server-client.js +3 -0
  5. package/dist/agents/codex/diagnostics.js +76 -44
  6. package/dist/agents/codex-runner.js +23 -19
  7. package/dist/agents/ecagent-runner.js +5 -13
  8. package/dist/aun/group/operations.js +0 -1
  9. package/dist/aun/msg/history.js +1 -0
  10. package/dist/aun/msg/p2p.js +0 -1
  11. package/dist/aun/outbox.js +50 -1
  12. package/dist/channels/aun.js +28 -2
  13. package/dist/channels/daemon.js +257 -2
  14. package/dist/cli/agent-command.js +58 -24
  15. package/dist/cli/agent.js +1 -1
  16. package/dist/cli/aun-commands.js +365 -29
  17. package/dist/cli/contact.js +8 -2
  18. package/dist/cli/daemon-commands.js +81 -12
  19. package/dist/cli/debug-mode.js +154 -0
  20. package/dist/cli/handoff-command.js +3 -0
  21. package/dist/cli/index.js +81 -64
  22. package/dist/cli/init.js +2 -2
  23. package/dist/cli/managed-command-guard.js +5 -0
  24. package/dist/cli/memory-command.js +8 -1
  25. package/dist/cli/queue-command.js +9 -4
  26. package/dist/cli/session-command.js +194 -0
  27. package/dist/cli/skill-command.js +78 -2
  28. package/dist/cli/task-context.js +1 -0
  29. package/dist/cli/thread-command.js +620 -0
  30. package/dist/cli/trigger-command.js +4 -2
  31. package/dist/config/builtin-roles.js +1 -0
  32. package/dist/config/config-field-policy.js +2 -3
  33. package/dist/config/config-manager.js +7 -2
  34. package/dist/config/resolved-config-op.js +3 -0
  35. package/dist/config-store.js +15 -0
  36. package/dist/core/auth/agent-delegation.js +25 -1
  37. package/dist/core/auth/debug-context.js +139 -0
  38. package/dist/core/auth/operation-authorizer.js +24 -1
  39. package/dist/core/auth/operation-catalog.js +33 -0
  40. package/dist/core/background-session/session-cleanup.js +212 -0
  41. package/dist/core/background-session/types.js +10 -0
  42. package/dist/core/bootstrap-messages.js +1 -1
  43. package/dist/core/bootstrap-service.js +6 -3
  44. package/dist/core/command/command-handler.js +60 -24
  45. package/dist/core/command/memory-slash.js +6 -2
  46. package/dist/core/command/menu-catalog.js +48 -1
  47. package/dist/core/command/menu-handler.js +92 -16
  48. package/dist/core/command/menu-protocol.js +24 -1
  49. package/dist/core/command/skill-slash.js +322 -0
  50. package/dist/core/command/slash-gate.js +6 -4
  51. package/dist/core/command/slash-handler.js +193 -13
  52. package/dist/core/command/topic-slash.js +528 -0
  53. package/dist/core/evolagent-registry.js +20 -5
  54. package/dist/core/handoff/runtime.js +5 -11
  55. package/dist/core/handoff/store.js +5 -0
  56. package/dist/core/ipc-registration.js +139 -2
  57. package/dist/core/memory/consolidation-context.js +49 -16
  58. package/dist/core/memory/consolidation-ops-records.js +35 -0
  59. package/dist/core/memory/consolidation-queue-format.js +21 -0
  60. package/dist/core/memory/consolidation.js +174 -180
  61. package/dist/core/message/aun-ipc-sender.js +161 -6
  62. package/dist/core/message/im-renderer.js +149 -6
  63. package/dist/core/message/message-bridge.js +13 -3
  64. package/dist/core/message/message-log.js +1 -0
  65. package/dist/core/message/peer-mode.js +6 -1
  66. package/dist/core/message/response-engine.js +349 -67
  67. package/dist/core/message/subtask-tool-projection.js +140 -0
  68. package/dist/core/model/catalog-service.js +17 -12
  69. package/dist/core/permission/ec-command-parser.js +126 -7
  70. package/dist/core/session/session-idle-monitor.js +249 -22
  71. package/dist/core/session/session-manager.js +54 -9
  72. package/dist/core/skill/command-parser.js +13 -0
  73. package/dist/core/skill/index-generator.js +4 -1
  74. package/dist/core/skill/startup.js +41 -0
  75. package/dist/core/skill/switch-resolver.js +55 -29
  76. package/dist/core/thread/command-parser.js +125 -0
  77. package/dist/core/thread/index.js +1 -0
  78. package/dist/core/thread/ipc-operation.js +95 -0
  79. package/dist/core/thread/thread-context-storage.js +131 -0
  80. package/dist/core/thread/thread-operation.js +258 -0
  81. package/dist/core/thread/thread-route.js +33 -0
  82. package/dist/core/thread/thread-service.js +777 -0
  83. package/dist/core/thread/types.js +1 -0
  84. package/dist/eck/message-renderer.js +35 -0
  85. package/dist/index.js +8 -5
  86. package/dist/ipc.js +89 -10
  87. package/dist/paths.js +23 -0
  88. package/dist/response-system/engines/v1/proactive-flow.js +169 -80
  89. package/dist/trigger/authorization.js +57 -28
  90. package/dist/trigger/feedback.js +7 -1
  91. package/dist/trigger/parser.js +63 -1
  92. package/dist/trigger/validation.js +14 -0
  93. package/dist/utils/error-utils.js +22 -1
  94. package/kits/docs/context-assembly.md +1 -0
  95. package/kits/docs/evolcore/INDEX.md +1 -0
  96. package/kits/docs/evolcore/agent-create.md +39 -28
  97. package/kits/docs/evolcore/agent.md +19 -4
  98. package/kits/docs/evolcore/ec-capabilities.md +4 -0
  99. package/kits/docs/evolcore/group-collaboration.md +3 -5
  100. package/kits/docs/evolcore/group.md +3 -4
  101. package/kits/docs/evolcore/memory-consolidation.md +1 -1
  102. package/kits/docs/evolcore/menu-exec-schema-commands.md +2 -2
  103. package/kits/docs/evolcore/menu-protocol.md +7 -0
  104. package/kits/docs/evolcore/msg.md +5 -8
  105. package/kits/docs/evolcore/thread-chain.md +267 -0
  106. package/kits/docs/prompt-loading-architecture.md +1 -0
  107. package/kits/eck_manifest.json +61 -26
  108. package/kits/eck_message_manifest.json +169 -10
  109. package/kits/rules/05-venue.md +1 -1
  110. package/kits/rules/07-memory-and-thread.md +202 -0
  111. package/kits/schemas/relation-config.schema.9.json +18 -3
  112. package/kits/schemas/role-config.schema.1.json +6 -6
  113. package/kits/schemas/single-session.schema.1.json +6 -6
  114. package/kits/schemas/single-session.schema.2.json +6 -6
  115. package/kits/schemas/single-session.schema.3.json +6 -6
  116. package/kits/skills/.switches.json +12 -1
  117. package/kits/skills/ec-group/SKILL.md +234 -0
  118. package/kits/skills/ec-skill/SKILL.md +10 -1
  119. package/kits/skills/ec-skill/scripts/cli.mjs +15 -1
  120. package/kits/skills/scrapling-article-fetch/SKILL.md +128 -0
  121. package/kits/skills/scrapling-article-fetch/scripts/check_python_env.py +54 -0
  122. package/kits/skills/scrapling-article-fetch/scripts/render_markdown_reply.py +35 -0
  123. package/kits/skills/scrapling-article-fetch/scripts/run_pipeline.sh +16 -0
  124. package/kits/skills/scrapling-article-fetch/scripts/scrapling_fetch.py +344 -0
  125. package/kits/skills/thread-ops/SKILL.md +492 -0
  126. package/kits/skills/wechat-article-media-download/SKILL.md +65 -0
  127. package/kits/skills/wechat-article-media-download/scripts/download.py +163 -0
  128. package/kits/skills/wechat-article-reader/SKILL.md +97 -0
  129. package/kits/skills/wechat-article-reader/scripts/fetch.mjs +256 -0
  130. package/kits/templates/bootstrap-welcome.md +7 -7
  131. package/kits/templates/memory-consolidation/forget.md +5 -0
  132. package/kits/templates/memory-consolidation/generalize.md +5 -0
  133. package/kits/templates/memory-consolidation/profile.md +5 -0
  134. package/kits/templates/memory-consolidation/promote.md +5 -0
  135. package/kits/templates/message-fragments/item.md +2 -1
  136. package/kits/templates/message-fragments/thread-context.md +6 -0
  137. package/kits/templates/message-fragments/trigger-session.md +2 -0
  138. package/kits/templates/message-fragments/trigger-thread-check.md +2 -0
  139. package/kits/templates/roles/member.json +2 -0
  140. package/kits/templates/roles/visitor.json +2 -0
  141. package/kits/templates/system-fragments/bootstrap.md +66 -72
  142. package/kits/templates/system-fragments/channel.md +3 -6
  143. package/kits/templates/system-fragments/commands.md +1 -0
  144. package/kits/templates/system-fragments/managed-runtime.md +15 -0
  145. package/kits/templates/system-fragments/reply.md +3 -2
  146. package/kits/templates/system-fragments/session.md +5 -14
  147. package/package.json +3 -1
  148. package/kits/docs/evolcore/group-fs.md +0 -17
  149. package/kits/docs/venues/aun-group.md +0 -45
  150. package/kits/docs/venues/group.md +0 -43
@@ -41,6 +41,30 @@ function formatBytes(bytes) {
41
41
  return `${(bytes / 1024).toFixed(1)}KB`;
42
42
  return `${(bytes / 1024 / 1024).toFixed(1)}MB`;
43
43
  }
44
+ /** 终端显示宽度:CJK 及全角字符占 2 列,ASCII/拉丁占 1 列 */
45
+ function displayWidth(s) {
46
+ let w = 0;
47
+ for (const ch of s) {
48
+ const cp = ch.codePointAt(0);
49
+ if ((cp >= 0x1100 && cp <= 0x115F) ||
50
+ (cp >= 0x2E80 && cp <= 0x303E) ||
51
+ (cp >= 0x3040 && cp <= 0x33FF) ||
52
+ (cp >= 0x3400 && cp <= 0x9FFF) ||
53
+ (cp >= 0xAC00 && cp <= 0xD7AF) ||
54
+ (cp >= 0xF900 && cp <= 0xFAFF) ||
55
+ (cp >= 0xFF01 && cp <= 0xFF60) ||
56
+ (cp >= 0xFFE0 && cp <= 0xFFE6)) {
57
+ w += 2;
58
+ }
59
+ else {
60
+ w += 1;
61
+ }
62
+ }
63
+ return w;
64
+ }
65
+ function padEndDisplay(s, targetWidth) {
66
+ return s + ' '.repeat(Math.max(0, targetWidth - displayWidth(s)));
67
+ }
44
68
  // ==================== Agent ====================
45
69
  export async function cmdAgent(args) {
46
70
  args = canonicalizeEvolcoreCommandArgv(['ec', 'agent', ...args]).slice(2);
@@ -78,8 +102,8 @@ Commands:
78
102
  persona show 查看当前 Agent 的 persona.md
79
103
  persona --text <text> 用文本设置当前 Agent 的 persona.md
80
104
  persona --file <path> 用 .md/.txt 文件设置当前 Agent 的 persona.md
81
- welcome show 查看已确认的 Bootstrap welcome 文案
82
- welcome --text <text> 保存 Owner 已确认的 Bootstrap welcome 文案
105
+ welcome show 查看 Agent 自主准备的 Bootstrap welcome 文案
106
+ welcome --text <text> 保存 Agent 自主准备的 Bootstrap welcome 文案
83
107
  rename <aid> <name> 修改 agent.md 中的显示名称
84
108
  ready <aid> 标记 bootstrap 完成,进入 active 状态
85
109
  reload [aid] 热重载配置(无参数=全量 resync)
@@ -220,25 +244,28 @@ Options:
220
244
  // 表头跟随系统语言
221
245
  const isChinese = isHostChinese();
222
246
  const headers = isChinese
223
- ? { name: '名称', personal: 'Personal名', status: '状态', channels: '渠道', project: '项目', baseagent: '基座', lastActive: '最后活跃' }
224
- : { name: 'NAME', personal: 'PERSONAL', status: 'STATUS', channels: 'CHANNELS', project: 'PROJECT', baseagent: 'BASEAGENT', lastActive: 'LAST ACTIVE' };
225
- // 计算各列实际需要的宽度
226
- let maxNameLen = headers.name.length;
227
- let maxPersonalLen = headers.personal.length;
228
- let maxStatusLen = headers.status.length;
229
- let maxChannelsLen = headers.channels.length;
230
- let maxProjectLen = headers.project.length;
231
- let maxBaseagentLen = headers.baseagent.length;
247
+ ? { name: '名称', personal: 'Personal名', status: '状态', channels: '渠道', project: '项目', baseagent: '基座', model: '模型', lastActive: '最后活跃' }
248
+ : { name: 'NAME', personal: 'PERSONAL', status: 'STATUS', channels: 'CHANNELS', project: 'PROJECT', baseagent: 'BASEAGENT', model: 'MODEL', lastActive: 'LAST ACTIVE' };
249
+ // 计算各列实际需要的显示宽度(CJK 字符占 2 列)
250
+ let maxNameLen = displayWidth(headers.name);
251
+ let maxPersonalLen = displayWidth(headers.personal);
252
+ let maxStatusLen = displayWidth(headers.status);
253
+ let maxChannelsLen = displayWidth(headers.channels);
254
+ let maxProjectLen = displayWidth(headers.project);
255
+ let maxBaseagentLen = displayWidth(headers.baseagent);
256
+ let maxModelLen = displayWidth(headers.model);
232
257
  for (const info of result.agents) {
233
- maxNameLen = Math.max(maxNameLen, info.name.length);
234
- maxPersonalLen = Math.max(maxPersonalLen, (info.personalName || '—').length);
235
- const displayedStatus = `${info.status || 'unknown'}${info.stale ? ' (stale)' : ''}`;
236
- maxStatusLen = Math.max(maxStatusLen, displayedStatus.length);
258
+ maxNameLen = Math.max(maxNameLen, displayWidth(info.name));
259
+ maxPersonalLen = Math.max(maxPersonalLen, displayWidth(info.personalName || '—'));
260
+ const lcSuffix = info.lifecycle && info.lifecycle !== 'active' ? ` (${info.lifecycle})` : '';
261
+ const displayedStatus = `${info.status || 'unknown'}${info.stale ? ' (stale)' : ''}${lcSuffix}`;
262
+ maxStatusLen = Math.max(maxStatusLen, displayWidth(displayedStatus));
237
263
  const channelsStr = info.channels?.length > 0 ? info.channels.join(', ') : '—';
238
- maxChannelsLen = Math.max(maxChannelsLen, channelsStr.length);
264
+ maxChannelsLen = Math.max(maxChannelsLen, displayWidth(channelsStr));
239
265
  const projectStr = info.projectPath ? path.basename(info.projectPath) : '—';
240
- maxProjectLen = Math.max(maxProjectLen, projectStr.length);
241
- maxBaseagentLen = Math.max(maxBaseagentLen, (info.baseagent || '—').length);
266
+ maxProjectLen = Math.max(maxProjectLen, displayWidth(projectStr));
267
+ maxBaseagentLen = Math.max(maxBaseagentLen, displayWidth(info.baseagent || '—'));
268
+ maxModelLen = Math.max(maxModelLen, displayWidth(info.model || '—'));
242
269
  }
243
270
  // 加 2 作为列间距
244
271
  const colName = maxNameLen + 2;
@@ -247,18 +274,25 @@ Options:
247
274
  const colChannels = maxChannelsLen + 1;
248
275
  const colProject = maxProjectLen + 2;
249
276
  const colBaseagent = maxBaseagentLen + 2;
250
- console.log(headers.name.padEnd(colName) + headers.personal.padEnd(colPersonal) + headers.status.padEnd(colStatus) + headers.channels.padEnd(colChannels) +
251
- headers.project.padEnd(colProject) + headers.baseagent.padEnd(colBaseagent) + headers.lastActive);
277
+ const colModel = maxModelLen + 2;
278
+ console.log(padEndDisplay(headers.name, colName) + padEndDisplay(headers.personal, colPersonal) +
279
+ padEndDisplay(headers.status, colStatus) + padEndDisplay(headers.channels, colChannels) +
280
+ padEndDisplay(headers.project, colProject) + padEndDisplay(headers.baseagent, colBaseagent) +
281
+ padEndDisplay(headers.model, colModel) + headers.lastActive);
252
282
  for (const info of result.agents) {
253
283
  const name = info.name;
254
284
  const personal = info.personalName || '—';
255
- const status = `${info.status || 'unknown'}${info.stale ? ' (stale)' : ''}`;
285
+ const lcSuffix = info.lifecycle && info.lifecycle !== 'active' ? ` (${info.lifecycle})` : '';
286
+ const status = `${info.status || 'unknown'}${info.stale ? ' (stale)' : ''}${lcSuffix}`;
256
287
  const channels = info.channels?.length > 0 ? info.channels.join(', ') : '—';
257
288
  const project = info.projectPath ? path.basename(info.projectPath) : '—';
258
289
  const baseagent = info.baseagent || '—';
290
+ const model = info.model || '—';
259
291
  const lastActive = info.lastActivity ? formatTimeAgo(Date.now() - info.lastActivity) : '—';
260
- console.log(name.padEnd(colName) + personal.padEnd(colPersonal) + status.padEnd(colStatus) + channels.padEnd(colChannels) +
261
- project.padEnd(colProject) + baseagent.padEnd(colBaseagent) + lastActive);
292
+ console.log(padEndDisplay(name, colName) + padEndDisplay(personal, colPersonal) +
293
+ padEndDisplay(status, colStatus) + padEndDisplay(channels, colChannels) +
294
+ padEndDisplay(project, colProject) + padEndDisplay(baseagent, colBaseagent) +
295
+ padEndDisplay(model, colModel) + lastActive);
262
296
  }
263
297
  return;
264
298
  }
@@ -697,7 +731,7 @@ Options:
697
731
  console.log(`用法: ${MAIN_CLI_BIN} agent welcome show [--format json]
698
732
  ${MAIN_CLI_BIN} agent welcome --text <text> [--format json]
699
733
 
700
- 读取或保存当前 Agent 在 Bootstrap 中经 Owner 确认的 welcome 文案。文案固定保存到 personal/welcome.md。`);
734
+ 读取或保存当前 Agent 在 Bootstrap 中自主准备的 welcome 文案。文案固定保存到 personal/welcome.md。`);
701
735
  return;
702
736
  }
703
737
  const result = { ok: false, code: 'INVALID_ARGS', error: error.message };
package/dist/cli/agent.js CHANGED
@@ -553,7 +553,7 @@ export async function agentPersona(aid, options = {}) {
553
553
  return { ok: false, code: 'WRITE_FAILED', error: e?.message || String(e) };
554
554
  }
555
555
  }
556
- /** Read or replace the current Agent's confirmed Bootstrap welcome template. */
556
+ /** Read or replace the current Agent's self-prepared Bootstrap welcome template. */
557
557
  export async function agentWelcome(aid, options = {}) {
558
558
  if (!isValidAid(aid))
559
559
  return { ok: false, code: 'INVALID_ARGS', error: 'Invalid Agent AID' };