@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/dist/install.d.ts
CHANGED
|
@@ -3,12 +3,14 @@ export interface InstallResult {
|
|
|
3
3
|
agent: string;
|
|
4
4
|
path: string;
|
|
5
5
|
alreadyInstalled: boolean;
|
|
6
|
+
note?: string;
|
|
6
7
|
}
|
|
7
8
|
export declare function installHook(agentId: string, home?: string): Promise<InstallResult>;
|
|
8
9
|
export interface UninstallResult {
|
|
9
10
|
agent: string;
|
|
10
11
|
path: string;
|
|
11
12
|
removed: boolean;
|
|
13
|
+
note?: string;
|
|
12
14
|
}
|
|
13
15
|
export declare function uninstallHook(agentId: string, home?: string): Promise<UninstallResult>;
|
|
14
16
|
export declare function uninstallAllHooks(home?: string): Promise<UninstallResult[]>;
|
|
@@ -22,5 +24,6 @@ export interface InstallAllResult {
|
|
|
22
24
|
status: InstallAllStatus;
|
|
23
25
|
path?: string;
|
|
24
26
|
error?: string;
|
|
27
|
+
note?: string;
|
|
25
28
|
}
|
|
26
29
|
export declare function installAllDetectedHooks(home?: string): Promise<InstallAllResult[]>;
|
package/dist/install.js
CHANGED
|
@@ -2,6 +2,7 @@ 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
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { CUSTOM_INSTALLERS } from "./agent-installers.js";
|
|
5
6
|
import { AGENTS, findAgent, hookConfigFullPath } from "./agents.js";
|
|
6
7
|
const OPEN_CODE_PLUGIN = `import { spawnSync } from "node:child_process";
|
|
7
8
|
|
|
@@ -15,6 +16,13 @@ export const BeamPlugin = async () => ({
|
|
|
15
16
|
},
|
|
16
17
|
});
|
|
17
18
|
`;
|
|
19
|
+
// True when beam can wire this agent: a JSON hook file, the OpenCode plugin, or a custom installer.
|
|
20
|
+
function canInstall(agent) {
|
|
21
|
+
return agent.id === "opencode" || Boolean(agent.customInstall) || Boolean(agent.hookConfigPath && agent.mergeHookConfig);
|
|
22
|
+
}
|
|
23
|
+
function hookTarget(agentId) {
|
|
24
|
+
return { nodePath: process.execPath, cliPath: fileURLToPath(new URL("./cli.js", import.meta.url)), agentId };
|
|
25
|
+
}
|
|
18
26
|
// A bare "beam" command relies on beam's global bin symlink being resolvable on PATH -- but the
|
|
19
27
|
// shell that runs an agent's hooks (e.g. Claude Code's own PreToolUse child process) doesn't
|
|
20
28
|
// always source the same profile a user's interactive shell does, so "beam" can 404 silently
|
|
@@ -60,6 +68,10 @@ export async function installHook(agentId, home = homedir()) {
|
|
|
60
68
|
}
|
|
61
69
|
return { agent: agent.id, path, alreadyInstalled: Boolean(existing) };
|
|
62
70
|
}
|
|
71
|
+
if (agent.customInstall) {
|
|
72
|
+
const result = await CUSTOM_INSTALLERS[agent.id].install(home, hookTarget(agent.id));
|
|
73
|
+
return { agent: agent.id, ...result };
|
|
74
|
+
}
|
|
63
75
|
if (!agent.hookConfigPath || !agent.mergeHookConfig || !agent.unmergeHookConfig)
|
|
64
76
|
throw new Error(`${agent.name} has no supported hook install path yet; see 'beam agent list' for its status.`);
|
|
65
77
|
const path = hookConfigFullPath(agent, home);
|
|
@@ -106,6 +118,10 @@ export async function uninstallHook(agentId, home = homedir()) {
|
|
|
106
118
|
}
|
|
107
119
|
return { agent: agent.id, path, removed: false };
|
|
108
120
|
}
|
|
121
|
+
if (agent.customInstall) {
|
|
122
|
+
const result = await CUSTOM_INSTALLERS[agent.id].uninstall(home);
|
|
123
|
+
return { agent: agent.id, ...result };
|
|
124
|
+
}
|
|
109
125
|
if (!agent.hookConfigPath || !agent.unmergeHookConfig)
|
|
110
126
|
throw new Error(`${agent.name} has no supported hook path yet; see 'beam agent list' for its status.`);
|
|
111
127
|
const path = hookConfigFullPath(agent, home);
|
|
@@ -137,7 +153,7 @@ export async function uninstallHook(agentId, home = homedir()) {
|
|
|
137
153
|
export async function uninstallAllHooks(home = homedir()) {
|
|
138
154
|
const results = [];
|
|
139
155
|
for (const agent of AGENTS) {
|
|
140
|
-
if (
|
|
156
|
+
if (!canInstall(agent))
|
|
141
157
|
continue;
|
|
142
158
|
results.push(await uninstallHook(agent.id, home));
|
|
143
159
|
}
|
|
@@ -155,6 +171,8 @@ export async function isHookInstalled(agentId, home = homedir()) {
|
|
|
155
171
|
const existing = await readFile(join(home, agent.pluginPath), "utf8").catch(() => "");
|
|
156
172
|
return existing === OPEN_CODE_PLUGIN;
|
|
157
173
|
}
|
|
174
|
+
if (agent.customInstall)
|
|
175
|
+
return CUSTOM_INSTALLERS[agent.id].isInstalled(home);
|
|
158
176
|
if (!agent.hookConfigPath || !agent.unmergeHookConfig)
|
|
159
177
|
return false;
|
|
160
178
|
let existing = {};
|
|
@@ -175,7 +193,7 @@ export async function isHookInstalled(agentId, home = homedir()) {
|
|
|
175
193
|
export async function installedHookAgentIds(home = homedir()) {
|
|
176
194
|
const ids = [];
|
|
177
195
|
for (const agent of AGENTS) {
|
|
178
|
-
if (
|
|
196
|
+
if (!canInstall(agent))
|
|
179
197
|
continue;
|
|
180
198
|
if (await isHookInstalled(agent.id, home))
|
|
181
199
|
ids.push(agent.id);
|
|
@@ -212,13 +230,13 @@ export async function installAllDetectedHooks(home = homedir()) {
|
|
|
212
230
|
results.push({ agent: agent.id, name: agent.name, status: "not-detected" });
|
|
213
231
|
continue;
|
|
214
232
|
}
|
|
215
|
-
if (
|
|
233
|
+
if (!canInstall(agent)) {
|
|
216
234
|
results.push({ agent: agent.id, name: agent.name, status: "not-supported" });
|
|
217
235
|
continue;
|
|
218
236
|
}
|
|
219
237
|
try {
|
|
220
238
|
const result = await installHook(agent.id, home);
|
|
221
|
-
results.push({ agent: agent.id, name: agent.name, status: result.alreadyInstalled ? "already-installed" : "installed", path: result.path });
|
|
239
|
+
results.push({ agent: agent.id, name: agent.name, status: result.alreadyInstalled ? "already-installed" : "installed", path: result.path, note: result.note });
|
|
222
240
|
}
|
|
223
241
|
catch (e) {
|
|
224
242
|
results.push({ agent: agent.id, name: agent.name, status: "error", error: e instanceof Error ? e.message : String(e) });
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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
|
|
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,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAkC,MAAM,aAAa,CAAC;AAGpG,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAWxB,CAAC;AAEF,oGAAoG;AACpG,SAAS,UAAU,CAAC,KAAsB;IACxC,OAAO,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AAC3H,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AAC/G,CAAC;AAED,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,wFAAwF;AACxF,6FAA6F;AAC7F,8FAA8F;AAC9F,iGAAiG;AACjG,gGAAgG;AAChG,4FAA4F;AAC5F,4FAA4F;AAC5F,iGAAiG;AACjG,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,MAAM,GAAG,SAAS,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACjI,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,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;IACxC,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,+FAA+F;IAC/F,6FAA6F;IAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,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,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;IACxC,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,8FAA8F;IAC9F,iEAAiE;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,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,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QACjC,OAAO,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iGAAiG;AACjG,gGAAgG;AAChG,4FAA4F;AAC5F,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,IAAI,GAAG,OAAO,EAAE;IACrE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,QAAQ,KAAK,gBAAgB,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,QAAQ,GAAQ,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IACzB,8FAA8F;IAC9F,uEAAuE;IACvE,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED,4FAA4F;AAC5F,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAI,GAAG,OAAO,EAAE;IAC1D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QACjC,IAAI,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,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,CAAC,UAAU,CAAC,KAAK,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;QACnH,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,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjK,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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type InstallKind } from "./auto-update.js";
|
|
2
|
+
export type RemoteUpdateResult = {
|
|
3
|
+
status: "none" | "current" | "updated" | "failed" | "waiting";
|
|
4
|
+
version?: string;
|
|
5
|
+
reason?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const remoteUpdateEnabled: (env?: NodeJS.ProcessEnv) => boolean;
|
|
8
|
+
export type RemoteUpdateDeps = {
|
|
9
|
+
current?: string;
|
|
10
|
+
kind?: InstallKind;
|
|
11
|
+
install?: (version: string) => Promise<void>;
|
|
12
|
+
statePath?: string;
|
|
13
|
+
now?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare function runRemoteUpdate(deps?: RemoteUpdateDeps): Promise<RemoteUpdateResult>;
|
|
16
|
+
/** True when this process is a background service its manager restarts on exit (launchd KeepAlive, systemd Restart=always). */
|
|
17
|
+
export declare const supervised: (env?: NodeJS.ProcessEnv) => boolean;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { readIdentity } from "./enroll.js";
|
|
2
|
+
import { compareVersions, installKind, npmInstall, readUpdateState, writeUpdateState } from "./auto-update.js";
|
|
3
|
+
import { beamVersion, versionHeaders } from "./version.js";
|
|
4
|
+
// An administrator can queue an update for a device from the dashboard. The device finds it on its
|
|
5
|
+
// minute-long poll (GET /v1/device/update), installs that exact version the way background
|
|
6
|
+
// auto-update does -- npm only, never asking for sudo -- and reports how it went. The workspace
|
|
7
|
+
// learns the new version from the next poll. A failed install is not retried for 30 minutes.
|
|
8
|
+
// Turn it off on a device with BEAM_REMOTE_UPDATE=0.
|
|
9
|
+
const RETRY_AFTER_MS = 30 * 60_000;
|
|
10
|
+
export const remoteUpdateEnabled = (env = process.env) => !["0", "false", "off", "no"].includes(String(env.BEAM_REMOTE_UPDATE ?? "").trim().toLowerCase());
|
|
11
|
+
export async function runRemoteUpdate(deps = {}) {
|
|
12
|
+
if (!remoteUpdateEnabled())
|
|
13
|
+
return { status: "none" };
|
|
14
|
+
const identity = await readIdentity();
|
|
15
|
+
if (!identity)
|
|
16
|
+
return { status: "none" };
|
|
17
|
+
const current = deps.current ?? beamVersion();
|
|
18
|
+
const headers = { "Content-Type": "application/json", Authorization: `Bearer ${identity.deviceSecret}`, ...versionHeaders() };
|
|
19
|
+
let version;
|
|
20
|
+
try {
|
|
21
|
+
const response = await fetch(`${identity.apiBase}/v1/device/update`, { headers, signal: AbortSignal.timeout(8000) });
|
|
22
|
+
if (!response.ok)
|
|
23
|
+
return { status: "none" }; // a collector from before this route
|
|
24
|
+
version = (await response.json()).update?.version;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return { status: "none" };
|
|
28
|
+
}
|
|
29
|
+
if (!version || !/^\d+\.\d+\.\d+$/.test(version))
|
|
30
|
+
return { status: "none" };
|
|
31
|
+
if (compareVersions(version, current) <= 0)
|
|
32
|
+
return { status: "current", version };
|
|
33
|
+
const state = await readUpdateState(deps.statePath);
|
|
34
|
+
const now = deps.now ?? Date.now();
|
|
35
|
+
if (state.remoteAttempt?.version === version && now - Date.parse(state.remoteAttempt.at) < RETRY_AFTER_MS)
|
|
36
|
+
return { status: "waiting", version };
|
|
37
|
+
await writeUpdateState({ ...state, remoteAttempt: { version, at: new Date(now).toISOString() } }, deps.statePath);
|
|
38
|
+
const report = (ok, reason) => fetch(`${identity.apiBase}/v1/device/update-result`, { method: "POST", headers, body: JSON.stringify({ version, ok, reason }), signal: AbortSignal.timeout(8000) }).catch(() => { });
|
|
39
|
+
const kind = deps.kind ?? installKind();
|
|
40
|
+
if (kind !== "npm") {
|
|
41
|
+
const reason = kind === "binary" ? "Standalone binary: reinstall with the install script, it can't update itself." : "Source checkout: update it with git.";
|
|
42
|
+
await report(false, reason);
|
|
43
|
+
return { status: "failed", version, reason };
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
await (deps.install ?? npmInstall)(version);
|
|
47
|
+
await report(true);
|
|
48
|
+
return { status: "updated", version };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const reason = (error instanceof Error ? error.message : String(error)).slice(0, 300);
|
|
52
|
+
await report(false, reason);
|
|
53
|
+
return { status: "failed", version, reason };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** True when this process is a background service its manager restarts on exit (launchd KeepAlive, systemd Restart=always). */
|
|
57
|
+
export const supervised = (env = process.env) => Boolean(env.XPC_SERVICE_NAME && env.XPC_SERVICE_NAME !== "0") || Boolean(env.INVOCATION_ID);
|
|
58
|
+
//# sourceMappingURL=remote-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-update.js","sourceRoot":"","sources":["../src/remote-update.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.js
CHANGED
|
@@ -11,6 +11,8 @@ import { syncPolicy } from "./forward.js";
|
|
|
11
11
|
import { installAllDetectedHooks } from "./install.js";
|
|
12
12
|
import { startOsMonitor } from "./os-monitor.js";
|
|
13
13
|
import { checkSkillsIfDue } from "./skill-watch.js";
|
|
14
|
+
import { runSkillActions } from "./skill-remote.js";
|
|
15
|
+
import { runRemoteUpdate, supervised } from "./remote-update.js";
|
|
14
16
|
import { checkForTampering, recordExpectedHooks } from "./tamper.js";
|
|
15
17
|
function toWebRequest(req) {
|
|
16
18
|
return new Promise((resolvePromise, reject) => {
|
|
@@ -102,7 +104,21 @@ export async function startServer(options = {}) {
|
|
|
102
104
|
let policyTimer;
|
|
103
105
|
const identity = await readIdentity();
|
|
104
106
|
if (identity) {
|
|
105
|
-
|
|
107
|
+
// The same minute-long poll also picks up skill removals and file requests queued in the dashboard (skill-remote.ts).
|
|
108
|
+
let skillActionsBusy = false;
|
|
109
|
+
const poll = () => {
|
|
110
|
+
void syncPolicy().catch(() => { });
|
|
111
|
+
if (skillActionsBusy)
|
|
112
|
+
return;
|
|
113
|
+
skillActionsBusy = true;
|
|
114
|
+
// An update an administrator queued installs here; a supervised service then exits so its manager starts the new version.
|
|
115
|
+
void (async () => {
|
|
116
|
+
const update = await runRemoteUpdate().catch(() => null);
|
|
117
|
+
await runSkillActions().catch(() => { });
|
|
118
|
+
if (update?.status === "updated" && supervised())
|
|
119
|
+
process.exit(0);
|
|
120
|
+
})().finally(() => { skillActionsBusy = false; });
|
|
121
|
+
};
|
|
106
122
|
poll();
|
|
107
123
|
policyTimer = setInterval(poll, 60_000);
|
|
108
124
|
policyTimer.unref?.();
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const MAX_FILE_BYTES: number;
|
|
2
|
+
export type SkillActionsResult = {
|
|
3
|
+
removed: string[];
|
|
4
|
+
sent: string[];
|
|
5
|
+
skipped: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
reason: string;
|
|
8
|
+
}>;
|
|
9
|
+
};
|
|
10
|
+
export declare const remoteActionsEnabled: (env?: NodeJS.ProcessEnv) => boolean;
|
|
11
|
+
export declare function runSkillActions(options?: {
|
|
12
|
+
home?: string;
|
|
13
|
+
}): Promise<SkillActionsResult | null>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { lstat, open, readdir, realpath, rm, unlink } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join, sep } from "node:path";
|
|
4
|
+
import { redact } from "./core.js";
|
|
5
|
+
import { readIdentity } from "./enroll.js";
|
|
6
|
+
import { agentSkillRoots, indexSkills, readInventory } from "./skill-inventory.js";
|
|
7
|
+
import { syncSkillInventory } from "./skill-sync.js";
|
|
8
|
+
import { versionHeaders } from "./version.js";
|
|
9
|
+
// What an administrator can ask this device to do with a skill from the dashboard: delete it, or
|
|
10
|
+
// send its SKILL.md once. Both are polled from the workspace (GET /v1/skills/actions), named by the
|
|
11
|
+
// skill's id from this machine's own inventory -- the workspace never supplies a path, so a request
|
|
12
|
+
// can only reach a skill beam already found here. Turn it off with BEAM_SKILL_REMOTE_ACTIONS=0.
|
|
13
|
+
export const MAX_FILE_BYTES = 64 * 1024;
|
|
14
|
+
export const remoteActionsEnabled = (env = process.env) => !["0", "false", "off", "no"].includes(String(env.BEAM_SKILL_REMOTE_ACTIONS ?? "").trim().toLowerCase());
|
|
15
|
+
async function skillFile(dir) {
|
|
16
|
+
try {
|
|
17
|
+
const name = (await readdir(dir)).find(entry => entry.toLowerCase() === "skill.md");
|
|
18
|
+
return name ? join(dir, name) : null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// A skill folder is only deleted when it is clearly one: it holds a SKILL.md, sits inside the home
|
|
25
|
+
// folder or a place beam searched, and is not one of those places itself. A symlinked skill (a
|
|
26
|
+
// linked package) loses the link, never the folder it points to.
|
|
27
|
+
async function removeSkillDir(skill, roots, home) {
|
|
28
|
+
const dir = skill.dir;
|
|
29
|
+
const inside = [home, ...roots].some(root => dir.startsWith(root + sep));
|
|
30
|
+
if (!inside || [home, ...roots].includes(dir))
|
|
31
|
+
return "outside the places beam searched";
|
|
32
|
+
let info;
|
|
33
|
+
try {
|
|
34
|
+
info = await lstat(dir);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
} // already gone
|
|
39
|
+
if (!await skillFile(dir))
|
|
40
|
+
return "no SKILL.md in that folder";
|
|
41
|
+
if (info.isSymbolicLink()) {
|
|
42
|
+
await unlink(dir);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
// Compare real paths on both sides (macOS temp and home folders are reached through symlinks).
|
|
46
|
+
const real = await realpath(dir);
|
|
47
|
+
const realRoots = await Promise.all([home, ...roots].map(root => realpath(root).catch(() => root)));
|
|
48
|
+
if (!realRoots.some(root => real.startsWith(root + sep)))
|
|
49
|
+
return "resolves outside the places beam searched";
|
|
50
|
+
await rm(dir, { recursive: true, force: true });
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
async function readSkillText(dir) {
|
|
54
|
+
const file = await skillFile(dir);
|
|
55
|
+
if (!file)
|
|
56
|
+
return null;
|
|
57
|
+
const handle = await open(file, "r");
|
|
58
|
+
try {
|
|
59
|
+
const buffer = Buffer.alloc(MAX_FILE_BYTES + 1);
|
|
60
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
61
|
+
const truncated = bytesRead > MAX_FILE_BYTES;
|
|
62
|
+
return { content: redact(buffer.subarray(0, Math.min(bytesRead, MAX_FILE_BYTES)).toString("utf8")), truncated };
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
await handle.close();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export async function runSkillActions(options = {}) {
|
|
69
|
+
if (!remoteActionsEnabled())
|
|
70
|
+
return null;
|
|
71
|
+
const identity = await readIdentity();
|
|
72
|
+
if (!identity)
|
|
73
|
+
return null;
|
|
74
|
+
const headers = { "Content-Type": "application/json", Authorization: `Bearer ${identity.deviceSecret}`, ...versionHeaders() };
|
|
75
|
+
let actions;
|
|
76
|
+
try {
|
|
77
|
+
const response = await fetch(`${identity.apiBase}/v1/skills/actions`, { headers, signal: AbortSignal.timeout(8000) });
|
|
78
|
+
if (!response.ok)
|
|
79
|
+
return null; // an older collector has no such route
|
|
80
|
+
actions = await response.json();
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const remove = actions.remove ?? [];
|
|
86
|
+
const read = actions.read ?? [];
|
|
87
|
+
if (!remove.length && !read.length)
|
|
88
|
+
return null;
|
|
89
|
+
const home = options.home ?? homedir();
|
|
90
|
+
const inventory = await readInventory();
|
|
91
|
+
const byId = new Map((inventory?.skills ?? []).map(s => [s.id, s]));
|
|
92
|
+
const result = { removed: [], sent: [], skipped: [] };
|
|
93
|
+
for (const { id } of read) {
|
|
94
|
+
const skill = byId.get(id);
|
|
95
|
+
if (!skill) {
|
|
96
|
+
result.skipped.push({ id, reason: "not in this device's inventory" });
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const text = await readSkillText(skill.dir);
|
|
101
|
+
if (!text) {
|
|
102
|
+
result.skipped.push({ id, reason: "SKILL.md not found" });
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const response = await fetch(`${identity.apiBase}/v1/skills/content`, { method: "POST", headers, body: JSON.stringify({ id, hash: skill.hash, ...text }), signal: AbortSignal.timeout(15_000) });
|
|
106
|
+
if (response.ok)
|
|
107
|
+
result.sent.push(id);
|
|
108
|
+
else
|
|
109
|
+
result.skipped.push({ id, reason: `workspace responded with HTTP ${response.status}` });
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
result.skipped.push({ id, reason: error instanceof Error ? error.message : String(error) });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (remove.length) {
|
|
116
|
+
const roots = [...(inventory?.roots ?? []), ...await agentSkillRoots(home)];
|
|
117
|
+
const parents = new Set();
|
|
118
|
+
for (const { id } of remove) {
|
|
119
|
+
const skill = byId.get(id);
|
|
120
|
+
if (!skill) {
|
|
121
|
+
result.skipped.push({ id, reason: "not in this device's inventory" });
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const refused = await removeSkillDir(skill, roots, home);
|
|
126
|
+
if (refused)
|
|
127
|
+
result.skipped.push({ id, reason: refused });
|
|
128
|
+
else {
|
|
129
|
+
result.removed.push(skill.dir);
|
|
130
|
+
parents.add(dirname(skill.dir));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
result.skipped.push({ id, reason: error instanceof Error ? error.message : String(error) });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (result.removed.length) {
|
|
138
|
+
// Re-index where the skills were, then report: the workspace drops them from its list.
|
|
139
|
+
await indexSkills({ roots: [...parents] }, home).catch(() => { });
|
|
140
|
+
await syncSkillInventory({ force: true, home }).catch(() => { });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=skill-remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-remote.js","sourceRoot":"","sources":["../src/skill-remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,iGAAiG;AACjG,oGAAoG;AACpG,oGAAoG;AACpG,gGAAgG;AAChG,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAIxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAEnK,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,CAAC;QAAC,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC3J,CAAC;AAED,mGAAmG;AACnG,+FAA+F;AAC/F,iEAAiE;AACjE,KAAK,UAAU,cAAc,CAAC,KAAqB,EAAE,KAAe,EAAE,IAAY;IAChF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,kCAAkC,CAAC;IACzF,IAAI,IAAI,CAAC;IAAC,IAAI,CAAC;QAAC,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC,CAAC,eAAe;IACjF,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,4BAA4B,CAAC;IAC/D,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAC9D,+FAA+F;IAC/F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QAAE,OAAO,2CAA2C,CAAC;IAC7G,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;IAClH,CAAC;YAAS,CAAC;QAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA6B,EAAE;IACnE,IAAI,CAAC,oBAAoB,EAAE;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;IAC9H,IAAI,OAAyE,CAAC;IAC9E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,oBAAoB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,uCAAuC;QACtE,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE1E,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAChG,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACnF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjM,IAAI,QAAQ,CAAC,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;gBAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,iCAAiC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IAClH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAChG,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACzD,IAAI,OAAO;oBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;qBAAM,CAAC;oBAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,CAAC;YACtI,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QAClH,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,uFAAuF;YACvF,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
let cached;
|
|
3
|
+
/** This install's version, from its own package.json. */
|
|
4
|
+
export function beamVersion() {
|
|
5
|
+
if (cached)
|
|
6
|
+
return cached;
|
|
7
|
+
try {
|
|
8
|
+
cached = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
cached = "0.0.0";
|
|
12
|
+
}
|
|
13
|
+
return cached;
|
|
14
|
+
}
|
|
15
|
+
/** Header the workspace reads to show which beam version each device runs. */
|
|
16
|
+
export const versionHeaders = () => ({ "X-Beam-Version": beamVersion() });
|
|
17
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,IAAI,MAA0B,CAAC;AAC/B,yDAAyD;AACzD,MAAM,UAAU,WAAW;IACzB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,CAAC;QAAC,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,GAAG,OAAO,CAAC;IAAC,CAAC;IAC5J,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,GAA2B,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-beam/beam",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.37",
|
|
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",
|