evolcore 0.0.5 → 0.0.7

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 (323) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +4 -12
  3. package/dist/agents/baseagent.js +39 -0
  4. package/dist/agents/claude-runner.js +10 -2
  5. package/dist/agents/codex-runner.js +37 -8
  6. package/dist/agents/ecagent-runner.js +1159 -0
  7. package/dist/agents/gemini-runner.js +4 -1
  8. package/dist/agents/runner-types.js +20 -4
  9. package/dist/aun/msg/history.js +32 -9
  10. package/dist/aun/outbox.js +4 -9
  11. package/dist/channels/aun.js +32 -6
  12. package/dist/channels/daemon.js +7 -4
  13. package/dist/channels/dingtalk.js +3 -5
  14. package/dist/channels/feishu.js +16 -108
  15. package/dist/channels/wechat.js +4 -4
  16. package/dist/channels/wecom.js +4 -6
  17. package/dist/cli/agent-command.js +1 -1
  18. package/dist/cli/agent.js +42 -11
  19. package/dist/cli/aun-commands.js +50 -3
  20. package/dist/cli/daemon-commands.js +88 -8
  21. package/dist/cli/data-command.js +132 -0
  22. package/dist/cli/index.js +11 -3
  23. package/dist/cli/init.js +76 -17
  24. package/dist/cli/net-check.js +9 -20
  25. package/dist/cli/restart-monitor.js +25 -2
  26. package/dist/cli/trigger-command.js +1 -1
  27. package/dist/cli/watch-msg.js +12 -25
  28. package/dist/config/builtin-roles.js +3 -1
  29. package/dist/config/config-field-policy.js +1 -1
  30. package/dist/config/gateway-config.js +21 -4
  31. package/dist/config/resolved-config-op.js +10 -0
  32. package/dist/core/command/command-handler.js +2 -2
  33. package/dist/core/command/menu-handler.js +11 -9
  34. package/dist/core/command/role-menu.js +11 -0
  35. package/dist/core/command/slash-handler.js +18 -14
  36. package/dist/core/data-migration.js +1434 -0
  37. package/dist/core/handoff/store.js +14 -4
  38. package/dist/core/inference/text-inference.js +42 -1
  39. package/dist/core/message/pending-hints.js +1 -1
  40. package/dist/core/message/response-engine.js +406 -167
  41. package/dist/core/message/retry-scheduler.js +71 -0
  42. package/dist/core/model/model-catalog.js +7 -2
  43. package/dist/core/model/model-fallback.js +81 -0
  44. package/dist/core/protected-paths.js +41 -8
  45. package/dist/core/session/adapters/ecagent-session-file-adapter.js +112 -0
  46. package/dist/core/session/session-fs-store.js +283 -59
  47. package/dist/core/session/session-manager.js +19 -21
  48. package/dist/core/session/session-title.js +1 -0
  49. package/dist/core/session/session-turn-coordinator.js +8 -1
  50. package/dist/core/system-channels.js +1 -0
  51. package/dist/index.js +13 -10
  52. package/dist/paths.js +35 -27
  53. package/dist/trigger/feedback.js +16 -0
  54. package/dist/trigger/legacy-session-history.js +19 -0
  55. package/dist/trigger/manager.js +12 -1
  56. package/dist/trigger/parser.js +4 -2
  57. package/dist/trigger/scheduler.js +185 -15
  58. package/dist/trigger/session-lock.js +62 -0
  59. package/dist/trigger/state.js +64 -0
  60. package/dist/trigger/validation.js +32 -2
  61. package/dist/utils/aid-bind.js +1 -1
  62. package/dist/utils/error-utils.js +9 -0
  63. package/dist/utils/instance-registry.js +2 -2
  64. package/dist/utils/welcome.js +2 -3
  65. package/ecagent/LICENSE +21 -0
  66. package/ecagent/NOTICE +11 -0
  67. package/ecagent/README.md +61 -0
  68. package/ecagent/dist/agent-loop.d.ts +24 -0
  69. package/ecagent/dist/agent-loop.d.ts.map +1 -0
  70. package/ecagent/dist/agent-loop.js +547 -0
  71. package/ecagent/dist/agent-loop.js.map +1 -0
  72. package/ecagent/dist/agent.d.ts +127 -0
  73. package/ecagent/dist/agent.d.ts.map +1 -0
  74. package/ecagent/dist/agent.js +386 -0
  75. package/ecagent/dist/agent.js.map +1 -0
  76. package/ecagent/dist/harness/agent-harness.d.ts +95 -0
  77. package/ecagent/dist/harness/agent-harness.d.ts.map +1 -0
  78. package/ecagent/dist/harness/agent-harness.js +926 -0
  79. package/ecagent/dist/harness/agent-harness.js.map +1 -0
  80. package/ecagent/dist/harness/compaction/branch-summarization.d.ts +51 -0
  81. package/ecagent/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  82. package/ecagent/dist/harness/compaction/branch-summarization.js +174 -0
  83. package/ecagent/dist/harness/compaction/branch-summarization.js.map +1 -0
  84. package/ecagent/dist/harness/compaction/compaction.d.ts +95 -0
  85. package/ecagent/dist/harness/compaction/compaction.d.ts.map +1 -0
  86. package/ecagent/dist/harness/compaction/compaction.js +528 -0
  87. package/ecagent/dist/harness/compaction/compaction.js.map +1 -0
  88. package/ecagent/dist/harness/compaction/utils.d.ts +25 -0
  89. package/ecagent/dist/harness/compaction/utils.d.ts.map +1 -0
  90. package/ecagent/dist/harness/compaction/utils.js +131 -0
  91. package/ecagent/dist/harness/compaction/utils.js.map +1 -0
  92. package/ecagent/dist/harness/env/nodejs.d.ts +51 -0
  93. package/ecagent/dist/harness/env/nodejs.d.ts.map +1 -0
  94. package/ecagent/dist/harness/env/nodejs.js +513 -0
  95. package/ecagent/dist/harness/env/nodejs.js.map +1 -0
  96. package/ecagent/dist/harness/messages.d.ts +51 -0
  97. package/ecagent/dist/harness/messages.d.ts.map +1 -0
  98. package/ecagent/dist/harness/messages.js +102 -0
  99. package/ecagent/dist/harness/messages.js.map +1 -0
  100. package/ecagent/dist/harness/prompt-templates.d.ts +48 -0
  101. package/ecagent/dist/harness/prompt-templates.d.ts.map +1 -0
  102. package/ecagent/dist/harness/prompt-templates.js +230 -0
  103. package/ecagent/dist/harness/prompt-templates.js.map +1 -0
  104. package/ecagent/dist/harness/session/jsonl-repo.d.ts +26 -0
  105. package/ecagent/dist/harness/session/jsonl-repo.d.ts.map +1 -0
  106. package/ecagent/dist/harness/session/jsonl-repo.js +100 -0
  107. package/ecagent/dist/harness/session/jsonl-repo.js.map +1 -0
  108. package/ecagent/dist/harness/session/jsonl-storage.d.ts +34 -0
  109. package/ecagent/dist/harness/session/jsonl-storage.d.ts.map +1 -0
  110. package/ecagent/dist/harness/session/jsonl-storage.js +234 -0
  111. package/ecagent/dist/harness/session/jsonl-storage.js.map +1 -0
  112. package/ecagent/dist/harness/session/memory-repo.d.ts +18 -0
  113. package/ecagent/dist/harness/session/memory-repo.d.ts.map +1 -0
  114. package/ecagent/dist/harness/session/memory-repo.js +44 -0
  115. package/ecagent/dist/harness/session/memory-repo.js.map +1 -0
  116. package/ecagent/dist/harness/session/memory-storage.d.ts +25 -0
  117. package/ecagent/dist/harness/session/memory-storage.d.ts.map +1 -0
  118. package/ecagent/dist/harness/session/memory-storage.js +111 -0
  119. package/ecagent/dist/harness/session/memory-storage.js.map +1 -0
  120. package/ecagent/dist/harness/session/repo-utils.d.ts +11 -0
  121. package/ecagent/dist/harness/session/repo-utils.d.ts.map +1 -0
  122. package/ecagent/dist/harness/session/repo-utils.js +39 -0
  123. package/ecagent/dist/harness/session/repo-utils.js.map +1 -0
  124. package/ecagent/dist/harness/session/session.d.ts +47 -0
  125. package/ecagent/dist/harness/session/session.d.ts.map +1 -0
  126. package/ecagent/dist/harness/session/session.js +245 -0
  127. package/ecagent/dist/harness/session/session.js.map +1 -0
  128. package/ecagent/dist/harness/session/uuid.d.ts +2 -0
  129. package/ecagent/dist/harness/session/uuid.d.ts.map +1 -0
  130. package/ecagent/dist/harness/session/uuid.js +50 -0
  131. package/ecagent/dist/harness/session/uuid.js.map +1 -0
  132. package/ecagent/dist/harness/skills.d.ts +44 -0
  133. package/ecagent/dist/harness/skills.d.ts.map +1 -0
  134. package/ecagent/dist/harness/skills.js +311 -0
  135. package/ecagent/dist/harness/skills.js.map +1 -0
  136. package/ecagent/dist/harness/system-prompt.d.ts +3 -0
  137. package/ecagent/dist/harness/system-prompt.d.ts.map +1 -0
  138. package/ecagent/dist/harness/system-prompt.js +30 -0
  139. package/ecagent/dist/harness/system-prompt.js.map +1 -0
  140. package/ecagent/dist/harness/types.d.ts +619 -0
  141. package/ecagent/dist/harness/types.d.ts.map +1 -0
  142. package/ecagent/dist/harness/types.js +81 -0
  143. package/ecagent/dist/harness/types.js.map +1 -0
  144. package/ecagent/dist/harness/utils/shell-output.d.ts +14 -0
  145. package/ecagent/dist/harness/utils/shell-output.d.ts.map +1 -0
  146. package/ecagent/dist/harness/utils/shell-output.js +126 -0
  147. package/ecagent/dist/harness/utils/shell-output.js.map +1 -0
  148. package/ecagent/dist/harness/utils/truncate.d.ts +70 -0
  149. package/ecagent/dist/harness/utils/truncate.d.ts.map +1 -0
  150. package/ecagent/dist/harness/utils/truncate.js +290 -0
  151. package/ecagent/dist/harness/utils/truncate.js.map +1 -0
  152. package/ecagent/dist/index.d.ts +22 -0
  153. package/ecagent/dist/index.d.ts.map +1 -0
  154. package/ecagent/dist/index.js +27 -0
  155. package/ecagent/dist/index.js.map +1 -0
  156. package/ecagent/dist/node.d.ts +3 -0
  157. package/ecagent/dist/node.d.ts.map +1 -0
  158. package/ecagent/dist/node.js +3 -0
  159. package/ecagent/dist/node.js.map +1 -0
  160. package/ecagent/dist/proxy.d.ts +69 -0
  161. package/ecagent/dist/proxy.d.ts.map +1 -0
  162. package/ecagent/dist/proxy.js +278 -0
  163. package/ecagent/dist/proxy.js.map +1 -0
  164. package/ecagent/dist/runtime/api/lazy.d.ts +15 -0
  165. package/ecagent/dist/runtime/api/lazy.d.ts.map +1 -0
  166. package/ecagent/dist/runtime/api/lazy.js +59 -0
  167. package/ecagent/dist/runtime/api/lazy.js.map +1 -0
  168. package/ecagent/dist/runtime/api/pi-messages.d.ts +97 -0
  169. package/ecagent/dist/runtime/api/pi-messages.d.ts.map +1 -0
  170. package/ecagent/dist/runtime/api/pi-messages.js +307 -0
  171. package/ecagent/dist/runtime/api/pi-messages.js.map +1 -0
  172. package/ecagent/dist/runtime/api/pi-messages.lazy.d.ts +3 -0
  173. package/ecagent/dist/runtime/api/pi-messages.lazy.d.ts.map +1 -0
  174. package/ecagent/dist/runtime/api/pi-messages.lazy.js +3 -0
  175. package/ecagent/dist/runtime/api/pi-messages.lazy.js.map +1 -0
  176. package/ecagent/dist/runtime/auth/context.d.ts +7 -0
  177. package/ecagent/dist/runtime/auth/context.d.ts.map +1 -0
  178. package/ecagent/dist/runtime/auth/context.js +42 -0
  179. package/ecagent/dist/runtime/auth/context.js.map +1 -0
  180. package/ecagent/dist/runtime/auth/credential-store.d.ts +16 -0
  181. package/ecagent/dist/runtime/auth/credential-store.d.ts.map +1 -0
  182. package/ecagent/dist/runtime/auth/credential-store.js +39 -0
  183. package/ecagent/dist/runtime/auth/credential-store.js.map +1 -0
  184. package/ecagent/dist/runtime/auth/helpers.d.ts +20 -0
  185. package/ecagent/dist/runtime/auth/helpers.d.ts.map +1 -0
  186. package/ecagent/dist/runtime/auth/helpers.js +46 -0
  187. package/ecagent/dist/runtime/auth/helpers.js.map +1 -0
  188. package/ecagent/dist/runtime/auth/resolve.d.ts +26 -0
  189. package/ecagent/dist/runtime/auth/resolve.d.ts.map +1 -0
  190. package/ecagent/dist/runtime/auth/resolve.js +100 -0
  191. package/ecagent/dist/runtime/auth/resolve.js.map +1 -0
  192. package/ecagent/dist/runtime/auth/types.d.ts +180 -0
  193. package/ecagent/dist/runtime/auth/types.d.ts.map +1 -0
  194. package/ecagent/dist/runtime/auth/types.js +2 -0
  195. package/ecagent/dist/runtime/auth/types.js.map +1 -0
  196. package/ecagent/dist/runtime/compat.d.ts +28 -0
  197. package/ecagent/dist/runtime/compat.d.ts.map +1 -0
  198. package/ecagent/dist/runtime/compat.js +86 -0
  199. package/ecagent/dist/runtime/compat.js.map +1 -0
  200. package/ecagent/dist/runtime/index.d.ts +20 -0
  201. package/ecagent/dist/runtime/index.d.ts.map +1 -0
  202. package/ecagent/dist/runtime/index.js +17 -0
  203. package/ecagent/dist/runtime/index.js.map +1 -0
  204. package/ecagent/dist/runtime/models.d.ts +142 -0
  205. package/ecagent/dist/runtime/models.d.ts.map +1 -0
  206. package/ecagent/dist/runtime/models.js +245 -0
  207. package/ecagent/dist/runtime/models.js.map +1 -0
  208. package/ecagent/dist/runtime/oauth.d.ts +2 -0
  209. package/ecagent/dist/runtime/oauth.d.ts.map +1 -0
  210. package/ecagent/dist/runtime/oauth.js +2 -0
  211. package/ecagent/dist/runtime/oauth.js.map +1 -0
  212. package/ecagent/dist/runtime/providers/faux.d.ts +97 -0
  213. package/ecagent/dist/runtime/providers/faux.d.ts.map +1 -0
  214. package/ecagent/dist/runtime/providers/faux.js +395 -0
  215. package/ecagent/dist/runtime/providers/faux.js.map +1 -0
  216. package/ecagent/dist/runtime/types.d.ts +607 -0
  217. package/ecagent/dist/runtime/types.d.ts.map +1 -0
  218. package/ecagent/dist/runtime/types.js +2 -0
  219. package/ecagent/dist/runtime/types.js.map +1 -0
  220. package/ecagent/dist/runtime/utils/diagnostics.d.ts +19 -0
  221. package/ecagent/dist/runtime/utils/diagnostics.d.ts.map +1 -0
  222. package/ecagent/dist/runtime/utils/diagnostics.js +25 -0
  223. package/ecagent/dist/runtime/utils/diagnostics.js.map +1 -0
  224. package/ecagent/dist/runtime/utils/event-stream.d.ts +21 -0
  225. package/ecagent/dist/runtime/utils/event-stream.d.ts.map +1 -0
  226. package/ecagent/dist/runtime/utils/event-stream.js +77 -0
  227. package/ecagent/dist/runtime/utils/event-stream.js.map +1 -0
  228. package/ecagent/dist/runtime/utils/headers.d.ts +4 -0
  229. package/ecagent/dist/runtime/utils/headers.d.ts.map +1 -0
  230. package/ecagent/dist/runtime/utils/headers.js +18 -0
  231. package/ecagent/dist/runtime/utils/headers.js.map +1 -0
  232. package/ecagent/dist/runtime/utils/json-parse.d.ts +16 -0
  233. package/ecagent/dist/runtime/utils/json-parse.d.ts.map +1 -0
  234. package/ecagent/dist/runtime/utils/json-parse.js +113 -0
  235. package/ecagent/dist/runtime/utils/json-parse.js.map +1 -0
  236. package/ecagent/dist/runtime/utils/oauth/types.d.ts +64 -0
  237. package/ecagent/dist/runtime/utils/oauth/types.d.ts.map +1 -0
  238. package/ecagent/dist/runtime/utils/oauth/types.js +2 -0
  239. package/ecagent/dist/runtime/utils/oauth/types.js.map +1 -0
  240. package/ecagent/dist/runtime/utils/overflow.d.ts +58 -0
  241. package/ecagent/dist/runtime/utils/overflow.d.ts.map +1 -0
  242. package/ecagent/dist/runtime/utils/overflow.js +158 -0
  243. package/ecagent/dist/runtime/utils/overflow.js.map +1 -0
  244. package/ecagent/dist/runtime/utils/provider-env.d.ts +7 -0
  245. package/ecagent/dist/runtime/utils/provider-env.d.ts.map +1 -0
  246. package/ecagent/dist/runtime/utils/provider-env.js +44 -0
  247. package/ecagent/dist/runtime/utils/provider-env.js.map +1 -0
  248. package/ecagent/dist/runtime/utils/retry.d.ts +12 -0
  249. package/ecagent/dist/runtime/utils/retry.d.ts.map +1 -0
  250. package/ecagent/dist/runtime/utils/retry.js +90 -0
  251. package/ecagent/dist/runtime/utils/retry.js.map +1 -0
  252. package/ecagent/dist/runtime/utils/typebox-helpers.d.ts +17 -0
  253. package/ecagent/dist/runtime/utils/typebox-helpers.d.ts.map +1 -0
  254. package/ecagent/dist/runtime/utils/typebox-helpers.js +21 -0
  255. package/ecagent/dist/runtime/utils/typebox-helpers.js.map +1 -0
  256. package/ecagent/dist/runtime/utils/validation.d.ts +18 -0
  257. package/ecagent/dist/runtime/utils/validation.d.ts.map +1 -0
  258. package/ecagent/dist/runtime/utils/validation.js +269 -0
  259. package/ecagent/dist/runtime/utils/validation.js.map +1 -0
  260. package/ecagent/dist/types.d.ts +401 -0
  261. package/ecagent/dist/types.d.ts.map +1 -0
  262. package/ecagent/dist/types.js +2 -0
  263. package/ecagent/dist/types.js.map +1 -0
  264. package/ecagent/package.json +93 -0
  265. package/ecagent/src/agent-loop.ts +792 -0
  266. package/ecagent/src/agent.ts +575 -0
  267. package/ecagent/src/harness/agent-harness.ts +1029 -0
  268. package/ecagent/src/harness/compaction/branch-summarization.ts +261 -0
  269. package/ecagent/src/harness/compaction/compaction.ts +753 -0
  270. package/ecagent/src/harness/compaction/utils.ts +144 -0
  271. package/ecagent/src/harness/env/nodejs.ts +569 -0
  272. package/ecagent/src/harness/messages.ts +164 -0
  273. package/ecagent/src/harness/prompt-templates.ts +267 -0
  274. package/ecagent/src/harness/session/jsonl-repo.ts +179 -0
  275. package/ecagent/src/harness/session/jsonl-storage.ts +314 -0
  276. package/ecagent/src/harness/session/memory-repo.ts +50 -0
  277. package/ecagent/src/harness/session/memory-storage.ts +133 -0
  278. package/ecagent/src/harness/session/repo-utils.ts +51 -0
  279. package/ecagent/src/harness/session/session.ts +338 -0
  280. package/ecagent/src/harness/session/uuid.ts +54 -0
  281. package/ecagent/src/harness/skills.ts +375 -0
  282. package/ecagent/src/harness/system-prompt.ts +34 -0
  283. package/ecagent/src/harness/types.ts +838 -0
  284. package/ecagent/src/harness/utils/shell-output.ts +135 -0
  285. package/ecagent/src/harness/utils/truncate.ts +344 -0
  286. package/ecagent/src/index.ts +46 -0
  287. package/ecagent/src/node.ts +2 -0
  288. package/ecagent/src/proxy.ts +367 -0
  289. package/ecagent/src/runtime/api/lazy.ts +70 -0
  290. package/ecagent/src/runtime/api/pi-messages.lazy.ts +4 -0
  291. package/ecagent/src/runtime/api/pi-messages.ts +436 -0
  292. package/ecagent/src/runtime/auth/context.ts +45 -0
  293. package/ecagent/src/runtime/auth/credential-store.ts +47 -0
  294. package/ecagent/src/runtime/auth/helpers.ts +46 -0
  295. package/ecagent/src/runtime/auth/resolve.ts +141 -0
  296. package/ecagent/src/runtime/auth/types.ts +182 -0
  297. package/ecagent/src/runtime/compat.ts +158 -0
  298. package/ecagent/src/runtime/index.ts +31 -0
  299. package/ecagent/src/runtime/models.ts +452 -0
  300. package/ecagent/src/runtime/oauth.ts +1 -0
  301. package/ecagent/src/runtime/providers/faux.ts +538 -0
  302. package/ecagent/src/runtime/types.ts +718 -0
  303. package/ecagent/src/runtime/utils/diagnostics.ts +45 -0
  304. package/ecagent/src/runtime/utils/event-stream.ts +88 -0
  305. package/ecagent/src/runtime/utils/headers.ts +18 -0
  306. package/ecagent/src/runtime/utils/json-parse.ts +124 -0
  307. package/ecagent/src/runtime/utils/oauth/types.ts +79 -0
  308. package/ecagent/src/runtime/utils/overflow.ts +165 -0
  309. package/ecagent/src/runtime/utils/provider-env.ts +52 -0
  310. package/ecagent/src/runtime/utils/retry.ts +101 -0
  311. package/ecagent/src/runtime/utils/typebox-helpers.ts +24 -0
  312. package/ecagent/src/runtime/utils/validation.ts +310 -0
  313. package/ecagent/src/types.ts +430 -0
  314. package/ecagent/tsconfig.build.json +32 -0
  315. package/kits/schemas/_meta.json +7 -4
  316. package/kits/schemas/agent-config.schema.10.json +370 -0
  317. package/kits/schemas/defaults.schema.4.json +93 -0
  318. package/kits/schemas/relation-config.schema.8.json +69 -0
  319. package/kits/templates/roles/admin.json +1 -1
  320. package/package.json +22 -6
  321. package/skills/eclink/SKILL.md +70 -0
  322. package/skills/eclink/agents/openai.yaml +4 -0
  323. package/assets/.env.template +0 -4
@@ -0,0 +1,370 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "agent-config.schema.10.json",
4
+ "title": "AgentConfig v10 (agents/{aid}/config.json)",
5
+ "description": "Agent v10 主配置。备用模型链只允许在 defaults.json 定义。",
6
+ "x-logical-name": "agent-config",
7
+ "x-scope": "agent",
8
+ "type": "object",
9
+ "additionalProperties": true,
10
+ "not": {
11
+ "description": "禁止旧权限字段和已迁移到 relation role 的 admins。",
12
+ "anyOf": [
13
+ {
14
+ "description": "禁止旧版顶层 permissionMode;权限模式由独立角色策略决定。",
15
+ "required": [
16
+ "permissionMode"
17
+ ]
18
+ },
19
+ {
20
+ "description": "禁止旧版内嵌 roles;角色定义和默认角色已迁移到独立 roles/ 配置域。",
21
+ "required": [
22
+ "roles"
23
+ ]
24
+ },
25
+ {
26
+ "description": "admin 关系身份由 AUN 私聊 relation role 管理。",
27
+ "required": [
28
+ "admins"
29
+ ]
30
+ },
31
+ {
32
+ "description": "debug 是 daemon 进程级配置,不进入 Agent 覆盖链。",
33
+ "required": [
34
+ "debug"
35
+ ]
36
+ }
37
+ ]
38
+ },
39
+ "required": [
40
+ "aid",
41
+ "channels"
42
+ ],
43
+ "properties": {
44
+ "$schema_version": {
45
+ "type": "number",
46
+ "const": 10,
47
+ "default": 10,
48
+ "x-merge": "scalar",
49
+ "description": "配置 Schema 版本;v10 禁止 Agent 级 fallbackModels"
50
+ },
51
+ "aid": {
52
+ "type": "string",
53
+ "x-merge": "scalar",
54
+ "description": "Agent 的全局唯一身份标识"
55
+ },
56
+ "enabled": {
57
+ "type": "boolean",
58
+ "default": true,
59
+ "x-merge": "scalar",
60
+ "description": "是否启用 Agent;缺省按启用处理"
61
+ },
62
+ "lifecycle": {
63
+ "type": "string",
64
+ "enum": [
65
+ "created",
66
+ "bootstrapping",
67
+ "active"
68
+ ],
69
+ "x-merge": "scalar",
70
+ "description": "agent 生命周期状态",
71
+ "x-enumDescriptions": {
72
+ "created": "已创建,尚未进入引导流程",
73
+ "bootstrapping": "引导中(初始化配置/身份)",
74
+ "active": "已激活,正常运行"
75
+ }
76
+ },
77
+ "initialized": {
78
+ "type": "boolean",
79
+ "x-merge": "scalar",
80
+ "description": "是否已完成 Agent 初始化流程"
81
+ },
82
+ "owners": {
83
+ "type": "array",
84
+ "items": {
85
+ "type": "string",
86
+ "description": "一个 Agent owner 的身份标识,通常为 AID。"
87
+ },
88
+ "uniqueItems": true,
89
+ "x-merge": "list",
90
+ "description": "Agent 所有者身份列表;用于 owner 级控制和通知"
91
+ },
92
+ "access": {
93
+ "type": "object",
94
+ "x-merge": "dict",
95
+ "additionalProperties": false,
96
+ "required": [
97
+ "policyMode",
98
+ "requestLimit"
99
+ ],
100
+ "properties": {
101
+ "policyMode": {
102
+ "type": "string",
103
+ "enum": [
104
+ "open",
105
+ "contacts",
106
+ "owners"
107
+ ],
108
+ "description": "私聊和群聊准入策略:开放、仅联系人或仅 Owner。"
109
+ },
110
+ "requestLimit": {
111
+ "type": "object",
112
+ "additionalProperties": false,
113
+ "required": [
114
+ "maxTimes",
115
+ "coolDown"
116
+ ],
117
+ "properties": {
118
+ "maxTimes": {
119
+ "type": "integer",
120
+ "minimum": 1,
121
+ "maximum": 100000,
122
+ "description": "每个 Agent、每个渠道实例在窗口内最多发送的准入控制消息数。"
123
+ },
124
+ "coolDown": {
125
+ "type": "integer",
126
+ "minimum": 1,
127
+ "maximum": 86400,
128
+ "description": "准入控制消息限额的冷却窗口,单位秒。"
129
+ }
130
+ }
131
+ }
132
+ },
133
+ "description": "Agent 自身的消息准入策略;不参与 defaults 或 relation 覆盖链。"
134
+ },
135
+ "channels": {
136
+ "type": "array",
137
+ "items": {
138
+ "type": "object",
139
+ "description": "一个渠道实例配置;具体字段由渠道类型及其适配器定义。"
140
+ },
141
+ "x-merge": "list",
142
+ "description": "Agent 绑定的消息渠道实例列表"
143
+ },
144
+ "aun": {
145
+ "type": "object",
146
+ "x-merge": "dict",
147
+ "description": "Agent 级 AUN 通信配置"
148
+ },
149
+ "models": {
150
+ "type": "object",
151
+ "x-merge": "dict",
152
+ "description": "Agent 级模型别名、注册表或模型覆盖配置"
153
+ },
154
+ "active_baseagent": {
155
+ "type": "string",
156
+ "x-merge": "scalar",
157
+ "description": "默认使用的 base agent 标识,例如 claude 或 codex"
158
+ },
159
+ "baseagents": {
160
+ "type": "object",
161
+ "x-merge": "dict",
162
+ "description": "各 base agent 的模型、推理强度及运行参数;备用模型链只能在 defaults.json 配置。",
163
+ "additionalProperties": {
164
+ "not": {
165
+ "type": "object",
166
+ "required": ["fallbackModels"]
167
+ }
168
+ }
169
+ },
170
+ "projects": {
171
+ "type": "object",
172
+ "x-merge": "dict",
173
+ "description": "Agent 可用项目路径和项目选择配置"
174
+ },
175
+ "capabilities": {
176
+ "type": "object",
177
+ "x-merge": "dict",
178
+ "description": "Agent 能力开关及能力参数"
179
+ },
180
+ "observable": {
181
+ "type": "boolean",
182
+ "default": false,
183
+ "x-merge": "scalar",
184
+ "description": "是否将 Agent 的入站和出站消息转发给 owners;默认关闭"
185
+ },
186
+ "chatmode": {
187
+ "type": "object",
188
+ "x-merge": "dict",
189
+ "default": {
190
+ "private": "interactive",
191
+ "group": "proactive",
192
+ "nothuman": "proactive"
193
+ },
194
+ "properties": {
195
+ "private": {
196
+ "enum": [
197
+ "interactive",
198
+ "proactive"
199
+ ],
200
+ "description": "人类私聊场景的投递方式",
201
+ "x-enumDescriptions": {
202
+ "interactive": "同步交互:输出即回复",
203
+ "proactive": "主动推送:CLI 回复 + 思考投影"
204
+ }
205
+ },
206
+ "group": {
207
+ "enum": [
208
+ "interactive",
209
+ "proactive"
210
+ ],
211
+ "description": "群聊场景的投递方式",
212
+ "x-enumDescriptions": {
213
+ "interactive": "同步交互:输出即回复",
214
+ "proactive": "主动推送:CLI 回复 + 思考投影"
215
+ }
216
+ },
217
+ "nothuman": {
218
+ "enum": [
219
+ "interactive",
220
+ "proactive"
221
+ ],
222
+ "description": "非人类(agent)私聊场景的投递方式",
223
+ "x-enumDescriptions": {
224
+ "interactive": "同步交互:输出即回复",
225
+ "proactive": "主动推送:CLI 回复 + 思考投影"
226
+ }
227
+ }
228
+ },
229
+ "additionalProperties": false,
230
+ "description": "chatmode 场景默认表;出厂默认值即此 default(agent 级改默认,关系级按键覆盖)。键封闭 private/group/nothuman,值枚举 interactive/proactive"
231
+ },
232
+ "mentionMode": {
233
+ "type": "string",
234
+ "enum": [
235
+ "disabled",
236
+ "mention-only"
237
+ ],
238
+ "default": "disabled",
239
+ "x-merge": "scalar",
240
+ "description": "@ 处理策略(顶层通用参数)",
241
+ "x-enumDescriptions": {
242
+ "disabled": "处理所有消息",
243
+ "mention-only": "只处理被 @ 的消息,未 @ 作引用上下文"
244
+ }
245
+ },
246
+ "model": {
247
+ "type": "string",
248
+ "x-merge": "scalar",
249
+ "description": "主会话模型(顶层通用参数);无默认值,缺省时由响应模式/全局默认决定"
250
+ },
251
+ "responseMode": {
252
+ "type": "string",
253
+ "x-merge": "scalar",
254
+ "description": "响应模式 id(标量);候选清单/默认值来自注册表,非 schema。关系级>agent级>注册表首选"
255
+ },
256
+ "responseModeParams": {
257
+ "type": "object",
258
+ "x-merge": "dict",
259
+ "description": "响应模式特有参数字典,按模式 id 分桶:{ [modeId]: {...} }"
260
+ },
261
+ "flush_delay": {
262
+ "type": "number",
263
+ "minimum": 0,
264
+ "default": 3,
265
+ "x-merge": "scalar",
266
+ "description": "流式出站消息的批量刷新间隔,单位为秒;默认 3 秒"
267
+ },
268
+ "debounce": {
269
+ "type": "number",
270
+ "minimum": 0,
271
+ "default": 0,
272
+ "x-merge": "scalar",
273
+ "description": "入站消息合并窗口,单位为秒;0 表示不合并,默认 0"
274
+ },
275
+ "show_activities": {
276
+ "type": "string",
277
+ "enum": [
278
+ "all",
279
+ "text",
280
+ "none"
281
+ ],
282
+ "default": "all",
283
+ "x-merge": "scalar",
284
+ "description": "中间输出展示范围(仅对 interactive 私聊有意义)",
285
+ "x-enumDescriptions": {
286
+ "all": "文本 + activity",
287
+ "text": "仅文本",
288
+ "none": "全部静默"
289
+ }
290
+ },
291
+ "session_renew": {
292
+ "type": "object",
293
+ "x-merge": "dict",
294
+ "additionalProperties": false,
295
+ "description": "会话超时后的续接判定",
296
+ "properties": {
297
+ "enabled": {
298
+ "type": "boolean",
299
+ "default": false,
300
+ "description": "是否启用超时后的会话连续性判定"
301
+ },
302
+ "after_hours": {
303
+ "type": "number",
304
+ "exclusiveMinimum": 0,
305
+ "default": 24,
306
+ "description": "距最后一条有效对话超过该小时数才触发判定"
307
+ },
308
+ "fallback_action": {
309
+ "type": "string",
310
+ "enum": [
311
+ "continue",
312
+ "new"
313
+ ],
314
+ "default": "continue",
315
+ "description": "无法判定时的兜底动作",
316
+ "x-enumDescriptions": {
317
+ "continue": "继续沿用当前会话",
318
+ "new": "开启新会话"
319
+ }
320
+ }
321
+ }
322
+ },
323
+ "group_venue_sync": {
324
+ "type": "object",
325
+ "x-merge": "dict",
326
+ "description": "AUN 群资源同步配置;控制规则文件路径、资源索引路径、条目/字节限制及刷新间隔。"
327
+ },
328
+ "groupRules": {
329
+ "type": "object",
330
+ "x-merge": "dict",
331
+ "additionalProperties": false,
332
+ "properties": {
333
+ "mode": {
334
+ "type": "string",
335
+ "enum": [
336
+ "load",
337
+ "ignore"
338
+ ],
339
+ "default": "load",
340
+ "description": "是否读取并注入 AUN 群已发布的 /rules.md;默认 load。"
341
+ }
342
+ },
343
+ "description": "本 Agent 对 AUN 群规则的本地加载策略。"
344
+ },
345
+ "render": {
346
+ "type": "object",
347
+ "x-merge": "dict",
348
+ "description": "私聊、群聊及注入内容使用的渲染器标识配置。"
349
+ },
350
+ "sessionManifests": {
351
+ "type": "object",
352
+ "x-merge": "dict",
353
+ "description": "会话类型到 manifest 文件的映射,用于选择对应的系统提示词清单。"
354
+ },
355
+ "enable_rich_content": {
356
+ "type": "boolean",
357
+ "x-merge": "scalar",
358
+ "description": "是否允许渠道使用富内容消息;未设置时由渠道能力和运行时默认决定"
359
+ },
360
+ "extra_backup": {
361
+ "type": "array",
362
+ "items": {
363
+ "type": "object",
364
+ "description": "一个额外备份规则,包含相对 path 和可选的文件匹配 pattern。"
365
+ },
366
+ "x-merge": "list",
367
+ "description": "配置快照需要额外包含的文件声明;不得指向 .env。"
368
+ }
369
+ }
370
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "defaults.schema.4.json",
4
+ "title": "DefaultsConfig v4 (agents/defaults.json)",
5
+ "description": "全局默认配置。覆盖链最低层;模型降级候选链仅允许定义在本文件。",
6
+ "x-logical-name": "defaults",
7
+ "x-scope": "defaults",
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "$schema_version": { "type": "number", "const": 4, "default": 4, "x-merge": "scalar" },
12
+ "models": {
13
+ "type": "object",
14
+ "description": "模型配置",
15
+ "x-merge": "dict",
16
+ "properties": {
17
+ "default": { "type": "string", "description": "全局默认模型" },
18
+ "allowed": {
19
+ "type": "array",
20
+ "items": { "type": "string" },
21
+ "description": "全局模型白名单"
22
+ }
23
+ }
24
+ },
25
+ "active_baseagent": {
26
+ "type": "string",
27
+ "description": "当前活跃的 base agent(claude/codex/gemini)。暂存于此,待权限体系实现后迁移。",
28
+ "x-merge": "scalar"
29
+ },
30
+ "baseagents": {
31
+ "type": "object",
32
+ "description": "各 base agent 配置(model/effort/apiKey/baseUrl 等),以及仅 defaults 可定义的备用模型链。",
33
+ "x-merge": "dict",
34
+ "additionalProperties": {
35
+ "type": "object",
36
+ "additionalProperties": true,
37
+ "properties": {
38
+ "fallbackModels": {
39
+ "type": "array",
40
+ "maxItems": 3,
41
+ "description": "同 base agent 的有序备用模型链;为空时禁用自动模型降级。",
42
+ "items": {
43
+ "type": "object",
44
+ "additionalProperties": false,
45
+ "required": ["model"],
46
+ "properties": {
47
+ "model": { "type": "string", "minLength": 1 },
48
+ "effort": { "type": "string", "minLength": 1 }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ },
55
+ "projects": {
56
+ "type": "object",
57
+ "description": "项目路径配置",
58
+ "x-merge": "dict",
59
+ "properties": {
60
+ "rootPath": { "type": "string", "description": "全局项目根路径" },
61
+ "defaultPath": { "type": "string", "description": "全局默认项目路径" }
62
+ }
63
+ },
64
+ "aun": {
65
+ "type": "object",
66
+ "description": "全局 AUN 配置",
67
+ "x-merge": "dict",
68
+ "properties": {
69
+ "keystorePath": { "type": "string" },
70
+ "encryptionSeed": { "type": "string" },
71
+ "gatewayUrl": { "type": "string" }
72
+ }
73
+ },
74
+ "responseMode": { "type": "string", "x-merge": "scalar" },
75
+ "responseModeParams": {
76
+ "type": "object",
77
+ "x-merge": "dict",
78
+ "description": "响应模式特有参数的全局默认字典,按模式 id 分桶:{ [modeId]: {...} }"
79
+ },
80
+ "config": { "type": "object", "x-merge": "dict" },
81
+ "session_renew": {
82
+ "type": "object",
83
+ "description": "会话超时后的续接判定策略,默认关闭",
84
+ "x-merge": "dict",
85
+ "additionalProperties": false,
86
+ "properties": {
87
+ "enabled": { "type": "boolean", "default": false, "description": "是否启用超时后的会话连续性判定" },
88
+ "after_hours": { "type": "number", "exclusiveMinimum": 0, "default": 24, "description": "距最后一条有效对话超过该小时数才触发判定" },
89
+ "fallback_action": { "type": "string", "enum": ["continue", "new"], "default": "continue", "description": "无法判定时的兜底动作", "x-enumDescriptions": { "continue": "继续沿用当前会话", "new": "开启新会话" } }
90
+ }
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "relation-config.schema.8.json",
4
+ "title": "RelationConfig v8 (agents/{aid}/relations/{peerKey}/config.json)",
5
+ "x-logical-name": "relation-config",
6
+ "x-scope": "relation",
7
+ "type": "object",
8
+ "additionalProperties": true,
9
+ "not": {
10
+ "anyOf": [
11
+ { "required": ["permissionMode"] },
12
+ { "required": ["roles"] }
13
+ ]
14
+ },
15
+ "properties": {
16
+ "$schema_version": { "type": "number", "const": 8, "default": 8, "x-merge": "scalar" },
17
+ "targetKind": { "type": "string", "enum": ["private", "group"], "x-merge": "scalar" },
18
+ "role": { "type": ["string", "null"], "pattern": "^(?!owner$)[a-z0-9_-]+$", "x-merge": "scalar", "description": "关系角色;允许 admin/member/visitor/自定义角色,禁止 owner" },
19
+ "active_baseagent": { "type": "string", "x-merge": "scalar" },
20
+ "models": { "type": "object", "x-merge": "dict" },
21
+ "baseagents": {
22
+ "type": "object",
23
+ "x-merge": "dict",
24
+ "description": "关系级模型覆盖;备用模型链只能在 defaults.json 配置。",
25
+ "additionalProperties": {
26
+ "not": {
27
+ "type": "object",
28
+ "required": ["fallbackModels"]
29
+ }
30
+ }
31
+ },
32
+ "chatmode": { "type": "object", "x-merge": "dict", "properties": { "private": { "enum": ["interactive", "proactive"] }, "group": { "enum": ["interactive", "proactive"] }, "nothuman": { "enum": ["interactive", "proactive"] } }, "additionalProperties": false },
33
+ "mentionMode": { "type": "string", "enum": ["disabled", "mention-only"], "x-merge": "scalar" },
34
+ "model": { "type": "string", "x-merge": "scalar" },
35
+ "responseMode": { "type": "string", "x-merge": "scalar" },
36
+ "responseModeParams": { "type": "object", "x-merge": "dict" },
37
+ "flush_delay": { "type": "number", "x-merge": "scalar" },
38
+ "debounce": { "type": "number", "x-merge": "scalar" },
39
+ "show_activities": { "type": "string", "enum": ["all", "text", "none"], "x-merge": "scalar" },
40
+ "enable_rich_content": { "type": "boolean", "x-merge": "scalar" },
41
+ "session_renew": {
42
+ "type": "object",
43
+ "x-merge": "dict",
44
+ "additionalProperties": false,
45
+ "properties": {
46
+ "enabled": { "type": "boolean" },
47
+ "after_hours": { "type": "number", "exclusiveMinimum": 0 },
48
+ "fallback_action": { "type": "string", "enum": ["continue", "new"] }
49
+ }
50
+ },
51
+ "group_venue_sync": { "type": "object", "x-merge": "dict" },
52
+ "groupRules": {
53
+ "type": "object",
54
+ "x-merge": "dict",
55
+ "additionalProperties": false,
56
+ "properties": {
57
+ "mode": {
58
+ "type": "string",
59
+ "enum": ["load", "ignore"],
60
+ "default": "load",
61
+ "description": "是否读取并注入当前 AUN 群已发布的 /rules.md;默认 load。"
62
+ }
63
+ }
64
+ },
65
+ "render": { "type": "object", "x-merge": "dict" },
66
+ "sessionManifests": { "type": "object", "x-merge": "dict" },
67
+ "extra_backup": { "type": "array", "items": { "type": "object" }, "x-merge": "list" }
68
+ }
69
+ }
@@ -40,7 +40,7 @@
40
40
  "agent.reload": {
41
41
  "allow": true,
42
42
  "dangerous": true,
43
- "scopes": ["agent"],
43
+ "scopes": ["agent", "control"],
44
44
  "constraints": {
45
45
  "targetCurrentAgentOnly": true,
46
46
  "requireAgentAdmin": true
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "evolcore",
3
- "version": "0.0.5",
4
- "description": "AI Agent gateway connecting multiple backends (Claude, Codex, Gemini) to messaging channels (Feishu, WeChat, AUN, QQ) with multi-project session management",
3
+ "version": "0.0.7",
4
+ "description": "AI Agent gateway connecting Claude, Codex, Gemini, and the bundled ecagent runner to messaging channels with multi-project session management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -9,10 +9,17 @@
9
9
  },
10
10
  "files": [
11
11
  "dist/",
12
+ "ecagent/src/",
13
+ "ecagent/dist/",
14
+ "ecagent/package.json",
15
+ "ecagent/tsconfig.build.json",
16
+ "ecagent/LICENSE",
17
+ "ecagent/NOTICE",
18
+ "ecagent/README.md",
12
19
  "!dist/cli/mode.js",
13
20
  "bin/",
14
- "assets/.env.template",
15
21
  "!dist/experimental/",
22
+ "skills/",
16
23
  "kits/",
17
24
  "!kits/.kits-version",
18
25
  "*.md",
@@ -27,8 +34,10 @@
27
34
  "!evolcore-install-aun.md"
28
35
  ],
29
36
  "scripts": {
37
+ "predev": "npm run build:ecagent",
30
38
  "dev": "tsx watch src/index.ts",
31
- "build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc && node -e \"const f='dist/cli/index.js',c=require('fs').readFileSync(f,'utf8');if(!c.startsWith('#!'))require('fs').writeFileSync(f,'#!/usr/bin/env node\\n'+c)\" && node -e \"try{require('child_process').execFileSync('chmod',['+x','dist/cli/index.js'])}catch{}\" && node -e \"require('fs').copyFileSync('src/utils/error-dict.json','dist/utils/error-dict.json');require('fs').copyFileSync('src/utils/model-prices.jsonl','dist/utils/model-prices.jsonl')\" && npm --prefix ecweb run build",
39
+ "build:ecagent": "npm --prefix ecagent run build",
40
+ "build": "npm run build:ecagent && node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc && node -e \"const f='dist/cli/index.js',c=require('fs').readFileSync(f,'utf8');if(!c.startsWith('#!'))require('fs').writeFileSync(f,'#!/usr/bin/env node\\n'+c)\" && node -e \"try{require('child_process').execFileSync('chmod',['+x','dist/cli/index.js'])}catch{}\" && node -e \"require('fs').copyFileSync('src/utils/error-dict.json','dist/utils/error-dict.json');require('fs').copyFileSync('src/utils/model-prices.jsonl','dist/utils/model-prices.jsonl')\" && npm --prefix ecweb run build",
32
41
  "start": "node dist/index.js",
33
42
  "test": "npm run build && vitest run",
34
43
  "test:watch": "vitest",
@@ -42,9 +51,13 @@
42
51
  "ajv": "^8.20.0",
43
52
  "cron-parser": "^5.5.0",
44
53
  "dotenv": "^17.4.2",
54
+ "ignore": "7.0.5",
45
55
  "image-type": "^6.0.0",
56
+ "partial-json": "0.1.7",
46
57
  "qrcode-terminal": "^0.12.0",
58
+ "typebox": "1.1.38",
47
59
  "ws": "^8.21.0",
60
+ "yaml": "2.9.0",
48
61
  "zod": "^4.0.0"
49
62
  },
50
63
  "optionalDependencies": {
@@ -56,12 +69,15 @@
56
69
  },
57
70
  "devDependencies": {
58
71
  "@types/form-data": "^2.2.1",
59
- "@types/node": "^25.5.0",
72
+ "@types/node": "24.12.4",
60
73
  "@types/qrcode-terminal": "^0.12.2",
61
74
  "@types/ws": "^8.18.1",
62
75
  "@vitest/coverage-v8": "^4.1.0",
63
76
  "tsx": "^4.19.0",
64
- "typescript": "^5.6.0",
77
+ "typescript": "5.9.3",
65
78
  "vitest": "^4.1.0"
79
+ },
80
+ "engines": {
81
+ "node": ">=22.19.0"
66
82
  }
67
83
  }