dsh-gitbash-shell 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -0
- package/README.md +23 -0
- package/dsh.plugin.json +1 -1
- package/package.json +1 -1
- package/src/client.js +91 -1
- package/src/compositions.js +19 -15
- package/src/index.js +172 -26
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,66 @@
|
|
|
3
3
|
> 倒序排列,新版本条目在最上面。条目格式:`## vX.Y.Z — YYYY-MM-DD` + 类型(feat / fix / docs / chore)+ 要点 + 相关链接。
|
|
4
4
|
> 纪律见 AGENTS.md「变更记录纪律」:发版前先更新本文件并随版本提交;事故复盘、复现与真机验证记录也记在这里。
|
|
5
5
|
|
|
6
|
+
## v0.27.0 — 2026-09-25
|
|
7
|
+
|
|
8
|
+
**类型**:feat(新设置「子代理/队员是否也使用 Git Bash」,默认开启 —— 用户 2026-09-25 追加需求)
|
|
9
|
+
|
|
10
|
+
### 需求与语义
|
|
11
|
+
用户原话:「gitbash 插件也是专门给个设置是否让子代理或者子队员使用 gitbash,默认启动。」
|
|
12
|
+
|
|
13
|
+
- **开关 `subagentDialect`(本插件行 Config 的 volatile 布尔,**默认 `true`**;旧宿主 ≤0.1.6 在 settings 命名空间 `gitbash-shell` 声明同名字段,**缺键 = true**)。
|
|
14
|
+
- **开(默认)**:委托代理 —— 子代理(`subagent`/`subagent_fork`)、团队队员(`spawn_teammate` 走 continuable-subagent 的 `spawn`/`fork`)、**嵌套子代理** —— 与主代理享受同一条方言链路。
|
|
15
|
+
- **关**:方言只对主代理生效,委托出去的请求回退官方 shell 语义(提示词不改写、路径参数不翻译、结果/报错不回显为 MSYS、`run_code` 程序字面量不翻译、不下发 `DSH_PATH_DIALECT`)。
|
|
16
|
+
|
|
17
|
+
### 委托身份的判据(先查清链路,再动代码)
|
|
18
|
+
- 用**会话头**判定:`origin === 'subagent' || delegationDepth > 0` —— 与 dsh 自己的 `packages/deliverables/workspace-changes/src/index.ts:59-60` 同一对字段;由子代理驱动在 `packages/subagent/subagent/src/child-agent.ts:139-155` (`childSessionMeta`) 打上,`spawn`/`fork` 两种 provider 与嵌套深度都走它。
|
|
19
|
+
- 纯函数 `isDelegatedAgent(agent)` + 唯一判定点 `dialectApplies(dialect, agent)`;条件挂在 `assembleContext.agent`(`packages/core/agent/src/dispatch.ts:174` 的 `assembleContextFor` 传 `{ agent, scope }`)与 `exec.agent` / `execution.agent` 上。
|
|
20
|
+
- **未知形状一律视为"非委托"**(保留方言):判定不出来时按主代理处理。
|
|
21
|
+
|
|
22
|
+
### 覆盖到的五个消费点(全部接同一个 gate,避免"半方言")
|
|
23
|
+
① `system-prompt/assemble` 的源头改写与 run_code 句;② 指令 context 的 `text(context)` provider;③ `tools/execute` 的入参翻译 + 成功面回显;④ `tools/post-execute` 的失败面 `content`/`error.message`;⑤ `shellEnv.resolve(execution)` 的 `DSH_PATH_DIALECT` 事实。
|
|
24
|
+
|
|
25
|
+
### 能力边界(如实写明,写进 README/AGENTS)
|
|
26
|
+
dsh **每个进程只有一个 shell 执行器**(`ctx.shell` 是单例服务),所以 **Git Bash 二进制本身仍是全局的**,本开关管的是**方言/翻译层**;关闭后委托代理见到与写出的是 Windows 形式路径,而 Git Bash 同样接受 `C:/...`,行为自洽。
|
|
27
|
+
|
|
28
|
+
### 测试与证据
|
|
29
|
+
- 冒烟 **86/86 绿**:新增 3 条(① `isDelegatedAgent`/`dialectApplies` 矩阵:origin、depth 1/2、root、未知/抛错/`agent` 缺失,以及卡片写入断言;② OFF 时主代理保留、委托代理被挡 + 五个消费点都接 gate 的源码断言;③ 旧宿主/老配置**缺键 = true** 的回退);`tests/align-official.mjs` 四变体仍全绿(本版不动组合)。
|
|
30
|
+
- **真机两态(隔离 `DSH_HOME` + 新建 profile + 插件副本 `link:` 安装,真实 dsh 0.1.7-rc.2,本机 macOS)**:探针用 `ctx.agents.create()` 造**真**的 root / child(`origin:'subagent', delegationDepth:1`)/ nested(depth 2)三个 agent(实测会话头 `undefined` / `"subagent":1` / `"subagent":2`),再对每个 agent 调**真的** `ctx.systemPrompt.assemble({ agent, scope: agent })`:
|
|
31
|
+
|
|
32
|
+
| 开关 | main(root) | subagent | nested |
|
|
33
|
+
| --- | --- | --- | --- |
|
|
34
|
+
| **默认 ON** | 方言指令 = yes | **yes** | **yes** |
|
|
35
|
+
| **OFF**(行 Config `subagentDialect: false`) | yes | **no** | **no** |
|
|
36
|
+
|
|
37
|
+
⇒ 两态下委托代理的方言确实不同(指令 context 出现/消失即 gate 的可观测面),主代理两态都保留。
|
|
38
|
+
**平台说明**:macOS 上方言/执行器面本来被 `process.platform === 'win32'` 门控,本次把**插件副本**的两处组装门(`system-prompt/assemble` 与指令 context)强制打开以取得请求级证据(报告中如实标注);**win32 真机仍未覆盖**(执行器是单例,与方言开关无关,不受本版影响)。
|
|
39
|
+
- 设置卡:方言区新增一行(21 语言 `sub.label`/`sub.hint`),写入本行 `subagentDialect`;文案明确"二进制仍全局、此开关管方言/翻译层"。
|
|
40
|
+
|
|
41
|
+
- 相关:用户需求(2026-09-25 追加);实现不变量见 AGENTS.md §4g,验证装置见「验证清单」第 8 条。
|
|
42
|
+
|
|
43
|
+
## v0.26.1 — 2026-09-25
|
|
44
|
+
|
|
45
|
+
**类型**:fix(v0.26.0 的 workflow 互斥按「意图」而非「生效态」收敛:后端不可用时用户会白丢 workflow 能力)
|
|
46
|
+
|
|
47
|
+
> v0.26.0 把互斥条件写成「对方能力报 `pythonRuntime: true`」——那是**用户意图**。当对方的 preflight 失败(包被移除、解释器不合格、Windows),`!!js` 兜底与组合实际仍跑 Node,而本插件却已经把四个变体的 `workflow-ptc`/`tool-workflow` 关掉了:用户白丢一项能力,且卡片显示"已开启"与实际不符。dsh-ptc-cordis-preset **v0.15.1** 在能力服务上加了**加法字段** `pythonBackend: 'python' | 'node'`(用与 `!!js` 完全相同的合取计算),本版据此收敛。
|
|
48
|
+
|
|
49
|
+
- **① 互斥只在真正生效时发生**:新增纯函数 `pythonBackendActive(capability)` = 「意图 `pythonRuntime` 为真 **且** 生效态为 `'python'`」;`pluginsFor({ …, pythonActive })` 的形参由 `pythonRuntime` 改名 **`pythonActive`**,语义写明「run_code 实际会用的后端」——`workflowOn = kind !== 'ptc' && pythonActive !== true`。
|
|
50
|
+
- **② 旧 peer 回退(兼容硬要求)**:`peerBackend()` 对缺字段 / 类型不符 / getter 抛错一律返回 `undefined`(绝不把"没报"读成 `'node'`),`pythonBackendActive` 此时**用意图顶替** ⇒ 对方 < 0.15.1 的行为与 v0.26.0 **完全一致**,不会因缺字段崩溃或改变既有联动。
|
|
51
|
+
- **③ 日志把"真换了"与"想换但没生效"分开**:生效 → `peer reports the experimental CPython run_code backend: workflow rows go off in every variant`;意图 on 但未生效 → `peer has the CPython switch on but the effective backend is node|unreported (older peer: the intent stands in): workflow rows stay on (reason in the host log)`。
|
|
52
|
+
- **④ 卡片显示真实状态(防御性实现,当前不可达)**:从**同一份 peer 快照**读可选的 `pythonBackend`;意图 on + 生效 `node` ⇒ 状态值显示「Python(实验性) · **后端不可用,当前仍为 Node(原因见宿主启动日志)**」并另起一行红字;新增第 7 个词典键 `python.degraded`(**21 门语言**同齐)。字段缺省(旧 peer)⇒ 卡片与 v0.26.0 **逐字节一致**(不显示降级态)。
|
|
53
|
+
- **可达性拆分(Lead 裁决 A,2026-09-25)**:**「意图 on + 生效 node」这个状态本身是可达的** —— ptc 侧不拒绝把意图落成 true(Lead 明确不授权任何"单方面回写用户 settings 表单值"的行为,即不做"点开关被拒绝")。**不可达的是本插件这行降级显示**:浏览器侧只能读 `configForms.get('ptc-cordis').getSnapshot().value`(该行 **Config / settings 表单**),而 `pythonBackend` 只挂在**能力服务**上(宿主侧,浏览器读不到),ptc v0.15.1 的 Config schema 里没有该字段。因此现状是:ptc 卡显示 on + 红字原因,**本插件卡只显示 on**(hint 已指向宿主日志)。
|
|
54
|
+
- **后续项(本轮不做,避免再开一轮发布)**:由对方用**加法只读字段**把 `pythonBackend`/`pythonIssue` **投影进行 Config 快照**(不动用户意图字段 `pythonRuntime`);那一刻本插件**无需改动**即自动亮起(读的就是同一个键)。已记入最终报告的「已知限制/后续项」。
|
|
55
|
+
- **测试**:冒烟 **83/83 绿**(改写 2 条到 `pythonActive` 语义 + 新增 3 条:①生效态矩阵含旧 peer 回退与闭集校验 ②降级意图只上报不驱动 ③卡片降级态与 21 语言文案);`tests/align-official.mjs` 四个变体仍全绿(本版不动组合的官方行形态)。
|
|
56
|
+
- **真机 A/B/C(隔离 `DSH_HOME` + 新建 profile + `link:` 安装 + 探针能力,dsh 0.1.7-rc.2,本机 macOS,端口 3262-3264,收尾已清理)**:探针分别报三种能力形态,读数(`readDocument()` 的 `disabled`)与日志三例全部符合预期:
|
|
57
|
+
|
|
58
|
+
| 探针能力 | 日志 | 四变体的 `workflow-ptc`/`tool-workflow` |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| `{pythonRuntime:true, pythonBackend:'python'}` | `peer reports the experimental CPython run_code backend: workflow rows go off in every variant` + 四条 `retired … (peer CPython backend changed; rows are rebuilt)` | **`disabled: true`**(互斥生效) |
|
|
61
|
+
| `{pythonRuntime:true, pythonBackend:'node'}` | `peer has the CPython switch on but the effective backend is node: workflow rows stay on (reason in the host log)`(**无**重建日志,行未变) | **保持启用**(`standard/cordis-gitbash` 不丢 workflow;`code-gitbash` 本就关) |
|
|
62
|
+
| `{pythonRuntime:true}`(旧 peer,缺生效字段) | 与第一行相同(意图顶替) | `disabled: true` —— 与 v0.26.0 行为**逐字节一致** |
|
|
63
|
+
|
|
64
|
+
- 协作边界:v0.15.1 的 `pythonBackend` 是**加法字段**,本插件零形状破坏;`pythonRuntime` 仍是两侧卡片读写的权威**意图**字段。发布后由 contract-rc2 在 task-10 复验两条通道一致性。
|
|
65
|
+
|
|
6
66
|
## v0.26.0 — 2026-09-25
|
|
7
67
|
|
|
8
68
|
**类型**:feat(run_code 的实验性 Python 后端开关,与 dsh-ptc-cordis-preset 双向联动)+ fix(issue #10:JSON 转义的 Windows 路径多出前导斜杠)+ chore(dsh 0.1.7-rc.2 增量对齐复核)
|
|
@@ -39,6 +99,8 @@
|
|
|
39
99
|
- **B(探针报 `pythonRuntime: true`)**:出现上面两行日志,四个变体**全部重建**,读数变为两行 `disabled: true`。
|
|
40
100
|
- **两态都做真实挂载**:`agentPresets.acquireScope('<variant>')` 四个变体各返回 `MOUNT OK`(挂载审计无 failed 行),证明显式注册的组合在 rc.2 上确实可挂载,而不只是"注册成功"。
|
|
41
101
|
- **Windows 专属面**:win32 分支(卡片禁用态、宿主拒绝写入、python 后端构造抛错)在 macOS 上**无法真机验证**,按实现 + 单测/模拟记录;本插件的执行器与路径方言层按 `process.platform === 'win32'` 门控,而 python 后端仅 POSIX,两者在各自平台上互不重叠。
|
|
102
|
+
- **独立验证(发布后补记,2026-09-25,task-8,由另一位成员执行)**:用 **npm 已发布的 `dsh-gitbash-shell@0.26.0`** + `dsh-ptc-cordis-preset@0.15.0` 在隔离 `DSH_HOME` 上复验 —— **ptc → gitbash 方向联动通过**:把对方的行 Config `pythonRuntime` 置 `true` 后 boot,本插件打出 `peer reports the experimental CPython run_code backend: workflow rows go off in every variant` 以及四条 `retired … (peer CPython switch changed; rows are rebuilt)`;关态 boot **没有**这些行 ⇒ 能力感知 + 变体重建按设计工作(完整报告:`_rc2-contract/PYTHON-SWITCH-VERIFY.md`)。
|
|
103
|
+
- 仍未覆盖(留给集成阶段/真机):**反方向「在 gitbash 卡上改 → ptc 跟随」与两张卡的 UI 即时同步**(headless 无法操作设置卡,需真实 web 实例人工点选;两侧写的是同一个 `configForms` 字段,机制与 v0.25.0 已验证的 dedupe 镜像同构)以及 **win32 真机**(本机无 Windows;静态核对确认 ptc 侧平台表达式与 python 后端 `ptc-runtime-python/src/index.ts:837-839` 的「win32 构造即抛」一致,本插件侧按 `python.blocked` + 不画按钮实现平台限制)。
|
|
42
104
|
- 相关:issue #10 https://github.com/KannaKuron/dsh-gitbash-shell/issues/10 ;对方仓库 dsh-ptc-cordis-preset v0.15.0(能力字段与运行行)
|
|
43
105
|
|
|
44
106
|
## v0.25.1 — 2026-09-24
|
package/README.md
CHANGED
|
@@ -101,6 +101,22 @@ dsh-ptc-cordis-preset 报告它的 `PTC 创造模式` 已经是 Git Bash 版。
|
|
|
101
101
|
0.24.x 的四个变体逐字不变;判定细节、生效时机与两侧同步方式见下方
|
|
102
102
|
[「与 dsh-ptc-cordis-preset 联动」](#与-dsh-ptc-cordis-preset-联动)。
|
|
103
103
|
|
|
104
|
+
### 子代理/队员是否也用 Git Bash:`subagentDialect`(默认开,v0.27.0)
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
- id: gitbash-shell
|
|
108
|
+
config:
|
|
109
|
+
subagentDialect: true # 默认;false = 方言只对主代理生效
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
默认开启时,子代理、团队队员(含嵌套子代理)与主代理走**同一条**方言链路:提示词里的路径同样是 `/c/...` 形式、
|
|
113
|
+
路径参数同样被翻译、结果与报错同样回显为 MSYS 形式、`run_code` 程序里的路径字面量同样被翻译,`DSH_PATH_DIALECT` 环境事实也照常下发。
|
|
114
|
+
关闭后这些**只对主代理生效**:委托出去的请求保持官方 shell 语义(提示词不改写、路径参数原样传递),适合"子代理要跑原生 Windows 工具链"的场景。
|
|
115
|
+
|
|
116
|
+
> 能力边界(如实说明):dsh **每个进程只有一个 shell 执行器**(`ctx.shell` 是单例服务),所以 Git Bash **二进制本身仍是全局的**,
|
|
117
|
+
> 这个开关管的是**方言/翻译层**,不是"换一个 shell"。关闭后委托代理见到与写出的是 Windows 形式路径(`C:/...`),Git Bash 同样接受,行为自洽。
|
|
118
|
+
> 委托身份的判据用会话头的 `origin === 'subagent'` / `delegationDepth > 0`(与 dsh 自身一致),判定不出来时按主代理处理(保留方言)。
|
|
119
|
+
|
|
104
120
|
配合 `agent-presets` 的 `default`,新会话直接落在 Git Bash 模式,免去每次在
|
|
105
121
|
模式选择器里翻找(原版 shipped 模式无法替换或隐藏——部署级、只读):
|
|
106
122
|
|
|
@@ -204,6 +220,13 @@ Config 的布尔字段 `pythonRuntime`(默认 `false`),由它在 profile 组合
|
|
|
204
220
|
`language`/`executionInstructions` 决定,组合文本不变)。
|
|
205
221
|
- **生效时机**:**重启 dsh 之后生效**(后端行的替换在 profile 组合期求值);设置卡上的状态
|
|
206
222
|
两侧即时同步,只有后端切换需要重启。若开启后没有生效,原因见 dsh 启动日志。
|
|
223
|
+
- **"想开"与"真的开了"是两件事**:后端不可用(包被移除 / 解释器低于 3.10 / Windows)时,开关的
|
|
224
|
+
意图仍可为"开",但组合**照旧跑 Node** —— 此时 **workflow 侧不再被连带禁用**(v0.26.1:互斥只看
|
|
225
|
+
实际生效的后端;v0.26.0 只看意图,会让用户白丢 workflow 能力),**原因见 dsh 启动日志**。
|
|
226
|
+
> 关于卡片上的"后端不可用,当前仍为 Node"这行提示:本插件已实现该降级文案(21 语言),但它要等
|
|
227
|
+
> **对方把生效态投影进行 Config 快照**后才会亮起 —— 浏览器只读得到那份快照,而生效态目前只在
|
|
228
|
+
> 宿主侧的能力服务里(见 AGENTS.md §4f)。在此之前:对方卡片显示"已开启 + 原因",本插件卡片
|
|
229
|
+
> 显示"已开启"(hint 指向宿主日志)。
|
|
207
230
|
- **平台**:该后端**仅支持 POSIX**——它在 Windows 上构造即抛错,所以 Windows 上开关显示为
|
|
208
231
|
禁用并注明原因,宿主侧也会拒绝写入。
|
|
209
232
|
- **与 workflow 互斥**:`workflow-ptc` 硬要求 TypeScript 后端(`ctx.ptcRuntime.language ===
|
package/dsh.plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dsh-external/dsh-gitbash-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"description": "Windows 全模式 Git Bash:用 Git for Windows bash 替换 PowerShell 执行器,并物化 standard/minimal/code/cordis 的 Git Bash 变体 preset。双 era 适配 dsh <= 0.1.1(内置 id 'code')与 >= 0.1.2(改名 'ptc'),启动探测自动选择,preset id 永不变。联动:dsh-ptc-cordis-preset(两者同装时 PTC 创造模式自动物化为 Git Bash 版)+ dsh-better-sidebar(终端 UI 标签与模型 terminal_* 工具自动切到 Git Bash)。",
|
|
6
6
|
"engines": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-gitbash-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Windows 上让 agent 的每条 shell 命令改经 Git for Windows bash 执行;物化四个内置预设的 Git Bash 变体,统一 MSYS 盘根路径方言,侧栏终端接管可开关。· Run every agent shell command through Git for Windows bash on Windows; materialize Git Bash variants of the built-in presets, unify the MSYS drive-root path dialect, and adopt the sidebar terminal behind a switch.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
package/src/client.js
CHANGED
|
@@ -55,6 +55,11 @@ window.__ModuleLoader__.load({
|
|
|
55
55
|
both cards read and write this one form field, so either side changes
|
|
56
56
|
both. Absent on a peer that predates the switch ⇒ no row is drawn. */
|
|
57
57
|
var PEER_PYTHON_FIELD = "pythonRuntime";
|
|
58
|
+
/** The peer's EFFECTIVE backend on the same snapshot ('python' | 'node'),
|
|
59
|
+
when its version reports one: 'node' while the intent is on means the
|
|
60
|
+
preflight failed (package missing / interpreter too old / Windows), so
|
|
61
|
+
the card shows the degraded state instead of claiming Python. */
|
|
62
|
+
var PEER_PYTHON_BACKEND_FIELD = "pythonBackend";
|
|
58
63
|
|
|
59
64
|
// ── dictionaries ────────────────────────────────────────────────────────
|
|
60
65
|
// zh/en stay inline; the third languages live in LOCALES below, one entry
|
|
@@ -82,6 +87,8 @@ window.__ModuleLoader__.load({
|
|
|
82
87
|
"split.hint": "glob 的绝对 pattern(/c/.../*.md)自动拆为 path + 相对 pattern;关闭则原样传递。",
|
|
83
88
|
"code.label": "run_code 程序内路径",
|
|
84
89
|
"code.hint": "run_code 程序里写的 /c/... 等路径字面量在执行前按同一张挂载表翻译;注释、插值模板、$VAR 与非路径字符串不动,扫描有任何不确定就整份不改。 并给程序补 TEMP/TMP:空 env 下 Windows 的 os.tmpdir() 会得到 undefined\\temp,程序会静默写错地方。",
|
|
90
|
+
"sub.label": "子代理/队员使用 Git Bash",
|
|
91
|
+
"sub.hint": "默认开启:子代理与团队队员(含嵌套子代理)的提示词方言、路径参数翻译、结果回显与 DSH_PATH_DIALECT 环境事实与主代理一致。关闭后这些只对主代理生效,子代理按官方 shell 语义运行(提示词不改写、路径参数不翻译);注意 dsh 每个进程只有一个 shell 执行器,所以 Git Bash 二进制本身仍是全局的,此开关管的是方言/翻译层。",
|
|
85
92
|
"eol.label": "Git 行尾(与 Linux 一致)",
|
|
86
93
|
"eol.hint": "模型跑的 git 命令按 Linux 行为:core.autocrlf=input、core.eol=lf。你自己终端的 git 与仓库里的 .gitattributes 都不受影响。",
|
|
87
94
|
"bash.label": "Git Bash 路径",
|
|
@@ -98,6 +105,7 @@ window.__ModuleLoader__.load({
|
|
|
98
105
|
"python.on": "Python(实验性)",
|
|
99
106
|
"python.off": "Node / TypeScript(默认)",
|
|
100
107
|
"python.hint": "默认关闭时 run_code 用官方 Node/TypeScript 后端,与官方 ptc 组合逐字节一致;开启后改用 dsh 实验性 CPython 后端(@deepseek-ai/dsh-experimental-ptc-runtime-python),run_code 的语言、生成的 SDK 提示词与工具呈现随之切到 Python。要求 POSIX 平台与 CPython ≥ 3.10(Windows 不可用);与 workflow 工具互斥——官方 Python 组合同样禁用 workflow,因此开启期间本插件四个变体的 workflow 侧强制关闭(你的工作流设置值保留,关掉后恢复)。改动需重启 dsh 后生效;此开关就是 dsh-ptc-cordis-preset 设置卡上的同一个开关——两侧共享同一份状态,任一侧改动两侧同步。仅在已安装 dsh-ptc-cordis-preset 时显示。若置为开启后未生效,原因见宿主启动日志。",
|
|
108
|
+
"python.degraded": "后端不可用,当前仍为 Node(原因见宿主启动日志)",
|
|
101
109
|
"python.blocked": "本机是 Windows:实验性 Python 后端仅支持 POSIX,此开关不可用。",
|
|
102
110
|
};
|
|
103
111
|
|
|
@@ -121,6 +129,8 @@ window.__ModuleLoader__.load({
|
|
|
121
129
|
"split.hint": "An absolute glob pattern (/c/.../*.md) splits into path + relative pattern; off passes it through verbatim.",
|
|
122
130
|
"code.label": "run_code program paths",
|
|
123
131
|
"code.hint": "Path literals inside a run_code program are translated through the same mount table before it runs; comments, interpolated templates, $VARs and non-path strings stay untouched, and any uncertainty leaves the whole program as written. It also seeds TEMP/TMP for the program: with an empty env Windows' os.tmpdir() returns undefined\\temp and writes land in a bogus folder.",
|
|
132
|
+
"sub.label": "Subagents/teammates use Git Bash",
|
|
133
|
+
"sub.hint": "On (default): subagents and team members — nested ones included — get the same prompt dialect, path-argument translation, result echo and DSH_PATH_DIALECT fact as the main agent. Off: those apply to the main agent only, and delegated agents run with the official shell semantics (no prompt rewrite, no path translation). Note that dsh has exactly one shell executor per process, so the Git Bash binary stays global; this switch governs the dialect/translation layers.",
|
|
124
134
|
"eol.label": "Git line endings (Linux match)",
|
|
125
135
|
"eol.hint": "Git commands the model runs behave like Linux: core.autocrlf=input, core.eol=lf. Your own terminal's git and a repository's .gitattributes are unaffected.",
|
|
126
136
|
"bash.label": "Git Bash path",
|
|
@@ -137,6 +147,7 @@ window.__ModuleLoader__.load({
|
|
|
137
147
|
"python.on": "Python (experimental)",
|
|
138
148
|
"python.off": "Node / TypeScript (default)",
|
|
139
149
|
"python.hint": "While off (default) run_code uses the official Node/TypeScript backend, byte-identical to the shipped ptc composition; turning it on switches to dsh's experimental CPython backend (@deepseek-ai/dsh-experimental-ptc-runtime-python), which also switches run_code's language, generated SDK prompt and tool presentation to Python. Requires a POSIX platform and CPython ≥ 3.10 (unavailable on Windows) and is mutually exclusive with the workflow tool — the official Python composition disables workflow too, so the workflow side of all four variants is forced off while this is on (your workflow setting is kept and restored when you turn it back off). Takes effect after restarting dsh; this is the very same switch on dsh-ptc-cordis-preset's card — both sides share one state, so either side updates both. Shown only while dsh-ptc-cordis-preset is installed. If turning it on does not take effect, the dsh startup log states why.",
|
|
150
|
+
"python.degraded": "backend unavailable, still Node (reason in the dsh startup log)",
|
|
140
151
|
"python.blocked": "This host is Windows: the experimental Python backend supports POSIX only, so this switch is unavailable.",
|
|
141
152
|
};
|
|
142
153
|
|
|
@@ -170,6 +181,8 @@ window.__ModuleLoader__.load({
|
|
|
170
181
|
"split.hint": "نمط glob المطلق يُقسم إلى path + نمط نسبي؛ الإيقاف يمرره كما هو.",
|
|
171
182
|
"code.label": "مسارات برامج run_code",
|
|
172
183
|
"code.hint": "تُترجم السلاسل النصية للمسارات المكتوبة داخل برنامج run_code عبر جدول التحميل نفسه قبل التشغيل؛ وتبقى التعليقات والقوالب ذات الإدراج و$VAR والسلاسل غير المسارية كما هي، وأي التباس يُبقي البرنامج كاملًا دون تغيير. وتُهيَّأ أيضًا TEMP/TMP للبرنامج: مع بيئة فارغة يعيد os.tmpdir() على ويندوز القيمة undefined\\temp فيُكتب في مكان خاطئ.",
|
|
184
|
+
"sub.label": "استخدام الوكلاء الفرعيين لـ Git Bash",
|
|
185
|
+
"sub.hint": "مُفعَّل (افتراضيًا): يحصل الوكلاء الفرعيون وأعضاء الفريق — بما في ذلك المتداخلون — على لهجة المطالبة وترجمة مسارات الوسائط وصدى النتائج وحقيقة DSH_PATH_DIALECT نفسها التي يحصل عليها الوكيل الرئيسي. عند الإيقاف تُطبَّق هذه على الوكيل الرئيسي فقط ويعمل الوكلاء المفوَّضون بدلالات الصدفة الرسمية (دون إعادة كتابة المطالبة أو ترجمة المسارات). لاحظ أن dsh يملك مُنفِّذ صدفة واحدًا لكل عملية، لذا يبقى ثنائي Git Bash عامًّا؛ هذا المفتاح يحكم طبقتي اللهجة والترجمة.",
|
|
173
186
|
"eol.label": "نهايات أسطر Git (مطابقة لينكس)",
|
|
174
187
|
"eol.hint": "أوامر git التي يشغّلها النموذج تتبع سلوك لينكس: core.autocrlf=input و core.eol=lf؛ لا يتأثر طرفيتك ولا ملف .gitattributes للمستودع.",
|
|
175
188
|
"bash.label": "مسار Git Bash",
|
|
@@ -186,6 +199,7 @@ window.__ModuleLoader__.load({
|
|
|
186
199
|
"python.on": "Python (تجريبي)",
|
|
187
200
|
"python.off": "Node / TypeScript (افتراضي)",
|
|
188
201
|
"python.hint": "عند الإيقاف (افتراضيًا) يستخدم run_code الخلفية الرسمية Node/TypeScript، مطابقة تمامًا لتركيبة ptc الرسمية؛ وعند التشغيل يتحول إلى خلفية CPython التجريبية في dsh (@deepseek-ai/dsh-experimental-ptc-runtime-python)، فتتحول لغة run_code ومطالبة SDK المولَّدة وعرض الأداة إلى Python. يتطلب نظام POSIX و CPython ≥ 3.10 (غير متاح على Windows)، وهو متعارض مع أداة workflow — فالتركيبة الرسمية لـ Python تعطّل workflow أيضًا، لذا يبقى جانب workflow مُعطَّلًا في المتغيّرات الأربعة أثناء التشغيل (قيمتك محفوظة وتعود عند الإيقاف). يسري التغيير بعد إعادة تشغيل dsh؛ هذا هو المفتاح نفسه على بطاقة dsh-ptc-cordis-preset — الجانبان يتشاركان حالة واحدة. يظهر فقط عند تثبيت dsh-ptc-cordis-preset. إذا لم يسري التشغيل، فسبب ذلك مذكور في سجل تشغيل dsh.",
|
|
202
|
+
"python.degraded": "الخلفية غير متاحة، لا يزال Node (السبب في سجل بدء التشغيل)",
|
|
189
203
|
"python.blocked": "هذا المضيف يعمل بـ Windows: الخلفية التجريبية Python تدعم POSIX فقط، لذا لا يتوفر هذا المفتاح.",
|
|
190
204
|
},
|
|
191
205
|
/* locale: de */
|
|
@@ -209,6 +223,8 @@ window.__ModuleLoader__.load({
|
|
|
209
223
|
"split.hint": "Ein absolutes Glob-Muster zerfällt in Pfad + relatives Muster; aus übergibt es unverändert.",
|
|
210
224
|
"code.label": "Pfade in run_code-Programmen",
|
|
211
225
|
"code.hint": "Pfadliterale in einem run_code-Programm werden vor dem Start über dieselbe Mount-Tabelle übersetzt; Kommentare, interpolierte Templates, $VARs und Nicht-Pfad-Strings bleiben unangetastet, und bei Unklarheit bleibt das ganze Programm unverändert. Zusätzlich werden TEMP/TMP für das Programm gesetzt: bei leerer Umgebung liefert os.tmpdir() unter Windows undefined\\temp und schreibt an einen falschen Ort.",
|
|
226
|
+
"sub.label": "Subagenten/Teammitglieder nutzen Git Bash",
|
|
227
|
+
"sub.hint": "An (Standard): Subagenten und Teammitglieder — auch verschachtelte — erhalten denselben Prompt-Dialekt, dieselbe Pfadargument-Übersetzung, dieselbe Ergebnisanzeige und dieselbe DSH_PATH_DIALECT-Tatsache wie der Hauptagent. Aus: Das gilt nur für den Hauptagenten, delegierte Agenten laufen mit den offiziellen Shell-Semantiken (keine Prompt-Umschreibung, keine Pfadübersetzung). Beachte: dsh hat genau einen Shell-Executor pro Prozess, das Git-Bash-Binary bleibt also global; dieser Schalter steuert die Dialekt-/Übersetzungsschichten.",
|
|
212
228
|
"eol.label": "Git-Zeilenenden (Linux-gleich)",
|
|
213
229
|
"eol.hint": "Vom Modell ausgeführte git-Befehle verhalten sich wie unter Linux: core.autocrlf=input, core.eol=lf. Dein eigenes Terminal und die .gitattributes eines Repos bleiben unberührt.",
|
|
214
230
|
"bash.label": "Git-Bash-Pfad",
|
|
@@ -225,6 +241,7 @@ window.__ModuleLoader__.load({
|
|
|
225
241
|
"python.on": "Python (experimentell)",
|
|
226
242
|
"python.off": "Node / TypeScript (Standard)",
|
|
227
243
|
"python.hint": "Aus (Standard): run_code nutzt das offizielle Node/TypeScript-Backend, byte-identisch zur ausgelieferten ptc-Komposition; an: dsh wechselt auf das experimentelle CPython-Backend (@deepseek-ai/dsh-experimental-ptc-runtime-python), womit Sprache, generierter SDK-Prompt und Darstellung von run_code auf Python umstellen. Erfordert POSIX und CPython ≥ 3.10 (unter Windows nicht verfügbar) und ist mit dem workflow-Tool unvereinbar — die offizielle Python-Komposition deaktiviert workflow ebenfalls, deshalb bleibt die workflow-Seite aller vier Varianten so lange aus (dein Workflow-Wert bleibt erhalten und kehrt nach dem Ausschalten zurück). Wirkt nach einem Neustart von dsh; dies ist derselbe Schalter auf der Karte von dsh-ptc-cordis-preset — beide Seiten teilen einen Zustand. Nur sichtbar, solange dsh-ptc-cordis-preset installiert ist. Bleibt das Einschalten ohne Wirkung, nennt das dsh-Startprotokoll den Grund.",
|
|
244
|
+
"python.degraded": "Backend nicht verfügbar, weiterhin Node (Grund im dsh-Startprotokoll)",
|
|
228
245
|
"python.blocked": "Dieser Host ist Windows: Das experimentelle Python-Backend unterstützt nur POSIX, der Schalter ist nicht verfügbar.",
|
|
229
246
|
},
|
|
230
247
|
/* locale: fr */
|
|
@@ -248,6 +265,8 @@ window.__ModuleLoader__.load({
|
|
|
248
265
|
"split.hint": "Un motif glob absolu se scinde en chemin + motif relatif ; désactivé le passe tel quel.",
|
|
249
266
|
"code.label": "chemins dans les programmes run_code",
|
|
250
267
|
"code.hint": "Les littéraux de chemin écrits dans un programme run_code sont traduits via la même table de montage avant exécution; commentaires, gabarits interpolés, $VAR et chaînes non-chemin restent intacts, et la moindre incertitude laisse le programme tel quel. TEMP/TMP sont aussi fournis au programme : avec un env vide, os.tmpdir() sous Windows renvoie undefined\\temp et écrit au mauvais endroit.",
|
|
268
|
+
"sub.label": "Les sous-agents utilisent Git Bash",
|
|
269
|
+
"sub.hint": "Activé (par défaut) : les sous-agents et membres d'équipe — y compris imbriqués — reçoivent le même dialecte de prompt, la même traduction des chemins d'arguments, le même écho de résultat et le même fait DSH_PATH_DIALECT que l'agent principal. Désactivé : ces éléments ne s'appliquent qu'à l'agent principal et les agents délégués suivent les sémantiques de shell officielles (pas de réécriture du prompt, pas de traduction des chemins). À noter : dsh n'a qu'un seul exécuteur de shell par processus, le binaire Git Bash reste donc global ; cet interrupteur régit les couches de dialecte et de traduction.",
|
|
251
270
|
"eol.label": "fins de ligne Git (comme Linux)",
|
|
252
271
|
"eol.hint": "Les commandes git lancées par le modèle suivent le comportement Linux : core.autocrlf=input, core.eol=lf. Votre terminal et les .gitattributes du dépôt ne sont pas touchés.",
|
|
253
272
|
"bash.label": "Chemin Git Bash",
|
|
@@ -264,6 +283,7 @@ window.__ModuleLoader__.load({
|
|
|
264
283
|
"python.on": "Python (expérimental)",
|
|
265
284
|
"python.off": "Node / TypeScript (par défaut)",
|
|
266
285
|
"python.hint": "Désactivé (par défaut), run_code utilise le backend officiel Node/TypeScript, identique octet pour octet à la composition ptc livrée ; activé, dsh bascule sur le backend CPython expérimental (@deepseek-ai/dsh-experimental-ptc-runtime-python) : la langue, l'invite SDK générée et la présentation de run_code passent en Python. Exige POSIX et CPython ≥ 3.10 (indisponible sous Windows) et est incompatible avec l'outil workflow — la composition Python officielle désactive aussi workflow, donc le côté workflow des quatre variantes reste désactivé tant que l'option est active (ta valeur est conservée et revient à la désactivation). Prend effet après un redémarrage de dsh ; c'est le même interrupteur que sur la carte de dsh-ptc-cordis-preset — les deux côtés partagent un seul état. Affiché uniquement si dsh-ptc-cordis-preset est installé. Si l'activation reste sans effet, le journal de démarrage de dsh en indique la raison.",
|
|
286
|
+
"python.degraded": "backend indisponible, toujours Node (raison dans le journal de démarrage de dsh)",
|
|
267
287
|
"python.blocked": "Cet hôte est sous Windows : le backend Python expérimental n'est disponible que sur POSIX, l'interrupteur est indisponible.",
|
|
268
288
|
},
|
|
269
289
|
/* locale: hi */
|
|
@@ -287,6 +307,8 @@ window.__ModuleLoader__.load({
|
|
|
287
307
|
"split.hint": "एब्सोल्यूट glob पैटर्न path + रिलेटिव पैटर्न में विभाजित होता है; बंद इसे वैसे ही पास करता है।",
|
|
288
308
|
"code.label": "run_code प्रोग्राम पथ",
|
|
289
309
|
"code.hint": "run_code प्रोग्राम में लिखे पथ लिटरल चलने से पहले उसी माउंट तालिका से अनूदित होते हैं; टिप्पणियाँ, इंटरपोलेटेड टेम्पलेट, $VAR और गैर-पथ स्ट्रिंग अछूते रहते हैं, और किसी भी अनिश्चितता पर पूरा प्रोग्राम अपरिवर्तित रहता है। साथ ही प्रोग्राम के लिए TEMP/TMP भर दिए जाते हैं: खाली env में Windows पर os.tmpdir() undefined\\temp देता है और गलत जगह लिखता है।",
|
|
310
|
+
"sub.label": "सबएजेंट/टीम सदस्य Git Bash इस्तेमाल करें",
|
|
311
|
+
"sub.hint": "चालू (डिफ़ॉल्ट): सबएजेंट और टीम सदस्य — नेस्टेड सहित — मुख्य एजेंट जैसा ही प्रॉम्प्ट डायलेक्ट, पाथ आर्ग्युमेंट अनुवाद, परिणाम इको और DSH_PATH_DIALECT तथ्य पाते हैं। बंद: ये केवल मुख्य एजेंट पर लागू होते हैं और प्रतिनिधित एजेंट आधिकारिक शेल अर्थ में चलते हैं (प्रॉम्प्ट नहीं बदलता, पाथ अनुवाद नहीं होता)। ध्यान दें: dsh में प्रति प्रोसेस एक ही शेल एक्ज़ीक्यूटर होता है, इसलिए Git Bash बाइनरी वैश्विक रहती है; यह स्विच डायलेक्ट/अनुवाद परतों को नियंत्रित करता है।",
|
|
290
312
|
"eol.label": "Git पंक्ति-अंत (Linux जैसा)",
|
|
291
313
|
"eol.hint": "मॉडल द्वारा चलाए git कमांड Linux व्यवहार अपनाते हैं: core.autocrlf=input, core.eol=lf। आपका टर्मिनल और रेपो का .gitattributes अछूते रहते हैं।",
|
|
292
314
|
"bash.label": "Git Bash पथ",
|
|
@@ -303,6 +325,7 @@ window.__ModuleLoader__.load({
|
|
|
303
325
|
"python.on": "Python (प्रयोगात्मक)",
|
|
304
326
|
"python.off": "Node / TypeScript (डिफ़ॉल्ट)",
|
|
305
327
|
"python.hint": "बंद (डिफ़ॉल्ट) रहने पर run_code आधिकारिक Node/TypeScript बैकएंड इस्तेमाल करता है, जो भेजे गए ptc संयोजन से पूरी तरह मेल खाता है; चालू करने पर dsh का प्रयोगात्मक CPython बैकएंड (@deepseek-ai/dsh-experimental-ptc-runtime-python) चलता है और run_code की भाषा, बना SDK प्रॉम्प्ट तथा प्रस्तुति Python में बदल जाती है। इसके लिए POSIX और CPython ≥ 3.10 चाहिए (Windows पर उपलब्ध नहीं), और यह workflow टूल से परस्पर अनन्य है — आधिकारिक Python संयोजन भी workflow बंद करता है, इसलिए चालू रहने तक चारों वेरिएंट का workflow पक्ष बंद रहता है (आपकी workflow सेटिंग सुरक्षित रहती है और बंद करने पर लौट आती है)। बदलाव dsh को फिर से शुरू करने के बाद लागू होता है; यह dsh-ptc-cordis-preset के कार्ड पर मौजूद वही स्विच है — दोनों ओर एक ही स्थिति साझा होती है। यह केवल तभी दिखता है जब dsh-ptc-cordis-preset इंस्टॉल हो। चालू करने पर असर न हो तो कारण dsh के स्टार्टअप लॉग में मिलेगा।",
|
|
328
|
+
"python.degraded": "बैकएंड उपलब्ध नहीं, अब भी Node (कारण dsh स्टार्टअप लॉग में)",
|
|
306
329
|
"python.blocked": "यह होस्ट Windows है: प्रयोगात्मक Python बैकएंड केवल POSIX पर चलता है, इसलिए यह स्विच उपलब्ध नहीं है।",
|
|
307
330
|
},
|
|
308
331
|
/* locale: id */
|
|
@@ -326,6 +349,8 @@ window.__ModuleLoader__.load({
|
|
|
326
349
|
"split.hint": "Pattern glob absolut dipecah menjadi path + pattern relatif; nonaktif meneruskannya apa adanya.",
|
|
327
350
|
"code.label": "jalur dalam program run_code",
|
|
328
351
|
"code.hint": "Literal jalur yang ditulis di program run_code diterjemahkan lewat tabel mount yang sama sebelum dijalankan; komentar, template berinterpolasi, $VAR, dan string non-jalur dibiarkan, dan bila ada keraguan seluruh program tidak diubah. TEMP/TMP juga diisi untuk program: dengan env kosong, os.tmpdir() di Windows mengembalikan undefined\\temp dan menulis ke lokasi salah.",
|
|
352
|
+
"sub.label": "Subagen/teman tim memakai Git Bash",
|
|
353
|
+
"sub.hint": "Aktif (bawaan): subagen dan anggota tim — termasuk yang bersarang — mendapat dialek prompt, terjemahan argumen path, gema hasil, dan fakta DSH_PATH_DIALECT yang sama seperti agen utama. Nonaktif: semuanya hanya berlaku untuk agen utama dan agen yang didelegasikan berjalan dengan semantik shell resmi (prompt tidak ditulis ulang, path tidak diterjemahkan). Catatan: dsh hanya punya satu eksekutor shell per proses, jadi biner Git Bash tetap global; sakelar ini mengatur lapisan dialek/terjemahan.",
|
|
329
354
|
"eol.label": "akhir baris Git (sama seperti Linux)",
|
|
330
355
|
"eol.hint": "Perintah git yang dijalankan model mengikuti perilaku Linux: core.autocrlf=input, core.eol=lf. Terminal Anda dan .gitattributes repo tidak terpengaruh.",
|
|
331
356
|
"bash.label": "Path Git Bash",
|
|
@@ -342,6 +367,7 @@ window.__ModuleLoader__.load({
|
|
|
342
367
|
"python.on": "Python (eksperimental)",
|
|
343
368
|
"python.off": "Node / TypeScript (bawaan)",
|
|
344
369
|
"python.hint": "Saat nonaktif (bawaan), run_code memakai backend resmi Node/TypeScript, identik byte demi byte dengan komposisi ptc resmi; saat aktif, dsh memakai backend CPython eksperimental (@deepseek-ai/dsh-experimental-ptc-runtime-python) sehingga bahasa run_code, prompt SDK yang dihasilkan, dan penyajiannya beralih ke Python. Memerlukan POSIX dan CPython ≥ 3.10 (tidak tersedia di Windows) serta saling eksklusif dengan alat workflow — komposisi Python resmi juga menonaktifkan workflow, jadi sisi workflow keempat varian tetap mati selama ini aktif (nilai workflow-mu dipertahankan dan kembali saat dimatikan). Berlaku setelah dsh dimulai ulang; ini sakelar yang sama di kartu dsh-ptc-cordis-preset — kedua sisi berbagi satu status. Hanya tampil saat dsh-ptc-cordis-preset terpasang. Jika diaktifkan tetapi tidak berpengaruh, alasannya ada di log mulai dsh.",
|
|
370
|
+
"python.degraded": "backend tidak tersedia, masih Node (alasan di log mulai dsh)",
|
|
345
371
|
"python.blocked": "Host ini Windows: backend Python eksperimental hanya mendukung POSIX, sakelar ini tidak tersedia.",
|
|
346
372
|
},
|
|
347
373
|
/* locale: it */
|
|
@@ -365,6 +391,8 @@ window.__ModuleLoader__.load({
|
|
|
365
391
|
"split.hint": "Un pattern glob assoluto si divide in percorso + pattern relativo; off lo passa invariato.",
|
|
366
392
|
"code.label": "percorsi nei programmi run_code",
|
|
367
393
|
"code.hint": "I letterali di percorso scritti in un programma run_code vengono tradotti con la stessa tabella di mount prima dell'esecuzione; commenti, template interpolati, $VAR e stringhe non di percorso restano intatti e qualsiasi incertezza lascia il programma invariato. Inoltre TEMP/TMP vengono forniti al programma: con env vuoto, os.tmpdir() su Windows restituisce undefined\\temp e scrive nel posto sbagliato.",
|
|
394
|
+
"sub.label": "Subagenti/compagni usano Git Bash",
|
|
395
|
+
"sub.hint": "Attivo (predefinito): subagenti e membri del team — anche annidati — ricevono lo stesso dialetto del prompt, la stessa traduzione dei percorsi negli argomenti, lo stesso eco dei risultati e lo stesso fatto DSH_PATH_DIALECT dell'agente principale. Disattivo: valgono solo per l'agente principale e gli agenti delegati usano le semantiche di shell ufficiali (nessuna riscrittura del prompt, nessuna traduzione dei percorsi). Nota: dsh ha un solo esecutore di shell per processo, quindi il binario Git Bash resta globale; questo interruttore governa gli strati di dialetto e traduzione.",
|
|
368
396
|
"eol.label": "fine riga Git (come Linux)",
|
|
369
397
|
"eol.hint": "I comandi git eseguiti dal modello seguono il comportamento Linux: core.autocrlf=input, core.eol=lf. Il tuo terminale e i .gitattributes del repo non vengono toccati.",
|
|
370
398
|
"bash.label": "Percorso Git Bash",
|
|
@@ -381,6 +409,7 @@ window.__ModuleLoader__.load({
|
|
|
381
409
|
"python.on": "Python (sperimentale)",
|
|
382
410
|
"python.off": "Node / TypeScript (predefinito)",
|
|
383
411
|
"python.hint": "Disattivato (predefinito) run_code usa il backend ufficiale Node/TypeScript, identico byte per byte alla composizione ptc distribuita; attivandolo dsh passa al backend CPython sperimentale (@deepseek-ai/dsh-experimental-ptc-runtime-python): lingua, prompt SDK generato e presentazione di run_code passano a Python. Richiede POSIX e CPython ≥ 3.10 (non disponibile su Windows) ed è incompatibile con lo strumento workflow — anche la composizione Python ufficiale disattiva workflow, quindi il lato workflow di tutte e quattro le varianti resta spento finché è attivo (il tuo valore viene conservato e torna alla disattivazione). Ha effetto dopo il riavvio di dsh; è lo stesso interruttore sulla scheda di dsh-ptc-cordis-preset — entrambi i lati condividono un unico stato. Visibile solo quando dsh-ptc-cordis-preset è installato. Se l'attivazione non ha effetto, il motivo è nel log di avvio di dsh.",
|
|
412
|
+
"python.degraded": "backend non disponibile, resta Node (motivo nel log di avvio di dsh)",
|
|
384
413
|
"python.blocked": "Questo host è Windows: il backend Python sperimentale supporta solo POSIX, l'interruttore non è disponibile.",
|
|
385
414
|
},
|
|
386
415
|
/* locale: ja */
|
|
@@ -404,6 +433,8 @@ window.__ModuleLoader__.load({
|
|
|
404
433
|
"split.hint": "絶対 glob パターンを path + 相対パターンに分割;オフならそのまま渡します。",
|
|
405
434
|
"code.label": "run_code プログラム内のパス",
|
|
406
435
|
"code.hint": "run_code プログラム内に書いた /c/... などのパスリテラルは実行前に同じマウント表で変換されます。コメント・補間テンプレート・$VAR・パス以外の文字列は変更せず、解析に不確かさがあればプログラム全体をそのまま実行します。 さらにプログラムに TEMP/TMP を渡します: 空の env では Windows の os.tmpdir() が undefined\\temp を返し、誤った場所に書き込みます。",
|
|
436
|
+
"sub.label": "サブエージェント/チームメンバーも Git Bash を使う",
|
|
437
|
+
"sub.hint": "オン(既定):サブエージェントとチームメンバー(ネスト含む)は、メインエージェントと同じプロンプト方言・パス引数の翻訳・結果エコー・DSH_PATH_DIALECT の事実を受け取ります。オフ:これらはメインエージェントのみに適用され、委譲されたエージェントは公式の shell セマンティクスで動作します(プロンプト改写なし、パス翻訳なし)。なお dsh はプロセスごとに shell 実行器を 1 つだけ持つため、Git Bash バイナリ自体は常に全体共通です。このスイッチが制御するのは方言/翻訳の層です。",
|
|
407
438
|
"eol.label": "Git の行末(Linux と同じ)",
|
|
408
439
|
"eol.hint": "モデルが実行する git コマンドは Linux と同じ挙動になります: core.autocrlf=input、core.eol=lf。あなたのターミナルやリポジトリの .gitattributes は影響を受けません。",
|
|
409
440
|
"bash.label": "Git Bash パス",
|
|
@@ -420,6 +451,7 @@ window.__ModuleLoader__.load({
|
|
|
420
451
|
"python.on": "Python(実験的)",
|
|
421
452
|
"python.off": "Node / TypeScript(既定)",
|
|
422
453
|
"python.hint": "オフ(既定)では run_code は公式の Node/TypeScript バックエンドを使い、公式 ptc 構成とバイト単位で一致します。オンにすると dsh の実験的 CPython バックエンド(@deepseek-ai/dsh-experimental-ptc-runtime-python)に切り替わり、run_code の言語・生成される SDK プロンプト・提示が Python に変わります。POSIX と CPython ≥ 3.10 が必要(Windows では利用不可)で、workflow ツールとは排他です —— 公式 Python 構成も workflow を無効化するため、オン期間中は 4 変体すべてで workflow 側が強制的にオフになります(ワークフロー設定値は保持され、オフに戻すと復帰)。変更は dsh の再起動後に有効です。これは dsh-ptc-cordis-preset のカードにある同じスイッチで、両側が同一状態を共有します。dsh-ptc-cordis-preset がインストールされているときだけ表示されます。 オンにしても効かない場合の理由は dsh の起動ログにあります。",
|
|
454
|
+
"python.degraded": "バックエンド利用不可・現在も Node(理由は dsh の起動ログ)",
|
|
423
455
|
"python.blocked": "このホストは Windows です。実験的 Python バックエンドは POSIX 専用のため、このスイッチは利用できません。",
|
|
424
456
|
},
|
|
425
457
|
/* locale: ko */
|
|
@@ -443,6 +475,8 @@ window.__ModuleLoader__.load({
|
|
|
443
475
|
"split.hint": "절대 glob 패턴을 path + 상대 패턴으로 분할; 끄면 그대로 전달.",
|
|
444
476
|
"code.label": "run_code 프로그램 경로",
|
|
445
477
|
"code.hint": "run_code 프로그램에 쓴 /c/... 경로 리터럴은 실행 전에 같은 마운트 표로 변환됩니다. 주석, 보간 템플릿, $VAR, 경로가 아닌 문자열은 그대로 두고, 스캔이 불확실하면 프로그램 전체를 그대로 둡니다. 또한 프로그램에 TEMP/TMP를 채워 줍니다: 빈 env에서 Windows의 os.tmpdir()는 undefined\\temp를 반환해 엉뚱한 곳에 씁니다.",
|
|
478
|
+
"sub.label": "서브에이전트/팀원도 Git Bash 사용",
|
|
479
|
+
"sub.hint": "켬(기본): 서브에이전트와 팀원(중첩 포함)은 메인 에이전트와 동일한 프롬프트 방언, 경로 인자 번역, 결과 에코, DSH_PATH_DIALECT 사실을 받습니다. 끔: 이것들은 메인 에이전트에만 적용되고 위임된 에이전트는 공식 shell 의미로 동작합니다(프롬프트 재작성 없음, 경로 번역 없음). 참고로 dsh는 프로세스당 shell 실행기가 하나뿐이라 Git Bash 바이너리 자체는 항상 전역입니다. 이 스위치는 방언/번역 계층을 제어합니다.",
|
|
446
480
|
"eol.label": "Git 줄바꿈(Linux와 동일)",
|
|
447
481
|
"eol.hint": "모델이 실행하는 git 명령은 Linux 동작을 따릅니다: core.autocrlf=input, core.eol=lf. 사용자의 터미널과 저장소의 .gitattributes는 영향을 받지 않습니다.",
|
|
448
482
|
"bash.label": "Git Bash 경로",
|
|
@@ -459,6 +493,7 @@ window.__ModuleLoader__.load({
|
|
|
459
493
|
"python.on": "Python(실험적)",
|
|
460
494
|
"python.off": "Node / TypeScript(기본)",
|
|
461
495
|
"python.hint": "끄면(기본) run_code는 공식 Node/TypeScript 백엔드를 사용해 공식 ptc 구성과 바이트 단위로 일치합니다. 켜면 dsh의 실험적 CPython 백엔드(@deepseek-ai/dsh-experimental-ptc-runtime-python)로 바뀌어 run_code의 언어, 생성되는 SDK 프롬프트, 도구 표시가 Python으로 전환됩니다. POSIX와 CPython ≥ 3.10이 필요하며(Windows에서는 사용 불가) workflow 도구와 상호 배타적입니다 — 공식 Python 구성도 workflow를 끄므로 켜져 있는 동안 네 변형 모두 workflow 쪽이 강제로 꺼집니다(워크플로 설정값은 유지되고 끄면 복구됩니다). 변경은 dsh 재시작 후 적용됩니다. 이 스위치는 dsh-ptc-cordis-preset 카드에 있는 바로 그 스위치이며 양쪽이 같은 상태를 공유합니다. dsh-ptc-cordis-preset이 설치되어 있을 때만 표시됩니다. 켠 뒤에도 적용되지 않으면 그 이유는 dsh 시작 로그에 있습니다.",
|
|
496
|
+
"python.degraded": "백엔드 사용 불가, 여전히 Node(이유는 dsh 시작 로그)",
|
|
462
497
|
"python.blocked": "이 호스트는 Windows입니다. 실험적 Python 백엔드는 POSIX만 지원하므로 이 스위치를 쓸 수 없습니다.",
|
|
463
498
|
},
|
|
464
499
|
/* locale: nl */
|
|
@@ -482,6 +517,8 @@ window.__ModuleLoader__.load({
|
|
|
482
517
|
"split.hint": "Een absoluut glob-patroon splitst in pad + relatief patroon; uit geeft het ongewijzigd door.",
|
|
483
518
|
"code.label": "paden in run_code-programma's",
|
|
484
519
|
"code.hint": "Pad-literalen in een run_code-programma worden vóór uitvoering via dezelfde mounttabel vertaald; opmerkingen, geïnterpoleerde templates, $VAR's en niet-pad-strings blijven ongemoeid, en bij twijfel blijft het hele programma ongewijzigd. Ook worden TEMP/TMP voor het programma gezet: met een lege env geeft os.tmpdir() op Windows undefined\\temp en schrijft het op de verkeerde plek.",
|
|
520
|
+
"sub.label": "Subagenten/teammaten gebruiken Git Bash",
|
|
521
|
+
"sub.hint": "Aan (standaard): subagenten en teamleden — ook geneste — krijgen hetzelfde promptdialect, dezelfde padargument-vertaling, dezelfde resultaat-echo en hetzelfde DSH_PATH_DIALECT-feit als de hoofdagent. Uit: die gelden alleen voor de hoofdagent en gedelegeerde agenten draaien met de officiële shell-semantiek (geen promptherschrijving, geen padvertaling). Let op: dsh heeft één shell-uitvoerder per proces, dus het Git Bash-binary blijft globaal; deze schakelaar beheert de dialect-/vertaallagen.",
|
|
485
522
|
"eol.label": "Git regeleinden (zoals Linux)",
|
|
486
523
|
"eol.hint": "Git-opdrachten die het model uitvoert volgen Linux-gedrag: core.autocrlf=input, core.eol=lf. Je eigen terminal en de .gitattributes van een repo blijven onaangetast.",
|
|
487
524
|
"bash.label": "Git Bash-pad",
|
|
@@ -498,6 +535,7 @@ window.__ModuleLoader__.load({
|
|
|
498
535
|
"python.on": "Python (experimenteel)",
|
|
499
536
|
"python.off": "Node / TypeScript (standaard)",
|
|
500
537
|
"python.hint": "Uit (standaard) gebruikt run_code de officiële Node/TypeScript-backend, byte voor byte gelijk aan de meegeleverde ptc-compositie; aan schakelt dsh over op de experimentele CPython-backend (@deepseek-ai/dsh-experimental-ptc-runtime-python), waardoor taal, gegenereerde SDK-prompt en weergave van run_code naar Python gaan. Vereist POSIX en CPython ≥ 3.10 (niet beschikbaar op Windows) en is onverenigbaar met de workflow-tool — de officiële Python-compositie schakelt workflow ook uit, dus de workflow-kant van alle vier varianten blijft uit zolang dit aan staat (je workflow-waarde blijft bewaard en keert terug als je het uitzet). Werkt na een herstart van dsh; dit is dezelfde schakelaar op de kaart van dsh-ptc-cordis-preset — beide kanten delen één status. Alleen zichtbaar zolang dsh-ptc-cordis-preset is geïnstalleerd. Werkt het aanzetten niet, dan staat de reden in het opstartlogboek van dsh.",
|
|
538
|
+
"python.degraded": "backend niet beschikbaar, nog steeds Node (reden in het dsh-opstartlogboek)",
|
|
501
539
|
"python.blocked": "Deze host is Windows: de experimentele Python-backend ondersteunt alleen POSIX, deze schakelaar is niet beschikbaar.",
|
|
502
540
|
},
|
|
503
541
|
/* locale: pl */
|
|
@@ -521,6 +559,8 @@ window.__ModuleLoader__.load({
|
|
|
521
559
|
"split.hint": "Absolutny wzorzec glob dzieli się na ścieżkę + wzorzec względny; wył. przekazuje bez zmian.",
|
|
522
560
|
"code.label": "ścieżki w programach run_code",
|
|
523
561
|
"code.hint": "Literały ścieżek w programie run_code są tłumaczone przez tę samą tabelę montowania przed uruchomieniem; komentarze, szablony z interpolacją, $VAR i ciągi niebędące ścieżkami pozostają nietknięte, a każda niepewność pozostawia program bez zmian. Dodatkowo ustawiane są TEMP/TMP dla programu: przy pustym env Windows zwraca z os.tmpdir() undefined\\temp i zapisuje w złym miejscu.",
|
|
562
|
+
"sub.label": "Subagenci/członkowie zespołu używają Git Bash",
|
|
563
|
+
"sub.hint": "Wł. (domyślnie): subagenci i członkowie zespołu — także zagnieżdżeni — otrzymują ten sam dialekt podpowiedzi, tłumaczenie argumentów ścieżek, echo wyników i fakt DSH_PATH_DIALECT co agent główny. Wył.: dotyczy to tylko agenta głównego, a agenci delegowani działają według oficjalnej semantyki powłoki (bez przepisywania podpowiedzi i tłumaczenia ścieżek). Uwaga: dsh ma jeden executor powłoki na proces, więc binarka Git Bash pozostaje globalna; ten przełącznik steruje warstwami dialektu i tłumaczenia.",
|
|
524
564
|
"eol.label": "końce linii Git (jak w Linuksie)",
|
|
525
565
|
"eol.hint": "Polecenia git uruchamiane przez model działają jak w Linuksie: core.autocrlf=input, core.eol=lf. Twój terminal i .gitattributes repozytorium pozostają nietknięte.",
|
|
526
566
|
"bash.label": "Ścieżka Git Bash",
|
|
@@ -537,6 +577,7 @@ window.__ModuleLoader__.load({
|
|
|
537
577
|
"python.on": "Python (eksperymentalny)",
|
|
538
578
|
"python.off": "Node / TypeScript (domyślnie)",
|
|
539
579
|
"python.hint": "Wyłączony (domyślnie) run_code używa oficjalnego backendu Node/TypeScript, identycznego co do bajtu z dostarczaną kompozycją ptc; włączenie przełącza dsh na eksperymentalny backend CPython (@deepseek-ai/dsh-experimental-ptc-runtime-python), więc język, generowany prompt SDK i prezentacja run_code przechodzą na Python. Wymaga POSIX i CPython ≥ 3.10 (niedostępny w Windows) i jest wykluczający z narzędziem workflow — oficjalna kompozycja Python również wyłącza workflow, więc strona workflow wszystkich czterech wariantów pozostaje wyłączona, dopóki to jest włączone (twoje ustawienie workflow jest zachowane i wraca po wyłączeniu). Zmiana działa po restarcie dsh; to ten sam przełącznik na karcie dsh-ptc-cordis-preset — obie strony dzielą jeden stan. Widoczny tylko, gdy dsh-ptc-cordis-preset jest zainstalowany. Jeśli włączenie nie przyniesie skutku, powód znajdziesz w logu startowym dsh.",
|
|
580
|
+
"python.degraded": "backend niedostępny, nadal Node (powód w logu startowym dsh)",
|
|
540
581
|
"python.blocked": "Ten host to Windows: eksperymentalny backend Python obsługuje tylko POSIX, przełącznik jest niedostępny.",
|
|
541
582
|
},
|
|
542
583
|
/* locale: pt */
|
|
@@ -560,6 +601,8 @@ window.__ModuleLoader__.load({
|
|
|
560
601
|
"split.hint": "Um padrão glob absoluto divide em caminho + padrão relativo; desligado passa-o inalterado.",
|
|
561
602
|
"code.label": "caminhos em programas run_code",
|
|
562
603
|
"code.hint": "Literais de caminho escritos num programa run_code são traduzidos pela mesma tabela de montagem antes da execução; comentários, modelos interpolados, $VAR e strings que não são caminhos ficam intactos, e qualquer incerteza deixa o programa como está. Também são definidos TEMP/TMP para o programa: com env vazio, os.tmpdir() no Windows devolve undefined\\temp e grava no lugar errado.",
|
|
604
|
+
"sub.label": "Subagentes/membros da equipa usam Git Bash",
|
|
605
|
+
"sub.hint": "Ligado (padrão): subagentes e membros da equipa — incluindo aninhados — recebem o mesmo dialeto de prompt, tradução de caminhos nos argumentos, eco de resultados e o mesmo facto DSH_PATH_DIALECT que o agente principal. Desligado: isso aplica-se apenas ao agente principal e os agentes delegados correm com a semântica oficial da shell (sem reescrita do prompt nem tradução de caminhos). Nota: o dsh tem um único executor de shell por processo, pelo que o binário Git Bash continua global; este interruptor governa as camadas de dialeto e tradução.",
|
|
563
606
|
"eol.label": "fins de linha do Git (como no Linux)",
|
|
564
607
|
"eol.hint": "Os comandos git executados pelo modelo seguem o comportamento do Linux: core.autocrlf=input, core.eol=lf. O seu terminal e os .gitattributes do repositório não são afetados.",
|
|
565
608
|
"bash.label": "Caminho do Git Bash",
|
|
@@ -576,6 +619,7 @@ window.__ModuleLoader__.load({
|
|
|
576
619
|
"python.on": "Python (experimental)",
|
|
577
620
|
"python.off": "Node / TypeScript (padrão)",
|
|
578
621
|
"python.hint": "Desligado (padrão), o run_code usa o backend oficial Node/TypeScript, idêntico byte a byte à composição ptc distribuída; ligado, o dsh passa para o backend CPython experimental (@deepseek-ai/dsh-experimental-ptc-runtime-python), e a linguagem, o prompt SDK gerado e a apresentação do run_code passam para Python. Exige POSIX e CPython ≥ 3.10 (indisponível no Windows) e é incompatível com a ferramenta workflow — a composição Python oficial também desativa workflow, pelo que o lado workflow das quatro variantes fica desligado enquanto isto estiver ligado (o teu valor é mantido e regressa ao desligar). Produz efeito após reiniciar o dsh; é o mesmo interruptor no cartão do dsh-ptc-cordis-preset — os dois lados partilham um único estado. Só aparece quando o dsh-ptc-cordis-preset está instalado. Se ligar não tiver efeito, o motivo está no registo de arranque do dsh.",
|
|
622
|
+
"python.degraded": "backend indisponível, continua Node (motivo no registo de arranque do dsh)",
|
|
579
623
|
"python.blocked": "Este anfitrião é Windows: o backend Python experimental só suporta POSIX, pelo que este interruptor não está disponível.",
|
|
580
624
|
},
|
|
581
625
|
/* locale: ru */
|
|
@@ -599,6 +643,8 @@ window.__ModuleLoader__.load({
|
|
|
599
643
|
"split.hint": "Абсолютный glob-шаблон разбивается на path + относительный шаблон; выкл передаёт как есть.",
|
|
600
644
|
"code.label": "пути в программах run_code",
|
|
601
645
|
"code.hint": "Строковые литералы путей в программе run_code переводятся по той же таблице монтирования до запуска; комментарии, шаблоны с интерполяцией, $VAR и строки-не-пути не трогаются, а при любой неопределённости программа остаётся без изменений. Также программе задаются TEMP/TMP: при пустом env в Windows os.tmpdir() возвращает undefined\\temp и запись идёт не туда.",
|
|
646
|
+
"sub.label": "Субагенты и участники команды используют Git Bash",
|
|
647
|
+
"sub.hint": "Вкл. (по умолчанию): субагенты и участники команды — включая вложенных — получают тот же диалект подсказки, перевод путей в аргументах, эхо результатов и факт DSH_PATH_DIALECT, что и главный агент. Выкл.: это применяется только к главному агенту, а делегированные агенты работают с официальной семантикой оболочки (без перезаписи подсказки и перевода путей). Учтите: в dsh один исполнитель оболочки на процесс, поэтому сам бинарник Git Bash остаётся общим; этот переключатель управляет слоями диалекта и перевода.",
|
|
602
648
|
"eol.label": "переводы строк Git (как в Linux)",
|
|
603
649
|
"eol.hint": "Команды git, запускаемые моделью, ведут себя как в Linux: core.autocrlf=input, core.eol=lf. Ваш терминал и .gitattributes репозитория не затрагиваются.",
|
|
604
650
|
"bash.label": "Путь Git Bash",
|
|
@@ -615,6 +661,7 @@ window.__ModuleLoader__.load({
|
|
|
615
661
|
"python.on": "Python (экспериментальный)",
|
|
616
662
|
"python.off": "Node / TypeScript (по умолчанию)",
|
|
617
663
|
"python.hint": "Выключено (по умолчанию) — run_code использует официальный бэкенд Node/TypeScript, побайтово совпадающий с поставляемой композицией ptc; при включении dsh переходит на экспериментальный бэкенд CPython (@deepseek-ai/dsh-experimental-ptc-runtime-python), и язык, сгенерированная подсказка SDK и представление run_code переключаются на Python. Требуются POSIX и CPython ≥ 3.10 (в Windows недоступно), и это несовместимо с инструментом workflow — официальная композиция Python тоже отключает workflow, поэтому сторона workflow всех четырёх вариантов остаётся выключенной, пока это включено (ваша настройка workflow сохраняется и возвращается после выключения). Изменение действует после перезапуска dsh; это тот же переключатель на карточке dsh-ptc-cordis-preset — обе стороны делят одно состояние. Показывается только когда установлен dsh-ptc-cordis-preset. Если включение не подействовало, причина указана в журнале запуска dsh.",
|
|
664
|
+
"python.degraded": "бэкенд недоступен, по-прежнему Node (причина в журнале запуска dsh)",
|
|
618
665
|
"python.blocked": "Этот хост — Windows: экспериментальный бэкенд Python поддерживает только POSIX, переключатель недоступен.",
|
|
619
666
|
},
|
|
620
667
|
/* locale: sv */
|
|
@@ -638,6 +685,8 @@ window.__ModuleLoader__.load({
|
|
|
638
685
|
"split.hint": "Ett absolut glob-mönster delas i sökväg + relativt mönster; av skickar det oförändrat.",
|
|
639
686
|
"code.label": "sökvägar i run_code-program",
|
|
640
687
|
"code.hint": "Sökvägslitteraler i ett run_code-program översätts via samma monteringstabell före körning; kommentarer, interpolerade mallar, $VAR och strängar som inte är sökvägar lämnas orörda, och vid minsta osäkerhet lämnas hela programmet oförändrat. Dessutom sätts TEMP/TMP för programmet: med tom env ger os.tmpdir() i Windows undefined\\temp och skriver på fel ställe.",
|
|
688
|
+
"sub.label": "Subagenter/teammedlemmar använder Git Bash",
|
|
689
|
+
"sub.hint": "På (standard): subagenter och teammedlemmar — även nästlade — får samma promptdialekt, samma sökvägsöversättning i argument, samma resultat-eko och samma DSH_PATH_DIALECT-faktum som huvudagenten. Av: detta gäller bara huvudagenten och delegerade agenter kör med officiell shell-semantik (ingen promptomskrivning, ingen sökvägsöversättning). Obs: dsh har en enda shell-exekutor per process, så Git Bash-binären är fortfarande global; den här växeln styr dialekt-/översättningslagren.",
|
|
641
690
|
"eol.label": "Git radslut (som Linux)",
|
|
642
691
|
"eol.hint": "Git-kommandon som modellen kör följer Linux-beteende: core.autocrlf=input, core.eol=lf. Din egen terminal och repots .gitattributes påverkas inte.",
|
|
643
692
|
"bash.label": "Git Bash-sökväg",
|
|
@@ -654,6 +703,7 @@ window.__ModuleLoader__.load({
|
|
|
654
703
|
"python.on": "Python (experimentell)",
|
|
655
704
|
"python.off": "Node / TypeScript (standard)",
|
|
656
705
|
"python.hint": "Av (standard) använder run_code den officiella Node/TypeScript-backenden, byte för byte identisk med den medföljande ptc-kompositionen; på växlar dsh till den experimentella CPython-backenden (@deepseek-ai/dsh-experimental-ptc-runtime-python), vilket även byter run_codes språk, genererade SDK-prompt och presentation till Python. Kräver POSIX och CPython ≥ 3.10 (ej tillgängligt i Windows) och utesluter workflow-verktyget — den officiella Python-kompositionen stänger också av workflow, så workflow-sidan i alla fyra varianter hålls avstängd medan detta är på (ditt workflow-värde behålls och återställs när du stänger av). Gäller efter omstart av dsh; detta är samma växel på dsh-ptc-cordis-presets kort — båda sidor delar ett tillstånd. Visas bara när dsh-ptc-cordis-preset är installerat. Om påslaget inte får effekt står orsaken i dsh:s startlogg.",
|
|
706
|
+
"python.degraded": "backend otillgänglig, fortfarande Node (orsak i dsh-startloggen)",
|
|
657
707
|
"python.blocked": "Den här värden är Windows: den experimentella Python-backenden stöder bara POSIX, så växeln är otillgänglig.",
|
|
658
708
|
},
|
|
659
709
|
/* locale: th */
|
|
@@ -677,6 +727,8 @@ window.__ModuleLoader__.load({
|
|
|
677
727
|
"split.hint": "pattern glob สัมบูรณ์แยกเป็น path + pattern สัมพัทธ์; ปิดส่งต่อตามเดิม",
|
|
678
728
|
"code.label": "พาธในโปรแกรม run_code",
|
|
679
729
|
"code.hint": "สตริงพาธที่เขียนในโปรแกรม run_code จะถูกแปลผ่านตาราง mount เดียวกันก่อนรัน ความคิดเห็น เทมเพลตที่มีการแทรก $VAR และสตริงที่ไม่ใช่พาธจะไม่ถูกแตะ และหากไม่แน่ใจทั้งโปรแกรมจะไม่ถูกแก้ไข และเติม TEMP/TMP ให้โปรแกรมด้วย: เมื่อ env ว่าง os.tmpdir() บน Windows จะคืน undefined\\temp แล้วเขียนผิดที่",
|
|
730
|
+
"sub.label": "ซับเอเจนต์/สมาชิกทีมใช้ Git Bash",
|
|
731
|
+
"sub.hint": "เปิด (ค่าเริ่มต้น): ซับเอเจนต์และสมาชิกทีม — รวมถึงแบบซ้อน — ได้รับไดอาเลกต์พรอมป์ต์ การแปลพาธในอาร์กิวเมนต์ การสะท้อนผลลัพธ์ และข้อเท็จจริง DSH_PATH_DIALECT เหมือนเอเจนต์หลัก ปิด: สิ่งเหล่านี้มีผลกับเอเจนต์หลักเท่านั้น และเอเจนต์ที่ถูกมอบหมายทำงานด้วยความหมาย shell อย่างเป็นทางการ (ไม่เขียนพรอมป์ต์ใหม่ ไม่แปลพาธ) หมายเหตุ dsh มีตัวรัน shell เดียวต่อโปรเซส ไบนารี Git Bash จึงยังเป็นส่วนกลาง สวิตช์นี้ควบคุมชั้นไดอาเลกต์/การแปล",
|
|
680
732
|
"eol.label": "อักขระขึ้นบรรทัด Git (เหมือน Linux)",
|
|
681
733
|
"eol.hint": "คำสั่ง git ที่โมเดลรันจะใช้พฤติกรรมแบบ Linux: core.autocrlf=input, core.eol=lf เทอร์มินัลของคุณและ .gitattributes ของ repo ไม่ได้รับผลกระทบ",
|
|
682
734
|
"bash.label": "เส้นทาง Git Bash",
|
|
@@ -693,6 +745,7 @@ window.__ModuleLoader__.load({
|
|
|
693
745
|
"python.on": "Python (ทดลอง)",
|
|
694
746
|
"python.off": "Node / TypeScript (ค่าเริ่มต้น)",
|
|
695
747
|
"python.hint": "เมื่อปิด (ค่าเริ่มต้น) run_code จะใช้แบ็กเอนด์ Node/TypeScript อย่างเป็นทางการ ซึ่งเหมือนกับคอมโพซิชัน ptc ที่จัดส่งทุกไบต์; เมื่อเปิด dsh จะเปลี่ยนไปใช้แบ็กเอนด์ CPython ทดลอง (@deepseek-ai/dsh-experimental-ptc-runtime-python) ภาษา พรอมป์ต์ SDK ที่สร้างขึ้น และการนำเสนอของ run_code จะเปลี่ยนเป็น Python ต้องใช้ POSIX และ CPython ≥ 3.10 (ใช้ไม่ได้บน Windows) และใช้ร่วมกับเครื่องมือ workflow ไม่ได้ — คอมโพซิชัน Python อย่างเป็นทางการก็ปิด workflow เช่นกัน ฝั่ง workflow ของทั้งสี่รูปแบบจึงถูกปิดขณะเปิดอยู่ (ค่าที่คุณตั้งไว้จะถูกเก็บและกลับมาเมื่อปิด) การเปลี่ยนแปลงมีผลหลังรีสตาร์ต dsh; นี่คือสวิตช์เดียวกันบนการ์ดของ dsh-ptc-cordis-preset — ทั้งสองฝั่งใช้สถานะเดียวกัน แสดงเฉพาะเมื่อติดตั้ง dsh-ptc-cordis-preset แล้วเท่านั้น หากเปิดแล้วไม่เกิดผล เหตุผลอยู่ในบันทึกการเริ่มต้นของ dsh",
|
|
748
|
+
"python.degraded": "แบ็กเอนด์ใช้ไม่ได้ ยังเป็น Node (เหตุผลในบันทึกเริ่มต้นของ dsh)",
|
|
696
749
|
"python.blocked": "โฮสต์นี้เป็น Windows: แบ็กเอนด์ Python ทดลองรองรับเฉพาะ POSIX สวิตช์นี้จึงใช้ไม่ได้",
|
|
697
750
|
},
|
|
698
751
|
/* locale: tr */
|
|
@@ -716,6 +769,8 @@ window.__ModuleLoader__.load({
|
|
|
716
769
|
"split.hint": "Mutlak glob örüntüsü path + göreli örüntüye ayrılır; kapalı olduğu gibi geçirir.",
|
|
717
770
|
"code.label": "run_code program yolları",
|
|
718
771
|
"code.hint": "Bir run_code programında yazılan yol dizeleri çalıştırılmadan önce aynı bağlama tablosuyla çevrilir; yorumlar, enterpolasyonlu şablonlar, $VAR ve yol olmayan dizeler olduğu gibi kalır, herhangi bir belirsizlikte programın tamamı değişmeden bırakılır. Ayrıca programa TEMP/TMP verilir: boş env ile Windows'ta os.tmpdir() undefined\\temp döner ve yanlış yere yazar.",
|
|
772
|
+
"sub.label": "Alt ajanlar/ekip üyeleri Git Bash kullansın",
|
|
773
|
+
"sub.hint": "Açık (varsayılan): alt ajanlar ve ekip üyeleri — iç içe olanlar dahil — ana ajanla aynı istem lehçesini, yol argümanı çevirisini, sonuç yankısını ve DSH_PATH_DIALECT gerçeğini alır. Kapalı: bunlar yalnızca ana ajan için geçerlidir ve devredilen ajanlar resmî shell semantiğiyle çalışır (istem yeniden yazılmaz, yollar çevrilmez). Not: dsh'de süreç başına tek bir shell yürütücüsü vardır, bu yüzden Git Bash ikilisi genele aittir; bu anahtar lehçe/çeviri katmanlarını yönetir.",
|
|
719
774
|
"eol.label": "Git satır sonları (Linux gibi)",
|
|
720
775
|
"eol.hint": "Modelin çalıştırdığı git komutları Linux davranışını izler: core.autocrlf=input, core.eol=lf. Kendi terminaliniz ve deponun .gitattributes dosyası etkilenmez.",
|
|
721
776
|
"bash.label": "Git Bash yolu",
|
|
@@ -732,6 +787,7 @@ window.__ModuleLoader__.load({
|
|
|
732
787
|
"python.on": "Python (deneysel)",
|
|
733
788
|
"python.off": "Node / TypeScript (varsayılan)",
|
|
734
789
|
"python.hint": "Kapalıyken (varsayılan) run_code resmî Node/TypeScript arka ucunu kullanır ve gönderilen ptc bileşimiyle bayt bayt aynıdır; açıldığında dsh deneysel CPython arka ucuna (@deepseek-ai/dsh-experimental-ptc-runtime-python) geçer; run_code dil, üretilen SDK istemi ve sunum Python'a döner. POSIX ve CPython ≥ 3.10 gerektirir (Windows'ta kullanılamaz) ve workflow aracıyla birbirini dışlar — resmî Python bileşimi de workflow'u kapatır, bu yüzden bu açıkken dört varyantın workflow tarafı kapalı kalır (workflow ayarın korunur ve kapatınca geri gelir). Değişiklik dsh yeniden başlatıldıktan sonra geçerli olur; bu, dsh-ptc-cordis-preset kartındaki aynı anahtardır — iki taraf tek durumu paylaşır. Yalnızca dsh-ptc-cordis-preset kurulu olduğunda görünür. Açmak etkili olmazsa nedeni dsh başlangıç günlüğünde yazar.",
|
|
790
|
+
"python.degraded": "arka uç kullanılamıyor, hâlâ Node (neden dsh başlangıç günlüğünde)",
|
|
735
791
|
"python.blocked": "Bu ana makine Windows: deneysel Python arka ucu yalnızca POSIX destekler, bu anahtar kullanılamaz.",
|
|
736
792
|
},
|
|
737
793
|
/* locale: vi */
|
|
@@ -755,6 +811,8 @@ window.__ModuleLoader__.load({
|
|
|
755
811
|
"split.hint": "Pattern glob tuyệt đối tách thành path + pattern tương đối; tắt truyền nguyên văn.",
|
|
756
812
|
"code.label": "đường dẫn trong chương trình run_code",
|
|
757
813
|
"code.hint": "Chuỗi đường dẫn viết trong chương trình run_code được dịch qua cùng bảng mount trước khi chạy; chú thích, template nội suy, $VAR và chuỗi không phải đường dẫn được giữ nguyên, và mọi điểm không chắc chắn sẽ khiến cả chương trình không bị sửa. Đồng thời nạp TEMP/TMP cho chương trình: với env rỗng, os.tmpdir() trên Windows trả về undefined\\temp và ghi sai chỗ.",
|
|
814
|
+
"sub.label": "Subagent/thành viên nhóm dùng Git Bash",
|
|
815
|
+
"sub.hint": "Bật (mặc định): subagent và thành viên nhóm — kể cả lồng nhau — nhận cùng phương ngữ prompt, cách dịch đường dẫn trong tham số, tiếng vọng kết quả và sự thật DSH_PATH_DIALECT như agent chính. Tắt: những thứ này chỉ áp dụng cho agent chính, còn agent được ủy quyền chạy theo ngữ nghĩa shell chính thức (không viết lại prompt, không dịch đường dẫn). Lưu ý dsh chỉ có một bộ thực thi shell mỗi tiến trình, nên tệp nhị phân Git Bash vẫn là toàn cục; công tắc này điều khiển tầng phương ngữ/dịch.",
|
|
758
816
|
"eol.label": "kết thúc dòng Git (giống Linux)",
|
|
759
817
|
"eol.hint": "Các lệnh git do mô hình chạy theo hành vi Linux: core.autocrlf=input, core.eol=lf. Terminal của bạn và .gitattributes của repo không bị ảnh hưởng.",
|
|
760
818
|
"bash.label": "Đường dẫn Git Bash",
|
|
@@ -771,6 +829,7 @@ window.__ModuleLoader__.load({
|
|
|
771
829
|
"python.on": "Python (thử nghiệm)",
|
|
772
830
|
"python.off": "Node / TypeScript (mặc định)",
|
|
773
831
|
"python.hint": "Khi tắt (mặc định), run_code dùng backend Node/TypeScript chính thức, giống từng byte với tổ hợp ptc được phát hành; khi bật, dsh chuyển sang backend CPython thử nghiệm (@deepseek-ai/dsh-experimental-ptc-runtime-python), kéo theo ngôn ngữ, prompt SDK được sinh và cách trình bày của run_code chuyển sang Python. Yêu cầu POSIX và CPython ≥ 3.10 (không dùng được trên Windows) và loại trừ lẫn nhau với công cụ workflow — tổ hợp Python chính thức cũng tắt workflow, nên phía workflow của cả bốn biến thể bị tắt trong lúc bật (giá trị workflow của bạn được giữ và trở lại khi tắt). Thay đổi có hiệu lực sau khi khởi động lại dsh; đây chính là công tắc trên thẻ của dsh-ptc-cordis-preset — hai bên dùng chung một trạng thái. Chỉ hiện khi đã cài dsh-ptc-cordis-preset. Nếu bật mà không có hiệu lực, lý do nằm trong nhật ký khởi động dsh.",
|
|
832
|
+
"python.degraded": "backend không khả dụng, vẫn là Node (lý do trong nhật ký khởi động dsh)",
|
|
774
833
|
"python.blocked": "Máy chủ này là Windows: backend Python thử nghiệm chỉ hỗ trợ POSIX, nên công tắc này không dùng được.",
|
|
775
834
|
},
|
|
776
835
|
/* locale: zh-hk */
|
|
@@ -794,6 +853,8 @@ window.__ModuleLoader__.load({
|
|
|
794
853
|
"split.hint": "glob 嘅絕對 pattern 自動拆做 path + 相對 pattern;關閉就原樣傳遞。",
|
|
795
854
|
"code.label": "run_code 程式內路徑",
|
|
796
855
|
"code.hint": "run_code 程式內寫的 /c/... 路徑字面量會在執行前按同一張掛載表翻譯;註解、插值模板、$VAR 與非路徑字串不動,掃描有任何不確定就整份不改。 並為程式補上 TEMP/TMP:空 env 下 Windows 的 os.tmpdir() 會得到 undefined\\temp,程式會靜默寫錯位置。",
|
|
856
|
+
"sub.label": "子代理/隊員用 Git Bash",
|
|
857
|
+
"sub.hint": "預設開啟:子代理同團隊隊員(連嵌套)嘅提示詞方言、路徑參數翻譯、結果回顯同 DSH_PATH_DIALECT 環境事實都同主代理一致。閂咗就淨係主代理有,子代理跟官方 shell 語義行(提示詞唔改寫、路徑參數唔翻譯);留意 dsh 每個進程只有一個 shell 執行器,所以 Git Bash 本身仍然係全局嘅,呢個開關管嘅係方言/翻譯層。",
|
|
797
858
|
"eol.label": "Git 行尾(與 Linux 一致)",
|
|
798
859
|
"eol.hint": "模型執行的 git 指令採 Linux 行為:core.autocrlf=input、core.eol=lf。你自己終端的 git 與倉庫的 .gitattributes 都不受影響。",
|
|
799
860
|
"bash.label": "Git Bash 路徑",
|
|
@@ -810,6 +871,7 @@ window.__ModuleLoader__.load({
|
|
|
810
871
|
"python.on": "Python(實驗性)",
|
|
811
872
|
"python.off": "Node / TypeScript(預設)",
|
|
812
873
|
"python.hint": "閂咗(預設)嗰陣 run_code 用官方 Node/TypeScript 後端,同官方 ptc 組合逐位元組一致;開咗就轉用 dsh 實驗性 CPython 後端(@deepseek-ai/dsh-experimental-ptc-runtime-python),run_code 嘅語言、生成嘅 SDK 提示詞同工具呈現都會轉去 Python。需要 POSIX 平台同 CPython ≥ 3.10(Windows 用唔到),而且同 workflow 工具互斥——官方 Python 組合同樣停用 workflow,所以開住嗰陣本插件四個變體嘅 workflow 側會強制關閉(你嘅工作流設定值會保留,閂咗之後恢復)。改動要重啟 dsh 先生效;呢個開關就係 dsh-ptc-cordis-preset 設定卡上面同一個開關——兩邊共享同一份狀態。只喺已安裝 dsh-ptc-cordis-preset 時顯示。開咗之後唔生效,原因喺 dsh 啟動日誌度。",
|
|
874
|
+
"python.degraded": "後端用唔到,暫時仍然係 Node(原因喺 dsh 啟動日誌)",
|
|
813
875
|
"python.blocked": "呢部主機係 Windows:實驗性 Python 後端淨係支援 POSIX,所以呢個開關用唔到。",
|
|
814
876
|
},
|
|
815
877
|
/* locale: zh-mo */
|
|
@@ -833,6 +895,8 @@ window.__ModuleLoader__.load({
|
|
|
833
895
|
"split.hint": "glob 嘅絕對 pattern 自動拆做 path + 相對 pattern;關閉就原樣傳遞。",
|
|
834
896
|
"code.label": "run_code 程式內路徑",
|
|
835
897
|
"code.hint": "run_code 程式內寫的 /c/... 路徑字面量會在執行前按同一張掛載表翻譯;註解、插值模板、$VAR 與非路徑字串不動,掃描有任何不確定就整份不改。 並為程式補上 TEMP/TMP:空 env 下 Windows 的 os.tmpdir() 會得到 undefined\\temp,程式會靜默寫錯位置。",
|
|
898
|
+
"sub.label": "子代理/隊員用 Git Bash",
|
|
899
|
+
"sub.hint": "預設開啟:子代理同團隊隊員(連嵌套)嘅提示詞方言、路徑參數翻譯、結果回顯同 DSH_PATH_DIALECT 環境事實都同主代理一致。閂咗就淨係主代理有,子代理跟官方 shell 語義行(提示詞唔改寫、路徑參數唔翻譯);留意 dsh 每個進程只有一個 shell 執行器,所以 Git Bash 本身仍然係全局嘅,呢個開關管嘅係方言/翻譯層。",
|
|
836
900
|
"eol.label": "Git 行尾(與 Linux 一致)",
|
|
837
901
|
"eol.hint": "模型執行的 git 指令採 Linux 行為:core.autocrlf=input、core.eol=lf。你自己終端的 git 與倉庫的 .gitattributes 都不受影響。",
|
|
838
902
|
"bash.label": "Git Bash 路徑",
|
|
@@ -849,6 +913,7 @@ window.__ModuleLoader__.load({
|
|
|
849
913
|
"python.on": "Python(實驗性)",
|
|
850
914
|
"python.off": "Node / TypeScript(預設)",
|
|
851
915
|
"python.hint": "閂咗(預設)嗰陣 run_code 用官方 Node/TypeScript 後端,同官方 ptc 組合逐位元組一致;開咗就轉用 dsh 實驗性 CPython 後端(@deepseek-ai/dsh-experimental-ptc-runtime-python),run_code 嘅語言、生成嘅 SDK 提示詞同工具呈現都會轉去 Python。需要 POSIX 平台同 CPython ≥ 3.10(Windows 用唔到),而且同 workflow 工具互斥——官方 Python 組合同樣停用 workflow,所以開住嗰陣本插件四個變體嘅 workflow 側會強制關閉(你嘅工作流設定值會保留,閂咗之後恢復)。改動要重啟 dsh 先生效;呢個開關就係 dsh-ptc-cordis-preset 設定卡上面同一個開關——兩邊共享同一份狀態。只喺已安裝 dsh-ptc-cordis-preset 時顯示。開咗之後唔生效,原因喺 dsh 啟動日誌度。",
|
|
916
|
+
"python.degraded": "後端用唔到,暫時仍然係 Node(原因喺 dsh 啟動日誌)",
|
|
852
917
|
"python.blocked": "呢部主機係 Windows:實驗性 Python 後端淨係支援 POSIX,所以呢個開關用唔到。",
|
|
853
918
|
},
|
|
854
919
|
/* locale: zh-tw */
|
|
@@ -872,6 +937,8 @@ window.__ModuleLoader__.load({
|
|
|
872
937
|
"split.hint": "glob 的絕對 pattern 自動拆為 path + 相對 pattern;關閉則原樣傳遞。",
|
|
873
938
|
"code.label": "run_code 程式內路徑",
|
|
874
939
|
"code.hint": "run_code 程式內寫的 /c/... 路徑字面量會在執行前按同一張掛載表翻譯;註解、插值模板、$VAR 與非路徑字串不動,掃描有任何不確定就整份不改。 並為程式補上 TEMP/TMP:空 env 下 Windows 的 os.tmpdir() 會得到 undefined\\temp,程式會靜默寫錯位置。",
|
|
940
|
+
"sub.label": "子代理/隊員使用 Git Bash",
|
|
941
|
+
"sub.hint": "預設開啟:子代理與團隊隊員(含巢狀)的提示詞方言、路徑參數翻譯、結果回顯與 DSH_PATH_DIALECT 環境事實都與主代理一致。關閉後僅對主代理生效,子代理依官方 shell 語意執行(提示詞不改寫、路徑參數不翻譯);請注意 dsh 每個行程只有一個 shell 執行器,因此 Git Bash 本身仍是全域的,這個開關管的是方言/翻譯層。",
|
|
875
942
|
"eol.label": "Git 行尾(與 Linux 一致)",
|
|
876
943
|
"eol.hint": "模型執行的 git 指令採 Linux 行為:core.autocrlf=input、core.eol=lf。你自己終端的 git 與倉庫的 .gitattributes 都不受影響。",
|
|
877
944
|
"bash.label": "Git Bash 路徑",
|
|
@@ -888,6 +955,7 @@ window.__ModuleLoader__.load({
|
|
|
888
955
|
"python.on": "Python(實驗性)",
|
|
889
956
|
"python.off": "Node / TypeScript(預設)",
|
|
890
957
|
"python.hint": "關閉(預設)時 run_code 使用官方 Node/TypeScript 後端,與官方 ptc 組合逐位元組一致;開啟後改用 dsh 實驗性 CPython 後端(@deepseek-ai/dsh-experimental-ptc-runtime-python),run_code 的語言、產生的 SDK 提示詞與工具呈現都會切換到 Python。需要 POSIX 平台與 CPython ≥ 3.10(Windows 無法使用),且與 workflow 工具互斥——官方 Python 組合同樣會停用 workflow,因此開啟期間本外掛四個變體的 workflow 側強制關閉(你的工作流設定值會保留,關閉後恢復)。變更需重新啟動 dsh 後生效;這個開關就是 dsh-ptc-cordis-preset 設定卡上的同一個開關——兩側共用同一份狀態。僅在已安裝 dsh-ptc-cordis-preset 時顯示。若設為開啟後未生效,原因見 dsh 啟動日誌。",
|
|
958
|
+
"python.degraded": "後端無法使用,目前仍為 Node(原因見 dsh 啟動日誌)",
|
|
891
959
|
"python.blocked": "此主機是 Windows:實驗性 Python 後端僅支援 POSIX,因此這個開關無法使用。",
|
|
892
960
|
},
|
|
893
961
|
};
|
|
@@ -1176,6 +1244,9 @@ window.__ModuleLoader__.load({
|
|
|
1176
1244
|
var errs = snap.value.errorDialect !== false;
|
|
1177
1245
|
var splits = snap.value.globSplit !== false;
|
|
1178
1246
|
var codes = snap.value.codePaths !== false;
|
|
1247
|
+
// v0.27.0: delegated agents (subagents / team members / nested
|
|
1248
|
+
// children) participate in the dialect unless this is switched off.
|
|
1249
|
+
var subagents = snap.value.subagentDialect !== false;
|
|
1179
1250
|
var eolOn = snap.value.gitAutocrlf !== false;
|
|
1180
1251
|
var dedupe = snap.value.suppressPeerCordis === true;
|
|
1181
1252
|
|
|
@@ -1227,6 +1298,15 @@ window.__ModuleLoader__.load({
|
|
|
1227
1298
|
E("button", { type: "button", className: "gb-segBtn" + (!codes ? " gb-segActive" : ""), onClick: function () { if (codes) writeField("codePaths", false); } }, t("switch.off")),
|
|
1228
1299
|
),
|
|
1229
1300
|
E("p", { className: "gb-hint" }, t("code.hint")),
|
|
1301
|
+
E("div", { className: "gb-row" },
|
|
1302
|
+
E("span", { className: "gb-rowLabel" }, t("sub.label") + ":"),
|
|
1303
|
+
E("span", { className: "gb-rowValue" }, subagents ? t("state.on") : t("state.off")),
|
|
1304
|
+
),
|
|
1305
|
+
E("div", { className: "gb-seg" },
|
|
1306
|
+
E("button", { type: "button", className: "gb-segBtn" + (subagents ? " gb-segActive" : ""), onClick: function () { if (!subagents) writeField("subagentDialect", true); } }, t("switch.on")),
|
|
1307
|
+
E("button", { type: "button", className: "gb-segBtn" + (!subagents ? " gb-segActive" : ""), onClick: function () { if (subagents) writeField("subagentDialect", false); } }, t("switch.off")),
|
|
1308
|
+
),
|
|
1309
|
+
E("p", { className: "gb-hint" }, t("sub.hint")),
|
|
1230
1310
|
E("div", { className: "gb-row" },
|
|
1231
1311
|
E("span", { className: "gb-rowLabel" }, t("eol.label") + ":"),
|
|
1232
1312
|
E("span", { className: "gb-rowValue" }, eolOn ? t("state.on") : t("state.off")),
|
|
@@ -1300,6 +1380,13 @@ window.__ModuleLoader__.load({
|
|
|
1300
1380
|
&& typeof peerSnap.value === "object"
|
|
1301
1381
|
&& Object.prototype.hasOwnProperty.call(peerSnap.value, PEER_PYTHON_FIELD);
|
|
1302
1382
|
var pythonOn = pythonOffered && peerSnap.value[PEER_PYTHON_FIELD] === true;
|
|
1383
|
+
var peerPythonBackend = "";
|
|
1384
|
+
if (pythonOffered && typeof peerSnap.value[PEER_PYTHON_BACKEND_FIELD] === "string") {
|
|
1385
|
+
peerPythonBackend = peerSnap.value[PEER_PYTHON_BACKEND_FIELD];
|
|
1386
|
+
}
|
|
1387
|
+
/* Intent on + effective node = the user asked for Python and the host
|
|
1388
|
+
is still running Node behind the official rows. */
|
|
1389
|
+
var pythonDegraded = pythonOn && peerPythonBackend === "node";
|
|
1303
1390
|
function writePython(next) {
|
|
1304
1391
|
setError("");
|
|
1305
1392
|
if (peer === null || typeof peer.set !== "function") return;
|
|
@@ -1322,7 +1409,9 @@ window.__ModuleLoader__.load({
|
|
|
1322
1409
|
E("div", { className: "gb-stack" },
|
|
1323
1410
|
E("div", { className: "gb-row" },
|
|
1324
1411
|
E("span", { className: "gb-rowLabel" }, t("python.label") + ":"),
|
|
1325
|
-
E("span", { className: "gb-rowValue" }, pythonOn
|
|
1412
|
+
E("span", { className: "gb-rowValue" }, pythonOn
|
|
1413
|
+
? (pythonDegraded ? t("python.on") + " · " + t("python.degraded") : t("python.on"))
|
|
1414
|
+
: t("python.off")),
|
|
1326
1415
|
),
|
|
1327
1416
|
winHost ? null : E("div", { className: "gb-seg" },
|
|
1328
1417
|
E("button", { type: "button", className: "gb-segBtn" + (pythonOn ? " gb-segActive" : ""), onClick: function () { if (!pythonOn) writePython(true); } }, t("switch.on")),
|
|
@@ -1330,6 +1419,7 @@ window.__ModuleLoader__.load({
|
|
|
1330
1419
|
),
|
|
1331
1420
|
E("p", { className: "gb-hint" }, t("python.hint")),
|
|
1332
1421
|
winHost ? E("p", { className: "gb-error" }, t("python.blocked")) : null,
|
|
1422
|
+
pythonDegraded ? E("p", { className: "gb-error" }, t("python.degraded")) : null,
|
|
1333
1423
|
),
|
|
1334
1424
|
) : null;
|
|
1335
1425
|
|
package/src/compositions.js
CHANGED
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
* always off (the host executor is this plugin's shell.js — on non-Windows
|
|
14
14
|
* hosts that is the native stack anyway, which is exactly what the old
|
|
15
15
|
* materialized variants encoded). A second, conditional delta exists while
|
|
16
|
-
* dsh-ptc-cordis-preset reports its experimental-CPython
|
|
17
|
-
* workflow rows follow the official Python composition and go off (see
|
|
18
|
-
* `
|
|
19
|
-
* the official ones
|
|
16
|
+
* dsh-ptc-cordis-preset reports its experimental-CPython backend ACTIVE: the
|
|
17
|
+
* two workflow rows follow the official Python composition and go off (see
|
|
18
|
+
* `pythonActive` below). While that backend is off — the default, and also
|
|
19
|
+
* whenever the peer's preflight failed — the rows are the official ones
|
|
20
|
+
* unchanged.
|
|
20
21
|
*/
|
|
21
22
|
|
|
22
23
|
/** Default Git Bash binary — must match src/shell.js and the patch config. */
|
|
@@ -48,22 +49,25 @@ When ready, call exit_plan_mode with the complete plan markdown, starting with a
|
|
|
48
49
|
* @param {boolean} input.gitBash - bash rows always on, pwsh rows always off.
|
|
49
50
|
* @param {string|undefined} input.skillsDir - Creation authoring skills
|
|
50
51
|
* directory (cordis variant only; resolved beside the agent-preset package).
|
|
51
|
-
* @param {boolean} [input.
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
52
|
+
* @param {boolean} [input.pythonActive] - whether the experimental CPython
|
|
53
|
+
* backend is the one run_code will ACTUALLY use (the peer's effective
|
|
54
|
+
* backend, not the bare user intent: when its preflight fails the
|
|
55
|
+
* composition still runs Node and the workflow rows must stay live).
|
|
56
|
+
* `workflow-ptc` hard-requires `ctx.ptcRuntime.language === 'typescript'`
|
|
57
|
+
* (packages/workflow/workflow-ptc/src/index.ts:117) while the CPython
|
|
58
|
+
* backend reports 'python', and a throwing preset row rejects the WHOLE
|
|
59
|
+
* mount (agent-preset-registry mount.ts). The official Python composition
|
|
60
|
+
* disables both workflow rows for exactly this reason
|
|
61
|
+
* (snapshots/session/ptc-python-turn/cordis.yml), so while CPython is
|
|
62
|
+
* active every variant mirrors that: the two rows go off, the user's own
|
|
63
|
+
* workflow setting is untouched and returns once it is not.
|
|
60
64
|
* @returns {object[]} the declarative plugins list.
|
|
61
65
|
*/
|
|
62
|
-
export function pluginsFor({ kind, gitBash, skillsDir,
|
|
66
|
+
export function pluginsFor({ kind, gitBash, skillsDir, pythonActive = false }) {
|
|
63
67
|
const win = typeof process !== 'undefined' && process.platform === 'win32'
|
|
64
68
|
const bashDisabled = gitBash ? false : win
|
|
65
69
|
const pwshDisabled = gitBash ? true : !win
|
|
66
|
-
const workflowOn = kind !== 'ptc' &&
|
|
70
|
+
const workflowOn = kind !== 'ptc' && pythonActive !== true
|
|
67
71
|
const rows = [
|
|
68
72
|
{
|
|
69
73
|
id: 'persona',
|
package/src/index.js
CHANGED
|
@@ -104,15 +104,23 @@ export const PEER_COVERED_PRESET_ID = 'cordis-gitbash'
|
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
106
|
* Service dsh-ptc-cordis-preset publishes:
|
|
107
|
-
* `{ id, gitBashActive, pythonRuntime }`. `pythonRuntime`
|
|
108
|
-
*
|
|
109
|
-
*
|
|
107
|
+
* `{ id, gitBashActive, pythonRuntime, pythonBackend? }`. `pythonRuntime` is
|
|
108
|
+
* the user's INTENT for the experimental CPython run_code backend (the field
|
|
109
|
+
* the settings card writes); `pythonBackend` ('python' | 'node', v0.15.1+,
|
|
110
|
+
* additive) is the backend that is ACTUALLY active after the peer's own
|
|
111
|
+
* preflight — package resolvable, interpreter qualified, POSIX host.
|
|
110
112
|
*/
|
|
111
113
|
export const PEER_CAPABILITY = 'ptcCordisPreset'
|
|
112
114
|
|
|
113
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* The peer's CPython intent field — on its capability AND on its row Config
|
|
117
|
+
* (the field both settings cards read and write).
|
|
118
|
+
*/
|
|
114
119
|
export const PEER_PYTHON_FIELD = 'pythonRuntime'
|
|
115
120
|
|
|
121
|
+
/** The peer's EFFECTIVE backend field on the capability ('python' | 'node'). */
|
|
122
|
+
export const PEER_PYTHON_BACKEND_FIELD = 'pythonBackend'
|
|
123
|
+
|
|
116
124
|
/**
|
|
117
125
|
* Read one boolean fact off the peer's capability object. A getter is honoured
|
|
118
126
|
* so a live peer can report its current switch rather than a boot-time copy;
|
|
@@ -133,6 +141,90 @@ export function peerFact(capability, field) {
|
|
|
133
141
|
}
|
|
134
142
|
}
|
|
135
143
|
|
|
144
|
+
/**
|
|
145
|
+
* The peer's EFFECTIVE run_code backend, as the closed two-value vocabulary it
|
|
146
|
+
* publishes. `undefined` means "the peer does not report one" — an older peer,
|
|
147
|
+
* a getter that threw, or a value outside the vocabulary — and every caller
|
|
148
|
+
* must then fall back to the INTENT, which is the pre-v0.15.1 behavior.
|
|
149
|
+
* @param {object|undefined} capability - the peer's published capability.
|
|
150
|
+
* @returns {'python'|'node'|undefined} the reported backend.
|
|
151
|
+
*/
|
|
152
|
+
export function peerBackend(capability) {
|
|
153
|
+
if (capability === null || capability === undefined) return undefined
|
|
154
|
+
try {
|
|
155
|
+
const raw = capability[PEER_PYTHON_BACKEND_FIELD]
|
|
156
|
+
const value = typeof raw === 'function' ? raw.call(capability) : raw
|
|
157
|
+
return value === 'python' || value === 'node' ? value : undefined
|
|
158
|
+
} catch {
|
|
159
|
+
return undefined
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Is the experimental CPython backend ACTUALLY the one run_code will use? The
|
|
165
|
+
* composition's workflow mutex keys on this, never on the bare intent: when the
|
|
166
|
+
* peer's preflight fails (package removed, interpreter too old, win32) the
|
|
167
|
+
* composition still runs Node, so forcing the workflow rows off would cost the
|
|
168
|
+
* user a capability for nothing.
|
|
169
|
+
*
|
|
170
|
+
* An older peer without the effective field reports no backend, and the intent
|
|
171
|
+
* stands in for it — exactly the pre-v0.15.1 behavior, so the linkage never
|
|
172
|
+
* changes shape because a field is missing.
|
|
173
|
+
* @param {object|undefined} capability - the peer's published capability.
|
|
174
|
+
* @returns {boolean} true only while the CPython backend is the active one.
|
|
175
|
+
*/
|
|
176
|
+
export function pythonBackendActive(capability) {
|
|
177
|
+
const intent = peerFact(capability, PEER_PYTHON_FIELD)
|
|
178
|
+
const reported = peerBackend(capability)
|
|
179
|
+
if (reported === undefined) return intent
|
|
180
|
+
return intent && reported === 'python'
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Is this agent a DELEGATED one — a subagent, a team member, or a nested child
|
|
185
|
+
* of either? The canonical in-tree signal is the session header pair dsh's own
|
|
186
|
+
* workspace-changes plugin uses
|
|
187
|
+
* (`packages/deliverables/workspace-changes/src/index.ts:59-60`), stamped when
|
|
188
|
+
* the subagent driver creates a child
|
|
189
|
+
* (`packages/subagent/subagent/src/child-agent.ts:139-155`):
|
|
190
|
+
* `origin === 'subagent'` or a non-zero `delegationDepth`.
|
|
191
|
+
*
|
|
192
|
+
* Unknown shapes read as NOT delegated: applying the dialect is the helpful
|
|
193
|
+
* direction, and a diagnostic assembly without an agent must keep it.
|
|
194
|
+
* @param {object|undefined} agent - the assembling/executing agent, when known.
|
|
195
|
+
* @returns {boolean} true only when the agent is provably delegated.
|
|
196
|
+
*/
|
|
197
|
+
export function isDelegatedAgent(agent) {
|
|
198
|
+
try {
|
|
199
|
+
const header = agent && agent.session ? agent.session.header : undefined
|
|
200
|
+
if (header === null || typeof header !== 'object') return false
|
|
201
|
+
if (header.origin === 'subagent') return true
|
|
202
|
+
return typeof header.delegationDepth === 'number' && header.delegationDepth > 0
|
|
203
|
+
} catch {
|
|
204
|
+
return false
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Does the Git Bash dialect apply to THIS agent (v0.27.0)? The row switch
|
|
210
|
+
* `subagentDialect` (default ON) decides whether delegated agents — subagents,
|
|
211
|
+
* team members, nested children — participate in the dialect at all; the main
|
|
212
|
+
* agent always does. A closed function so every consumer (prompt assembly,
|
|
213
|
+
* dispatch translation, result echo, failure text, the shell-env fact) answers
|
|
214
|
+
* the same way.
|
|
215
|
+
*
|
|
216
|
+
* Note the honest bound: dsh has exactly ONE shell provider per process, so
|
|
217
|
+
* the executor binary stays Git Bash for every agent; this gate governs the
|
|
218
|
+
* dialect/translation layers that this plugin owns.
|
|
219
|
+
* @param {object} dialect - the live dialect switches.
|
|
220
|
+
* @param {object|undefined} agent - the agent that owns this assembly/execution.
|
|
221
|
+
* @returns {boolean} true when the dialect applies to this agent.
|
|
222
|
+
*/
|
|
223
|
+
export function dialectApplies(dialect, agent) {
|
|
224
|
+
if (!dialect || dialect.subagentDialect !== false) return true
|
|
225
|
+
return !isDelegatedAgent(agent)
|
|
226
|
+
}
|
|
227
|
+
|
|
136
228
|
/**
|
|
137
229
|
* The roster this plugin serves: the configured list, minus the variant a peer
|
|
138
230
|
* already covers. Two independent facts must BOTH hold before anything is
|
|
@@ -776,6 +868,15 @@ export const Config = Schema === null ? undefined : Schema.object({
|
|
|
776
868
|
globSplit: live(Schema.boolean().default(true)),
|
|
777
869
|
errorDialect: live(Schema.boolean().default(true)),
|
|
778
870
|
codePaths: live(Schema.boolean().default(true)),
|
|
871
|
+
/**
|
|
872
|
+
* Whether DELEGATED agents (subagents, team members, nested children) also
|
|
873
|
+
* use the Git Bash dialect (v0.27.0). Default ON — the historical behavior;
|
|
874
|
+
* OFF keeps the dialect to the main agent, so a delegated request carries the
|
|
875
|
+
* official shell semantics (no prompt rewrite, no path-argument translation,
|
|
876
|
+
* no echo rewrite, no DSH_PATH_DIALECT fact). The executor itself is one
|
|
877
|
+
* per-process provider, so Git Bash stays the binary either way.
|
|
878
|
+
*/
|
|
879
|
+
subagentDialect: live(Schema.boolean().default(true)),
|
|
779
880
|
gitAutocrlf: live(Schema.boolean().default(true)),
|
|
780
881
|
bashPath: live(Schema.string().default('')),
|
|
781
882
|
adoptSidebar: live(Schema.boolean().default(true)),
|
|
@@ -822,6 +923,8 @@ function makeLiveReader(ctx, config) {
|
|
|
822
923
|
errorDialect: valueOf(config.errorDialect) === true,
|
|
823
924
|
codePaths: valueOf(config.codePaths) === true,
|
|
824
925
|
gitAutocrlf: valueOf(config.gitAutocrlf) === true,
|
|
926
|
+
// Default ON: delegated agents keep the dialect unless the user opts out.
|
|
927
|
+
subagentDialect: valueOf(config.subagentDialect) !== false,
|
|
825
928
|
bashPath: typeof bash === 'string' ? bash : '',
|
|
826
929
|
adoptSidebar: valueOf(config.adoptSidebar) !== false,
|
|
827
930
|
}
|
|
@@ -896,7 +999,7 @@ export function readPosixPaths(ctxLike) {
|
|
|
896
999
|
* first. All default ON (schema defaults); never throws.
|
|
897
1000
|
*/
|
|
898
1001
|
export function readDialectSettings(ctxLike) {
|
|
899
|
-
const fallback = { posixPaths: false, virtualMounts: false, globSplit: false, errorDialect: false, codePaths: false, gitAutocrlf: false, bashPath: '' }
|
|
1002
|
+
const fallback = { posixPaths: false, virtualMounts: false, globSplit: false, errorDialect: false, codePaths: false, gitAutocrlf: false, bashPath: '', subagentDialect: true }
|
|
900
1003
|
try {
|
|
901
1004
|
const settings = ctxLike && typeof ctxLike.get === 'function' ? ctxLike.get('settings') : undefined
|
|
902
1005
|
const value = settings && typeof settings.get === 'function' ? settings.get(SETTINGS_NAMESPACE) : undefined
|
|
@@ -907,6 +1010,8 @@ export function readDialectSettings(ctxLike) {
|
|
|
907
1010
|
globSplit: v.globSplit === true,
|
|
908
1011
|
errorDialect: v.errorDialect === true,
|
|
909
1012
|
codePaths: v.codePaths === true,
|
|
1013
|
+
// An old host without the key keeps the default (delegated agents covered).
|
|
1014
|
+
subagentDialect: v.subagentDialect !== false,
|
|
910
1015
|
gitAutocrlf: v.gitAutocrlf === true,
|
|
911
1016
|
bashPath: typeof v.bashPath === 'string' ? v.bashPath : '',
|
|
912
1017
|
}
|
|
@@ -2057,12 +2162,12 @@ function cleanupLegacyTrees(presetIds) {
|
|
|
2057
2162
|
* failures stay visible through the roster's broken diagnostic instead of
|
|
2058
2163
|
* failing the boot.
|
|
2059
2164
|
*/
|
|
2060
|
-
async function registerVariant(ctx, presetId, { gitBashActive, skillsDir,
|
|
2165
|
+
async function registerVariant(ctx, presetId, { gitBashActive, skillsDir, pythonActive }) {
|
|
2061
2166
|
const meta = PRESET_META[presetId]
|
|
2062
2167
|
if (!meta) return undefined
|
|
2063
2168
|
const plugins = meta.kind === 'minimal'
|
|
2064
2169
|
? minimalPluginsFor()
|
|
2065
|
-
: pluginsFor({ kind: meta.kind, gitBash: gitBashActive, skillsDir,
|
|
2170
|
+
: pluginsFor({ kind: meta.kind, gitBash: gitBashActive, skillsDir, pythonActive })
|
|
2066
2171
|
return ctx.agentPresets.register({
|
|
2067
2172
|
id: presetId,
|
|
2068
2173
|
name: meta.name,
|
|
@@ -2077,10 +2182,11 @@ async function registerVariant(ctx, presetId, { gitBashActive, skillsDir, python
|
|
|
2077
2182
|
* SHOULD SERVE for the plugin's lifetime, and re-reconcile whenever that set
|
|
2078
2183
|
* changes. Three inputs drive it — the live `suppressPeerCordis` switch, the
|
|
2079
2184
|
* peer capability appearing (or leaving) via `ctx.inject`, which fires
|
|
2080
|
-
* independent of row activation order, and the peer's
|
|
2081
|
-
*
|
|
2082
|
-
* peer
|
|
2083
|
-
*
|
|
2185
|
+
* independent of row activation order, and the peer's EFFECTIVE CPython
|
|
2186
|
+
* backend (`pythonBackend`, falling back to the `pythonRuntime` intent on a
|
|
2187
|
+
* peer that does not report one), which changes the ROWS of every variant —
|
|
2188
|
+
* and the peer's own coverage only counts while it reports a Git Bash-
|
|
2189
|
+
* materialized preset.
|
|
2084
2190
|
*
|
|
2085
2191
|
* The roster picks entries up immediately; sessions already pinned to a
|
|
2086
2192
|
* variant keep their revision until recomposed, so suppressing a variant never
|
|
@@ -2107,17 +2213,19 @@ async function runDeclarativeEra(ctx, presetIds, readSuppress) {
|
|
|
2107
2213
|
const reconcile = () => {
|
|
2108
2214
|
serial = serial.then(async () => {
|
|
2109
2215
|
const want = desired()
|
|
2110
|
-
// The peer's CPython
|
|
2111
|
-
// (the official Python composition disables them, and
|
|
2112
|
-
// refuses a non-TypeScript backend), so a flip re-registers
|
|
2113
|
-
// variants instead of leaving stale rows mounted. Same cadence
|
|
2114
|
-
// backend swap itself: the peer's patch is evaluated at boot.
|
|
2216
|
+
// The peer's EFFECTIVE CPython backend rewrites the workflow rows of
|
|
2217
|
+
// EVERY variant (the official Python composition disables them, and
|
|
2218
|
+
// workflow-ptc refuses a non-TypeScript backend), so a flip re-registers
|
|
2219
|
+
// the live variants instead of leaving stale rows mounted. Same cadence
|
|
2220
|
+
// as the backend swap itself: the peer's patch is evaluated at boot. A
|
|
2221
|
+
// bare INTENT without the effective backend changes nothing here — the
|
|
2222
|
+
// composition still runs Node, so the workflow rows must stay live.
|
|
2115
2223
|
if (live.size > 0 && registeredPython !== peerPython) {
|
|
2116
2224
|
for (const [presetId, off] of [...live]) {
|
|
2117
2225
|
live.delete(presetId)
|
|
2118
2226
|
try {
|
|
2119
2227
|
await off()
|
|
2120
|
-
console.log(TAG + " preset '" + presetId + "' retired (peer CPython
|
|
2228
|
+
console.log(TAG + " preset '" + presetId + "' retired (peer CPython backend changed; rows are rebuilt)")
|
|
2121
2229
|
} catch (error) {
|
|
2122
2230
|
console.log(TAG + " preset '" + presetId + "' retirement failed: " + (error && error.message ? error.message : error))
|
|
2123
2231
|
}
|
|
@@ -2136,7 +2244,7 @@ async function runDeclarativeEra(ctx, presetIds, readSuppress) {
|
|
|
2136
2244
|
for (const presetId of want) {
|
|
2137
2245
|
if (live.has(presetId)) continue
|
|
2138
2246
|
try {
|
|
2139
|
-
const unregister = await registerVariant(ctx, presetId, { gitBashActive, skillsDir,
|
|
2247
|
+
const unregister = await registerVariant(ctx, presetId, { gitBashActive, skillsDir, pythonActive: peerPython })
|
|
2140
2248
|
if (unregister) {
|
|
2141
2249
|
live.set(presetId, unregister)
|
|
2142
2250
|
console.log(TAG + " preset '" + presetId + "' registered declaratively")
|
|
@@ -2163,11 +2271,21 @@ async function runDeclarativeEra(ctx, presetIds, readSuppress) {
|
|
|
2163
2271
|
try {
|
|
2164
2272
|
const coverage = peerCtx[PEER_CAPABILITY] ?? peerCtx.get(PEER_CAPABILITY)
|
|
2165
2273
|
const nextGitBash = peerFact(coverage, 'gitBashActive')
|
|
2166
|
-
|
|
2274
|
+
// INTENT (what the user asked for) vs EFFECTIVE (what run_code will
|
|
2275
|
+
// actually use). Only the effective fact may cost the user a variant's
|
|
2276
|
+
// workflow rows; the intent alone is reported, never acted on.
|
|
2277
|
+
const intentPython = peerFact(coverage, PEER_PYTHON_FIELD)
|
|
2278
|
+
const reportedBackend = peerBackend(coverage)
|
|
2279
|
+
const nextPython = pythonBackendActive(coverage)
|
|
2167
2280
|
if (nextGitBash !== peerGitBash || nextPython !== peerPython) {
|
|
2168
2281
|
peerGitBash = nextGitBash
|
|
2169
2282
|
peerPython = nextPython
|
|
2170
2283
|
if (nextPython) console.log(TAG + ' peer reports the experimental CPython run_code backend: workflow rows go off in every variant')
|
|
2284
|
+
else if (intentPython) {
|
|
2285
|
+
console.log(TAG + ' peer has the CPython switch on but the effective backend is '
|
|
2286
|
+
+ (reportedBackend === undefined ? 'unreported (older peer: the intent stands in)' : reportedBackend)
|
|
2287
|
+
+ ': workflow rows stay on (reason in the host log)')
|
|
2288
|
+
}
|
|
2171
2289
|
void reconcile()
|
|
2172
2290
|
}
|
|
2173
2291
|
} catch (error) {
|
|
@@ -2276,6 +2394,7 @@ export async function apply(ctx, config = {}) {
|
|
|
2276
2394
|
globSplit: Schema.boolean().default(true),
|
|
2277
2395
|
errorDialect: Schema.boolean().default(true),
|
|
2278
2396
|
codePaths: Schema.boolean().default(true),
|
|
2397
|
+
subagentDialect: Schema.boolean().default(true),
|
|
2279
2398
|
gitAutocrlf: Schema.boolean().default(true),
|
|
2280
2399
|
bashPath: Schema.string().default(''),
|
|
2281
2400
|
adoptSidebar: Schema.boolean().default(true),
|
|
@@ -2331,8 +2450,17 @@ export async function apply(ctx, config = {}) {
|
|
|
2331
2450
|
// git line endings and anything else non-DSH_* ride the executor's
|
|
2332
2451
|
// own env layer (src/shell.js), not this registry.
|
|
2333
2452
|
variables: { [PATH_DIALECT_KEY]: { description: PATH_DIALECT_DESCRIPTION } },
|
|
2334
|
-
resolve() {
|
|
2335
|
-
|
|
2453
|
+
resolve(execution) {
|
|
2454
|
+
try {
|
|
2455
|
+
const dialect = liveSettings.dialect()
|
|
2456
|
+
if (dialect.posixPaths !== true) return {}
|
|
2457
|
+
// The environment fact is per execution, so a delegated agent
|
|
2458
|
+
// the user excluded sees no DSH_PATH_DIALECT at all.
|
|
2459
|
+
if (!dialectApplies(dialect, execution && execution.agent)) return {}
|
|
2460
|
+
return { [PATH_DIALECT_KEY]: PATH_DIALECT_VALUE }
|
|
2461
|
+
} catch {
|
|
2462
|
+
return {}
|
|
2463
|
+
}
|
|
2336
2464
|
},
|
|
2337
2465
|
})
|
|
2338
2466
|
envCtx.effect(() => unregister, 'dsh-gitbash-shell: shellEnv path-dialect fact')
|
|
@@ -2358,9 +2486,16 @@ export async function apply(ctx, config = {}) {
|
|
|
2358
2486
|
// could corrupt pattern/default fields).
|
|
2359
2487
|
if (process.platform === 'win32') {
|
|
2360
2488
|
try {
|
|
2361
|
-
ctx.on('system-prompt/assemble', (assembly,
|
|
2489
|
+
ctx.on('system-prompt/assemble', (assembly, assembleContext, next) => {
|
|
2362
2490
|
try {
|
|
2363
|
-
|
|
2491
|
+
/* v0.27.0: the main agent always participates; a DELEGATED agent
|
|
2492
|
+
(subagent / team member / nested child) only while the
|
|
2493
|
+
`subagentDialect` switch is on. Turning it off leaves the official
|
|
2494
|
+
prompt text untouched for those agents — no source replacement and
|
|
2495
|
+
no run_code hint — so they meet the shell they were composed for. */
|
|
2496
|
+
const dialect = liveSettings.dialect()
|
|
2497
|
+
const applies = dialectApplies(dialect, assembleContext && assembleContext.agent)
|
|
2498
|
+
if (applies && dialect.posixPaths === true && assembly && typeof assembly === 'object') {
|
|
2364
2499
|
for (const section of Array.isArray(assembly.sections) ? assembly.sections : []) {
|
|
2365
2500
|
if (section && typeof section.text === 'string') section.text = windowsToMsys(section.text)
|
|
2366
2501
|
}
|
|
@@ -2431,7 +2566,10 @@ export async function apply(ctx, config = {}) {
|
|
|
2431
2566
|
// `bash.workdir` went through raw, and an in-workspace `/c/...` write
|
|
2432
2567
|
// fell outside the sandbox. One missed call site, five symptoms.
|
|
2433
2568
|
const dialect = liveSettings.dialect()
|
|
2434
|
-
|
|
2569
|
+
// v0.27.0: a delegated agent the user excluded keeps the official
|
|
2570
|
+
// semantics for BOTH faces of its calls — arguments go through
|
|
2571
|
+
// untouched and the result metadata is not echoed back in MSYS form.
|
|
2572
|
+
if (dialect.posixPaths && dialectApplies(dialect, exec && exec.agent)) {
|
|
2435
2573
|
echo = true
|
|
2436
2574
|
const env = dialect.virtualMounts ? buildTranslateEnv(dialect.bashPath) : null
|
|
2437
2575
|
echoEnv = env
|
|
@@ -2482,6 +2620,10 @@ export async function apply(ctx, config = {}) {
|
|
|
2482
2620
|
let contentPatch
|
|
2483
2621
|
try {
|
|
2484
2622
|
const dialect = liveSettings.dialect()
|
|
2623
|
+
// Same agent gate as the dispatch wrapper: one call, one dialect.
|
|
2624
|
+
// RETURN the downstream promise: a waterfall listener that swallows
|
|
2625
|
+
// it would hand the caller `undefined` instead of the decision.
|
|
2626
|
+
if (!dialectApplies(dialect, exec && exec.agent)) return next()
|
|
2485
2627
|
if (dialect.posixPaths && dialect.errorDialect && exec && result && typeof result === 'object'
|
|
2486
2628
|
&& result.isError === true && Array.isArray(result.content)) {
|
|
2487
2629
|
const env = dialect.virtualMounts ? buildTranslateEnv(dialect.bashPath) : null
|
|
@@ -2528,10 +2670,14 @@ export async function apply(ctx, config = {}) {
|
|
|
2528
2670
|
pctx.effect(() => pctx.systemPrompt.context({
|
|
2529
2671
|
name: 'gitbash-shell:posix-paths',
|
|
2530
2672
|
order: 126,
|
|
2531
|
-
text: () => {
|
|
2673
|
+
text: (assembleContext) => {
|
|
2532
2674
|
try {
|
|
2533
2675
|
const dialect = liveSettings.dialect()
|
|
2534
2676
|
if (dialect.posixPaths !== true) return ''
|
|
2677
|
+
// A delegated agent whose dialect the user turned off meets the
|
|
2678
|
+
// official shell semantics: no directive, the same way no
|
|
2679
|
+
// translation happens for its calls.
|
|
2680
|
+
if (!dialectApplies(dialect, assembleContext && assembleContext.agent)) return ''
|
|
2535
2681
|
return dialect.virtualMounts === false ? POSIX_DIRECTIVE_TEXT_STRICT : POSIX_DIRECTIVE_TEXT
|
|
2536
2682
|
} catch {
|
|
2537
2683
|
return ''
|
|
@@ -2657,4 +2803,4 @@ export async function apply(ctx, config = {}) {
|
|
|
2657
2803
|
}
|
|
2658
2804
|
|
|
2659
2805
|
// Test surface: pure helpers, no Cordis context required.
|
|
2660
|
-
export const _internal = { PRESET_IDS, PEER_COVERED_PRESET_ID, PEER_CAPABILITY, PEER_PYTHON_FIELD, peerFact, effectivePresetIds, detectPeerCoverage, readSuppressPeerCordis, translateDispatch, translateMsysPath, translatePathArguments, rewriteCodePaths, scanCodeLiterals, programPrelude, translateGlobArguments, buildTranslateEnv, rewriteErrorContent, rewriteErrorMessage, rewriteFailureMessage, msysEcho, driveToMsys, pathEcho, ERROR_CONTENT_TOOLS, readPosixPaths, readAdoptSidebar, readDialectSettings, windowsToMsys, rewriteResultPaths, adoptSidebarShell, MARKER_FILE, classify, materialize, cleanupOnDispose, firstUserRoot, hashTree, skillsHashes, syncDecision, installRegisterShim, baseForRoster, detectBase, pickComposition, personaEraForText, detectPersonaEra, injectPresentRow, hostHasToolPresent, detectPresentSupport, injectPluginManagerRow, hostHasPluginManagerTools, rowFormOf, rowFormsOf, alignEngineRow, alignRalphRow, ROW_SOURCE }
|
|
2806
|
+
export const _internal = { PRESET_IDS, PEER_COVERED_PRESET_ID, PEER_CAPABILITY, isDelegatedAgent, dialectApplies, PEER_PYTHON_FIELD, PEER_PYTHON_BACKEND_FIELD, peerFact, peerBackend, pythonBackendActive, effectivePresetIds, detectPeerCoverage, readSuppressPeerCordis, translateDispatch, translateMsysPath, translatePathArguments, rewriteCodePaths, scanCodeLiterals, programPrelude, translateGlobArguments, buildTranslateEnv, rewriteErrorContent, rewriteErrorMessage, rewriteFailureMessage, msysEcho, driveToMsys, pathEcho, ERROR_CONTENT_TOOLS, readPosixPaths, readAdoptSidebar, readDialectSettings, windowsToMsys, rewriteResultPaths, adoptSidebarShell, MARKER_FILE, classify, materialize, cleanupOnDispose, firstUserRoot, hashTree, skillsHashes, syncDecision, installRegisterShim, baseForRoster, detectBase, pickComposition, personaEraForText, detectPersonaEra, injectPresentRow, hostHasToolPresent, detectPresentSupport, injectPluginManagerRow, hostHasPluginManagerTools, rowFormOf, rowFormsOf, alignEngineRow, alignRalphRow, ROW_SOURCE }
|