@agent-beam/beam 0.2.4 → 0.2.6
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/dist/banner.js +7 -2
- package/dist/banner.js.map +1 -1
- package/dist/cli.js +71 -15
- package/dist/cli.js.map +1 -1
- package/dist/color.d.ts +6 -0
- package/dist/color.js +18 -0
- package/dist/color.js.map +1 -0
- package/dist/install.js +29 -5
- package/dist/install.js.map +1 -1
- package/dist/prompts.d.ts +2 -0
- package/dist/prompts.js +102 -14
- package/dist/prompts.js.map +1 -1
- package/dist/run.d.ts +1 -0
- package/dist/run.js +48 -0
- package/dist/run.js.map +1 -0
- package/dist/sandbox.d.ts +13 -0
- package/dist/sandbox.js +116 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/setup.d.ts +2 -1
- package/dist/setup.js +102 -56
- package/dist/setup.js.map +1 -1
- package/dist/shims.d.ts +13 -0
- package/dist/shims.js +85 -0
- package/dist/shims.js.map +1 -0
- package/package.json +3 -2
package/dist/banner.js
CHANGED
|
@@ -2,9 +2,14 @@ const BANNER = String.raw ` __ ___ ____ __ _ ____ ____ ____ __ _ _
|
|
|
2
2
|
/ _\ / __)( __)( ( \(_ _)( _ \( __) / _\ ( \/ )
|
|
3
3
|
/ \( (_ \ ) _) / / )( ) _ ( ) _) / \/ \/ \
|
|
4
4
|
\_/\_/ \___/(____)\_)__) (__) (____/(____)\_/\_/\_)(_/`;
|
|
5
|
+
import { indigo } from "./color.js";
|
|
5
6
|
// Printed to stderr (never stdout) so it never corrupts JSON/plain output that other tools or
|
|
6
|
-
// scripts pipe from commands like 'beam scan' or 'beam agent extract'.
|
|
7
|
+
// scripts pipe from commands like 'beam scan' or 'beam agent extract'. Scripts that shell out to
|
|
8
|
+
// several 'beam' subcommands in a row (e.g. scripts/setup-global.sh) set BEAM_NO_BANNER=1 so the
|
|
9
|
+
// art prints once instead of once per invocation.
|
|
7
10
|
export function printBanner() {
|
|
8
|
-
|
|
11
|
+
if (process.env.BEAM_NO_BANNER)
|
|
12
|
+
return;
|
|
13
|
+
console.error(indigo(BANNER));
|
|
9
14
|
}
|
|
10
15
|
//# sourceMappingURL=banner.js.map
|
package/dist/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;;;uDAG8B,CAAC;AAExD,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;;;uDAG8B,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,kDAAkD;AAClD,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO;IACvC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
3
4
|
import { Command } from "commander";
|
|
4
5
|
import { startServer } from "./serve.js";
|
|
5
6
|
import { captureHook, extractPreview, extractSave, importEvents, readToken, reloadRemoteRules, scanFile } from "./client.js";
|
|
@@ -20,7 +21,36 @@ import { loadCustomRules } from "./custom-rules.js";
|
|
|
20
21
|
import { sequenceRuleCatalog } from "./sequences.js";
|
|
21
22
|
import { printBanner } from "./banner.js";
|
|
22
23
|
import { runWithSudoFallback } from "./elevate.js";
|
|
23
|
-
|
|
24
|
+
import { renderColumns, withSpinner } from "./prompts.js";
|
|
25
|
+
import { cyan, green } from "./color.js";
|
|
26
|
+
import { runAgent } from "./run.js";
|
|
27
|
+
import { AGENT_BINARIES, installShims, listShims, pathExportLine, shimDir, uninstallShims } from "./shims.js";
|
|
28
|
+
// Lets 'BEAM_API_URL=... beam connect' style overrides live in a .env file instead of the
|
|
29
|
+
// shell profile. Checked in cwd first (handy when developing from the repo), then in
|
|
30
|
+
// ~/.beam so overrides still apply when 'beam' is run globally from any directory.
|
|
31
|
+
for (const envPath of [path.join(process.cwd(), ".env"), path.join(getBeamHome(), ".env")]) {
|
|
32
|
+
try {
|
|
33
|
+
process.loadEnvFile(envPath);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// no .env file at this location -- fine, env vars set another way still apply
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// The banner is a nice hello for a bare 'beam', 'beam --help', or 'beam setup', but printing the
|
|
40
|
+
// full ASCII art before every single subcommand (agent list, service status, ...) is just noise
|
|
41
|
+
// -- especially once several 'beam' calls run back-to-back from a script.
|
|
42
|
+
const argv = process.argv.slice(2);
|
|
43
|
+
const wantsBanner = argv.length === 0 || argv[0] === "help" || argv[0] === "setup" || argv.includes("--help") || argv.includes("-h");
|
|
44
|
+
if (wantsBanner)
|
|
45
|
+
printBanner();
|
|
46
|
+
// Handled before Commander ever sees argv: the wrapped agent (claude, codex, etc.) has its own
|
|
47
|
+
// flags (e.g. `--dangerously-skip-permissions`), which Commander's own option parser would try
|
|
48
|
+
// to interpret as beam's own options if `run` were a normal Commander subcommand. Everything
|
|
49
|
+
// after `run` is passed through untouched.
|
|
50
|
+
if (process.argv[2] === "run") {
|
|
51
|
+
const [command, ...rest] = process.argv.slice(3);
|
|
52
|
+
await runAgent(command, rest);
|
|
53
|
+
}
|
|
24
54
|
const packageJson = JSON.parse(fs.readFileSync(new URL("../package.json", import.meta.url), "utf8"));
|
|
25
55
|
const program = new Command()
|
|
26
56
|
.name("beam")
|
|
@@ -102,11 +132,11 @@ program.command("enroll")
|
|
|
102
132
|
if (existing)
|
|
103
133
|
console.error(`Replacing the existing enrollment (device ${existing.deviceId}).`);
|
|
104
134
|
const identity = await enrollDevice(options);
|
|
105
|
-
console.log(
|
|
135
|
+
console.log(`${green("✔")} Enrolled device ${identity.deviceId}\n` +
|
|
106
136
|
` org: ${identity.orgId}\n` +
|
|
107
137
|
` api: ${identity.apiBase}\n` +
|
|
108
138
|
` identity: ${getIdentityPath()} (0600)\n\n` +
|
|
109
|
-
`Next: beam agent install-all && beam start`);
|
|
139
|
+
cyan(`Next: beam agent install-all && beam start`));
|
|
110
140
|
});
|
|
111
141
|
program.command("whoami")
|
|
112
142
|
.description("Show this device's enrollment, if any")
|
|
@@ -226,6 +256,29 @@ program.command("sync")
|
|
|
226
256
|
throw new Error("Could not reach the Beam workspace. Check the network or 'beam whoami'.");
|
|
227
257
|
console.log(result.status === "updated" ? `✔ Policy v${result.version} synced → ${result.path}` : "✔ Policy already up to date.");
|
|
228
258
|
});
|
|
259
|
+
const shims = program.command("shims").description("Make agent CLIs (claude, codex, ...) sandboxed automatically, without typing 'beam run'");
|
|
260
|
+
shims.command("install")
|
|
261
|
+
.description("Install PATH shims for the given agents (default: all known agents found on this machine)")
|
|
262
|
+
.argument("[agents...]", `Agent ids: ${Object.keys(AGENT_BINARIES).join(", ")}`)
|
|
263
|
+
.action((agents) => {
|
|
264
|
+
const results = installShims(agents.length ? agents : undefined);
|
|
265
|
+
for (const r of results) {
|
|
266
|
+
console.log(r.status === "installed" ? `✔ ${r.binary} (${r.agentId}) — shimmed` : `— ${r.binary} (${r.agentId}) — not found on PATH, skipped`);
|
|
267
|
+
}
|
|
268
|
+
if (results.some(r => r.status === "installed")) {
|
|
269
|
+
console.log(`\nAdd this to your shell rc (~/.zshrc), then restart your shell:\n ${pathExportLine()}`);
|
|
270
|
+
console.log(`\nOnce that's in your PATH, typing e.g. 'claude' or 'codex' runs it through beam's sandbox automatically.`);
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
shims.command("list")
|
|
274
|
+
.description("Show which shims are currently installed")
|
|
275
|
+
.action(() => {
|
|
276
|
+
const installed = listShims();
|
|
277
|
+
console.log(installed.length ? installed.join("\n") : `No shims installed. Run 'beam shims install' first.\nShim directory: ${shimDir()}`);
|
|
278
|
+
});
|
|
279
|
+
shims.command("uninstall")
|
|
280
|
+
.description("Remove all installed shims")
|
|
281
|
+
.action(() => { uninstallShims(); console.log("✔ Removed all shims. (Remove the PATH line from your shell rc manually if you added it.)"); });
|
|
229
282
|
program.command("token")
|
|
230
283
|
.description("Print the Beam collector pairing token")
|
|
231
284
|
.action(async () => console.log(await readToken()));
|
|
@@ -236,21 +289,20 @@ program.command("connect")
|
|
|
236
289
|
if (existing)
|
|
237
290
|
console.error(`Replacing the existing enrollment (device ${existing.deviceId}).`);
|
|
238
291
|
const session = await startConnect();
|
|
239
|
-
console.log(`Connect Beam CLI to Agentbeam:\n${session.url}`);
|
|
292
|
+
console.log(`Connect Beam CLI to Agentbeam:\n${cyan(session.url)}\n`);
|
|
240
293
|
openBrowser(session.url);
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
console.log(`✔ Connected device ${identity.deviceId}\n` +
|
|
294
|
+
const identity = await withSpinner("Waiting for you to finish in the browser", () => session.poll());
|
|
295
|
+
console.log(`${green("✔")} Connected device ${identity.deviceId}\n` +
|
|
244
296
|
` org: ${identity.orgId}\n` +
|
|
245
297
|
` api: ${identity.apiBase}\n` +
|
|
246
298
|
` identity: ${getIdentityPath()} (0600)`);
|
|
247
|
-
const enterprise = await installEnterprisePackage(identity);
|
|
299
|
+
const enterprise = await withSpinner("Checking for beam-enterprise", () => installEnterprisePackage(identity));
|
|
248
300
|
if (enterprise.status === "installed")
|
|
249
|
-
console.log("✔ beam-enterprise installed (OS-level monitoring enabled)
|
|
301
|
+
console.log(`${green("✔")} beam-enterprise installed (OS-level monitoring enabled).`);
|
|
250
302
|
else if (enterprise.status === "error")
|
|
251
303
|
console.error(`✖ Could not install beam-enterprise: ${enterprise.message}`);
|
|
252
304
|
// "not-entitled": org isn't on the enterprise plan -- nothing to print, this is the normal case.
|
|
253
|
-
console.log("\nNext: beam agent install-all && beam start");
|
|
305
|
+
console.log(cyan("\nNext: beam agent install-all && beam start"));
|
|
254
306
|
});
|
|
255
307
|
program.command("import")
|
|
256
308
|
.description("Send a normalized events file (JSON/NDJSON) to the collector")
|
|
@@ -271,11 +323,13 @@ agent.command("list")
|
|
|
271
323
|
.alias("ls")
|
|
272
324
|
.description("List supported agents and their hook payload verification status")
|
|
273
325
|
.action(() => {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
326
|
+
const rows = AGENTS.map(a => [
|
|
327
|
+
a.id,
|
|
328
|
+
a.name,
|
|
329
|
+
a.hookConfigPath ? "installable" : "config wiring not built yet",
|
|
330
|
+
a.verifiedPayload ? "payload verified" : "payload best-effort",
|
|
331
|
+
]);
|
|
332
|
+
console.log(renderColumns(["id", "name", "status", "payload"], rows));
|
|
279
333
|
});
|
|
280
334
|
agent.command("install")
|
|
281
335
|
.description("Wire beam's hook into an agent's own hook config file, without disturbing existing hooks")
|
|
@@ -320,6 +374,8 @@ agent.command("install-all")
|
|
|
320
374
|
const acted = results.filter(r => r.status === "installed" || r.status === "already-installed");
|
|
321
375
|
if (!acted.length)
|
|
322
376
|
console.log("No supported agents detected on this machine. Run 'beam agent list' to see what's supported.");
|
|
377
|
+
if (acted.length && !(await readIdentity()))
|
|
378
|
+
console.log(cyan("\nTip: run 'beam connect' to link this device to your dashboard and see this activity."));
|
|
323
379
|
});
|
|
324
380
|
const rule = program.command("rule").description("Inspect the active detection rule catalog");
|
|
325
381
|
rule.command("list")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/color.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const indigo: (text: string) => string;
|
|
2
|
+
export declare const indigoOut: (text: string) => string;
|
|
3
|
+
export declare const green: (text: string) => string;
|
|
4
|
+
export declare const red: (text: string) => string;
|
|
5
|
+
export declare const dim: (text: string) => string;
|
|
6
|
+
export declare const cyan: (text: string) => string;
|
package/dist/color.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Minimal ANSI color helpers -- no dependency pulled in just for this. Each helper is bound to
|
|
2
|
+
// the stream it's meant to wrap (banner/errors go to stderr, everything else to stdout) so color
|
|
3
|
+
// is only ever applied when *that* stream is a TTY, and never when NO_COLOR is set or output is
|
|
4
|
+
// piped/redirected (scripts, `| cat`, CI logs).
|
|
5
|
+
function wrap(code, stream) {
|
|
6
|
+
return (text) => (!process.env.NO_COLOR && stream.isTTY ? `\x1b[${code}m${text}\x1b[0m` : text);
|
|
7
|
+
}
|
|
8
|
+
export const indigo = wrap("38;5;99", process.stderr);
|
|
9
|
+
// Same indigo, but bound to stdout's own TTY-ness -- for structured stdout output (step
|
|
10
|
+
// headers, summary tables) that shouldn't inherit stderr's color decision.
|
|
11
|
+
export const indigoOut = wrap("38;5;99", process.stdout);
|
|
12
|
+
export const green = wrap("32", process.stdout);
|
|
13
|
+
export const red = wrap("31", process.stdout);
|
|
14
|
+
export const dim = wrap("2", process.stdout);
|
|
15
|
+
// A lighter blue than indigo, for tips/suggestions ("run 'beam connect'") that should stand out
|
|
16
|
+
// from plain text without competing with the green/red step results around them.
|
|
17
|
+
export const cyan = wrap("38;5;74", process.stdout);
|
|
18
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,iGAAiG;AACjG,gGAAgG;AAChG,gDAAgD;AAChD,SAAS,IAAI,CAAC,IAAY,EAAE,MAA0B;IACpD,OAAO,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACtD,wFAAwF;AACxF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAE7C,gGAAgG;AAChG,iFAAiF;AACjF,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/install.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { AGENTS, findAgent, hookConfigFullPath } from "./agents.js";
|
|
5
6
|
const OPEN_CODE_PLUGIN = `import { spawnSync } from "node:child_process";
|
|
6
7
|
|
|
@@ -14,6 +15,25 @@ export const BeamPlugin = async () => ({
|
|
|
14
15
|
},
|
|
15
16
|
});
|
|
16
17
|
`;
|
|
18
|
+
// A bare "beam" command relies on beam's global bin symlink being resolvable on PATH -- but the
|
|
19
|
+
// shell that runs an agent's hooks (e.g. Claude Code's own PreToolUse child process) doesn't
|
|
20
|
+
// always source the same profile a user's interactive shell does, so "beam" can 404 silently
|
|
21
|
+
// there even though it works fine when the user types it themselves. Embedding the absolute path
|
|
22
|
+
// to this running install (both the node binary and dist/cli.js, resolved via import.meta.url
|
|
23
|
+
// rather than argv[1] so it's correct however beam itself was invoked) sidesteps PATH entirely.
|
|
24
|
+
function resolveHookCommand(agentId) {
|
|
25
|
+
const cliPath = fileURLToPath(new URL("./cli.js", import.meta.url));
|
|
26
|
+
return `${quoteForShell(process.execPath)} ${quoteForShell(cliPath)} hook ${agentId}`;
|
|
27
|
+
}
|
|
28
|
+
function quoteForShell(value) {
|
|
29
|
+
return `"${value.replace(/(["\\$`])/g, "\\$1")}"`;
|
|
30
|
+
}
|
|
31
|
+
// Pre-fix installs wrote a bare "beam hook <agent>" command that depends on PATH; recognizing it
|
|
32
|
+
// here lets installHook migrate an existing entry to the absolute-path form instead of leaving a
|
|
33
|
+
// dead duplicate behind, and lets uninstallHook still find and remove it.
|
|
34
|
+
function legacyHookCommand(agentId) {
|
|
35
|
+
return `beam hook ${agentId}`;
|
|
36
|
+
}
|
|
17
37
|
export async function installHook(agentId, home = homedir()) {
|
|
18
38
|
const agent = findAgent(agentId);
|
|
19
39
|
if (!agent)
|
|
@@ -27,10 +47,10 @@ export async function installHook(agentId, home = homedir()) {
|
|
|
27
47
|
}
|
|
28
48
|
return { agent: agent.id, path, alreadyInstalled: Boolean(existing) };
|
|
29
49
|
}
|
|
30
|
-
if (!agent.hookConfigPath || !agent.mergeHookConfig)
|
|
50
|
+
if (!agent.hookConfigPath || !agent.mergeHookConfig || !agent.unmergeHookConfig)
|
|
31
51
|
throw new Error(`${agent.name} has no supported hook install path yet; see 'beam agent list' for its status.`);
|
|
32
52
|
const path = hookConfigFullPath(agent, home);
|
|
33
|
-
const command =
|
|
53
|
+
const command = resolveHookCommand(agent.id);
|
|
34
54
|
let existing = {};
|
|
35
55
|
let raw = "";
|
|
36
56
|
try {
|
|
@@ -44,7 +64,9 @@ export async function installHook(agentId, home = homedir()) {
|
|
|
44
64
|
throw e;
|
|
45
65
|
}
|
|
46
66
|
}
|
|
47
|
-
|
|
67
|
+
// Strip any pre-fix legacy entry first so re-installing migrates it rather than duplicating.
|
|
68
|
+
const base = agent.unmergeHookConfig(existing, legacyHookCommand(agent.id));
|
|
69
|
+
const merged = agent.mergeHookConfig(base, command);
|
|
48
70
|
const alreadyInstalled = JSON.stringify(merged) === JSON.stringify(existing) && raw.trim() !== "";
|
|
49
71
|
if (!alreadyInstalled) {
|
|
50
72
|
await mkdir(dirname(path), { recursive: true });
|
|
@@ -73,7 +95,6 @@ export async function uninstallHook(agentId, home = homedir()) {
|
|
|
73
95
|
if (!agent.hookConfigPath || !agent.unmergeHookConfig)
|
|
74
96
|
throw new Error(`${agent.name} has no supported hook path yet; see 'beam agent list' for its status.`);
|
|
75
97
|
const path = hookConfigFullPath(agent, home);
|
|
76
|
-
const command = `beam hook ${agent.id}`;
|
|
77
98
|
let existing = {};
|
|
78
99
|
let raw = "";
|
|
79
100
|
try {
|
|
@@ -87,7 +108,10 @@ export async function uninstallHook(agentId, home = homedir()) {
|
|
|
87
108
|
throw new Error(`${path} contains invalid JSON; fix or remove it manually.`);
|
|
88
109
|
throw e;
|
|
89
110
|
}
|
|
90
|
-
|
|
111
|
+
// Remove both the current absolute-path command and any pre-fix legacy "beam hook <agent>"
|
|
112
|
+
// entry, so uninstall cleans up a machine regardless of which form was installed.
|
|
113
|
+
const withoutCurrent = agent.unmergeHookConfig(existing, resolveHookCommand(agent.id));
|
|
114
|
+
const updated = agent.unmergeHookConfig(withoutCurrent, legacyHookCommand(agent.id));
|
|
91
115
|
const removed = JSON.stringify(updated) !== JSON.stringify(existing);
|
|
92
116
|
if (removed)
|
|
93
117
|
await writeFile(path, `${JSON.stringify(updated, null, 2)}\n`);
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAkC,MAAM,aAAa,CAAC;AAGpG,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAWxB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,IAAI,GAAG,OAAO,EAAE;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,mDAAmD,CAAC,CAAC;IAC1G,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;QAC7H,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,gFAAgF,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAkC,MAAM,aAAa,CAAC;AAGpG,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAWxB,CAAC;AAEF,gGAAgG;AAChG,6FAA6F;AAC7F,6FAA6F;AAC7F,iGAAiG;AACjG,8FAA8F;AAC9F,gGAAgG;AAChG,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,iGAAiG;AACjG,iGAAiG;AACjG,0EAA0E;AAC1E,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,aAAa,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,IAAI,GAAG,OAAO,EAAE;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,mDAAmD,CAAC,CAAC;IAC1G,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;QAC7H,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,gFAAgF,CAAC,CAAC;IAEhM,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE7C,IAAI,QAAQ,GAAQ,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,CAAC;IAChG,OAAO,CAAC,EAAE,CAAC;QACT,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6DAA6D,CAAC,CAAC;YACpH,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,6FAA6F;IAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAElG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AACrD,CAAC;AAID,gGAAgG;AAChG,6FAA6F;AAC7F,8FAA8F;AAC9F,sBAAsB;AACtB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,IAAI,GAAG,OAAO,EAAE;IACnE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,mDAAmD,CAAC,CAAC;IAC1G,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAAC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAAC,CAAC;QACzK,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,wEAAwE,CAAC,CAAC;IAE9J,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE7C,IAAI,QAAQ,GAAQ,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,CAAC;IAChG,OAAO,CAAC,EAAE,CAAC;QACT,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACrG,IAAI,CAAC,YAAY,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oDAAoD,CAAC,CAAC;QAC3G,MAAM,CAAC,CAAC;IACV,CAAC;IAED,2FAA2F;IAC3F,kFAAkF;IAClF,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,OAAO;QAAE,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5E,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED,gGAAgG;AAChG,gGAAgG;AAChG,8FAA8F;AAC9F,2CAA2C;AAC3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAI,GAAG,OAAO,EAAE;IACtD,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAAE,SAAS;QAC7F,OAAO,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAsB,EAAE,IAAY;IAC5D,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2FAA2F;AAC3F,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAI,GAAG,OAAO,EAAE;IACjD,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAKD,gGAAgG;AAChG,6FAA6F;AAC7F,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAI,GAAG,OAAO,EAAE;IAC5D,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAChI,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7K,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9I,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ export interface CheckboxItem {
|
|
|
3
3
|
checked?: boolean;
|
|
4
4
|
}
|
|
5
5
|
export declare function checkbox(title: string, items: CheckboxItem[]): Promise<number[]>;
|
|
6
|
+
export declare function confirm(question: string, defaultYes?: boolean): Promise<boolean>;
|
|
6
7
|
export declare function withSpinner<T>(label: string, fn: () => Promise<T>): Promise<T>;
|
|
7
8
|
export interface TableRow {
|
|
8
9
|
label: string;
|
|
9
10
|
value: string;
|
|
10
11
|
}
|
|
11
12
|
export declare function renderTable(rows: TableRow[]): string;
|
|
13
|
+
export declare function renderColumns(headers: string[], rows: string[][]): string;
|
package/dist/prompts.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { emitKeypressEvents } from "node:readline";
|
|
2
|
+
import { cyan, dim, green, red } from "./color.js";
|
|
3
|
+
// Strips ANSI escape codes so column widths are computed from what actually prints, not the
|
|
4
|
+
// escape bytes -- lets renderTable/renderColumns take colored cell values without misaligning.
|
|
5
|
+
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
6
|
+
function visibleLength(s) {
|
|
7
|
+
return s.replace(ANSI_RE, "").length;
|
|
8
|
+
}
|
|
9
|
+
function padVisible(s, width) {
|
|
10
|
+
return s + " ".repeat(Math.max(0, width - visibleLength(s)));
|
|
11
|
+
}
|
|
2
12
|
// Arrow-key checkbox list, ending in a "Submit" row — ↑/↓ to move, space/enter to toggle the
|
|
3
13
|
// highlighted box, enter on Submit to finish. Falls back to "everything pre-checked" when stdin
|
|
4
14
|
// or stdout isn't a TTY (piped/non-interactive shells), since there's no way to drive arrow keys.
|
|
@@ -14,12 +24,18 @@ export async function checkbox(title, items) {
|
|
|
14
24
|
function render(first) {
|
|
15
25
|
if (!first)
|
|
16
26
|
process.stdout.write(`\x1b[${rows + 1}A\x1b[0J`);
|
|
17
|
-
const lines = items.map((item, i) =>
|
|
18
|
-
|
|
27
|
+
const lines = items.map((item, i) => {
|
|
28
|
+
const onCursor = cursor === i;
|
|
29
|
+
const box = state[i] ? green("●") : dim("○");
|
|
30
|
+
const label = onCursor ? cyan(item.label) : item.label;
|
|
31
|
+
return ` ${onCursor ? cyan("❯") : " "} ${box} ${label}`;
|
|
32
|
+
});
|
|
33
|
+
const onSubmit = cursor === items.length;
|
|
34
|
+
lines.push(` ${onSubmit ? cyan("❯") : " "} ${onSubmit ? cyan("Submit") : dim("Submit")}`);
|
|
19
35
|
process.stdout.write(`${lines.join("\n")}\n\n`);
|
|
20
36
|
}
|
|
21
37
|
console.log(title);
|
|
22
|
-
console.log("
|
|
38
|
+
console.log(dim(" ↑/↓ move · space toggle · enter on Submit to finish\n"));
|
|
23
39
|
render(true);
|
|
24
40
|
return new Promise((resolve) => {
|
|
25
41
|
emitKeypressEvents(process.stdin);
|
|
@@ -64,6 +80,62 @@ export async function checkbox(title, items) {
|
|
|
64
80
|
process.stdin.on("keypress", onKeypress);
|
|
65
81
|
});
|
|
66
82
|
}
|
|
83
|
+
// Arrow-key Yes/No choice, replacing the old type-"y"-or-"n" text prompt: a vertical two-row list
|
|
84
|
+
// (matching checkbox()'s layout) that ↑/↓/tab moves through, enter confirms, and y/n still work
|
|
85
|
+
// directly as shortcuts. Falls back to the classic "[Y/n]" text prompt when stdin/stdout isn't a
|
|
86
|
+
// TTY, same as checkbox().
|
|
87
|
+
export async function confirm(question, defaultYes = true) {
|
|
88
|
+
const prompt = question.trim();
|
|
89
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
90
|
+
console.log(`${prompt} ${defaultYes ? "[Y/n]" : "[y/N]"} (non-interactive shell, defaulting to ${defaultYes ? "yes" : "no"})`);
|
|
91
|
+
return defaultYes;
|
|
92
|
+
}
|
|
93
|
+
let choice = defaultYes;
|
|
94
|
+
const rows = 2;
|
|
95
|
+
function render(first) {
|
|
96
|
+
if (!first)
|
|
97
|
+
process.stdout.write(`\x1b[${rows}A\x1b[0J`);
|
|
98
|
+
const yes = choice ? `${cyan("❯")} ${cyan("Yes")}` : ` ${dim("Yes")}`;
|
|
99
|
+
const no = !choice ? `${cyan("❯")} ${cyan("No")}` : ` ${dim("No")}`;
|
|
100
|
+
process.stdout.write(` ${yes}\n ${no}\n`);
|
|
101
|
+
}
|
|
102
|
+
console.log(prompt);
|
|
103
|
+
console.log(dim(" ↑/↓ choose · enter to confirm"));
|
|
104
|
+
render(true);
|
|
105
|
+
return new Promise((resolve) => {
|
|
106
|
+
emitKeypressEvents(process.stdin);
|
|
107
|
+
const wasRaw = process.stdin.isRaw;
|
|
108
|
+
process.stdin.setRawMode(true);
|
|
109
|
+
process.stdin.resume();
|
|
110
|
+
function cleanup() {
|
|
111
|
+
process.stdin.setRawMode(!!wasRaw);
|
|
112
|
+
process.stdin.pause();
|
|
113
|
+
process.stdin.removeListener("keypress", onKeypress);
|
|
114
|
+
}
|
|
115
|
+
function finish(value) {
|
|
116
|
+
process.stdout.write(`\x1b[${rows}A\x1b[0J ${value ? green("✔ Yes") : red("✖ No")}\n`);
|
|
117
|
+
cleanup();
|
|
118
|
+
resolve(value);
|
|
119
|
+
}
|
|
120
|
+
function onKeypress(_str, key) {
|
|
121
|
+
if (key.ctrl && key.name === "c") {
|
|
122
|
+
cleanup();
|
|
123
|
+
process.exit(130);
|
|
124
|
+
}
|
|
125
|
+
else if (key.name === "up" || key.name === "down" || key.name === "tab" || key.name === "left" || key.name === "right") {
|
|
126
|
+
choice = !choice;
|
|
127
|
+
render(false);
|
|
128
|
+
}
|
|
129
|
+
else if (key.name === "y")
|
|
130
|
+
finish(true);
|
|
131
|
+
else if (key.name === "n")
|
|
132
|
+
finish(false);
|
|
133
|
+
else if (key.name === "return")
|
|
134
|
+
finish(choice);
|
|
135
|
+
}
|
|
136
|
+
process.stdin.on("keypress", onKeypress);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
67
139
|
// Beam's own spinner: a watchful eye that opens and closes — the owl keeping
|
|
68
140
|
// an eye on your agents. Doubled ends hold the shut/wide-open frames a beat
|
|
69
141
|
// longer, so it reads as a blink-and-pulse rather than a flat cycle.
|
|
@@ -84,33 +156,49 @@ export async function withSpinner(label, fn) {
|
|
|
84
156
|
}
|
|
85
157
|
}
|
|
86
158
|
let frame = 0;
|
|
87
|
-
process.stdout.write(
|
|
159
|
+
process.stdout.write(`\x1b[?25l${cyan(FRAMES[0])} ${label}`);
|
|
88
160
|
const timer = setInterval(() => {
|
|
89
161
|
frame = (frame + 1) % FRAMES.length;
|
|
90
|
-
process.stdout.write(`\r${FRAMES[frame]} ${label}`);
|
|
162
|
+
process.stdout.write(`\r\x1b[K${cyan(FRAMES[frame])} ${label}`);
|
|
91
163
|
}, 110);
|
|
92
164
|
try {
|
|
93
165
|
const result = await fn();
|
|
94
166
|
clearInterval(timer);
|
|
95
|
-
process.stdout.write(`\r✔ ${label}\n`);
|
|
167
|
+
process.stdout.write(`\r\x1b[K${green("✔")} ${label}\x1b[?25h\n`);
|
|
96
168
|
return result;
|
|
97
169
|
}
|
|
98
170
|
catch (e) {
|
|
99
171
|
clearInterval(timer);
|
|
100
|
-
process.stdout.write(`\r✖ ${label}\n`);
|
|
172
|
+
process.stdout.write(`\r\x1b[K${red("✖")} ${label}\x1b[?25h\n`);
|
|
101
173
|
throw e;
|
|
102
174
|
}
|
|
103
175
|
}
|
|
104
|
-
// A minimal two-column box-drawn summary table — no dependency pulled in for this.
|
|
176
|
+
// A minimal two-column box-drawn summary table — no dependency pulled in for this. Cell values
|
|
177
|
+
// may contain ANSI color codes (e.g. to flag a status green/red); widths and padding are computed
|
|
178
|
+
// from visible length, so colored cells still line up. Borders are dimmed rather than the caller
|
|
179
|
+
// wrapping the whole table in one color, which would otherwise clobber any per-cell color the
|
|
180
|
+
// moment an inner reset code fires.
|
|
105
181
|
export function renderTable(rows) {
|
|
106
|
-
const labelWidth = Math.max(...rows.map(r => r.label
|
|
107
|
-
const valueWidth = Math.max(...rows.map(r => r.value
|
|
108
|
-
const
|
|
109
|
-
const out = [
|
|
182
|
+
const labelWidth = Math.max(...rows.map(r => visibleLength(r.label)));
|
|
183
|
+
const valueWidth = Math.max(...rows.map(r => visibleLength(r.value)));
|
|
184
|
+
const border = (l, m, r) => dim(`${l}${"─".repeat(labelWidth + 2)}${m}${"─".repeat(valueWidth + 2)}${r}`);
|
|
185
|
+
const out = [border("┌", "┬", "┐")];
|
|
110
186
|
for (const row of rows) {
|
|
111
|
-
out.push(
|
|
187
|
+
out.push(`${dim("│")} ${padVisible(row.label, labelWidth)} ${dim("│")} ${padVisible(row.value, valueWidth)} ${dim("│")}`);
|
|
112
188
|
}
|
|
113
|
-
out.push(
|
|
189
|
+
out.push(border("└", "┴", "┘"));
|
|
190
|
+
return out.join("\n");
|
|
191
|
+
}
|
|
192
|
+
// Same box-drawing style as renderTable, but for arbitrary-width listings (e.g. 'beam agent
|
|
193
|
+
// list') instead of a fixed label/value pair. Also ANSI-safe, for the same reason.
|
|
194
|
+
export function renderColumns(headers, rows) {
|
|
195
|
+
const widths = headers.map((h, i) => Math.max(h.length, ...rows.map(r => visibleLength(r[i] ?? ""))));
|
|
196
|
+
const border = (l, m, r) => dim(`${l}${widths.map(w => "─".repeat(w + 2)).join(m)}${r}`);
|
|
197
|
+
const fmt = (cells) => `${dim("│")} ${cells.map((c, i) => padVisible(c ?? "", widths[i])).join(` ${dim("│")} `)} ${dim("│")}`;
|
|
198
|
+
const out = [border("┌", "┬", "┐"), fmt(headers), border("├", "┼", "┤")];
|
|
199
|
+
for (const row of rows)
|
|
200
|
+
out.push(fmt(row));
|
|
201
|
+
out.push(border("└", "┴", "┘"));
|
|
114
202
|
return out.join("\n");
|
|
115
203
|
}
|
|
116
204
|
//# sourceMappingURL=prompts.js.map
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runAgent(command: string, args: string[]): Promise<never>;
|
package/dist/run.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// `beam run <agent> [args...]` -- launches any agent CLI (claude, codex, cursor-agent, opencode,
|
|
2
|
+
// gemini, or anything else) wrapped in a kernel-enforced sandbox when the current policy has
|
|
3
|
+
// enforce-mode BLOCK rules naming specific commands. See src/sandbox.ts for the platform-specific
|
|
4
|
+
// mechanics. This file just: reads the policy, asks sandbox.ts for a plan, and execs.
|
|
5
|
+
//
|
|
6
|
+
// Deliberately agent-agnostic: this file has no per-agent knowledge (unlike src/agents.ts, which
|
|
7
|
+
// knows how to install hooks into each agent's own config format). Wrapping a process by PID tree
|
|
8
|
+
// doesn't need that -- it works identically no matter what's being launched.
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import { readPolicy } from "./policy.js";
|
|
11
|
+
import { buildSandboxPlan } from "./sandbox.js";
|
|
12
|
+
export async function runAgent(command, args) {
|
|
13
|
+
if (!command) {
|
|
14
|
+
console.error("Usage: beam run <command> [args...]");
|
|
15
|
+
process.exit(2);
|
|
16
|
+
}
|
|
17
|
+
const bundle = await readPolicy();
|
|
18
|
+
const plan = buildSandboxPlan(bundle);
|
|
19
|
+
const [spawnCmd, ...prefixArgs] = plan ? plan.prefix : [command];
|
|
20
|
+
const spawnArgs = plan ? [...prefixArgs, command, ...args] : args;
|
|
21
|
+
if (plan)
|
|
22
|
+
console.error(`beam run: ${plan.summary}`);
|
|
23
|
+
const child = spawn(spawnCmd, spawnArgs, { stdio: "inherit" });
|
|
24
|
+
// Forward termination signals to the child so Ctrl-C etc. behave the same as running the
|
|
25
|
+
// agent directly -- otherwise the wrapper process alone would exit and orphan the child.
|
|
26
|
+
const forward = (signal) => { if (!child.killed)
|
|
27
|
+
child.kill(signal); };
|
|
28
|
+
process.on("SIGINT", forward);
|
|
29
|
+
process.on("SIGTERM", forward);
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
child.on("error", (error) => {
|
|
32
|
+
// Sandbox tool itself failed to launch (shouldn't happen given the checks in sandbox.ts,
|
|
33
|
+
// but never let that be the reason the agent doesn't run at all) -- retry unwrapped once.
|
|
34
|
+
if (plan) {
|
|
35
|
+
console.error(`beam run: sandbox launch failed (${error.message}); running unsandboxed.`);
|
|
36
|
+
const fallback = spawn(command, args, { stdio: "inherit" });
|
|
37
|
+
fallback.on("exit", (code, signal) => process.exit(signal ? 1 : (code ?? 1)));
|
|
38
|
+
fallback.on("error", reject);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
reject(error);
|
|
42
|
+
});
|
|
43
|
+
child.on("exit", (code, signal) => {
|
|
44
|
+
process.exit(signal ? 1 : (code ?? 0));
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,6FAA6F;AAC7F,kGAAkG;AAClG,sFAAsF;AACtF,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,6EAA6E;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAc;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,IAAI,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE/D,yFAAyF;IACzF,yFAAyF;IACzF,MAAM,OAAO,GAAG,CAAC,MAAsB,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/B,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,yFAAyF;YACzF,0FAA0F;YAC1F,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;gBAC1F,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC5D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PolicyBundle } from "./policy.js";
|
|
2
|
+
export interface SandboxPlan {
|
|
3
|
+
/** Human-readable summary of what's being enforced, printed once at launch. */
|
|
4
|
+
summary: string;
|
|
5
|
+
/** Prefix to prepend to the user's command: the real invocation becomes [...prefix, ...cmd]. */
|
|
6
|
+
prefix: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Best-effort sandbox plan for the current platform and policy. Returns null (no wrapping) if
|
|
10
|
+
* there's nothing to block, the platform has no supported sandbox tool, or the tool isn't
|
|
11
|
+
* installed -- callers should fall back to running the command directly in every null case.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildSandboxPlan(bundle: PolicyBundle | null): SandboxPlan | null;
|
package/dist/sandbox.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Kernel-enforced process-tree sandboxing for `beam run`. Wraps whichever agent binary the user
|
|
2
|
+
// launches (claude, codex, cursor-agent, opencode, gemini, or anything else -- this file has no
|
|
3
|
+
// agent-specific knowledge) so that BLOCK-rule commands are unreachable to *every* descendant of
|
|
4
|
+
// that process, independent of whether the agent itself cooperates with beam's PreToolUse hook.
|
|
5
|
+
//
|
|
6
|
+
// This is a second, independent layer underneath the existing hook contract (src/policy.ts
|
|
7
|
+
// evaluate()), not a replacement for it -- the hook still fires first and is what lets an agent
|
|
8
|
+
// explain *why* to the user. This is the backstop for when that cooperation doesn't happen.
|
|
9
|
+
//
|
|
10
|
+
// Fail-open by design everywhere: if the sandbox tool isn't installed, the platform isn't
|
|
11
|
+
// supported yet (Windows), or resolving a binary's path fails, `beam run` still runs the agent
|
|
12
|
+
// normally rather than refusing to launch it. Never let this be the thing that breaks an agent.
|
|
13
|
+
import { execFileSync } from "node:child_process";
|
|
14
|
+
import { mkdtempSync, realpathSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { tmpdir } from "node:os";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
/**
|
|
18
|
+
* Absolute, symlink-resolved paths on disk for every place `name` resolves to on PATH (there can
|
|
19
|
+
* be more than one). Resolution matters: sandbox-exec's process-exec* and bwrap's bind-mount both
|
|
20
|
+
* act on the real path the kernel execs, not a symlink pointing at it -- e.g. Homebrew installs
|
|
21
|
+
* `/opt/homebrew/bin/git` as a symlink into `../Cellar/git/<version>/bin/git`, and a deny rule
|
|
22
|
+
* written against the symlink path silently doesn't match the resolved exec.
|
|
23
|
+
*/
|
|
24
|
+
function resolveAllOnPath(name) {
|
|
25
|
+
try {
|
|
26
|
+
const out = execFileSync("which", ["-a", name], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
27
|
+
const found = out.split("\n").map(l => l.trim()).filter(Boolean);
|
|
28
|
+
const real = found.map(p => { try {
|
|
29
|
+
return realpathSync(p);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return p;
|
|
33
|
+
} });
|
|
34
|
+
return Array.from(new Set([...found, ...real]));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function commandExists(bin) {
|
|
41
|
+
try {
|
|
42
|
+
execFileSync("which", [bin], { stdio: "ignore" });
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Binary names named directly by an enforce-mode BLOCK rule -- these are what get sandboxed. */
|
|
50
|
+
function blockedBinaryNames(bundle) {
|
|
51
|
+
if (bundle.rules.mode !== "enforce")
|
|
52
|
+
return [];
|
|
53
|
+
const names = new Set();
|
|
54
|
+
for (const rule of bundle.rules.rules ?? []) {
|
|
55
|
+
if (rule.action === "BLOCK" && rule.command && !/[*?]/.test(rule.command))
|
|
56
|
+
names.add(rule.command);
|
|
57
|
+
}
|
|
58
|
+
return Array.from(names);
|
|
59
|
+
}
|
|
60
|
+
function macosPlan(binaries) {
|
|
61
|
+
if (!commandExists("sandbox-exec"))
|
|
62
|
+
return null;
|
|
63
|
+
const resolved = binaries.flatMap(resolveAllOnPath);
|
|
64
|
+
if (!resolved.length)
|
|
65
|
+
return null;
|
|
66
|
+
const literals = resolved.map(p => `(literal "${p.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}")`).join(" ");
|
|
67
|
+
const profile = `(version 1)\n(allow default)\n(deny process-exec* ${literals})\n(deny process-fork ${literals})\n`;
|
|
68
|
+
const dir = mkdtempSync(join(tmpdir(), "beam-sandbox-"));
|
|
69
|
+
const profilePath = join(dir, "profile.sb");
|
|
70
|
+
writeFileSync(profilePath, profile, { mode: 0o600 });
|
|
71
|
+
return {
|
|
72
|
+
summary: `sandbox-exec: exec denied for ${resolved.join(", ")}`,
|
|
73
|
+
prefix: ["sandbox-exec", "-f", profilePath, "--"],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function linuxPlan(binaries) {
|
|
77
|
+
if (!commandExists("bwrap"))
|
|
78
|
+
return null;
|
|
79
|
+
const resolved = binaries.flatMap(resolveAllOnPath);
|
|
80
|
+
if (!resolved.length)
|
|
81
|
+
return null;
|
|
82
|
+
// Bind-mount /bin/false (or /usr/bin/false) over each blocked binary's path, inside a private
|
|
83
|
+
// mount namespace scoped to this process tree only -- the real binary and the rest of the
|
|
84
|
+
// filesystem are untouched outside that namespace.
|
|
85
|
+
const stub = commandExists("false") ? resolveAllOnPath("false")[0] : "/bin/false";
|
|
86
|
+
if (!stub)
|
|
87
|
+
return null;
|
|
88
|
+
const binds = resolved.flatMap(p => ["--ro-bind", stub, p]);
|
|
89
|
+
return {
|
|
90
|
+
summary: `bwrap: exec masked for ${resolved.join(", ")}`,
|
|
91
|
+
prefix: ["bwrap", "--bind", "/", "/", "--dev-bind", "/dev", "/dev", "--proc", "/proc", ...binds, "--"],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Best-effort sandbox plan for the current platform and policy. Returns null (no wrapping) if
|
|
96
|
+
* there's nothing to block, the platform has no supported sandbox tool, or the tool isn't
|
|
97
|
+
* installed -- callers should fall back to running the command directly in every null case.
|
|
98
|
+
*/
|
|
99
|
+
export function buildSandboxPlan(bundle) {
|
|
100
|
+
if (!bundle)
|
|
101
|
+
return null;
|
|
102
|
+
const binaries = blockedBinaryNames(bundle);
|
|
103
|
+
if (!binaries.length)
|
|
104
|
+
return null;
|
|
105
|
+
try {
|
|
106
|
+
if (process.platform === "darwin")
|
|
107
|
+
return macosPlan(binaries);
|
|
108
|
+
if (process.platform === "linux")
|
|
109
|
+
return linuxPlan(binaries);
|
|
110
|
+
return null; // Windows: no equivalent wired up yet; beam run still works, just unsandboxed.
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
CHANGED
package/dist/setup.js
CHANGED
|
@@ -1,33 +1,38 @@
|
|
|
1
|
-
import { createInterface } from "node:readline/promises";
|
|
2
1
|
import { detectAgents, installHook } from "./install.js";
|
|
3
2
|
import { readIdentity } from "./enroll.js";
|
|
4
3
|
import { startConnect } from "./connect.js";
|
|
5
4
|
import { installEnterprisePackage } from "./enterprise-install.js";
|
|
6
5
|
import { installService } from "./service.js";
|
|
7
6
|
import { openBrowser } from "./open-browser.js";
|
|
8
|
-
import {
|
|
9
|
-
import { checkbox, renderTable, withSpinner } from "./prompts.js";
|
|
7
|
+
import { checkbox, confirm, renderTable, withSpinner } from "./prompts.js";
|
|
10
8
|
import { showFirstRunWelcome } from "./owl.js";
|
|
11
|
-
|
|
9
|
+
import { cyan, dim, green, indigoOut, red } from "./color.js";
|
|
10
|
+
import { syncPolicy } from "./forward.js";
|
|
11
|
+
import { AGENT_BINARIES } from "./shims.js";
|
|
12
|
+
const TOTAL_STEPS = 5;
|
|
12
13
|
function step(n, title) {
|
|
13
|
-
console.log(`\
|
|
14
|
+
console.log(`\n${indigoOut(`Step ${n}/${TOTAL_STEPS}`)} ${title}`);
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
function ok(message) {
|
|
17
|
+
console.log(` ${green("✔")} ${message}`);
|
|
18
|
+
}
|
|
19
|
+
function skip(message) {
|
|
20
|
+
console.log(` ${dim(`— ${message}`)}`);
|
|
21
|
+
}
|
|
22
|
+
function fail(message) {
|
|
23
|
+
console.log(` ${red("✖")} ${message}`);
|
|
24
|
+
}
|
|
25
|
+
// Kept as promptYesNo (rather than renaming every call site to `confirm`) since `beam uninstall`
|
|
26
|
+
// also imports it by this name for its own "Proceed?" prompt.
|
|
27
|
+
export const promptYesNo = confirm;
|
|
28
|
+
// Colors a summary-table status value by what it means, so the table communicates state at a
|
|
29
|
+
// glance instead of reading as one flat block of text.
|
|
30
|
+
function statusValue(value) {
|
|
31
|
+
if (value.startsWith("failed"))
|
|
32
|
+
return red(value);
|
|
33
|
+
if (value === "none" || value === "not connected" || value === "not started" || value === "skipped")
|
|
34
|
+
return dim(value);
|
|
35
|
+
return green(value);
|
|
31
36
|
}
|
|
32
37
|
// One-shot onboarding for a machine that already has `beam` installed: wires beam's hook into
|
|
33
38
|
// whichever detected agents the user picks, connects the device if it isn't already, and
|
|
@@ -38,21 +43,22 @@ export async function promptYesNo(question, defaultYes = true) {
|
|
|
38
43
|
export async function runSetup() {
|
|
39
44
|
// Owl says hello, but only the first time this machine is ever set up.
|
|
40
45
|
await showFirstRunWelcome();
|
|
41
|
-
console.log("Setting up Beam — 4 quick steps
|
|
46
|
+
console.log(indigoOut("Setting up Beam") + dim(" — 4 quick steps"));
|
|
42
47
|
const agentRows = [];
|
|
43
48
|
let dashboardStatus = "not connected";
|
|
44
49
|
let serviceStatus = "not started";
|
|
50
|
+
let policyStatus = "not enrolled";
|
|
45
51
|
// --- Step 1: detect agents, then let the user choose which ones get the hook ---
|
|
46
52
|
step(1, "Detecting AI agents on this machine");
|
|
47
53
|
const detected = await detectAgents();
|
|
48
54
|
const installable = detected.filter(a => a.hookConfigPath && a.mergeHookConfig);
|
|
49
55
|
const unsupported = detected.filter(a => !a.hookConfigPath || !a.mergeHookConfig);
|
|
50
56
|
if (!detected.length) {
|
|
51
|
-
|
|
57
|
+
skip("No supported agents detected on this machine.");
|
|
52
58
|
}
|
|
53
59
|
else {
|
|
54
60
|
for (const a of unsupported)
|
|
55
|
-
|
|
61
|
+
skip(`${a.name}: hook install isn't built for it yet`);
|
|
56
62
|
}
|
|
57
63
|
if (installable.length) {
|
|
58
64
|
const picked = await checkbox(` Found ${installable.length} agent${installable.length === 1 ? "" : "s"} — pick which get beam's hook:`, installable.map(a => ({ label: a.name, checked: true })));
|
|
@@ -68,39 +74,72 @@ export async function runSetup() {
|
|
|
68
74
|
}
|
|
69
75
|
const skipped = installable.filter(a => !toInstall.includes(a));
|
|
70
76
|
for (const a of skipped)
|
|
71
|
-
|
|
77
|
+
skip(`Skipped ${a.name} (run 'beam agent install ${a.id}' later if you change your mind)`);
|
|
78
|
+
}
|
|
79
|
+
// Shims are never installed automatically -- writing into PATH resolution is a bigger footprint
|
|
80
|
+
// than a hook install, and this session has no way to also edit the user's shell rc for them.
|
|
81
|
+
// Just point at the exact command for whichever detected agents shims actually support.
|
|
82
|
+
const shimmable = detected.filter(a => AGENT_BINARIES[a.id]);
|
|
83
|
+
if (shimmable.length) {
|
|
84
|
+
console.log(`\n Tip: to sandbox ${shimmable.map(a => a.name).join(", ")} automatically (no need to type 'beam run'), run:`);
|
|
85
|
+
console.log(` beam shims install ${shimmable.map(a => a.id).join(" ")}`);
|
|
72
86
|
}
|
|
73
87
|
// --- Step 2: connect this device to the dashboard (dashboard-v1, or BEAM_DASHBOARD_URL) ---
|
|
74
88
|
step(2, "Connecting to your Beam dashboard");
|
|
75
89
|
let identity = await readIdentity();
|
|
90
|
+
let shouldConnect = !identity;
|
|
76
91
|
if (identity) {
|
|
77
|
-
|
|
92
|
+
ok(`Already connected as device ${identity.deviceId}.`);
|
|
78
93
|
dashboardStatus = `connected (${identity.deviceId})`;
|
|
94
|
+
shouldConnect = await promptYesNo(" Reconnect or link to a different workspace?", false);
|
|
79
95
|
}
|
|
80
96
|
else {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
shouldConnect = await promptYesNo(" Connect this device to your Beam dashboard now?");
|
|
98
|
+
}
|
|
99
|
+
if (shouldConnect) {
|
|
100
|
+
// Mirrors 'beam connect': always opens the browser and overwrites any existing identity,
|
|
101
|
+
// so re-running setup can also be used to re-pair or switch workspaces.
|
|
102
|
+
const session = await startConnect();
|
|
103
|
+
openBrowser(session.url);
|
|
104
|
+
console.log(` ${dim("Didn't open? Visit:")} ${cyan(session.url)}`);
|
|
105
|
+
identity = await withSpinner("Waiting for you to finish in the browser", () => session.poll());
|
|
106
|
+
ok(`Connected device ${identity.deviceId} (org ${identity.orgId})`);
|
|
107
|
+
dashboardStatus = `connected (${identity.deviceId})`;
|
|
108
|
+
const enterprise = await withSpinner("Checking for beam-enterprise", () => installEnterprisePackage(identity));
|
|
109
|
+
if (enterprise.status === "installed")
|
|
110
|
+
ok("beam-enterprise installed (OS-level monitoring enabled).");
|
|
111
|
+
else if (enterprise.status === "error")
|
|
112
|
+
fail(`Could not install beam-enterprise: ${enterprise.message}`);
|
|
113
|
+
// "not-entitled": org isn't on the enterprise plan -- nothing to print, this is the normal case.
|
|
114
|
+
}
|
|
115
|
+
else if (!identity) {
|
|
116
|
+
skip("Skipped. Run 'beam connect' whenever you're ready.");
|
|
117
|
+
}
|
|
118
|
+
// --- Step 3: fetch this device's effective policy (org + any user-level override), if enrolled ---
|
|
119
|
+
// A device can be enrolled from a previous `beam setup`/`beam enroll` run without this run ever
|
|
120
|
+
// reaching Step 2's connect branch above -- so this always runs off whatever `identity` ended up
|
|
121
|
+
// being, not just the freshly-connected path.
|
|
122
|
+
step(3, "Fetching your org's policy");
|
|
123
|
+
if (identity) {
|
|
124
|
+
const result = await withSpinner("Syncing policy", () => syncPolicy());
|
|
125
|
+
if (result.status === "updated") {
|
|
126
|
+
console.log(` ✔ Policy v${result.version} synced (org + any user override, merged).`);
|
|
127
|
+
policyStatus = `synced (v${result.version})`;
|
|
97
128
|
}
|
|
98
|
-
else {
|
|
99
|
-
console.log("
|
|
129
|
+
else if (result.status === "unchanged") {
|
|
130
|
+
console.log(" ✔ Already up to date.");
|
|
131
|
+
policyStatus = "up to date";
|
|
100
132
|
}
|
|
133
|
+
else if (result.status === "unreachable") {
|
|
134
|
+
console.error(" ✖ Could not reach the Beam workspace — will retry automatically once the service is running.");
|
|
135
|
+
policyStatus = "unreachable (will retry)";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(" Skipped — device isn't connected to a dashboard yet.");
|
|
101
140
|
}
|
|
102
|
-
// --- Step
|
|
103
|
-
step(
|
|
141
|
+
// --- Step 4: background collector service ---
|
|
142
|
+
step(4, "Starting the background collector");
|
|
104
143
|
const shouldStart = await promptYesNo(" Start the beam background service now (survives reboot/logout)?");
|
|
105
144
|
if (shouldStart) {
|
|
106
145
|
try {
|
|
@@ -112,20 +151,27 @@ export async function runSetup() {
|
|
|
112
151
|
}
|
|
113
152
|
}
|
|
114
153
|
else {
|
|
115
|
-
|
|
154
|
+
skip("Skipped. Run 'beam service install' (background) or 'beam start' (foreground) whenever you want it running.");
|
|
116
155
|
serviceStatus = "skipped";
|
|
117
156
|
}
|
|
118
|
-
// --- Step
|
|
119
|
-
step(
|
|
157
|
+
// --- Step 5: summary ---
|
|
158
|
+
step(5, "Done");
|
|
120
159
|
console.log();
|
|
160
|
+
const agentSummary = agentRows.length
|
|
161
|
+
? `${agentRows.length} installed (${agentRows.join(", ")})`
|
|
162
|
+
: "none";
|
|
163
|
+
const agentSummaryColor = agentRows.some(r => r.includes("failed")) ? red : statusValue;
|
|
121
164
|
console.log(renderTable([
|
|
122
|
-
{ label: "Agent hooks", value:
|
|
123
|
-
{ label: "Dashboard", value: dashboardStatus },
|
|
124
|
-
{ label: "
|
|
165
|
+
{ label: "Agent hooks", value: agentSummaryColor(agentSummary) },
|
|
166
|
+
{ label: "Dashboard", value: statusValue(dashboardStatus) },
|
|
167
|
+
{ label: "Policy", value: statusValue(policyStatus) },
|
|
168
|
+
{ label: "Service", value: statusValue(serviceStatus) },
|
|
125
169
|
]));
|
|
126
|
-
console.log("
|
|
127
|
-
console.log("
|
|
128
|
-
console.log("
|
|
129
|
-
console.log("
|
|
170
|
+
console.log(`\n${dim("Useful next commands:")}`);
|
|
171
|
+
console.log(` ${cyan("beam studio")} open the activity dashboard`);
|
|
172
|
+
console.log(` ${cyan("beam service status")} check whether the collector is running`);
|
|
173
|
+
console.log(` ${cyan("beam agent list")} check hook status per agent`);
|
|
174
|
+
if (shimmable.length)
|
|
175
|
+
console.log(` ${cyan(`beam shims install ${shimmable.map(a => a.id).join(" ")}`)} sandbox ${shimmable.map(a => a.name).join(", ")} automatically`);
|
|
130
176
|
}
|
|
131
177
|
//# sourceMappingURL=setup.js.map
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/shims.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const AGENT_BINARIES: Record<string, string>;
|
|
2
|
+
export declare function shimDir(): string;
|
|
3
|
+
export interface ShimResult {
|
|
4
|
+
agentId: string;
|
|
5
|
+
binary: string;
|
|
6
|
+
status: "installed" | "not-found";
|
|
7
|
+
}
|
|
8
|
+
/** Writes shim scripts for the given agent ids (default: every known one) into shimDir(). */
|
|
9
|
+
export declare function installShims(agentIds?: string[]): ShimResult[];
|
|
10
|
+
export declare function uninstallShims(): void;
|
|
11
|
+
export declare function listShims(): string[];
|
|
12
|
+
/** Line to add to the shell's rc file so the shim dir wins PATH resolution. */
|
|
13
|
+
export declare function pathExportLine(): string;
|
package/dist/shims.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Makes `claude`, `codex`, etc. sandboxed automatically -- no one has to remember to type
|
|
2
|
+
// `beam run claude`. A small shim directory goes at the *front* of PATH; each shim is a one-line
|
|
3
|
+
// script that execs the real agent binary through `beam run`. Shells resolve PATH left-to-right,
|
|
4
|
+
// so once the shim dir wins, typing the agent's normal name is enough.
|
|
5
|
+
//
|
|
6
|
+
// This only decides *whether an invocation goes through beam run* -- src/sandbox.ts still decides
|
|
7
|
+
// (per the current policy) whether that actually wraps anything. So installing a shim for an
|
|
8
|
+
// agent with no enforce-mode BLOCK rules is a harmless no-op, same as `beam run` itself.
|
|
9
|
+
import { chmodSync, mkdirSync, readdirSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { execFileSync } from "node:child_process";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { getBeamHome } from "./config.js";
|
|
13
|
+
// Binary name actually typed at a shell prompt, which can differ from the agent's own internal
|
|
14
|
+
// id (e.g. the "cursor" agent's CLI binary is `cursor-agent`, "claude-code"'s is `claude`).
|
|
15
|
+
export const AGENT_BINARIES = {
|
|
16
|
+
"claude-code": "claude",
|
|
17
|
+
codex: "codex",
|
|
18
|
+
cursor: "cursor-agent",
|
|
19
|
+
"copilot-cli": "copilot",
|
|
20
|
+
gemini: "gemini",
|
|
21
|
+
opencode: "opencode",
|
|
22
|
+
};
|
|
23
|
+
export function shimDir() {
|
|
24
|
+
return join(getBeamHome(), "shims");
|
|
25
|
+
}
|
|
26
|
+
function resolveBeamBin() {
|
|
27
|
+
try {
|
|
28
|
+
const out = execFileSync("which", ["beam"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
29
|
+
return out ? realpathSync(out) : null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** The real agent binary's path, skipping any match that's actually one of our own shims. */
|
|
36
|
+
function resolveRealBinary(name) {
|
|
37
|
+
const dir = shimDir();
|
|
38
|
+
try {
|
|
39
|
+
const out = execFileSync("which", ["-a", name], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
40
|
+
const candidate = out.split("\n").map(l => l.trim()).find(p => p && !p.startsWith(dir));
|
|
41
|
+
return candidate ? realpathSync(candidate) : null;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Writes shim scripts for the given agent ids (default: every known one) into shimDir(). */
|
|
48
|
+
export function installShims(agentIds = Object.keys(AGENT_BINARIES)) {
|
|
49
|
+
const beamBin = resolveBeamBin();
|
|
50
|
+
if (!beamBin)
|
|
51
|
+
throw new Error("Could not resolve the `beam` binary on PATH -- run this from a shell where `beam` already works.");
|
|
52
|
+
mkdirSync(shimDir(), { recursive: true });
|
|
53
|
+
return agentIds.map((agentId) => {
|
|
54
|
+
const binary = AGENT_BINARIES[agentId];
|
|
55
|
+
if (!binary)
|
|
56
|
+
throw new Error(`Unknown agent id: ${agentId}`);
|
|
57
|
+
const real = resolveRealBinary(binary);
|
|
58
|
+
if (!real)
|
|
59
|
+
return { agentId, binary, status: "not-found" };
|
|
60
|
+
const script = `#!/bin/sh\n# Installed by \`beam shims install\` -- routes ${binary} through beam run's sandbox.\nexec "${beamBin}" run "${real}" "$@"\n`;
|
|
61
|
+
const path = join(shimDir(), binary);
|
|
62
|
+
writeFileSync(path, script, { mode: 0o755 });
|
|
63
|
+
chmodSync(path, 0o755);
|
|
64
|
+
return { agentId, binary, status: "installed" };
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export function uninstallShims() {
|
|
68
|
+
try {
|
|
69
|
+
rmSync(shimDir(), { recursive: true, force: true });
|
|
70
|
+
}
|
|
71
|
+
catch { /* nothing to remove */ }
|
|
72
|
+
}
|
|
73
|
+
export function listShims() {
|
|
74
|
+
try {
|
|
75
|
+
return readdirSync(shimDir());
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Line to add to the shell's rc file so the shim dir wins PATH resolution. */
|
|
82
|
+
export function pathExportLine() {
|
|
83
|
+
return `export PATH="${shimDir()}:$PATH"`;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=shims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shims.js","sourceRoot":"","sources":["../src/shims.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-beam/beam",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Local-first observation and heuristic risk scanning for AI coding agents (Claude Code, Codex, Cursor, Copilot CLI, Gemini). Redacts secrets, flags risky tool calls, scans skills and MCP configs offline.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai agent security",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"test:watch": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js --watch",
|
|
47
47
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
48
48
|
"prepublishOnly": "npm run validate:skills && npm run typecheck && npm test && npm run build",
|
|
49
|
+
"setup": "npm run build && node dist/cli.js setup",
|
|
49
50
|
"setup:global": "bash scripts/setup-global.sh",
|
|
50
51
|
"validate:skills": "node Skills/scripts/validate-skills.mjs"
|
|
51
52
|
},
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
62
63
|
"@types/jest": "^30.0.0",
|
|
63
|
-
"@types/node": "^22.
|
|
64
|
+
"@types/node": "^22.20.2",
|
|
64
65
|
"jest": "^30.2.0",
|
|
65
66
|
"ts-jest": "^29.4.5",
|
|
66
67
|
"tsx": "^4.19.2",
|