dsh-client-auto-continue 0.3.2 → 0.4.1
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 +21 -7
- package/README.zh.md +19 -5
- package/docs/banner-dark.svg +1 -25
- package/docs/banner-zh-dark.svg +1 -25
- package/docs/banner-zh.svg +1 -25
- package/docs/banner.svg +1 -25
- package/docs/demo-zh.svg +1 -50
- package/docs/demo.svg +1 -50
- package/docs/screenshots/01-settings-section.png +0 -0
- package/docs/screenshots/02-settings-card.png +0 -0
- package/docs/screenshots/03-demo-session.png +0 -0
- package/docs/screenshots/04-ai-disclosure.png +0 -0
- package/docs/screenshots/Screenshot 2026-08-15 at 14.38.48.png +0 -0
- package/docs/social-preview.png +0 -0
- package/docs/social-preview.svg +1 -43
- package/lib/client.js +10 -5
- package/lib/client.js.map +2 -2
- package/lib/types/client/locales.d.ts +1 -0
- package/lib/types/client/settings-card.d.ts +3 -3
- package/package.json +1 -1
- package/scripts/patch-expose.mjs +69 -33
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
<a href="https://www.npmjs.com/package/dsh-client-auto-continue"><img src="https://img.shields.io/npm/dm/dsh-client-auto-continue?label=downloads" alt="npm downloads"></a>
|
|
17
17
|
<a href="https://github.com/HsiangNianian/dsh-auto-continue/stargazers"><img src="https://img.shields.io/github/stars/HsiangNianian/dsh-auto-continue?logo=github&label=Stars" alt="GitHub stars"></a>
|
|
18
18
|
<a href="https://github.com/HsiangNianian/dsh-auto-continue/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-65a30d?style=flat" alt="MIT license"></a>
|
|
19
|
+
<a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="awesome · DSH plugin"></a>
|
|
19
20
|
<br>
|
|
20
21
|
<img src="https://img.shields.io/badge/TypeScript-3178C6?style=flat&logo=typescript&logoColor=fff" alt="TypeScript">
|
|
21
22
|
<img src="https://img.shields.io/badge/esbuild-FFCF00?style=flat&logo=esbuild&logoColor=000" alt="esbuild">
|
|
@@ -79,6 +80,17 @@ dsh plugin --profile web add dsh-client-auto-continue
|
|
|
79
80
|
dsh web
|
|
80
81
|
```
|
|
81
82
|
|
|
83
|
+
### Directly from GitHub (no clone needed)
|
|
84
|
+
|
|
85
|
+
Installs straight from the repository's default branch — built artifacts are committed, so no local clone or build step:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
dsh plugin --profile web add github:HsiangNianian/dsh-auto-continue
|
|
89
|
+
dsh web
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
> This tracks the `main` branch rather than released tags — great for trying the latest changes, while the npm method above is the stable choice. Switching between install sources is just re-running `dsh plugin --profile web add <other-spec>`; the profile dependency is replaced in place.
|
|
93
|
+
|
|
82
94
|
### From this repository
|
|
83
95
|
|
|
84
96
|
Requires Node.js ≥ 18.
|
|
@@ -109,11 +121,12 @@ dsh web
|
|
|
109
121
|
|
|
110
122
|
> Switching from a manual install to `dsh plugin add`? Remove the manual `insert` entry first — the bundle patch registers the row and a duplicate would conflict.
|
|
111
123
|
|
|
112
|
-
> **Known DSH limitation (0.1.0-rc.6):** the web
|
|
113
|
-
>
|
|
114
|
-
>
|
|
115
|
-
>
|
|
116
|
-
>
|
|
124
|
+
> **Known DSH limitation (0.1.0-rc.6):** the web settings surface only exposes
|
|
125
|
+
> namespaces on a hardcoded allowlist in the installed `@deepseek-ai/dsh-host-apiproxy`
|
|
126
|
+
> bundle. Until upstream moves exposure into `settings.register()`, one idempotent
|
|
127
|
+
> vendor patch makes exposure **registry-driven** — every namespace a plugin
|
|
128
|
+
> registers (this one or any other) becomes visible, with no plugin-specific
|
|
129
|
+
> strings anywhere. Run it once, and re-run after reinstalling dsh:
|
|
117
130
|
>
|
|
118
131
|
> ```sh
|
|
119
132
|
> node node_modules/dsh-client-auto-continue/scripts/patch-expose.mjs
|
|
@@ -124,7 +137,7 @@ dsh web
|
|
|
124
137
|
> covers every reachable dsh installation: the profile-linked copy, a global
|
|
125
138
|
> `npm i -g @deepseek-ai/dsh` install, and the invoking directory's own. The
|
|
126
139
|
> auto-continue engine itself works without this patch — it only gates the
|
|
127
|
-
> GUI settings
|
|
140
|
+
> GUI settings section.
|
|
128
141
|
|
|
129
142
|
### Verify & uninstall
|
|
130
143
|
|
|
@@ -144,7 +157,7 @@ dsh web
|
|
|
144
157
|
|
|
145
158
|
## Configuration
|
|
146
159
|
|
|
147
|
-
Everything is configurable from the GUI — no file or console edits needed. Open **Settings →
|
|
160
|
+
Everything is configurable from the GUI — no file or console edits needed. Open **Settings → Auto continue** — the plugin's own section, placed right after **Agent presets**.
|
|
148
161
|
|
|
149
162
|
**How the card works:**
|
|
150
163
|
|
|
@@ -209,6 +222,7 @@ While `npm run watch` runs, the profile's client-hmr row polls `lib/client.js` e
|
|
|
209
222
|
## Links
|
|
210
223
|
|
|
211
224
|
- **Repository**: [github.com/HsiangNianian/dsh-auto-continue](https://github.com/HsiangNianian/dsh-auto-continue)
|
|
225
|
+
- **LINUX DO**: [linux.do](https://linux.do)
|
|
212
226
|
- **DeepSeek Harness**: [github.com/deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)
|
|
213
227
|
|
|
214
228
|
---
|
package/README.zh.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
<a href="https://www.npmjs.com/package/dsh-client-auto-continue"><img src="https://img.shields.io/npm/dm/dsh-client-auto-continue?label=downloads" alt="npm downloads"></a>
|
|
17
17
|
<a href="https://github.com/HsiangNianian/dsh-auto-continue/stargazers"><img src="https://img.shields.io/github/stars/HsiangNianian/dsh-auto-continue?logo=github&label=Stars" alt="GitHub stars"></a>
|
|
18
18
|
<a href="https://github.com/HsiangNianian/dsh-auto-continue/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-65a30d?style=flat" alt="MIT license"></a>
|
|
19
|
+
<a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="awesome · DSH plugin"></a>
|
|
19
20
|
<br>
|
|
20
21
|
<img src="https://img.shields.io/badge/TypeScript-3178C6?style=flat&logo=typescript&logoColor=fff" alt="TypeScript">
|
|
21
22
|
<img src="https://img.shields.io/badge/esbuild-FFCF00?style=flat&logo=esbuild&logoColor=000" alt="esbuild">
|
|
@@ -79,6 +80,17 @@ dsh plugin --profile web add dsh-client-auto-continue
|
|
|
79
80
|
dsh web
|
|
80
81
|
```
|
|
81
82
|
|
|
83
|
+
### 直接从 GitHub 安装(无需克隆)
|
|
84
|
+
|
|
85
|
+
直接从仓库默认分支安装——构建产物已提交入库, 无需本地克隆或构建:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
dsh plugin --profile web add github:HsiangNianian/dsh-auto-continue
|
|
89
|
+
dsh web
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
> 该方式跟踪 `main` 分支而不是发布 tag——适合尝鲜最新改动, 稳定性首选上面的 npm 方式。切换安装来源只需重新执行 `dsh plugin --profile web add <其他来源>`, profile 依赖会被就地替换。
|
|
93
|
+
|
|
82
94
|
### 从本仓库安装
|
|
83
95
|
|
|
84
96
|
需要 Node.js ≥ 18。
|
|
@@ -109,10 +121,11 @@ dsh web
|
|
|
109
121
|
|
|
110
122
|
> 从手动安装切换到 `dsh plugin add` 时, 请先删掉手动加的 `insert` 条目——包自带的 bundle patch 会注册插件行, 重复注册会冲突。
|
|
111
123
|
|
|
112
|
-
> **已知 DSH 限制(0.1.0-rc.6):** webui
|
|
124
|
+
> **已知 DSH 限制(0.1.0-rc.6):** webui 的设置区只暴露已安装
|
|
113
125
|
> `@deepseek-ai/dsh-host-apiproxy` 包中硬编码白名单里的设置命名空间。在官方把暴露
|
|
114
|
-
> 逻辑移入 `settings.register()` 之前,
|
|
115
|
-
>
|
|
126
|
+
> 逻辑移入 `settings.register()` 之前, 需要执行一次幂等的供应商补丁, 让暴露变成
|
|
127
|
+
> **注册表驱动**——任何插件注册的命名空间(本插件或其他插件)都会自动可见, 补丁中
|
|
128
|
+
> 没有任何插件相关的硬编码字符串。执行一次即可, 重新安装 dsh 后重跑:
|
|
116
129
|
>
|
|
117
130
|
> ```sh
|
|
118
131
|
> node node_modules/dsh-client-auto-continue/scripts/patch-expose.mjs
|
|
@@ -121,7 +134,7 @@ dsh web
|
|
|
121
134
|
>
|
|
122
135
|
> 补丁脚本随 npm 包一起发布(无需克隆仓库), 并覆盖所有可达的 dsh 安装: profile
|
|
123
136
|
> 链接副本、全局 `npm i -g @deepseek-ai/dsh` 安装、以及当前目录的安装。自动续跑
|
|
124
|
-
> 引擎本身不依赖这个补丁——它只影响 GUI
|
|
137
|
+
> 引擎本身不依赖这个补丁——它只影响 GUI 设置区是否可见。
|
|
125
138
|
|
|
126
139
|
### 验证与卸载
|
|
127
140
|
|
|
@@ -141,7 +154,7 @@ dsh web
|
|
|
141
154
|
|
|
142
155
|
## 配置
|
|
143
156
|
|
|
144
|
-
所有参数都可以在 GUI 里配置——无需改文件或控制台。打开 **设置 →
|
|
157
|
+
所有参数都可以在 GUI 里配置——无需改文件或控制台。打开 **设置 → 自动继续**——插件专属设置区, 位于 **Agent 预设** 之后。
|
|
145
158
|
|
|
146
159
|
**卡片操作说明:**
|
|
147
160
|
|
|
@@ -206,6 +219,7 @@ npm run test # node tests/simulate.mjs — 12 个行为场景
|
|
|
206
219
|
## 链接
|
|
207
220
|
|
|
208
221
|
- **仓库**: [github.com/HsiangNianian/dsh-auto-continue](https://github.com/HsiangNianian/dsh-auto-continue)
|
|
222
|
+
- **LINUX DO**: [linux.do](https://linux.do)
|
|
209
223
|
- **DeepSeek Harness**: [github.com/deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)
|
|
210
224
|
|
|
211
225
|
---
|
package/docs/banner-dark.svg
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="60%" stop-color="#0c2336"/>
|
|
6
|
-
<stop offset="100%" stop-color="#111a33"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<linearGradient id="bar" x1="0" y1="0" x2="1" y2="0">
|
|
9
|
-
<stop offset="0%" stop-color="#38bdf8"/>
|
|
10
|
-
<stop offset="100%" stop-color="#818cf8"/>
|
|
11
|
-
</linearGradient>
|
|
12
|
-
</defs>
|
|
13
|
-
<rect width="1200" height="260" fill="url(#bg)"/>
|
|
14
|
-
<!-- accent bar -->
|
|
15
|
-
<rect x="0" y="252" width="1200" height="8" fill="url(#bar)"/>
|
|
16
|
-
<!-- Continue chip -->
|
|
17
|
-
<rect x="76" y="70" width="148" height="116" rx="26" fill="#f8fafc"/>
|
|
18
|
-
<text x="150" y="136" font-size="34" font-weight="700" fill="#0f172a" text-anchor="middle">Continue</text>
|
|
19
|
-
<!-- title -->
|
|
20
|
-
<text x="268" y="122" font-size="54" font-weight="800" fill="#f8fafc">dsh-auto-continue</text>
|
|
21
|
-
<!-- subtitle -->
|
|
22
|
-
<text x="270" y="164" font-size="26" fill="#94a3b8">DSH Web UI plugin — auto-continue interrupted requests</text>
|
|
23
|
-
<!-- caption -->
|
|
24
|
-
<text x="270" y="202" font-size="21" fill="#7dd3fc" font-family="ui-monospace, SFMono-Regular, Menlo, monospace">turn/end · error | interrupted | max-tokens → prompt("Continue")</text>
|
|
25
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 1200 260"><defs><linearGradient id="bg" x1="0" x2="1" y1="0" y2="1"><stop offset="0%" stop-color="#0b1220"/><stop offset="60%" stop-color="#0c2336"/><stop offset="100%" stop-color="#111a33"/></linearGradient><linearGradient id="bar" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#38bdf8"/><stop offset="100%" stop-color="#818cf8"/></linearGradient></defs><rect width="1200" height="260" fill="url(#bg)"/><rect width="1200" height="8" x="0" y="252" fill="url(#bar)"/><rect width="148" height="116" x="76" y="70" fill="#f8fafc" rx="26"/><text x="150" y="136" fill="#0f172a" font-size="34" font-weight="700" text-anchor="middle">Continue</text><text x="268" y="122" fill="#f8fafc" font-size="54" font-weight="800">dsh-auto-continue</text><text x="270" y="164" fill="#94a3b8" font-size="26">DSH Web UI plugin — auto-continue interrupted requests</text><text x="270" y="202" fill="#7dd3fc" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="21">turn/end · error | interrupted | max-tokens → prompt("Continue")</text></svg>
|
package/docs/banner-zh-dark.svg
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="60%" stop-color="#0c2336"/>
|
|
6
|
-
<stop offset="100%" stop-color="#111a33"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<linearGradient id="bar" x1="0" y1="0" x2="1" y2="0">
|
|
9
|
-
<stop offset="0%" stop-color="#38bdf8"/>
|
|
10
|
-
<stop offset="100%" stop-color="#818cf8"/>
|
|
11
|
-
</linearGradient>
|
|
12
|
-
</defs>
|
|
13
|
-
<rect width="1200" height="260" fill="url(#bg)"/>
|
|
14
|
-
<!-- accent bar -->
|
|
15
|
-
<rect x="0" y="252" width="1200" height="8" fill="url(#bar)"/>
|
|
16
|
-
<!-- 继续 chip -->
|
|
17
|
-
<rect x="76" y="70" width="116" height="116" rx="26" fill="#f8fafc"/>
|
|
18
|
-
<text x="134" y="150" font-size="58" font-weight="700" fill="#0f172a" text-anchor="middle">继续</text>
|
|
19
|
-
<!-- title -->
|
|
20
|
-
<text x="236" y="122" font-size="54" font-weight="800" fill="#f8fafc">dsh-auto-continue</text>
|
|
21
|
-
<!-- subtitle -->
|
|
22
|
-
<text x="238" y="164" font-size="26" fill="#94a3b8">DSH Web UI plugin — auto-continue interrupted requests</text>
|
|
23
|
-
<!-- caption -->
|
|
24
|
-
<text x="238" y="202" font-size="21" fill="#7dd3fc" font-family="ui-monospace, SFMono-Regular, Menlo, monospace">turn/end · error | interrupted | max-tokens → prompt("继续")</text>
|
|
25
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 1200 260"><defs><linearGradient id="bg" x1="0" x2="1" y1="0" y2="1"><stop offset="0%" stop-color="#0b1220"/><stop offset="60%" stop-color="#0c2336"/><stop offset="100%" stop-color="#111a33"/></linearGradient><linearGradient id="bar" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#38bdf8"/><stop offset="100%" stop-color="#818cf8"/></linearGradient></defs><rect width="1200" height="260" fill="url(#bg)"/><rect width="1200" height="8" x="0" y="252" fill="url(#bar)"/><rect width="116" height="116" x="76" y="70" fill="#f8fafc" rx="26"/><text x="134" y="150" fill="#0f172a" font-size="58" font-weight="700" text-anchor="middle">继续</text><text x="236" y="122" fill="#f8fafc" font-size="54" font-weight="800">dsh-auto-continue</text><text x="238" y="164" fill="#94a3b8" font-size="26">DSH Web UI plugin — auto-continue interrupted requests</text><text x="238" y="202" fill="#7dd3fc" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="21">turn/end · error | interrupted | max-tokens → prompt("继续")</text></svg>
|
package/docs/banner-zh.svg
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#f8fafc"/>
|
|
5
|
-
<stop offset="60%" stop-color="#e0f2fe"/>
|
|
6
|
-
<stop offset="100%" stop-color="#e0e7ff"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<linearGradient id="bar" x1="0" y1="0" x2="1" y2="0">
|
|
9
|
-
<stop offset="0%" stop-color="#0ea5e9"/>
|
|
10
|
-
<stop offset="100%" stop-color="#6366f1"/>
|
|
11
|
-
</linearGradient>
|
|
12
|
-
</defs>
|
|
13
|
-
<rect width="1200" height="260" fill="url(#bg)"/>
|
|
14
|
-
<!-- accent bar -->
|
|
15
|
-
<rect x="0" y="252" width="1200" height="8" fill="url(#bar)"/>
|
|
16
|
-
<!-- 继续 chip -->
|
|
17
|
-
<rect x="76" y="70" width="116" height="116" rx="26" fill="#0f172a"/>
|
|
18
|
-
<text x="134" y="150" font-size="58" font-weight="700" fill="#e2e8f0" text-anchor="middle">继续</text>
|
|
19
|
-
<!-- title -->
|
|
20
|
-
<text x="236" y="122" font-size="54" font-weight="800" fill="#0f172a">dsh-auto-continue</text>
|
|
21
|
-
<!-- subtitle -->
|
|
22
|
-
<text x="238" y="164" font-size="26" fill="#475569">DSH Web UI plugin — auto-continue interrupted requests</text>
|
|
23
|
-
<!-- caption -->
|
|
24
|
-
<text x="238" y="202" font-size="21" fill="#64748b" font-family="ui-monospace, SFMono-Regular, Menlo, monospace">turn/end · error | interrupted | max-tokens → prompt("继续")</text>
|
|
25
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 1200 260"><defs><linearGradient id="bg" x1="0" x2="1" y1="0" y2="1"><stop offset="0%" stop-color="#f8fafc"/><stop offset="60%" stop-color="#e0f2fe"/><stop offset="100%" stop-color="#e0e7ff"/></linearGradient><linearGradient id="bar" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#0ea5e9"/><stop offset="100%" stop-color="#6366f1"/></linearGradient></defs><rect width="1200" height="260" fill="url(#bg)"/><rect width="1200" height="8" x="0" y="252" fill="url(#bar)"/><rect width="116" height="116" x="76" y="70" fill="#0f172a" rx="26"/><text x="134" y="150" fill="#e2e8f0" font-size="58" font-weight="700" text-anchor="middle">继续</text><text x="236" y="122" fill="#0f172a" font-size="54" font-weight="800">dsh-auto-continue</text><text x="238" y="164" fill="#475569" font-size="26">DSH Web UI plugin — auto-continue interrupted requests</text><text x="238" y="202" fill="#64748b" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="21">turn/end · error | interrupted | max-tokens → prompt("继续")</text></svg>
|
package/docs/banner.svg
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#f8fafc"/>
|
|
5
|
-
<stop offset="60%" stop-color="#e0f2fe"/>
|
|
6
|
-
<stop offset="100%" stop-color="#e0e7ff"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<linearGradient id="bar" x1="0" y1="0" x2="1" y2="0">
|
|
9
|
-
<stop offset="0%" stop-color="#0ea5e9"/>
|
|
10
|
-
<stop offset="100%" stop-color="#6366f1"/>
|
|
11
|
-
</linearGradient>
|
|
12
|
-
</defs>
|
|
13
|
-
<rect width="1200" height="260" fill="url(#bg)"/>
|
|
14
|
-
<!-- accent bar -->
|
|
15
|
-
<rect x="0" y="252" width="1200" height="8" fill="url(#bar)"/>
|
|
16
|
-
<!-- Continue chip -->
|
|
17
|
-
<rect x="76" y="70" width="148" height="116" rx="26" fill="#0f172a"/>
|
|
18
|
-
<text x="150" y="136" font-size="34" font-weight="700" fill="#e2e8f0" text-anchor="middle">Continue</text>
|
|
19
|
-
<!-- title -->
|
|
20
|
-
<text x="268" y="122" font-size="54" font-weight="800" fill="#0f172a">dsh-auto-continue</text>
|
|
21
|
-
<!-- subtitle -->
|
|
22
|
-
<text x="270" y="164" font-size="26" fill="#475569">DSH Web UI plugin — auto-continue interrupted requests</text>
|
|
23
|
-
<!-- caption -->
|
|
24
|
-
<text x="270" y="202" font-size="21" fill="#64748b" font-family="ui-monospace, SFMono-Regular, Menlo, monospace">turn/end · error | interrupted | max-tokens → prompt("Continue")</text>
|
|
25
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="260" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 1200 260"><defs><linearGradient id="bg" x1="0" x2="1" y1="0" y2="1"><stop offset="0%" stop-color="#f8fafc"/><stop offset="60%" stop-color="#e0f2fe"/><stop offset="100%" stop-color="#e0e7ff"/></linearGradient><linearGradient id="bar" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#0ea5e9"/><stop offset="100%" stop-color="#6366f1"/></linearGradient></defs><rect width="1200" height="260" fill="url(#bg)"/><rect width="1200" height="8" x="0" y="252" fill="url(#bar)"/><rect width="148" height="116" x="76" y="70" fill="#0f172a" rx="26"/><text x="150" y="136" fill="#e2e8f0" font-size="34" font-weight="700" text-anchor="middle">Continue</text><text x="268" y="122" fill="#0f172a" font-size="54" font-weight="800">dsh-auto-continue</text><text x="270" y="164" fill="#475569" font-size="26">DSH Web UI plugin — auto-continue interrupted requests</text><text x="270" y="202" fill="#64748b" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="21">turn/end · error | interrupted | max-tokens → prompt("Continue")</text></svg>
|
package/docs/demo-zh.svg
CHANGED
|
@@ -1,50 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="420"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="100%" stop-color="#0e1a2e"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="accent" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
-
<stop offset="0%" stop-color="#38bdf8"/>
|
|
9
|
-
<stop offset="100%" stop-color="#818cf8"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
</defs>
|
|
12
|
-
<rect width="720" height="420" rx="20" fill="url(#bg)"/>
|
|
13
|
-
<!-- header -->
|
|
14
|
-
<rect x="0" y="0" width="720" height="46" rx="20" fill="#111c30"/>
|
|
15
|
-
<rect x="0" y="30" width="720" height="16" fill="#111c30"/>
|
|
16
|
-
<circle cx="22" cy="23" r="5" fill="#f87171"/><circle cx="38" cy="23" r="5" fill="#fbbf24"/><circle cx="54" cy="23" r="5" fill="#34d399"/>
|
|
17
|
-
<text x="600" y="28" font-size="13" fill="#64748b" text-anchor="end">dsh web — 会话</text>
|
|
18
|
-
<rect x="0" y="46" width="720" height="3" fill="url(#accent)" opacity="0.7"/>
|
|
19
|
-
<!-- chat area -->
|
|
20
|
-
<text x="40" y="92" font-size="14" fill="#94a3b8">你</text>
|
|
21
|
-
<rect x="40" y="100" width="300" height="34" rx="10" fill="#1e293b"/>
|
|
22
|
-
<text x="52" y="121" font-size="13" fill="#e2e8f0">优化一下这个函数</text>
|
|
23
|
-
<text x="40" y="164" font-size="14" fill="#94a3b8">助手</text>
|
|
24
|
-
<!-- 助手 typing phase A (visible 0-1.2s and 4.2-5.2s) -->
|
|
25
|
-
<g>
|
|
26
|
-
<animate attributeName="opacity" values="1;1;0;0;0;0;1;1;0" keyTimes="0;0.24;0.28;0.5;0.6;0.84;0.88;1;1" dur="5.2s" repeatCount="indefinite"/>
|
|
27
|
-
<rect x="40" y="172" width="150" height="34" rx="10" fill="#0f1b2e" stroke="#23324a"/>
|
|
28
|
-
<circle cx="70" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" values="0.3;1;0.3" dur="0.9s" repeatCount="indefinite"/></circle>
|
|
29
|
-
<circle cx="88" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" values="0.3;1;0.3" dur="0.9s" begin="0.3s" repeatCount="indefinite"/></circle>
|
|
30
|
-
<circle cx="106" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" values="0.3;1;0.3" dur="0.9s" begin="0.6s" repeatCount="indefinite"/></circle>
|
|
31
|
-
</g>
|
|
32
|
-
<!-- error banner phase B (1.4-2.4s) -->
|
|
33
|
-
<g>
|
|
34
|
-
<animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;0.28;0.32;0.48;0.52;1" dur="5.2s" repeatCount="indefinite"/>
|
|
35
|
-
<rect x="40" y="236" width="420" height="40" rx="10" fill="#2a1215" stroke="#b91c1c"/>
|
|
36
|
-
<circle cx="64" cy="256" r="7" fill="#f87171"/>
|
|
37
|
-
<text x="82" y="261" font-size="13" fill="#fecaca">请求中断 — 网络错误 (UPSTREAM)</text>
|
|
38
|
-
</g>
|
|
39
|
-
<!-- auto 继续 bubble phase C (2.6-3.8s) -->
|
|
40
|
-
<g>
|
|
41
|
-
<animate attributeName="opacity" values="0;0;0;1;1;0;0" keyTimes="0;0.32;0.5;0.54;0.72;0.76;1" dur="5.2s" repeatCount="indefinite"/>
|
|
42
|
-
<rect x="40" y="300" width="150" height="36" rx="10" fill="#0c4a6e" stroke="#38bdf8" stroke-width="1.5"/>
|
|
43
|
-
<text x="52" y="323" font-size="13" fill="#e0f2fe">⏳ 自动发送: 继续</text>
|
|
44
|
-
<text x="210" y="323" font-size="12" fill="#38bdf8">来自 dsh-auto-continue</text>
|
|
45
|
-
</g>
|
|
46
|
-
<!-- 助手 resumed phase D (4.2-5.2s): same typing group reused -->
|
|
47
|
-
<!-- footer status bar -->
|
|
48
|
-
<rect x="0" y="402" width="720" height="18" fill="#0d1524"/>
|
|
49
|
-
<text x="360" y="414" font-size="11" fill="#475569" text-anchor="middle">宽限 3s → 自动「继续」→ 恢复 — 循环演示</text>
|
|
50
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="420" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 720 420"><defs><linearGradient id="bg" x1="0" x2="0" y1="0" y2="1"><stop offset="0%" stop-color="#0b1220"/><stop offset="100%" stop-color="#0e1a2e"/></linearGradient><linearGradient id="accent" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#38bdf8"/><stop offset="100%" stop-color="#818cf8"/></linearGradient></defs><rect width="720" height="420" fill="url(#bg)" rx="20"/><rect width="720" height="46" x="0" y="0" fill="#111c30" rx="20"/><rect width="720" height="16" x="0" y="30" fill="#111c30"/><circle cx="22" cy="23" r="5" fill="#f87171"/><circle cx="38" cy="23" r="5" fill="#fbbf24"/><circle cx="54" cy="23" r="5" fill="#34d399"/><text x="600" y="28" fill="#64748b" font-size="13" text-anchor="end">dsh web — 会话</text><rect width="720" height="3" x="0" y="46" fill="url(#accent)" opacity=".7"/><text x="40" y="92" fill="#94a3b8" font-size="14">你</text><rect width="300" height="34" x="40" y="100" fill="#1e293b" rx="10"/><text x="52" y="121" fill="#e2e8f0" font-size="13">优化一下这个函数</text><text x="40" y="164" fill="#94a3b8" font-size="14">助手</text><g><animate attributeName="opacity" dur="5.2s" keyTimes="0;0.24;0.28;0.5;0.6;0.84;0.88;1;1" repeatCount="indefinite" values="1;1;0;0;0;0;1;1;0"/><rect width="150" height="34" x="40" y="172" fill="#0f1b2e" stroke="#23324a" rx="10"/><circle cx="70" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" dur="0.9s" repeatCount="indefinite" values="0.3;1;0.3"/></circle><circle cx="88" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" begin="0.3s" dur="0.9s" repeatCount="indefinite" values="0.3;1;0.3"/></circle><circle cx="106" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" begin="0.6s" dur="0.9s" repeatCount="indefinite" values="0.3;1;0.3"/></circle></g><g><animate attributeName="opacity" dur="5.2s" keyTimes="0;0.28;0.32;0.48;0.52;1" repeatCount="indefinite" values="0;0;1;1;0;0"/><rect width="420" height="40" x="40" y="236" fill="#2a1215" stroke="#b91c1c" rx="10"/><circle cx="64" cy="256" r="7" fill="#f87171"/><text x="82" y="261" fill="#fecaca" font-size="13">请求中断 — 网络错误 (UPSTREAM)</text></g><g><animate attributeName="opacity" dur="5.2s" keyTimes="0;0.32;0.5;0.54;0.72;0.76;1" repeatCount="indefinite" values="0;0;0;1;1;0;0"/><rect width="150" height="36" x="40" y="300" fill="#0c4a6e" stroke="#38bdf8" stroke-width="1.5" rx="10"/><text x="52" y="323" fill="#e0f2fe" font-size="13">⏳ 自动发送: 继续</text><text x="210" y="323" fill="#38bdf8" font-size="12">来自 dsh-auto-continue</text></g><rect width="720" height="18" x="0" y="402" fill="#0d1524"/><text x="360" y="414" fill="#475569" font-size="11" text-anchor="middle">宽限 3s → 自动「继续」→ 恢复 — 循环演示</text></svg>
|
package/docs/demo.svg
CHANGED
|
@@ -1,50 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="420"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="100%" stop-color="#0e1a2e"/>
|
|
6
|
-
</linearGradient>
|
|
7
|
-
<linearGradient id="accent" x1="0" y1="0" x2="1" y2="0">
|
|
8
|
-
<stop offset="0%" stop-color="#38bdf8"/>
|
|
9
|
-
<stop offset="100%" stop-color="#818cf8"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
</defs>
|
|
12
|
-
<rect width="720" height="420" rx="20" fill="url(#bg)"/>
|
|
13
|
-
<!-- header -->
|
|
14
|
-
<rect x="0" y="0" width="720" height="46" rx="20" fill="#111c30"/>
|
|
15
|
-
<rect x="0" y="30" width="720" height="16" fill="#111c30"/>
|
|
16
|
-
<circle cx="22" cy="23" r="5" fill="#f87171"/><circle cx="38" cy="23" r="5" fill="#fbbf24"/><circle cx="54" cy="23" r="5" fill="#34d399"/>
|
|
17
|
-
<text x="600" y="28" font-size="13" fill="#64748b" text-anchor="end">dsh web — session</text>
|
|
18
|
-
<rect x="0" y="46" width="720" height="3" fill="url(#accent)" opacity="0.7"/>
|
|
19
|
-
<!-- chat area -->
|
|
20
|
-
<text x="40" y="92" font-size="14" fill="#94a3b8">you</text>
|
|
21
|
-
<rect x="40" y="100" width="300" height="34" rx="10" fill="#1e293b"/>
|
|
22
|
-
<text x="52" y="121" font-size="13" fill="#e2e8f0">Refactor this function</text>
|
|
23
|
-
<text x="40" y="164" font-size="14" fill="#94a3b8">agent</text>
|
|
24
|
-
<!-- agent typing phase A (visible 0-1.2s and 4.2-5.2s) -->
|
|
25
|
-
<g>
|
|
26
|
-
<animate attributeName="opacity" values="1;1;0;0;0;0;1;1;0" keyTimes="0;0.24;0.28;0.5;0.6;0.84;0.88;1;1" dur="5.2s" repeatCount="indefinite"/>
|
|
27
|
-
<rect x="40" y="172" width="150" height="34" rx="10" fill="#0f1b2e" stroke="#23324a"/>
|
|
28
|
-
<circle cx="70" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" values="0.3;1;0.3" dur="0.9s" repeatCount="indefinite"/></circle>
|
|
29
|
-
<circle cx="88" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" values="0.3;1;0.3" dur="0.9s" begin="0.3s" repeatCount="indefinite"/></circle>
|
|
30
|
-
<circle cx="106" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" values="0.3;1;0.3" dur="0.9s" begin="0.6s" repeatCount="indefinite"/></circle>
|
|
31
|
-
</g>
|
|
32
|
-
<!-- error banner phase B (1.4-2.4s) -->
|
|
33
|
-
<g>
|
|
34
|
-
<animate attributeName="opacity" values="0;0;1;1;0;0" keyTimes="0;0.28;0.32;0.48;0.52;1" dur="5.2s" repeatCount="indefinite"/>
|
|
35
|
-
<rect x="40" y="236" width="420" height="40" rx="10" fill="#2a1215" stroke="#b91c1c"/>
|
|
36
|
-
<circle cx="64" cy="256" r="7" fill="#f87171"/>
|
|
37
|
-
<text x="82" y="261" font-size="13" fill="#fecaca">Request interrupted — network error (UPSTREAM)</text>
|
|
38
|
-
</g>
|
|
39
|
-
<!-- auto 继续 bubble phase C (2.6-3.8s) -->
|
|
40
|
-
<g>
|
|
41
|
-
<animate attributeName="opacity" values="0;0;0;1;1;0;0" keyTimes="0;0.32;0.5;0.54;0.72;0.76;1" dur="5.2s" repeatCount="indefinite"/>
|
|
42
|
-
<rect x="40" y="300" width="150" height="36" rx="10" fill="#0c4a6e" stroke="#38bdf8" stroke-width="1.5"/>
|
|
43
|
-
<text x="52" y="323" font-size="13" fill="#e0f2fe">⏳ auto-sent: 继续</text>
|
|
44
|
-
<text x="210" y="323" font-size="12" fill="#38bdf8">by dsh-auto-continue</text>
|
|
45
|
-
</g>
|
|
46
|
-
<!-- agent resumed phase D (4.2-5.2s): same typing group reused -->
|
|
47
|
-
<!-- footer status bar -->
|
|
48
|
-
<rect x="0" y="402" width="720" height="18" fill="#0d1524"/>
|
|
49
|
-
<text x="360" y="414" font-size="11" fill="#475569" text-anchor="middle">grace 3s → auto 继续 → resume — looped demo</text>
|
|
50
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="420" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 720 420"><defs><linearGradient id="bg" x1="0" x2="0" y1="0" y2="1"><stop offset="0%" stop-color="#0b1220"/><stop offset="100%" stop-color="#0e1a2e"/></linearGradient><linearGradient id="accent" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#38bdf8"/><stop offset="100%" stop-color="#818cf8"/></linearGradient></defs><rect width="720" height="420" fill="url(#bg)" rx="20"/><rect width="720" height="46" x="0" y="0" fill="#111c30" rx="20"/><rect width="720" height="16" x="0" y="30" fill="#111c30"/><circle cx="22" cy="23" r="5" fill="#f87171"/><circle cx="38" cy="23" r="5" fill="#fbbf24"/><circle cx="54" cy="23" r="5" fill="#34d399"/><text x="600" y="28" fill="#64748b" font-size="13" text-anchor="end">dsh web — session</text><rect width="720" height="3" x="0" y="46" fill="url(#accent)" opacity=".7"/><text x="40" y="92" fill="#94a3b8" font-size="14">you</text><rect width="300" height="34" x="40" y="100" fill="#1e293b" rx="10"/><text x="52" y="121" fill="#e2e8f0" font-size="13">Refactor this function</text><text x="40" y="164" fill="#94a3b8" font-size="14">agent</text><g><animate attributeName="opacity" dur="5.2s" keyTimes="0;0.24;0.28;0.5;0.6;0.84;0.88;1;1" repeatCount="indefinite" values="1;1;0;0;0;0;1;1;0"/><rect width="150" height="34" x="40" y="172" fill="#0f1b2e" stroke="#23324a" rx="10"/><circle cx="70" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" dur="0.9s" repeatCount="indefinite" values="0.3;1;0.3"/></circle><circle cx="88" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" begin="0.3s" dur="0.9s" repeatCount="indefinite" values="0.3;1;0.3"/></circle><circle cx="106" cy="189" r="4" fill="#64748b"><animate attributeName="opacity" begin="0.6s" dur="0.9s" repeatCount="indefinite" values="0.3;1;0.3"/></circle></g><g><animate attributeName="opacity" dur="5.2s" keyTimes="0;0.28;0.32;0.48;0.52;1" repeatCount="indefinite" values="0;0;1;1;0;0"/><rect width="420" height="40" x="40" y="236" fill="#2a1215" stroke="#b91c1c" rx="10"/><circle cx="64" cy="256" r="7" fill="#f87171"/><text x="82" y="261" fill="#fecaca" font-size="13">Request interrupted — network error (UPSTREAM)</text></g><g><animate attributeName="opacity" dur="5.2s" keyTimes="0;0.32;0.5;0.54;0.72;0.76;1" repeatCount="indefinite" values="0;0;0;1;1;0;0"/><rect width="150" height="36" x="40" y="300" fill="#0c4a6e" stroke="#38bdf8" stroke-width="1.5" rx="10"/><text x="52" y="323" fill="#e0f2fe" font-size="13">⏳ auto-sent: 继续</text><text x="210" y="323" fill="#38bdf8" font-size="12">by dsh-auto-continue</text></g><rect width="720" height="18" x="0" y="402" fill="#0d1524"/><text x="360" y="414" fill="#475569" font-size="11" text-anchor="middle">grace 3s → auto 继续 → resume — looped demo</text></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/social-preview.png
CHANGED
|
Binary file
|
package/docs/social-preview.svg
CHANGED
|
@@ -1,43 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640"
|
|
2
|
-
<defs>
|
|
3
|
-
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
-
<stop offset="0%" stop-color="#0b1220"/>
|
|
5
|
-
<stop offset="55%" stop-color="#0c2336"/>
|
|
6
|
-
<stop offset="100%" stop-color="#101a30"/>
|
|
7
|
-
</linearGradient>
|
|
8
|
-
<linearGradient id="glow" x1="0" y1="0" x2="1" y2="0">
|
|
9
|
-
<stop offset="0%" stop-color="#38bdf8" stop-opacity="0.16"/>
|
|
10
|
-
<stop offset="100%" stop-color="#818cf8" stop-opacity="0.16"/>
|
|
11
|
-
</linearGradient>
|
|
12
|
-
<linearGradient id="bar" x1="0" y1="0" x2="1" y2="0">
|
|
13
|
-
<stop offset="0%" stop-color="#38bdf8"/>
|
|
14
|
-
<stop offset="100%" stop-color="#818cf8"/>
|
|
15
|
-
</linearGradient>
|
|
16
|
-
<linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
|
|
17
|
-
<stop offset="0%" stop-color="#f8fafc"/>
|
|
18
|
-
<stop offset="100%" stop-color="#e2e8f0"/>
|
|
19
|
-
</linearGradient>
|
|
20
|
-
</defs>
|
|
21
|
-
<rect width="1280" height="640" fill="url(#bg)"/>
|
|
22
|
-
<rect x="0" y="0" width="1280" height="300" fill="url(#glow)"/>
|
|
23
|
-
<!-- Continue chip -->
|
|
24
|
-
<rect x="88" y="120" width="250" height="180" rx="40" fill="url(#chip)"/>
|
|
25
|
-
<text x="213" y="226" font-size="64" font-weight="800" fill="#0f172a" text-anchor="middle">Continue</text>
|
|
26
|
-
<!-- title -->
|
|
27
|
-
<text x="400" y="200" font-size="76" font-weight="800" fill="#f8fafc">dsh-auto-continue</text>
|
|
28
|
-
<!-- subtitle -->
|
|
29
|
-
<text x="402" y="258" font-size="32" fill="#94a3b8">DSH Web UI plugin — auto-continue interrupted requests</text>
|
|
30
|
-
<!-- caption -->
|
|
31
|
-
<text x="402" y="316" font-size="24" fill="#7dd3fc" font-family="ui-monospace, SFMono-Regular, Menlo, monospace">turn/end · error | interrupted | max-tokens → prompt("Continue")</text>
|
|
32
|
-
<!-- feature pills -->
|
|
33
|
-
<rect x="402" y="368" width="250" height="56" rx="28" fill="#1e293b" stroke="#334155"/>
|
|
34
|
-
<text x="527" y="403" font-size="22" fill="#e2e8f0" text-anchor="middle">auto-resume on failure</text>
|
|
35
|
-
<rect x="668" y="368" width="264" height="56" rx="28" fill="#1e293b" stroke="#334155"/>
|
|
36
|
-
<text x="800" y="403" font-size="22" fill="#e2e8f0" text-anchor="middle">GUI-configurable settings</text>
|
|
37
|
-
<rect x="948" y="368" width="240" height="56" rx="28" fill="#1e293b" stroke="#334155"/>
|
|
38
|
-
<text x="1068" y="403" font-size="22" fill="#e2e8f0" text-anchor="middle">dsh plugin add</text>
|
|
39
|
-
<!-- repo line -->
|
|
40
|
-
<text x="402" y="500" font-size="26" fill="#64748b">github.com/HsiangNianian/dsh-auto-continue</text>
|
|
41
|
-
<!-- accent bar -->
|
|
42
|
-
<rect x="0" y="628" width="1280" height="12" fill="url(#bar)"/>
|
|
43
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif" viewBox="0 0 1280 640"><defs><linearGradient id="bg" x1="0" x2="1" y1="0" y2="1"><stop offset="0%" stop-color="#0b1220"/><stop offset="55%" stop-color="#0c2336"/><stop offset="100%" stop-color="#101a30"/></linearGradient><linearGradient id="glow" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#38bdf8" stop-opacity=".16"/><stop offset="100%" stop-color="#818cf8" stop-opacity=".16"/></linearGradient><linearGradient id="bar" x1="0" x2="1" y1="0" y2="0"><stop offset="0%" stop-color="#38bdf8"/><stop offset="100%" stop-color="#818cf8"/></linearGradient><linearGradient id="chip" x1="0" x2="0" y1="0" y2="1"><stop offset="0%" stop-color="#f8fafc"/><stop offset="100%" stop-color="#e2e8f0"/></linearGradient></defs><rect width="1280" height="640" fill="url(#bg)"/><rect width="1280" height="300" x="0" y="0" fill="url(#glow)"/><rect width="250" height="180" x="88" y="120" fill="url(#chip)" rx="40"/><text x="213" y="226" fill="#0f172a" font-size="64" font-weight="800" text-anchor="middle">Continue</text><text x="400" y="200" fill="#f8fafc" font-size="76" font-weight="800">dsh-auto-continue</text><text x="402" y="258" fill="#94a3b8" font-size="32">DSH Web UI plugin — auto-continue interrupted requests</text><text x="402" y="316" fill="#7dd3fc" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="24">turn/end · error | interrupted | max-tokens → prompt("Continue")</text><rect width="250" height="56" x="402" y="368" fill="#1e293b" stroke="#334155" rx="28"/><text x="527" y="403" fill="#e2e8f0" font-size="22" text-anchor="middle">auto-resume on failure</text><rect width="264" height="56" x="668" y="368" fill="#1e293b" stroke="#334155" rx="28"/><text x="800" y="403" fill="#e2e8f0" font-size="22" text-anchor="middle">GUI-configurable settings</text><rect width="240" height="56" x="948" y="368" fill="#1e293b" stroke="#334155" rx="28"/><text x="1068" y="403" fill="#e2e8f0" font-size="22" text-anchor="middle">dsh plugin add</text><text x="402" y="500" fill="#64748b" font-size="26">github.com/HsiangNianian/dsh-auto-continue</text><rect width="1280" height="12" x="0" y="628" fill="url(#bar)"/></svg>
|
package/lib/client.js
CHANGED
|
@@ -295,6 +295,8 @@ var AutoContinueRunner = class {
|
|
|
295
295
|
} else if (reason.kind === "aborted") {
|
|
296
296
|
state.consecutive = 0;
|
|
297
297
|
} else if (reason.kind === "blocked") {
|
|
298
|
+
} else if (reason.kind === "interrupted") {
|
|
299
|
+
state.consecutive = 0;
|
|
298
300
|
} else if (reason.kind === "error") {
|
|
299
301
|
const error = reason.error;
|
|
300
302
|
state.lastFailure = {
|
|
@@ -304,8 +306,8 @@ var AutoContinueRunner = class {
|
|
|
304
306
|
};
|
|
305
307
|
state.lastTurn = event.data.turn;
|
|
306
308
|
this.onTurnFailure(sessionId, "turn/end:error", state.lastFailure);
|
|
307
|
-
} else if (
|
|
308
|
-
this.schedule(sessionId,
|
|
309
|
+
} else if (reason.kind === "max-tokens") {
|
|
310
|
+
this.schedule(sessionId, "turn/end:max-tokens");
|
|
309
311
|
}
|
|
310
312
|
break;
|
|
311
313
|
}
|
|
@@ -558,6 +560,7 @@ var AutoContinueRunner = class {
|
|
|
558
560
|
|
|
559
561
|
// src/client/locales.ts
|
|
560
562
|
var zh = {
|
|
563
|
+
"nav": "自动继续",
|
|
561
564
|
"card.title": "自动继续",
|
|
562
565
|
"card.description": "请求因网络等原因(非人为)中断后, 自动发送「继续」续跑。",
|
|
563
566
|
"field.continueText": "继续文本",
|
|
@@ -604,6 +607,7 @@ var zh = {
|
|
|
604
607
|
"chrome.off": "关"
|
|
605
608
|
};
|
|
606
609
|
var en = {
|
|
610
|
+
"nav": "Auto continue",
|
|
607
611
|
"card.title": "Auto continue",
|
|
608
612
|
"card.description": "When a request is interrupted by a non-human cause, automatically send 「继续」 to resume.",
|
|
609
613
|
"field.continueText": "Continue text",
|
|
@@ -1338,12 +1342,13 @@ function apply(ctx) {
|
|
|
1338
1342
|
current = new AutoContinueRunner(ctx.connection.api, () => resolveConfig(scope.getSnapshot().value));
|
|
1339
1343
|
const controller = new AutoContinueSettingsCardController(scope);
|
|
1340
1344
|
ctx.slots.inject(
|
|
1341
|
-
"settings.
|
|
1345
|
+
"settings.section",
|
|
1342
1346
|
() => ctx.slots.register(
|
|
1343
1347
|
{
|
|
1344
|
-
name: "settings.
|
|
1348
|
+
name: "settings.section",
|
|
1345
1349
|
id: "auto-continue",
|
|
1346
|
-
order:
|
|
1350
|
+
order: 21,
|
|
1351
|
+
label: () => ctx.locale.bind(NS)("nav"),
|
|
1347
1352
|
locale: NS,
|
|
1348
1353
|
inject: () => controller.inject()
|
|
1349
1354
|
},
|