yuangs 1.3.61 → 1.3.62
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/ai/prompt.d.ts +2 -1
- package/dist/ai/prompt.js +21 -3
- package/dist/ai/prompt.js.map +1 -1
- package/dist/commands/handleAICommand.d.ts +5 -1
- package/dist/commands/handleAICommand.js +55 -16
- package/dist/commands/handleAICommand.js.map +1 -1
- package/dist/core/autofix.d.ts +2 -2
- package/dist/core/autofix.js +1 -1
- package/dist/core/autofix.js.map +1 -1
- package/dist/core/validation.d.ts +12 -1
- package/dist/core/validation.js +10 -2
- package/dist/core/validation.js.map +1 -1
- package/package.json +1 -1
package/dist/ai/prompt.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { OSProfile } from '../core/os';
|
|
2
|
-
|
|
2
|
+
import type { Macro } from '../core/validation';
|
|
3
|
+
export declare function buildCommandPrompt(userInput: string, os: OSProfile, macros?: Record<string, Macro>): string;
|
|
3
4
|
export declare function buildFixPrompt(originalCmd: string, stderr: string, os: OSProfile): string;
|
package/dist/ai/prompt.js
CHANGED
|
@@ -2,7 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildCommandPrompt = buildCommandPrompt;
|
|
4
4
|
exports.buildFixPrompt = buildFixPrompt;
|
|
5
|
-
function buildCommandPrompt(userInput, os) {
|
|
5
|
+
function buildCommandPrompt(userInput, os, macros) {
|
|
6
|
+
const macroContext = macros && Object.keys(macros).length > 0
|
|
7
|
+
? `
|
|
8
|
+
【可复用的快捷指令 (Macros)】
|
|
9
|
+
以下是可以直接复用的已验证命令。优先复用这些指令,而不是生成新命令:
|
|
10
|
+
|
|
11
|
+
${Object.entries(macros).map(([name, macro]) => ` - ${name}: ${macro.description || '(无描述)'}`).join('\n')}
|
|
12
|
+
|
|
13
|
+
当用户的需求与某个 Macro 匹配或相似时:
|
|
14
|
+
1. 优先使用该 Macro
|
|
15
|
+
2. 在 JSON 输出中使用 "macro" 字段指定 Macro 名称,而不是 "command" 字段
|
|
16
|
+
3. 仅在没有合适 Macro 时才生成新命令
|
|
17
|
+
`
|
|
18
|
+
: '';
|
|
6
19
|
return `
|
|
7
20
|
你是一个专业的命令行专家。
|
|
8
21
|
|
|
@@ -22,11 +35,15 @@ function buildCommandPrompt(userInput, os) {
|
|
|
22
35
|
- 默认不使用 sudo。
|
|
23
36
|
- 确保输出的命令是单行或者使用 && 连接。
|
|
24
37
|
- 不要解释,只输出符合以下 JSON 结构的文本。
|
|
38
|
+
- 优先复用已验证的快捷指令(Macros),每个 Macro 都是经过人工验证的可靠命令。在生成新命令前,检查是否已有 Macro 可以完成任务。
|
|
39
|
+
|
|
40
|
+
${macroContext}
|
|
25
41
|
|
|
26
42
|
【输出 JSON 结构】
|
|
27
43
|
{
|
|
28
44
|
"plan": "简要说明你准备执行的步骤",
|
|
29
|
-
"command": "可直接执行的 shell
|
|
45
|
+
"command": "可直接执行的 shell 命令(仅当没有合适 Macro 时提供)",
|
|
46
|
+
"macro": "要复用的 Macro 名称(优先使用,与 command 二选一)",
|
|
30
47
|
"risk": "low | medium | high"
|
|
31
48
|
}
|
|
32
49
|
|
|
@@ -45,7 +62,8 @@ ${originalCmd}
|
|
|
45
62
|
${stderr}
|
|
46
63
|
|
|
47
64
|
请生成一个 **${os.name} 兼容** 的等价命令。
|
|
48
|
-
依然只输出 JSON
|
|
65
|
+
依然只输出 JSON 格式。注意:这是修复命令,不需要检查 Macro。
|
|
66
|
+
|
|
49
67
|
{
|
|
50
68
|
"plan": "修复说明",
|
|
51
69
|
"command": "修复后的命令",
|
package/dist/ai/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/ai/prompt.ts"],"names":[],"mappings":";;AAGA,gDAqDC;AAED,wCAuBC;AA9ED,SAAgB,kBAAkB,CAC9B,SAAiB,EACjB,EAAa,EACb,MAA8B;IAE9B,MAAM,YAAY,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,CAAC;;;;EAIR,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;CAMzG;QACO,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;;;;UAID,EAAE,CAAC,IAAI;WACN,EAAE,CAAC,KAAK;aACN,EAAE,CAAC,IAAI;aACP,EAAE,CAAC,IAAI;;;;;;;;;;;;;;EAclB,YAAY;;;;;;;;;;;EAWZ,SAAS;CACV,CAAC;AACF,CAAC;AAED,SAAgB,cAAc,CAC1B,WAAmB,EACnB,MAAc,EACd,EAAa;IAEb,OAAO;OACJ,EAAE,CAAC,IAAI;;;EAGZ,WAAW;;;EAGX,MAAM;;UAEE,EAAE,CAAC,IAAI;;;;;;;;CAQhB,CAAC;AACF,CAAC"}
|
|
@@ -3,4 +3,8 @@ export declare function handleAICommand(userInput: string, options: {
|
|
|
3
3
|
model?: string;
|
|
4
4
|
dryRun?: boolean;
|
|
5
5
|
autoYes?: boolean;
|
|
6
|
-
}): Promise<
|
|
6
|
+
}): Promise<{
|
|
7
|
+
code: number | null;
|
|
8
|
+
stdout?: string;
|
|
9
|
+
stderr?: string;
|
|
10
|
+
} | undefined>;
|
|
@@ -15,20 +15,21 @@ const autofix_1 = require("../core/autofix");
|
|
|
15
15
|
const confirm_1 = require("../utils/confirm");
|
|
16
16
|
const history_1 = require("../utils/history");
|
|
17
17
|
const validation_1 = require("../core/validation");
|
|
18
|
+
const macros_1 = require("../core/macros");
|
|
18
19
|
function validateAIPlan(obj) {
|
|
19
20
|
return (typeof obj === 'object' &&
|
|
20
21
|
obj !== null &&
|
|
21
22
|
typeof obj.plan === 'string' &&
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
['low', 'medium', 'high'].includes(obj.risk) &&
|
|
24
|
+
(typeof obj.command === 'string' || typeof obj.macro === 'string'));
|
|
24
25
|
}
|
|
25
26
|
async function handleAICommand(userInput, options) {
|
|
26
27
|
const os = (0, os_1.getOSProfile)();
|
|
28
|
+
const macros = (0, macros_1.getMacros)();
|
|
27
29
|
const spinner = (0, ora_1.default)(chalk_1.default.cyan('🧠 AI 正在规划中...')).start();
|
|
28
30
|
try {
|
|
29
31
|
// 1️⃣ 让 AI 出计划
|
|
30
|
-
|
|
31
|
-
const prompt = (0, prompt_1.buildCommandPrompt)(userInput, os);
|
|
32
|
+
const prompt = (0, prompt_1.buildCommandPrompt)(userInput, os, macros);
|
|
32
33
|
const raw = await (0, client_1.askAI)(prompt, options.model);
|
|
33
34
|
spinner.stop();
|
|
34
35
|
const { aiCommandPlanSchema } = require('../core/validation');
|
|
@@ -40,11 +41,31 @@ async function handleAICommand(userInput, options) {
|
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
42
43
|
const plan = parseResult.data;
|
|
44
|
+
// Determine if we're using a macro or a new command
|
|
45
|
+
const isUsingMacro = !!plan.macro;
|
|
46
|
+
let actualCommand = plan.macro ? macros[plan.macro]?.commands : plan.command;
|
|
47
|
+
if (!actualCommand) {
|
|
48
|
+
console.log(chalk_1.default.red('\n❌ 无效的计划:'));
|
|
49
|
+
if (plan.macro) {
|
|
50
|
+
console.log(chalk_1.default.red(`未找到名为 "${plan.macro}" 的 Macro`));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(chalk_1.default.red('未提供有效的命令'));
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const commandToExecute = actualCommand;
|
|
43
58
|
// 2️⃣ 风险兜底
|
|
44
|
-
const finalRisk = (0, risk_1.assessRisk)(
|
|
59
|
+
const finalRisk = (0, risk_1.assessRisk)(commandToExecute, plan.risk);
|
|
45
60
|
// 3️⃣ 展示给用户
|
|
46
61
|
console.log(chalk_1.default.bold.cyan('\n🧠 计划: ') + plan.plan);
|
|
47
|
-
|
|
62
|
+
if (isUsingMacro) {
|
|
63
|
+
console.log(chalk_1.default.bold.green('✨ 复用 Macro: ') + chalk_1.default.yellow(plan.macro));
|
|
64
|
+
console.log(chalk_1.default.gray(' (已验证的命令,无需重新生成)'));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(chalk_1.default.bold.green('💻 命令: ') + chalk_1.default.yellow(commandToExecute));
|
|
68
|
+
}
|
|
48
69
|
const riskColor = finalRisk === 'high' ? chalk_1.default.red : (finalRisk === 'medium' ? chalk_1.default.yellow : chalk_1.default.green);
|
|
49
70
|
console.log(chalk_1.default.bold('⚠️ 风险判断: ') + riskColor(finalRisk.toUpperCase()));
|
|
50
71
|
// Check Dry Run
|
|
@@ -54,11 +75,16 @@ async function handleAICommand(userInput, options) {
|
|
|
54
75
|
}
|
|
55
76
|
// 4️⃣ 确认
|
|
56
77
|
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
57
|
-
|
|
58
|
-
|
|
78
|
+
if (isUsingMacro) {
|
|
79
|
+
console.log(chalk_1.default.yellow('⚠️ 注意: AI 正在复用已验证的 Macro。'));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(chalk_1.default.yellow('⚠️ 注意: 以上命令由 AI 生成,请在执行前仔细检查。'));
|
|
83
|
+
console.log(chalk_1.default.gray(' AI 可能会犯错,安全由您掌控。'));
|
|
84
|
+
}
|
|
59
85
|
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
60
86
|
let shouldExecute = options.execute || options.autoYes;
|
|
61
|
-
// If high risk, maybe force confirm even with autoYes?
|
|
87
|
+
// If high risk, maybe force confirm even with autoYes?
|
|
62
88
|
// For now, let's respect autoYes as the "I know what I'm doing" flag.
|
|
63
89
|
// But if risk is high and NOT autoYes, we definitely ask.
|
|
64
90
|
if (!shouldExecute) {
|
|
@@ -70,12 +96,20 @@ async function handleAICommand(userInput, options) {
|
|
|
70
96
|
}
|
|
71
97
|
// 5️⃣ 执行
|
|
72
98
|
console.log(chalk_1.default.gray('\n执行中...\n'));
|
|
73
|
-
let result
|
|
74
|
-
|
|
75
|
-
|
|
99
|
+
let result;
|
|
100
|
+
if (isUsingMacro) {
|
|
101
|
+
const macroSuccess = (0, macros_1.runMacro)(plan.macro);
|
|
102
|
+
result = { code: 0, stdout: '', stderr: '' };
|
|
103
|
+
console.log(chalk_1.default.green('✓ Macro 已执行'));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
result = await (0, executor_1.exec)(commandToExecute);
|
|
107
|
+
}
|
|
108
|
+
// 6️⃣ 自动修复(仅针对新生成的命令,不针对 Macros)
|
|
109
|
+
if (!isUsingMacro && result.code !== 0 && result.code !== null) {
|
|
76
110
|
console.log(chalk_1.default.red('\n❌ 执行失败,尝试自动修复...'));
|
|
77
|
-
const fixedPlan = await (0, autofix_1.autoFixCommand)(
|
|
78
|
-
if (fixedPlan) {
|
|
111
|
+
const fixedPlan = await (0, autofix_1.autoFixCommand)(commandToExecute, result.stderr, os, options.model);
|
|
112
|
+
if (fixedPlan && fixedPlan.command) {
|
|
79
113
|
console.log(chalk_1.default.bold.cyan('🔁 修复方案: ') + fixedPlan.plan);
|
|
80
114
|
console.log(chalk_1.default.bold.green('💻 修复命令: ') + chalk_1.default.yellow(fixedPlan.command));
|
|
81
115
|
const retry = await (0, confirm_1.confirm)('是否执行修复后的命令?');
|
|
@@ -97,9 +131,14 @@ async function handleAICommand(userInput, options) {
|
|
|
97
131
|
if (result.code === 0) {
|
|
98
132
|
(0, history_1.saveHistory)({
|
|
99
133
|
question: userInput,
|
|
100
|
-
command:
|
|
134
|
+
command: commandToExecute,
|
|
101
135
|
});
|
|
102
|
-
|
|
136
|
+
if (isUsingMacro) {
|
|
137
|
+
console.log(chalk_1.default.green('\n✓ Macro 执行成功并已存入历史库'));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.log(chalk_1.default.green('\n✓ 执行成功并已存入历史库'));
|
|
141
|
+
}
|
|
103
142
|
}
|
|
104
143
|
return result;
|
|
105
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleAICommand.js","sourceRoot":"","sources":["../../src/commands/handleAICommand.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"handleAICommand.js","sourceRoot":"","sources":["../../src/commands/handleAICommand.ts"],"names":[],"mappings":";;;;;AAuBA,0CAoJC;AA3KD,kDAA0B;AAC1B,8CAAsB;AACtB,mCAA0C;AAC1C,yCAAkD;AAClD,yCAAqC;AACrC,+CAAwC;AACxC,uCAA0C;AAC1C,6CAAiD;AACjD,8CAA2C;AAC3C,8CAA+C;AAC/C,mDAA6E;AAC7E,2CAAqD;AAErD,SAAS,cAAc,CAAC,GAAQ;IAC5B,OAAO,CACH,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5C,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CACrE,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,eAAe,CACjC,SAAiB,EACjB,OAAkF;IAElF,MAAM,EAAE,GAAG,IAAA,iBAAY,GAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACD,eAAe;QACf,MAAM,MAAM,GAAG,IAAA,2BAAkB,EAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,IAAA,cAAK,EAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAA,0BAAa,EAAC,GAAG,EAAE,mBAAmB,EAAE,EAAmB,CAAC,CAAC;QAEjF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrG,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,oDAAoD;QACpD,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAE7E,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO;QACX,CAAC;QAED,MAAM,gBAAgB,GAAW,aAAa,CAAC;QAE/C,WAAW;QACX,MAAM,SAAS,GAAG,IAAA,iBAAU,EAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,YAAY;QACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAE3E,gBAAgB;QAChB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,OAAO;QACX,CAAC;QAED,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,IAAI,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;QAEvD,uDAAuD;QACvD,sEAAsE;QACtE,0DAA0D;QAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,aAAa,GAAG,MAAM,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,OAAO;QACX,CAAC;QAED,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,IAAI,MAAiE,CAAC;QAEtE,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,KAAM,CAAC,CAAC;YAC3C,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,MAAM,IAAA,wBAAc,EAClC,gBAAgB,EAChB,MAAM,CAAC,MAAO,EACd,EAAE,EACF,OAAO,CAAC,KAAK,CAChB,CAAC;YAEF,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,eAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBAE7E,MAAM,KAAK,GAAG,MAAM,IAAA,iBAAO,EAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,KAAK,EAAE,CAAC;oBACR,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;oBACvC,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACvC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBACpB,IAAA,qBAAW,EAAC;4BACR,QAAQ,EAAE,SAAS;4BACnB,OAAO,EAAE,SAAS,CAAC,OAAO;yBAC7B,CAAC,CAAC;wBACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBAChD,OAAO,MAAM,CAAC;oBAClB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,WAAW;QACX,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,IAAA,qBAAW,EAAC;gBACR,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YACH,IAAI,YAAY,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;AACL,CAAC"}
|
package/dist/core/autofix.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { OSProfile } from './os';
|
|
2
|
-
import {
|
|
3
|
-
export declare function autoFixCommand(originalCmd: string, stderr: string, os: OSProfile, model?: string): Promise<
|
|
2
|
+
import { AIFixPlan } from './validation';
|
|
3
|
+
export declare function autoFixCommand(originalCmd: string, stderr: string, os: OSProfile, model?: string): Promise<AIFixPlan | null>;
|
package/dist/core/autofix.js
CHANGED
|
@@ -7,7 +7,7 @@ const validation_1 = require("./validation");
|
|
|
7
7
|
async function autoFixCommand(originalCmd, stderr, os, model) {
|
|
8
8
|
const prompt = (0, prompt_1.buildFixPrompt)(originalCmd, stderr, os);
|
|
9
9
|
const raw = await (0, client_1.askAI)(prompt, model);
|
|
10
|
-
const parseResult = (0, validation_1.safeParseJSON)(raw, validation_1.
|
|
10
|
+
const parseResult = (0, validation_1.safeParseJSON)(raw, validation_1.aiFixPlanSchema, {});
|
|
11
11
|
if (!parseResult.success) {
|
|
12
12
|
return null;
|
|
13
13
|
}
|
package/dist/core/autofix.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autofix.js","sourceRoot":"","sources":["../../src/core/autofix.ts"],"names":[],"mappings":";;AAKA,wCAgBC;AApBD,yCAA8C;AAC9C,yCAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"autofix.js","sourceRoot":"","sources":["../../src/core/autofix.ts"],"names":[],"mappings":";;AAKA,wCAgBC;AApBD,yCAA8C;AAC9C,yCAAqC;AACrC,6CAAyE;AAElE,KAAK,UAAU,cAAc,CAChC,WAAmB,EACnB,MAAc,EACd,EAAa,EACb,KAAc;IAEd,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,IAAA,cAAK,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,IAAA,0BAAa,EAAC,GAAG,EAAE,4BAAe,EAAE,EAAe,CAAC,CAAC;IAEzE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC;AAC5B,CAAC"}
|
|
@@ -30,7 +30,8 @@ export declare const DEFAULT_APPS: {
|
|
|
30
30
|
};
|
|
31
31
|
export declare const aiCommandPlanSchema: z.ZodObject<{
|
|
32
32
|
plan: z.ZodString;
|
|
33
|
-
command: z.ZodString
|
|
33
|
+
command: z.ZodOptional<z.ZodString>;
|
|
34
|
+
macro: z.ZodOptional<z.ZodString>;
|
|
34
35
|
risk: z.ZodEnum<{
|
|
35
36
|
low: "low";
|
|
36
37
|
medium: "medium";
|
|
@@ -38,6 +39,16 @@ export declare const aiCommandPlanSchema: z.ZodObject<{
|
|
|
38
39
|
}>;
|
|
39
40
|
}, z.core.$strip>;
|
|
40
41
|
export type AICommandPlan = z.infer<typeof aiCommandPlanSchema>;
|
|
42
|
+
export declare const aiFixPlanSchema: z.ZodObject<{
|
|
43
|
+
plan: z.ZodString;
|
|
44
|
+
command: z.ZodString;
|
|
45
|
+
risk: z.ZodEnum<{
|
|
46
|
+
low: "low";
|
|
47
|
+
medium: "medium";
|
|
48
|
+
high: "high";
|
|
49
|
+
}>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export type AIFixPlan = z.infer<typeof aiFixPlanSchema>;
|
|
41
52
|
export declare const userConfigSchema: z.ZodObject<{
|
|
42
53
|
defaultModel: z.ZodOptional<z.ZodString>;
|
|
43
54
|
aiProxyUrl: z.ZodOptional<z.ZodString>;
|
package/dist/core/validation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.historyEntrySchema = exports.macroSchema = exports.appsConfigSchema = exports.userConfigSchema = exports.aiCommandPlanSchema = exports.DEFAULT_APPS = exports.DEFAULT_ACCOUNT_TYPE = exports.DEFAULT_MODEL = exports.DEFAULT_AI_PROXY_URL = void 0;
|
|
3
|
+
exports.historyEntrySchema = exports.macroSchema = exports.appsConfigSchema = exports.userConfigSchema = exports.aiFixPlanSchema = exports.aiCommandPlanSchema = exports.DEFAULT_APPS = exports.DEFAULT_ACCOUNT_TYPE = exports.DEFAULT_MODEL = exports.DEFAULT_AI_PROXY_URL = void 0;
|
|
4
4
|
exports.extractJSON = extractJSON;
|
|
5
5
|
exports.safeParseJSON = safeParseJSON;
|
|
6
6
|
exports.parseUserConfig = parseUserConfig;
|
|
@@ -18,7 +18,15 @@ exports.DEFAULT_APPS = {
|
|
|
18
18
|
};
|
|
19
19
|
exports.aiCommandPlanSchema = zod_1.z.object({
|
|
20
20
|
plan: zod_1.z.string().describe('Explanation of the command'),
|
|
21
|
-
command: zod_1.z.string().describe('The shell command to execute'),
|
|
21
|
+
command: zod_1.z.string().optional().describe('The shell command to execute'),
|
|
22
|
+
macro: zod_1.z.string().optional().describe('Name of an existing macro to reuse'),
|
|
23
|
+
risk: zod_1.z.enum(['low', 'medium', 'high']).describe('Risk level assessment')
|
|
24
|
+
}).refine(data => data.command || data.macro, {
|
|
25
|
+
message: 'Either command or macro must be provided'
|
|
26
|
+
});
|
|
27
|
+
exports.aiFixPlanSchema = zod_1.z.object({
|
|
28
|
+
plan: zod_1.z.string().describe('Fix explanation'),
|
|
29
|
+
command: zod_1.z.string().describe('The fixed shell command (always required for fixes)'),
|
|
22
30
|
risk: zod_1.z.enum(['low', 'medium', 'high']).describe('Risk level assessment')
|
|
23
31
|
});
|
|
24
32
|
exports.userConfigSchema = zod_1.z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
|