evolcore 0.0.3 → 0.0.5

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 (148) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +45 -10
  3. package/bin/ec-safe-output.js +89 -24
  4. package/dist/agents/baseagent.js +46 -0
  5. package/dist/agents/claude-runner.js +1 -31
  6. package/dist/agents/codex-app-server-client.js +68 -0
  7. package/dist/agents/codex-runner.js +157 -5
  8. package/dist/agents/runner-types.js +2 -2
  9. package/dist/aun/aid/agentmd.js +79 -0
  10. package/dist/aun/aid/encryption-seed-policy.js +29 -0
  11. package/dist/aun/aid/index.js +1 -1
  12. package/dist/aun/aid/store.js +2 -5
  13. package/dist/channels/aun.js +220 -112
  14. package/dist/channels/daemon.js +18 -4
  15. package/dist/channels/dingtalk.js +52 -137
  16. package/dist/channels/feishu.js +56 -4
  17. package/dist/channels/qqbot.js +23 -1
  18. package/dist/channels/wechat.js +303 -155
  19. package/dist/channels/wecom.js +383 -7
  20. package/dist/cli/aun-commands.js +11 -11
  21. package/dist/cli/daemon-commands.js +46 -15
  22. package/dist/cli/handoff-command.js +2 -1
  23. package/dist/cli/init-channel.js +185 -67
  24. package/dist/cli/init.js +49 -27
  25. package/dist/cli/trigger-command.js +92 -11
  26. package/dist/config/access-policy-domain.js +18 -0
  27. package/dist/config/access-policy.js +110 -0
  28. package/dist/config/builtin-role-templates.js +27 -14
  29. package/dist/config/builtin-roles.js +25 -6
  30. package/dist/config/config-field-policy.js +17 -5
  31. package/dist/config/config-manager.js +198 -22
  32. package/dist/config/config-operation-service.js +35 -38
  33. package/dist/config/contact-bind-code.js +274 -0
  34. package/dist/config/contact-book-store.js +173 -5
  35. package/dist/config/contact-book.js +32 -0
  36. package/dist/config/contact-operation-service.js +9 -3
  37. package/dist/config/contact-request-service.js +331 -0
  38. package/dist/config/peer-role-resolver.js +3 -1
  39. package/dist/config/schema-registry.js +49 -24
  40. package/dist/config-store.js +14 -2
  41. package/dist/core/auth/agent-delegation.js +105 -11
  42. package/dist/core/auth/authorization-audit.js +6 -0
  43. package/dist/core/auth/operation-authorizer.js +8 -0
  44. package/dist/core/auth/operation-catalog.js +51 -3
  45. package/dist/core/auth/trigger-authorization.js +15 -0
  46. package/dist/core/bootstrap-service.js +2 -9
  47. package/dist/core/channel-loader.js +6 -2
  48. package/dist/core/command/command-handler.js +10 -13
  49. package/dist/core/command/connect-menu.js +229 -26
  50. package/dist/core/command/evol-menu-version-gate.js +38 -0
  51. package/dist/core/command/group-menu.js +421 -0
  52. package/dist/core/command/menu-handler.js +269 -85
  53. package/dist/core/command/menu-protocol.js +8 -2
  54. package/dist/core/command/menu-token-store.js +102 -0
  55. package/dist/core/command/role-menu.js +16 -0
  56. package/dist/core/command/slash-gate.js +1 -1
  57. package/dist/core/command/slash-handler.js +158 -31
  58. package/dist/core/daemon-file-cache.js +28 -0
  59. package/dist/core/event-catalog.js +29 -0
  60. package/dist/core/evolagent-registry.js +4 -39
  61. package/dist/core/handoff/runtime.js +162 -37
  62. package/dist/core/handoff/store.js +46 -2
  63. package/dist/core/handoff/types.js +1 -0
  64. package/dist/core/inference/text-inference.js +16 -74
  65. package/dist/core/message/file-markers.js +7 -0
  66. package/dist/core/message/im-renderer.js +18 -14
  67. package/dist/core/message/inbound-admission.js +134 -0
  68. package/dist/core/message/message-bridge.js +616 -74
  69. package/dist/core/message/message-log.js +1 -0
  70. package/dist/core/message/message-queue.js +185 -10
  71. package/dist/core/message/peer-mode.js +7 -8
  72. package/dist/core/message/response-engine.js +381 -79
  73. package/dist/core/permission/approval-gateway.js +17 -10
  74. package/dist/core/permission/ec-command-parser.js +101 -46
  75. package/dist/core/permission/tool-policy.js +69 -24
  76. package/dist/core/protected-paths.js +36 -11
  77. package/dist/core/session/session-fs-store.js +19 -4
  78. package/dist/core/session/session-manager.js +232 -4
  79. package/dist/core/session/session-mapper.js +2 -0
  80. package/dist/core/session/session-renew.js +125 -69
  81. package/dist/core/session/session-turn-coordinator.js +5 -1
  82. package/dist/eck/kit-renderer.js +12 -1
  83. package/dist/eck/message-renderer.js +79 -1
  84. package/dist/index.js +224 -89
  85. package/dist/ipc.js +81 -4
  86. package/dist/paths.js +3 -0
  87. package/dist/response-system/config-resolver.js +29 -0
  88. package/dist/response-system/coordinator.js +8 -32
  89. package/dist/response-system/engines/v1/proactive-flow.js +1 -1
  90. package/dist/response-system/index.js +1 -0
  91. package/dist/response-system/modes/single-session/index.js +7 -4
  92. package/dist/trigger/parser.js +55 -15
  93. package/dist/trigger/patch.js +4 -1
  94. package/dist/trigger/scheduler.js +441 -39
  95. package/dist/utils/cross-platform.js +8 -2
  96. package/dist/utils/error-dict.json +7 -0
  97. package/dist/utils/evolcore-version.js +21 -0
  98. package/dist/utils/logger.js +2 -2
  99. package/dist/utils/process-introspect.js +19 -3
  100. package/dist/utils/stable-semver.js +21 -0
  101. package/dist/utils/stats.js +33 -9
  102. package/kits/docs/channels/aun.md +4 -13
  103. package/kits/docs/evolcore/INDEX.md +1 -1
  104. package/kits/docs/evolcore/config.md +47 -2
  105. package/kits/docs/evolcore/contact.md +8 -3
  106. package/kits/docs/evolcore/group-rules.md +46 -4
  107. package/kits/docs/evolcore/group.md +4 -4
  108. package/kits/docs/evolcore/msg.md +5 -5
  109. package/kits/docs/evolcore/trigger.md +25 -8
  110. package/kits/docs/path-registry.md +36 -17
  111. package/kits/eck_message_manifest.json +12 -1
  112. package/kits/migrations/migrate-contact-book-v2.mjs +7 -0
  113. package/kits/rules/01-overview.md +17 -7
  114. package/kits/rules/02-navigation.md +38 -18
  115. package/kits/rules/03-identity.md +28 -24
  116. package/kits/rules/04-relation.md +44 -28
  117. package/kits/rules/05-venue.md +31 -15
  118. package/kits/rules/06-channel.md +11 -7
  119. package/kits/schemas/_meta.json +18 -7
  120. package/kits/schemas/agent-config.schema.7.json +303 -0
  121. package/kits/schemas/agent-config.schema.8.json +304 -0
  122. package/kits/schemas/agent-config.schema.9.json +364 -0
  123. package/kits/schemas/contact-book.schema.3.json +67 -0
  124. package/kits/schemas/daemon.schema.1.json +3 -2
  125. package/kits/schemas/daemon.schema.2.json +101 -0
  126. package/kits/schemas/daemon.schema.3.json +123 -0
  127. package/kits/schemas/defaults.schema.2.json +85 -0
  128. package/kits/schemas/defaults.schema.3.json +73 -0
  129. package/kits/schemas/relation-config.schema.6.json +46 -0
  130. package/kits/schemas/relation-config.schema.7.json +59 -0
  131. package/kits/schemas/single-session.schema.2.json +57 -0
  132. package/kits/templates/message-fragments/handoff-context-to-target.md +9 -0
  133. package/kits/templates/message-fragments/handoff-request-to-target.md +14 -8
  134. package/kits/templates/message-fragments/handoff-response-to-origin.md +5 -6
  135. package/kits/templates/roles/admin.json +46 -0
  136. package/kits/templates/roles/member.json +4 -0
  137. package/kits/templates/roles/visitor.json +4 -0
  138. package/kits/templates/system-fragments/channel.md +12 -2
  139. package/kits/templates/system-fragments/identity.md +3 -1
  140. package/kits/templates/system-fragments/relation.md +1 -1
  141. package/kits/templates/system-fragments/session.md +6 -2
  142. package/package.json +4 -2
  143. package/MIGRATION-0.5.0.md +0 -378
  144. package/ROLE_ACCESS_CONTROL.md +0 -174
  145. package/dist/channels/contact-bind-code.js +0 -134
  146. package/dist/channels/wecom-card.js +0 -101
  147. package/dist/channels/wecom-onboarding.js +0 -82
  148. package/dist/channels/wecom-state.js +0 -191
@@ -51,6 +51,59 @@ function renderOneItem(item, sessionVars, sessionCache, contentSentinel) {
51
51
  const isOwnerHint = item.kind === 'owner-hint';
52
52
  const isHandoff = item.kind === 'handoff';
53
53
  const handoffPreviousSentinel = `\x00ECMSG-HANDOFF-PREV-${randomUUID()}\x00`;
54
+ const requiredReplacements = (item.handoff?.requiredEntries ?? []).map(entry => ({
55
+ entry,
56
+ sentinel: `\x00ECMSG-HANDOFF-REQ-${randomUUID()}\x00`,
57
+ }));
58
+ const contextReplacements = (item.handoff?.contextEntries ?? []).map(entry => ({
59
+ entry,
60
+ sentinel: `\x00ECMSG-HANDOFF-CTX-${randomUUID()}\x00`,
61
+ }));
62
+ const originReplacements = (item.handoff?.originEntries ?? []).map(entry => ({
63
+ entry,
64
+ previousSentinel: `\x00ECMSG-HANDOFF-ORIGIN-PREV-${randomUUID()}\x00`,
65
+ responseSentinel: `\x00ECMSG-HANDOFF-ORIGIN-RESP-${randomUUID()}\x00`,
66
+ }));
67
+ const fallbackRequiredEntries = item.handoff?.returnPolicy === 'required'
68
+ && item.handoff.handoffId
69
+ && item.handoff.previousContent !== undefined
70
+ && requiredReplacements.length === 0
71
+ ? [{
72
+ entry: {
73
+ handoffId: item.handoff.handoffId,
74
+ previousContent: item.handoff.previousContent,
75
+ previousMessageId: item.handoff.previousMessageId,
76
+ },
77
+ sentinel: `\x00ECMSG-HANDOFF-REQ-${randomUUID()}\x00`,
78
+ }]
79
+ : [];
80
+ const fallbackContextEntries = item.handoff?.returnPolicy === 'none'
81
+ && item.handoff.previousContent !== undefined
82
+ && contextReplacements.length === 0
83
+ ? [{
84
+ entry: {
85
+ previousContent: item.handoff.previousContent,
86
+ previousMessageId: item.handoff.previousMessageId,
87
+ },
88
+ sentinel: `\x00ECMSG-HANDOFF-CTX-${randomUUID()}\x00`,
89
+ }]
90
+ : [];
91
+ const allRequiredReplacements = [...requiredReplacements, ...fallbackRequiredEntries];
92
+ const allContextReplacements = [...contextReplacements, ...fallbackContextEntries];
93
+ const fallbackOriginEntries = item.handoff?.kind === 'response_to_origin'
94
+ && item.handoff.previousContent !== undefined
95
+ && originReplacements.length === 0
96
+ ? [{
97
+ entry: {
98
+ previousContent: item.handoff.previousContent,
99
+ responseContent: item.content,
100
+ previousMessageId: item.handoff.previousMessageId,
101
+ },
102
+ previousSentinel: handoffPreviousSentinel,
103
+ responseSentinel: contentSentinel,
104
+ }]
105
+ : [];
106
+ const allOriginReplacements = [...originReplacements, ...fallbackOriginEntries];
54
107
  // item-level vars: session vars overlaid with this message's own sender/timestamp.
55
108
  const itemVars = {
56
109
  ...sessionVars,
@@ -91,6 +144,20 @@ function renderOneItem(item, sessionVars, sessionCache, contentSentinel) {
91
144
  handoffPreviousMessageId: item.handoff?.previousMessageId ?? undefined,
92
145
  handoffPreviousContent: item.handoff ? handoffPreviousSentinel : undefined,
93
146
  handoffReturnPolicy: item.handoff?.returnPolicy,
147
+ handoffRequiredEntries: allRequiredReplacements.map(({ entry, sentinel }) => ({
148
+ handoffId: entry.handoffId,
149
+ previousContent: sentinel,
150
+ previousMessageId: entry.previousMessageId ?? undefined,
151
+ })),
152
+ handoffContextEntries: allContextReplacements.map(({ entry, sentinel }) => ({
153
+ previousContent: sentinel,
154
+ previousMessageId: entry.previousMessageId ?? undefined,
155
+ })),
156
+ handoffOriginEntries: allOriginReplacements.map(({ entry, previousSentinel, responseSentinel }) => ({
157
+ previousContent: previousSentinel,
158
+ responseContent: responseSentinel,
159
+ previousMessageId: entry.previousMessageId ?? undefined,
160
+ })),
94
161
  // content held as a per-call random sentinel, swapped back post-render.
95
162
  // Using a UUID means no real message can collide with it.
96
163
  content: contentSentinel,
@@ -109,9 +176,20 @@ function renderOneItem(item, sessionVars, sessionCache, contentSentinel) {
109
176
  ? renderTemplate(rawContent, itemVars, /* stripBlankLines */ false)
110
177
  : rawContent;
111
178
  // swap the sentinel back to the real message text (literal replace, no parsing).
112
- const withContent = rendered
179
+ let withContent = rendered
113
180
  .split(contentSentinel).join(item.content)
114
181
  .split(handoffPreviousSentinel).join(item.handoff?.previousContent ?? '');
182
+ for (const { entry, sentinel } of allRequiredReplacements) {
183
+ withContent = withContent.split(sentinel).join(entry.previousContent);
184
+ }
185
+ for (const { entry, sentinel } of allContextReplacements) {
186
+ withContent = withContent.split(sentinel).join(entry.previousContent);
187
+ }
188
+ for (const { entry, previousSentinel, responseSentinel } of allOriginReplacements) {
189
+ withContent = withContent
190
+ .split(previousSentinel).join(entry.previousContent)
191
+ .split(responseSentinel).join(entry.responseContent);
192
+ }
115
193
  if (withContent.trim())
116
194
  out.push(withContent.replace(/\s+$/, ''));
117
195
  }