@xiaoqiong0v0/opencode-ssh-tool 0.3.0 → 0.5.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/README.md +30 -24
- package/dist/base-session.d.ts +128 -0
- package/dist/base-session.d.ts.map +1 -0
- package/dist/base-session.js +414 -0
- package/dist/base-session.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +27 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +28 -3
- package/dist/constants.js.map +1 -1
- package/dist/history.d.ts +14 -5
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +25 -9
- package/dist/history.js.map +1 -1
- package/dist/i18n.d.ts +249 -196
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +171 -180
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +320 -332
- package/dist/index.js.map +1 -1
- package/dist/last-match.d.ts +17 -0
- package/dist/last-match.d.ts.map +1 -0
- package/dist/last-match.js +63 -0
- package/dist/last-match.js.map +1 -0
- package/dist/local-session.d.ts +9 -91
- package/dist/local-session.d.ts.map +1 -1
- package/dist/local-session.js +46 -308
- package/dist/local-session.js.map +1 -1
- package/dist/log.d.ts +3 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +5 -0
- package/dist/log.js.map +1 -0
- package/dist/server-manager.d.ts +3 -1
- package/dist/server-manager.d.ts.map +1 -1
- package/dist/server-manager.js +3 -2
- package/dist/server-manager.js.map +1 -1
- package/dist/server.d.ts +35 -6
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +362 -305
- package/dist/server.js.map +1 -1
- package/dist/session-store.d.ts +2 -0
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +15 -0
- package/dist/session-store.js.map +1 -1
- package/dist/session.d.ts +15 -108
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +69 -361
- package/dist/session.js.map +1 -1
- package/dist/shell-adapter.d.ts +20 -0
- package/dist/shell-adapter.d.ts.map +1 -0
- package/dist/shell-adapter.js +70 -0
- package/dist/shell-adapter.js.map +1 -0
- package/dist/ssh-auth.d.ts.map +1 -1
- package/dist/ssh-auth.js +1 -2
- package/dist/ssh-auth.js.map +1 -1
- package/dist/utils.d.ts +25 -24
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +277 -45
- package/dist/utils.js.map +1 -1
- package/dist/web/app.css +35 -0
- package/dist/web/app.js +2 -0
- package/dist/web/fonts/CaskaydiaCoveNerdFontMono-Regular.ttf +0 -0
- package/dist/web/index.html +24 -0
- package/package.json +8 -4
package/dist/i18n.js
CHANGED
|
@@ -15,133 +15,14 @@ export function getLang(configured = "en") {
|
|
|
15
15
|
}
|
|
16
16
|
/** 工具描述与参数说明字典 */
|
|
17
17
|
export const T = {
|
|
18
|
-
ssh_connect: {
|
|
19
|
-
en: "Open a long-lived SSH connection with a PTY shell in the current session. Reconnecting the same session closes the previous connection first. Returns a connection id.",
|
|
20
|
-
zh: "在当前会话建立长驻 SSH 连接并打开 PTY shell;同一会话重复连接会先关闭旧连接。返回连接标识。",
|
|
21
|
-
},
|
|
22
|
-
ssh_connect_args: {
|
|
23
|
-
host: { en: "Target host or IP", zh: "目标主机 host / IP" },
|
|
24
|
-
user: { en: "Login username", zh: "登录用户名" },
|
|
25
|
-
port: { en: "Port, default 22", zh: "端口,默认 22" },
|
|
26
|
-
name: {
|
|
27
|
-
en: "Terminal name within the session, default 'default'. Creating with an existing name closes the old one first. Use distinct names to keep multiple terminals.",
|
|
28
|
-
zh: "会话内的终端名,默认 'default'。同名创建会先关闭旧终端。用不同名称可保持多个终端。",
|
|
29
|
-
},
|
|
30
|
-
password: {
|
|
31
|
-
en: "Password for password auth (optional). Supports plain text or 'file:<abs path>' to read from a file (avoids exposing it in context). If omitted, falls back to SSH key / agent / SSH_PASSWORD env.",
|
|
32
|
-
zh: "密码认证密码(可选)。支持明文或 'file:<绝对路径>' 从文件读取(避免暴露在上下文中)。省略时回退到 SSH 私钥 / agent / 环境变量 SSH_PASSWORD。",
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
term_exec: {
|
|
36
|
-
en: "Execute a command in an SSH, local or container terminal (by terminal name), preserving cwd and environment. Commands outside the read-only allowlist require user approval.",
|
|
37
|
-
zh: "在 SSH / 本地 / 容器终端(按终端名)执行命令,保留 cwd 与环境变量;白名单外的命令需用户审批。",
|
|
38
|
-
},
|
|
39
|
-
term_exec_args: {
|
|
40
|
-
command: { en: "Shell command to execute", zh: "要执行的 shell 命令" },
|
|
41
|
-
waitResult: {
|
|
42
|
-
en: "Wait for the command to finish and return its output. Default false: submit async, return immediately; read results later via term_read.",
|
|
43
|
-
zh: "是否等待命令完成并返回其输出。默认 false:异步提交,立即返回;稍后通过 term_read 读取结果。",
|
|
44
|
-
},
|
|
45
|
-
name: {
|
|
46
|
-
en: "Target terminal name, default 'default'. Must match a name from ssh_connect.",
|
|
47
|
-
zh: "目标终端名,默认 'default'。需与 ssh_connect 创建的名称一致。",
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
18
|
submitted: {
|
|
51
|
-
en: "Command submitted (async). Running in background: check
|
|
52
|
-
zh: "命令已异步提交,后台执行中:用
|
|
53
|
-
},
|
|
54
|
-
term_read: {
|
|
55
|
-
en: "Read output of an SSH, local or container terminal: buffered (unconsumed, for interactive/polling) or history (completed command+output pairs, first N or last N). Returns browser URL for the full scrollable viewer when the HTTP server is on.",
|
|
56
|
-
zh: "读取 SSH / 本地 / 容器终端输出:缓冲(未消费,交互/轮询用)或历史(已完成的命令+输出对,前 N 条或后 N 条)。HTTP 服务开启时返回浏览器查看完整记录的地址。",
|
|
57
|
-
},
|
|
58
|
-
term_send: {
|
|
59
|
-
en: "Send text or keystrokes to an SSH, local or container terminal for interactive prompts (sudo password, confirmations, interrupts). Escapes: \\r or \\n = Enter, \\x03 = Ctrl-C, \\x04 = Ctrl-D, \\x1a = Ctrl-Z, \\x1b = Esc. After sending, read the result with term_read.",
|
|
60
|
-
zh: "向 SSH / 本地 / 容器终端发送文本或按键,用于交互提示(sudo 密码、确认、中断等)。转义:\\r 或 \\n = 回车,\\x03 = Ctrl-C,\\x04 = Ctrl-D,\\x1a = Ctrl-Z,\\x1b = Esc。发送后用 term_read 读取结果。",
|
|
61
|
-
},
|
|
62
|
-
term_send_args: {
|
|
63
|
-
text: {
|
|
64
|
-
en: "Text or key sequence to send. Use \\r or \\n for Enter, \\x03 for Ctrl-C, \\x1b for Esc. For sudo password prompts send the password followed by \\r.",
|
|
65
|
-
zh: "要发送的文本或按键序列。回车用 \\r 或 \\n,Ctrl-C 用 \\x03,Esc 用 \\x1b。sudo 密码提示时发送密码后跟 \\r。",
|
|
66
|
-
},
|
|
67
|
-
name: {
|
|
68
|
-
en: "Target terminal name, default 'default'.",
|
|
69
|
-
zh: "目标终端名,默认 'default'。",
|
|
70
|
-
},
|
|
19
|
+
en: "Command submitted (async). Running in background: check term_cli status for completion, then term_cli read to read output.",
|
|
20
|
+
zh: "命令已异步提交,后台执行中:用 term_cli status 查完成状态,再用 term_cli read 读取输出。",
|
|
71
21
|
},
|
|
72
22
|
send_ok: {
|
|
73
23
|
en: "Sent: {text}",
|
|
74
24
|
zh: "已发送:{text}",
|
|
75
25
|
},
|
|
76
|
-
send_title: {
|
|
77
|
-
en: "SSH send",
|
|
78
|
-
zh: "SSH 发送",
|
|
79
|
-
},
|
|
80
|
-
term_read_args: {
|
|
81
|
-
source: {
|
|
82
|
-
en: "Where to read from: 'buffer' (unconsumed live output) or 'history' (completed pairs, default).",
|
|
83
|
-
zh: "读取来源:'buffer'(实时未消费输出)或 'history'(已完成消息对,默认)。",
|
|
84
|
-
},
|
|
85
|
-
lines: { en: "Max lines to read from buffer, all if omitted", zh: "读取缓冲行数上限,默认全部" },
|
|
86
|
-
direction: {
|
|
87
|
-
en: "Which end to take (history): 'tail' (last N, default) or 'head' (first N). At most N pairs.",
|
|
88
|
-
zh: "取哪一端(history):'tail'(最后 N 条,默认)或 'head'(前 N 条)。最多 N 条。",
|
|
89
|
-
},
|
|
90
|
-
limit: {
|
|
91
|
-
en: "Number of pairs to return (history, default 10). Capped at total pairs.",
|
|
92
|
-
zh: "返回的对数(history,默认 10)。不超过总对数。",
|
|
93
|
-
},
|
|
94
|
-
includeCommand: {
|
|
95
|
-
en: "Whether to include the command line in history output. Default false (output only).",
|
|
96
|
-
zh: "是否在 history 结果中包含命令行。默认 false(只返回输出)。",
|
|
97
|
-
},
|
|
98
|
-
name: {
|
|
99
|
-
en: "Target terminal name, default 'default'.",
|
|
100
|
-
zh: "目标终端名,默认 'default'。",
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
term_status: {
|
|
104
|
-
en: "Check SSH/local/container terminal state (busy, pending, connection) by terminal name (all terminals if omitted) and the HTTP server state (URL/port/session count). Use busy to poll completion instead of reading animated output.",
|
|
105
|
-
zh: "按终端名检查 SSH / 本地 / 容器终端状态(busy、未消费量、连接;省略则列出全部终端)及 HTTP 服务状态(URL/端口/会话数)。用 busy 轮询完成情况,避免读取动画中间态。",
|
|
106
|
-
},
|
|
107
|
-
term_status_args: {
|
|
108
|
-
name: {
|
|
109
|
-
en: "Terminal name to check; omit to list all terminals.",
|
|
110
|
-
zh: "要检查的终端名;省略则列出全部终端。",
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
term_disconnect: {
|
|
114
|
-
en: "Close the terminal of a name (default 'default') for an SSH, local or container session, or all terminals when name is omitted, and clean up session state.",
|
|
115
|
-
zh: "关闭指定名称(默认 'default')的 SSH / 本地 / 容器终端,name 省略则关闭全部终端,并清理会话态。",
|
|
116
|
-
},
|
|
117
|
-
term_disconnect_args: {
|
|
118
|
-
name: {
|
|
119
|
-
en: "Terminal name to disconnect; omit to disconnect all terminals.",
|
|
120
|
-
zh: "要断开的终端名;省略则断开全部终端。",
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
local_connect: {
|
|
124
|
-
en: "Start a local/container PTY terminal (e.g. pwsh, bash, docker exec -it <container> sh) in the current session. Same-session reconnect closes the previous one. Uses Bun.Terminal (runs in the opencode Bun runtime).",
|
|
125
|
-
zh: "在当前会话启动本地/容器 PTY 终端(如 pwsh、bash、docker exec -it <容器> sh);同一会话重复启动会先关闭旧的。基于 Bun.Terminal(opencode Bun 运行时内运行)。",
|
|
126
|
-
},
|
|
127
|
-
local_connect_args: {
|
|
128
|
-
command: {
|
|
129
|
-
en: "Command to launch, e.g. pwsh / bash / docker exec -it <container> sh",
|
|
130
|
-
zh: "要启动的命令,如 pwsh / bash / docker exec -it <容器> sh",
|
|
131
|
-
},
|
|
132
|
-
name: {
|
|
133
|
-
en: "Terminal name within the session, default 'default'. Creating with an existing name closes the old one first.",
|
|
134
|
-
zh: "会话内的终端名,默认 'default'。同名创建会先关闭旧终端。",
|
|
135
|
-
},
|
|
136
|
-
cwd: {
|
|
137
|
-
en: "Working directory, defaults to plugin cwd.",
|
|
138
|
-
zh: "工作目录,默认插件所在目录。",
|
|
139
|
-
},
|
|
140
|
-
},
|
|
141
|
-
local_connect_title_ok: {
|
|
142
|
-
en: "Local terminal started",
|
|
143
|
-
zh: "本地终端已启动",
|
|
144
|
-
},
|
|
145
26
|
local_connect_ok: {
|
|
146
27
|
en: "Started: {cmd} (terminal {name})",
|
|
147
28
|
zh: "已启动:{cmd}(终端 {name})",
|
|
@@ -150,17 +31,146 @@ export const T = {
|
|
|
150
31
|
en: "Local terminal start failed",
|
|
151
32
|
zh: "本地终端启动失败",
|
|
152
33
|
},
|
|
34
|
+
term_cli: {
|
|
35
|
+
en: "Unified terminal CLI: SSH (remote) / local shell (wsl, pwsh, bash) / container (docker exec) sessions. For ANY terminal you already have or can start locally — WSL, Docker containers, or local shells — use the 'local' subcommand INSTEAD of running commands via bash. Subcommands: connect / local / exec / read / send / status / disconnect / help. Use 'help' for full usage.",
|
|
36
|
+
zh: "统一终端命令行工具:SSH(远程)/ 本地 shell(wsl、pwsh、bash)/ 容器(docker exec)会话。对任何本地可启动的终端——WSL、Docker 容器或本地 shell——应使用 'local' 子命令,而不是用 bash 直接执行。子命令: connect / local / exec / read / send / status / disconnect / help。用 'help' 查看完整用法。",
|
|
37
|
+
},
|
|
38
|
+
term_cli_args: {
|
|
39
|
+
en: "Full command line string, e.g. 'local \"wsl bash\"' / 'exec \"ls -la\" -w' / 'connect user@host'; defaults to 'help' when empty.",
|
|
40
|
+
zh: "完整命令行字符串,如 'local \"wsl bash\"' / 'exec \"ls -la\" -w' / 'connect user@host';空时默认 'help'。",
|
|
41
|
+
},
|
|
42
|
+
term_cli_help: {
|
|
43
|
+
en: `term_cli unified CLI tool: manage SSH / local (wsl, pwsh, bash) / container (docker exec) terminal sessions.
|
|
44
|
+
Use 'local' for any terminal started on this machine (WSL, Docker containers, local shells).
|
|
45
|
+
|
|
46
|
+
Usage: term_cli <subcommand> [args]
|
|
47
|
+
|
|
48
|
+
Subcommands:
|
|
49
|
+
connect <target> [-u user] [-n name] [-p password|file:path]
|
|
50
|
+
target = user@host[:port] (e.g. root@server.local:22); open a long-lived SSH session
|
|
51
|
+
-p accepts plain text or file:<path> (read password from file, avoids exposure)
|
|
52
|
+
local "<command>" [-n name] [-c cwd]
|
|
53
|
+
start a local/container terminal (e.g. "pwsh" / "docker exec -it <container> sh")
|
|
54
|
+
exec "<command>" [-n name] [-w]
|
|
55
|
+
run a command in the terminal (default: submit async and return immediately; -w waits for result)
|
|
56
|
+
read [-n name] [-s buffer|history] [-l limit] [--head] [--include-command]
|
|
57
|
+
read terminal output: buffer (current snapshot, consumed) / history (default tail last N)
|
|
58
|
+
send "<text>" [-n name]
|
|
59
|
+
send text/keystrokes (\\r Enter, \\x03 Ctrl-C, \\x04 Ctrl-D, \\x1a Ctrl-Z, \\x1b Esc)
|
|
60
|
+
status [-n name]
|
|
61
|
+
terminal state (busy/pending/connection); omit name to list all
|
|
62
|
+
disconnect [-n name]
|
|
63
|
+
close terminal; omit name to close all
|
|
64
|
+
help
|
|
65
|
+
show this help
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
term_cli connect root@192.168.1.10
|
|
69
|
+
term_cli connect user@host -p file:C:\\secrets\\pw.txt
|
|
70
|
+
term_cli local "docker exec -it myctr bash" -n db
|
|
71
|
+
term_cli exec "ls -la" -w
|
|
72
|
+
term_cli exec "cd /var/log && tail -50 syslog"
|
|
73
|
+
term_cli send "mypass\\r" -n default
|
|
74
|
+
term_cli read -n db -s buffer
|
|
75
|
+
term_cli status
|
|
76
|
+
term_cli disconnect -n db
|
|
77
|
+
`,
|
|
78
|
+
zh: `term_cli 统一命令行工具:管理 SSH / 本地(wsl、pwsh、bash)/ 容器(docker exec)终端会话。
|
|
79
|
+
本机可启动的终端(WSL、Docker 容器、本地 shell)一律用 'local' 子命令。
|
|
80
|
+
|
|
81
|
+
用法: term_cli <子命令> [参数]
|
|
82
|
+
|
|
83
|
+
子命令:
|
|
84
|
+
connect <target> [-u user] [-n name] [-p password|file:path]
|
|
85
|
+
target = user@host[:port](如 root@server.local:22);建立 SSH 长驻会话
|
|
86
|
+
-p 支持明文或 file:<路径>(从文件读密码,避免暴露)
|
|
87
|
+
local "<command>" [-n name] [-c cwd]
|
|
88
|
+
启动本地/容器终端(如 "pwsh" / "docker exec -it <容器> sh")
|
|
89
|
+
exec "<command>" [-n name] [-w]
|
|
90
|
+
在指定终端执行命令(默认异步提交立即返回;-w 同步等待结果)
|
|
91
|
+
read [-n name] [-s buffer|history] [-l limit] [--head] [--include-command]
|
|
92
|
+
读终端输出:buffer 实时快照(读取后清空)/ history 历史快照(默认 tail 后 N 条)
|
|
93
|
+
send "<text>" [-n name]
|
|
94
|
+
发送文本/按键(\\r 回车、\\x03 Ctrl-C、\\x04 Ctrl-D、\\x1a Ctrl-Z、\\x1b Esc)
|
|
95
|
+
status [-n name]
|
|
96
|
+
终端状态(busy/pending/连接);省略 name 列出全部
|
|
97
|
+
disconnect [-n name]
|
|
98
|
+
断开终端;省略 name 断开全部
|
|
99
|
+
help
|
|
100
|
+
显示本帮助
|
|
101
|
+
|
|
102
|
+
示例:
|
|
103
|
+
term_cli connect root@192.168.1.10
|
|
104
|
+
term_cli connect user@host -p file:C:\\secrets\\pw.txt
|
|
105
|
+
term_cli local "docker exec -it myctr bash" -n db
|
|
106
|
+
term_cli exec "ls -la" -w
|
|
107
|
+
term_cli exec "cd /var/log && tail -50 syslog"
|
|
108
|
+
term_cli send "mypass\\r" -n default
|
|
109
|
+
term_cli read -n db -s buffer
|
|
110
|
+
term_cli status
|
|
111
|
+
term_cli disconnect -n db
|
|
112
|
+
`,
|
|
113
|
+
},
|
|
153
114
|
denied: {
|
|
154
115
|
en: "Denied by user.",
|
|
155
116
|
zh: "用户已拒绝。",
|
|
156
117
|
},
|
|
118
|
+
cli_bad_target: {
|
|
119
|
+
en: "Bad target: \"{target}\"",
|
|
120
|
+
zh: "目标格式错误: \"{target}\"",
|
|
121
|
+
},
|
|
122
|
+
cli_connect_usage: {
|
|
123
|
+
en: "Usage: connect user@host[:port] [-u user] [-n name] [-p password]",
|
|
124
|
+
zh: "用法: connect user@host[:port] [-u user] [-n name] [-p password]",
|
|
125
|
+
},
|
|
126
|
+
cli_need_user_host: {
|
|
127
|
+
en: "Need user and host",
|
|
128
|
+
zh: "需要 user 和 host",
|
|
129
|
+
},
|
|
130
|
+
cli_local_usage: {
|
|
131
|
+
en: "Usage: local \"<command>\" [-n name] [-c cwd]",
|
|
132
|
+
zh: "用法: local \"<command>\" [-n name] [-c cwd]",
|
|
133
|
+
},
|
|
134
|
+
cli_exec_usage: {
|
|
135
|
+
en: "Usage: exec \"<command>\" [-n name] [-w]",
|
|
136
|
+
zh: "用法: exec \"<command>\" [-n name] [-w]",
|
|
137
|
+
},
|
|
138
|
+
cli_send_usage: {
|
|
139
|
+
en: "Usage: send \"<text>\" [-n name]",
|
|
140
|
+
zh: "用法: send \"<text>\" [-n name]",
|
|
141
|
+
},
|
|
142
|
+
cli_need_command: {
|
|
143
|
+
en: "Need a command",
|
|
144
|
+
zh: "需要命令",
|
|
145
|
+
},
|
|
146
|
+
cli_need_text: {
|
|
147
|
+
en: "Need text to send",
|
|
148
|
+
zh: "需要发送内容",
|
|
149
|
+
},
|
|
150
|
+
cli_unknown: {
|
|
151
|
+
en: "Unknown command: {cmd}",
|
|
152
|
+
zh: "未知命令: {cmd}",
|
|
153
|
+
},
|
|
154
|
+
st_name: { en: "name", zh: "名称" },
|
|
155
|
+
st_type: { en: "type", zh: "类型" },
|
|
156
|
+
st_connected: { en: "connected", zh: "已连接" },
|
|
157
|
+
st_busy: { en: "busy", zh: "忙碌" },
|
|
158
|
+
st_pending: { en: "pending", zh: "待消费" },
|
|
159
|
+
st_bytes: { en: "bytes", zh: "字节" },
|
|
160
|
+
st_host: { en: "host", zh: "主机" },
|
|
161
|
+
st_program: { en: "program", zh: "程序" },
|
|
162
|
+
st_last_active: { en: "lastActive", zh: "最后活动" },
|
|
163
|
+
st_connected_at: { en: "connectedAt", zh: "连接时间" },
|
|
164
|
+
st_http_server: { en: "httpServer", zh: "HTTP 服务" },
|
|
165
|
+
st_active_sessions: { en: "activeSessions", zh: "活跃会话" },
|
|
166
|
+
st_disabled: { en: "disabled", zh: "已禁用" },
|
|
157
167
|
denied_danger: {
|
|
158
168
|
en: "Dangerous command, execution rejected.",
|
|
159
169
|
zh: "危险命令,已拒绝执行。",
|
|
160
170
|
},
|
|
161
171
|
not_connected: {
|
|
162
|
-
en: "No
|
|
163
|
-
zh: "
|
|
172
|
+
en: "No active terminal. Use term_cli connect (SSH) or term_cli local first.",
|
|
173
|
+
zh: "无活动终端。请先用 term_cli connect(SSH)或 term_cli local 建立。",
|
|
164
174
|
},
|
|
165
175
|
rejected_connect: {
|
|
166
176
|
en: "Connection rejected.",
|
|
@@ -171,12 +181,8 @@ export const T = {
|
|
|
171
181
|
zh: "终端名非法。仅允许字母、数字、下划线、中划线、点(最多 64 字符),不得含路径分隔符。",
|
|
172
182
|
},
|
|
173
183
|
no_sessions: {
|
|
174
|
-
en: "No active
|
|
175
|
-
zh: "
|
|
176
|
-
},
|
|
177
|
-
connect_title_ok: {
|
|
178
|
-
en: "SSH connected",
|
|
179
|
-
zh: "SSH 已连接",
|
|
184
|
+
en: "No active terminals.",
|
|
185
|
+
zh: "当前没有活动的终端会话。",
|
|
180
186
|
},
|
|
181
187
|
connect_ok: {
|
|
182
188
|
en: "Connected: {user}@{host}:{port} (session {sid}, terminal {name})",
|
|
@@ -190,41 +196,21 @@ export const T = {
|
|
|
190
196
|
en: "Unknown error",
|
|
191
197
|
zh: "未知错误",
|
|
192
198
|
},
|
|
193
|
-
exec_title: {
|
|
194
|
-
en: "SSH exec: {cmd}",
|
|
195
|
-
zh: "SSH 执行: {cmd}",
|
|
196
|
-
},
|
|
197
199
|
exec_failed: {
|
|
198
200
|
en: "Execution failed",
|
|
199
201
|
zh: "执行失败",
|
|
200
202
|
},
|
|
201
|
-
session_output_title: {
|
|
202
|
-
en: "SSH session output",
|
|
203
|
-
zh: "SSH 会话输出",
|
|
204
|
-
},
|
|
205
203
|
session_disconnected: {
|
|
206
|
-
en: "
|
|
207
|
-
zh: "
|
|
204
|
+
en: "Terminal disconnected",
|
|
205
|
+
zh: "终端已断开",
|
|
208
206
|
},
|
|
209
207
|
status_busy_hint: {
|
|
210
|
-
en: "\nHint: a command is still running. Wait and retry, or call
|
|
211
|
-
zh: "\n提示:仍有命令在执行,请等待后重试或调用
|
|
208
|
+
en: "\nHint: a command is still running. Wait and retry, or call term_cli read for partial output.",
|
|
209
|
+
zh: "\n提示:仍有命令在执行,请等待后重试或调用 term_cli read 获取部分输出。",
|
|
212
210
|
},
|
|
213
211
|
status_idle_hint: {
|
|
214
|
-
en: "\nHint: no command running. You can safely execute a new command or call
|
|
215
|
-
zh: "\n提示:无命令在执行,可安全执行新命令或调用
|
|
216
|
-
},
|
|
217
|
-
status_title: {
|
|
218
|
-
en: "SSH session status",
|
|
219
|
-
zh: "SSH 会话状态",
|
|
220
|
-
},
|
|
221
|
-
server_title: {
|
|
222
|
-
en: "SSH HTTP server",
|
|
223
|
-
zh: "SSH HTTP 服务",
|
|
224
|
-
},
|
|
225
|
-
server_info: {
|
|
226
|
-
en: "HTTP server enabled\nurl: {url}\nport: {port}\nactive sessions: {n}\nOpen {url} in a browser to view terminal records (scrollable, auto-refreshing).",
|
|
227
|
-
zh: "HTTP 服务已启用\nurl: {url}\nport: {port}\n活跃会话: {n}\n浏览器访问 {url} 查看终端记录(可滚动、自动刷新)。",
|
|
212
|
+
en: "\nHint: no command running. You can safely execute a new command or call term_cli read for remaining output.",
|
|
213
|
+
zh: "\n提示:无命令在执行,可安全执行新命令或调用 term_cli read 读取剩余输出。",
|
|
228
214
|
},
|
|
229
215
|
browser_full_record: {
|
|
230
216
|
en: "\nBrowser full record: {url}",
|
|
@@ -235,41 +221,46 @@ export const T = {
|
|
|
235
221
|
zh: "\n(HTTP 服务未启用)",
|
|
236
222
|
},
|
|
237
223
|
history_title: {
|
|
238
|
-
en: "
|
|
239
|
-
zh: "
|
|
224
|
+
en: "Terminal history (last {n} / total {total})",
|
|
225
|
+
zh: "终端历史(最后 {n} 条 / 共 {total} 条)",
|
|
240
226
|
},
|
|
241
227
|
history_title_head: {
|
|
242
|
-
en: "
|
|
243
|
-
zh: "
|
|
244
|
-
},
|
|
228
|
+
en: "Terminal history (first {n} / total {total})",
|
|
229
|
+
zh: "终端历史(前 {n} 条 / 共 {total} 条)",
|
|
230
|
+
},
|
|
231
|
+
web_title: { en: "Terminal Records", zh: "终端记录" },
|
|
232
|
+
web_loading: { en: "Loading...", zh: "加载中..." },
|
|
233
|
+
web_load_failed: { en: "Failed to load records", zh: "记录加载失败" },
|
|
234
|
+
web_session_gone: { en: "Session not found or disconnected", zh: "会话不存在或已断开" },
|
|
235
|
+
web_time: { en: "Time", zh: "时间" },
|
|
236
|
+
web_terminals: { en: "terminals", zh: "终端" },
|
|
237
|
+
web_local: { en: "local", zh: "本地" },
|
|
238
|
+
web_commands: { en: "commands", zh: "条命令" },
|
|
239
|
+
web_auto_refresh: { en: "auto-refresh every 2s", zh: "每 2s 自动刷新" },
|
|
240
|
+
web_no_session: { en: "No terminal. Use term_cli connect (SSH) or term_cli local first.", zh: "无终端会话,请先用 term_cli connect(SSH)或 term_cli local 建立。" },
|
|
241
|
+
web_running: { en: "[running] ", zh: "[运行中] " },
|
|
242
|
+
web_new_messages: { en: "↓ New messages", zh: "↓ 新消息" },
|
|
243
|
+
web_delete_terminal: { en: "Delete disconnected terminal", zh: "删除已断开终端" },
|
|
245
244
|
disconnected_ok: {
|
|
246
|
-
en: "
|
|
247
|
-
zh: "
|
|
245
|
+
en: "Terminal closed ({host}).",
|
|
246
|
+
zh: "终端已断开({host})。",
|
|
247
|
+
},
|
|
248
|
+
disconnected_ok_local: {
|
|
249
|
+
en: "Terminal closed ({program}).",
|
|
250
|
+
zh: "终端已断开({program})。",
|
|
248
251
|
},
|
|
249
252
|
disconnected_all_ok: {
|
|
250
|
-
en: "All
|
|
251
|
-
zh: "
|
|
253
|
+
en: "All terminals closed (last host {host}).",
|
|
254
|
+
zh: "已断开全部终端(最后主机 {host})。",
|
|
255
|
+
},
|
|
256
|
+
disconnected_all_ok_local: {
|
|
257
|
+
en: "All terminals closed (last program {program}).",
|
|
258
|
+
zh: "已断开全部终端(最后程序 {program})。",
|
|
252
259
|
},
|
|
253
260
|
err_not_connected: {
|
|
254
261
|
en: "Not connected",
|
|
255
262
|
zh: "未连接",
|
|
256
263
|
},
|
|
257
|
-
err_busy: {
|
|
258
|
-
en: "Previous command still running, poll with term_status first",
|
|
259
|
-
zh: "上一条命令仍在执行,请先 term_status 轮询",
|
|
260
|
-
},
|
|
261
|
-
err_shell_open: {
|
|
262
|
-
en: "Shell open failed",
|
|
263
|
-
zh: "shell 打开失败",
|
|
264
|
-
},
|
|
265
|
-
err_no_such_session: {
|
|
266
|
-
en: "Session not found or disconnected",
|
|
267
|
-
zh: "会话不存在或已断开",
|
|
268
|
-
},
|
|
269
|
-
truncated: {
|
|
270
|
-
en: "... [output truncated, {n} chars total]",
|
|
271
|
-
zh: "... [输出已截断,共 {n} 字符]",
|
|
272
|
-
},
|
|
273
264
|
};
|
|
274
265
|
/** 取某语言下的一条文案 */
|
|
275
266
|
export function tr(key, lang) {
|
package/dist/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAOzC;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,UAAU,GAAS,IAAI;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC7B,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,kBAAkB;AAClB,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAgNvD,eAAO,MAAM,eAAe,EAAE,MAyU7B,CAAA;eAGc,eAAe"}
|