yuangs 1.3.39 → 1.3.45

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.
Files changed (59) hide show
  1. package/README.md +44 -0
  2. package/dist/ai/client.d.ts +9 -0
  3. package/dist/ai/client.js +118 -0
  4. package/dist/ai/client.js.map +1 -0
  5. package/dist/ai/prompt.d.ts +3 -0
  6. package/dist/ai/prompt.js +56 -0
  7. package/dist/ai/prompt.js.map +1 -0
  8. package/dist/ai/types.d.ts +5 -0
  9. package/dist/ai/types.js +3 -0
  10. package/dist/ai/types.js.map +1 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.js +142 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/handleAIChat.d.ts +1 -0
  15. package/dist/commands/handleAIChat.js +111 -0
  16. package/dist/commands/handleAIChat.js.map +1 -0
  17. package/dist/commands/handleAICommand.d.ts +4 -0
  18. package/dist/commands/handleAICommand.js +97 -0
  19. package/dist/commands/handleAICommand.js.map +1 -0
  20. package/dist/commands/handleConfig.d.ts +1 -0
  21. package/dist/commands/handleConfig.js +73 -0
  22. package/dist/commands/handleConfig.js.map +1 -0
  23. package/dist/core/apps.d.ts +7 -0
  24. package/dist/core/apps.js +64 -0
  25. package/dist/core/apps.js.map +1 -0
  26. package/dist/core/autofix.d.ts +3 -0
  27. package/dist/core/autofix.js +24 -0
  28. package/dist/core/autofix.js.map +1 -0
  29. package/dist/core/executor.d.ts +6 -0
  30. package/dist/core/executor.js +28 -0
  31. package/dist/core/executor.js.map +1 -0
  32. package/dist/core/macros.d.ts +9 -0
  33. package/dist/core/macros.js +51 -0
  34. package/dist/core/macros.js.map +1 -0
  35. package/dist/core/os.d.ts +7 -0
  36. package/dist/core/os.js +36 -0
  37. package/dist/core/os.js.map +1 -0
  38. package/dist/core/risk.d.ts +1 -0
  39. package/dist/core/risk.js +11 -0
  40. package/dist/core/risk.js.map +1 -0
  41. package/dist/index.d.ts +1 -0
  42. package/dist/index.js +3 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/utils/confirm.d.ts +1 -0
  45. package/dist/utils/confirm.js +55 -0
  46. package/dist/utils/confirm.js.map +1 -0
  47. package/dist/utils/history.d.ts +10 -0
  48. package/dist/utils/history.js +31 -0
  49. package/dist/utils/history.js.map +1 -0
  50. package/package.json +24 -8
  51. package/cli.js +0 -597
  52. package/index.js +0 -361
  53. package/test/index.test.js +0 -78
  54. package/test/macros.test.js +0 -91
  55. package/test_interactive_history.js +0 -66
  56. package/test_interactive_history_multi.js +0 -67
  57. package/yuangs.config.example.json +0 -11
  58. package/yuangs.config.example.yaml +0 -23
  59. package/yuangs.config.json +0 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleAICommand.js","sourceRoot":"","sources":["../../src/commands/handleAICommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function handleConfig(args: string[]): void;
@@ -0,0 +1,73 @@
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.handleConfig = handleConfig;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const CONFIG_FILE = path_1.default.join(os_1.default.homedir(), '.yuangs.json');
12
+ function handleConfig(args) {
13
+ const action = args[0]; // get, set, list
14
+ if (!action || action === 'list') {
15
+ const config = readConfig();
16
+ console.log(chalk_1.default.bold.cyan('\n⚙️ 当前配置 (~/.yuangs.json):\n'));
17
+ if (Object.keys(config).length === 0) {
18
+ console.log(chalk_1.default.gray(' (配置文件不存在或为空)'));
19
+ }
20
+ else {
21
+ Object.entries(config).forEach(([key, value]) => {
22
+ console.log(` ${chalk_1.default.white(key)}: ${chalk_1.default.green(value)}`);
23
+ });
24
+ }
25
+ console.log('\n使用方法:');
26
+ console.log(chalk_1.default.gray(' yuangs config set <key> <value>'));
27
+ console.log(chalk_1.default.gray(' yuangs config get <key>\n'));
28
+ return;
29
+ }
30
+ if (action === 'set') {
31
+ const key = args[1];
32
+ const value = args[2];
33
+ if (!key || !value) {
34
+ console.log(chalk_1.default.red('错误: 请提供 key 和 value。例如: yuangs config set defaultModel Assistant'));
35
+ return;
36
+ }
37
+ const config = readConfig();
38
+ config[key] = value;
39
+ writeConfig(config);
40
+ console.log(chalk_1.default.green(`✓ 已将 ${key} 设置为 ${value}`));
41
+ return;
42
+ }
43
+ if (action === 'get') {
44
+ const key = args[1];
45
+ if (!key) {
46
+ console.log(chalk_1.default.red('错误: 请提供 key。例如: yuangs config get defaultModel'));
47
+ return;
48
+ }
49
+ const config = readConfig();
50
+ if (config[key] !== undefined) {
51
+ console.log(config[key]);
52
+ }
53
+ else {
54
+ console.log(chalk_1.default.yellow(`配置项 ${key} 不存在`));
55
+ }
56
+ return;
57
+ }
58
+ }
59
+ function readConfig() {
60
+ if (fs_1.default.existsSync(CONFIG_FILE)) {
61
+ try {
62
+ return JSON.parse(fs_1.default.readFileSync(CONFIG_FILE, 'utf8'));
63
+ }
64
+ catch (e) {
65
+ return {};
66
+ }
67
+ }
68
+ return {};
69
+ }
70
+ function writeConfig(config) {
71
+ fs_1.default.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
72
+ }
73
+ //# sourceMappingURL=handleConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleConfig.js","sourceRoot":"","sources":["../../src/commands/handleConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const DEFAULT_APPS: {
2
+ shici: string;
3
+ dict: string;
4
+ pong: string;
5
+ };
6
+ export declare function loadAppsConfig(): Record<string, string>;
7
+ export declare function openUrl(url: string): void;
@@ -0,0 +1,64 @@
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.DEFAULT_APPS = void 0;
7
+ exports.loadAppsConfig = loadAppsConfig;
8
+ exports.openUrl = openUrl;
9
+ const child_process_1 = require("child_process");
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const js_yaml_1 = __importDefault(require("js-yaml"));
13
+ const os_1 = __importDefault(require("os"));
14
+ exports.DEFAULT_APPS = {
15
+ shici: 'https://wealth.want.biz/shici/index.html',
16
+ dict: 'https://wealth.want.biz/pages/dict.html',
17
+ pong: 'https://wealth.want.biz/pages/pong.html'
18
+ };
19
+ function loadAppsConfig() {
20
+ const configPaths = [
21
+ path_1.default.join(process.cwd(), 'yuangs.config.json'),
22
+ path_1.default.join(process.cwd(), 'yuangs.config.yaml'),
23
+ path_1.default.join(process.cwd(), 'yuangs.config.yml'),
24
+ path_1.default.join(process.cwd(), '.yuangs.json'),
25
+ path_1.default.join(process.cwd(), '.yuangs.yaml'),
26
+ path_1.default.join(process.cwd(), '.yuangs.yml'),
27
+ path_1.default.join(os_1.default.homedir(), '.yuangs.json'),
28
+ path_1.default.join(os_1.default.homedir(), '.yuangs.yaml'),
29
+ path_1.default.join(os_1.default.homedir(), '.yuangs.yml'),
30
+ ];
31
+ for (const configPath of configPaths) {
32
+ if (fs_1.default.existsSync(configPath)) {
33
+ try {
34
+ const configContent = fs_1.default.readFileSync(configPath, 'utf8');
35
+ let config;
36
+ if (configPath.endsWith('.yaml') || configPath.endsWith('.yml')) {
37
+ config = js_yaml_1.default.load(configContent);
38
+ }
39
+ else {
40
+ config = JSON.parse(configContent);
41
+ }
42
+ return config.apps || config;
43
+ }
44
+ catch (error) { }
45
+ }
46
+ }
47
+ return exports.DEFAULT_APPS;
48
+ }
49
+ function openUrl(url) {
50
+ let command;
51
+ switch (process.platform) {
52
+ case 'darwin':
53
+ command = `open "${url}"`;
54
+ break;
55
+ case 'win32':
56
+ command = `start "${url}"`;
57
+ break;
58
+ default:
59
+ command = `xdg-open "${url}"`;
60
+ break;
61
+ }
62
+ (0, child_process_1.exec)(command);
63
+ }
64
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/core/apps.ts"],"names":[],"mappings":";;;;;;AAYA,wCA4BC;AAGD,0BAQC;AAnDD,iDAAqC;AACrC,4CAAoB;AACpB,gDAAwB;AACxB,sDAA2B;AAC3B,4CAAoB;AAEP,QAAA,YAAY,GAAG;IACxB,KAAK,EAAE,0CAA0C;IACjD,IAAI,EAAE,yCAAyC;IAC/C,IAAI,EAAE,yCAAyC;CAClD,CAAC;AAEF,SAAgB,cAAc;IAC1B,MAAM,WAAW,GAAG;QAChB,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC;QAC9C,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC;QAC9C,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC;QAC7C,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;QACxC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;QACxC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC;QACvC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC;QACvC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC;QACvC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC;KACzC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACD,MAAM,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC1D,IAAI,MAAW,CAAC;gBAChB,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9D,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,oBAAY,CAAC;AACxB,CAAC;AAGD,SAAgB,OAAO,CAAC,GAAW;IAC/B,IAAI,OAAO,CAAC;IACZ,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,QAAQ;YAAE,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;YAAC,MAAM;QAChD,KAAK,OAAO;YAAE,OAAO,GAAG,UAAU,GAAG,GAAG,CAAC;YAAC,MAAM;QAChD;YAAS,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;YAAC,MAAM;IAClD,CAAC;IACD,IAAA,oBAAI,EAAC,OAAO,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { OSProfile } from './os';
2
+ import { AICommandPlan } from '../ai/types';
3
+ export declare function autoFixCommand(originalCmd: string, stderr: string, os: OSProfile, model?: string): Promise<AICommandPlan | null>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.autoFixCommand = autoFixCommand;
4
+ const prompt_1 = require("../ai/prompt");
5
+ const client_1 = require("../ai/client");
6
+ async function autoFixCommand(originalCmd, stderr, os, model) {
7
+ const prompt = (0, prompt_1.buildFixPrompt)(originalCmd, stderr, os);
8
+ const raw = await (0, client_1.askAI)(prompt, model);
9
+ try {
10
+ // Extract JSON if AI wrapped it in triple backticks
11
+ let jsonContent = raw;
12
+ if (raw.includes('```json')) {
13
+ jsonContent = raw.split('```json')[1].split('```')[0].trim();
14
+ }
15
+ else if (raw.includes('```')) {
16
+ jsonContent = raw.split('```')[1].split('```')[0].trim();
17
+ }
18
+ return JSON.parse(jsonContent);
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ //# sourceMappingURL=autofix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autofix.js","sourceRoot":"","sources":["../../src/core/autofix.ts"],"names":[],"mappings":";;AAKA,wCAsBC;AA1BD,yCAA8C;AAC9C,yCAAqC;AAG9B,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,IAAI,CAAC;QACD,oDAAoD;QACpD,IAAI,WAAW,GAAG,GAAG,CAAC;QACtB,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type ExecResult = {
2
+ stdout: string;
3
+ stderr: string;
4
+ code: number | null;
5
+ };
6
+ export declare function exec(command: string): Promise<ExecResult>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exec = exec;
4
+ const child_process_1 = require("child_process");
5
+ async function exec(command) {
6
+ return new Promise((resolve) => {
7
+ let stdout = '';
8
+ let stderr = '';
9
+ // Using shell: true to support things like pipes
10
+ const child = (0, child_process_1.spawn)(command, [], { shell: true });
11
+ child.stdout.on('data', (data) => {
12
+ stdout += data.toString();
13
+ process.stdout.write(data);
14
+ });
15
+ child.stderr.on('data', (data) => {
16
+ stderr += data.toString();
17
+ process.stderr.write(data);
18
+ });
19
+ child.on('close', (code) => {
20
+ resolve({ stdout, stderr, code });
21
+ });
22
+ child.on('error', (err) => {
23
+ stderr += err.message;
24
+ resolve({ stdout, stderr, code: 1 });
25
+ });
26
+ });
27
+ }
28
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":";;AAQA,oBA2BC;AAnCD,iDAAsC;AAQ/B,KAAK,UAAU,IAAI,CAAC,OAAe;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC;YACtB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type Macro = {
2
+ commands: string;
3
+ description: string;
4
+ createdAt: string;
5
+ };
6
+ export declare function getMacros(): Record<string, Macro>;
7
+ export declare function saveMacro(name: string, commands: string, description?: string): boolean;
8
+ export declare function deleteMacro(name: string): boolean;
9
+ export declare function runMacro(name: string): boolean;
@@ -0,0 +1,51 @@
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.getMacros = getMacros;
7
+ exports.saveMacro = saveMacro;
8
+ exports.deleteMacro = deleteMacro;
9
+ exports.runMacro = runMacro;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const os_1 = __importDefault(require("os"));
13
+ const MACROS_FILE = path_1.default.join(os_1.default.homedir(), '.yuangs_macros.json');
14
+ function getMacros() {
15
+ if (fs_1.default.existsSync(MACROS_FILE)) {
16
+ try {
17
+ return JSON.parse(fs_1.default.readFileSync(MACROS_FILE, 'utf8'));
18
+ }
19
+ catch (e) { }
20
+ }
21
+ return {};
22
+ }
23
+ function saveMacro(name, commands, description = '') {
24
+ const macros = getMacros();
25
+ macros[name] = {
26
+ commands,
27
+ description,
28
+ createdAt: new Date().toISOString()
29
+ };
30
+ fs_1.default.writeFileSync(MACROS_FILE, JSON.stringify(macros, null, 2));
31
+ return true;
32
+ }
33
+ function deleteMacro(name) {
34
+ const macros = getMacros();
35
+ if (macros[name]) {
36
+ delete macros[name];
37
+ fs_1.default.writeFileSync(MACROS_FILE, JSON.stringify(macros, null, 2));
38
+ return true;
39
+ }
40
+ return false;
41
+ }
42
+ function runMacro(name) {
43
+ const macros = getMacros();
44
+ const macro = macros[name];
45
+ if (!macro)
46
+ return false;
47
+ const { spawn } = require('child_process');
48
+ spawn(macro.commands, [], { shell: true, stdio: 'inherit' });
49
+ return true;
50
+ }
51
+ //# sourceMappingURL=macros.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macros.js","sourceRoot":"","sources":["../../src/core/macros.ts"],"names":[],"mappings":";;;;;AAYA,8BAOC;AAED,8BASC;AAED,kCAQC;AAED,4BAQC;AAlDD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;AAQnE,SAAgB,SAAS;IACrB,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAgB,SAAS,CAAC,IAAY,EAAE,QAAgB,EAAE,cAAsB,EAAE;IAC9E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,GAAG;QACX,QAAQ;QACR,WAAW;QACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IACF,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAY;IACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type OSProfile = {
2
+ name: string;
3
+ shell: string;
4
+ find: 'bsd' | 'gnu';
5
+ stat: 'bsd' | 'gnu';
6
+ };
7
+ export declare function getOSProfile(): OSProfile;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOSProfile = getOSProfile;
4
+ function getOSProfile() {
5
+ switch (process.platform) {
6
+ case 'darwin':
7
+ return {
8
+ name: 'macOS',
9
+ shell: 'zsh',
10
+ find: 'bsd',
11
+ stat: 'bsd',
12
+ };
13
+ case 'linux':
14
+ return {
15
+ name: 'Linux',
16
+ shell: 'bash',
17
+ find: 'gnu',
18
+ stat: 'gnu',
19
+ };
20
+ case 'win32':
21
+ return {
22
+ name: 'Windows',
23
+ shell: 'cmd',
24
+ find: 'gnu', // Win32 find is different, but for AI context let's assume GNU style tools if they are there, or just label it.
25
+ stat: 'gnu',
26
+ };
27
+ default:
28
+ return {
29
+ name: process.platform,
30
+ shell: 'sh',
31
+ find: 'gnu',
32
+ stat: 'gnu',
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=os.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os.js","sourceRoot":"","sources":["../../src/core/os.ts"],"names":[],"mappings":";;AAOA,oCA+BC;AA/BD,SAAgB,YAAY;IACxB,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,QAAQ;YACT,OAAO;gBACH,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,KAAK;aACd,CAAC;QACN,KAAK,OAAO;YACR,OAAO;gBACH,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,KAAK;aACd,CAAC;QACN,KAAK,OAAO;YACR,OAAO;gBACH,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,KAAK,EAAE,gHAAgH;gBAC7H,IAAI,EAAE,KAAK;aACd,CAAC;QACN;YACI,OAAO;gBACH,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,KAAK;aACd,CAAC;IACV,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function assessRisk(command: string, aiRisk: 'low' | 'medium' | 'high'): 'low' | 'medium' | 'high';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assessRisk = assessRisk;
4
+ function assessRisk(command, aiRisk) {
5
+ const highRiskCommands = ['rm ', 'sudo ', 'mv ', 'dd ', '> /dev/', ':(){ :|:& };:'];
6
+ const hasHighRisk = highRiskCommands.some(cmd => command.includes(cmd));
7
+ if (hasHighRisk)
8
+ return 'high';
9
+ return aiRisk;
10
+ }
11
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +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"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare function confirm(message: string): Promise<boolean>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.confirm = confirm;
40
+ const readline = __importStar(require("node:readline/promises"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ async function confirm(message) {
43
+ const rl = readline.createInterface({
44
+ input: process.stdin,
45
+ output: process.stdout,
46
+ });
47
+ try {
48
+ const answer = await rl.question(chalk_1.default.yellow(`\n⚠️ ${message} (y/N) `));
49
+ return answer.toLowerCase() === 'y';
50
+ }
51
+ finally {
52
+ rl.close();
53
+ }
54
+ }
55
+ //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/utils/confirm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,0BAYC;AAfD,iEAAmD;AACnD,kDAA0B;AAEnB,KAAK,UAAU,OAAO,CAAC,OAAe;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,OAAO,SAAS,CAAC,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;IACxC,CAAC;YAAS,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type HistoryEntry = {
2
+ question: string;
3
+ command: string;
4
+ time: string;
5
+ };
6
+ export declare function getCommandHistory(): HistoryEntry[];
7
+ export declare function saveHistory(entry: {
8
+ question: string;
9
+ command: string;
10
+ }): void;
@@ -0,0 +1,31 @@
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.getCommandHistory = getCommandHistory;
7
+ exports.saveHistory = saveHistory;
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const HISTORY_FILE = path_1.default.join(os_1.default.homedir(), '.yuangs_cmd_history.json');
12
+ function getCommandHistory() {
13
+ if (fs_1.default.existsSync(HISTORY_FILE)) {
14
+ try {
15
+ return JSON.parse(fs_1.default.readFileSync(HISTORY_FILE, 'utf8'));
16
+ }
17
+ catch (e) { }
18
+ }
19
+ return [];
20
+ }
21
+ function saveHistory(entry) {
22
+ let history = getCommandHistory();
23
+ const newEntry = {
24
+ ...entry,
25
+ time: new Date().toLocaleString()
26
+ };
27
+ // Keep last 5, unique commands
28
+ history = [newEntry, ...history.filter(item => item.command !== entry.command)].slice(0, 5);
29
+ fs_1.default.writeFileSync(HISTORY_FILE, JSON.stringify(history, null, 2));
30
+ }
31
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":";;;;;AAYA,8CAOC;AAED,kCASC;AA9BD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAC;AAQzE,SAAgB,iBAAiB;IAC7B,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAgB,WAAW,CAAC,KAA4C;IACpE,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAiB;QAC3B,GAAG,KAAK;QACR,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;KACpC,CAAC;IACF,+BAA+B;IAC/B,OAAO,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,21 @@
1
1
  {
2
2
  "name": "yuangs",
3
- "version": "1.3.39",
3
+ "version": "1.3.45",
4
4
  "description": "苑广山的个人应用集合 CLI(彩色版)",
5
- "main": "index.js",
5
+ "author": "苑广山",
6
+ "license": "ISC",
6
7
  "bin": {
7
- "yuangs": "cli.js"
8
+ "yuangs": "dist/cli.js"
8
9
  },
10
+ "main": "dist/cli.js",
11
+ "types": "dist/cli.d.ts",
12
+ "files": [
13
+ "dist"
14
+ ],
9
15
  "scripts": {
16
+ "dev": "ts-node src/cli.ts",
17
+ "build": "tsc",
18
+ "prepublishOnly": "npm run build",
10
19
  "test": "jest"
11
20
  },
12
21
  "keywords": [
@@ -15,7 +24,6 @@
15
24
  "tools",
16
25
  "colorful"
17
26
  ],
18
- "homepage": "https://github.com/yauangshan/npm_yuangs#readme",
19
27
  "repository": {
20
28
  "type": "git",
21
29
  "url": "git+https://github.com/yuanguangshan/npm_yuangs.git"
@@ -23,18 +31,26 @@
23
31
  "bugs": {
24
32
  "url": "https://github.com/yuanguangshan/npm_yuangs/issues"
25
33
  },
26
- "author": "yuanguangshan",
27
- "license": "ISC",
34
+ "homepage": "https://github.com/yauangshan/npm_yuangs#readme",
28
35
  "dependencies": {
29
36
  "axios": "^1.13.2",
30
37
  "chalk": "^4.1.2",
31
38
  "js-yaml": "^4.1.0",
32
39
  "marked": "^15.0.12",
33
40
  "marked-terminal": "^7.3.0",
34
- "ora": "^9.0.0"
41
+ "ora": "^6.3.1"
35
42
  },
36
43
  "devDependencies": {
37
- "jest": "^29.7.0"
44
+ "@types/js-yaml": "^4.0.9",
45
+ "@types/marked": "^5.0.2",
46
+ "@types/node": "^20.11.30",
47
+ "@types/ora": "^3.1.0",
48
+ "jest": "^29.7.0",
49
+ "ts-node": "^10.9.2",
50
+ "typescript": "^5.9.3"
51
+ },
52
+ "engines": {
53
+ "node": ">=18"
38
54
  },
39
55
  "publishConfig": {
40
56
  "access": "public"