@xcanwin/manyoyo 3.5.2 → 3.5.7
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 +5 -1
- package/bin/manyoyo.js +66 -26
- package/docs/README_EN.md +5 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,6 +97,9 @@ manyoyo -n test --crm
|
|
|
97
97
|
|
|
98
98
|
# 清理悬空镜像和 <none> 镜像
|
|
99
99
|
manyoyo --irm
|
|
100
|
+
|
|
101
|
+
# 静默显示执行命令
|
|
102
|
+
manyoyo -q full -x echo "hello world"
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
### 环境变量
|
|
@@ -197,10 +200,10 @@ docker ps -a # 现在可以在容器内使用 docker 命令
|
|
|
197
200
|
|
|
198
201
|
| 选项 | 别名 | 描述 |
|
|
199
202
|
|------|------|------|
|
|
200
|
-
| `-l` | `--ls`, `--list` | 列出所有 manyoyo 容器 |
|
|
201
203
|
| `--hp PATH` | `--host-path` | 设置宿主机工作目录(默认:当前路径) |
|
|
202
204
|
| `-n NAME` | `--cn`, `--cont-name` | 设置容器名称 |
|
|
203
205
|
| `--cp PATH` | `--cont-path` | 设置容器工作目录 |
|
|
206
|
+
| `-l` | `--cl`, `--cont-list` | 列出所有 manyoyo 容器 |
|
|
204
207
|
| `--crm` | `--cont-remove` | 删除容器 |
|
|
205
208
|
| `-m MODE` | `--cm`, `--cont-mode` | 设置容器模式(common, dind, sock) |
|
|
206
209
|
| `--in NAME` | `--image-name` | 指定镜像名称 |
|
|
@@ -217,6 +220,7 @@ docker ps -a # 现在可以在容器内使用 docker 命令
|
|
|
217
220
|
| `-x CMD` | `--sf`, `--shell-full` | 完整命令(替代 --sp, -s 和 --) |
|
|
218
221
|
| `-y CLI` | `--yolo` | 无需确认运行 AI 智能体 |
|
|
219
222
|
| `--install NAME` | | 安装 manyoyo 命令 |
|
|
223
|
+
| `-q LIST` | `--quiet` | 静默显示 |
|
|
220
224
|
| `-V` | `--version` | 显示版本 |
|
|
221
225
|
| `-h` | `--help` | 显示帮助 |
|
|
222
226
|
|
package/bin/manyoyo.js
CHANGED
|
@@ -37,6 +37,7 @@ let CONTAINER_ENVS = [];
|
|
|
37
37
|
let CONTAINER_VOLUMES = [];
|
|
38
38
|
let MANYOYO_NAME = "manyoyo";
|
|
39
39
|
let CONT_MODE = "";
|
|
40
|
+
let QUIET = {};
|
|
40
41
|
|
|
41
42
|
// Color definitions using ANSI codes
|
|
42
43
|
const RED = '\x1b[0;31m';
|
|
@@ -70,10 +71,10 @@ function showHelp() {
|
|
|
70
71
|
console.log(` ${MANYOYO_NAME} [--hp HOST_PATH] [-n CONTAINER_NAME] [--cp CONTAINER_PATH] [--ef ENV_FILE] [--sp COMMAND] [-s COMMAND] [-- COMMAND]`);
|
|
71
72
|
console.log("");
|
|
72
73
|
console.log(`${BLUE}Options:${NC}`);
|
|
73
|
-
console.log(" -l|--ls|--list 列举容器");
|
|
74
74
|
console.log(" --hp|--host-path PATH 设置宿主机工作目录 (默认当前路径)");
|
|
75
75
|
console.log(" -n|--cn|--cont-name NAME 设置容器名称");
|
|
76
76
|
console.log(" --cp|--cont-path PATH 设置容器工作目录");
|
|
77
|
+
console.log(" -l|--cl|--cont-list 列举容器");
|
|
77
78
|
console.log(" --crm|--cont-remove 删除-n指定容器");
|
|
78
79
|
console.log(" -m|--cm|--cont-mode STRING 设置容器嵌套容器模式");
|
|
79
80
|
console.log(" 例如 common, dind, sock");
|
|
@@ -93,6 +94,8 @@ function showHelp() {
|
|
|
93
94
|
console.log(" 例如 claude / c, gemini / gm, codex / cx, opencode / oc");
|
|
94
95
|
console.log(" --install NAME 安装manyoyo命令");
|
|
95
96
|
console.log(" 例如 docker-cli-plugin");
|
|
97
|
+
console.log(" -q|--quiet LIST 静默显示");
|
|
98
|
+
console.log(" 例如 cnew,crm,tip,cmd,full");
|
|
96
99
|
console.log(" -V|--version 显示版本");
|
|
97
100
|
console.log(" -h|--help 显示帮助");
|
|
98
101
|
console.log("");
|
|
@@ -110,14 +113,43 @@ function showVersion() {
|
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
function getHelloTip(containerName, defaultCommand) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
116
|
+
if ( !(QUIET.tip || QUIET.full) ) {
|
|
117
|
+
console.log("");
|
|
118
|
+
console.log(`${BLUE}----------------------------------------${NC}`);
|
|
119
|
+
console.log(`📦 首次命令 : ${defaultCommand}`);
|
|
120
|
+
console.log(`⚫ 恢复首次命令会话: ${CYAN}${MANYOYO_NAME} -n ${containerName} -- -c${NC}`);
|
|
121
|
+
console.log(`⚫ 执行首次命令 : ${GREEN}${MANYOYO_NAME} -n ${containerName}${NC}`);
|
|
122
|
+
console.log(`⚫ 执行指定命令 : ${GREEN}${MANYOYO_NAME} -n ${containerName} -x /bin/bash${NC}`);
|
|
123
|
+
console.log(`⚫ 执行指定命令 : ${GREEN}docker exec -it ${containerName} /bin/bash${NC}`);
|
|
124
|
+
console.log(`⚫ 删除容器 : ${MANYOYO_NAME} -n ${containerName} --crm`);
|
|
125
|
+
console.log("");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function setQuiet(action) {
|
|
130
|
+
action.split(',').forEach(ac => {
|
|
131
|
+
switch (ac) {
|
|
132
|
+
case 'cnew':
|
|
133
|
+
QUIET.cnew = 1;
|
|
134
|
+
break;
|
|
135
|
+
case 'crm':
|
|
136
|
+
QUIET.crm = 1;
|
|
137
|
+
break;
|
|
138
|
+
case 'tip':
|
|
139
|
+
QUIET.tip = 1;
|
|
140
|
+
break;
|
|
141
|
+
case 'askkeep':
|
|
142
|
+
QUIET.askkeep = 1;
|
|
143
|
+
break;
|
|
144
|
+
case 'cmd':
|
|
145
|
+
QUIET.cmd = 1;
|
|
146
|
+
break;
|
|
147
|
+
case 'full':
|
|
148
|
+
QUIET.full = 1;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
// process.exit(0);
|
|
121
153
|
}
|
|
122
154
|
|
|
123
155
|
async function askQuestion(prompt) {
|
|
@@ -252,9 +284,9 @@ function getContainerStatus(name) {
|
|
|
252
284
|
}
|
|
253
285
|
|
|
254
286
|
function removeContainer(name) {
|
|
255
|
-
console.log(`${YELLOW}🗑️ 正在删除容器: ${name}...${NC}`);
|
|
287
|
+
if ( !(QUIET.crm || QUIET.full) ) console.log(`${YELLOW}🗑️ 正在删除容器: ${name}...${NC}`);
|
|
256
288
|
dockerExec(`${DOCKER_CMD} rm -f "${name}"`, { stdio: 'pipe' });
|
|
257
|
-
console.log(`${GREEN}✅ 已彻底删除。${NC}`);
|
|
289
|
+
if ( !(QUIET.crm || QUIET.full) ) console.log(`${GREEN}✅ 已彻底删除。${NC}`);
|
|
258
290
|
}
|
|
259
291
|
|
|
260
292
|
// ==============================================================================
|
|
@@ -572,11 +604,11 @@ function parseArguments(argv) {
|
|
|
572
604
|
const arg = args[i];
|
|
573
605
|
|
|
574
606
|
switch (arg) {
|
|
575
|
-
case '-
|
|
576
|
-
case '--
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
607
|
+
case '-q':
|
|
608
|
+
case '--quiet':
|
|
609
|
+
setQuiet(args[i + 1]);
|
|
610
|
+
i += 2;
|
|
611
|
+
break;
|
|
580
612
|
|
|
581
613
|
case '--hp':
|
|
582
614
|
case '--host-path':
|
|
@@ -597,6 +629,12 @@ function parseArguments(argv) {
|
|
|
597
629
|
i += 2;
|
|
598
630
|
break;
|
|
599
631
|
|
|
632
|
+
case '-l':
|
|
633
|
+
case '--cl':
|
|
634
|
+
case '--cont-list':
|
|
635
|
+
getContList();
|
|
636
|
+
process.exit(0);
|
|
637
|
+
|
|
600
638
|
case '--crm':
|
|
601
639
|
case '--cont-remove':
|
|
602
640
|
SHOULD_REMOVE = true;
|
|
@@ -772,7 +810,7 @@ async function waitForContainerReady(containerName) {
|
|
|
772
810
|
}
|
|
773
811
|
|
|
774
812
|
async function createNewContainer() {
|
|
775
|
-
console.log(`${CYAN}📦 manyoyo by xcanwin 正在创建新容器: ${YELLOW}${CONTAINER_NAME}${NC}
|
|
813
|
+
if ( !(QUIET.cnew || QUIET.full) ) console.log(`${CYAN}📦 manyoyo by xcanwin 正在创建新容器: ${YELLOW}${CONTAINER_NAME}${NC}`);
|
|
776
814
|
|
|
777
815
|
EXEC_COMMAND = `${EXEC_COMMAND_PREFIX}${EXEC_COMMAND}${EXEC_COMMAND_SUFFIX}`;
|
|
778
816
|
const defaultCommand = EXEC_COMMAND;
|
|
@@ -794,7 +832,7 @@ async function createNewContainer() {
|
|
|
794
832
|
}
|
|
795
833
|
|
|
796
834
|
async function connectExistingContainer() {
|
|
797
|
-
console.log(`${CYAN}🔄 manyoyo by xcanwin 正在连接到现有容器: ${YELLOW}${CONTAINER_NAME}${NC}`);
|
|
835
|
+
if ( !(QUIET.cnew || QUIET.full) ) console.log(`${CYAN}🔄 manyoyo by xcanwin 正在连接到现有容器: ${YELLOW}${CONTAINER_NAME}${NC}`);
|
|
798
836
|
|
|
799
837
|
// Start container if stopped
|
|
800
838
|
const status = getContainerStatus(CONTAINER_NAME);
|
|
@@ -824,8 +862,10 @@ async function setupContainer() {
|
|
|
824
862
|
|
|
825
863
|
function executeInContainer(defaultCommand) {
|
|
826
864
|
getHelloTip(CONTAINER_NAME, defaultCommand);
|
|
827
|
-
|
|
828
|
-
|
|
865
|
+
if ( !(QUIET.cmd || QUIET.full) ) {
|
|
866
|
+
console.log(`${BLUE}----------------------------------------${NC}`);
|
|
867
|
+
console.log(`💻 执行命令: ${YELLOW}${EXEC_COMMAND || '交互式 Shell'}${NC}`);
|
|
868
|
+
}
|
|
829
869
|
|
|
830
870
|
// Execute command in container
|
|
831
871
|
if (EXEC_COMMAND) {
|
|
@@ -836,18 +876,18 @@ function executeInContainer(defaultCommand) {
|
|
|
836
876
|
}
|
|
837
877
|
|
|
838
878
|
async function handlePostExit(defaultCommand) {
|
|
839
|
-
console.log("");
|
|
840
879
|
getHelloTip(CONTAINER_NAME, defaultCommand);
|
|
841
880
|
|
|
842
|
-
|
|
843
|
-
|
|
881
|
+
let tipAskKeep = `❔ 会话已结束。是否保留此后台容器 ${CONTAINER_NAME}? [ y=默认保留, n=删除, 1=首次命令进入, x=执行命令, i=交互式SHELL ]: `;
|
|
882
|
+
if ( QUIET.askkeep || QUIET.full ) tipAskKeep = `保留容器吗? [y n 1 x i] `;
|
|
883
|
+
const reply = await askQuestion(tipAskKeep);
|
|
844
884
|
|
|
845
885
|
const firstChar = reply.trim().toLowerCase()[0];
|
|
846
886
|
|
|
847
887
|
if (firstChar === 'n') {
|
|
848
888
|
removeContainer(CONTAINER_NAME);
|
|
849
889
|
} else if (firstChar === '1') {
|
|
850
|
-
console.log(`${GREEN}✅ 离开当前连接,用首次命令进入。${NC}`);
|
|
890
|
+
if ( !(QUIET.full) ) console.log(`${GREEN}✅ 离开当前连接,用首次命令进入。${NC}`);
|
|
851
891
|
// Reset command variables to use default command
|
|
852
892
|
EXEC_COMMAND = "";
|
|
853
893
|
EXEC_COMMAND_PREFIX = "";
|
|
@@ -857,12 +897,12 @@ async function handlePostExit(defaultCommand) {
|
|
|
857
897
|
await main();
|
|
858
898
|
} else if (firstChar === 'x') {
|
|
859
899
|
const command = await askQuestion('❔ 输入要执行的命令: ');
|
|
860
|
-
console.log(`${GREEN}✅ 离开当前连接,执行命令。${NC}`);
|
|
900
|
+
if ( !(QUIET.cmd || QUIET.full) ) console.log(`${GREEN}✅ 离开当前连接,执行命令。${NC}`);
|
|
861
901
|
const newArgs = ['-n', CONTAINER_NAME, '-x', command];
|
|
862
902
|
process.argv = [process.argv[0], process.argv[1], ...newArgs];
|
|
863
903
|
await main();
|
|
864
904
|
} else if (firstChar === 'i') {
|
|
865
|
-
console.log(`${GREEN}✅ 离开当前连接,进入容器交互式SHELL。${NC}`);
|
|
905
|
+
if ( !(QUIET.full) ) console.log(`${GREEN}✅ 离开当前连接,进入容器交互式SHELL。${NC}`);
|
|
866
906
|
const newArgs = ['-n', CONTAINER_NAME, '-x', '/bin/bash'];
|
|
867
907
|
process.argv = [process.argv[0], process.argv[1], ...newArgs];
|
|
868
908
|
await main();
|
package/docs/README_EN.md
CHANGED
|
@@ -97,6 +97,9 @@ manyoyo -n test --crm
|
|
|
97
97
|
|
|
98
98
|
# Clean dangling images and <none> images
|
|
99
99
|
manyoyo --irm
|
|
100
|
+
|
|
101
|
+
# Execute custom command with quiet output
|
|
102
|
+
manyoyo -q full -x echo "hello world"
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
### Environment Variables
|
|
@@ -197,10 +200,10 @@ docker ps -a # Now you can use docker commands inside the container
|
|
|
197
200
|
|
|
198
201
|
| Option | Aliases | Description |
|
|
199
202
|
|--------|---------|-------------|
|
|
200
|
-
| `-l` | `--ls`, `--list` | List all manyoyo containers |
|
|
201
203
|
| `--hp PATH` | `--host-path` | Set host working directory (default: current path) |
|
|
202
204
|
| `-n NAME` | `--cn`, `--cont-name` | Set container name |
|
|
203
205
|
| `--cp PATH` | `--cont-path` | Set container working directory |
|
|
206
|
+
| `-l` | `--cl`, `--cont-list` | List all manyoyo containers |
|
|
204
207
|
| `--crm` | `--cont-remove` | Remove container |
|
|
205
208
|
| `-m MODE` | `--cm`, `--cont-mode` | Set container mode (common, dind, sock) |
|
|
206
209
|
| `--in NAME` | `--image-name` | Specify image name |
|
|
@@ -217,6 +220,7 @@ docker ps -a # Now you can use docker commands inside the container
|
|
|
217
220
|
| `-x CMD` | `--sf`, `--shell-full` | Full command (replaces --sp, -s, and --) |
|
|
218
221
|
| `-y CLI` | `--yolo` | Run AI agent without confirmation |
|
|
219
222
|
| `--install NAME` | | Install manyoyo command |
|
|
223
|
+
| `-q LIST` | `--quiet` | Quiet output |
|
|
220
224
|
| `-V` | `--version` | Show version |
|
|
221
225
|
| `-h` | `--help` | Show help |
|
|
222
226
|
|