✨ feat(vscode): 新增「了解一块代码」:AI 找功能代码占一栏,对话里接着改

主栏标题栏的放大镜问要了解哪一块,占一个栏位建一栏(和收藏共用 30 个栏位,视图改名 slot1..30,按 slotKindN 分收藏 / 功能挂标题栏按钮),同时开对话页让 Claude 只读地在全部工作区文件夹里找,按 --json-schema 交回环节 → 文件 + 符号 + 一句话。
对话复用预览顶部的聊天(CodeQa.askTop:会话续接、进行中的一轮、记录存 workspaceState);结构不合格算这一轮没答成、留着能再画出来。
条目每次画、点时按眼下的代码找:有语言插件的解析成代码块按「类名.方法名」找,没有的问 VS Code 文档符号;找不到画成灰的。
This commit is contained in:
cruldra committed 2026-10-12 15:48:54 +11:00
1 parent 16d27004d8
commit 880bf7fc57
38 files changed
+3386 -378

No files matched your search

+3 -2
View File
@@ -6,7 +6,7 @@ import type { OccurrencePage } from './useOccurrences'
import type { ViewState } from './viewState'
import { TriangleAlert } from 'lucide-react'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { AskThread } from './AskThread'
import { AskThread, FEATURE_THREAD } from './AskThread'
import { BlockLevel } from './BlockTree'
import { CallTreeDialog } from './CallTreeDialog'
import { DefinitionPeekPopup } from './DefinitionPeekPopup'
@@ -268,6 +268,7 @@ export function App(): ReactElement | null {
asks={asksOf(qa.state, PATH_ASK_ANCHOR)}
open
hint={qa.state.subject === 'folder' ? '这个文件夹' : '这个文件'}
{...(qa.state.subject === 'feature' && { wording: FEATURE_THREAD })}
autoFocus={false}
focusToken={pathFocus}
closable={false}
@@ -294,7 +295,7 @@ export function App(): ReactElement | null {
</div>
)}
{doc.blocks.length === 0
? doc.error === undefined && qa.state.subject !== 'folder' && <div className="text-[var(--vscode-descriptionForeground)]">这个文件里没有代码。</div>
? doc.error === undefined && qa.state.subject === 'file' && <div className="text-[var(--vscode-descriptionForeground)]">这个文件里没有代码。</div>
: doc.blocks.some(block => !filter.hidden.has(block.id))
? <BlockLevel blocks={doc.blocks} tree={tree} />
: <div className="text-[var(--vscode-descriptionForeground)]">所有块都被筛选隐藏了。</div>}