@agent-beam/beam 0.2.35 → 0.2.37
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/README.md +2 -0
- package/dist/agent-installers.d.ts +24 -0
- package/dist/agent-installers.js +182 -0
- package/dist/agent-installers.js.map +1 -0
- package/dist/agents.d.ts +3 -1
- package/dist/agents.js +16 -0
- package/dist/agents.js.map +1 -1
- package/dist/auto-update.d.ts +6 -0
- package/dist/auto-update.js +1 -1
- package/dist/auto-update.js.map +1 -1
- package/dist/cli.js +15 -2
- package/dist/cli.js.map +1 -1
- package/dist/client.js +6 -2
- package/dist/client.js.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/forward.js +2 -1
- package/dist/forward.js.map +1 -1
- package/dist/hook-adapters.js +7 -1
- package/dist/hook-adapters.js.map +1 -1
- package/dist/install.d.ts +3 -0
- package/dist/install.js +22 -4
- package/dist/install.js.map +1 -1
- package/dist/remote-update.d.ts +17 -0
- package/dist/remote-update.js +58 -0
- package/dist/remote-update.js.map +1 -0
- package/dist/serve.js +17 -1
- package/dist/serve.js.map +1 -1
- package/dist/skill-remote.d.ts +13 -0
- package/dist/skill-remote.js +145 -0
- package/dist/skill-remote.js.map +1 -0
- package/dist/version.d.ts +4 -0
- package/dist/version.js +17 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
- package/stress-report.json +35 -35
package/README.md
CHANGED
|
@@ -91,6 +91,8 @@ AgentBeam is not Claude-specific. Setup discovers the agents actually installed
|
|
|
91
91
|
| Gemini CLI | Before-tool protection and activity capture |
|
|
92
92
|
| GitHub Copilot CLI | Pre-tool protection and activity capture |
|
|
93
93
|
| Cursor | Pre-tool protection and activity capture |
|
|
94
|
+
| Hermes Agent | Pre-tool shell hook in `~/.hermes/config.yaml`; asks for approval on first use |
|
|
95
|
+
| OpenClaw | `before_tool_call` plugin, registered with `openclaw plugins install --link` |
|
|
94
96
|
| OpenCode | Shim-based protection where supported |
|
|
95
97
|
| Jev (TypeSafe AI) | Discovery only — config/artifact presence; ecosystem is too fragmented across third-party CLIs (`jev-cli`, `jev-axi`, `jev-guard`) for a single hook contract yet |
|
|
96
98
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface HookTarget {
|
|
2
|
+
nodePath: string;
|
|
3
|
+
cliPath: string;
|
|
4
|
+
agentId: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CustomInstallResult {
|
|
7
|
+
path: string;
|
|
8
|
+
alreadyInstalled: boolean;
|
|
9
|
+
note?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CustomUninstallResult {
|
|
12
|
+
path: string;
|
|
13
|
+
removed: boolean;
|
|
14
|
+
note?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CustomInstaller {
|
|
17
|
+
install(home: string, target: HookTarget): Promise<CustomInstallResult>;
|
|
18
|
+
uninstall(home: string): Promise<CustomUninstallResult>;
|
|
19
|
+
isInstalled(home: string): Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
export declare function hermesStripBeam(text: string): string;
|
|
22
|
+
export declare function hermesHasBeam(text: string): boolean;
|
|
23
|
+
export declare function hermesAddBeam(text: string, command: string): string;
|
|
24
|
+
export declare const CUSTOM_INSTALLERS: Record<string, CustomInstaller>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { getBeamHome } from "./config.js";
|
|
5
|
+
// ---- Hermes Agent: ~/.hermes/config.yaml `hooks:` block ------------------------------------
|
|
6
|
+
// Shape verified against hermes-agent.nousresearch.com/docs/user-guide/features/hooks: each event
|
|
7
|
+
// under `hooks:` maps to a list of { matcher?, command, timeout?, fail_closed? } entries; the
|
|
8
|
+
// script gets hook_event_name/tool_name/tool_input/session_id/cwd on stdin and blocks with
|
|
9
|
+
// {"decision":"block","reason"} or exit code 2. The file is edited as text, between marker
|
|
10
|
+
// comments, so the user's comments, ordering and other settings are left exactly as they were.
|
|
11
|
+
const HERMES_BEGIN = "# beam:begin (managed by 'beam agent install hermes')";
|
|
12
|
+
const HERMES_END = "# beam:end";
|
|
13
|
+
const HERMES_NOTE = "Hermes asks you to approve the new hook the first time it runs (saved in ~/.hermes/shell-hooks-allowlist.json). In the gateway, cron or CI it stays inactive until you approve it, start Hermes with --accept-hooks, or set HERMES_ACCEPT_HOOKS=1. Restart Hermes to load it.";
|
|
14
|
+
// Hermes runs a hook command through shlex.split with shell=False, so quote each path with single
|
|
15
|
+
// quotes (no expansion), then emit the whole command as a YAML double-quoted scalar.
|
|
16
|
+
function shq(value) { return `'${value.replace(/'/g, `'\\''`)}'`; }
|
|
17
|
+
function hermesCommand(t) { return `${shq(t.nodePath)} ${shq(t.cliPath)} hook ${t.agentId}`; }
|
|
18
|
+
export function hermesStripBeam(text) {
|
|
19
|
+
const out = [];
|
|
20
|
+
let skipping = false;
|
|
21
|
+
for (const line of text.split("\n")) {
|
|
22
|
+
const trimmed = line.trim();
|
|
23
|
+
if (!skipping && trimmed.startsWith("# beam:begin")) {
|
|
24
|
+
skipping = true;
|
|
25
|
+
if (!line.startsWith(" ") && out.length && out[out.length - 1] === "")
|
|
26
|
+
out.pop(); // the blank line we added before a top-level block
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (skipping) {
|
|
30
|
+
if (trimmed === HERMES_END)
|
|
31
|
+
skipping = false;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
out.push(line);
|
|
35
|
+
}
|
|
36
|
+
return out.join("\n");
|
|
37
|
+
}
|
|
38
|
+
export function hermesHasBeam(text) {
|
|
39
|
+
return text.split("\n").some(line => line.trim().startsWith("# beam:begin"));
|
|
40
|
+
}
|
|
41
|
+
function manualSnippet(command) {
|
|
42
|
+
return `hooks:\n pre_tool_call:\n - command: ${JSON.stringify(command)}\n timeout: 30`;
|
|
43
|
+
}
|
|
44
|
+
export function hermesAddBeam(text, command) {
|
|
45
|
+
const base = hermesStripBeam(text);
|
|
46
|
+
const entry = [`pre_tool_call:`, ` - command: ${JSON.stringify(command)}`, ` timeout: 30`];
|
|
47
|
+
const lines = base.split("\n");
|
|
48
|
+
const hooksIndex = lines.findIndex(line => /^hooks:/.test(line));
|
|
49
|
+
if (hooksIndex === -1) {
|
|
50
|
+
const block = [HERMES_BEGIN, "hooks:", ...entry.map(l => ` ${l}`), HERMES_END];
|
|
51
|
+
const prefix = base.trim() === "" ? "" : `${base.replace(/\n+$/, "")}\n\n`;
|
|
52
|
+
return `${prefix}${block.join("\n")}\n`;
|
|
53
|
+
}
|
|
54
|
+
if (!/^hooks:\s*(#.*)?$/.test(lines[hooksIndex])) {
|
|
55
|
+
throw new Error(`~/.hermes/config.yaml has an inline 'hooks:' value; add Beam's hook by hand:\n${manualSnippet(command)}`);
|
|
56
|
+
}
|
|
57
|
+
if (lines.some(line => /^\s+pre_tool_call:/.test(line))) {
|
|
58
|
+
throw new Error(`~/.hermes/config.yaml already has a pre_tool_call hook list; add this entry to it by hand:\n - command: ${JSON.stringify(command)}\n timeout: 30`);
|
|
59
|
+
}
|
|
60
|
+
lines.splice(hooksIndex + 1, 0, ` ${HERMES_BEGIN}`, ...entry.map(l => ` ${l}`), ` ${HERMES_END}`);
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
function hermesPath(home) { return join(home, ".hermes", "config.yaml"); }
|
|
64
|
+
const hermes = {
|
|
65
|
+
async install(home, target) {
|
|
66
|
+
const path = hermesPath(home);
|
|
67
|
+
const raw = await readFile(path, "utf8").catch(() => "");
|
|
68
|
+
const next = hermesAddBeam(raw, hermesCommand(target));
|
|
69
|
+
const alreadyInstalled = raw !== "" && next === raw;
|
|
70
|
+
if (!alreadyInstalled) {
|
|
71
|
+
await mkdir(dirname(path), { recursive: true });
|
|
72
|
+
await writeFile(path, next);
|
|
73
|
+
}
|
|
74
|
+
return { path, alreadyInstalled, note: alreadyInstalled ? undefined : HERMES_NOTE };
|
|
75
|
+
},
|
|
76
|
+
async uninstall(home) {
|
|
77
|
+
const path = hermesPath(home);
|
|
78
|
+
const raw = await readFile(path, "utf8").catch(() => "");
|
|
79
|
+
if (!hermesHasBeam(raw))
|
|
80
|
+
return { path, removed: false };
|
|
81
|
+
await writeFile(path, hermesStripBeam(raw).replace(/\n{3,}/g, "\n\n"));
|
|
82
|
+
return { path, removed: true };
|
|
83
|
+
},
|
|
84
|
+
async isInstalled(home) {
|
|
85
|
+
const raw = await readFile(hermesPath(home), "utf8").catch(() => "");
|
|
86
|
+
return hermesHasBeam(raw) && raw.includes(" hook hermes");
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
// ---- OpenClaw: a plugin that registers a before_tool_call hook ------------------------------
|
|
90
|
+
// OpenClaw has no hook config file. docs.openclaw.ai/plugins/hooks says typed hooks are registered
|
|
91
|
+
// in plugin code with api.on("before_tool_call", handler), and that a plugin is installed with
|
|
92
|
+
// `openclaw plugins install --link <dir>` then `openclaw plugins enable <id>`. The event fields
|
|
93
|
+
// and return shape ({ block, blockReason }) come from the hooks page and published plugins; the
|
|
94
|
+
// page does not print them as a reference, so the plugin reads each field defensively.
|
|
95
|
+
const OPENCLAW_ID = "beam";
|
|
96
|
+
const OPENCLAW_MARKER = "// beam-managed: generated by 'beam agent install openclaw'";
|
|
97
|
+
function openclawDir() { return join(getBeamHome(), "openclaw-plugin"); }
|
|
98
|
+
function openclawIndex(t) {
|
|
99
|
+
return `${OPENCLAW_MARKER}
|
|
100
|
+
import { spawnSync } from "node:child_process";
|
|
101
|
+
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
102
|
+
|
|
103
|
+
const NODE = ${JSON.stringify(t.nodePath)};
|
|
104
|
+
const CLI = ${JSON.stringify(t.cliPath)};
|
|
105
|
+
|
|
106
|
+
export default definePluginEntry({
|
|
107
|
+
id: ${JSON.stringify(OPENCLAW_ID)},
|
|
108
|
+
name: "Beam",
|
|
109
|
+
description: "Reports OpenClaw tool calls to the local Beam collector and applies workspace policy.",
|
|
110
|
+
register(api: any) {
|
|
111
|
+
api.on("before_tool_call", async (event: any, ctx: any) => {
|
|
112
|
+
const payload = {
|
|
113
|
+
hook_event_name: "before_tool_call",
|
|
114
|
+
tool_name: event?.toolName ?? event?.name,
|
|
115
|
+
tool_input: event?.params ?? event?.args ?? {},
|
|
116
|
+
tool_use_id: event?.toolCallId,
|
|
117
|
+
session_id: ctx?.sessionKey ?? ctx?.sessionId,
|
|
118
|
+
cwd: ctx?.workspaceDir ?? process.cwd(),
|
|
119
|
+
source_agent: "openclaw",
|
|
120
|
+
source_type: "hook",
|
|
121
|
+
};
|
|
122
|
+
const result = spawnSync(NODE, [CLI, "hook", "openclaw"], { input: JSON.stringify(payload), encoding: "utf8", timeout: 5000 });
|
|
123
|
+
let response: any = {};
|
|
124
|
+
try { response = JSON.parse(result.stdout || "{}"); } catch { /* fail closed below */ }
|
|
125
|
+
// OpenClaw's hook runner fails open on a thrown error, so a failure here returns a block instead.
|
|
126
|
+
if (result.error || result.status !== 0 || response.decision === "deny") {
|
|
127
|
+
return { block: true, blockReason: response.reason || "Beam denied this tool call." };
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
const OPENCLAW_MANIFEST = `${JSON.stringify({
|
|
135
|
+
id: OPENCLAW_ID,
|
|
136
|
+
name: "Beam",
|
|
137
|
+
activation: { onStartup: true },
|
|
138
|
+
configSchema: { type: "object", additionalProperties: false },
|
|
139
|
+
}, null, 2)}\n`;
|
|
140
|
+
const OPENCLAW_PACKAGE = `${JSON.stringify({ name: "beam-openclaw-plugin", private: true, type: "module", openclaw: { extensions: ["./index.ts"] } }, null, 2)}\n`;
|
|
141
|
+
function runOpenclaw(args) {
|
|
142
|
+
try {
|
|
143
|
+
execFileSync(process.env.BEAM_OPENCLAW_BIN || "openclaw", args, { stdio: "ignore", timeout: 60_000 });
|
|
144
|
+
return { ok: true };
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
return { ok: false, reason: e.code === "ENOENT" ? "the openclaw command was not found on PATH" : "the openclaw command failed" };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const openclaw = {
|
|
151
|
+
async install(home, target) {
|
|
152
|
+
void home;
|
|
153
|
+
const dir = openclawDir();
|
|
154
|
+
const index = openclawIndex(target);
|
|
155
|
+
const existing = await readFile(join(dir, "index.ts"), "utf8").catch(() => "");
|
|
156
|
+
await mkdir(dir, { recursive: true });
|
|
157
|
+
await writeFile(join(dir, "openclaw.plugin.json"), OPENCLAW_MANIFEST, { mode: 0o600 });
|
|
158
|
+
await writeFile(join(dir, "package.json"), OPENCLAW_PACKAGE, { mode: 0o600 });
|
|
159
|
+
await writeFile(join(dir, "index.ts"), index, { mode: 0o600 });
|
|
160
|
+
const linked = runOpenclaw(["plugins", "install", "--link", dir, "--force"]);
|
|
161
|
+
const enabled = linked.ok ? runOpenclaw(["plugins", "enable", OPENCLAW_ID]) : linked;
|
|
162
|
+
const manual = `openclaw plugins install --link ${dir} --force && openclaw plugins enable ${OPENCLAW_ID}`;
|
|
163
|
+
const note = enabled.ok
|
|
164
|
+
? "Restart the OpenClaw gateway to load the plugin, then check it with 'openclaw plugins list'."
|
|
165
|
+
: `Plugin written, but not registered (${enabled.reason}). Run: ${manual}`;
|
|
166
|
+
return { path: dir, alreadyInstalled: existing === index && enabled.ok, note };
|
|
167
|
+
},
|
|
168
|
+
async uninstall() {
|
|
169
|
+
const dir = openclawDir();
|
|
170
|
+
const existing = await readFile(join(dir, "index.ts"), "utf8").catch(() => "");
|
|
171
|
+
if (!existing.startsWith(OPENCLAW_MARKER))
|
|
172
|
+
return { path: dir, removed: false };
|
|
173
|
+
await rm(dir, { recursive: true, force: true });
|
|
174
|
+
return { path: dir, removed: true, note: `Also remove the '${OPENCLAW_ID}' plugin from OpenClaw ('openclaw plugins --help' lists the command), or it will warn about a missing path.` };
|
|
175
|
+
},
|
|
176
|
+
async isInstalled() {
|
|
177
|
+
const existing = await readFile(join(openclawDir(), "index.ts"), "utf8").catch(() => "");
|
|
178
|
+
return existing.startsWith(OPENCLAW_MARKER);
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
export const CUSTOM_INSTALLERS = { hermes, openclaw };
|
|
182
|
+
//# sourceMappingURL=agent-installers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-installers.js","sourceRoot":"","sources":["../src/agent-installers.ts"],"names":[],"mappings":"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"}
|
package/dist/agents.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export interface AgentDefinition {
|
|
|
29
29
|
*/
|
|
30
30
|
unmergeHookConfig: ((existing: Obj, isOwnCommand: (command: string) => boolean) => Obj) | null;
|
|
31
31
|
/** Payload adapter id used by src/hook-adapters.ts to normalize this agent's stdin JSON. */
|
|
32
|
-
adapter: "passthrough" | "copilot-camel" | "generic" | "gemini";
|
|
32
|
+
adapter: "passthrough" | "copilot-camel" | "generic" | "gemini" | "pre-tool-alias";
|
|
33
33
|
/** Whether the AGENT ITSELF (not just this entry's payload verification) is unverified — the
|
|
34
34
|
* ecosystem around it is too new or too fragmented (e.g. many competing third-party CLIs with
|
|
35
35
|
* no single canonical hook contract) to trust as a merge target yet. Detection-only. */
|
|
@@ -37,6 +37,8 @@ export interface AgentDefinition {
|
|
|
37
37
|
/** Whether the adapter above was verified against vendor documentation (vs. best-effort). */
|
|
38
38
|
verifiedPayload: boolean;
|
|
39
39
|
notes: string;
|
|
40
|
+
/** Agents whose hook is not a mergeable JSON file; src/agent-installers.ts installs them. */
|
|
41
|
+
customInstall?: boolean;
|
|
40
42
|
}
|
|
41
43
|
export declare const AGENTS: AgentDefinition[];
|
|
42
44
|
export declare function findAgent(id: string): AgentDefinition | undefined;
|
package/dist/agents.js
CHANGED
|
@@ -151,6 +151,22 @@ export const AGENTS = [
|
|
|
151
151
|
mergeHookConfig: null, unmergeHookConfig: null, adapter: "passthrough", verifiedPayload: true,
|
|
152
152
|
notes: "Uses OpenCode's native tool.execute.before plugin hook."
|
|
153
153
|
},
|
|
154
|
+
{
|
|
155
|
+
id: "hermes", name: "Hermes Agent",
|
|
156
|
+
configs: [".hermes"], artifacts: [],
|
|
157
|
+
hookConfigPath: ".hermes/config.yaml", hookEventName: "pre_tool_call",
|
|
158
|
+
mergeHookConfig: null, unmergeHookConfig: null, customInstall: true,
|
|
159
|
+
adapter: "pre-tool-alias", verifiedPayload: true,
|
|
160
|
+
notes: "Installs a shell hook under hooks.pre_tool_call in ~/.hermes/config.yaml (default profile), between beam:begin/beam:end comments. Stdin fields (hook_event_name, tool_name, tool_input, session_id, cwd) and the block contract ({decision: \"block\", reason} or exit 2) verified against hermes-agent.nousresearch.com/docs/user-guide/features/hooks; tool_input shapes per Hermes tool are not. Hermes asks you to approve the hook on first use, and a hook that errors or times out fails open unless fail_closed is set."
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: "openclaw", name: "OpenClaw",
|
|
164
|
+
configs: [".openclaw"], artifacts: [],
|
|
165
|
+
hookConfigPath: null, hookEventName: "before_tool_call",
|
|
166
|
+
mergeHookConfig: null, unmergeHookConfig: null, customInstall: true,
|
|
167
|
+
adapter: "pre-tool-alias", verifiedPayload: false,
|
|
168
|
+
notes: "OpenClaw has no hook config file: beam writes a small plugin that registers api.on(\"before_tool_call\") and links it with 'openclaw plugins install --link' and 'openclaw plugins enable'. Registration and the { block, blockReason } return follow docs.openclaw.ai/plugins/hooks and published plugins, but the event field names are not printed in a reference, so the plugin reads them defensively; treat enforcement as unverified until you see a real event."
|
|
169
|
+
},
|
|
154
170
|
{
|
|
155
171
|
id: "jev", name: "Jev (TypeSafe AI)",
|
|
156
172
|
// TypeSafe's own Jev tooling and at least half a dozen independent third-party CLIs
|
package/dist/agents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/auto-update.d.ts
CHANGED
|
@@ -19,6 +19,11 @@ export interface UpdateState {
|
|
|
19
19
|
reason: string;
|
|
20
20
|
};
|
|
21
21
|
noticeShownAt?: string;
|
|
22
|
+
/** Last update an administrator requested from the dashboard, so a failing install isn't retried every minute. */
|
|
23
|
+
remoteAttempt?: {
|
|
24
|
+
version: string;
|
|
25
|
+
at: string;
|
|
26
|
+
};
|
|
22
27
|
}
|
|
23
28
|
export declare const updateStatePath: () => string;
|
|
24
29
|
export declare function readUpdateState(path?: string): Promise<UpdateState>;
|
|
@@ -50,3 +55,4 @@ export interface WorkerDeps {
|
|
|
50
55
|
}
|
|
51
56
|
/** The detached process: check, then install without prompting or escalating. */
|
|
52
57
|
export declare function runAutoUpdateWorker(deps: WorkerDeps): Promise<void>;
|
|
58
|
+
export declare function npmInstall(version: string): Promise<void>;
|
package/dist/auto-update.js
CHANGED
|
@@ -159,7 +159,7 @@ export async function runAutoUpdateWorker(deps) {
|
|
|
159
159
|
failed: { version: latest, at: new Date().toISOString(), reason: (error instanceof Error ? error.message : String(error)).slice(0, 300) } }, statePath);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
|
-
function npmInstall(version) {
|
|
162
|
+
export function npmInstall(version) {
|
|
163
163
|
return new Promise((resolve, reject) => {
|
|
164
164
|
const child = spawn("npm", ["install", "-g", `${PACKAGE}@${version}`, "--no-audit", "--no-fund", "--loglevel=error"], {
|
|
165
165
|
stdio: "ignore",
|
package/dist/auto-update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,6FAA6F;AAC7F,4FAA4F;AAC5F,qCAAqC;AACrC,EAAE;AACF,gGAAgG;AAChG,iGAAiG;AACjG,6FAA6F;AAC7F,+FAA+F;AAC/F,4FAA4F;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,GAAG,kBAAkB,CAAC;AACnC,MAAM,UAAU,GAAG,sDAAsD,CAAC;AAC1E,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;AAE9C,2FAA2F;AAC3F,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -29,6 +29,7 @@ import { scanSkillDir } from "./skill-scan.js";
|
|
|
29
29
|
import { syncSkillInventory } from "./skill-sync.js";
|
|
30
30
|
import { agentSkillRoots, deviceSkillsScore, indexSkills, inventoryFile, readInventory, trustedHashes } from "./skill-inventory.js";
|
|
31
31
|
import { readTrustedSkills, trustSkill, untrustSkill } from "./trusted-skills.js";
|
|
32
|
+
import { runSkillActions } from "./skill-remote.js";
|
|
32
33
|
import { runAgent } from "./run.js";
|
|
33
34
|
import { AGENT_BINARIES, installShims, listShims, pathExportLine, shimDir, uninstallShims } from "./shims.js";
|
|
34
35
|
import { runMcpProxy } from "./mcp-proxy.js";
|
|
@@ -686,7 +687,7 @@ skills.command("list")
|
|
|
686
687
|
console.log(dim("Only the agents' own skill folders were checked. Run 'beam skills index' to search your project folders too."));
|
|
687
688
|
});
|
|
688
689
|
skills.command("sync")
|
|
689
|
-
.description("Send skill names and risk scores
|
|
690
|
+
.description("Send skill names and risk scores to your workspace, if they changed since the last send, and carry out removals or file requests an administrator queued (skill text is sent only on request; BEAM_SKILL_REMOTE_ACTIONS=0 turns that off)")
|
|
690
691
|
.option("--force", "send even if nothing changed")
|
|
691
692
|
.action(async (options) => {
|
|
692
693
|
// Refreshes only the agents' own folders, so this never triggers a macOS folder-access prompt.
|
|
@@ -694,6 +695,14 @@ skills.command("sync")
|
|
|
694
695
|
const roots = await agentSkillRoots();
|
|
695
696
|
if (roots.length || !await readInventory())
|
|
696
697
|
await indexSkills({ roots });
|
|
698
|
+
// Removals and file requests queued in the dashboard run first, so the report below already reflects them.
|
|
699
|
+
const actions = await runSkillActions().catch(() => null);
|
|
700
|
+
if (actions?.removed.length)
|
|
701
|
+
console.log(`${green("✔")} Removed ${actions.removed.length} skill${actions.removed.length === 1 ? "" : "s"} requested from your workspace.`);
|
|
702
|
+
if (actions?.sent.length)
|
|
703
|
+
console.log(`${green("✔")} Sent ${actions.sent.length} skill file${actions.sent.length === 1 ? "" : "s"} requested from your workspace.`);
|
|
704
|
+
for (const skipped of actions?.skipped ?? [])
|
|
705
|
+
console.error(`✖ Skipped skill ${skipped.id}: ${skipped.reason}`);
|
|
697
706
|
const result = await syncSkillInventory({ force: options.force });
|
|
698
707
|
if (result.status === "sent")
|
|
699
708
|
console.log(`${green("✔")} Sent ${result.skills} skills to your workspace.`);
|
|
@@ -858,6 +867,8 @@ agent.command("install")
|
|
|
858
867
|
const result = await installHook(agentId);
|
|
859
868
|
await recordExpectedHooks();
|
|
860
869
|
console.log(result.alreadyInstalled ? `✔ Already installed for ${result.agent}\n → ${result.path}` : `✔ Installed beam hook for ${result.agent}\n → ${result.path}`);
|
|
870
|
+
if (result.note)
|
|
871
|
+
console.log(` ${result.note}`);
|
|
861
872
|
});
|
|
862
873
|
agent.command("uninstall")
|
|
863
874
|
.description("Detach beam's hook from a single agent's own hook config, leaving everything else installed")
|
|
@@ -875,6 +886,8 @@ agent.command("uninstall")
|
|
|
875
886
|
const result = await uninstallHook(agentId);
|
|
876
887
|
await recordExpectedHooks();
|
|
877
888
|
console.log(result.removed ? `✔ Detached beam's hook from ${result.agent}\n → ${result.path}` : `— No beam hook found for ${result.agent}.`);
|
|
889
|
+
if (result.note)
|
|
890
|
+
console.log(` ${result.note}`);
|
|
878
891
|
});
|
|
879
892
|
agent.command("extract")
|
|
880
893
|
.description("Forensic extraction: read an agent's existing session/transcript files directly, no hook or live capture required")
|
|
@@ -901,7 +914,7 @@ agent.command("install-all")
|
|
|
901
914
|
await recordExpectedHooks();
|
|
902
915
|
for (const r of results) {
|
|
903
916
|
if (r.status === "installed")
|
|
904
|
-
console.log(`✔ Installed for ${r.name}\n → ${r.path}`);
|
|
917
|
+
console.log(`✔ Installed for ${r.name}\n → ${r.path}${r.note ? `\n ${r.note}` : ""}`);
|
|
905
918
|
else if (r.status === "already-installed")
|
|
906
919
|
console.log(`✔ Already installed for ${r.name}`);
|
|
907
920
|
else if (r.status === "not-supported")
|