@phnx-labs/agents-cli 1.22.57 → 1.22.59
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/CHANGELOG.md +294 -0
- package/README.md +29 -0
- package/dist/bootstrap.js +39 -1
- package/dist/commands/accounts.js +7 -3
- package/dist/commands/apply.js +10 -2
- package/dist/commands/fork.d.ts +23 -10
- package/dist/commands/fork.js +115 -58
- package/dist/commands/monitors.js +198 -23
- package/dist/commands/prune.js +5 -3
- package/dist/commands/routines.d.ts +8 -0
- package/dist/commands/routines.js +57 -3
- package/dist/commands/routines.test-fixture.js +5 -0
- package/dist/commands/send.d.ts +2 -1
- package/dist/commands/send.js +7 -5
- package/dist/commands/sessions-picker.d.ts +11 -0
- package/dist/commands/sessions-picker.js +16 -0
- package/dist/commands/sessions-stats.js +37 -5
- package/dist/commands/sessions.js +40 -5
- package/dist/commands/share.d.ts +14 -0
- package/dist/commands/share.js +43 -2
- package/dist/commands/ssh.js +12 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/sync.js +83 -7
- package/dist/commands/traces.js +7 -0
- package/dist/commands/versions.js +12 -4
- package/dist/commands/view.js +7 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -1
- package/dist/lib/account-registry.d.ts +5 -1
- package/dist/lib/account-registry.js +47 -14
- package/dist/lib/accounting/capacity.d.ts +18 -7
- package/dist/lib/accounting/capacity.js +19 -8
- package/dist/lib/accounting/usage-sync.d.ts +29 -1
- package/dist/lib/accounting/usage-sync.js +76 -2
- package/dist/lib/accounting/usage.js +7 -1
- package/dist/lib/auth-mint.d.ts +11 -1
- package/dist/lib/auth-mint.js +21 -6
- package/dist/lib/auto-pull-worker.js +7 -2
- package/dist/lib/browser/ipc.d.ts +8 -0
- package/dist/lib/browser/ipc.js +87 -0
- package/dist/lib/browser/service.d.ts +19 -0
- package/dist/lib/browser/service.js +96 -11
- package/dist/lib/browser/sessions-list.js +10 -1
- package/dist/lib/cloud/rush.d.ts +7 -0
- package/dist/lib/cloud/rush.js +29 -1
- package/dist/lib/daemon/daemon.d.ts +22 -0
- package/dist/lib/daemon/daemon.js +39 -0
- package/dist/lib/daemon/runner.d.ts +3 -0
- package/dist/lib/daemon/runner.js +86 -45
- package/dist/lib/daemon/session-index-service.js +9 -1
- package/dist/lib/daemon/usage-sync-service.d.ts +3 -3
- package/dist/lib/daemon/usage-sync-service.js +14 -8
- package/dist/lib/daemon-services.js +1 -1
- package/dist/lib/daemon-ticks.d.ts +15 -0
- package/dist/lib/daemon-ticks.js +26 -0
- package/dist/lib/device-config.d.ts +5 -1
- package/dist/lib/device-config.js +2 -2
- package/dist/lib/devices/connect.d.ts +17 -8
- package/dist/lib/devices/connect.js +31 -14
- package/dist/lib/devices/health.js +5 -1
- package/dist/lib/devices/pool.d.ts +25 -2
- package/dist/lib/devices/pool.js +32 -2
- package/dist/lib/devices/stats-cache.d.ts +0 -6
- package/dist/lib/devices/stats-cache.js +2 -9
- package/dist/lib/doctor-diff.d.ts +14 -0
- package/dist/lib/doctor-diff.js +120 -9
- package/dist/lib/fleet/manifest.d.ts +17 -0
- package/dist/lib/fleet/manifest.js +26 -0
- package/dist/lib/git.d.ts +38 -0
- package/dist/lib/git.js +58 -0
- package/dist/lib/hooks/install.d.ts +27 -11
- package/dist/lib/hooks/install.js +42 -17
- package/dist/lib/hosts/ready.d.ts +8 -0
- package/dist/lib/hosts/ready.js +13 -2
- package/dist/lib/hosts/reconnect.d.ts +52 -203
- package/dist/lib/hosts/reconnect.js +64 -284
- package/dist/lib/installations/migrate.d.ts +6 -120
- package/dist/lib/installations/migrate.js +27 -259
- package/dist/lib/installations/shims.d.ts +13 -95
- package/dist/lib/installations/shims.js +22 -139
- package/dist/lib/installations/store.js +1 -1
- package/dist/lib/installations/versions.d.ts +43 -133
- package/dist/lib/installations/versions.js +94 -206
- package/dist/lib/monitors/config.d.ts +71 -3
- package/dist/lib/monitors/config.js +100 -12
- package/dist/lib/monitors/pid-watch.d.ts +35 -0
- package/dist/lib/monitors/pid-watch.js +45 -0
- package/dist/lib/monitors/remote.d.ts +18 -0
- package/dist/lib/monitors/remote.js +11 -0
- package/dist/lib/permissions.js +7 -2
- package/dist/lib/plugins/plugins.d.ts +17 -3
- package/dist/lib/plugins/plugins.js +84 -9
- package/dist/lib/plugins/skills.d.ts +8 -1
- package/dist/lib/plugins/skills.js +18 -2
- package/dist/lib/pty-server.d.ts +14 -0
- package/dist/lib/pty-server.js +49 -5
- package/dist/lib/refresh.d.ts +9 -0
- package/dist/lib/refresh.js +3 -1
- package/dist/lib/routine-readiness.d.ts +15 -1
- package/dist/lib/routine-readiness.js +41 -0
- package/dist/lib/sandbox.d.ts +4 -1
- package/dist/lib/sandbox.js +30 -1
- package/dist/lib/secrets/agent.d.ts +80 -225
- package/dist/lib/secrets/agent.js +139 -401
- package/dist/lib/secrets/bundles.d.ts +73 -222
- package/dist/lib/secrets/bundles.js +168 -467
- package/dist/lib/secrets/drivers/rush.js +5 -0
- package/dist/lib/secrets/reaper.d.ts +28 -70
- package/dist/lib/secrets/reaper.js +30 -85
- package/dist/lib/secrets/remote.d.ts +42 -129
- package/dist/lib/secrets/remote.js +55 -173
- package/dist/lib/self-heal/checks/install-staging.d.ts +4 -0
- package/dist/lib/self-heal/checks/install-staging.js +96 -0
- package/dist/lib/self-heal/registry.js +2 -0
- package/dist/lib/self-heal/types.d.ts +1 -1
- package/dist/lib/self-update.d.ts +65 -0
- package/dist/lib/self-update.js +138 -0
- package/dist/lib/session/active.d.ts +13 -1
- package/dist/lib/session/active.js +2 -0
- package/dist/lib/session/cloud.js +5 -0
- package/dist/lib/session/db.d.ts +51 -6
- package/dist/lib/session/db.js +266 -20
- package/dist/lib/session/fork.d.ts +45 -26
- package/dist/lib/session/fork.js +32 -95
- package/dist/lib/session/tool-calls.d.ts +43 -1
- package/dist/lib/session/tool-calls.js +74 -44
- package/dist/lib/session/tool-store.d.ts +33 -2
- package/dist/lib/session/tool-store.js +56 -3
- package/dist/lib/smart-launch.d.ts +6 -0
- package/dist/lib/smart-launch.js +5 -2
- package/dist/lib/staleness/writers/plugins.js +5 -2
- package/dist/lib/staleness/writers/sources.d.ts +5 -0
- package/dist/lib/staleness/writers/sources.js +2 -1
- package/dist/lib/staleness/writers/subagents.js +13 -3
- package/dist/lib/state.d.ts +7 -4
- package/dist/lib/state.js +7 -4
- package/dist/lib/subagents.js +8 -2
- package/dist/lib/sync-status.d.ts +22 -0
- package/dist/lib/sync-status.js +27 -0
- package/dist/lib/sync-umbrella.d.ts +9 -0
- package/dist/lib/sync-umbrella.js +21 -2
- package/dist/lib/teams/scheduler.d.ts +10 -0
- package/dist/lib/teams/scheduler.js +8 -0
- package/dist/lib/traces/insights.d.ts +47 -14
- package/dist/lib/traces/insights.js +92 -21
- package/dist/lib/traces/phenotype.d.ts +23 -3
- package/dist/lib/traces/phenotype.js +72 -24
- package/dist/lib/traces/sync.d.ts +128 -6
- package/dist/lib/traces/sync.js +294 -35
- package/dist/lib/traces/worker-template.js +154 -1
- package/dist/lib/view-types.d.ts +12 -0
- package/package.json +2 -2
|
@@ -1,37 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Remote secrets — read and use `agents secrets` bundles that live on another
|
|
3
|
-
* host
|
|
4
|
-
* (the write inverse) already uses.
|
|
3
|
+
* host over the same SSH path that `agents secrets export --device` uses.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* stdout back verbatim (lossless, no parsing).
|
|
9
|
-
* - use: resolve a remote bundle to an env map (JSON over ssh stdout) and
|
|
10
|
-
* inject it ephemerally — never written to this machine's keychain.
|
|
11
|
-
*
|
|
12
|
-
* Trust model: relies on the operator's existing SSH access to the host (same
|
|
13
|
-
* boundary as `export --device` / `run --device`). Bundle names are shell-quoted
|
|
14
|
-
* into the remote command; resolved VALUES return over ssh stdout. File-backend
|
|
15
|
-
* import never forwards AGENTS_SECRETS_PASSPHRASE (PHNX-2371). Nothing is
|
|
16
|
-
* persisted locally.
|
|
5
|
+
* Browse streams remote stdout verbatim; use resolves a bundle to an env map
|
|
6
|
+
* and injects it ephemerally without persisting it locally.
|
|
17
7
|
*/
|
|
18
8
|
import { type SshExecResult } from '../ssh-exec.js';
|
|
19
9
|
/**
|
|
20
|
-
* SSH options for
|
|
21
|
-
*
|
|
22
|
-
* (resolve/read-back) — so it MUST NOT ride the shared `accept-new` baseline
|
|
23
|
-
* against the user's own `~/.ssh/known_hosts` with a reusable control socket.
|
|
24
|
-
* Two hardenings over that baseline, matching the posture the `--copy-creds`
|
|
25
|
-
* dispatch already uses (`hosts/dispatch.ts` -> `hostKeyCheckingOpts`):
|
|
26
|
-
*
|
|
27
|
-
* - **Managed pinned host keys.** Verify against the CLI-owned known_hosts
|
|
28
|
-
* store (`known-hosts.ts`), not `~/.ssh/known_hosts`. A CHANGED key on a
|
|
29
|
-
* known host is refused (`StrictHostKeyChecking` `yes` once pinned,
|
|
30
|
-
* `accept-new` before that). Callers that copy durable provider credentials
|
|
31
|
-
* must separately require an existing pin before invoking this transport.
|
|
32
|
-
* - **No multiplex reuse.** `multiplex: false` — a credential channel never
|
|
33
|
-
* leaves a persistent `ControlMaster` socket lingering (60s `ControlPersist`)
|
|
34
|
-
* that any other `agents` invocation to that host would silently reuse.
|
|
10
|
+
* SSH options for secret-carrying transport. Pins the managed host key and
|
|
11
|
+
* disables multiplex so no reusable control socket lingers for other invocations.
|
|
35
12
|
*/
|
|
36
13
|
export declare function credentialTransportSshOpts(target: string): {
|
|
37
14
|
hostKeyOpts: string[];
|
|
@@ -40,37 +17,21 @@ export declare function credentialTransportSshOpts(target: string): {
|
|
|
40
17
|
/** Refuse durable credential transfer until the destination SSH key is pinned. */
|
|
41
18
|
export declare function assertCredentialTransportHostPinned(target: string, pinned?: boolean): void;
|
|
42
19
|
/**
|
|
43
|
-
* Trust boundary for a remote-resolved env map. A peer's
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* never the remote bundle). Block the dangerous-override classes here — at the
|
|
48
|
-
* source — so every consumer (`run --secrets b@host`, `secrets exec --host`) is
|
|
49
|
-
* protected, not just one call site:
|
|
50
|
-
* - LD_* / DYLD_* / NODE_OPTIONS and the other loader/interpreter injections
|
|
51
|
-
* (reuses the canonical bundles.ts predicate);
|
|
52
|
-
* - GIT_* — GIT_SSH_COMMAND et al. hijack every git subprocess;
|
|
53
|
-
* - *_PROXY — HTTP(S)_PROXY / ALL_PROXY reroute outbound traffic (MITM);
|
|
54
|
-
* - *_BASE_URL — ANTHROPIC_BASE_URL / OPENAI_BASE_URL redirect the model API.
|
|
55
|
-
* These keys are already rejected on the ADD side (validateEnvKey for loaders),
|
|
56
|
-
* so a legitimate bundle never carries them — only a hostile peer would.
|
|
20
|
+
* Trust boundary for a remote-resolved env map. A peer's export output is
|
|
21
|
+
* untrusted input that could reshape this process once merged into the env, so
|
|
22
|
+
* block dangerous override classes here for every consumer:
|
|
23
|
+
* loader/interpreter vars, GIT_*, *_PROXY, and *_BASE_URL.
|
|
57
24
|
*/
|
|
58
25
|
export declare function isDangerousRemoteEnvKey(name: string): boolean;
|
|
59
26
|
/**
|
|
60
|
-
* Resolve a `--device` value to an ssh target
|
|
61
|
-
* Delegates to the
|
|
62
|
-
*
|
|
63
|
-
* value as a raw ssh target and validates it against injection. Named distinctly
|
|
64
|
-
* from `../devices/resolve-target.ts` (which returns richer shapes) so importing
|
|
65
|
-
* the wrong one can't silently change which machine you dial.
|
|
27
|
+
* Resolve a `--device` value to an ssh target string for the remote-secrets
|
|
28
|
+
* path. Delegates to the same resolver `run --device` uses; on a miss, treats
|
|
29
|
+
* the value as a raw ssh target and validates it.
|
|
66
30
|
*/
|
|
67
31
|
export declare function resolveHostSshTarget(nameOrAlias: string): Promise<string>;
|
|
68
32
|
/**
|
|
69
|
-
* Merge `--host
|
|
70
|
-
*
|
|
71
|
-
* works. `--device`/`--devices` resolve identically to `--device`/`--hosts` so the
|
|
72
|
-
* fleet-wide `--device` vocabulary (see `agents run --device`, `agents feed --host`)
|
|
73
|
-
* works on the secrets remote commands too. Empty when none is set.
|
|
33
|
+
* Merge `--host` / `--hosts` (and their `--device` / `--devices` aliases) into
|
|
34
|
+
* an ordered, de-duplicated list. Empty when none is set.
|
|
74
35
|
*/
|
|
75
36
|
export declare function parseHostsOption(opts: {
|
|
76
37
|
host?: string;
|
|
@@ -79,11 +40,9 @@ export declare function parseHostsOption(opts: {
|
|
|
79
40
|
devices?: string;
|
|
80
41
|
}): string[];
|
|
81
42
|
/**
|
|
82
|
-
* Split a `bundle@host` reference. No `@` → a local bundle
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* `user@host` (e.g. `r2.backups@muqsit@box` → bundle `r2.backups`, host
|
|
86
|
-
* `muqsit@box`).
|
|
43
|
+
* Split a `bundle@host` reference. No `@` → a local bundle. Bundle names can't
|
|
44
|
+
* contain `@`, so the FIRST `@` separates bundle from ssh target; the target
|
|
45
|
+
* itself may be `user@host` (e.g. `r2.backups@muqsit@box`).
|
|
87
46
|
*/
|
|
88
47
|
export declare function splitBundleRef(ref: string): {
|
|
89
48
|
bundle: string;
|
|
@@ -91,9 +50,8 @@ export declare function splitBundleRef(ref: string): {
|
|
|
91
50
|
};
|
|
92
51
|
/**
|
|
93
52
|
* Run `agents secrets <args>` on a remote host over ssh and return the raw
|
|
94
|
-
* result. Used by
|
|
95
|
-
*
|
|
96
|
-
* remote Touch-ID / passphrase prompt can surface (e.g. `view --reveal`).
|
|
53
|
+
* result. Used by browse commands; `tty` forces `-tt` so remote passphrase
|
|
54
|
+
* prompts can surface.
|
|
97
55
|
*/
|
|
98
56
|
export declare function remoteSecretsRaw(target: string, args: string[], opts?: {
|
|
99
57
|
tty?: boolean;
|
|
@@ -102,17 +60,9 @@ export declare function remoteSecretsRaw(target: string, args: string[], opts?:
|
|
|
102
60
|
secret?: boolean;
|
|
103
61
|
}): SshExecResult;
|
|
104
62
|
/**
|
|
105
|
-
* Run a remote `agents secrets <args>`
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* Unlike `remoteSecretsRaw` — which pipes stdin, so even with `-tt` the remote
|
|
109
|
-
* process's `process.stdin.isTTY` is false and a passphrase prompt refuses to
|
|
110
|
-
* appear (the macOS file-store guard then hard-errors "needs
|
|
111
|
-
* AGENTS_SECRETS_PASSPHRASE") — this inherits the caller's real terminal, so the
|
|
112
|
-
* remote sees a genuine TTY and its hidden passphrase prompt surfaces and reads
|
|
113
|
-
* the keystrokes. This is the transport for `unlock --device`: you type the remote
|
|
114
|
-
* bundle's passphrase at your own terminal. Output is NOT captured (it streams
|
|
115
|
-
* to the terminal); only the exit code is returned.
|
|
63
|
+
* Run a remote `agents secrets <args>` foreground with local stdio inherited,
|
|
64
|
+
* so the remote sees a real TTY and its passphrase prompt surfaces and reads
|
|
65
|
+
* keystrokes. Output streams to the terminal; only the exit code is returned.
|
|
116
66
|
*/
|
|
117
67
|
export declare function remoteSecretsStream(target: string, args: string[], opts?: {
|
|
118
68
|
osLookupName?: string;
|
|
@@ -120,31 +70,20 @@ export declare function remoteSecretsStream(target: string, args: string[], opts
|
|
|
120
70
|
/**
|
|
121
71
|
* Resolve a remote bundle to a plaintext env map by driving the remote's
|
|
122
72
|
* `agents secrets export <bundle> --plaintext --format json`. Values cross over
|
|
123
|
-
* ssh stdout
|
|
73
|
+
* ssh stdout, parsed in memory, never persisted.
|
|
124
74
|
*
|
|
125
|
-
* The remote unlocks the bundle with
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* passphrase: the remote bundle is encrypted with the remote's passphrase, so
|
|
129
|
-
* overriding it would break the read. (A macOS remote under non-interactive
|
|
130
|
-
* SSH will block on Touch-ID — use `view`/`exec` with a remote `file` bundle,
|
|
131
|
-
* an already-unlocked remote secrets-agent, or an interactive `-tt` session.)
|
|
75
|
+
* The remote unlocks the bundle with its own credentials; this machine does NOT
|
|
76
|
+
* forward its passphrase because the remote bundle is encrypted with the
|
|
77
|
+
* remote's passphrase.
|
|
132
78
|
*/
|
|
133
79
|
export declare function remoteResolveEnv(target: string, bundle: string, opts?: {
|
|
134
80
|
osLookupName?: string;
|
|
135
81
|
}): Promise<Record<string, string>>;
|
|
136
82
|
/**
|
|
137
|
-
* Outcome of a post-push read-back verification
|
|
138
|
-
* - `ok`
|
|
139
|
-
* - `locked-keychain`
|
|
140
|
-
*
|
|
141
|
-
* in the secrets agent" guard, or a "stored item … not
|
|
142
|
-
* found" on read-back, or pushed keys simply absent). Only
|
|
143
|
-
* this verdict earns the locked-login-keychain diagnosis +
|
|
144
|
-
* `--remote-backend file` steer.
|
|
145
|
-
* - `error` — a DIFFERENT failure (flaky SSH, timeout, unparseable
|
|
146
|
-
* payload). The raw error is re-surfaced verbatim, never
|
|
147
|
-
* mislabeled as a locked keychain.
|
|
83
|
+
* Outcome of a post-push read-back verification.
|
|
84
|
+
* - `ok` — the pushed keys materialized readably.
|
|
85
|
+
* - `locked-keychain` — read-back gave the specific locked-keychain signal.
|
|
86
|
+
* - `error` — a different failure (SSH, timeout, etc.).
|
|
148
87
|
*/
|
|
149
88
|
export type RemoteKeychainWriteVerification = {
|
|
150
89
|
ok: true;
|
|
@@ -158,24 +97,10 @@ export type RemoteKeychainWriteVerification = {
|
|
|
158
97
|
reason: string;
|
|
159
98
|
};
|
|
160
99
|
/**
|
|
161
|
-
* Decide whether a keychain-backed push to a remote actually
|
|
162
|
-
* value items
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* a macOS host over headless SSH lands the bundle METADATA but not readable value
|
|
166
|
-
* items — the remote login keychain is locked in the non-interactive SSH context,
|
|
167
|
-
* so Security accepts the item WRITE at the DB level but the biometry-ACL'd item is
|
|
168
|
-
* unreadable, and the remote `import` still reports success (values written first,
|
|
169
|
-
* metadata `noAcl` last — bundles.ts writeBundleWithItems). The metadata-only bundle
|
|
170
|
-
* then fails every later read with the confusing `Bundle '<b>' key '<k>': stored
|
|
171
|
-
* item '<item>' not found` (bundles.ts resolveBundleEnv). We catch it by reading
|
|
172
|
-
* the bundle back the same way a later `secrets exec`/resolve will (the marker-gated
|
|
173
|
-
* json transport, driven headlessly on the remote so its `agentOnly` guard FAILS FAST
|
|
174
|
-
* before any keychain read — no Touch ID prompt) and confirming every pushed key
|
|
175
|
-
* returned.
|
|
176
|
-
*
|
|
177
|
-
* Pure so both branches are unit-testable without a real locked keychain: inject the
|
|
178
|
-
* "read-back failed / key absent" condition through `readBack`.
|
|
100
|
+
* Decide whether a keychain-backed push to a remote actually persisted its
|
|
101
|
+
* secret value items by reading the bundle back the same way a later resolve
|
|
102
|
+
* will. Catches the silent failure where headless SSH writes metadata but not
|
|
103
|
+
* readable value items to a locked macOS login keychain.
|
|
179
104
|
*/
|
|
180
105
|
export declare function evaluateKeychainWriteVerification(pushedKeys: string[], readBack: {
|
|
181
106
|
ok: true;
|
|
@@ -185,38 +110,26 @@ export declare function evaluateKeychainWriteVerification(pushedKeys: string[],
|
|
|
185
110
|
stderr: string;
|
|
186
111
|
}): RemoteKeychainWriteVerification;
|
|
187
112
|
/**
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* re-run with the headless-readable file backend, or unlock the remote keychain.
|
|
191
|
-
* Pure + exported so the exact guidance is asserted in tests.
|
|
113
|
+
* Actionable error message for a failed keychain-over-SSH push. Names the cause
|
|
114
|
+
* (locked remote login keychain) and steers to the two real fixes.
|
|
192
115
|
*/
|
|
193
116
|
export declare function keychainWriteFailureMessage(host: string, bundle: string, reason: string): string;
|
|
194
117
|
/**
|
|
195
|
-
* Read a bundle back from a remote over SSH
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
* --format json` under AGENTS_SECRETS_REMOTE_TRANSPORT) but keeps only the KEY
|
|
199
|
-
* NAMES; the plaintext values are dropped immediately and never retained or
|
|
200
|
-
* logged. Returns a verification verdict; the caller renders
|
|
201
|
-
* `keychainWriteFailureMessage` on failure.
|
|
118
|
+
* Read a bundle back from a remote over SSH and confirm the pushed keys
|
|
119
|
+
* materialized. Drives the marker-gated json transport but keeps only KEY NAMES;
|
|
120
|
+
* plaintext values are discarded immediately. Returns a verification verdict.
|
|
202
121
|
*/
|
|
203
122
|
export declare function verifyRemoteKeychainPush(target: string, bundle: string, pushedKeys: string[], opts?: {
|
|
204
123
|
osLookupName?: string;
|
|
205
124
|
secret?: boolean;
|
|
206
125
|
}): RemoteKeychainWriteVerification;
|
|
207
126
|
/**
|
|
208
|
-
*
|
|
209
|
-
* import for `secrets export --device … --remote-backend file`.
|
|
127
|
+
* `bash -lc` command + stdin payload for a file-backed remote import.
|
|
210
128
|
*
|
|
211
|
-
* The file store is passphrase-free: the remote
|
|
212
|
-
*
|
|
213
|
-
* `~/.agents/.secrets-key/`), so its reads are HEADLESS — no passphrase, no
|
|
214
|
-
* Touch ID. AGENTS_SECRETS_PASSPHRASE is a deprecated override and MUST NOT be
|
|
129
|
+
* The file store is passphrase-free: the remote auto-provisions its own machine-
|
|
130
|
+
* local key, so reads are headless. AGENTS_SECRETS_PASSPHRASE must NOT be
|
|
215
131
|
* forwarded (PHNX-2371): a remote keyed to a secret its daemon does not hold
|
|
216
132
|
* reports "Imported N key(s)" then fails every later decrypt.
|
|
217
|
-
*
|
|
218
|
-
* Pure — no I/O — so the exact command string and stdin ordering are unit-testable
|
|
219
|
-
* against the SSH boundary the same way `remoteSecretsRaw` is.
|
|
220
133
|
*/
|
|
221
134
|
export declare function buildRemoteFileImportCommand(bundle: string, dotenv: string, opts?: {
|
|
222
135
|
force?: boolean;
|