From 46b8308821ad2697cb145c92c23e851759d7d43d Mon Sep 17 00:00:00 2001 From: zxc123aa <252945849@qq.com> Date: Sun, 5 Apr 2026 03:16:33 +0800 Subject: [PATCH 1/2] feat: tighten find skills search and add benchmark --- .../src/components/dialog-default-skills.tsx | 9 + .../app/src/components/dialog-find-skills.tsx | 713 +++++++++ packages/app/src/components/prompt-input.tsx | 29 +- packages/app/src/context/global-sdk.tsx | 12 +- packages/app/src/pages/layout.tsx | 7 + packages/opencode/src/cli/cmd/debug/skill.ts | 65 +- packages/opencode/src/config/config.ts | 1 + packages/opencode/src/server/routes/skill.ts | 197 +++ packages/opencode/src/server/server.ts | 25 +- packages/opencode/src/skill/benchmark.test.ts | 91 ++ packages/opencode/src/skill/benchmark.ts | 730 ++++++++++ packages/opencode/src/skill/catalog.test.ts | 222 +++ packages/opencode/src/skill/catalog.ts | 1280 +++++++++++++++++ packages/opencode/src/skill/search.test.ts | 139 ++ .../opencode/test/server/skill-routes.test.ts | 628 ++++++++ packages/sdk/js/src/v2/gen/sdk.gen.ts | 506 +++++-- packages/sdk/js/src/v2/gen/types.gen.ts | 358 ++++- 17 files changed, 4837 insertions(+), 175 deletions(-) create mode 100644 packages/app/src/components/dialog-find-skills.tsx create mode 100644 packages/opencode/src/server/routes/skill.ts create mode 100644 packages/opencode/src/skill/benchmark.test.ts create mode 100644 packages/opencode/src/skill/benchmark.ts create mode 100644 packages/opencode/src/skill/catalog.test.ts create mode 100644 packages/opencode/src/skill/catalog.ts create mode 100644 packages/opencode/src/skill/search.test.ts create mode 100644 packages/opencode/test/server/skill-routes.test.ts diff --git a/packages/app/src/components/dialog-default-skills.tsx b/packages/app/src/components/dialog-default-skills.tsx index 0745599a7f..39c8e0c8ae 100644 --- a/packages/app/src/components/dialog-default-skills.tsx +++ b/packages/app/src/components/dialog-default-skills.tsx @@ -15,6 +15,7 @@ import { } from "solid-js" import { useGlobalSDK } from "@/context/global-sdk" import { useSDK } from "@/context/sdk" +import { DialogFindSkills } from "@/components/dialog-find-skills" type DefaultSkill = { name: string; description: string; content: string; enabled?: boolean } @@ -73,6 +74,14 @@ export const DialogDefaultSkills: Component = () => { title="默认 Skills" action={
+ + + + + + + + + + + +
+ + )} + + ) + + return ( + + + + + } + > +
+
+ { + if (e.key !== "Enter" || e.isComposing) return + e.preventDefault() + search() + }} + placeholder="搜索技能,例如 auto updater" + class="flex-1" + autofocus + /> + +
+ +
+ + {submitted() + ? semantic() + ? "正在补充语义扩展与外部查找" + : "提交搜索时会做语义扩展与外部查找" + : "当前显示已安装技能;点击检查更新获取最新状态"} + + + 查询:{submitted()} + +
+ + + +
加载中...
+
+ +
{error()}
+
+ +
+ {submitted() ? "没有找到匹配的 Skills" : "暂无可显示的 Skills"} +
+
+ +
+ 0}> +
{submitted() ? "推荐结果" : "已安装"}
+
+
{cards(list().main)}
+ 0}> +
+ +
+
+ 0 && more()}> +
{cards(list().more, true)}
+
+
+
+
+
+
+ ) +} diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index cf1d6b80d3..2d28b9b1cf 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -61,6 +61,7 @@ import { ImagePreview } from "@opencode-ai/ui/image-preview" import { FileIcon } from "@opencode-ai/ui/file-icon" import { KnowledgeButton } from "@/components/knowledge-button" import { DialogDefaultSkills } from "@/components/dialog-default-skills" +import { DialogFindSkills } from "@/components/dialog-find-skills" import { DialogWeChat } from "@/components/dialog-wechat" import { status as wechatStatus } from "@/context/wechat" import { DialogFeishu } from "@/components/dialog-feishu" @@ -351,6 +352,7 @@ export const PromptInput: Component = (props) => { t: (key, params) => language.t(key as Parameters[0], params as never), }), ) + const [tools, setTools] = createSignal(false) const historyComments = () => { const byID = new Map(comments.all().map((item) => [`${item.file}\n${item.id}`, item] as const)) @@ -1630,6 +1632,8 @@ export const PromptInput: Component = (props) => { = (props) => { trigger={} class="p-1 flex flex-col gap-0.5 min-w-[120px]" > + + +