feat: 多层上下文压缩 + 多级权限管理系统
权限管理: - PermissionTypes: 权限行为/模式/规则/决策/选择类型系统 - PermissionSettings: 用户级/项目级/会话级权限持久化(settings.json) - PermissionRuleEngine: 多层规则引擎(deny→allow→readOnly→mode→dangerous→ASK) - DangerousPatterns: 危险shell命令检测(rm -rf, eval, exec等) - ReplSession: Y/A/N/D四选项权限确认UI - ConfigCommand: permission-mode/list/reset子命令 - AgentLoop: 集成规则引擎,PermissionChoice回调 上下文压缩: - TokenTracker: 上下文窗口监控(93%自动压缩/82%警告/98%阻塞) - MicroCompact: 微压缩,裁剪旧tool_result(无API调用) - SessionMemoryCompact: Session Memory压缩,AI摘要旧消息保留近期段 - FullCompact: 全量压缩+PTL重试(按API Round逐步丢弃) - AutoCompactManager: 压缩编排器(micro→session→full),含熔断机制 - CompactCommand: 改造为委托FullCompact - StatusLine: token使用百分比+颜色告警(绿→黄→红→闪烁) - AppConfig: 注册PermissionSettings/RuleEngine/AutoCompactManager Bean Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -84,10 +84,25 @@ public class StatusLine {
|
||||
// 模型名
|
||||
sb.append(" ").append(modelName);
|
||||
|
||||
// Token 用量
|
||||
// Token 用量 + 上下文窗口占比
|
||||
sb.append(" │ ↑").append(TokenTracker.formatTokens(inputTokens));
|
||||
sb.append(" ↓").append(TokenTracker.formatTokens(outputTokens));
|
||||
|
||||
// 上下文窗口使用百分比(带颜色)
|
||||
double usagePct = tokenTracker.getUsagePercentage();
|
||||
if (usagePct > 0) {
|
||||
String pctStr = String.format(" %.0f%%", usagePct * 100);
|
||||
var warningState = tokenTracker.getTokenWarningState();
|
||||
sb.append(AnsiStyle.RESET); // 先重置再着色
|
||||
sb.append(switch (warningState) {
|
||||
case NORMAL -> AnsiStyle.DIM + AnsiStyle.GREEN + pctStr;
|
||||
case WARNING -> AnsiStyle.BOLD + AnsiStyle.YELLOW + pctStr;
|
||||
case ERROR -> AnsiStyle.BOLD + AnsiStyle.RED + pctStr;
|
||||
case BLOCKING -> AnsiStyle.BOLD + AnsiStyle.RED + "⚠" + pctStr;
|
||||
});
|
||||
sb.append(AnsiStyle.RESET).append(AnsiStyle.DIM);
|
||||
}
|
||||
|
||||
// 费用
|
||||
if (cost > 0) {
|
||||
sb.append(String.format(" $%.4f", cost));
|
||||
|
||||
Reference in New Issue
Block a user