@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,262 @@
1
+ import { z } from 'zod';
2
+ // Schemas
3
+ export const ParanoiaLevel = z.enum(['relaxed', 'standard', 'paranoid']);
4
+ export const MessageOrigin = z.enum([
5
+ 'human-direct',
6
+ 'forwarded',
7
+ 'channel-bridged',
8
+ 'agent-to-agent',
9
+ 'unknown',
10
+ ]);
11
+ export const FirewallVerdict = z.object({
12
+ safe: z.boolean(),
13
+ score: z.number().min(0).max(1),
14
+ threats: z.array(z.string()),
15
+ origin: MessageOrigin,
16
+ quarantined: z.boolean(),
17
+ });
18
+ // Pattern definitions
19
+ const INSTRUCTION_PATTERNS = [
20
+ /ignore\s+(previous|all|earlier|your)\s+(instruction|prompt|rule|command)/gi,
21
+ /disregard\s+(previous|all|earlier|your)\s+(instruction|prompt|rule|command)/gi,
22
+ /you\s+are\s+now\s+(a|an|the)/gi,
23
+ /pretend\s+(you|to\s+be|that\s+you)/gi,
24
+ /act\s+as\s+(if|a|an|the)/gi,
25
+ /system\s+prompt/gi,
26
+ /admin\s+override/gi,
27
+ /developer\s+mode/gi,
28
+ /jailbreak/gi,
29
+ /\bDAN\b/g,
30
+ /do\s+anything\s+now/gi,
31
+ /bypass\s+(restriction|filter|safety)/gi,
32
+ /forget\s+(your|all)\s+(instruction|rule|training)/gi,
33
+ ];
34
+ const ENCODING_PATTERNS = [
35
+ /\b[A-Za-z]{13}\b.*\b[A-Za-z]{13}\b/g, // ROT13-like patterns
36
+ /[A-Za-z0-9+/]{20,}={0,2}/g, // Base64-like strings
37
+ /(?:0x)?[0-9a-fA-F]{40,}/g, // Hex-encoded strings
38
+ /\\u[0-9a-fA-F]{4}/g, // Unicode escape sequences
39
+ ];
40
+ const DELAYED_INJECTION = [
41
+ /remember\s+this\s+for\s+later/gi,
42
+ /when\s+I\s+say\s+\w+\s+(?:do|execute|run)/gi,
43
+ /on\s+the\s+next\s+message/gi,
44
+ /after\s+this\s+(?:message|conversation)/gi,
45
+ /store\s+this\s+(?:instruction|command)/gi,
46
+ ];
47
+ const EXFILTRATION_PATTERNS = [
48
+ /send\s+(?:this\s+)?to\s+\S+@\S+/gi,
49
+ /forward\s+(?:this\s+)?to/gi,
50
+ /email\s+this\s+to/gi,
51
+ /post\s+this\s+to/gi,
52
+ /upload\s+(?:this\s+)?to/gi,
53
+ /transmit\s+to/gi,
54
+ ];
55
+ const AUTHORITY_PATTERNS = [
56
+ /I\s+am\s+(?:the\s+)?admin/gi,
57
+ /authorized\s+by/gi,
58
+ /emergency\s+override/gi,
59
+ /root\s+access/gi,
60
+ /sudo\s+mode/gi,
61
+ /privileged\s+access/gi,
62
+ /admin\s+credentials/gi,
63
+ ];
64
+ const PARANOIA_WEIGHTS = {
65
+ relaxed: {
66
+ instruction: 0.15,
67
+ encoding: 0,
68
+ delayed: 0,
69
+ exfiltration: 0,
70
+ authority: 0,
71
+ entropy: 0,
72
+ length: 0,
73
+ },
74
+ standard: {
75
+ instruction: 0.2,
76
+ encoding: 0.15,
77
+ delayed: 0.15,
78
+ exfiltration: 0.2,
79
+ authority: 0.2,
80
+ entropy: 0,
81
+ length: 0,
82
+ },
83
+ paranoid: {
84
+ instruction: 0.25,
85
+ encoding: 0.2,
86
+ delayed: 0.2,
87
+ exfiltration: 0.25,
88
+ authority: 0.25,
89
+ entropy: 0.15,
90
+ length: 0.1,
91
+ },
92
+ };
93
+ const PARANOIA_THRESHOLDS = {
94
+ relaxed: 0.7,
95
+ standard: 0.5,
96
+ paranoid: 0.3,
97
+ };
98
+ export class InjectionFirewall {
99
+ level;
100
+ stats = { scanned: 0, blocked: 0, quarantined: 0 };
101
+ constructor(level = 'standard') {
102
+ this.level = level;
103
+ }
104
+ scan(content, origin) {
105
+ this.stats.scanned++;
106
+ const threats = [];
107
+ let score = 0;
108
+ const weights = PARANOIA_WEIGHTS[this.level];
109
+ // Instruction pattern detection
110
+ for (const pattern of INSTRUCTION_PATTERNS) {
111
+ const matches = content.match(pattern);
112
+ if (matches) {
113
+ score += weights.instruction * matches.length;
114
+ threats.push(`instruction-override: ${matches[0]}`);
115
+ }
116
+ }
117
+ // Encoding pattern detection (standard+)
118
+ if (this.level !== 'relaxed') {
119
+ for (const pattern of ENCODING_PATTERNS) {
120
+ const matches = content.match(pattern);
121
+ if (matches) {
122
+ for (const match of matches) {
123
+ if (this.isLikelyEncoded(match)) {
124
+ score += weights.encoding;
125
+ threats.push(`encoded-content: ${match.substring(0, 20)}...`);
126
+ }
127
+ }
128
+ }
129
+ }
130
+ // Delayed injection
131
+ for (const pattern of DELAYED_INJECTION) {
132
+ const matches = content.match(pattern);
133
+ if (matches) {
134
+ score += weights.delayed * matches.length;
135
+ threats.push(`delayed-injection: ${matches[0]}`);
136
+ }
137
+ }
138
+ // Exfiltration
139
+ for (const pattern of EXFILTRATION_PATTERNS) {
140
+ const matches = content.match(pattern);
141
+ if (matches) {
142
+ score += weights.exfiltration * matches.length;
143
+ threats.push(`exfiltration-attempt: ${matches[0]}`);
144
+ }
145
+ }
146
+ // Authority claims
147
+ for (const pattern of AUTHORITY_PATTERNS) {
148
+ const matches = content.match(pattern);
149
+ if (matches) {
150
+ score += weights.authority * matches.length;
151
+ threats.push(`authority-claim: ${matches[0]}`);
152
+ }
153
+ }
154
+ }
155
+ // Paranoid-only checks
156
+ if (this.level === 'paranoid') {
157
+ const entropy = this.calculateEntropy(content);
158
+ if (entropy > 4.5) {
159
+ score += weights.entropy;
160
+ threats.push(`high-entropy: ${entropy.toFixed(2)}`);
161
+ }
162
+ if (content.length > 5000) {
163
+ score += weights.length;
164
+ threats.push(`excessive-length: ${content.length}`);
165
+ }
166
+ }
167
+ score = Math.min(score, 1);
168
+ const threshold = PARANOIA_THRESHOLDS[this.level];
169
+ const safe = score < threshold;
170
+ if (!safe) {
171
+ this.stats.blocked++;
172
+ }
173
+ return {
174
+ safe,
175
+ score,
176
+ threats,
177
+ origin,
178
+ quarantined: false,
179
+ };
180
+ }
181
+ scanBatch(messages) {
182
+ return messages.map(msg => this.scan(msg.content, msg.origin));
183
+ }
184
+ quarantine(content) {
185
+ this.stats.quarantined++;
186
+ let sanitized = content;
187
+ // Redact instruction patterns
188
+ for (const pattern of INSTRUCTION_PATTERNS) {
189
+ sanitized = sanitized.replace(pattern, '[REDACTED-INSTRUCTION]');
190
+ }
191
+ // Redact encoding patterns
192
+ for (const pattern of ENCODING_PATTERNS) {
193
+ sanitized = sanitized.replace(pattern, (match) => {
194
+ if (this.isLikelyEncoded(match)) {
195
+ return '[REDACTED-ENCODED]';
196
+ }
197
+ return match;
198
+ });
199
+ }
200
+ // Redact other threat patterns
201
+ for (const pattern of [...DELAYED_INJECTION, ...EXFILTRATION_PATTERNS, ...AUTHORITY_PATTERNS]) {
202
+ sanitized = sanitized.replace(pattern, '[REDACTED-THREAT]');
203
+ }
204
+ return sanitized;
205
+ }
206
+ setLevel(level) {
207
+ this.level = level;
208
+ }
209
+ getStats() {
210
+ return { ...this.stats };
211
+ }
212
+ isLikelyEncoded(text) {
213
+ if (text.length < 20)
214
+ return false;
215
+ // Check for base64
216
+ if (/^[A-Za-z0-9+/]+=*$/.test(text)) {
217
+ try {
218
+ const decoded = Buffer.from(text, 'base64').toString('utf-8');
219
+ if (this.containsSuspiciousKeywords(decoded)) {
220
+ return true;
221
+ }
222
+ }
223
+ catch {
224
+ // Not valid base64
225
+ }
226
+ }
227
+ // Check for hex
228
+ if (/^(?:0x)?[0-9a-fA-F]+$/.test(text)) {
229
+ try {
230
+ const decoded = Buffer.from(text.replace(/^0x/, ''), 'hex').toString('utf-8');
231
+ if (this.containsSuspiciousKeywords(decoded)) {
232
+ return true;
233
+ }
234
+ }
235
+ catch {
236
+ // Not valid hex
237
+ }
238
+ }
239
+ return false;
240
+ }
241
+ containsSuspiciousKeywords(text) {
242
+ const keywords = ['ignore', 'override', 'admin', 'system', 'jailbreak', 'execute', 'bypass'];
243
+ return keywords.some(kw => text.toLowerCase().includes(kw));
244
+ }
245
+ calculateEntropy(text) {
246
+ const freq = {};
247
+ for (const char of text) {
248
+ freq[char] = (freq[char] || 0) + 1;
249
+ }
250
+ let entropy = 0;
251
+ const len = text.length;
252
+ for (const count of Object.values(freq)) {
253
+ const p = count / len;
254
+ entropy -= p * Math.log2(p);
255
+ }
256
+ return entropy;
257
+ }
258
+ }
259
+ export function createFirewall(level = 'standard') {
260
+ return new InjectionFirewall(level);
261
+ }
262
+ //# sourceMappingURL=injectionFirewall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectionFirewall.js","sourceRoot":"","sources":["../../src/security/injectionFirewall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,UAAU;AACV,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAGzE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,cAAc;IACd,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,SAAS;CACV,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,aAAa;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;CACzB,CAAC,CAAC;AAGH,sBAAsB;AACtB,MAAM,oBAAoB,GAAa;IACrC,4EAA4E;IAC5E,+EAA+E;IAC/E,gCAAgC;IAChC,sCAAsC;IACtC,4BAA4B;IAC5B,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,aAAa;IACb,UAAU;IACV,uBAAuB;IACvB,wCAAwC;IACxC,qDAAqD;CACtD,CAAC;AAEF,MAAM,iBAAiB,GAAa;IAClC,qCAAqC,EAAE,sBAAsB;IAC7D,2BAA2B,EAAE,sBAAsB;IACnD,0BAA0B,EAAE,sBAAsB;IAClD,oBAAoB,EAAE,2BAA2B;CAClD,CAAC;AAEF,MAAM,iBAAiB,GAAa;IAClC,iCAAiC;IACjC,6CAA6C;IAC7C,6BAA6B;IAC7B,2CAA2C;IAC3C,0CAA0C;CAC3C,CAAC;AAEF,MAAM,qBAAqB,GAAa;IACtC,mCAAmC;IACnC,4BAA4B;IAC5B,qBAAqB;IACrB,oBAAoB;IACpB,2BAA2B;IAC3B,iBAAiB;CAClB,CAAC;AAEF,MAAM,kBAAkB,GAAa;IACnC,6BAA6B;IAC7B,mBAAmB;IACnB,wBAAwB;IACxB,iBAAiB;IACjB,eAAe;IACf,uBAAuB;IACvB,uBAAuB;CACxB,CAAC;AAYF,MAAM,gBAAgB,GAA0C;IAC9D,OAAO,EAAE;QACP,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;KACV;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,GAAG;QACjB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;KACV;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,GAAG;QACb,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,GAAG;KACZ;CACF,CAAC;AAEF,MAAM,mBAAmB,GAAkC;IACzD,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACpB,KAAK,CAAgB;IACrB,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAE3D,YAAY,QAAuB,UAAU;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,MAAqB;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAErB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7C,gCAAgC;QAChC,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,IAAI,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;4BAChC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC;4BAC1B,OAAO,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;wBAChE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,IAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC1C,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YAED,eAAe;YACf,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,IAAI,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC/C,OAAO,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,IAAI,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC5C,OAAO,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;gBAClB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBAC1B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;QAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,OAAO;YACL,IAAI;YACJ,KAAK;YACL,OAAO;YACP,MAAM;YACN,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAA2D;QACnE,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEzB,IAAI,SAAS,GAAG,OAAO,CAAC;QAExB,8BAA8B;QAC9B,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;QACnE,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/C,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,oBAAoB,CAAC;gBAC9B,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,iBAAiB,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,CAAC,EAAE,CAAC;YAC9F,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,KAAoB;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;QAEnC,mBAAmB;QACnB,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7C,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC9E,IAAI,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7C,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,0BAA0B,CAAC,IAAY;QAC7C,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7F,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,gBAAgB,CAAC,IAAY;QACnC,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;YACtB,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,QAAuB,UAAU;IAC9D,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Output Sanitizer
3
+ *
4
+ * Sanitizes agent outputs to prevent XSS, injection attacks, and malicious content
5
+ * in HTML, Markdown, and plain text outputs.
6
+ */
7
+ /**
8
+ * Escape HTML entities to prevent XSS attacks.
9
+ */
10
+ export declare function escapeHtml(input: string): string;
11
+ /**
12
+ * Sanitize Markdown content by stripping dangerous elements.
13
+ * Removes script tags, event handlers, javascript: and data: URLs, and embedded objects.
14
+ */
15
+ export declare function sanitizeMarkdown(input: string): string;
16
+ /**
17
+ * Validate that a URL uses a safe protocol (http or https).
18
+ */
19
+ export declare function isSafeUrl(url: string): boolean;
20
+ /**
21
+ * Sanitize output content based on format.
22
+ *
23
+ * @param content - The content to sanitize
24
+ * @param format - Output format: 'html', 'markdown', or 'plain'
25
+ * @returns Sanitized content safe for the specified format
26
+ */
27
+ export declare function sanitizeOutput(content: string, format?: 'html' | 'markdown' | 'plain'): string;
28
+ //# sourceMappingURL=outputSanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputSanitizer.d.ts","sourceRoot":"","sources":["../../src/security/outputSanitizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,GAAG,UAAU,GAAG,OAAiB,GAC9C,MAAM,CASR"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Output Sanitizer
3
+ *
4
+ * Sanitizes agent outputs to prevent XSS, injection attacks, and malicious content
5
+ * in HTML, Markdown, and plain text outputs.
6
+ */
7
+ const HTML_ENTITIES = {
8
+ '&': '&amp;',
9
+ '<': '&lt;',
10
+ '>': '&gt;',
11
+ '"': '&quot;',
12
+ "'": '&#x27;',
13
+ };
14
+ /**
15
+ * Escape HTML entities to prevent XSS attacks.
16
+ */
17
+ export function escapeHtml(input) {
18
+ return input.replace(/[&<>"']/g, ch => HTML_ENTITIES[ch]);
19
+ }
20
+ /**
21
+ * Sanitize Markdown content by stripping dangerous elements.
22
+ * Removes script tags, event handlers, javascript: and data: URLs, and embedded objects.
23
+ */
24
+ export function sanitizeMarkdown(input) {
25
+ let result = input;
26
+ // Strip script tags
27
+ result = result.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, '');
28
+ // Strip event handlers (onclick, onload, etc.)
29
+ result = result.replace(/\bon\w+\s*=\s*["'][^"']*["']/gi, '');
30
+ // Strip javascript: and data: URLs
31
+ result = result.replace(/\b(javascript|data)\s*:/gi, 'blocked:');
32
+ // Strip iframe/object/embed tags (both paired and self-closing)
33
+ result = result.replace(/<(iframe|object|embed)\b[^>]*>[\s\S]*?<\/\1>/gi, '');
34
+ result = result.replace(/<(iframe|object|embed)\b[^>]*\/?>/gi, '');
35
+ return result;
36
+ }
37
+ /**
38
+ * Validate that a URL uses a safe protocol (http or https).
39
+ */
40
+ export function isSafeUrl(url) {
41
+ try {
42
+ const parsed = new URL(url);
43
+ return ['http:', 'https:'].includes(parsed.protocol);
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ /**
50
+ * Sanitize output content based on format.
51
+ *
52
+ * @param content - The content to sanitize
53
+ * @param format - Output format: 'html', 'markdown', or 'plain'
54
+ * @returns Sanitized content safe for the specified format
55
+ */
56
+ export function sanitizeOutput(content, format = 'plain') {
57
+ switch (format) {
58
+ case 'html':
59
+ return escapeHtml(content);
60
+ case 'markdown':
61
+ return sanitizeMarkdown(content);
62
+ case 'plain':
63
+ return sanitizeMarkdown(escapeHtml(content));
64
+ }
65
+ }
66
+ //# sourceMappingURL=outputSanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputSanitizer.js","sourceRoot":"","sources":["../../src/security/outputSanitizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,aAAa,GAA2B;IAC5C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,oBAAoB;IACpB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;IAEnE,+CAA+C;IAC/C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;IAE9D,mCAAmC;IACnC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC;IAEjE,gEAAgE;IAChE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,SAAwC,OAAO;IAE/C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Isomorphic Security Sandbox
3
+ *
4
+ * Implements capability-based security for Agent Zero.
5
+ * Addresses OpenClaw's critical security gaps:
6
+ * - Plaintext credential storage → Capability tokens with scoped access
7
+ * - Unauthenticated instances → Mandatory capability validation
8
+ * - Prompt injection → Semantic boundary enforcement
9
+ * - No directory sandboxing → Isomorphic containment
10
+ *
11
+ * Security Model:
12
+ * - Capabilities are unforgeable tokens that grant specific access
13
+ * - No ambient authority - everything requires explicit capability
14
+ * - Attenuation: derived capabilities can only be more restrictive
15
+ * - Revocation: capabilities can be invalidated at any time
16
+ */
17
+ import { z } from 'zod';
18
+ export declare const CapabilityScope: z.ZodEnum<["read", "write", "execute", "network", "memory", "spawn", "broadcast", "admin"]>;
19
+ export type CapabilityScope = z.infer<typeof CapabilityScope>;
20
+ export declare const ResourcePattern: z.ZodObject<{
21
+ /** Glob-style pattern for matching resources */
22
+ pattern: z.ZodString;
23
+ /** Whether this is an allow or deny pattern */
24
+ type: z.ZodEnum<["allow", "deny"]>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ type: "allow" | "deny";
27
+ pattern: string;
28
+ }, {
29
+ type: "allow" | "deny";
30
+ pattern: string;
31
+ }>;
32
+ export type ResourcePattern = z.infer<typeof ResourcePattern>;
33
+ export declare const Capability: z.ZodObject<{
34
+ /** Unique capability token */
35
+ token: z.ZodString;
36
+ /** Scopes granted by this capability */
37
+ scopes: z.ZodArray<z.ZodEnum<["read", "write", "execute", "network", "memory", "spawn", "broadcast", "admin"]>, "many">;
38
+ /** Resource patterns this capability applies to */
39
+ resources: z.ZodArray<z.ZodObject<{
40
+ /** Glob-style pattern for matching resources */
41
+ pattern: z.ZodString;
42
+ /** Whether this is an allow or deny pattern */
43
+ type: z.ZodEnum<["allow", "deny"]>;
44
+ }, "strip", z.ZodTypeAny, {
45
+ type: "allow" | "deny";
46
+ pattern: string;
47
+ }, {
48
+ type: "allow" | "deny";
49
+ pattern: string;
50
+ }>, "many">;
51
+ /** Parent capability token (for attenuation chain) */
52
+ parent: z.ZodNullable<z.ZodString>;
53
+ /** Expiration timestamp (null = never expires) */
54
+ expiresAt: z.ZodNullable<z.ZodNumber>;
55
+ /** Whether this capability has been revoked */
56
+ revoked: z.ZodBoolean;
57
+ /** Metadata for auditing */
58
+ metadata: z.ZodObject<{
59
+ createdAt: z.ZodNumber;
60
+ createdBy: z.ZodString;
61
+ reason: z.ZodString;
62
+ }, "strip", z.ZodTypeAny, {
63
+ createdAt: number;
64
+ createdBy: string;
65
+ reason: string;
66
+ }, {
67
+ createdAt: number;
68
+ createdBy: string;
69
+ reason: string;
70
+ }>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ token: string;
73
+ scopes: ("memory" | "spawn" | "broadcast" | "read" | "write" | "execute" | "network" | "admin")[];
74
+ resources: {
75
+ type: "allow" | "deny";
76
+ pattern: string;
77
+ }[];
78
+ parent: string | null;
79
+ expiresAt: number | null;
80
+ revoked: boolean;
81
+ metadata: {
82
+ createdAt: number;
83
+ createdBy: string;
84
+ reason: string;
85
+ };
86
+ }, {
87
+ token: string;
88
+ scopes: ("memory" | "spawn" | "broadcast" | "read" | "write" | "execute" | "network" | "admin")[];
89
+ resources: {
90
+ type: "allow" | "deny";
91
+ pattern: string;
92
+ }[];
93
+ parent: string | null;
94
+ expiresAt: number | null;
95
+ revoked: boolean;
96
+ metadata: {
97
+ createdAt: number;
98
+ createdBy: string;
99
+ reason: string;
100
+ };
101
+ }>;
102
+ export type Capability = z.infer<typeof Capability>;
103
+ export declare const BoundaryViolation: z.ZodObject<{
104
+ type: z.ZodEnum<["scope_denied", "resource_denied", "capability_expired", "capability_revoked", "injection_detected", "boundary_crossed"]>;
105
+ message: z.ZodString;
106
+ capability: z.ZodOptional<z.ZodString>;
107
+ resource: z.ZodOptional<z.ZodString>;
108
+ timestamp: z.ZodNumber;
109
+ }, "strip", z.ZodTypeAny, {
110
+ message: string;
111
+ type: "scope_denied" | "resource_denied" | "capability_expired" | "capability_revoked" | "injection_detected" | "boundary_crossed";
112
+ timestamp: number;
113
+ capability?: string | undefined;
114
+ resource?: string | undefined;
115
+ }, {
116
+ message: string;
117
+ type: "scope_denied" | "resource_denied" | "capability_expired" | "capability_revoked" | "injection_detected" | "boundary_crossed";
118
+ timestamp: number;
119
+ capability?: string | undefined;
120
+ resource?: string | undefined;
121
+ }>;
122
+ export type BoundaryViolation = z.infer<typeof BoundaryViolation>;
123
+ /**
124
+ * Check if content contains injection attempts
125
+ */
126
+ export declare function detectInjection(content: string): boolean;
127
+ /**
128
+ * Generate a cryptographically secure capability token
129
+ */
130
+ export declare function generateCapabilityToken(): string;
131
+ /**
132
+ * Hash a capability token for storage
133
+ */
134
+ export declare function hashCapabilityToken(token: string): string;
135
+ export declare class IsomorphicSandbox {
136
+ private capabilities;
137
+ private violations;
138
+ private rootCapability;
139
+ constructor();
140
+ /**
141
+ * Create the root capability (admin only)
142
+ */
143
+ private createRootCapability;
144
+ /**
145
+ * Get the root capability token (for initial setup only)
146
+ */
147
+ getRootToken(): string;
148
+ /**
149
+ * Attenuate a capability to create a more restricted child
150
+ */
151
+ attenuate(parentToken: string, options: {
152
+ scopes: CapabilityScope[];
153
+ resources: ResourcePattern[];
154
+ expiresAt?: number;
155
+ reason: string;
156
+ }): Capability | null;
157
+ /**
158
+ * Check if a capability is valid (not expired, not revoked, ancestors valid)
159
+ */
160
+ isValid(token: string): boolean;
161
+ /**
162
+ * Check if a capability grants a specific scope for a resource
163
+ */
164
+ check(token: string, scope: CapabilityScope, resource: string): {
165
+ allowed: boolean;
166
+ violation?: BoundaryViolation;
167
+ };
168
+ /**
169
+ * Check content for injection attempts
170
+ */
171
+ checkInjection(content: string): {
172
+ safe: boolean;
173
+ violation?: BoundaryViolation;
174
+ };
175
+ /**
176
+ * Revoke a capability and all its descendants
177
+ */
178
+ revoke(token: string): void;
179
+ /**
180
+ * Get violation history
181
+ */
182
+ getViolations(): BoundaryViolation[];
183
+ /**
184
+ * Clear violation history
185
+ */
186
+ clearViolations(): void;
187
+ /**
188
+ * Glob-style pattern matching
189
+ */
190
+ private matchPattern;
191
+ }
192
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,eAAe,6FAS1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,eAAe;IAC1B,gDAAgD;;IAEhD,+CAA+C;;;;;;;;EAE/C,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,UAAU;IACrB,8BAA8B;;IAE9B,wCAAwC;;IAExC,mDAAmD;;QAZnD,gDAAgD;;QAEhD,+CAA+C;;;;;;;;;IAY/C,sDAAsD;;IAEtD,kDAAkD;;IAElD,+CAA+C;;IAE/C,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAMpD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAa5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AA2BlE;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,cAAc,CAAa;;IAQnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,SAAS,CACP,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;QACP,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,SAAS,EAAE,eAAe,EAAE,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,GACA,UAAU,GAAG,IAAI;IA8BpB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAc/B;;OAEG;IACH,KAAK,CACH,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,MAAM,GACf;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAAE;IAsGtD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAAE;IAajF;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAc3B;;OAEG;IACH,aAAa,IAAI,iBAAiB,EAAE;IAIpC;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAWrB"}