feat: 升级至 v0.2.1 — 流式渲染修复、安全增强、工具自动执行
流式渲染修复: - runId 机制防止 abort 后旧流事件污染新 run - run lock 防止并发 run 污染引擎状态 - abort race 提前退出工具执行等待 - TERMINATED 状态通过 stateChange 发射 - tool_call_delta 流式参数拼接 + pending 占位替换 - 首轮卡片创建路径统一,traceStep 按 ID 精确匹配 - compressed 事件转发为 toast 通知 安全增强: - ConfirmationHook 支持持久化自动执行(跨会话) - 设置面板新增自动执行工具管理 UI - SandboxManager 双重安全校验 fail-closed - 审计日志链式哈希防篡改 - PromptInjectionDefender 中文注入标记清理 - scanCode 28 模式 + base64/$() 检测 - validatePath realpathSync 防符号链接逃逸 - code-search 使用 execFile 防命令注入 新增工具: - file_editor、code_search、task_manager、diff_viewer 其他: - Agent Loop 加 PARSING/REFLECTING 状态 + 指数退避重试 - MemoryManager TF-IDF 语义检索 - run_command Windows 中文编码修复(chcp 65001) - 版本号 0.2.0 → 0.2.1
This commit is contained in:
Vendored
+97
-1
@@ -59,7 +59,13 @@ interface MetonaAgentAPI {
|
||||
/** 发送 MetonaMessage(IR 类型)+ sessionId 到主进程 */
|
||||
sendMessage: (message: MetonaMessageInput, sessionId: string) => Promise<{ success: boolean }>;
|
||||
onStreamEvent: (callback: (event: MetonaStreamEventData) => void) => () => void;
|
||||
onStateChange: (callback: (state: { sessionId: string; state: string }) => void) => () => void;
|
||||
onStateChange: (callback: (state: {
|
||||
sessionId: string | null;
|
||||
iteration: number;
|
||||
state: string;
|
||||
previous: string;
|
||||
current: string;
|
||||
}) => void) => () => void;
|
||||
abortSession: (sessionId: string) => Promise<{ success: boolean }>;
|
||||
onProviderSwitched: (callback: (data: { from?: string; to?: string; reason?: string }) => void) => () => void;
|
||||
}
|
||||
@@ -93,6 +99,7 @@ interface MetonaSessionsAPI {
|
||||
timestamp: number;
|
||||
}>>;
|
||||
pin: (sessionId: string, pinned: boolean) => Promise<{ success: boolean }>;
|
||||
archive: (sessionId: string, archived: boolean) => Promise<{ success: boolean }>;
|
||||
deleteMessage: (messageId: string) => Promise<{ success: boolean }>;
|
||||
clearMessages: (sessionId: string) => Promise<{ success: boolean }>;
|
||||
saveTrace: (sessionId: string, data: { traceSteps: unknown[]; tokenUsage: unknown }) => Promise<{ success: boolean }>;
|
||||
@@ -142,6 +149,12 @@ interface MetonaMemoryAPI {
|
||||
type?: 'episodic' | 'semantic' | 'working';
|
||||
minImportance?: number;
|
||||
}) => Promise<MetonaMemorySearchResult[]>;
|
||||
listAll: (options?: { type?: string; limit?: number }) => Promise<{
|
||||
success: boolean;
|
||||
data?: { episodic?: unknown[]; semantic?: unknown[]; working?: unknown[] };
|
||||
error?: string;
|
||||
}>;
|
||||
delete: (type: string, id: string) => Promise<{ success: boolean; error?: string }>;
|
||||
}
|
||||
|
||||
// ===== Config API =====
|
||||
@@ -210,6 +223,86 @@ interface MetonaDataAPI {
|
||||
clearAuditLogs: () => Promise<{ success: boolean; error?: string }>;
|
||||
}
|
||||
|
||||
// ===== v0.2.0: Tasks API =====
|
||||
|
||||
interface MetonaTask {
|
||||
id: string;
|
||||
session_id: string;
|
||||
title: string;
|
||||
description: string;
|
||||
status: 'pending' | 'in_progress' | 'completed' | 'blocked' | 'cancelled';
|
||||
priority: 'low' | 'medium' | 'high' | 'critical';
|
||||
parent_id: string | null;
|
||||
assigned_to: string | null;
|
||||
order_idx: number;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
completed_at: number | null;
|
||||
}
|
||||
|
||||
interface MetonaTasksAPI {
|
||||
list: (sessionId?: string) => Promise<{ success: boolean; data: MetonaTask[] }>;
|
||||
create: (data: {
|
||||
sessionId: string;
|
||||
title: string;
|
||||
description?: string;
|
||||
priority?: string;
|
||||
parentId?: string;
|
||||
}) => Promise<{ success: boolean; id?: string; error?: string }>;
|
||||
update: (
|
||||
id: string,
|
||||
updates: {
|
||||
title?: string;
|
||||
description?: string;
|
||||
status?: string;
|
||||
priority?: string;
|
||||
assignedTo?: string;
|
||||
},
|
||||
) => Promise<{ success: boolean; error?: string }>;
|
||||
delete: (id: string) => Promise<{ success: boolean; error?: string }>;
|
||||
}
|
||||
|
||||
// ===== v0.2.0: Audit API =====
|
||||
|
||||
interface MetonaAuditVerifyResult {
|
||||
success: boolean;
|
||||
valid: boolean;
|
||||
totalRecords: number;
|
||||
verifiedRecords: number;
|
||||
tamperedId: number | null;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface MetonaAuditAPI {
|
||||
verifyChain: () => Promise<MetonaAuditVerifyResult>;
|
||||
query: (filters?: { sessionId?: string; eventType?: string; limit?: number }) =>
|
||||
Promise<{ success: boolean; data?: unknown[]; error?: string }>;
|
||||
}
|
||||
|
||||
// ===== v0.2.0: Tool Confirmation API =====
|
||||
|
||||
interface MetonaConfirmationRequest {
|
||||
toolCallId: string;
|
||||
toolName: string;
|
||||
args: Record<string, unknown>;
|
||||
riskLevel: string;
|
||||
reason: string;
|
||||
}
|
||||
|
||||
interface MetonaToolAPI {
|
||||
onConfirmationRequest: (callback: (request: MetonaConfirmationRequest) => void) => () => void;
|
||||
sendConfirmationResponse: (response: {
|
||||
toolCallId: string;
|
||||
approved: boolean;
|
||||
remember: boolean;
|
||||
autoExecute?: boolean;
|
||||
}) => void;
|
||||
/** 设置/取消工具的持久化自动执行(跨会话不再询问) */
|
||||
setAutoExecute: (toolName: string, enabled: boolean) => Promise<{ success: boolean; error?: string }>;
|
||||
/** 获取已设置为自动执行的工具列表 */
|
||||
getAutoExecuteList: () => Promise<{ success: boolean; data: string[] }>;
|
||||
}
|
||||
|
||||
// ===== Bridge 接口 =====
|
||||
|
||||
interface MetonaBridge {
|
||||
@@ -223,6 +316,9 @@ interface MetonaBridge {
|
||||
tools: MetonaToolsAPI;
|
||||
data: MetonaDataAPI;
|
||||
searxng: MetonaSearXNGAPI;
|
||||
tasks: MetonaTasksAPI;
|
||||
audit: MetonaAuditAPI;
|
||||
tool: MetonaToolAPI;
|
||||
}
|
||||
|
||||
// ===== 全局 Window 增强 =====
|
||||
|
||||
Reference in New Issue
Block a user