evolcore 0.0.2 → 0.0.4
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 +93 -778
- package/README.md +45 -10
- package/bin/ec-safe-output.js +89 -24
- package/dist/agents/baseagent.js +46 -0
- package/dist/agents/claude-runner.js +198 -48
- package/dist/agents/codex-app-server-client.js +68 -0
- package/dist/agents/codex-runner.js +203 -8
- package/dist/agents/runner-types.js +2 -2
- package/dist/aun/aid/agentmd.js +79 -0
- package/dist/aun/aid/encryption-seed-policy.js +29 -0
- package/dist/aun/aid/index.js +1 -1
- package/dist/aun/aid/store.js +2 -5
- package/dist/aun/outbox.js +8 -0
- package/dist/channels/aun.js +241 -116
- package/dist/channels/daemon.js +18 -4
- package/dist/channels/dingtalk.js +1005 -260
- package/dist/channels/feishu.js +184 -56
- package/dist/channels/qqbot.js +23 -1
- package/dist/channels/wechat.js +303 -155
- package/dist/channels/wecom.js +1132 -164
- package/dist/cli/agent-command.js +2 -1
- package/dist/cli/aun-commands.js +98 -43
- package/dist/cli/bench.js +2 -2
- package/dist/cli/contact.js +71 -0
- package/dist/cli/ctl-command.js +2 -2
- package/dist/cli/daemon-commands.js +77 -214
- package/dist/cli/handoff-command.js +4 -3
- package/dist/cli/help.js +9 -5
- package/dist/cli/index.js +132 -116
- package/dist/cli/init-channel.js +242 -129
- package/dist/cli/init.js +70 -31
- package/dist/cli/model.js +2 -1
- package/dist/cli/net-check.js +2 -2
- package/dist/cli/queue-command.js +30 -6
- package/dist/cli/raw-key-input.js +25 -0
- package/dist/cli/response.js +5 -6
- package/dist/cli/restart-monitor.js +25 -1
- package/dist/cli/stats.js +6 -4
- package/dist/cli/trigger-command.js +146 -25
- package/dist/cli/version.js +6 -1
- package/dist/config/access-policy-domain.js +38 -0
- package/dist/config/access-policy.js +134 -0
- package/dist/config/builtin-role-templates.js +42 -17
- package/dist/config/builtin-roles.js +31 -6
- package/dist/config/config-field-policy.js +17 -5
- package/dist/config/config-manager.js +409 -29
- package/dist/config/config-operation-service.js +35 -38
- package/dist/config/contact-alias.js +68 -0
- package/dist/config/contact-bind-code.js +274 -0
- package/dist/config/contact-book-store.js +622 -0
- package/dist/config/contact-book-v2-startup.js +35 -0
- package/dist/config/contact-book.js +185 -300
- package/dist/config/contact-operation-service.js +116 -0
- package/dist/config/contact-request-service.js +331 -0
- package/dist/config/peer-role-resolver.js +136 -55
- package/dist/config/role-ranks.js +18 -0
- package/dist/config/role-service.js +16 -19
- package/dist/config/role-store.js +16 -5
- package/dist/config/roles.js +10 -1
- package/dist/config/schema-registry.js +49 -24
- package/dist/config-store.js +14 -4
- package/dist/core/auth/agent-delegation.js +105 -11
- package/dist/core/auth/authorization-audit.js +16 -1
- package/dist/core/auth/operation-authorizer.js +10 -0
- package/dist/core/auth/operation-catalog.js +105 -1
- package/dist/core/auth/trigger-authorization.js +15 -0
- package/dist/core/bootstrap-service.js +2 -9
- package/dist/core/channel-loader.js +6 -2
- package/dist/core/command/command-handler.js +113 -21
- package/dist/core/command/connect-menu.js +599 -0
- package/dist/core/command/evol-menu-version-gate.js +38 -0
- package/dist/core/command/group-menu.js +421 -0
- package/dist/core/command/menu-handler.js +382 -100
- package/dist/core/command/menu-protocol.js +8 -2
- package/dist/core/command/menu-token-store.js +102 -0
- package/dist/core/command/role-menu.js +128 -29
- package/dist/core/command/slash-gate.js +1 -1
- package/dist/core/command/slash-handler.js +186 -49
- package/dist/core/daemon-file-cache.js +40 -6
- package/dist/core/event-catalog.js +99 -0
- package/dist/core/evolagent-registry.js +4 -40
- package/dist/core/evolagent.js +20 -9
- package/dist/core/handoff/runtime.js +162 -37
- package/dist/core/handoff/store.js +46 -2
- package/dist/core/handoff/types.js +1 -0
- package/dist/core/inference/text-inference.js +16 -74
- package/dist/core/message/file-markers.js +7 -0
- package/dist/core/message/im-renderer.js +20 -14
- package/dist/core/message/inbound-admission.js +124 -0
- package/dist/core/message/message-bridge.js +670 -57
- package/dist/core/message/message-log.js +1 -0
- package/dist/core/message/message-queue.js +195 -10
- package/dist/core/message/message-utils.js +8 -2
- package/dist/core/message/peer-mode.js +7 -8
- package/dist/core/message/response-engine.js +642 -96
- package/dist/core/message/send-receipt.js +24 -0
- package/dist/core/message/stream-debouncer.js +11 -2
- package/dist/core/permission/approval-gateway.js +17 -10
- package/dist/core/permission/ec-command-parser.js +101 -46
- package/dist/core/permission/tool-policy.js +115 -38
- package/dist/core/protected-paths.js +38 -11
- package/dist/core/session/session-fs-store.js +44 -3
- package/dist/core/session/session-manager.js +86 -8
- package/dist/core/session/session-mapper.js +2 -0
- package/dist/core/session/session-renew.js +125 -69
- package/dist/core/session/session-turn-coordinator.js +5 -1
- package/dist/eck/kit-renderer.js +12 -1
- package/dist/eck/message-renderer.js +79 -1
- package/dist/index.js +285 -94
- package/dist/ipc.js +114 -8
- package/dist/paths.js +3 -0
- package/dist/response-system/config-resolver.js +29 -0
- package/dist/response-system/coordinator.js +8 -32
- package/dist/response-system/engines/v1/proactive-flow.js +1 -1
- package/dist/response-system/index.js +1 -0
- package/dist/response-system/modes/single-session/index.js +7 -4
- package/dist/stats/billing.js +20 -8
- package/dist/trigger/manager.js +3 -0
- package/dist/trigger/parser.js +126 -11
- package/dist/trigger/patch.js +12 -2
- package/dist/trigger/scheduler.js +444 -40
- package/dist/trigger/validation.js +13 -0
- package/dist/utils/aid-bind.js +43 -29
- package/dist/utils/error-dict.json +7 -0
- package/dist/utils/evolcore-version.js +21 -0
- package/dist/utils/instance-registry.js +14 -7
- package/dist/utils/log-writer.js +46 -0
- package/dist/utils/logger.js +2 -2
- package/dist/utils/media-cache.js +4 -1
- package/dist/utils/model-prices.jsonl +6 -3
- package/dist/utils/restart-safety.js +31 -0
- package/dist/utils/stable-semver.js +21 -0
- package/dist/utils/stats.js +33 -9
- package/dist/utils/system-memory.js +62 -0
- package/kits/docs/INDEX.md +2 -1
- package/kits/docs/channels/aun.md +4 -13
- package/kits/docs/evolcore/INDEX.md +5 -3
- package/kits/docs/evolcore/agent.md +9 -1
- package/kits/docs/evolcore/aid.md +5 -2
- package/kits/docs/evolcore/config.md +47 -2
- package/kits/docs/evolcore/contact.md +61 -0
- package/kits/docs/evolcore/fs.md +9 -0
- package/kits/docs/evolcore/group-rules.md +46 -4
- package/kits/docs/evolcore/group.md +15 -6
- package/kits/docs/evolcore/model.md +4 -1
- package/kits/docs/evolcore/msg.md +12 -6
- package/kits/docs/evolcore/response.md +16 -21
- package/kits/docs/evolcore/rpc.md +2 -0
- package/kits/docs/evolcore/stats.md +15 -2
- package/kits/docs/evolcore/storage.md +1 -0
- package/kits/docs/evolcore/trigger.md +42 -10
- package/kits/docs/path-registry.md +36 -17
- package/kits/eck_manifest.json +12 -0
- package/kits/eck_message_manifest.json +12 -1
- package/kits/migrations/migrate-contact-book-v2.mjs +754 -0
- package/kits/rules/01-overview.md +17 -7
- package/kits/rules/02-navigation.md +38 -18
- package/kits/rules/03-identity.md +28 -24
- package/kits/rules/04-relation.md +44 -28
- package/kits/rules/05-venue.md +31 -15
- package/kits/rules/06-channel.md +11 -7
- package/kits/schemas/_meta.json +21 -7
- package/kits/schemas/agent-config.schema.6.json +322 -0
- package/kits/schemas/agent-config.schema.7.json +303 -0
- package/kits/schemas/agent-config.schema.8.json +304 -0
- package/kits/schemas/agent-config.schema.9.json +374 -0
- package/kits/schemas/contact-book.schema.2.json +43 -0
- package/kits/schemas/contact-book.schema.3.json +67 -0
- package/kits/schemas/daemon.schema.1.json +3 -2
- package/kits/schemas/daemon.schema.2.json +101 -0
- package/kits/schemas/daemon.schema.3.json +123 -0
- package/kits/schemas/defaults.schema.2.json +85 -0
- package/kits/schemas/defaults.schema.3.json +73 -0
- package/kits/schemas/relation-config.schema.5.json +47 -0
- package/kits/schemas/relation-config.schema.6.json +46 -0
- package/kits/schemas/relation-config.schema.7.json +59 -0
- package/kits/schemas/role-config.schema.1.json +1 -0
- package/kits/schemas/role-registry.schema.1.json +2 -2
- package/kits/schemas/single-session.schema.2.json +57 -0
- package/kits/templates/message-fragments/handoff-context-to-target.md +9 -0
- package/kits/templates/message-fragments/handoff-request-to-target.md +14 -8
- package/kits/templates/message-fragments/handoff-response-to-origin.md +5 -6
- package/kits/templates/roles/admin.json +47 -0
- package/kits/templates/roles/member.json +5 -0
- package/kits/templates/roles/owner.json +1 -0
- package/kits/templates/roles/visitor.json +5 -0
- package/kits/templates/system-fragments/channel.md +12 -2
- package/kits/templates/system-fragments/commands.md +3 -1
- package/kits/templates/system-fragments/identity.md +3 -1
- package/kits/templates/system-fragments/relation.md +1 -1
- package/kits/templates/system-fragments/session.md +6 -2
- package/package.json +7 -5
- package/MIGRATION-0.5.0.md +0 -378
- package/ROLE_ACCESS_CONTROL.md +0 -174
- package/assets/brand/evolcore/README.md +0 -19
- package/assets/brand/evolcore/evolcore-app-icon.png +0 -0
- package/assets/brand/evolcore/evolcore-app-icon.svg +0 -13
- package/assets/brand/evolcore/evolcore-brand-board.png +0 -0
- package/assets/brand/evolcore/evolcore-brand-board.svg +0 -126
- package/assets/brand/evolcore/evolcore-logo-kit.zip +0 -0
- package/assets/brand/evolcore/evolcore-logo-reverse.png +0 -0
- package/assets/brand/evolcore/evolcore-logo-reverse.svg +0 -14
- package/assets/brand/evolcore/evolcore-logo.png +0 -0
- package/assets/brand/evolcore/evolcore-logo.svg +0 -14
- package/assets/brand/evolcore/evolcore-mark.png +0 -0
- package/assets/brand/evolcore/evolcore-mark.svg +0 -10
|
@@ -25,7 +25,8 @@ function formatBytes(bytes) {
|
|
|
25
25
|
export async function cmdAgent(args) {
|
|
26
26
|
const sub = args[0];
|
|
27
27
|
const formatJson = getArgValue(args, '--format') === 'json';
|
|
28
|
-
|
|
28
|
+
const commands = new Set(['list', 'show', 'new', 'enable', 'disable', 'get', 'set', 'rename', 'ready', 'reload', 'delete']);
|
|
29
|
+
if (!sub || isHelpFlag(sub) || (wantsHelp(args) && !commands.has(sub))) {
|
|
29
30
|
console.log(`用法: ec agent <command>
|
|
30
31
|
|
|
31
32
|
Commands:
|
package/dist/cli/aun-commands.js
CHANGED
|
@@ -31,6 +31,7 @@ Commands:
|
|
|
31
31
|
|
|
32
32
|
Options:
|
|
33
33
|
--format json 输出 JSON 格式
|
|
34
|
+
--aun-path <path> 指定 AUN keystore 根(默认 EVOLCORE_HOME,可由 AUN_HOME 设置)
|
|
34
35
|
--help, -h 各子命令均支持,查看详细用法
|
|
35
36
|
|
|
36
37
|
示例:
|
|
@@ -169,12 +170,14 @@ Options:
|
|
|
169
170
|
}
|
|
170
171
|
if (sub === 'new') {
|
|
171
172
|
if (wantsHelp(args)) {
|
|
172
|
-
console.log(`用法: ec aid new <完整AID> [--force]
|
|
173
|
+
console.log(`用法: ec aid new <完整AID> [--force] [--format json]
|
|
173
174
|
|
|
174
175
|
创建新 AID 身份:生成 ECDSA 密钥对、向 Issuer 申请证书、构建并上传初始 agent.md。
|
|
175
176
|
|
|
176
177
|
选项:
|
|
177
178
|
--force 强制重新注册,覆盖已存在的身份(即使签名验证失败)
|
|
179
|
+
--format json 输出 JSON
|
|
180
|
+
--aun-path <path> 指定 AUN keystore 根
|
|
178
181
|
|
|
179
182
|
例: ec aid new reviewer.agentid.pub
|
|
180
183
|
ec aid new reviewer.agentid.pub --force`);
|
|
@@ -183,23 +186,35 @@ Options:
|
|
|
183
186
|
const aid = args[1];
|
|
184
187
|
const force = args.includes('--force');
|
|
185
188
|
if (!aid) {
|
|
186
|
-
|
|
189
|
+
if (formatJson)
|
|
190
|
+
console.log(JSON.stringify({ ok: false, code: 'MISSING_AID', error: 'missing AID' }));
|
|
191
|
+
else
|
|
192
|
+
console.error('用法: ec aid new <完整AID> [--force]\n例: ec aid new reviewer.agentid.pub');
|
|
187
193
|
process.exit(1);
|
|
188
194
|
}
|
|
189
195
|
if (!isValidAid(aid)) {
|
|
190
|
-
|
|
196
|
+
if (formatJson)
|
|
197
|
+
console.log(JSON.stringify({ ok: false, code: 'INVALID_AID', error: `invalid AID: ${aid}` }));
|
|
198
|
+
else
|
|
199
|
+
console.error(`❌ 无效 AID 格式: ${aid}`);
|
|
191
200
|
process.exit(1);
|
|
192
201
|
}
|
|
193
202
|
try {
|
|
194
203
|
const result = await aidCreate(aid, { aunPath, force });
|
|
204
|
+
let agentmdUploaded = result.alreadyExisted;
|
|
205
|
+
let agentmdError;
|
|
195
206
|
if (!result.alreadyExisted) {
|
|
196
207
|
const content = buildInitialAgentMd({ aid });
|
|
197
208
|
try {
|
|
198
209
|
await agentmdPut(content, { aid, aunPath });
|
|
199
|
-
|
|
210
|
+
agentmdUploaded = true;
|
|
211
|
+
if (!formatJson)
|
|
212
|
+
console.log('✓ agent.md 已发布');
|
|
200
213
|
}
|
|
201
214
|
catch (e) {
|
|
202
|
-
|
|
215
|
+
agentmdError = String(e.message || e).slice(0, 100);
|
|
216
|
+
if (!formatJson)
|
|
217
|
+
console.warn(`⚠ agent.md 发布失败(首次连接将自动重试): ${agentmdError}`);
|
|
203
218
|
}
|
|
204
219
|
}
|
|
205
220
|
try {
|
|
@@ -211,17 +226,34 @@ Options:
|
|
|
211
226
|
}
|
|
212
227
|
catch { }
|
|
213
228
|
const verb = result.alreadyExisted ? '已存在且有效' : (force ? '已重新创建' : '已创建');
|
|
214
|
-
|
|
215
|
-
|
|
229
|
+
if (formatJson) {
|
|
230
|
+
console.log(JSON.stringify({
|
|
231
|
+
ok: true,
|
|
232
|
+
aid,
|
|
233
|
+
alreadyExisted: result.alreadyExisted,
|
|
234
|
+
agentmdUploaded,
|
|
235
|
+
...(agentmdError ? { agentmdError } : {}),
|
|
236
|
+
}, null, 2));
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
console.log(`✓ ${aid} ${verb}`);
|
|
240
|
+
console.log(' 如需上线 AUN 通道,运行 ec agent new ' + aid);
|
|
241
|
+
}
|
|
216
242
|
}
|
|
217
243
|
catch (e) {
|
|
218
244
|
if (e.code === 'AID_INVALID') {
|
|
219
|
-
|
|
245
|
+
if (formatJson)
|
|
246
|
+
console.log(JSON.stringify({ ok: false, code: 'AID_INVALID', error: e.message }));
|
|
247
|
+
else
|
|
248
|
+
console.error(`❌ ${e.message}`);
|
|
220
249
|
process.exit(1);
|
|
221
250
|
}
|
|
222
251
|
if (e.code === -32052 || e.constructor?.name === 'IdentityConflictError') {
|
|
223
|
-
|
|
224
|
-
|
|
252
|
+
const error = `AID ${aid} 已在服务端注册,但本地密钥无法匹配;该 AID 可能由其他设备创建,无法在本地恢复`;
|
|
253
|
+
if (formatJson)
|
|
254
|
+
console.log(JSON.stringify({ ok: false, code: 'IDENTITY_CONFLICT', error }));
|
|
255
|
+
else
|
|
256
|
+
console.error(`❌ ${error}。请选择其他名称。`);
|
|
225
257
|
process.exit(1);
|
|
226
258
|
}
|
|
227
259
|
throw e;
|
|
@@ -249,6 +281,7 @@ Options:
|
|
|
249
281
|
--yes 跳过 dry-run,立即执行
|
|
250
282
|
--skip-pki --unrecoverable 时跳过 PKI 探测,仅依据本地 sign+verify 失败判断(危险,可能误删可恢复 AID)
|
|
251
283
|
--format json 输出 JSON 格式
|
|
284
|
+
--aun-path <path> 指定 AUN keystore 根
|
|
252
285
|
|
|
253
286
|
示例:
|
|
254
287
|
ec aid delete old.agentid.pub
|
|
@@ -279,10 +312,16 @@ Options:
|
|
|
279
312
|
}
|
|
280
313
|
const deleted = aidDelete(aid, { aunPath });
|
|
281
314
|
if (deleted) {
|
|
282
|
-
|
|
315
|
+
if (formatJson)
|
|
316
|
+
console.log(JSON.stringify({ ok: true, aid, deleted: true }, null, 2));
|
|
317
|
+
else
|
|
318
|
+
console.log(`✓ ${aid} 已删除`);
|
|
283
319
|
}
|
|
284
320
|
else {
|
|
285
|
-
|
|
321
|
+
if (formatJson)
|
|
322
|
+
console.log(JSON.stringify({ ok: false, aid, deleted: false, error: 'not found' }, null, 2));
|
|
323
|
+
else
|
|
324
|
+
console.error(`❌ 本地不存在: ${aid}`);
|
|
286
325
|
process.exit(1);
|
|
287
326
|
}
|
|
288
327
|
return;
|
|
@@ -505,7 +544,7 @@ Options:
|
|
|
505
544
|
}
|
|
506
545
|
// ==================== RPC ====================
|
|
507
546
|
export async function cmdRpc(args) {
|
|
508
|
-
if (args.length === 0 ||
|
|
547
|
+
if (args.length === 0 || wantsHelp(args)) {
|
|
509
548
|
console.log(`用法: ec rpc --as <aid> --params <params>
|
|
510
549
|
|
|
511
550
|
通用 AUN RPC 调用。
|
|
@@ -520,6 +559,7 @@ export async function cmdRpc(args) {
|
|
|
520
559
|
Options:
|
|
521
560
|
--app <name> 指定应用 slot(独立消费通道)。仅对 message.pull / group.pull
|
|
522
561
|
等消费类方法有意义——隔离 seq 游标与消息过滤;默认与 daemon 共享通道。
|
|
562
|
+
--aun-path <path> 指定 AUN keystore 根
|
|
523
563
|
|
|
524
564
|
示例:
|
|
525
565
|
ec rpc --as alice.agentid.pub --params '{"method":"message.send","params":{"to":"bob.agentid.pub","payload":{"type":"text","text":"hello"}}}'
|
|
@@ -589,7 +629,7 @@ export async function cmdStorage(args) {
|
|
|
589
629
|
const sub = args[0];
|
|
590
630
|
const aunPath = resolveAunPath(args);
|
|
591
631
|
const formatJson = getArgValue(args, '--format') === 'json';
|
|
592
|
-
if (!sub ||
|
|
632
|
+
if (!sub || wantsHelp(args)) {
|
|
593
633
|
console.log(`用法: ec storage <command> <aid> [options]
|
|
594
634
|
|
|
595
635
|
Commands:
|
|
@@ -601,6 +641,11 @@ Commands:
|
|
|
601
641
|
|
|
602
642
|
<url> 格式: [https://]<owner-aid>/<path>
|
|
603
643
|
|
|
644
|
+
Options:
|
|
645
|
+
--public 上传后公开可读(仅 upload)
|
|
646
|
+
--format json 输出 JSON
|
|
647
|
+
--aun-path <path> 指定 AUN keystore 根
|
|
648
|
+
|
|
604
649
|
示例:
|
|
605
650
|
ec storage upload myaid.agentid.pub ./doc.txt notes/doc.txt
|
|
606
651
|
ec storage upload myaid.agentid.pub ./pic.png images/pic.png --public
|
|
@@ -741,13 +786,12 @@ export async function cmdMsg(args) {
|
|
|
741
786
|
const sub = args[0];
|
|
742
787
|
const aunPath = resolveAunPath(args);
|
|
743
788
|
const formatJson = getArgValue(args, '--format') === 'json';
|
|
744
|
-
const
|
|
745
|
-
|
|
746
|
-
if (!sub || isHelpFlag(sub)) {
|
|
789
|
+
const appSlot = getArgValue(args, '--app');
|
|
790
|
+
if (!sub || isHelpFlag(sub) || (wantsHelp(args) && sub !== 'history')) {
|
|
747
791
|
console.log(`用法: ec msg <command> <from-aid> [args...] [options]
|
|
748
792
|
|
|
749
793
|
Commands:
|
|
750
|
-
send <from> <to> <text>
|
|
794
|
+
send <from> <to> <text> --return <none|required> 发送文本(跨会话时 --return 必填)
|
|
751
795
|
send <from> <to> --text-from-file <path> 从文件读取文本内容
|
|
752
796
|
send <from> <to> --file <path> [--as <type>] 发送文件(image|video|voice|file)
|
|
753
797
|
send <from> <to> --link <url> [--title T] 发送链接卡片
|
|
@@ -761,6 +805,7 @@ Commands:
|
|
|
761
805
|
Options:
|
|
762
806
|
--text-from-file <path> 从文件读取文本(UTF-8),用于超长消息或避免 Shell 转义
|
|
763
807
|
--app <name> 指定应用 slot(独立消费通道,不影响 daemon)
|
|
808
|
+
--aun-path <path> 指定 AUN keystore 根
|
|
764
809
|
--format json 输出 JSON 格式
|
|
765
810
|
--encrypt 启用端到端加密(密文发送)
|
|
766
811
|
--no-encrypt 强制明文发送(优先于 --encrypt)
|
|
@@ -769,20 +814,23 @@ Options:
|
|
|
769
814
|
--before <time> 只返回该时间之前的历史
|
|
770
815
|
--after <time> 只返回该时间之后的历史
|
|
771
816
|
--direction <value> 历史方向:in|out|all
|
|
772
|
-
--return <required
|
|
817
|
+
--return <none|required> 跨会话发送必填:none=仅补充目标上下文,required=回答回流来源
|
|
773
818
|
--content-type <mime> 显式覆盖 MIME(仅 --file 模式)
|
|
819
|
+
--as <type> 附件类型:image|video|voice|file(仅 --file 模式)
|
|
774
820
|
--text <说明> 附件说明文字(仅 --file 模式)
|
|
775
821
|
--transcript <text> 语音转写(仅 --as voice)
|
|
822
|
+
--title <text> 链接标题(仅 --link 模式)
|
|
823
|
+
--description <text> 链接描述(仅 --link 模式)
|
|
776
824
|
-- end-of-options:其后所有参数按正文处理
|
|
777
825
|
(用于发送恰好等于某 flag 的文本,如 send a b -- --encrypt)
|
|
778
826
|
|
|
779
827
|
示例:
|
|
780
|
-
ec msg send alice.agentid.pub bob.agentid.pub "hello"
|
|
781
|
-
ec msg send alice.agentid.pub bob.agentid.pub --text-from-file long-message.txt
|
|
782
|
-
ec msg send alice.agentid.pub bob.agentid.pub "讨论项目A" --thread "project-A"
|
|
783
|
-
ec msg send alice.agentid.pub bob.agentid.pub --file ./pic.png
|
|
784
|
-
ec msg send alice.agentid.pub bob.agentid.pub --file ./demo.mp4 --as video
|
|
785
|
-
ec msg send alice.agentid.pub bob.agentid.pub --link https://example.com --title "AUN"
|
|
828
|
+
ec msg send alice.agentid.pub bob.agentid.pub "hello" --return none
|
|
829
|
+
ec msg send alice.agentid.pub bob.agentid.pub --text-from-file long-message.txt --return none
|
|
830
|
+
ec msg send alice.agentid.pub bob.agentid.pub "讨论项目A" --thread "project-A" --return required
|
|
831
|
+
ec msg send alice.agentid.pub bob.agentid.pub --file ./pic.png --return none
|
|
832
|
+
ec msg send alice.agentid.pub bob.agentid.pub --file ./demo.mp4 --as video --return none
|
|
833
|
+
ec msg send alice.agentid.pub bob.agentid.pub --link https://example.com --title "AUN" --return none
|
|
786
834
|
ec msg pull alice.agentid.pub --app my-bot
|
|
787
835
|
ec msg ack alice.agentid.pub 42 --app my-bot
|
|
788
836
|
ec msg recall alice.agentid.pub msg-uuid-1 msg-uuid-2
|
|
@@ -1180,20 +1228,21 @@ export async function cmdGroup(args) {
|
|
|
1180
1228
|
const sub = args[0];
|
|
1181
1229
|
const aunPath = resolveAunPath(args);
|
|
1182
1230
|
const formatJson = getArgValue(args, '--format') === 'json';
|
|
1183
|
-
const
|
|
1184
|
-
const
|
|
1185
|
-
if (!sub || isHelpFlag(sub) || (args
|
|
1231
|
+
const appSlot = getArgValue(args, '--app');
|
|
1232
|
+
const rulesActionHelp = sub === 'rules' && isHelpFlag(args[3]);
|
|
1233
|
+
if (!sub || isHelpFlag(sub) || (wantsHelp(args) && !rulesActionHelp)) {
|
|
1186
1234
|
console.log(`用法: ec group <command> <from-aid> [args...] [options]
|
|
1187
1235
|
|
|
1188
1236
|
消息:
|
|
1189
|
-
send <from> <group-id> <text>
|
|
1237
|
+
send <from> <group-id> <text> --return <none|required> 发送群文本(跨会话时 --return 必填)
|
|
1190
1238
|
send <from> <group-id> --file <path> [--as <type>] 发送群文件
|
|
1191
1239
|
send <from> <group-id> --payload <json> 发送自定义 payload
|
|
1192
1240
|
pull <from> <group-id> [--after-seq N] [--limit N] 拉取群消息
|
|
1193
1241
|
ack <from> <group-id> <seq> [--app <name>] 确认已读
|
|
1194
1242
|
|
|
1195
1243
|
群管理:
|
|
1196
|
-
create <from> <name> [--visibility public|private] [--description D]
|
|
1244
|
+
create <from> <name> [--visibility public|private] [--description D]
|
|
1245
|
+
[--join-mode open|approval|invite_only|closed] 创建群
|
|
1197
1246
|
list <from> [--size N] 列出我加入的群
|
|
1198
1247
|
info <from> <group-id> 查看群详情
|
|
1199
1248
|
update <from> <group-id> [--name N] [--description D] 修改群信息
|
|
@@ -1219,19 +1268,25 @@ export async function cmdGroup(args) {
|
|
|
1219
1268
|
|
|
1220
1269
|
Options:
|
|
1221
1270
|
--app <name> 指定应用 slot(独立消费通道,不影响 daemon)
|
|
1271
|
+
--aun-path <path> 指定 AUN keystore 根
|
|
1222
1272
|
--format json 输出 JSON 格式
|
|
1223
1273
|
--encrypt 启用端到端加密(仅 send)
|
|
1224
1274
|
--no-encrypt 强制明文发送(优先于 --encrypt;仅 send)
|
|
1225
1275
|
--thread <id> 指定话题 ID(仅 send)
|
|
1226
|
-
--return <required
|
|
1276
|
+
--return <none|required> 跨会话发送必填(仅 send;Trigger 只能使用 none)
|
|
1227
1277
|
--mention <aid> 发送时 @ 某个成员(可多次,或用逗号分隔多个 aid)
|
|
1228
1278
|
--mention-all 发送时 @ 所有人
|
|
1279
|
+
--content-type <mime> 显式覆盖 MIME(仅 --file 模式)
|
|
1280
|
+
--as <type> 附件类型:image|video|voice|file(仅 --file 模式)
|
|
1281
|
+
--text <说明> 附件说明文字(仅 --file 模式)
|
|
1282
|
+
--transcript <text> 语音转写(仅 --as voice)
|
|
1283
|
+
--group-id <aid> 指定自定义群 AID(仅 create)
|
|
1229
1284
|
-- end-of-options:其后所有参数按正文处理
|
|
1230
1285
|
(用于发送恰好等于某 flag 的文本,如 send a g -- --encrypt)
|
|
1231
1286
|
|
|
1232
1287
|
格式示例(.example.invalid 是保留的虚构域,以下 AID 均不是真实地址):
|
|
1233
1288
|
ec group create sender.example.invalid "Dev Team" --visibility private
|
|
1234
|
-
ec group send sender.example.invalid 12345.example.invalid "hello team"
|
|
1289
|
+
ec group send sender.example.invalid 12345.example.invalid "hello team" --return none
|
|
1235
1290
|
ec group send sender.example.invalid 12345.example.invalid "@member 看下 PR" --mention member.example.invalid
|
|
1236
1291
|
ec group send sender.example.invalid 12345.example.invalid --file ./arch.png
|
|
1237
1292
|
ec group rules sender.example.invalid 12345.example.invalid set ./rules.md
|
|
@@ -1426,10 +1481,8 @@ Options:
|
|
|
1426
1481
|
if (!appSlot) {
|
|
1427
1482
|
console.warn('⚠ 警告: 未传 --app,当前与 daemon 共享 evolcore 消费通道。pull 会看到/影响 daemon 的消息消费;如需独立消费请用 --app <name>');
|
|
1428
1483
|
}
|
|
1429
|
-
const
|
|
1430
|
-
const
|
|
1431
|
-
const afterSeq = afterSeqStr !== undefined ? Number(afterSeqStr) : undefined;
|
|
1432
|
-
const limit = limitStr !== undefined ? Number(limitStr) : undefined;
|
|
1484
|
+
const afterSeq = parseNumberFlag('--after-seq', '--after-seq');
|
|
1485
|
+
const limit = parseNumberFlag('--limit', '--limit');
|
|
1433
1486
|
const result = await groupPull({ from, groupId, afterSeq, limit, ...commonOpts });
|
|
1434
1487
|
outputResult(result, () => {
|
|
1435
1488
|
const r = result;
|
|
@@ -1475,12 +1528,17 @@ Options:
|
|
|
1475
1528
|
console.error(`❌ --visibility 必须是 public 或 private`);
|
|
1476
1529
|
process.exit(1);
|
|
1477
1530
|
}
|
|
1531
|
+
const joinMode = getArgValue(args, '--join-mode');
|
|
1532
|
+
if (joinMode && !['open', 'approval', 'invite_only', 'closed'].includes(joinMode)) {
|
|
1533
|
+
console.error('❌ --join-mode 必须是 open|approval|invite_only|closed');
|
|
1534
|
+
process.exit(1);
|
|
1535
|
+
}
|
|
1478
1536
|
const result = await groupCreate({
|
|
1479
1537
|
from,
|
|
1480
1538
|
name,
|
|
1481
1539
|
visibility,
|
|
1482
1540
|
description: getArgValue(args, '--description'),
|
|
1483
|
-
joinMode:
|
|
1541
|
+
joinMode: joinMode,
|
|
1484
1542
|
groupId: getArgValue(args, '--group-id'),
|
|
1485
1543
|
...commonOpts,
|
|
1486
1544
|
});
|
|
@@ -1493,8 +1551,7 @@ Options:
|
|
|
1493
1551
|
return;
|
|
1494
1552
|
}
|
|
1495
1553
|
if (sub === 'list') {
|
|
1496
|
-
const
|
|
1497
|
-
const size = sizeStr !== undefined ? Number(sizeStr) : undefined;
|
|
1554
|
+
const size = parseNumberFlag('--size', '--size');
|
|
1498
1555
|
const result = await groupList({ from, size, ...commonOpts });
|
|
1499
1556
|
outputResult(result, () => {
|
|
1500
1557
|
const r = result;
|
|
@@ -1755,12 +1812,10 @@ Options:
|
|
|
1755
1812
|
}
|
|
1756
1813
|
if (sub === 'members') {
|
|
1757
1814
|
const groupId = requireGroupId();
|
|
1758
|
-
const pageStr = getArgValue(args, '--page');
|
|
1759
|
-
const sizeStr = getArgValue(args, '--size');
|
|
1760
1815
|
const result = await groupMembers({
|
|
1761
1816
|
from, groupId,
|
|
1762
|
-
page:
|
|
1763
|
-
size:
|
|
1817
|
+
page: parseNumberFlag('--page', '--page'),
|
|
1818
|
+
size: parseNumberFlag('--size', '--size'),
|
|
1764
1819
|
...commonOpts,
|
|
1765
1820
|
});
|
|
1766
1821
|
outputResult(result, () => {
|
package/dist/cli/bench.js
CHANGED
|
@@ -9,7 +9,7 @@ import { resolveControlIssuer } from '../aun/aid/control-aid.js';
|
|
|
9
9
|
import { msgSend, msgPull } from '../aun/msg/index.js';
|
|
10
10
|
import { getPackageRoot, aunPath as defaultAunPath } from '../paths.js';
|
|
11
11
|
import { getAidStore, loadClient, SLOT } from '../aun/aid/store.js';
|
|
12
|
-
import { isHelpFlag, getArgValue } from './help.js';
|
|
12
|
+
import { isHelpFlag, wantsHelp, getArgValue } from './help.js';
|
|
13
13
|
const execFileAsync = promisify(execFile);
|
|
14
14
|
// ==================== ANSI ====================
|
|
15
15
|
const GREEN = '\x1b[32m';
|
|
@@ -370,7 +370,7 @@ async function cliAuth(aid, slotId) {
|
|
|
370
370
|
}
|
|
371
371
|
// ==================== Main Command ====================
|
|
372
372
|
export async function cmdBench(args) {
|
|
373
|
-
if (isHelpFlag(args[0])) {
|
|
373
|
+
if (isHelpFlag(args[0]) || wantsHelp(args)) {
|
|
374
374
|
console.log(`用法: ec bench [options]
|
|
375
375
|
|
|
376
376
|
AUN 消息系统性能基准测试。使用多个本地 AID 并发互发消息,
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { resolvePaths } from '../paths.js';
|
|
2
|
+
import { executeResolvedContactCommand, resolveContactCommand, } from '../config/contact-operation-service.js';
|
|
3
|
+
import { ipcQuery } from '../ipc.js';
|
|
4
|
+
import { AGENT_DELEGATION_TOKEN_ENV } from '../core/auth/agent-delegation.js';
|
|
5
|
+
import { getArgValue, isHelpFlag, wantsHelp } from './help.js';
|
|
6
|
+
export async function cmdContact(args) {
|
|
7
|
+
if (args.length === 0 || isHelpFlag(args[0]) || wantsHelp(args)) {
|
|
8
|
+
printHelp();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const json = getArgValue(args, '--format') === 'json';
|
|
12
|
+
if (process.env.EVOLCORE_SESSION_ID) {
|
|
13
|
+
const result = await runManaged(args, json);
|
|
14
|
+
output(result, json);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const resolved = resolveContactCommand(args);
|
|
18
|
+
if (!resolved.ok)
|
|
19
|
+
fail(resolved.reason, resolved.code);
|
|
20
|
+
const result = await executeResolvedContactCommand(resolved.command);
|
|
21
|
+
if (!result.ok)
|
|
22
|
+
fail(result.error, result.code, result.data);
|
|
23
|
+
output(result, json);
|
|
24
|
+
}
|
|
25
|
+
function output(value, json) {
|
|
26
|
+
if (json)
|
|
27
|
+
console.log(JSON.stringify(value));
|
|
28
|
+
else
|
|
29
|
+
console.log(JSON.stringify(value, null, 2));
|
|
30
|
+
}
|
|
31
|
+
async function runManaged(args, json) {
|
|
32
|
+
const sessionId = process.env.EVOLCORE_SESSION_ID;
|
|
33
|
+
const delegationToken = process.env[AGENT_DELEGATION_TOKEN_ENV];
|
|
34
|
+
if (!delegationToken)
|
|
35
|
+
fail(`${AGENT_DELEGATION_TOKEN_ENV} is not set for the active task`, 'DELEGATION_REQUIRED');
|
|
36
|
+
let response = null;
|
|
37
|
+
try {
|
|
38
|
+
response = await ipcQuery(resolvePaths().socket, {
|
|
39
|
+
type: 'contact.op',
|
|
40
|
+
argv: ['contact', ...args],
|
|
41
|
+
sessionId,
|
|
42
|
+
delegationToken,
|
|
43
|
+
}, 10_000);
|
|
44
|
+
}
|
|
45
|
+
catch { }
|
|
46
|
+
if (!response)
|
|
47
|
+
fail('Unable to connect to the evolcore daemon', 'DAEMON_UNAVAILABLE');
|
|
48
|
+
if (!response.ok || !response.result) {
|
|
49
|
+
fail(response.error || 'contact operation failed', response.code || 'CONTACT_AUTH_FAILED', response.data);
|
|
50
|
+
}
|
|
51
|
+
return response.result;
|
|
52
|
+
}
|
|
53
|
+
function fail(message, code = 'INVALID_ARGUMENT', data) {
|
|
54
|
+
const error = new Error(message);
|
|
55
|
+
error.code = code;
|
|
56
|
+
if (data !== undefined)
|
|
57
|
+
error.data = data;
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
function printHelp() {
|
|
61
|
+
console.log(`Usage:
|
|
62
|
+
ec contact block <primaryId> --self <agent-aid>
|
|
63
|
+
ec contact unblock <primaryId> --self <agent-aid>
|
|
64
|
+
ec contact list --blocked --self <agent-aid>
|
|
65
|
+
|
|
66
|
+
Options:
|
|
67
|
+
--self <agent-aid> 必填,本端 agent AID
|
|
68
|
+
--blocked list 必填,仅列出已拉黑联系人
|
|
69
|
+
--format json 输出 JSON
|
|
70
|
+
--help, -h 显示帮助`);
|
|
71
|
+
}
|
package/dist/cli/ctl-command.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolvePaths } from '../paths.js';
|
|
2
2
|
import { ipcQuery } from '../ipc.js';
|
|
3
|
-
import { isHelpFlag } from './help.js';
|
|
3
|
+
import { isHelpFlag, wantsHelp } from './help.js';
|
|
4
4
|
import { AGENT_DELEGATION_TOKEN_ENV } from '../core/auth/agent-delegation.js';
|
|
5
5
|
// ==================== Ctl ====================
|
|
6
6
|
const CTL_HELP = `用法: ec ctl <command> [args...]
|
|
@@ -30,7 +30,7 @@ export async function cmdCtl(args) {
|
|
|
30
30
|
process.exit(1);
|
|
31
31
|
}
|
|
32
32
|
// help 不需要连接服务。
|
|
33
|
-
if (isHelpFlag(args[0])) {
|
|
33
|
+
if (isHelpFlag(args[0]) || wantsHelp(args)) {
|
|
34
34
|
console.log(CTL_HELP);
|
|
35
35
|
return;
|
|
36
36
|
}
|