@xiaoqiong0v0/opencode-ssh-tool 0.6.15 → 0.6.16
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/dist/agent.d.ts +4 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +17 -2
- package/dist/agent.js.map +1 -1
- package/dist/base-session.d.ts +64 -32
- package/dist/base-session.d.ts.map +1 -1
- package/dist/base-session.js +235 -106
- package/dist/base-session.js.map +1 -1
- package/dist/constants.d.ts +7 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +7 -1
- package/dist/constants.js.map +1 -1
- package/dist/i18n.d.ts +20 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +20 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -4
- package/dist/index.js.map +1 -1
- package/dist/local-session.d.ts +3 -1
- package/dist/local-session.d.ts.map +1 -1
- package/dist/local-session.js +82 -4
- package/dist/local-session.js.map +1 -1
- package/dist/log.d.ts +8 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +28 -1
- package/dist/log.js.map +1 -1
- package/dist/parse-check.d.ts +20 -0
- package/dist/parse-check.d.ts.map +1 -0
- package/dist/parse-check.js +505 -0
- package/dist/parse-check.js.map +1 -0
- package/dist/precheck.d.ts +32 -0
- package/dist/precheck.d.ts.map +1 -0
- package/dist/precheck.js +105 -0
- package/dist/precheck.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +41 -5
- package/dist/server.js.map +1 -1
- package/dist/session-store.d.ts +33 -0
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +55 -0
- package/dist/session-store.js.map +1 -1
- package/dist/session.js +1 -1
- package/dist/session.js.map +1 -1
- package/dist/shell-adapter.d.ts +14 -0
- package/dist/shell-adapter.d.ts.map +1 -1
- package/dist/shell-adapter.js +58 -10
- package/dist/shell-adapter.js.map +1 -1
- package/dist/utils.d.ts +8 -34
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +22 -64
- package/dist/utils.js.map +1 -1
- package/dist/web/app.js +1 -1
- package/package.json +1 -1
package/dist/local-session.d.ts
CHANGED
|
@@ -13,9 +13,11 @@ export declare class LocalSession extends BaseSession {
|
|
|
13
13
|
private _term;
|
|
14
14
|
private _proc;
|
|
15
15
|
private _program;
|
|
16
|
-
/** Windows ConPTY
|
|
16
|
+
/** 本地 PTY 提交分隔符:Windows ConPTY 用 \r;Unix PTY 用 \n(不依赖 ICRNL 转换) */
|
|
17
17
|
protected _lineSep: string;
|
|
18
18
|
protected get _extraResult(): Partial<ExecResult>;
|
|
19
|
+
/** 本地会话:发送前语法预检可接 */
|
|
20
|
+
get isLocal(): boolean;
|
|
19
21
|
protected _ready(): boolean;
|
|
20
22
|
protected _write(data: string): void;
|
|
21
23
|
protected _closeTransport(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-session.d.ts","sourceRoot":"","sources":["../src/local-session.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"local-session.d.ts","sourceRoot":"","sources":["../src/local-session.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAK/C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAwED,qBAAa,YAAa,SAAQ,WAAW;IAC3C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,QAAQ,CAAK;IAErB,mEAAmE;IACnE,UAAmB,QAAQ,SAA6C;IAExE,SAAS,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAAc;IAE/D,qBAAqB;IACrB,IAAI,OAAO,IAAI,OAAO,CAAgB;IAEtC,SAAS,CAAC,MAAM,IAAI,OAAO,CAE1B;IAED,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnC;IAED,SAAS,CAAC,eAAe,IAAI,IAAI,CAIhC;IAED;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAkE/F;IAED,SAAS,IAAI,WAAW,CAUvB;CACF"}
|
package/dist/local-session.js
CHANGED
|
@@ -4,6 +4,8 @@ import { INJECT_TIMEOUT_MS, PTY_COLS, PTY_ROWS } from "./constants.js";
|
|
|
4
4
|
import { tr } from "./i18n.js";
|
|
5
5
|
import { BaseSession } from "./base-session.js";
|
|
6
6
|
import log from "./log.js";
|
|
7
|
+
import { delimiter, join } from "node:path";
|
|
8
|
+
import { statSync } from "node:fs";
|
|
7
9
|
/** 命令行字符串拆分为参数数组(Bun.spawn 要求数组形式;支持双/单引号分组) */
|
|
8
10
|
function splitCommand(cmd) {
|
|
9
11
|
const args = [];
|
|
@@ -13,13 +15,82 @@ function splitCommand(cmd) {
|
|
|
13
15
|
args.push(m[1] ?? m[2] ?? m[3]);
|
|
14
16
|
return args;
|
|
15
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* 在 PATH 中查找指定可执行文件,跳过 WindowsApps 下的 Store 执行别名
|
|
20
|
+
*(Bun.spawn 在 service/ConPTY 上下文拉不起该重解析点)。
|
|
21
|
+
* @param names 候选文件名(按优先级)
|
|
22
|
+
* @returns 第一个真实可执行文件路径;找不到返回 null
|
|
23
|
+
*/
|
|
24
|
+
function findRealOnPath(names) {
|
|
25
|
+
// Windows 环境变量实际键名通常是 `Path`;Bun 的 process.env 可能不像 Node 那样大小写不敏感
|
|
26
|
+
const pathEnv = process.env.PATH || process.env.Path || process.env.path || "";
|
|
27
|
+
const dirs = pathEnv.split(delimiter);
|
|
28
|
+
for (const dir of dirs) {
|
|
29
|
+
for (const name of names) {
|
|
30
|
+
const p = join(dir, name);
|
|
31
|
+
try {
|
|
32
|
+
if (!statSync(p).isFile())
|
|
33
|
+
continue;
|
|
34
|
+
if (/[\\/]WindowsApps[\\/]/i.test(p))
|
|
35
|
+
continue; // Store 别名:跳过
|
|
36
|
+
return p;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
/* 不存在/不可访问 */
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Windows 下规范化 PowerShell 启动命令:
|
|
47
|
+
* - 优先找**真实** `pwsh.exe`(跳过 WindowsApps 别名),使用其全路径;
|
|
48
|
+
* - 找不到则回退 `powershell.exe`(5.1),并记一行日志;
|
|
49
|
+
* - 两者都没有时退回 `pwsh.exe`,让上层给出可行动错误。
|
|
50
|
+
* 已有 -NoLogo 不重复添加;非 win32 或非 pwsh 首参原样返回。
|
|
51
|
+
* @param argv 拆分后的命令参数
|
|
52
|
+
* @returns 规范化后的参数
|
|
53
|
+
*/
|
|
54
|
+
function normalizeLocalArgv(argv) {
|
|
55
|
+
if (process.platform !== "win32" || argv.length === 0)
|
|
56
|
+
return argv;
|
|
57
|
+
const exe = argv[0].toLowerCase();
|
|
58
|
+
if (exe !== "pwsh" && exe !== "pwsh.exe")
|
|
59
|
+
return argv;
|
|
60
|
+
const rest = argv.slice(1);
|
|
61
|
+
const addNoLogo = rest.some((a) => a.toLowerCase() === "-nologo") ? [] : ["-NoLogo"];
|
|
62
|
+
const pwsh = findRealOnPath(["pwsh.exe"]);
|
|
63
|
+
if (pwsh)
|
|
64
|
+
return [pwsh, ...addNoLogo, ...rest];
|
|
65
|
+
const psOnPath = findRealOnPath(["powershell.exe"]);
|
|
66
|
+
// PATH 取不到时的绝对兜底(%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe)
|
|
67
|
+
const sysRoot = process.env.SystemRoot || process.env.windir;
|
|
68
|
+
let ps = psOnPath;
|
|
69
|
+
if (!ps && sysRoot) {
|
|
70
|
+
const psDefault = join(sysRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
|
|
71
|
+
try {
|
|
72
|
+
if (statSync(psDefault).isFile())
|
|
73
|
+
ps = psDefault;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
/* 没有 5.1 */
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (ps) {
|
|
80
|
+
log.info("未找到可用的 PowerShell 7(pwsh 仅 Store 别名),回退到 powershell 5.1");
|
|
81
|
+
return [ps, ...addNoLogo, ...rest];
|
|
82
|
+
}
|
|
83
|
+
return ["pwsh.exe", ...addNoLogo, ...rest];
|
|
84
|
+
}
|
|
16
85
|
export class LocalSession extends BaseSession {
|
|
17
86
|
_term = null;
|
|
18
87
|
_proc = null;
|
|
19
88
|
_program = "";
|
|
20
|
-
/** Windows ConPTY
|
|
21
|
-
_lineSep = "\r";
|
|
89
|
+
/** 本地 PTY 提交分隔符:Windows ConPTY 用 \r;Unix PTY 用 \n(不依赖 ICRNL 转换) */
|
|
90
|
+
_lineSep = process.platform === "win32" ? "\r" : "\n";
|
|
22
91
|
get _extraResult() { return {}; }
|
|
92
|
+
/** 本地会话:发送前语法预检可接 */
|
|
93
|
+
get isLocal() { return true; }
|
|
23
94
|
_ready() {
|
|
24
95
|
return this._connected && this._term !== null && this._adapter !== null;
|
|
25
96
|
}
|
|
@@ -47,7 +118,7 @@ export class LocalSession extends BaseSession {
|
|
|
47
118
|
// 内联 terminal 选项:让 Bun 走 terminal_info 路径、向子进程传 pty_slave_fd,
|
|
48
119
|
// 子进程才能 setsid+TIOCSCTTY 取得自己的控制终端。若改为传入已 new 出的 Terminal 对象,
|
|
49
120
|
// Bun 不传该 fd,子进程会沿用 opencode TUI 的 pts,导致 sudo 等读 /dev/tty 的程序抢占 TUI 屏幕/键盘。
|
|
50
|
-
const proc = Bun.spawn(splitCommand(opts.command), {
|
|
121
|
+
const proc = Bun.spawn(normalizeLocalArgv(splitCommand(opts.command)), {
|
|
51
122
|
cwd: opts.cwd,
|
|
52
123
|
terminal: {
|
|
53
124
|
cols: PTY_COLS,
|
|
@@ -99,7 +170,14 @@ export class LocalSession extends BaseSession {
|
|
|
99
170
|
const msg = e instanceof Error ? e.message : String(e);
|
|
100
171
|
log.error(`本地终端启动失败 ${opts.command} (session ${this.sessionID}, term ${this.name})`, msg);
|
|
101
172
|
this.close();
|
|
102
|
-
|
|
173
|
+
// 把底层 EPIPE/ENOENT 转成可行动提示(原始错误附后,便于排障)
|
|
174
|
+
let friendly = msg;
|
|
175
|
+
if (/EPIPE|broken pipe/i.test(msg))
|
|
176
|
+
friendly = `${tr("local_start_epipe", this._lang)}: ${msg}`;
|
|
177
|
+
else if (/ENOENT|Executable not found|not found in \$PATH/i.test(msg)) {
|
|
178
|
+
friendly = `${tr("local_start_not_found", this._lang).replace("{cmd}", opts.command)}: ${msg}`;
|
|
179
|
+
}
|
|
180
|
+
return { ok: false, error: friendly };
|
|
103
181
|
}
|
|
104
182
|
}
|
|
105
183
|
getStatus() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-session.js","sourceRoot":"","sources":["../src/local-session.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,2CAA2C;AAE3C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,GAAG,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"local-session.js","sourceRoot":"","sources":["../src/local-session.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts
CHANGED
|
@@ -61,6 +61,14 @@ export declare function describeSend(payload: string): string;
|
|
|
61
61
|
* @param windowMs 去重窗口(默认 3000ms)
|
|
62
62
|
*/
|
|
63
63
|
export declare function infoDedup(key: string, msg: string, windowMs?: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* 清理过期的跨进程去重标记文件(默认 7 天)。
|
|
66
|
+
* `.log-dedup` 的 key 可能含动态 ws 端口/连接序号,长期运行会累积;文件只存 `{ts,count}`,
|
|
67
|
+
* 过期删除不影响功能(下次命中窗口会重新创建)。读/删失败静默忽略,绝不阻断日志或插件。
|
|
68
|
+
* @param maxAgeMs 最大保留时长(毫秒)
|
|
69
|
+
* @returns 无
|
|
70
|
+
*/
|
|
71
|
+
export declare function sweepDedupDir(maxAgeMs?: number): void;
|
|
64
72
|
/**
|
|
65
73
|
* 跨进程短窗去重:多个 opencode 插件实例(各自独立进程)写同一日志文件时,
|
|
66
74
|
* 用共享目录下的标记文件记录上次输出时刻与合并计数,窗口内的重复只记一次;
|
package/dist/log.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAqBA,QAAA,MAAM,GAAG,uDAAoC,CAAA;AAoC7C;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGvC;AAKD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,MAAM,CAIlD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,MAAM,CAQpD;AAUD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWpD;AAkBD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAkB,GAAG,IAAI,CAgBpF;
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAqBA,QAAA,MAAM,GAAG,uDAAoC,CAAA;AAoC7C;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGvC;AAKD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,MAAM,CAIlD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,MAAM,CAQpD;AAUD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWpD;AAkBD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAkB,GAAG,IAAI,CAgBpF;AAgBD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,SAAmB,GAAG,IAAI,CAc/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,IAAI,CA6C/E;eAEc,GAAG"}
|
package/dist/log.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// 把受影响的 `<主会话ID>/<终端名>` 列表打进同一行。独立服务是另一进程,只能看到 key=`sid:name`,
|
|
14
14
|
// 拿不到 opencode 会话之外的上下文(其日志可按 sid 过滤,但无法按插件进程过滤)。
|
|
15
15
|
import createLogger from "@xiaoqiong0v0/opencode-plugin-logger";
|
|
16
|
-
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
17
17
|
import { homedir } from "node:os";
|
|
18
18
|
import { join } from "node:path";
|
|
19
19
|
import { stripAnsi } from "./ansi.js";
|
|
@@ -202,6 +202,33 @@ function dedupSafeName(key) {
|
|
|
202
202
|
}
|
|
203
203
|
/** 已排定"窗口结束回补汇总"定时器的跨进程 key(避免同进程重复排定) */
|
|
204
204
|
const sharedTimerKeys = new Set();
|
|
205
|
+
/** 去重标记文件最长保留时间(7 天):只影响跨进程去重状态,删除安全 */
|
|
206
|
+
const DEDUP_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
207
|
+
/**
|
|
208
|
+
* 清理过期的跨进程去重标记文件(默认 7 天)。
|
|
209
|
+
* `.log-dedup` 的 key 可能含动态 ws 端口/连接序号,长期运行会累积;文件只存 `{ts,count}`,
|
|
210
|
+
* 过期删除不影响功能(下次命中窗口会重新创建)。读/删失败静默忽略,绝不阻断日志或插件。
|
|
211
|
+
* @param maxAgeMs 最大保留时长(毫秒)
|
|
212
|
+
* @returns 无
|
|
213
|
+
*/
|
|
214
|
+
export function sweepDedupDir(maxAgeMs = DEDUP_MAX_AGE_MS) {
|
|
215
|
+
try {
|
|
216
|
+
for (const name of readdirSync(SHARED_DEDUP_DIR)) {
|
|
217
|
+
const file = join(SHARED_DEDUP_DIR, name);
|
|
218
|
+
try {
|
|
219
|
+
const st = statSync(file);
|
|
220
|
+
if (st.isFile() && Date.now() - st.mtimeMs > maxAgeMs)
|
|
221
|
+
rmSync(file, { force: true });
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
/* 单个文件被占用/已删除:跳过 */
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
/* 目录不存在:忽略 */
|
|
230
|
+
}
|
|
231
|
+
}
|
|
205
232
|
/**
|
|
206
233
|
* 跨进程短窗去重:多个 opencode 插件实例(各自独立进程)写同一日志文件时,
|
|
207
234
|
* 用共享目录下的标记文件记录上次输出时刻与合并计数,窗口内的重复只记一次;
|
package/dist/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,uDAAuD;AACvD,iFAAiF;AACjF,yDAAyD;AACzD,wFAAwF;AACxF,sFAAsF;AACtF,sFAAsF;AACtF,6CAA6C;AAC7C,2EAA2E;AAC3E,6FAA6F;AAC7F,uDAAuD;AACvD,4DAA4D;AAC5D,iEAAiE;AACjE,oDAAoD;AACpD,OAAO,YAAY,MAAM,sCAAsC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type ParseIssue = {
|
|
2
|
+
errorId: string;
|
|
3
|
+
line: number;
|
|
4
|
+
col: number;
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
export type ParseCheckResult = {
|
|
8
|
+
ok: true;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
errors: ParseIssue[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 发送前校验命令语法(不执行命令)。
|
|
15
|
+
* @param shell 目标 shell 标识(pwsh/powershell → PowerShell;bash/zsh → `-n`;含 wsl 视为 bash 走 WSL)
|
|
16
|
+
* @param text 待校验的命令文本(原样,不做任何归一化)
|
|
17
|
+
* @returns 通过 `{ok:true}`;有语法错误 `{ok:false, errors}`;不支持或解析器不可用一律 `{ok:true}`
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateCommand(shell: string, text: string): Promise<ParseCheckResult>;
|
|
20
|
+
//# sourceMappingURL=parse-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-check.d.ts","sourceRoot":"","sources":["../src/parse-check.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AACrF,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AA2FjF;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAa5F"}
|