@phnx-labs/agents-cli 1.20.32 → 1.20.34
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 +7 -0
- package/README.md +28 -2
- package/dist/commands/commands.js +3 -3
- package/dist/commands/computer-actions.js +1 -0
- package/dist/commands/computer.d.ts +23 -0
- package/dist/commands/computer.js +45 -3
- package/dist/commands/cost.js +2 -2
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.js +51 -2
- package/dist/commands/exec.js +56 -1
- package/dist/commands/hooks.js +3 -3
- package/dist/commands/import.js +1 -1
- package/dist/commands/inspect.js +13 -17
- package/dist/commands/mcp.js +3 -3
- package/dist/commands/permissions.js +3 -3
- package/dist/commands/rules.js +3 -3
- package/dist/commands/secrets-migrate.js +23 -11
- package/dist/commands/secrets.d.ts +20 -0
- package/dist/commands/secrets.js +53 -1
- package/dist/commands/sessions.js +18 -1
- package/dist/commands/skills.js +3 -3
- package/dist/commands/status.d.ts +12 -0
- package/dist/commands/status.js +81 -0
- package/dist/commands/sync.js +2 -2
- package/dist/commands/teams.js +77 -18
- package/dist/commands/usage.js +2 -2
- package/dist/commands/utils.d.ts +8 -0
- package/dist/commands/utils.js +20 -0
- package/dist/commands/versions.js +4 -3
- package/dist/commands/view.d.ts +39 -0
- package/dist/commands/view.js +217 -84
- package/dist/commands/workflows.js +3 -3
- package/dist/index.js +16 -2
- package/dist/lib/acp/harnesses.d.ts +1 -1
- package/dist/lib/acp/harnesses.js +2 -2
- package/dist/lib/agent-spec/index.d.ts +18 -0
- package/dist/lib/agent-spec/index.js +35 -0
- package/dist/lib/agent-spec/primitives.d.ts +28 -0
- package/dist/lib/agent-spec/primitives.js +57 -0
- package/dist/lib/agent-spec/provider.d.ts +2 -0
- package/dist/lib/agent-spec/provider.js +9 -0
- package/dist/lib/agent-spec/resolve.d.ts +33 -0
- package/dist/lib/agent-spec/resolve.js +174 -0
- package/dist/lib/agent-spec/types.d.ts +57 -0
- package/dist/lib/agent-spec/types.js +18 -0
- package/dist/lib/agents.d.ts +12 -0
- package/dist/lib/agents.js +115 -32
- package/dist/lib/browser/chrome.js +20 -0
- package/dist/lib/browser/drivers/ssh.d.ts +19 -0
- package/dist/lib/browser/drivers/ssh.js +18 -3
- package/dist/lib/crabbox/cli.d.ts +98 -0
- package/dist/lib/crabbox/cli.js +218 -0
- package/dist/lib/crabbox/lease.d.ts +41 -0
- package/dist/lib/crabbox/lease.js +73 -0
- package/dist/lib/crabbox/runtimes.d.ts +57 -0
- package/dist/lib/crabbox/runtimes.js +109 -0
- package/dist/lib/doctor-diff.js +29 -2
- package/dist/lib/drift-sync.d.ts +43 -0
- package/dist/lib/drift-sync.js +179 -0
- package/dist/lib/exec.d.ts +15 -0
- package/dist/lib/exec.js +21 -11
- package/dist/lib/hosts/dispatch.d.ts +27 -10
- package/dist/lib/hosts/dispatch.js +55 -19
- package/dist/lib/hosts/option.d.ts +14 -0
- package/dist/lib/hosts/option.js +19 -0
- package/dist/lib/hosts/passthrough.d.ts +30 -0
- package/dist/lib/hosts/passthrough.js +141 -0
- package/dist/lib/hosts/remote-cmd.d.ts +36 -0
- package/dist/lib/hosts/remote-cmd.js +56 -0
- package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
- package/dist/lib/platform/winpath.d.ts +31 -2
- package/dist/lib/platform/winpath.js +133 -24
- package/dist/lib/pwsh.d.ts +11 -0
- package/dist/lib/pwsh.js +13 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
- package/dist/lib/secrets/agent.d.ts +42 -1
- package/dist/lib/secrets/agent.js +89 -11
- package/dist/lib/secrets/bundles.js +61 -21
- package/dist/lib/secrets/filestore.js +31 -1
- package/dist/lib/secrets/index.d.ts +44 -1
- package/dist/lib/secrets/index.js +108 -10
- package/dist/lib/secrets/linux.d.ts +14 -0
- package/dist/lib/secrets/linux.js +21 -0
- package/dist/lib/secrets/windows.d.ts +74 -0
- package/dist/lib/secrets/windows.js +440 -0
- package/dist/lib/session/active.d.ts +8 -0
- package/dist/lib/session/active.js +18 -1
- package/dist/lib/session/provenance.d.ts +56 -0
- package/dist/lib/session/provenance.js +157 -0
- package/dist/lib/shims.d.ts +20 -0
- package/dist/lib/shims.js +53 -20
- package/dist/lib/ssh-exec.d.ts +22 -0
- package/dist/lib/ssh-exec.js +59 -2
- package/dist/lib/ssh-tunnel.d.ts +0 -5
- package/dist/lib/ssh-tunnel.js +65 -8
- package/dist/lib/startup/command-registry.d.ts +1 -0
- package/dist/lib/startup/command-registry.js +2 -0
- package/dist/lib/sync-status.d.ts +102 -0
- package/dist/lib/sync-status.js +135 -0
- package/dist/lib/teams/agents.d.ts +24 -0
- package/dist/lib/teams/agents.js +30 -1
- package/dist/lib/types.d.ts +20 -1
- package/dist/lib/usage.d.ts +30 -0
- package/dist/lib/usage.js +159 -2
- package/dist/lib/versions.d.ts +2 -4
- package/dist/lib/versions.js +7 -20
- package/package.json +2 -1
- package/dist/lib/agent-spec.d.ts +0 -36
- package/dist/lib/agent-spec.js +0 -157
package/dist/lib/agent-spec.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
// Centralized agent-spec resolution — one vocabulary, one resolver, reused by
|
|
2
|
-
// every subcommand that accepts `<agent>[@<qualifier>]`.
|
|
3
|
-
//
|
|
4
|
-
// The qualifier vocabulary used to be split across three functions in
|
|
5
|
-
// versions.ts (parseAgentSpec, resolveVersionAlias, resolveInstalledAgentTargets)
|
|
6
|
-
// with diverging support — `@latest`/`@oldest` in one, `@all`/`@default` in
|
|
7
|
-
// another, `@pinned` nowhere. This module is the single source of truth.
|
|
8
|
-
//
|
|
9
|
-
// Built for the hot path (`--launch`, ~100ms budget): the common specs resolve
|
|
10
|
-
// with NO directory enumeration —
|
|
11
|
-
// exact `claude@2.1.181` → one isVersionInstalled() (existsSync)
|
|
12
|
-
// `claude@pinned|@default` → memoized getGlobalDefault() + existsSync
|
|
13
|
-
// bare `claude` → resolveVersion() (memoized meta), no readdir
|
|
14
|
-
// Only the relative qualifiers `@latest`/`@oldest`/`@all` enumerate, and even
|
|
15
|
-
// then via the mtime-cached listInstalledVersions().
|
|
16
|
-
import { AGENTS, ALL_AGENT_IDS, resolveAgentName, formatAgentError } from './agents.js';
|
|
17
|
-
import { listInstalledVersions, getGlobalDefault, isVersionInstalled, resolveVersion, } from './versions.js';
|
|
18
|
-
/** Canonical qualifier set, in help/display order. `pinned` ≡ `default`. */
|
|
19
|
-
export const AGENT_QUALIFIERS = ['latest', 'oldest', 'pinned', 'default', 'all'];
|
|
20
|
-
/** Shared `--help` epilog so every agent-spec command documents the same grammar. */
|
|
21
|
-
export const AGENT_SPEC_HELP = 'Agent spec: <agent>[@<qualifier>]. Qualifiers: ' +
|
|
22
|
-
'@latest (highest installed), @oldest (lowest installed), ' +
|
|
23
|
-
'@pinned / @default (your configured default — synonyms), ' +
|
|
24
|
-
'@all (every installed version), or an exact @x.y.z. ' +
|
|
25
|
-
'Bare <agent> uses the resolved default (project pin → global default). ' +
|
|
26
|
-
'Comma-separate to combine: claude@all,codex@latest.';
|
|
27
|
-
export class AgentSpecError extends Error {
|
|
28
|
-
constructor(message) {
|
|
29
|
-
super(message);
|
|
30
|
-
this.name = 'AgentSpecError';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Resolve an agent spec (single or comma-list) into concrete installed targets.
|
|
35
|
-
* Domain = installed: `@latest`/`@oldest`/`@all` range over installed versions
|
|
36
|
-
* (`add`/`install` use a separate available-version path). Throws AgentSpecError
|
|
37
|
-
* on bad input — never calls process.exit, so it is safe on the hot path and in
|
|
38
|
-
* library contexts.
|
|
39
|
-
*/
|
|
40
|
-
export function resolveAgentTargets(spec, opts = {}) {
|
|
41
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
42
|
-
const available = opts.availableAgents ?? ALL_AGENT_IDS;
|
|
43
|
-
const rawEntries = spec
|
|
44
|
-
.split(',')
|
|
45
|
-
.map((s) => s.trim())
|
|
46
|
-
.filter(Boolean);
|
|
47
|
-
if (rawEntries.length === 0) {
|
|
48
|
-
throw new AgentSpecError('Empty agent spec.');
|
|
49
|
-
}
|
|
50
|
-
// Expand the bare literal `all` (or `all@all`) into every available agent that
|
|
51
|
-
// has at least one installed version. Lenient: agents with nothing installed
|
|
52
|
-
// are skipped rather than erroring.
|
|
53
|
-
const entries = [];
|
|
54
|
-
for (const e of rawEntries) {
|
|
55
|
-
if (e === 'all' || e === 'all@all') {
|
|
56
|
-
for (const a of available) {
|
|
57
|
-
if (listInstalledVersions(a).length > 0)
|
|
58
|
-
entries.push(`${a}@all`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
entries.push(e);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const out = [];
|
|
66
|
-
const seen = new Set();
|
|
67
|
-
const push = (agent, version) => {
|
|
68
|
-
const key = `${agent}@${version ?? ''}`;
|
|
69
|
-
if (!seen.has(key)) {
|
|
70
|
-
seen.add(key);
|
|
71
|
-
out.push({ agent, version });
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
for (const entry of entries) {
|
|
75
|
-
const at = entry.indexOf('@');
|
|
76
|
-
const agentToken = (at === -1 ? entry : entry.slice(0, at)).trim();
|
|
77
|
-
const qualifier = at === -1 ? null : entry.slice(at + 1).trim();
|
|
78
|
-
if (!agentToken)
|
|
79
|
-
continue;
|
|
80
|
-
if (at !== -1 && !qualifier) {
|
|
81
|
-
throw new AgentSpecError(`Missing version in '${entry}'. Use ${agentToken}@x.y.z, @latest, @oldest, @pinned, @default, or @all.`);
|
|
82
|
-
}
|
|
83
|
-
const agent = resolveAgentName(agentToken);
|
|
84
|
-
if (!agent || !available.includes(agent)) {
|
|
85
|
-
throw new AgentSpecError(formatAgentError(agentToken, [...available]));
|
|
86
|
-
}
|
|
87
|
-
const name = AGENTS[agent].name;
|
|
88
|
-
// ----- bare: resolved default, NO enumeration in the common case -----
|
|
89
|
-
if (qualifier === null) {
|
|
90
|
-
const resolved = resolveVersion(agent, cwd); // project pin → global default (meta-only)
|
|
91
|
-
if (resolved) {
|
|
92
|
-
push(agent, resolved);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
const installed = listInstalledVersions(agent);
|
|
96
|
-
if (installed.length === 0)
|
|
97
|
-
push(agent, null);
|
|
98
|
-
else if (installed.length === 1)
|
|
99
|
-
push(agent, installed[0]);
|
|
100
|
-
else
|
|
101
|
-
throw new AgentSpecError(`No default version set for ${name}. Specify one (${agent}@<version>) or set it: agents use ${agent}@<version>.`);
|
|
102
|
-
}
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
// ----- @pinned / @default: synonyms, meta-only fast path -----
|
|
106
|
-
if (qualifier === 'pinned' || qualifier === 'default') {
|
|
107
|
-
const def = getGlobalDefault(agent);
|
|
108
|
-
if (!def) {
|
|
109
|
-
throw new AgentSpecError(`No default version set for ${name}. Run: agents use ${agent}@<version>`);
|
|
110
|
-
}
|
|
111
|
-
push(agent, def);
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
// ----- @all: every installed version -----
|
|
115
|
-
if (qualifier === 'all') {
|
|
116
|
-
const installed = listInstalledVersions(agent);
|
|
117
|
-
if (installed.length === 0) {
|
|
118
|
-
throw new AgentSpecError(`No managed versions are installed for ${name}. Run: agents add ${agent}@latest`);
|
|
119
|
-
}
|
|
120
|
-
for (const v of installed)
|
|
121
|
-
push(agent, v);
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
// ----- @latest / @oldest: enumerate (mtime-cached), pick an end -----
|
|
125
|
-
if (qualifier === 'latest' || qualifier === 'oldest') {
|
|
126
|
-
const installed = listInstalledVersions(agent); // already sorted ascending
|
|
127
|
-
if (installed.length === 0) {
|
|
128
|
-
throw new AgentSpecError(`No managed versions are installed for ${name}. Run: agents add ${agent}@latest`);
|
|
129
|
-
}
|
|
130
|
-
push(agent, qualifier === 'oldest' ? installed[0] : installed[installed.length - 1]);
|
|
131
|
-
continue;
|
|
132
|
-
}
|
|
133
|
-
// ----- exact version: one existsSync, NO enumeration -----
|
|
134
|
-
if (!isVersionInstalled(agent, qualifier)) {
|
|
135
|
-
const installed = listInstalledVersions(agent);
|
|
136
|
-
const hint = installed.length ? ` Installed: ${installed.join(', ')}.` : '';
|
|
137
|
-
throw new AgentSpecError(`${name}@${qualifier} is not installed.${hint} Install it: agents add ${agent}@${qualifier}`);
|
|
138
|
-
}
|
|
139
|
-
push(agent, qualifier);
|
|
140
|
-
}
|
|
141
|
-
return out;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Convenience for single-target commands (`use`, `run`): resolve a spec that
|
|
145
|
-
* must name exactly one installed version. Rejects `@all` / multi-target specs.
|
|
146
|
-
*/
|
|
147
|
-
export function resolveSingleAgentTarget(spec, opts = {}) {
|
|
148
|
-
const targets = resolveAgentTargets(spec, opts);
|
|
149
|
-
if (targets.length !== 1) {
|
|
150
|
-
throw new AgentSpecError(`'${spec}' resolves to ${targets.length} targets; this command needs exactly one.`);
|
|
151
|
-
}
|
|
152
|
-
const t = targets[0];
|
|
153
|
-
if (t.version === null) {
|
|
154
|
-
throw new AgentSpecError(`No installed version for ${AGENTS[t.agent].name}. Run: agents add ${t.agent}@latest`);
|
|
155
|
-
}
|
|
156
|
-
return { agent: t.agent, version: t.version };
|
|
157
|
-
}
|