@lynn123411/dsh-model-submenu 0.2.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DETAILS.md +8 -2
- package/README.md +10 -8
- package/lib/client.js +1158 -326
- package/lib/client.js.map +1 -1
- package/locale/en.json +2 -2
- package/locale/zh.json +2 -2
- package/package.json +26 -20
- package/src/client/ModelPicker.tsx +305 -0
- package/src/client/ModelRow.tsx +127 -0
- package/src/client/ModelSubmenu.module.css +338 -97
- package/src/client/ModelSubmenu.tsx +237 -233
- package/src/client/effort-memory.ts +90 -0
- package/src/client/facts-source.ts +93 -0
- package/src/client/favorites.ts +103 -0
- package/src/client/icons.tsx +36 -0
- package/src/client/index.ts +29 -8
- package/src/client/locales.ts +66 -33
- package/src/client/model-facts.ts +198 -0
- package/src/client/rows.ts +125 -0
- package/src/client/selection.ts +112 -0
package/DETAILS.md
CHANGED
|
@@ -20,7 +20,9 @@ dsh plugin --profile web add @lynn123411/dsh-model-submenu
|
|
|
20
20
|
|
|
21
21
|
这条行同时承载两个半边:宿主半边在那条行下注册插件本体,浏览器半边由 Web shell 按 root loader 的 enabled entry 依据 `dsh.client` 声明服务 `lib/client.js`。行不写 `config`——写了当场抛,免得拼错的行静默什么都不注册。
|
|
22
22
|
|
|
23
|
-
客户端半边声明的服务(`dsh.client.inject`):`@deepseek-ai/dsh-
|
|
23
|
+
客户端半边声明的服务(`dsh.client.inject`):`@deepseek-ai/dsh-api-remotes`、`@deepseek-ai/dsh-client-locale`、`@deepseek-ai/dsh-client-ui-model-selection`、`@deepseek-ai/dsh-client-ui-settings`、`@deepseek-ai/dsh-client-ui-slots`。少声明一个不会报错,只会让插件在页面里消失。
|
|
24
|
+
|
|
25
|
+
客户端半边读的 cordis 服务(源码 `src/client/index.ts` 的 `inject`)与上表是两层声明,缺一层整条 loader entry 静默变 failed:`configForms` 提供设置页那份共享缓存,`remote` 与 `remote.llm` 回答每个供应商的设置在哪个命名空间,`remote.session` 与 `modelDirectories` 供模型目录,`sessions` 判断子代理会话,`slots` 与 `locale` 各自是本插件的座位与文案。
|
|
24
26
|
|
|
25
27
|
## 开发副本
|
|
26
28
|
|
|
@@ -41,6 +43,10 @@ cd <my-dsh 绝对路径>/plugins/dsh-model-submenu && pnpm install && pnpm build
|
|
|
41
43
|
cd plugins/dsh-model-submenu && pnpm check
|
|
42
44
|
```
|
|
43
45
|
|
|
44
|
-
`check` = `typecheck` + `build`(tsdown)+ `smoke` + `
|
|
46
|
+
`check` = `typecheck` + `build`(tsdown)+ `smoke` + `test` + `assert:lib-untracked`。
|
|
47
|
+
|
|
48
|
+
- `scripts/smoke-client.mjs` 按 Web shell 的方式装载构建产物 `lib/client.js`(`window.__ModuleLoader__.load` 桩件),喂假 cordis 服务,断言导出身份、`inject` 表逐字相等、产物里走的是共享的 `MenuSurface` 与 `Modal`、以 `priority: -100` 接管 `conversation.input.model` 座位、字典键集中英对齐、元信息取数确实问过设置镜像与供应商目录,以及「设置没答案时答未知而不猜」。末尾那段用真 `SlotCore` 钉住宿主的子座位契约,测的是宿主行为。
|
|
49
|
+
- `scripts/test-favorites.mjs`:收藏表的键名、读写、坏值降级、跨供应商靠前排序。`scripts/test-facts.mjs`:设置值到上下文窗口与图片输入的映射、两类适配器的字段差异、缺字段整段略去。`scripts/test-commit.mjs`:点模型立即提交、思考等级关菜单才提交、已选中的模型不重复提交。`scripts/test-rows.mjs`:目录拍平、标签页派生、搜索的两把钥匙。`scripts/test-render.mjs`:用真 react 把菜单与弹窗画进 jsdom,锁住点模型立即提交、思考等级关菜单才提交、收藏靠前、星标不可点只做标记、加载与失败各占一行、写入失败留在菜单或弹窗。
|
|
50
|
+
- `lib/` 是构建镜像,`assert:lib-untracked` 判它没被 git 跟踪。
|
|
45
51
|
|
|
46
52
|
要肉眼确认页面上的形态,用仓库的 `node tools/verify-client.mjs dsh-model-submenu --needle '<你新写的类名或文案>'`。
|
package/README.md
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
# @lynn123411/dsh-model-submenu
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
把输入框旁的模型选择器换成两层:一层只列当前供应商的模型与思考等级,一层弹窗列全部供应商的模型,可搜、可收藏。
|
|
4
4
|
|
|
5
5
|
## 功能
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
7
|
+
- **小菜单只列当前供应商的模型**:顶部一行灰色供应商名,下面按供应商目录排模型;已收藏的排前面并带金色实心星,当前模型带勾选。点模型立即切换并关闭菜单。
|
|
8
|
+
- **思考等级就地切换**:一行分段按钮,模型配了几档就显示几档,放不下时这一行横向滚动;点一下只改选中态,菜单关闭时才写入,没有改动就不写。模型不提供思考等级时整行隐藏。
|
|
9
|
+
- **弹窗列全部模型**:顶部搜索框(模型名与供应商名都搜)、每个有模型的供应商一个标签页、每行下面一行元信息(供应商、上下文窗口、思考、图片输入)。点模型立即切换;星标只切换收藏,不选中、不关弹窗。
|
|
10
|
+
- **收藏按目录顺序靠前**:收藏表存在浏览器本地,整台浏览器共用一张;目录里消失的模型保留收藏,回来时还在。
|
|
11
|
+
- **失败与加载都有交代**:加载中一行文字、加载失败一行文字带「重新加载」、提交被拒弹出与内置同款的提示气泡;点模型被拒时小菜单保持打开,关闭菜单时被拒则界面回退到提交前。
|
|
11
12
|
|
|
12
13
|
## 特性
|
|
13
14
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
15
|
+
- **两层各管一件事**:小菜单只服务当前供应商的常用模型与思考等级,换供应商、跨供应商找模型都走「更多模型…」打开的弹窗;宿主自带的 `/model` 命令保持原样。
|
|
16
|
+
- **紧凑态照宿主**:输入框放不下一行时只剩图标,跟随宿主给 `conversation.input.model` 的两个显示变量。
|
|
17
|
+
- **元信息只写有把握的**:上下文窗口与图片输入读宿主设置页那份共享缓存(`ctx.configForms.describe()`):上下文窗口只认模型自己声明的值,图片输入在模型没写时按该供应商的默认模态判断;判不出来的与明确不支持的都整段略去,既不写「未知」也不写「不支持」。工具调用在宿主里没有对应字段,一律不写。
|
|
18
|
+
- **接管内置座位**:以 `priority: -100` 占据 `conversation.input.model`,外观沿用内置弹层与 `--dsw-*` 主题变量;形态与装配见 [DETAILS.md](./DETAILS.md)。
|
|
17
19
|
|
|
18
20
|
## 安装
|
|
19
21
|
|