清理: 移除代码注释中的走查编号前缀(UX/B/SW/CR/ID/P0-P2-26xxxx,共102处)

This commit is contained in:
lxy
2026-10-02 01:00:37 +08:00
parent ea20a465d6
commit 79ca55620b
44 changed files with 157 additions and 103 deletions
+35 -7
View File
@@ -31,7 +31,7 @@
@expand-content="toggleExpand"
@approve="(e) => emit('approve', e)"
@install-obscura="() => emit('install-obscura')"
:class="{ 'ai-tool-card--group-hidden': group.calls.length >= 2 && isGroupCollapsed(gi) }"
:class="{ 'ai-tool-card--group-hidden': isGroupHidden(tc, group, gi) }"
/>
</template>
</div>
@@ -123,19 +123,36 @@ const pendingCount = computed(() =>
* 响应式而非一次性初始化——流式场景第一张卡到达即触发旧一次性逻辑,
* 此后组从 1 卡长到 N 卡不再折叠,批量读取的 N 张单行卡全展开刷屏;
* 签名(组名:卡数)变化即幂等补齐,新达到阈值的组收起,已 touched 的组不动。
*
* 活组豁免:含 running/pending_approval 卡或用户展开过卡的组(groupHasLiveCard)
* 不自动收;已被收的活组自动复活展开。治"执行轮整组(读取文件/搜索内容)被收只剩组头,
* running 卡强制展开也被组 hidden 压住,用户想看进度要点两层"。
*/
watch(
() => groupedToolCalls.value.map(g => `${g.name}:${g.calls.length}`).join('|'),
() => {
const next = new Set(collapsedGroups.value)
groupedToolCalls.value.forEach((g, gi) => {
if (g.calls.length >= 2 && !userTouchedGroups.value.has(g.name)) next.add(gi)
if (g.calls.length < 2 || userTouchedGroups.value.has(g.name)) return
if (groupHasLiveCard(g)) next.delete(gi)
else next.add(gi)
})
collapsedGroups.value = next
},
{ immediate: true }
)
/** 组内是否存在"活着"的卡:running/pending_approval 进行中 或 用户主动展开过(userExpandedCards)。
* 自动收起补齐对这类组跳过(不误收用户正在看的/正在执行的),
* 且补齐时自动展开复活——治"组从 1 卡长到 2 卡瞬间整组被收、用户点开也被压回去"。 */
function groupHasLiveCard(g: ToolCallGroup): boolean {
return g.calls.some(tc =>
tc.status === 'running'
|| tc.status === 'pending_approval'
|| userExpandedCards.value.has(tc.id)
)
}
function isGroupCollapsed(gi: number): boolean {
return collapsedGroups.value.has(gi)
}
@@ -180,7 +197,9 @@ function groupDisplayName(group: ToolCallGroup): string {
/**
* 单卡是否展开:
* - 分组已折叠 → false(整组隐藏)
* - 分组已折叠 → false(整组隐藏)。**例外**: 用户主动展开过的卡(userExpandedCards)
* 不被组折叠压制()——组收起只隐藏"无用户记忆"的卡,
* 用户点开过的卡保持展开,否则"点开又被组补齐自动压回去"死循环。
* - 未手动操作过 → 默认折叠(U-260629):completed 卡一律单行 header(工具名+目标+结果摘要),
* 杜绝"AI 一轮多工具各铺开一整卡"刷屏;点 header 才展开。
* running/pending/rejected/write_file 不受此值影响——ToolCard 内部
@@ -189,17 +208,26 @@ function groupDisplayName(group: ToolCallGroup): string {
* 清了 expandedCards,记忆态仍保持展开(用户读过的卡不强制折叠)。
*/
function isCardExpanded(tc: AiToolCallInfo, gi: number): boolean {
if (isGroupCollapsed(gi)) return false
// 用户主动折叠最优先(覆盖用户展开记忆)
// 用户主动折叠最优先(覆盖一切,含组折叠与展开记忆)
if (userCollapsedCards.value.has(tc.id)) return false
// 用户主动展开的卡片记忆态优先(不被自动收起影响)
// 用户主动展开记忆次优先:压过组折叠(),点开过的卡组收起时仍展开
if (userExpandedCards.value.has(tc.id)) return true
// 组折叠(只影响无用户记忆的卡)
if (isGroupCollapsed(gi)) return false
// 用户手动切换过该卡(当前态)
if (expandedCards.value.has(tc.id)) return true
// 兜底:默认折叠(单行 header 已有 toolDisplayName 路径/pattern/host + toolResultSummary 摘要)
return false
}
/** 组收起时卡片是否整卡隐藏(display:none)。
* 用户主动展开过的卡豁免——组收起只隐藏无用户记忆的卡,
* 否则模板 class 的 display:none 会把 isCardExpanded 已放行的展开卡重新藏掉。 */
function isGroupHidden(tc: AiToolCallInfo, group: ToolCallGroup, gi: number): boolean {
if (group.calls.length < 2 || !isGroupCollapsed(gi)) return false
return !userExpandedCards.value.has(tc.id)
}
function toggleCardExpand(tc: AiToolCallInfo, gi: number) {
const id = tc.id
// 用 isCardExpanded 判当前真实态(含用户操作记忆),而非 expandedCards(记忆态不在其中,
@@ -399,7 +427,7 @@ function groupIcon(name: string): string {
}
/* -- 分组隐藏态的卡片。
UX-260616-03: 保持 display:none(原行为)。
保持 display:none(原行为)。
不改 max-height/opacity 动画的原因:flex 容器 gap:8px 对零高 item 仍贡献 gap,
会留双倍间距致布局回归;display:none 移出流才无 gap。
真正的高度动画需 <Transition> JS 钩子(高度 auto→0 不可纯 CSS transition),