@a5c-ai/agent-mux-cli 0.2.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -0
  3. package/dist/bootstrap.d.ts +14 -0
  4. package/dist/bootstrap.d.ts.map +1 -0
  5. package/dist/bootstrap.js +41 -0
  6. package/dist/bootstrap.js.map +1 -0
  7. package/dist/commands/adapters.d.ts +9 -0
  8. package/dist/commands/adapters.d.ts.map +1 -0
  9. package/dist/commands/adapters.js +132 -0
  10. package/dist/commands/adapters.js.map +1 -0
  11. package/dist/commands/auth.d.ts +9 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +137 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/config.d.ts +9 -0
  16. package/dist/commands/config.d.ts.map +1 -0
  17. package/dist/commands/config.js +221 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/detect-host.d.ts +8 -0
  20. package/dist/commands/detect-host.d.ts.map +1 -0
  21. package/dist/commands/detect-host.js +33 -0
  22. package/dist/commands/detect-host.js.map +1 -0
  23. package/dist/commands/doctor.d.ts +4 -0
  24. package/dist/commands/doctor.d.ts.map +1 -0
  25. package/dist/commands/doctor.js +120 -0
  26. package/dist/commands/doctor.js.map +1 -0
  27. package/dist/commands/help.d.ts +14 -0
  28. package/dist/commands/help.d.ts.map +1 -0
  29. package/dist/commands/help.js +346 -0
  30. package/dist/commands/help.js.map +1 -0
  31. package/dist/commands/hooks.d.ts +17 -0
  32. package/dist/commands/hooks.d.ts.map +1 -0
  33. package/dist/commands/hooks.js +219 -0
  34. package/dist/commands/hooks.js.map +1 -0
  35. package/dist/commands/install-helpers.d.ts +25 -0
  36. package/dist/commands/install-helpers.d.ts.map +1 -0
  37. package/dist/commands/install-helpers.js +58 -0
  38. package/dist/commands/install-helpers.js.map +1 -0
  39. package/dist/commands/install.d.ts +25 -0
  40. package/dist/commands/install.d.ts.map +1 -0
  41. package/dist/commands/install.js +406 -0
  42. package/dist/commands/install.js.map +1 -0
  43. package/dist/commands/models.d.ts +9 -0
  44. package/dist/commands/models.d.ts.map +1 -0
  45. package/dist/commands/models.js +153 -0
  46. package/dist/commands/models.js.map +1 -0
  47. package/dist/commands/plugins.d.ts +9 -0
  48. package/dist/commands/plugins.d.ts.map +1 -0
  49. package/dist/commands/plugins.js +180 -0
  50. package/dist/commands/plugins.js.map +1 -0
  51. package/dist/commands/profiles.d.ts +9 -0
  52. package/dist/commands/profiles.d.ts.map +1 -0
  53. package/dist/commands/profiles.js +206 -0
  54. package/dist/commands/profiles.js.map +1 -0
  55. package/dist/commands/remote.d.ts +31 -0
  56. package/dist/commands/remote.d.ts.map +1 -0
  57. package/dist/commands/remote.js +204 -0
  58. package/dist/commands/remote.js.map +1 -0
  59. package/dist/commands/run.d.ts +28 -0
  60. package/dist/commands/run.d.ts.map +1 -0
  61. package/dist/commands/run.js +293 -0
  62. package/dist/commands/run.js.map +1 -0
  63. package/dist/commands/sessions.d.ts +9 -0
  64. package/dist/commands/sessions.d.ts.map +1 -0
  65. package/dist/commands/sessions.js +225 -0
  66. package/dist/commands/sessions.js.map +1 -0
  67. package/dist/exit-codes.d.ts +33 -0
  68. package/dist/exit-codes.d.ts.map +1 -0
  69. package/dist/exit-codes.js +68 -0
  70. package/dist/exit-codes.js.map +1 -0
  71. package/dist/index.d.ts +23 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +188 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/output.d.ts +56 -0
  76. package/dist/output.d.ts.map +1 -0
  77. package/dist/output.js +129 -0
  78. package/dist/output.js.map +1 -0
  79. package/dist/parse-args.d.ts +58 -0
  80. package/dist/parse-args.d.ts.map +1 -0
  81. package/dist/parse-args.js +257 -0
  82. package/dist/parse-args.js.map +1 -0
  83. package/package.json +57 -0
@@ -0,0 +1,219 @@
1
+ /**
2
+ * `amux hooks <agent> <subcommand> [args]` — manage and dispatch hooks.
3
+ *
4
+ * Subcommands:
5
+ * discover List native hook types supported by the harness.
6
+ * list List registered hooks (project + global).
7
+ * add <hookType> [--handler builtin|command|script] [--target <t>] [--id <id>] [--global]
8
+ * remove <id> [--global]
9
+ * set <id> [--priority N] [--enabled true|false] [--target <t>]
10
+ * handle <hookType> Read JSON payload on stdin, dispatch, emit unified result.
11
+ */
12
+ import { HookConfigManager, HookDispatcher, builtInHooks, getHookCatalog, parseHookPayload, formatHookResult, } from '@a5c-ai/agent-mux-core';
13
+ import { flagBool, flagStr } from '../parse-args.js';
14
+ import { ExitCode } from '../exit-codes.js';
15
+ import { printError, printJsonError, printJsonOk, printTable, } from '../output.js';
16
+ export const HOOKS_FLAGS = {
17
+ handler: { type: 'string' },
18
+ target: { type: 'string' },
19
+ priority: { type: 'string' },
20
+ enabled: { type: 'string' },
21
+ id: { type: 'string' },
22
+ global: { type: 'boolean' },
23
+ project: { type: 'boolean' },
24
+ };
25
+ function jsonMode(args) {
26
+ return flagBool(args.flags, 'json') === true;
27
+ }
28
+ export async function hooksCommand(_client, args) {
29
+ const json = jsonMode(args);
30
+ const agent = args.subcommand;
31
+ const sub = args.positionals[0];
32
+ if (!agent || !sub) {
33
+ const msg = 'Usage: amux hooks <agent> <discover|list|add|remove|set|handle> [...]';
34
+ if (json)
35
+ printJsonError('VALIDATION_ERROR', msg);
36
+ else
37
+ printError(msg);
38
+ return ExitCode.USAGE_ERROR;
39
+ }
40
+ const mgr = new HookConfigManager();
41
+ switch (sub) {
42
+ case 'discover':
43
+ return discover(agent, json);
44
+ case 'list':
45
+ return await list(agent, mgr, json);
46
+ case 'add':
47
+ return await add(agent, mgr, args, json);
48
+ case 'remove':
49
+ return await remove(mgr, args, json);
50
+ case 'set':
51
+ return await set(mgr, args, json);
52
+ case 'handle':
53
+ return await handle(agent, mgr, args);
54
+ default: {
55
+ const msg = `Unknown hooks subcommand: ${sub}`;
56
+ if (json)
57
+ printJsonError('VALIDATION_ERROR', msg);
58
+ else
59
+ printError(msg);
60
+ return ExitCode.USAGE_ERROR;
61
+ }
62
+ }
63
+ }
64
+ function discover(agent, json) {
65
+ const entries = getHookCatalog(agent);
66
+ if (json) {
67
+ printJsonOk({ agent, hookTypes: entries });
68
+ return ExitCode.SUCCESS;
69
+ }
70
+ if (entries.length === 0) {
71
+ process.stdout.write(`(no hook catalog entry for ${agent})\n`);
72
+ return ExitCode.SUCCESS;
73
+ }
74
+ printTable(['Hook', 'Direction', 'Description'], entries.map((e) => [e.name, e.direction, e.description]));
75
+ return ExitCode.SUCCESS;
76
+ }
77
+ async function list(agent, mgr, json) {
78
+ const all = await mgr.list();
79
+ const matching = all.filter((h) => h.agent === agent || h.agent === '*');
80
+ if (json) {
81
+ printJsonOk({ hooks: matching });
82
+ return ExitCode.SUCCESS;
83
+ }
84
+ if (matching.length === 0) {
85
+ process.stdout.write('(no hooks registered)\n');
86
+ return ExitCode.SUCCESS;
87
+ }
88
+ printTable(['ID', 'HookType', 'Handler', 'Target', 'Priority', 'Enabled'], matching.map((h) => [
89
+ h.id,
90
+ h.hookType,
91
+ h.handler,
92
+ h.target,
93
+ String(h.priority ?? 100),
94
+ String(h.enabled !== false),
95
+ ]));
96
+ return ExitCode.SUCCESS;
97
+ }
98
+ async function add(agent, mgr, args, json) {
99
+ const hookType = args.positionals[1];
100
+ if (!hookType) {
101
+ const msg = 'Usage: amux hooks <agent> add <hookType> [--handler ...] [--target ...]';
102
+ if (json)
103
+ printJsonError('VALIDATION_ERROR', msg);
104
+ else
105
+ printError(msg);
106
+ return ExitCode.USAGE_ERROR;
107
+ }
108
+ const id = flagStr(args.flags, 'id') ?? `${agent}.${hookType}.${Date.now().toString(36)}`;
109
+ const handler = (flagStr(args.flags, 'handler') ?? 'builtin');
110
+ const target = flagStr(args.flags, 'target') ?? 'log';
111
+ const priority = flagStr(args.flags, 'priority');
112
+ const scope = flagBool(args.flags, 'global') === true ? 'global' : 'project';
113
+ const reg = {
114
+ id,
115
+ agent: agent,
116
+ hookType,
117
+ handler,
118
+ target,
119
+ priority: priority ? Number(priority) : undefined,
120
+ enabled: true,
121
+ };
122
+ await mgr.add(reg, scope);
123
+ if (json)
124
+ printJsonOk({ added: reg, scope });
125
+ else
126
+ process.stdout.write(`Added hook ${id} (${scope}).\n`);
127
+ return ExitCode.SUCCESS;
128
+ }
129
+ async function remove(mgr, args, json) {
130
+ const id = args.positionals[1];
131
+ if (!id) {
132
+ const msg = 'Usage: amux hooks <agent> remove <id>';
133
+ if (json)
134
+ printJsonError('VALIDATION_ERROR', msg);
135
+ else
136
+ printError(msg);
137
+ return ExitCode.USAGE_ERROR;
138
+ }
139
+ const scope = flagBool(args.flags, 'global') === true ? 'global'
140
+ : flagBool(args.flags, 'project') === true ? 'project' : undefined;
141
+ const removed = await mgr.remove(id, scope);
142
+ if (json)
143
+ printJsonOk({ removed, id });
144
+ else
145
+ process.stdout.write(removed ? `Removed ${id}.\n` : `No hook with id ${id}.\n`);
146
+ return removed ? ExitCode.SUCCESS : ExitCode.GENERAL_ERROR;
147
+ }
148
+ async function set(mgr, args, json) {
149
+ const id = args.positionals[1];
150
+ if (!id) {
151
+ const msg = 'Usage: amux hooks <agent> set <id> [--priority N] [--enabled true|false] [--target ...]';
152
+ if (json)
153
+ printJsonError('VALIDATION_ERROR', msg);
154
+ else
155
+ printError(msg);
156
+ return ExitCode.USAGE_ERROR;
157
+ }
158
+ const patch = {};
159
+ const priority = flagStr(args.flags, 'priority');
160
+ const enabled = flagStr(args.flags, 'enabled');
161
+ const target = flagStr(args.flags, 'target');
162
+ if (priority !== undefined)
163
+ patch['priority'] = Number(priority);
164
+ if (enabled !== undefined)
165
+ patch['enabled'] = enabled === 'true';
166
+ if (target !== undefined)
167
+ patch['target'] = target;
168
+ const updated = await mgr.set(id, patch);
169
+ if (!updated) {
170
+ if (json)
171
+ printJsonError('VALIDATION_ERROR', `No hook with id ${id}`);
172
+ else
173
+ printError(`No hook with id ${id}`);
174
+ return ExitCode.GENERAL_ERROR;
175
+ }
176
+ if (json)
177
+ printJsonOk({ updated });
178
+ else
179
+ process.stdout.write(`Updated ${id}.\n`);
180
+ return ExitCode.SUCCESS;
181
+ }
182
+ async function handle(agent, mgr, args) {
183
+ const hookType = args.positionals[1];
184
+ if (!hookType) {
185
+ process.stderr.write('Usage: amux hooks <agent> handle <hookType>\n');
186
+ return ExitCode.USAGE_ERROR;
187
+ }
188
+ const raw = await readStdin();
189
+ let parsed = {};
190
+ if (raw.trim()) {
191
+ try {
192
+ parsed = JSON.parse(raw);
193
+ }
194
+ catch {
195
+ parsed = { body: raw };
196
+ }
197
+ }
198
+ const payload = parseHookPayload(agent, hookType, parsed);
199
+ const dispatcher = new HookDispatcher(mgr, builtInHooks);
200
+ const result = await dispatcher.dispatch(payload);
201
+ const { stdout, exitCode } = formatHookResult(agent, hookType, result);
202
+ if (stdout)
203
+ process.stdout.write(stdout);
204
+ return exitCode;
205
+ }
206
+ function readStdin() {
207
+ return new Promise((resolve) => {
208
+ if (process.stdin.isTTY) {
209
+ resolve('');
210
+ return;
211
+ }
212
+ let buf = '';
213
+ process.stdin.setEncoding('utf8');
214
+ process.stdin.on('data', (d) => (buf += d));
215
+ process.stdin.on('end', () => resolve(buf));
216
+ process.stdin.on('error', () => resolve(buf));
217
+ });
218
+ }
219
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Internal helpers for the install/update/detect/uninstall commands.
3
+ * Split out to keep `install.ts` under the max-file-lines budget.
4
+ */
5
+ export type SpawnRunner = (command: string, args: string[]) => Promise<{
6
+ code: number;
7
+ stdout: string;
8
+ stderr: string;
9
+ }>;
10
+ /**
11
+ * Create a SpawnRunner. When `echo` is true, child output is mirrored to
12
+ * the CLI's stdout/stderr (useful for long-running install commands in
13
+ * human mode). When false (default for JSON/detect), child output is
14
+ * captured silently so it doesn't contaminate structured output.
15
+ */
16
+ export declare function makeSpawnRunner(echo: boolean): SpawnRunner;
17
+ export declare const defaultSpawnRunner: SpawnRunner;
18
+ export declare const silentSpawnRunner: SpawnRunner;
19
+ /**
20
+ * Temporarily swallow writes to process.stdout/stderr while `fn` runs.
21
+ * Used to suppress per-agent JSON envelopes when `--all --json` aggregates
22
+ * results into a single response.
23
+ */
24
+ export declare function runSilently<T>(fn: () => Promise<T>): Promise<T>;
25
+ //# sourceMappingURL=install-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/install-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,WAAW,GAAG,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,KACX,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAuB1D;AAED,eAAO,MAAM,kBAAkB,EAAE,WAAmC,CAAC;AACrE,eAAO,MAAM,iBAAiB,EAAE,WAAoC,CAAC;AAErE;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAYrE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Internal helpers for the install/update/detect/uninstall commands.
3
+ * Split out to keep `install.ts` under the max-file-lines budget.
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ /**
7
+ * Create a SpawnRunner. When `echo` is true, child output is mirrored to
8
+ * the CLI's stdout/stderr (useful for long-running install commands in
9
+ * human mode). When false (default for JSON/detect), child output is
10
+ * captured silently so it doesn't contaminate structured output.
11
+ */
12
+ export function makeSpawnRunner(echo) {
13
+ return (command, args) => new Promise((resolve, reject) => {
14
+ const child = spawn(command, args, {
15
+ stdio: ['ignore', 'pipe', 'pipe'],
16
+ shell: false,
17
+ windowsHide: true,
18
+ });
19
+ let stdout = '';
20
+ let stderr = '';
21
+ child.stdout?.setEncoding('utf8');
22
+ child.stderr?.setEncoding('utf8');
23
+ child.stdout?.on('data', (c) => {
24
+ stdout += c;
25
+ if (echo)
26
+ process.stdout.write(c);
27
+ });
28
+ child.stderr?.on('data', (c) => {
29
+ stderr += c;
30
+ if (echo)
31
+ process.stderr.write(c);
32
+ });
33
+ child.on('error', (err) => reject(err));
34
+ child.on('exit', (code) => resolve({ code: code ?? 1, stdout, stderr }));
35
+ });
36
+ }
37
+ export const defaultSpawnRunner = makeSpawnRunner(true);
38
+ export const silentSpawnRunner = makeSpawnRunner(false);
39
+ /**
40
+ * Temporarily swallow writes to process.stdout/stderr while `fn` runs.
41
+ * Used to suppress per-agent JSON envelopes when `--all --json` aggregates
42
+ * results into a single response.
43
+ */
44
+ export async function runSilently(fn) {
45
+ const origOut = process.stdout.write.bind(process.stdout);
46
+ const origErr = process.stderr.write.bind(process.stderr);
47
+ const noop = ((..._a) => true);
48
+ process.stdout.write = noop;
49
+ process.stderr.write = noop;
50
+ try {
51
+ return await fn();
52
+ }
53
+ finally {
54
+ process.stdout.write = origOut;
55
+ process.stderr.write = origErr;
56
+ }
57
+ }
58
+ //# sourceMappingURL=install-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-helpers.js","sourceRoot":"","sources":["../../src/commands/install-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAO3C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CACvB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,IAAI;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,IAAI;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAgB,eAAe,CAAC,IAAI,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAgB,eAAe,CAAC,KAAK,CAAC,CAAC;AAErE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAI,EAAoB;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,EAAa,EAAE,EAAE,CAAC,IAAI,CAAmB,CAAC;IAC3D,OAAO,CAAC,MAA+C,CAAC,KAAK,GAAG,IAAI,CAAC;IACrE,OAAO,CAAC,MAA+C,CAAC,KAAK,GAAG,IAAI,CAAC;IACtE,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACR,OAAO,CAAC,MAA+C,CAAC,KAAK,GAAG,OAAO,CAAC;QACxE,OAAO,CAAC,MAA+C,CAAC,KAAK,GAAG,OAAO,CAAC;IAC3E,CAAC;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `amux install <agent>`, `amux update <agent>`, `amux detect <agent>`,
3
+ * and `amux uninstall <agent>` commands.
4
+ *
5
+ * Dispatches to the adapter's per-agent install/update/detect methods,
6
+ * so each harness may override behavior.
7
+ *
8
+ * @see docs/10-cli-reference.md
9
+ */
10
+ import type { AgentMuxClient } from '@a5c-ai/agent-mux-core';
11
+ import type { ParsedArgs, FlagDef } from '../parse-args.js';
12
+ import { type SpawnRunner as HelperSpawnRunner } from './install-helpers.js';
13
+ /** Flags recognized by the install/uninstall/update/detect commands. */
14
+ export declare const INSTALL_FLAGS: Record<string, FlagDef>;
15
+ export type SpawnRunner = HelperSpawnRunner;
16
+ export interface InstallCommandDeps {
17
+ /** Back-compat: overrides the adapter's internal Spawner for this run. */
18
+ spawnRunner?: SpawnRunner;
19
+ }
20
+ /**
21
+ * Handle `amux install [<agent>] [--all]`, `amux update [<agent>] [--all]`,
22
+ * `amux detect [<agent>] [--all]`, and `amux uninstall <agent>`.
23
+ */
24
+ export declare function installCommand(client: AgentMuxClient, args: ParsedArgs, deps?: InstallCommandDeps): Promise<number>;
25
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAO5D,OAAO,EAEL,KAAK,WAAW,IAAI,iBAAiB,EACtC,MAAM,sBAAsB,CAAC;AAE9B,wEAAwE;AACxE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAKjD,CAAC;AAOF,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAM5C,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CA+CjB"}