@agentsh/secure-sandbox 0.1.4 → 0.1.6
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.
- package/README.md +8 -1
- package/dist/adapters/blaxel.d.ts +1 -1
- package/dist/adapters/cloudflare.d.ts +1 -1
- package/dist/adapters/daytona.d.ts +1 -1
- package/dist/adapters/e2b.d.ts +1 -1
- package/dist/adapters/index.d.ts +2 -1
- package/dist/adapters/index.js +6 -1
- package/dist/adapters/vercel.d.ts +1 -1
- package/dist/{chunk-NWHVZ3DG.js → chunk-GFPHTJLU.js} +107 -3
- package/dist/chunk-GFPHTJLU.js.map +1 -0
- package/dist/chunk-KXCR2ZML.js +129 -0
- package/dist/chunk-KXCR2ZML.js.map +1 -0
- package/dist/index-D6DG8Lpi.d.ts +28 -0
- package/dist/{index-D0UvBOzr.d.ts → index-Nmlhw9oj.d.ts} +113 -0
- package/dist/index.d.ts +5 -11
- package/dist/index.js +141 -5
- package/dist/index.js.map +1 -1
- package/dist/policies/index.d.ts +1 -1
- package/dist/policies/index.js +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/{types-DuXMpAuv.d.ts → types-S_fIEFHD.d.ts} +160 -1
- package/package.json +11 -1
- package/dist/chunk-L4KFLVNU.js +0 -33
- package/dist/chunk-L4KFLVNU.js.map +0 -1
- package/dist/chunk-NWHVZ3DG.js.map +0 -1
- package/dist/index-aQ1TVPtG.d.ts +0 -16
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @agentsh/secure-sandbox
|
|
2
2
|
|
|
3
|
-
Runtime security for AI agent sandboxes. Drop-in protection against prompt injection, secret exfiltration, and sandbox escape — works with [Vercel](https://vercel.com/sandbox), [E2B](https://e2b.dev/), [Daytona](https://www.daytona.io/), [Cloudflare Containers](https://developers.cloudflare.com/containers/),
|
|
3
|
+
Runtime security for AI agent sandboxes. Drop-in protection against prompt injection, secret exfiltration, and sandbox escape — works with [Vercel](https://vercel.com/sandbox), [E2B](https://e2b.dev/), [Daytona](https://www.daytona.io/), [Cloudflare Containers](https://developers.cloudflare.com/containers/), [Blaxel](https://blaxel.ai/sandbox), and [Sprites](https://sprites.dev). Powered by [agentsh](https://www.agentsh.org).
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm install @agentsh/secure-sandbox
|
|
@@ -113,6 +113,7 @@ Enforcement happens at the **syscall level** — seccomp intercepts process exec
|
|
|
113
113
|
| [**Daytona**](https://www.daytona.io/) | ✅ | ✅ | ✅ | ✅ | ✅ | `full` |
|
|
114
114
|
| [**Cloudflare**](https://developers.cloudflare.com/containers/) | ✅ | ✅ | ❌ | ✅ | ✅ | `landlock` |
|
|
115
115
|
| [**Blaxel**](https://blaxel.ai/sandbox) | ✅ | ✅ | ✅ | ✅ | ✅ | `full` |
|
|
116
|
+
| [**Sprites**](https://sprites.dev) | ✅ | ✅ | ✅ | ✅ | ✅ | `full` |
|
|
116
117
|
|
|
117
118
|
```typescript
|
|
118
119
|
// E2B
|
|
@@ -131,6 +132,12 @@ const sandbox = await secureSandbox(adapters.cloudflare(getSandbox(env.Sandbox,
|
|
|
131
132
|
// Blaxel
|
|
132
133
|
import { SandboxInstance } from '@blaxel/core';
|
|
133
134
|
const sandbox = await secureSandbox(adapters.blaxel(await SandboxInstance.create({ name: 'my-sandbox' })));
|
|
135
|
+
|
|
136
|
+
// Sprites (Fly.io Firecracker microVMs)
|
|
137
|
+
import { SpritesClient } from '@fly/sprites';
|
|
138
|
+
import { sprites } from '@agentsh/secure-sandbox/adapters/sprites';
|
|
139
|
+
const client = new SpritesClient(process.env.SPRITES_TOKEN);
|
|
140
|
+
const sandbox = await secureSandbox(sprites(client.sprite('my-sprite')));
|
|
134
141
|
```
|
|
135
142
|
|
|
136
143
|
## Default Policy
|
package/dist/adapters/e2b.d.ts
CHANGED
package/dist/adapters/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { e2b } from './e2b.js';
|
|
|
3
3
|
export { daytona } from './daytona.js';
|
|
4
4
|
export { cloudflare } from './cloudflare.js';
|
|
5
5
|
export { blaxel } from './blaxel.js';
|
|
6
|
-
|
|
6
|
+
export { s as sprites, a as spritesDefaults } from '../index-D6DG8Lpi.js';
|
|
7
|
+
import '../types-S_fIEFHD.js';
|
package/dist/adapters/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
sprites,
|
|
3
|
+
spritesDefaults
|
|
4
|
+
} from "../chunk-KXCR2ZML.js";
|
|
2
5
|
import {
|
|
3
6
|
blaxel
|
|
4
7
|
} from "../chunk-UYEAO27E.js";
|
|
@@ -21,6 +24,8 @@ export {
|
|
|
21
24
|
cloudflare,
|
|
22
25
|
daytona,
|
|
23
26
|
e2b,
|
|
27
|
+
sprites,
|
|
28
|
+
spritesDefaults,
|
|
24
29
|
vercel
|
|
25
30
|
};
|
|
26
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -171,13 +171,33 @@ var ConnectRedirectSchema = z.object({
|
|
|
171
171
|
match: z.string(),
|
|
172
172
|
redirectTo: z.string()
|
|
173
173
|
}).strict();
|
|
174
|
+
var LicenseSpdxMatchSchema = z.object({
|
|
175
|
+
allow: z.array(z.string()).optional(),
|
|
176
|
+
deny: z.array(z.string()).optional()
|
|
177
|
+
}).strict();
|
|
178
|
+
var PackageMatchSchema = z.object({
|
|
179
|
+
packages: z.array(z.string()).optional(),
|
|
180
|
+
namePatterns: z.array(z.string()).optional(),
|
|
181
|
+
findingType: z.string().optional(),
|
|
182
|
+
severity: stringOrArray.optional(),
|
|
183
|
+
reasons: z.array(z.string()).optional(),
|
|
184
|
+
licenseSpdx: LicenseSpdxMatchSchema.optional(),
|
|
185
|
+
ecosystem: z.string().optional(),
|
|
186
|
+
options: z.record(z.unknown()).optional()
|
|
187
|
+
}).strict();
|
|
188
|
+
var PackageRuleSchema = z.object({
|
|
189
|
+
match: PackageMatchSchema,
|
|
190
|
+
action: z.enum(["allow", "warn", "approve", "block"]),
|
|
191
|
+
reason: z.string().optional()
|
|
192
|
+
}).strict();
|
|
174
193
|
var PolicyDefinitionSchema = z.object({
|
|
175
194
|
file: z.array(FileRuleSchema).optional(),
|
|
176
195
|
network: z.array(NetworkRuleSchema).optional(),
|
|
177
196
|
commands: z.array(CommandRuleSchema).optional(),
|
|
178
197
|
env: z.array(EnvRuleSchema).optional(),
|
|
179
198
|
dns: z.array(DnsRedirectSchema).optional(),
|
|
180
|
-
connect: z.array(ConnectRedirectSchema).optional()
|
|
199
|
+
connect: z.array(ConnectRedirectSchema).optional(),
|
|
200
|
+
packageRules: z.array(PackageRuleSchema).optional()
|
|
181
201
|
}).strict();
|
|
182
202
|
function validatePolicy(policy) {
|
|
183
203
|
try {
|
|
@@ -191,7 +211,7 @@ function validatePolicy(policy) {
|
|
|
191
211
|
}
|
|
192
212
|
|
|
193
213
|
// src/policies/merge.ts
|
|
194
|
-
var CATEGORIES = ["file", "network", "commands", "env", "dns", "connect"];
|
|
214
|
+
var CATEGORIES = ["file", "network", "commands", "env", "dns", "connect", "packageRules"];
|
|
195
215
|
function merge(base, ...overrides) {
|
|
196
216
|
return validatePolicy(mergeInternal(base, overrides, "append"));
|
|
197
217
|
}
|
|
@@ -331,6 +351,50 @@ function agentDefault(extensions) {
|
|
|
331
351
|
redirect: ["curl", "wget"],
|
|
332
352
|
to: { cmd: "agentsh-fetch", args: ["--audit"] }
|
|
333
353
|
}
|
|
354
|
+
],
|
|
355
|
+
packageRules: [
|
|
356
|
+
// Critical vulnerability = block
|
|
357
|
+
{
|
|
358
|
+
match: { findingType: "vulnerability", severity: "critical" },
|
|
359
|
+
action: "block",
|
|
360
|
+
reason: "Critical vulnerability \u2014 review before installing"
|
|
361
|
+
},
|
|
362
|
+
// Known malware = block
|
|
363
|
+
{
|
|
364
|
+
match: { findingType: "malware" },
|
|
365
|
+
action: "block",
|
|
366
|
+
reason: "Known malware detected"
|
|
367
|
+
},
|
|
368
|
+
// Typosquat = block
|
|
369
|
+
{
|
|
370
|
+
match: { findingType: "reputation", reasons: ["typosquat"] },
|
|
371
|
+
action: "block",
|
|
372
|
+
reason: "Package flagged as potential typosquat"
|
|
373
|
+
},
|
|
374
|
+
// Medium vulnerability = warn
|
|
375
|
+
{
|
|
376
|
+
match: { findingType: "vulnerability", severity: "medium" },
|
|
377
|
+
action: "warn",
|
|
378
|
+
reason: "Medium vulnerability \u2014 review before using"
|
|
379
|
+
},
|
|
380
|
+
// Copyleft licenses = block
|
|
381
|
+
{
|
|
382
|
+
match: {
|
|
383
|
+
findingType: "license",
|
|
384
|
+
licenseSpdx: { deny: ["AGPL-3.0-only", "SSPL-1.0"] }
|
|
385
|
+
},
|
|
386
|
+
action: "block",
|
|
387
|
+
reason: "Copyleft license incompatible with proprietary code"
|
|
388
|
+
},
|
|
389
|
+
// Package too new = approve (requires human confirmation)
|
|
390
|
+
{
|
|
391
|
+
match: {
|
|
392
|
+
findingType: "reputation",
|
|
393
|
+
reasons: ["package_too_new"]
|
|
394
|
+
},
|
|
395
|
+
action: "approve",
|
|
396
|
+
reason: "Package published recently \u2014 requires approval"
|
|
397
|
+
}
|
|
334
398
|
]
|
|
335
399
|
};
|
|
336
400
|
return extensions ? merge(base, extensions) : base;
|
|
@@ -511,6 +575,43 @@ function serializeConnectRedirects(redirects) {
|
|
|
511
575
|
redirect_to: r.redirectTo
|
|
512
576
|
}));
|
|
513
577
|
}
|
|
578
|
+
function serializePackageRules(rules) {
|
|
579
|
+
return rules.map((rule) => {
|
|
580
|
+
const match = {};
|
|
581
|
+
if (rule.match.packages) {
|
|
582
|
+
match.packages = rule.match.packages;
|
|
583
|
+
}
|
|
584
|
+
if (rule.match.namePatterns) {
|
|
585
|
+
match.name_patterns = rule.match.namePatterns;
|
|
586
|
+
}
|
|
587
|
+
if (rule.match.findingType) {
|
|
588
|
+
match.finding_type = rule.match.findingType;
|
|
589
|
+
}
|
|
590
|
+
if (rule.match.severity !== void 0) {
|
|
591
|
+
match.severity = rule.match.severity;
|
|
592
|
+
}
|
|
593
|
+
if (rule.match.reasons) {
|
|
594
|
+
match.reasons = rule.match.reasons;
|
|
595
|
+
}
|
|
596
|
+
if (rule.match.licenseSpdx) {
|
|
597
|
+
match.license_spdx = rule.match.licenseSpdx;
|
|
598
|
+
}
|
|
599
|
+
if (rule.match.ecosystem) {
|
|
600
|
+
match.ecosystem = rule.match.ecosystem;
|
|
601
|
+
}
|
|
602
|
+
if (rule.match.options) {
|
|
603
|
+
match.options = rule.match.options;
|
|
604
|
+
}
|
|
605
|
+
const out = {
|
|
606
|
+
match,
|
|
607
|
+
action: rule.action
|
|
608
|
+
};
|
|
609
|
+
if (rule.reason) {
|
|
610
|
+
out.reason = rule.reason;
|
|
611
|
+
}
|
|
612
|
+
return out;
|
|
613
|
+
});
|
|
614
|
+
}
|
|
514
615
|
function serializePolicy(policy) {
|
|
515
616
|
const doc = {
|
|
516
617
|
version: 1,
|
|
@@ -534,6 +635,9 @@ function serializePolicy(policy) {
|
|
|
534
635
|
if (policy.connect && policy.connect.length > 0) {
|
|
535
636
|
doc.connect_redirects = serializeConnectRedirects(policy.connect);
|
|
536
637
|
}
|
|
638
|
+
if (policy.packageRules && policy.packageRules.length > 0) {
|
|
639
|
+
doc.package_rules = serializePackageRules(policy.packageRules);
|
|
640
|
+
}
|
|
537
641
|
return yaml.dump(doc, { lineWidth: -1 });
|
|
538
642
|
}
|
|
539
643
|
function systemPolicyYaml() {
|
|
@@ -596,4 +700,4 @@ export {
|
|
|
596
700
|
agentSandbox,
|
|
597
701
|
policies_exports
|
|
598
702
|
};
|
|
599
|
-
//# sourceMappingURL=chunk-
|
|
703
|
+
//# sourceMappingURL=chunk-GFPHTJLU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/policies/index.ts","../src/policies/schema.ts","../src/core/errors.ts","../src/policies/merge.ts","../src/policies/presets.ts","../src/policies/serialize.ts"],"sourcesContent":["export { PolicyDefinitionSchema, validatePolicy } from './schema.js';\nexport type { PolicyDefinition, FileRule, NetworkRule, CommandRule, EnvRule, DnsRedirect, ConnectRedirect } from './schema.js';\nexport { agentDefault, devSafe, ciStrict, agentSandbox } from './presets.js';\nexport { merge, mergePrepend } from './merge.js';\nexport { serializePolicy, systemPolicyYaml } from './serialize.js';\n","import { z, ZodError } from 'zod';\nimport { PolicyValidationError } from '../core/errors.js';\n\n// ─── Shared helpers ─────────────────────────────────────────\n\nconst stringOrArray = z.union([z.string(), z.array(z.string())]);\n\n// ─── File rules ─────────────────────────────────────────────\n\nexport const FileOpSchema = z.enum(['read', 'write', 'create', 'delete']);\n\nconst FileAllowRule = z\n .object({ allow: stringOrArray, ops: z.array(FileOpSchema).optional() })\n .strict();\n\nconst FileDenyRule = z\n .object({ deny: stringOrArray, ops: z.array(FileOpSchema).optional() })\n .strict();\n\nconst FileRedirectRule = z\n .object({\n redirect: stringOrArray,\n to: z.string(),\n ops: z.array(FileOpSchema).optional(),\n })\n .strict();\n\nconst FileAuditRule = z\n .object({ audit: stringOrArray, ops: z.array(FileOpSchema).optional() })\n .strict();\n\nconst FileSoftDeleteRule = z.object({ softDelete: stringOrArray }).strict();\n\nexport const FileRuleSchema = z.union([\n FileAllowRule,\n FileDenyRule,\n FileRedirectRule,\n FileAuditRule,\n FileSoftDeleteRule,\n]);\n\n// ─── Network rules ──────────────────────────────────────────\n\nconst NetworkAllowRule = z\n .object({\n allow: stringOrArray,\n ports: z.array(z.number().int().min(1).max(65535)).optional(),\n })\n .strict();\n\nconst NetworkDenyRule = z.object({ deny: stringOrArray }).strict();\n\nconst NetworkRedirectRule = z\n .object({ redirect: z.string(), to: z.string() })\n .strict();\n\nexport const NetworkRuleSchema = z.union([\n NetworkAllowRule,\n NetworkDenyRule,\n NetworkRedirectRule,\n]);\n\n// ─── Command rules ──────────────────────────────────────────\n\nconst CommandRedirectTarget = z.union([\n z.string(),\n z.object({ cmd: z.string(), args: z.array(z.string()) }).strict(),\n]);\n\nconst CommandAllowRule = z.object({ allow: stringOrArray }).strict();\n\nconst CommandDenyRule = z.object({ deny: stringOrArray }).strict();\n\nconst CommandRedirectRule = z\n .object({ redirect: stringOrArray, to: CommandRedirectTarget })\n .strict();\n\nexport const CommandRuleSchema = z.union([\n CommandAllowRule,\n CommandDenyRule,\n CommandRedirectRule,\n]);\n\n// ─── Env rules ──────────────────────────────────────────────\n\nexport const EnvRuleSchema = z\n .object({\n commands: z.array(z.string()),\n allow: z.array(z.string()).optional(),\n deny: z.array(z.string()).optional(),\n })\n .strict();\n\n// ─── DNS / Connect redirects ────────────────────────────────\n\nexport const DnsRedirectSchema = z\n .object({\n match: z.string(),\n resolveTo: z.string(),\n })\n .strict();\n\nexport const ConnectRedirectSchema = z\n .object({\n match: z.string(),\n redirectTo: z.string(),\n })\n .strict();\n\n// ─── Package rules ──────────────────────────────────────────\n\nconst LicenseSpdxMatchSchema = z\n .object({\n allow: z.array(z.string()).optional(),\n deny: z.array(z.string()).optional(),\n })\n .strict();\n\nconst PackageMatchSchema = z\n .object({\n packages: z.array(z.string()).optional(),\n namePatterns: z.array(z.string()).optional(),\n findingType: z.string().optional(),\n severity: stringOrArray.optional(),\n reasons: z.array(z.string()).optional(),\n licenseSpdx: LicenseSpdxMatchSchema.optional(),\n ecosystem: z.string().optional(),\n options: z.record(z.unknown()).optional(),\n })\n .strict();\n\nexport const PackageRuleSchema = z\n .object({\n match: PackageMatchSchema,\n action: z.enum(['allow', 'warn', 'approve', 'block']),\n reason: z.string().optional(),\n })\n .strict();\n\n// ─── PolicyDefinition ───────────────────────────────────────\n\nexport const PolicyDefinitionSchema = z\n .object({\n file: z.array(FileRuleSchema).optional(),\n network: z.array(NetworkRuleSchema).optional(),\n commands: z.array(CommandRuleSchema).optional(),\n env: z.array(EnvRuleSchema).optional(),\n dns: z.array(DnsRedirectSchema).optional(),\n connect: z.array(ConnectRedirectSchema).optional(),\n packageRules: z.array(PackageRuleSchema).optional(),\n })\n .strict();\n\n// ─── Inferred types ─────────────────────────────────────────\n\nexport type PolicyDefinition = z.infer<typeof PolicyDefinitionSchema>;\nexport type FileOp = z.infer<typeof FileOpSchema>;\nexport type FileRule = z.infer<typeof FileRuleSchema>;\nexport type NetworkRule = z.infer<typeof NetworkRuleSchema>;\nexport type CommandRule = z.infer<typeof CommandRuleSchema>;\nexport type EnvRule = z.infer<typeof EnvRuleSchema>;\nexport type DnsRedirect = z.infer<typeof DnsRedirectSchema>;\nexport type ConnectRedirect = z.infer<typeof ConnectRedirectSchema>;\nexport type PackageRule = z.infer<typeof PackageRuleSchema>;\n\n// ─── Validation ─────────────────────────────────────────────\n\nexport function validatePolicy(policy: unknown): PolicyDefinition {\n try {\n return PolicyDefinitionSchema.parse(policy);\n } catch (err) {\n if (err instanceof ZodError) {\n throw new PolicyValidationError({ issues: err.issues });\n }\n throw err;\n }\n}\n","import type { ZodIssue } from 'zod';\n\nexport class AgentSHError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AgentSHError';\n }\n}\n\nexport class PolicyValidationError extends AgentSHError {\n readonly issues: ZodIssue[];\n\n constructor({ issues }: { issues: ZodIssue[] }) {\n const summaries = issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join('; ');\n super(`Policy validation failed: ${summaries}`);\n this.name = 'PolicyValidationError';\n this.issues = issues;\n }\n}\n\nexport class MissingPeerDependencyError extends AgentSHError {\n readonly packageName: string;\n readonly versionRange: string;\n\n constructor({\n packageName,\n versionRange,\n }: {\n packageName: string;\n versionRange: string;\n }) {\n super(\n `${packageName} is required but not installed. Run: npm install ${packageName}@\"${versionRange}\"`,\n );\n this.name = 'MissingPeerDependencyError';\n this.packageName = packageName;\n this.versionRange = versionRange;\n }\n}\n\nexport class IncompatibleProviderVersionError extends AgentSHError {\n readonly installed: string;\n readonly required: string;\n readonly packageName: string;\n\n constructor({\n installed,\n required,\n packageName,\n }: {\n installed: string;\n required: string;\n packageName: string;\n }) {\n super(\n `${packageName} version ${installed} is not supported. @agentsh/secure-sandbox requires ${packageName} ${required}. Please upgrade: npm install ${packageName}@latest`,\n );\n this.name = 'IncompatibleProviderVersionError';\n this.installed = installed;\n this.required = required;\n this.packageName = packageName;\n }\n}\n\nexport class ProvisioningError extends AgentSHError {\n readonly phase: string;\n readonly command: string;\n readonly stderr: string;\n\n constructor({\n phase,\n command,\n stderr,\n }: {\n phase: string;\n command: string;\n stderr: string;\n }) {\n super(`Provisioning failed at phase: ${phase}`);\n this.name = 'ProvisioningError';\n this.phase = phase;\n this.command = command;\n this.stderr = stderr;\n }\n}\n\nexport class IntegrityError extends AgentSHError {\n readonly expected: string;\n readonly actual: string;\n\n constructor({\n expected,\n actual,\n message,\n }: {\n expected: string;\n actual: string;\n message?: string;\n }) {\n super(message ?? `Checksum mismatch: expected ${expected}, got ${actual}`);\n this.name = 'IntegrityError';\n this.expected = expected;\n this.actual = actual;\n }\n}\n\nexport class RuntimeError extends AgentSHError {\n readonly sessionId: string;\n readonly command: string;\n readonly stderr: string;\n\n constructor({\n sessionId,\n command,\n stderr,\n }: {\n sessionId: string;\n command: string;\n stderr: string;\n }) {\n super(`agentsh exec failed (session ${sessionId})`);\n this.name = 'RuntimeError';\n this.sessionId = sessionId;\n this.command = command;\n this.stderr = stderr;\n }\n}\n","import type { PolicyDefinition } from './schema.js';\nimport { validatePolicy } from './schema.js';\n\nconst CATEGORIES = ['file', 'network', 'commands', 'env', 'dns', 'connect', 'packageRules'] as const;\n\n/**\n * Merge policy overrides AFTER base rules for each category.\n * Since agentsh evaluates first-match-wins, appended rules only apply\n * to paths not already matched by base.\n */\nexport function merge(base: PolicyDefinition, ...overrides: Partial<PolicyDefinition>[]): PolicyDefinition {\n return validatePolicy(mergeInternal(base, overrides, 'append'));\n}\n\n/**\n * Merge policy overrides BEFORE base rules for each category,\n * making overrides take priority in first-match-wins evaluation.\n */\nexport function mergePrepend(base: PolicyDefinition, ...overrides: Partial<PolicyDefinition>[]): PolicyDefinition {\n return validatePolicy(mergeInternal(base, overrides, 'prepend'));\n}\n\nfunction mergeInternal(\n base: PolicyDefinition,\n overrides: Partial<PolicyDefinition>[],\n mode: 'append' | 'prepend',\n): PolicyDefinition {\n const result: any = { ...base };\n for (const override of overrides) {\n for (const key of CATEGORIES) {\n if (override[key] != null) {\n const baseRules = result[key] ?? [];\n result[key] = mode === 'append'\n ? [...baseRules, ...override[key]!]\n : [...override[key]!, ...baseRules];\n }\n }\n }\n return result;\n}\n","import type { PolicyDefinition } from './schema.js';\nimport { merge } from './merge.js';\n\n// ─── agentDefault ──────────────────────────────────────────\n\n/**\n * Comprehensive policy for AI coding agents. This is the DEFAULT policy\n * used when no policy is specified. Based on agentsh v0.13's agent-default\n * policy.\n */\nexport function agentDefault(\n extensions?: Partial<PolicyDefinition>,\n): PolicyDefinition {\n const base: PolicyDefinition = {\n file: [\n { allow: '/workspace/**', ops: ['read', 'write', 'create'] },\n // Git/version-control credentials\n { deny: ['/workspace/.git/config', '/workspace/.netrc'] },\n // Secrets and credentials\n { deny: ['**/.env', '**/.env.*', '**/credentials*', '**/*.pem', '**/*.key'] },\n { deny: ['~/.ssh/**', '/proc/*/environ'] },\n // Cloud provider credentials\n { deny: ['~/.aws/**', '~/.gcp/**', '~/.azure/**', '~/.config/gcloud/**'] },\n // Shell config injection (persistence)\n { deny: ['~/.bashrc', '~/.zshrc', '~/.profile', '~/.bash_profile'] },\n // Credential stores\n { deny: ['~/.gitconfig', '~/.netrc', '~/.curlrc', '~/.wgetrc'] },\n // PATH hijacking\n { deny: '~/.local/bin/**' },\n // Agent config files — allow reads (project context), deny writes (prompt injection persistence)\n { deny: ['**/.cursorrules', '**/CLAUDE.md', '**/copilot-instructions.md'], ops: ['write', 'create', 'delete'] },\n ],\n network: [\n {\n allow: [\n 'registry.npmjs.org',\n 'registry.yarnpkg.com',\n 'pypi.org',\n 'files.pythonhosted.org',\n 'crates.io',\n 'static.crates.io',\n 'index.crates.io',\n 'proxy.golang.org',\n 'sum.golang.org',\n 'github.com',\n 'raw.githubusercontent.com',\n ],\n ports: [443],\n },\n { deny: '*' },\n ],\n commands: [\n // Allow safe commands (order matters — first match wins)\n {\n allow: [\n 'bash', 'sh', 'echo', 'cat', 'head', 'tail', 'grep', 'find',\n 'ls', 'wc', 'sort', 'uniq', 'diff', 'pwd', 'date', 'which',\n 'whoami', 'id', 'uname', 'printf', 'test', 'true', 'false',\n 'mkdir', 'cp', 'mv', 'rm', 'touch', 'chmod', 'tr', 'cut',\n 'sed', 'awk', 'tee', 'xargs', 'basename', 'dirname', 'realpath',\n 'base64', 'md5sum', 'sha256sum', 'tar', 'gzip', 'gunzip',\n ],\n },\n // Allow dev tools\n {\n allow: [\n 'git', 'node', 'npm', 'npx', 'yarn', 'pnpm', 'bun',\n 'python', 'python3', 'pip', 'pip3',\n 'cargo', 'rustc', 'go', 'make', 'cmake',\n ],\n },\n // Deny dangerous commands\n { deny: ['env', 'printenv', 'sudo', 'su', 'doas'] },\n { deny: ['shutdown', 'reboot', 'halt', 'poweroff'] },\n { deny: ['nc', 'ncat', 'netcat', 'socat', 'telnet'] },\n { deny: ['git push --force', 'git reset --hard'] },\n {\n redirect: ['curl', 'wget'],\n to: { cmd: 'agentsh-fetch', args: ['--audit'] },\n },\n ],\n packageRules: [\n // Critical vulnerability = block\n {\n match: { findingType: 'vulnerability', severity: 'critical' },\n action: 'block',\n reason: 'Critical vulnerability — review before installing',\n },\n // Known malware = block\n {\n match: { findingType: 'malware' },\n action: 'block',\n reason: 'Known malware detected',\n },\n // Typosquat = block\n {\n match: { findingType: 'reputation', reasons: ['typosquat'] },\n action: 'block',\n reason: 'Package flagged as potential typosquat',\n },\n // Medium vulnerability = warn\n {\n match: { findingType: 'vulnerability', severity: 'medium' },\n action: 'warn',\n reason: 'Medium vulnerability — review before using',\n },\n // Copyleft licenses = block\n {\n match: {\n findingType: 'license',\n licenseSpdx: { deny: ['AGPL-3.0-only', 'SSPL-1.0'] },\n },\n action: 'block',\n reason: 'Copyleft license incompatible with proprietary code',\n },\n // Package too new = approve (requires human confirmation)\n {\n match: {\n findingType: 'reputation',\n reasons: ['package_too_new'],\n },\n action: 'approve',\n reason: 'Package published recently — requires approval',\n },\n ],\n };\n return extensions ? merge(base, extensions) : base;\n}\n\n// ─── devSafe ───────────────────────────────────────────────\n\n/**\n * Permissive defaults for local development. Not recommended for production.\n */\nexport function devSafe(\n extensions?: Partial<PolicyDefinition>,\n): PolicyDefinition {\n const base: PolicyDefinition = {\n file: [\n { allow: '/workspace/**', ops: ['read', 'write', 'create'] },\n { deny: ['**/.env', '**/.env.*', '**/credentials*', '**/*.pem', '**/*.key'] },\n { deny: ['~/.ssh/**', '/proc/*/environ'] },\n { deny: ['~/.aws/**', '~/.gcp/**', '~/.azure/**', '~/.config/gcloud/**'] },\n { deny: ['~/.bashrc', '~/.zshrc', '~/.profile', '~/.bash_profile'] },\n { deny: ['~/.gitconfig', '~/.netrc', '~/.curlrc', '~/.wgetrc'] },\n ],\n network: [\n {\n allow: ['registry.npmjs.org', 'registry.yarnpkg.com'],\n ports: [443],\n },\n ],\n commands: [{ deny: ['env', 'printenv', 'shutdown', 'reboot'] }],\n };\n return extensions ? merge(base, extensions) : base;\n}\n\n// ─── ciStrict ──────────────────────────────────────────────\n\n/**\n * Locked down for CI/CD runners.\n */\nexport function ciStrict(\n extensions?: Partial<PolicyDefinition>,\n): PolicyDefinition {\n const base: PolicyDefinition = {\n file: [\n { allow: '/workspace/**' },\n { deny: ['**/.env', '**/.env.*', '**/credentials*', '**/*.pem', '**/*.key'] },\n { deny: ['~/.aws/**', '~/.gcp/**', '~/.azure/**', '~/.config/gcloud/**'] },\n { deny: '/**' },\n ],\n network: [\n {\n allow: [\n 'registry.npmjs.org',\n 'registry.yarnpkg.com',\n 'pypi.org',\n 'files.pythonhosted.org',\n 'crates.io',\n 'static.crates.io',\n 'index.crates.io',\n 'proxy.golang.org',\n 'sum.golang.org',\n ],\n ports: [443],\n },\n { deny: '*' },\n ],\n commands: [\n { deny: ['env', 'printenv', 'shutdown', 'reboot', 'sudo'] },\n ],\n };\n return extensions ? merge(base, extensions) : base;\n}\n\n// ─── agentSandbox ──────────────────────────────────────────\n\n/**\n * Maximum restriction for untrusted code. Read-only workspace, no network.\n */\nexport function agentSandbox(\n extensions?: Partial<PolicyDefinition>,\n): PolicyDefinition {\n const base: PolicyDefinition = {\n file: [\n { allow: '/workspace/**', ops: ['read'] },\n { deny: '/**' },\n ],\n network: [{ deny: '*' }],\n commands: [\n { deny: ['env', 'printenv', 'sudo', 'su', 'shutdown', 'reboot'] },\n ],\n };\n return extensions ? merge(base, extensions) : base;\n}\n","import yaml from 'js-yaml';\nimport type {\n PolicyDefinition,\n FileRule,\n NetworkRule,\n CommandRule,\n EnvRule,\n DnsRedirect,\n ConnectRedirect,\n PackageRule,\n} from './schema.js';\n\n// ─── Helpers ────────────────────────────────────────────────\n\n/** Normalize a string-or-array value to always be an array. */\nfunction toArray(value: string | string[]): string[] {\n return Array.isArray(value) ? value : [value];\n}\n\n/** Detect the decision key from a rule object. */\ntype DecisionKey = 'allow' | 'deny' | 'redirect' | 'audit' | 'softDelete';\n\nconst FILE_DECISION_KEYS: DecisionKey[] = [\n 'allow',\n 'deny',\n 'redirect',\n 'audit',\n 'softDelete',\n];\n\nconst SIMPLE_DECISION_KEYS: DecisionKey[] = ['allow', 'deny', 'redirect'];\n\nfunction findDecision(\n rule: Record<string, unknown>,\n keys: DecisionKey[],\n): { key: DecisionKey; value: unknown } {\n for (const k of keys) {\n if (k in rule) {\n return { key: k, value: rule[k] };\n }\n }\n throw new Error(`No decision key found in rule: ${JSON.stringify(rule)}`);\n}\n\n/** Map softDelete → soft_delete for YAML output. */\nfunction yamlDecision(key: DecisionKey): string {\n return key === 'softDelete' ? 'soft_delete' : key;\n}\n\n// ─── File rules ─────────────────────────────────────────────\n\nfunction serializeFileRules(rules: FileRule[]): Record<string, unknown>[] {\n return rules.map((rule, i) => {\n const r = rule as Record<string, unknown>;\n const { key, value } = findDecision(r, FILE_DECISION_KEYS);\n const paths = toArray(value as string | string[]);\n\n const out: Record<string, unknown> = {\n name: `file-rule-${i}`,\n paths,\n };\n\n if ('ops' in r && r.ops) {\n out.operations = r.ops;\n }\n\n out.decision = yamlDecision(key);\n\n if (key === 'redirect' && 'to' in r) {\n out.redirect_to = r.to;\n }\n\n return out;\n });\n}\n\n// ─── Network rules ──────────────────────────────────────────\n\nfunction serializeNetworkRules(\n rules: NetworkRule[],\n): Record<string, unknown>[] {\n return rules.map((rule, i) => {\n const r = rule as Record<string, unknown>;\n const { key, value } = findDecision(r, SIMPLE_DECISION_KEYS);\n const domains = toArray(value as string | string[]);\n\n const out: Record<string, unknown> = {\n name: `network-rule-${i}`,\n domains,\n decision: key,\n };\n\n if ('ports' in r && r.ports) {\n out.ports = r.ports;\n }\n\n if (key === 'redirect' && 'to' in r) {\n out.redirect_to = r.to;\n }\n\n return out;\n });\n}\n\n// ─── Command rules ──────────────────────────────────────────\n\nfunction serializeCommandRules(\n rules: CommandRule[],\n): Record<string, unknown>[] {\n return rules.map((rule, i) => {\n const r = rule as Record<string, unknown>;\n const { key, value } = findDecision(r, SIMPLE_DECISION_KEYS);\n const commands = toArray(value as string | string[]);\n\n const out: Record<string, unknown> = {\n name: `command-rule-${i}`,\n commands,\n decision: key,\n };\n\n if (key === 'redirect' && 'to' in r) {\n const to = r.to;\n if (typeof to === 'string') {\n out.redirect_to = to;\n } else if (typeof to === 'object' && to !== null) {\n const target = to as { cmd: string; args: string[] };\n out.redirect_to = { command: target.cmd, args: target.args };\n }\n }\n\n return out;\n });\n}\n\n// ─── Env rules ──────────────────────────────────────────────\n\nfunction serializeEnvRules(rules: EnvRule[]): Record<string, unknown>[] {\n return rules.map((rule, i) => {\n const out: Record<string, unknown> = {\n name: `env-rule-${i}`,\n commands: rule.commands,\n };\n if (rule.allow) {\n out.allow = rule.allow;\n }\n if (rule.deny) {\n out.deny = rule.deny;\n }\n return out;\n });\n}\n\n// ─── DNS redirects ──────────────────────────────────────────\n\nfunction serializeDnsRedirects(\n redirects: DnsRedirect[],\n): Record<string, unknown>[] {\n return redirects.map((r) => ({\n match: r.match,\n resolve_to: r.resolveTo,\n }));\n}\n\n// ─── Connect redirects ──────────────────────────────────────\n\nfunction serializeConnectRedirects(\n redirects: ConnectRedirect[],\n): Record<string, unknown>[] {\n return redirects.map((r) => ({\n match: r.match,\n redirect_to: r.redirectTo,\n }));\n}\n\n// ─── Package rules ───────────────────────────────────────────\n\nfunction serializePackageRules(\n rules: PackageRule[],\n): Record<string, unknown>[] {\n return rules.map((rule) => {\n const match: Record<string, unknown> = {};\n\n if (rule.match.packages) {\n match.packages = rule.match.packages;\n }\n if (rule.match.namePatterns) {\n match.name_patterns = rule.match.namePatterns;\n }\n if (rule.match.findingType) {\n match.finding_type = rule.match.findingType;\n }\n if (rule.match.severity !== undefined) {\n match.severity = rule.match.severity;\n }\n if (rule.match.reasons) {\n match.reasons = rule.match.reasons;\n }\n if (rule.match.licenseSpdx) {\n match.license_spdx = rule.match.licenseSpdx;\n }\n if (rule.match.ecosystem) {\n match.ecosystem = rule.match.ecosystem;\n }\n if (rule.match.options) {\n match.options = rule.match.options;\n }\n\n const out: Record<string, unknown> = {\n match,\n action: rule.action,\n };\n\n if (rule.reason) {\n out.reason = rule.reason;\n }\n\n return out;\n });\n}\n\n// ─── Public API ─────────────────────────────────────────────\n\n/**\n * Converts a PolicyDefinition to agentsh YAML format.\n *\n * Omits empty categories from output.\n */\nexport function serializePolicy(policy: PolicyDefinition): string {\n const doc: Record<string, unknown> = {\n version: 1,\n name: 'secure-sandbox-policy',\n };\n\n if (policy.file && policy.file.length > 0) {\n doc.file_rules = serializeFileRules(policy.file);\n }\n\n if (policy.network && policy.network.length > 0) {\n doc.network_rules = serializeNetworkRules(policy.network);\n }\n\n if (policy.commands && policy.commands.length > 0) {\n doc.command_rules = serializeCommandRules(policy.commands);\n }\n\n if (policy.env && policy.env.length > 0) {\n doc.env_rules = serializeEnvRules(policy.env);\n }\n\n if (policy.dns && policy.dns.length > 0) {\n doc.dns_redirects = serializeDnsRedirects(policy.dns);\n }\n\n if (policy.connect && policy.connect.length > 0) {\n doc.connect_redirects = serializeConnectRedirects(policy.connect);\n }\n\n if (policy.packageRules && policy.packageRules.length > 0) {\n doc.package_rules = serializePackageRules(policy.packageRules);\n }\n\n return yaml.dump(doc, { lineWidth: -1 });\n}\n\n/**\n * Returns the fixed system policy YAML from the spec (Section 9.4).\n *\n * This static set of rules protects agentsh's own configuration, binaries,\n * and processes from tampering by the agent. These rules are written to a\n * separate system policy directory evaluated before user policy.\n */\nexport function systemPolicyYaml(): string {\n const doc = {\n version: 1,\n name: '_system-protection',\n file_rules: [\n {\n name: '_system-protect-config',\n paths: ['/etc/agentsh/**'],\n operations: ['write', 'create', 'delete'],\n decision: 'deny',\n message: 'Policy files are immutable during agent execution',\n },\n {\n name: '_system-protect-binary',\n paths: ['/usr/local/bin/agentsh*', '/usr/bin/agentsh*'],\n operations: ['write', 'create', 'delete'],\n decision: 'deny',\n message: 'agentsh binary is immutable during agent execution',\n },\n {\n name: '_system-protect-shim-files',\n paths: ['/usr/bin/agentsh-shell-shim', '/bin/bash', '/bin/sh'],\n operations: ['write', 'create', 'delete'],\n decision: 'deny',\n message: 'Shell and shim binaries are immutable during agent execution',\n },\n ],\n command_rules: [\n {\n name: '_system-protect-process',\n commands: ['kill', 'killall', 'pkill'],\n args_match: ['agentsh'],\n decision: 'deny',\n message: 'Cannot terminate agentsh processes',\n },\n ],\n };\n\n return yaml.dump(doc, { lineWidth: -1 });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import {
|
|
2
|
+
blaxel
|
|
3
|
+
} from "./chunk-UYEAO27E.js";
|
|
4
|
+
import {
|
|
5
|
+
cloudflare
|
|
6
|
+
} from "./chunk-LMN3KM53.js";
|
|
7
|
+
import {
|
|
8
|
+
daytona
|
|
9
|
+
} from "./chunk-45FKFVMC.js";
|
|
10
|
+
import {
|
|
11
|
+
e2b
|
|
12
|
+
} from "./chunk-2P37YGN7.js";
|
|
13
|
+
import {
|
|
14
|
+
envPrefix,
|
|
15
|
+
shellEscape
|
|
16
|
+
} from "./chunk-OANLKSOD.js";
|
|
17
|
+
import {
|
|
18
|
+
vercel
|
|
19
|
+
} from "./chunk-JY5ERJTX.js";
|
|
20
|
+
import {
|
|
21
|
+
__export
|
|
22
|
+
} from "./chunk-PZ5AY32C.js";
|
|
23
|
+
|
|
24
|
+
// src/adapters/index.ts
|
|
25
|
+
var adapters_exports = {};
|
|
26
|
+
__export(adapters_exports, {
|
|
27
|
+
blaxel: () => blaxel,
|
|
28
|
+
cloudflare: () => cloudflare,
|
|
29
|
+
daytona: () => daytona,
|
|
30
|
+
e2b: () => e2b,
|
|
31
|
+
sprites: () => sprites,
|
|
32
|
+
spritesDefaults: () => spritesDefaults,
|
|
33
|
+
vercel: () => vercel
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// src/adapters/sprites.ts
|
|
37
|
+
function sprites(sprite) {
|
|
38
|
+
function sh(cmd, opts) {
|
|
39
|
+
if (opts) return sprite.execFile("sh", ["-c", cmd], opts);
|
|
40
|
+
return sprite.execFile("sh", ["-c", cmd]);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
async exec(cmd, args, opts) {
|
|
44
|
+
const command = `${envPrefix(opts?.env)}${shellEscape(cmd, args)}`;
|
|
45
|
+
const fullCmd = opts?.sudo ? `sudo ${command}` : command;
|
|
46
|
+
try {
|
|
47
|
+
if (opts?.detached) {
|
|
48
|
+
sh(`nohup ${fullCmd} > /dev/null 2>&1 &`).catch(() => {
|
|
49
|
+
});
|
|
50
|
+
return { stdout: "", stderr: "", exitCode: 0 };
|
|
51
|
+
}
|
|
52
|
+
const result = await sh(fullCmd, { cwd: opts?.cwd });
|
|
53
|
+
return {
|
|
54
|
+
stdout: result.stdout ?? "",
|
|
55
|
+
stderr: result.stderr ?? "",
|
|
56
|
+
exitCode: 0
|
|
57
|
+
};
|
|
58
|
+
} catch (err) {
|
|
59
|
+
return {
|
|
60
|
+
stdout: err.stdout ?? "",
|
|
61
|
+
stderr: err.stderr ?? err.message ?? "",
|
|
62
|
+
exitCode: err.exitCode ?? err.code ?? 1
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
async writeFile(path, content) {
|
|
67
|
+
const buf = Buffer.isBuffer(content) ? content : Buffer.from(content);
|
|
68
|
+
const b64 = buf.toString("base64");
|
|
69
|
+
try {
|
|
70
|
+
await sh(`printf '%s' '${b64}' | base64 -d > '${path.replace(/'/g, "'\\''")}'`);
|
|
71
|
+
} catch (err) {
|
|
72
|
+
throw new Error(`writeFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ""}`);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
async readFile(path) {
|
|
76
|
+
try {
|
|
77
|
+
const result = await sh(`cat '${path.replace(/'/g, "'\\''")}'`);
|
|
78
|
+
return result.stdout ?? "";
|
|
79
|
+
} catch (err) {
|
|
80
|
+
throw new Error(`readFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ""}`);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
async stop() {
|
|
84
|
+
await sprite.delete();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function spritesDefaults() {
|
|
89
|
+
const serverConfig = {
|
|
90
|
+
grpc: { addr: "0.0.0.0:50051" },
|
|
91
|
+
logging: { level: "info", format: "json", output: "stdout" },
|
|
92
|
+
sessions: {
|
|
93
|
+
defaultTimeout: "30m",
|
|
94
|
+
idleTimeout: "10m",
|
|
95
|
+
cleanupInterval: "5m"
|
|
96
|
+
},
|
|
97
|
+
audit: { enabled: true, sqlitePath: "/var/lib/agentsh/audit.db" },
|
|
98
|
+
sandboxLimits: { maxMemoryMb: 512, maxCpuPercent: 90, maxProcesses: 100 },
|
|
99
|
+
fuse: { deferred: true },
|
|
100
|
+
networkIntercept: { interceptMode: "tproxy", proxyListenAddr: "127.0.0.1:8888" },
|
|
101
|
+
seccompDetails: {
|
|
102
|
+
execve: true,
|
|
103
|
+
fileMonitor: { enabled: true, enforceWithoutFuse: true }
|
|
104
|
+
},
|
|
105
|
+
cgroups: { enabled: true },
|
|
106
|
+
unixSockets: { enabled: true },
|
|
107
|
+
proxy: { mode: "mitm", port: 8080 },
|
|
108
|
+
dlp: {
|
|
109
|
+
mode: "redact",
|
|
110
|
+
patterns: { credit_card: true, ssn: true, api_key: true }
|
|
111
|
+
},
|
|
112
|
+
approvals: { enabled: false },
|
|
113
|
+
metrics: { enabled: true, path: "/metrics" },
|
|
114
|
+
health: { path: "/healthz", readinessPath: "/readyz" },
|
|
115
|
+
development: { disableAuth: false, verboseErrors: false }
|
|
116
|
+
};
|
|
117
|
+
return {
|
|
118
|
+
installStrategy: "preinstalled",
|
|
119
|
+
realPaths: true,
|
|
120
|
+
serverConfig
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export {
|
|
125
|
+
sprites,
|
|
126
|
+
spritesDefaults,
|
|
127
|
+
adapters_exports
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=chunk-KXCR2ZML.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/index.ts","../src/adapters/sprites.ts"],"sourcesContent":["export { vercel } from './vercel.js';\nexport { e2b } from './e2b.js';\nexport { daytona } from './daytona.js';\nexport { cloudflare } from './cloudflare.js';\nexport { blaxel } from './blaxel.js';\nexport { sprites, spritesDefaults } from './sprites.js';\n","import type { SandboxAdapter, SecureConfig } from '../core/types.js';\nimport type { ServerConfigOpts } from '../core/config.js';\nimport { shellEscape, envPrefix } from '../core/shell.js';\n\nexport function sprites(sprite: any): SandboxAdapter {\n // sprite.exec() does a naive split(/\\s+/) — no shell parsing.\n // Use sprite.execFile('sh', ['-c', cmd]) for shell features (env, pipes, quotes).\n function sh(cmd: string, opts?: Record<string, unknown>) {\n if (opts) return sprite.execFile('sh', ['-c', cmd], opts);\n return sprite.execFile('sh', ['-c', cmd]);\n }\n\n return {\n async exec(cmd, args, opts) {\n const command = `${envPrefix(opts?.env)}${shellEscape(cmd, args)}`;\n const fullCmd = opts?.sudo ? `sudo ${command}` : command;\n\n try {\n if (opts?.detached) {\n sh(`nohup ${fullCmd} > /dev/null 2>&1 &`).catch(() => {});\n return { stdout: '', stderr: '', exitCode: 0 };\n }\n\n const result = await sh(fullCmd, { cwd: opts?.cwd });\n return {\n stdout: result.stdout ?? '',\n stderr: result.stderr ?? '',\n exitCode: 0,\n };\n } catch (err: any) {\n return {\n stdout: err.stdout ?? '',\n stderr: err.stderr ?? err.message ?? '',\n exitCode: err.exitCode ?? err.code ?? 1,\n };\n }\n },\n async writeFile(path, content) {\n const buf = Buffer.isBuffer(content) ? content : Buffer.from(content);\n const b64 = buf.toString('base64');\n try {\n await sh(`printf '%s' '${b64}' | base64 -d > '${path.replace(/'/g, \"'\\\\''\")}'`);\n } catch (err: any) {\n throw new Error(`writeFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ''}`);\n }\n },\n async readFile(path) {\n try {\n const result = await sh(`cat '${path.replace(/'/g, \"'\\\\''\")}'`);\n return result.stdout ?? '';\n } catch (err: any) {\n throw new Error(`readFile failed (exit ${err.exitCode ?? err.code ?? 1}): ${err.stderr ?? err.message ?? ''}`);\n }\n },\n async stop() {\n await sprite.delete();\n },\n };\n}\n\n/**\n * Returns Sprites-optimized defaults for SecureConfig.\n * Spread into your secureSandbox() call:\n *\n * secureSandbox(sprites(s), { ...spritesDefaults(), ...yourOverrides })\n */\nexport function spritesDefaults(): Partial<SecureConfig> {\n const serverConfig: Omit<ServerConfigOpts, 'watchtower' | 'realPaths' | 'threatFeeds' | 'packageChecks'> = {\n grpc: { addr: '0.0.0.0:50051' },\n logging: { level: 'info', format: 'json', output: 'stdout' },\n sessions: {\n defaultTimeout: '30m',\n idleTimeout: '10m',\n cleanupInterval: '5m',\n },\n audit: { enabled: true, sqlitePath: '/var/lib/agentsh/audit.db' },\n sandboxLimits: { maxMemoryMb: 512, maxCpuPercent: 90, maxProcesses: 100 },\n fuse: { deferred: true },\n networkIntercept: { interceptMode: 'tproxy', proxyListenAddr: '127.0.0.1:8888' },\n seccompDetails: {\n execve: true,\n fileMonitor: { enabled: true, enforceWithoutFuse: true },\n },\n cgroups: { enabled: true },\n unixSockets: { enabled: true },\n proxy: { mode: 'mitm', port: 8080 },\n dlp: {\n mode: 'redact',\n patterns: { credit_card: true, ssn: true, api_key: true },\n },\n approvals: { enabled: false },\n metrics: { enabled: true, path: '/metrics' },\n health: { path: '/healthz', readinessPath: '/readyz' },\n development: { disableAuth: false, verboseErrors: false },\n };\n\n return {\n installStrategy: 'preinstalled',\n realPaths: true,\n serverConfig,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { vercel } from './adapters/vercel.js';
|
|
2
|
+
import { e2b } from './adapters/e2b.js';
|
|
3
|
+
import { daytona } from './adapters/daytona.js';
|
|
4
|
+
import { cloudflare } from './adapters/cloudflare.js';
|
|
5
|
+
import { blaxel } from './adapters/blaxel.js';
|
|
6
|
+
import { S as SandboxAdapter, a as SecureConfig } from './types-S_fIEFHD.js';
|
|
7
|
+
|
|
8
|
+
declare function sprites(sprite: any): SandboxAdapter;
|
|
9
|
+
/**
|
|
10
|
+
* Returns Sprites-optimized defaults for SecureConfig.
|
|
11
|
+
* Spread into your secureSandbox() call:
|
|
12
|
+
*
|
|
13
|
+
* secureSandbox(sprites(s), { ...spritesDefaults(), ...yourOverrides })
|
|
14
|
+
*/
|
|
15
|
+
declare function spritesDefaults(): Partial<SecureConfig>;
|
|
16
|
+
|
|
17
|
+
declare const index_blaxel: typeof blaxel;
|
|
18
|
+
declare const index_cloudflare: typeof cloudflare;
|
|
19
|
+
declare const index_daytona: typeof daytona;
|
|
20
|
+
declare const index_e2b: typeof e2b;
|
|
21
|
+
declare const index_sprites: typeof sprites;
|
|
22
|
+
declare const index_spritesDefaults: typeof spritesDefaults;
|
|
23
|
+
declare const index_vercel: typeof vercel;
|
|
24
|
+
declare namespace index {
|
|
25
|
+
export { index_blaxel as blaxel, index_cloudflare as cloudflare, index_daytona as daytona, index_e2b as e2b, index_sprites as sprites, index_spritesDefaults as spritesDefaults, index_vercel as vercel };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { spritesDefaults as a, index as i, sprites as s };
|
|
@@ -283,6 +283,85 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
283
283
|
match: string;
|
|
284
284
|
redirectTo: string;
|
|
285
285
|
}>, "many">>;
|
|
286
|
+
packageRules: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
287
|
+
match: z.ZodObject<{
|
|
288
|
+
packages: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
289
|
+
namePatterns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
290
|
+
findingType: z.ZodOptional<z.ZodString>;
|
|
291
|
+
severity: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
|
|
292
|
+
reasons: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
293
|
+
licenseSpdx: z.ZodOptional<z.ZodObject<{
|
|
294
|
+
allow: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
295
|
+
deny: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
296
|
+
}, "strict", z.ZodTypeAny, {
|
|
297
|
+
deny?: string[] | undefined;
|
|
298
|
+
allow?: string[] | undefined;
|
|
299
|
+
}, {
|
|
300
|
+
deny?: string[] | undefined;
|
|
301
|
+
allow?: string[] | undefined;
|
|
302
|
+
}>>;
|
|
303
|
+
ecosystem: z.ZodOptional<z.ZodString>;
|
|
304
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
305
|
+
}, "strict", z.ZodTypeAny, {
|
|
306
|
+
options?: Record<string, unknown> | undefined;
|
|
307
|
+
packages?: string[] | undefined;
|
|
308
|
+
namePatterns?: string[] | undefined;
|
|
309
|
+
findingType?: string | undefined;
|
|
310
|
+
severity?: string | string[] | undefined;
|
|
311
|
+
reasons?: string[] | undefined;
|
|
312
|
+
licenseSpdx?: {
|
|
313
|
+
deny?: string[] | undefined;
|
|
314
|
+
allow?: string[] | undefined;
|
|
315
|
+
} | undefined;
|
|
316
|
+
ecosystem?: string | undefined;
|
|
317
|
+
}, {
|
|
318
|
+
options?: Record<string, unknown> | undefined;
|
|
319
|
+
packages?: string[] | undefined;
|
|
320
|
+
namePatterns?: string[] | undefined;
|
|
321
|
+
findingType?: string | undefined;
|
|
322
|
+
severity?: string | string[] | undefined;
|
|
323
|
+
reasons?: string[] | undefined;
|
|
324
|
+
licenseSpdx?: {
|
|
325
|
+
deny?: string[] | undefined;
|
|
326
|
+
allow?: string[] | undefined;
|
|
327
|
+
} | undefined;
|
|
328
|
+
ecosystem?: string | undefined;
|
|
329
|
+
}>;
|
|
330
|
+
action: z.ZodEnum<["allow", "warn", "approve", "block"]>;
|
|
331
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
332
|
+
}, "strict", z.ZodTypeAny, {
|
|
333
|
+
match: {
|
|
334
|
+
options?: Record<string, unknown> | undefined;
|
|
335
|
+
packages?: string[] | undefined;
|
|
336
|
+
namePatterns?: string[] | undefined;
|
|
337
|
+
findingType?: string | undefined;
|
|
338
|
+
severity?: string | string[] | undefined;
|
|
339
|
+
reasons?: string[] | undefined;
|
|
340
|
+
licenseSpdx?: {
|
|
341
|
+
deny?: string[] | undefined;
|
|
342
|
+
allow?: string[] | undefined;
|
|
343
|
+
} | undefined;
|
|
344
|
+
ecosystem?: string | undefined;
|
|
345
|
+
};
|
|
346
|
+
action: "warn" | "allow" | "approve" | "block";
|
|
347
|
+
reason?: string | undefined;
|
|
348
|
+
}, {
|
|
349
|
+
match: {
|
|
350
|
+
options?: Record<string, unknown> | undefined;
|
|
351
|
+
packages?: string[] | undefined;
|
|
352
|
+
namePatterns?: string[] | undefined;
|
|
353
|
+
findingType?: string | undefined;
|
|
354
|
+
severity?: string | string[] | undefined;
|
|
355
|
+
reasons?: string[] | undefined;
|
|
356
|
+
licenseSpdx?: {
|
|
357
|
+
deny?: string[] | undefined;
|
|
358
|
+
allow?: string[] | undefined;
|
|
359
|
+
} | undefined;
|
|
360
|
+
ecosystem?: string | undefined;
|
|
361
|
+
};
|
|
362
|
+
action: "warn" | "allow" | "approve" | "block";
|
|
363
|
+
reason?: string | undefined;
|
|
364
|
+
}>, "many">>;
|
|
286
365
|
}, "strict", z.ZodTypeAny, {
|
|
287
366
|
commands?: ({
|
|
288
367
|
allow: string | string[];
|
|
@@ -333,6 +412,23 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
333
412
|
match: string;
|
|
334
413
|
redirectTo: string;
|
|
335
414
|
}[] | undefined;
|
|
415
|
+
packageRules?: {
|
|
416
|
+
match: {
|
|
417
|
+
options?: Record<string, unknown> | undefined;
|
|
418
|
+
packages?: string[] | undefined;
|
|
419
|
+
namePatterns?: string[] | undefined;
|
|
420
|
+
findingType?: string | undefined;
|
|
421
|
+
severity?: string | string[] | undefined;
|
|
422
|
+
reasons?: string[] | undefined;
|
|
423
|
+
licenseSpdx?: {
|
|
424
|
+
deny?: string[] | undefined;
|
|
425
|
+
allow?: string[] | undefined;
|
|
426
|
+
} | undefined;
|
|
427
|
+
ecosystem?: string | undefined;
|
|
428
|
+
};
|
|
429
|
+
action: "warn" | "allow" | "approve" | "block";
|
|
430
|
+
reason?: string | undefined;
|
|
431
|
+
}[] | undefined;
|
|
336
432
|
}, {
|
|
337
433
|
commands?: ({
|
|
338
434
|
allow: string | string[];
|
|
@@ -383,6 +479,23 @@ declare const PolicyDefinitionSchema: z.ZodObject<{
|
|
|
383
479
|
match: string;
|
|
384
480
|
redirectTo: string;
|
|
385
481
|
}[] | undefined;
|
|
482
|
+
packageRules?: {
|
|
483
|
+
match: {
|
|
484
|
+
options?: Record<string, unknown> | undefined;
|
|
485
|
+
packages?: string[] | undefined;
|
|
486
|
+
namePatterns?: string[] | undefined;
|
|
487
|
+
findingType?: string | undefined;
|
|
488
|
+
severity?: string | string[] | undefined;
|
|
489
|
+
reasons?: string[] | undefined;
|
|
490
|
+
licenseSpdx?: {
|
|
491
|
+
deny?: string[] | undefined;
|
|
492
|
+
allow?: string[] | undefined;
|
|
493
|
+
} | undefined;
|
|
494
|
+
ecosystem?: string | undefined;
|
|
495
|
+
};
|
|
496
|
+
action: "warn" | "allow" | "approve" | "block";
|
|
497
|
+
reason?: string | undefined;
|
|
498
|
+
}[] | undefined;
|
|
386
499
|
}>;
|
|
387
500
|
type PolicyDefinition = z.infer<typeof PolicyDefinitionSchema>;
|
|
388
501
|
type FileRule = z.infer<typeof FileRuleSchema>;
|