@hyzyn/dsh-docker 0.14.0 → 0.15.0
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.en.md +596 -899
- package/README.md +538 -913
- package/lib/index.js +18 -5
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
package/lib/index.js
CHANGED
|
@@ -1939,7 +1939,9 @@ const plugin = definePlugin({
|
|
|
1939
1939
|
return 'Docker 目标:' + rows.map((row) => {
|
|
1940
1940
|
const state = row.ok === undefined ? '' : row.ok ? ' [可达]' : ` [不可用:${row.error ?? '未知'}]`;
|
|
1941
1941
|
const version = row.serverVersion === undefined ? '' : ` docker ${row.serverVersion}`;
|
|
1942
|
-
|
|
1942
|
+
// 连接簿条目名紧跟在 `user@host` 之后:它就是「同一台主机在 tty 那边叫什么」(D170)
|
|
1943
|
+
const book = row.book === undefined ? '' : `(连接簿 ${row.book})`;
|
|
1944
|
+
return `\n- ${row.name} (${row.kind}) ${row.label}${book}${version}${state}`;
|
|
1943
1945
|
}).join('');
|
|
1944
1946
|
};
|
|
1945
1947
|
/**
|
|
@@ -2267,7 +2269,7 @@ const plugin = definePlugin({
|
|
|
2267
2269
|
name: 'docker_targets',
|
|
2268
2270
|
// 只读工具:与同轮其它工具并发执行(宿主默认把未声明的工具当独占,见项目级 ROADMAP 第 4 项)
|
|
2269
2271
|
isConcurrencySafe: () => true,
|
|
2270
|
-
description: '列出已配置的 Docker 目标(本机 / SSH 主机),可选探测每个目标的 docker daemon
|
|
2272
|
+
description: '列出已配置的 Docker 目标(本机 / SSH 主机),可选探测每个目标的 docker daemon 是否可达;SSH 目标会带出它引用的 tty 连接簿条目名(book,可直接用于 sftp_* 的 book)。其他 docker_* 工具的 target 参数取自这里。',
|
|
2271
2273
|
parameters: { probe: { type: 'boolean', description: 'true 时逐个探测 docker 版本与 daemon 可达性(SSH 目标会建连接,较慢)' } },
|
|
2272
2274
|
output: {
|
|
2273
2275
|
schema: {
|
|
@@ -2284,6 +2286,8 @@ const plugin = definePlugin({
|
|
|
2284
2286
|
name: { type: 'string', required: true },
|
|
2285
2287
|
kind: { type: 'string', required: true },
|
|
2286
2288
|
label: { type: 'string', required: true },
|
|
2289
|
+
// D170:目标引用的 tty 连接簿条目名(内联 host/username 的目标没有这个字段)
|
|
2290
|
+
book: { type: 'string' },
|
|
2287
2291
|
ok: { type: 'boolean' },
|
|
2288
2292
|
error: { type: 'string' },
|
|
2289
2293
|
serverVersion: { type: 'string' },
|
|
@@ -2302,19 +2306,27 @@ const plugin = definePlugin({
|
|
|
2302
2306
|
const books = readTtyBooks(settingsApi);
|
|
2303
2307
|
const rows = [];
|
|
2304
2308
|
for (const target of targetsNow()) {
|
|
2309
|
+
/*
|
|
2310
|
+
* `book` 只在目标**真的引用了连接簿条目**时带出(D170):`resolveTarget` 内部靠它
|
|
2311
|
+
* 查表,但工具输出里从来没有它——于是模型手里只剩 `user@host`,而 tty / sftp_* 认的
|
|
2312
|
+
* 是**条目名**。两边不同名时(目标名 `host-a`、条目名 `KB_JUMP_01` 这种)猜不出来,
|
|
2313
|
+
* 只能赌一次,赌错就是「连接簿中不存在」。本机目标与内联字段目标一律不带。
|
|
2314
|
+
*/
|
|
2315
|
+
const book = target.book ?? '';
|
|
2316
|
+
const bookField = target.kind === 'ssh' && book !== '' ? { book } : {};
|
|
2305
2317
|
const { resolved, error } = resolveTarget(target, books);
|
|
2306
2318
|
if (resolved === undefined) {
|
|
2307
|
-
rows.push({ name: target.name, kind: target.kind, label: '解析失败', ok: false, error: error ?? '未知错误' });
|
|
2319
|
+
rows.push({ name: target.name, kind: target.kind, label: '解析失败', ...bookField, ok: false, error: error ?? '未知错误' });
|
|
2308
2320
|
continue;
|
|
2309
2321
|
}
|
|
2310
2322
|
const label = resolved.kind === 'local' ? '本机' : sshTarget(resolved.spec);
|
|
2311
2323
|
if (input.probe !== true) {
|
|
2312
|
-
rows.push({ name: target.name, kind: target.kind, label });
|
|
2324
|
+
rows.push({ name: target.name, kind: target.kind, label, ...bookField });
|
|
2313
2325
|
continue;
|
|
2314
2326
|
}
|
|
2315
2327
|
const { api } = apiFor(target.name);
|
|
2316
2328
|
if (api === undefined) {
|
|
2317
|
-
rows.push({ name: target.name, kind: target.kind, label, ok: false, error: '无法构造执行通道' });
|
|
2329
|
+
rows.push({ name: target.name, kind: target.kind, label, ...bookField, ok: false, error: '无法构造执行通道' });
|
|
2318
2330
|
continue;
|
|
2319
2331
|
}
|
|
2320
2332
|
const probe = await api.probe();
|
|
@@ -2324,6 +2336,7 @@ const plugin = definePlugin({
|
|
|
2324
2336
|
name: target.name,
|
|
2325
2337
|
kind: target.kind,
|
|
2326
2338
|
label,
|
|
2339
|
+
...bookField,
|
|
2327
2340
|
ok: probe.ok,
|
|
2328
2341
|
...(probe.ok ? { ...(probe.serverVersion === null ? {} : { serverVersion: probe.serverVersion }) } : { error: probe.error ?? '未知错误' }),
|
|
2329
2342
|
});
|