@agent-beam/beam 0.2.21 → 0.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +2 -0
  2. package/dist/cli.js +179 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client.js +52 -6
  5. package/dist/client.js.map +1 -1
  6. package/dist/core.d.ts +9 -0
  7. package/dist/core.js +5 -1
  8. package/dist/core.js.map +1 -1
  9. package/dist/edit-stats.d.ts +6 -0
  10. package/dist/edit-stats.js +74 -0
  11. package/dist/edit-stats.js.map +1 -0
  12. package/dist/forward.d.ts +2 -0
  13. package/dist/forward.js +19 -0
  14. package/dist/forward.js.map +1 -1
  15. package/dist/hook-adapters.js +18 -3
  16. package/dist/hook-adapters.js.map +1 -1
  17. package/dist/serve.d.ts +2 -0
  18. package/dist/serve.js +23 -1
  19. package/dist/serve.js.map +1 -1
  20. package/dist/session-title.d.ts +25 -0
  21. package/dist/session-title.js +185 -0
  22. package/dist/session-title.js.map +1 -0
  23. package/dist/setup.js +32 -1
  24. package/dist/setup.js.map +1 -1
  25. package/dist/skill-context.d.ts +11 -0
  26. package/dist/skill-context.js +78 -0
  27. package/dist/skill-context.js.map +1 -0
  28. package/dist/skill-gate.d.ts +21 -0
  29. package/dist/skill-gate.js +180 -0
  30. package/dist/skill-gate.js.map +1 -0
  31. package/dist/skill-inventory.d.ts +81 -0
  32. package/dist/skill-inventory.js +167 -0
  33. package/dist/skill-inventory.js.map +1 -0
  34. package/dist/skill-risk-rules.d.ts +17 -0
  35. package/dist/skill-risk-rules.js +61 -0
  36. package/dist/skill-risk-rules.js.map +1 -0
  37. package/dist/skill-scan.d.ts +27 -0
  38. package/dist/skill-scan.js +157 -0
  39. package/dist/skill-scan.js.map +1 -0
  40. package/dist/skill-setup.d.ts +11 -0
  41. package/dist/skill-setup.js +26 -0
  42. package/dist/skill-setup.js.map +1 -0
  43. package/dist/skill-sync.d.ts +40 -0
  44. package/dist/skill-sync.js +79 -0
  45. package/dist/skill-sync.js.map +1 -0
  46. package/dist/skill-watch.d.ts +16 -0
  47. package/dist/skill-watch.js +41 -0
  48. package/dist/skill-watch.js.map +1 -0
  49. package/dist/skills.d.ts +33 -0
  50. package/dist/skills.js +139 -0
  51. package/dist/skills.js.map +1 -0
  52. package/dist/trusted-skills.d.ts +9 -0
  53. package/dist/trusted-skills.js +31 -0
  54. package/dist/trusted-skills.js.map +1 -0
  55. package/dist/tty-prompt.js +3 -1
  56. package/dist/tty-prompt.js.map +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-title.js","sourceRoot":"","sources":["../src/session-title.ts"],"names":[],"mappings":"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"}
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":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,SAAS,IAAI,CAAC,CAAS,EAAE,KAAa;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,EAAE,CAAC,OAAe;IACzB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,IAAI,CAAC,OAAe;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,IAAI,CAAC,OAAe;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,iGAAiG;AACjG,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,6FAA6F;AAC7F,uDAAuD;AACvD,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACvH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,8FAA8F;AAC9F,yFAAyF;AACzF,+FAA+F;AAC/F,+FAA+F;AAC/F,2FAA2F;AAC3F,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,uEAAuE;IACvE,MAAM,mBAAmB,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEpE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,eAAe,GAAG,eAAe,CAAC;IACtC,IAAI,aAAa,GAAG,aAAa,CAAC;IAClC,IAAI,YAAY,GAAG,cAAc,CAAC;IAElC,kFAAkF;IAClF,IAAI,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAElF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,WAAW;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,WAAW,WAAW,CAAC,MAAM,SAAS,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gCAAgC,EACzG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CACzD,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,uBAAuB,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnG,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1F,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,cAAc,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,6BAA6B,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC;IACtH,CAAC;IAED,gGAAgG;IAChG,8FAA8F;IAC9F,wFAAwF;IACxF,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAC7H,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,UAAU;QAAE,EAAE,CAAC,aAAa,UAAU,cAAc,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iCAAiC,CAAC,CAAC;IACtH,IAAI,YAAY,CAAC,MAAM;QAAE,EAAE,CAAC,yBAAyB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3G,KAAK,MAAM,MAAM,IAAI,SAAS;QAAE,IAAI,CAAC,+BAA+B,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAEpG,6FAA6F;IAC7F,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC;IAC7C,IAAI,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,IAAI,aAAa,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,QAAQ,EAAE,CAAC;QACb,EAAE,CAAC,+BAA+B,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxD,eAAe,GAAG,cAAc,QAAQ,CAAC,QAAQ,GAAG,CAAC;QACrD,aAAa,GAAG,MAAM,WAAW,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,MAAM,WAAW,CAAC,mDAAmD,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,yFAAyF;QACzF,wEAAwE;QACxE,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpE,QAAQ,GAAG,MAAM,WAAW,CAAC,0CAA0C,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/F,EAAE,CAAC,oBAAoB,QAAQ,CAAC,QAAQ,SAAS,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QACpE,eAAe,GAAG,cAAc,QAAQ,CAAC,QAAQ,GAAG,CAAC;QAErD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,QAAS,CAAC,CAAC,CAAC;QAChH,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW;YAAE,EAAE,CAAC,0DAA0D,CAAC,CAAC;aACjG,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO;YAAE,IAAI,CAAC,sCAAsC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,iGAAiG;IACnG,CAAC;SAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,oDAAoD,CAAC,CAAC;IAC7D,CAAC;IACD,oGAAoG;IACpG,kFAAkF;IAClF,iGAAiG;IACjG,8CAA8C;IAC9C,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,4CAA4C,CAAC,CAAC;YAAC,YAAY,GAAG,YAAY,MAAM,CAAC,OAAO,GAAG,CAAC;QAAC,CAAC;aACrK,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAAC,YAAY,GAAG,YAAY,CAAC;QAAC,CAAC;aAC3G,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,gGAAgG,CAAC,CAAC;YAAC,YAAY,GAAG,0BAA0B,CAAC;QAAC,CAAC;IAC3M,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,QAAQ,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;QACjG,IAAI,IAAI,CAAC,EAAE;YAAE,EAAE,CAAC,QAAQ,YAAY,CAAC,MAAM,cAAc,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC;;YAC9G,IAAI,CAAC,iCAAiC,IAAI,CAAC,MAAM,IAAI,gBAAgB,kFAAkF,CAAC,CAAC;IAChK,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,mEAAmE,CAAC,CAAC;IAC3G,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,0CAA0C,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;YACrG,4FAA4F;YAC5F,4FAA4F;YAC5F,mFAAmF;YACnF,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;YACpH,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,iCAAiC,MAAM,CAAC,QAAQ,+BAA+B,CAAC;QACxI,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,GAAG,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,6GAA6G,CAAC,CAAC;QACpH,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM;QACnC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,eAAe,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC3D,CAAC,CAAC,MAAM,CAAC;IACX,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACtB,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,CAAC,YAAY,CAAC,EAAE;QAChE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE;QAC3D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE;QACrD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE;KACxD,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,uCAAuC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,qBAAqB,CAAC,0CAA0C,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,uDAAuD,CAAC,CAAC;IACjG,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,sBAAsB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC9K,CAAC"}
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":"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"}
@@ -0,0 +1,81 @@
1
+ import { type SkillScan } from "./skill-scan.js";
2
+ export type SkillFindingSummary = {
3
+ id: string;
4
+ title: string;
5
+ severity: string;
6
+ file: string;
7
+ line?: number;
8
+ explanation?: string;
9
+ evidence?: string;
10
+ fp?: string;
11
+ };
12
+ /** Every finding, minimal: enough for the dashboard to re-score a skill after some are reviewed as safe. */
13
+ export type SkillFindingRef = {
14
+ id: string;
15
+ severity: string;
16
+ fp: string;
17
+ };
18
+ export type InventorySkill = {
19
+ /** Stable per-machine id (hash of the folder), so a report can name a skill without its path. Absent in files written before this field existed. */
20
+ id?: string;
21
+ topFindings?: SkillFindingSummary[];
22
+ allFindings?: SkillFindingRef[];
23
+ name: string;
24
+ dir: string;
25
+ agent: string;
26
+ scope: "global" | "project" | "other";
27
+ repo: string | null;
28
+ hash: string;
29
+ score: number;
30
+ level: SkillScan["level"];
31
+ findings: number;
32
+ injection: boolean;
33
+ files: number;
34
+ firstSeen: string;
35
+ lastSeen: string;
36
+ modifiedAt: string | null;
37
+ };
38
+ export type Inventory = {
39
+ version: 1;
40
+ generatedAt: string;
41
+ roots: string[];
42
+ truncated: boolean;
43
+ skills: InventorySkill[];
44
+ /** When a whole-home search last ran (`beam skills index`). Null/absent: only agent skill folders have been checked. */
45
+ lastFullScanAt?: string | null;
46
+ };
47
+ export type IndexChanges = {
48
+ added: string[];
49
+ modified: string[];
50
+ removed: string[];
51
+ };
52
+ export declare const inventoryFile: () => string;
53
+ export declare function agentSkillRoots(home?: string): Promise<string[]>;
54
+ export type DiscoverOptions = {
55
+ roots?: string[];
56
+ maxDepth?: number;
57
+ maxDirs?: number;
58
+ budgetMs?: number;
59
+ };
60
+ export declare function discoverAllSkills(options?: DiscoverOptions): Promise<{
61
+ found: Array<{
62
+ dir: string;
63
+ repo: string | null;
64
+ }>;
65
+ roots: string[];
66
+ truncated: boolean;
67
+ }>;
68
+ export declare function readInventory(): Promise<Inventory | null>;
69
+ export declare function indexSkills(options?: DiscoverOptions, home?: string): Promise<{
70
+ inventory: Inventory;
71
+ changes: IndexChanges;
72
+ }>;
73
+ export declare function trustedHashes(): Promise<Set<string>>;
74
+ export declare function deviceSkillsScore(skills: Array<{
75
+ score: number;
76
+ level: string;
77
+ hash: string;
78
+ }>, trusted: Set<string>): {
79
+ score: number;
80
+ highCount: number;
81
+ };