@bolloon/bolloon-agent 0.4.33 → 0.5.0
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/dist/agents/contacts/chain.js +27 -7
- package/dist/agents/execution-supervisor.js +493 -35
- package/dist/agents/external-events.js +35 -6
- package/dist/agents/gateway-group.js +100 -12
- package/dist/agents/goal-criteria.js +10 -3
- package/dist/agents/goal-flywheel/block-executor.js +346 -0
- package/dist/agents/goal-flywheel/continuation-decision.js +592 -0
- package/dist/agents/goal-flywheel/goal-change.js +754 -0
- package/dist/agents/goal-flywheel/index.js +26 -0
- package/dist/agents/goal-flywheel/memory-layers.js +227 -0
- package/dist/agents/goal-flywheel/run-closure.js +809 -0
- package/dist/agents/goal-flywheel/skill-candidate.js +628 -0
- package/dist/agents/goal-flywheel/types.js +329 -0
- package/dist/agents/goal-flywheel/wiring/change.js +288 -0
- package/dist/agents/goal-flywheel/wiring/closure.js +697 -0
- package/dist/agents/goal-flywheel/wiring/continuation.js +432 -0
- package/dist/agents/goal-flywheel/wiring/contract.js +270 -0
- package/dist/agents/goal-flywheel/wiring/index.js +26 -0
- package/dist/agents/goal-flywheel/wiring/monitor.js +254 -0
- package/dist/agents/goal-flywheel/wiring/seams.js +592 -0
- package/dist/agents/goal-flywheel/work-contract.js +478 -0
- package/dist/agents/goal-flywheel/work-monitor.js +488 -0
- package/dist/agents/goal-flywheel-wiring.js +1870 -0
- package/dist/agents/goal-state-reducer.js +406 -0
- package/dist/agents/goal-store.js +35 -1
- package/dist/agents/mobile-flywheel-view.js +144 -0
- package/dist/agents/mobile-task-actions-verify.js +74 -0
- package/dist/agents/mobile-task-actions.js +178 -0
- package/dist/agents/mobile-task-views.js +199 -0
- package/dist/agents/network-pulse.js +304 -18
- package/dist/agents/pi-sdk.js +75 -20
- package/dist/agents/run-store.js +18 -5
- package/dist/agents/skill-readiness.js +52 -10
- package/dist/agents/subagent-manager.js +209 -3
- package/dist/agents/task/task-runner.js +9 -3
- package/dist/agents/task-group.js +8 -51
- package/dist/agents/task-public-text.js +89 -0
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/tasks.js +350 -2
- package/dist/cli/identity-command.js +177 -0
- package/dist/cli/setup-wizard.js +71 -0
- package/dist/cli/update-commands.js +150 -24
- package/dist/cli-entry.js +12 -2
- package/dist/electron-build/agents/contacts/chain.js +26 -6
- package/dist/electron-build/agents/contacts/chain.js.map +1 -1
- package/dist/electron-build/agents/execution-supervisor.js +492 -34
- package/dist/electron-build/agents/execution-supervisor.js.map +1 -1
- package/dist/electron-build/agents/external-events.js +34 -5
- package/dist/electron-build/agents/external-events.js.map +1 -1
- package/dist/electron-build/agents/goal-criteria.js +10 -3
- package/dist/electron-build/agents/goal-criteria.js.map +1 -1
- package/dist/electron-build/agents/goal-flywheel/continuation-decision.js +598 -0
- package/dist/electron-build/agents/goal-flywheel/continuation-decision.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/goal-change.js +773 -0
- package/dist/electron-build/agents/goal-flywheel/goal-change.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/memory-layers.js +269 -0
- package/dist/electron-build/agents/goal-flywheel/memory-layers.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/run-closure.js +818 -0
- package/dist/electron-build/agents/goal-flywheel/run-closure.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/skill-candidate.js +642 -0
- package/dist/electron-build/agents/goal-flywheel/skill-candidate.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/types.js +333 -0
- package/dist/electron-build/agents/goal-flywheel/types.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/change.js +294 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/change.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/closure.js +742 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/closure.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/continuation.js +444 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/continuation.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/contract.js +279 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/contract.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/index.js +111 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/index.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/monitor.js +264 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/monitor.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/seams.js +612 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/seams.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/work-contract.js +488 -0
- package/dist/electron-build/agents/goal-flywheel/work-contract.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/work-monitor.js +501 -0
- package/dist/electron-build/agents/goal-flywheel/work-monitor.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel-wiring.js +1962 -0
- package/dist/electron-build/agents/goal-flywheel-wiring.js.map +1 -0
- package/dist/electron-build/agents/goal-state-reducer.js +414 -0
- package/dist/electron-build/agents/goal-state-reducer.js.map +1 -0
- package/dist/electron-build/agents/goal-store.js +35 -1
- package/dist/electron-build/agents/goal-store.js.map +1 -1
- package/dist/electron-build/agents/network-pulse.js +307 -19
- package/dist/electron-build/agents/network-pulse.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk.js +74 -19
- package/dist/electron-build/agents/pi-sdk.js.map +1 -1
- package/dist/electron-build/agents/run-store.js +20 -5
- package/dist/electron-build/agents/run-store.js.map +1 -1
- package/dist/electron-build/agents/skill-readiness.js +52 -9
- package/dist/electron-build/agents/skill-readiness.js.map +1 -1
- package/dist/electron-build/agents/task/task-runner.js +8 -2
- package/dist/electron-build/agents/task/task-runner.js.map +1 -1
- package/dist/electron-build/orbitdb/cid-database.js +83 -17
- package/dist/electron-build/orbitdb/cid-database.js.map +1 -1
- package/dist/electron-build/orbitdb/ipfs-node.js +31 -2
- package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -1
- package/dist/electron-build/utils/dual-source.js +471 -0
- package/dist/electron-build/utils/dual-source.js.map +1 -0
- package/dist/electron-build/utils/update-manager.js +331 -57
- package/dist/electron-build/utils/update-manager.js.map +1 -1
- package/dist/electron-build/utils/update-state.js +16 -1
- package/dist/electron-build/utils/update-state.js.map +1 -1
- package/dist/electron-build/utils/version-info.js +82 -2
- package/dist/electron-build/utils/version-info.js.map +1 -1
- package/dist/index.js +103 -12
- package/dist/ios/chain-explorer.js +617 -0
- package/dist/ios/explorer.html +163 -0
- package/dist/ios/index.html +96 -0
- package/dist/ios/mobile-agent.js +2 -2
- package/dist/ios/mobile-contacts.js +329 -0
- package/dist/ios/mobile-core.js +1379 -226
- package/dist/ios/mobile-privacy.js +185 -0
- package/dist/ios/mobile.css +19 -0
- package/dist/ios/mobile.html +96 -0
- package/dist/ios/mobile.js +706 -7
- package/dist/ios/routes-chain-index.js +108 -0
- package/dist/ios/routes-contacts.js +420 -0
- package/dist/ios/routes-onchain-trade.js +99 -0
- package/dist/ios/routes-x402-info.js +1 -0
- package/dist/ios/server.js +762 -0
- package/dist/ios/task-frame-server.js +211 -0
- package/dist/orbitdb/cid-database.js +81 -16
- package/dist/orbitdb/ipfs-node.js +31 -2
- package/dist/utils/dual-source.js +426 -0
- package/dist/utils/update-cli.js +16 -21
- package/dist/utils/update-health.js +35 -5
- package/dist/utils/update-manager.js +329 -57
- package/dist/utils/update-state.js +16 -1
- package/dist/utils/version-info.js +75 -1
- package/dist/web/mobile-contacts.js +44 -11
- package/dist/web/mobile-core.js +1197 -513
- package/dist/web/mobile-tasks.js +339 -0
- package/dist/web/mobile.css +19 -0
- package/dist/web/mobile.html +64 -0
- package/dist/web/mobile.js +531 -1
- package/dist/web/routes-mobile-tasks.js +353 -0
- package/dist/web/server.js +163 -4
- package/package.json +3 -1
package/dist/index.js
CHANGED
|
@@ -1598,6 +1598,7 @@ async function processInputInner(input, comm) {
|
|
|
1598
1598
|
try {
|
|
1599
1599
|
const { getSupervisor } = await import('./agents/execution-supervisor.js');
|
|
1600
1600
|
const { wakeReport, listRunnableGoals, formatGoalLine } = await import('./agents/goal-store.js');
|
|
1601
|
+
const { USER_VISIBLE_STATE_LABELS } = await import('./agents/goal-flywheel/types.js');
|
|
1601
1602
|
const { runnable, skipped } = await listRunnableGoals({ now: Date.now() });
|
|
1602
1603
|
const st = getSupervisor().status();
|
|
1603
1604
|
appendLine(`${C_DIM}supervisor: owner=${st.owner} running=${st.running ? 'yes' : 'no'} tick=${st.tickIntervalMs}ms lease=${st.leaseTtlMs}ms dryRun=${st.dryRun ? 'yes' : 'no'} ticks=${st.ticks}${RESET}`);
|
|
@@ -1637,10 +1638,23 @@ async function processInputInner(input, comm) {
|
|
|
1637
1638
|
const sup = new ExecutionSupervisor({ runner: runner, maxPerTick: 1, log: (m) => appendLine(`${C_DIM}${m}${RESET}`) });
|
|
1638
1639
|
const rep = await sup.tickOnce();
|
|
1639
1640
|
appendLine(`${C_ACCENT}调度周期 #${rep.tick}${RESET} 认领 ${rep.claimed.length} · 执行 ${rep.executed.length}${rep.skipped.length ? ` · 跳过 ${rep.skipped.length}` : ''}`);
|
|
1641
|
+
// 2026-09-25 (飞轮接线): 把飞轮的**判断**如实打出来 —— 为什么跑/为什么停, 用的是哪一类用户可见态
|
|
1640
1642
|
for (const s of rep.skipped.slice(0, 6))
|
|
1641
1643
|
appendLine(` ${C_DIM}跳过 ${s.goalId}: ${s.reason}${RESET}`);
|
|
1642
1644
|
for (const e of rep.executed)
|
|
1643
1645
|
appendLine(` ▶ ${e.goalId} → run=${e.runId || '-'} ${e.status || ''}${e.error ? ` (${e.error})` : ''}`);
|
|
1646
|
+
for (const f of rep.flywheel) {
|
|
1647
|
+
const zh = USER_VISIBLE_STATE_LABELS[f.visibleState]?.zh || f.visibleState;
|
|
1648
|
+
appendLine(` ${f.runnable ? C_DIM : C_WARN}飞轮 ${f.goalId}: ${f.decision}/${f.state} 无进展连续 ${f.noProgressStreak} 轮 · 用户可见态=${zh} · ${f.reason}${RESET}`);
|
|
1649
|
+
}
|
|
1650
|
+
for (const c of rep.closures) {
|
|
1651
|
+
appendLine(` ${C_DIM}收尾 ${c.goalId}/${c.runId}: ${c.steps} 步 → ${c.decision} (memory ${c.memories} · skill 候选 ${c.candidates})${RESET}`);
|
|
1652
|
+
appendLine(` ${C_DIM}用户汇报: ${c.reportPath}${RESET}`);
|
|
1653
|
+
}
|
|
1654
|
+
for (const b of rep.blocks)
|
|
1655
|
+
appendLine(` ${C_WARN}阻塞 ${b.goalId}/${b.workId}: ${b.kind} → ${b.action} — ${b.note}${RESET}`);
|
|
1656
|
+
for (const w of rep.workContracts)
|
|
1657
|
+
appendLine(` ${C_DIM}工作合同已签发 ${w.goalId}: workId=${w.workId} 能力=${w.capability}${RESET}`);
|
|
1644
1658
|
return;
|
|
1645
1659
|
}
|
|
1646
1660
|
const rows = await wakeReport();
|
|
@@ -1648,8 +1662,12 @@ async function processInputInner(input, comm) {
|
|
|
1648
1662
|
appendLine(`${C_DIM}还没有目标。${RESET}`);
|
|
1649
1663
|
return;
|
|
1650
1664
|
}
|
|
1651
|
-
|
|
1652
|
-
|
|
1665
|
+
// 界面只上屏**用户可见态** (六类); 内部状态缩到 dim 尾巴里, 只作为排障线索
|
|
1666
|
+
for (const r of rows.slice(0, 12)) {
|
|
1667
|
+
const zh = USER_VISIBLE_STATE_LABELS[r.visible]?.zh || r.visible || r.status;
|
|
1668
|
+
appendLine(` ${r.goalId} [${zh}] 唤醒: ${r.wake}${r.nextAction ? ` 下一步: ${String(r.nextAction).slice(0, 60)}` : ''}${r.lease ? ` (lease ${r.lease})` : ''}`);
|
|
1669
|
+
appendLine(`${C_DIM} (内部: status=${r.status} visible=${r.visible})${RESET}`);
|
|
1670
|
+
}
|
|
1653
1671
|
if (runnable.length) {
|
|
1654
1672
|
appendLine(`${C_DIM}现在可推进:${RESET}`);
|
|
1655
1673
|
for (const g of runnable.slice(0, 5))
|
|
@@ -3112,7 +3130,53 @@ const AVAILABLE_TOOLS = [
|
|
|
3112
3130
|
{ name: 'update_check', description: '检查 npm 包更新', example: '--update-check' },
|
|
3113
3131
|
{ name: 'update_now', description: '立即更新到最新版本', example: '--update-now [package]' },
|
|
3114
3132
|
];
|
|
3115
|
-
|
|
3133
|
+
/**
|
|
3134
|
+
* 给 `--delegate` 找长期目标上下文 (P5 验收修复)。
|
|
3135
|
+
*
|
|
3136
|
+
* `SubAgentManager.delegateTask` 只在拿到 `goalId` 时才签工作合同 (`issueWorkContractFor`:
|
|
3137
|
+
* "没有长期目标就没有合同上下文"), 而合同是"回报必须带逐条证据"这道门的唯一凭据。
|
|
3138
|
+
*
|
|
3139
|
+
* ★ 之前 CLI 是唯一的生产派遣调用方, **不传 goalId** ⇒ 真路径上一条合同都不签:
|
|
3140
|
+
* 运行时复现过"回一句『全部做完了』就把任务标成 completed, 父目标上什么都没留下"。
|
|
3141
|
+
*
|
|
3142
|
+
* 两种入口:
|
|
3143
|
+
* - `--goal <goalId>`: 用既有目标 (目标不存在 → 抛错, 让调用方如实报告"没签合同");
|
|
3144
|
+
* - 没给: 为这次委派**建一个目标** (`createdBy='cli:delegate'`) 并进"等外部回报"态 ——
|
|
3145
|
+
* 委派总是有目标上下文, 合同门不再空转。
|
|
3146
|
+
*
|
|
3147
|
+
* 为什么是 `awaiting_external` + `autoContinue=false`: 这次委派的执行者是**子 Agent**, 不是本节点
|
|
3148
|
+
* harness。`awaiting_external` 会被 Supervisor 明确跳过 (`listRunnableGoals`: "等外部事件, 不重复
|
|
3149
|
+
* 发送"), 因此不会出现"同一件事被 harness 和子 Agent 各跑一遍"; 同时"没拿到带证据的回报前不自动
|
|
3150
|
+
* 继续"。
|
|
3151
|
+
*/
|
|
3152
|
+
async function ensureDelegateGoal(explicitGoalId, taskDesc, caps) {
|
|
3153
|
+
const { createGoal, readGoal, setContinuation, updateGoal } = await import('./agents/goal-store.js');
|
|
3154
|
+
if (explicitGoalId) {
|
|
3155
|
+
const g = await readGoal(explicitGoalId);
|
|
3156
|
+
if (!g)
|
|
3157
|
+
throw new Error(`--goal ${explicitGoalId} 不存在 (不签合同)`);
|
|
3158
|
+
return { goalId: g.goalId, note: `合同签在既有目标 ${g.goalId} (状态 ${g.status}) 上` };
|
|
3159
|
+
}
|
|
3160
|
+
const g = await createGoal({
|
|
3161
|
+
objective: `【委派】${taskDesc}`,
|
|
3162
|
+
successCriteria: [taskDesc],
|
|
3163
|
+
createdBy: 'cli:delegate',
|
|
3164
|
+
});
|
|
3165
|
+
await updateGoal(g.goalId, { status: 'awaiting_external' });
|
|
3166
|
+
await setContinuation(g.goalId, {
|
|
3167
|
+
state: 'awaiting_external',
|
|
3168
|
+
wakeReason: 'awaiting_external',
|
|
3169
|
+
autoContinue: false,
|
|
3170
|
+
needsExternal: `等子 Agent 「${caps.join('/')}」交回带逐条证据的回报 (回报核验不过不算完成)`,
|
|
3171
|
+
});
|
|
3172
|
+
return {
|
|
3173
|
+
goalId: g.goalId,
|
|
3174
|
+
note: `已为本次委派建目标 ${g.goalId} (状态=等外部回复: 等子 Agent 的带证据回报)`,
|
|
3175
|
+
};
|
|
3176
|
+
}
|
|
3177
|
+
async function runToolCommand(tool, args, outputJson, comm, model, prompt,
|
|
3178
|
+
/** `--goal <goalId>` (P5 验收修复: 给 `--delegate` 指目标上下文) */
|
|
3179
|
+
goalFlag) {
|
|
3116
3180
|
const a = await getAgent();
|
|
3117
3181
|
const startTime = Date.now();
|
|
3118
3182
|
let response;
|
|
@@ -3572,18 +3636,39 @@ async function runToolCommand(tool, args, outputJson, comm, model, prompt) {
|
|
|
3572
3636
|
case 'delegate': {
|
|
3573
3637
|
const [taskDesc, ...requiredCaps] = args;
|
|
3574
3638
|
if (!taskDesc) {
|
|
3575
|
-
response = '用法: --delegate <任务描述> [能力要求1] [能力要求2] ...';
|
|
3639
|
+
response = '用法: --delegate <任务描述> [能力要求1] [能力要求2] ... [--goal <goalId>]';
|
|
3576
3640
|
error = response;
|
|
3577
3641
|
break;
|
|
3578
3642
|
}
|
|
3643
|
+
const caps = requiredCaps.length > 0 ? requiredCaps : ['general'];
|
|
3579
3644
|
const manager = await createSubAgentManager();
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3645
|
+
// ★ 2026-09-25 (P5 验收修复): 派遣**必须**带 goalId。
|
|
3646
|
+
// `SubAgentManager` 只在拿到 goalId 时才签工作合同 (没有长期目标就没有合同上下文);
|
|
3647
|
+
// 而在真实运行里复现过: 不签合同 ⇒ 回报核验这道门完全不生效 ——
|
|
3648
|
+
// 一句"全部做完了"就能把任务标成 completed, 父 Goal 上也留不下"等回报"的痕迹。
|
|
3649
|
+
// 显式 `--goal <goalId>` (校验目标存在) 优先; 没给就为这次委派**建一个目标**,
|
|
3650
|
+
// 合同门在生产路径上不再空转 (目标进"等外部回报"态, 见 ensureDelegateGoal)。
|
|
3651
|
+
let goalId = '';
|
|
3652
|
+
let goalNote = '';
|
|
3653
|
+
try {
|
|
3654
|
+
const g = await ensureDelegateGoal(goalFlag || '', taskDesc, caps);
|
|
3655
|
+
goalId = g.goalId;
|
|
3656
|
+
goalNote = g.note;
|
|
3657
|
+
}
|
|
3658
|
+
catch (err) {
|
|
3659
|
+
goalNote = `目标上下文准备失败 → 本次不签工作合同 (合同门不生效): ${String(err?.message || err).slice(0, 160)}`;
|
|
3660
|
+
}
|
|
3661
|
+
const { task, agent, workContract } = await manager.delegateTask('cli-user', taskDesc, caps, 'normal', undefined, goalId ? { goalId, successCriteria: [taskDesc] } : undefined);
|
|
3662
|
+
const head = agent
|
|
3663
|
+
? `✅ 任务已委派:\n 任务ID: ${task.id}\n 执行Agent: ${agent.name} (${agent.id})\n 状态: ${task.status}`
|
|
3664
|
+
: `⚠️ 未找到合适的Agent,任务已创建:\n 任务ID: ${task.id}\n 状态: ${task.status}`;
|
|
3665
|
+
if (workContract) {
|
|
3666
|
+
response = `${head}\n ${goalNote}\n 工作合同: ${workContract.workId} (目标 ${goalId})\n`
|
|
3667
|
+
+ ` 完成判据 ${workContract.successCriteria.length} 条 · 必带证据 ${workContract.requiredEvidence.length} 条\n`
|
|
3668
|
+
+ ` ⚠️ 回报必须按判据逐条给证据: 一句"全部做完了"**不会**被接受为完成`;
|
|
3584
3669
|
}
|
|
3585
3670
|
else {
|
|
3586
|
-
response =
|
|
3671
|
+
response = `${head}\n ⚠️ 未签工作合同: ${goalNote || '没有目标上下文'} —— 无合同的回报不做证据核验`;
|
|
3587
3672
|
}
|
|
3588
3673
|
break;
|
|
3589
3674
|
}
|
|
@@ -3985,7 +4070,7 @@ async function runNonInteractive(args, comm) {
|
|
|
3985
4070
|
outputBuffer += params.join(' ') + '\n';
|
|
3986
4071
|
};
|
|
3987
4072
|
if (tool) {
|
|
3988
|
-
await runToolCommand(tool, toolArgs, false, comm, args.model, prompt);
|
|
4073
|
+
await runToolCommand(tool, toolArgs, false, comm, args.model, prompt, args.goal);
|
|
3989
4074
|
}
|
|
3990
4075
|
else if (prompt) {
|
|
3991
4076
|
const a = await getAgent();
|
|
@@ -4025,7 +4110,7 @@ async function runNonInteractive(args, comm) {
|
|
|
4025
4110
|
return;
|
|
4026
4111
|
}
|
|
4027
4112
|
if (tool) {
|
|
4028
|
-
await runToolCommand(tool, toolArgs, !!json, comm, args.model, prompt);
|
|
4113
|
+
await runToolCommand(tool, toolArgs, !!json, comm, args.model, prompt, args.goal);
|
|
4029
4114
|
}
|
|
4030
4115
|
else if (prompt) {
|
|
4031
4116
|
const startTime = Date.now();
|
|
@@ -4186,6 +4271,10 @@ function parseArgs() {
|
|
|
4186
4271
|
}
|
|
4187
4272
|
result.toolArgs = delArgs;
|
|
4188
4273
|
break;
|
|
4274
|
+
// ★ 2026-09-25 (P5 验收修复): 给 --delegate 指定长期目标 (有 goalId 才签工作合同)
|
|
4275
|
+
case '--goal':
|
|
4276
|
+
result.goal = args[++i];
|
|
4277
|
+
break;
|
|
4189
4278
|
case '--engine':
|
|
4190
4279
|
case '-e':
|
|
4191
4280
|
result.engine = args[++i];
|
|
@@ -4389,7 +4478,9 @@ function printHelp() {
|
|
|
4389
4478
|
# SubAgent 管理
|
|
4390
4479
|
--agents 列出所有 SubAgent
|
|
4391
4480
|
--register-agent <name> [cap1] [cap2]... 注册新 SubAgent
|
|
4392
|
-
--delegate <任务描述> [能力要求...]
|
|
4481
|
+
--delegate <任务描述> [能力要求...] [--goal <goalId>]
|
|
4482
|
+
委派任务给最佳 Agent (签工作合同: 回报必须带逐条证据;
|
|
4483
|
+
--goal 不给则为本次委派建一个目标)
|
|
4393
4484
|
|
|
4394
4485
|
# 全局共享上下文
|
|
4395
4486
|
--context 显示全局共享上下文摘要
|