Bundle
dsh-vpn-ops
Safety-gated WireGuard and VLESS Reality operations for DeepSeek Harness
- Source
- zootguru
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# dsh-vpn-ops
[简体中文](README.zh-CN.md)
Safety-gated WireGuard and VLESS Reality operations for
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH).
`dsh-vpn-ops` is a real DSH bundle: it ships `cordis.patch.yml`, exports a Cordis
`apply(ctx, config)` lifecycle entry point, and registers eight typed tools. It
turns a reviewed, allowlisted server definition into repeatable preflight,
plan, apply, status, verification, rollback, and client-export operations.
> Status: `0.1.0` initial public release. The bundle load path is verified against
> DSH `0.1.1-rc.2`; production network rollout still requires an operator-owned
> staging server and acceptance test. See [Compatibility](#compatibility) and
> [Limitations](#limitations).
## Why this is not “SSH from the model”
The model can choose only a configured `targetId` and `clientId`. It cannot
supply a host, credential, remote path, package URL, or shell command.
- Strict host-key checking and public-key-only SSH are mandatory.
- Every process is spawned with an argv array; no local shell is used.
- Remote work runs a fixed helper shipped in the reviewed package.
- Remote mutation defaults to off.
- `vpn_apply` requires a fresh, persisted plan, an unchanged remote baseline,
and the exact confirmation string returned by `vpn_plan`.
- Apply writes backups before the first managed-file change and automatically
restores them if the transaction fails.
- Client secrets are never returned as tool values. Explicit export streams
them into new local mode-`0600` files and returns only paths, sizes, and
SHA-256 evidence.
- The npm package has no `preinstall`, `install`, `postinstall`, `prepare`, or
`prepack` lifecycle script.
Read the complete [threat model](docs/THREAT_MODEL.md) before enabling changes.
## Tools
| Tool | Changes state | Gate |
| --- | --- | --- |
| `vpn_targets` | No | None |
| `vpn_preflight` | No | Allowlisted target |
| `vpn_status` | No | Allowlisted target |
| `vpn_plan` | Local non-secret plan file | Preflight must pass |
| `vpn_apply` | Yes, remote | `allowMutations`, fresh plan, exact confirmation |
| `vpn_verify` | No | Allowlisted target |
| `vpn_rollback` | Yes, remote | `allowMutations`, backup id, exact confirmation |
| `vpn_export_client` | Yes, local secret files | `allowSecretExport`, exact confirmation |
## Target prerequisites
The first release intentionally does not install operating-system packages or
download Xray. Supply-chain policy remains with the server operator.
The target must be Debian or Ubuntu with systemd and these commands already
available:
```text
base64 flock install ip iptables jq mktemp openssl sha256sum ss sysctl systemctl
uuidgen wg wg-quick xray
```
The configured `xrayBinary` may point to a non-PATH installation. The SSH user
must be root, or `sudo: true` must provide non-interactive root authority.
Treat either credential as root-equivalent and keep it dedicated.
Before deployment, verify that:
1. UDP `wireguardListenPort` and TCP `vlessPort` are allowed by the provider and
host firewalls.
2. `publicInterface` is the actual egress interface.
3. The REALITY `realityDestination` and `realityServerName` are suitable and
under an acceptable abuse policy. Unauthenticated REALITY traffic is
forwarded to the target; see the Xray documentation warning.
4. Xray accepts `network: "raw"`, the `target` REALITY field, and
`xtls-rprx-vision` in a dry-run configuration test.
5. The operator has an independent recovery channel such as a cloud serial
console.
## Install
### GitHub release
Install a tagged release into an existing DSH profile:
```sh
dsh plugin --profile my-profile add github:zootguru/dsh-vpn-ops#v0.1.0
```
The repository commits built `lib/` artifacts, so a Git install does not run a
build lifecycle hook.
### Local, reproducible tarball
```sh
pnpm install --frozen-lockfile
pnpm verify
pnpm pack --pack-destination ./artifacts
dsh plugin --profile my-profile add ./artifacts/dsh-vpn-ops-0.1.0.tgz
```
## Configure
The bundle installs a disabled `vpn-ops` row. Override that row in the profile's
user `cordis.patch.yml`:
```yaml
- id: vpn-ops
config:
# Keep false until a reviewed vpn_plan is ready to execute.
allowMutations: false
# Enable only for an operator-approved client export session.
allowSecretExport: false
stateDirectory: /Users/operator/.local/state/dsh-vpn-ops
connectTimeoutSeconds: 10
commandTimeoutMs: 120000
maxOutputBytes: 65536
planTtlSeconds: 900
targets:
- id: la-edge
host: vpn.example.net
user: root
sshPort: 22
identityFile: /Users/operator/.ssh/dsh-vpn-ops_ed25519
knownHostsFile: /Users/operator/.ssh/dsh-vpn-ops_known_hosts
sudo: false
publicEndpoint: vpn.example.net
publicInterface: eth0
remoteStateDirectory: /var/lib/dsh-vpn-ops
wireguardInterface: wg0
wireguardAddress: 10.66.66.1/24
wireguardListenPort: 51820
wireguardConfigPath: /etc/wireguard/wg0.conf
wireguardService: wg-quick@wg0
clientDns: 1.1.1.1
clientMtu: 1420
vlessListenAddress: 0.0.0.0
vlessPort: 443
realityServerName: www.example.com
realityDestination: www.example.com:443
xrayBinary: /usr/local/bin/xray
xrayConfigPath: /usr/local/etc/xray/config.json
xrayService: xray
sysctlConfigPath: /etc/sysctl.d/99-dsh-vpn-ops.conf
clients:
- id: laptop
wireguardAddress: 10.66.66.2/32
- id: phone
wireguardAddress: 10.66.66.3/32
```
`identityFile` must be a regular file inaccessible to group and others.
`knownHostsFile` must be non-empty. Obtain the host key through the provider or
another authenticated channel; do not trust an unverified `ssh-keyscan` result.
No example contains a real server address, UUID, private key, or client config.
## Operate
Use this order:
1. `vpn_targets`
2. `vpn_preflight({ targetId: "la-edge" })`
3. `vpn_status({ targetId: "la-edge" })`
4. `vpn_plan({ targetId: "la-edge" })`
5. Review every change, the baseline deployment id, and the managed-state
fingerprint. Any managed-file or service-state drift invalidates the plan.
6. Set `allowMutations: true`, let DSH reload the plugin, and call `vpn_apply`
with the exact plan id and confirmation returned in step 4.
7. Read the returned backup id and verification result. A missing first
handshake is informational; invalid configuration, inactive services, or
closed listeners makes verification fail.
8. Set `allowMutations: false` again.
To export a configured client, temporarily enable `allowSecretExport`, obtain
explicit operator approval for `EXPORT <targetId> <clientId>`, call
`vpn_export_client`, move the generated files into an approved secret channel,
then disable export and remove the local copies when no longer needed.
Rollback requires the exact `backupId` and confirmation
`ROLLBACK <targetId> <backupId>`.
## What apply manages
- WireGuard server and per-client X25519 keys.
- VLESS UUIDs and REALITY key material.
- WireGuard server configuration and client profiles.
- Xray VLESS + REALITY inbound configuration.
- IPv4 forwarding sysctl configuration.
- Service enable/restart for the configured WireGuard and Xray units.
- Per-apply backups and a current deployment marker under
`remoteStateDirectory`.
Keys are generated on the target and remain under
`remoteStateDirectory/secrets` with restrictive permissions. Existing managed
keys are reused so repeated applies do not silently invalidate clients.
## Compatibility
| Component | Verified contract |
| --- | --- |
| DeepSeek Harness | `0.1.1-rc.2` |
| `@deepseek-ai/dsh-tools` | `0.1.1-rc.2` exact peer |
| `@deepseek-ai/cordis` | `4.0.1` exact peer |
| Node.js | `^22.19.0` or `>=24.0.0` |
| Remote OS | Debian / Ubuntu with systemd |
| Xray configuration | Current `target`, `password`, and `raw` terminology; runtime preflight and dry-run required |
DSH is a developer preview and may make breaking changes. Compatibility is an
evidence statement, not a broad semver promise. The exact clean-profile
procedure and results live in [Verification](docs/VERIFICATION.md).
## Limitations
- No package installation, firewall-provider API, DNS update, cloud console, or
certificate management.
- IPv4 WireGuard topology only; no IPv6 forwarding.
- Full-tunnel clients only (`AllowedIPs = 0.0.0.0/0`).
- One WireGuard interface and one VLESS Reality inbound per target.
- Service health and local listeners are verified; an end-to-end test from an
independent external network remains the operator's responsibility.
- Client export writes secret material to the DSH host. The plugin does not send
it to email, chat, cloud storage, or the model.
- Rollback covers managed configuration, client artifacts, sysctl, and prior
service activity. It cannot reverse external firewall, provider, DNS, or
routing changes because it never performs them.
## Uninstall
Disable mutations, remove the bundle, and inspect the target manually before
deleting remote state:
```sh
dsh plugin --profile my-profile remove dsh-vpn-ops
```
Uninstall intentionally does not delete remote configuration, keys, backups, or
client files.
## Development and evidence
```sh
pnpm install --frozen-lockfile
pnpm test:coverage
pnpm verify
```
The repository publishes:
- a lockfile and exact DSH compatibility peers;
- TypeScript declarations and built ESM;
- unit, failure-path, static security, transport, plan, and tool-surface tests;
- package and shell syntax gates;
- a CI matrix for supported Node lines;
- [security policy](SECURITY.md), [threat model](docs/THREAT_MODEL.md),
[verification evidence](docs/VERIFICATION.md), and
[release checklist](docs/RELEASE.md).
## License
MIT
Install
dsh plugin --profile web add github:zootguru/dsh-vpn-ops#951c34e0d0ab27275b0cd7555d8d67305801fbbc
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-vpn-ops from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.