@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,359 @@
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
+ import { createHash, randomBytes } from 'crypto';
19
+ // ============================================================================
20
+ // CAPABILITY DEFINITIONS
21
+ // ============================================================================
22
+ export const CapabilityScope = z.enum([
23
+ 'read', // Read-only access
24
+ 'write', // Write access
25
+ 'execute', // Execute commands
26
+ 'network', // Network access
27
+ 'memory', // Semantic memory access
28
+ 'spawn', // Spawn child agents
29
+ 'broadcast', // Send to channels
30
+ 'admin', // Administrative actions
31
+ ]);
32
+ export const ResourcePattern = z.object({
33
+ /** Glob-style pattern for matching resources */
34
+ pattern: z.string(),
35
+ /** Whether this is an allow or deny pattern */
36
+ type: z.enum(['allow', 'deny']),
37
+ });
38
+ export const Capability = z.object({
39
+ /** Unique capability token */
40
+ token: z.string(),
41
+ /** Scopes granted by this capability */
42
+ scopes: z.array(CapabilityScope),
43
+ /** Resource patterns this capability applies to */
44
+ resources: z.array(ResourcePattern),
45
+ /** Parent capability token (for attenuation chain) */
46
+ parent: z.string().nullable(),
47
+ /** Expiration timestamp (null = never expires) */
48
+ expiresAt: z.number().nullable(),
49
+ /** Whether this capability has been revoked */
50
+ revoked: z.boolean(),
51
+ /** Metadata for auditing */
52
+ metadata: z.object({
53
+ createdAt: z.number(),
54
+ createdBy: z.string(),
55
+ reason: z.string(),
56
+ }),
57
+ });
58
+ // ============================================================================
59
+ // SECURITY BOUNDARY
60
+ // ============================================================================
61
+ export const BoundaryViolation = z.object({
62
+ type: z.enum([
63
+ 'scope_denied',
64
+ 'resource_denied',
65
+ 'capability_expired',
66
+ 'capability_revoked',
67
+ 'injection_detected',
68
+ 'boundary_crossed',
69
+ ]),
70
+ message: z.string(),
71
+ capability: z.string().optional(),
72
+ resource: z.string().optional(),
73
+ timestamp: z.number(),
74
+ });
75
+ // Injection patterns to detect and block
76
+ const INJECTION_PATTERNS = [
77
+ // Prompt injection attempts
78
+ /ignore previous instructions/i,
79
+ /disregard (?:all )?(?:prior|previous) (?:instructions|context)/i,
80
+ /you are now/i,
81
+ /pretend you are/i,
82
+ /act as if/i,
83
+ /system prompt override/i,
84
+ /admin override/i,
85
+ /developer mode/i,
86
+ /jailbreak/i,
87
+ // Code injection
88
+ /eval\s*\(/,
89
+ /new\s+Function\s*\(/,
90
+ /setTimeout\s*\([^,]*,/,
91
+ /setInterval\s*\([^,]*,/,
92
+ /__proto__/,
93
+ /constructor\s*\[/,
94
+ // Path traversal
95
+ /\.\.\//,
96
+ /%2e%2e%2f/i,
97
+ /%252e%252e%252f/i,
98
+ ];
99
+ /**
100
+ * Check if content contains injection attempts
101
+ */
102
+ export function detectInjection(content) {
103
+ for (const pattern of INJECTION_PATTERNS) {
104
+ if (pattern.test(content)) {
105
+ return true;
106
+ }
107
+ }
108
+ return false;
109
+ }
110
+ /**
111
+ * Generate a cryptographically secure capability token
112
+ */
113
+ export function generateCapabilityToken() {
114
+ const bytes = randomBytes(32);
115
+ return bytes.toString('base64url');
116
+ }
117
+ /**
118
+ * Hash a capability token for storage
119
+ */
120
+ export function hashCapabilityToken(token) {
121
+ return createHash('sha256').update(token).digest('hex');
122
+ }
123
+ // ============================================================================
124
+ // SANDBOX CLASS
125
+ // ============================================================================
126
+ export class IsomorphicSandbox {
127
+ capabilities = new Map();
128
+ violations = [];
129
+ rootCapability;
130
+ constructor() {
131
+ // Create root capability with all permissions
132
+ this.rootCapability = this.createRootCapability();
133
+ this.capabilities.set(this.rootCapability.token, this.rootCapability);
134
+ }
135
+ /**
136
+ * Create the root capability (admin only)
137
+ */
138
+ createRootCapability() {
139
+ return {
140
+ token: generateCapabilityToken(),
141
+ scopes: Object.values(CapabilityScope.enum),
142
+ resources: [{ pattern: '**', type: 'allow' }],
143
+ parent: null,
144
+ expiresAt: null,
145
+ revoked: false,
146
+ metadata: {
147
+ createdAt: Date.now(),
148
+ createdBy: 'system',
149
+ reason: 'Root capability',
150
+ },
151
+ };
152
+ }
153
+ /**
154
+ * Get the root capability token (for initial setup only)
155
+ */
156
+ getRootToken() {
157
+ return this.rootCapability.token;
158
+ }
159
+ /**
160
+ * Attenuate a capability to create a more restricted child
161
+ */
162
+ attenuate(parentToken, options) {
163
+ const parent = this.capabilities.get(parentToken);
164
+ if (!parent)
165
+ return null;
166
+ // Validate parent is still valid
167
+ if (!this.isValid(parentToken))
168
+ return null;
169
+ // Attenuated scopes must be subset of parent scopes
170
+ const validScopes = options.scopes.filter(s => parent.scopes.includes(s));
171
+ if (validScopes.length === 0)
172
+ return null;
173
+ // Create attenuated capability
174
+ const child = {
175
+ token: generateCapabilityToken(),
176
+ scopes: validScopes,
177
+ resources: options.resources,
178
+ parent: parentToken,
179
+ expiresAt: options.expiresAt ?? null,
180
+ revoked: false,
181
+ metadata: {
182
+ createdAt: Date.now(),
183
+ createdBy: parentToken.slice(0, 8) + '...',
184
+ reason: options.reason,
185
+ },
186
+ };
187
+ this.capabilities.set(child.token, child);
188
+ return child;
189
+ }
190
+ /**
191
+ * Check if a capability is valid (not expired, not revoked, ancestors valid)
192
+ */
193
+ isValid(token) {
194
+ const cap = this.capabilities.get(token);
195
+ if (!cap)
196
+ return false;
197
+ if (cap.revoked)
198
+ return false;
199
+ if (cap.expiresAt && Date.now() > cap.expiresAt)
200
+ return false;
201
+ // Check ancestor chain
202
+ if (cap.parent) {
203
+ return this.isValid(cap.parent);
204
+ }
205
+ return true;
206
+ }
207
+ /**
208
+ * Check if a capability grants a specific scope for a resource
209
+ */
210
+ check(token, scope, resource) {
211
+ const cap = this.capabilities.get(token);
212
+ // Capability not found
213
+ if (!cap) {
214
+ const violation = {
215
+ type: 'capability_revoked',
216
+ message: 'Capability not found',
217
+ capability: token.slice(0, 8) + '...',
218
+ resource,
219
+ timestamp: Date.now(),
220
+ };
221
+ this.violations.push(violation);
222
+ return { allowed: false, violation };
223
+ }
224
+ // Capability revoked
225
+ if (cap.revoked) {
226
+ const violation = {
227
+ type: 'capability_revoked',
228
+ message: 'Capability has been revoked',
229
+ capability: token.slice(0, 8) + '...',
230
+ resource,
231
+ timestamp: Date.now(),
232
+ };
233
+ this.violations.push(violation);
234
+ return { allowed: false, violation };
235
+ }
236
+ // Capability expired
237
+ if (cap.expiresAt && Date.now() > cap.expiresAt) {
238
+ const violation = {
239
+ type: 'capability_expired',
240
+ message: 'Capability has expired',
241
+ capability: token.slice(0, 8) + '...',
242
+ resource,
243
+ timestamp: Date.now(),
244
+ };
245
+ this.violations.push(violation);
246
+ return { allowed: false, violation };
247
+ }
248
+ // Scope not granted
249
+ if (!cap.scopes.includes(scope)) {
250
+ const violation = {
251
+ type: 'scope_denied',
252
+ message: `Scope '${scope}' not granted by capability`,
253
+ capability: token.slice(0, 8) + '...',
254
+ resource,
255
+ timestamp: Date.now(),
256
+ };
257
+ this.violations.push(violation);
258
+ return { allowed: false, violation };
259
+ }
260
+ // Check resource patterns
261
+ let allowed = false;
262
+ for (const pattern of cap.resources) {
263
+ if (this.matchPattern(pattern.pattern, resource)) {
264
+ if (pattern.type === 'deny') {
265
+ const violation = {
266
+ type: 'resource_denied',
267
+ message: `Resource '${resource}' denied by pattern '${pattern.pattern}'`,
268
+ capability: token.slice(0, 8) + '...',
269
+ resource,
270
+ timestamp: Date.now(),
271
+ };
272
+ this.violations.push(violation);
273
+ return { allowed: false, violation };
274
+ }
275
+ allowed = true;
276
+ }
277
+ }
278
+ if (!allowed) {
279
+ const violation = {
280
+ type: 'resource_denied',
281
+ message: `Resource '${resource}' not matched by any allow pattern`,
282
+ capability: token.slice(0, 8) + '...',
283
+ resource,
284
+ timestamp: Date.now(),
285
+ };
286
+ this.violations.push(violation);
287
+ return { allowed: false, violation };
288
+ }
289
+ // Check ancestor chain
290
+ if (cap.parent && !this.isValid(cap.parent)) {
291
+ const violation = {
292
+ type: 'capability_revoked',
293
+ message: 'Parent capability is no longer valid',
294
+ capability: token.slice(0, 8) + '...',
295
+ resource,
296
+ timestamp: Date.now(),
297
+ };
298
+ this.violations.push(violation);
299
+ return { allowed: false, violation };
300
+ }
301
+ return { allowed: true };
302
+ }
303
+ /**
304
+ * Check content for injection attempts
305
+ */
306
+ checkInjection(content) {
307
+ if (detectInjection(content)) {
308
+ const violation = {
309
+ type: 'injection_detected',
310
+ message: 'Potential injection attack detected in content',
311
+ timestamp: Date.now(),
312
+ };
313
+ this.violations.push(violation);
314
+ return { safe: false, violation };
315
+ }
316
+ return { safe: true };
317
+ }
318
+ /**
319
+ * Revoke a capability and all its descendants
320
+ */
321
+ revoke(token) {
322
+ const cap = this.capabilities.get(token);
323
+ if (cap) {
324
+ cap.revoked = true;
325
+ // Revoke all descendants
326
+ for (const [childToken, child] of this.capabilities) {
327
+ if (child.parent === token) {
328
+ this.revoke(childToken);
329
+ }
330
+ }
331
+ }
332
+ }
333
+ /**
334
+ * Get violation history
335
+ */
336
+ getViolations() {
337
+ return [...this.violations];
338
+ }
339
+ /**
340
+ * Clear violation history
341
+ */
342
+ clearViolations() {
343
+ this.violations = [];
344
+ }
345
+ /**
346
+ * Glob-style pattern matching
347
+ */
348
+ matchPattern(pattern, resource) {
349
+ // Convert glob to regex
350
+ const regexPattern = pattern
351
+ .replace(/\*\*/g, '<<<GLOBSTAR>>>')
352
+ .replace(/\*/g, '[^/]*')
353
+ .replace(/<<<GLOBSTAR>>>/g, '.*')
354
+ .replace(/\?/g, '.');
355
+ const regex = new RegExp(`^${regexPattern}$`);
356
+ return regex.test(resource);
357
+ }
358
+ }
359
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ declare const FileHashSchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ sha256: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ path: string;
7
+ sha256: string;
8
+ }, {
9
+ path: string;
10
+ sha256: string;
11
+ }>;
12
+ export declare const SkillManifestSchema: z.ZodObject<{
13
+ name: z.ZodString;
14
+ version: z.ZodString;
15
+ files: z.ZodArray<z.ZodObject<{
16
+ path: z.ZodString;
17
+ sha256: z.ZodString;
18
+ }, "strip", z.ZodTypeAny, {
19
+ path: string;
20
+ sha256: string;
21
+ }, {
22
+ path: string;
23
+ sha256: string;
24
+ }>, "many">;
25
+ timestamp: z.ZodNumber;
26
+ publicKey: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ timestamp: number;
29
+ name: string;
30
+ version: string;
31
+ files: {
32
+ path: string;
33
+ sha256: string;
34
+ }[];
35
+ publicKey: string;
36
+ }, {
37
+ timestamp: number;
38
+ name: string;
39
+ version: string;
40
+ files: {
41
+ path: string;
42
+ sha256: string;
43
+ }[];
44
+ publicKey: string;
45
+ }>;
46
+ export declare const SignedManifestSchema: z.ZodObject<{
47
+ name: z.ZodString;
48
+ version: z.ZodString;
49
+ files: z.ZodArray<z.ZodObject<{
50
+ path: z.ZodString;
51
+ sha256: z.ZodString;
52
+ }, "strip", z.ZodTypeAny, {
53
+ path: string;
54
+ sha256: string;
55
+ }, {
56
+ path: string;
57
+ sha256: string;
58
+ }>, "many">;
59
+ timestamp: z.ZodNumber;
60
+ publicKey: z.ZodString;
61
+ } & {
62
+ signature: z.ZodString;
63
+ }, "strip", z.ZodTypeAny, {
64
+ timestamp: number;
65
+ name: string;
66
+ version: string;
67
+ files: {
68
+ path: string;
69
+ sha256: string;
70
+ }[];
71
+ publicKey: string;
72
+ signature: string;
73
+ }, {
74
+ timestamp: number;
75
+ name: string;
76
+ version: string;
77
+ files: {
78
+ path: string;
79
+ sha256: string;
80
+ }[];
81
+ publicKey: string;
82
+ signature: string;
83
+ }>;
84
+ export type FileHash = z.infer<typeof FileHashSchema>;
85
+ export type SkillManifest = z.infer<typeof SkillManifestSchema>;
86
+ export type SignedManifest = z.infer<typeof SignedManifestSchema>;
87
+ /**
88
+ * Generate Ed25519 keypair for skill signing
89
+ */
90
+ export declare function generateSigningKeyPair(): {
91
+ publicKey: string;
92
+ privateKey: string;
93
+ };
94
+ /**
95
+ * Compute SHA256 hash of file contents
96
+ */
97
+ export declare function hashFile(filePath: string): Promise<string>;
98
+ /**
99
+ * Create skill manifest by hashing all files in directory
100
+ */
101
+ export declare function createManifest(skillDir: string, name: string, version: string): Promise<SkillManifest>;
102
+ /**
103
+ * Sign manifest with Ed25519 private key
104
+ */
105
+ export declare function signManifest(manifest: SkillManifest, privateKey: string): SignedManifest;
106
+ /**
107
+ * Verify manifest signature using embedded public key
108
+ */
109
+ export declare function verifyManifest(signed: SignedManifest): boolean;
110
+ /**
111
+ * Verify skill directory matches signed manifest
112
+ * Returns list of tampered files (empty if valid)
113
+ */
114
+ export declare function verifySkillIntegrity(skillDir: string, signed: SignedManifest): Promise<{
115
+ valid: boolean;
116
+ tamperedFiles: string[];
117
+ }>;
118
+ /**
119
+ * Load and parse signed manifest from JSON file
120
+ */
121
+ export declare function loadSignedManifest(manifestPath: string): Promise<SignedManifest>;
122
+ /**
123
+ * Check if skill directory has been modified since signing
124
+ * Useful for hot-reload scenarios
125
+ */
126
+ export declare function needsReVerification(skillDir: string, signed: SignedManifest): Promise<boolean>;
127
+ export {};
128
+ //# sourceMappingURL=skillVerify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillVerify.d.ts","sourceRoot":"","sources":["../../src/security/skillVerify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,cAAc;;;;;;;;;EAGlB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE/B,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAOlF;AAMD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AA8BD;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAkBxB;AA2BD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAiBxF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAY9D;AAMD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqCtD;AAMD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAItF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC,CAqBlB"}