dsh-super-code 0.3.9 → 0.3.10

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.
Files changed (59) hide show
  1. package/README.en.md +34 -9
  2. package/README.md +34 -9
  3. package/client/index.js +63 -18
  4. package/cordis.patch.yml +3 -7
  5. package/docs/Changelog.md +16 -0
  6. package/docs/Compatibility.md +38 -3
  7. package/docs/EvaluationResults.md +21 -5
  8. package/docs/UsageGuide.md +18 -1
  9. package/docs/en/Changelog.md +16 -0
  10. package/docs/en/Compatibility.md +38 -3
  11. package/docs/en/EvaluationResults.md +21 -5
  12. package/docs/en/UsageGuide.md +18 -1
  13. package/lib/core/deletion-command.d.ts.map +1 -1
  14. package/lib/core/deletion-command.js +2 -1
  15. package/lib/core/deletion-command.js.map +1 -1
  16. package/lib/core/windows-runtime.d.ts +16 -0
  17. package/lib/core/windows-runtime.d.ts.map +1 -0
  18. package/lib/core/windows-runtime.js +123 -0
  19. package/lib/core/windows-runtime.js.map +1 -0
  20. package/lib/dsh/budget-settings.d.ts +2 -0
  21. package/lib/dsh/budget-settings.d.ts.map +1 -1
  22. package/lib/dsh/budget-settings.js +9 -3
  23. package/lib/dsh/budget-settings.js.map +1 -1
  24. package/lib/dsh/budgets.d.ts +2 -0
  25. package/lib/dsh/budgets.d.ts.map +1 -1
  26. package/lib/dsh/budgets.js +6 -0
  27. package/lib/dsh/budgets.js.map +1 -1
  28. package/lib/dsh/index.d.ts.map +1 -1
  29. package/lib/dsh/index.js +4 -0
  30. package/lib/dsh/index.js.map +1 -1
  31. package/lib/dsh/official-windows-shell.d.ts +4 -0
  32. package/lib/dsh/official-windows-shell.d.ts.map +1 -0
  33. package/lib/dsh/official-windows-shell.js +128 -0
  34. package/lib/dsh/official-windows-shell.js.map +1 -0
  35. package/lib/dsh/windows-shell.d.ts +53 -0
  36. package/lib/dsh/windows-shell.d.ts.map +1 -0
  37. package/lib/dsh/windows-shell.js +182 -0
  38. package/lib/dsh/windows-shell.js.map +1 -0
  39. package/package.json +21 -16
  40. package/presets/super-code/agent.cordis.yml +3 -7
  41. package/runtime/windows/README.md +45 -0
  42. package/runtime/windows/arm64-busybox.exe.gz +0 -0
  43. package/runtime/windows/bash.exe.gz +0 -0
  44. package/runtime/windows/grep.exe.gz +0 -0
  45. package/runtime/windows/licenses/BusyBox-LICENSE.txt +348 -0
  46. package/runtime/windows/licenses/GPL-3.0.txt +674 -0
  47. package/runtime/windows/licenses/LGPL-3.0.txt +165 -0
  48. package/runtime/windows/licenses/MSYS-COPYING.LIB +165 -0
  49. package/runtime/windows/licenses/MSYS-COPYING.RUNTIME +674 -0
  50. package/runtime/windows/licenses/PCRE-LICENCE.txt +93 -0
  51. package/runtime/windows/licenses/ncurses-COPYING.txt +29 -0
  52. package/runtime/windows/manifest.json +236 -0
  53. package/runtime/windows/msys-2.0.dll.gz +0 -0
  54. package/runtime/windows/msys-iconv-2.dll.gz +0 -0
  55. package/runtime/windows/msys-intl-8.dll.gz +0 -0
  56. package/runtime/windows/msys-pcre-1.dll.gz +0 -0
  57. package/runtime/windows/sources/busybox-w32-FRP-6354-g5f09fb446.tgz +0 -0
  58. package/runtime/windows/sources.json +45 -0
  59. package/runtime/windows/x64-busybox.exe.gz +0 -0
package/README.en.md CHANGED
@@ -17,7 +17,7 @@ Tested on version `0.3.5`. [Full results and limitations](docs/en/EvaluationResu
17
17
 
18
18
  ## Install
19
19
 
20
- Supports Harness from `0.1.5-alpha.1`, with Web verified through `0.2.1-rc.4`; see [compatibility](docs/en/Compatibility.md) for tested desktop versions.
20
+ Supports Harness from `0.1.5-alpha.1`; see [compatibility](docs/en/Compatibility.md) for tested Web, official Desktop, and NEXT versions.
21
21
 
22
22
  **Desktop**: open **Plugins → Add plugin** in the left sidebar, enter `dsh-super-code`, then click **Install** and **Enable now** (on older versions, reload or restart when prompted). Desktop includes its own runtime; Node.js is not required.
23
23
 
@@ -40,11 +40,19 @@ Desktop: enter the full path of the package in "Package name or address", then c
40
40
  Web: run the following command (use the actual file name):
41
41
 
42
42
  ```bash
43
- dsh plugin --profile web add ./dsh-super-code-0.3.9.tgz
43
+ dsh plugin --profile web add ./dsh-super-code-0.3.10.tgz
44
44
  ```
45
45
 
46
46
  </details>
47
47
 
48
+ ### Windows commands
49
+
50
+ Bundles GNU Bash, the required MSYS DLLs, BusyBox, and GNU grep, so Git does not need to be installed just to run Bash commands. Developer tools such as Git, Node, and Python still need separate installation. macOS and Linux keep the host environment.
51
+
52
+ Under **Settings → Super Code → Preset configuration → Command environment**, bundled Bash defaults on and **Also apply to official presets** defaults off. Enabling the latter covers Standard, PTC, and Create; Minimal retains its persistent terminal. Switches are editable only on Windows hosts, and are gray with a hover tooltip on other platforms.
53
+
54
+ In confined environments, Bash commands require DSH approval for that command. See the [usage guide](docs/en/UsageGuide.md#windows-command-environment) for configuration and compatibility limits.
55
+
48
56
  ## Usage
49
57
 
50
58
  1. Open **Settings → Agent Presets** and select **Super Code** (identifier `super-code`).
@@ -78,6 +86,7 @@ Screenshots use the current UI with sample data to illustrate the plugin.
78
86
  | Layered memory | Current task, project lessons, and global preferences are stored separately, each with its source |
79
87
  | Runtime budgets | Uses the better-performing legacy compression budgets by default; adjustable in Settings |
80
88
  | Deletion protection | Directs Agents to use recoverable `trash` by default; can switch to strict confirmation |
89
+ | Windows commands | Bundled Bash and common utilities, optionally applied to official presets |
81
90
  | MCP connection | Allows external MCP clients to delegate tasks to DSH. Off by default |
82
91
  | Frontend Skill | Loaded on demand for UI work to check alignment, hit areas, and browser behavior |
83
92
 
@@ -85,9 +94,9 @@ See the [usage guide](docs/en/UsageGuide.md).
85
94
 
86
95
  ## Recent releases
87
96
 
97
+ - **0.3.10**: Added bundled Bash on Windows and an official-preset switch, with legacy-host compatibility and tooltip fixes.
88
98
  - **0.3.9**: Polished Settings and the task sidebar, improved MCP conversation control, fixed PTC child-tool approvals, and verified rc.4 Web compatibility.
89
99
  - **0.3.8**: Added MCP connection; external clients can delegate, inspect, continue, and cancel DSH conversations. Added a Home overview in Settings.
90
- - **0.3.7**: Added three-level deletion protection (Relaxed by default). Added Task status to the sidebar.
91
100
 
92
101
  [Full changelog](docs/en/Changelog.md)
93
102
 
@@ -95,21 +104,37 @@ Versions follow `major.performance.maintenance`: a change in the second number i
95
104
 
96
105
  ## Evaluation
97
106
 
107
+ ### Plugin comparison
108
+
109
+ Full SWE-bench Pro hard-100 results, sorted by tasks passed. All runs use Harness `0.2.1-rc.2`, `deepseek-v4.1-flash-1017`, high reasoning effort, and legacy budgets. Each group reuses its environment continuously across tasks.
110
+
111
+ | Configuration | Passed/valid | Mean total tokens (M) | Mean time (min) | Mean model calls | Mean tool calls | Cache rate |
112
+ |---|---:|---:|---:|---:|---:|---:|
113
+ | Super Code 0.3.5 | **51/100** | 6.435 | 24.751 | 76.660 | 75.840 | 98.927% |
114
+ | Official Standard | 50/100 | 8.030 | 17.198 | 91.990 | 113.880 | 99.167% |
115
+ | Unmodified dsh-ops 0.4.4 · Standard | 49/100 | 7.099 | 23.132 | 82.500 | 102.360 | 99.062% |
116
+ | Official Standard + billion-context 0.1.209 | 45/100 | 6.359 | 18.471 | 108.950 | 131.140 | 97.654% |
117
+ | Unmodified dsh-ops 0.4.4 · PTC | 44/100 | 7.322 | 23.695 | 81.490 | 80.960 | 99.056% |
118
+
119
+ M means one million tokens, including reasoning tokens. Time includes some in-run service waits. These additional results are recorded separately from the opening comparison and the historical budget experiments below. [Full results and methodology](docs/en/EvaluationResults.md#pro100-continuous-environment-comparison)
120
+
98
121
  ### Method
99
122
 
100
123
  - **Task set**: SWE-bench Pro hard-100, graded with the official grader. Tuning uses only 33 hard tasks selected from the SWE-bench dev split; hard-100 is used only to evaluate frozen candidates and investigate issues, never for tuning, to avoid overfitting to the evaluation tasks.
101
- - **Baseline**: the official Standard preset rather than Minimal. On the old host, Standard + high passed 51 tasks and Minimal + high passed 46, with Standard using 23.5% fewer tokens per task. Comparing against the stronger baseline gives a stricter conclusion.
102
- - **Controlled variables**: same host, model, reasoning effort, and budgets; only the Agent preset differs.
103
- - **Metrics**: tasks passed, net time per task (excluding failed requests and retry waits), tokens per task, and model calls per task.
124
+ - **Baselines**: the official Standard preset and third-party plugin configurations. In the historical official-preset comparison on the old host, Standard + high passed 51 tasks and Minimal + high passed 46, with Standard using 23.5% fewer tokens per task, so Standard was selected as the baseline.
125
+ - **Controlled variables**: comparisons on the same host keep model, reasoning effort, and budgets fixed while comparing preset and plugin combinations. Cross-host and cross-model experiments are identified separately.
126
+ - **Metrics**: tasks passed, mean total tokens, time, model and tool calls, and cache rate. The plugin comparison table above includes some in-run service waits; the historical budget experiments below use net time, excluding failed requests and retry waits.
104
127
 
105
- ### Process
128
+ ### Historical process
106
129
 
107
130
  1. **Old-host baseline** (DSH `0.1.5-rc.2`, `deepseek-v4.1-flash`, high): the Super Code `0.3.0` candidate passed 56 tasks, the official Standard preset 51, and Minimal 46. Relative to Minimal, time fell by 47.6% and tokens by 44.9%.
108
131
  2. **Regression after the host upgrade**: after upgrading to DSH `0.2.1-rc.2` and `deepseek-v4.1-flash-1017`, under default budgets Standard dropped to 46 and Super Code `0.3.4` to 41, below Standard. Investigation found the new host had tightened context budgets: the compression threshold fell from 800,000 to 550,464 tokens, and retained verbatim context from 160,000 to 98,560 tokens.
109
132
  3. **Retest with legacy budgets**: both sides used legacy budgets. Standard stayed at 46 with 14.2% more tokens; Super Code `0.3.5` rose to 49 with only 0.4% more tokens and 19.4% less net time. Based on this, the plugin uses legacy budgets by default from `0.3.6`.
110
133
  4. **Cross-model check** (`glm-5.3-flash`, max): Super Code `0.3.4` passed 45 tasks and native ZCode 29. Super Code used less net time per task (32.9 vs 52.3 min) and more tokens (5.50 M vs 3.61 M).
111
134
 
112
- ### Summary
135
+ ### Historical summary
136
+
137
+ These are earlier evaluation runs and are not pooled with the plugin comparison results above.
113
138
 
114
139
  | Comparison | Passed | Efficiency |
115
140
  |---|---|---|
@@ -123,7 +148,7 @@ Versions follow `major.performance.maintenance`: a change in the second number i
123
148
 
124
149
  - Each configuration was run once. The same task can pass in one run and fail in another; run-to-run variance for a fixed configuration has not been estimated.
125
150
  - The default-budget and legacy-budget runs used different plugin versions (`0.3.4` → `0.3.5`), so the gain cannot be attributed entirely to budgets.
126
- - `0.3.6` – `0.3.9` have not been re-evaluated on the 100 tasks.
151
+ - `0.3.6` – `0.3.10` have not been re-evaluated on the 100 tasks.
127
152
  - The cross-model comparison is between two complete systems and cannot isolate the plugin's contribution.
128
153
 
129
154
  [Results and methodology](docs/en/EvaluationResults.md) · [All result tables](eval/results/swebench-pro-final-100/ResultsTables.md)
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## 安装
19
19
 
20
- 支持 Harness `0.1.5-alpha.1` 起的版本,Web 已验证至 `0.2.1-rc.4`;桌面版验证范围见[兼容性记录](docs/Compatibility.md)。
20
+ 支持 Harness `0.1.5-alpha.1` 起的版本;Web、官方桌面版和 NEXT 的实测范围见[兼容性记录](docs/Compatibility.md)。
21
21
 
22
22
  **桌面版**:在左侧打开「插件 → 添加插件」,输入 `dsh-super-code`,依次点击「安装」和「立即启用」(旧版本请按提示重载或重启)。桌面版内置运行环境,无需安装 Node.js。
23
23
 
@@ -40,11 +40,19 @@ dsh plugin --profile web add dsh-super-code
40
40
  Web 版:运行以下命令(文件名以实际下载的为准):
41
41
 
42
42
  ```bash
43
- dsh plugin --profile web add ./dsh-super-code-0.3.9.tgz
43
+ dsh plugin --profile web add ./dsh-super-code-0.3.10.tgz
44
44
  ```
45
45
 
46
46
  </details>
47
47
 
48
+ ### Windows 命令支持
49
+
50
+ 内置 GNU Bash、必要的 MSYS DLL、BusyBox 和 GNU grep,无需为了运行 Bash 命令额外安装 Git。Git、Node、Python 等开发工具仍需自行安装;macOS、Linux 沿用宿主环境。
51
+
52
+ 在「设置 → Super Code 模式 → 预设配置 → 命令环境」中,内置 Bash 默认开启,「同时应用到官方预设」默认关闭。开启后可用于官方标准、PTC、创建模式;极简模式保留持久终端。仅 Windows 宿主可修改开关,其他平台显示为灰色并提供悬浮提示。
53
+
54
+ 受限环境下,Bash 命令需要通过 DSH 对该条命令的审批。配置和兼容边界见[使用说明](docs/UsageGuide.md#windows-命令环境)。
55
+
48
56
  ## 使用
49
57
 
50
58
  1. 打开「设置 → Agent 预设」,选择 **Super Code 模式**(标识符 `super-code`)。
@@ -78,6 +86,7 @@ dsh plugin --profile web add ./dsh-super-code-0.3.9.tgz
78
86
  | 分层记忆 | 当前任务、项目经验和全局偏好分别存储,每条记录均标注来源 |
79
87
  | 运行预算 | 默认使用效果更好的旧压缩预算,可在设置中调整 |
80
88
  | 删除保护 | 默认引导 Agent 使用可恢复的 `trash`,可切换为严格确认 |
89
+ | Windows 命令环境 | 内置 Bash 与常用命令,可选应用到官方预设 |
81
90
  | MCP 连接 | 允许外部 MCP 客户端将任务委派给 DSH 执行,默认关闭 |
82
91
  | 前端 Skill | 开发页面时按需加载,检查对齐、点击区域和浏览器表现 |
83
92
 
@@ -85,9 +94,9 @@ dsh plugin --profile web add ./dsh-super-code-0.3.9.tgz
85
94
 
86
95
  ## 最近更新
87
96
 
97
+ - **0.3.10**:新增 Windows 内置 Bash 和官方预设开关,修复旧宿主兼容与提示气泡样式。
88
98
  - **0.3.9**:美化设置和任务侧栏,完善 MCP 对话控制并修复 PTC 子工具审批,验证 rc.4 Web 兼容性。
89
99
  - **0.3.8**:新增 MCP 连接,外部客户端可委派、查看、继续和取消 DSH 对话;设置页新增首页概览。
90
- - **0.3.7**:新增三档删除保护(默认宽松);侧边栏新增任务状态。
91
100
 
92
101
  [完整版本记录](docs/Changelog.md)
93
102
 
@@ -95,21 +104,37 @@ dsh plugin --profile web add ./dsh-super-code-0.3.9.tgz
95
104
 
96
105
  ## 评测
97
106
 
107
+ ### 插件方案对比
108
+
109
+ SWE-bench Pro hard-100 完整成绩,按通过数量降序排列。统一使用 Harness `0.2.1-rc.2`、`deepseek-v4.1-flash-1017`、high、旧预算,各组内部连续复用环境。
110
+
111
+ | 方案 | 通过/有效 | 平均总 Token(M) | 平均耗时(分钟) | 平均模型调用 | 平均工具调用 | 缓存率 |
112
+ |---|---:|---:|---:|---:|---:|---:|
113
+ | Super Code 0.3.5 | **51/100** | 6.435 | 24.751 | 76.660 | 75.840 | 98.927% |
114
+ | 官方标准 | 50/100 | 8.030 | 17.198 | 91.990 | 113.880 | 99.167% |
115
+ | 原版 dsh-ops 0.4.4 · 标准 | 49/100 | 7.099 | 23.132 | 82.500 | 102.360 | 99.062% |
116
+ | 官方标准+billion-context 0.1.209 | 45/100 | 6.359 | 18.471 | 108.950 | 131.140 | 97.654% |
117
+ | 原版 dsh-ops 0.4.4 · PTC | 44/100 | 7.322 | 23.695 | 81.490 | 80.960 | 99.056% |
118
+
119
+ M 为百万 Token,包含思考 Token;耗时包含部分运行内服务等待。这批追加成绩与开头及下方历史预算实验分开记录。[完整结果与口径](docs/EvaluationResults.md)
120
+
98
121
  ### 评测方法
99
122
 
100
123
  - **题集**:SWE-bench Pro hard-100,使用官方评分器。调优仅使用 SWE-bench dev 中筛选的 33 道困难题;hard-100 只用于评测冻结后的候选版本和排查问题,不参与调优,以避免对评测题过拟合。
101
- - **对照**:官方标准预设,而非 minimal。旧宿主实测中,标准 + high 通过 51 题,minimal + high 通过 46 题,且标准每题 token 少 23.5%。与更强的对照比较,结论更严格。
102
- - **控制变量**:同一宿主、同一模型、同一思考等级、同一预算,仅替换 Agent 预设。
103
- - **指标**:通过数、每题净耗时(扣除失败请求和重试等待)、每题 token、每题模型调用次数。
124
+ - **对照**:官方标准预设及第三方插件方案。历史官方预设对比中,旧宿主的标准 + high 通过 51 题,minimal + high 通过 46 题,且标准每题 token 少 23.5%,因此选用标准预设作为基线。
125
+ - **控制变量**:同宿主对比保持模型、思考等级和预算一致,对比不同预设及插件组合;跨宿主、跨模型的实验单独说明。
126
+ - **指标**:通过数、平均总 Token、耗时、模型与工具调用次数、缓存率。上述插件方案对比表的耗时包含部分运行内服务等待;下方历史预算实验使用净耗时,扣除失败请求和重试等待。
104
127
 
105
- ### 评测过程
128
+ ### 历史评测过程
106
129
 
107
130
  1. **旧宿主基线**(DSH `0.1.5-rc.2`,`deepseek-v4.1-flash`,high):Super Code `0.3.0` 候选通过 56 题,官方标准预设 51 题,minimal 46 题。相对 minimal,耗时减少 47.6%,token 减少 44.9%。
108
131
  2. **宿主升级后效果下降**:升级到 DSH `0.2.1-rc.2` 和 `deepseek-v4.1-flash-1017` 后,在默认预算下标准降至 46 题,Super Code `0.3.4` 降至 41 题,低于标准。排查发现新宿主收紧了上下文预算:压缩阈值由 800,000 降至 550,464 token,保留原文由 160,000 降至 98,560 token。
109
132
  3. **恢复旧预算后复测**:双方均使用旧预算。标准仍为 46 题,token 增加 14.2%;Super Code `0.3.5` 提升至 49 题,token 仅增加 0.4%,净耗时减少 19.4%。据此,`0.3.6` 起插件默认使用旧预算。
110
133
  4. **跨模型验证**(`glm-5.3-flash`,max):Super Code `0.3.4` 通过 45 题,原生 ZCode 通过 29 题;Super Code 每题净耗时更少(32.9 vs 52.3 分钟),token 更多(550 万 vs 361 万)。
111
134
 
112
- ### 结果汇总
135
+ ### 历史结果汇总
136
+
137
+ 以下为较早的评测批次,不与上述插件方案对比的成绩合并计算。
113
138
 
114
139
  | 对比 | 通过 | 效率 |
115
140
  |---|---|---|
@@ -123,7 +148,7 @@ dsh plugin --profile web add ./dsh-super-code-0.3.9.tgz
123
148
 
124
149
  - 每组配置只运行一轮。同一道题在不同轮次中结果可能不同,目前尚未估计固定配置下的随机波动。
125
150
  - 默认预算与旧预算两组的插件版本不同(`0.3.4` → `0.3.5`),收益不能全部归因于预算。
126
- - `0.3.6` ~ `0.3.9` 未重新运行 100 题评测。
151
+ - `0.3.6` ~ `0.3.10` 未重新运行 100 题评测。
127
152
  - 跨模型对比是两套完整系统之间的比较,无法单独分离插件的贡献。
128
153
 
129
154
  [评测结果与口径](docs/EvaluationResults.md) · [完整成绩表](eval/results/swebench-pro-final-100/ResultsTables.md)
package/client/index.js CHANGED
@@ -177,7 +177,7 @@ function AgentMessage({ record, saved, t, toolName }) {
177
177
  : React.createElement(React.Fragment, null, label, React.createElement(DetailText, { text: item.text, t }))))
178
178
  }
179
179
 
180
- /* Keep the native button and its refs/events; mount name bubbles outside clipped
180
+ /* Keep native controls and their refs/events; mount name bubbles outside clipped
181
181
  * panels, or in the active dialog's top layer. No host-private UI is needed. */
182
182
  let actionTooltipSequence = 0
183
183
  let actionTooltipDismiss = () => {}
@@ -188,7 +188,7 @@ function actionButtonText(children) {
188
188
  return actionButtonText(child.props.children)
189
189
  }).filter(Boolean).join(' ').replace(/\s+/g, ' ').trim()
190
190
  }
191
- const ActionButton = React.forwardRef(function ActionButton({ children, title, ...props }, forwardedRef) {
191
+ const ActionButton = React.forwardRef(function ActionButton({ as: Tag = 'button', children, title, ...props }, forwardedRef) {
192
192
  const button = useRef(null), pending = useRef(0), cleanup = useRef(() => {})
193
193
  const name = props['aria-label'] || title || actionButtonText(children)
194
194
  const attach = React.useCallback(node => {
@@ -244,7 +244,7 @@ const ActionButton = React.forwardRef(function ActionButton({ children, title, .
244
244
  }
245
245
  useEffect(() => { hide() }, [name])
246
246
  useEffect(() => () => hide(), [])
247
- return React.createElement('button', {
247
+ return React.createElement(Tag, {
248
248
  ...props, ref: attach, 'data-tooltip-name': name,
249
249
  onPointerEnter: event => {
250
250
  props.onPointerEnter?.(event)
@@ -299,6 +299,13 @@ const zh = {
299
299
  'status.blocked': '受阻',
300
300
 
301
301
  'settings.homeTab': '首页', 'settings.presetTab': '预设配置', 'settings.protectionTab': '删除保护',
302
+ 'shell.title': '命令环境', 'shell.enabled': '使用内置 Bash(Windows)',
303
+ 'shell.hint': '无需安装 Git。新启动的会话生效,子 Agent 继承。Windows 限权模式下需由 DSH 逐条审批,不自动修改会话权限。',
304
+ 'shell.official': '同时应用到官方预设',
305
+ 'shell.officialHint': '用于标准、PTC、创建模式,默认关闭。极简模式保留原有持久终端;自定义预设不受影响。',
306
+ 'shell.windowsOnly': '仅 Windows 生效',
307
+ 'shell.host': '使用宿主命令环境', 'shell.pending': '首次使用时自动准备', 'shell.ready': '内置 Bash 已就绪',
308
+ 'shell.error': '内置 Bash 不可用,请关闭此开关使用宿主环境。', 'shell.otherPlatform': '当前宿主沿用系统命令环境,无需启用。',
302
309
  "connection.requestTitle": "请求访问工作目录",
303
310
  "connection.requestHint": "外部 MCP 客户端申请访问以下目录及其子目录。同意后会加入允许列表,后续委派仍使用 DSH 的权限设置。",
304
311
  "connection.requestClient": "请求客户端",
@@ -481,6 +488,13 @@ const en = {
481
488
  'status.blocked': 'Blocked',
482
489
 
483
490
  'settings.homeTab': 'Home', 'settings.presetTab': 'Preset configuration', 'settings.protectionTab': 'Deletion protection',
491
+ 'shell.title': 'Command environment', 'shell.enabled': 'Use bundled Bash (Windows)',
492
+ 'shell.hint': 'No Git installation required. Takes effect when a conversation starts; child Agents inherit it. Confined Windows modes require DSH approval for each command without changing session permissions.',
493
+ 'shell.official': 'Also apply to official presets',
494
+ 'shell.officialHint': 'Applies to Standard, PTC and Create; off by default. Minimal keeps its persistent terminal. Custom presets are unaffected.',
495
+ 'shell.windowsOnly': 'Only available on Windows',
496
+ 'shell.host': 'Using the host command environment', 'shell.pending': 'Prepared automatically on first use', 'shell.ready': 'Bundled Bash is ready',
497
+ 'shell.error': 'Bundled Bash is unavailable. Turn this off to use the host environment.', 'shell.otherPlatform': 'This host uses its existing command environment.',
484
498
  "connection.requestTitle": "Working directory access request",
485
499
  "connection.requestHint": "An external MCP client requests access to this directory and its descendants. Approval adds it to the allowlist. DSH permissions still apply to delegated tasks.",
486
500
  "connection.requestClient": "Requesting client",
@@ -2094,7 +2108,7 @@ const budgetFields = [
2094
2108
  ]
2095
2109
  function budgetDraft(configuration) {
2096
2110
  const deletion = configuration.deletionProtection
2097
- return Object.fromEntries([['deletionProtection', deletion === true ? 'strict' : deletion === false ? 'off' : deletion ?? 'relaxed'], ['deletionProtectionForOfficialPresets', configuration.deletionProtectionForOfficialPresets ?? false], ['applyToOfficialPresets', configuration.applyToOfficialPresets ?? false], ['pressureBasis', configuration.budgets?.pressureBasis ?? ''],
2111
+ return Object.fromEntries([['windowsBash', configuration.windowsBash ?? true], ['windowsBashForOfficialPresets', configuration.windowsBashForOfficialPresets ?? false], ['deletionProtection', deletion === true ? 'strict' : deletion === false ? 'off' : deletion ?? 'relaxed'], ['deletionProtectionForOfficialPresets', configuration.deletionProtectionForOfficialPresets ?? false], ['applyToOfficialPresets', configuration.applyToOfficialPresets ?? false], ['pressureBasis', configuration.budgets?.pressureBasis ?? ''],
2098
2112
  ...budgetFields.map(field => {
2099
2113
  const value = field.root ? configuration[field.key] : configuration.budgets?.[field.key]
2100
2114
  return [field.key, value === undefined ? '' : String(value / field.factor)]
@@ -2138,7 +2152,7 @@ function budgetConfiguration(draft) {
2138
2152
  * one callout style for notices, and one autosave indicator. */
2139
2153
  function SettingsSection({ id, title, description, actions, plain = false, children }) {
2140
2154
  const lines = [].concat(description ?? []).filter(Boolean)
2141
- return React.createElement('section', { className: 'dsh-super-code-section', 'aria-labelledby': `${id}-title` },
2155
+ return React.createElement('section', { id, className: 'dsh-super-code-section', 'aria-labelledby': `${id}-title` },
2142
2156
  React.createElement('header', { className: 'dsh-super-code-section-head' },
2143
2157
  React.createElement('div', { className: 'dsh-super-code-section-heading' },
2144
2158
  React.createElement('h3', { id: `${id}-title` }, title),
@@ -2179,12 +2193,15 @@ function ChoiceCards({ name, label, value, choices, onChange, disabled = false }
2179
2193
 
2180
2194
  /** Each budget tab writes only its own fields and carries the other tab's stored values through. */
2181
2195
  function budgetSectionConfiguration(section, draft, snapshot) {
2196
+ if (section === 'shell') return typeof draft.windowsBash === 'boolean' && typeof draft.windowsBashForOfficialPresets === 'boolean'
2197
+ ? { ok: true, configuration: { ...snapshot.configuration, windowsBash: draft.windowsBash, windowsBashForOfficialPresets: draft.windowsBashForOfficialPresets } }
2198
+ : { ok: false, error: 'invalid' }
2182
2199
  const parsed = budgetConfiguration(draft)
2183
2200
  if (!parsed.ok) return parsed
2184
2201
  const current = snapshot.configuration
2185
2202
  return { ok: true, configuration: section === 'protection'
2186
2203
  ? { ...current, deletionProtection: draft.deletionProtection, deletionProtectionForOfficialPresets: draft.deletionProtectionForOfficialPresets }
2187
- : { ...parsed.configuration, deletionProtection: current.deletionProtection, deletionProtectionForOfficialPresets: current.deletionProtectionForOfficialPresets } }
2204
+ : { ...parsed.configuration, windowsBash: current.windowsBash, windowsBashForOfficialPresets: current.windowsBashForOfficialPresets, deletionProtection: current.deletionProtection, deletionProtectionForOfficialPresets: current.deletionProtectionForOfficialPresets } }
2188
2205
  }
2189
2206
  function createBudgetAutosave(api, section = 'context') {
2190
2207
  return createAutosave(api, { draft: budgetDraft({}), toDraft: budgetDraft,
@@ -2207,6 +2224,7 @@ function autosaveState(editing) {
2207
2224
 
2208
2225
  function BudgetSettings({ api, t, active, section = 'context', onSaved = () => {} }) {
2209
2226
  const protection = section === 'protection'
2227
+ const shell = section === 'shell'
2210
2228
  const editor = useMemo(() => createBudgetAutosave(api, section), [api, section])
2211
2229
  const editing = useSyncExternalStore(editor.subscribe, editor.getSnapshot, editor.getSnapshot)
2212
2230
  const { snapshot, draft } = editing
@@ -2236,7 +2254,7 @@ function BudgetSettings({ api, t, active, section = 'context', onSaved = () => {
2236
2254
  const base = current.configuration
2237
2255
  const configuration = protection
2238
2256
  ? { ...base, deletionProtection: 'relaxed', deletionProtectionForOfficialPresets: false }
2239
- : { deletionProtection: base.deletionProtection, deletionProtectionForOfficialPresets: base.deletionProtectionForOfficialPresets }
2257
+ : { windowsBash: base.windowsBash, windowsBashForOfficialPresets: base.windowsBashForOfficialPresets, deletionProtection: base.deletionProtection, deletionProtectionForOfficialPresets: base.deletionProtectionForOfficialPresets }
2240
2258
  pending.current = true; setLoading(true); setFailure(''); setNotice('')
2241
2259
  try {
2242
2260
  const response = await api.saveConfig(JSON.stringify(configuration), String(current.revision))
@@ -2271,7 +2289,25 @@ function BudgetSettings({ api, t, active, section = 'context', onSaved = () => {
2271
2289
  const saveError = editing.error && !autosaveValidationErrors.includes(editing.error) ? editing.error : ''
2272
2290
  const problem = failure || saveError
2273
2291
  const button = (label, onClick, extra = {}) => React.createElement(ActionButton, { type: 'button', disabled: loading, onClick, ...extra }, label)
2274
- const content = protection ? React.createElement(React.Fragment, null,
2292
+ const shellStatus = snapshot?.shell
2293
+ const windowsHost = shellStatus?.platform === 'win32'
2294
+ const shellTooltip = shellStatus && !windowsHost ? t('shell.windowsOnly') : undefined
2295
+ const content = shell ? React.createElement(SettingsSection, { id: 'super-code-shell', title: t('shell.title') },
2296
+ React.createElement(SettingRow, { id: 'super-code-windows-bash', label: t('shell.enabled'),
2297
+ hint: !windowsHost ? t('shell.otherPlatform') : t('shell.hint') }, described =>
2298
+ React.createElement(ConnectionSwitch, { id: 'super-code-windows-bash', checked: draft.windowsBash,
2299
+ disabled: disabled || !windowsHost, tooltip: shellTooltip, 'aria-describedby': described,
2300
+ onChange: value => edit('windowsBash', value) })),
2301
+ React.createElement(SettingRow, { id: 'super-code-windows-bash-official', label: t('shell.official'), hint: t('shell.officialHint') }, described =>
2302
+ React.createElement(ConnectionSwitch, { id: 'super-code-windows-bash-official', checked: draft.windowsBashForOfficialPresets,
2303
+ disabled: disabled || !windowsHost || !draft.windowsBash, tooltip: shellTooltip, 'aria-describedby': described,
2304
+ onChange: value => edit('windowsBashForOfficialPresets', value) })),
2305
+ windowsHost && React.createElement('p', { className: 'dsh-super-code-shell-status', role: 'status' },
2306
+ React.createElement('span', null, t(!draft.windowsBash ? 'shell.host' : `shell.${shellStatus.state}`)),
2307
+ shellStatus.version && draft.windowsBash && React.createElement('code', null, shellStatus.version)),
2308
+ shellStatus?.state === 'error' && draft.windowsBash && React.createElement(Callout, { tone: 'error' },
2309
+ React.createElement('p', null, shellStatus.error)))
2310
+ : protection ? React.createElement(React.Fragment, null,
2275
2311
  React.createElement(SettingsSection, { id: 'super-code-deletion-mode', title: t('delete.mode'), plain: true },
2276
2312
  React.createElement(ChoiceCards, { name: 'super-code-deletion-mode', label: t('delete.mode'), value: draft.deletionProtection, disabled,
2277
2313
  choices: ['off', 'relaxed', 'strict'].map(mode => [mode, t(`delete.${mode}`), t(`delete.hint.${mode}`)]),
@@ -2299,7 +2335,7 @@ function BudgetSettings({ api, t, active, section = 'context', onSaved = () => {
2299
2335
  snapshot?.ptcMaxTimeoutMs && text(t, 'budget.ptcCeiling', { seconds: snapshot.ptcMaxTimeoutMs / 1000 })] }, ...rows('execution')),
2300
2336
  React.createElement(SettingsSection, { id: 'super-code-budget-exclusive', title: t('budget.superCode'), description: t('budget.superCodeHint') }, ...rows('superCode')))
2301
2337
  return React.createElement('section', { className: 'dsh-super-code-budgets' },
2302
- React.createElement('form', { className: 'dsh-super-code-stack', 'aria-label': t(protection ? 'delete.title' : 'budget.title'), 'aria-busy': loading || editing.saving,
2338
+ React.createElement('form', { className: 'dsh-super-code-stack', 'aria-label': t(shell ? 'shell.title' : protection ? 'delete.title' : 'budget.title'), 'aria-busy': loading || editing.saving,
2303
2339
  onSubmit: event => { event.preventDefault(); void editor.flush() } },
2304
2340
  problem && React.createElement(Callout, { tone: 'error',
2305
2341
  action: failure === 'connection' || problem === 'conflict' ? button(t('budget.reload'), () => load(true))
@@ -2310,7 +2346,7 @@ function BudgetSettings({ api, t, active, section = 'context', onSaved = () => {
2310
2346
  content,
2311
2347
  React.createElement('div', { className: 'dsh-super-code-settings-footer' },
2312
2348
  React.createElement(SaveIndicator, { state: autosaveState(editing), t }),
2313
- React.createElement('div', { className: 'dsh-super-code-settings-footer-actions' },
2349
+ !shell && React.createElement('div', { className: 'dsh-super-code-settings-footer-actions' },
2314
2350
  confirmReset ? React.createElement(React.Fragment, null,
2315
2351
  React.createElement('span', null, t('budget.resetQuestion')),
2316
2352
  button(t('preset.cancel'), () => setConfirmReset(false)),
@@ -2424,9 +2460,11 @@ function createConnectionAutosave(api) {
2424
2460
  return createAutosave(api, { draft: connectionDraft({ enabled: false, port: 23457, allowedDirectories: [] }),
2425
2461
  toDraft: connectionDraft, toConfiguration: draft => connectionConfiguration(draft) })
2426
2462
  }
2427
- /** The single switch control for every settings toggle; extra props go to the input. */
2428
- function ConnectionSwitch({ checked, disabled, onChange, children, ...input }) {
2429
- return React.createElement('label', { className: 'dsh-super-code-connection-switch' },
2463
+ /** Disabled inputs do not receive hover; their label hosts the shared top-side tooltip. */
2464
+ function ConnectionSwitch({ checked, disabled, onChange, children, tooltip, ...input }) {
2465
+ return React.createElement(tooltip ? ActionButton : 'label', {
2466
+ className: 'dsh-super-code-connection-switch', ...(tooltip ? { as: 'label', title: tooltip } : {}),
2467
+ },
2430
2468
  React.createElement('input', { ...input, type: 'checkbox', role: 'switch', checked, disabled, onChange: event => onChange(event.target.checked) }),
2431
2469
  React.createElement('span', { className: 'dsh-super-code-connection-track', 'aria-hidden': true }, React.createElement('i')), children)
2432
2470
  }
@@ -2902,7 +2940,8 @@ function PresetSettings({ api, budgetApi, connectionApi, openSession = () => {},
2902
2940
  status?.userConflict && status.state !== 'conflict' && React.createElement('p', null, t('preset.userConflict')),
2903
2941
  status?.delivery === 'declaration' && !status.authorable && React.createElement('p', { role: 'note' }, t('preset.declaredReadonly')),
2904
2942
  status?.delivery === 'directory' && !status.authorable && React.createElement('p', { role: 'note' }, t('preset.readonly'))),
2905
- error && React.createElement('p', { role: 'alert' }, t(error))),
2943
+ error && React.createElement('p', { role: 'alert' }, t(error)),
2944
+ React.createElement(BudgetSettings, { api: budgetApi, t, section: 'shell', active: tab === 'preset', onSaved })),
2906
2945
  React.createElement('div', { role: 'tabpanel', id: 'super-code-panel-context', 'aria-labelledby': 'super-code-tab-context', hidden: tab !== 'context' },
2907
2946
  React.createElement(BudgetSettings, { api: budgetApi, t, active: tab === 'context', onSaved })),
2908
2947
  React.createElement('div', { role: 'tabpanel', id: 'super-code-panel-protection', 'aria-labelledby': 'super-code-tab-protection', hidden: tab !== 'protection' },
@@ -3078,6 +3117,12 @@ function apply(ctx) {
3078
3117
  .dsh-super-code-setting-row-control{display:flex;justify-content:flex-end;min-width:0}
3079
3118
  .dsh-super-code-setting-row-control>:is(input,.dsh-super-code-select){width:180px}
3080
3119
  .dsh-super-code-setting-row-control>input{height:32px;padding:5px 10px;border-radius:8px;font-variant-numeric:tabular-nums;text-align:right}
3120
+ .dsh-super-code-shell-status{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px;margin:0;padding:12px 16px;border-top:1px solid var(--sc-line);color:var(--sc-muted);font-size:12px;line-height:1.6;overflow-wrap:anywhere}
3121
+ .dsh-super-code-shell-status code{max-width:100%;font-size:11px}
3122
+ #super-code-shell .dsh-super-code-connection-switch:has(input:disabled){cursor:not-allowed}
3123
+ #super-code-shell .dsh-super-code-connection-switch input:disabled{pointer-events:none}
3124
+ #super-code-shell .dsh-super-code-connection-switch input:disabled+.dsh-super-code-connection-track{background:var(--sc-line);border-color:var(--sc-line);opacity:1}
3125
+ #super-code-shell .dsh-super-code-connection-switch input:disabled+.dsh-super-code-connection-track i{background:var(--sc-muted)}
3081
3126
  .dsh-super-code-setting-row[data-invalid] input{border-color:var(--sc-error)}
3082
3127
  .dsh-super-code-settings input[type=number]{appearance:textfield}
3083
3128
  .dsh-super-code-settings input::-webkit-inner-spin-button{appearance:none}
@@ -3632,9 +3677,9 @@ function apply(ctx) {
3632
3677
 
3633
3678
  /* Shared action-name bubble. Fixed outside the panel avoids graph transforms
3634
3679
  * and scroll clipping; dialog bubbles remain in the modal's top layer. */
3635
- .dsh-super-code-tooltip{position:fixed;z-index:1400;max-width:min(260px,calc(100vw - 16px));padding:5px 8px;border-radius:6px;background:var(--sc-text);color:var(--sc-bg);box-shadow:0 2px 8px #0002;font-size:12px;line-height:1.5;font-weight:400;text-align:left;overflow-wrap:anywhere;pointer-events:none}
3636
- .dsh-super-code-tooltip:after{content:"";position:absolute;left:var(--sc-tooltip-arrow-left);width:6px;height:6px;background:inherit;transform:translateX(-50%) rotate(45deg)}
3637
- .dsh-super-code-tooltip[data-side=top]:after{bottom:-3px}
3680
+ .dsh-super-code-tooltip{position:fixed;z-index:1400;max-width:min(260px,calc(100vw - 16px));padding:5px 8px;border:1px solid var(--sc-line);border-radius:6px;background:var(--sc-bg);color:var(--sc-text);box-shadow:0 2px 8px var(--sc-shadow);font-size:12px;line-height:1.5;font-weight:400;text-align:left;overflow-wrap:anywhere;pointer-events:none}
3681
+ .dsh-super-code-tooltip:after{content:"";position:absolute;left:var(--sc-tooltip-arrow-left);width:7px;height:7px;box-sizing:border-box;background:inherit;border-right:1px solid var(--sc-line);border-bottom:1px solid var(--sc-line);transform:translateX(-50%) rotate(45deg)}
3682
+ .dsh-super-code-tooltip[data-side=top]:after{bottom:-4px}
3638
3683
  `
3639
3684
  document.head.appendChild(style)
3640
3685
  return () => { style.remove() }
@@ -3695,5 +3740,5 @@ function apply(ctx) {
3695
3740
  ctx.effect(() => disposeMemoryType, 'super-code: memory library tab')
3696
3741
  }
3697
3742
 
3698
- return { inject, apply, taskFeedbackRows, feedbackStatus, feedbackListItems, feedbackListLayout, feedbackListIndex, feedbackListWindow, feedbackListAnchor, connectionSessions, createConnectionAutosave, connectionDraft, connectionConfiguration, budgetDraft, budgetConfiguration, synchronizePresetDisplay, agentSessionState, buildAgentView, visibleAgentRows, agentTreeDisplay, agentTreeTotals, agentTreeLayout, agentExecutionStatus, agentDetailAddress, agentDetailTarget, agentPath, detailRecord, createAgentInspector, agentHistoryRange, agentHistoryRows, agentHistoryWindow, memoryLibraryAddress, memoryLibraryTarget, memoryLibraryNavigation, memoryLibraryWindow, createMemoryEditor, MemoryLibrary }
3743
+ return { inject, apply, taskFeedbackRows, feedbackStatus, feedbackListItems, feedbackListLayout, feedbackListIndex, feedbackListWindow, feedbackListAnchor, connectionSessions, createConnectionAutosave, createBudgetAutosave, connectionDraft, connectionConfiguration, budgetDraft, budgetConfiguration, synchronizePresetDisplay, agentSessionState, buildAgentView, visibleAgentRows, agentTreeDisplay, agentTreeTotals, agentTreeLayout, agentExecutionStatus, agentDetailAddress, agentDetailTarget, agentPath, detailRecord, createAgentInspector, agentHistoryRange, agentHistoryRows, agentHistoryWindow, memoryLibraryAddress, memoryLibraryTarget, memoryLibraryNavigation, memoryLibraryWindow, createMemoryEditor, MemoryLibrary }
3699
3744
  } })
package/cordis.patch.yml CHANGED
@@ -17,7 +17,7 @@
17
17
  - id: super-code
18
18
  name: dsh-super-code/super-code
19
19
  config:
20
- presetVersion: 0.3.9
20
+ presetVersion: 0.3.10
21
21
  presetInstallation: bundle:dsh-super-code
22
22
  - id: compaction
23
23
  name: cordis:group
@@ -33,12 +33,8 @@
33
33
  name: '@deepseek-ai/dsh-agent-instructions'
34
34
  config:
35
35
  maxBytes: 65536
36
- - id: tool-bash
37
- name: '@deepseek-ai/dsh-tool-bash'
38
- disabled: !!js process.platform === 'win32'
39
- - id: tool-pwsh
40
- name: '@deepseek-ai/dsh-tool-pwsh'
41
- disabled: !!js process.platform !== 'win32'
36
+ - id: super-code-shell
37
+ name: dsh-super-code/shell
42
38
  - id: tool-fs
43
39
  name: '@deepseek-ai/dsh-tool-fs'
44
40
  - id: tool-fs-search
package/docs/Changelog.md CHANGED
@@ -4,6 +4,22 @@
4
4
 
5
5
  版本号格式为「主版本.效果版本.维护版本」。第二位变化表示编码效果或效率有提升;第三位表示修复、界面和兼容性更新。各版本的验证范围见[兼容性](Compatibility.md)。
6
6
 
7
+ ## 0.3.10 · 2026-11-03
8
+
9
+ **Windows 命令环境**
10
+
11
+ - 内置 GNU Bash、必要的 MSYS DLL、BusyBox 和 GNU grep,无需为了运行 Bash 命令额外安装 Git;Git、Node、Python 等开发工具仍需自行安装。
12
+ - 内置 Bash 默认开启;「同时应用到官方预设」默认关闭,开启后用于标准、PTC、创建模式,极简模式保留持久终端。设置自动保存,运行中的 Agent 保留原选择,子 Agent 继承。
13
+ - 仅 Windows 宿主可修改命令环境设置,其他平台灰显并显示「仅 Windows 生效」。修复就绪状态的对齐与长版本号换行,提示气泡随深浅主题变化。
14
+ - 修复旧目录预设在嵌套依赖布局下找不到宿主 Shell 模块、Windows PATH 别名与 BusyBox 固定参数覆盖,以及失败父子 Agent 被其他会话恢复误激活的问题。
15
+ - 严格删除保护识别 MSYS 的 `cmd.exe //c`、`//k` 删除命令。限权模式下 Bash 在执行前明确拒绝,仅由 DSH 审批放行该次调用,不自动修改权限或换 Shell 重放。
16
+
17
+ **文档与验证**
18
+
19
+ - README 追加官方与第三方插件的完整 Pro100 对比,按通过数排序,保留原开头成绩及各批次统计口径。
20
+ - 补齐最低版本至 rc.5 的 Windows Web 进程记录,以及官方 rc.5 Desktop、NEXT 的 Windows 专项验收;组件和静态前端检查单独记录。旧版原生 Windows 桌面未逐版验收,完整范围见[兼容性记录](Compatibility.md)。
21
+ - 固定命令集通过 97/100,剩余差异为 `.cmd` 引号和 MSYS 原生参数转换;不代表完整 Linux 环境。本版未重新运行 100 题效果评测。
22
+
7
23
  ## 0.3.9 · 2026-10-28
8
24
 
9
25
  **界面**
@@ -4,6 +4,8 @@
4
4
 
5
5
  Web 已验证 Harness `0.1.5-alpha.1` ~ `0.2.1-rc.4`,其中 `rc.4` 为下述增量验收;官方桌面已验证至 `0.2.1-rc.4`(x64 包在 Rosetta 下),NEXT 已验证 `2.0.19-next`(内置 `0.2.1-rc.2`)。
6
6
 
7
+ 0.3.10 的内置 Windows Bash 另在官方 Desktop `0.2.1-rc.5` 和 NEXT `2.0.21-next`(内置 `0.2.1-rc.4`)完成 Windows 完整进程专项验收,范围见下文。
8
+
7
9
  ## 已验证的宿主
8
10
 
9
11
  以下 26 个目标在 0.3.6、0.3.7、0.3.8 中均完成整组验证。
@@ -24,12 +26,12 @@ Web 已验证 Harness `0.1.5-alpha.1` ~ `0.2.1-rc.4`,其中 `rc.4` 为下述
24
26
 
25
27
  - 每个宿主使用独立 profile,宿主依赖固定版本并经过审计,不影响日常使用的应用和配置。
26
28
  - 模型响应由本地确定性程序提供,经过真实的宿主 Agent 和工具链。**未调用外部模型**,因此不属于效果评测。
27
- - Web 端使用 Chromium;原生端在 macOS arm64 上运行,rc.4 官方 x64 包另通过 Rosetta 验证,未使用 Intel 实机。
29
+ - Web 端使用 Chromium;历史原生验收在 macOS arm64 上运行,rc.4 官方 x64 包另通过 Rosetta 验证。Windows Bash 另使用 Windows 11 ARM64 VM 运行真实 x64 桌面发行包,未使用 Intel 实机。
28
30
  - 每次发布均同时运行全量单元测试、类型检查、构建和客户端语法检查。
29
31
 
30
32
  ## 未覆盖的范围
31
33
 
32
- - Windows、Linux 原生客户端、Intel 实机、Safari 专属行为
34
+ - Linux 原生客户端、Intel 实机、Safari 专属行为;Windows 桌面仅覆盖下述内置 Bash 专项,未逐版重跑全部插件功能
33
35
  - 真实模型服务、完整的升级与自定义配置回归、所有工具组合
34
36
  - 窄窗口:宽度为 440px 时,宿主侧边栏仅为插件保留 156px,视为不可用(未安装插件时设置页存在同样问题)
35
37
  - 原生目录选择器的确认与取消(系统辅助功能接口超时)
@@ -49,7 +51,40 @@ Web 已验证 Harness `0.1.5-alpha.1` ~ `0.2.1-rc.4`,其中 `rc.4` 为下述
49
51
 
50
52
  按照 npm 规则,`>=0.1.5-alpha.1 <0.3.0` 这类写法会排除 `0.1.6-alpha.1`、`0.2.0-rc.2` 等预发布版本,因此 peer 依赖只能按系列分别列出。
51
53
 
52
- `zod`、`js-yaml`、`@modelcontextprotocol/sdk` 为运行依赖,不打包进插件。发布包仅包含插件、公开文档和截图。
54
+ `zod`、`js-yaml`、`@modelcontextprotocol/sdk` 为运行依赖,不打包进插件。Windows Shell 另随包携带独立进程运行的第三方程序,其来源、许可证和对应源码见[运行时说明](../runtime/windows/README.md)。
55
+
56
+ ## 0.3.10 · 2026-11-03
57
+
58
+ 以下为 2026-11-02 ~ 03 各阶段的 Windows Bash 验证,保留各批次的代码基线与验收范围,不改变下方历史版本记录。
59
+
60
+ - **发布检查**:0.3.10 的 326 项全量单测、类型检查、构建及客户端语法检查通过。发布准备仅更新版本元数据与文档,执行代码沿用上述已验收实现;未为版本号变化重复全部宿主矩阵。
61
+ - **官方预设命令环境配置**:新增独立的「同时应用到官方预设」开关,默认关闭;开启后标准、PTC、创建模式使用内置 Bash,极简模式保留持久终端,自定义预设不自动修改。设置自动保存,与预算、删除保护范围互不影响;总开关关闭后保留适用范围选择。运行中的 Agent 固定选择,子 Agent 按实际运行时归属继承;准备失败的父子 Agent 不会被其他会话的恢复误激活。325 项单测、类型检查、构建、客户端语法通过,24 个版本各 15 项 Shell 组件回归,共 360 项通过;组件测试不等同于完整 Windows 宿主验收。
62
+ - **官方预设专项实测**:Windows Web 的 `0.1.5-alpha.1`、`0.1.6-alpha.1`、`0.1.7-rc.2`、`0.2.0-rc.2`、`0.2.1-alpha.3`、`0.2.1-rc.5` 各 13 组,共 78 组通过。随后补充父准备失败继承修复,最终运行包在最低版与 rc.5 Web 各 13 组、官方 rc.5 Desktop 与 NEXT `2.0.21-next`(内置 rc.4)各 13 组复验通过。覆盖 Standard/PTC/Create 真实 Bash、默认关闭时的 PowerShell、Minimal 持久终端、双向自动保存、运行中选择保留、限权拒绝与宿主单次审批、中文空格路径及文件副作用、完整进程冷重启。最终包未将其余四个 Web 版本或历史桌面完整套件全部重跑;原 155/558 组记录使用新增官方范围开关前的包。
63
+ - **命令环境界面补充**:只有检测为 Windows 时可编辑;其他平台的两个开关均灰显,顶部悬浮提示「仅 Windows 生效」。Bash 默认开启、官方预设范围默认关闭,保留已有选择;就绪状态与设置文案对齐,长版本号可换行。补充后 326 项单测、客户端语法通过;32 个官方静态前端目标(24 Web、8 Desktop/NEXT)共 192 组浏览器检查通过,覆盖双语提示、禁用时无写入、默认值、原有按钮气泡与窄窗口布局。该界面回归使用夹具服务,不属于重新运行完整 Windows 宿主验收。
64
+ - **气泡主题**:所有共享提示气泡跟随宿主主题,浅色白底深色文字、深色深底浅色文字,箭头、边框和阴影同步。最低版、rc.5、alpha.2 与 NEXT 的静态前端共 32 组检查通过,覆盖按钮、禁用开关、模态对话框和气泡显示中切换主题;未重跑完整宿主。
65
+ - **完整 Windows Web**:`0.2.1-rc.4`、`rc.5` 的真实 Loader、预设、Agent、PTC 和 Windows ACL 沙箱已验收。`run_code → bash` 通过真实 DSH 界面的批准、拒绝、取消,以及禁用审批、下一次再次拒绝和后台前置拒绝;批准命令实际退出 0 且只写入一次,其他 6 个未批准路径无文件副作用,会话仍为 workspace-write。已核对两版实际加载的关键组件版本。
66
+ - **最低版本 Windows Web 补测**:`0.1.5-alpha.1`、`alpha.2`、`rc.1`、`rc.2`、`rc.3` 各通过 31 组完整进程检查,共 155 组,覆盖预设、设置自动保存、旧版 codeRuntime、Bash、真实界面审批、删除保护、非零退出、取消、实际文件副作用和 CLI 冷重启。旧版 120ms 超时会终止命令,不转后台;超过延迟窗口后无取消或超时写入。各版实际 profile 中可解析的 229/230 个 DSH 组件均为目标版本,12 个执行关键组件逐个核对;使用官方 Node `24.18.1` ARM64 与原有 Cordis `4.0.2` 组合。
67
+ - **中间 16 版 Windows Web 补齐**:`0.1.6-alpha.1/alpha.2`、`0.1.7-alpha.1/alpha.2/rc.1/rc.2`、`0.2.0-rc.1/rc.2`、`0.2.1-alpha.1` ~ `alpha.5` 及 `rc.1` ~ `rc.3` 全部完成真实 Windows Web 宿主验收。0.1.6 两版各 34 组,其余 14 版各 35 组,共 558 组通过,覆盖预设可用、设置自动保存、PTC → Bash、真实审批、三档删除保护、非零退出、超时、取消、实际文件和完整 CLI 冷重启。关闭 Bash 后,运行中 Agent 保留选择,新 Agent 能使用官方 PowerShell。
68
+ - **中间版本审计与超时差异**:各版在 Windows 11 ARM64 VM 使用官方 Node `24.18.1` ARM64、按各版官方声明固定的 Cordis/Schemastery 依赖和独立 profile;实际安装的 236 ~ 296 个 DSH 组件均无混版,18 个关键模块逐个核对,加载的开发包运行代码哈希一致。0.1.6 的 120ms 超时会终止命令,其余版本会转为一次后台任务并正常完成;从 `0.2.1-alpha.3` 起另核对 v4 的任务注册、完成事件。取消检查先确认真实 Bash 进程及启动文件,再取消并等待超过 12 秒,确认进程退出且无延迟写入。这是 Windows Web 验收,历史原生桌面范围仍按下述记录单列。
69
+ - **旧版模块定位修复**:修复无 `profileContext` 的目录预设在 npm 嵌套依赖布局下找不到宿主 Shell 模块、无法创建会话的问题;改从实际 root profile 解析,保留新版显式安装锚点的优先级。新增回归先复现再修复,全量 317 项单元测试与 24 版的 216 项 Shell 回归通过。上述 0.1.5 五版及中间 16 版均已使用修复包完成 Windows Web 验收。
70
+ - **0.1.5 桌面边界**:查过的五个 Windows 安装包地址及对应 `dsh-desktop` npm 元数据均返回 404,未完成原生旧桌面验收;完整 Web 结果不能代替桌面结果。下方完整 Desktop/NEXT、删除保护与超时记录使用模块定位修复前的包;本轮最终包的官方预设专项另见上文,不将两批结果合称为完整套件复验。
71
+ - **完整 Windows Desktop / NEXT**:官方 Desktop `0.2.1-rc.5` 与 NEXT `2.0.21-next` 串行运行真实发行安装包;后者内置 Harness `0.2.1-rc.4`。两端实际 Host 均为 x64、Node `24.21.0`、Electron `44.7.0`,11 个关键宿主包已核对。通过原生插件页安装和启用当时的开发 tgz、预设可用、Bash 开关双向自动保存、预算保留、跨标签恢复及完整应用冷重启;测试期间无页面脚本错误。
72
+ - **桌面执行与审批**:两端真实 `run_code → bash` 均通过数组、中文带空格文件名、GNU grep、BusyBox、非零退出、运行取消及超时转后台并完成。受限调用明确拒绝,宿主单次批准只执行一次;拒绝、取消、never、后续普通调用和后台前置拒绝均无文件副作用,会话保持 workspace-write。关闭 Bash 后旧 Agent 保留选择,新 Agent 使用宿主 PowerShell。
73
+ - **桌面删除保护**:两端通过严格模式下 MSYS `cmd.exe //c` 删除的拒绝、取消和批准;在 Workspace write + ask 下,删除确认与该条 Bash 的沙箱外权限申请分别批准,才删除任务临时文件。拒绝或取消均保留文件,宽松和关闭模式不增加插件确认。宿主 Full access 默认同时设置 approval=never,此时严格删除申请被自动拒绝,插件不改变宿主策略。
74
+ - **桌面安装来源**:官方包来自 [DeepSeek Windows nightly](https://download.deepseek.com/dsh-desk/feeds/win-x64/nightly.yml),SHA-512 与更新源一致,Windows Authenticode 有效。NEXT 来自 [NEXT Windows 下载接口](https://www.dshdesktop.cn/api/downloads/windows),携带 next 频道与目标版本请求头;安装程序未签名且接口未提供公开摘要,仅核对 HTTPS 来源、产品版本及传输前后 SHA-256,不能视为签名验证通过。
75
+ - **限权边界**:MSYS 无法在官方 Windows 限权沙箱中创建内部命名管道。插件保留 Bash,在进程启动前明确拒绝受限调用;仅接受宿主批准的单次 `danger-full-access` 调用策略,之后的命令仍需审批,不修改会话权限或切换 Shell。另在显式完全访问的测试会话中验证了数组、中文文件读写和 GNU grep。
76
+ - **测试环境对照**:前期 Node 22.23.4 ARM64 出现不加载插件也能复现的 fs.mkdir/ACL 锁文件 EPERM。保留失败记录后,在同一 VM 用官方 Node 24.18.1 完成上述完整审批与设置页验收;没有修改系统 ACL 或关闭防护。
77
+ - **实机范围**:专用 Windows 11 ARM64 VM;两套载荷各通过 7 项执行检查。桌面发行包和 Bash/MSYS/grep 均通过系统 x64 兼容执行,不能视为原生 x64 硬件或原生 ARM64 Bash 验证。完整桌面专项仅覆盖上述两款发行包,未重跑所有历史 Windows 桌面版本或外部模型评测。
78
+ - **真实工具组件**:rc.4 的 12 项通过,覆盖根/子作用域过滤、按会话保留 Shell 选择、PowerShell 切回、单次副作用、超时/取消、删除保护及单次审批、宿主拒绝、后台任务和销毁隔离。这组使用真实工具和 Windows 进程,未证明完整限权沙箱可运行 Bash。
79
+ - **固定命令题集**:100 项中 97 项通过,原 45 项全部通过。剩余 3 项涉及 `.cmd` 引号及 MSYS 对原生 `/` 参数的转换。题目与预期结果未修改;不全局关闭路径转换,不失败重放。
80
+ - **逐版接口**:从 `0.1.5-alpha.1` 到 `0.2.2-alpha.2` 的全部 24 个 npm 发布版本逐版通过,共 591 项 Shell 作用域、删除保护和设置检查。旧版使用真实 SettingsProvider;新版使用真实 Loader 与 SettingsForms,ConfigEditor 持久化为临时文件夹具。alpha 使用真实 native executor、batch API 和会话投影,删除保护整组通过。24 版真实 provider 另在 macOS 通过 240 项执行检查,其中沙箱拒绝为桩;不等同于 24 个完整 Windows 宿主验收。
81
+ - **逐版 Windows 执行**:上述 24 版均在 Windows VM 中独立安装并核对真实 provider 依赖图,共 288 项通过,覆盖实际 Bash 进程、中文与 stdin/stderr、非零退出、超时/取消、单次副作用、截断与完整溢出文件、工具隔离、限权前置拒绝及环境变量屏蔽。每版使用独立 Node 进程;批准策略检查使用组件服务,不冒充完整 ACL 宿主审批。运行时自身 13 项损坏、并发、硬链接/符号链接和环境边界测试也在 Windows 通过。
82
+ - **安装范围**:查询时 npm latest/next 为 `0.2.1-rc.5`,alpha 为 `0.2.2-alpha.2`。24 版的 360 项 peer 范围检查通过;已补齐新 alpha 系列及其 Cordis/Schemastery 预发布范围。开发包在独立 alpha 依赖图中真实安装,并通过包根插件的 Loader、SettingsForms 激活与设置读写;该检查的 ConfigEditor 为夹具。
83
+ - **界面与单元**:32 个官方静态前端目标(24 Web、8 Desktop/NEXT)通过 128 项设置开关、自动保存、错误与非 Windows 禁用检查,无页面脚本错误。RPC 为夹具,不代表运行中桌面验收。316 项单元测试、类型检查、构建和客户端语法检查通过。完整 Windows Web 设置页另通过双向自动保存、预算与平台状态保留、跨标签和冷重启检查。
84
+ - **并发复查**:另在全部 24 版通过 192 项 Shell 检查,新增覆盖准备中的父子 Agent、重复生命周期事件、父子失败后兄弟恢复,以及真实离线准备服务的 Promise 共享、失败重试和状态快照隔离;这轮在 macOS 运行,未启动 Windows 二进制或完整宿主。
85
+ - **环境与删除识别复查**:修复 `PATH`/`Path` 键序可能清掉最终 PATH,以及别名覆盖固定 BusyBox 选项的问题;24 版真实环境合并函数通过 240 项检查,Windows VM 另通过 168 项实际进程检查。严格删除保护补充识别 MSYS 的 `cmd.exe //c`、`//k` 写法,全部 24 版通过 360 项删除保护组件回归;普通输出中的删除命令文字不受影响。这些检查不代表完整宿主或外部模型验收。
86
+ - **检视修复**:准备失败的 Agent 不再暴露另一 Shell,也不会因兄弟 Agent 恢复而重新获得执行能力;非标准 provider 关闭后,子 Agent 保留父会话选择。损坏的清单在准备前拒绝;Windows PATH 别名遵循 Node 优先级,启动脚本与导出函数环境变量被遮蔽。
87
+ - **体积与模型**:载荷压缩资产约 4.50 MB;最近开发包约 9.1 MB,包含 BusyBox 对应源码。以上均使用固定测试命令或本地确定性模型响应,没有调用外部模型,不属于编码效果评测。
53
88
 
54
89
  ## 0.3.9 · 2026-10-27 ~ 28
55
90
 
@@ -2,6 +2,22 @@
2
2
 
3
3
  中文 · [English](en/EvaluationResults.md)
4
4
 
5
+ ## Pro100:连续复用环境对比
6
+
7
+ 统一使用 Harness `0.2.1-rc.2`、`deepseek-v4.1-flash-1017`、high、旧预算,各组内部连续复用环境。以下为完整 100 题汇总,按通过数量降序排列。
8
+
9
+ | 方案 | 通过/有效 | 平均总 Token(M) | 平均耗时(分钟) | 平均模型调用 | 平均工具调用 | 缓存率 |
10
+ |---|---:|---:|---:|---:|---:|---:|
11
+ | Super Code 0.3.5 | **51/100** | 6.435 | 24.751 | 76.660 | 75.840 | 98.927% |
12
+ | 官方标准 | 50/100 | 8.030 | 17.198 | 91.990 | 113.880 | 99.167% |
13
+ | 原版 dsh-ops 0.4.4 · 标准 | 49/100 | 7.099 | 23.132 | 82.500 | 102.360 | 99.062% |
14
+ | 官方标准+billion-context 0.1.209 | 45/100 | 6.359 | 18.471 | 108.950 | 131.140 | 97.654% |
15
+ | 原版 dsh-ops 0.4.4 · PTC | 44/100 | 7.322 | 23.695 | 81.490 | 80.960 | 99.056% |
16
+
17
+ M 为百万 Token,包含思考 Token;耗时包含部分运行内服务等待。Super Code `0.3.5` 为本批次的旧预算连续基线。
18
+
19
+ 这批成绩与下方历史预算实验的环境复用方式及耗时口径不同,分别保留,不混用通过数、耗时或效率百分比。下方的 `49/100` 与 `46/100` 是历史批次结果,并非本表的 `51/100` 与 `50/100`;原逐题数据继续对应原批次。
20
+
5
21
  ## 评测设计
6
22
 
7
23
  ### 题集
@@ -10,17 +26,17 @@ SWE-bench Pro hard-100(固定标识 `swebench-pro-hard-100-ddd22492f1c38839`
10
26
 
11
27
  - 「hard-100」是本项目按既有难度方法选出的 100 题,并非官方认定的最难 100 题。
12
28
  - 调优仅使用 SWE-bench dev 中筛选的 33 道有效困难题。hard-100 只用于评测冻结后的候选版本和排查问题,**不参与调优**,以避免对评测题过拟合。
13
- - 所有成绩均已纳入后续复核(见[评分更正](#评分更正)),每组均有 100 题有效评分。
29
+ - 下方历史成绩均已纳入后续复核(见[评分更正](#评分更正)),每组均有 100 题有效评分。
14
30
 
15
31
  ### 对照
16
32
 
17
- 对照选用官方标准预设,而非 minimal。旧宿主实测中,标准 + high 通过 51 题,minimal + high 通过 46 题,且标准每题 token 少 23.5%。与更强的对照比较,结论更严格。
33
+ 对照包括官方标准预设和第三方插件方案。历史官方预设对比选用标准预设,而非 minimal:旧宿主实测中,标准 + high 通过 51 题,minimal + high 通过 46 题,且标准每题 token 少 23.5%。
18
34
 
19
35
  ### 控制变量
20
36
 
21
- 同一组对比中,宿主、模型、思考等级和预算保持一致,仅替换 Agent 预设。宿主或模型变化时,单独列出并说明。
37
+ 同宿主对比中,模型、思考等级和预算保持一致,对比不同预设及插件组合。宿主或模型变化时,单独列出并说明。顶部连续环境表的耗时包含部分运行内服务等待;历史预算实验使用净耗时,扣除失败请求和重试等待。
22
38
 
23
- ### 评测过程
39
+ ### 历史评测过程
24
40
 
25
41
  1. **旧宿主基线**:在 DSH `0.1.5-rc.2` 与 `deepseek-v4.1-flash` 上评测官方各预设和插件各版本,Super Code `0.3.0` 候选通过 56 题,高于官方最好的标准 + high(51 题)。
26
42
  2. **宿主升级后效果下降**:升级至 DSH `0.2.1-rc.2` 与 `deepseek-v4.1-flash-1017` 后,默认预算下标准降至 46 题,Super Code `0.3.4` 降至 41 题,低于标准。
@@ -28,7 +44,7 @@ SWE-bench Pro hard-100(固定标识 `swebench-pro-hard-100-ddd22492f1c38839`
28
44
  4. **恢复旧预算后复测**:双方均改用旧预算。标准仍为 46 题;Super Code `0.3.5` 提升至 49 题。据此,`0.3.6` 起插件默认使用旧预算。
29
45
  5. **跨模型验证**:在 `glm-5.3-flash` 上与原生 ZCode 对比,检验方案是否依赖特定模型。
30
46
 
31
- ## 结论
47
+ ## 历史评测结论
32
48
 
33
49
  | 对比 | 结果 |
34
50
  |---|---|