新增: Phase2 阶段收尾(Sprint 1-20)
重构:删 5 零引用 crate(df-evolve/plugin/stages/task/traceability)+ 清死模块、ai.rs 拆 11 子 module、ai.ts 拆 6 composable、i18n 拆目录 功能:知识库全栈(df-project/scan + CRUD + 时间线 + 前端)、Settings 拆分、appSettings KV 迁移、模型池、LLM 并发 Semaphore 修复:审批持久化根治、ConditionEngine 默认拒绝、NodeRegistry unimplemented 清除、promote 补偿删除、工具结果截断 50KB、路径校验防 symlink 逃逸 文档:B-03 人工审批设计、决策记录三分档、规格契约自检、经验记录、todo 看板、PROGRESS 更新 详见 PROGRESS.md。src-tauri/儿童每日打卡应用/ 与本项目无关,已排除。
This commit is contained in:
@@ -2,12 +2,12 @@
|
||||
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
import { listen, type UnlistenFn } from '@tauri-apps/api/event'
|
||||
import type { AiChatEvent, AiConversationDetail, AiConversationSummary, AiProviderConfig } from './types'
|
||||
import type { AiChatEvent, AiConversationDetail, AiConversationSummary, AiProviderConfig, SkillInfo } from './types'
|
||||
|
||||
export const aiApi = {
|
||||
/** 发送消息(非阻塞,通过 ai-chat-event 流式返回) */
|
||||
sendMessage(message: string, language?: string): Promise<string> {
|
||||
return invoke('ai_chat_send', { message, language: language || 'zh-CN' })
|
||||
/** 发送消息(非阻塞,通过 ai-chat-event 流式返回);skill 传技能名则注入其 SKILL.md */
|
||||
sendMessage(message: string, language?: string, skill?: string): Promise<string> {
|
||||
return invoke('ai_chat_send', { message, language: language || 'zh-CN', skill: skill || null })
|
||||
},
|
||||
|
||||
/** 批准/拒绝工具调用 */
|
||||
@@ -15,6 +15,11 @@ export const aiApi = {
|
||||
return invoke('ai_approve', { toolCallId, approved })
|
||||
},
|
||||
|
||||
/** 查询某对话积压的待审批工具(重启后恢复 toolCard pending_approval 态用) */
|
||||
pendingToolCalls(convId: string): Promise<{ tool_call_id: string; conversation_id: string | null }[]> {
|
||||
return invoke('ai_pending_tool_calls', { convId })
|
||||
},
|
||||
|
||||
/** 清空对话 */
|
||||
clearChat(): Promise<void> {
|
||||
return invoke('ai_chat_clear')
|
||||
@@ -54,6 +59,21 @@ export const aiApi = {
|
||||
return invoke('ai_set_provider', { providerId })
|
||||
},
|
||||
|
||||
/** 删除 AI 提供商 */
|
||||
deleteProvider(providerId: string): Promise<void> {
|
||||
return invoke('ai_delete_provider', { providerId })
|
||||
},
|
||||
|
||||
/** 设置 LLM 调用并发上限(全局 / 单对话,运行时即时生效;软收敛不中断进行中调用) */
|
||||
setConcurrencyConfig(globalLimit: number, perConvLimit: number): Promise<void> {
|
||||
return invoke('ai_set_concurrency_config', { globalLimit, perConvLimit })
|
||||
},
|
||||
|
||||
/** 列出本机 Claude 技能(skills + commands + plugins) */
|
||||
listSkills(): Promise<SkillInfo[]> {
|
||||
return invoke('ai_list_skills')
|
||||
},
|
||||
|
||||
/** 监听 AI 聊天事件 */
|
||||
onEvent(callback: (event: AiChatEvent) => void): Promise<UnlistenFn> {
|
||||
return listen<AiChatEvent>('ai-chat-event', (e) => {
|
||||
@@ -68,9 +88,12 @@ export const aiApi = {
|
||||
return invoke('ai_conversation_create')
|
||||
},
|
||||
|
||||
/** 列出所有对话(摘要) */
|
||||
listConversations(): Promise<AiConversationSummary[]> {
|
||||
return invoke('ai_conversation_list')
|
||||
/** 列出对话(摘要;limit 默认 50,includeArchived 默认 false 隐藏归档) */
|
||||
listConversations(limit?: number, includeArchived?: boolean): Promise<AiConversationSummary[]> {
|
||||
return invoke('ai_conversation_list', {
|
||||
limit: limit ?? null,
|
||||
includeArchived: includeArchived ?? false,
|
||||
})
|
||||
},
|
||||
|
||||
/** 切换到指定对话 */
|
||||
@@ -87,4 +110,9 @@ export const aiApi = {
|
||||
renameConversation(conversationId: string, title: string): Promise<void> {
|
||||
return invoke('ai_conversation_rename', { conversationId, title })
|
||||
},
|
||||
|
||||
/** 归档/取消归档对话 */
|
||||
archiveConversation(conversationId: string, archived: boolean): Promise<void> {
|
||||
return invoke('ai_conversation_archive', { conversationId, archived })
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user