yuangs 5.3.0 → 5.8.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 CHANGED
@@ -115,6 +115,28 @@ ai "@src/**/*.ts #docs"
115
115
  ✅ **可解释、可治理**
116
116
  通过 `explain` 和 `replay` 命令,理解系统决策过程。
117
117
 
118
+ ✅ **AI Governance Web Console (Beta)**
119
+ 可视化治理面板,提供 R3 级风险的全屏阻断与视觉警报。
120
+
121
+ ---
122
+
123
+ ## 🏗️ 架构概览 (Architecture)
124
+
125
+ ```mermaid
126
+ graph TD
127
+ User([用户 User]) -- "yuangs ssh --web" --> CLI[yuangs Local CLI]
128
+ subgraph LocalMachine [本地电脑]
129
+ CLI --> Express[Express Web Server]
130
+ Express -- "1. WebSocket (Text/Events)" --> WebUI[Web Terminal / xterm.js]
131
+ Express -- "2. Local Governance" --> GovEngine[Governance Engine]
132
+ GovEngine -- "3. SSH Connection" --> SSHSession[SSHSession / PTY]
133
+ end
134
+ SSHSession -- "Encrypted Tunnel" --> RemoteServer[远程服务器 Remote Server]
135
+
136
+ GovEngine -- "Intercept / Block" --> WebUI
137
+ SSHSession -- "Recording" --> CastFile[.cast / .md Audit Logs]
138
+ ```
139
+
118
140
  ---
119
141
 
120
142
  ## 适合谁?
@@ -478,6 +500,15 @@ Snapshots 可用于:
478
500
  - ✅ 文档示例
479
501
  - ✅ 审计线索
480
502
 
503
+ ### 4. 终端录制与审计 (.cast)
504
+
505
+ Yuangs 采用标准的 [asciinema](https://asciinema.org/) 兼容格式进行会话录制。
506
+
507
+ **审计日志包含:**
508
+ - **行为流**:完整的终端输入/输出,支持 `replay`。
509
+ - **治理上下文**:记录哪些命令被拦截、哪些被批准。
510
+ - **AI 摘要**:自动为繁杂的操作记录生成可阅读的 Markdown 摘要。
511
+
481
512
  ---
482
513
 
483
514
  ## 💡 使用场景示例
@@ -706,7 +737,5 @@ yuangs diff-edit status <id> # Check action status
706
737
 
707
738
  ---
708
739
 
709
- *此内容由插件自主更新*
710
-
711
740
  diff-edit使本项目有了质的变化。^-^
712
741
 
@@ -41,6 +41,7 @@ const SSHSession_1 = require("../../ssh/SSHSession");
41
41
  const InputBuffer_1 = require("../../ssh/InputBuffer");
42
42
  const GovernedExecutor_1 = require("../../ssh/GovernedExecutor");
43
43
  const Recorder_1 = require("../../audit/Recorder");
44
+ const server_1 = require("./server");
44
45
  /**
45
46
  * 简单的治理服务实现 (MVP)
46
47
  * TODO: 接入完整的 GovernanceService
@@ -131,6 +132,138 @@ function parseSSHString(connectionString) {
131
132
  port: port ? parseInt(port, 10) : 22,
132
133
  };
133
134
  }
135
+ /**
136
+ /**
137
+ * 准备 SSH 配置
138
+ */
139
+ async function prepareSSHConfig(connection, options) {
140
+ // 解析连接字符串
141
+ const parsed = parseSSHString(connection);
142
+ // 尝试加载配置
143
+ const savedConfig = loadSSHConfig(parsed.host);
144
+ const config = {
145
+ host: parsed.host,
146
+ username: parsed.username,
147
+ port: parseInt(options.port, 10) || parsed.port || 22,
148
+ };
149
+ // 处理认证
150
+ if (options.identity) {
151
+ config.privateKey = fs.readFileSync(options.identity, 'utf-8');
152
+ }
153
+ else if (savedConfig?.privateKey) {
154
+ config.privateKey = fs.readFileSync(savedConfig.privateKey, 'utf-8');
155
+ }
156
+ else if (options.password) {
157
+ config.password = options.password;
158
+ }
159
+ else if (savedConfig?.password) {
160
+ config.password = savedConfig.password;
161
+ }
162
+ else {
163
+ // 尝试默认密钥
164
+ const defaultKeyPath = path.join(os.homedir(), '.ssh', 'id_rsa');
165
+ if (fs.existsSync(defaultKeyPath)) {
166
+ config.privateKey = fs.readFileSync(defaultKeyPath, 'utf-8');
167
+ }
168
+ else {
169
+ throw new Error('No authentication method provided');
170
+ }
171
+ }
172
+ return config;
173
+ }
174
+ /**
175
+ * 启动命令行终端
176
+ */
177
+ async function startCommandLineTerminal(connection, config) {
178
+ console.log(`🔐 Connecting to ${config.username}@${config.host}:${config.port}...`);
179
+ // 创建 SSH 会话
180
+ const session = new SSHSession_1.SSHSession();
181
+ await session.connect(config);
182
+ console.log(`✅ Connected to ${config.host}`);
183
+ console.log(`🛡️ AI Governance enabled`);
184
+ // 获取初始终端尺寸
185
+ const width = process.stdout.columns || 80;
186
+ const height = process.stdout.rows || 24;
187
+ // 初始化录像机
188
+ const recorder = new Recorder_1.Recorder({
189
+ user: config.username,
190
+ host: config.host,
191
+ width,
192
+ height,
193
+ command: `yuangs ssh ${connection}`
194
+ });
195
+ console.log(`📝 Session recording started: ${recorder.getFilePath()}\n`);
196
+ // 创建治理服务
197
+ const governance = new SimpleGovernanceService();
198
+ // 创建治理执行器 (传入 recorder)
199
+ const executor = new GovernedExecutor_1.SSHGovernedExecutor(session, governance, recorder);
200
+ // 创建输入缓冲区
201
+ const inputBuffer = new InputBuffer_1.InputBuffer();
202
+ // 追踪当前行已发送给服务器的字符
203
+ let lineBuffer = '';
204
+ // 处理终端 resize
205
+ // 关键: 同时更新 SSH PTY 和 录像机
206
+ process.stdout.on('resize', () => {
207
+ const { columns, rows } = process.stdout;
208
+ const w = columns || 80;
209
+ const h = rows || 24;
210
+ session.resize(w, h);
211
+ recorder.recordResize(w, h);
212
+ });
213
+ // 设置原始模式
214
+ if (process.stdin.isTTY) {
215
+ process.stdin.setRawMode(true);
216
+ }
217
+ process.stdin.resume();
218
+ // 处理用户输入
219
+ process.stdin.on('data', async (chunk) => {
220
+ const input = chunk.toString();
221
+ // 检查是否是完整命令
222
+ const cmd = inputBuffer.push(input);
223
+ if (cmd !== null) {
224
+ // 检测到完整命令
225
+ // 对已发送缓冲区进行 Backspace 处理,以匹配 cmd 的格式
226
+ const processedLineBuffer = InputBuffer_1.InputBuffer.processBackspace(lineBuffer);
227
+ // 计算 unsentCommand
228
+ let unsent = '';
229
+ if (cmd.startsWith(processedLineBuffer)) {
230
+ unsent = cmd.slice(processedLineBuffer.length);
231
+ }
232
+ else {
233
+ // 如果 buffer 不匹配 (极其罕见), 全量重发以防万一
234
+ unsent = cmd;
235
+ }
236
+ // 完整命令: 进入治理流程
237
+ await executor.handleCommand(cmd, config.host, config.username, unsent);
238
+ // 清空已发送缓冲区
239
+ lineBuffer = '';
240
+ }
241
+ else {
242
+ // 非完整命令: 直接透传 (打字体验)
243
+ // 也要记录输入! 否则回放时看不到打字过程
244
+ // 注意: 这里记录的是原始按键 (比如 'l', 's', Backspace 等)
245
+ // 只有当 GovernedExecutor.isSensitive() 为 false 时才记录
246
+ if (!executor.isSensitive()) {
247
+ recorder.recordInput(input);
248
+ }
249
+ session.write(chunk);
250
+ lineBuffer += input;
251
+ }
252
+ });
253
+ // 处理会话关闭
254
+ session.on('close', () => {
255
+ recorder.close();
256
+ console.log('\n\n🔌 Connection closed');
257
+ process.exit(0);
258
+ });
259
+ // 处理 Ctrl+C
260
+ process.on('SIGINT', () => {
261
+ recorder.close();
262
+ console.log('\n\n👋 Disconnecting...');
263
+ session.close();
264
+ process.exit(0);
265
+ });
266
+ }
134
267
  /**
135
268
  * SSH 命令实现
136
269
  */
@@ -141,127 +274,16 @@ function registerSSHCommand(program) {
141
274
  .option('-p, --port <port>', 'SSH port', '22')
142
275
  .option('-i, --identity <file>', 'Private key file')
143
276
  .option('--password <password>', 'Password (not recommended)')
277
+ .option('--web', 'Launch in web-based terminal (Beta)', false)
144
278
  .action(async (connection, options) => {
145
279
  try {
146
- // 解析连接字符串
147
- const parsed = parseSSHString(connection);
148
- // 尝试加载配置
149
- const savedConfig = loadSSHConfig(parsed.host);
150
- // 合并配置
151
- const config = {
152
- host: parsed.host,
153
- username: parsed.username,
154
- port: parseInt(options.port, 10) || parsed.port || 22,
155
- };
156
- // 处理认证
157
- if (options.identity) {
158
- config.privateKey = fs.readFileSync(options.identity, 'utf-8');
159
- }
160
- else if (savedConfig?.privateKey) {
161
- config.privateKey = fs.readFileSync(savedConfig.privateKey, 'utf-8');
162
- }
163
- else if (options.password) {
164
- config.password = options.password;
165
- }
166
- else if (savedConfig?.password) {
167
- config.password = savedConfig.password;
280
+ const config = await prepareSSHConfig(connection, options);
281
+ if (options.web) {
282
+ await (0, server_1.startWebTerminal)(config);
168
283
  }
169
284
  else {
170
- // 尝试默认密钥
171
- const defaultKeyPath = path.join(os.homedir(), '.ssh', 'id_rsa');
172
- if (fs.existsSync(defaultKeyPath)) {
173
- config.privateKey = fs.readFileSync(defaultKeyPath, 'utf-8');
174
- }
175
- else {
176
- throw new Error('No authentication method provided');
177
- }
285
+ await startCommandLineTerminal(connection, config);
178
286
  }
179
- console.log(`🔐 Connecting to ${config.username}@${config.host}:${config.port}...`);
180
- // 创建 SSH 会话
181
- const session = new SSHSession_1.SSHSession();
182
- await session.connect(config);
183
- console.log(`✅ Connected to ${config.host}`);
184
- console.log(`🛡️ AI Governance enabled`);
185
- // 获取初始终端尺寸
186
- const width = process.stdout.columns || 80;
187
- const height = process.stdout.rows || 24;
188
- // 初始化录像机
189
- const recorder = new Recorder_1.Recorder({
190
- user: config.username,
191
- host: config.host,
192
- width,
193
- height,
194
- command: `yuangs ssh ${connection}`
195
- });
196
- console.log(`📝 Session recording started: ${recorder.getFilePath()}\n`);
197
- // 创建治理服务
198
- const governance = new SimpleGovernanceService();
199
- // 创建治理执行器 (传入 recorder)
200
- const executor = new GovernedExecutor_1.SSHGovernedExecutor(session, governance, recorder);
201
- // 创建输入缓冲区
202
- const inputBuffer = new InputBuffer_1.InputBuffer();
203
- // 追踪当前行已发送给服务器的字符
204
- let lineBuffer = '';
205
- // 处理终端 resize
206
- // 关键: 同时更新 SSH PTY 和 录像机
207
- process.stdout.on('resize', () => {
208
- const { columns, rows } = process.stdout;
209
- const w = columns || 80;
210
- const h = rows || 24;
211
- session.resize(w, h);
212
- recorder.recordResize(w, h);
213
- });
214
- // 设置原始模式
215
- if (process.stdin.isTTY) {
216
- process.stdin.setRawMode(true);
217
- }
218
- process.stdin.resume();
219
- // 处理用户输入
220
- process.stdin.on('data', async (chunk) => {
221
- const input = chunk.toString();
222
- // 检查是否是完整命令
223
- const cmd = inputBuffer.push(input);
224
- if (cmd !== null) {
225
- // 检测到完整命令
226
- // 计算 unsentCommand
227
- let unsent = '';
228
- if (cmd.startsWith(lineBuffer)) {
229
- unsent = cmd.slice(lineBuffer.length);
230
- }
231
- else {
232
- // 如果 buffer 不匹配 (极其罕见), 全量重发以防万一
233
- unsent = cmd;
234
- }
235
- // 完整命令: 进入治理流程
236
- await executor.handleCommand(cmd, config.host, config.username, unsent);
237
- // 清空已发送缓冲区
238
- lineBuffer = '';
239
- }
240
- else {
241
- // 非完整命令: 直接透传 (打字体验)
242
- // 也要记录输入! 否则回放时看不到打字过程
243
- // 注意: 这里记录的是原始按键 (比如 'l', 's', Backspace 等)
244
- // 只有当 GovernedExecutor.isSensitive() 为 false 时才记录
245
- if (!executor.isSensitive()) {
246
- recorder.recordInput(input);
247
- }
248
- session.write(chunk);
249
- lineBuffer += input;
250
- }
251
- });
252
- // 处理会话关闭
253
- session.on('close', () => {
254
- recorder.close();
255
- console.log('\n\n🔌 Connection closed');
256
- process.exit(0);
257
- });
258
- // 处理 Ctrl+C
259
- process.on('SIGINT', () => {
260
- recorder.close();
261
- console.log('\n\n👋 Disconnecting...');
262
- session.close();
263
- process.exit(0);
264
- });
265
287
  }
266
288
  catch (error) {
267
289
  console.error(`❌ SSH connection failed: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/ssh/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/ssh/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function startWebTerminal(config: any, port?: number): Promise<void>;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startWebTerminal = startWebTerminal;
7
+ const express_1 = __importDefault(require("express"));
8
+ const http_1 = require("http");
9
+ const socket_io_1 = require("socket.io");
10
+ const open_1 = __importDefault(require("open"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const SSHSession_1 = require("../../ssh/SSHSession");
13
+ const GovernedExecutor_1 = require("../../ssh/GovernedExecutor");
14
+ const InputBuffer_1 = require("../../ssh/InputBuffer");
15
+ async function startWebTerminal(config, port = 3000) {
16
+ const app = (0, express_1.default)();
17
+ const httpServer = (0, http_1.createServer)(app);
18
+ const io = new socket_io_1.Server(httpServer);
19
+ // Fix path resolution: dist/commands/ssh -> ../../../public
20
+ const publicPath = path_1.default.join(__dirname, '../../../public');
21
+ console.log(`📂 Serving static files from: ${publicPath}`);
22
+ app.use(express_1.default.static(publicPath));
23
+ io.on('connection', async (socket) => {
24
+ console.log('🌐 Browser connected to yuangs-web-term');
25
+ const session = new SSHSession_1.SSHSession();
26
+ const inputBuffer = new InputBuffer_1.InputBuffer();
27
+ // 这里接入你现有的治理服务逻辑
28
+ const governance = {
29
+ evaluate: async (ctx) => {
30
+ const cmd = ctx.command.trim();
31
+ // 1. 通知前端:AI 正在思考 (增加延迟模拟深度分析)
32
+ socket.emit('governance_evaluating', {
33
+ command: cmd,
34
+ timestamp: new Date().toLocaleTimeString()
35
+ });
36
+ // 模拟 AI 神经网络分析延迟
37
+ await new Promise(r => setTimeout(r, 400));
38
+ // 2. 简单的危险检测逻辑 (用于演示视觉效果)
39
+ const dangerousPatterns = [
40
+ { regex: /rm\s+-rf\s+\//, reason: '非法的文件系统根目录删除尝试', impact: '系统将彻底崩溃', risk: 'R3' },
41
+ { regex: /mkfs/, reason: '格式化磁盘尝试', impact: '磁盘数据将全部丢失', risk: 'R3' },
42
+ { regex: /dd\s+if=.*of=\/dev\//, reason: '底层设备写覆盖尝试', impact: '可能破坏引导扇区', risk: 'R3' }
43
+ ];
44
+ for (const p of dangerousPatterns) {
45
+ if (p.regex.test(cmd)) {
46
+ const decision = {
47
+ allowed: false,
48
+ reason: p.reason,
49
+ riskLevel: p.risk,
50
+ disclosure: {
51
+ command: cmd,
52
+ impact: p.impact,
53
+ riskLevel: p.risk,
54
+ requiresConfirmation: true
55
+ }
56
+ };
57
+ // 🚨 发送详细决策给前端预览
58
+ socket.emit('governance_decision', decision);
59
+ // 🚨 触发全屏视觉警报
60
+ socket.emit('governance_alert', {
61
+ level: 'critical',
62
+ message: 'BLOCK: ' + p.risk
63
+ });
64
+ return decision;
65
+ }
66
+ }
67
+ // 安全命令
68
+ const safeDecision = {
69
+ allowed: true,
70
+ normalizedCmd: ctx.command,
71
+ reasoning: '命令通过多维语义安全审计,分析显示为低风险系统管理任务。'
72
+ };
73
+ socket.emit('governance_decision', safeDecision);
74
+ return safeDecision;
75
+ }
76
+ };
77
+ const executor = new GovernedExecutor_1.SSHGovernedExecutor(session, governance);
78
+ try {
79
+ await session.connect(config);
80
+ socket.emit('output', '\r\n🛡️ yuangs AI Governance Web Shell Connected\r\n');
81
+ // 核心桥接:SSH 输出 -> WebSocket -> 浏览器
82
+ session.on('data', (data) => {
83
+ socket.emit('output', data.toString());
84
+ });
85
+ // 追踪当前行已发送给服务器的字符
86
+ let lineBuffer = '';
87
+ // 核心桥接:浏览器输入 -> WebSocket -> 治理执行器
88
+ socket.on('input', async (data) => {
89
+ const cmd = inputBuffer.push(data);
90
+ if (cmd !== null) {
91
+ // 对已发送缓冲区进行 Backspace 处理,以匹配 cmd 的格式
92
+ const processedLineBuffer = InputBuffer_1.InputBuffer.processBackspace(lineBuffer);
93
+ // 计算 unsentCommand
94
+ let unsent = '';
95
+ if (cmd.startsWith(processedLineBuffer)) {
96
+ unsent = cmd.slice(processedLineBuffer.length);
97
+ }
98
+ else {
99
+ // 如果 buffer 不匹配 (极其罕见), 全量重发以防万一
100
+ unsent = cmd;
101
+ }
102
+ // 触发治理逻辑 (传入 unsent 部分)
103
+ await executor.handleCommand(cmd, config.host, config.username, unsent);
104
+ // 清空已发送缓冲区
105
+ lineBuffer = '';
106
+ }
107
+ else {
108
+ // 普通字符直接透传(为了打字回显流畅)
109
+ // 只有在非敏感模式才记录/透传?
110
+ // 这里简化处理,直接透传,InputBuffer 会在内部聚合
111
+ session.write(data);
112
+ lineBuffer += data;
113
+ }
114
+ });
115
+ socket.on('resize', ({ cols, rows }) => {
116
+ session.resize(cols, rows);
117
+ });
118
+ socket.on('disconnect', () => {
119
+ session.close();
120
+ console.log('🔌 Browser disconnected');
121
+ });
122
+ }
123
+ catch (err) {
124
+ socket.emit('output', `\r\n❌ Connection Failed: ${err.message}\r\n`);
125
+ }
126
+ });
127
+ httpServer.listen(port, () => {
128
+ const url = `http://localhost:${port}`;
129
+ console.log(`🚀 yuangs-web-term is running at ${url}`);
130
+ (0, open_1.default)(url); // 自动打开浏览器
131
+ });
132
+ }
133
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/commands/ssh/server.ts"],"names":[],"mappings":"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"}
@@ -122,14 +122,20 @@ class SSHGovernedExecutor {
122
122
  });
123
123
  }
124
124
  // 执行命令
125
- // 如果命令没有被治理层修改,我们只需要发送未发送的部分 + 回车
125
+ // 智能补发: 如果命令没有被治理层修改,我们只需要发送未发送的部分 + 回车
126
126
  if (decision.normalizedCmd === cmd) {
127
- this.session.write(unsentCommand + '\r');
127
+ if (unsentCommand) {
128
+ this.session.write(unsentCommand + '\r');
129
+ }
130
+ else {
131
+ // 如果没有未发送部分,只发回车
132
+ this.session.write('\r');
133
+ }
128
134
  }
129
135
  else {
130
136
  // 如果命令被修改了 (例如自动纠错),我们需要先清除已有输入
131
- // 发送 Ctrl+U (清除行) + 新命令 + 回车
132
- this.session.write('\x15' + decision.normalizedCmd + '\r');
137
+ // 发送 Ctrl+C (清除行) + 新命令 + 回车
138
+ this.session.write('\x03' + decision.normalizedCmd + '\r');
133
139
  }
134
140
  }
135
141
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"GovernedExecutor.js","sourceRoot":"","sources":["../../src/ssh/GovernedExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GovernedExecutor.js","sourceRoot":"","sources":["../../src/ssh/GovernedExecutor.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,11 @@ export declare class InputBuffer {
19
19
  * @returns 如果检测到完整命令,返回命令字符串;否则返回 null
20
20
  */
21
21
  push(chunk: string): string | null;
22
+ /**
23
+ * 处理控制字符 (如 Backspace)
24
+ * 模拟终端行为: \x7f (DEL) 或 \b (BS) 删除前一个字符
25
+ */
26
+ static processBackspace(input: string): string;
22
27
  /**
23
28
  * 清空缓冲区
24
29
  */
@@ -26,12 +26,31 @@ class InputBuffer {
26
26
  // 唯一治理触发点: 检测到换行符
27
27
  if (chunk.includes('\n') || chunk.includes('\r')) {
28
28
  // 保留原始命令 (包括空格和可能的控制字符), 只去掉末尾的换行符
29
- const cmd = this.buffer.replace(/[\r\n]+$/, '');
29
+ const rawCmd = this.buffer.replace(/[\r\n]+$/, '');
30
+ const cmd = InputBuffer.processBackspace(rawCmd);
30
31
  this.buffer = '';
31
32
  return cmd;
32
33
  }
33
34
  return null;
34
35
  }
36
+ /**
37
+ * 处理控制字符 (如 Backspace)
38
+ * 模拟终端行为: \x7f (DEL) 或 \b (BS) 删除前一个字符
39
+ */
40
+ static processBackspace(input) {
41
+ const chars = [];
42
+ for (const char of input) {
43
+ if (char === '\x7f' || char === '\b') {
44
+ if (chars.length > 0) {
45
+ chars.pop();
46
+ }
47
+ }
48
+ else {
49
+ chars.push(char);
50
+ }
51
+ }
52
+ return chars.join('');
53
+ }
35
54
  /**
36
55
  * 清空缓冲区
37
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"InputBuffer.js","sourceRoot":"","sources":["../../src/ssh/InputBuffer.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,MAAa,WAAW;IACd,MAAM,GAAG,EAAE,CAAC;IAEpB;;;;;OAKG;IACH,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QAErB,kBAAkB;QAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,mCAAmC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YAEjB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AA5CD,kCA4CC"}
1
+ {"version":3,"file":"InputBuffer.js","sourceRoot":"","sources":["../../src/ssh/InputBuffer.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,MAAa,WAAW;IACd,MAAM,GAAG,EAAE,CAAC;IAEpB;;;;;OAKG;IACH,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QAErB,kBAAkB;QAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,mCAAmC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YAEjB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAa;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AA/DD,kCA+DC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuangs",
3
- "version": "5.3.0",
3
+ "version": "5.8.0",
4
4
  "description": "苑广山的个人应用集合 CLI(彩色版)",
5
5
  "author": "苑广山",
6
6
  "license": "ISC",
@@ -40,12 +40,15 @@
40
40
  "chalk": "^4.1.2",
41
41
  "cli-table3": "^0.6.5",
42
42
  "commander": "^13.1.0",
43
+ "express": "^5.2.1",
43
44
  "js-yaml": "^4.1.0",
44
45
  "json5": "^2.2.3",
45
46
  "markdown-it": "^14.1.0",
46
47
  "marked": "^15.0.12",
47
48
  "marked-terminal": "^7.3.0",
49
+ "open": "^11.0.0",
48
50
  "ora": "^5.4.1",
51
+ "socket.io": "^4.8.3",
49
52
  "ssh2": "^1.17.0",
50
53
  "yuangs": "^2.29.0",
51
54
  "zod": "^4.3.5",
@@ -54,6 +57,7 @@
54
57
  "devDependencies": {
55
58
  "@assemblyscript/loader": "^0.27.37",
56
59
  "@types/better-sqlite3": "^7.6.13",
60
+ "@types/express": "^5.0.6",
57
61
  "@types/jest": "^30.0.0",
58
62
  "@types/js-yaml": "^4.0.9",
59
63
  "@types/json5": "^0.0.30",
@@ -62,6 +66,7 @@
62
66
  "@types/marked-terminal": "^6.1.1",
63
67
  "@types/node": "^20.11.30",
64
68
  "@types/ora": "^3.1.0",
69
+ "@types/socket.io": "^3.0.1",
65
70
  "@types/ssh2": "^1.15.5",
66
71
  "assemblyscript": "^0.27.37",
67
72
  "jest": "^29.7.0",