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 +2 -2
- package/README.zh.md +2 -2
- package/lib/index.js +16 -21
- package/package.json +1 -1
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://
|
|
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://
|
|
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://
|
|
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://
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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
|
-
|
|
721
|
-
|
|
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,
|
|
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,
|
|
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.
|
|
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>",
|