dsh-loop-engine-allinone 0.4.0 → 0.7.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/CHANGELOG.md +107 -0
- package/README.md +173 -197
- package/README.zh.md +172 -64
- package/lib/client.js +28 -0
- package/lib/index.js +251 -108
- package/lib/invariant.js +28 -0
- package/lib/types/driver-acp/client.d.ts +20 -0
- package/lib/types/engine-registry.d.ts +35 -0
- package/lib/types/model-discovery.d.ts +98 -0
- package/lib/types/model-registry.d.ts +78 -0
- package/lib/types/provider-route.d.ts +8 -4
- package/package.json +152 -152
package/README.zh.md
CHANGED
|
@@ -1,89 +1,197 @@
|
|
|
1
1
|
# dsh-loop-engine-allinone
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
[English](README.md) · **简体中文**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](#版本兼容性)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
**dsh-loop-engine-allinone** 是专为 [DeepSeek Harness](https://github.com/deepseek-ai)(`dsh`)打造的 Agent 循环引擎全功能切换插件。支持**按会话独立切换** 10 家主流外部引擎与 Harness 原生 `in-process` 循环。
|
|
9
|
+
|
|
10
|
+
各会话完全隔离互不干扰:一个窗口运行 Codex,另一个窗口可同时运行 Kimi Code 或 Antigravity。托管引擎之间支持**无缝原地热换**;切换至原生 `in-process` 时会自动刷新页面重新挂载(无需重启 `dsh web` 后端进程)。**全程无需修改 DeepSeek Harness 主仓库源码**。
|
|
11
|
+
|
|
12
|
+
> **Fork 说明**:本项目基于 [`kuun993/dsh-loop-engine`](https://github.com/kuun993/dsh-loop-engine) 进行深度重构与扩展。
|
|
13
|
+
> 上游插件实现了初代 4 款引擎的按会话切换。本 Fork 将其重构为**统一的数据驱动引擎注册表**与**可插拔的共享驱动架构**,将支持的引擎一举扩充至 **10 款**,并支持外部 CLI 自由配置与独立订阅模型选择。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
### 核心亮点与对比
|
|
18
|
+
|
|
19
|
+
| 功能特性 | 上游仓库 (`kuun993`) | 本 Fork (`allinone`) |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| **支持引擎数** | 4 款 | **10 款**(+ 原生 `in-process`) |
|
|
22
|
+
| **引擎名单维护** | 分散硬编码在 5+ 处文件 | **单张注册表统一声明** (`src/engine-registry.ts`) |
|
|
23
|
+
| **接入新引擎** | 需修改 5 个文件 | **1 行注册表 + 1 个驱动实现** |
|
|
24
|
+
| **ACP 协议支持** | 仅 1 款(Kimi) | **3 款**(Kimi / Grok / MiniMax)共享一套标准化 ACP 驱动骨架 |
|
|
25
|
+
| **外部 CLI 适配** | 零散处理 | 标准化 `driver-cli/` 与 `driver-acp/` 运行时 |
|
|
26
|
+
| **订阅模型选择** | 仅全局 default | **按引擎独立的订阅型号表,运行时自动发现**(厂家发新模型无需插件发版) |
|
|
27
|
+
| **UI 视觉与标识** | 基础显示 | **10 款引擎均具备专属图标与状态栏色彩字形** |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 安装说明
|
|
32
|
+
|
|
33
|
+
通过 `dsh plugin` 命令行直接安装:
|
|
8
34
|
|
|
9
35
|
```sh
|
|
36
|
+
# 从 npm 安装(推荐)
|
|
10
37
|
dsh plugin --profile web add dsh-loop-engine-allinone
|
|
11
38
|
```
|
|
12
39
|
|
|
13
|
-
|
|
40
|
+
然后启动一次 web profile,打开 **Settings → Loop engine**:
|
|
14
41
|
|
|
15
|
-
|
|
42
|
+
```sh
|
|
43
|
+
dsh web
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> `dsh` 是 harness 的命令行程序;`dsh web` 启动它的 **web profile**——本插件的引擎选择器与设置页就在那个界面里。
|
|
47
|
+
|
|
48
|
+
装到 `web` 以外的 profile(桌面版的 `desktop`、`headless` 部署、改过名的 profile)时,
|
|
49
|
+
要把 `--profile web` 换成对应名字,**并且**在组合条目里写 `profile: <名字>`。
|
|
50
|
+
只做前一半是本插件最容易犯的错:插件挂上了,却一个引擎都跑不起来。详见下方安装须知。
|
|
16
51
|
|
|
17
|
-
|
|
18
|
-
|
|
52
|
+
### 安装注意事项
|
|
53
|
+
|
|
54
|
+
- **Profile 自动配置**:安装时会自动在对应 Profile 的 `cordis.patch.yml` 中写入一段受管配置块,原有配置内容均逐字节安全保留。
|
|
55
|
+
- **非 Web Profile 部署**:若安装至桌面版 `desktop` 或 headless 等自定义 profile,需在配置中显式指定 `profile: <name>`:
|
|
19
56
|
```yaml
|
|
20
57
|
- id: loop-engine
|
|
21
58
|
config:
|
|
22
59
|
profile: desktop
|
|
23
60
|
```
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
- **pnpm 10
|
|
27
|
-
-
|
|
61
|
+
*(若未指定,插件默认挂载到 `web` profile,导致自定义 profile 无法生效。)*
|
|
62
|
+
- **卸载插件**:执行 `dsh plugin --profile web remove dsh-loop-engine-allinone`,并手动清理 `cordis.patch.yml` 中残留的 `loop-engine` 受管块。
|
|
63
|
+
- **pnpm 10+ 构建拦截**:若遇到 `ERR_PNPM_IGNORED_BUILDS`(提示 `esbuild`、`@google/genai` 等构建被忽略),执行 `pnpm approve-builds` 允许即可。
|
|
64
|
+
- **源码模式运行 Harness**:若通过源码启动 Harness,需按照 [docs/source-checkout.md](docs/source-checkout.md) 说明配置 `file:` shim 桥接依赖包。
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 支持引擎一览
|
|
71
|
+
|
|
72
|
+
| 引擎名称 | 运行模式 / 协议 | 本机依赖与环境准备 |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| **Claude Code** | 捆绑 SDK / `ndjson` | 默认什么都不用装(SDK 自带二进制);要跑自己的那份就设 `bins.claudeBin` |
|
|
75
|
+
| **Codex** | 捆绑 / `jsonrpc` | 执行 `codex login` 或配置 `CODEX_API_KEY` |
|
|
76
|
+
| **Pi** | 捆绑 / `jsonrpc` | `~/.pi/agent/auth.json`,或提供方的 API-key 环境变量 |
|
|
77
|
+
| **Kimi Code** | 外部 CLI / `acp` | 安装 `kimi` CLI 并登录(`kimi login`) |
|
|
78
|
+
| **Antigravity** | 外部 CLI / `ndjson` | 安装 `agy` CLI 并完成 Google 账号登录 |
|
|
79
|
+
| **ZCode** | 外部 CLI / `jsonrpc` | 安装 `zcode` CLI,且 GLM Coding Plan 套餐有效 |
|
|
80
|
+
| **Qoder CN** | 外部 CLI / `ndjson` | 安装 `qoderclicn` CLI 并登录 |
|
|
81
|
+
| **Hermes Agent** | 外部 CLI / `text` | 安装 `hermes` CLI 并完成配置(`hermes setup`) |
|
|
82
|
+
| **Grok Build** | 外部 CLI / `acp` | 安装 `grok` CLI 并登录过一次(`grok login`) |
|
|
83
|
+
| **MiniMax Code** | 外部 CLI / `acp` | `npm i -g @minimax-ai/code`,然后 `mcode login --region cn\|global`,再 `mcode provider use token-plan` |
|
|
84
|
+
|
|
85
|
+
> **型号表是运行时发现的,不在这里列举。** 每家引擎的型号都来自引擎自己——Kimi Code 在启动时读它自己的配置文件,ACP 引擎在开会话时从 `session/new` 的响应里拿——所以厂家发新模型**不需要插件发版**。本版本读不到目录的引擎回落到声明表,两者都没有的显示共享 `external` 分组。设置页会标明当前是哪一种。
|
|
86
|
+
|
|
87
|
+
> **提示**:外部 CLI 引擎(`bundled: false`)直接调度本机已安装的工具,插件本身不捆绑、不替用户安装或登录外部 CLI。请确保对应命令行已在系统中安装就绪。
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 配置参考
|
|
94
|
+
|
|
95
|
+
在 profile 的配置文件(`cordis.patch.yml`)中可自定义各项参数:
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
- id: loop-engine
|
|
99
|
+
config:
|
|
100
|
+
# 1. 自定义可执行文件路径(可选,覆盖 PATH 或替换默认二进制)
|
|
101
|
+
bins:
|
|
102
|
+
claudeBin: 'D:/tools/claude.exe'
|
|
103
|
+
kimiBin: 'D:/tools/kimi.exe'
|
|
104
|
+
agyBin: 'D:/tools/agy.exe'
|
|
105
|
+
qoderclicnBin: 'D:/tools/qoderclicn.exe'
|
|
106
|
+
grokBin: 'C:/Users/username/.grok/bin/grok.exe'
|
|
107
|
+
minimaxcodeBin: 'D:/npm-global/node_modules/@minimax-ai/code/cli.js'
|
|
108
|
+
|
|
109
|
+
# 2. 账号区域设置(可选,MiniMax Code 支持 'cn' 或 'en')
|
|
110
|
+
regions:
|
|
111
|
+
mcodeRegion: 'cn'
|
|
112
|
+
|
|
113
|
+
# 3. 常驻子进程空闲回收时间(毫秒,默认 0 为不回收)
|
|
114
|
+
# 适用于具备常驻会话进程的引擎(Kimi、Codex、Grok、MiniMax Code)。
|
|
115
|
+
childIdleMs: 300000
|
|
116
|
+
|
|
117
|
+
# 4. 托管会话上下文上限(token,默认 262144)
|
|
118
|
+
# 用于 dsh 自动上下文压缩(默认达到 80% 触发)。建议设置为使用中最小引擎的窗口。
|
|
119
|
+
engineContextWindow: 262144
|
|
120
|
+
|
|
121
|
+
# 5. 托管会话压缩摘要模型(必须成对配置)
|
|
122
|
+
# 托管会话进行上下文压缩时,通过此模型进行内容摘要总结。
|
|
123
|
+
summarizerProvider: 'deepseek-official'
|
|
124
|
+
summarizerModel: 'deepseek-flash'
|
|
125
|
+
```
|
|
28
126
|
|
|
29
|
-
|
|
127
|
+
---
|
|
30
128
|
|
|
31
|
-
|
|
32
|
-
|---|---|
|
|
33
|
-
| Claude Code | 已安装并登录 Claude Code CLI |
|
|
34
|
-
| Codex | 执行过 `codex login`,或配置 `CODEX_API_KEY` |
|
|
35
|
-
| Pi | `pi` 自己要求的认证方式(其 `~/.pi/agent/auth.json`,或提供方的 API-key 环境变量) |
|
|
36
|
-
| Kimi Code | 已安装并登录 `kimi` CLI,且在 `PATH` 上(或用 `kimiBin` 固定路径) |
|
|
129
|
+
## 使用指南
|
|
37
130
|
|
|
38
|
-
|
|
131
|
+
- **创建新会话**:在工作区旁的 Preset 下拉栏选择目标引擎;选择 `standard` 则使用 Harness 原生 `in-process` 引擎。子 Agent 自动继承父会话的引擎。
|
|
132
|
+
- **修改全局默认**:在 **Settings → Loop engine** 中设置新会话的默认引擎,立即生效且不影响既有会话。
|
|
133
|
+
- **会话中途切换引擎**:在设置中开启「在对话页显示引擎选择器」后,可在输入框底部随时更换:
|
|
134
|
+
- **托管引擎 ↔ 托管引擎**:原地热换,即刻生效。
|
|
135
|
+
- **托管引擎 ↔ 原生 in-process**:弹出确认提示,确认后刷新浏览器标签页重载会话(会话历史完整保留;未发送草稿和滚动位置重置)。
|
|
136
|
+
- *注意*:正在执行推理的会话不可切换,必须在会话空闲时进行。
|
|
137
|
+
- **状态徽标**:会话标题栏会实时显示当前正在驱动该会话的引擎图标与名称,可通过设置开关控制显隐。
|
|
138
|
+
- **模型与订阅选择**:
|
|
139
|
+
- 声明了独立型号目录的引擎(**Antigravity**、**Codex**、**Kimi Code**、**Grok Build**、**MiniMax Code**)会在模型列表中呈现其专属订阅模型,选中即把该 id 交给引擎。
|
|
140
|
+
- **Pi** 与 **ZCode** 故意没有声明型号表。Pi 的型号表是**运行时刷新**的(`pi update --models` 从各 provider 拉取),写死必然过期;ZCode 的型号表读不到,因为它的 GLM Coding Plan 套餐已到期——过期账号列不出自己能用什么。
|
|
141
|
+
- 其余托管引擎统一归类至 `external` 分组,组内只有一条 `default`,含义是「交给引擎自己决定」。**这不是功能限制**:它只是菜单把「本版本还没实测过型号的引擎」折叠在一起;在注册表里加一行 `models`,该引擎立刻就有自己的分组。
|
|
142
|
+
- 也可以选一个**真实的 dsh 模型**:插件会把该模型的端点与凭据一并交给引擎。引擎能不能用是引擎的事,被拒会如实报错而不是悄悄吞掉。
|
|
143
|
+
- 原生命令(`/export`、`/feedback`、`/permission`)及自动压缩机制完全可用。
|
|
39
144
|
|
|
40
|
-
|
|
41
|
-
- **Settings → Loop engine** 决定**新会话**的默认引擎:改完立即生效,已经在跑的会话不受影响。选 **In-process** 会把插件接手前的默认值恢复回去。
|
|
42
|
-
- **换当前这条会话**用对话页 composer 的引擎选择器(勾选 *在对话页显示引擎选择器*)。
|
|
43
|
-
- 托管 → 托管:原地换手,当场生效。
|
|
44
|
-
- 涉及 `in-process` 的方向:先弹确认框,确认后页面重新载入并回到同一条会话(滚动位置与未发出的草稿会丢,会话记录不丢)。
|
|
45
|
-
- 正在跑一轮的会话会被**拒绝**,子 agent 的会话不能换。
|
|
46
|
-
- **对话头部那个标记**(preset 标签旁边)写的是这条会话**实际在跑**的引擎;取消勾选 *在对话头部显示引擎标记* 即可关掉它(关掉后 header 上不留插件的任何痕迹)。
|
|
47
|
-
- **模型**——所有托管引擎共用 **一个** `external` 分组,里面只有一条 `default`,含义是"交给引擎自己决定"。选一条**真实的 dsh 模型**会把模型连同它的端点与凭据一起交给引擎;引擎能不能用是引擎的事,**被拒会如实报错而不是悄悄吞掉**。`in-process` 会话照常用 dsh 的模型。
|
|
48
|
-
- **`childIdleMs`**(组合条目,毫秒,默认 `0` = 不启用)——Kimi 与 Codex **每条会话保有一个常驻子进程**跨 step 复用;设了它就在空闲这么久之后把子进程关掉,下一步再重新拉起。只关子进程,所以不会触发任何重载。Pi 与 Claude Code 每步各起一次,不受影响。
|
|
49
|
-
- **dsh 自己的命令**(`/export`、`/feedback`、`/permission`)在托管引擎下照常可用。托管引擎的 preset 是 `standard` 的副本,去掉了被外部引擎接管的那几行(dsh 的 `/plan`、`/compact`、goal 工具与 `/goal`、以及技能相关行)。
|
|
145
|
+
---
|
|
50
146
|
|
|
51
|
-
##
|
|
147
|
+
## 架构设计与扩展
|
|
52
148
|
|
|
53
|
-
|
|
149
|
+
本插件采用严格的数据驱动设计,扩展一款新引擎仅需以下步骤:
|
|
54
150
|
|
|
55
|
-
|
|
151
|
+
1. **注册元数据**:在 `src/engine-registry.ts` 中添加引擎 ID 至 `HOSTED_ENGINE_IDS` 并填写配置属性与能力声明(TypeScript 保证类型完全穷举)。
|
|
152
|
+
2. **实现驱动逻辑**:继承 `src/driver-cli/` 或 `src/driver-acp/` 基础能力,实现核心 `runStep` 交互。
|
|
153
|
+
3. **注册分派表**:在 `src/engine-drivers.ts` 中绑定引擎 ID 与驱动类。
|
|
154
|
+
4. **UI 与文案**:在 `src/client/locales.ts` 补充显示文案,并可在 `src/client/engine-marks.ts` 中配置专属 SVG 矢量字形。
|
|
56
155
|
|
|
57
|
-
|
|
156
|
+
完整开发步骤与最佳实践详见 [docs/engine-registry.md](docs/engine-registry.md)。
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 版本兼容性
|
|
161
|
+
|
|
162
|
+
单一版本通过动态探测,全面兼容 DeepSeek Harness 多代版本:
|
|
163
|
+
|
|
164
|
+
| 插件版本系列 | 兼容的 DeepSeek Harness 版本 |
|
|
58
165
|
|---|---|
|
|
59
|
-
| `0.
|
|
60
|
-
| `0.1.
|
|
61
|
-
| `0.1.5-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
- [docs/
|
|
79
|
-
- [docs/
|
|
80
|
-
- [docs/
|
|
81
|
-
- [docs/
|
|
82
|
-
- [docs/
|
|
83
|
-
- [docs/
|
|
84
|
-
- [
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
166
|
+
| `0.2.0-rcX` | `0.2.0-rc.1`, `0.2.0-rc.2` |
|
|
167
|
+
| `0.1.7-rcX` | `0.1.7-rc.1`, `0.1.7-rc.2` |
|
|
168
|
+
| `0.1.5-rcX` | `0.1.5-rc.1`, `0.1.5-rc.2` |
|
|
169
|
+
|
|
170
|
+
版本号 `<harness 线>-rcN` 中的 `rcN` 为本插件对应分支的迭代发布号。详见 [docs/compatibility.md](docs/compatibility.md)。
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 技术细节与已知限制
|
|
175
|
+
|
|
176
|
+
- **Agent Factory 统一门面**:本插件接管了 Harness 的 Agent 工厂。若遇到无法识别或异常的会话,会自动平滑降级至原生 `in-process` 循环,保证服务可用性。
|
|
177
|
+
- **会话与引擎映射**:当前会话与引擎的对应关系保存在 Sidecar 配置文件 `$DSH_HOME/.loop-engine/engines.json` 中;若环境重置则自动回退至预设默认引擎。
|
|
178
|
+
- **多会话并发**:同一引擎的并发会话共享该 CLI 本机的用户登录态与配置目录。
|
|
179
|
+
- **Grok Build Shell 支持**:Grok 相关命令行工具依赖 Harness 客户端终端桥接能力(`ctx.shell`)。
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 文档索引
|
|
184
|
+
|
|
185
|
+
- [docs/engine-registry.md](docs/engine-registry.md) — 引擎注册表规范与 ACP 新引擎添加指南
|
|
186
|
+
- [docs/per-session-engine.md](docs/per-session-engine.md) — 按会话切换引擎的详细交互机制与生命周期说明
|
|
187
|
+
- [docs/architecture.md](docs/architecture.md) — 插件核心架构:路由分发、Factory 槽位与 Patch 注入
|
|
188
|
+
- [docs/driver-core.md](docs/driver-core.md) — 共享驱动层设计与生命周期管理
|
|
189
|
+
- [docs/compatibility.md](docs/compatibility.md) — Harness 跨代版本兼容指南与排错说明
|
|
190
|
+
- [docs/source-checkout.md](docs/source-checkout.md) — 基于 Harness 源码仓库的运行调试方案
|
|
191
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — 开发规范与协议抓包探测工作流
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 开源协议
|
|
196
|
+
|
|
197
|
+
本项目采用 [MIT](LICENSE) 开源许可证。保留上游 `kuun993/dsh-loop-engine` 及本 Fork 贡献者的版权声明,改动范围与细节说明请参阅 [NOTICE](NOTICE)。
|
package/lib/client.js
CHANGED
|
@@ -89,6 +89,20 @@ var ENGINE_REGISTRY = {
|
|
|
89
89
|
loginHint: "run `codex login`, or set CODEX_API_KEY, or point `codexBin` at a signed-in install",
|
|
90
90
|
authPaths: [".codex/auth.json"],
|
|
91
91
|
localeKey: "engineCodex",
|
|
92
|
+
// Read out of the bundled CLI binary (0.149.1), which carries the ids its
|
|
93
|
+
// `thread/start` accepts; the driver passes the picked id straight through as
|
|
94
|
+
// `model`. Only the codex-family ids are listed: the binary also mentions
|
|
95
|
+
// `gpt-4.1`/`gpt-5.6` in contexts this build did not verify, and a wrong id
|
|
96
|
+
// fails loudly at the engine rather than silently falling back.
|
|
97
|
+
models: [
|
|
98
|
+
{ id: "gpt-5.3-codex", label: "GPT-5.3 Codex" },
|
|
99
|
+
{ id: "gpt-5.2-codex", label: "GPT-5.2 Codex" },
|
|
100
|
+
{ id: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
|
|
101
|
+
{ id: "gpt-5.1-codex", label: "GPT-5.1 Codex" },
|
|
102
|
+
{ id: "gpt-5.4", label: "GPT-5.4" },
|
|
103
|
+
{ id: "gpt-5.2", label: "GPT-5.2" },
|
|
104
|
+
{ id: "gpt-5.1", label: "GPT-5.1" }
|
|
105
|
+
],
|
|
92
106
|
capabilities: {
|
|
93
107
|
streaming: true,
|
|
94
108
|
protocol: "jsonrpc",
|
|
@@ -132,6 +146,20 @@ var ENGINE_REGISTRY = {
|
|
|
132
146
|
loginHint: "run `kimi` once and sign in (or `kimi login`)",
|
|
133
147
|
authPaths: [".kimi-code/credentials.json", ".kimi-code/auth.json"],
|
|
134
148
|
localeKey: "engineKimi",
|
|
149
|
+
// Read out of `~/.kimi-code/config.toml`, which the Kimi Code app writes for
|
|
150
|
+
// the signed-in account: one `[models."kimi-code/<id>"]` block per model the
|
|
151
|
+
// account is provisioned for, with the vendor's own display name. The ids are
|
|
152
|
+
// what the app passes as `model`, so they are the right vocabulary for this
|
|
153
|
+
// driver's `session/set_model`. The catalog was NOT read off the ACP surface
|
|
154
|
+
// itself, because the `kimi` CLI is not installed on the machine this was
|
|
155
|
+
// measured on (only the desktop app is) — a stale id fails loudly at the
|
|
156
|
+
// engine rather than silently falling back.
|
|
157
|
+
models: [
|
|
158
|
+
{ id: "k3", label: "K3" },
|
|
159
|
+
{ id: "k3-256k", label: "K3-256k" },
|
|
160
|
+
{ id: "kimi-for-coding", label: "K2.8 Preview" },
|
|
161
|
+
{ id: "kimi-for-coding-highspeed", label: "K2.7 Code Highspeed" }
|
|
162
|
+
],
|
|
135
163
|
capabilities: {
|
|
136
164
|
streaming: true,
|
|
137
165
|
protocol: "acp",
|