@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/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
- return `\n- ${row.name} (${row.kind}) ${row.label}${version}${state}`;
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 是否可达。其他 docker_* 工具的 target 参数取自这里。',
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
  });