重构: 巨函数拆分 + 清理历史标记注释 + custom_prompt/停止按钮/tunnel 改进
This commit is contained in:
+20
-20
@@ -7,7 +7,7 @@ import type { AiChatEvent, AiConversationDetail, AiConversationSummary, AiProvid
|
||||
export const aiApi = {
|
||||
/**
|
||||
* 发送消息(非阻塞,通过 ai-chat-event 流式返回);skill 传技能名则注入其 SKILL.md。
|
||||
* F-260614-05 Phase 2c: parts 透传给后端 ai_chat_send → user_parts → provider vision 端点。
|
||||
* parts 透传给后端 ai_chat_send → user_parts → provider vision 端点。
|
||||
* parts 为空/undefined → 后端走 user() 纯文本(向后兼容)。
|
||||
* Input Augmentation: mentionSpans 透传给后端 ai_chat_send 的 mention_spans 参数
|
||||
* (后端 resolve_and_inject 按 kind 投影成 Augmentation 注入 system prompt)。
|
||||
@@ -20,14 +20,14 @@ export const aiApi = {
|
||||
skill: skill || null,
|
||||
modelOverride: modelOverride || null,
|
||||
parts: parts && parts.length > 0 ? parts : null,
|
||||
// F-260616-09 B 批4(决策 e):传 conv_id,操作指定 conv 的 per_conv(不依赖 active 单值)。
|
||||
// 传 conv_id,操作指定 conv 的 per_conv(不依赖 active 单值)。
|
||||
conversationId: conversationId || null,
|
||||
// Input Augmentation: 非空数组才传(undefined/空让 payload 不含该键,后端默认 None)。
|
||||
mentionSpans: mentionSpans && mentionSpans.length > 0 ? mentionSpans : null,
|
||||
})
|
||||
},
|
||||
|
||||
/** 强制发送(B-260616-02: 复位 generating 残留后走 send 同款流程);parts/mentionSpans 透传同 sendMessage。 */
|
||||
/** 强制发送(复位 generating 残留后走 send 同款流程);parts/mentionSpans 透传同 sendMessage。 */
|
||||
forceSend(message: string, language?: string, skill?: string, modelOverride?: string | null, parts?: ContentPart[], conversationId?: string | null, mentionSpans?: MentionSpan[]): Promise<string> {
|
||||
return invoke('ai_chat_force_send', {
|
||||
message,
|
||||
@@ -35,7 +35,7 @@ export const aiApi = {
|
||||
skill: skill || null,
|
||||
modelOverride: modelOverride || null,
|
||||
parts: parts && parts.length > 0 ? parts : null,
|
||||
// F-260616-09 B 批4(决策 e):传 conv_id,强制复位+发送仅作用于目标 conv。
|
||||
// 传 conv_id,强制复位+发送仅作用于目标 conv。
|
||||
conversationId: conversationId || null,
|
||||
// Input Augmentation: 同 sendMessage,非空数组才传(后端 mention_spans 参数)。
|
||||
mentionSpans: mentionSpans && mentionSpans.length > 0 ? mentionSpans : null,
|
||||
@@ -76,7 +76,7 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* F-260619-03 Phase B: 路径授权弹窗决策(消费 AiDirAuthRequired 挂起)。
|
||||
* 路径授权弹窗决策(消费 AiDirAuthRequired 挂起)。
|
||||
* decision: 'once'(本次单次,执行后清)/ 'session'(当前会话,切会话清)/ 'always'(始终,持久化)/ 'deny'(拒绝)。
|
||||
* 后端 remove pending → 写授权目录(once/session/persistent)→ 执行工具 → try_continue 恢复 loop。
|
||||
*/
|
||||
@@ -85,7 +85,7 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* 续跑 agentic 循环(F-260616-03:达 max_iterations 暂停态点继续)。
|
||||
* 续跑 agentic 循环(达 max_iterations 暂停态点继续)。
|
||||
* 后端 ai_continue_loop:复位 stop_flag → try_continue_agent_loop 重新 spawn
|
||||
* run_agentic_loop(iteration 从 0 重计,再跑 max_iterations 轮)。
|
||||
*/
|
||||
@@ -94,7 +94,7 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* 停止 agentic 循环并走完成流程(F-260616-03:达 max_iterations 暂停态点停止)。
|
||||
* 停止 agentic 循环并走完成流程(达 max_iterations 暂停态点停止)。
|
||||
* 后端 ai_stop_loop:复位 generating + emit AiCompleted(暂停前已 save)。
|
||||
*/
|
||||
stopLoop(conversationId: string): Promise<string> {
|
||||
@@ -102,7 +102,7 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/** 查询某对话积压的待审批工具(重启后恢复 toolCard pending_approval 态用)。
|
||||
* 阶段4:返 kind 字段(risk/path),前端按 kind 渲染不同决策按钮。 */
|
||||
* 返 kind 字段(risk/path),前端按 kind 渲染不同决策按钮。 */
|
||||
pendingToolCalls(convId: string): Promise<{ tool_call_id: string; conversation_id: string | null; kind: 'risk' | 'path' }[]> {
|
||||
return invoke('ai_pending_tool_calls', { convId })
|
||||
},
|
||||
@@ -114,7 +114,7 @@ export const aiApi = {
|
||||
|
||||
/**
|
||||
* 停止当前生成。
|
||||
* F-260616-09 B 批4(决策 e):传 convId,停止仅作用于目标 conv(不杀其他后台 conv 的 loop)。
|
||||
* 传 convId,停止仅作用于目标 conv(不杀其他后台 conv 的 loop)。
|
||||
* convId 省略时后端 fallback active conv。
|
||||
*/
|
||||
stopChat(convId?: string | null): Promise<void> {
|
||||
@@ -122,14 +122,14 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* 查询后端真实 generating 状态(B-260615-22:发送前 IPC 查后端真值)。
|
||||
* F-260616-09 B 批4(决策 e):传 convId 精确查指定 conv;省略时后端 fallback active conv。
|
||||
* 查询后端真实 generating 状态(发送前 IPC 查后端真值)。
|
||||
* 传 convId 精确查指定 conv;省略时后端 fallback active conv。
|
||||
*/
|
||||
isGenerating(convId?: string | null): Promise<boolean> {
|
||||
return invoke('ai_is_generating', { conversationId: convId || null })
|
||||
},
|
||||
|
||||
// ── F-15 阶段2: 手动上下文管理(清空 / 压缩) ──
|
||||
// ── 手动上下文管理(清空 / 压缩) ──
|
||||
// 后端经 ai-chat-event emit 生命周期事件:
|
||||
// ai_context_cleared { conversation_id } — 清空完成
|
||||
// ai_compressing { conversation_id } — 压缩开始(loading)
|
||||
@@ -180,7 +180,7 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新 provider 负载均衡池配置(F-260614-04c):仅 UPDATE enabled/weight + 重建 per_provider caps。
|
||||
* 更新 provider 负载均衡池配置:仅 UPDATE enabled/weight + 重建 per_provider caps。
|
||||
* 走轻量分支,不经 ai_save_provider 全量 INSERT OR REPLACE(避免空 api_key 触发 R-PD-1 密钥迁移)。
|
||||
* 后端 weight clamp [0,100];落库后立即 reload_provider_caps,下条消息即按新配置 acquire。
|
||||
*/
|
||||
@@ -194,10 +194,10 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* 测试连接并拉取厂商模型列表(F-01 阶段5)。
|
||||
* 后端:DB 取 provider → FR-S1 内存解析 api_key → fetch_and_probe
|
||||
* 测试连接并拉取厂商模型列表。
|
||||
* 后端:DB 取 provider → 内存解析 api_key → fetch_and_probe
|
||||
* (网络拉模型名 + 探测 4 维度)→ 写回 model_configs → 返回。
|
||||
* 返回值 ModelConfig 不含 api_key(FR-S1 闭环)。
|
||||
* 返回值 ModelConfig 不含 api_key。
|
||||
* 需已落库的 providerId(新建态先保存再拉取)。
|
||||
*/
|
||||
fetchModels(providerId: string): Promise<ModelConfig[]> {
|
||||
@@ -205,7 +205,7 @@ export const aiApi = {
|
||||
},
|
||||
|
||||
/**
|
||||
* 单模型探测(F-01 阶段5):纯 CPU 启发式 + 预设表,无网络。
|
||||
* 单模型探测:纯 CPU 启发式 + 预设表,无网络。
|
||||
* 返回填充了 probe_source 的 ModelConfig。用途:手动补模型名后探测能力维度。
|
||||
*/
|
||||
probeModel(modelId: string): Promise<ModelConfig> {
|
||||
@@ -222,7 +222,7 @@ export const aiApi = {
|
||||
return invoke('ai_set_agent_max_iterations', { value })
|
||||
},
|
||||
|
||||
/** 设置流式对话失败自动重试次数(F-260616-07:只重试流前失败,0=不重试,默认3,上限10) */
|
||||
/** 设置流式对话失败自动重试次数(只重试流前失败,0=不重试,默认3,上限10) */
|
||||
setAgentMaxRetries(value: number): Promise<void> {
|
||||
return invoke('ai_set_agent_max_retries', { value })
|
||||
},
|
||||
@@ -243,12 +243,12 @@ export const aiApi = {
|
||||
return invoke('ai_reload_skills')
|
||||
},
|
||||
|
||||
/** F-260619-03 Phase A: 获取 AI 工具文件访问授权目录列表(含 workspace_root) */
|
||||
/** 获取 AI 工具文件访问授权目录列表(含 workspace_root) */
|
||||
getAllowedDirs(): Promise<string[]> {
|
||||
return invoke<string[]>('ai_get_allowed_dirs')
|
||||
},
|
||||
|
||||
/** F-260619-03 Phase A: 设置 AI 工具授权目录(持久化 + 同步内存白名单),返回规范化后的列表 */
|
||||
/** 设置 AI 工具授权目录(持久化 + 同步内存白名单),返回规范化后的列表 */
|
||||
setAllowedDirs(dirs: string[]): Promise<string[]> {
|
||||
return invoke<string[]>('ai_set_allowed_dirs', { dirs })
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user