yuangs 1.3.50 → 1.3.55

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
@@ -1,6 +1,25 @@
1
1
  # yuangs CLI
2
2
 
3
- 🎨 苑广山的个人命令行工具
3
+ 🎨 苑广山的个人命令行工具
4
+ 一个 **集工具启动器 + AI 助手 + 命令增强器** 于一体的 CLI。
5
+
6
+ > 设计理念:
7
+ > **AI 提供思路,人类掌控执行。**
8
+ > 快、顺手,但不过度“自动化”。
9
+
10
+ ---
11
+
12
+ ## 你可以用 yuangs 做什么?
13
+
14
+ - 🚀 一条命令快速打开常用 Web / PWA 应用
15
+ - 🤖 在终端里直接使用 AI 问答、分析、总结
16
+ - 🧠 让 AI **帮你写命令**,而不是直接替你乱跑命令
17
+ - 🧩 把常用的复杂操作保存为快捷指令(Macros)
18
+ - 🔗 用管道把真实命令输出交给 AI 解释
19
+
20
+ yuangs 更像是一个**“增强型命令行外脑”**,而不是黑箱自动执行器。
21
+
22
+ ---
4
23
 
5
24
  ## 安装
6
25
 
@@ -8,176 +27,212 @@
8
27
  npm install -g yuangs
9
28
  ```
10
29
 
11
- ## 使用命令
30
+ 安装完成后可直接使用:
12
31
 
13
32
  ```bash
14
- yuangs shici # 打开古诗词 PWA
15
- yuangs dict # 打开英语词典
16
- yuangs pong # 打开 Pong 游戏
17
- yuangs ai "你的问题" # ✨ 向 AI 提问 (v1.1.0 新增)
18
- yuangs list # 列出所有链接
19
- yuangs help # 显示帮助
33
+ yuangs help
20
34
  ```
21
35
 
22
- ## AI 功能示例 (v1.1.2)
36
+ ---
23
37
 
24
- 直接提问:
38
+ ## 基本使用命令
39
+
40
+ ```bash
41
+ yuangs shici # 打开古诗词 PWA
42
+ yuangs dict # 打开英语词典
43
+ yuangs pong # 打开 Pong 游戏
44
+ yuangs ai "你的问题" # ✨ 向 AI 提问
45
+ yuangs list # 列出所有应用/链接
46
+ yuangs help # 显示帮助
47
+ ```
48
+
49
+ ---
50
+
51
+ ## AI 功能(核心能力)
52
+
53
+ ### ✅ 1️⃣ 直接提问(最安全、零副作用)
25
54
 
26
55
  ```bash
27
56
  yuangs ai "李白是谁?"
28
57
  ```
29
58
 
30
- 指定模型:
59
+ - 仅进行问答
60
+ - 不生成系统命令
61
+ - 适合解释、学习、方案讨论
62
+
63
+ ---
31
64
 
32
- 支持使用 `--model` `-m` 指定模型,也支持以下简写:
33
- - `-p`: `gemini-pro-latest` (Pro 版)
34
- - `-f`: `gemini-flash-latest` (Flash 版)
35
- - `-l`: `gemini-flash-lite-latest` (Lite 版)
65
+ ### 2️⃣ 指定模型
66
+
67
+ 支持使用 `--model` / `-m`,也支持简写:
68
+
69
+ | 简写 | 实际模型 |
70
+ |----|----|
71
+ | `-p` | `gemini-pro-latest` |
72
+ | `-f` | `gemini-flash-latest` |
73
+ | `-l` | `gemini-flash-lite-latest` |
36
74
 
37
75
  ```bash
38
76
  yuangs ai "用 Python 写个 Hello World" -p
39
- # 等同于 --model gemini-pro-latest
40
77
  ```
41
78
 
42
- ### 交互模式(v1.1.x)
79
+ ---
43
80
 
44
- 直接输入不带问题的 `ai` 命令,会进入交互式问答模式:
81
+ ### 3️⃣ 交互模式(连续对话)
45
82
 
46
83
  ```bash
47
84
  yuangs ai
48
85
  ```
49
86
 
50
- 在交互模式中,你可以:
51
- - 直接输入问题进行对话
52
- - 输入 `/clear` 清空对话历史
53
- - 输入 `/history` 查看对话历史
54
- ### 命令生成模式
87
+ 在交互模式中你可以:
88
+
89
+ - 连续提问,不必重复输入命令
90
+ - `/clear`:清空当前对话上下文
91
+ - `/history`:查看本次会话历史
92
+ - `exit` / `quit`:退出
93
+
94
+ 适合 **长思路推理、一步步讨论问题**。
55
95
 
56
- 使用 `-e` 参数让 AI 为你生成 Linux 命令。现在支持生成后自动复制到剪贴板,并预填到输入行供你确认执行:
96
+ ---
97
+
98
+ ### ✅ 4️⃣ 命令生成模式(`-e`)
99
+
100
+ 让 AI **帮你写 Linux / macOS 命令**,但由你决定是否执行。
57
101
 
58
102
  ```bash
59
- yuangs ai -e "查看当前目录下大于100M的文件"
60
- # 1. 自动生成: > find . -type f -size +100M
61
- # 2. 自动复制到剪贴板
62
- # 3. 预填到下方,按回车即可执行
103
+ yuangs ai -e "查看当前目录下大于 100M 的文件"
63
104
  ```
64
105
 
65
- ### 管道模式 (Pipe Mode)
106
+ 流程说明:
107
+
108
+ 1. AI 生成命令
109
+ `find . -type f -size +100M`
110
+ 2. 自动复制到剪贴板
111
+ 3. 预填到输入行
112
+ 4. **你确认后才会执行**
113
+
114
+ 👉 这是 **“命令辅助”**,不是黑箱自动执行。
66
115
 
67
- 支持将前一个命令的输出通过管道传给 AI 进行分析:
116
+ ---
117
+
118
+ ### ✅ 5️⃣ 管道模式(Pipe Mode)
119
+
120
+ 把真实命令输出交给 AI 分析、解释、总结:
68
121
 
69
122
  ```bash
70
123
  cat error.log | yuangs ai "解释这个报错"
71
124
  ls -la | yuangs ai "帮我总结这些文件"
72
125
  ```
73
126
 
74
- ### 流式输出与 Markdown 渲染
127
+ 非常适合:
128
+ - 看不懂的日志
129
+ - 太长的输出
130
+ - CI / build 报错分析
131
+
132
+ ---
133
+
134
+ ### ✅ 6️⃣ 流式输出 + Markdown 渲染
75
135
 
76
- 所有 AI 回复默认开启流式输出(打字机效果),并在回答结束后自动进行 Markdown 渲染(包含代码高亮、表格格式化等)。
136
+ - 默认流式输出(打字机效果)
137
+ - 自动渲染 Markdown
138
+ - 代码高亮 / 表格格式化
77
139
 
78
- ## 快捷指令 (Macros)
140
+ 终端体验尽量对齐 ChatGPT 网页版。
79
141
 
80
- 可以将常用的复杂命令保存为快捷指令:
142
+ ---
143
+
144
+ ## 快捷指令(Macros)
145
+
146
+ 把常用但冗长的命令保存为一个名字。
147
+
148
+ ### 创建快捷指令
81
149
 
82
150
  ```bash
83
- # 创建快捷指令 (支持多行命令)
84
151
  yuangs save deploy
85
- # > 请输入要保存的命令:
86
- # > npm run build && git add . && git commit -m "deploy" && git push
152
+ # 输入:
153
+ # npm run build && git add . && git commit -m "deploy" && git push
154
+ ```
87
155
 
88
- # 执行快捷指令
156
+ ### 执行快捷指令
157
+
158
+ ```bash
89
159
  yuangs run deploy
160
+ ```
161
+
162
+ ### 查看所有指令
90
163
 
91
- # 查看所有指令
164
+ ```bash
92
165
  yuangs macros
93
166
  ```
94
167
 
95
- ## 配置管理
168
+ 非常适合:
169
+ - 发布流程
170
+ - 项目初始化
171
+ - 重复性高但不想记的命令
96
172
 
97
- 使用 `config` 命令快速修改 AI 配置:
173
+ ---
174
+
175
+ ## 配置管理
98
176
 
99
177
  ```bash
100
178
  yuangs config defaultModel Assistant
101
179
  yuangs config accountType pro
102
180
  ```
103
181
 
104
- 配置项说明:
105
- - `defaultModel`: 默认使用的 AI 模型 (默认为 `Assistant`)
106
- - `aiProxyUrl`: 自定义 AI 接口地址
107
- - `accountType`: 账户类型 (free/pro)
108
-
109
- ## 应用列表
182
+ 常用配置项:
110
183
 
111
- 以下是 CLI 中可以通过相应命令直接打开的应用程序链接:
184
+ - `defaultModel`:默认 AI 模型
185
+ - `aiProxyUrl`:自定义 AI 接口
186
+ - `accountType`:`free` / `pro`
112
187
 
113
- 古诗词 PWA: https://wealth.want.biz/shici/index.html
188
+ ---
114
189
 
115
- 英语词典: https://wealth.want.biz/pages/dict.html
190
+ ## 内置应用列表
116
191
 
117
- Pong 游戏: https://wealth.want.biz/pages/pong.html
118
-
119
- ## 配置自定义应用 (v1.3.24)
120
-
121
- 从 v1.3.24 版本开始,您可以自定义应用列表,而无需修改源代码。
192
+ ```text
193
+ shici → https://wealth.want.biz/shici/index.html
194
+ dict → https://wealth.want.biz/pages/dict.html
195
+ pong → https://wealth.want.biz/pages/pong.html
196
+ ```
122
197
 
123
- ### 配置文件格式
198
+ ---
124
199
 
125
- 创建一个 JSON 或 YAML 配置文件,支持以下格式之一:
200
+ ## 自定义应用(v1.3.24+)
126
201
 
127
- 1. `yuangs.config.json` - 项目级别的 JSON 配置文件
128
- 2. `.yuangs.json` - 项目级或用户主目录的 JSON 隐藏配置文件
129
- 3. `yuangs.config.yaml` - 项目级别的 YAML 配置文件
130
- 4. `yuangs.config.yml` - 项目级别的 YAML 配置文件
131
- 5. `.yuangs.yaml` - 项目级或用户主目录的 YAML 隐藏配置文件
132
- 6. `.yuangs.yml` - 项目级或用户主目录的 YAML 隐藏配置文件
133
- 7. `~/.yuangs.json` - 全局用户 JSON 配置文件
134
- 8. `~/.yuangs.yaml` - 全局用户 YAML 配置文件
135
- 9. `~/.yuangs.yml` - 全局用户 YAML 配置文件
202
+ 无需改代码,只需配置文件。
136
203
 
137
- 配置文件示例:
204
+ ### 示例 `.yuangs.json`
138
205
 
139
206
  ```json
140
207
  {
141
- "shici": "https://wealth.want.biz/shici/index.html",
142
- "dict": "https://wealth.want.biz/pages/dict.html",
143
- "pong": "https://wealth.want.biz/pages/pong.html",
144
208
  "github": "https://github.com",
145
209
  "calendar": "https://calendar.google.com",
146
210
  "mail": "https://mail.google.com"
147
211
  }
148
212
  ```
149
213
 
150
- ### 配置文件优先级
151
-
152
- 配置文件按以下优先级顺序查找(高到低):
153
-
154
- 1. 当前工作目录下的 `yuangs.config.json`
155
- 2. 当前工作目录下的 `.yuangs.json`
156
- 3. 用户主目录下的 `.yuangs.json`
157
- 4. 项目目录下的 `yuangs.config.json`
158
- 5. 项目目录下的 `.yuangs.json`
159
- 6. 如果没有配置文件,则使用默认应用列表
160
-
161
- ### 使用自定义应用
162
-
163
- 创建配置文件后,您可以使用任何定义的应用名称作为命令:
214
+ 然后直接使用:
164
215
 
165
216
  ```bash
166
- yuangs github # 打开 GitHub
167
- yuangs calendar # 打开日历
168
- yuangs mail # 打开邮箱
217
+ yuangs github
218
+ yuangs calendar
219
+ yuangs mail
169
220
  ```
170
221
 
171
- 使用 `yuangs list` 命令查看当前加载的所有应用。
222
+ 支持 JSON / YAML,多级优先级(项目级 / 用户级)。
223
+
224
+ ---
172
225
 
173
- ## 近期主要更新日志
226
+ ## 近期主要更新
174
227
 
175
228
  ### v1.3.38 (2026-01-16)
176
- - **新增** 快捷指令系统 (`save`/`run`/`macros`),支持保存复杂命令。
177
- - **新增** 管道模式:支持 `cat file | yuangs ai` 分析内容。
178
- - **新增** AI 流式输出 + Markdown 终端渲染,体验对齐 ChatGPT 网页版。
179
- - **新增** `config` 命令,方便管理 AI 配置。
180
- - **优化** 命令生成模式 (`-e`) 增加剪贴板自动复制和预填执行功能。
229
+
230
+ - 快捷指令系统(save / run / macros)
231
+ - 管道模式(Pipe)
232
+ - AI 流式输出 + Markdown 渲染
233
+ - `config` 命令
234
+ - ✅ 命令生成模式增强(剪贴板 + 预填)
235
+
181
236
 
182
237
  ### v1.3.22 (2025-11-30)
183
238
  - **新增** AI 命令支持 `-p` `-f` `-l` 简写,快速选择gemini默认模型
@@ -194,63 +249,30 @@ yuangs mail # 打开邮箱
194
249
  - **新增** `ai` 命令:集成 AI 问答功能 (`yuangs ai "你的问题"`)。
195
250
  - **新增** `help` 命令显示当前版本号:方便用户了解工具版本。
196
251
  - **优化** AI 请求加载动画:在请求过程中显示加载动画和已耗时秒数,并在请求结束后显示总耗时。
252
+ ---
197
253
 
198
254
  ## 自动发布(CI/CD)
199
255
 
200
- 本项目使用 GitHub Actions 实现了自动发布流程:
201
-
202
- - 每次向 `main` 分支 `git push`:
203
- - 自动执行 `npm version patch`,提升补丁版本号(例如 `1.1.5 -> 1.1.6`);
204
- - 自动生成对应的 Git tag(如 `v1.1.6`)并推送回仓库;
205
- - 自动运行 `npm publish --provenance` 发布到 npm。
206
-
207
- 这样日常开发只需要专注写代码和推送到 `main`,发布和版本管理都由 CI 自动完成。
208
- 本地开发前务必先:`git pull`,确保本地代码与远程仓库一致。
256
+ - push `main`:
257
+ - 自动 bump patch 版本
258
+ - 自动打 tag
259
+ - 自动 `npm publish --provenance`
209
260
 
210
- ## 开发与构建 (Development)
261
+ 日常开发只需关注代码本身。
211
262
 
212
- 本项目使用 TypeScript 开发,构建后发布到 npm。
263
+ ---
213
264
 
214
- ### 本地开发
265
+ ## 开发与构建
215
266
 
216
267
  ```bash
217
- # 安装依赖
218
268
  npm install
219
-
220
- # 源码运行 (使用 ts-node)
221
269
  npm run dev -- ai "你好"
222
-
223
- # 执行所有测试
224
- npm test
225
- ```
226
-
227
- ### 构建项目
228
-
229
- ```bash
230
- # 清理并构建 (输出到 dist 目录)
231
- rm -rf dist
232
270
  npm run build
233
271
  ```
234
272
 
235
- ### 本地测试 CLI
236
-
237
- ```bash
238
- # 将当前目录链接到全局命令
239
- npm link
240
-
241
- # 然后就可以在任何地方直接使用 yuangs 了
242
- yuangs --help
243
- ```
244
-
245
- ### 发布前检查
246
-
247
- ```bash
248
- # 模拟打包查看内容
249
- npm pack
250
- tar -tf yuangs-*.tgz
251
- ```
273
+ ---
252
274
 
253
275
  ## 维护者
254
276
 
255
- @yuanguangshan
256
277
 
278
+ @yuanguangshan
package/dist/cli.js CHANGED
@@ -17,17 +17,76 @@ const packageJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__d
17
17
  const version = packageJson.version;
18
18
  const args = process.argv.slice(2);
19
19
  const command = args[0];
20
+ // Parse flags from args
21
+ const hasFlag = (flags) => args.some(a => flags.includes(a));
22
+ const isExecMode = hasFlag(['-e']);
23
+ const isDryRun = hasFlag(['--dry-run', '--dry']);
24
+ const isAutoYes = hasFlag(['--yes', '-y']);
25
+ const isLastHistory = hasFlag(['--last']);
20
26
  function printHelp() {
21
- console.log(chalk_1.default.bold.cyan('\n🎨 苑广山的个人应用启动器 (Modular TS版)\n'));
22
- console.log(chalk_1.default.yellow(`当前版本: ${version}`));
23
- console.log(chalk_1.default.white('使用方法:') + chalk_1.default.gray(' yuangs <命令> [参数]\n'));
24
- console.log(chalk_1.default.bold('命令列表:'));
25
- console.log(` ${chalk_1.default.green('ai')} "<问题>" 向 AI 提问`);
26
- console.log(` ${chalk_1.default.gray('-e')} 生成并执行 Linux 命令 (OS 感知)`);
27
- console.log(` ${chalk_1.default.green('list')} 列出所有应用`);
28
- console.log(` ${chalk_1.default.green('history')} 查看命令历史`);
29
- console.log(` ${chalk_1.default.green('config')} 管理本地配置 (~/.yuangs.json)`);
30
- console.log(` ${chalk_1.default.green('help')} 显示帮助信息\n`);
27
+ console.log(chalk_1.default.bold.cyan('\nyuangs CLI Personal Command Line Toolkit'));
28
+ console.log(chalk_1.default.gray('─'.repeat(50)));
29
+ console.log(chalk_1.default.white('A lightweight CLI that combines:'));
30
+ console.log(`• ${chalk_1.default.blue('App launcher')}`);
31
+ console.log(`• ${chalk_1.default.green('AI assistant')}`);
32
+ console.log(`• ${chalk_1.default.yellow('Command helper')}\n`);
33
+ console.log(chalk_1.default.italic.gray('Design philosophy:'));
34
+ console.log(chalk_1.default.italic.gray('AI suggests, you decide.\n'));
35
+ console.log(chalk_1.default.bold('Usage:'));
36
+ console.log(chalk_1.default.white(` yuangs <command> [options]\n`));
37
+ console.log(chalk_1.default.gray('─'.repeat(50)));
38
+ console.log(chalk_1.default.bold('Core Commands\n'));
39
+ console.log(` ${chalk_1.default.green('shici'.padEnd(16))} Open Chinese poetry PWA`);
40
+ console.log(` ${chalk_1.default.green('dict'.padEnd(16))} Open English dictionary`);
41
+ console.log(` ${chalk_1.default.green('pong'.padEnd(16))} Open Pong game\n`);
42
+ console.log(` ${chalk_1.default.green('ai'.padEnd(16))} Ask AI questions / analyze output`);
43
+ console.log(` ${chalk_1.default.green('ai -e'.padEnd(16))} Let AI generate shell commands (manual confirm)\n`);
44
+ console.log(` ${chalk_1.default.green('list'.padEnd(16))} List all available apps`);
45
+ console.log(` ${chalk_1.default.green('help'.padEnd(16))} Show this help message\n`);
46
+ console.log(chalk_1.default.gray('─'.repeat(50)));
47
+ console.log(chalk_1.default.bold('AI Command\n'));
48
+ console.log(` ${chalk_1.default.white('yuangs ai "your question"')}`);
49
+ console.log(chalk_1.default.gray(' Ask AI directly (safe, no side effects)\n'));
50
+ console.log(` ${chalk_1.default.white('yuangs ai')}`);
51
+ console.log(chalk_1.default.gray(' Interactive chat mode\n'));
52
+ console.log(` ${chalk_1.default.white('yuangs ai -e "task description"')}`);
53
+ console.log(chalk_1.default.gray(' Generate shell command and prefill for execution'));
54
+ console.log(chalk_1.default.gray(' (command is NOT executed automatically)\n'));
55
+ console.log(` ${chalk_1.default.white('cat file | yuangs ai "explain this"')}`);
56
+ console.log(chalk_1.default.gray(' Pipe command output to AI for analysis\n'));
57
+ console.log(chalk_1.default.bold('Options:'));
58
+ console.log(` ${chalk_1.default.gray('-p'.padEnd(16))} Use gemini-pro-latest`);
59
+ console.log(` ${chalk_1.default.gray('-f'.padEnd(16))} Use gemini-flash-latest`);
60
+ console.log(` ${chalk_1.default.gray('-l'.padEnd(16))} Use gemini-flash-lite-latest`);
61
+ console.log(` ${chalk_1.default.gray('-m, --model'.padEnd(16))} Specify model explicitly\n`);
62
+ console.log(chalk_1.default.gray('─'.repeat(50)));
63
+ console.log(chalk_1.default.bold('Macros (Shortcuts)\n'));
64
+ console.log(` ${chalk_1.default.white('yuangs save <name>')} Save a complex command as a macro`);
65
+ console.log(` ${chalk_1.default.white('yuangs run <name>')} Run a saved macro`);
66
+ console.log(` ${chalk_1.default.white('yuangs macros')} List all saved macros\n`);
67
+ console.log(chalk_1.default.gray('─'.repeat(50)));
68
+ console.log(chalk_1.default.bold('Configuration\n'));
69
+ console.log(` ${chalk_1.default.white('yuangs config <key> <value>')} Update configuration\n`);
70
+ console.log(chalk_1.default.bold('Common keys:'));
71
+ console.log(` ${chalk_1.default.gray('defaultModel'.padEnd(16))} Default AI model`);
72
+ console.log(` ${chalk_1.default.gray('aiProxyUrl'.padEnd(16))} Custom AI endpoint`);
73
+ console.log(` ${chalk_1.default.gray('accountType'.padEnd(16))} free | pro\n`);
74
+ console.log(chalk_1.default.gray('─'.repeat(50)));
75
+ console.log(chalk_1.default.bold('Custom Apps\n'));
76
+ console.log(chalk_1.default.gray(' Define your own apps in:'));
77
+ console.log(chalk_1.default.gray(' .yuangs.json, yuangs.config.json, ~/.yuangs.json\n'));
78
+ console.log(chalk_1.default.gray(' Then run:'));
79
+ console.log(` ${chalk_1.default.white('yuangs <appName>')}\n`);
80
+ console.log(chalk_1.default.gray('─'.repeat(50)));
81
+ console.log(chalk_1.default.bold('Examples\n'));
82
+ console.log(` ${chalk_1.default.gray('yuangs ai "Who is Li Bai?"')}`);
83
+ console.log(` ${chalk_1.default.gray('yuangs ai -e "find files larger than 100M"')}`);
84
+ console.log(` ${chalk_1.default.gray('ls -la | yuangs ai "summarize these files"')}`);
85
+ console.log(` ${chalk_1.default.gray('yuangs save deploy')}`);
86
+ console.log(` ${chalk_1.default.gray('yuangs run deploy')}\n`);
87
+ console.log(chalk_1.default.gray('─'.repeat(50)));
88
+ console.log(`${chalk_1.default.bold('Version:')} ${chalk_1.default.yellow(version)}`);
89
+ console.log(`${chalk_1.default.bold('Repository:')} ${chalk_1.default.blue('https://github.com/yuanguangshan/yuangs')}\n`);
31
90
  }
32
91
  async function readStdin() {
33
92
  if (process.stdin.isTTY)
@@ -47,14 +106,18 @@ async function main() {
47
106
  switch (command) {
48
107
  case 'ai':
49
108
  const aiArgs = args.slice(1);
50
- const isExecMode = aiArgs.includes('-e');
51
- const questionParts = aiArgs.filter(a => a !== '-e');
109
+ // Cleanup args for question extraction: remove flags
110
+ const questionParts = aiArgs.filter(a => !['-e', '--dry-run', '--dry', '--yes', '-y'].includes(a));
52
111
  let question = questionParts.join(' ').trim();
53
112
  if (stdinData) {
54
113
  question = `以下是输入内容:\n\n${stdinData}\n\n我的问题是:${question || '分析以上内容'}`;
55
114
  }
56
115
  if (isExecMode) {
57
- await (0, handleAICommand_1.handleAICommand)(question, { execute: false });
116
+ await (0, handleAICommand_1.handleAICommand)(question, {
117
+ execute: false, // Default is false, handleAICommand internals decide based on prompt confirmation or --yes
118
+ dryRun: isDryRun,
119
+ autoYes: isAutoYes
120
+ });
58
121
  }
59
122
  else {
60
123
  await (0, handleAIChat_1.handleAIChat)(question || null);
@@ -77,52 +140,81 @@ async function main() {
77
140
  const history = (0, history_1.getCommandHistory)();
78
141
  if (history.length === 0) {
79
142
  console.log(chalk_1.default.gray('暂无命令历史\n'));
143
+ break;
80
144
  }
81
- else {
82
- console.log(chalk_1.default.bold.cyan('\n📋 命令历史\n'));
83
- history.forEach((item, index) => {
84
- console.log(`${index + 1}. ${chalk_1.default.white(item.command)}`);
85
- console.log(chalk_1.default.gray(` 问题: ${item.question}\n`));
86
- });
87
- const rlHistory = require('node:readline/promises').createInterface({
145
+ if (isLastHistory) {
146
+ const lastItem = history[0]; // history is unshift-ed, so 0 is latest
147
+ console.log(chalk_1.default.bold.cyan('\n📋 上一次执行的命令:\n'));
148
+ console.log(chalk_1.default.white(`${lastItem.command}`));
149
+ console.log(chalk_1.default.gray(`问题: ${lastItem.question}\n`));
150
+ const rlLast = require('node:readline/promises').createInterface({
88
151
  input: process.stdin,
89
152
  output: process.stdout
90
153
  });
91
- const indexInput = await rlHistory.question(chalk_1.default.cyan('输入序号选择命令 (直接回车取消): '));
92
- rlHistory.close();
93
- if (indexInput.trim()) {
94
- const index = parseInt(indexInput) - 1;
95
- if (index >= 0 && index < history.length) {
96
- const targetCommand = history[index].command;
97
- console.log(chalk_1.default.yellow(`\n即将执行: ${targetCommand}\n`));
98
- const rlConfirm = require('node:readline/promises').createInterface({
99
- input: process.stdin,
100
- output: process.stdout
154
+ const confirmLast = await rlLast.question(chalk_1.default.cyan('确认再次执行? (y/N): '));
155
+ rlLast.close();
156
+ if (confirmLast.toLowerCase() === 'y' || confirmLast.toLowerCase() === 'yes') {
157
+ const { exec } = require('child_process');
158
+ console.log(chalk_1.default.bold.cyan('执行中...\n'));
159
+ exec(lastItem.command, (error, stdout, stderr) => {
160
+ if (stdout)
161
+ console.log(stdout);
162
+ if (stderr)
163
+ console.error(chalk_1.default.red(stderr));
164
+ if (error)
165
+ console.error(chalk_1.default.red(error.message));
166
+ process.exit(0);
167
+ });
168
+ return;
169
+ }
170
+ else {
171
+ console.log(chalk_1.default.gray('已取消执行'));
172
+ }
173
+ break;
174
+ }
175
+ console.log(chalk_1.default.bold.cyan('\n📋 命令历史\n'));
176
+ history.forEach((item, index) => {
177
+ console.log(`${index + 1}. ${chalk_1.default.white(item.command)}`);
178
+ console.log(chalk_1.default.gray(` 问题: ${item.question}\n`));
179
+ });
180
+ const rlHistory = require('node:readline/promises').createInterface({
181
+ input: process.stdin,
182
+ output: process.stdout
183
+ });
184
+ const indexInput = await rlHistory.question(chalk_1.default.cyan('输入序号选择命令 (直接回车取消): '));
185
+ rlHistory.close();
186
+ if (indexInput.trim()) {
187
+ const index = parseInt(indexInput) - 1;
188
+ if (index >= 0 && index < history.length) {
189
+ const targetCommand = history[index].command;
190
+ console.log(chalk_1.default.yellow(`\n即将执行: ${targetCommand}\n`));
191
+ const rlConfirm = require('node:readline/promises').createInterface({
192
+ input: process.stdin,
193
+ output: process.stdout
194
+ });
195
+ const confirm = await rlConfirm.question(chalk_1.default.cyan('确认执行? (y/N): '));
196
+ rlConfirm.close();
197
+ if (confirm.toLowerCase() === 'y' || confirm.toLowerCase() === 'yes') {
198
+ const { exec } = require('child_process');
199
+ console.log(chalk_1.default.bold.cyan('执行中...\n'));
200
+ exec(targetCommand, (error, stdout, stderr) => {
201
+ if (stdout)
202
+ console.log(stdout);
203
+ if (stderr)
204
+ console.error(chalk_1.default.red(stderr));
205
+ if (error)
206
+ console.error(chalk_1.default.red(error.message));
207
+ process.exit(0);
101
208
  });
102
- const confirm = await rlConfirm.question(chalk_1.default.cyan('确认执行? (y/N): '));
103
- rlConfirm.close();
104
- if (confirm.toLowerCase() === 'y' || confirm.toLowerCase() === 'yes') {
105
- const { exec } = require('child_process');
106
- console.log(chalk_1.default.bold.cyan('执行中...\n'));
107
- exec(targetCommand, (error, stdout, stderr) => {
108
- if (stdout)
109
- console.log(stdout);
110
- if (stderr)
111
- console.error(chalk_1.default.red(stderr));
112
- if (error)
113
- console.error(chalk_1.default.red(error.message));
114
- process.exit(0);
115
- });
116
- return;
117
- }
118
- else {
119
- console.log(chalk_1.default.gray('已取消执行'));
120
- }
209
+ return;
121
210
  }
122
211
  else {
123
- console.log(chalk_1.default.red('无效的序号'));
212
+ console.log(chalk_1.default.gray('已取消执行'));
124
213
  }
125
214
  }
215
+ else {
216
+ console.log(chalk_1.default.red('无效的序号'));
217
+ }
126
218
  }
127
219
  break;
128
220
  case 'config':
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export declare function handleAICommand(userInput: string, options: {
2
2
  execute: boolean;
3
3
  model?: string;
4
+ dryRun?: boolean;
5
+ autoYes?: boolean;
4
6
  }): Promise<import("../core/executor").ExecResult | undefined>;
@@ -14,17 +14,25 @@ const risk_1 = require("../core/risk");
14
14
  const autofix_1 = require("../core/autofix");
15
15
  const confirm_1 = require("../utils/confirm");
16
16
  const history_1 = require("../utils/history");
17
+ function validateAIPlan(obj) {
18
+ return (typeof obj === 'object' &&
19
+ obj !== null &&
20
+ typeof obj.plan === 'string' &&
21
+ typeof obj.command === 'string' &&
22
+ ['low', 'medium', 'high'].includes(obj.risk));
23
+ }
17
24
  async function handleAICommand(userInput, options) {
18
25
  const os = (0, os_1.getOSProfile)();
19
26
  const spinner = (0, ora_1.default)(chalk_1.default.cyan('🧠 AI 正在规划中...')).start();
20
27
  try {
21
28
  // 1️⃣ 让 AI 出计划
29
+ // ... (AI call logic remains same)
22
30
  const prompt = (0, prompt_1.buildCommandPrompt)(userInput, os);
23
31
  const raw = await (0, client_1.askAI)(prompt, options.model);
24
32
  spinner.stop();
25
33
  let plan;
26
34
  try {
27
- // Extract JSON if AI wrapped it in triple backticks
35
+ // Extract JSON logic
28
36
  let jsonContent = raw;
29
37
  if (raw.includes('```json')) {
30
38
  jsonContent = raw.split('```json')[1].split('```')[0].trim();
@@ -32,7 +40,13 @@ async function handleAICommand(userInput, options) {
32
40
  else if (raw.includes('```')) {
33
41
  jsonContent = raw.split('```')[1].split('```')[0].trim();
34
42
  }
35
- plan = JSON.parse(jsonContent);
43
+ const parsed = JSON.parse(jsonContent);
44
+ if (!validateAIPlan(parsed)) {
45
+ console.log(chalk_1.default.red('\n❌ AI 返回结构非法,已拒绝执行'));
46
+ console.log(chalk_1.default.gray('AI Output:'), raw);
47
+ return;
48
+ }
49
+ plan = parsed;
36
50
  }
37
51
  catch {
38
52
  console.log(chalk_1.default.red('\n❌ AI 输出不是合法 JSON:'));
@@ -45,9 +59,21 @@ async function handleAICommand(userInput, options) {
45
59
  console.log(chalk_1.default.bold.cyan('\n🧠 计划: ') + plan.plan);
46
60
  console.log(chalk_1.default.bold.green('💻 命令: ') + chalk_1.default.yellow(plan.command));
47
61
  const riskColor = finalRisk === 'high' ? chalk_1.default.red : (finalRisk === 'medium' ? chalk_1.default.yellow : chalk_1.default.green);
48
- console.log(chalk_1.default.bold('⚠️ 风险: ') + riskColor(finalRisk.toUpperCase()));
62
+ console.log(chalk_1.default.bold('⚠️ 风险判断: ') + riskColor(finalRisk.toUpperCase()));
63
+ // Check Dry Run
64
+ if (options.dryRun) {
65
+ console.log(chalk_1.default.gray('\n[Dry Run] 仅模拟,不执行命令。'));
66
+ return;
67
+ }
49
68
  // 4️⃣ 确认
50
- let shouldExecute = options.execute;
69
+ console.log(chalk_1.default.gray('─'.repeat(50)));
70
+ console.log(chalk_1.default.yellow('⚠️ 注意: 以上命令由 AI 生成,请在执行前仔细检查。'));
71
+ console.log(chalk_1.default.gray(' AI 可能会犯错,安全由您掌控。'));
72
+ console.log(chalk_1.default.gray('─'.repeat(50)));
73
+ let shouldExecute = options.execute || options.autoYes;
74
+ // If high risk, maybe force confirm even with autoYes?
75
+ // For now, let's respect autoYes as the "I know what I'm doing" flag.
76
+ // But if risk is high and NOT autoYes, we definitely ask.
51
77
  if (!shouldExecute) {
52
78
  shouldExecute = await (0, confirm_1.confirm)('是否执行该命令?');
53
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleAICommand.js","sourceRoot":"","sources":["../../src/commands/handleAICommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handleAICommand.js","sourceRoot":"","sources":["../../src/commands/handleAICommand.ts"],"names":[],"mappings":"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"}
package/dist/core/risk.js CHANGED
@@ -2,8 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assessRisk = assessRisk;
4
4
  function assessRisk(command, aiRisk) {
5
- const highRiskCommands = ['rm ', 'sudo ', 'mv ', 'dd ', '> /dev/', ':(){ :|:& };:'];
6
- const hasHighRisk = highRiskCommands.some(cmd => command.includes(cmd));
5
+ const HIGH_RISK_PATTERNS = [
6
+ /\brm\b/i,
7
+ /\bsudo\b/i,
8
+ /\bmv\b/i,
9
+ /\bdd\b/i,
10
+ /\bchmod\b/i,
11
+ /\bchown\b/i,
12
+ />\s*\/dev\//,
13
+ /:\(\)\s*\{.*\}/, // Fork bomb
14
+ /\bmkfs\b/i,
15
+ ];
16
+ const hasHighRisk = HIGH_RISK_PATTERNS.some(pattern => pattern.test(command));
7
17
  if (hasHighRisk)
8
18
  return 'high';
9
19
  return aiRisk;
@@ -1 +1 @@
1
- {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/core/risk.ts"],"names":[],"mappings":";;AAAA,gCAOC;AAPD,SAAgB,UAAU,CAAC,OAAe,EAAE,MAAiC;IACzE,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAEpF,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAExE,IAAI,WAAW;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/core/risk.ts"],"names":[],"mappings":";;AAAA,gCAiBC;AAjBD,SAAgB,UAAU,CAAC,OAAe,EAAE,MAAiC;IACzE,MAAM,kBAAkB,GAAG;QACvB,SAAS;QACT,WAAW;QACX,SAAS;QACT,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,gBAAgB,EAAE,YAAY;QAC9B,WAAW;KACd,CAAC;IAEF,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9E,IAAI,WAAW;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,MAAM,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuangs",
3
- "version": "1.3.50",
3
+ "version": "1.3.55",
4
4
  "description": "苑广山的个人应用集合 CLI(彩色版)",
5
5
  "author": "苑广山",
6
6
  "license": "ISC",