优化: 清理编号注释
This commit is contained in:
@@ -257,7 +257,7 @@ const activeConv = computed(() =>
|
|||||||
watch(
|
watch(
|
||||||
() => activeConv.value?.title,
|
() => activeConv.value?.title,
|
||||||
(newTitle, oldTitle) => {
|
(newTitle, oldTitle) => {
|
||||||
// FIX-17 P2-4:合并为单条件——标题从空→非空才触发淡入,其他变化不闪
|
// 标题从空→非空才触发淡入,其他变化不闪
|
||||||
if (!newTitle || oldTitle) return
|
if (!newTitle || oldTitle) return
|
||||||
titleFlash.value = true
|
titleFlash.value = true
|
||||||
if (_titleFlashTimer) clearTimeout(_titleFlashTimer)
|
if (_titleFlashTimer) clearTimeout(_titleFlashTimer)
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ export function setConvStreaming(convId: string | null | undefined, value: boole
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 写某 conv 的 currentText(空串时仅清字段,streaming 仍 true 则保留项)。
|
* 写某 conv 的 currentText(空串时仅清字段,streaming 仍 true 则保留项)。
|
||||||
* FIX-17 P2-3:收敛对称——当 streaming=false 且 currentText 被清空时,删 Map 项。
|
* 收敛对称——当 streaming=false 且 currentText 被清空时,删 Map 项。
|
||||||
*
|
*
|
||||||
* @param convId 目标会话 id
|
* @param convId 目标会话 id
|
||||||
* @param value currentText 目标值(空串=清流式累积,但会话可能仍在 streaming)
|
* @param value currentText 目标值(空串=清流式累积,但会话可能仍在 streaming)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import { state } from '@/stores/ai'
|
|||||||
import { resolveAiLang } from './aiShared'
|
import { resolveAiLang } from './aiShared'
|
||||||
import { setContextCallbacks } from './useAiEvents'
|
import { setContextCallbacks } from './useAiEvents'
|
||||||
|
|
||||||
// FIX-17 P2-7:模块级单例 ref,多窗口共享(分离窗口与主窗口共用同一 isCompressing)。
|
// 模块级单例 ref,多窗口共享(分离窗口与主窗口共用同一 isCompressing)。
|
||||||
// 已知限制:分离窗口压缩时,主窗口的压缩按钮也显示 loading(反之亦然);非功能 bug,
|
// 已知限制:分离窗口压缩时,主窗口的压缩按钮也显示 loading(反之亦然);非功能 bug,
|
||||||
// 但若需 per-window 独立压缩态需改为 inject/provide 或独立 store 实例,本版暂不处理。
|
// 但若需 per-window 独立压缩态需改为 inject/provide 或独立 store 实例,本版暂不处理。
|
||||||
const isCompressing = ref(false)
|
const isCompressing = ref(false)
|
||||||
|
|||||||
@@ -516,7 +516,7 @@ async function deleteConversation(id: string) {
|
|||||||
loadMoreCursor.earliestSeq = null
|
loadMoreCursor.earliestSeq = null
|
||||||
loadMoreCursor.convId = null
|
loadMoreCursor.convId = null
|
||||||
loadMoreCursor.loading = false
|
loadMoreCursor.loading = false
|
||||||
// FIX-17 P1-11:回落相邻会话,避免空白无引导
|
// 回落相邻会话,避免空白无引导
|
||||||
if (neighborId) {
|
if (neighborId) {
|
||||||
await switchConversation(neighborId)
|
await switchConversation(neighborId)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export function onStreamTimeout(convId?: string) {
|
|||||||
if (convId) {
|
if (convId) {
|
||||||
convStates.delete(convId)
|
convStates.delete(convId)
|
||||||
} else {
|
} else {
|
||||||
// AIC-FIX-17-P0-1:legacy 单 timer 只跟踪当前活跃会话,不清所有 conv(防误杀其他并发会话)。
|
// legacy 单 timer 只跟踪当前活跃会话,不清所有 conv(防误杀其他并发会话)。
|
||||||
if (state.activeConversationId) {
|
if (state.activeConversationId) {
|
||||||
convStates.delete(state.activeConversationId)
|
convStates.delete(state.activeConversationId)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ async function syncToMain() {
|
|||||||
if (screenWidth > 0) {
|
if (screenWidth > 0) {
|
||||||
targetX = screenWidth - AI_DOCK_WIDTH - AI_DOCK_GAP
|
targetX = screenWidth - AI_DOCK_WIDTH - AI_DOCK_GAP
|
||||||
}
|
}
|
||||||
// FIX-17 P2-5: 最大化时 targetHeight = size.height, height > height 恒 false,
|
// 最大化时 targetHeight = size.height, height > height 恒 false,
|
||||||
// 原三元是无操作死代码,已移除。
|
// 原三元是无操作死代码,已移除。
|
||||||
} else if (screenWidth > 0 && targetX + AI_DOCK_WIDTH > screenWidth) {
|
} else if (screenWidth > 0 && targetX + AI_DOCK_WIDTH > screenWidth) {
|
||||||
// 非最大化但主+AI 超屏幕:AI 窗口本身让位(缩窄或往左偏),不动主窗口。
|
// 非最大化但主+AI 超屏幕:AI 窗口本身让位(缩窄或往左偏),不动主窗口。
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ export function dispatchApprovalIPC(
|
|||||||
return aiApi.approve(tc.id, approved)
|
return aiApi.approve(tc.id, approved)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** useToolApproval emit 签名 — FIX-17 P2-6:补全类型替代 any */
|
/** useToolApproval emit 签名 — 补全类型替代 any */
|
||||||
interface ToolApprovalEmit {
|
interface ToolApprovalEmit {
|
||||||
(event: 'approve', payload: { id: string; approved: boolean; decision?: 'once' | 'session' | 'always' | 'deny' }): void
|
(event: 'approve', payload: { id: string; approved: boolean; decision?: 'once' | 'session' | 'always' | 'deny' }): void
|
||||||
}
|
}
|
||||||
@@ -126,9 +126,8 @@ export function useToolApproval(tc: Ref<AiToolCallInfo>, emit: ToolApprovalEmit)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 批准按钮处理(risk 类专用)。
|
* 批准按钮处理(risk 类专用)。
|
||||||
* AE-2025-05:High 风险工具 → 先二次确认(useConfirm 弹层)。
|
* High 风险工具 → 先二次确认(useConfirm 弹层)。
|
||||||
* loading + 超时兜底复用 B-260616-08 机制。
|
* loading + 超时兜底。approving 提前到 confirmDialog 前,防二次确认期间双击重入。
|
||||||
* FIX-17 P1-10:approving 提前到 confirmDialog 前,防二次确认期间双击重入。
|
|
||||||
*/
|
*/
|
||||||
async function onApprove() {
|
async function onApprove() {
|
||||||
if (approving.value) return // 防重入
|
if (approving.value) return // 防重入
|
||||||
@@ -225,10 +224,10 @@ export function useToolApproval(tc: Ref<AiToolCallInfo>, emit: ToolApprovalEmit)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* path_auth 审批链阶段3b:path 类「拒绝」处理。
|
* path_auth 审批链阶段3b:path 类「拒绝」处理。
|
||||||
* M5:拒绝前二次确认(useConfirm 弹层)。拒绝不可逆——工具返 Err、loop 续跑不再重试该工具,
|
* 拒绝前二次确认(useConfirm 弹层)。拒绝不可逆——工具返 Err、loop 续跑不再重试该工具,
|
||||||
* 与放行(once/session/always 均可后续再授权)不对称,误点代价高;补确认与 approve(高风险)对称。
|
* 与放行(once/session/always 均可后续再授权)不对称,误点代价高;补确认与 approve(高风险)对称。
|
||||||
* risk 类拒绝(onReject)不补确认:risk reject 是常规审批否决,语义明确且可重新触发;仅 path 类加。
|
* risk 类拒绝(onReject)不补确认:risk reject 是常规审批否决,语义明确且可重新触发;仅 path 类加。
|
||||||
* FIX-17 P1-10:approving 提前到 confirmDialog 前,防二次确认期间双击重入。
|
* approving 提前到 confirmDialog 前,防二次确认期间双击重入。
|
||||||
*/
|
*/
|
||||||
async function onDeny() {
|
async function onDeny() {
|
||||||
if (approving.value) return
|
if (approving.value) return
|
||||||
|
|||||||
Reference in New Issue
Block a user