ai-evaluate 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-test.log +51 -0
  3. package/README.md +420 -0
  4. package/coverage/base.css +224 -0
  5. package/coverage/block-navigation.js +87 -0
  6. package/coverage/coverage-final.json +4 -0
  7. package/coverage/evaluate.ts.html +574 -0
  8. package/coverage/favicon.png +0 -0
  9. package/coverage/index.html +146 -0
  10. package/coverage/index.ts.html +145 -0
  11. package/coverage/prettify.css +1 -0
  12. package/coverage/prettify.js +2 -0
  13. package/coverage/sort-arrow-sprite.png +0 -0
  14. package/coverage/sorter.js +210 -0
  15. package/coverage/worker-template.ts.html +1948 -0
  16. package/dist/evaluate.d.ts +62 -0
  17. package/dist/evaluate.d.ts.map +1 -0
  18. package/dist/evaluate.js +188 -0
  19. package/dist/evaluate.js.map +1 -0
  20. package/dist/index.d.ts +12 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +11 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/types.d.ts +165 -0
  25. package/dist/types.d.ts.map +1 -0
  26. package/dist/types.js +5 -0
  27. package/dist/types.js.map +1 -0
  28. package/dist/worker-template.d.ts +40 -0
  29. package/dist/worker-template.d.ts.map +1 -0
  30. package/dist/worker-template.js +3628 -0
  31. package/dist/worker-template.js.map +1 -0
  32. package/package.json +46 -0
  33. package/src/evaluate.ts +217 -0
  34. package/src/index.ts +21 -0
  35. package/src/types.ts +174 -0
  36. package/src/worker-template.ts +3677 -0
  37. package/test/evaluate-extended.test.ts +469 -0
  38. package/test/evaluate.test.ts +253 -0
  39. package/test/index.test.ts +95 -0
  40. package/test/worker-template.test.ts +430 -0
  41. package/tsconfig.json +22 -0
  42. package/vitest.config.ts +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-template.js","sourceRoot":"","sources":["../src/worker-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,SAAoB,EAAE;IAC7C,oDAAoD;IACpD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,SAAoB,EAAE;IAClD,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,SAAS,CAAA;IACjC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAA;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAA;IAElD,OAAO;;;;;;SAMA,EAAE;mBACQ,YAAY;qBACV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "ai-evaluate",
3
+ "version": "0.1.0",
4
+ "description": "Secure code execution in sandboxed environments",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.json",
16
+ "dev": "tsc -p tsconfig.json --watch",
17
+ "test": "vitest",
18
+ "typecheck": "tsc --noEmit",
19
+ "lint": "eslint .",
20
+ "clean": "rm -rf dist"
21
+ },
22
+ "dependencies": {
23
+ "ai-functions": "workspace:*",
24
+ "ai-tests": "workspace:*",
25
+ "capnweb": "^0.2.0",
26
+ "rpc.do": "^0.1.0"
27
+ },
28
+ "devDependencies": {
29
+ "@vitest/coverage-v8": "^2.1.0",
30
+ "vitest": "^2.1.0"
31
+ },
32
+ "optionalDependencies": {
33
+ "esbuild": "^0.24.0",
34
+ "miniflare": "^3.20241106.0"
35
+ },
36
+ "keywords": [
37
+ "ai",
38
+ "sandbox",
39
+ "evaluate",
40
+ "cloudflare",
41
+ "workers",
42
+ "miniflare",
43
+ "primitives"
44
+ ],
45
+ "license": "MIT"
46
+ }
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Evaluate code in a sandboxed environment
3
+ *
4
+ * Uses Cloudflare worker_loaders in production,
5
+ * Miniflare in development/Node.
6
+ *
7
+ * Requires ai-tests service binding (TEST) for assertions and test running.
8
+ */
9
+
10
+ import type {
11
+ EvaluateOptions,
12
+ EvaluateResult,
13
+ WorkerLoader,
14
+ SandboxEnv
15
+ } from './types.js'
16
+ import { generateWorkerCode, generateDevWorkerCode } from './worker-template.js'
17
+
18
+ /**
19
+ * Check if code contains JSX syntax that needs transformation
20
+ */
21
+ function containsJSX(code: string): boolean {
22
+ if (!code) return false
23
+ // Look for JSX patterns
24
+ const jsxPattern = /<[A-Z][a-zA-Z0-9]*[\s/>]|<[a-z][a-z0-9-]*[\s/>]|<>|<\/>/
25
+ const jsxReturnPattern = /return\s*\(\s*<|return\s+<[A-Za-z]/
26
+ return jsxPattern.test(code) || jsxReturnPattern.test(code)
27
+ }
28
+
29
+ /**
30
+ * Transform JSX in code using esbuild
31
+ */
32
+ async function transformJSX(code: string): Promise<string> {
33
+ if (!code || !containsJSX(code)) return code
34
+
35
+ try {
36
+ const { transform } = await import('esbuild')
37
+ const result = await transform(code, {
38
+ loader: 'tsx',
39
+ jsxFactory: 'h',
40
+ jsxFragment: 'Fragment',
41
+ target: 'esnext',
42
+ format: 'esm',
43
+ })
44
+ return result.code
45
+ } catch (error) {
46
+ // If transform fails, return original code and let sandbox handle the error
47
+ console.error('JSX transform failed:', error)
48
+ return code
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Evaluate code in a sandboxed worker
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import { evaluate } from 'ai-sandbox'
58
+ *
59
+ * // Run a simple script
60
+ * const result = await evaluate({
61
+ * script: 'return 1 + 1'
62
+ * })
63
+ * // { success: true, value: 2, logs: [], duration: ... }
64
+ *
65
+ * // With a module and tests
66
+ * const result = await evaluate({
67
+ * module: `
68
+ * exports.add = (a, b) => a + b;
69
+ * exports.multiply = (a, b) => a * b;
70
+ * `,
71
+ * tests: `
72
+ * describe('math', () => {
73
+ * it('adds numbers', () => {
74
+ * expect(add(2, 3)).toBe(5);
75
+ * });
76
+ * it('multiplies numbers', () => {
77
+ * expect(multiply(2, 3)).toBe(6);
78
+ * });
79
+ * });
80
+ * `,
81
+ * script: 'return add(10, 20)'
82
+ * })
83
+ * ```
84
+ */
85
+ export async function evaluate(
86
+ options: EvaluateOptions,
87
+ env?: SandboxEnv
88
+ ): Promise<EvaluateResult> {
89
+ const start = Date.now()
90
+
91
+ try {
92
+ // Transform JSX in module, tests, and script before evaluation
93
+ const transformedOptions: EvaluateOptions = {
94
+ ...options,
95
+ module: options.module ? await transformJSX(options.module) : options.module,
96
+ tests: options.tests ? await transformJSX(options.tests) : options.tests,
97
+ script: options.script ? await transformJSX(options.script) : options.script,
98
+ }
99
+
100
+ // Use worker_loaders if available (Cloudflare Workers)
101
+ if (env?.LOADER && env?.TEST) {
102
+ return await evaluateWithWorkerLoader(transformedOptions, env.LOADER, env.TEST, start)
103
+ }
104
+
105
+ // Fall back to Miniflare with local TestService (Node.js)
106
+ return await evaluateWithMiniflare(transformedOptions, start)
107
+ } catch (error) {
108
+ return {
109
+ success: false,
110
+ logs: [],
111
+ error: error instanceof Error ? error.message : String(error),
112
+ duration: Date.now() - start
113
+ }
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Evaluate using Cloudflare worker_loaders binding
119
+ */
120
+ async function evaluateWithWorkerLoader(
121
+ options: EvaluateOptions,
122
+ loader: WorkerLoader,
123
+ testService: unknown,
124
+ start: number
125
+ ): Promise<EvaluateResult> {
126
+ const workerCode = generateWorkerCode({
127
+ module: options.module,
128
+ tests: options.tests,
129
+ script: options.script,
130
+ sdk: options.sdk,
131
+ imports: options.imports
132
+ })
133
+ const id = `sandbox-${Date.now()}-${Math.random().toString(36).slice(2)}`
134
+
135
+ const worker = loader.get(id, async () => ({
136
+ mainModule: 'worker.js',
137
+ modules: {
138
+ 'worker.js': workerCode
139
+ },
140
+ compatibilityDate: '2024-01-01',
141
+ // Block network access only if fetch: null
142
+ globalOutbound: options.fetch === null ? null : undefined,
143
+ bindings: {
144
+ TEST: testService
145
+ }
146
+ }))
147
+
148
+ const response = await worker.fetch(new Request('http://sandbox/execute'))
149
+ const result = await response.json() as EvaluateResult
150
+
151
+ return {
152
+ ...result,
153
+ duration: Date.now() - start
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Evaluate using Miniflare (for Node.js/development)
159
+ *
160
+ * For local dev, we use generateDevWorkerCode which bundles the test
161
+ * framework directly. In production, the sandbox worker uses RPC to
162
+ * a deployed ai-tests worker.
163
+ */
164
+ async function evaluateWithMiniflare(
165
+ options: EvaluateOptions,
166
+ start: number
167
+ ): Promise<EvaluateResult> {
168
+ // Dynamic import to avoid bundling in production
169
+ const { Miniflare } = await import('miniflare')
170
+
171
+ const workerCode = generateDevWorkerCode({
172
+ module: options.module,
173
+ tests: options.tests,
174
+ script: options.script,
175
+ sdk: options.sdk,
176
+ imports: options.imports
177
+ })
178
+
179
+ const mf = new Miniflare({
180
+ modules: true,
181
+ script: workerCode,
182
+ compatibilityDate: '2024-01-01'
183
+ })
184
+
185
+ try {
186
+ const response = await mf.dispatchFetch('http://sandbox/execute')
187
+ const result = await response.json() as EvaluateResult
188
+
189
+ return {
190
+ ...result,
191
+ duration: Date.now() - start
192
+ }
193
+ } finally {
194
+ await mf.dispose()
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Create an evaluate function bound to a specific environment
200
+ *
201
+ * Useful for Cloudflare Workers where env is passed to fetch handler.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * // In a Cloudflare Worker
206
+ * export default {
207
+ * async fetch(request, env) {
208
+ * const sandbox = createEvaluator(env)
209
+ * const result = await sandbox({ script: '1 + 1' })
210
+ * return Response.json(result)
211
+ * }
212
+ * }
213
+ * ```
214
+ */
215
+ export function createEvaluator(env: SandboxEnv) {
216
+ return (options: EvaluateOptions) => evaluate(options, env)
217
+ }
package/src/index.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ai-sandbox - Secure code execution in sandboxed environments
3
+ *
4
+ * Provides evaluate() for running untrusted code safely using:
5
+ * - Cloudflare worker_loaders in production
6
+ * - Miniflare in development/Node.js
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+
11
+ export { evaluate, createEvaluator } from './evaluate.js'
12
+
13
+ export type {
14
+ EvaluateOptions,
15
+ EvaluateResult,
16
+ LogEntry,
17
+ TestResults,
18
+ TestResult,
19
+ SandboxEnv,
20
+ SDKConfig
21
+ } from './types.js'
package/src/types.ts ADDED
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Types for ai-sandbox
3
+ */
4
+
5
+ /**
6
+ * SDK configuration for the sandbox environment
7
+ */
8
+ export interface SDKConfig {
9
+ /** Execution context: local (in-memory) or remote (RPC) */
10
+ context?: 'local' | 'remote'
11
+ /** RPC endpoint URL for all services (default: https://rpc.do) */
12
+ rpcUrl?: string
13
+ /** Database RPC URL (default: https://db.do/rpc) */
14
+ dbUrl?: string
15
+ /** AI RPC URL (default: https://ai.do/rpc) */
16
+ aiUrl?: string
17
+ /** Authentication token */
18
+ token?: string
19
+ /** Default namespace for database operations */
20
+ ns?: string
21
+ /** Cloudflare AI Gateway URL (e.g., https://gateway.ai.cloudflare.com/v1/{account}/{gateway}) */
22
+ aiGatewayUrl?: string
23
+ /** Cloudflare AI Gateway authentication token */
24
+ aiGatewayToken?: string
25
+ }
26
+
27
+ /**
28
+ * Options for evaluate()
29
+ */
30
+ export interface EvaluateOptions {
31
+ /** Module code with exports */
32
+ module?: string
33
+ /** Test code using vitest (describe, expect, it in global scope) */
34
+ tests?: string
35
+ /** Script code to run immediately (module exports in scope) */
36
+ script?: string
37
+ /** Timeout in milliseconds (default: 5000) */
38
+ timeout?: number
39
+ /** Environment variables to pass to the sandbox */
40
+ env?: Record<string, string>
41
+ /** Fetch configuration. Set to null to block network access. Default: allowed */
42
+ fetch?: null
43
+ /** RPC services to expose via capnweb (URL -> handler) */
44
+ rpc?: Record<string, unknown>
45
+ /** Outbound RPC interceptor - intercepts fetch calls to RPC URLs */
46
+ outboundRpc?: (url: string, request: Request) => Promise<Response> | Response | null
47
+ /** SDK configuration - enables $, db, ai, api, on, send globals */
48
+ sdk?: SDKConfig | boolean
49
+ /** Top-level imports to hoist (for MDX test files with external imports) */
50
+ imports?: string[]
51
+ }
52
+
53
+ /**
54
+ * Result from evaluate()
55
+ */
56
+ export interface EvaluateResult {
57
+ /** Whether execution succeeded */
58
+ success: boolean
59
+ /** Return value from script (if any) */
60
+ value?: unknown
61
+ /** Console output */
62
+ logs: LogEntry[]
63
+ /** Test results (if tests were provided) */
64
+ testResults?: TestResults
65
+ /** Error message if execution failed */
66
+ error?: string
67
+ /** Execution time in milliseconds */
68
+ duration: number
69
+ }
70
+
71
+ /**
72
+ * A log entry from console.log/warn/error
73
+ */
74
+ export interface LogEntry {
75
+ level: 'log' | 'warn' | 'error' | 'info' | 'debug'
76
+ message: string
77
+ timestamp: number
78
+ }
79
+
80
+ /**
81
+ * Test results from vitest-style tests
82
+ */
83
+ export interface TestResults {
84
+ /** Total number of tests */
85
+ total: number
86
+ /** Number of passed tests */
87
+ passed: number
88
+ /** Number of failed tests */
89
+ failed: number
90
+ /** Number of skipped tests */
91
+ skipped: number
92
+ /** Individual test results */
93
+ tests: TestResult[]
94
+ /** Total duration in milliseconds */
95
+ duration: number
96
+ }
97
+
98
+ /**
99
+ * Individual test result
100
+ */
101
+ export interface TestResult {
102
+ /** Test name (describe > it) */
103
+ name: string
104
+ /** Whether the test passed */
105
+ passed: boolean
106
+ /** Error message if failed */
107
+ error?: string
108
+ /** Test duration in milliseconds */
109
+ duration: number
110
+ }
111
+
112
+ /**
113
+ * Worker loader binding type (Cloudflare)
114
+ */
115
+ export interface WorkerLoader {
116
+ get(
117
+ id: string,
118
+ loader: () => Promise<WorkerCode>
119
+ ): WorkerStub
120
+ }
121
+
122
+ /**
123
+ * Worker code configuration
124
+ */
125
+ export interface WorkerCode {
126
+ mainModule: string
127
+ modules: Record<string, string | { js?: string; cjs?: string; text?: string; json?: unknown }>
128
+ compatibilityDate?: string
129
+ env?: Record<string, unknown>
130
+ globalOutbound?: null | unknown
131
+ }
132
+
133
+ /**
134
+ * Worker stub returned by loader
135
+ */
136
+ export interface WorkerStub {
137
+ fetch(request: Request): Promise<Response>
138
+ }
139
+
140
+ /**
141
+ * Test service core - returned by connect() (from ai-tests)
142
+ */
143
+ export interface TestServiceCore {
144
+ expect(value: unknown, message?: string): unknown
145
+ should(value: unknown): unknown
146
+ assert: unknown
147
+ describe(name: string, fn: () => void): void
148
+ it(name: string, fn: () => void | Promise<void>): void
149
+ test(name: string, fn: () => void | Promise<void>): void
150
+ skip(name: string, fn?: () => void | Promise<void>): void
151
+ only(name: string, fn: () => void | Promise<void>): void
152
+ beforeEach(fn: () => void | Promise<void>): void
153
+ afterEach(fn: () => void | Promise<void>): void
154
+ beforeAll(fn: () => void | Promise<void>): void
155
+ afterAll(fn: () => void | Promise<void>): void
156
+ run(): Promise<TestResults>
157
+ reset(): void
158
+ }
159
+
160
+ /**
161
+ * Test service binding type - WorkerEntrypoint (from ai-tests)
162
+ */
163
+ export interface TestServiceBinding {
164
+ /** Get a test service instance via RPC */
165
+ connect(): Promise<TestServiceCore>
166
+ }
167
+
168
+ /**
169
+ * Environment with worker loader binding
170
+ */
171
+ export interface SandboxEnv {
172
+ LOADER?: WorkerLoader
173
+ TEST?: TestServiceBinding
174
+ }