@agent-beam/beam 0.2.21 → 0.2.22
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/cli.js +179 -2
- package/dist/cli.js.map +1 -1
- package/dist/client.js +23 -6
- package/dist/client.js.map +1 -1
- package/dist/forward.d.ts +2 -0
- package/dist/forward.js +19 -0
- package/dist/forward.js.map +1 -1
- package/dist/hook-adapters.js +14 -1
- package/dist/hook-adapters.js.map +1 -1
- package/dist/serve.d.ts +2 -0
- package/dist/serve.js +23 -1
- package/dist/serve.js.map +1 -1
- package/dist/setup.js +32 -1
- package/dist/setup.js.map +1 -1
- package/dist/skill-context.d.ts +11 -0
- package/dist/skill-context.js +78 -0
- package/dist/skill-context.js.map +1 -0
- package/dist/skill-gate.d.ts +21 -0
- package/dist/skill-gate.js +180 -0
- package/dist/skill-gate.js.map +1 -0
- package/dist/skill-inventory.d.ts +81 -0
- package/dist/skill-inventory.js +167 -0
- package/dist/skill-inventory.js.map +1 -0
- package/dist/skill-risk-rules.d.ts +17 -0
- package/dist/skill-risk-rules.js +61 -0
- package/dist/skill-risk-rules.js.map +1 -0
- package/dist/skill-scan.d.ts +27 -0
- package/dist/skill-scan.js +157 -0
- package/dist/skill-scan.js.map +1 -0
- package/dist/skill-setup.d.ts +11 -0
- package/dist/skill-setup.js +26 -0
- package/dist/skill-setup.js.map +1 -0
- package/dist/skill-sync.d.ts +40 -0
- package/dist/skill-sync.js +79 -0
- package/dist/skill-sync.js.map +1 -0
- package/dist/skill-watch.d.ts +16 -0
- package/dist/skill-watch.js +41 -0
- package/dist/skill-watch.js.map +1 -0
- package/dist/skills.d.ts +33 -0
- package/dist/skills.js +139 -0
- package/dist/skills.js.map +1 -0
- package/dist/trusted-skills.d.ts +9 -0
- package/dist/trusted-skills.js +31 -0
- package/dist/trusted-skills.js.map +1 -0
- package/dist/tty-prompt.js +3 -1
- package/dist/tty-prompt.js.map +1 -1
- package/package.json +1 -1
package/dist/hook-adapters.js
CHANGED
|
@@ -6,13 +6,26 @@ function passthrough(raw) {
|
|
|
6
6
|
}
|
|
7
7
|
// GitHub Copilot CLI's preToolUse payload is camelCase and has no hook_event_name field —
|
|
8
8
|
// it's implied by which hooks.json array the handler is registered under.
|
|
9
|
+
// toolArgs arrives as a JSON *string* (docs.github.com Copilot hooks reference), so parse it --
|
|
10
|
+
// left as a string, everything downstream reads tool_input as empty.
|
|
11
|
+
function parseArgs(value) {
|
|
12
|
+
if (typeof value !== "string")
|
|
13
|
+
return value;
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(value);
|
|
16
|
+
return parsed && typeof parsed === "object" ? parsed : value;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
9
22
|
function copilotCamel(raw) {
|
|
10
23
|
return {
|
|
11
24
|
...raw,
|
|
12
25
|
session_id: raw.sessionId ?? raw.session_id,
|
|
13
26
|
cwd: raw.cwd,
|
|
14
27
|
tool_name: raw.toolName ?? raw.tool_name,
|
|
15
|
-
tool_input: raw.toolArgs ?? raw.tool_input,
|
|
28
|
+
tool_input: parseArgs(raw.toolArgs ?? raw.tool_input),
|
|
16
29
|
hook_event_name: raw.hook_event_name ?? "PreToolUse",
|
|
17
30
|
};
|
|
18
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-adapters.js","sourceRoot":"","sources":["../src/hook-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,aAAa,CAAC;AAElD,8FAA8F;AAC9F,+FAA+F;AAC/F,SAAS,WAAW,CAAC,GAAQ;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0FAA0F;AAC1F,0EAA0E;AAC1E,SAAS,YAAY,CAAC,GAAQ;IAC5B,OAAO;QACL,GAAG,GAAG;QACN,UAAU,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU;QAC3C,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS;QACxC,UAAU,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"hook-adapters.js","sourceRoot":"","sources":["../src/hook-adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface StartServerOptions {
|
|
|
11
11
|
agentHome?: string;
|
|
12
12
|
/** Whether to run OS-level process/network monitoring (see os-monitor.ts). Defaults to on; tests disable it. */
|
|
13
13
|
osMonitor?: boolean;
|
|
14
|
+
/** Whether to watch the agents' skill folders and report changes. Defaults to on unless osMonitor is off, so tests never touch the real home. */
|
|
15
|
+
skillIndex?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export declare function startServer(options?: StartServerOptions): Promise<{
|
|
16
18
|
url: string;
|
package/dist/serve.js
CHANGED
|
@@ -10,6 +10,7 @@ import { readIdentity } from "./enroll.js";
|
|
|
10
10
|
import { syncPolicy } from "./forward.js";
|
|
11
11
|
import { installAllDetectedHooks } from "./install.js";
|
|
12
12
|
import { startOsMonitor } from "./os-monitor.js";
|
|
13
|
+
import { checkSkillsIfDue } from "./skill-watch.js";
|
|
13
14
|
import { checkForTampering, recordExpectedHooks } from "./tamper.js";
|
|
14
15
|
function toWebRequest(req) {
|
|
15
16
|
return new Promise((resolvePromise, reject) => {
|
|
@@ -131,11 +132,32 @@ export async function startServer(options = {}) {
|
|
|
131
132
|
// otherwise OS-monitor rows would only ever show up in the local studio view.
|
|
132
133
|
app.forwardQueue.push(events);
|
|
133
134
|
});
|
|
135
|
+
// Once a day (and at startup, if a day has passed since the last skill scan), looks for skills that
|
|
136
|
+
// were added or changed and tells the workspace -- no manual `beam skills sync` needed. Skills
|
|
137
|
+
// only: policy sync, tamper checks and event forwarding above keep their own timers. The hourly
|
|
138
|
+
// tick below just asks "is a day up yet?" (one small file read), so a laptop that was asleep at
|
|
139
|
+
// the moment it was due still catches up soon after waking. A report is sent only if names or
|
|
140
|
+
// scores changed (skill-sync.ts); see skill-watch.ts for what gets scanned.
|
|
141
|
+
let skillTimer;
|
|
142
|
+
if (options.skillIndex ?? options.osMonitor !== false) {
|
|
143
|
+
const run = () => {
|
|
144
|
+
void checkSkillsIfDue().then(result => {
|
|
145
|
+
if (!result)
|
|
146
|
+
return;
|
|
147
|
+
for (const dir of [...result.changes.added, ...result.changes.modified])
|
|
148
|
+
console.error(`\nBeam skill inventory: ${result.changes.added.includes(dir) ? "new" : "modified"} skill ${dir} (run 'beam skills list')`);
|
|
149
|
+
}).catch(() => { });
|
|
150
|
+
};
|
|
151
|
+
run();
|
|
152
|
+
skillTimer = setInterval(run, 60 * 60_000);
|
|
153
|
+
skillTimer.unref?.();
|
|
154
|
+
}
|
|
134
155
|
return {
|
|
135
156
|
url: `http://${hostname}:${boundPort}`, token, directory, customRules, agentInstalls,
|
|
136
157
|
policySync: Boolean(identity),
|
|
137
158
|
close: () => { if (policyTimer)
|
|
138
|
-
clearInterval(policyTimer); clearInterval(tamperTimer);
|
|
159
|
+
clearInterval(policyTimer); clearInterval(tamperTimer); if (skillTimer)
|
|
160
|
+
clearInterval(skillTimer); osMonitor.stop(); app.forwardQueue.flush(); server.close(); },
|
|
139
161
|
};
|
|
140
162
|
}
|
|
141
163
|
//# sourceMappingURL=serve.js.map
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAyB,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAErE,SAAS,YAAY,CAAC,GAAoB;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;gBAC/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;wBAAE,KAAK,MAAM,CAAC,IAAI,KAAK;4BAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;yBACnE,IAAI,KAAK,KAAK,SAAS;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;gBACD,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;gBACzE,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACvH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAkB,EAAE,GAAmB;IACrE,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAkBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAA8B,EAAE;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,CAAC;IAC1D,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,0FAA0F;IAC1F,8FAA8F;IAC9F,4FAA4F;IAC5F,sFAAsF;IACtF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAwB,CAAC,CAAC;IACrG,wFAAwF;IACxF,4FAA4F;IAC5F,2FAA2F;IAC3F,0FAA0F;IAC1F,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrD,gGAAgG;IAChG,6FAA6F;IAC7F,iFAAiF;IACjF,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC;YAAC,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAC1F,OAAO,CAAC,EAAE,CAAC;YACT,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,CAAC;YAC5D,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAE1F,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnL,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;IAEjD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,YAAY,CAAC,GAAG,CAAC;aACd,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aACzC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;aACvD,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACpF,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YAC3C,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;QACrE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,cAAc,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,qFAAqF;IACrF,IAAI,WAAuC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,EAAE,CAAC;QACP,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,4FAA4F;IAC5F,0FAA0F;IAC1F,uFAAuF;IACvF,2EAA2E;IAC3E,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,KAAK,iBAAiB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;YACpD,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,OAAO;YAC3B,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;IAEtB,+FAA+F;IAC/F,8FAA8F;IAC9F,+EAA+E;IAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QACvG,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,oFAAoF;QACpF,8EAA8E;QAC9E,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,oGAAoG;IACpG,+FAA+F;IAC/F,gGAAgG;IAChG,gGAAgG;IAChG,8FAA8F;IAC9F,4EAA4E;IAC5E,IAAI,UAAsC,CAAC;IAC3C,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,GAAG,EAAE;YAAG,KAAK,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACxD,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACpB,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAAE,OAAO,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,UAAU,GAAG,2BAA2B,CAAC,CAAC;YACrN,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC;QACtB,GAAG,EAAE,CAAC;QACN,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;QAC3C,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,OAAO;QACL,GAAG,EAAE,UAAU,QAAQ,IAAI,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa;QACpF,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC7B,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,WAAW;YAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU;YAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACjM,CAAC;AACJ,CAAC"}
|
package/dist/setup.js
CHANGED
|
@@ -12,6 +12,7 @@ import { syncPolicy } from "./forward.js";
|
|
|
12
12
|
import { AGENT_BINARIES } from "./shims.js";
|
|
13
13
|
import { installMcpProxies } from "./mcp-config.js";
|
|
14
14
|
import { forwardMcpInventory } from "./forward.js";
|
|
15
|
+
import { indexAndReportSkills } from "./skill-setup.js";
|
|
15
16
|
const TOTAL_STEPS = 5;
|
|
16
17
|
function step(n, title) {
|
|
17
18
|
console.log(`\n${indigoOut(`Step ${n}/${TOTAL_STEPS}`)} ${title}`);
|
|
@@ -33,7 +34,7 @@ export const promptYesNo = confirm;
|
|
|
33
34
|
function statusValue(value) {
|
|
34
35
|
if (value.startsWith("failed"))
|
|
35
36
|
return red(value);
|
|
36
|
-
if (value === "none" || value === "not connected" || value === "not started" || value === "skipped")
|
|
37
|
+
if (value === "none" || value === "none found" || value === "not connected" || value === "not started" || value === "skipped")
|
|
37
38
|
return dim(value);
|
|
38
39
|
return green(value);
|
|
39
40
|
}
|
|
@@ -51,6 +52,7 @@ export async function runSetup() {
|
|
|
51
52
|
let dashboardStatus = "not connected";
|
|
52
53
|
let serviceStatus = "not started";
|
|
53
54
|
let policyStatus = "not enrolled";
|
|
55
|
+
let skillsStatus = "none found";
|
|
54
56
|
// --- Step 1: detect agents, then let the user choose which ones get the hook ---
|
|
55
57
|
step(1, "Detecting AI agents on this machine");
|
|
56
58
|
const detected = await detectAgents();
|
|
@@ -158,6 +160,34 @@ export async function runSetup() {
|
|
|
158
160
|
else
|
|
159
161
|
fail(`Could not send MCP inventory (${sent.reason ?? "unknown reason"}); local MCP protection remains active and it will be retried on the next setup.`);
|
|
160
162
|
}
|
|
163
|
+
// --- Skills: index what is installed and report it, so the dashboard has the full list from day one ---
|
|
164
|
+
// The agents' own skill folders are always covered. Searching the rest of the home folder for
|
|
165
|
+
// skills inside project repos is what makes macOS ask for Desktop/Documents/Downloads access, so
|
|
166
|
+
// it is a question here -- and never happens in a non-interactive run.
|
|
167
|
+
console.log(`\n ${dim("Skills")}`);
|
|
168
|
+
const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
169
|
+
const searchProjects = interactive && await promptYesNo(" Also search your home folder for skills inside project folders? (macOS may ask for access to Desktop, Documents and Downloads)");
|
|
170
|
+
try {
|
|
171
|
+
const skills = await withSpinner("Indexing installed skills", () => indexAndReportSkills({ searchProjects }));
|
|
172
|
+
const risky = skills.highRisk ? `, ${skills.highRisk} high/critical` : "";
|
|
173
|
+
if (skills.total)
|
|
174
|
+
ok(`Found ${skills.total} skill${skills.total === 1 ? "" : "s"}${risky}${searchProjects ? "" : " in your agents' skill folders"}.`);
|
|
175
|
+
else
|
|
176
|
+
skip("No skills found.");
|
|
177
|
+
if (skills.sync.status === "sent")
|
|
178
|
+
ok("Reported skill names and risk scores to the dashboard.");
|
|
179
|
+
else if (skills.sync.status === "unchanged")
|
|
180
|
+
ok("Dashboard already has this skill list.");
|
|
181
|
+
else if (skills.sync.status === "failed")
|
|
182
|
+
fail(`Could not report skills (${skills.sync.reason ?? "unknown reason"}); it will be retried by the daily check.`);
|
|
183
|
+
skillsStatus = `${skills.total} found${risky}${skills.sync.status === "sent" || skills.sync.status === "unchanged" ? ", reported" : ""}`;
|
|
184
|
+
if (!searchProjects && skills.total)
|
|
185
|
+
skip("Project folders weren't searched. Run 'beam skills index' any time to include them.");
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
skillsStatus = `failed: ${err.message}`;
|
|
189
|
+
fail(`Could not index skills: ${err.message}`);
|
|
190
|
+
}
|
|
161
191
|
// --- Step 4: background collector service ---
|
|
162
192
|
step(4, "Starting the background collector");
|
|
163
193
|
const shouldStart = await promptYesNo(" Start the beam background service now (survives reboot/logout)?");
|
|
@@ -189,6 +219,7 @@ export async function runSetup() {
|
|
|
189
219
|
{ label: "Agent hooks", value: agentSummaryColor(agentSummary) },
|
|
190
220
|
{ label: "Dashboard", value: statusValue(dashboardStatus) },
|
|
191
221
|
{ label: "Policy", value: statusValue(policyStatus) },
|
|
222
|
+
{ label: "Skills", value: statusValue(skillsStatus) },
|
|
192
223
|
{ label: "Service", value: statusValue(serviceStatus) },
|
|
193
224
|
]));
|
|
194
225
|
console.log(`\n${dim("Useful next commands:")}`);
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type Neighbours = {
|
|
2
|
+
prev?: string;
|
|
3
|
+
next?: string;
|
|
4
|
+
};
|
|
5
|
+
/** `phrase`: natural-language instructions (prompt injection). `command`: shell commands and paths. */
|
|
6
|
+
export declare function isMention(line: string, start: number, length: number, kind: "phrase" | "command", near?: Neighbours): boolean;
|
|
7
|
+
/** First match of `re` in `line` that is an actual instruction (not just a mention), or null. */
|
|
8
|
+
export declare function firstInstruction(line: string, re: RegExp, kind: "phrase" | "command", near?: Neighbours): {
|
|
9
|
+
index: number;
|
|
10
|
+
text: string;
|
|
11
|
+
} | null;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Is a rule's match an instruction, or just a mention of one? A skill that teaches an agent to
|
|
2
|
+
// resist prompt injection has to quote injection phrases ("ignore previous instructions"), and a
|
|
3
|
+
// security-review skill has to name `sudo` and `curl | sh` to tell you to flag them. Matching on
|
|
4
|
+
// the words alone flags those skills as malicious, which is the opposite of what they are. This
|
|
5
|
+
// looks at the words around a match; a match that is only being mentioned is not reported.
|
|
6
|
+
//
|
|
7
|
+
// It is heuristic: a determined attacker could word a real instruction to look like a mention, so
|
|
8
|
+
// this narrows false alarms, it isn't a guarantee. Only the context immediately around the match
|
|
9
|
+
// counts, and an unclosed quote never excuses anything.
|
|
10
|
+
// A negation just before the match: "never use sudo", "avoid curl | sh", "do not ignore ...".
|
|
11
|
+
const NEGATION = /(?:\bnever|\bdon'?t|\bdo not|\bavoid|\bmust not|\bshould not|\bshouldn'?t|\bwithout|\bno need to|\binstead of|\bnot to|\bcannot|\bcan'?t)\s+(?:\w+\s+){0,3}$/i;
|
|
12
|
+
// Framing that introduces an example rather than an order: "if the file contains ...", "such as ...".
|
|
13
|
+
const EXAMPLE_FRAMING = /\b(?:if|when|whenever)\b[^.!?\n]{0,120}\b(?:contains?|says?|includes?|asks?|tells?|instructs?|reads?|addressed)\b|\b(?:that|which|who)\s+(?:\w+\s+){0,2}(?:says?|contains?|includes?|tells?|asks?|reads?)\b|\b(?:shaped|formatted|worded|phrased|disguised)\s+(?:like|as|to look like)\b|\b(?:such as|for example|for instance|e\.g\.|i\.e\.|phrases? like|text like|something like|looks? like|attempts? to)\b/i;
|
|
14
|
+
// Verbs of review, used for risky commands only ("flag any skill that runs sudo"). Not applied to
|
|
15
|
+
// injection phrases, where a fake "detect:" prefix would be too easy to add.
|
|
16
|
+
const DETECTION_FRAMING = /\b(?:flag|detect|look(?:ing)? for|check(?:ing)? for|scan(?:ning)? for|search(?:ing)? for|grep(?:ping)? for|audit|report|reject|block|forbid|prohibit|disallow)\b/i;
|
|
17
|
+
// The same sentence goes on to refuse the quoted thing, with an object pointing back at it:
|
|
18
|
+
// `"ignore previous instructions" ... do not follow it`. "Do not follow" with nothing to point at,
|
|
19
|
+
// or in a later sentence, doesn't count -- otherwise appending that to a real injection would hide it.
|
|
20
|
+
const REFUSAL_AFTER = /\b(?:do not|don'?t|never|must not|should not|shouldn'?t|refuse to)\s+(?:\w+\s+){0,2}?(?:follow|obey|comply with|act on|execute|trust|file|treat|use)\s+(?:it|them|that|this|those|any of (?:it|them|these|those))\b/i;
|
|
21
|
+
// After the match, the text says what to do with it or what it is: "treat these strings as inert
|
|
22
|
+
// labels", "... is a test case, not a directive".
|
|
23
|
+
const AFTER_DEFENSE = /\b(?:treat|handle)\s+(?:these|this|them|it|those)(?:\s+\w+){0,2}\s+as\s+(?:inert|data|text|labels?|untrusted|content)\b|\b(?:is|are)\s+(?:a\s+|an\s+)?(?:test cases?|examples?|injection|attacks?|not an? (?:directive|instruction))\b/i;
|
|
24
|
+
// "screens that don't tell the user ..." describes something; it doesn't order it.
|
|
25
|
+
const RELATIVE_BEFORE = /\b(?:that|which|who|whose)\s+(?:\w+\s+){0,2}$/i;
|
|
26
|
+
const ANY_NEGATION = /\b(?:never|not|don'?t|cannot|can'?t|must not|shouldn'?t|no)\b/i;
|
|
27
|
+
// Quoted, with the closing quote actually present after the match.
|
|
28
|
+
function insideQuotes(line, start, end) {
|
|
29
|
+
const before = line.slice(0, start), after = line.slice(end);
|
|
30
|
+
for (const ch of ['"', "`"]) {
|
|
31
|
+
if ((before.split(ch).length - 1) % 2 === 1 && after.includes(ch))
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return (before.lastIndexOf("“") > before.lastIndexOf("”") && after.includes("”"))
|
|
35
|
+
|| (before.lastIndexOf("‘") > before.lastIndexOf("’") && after.includes("’"));
|
|
36
|
+
}
|
|
37
|
+
/** `phrase`: natural-language instructions (prompt injection). `command`: shell commands and paths. */
|
|
38
|
+
export function isMention(line, start, length, kind, near = {}) {
|
|
39
|
+
const end = start + length;
|
|
40
|
+
// A sentence often runs across a line break, so the neighbouring lines count as context too.
|
|
41
|
+
const before = `${near.prev ? `${near.prev} ` : ""}${line.slice(0, start)}`.slice(-160);
|
|
42
|
+
if (NEGATION.test(before.slice(-40)))
|
|
43
|
+
return true;
|
|
44
|
+
if (kind === "command")
|
|
45
|
+
return EXAMPLE_FRAMING.test(before) || DETECTION_FRAMING.test(before);
|
|
46
|
+
// Injection phrases. A bare quote is not enough (`Always start with "ignore previous
|
|
47
|
+
// instructions"` is still an order); it has to be framed as an example or reviewed, or refused
|
|
48
|
+
// or explained in the same sentence.
|
|
49
|
+
const sentenceAfter = `${line.slice(end)}${near.next ? ` ${near.next}` : ""}`.split(/[.!?]\s/)[0]?.slice(0, 300) ?? "";
|
|
50
|
+
const defended = REFUSAL_AFTER.test(sentenceAfter) || AFTER_DEFENSE.test(sentenceAfter);
|
|
51
|
+
if (insideQuotes(line, start, end)) {
|
|
52
|
+
if (EXAMPLE_FRAMING.test(before) || DETECTION_FRAMING.test(before) || defended)
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
else if (defended)
|
|
56
|
+
return true;
|
|
57
|
+
if (RELATIVE_BEFORE.test(before.slice(-30)))
|
|
58
|
+
return true;
|
|
59
|
+
// "Never write memory from a paste without showing the user your plan" needs the user to be shown.
|
|
60
|
+
// A "without ..." match that already sits inside a negated sentence is a double negative.
|
|
61
|
+
if (/^without\b/i.test(line.slice(start, end))) {
|
|
62
|
+
const sentence = before.split(/[.!?]\s/).pop() ?? "";
|
|
63
|
+
if (ANY_NEGATION.test(sentence))
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
/** First match of `re` in `line` that is an actual instruction (not just a mention), or null. */
|
|
69
|
+
export function firstInstruction(line, re, kind, near = {}) {
|
|
70
|
+
const global = new RegExp(re.source, re.flags.includes("g") ? re.flags : `${re.flags}g`);
|
|
71
|
+
for (const m of line.matchAll(global)) {
|
|
72
|
+
const index = m.index ?? 0;
|
|
73
|
+
if (!isMention(line, index, m[0].length, kind, near))
|
|
74
|
+
return { index, text: m[0] };
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=skill-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-context.js","sourceRoot":"","sources":["../src/skill-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type SkillScan } from "./skill-scan.js";
|
|
2
|
+
export type SkillGateResult = {
|
|
3
|
+
action: "allow" | "ask" | "deny";
|
|
4
|
+
reason?: string;
|
|
5
|
+
scan: SkillScan;
|
|
6
|
+
};
|
|
7
|
+
export type Target = {
|
|
8
|
+
kind: "dir";
|
|
9
|
+
path: string;
|
|
10
|
+
name: string;
|
|
11
|
+
} | {
|
|
12
|
+
kind: "file";
|
|
13
|
+
path: string;
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function coerceInput(input: unknown): Record<string, unknown>;
|
|
17
|
+
export declare function shellReadPaths(command: string): string[];
|
|
18
|
+
export declare function resolveSkillTargets(tool: string, rawInput: unknown, cwd?: string, home?: string): Promise<Target[]>;
|
|
19
|
+
export declare function resolveSkillTarget(tool: string, input: unknown, cwd?: string, home?: string): Promise<Target | null>;
|
|
20
|
+
export declare function formatSkillRisk(scan: SkillScan): string;
|
|
21
|
+
export declare function gateSkill(tool: string, input: unknown, cwd: string, enforce: boolean, home?: string): Promise<SkillGateResult | null>;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { readdir, stat } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { SKILL_DIRS, isBlocked } from "./skills.js";
|
|
5
|
+
import { scanSkillDir, scanSkillFile } from "./skill-scan.js";
|
|
6
|
+
import { readInventory } from "./skill-inventory.js";
|
|
7
|
+
import { readTrustedSkills } from "./trusted-skills.js";
|
|
8
|
+
// How each agent loads a skill (tool names are matched case-insensitively):
|
|
9
|
+
// - Claude Code `Skill`, OpenCode `skill`, Gemini CLI `activate_skill`: a native tool taking a name.
|
|
10
|
+
// - Claude Code `Read`, Cursor `Read`, Copilot CLI `view`, Gemini `read_file`/`read_many_files`,
|
|
11
|
+
// OpenCode `read`: a file-read tool on SKILL.md or one of the skill's reference files.
|
|
12
|
+
// - Codex (no read tool at all) and every other agent's shell tool: `cat`/`sed`/`head`... on the file.
|
|
13
|
+
const NAME_TOOLS = /^(?:skill|activate_skill|use_skill|load_skill)$/i;
|
|
14
|
+
const READ_TOOLS = /^(?:read|read_file|readfile|read_text_file|read_many_files|view|open|cat|fs_read)$/i;
|
|
15
|
+
const SHELL_TOOLS = /^(?:bash|shell|sh|zsh|powershell|pwsh|run_shell_command|run_terminal_cmd|execute_bash|exec_command|exec|local_shell|terminal|command)$/i;
|
|
16
|
+
// Verbs that put a file's content in front of the model. Deliberately not `rm`/`cp`/`git`: a
|
|
17
|
+
// command merely *mentioning* a skill path isn't loading it.
|
|
18
|
+
const READ_VERBS = /^(?:cat|sed|head|tail|less|more|bat|batcat|nl|awk|type|get-content|gc|tac|cut|strings|xxd|od|rg|grep|view|open|python3?|node|ruby|perl)$/i;
|
|
19
|
+
const SKILL_MD = /^skills?\.md$/i;
|
|
20
|
+
const PATH_KEYS = ["file_path", "path", "filePath", "absolute_path", "target_file", "file", "filename"];
|
|
21
|
+
async function isFile(p) { try {
|
|
22
|
+
return (await stat(p)).isFile();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
} }
|
|
27
|
+
// Copilot CLI sends toolArgs as a JSON *string*; other agents send an object. Accept both.
|
|
28
|
+
export function coerceInput(input) {
|
|
29
|
+
if (typeof input === "string") {
|
|
30
|
+
try {
|
|
31
|
+
return coerceInput(JSON.parse(input));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { command: input };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return input && typeof input === "object" && !Array.isArray(input) ? input : {};
|
|
38
|
+
}
|
|
39
|
+
// Finds <name>/SKILL.md in the standard skill roots, then the machine-wide inventory, then
|
|
40
|
+
// (best effort, bounded) inside installed plugins, whose layout varies. A "plugin:skill" name is
|
|
41
|
+
// reduced to its skill part.
|
|
42
|
+
async function findNamedSkill(rawName, cwd, home) {
|
|
43
|
+
const name = rawName.replace(/^\//, "").split(":").pop() ?? "";
|
|
44
|
+
if (!/^[\w.-]+$/.test(name))
|
|
45
|
+
return null;
|
|
46
|
+
for (const root of [cwd, home]) {
|
|
47
|
+
for (const rel of SKILL_DIRS) {
|
|
48
|
+
const dir = join(root, rel, name);
|
|
49
|
+
if (root && await isFile(join(dir, "SKILL.md")))
|
|
50
|
+
return dir;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const fromIndex = (await readInventory())?.skills.find(s => s.name === name);
|
|
54
|
+
if (fromIndex && await isFile(join(fromIndex.dir, "SKILL.md")))
|
|
55
|
+
return fromIndex.dir;
|
|
56
|
+
const walk = async (dir, depth) => {
|
|
57
|
+
if (depth > 6)
|
|
58
|
+
return null;
|
|
59
|
+
let entries;
|
|
60
|
+
try {
|
|
61
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
for (const e of entries) {
|
|
67
|
+
if (!e.isDirectory() || e.name === "node_modules" || e.name === ".git")
|
|
68
|
+
continue;
|
|
69
|
+
const full = join(dir, e.name);
|
|
70
|
+
if (e.name === name && await isFile(join(full, "SKILL.md")))
|
|
71
|
+
return full;
|
|
72
|
+
const hit = await walk(full, depth + 1);
|
|
73
|
+
if (hit)
|
|
74
|
+
return hit;
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
};
|
|
78
|
+
return walk(join(home, ".claude", "plugins"), 0);
|
|
79
|
+
}
|
|
80
|
+
// Markdown files a read tool is pointed at: the usual path keys, plus any string (or list of
|
|
81
|
+
// strings) in the input that looks like a .md path -- covers Gemini's read_many_files.
|
|
82
|
+
function readPaths(input) {
|
|
83
|
+
const out = new Set();
|
|
84
|
+
for (const key of PATH_KEYS)
|
|
85
|
+
if (typeof input[key] === "string")
|
|
86
|
+
out.add(input[key]);
|
|
87
|
+
for (const value of Object.values(input)) {
|
|
88
|
+
if (typeof value === "string")
|
|
89
|
+
out.add(value);
|
|
90
|
+
else if (Array.isArray(value))
|
|
91
|
+
for (const v of value)
|
|
92
|
+
if (typeof v === "string")
|
|
93
|
+
out.add(v);
|
|
94
|
+
}
|
|
95
|
+
return [...out].filter(p => /\.md$/i.test(p.trim()));
|
|
96
|
+
}
|
|
97
|
+
// Paths a shell command reads with a content-printing verb: `cat ~/.codex/skills/x/SKILL.md`,
|
|
98
|
+
// `sed -n '1,200p' SKILL.md`, `head -50 skills.md && echo ok`, `Get-Content .\SKILL.md`.
|
|
99
|
+
export function shellReadPaths(command) {
|
|
100
|
+
const out = [];
|
|
101
|
+
for (const segment of command.split(/&&|\|\||[;|\n]/)) {
|
|
102
|
+
const tokens = segment.trim().match(/"[^"]*"|'[^']*'|\S+/g)?.map(t => t.replace(/^["']|["']$/g, "")) ?? [];
|
|
103
|
+
const verb = tokens.findIndex(t => READ_VERBS.test(basename(t)));
|
|
104
|
+
if (verb < 0)
|
|
105
|
+
continue;
|
|
106
|
+
for (const t of tokens.slice(verb + 1))
|
|
107
|
+
if (/\.md$/i.test(t))
|
|
108
|
+
out.push(t.replace(/^~(?=$|[\\/])/, homedir()));
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
async function targetForFile(raw, cwd) {
|
|
113
|
+
const file = isAbsolute(raw) ? raw : resolve(cwd || ".", raw);
|
|
114
|
+
const parts = file.split(sep);
|
|
115
|
+
const at = parts.lastIndexOf("skills");
|
|
116
|
+
if (at >= 0 && at < parts.length - 2) {
|
|
117
|
+
// <...>/skills/<name>/<anything>.md -> the whole skill folder, so a poisoned reference file
|
|
118
|
+
// is judged together with the SKILL.md that pulls it in.
|
|
119
|
+
const dir = parts.slice(0, at + 2).join(sep);
|
|
120
|
+
if (await isFile(join(dir, "SKILL.md")))
|
|
121
|
+
return { kind: "dir", path: dir, name: parts[at + 1] };
|
|
122
|
+
}
|
|
123
|
+
if (SKILL_MD.test(basename(file)) && await isFile(file)) {
|
|
124
|
+
return /^skill\.md$/i.test(basename(file)) ? { kind: "dir", path: dirname(file), name: basename(dirname(file)) } : { kind: "file", path: file, name: basename(file) };
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
// Every skill this tool call loads into the agent. Empty when the call is unrelated to skills.
|
|
129
|
+
export async function resolveSkillTargets(tool, rawInput, cwd = "", home = homedir()) {
|
|
130
|
+
const input = coerceInput(rawInput);
|
|
131
|
+
const targets = new Map();
|
|
132
|
+
const add = (t) => { if (t)
|
|
133
|
+
targets.set(t.path, t); };
|
|
134
|
+
if (NAME_TOOLS.test(tool)) {
|
|
135
|
+
const name = String(input.skill ?? input.name ?? input.skill_name ?? input.command ?? "");
|
|
136
|
+
const dir = name ? await findNamedSkill(name, cwd, home) : null;
|
|
137
|
+
if (dir)
|
|
138
|
+
add({ kind: "dir", path: dir, name: basename(dir) });
|
|
139
|
+
}
|
|
140
|
+
else if (READ_TOOLS.test(tool)) {
|
|
141
|
+
for (const p of readPaths(input))
|
|
142
|
+
add(await targetForFile(p.trim(), cwd));
|
|
143
|
+
}
|
|
144
|
+
else if (SHELL_TOOLS.test(tool)) {
|
|
145
|
+
const command = Array.isArray(input.command) ? input.command.join(" ") : String(input.command ?? input.cmd ?? "");
|
|
146
|
+
for (const p of shellReadPaths(command))
|
|
147
|
+
add(await targetForFile(p, cwd));
|
|
148
|
+
}
|
|
149
|
+
return [...targets.values()];
|
|
150
|
+
}
|
|
151
|
+
export async function resolveSkillTarget(tool, input, cwd = "", home = homedir()) {
|
|
152
|
+
return (await resolveSkillTargets(tool, input, cwd, home))[0] ?? null;
|
|
153
|
+
}
|
|
154
|
+
export function formatSkillRisk(scan) {
|
|
155
|
+
const top = scan.findings.slice(0, 3).map(f => `${f.title} (${f.file}${f.line ? `:${f.line}` : ""})`).join("; ");
|
|
156
|
+
return `Skill "${scan.name}" risk score ${scan.score}/100 (${scan.level})${top ? `: ${top}` : ""}${scan.findings.length > 3 ? `; +${scan.findings.length - 3} more` : ""}. Review with: beam skills scan ${scan.dir}. If you trust it: beam skills trust ${scan.dir}`;
|
|
157
|
+
}
|
|
158
|
+
// Returns null when the call doesn't involve a skill at all. Otherwise: trusted (by content hash)
|
|
159
|
+
// or clean-enough skills pass; prompt-injection / critical skills are held for approval, or denied
|
|
160
|
+
// outright under an enforce policy. Medium-risk skills pass but are still scored on the event. If
|
|
161
|
+
// one call loads several skills, the riskiest one decides.
|
|
162
|
+
export async function gateSkill(tool, input, cwd, enforce, home = homedir()) {
|
|
163
|
+
const targets = await resolveSkillTargets(tool, input, cwd, home);
|
|
164
|
+
if (!targets.length)
|
|
165
|
+
return null;
|
|
166
|
+
const trusted = new Set((await readTrustedSkills()).map(t => t.hash));
|
|
167
|
+
const results = [];
|
|
168
|
+
for (const target of targets) {
|
|
169
|
+
const scan = target.kind === "dir" ? await scanSkillDir(target.path, target.name) : await scanSkillFile(target.path);
|
|
170
|
+
if (trusted.has(scan.hash))
|
|
171
|
+
results.push({ action: "allow", scan });
|
|
172
|
+
else if (!isBlocked(scan))
|
|
173
|
+
results.push({ action: "allow", reason: scan.findings.length ? formatSkillRisk(scan) : undefined, scan });
|
|
174
|
+
else
|
|
175
|
+
results.push({ action: enforce ? "deny" : "ask", reason: formatSkillRisk(scan), scan });
|
|
176
|
+
}
|
|
177
|
+
const rank = (r) => (r.action === "allow" ? 0 : 1000) + r.scan.score;
|
|
178
|
+
return results.sort((a, b) => rank(b) - rank(a))[0];
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=skill-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-gate.js","sourceRoot":"","sources":["../src/skill-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAkB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,4EAA4E;AAC5E,sGAAsG;AACtG,kGAAkG;AAClG,0FAA0F;AAC1F,wGAAwG;AACxG,MAAM,UAAU,GAAG,kDAAkD,CAAC;AACtE,MAAM,UAAU,GAAG,qFAAqF,CAAC;AACzG,MAAM,WAAW,GAAG,yIAAyI,CAAC;AAC9J,6FAA6F;AAC7F,6DAA6D;AAC7D,MAAM,UAAU,GAAG,2IAA2I,CAAC;AAC/J,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAClC,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAExG,KAAK,UAAU,MAAM,CAAC,CAAS,IAAI,IAAI,CAAC;IAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC;IAAC,OAAO,KAAK,CAAC;AAAC,CAAC,CAAC,CAAC;AAErG,2FAA2F;AAC3F,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;IAAC,CAAC;IACtH,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,2FAA2F;AAC3F,iGAAiG;AACjG,6BAA6B;AAC7B,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,GAAW,EAAE,IAAY;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,MAAM,aAAa,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC7E,IAAI,SAAS,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC;IACrF,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,KAAa,EAA0B,EAAE;QACxE,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,OAAO,CAAC;QAAC,IAAI,CAAC;YAAC,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAClG,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACjF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAAC,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,6FAA6F;AAC7F,uFAAuF;AACvF,SAAS,SAAS,CAAC,KAA8B;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,SAAS;QAAE,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC,CAAC;IAC/F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,8FAA8F;AAC9F,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3G,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,IAAI,GAAG,CAAC;YAAE,SAAS;QACvB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,GAAW;IACnD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,4FAA4F;QAC5F,yDAAyD;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAClG,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACxK,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,QAAiB,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO,EAAE;IACnG,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,GAAG,GAAG,CAAC,CAAgB,EAAE,EAAE,GAAG,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAClH,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAc,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO,EAAE;IAC/F,OAAO,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjH,OAAO,UAAU,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,mCAAmC,IAAI,CAAC,GAAG,wCAAwC,IAAI,CAAC,GAAG,EAAE,CAAC;AACxQ,CAAC;AAED,kGAAkG;AAClG,mGAAmG;AACnG,kGAAkG;AAClG,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,KAAc,EAAE,GAAW,EAAE,OAAgB,EAAE,IAAI,GAAG,OAAO,EAAE;IAC3G,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrH,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;YAChI,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
|