@agenshield/broker 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 (57) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +141 -0
  3. package/audit/logger.d.ts +69 -0
  4. package/audit/logger.d.ts.map +1 -0
  5. package/client/broker-client.d.ts +91 -0
  6. package/client/broker-client.d.ts.map +1 -0
  7. package/client/index.d.ts +8 -0
  8. package/client/index.d.ts.map +1 -0
  9. package/client/index.js +222 -0
  10. package/client/shield-client.d.ts +8 -0
  11. package/client/shield-client.d.ts.map +1 -0
  12. package/client/shield-client.js +410 -0
  13. package/handlers/exec.d.ts +13 -0
  14. package/handlers/exec.d.ts.map +1 -0
  15. package/handlers/file.d.ts +20 -0
  16. package/handlers/file.d.ts.map +1 -0
  17. package/handlers/http.d.ts +9 -0
  18. package/handlers/http.d.ts.map +1 -0
  19. package/handlers/index.d.ts +12 -0
  20. package/handlers/index.d.ts.map +1 -0
  21. package/handlers/open-url.d.ts +9 -0
  22. package/handlers/open-url.d.ts.map +1 -0
  23. package/handlers/ping.d.ts +9 -0
  24. package/handlers/ping.d.ts.map +1 -0
  25. package/handlers/secret-inject.d.ts +9 -0
  26. package/handlers/secret-inject.d.ts.map +1 -0
  27. package/handlers/skill-install.d.ts +17 -0
  28. package/handlers/skill-install.d.ts.map +1 -0
  29. package/handlers/types.d.ts +28 -0
  30. package/handlers/types.d.ts.map +1 -0
  31. package/http-fallback.d.ts +54 -0
  32. package/http-fallback.d.ts.map +1 -0
  33. package/index.d.ts +18 -0
  34. package/index.d.ts.map +1 -0
  35. package/index.js +2636 -0
  36. package/main.d.ts +8 -0
  37. package/main.d.ts.map +1 -0
  38. package/main.js +2136 -0
  39. package/package.json +34 -0
  40. package/policies/builtin.d.ts +15 -0
  41. package/policies/builtin.d.ts.map +1 -0
  42. package/policies/command-allowlist.d.ts +62 -0
  43. package/policies/command-allowlist.d.ts.map +1 -0
  44. package/policies/enforcer.d.ts +98 -0
  45. package/policies/enforcer.d.ts.map +1 -0
  46. package/policies/index.d.ts +8 -0
  47. package/policies/index.d.ts.map +1 -0
  48. package/seatbelt/generator.d.ts +39 -0
  49. package/seatbelt/generator.d.ts.map +1 -0
  50. package/seatbelt/templates.d.ts +36 -0
  51. package/seatbelt/templates.d.ts.map +1 -0
  52. package/secrets/vault.d.ts +67 -0
  53. package/secrets/vault.d.ts.map +1 -0
  54. package/server.d.ts +54 -0
  55. package/server.d.ts.map +1 -0
  56. package/types.d.ts +285 -0
  57. package/types.d.ts.map +1 -0
package/types.d.ts ADDED
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Broker types and interfaces
3
+ */
4
+ import type { OperationType } from '@agenshield/ipc';
5
+ /**
6
+ * Broker daemon configuration
7
+ */
8
+ export interface BrokerConfig {
9
+ /** Unix socket path */
10
+ socketPath: string;
11
+ /** Whether HTTP fallback is enabled */
12
+ httpEnabled: boolean;
13
+ /** HTTP fallback port */
14
+ httpPort: number;
15
+ /** HTTP fallback host (should be localhost) */
16
+ httpHost: string;
17
+ /** Path to configuration file */
18
+ configPath: string;
19
+ /** Path to policies directory */
20
+ policiesPath: string;
21
+ /** Path to audit log */
22
+ auditLogPath: string;
23
+ /** Log level */
24
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
25
+ /** Whether to fail open if policy check fails */
26
+ failOpen: boolean;
27
+ /** Socket file permissions (octal) */
28
+ socketMode: number;
29
+ /** Socket owner user */
30
+ socketOwner?: string;
31
+ /** Socket owner group */
32
+ socketGroup?: string;
33
+ }
34
+ /**
35
+ * Context passed to operation handlers
36
+ */
37
+ export interface HandlerContext {
38
+ /** Request ID for tracing */
39
+ requestId: string;
40
+ /** Channel the request came from */
41
+ channel: 'socket' | 'http';
42
+ /** Client user ID (from socket credentials) */
43
+ clientUid?: number;
44
+ /** Client group ID (from socket credentials) */
45
+ clientGid?: number;
46
+ /** Client process ID */
47
+ clientPid?: number;
48
+ /** Timestamp of request */
49
+ timestamp: Date;
50
+ /** Broker configuration */
51
+ config: BrokerConfig;
52
+ }
53
+ /**
54
+ * Result from an operation handler
55
+ */
56
+ export interface HandlerResult<T = unknown> {
57
+ /** Whether the operation succeeded */
58
+ success: boolean;
59
+ /** Result data (if successful) */
60
+ data?: T;
61
+ /** Error information (if failed) */
62
+ error?: {
63
+ code: number;
64
+ message: string;
65
+ details?: unknown;
66
+ };
67
+ /** Audit metadata */
68
+ audit?: {
69
+ duration: number;
70
+ policyMatched?: string;
71
+ bytesTransferred?: number;
72
+ };
73
+ }
74
+ /**
75
+ * Audit log entry
76
+ */
77
+ export interface AuditEntry {
78
+ /** Unique entry ID */
79
+ id: string;
80
+ /** Timestamp */
81
+ timestamp: Date;
82
+ /** Operation type */
83
+ operation: OperationType;
84
+ /** Request channel */
85
+ channel: 'socket' | 'http';
86
+ /** Client user ID */
87
+ clientUid?: number;
88
+ /** Whether operation was allowed */
89
+ allowed: boolean;
90
+ /** Policy that matched (if any) */
91
+ policyId?: string;
92
+ /** Operation target (URL, path, command) */
93
+ target: string;
94
+ /** Operation result */
95
+ result: 'success' | 'denied' | 'error';
96
+ /** Error message if failed */
97
+ errorMessage?: string;
98
+ /** Duration in milliseconds */
99
+ durationMs: number;
100
+ /** Additional metadata */
101
+ metadata?: Record<string, unknown>;
102
+ }
103
+ /**
104
+ * Secret vault entry
105
+ */
106
+ export interface VaultEntry {
107
+ /** Secret name */
108
+ name: string;
109
+ /** Encrypted value */
110
+ encryptedValue: string;
111
+ /** Operations that can access this secret */
112
+ allowedOperations: OperationType[];
113
+ /** Created timestamp */
114
+ createdAt: Date;
115
+ /** Last accessed timestamp */
116
+ lastAccessedAt?: Date;
117
+ /** Access count */
118
+ accessCount: number;
119
+ }
120
+ /**
121
+ * JSON-RPC 2.0 request
122
+ */
123
+ export interface JsonRpcRequest {
124
+ jsonrpc: '2.0';
125
+ id: string | number;
126
+ method: OperationType;
127
+ params: Record<string, unknown>;
128
+ }
129
+ /**
130
+ * JSON-RPC 2.0 response
131
+ */
132
+ export interface JsonRpcResponse {
133
+ jsonrpc: '2.0';
134
+ id: string | number;
135
+ result?: unknown;
136
+ error?: JsonRpcError;
137
+ }
138
+ /**
139
+ * JSON-RPC 2.0 error
140
+ */
141
+ export interface JsonRpcError {
142
+ code: number;
143
+ message: string;
144
+ data?: unknown;
145
+ }
146
+ /**
147
+ * Operation-specific parameter types
148
+ */
149
+ export interface HttpRequestParams {
150
+ url: string;
151
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
152
+ headers?: Record<string, string>;
153
+ body?: string | Buffer;
154
+ timeout?: number;
155
+ followRedirects?: boolean;
156
+ }
157
+ export interface HttpRequestResult {
158
+ status: number;
159
+ statusText: string;
160
+ headers: Record<string, string>;
161
+ body: string;
162
+ }
163
+ export interface FileReadParams {
164
+ path: string;
165
+ encoding?: BufferEncoding;
166
+ }
167
+ export interface FileReadResult {
168
+ content: string;
169
+ size: number;
170
+ mtime: string;
171
+ }
172
+ export interface FileWriteParams {
173
+ path: string;
174
+ content: string;
175
+ encoding?: BufferEncoding;
176
+ mode?: number;
177
+ }
178
+ export interface FileWriteResult {
179
+ bytesWritten: number;
180
+ path: string;
181
+ }
182
+ export interface FileListParams {
183
+ path: string;
184
+ recursive?: boolean;
185
+ pattern?: string;
186
+ }
187
+ export interface FileListResult {
188
+ entries: Array<{
189
+ name: string;
190
+ path: string;
191
+ type: 'file' | 'directory' | 'symlink';
192
+ size: number;
193
+ mtime: string;
194
+ }>;
195
+ }
196
+ export interface ExecParams {
197
+ command: string;
198
+ args?: string[];
199
+ cwd?: string;
200
+ env?: Record<string, string>;
201
+ timeout?: number;
202
+ shell?: boolean;
203
+ }
204
+ export interface ExecResult {
205
+ exitCode: number;
206
+ stdout: string;
207
+ stderr: string;
208
+ signal?: string;
209
+ }
210
+ export interface OpenUrlParams {
211
+ url: string;
212
+ browser?: string;
213
+ }
214
+ export interface OpenUrlResult {
215
+ opened: boolean;
216
+ }
217
+ export interface SecretInjectParams {
218
+ name: string;
219
+ targetEnv?: string;
220
+ }
221
+ export interface SecretInjectResult {
222
+ value: string;
223
+ injected: boolean;
224
+ }
225
+ export interface PingParams {
226
+ echo?: string;
227
+ }
228
+ export interface PingResult {
229
+ pong: true;
230
+ echo?: string;
231
+ timestamp: string;
232
+ version: string;
233
+ }
234
+ /**
235
+ * Skill installation file
236
+ */
237
+ export interface SkillInstallFile {
238
+ /** Relative file name (e.g., "skill.md", "lib/utils.js") */
239
+ name: string;
240
+ /** File content (base64 encoded for binary, raw string for text) */
241
+ content: string;
242
+ /** Optional file mode (e.g., 0o755 for executable) */
243
+ mode?: number;
244
+ /** Whether content is base64 encoded */
245
+ base64?: boolean;
246
+ }
247
+ export interface SkillInstallParams {
248
+ /** Skill slug (used as directory name) */
249
+ slug: string;
250
+ /** Files to install */
251
+ files: SkillInstallFile[];
252
+ /** Whether to create a wrapper script in bin directory */
253
+ createWrapper?: boolean;
254
+ /** Agent home directory (defaults to env AGENSHIELD_AGENT_HOME) */
255
+ agentHome?: string;
256
+ /** Socket group name (defaults to env AGENSHIELD_SOCKET_GROUP) */
257
+ socketGroup?: string;
258
+ }
259
+ export interface SkillInstallResult {
260
+ /** Whether installation succeeded */
261
+ installed: boolean;
262
+ /** Path to installed skill directory */
263
+ skillDir: string;
264
+ /** Path to wrapper script (if created) */
265
+ wrapperPath?: string;
266
+ /** Number of files written */
267
+ filesWritten: number;
268
+ }
269
+ export interface SkillUninstallParams {
270
+ /** Skill slug to uninstall */
271
+ slug: string;
272
+ /** Agent home directory (defaults to env AGENSHIELD_AGENT_HOME) */
273
+ agentHome?: string;
274
+ /** Whether to remove wrapper script */
275
+ removeWrapper?: boolean;
276
+ }
277
+ export interface SkillUninstallResult {
278
+ /** Whether uninstallation succeeded */
279
+ uninstalled: boolean;
280
+ /** Path to removed skill directory */
281
+ skillDir: string;
282
+ /** Whether wrapper was removed */
283
+ wrapperRemoved: boolean;
284
+ }
285
+ //# sourceMappingURL=types.d.ts.map
package/types.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}