feat(ui): 美化启动界面并重构 /is 工具/插件展示
Some checks failed
npm audit / audit (push) Has been cancelled
CI / build-check-test (push) Has been cancelled

- 缩小标题加 ❯ 引导符、彩色版本号、中文说明
- 去除启动头部段落间空行
- /is 本地扩展和 npm 扩展合并为 [插件] 分组展示
- /is 新增 [工具] 区块显示所有注册工具及激活状态

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 14:32:16 +08:00
parent 675dd18182
commit 731ba23515
5 changed files with 122 additions and 21 deletions

View File

@@ -1422,19 +1422,30 @@ export class InteractiveMode {
};
const { local, packages } = this.splitExtensionsByOrigin(extensions);
const allExtensionLabels = [
...this.getCompactExtensionLabels(local),
...this.getCompactExtensionLabels(packages),
];
const pluginCompactList = formatCompactGrid(allExtensionLabels);
const expandedParts: string[] = [];
if (local.length > 0) {
const localGroups = this.buildScopeGroups(local);
const localList = this.formatScopeGroups(localGroups, extensionFormatOptions);
const localCompactList = formatCompactGrid(this.getCompactExtensionLabels(local));
addLoadedSection("本地扩展", localCompactList, localList, "mdHeading", local.length);
expandedParts.push(
`${theme.fg("mdHeading", " 本地扩展")} ${theme.fg("muted", String(local.length))}\n${localList}`,
);
}
if (packages.length > 0) {
const packageGroups = this.buildScopeGroups(packages);
const packageList = this.formatScopeGroups(packageGroups, extensionFormatOptions);
const packageCompactList = formatCompactGrid(this.getCompactExtensionLabels(packages));
addLoadedSection("npm 扩展", packageCompactList, packageList, "mdHeading", packages.length);
expandedParts.push(
`${theme.fg("mdHeading", " npm 扩展")} ${theme.fg("muted", String(packages.length))}\n${packageList}`,
);
}
const pluginExpandedList = expandedParts.join("\n");
addLoadedSection("插件", pluginCompactList, pluginExpandedList, "mdHeading", extensions.length);
}
// Show loaded themes (excluding built-in)
@@ -1459,6 +1470,20 @@ export class InteractiveMode {
);
addLoadedSection("Themes", themeCompactList, themeList, "mdHeading", customThemes.length);
}
const allTools = this.session.getAllTools();
if (allTools.length > 0) {
const activeToolNames = new Set(this.session.getActiveToolNames());
const toolCompactList = formatCompactGrid(allTools.map((t) => t.name));
const toolList = allTools
.map((t) => {
const active = activeToolNames.has(t.name);
const marker = active ? " " : theme.fg("dim", "✗ ");
return `${marker}${theme.fg("dim", t.name)}${t.description ? theme.fg("dim", ` ${t.description.split("\n")[0].slice(0, 60)}`) : ""}`;
})
.join("\n");
addLoadedSection("工具", toolCompactList, toolList, "mdHeading", allTools.length);
}
}
if (showDiagnostics) {