@agenshield/daemon 0.6.1 → 0.7.0

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 (48) hide show
  1. package/acl.d.ts +15 -12
  2. package/acl.d.ts.map +1 -1
  3. package/auth/middleware.d.ts.map +1 -1
  4. package/command-sync.d.ts.map +1 -1
  5. package/config/paths.d.ts +12 -0
  6. package/config/paths.d.ts.map +1 -1
  7. package/events/emitter.d.ts +22 -1
  8. package/events/emitter.d.ts.map +1 -1
  9. package/index.d.ts +1 -1
  10. package/index.d.ts.map +1 -1
  11. package/index.js +8454 -5934
  12. package/main.js +8452 -5935
  13. package/package.json +5 -4
  14. package/policy/url-matcher.d.ts +63 -0
  15. package/policy/url-matcher.d.ts.map +1 -0
  16. package/proxy/pool.d.ts +42 -0
  17. package/proxy/pool.d.ts.map +1 -0
  18. package/proxy/server.d.ts +19 -0
  19. package/proxy/server.d.ts.map +1 -0
  20. package/routes/config.d.ts.map +1 -1
  21. package/routes/exec.d.ts.map +1 -1
  22. package/routes/index.d.ts.map +1 -1
  23. package/routes/marketplace.d.ts +2 -0
  24. package/routes/marketplace.d.ts.map +1 -1
  25. package/routes/openclaw.d.ts +8 -0
  26. package/routes/openclaw.d.ts.map +1 -0
  27. package/routes/rpc.d.ts.map +1 -1
  28. package/routes/secrets.d.ts.map +1 -1
  29. package/routes/skills.d.ts.map +1 -1
  30. package/routes/sse.d.ts.map +1 -1
  31. package/routes/status.d.ts +3 -0
  32. package/routes/status.d.ts.map +1 -1
  33. package/secret-sync.d.ts +33 -0
  34. package/secret-sync.d.ts.map +1 -0
  35. package/server.d.ts.map +1 -1
  36. package/services/marketplace.d.ts +16 -2
  37. package/services/marketplace.d.ts.map +1 -1
  38. package/services/openclaw-config.d.ts +15 -1
  39. package/services/openclaw-config.d.ts.map +1 -1
  40. package/services/policy-markdown.d.ts +18 -0
  41. package/services/policy-markdown.d.ts.map +1 -0
  42. package/services/skill-analyzer.d.ts +4 -0
  43. package/services/skill-analyzer.d.ts.map +1 -1
  44. package/ui-assets/assets/index-aFHqLzyo.js +964 -0
  45. package/ui-assets/index.html +1 -1
  46. package/watchers/skills.d.ts +26 -12
  47. package/watchers/skills.d.ts.map +1 -1
  48. package/ui-assets/assets/index-DRQK9Oxg.js +0 -942
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenshield/daemon",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "description": "AgenShield HTTP daemon server with embedded UI",
6
6
  "main": "./index.js",
@@ -24,9 +24,10 @@
24
24
  ],
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
- "@agenshield/ipc": "0.6.1",
28
- "@agenshield/broker": "0.6.1",
29
- "@agenshield/sandbox": "0.6.1",
27
+ "@agenshield/integrations": "0.7.0",
28
+ "@agenshield/ipc": "0.7.0",
29
+ "@agenshield/broker": "0.7.0",
30
+ "@agenshield/sandbox": "0.7.0",
30
31
  "@modelcontextprotocol/sdk": "^1.26.0",
31
32
  "fastify": "^5.7.0",
32
33
  "zod": "^4.3.6",
@@ -0,0 +1,63 @@
1
+ /**
2
+ * URL and pattern matching utilities shared between RPC handlers and proxy.
3
+ *
4
+ * Extracted from rpc.ts so the per-run proxy can reuse the same matching logic.
5
+ */
6
+ import type { PolicyConfig, PolicyExecutionContext } from '@agenshield/ipc';
7
+ /**
8
+ * Convert a glob pattern to a RegExp (same algorithm as broker's PolicyEnforcer.matchPattern)
9
+ */
10
+ export declare function globToRegex(pattern: string): RegExp;
11
+ /**
12
+ * Normalize a URL pattern base:
13
+ * - Strip trailing slashes
14
+ * - If pattern is a bare domain (no protocol), prefix with https://
15
+ */
16
+ export declare function normalizeUrlBase(pattern: string): string;
17
+ /**
18
+ * Normalize a URL target for matching:
19
+ * - Ensures there's always a path (at least '/') for matching against ** patterns
20
+ * - Strips trailing slashes from paths (but keeps root '/')
21
+ */
22
+ export declare function normalizeUrlTarget(url: string): string;
23
+ /**
24
+ * Match a URL target against a URL pattern.
25
+ * For patterns without wildcards, matches both the exact URL and any sub-paths.
26
+ * For patterns with wildcards, matches as-is.
27
+ * Bare domain patterns (e.g. "facebook.com") also match "www.facebook.com".
28
+ */
29
+ export declare function matchUrlPattern(pattern: string, target: string): boolean;
30
+ /**
31
+ * Check if a policy's scope matches the execution context.
32
+ */
33
+ export declare function policyScopeMatches(policy: PolicyConfig, context?: PolicyExecutionContext): boolean;
34
+ /**
35
+ * Extract the basename of a command target.
36
+ * "/usr/bin/curl -s https://x.com" → "curl"
37
+ * "fork:git push" → "git"
38
+ * "node script.js" → "node"
39
+ */
40
+ export declare function extractCommandBasename(target: string): string;
41
+ /**
42
+ * Check if a URL policy applies to a given command.
43
+ *
44
+ * - No scope → applies to all commands (universal)
45
+ * - scope 'command:<name>' → only applies when executing that command
46
+ * - Other scopes (agent, skill, skill:<slug>) → ignored for command filtering (treated as universal)
47
+ */
48
+ export declare function urlPolicyScopeMatchesCommand(policy: PolicyConfig, commandBasename: string): boolean;
49
+ /**
50
+ * Filter URL policies that apply to a specific command.
51
+ * Includes policies with no scope (universal) and those scoped to this command.
52
+ */
53
+ export declare function filterUrlPoliciesForCommand(policies: PolicyConfig[], commandBasename: string): PolicyConfig[];
54
+ /**
55
+ * Check whether a URL (or hostname) is allowed by a set of URL policies.
56
+ *
57
+ * Used by the per-run proxy to enforce URL policies on CONNECT/HTTP requests.
58
+ * Logic mirrors evaluatePolicyCheck but only for URL target type.
59
+ *
60
+ * Returns true if allowed (including default-allow when no policy matches).
61
+ */
62
+ export declare function checkUrlPolicy(policies: PolicyConfig[], url: string): boolean;
63
+ //# sourceMappingURL=url-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-matcher.d.ts","sourceRoot":"","sources":["../../src/policy/url-matcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE5E;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAuBxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAgBlG;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAWnG;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,YAAY,EAAE,CAI7G;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAoC7E"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * ProxyPool — manages per-run proxy instances for seatbelt-wrapped commands.
3
+ *
4
+ * Each exec'd command that needs network access gets its own localhost proxy.
5
+ * The proxy enforces URL policies while the seatbelt profile restricts the child
6
+ * to only connect to localhost (preventing direct network bypass).
7
+ *
8
+ * Exported as a singleton so rpc.ts can acquire proxies during policy_check.
9
+ */
10
+ import type { PolicyConfig } from '@agenshield/ipc';
11
+ export interface ProxyPoolOptions {
12
+ maxConcurrent?: number;
13
+ idleTimeoutMs?: number;
14
+ }
15
+ export declare class ProxyPool {
16
+ private proxies;
17
+ private maxConcurrent;
18
+ private idleTimeoutMs;
19
+ constructor(options?: ProxyPoolOptions);
20
+ /**
21
+ * Acquire a per-run proxy for a command execution.
22
+ * Returns the localhost port the child should use as its proxy.
23
+ */
24
+ acquire(execId: string, command: string, urlPolicies: PolicyConfig[]): Promise<{
25
+ port: number;
26
+ }>;
27
+ /**
28
+ * Release a proxy by execution ID.
29
+ */
30
+ release(execId: string): void;
31
+ /**
32
+ * Shut down all active proxies. Called on daemon close.
33
+ */
34
+ shutdown(): void;
35
+ /**
36
+ * Number of active proxies.
37
+ */
38
+ get size(): number;
39
+ }
40
+ export declare function getProxyPool(): ProxyPool;
41
+ export declare function shutdownProxyPool(): void;
42
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/proxy/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAapD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,GAAE,gBAAqB;IAK1C;;;OAGG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,YAAY,EAAE,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAmE5B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU7B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAShB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAKD,wBAAgB,YAAY,IAAI,SAAS,CAKxC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Per-run HTTP/CONNECT proxy server factory.
3
+ *
4
+ * Each seatbelt-wrapped process gets its own localhost proxy that enforces
5
+ * URL policies on every outbound connection. The child process is configured
6
+ * with HTTPS_PROXY=http://127.0.0.1:${port} and the seatbelt profile only
7
+ * allows network-outbound to localhost, so all traffic must flow through here.
8
+ */
9
+ import * as http from 'node:http';
10
+ import type { PolicyConfig } from '@agenshield/ipc';
11
+ /**
12
+ * Create an HTTP proxy server that enforces URL policies.
13
+ *
14
+ * Handles:
15
+ * - CONNECT method (HTTPS tunneling): checks hostname against URL policies
16
+ * - Plain HTTP requests: checks full URL against URL policies, forwards if allowed
17
+ */
18
+ export declare function createPerRunProxy(urlPolicies: PolicyConfig[], onActivity: () => void, logger: (msg: string) => void): http.Server;
19
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,YAAY,EAAE,EAC3B,UAAU,EAAE,MAAM,IAAI,EACtB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC5B,IAAI,CAAC,MAAM,CA+Fb"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAc7E,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwJtE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AA4B7E,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuLtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/routes/exec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAyF/C,wBAAsB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHpE"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/routes/exec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA4F/C,wBAAsB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqB/C;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAsB/C;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFxE"}
@@ -5,5 +5,7 @@
5
5
  * agen.co vulnerability analysis, and local skill installation.
6
6
  */
7
7
  import type { FastifyInstance } from 'fastify';
8
+ /** Check if a skill is currently being installed (for GET /skills to report status) */
9
+ export declare function isInstallInProgress(slug: string): boolean;
8
10
  export declare function marketplaceRoutes(app: FastifyInstance): Promise<void>;
9
11
  //# sourceMappingURL=marketplace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/routes/marketplace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAmC7E,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0X3E"}
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/routes/marketplace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AA0C7E,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAse3E"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * OpenClaw lifecycle management routes
3
+ *
4
+ * Dynamic import from @agenshield/sandbox — these exports may not be built yet.
5
+ */
6
+ import type { FastifyInstance } from 'fastify';
7
+ export declare function openclawRoutes(app: FastifyInstance): Promise<void>;
8
+ //# sourceMappingURL=openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/routes/openclaw.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAY/C,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/routes/rpc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AA2R7E,wBAAsB,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CnE"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/routes/rpc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAwY7E,wBAAsB,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/routes/secrets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA6B/C,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FvE"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/routes/secrets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwC/C,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6KvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AA0F7E;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmgBtE"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/routes/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAiL7E;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAi2BtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/routes/sse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAsB7E;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmInE"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/routes/sse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAuB7E;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6InE"}
@@ -2,5 +2,8 @@
2
2
  * Status route
3
3
  */
4
4
  import type { FastifyInstance } from 'fastify';
5
+ import type { DaemonStatus } from '@agenshield/ipc';
6
+ export declare const startedAt: Date;
7
+ export declare function buildDaemonStatus(): DaemonStatus;
5
8
  export declare function statusRoutes(app: FastifyInstance): Promise<void>;
6
9
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/routes/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtE"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/routes/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAqB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAavE,eAAO,MAAM,SAAS,MAAa,CAAC;AAEpC,wBAAgB,iBAAiB,IAAI,YAAY,CA8BhD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Secret Policy Sync
3
+ *
4
+ * Syncs vault secrets to the broker's synced-secrets.json file.
5
+ * The broker reads this file to automatically inject secrets as
6
+ * environment variables into spawned processes.
7
+ *
8
+ * Flow:
9
+ * 1. Read VaultSecret[] from the daemon vault
10
+ * 2. Separate global secrets (policyIds=[]) from policy-linked
11
+ * 3. For policy-linked: include the policy's target + patterns
12
+ * 4. Write synced-secrets.json for the broker to pick up
13
+ *
14
+ * Follows the same pattern as command-sync.ts.
15
+ */
16
+ import type { PolicyConfig } from '@agenshield/ipc';
17
+ interface Logger {
18
+ warn(msg: string, ...args: unknown[]): void;
19
+ info(msg: string, ...args: unknown[]): void;
20
+ }
21
+ /**
22
+ * Sync vault secrets to the broker's synced-secrets.json file.
23
+ *
24
+ * Groups secrets into:
25
+ * 1. Global secrets (policyIds=[]) — always injected into every exec
26
+ * 2. Policy-bound secrets — injected when the policy's patterns match
27
+ *
28
+ * For policy-bound secrets, the corresponding policy's target and patterns
29
+ * are included so the broker can do its own matching without an RPC call.
30
+ */
31
+ export declare function syncSecrets(policies: PolicyConfig[], logger?: Logger): Promise<void>;
32
+ export {};
33
+ //# sourceMappingURL=secret-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-sync.d.ts","sourceRoot":"","sources":["../src/secret-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAmD,MAAM,iBAAiB,CAAC;AAKrG,UAAU,MAAM;IACd,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC7C;AASD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgFf"}
package/server.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAUpD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAgCjF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAoEhF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWpD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAgCjF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAyEhF"}
@@ -19,6 +19,8 @@ export interface DownloadedSkillMeta {
19
19
  description: string;
20
20
  tags: string[];
21
21
  downloadedAt: string;
22
+ /** Where this entry came from: 'marketplace' (preview/install) or 'watcher' (untrusted detection) */
23
+ source?: 'marketplace' | 'watcher';
22
24
  analysis?: AnalyzeSkillResponse['analysis'];
23
25
  }
24
26
  /**
@@ -36,7 +38,11 @@ export interface DownloadedSkillInfo {
36
38
  author: string;
37
39
  version: string;
38
40
  description: string;
41
+ tags: string[];
39
42
  hasAnalysis: boolean;
43
+ /** Where this entry came from: 'marketplace' (preview/install) or 'watcher' (untrusted detection) */
44
+ source?: 'marketplace' | 'watcher';
45
+ analysis?: AnalyzeSkillResponse['analysis'];
40
46
  }
41
47
  /**
42
48
  * List all downloaded marketplace skills from ~/.agenshield/marketplace/.
@@ -50,6 +56,10 @@ export declare function getDownloadedSkillFiles(slug: string): MarketplaceSkillF
50
56
  * Get the metadata for a downloaded skill, or null if not downloaded.
51
57
  */
52
58
  export declare function getDownloadedSkillMeta(slug: string): DownloadedSkillMeta | null;
59
+ /**
60
+ * Delete a downloaded skill's marketplace cache folder.
61
+ */
62
+ export declare function deleteDownloadedSkill(slug: string): void;
53
63
  /**
54
64
  * Inline relative image references in markdown with data URIs from extracted files.
55
65
  * Replaces ![alt](path/to/image.png) with ![alt](data:image/png;base64,...)
@@ -70,12 +80,16 @@ export declare function getMarketplaceSkill(slug: string): Promise<MarketplaceSk
70
80
  * Send skill files to the skills-analyzer edge function for AI-powered vulnerability analysis.
71
81
  * Consumes an NDJSON stream and returns the aggregated summary as AnalyzeSkillResponse.
72
82
  */
73
- export declare function analyzeSkillBundle(files: MarketplaceSkillFile[], skillName?: string, publisher?: string): Promise<AnalyzeSkillResponse>;
83
+ export declare function analyzeSkillBundle(files: MarketplaceSkillFile[], skillName?: string, publisher?: string, options?: {
84
+ noCache?: boolean;
85
+ }): Promise<AnalyzeSkillResponse>;
74
86
  /**
75
87
  * Forward a slug + source to the skills-analyzer for remote ZIP download and analysis.
76
88
  * Vercel handles the ZIP download directly — no local files needed.
77
89
  */
78
- export declare function analyzeSkillBySlug(slug: string, skillName?: string, publisher?: string): Promise<AnalyzeSkillResponse>;
90
+ export declare function analyzeSkillBySlug(slug: string, skillName?: string, publisher?: string, options?: {
91
+ noCache?: boolean;
92
+ }): Promise<AnalyzeSkillResponse>;
79
93
  /**
80
94
  * Retrieve a previously cached analysis for a skill by name and publisher.
81
95
  * Returns null if no cached result exists (upstream returns 404).
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/services/marketplace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EAOrB,MAAM,iBAAiB,CAAC;AA4NzB;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA+CzF;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,EAC/C,KAAK,EAAE,oBAAoB,EAAE,GAC5B,IAAI,CAkBN;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,IAAI,CAUvG;AAED,0CAA0C;AAC1C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CA4B5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAqB5E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAU/E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,oBAAoB,EAAE,GAC5B,MAAM,CAoCR;AAMD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAclF;AAMD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0GjF;AA4FD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,oBAAoB,EAAE,EAC7B,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAgB/B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAc/B;AAMD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAgDtC"}
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/services/marketplace.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,27 @@
3
3
  *
4
4
  * Helpers to manage per-skill entries in $AGENT_HOME/.openclaw/openclaw.json.
5
5
  * Skills are configured under skills.entries.<skillKey> with { enabled: boolean }.
6
+ *
7
+ * AgenShield owns installation and secrets — openclaw.json must NOT contain
8
+ * env variables or install preferences (preferBrew, nodeManager).
6
9
  */
10
+ import type { PolicyConfig } from '@agenshield/ipc';
7
11
  /**
8
12
  * Add a skill entry to openclaw.json with enabled: true.
13
+ * Never writes env — AgenShield handles secrets via vault/broker.
9
14
  */
10
- export declare function addSkillEntry(slug: string, env?: Record<string, string>): void;
15
+ export declare function addSkillEntry(slug: string): void;
11
16
  /**
12
17
  * Remove a skill entry from openclaw.json.
13
18
  */
14
19
  export declare function removeSkillEntry(slug: string): void;
20
+ /**
21
+ * Sync openclaw.json with the current AgenShield policy state.
22
+ *
23
+ * - Sets `skills.allowBundled` from enabled skill policies
24
+ * - Ensures `skills.load.watch = true`
25
+ * - Removes `skills.install` section (AgenShield handles installation)
26
+ * - Strips `env` from all entries (AgenShield handles secrets)
27
+ */
28
+ export declare function syncOpenClawFromPolicies(policies: PolicyConfig[]): void;
15
29
  //# sourceMappingURL=openclaw-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-config.d.ts","sourceRoot":"","sources":["../../src/services/openclaw-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiDH;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAiB9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQnD"}
1
+ {"version":3,"file":"openclaw-config.d.ts","sourceRoot":"","sources":["../../src/services/openclaw-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmDpD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAchD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAgCvE"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Policy Markdown Generator
3
+ *
4
+ * Generates a semantic Markdown document from the active policy configuration.
5
+ * The document describes what the agent is allowed and denied to do, written
6
+ * as natural-language instructions that OpenClaw can use to be more effective.
7
+ */
8
+ import type { PolicyConfig } from '@agenshield/ipc';
9
+ /**
10
+ * Generate a semantic Markdown document from the active policy configuration.
11
+ * Meant to be injected into OpenClaw as instructions so it knows what it can do.
12
+ *
13
+ * @param knownSkills — If provided, skill policy patterns that don't match
14
+ * any known skill name are filtered out. Policies with no remaining patterns
15
+ * are omitted entirely.
16
+ */
17
+ export declare function generatePolicyMarkdown(policies: PolicyConfig[], knownSkills?: Set<string>): string;
18
+ //# sourceMappingURL=policy-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-markdown.d.ts","sourceRoot":"","sources":["../../src/services/policy-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAkFpD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAoKlG"}
@@ -14,6 +14,10 @@ export declare function analyzeSkill(skillName: string, content: string, metadat
14
14
  * Get cached analysis for a skill
15
15
  */
16
16
  export declare function getCachedAnalysis(skillName: string): SkillAnalysis | undefined;
17
+ /**
18
+ * Store / overwrite cached analysis for a skill (e.g. from external analyzer).
19
+ */
20
+ export declare function setCachedAnalysis(skillName: string, analysis: SkillAnalysis): void;
17
21
  /**
18
22
  * Clear cached analysis for a skill
19
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"skill-analyzer.d.ts","sourceRoot":"","sources":["../../src/services/skill-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAgJvE;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,aAAa,CAqEf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAI3D"}
1
+ {"version":3,"file":"skill-analyzer.d.ts","sourceRoot":"","sources":["../../src/services/skill-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAmJvE;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,aAAa,CA0Ef;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAIlF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAI3D"}