@lynn123411/dsh-model-submenu 0.2.5 → 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 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-client-ui-slots`、`@deepseek-ai/dsh-client-locale`、`@deepseek-ai/dsh-client-ui-model-selection`。少声明一个不会报错,只会让插件在页面里消失。
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` + `assert:lib-untracked`。`scripts/smoke-client.mjs` 按 Web shell 的方式装载构建产物 `lib/client.js`(`window.__ModuleLoader__.load` 桩件),喂假 cordis 服务,断言导出身份、`inject` 表、以 `priority: -100` 接管 `conversation.input.model` 座位,以及各供应商与模型的注册项齐全;`lib/` 是构建镜像,`assert:lib-untracked` 判它没被 git 跟踪。
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
- - **推理等级照原生**:根面板的「推理等级」行进入当前模型的等级列表,选中即提交,「Default」行表示跟随供应商默认;当前模型没有推理等级时不显示这一行。
9
- - **加载与失败有提示**:目录加载中显示刷新提示,加载失败与供应商加载失败都在列表顶部给出提示与「重新加载」,提交被拒时弹出与内置同款的提示气泡。
10
- - **键鼠行为照旧**:方向键在行间移动、Tab 等同回车、Escape 与 Shift+Tab 先退回上一层、在根层才关闭;输入框过窄时触发器只显示图标。
7
+ - **小菜单只列当前供应商的模型**:顶部一行灰色供应商名,下面按供应商目录排模型;已收藏的排前面并带金色实心星,当前模型带勾选。点模型立即切换并关闭菜单。
8
+ - **思考等级就地切换**:一行分段按钮,模型配了几档就显示几档,放不下时这一行横向滚动;点一下只改选中态,菜单关闭时才写入,没有改动就不写。模型不提供思考等级时整行隐藏。
9
+ - **弹窗列全部模型**:顶部搜索框(模型名与供应商名都搜)、每个有模型的供应商一个标签页、每行下面一行元信息(供应商、上下文窗口、思考、图片输入)。点模型立即切换;星标只切换收藏,不选中、不关弹窗。
10
+ - **收藏按目录顺序靠前**:收藏表存在浏览器本地,整台浏览器共用一张;目录里消失的模型保留收藏,回来时还在。
11
+ - **失败与加载都有交代**:加载中一行文字、加载失败一行文字带「重新加载」、提交被拒弹出与内置同款的提示气泡;点模型被拒时小菜单保持打开,关闭菜单时被拒则界面回退到提交前。
11
12
 
12
13
  ## 特性
13
14
 
14
- - **一级仍是原生两行**:根面板保持内置弹层的两行结构,「供应商」取代原来的「模型」,右侧显示当前供应商名,「推理等级」行原样保留。
15
- - **接管内置座位**:以 `priority: -100` 占据 `conversation.input.model`,外观沿用内置弹层与 `--dsw-*` 主题变量;`/model` 命令面板与设置页不受影响。
16
- - **形态与装配**:bundle 型插件,客户端半边随包内 `cordis.patch.yml` 的根层行服务,profile 侧不用手写补丁;装法、开发副本与验证见 [DETAILS.md](./DETAILS.md)。
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