host-execution-mcp 1.0.1 → 2.0.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.
Files changed (84) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +13 -11
  3. package/SECURITY.md +3 -3
  4. package/dist/access/index.d.ts +21 -10
  5. package/dist/access/index.js +55 -27
  6. package/dist/access/index.js.map +1 -1
  7. package/dist/access/paradi-auth.d.ts +3 -3
  8. package/dist/access/paradi-auth.js +4 -4
  9. package/dist/access/paradi-auth.js.map +1 -1
  10. package/dist/access/paradi-transport.d.ts +1 -1
  11. package/dist/access/paradi-transport.js +3 -3
  12. package/dist/access/paradi-transport.js.map +1 -1
  13. package/dist/access/paradi-username.d.ts +1 -1
  14. package/dist/access/paradi-username.js +2 -2
  15. package/dist/access/paradi-username.js.map +1 -1
  16. package/dist/access/session-pool.d.ts +5 -0
  17. package/dist/access/session-pool.js +7 -0
  18. package/dist/access/session-pool.js.map +1 -1
  19. package/dist/access/ssh-transport.d.ts +1 -1
  20. package/dist/access/ssh-transport.js +3 -2
  21. package/dist/access/ssh-transport.js.map +1 -1
  22. package/dist/config-yaml.d.ts +54 -0
  23. package/dist/config-yaml.js +172 -0
  24. package/dist/config-yaml.js.map +1 -0
  25. package/dist/config.d.ts +45 -1
  26. package/dist/config.js +126 -22
  27. package/dist/config.js.map +1 -1
  28. package/dist/index.js +3 -3
  29. package/dist/index.js.map +1 -1
  30. package/dist/instructions.d.ts +4 -1
  31. package/dist/instructions.js +73 -51
  32. package/dist/instructions.js.map +1 -1
  33. package/dist/kubectl/runner.d.ts +7 -8
  34. package/dist/kubectl/runner.js +18 -21
  35. package/dist/kubectl/runner.js.map +1 -1
  36. package/dist/link-runtime.d.ts +39 -0
  37. package/dist/link-runtime.js +134 -0
  38. package/dist/link-runtime.js.map +1 -0
  39. package/dist/server.d.ts +2 -1
  40. package/dist/server.js +10 -12
  41. package/dist/server.js.map +1 -1
  42. package/dist/sources/guides.d.ts +34 -0
  43. package/dist/sources/guides.js +50 -0
  44. package/dist/sources/guides.js.map +1 -0
  45. package/dist/sources/index.d.ts +5 -0
  46. package/dist/sources/index.js +22 -0
  47. package/dist/sources/index.js.map +1 -0
  48. package/dist/sources/yaml-template.d.ts +31 -0
  49. package/dist/sources/yaml-template.js +35 -0
  50. package/dist/sources/yaml-template.js.map +1 -0
  51. package/dist/ssh/access-client.d.ts +6 -2
  52. package/dist/ssh/access-client.js +58 -27
  53. package/dist/ssh/access-client.js.map +1 -1
  54. package/dist/ssh/access-errors.js +1 -1
  55. package/dist/ssh/access-errors.js.map +1 -1
  56. package/dist/ssh/access-sftp.js +3 -3
  57. package/dist/ssh/access-sftp.js.map +1 -1
  58. package/dist/tools/copy-job-schemas.d.ts +96 -581
  59. package/dist/tools/copy-job-schemas.js +9 -9
  60. package/dist/tools/copy-job-schemas.js.map +1 -1
  61. package/dist/tools/register.d.ts +2 -10
  62. package/dist/tools/register.js +174 -331
  63. package/dist/tools/register.js.map +1 -1
  64. package/dist/tools/remote-schemas.d.ts +156 -708
  65. package/dist/tools/remote-schemas.js +99 -103
  66. package/dist/tools/remote-schemas.js.map +1 -1
  67. package/dist/utils/copy-executor.d.ts +3 -1
  68. package/dist/utils/copy-executor.js +39 -25
  69. package/dist/utils/copy-executor.js.map +1 -1
  70. package/dist/utils/copy-transfer.d.ts +2 -0
  71. package/dist/utils/copy-transfer.js.map +1 -1
  72. package/dist/utils/remote-executor.d.ts +3 -4
  73. package/dist/utils/remote-executor.js +8 -18
  74. package/dist/utils/remote-executor.js.map +1 -1
  75. package/dist/utils/remote-target.js +1 -1
  76. package/dist/utils/remote-target.js.map +1 -1
  77. package/docs/AGENT_GUIDE.md +31 -103
  78. package/docs/CONFIGURATION.md +30 -9
  79. package/docs/GUIDE.md +186 -0
  80. package/docs/PARADI_ACCESS_PLAN.md +6 -6
  81. package/docs/TODO.md +4 -11
  82. package/docs/USER_GUIDE.zh-CN.md +26 -173
  83. package/docs/host-execution.yaml +92 -0
  84. package/package.json +3 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0] - 2026-10-22
11
+
12
+ ### Breaking
13
+
14
+ - Removed tools `context_derive` and `ssh_exec`. Agent selects a machine with YAML `description` + optional `host` (omit `host` = link landing; pass `host` = ssh hop-2 or Paradi TARGET). No `contextKey` on tools.
15
+ - `remote_read_file` / `remote_ps` no longer take `target=landing|context|pod`. Path is on the selected machine; add `namespace`+`pod` to go into a container via kubectl there.
16
+ - `remote_copy_*` endpoints are `target=local|remote|pod` (not landing/context). `remote` is the selected Linux.
17
+ - Env `TARGET_HOST` removed. Use `TARGET_HOSTS` (one host or comma-separated list of IP/hostname). CIDR/glob and JSON array strings are rejected. One TARGET is the default hop-2 / Paradi landing IP to pass as `host`; otherwise pass `host` from context.
18
+
19
+ ### Added
20
+
21
+ - YAML roster at `~/.agents/host-execution.yaml` (Windows `%USERPROFILE%\.agents\host-execution.yaml`): same GUIDE §2 fields as JSON, unique `description` per link, user+IP identity. YAML wins when at least one real link exists; empty roster + `ACCESS_*` keeps JSON. Empty roster still starts the MCP. Tools take optional exact `description`; 1 link may omit it. Template is MCP Resource `host-execution://guides/yaml`.
22
+ - MCP Resources `host-execution://guides/user` (`docs/GUIDE.md`) and `host-execution://guides/agent` (`docs/AGENT_GUIDE.md`), registered from `src/sources/`. Handshake tells the Agent to read both once; catalog `mcp/host-execution/GUIDE.md` is a pointer.
23
+
24
+ ### Changed
25
+
26
+ - `TARGET_HOSTS` is only concrete hosts. CIDR/glob no longer sit in the list as notes; they fail at parse. Paradi without a single default no longer creates a `paradi-unselected` Context — omit-host tools fail until `host` is passed.
27
+ - README tool table matches Paradi landing select. `USER_GUIDE.zh-CN.md` no longer duplicates GUIDE or embed credentials. User GUIDE resource audience includes `user`. Unused Catalog screenshot removed.
28
+ - Runtime tools share one machine selector: optional `host` (`shell_exec` / `docker_*` / `k8s_*` / `context_probe` / `remote_*`). `k8s_*` is not a separate landing path.
29
+ - Paradi `remote_copy_*` uses `target=remote` on the selected TARGET landing. Hop-2 `target=host` remains rejected.
30
+ - `remote_*` tool `inputSchema` is a plain Zod object (no `.refine()` / union). MCP `listTools` now exposes `path` / `host` / `target` instead of empty `properties`. Cross-field rules run in the handler.
31
+ - Removed unused `allowContext` schema switch (always on) and the extra copy assert before materialize.
32
+ - `description` is documented as a rewriteable scenario label (not a frozen key).
33
+
34
+ ### Fixed
35
+
36
+ - Machine pick / select errors (`description` missing, empty roster, Paradi multi-TARGET without `host`) return tool JSON via `formatErrorResult`, not MCP protocol faults.
37
+ - Reloading a YAML link with the same `description` but changed credentials drops the stale `AccessClient` session instead of leaking it.
38
+
39
+ ### Removed
40
+
41
+ - Internal live-test notes doc that listed real intranet IPs (not for npm / public tree).
42
+
43
+ ### Tests
44
+
45
+ - Resource-list fixture (GPU-Genius GGN / S5000 OS IPs): multi-host ssh + Paradi select Context; copy follows landing, not hop-2.
46
+
10
47
  ## [1.0.1] - 2026-09-16
11
48
 
12
49
  ### Changed
package/README.md CHANGED
@@ -15,20 +15,18 @@ Composable tools:
15
15
  | Tool | Purpose |
16
16
  |------|---------|
17
17
  | `access_check` | Short ACCESS SSH probe (`reachable` / `latencyMs`; not kubectl) |
18
- | `shell_exec` | Shell on landing Context (optional `contextKey`) |
19
- | `context_derive` | Derive child Context → `contextKey` (`ACCESS_KIND=ssh` only) |
18
+ | `shell_exec` | Shell on landing, or hop-2 / Paradi TARGET when `host` is set |
20
19
  | `context_probe` | Probe docker/kubectl capabilities (unknown ≠ true) |
21
- | `docker_ps` / `docker_exec` / `docker_logs` | Docker Runtime on landing or derived Context (`contextKey`) |
20
+ | `docker_ps` / `docker_exec` / `docker_logs` | Docker on the selected machine (`host` optional) |
22
21
  | `k8s_list_pods` | List pods (`kubectl get pods`) |
23
22
  | `k8s_exec` | Run command in pod container |
24
23
  | `k8s_logs` | Pod stdout/stderr (`kubectl logs`) |
25
- | `ssh_exec` | Derive + shell on remote host (`ACCESS_KIND=ssh`) |
26
- | `remote_read_file` | Read file head/tail (`mode=head\|tail`) on landing/pod/context |
27
- | `remote_copy_file` | Sync copy between local/landing/pod/context (SFTP for local↔landing; `skipIfComplete` / `totalTimeoutMs` / progress) |
24
+ | `remote_read_file` | Read file head/tail on the selected machine; optional namespace+pod |
25
+ | `remote_copy_file` | Sync copy between local/remote/pod (SFTP for local↔remote; `skipIfComplete` / `totalTimeoutMs` / progress) |
28
26
  | `remote_copy_start` | Async copy job — returns `transferId` immediately (prefer for >256MB or ETA>2min) |
29
27
  | `remote_copy_status` | Poll async copy job progress |
30
28
  | `remote_copy_cancel` | Cancel async copy job |
31
- | `remote_ps` | List processes on landing/pod/context |
29
+ | `remote_ps` | List processes on the selected machine; optional namespace+pod |
32
30
 
33
31
  Async job state: `~/.agent-compose/remote-copy/jobs/<transferId>.json` — see [docs/REMOTE_COPY_JOB_API.md](docs/REMOTE_COPY_JOB_API.md).
34
32
 
@@ -72,9 +70,11 @@ MCP config uses local path:
72
70
  "args": ["<ABS_PATH>/packages/mcp/host-execution/dist/index.js"]
73
71
  ```
74
72
 
75
- ### Minimal env
73
+ ### YAML roster or minimal env
76
74
 
77
- Only `ACCESS_HOST` and `ACCESS_USER` are required. Configure any SSH auth you use (key path, default `~/.ssh` keys, SSH agent, and/or `ACCESS_PASSWORD`); the client tries each until one works. If your IDE exposes an empty SSH agent, set `ACCESS_PASSWORD` and it will be used after agent/key attempts fail. See [docs/CONFIGURATION.md](docs/CONFIGURATION.md).
75
+ Preferred when you have more than one ACCESS/TARGET pair: write links to `~/.agents/host-execution.yaml` (Windows `%USERPROFILE%\.agents\host-execution.yaml`). mcp.json can stay empty of `ACCESS_*`. Template: MCP Resource `host-execution://guides/yaml`.
76
+
77
+ JSON/env still works when the roster has no real links. Then `ACCESS_HOST` and `ACCESS_USER` are required. Configure any SSH auth you use (key path, default `~/.ssh` keys, SSH agent, and/or `ACCESS_PASSWORD`); the client tries each until one works. If your IDE exposes an empty SSH agent, set `ACCESS_PASSWORD` and it will be used after agent/key attempts fail. See [docs/CONFIGURATION.md](docs/CONFIGURATION.md).
78
78
 
79
79
  ## Publishing (maintainers)
80
80
 
@@ -85,8 +85,10 @@ npm publish # or --registry for private npm
85
85
 
86
86
  ## Documentation
87
87
 
88
- - [使用教程(中文)](docs/USER_GUIDE.zh-CN.md) — Node.js 安装、MCP 配置、Agent 实用话术
89
- - [Agent usage guide](docs/AGENT_GUIDE.md) — for LLM agents after MCP handshake
88
+ - [GUIDE.md](docs/GUIDE.md) — 用户用法(期望能力);MCP Resource `host-execution://guides/user`
89
+ - YAML 名册模板 — MCP Resource `host-execution://guides/yaml`(`docs/host-execution.yaml`)
90
+ - [使用教程(中文)](docs/USER_GUIDE.zh-CN.md) — Codex 接法、旧包迁移、场景示例;用法以 GUIDE 为准
91
+ - [Agent usage guide](docs/AGENT_GUIDE.md) — 操作说明;MCP Resource `host-execution://guides/agent`
90
92
  - [Configuration](docs/CONFIGURATION.md) — env vars, auth, client setup
91
93
  - [SECURITY.md](SECURITY.md) — trust boundaries, credentials, sshpass notes
92
94
  - [CHANGELOG.md](CHANGELOG.md)
package/SECURITY.md CHANGED
@@ -39,7 +39,7 @@ There is **no direct path** from the MCP client machine to cluster pods or worke
39
39
 
40
40
  ## sshpass and process visibility
41
41
 
42
- When `ssh_exec` / `context_derive` use a password (or `TARGET_PASSWORD`), the ACCESS landing runs:
42
+ When tools pass `host` with a password (or `TARGET_PASSWORD`), the ACCESS landing runs:
43
43
 
44
44
  ```bash
45
45
  sshpass -p '<password>' ssh ...
@@ -56,8 +56,8 @@ Remote host SSH uses `-o StrictHostKeyChecking=accept-new`. On first connect, un
56
56
  `ALLOWED_NAMESPACES` restricts **kubectl tools only** (`k8s_list_pods`, `k8s_exec`, `k8s_logs`, and `remote_*` with `target=pod`). It does **not** restrict:
57
57
 
58
58
  - `shell_exec` — arbitrary shell on the ACCESS landing Context, including `kubectl` against any namespace
59
- - `ssh_exec` — SSH derive from ACCESS to any reachable host
60
- - `remote_*` with `target=landing` or materialized `target=context`
59
+ - `shell_exec` / `docker_*` / `remote_*` with `host` — SSH from ACCESS to that host
60
+ - `remote_*` on the selected machine (`target=remote` after materialize)
61
61
 
62
62
  For defense in depth, combine namespace whitelist with bastion RBAC, kubeconfig permissions, and limiting who can run the MCP server.
63
63
 
@@ -16,31 +16,43 @@ export type ContextSummary = {
16
16
  */
17
17
  export declare class AccessRuntime {
18
18
  private readonly config;
19
- readonly accessContext: HostExecutionContext;
19
+ /** Landing Context when one exists (ssh ACCESS, or Paradi with exactly one TARGET_HOSTS). */
20
+ readonly accessContext?: HostExecutionContext;
20
21
  readonly pool: SessionPool;
21
22
  private readonly sshTransport;
23
+ private readonly paradiTransport;
22
24
  /** Capability cache by context.key (derive may recreate descriptor objects). */
23
25
  private readonly capsByKey;
24
26
  /** Live Context descriptors by key (landing + derived). */
25
27
  private readonly contexts;
26
28
  constructor(config: AppConfig, accessClient: AccessClient);
27
- /** Landing Context key (ACCESS for ssh; TARGET for paradi). */
29
+ /** Landing Context key (ACCESS for ssh; TARGET for paradi with one default). */
28
30
  get landingKey(): string;
31
+ hasContext(contextKey: string): boolean;
29
32
  summarize(ctx?: HostExecutionContext): ContextSummary;
30
33
  /**
31
- * Resolve Runtime Context by key. Omit / empty → landing.
32
- * Unknown keys throw (must context_derive first).
34
+ * Agent-facing pick: omit host = this link's landing; pass host =
35
+ * ssh hop-2 from ACCESS, or Paradi TARGET landing select.
36
+ */
37
+ selectMachine(args?: {
38
+ host?: string;
39
+ user?: string;
40
+ password?: string;
41
+ }): HostExecutionContext;
42
+ /**
43
+ * Resolve Runtime Context by key. Omit / empty → the only landing Context
44
+ * (ssh ACCESS, or Paradi when TARGET_HOSTS has exactly one host).
33
45
  */
34
46
  requireContext(contextKey?: string): HostExecutionContext;
35
- /** Shell on a Context (default landing). */
47
+ /** Shell on a Context (omit contextKey = the only landing, if one exists). */
36
48
  shellExec(command: string, opts?: {
37
49
  contextKey?: string;
38
50
  timeoutMs?: number;
39
51
  cwd?: string;
40
52
  }): Promise<ExecOutput>;
41
53
  /**
42
- * Derive a child Context (ACCESS_KIND=ssh only). Returns summary with contextKey.
43
- * Omitting host uses config TARGET_* as default derive selector.
54
+ * Derive a child Context (ssh hop-2) or select a Paradi TARGET landing.
55
+ * Omitting host uses the single TARGET_HOSTS entry when there is one.
44
56
  */
45
57
  deriveContext(args?: {
46
58
  host?: string;
@@ -49,8 +61,7 @@ export declare class AccessRuntime {
49
61
  useTarget?: boolean;
50
62
  }): ContextSummary;
51
63
  /**
52
- * deriveContext + shellExec — ACCESS_KIND=ssh only.
53
- * Also returns the derived contextKey via summarize after exec (caller should use derive for key-only).
64
+ * deriveContext + shellExec. Returns the derived contextKey after exec.
54
65
  */
55
66
  sshExec(args: {
56
67
  host?: string;
@@ -102,7 +113,7 @@ export declare class AccessRuntime {
102
113
  user?: string;
103
114
  password?: string;
104
115
  };
105
- private assertDeriveAllowed;
116
+ private requireLanding;
106
117
  private remember;
107
118
  private withCachedCaps;
108
119
  private resolveHostContext;
@@ -10,9 +10,11 @@ import * as docker from "./docker-runtime.js";
10
10
  */
11
11
  export class AccessRuntime {
12
12
  config;
13
+ /** Landing Context when one exists (ssh ACCESS, or Paradi with exactly one TARGET_HOSTS). */
13
14
  accessContext;
14
15
  pool;
15
16
  sshTransport = new SshAccessTransport();
17
+ paradiTransport = new ParadiAccessTransport();
16
18
  /** Capability cache by context.key (derive may recreate descriptor objects). */
17
19
  capsByKey = new Map();
18
20
  /** Live Context descriptors by key (landing + derived). */
@@ -20,19 +22,28 @@ export class AccessRuntime {
20
22
  constructor(config, accessClient) {
21
23
  this.config = config;
22
24
  this.pool = new SessionPool(accessClient);
23
- this.accessContext =
24
- config.accessKind === "paradi-gateway"
25
- ? new ParadiAccessTransport().createContext(config)
26
- : this.sshTransport.createAccessContext(config);
27
- this.pool.bindAccess(this.accessContext);
28
- this.remember(this.accessContext);
29
- }
30
- /** Landing Context key (ACCESS for ssh; TARGET for paradi). */
25
+ if (config.accessKind === "paradi-gateway") {
26
+ if (config.targetHost?.trim()) {
27
+ this.accessContext = this.paradiTransport.createContext(config);
28
+ this.pool.bindParadiLanding(this.accessContext, config.targetHost.trim());
29
+ this.remember(this.accessContext);
30
+ }
31
+ }
32
+ else {
33
+ this.accessContext = this.sshTransport.createAccessContext(config);
34
+ this.pool.bindAccess(this.accessContext);
35
+ this.remember(this.accessContext);
36
+ }
37
+ }
38
+ /** Landing Context key (ACCESS for ssh; TARGET for paradi with one default). */
31
39
  get landingKey() {
32
- return this.accessContext.key;
40
+ return this.requireLanding().key;
33
41
  }
34
- summarize(ctx = this.accessContext) {
35
- const withCaps = this.withCachedCaps(ctx);
42
+ hasContext(contextKey) {
43
+ return this.contexts.has(contextKey.trim());
44
+ }
45
+ summarize(ctx) {
46
+ const withCaps = this.withCachedCaps(ctx ?? this.requireLanding());
36
47
  return {
37
48
  contextKey: withCaps.key,
38
49
  endpoint: withCaps.endpoint,
@@ -41,41 +52,49 @@ export class AccessRuntime {
41
52
  };
42
53
  }
43
54
  /**
44
- * Resolve Runtime Context by key. Omit / empty → landing.
45
- * Unknown keys throw (must context_derive first).
55
+ * Agent-facing pick: omit host = this link's landing; pass host =
56
+ * ssh hop-2 from ACCESS, or Paradi TARGET landing select.
57
+ */
58
+ selectMachine(args = {}) {
59
+ const host = args.host?.trim();
60
+ if (!host) {
61
+ return this.requireLanding();
62
+ }
63
+ return this.resolveHostContext(host, args.user, args.password);
64
+ }
65
+ /**
66
+ * Resolve Runtime Context by key. Omit / empty → the only landing Context
67
+ * (ssh ACCESS, or Paradi when TARGET_HOSTS has exactly one host).
46
68
  */
47
69
  requireContext(contextKey) {
48
70
  const key = contextKey?.trim();
49
71
  if (!key) {
50
- return this.withCachedCaps(this.accessContext);
72
+ return this.withCachedCaps(this.requireLanding());
51
73
  }
52
74
  const ctx = this.contexts.get(key);
53
75
  if (!ctx) {
54
- throw new Error(`Unknown contextKey=${key}. Call context_derive first (or omit contextKey for landing).`);
76
+ throw new Error(`Unknown contextKey=${key}. Pass host on the tool (or omit host for landing).`);
55
77
  }
56
78
  return this.withCachedCaps(ctx);
57
79
  }
58
- /** Shell on a Context (default landing). */
80
+ /** Shell on a Context (omit contextKey = the only landing, if one exists). */
59
81
  shellExec(command, opts = {}) {
60
82
  const ctx = this.requireContext(opts.contextKey);
61
83
  return this.pool.exec(ctx, command, opts.timeoutMs, opts.cwd);
62
84
  }
63
85
  /**
64
- * Derive a child Context (ACCESS_KIND=ssh only). Returns summary with contextKey.
65
- * Omitting host uses config TARGET_* as default derive selector.
86
+ * Derive a child Context (ssh hop-2) or select a Paradi TARGET landing.
87
+ * Omitting host uses the single TARGET_HOSTS entry when there is one.
66
88
  */
67
89
  deriveContext(args = {}) {
68
- this.assertDeriveAllowed();
69
90
  const host = args.useTarget ? undefined : args.host;
70
91
  const ctx = this.resolveHostContext(host, args.user, args.password);
71
92
  return this.summarize(ctx);
72
93
  }
73
94
  /**
74
- * deriveContext + shellExec — ACCESS_KIND=ssh only.
75
- * Also returns the derived contextKey via summarize after exec (caller should use derive for key-only).
95
+ * deriveContext + shellExec. Returns the derived contextKey after exec.
76
96
  */
77
97
  async sshExec(args) {
78
- this.assertDeriveAllowed();
79
98
  const ctx = this.resolveHostContext(args.host, args.user, args.password);
80
99
  const out = await this.pool.exec(ctx, args.command, args.timeoutMs);
81
100
  return { ...out, contextKey: ctx.key, endpoint: ctx.endpoint };
@@ -119,6 +138,9 @@ export class AccessRuntime {
119
138
  if (!entry) {
120
139
  throw new Error(`No SessionPool binding for context key=${ctx.key}`);
121
140
  }
141
+ if (entry.kind === "paradi-landing") {
142
+ return { target: "landing", path: endpoint.path, host: entry.host };
143
+ }
122
144
  if (entry.kind === "access") {
123
145
  return { target: "landing", path: endpoint.path };
124
146
  }
@@ -130,10 +152,11 @@ export class AccessRuntime {
130
152
  password: entry.password,
131
153
  };
132
154
  }
133
- assertDeriveAllowed() {
134
- if (this.config.accessKind === "paradi-gateway") {
135
- throw new Error("ACCESS_KIND=paradi-gateway already lands on TARGET - context_derive / ssh_exec are unsupported by current Paradi AccessTransport. Use shell_exec, docker_*, or k8s_* on the landing Context (omit contextKey).");
155
+ requireLanding() {
156
+ if (!this.accessContext) {
157
+ throw new Error("host required — TARGET_HOSTS has no single default; pass a host from user context");
136
158
  }
159
+ return this.accessContext;
137
160
  }
138
161
  remember(ctx) {
139
162
  this.contexts.set(ctx.key, ctx);
@@ -152,7 +175,12 @@ export class AccessRuntime {
152
175
  }
153
176
  resolveHostContext(host, user, password) {
154
177
  const spec = this.resolveDeriveSpec(host, user, password);
155
- const child = this.sshTransport.deriveContext(this.accessContext, spec);
178
+ if (this.config.accessKind === "paradi-gateway") {
179
+ const landing = this.paradiTransport.createContext(this.config, spec.host);
180
+ this.pool.bindParadiLanding(landing, spec.host);
181
+ return this.withCachedCaps(landing);
182
+ }
183
+ const child = this.sshTransport.deriveContext(this.requireLanding(), spec);
156
184
  this.pool.bindDerived(child, spec);
157
185
  return this.withCachedCaps(child);
158
186
  }
@@ -160,7 +188,7 @@ export class AccessRuntime {
160
188
  const defaultSpec = this.sshTransport.defaultDeriveSpec(this.config);
161
189
  const resolvedHost = host?.trim() || defaultSpec?.host;
162
190
  if (!resolvedHost) {
163
- throw new Error("host required, or set TARGET_HOST / pass useTarget with TARGET_* configured");
191
+ throw new Error("host required — TARGET_HOSTS has no single default; pass a host from user context");
164
192
  }
165
193
  const resolvedUser = resolveRemoteUser(user, this.config.targetUser ?? defaultSpec?.user);
166
194
  const resolvedPassword = resolveRemotePassword(password, this.config.targetPassword ?? defaultSpec?.password);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Paradi gateway SSH auth encodings (customer never chooses Mode names in mcp.json by default).
3
3
  *
4
- * - slash: username = ACCESS_USER/TARGET_HOST/TARGET_USER, password = ACCESS_PASSWORD
5
- * - compound: username = ACCESS_USER, password = ACCESS_PASSWORD@##@TARGET_HOST:SSH:22:TARGET_USER
4
+ * - slash: username = ACCESS_USER/<landing-ip>/TARGET_USER, password = ACCESS_PASSWORD
5
+ * - compound: username = ACCESS_USER, password = ACCESS_PASSWORD@##@<landing-ip>:SSH:22:TARGET_USER
6
6
  * - auto: try slash then compound on AUTH_FAILED; pin winner for this MCP process
7
7
  */
8
8
  import type { AppConfig } from "../config.js";
@@ -28,6 +28,6 @@ export declare function parseParadiAuthSetting(raw: string | undefined): ParadiA
28
28
  export declare function resolveParadiAuthModesToTry(config: AppConfig): ParadiAuthMode[];
29
29
  export declare function buildParadiCompoundPassword(accessPassword: string, targetHost: string, targetUser: string, targetSshPort?: number): string;
30
30
  /** Build username+password for one Paradi auth mode (TCP still to ACCESS_HOST). */
31
- export declare function resolveParadiConnectParams(config: AppConfig, mode: ParadiAuthMode): ParadiConnectParams;
31
+ export declare function resolveParadiConnectParams(config: AppConfig, mode: ParadiAuthMode, landingHost?: string): ParadiConnectParams;
32
32
  /** True when failure is auth-only (safe to try the other Paradi mode). */
33
33
  export declare function isParadiAuthFailureMessage(message: string): boolean;
@@ -48,16 +48,16 @@ export function buildParadiCompoundPassword(accessPassword, targetHost, targetUs
48
48
  const h = targetHost.trim();
49
49
  const u = targetUser.trim();
50
50
  if (!h || !u) {
51
- throw new Error("paradi compound password requires TARGET_HOST and TARGET_USER");
51
+ throw new Error("paradi compound password requires a concrete TARGET_HOSTS landing IP and TARGET_USER");
52
52
  }
53
53
  return `${p}@##@${h}:SSH:${targetSshPort}:${u}`;
54
54
  }
55
55
  /** Build username+password for one Paradi auth mode (TCP still to ACCESS_HOST). */
56
- export function resolveParadiConnectParams(config, mode) {
57
- const targetHost = config.targetHost?.trim();
56
+ export function resolveParadiConnectParams(config, mode, landingHost) {
57
+ const targetHost = landingHost?.trim() || config.targetHost?.trim();
58
58
  const targetUser = config.targetUser?.trim();
59
59
  if (!targetHost || !targetUser) {
60
- throw new Error("paradi-gateway requires TARGET_HOST and TARGET_USER");
60
+ throw new Error("paradi-gateway requires a concrete landing host (TARGET_HOSTS default or pass host) and TARGET_USER");
61
61
  }
62
62
  const host = config.accessHost;
63
63
  const port = config.accessPort;
@@ -1 +1 @@
1
- {"version":3,"file":"paradi-auth.js","sourceRoot":"","sources":["../../src/access/paradi-auth.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAc9D,kEAAkE;AAClE,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;AAE1D,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,OAAO,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,IAAoB;IACnE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,mBAAmB;IACjC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAuB;IAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,IAAI,KAAK,CACb,mEAAmE,GAAG,IAAI,CAC3E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC;IAClD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IACD,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,cAAsB,EACtB,UAAkB,EAClB,UAAkB,EAClB,aAAa,GAAG,EAAE;IAElB,MAAM,CAAC,GAAG,cAAc,CAAC;IACzB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,aAAa,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,0BAA0B,CACxC,MAAiB,EACjB,IAAoB;IAEpB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAE7C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;YAC3E,QAAQ,EAAE,cAAc;YACxB,IAAI;SACL,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,UAAU;QAC3B,QAAQ,EAAE,2BAA2B,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC;QAC7E,IAAI;KACL,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,mIAAmI,CAAC,IAAI,CAC7I,OAAO,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"paradi-auth.js","sourceRoot":"","sources":["../../src/access/paradi-auth.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,5 @@ export { buildParadiSshUsername } from "./paradi-username.js";
6
6
  * Runtime must not branch on Paradi; only Transport encodes gateway identity.
7
7
  */
8
8
  export declare class ParadiAccessTransport {
9
- createContext(config: AppConfig): HostExecutionContext;
9
+ createContext(config: AppConfig, landingHost?: string): HostExecutionContext;
10
10
  }
@@ -6,14 +6,14 @@ export { buildParadiSshUsername } from "./paradi-username.js";
6
6
  * Runtime must not branch on Paradi; only Transport encodes gateway identity.
7
7
  */
8
8
  export class ParadiAccessTransport {
9
- createContext(config) {
9
+ createContext(config, landingHost) {
10
10
  if (config.accessKind !== "paradi-gateway") {
11
11
  throw new Error(`ParadiAccessTransport only supports ACCESS_KIND=paradi-gateway (got ${config.accessKind})`);
12
12
  }
13
- const targetHost = config.targetHost?.trim();
13
+ const targetHost = landingHost?.trim() || config.targetHost?.trim();
14
14
  const targetUser = config.targetUser?.trim();
15
15
  if (!targetHost || !targetUser) {
16
- throw new Error("paradi-gateway requires TARGET_HOST and TARGET_USER (landing Context is the target host)");
16
+ throw new Error("paradi-gateway requires a concrete landing host (TARGET_HOSTS default or pass host) and TARGET_USER");
17
17
  }
18
18
  const sshUsername = buildParadiSshUsername(config.accessUser, targetHost, targetUser);
19
19
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"paradi-transport.js","sourceRoot":"","sources":["../../src/access/paradi-transport.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,mBAAmB,GAEpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAChC,aAAa,CAAC,MAAiB;QAC7B,IAAI,MAAM,CAAC,UAAU,KAAK,gBAAgB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,uEAAuE,MAAM,CAAC,UAAU,GAAG,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,sBAAsB,CACxC,MAAM,CAAC,UAAU,EACjB,UAAU,EACV,UAAU,CACX,CAAC;QAEF,OAAO;YACL,GAAG,EAAE,eAAe,CAAC;gBACnB,SAAS,EAAE,gBAAgB;gBAC3B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,YAAY,EAAE,WAAW;aAC1B,CAAC;YACF,SAAS,EAAE,gBAAgB;YAC3B,iEAAiE;YACjE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1D,YAAY,EAAE;gBACZ,GAAG,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,8EAA8E;gBAC9E,IAAI,EAAE,UAAU;gBAChB,oBAAoB,EAAE,IAAI;aAC3B;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"paradi-transport.js","sourceRoot":"","sources":["../../src/access/paradi-transport.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,mBAAmB,GAEpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAChC,aAAa,CAAC,MAAiB,EAAE,WAAoB;QACnD,IAAI,MAAM,CAAC,UAAU,KAAK,gBAAgB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,uEAAuE,MAAM,CAAC,UAAU,GAAG,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QACpE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,sBAAsB,CACxC,MAAM,CAAC,UAAU,EACjB,UAAU,EACV,UAAU,CACX,CAAC;QAEF,OAAO;YACL,GAAG,EAAE,eAAe,CAAC;gBACnB,SAAS,EAAE,gBAAgB;gBAC3B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,YAAY,EAAE,WAAW;aAC1B,CAAC;YACF,SAAS,EAAE,gBAAgB;YAC3B,iEAAiE;YACjE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1D,YAAY,EAAE;gBACZ,GAAG,mBAAmB,CAAC,IAAI,CAAC;gBAC5B,8EAA8E;gBAC9E,IAAI,EAAE,UAAU;gBAChB,oBAAoB,EAAE,IAAI;aAC3B;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Paradi Mode A identity encoding (user never puts this string in mcp.json).
3
- * sshUsername = ACCESS_USER/TARGET_HOST/TARGET_USER
3
+ * sshUsername = ACCESS_USER/<landing-ip>/TARGET_USER
4
4
  */
5
5
  export declare function buildParadiSshUsername(accessUser: string, targetHost: string, targetUser: string): string;
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Paradi Mode A identity encoding (user never puts this string in mcp.json).
3
- * sshUsername = ACCESS_USER/TARGET_HOST/TARGET_USER
3
+ * sshUsername = ACCESS_USER/<landing-ip>/TARGET_USER
4
4
  */
5
5
  export function buildParadiSshUsername(accessUser, targetHost, targetUser) {
6
6
  const a = accessUser.trim();
7
7
  const h = targetHost.trim();
8
8
  const u = targetUser.trim();
9
9
  if (!a || !h || !u) {
10
- throw new Error("paradi-gateway requires ACCESS_USER, TARGET_HOST, and TARGET_USER to build SSH username");
10
+ throw new Error("paradi-gateway requires ACCESS_USER, a concrete TARGET_HOSTS landing IP, and TARGET_USER to build SSH username");
11
11
  }
12
12
  return `${a}/${h}/${u}`;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"paradi-username.js","sourceRoot":"","sources":["../../src/access/paradi-username.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,UAAkB,EAClB,UAAkB;IAElB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"paradi-username.js","sourceRoot":"","sources":["../../src/access/paradi-username.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,UAAkB,EAClB,UAAkB;IAElB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,gHAAgH,CACjH,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC"}
@@ -8,6 +8,9 @@ type PoolEntry = {
8
8
  host: string;
9
9
  user: string;
10
10
  password?: string;
11
+ } | {
12
+ kind: "paradi-landing";
13
+ host: string;
11
14
  };
12
15
  /**
13
16
  * Session pool keyed by context.key. Context itself never holds clients.
@@ -19,6 +22,8 @@ export declare class SessionPool {
19
22
  constructor(accessClient: AccessClient);
20
23
  bindAccess(ctx: HostExecutionContext): void;
21
24
  bindDerived(ctx: HostExecutionContext, spec: DeriveSpec): void;
25
+ /** Paradi: selected TARGET landing (new gateway identity, not hop-2 from ACCESS). */
26
+ bindParadiLanding(ctx: HostExecutionContext, host: string): void;
22
27
  getEntry(contextKey: string): PoolEntry | undefined;
23
28
  exec(ctx: HostExecutionContext, command: string, timeoutMs?: number, cwd?: string): Promise<ExecOutput>;
24
29
  }
@@ -24,6 +24,10 @@ export class SessionPool {
24
24
  password: spec.password,
25
25
  });
26
26
  }
27
+ /** Paradi: selected TARGET landing (new gateway identity, not hop-2 from ACCESS). */
28
+ bindParadiLanding(ctx, host) {
29
+ this.entries.set(ctx.key, { kind: "paradi-landing", host });
30
+ }
27
31
  getEntry(contextKey) {
28
32
  return this.entries.get(contextKey);
29
33
  }
@@ -35,6 +39,9 @@ export class SessionPool {
35
39
  if (entry.kind === "access") {
36
40
  return this.accessClient.exec(command, timeoutMs, cwd);
37
41
  }
42
+ if (entry.kind === "paradi-landing") {
43
+ return this.accessClient.exec(command, timeoutMs, cwd, undefined, entry.host);
44
+ }
38
45
  // Derived host: wrap command in ssh from ACCESS (accessClient) session.
39
46
  const remoteCommand = cwd
40
47
  ? `cd ${bashSingleQuote(cwd)} && ${command}`
@@ -1 +1 @@
1
- {"version":3,"file":"session-pool.js","sourceRoot":"","sources":["../../src/access/session-pool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAajF;;;GAGG;AACH,MAAM,OAAO,WAAW;IAGO;IAFZ,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAExD,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAE3D,UAAU,CAAC,GAAyB;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,WAAW,CAAC,GAAyB,EAAE,IAAgB;QACrD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;YACxB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAyB,EACzB,OAAe,EACf,SAAkB,EAClB,GAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,wEAAwE;QACxE,MAAM,aAAa,GAAG,GAAG;YACvB,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE;YAC5C,CAAC,CAAC,OAAO,CAAC;QACZ,MAAM,UAAU,GAAG,qBAAqB,CACtC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,aAAa,EACb,KAAK,CAAC,QAAQ,CACf,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;CACF"}
1
+ {"version":3,"file":"session-pool.js","sourceRoot":"","sources":["../../src/access/session-pool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAiBjF;;;GAGG;AACH,MAAM,OAAO,WAAW;IAGO;IAFZ,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAExD,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAE3D,UAAU,CAAC,GAAyB;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,WAAW,CAAC,GAAyB,EAAE,IAAgB;QACrD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;YACxB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,iBAAiB,CAAC,GAAyB,EAAE,IAAY;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ,CAAC,UAAkB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAyB,EACzB,OAAe,EACf,SAAkB,EAClB,GAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChF,CAAC;QACD,wEAAwE;QACxE,MAAM,aAAa,GAAG,GAAG;YACvB,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE;YAC5C,CAAC,CAAC,OAAO,CAAC;QACZ,MAAM,UAAU,GAAG,qBAAqB,CACtC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,aAAa,EACb,KAAK,CAAC,QAAQ,CACf,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { AppConfig } from "../config.js";
1
+ import { type AppConfig } from "../config.js";
2
2
  import { type DeriveSpec, type HostExecutionContext } from "./types.js";
3
3
  /**
4
4
  * SSH AccessTransport: produce HostExecutionContext only (no sessions).
@@ -1,4 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { defaultTargetHost } from "../config.js";
2
3
  import { buildContextKey, initialCapabilities, } from "./types.js";
3
4
  function deriveAuthIdentity(spec) {
4
5
  if (!spec.password) {
@@ -56,13 +57,13 @@ export class SshAccessTransport {
56
57
  }
57
58
  /** Default derive target from config (selector only ??does not create a Context). */
58
59
  defaultDeriveSpec(config) {
59
- const host = config.targetHost?.trim();
60
+ const host = config.targetHost?.trim() || defaultTargetHost(config.targetHosts ?? []);
60
61
  if (!host) {
61
62
  return undefined;
62
63
  }
63
64
  const user = config.targetUser?.trim();
64
65
  if (!user) {
65
- throw new Error("TARGET_HOST is set but TARGET_USER is missing");
66
+ throw new Error("TARGET_HOSTS is set but TARGET_USER is missing");
66
67
  }
67
68
  return {
68
69
  host,
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-transport.js","sourceRoot":"","sources":["../../src/access/ssh-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,eAAe,EACf,mBAAmB,GAGpB,MAAM,YAAY,CAAC;AAEpB,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,MAAM,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,mBAAmB,CAAC,MAAiB;QACnC,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,yDAAyD,MAAM,CAAC,UAAU,GAAG,CAC9E,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,OAAO;YACL,GAAG,EAAE,eAAe,CAAC;gBACnB,SAAS,EAAE,KAAK;gBAChB,IAAI;gBACJ,IAAI;gBACJ,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,YAAY,EAAE,IAAI;aACnB,CAAC;YACF,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE;YACjD,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,MAA4B,EAAE,IAAgB;QAC1D,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,oDAAoD,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO;YACL,GAAG,EAAE,eAAe,CAAC;gBACnB,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,SAAS,EAAE,MAAM,CAAC,GAAG;gBACrB,YAAY,EAAE,kBAAkB,CAAC,IAAI,CAAC;aACvC,CAAC;YACF,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;YACrE,SAAS,EAAE,MAAM,CAAC,GAAG;YACrB,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,iBAAiB,CAAC,MAAiB;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,QAAQ,EAAE,MAAM,CAAC,cAAc;SAChC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"ssh-transport.js","sourceRoot":"","sources":["../../src/access/ssh-transport.ts"],"names":[],"mappings":"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"}