@xiaoqiong0v0/opencode-ssh-tool 0.6.0 → 0.6.2

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/utils.js CHANGED
@@ -1,6 +1,12 @@
1
1
  // 工具函数:命令回显定位、模型文本清理、ANSI 清洗、CR 覆盖合并、完成标记剥离
2
- import { stripMarkers } from "./shell-adapter.js";
2
+ import headless from "@xterm/headless";
3
+ import { PTY_COLS, PTY_ROWS, TERM_SCROLLBACK_LINES } from "./constants.js";
3
4
  import { findLastEndOfBefore } from "./last-match.js";
5
+ import { stripMarkers } from "./shell-adapter.js";
6
+ /** headless 终端构造器(@xterm/headless 为 CommonJS,Node ESM 无法静态识别其具名导出,故从默认导出解构) */
7
+ const { Terminal: TerminalCtor } = headless;
8
+ /** headless 写入回调等待上限(毫秒):超时按已解析内容读取,避免极端情况下永久挂起 */
9
+ const HEADLESS_WRITE_TIMEOUT_MS = 10_000;
4
10
  /** 正则转义文本 */
5
11
  const escRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
6
12
  /** 命令回显匹配的宽松字符间隙(ANSI 序列或普通空白/换行,可插在命令字符之间;容忍终端列宽自动换行) */
@@ -55,7 +61,7 @@ export function extractOutputStart(raw, command, endBound = raw.length) {
55
61
  * 命中后切到"命令文本结束处":zsh 下程序输出可能直接粘连在回显尾(无换行),不能按换行截断。
56
62
  * @param raw 原始终端流(含 ANSI)
57
63
  * @param command 本次执行的命令文本
58
- * @returns 纯程序输出原始流(保留程序自身的 ANSI 颜色/进度条,供 web TermScreen 与模型 toModelText)
64
+ * @returns 纯程序输出原始流(保留程序自身的 ANSI 颜色/进度条,供 web HeadlessScreen 与模型 toModelText)
59
65
  */
60
66
  export function extractOutput(raw, command) {
61
67
  const end = extractOutputStart(raw, command);
@@ -64,245 +70,63 @@ export function extractOutput(raw, command) {
64
70
  return raw.slice(end).replace(/^[\r\n]+/, "");
65
71
  }
66
72
  /**
67
- * 把原始终端流转为给模型看的干净文本:模拟终端屏幕(处理光标移动/清行/覆盖/退格/SGR/OSC),
68
- * 输出最终屏幕各行文本,再逐行去尾空白并剔除空行。比纯文本正则更鲁棒地处理 PSReadLine
69
- * 行内重绘、进度条 \r 覆盖等场景。
73
+ * 把原始终端流转为给模型看的干净文本:用 xterm headless 引擎忠实模拟终端屏幕
74
+ * (处理光标移动/清行/清屏/覆盖/退格/SGR/OSC,含 scrollback),再逐行去尾空白并剔除空行。
75
+ * 比纯文本正则更鲁棒地处理 PSReadLine 行内重绘、进度条 \r 覆盖等场景。
70
76
  * @param raw 原始终端流(含 ANSI)
71
- * @returns 纯文本输出(供模型消费 / exec 返回值 / read 命令)
77
+ * @returns Promise:纯文本输出(供模型消费 / exec 返回值 / read 命令);write 为异步,故返回 Promise
72
78
  */
73
- export function toModelText(raw) {
74
- const screen = simulateScreen(stripMarkers(raw));
75
- return screen
76
- .split(/\r?\n/)
77
- .map((l) => l.replace(/\r/g, "").trimEnd())
78
- .filter((l) => l !== "")
79
- .join("\n");
79
+ export async function toModelText(raw) {
80
+ const term = createHeadlessTerminal();
81
+ try {
82
+ await writeHeadless(term, stripMarkers(raw));
83
+ const buf = term.buffer.active;
84
+ const lines = [];
85
+ // 从最早仍保留的行(含 scrollback)读到末行;行尾去尾空白、保留行内空白
86
+ for (let i = 0; i < buf.length; i++)
87
+ lines.push(buf.getLine(i)?.translateToString(true) ?? "");
88
+ return lines
89
+ .map((l) => l.replace(/\r/g, "").trimEnd())
90
+ .filter((l) => l !== "")
91
+ .join("\n");
92
+ }
93
+ finally {
94
+ term.dispose();
95
+ }
80
96
  }
81
97
  /**
82
- * 模拟终端屏幕渲染:处理 ANSI 光标/清行/清屏/退格/覆盖,输出最终各行的文本。
83
- * 不保留颜色/SGR,仅提取各行已写字符的最右列,确保最终屏幕文本与真实终端显示一致。
84
- * @param s 原始字节流(含 ANSI、\b、\r 等)
85
- * @returns 按行拼接的纯文本(行间 \n 分隔,行内保留空格)
98
+ * 建一个 headless 终端:固定 PTY 尺寸 + scrollback,并开启 proposed API(访问 term.buffer 必需)
99
+ * @returns 新的 headless Terminal 实例
86
100
  */
87
- function simulateScreen(s) {
88
- // 网格:每行 { maxCol: 已写最右列, cols: Map<col, char> }
89
- const rows = [];
90
- let r = 0; // 当前行
91
- let c = 0; // 当前列
92
- let sr = 0; // 保存的光标行(ESC 7 / CSI s)
93
- let sc = 0; // 保存的光标列
94
- let altRows = null; // 备屏保存(CSI ?1049h/l)
95
- const COLS = 240; // 足够宽
96
- const row = (i) => {
97
- while (rows.length <= i)
98
- rows.push({ maxCol: 0, cols: new Map() });
99
- return rows[i];
100
- };
101
- const put = (ch) => {
102
- const cur = row(r);
103
- if (c < COLS) {
104
- cur.cols.set(c, ch);
105
- if (c >= cur.maxCol)
106
- cur.maxCol = c + 1;
107
- }
108
- c++;
109
- };
110
- let i = 0;
111
- const n = s.length;
112
- while (i < n) {
113
- const ch = s[i];
114
- if (ch === "\x1b") {
115
- // OSC: ESC ] ... BEL/ESC\ — 整段丢弃
116
- if (i + 1 < n && s[i + 1] === "]") {
117
- let j = i + 2;
118
- while (j < n && s[j] !== "\x07" && !(s[j] === "\x1b" && j + 1 < n && s[j + 1] === "\\"))
119
- j++;
120
- if (j >= n)
121
- break;
122
- i = s[j] === "\x07" ? j + 1 : j + 2;
123
- continue;
124
- }
125
- // CSI: ESC [ params... final
126
- if (i + 1 < n && s[i + 1] === "[") {
127
- let j = i + 2;
128
- const start = j;
129
- while (j < n && !/[A-Za-z@]/.test(s[j]))
130
- j++;
131
- if (j >= n)
132
- break;
133
- const body = s.slice(start, j);
134
- const final = s[j];
135
- const p = (d) => { const v = parseInt(d, 10); return Number.isFinite(v) && v > 0 ? v : 1; };
136
- const va = (d) => { const v = parseInt(d, 10); return Number.isFinite(v) && v >= 0 ? v : 0; };
137
- if (final === "m") {
138
- // SGR:忽略颜色
139
- }
140
- else if (final === "A") {
141
- r = Math.max(0, r - p(body));
142
- }
143
- else if (final === "B") {
144
- r += p(body);
145
- }
146
- else if (final === "C") {
147
- c = Math.min(COLS - 1, c + p(body));
148
- }
149
- else if (final === "D") {
150
- c = Math.max(0, c - p(body));
151
- }
152
- else if (final === "H" || final === "f") {
153
- const m = body.split(";");
154
- r = Math.max(0, (p(m[0]) - 1));
155
- c = Math.max(0, (p(m[1]) - 1));
156
- }
157
- else if (final === "G" || final.charCodeAt(0) === 96) {
158
- c = Math.max(0, p(body) - 1);
159
- }
160
- else if (final === "d") {
161
- r = Math.max(0, p(body) - 1);
162
- }
163
- else if (final === "s") {
164
- sr = r;
165
- sc = c;
166
- }
167
- else if (final === "u") {
168
- r = Math.min(sr, rows.length - 1);
169
- c = sc;
170
- }
171
- else if (final === "h" && body.startsWith("?")) {
172
- // 私有模式 set:?1049h 进入备屏(保存主屏+光标,清屏)
173
- if (va(body.slice(1)) === 1049) {
174
- altRows = rows.map((x) => ({ maxCol: x.maxCol, cols: new Map(x.cols) }));
175
- sr = r;
176
- sc = c;
177
- rows.length = 0;
178
- r = 0;
179
- c = 0;
180
- }
181
- }
182
- else if (final === "l" && body.startsWith("?")) {
183
- // 私有模式 reset:?1049l 退出备屏(恢复主屏+光标)
184
- if (va(body.slice(1)) === 1049 && altRows) {
185
- rows.length = 0;
186
- rows.push(...altRows);
187
- altRows = null;
188
- r = Math.min(sr, rows.length - 1);
189
- c = sc;
190
- }
191
- }
192
- else if (final === "K") {
193
- const mode = va(body);
194
- const curRow = row(r);
195
- if (mode === 2) {
196
- curRow.cols.clear();
197
- curRow.maxCol = 0;
198
- }
199
- else if (mode === 1) {
200
- for (let ci = 0; ci <= c; ci++) {
201
- curRow.cols.delete(ci);
202
- }
203
- ;
204
- curRow.maxCol = 0;
205
- }
206
- else {
207
- for (let ci = c; ci < COLS; ci++) {
208
- curRow.cols.delete(ci);
209
- }
210
- ;
211
- curRow.maxCol = Math.min(curRow.maxCol, c);
212
- }
213
- }
214
- else if (final === "J") {
215
- const mode = va(body);
216
- if (mode === 2 || mode === 3) {
217
- rows.length = 0;
218
- r = 0;
219
- c = 0;
220
- }
221
- else if (mode === 1) {
222
- rows.length = 0;
223
- r = 0;
224
- c = 0;
225
- }
226
- else {
227
- const cur = row(r);
228
- for (let ci = c; ci < COLS; ci++)
229
- cur.cols.delete(ci);
230
- cur.maxCol = Math.min(cur.maxCol, c);
231
- rows.length = r + 1;
232
- }
233
- }
234
- // 其余 CSI(滚动/插入/删除等)忽略
235
- i = j + 1;
236
- continue;
237
- }
238
- // ESC 7 保存光标 / ESC 8 恢复光标
239
- if (s[i + 1] === "7") {
240
- sr = r;
241
- sc = c;
242
- i += 2;
243
- continue;
244
- }
245
- if (s[i + 1] === "8") {
246
- r = Math.min(sr, rows.length - 1);
247
- c = sc;
248
- i += 2;
249
- continue;
250
- }
251
- // 其他 ESC 序列忽略
252
- i += 2;
253
- continue;
254
- }
255
- if (ch === "\r") {
256
- c = 0;
257
- i++;
258
- continue;
259
- }
260
- if (ch === "\n") {
261
- r++;
262
- c = 0;
263
- i++;
264
- continue;
265
- }
266
- if (ch === "\b") {
267
- if (c > 0)
268
- c--;
269
- i++;
270
- continue;
271
- }
272
- if (ch === "\t") {
273
- const next = (Math.floor(c / 8) + 1) * 8;
274
- if (next >= COLS) {
275
- r++;
276
- c = 0;
277
- }
278
- else
279
- c = next;
280
- i++;
281
- continue;
282
- }
283
- // 其他控制字符(\x07 BEL 等)跳过
284
- if (ch.charCodeAt(0) < 32) {
285
- i++;
286
- continue;
287
- }
288
- put(ch);
289
- i++;
290
- }
291
- // 构建输出行
292
- const lines = [];
293
- for (let ri = 0; ri < rows.length; ri++) {
294
- const cur = rows[ri];
295
- if (cur.maxCol === 0) {
296
- lines.push("");
297
- continue;
298
- }
299
- let line = "";
300
- for (let ci = 0; ci < cur.maxCol; ci++) {
301
- line += cur.cols.get(ci) ?? " ";
302
- }
303
- lines.push(line);
304
- }
305
- return lines.join("\n");
101
+ function createHeadlessTerminal() {
102
+ return new TerminalCtor({
103
+ cols: PTY_COLS,
104
+ rows: PTY_ROWS,
105
+ scrollback: TERM_SCROLLBACK_LINES,
106
+ allowProposedApi: true,
107
+ });
108
+ }
109
+ /**
110
+ * 向 headless 终端写入并等待解析完成:write 回调触发即兑现,超过超时上限(极端情况守卫)亦兑现
111
+ * @param term headless 终端
112
+ * @param data 待写入的原始流(含 ANSI)
113
+ * @returns Promise:解析完成(或超时)后兑现
114
+ */
115
+ function writeHeadless(term, data) {
116
+ return new Promise((resolve) => {
117
+ let settled = false;
118
+ const done = () => {
119
+ if (settled)
120
+ return;
121
+ settled = true;
122
+ resolve();
123
+ };
124
+ const timer = setTimeout(done, HEADLESS_WRITE_TIMEOUT_MS);
125
+ term.write(data, () => {
126
+ clearTimeout(timer);
127
+ done();
128
+ });
129
+ });
306
130
  }
307
131
  /**
308
132
  * 末尾空白清理(原为提示符剥离,现仅做清理,不依赖正则匹配具体提示符形状)
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}