@xiaoqiong0v0/opencode-ssh-tool 0.5.0 → 0.6.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 +27 -21
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +250 -0
- package/dist/agent.js.map +1 -0
- package/dist/base-session.d.ts +79 -13
- package/dist/base-session.d.ts.map +1 -1
- package/dist/base-session.js +246 -100
- package/dist/base-session.js.map +1 -1
- package/dist/config.d.ts +6 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -7
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +14 -15
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +14 -15
- package/dist/constants.js.map +1 -1
- package/dist/i18n.d.ts +32 -14
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +39 -12
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -73
- package/dist/index.js.map +1 -1
- package/dist/last-match.d.ts +11 -0
- package/dist/last-match.d.ts.map +1 -1
- package/dist/last-match.js +24 -0
- package/dist/last-match.js.map +1 -1
- package/dist/local-session.d.ts +0 -1
- package/dist/local-session.d.ts.map +1 -1
- package/dist/local-session.js +12 -8
- package/dist/local-session.js.map +1 -1
- package/dist/server-entry.d.ts +2 -0
- package/dist/server-entry.d.ts.map +1 -0
- package/dist/server-entry.js +61 -0
- package/dist/server-entry.js.map +1 -0
- package/dist/server-manager.d.ts +9 -9
- package/dist/server-manager.d.ts.map +1 -1
- package/dist/server-manager.js +109 -20
- package/dist/server-manager.js.map +1 -1
- package/dist/server.d.ts +3 -28
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +424 -224
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +0 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +2 -9
- package/dist/session.js.map +1 -1
- package/dist/shell-adapter.d.ts +40 -2
- package/dist/shell-adapter.d.ts.map +1 -1
- package/dist/shell-adapter.js +252 -24
- package/dist/shell-adapter.js.map +1 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +30 -9
- package/dist/utils.js.map +1 -1
- package/dist/web/app.css +20 -7
- package/dist/web/app.js +11 -2
- package/dist/web/index.html +9 -2
- package/dist/web/xterm.css +218 -0
- package/package.json +3 -2
package/dist/config.js
CHANGED
|
@@ -6,8 +6,9 @@ import { join } from "node:path";
|
|
|
6
6
|
const DEFAULT_CONFIG = {
|
|
7
7
|
server: {
|
|
8
8
|
enabled: true,
|
|
9
|
-
// 端口不设默认值:0 = 自动分配随机端口(避免冲突)
|
|
10
9
|
port: 0,
|
|
10
|
+
streamTickMs: 100,
|
|
11
|
+
idleShutdownMs: 0,
|
|
11
12
|
},
|
|
12
13
|
history: {
|
|
13
14
|
// 保留的消息对数(最小 1,保留最新)
|
|
@@ -30,17 +31,21 @@ const CONFIG_TEMPLATE = `{
|
|
|
30
31
|
// HTTP 终端记录服务开关(默认 true)
|
|
31
32
|
"server": {
|
|
32
33
|
"enabled": true,
|
|
33
|
-
//
|
|
34
|
-
"port": 0
|
|
34
|
+
// 端口:0 = 自动分配随机端口(推荐,避免冲突);可显式指定,如 8137
|
|
35
|
+
"port": 0,
|
|
36
|
+
// 流推送间隔(毫秒),默认 100。越小实时性越高但 WS 消息越频繁,最小 20
|
|
37
|
+
"streamTickMs": 100,
|
|
38
|
+
// 无任何会话连接时自动关闭超时(毫秒),0=不自动关闭。默认 0
|
|
39
|
+
"idleShutdownMs": 0
|
|
35
40
|
},
|
|
36
41
|
// 会话记录(命令+输出 消息对)管理:全部存文件(~/.opencode/plugins-cache/opencode-ssh-tool/<会话>/),随会话清理
|
|
37
42
|
"history": {
|
|
38
43
|
// 保留的消息对数上限(默认 100,最小 1)。超出时移除最旧的一对
|
|
39
44
|
"maxMessages": 100
|
|
40
45
|
},
|
|
41
|
-
//
|
|
46
|
+
// 工具语言(工具描述 / CLI / agent·session 文案):"en" | "zh"(默认 "en",可用环境变量 SSH_TOOL_LANG 覆盖)
|
|
42
47
|
"toolLang": "en",
|
|
43
|
-
// Web
|
|
48
|
+
// Web 界面语言(仅页面 UI 文案):"en" | "zh"(默认 "en",可用环境变量 SSH_WEB_LANG 覆盖)
|
|
44
49
|
"webLang": "en",
|
|
45
50
|
// 权限自定义正则(追加到内置默认,控制"拒绝"与"需审批"命令)
|
|
46
51
|
"permission": {
|
|
@@ -86,12 +91,16 @@ export function loadConfig() {
|
|
|
86
91
|
const server = (raw.server ?? {});
|
|
87
92
|
const history = (raw.history ?? {});
|
|
88
93
|
const permission = (raw.permission ?? {});
|
|
89
|
-
|
|
90
|
-
const
|
|
94
|
+
// 语言:toolLang(工具)/ webLang(Web 界面)独立配置;向后兼容旧字段 lang(同时作为两者)
|
|
95
|
+
const legacyLang = raw.lang === "zh" ? "zh" : raw.lang === "en" ? "en" : undefined;
|
|
96
|
+
const toolLang = raw.toolLang === "zh" ? "zh" : raw.toolLang === "en" ? "en" : legacyLang ?? "en";
|
|
97
|
+
const webLang = raw.webLang === "zh" ? "zh" : raw.webLang === "en" ? "en" : legacyLang ?? "en";
|
|
91
98
|
return {
|
|
92
99
|
server: {
|
|
93
100
|
enabled: server.enabled ?? DEFAULT_CONFIG.server.enabled,
|
|
94
101
|
port: typeof server.port === "number" && Number.isFinite(server.port) ? server.port : DEFAULT_CONFIG.server.port,
|
|
102
|
+
streamTickMs: typeof server.streamTickMs === "number" && server.streamTickMs >= 20 ? server.streamTickMs : DEFAULT_CONFIG.server.streamTickMs,
|
|
103
|
+
idleShutdownMs: typeof server.idleShutdownMs === "number" && server.idleShutdownMs >= 0 ? server.idleShutdownMs : DEFAULT_CONFIG.server.idleShutdownMs,
|
|
95
104
|
},
|
|
96
105
|
history: {
|
|
97
106
|
maxMessages: Math.max(1, history.maxMessages ?? DEFAULT_CONFIG.history.maxMessages),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -8,12 +8,15 @@ export declare const SHELL_META: RegExp;
|
|
|
8
8
|
export declare const EXEC_TIMEOUT_MS = 30000;
|
|
9
9
|
/** 静默窗口阈值:输出停止增长超过此时长视为命令完成 */
|
|
10
10
|
export declare const QUIET_WINDOW_MS = 500;
|
|
11
|
+
/**
|
|
12
|
+
* 交互模式判定阈值(毫秒):命令提交时终端仍 busy,距上次提交不足此时长视为连续快速命令(排队等待执行),
|
|
13
|
+
* 超过此时长仍 busy 视为用户正在给运行中的交互程序输入(sudo 密码/REPL 等),按交互输入原样 send。
|
|
14
|
+
*/
|
|
15
|
+
export declare const INTERACTIVE_BUSY_MS = 500;
|
|
11
16
|
/** 动画检测阈值:连续输出超过此时长仍无哨兵/静默 → 判定仍在运行 */
|
|
12
17
|
export declare const ANIMATION_WINDOW_MS = 5000;
|
|
13
18
|
/** ssh2 认证超时(毫秒) */
|
|
14
19
|
export declare const READY_TIMEOUT_MS = 10000;
|
|
15
|
-
/** 注入生效等待超时:shell 执行注入命令并重绘提示符(输出首个标记)的最长等待 */
|
|
16
|
-
export declare const SETTLE_TIMEOUT_MS = 3000;
|
|
17
20
|
/** 注入总超时(含重试):超过此时长仍无首个标记则断连报错 */
|
|
18
21
|
export declare const INJECT_TIMEOUT_MS = 30000;
|
|
19
22
|
/** PTY 窗口尺寸(常规终端尺寸,避免 zsh 按超大缓冲重绘导致提示符/回显错位) */
|
|
@@ -23,26 +26,22 @@ export declare const PTY_COLS = 120;
|
|
|
23
26
|
export declare const MAX_OUTPUT_LEN = 50000;
|
|
24
27
|
/** 会话连续原始字节流上限(超过裁剪最旧部分) */
|
|
25
28
|
export declare const RAW_LOG_MAX = 1048576;
|
|
26
|
-
/**
|
|
29
|
+
/** 工具语言环境变量(工具描述/CLI/session 文案,en | zh,默认 en) */
|
|
27
30
|
export declare const LANG_ENV = "SSH_TOOL_LANG";
|
|
31
|
+
/** Web 界面语言环境变量(仅页面 UI 文案,en | zh,默认 en) */
|
|
32
|
+
export declare const WEB_LANG_ENV = "SSH_WEB_LANG";
|
|
28
33
|
/** 插件缓存根目录(历史消息对存文件,随会话清理) */
|
|
29
34
|
export declare const CACHE_DIR = ".opencode/plugins-cache/opencode-ssh-tool";
|
|
30
35
|
/** 完成标记前缀(后续跟退出码 + ">",如 <SSH_DONE:0>) */
|
|
31
36
|
export declare const DONE_TAG = "<SSH_DONE:";
|
|
32
|
-
/** 完成标记完整正则(内部于 shell-adapter 私有,避免 lastIndex 全局状态污染) */
|
|
33
|
-
/** 完成标记字符串:给定退出码 */
|
|
34
|
-
export declare const doneTag: (ec: number | string) => string;
|
|
35
|
-
/** 注入确认 token:shell 执行注入脚本末尾的 echo 输出,用于确认注入完成 */
|
|
36
|
-
export declare const INJECT_TOKEN = "__SSH_INJECT_DONE__";
|
|
37
37
|
/** shell 类型探测前缀:probeCommand 回显 <前缀>$0 */
|
|
38
38
|
export declare const SHELL_ID_PREFIX = "__SHELL_ID__";
|
|
39
39
|
/** 探测输出匹配正则 */
|
|
40
40
|
export declare const SHELL_ID_RE: RegExp;
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
export declare const
|
|
47
|
-
export declare const VAR_ORIG_RL = "__SSH_ORIG_RL";
|
|
41
|
+
/**
|
|
42
|
+
* 独立 HTTP 服务协议/代码版本号:插件的 server/agent 协议或服务端逻辑变更时递增。
|
|
43
|
+
* server-entry 启动时写入 server.json(proto 字段),ensureServer 发现既有服务版本不符时
|
|
44
|
+
* 杀掉旧进程重启,防止 detached 持久进程一直跑旧代码导致行为不生效(如 busy 卡死)。
|
|
45
|
+
*/
|
|
46
|
+
export declare const SERVER_PROTO_VERSION = 12;
|
|
48
47
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,eAAO,MAAM,cAAc,QAC0F,CAAA;AAErH,6BAA6B;AAC7B,eAAO,MAAM,IAAI,QACsmB,CAAA;AAEvnB,qCAAqC;AACrC,eAAO,MAAM,UAAU,QAAgB,CAAA;AAEvC,2BAA2B;AAC3B,eAAO,MAAM,eAAe,QAAS,CAAA;AAErC,+BAA+B;AAC/B,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,eAAO,MAAM,cAAc,QAC0F,CAAA;AAErH,6BAA6B;AAC7B,eAAO,MAAM,IAAI,QACsmB,CAAA;AAEvnB,qCAAqC;AACrC,eAAO,MAAM,UAAU,QAAgB,CAAA;AAEvC,2BAA2B;AAC3B,eAAO,MAAM,eAAe,QAAS,CAAA;AAErC,+BAA+B;AAC/B,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC,uCAAuC;AACvC,eAAO,MAAM,mBAAmB,OAAQ,CAAA;AAExC,oBAAoB;AACpB,eAAO,MAAM,gBAAgB,QAAS,CAAA;AAEtC,kCAAkC;AAClC,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC,gDAAgD;AAChD,eAAO,MAAM,QAAQ,KAAK,CAAA;AAC1B,eAAO,MAAM,QAAQ,MAAM,CAAA;AAE3B,qBAAqB;AACrB,eAAO,MAAM,cAAc,QAAS,CAAA;AAEpC,4BAA4B;AAC5B,eAAO,MAAM,WAAW,UAAY,CAAA;AAEpC,kDAAkD;AAClD,eAAO,MAAM,QAAQ,kBAAkB,CAAA;AAEvC,4CAA4C;AAC5C,eAAO,MAAM,YAAY,iBAAiB,CAAA;AAE1C,8BAA8B;AAC9B,eAAO,MAAM,SAAS,8CAA8C,CAAA;AAIpE,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,eAAe,CAAA;AAEpC,0CAA0C;AAC1C,eAAO,MAAM,eAAe,iBAAiB,CAAA;AAE7C,eAAe;AACf,eAAO,MAAM,WAAW,QAAqB,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA"}
|
package/dist/constants.js
CHANGED
|
@@ -9,12 +9,15 @@ export const SHELL_META = /[;|&`$()<>]/;
|
|
|
9
9
|
export const EXEC_TIMEOUT_MS = 30_000;
|
|
10
10
|
/** 静默窗口阈值:输出停止增长超过此时长视为命令完成 */
|
|
11
11
|
export const QUIET_WINDOW_MS = 500;
|
|
12
|
+
/**
|
|
13
|
+
* 交互模式判定阈值(毫秒):命令提交时终端仍 busy,距上次提交不足此时长视为连续快速命令(排队等待执行),
|
|
14
|
+
* 超过此时长仍 busy 视为用户正在给运行中的交互程序输入(sudo 密码/REPL 等),按交互输入原样 send。
|
|
15
|
+
*/
|
|
16
|
+
export const INTERACTIVE_BUSY_MS = 500;
|
|
12
17
|
/** 动画检测阈值:连续输出超过此时长仍无哨兵/静默 → 判定仍在运行 */
|
|
13
18
|
export const ANIMATION_WINDOW_MS = 5_000;
|
|
14
19
|
/** ssh2 认证超时(毫秒) */
|
|
15
20
|
export const READY_TIMEOUT_MS = 10_000;
|
|
16
|
-
/** 注入生效等待超时:shell 执行注入命令并重绘提示符(输出首个标记)的最长等待 */
|
|
17
|
-
export const SETTLE_TIMEOUT_MS = 3_000;
|
|
18
21
|
/** 注入总超时(含重试):超过此时长仍无首个标记则断连报错 */
|
|
19
22
|
export const INJECT_TIMEOUT_MS = 30_000;
|
|
20
23
|
/** PTY 窗口尺寸(常规终端尺寸,避免 zsh 按超大缓冲重绘导致提示符/回显错位) */
|
|
@@ -24,27 +27,23 @@ export const PTY_COLS = 120;
|
|
|
24
27
|
export const MAX_OUTPUT_LEN = 50_000;
|
|
25
28
|
/** 会话连续原始字节流上限(超过裁剪最旧部分) */
|
|
26
29
|
export const RAW_LOG_MAX = 1_048_576;
|
|
27
|
-
/**
|
|
30
|
+
/** 工具语言环境变量(工具描述/CLI/session 文案,en | zh,默认 en) */
|
|
28
31
|
export const LANG_ENV = "SSH_TOOL_LANG";
|
|
32
|
+
/** Web 界面语言环境变量(仅页面 UI 文案,en | zh,默认 en) */
|
|
33
|
+
export const WEB_LANG_ENV = "SSH_WEB_LANG";
|
|
29
34
|
/** 插件缓存根目录(历史消息对存文件,随会话清理) */
|
|
30
35
|
export const CACHE_DIR = ".opencode/plugins-cache/opencode-ssh-tool";
|
|
31
36
|
// ===== 终端注入协议标记 =====
|
|
32
37
|
/** 完成标记前缀(后续跟退出码 + ">",如 <SSH_DONE:0>) */
|
|
33
38
|
export const DONE_TAG = "<SSH_DONE:";
|
|
34
|
-
/** 完成标记完整正则(内部于 shell-adapter 私有,避免 lastIndex 全局状态污染) */
|
|
35
|
-
/** 完成标记字符串:给定退出码 */
|
|
36
|
-
export const doneTag = (ec) => `<SSH_DONE:${ec}>`;
|
|
37
|
-
/** 注入确认 token:shell 执行注入脚本末尾的 echo 输出,用于确认注入完成 */
|
|
38
|
-
export const INJECT_TOKEN = "__SSH_INJECT_DONE__";
|
|
39
39
|
/** shell 类型探测前缀:probeCommand 回显 <前缀>$0 */
|
|
40
40
|
export const SHELL_ID_PREFIX = "__SHELL_ID__";
|
|
41
41
|
/** 探测输出匹配正则 */
|
|
42
42
|
export const SHELL_ID_RE = /\b__SHELL_ID__\b/;
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
export const
|
|
49
|
-
export const VAR_ORIG_RL = "__SSH_ORIG_RL";
|
|
43
|
+
/**
|
|
44
|
+
* 独立 HTTP 服务协议/代码版本号:插件的 server/agent 协议或服务端逻辑变更时递增。
|
|
45
|
+
* server-entry 启动时写入 server.json(proto 字段),ensureServer 发现既有服务版本不符时
|
|
46
|
+
* 杀掉旧进程重启,防止 detached 持久进程一直跑旧代码导致行为不生效(如 busy 卡死)。
|
|
47
|
+
*/
|
|
48
|
+
export const SERVER_PROTO_VERSION = 12;
|
|
50
49
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GACzB,mHAAmH,CAAA;AAErH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,IAAI,GACf,qnBAAqnB,CAAA;AAEvnB,qCAAqC;AACrC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AAEvC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAA;AAErC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAElC
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GACzB,mHAAmH,CAAA;AAErH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,IAAI,GACf,qnBAAqnB,CAAA;AAEvnB,qCAAqC;AACrC,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AAEvC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAA;AAErC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAEtC,uCAAuC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAExC,oBAAoB;AACpB,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAEtC,kCAAkC;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEvC,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAA;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAA;AAE3B,qBAAqB;AACrB,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AAEpC,4BAA4B;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AAEpC,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAA;AAEvC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAA;AAE1C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,SAAS,GAAG,2CAA2C,CAAA;AAEpE,uBAAuB;AAEvB,0CAA0C;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAA;AAEpC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAA;AAE7C,eAAe;AACf,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA"}
|
package/dist/i18n.d.ts
CHANGED
|
@@ -4,11 +4,17 @@ export type FlatKey = {
|
|
|
4
4
|
[K in keyof typeof T]: (typeof T)[K] extends Record<Lang, string> ? K : never;
|
|
5
5
|
}[keyof typeof T];
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* 读取工具语言:环境变量 SSH_TOOL_LANG 优先,否则配置 toolLang(默认 en)
|
|
8
8
|
* @param configured 配置文件 toolLang 值
|
|
9
9
|
* @returns 语言标识
|
|
10
10
|
*/
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function getToolLang(configured?: Lang): Lang;
|
|
12
|
+
/**
|
|
13
|
+
* 读取 Web 界面语言:环境变量 SSH_WEB_LANG 优先,否则配置 webLang(默认 en)
|
|
14
|
+
* @param configured 配置文件 webLang 值
|
|
15
|
+
* @returns 语言标识
|
|
16
|
+
*/
|
|
17
|
+
export declare function getWebLang(configured?: Lang): Lang;
|
|
12
18
|
/** 工具描述与参数说明字典 */
|
|
13
19
|
export declare const T: {
|
|
14
20
|
readonly submitted: {
|
|
@@ -271,10 +277,6 @@ Examples:
|
|
|
271
277
|
readonly en: "Loading...";
|
|
272
278
|
readonly zh: "加载中...";
|
|
273
279
|
};
|
|
274
|
-
readonly web_load_failed: {
|
|
275
|
-
readonly en: "Failed to load records";
|
|
276
|
-
readonly zh: "记录加载失败";
|
|
277
|
-
};
|
|
278
280
|
readonly web_session_gone: {
|
|
279
281
|
readonly en: "Session not found or disconnected";
|
|
280
282
|
readonly zh: "会话不存在或已断开";
|
|
@@ -295,18 +297,10 @@ Examples:
|
|
|
295
297
|
readonly en: "commands";
|
|
296
298
|
readonly zh: "条命令";
|
|
297
299
|
};
|
|
298
|
-
readonly web_auto_refresh: {
|
|
299
|
-
readonly en: "auto-refresh every 2s";
|
|
300
|
-
readonly zh: "每 2s 自动刷新";
|
|
301
|
-
};
|
|
302
300
|
readonly web_no_session: {
|
|
303
301
|
readonly en: "No terminal. Use term_cli connect (SSH) or term_cli local first.";
|
|
304
302
|
readonly zh: "无终端会话,请先用 term_cli connect(SSH)或 term_cli local 建立。";
|
|
305
303
|
};
|
|
306
|
-
readonly web_running: {
|
|
307
|
-
readonly en: "[running] ";
|
|
308
|
-
readonly zh: "[运行中] ";
|
|
309
|
-
};
|
|
310
304
|
readonly web_new_messages: {
|
|
311
305
|
readonly en: "↓ New messages";
|
|
312
306
|
readonly zh: "↓ 新消息";
|
|
@@ -315,6 +309,18 @@ Examples:
|
|
|
315
309
|
readonly en: "Delete disconnected terminal";
|
|
316
310
|
readonly zh: "删除已断开终端";
|
|
317
311
|
};
|
|
312
|
+
readonly web_cmd_placeholder: {
|
|
313
|
+
readonly en: "Enter command (Shift+Enter new line)";
|
|
314
|
+
readonly zh: "输入命令(Shift+Enter 换行)";
|
|
315
|
+
};
|
|
316
|
+
readonly web_send_ctrlc: {
|
|
317
|
+
readonly en: "Keystroke";
|
|
318
|
+
readonly zh: "快捷键";
|
|
319
|
+
};
|
|
320
|
+
readonly web_raw: {
|
|
321
|
+
readonly en: "Raw";
|
|
322
|
+
readonly zh: "原始";
|
|
323
|
+
};
|
|
318
324
|
readonly disconnected_ok: {
|
|
319
325
|
readonly en: "Terminal closed ({host}).";
|
|
320
326
|
readonly zh: "终端已断开({host})。";
|
|
@@ -335,6 +341,18 @@ Examples:
|
|
|
335
341
|
readonly en: "Not connected";
|
|
336
342
|
readonly zh: "未连接";
|
|
337
343
|
};
|
|
344
|
+
readonly cmd_busy: {
|
|
345
|
+
readonly en: "Previous command still running; poll with `term_cli status` first";
|
|
346
|
+
readonly zh: "上一条命令仍在运行,请先用 `term_cli status` 查询状态";
|
|
347
|
+
};
|
|
348
|
+
readonly cmd_continuation: {
|
|
349
|
+
readonly en: "Command would enter shell continuation (unclosed quote/backtick/escape); aborted";
|
|
350
|
+
readonly zh: "命令会导致 shell 进入续行等待(引号/反引号/转义未闭合),已中止";
|
|
351
|
+
};
|
|
352
|
+
readonly shell_probe_timeout: {
|
|
353
|
+
readonly en: "Shell probe timed out (shell not ready within 30s); connection aborted";
|
|
354
|
+
readonly zh: "Shell 探测超时(30s 内 shell 未就绪),连接终止";
|
|
355
|
+
};
|
|
338
356
|
};
|
|
339
357
|
/** 取某语言下的一条文案 */
|
|
340
358
|
export declare function tr(key: FlatKey, lang: Lang): string;
|
package/dist/i18n.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n.js
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
// 多语言:工具描述与参数说明的 en/zh 字典,默认英文
|
|
2
|
-
|
|
2
|
+
// 语言分两类:工具语言(工具描述/CLI/agent·session 文案)与 Web 界面语言(仅页面 UI 文案)
|
|
3
|
+
import { LANG_ENV, WEB_LANG_ENV } from "./constants.js";
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @param
|
|
5
|
+
* 环境变量取值优先于配置(仅接受 en/zh,非法值回退配置)
|
|
6
|
+
* @param env 环境变量原始值
|
|
7
|
+
* @param configured 配置文件语言值
|
|
6
8
|
* @returns 语言标识
|
|
7
9
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return "zh";
|
|
12
|
-
if (env === "en")
|
|
13
|
-
return "en";
|
|
10
|
+
function readLang(env, configured) {
|
|
11
|
+
if (env === "zh" || env === "en")
|
|
12
|
+
return env;
|
|
14
13
|
return configured;
|
|
15
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* 读取工具语言:环境变量 SSH_TOOL_LANG 优先,否则配置 toolLang(默认 en)
|
|
17
|
+
* @param configured 配置文件 toolLang 值
|
|
18
|
+
* @returns 语言标识
|
|
19
|
+
*/
|
|
20
|
+
export function getToolLang(configured = "en") {
|
|
21
|
+
return readLang(process.env[LANG_ENV], configured);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 读取 Web 界面语言:环境变量 SSH_WEB_LANG 优先,否则配置 webLang(默认 en)
|
|
25
|
+
* @param configured 配置文件 webLang 值
|
|
26
|
+
* @returns 语言标识
|
|
27
|
+
*/
|
|
28
|
+
export function getWebLang(configured = "en") {
|
|
29
|
+
return readLang(process.env[WEB_LANG_ENV], configured);
|
|
30
|
+
}
|
|
16
31
|
/** 工具描述与参数说明字典 */
|
|
17
32
|
export const T = {
|
|
18
33
|
submitted: {
|
|
@@ -230,17 +245,17 @@ Examples:
|
|
|
230
245
|
},
|
|
231
246
|
web_title: { en: "Terminal Records", zh: "终端记录" },
|
|
232
247
|
web_loading: { en: "Loading...", zh: "加载中..." },
|
|
233
|
-
web_load_failed: { en: "Failed to load records", zh: "记录加载失败" },
|
|
234
248
|
web_session_gone: { en: "Session not found or disconnected", zh: "会话不存在或已断开" },
|
|
235
249
|
web_time: { en: "Time", zh: "时间" },
|
|
236
250
|
web_terminals: { en: "terminals", zh: "终端" },
|
|
237
251
|
web_local: { en: "local", zh: "本地" },
|
|
238
252
|
web_commands: { en: "commands", zh: "条命令" },
|
|
239
|
-
web_auto_refresh: { en: "auto-refresh every 2s", zh: "每 2s 自动刷新" },
|
|
240
253
|
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
254
|
web_new_messages: { en: "↓ New messages", zh: "↓ 新消息" },
|
|
243
255
|
web_delete_terminal: { en: "Delete disconnected terminal", zh: "删除已断开终端" },
|
|
256
|
+
web_cmd_placeholder: { en: "Enter command (Shift+Enter new line)", zh: "输入命令(Shift+Enter 换行)" },
|
|
257
|
+
web_send_ctrlc: { en: "Keystroke", zh: "快捷键" },
|
|
258
|
+
web_raw: { en: "Raw", zh: "原始" },
|
|
244
259
|
disconnected_ok: {
|
|
245
260
|
en: "Terminal closed ({host}).",
|
|
246
261
|
zh: "终端已断开({host})。",
|
|
@@ -261,6 +276,18 @@ Examples:
|
|
|
261
276
|
en: "Not connected",
|
|
262
277
|
zh: "未连接",
|
|
263
278
|
},
|
|
279
|
+
cmd_busy: {
|
|
280
|
+
en: "Previous command still running; poll with `term_cli status` first",
|
|
281
|
+
zh: "上一条命令仍在运行,请先用 `term_cli status` 查询状态",
|
|
282
|
+
},
|
|
283
|
+
cmd_continuation: {
|
|
284
|
+
en: "Command would enter shell continuation (unclosed quote/backtick/escape); aborted",
|
|
285
|
+
zh: "命令会导致 shell 进入续行等待(引号/反引号/转义未闭合),已中止",
|
|
286
|
+
},
|
|
287
|
+
shell_probe_timeout: {
|
|
288
|
+
en: "Shell probe timed out (shell not ready within 30s); connection aborted",
|
|
289
|
+
zh: "Shell 探测超时(30s 内 shell 未就绪),连接终止",
|
|
290
|
+
},
|
|
264
291
|
};
|
|
265
292
|
/** 取某语言下的一条文案 */
|
|
266
293
|
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;
|
|
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;AAiOvD,eAAO,MAAM,eAAe,EAAE,MA0U7B,CAAA;eAGc,eAAe"}
|