Skip to content

Commit 77f88ab

Browse files
committed
fix: update agent terminate mode enum and approval mode documentation
- Changed AgentTerminateMode enum to SubagentTerminateMode with updated values (CANCELLED instead of ABORTED) - Removed ERROR_NO_COMPLETE_TASK_CALL termination reason - Updated approval mode count from 3 to 4 and added PLAN mode - Adjusted approval mode enum values and descriptions - Updated related UI components to reflect new termination modes and approval modes - Fixed documentation references to point to correct file paths
1 parent 53f7498 commit 77f88ab

4 files changed

Lines changed: 25 additions & 28 deletions

File tree

src/pages/AgentFramework.tsx

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function QuickSummary({ isExpanded, onToggle }: { isExpanded: boolean; onToggle:
4545
<div className="text-xs text-[var(--text-muted)]">Agent 类型</div>
4646
</div>
4747
<div className="bg-[var(--bg-card)] rounded-lg p-3 text-center border border-[var(--border-subtle)]">
48-
<div className="text-2xl font-bold text-[var(--terminal-green)]">6</div>
48+
<div className="text-2xl font-bold text-[var(--terminal-green)]">5</div>
4949
<div className="text-xs text-[var(--text-muted)]">终止模式</div>
5050
</div>
5151
<div className="bg-[var(--bg-card)] rounded-lg p-3 text-center border border-[var(--border-subtle)]">
@@ -156,13 +156,13 @@ export function AgentFramework() {
156156
style TURN fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px`;
157157

158158
const agentTypesCode = `// Agent 终止模式
159-
export enum AgentTerminateMode {
159+
// packages/core/src/subagents/types.ts:172-193
160+
export enum SubagentTerminateMode {
160161
ERROR = 'ERROR', // 执行错误
161162
TIMEOUT = 'TIMEOUT', // 超时
162163
GOAL = 'GOAL', // 成功完成
163164
MAX_TURNS = 'MAX_TURNS', // 达到轮次上限
164-
ABORTED = 'ABORTED', // 被取消
165-
ERROR_NO_COMPLETE_TASK_CALL = 'ERROR_NO_COMPLETE_TASK_CALL', // 未调用完成工具
165+
CANCELLED = 'CANCELLED', // 被取消
166166
}
167167
168168
// 基础 Agent 定义
@@ -855,15 +855,10 @@ this.emitActivity('ERROR', { error: errorMessage, context: 'tool_call' });`;
855855
<td className="py-2 px-3 text-red-400"></td>
856856
</tr>
857857
<tr className="border-b border-[var(--border-subtle)]/50">
858-
<td className="py-2 px-3 text-red-400 font-bold">ABORTED</td>
858+
<td className="py-2 px-3 text-red-400 font-bold">CANCELLED</td>
859859
<td className="py-2 px-3 text-[var(--text-secondary)]">用户取消 (AbortSignal)</td>
860860
<td className="py-2 px-3 text-red-400"></td>
861861
</tr>
862-
<tr className="border-b border-[var(--border-subtle)]/50">
863-
<td className="py-2 px-3 text-red-400 font-bold">ERROR_NO_COMPLETE_TASK_CALL</td>
864-
<td className="py-2 px-3 text-[var(--text-secondary)]">停止调用工具但未完成</td>
865-
<td className="py-2 px-3 text-[var(--terminal-green)]">✓ 60秒恢复期</td>
866-
</tr>
867862
</tbody>
868863
</table>
869864
</div>

src/pages/ApprovalModeSystem.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ function QuickSummary({ isExpanded, onToggle }: { isExpanded: boolean; onToggle:
3636
<div className="bg-[var(--bg-terminal)]/50 rounded-lg p-4 border-l-4 border-[var(--purple)]">
3737
<p className="text-[var(--text-primary)] font-medium">
3838
<span className="text-[var(--purple)] font-bold">一句话:</span>
39-
通过 3 种模式(Default → Auto-Edit → YOLO)控制 AI 执行工具的权限,平衡安全性与便利性
39+
通过 4 种模式(Plan + Default → Auto-Edit → YOLO)控制 AI 执行工具的权限,平衡安全性与便利性
4040
</p>
4141
</div>
4242

4343
{/* 关键数字 */}
4444
<div className="grid grid-cols-2 md:grid-cols-4 gap-3">
4545
<div className="bg-[var(--bg-card)] rounded-lg p-3 text-center border border-[var(--border-subtle)]">
46-
<div className="text-2xl font-bold text-[var(--purple)]">3</div>
46+
<div className="text-2xl font-bold text-[var(--purple)]">4</div>
4747
<div className="text-xs text-[var(--text-muted)]">审批模式</div>
4848
</div>
4949
<div className="bg-[var(--bg-card)] rounded-lg p-3 text-center border border-[var(--border-subtle)]">
@@ -173,17 +173,18 @@ export function ApprovalModeSystem() {
173173
note right of scheduled : 已排期
174174
note right of executing : 执行中`;
175175

176-
const approvalModeEnum = `// packages/core/src/policy/types.ts:45-49
176+
const approvalModeEnum = `// packages/core/src/config/config.ts:102-107
177177
178178
export enum ApprovalMode {
179+
PLAN = 'plan', // 计划模式:只生成计划,不执行
179180
DEFAULT = 'default', // 默认模式:只读自动,修改需确认
180-
AUTO_EDIT = 'autoEdit', // 自动编辑:文件编辑自动批准
181+
AUTO_EDIT = 'auto-edit', // 自动编辑:文件编辑自动批准
181182
YOLO = 'yolo', // YOLO模式:所有工具自动执行
182183
}
183184
184-
// 模式切换顺序 (Shift+Tab)
185+
// 模式切换顺序 (Shift+Tab):跳过 PLAN,循环 DEFAULT → AUTO_EDIT → YOLO
185186
export const APPROVAL_MODES = Object.values(ApprovalMode);
186-
// ['default', 'autoEdit', 'yolo']`;
187+
// ['plan', 'default', 'auto-edit', 'yolo']`;
187188

188189
const setApprovalModeCode = `// PolicyEngine.setApprovalMode
189190
// packages/core/src/policy/policy-engine.ts:132-134
@@ -999,16 +1000,17 @@ priority = 10`}
9991000
<Layer title="为什么这样设计审批系统?" icon="💡">
10001001
<div className="space-y-4">
10011002
<div className="bg-[var(--bg-terminal)]/50 rounded-lg p-4 border-l-4 border-[var(--purple)]">
1002-
<h4 className="text-[var(--purple)] font-bold mb-2">🎚️ 为什么需要 3 种模式?</h4>
1003+
<h4 className="text-[var(--purple)] font-bold mb-2">🎚️ 为什么需要 4 种模式?</h4>
10031004
<div className="text-sm text-[var(--text-secondary)] space-y-2">
1004-
<p><strong>决策</strong>:提供 Default → Auto-Edit → YOLO 三个渐进式信任级别</p>
1005+
<p><strong>决策</strong>:提供 Plan + Default → Auto-Edit → YOLO 四种模式</p>
10051006
<p><strong>原因</strong></p>
10061007
<ul className="list-disc pl-5 space-y-1">
1008+
<li><strong>Plan 模式</strong>:只生成计划不执行,适合代码审查和规划阶段</li>
10071009
<li><strong>场景多样</strong>:日常开发 vs 快速原型 vs 完全自动有不同的安全需求</li>
10081010
<li><strong>渐进信任</strong>:用户可以从保守模式开始,逐步放宽</li>
10091011
<li><strong>可选粒度</strong>:Auto-Edit 精准区分读取/编辑,YOLO 则完全自动</li>
10101012
</ul>
1011-
<p><strong>权衡</strong>模式越多用户越需要学习,但 3 种已覆盖常见场景</p>
1013+
<p><strong>权衡</strong>Shift+Tab 只在 Default/Auto-Edit/YOLO 间切换,Plan 通过 --plan 启动</p>
10121014
</div>
10131015
</div>
10141016

src/pages/ChatCompression.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function QuickSummary({ isExpanded, onToggle }: { isExpanded: boolean; onToggle:
3939

4040
<div className="grid grid-cols-2 md:grid-cols-4 gap-3">
4141
<div className="bg-[var(--bg-card)] rounded-lg p-3 text-center border border-[var(--border-subtle)]">
42-
<div className="text-2xl font-bold text-[var(--cyber-blue)]">70%</div>
42+
<div className="text-2xl font-bold text-[var(--cyber-blue)]">50%</div>
4343
<div className="text-xs text-[var(--text-muted)]">压缩触发阈值</div>
4444
</div>
4545
<div className="bg-[var(--bg-card)] rounded-lg p-3 text-center border border-[var(--border-subtle)]">
@@ -93,7 +93,7 @@ export function ChatCompression() {
9393
subgraph Input["输入检测"]
9494
HISTORY[Chat History]
9595
TOKEN[Token 计算]
96-
CHECK{超过 70% 阈值?}
96+
CHECK{超过 50% 阈值?}
9797
end
9898
9999
subgraph Split["分割计算"]
@@ -134,13 +134,13 @@ export function ChatCompression() {
134134
const thresholdDiagram = `flowchart LR
135135
subgraph Thresholds["Token 阈值"]
136136
TOTAL["总 Token 限制<br/>MAX_TOKENS"]
137-
TRIGGER["触发阈值 70%<br/>COMPRESSION_TOKEN_THRESHOLD"]
137+
TRIGGER["触发阈值 50%<br/>COMPRESSION_TOKEN_THRESHOLD"]
138138
PRESERVE["保留比例 30%<br/>COMPRESSION_PRESERVE_THRESHOLD"]
139139
end
140140
141141
subgraph Example["示例: 128K Token"]
142142
E_TOTAL["128,000 总量"]
143-
E_TRIGGER["89,600 触发压缩"]
143+
E_TRIGGER["64,000 触发压缩"]
144144
E_PRESERVE["38,400 保留"]
145145
end
146146
@@ -152,7 +152,7 @@ export function ChatCompression() {
152152
style Example fill:#1a1a2e,stroke:#00ff88`;
153153

154154
const constantsCode = `// 压缩阈值常量
155-
export const COMPRESSION_TOKEN_THRESHOLD = 0.7; // 超过 70% 触发压缩
155+
export const COMPRESSION_TOKEN_THRESHOLD = 0.5; // 超过 50% 触发压缩
156156
export const COMPRESSION_PRESERVE_THRESHOLD = 0.3; // 保留最近 30%
157157
158158
// 压缩状态枚举
@@ -379,7 +379,7 @@ async function runConversationLoop(chat: Chat) {
379379
<div className="text-[var(--cyber-blue)] font-bold mb-2">1️⃣ 检测阶段</div>
380380
<ul className="text-sm text-[var(--text-secondary)] space-y-1">
381381
<li>• 计算当前历史 Token 数</li>
382-
<li>• 与 70% 阈值比较</li>
382+
<li>• 与 50% 阈值比较</li>
383383
<li>• 决定是否需要压缩</li>
384384
</ul>
385385
</div>
@@ -414,9 +414,9 @@ async function runConversationLoop(chat: Chat) {
414414
<div className="text-sm text-[var(--text-secondary)] space-y-2">
415415
<p>假设模型上下文窗口为 <strong>128,000 tokens</strong></p>
416416
<ul className="list-disc list-inside space-y-1 ml-2">
417-
<li><strong>触发阈值</strong>:128,000 × 0.7 = 89,600 tokens</li>
417+
<li><strong>触发阈值</strong>:128,000 × 0.5 = 64,000 tokens</li>
418418
<li><strong>保留目标</strong>:128,000 × 0.3 = 38,400 tokens</li>
419-
<li><strong>压缩目标</strong>89,600 - 38,400 = 51,200 tokens → 摘要</li>
419+
<li><strong>压缩目标</strong>64,000 - 38,400 = 25,600 tokens → 摘要</li>
420420
</ul>
421421
</div>
422422
</div>

src/pages/StartHere.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export function StartHere({ onNavigate }: StartHereProps) {
7474
{ term: 'MessageBus', definition: '发布/订阅消息总线 - 解耦异步通信', category: 'event' },
7575
{ term: 'ModelRouter', definition: '智能模型路由 - Flash/Pro 策略链选择', category: 'routing' },
7676
{ term: 'Agent', definition: '子代理框架 - Local(TOML 定义)/ Remote(A2A 协议)', category: 'agent' },
77-
{ term: 'ApprovalMode', definition: '审批级别:Default/AutoEdit/YOLO(3 种模式)', category: 'security' },
77+
{ term: 'ApprovalMode', definition: '审批级别:Plan/Default/AutoEdit/YOLO(4 种模式)', category: 'security' },
7878
{ term: 'MCP', definition: 'Model Context Protocol - 工具动态注册协议', category: 'extension' },
7979
];
8080

0 commit comments

Comments
 (0)