dsh-loop-engine 1.0.0-rc5 → 1.0.0-rc7
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/README.md +24 -3
- package/README.zh.md +4 -3
- package/lib/client.js +76 -17
- package/lib/index.js +1548 -329
- package/lib/invariant.js +16 -8
- package/lib/types/client/locales.d.ts +2 -0
- package/lib/types/engine-kimi/acp/client.d.ts +76 -0
- package/lib/types/engine-kimi/acp/mapping.d.ts +44 -0
- package/lib/types/engine-kimi/acp/types.d.ts +95 -0
- package/lib/types/engine-kimi/agent.d.ts +121 -0
- package/lib/types/engine-kimi/commands.d.ts +33 -0
- package/lib/types/engine-kimi/loop.d.ts +86 -0
- package/lib/types/engine-kimi/mapping.d.ts +71 -0
- package/lib/types/engine-kimi/permission.d.ts +28 -0
- package/lib/types/engine-kimi/process.d.ts +61 -0
- package/lib/types/engine-kimi/skills.d.ts +57 -0
- package/lib/types/engine-kimi/types.d.ts +23 -0
- package/lib/types/index.d.ts +4 -2
- package/lib/types/settings.d.ts +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
Switch the agent loop engine of **dsh web** the same way you switch a model: a
|
|
6
6
|
"Loop engine" dropdown in Settings chooses which driver runs your agents — the
|
|
7
|
-
built-in in-process loop, the Claude Code CLI, the Codex CLI,
|
|
8
|
-
without changing anything in the main repository.
|
|
7
|
+
built-in in-process loop, the Claude Code CLI, the Codex CLI, the Pi CLI, or the
|
|
8
|
+
Kimi Code CLI — without changing anything in the main repository.
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
@@ -28,11 +28,14 @@ Restart `dsh web`, then open **Settings → Loop engine**.
|
|
|
28
28
|
- For the Pi engine: authenticated the way `pi` expects (its own
|
|
29
29
|
`~/.pi/agent/auth.json` or the provider's API-key environment variable such as
|
|
30
30
|
`ANTHROPIC_API_KEY`).
|
|
31
|
+
- For the Kimi Code engine: the `kimi` CLI installed and logged in on the host
|
|
32
|
+
(e.g. `kimi login`), and reachable on `PATH` (or pinned to an absolute path
|
|
33
|
+
via `kimiBin` in the composition entry).
|
|
31
34
|
|
|
32
35
|
## Usage
|
|
33
36
|
|
|
34
37
|
1. Pick an engine in **Settings → Loop engine** — `in-process` (default),
|
|
35
|
-
`claude-code`, `codex`, or `
|
|
38
|
+
`claude-code`, `codex`, `pi`, or `kimi` — then restart `dsh web`.
|
|
36
39
|
2. To return to the default, pick **In-process** and restart again.
|
|
37
40
|
3. To remove the plugin: `dsh plugin --profile web remove dsh-loop-engine`, then
|
|
38
41
|
restart `dsh web`.
|
|
@@ -54,6 +57,24 @@ Restart `dsh web`, then open **Settings → Loop engine**.
|
|
|
54
57
|
preferred, plus the user-level file under the pi config dir) and its
|
|
55
58
|
`skills/` catalogs (`~/.pi/agent/skills/` and `.pi/skills/`) are surfaced
|
|
56
59
|
through the dsh skill-injection seam.
|
|
60
|
+
- The Kimi Code driver runs a persistent `kimi acp` child (Agent Client
|
|
61
|
+
Protocol over stdio) and speaks one stateless `session/new` + `session/prompt`
|
|
62
|
+
per dsh step; the durable dsh session log is the sole model context. It streams
|
|
63
|
+
assistant text (`agent_message_chunk`) and thinking (`agent_thought_chunk`)
|
|
64
|
+
incrementally into the log, and maps tool calls/streams (`tool_call` /
|
|
65
|
+
`tool_call_update`) into `tool/call` + `tool/result`. ACP surfaces tool
|
|
66
|
+
approvals as `session/request_permission`, which the driver answers from the
|
|
67
|
+
session's dsh approval knobs (an `ask` policy denies, fail-closed). The child
|
|
68
|
+
is spawned through the dsh subprocess seam — the only privilege boundary
|
|
69
|
+
(default read-only sandbox). Its project `AGENTS.md` chain (cwd→git root) and
|
|
70
|
+
`.kimi-code/skills/` catalogs (user and project) are surfaced through the dsh
|
|
71
|
+
skill-injection seam, and its slash commands are bridged (built-ins forward the
|
|
72
|
+
raw `/name` line back to the engine, which expands it). The prompt is an ACP
|
|
73
|
+
request body — not an argv positional — so there is no command-line length
|
|
74
|
+
ceiling. Note Kimi's remaining slash-command surface is TUI-only
|
|
75
|
+
(`/login`, `/provider`, `/settings`, `/sessions`, …); those are not bridged
|
|
76
|
+
because the ACP prompt surface does not expand them, but `skill:` commands are
|
|
77
|
+
carried by the skill seam and Kimi's own shorthand.
|
|
57
78
|
|
|
58
79
|
## License
|
|
59
80
|
|
package/README.zh.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/dsh-loop-engine)
|
|
4
4
|
|
|
5
|
-
像切换模型一样切换 **dsh web** 的 agent 循环引擎:设置页的「Loop engine」下拉选择运行 agent 的驱动——内置 in-process 循环、Claude Code CLI、Codex CLI,或
|
|
5
|
+
像切换模型一样切换 **dsh web** 的 agent 循环引擎:设置页的「Loop engine」下拉选择运行 agent 的驱动——内置 in-process 循环、Claude Code CLI、Codex CLI、Pi CLI,或 Kimi Code CLI——**无需改动主仓库**。
|
|
6
6
|
|
|
7
7
|
## 安装
|
|
8
8
|
|
|
@@ -19,10 +19,11 @@ dsh plugin --profile web add dsh-loop-engine
|
|
|
19
19
|
- 使用 Claude Code 引擎时需要本机已安装并登录 Claude Code CLI。
|
|
20
20
|
- 使用 Codex 引擎时需要完成认证:本机执行过 `codex login`,或配置 `CODEX_API_KEY` 环境变量。
|
|
21
21
|
- 使用 Pi 引擎时需要以 `pi` 要求的方式完成认证(其自身的 `~/.pi/agent/auth.json`,或提供方的 API-key 环境变量,如 `ANTHROPIC_API_KEY`)。
|
|
22
|
+
- 使用 Kimi Code 引擎时需要本机已安装并登录 `kimi` CLI(例如 `kimi login`),且在 `PATH` 上(或在组合条目里用 `kimiBin` 固定为绝对路径)。
|
|
22
23
|
|
|
23
24
|
## 使用方法
|
|
24
25
|
|
|
25
|
-
1. 在 **Settings → Loop engine** 选择引擎——`in-process`(默认)、`claude-code`、`codex` 或 `
|
|
26
|
+
1. 在 **Settings → Loop engine** 选择引擎——`in-process`(默认)、`claude-code`、`codex`、`pi` 或 `kimi`——然后重启 `dsh web`。
|
|
26
27
|
2. 要切回默认,选 **In-process** 再重启即可。
|
|
27
28
|
3. 卸载插件:`dsh plugin --profile web remove dsh-loop-engine`,然后重启 `dsh web`。
|
|
28
29
|
|
|
@@ -30,7 +31,7 @@ dsh plugin --profile web add dsh-loop-engine
|
|
|
30
31
|
|
|
31
32
|
- Codex 驱动运行 `codex app-server`,没有交互式工具审批——权限来自会话的 `sandboxMode` + `approvalPolicy`。
|
|
32
33
|
- Pi 驱动运行 `pi --mode rpc`;Pi 没有权限系统,所以整个子进程经 dsh subprocess 服务做沙箱化(默认 `read-only`)。
|
|
33
|
-
-
|
|
34
|
+
- Kimi Code 驱动运行一个常驻的 `kimi acp` 子进程(Agent Client Protocol over stdio),每步一次无状态的 `session/new` + `session/prompt`;durable 会话日志是唯一模型上下文。它把助手文本(`agent_message_chunk`)与**思考**(`agent_thought_chunk`)**增量**写入日志,并把工具调用/流(`tool_call` / `tool_call_update`)映射为 `tool/call` + `tool/result`。ACP 通过 `session/request_permission` 暴露工具审批,驱动根据会话的 dsh 审批旋钮应答(ask 策略拒绝,失败关闭)。子进程经 dsh subprocess seam 拉起——唯一权限边界(默认只读沙箱)。其项目 `AGENTS.md` 链(cwd→git 根)与 `.kimi-code/skills/` 目录(用户与项目)通过 dsh 技能注入接口暴露,其斜杠命令也已桥接(内置命令把原始 `/name` 行转发回引擎展开)。prompt 是 ACP 请求体而非 argv 位置参数,因此**不存在命令行长度上限**。注意 Kimi 剩余的斜杠命令面是纯 TUI(`/login`、`/provider`、`/settings`、`/sessions`…),这些不桥接(ACP prompt 面不扩展它们);`skill:` 命令由技能接口与 kimi 自身的 shorthand 承载。
|
|
34
35
|
|
|
35
36
|
## License
|
|
36
37
|
|
package/lib/client.js
CHANGED
|
@@ -34,7 +34,8 @@ var ENGINE_OPTIONS = [
|
|
|
34
34
|
{ value: "in-process", key: "engineInProcess" },
|
|
35
35
|
{ value: "claude-code", key: "engineClaudeCode" },
|
|
36
36
|
{ value: "codex", key: "engineCodex" },
|
|
37
|
-
{ value: "pi", key: "enginePi" }
|
|
37
|
+
{ value: "pi", key: "enginePi" },
|
|
38
|
+
{ value: "kimi", key: "engineKimi" }
|
|
38
39
|
];
|
|
39
40
|
function engineLabelKey(engine) {
|
|
40
41
|
switch (engine) {
|
|
@@ -44,6 +45,8 @@ function engineLabelKey(engine) {
|
|
|
44
45
|
return "engineCodex";
|
|
45
46
|
case "pi":
|
|
46
47
|
return "enginePi";
|
|
48
|
+
case "kimi":
|
|
49
|
+
return "engineKimi";
|
|
47
50
|
default:
|
|
48
51
|
return "engineInProcess";
|
|
49
52
|
}
|
|
@@ -236,7 +239,7 @@ function LoopEngineBadge(props) {
|
|
|
236
239
|
const { status, engine } = useSnapshot((state) => state);
|
|
237
240
|
if (status !== "ready") return null;
|
|
238
241
|
const label = t(
|
|
239
|
-
engine === "claude-code" ? "engineClaudeCode" : engine === "codex" ? "engineCodex" : engine === "pi" ? "enginePi" : "engineInProcess"
|
|
242
|
+
engine === "claude-code" ? "engineClaudeCode" : engine === "codex" ? "engineCodex" : engine === "pi" ? "enginePi" : engine === "kimi" ? "engineKimi" : "engineInProcess"
|
|
240
243
|
);
|
|
241
244
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: pill, title: t("description"), children: [
|
|
242
245
|
t("nav"),
|
|
@@ -253,7 +256,8 @@ var ENGINE_OPTIONS2 = [
|
|
|
253
256
|
{ value: "in-process", key: "engineInProcess" },
|
|
254
257
|
{ value: "claude-code", key: "engineClaudeCode" },
|
|
255
258
|
{ value: "codex", key: "engineCodex" },
|
|
256
|
-
{ value: "pi", key: "enginePi" }
|
|
259
|
+
{ value: "pi", key: "enginePi" },
|
|
260
|
+
{ value: "kimi", key: "engineKimi" }
|
|
257
261
|
];
|
|
258
262
|
function engineLabelKey2(engine) {
|
|
259
263
|
switch (engine) {
|
|
@@ -263,28 +267,69 @@ function engineLabelKey2(engine) {
|
|
|
263
267
|
return "engineCodex";
|
|
264
268
|
case "pi":
|
|
265
269
|
return "enginePi";
|
|
270
|
+
case "kimi":
|
|
271
|
+
return "engineKimi";
|
|
266
272
|
default:
|
|
267
273
|
return "engineInProcess";
|
|
268
274
|
}
|
|
269
275
|
}
|
|
276
|
+
function engineGlyph(engine, size = 16) {
|
|
277
|
+
switch (engine) {
|
|
278
|
+
case "claude-code":
|
|
279
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { fill: "currentColor", d: "M21 10.5h3v3h-3v3h-1.5v3H18v-3h-1.5v3H15v-3H9v3H7.5v-3H6v3H4.5v-3H3v-3H0v-3h3v-6h18Zm-15 0h1.5v-3H6Zm10.5 0H18v-3h-1.5z" }) });
|
|
280
|
+
case "codex":
|
|
281
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("svg", { width: size, height: size, viewBox: "0 0 256 260", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { fill: "currentColor", d: "M239.183914,106.202783 C245.054304,88.5242096 243.02228,69.1733805 233.607599,53.0998864 C219.451678,28.4588021 190.999703,15.7836129 163.213007,21.739505 C147.554077,4.32145883 123.794909,-3.42398554 100.87901,1.41873898 C77.9631105,6.26146349 59.3690093,22.9572536 52.0959621,45.2214219 C33.8436494,48.9644867 18.0901721,60.392749 8.86672513,76.5818033 C-5.443491,101.182962 -2.19544431,132.215255 16.8986662,153.320094 C11.0060865,170.990656 13.0197283,190.343991 22.4238231,206.422991 C36.5975553,231.072344 65.0680342,243.746566 92.8695738,237.783372 C105.235639,251.708249 123.001113,259.630942 141.623968,259.52692 C170.105359,259.552169 195.337611,241.165718 204.037777,214.045661 C222.28734,210.296356 238.038489,198.869783 247.267014,182.68528 C261.404453,158.127515 258.142494,127.262775 239.183914,106.202783 L239.183914,106.202783 Z M141.623968,242.541207 C130.255682,242.559177 119.243876,238.574642 110.519381,231.286197 L112.054146,230.416496 L163.724595,200.590881 C166.340648,199.056444 167.954321,196.256818 167.970781,193.224005 L167.970781,120.373788 L189.815614,133.010026 C190.034132,133.121423 190.186235,133.330564 190.224885,133.572774 L190.224885,193.940229 C190.168603,220.758427 168.442166,242.484864 141.623968,242.541207 Z M37.1575749,197.93062 C31.456498,188.086359 29.4094818,176.546984 31.3766237,165.342426 L32.9113895,166.263285 L84.6329973,196.088901 C87.2389349,197.618207 90.4682717,197.618207 93.0742093,196.088901 L156.255402,159.663793 L156.255402,184.885111 C156.243557,185.149771 156.111725,185.394602 155.89729,185.550176 L103.561776,215.733903 C80.3054953,229.131632 50.5924954,221.165435 37.1575749,197.93062 Z M23.5493181,85.3811273 C29.2899861,75.4733097 38.3511911,67.9162648 49.1287482,64.0478825 L49.1287482,125.438515 C49.0891492,128.459425 50.6965386,131.262556 53.3237748,132.754232 L116.198014,169.025864 L94.3531808,181.662102 C94.1132325,181.789434 93.8257461,181.789434 93.5857979,181.662102 L41.3526015,151.529534 C18.1419426,138.076098 10.1817681,108.385562 23.5493181,85.125333 L23.5493181,85.3811273 Z M203.0146,127.075598 L139.935725,90.4458545 L161.7294,77.8607748 C161.969348,77.7334434 162.256834,77.7334434 162.496783,77.8607748 L214.729979,108.044502 C231.032329,117.451747 240.437294,135.426109 238.871504,154.182739 C237.305714,172.939368 225.050719,189.105572 207.414262,195.67963 L207.414262,134.288998 C207.322521,131.276867 205.650697,128.535853 203.0146,127.075598 Z M224.757116,94.3850867 L223.22235,93.4642272 L171.60306,63.3828173 C168.981293,61.8443751 165.732456,61.8443751 163.110689,63.3828173 L99.9806554,99.8079259 L99.9806554,74.5866077 C99.9533004,74.3254088 100.071095,74.0701869 100.287609,73.9215426 L152.520805,43.7889738 C168.863098,34.3743518 189.174256,35.2529043 204.642579,46.0434841 C220.110903,56.8340638 227.949269,75.5923959 224.757116,94.1804513 L224.757116,94.3850867 Z M88.0606409,139.097931 L66.2158076,126.512851 C65.9950399,126.379091 65.8450965,126.154176 65.8065367,125.898945 L65.8065367,65.684966 C65.8314495,46.8285367 76.7500605,29.6846032 93.8270852,21.6883055 C110.90411,13.6920079 131.063833,16.2835462 145.5632,28.338998 L144.028434,29.2086986 L92.3579852,59.0343142 C89.7419327,60.5687513 88.1282597,63.3683767 88.1117998,66.4011901 L88.0606409,139.097931 Z M99.9294965,113.5185 L128.06687,97.3011417 L156.255402,113.5185 L156.255402,145.953218 L128.169187,162.170577 L99.9806554,145.953218 L99.9294965,113.5185 Z" }) });
|
|
282
|
+
case "pi":
|
|
283
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("svg", { width: size, height: size, viewBox: "0 0 800 800", fill: "none", "aria-hidden": true, children: [
|
|
284
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { fill: "currentColor", fillRule: "evenodd", d: "M165.29 165.29H517.36V400H400V517.36H282.65V634.72H165.29ZM282.65 282.65V400H400V282.65Z" }),
|
|
285
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { fill: "currentColor", d: "M517.36 400H634.72V634.72H517.36Z" })
|
|
286
|
+
] });
|
|
287
|
+
case "kimi":
|
|
288
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { fill: "currentColor", d: "M6 3h2.6v6.5L14.4 3h3.4l-5.6 7.4L17.8 21h-3.4l-5.9-8v8H6z" }) });
|
|
289
|
+
default:
|
|
290
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_dsh_client_ui_primitives2.FishLogo, { size });
|
|
291
|
+
}
|
|
292
|
+
}
|
|
270
293
|
var trigger2 = {
|
|
271
294
|
appearance: "none",
|
|
272
295
|
boxSizing: "border-box",
|
|
273
296
|
display: "inline-flex",
|
|
274
297
|
alignItems: "center",
|
|
275
|
-
gap:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
298
|
+
gap: 4,
|
|
299
|
+
minWidth: 0,
|
|
300
|
+
maxWidth: 220,
|
|
301
|
+
height: 28,
|
|
302
|
+
padding: "0 4px 0 8px",
|
|
303
|
+
border: "none",
|
|
304
|
+
borderRadius: 24,
|
|
305
|
+
outline: "none",
|
|
306
|
+
background: "transparent",
|
|
307
|
+
color: "var(--dsw-alias-label-secondary)",
|
|
281
308
|
font: "inherit",
|
|
282
|
-
fontSize:
|
|
309
|
+
fontSize: 13,
|
|
283
310
|
lineHeight: "20px",
|
|
284
|
-
|
|
311
|
+
fontWeight: 500,
|
|
285
312
|
cursor: "pointer"
|
|
286
313
|
};
|
|
287
|
-
var
|
|
314
|
+
var triggerHover = { ...trigger2, background: "var(--dsw-alias-interactive-bg-hover)" };
|
|
315
|
+
var triggerDisabled2 = { ...trigger2, color: "var(--dsw-alias-label-dimmed)", cursor: "default" };
|
|
316
|
+
var triggerIcon = {
|
|
317
|
+
display: "inline-flex",
|
|
318
|
+
flex: "0 0 auto"
|
|
319
|
+
};
|
|
320
|
+
var triggerLabel = {
|
|
321
|
+
minWidth: 0,
|
|
322
|
+
overflow: "hidden",
|
|
323
|
+
textOverflow: "ellipsis",
|
|
324
|
+
whiteSpace: "nowrap"
|
|
325
|
+
};
|
|
326
|
+
var chevron = {
|
|
327
|
+
display: "inline-flex",
|
|
328
|
+
flex: "0 0 auto",
|
|
329
|
+
color: "var(--dsw-alias-label-caption)",
|
|
330
|
+
transition: "transform 120ms ease"
|
|
331
|
+
};
|
|
332
|
+
var chevronOpen = { ...chevron, transform: "rotate(180deg)" };
|
|
288
333
|
var confirmBody2 = {
|
|
289
334
|
margin: 0,
|
|
290
335
|
fontSize: 13,
|
|
@@ -295,6 +340,7 @@ function LoopEngineComposerSelect(props) {
|
|
|
295
340
|
const { controller, useSnapshot, t } = props;
|
|
296
341
|
const { status, engine, showInComposer, writable } = useSnapshot((snapshot) => snapshot);
|
|
297
342
|
const [open, setOpen] = (0, import_react2.useState)(false);
|
|
343
|
+
const [hovered, setHovered] = (0, import_react2.useState)(false);
|
|
298
344
|
const [pending, setPending] = (0, import_react2.useState)(null);
|
|
299
345
|
const triggerRef = (0, import_react2.useRef)(null);
|
|
300
346
|
if (status !== "ready" || !showInComposer) return null;
|
|
@@ -327,7 +373,11 @@ function LoopEngineComposerSelect(props) {
|
|
|
327
373
|
onClose: () => {
|
|
328
374
|
setOpen(false);
|
|
329
375
|
},
|
|
330
|
-
items: ENGINE_OPTIONS2.map((option) => ({
|
|
376
|
+
items: ENGINE_OPTIONS2.map((option) => ({
|
|
377
|
+
id: option.value,
|
|
378
|
+
label: t(option.key),
|
|
379
|
+
icon: engineGlyph(option.value)
|
|
380
|
+
})),
|
|
331
381
|
selectedId: engine,
|
|
332
382
|
onSelect,
|
|
333
383
|
align: "start",
|
|
@@ -341,14 +391,21 @@ function LoopEngineComposerSelect(props) {
|
|
|
341
391
|
"aria-haspopup": "menu",
|
|
342
392
|
"aria-expanded": open,
|
|
343
393
|
disabled,
|
|
344
|
-
style: disabled ? triggerDisabled2 : trigger2,
|
|
394
|
+
style: disabled ? triggerDisabled2 : hovered ? triggerHover : trigger2,
|
|
345
395
|
title,
|
|
396
|
+
onMouseEnter: () => {
|
|
397
|
+
setHovered(true);
|
|
398
|
+
},
|
|
399
|
+
onMouseLeave: () => {
|
|
400
|
+
setHovered(false);
|
|
401
|
+
},
|
|
346
402
|
onClick: () => {
|
|
347
403
|
setOpen(!open);
|
|
348
404
|
},
|
|
349
405
|
children: [
|
|
350
|
-
|
|
351
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
406
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: triggerIcon, "aria-hidden": true, children: engineGlyph(engine, 14) }),
|
|
407
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: triggerLabel, children: label }),
|
|
408
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { style: open ? chevronOpen : chevron, "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_dsh_client_ui_primitives2.IconChevronDownOutline14, { size: 14 }) })
|
|
352
409
|
]
|
|
353
410
|
}
|
|
354
411
|
)
|
|
@@ -375,7 +432,7 @@ var import_client = require("@deepseek-ai/dsh-client-runtime/client");
|
|
|
375
432
|
function decodeLoopEngine(section) {
|
|
376
433
|
if (typeof section !== "object" || section === null || Array.isArray(section)) return void 0;
|
|
377
434
|
const { engine, showInComposer } = section;
|
|
378
|
-
if (engine !== "in-process" && engine !== "claude-code" && engine !== "codex" && engine !== "pi") {
|
|
435
|
+
if (engine !== "in-process" && engine !== "claude-code" && engine !== "codex" && engine !== "pi" && engine !== "kimi") {
|
|
379
436
|
return void 0;
|
|
380
437
|
}
|
|
381
438
|
return { engine, showInComposer: showInComposer !== false };
|
|
@@ -514,6 +571,7 @@ var zh = {
|
|
|
514
571
|
engineClaudeCode: "Claude Code CLI",
|
|
515
572
|
engineCodex: "Codex CLI",
|
|
516
573
|
enginePi: "Pi CLI",
|
|
574
|
+
engineKimi: "Kimi Code CLI",
|
|
517
575
|
showInComposerLabel: "\u5728\u5BF9\u8BDD\u9875\u663E\u793A\u5F15\u64CE\u9009\u62E9\u5668",
|
|
518
576
|
unavailable: "\u5FAA\u73AF\u5F15\u64CE\u8BBE\u7F6E\u4E0D\u53EF\u7528",
|
|
519
577
|
switchNotice: "\u5207\u6362\u5F15\u64CE\u4F1A\u4E2D\u65AD\u5F53\u524D\u4F7F\u7528\u65E7\u5F15\u64CE\u8FD0\u884C\u4E2D\u7684\u4F1A\u8BDD\u3002",
|
|
@@ -531,6 +589,7 @@ var en = {
|
|
|
531
589
|
engineClaudeCode: "Claude Code CLI",
|
|
532
590
|
engineCodex: "Codex CLI",
|
|
533
591
|
enginePi: "Pi CLI",
|
|
592
|
+
engineKimi: "Kimi Code CLI",
|
|
534
593
|
showInComposerLabel: "Show the engine selector in the chat page",
|
|
535
594
|
unavailable: "Loop engine settings are unavailable",
|
|
536
595
|
switchNotice: "Switching engines interrupts sessions currently running on the previous engine.",
|