清理: 移除代码注释中的走查编号前缀(UX/B/SW/CR/ID/P0-P2-26xxxx,共102处)
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user