coolbox 0.1.1 → 0.2.1

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/actions.js CHANGED
@@ -11,6 +11,7 @@ export const actions = [
11
11
  command: 'bash <(wget -qO- --no-check-certificate {url}) {os-name}',
12
12
  group: 'system',
13
13
  dangerous: true,
14
+ needRoot: true,
14
15
  params: [
15
16
  { name: 'os-name', message: '请输入要安装的系统(如 alpine-3.23, debian-13, ubuntu-26.04)' },
16
17
  ],
@@ -23,21 +24,24 @@ export const actions = [
23
24
  name: '设置 Swap',
24
25
  description: '通过 spiritLHLS/addswap 一键设置交换空间',
25
26
  type: 'remote',
26
- command: 'sudo bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh)',
27
+ command: 'bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh)',
28
+ needRoot: true,
27
29
  group: 'system',
28
30
  },
29
31
  {
30
32
  name: '设置系统国内镜像源',
31
33
  description: '通过 LinuxMirrors 一键更换系统软件源',
32
34
  type: 'remote',
33
- command: 'sudo bash <(curl -sSL https://linuxmirrors.cn/main.sh)',
35
+ command: 'bash <(curl -sSL https://linuxmirrors.cn/main.sh)',
36
+ needRoot: true,
34
37
  group: 'system',
35
38
  },
36
39
  {
37
40
  name: '安装 Docker 并设置国内镜像源',
38
41
  description: '通过 LinuxMirrors 一键安装 Docker 并配置国内镜像加速',
39
42
  type: 'remote',
40
- command: 'sudo bash <(curl -sSL https://linuxmirrors.cn/docker.sh)',
43
+ command: 'bash <(curl -sSL https://linuxmirrors.cn/docker.sh)',
44
+ needRoot: true,
41
45
  group: 'container',
42
46
  },
43
47
  {
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAkB;IACnC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAa;IAC/B;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0DAA0D;QACnE,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,IAAI;QACf,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE;SAClF;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,kEAAkE;YAC5E,aAAa,EAAE,yEAAyE;SACzF;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,8IAA8I;QACvJ,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,wDAAwD;QACjE,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0DAA0D;QACnE,KAAK,EAAE,WAAW;KACnB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,SAAS;KACjB;CACF,CAAC"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAkB;IACnC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAa;IAC/B;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0DAA0D;QACnE,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE;SAClF;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,kEAAkE;YAC5E,aAAa,EAAE,yEAAyE;SACzF;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,yIAAyI;QAClJ,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,mDAAmD;QAC5D,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,qDAAqD;QAC9D,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,WAAW;KACnB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,SAAS;KACjB;CACF,CAAC"}
package/dist/confirm.js CHANGED
@@ -1,19 +1,17 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  const WARNING_BANNER = `
3
- ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
4
- ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
5
- ⚠️ ⚠️
6
- ⚠️ ██████╗ ██╗ ██╗███████╗██████╗ ███████╗ ⚠️
7
- ⚠️ ██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔════╝ ⚠️
8
- ⚠️ ██║ ██║██║ ██║█████╗ ██████╔╝███████╗ ⚠️
9
- ⚠️ ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗╚════██║ ⚠️
10
- ⚠️ ╚██████╔╝╚██████╔╝███████╗██║ ██║███████║ ⚠️
11
- ⚠️ ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ⚠️
12
- ⚠️ ⚠️
13
- ⚠️ 该操作不可逆转,执行后数据将无法恢复! ⚠️
14
- ⚠️ ⚠️
15
- ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
16
- ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
3
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4
+ ! !
5
+ ! ██████╗ ██╗ ██╗███████╗██████╗ ███████╗ !
6
+ ! ██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔════╝ !
7
+ ! ██║ ██║██║ ██║█████╗ ██████╔╝███████╗ !
8
+ ! ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗╚════██║ !
9
+ ! ╚██████╔╝╚██████╔╝███████╗██║ ██║███████║ !
10
+ ! ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ !
11
+ ! !
12
+ ! 该操作不可逆转,执行后数据将无法恢复! !
13
+ ! !
14
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
17
15
  `;
18
16
  export async function confirmDangerous(actionName) {
19
17
  console.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;CAetB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,IAAI,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,cAAc,GAAG;;;;;;;;;;;;;CAatB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,IAAI,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { showMenu } from './menu.js';
3
- const VERSION = '0.1.0';
3
+ const VERSION = '0.2.0';
4
4
  const BANNER = `
5
5
  ╔═══════════════════════════════════╗
6
- ║ ⚡ CoolBox (快工具箱) v${VERSION}
6
+ ║ ⚡ CoolBox (快工具箱) v${VERSION}
7
7
  ║ Linux 服务器运维工具箱 ║
8
8
  ╚═══════════════════════════════════╝
9
9
  `;
package/dist/menu.js CHANGED
@@ -2,28 +2,6 @@ import { select, input, confirm } from '@inquirer/prompts';
2
2
  import { actions, groups } from './actions.js';
3
3
  import { runAction } from './runner.js';
4
4
  import { confirmDangerous } from './confirm.js';
5
- function buildMenuItems() {
6
- const items = [];
7
- for (const group of groups) {
8
- items.push({
9
- name: `── ${group.label} ──`,
10
- value: `__group__${group.name}`,
11
- });
12
- const groupActions = actions.filter((a) => a.group === group.name);
13
- for (const action of groupActions) {
14
- items.push({
15
- name: ` ${action.name}`,
16
- value: action.name,
17
- description: action.description,
18
- });
19
- }
20
- }
21
- items.push({
22
- name: '退出',
23
- value: '__exit__',
24
- });
25
- return items;
26
- }
27
5
  async function collectParams(action) {
28
6
  const values = {};
29
7
  if (!action.params)
@@ -36,84 +14,98 @@ async function collectParams(action) {
36
14
  }
37
15
  return values;
38
16
  }
17
+ async function executeAction(action) {
18
+ // 危险操作二次确认
19
+ if (action.dangerous) {
20
+ const confirmed = await confirmDangerous(action.name);
21
+ if (!confirmed) {
22
+ console.log('\n已取消操作。\n');
23
+ return;
24
+ }
25
+ }
26
+ // 收集参数
27
+ const paramValues = await collectParams(action);
28
+ // 准备提示
29
+ console.log('');
30
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
31
+ console.log(` 📋 即将执行: ${action.name}`);
32
+ if (action.description) {
33
+ console.log(` ${action.description}`);
34
+ }
35
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
36
+ console.log('');
37
+ const ready = await confirm({
38
+ message: '确认开始执行?',
39
+ default: true,
40
+ });
41
+ if (!ready) {
42
+ console.log('\n已取消操作。\n');
43
+ return;
44
+ }
45
+ // 执行
46
+ console.log('');
47
+ const result = await runAction(action, paramValues);
48
+ // 显示结果
49
+ console.log('');
50
+ if (result.exitCode === 0) {
51
+ console.log('✅ 操作执行成功。');
52
+ }
53
+ else {
54
+ console.log(`❌ 操作执行失败(退出码: ${result.exitCode ?? 'unknown'})。`);
55
+ }
56
+ // 返回菜单或退出
57
+ const next = await select({
58
+ message: '接下来:',
59
+ choices: [
60
+ { name: '返回主菜单', value: 'menu' },
61
+ { name: '退出', value: 'exit' },
62
+ ],
63
+ default: 'menu',
64
+ });
65
+ if (next === 'exit') {
66
+ process.exit(0);
67
+ }
68
+ }
69
+ async function showGroupActions(groupName, groupLabel) {
70
+ const groupActions = actions.filter((a) => a.group === groupName);
71
+ while (true) {
72
+ const choices = groupActions.map((action) => ({
73
+ name: action.name,
74
+ value: action.name,
75
+ description: action.description,
76
+ }));
77
+ choices.push({ name: '返回主菜单', value: '__back__', description: '' });
78
+ const selected = await select({
79
+ message: `${groupLabel} — 请选择操作:`,
80
+ choices,
81
+ });
82
+ if (selected === '__back__') {
83
+ return;
84
+ }
85
+ const action = groupActions.find((a) => a.name === selected);
86
+ if (!action)
87
+ return;
88
+ await executeAction(action);
89
+ }
90
+ }
39
91
  export async function showMenu() {
40
- const menuItems = buildMenuItems();
41
- let lastSelected = menuItems.find((i) => !i.value.startsWith('__'))?.value ?? menuItems[0]?.value;
42
92
  while (true) {
93
+ const choices = groups.map((g) => ({
94
+ name: g.label,
95
+ value: g.name,
96
+ }));
97
+ choices.push({ name: '退出', value: '__exit__' });
43
98
  const selected = await select({
44
- message: '请选择操作:',
45
- choices: menuItems.map((item) => ({
46
- name: item.name,
47
- value: item.value,
48
- description: item.description,
49
- })),
50
- default: lastSelected,
99
+ message: '请选择功能分类:',
100
+ choices,
51
101
  });
52
102
  if (selected === '__exit__') {
53
103
  process.exit(0);
54
104
  }
55
- if (selected.startsWith('__group__')) {
56
- lastSelected = selected;
57
- continue;
58
- }
59
- const action = actions.find((a) => a.name === selected);
60
- if (!action) {
61
- lastSelected = selected;
62
- continue;
63
- }
64
- // 危险操作二次确认
65
- if (action.dangerous) {
66
- const confirmed = await confirmDangerous(action.name);
67
- if (!confirmed) {
68
- console.log('\n已取消操作。\n');
69
- lastSelected = selected;
70
- continue;
71
- }
72
- }
73
- // 收集参数
74
- const paramValues = await collectParams(action);
75
- // 准备提示
76
- console.log('');
77
- console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
78
- console.log(` 📋 即将执行: ${action.name}`);
79
- if (action.description) {
80
- console.log(` ${action.description}`);
81
- }
82
- console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
83
- console.log('');
84
- const ready = await confirm({
85
- message: '确认开始执行?',
86
- default: true,
87
- });
88
- if (!ready) {
89
- console.log('\n已取消操作。\n');
90
- lastSelected = selected;
105
+ const group = groups.find((g) => g.name === selected);
106
+ if (!group)
91
107
  continue;
92
- }
93
- // 执行
94
- console.log('');
95
- const result = await runAction(action, paramValues);
96
- // 显示结果
97
- console.log('');
98
- if (result.exitCode === 0) {
99
- console.log('✅ 操作执行成功。');
100
- }
101
- else {
102
- console.log(`❌ 操作执行失败(退出码: ${result.exitCode ?? 'unknown'})。`);
103
- }
104
- // 返回菜单或退出
105
- const next = await select({
106
- message: '接下来:',
107
- choices: [
108
- { name: '返回菜单', value: 'menu' },
109
- { name: '退出', value: 'exit' },
110
- ],
111
- default: 'menu',
112
- });
113
- if (next === 'exit') {
114
- process.exit(0);
115
- }
116
- lastSelected = selected;
108
+ await showGroupActions(group.name, group.label);
117
109
  }
118
110
  }
119
111
  //# sourceMappingURL=menu.js.map
package/dist/menu.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQhD,SAAS,cAAc;IACrB,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,MAAM,KAAK,CAAC,KAAK,KAAK;YAC5B,KAAK,EAAE,YAAY,KAAK,CAAC,IAAI,EAAE;SAChC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE;gBACxB,KAAK,EAAE,MAAM,CAAC,IAAI;gBAClB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,UAAU;KAClB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAc;IACzC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAElG,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;YAC5B,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,YAAY,GAAG,QAAQ,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,YAAY,GAAG,QAAQ,CAAC;YACxB,SAAS;QACX,CAAC;QAED,WAAW;QACX,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,YAAY,GAAG,QAAQ,CAAC;gBACxB,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO;QACP,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;YAC1B,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,YAAY,GAAG,QAAQ,CAAC;YACxB,SAAS;QACX,CAAC;QAED,KAAK;QACL,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEpD,OAAO;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,QAAQ,IAAI,SAAS,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,UAAU;QACV,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;YACxB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC/B,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;aAC9B;YACD,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,YAAY,GAAG,QAAQ,CAAC;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"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"}
package/dist/runner.js CHANGED
@@ -1,9 +1,37 @@
1
1
  import { spawn } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
2
3
  import { fileURLToPath } from 'node:url';
3
4
  import { dirname, join } from 'node:path';
4
5
  import { detectNetwork } from './network.js';
5
6
  const __filename = fileURLToPath(import.meta.url);
6
7
  const __dirname = dirname(__filename);
8
+ /**
9
+ * 检查当前是否为 root 用户
10
+ */
11
+ function isRoot() {
12
+ return process.getuid?.() === 0;
13
+ }
14
+ /**
15
+ * 检查系统中是否存在 sudo 命令
16
+ */
17
+ function hasSudo() {
18
+ return existsSync('/usr/bin/sudo') || existsSync('/bin/sudo');
19
+ }
20
+ /**
21
+ * 获取 sudo 前缀:
22
+ * - 已是 root → 不需要前缀
23
+ * - 非 root 但有 sudo → 返回 "sudo"
24
+ * - 非 root 且没有 sudo → 抛出错误,提示安装
25
+ */
26
+ function requireSudo() {
27
+ if (isRoot())
28
+ return '';
29
+ if (hasSudo())
30
+ return 'sudo';
31
+ console.error('\n❌ 该操作需要 root 权限,但系统中未找到 sudo 命令。');
32
+ console.error(' 请先安装 sudo: apt install sudo / yum install sudo\n');
33
+ process.exit(1);
34
+ }
7
35
  function resolveCommand(action, paramValues) {
8
36
  let cmd = action.command;
9
37
  if (action.type === 'remote' && action.urls) {
@@ -13,11 +41,18 @@ function resolveCommand(action, paramValues) {
13
41
  }
14
42
  if (action.type === 'local') {
15
43
  const scriptPath = join(__dirname, 'scripts', action.command);
16
- cmd = `sudo bash "${scriptPath}"`;
44
+ cmd = `bash "${scriptPath}"`;
17
45
  }
18
46
  for (const [key, value] of Object.entries(paramValues)) {
19
47
  cmd = cmd.replace(`{${key}}`, value);
20
48
  }
49
+ // 需要 root 权限的操作,自动加 sudo 前缀
50
+ if (action.needRoot) {
51
+ const sudo = requireSudo();
52
+ if (sudo) {
53
+ cmd = `${sudo} ${cmd}`;
54
+ }
55
+ }
21
56
  return cmd;
22
57
  }
23
58
  export function runAction(action, paramValues = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,cAAc,CAAC,MAAc,EAAE,WAAmC;IACzE,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAEzB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAClF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,GAAG,GAAG,cAAc,UAAU,GAAG,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,cAAsC,EAAE;IAExC,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEhD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;YACvC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -14,6 +14,7 @@ export interface Action {
14
14
  command: string;
15
15
  group: string;
16
16
  dangerous?: boolean;
17
+ needRoot?: boolean;
17
18
  params?: ActionParam[];
18
19
  urls?: ActionUrls;
19
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coolbox",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Quick Tool Box - Linux 服务器运维工具箱",
5
5
  "type": "module",
6
6
  "bin": {