aegis-bridge 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 (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +404 -0
  3. package/dashboard/dist/assets/index-BoZwGLAx.css +32 -0
  4. package/dashboard/dist/assets/index-C61BkKH-.js +312 -0
  5. package/dashboard/dist/assets/index-C61BkKH-.js.map +1 -0
  6. package/dashboard/dist/index.html +14 -0
  7. package/dist/api-contracts.d.ts +229 -0
  8. package/dist/api-contracts.js +7 -0
  9. package/dist/api-contracts.typecheck.d.ts +14 -0
  10. package/dist/api-contracts.typecheck.js +1 -0
  11. package/dist/api-error-envelope.d.ts +15 -0
  12. package/dist/api-error-envelope.js +80 -0
  13. package/dist/auth.d.ts +87 -0
  14. package/dist/auth.js +276 -0
  15. package/dist/channels/index.d.ts +8 -0
  16. package/dist/channels/index.js +8 -0
  17. package/dist/channels/manager.d.ts +47 -0
  18. package/dist/channels/manager.js +115 -0
  19. package/dist/channels/telegram-style.d.ts +118 -0
  20. package/dist/channels/telegram-style.js +202 -0
  21. package/dist/channels/telegram.d.ts +91 -0
  22. package/dist/channels/telegram.js +1518 -0
  23. package/dist/channels/types.d.ts +77 -0
  24. package/dist/channels/types.js +8 -0
  25. package/dist/channels/webhook.d.ts +60 -0
  26. package/dist/channels/webhook.js +216 -0
  27. package/dist/cli.d.ts +8 -0
  28. package/dist/cli.js +252 -0
  29. package/dist/config.d.ts +90 -0
  30. package/dist/config.js +214 -0
  31. package/dist/consensus.d.ts +16 -0
  32. package/dist/consensus.js +19 -0
  33. package/dist/continuation-pointer.d.ts +11 -0
  34. package/dist/continuation-pointer.js +65 -0
  35. package/dist/diagnostics.d.ts +27 -0
  36. package/dist/diagnostics.js +95 -0
  37. package/dist/error-categories.d.ts +39 -0
  38. package/dist/error-categories.js +73 -0
  39. package/dist/events.d.ts +133 -0
  40. package/dist/events.js +389 -0
  41. package/dist/fault-injection.d.ts +29 -0
  42. package/dist/fault-injection.js +115 -0
  43. package/dist/file-utils.d.ts +2 -0
  44. package/dist/file-utils.js +37 -0
  45. package/dist/handshake.d.ts +60 -0
  46. package/dist/handshake.js +124 -0
  47. package/dist/hook-settings.d.ts +80 -0
  48. package/dist/hook-settings.js +272 -0
  49. package/dist/hook.d.ts +19 -0
  50. package/dist/hook.js +231 -0
  51. package/dist/hooks.d.ts +32 -0
  52. package/dist/hooks.js +364 -0
  53. package/dist/jsonl-watcher.d.ts +59 -0
  54. package/dist/jsonl-watcher.js +166 -0
  55. package/dist/logger.d.ts +35 -0
  56. package/dist/logger.js +65 -0
  57. package/dist/mcp-server.d.ts +123 -0
  58. package/dist/mcp-server.js +869 -0
  59. package/dist/memory-bridge.d.ts +27 -0
  60. package/dist/memory-bridge.js +137 -0
  61. package/dist/memory-routes.d.ts +3 -0
  62. package/dist/memory-routes.js +100 -0
  63. package/dist/metrics.d.ts +126 -0
  64. package/dist/metrics.js +286 -0
  65. package/dist/model-router.d.ts +53 -0
  66. package/dist/model-router.js +150 -0
  67. package/dist/monitor.d.ts +103 -0
  68. package/dist/monitor.js +820 -0
  69. package/dist/path-utils.d.ts +11 -0
  70. package/dist/path-utils.js +21 -0
  71. package/dist/permission-evaluator.d.ts +10 -0
  72. package/dist/permission-evaluator.js +48 -0
  73. package/dist/permission-guard.d.ts +51 -0
  74. package/dist/permission-guard.js +196 -0
  75. package/dist/permission-request-manager.d.ts +12 -0
  76. package/dist/permission-request-manager.js +36 -0
  77. package/dist/permission-routes.d.ts +7 -0
  78. package/dist/permission-routes.js +28 -0
  79. package/dist/pipeline.d.ts +97 -0
  80. package/dist/pipeline.js +291 -0
  81. package/dist/process-utils.d.ts +4 -0
  82. package/dist/process-utils.js +73 -0
  83. package/dist/question-manager.d.ts +54 -0
  84. package/dist/question-manager.js +80 -0
  85. package/dist/retry.d.ts +11 -0
  86. package/dist/retry.js +34 -0
  87. package/dist/safe-json.d.ts +12 -0
  88. package/dist/safe-json.js +22 -0
  89. package/dist/screenshot.d.ts +28 -0
  90. package/dist/screenshot.js +60 -0
  91. package/dist/server.d.ts +10 -0
  92. package/dist/server.js +1973 -0
  93. package/dist/session-cleanup.d.ts +18 -0
  94. package/dist/session-cleanup.js +11 -0
  95. package/dist/session.d.ts +379 -0
  96. package/dist/session.js +1568 -0
  97. package/dist/shutdown-utils.d.ts +5 -0
  98. package/dist/shutdown-utils.js +24 -0
  99. package/dist/signal-cleanup-helper.d.ts +48 -0
  100. package/dist/signal-cleanup-helper.js +117 -0
  101. package/dist/sse-limiter.d.ts +47 -0
  102. package/dist/sse-limiter.js +61 -0
  103. package/dist/sse-writer.d.ts +31 -0
  104. package/dist/sse-writer.js +94 -0
  105. package/dist/ssrf.d.ts +102 -0
  106. package/dist/ssrf.js +267 -0
  107. package/dist/startup.d.ts +6 -0
  108. package/dist/startup.js +162 -0
  109. package/dist/suppress.d.ts +33 -0
  110. package/dist/suppress.js +79 -0
  111. package/dist/swarm-monitor.d.ts +117 -0
  112. package/dist/swarm-monitor.js +300 -0
  113. package/dist/template-store.d.ts +45 -0
  114. package/dist/template-store.js +142 -0
  115. package/dist/terminal-parser.d.ts +16 -0
  116. package/dist/terminal-parser.js +346 -0
  117. package/dist/tmux-capture-cache.d.ts +18 -0
  118. package/dist/tmux-capture-cache.js +34 -0
  119. package/dist/tmux.d.ts +183 -0
  120. package/dist/tmux.js +906 -0
  121. package/dist/tool-registry.d.ts +40 -0
  122. package/dist/tool-registry.js +83 -0
  123. package/dist/transcript.d.ts +63 -0
  124. package/dist/transcript.js +284 -0
  125. package/dist/utils/circular-buffer.d.ts +11 -0
  126. package/dist/utils/circular-buffer.js +37 -0
  127. package/dist/utils/redact-headers.d.ts +13 -0
  128. package/dist/utils/redact-headers.js +54 -0
  129. package/dist/validation.d.ts +406 -0
  130. package/dist/validation.js +415 -0
  131. package/dist/verification.d.ts +2 -0
  132. package/dist/verification.js +72 -0
  133. package/dist/worktree-lookup.d.ts +24 -0
  134. package/dist/worktree-lookup.js +71 -0
  135. package/dist/ws-terminal.d.ts +32 -0
  136. package/dist/ws-terminal.js +348 -0
  137. package/package.json +83 -0
@@ -0,0 +1,406 @@
1
+ /**
2
+ * validation.ts — Zod schemas for API request body validation.
3
+ *
4
+ * Issue #359: Centralized validation for all POST route bodies.
5
+ * Issue #435: Path traversal defense in validateWorkDir.
6
+ */
7
+ import { z } from 'zod';
8
+ /** Regex for UUID v4 format: 8-4-4-4-12 hex digits */
9
+ export declare const UUID_REGEX: RegExp;
10
+ /** POST /v1/auth/keys */
11
+ export declare const authKeySchema: z.ZodObject<{
12
+ name: z.ZodString;
13
+ rateLimit: z.ZodOptional<z.ZodNumber>;
14
+ }, z.core.$strict>;
15
+ /** Maximum length for user-supplied prompts/commands (Issue #411). */
16
+ export declare const MAX_INPUT_LENGTH = 10000;
17
+ /** POST /v1/sessions/:id/send */
18
+ export declare const sendMessageSchema: z.ZodObject<{
19
+ text: z.ZodString;
20
+ }, z.core.$strict>;
21
+ /** POST /v1/sessions/:id/command */
22
+ export declare const commandSchema: z.ZodObject<{
23
+ command: z.ZodString;
24
+ }, z.core.$strict>;
25
+ /** POST /v1/sessions/:id/bash */
26
+ export declare const bashSchema: z.ZodObject<{
27
+ command: z.ZodString;
28
+ }, z.core.$strict>;
29
+ /** POST /v1/sessions/:id/screenshot */
30
+ export declare const screenshotSchema: z.ZodObject<{
31
+ url: z.ZodString;
32
+ fullPage: z.ZodOptional<z.ZodBoolean>;
33
+ width: z.ZodOptional<z.ZodNumber>;
34
+ height: z.ZodOptional<z.ZodNumber>;
35
+ }, z.core.$strict>;
36
+ /** Webhook endpoint — validates structure of each webhook entry */
37
+ export declare const webhookEndpointSchema: z.ZodObject<{
38
+ url: z.ZodString;
39
+ events: z.ZodOptional<z.ZodArray<z.ZodString>>;
40
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
41
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
42
+ }, z.core.$strict>;
43
+ /** POST /v1/hooks/:eventName — CC hook event payload (Issue #665). */
44
+ export declare const hookBodySchema: z.ZodObject<{
45
+ session_id: z.ZodOptional<z.ZodString>;
46
+ agent_name: z.ZodOptional<z.ZodString>;
47
+ agent_type: z.ZodOptional<z.ZodString>;
48
+ tool_name: z.ZodOptional<z.ZodString>;
49
+ tool_input: z.ZodOptional<z.ZodObject<{
50
+ command: z.ZodOptional<z.ZodString>;
51
+ }, z.core.$loose>>;
52
+ tool_use_id: z.ZodOptional<z.ZodString>;
53
+ permission_prompt: z.ZodOptional<z.ZodString>;
54
+ permission_mode: z.ZodOptional<z.ZodString>;
55
+ hook_event_name: z.ZodOptional<z.ZodString>;
56
+ model: z.ZodOptional<z.ZodString>;
57
+ timestamp: z.ZodOptional<z.ZodString>;
58
+ stop_reason: z.ZodOptional<z.ZodString>;
59
+ cwd: z.ZodOptional<z.ZodString>;
60
+ command: z.ZodOptional<z.ZodString>;
61
+ }, z.core.$loose>;
62
+ /** POST /v1/sessions/:id/hooks/permission */
63
+ export declare const permissionHookSchema: z.ZodObject<{
64
+ session_id: z.ZodOptional<z.ZodString>;
65
+ tool_name: z.ZodOptional<z.ZodString>;
66
+ tool_input: z.ZodOptional<z.ZodUnknown>;
67
+ permission_mode: z.ZodOptional<z.ZodString>;
68
+ hook_event_name: z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strict>;
70
+ /** POST /v1/sessions/:id/hooks/stop */
71
+ export declare const stopHookSchema: z.ZodObject<{
72
+ session_id: z.ZodOptional<z.ZodString>;
73
+ stop_reason: z.ZodOptional<z.ZodString>;
74
+ hook_event_name: z.ZodOptional<z.ZodString>;
75
+ }, z.core.$strict>;
76
+ /** POST /v1/sessions/batch — max 50 sessions per batch */
77
+ export declare const batchSessionSchema: z.ZodObject<{
78
+ sessions: z.ZodArray<z.ZodObject<{
79
+ name: z.ZodOptional<z.ZodString>;
80
+ workDir: z.ZodString;
81
+ prompt: z.ZodOptional<z.ZodString>;
82
+ permissionMode: z.ZodOptional<z.ZodEnum<{
83
+ bypassPermissions: "bypassPermissions";
84
+ default: "default";
85
+ plan: "plan";
86
+ acceptEdits: "acceptEdits";
87
+ dontAsk: "dontAsk";
88
+ auto: "auto";
89
+ }>>;
90
+ autoApprove: z.ZodOptional<z.ZodBoolean>;
91
+ stallThresholdMs: z.ZodOptional<z.ZodNumber>;
92
+ }, z.core.$strip>>;
93
+ }, z.core.$strict>;
94
+ /** POST /v1/pipelines */
95
+ export declare const pipelineSchema: z.ZodObject<{
96
+ name: z.ZodString;
97
+ workDir: z.ZodString;
98
+ stages: z.ZodArray<z.ZodObject<{
99
+ name: z.ZodString;
100
+ workDir: z.ZodOptional<z.ZodString>;
101
+ prompt: z.ZodString;
102
+ dependsOn: z.ZodOptional<z.ZodArray<z.ZodString>>;
103
+ permissionMode: z.ZodOptional<z.ZodEnum<{
104
+ bypassPermissions: "bypassPermissions";
105
+ default: "default";
106
+ plan: "plan";
107
+ acceptEdits: "acceptEdits";
108
+ dontAsk: "dontAsk";
109
+ auto: "auto";
110
+ }>>;
111
+ autoApprove: z.ZodOptional<z.ZodBoolean>;
112
+ }, z.core.$strip>>;
113
+ }, z.core.$strict>;
114
+ /** POST /v1/handshake */
115
+ export declare const handshakeRequestSchema: z.ZodObject<{
116
+ protocolVersion: z.ZodString;
117
+ clientCapabilities: z.ZodOptional<z.ZodArray<z.ZodString>>;
118
+ clientVersion: z.ZodOptional<z.ZodString>;
119
+ }, z.core.$strict>;
120
+ /** Clamp a numeric value to [min, max]. Returns default if input is NaN. */
121
+ export declare function clamp(value: number, min: number, max: number, fallback: number): number;
122
+ /** Parse an env string to integer with NaN/isFinite guard. Returns fallback on failure. */
123
+ export declare function parseIntSafe(value: string | undefined, fallback: number): number;
124
+ /** Validate that a string looks like a UUID. */
125
+ export declare function isValidUUID(id: string): boolean;
126
+ /** Issue #700: Permission Policy Schema */
127
+ export declare const permissionRuleSchema: z.ZodObject<{
128
+ source: z.ZodEnum<{
129
+ userSettings: "userSettings";
130
+ projectSettings: "projectSettings";
131
+ localSettings: "localSettings";
132
+ flagSettings: "flagSettings";
133
+ aegisApi: "aegisApi";
134
+ }>;
135
+ ruleBehavior: z.ZodEnum<{
136
+ allow: "allow";
137
+ deny: "deny";
138
+ ask: "ask";
139
+ }>;
140
+ toolName: z.ZodOptional<z.ZodString>;
141
+ commandPattern: z.ZodOptional<z.ZodString>;
142
+ }, z.core.$strip>;
143
+ export type PermissionPolicy = z.infer<typeof permissionRuleSchema>[];
144
+ /** Issue #742: richer per-session permission profile. */
145
+ export declare const permissionConstraintSchema: z.ZodObject<{
146
+ readOnly: z.ZodOptional<z.ZodBoolean>;
147
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
148
+ maxFileSize: z.ZodOptional<z.ZodNumber>;
149
+ }, z.core.$strict>;
150
+ export declare const permissionProfileRuleSchema: z.ZodObject<{
151
+ tool: z.ZodString;
152
+ behavior: z.ZodEnum<{
153
+ allow: "allow";
154
+ deny: "deny";
155
+ ask: "ask";
156
+ }>;
157
+ pattern: z.ZodOptional<z.ZodString>;
158
+ constraints: z.ZodOptional<z.ZodObject<{
159
+ readOnly: z.ZodOptional<z.ZodBoolean>;
160
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
161
+ maxFileSize: z.ZodOptional<z.ZodNumber>;
162
+ }, z.core.$strict>>;
163
+ }, z.core.$strict>;
164
+ export declare const permissionProfileSchema: z.ZodObject<{
165
+ defaultBehavior: z.ZodEnum<{
166
+ allow: "allow";
167
+ deny: "deny";
168
+ ask: "ask";
169
+ }>;
170
+ rules: z.ZodArray<z.ZodObject<{
171
+ tool: z.ZodString;
172
+ behavior: z.ZodEnum<{
173
+ allow: "allow";
174
+ deny: "deny";
175
+ ask: "ask";
176
+ }>;
177
+ pattern: z.ZodOptional<z.ZodString>;
178
+ constraints: z.ZodOptional<z.ZodObject<{
179
+ readOnly: z.ZodOptional<z.ZodBoolean>;
180
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
181
+ maxFileSize: z.ZodOptional<z.ZodNumber>;
182
+ }, z.core.$strict>>;
183
+ }, z.core.$strict>>;
184
+ }, z.core.$strict>;
185
+ export type PermissionProfile = z.infer<typeof permissionProfileSchema>;
186
+ /** Schema for persisted SessionState (sessions: { [id]: SessionInfo }). */
187
+ export declare const persistedStateSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
188
+ id: z.ZodString;
189
+ windowId: z.ZodString;
190
+ windowName: z.ZodString;
191
+ workDir: z.ZodString;
192
+ claudeSessionId: z.ZodOptional<z.ZodString>;
193
+ jsonlPath: z.ZodOptional<z.ZodString>;
194
+ byteOffset: z.ZodNumber;
195
+ monitorOffset: z.ZodNumber;
196
+ status: z.ZodEnum<{
197
+ idle: "idle";
198
+ working: "working";
199
+ compacting: "compacting";
200
+ context_warning: "context_warning";
201
+ waiting_for_input: "waiting_for_input";
202
+ permission_prompt: "permission_prompt";
203
+ plan_mode: "plan_mode";
204
+ ask_question: "ask_question";
205
+ bash_approval: "bash_approval";
206
+ settings: "settings";
207
+ error: "error";
208
+ unknown: "unknown";
209
+ }>;
210
+ createdAt: z.ZodNumber;
211
+ lastActivity: z.ZodNumber;
212
+ stallThresholdMs: z.ZodNumber;
213
+ permissionStallMs: z.ZodDefault<z.ZodNumber>;
214
+ permissionMode: z.ZodEnum<{
215
+ bypassPermissions: "bypassPermissions";
216
+ default: "default";
217
+ plan: "plan";
218
+ acceptEdits: "acceptEdits";
219
+ dontAsk: "dontAsk";
220
+ auto: "auto";
221
+ }>;
222
+ settingsPatched: z.ZodOptional<z.ZodBoolean>;
223
+ hookSettingsFile: z.ZodOptional<z.ZodString>;
224
+ lastHookAt: z.ZodOptional<z.ZodNumber>;
225
+ activeSubagents: z.ZodOptional<z.ZodArray<z.ZodString>>;
226
+ permissionPromptAt: z.ZodOptional<z.ZodNumber>;
227
+ permissionRespondedAt: z.ZodOptional<z.ZodNumber>;
228
+ lastHookReceivedAt: z.ZodOptional<z.ZodNumber>;
229
+ lastHookEventAt: z.ZodOptional<z.ZodNumber>;
230
+ model: z.ZodOptional<z.ZodString>;
231
+ lastDeadAt: z.ZodOptional<z.ZodNumber>;
232
+ ccPid: z.ZodOptional<z.ZodNumber>;
233
+ parentId: z.ZodOptional<z.ZodString>;
234
+ children: z.ZodOptional<z.ZodArray<z.ZodString>>;
235
+ permissionPolicy: z.ZodOptional<z.ZodArray<z.ZodObject<{
236
+ source: z.ZodEnum<{
237
+ userSettings: "userSettings";
238
+ projectSettings: "projectSettings";
239
+ localSettings: "localSettings";
240
+ flagSettings: "flagSettings";
241
+ aegisApi: "aegisApi";
242
+ }>;
243
+ ruleBehavior: z.ZodEnum<{
244
+ allow: "allow";
245
+ deny: "deny";
246
+ ask: "ask";
247
+ }>;
248
+ toolName: z.ZodOptional<z.ZodString>;
249
+ commandPattern: z.ZodOptional<z.ZodString>;
250
+ }, z.core.$strip>>>;
251
+ permissionProfile: z.ZodOptional<z.ZodObject<{
252
+ defaultBehavior: z.ZodEnum<{
253
+ allow: "allow";
254
+ deny: "deny";
255
+ ask: "ask";
256
+ }>;
257
+ rules: z.ZodArray<z.ZodObject<{
258
+ tool: z.ZodString;
259
+ behavior: z.ZodEnum<{
260
+ allow: "allow";
261
+ deny: "deny";
262
+ ask: "ask";
263
+ }>;
264
+ pattern: z.ZodOptional<z.ZodString>;
265
+ constraints: z.ZodOptional<z.ZodObject<{
266
+ readOnly: z.ZodOptional<z.ZodBoolean>;
267
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
268
+ maxFileSize: z.ZodOptional<z.ZodNumber>;
269
+ }, z.core.$strict>>;
270
+ }, z.core.$strict>>;
271
+ }, z.core.$strict>>;
272
+ }, z.core.$strip>>;
273
+ /** Schema for a single continuation pointer entry in session_map.json (Issue #900). */
274
+ export declare const sessionMapEntrySchema: z.ZodObject<{
275
+ session_id: z.ZodString;
276
+ cwd: z.ZodString;
277
+ window_name: z.ZodString;
278
+ transcript_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
279
+ permission_mode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
280
+ agent_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
281
+ source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
282
+ agent_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
283
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
284
+ written_at: z.ZodNumber;
285
+ schema_version: z.ZodOptional<z.ZodNumber>;
286
+ expires_at: z.ZodOptional<z.ZodNumber>;
287
+ }, z.core.$strip>;
288
+ /** Schema for session_map.json entries. */
289
+ export declare const sessionMapSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
290
+ session_id: z.ZodString;
291
+ cwd: z.ZodString;
292
+ window_name: z.ZodString;
293
+ transcript_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
294
+ permission_mode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
295
+ agent_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
296
+ source: z.ZodOptional<z.ZodNullable<z.ZodString>>;
297
+ agent_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
298
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
299
+ written_at: z.ZodNumber;
300
+ schema_version: z.ZodOptional<z.ZodNumber>;
301
+ expires_at: z.ZodOptional<z.ZodNumber>;
302
+ }, z.core.$strip>>;
303
+ /** Incoming Stop/StopFailure hook payload (Issue #515). */
304
+ export declare const stopPayloadSchema: z.ZodObject<{
305
+ error: z.ZodOptional<z.ZodString>;
306
+ message: z.ZodOptional<z.ZodString>;
307
+ error_details: z.ZodOptional<z.ZodUnknown>;
308
+ last_assistant_message: z.ZodOptional<z.ZodUnknown>;
309
+ agent_id: z.ZodOptional<z.ZodString>;
310
+ stop_reason: z.ZodOptional<z.ZodString>;
311
+ }, z.core.$loose>;
312
+ /** Schema for stop_signals.json entries. */
313
+ export declare const stopSignalsSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
314
+ event: z.ZodOptional<z.ZodString>;
315
+ timestamp: z.ZodOptional<z.ZodNumber>;
316
+ error: z.ZodOptional<z.ZodUnknown>;
317
+ error_details: z.ZodOptional<z.ZodUnknown>;
318
+ last_assistant_message: z.ZodOptional<z.ZodUnknown>;
319
+ agent_id: z.ZodOptional<z.ZodUnknown>;
320
+ stop_reason: z.ZodOptional<z.ZodString>;
321
+ }, z.core.$strip>>;
322
+ /** Schema for persisted auth keys store (Issue #506). */
323
+ export declare const authStoreSchema: z.ZodObject<{
324
+ keys: z.ZodArray<z.ZodObject<{
325
+ id: z.ZodString;
326
+ name: z.ZodString;
327
+ hash: z.ZodString;
328
+ createdAt: z.ZodNumber;
329
+ lastUsedAt: z.ZodNumber;
330
+ rateLimit: z.ZodNumber;
331
+ }, z.core.$strip>>;
332
+ }, z.core.$strip>;
333
+ /** Schema for sessions-index.json entries (Issue #506). */
334
+ export declare const sessionsIndexSchema: z.ZodObject<{
335
+ entries: z.ZodOptional<z.ZodArray<z.ZodObject<{
336
+ sessionId: z.ZodString;
337
+ fullPath: z.ZodString;
338
+ }, z.core.$strip>>>;
339
+ }, z.core.$strip>;
340
+ /** Schema for persisted metrics file (Issue #506). */
341
+ export declare const metricsFileSchema: z.ZodObject<{
342
+ global: z.ZodOptional<z.ZodObject<{
343
+ sessionsCreated: z.ZodOptional<z.ZodNumber>;
344
+ sessionsCompleted: z.ZodOptional<z.ZodNumber>;
345
+ sessionsFailed: z.ZodOptional<z.ZodNumber>;
346
+ totalMessages: z.ZodOptional<z.ZodNumber>;
347
+ totalToolCalls: z.ZodOptional<z.ZodNumber>;
348
+ autoApprovals: z.ZodOptional<z.ZodNumber>;
349
+ webhooksSent: z.ZodOptional<z.ZodNumber>;
350
+ webhooksFailed: z.ZodOptional<z.ZodNumber>;
351
+ screenshotsTaken: z.ZodOptional<z.ZodNumber>;
352
+ pipelinesCreated: z.ZodOptional<z.ZodNumber>;
353
+ batchesCreated: z.ZodOptional<z.ZodNumber>;
354
+ promptsSent: z.ZodOptional<z.ZodNumber>;
355
+ promptsDelivered: z.ZodOptional<z.ZodNumber>;
356
+ promptsFailed: z.ZodOptional<z.ZodNumber>;
357
+ }, z.core.$loose>>;
358
+ savedAt: z.ZodOptional<z.ZodNumber>;
359
+ }, z.core.$loose>;
360
+ /** Schema for WebSocket inbound messages (Issue #506). */
361
+ export declare const wsInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
362
+ type: z.ZodLiteral<"input">;
363
+ text: z.ZodString;
364
+ }, z.core.$strict>, z.ZodObject<{
365
+ type: z.ZodLiteral<"resize">;
366
+ cols: z.ZodOptional<z.ZodNumber>;
367
+ rows: z.ZodOptional<z.ZodNumber>;
368
+ }, z.core.$strict>, z.ZodObject<{
369
+ type: z.ZodLiteral<"auth">;
370
+ token: z.ZodOptional<z.ZodString>;
371
+ }, z.core.$strict>], "type">;
372
+ /** Schema for CC settings.json shape (Issue #506).
373
+ * Permissive — only validates the fields Aegis cares about. */
374
+ export declare const ccSettingsSchema: z.ZodObject<{
375
+ permissions: z.ZodOptional<z.ZodObject<{
376
+ defaultMode: z.ZodOptional<z.ZodString>;
377
+ }, z.core.$loose>>;
378
+ }, z.core.$loose>;
379
+ /** Helper: extract error message from unknown catch value. */
380
+ export declare function getErrorMessage(e: unknown): string;
381
+ /** Minimum supported Claude Code version. */
382
+ export declare const MIN_CC_VERSION = "2.1.80";
383
+ /** Parse a semver string into [major, minor, patch], or null if invalid. */
384
+ export declare function parseSemver(v: string): [number, number, number] | null;
385
+ /**
386
+ * Compare two semver strings.
387
+ * Returns -1 if a < b, 0 if equal or either is unparseable (fails open), 1 if a > b.
388
+ */
389
+ export declare function compareSemver(a: string, b: string): number;
390
+ /** Extract version number from `claude --version` output. */
391
+ export declare function extractCCVersion(output: string): string | null;
392
+ /** Returns true when any path segment resolves to "..".
393
+ * Checks raw, separator-normalized, and percent-decoded forms to catch
394
+ * encoded traversal like %2e%2e and mixed slash/backslash payloads. */
395
+ export declare function containsTraversalSegment(inputPath: string): boolean;
396
+ /** Validate workDir to prevent path traversal attacks (Issue #435).
397
+ * 1. Reject raw strings containing ".." before any normalization.
398
+ * 2. Resolve to absolute path and resolve symlinks via fs.realpath().
399
+ * 3. Verify the resolved path is under an allowed directory:
400
+ * - If allowedWorkDirs is configured, use that list.
401
+ * - Otherwise, use default safe dirs (home, /tmp, cwd).
402
+ * Returns the resolved real path on success, or an error object on failure. */
403
+ export declare function validateWorkDir(workDir: string, allowedWorkDirs?: readonly string[]): Promise<string | {
404
+ error: string;
405
+ code: string;
406
+ }>;