evolcore 0.0.1 → 0.0.3
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.
- package/CHANGELOG.md +64 -0
- package/LICENSE +21 -0
- package/MIGRATION-0.5.0.md +378 -0
- package/README.md +318 -14
- package/ROLE_ACCESS_CONTROL.md +174 -0
- package/assets/.env.template +4 -0
- package/bin/ec-safe-output.js +161 -0
- package/bin/ec.js +29 -0
- package/dist/agents/baseagent.js +163 -0
- package/dist/agents/claude-runner.js +2565 -0
- package/dist/agents/codex-app-server-client.js +448 -0
- package/dist/agents/codex-runner.js +2682 -0
- package/dist/agents/gemini-runner.js +666 -0
- package/dist/agents/runner-types.js +75 -0
- package/dist/aun/aid/agentmd.js +216 -0
- package/dist/aun/aid/client.js +132 -0
- package/dist/aun/aid/control-aid.js +91 -0
- package/dist/aun/aid/identity.js +518 -0
- package/dist/aun/aid/index.js +4 -0
- package/dist/aun/aid/store.js +74 -0
- package/dist/aun/aid/types.js +1 -0
- package/dist/aun/aid/validation.js +21 -0
- package/dist/aun/group-identity.js +10 -0
- package/dist/aun/msg/group-index.js +6 -0
- package/dist/aun/msg/group.js +1231 -0
- package/dist/aun/msg/history.js +123 -0
- package/dist/aun/msg/index.js +5 -0
- package/dist/aun/msg/p2p.js +393 -0
- package/dist/aun/msg/payload-type.js +27 -0
- package/dist/aun/msg/upload.js +137 -0
- package/dist/aun/outbox.js +168 -0
- package/dist/aun/rpc/caller.js +42 -0
- package/dist/aun/rpc/connection.js +25 -0
- package/dist/aun/rpc/index.js +2 -0
- package/dist/aun/service-proxy.js +225 -0
- package/dist/aun/storage/download.js +29 -0
- package/dist/aun/storage/index.js +3 -0
- package/dist/aun/storage/manage.js +10 -0
- package/dist/aun/storage/upload.js +68 -0
- package/dist/channels/aun.js +4164 -0
- package/dist/channels/contact-bind-code.js +134 -0
- package/dist/channels/daemon.js +422 -0
- package/dist/channels/dingtalk.js +1479 -0
- package/dist/channels/feishu.js +1865 -0
- package/dist/channels/qqbot.js +409 -0
- package/dist/channels/wechat.js +817 -0
- package/dist/channels/wecom-card.js +101 -0
- package/dist/channels/wecom-onboarding.js +82 -0
- package/dist/channels/wecom-state.js +191 -0
- package/dist/channels/wecom.js +1157 -0
- package/dist/cli/agent-command.js +642 -0
- package/dist/cli/agent.js +1059 -0
- package/dist/cli/aun-commands.js +2003 -0
- package/dist/cli/bench.js +1228 -0
- package/dist/cli/cli-argv.js +66 -0
- package/dist/cli/code-stats.js +329 -0
- package/dist/cli/command-log.js +82 -0
- package/dist/cli/config-selector.js +69 -0
- package/dist/cli/config.js +261 -0
- package/dist/cli/contact.js +71 -0
- package/dist/cli/ctl-command.js +62 -0
- package/dist/cli/daemon-commands.js +2750 -0
- package/dist/cli/fs-command.js +1447 -0
- package/dist/cli/handoff-command.js +302 -0
- package/dist/cli/help.js +35 -0
- package/dist/cli/index.js +374 -0
- package/dist/cli/init-channel.js +1372 -0
- package/dist/cli/init.js +590 -0
- package/dist/cli/link-rules.js +240 -0
- package/dist/cli/model.js +591 -0
- package/dist/cli/net-check.js +723 -0
- package/dist/cli/queue-command.js +150 -0
- package/dist/cli/raw-key-input.js +25 -0
- package/dist/cli/response.js +344 -0
- package/dist/cli/restart-monitor.js +480 -0
- package/dist/cli/stats.js +609 -0
- package/dist/cli/task-context.js +80 -0
- package/dist/cli/trigger-command.js +545 -0
- package/dist/cli/version.js +93 -0
- package/dist/cli/watch-logs.js +33 -0
- package/dist/cli/watch-msg.js +673 -0
- package/dist/config/boot-log.js +266 -0
- package/dist/config/builtin-role-templates.js +42 -0
- package/dist/config/builtin-roles.js +91 -0
- package/dist/config/config-batch-get.js +11 -0
- package/dist/config/config-field-policy.js +261 -0
- package/dist/config/config-manager.js +1120 -0
- package/dist/config/config-operation-service.js +384 -0
- package/dist/config/contact-alias.js +68 -0
- package/dist/config/contact-book-store.js +454 -0
- package/dist/config/contact-book-v2-startup.js +35 -0
- package/dist/config/contact-book.js +224 -0
- package/dist/config/contact-operation-service.js +110 -0
- package/dist/config/gateway-config.js +858 -0
- package/dist/config/lifecycle.js +17 -0
- package/dist/config/mention-mode.js +27 -0
- package/dist/config/merge.js +161 -0
- package/dist/config/owner-policy.js +4 -0
- package/dist/config/peer-role-resolver.js +218 -0
- package/dist/config/resolved-config-op.js +483 -0
- package/dist/config/role-config-v4-startup.js +32 -0
- package/dist/config/role-config-v5-startup.js +27 -0
- package/dist/config/role-ranks.js +18 -0
- package/dist/config/role-schema.js +105 -0
- package/dist/config/role-service.js +156 -0
- package/dist/config/role-store.js +215 -0
- package/dist/config/roles.js +64 -0
- package/dist/config/schema-registry.js +154 -0
- package/dist/config/snapshot.js +598 -0
- package/dist/config-store.js +501 -0
- package/dist/core/auth/agent-delegation.js +111 -0
- package/dist/core/auth/auth-gateway.js +166 -0
- package/dist/core/auth/authenticated-actor.js +6 -0
- package/dist/core/auth/authorization-audit.js +119 -0
- package/dist/core/auth/operation-authorizer.js +720 -0
- package/dist/core/auth/operation-catalog.js +731 -0
- package/dist/core/baseagent-loader.js +54 -0
- package/dist/core/bootstrap-service.js +175 -0
- package/dist/core/capability/capability-manager.js +316 -0
- package/dist/core/capability/providers/claude-capability-provider.js +176 -0
- package/dist/core/capability/providers/codex-capability-provider.js +148 -0
- package/dist/core/capability/providers/gemini-capability-provider.js +10 -0
- package/dist/core/capability/types.js +27 -0
- package/dist/core/causation/audit.js +103 -0
- package/dist/core/causation/aun-association.js +111 -0
- package/dist/core/causation/context.js +93 -0
- package/dist/core/causation/index.js +4 -0
- package/dist/core/causation/types.js +2 -0
- package/dist/core/channel-loader.js +277 -0
- package/dist/core/command/agent-control.js +616 -0
- package/dist/core/command/cli-intent-parser.js +225 -0
- package/dist/core/command/command-handler.js +1733 -0
- package/dist/core/command/connect-menu.js +374 -0
- package/dist/core/command/menu-handler.js +3452 -0
- package/dist/core/command/menu-protocol.js +247 -0
- package/dist/core/command/role-menu.js +1623 -0
- package/dist/core/command/slash-gate.js +148 -0
- package/dist/core/command/slash-handler.js +3066 -0
- package/dist/core/daemon-file-cache.js +222 -0
- package/dist/core/event-bus.js +32 -0
- package/dist/core/event-catalog.js +810 -0
- package/dist/core/evolagent-registry.js +545 -0
- package/dist/core/evolagent.js +342 -0
- package/dist/core/handoff/dispatcher.js +229 -0
- package/dist/core/handoff/mutex.js +46 -0
- package/dist/core/handoff/runtime.js +324 -0
- package/dist/core/handoff/store.js +537 -0
- package/dist/core/handoff/types.js +12 -0
- package/dist/core/inference/text-inference.js +173 -0
- package/dist/core/interaction-registration.js +10 -0
- package/dist/core/interaction-router.js +278 -0
- package/dist/core/message/create-status.js +67 -0
- package/dist/core/message/im-renderer.js +659 -0
- package/dist/core/message/items-formatter.js +76 -0
- package/dist/core/message/logical-queue-bridge.js +123 -0
- package/dist/core/message/message-bridge.js +874 -0
- package/dist/core/message/message-cache.js +56 -0
- package/dist/core/message/message-log.js +339 -0
- package/dist/core/message/message-processor.js +4 -0
- package/dist/core/message/message-queue.js +1446 -0
- package/dist/core/message/message-utils.js +76 -0
- package/dist/core/message/peer-mode.js +105 -0
- package/dist/core/message/pending-hints.js +232 -0
- package/dist/core/message/response-depth.js +33 -0
- package/dist/core/message/response-engine.js +4020 -0
- package/dist/core/message/response-snapshot.js +83 -0
- package/dist/core/message/send-receipt.js +24 -0
- package/dist/core/message/stream-debouncer.js +139 -0
- package/dist/core/message/stream-idle-monitor.js +124 -0
- package/dist/core/model/config-scope.js +162 -0
- package/dist/core/model/field-scope.js +78 -0
- package/dist/core/model/model-catalog.js +227 -0
- package/dist/core/model/model-diagnostics.js +182 -0
- package/dist/core/model/model-permission.js +90 -0
- package/dist/core/permission/approval-gateway.js +1017 -0
- package/dist/core/permission/ec-command-parser.js +347 -0
- package/dist/core/permission/execution-sandbox.js +16 -0
- package/dist/core/permission/index.js +6 -0
- package/dist/core/permission/mode.js +24 -0
- package/dist/core/permission/sandbox-runtime.js +265 -0
- package/dist/core/permission/tool-policy.js +1019 -0
- package/dist/core/permission/unix-socket-policy.js +99 -0
- package/dist/core/protected-paths.js +332 -0
- package/dist/core/relation/peer-identity.js +222 -0
- package/dist/core/relation/peer-key.js +1 -0
- package/dist/core/role/runtime-policy.js +141 -0
- package/dist/core/session/adapters/claude-session-file-adapter.js +218 -0
- package/dist/core/session/adapters/codex-session-file-adapter.js +333 -0
- package/dist/core/session/adapters/gemini-session-file-adapter.js +181 -0
- package/dist/core/session/session-file-adapter.js +7 -0
- package/dist/core/session/session-file-health.js +45 -0
- package/dist/core/session/session-fs-store.js +273 -0
- package/dist/core/session/session-key.js +24 -0
- package/dist/core/session/session-manager.js +1643 -0
- package/dist/core/session/session-mapper.js +100 -0
- package/dist/core/session/session-renew.js +314 -0
- package/dist/core/session/session-title.js +128 -0
- package/dist/core/session/session-turn-coordinator.js +205 -0
- package/dist/core/session/session-turns.js +67 -0
- package/dist/core/system-channels.js +29 -0
- package/dist/eck/baseagent-caps.js +18 -0
- package/dist/eck/detect.js +47 -0
- package/dist/eck/group-rules-sync.js +345 -0
- package/dist/eck/init.js +77 -0
- package/dist/eck/kit-renderer.js +359 -0
- package/dist/eck/manifest-engine.js +446 -0
- package/dist/eck/message-renderer.js +199 -0
- package/dist/eck/rules-loader.js +28 -0
- package/dist/index.js +2926 -4
- package/dist/ipc.js +777 -0
- package/dist/paths.js +262 -0
- package/dist/product.js +18 -0
- package/dist/response-system/context-builder.js +71 -0
- package/dist/response-system/coordinator.js +117 -0
- package/dist/response-system/decision-executor.js +86 -0
- package/dist/response-system/engines/v1/index.js +21 -0
- package/dist/response-system/engines/v1/interactive-flow.js +27 -0
- package/dist/response-system/engines/v1/proactive-flow.js +137 -0
- package/dist/response-system/engines/v1/types.js +1 -0
- package/dist/response-system/extensions.js +41 -0
- package/dist/response-system/index.js +6 -0
- package/dist/response-system/modes/index.js +7 -0
- package/dist/response-system/modes/single-session/index.js +72 -0
- package/dist/response-system/queues/fifo-queue.js +44 -0
- package/dist/response-system/queues/index.js +6 -0
- package/dist/response-system/queues/lifo-queue.js +42 -0
- package/dist/response-system/queues/priority-queue.js +63 -0
- package/dist/response-system/registry.js +97 -0
- package/dist/response-system/resolver.js +37 -0
- package/dist/response-system/selector.js +23 -0
- package/dist/response-system/types.js +7 -0
- package/dist/stats/billing.js +163 -0
- package/dist/stats/budget.js +93 -0
- package/dist/stats/db.js +403 -0
- package/dist/stats/eck-vars.js +89 -0
- package/dist/stats/index.js +11 -0
- package/dist/stats/normalizer.js +80 -0
- package/dist/stats/price-resolver.js +138 -0
- package/dist/stats/query.js +763 -0
- package/dist/stats/role-budget.js +168 -0
- package/dist/stats/writer.js +151 -0
- package/dist/trigger/anomaly-store.js +258 -0
- package/dist/trigger/audit.js +152 -0
- package/dist/trigger/event-source.js +119 -0
- package/dist/trigger/feedback.js +685 -0
- package/dist/trigger/history.js +290 -0
- package/dist/trigger/manager.js +294 -0
- package/dist/trigger/parser.js +595 -0
- package/dist/trigger/patch.js +155 -0
- package/dist/trigger/scheduler.js +1602 -0
- package/dist/trigger/script-executor.js +155 -0
- package/dist/trigger/state.js +145 -0
- package/dist/trigger/types.js +1 -0
- package/dist/trigger/validation.js +634 -0
- package/dist/types.js +12 -0
- package/dist/utils/aid-bind.js +313 -0
- package/dist/utils/atomic-write.js +95 -0
- package/dist/utils/avatar-upload.js +123 -0
- package/dist/utils/cross-platform.js +297 -0
- package/dist/utils/ecweb-utils.js +73 -0
- package/dist/utils/error-dict.json +153 -0
- package/dist/utils/error-utils.js +349 -0
- package/dist/utils/instance-registry.js +444 -0
- package/dist/utils/locale.js +21 -0
- package/dist/utils/log-writer.js +270 -0
- package/dist/utils/logger.js +89 -0
- package/dist/utils/markdown-to-plain-text.js +20 -0
- package/dist/utils/media-cache.js +274 -0
- package/dist/utils/model-prices.jsonl +20 -0
- package/dist/utils/npm-ops.js +210 -0
- package/dist/utils/process-introspect.js +133 -0
- package/dist/utils/process-tree-stats.js +271 -0
- package/dist/utils/project-path.js +74 -0
- package/dist/utils/restart-safety.js +31 -0
- package/dist/utils/stats.js +410 -0
- package/dist/utils/system-memory.js +62 -0
- package/dist/utils/tool-summary.js +284 -0
- package/dist/utils/welcome.js +268 -0
- package/kits/docs/GUIDE.md +20 -0
- package/kits/docs/INDEX.md +66 -0
- package/kits/docs/aun/CHEATSHEET.md +19 -0
- package/kits/docs/aun/SYNC_PROTOCOL.md +15 -0
- package/kits/docs/channels/aun.md +65 -0
- package/kits/docs/channels/feishu.md +56 -0
- package/kits/docs/context-assembly.md +366 -0
- package/kits/docs/eck_templates/GUIDE.template.md +22 -0
- package/kits/docs/eck_templates/INDEX.template.md +28 -0
- package/kits/docs/eck_templates/path-registry.template.md +33 -0
- package/kits/docs/eck_templates/runtime.template.md +19 -0
- package/kits/docs/evolcore/INDEX.md +68 -0
- package/kits/docs/evolcore/agent.md +77 -0
- package/kits/docs/evolcore/aid.md +52 -0
- package/kits/docs/evolcore/config.md +149 -0
- package/kits/docs/evolcore/contact.md +57 -0
- package/kits/docs/evolcore/ctl.md +46 -0
- package/kits/docs/evolcore/event.md +216 -0
- package/kits/docs/evolcore/fs-architecture.md +1215 -0
- package/kits/docs/evolcore/fs.md +110 -0
- package/kits/docs/evolcore/group-fs.md +17 -0
- package/kits/docs/evolcore/group-rules.md +226 -0
- package/kits/docs/evolcore/group.md +150 -0
- package/kits/docs/evolcore/model.md +50 -0
- package/kits/docs/evolcore/msg.md +136 -0
- package/kits/docs/evolcore/response.md +75 -0
- package/kits/docs/evolcore/rpc.md +37 -0
- package/kits/docs/evolcore/self-summary.md +29 -0
- package/kits/docs/evolcore/stats.md +83 -0
- package/kits/docs/evolcore/storage.md +50 -0
- package/kits/docs/evolcore/trigger.md +539 -0
- package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -0
- package/kits/docs/identity/PATH_OPS.md +16 -0
- package/kits/docs/identity/ROLE_DETAIL.md +23 -0
- package/kits/docs/identity/identity-tools.md +26 -0
- package/kits/docs/path-registry.md +43 -0
- package/kits/docs/prompt-loading-architecture.md +266 -0
- package/kits/docs/venues/aun-group.md +45 -0
- package/kits/docs/venues/aun-private.md +10 -0
- package/kits/docs/venues/client-desktop.md +10 -0
- package/kits/docs/venues/client-mobile.md +10 -0
- package/kits/docs/venues/feishu-group.md +13 -0
- package/kits/docs/venues/feishu-private.md +9 -0
- package/kits/docs/venues/group.md +25 -0
- package/kits/docs/venues/private.md +10 -0
- package/kits/eck_manifest.auxiliary.json +43 -0
- package/kits/eck_manifest.json +203 -0
- package/kits/eck_message_manifest.json +63 -0
- package/kits/migrations/README-role-config-v4.md +32 -0
- package/kits/migrations/migrate-contact-book-v2.mjs +747 -0
- package/kits/migrations/migrate-role-config-v4.mjs +623 -0
- package/kits/migrations/migrate-role-config-v5.mjs +346 -0
- package/kits/migrations/rename-config-file.mjs +99 -0
- package/kits/rules/01-overview.md +142 -0
- package/kits/rules/02-navigation.md +76 -0
- package/kits/rules/03-identity.md +34 -0
- package/kits/rules/04-relation.md +59 -0
- package/kits/rules/05-venue.md +44 -0
- package/kits/rules/06-channel.md +59 -0
- package/kits/schemas/_meta.json +32 -0
- package/kits/schemas/agent-config.schema.1.json +177 -0
- package/kits/schemas/agent-config.schema.2.json +239 -0
- package/kits/schemas/agent-config.schema.3.json +119 -0
- package/kits/schemas/agent-config.schema.4.json +208 -0
- package/kits/schemas/agent-config.schema.5.json +326 -0
- package/kits/schemas/agent-config.schema.6.json +322 -0
- package/kits/schemas/contact-book.schema.1.json +36 -0
- package/kits/schemas/contact-book.schema.2.json +43 -0
- package/kits/schemas/daemon.schema.1.json +90 -0
- package/kits/schemas/defaults.schema.1.json +81 -0
- package/kits/schemas/menu-exec-schema-commands.md +208 -0
- package/kits/schemas/migrations/README.md +28 -0
- package/kits/schemas/relation-config.schema.1.json +158 -0
- package/kits/schemas/relation-config.schema.2.json +73 -0
- package/kits/schemas/relation-config.schema.3.json +50 -0
- package/kits/schemas/relation-config.schema.4.json +47 -0
- package/kits/schemas/relation-config.schema.5.json +47 -0
- package/kits/schemas/role-config.schema.1.json +201 -0
- package/kits/schemas/role-registry.schema.1.json +35 -0
- package/kits/schemas/single-session.schema.1.json +31 -0
- package/kits/templates/bootstrap-welcome.md +15 -0
- package/kits/templates/message-fragments/handoff-request-to-target.md +13 -0
- package/kits/templates/message-fragments/handoff-response-to-origin.md +10 -0
- package/kits/templates/message-fragments/inject-default.md +2 -0
- package/kits/templates/message-fragments/item.md +2 -0
- package/kits/templates/roles/admin.json +9 -0
- package/kits/templates/roles/member.json +41 -0
- package/kits/templates/roles/owner.json +9 -0
- package/kits/templates/roles/visitor.json +40 -0
- package/kits/templates/system-fragments/baseagent.md +14 -0
- package/kits/templates/system-fragments/bootstrap.md +16 -0
- package/kits/templates/system-fragments/channel.md +48 -0
- package/kits/templates/system-fragments/commands.md +28 -0
- package/kits/templates/system-fragments/identity.md +11 -0
- package/kits/templates/system-fragments/relation.md +19 -0
- package/kits/templates/system-fragments/session.md +53 -0
- package/kits/templates/system-fragments/venue.md +31 -0
- package/package.json +50 -15
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# AUN 渠道
|
|
2
|
+
|
|
3
|
+
> 知识性文档:AUN 渠道的配置、参数与特有机制。**不依赖当前会话渠道**——任意会话都可按需 Read。
|
|
4
|
+
> 运行时"怎么发消息"由注入的 `[channel]` 段决定(aun 渠道用 `ec msg send` / `ec group send`),不在本文。
|
|
5
|
+
> 群聊使用 `evolcore/group.md`;群文件使用 `evolcore/fs.md`。
|
|
6
|
+
|
|
7
|
+
## 概述
|
|
8
|
+
|
|
9
|
+
AUN 渠道把 agent 接入 AUN(Agent Union Network),对端以 **AID** 为身份标识(既是身份也是地址)。evolcore 通过 AUN SDK(`@agentunion/fastaun`)维护到 Gateway 的 WebSocket 长连接,支持私聊、群聊、文件、E2EE 加密。
|
|
10
|
+
|
|
11
|
+
## 配置
|
|
12
|
+
|
|
13
|
+
AUN 渠道是**隐式**的——它不写在 `channels[]` 数组里,而是从 agent 自身的 AID 自动创建。一个 agent 就是一个 AID,启动时 evolcore 用顶层 `aid` 字段隐式构造唯一的 aun 实例(`channel-loader.ts`)。所以真实的 agent config.json 里 `channels` 数组通常是空的(飞书等非 aun 渠道才往里加)。
|
|
14
|
+
|
|
15
|
+
### agent 配置(`agents/<aid>/config.json`)
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"$schema_version": 1,
|
|
20
|
+
"aid": "myagent.agentid.pub",
|
|
21
|
+
"enabled": true,
|
|
22
|
+
"owners": ["owner.agentid.pub"],
|
|
23
|
+
"channels": [],
|
|
24
|
+
"active_baseagent": "claude"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
| 字段 | 说明 |
|
|
29
|
+
|------|------|
|
|
30
|
+
| `aid` | agent 的 AID,**即 aun 渠道身份**(隐式创建,无需在 channels[] 声明) |
|
|
31
|
+
| `enabled` | agent 是否启用 |
|
|
32
|
+
| `owners` | owner 的 **AID** 列表(最高权限);首个 owner 用于首次连接发欢迎消息 |
|
|
33
|
+
| `admins` | admin 的 AID 列表 |
|
|
34
|
+
| `channels` | 非 aun 渠道(飞书等)的实例数组;aun 不在此 |
|
|
35
|
+
|
|
36
|
+
> `owners`/`admins` 用 **AID**,不是渠道原生 ID。
|
|
37
|
+
|
|
38
|
+
### 进程级配置(`$EVOLCORE_HOME/config.json`)
|
|
39
|
+
|
|
40
|
+
E2EE 加密种子是**进程级**的,所有 agent 共享,不在 agent config 里:
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"aun": {
|
|
45
|
+
"encryptionSeed": "<seed>"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
留空时 SDK 依次回退 `AUN_ENCRYPTION_SEED` 环境变量 → 默认 `'evol'`。
|
|
51
|
+
|
|
52
|
+
> Gateway 不在配置里手填:连接时从 AID 自动发现(见下)。Keystore 默认落在 `$EVOLCORE_HOME`。
|
|
53
|
+
|
|
54
|
+
## 特有机制
|
|
55
|
+
|
|
56
|
+
- **隐式创建**:aun 渠道由顶层 `aid` 派生,无独立配置实例;这是它与飞书等渠道最大的不同。
|
|
57
|
+
- **网关发现**:连接前查询 `https://<aid>/.well-known/aun-gateway` 获取网关地址(AID 本身即域名);per-agent 流程不提供手填 gateway 的入口,发现失败即连接失败。
|
|
58
|
+
- **身份与信任**:每条入站消息携带发送者 AID,经四级 X.509 证书链(Root CA → Registry CA → Issuer CA → Agent)验签。
|
|
59
|
+
- **agent.md 缓存**:对端名片 `https://<aid>/agent.md` 由 **AUN SDK 自动拉取并缓存**(`AgentMdManager`,带 ETag/TTL,默认 1 天内不重复探测)。缓存落在 **`$EVOLCORE_HOME/AIDs/<aid>/`**,每个 AID 两个文件:`agent.md`(带签名正文)+ `agentmd.json`(元数据:etag/last_modified/checked_at/verify_status)。本端与对端的 agent.md 都缓存于此。
|
|
60
|
+
- 关系层另存一份**派生**的精简身份 `relations/<peerKey>/peer-identity.json`(type/isAgent/name),由 evolcore 从 agent.md 提取,不是 agent.md 本体。
|
|
61
|
+
- **E2EE 加密**:可选端到端加密,回复默认跟随对端消息加密状态(密文回密文,明文回明文);种子由进程级 `aun.encryptionSeed` 提供。
|
|
62
|
+
- **断线重连**:SDK 内置退避策略自动重连。实时连接状态用 `ec watch aid` 查看(`ec aid` 是身份/证书管理,不显示连接状态)。
|
|
63
|
+
- **群 ID 格式**:当前协议规范使用 `g-{slug}.issuer-domain` canonical 形式,输入也可接受本域简写 `g-{slug}` 或兼容形式 `g-{slug}@issuer-domain`。历史会话里可能仍出现 `group.{issuer}/{group_no}` 一类旧格式,运行时需兼容读取。
|
|
64
|
+
- **群分发模式**:`dispatch_mode=broadcast|mention` 是群级配置,只决定哪些群消息进入 Agent LLM 上下文,不影响 AUN 协议层投递;被过滤消息仍应本地存档。
|
|
65
|
+
- **身份体系**:对端以 AID 标识,关系层 peerKey 形如 `aun#alice.aid.pub`。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 飞书渠道
|
|
2
|
+
|
|
3
|
+
> 知识性文档:飞书渠道的配置、参数与特有机制。**不依赖当前会话渠道**——任意会话都可按需 Read(在 aun 会话里也可查飞书)。
|
|
4
|
+
> 运行时"怎么发消息"由注入的 `[channel]` 段决定(飞书是 evolcore 自动回复,agent 不调 CLI),不在本文。
|
|
5
|
+
|
|
6
|
+
## 概述
|
|
7
|
+
|
|
8
|
+
飞书渠道通过 evolcore 的 feishu channel 插件接入,对端以飞书 `user_id`(如 `ou_xxx`)为身份标识。支持单聊/群聊收发、合并转发解析、富文本卡片、文件/图片/视频消息。
|
|
9
|
+
|
|
10
|
+
## 配置
|
|
11
|
+
|
|
12
|
+
飞书渠道按 **per-agent** 配置,写在 `agents/<aid>/config.json` 的 `channels` 数组里。每个元素是一个独立实例,靠 `name` 区分;同一 agent 可配多个飞书实例。
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"aid": "myagent.aid.pub",
|
|
17
|
+
"channels": [
|
|
18
|
+
{
|
|
19
|
+
"type": "feishu",
|
|
20
|
+
"name": "main",
|
|
21
|
+
"enabled": true,
|
|
22
|
+
"appId": "cli_xxx",
|
|
23
|
+
"appSecret": "<app-secret>",
|
|
24
|
+
"owners": ["ou_owner_user_id"],
|
|
25
|
+
"admins": ["ou_admin_user_id"]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 实例字段
|
|
32
|
+
|
|
33
|
+
| 字段 | 必填 | 说明 |
|
|
34
|
+
|------|------|------|
|
|
35
|
+
| `type` | 是 | 固定 `"feishu"` |
|
|
36
|
+
| `name` | 是(数组形式) | 该 agent 内飞书实例的本地标识,不含 `#` |
|
|
37
|
+
| `enabled` | 否 | 默认启用;`false` 关闭该实例 |
|
|
38
|
+
| `appId` | 是 | 飞书自建应用 App ID |
|
|
39
|
+
| `appSecret` | 是 | 飞书自建应用 App Secret |
|
|
40
|
+
| `owners` | 否 | owner 的飞书 `user_id` 列表(最高权限) |
|
|
41
|
+
| `admins` | 否 | admin 的飞书 `user_id` 列表 |
|
|
42
|
+
| `flushDelay` | 否 | flush 间隔(秒),覆盖全局值 |
|
|
43
|
+
| `debounce` | 否 | 入站消息去抖间隔(秒),覆盖全局值 |
|
|
44
|
+
| `showActivities` | 否 | 思考过程展示范围:`all` / `dm-only` / `owner-dm-only` / `none` |
|
|
45
|
+
|
|
46
|
+
> `owners`/`admins` 用飞书原生 `user_id`,**不是 AID**。
|
|
47
|
+
|
|
48
|
+
agent 级(config.json 顶层)相关开关:
|
|
49
|
+
- `enable_rich_content`:已废弃,仅为旧配置兼容保留;飞书继续按 Markdown/post 消息发送。
|
|
50
|
+
|
|
51
|
+
## 特有机制
|
|
52
|
+
|
|
53
|
+
- **合并转发解析**:飞书的 `merge_forward` 消息会被自动展开为文本注入上下文(含"以下是引用的原消息"包裹)。
|
|
54
|
+
- **交互卡片**:命令和交互请求可使用飞书卡片发送;卡片按钮**仅发起者可操作**,他人点击返回提示。
|
|
55
|
+
- **身份体系**:对端以 `user_id` 标识,关系层 peerKey 形如 `feishu#ou_xxx`。
|
|
56
|
+
- **自动回复**:飞书是非 aun 渠道,回复由 evolcore 自动完成,agent 无需调用 `ec msg send`。
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# 上下文组装机制(manifest)
|
|
2
|
+
|
|
3
|
+
ECK 把"每条消息该给 base agent 看哪些上下文"这件事,交给一份 **manifest** 声明式描述,由 `renderKitSections`(`src/agents/kit-renderer.ts`)在每次处理消息时执行。本文是这套机制的完整参考。
|
|
4
|
+
|
|
5
|
+
> 本文是按需载入文档。日常对话不需要读它——只有在排查"为什么某段上下文没出现/出现了"、要改 manifest、或要看实际渲染结果时才 Read。
|
|
6
|
+
|
|
7
|
+
## 三个阶段
|
|
8
|
+
|
|
9
|
+
evolcore 收到消息 → 构造一份 **vars**(运行时变量,见下)→ `renderKitSections`:
|
|
10
|
+
|
|
11
|
+
1. **选段**:按 manifest 顺序遍历每个 section,用它的 `when` 条件 + 当前 vars 判断是否加载。
|
|
12
|
+
2. **渲染**:解析 section 路径里的 `$NAME` / `{{key}}` 占位符定位文件;`needsInjection:true` 的文件再跑一遍模板渲染(条件块 + 变量替换)。
|
|
13
|
+
3. **拼装**:所有命中的文件内容包进一个 `<system-reminder>` 块,作为 system prompt 的一部分注入。
|
|
14
|
+
|
|
15
|
+
整个过程对每次消息执行一次,结果同时落盘到调试目录(见"调试机制")。
|
|
16
|
+
|
|
17
|
+
## manifest 文件位置
|
|
18
|
+
|
|
19
|
+
| 文件 | 角色 | 性质 |
|
|
20
|
+
|------|------|------|
|
|
21
|
+
| `$KITS/eck_manifest.json` | 基础 manifest(开发时维护) | 只读 |
|
|
22
|
+
| `$ECK/eck_manifest.json` | 用户覆盖(可选,默认不存在) | 可写 |
|
|
23
|
+
|
|
24
|
+
加载时合并两者(见"合并与覆盖")。manifest 只加载一次并缓存。
|
|
25
|
+
|
|
26
|
+
## 多 manifest:按会话原型(sessionType)选清单
|
|
27
|
+
|
|
28
|
+
不同**会话原型**加载不同的 manifest 文件,各自走同一引擎、同一两级覆盖机制:
|
|
29
|
+
|
|
30
|
+
| 会话原型(`session.sessionType`) | manifest 文件 | 用途 |
|
|
31
|
+
|------|------|------|
|
|
32
|
+
| `main`(默认) | `eck_manifest.json` | 主会话,完整上下文 |
|
|
33
|
+
| `auxiliary` | `eck_manifest.auxiliary.json` | 辅助会话(双会话模式),精简上下文 |
|
|
34
|
+
| 未来:`approval` / `goal` / ... | `eck_manifest.<type>.json` | 权限审批 / 目标管理等专用会话 |
|
|
35
|
+
|
|
36
|
+
**映射由 agent config 的 `sessionManifests` 字段定义**(走 config 分级覆盖:关系/环境/agent 级):
|
|
37
|
+
|
|
38
|
+
```jsonc
|
|
39
|
+
// $AGENT_DIR/config.json
|
|
40
|
+
{
|
|
41
|
+
"sessionManifests": {
|
|
42
|
+
"main": "eck_manifest.json", // 缺省可省略,兜底就是它
|
|
43
|
+
"auxiliary": "eck_manifest.auxiliary.json"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
渲染时按 `session.sessionType`(缺省 `'main'`)查 `sessionManifests`,取不到则回退 `eck_manifest.json`。
|
|
49
|
+
**每个 manifest 文件各自两级合并**(`$KITS/<file>` + `$ECK/<file>`),互不干扰。
|
|
50
|
+
|
|
51
|
+
## section 字段
|
|
52
|
+
|
|
53
|
+
manifest 是 `{ "$schema_version": 1, "sections": [...] }`。每个 section:
|
|
54
|
+
|
|
55
|
+
| 字段 | 必填 | 含义 |
|
|
56
|
+
|------|------|------|
|
|
57
|
+
| `id` | ✓ | 唯一标识,覆盖合并的键 |
|
|
58
|
+
| `type` | ✓ | `file`(单文件)或 `directory`(整目录) |
|
|
59
|
+
| `file` | type=file | 文件路径,可含 `$NAME` / `{{key}}` |
|
|
60
|
+
| `path` | type=directory | 目录路径 |
|
|
61
|
+
| `pattern` | | 目录匹配 glob,默认 `*.md`(支持 `*` 和 `{a,b}`) |
|
|
62
|
+
| `maxFiles` | | type=directory:最多加载文件数,默认 20。超出停止加载并注入截断说明 |
|
|
63
|
+
| `maxBytes` | | type=directory:最多加载总字节,默认 40960(40KB)。超出停止加载并注入截断说明(至少保留 1 个文件) |
|
|
64
|
+
| `order` | ✓ | 排序,**升序**决定上下文中出现的先后 |
|
|
65
|
+
| `needsInjection` | ✓ | `true`=按模板渲染(解析 `{{}}` 条件与变量);`false`=原样读入 |
|
|
66
|
+
| `when` | ✓ | 加载条件,`"always"` 或条件对象(见下) |
|
|
67
|
+
| `enabled` | | `false` 时整段跳过 |
|
|
68
|
+
| `loop` | | 三段式循环:`{ forEach, childFile, separator? }`。有 loop 时 file 作 wrapper,见"三段式循环" |
|
|
69
|
+
| `description` | | 调试输出里的人类可读标签 |
|
|
70
|
+
|
|
71
|
+
### 三段式循环(wrapper + forEach + child)
|
|
72
|
+
|
|
73
|
+
批量数据(如一批消息)用 `loop` 字段做"包裹层 + 循环体"渲染,避免手写重复模板:
|
|
74
|
+
|
|
75
|
+
```jsonc
|
|
76
|
+
{
|
|
77
|
+
"id": "batch-messages",
|
|
78
|
+
"type": "file",
|
|
79
|
+
"file": "$KITS_.../batch-wrapper.md", // ① wrapper:包裹模板,含 {{@loop}} 占位
|
|
80
|
+
"loop": {
|
|
81
|
+
"forEach": "items", // ② 循环 vars 里的数组变量
|
|
82
|
+
"childFile": "$KITS_.../batch-item.md", // ③ 每元素渲染的子模板
|
|
83
|
+
"separator": "\n" // 元素间分隔符,默认 "\n"
|
|
84
|
+
},
|
|
85
|
+
"needsInjection": true,
|
|
86
|
+
"order": 5,
|
|
87
|
+
"when": "always"
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**wrapper 模板**(`{{@loop}}` 处填入循环结果):
|
|
92
|
+
```
|
|
93
|
+
【批次 剩余{{remainingInQueue}}条 | 主队列{{pendingCount}}】
|
|
94
|
+
{{@loop}}
|
|
95
|
+
【批次结束】
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**childFile 模板**(每个元素,可访问元素字段 + 外层 vars + `{{@index}}`):
|
|
99
|
+
```
|
|
100
|
+
[{{@index}}] {{peerName}}: {{content}}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**渲染规则**:
|
|
104
|
+
- 对 `vars[forEach]` 数组每个元素渲染 childFile(对象元素 → 字段可用 `{{field}}`;标量 → `{{.}}`),以 `separator` 连接
|
|
105
|
+
- wrapper 单独渲染(其变量如 `remainingInQueue` 来自 vars),`{{@loop}}` 位置**字面量填入**循环结果 → 循环结果不被二次解析
|
|
106
|
+
- childFile 内可再嵌套 `{{#each}}` 或另一个占位,支持多层
|
|
107
|
+
- 空数组 / 非数组 → 循环结果为空串
|
|
108
|
+
- wrapper 不含 `{{@loop}}` → 循环结果追加到 wrapper 末尾(容错)
|
|
109
|
+
|
|
110
|
+
> **消息渲染层的 loop**:`eck_message_manifest.json` 里的 loop 段是**批次包裹层**——
|
|
111
|
+
> child 由 message-renderer 的逐条渲染(`renderOneItem`,自带 content 哨兵)产出,
|
|
112
|
+
> 用户消息文本里的 `{{}}` 不会被二次解析。批次 vars(remainingInQueue 等)从 sessionVars 透传。
|
|
113
|
+
> 详见 `prompt-loading-architecture.md`。
|
|
114
|
+
|
|
115
|
+
### 清单顶层字段
|
|
116
|
+
|
|
117
|
+
除 `sections` 外,manifest 顶层还支持全局限额(总闸,跨所有段累计):
|
|
118
|
+
|
|
119
|
+
| 字段 | 默认 | 含义 |
|
|
120
|
+
|------|------|------|
|
|
121
|
+
| `$schema_version` | — | 版本号 |
|
|
122
|
+
| `mode` | patch | `patch`(合并)/ `replace`(完全替换),见"合并与覆盖" |
|
|
123
|
+
| `totalMaxFiles` | 50 | 整个清单渲染最多文件数。达到后停止加载后续所有段 |
|
|
124
|
+
| `totalMaxBytes` | 102400(100KB) | 整个清单渲染最多总字节。达到后停止加载后续所有段 |
|
|
125
|
+
|
|
126
|
+
## 目录加载限额(安全保护)
|
|
127
|
+
|
|
128
|
+
`type: directory` 段加载整个目录,若目录内容失控会撑爆提示词。两层限额保护:
|
|
129
|
+
|
|
130
|
+
- **单目录限额**(`maxFiles` 20 / `maxBytes` 40KB):单个目录段最多加载多少。超出时停止加载该目录后续文件,并在该段末尾注入一行截断说明:
|
|
131
|
+
`[注意] 目录 $KITS_RULES 未完整加载:N 个文件未加载(达文件数上限 20 个)。`
|
|
132
|
+
- **总闸限额**(`totalMaxFiles` 50 / `totalMaxBytes` 100KB):整个清单所有段加起来的上限。达到后停止加载后续所有命中段,末尾注入总截断说明,**带上未加载的 section id 集合**:
|
|
133
|
+
`[注意] 上下文清单总量超限(>50 文件 / >100KB),以下 section 未加载:goal-fragment, extra-docs。`
|
|
134
|
+
|
|
135
|
+
> **注**:字节按文件原始内容(`rawContent`)计,不含渲染后变化,也不含截断说明行本身。
|
|
136
|
+
> 单目录"至少保留 1 个文件"——避免单个超大文件导致整段为空。
|
|
137
|
+
> 截断信息同时写入调试输出(`manifest-*.md`),便于排查。
|
|
138
|
+
|
|
139
|
+
> **现状**:当前唯一目录段 `$KITS_RULES` = 6 文件 / ~18KB,远低于默认限额,不受影响。
|
|
140
|
+
> 新增规则文档时注意别让该目录逼近 40KB。
|
|
141
|
+
|
|
142
|
+
## when 条件求值
|
|
143
|
+
|
|
144
|
+
`when` 是 `"always"` 或一个对象。求值规则(`evaluateWhen`):
|
|
145
|
+
|
|
146
|
+
| 写法 | 含义 |
|
|
147
|
+
|------|------|
|
|
148
|
+
| `"always"` | 恒为真 |
|
|
149
|
+
| `{ "var": "X", "eq": V }` | `vars.X === V`;`eq:null` 匹配"未注入"(null/undefined) |
|
|
150
|
+
| `{ "var": "X", "neq": V }` | `vars.X !== V`;`neq:null` 匹配"已注入" |
|
|
151
|
+
| `{ "var": "X", "in": [...] }` | `vars.X` 在数组内 |
|
|
152
|
+
| `{ "var": "X", "nin": [...] }` | `vars.X` 不在数组内 |
|
|
153
|
+
| `{ "any": ["A","B"] }` | A、B 任一为真值 |
|
|
154
|
+
| `{ "all": ["A","B"] }` | A、B 全为真值 |
|
|
155
|
+
|
|
156
|
+
"真值"判定:非 `undefined`/`null`/`false`/`""`/`0`。
|
|
157
|
+
|
|
158
|
+
典型用法:`{ "var": "chatType", "neq": null }` = "非 coding 场景才加载";`{ "var": "groupId", "neq": null }` = "群聊才加载"。
|
|
159
|
+
|
|
160
|
+
## 合并与覆盖
|
|
161
|
+
|
|
162
|
+
无 `$ECK/eck_manifest.json` 时,直接用基础 manifest。存在时:
|
|
163
|
+
|
|
164
|
+
- 覆盖文件含 `"mode": "replace"` → **完全替换**,只用覆盖文件的 sections。
|
|
165
|
+
- 否则 **patch 合并**:以 `id` 为键,覆盖文件里同 id 的字段浅合并进基础 section(`{...base, ...override}`),新 id 追加。
|
|
166
|
+
|
|
167
|
+
合并后统一按 `order` 升序排序。改某段行为(如关掉某层、调顺序、换条件)优先用覆盖文件,不动基础 manifest。
|
|
168
|
+
|
|
169
|
+
### 覆盖示例
|
|
170
|
+
|
|
171
|
+
禁用某段:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{ "sections": [ { "id": "venue-client", "enabled": false } ] }
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
改加载条件(仅 owner/admin 才载入对端档案):
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{ "sections": [ { "id": "peer-profile", "when": { "var": "peerRole", "in": ["owner", "admin"] } } ] }
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
新增自定义段:
|
|
184
|
+
|
|
185
|
+
```json
|
|
186
|
+
{
|
|
187
|
+
"sections": [
|
|
188
|
+
{
|
|
189
|
+
"id": "my-custom-context",
|
|
190
|
+
"type": "file",
|
|
191
|
+
"file": "$AGENT_DIR/custom/my-rules.md",
|
|
192
|
+
"order": 25,
|
|
193
|
+
"needsInjection": false,
|
|
194
|
+
"when": "always",
|
|
195
|
+
"description": "我的自定义规则"
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
完全替换(忽略基础 manifest):
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{ "$schema_version": 1, "mode": "replace", "sections": [ ... ] }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## 路径与模板渲染
|
|
208
|
+
|
|
209
|
+
### 路径占位符(所有 section 的 file/path)
|
|
210
|
+
|
|
211
|
+
- `$NAME`(大写)→ 从 vars 取真值,如 `$KITS_DOCS` → 包内文档目录。
|
|
212
|
+
- `{{key}}` → 从 vars 取真值,如 `{{chatType}}` → `private`,`{{peerKey}}` → `aun#alice.aid.pub`。
|
|
213
|
+
|
|
214
|
+
manifest 中常用路径变量的展开值:
|
|
215
|
+
|
|
216
|
+
| 变量 | 展开为 |
|
|
217
|
+
|------|--------|
|
|
218
|
+
| `$PACKAGE_ROOT` | evolcore 包根 |
|
|
219
|
+
| `$EVOLCORE_HOME` | 用户数据根(默认 `~/.evolcore`) |
|
|
220
|
+
| `$KITS` | `$PACKAGE_ROOT/kits` |
|
|
221
|
+
| `$KITS_RULES` | `$KITS/rules` |
|
|
222
|
+
| `$KITS_DOCS` | `$KITS/docs` |
|
|
223
|
+
| `$KITS_TEMPLATES` | `$KITS/templates` |
|
|
224
|
+
| `$KITS_FRAGMENTS` | `$KITS_TEMPLATES/system-fragments` |
|
|
225
|
+
| `$ECK` | `$EVOLCORE_HOME/eck` |
|
|
226
|
+
| `$AGENT_DIR` | `$EVOLCORE_HOME/agents/<selfAid>` |
|
|
227
|
+
| `$PERSONAL_DIR` | `$AGENT_DIR/personal` |
|
|
228
|
+
| `$RELATIONS_DIR` | `$AGENT_DIR/relations` |
|
|
229
|
+
| `$VENUES_DIR` | `$AGENT_DIR/venues` |
|
|
230
|
+
|
|
231
|
+
任一占位符解析为空 → 该 section 视为"未解析",跳过(调试输出标 `unresolved-vars`)。文件不存在 → 标 `not-exist`,也跳过。这是**正常机制**:很多 section 靠"路径解析不出来"自然落选(如 coding 场景没有 `$PERSONAL_DIR`)。
|
|
232
|
+
|
|
233
|
+
### 模板渲染(仅 needsInjection:true 的文件)
|
|
234
|
+
|
|
235
|
+
读入跑三遍:
|
|
236
|
+
|
|
237
|
+
1. **条件块**(内层优先,可嵌套):
|
|
238
|
+
- `{{?key}}...{{/}}` — key 为真值才保留
|
|
239
|
+
- `{{?key=value}}...{{/}}` — `String(vars.key)===value` 才保留
|
|
240
|
+
- `{{?key!=value}}...{{/}}` — 不等才保留
|
|
241
|
+
2. **变量替换**:`{{key}}` 替换为值,非真值替换为空串。
|
|
242
|
+
3. **清理**:删掉空行。
|
|
243
|
+
|
|
244
|
+
`needsInjection:false` 的文件原样读入,不做任何替换(如 rules 目录、persona.md、各 venue 文档)。
|
|
245
|
+
|
|
246
|
+
## 运行时变量(vars)目录
|
|
247
|
+
|
|
248
|
+
vars 由 evolcore 在 `message-processor.ts` 按当前会话构造。分两类:
|
|
249
|
+
|
|
250
|
+
**路径类**(供占位符展开成真实路径):
|
|
251
|
+
`EVOLCORE_HOME`、`PACKAGE_ROOT`、`CURRENT_PROJECT`、`KITS`、`KITS_RULES`、`KITS_DOCS`、`KITS_TEMPLATES`、`KITS_FRAGMENTS`、`PERSONAL_DIR`、`RELATIONS_DIR`、`VENUES_DIR`。
|
|
252
|
+
|
|
253
|
+
**内容/场景类**(供 when 判断与模板替换):
|
|
254
|
+
|
|
255
|
+
| 变量 | 含义 |
|
|
256
|
+
|------|------|
|
|
257
|
+
| `selfAid` / `selfName` | 当前 agent 身份 |
|
|
258
|
+
| `hasPersona` / `hasWorkingMemory` | 是否有人格 / 当前关注 |
|
|
259
|
+
| `peerId` / `peerKey` / `peerName` | 对端原生 ID / 跨渠道键 / 显示名 |
|
|
260
|
+
| `peerRole` / `peerType` | 对端角色(owner/admin/member/visitor/自定义角色/none)/ 类型(human/agent) |
|
|
261
|
+
| `groupId` | 群 ID(群聊时) |
|
|
262
|
+
| `chatType` | `private` / `group` / `null`(coding) |
|
|
263
|
+
| `channel` | 渠道类型(aun/feishu/...)|
|
|
264
|
+
| `mentionMode` | 群 @ 处理模式(mention-only/disabled) |
|
|
265
|
+
| `clientType` | 客户端类型(desktop/web/mobile) |
|
|
266
|
+
| `permissionMode` / `readonly` | 权限模式 / 是否只读 |
|
|
267
|
+
| `capabilities` | 当前渠道能力(图片输入/输出、文件发送) |
|
|
268
|
+
| `project` / `CURRENT_PROJECT` | 项目目录名 / 完整路径 |
|
|
269
|
+
| `sessionId` / `sessionName` / `sessionKey` / `sessionCreatedAt` / `threadId` | 会话标识与元信息 |
|
|
270
|
+
| `chatMode` | `interactive` / `proactive` |
|
|
271
|
+
| `baseAgent` / `baseAgentName` / `baseAgentModel` / `agentSessionId` | base agent 信息 |
|
|
272
|
+
|
|
273
|
+
coding 场景(无 channel/无身份)下,`chatType`、`channel`、`selfAid`、`peer*` 等均为空——这正是身份/关系/环境/渠道层落选的原因。
|
|
274
|
+
|
|
275
|
+
## 三种加载方式
|
|
276
|
+
|
|
277
|
+
| 加载方式 | 决策者 | 驱动方式 | 例子 |
|
|
278
|
+
|---------|-------|---------|------|
|
|
279
|
+
| **全量加载** | manifest | `when: "always"` | rules/ 核心规则、session 参数 |
|
|
280
|
+
| **按条件自动加载** | manifest | `when` 条件 + 路径存在性 | 身份层(chatType 非空时)、对端档案(peerKey 非空时) |
|
|
281
|
+
| **按需加载** | agent 自主 | agent 在对话中主动 Read 文件 | 查阅 `$KITS_DOCS/` 下的详细参考文档 |
|
|
282
|
+
|
|
283
|
+
前两种由 manifest 控制,第三种由 agent 根据各层文档中的"按需加载指引"自主决定。
|
|
284
|
+
|
|
285
|
+
## 默认 manifest 的段(按 order)
|
|
286
|
+
|
|
287
|
+
| order | id | 类型 | 加载条件(when) | inject |
|
|
288
|
+
|-------|----|----|------------------|--------|
|
|
289
|
+
| 10 | rules | 目录 `$KITS_RULES` | always | ✗ |
|
|
290
|
+
| 20 | identity-layer | fragment | chatType≠null | ✓ |
|
|
291
|
+
| 21 | persona | `$PERSONAL_DIR/persona.md` | chatType≠null | ✗ |
|
|
292
|
+
| 22 | working-memory | `$PERSONAL_DIR/memory/working.md` | chatType≠null | ✗ |
|
|
293
|
+
| 30 | relation-layer | fragment | chatType∈{private,group} | ✓ |
|
|
294
|
+
| 35 | peer-profile | `$RELATIONS_DIR/{{peerKey}}/profile.md` | peerKey≠null | ✗ |
|
|
295
|
+
| 40 | venue-fragment | fragment | chatType≠null | ✓ |
|
|
296
|
+
| 41 | venue-chattype | `$KITS_DOCS/venues/{{chatType}}.md` | chatType≠null | ✗ |
|
|
297
|
+
| 42 | venue-channel-chattype | `$KITS_DOCS/venues/{{channel}}-{{chatType}}.md` | chatType≠null | ✗ |
|
|
298
|
+
| 43 | relation-group-profile | `$RELATIONS_DIR/{{peerKey}}/profile.md` | groupId≠null | ✗ |
|
|
299
|
+
| 44 | venue-client | `$KITS_DOCS/venues/client-{{clientType}}.md` | clientType≠null | ✗ |
|
|
300
|
+
| 50 | channel-layer | fragment | channel≠null | ✓ |
|
|
301
|
+
| 55 | commands | fragment | channel≠null | ✓ |
|
|
302
|
+
| 60 | session | fragment | always | ✓ |
|
|
303
|
+
| 70 | baseagent | fragment | baseAgent≠null | ✓ |
|
|
304
|
+
|
|
305
|
+
> 注意:`session`(60) 是 `always`,`baseagent`(70) 只看 `baseAgent` 是否注入——这两段**与 chatType 无关**,coding 场景也会加载。所谓"coding 仅 rules"是近似说法:精确地说 coding 场景命中的是 rules + session + baseagent(其余因 chatType/channel 为空而落选)。
|
|
306
|
+
|
|
307
|
+
## 环境层文档目录结构
|
|
308
|
+
|
|
309
|
+
venue-* 段从随包发布的通用文档(只读)取文件:
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
$KITS_DOCS/venues/ 通用环境文档(随包发布,只读)
|
|
313
|
+
├── private.md 单聊场景通用指引
|
|
314
|
+
├── group.md 群聊场景通用指引
|
|
315
|
+
├── aun-private.md AUN 单聊特有
|
|
316
|
+
├── aun-group.md AUN 群聊特有
|
|
317
|
+
├── feishu-private.md 飞书单聊特有
|
|
318
|
+
├── feishu-group.md 飞书群聊特有
|
|
319
|
+
├── client-desktop.md 桌面端环境
|
|
320
|
+
├── client-mobile.md 移动端环境
|
|
321
|
+
└── ...
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
> **注意**:具体群/私聊实例的 profile 数据落**关系层** `$RELATIONS_DIR/<peerKey>/profile.md`,
|
|
325
|
+
> 由 `relation-group-profile` 段注入,不在 venues 目录。
|
|
326
|
+
|
|
327
|
+
## 输出结构
|
|
328
|
+
|
|
329
|
+
所有命中 section 的文件内容拼成一个块,注入 system prompt:
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
<system-reminder>
|
|
333
|
+
EvolCore Context Kit documents are shown below.
|
|
334
|
+
|
|
335
|
+
Contenu de <展示路径> (<id — description>):
|
|
336
|
+
|
|
337
|
+
<文件内容>
|
|
338
|
+
|
|
339
|
+
...(每个文件一段,按 order)
|
|
340
|
+
|
|
341
|
+
IMPORTANT: Use this context when it affects the current interaction.
|
|
342
|
+
</system-reminder>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
展示路径会把绝对路径回缩成 `$KITS_RULES`/`$AGENT_DIR` 等别名。`needsInjection:true` 的段额外单独汇总到 `fragments-*.md` 调试文件(见下)。
|
|
346
|
+
|
|
347
|
+
## 调试机制(看实际渲染结果)
|
|
348
|
+
|
|
349
|
+
每次渲染都把结果落盘到 **`$EVOLCORE_HOME/data/eck-debug/`**,文件名带时间戳(`<字段>-YYYY-MM-DD-HH-MM-SS`):
|
|
350
|
+
|
|
351
|
+
| 文件 | 内容 |
|
|
352
|
+
|------|------|
|
|
353
|
+
| `vars-<ts>.json` | 本次注入的全部 vars 真值 + 每个变量的中文说明 |
|
|
354
|
+
| `context-<ts>.md` | 最终注入 base agent 的完整 `<system-reminder>` 块(即上面"输出结构"的实际产物) |
|
|
355
|
+
| `fragments-<ts>.md` | 仅经过模板渲染(needsInjection)的段,单独汇总,便于核对 `{{}}` 替换是否正确 |
|
|
356
|
+
| `manifest-<ts>.md` | **诊断报告**:每个 section 的 when 是否通过、路径解析状态(ok/unresolved-vars/not-exist/skipped)、是否被用上、是否注入;含未解析占位符清单 |
|
|
357
|
+
|
|
358
|
+
排查"某段为什么没出现":看 `manifest-<ts>.md` 里该 section 的 `status` 和 `unresolved tokens`。看"实际给 agent 的全文":读 `context-<ts>.md`。
|
|
359
|
+
|
|
360
|
+
调试文件保留 24 小时,`cleanEckDebug` 自动清理过期的。
|
|
361
|
+
|
|
362
|
+
## 缓存与热加载
|
|
363
|
+
|
|
364
|
+
- **manifest 缓存**:`_manifestCache`,进程内只加载一次。改了 manifest 需触发 `invalidateKitCache()`(或重启)才生效。
|
|
365
|
+
- **文件内容缓存**:`_sessionPathCache` 按 `sessionId` 缓存已读文件内容;`invalidateSessionCache(sessionId)` 清单个会话。
|
|
366
|
+
- rules / fragments / docs 这些 `kits/` 下的文件,改完一般随会话重建生效(缓存按会话隔离);manifest 本身的结构改动需要 invalidate。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Agent 查阅指南
|
|
2
|
+
|
|
3
|
+
本文件是 {{SELF_AID}} 的个人查阅指南。
|
|
4
|
+
|
|
5
|
+
## 查阅优先级
|
|
6
|
+
|
|
7
|
+
1. `$KITS_RULES`(自动加载)— ECK 机制骨架
|
|
8
|
+
2. `$AGENT_INDEX/INDEX.md`(本目录)— 个人索引
|
|
9
|
+
3. `$KITS_DOCS/INDEX.md` — evolcore 级文档索引
|
|
10
|
+
4. 按索引中的路径 Read 具体文档
|
|
11
|
+
|
|
12
|
+
## 路径解析
|
|
13
|
+
|
|
14
|
+
遇到 `$名称` 时:
|
|
15
|
+
1. 查 `$ECK/path-registry.md` 获取实际路径
|
|
16
|
+
2. 如果实例文件中没有,查 `$KITS_DOCS/path-registry.md` 了解派生规则
|
|
17
|
+
|
|
18
|
+
## 索引维护
|
|
19
|
+
|
|
20
|
+
当以下范围内有文档变动时,更新本索引:
|
|
21
|
+
- `{{CURRENT_PROJECT}}`
|
|
22
|
+
- `{{AGENT_DIR}}`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Agent 索引
|
|
2
|
+
|
|
3
|
+
本文件是 {{SELF_AID}} 的 agent 级文档索引。
|
|
4
|
+
|
|
5
|
+
## 项目文档
|
|
6
|
+
|
|
7
|
+
| 文档 | 路径 | 说明 | 最后更新 |
|
|
8
|
+
|------|------|------|----------|
|
|
9
|
+
| — | — | (初始化后由 agent 维护) | — |
|
|
10
|
+
|
|
11
|
+
## 个人档案
|
|
12
|
+
|
|
13
|
+
| 文档 | 路径 | 说明 | 最后更新 |
|
|
14
|
+
|------|------|------|----------|
|
|
15
|
+
| 人格档案 | `$SELF_DIR/persona.md` | 行为规范与人格定义 | {{CREATED_AT}} |
|
|
16
|
+
| 工作记忆 | `$SELF_DIR/memory/working.md` | 短期关注点 | {{CREATED_AT}} |
|
|
17
|
+
|
|
18
|
+
## 关系档案
|
|
19
|
+
|
|
20
|
+
| 对端 AID | 路径 | 最后交互 |
|
|
21
|
+
|----------|------|----------|
|
|
22
|
+
| — | — | — |
|
|
23
|
+
|
|
24
|
+
## 场所档案
|
|
25
|
+
|
|
26
|
+
| 场所 | 路径 | 说明 |
|
|
27
|
+
|------|------|------|
|
|
28
|
+
| — | — | — |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 路径注册表实例
|
|
2
|
+
|
|
3
|
+
本文件记录运行时解析出的实际路径值。由 evolcore 初始化时生成。
|
|
4
|
+
|
|
5
|
+
## 基础路径
|
|
6
|
+
|
|
7
|
+
| 名称 | 实际路径 |
|
|
8
|
+
|------|----------|
|
|
9
|
+
| `$EVOLCORE_HOME` | {{EVOLCORE_HOME}} |
|
|
10
|
+
| `$PACKAGE_ROOT` | {{PACKAGE_ROOT}} |
|
|
11
|
+
| `$CURRENT_PROJECT` | {{CURRENT_PROJECT}} |
|
|
12
|
+
|
|
13
|
+
## 派生路径
|
|
14
|
+
|
|
15
|
+
| 名称 | 实际路径 |
|
|
16
|
+
|------|----------|
|
|
17
|
+
| `$KITS` | {{KITS}} |
|
|
18
|
+
| `$KITS_RULES` | {{KITS_RULES}} |
|
|
19
|
+
| `$KITS_DOCS` | {{KITS_DOCS}} |
|
|
20
|
+
| `$KITS_TEMPLATES` | {{KITS_TEMPLATES}} |
|
|
21
|
+
| `$ECK` | {{ECK}} |
|
|
22
|
+
| `$AGENT_DIR` | {{AGENT_DIR}} |
|
|
23
|
+
| `$SELF_DIR` | {{SELF_DIR}} |
|
|
24
|
+
| `$RELATIONS_DIR` | {{RELATIONS_DIR}} |
|
|
25
|
+
| `$VENUES_DIR` | {{VENUES_DIR}} |
|
|
26
|
+
| `$AGENT_INDEX` | {{AGENT_INDEX}} |
|
|
27
|
+
|
|
28
|
+
## 外部依赖
|
|
29
|
+
|
|
30
|
+
| 名称 | 实际路径 | 状态 |
|
|
31
|
+
|------|----------|------|
|
|
32
|
+
| `$KITE` | {{KITE}} | {{KITE_STATUS}} |
|
|
33
|
+
| `$AUN_SDK_CORE` | {{AUN_SDK_CORE}} | {{AUN_SDK_STATUS}} |
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 运行时配置
|
|
2
|
+
|
|
3
|
+
## 基本信息
|
|
4
|
+
|
|
5
|
+
- AID: {{SELF_AID}}
|
|
6
|
+
- 名称: {{AGENT_NAME}}
|
|
7
|
+
- 创建时间: {{CREATED_AT}}
|
|
8
|
+
|
|
9
|
+
## 运行时参数
|
|
10
|
+
|
|
11
|
+
- 模型: {{MODEL_ID}}
|
|
12
|
+
- 推理强度: {{EFFORT_LEVEL}}
|
|
13
|
+
- 权限模式: {{PERMISSION_MODE}}
|
|
14
|
+
|
|
15
|
+
## 行为配置
|
|
16
|
+
|
|
17
|
+
- 自我总结: {{SELF_SUMMARY_ENABLED}}
|
|
18
|
+
- 空闲总结间隔: {{IDLE_SUMMARY_MINUTES}} 分钟
|
|
19
|
+
- 每日总结 token 预算: {{DAILY_SUMMARY_BUDGET}}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# EvolCore 命令集目录
|
|
2
|
+
|
|
3
|
+
所有 `ec` 命令集的专属索引:用途、触发词、适用场景、详细文档。
|
|
4
|
+
运行时 evolcore 会通过 `commands` fragment 按当前场景(有无 peer/group、对端角色)
|
|
5
|
+
注入一张精简能力卡,指向本目录下对应文档;需要完整用法时 Read 对应文档。
|
|
6
|
+
|
|
7
|
+
> 对外通信命令以自己的 AID 为发送者;当前渠道是否需要 CLI 回复,以运行时注入的
|
|
8
|
+
> `channel` 规则为准。参数不是全局通用的:`--format json` 仅用于对应帮助中明确支持的命令,
|
|
9
|
+
> `--app <name>` 仅用于消息 pull/ack、消费类 RPC 和明确支持 app slot 的文件操作。
|
|
10
|
+
|
|
11
|
+
## 如何使用本索引
|
|
12
|
+
|
|
13
|
+
1. **遇到触发词**(用户提到"费用/用量/创建/查群/上传文件"等)→ Ctrl+F 本文档找触发词 → 定位命令集 → Read 对应文档
|
|
14
|
+
2. **不确定有没有命令**时,直接 `ec <猜测的子命令> --help` 试一下(如 `ec stats --help`)
|
|
15
|
+
3. **已知场景需求**(如"要给对端发消息")→ 看下方分类表 → 定位到对应命令集
|
|
16
|
+
|
|
17
|
+
## 服务运维类(本地,无需 AUN)
|
|
18
|
+
|
|
19
|
+
| 命令 | 用途 | 触发词 |
|
|
20
|
+
|------|------|--------|
|
|
21
|
+
| `ec --version` / `-v` / `-V` | 查看版本号 | 版本 |
|
|
22
|
+
| `ec restart` | 重启服务(含自动升级检查) | 重启 |
|
|
23
|
+
| `ec status` | 查看运行状态、进程、会话、渠道连接 | 状态/查看状态 |
|
|
24
|
+
| `ec logs` | 查看日志(`--level` `--module` `--raw` `--no-color`) | 日志/查看日志 |
|
|
25
|
+
| `ec diagnose` | 诊断启动环境 | 诊断/环境诊断 |
|
|
26
|
+
|
|
27
|
+
## 对外通信 / 网络类(连 AUN,以 AID 为发送者)
|
|
28
|
+
|
|
29
|
+
| 命令集 | 用途 | 触发词 | 适用场景 | 文档 |
|
|
30
|
+
|--------|------|--------|----------|------|
|
|
31
|
+
| `ec msg` | 私聊收发消息 | 回复/发消息/拉取/撤回/查在线 | 有对端(peerId) | `msg.md` |
|
|
32
|
+
| `ec group` | 群聊收发与群管理 | 群发/建群/邀请/踢人/退群/群成员/角色/封禁/规则 | 群聊(groupId) | `group.md` |
|
|
33
|
+
| `ec group rules` | 群规则文件发布与上下文注入 | 群规则/工作流程/职责分工/rules.md/发布规则 | AUN 群聊(groupId) | `group-rules.md` |
|
|
34
|
+
| `ec aid` | AID 身份管理 | 身份/证书/名片/探测对端 | 任意有渠道场景 | `aid.md` |
|
|
35
|
+
| `ec fs` | AUN 文件系统统一入口 | 上传/下载/看文件/列目录/删文件/配额/群空间 | 任意有渠道场景 | `fs.md` |
|
|
36
|
+
| `ec storage` | 文件存储底层调试入口 | storage 调试/旧命令/底层上传下载 | 任意有渠道场景 | `storage.md` |
|
|
37
|
+
| `ec agent` | EvolAgent 生命周期 | 创建/启停/热重载/改配置 | 管理员(owner/admin) | `agent.md` |
|
|
38
|
+
| `ec contact` | Contact Book 与访问控制 | 拉黑/解除拉黑/查拉黑 | Agent owner/admin | `contact.md` |
|
|
39
|
+
| `ec rpc` | 底层 AUN RPC(逃生通道) | 直接调协议方法 | 高级/兜底 | `rpc.md` |
|
|
40
|
+
|
|
41
|
+
## 会话自管理类(不连 AUN,操作当前会话)
|
|
42
|
+
|
|
43
|
+
| 命令集 | 用途 | 触发词 | 文档 |
|
|
44
|
+
|--------|------|--------|------|
|
|
45
|
+
| `ec ctl` | 当前会话工具 | 主动发消息/文件、重命名、队列、项目路径、会话状态 | `ctl.md` |
|
|
46
|
+
|
|
47
|
+
## 本地工具类(不连 AUN,操作本地配置)
|
|
48
|
+
|
|
49
|
+
| 命令集 | 用途 | 触发词 | 文档 |
|
|
50
|
+
|--------|------|--------|------|
|
|
51
|
+
| `ec model` | 模型与推理强度管理(按作用域持久化) | 切模型/列模型/当前模型/模型详情/改强度/诊断网关 | `model.md` |
|
|
52
|
+
| `ec response` | 响应模式管理(按作用域持久化) | 切换响应模式/列响应模式/看当前模式/改响应配置 | `response.md` |
|
|
53
|
+
| `ec config` | 配置体系底层入口(读写/快照/回滚) | 看配置/改配置/查字段/查schema/校验/快照/回滚/历史/启动记录 | `config.md` |
|
|
54
|
+
| `ec stats` | Token 用量与费用统计 | 用量/费用/统计/预算/token/cost | `stats.md` |
|
|
55
|
+
| `ec trigger` | 定时与事件触发器管理(创建用 `create`,`set` 为兼容别名) | 触发器/定时任务/cron/提醒/定时检查/自动执行/巡检/禁用 trigger/删除 trigger | `trigger.md` |
|
|
56
|
+
| `ec trigger event` | EventBus 事件目录 | 事件触发/事件目录/EventBus/source.type=event/filter.match | `event.md` |
|
|
57
|
+
|
|
58
|
+
## 开发者工具(非 agent 会话能力)
|
|
59
|
+
|
|
60
|
+
| 命令 | 用途 | 说明 |
|
|
61
|
+
|------|------|------|
|
|
62
|
+
| `ec bench` | AUN 消息系统性能基准测试 | CLI 工具,agent 一般不主动调用;`ec bench --help` 查看用法 |
|
|
63
|
+
|
|
64
|
+
## 其他
|
|
65
|
+
|
|
66
|
+
| 文档 | 说明 |
|
|
67
|
+
|------|------|
|
|
68
|
+
| `self-summary.md` | 自我总结流程指南 |
|