coolbox 0.2.0 → 0.2.2
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 +12 -3
- package/dist/actions.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +21 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.js +38 -6
- package/dist/index.js.map +1 -1
- package/dist/menu.js +4 -15
- package/dist/menu.js.map +1 -1
- package/dist/runner.js +36 -1
- package/dist/runner.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/dist/actions.js
CHANGED
|
@@ -5,12 +5,14 @@ export const groups = [
|
|
|
5
5
|
];
|
|
6
6
|
export const actions = [
|
|
7
7
|
{
|
|
8
|
+
id: 1,
|
|
8
9
|
name: '重装 Linux 系统',
|
|
9
10
|
description: '通过 bin456789/reinstall 一键重装操作系统(将清空所有数据)',
|
|
10
11
|
type: 'remote',
|
|
11
12
|
command: 'bash <(wget -qO- --no-check-certificate {url}) {os-name}',
|
|
12
13
|
group: 'system',
|
|
13
14
|
dangerous: true,
|
|
15
|
+
needRoot: true,
|
|
14
16
|
params: [
|
|
15
17
|
{ name: 'os-name', message: '请输入要安装的系统(如 alpine-3.23, debian-13, ubuntu-26.04)' },
|
|
16
18
|
],
|
|
@@ -20,27 +22,34 @@ export const actions = [
|
|
|
20
22
|
},
|
|
21
23
|
},
|
|
22
24
|
{
|
|
25
|
+
id: 2,
|
|
23
26
|
name: '设置 Swap',
|
|
24
27
|
description: '通过 spiritLHLS/addswap 一键设置交换空间',
|
|
25
28
|
type: 'remote',
|
|
26
|
-
command: '
|
|
29
|
+
command: 'bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh)',
|
|
30
|
+
needRoot: true,
|
|
27
31
|
group: 'system',
|
|
28
32
|
},
|
|
29
33
|
{
|
|
34
|
+
id: 3,
|
|
30
35
|
name: '设置系统国内镜像源',
|
|
31
36
|
description: '通过 LinuxMirrors 一键更换系统软件源',
|
|
32
37
|
type: 'remote',
|
|
33
|
-
command: '
|
|
38
|
+
command: 'bash <(curl -sSL https://linuxmirrors.cn/main.sh)',
|
|
39
|
+
needRoot: true,
|
|
34
40
|
group: 'system',
|
|
35
41
|
},
|
|
36
42
|
{
|
|
43
|
+
id: 4,
|
|
37
44
|
name: '安装 Docker 并设置国内镜像源',
|
|
38
45
|
description: '通过 LinuxMirrors 一键安装 Docker 并配置国内镜像加速',
|
|
39
46
|
type: 'remote',
|
|
40
|
-
command: '
|
|
47
|
+
command: 'bash <(curl -sSL https://linuxmirrors.cn/docker.sh)',
|
|
48
|
+
needRoot: true,
|
|
41
49
|
group: 'container',
|
|
42
50
|
},
|
|
43
51
|
{
|
|
52
|
+
id: 5,
|
|
44
53
|
name: '开启 BBR',
|
|
45
54
|
description: '开启 BBR 拥塞控制算法以提升网络传输性能',
|
|
46
55
|
type: 'local',
|
package/dist/actions.js.map
CHANGED
|
@@ -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,
|
|
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,EAAE,EAAE,CAAC;QACL,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,EAAE,EAAE,CAAC;QACL,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,EAAE,EAAE,CAAC;QACL,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,EAAE,EAAE,CAAC;QACL,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,EAAE,EAAE,CAAC;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,SAAS;KACjB;CACF,CAAC"}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { input, confirm } from '@inquirer/prompts';
|
|
2
|
+
export async function collectParams(action) {
|
|
3
|
+
const values = {};
|
|
4
|
+
if (!action.params)
|
|
5
|
+
return values;
|
|
6
|
+
for (const param of action.params) {
|
|
7
|
+
const value = await input({
|
|
8
|
+
message: param.message,
|
|
9
|
+
});
|
|
10
|
+
values[param.name] = value.trim();
|
|
11
|
+
}
|
|
12
|
+
return values;
|
|
13
|
+
}
|
|
14
|
+
export async function confirmDangerous(actionName) {
|
|
15
|
+
const answer = await confirm({
|
|
16
|
+
message: `⚠️ "${actionName}" 为危险操作,确认执行吗?(y/n)`,
|
|
17
|
+
default: false,
|
|
18
|
+
});
|
|
19
|
+
return answer;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,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,gBAAgB,CAAC,UAAkB;IACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,QAAQ,UAAU,qBAAqB;QAChD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { showMenu } from './menu.js';
|
|
3
|
-
|
|
3
|
+
import { actions } from './actions.js';
|
|
4
|
+
import { runAction } from './runner.js';
|
|
5
|
+
import { collectParams, confirmDangerous } from './cli.js';
|
|
6
|
+
const VERSION = '0.2.1';
|
|
4
7
|
const BANNER = `
|
|
5
8
|
╔═══════════════════════════════════╗
|
|
6
9
|
║ ⚡ CoolBox (快工具箱) v${VERSION} ║
|
|
7
10
|
║ Linux 服务器运维工具箱 ║
|
|
8
11
|
╚═══════════════════════════════════╝
|
|
9
12
|
`;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
async function main() {
|
|
14
|
+
const args = process.argv.slice(2);
|
|
15
|
+
// npx coolbox <id> — 非交互式直接执行
|
|
16
|
+
if (args.length > 0) {
|
|
17
|
+
const id = Number(args[0]);
|
|
18
|
+
const action = actions.find((a) => a.id === id);
|
|
19
|
+
if (!action || isNaN(id)) {
|
|
20
|
+
console.error(`❌ 未找到编号为 "${args[0]}" 的操作。`);
|
|
21
|
+
console.error(' 可用操作:');
|
|
22
|
+
for (const a of actions) {
|
|
23
|
+
console.error(` [${a.id}] ${a.name}`);
|
|
24
|
+
}
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
// 危险操作二次确认
|
|
28
|
+
if (action.dangerous) {
|
|
29
|
+
const confirmed = await confirmDangerous(action.name);
|
|
30
|
+
if (!confirmed) {
|
|
31
|
+
console.log('已取消操作。');
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const paramValues = await collectParams(action);
|
|
36
|
+
const result = await runAction(action, paramValues);
|
|
37
|
+
process.exit(result.exitCode ?? 1);
|
|
38
|
+
}
|
|
39
|
+
// npx coolbox — 交互式菜单
|
|
40
|
+
console.log(BANNER);
|
|
41
|
+
showMenu().catch((err) => {
|
|
42
|
+
console.error('发生错误:', err);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
main();
|
|
15
47
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE3D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,MAAM,GAAG;;0BAEW,OAAO;;;CAGhC,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,8BAA8B;IAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,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,QAAQ,CAAC,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpB,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/menu.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import { select,
|
|
1
|
+
import { select, 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
|
-
|
|
6
|
-
const values = {};
|
|
7
|
-
if (!action.params)
|
|
8
|
-
return values;
|
|
9
|
-
for (const param of action.params) {
|
|
10
|
-
const value = await input({
|
|
11
|
-
message: param.message,
|
|
12
|
-
});
|
|
13
|
-
values[param.name] = value.trim();
|
|
14
|
-
}
|
|
15
|
-
return values;
|
|
16
|
-
}
|
|
5
|
+
import { collectParams } from './cli.js';
|
|
17
6
|
async function executeAction(action) {
|
|
18
7
|
// 危险操作二次确认
|
|
19
8
|
if (action.dangerous) {
|
|
@@ -28,7 +17,7 @@ async function executeAction(action) {
|
|
|
28
17
|
// 准备提示
|
|
29
18
|
console.log('');
|
|
30
19
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
31
|
-
console.log(` 📋 即将执行: ${action.name}`);
|
|
20
|
+
console.log(` 📋 即将执行: [${action.id}] ${action.name}`);
|
|
32
21
|
if (action.description) {
|
|
33
22
|
console.log(` ${action.description}`);
|
|
34
23
|
}
|
|
@@ -70,7 +59,7 @@ async function showGroupActions(groupName, groupLabel) {
|
|
|
70
59
|
const groupActions = actions.filter((a) => a.group === groupName);
|
|
71
60
|
while (true) {
|
|
72
61
|
const choices = groupActions.map((action) => ({
|
|
73
|
-
name: action.name
|
|
62
|
+
name: `[${action.id}] ${action.name}`,
|
|
74
63
|
value: action.name,
|
|
75
64
|
description: action.description,
|
|
76
65
|
}));
|
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,
|
|
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 = `
|
|
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 = {}) {
|
package/dist/runner.js.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface ActionUrls {
|
|
|
7
7
|
international: string;
|
|
8
8
|
}
|
|
9
9
|
export interface Action {
|
|
10
|
+
id: number;
|
|
10
11
|
name: string;
|
|
11
12
|
description: string;
|
|
12
13
|
type: 'remote' | 'local';
|
|
@@ -14,6 +15,7 @@ export interface Action {
|
|
|
14
15
|
command: string;
|
|
15
16
|
group: string;
|
|
16
17
|
dangerous?: boolean;
|
|
18
|
+
needRoot?: boolean;
|
|
17
19
|
params?: ActionParam[];
|
|
18
20
|
urls?: ActionUrls;
|
|
19
21
|
}
|