fix: hide unverified capability placeholders

The tool environment page always displayed an unverified capability-dependency state even though it had no Skill or MCP evidence behind it. The page now shows only actual interpreter and companion-tool diagnostics; capability dependency status remains reserved for capability details with real validation results.

Release note: 工具执行环境页不再显示没有实际验证依据的能力依赖占位状态。
This commit is contained in:
mesalogo
2026-09-02 17:00:42 +08:00
parent 19a3bafb63
commit 8a14cf356a
7 changed files with 9 additions and 13 deletions
+4 -1
View File
@@ -130,7 +130,10 @@ Python、虚拟环境或 Conda 环境时,也不能被 GoodBuddy 静默替换
### FR-6 状态与诊断 ### FR-6 状态与诊断
- 分别显示“工具环境状态”和“能力依赖状态”。 - 工具执行环境页只显示有真实诊断结果的解释器和配套工具状态,不显示固定的能力依赖占位
状态。
- 具体 SKILL/MCP 只有在其实际入口及第三方依赖通过验证后,才在对应能力详情中显示能力
依赖状态。
- Node 诊断覆盖 Node、npm、npx、标准库和子进程。 - Node 诊断覆盖 Node、npm、npx、标准库和子进程。
- Python 诊断覆盖 Python 3、架构、标准库、SSL、pip 和 venv。 - Python 诊断覆盖 Python 3、架构、标准库、SSL、pip 和 venv。
- 诊断使用临时目录并在结束后清理。 - 诊断使用临时目录并在结束后清理。
@@ -34,6 +34,7 @@ Windows ARM64、macOS 和 Linux 工件仍需原生 CI 验证,第三方许可
对应工具卡内显示。 对应工具卡内显示。
- [x] “能力与工具”统一入口及三个水平 Tab,MCP 原内层页签保持不变。 - [x] “能力与工具”统一入口及三个水平 Tab,MCP 原内层页签保持不变。
- [x] 工具下载源、Node.js、Python、候选、诊断、安装进度、取消和删除界面。 - [x] 工具下载源、Node.js、Python、候选、诊断、安装进度、取消和删除界面。
- [x] 工具卡只展示真实工具诊断;未接入具体能力证据前不显示固定的能力依赖占位状态。
- [x] 使用 `PageTabs`、应用通知、就地操作错误、删除确认和具名进度条。 - [x] 使用 `PageTabs`、应用通知、就地操作错误、删除确认和具名进度条。
### 托管 Node 与进程注入 ### 托管 Node 与进程注入
@@ -239,6 +239,9 @@ SKILL/MCP 的能力详情展示能力依赖状态:
- 缺少第三方包 - 缺少第三方包
- 入口不可用 - 入口不可用
工具执行环境页不掌握具体 SKILL/MCP 的验证证据,因此不显示固定的“依赖未验证”占位
区块。只有对应能力产生真实验证结果后,才在该能力详情中展示上述状态。
不得把工具卡的“已就绪”复用为某个 SKILL 或 MCP 的“完全可用”。 不得把工具卡的“已就绪”复用为某个 SKILL 或 MCP 的“完全可用”。
## 9. 生效与刷新 ## 9. 生效与刷新
@@ -139,7 +139,7 @@ describe('ToolEnvironmentSettingsSection', () => {
).toBeVisible() ).toBeVisible()
expect(screen.getAllByText('工具状态')).toHaveLength(2) expect(screen.getAllByText('工具状态')).toHaveLength(2)
expect(screen.getAllByText('工具链/配套工具状态')).toHaveLength(2) expect(screen.getAllByText('工具链/配套工具状态')).toHaveLength(2)
expect(screen.getAllByText('能力依赖状态')).toHaveLength(2) expect(screen.queryByText('能力依赖状态')).not.toBeInTheDocument()
expect( expect(
screen.getByRole('button', { screen.getByRole('button', {
name: /C:\\Tools\\node\.exe/u name: /C:\\Tools\\node\.exe/u
@@ -564,11 +564,6 @@ export function ToolEnvironmentSettingsSection({
)} )}
</div> </div>
<div className="tool-environment-status">
<h4>{t('toolEnvironment.capabilityDependencyStatus')}</h4>
<p>{t('toolEnvironment.capabilityDependenciesUnverified')}</p>
</div>
{kind === 'python' && selection.source === 'managed' && ( {kind === 'python' && selection.source === 'managed' && (
<div className="tool-environment-python"> <div className="tool-environment-python">
<p> <p>
@@ -784,9 +784,6 @@ export const settingsSections = {
'No valid candidates were found. Scan user/system PATH, Conda, virtual environments, and common install locations, or choose another executable.', 'No valid candidates were found. Scan user/system PATH, Conda, virtual environments, and common install locations, or choose another executable.',
toolStatus: 'Tool status', toolStatus: 'Tool status',
companionStatus: 'Toolchain/companion status', companionStatus: 'Toolchain/companion status',
capabilityDependencyStatus: 'Capability dependency status',
capabilityDependenciesUnverified:
'Capability dependencies are unverified because no capability evidence is available.',
status: 'Status', status: 'Status',
available: 'Available', available: 'Available',
unavailable: 'Unavailable', unavailable: 'Unavailable',
@@ -734,9 +734,6 @@ export const settingsSections = {
'未发现有效候选。可扫描用户/系统 PATH、Conda、虚拟环境和常见安装位置,或选择其他可执行文件。', '未发现有效候选。可扫描用户/系统 PATH、Conda、虚拟环境和常见安装位置,或选择其他可执行文件。',
toolStatus: '工具状态', toolStatus: '工具状态',
companionStatus: '工具链/配套工具状态', companionStatus: '工具链/配套工具状态',
capabilityDependencyStatus: '能力依赖状态',
capabilityDependenciesUnverified:
'尚未获得具体能力的依赖验证证据。',
status: '状态', status: '状态',
available: '可用', available: '可用',
unavailable: '不可用', unavailable: '不可用',