@terminals-tech/agent-zero 1.0.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 (263) hide show
  1. package/README.md +209 -0
  2. package/bin/agent-zero.js +332 -0
  3. package/dist/agency/commandRouter.d.ts +48 -0
  4. package/dist/agency/commandRouter.d.ts.map +1 -0
  5. package/dist/agency/commandRouter.js +343 -0
  6. package/dist/agency/commandRouter.js.map +1 -0
  7. package/dist/agency/runtime.d.ts +66 -0
  8. package/dist/agency/runtime.d.ts.map +1 -0
  9. package/dist/agency/runtime.js +247 -0
  10. package/dist/agency/runtime.js.map +1 -0
  11. package/dist/agency/summaryGenerator.d.ts +39 -0
  12. package/dist/agency/summaryGenerator.d.ts.map +1 -0
  13. package/dist/agency/summaryGenerator.js +110 -0
  14. package/dist/agency/summaryGenerator.js.map +1 -0
  15. package/dist/agency/summaryScheduler.d.ts +33 -0
  16. package/dist/agency/summaryScheduler.d.ts.map +1 -0
  17. package/dist/agency/summaryScheduler.js +68 -0
  18. package/dist/agency/summaryScheduler.js.map +1 -0
  19. package/dist/browser/agent-runtime/RuntimePanel.d.ts +20 -0
  20. package/dist/browser/agent-runtime/RuntimePanel.d.ts.map +1 -0
  21. package/dist/browser/agent-runtime/RuntimePanel.js +203 -0
  22. package/dist/browser/agent-runtime/RuntimePanel.js.map +1 -0
  23. package/dist/browser/agent-runtime/config.d.ts +28 -0
  24. package/dist/browser/agent-runtime/config.d.ts.map +1 -0
  25. package/dist/browser/agent-runtime/config.js +50 -0
  26. package/dist/browser/agent-runtime/config.js.map +1 -0
  27. package/dist/browser/agent-runtime/launcher.d.ts +71 -0
  28. package/dist/browser/agent-runtime/launcher.d.ts.map +1 -0
  29. package/dist/browser/agent-runtime/launcher.js +167 -0
  30. package/dist/browser/agent-runtime/launcher.js.map +1 -0
  31. package/dist/browser/rail-auth-bridge.d.ts +85 -0
  32. package/dist/browser/rail-auth-bridge.d.ts.map +1 -0
  33. package/dist/browser/rail-auth-bridge.js +209 -0
  34. package/dist/browser/rail-auth-bridge.js.map +1 -0
  35. package/dist/channels/index.d.ts +13 -0
  36. package/dist/channels/index.d.ts.map +1 -0
  37. package/dist/channels/index.js +12 -0
  38. package/dist/channels/index.js.map +1 -0
  39. package/dist/channels/moltbook.d.ts +114 -0
  40. package/dist/channels/moltbook.d.ts.map +1 -0
  41. package/dist/channels/moltbook.js +348 -0
  42. package/dist/channels/moltbook.js.map +1 -0
  43. package/dist/channels/sms.d.ts +33 -0
  44. package/dist/channels/sms.d.ts.map +1 -0
  45. package/dist/channels/sms.js +160 -0
  46. package/dist/channels/sms.js.map +1 -0
  47. package/dist/channels/telegram.d.ts +47 -0
  48. package/dist/channels/telegram.d.ts.map +1 -0
  49. package/dist/channels/telegram.js +276 -0
  50. package/dist/channels/telegram.js.map +1 -0
  51. package/dist/channels/twitter.d.ts +93 -0
  52. package/dist/channels/twitter.d.ts.map +1 -0
  53. package/dist/channels/twitter.js +411 -0
  54. package/dist/channels/twitter.js.map +1 -0
  55. package/dist/channels/whatsapp.d.ts +77 -0
  56. package/dist/channels/whatsapp.d.ts.map +1 -0
  57. package/dist/channels/whatsapp.js +514 -0
  58. package/dist/channels/whatsapp.js.map +1 -0
  59. package/dist/checkout/index.d.ts +92 -0
  60. package/dist/checkout/index.d.ts.map +1 -0
  61. package/dist/checkout/index.js +125 -0
  62. package/dist/checkout/index.js.map +1 -0
  63. package/dist/cli/moltbook.d.ts +11 -0
  64. package/dist/cli/moltbook.d.ts.map +1 -0
  65. package/dist/cli/moltbook.js +259 -0
  66. package/dist/cli/moltbook.js.map +1 -0
  67. package/dist/cli/setup.d.ts +10 -0
  68. package/dist/cli/setup.d.ts.map +1 -0
  69. package/dist/cli/setup.js +232 -0
  70. package/dist/cli/setup.js.map +1 -0
  71. package/dist/coherence/absorption.d.ts +141 -0
  72. package/dist/coherence/absorption.d.ts.map +1 -0
  73. package/dist/coherence/absorption.js +343 -0
  74. package/dist/coherence/absorption.js.map +1 -0
  75. package/dist/coherence/crossPlatform.d.ts +55 -0
  76. package/dist/coherence/crossPlatform.d.ts.map +1 -0
  77. package/dist/coherence/crossPlatform.js +219 -0
  78. package/dist/coherence/crossPlatform.js.map +1 -0
  79. package/dist/coherence/identityResolver.d.ts +27 -0
  80. package/dist/coherence/identityResolver.d.ts.map +1 -0
  81. package/dist/coherence/identityResolver.js +102 -0
  82. package/dist/coherence/identityResolver.js.map +1 -0
  83. package/dist/identity/burner.d.ts +100 -0
  84. package/dist/identity/burner.d.ts.map +1 -0
  85. package/dist/identity/burner.js +256 -0
  86. package/dist/identity/burner.js.map +1 -0
  87. package/dist/identity/burnerScheduler.d.ts +18 -0
  88. package/dist/identity/burnerScheduler.d.ts.map +1 -0
  89. package/dist/identity/burnerScheduler.js +82 -0
  90. package/dist/identity/burnerScheduler.js.map +1 -0
  91. package/dist/identity/moltbookBurnerAdapter.d.ts +14 -0
  92. package/dist/identity/moltbookBurnerAdapter.d.ts.map +1 -0
  93. package/dist/identity/moltbookBurnerAdapter.js +82 -0
  94. package/dist/identity/moltbookBurnerAdapter.js.map +1 -0
  95. package/dist/identity/operationalVault.d.ts +108 -0
  96. package/dist/identity/operationalVault.d.ts.map +1 -0
  97. package/dist/identity/operationalVault.js +259 -0
  98. package/dist/identity/operationalVault.js.map +1 -0
  99. package/dist/index.d.ts +43 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +57 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/moltbook/apiErrorHandler.d.ts +48 -0
  104. package/dist/moltbook/apiErrorHandler.d.ts.map +1 -0
  105. package/dist/moltbook/apiErrorHandler.js +125 -0
  106. package/dist/moltbook/apiErrorHandler.js.map +1 -0
  107. package/dist/moltbook/approvalGate.d.ts +81 -0
  108. package/dist/moltbook/approvalGate.d.ts.map +1 -0
  109. package/dist/moltbook/approvalGate.js +211 -0
  110. package/dist/moltbook/approvalGate.js.map +1 -0
  111. package/dist/moltbook/attentionField.d.ts +55 -0
  112. package/dist/moltbook/attentionField.d.ts.map +1 -0
  113. package/dist/moltbook/attentionField.js +163 -0
  114. package/dist/moltbook/attentionField.js.map +1 -0
  115. package/dist/moltbook/contentEnhancer.d.ts +28 -0
  116. package/dist/moltbook/contentEnhancer.d.ts.map +1 -0
  117. package/dist/moltbook/contentEnhancer.js +129 -0
  118. package/dist/moltbook/contentEnhancer.js.map +1 -0
  119. package/dist/moltbook/daemon.d.ts +111 -0
  120. package/dist/moltbook/daemon.d.ts.map +1 -0
  121. package/dist/moltbook/daemon.js +497 -0
  122. package/dist/moltbook/daemon.js.map +1 -0
  123. package/dist/moltbook/observer.d.ts +44 -0
  124. package/dist/moltbook/observer.d.ts.map +1 -0
  125. package/dist/moltbook/observer.js +71 -0
  126. package/dist/moltbook/observer.js.map +1 -0
  127. package/dist/moltbook/responseComposer.d.ts +54 -0
  128. package/dist/moltbook/responseComposer.d.ts.map +1 -0
  129. package/dist/moltbook/responseComposer.js +233 -0
  130. package/dist/moltbook/responseComposer.js.map +1 -0
  131. package/dist/openclaw/gateway.d.ts +45 -0
  132. package/dist/openclaw/gateway.d.ts.map +1 -0
  133. package/dist/openclaw/gateway.js +139 -0
  134. package/dist/openclaw/gateway.js.map +1 -0
  135. package/dist/openclaw/skill.d.ts +185 -0
  136. package/dist/openclaw/skill.d.ts.map +1 -0
  137. package/dist/openclaw/skill.js +297 -0
  138. package/dist/openclaw/skill.js.map +1 -0
  139. package/dist/primitives/index.d.ts +23 -0
  140. package/dist/primitives/index.d.ts.map +1 -0
  141. package/dist/primitives/index.js +27 -0
  142. package/dist/primitives/index.js.map +1 -0
  143. package/dist/primitives/types.d.ts +673 -0
  144. package/dist/primitives/types.d.ts.map +1 -0
  145. package/dist/primitives/types.js +205 -0
  146. package/dist/primitives/types.js.map +1 -0
  147. package/dist/rail/absorptionBridge.d.ts +47 -0
  148. package/dist/rail/absorptionBridge.d.ts.map +1 -0
  149. package/dist/rail/absorptionBridge.js +78 -0
  150. package/dist/rail/absorptionBridge.js.map +1 -0
  151. package/dist/rail/authProtocol.d.ts +32 -0
  152. package/dist/rail/authProtocol.d.ts.map +1 -0
  153. package/dist/rail/authProtocol.js +83 -0
  154. package/dist/rail/authProtocol.js.map +1 -0
  155. package/dist/rail/clientRateLimiter.d.ts +17 -0
  156. package/dist/rail/clientRateLimiter.d.ts.map +1 -0
  157. package/dist/rail/clientRateLimiter.js +64 -0
  158. package/dist/rail/clientRateLimiter.js.map +1 -0
  159. package/dist/rail/index.d.ts +8 -0
  160. package/dist/rail/index.d.ts.map +1 -0
  161. package/dist/rail/index.js +38 -0
  162. package/dist/rail/index.js.map +1 -0
  163. package/dist/rail/jwtVerifier.d.ts +11 -0
  164. package/dist/rail/jwtVerifier.d.ts.map +1 -0
  165. package/dist/rail/jwtVerifier.js +55 -0
  166. package/dist/rail/jwtVerifier.js.map +1 -0
  167. package/dist/rail/logger.d.ts +13 -0
  168. package/dist/rail/logger.d.ts.map +1 -0
  169. package/dist/rail/logger.js +29 -0
  170. package/dist/rail/logger.js.map +1 -0
  171. package/dist/rail/metadataBroadcaster.d.ts +53 -0
  172. package/dist/rail/metadataBroadcaster.d.ts.map +1 -0
  173. package/dist/rail/metadataBroadcaster.js +126 -0
  174. package/dist/rail/metadataBroadcaster.js.map +1 -0
  175. package/dist/rail/persistence.d.ts +57 -0
  176. package/dist/rail/persistence.d.ts.map +1 -0
  177. package/dist/rail/persistence.js +103 -0
  178. package/dist/rail/persistence.js.map +1 -0
  179. package/dist/rail/securityMonitor.d.ts +23 -0
  180. package/dist/rail/securityMonitor.d.ts.map +1 -0
  181. package/dist/rail/securityMonitor.js +52 -0
  182. package/dist/rail/securityMonitor.js.map +1 -0
  183. package/dist/rail/server.d.ts +186 -0
  184. package/dist/rail/server.d.ts.map +1 -0
  185. package/dist/rail/server.js +568 -0
  186. package/dist/rail/server.js.map +1 -0
  187. package/dist/rail/userSessionManager.d.ts +29 -0
  188. package/dist/rail/userSessionManager.d.ts.map +1 -0
  189. package/dist/rail/userSessionManager.js +87 -0
  190. package/dist/rail/userSessionManager.js.map +1 -0
  191. package/dist/rail/wsServer.d.ts +39 -0
  192. package/dist/rail/wsServer.d.ts.map +1 -0
  193. package/dist/rail/wsServer.js +544 -0
  194. package/dist/rail/wsServer.js.map +1 -0
  195. package/dist/resonance/globalKuramoto.d.ts +67 -0
  196. package/dist/resonance/globalKuramoto.d.ts.map +1 -0
  197. package/dist/resonance/globalKuramoto.js +161 -0
  198. package/dist/resonance/globalKuramoto.js.map +1 -0
  199. package/dist/resonance/index.d.ts +12 -0
  200. package/dist/resonance/index.d.ts.map +1 -0
  201. package/dist/resonance/index.js +9 -0
  202. package/dist/resonance/index.js.map +1 -0
  203. package/dist/resonance/kuramoto.d.ts +118 -0
  204. package/dist/resonance/kuramoto.d.ts.map +1 -0
  205. package/dist/resonance/kuramoto.js +212 -0
  206. package/dist/resonance/kuramoto.js.map +1 -0
  207. package/dist/routing/distributedRouter.d.ts +84 -0
  208. package/dist/routing/distributedRouter.d.ts.map +1 -0
  209. package/dist/routing/distributedRouter.js +209 -0
  210. package/dist/routing/distributedRouter.js.map +1 -0
  211. package/dist/routing/index.d.ts +8 -0
  212. package/dist/routing/index.d.ts.map +1 -0
  213. package/dist/routing/index.js +7 -0
  214. package/dist/routing/index.js.map +1 -0
  215. package/dist/routing/thermodynamic.d.ts +91 -0
  216. package/dist/routing/thermodynamic.d.ts.map +1 -0
  217. package/dist/routing/thermodynamic.js +184 -0
  218. package/dist/routing/thermodynamic.js.map +1 -0
  219. package/dist/runtime/agent-zero.d.ts +138 -0
  220. package/dist/runtime/agent-zero.d.ts.map +1 -0
  221. package/dist/runtime/agent-zero.js +435 -0
  222. package/dist/runtime/agent-zero.js.map +1 -0
  223. package/dist/runtime/index.d.ts +13 -0
  224. package/dist/runtime/index.d.ts.map +1 -0
  225. package/dist/runtime/index.js +15 -0
  226. package/dist/runtime/index.js.map +1 -0
  227. package/dist/security/capabilities.d.ts +178 -0
  228. package/dist/security/capabilities.d.ts.map +1 -0
  229. package/dist/security/capabilities.js +270 -0
  230. package/dist/security/capabilities.js.map +1 -0
  231. package/dist/security/channelFirewallMiddleware.d.ts +22 -0
  232. package/dist/security/channelFirewallMiddleware.d.ts.map +1 -0
  233. package/dist/security/channelFirewallMiddleware.js +52 -0
  234. package/dist/security/channelFirewallMiddleware.js.map +1 -0
  235. package/dist/security/index.d.ts +11 -0
  236. package/dist/security/index.d.ts.map +1 -0
  237. package/dist/security/index.js +11 -0
  238. package/dist/security/index.js.map +1 -0
  239. package/dist/security/injectionFirewall.d.ts +47 -0
  240. package/dist/security/injectionFirewall.d.ts.map +1 -0
  241. package/dist/security/injectionFirewall.js +262 -0
  242. package/dist/security/injectionFirewall.js.map +1 -0
  243. package/dist/security/outputSanitizer.d.ts +28 -0
  244. package/dist/security/outputSanitizer.d.ts.map +1 -0
  245. package/dist/security/outputSanitizer.js +66 -0
  246. package/dist/security/outputSanitizer.js.map +1 -0
  247. package/dist/security/sandbox.d.ts +192 -0
  248. package/dist/security/sandbox.d.ts.map +1 -0
  249. package/dist/security/sandbox.js +359 -0
  250. package/dist/security/sandbox.js.map +1 -0
  251. package/dist/security/skillVerify.d.ts +128 -0
  252. package/dist/security/skillVerify.d.ts.map +1 -0
  253. package/dist/security/skillVerify.js +220 -0
  254. package/dist/security/skillVerify.js.map +1 -0
  255. package/dist/security/vault.d.ts +60 -0
  256. package/dist/security/vault.d.ts.map +1 -0
  257. package/dist/security/vault.js +522 -0
  258. package/dist/security/vault.js.map +1 -0
  259. package/dist/utils/persistentRateLimiter.d.ts +69 -0
  260. package/dist/utils/persistentRateLimiter.d.ts.map +1 -0
  261. package/dist/utils/persistentRateLimiter.js +128 -0
  262. package/dist/utils/persistentRateLimiter.js.map +1 -0
  263. package/package.json +95 -0
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Skill-Specific Capability Enforcement
3
+ *
4
+ * Extends IsomorphicSandbox with OpenClaw skill integration.
5
+ * Parses SKILL.md frontmatter capability declarations and enforces
6
+ * scoped access during skill execution.
7
+ *
8
+ * Security Model:
9
+ * - Skills declare required capabilities in frontmatter (filesystem, network, spawn, etc.)
10
+ * - SkillCapabilityManager creates attenuated capability from root
11
+ * - All skill operations checked against declared capabilities
12
+ * - Escalation attempts denied and logged as violations
13
+ * - Capability revocation kills tracked processes
14
+ */
15
+ import { z } from 'zod';
16
+ import { IsomorphicSandbox, CapabilityScope, BoundaryViolation } from './sandbox.js';
17
+ export declare const SkillCapabilityDeclaration: z.ZodObject<{
18
+ /** Filesystem access (glob patterns) */
19
+ filesystem: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
20
+ /** Network access (domain patterns) */
21
+ network: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
22
+ /** Max child agents to spawn */
23
+ spawn: z.ZodDefault<z.ZodNumber>;
24
+ /** Memory limit in bytes */
25
+ memory: z.ZodDefault<z.ZodNumber>;
26
+ /** Execute permission */
27
+ execute: z.ZodDefault<z.ZodBoolean>;
28
+ }, "strip", z.ZodTypeAny, {
29
+ memory: number;
30
+ spawn: number;
31
+ execute: boolean;
32
+ network: string[];
33
+ filesystem: string[];
34
+ }, {
35
+ memory?: number | undefined;
36
+ spawn?: number | undefined;
37
+ execute?: boolean | undefined;
38
+ network?: string[] | undefined;
39
+ filesystem?: string[] | undefined;
40
+ }>;
41
+ export type SkillCapabilityDeclaration = z.infer<typeof SkillCapabilityDeclaration>;
42
+ export declare const SkillExecutionContext: z.ZodObject<{
43
+ /** Skill name */
44
+ skillName: z.ZodString;
45
+ /** Declared capabilities */
46
+ declaration: z.ZodObject<{
47
+ /** Filesystem access (glob patterns) */
48
+ filesystem: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
49
+ /** Network access (domain patterns) */
50
+ network: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
51
+ /** Max child agents to spawn */
52
+ spawn: z.ZodDefault<z.ZodNumber>;
53
+ /** Memory limit in bytes */
54
+ memory: z.ZodDefault<z.ZodNumber>;
55
+ /** Execute permission */
56
+ execute: z.ZodDefault<z.ZodBoolean>;
57
+ }, "strip", z.ZodTypeAny, {
58
+ memory: number;
59
+ spawn: number;
60
+ execute: boolean;
61
+ network: string[];
62
+ filesystem: string[];
63
+ }, {
64
+ memory?: number | undefined;
65
+ spawn?: number | undefined;
66
+ execute?: boolean | undefined;
67
+ network?: string[] | undefined;
68
+ filesystem?: string[] | undefined;
69
+ }>;
70
+ /** Capability token from sandbox */
71
+ capabilityToken: z.ZodString;
72
+ /** Tracked process ID (if spawned) */
73
+ pid: z.ZodNullable<z.ZodNumber>;
74
+ /** Execution start timestamp */
75
+ startedAt: z.ZodNumber;
76
+ /** Accumulated violations */
77
+ violations: z.ZodArray<z.ZodObject<{
78
+ type: z.ZodEnum<["scope_denied", "resource_denied", "capability_expired", "capability_revoked", "injection_detected", "boundary_crossed"]>;
79
+ message: z.ZodString;
80
+ capability: z.ZodOptional<z.ZodString>;
81
+ resource: z.ZodOptional<z.ZodString>;
82
+ timestamp: z.ZodNumber;
83
+ }, "strip", z.ZodTypeAny, {
84
+ message: string;
85
+ type: "scope_denied" | "resource_denied" | "capability_expired" | "capability_revoked" | "injection_detected" | "boundary_crossed";
86
+ timestamp: number;
87
+ capability?: string | undefined;
88
+ resource?: string | undefined;
89
+ }, {
90
+ message: string;
91
+ type: "scope_denied" | "resource_denied" | "capability_expired" | "capability_revoked" | "injection_detected" | "boundary_crossed";
92
+ timestamp: number;
93
+ capability?: string | undefined;
94
+ resource?: string | undefined;
95
+ }>, "many">;
96
+ }, "strip", z.ZodTypeAny, {
97
+ skillName: string;
98
+ declaration: {
99
+ memory: number;
100
+ spawn: number;
101
+ execute: boolean;
102
+ network: string[];
103
+ filesystem: string[];
104
+ };
105
+ capabilityToken: string;
106
+ pid: number | null;
107
+ startedAt: number;
108
+ violations: {
109
+ message: string;
110
+ type: "scope_denied" | "resource_denied" | "capability_expired" | "capability_revoked" | "injection_detected" | "boundary_crossed";
111
+ timestamp: number;
112
+ capability?: string | undefined;
113
+ resource?: string | undefined;
114
+ }[];
115
+ }, {
116
+ skillName: string;
117
+ declaration: {
118
+ memory?: number | undefined;
119
+ spawn?: number | undefined;
120
+ execute?: boolean | undefined;
121
+ network?: string[] | undefined;
122
+ filesystem?: string[] | undefined;
123
+ };
124
+ capabilityToken: string;
125
+ pid: number | null;
126
+ startedAt: number;
127
+ violations: {
128
+ message: string;
129
+ type: "scope_denied" | "resource_denied" | "capability_expired" | "capability_revoked" | "injection_detected" | "boundary_crossed";
130
+ timestamp: number;
131
+ capability?: string | undefined;
132
+ resource?: string | undefined;
133
+ }[];
134
+ }>;
135
+ export type SkillExecutionContext = z.infer<typeof SkillExecutionContext>;
136
+ export declare class SkillCapabilityManager {
137
+ private sandbox;
138
+ private contexts;
139
+ constructor(sandbox: IsomorphicSandbox);
140
+ /**
141
+ * Register a skill and create attenuated capability from root
142
+ */
143
+ registerSkill(name: string, declaration: SkillCapabilityDeclaration): SkillExecutionContext;
144
+ /**
145
+ * Check if skill has access to scope+resource
146
+ */
147
+ checkSkillAccess(name: string, scope: CapabilityScope, resource: string): {
148
+ allowed: boolean;
149
+ violation?: BoundaryViolation;
150
+ };
151
+ /**
152
+ * Handle capability escalation attempt
153
+ */
154
+ onCapabilityEscalation(name: string, requestedScope: CapabilityScope): BoundaryViolation;
155
+ /**
156
+ * Revoke skill capability and kill tracked process
157
+ */
158
+ revokeSkill(name: string): void;
159
+ /**
160
+ * List active skills with stats
161
+ */
162
+ listActiveSkills(): Array<{
163
+ name: string;
164
+ scopes: CapabilityScope[];
165
+ uptime: number;
166
+ violationCount: number;
167
+ }>;
168
+ /**
169
+ * Parse capability declaration from SKILL.md frontmatter
170
+ */
171
+ parseDeclarationFromFrontmatter(frontmatter: string): SkillCapabilityDeclaration;
172
+ /**
173
+ * Infer scopes from declaration
174
+ */
175
+ private inferScopesFromDeclaration;
176
+ }
177
+ export declare function createSkillCapabilityManager(sandbox: IsomorphicSandbox): SkillCapabilityManager;
178
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/security/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAElB,MAAM,cAAc,CAAC;AAMtB,eAAO,MAAM,0BAA0B;IACrC,wCAAwC;;IAExC,uCAAuC;;IAEvC,gCAAgC;;IAEhC,4BAA4B;;IAE5B,yBAAyB;;;;;;;;;;;;;;EAEzB,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEpF,eAAO,MAAM,qBAAqB;IAChC,iBAAiB;;IAEjB,4BAA4B;;QAhB5B,wCAAwC;;QAExC,uCAAuC;;QAEvC,gCAAgC;;QAEhC,4BAA4B;;QAE5B,yBAAyB;;;;;;;;;;;;;;;IAUzB,oCAAoC;;IAEpC,sCAAsC;;IAEtC,gCAAgC;;IAEhC,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE7B,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAM1E,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAiD;gBAErD,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,GAAG,qBAAqB;IAoE3F;;OAEG;IACH,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,MAAM,GACf;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAAE;IAuBtD;;OAEG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,GAAG,iBAAiB;IAexF;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmB/B;;OAEG;IACH,gBAAgB,IAAI,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAmBF;;OAEG;IACH,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B;IAkEhF;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAmBnC;AAMD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,GAAG,sBAAsB,CAE/F"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Skill-Specific Capability Enforcement
3
+ *
4
+ * Extends IsomorphicSandbox with OpenClaw skill integration.
5
+ * Parses SKILL.md frontmatter capability declarations and enforces
6
+ * scoped access during skill execution.
7
+ *
8
+ * Security Model:
9
+ * - Skills declare required capabilities in frontmatter (filesystem, network, spawn, etc.)
10
+ * - SkillCapabilityManager creates attenuated capability from root
11
+ * - All skill operations checked against declared capabilities
12
+ * - Escalation attempts denied and logged as violations
13
+ * - Capability revocation kills tracked processes
14
+ */
15
+ import { z } from 'zod';
16
+ import { BoundaryViolation, } from './sandbox.js';
17
+ // ============================================================================
18
+ // SKILL CAPABILITY SCHEMAS
19
+ // ============================================================================
20
+ export const SkillCapabilityDeclaration = z.object({
21
+ /** Filesystem access (glob patterns) */
22
+ filesystem: z.array(z.string()).default([]),
23
+ /** Network access (domain patterns) */
24
+ network: z.array(z.string()).default([]),
25
+ /** Max child agents to spawn */
26
+ spawn: z.number().int().nonnegative().default(0),
27
+ /** Memory limit in bytes */
28
+ memory: z.number().int().positive().default(100 * 1024 * 1024), // 100MB default
29
+ /** Execute permission */
30
+ execute: z.boolean().default(false),
31
+ });
32
+ export const SkillExecutionContext = z.object({
33
+ /** Skill name */
34
+ skillName: z.string(),
35
+ /** Declared capabilities */
36
+ declaration: SkillCapabilityDeclaration,
37
+ /** Capability token from sandbox */
38
+ capabilityToken: z.string(),
39
+ /** Tracked process ID (if spawned) */
40
+ pid: z.number().nullable(),
41
+ /** Execution start timestamp */
42
+ startedAt: z.number(),
43
+ /** Accumulated violations */
44
+ violations: z.array(BoundaryViolation),
45
+ });
46
+ // ============================================================================
47
+ // SKILL CAPABILITY MANAGER
48
+ // ============================================================================
49
+ export class SkillCapabilityManager {
50
+ sandbox;
51
+ contexts = new Map();
52
+ constructor(sandbox) {
53
+ this.sandbox = sandbox;
54
+ }
55
+ /**
56
+ * Register a skill and create attenuated capability from root
57
+ */
58
+ registerSkill(name, declaration) {
59
+ // Map declaration to scopes and resources
60
+ const scopes = [];
61
+ const resources = [];
62
+ // Filesystem access
63
+ if (declaration.filesystem.length > 0) {
64
+ scopes.push('read', 'write');
65
+ for (const pattern of declaration.filesystem) {
66
+ resources.push({ pattern, type: 'allow' });
67
+ }
68
+ }
69
+ // Network access
70
+ if (declaration.network.length > 0) {
71
+ scopes.push('network');
72
+ for (const pattern of declaration.network) {
73
+ resources.push({ pattern: `https://${pattern}/**`, type: 'allow' });
74
+ resources.push({ pattern: `http://${pattern}/**`, type: 'allow' });
75
+ }
76
+ }
77
+ // Spawn permission
78
+ if (declaration.spawn > 0) {
79
+ scopes.push('spawn');
80
+ resources.push({ pattern: `spawn:*:${declaration.spawn}`, type: 'allow' });
81
+ }
82
+ // Memory access
83
+ scopes.push('memory');
84
+ resources.push({ pattern: `memory:bytes:${declaration.memory}`, type: 'allow' });
85
+ // Execute permission
86
+ if (declaration.execute) {
87
+ scopes.push('execute');
88
+ resources.push({ pattern: 'exec:**', type: 'allow' });
89
+ }
90
+ // Always allow broadcast for communication
91
+ scopes.push('broadcast');
92
+ resources.push({ pattern: 'channel:**', type: 'allow' });
93
+ // Create attenuated capability
94
+ const rootToken = this.sandbox.getRootToken();
95
+ const capability = this.sandbox.attenuate(rootToken, {
96
+ scopes,
97
+ resources,
98
+ reason: `Skill: ${name}`,
99
+ });
100
+ if (!capability) {
101
+ throw new Error(`Failed to create capability for skill: ${name}`);
102
+ }
103
+ // Create execution context
104
+ const context = {
105
+ skillName: name,
106
+ declaration,
107
+ capabilityToken: capability.token,
108
+ pid: null,
109
+ startedAt: Date.now(),
110
+ violations: [],
111
+ };
112
+ this.contexts.set(name, context);
113
+ return context;
114
+ }
115
+ /**
116
+ * Check if skill has access to scope+resource
117
+ */
118
+ checkSkillAccess(name, scope, resource) {
119
+ const context = this.contexts.get(name);
120
+ if (!context) {
121
+ const violation = {
122
+ type: 'capability_revoked',
123
+ message: `Skill '${name}' not registered`,
124
+ resource,
125
+ timestamp: Date.now(),
126
+ };
127
+ return { allowed: false, violation };
128
+ }
129
+ // Delegate to sandbox with skill's token
130
+ const result = this.sandbox.check(context.capabilityToken, scope, resource);
131
+ // Record violation
132
+ if (result.violation) {
133
+ context.violations.push(result.violation);
134
+ }
135
+ return result;
136
+ }
137
+ /**
138
+ * Handle capability escalation attempt
139
+ */
140
+ onCapabilityEscalation(name, requestedScope) {
141
+ const violation = {
142
+ type: 'scope_denied',
143
+ message: `Skill '${name}' attempted escalation to scope '${requestedScope}'`,
144
+ timestamp: Date.now(),
145
+ };
146
+ const context = this.contexts.get(name);
147
+ if (context) {
148
+ context.violations.push(violation);
149
+ }
150
+ return violation;
151
+ }
152
+ /**
153
+ * Revoke skill capability and kill tracked process
154
+ */
155
+ revokeSkill(name) {
156
+ const context = this.contexts.get(name);
157
+ if (!context)
158
+ return;
159
+ // Revoke capability in sandbox
160
+ this.sandbox.revoke(context.capabilityToken);
161
+ // Kill tracked process if exists
162
+ if (context.pid !== null) {
163
+ try {
164
+ process.kill(context.pid, 'SIGTERM');
165
+ }
166
+ catch (err) {
167
+ // Process may already be dead, ignore
168
+ }
169
+ }
170
+ this.contexts.delete(name);
171
+ }
172
+ /**
173
+ * List active skills with stats
174
+ */
175
+ listActiveSkills() {
176
+ const result = [];
177
+ for (const [name, context] of this.contexts) {
178
+ const scopes = this.inferScopesFromDeclaration(context.declaration);
179
+ const uptime = Date.now() - context.startedAt;
180
+ const violationCount = context.violations.length;
181
+ result.push({ name, scopes, uptime, violationCount });
182
+ }
183
+ return result;
184
+ }
185
+ /**
186
+ * Parse capability declaration from SKILL.md frontmatter
187
+ */
188
+ parseDeclarationFromFrontmatter(frontmatter) {
189
+ // Remove frontmatter delimiters
190
+ const content = frontmatter.replace(/^---\n?/, '').replace(/\n?---$/, '');
191
+ // Parse YAML-like frontmatter
192
+ const lines = content.split('\n');
193
+ const parsed = {};
194
+ let currentKey = null;
195
+ let currentArray = [];
196
+ for (const line of lines) {
197
+ const trimmed = line.trim();
198
+ if (!trimmed || trimmed.startsWith('#'))
199
+ continue;
200
+ // Array item
201
+ if (trimmed.startsWith('- ')) {
202
+ if (currentKey) {
203
+ currentArray.push(trimmed.slice(2).trim());
204
+ }
205
+ continue;
206
+ }
207
+ // Flush previous array
208
+ if (currentKey && currentArray.length > 0) {
209
+ parsed[currentKey] = currentArray;
210
+ currentArray = [];
211
+ }
212
+ // Key-value pair
213
+ const match = trimmed.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*(.*)$/);
214
+ if (match) {
215
+ const [, key, value] = match;
216
+ currentKey = key;
217
+ // Boolean
218
+ if (value === 'true' || value === 'false') {
219
+ parsed[key] = value === 'true';
220
+ currentKey = null;
221
+ continue;
222
+ }
223
+ // Number
224
+ if (/^\d+$/.test(value)) {
225
+ parsed[key] = parseInt(value, 10);
226
+ currentKey = null;
227
+ continue;
228
+ }
229
+ // String (empty value means array follows)
230
+ if (value) {
231
+ parsed[key] = value;
232
+ currentKey = null;
233
+ }
234
+ }
235
+ }
236
+ // Flush final array
237
+ if (currentKey && currentArray.length > 0) {
238
+ parsed[currentKey] = currentArray;
239
+ }
240
+ // Validate and return
241
+ return SkillCapabilityDeclaration.parse(parsed);
242
+ }
243
+ /**
244
+ * Infer scopes from declaration
245
+ */
246
+ inferScopesFromDeclaration(declaration) {
247
+ const scopes = [];
248
+ if (declaration.filesystem.length > 0) {
249
+ scopes.push('read', 'write');
250
+ }
251
+ if (declaration.network.length > 0) {
252
+ scopes.push('network');
253
+ }
254
+ if (declaration.spawn > 0) {
255
+ scopes.push('spawn');
256
+ }
257
+ if (declaration.execute) {
258
+ scopes.push('execute');
259
+ }
260
+ scopes.push('memory', 'broadcast'); // Always granted
261
+ return scopes;
262
+ }
263
+ }
264
+ // ============================================================================
265
+ // FACTORY
266
+ // ============================================================================
267
+ export function createSkillCapabilityManager(sandbox) {
268
+ return new SkillCapabilityManager(sandbox);
269
+ }
270
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/security/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Channel Firewall Middleware
3
+ *
4
+ * Wraps InjectionFirewall for channel adapters with event emission.
5
+ * Scans incoming content for injection patterns and sanitizes/blocks threats.
6
+ */
7
+ import { type ParanoiaLevel, type MessageOrigin } from './injectionFirewall.js';
8
+ export interface FirewallResult {
9
+ safe: boolean;
10
+ sanitized: string;
11
+ threats: Array<{
12
+ pattern: string;
13
+ score: number;
14
+ category: string;
15
+ }>;
16
+ }
17
+ export interface ChannelFirewallMiddleware {
18
+ process(content: string, origin: MessageOrigin): FirewallResult;
19
+ on(event: 'firewall:blocked' | 'firewall:quarantined', handler: (data: any) => void): void;
20
+ }
21
+ export declare function createFirewallMiddleware(paranoiaLevel?: ParanoiaLevel): ChannelFirewallMiddleware;
22
+ //# sourceMappingURL=channelFirewallMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channelFirewallMiddleware.d.ts","sourceRoot":"","sources":["../../src/security/channelFirewallMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAqB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,cAAc,CAAC;IAChE,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,sBAAsB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CAC5F;AAED,wBAAgB,wBAAwB,CACtC,aAAa,GAAE,aAA0B,GACxC,yBAAyB,CA6C3B"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Channel Firewall Middleware
3
+ *
4
+ * Wraps InjectionFirewall for channel adapters with event emission.
5
+ * Scans incoming content for injection patterns and sanitizes/blocks threats.
6
+ */
7
+ import { EventEmitter } from 'eventemitter3';
8
+ import { InjectionFirewall } from './injectionFirewall.js';
9
+ export function createFirewallMiddleware(paranoiaLevel = 'standard') {
10
+ const firewall = new InjectionFirewall(paranoiaLevel);
11
+ const emitter = new EventEmitter();
12
+ return {
13
+ process(content, origin) {
14
+ const verdict = firewall.scan(content, origin);
15
+ const threats = verdict.threats.map(threat => {
16
+ const [category, pattern] = threat.split(': ');
17
+ return {
18
+ category: category ?? 'unknown',
19
+ pattern: pattern ?? threat,
20
+ score: verdict.score,
21
+ };
22
+ });
23
+ let sanitized = content;
24
+ if (!verdict.safe) {
25
+ sanitized = firewall.quarantine(content);
26
+ emitter.emit('firewall:blocked', {
27
+ origin,
28
+ threats,
29
+ timestamp: Date.now(),
30
+ originalLength: content.length,
31
+ sanitizedLength: sanitized.length,
32
+ });
33
+ }
34
+ else if (threats.length > 0) {
35
+ emitter.emit('firewall:quarantined', {
36
+ origin,
37
+ threats,
38
+ timestamp: Date.now(),
39
+ });
40
+ }
41
+ return {
42
+ safe: verdict.safe,
43
+ sanitized,
44
+ threats,
45
+ };
46
+ },
47
+ on(event, handler) {
48
+ emitter.on(event, handler);
49
+ },
50
+ };
51
+ }
52
+ //# sourceMappingURL=channelFirewallMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channelFirewallMiddleware.js","sourceRoot":"","sources":["../../src/security/channelFirewallMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAA0C,MAAM,wBAAwB,CAAC;AAanG,MAAM,UAAU,wBAAwB,CACtC,gBAA+B,UAAU;IAEzC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAEnC,OAAO;QACL,OAAO,CAAC,OAAe,EAAE,MAAqB;YAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC3C,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C,OAAO;oBACL,QAAQ,EAAE,QAAQ,IAAI,SAAS;oBAC/B,OAAO,EAAE,OAAO,IAAI,MAAM;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClB,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC/B,MAAM;oBACN,OAAO;oBACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,cAAc,EAAE,OAAO,CAAC,MAAM;oBAC9B,eAAe,EAAE,SAAS,CAAC,MAAM;iBAClC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBACnC,MAAM;oBACN,OAAO;oBACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS;gBACT,OAAO;aACR,CAAC;QACJ,CAAC;QACD,EAAE,CAAC,KAAa,EAAE,OAAiC;YACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @terminals-tech/agent-zero/security
3
+ *
4
+ * AES-256-GCM vault, capability sandbox, injection firewall, Ed25519 skill verification.
5
+ */
6
+ export { Vault, createVault } from './vault.js';
7
+ export { IsomorphicSandbox, CapabilityScope, detectInjection, generateCapabilityToken } from './sandbox.js';
8
+ export { SkillCapabilityManager, createSkillCapabilityManager } from './capabilities.js';
9
+ export { InjectionFirewall, ParanoiaLevel, createFirewall } from './injectionFirewall.js';
10
+ export { generateSigningKeyPair, signManifest, verifyManifest, verifySkillIntegrity, createManifest, hashFile, loadSignedManifest, } from './skillVerify.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @terminals-tech/agent-zero/security
3
+ *
4
+ * AES-256-GCM vault, capability sandbox, injection firewall, Ed25519 skill verification.
5
+ */
6
+ export { Vault, createVault } from './vault.js';
7
+ export { IsomorphicSandbox, CapabilityScope, detectInjection, generateCapabilityToken } from './sandbox.js';
8
+ export { SkillCapabilityManager, createSkillCapabilityManager } from './capabilities.js';
9
+ export { InjectionFirewall, ParanoiaLevel, createFirewall } from './injectionFirewall.js';
10
+ export { generateSigningKeyPair, signManifest, verifyManifest, verifySkillIntegrity, createManifest, hashFile, loadSignedManifest, } from './skillVerify.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ export declare const ParanoiaLevel: z.ZodEnum<["relaxed", "standard", "paranoid"]>;
3
+ export type ParanoiaLevel = z.infer<typeof ParanoiaLevel>;
4
+ export declare const MessageOrigin: z.ZodEnum<["human-direct", "forwarded", "channel-bridged", "agent-to-agent", "unknown"]>;
5
+ export type MessageOrigin = z.infer<typeof MessageOrigin>;
6
+ export declare const FirewallVerdict: z.ZodObject<{
7
+ safe: z.ZodBoolean;
8
+ score: z.ZodNumber;
9
+ threats: z.ZodArray<z.ZodString, "many">;
10
+ origin: z.ZodEnum<["human-direct", "forwarded", "channel-bridged", "agent-to-agent", "unknown"]>;
11
+ quarantined: z.ZodBoolean;
12
+ }, "strip", z.ZodTypeAny, {
13
+ safe: boolean;
14
+ score: number;
15
+ threats: string[];
16
+ origin: "unknown" | "human-direct" | "forwarded" | "channel-bridged" | "agent-to-agent";
17
+ quarantined: boolean;
18
+ }, {
19
+ safe: boolean;
20
+ score: number;
21
+ threats: string[];
22
+ origin: "unknown" | "human-direct" | "forwarded" | "channel-bridged" | "agent-to-agent";
23
+ quarantined: boolean;
24
+ }>;
25
+ export type FirewallVerdict = z.infer<typeof FirewallVerdict>;
26
+ export declare class InjectionFirewall {
27
+ private level;
28
+ private stats;
29
+ constructor(level?: ParanoiaLevel);
30
+ scan(content: string, origin: MessageOrigin): FirewallVerdict;
31
+ scanBatch(messages: Array<{
32
+ content: string;
33
+ origin: MessageOrigin;
34
+ }>): FirewallVerdict[];
35
+ quarantine(content: string): string;
36
+ setLevel(level: ParanoiaLevel): void;
37
+ getStats(): {
38
+ scanned: number;
39
+ blocked: number;
40
+ quarantined: number;
41
+ };
42
+ private isLikelyEncoded;
43
+ private containsSuspiciousKeywords;
44
+ private calculateEntropy;
45
+ }
46
+ export declare function createFirewall(level?: ParanoiaLevel): InjectionFirewall;
47
+ //# sourceMappingURL=injectionFirewall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectionFirewall.d.ts","sourceRoot":"","sources":["../../src/security/injectionFirewall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa,gDAA8C,CAAC;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,aAAa,0FAMxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAmG9D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAA8C;gBAE/C,KAAK,GAAE,aAA0B;IAI7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,eAAe;IAyF7D,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,GAAG,eAAe,EAAE;IAIzF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IA4BnC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIpC,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAIrE,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,gBAAgB;CAezB;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,aAA0B,GAAG,iBAAiB,CAEnF"}