@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.
Files changed (110) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +28 -2
  3. package/dist/commands/commands.js +3 -3
  4. package/dist/commands/computer-actions.js +1 -0
  5. package/dist/commands/computer.d.ts +23 -0
  6. package/dist/commands/computer.js +45 -3
  7. package/dist/commands/cost.js +2 -2
  8. package/dist/commands/doctor.d.ts +10 -0
  9. package/dist/commands/doctor.js +51 -2
  10. package/dist/commands/exec.js +56 -1
  11. package/dist/commands/hooks.js +3 -3
  12. package/dist/commands/import.js +1 -1
  13. package/dist/commands/inspect.js +13 -17
  14. package/dist/commands/mcp.js +3 -3
  15. package/dist/commands/permissions.js +3 -3
  16. package/dist/commands/rules.js +3 -3
  17. package/dist/commands/secrets-migrate.js +23 -11
  18. package/dist/commands/secrets.d.ts +20 -0
  19. package/dist/commands/secrets.js +53 -1
  20. package/dist/commands/sessions.js +18 -1
  21. package/dist/commands/skills.js +3 -3
  22. package/dist/commands/status.d.ts +12 -0
  23. package/dist/commands/status.js +81 -0
  24. package/dist/commands/sync.js +2 -2
  25. package/dist/commands/teams.js +77 -18
  26. package/dist/commands/usage.js +2 -2
  27. package/dist/commands/utils.d.ts +8 -0
  28. package/dist/commands/utils.js +20 -0
  29. package/dist/commands/versions.js +4 -3
  30. package/dist/commands/view.d.ts +39 -0
  31. package/dist/commands/view.js +217 -84
  32. package/dist/commands/workflows.js +3 -3
  33. package/dist/index.js +16 -2
  34. package/dist/lib/acp/harnesses.d.ts +1 -1
  35. package/dist/lib/acp/harnesses.js +2 -2
  36. package/dist/lib/agent-spec/index.d.ts +18 -0
  37. package/dist/lib/agent-spec/index.js +35 -0
  38. package/dist/lib/agent-spec/primitives.d.ts +28 -0
  39. package/dist/lib/agent-spec/primitives.js +57 -0
  40. package/dist/lib/agent-spec/provider.d.ts +2 -0
  41. package/dist/lib/agent-spec/provider.js +9 -0
  42. package/dist/lib/agent-spec/resolve.d.ts +33 -0
  43. package/dist/lib/agent-spec/resolve.js +174 -0
  44. package/dist/lib/agent-spec/types.d.ts +57 -0
  45. package/dist/lib/agent-spec/types.js +18 -0
  46. package/dist/lib/agents.d.ts +12 -0
  47. package/dist/lib/agents.js +115 -32
  48. package/dist/lib/browser/chrome.js +20 -0
  49. package/dist/lib/browser/drivers/ssh.d.ts +19 -0
  50. package/dist/lib/browser/drivers/ssh.js +18 -3
  51. package/dist/lib/crabbox/cli.d.ts +98 -0
  52. package/dist/lib/crabbox/cli.js +218 -0
  53. package/dist/lib/crabbox/lease.d.ts +41 -0
  54. package/dist/lib/crabbox/lease.js +73 -0
  55. package/dist/lib/crabbox/runtimes.d.ts +57 -0
  56. package/dist/lib/crabbox/runtimes.js +109 -0
  57. package/dist/lib/doctor-diff.js +29 -2
  58. package/dist/lib/drift-sync.d.ts +43 -0
  59. package/dist/lib/drift-sync.js +179 -0
  60. package/dist/lib/exec.d.ts +15 -0
  61. package/dist/lib/exec.js +21 -11
  62. package/dist/lib/hosts/dispatch.d.ts +27 -10
  63. package/dist/lib/hosts/dispatch.js +55 -19
  64. package/dist/lib/hosts/option.d.ts +14 -0
  65. package/dist/lib/hosts/option.js +19 -0
  66. package/dist/lib/hosts/passthrough.d.ts +30 -0
  67. package/dist/lib/hosts/passthrough.js +141 -0
  68. package/dist/lib/hosts/remote-cmd.d.ts +36 -0
  69. package/dist/lib/hosts/remote-cmd.js +56 -0
  70. package/dist/lib/menubar/MenubarHelper.app/Contents/MacOS/MenubarHelper +0 -0
  71. package/dist/lib/platform/winpath.d.ts +31 -2
  72. package/dist/lib/platform/winpath.js +133 -24
  73. package/dist/lib/pwsh.d.ts +11 -0
  74. package/dist/lib/pwsh.js +13 -0
  75. package/dist/lib/secrets/Agents CLI.app/Contents/CodeResources +0 -0
  76. package/dist/lib/secrets/Agents CLI.app/Contents/MacOS/Agents CLI +0 -0
  77. package/dist/lib/secrets/agent.d.ts +42 -1
  78. package/dist/lib/secrets/agent.js +89 -11
  79. package/dist/lib/secrets/bundles.js +61 -21
  80. package/dist/lib/secrets/filestore.js +31 -1
  81. package/dist/lib/secrets/index.d.ts +44 -1
  82. package/dist/lib/secrets/index.js +108 -10
  83. package/dist/lib/secrets/linux.d.ts +14 -0
  84. package/dist/lib/secrets/linux.js +21 -0
  85. package/dist/lib/secrets/windows.d.ts +74 -0
  86. package/dist/lib/secrets/windows.js +440 -0
  87. package/dist/lib/session/active.d.ts +8 -0
  88. package/dist/lib/session/active.js +18 -1
  89. package/dist/lib/session/provenance.d.ts +56 -0
  90. package/dist/lib/session/provenance.js +157 -0
  91. package/dist/lib/shims.d.ts +20 -0
  92. package/dist/lib/shims.js +53 -20
  93. package/dist/lib/ssh-exec.d.ts +22 -0
  94. package/dist/lib/ssh-exec.js +59 -2
  95. package/dist/lib/ssh-tunnel.d.ts +0 -5
  96. package/dist/lib/ssh-tunnel.js +65 -8
  97. package/dist/lib/startup/command-registry.d.ts +1 -0
  98. package/dist/lib/startup/command-registry.js +2 -0
  99. package/dist/lib/sync-status.d.ts +102 -0
  100. package/dist/lib/sync-status.js +135 -0
  101. package/dist/lib/teams/agents.d.ts +24 -0
  102. package/dist/lib/teams/agents.js +30 -1
  103. package/dist/lib/types.d.ts +20 -1
  104. package/dist/lib/usage.d.ts +30 -0
  105. package/dist/lib/usage.js +159 -2
  106. package/dist/lib/versions.d.ts +2 -4
  107. package/dist/lib/versions.js +7 -20
  108. package/package.json +2 -1
  109. package/dist/lib/agent-spec.d.ts +0 -36
  110. package/dist/lib/agent-spec.js +0 -157
@@ -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
- }