dsh-remote 0.5.5 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,7 +18,7 @@ The harness Web UI intentionally binds `127.0.0.1` (the CLI rejects `--host 0.0.
18
18
 
19
19
  Settings → **远程工作区** — a multi-machine SSH registry (add / edit / delete / set-current, password stored locally):
20
20
 
21
- <img src="https://raw.githubusercontent.com/flymysql/dsh-remote/main/docs/ui-settings-panel.png" alt="dsh-remote settings — multi-machine registry (light theme, host scrubbed)" width="720"/>
21
+ <img src="https://cdn.jsdelivr.net/gh/flymysql/dsh-remote@main/docs/ui-settings-panel.png" alt="dsh-remote settings — multi-machine registry (light theme, host scrubbed)" width="720"/>
22
22
 
23
23
  The native **"Add workspace" / "Select workspace"** flow — a centered modal, two tabs, opens on **本机 (local)**; switch to **远程 (remote)**:
24
24
 
@@ -26,7 +26,7 @@ The native **"Add workspace" / "Select workspace"** flow — a centered modal, t
26
26
 
27
27
  Real capture (host scrubbed to a placeholder):
28
28
 
29
- <img src="https://raw.githubusercontent.com/flymysql/dsh-remote/main/docs/ui-picker-panel.png" alt="dsh-remote workspace picker — real dialog; 本机 (local) tab; 远程 machine select + prefilled root path + autocomplete" width="720"/>
29
+ <img src="https://cdn.jsdelivr.net/gh/flymysql/dsh-remote@main/docs/ui-picker-panel.png" alt="dsh-remote workspace picker — real dialog; 本机 (local) tab; 远程 machine select + prefilled root path + autocomplete" width="720"/>
30
30
 
31
31
  ---
32
32
 
package/README.zh.md CHANGED
@@ -18,7 +18,7 @@ DSH 的 Web 界面刻意只监听 `127.0.0.1`(CLI 为安全拒绝 `--host 0.0.
18
18
 
19
19
  设置 → **远程工作区** —— 多机 SSH 列表(增/删/改/设为当前,密码本地保存、不回显):
20
20
 
21
- <img src="https://raw.githubusercontent.com/flymysql/dsh-remote/main/docs/ui-settings-panel.png" alt="dsh-remote 设置页 — 多机列表(浅色主题,主机已打码)" width="720"/>
21
+ <img src="https://cdn.jsdelivr.net/gh/flymysql/dsh-remote@main/docs/ui-settings-panel.png" alt="dsh-remote 设置页 — 多机列表(浅色主题,主机已打码)" width="720"/>
22
22
 
23
23
  原生 **「Add workspace / 选择工作区」** 流程 —— **居中弹窗**、两个 tab,**默认落在「本机」**;切到 **「远程」**:
24
24
 
@@ -26,7 +26,7 @@ DSH 的 Web 界面刻意只监听 `127.0.0.1`(CLI 为安全拒绝 `--host 0.0.
26
26
 
27
27
  真实截图(机器已打码为占位):
28
28
 
29
- <img src="https://raw.githubusercontent.com/flymysql/dsh-remote/main/docs/ui-picker-panel.png" alt="dsh-remote 工作区选择 — 真实弹窗;默认本机 tab;远程:机器下拉 + 预填根路径 + 自动补全" width="720"/>
29
+ <img src="https://cdn.jsdelivr.net/gh/flymysql/dsh-remote@main/docs/ui-picker-panel.png" alt="dsh-remote 工作区选择 — 真实弹窗;默认本机 tab;远程:机器下拉 + 预填根路径 + 自动补全" width="720"/>
30
30
 
31
31
  ---
32
32
 
package/lib/index.js CHANGED
@@ -498,7 +498,7 @@ export async function apply(ctx, config) {
498
498
  'Show the remote environment: host/user/port, connection health, and the current remote workspace path. Call this first to orient, or when a remote_* call fails to check connectivity.',
499
499
  parameters: {},
500
500
  output: {
501
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
501
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
502
502
  render: (_a, v) => [{ type: 'text', text: v.text }],
503
503
  },
504
504
  async execute() {
@@ -530,15 +530,14 @@ export async function apply(ctx, config) {
530
530
  description:
531
531
  'Connect SSH to a remote host for remote workspace work. Provide host (required), user, optional password or privateKeyPath/port. Once connected, call rw_pick_workspace to pick the workspace directory this session should work in.',
532
532
  parameters: {
533
- required: ['host'],
534
- host: { type: 'string', description: 'Remote host IP or hostname' },
533
+ host: { type: 'string', required: true, description: 'Remote host IP or hostname' },
535
534
  username: { type: 'string', description: 'SSH user (default from config or root)' },
536
535
  port: { type: 'integer', description: 'SSH port (default 22)' },
537
536
  password: { type: 'string', description: 'SSH password (prefer SSH key when possible)' },
538
537
  privateKeyPath: { type: 'string', description: 'Absolute private-key path' },
539
538
  },
540
539
  output: {
541
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
540
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
542
541
  render: (_a, a) => [{ type: 'text', text: a.text }],
543
542
  },
544
543
  async execute(args) {
@@ -566,11 +565,10 @@ export async function apply(ctx, config) {
566
565
  description:
567
566
  'Set the remote workspace directory this session should treat as its working root on the connected remote. Verifies it exists (a directory). Use rw_list_dir to browse first if unsure.',
568
567
  parameters: {
569
- required: ['path'],
570
- path: { type: 'string', description: 'Absolute remote directory path, e.g. /home/dev/code/project' },
568
+ path: { type: 'string', required: true, description: 'Absolute remote directory path, e.g. /home/dev/code/project' },
571
569
  },
572
570
  output: {
573
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
571
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
574
572
  render: (_a, a) => [{ type: 'text', text: a.text }],
575
573
  },
576
574
  async execute(args) {
@@ -596,7 +594,7 @@ export async function apply(ctx, config) {
596
594
  maxFiles: { type: 'integer', description: 'Max files to download (default 500)' },
597
595
  },
598
596
  output: {
599
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
597
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
600
598
  render: (_a, a) => [{ type: 'text', text: a.text }],
601
599
  },
602
600
  async execute(args) {
@@ -625,7 +623,7 @@ export async function apply(ctx, config) {
625
623
  maxFiles: { type: 'integer', description: 'Max files to upload (default 500)' },
626
624
  },
627
625
  output: {
628
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
626
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
629
627
  render: (_a, a) => [{ type: 'text', text: a.text }],
630
628
  },
631
629
  async execute(args) {
@@ -653,7 +651,7 @@ export async function apply(ctx, config) {
653
651
  path: { type: 'string', description: 'Absolute remote path (default: current remote workspace)' },
654
652
  },
655
653
  output: {
656
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
654
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
657
655
  render: (_a, a) => [{ type: 'text', text: a.text }],
658
656
  },
659
657
  async execute(args) {
@@ -668,14 +666,13 @@ export async function apply(ctx, config) {
668
666
  description:
669
667
  'Read a text file on the remote host with line numbers. Supports paging with startLine/endLine. Path is absolute.',
670
668
  parameters: {
671
- required: ['path'],
672
- path: { type: 'string', description: 'Absolute remote file path' },
669
+ path: { type: 'string', required: true, description: 'Absolute remote file path' },
673
670
  startLine: { type: 'integer', description: '1-based first line (default 1)' },
674
671
  endLine: { type: 'integer', description: '1-based last line (inclusive)' },
675
672
  maxLines: { type: 'integer', description: 'Max lines (default 2000)' },
676
673
  },
677
674
  output: {
678
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
675
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
679
676
  render: (_a, a) => [{ type: 'text', text: a.text }],
680
677
  },
681
678
  async execute(args) {
@@ -698,11 +695,10 @@ export async function apply(ctx, config) {
698
695
  description:
699
696
  'Run a shell command on the remote host. Use for anything that is not reading a file (build, test, grep, etc). Output is capped.',
700
697
  parameters: {
701
- required: ['command'],
702
- command: { type: 'string', description: 'Shell command (run on the remote host)' },
698
+ command: { type: 'string', required: true, description: 'Shell command (run on the remote host)' },
703
699
  },
704
700
  output: {
705
- schema: { type: 'object', additionalProperties: false, required: ['text'], properties: { text: { type: 'string' } } },
701
+ schema: { type: 'object', additionalProperties: false, properties: { text: { type: 'string', required: true } } },
706
702
  render: (_a, a) => [{ type: 'text', text: a.text }],
707
703
  },
708
704
  async execute(args) {
@@ -717,13 +713,12 @@ export async function apply(ctx, config) {
717
713
  description:
718
714
  'Write text to a file on the remote host (creating parent directories if needed). Path is absolute. Use this to create or overwrite a remote file directly, instead of round-tripping through a local mirror.',
719
715
  parameters: {
720
- required: ['path', 'content'],
721
- path: { type: 'string', description: 'Absolute remote file path' },
722
- content: { type: 'string', description: 'File content to write (overwrites existing file)' },
716
+ path: { type: 'string', required: true, description: 'Absolute remote file path' },
717
+ content: { type: 'string', required: true, description: 'File content to write (overwrites existing file)' },
723
718
  mkdir: { type: 'boolean', description: 'Create missing parent directories (default true)' },
724
719
  },
725
720
  output: {
726
- schema: { type: 'object', additionalProperties: false, required: ['ok'], properties: { ok: { type: 'boolean' }, bytes: { type: 'integer' }, text: { type: 'string' } } },
721
+ schema: { type: 'object', additionalProperties: false, properties: { ok: { type: 'boolean', required: true }, bytes: { type: 'integer' }, text: { type: 'string' } } },
727
722
  render: (_a, a) => [{ type: 'text', text: a.text || (a.ok ? 'written' : 'failed') }],
728
723
  },
729
724
  async execute(args) {
@@ -761,7 +756,7 @@ export async function apply(ctx, config) {
761
756
  'Close the current SSH connection to the remote host, releasing the persistent pool. Useful to rotate connections or after a long idle.',
762
757
  parameters: {},
763
758
  output: {
764
- schema: { type: 'object', additionalProperties: false, required: ['ok'], properties: { ok: { type: 'boolean' }, text: { type: 'string' } } },
759
+ schema: { type: 'object', additionalProperties: false, properties: { ok: { type: 'boolean', required: true }, text: { type: 'string' } } },
765
760
  render: (_a, a) => [{ type: 'text', text: a.text }],
766
761
  },
767
762
  async execute() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-remote",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "Remote-work assistant for DeepSeek Harness: connect SSH (password or key), pick a remote workspace, operate on it with rw_pick_workspace / rw_list_dir / rw_read_file / rw_exec / rw_sync tools, and mirror it to a real local directory (SFTP) so the DSH native workspace can adopt it.",
5
5
  "license": "MIT",
6
6
  "author": "flymysql <flyphp@outlook.com>",