@agenshield/ipc 0.1.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 (54) hide show
  1. package/catalog.d.ts +24 -0
  2. package/catalog.d.ts.map +1 -0
  3. package/constants.d.ts +59 -0
  4. package/constants.d.ts.map +1 -0
  5. package/index.d.ts +19 -0
  6. package/index.d.ts.map +1 -0
  7. package/index.js +1377 -0
  8. package/package.json +20 -0
  9. package/schemas/agenco.schema.d.ts +189 -0
  10. package/schemas/agenco.schema.d.ts.map +1 -0
  11. package/schemas/auth.schema.d.ts +112 -0
  12. package/schemas/auth.schema.d.ts.map +1 -0
  13. package/schemas/config.schema.d.ts +218 -0
  14. package/schemas/config.schema.d.ts.map +1 -0
  15. package/schemas/index.d.ts +11 -0
  16. package/schemas/index.d.ts.map +1 -0
  17. package/schemas/ops.schema.d.ts +128 -0
  18. package/schemas/ops.schema.d.ts.map +1 -0
  19. package/schemas/policy.schema.d.ts +148 -0
  20. package/schemas/policy.schema.d.ts.map +1 -0
  21. package/schemas/state.schema.d.ts +128 -0
  22. package/schemas/state.schema.d.ts.map +1 -0
  23. package/schemas/vault.schema.d.ts +38 -0
  24. package/schemas/vault.schema.d.ts.map +1 -0
  25. package/types/agenco.d.ts +211 -0
  26. package/types/agenco.d.ts.map +1 -0
  27. package/types/api.d.ts +59 -0
  28. package/types/api.d.ts.map +1 -0
  29. package/types/auth.d.ts +121 -0
  30. package/types/auth.d.ts.map +1 -0
  31. package/types/backup.d.ts +79 -0
  32. package/types/backup.d.ts.map +1 -0
  33. package/types/catalog.d.ts +13 -0
  34. package/types/catalog.d.ts.map +1 -0
  35. package/types/config.d.ts +208 -0
  36. package/types/config.d.ts.map +1 -0
  37. package/types/daemon.d.ts +22 -0
  38. package/types/daemon.d.ts.map +1 -0
  39. package/types/discovery.d.ts +121 -0
  40. package/types/discovery.d.ts.map +1 -0
  41. package/types/events.d.ts +83 -0
  42. package/types/events.d.ts.map +1 -0
  43. package/types/index.d.ts +18 -0
  44. package/types/index.d.ts.map +1 -0
  45. package/types/marketplace.d.ts +101 -0
  46. package/types/marketplace.d.ts.map +1 -0
  47. package/types/ops.d.ts +141 -0
  48. package/types/ops.d.ts.map +1 -0
  49. package/types/policy.d.ts +100 -0
  50. package/types/policy.d.ts.map +1 -0
  51. package/types/state.d.ts +105 -0
  52. package/types/state.d.ts.map +1 -0
  53. package/types/vault.d.ts +62 -0
  54. package/types/vault.d.ts.map +1 -0
package/types/api.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ /**
2
+ * API types for AgenShield daemon communication
3
+ */
4
+ import type { DaemonStatus } from './daemon';
5
+ import type { ShieldConfig } from './config';
6
+ export interface ApiResponse<T> {
7
+ success: boolean;
8
+ data?: T;
9
+ error?: ApiError;
10
+ }
11
+ export interface ApiError {
12
+ code: string;
13
+ message: string;
14
+ details?: unknown;
15
+ }
16
+ /**
17
+ * Security status data
18
+ */
19
+ export interface SecurityStatusData {
20
+ /** Is the current process running as root? */
21
+ runningAsRoot: boolean;
22
+ /** Current user */
23
+ currentUser: string;
24
+ /** Is sandbox user created? */
25
+ sandboxUserExists: boolean;
26
+ /** Is OpenClaw isolated to sandbox user? */
27
+ isIsolated: boolean;
28
+ /** Is guarded shell installed? */
29
+ guardedShellInstalled: boolean;
30
+ /** Exposed secrets found in environment (names only) */
31
+ exposedSecrets: string[];
32
+ /** Security warnings */
33
+ warnings: string[];
34
+ /** Critical security issues */
35
+ critical: string[];
36
+ /** Recommendations */
37
+ recommendations: string[];
38
+ /** Overall security level */
39
+ level: 'secure' | 'partial' | 'unprotected' | 'critical';
40
+ }
41
+ export type GetStatusResponse = ApiResponse<DaemonStatus>;
42
+ export type GetConfigResponse = ApiResponse<ShieldConfig>;
43
+ export type UpdateConfigResponse = ApiResponse<ShieldConfig>;
44
+ export type HealthResponse = ApiResponse<{
45
+ ok: boolean;
46
+ timestamp: string;
47
+ mode?: 'daemon' | 'setup';
48
+ }>;
49
+ export type GetSecurityStatusResponse = ApiResponse<SecurityStatusData>;
50
+ export interface FsBrowseEntry {
51
+ name: string;
52
+ path: string;
53
+ type: 'file' | 'directory';
54
+ }
55
+ export type FsBrowseResponse = ApiResponse<{
56
+ entries: FsBrowseEntry[];
57
+ }>;
58
+ export type UpdateConfigRequest = Partial<ShieldConfig>;
59
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wDAAwD;IACxD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;CAC1D;AAGD,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,CAAC,CAAC;AACxG,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAGxE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AACD,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC;IAAE,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAAC;AAGzE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Authentication types
3
+ *
4
+ * Types for passcode authentication and session management
5
+ */
6
+ /**
7
+ * Auth status response - check if passcode is set and protection enabled
8
+ */
9
+ export interface AuthStatusResponse {
10
+ /** Whether a passcode has been set */
11
+ passcodeSet: boolean;
12
+ /** Whether passcode protection is enabled */
13
+ protectionEnabled: boolean;
14
+ /** Whether anonymous read-only access is allowed (default: true) */
15
+ allowAnonymousReadOnly: boolean;
16
+ /** Whether the account is currently locked out due to failed attempts */
17
+ lockedOut: boolean;
18
+ /** ISO timestamp when lockout expires (if locked) */
19
+ lockedUntil?: string;
20
+ }
21
+ /**
22
+ * Unlock request - authenticate with passcode
23
+ */
24
+ export interface UnlockRequest {
25
+ /** The passcode to verify */
26
+ passcode: string;
27
+ }
28
+ /**
29
+ * Unlock response - returns session token on success
30
+ */
31
+ export interface UnlockResponse {
32
+ /** Whether authentication succeeded */
33
+ success: boolean;
34
+ /** Session token (only on success) */
35
+ token?: string;
36
+ /** Token expiration timestamp in ms (only on success) */
37
+ expiresAt?: number;
38
+ /** Error message (only on failure) */
39
+ error?: string;
40
+ /** Remaining attempts before lockout (only on failure) */
41
+ remainingAttempts?: number;
42
+ }
43
+ /**
44
+ * Lock request - invalidate session
45
+ */
46
+ export interface LockRequest {
47
+ /** Session token to invalidate */
48
+ token: string;
49
+ }
50
+ /**
51
+ * Lock response
52
+ */
53
+ export interface LockResponse {
54
+ /** Whether the session was invalidated */
55
+ success: boolean;
56
+ }
57
+ /**
58
+ * Setup request - set initial passcode
59
+ */
60
+ export interface SetupPasscodeRequest {
61
+ /** The passcode to set */
62
+ passcode: string;
63
+ /** Whether to enable protection immediately */
64
+ enableProtection?: boolean;
65
+ }
66
+ /**
67
+ * Setup response
68
+ */
69
+ export interface SetupPasscodeResponse {
70
+ /** Whether setup succeeded */
71
+ success: boolean;
72
+ /** Error message (only on failure) */
73
+ error?: string;
74
+ }
75
+ /**
76
+ * Change passcode request
77
+ */
78
+ export interface ChangePasscodeRequest {
79
+ /** Current passcode (required unless running as root) */
80
+ oldPasscode?: string;
81
+ /** New passcode to set */
82
+ newPasscode: string;
83
+ }
84
+ /**
85
+ * Change passcode response
86
+ */
87
+ export interface ChangePasscodeResponse {
88
+ /** Whether change succeeded */
89
+ success: boolean;
90
+ /** Error message (only on failure) */
91
+ error?: string;
92
+ }
93
+ /**
94
+ * Session info (internal use)
95
+ */
96
+ export interface Session {
97
+ /** Session token */
98
+ token: string;
99
+ /** When session was created */
100
+ createdAt: number;
101
+ /** When session expires */
102
+ expiresAt: number;
103
+ /** Client identifier (optional) */
104
+ clientId?: string;
105
+ }
106
+ /**
107
+ * Auth configuration
108
+ */
109
+ export interface AuthConfig {
110
+ /** Session TTL in milliseconds (default: 30 minutes) */
111
+ sessionTtlMs: number;
112
+ /** Maximum failed attempts before lockout */
113
+ maxFailedAttempts: number;
114
+ /** Lockout duration in milliseconds */
115
+ lockoutDurationMs: number;
116
+ }
117
+ /**
118
+ * Default auth configuration
119
+ */
120
+ export declare const DEFAULT_AUTH_CONFIG: AuthConfig;
121
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,6CAA6C;IAC7C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,CAAC;IAChC,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Types for installation backup and restore
3
+ */
4
+ /**
5
+ * Information about the original OpenClaw installation
6
+ */
7
+ export interface OriginalInstallation {
8
+ /** Installation method */
9
+ method: 'npm' | 'git';
10
+ /** Path to the original package directory */
11
+ packagePath: string;
12
+ /** Path to the original binary */
13
+ binaryPath?: string;
14
+ /** Path to the original config directory */
15
+ configPath?: string;
16
+ /** Original config backup path (renamed to .backup-<timestamp>) */
17
+ configBackupPath?: string;
18
+ /** Installed version */
19
+ version?: string;
20
+ /** Path to the git repo (for git installs) */
21
+ gitRepoPath?: string;
22
+ }
23
+ /**
24
+ * Information about the sandbox user
25
+ */
26
+ export interface SandboxUserInfo {
27
+ /** Username (typically 'openclaw') */
28
+ username: string;
29
+ /** User ID */
30
+ uid: number;
31
+ /** Group ID */
32
+ gid: number;
33
+ /** Home directory */
34
+ homeDir: string;
35
+ }
36
+ /**
37
+ * Paths where files were migrated to
38
+ */
39
+ export interface MigratedPaths {
40
+ /** Path to the migrated package */
41
+ packagePath: string;
42
+ /** Path to the migrated config */
43
+ configPath: string;
44
+ /** Path to the new binary wrapper */
45
+ binaryPath: string;
46
+ }
47
+ /**
48
+ * Complete installation backup for safe reversal
49
+ */
50
+ export interface InstallationBackup {
51
+ /** Backup file format version */
52
+ version: '1.0';
53
+ /** Timestamp when backup was created (ISO 8601) */
54
+ timestamp: string;
55
+ /** Original user who ran the setup */
56
+ originalUser: string;
57
+ /** Original user's home directory */
58
+ originalUserHome: string;
59
+ /** Details about the original installation */
60
+ originalInstallation: OriginalInstallation;
61
+ /** Details about the sandbox user */
62
+ sandboxUser: SandboxUserInfo;
63
+ /** Paths where files were migrated */
64
+ migratedPaths: MigratedPaths;
65
+ }
66
+ /**
67
+ * Backup file location and permissions
68
+ */
69
+ export declare const BACKUP_CONFIG: {
70
+ /** Directory for AgenShield configuration */
71
+ readonly configDir: "/etc/agenshield";
72
+ /** Backup file path */
73
+ readonly backupPath: "/etc/agenshield/backup.json";
74
+ /** Directory permissions (readable by all, writable by root) */
75
+ readonly dirMode: 493;
76
+ /** File permissions (root only) */
77
+ readonly fileMode: 384;
78
+ };
79
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/types/backup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IACtB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,qCAAqC;IACrC,WAAW,EAAE,eAAe,CAAC;IAC7B,sCAAsC;IACtC,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB,6CAA6C;;IAE7C,uBAAuB;;IAEvB,gEAAgE;;IAEhE,mCAAmC;;CAE3B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Command Catalog types — shared across packages
3
+ */
4
+ export type SecurityRisk = 'high' | 'medium' | 'low' | 'info';
5
+ export type CommandCategory = 'system' | 'package-manager' | 'network' | 'shell' | 'language-runtime' | 'other';
6
+ export interface CatalogEntry {
7
+ description: string;
8
+ category: CommandCategory;
9
+ risk: SecurityRisk;
10
+ riskReason: string;
11
+ tags: string[];
12
+ }
13
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/types/catalog.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,kBAAkB,GAAG,OAAO,CAAC;AAEhH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Configuration types for AgenShield
3
+ */
4
+ /**
5
+ * User definition for dynamic user creation
6
+ */
7
+ export interface UserDefinition {
8
+ /** Username (e.g., 'agenshield_agent' or 'test1_agenshield_agent') */
9
+ username: string;
10
+ /** User ID */
11
+ uid: number;
12
+ /** Primary group ID */
13
+ gid: number;
14
+ /** User shell */
15
+ shell: string;
16
+ /** Home directory */
17
+ home: string;
18
+ /** Real name / description */
19
+ realname: string;
20
+ /** Additional groups */
21
+ groups: string[];
22
+ }
23
+ /**
24
+ * Group definition for dynamic group creation
25
+ */
26
+ export interface GroupDefinition {
27
+ /** Group name (e.g., 'agenshield' or 'test1_agenshield') */
28
+ name: string;
29
+ /** Group ID */
30
+ gid: number;
31
+ /** Description */
32
+ description: string;
33
+ }
34
+ /**
35
+ * Configuration for user and group creation
36
+ * Supports optional prefix for testing/multiple instances
37
+ */
38
+ export interface UserConfig {
39
+ /** Agent user definition */
40
+ agentUser: UserDefinition;
41
+ /** Broker user definition */
42
+ brokerUser: UserDefinition;
43
+ /** Groups to create */
44
+ groups: {
45
+ /** Socket access group (clawshield) */
46
+ socket: GroupDefinition;
47
+ /** Workspace access group (clawworkspace) */
48
+ workspace: GroupDefinition;
49
+ };
50
+ /** Optional prefix for all names (e.g., 'test1' → 'test1_agenshield_agent') */
51
+ prefix: string;
52
+ /** Base name for users/groups (default: 'agenshield') */
53
+ baseName: string;
54
+ /** Base UID for user creation */
55
+ baseUid: number;
56
+ /** Base GID for group creation */
57
+ baseGid: number;
58
+ }
59
+ /**
60
+ * Paths configuration (can be derived from UserConfig)
61
+ */
62
+ export interface PathsConfig {
63
+ /** Socket path */
64
+ socketPath: string;
65
+ /** Main config directory */
66
+ configDir: string;
67
+ /** Policies directory */
68
+ policiesDir: string;
69
+ /** Seatbelt profiles directory */
70
+ seatbeltDir: string;
71
+ /** Log directory */
72
+ logDir: string;
73
+ /** Agent home directory */
74
+ agentHomeDir: string;
75
+ /** Socket directory */
76
+ socketDir: string;
77
+ }
78
+ /**
79
+ * Full installation configuration
80
+ */
81
+ export interface InstallationConfig {
82
+ /** User and group configuration */
83
+ users: UserConfig;
84
+ /** Paths configuration */
85
+ paths: PathsConfig;
86
+ /** Whether to enable HTTP fallback */
87
+ httpFallback: boolean;
88
+ /** HTTP fallback port */
89
+ httpPort: number;
90
+ }
91
+ export interface ShieldConfig {
92
+ version: string;
93
+ daemon: DaemonConfig;
94
+ broker?: BrokerConfig;
95
+ policies: PolicyConfig[];
96
+ vault?: VaultConfig;
97
+ skills?: SkillsConfig;
98
+ soul?: SoulConfig;
99
+ }
100
+ export interface DaemonConfig {
101
+ /** HTTP server port (default: 5200) */
102
+ port: number;
103
+ /** HTTP server host (default: 'localhost') */
104
+ host: string;
105
+ /** Logging level */
106
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
107
+ /** Whether to add agen.shield to /etc/hosts */
108
+ enableHostsEntry: boolean;
109
+ }
110
+ export interface BrokerConfig {
111
+ /** Unix socket path */
112
+ socketPath: string;
113
+ /** Whether HTTP fallback is enabled */
114
+ httpEnabled: boolean;
115
+ /** HTTP fallback port */
116
+ httpPort: number;
117
+ /** HTTP fallback host */
118
+ httpHost: string;
119
+ /** Path to policies directory */
120
+ policiesPath: string;
121
+ /** Path to audit log */
122
+ auditLogPath: string;
123
+ /** Whether to fail open if policy check fails */
124
+ failOpen: boolean;
125
+ /** Socket file permissions (octal) */
126
+ socketMode?: number;
127
+ /** Socket owner user */
128
+ socketOwner?: string;
129
+ /** Socket owner group */
130
+ socketGroup?: string;
131
+ }
132
+ export interface PolicyConfig {
133
+ /** Unique identifier for the policy */
134
+ id: string;
135
+ /** Human-readable name */
136
+ name: string;
137
+ /** Policy action: allow, deny, or approval (future) */
138
+ action: 'allow' | 'deny' | 'approval';
139
+ /** What this policy targets */
140
+ target: 'skill' | 'command' | 'url' | 'filesystem';
141
+ /** URL/command patterns to match */
142
+ patterns: string[];
143
+ /** Whether this policy is active */
144
+ enabled: boolean;
145
+ /** Priority (higher = evaluated first) */
146
+ priority?: number;
147
+ /** Operations this policy applies to */
148
+ operations?: string[];
149
+ }
150
+ export interface VaultConfig {
151
+ /** Whether vault is enabled */
152
+ enabled: boolean;
153
+ /** Secret provider type */
154
+ provider: 'local' | 'env';
155
+ /** Path to encrypted vault file */
156
+ vaultPath?: string;
157
+ }
158
+ export interface SkillsConfig {
159
+ /** Whether skills are enabled */
160
+ enabled: boolean;
161
+ /** Directories to load skills from */
162
+ directories: string[];
163
+ /** Built-in skills to enable */
164
+ builtinSkills?: string[];
165
+ }
166
+ export interface SoulConfig {
167
+ /** Whether soul injection is enabled */
168
+ enabled: boolean;
169
+ /** Injection mode */
170
+ mode: 'prepend' | 'append' | 'replace';
171
+ /** Custom soul content */
172
+ content?: string;
173
+ /** Security level */
174
+ securityLevel?: 'low' | 'medium' | 'high';
175
+ }
176
+ export interface SkillAnalysis {
177
+ status: 'pending' | 'analyzing' | 'complete' | 'error';
178
+ analyzedAt?: string;
179
+ analyzerId: string;
180
+ vulnerability?: {
181
+ level: 'safe' | 'low' | 'medium' | 'high' | 'critical';
182
+ details: string[];
183
+ suggestions?: string[];
184
+ };
185
+ commands: ExtractedCommand[];
186
+ error?: string;
187
+ }
188
+ export interface ExtractedCommand {
189
+ name: string;
190
+ source: 'metadata' | 'analysis';
191
+ field?: string;
192
+ resolvedPath?: string;
193
+ available: boolean;
194
+ required: boolean;
195
+ }
196
+ export interface AnalyzerConfig {
197
+ id: string;
198
+ name: string;
199
+ type: 'agenshield' | 'custom';
200
+ endpoint?: string;
201
+ enabled: boolean;
202
+ apiKey?: string;
203
+ }
204
+ export interface SystemBinary {
205
+ name: string;
206
+ path: string;
207
+ }
208
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Daemon status types for AgenShield
3
+ */
4
+ export interface DaemonStatus {
5
+ /** Whether the daemon is currently running */
6
+ running: boolean;
7
+ /** Process ID of the daemon */
8
+ pid?: number;
9
+ /** Uptime in seconds */
10
+ uptime?: number;
11
+ /** Version of the daemon */
12
+ version: string;
13
+ /** Port the daemon is listening on */
14
+ port: number;
15
+ /** ISO timestamp when the daemon started */
16
+ startedAt?: string;
17
+ /** Agent username from state (type='agent') */
18
+ agentUsername?: string;
19
+ /** Workspace group name from state (type='workspace') */
20
+ workspaceGroup?: string;
21
+ }
22
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/types/daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Discovery types — shared across packages for binary/skill scanning
3
+ */
4
+ import type { CommandCategory } from './catalog';
5
+ export type ExecutionContext = 'root' | 'user' | 'workspace';
6
+ export type BinarySourceKind = 'system' | 'homebrew' | 'npm-global' | 'yarn-global' | 'agent-bin' | 'workspace-bin' | 'path-other';
7
+ export type ProtectionKind = 'proxied' | 'wrapped' | 'allowed' | 'unprotected';
8
+ export interface DiscoveredBinary {
9
+ name: string;
10
+ path: string;
11
+ dir: string;
12
+ sourceKind: BinarySourceKind;
13
+ contexts: ExecutionContext[];
14
+ protection: ProtectionKind;
15
+ category: CommandCategory;
16
+ isShieldExecSymlink: boolean;
17
+ }
18
+ export interface BinaryDirectory {
19
+ path: string;
20
+ sourceKind: BinarySourceKind;
21
+ contexts: ExecutionContext[];
22
+ count: number;
23
+ }
24
+ export interface SkillMetadata {
25
+ name?: string;
26
+ description?: string;
27
+ version?: string;
28
+ homepage?: string;
29
+ emoji?: string;
30
+ 'user-invocable'?: boolean;
31
+ 'disable-model-invocation'?: boolean;
32
+ 'command-dispatch'?: string;
33
+ 'command-tool'?: string;
34
+ 'command-arg-mode'?: string;
35
+ requires?: {
36
+ bins?: string[];
37
+ anyBins?: string[];
38
+ env?: string[];
39
+ config?: string[];
40
+ [key: string]: unknown;
41
+ };
42
+ metadata?: {
43
+ openclaw?: OpenClawSkillMetadata;
44
+ [key: string]: unknown;
45
+ };
46
+ agenshield?: {
47
+ allowedCommands?: string[];
48
+ [key: string]: unknown;
49
+ };
50
+ [key: string]: unknown;
51
+ }
52
+ export interface OpenClawSkillMetadata {
53
+ always?: boolean;
54
+ os?: string[];
55
+ requires?: {
56
+ bins?: string[];
57
+ anyBins?: string[];
58
+ env?: string[];
59
+ config?: string[];
60
+ };
61
+ primaryEnv?: string;
62
+ homepage?: string;
63
+ install?: Array<{
64
+ id: string;
65
+ kind: string;
66
+ formula?: string;
67
+ bins?: string[];
68
+ }>;
69
+ }
70
+ export interface SkillExtractedInfo {
71
+ /** API keys / env vars required */
72
+ apiKeys: string[];
73
+ /** Binary dependencies */
74
+ bins: string[];
75
+ /** Optional binary alternatives */
76
+ anyBins: string[];
77
+ /** OpenClaw config paths required */
78
+ configOptions: string[];
79
+ /** Install instructions */
80
+ installSteps: OpenClawSkillMetadata['install'];
81
+ }
82
+ export interface DiscoveredSkill {
83
+ name: string;
84
+ path: string;
85
+ hasSkillMd: boolean;
86
+ metadata: SkillMetadata | null;
87
+ requiredCommands: SkillCommandRequirement[];
88
+ approval: 'approved' | 'quarantined' | 'unknown';
89
+ extractedInfo?: SkillExtractedInfo;
90
+ }
91
+ export interface SkillCommandRequirement {
92
+ name: string;
93
+ source: 'metadata' | 'analysis';
94
+ available: boolean;
95
+ resolvedPath?: string;
96
+ protection?: ProtectionKind;
97
+ required: boolean;
98
+ }
99
+ export interface DiscoveryOptions {
100
+ agentHome?: string;
101
+ workspaceDir?: string;
102
+ scanSkills?: boolean;
103
+ extraDirs?: string[];
104
+ }
105
+ export interface DiscoveryResult {
106
+ scannedAt: string;
107
+ binaries: DiscoveredBinary[];
108
+ directories: BinaryDirectory[];
109
+ skills: DiscoveredSkill[];
110
+ summary: DiscoverySummary;
111
+ }
112
+ export interface DiscoverySummary {
113
+ totalBinaries: number;
114
+ totalDirectories: number;
115
+ totalSkills: number;
116
+ byContext: Record<ExecutionContext, number>;
117
+ byProtection: Record<ProtectionKind, number>;
118
+ bySourceKind: Partial<Record<BinarySourceKind, number>>;
119
+ skillsWithMissingDeps: number;
120
+ }
121
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/types/discovery.ts"],"names":[],"mappings":"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"}