Skip to content
dsh.fish
Bundle

dsh-tool-pwsh-safe

Elbow-proof PowerShell for DeepSeek Harness: run multiline pwsh scripts via -EncodedCommand, immune to quoting/escaping pain.

Source
sryimnoob123
stars
1 stars
License
MIT
Updated
Updated 13 days ago

Readme

# 🥊 dsh-tool-pwsh-safe

> **你是否见过 dsh 疯狂肘击 PowerShell?**

单引号、双引号、反斜杠、`$` 展开、反引号、换行、中文……
每个 AI agent 都曾在 PowerShell 转义地狱里被肘击到怀疑人生。

![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)

## 这是什么

`dsh-tool-pwsh-safe` 是一个 DSH 工具插件:模型要跑 PowerShell 时,把整个脚本**原样**交给我,剩下的转义问题我来扛。

```text
你的脚本(多行随便写)
   ↓
base64 编码(纯 ASCII,引号/$/反斜杠全部变安全字符)
   ↓
走 DSH 沙箱化 pwsh 执行器(ctx.shell,和内置 pwsh 同一条通道)
   ↓
结果带沙箱标记 / 完整输出 spill 落盘路径 / 退出码
```

## 对比:肘击 vs 不肘击

| 场景 | 内置 pwsh 的日常 | pwsh_safe |
| --- | --- | --- |
| 想输出 `他说:"你好"` | 转义套转义,祈祷能跑 | 原样写,原样跑 |
| 多行脚本 | 每行拼接、层层转义 | 整段直接贴 |
| `$env:PATH -replace ';',';'` | 连环事故 | 没事发生 |
| 中文输出 | 乱码/编码错误 | UTF-8 编码,稳 |

## 特性

- 走 **DSH 沙箱通道**:和内置 `pwsh` 工具同一执行器,沙箱策略 / ConstrainedLanguage / 权限升级全部生效
- **长输出自动 spill**:超限不丢,完整输出落盘并报告路径
- **超时保护**:默认 120s,可自定义
- **脚本长度守卫**:脚本转 base64 后超过 24000 字符会直接报错提示拆分,避免撞上 Windows 命令行 32KB 上限
- **结果规范化**:执行器返回形状异常时也会被归一化,不会因缺字段崩渲染
- **中文友好**:UTF-8 全链路
- **零依赖**:无 @deepseek-ai 依赖,纯 Node 内置

## 安装

```bash
cd $DSH_HOME/profiles/<你的profile>
pnpm add dsh-tool-pwsh-safe@github:sryimnoob123/dsh-tool-pwsh-safe
# 或本地开发:pnpm add link:/绝对路径/dsh-tool-pwsh-safe
```

然后把它加进 profile 的 `package.json` bundles 列表,重启 DSH。

## 使用

```json
{
  "script": "Write-Host \"这是中文 + 引号 + $env:USERNAME\"; Get-Location",
  "description": "演示转义免疫"
}
```

## 配置

| 参数 | 默认 | 说明 |
| --- | --- | --- |
| `script` | (必填) | 完整 PowerShell 脚本,多行随便 |
| `description` | (必填) | 一句话说明(UI 显示用) |
| `workdir` | 会话工作目录 | 脚本工作目录 |
| `timeoutMs` | 120000 | 超时自动 kill |

## License

MIT

Install

dsh plugin --profile web add github:sryimnoob123/dsh-tool-pwsh-safe

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source