feat: add compact toolbox and public wiki vector search

This commit is contained in:
吉鑫升 committed 2026-08-26 14:40:57 +08:00
1 parent 9f29ecae9e
commit d35d075669
29 files changed
+757 -128

No files matched your search

@@ -18,13 +18,15 @@ test("normalizeCompactMenuType defaults to A", () => {
assert.equal(isDefaultCompactMenuType("B"), false);
});
test("applyCompactMenuOverrides splits sidebar vs settings", () => {
test("applyCompactMenuOverrides splits sidebar, settings, and toolbox", () => {
const items: MenuItem[] = [
{ id: "a", label: "对话", icon: I, path: "/a" },
{ id: "b", label: "智能体", icon: I, path: "/b" },
{ id: "c", label: "技能", icon: I, path: "/c" },
];
const applied = applyCompactMenuOverrides(items, [
{ nodeId: "b", placement: "settings", sortOrder: 0, label: "智能体设置" },
{ nodeId: "c", placement: "toolbox", sortOrder: 0, label: "技能工具" },
]);
assert.deepEqual(
applied.sidebarItems.map((item) => item.id),
@@ -32,4 +34,6 @@ test("applyCompactMenuOverrides splits sidebar vs settings", () => {
);
assert.equal(applied.settingsItems[0]?.id, "b");
assert.equal(applied.settingsItems[0]?.label, "智能体设置");
assert.equal(applied.toolboxItems[0]?.id, "c");
assert.equal(applied.toolboxItems[0]?.label, "技能工具");
});
@@ -1,7 +1,7 @@
import type { MenuItem } from "./sidebar-menu";
import { readRuntimeEnv } from "@/env";
export type CompactMenuPlacement = "sidebar" | "settings";
export type CompactMenuPlacement = "sidebar" | "settings" | "toolbox";
export const COMPACT_MENU_TYPES = ["A", "B"] as const;
export type CompactMenuType = (typeof COMPACT_MENU_TYPES)[number];
@@ -64,7 +64,11 @@ function isNavigable(item: MenuItem): boolean {
export function applyCompactMenuOverrides(
items: MenuItem[],
overrides: CompactMenuOverride[],
): { sidebarItems: CompactMenuItem[]; settingsItems: CompactMenuItem[] } {
): {
sidebarItems: CompactMenuItem[];
settingsItems: CompactMenuItem[];
toolboxItems: CompactMenuItem[];
} {
const byId = new Map(overrides.map((override) => [override.nodeId, override]));
const enhanced = items.filter(isNavigable).map((item, index) => {
const override = byId.get(item.id);
@@ -82,6 +86,7 @@ export function applyCompactMenuOverrides(
return {
sidebarItems: sortItems(enhanced.filter((item) => item.compactPlacement === "sidebar")),
settingsItems: sortItems(enhanced.filter((item) => item.compactPlacement === "settings")),
toolboxItems: sortItems(enhanced.filter((item) => item.compactPlacement === "toolbox")),
};
}