@poe-platform/safe-js 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.
- package/LICENSE +21 -0
- package/README.md +206 -0
- package/dist/agent-defs/agents/claude-code.d.ts +2 -0
- package/dist/agent-defs/agents/claude-desktop.d.ts +2 -0
- package/dist/agent-defs/agents/codex.d.ts +2 -0
- package/dist/agent-defs/agents/cursor.d.ts +2 -0
- package/dist/agent-defs/agents/gemini-cli.d.ts +2 -0
- package/dist/agent-defs/agents/goose.d.ts +2 -0
- package/dist/agent-defs/agents/index.d.ts +10 -0
- package/dist/agent-defs/agents/kimi.d.ts +2 -0
- package/dist/agent-defs/agents/opencode.d.ts +2 -0
- package/dist/agent-defs/agents/pi.d.ts +2 -0
- package/dist/agent-defs/agents/poe-agent.d.ts +2 -0
- package/dist/agent-defs/capabilities.d.ts +14 -0
- package/dist/agent-defs/index.d.ts +6 -0
- package/dist/agent-defs/registry.d.ts +3 -0
- package/dist/agent-defs/specifier.d.ts +7 -0
- package/dist/agent-defs/types.d.ts +35 -0
- package/dist/agent-harness-tools/binary-exists.d.ts +10 -0
- package/dist/agent-harness-tools/execution-env.d.ts +108 -0
- package/dist/agent-harness-tools/hooks.d.ts +30 -0
- package/dist/agent-harness-tools/index.d.ts +18 -0
- package/dist/agent-harness-tools/log-stream.d.ts +28 -0
- package/dist/agent-harness-tools/participant.d.ts +10 -0
- package/dist/agent-harness-tools/paths.d.ts +14 -0
- package/dist/agent-harness-tools/plan-readiness.d.ts +7 -0
- package/dist/agent-harness-tools/plans.d.ts +35 -0
- package/dist/agent-harness-tools/poe-command-execution.d.ts +37 -0
- package/dist/agent-harness-tools/run-logs.d.ts +17 -0
- package/dist/agent-harness-tools/run-poe-command.d.ts +33 -0
- package/dist/agent-harness-tools/runner.d.ts +33 -0
- package/dist/agent-harness-tools/select-agent.d.ts +18 -0
- package/dist/agent-harness-tools/sequence.d.ts +7 -0
- package/dist/agent-harness-tools/skill-config.d.ts +1 -0
- package/dist/agent-harness-tools/stage.d.ts +22 -0
- package/dist/agent-harness-tools/workspace-transfer.d.ts +3 -0
- package/dist/agent-spawn/acp/middleware.d.ts +38 -0
- package/dist/agent-spawn/acp/types.d.ts +180 -0
- package/dist/agent-spawn/adapters/claude.d.ts +3 -0
- package/dist/agent-spawn/adapters/codex.d.ts +2 -0
- package/dist/agent-spawn/adapters/cursor.d.ts +2 -0
- package/dist/agent-spawn/adapters/index.d.ts +12 -0
- package/dist/agent-spawn/adapters/kimi.d.ts +2 -0
- package/dist/agent-spawn/adapters/native.d.ts +5 -0
- package/dist/agent-spawn/adapters/opencode.d.ts +2 -0
- package/dist/agent-spawn/adapters/pi.d.ts +2 -0
- package/dist/agent-spawn/environment.d.ts +2 -0
- package/dist/agent-spawn/parallel.d.ts +30 -0
- package/dist/agent-spawn/retry.d.ts +26 -0
- package/dist/agent-spawn/types.d.ts +272 -0
- package/dist/auth-store/create-secret-store.d.ts +2 -0
- package/dist/auth-store/encrypted-file-store.d.ts +47 -0
- package/dist/auth-store/index.d.ts +7 -0
- package/dist/auth-store/keychain-store.d.ts +25 -0
- package/dist/auth-store/provider-store.d.ts +14 -0
- package/dist/auth-store/types.d.ts +22 -0
- package/dist/config-mutations/execution/run-mutations.d.ts +7 -0
- package/dist/config-mutations/fs-utils.d.ts +18 -0
- package/dist/config-mutations/index.d.ts +8 -0
- package/dist/config-mutations/mutations/config-mutation.d.ts +47 -0
- package/dist/config-mutations/mutations/file-mutation.d.ts +62 -0
- package/dist/config-mutations/mutations/template-mutation.d.ts +40 -0
- package/dist/config-mutations/template/render.d.ts +6 -0
- package/dist/config-mutations/types.d.ts +168 -0
- package/dist/poe-code-config/compile/schema-compiler.d.ts +11 -0
- package/dist/poe-code-config/config.d.ts +2 -0
- package/dist/poe-code-config/configured-services.d.ts +29 -0
- package/dist/poe-code-config/index.d.ts +16 -0
- package/dist/poe-code-config/inspect.d.ts +13 -0
- package/dist/poe-code-config/memory.d.ts +14 -0
- package/dist/poe-code-config/merge-callbacks.d.ts +38 -0
- package/dist/poe-code-config/merge.d.ts +2 -0
- package/dist/poe-code-config/plan-scope.d.ts +8 -0
- package/dist/poe-code-config/provider-config.d.ts +16 -0
- package/dist/poe-code-config/resolve.d.ts +2 -0
- package/dist/poe-code-config/runtime.d.ts +114 -0
- package/dist/poe-code-config/schema.d.ts +14 -0
- package/dist/poe-code-config/state/fs.d.ts +24 -0
- package/dist/poe-code-config/state/index.d.ts +12 -0
- package/dist/poe-code-config/state/jobs.d.ts +34 -0
- package/dist/poe-code-config/state/templates.d.ts +18 -0
- package/dist/poe-code-config/store.d.ts +12 -0
- package/dist/poe-code-config/types.d.ts +88 -0
- package/dist/process-runner/docker/build-context.d.ts +5 -0
- package/dist/process-runner/docker/context.d.ts +3 -0
- package/dist/process-runner/docker/docker-execution-env.d.ts +28 -0
- package/dist/process-runner/docker/docker-runner.d.ts +2 -0
- package/dist/process-runner/docker/engine.d.ts +3 -0
- package/dist/process-runner/host/host-execution-env.d.ts +2 -0
- package/dist/process-runner/host/host-runner.d.ts +3 -0
- package/dist/process-runner/index.d.ts +10 -0
- package/dist/process-runner/testing/index.d.ts +2 -0
- package/dist/process-runner/testing/mock-runner.d.ts +3 -0
- package/dist/process-runner/types.d.ts +191 -0
- package/dist/process-runner/workspace-transfer.d.ts +61 -0
- package/dist/providers/auth/api-key.d.ts +5 -0
- package/dist/providers/auth/types.d.ts +14 -0
- package/dist/providers/compatibility.d.ts +4 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/providers/anthropic.d.ts +1 -0
- package/dist/providers/providers/cloudflare.d.ts +1 -0
- package/dist/providers/providers/generated.d.ts +5 -0
- package/dist/providers/providers/openai.d.ts +1 -0
- package/dist/providers/providers/poe.d.ts +2 -0
- package/dist/providers/registry.d.ts +44 -0
- package/dist/providers/types.d.ts +54 -0
- package/dist/safe-fs/bridge/filesystem.d.ts +88 -0
- package/dist/safe-fs/bridge/index.d.ts +6 -0
- package/dist/safe-fs/bridge/types.d.ts +75 -0
- package/dist/safe-fs/config.d.ts +15 -0
- package/dist/safe-fs/config.node.d.ts +2 -0
- package/dist/safe-fs/contracts/errors.d.ts +50 -0
- package/dist/safe-fs/contracts/filesystem.d.ts +96 -0
- package/dist/safe-fs/contracts/index.d.ts +4 -0
- package/dist/safe-fs/contracts/io.d.ts +8 -0
- package/dist/safe-fs/contracts/path.d.ts +8 -0
- package/dist/safe-fs/contracts/portable-path.d.ts +13 -0
- package/dist/safe-fs/contracts/virtual-path.d.ts +7 -0
- package/dist/safe-fs/core.d.ts +12 -0
- package/dist/safe-fs/fs/memory/index.d.ts +58 -0
- package/dist/safe-fs/fs/mount/comparison.d.ts +19 -0
- package/dist/safe-fs/fs/mount/index.d.ts +44 -0
- package/dist/safe-fs/fs/overlay/index.d.ts +73 -0
- package/dist/safe-fs/fs/readonly/index.d.ts +31 -0
- package/dist/safe-fs/fs/real/index.d.ts +76 -0
- package/dist/safe-fs/fs/s3/filesystem.d.ts +93 -0
- package/dist/safe-fs/fs/s3/http/index.d.ts +2 -0
- package/dist/safe-fs/fs/s3/http/transport.d.ts +3 -0
- package/dist/safe-fs/fs/s3/http/types.d.ts +30 -0
- package/dist/safe-fs/fs/s3/index.d.ts +6 -0
- package/dist/safe-fs/fs/s3/mock.d.ts +48 -0
- package/dist/safe-fs/fs/s3/transport.d.ts +103 -0
- package/dist/safe-fs/fs/webdav/index.d.ts +2 -0
- package/dist/safe-fs/fs/webdav/webdav.d.ts +101 -0
- package/dist/safe-fs/index.d.ts +14 -0
- package/dist/safe-fs/node/filesystem.d.ts +11 -0
- package/dist/safe-fs/node/index.d.ts +2 -0
- package/dist/safe-fs/node-host.d.ts +1 -0
- package/dist/safe-fs/node-unavailable.d.ts +1 -0
- package/dist/safe-fs/platform/browser.d.ts +12 -0
- package/dist/safe-fs/platform/node.d.ts +13 -0
- package/dist/safe-js/browser/chunks/chunk-QGN6DKT5.js +4335 -0
- package/dist/safe-js/browser/chunks/chunk-QGN6DKT5.js.map +7 -0
- package/dist/safe-js/browser/safe-fs-core.js +67 -0
- package/dist/safe-js/browser/safe-fs-core.js.map +7 -0
- package/dist/safe-js/browser/safe-fs.js +67 -0
- package/dist/safe-js/browser/safe-fs.js.map +7 -0
- package/dist/safe-js/chunks/chunk-2QRYPKQQ.js +4315 -0
- package/dist/safe-js/chunks/chunk-2QRYPKQQ.js.map +7 -0
- package/dist/safe-js/chunks/chunk-4YIDX44G.js +40 -0
- package/dist/safe-js/chunks/chunk-4YIDX44G.js.map +7 -0
- package/dist/safe-js/chunks/chunk-7M2SJPSZ.js +2613 -0
- package/dist/safe-js/chunks/chunk-7M2SJPSZ.js.map +7 -0
- package/dist/safe-js/chunks/chunk-DC5B3GYM.js +8248 -0
- package/dist/safe-js/chunks/chunk-DC5B3GYM.js.map +7 -0
- package/dist/safe-js/chunks/chunk-Z3D76J4U.js +30732 -0
- package/dist/safe-js/chunks/chunk-Z3D76J4U.js.map +7 -0
- package/dist/safe-js/cli.d.ts +36 -0
- package/dist/safe-js/cli.js +724 -0
- package/dist/safe-js/cli.js.map +7 -0
- package/dist/safe-js/core.d.ts +6 -0
- package/dist/safe-js/core.js +14 -0
- package/dist/safe-js/core.js.map +7 -0
- package/dist/safe-js/dump.d.ts +2 -0
- package/dist/safe-js/error/format.d.ts +15 -0
- package/dist/safe-js/error/shape.d.ts +28 -0
- package/dist/safe-js/index.d.ts +56 -0
- package/dist/safe-js/index.js +454 -0
- package/dist/safe-js/index.js.map +7 -0
- package/dist/safe-js/interp/arguments.d.ts +10 -0
- package/dist/safe-js/interp/async.d.ts +56 -0
- package/dist/safe-js/interp/budget.d.ts +95 -0
- package/dist/safe-js/interp/exceptions.d.ts +45 -0
- package/dist/safe-js/interp/generator.d.ts +16 -0
- package/dist/safe-js/interp/globals/console-json.d.ts +14 -0
- package/dist/safe-js/interp/host-bridge.d.ts +29 -0
- package/dist/safe-js/interp/host-call.d.ts +130 -0
- package/dist/safe-js/interp/interpreter.d.ts +63 -0
- package/dist/safe-js/interp/promise-replay.d.ts +70 -0
- package/dist/safe-js/interp/regex/compile-guard.d.ts +33 -0
- package/dist/safe-js/interp/regex/parse.d.ts +62 -0
- package/dist/safe-js/interp/scope.d.ts +43 -0
- package/dist/safe-js/interp/values.d.ts +136 -0
- package/dist/safe-js/lint/index.d.ts +38 -0
- package/dist/safe-js/lint/rules/AS-export-import-meta.d.ts +21 -0
- package/dist/safe-js/lint/rules/module-registry.d.ts +33 -0
- package/dist/safe-js/lint.d.ts +1 -0
- package/dist/safe-js/loader/extract-block.d.ts +10 -0
- package/dist/safe-js/loader/find-exported.d.ts +2 -0
- package/dist/safe-js/loader/frontmatter.d.ts +5 -0
- package/dist/safe-js/migrate.d.ts +33 -0
- package/dist/safe-js/migration-file.d.ts +55 -0
- package/dist/safe-js/modules/agent.d.ts +132 -0
- package/dist/safe-js/modules/env.d.ts +14 -0
- package/dist/safe-js/modules/fail.d.ts +6 -0
- package/dist/safe-js/modules/fs-config.d.ts +12 -0
- package/dist/safe-js/modules/fs.d.ts +82 -0
- package/dist/safe-js/modules/harness.d.ts +19 -0
- package/dist/safe-js/modules/log.d.ts +16 -0
- package/dist/safe-js/modules/mcp-transport.d.ts +26 -0
- package/dist/safe-js/modules/mcp.d.ts +63 -0
- package/dist/safe-js/modules/metric.d.ts +4 -0
- package/dist/safe-js/modules/registry.d.ts +16 -0
- package/dist/safe-js/modules/time.d.ts +12 -0
- package/dist/safe-js/observability/otel.d.ts +21 -0
- package/dist/safe-js/output-stream.d.ts +12 -0
- package/dist/safe-js/parse/parse-export.d.ts +36 -0
- package/dist/safe-js/parse/parser.d.ts +356 -0
- package/dist/safe-js/parse/tokenizer.d.ts +26 -0
- package/dist/safe-js/parse.d.ts +4 -0
- package/dist/safe-js/random.d.ts +9 -0
- package/dist/safe-js/restore.d.ts +26 -0
- package/dist/safe-js/run.d.ts +74 -0
- package/dist/safe-js/runner/run-harness.d.ts +32 -0
- package/dist/safe-js/safe-fs-core.js +130 -0
- package/dist/safe-js/safe-fs-core.js.map +7 -0
- package/dist/safe-js/safe-fs-node.js +94 -0
- package/dist/safe-js/safe-fs-node.js.map +7 -0
- package/dist/safe-js/safe-fs.js +94 -0
- package/dist/safe-js/safe-fs.js.map +7 -0
- package/dist/safe-js/snapshot/arguments.d.ts +17 -0
- package/dist/safe-js/snapshot/backend.d.ts +19 -0
- package/dist/safe-js/snapshot/dump-format.d.ts +7 -0
- package/dist/safe-js/snapshot/dump.d.ts +23 -0
- package/dist/safe-js/snapshot/float32array.d.ts +12 -0
- package/dist/safe-js/snapshot/migration.d.ts +35 -0
- package/dist/safe-js/snapshot/policy.d.ts +49 -0
- package/dist/safe-js/snapshot/replay-data.d.ts +71 -0
- package/dist/safe-js/snapshot/validation.d.ts +15 -0
- package/dist/task-list/backends/gh-issues-client.d.ts +19 -0
- package/dist/task-list/backends/gh-issues-sync.d.ts +46 -0
- package/dist/task-list/backends/gh-issues.d.ts +21 -0
- package/dist/task-list/index.d.ts +9 -0
- package/dist/task-list/move.d.ts +2 -0
- package/dist/task-list/open.d.ts +5 -0
- package/dist/task-list/state-machine.d.ts +16 -0
- package/dist/task-list/state.d.ts +29 -0
- package/dist/task-list/types.d.ts +206 -0
- package/dist/tiny-mcp-client/index.d.ts +662 -0
- package/dist/tiny-stdio-mcp-server/content/audio.d.ts +15 -0
- package/dist/tiny-stdio-mcp-server/content/convert.d.ts +16 -0
- package/dist/tiny-stdio-mcp-server/content/file-type.d.ts +11 -0
- package/dist/tiny-stdio-mcp-server/content/file.d.ts +28 -0
- package/dist/tiny-stdio-mcp-server/content/image.d.ts +15 -0
- package/dist/tiny-stdio-mcp-server/content/index.d.ts +7 -0
- package/dist/tiny-stdio-mcp-server/content/mime.d.ts +7 -0
- package/dist/tiny-stdio-mcp-server/content/remote.d.ts +5 -0
- package/dist/tiny-stdio-mcp-server/index.d.ts +9 -0
- package/dist/tiny-stdio-mcp-server/schema.d.ts +20 -0
- package/dist/tiny-stdio-mcp-server/server.d.ts +35 -0
- package/dist/tiny-stdio-mcp-server/types.d.ts +247 -0
- package/dist/toolcraft-design/acp/components.d.ts +19 -0
- package/dist/toolcraft-design/acp/index.d.ts +4 -0
- package/dist/toolcraft-design/acp/writer.d.ts +13 -0
- package/dist/toolcraft-design/components/browser.d.ts +15 -0
- package/dist/toolcraft-design/components/catalog.d.ts +26 -0
- package/dist/toolcraft-design/components/color.d.ts +31 -0
- package/dist/toolcraft-design/components/command-errors.d.ts +18 -0
- package/dist/toolcraft-design/components/detail-card.d.ts +22 -0
- package/dist/toolcraft-design/components/file-changes.d.ts +16 -0
- package/dist/toolcraft-design/components/help-formatter-plain.d.ts +5 -0
- package/dist/toolcraft-design/components/help-formatter.d.ts +50 -0
- package/dist/toolcraft-design/components/inspector-card.d.ts +21 -0
- package/dist/toolcraft-design/components/logger.d.ts +11 -0
- package/dist/toolcraft-design/components/resource-browser.d.ts +21 -0
- package/dist/toolcraft-design/components/symbols.d.ts +12 -0
- package/dist/toolcraft-design/components/table.d.ts +16 -0
- package/dist/toolcraft-design/components/template.d.ts +19 -0
- package/dist/toolcraft-design/components/text.d.ts +16 -0
- package/dist/toolcraft-design/dashboard/buffer.d.ts +25 -0
- package/dist/toolcraft-design/dashboard/components/footer.d.ts +8 -0
- package/dist/toolcraft-design/dashboard/dashboard.d.ts +20 -0
- package/dist/toolcraft-design/dashboard/index.d.ts +8 -0
- package/dist/toolcraft-design/dashboard/should-use-dashboard.d.ts +10 -0
- package/dist/toolcraft-design/dashboard/snapshot.d.ts +10 -0
- package/dist/toolcraft-design/dashboard/terminal.d.ts +37 -0
- package/dist/toolcraft-design/dashboard/types.d.ts +38 -0
- package/dist/toolcraft-design/explorer/events.d.ts +77 -0
- package/dist/toolcraft-design/explorer/index.d.ts +8 -0
- package/dist/toolcraft-design/explorer/keymap.d.ts +31 -0
- package/dist/toolcraft-design/explorer/runtime.d.ts +2 -0
- package/dist/toolcraft-design/explorer/state.d.ts +224 -0
- package/dist/toolcraft-design/index.d.ts +62 -0
- package/dist/toolcraft-design/internal/output-format.d.ts +6 -0
- package/dist/toolcraft-design/internal/strip-ansi.d.ts +1 -0
- package/dist/toolcraft-design/internal/theme-detect.d.ts +12 -0
- package/dist/toolcraft-design/internal/theme-state.d.ts +12 -0
- package/dist/toolcraft-design/prompts/index.d.ts +91 -0
- package/dist/toolcraft-design/prompts/interactive/cancel-symbol.d.ts +2 -0
- package/dist/toolcraft-design/prompts/interactive/select.d.ts +18 -0
- package/dist/toolcraft-design/prompts/primitives/cancel.d.ts +2 -0
- package/dist/toolcraft-design/prompts/primitives/intro.d.ts +1 -0
- package/dist/toolcraft-design/prompts/primitives/log.d.ts +18 -0
- package/dist/toolcraft-design/prompts/primitives/note.d.ts +1 -0
- package/dist/toolcraft-design/prompts/primitives/outro.d.ts +1 -0
- package/dist/toolcraft-design/prompts/primitives/spinner.d.ts +6 -0
- package/dist/toolcraft-design/prompts/theme.d.ts +11 -0
- package/dist/toolcraft-design/screen/screen.d.ts +40 -0
- package/dist/toolcraft-design/screen/style.d.ts +16 -0
- package/dist/toolcraft-design/static/index.d.ts +4 -0
- package/dist/toolcraft-design/static/menu.d.ts +11 -0
- package/dist/toolcraft-design/static/spinner.d.ts +14 -0
- package/dist/toolcraft-design/terminal/driver.d.ts +34 -0
- package/dist/toolcraft-design/terminal/input.d.ts +25 -0
- package/dist/toolcraft-design/terminal-markdown/ast.d.ts +98 -0
- package/dist/toolcraft-design/terminal-markdown/html-renderer.d.ts +7 -0
- package/dist/toolcraft-design/terminal-markdown/index.d.ts +12 -0
- package/dist/toolcraft-design/terminal-markdown/parser.d.ts +5 -0
- package/dist/toolcraft-design/terminal-markdown/plaintext-renderer.d.ts +11 -0
- package/dist/toolcraft-design/terminal-markdown/renderer.d.ts +7 -0
- package/dist/toolcraft-design/tokens/brand.d.ts +5 -0
- package/dist/toolcraft-design/tokens/colors.d.ts +37 -0
- package/dist/toolcraft-design/tokens/index.d.ts +6 -0
- package/dist/toolcraft-design/tokens/spacing.d.ts +6 -0
- package/dist/toolcraft-design/tokens/typography.d.ts +7 -0
- package/dist/toolcraft-design/tokens/widths.d.ts +5 -0
- package/dist/toolcraft-schema/index.d.ts +184 -0
- package/dist/toolcraft-schema/json-schema/index.d.ts +5 -0
- package/dist/toolcraft-schema/json-schema/types.d.ts +33 -0
- package/dist/toolcraft-schema/json-schema-document.d.ts +14 -0
- package/dist/toolcraft-schema/json.d.ts +10 -0
- package/dist/toolcraft-schema/oneof.d.ts +15 -0
- package/dist/toolcraft-schema/record.d.ts +5 -0
- package/dist/toolcraft-schema/union.d.ts +8 -0
- package/dist/toolcraft-schema/validate.d.ts +17 -0
- package/package.json +89 -0
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AgentSpawnError,
|
|
3
|
+
EnvAccessError,
|
|
4
|
+
SPAWN_MODES,
|
|
5
|
+
countLineBreaks,
|
|
6
|
+
createLintModulesFromRuntimeRegistry,
|
|
7
|
+
createSpawnUsageAccumulator,
|
|
8
|
+
extractBlock,
|
|
9
|
+
formatInterpreterError,
|
|
10
|
+
inspectSnapshotMigration,
|
|
11
|
+
makeAgentModule,
|
|
12
|
+
makeEnvModule,
|
|
13
|
+
makeFailModule,
|
|
14
|
+
makeFsModule,
|
|
15
|
+
makeHarnessModule,
|
|
16
|
+
makeLogModule,
|
|
17
|
+
makeMcpModule,
|
|
18
|
+
makeMetricModule,
|
|
19
|
+
maskSource,
|
|
20
|
+
migrateSnapshot,
|
|
21
|
+
migrateSnapshotFile,
|
|
22
|
+
parseEnvConfig,
|
|
23
|
+
parseFsConfig,
|
|
24
|
+
parseMcpConfig,
|
|
25
|
+
resolveFsConfig,
|
|
26
|
+
runWithSpawnUsageAccumulator,
|
|
27
|
+
splitFrontmatter,
|
|
28
|
+
supportsSpawnMode
|
|
29
|
+
} from "./chunks/chunk-DC5B3GYM.js";
|
|
30
|
+
import {
|
|
31
|
+
Budget,
|
|
32
|
+
FileSnapshotBackend,
|
|
33
|
+
HostCallResumabilityError,
|
|
34
|
+
HostOperationResumePolicyError,
|
|
35
|
+
SandboxError,
|
|
36
|
+
SnapshotValidationError,
|
|
37
|
+
createReplayableRandom,
|
|
38
|
+
createSeededRandom,
|
|
39
|
+
declareHostOperation,
|
|
40
|
+
deepCopyFromSandbox,
|
|
41
|
+
deepCopyToSandbox,
|
|
42
|
+
dump,
|
|
43
|
+
hasOwnErrorCode,
|
|
44
|
+
lint,
|
|
45
|
+
noopOtelSink,
|
|
46
|
+
parse,
|
|
47
|
+
parseModule,
|
|
48
|
+
registerPendingHostCallPolicy,
|
|
49
|
+
restore,
|
|
50
|
+
run
|
|
51
|
+
} from "./chunks/chunk-Z3D76J4U.js";
|
|
52
|
+
import "./chunks/chunk-7M2SJPSZ.js";
|
|
53
|
+
import "./chunks/chunk-2QRYPKQQ.js";
|
|
54
|
+
import "./chunks/chunk-4YIDX44G.js";
|
|
55
|
+
|
|
56
|
+
// packages/safe-js/src/parse.ts
|
|
57
|
+
var parse2 = parse;
|
|
58
|
+
|
|
59
|
+
// packages/safe-js/src/runner/run-harness.ts
|
|
60
|
+
import { readFile, stat } from "node:fs/promises";
|
|
61
|
+
import { extname } from "node:path";
|
|
62
|
+
function getOwnEntry(record, key) {
|
|
63
|
+
return Object.prototype.hasOwnProperty.call(record, key) ? record[key] : void 0;
|
|
64
|
+
}
|
|
65
|
+
function createHarnessMeta(filepath, frontmatter) {
|
|
66
|
+
return {
|
|
67
|
+
filepath,
|
|
68
|
+
kind: getOwnEntry(frontmatter, "kind"),
|
|
69
|
+
version: getOwnEntry(frontmatter, "version")
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function assertFrontmatterAgentModes(frontmatter) {
|
|
73
|
+
const agents = getOwnEntry(frontmatter, "agents");
|
|
74
|
+
if (typeof agents !== "object" || agents === null || Array.isArray(agents)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
for (const [name, definition] of Object.entries(agents)) {
|
|
78
|
+
if (typeof definition !== "object" || definition === null || Array.isArray(definition)) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const record = definition;
|
|
82
|
+
const agent = getOwnEntry(record, "agent");
|
|
83
|
+
const mode = getOwnEntry(record, "mode");
|
|
84
|
+
if (typeof agent !== "string" || typeof mode !== "string") {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (!SPAWN_MODES.includes(mode)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (!supportsSpawnMode(agent, mode)) {
|
|
91
|
+
throw new Error(`Harness agent "${name}": agent "${agent}" does not support mode "${mode}".`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
var LintError = class extends Error {
|
|
96
|
+
diagnostics;
|
|
97
|
+
constructor(diagnostics) {
|
|
98
|
+
super(formatLintErrorMessage(diagnostics));
|
|
99
|
+
this.name = "LintError";
|
|
100
|
+
this.diagnostics = diagnostics;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
async function runHarness(filepath, options) {
|
|
104
|
+
const rawSource = await readHarnessFile(filepath);
|
|
105
|
+
const { executableSource, frontmatter, isRawScript } = loadExecutableSource(filepath, rawSource);
|
|
106
|
+
assertFrontmatterAgentModes(frontmatter);
|
|
107
|
+
const meta = createHarnessMeta(filepath, frontmatter);
|
|
108
|
+
const modules = excludeHarnessModule(options.modulesFor(frontmatter, meta), isRawScript);
|
|
109
|
+
const diagnostics = lint(executableSource, {
|
|
110
|
+
filename: filepath,
|
|
111
|
+
modules: createLintModulesFromRuntimeRegistry(modules)
|
|
112
|
+
});
|
|
113
|
+
const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === "error");
|
|
114
|
+
if (lintErrors.length > 0) {
|
|
115
|
+
throw new LintError(lintErrors);
|
|
116
|
+
}
|
|
117
|
+
return runHarnessSource(executableSource, {
|
|
118
|
+
budget: options.budget,
|
|
119
|
+
entryPointArgs: hasDefaultExport(executableSource, filepath) ? [] : void 0,
|
|
120
|
+
filename: filepath,
|
|
121
|
+
modules,
|
|
122
|
+
otelSink: options.otelSink,
|
|
123
|
+
signal: options.signal,
|
|
124
|
+
snapshotBackend: options.snapshotBackend,
|
|
125
|
+
snapshotIntervalMs: options.snapshotIntervalMs,
|
|
126
|
+
snapshotPath: options.snapshotPath
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async function runHarnessPair(filepath, options) {
|
|
130
|
+
const pair = resolveHarnessPair(filepath);
|
|
131
|
+
const [rawMarkdown, rawScript] = await Promise.all([
|
|
132
|
+
readHarnessFile(pair.markdownPath),
|
|
133
|
+
readHarnessFile(pair.scriptPath)
|
|
134
|
+
]);
|
|
135
|
+
const { frontmatter, body } = splitFrontmatter(stripByteOrderMark(rawMarkdown));
|
|
136
|
+
assertFrontmatterAgentModes(frontmatter);
|
|
137
|
+
const executableSource = stripByteOrderMark(rawScript);
|
|
138
|
+
const meta = createHarnessMeta(pair.markdownPath, frontmatter);
|
|
139
|
+
const modules = options.modulesFor(frontmatter, meta);
|
|
140
|
+
const diagnostics = lint(executableSource, {
|
|
141
|
+
allowedExportNames: ["schema"],
|
|
142
|
+
defaultExport: {
|
|
143
|
+
parameters: ["frontmatter"],
|
|
144
|
+
required: true
|
|
145
|
+
},
|
|
146
|
+
filename: pair.scriptPath,
|
|
147
|
+
frontmatterFields: Object.keys(frontmatter),
|
|
148
|
+
modules: createLintModulesFromRuntimeRegistry(modules)
|
|
149
|
+
});
|
|
150
|
+
const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === "error");
|
|
151
|
+
if (lintErrors.length > 0) {
|
|
152
|
+
throw new LintError(lintErrors);
|
|
153
|
+
}
|
|
154
|
+
return runHarnessSource(executableSource, {
|
|
155
|
+
budget: options.budget,
|
|
156
|
+
entryPointArgs: [frontmatter],
|
|
157
|
+
filename: pair.scriptPath,
|
|
158
|
+
importMeta: {
|
|
159
|
+
body,
|
|
160
|
+
filepath: pair.markdownPath,
|
|
161
|
+
kind: meta.kind,
|
|
162
|
+
version: meta.version
|
|
163
|
+
},
|
|
164
|
+
modules,
|
|
165
|
+
otelSink: options.otelSink,
|
|
166
|
+
signal: options.signal,
|
|
167
|
+
snapshotBackend: options.snapshotBackend,
|
|
168
|
+
snapshotIntervalMs: options.snapshotIntervalMs,
|
|
169
|
+
snapshotPath: options.snapshotPath
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async function readHarnessFile(filepath) {
|
|
173
|
+
try {
|
|
174
|
+
const stats = await stat(filepath);
|
|
175
|
+
if (!stats.isFile()) {
|
|
176
|
+
throw new Error(`Harness path must point to a file: ${filepath}`);
|
|
177
|
+
}
|
|
178
|
+
return await readFile(filepath, "utf8");
|
|
179
|
+
} catch (error) {
|
|
180
|
+
if (hasOwnErrorCode(error, "ENOENT") || hasOwnErrorCode(error, "ENOTDIR")) {
|
|
181
|
+
throw new Error(`Harness file not found: ${filepath}`);
|
|
182
|
+
}
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function loadExecutableSource(filepath, source) {
|
|
187
|
+
if (isRawScriptPath(filepath)) {
|
|
188
|
+
const executableSource = stripByteOrderMark(source);
|
|
189
|
+
if (executableSource.length === 0) {
|
|
190
|
+
throw new Error(`No code block found in empty harness file: ${filepath}`);
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
executableSource,
|
|
194
|
+
frontmatter: {},
|
|
195
|
+
isRawScript: true
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const { frontmatter, body } = splitFrontmatter(source);
|
|
199
|
+
if (source.length === 0 || body.trim().length === 0) {
|
|
200
|
+
throw new Error(`No code block found in empty harness file: ${filepath}`);
|
|
201
|
+
}
|
|
202
|
+
const bodyStartOffset = source.length - body.length;
|
|
203
|
+
const { source: executableBlock, startOffset } = extractBlock(
|
|
204
|
+
body,
|
|
205
|
+
countLineBreaks(source, 0, bodyStartOffset) + 1
|
|
206
|
+
);
|
|
207
|
+
return {
|
|
208
|
+
executableSource: maskSource(source.slice(0, bodyStartOffset + startOffset)) + stripHashbang(executableBlock),
|
|
209
|
+
frontmatter,
|
|
210
|
+
isRawScript: false
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function resolveHarnessPair(filepath) {
|
|
214
|
+
const extension = extname(filepath);
|
|
215
|
+
const basename = extension.length === 0 ? filepath : filepath.slice(0, -extension.length);
|
|
216
|
+
if (isRawScriptExtension(extension)) {
|
|
217
|
+
return {
|
|
218
|
+
markdownPath: `${basename}.md`,
|
|
219
|
+
scriptPath: filepath
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
markdownPath: filepath,
|
|
224
|
+
scriptPath: `${basename}.ajs`
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function isRawScriptPath(filepath) {
|
|
228
|
+
return isRawScriptExtension(extname(filepath));
|
|
229
|
+
}
|
|
230
|
+
function isRawScriptExtension(extension) {
|
|
231
|
+
return extension === ".safejs" || extension === ".ajs";
|
|
232
|
+
}
|
|
233
|
+
async function runHarnessSource(executableSource, options) {
|
|
234
|
+
try {
|
|
235
|
+
return await run(executableSource, options);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
if (isSetupError(error)) {
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
...isAbortError(error) ? { aborted: true } : {},
|
|
242
|
+
error,
|
|
243
|
+
ok: false
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
function isSetupError(error) {
|
|
248
|
+
return error instanceof Error && error.name === "ParseError";
|
|
249
|
+
}
|
|
250
|
+
function isAbortError(error) {
|
|
251
|
+
if (error instanceof Error) {
|
|
252
|
+
return error.name === "AbortError";
|
|
253
|
+
}
|
|
254
|
+
return typeof error === "object" && error !== null && Object.prototype.hasOwnProperty.call(error, "name") && error.name === "AbortError";
|
|
255
|
+
}
|
|
256
|
+
function hasDefaultExport(source, filename) {
|
|
257
|
+
return parseModule(source, filename).body.some(
|
|
258
|
+
(statement) => statement.type === "ExportDefaultDeclaration"
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
function excludeHarnessModule(modules, isRawScript) {
|
|
262
|
+
if (!isRawScript) {
|
|
263
|
+
return modules;
|
|
264
|
+
}
|
|
265
|
+
if (modules instanceof Map) {
|
|
266
|
+
const rawModules2 = new Map(modules);
|
|
267
|
+
rawModules2.delete("harness");
|
|
268
|
+
return rawModules2;
|
|
269
|
+
}
|
|
270
|
+
const rawModules = {};
|
|
271
|
+
for (const [moduleName, moduleExports] of Object.entries(modules)) {
|
|
272
|
+
if (moduleName !== "harness") {
|
|
273
|
+
rawModules[moduleName] = moduleExports;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return rawModules;
|
|
277
|
+
}
|
|
278
|
+
function stripByteOrderMark(source) {
|
|
279
|
+
return source.startsWith("\uFEFF") ? source.slice(1) : source;
|
|
280
|
+
}
|
|
281
|
+
function stripHashbang(source) {
|
|
282
|
+
if (!source.startsWith("#!")) {
|
|
283
|
+
return source;
|
|
284
|
+
}
|
|
285
|
+
let end = 2;
|
|
286
|
+
while (end < source.length && source[end] !== "\n" && source[end] !== "\r") end += 1;
|
|
287
|
+
return `${" ".repeat(end)}${source.slice(end)}`;
|
|
288
|
+
}
|
|
289
|
+
function formatLintErrorMessage(diagnostics) {
|
|
290
|
+
if (diagnostics.length === 0) {
|
|
291
|
+
return "Script lint failed.";
|
|
292
|
+
}
|
|
293
|
+
return diagnostics.map(
|
|
294
|
+
(diagnostic) => `${diagnostic.filename}:${diagnostic.line}:${diagnostic.column} ${diagnostic.code} ${diagnostic.message}`
|
|
295
|
+
).join("\n");
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// packages/safe-js/src/loader/find-exported.ts
|
|
299
|
+
function findExportedConstInitializer(module, name) {
|
|
300
|
+
for (const statement of module.body) {
|
|
301
|
+
if (statement.type === "ExportDefaultDeclaration") {
|
|
302
|
+
if (name === "default") {
|
|
303
|
+
return statement.declaration;
|
|
304
|
+
}
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
if (statement.type !== "ExportNamedDeclaration") {
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
const declaration = statement.declaration;
|
|
311
|
+
if (declaration.kind !== "const") {
|
|
312
|
+
throw new Error(`Exported '${name}' must be declared with const.`);
|
|
313
|
+
}
|
|
314
|
+
if (declaration.declarations.length !== 1) {
|
|
315
|
+
throw new Error("Exported const declarations must contain exactly one declarator.");
|
|
316
|
+
}
|
|
317
|
+
const declarator = declaration.declarations[0];
|
|
318
|
+
if (declarator.id.type !== "Identifier") {
|
|
319
|
+
throw new Error("Destructured exported const bindings are not supported.");
|
|
320
|
+
}
|
|
321
|
+
if (declarator.id.name !== name) {
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
if (declarator.init === void 0) {
|
|
325
|
+
throw new Error(`Exported const '${name}' must have an initializer.`);
|
|
326
|
+
}
|
|
327
|
+
return declarator.init;
|
|
328
|
+
}
|
|
329
|
+
return void 0;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// packages/safe-js/src/modules/time.ts
|
|
333
|
+
import { webcrypto as crypto } from "node:crypto";
|
|
334
|
+
function makeTimeModule(options = {}) {
|
|
335
|
+
const hasDeterministicRandom = options.random !== void 0 || options.seed !== void 0;
|
|
336
|
+
const random = options.random ?? (options.seed === void 0 ? () => Math.random() : createSeededRandom(options.seed).next);
|
|
337
|
+
const now = options.now ?? (() => Date.now());
|
|
338
|
+
const signal = options.signal;
|
|
339
|
+
async function sleep(ms) {
|
|
340
|
+
assertSleepDelay(ms);
|
|
341
|
+
return await new Promise((resolve, reject) => {
|
|
342
|
+
if (signal?.aborted === true) {
|
|
343
|
+
reject(createSleepAbortError());
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const start = performance.now();
|
|
347
|
+
let timeout = setTimeout(resolveSleep, ms);
|
|
348
|
+
function cleanup() {
|
|
349
|
+
clearTimeout(timeout);
|
|
350
|
+
signal?.removeEventListener("abort", rejectSleep);
|
|
351
|
+
}
|
|
352
|
+
function resolveSleep() {
|
|
353
|
+
const remainingMs = ms - (performance.now() - start);
|
|
354
|
+
if (remainingMs > 0) {
|
|
355
|
+
timeout = setTimeout(resolveSleep, remainingMs);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
cleanup();
|
|
359
|
+
resolve();
|
|
360
|
+
}
|
|
361
|
+
function rejectSleep() {
|
|
362
|
+
cleanup();
|
|
363
|
+
reject(createSleepAbortError());
|
|
364
|
+
}
|
|
365
|
+
signal?.addEventListener("abort", rejectSleep, { once: true });
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
random,
|
|
370
|
+
now,
|
|
371
|
+
sleep,
|
|
372
|
+
uuid: hasDeterministicRandom ? () => createRandomUuid(random) : () => crypto.randomUUID()
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function createRandomUuid(random) {
|
|
376
|
+
const bytes = Array.from({ length: 16 }, () => Math.floor(readRandomUnit(random()) * 256));
|
|
377
|
+
bytes[6] = bytes[6] & 15 | 64;
|
|
378
|
+
bytes[8] = bytes[8] & 63 | 128;
|
|
379
|
+
const hex = bytes.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
380
|
+
return [
|
|
381
|
+
hex.slice(0, 8),
|
|
382
|
+
hex.slice(8, 12),
|
|
383
|
+
hex.slice(12, 16),
|
|
384
|
+
hex.slice(16, 20),
|
|
385
|
+
hex.slice(20)
|
|
386
|
+
].join("-");
|
|
387
|
+
}
|
|
388
|
+
function readRandomUnit(value) {
|
|
389
|
+
if (Number.isFinite(value) && value >= 0 && value < 1) {
|
|
390
|
+
return value;
|
|
391
|
+
}
|
|
392
|
+
throw new RangeError("time.uuid() random source must return a number in [0, 1).");
|
|
393
|
+
}
|
|
394
|
+
function assertSleepDelay(ms) {
|
|
395
|
+
if (Number.isFinite(ms) && ms >= 0) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
throw new RangeError("time.sleep(ms) requires a non-negative finite millisecond delay.");
|
|
399
|
+
}
|
|
400
|
+
function createSleepAbortError() {
|
|
401
|
+
return new Error("time.sleep aborted.");
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// packages/safe-js/src/index.ts
|
|
405
|
+
var parseModule2 = parseModule;
|
|
406
|
+
var restore2 = restore;
|
|
407
|
+
var deepCopyFromSandbox2 = deepCopyFromSandbox;
|
|
408
|
+
export {
|
|
409
|
+
AgentSpawnError,
|
|
410
|
+
Budget,
|
|
411
|
+
EnvAccessError,
|
|
412
|
+
FileSnapshotBackend,
|
|
413
|
+
HostCallResumabilityError,
|
|
414
|
+
HostOperationResumePolicyError,
|
|
415
|
+
SandboxError,
|
|
416
|
+
SnapshotValidationError,
|
|
417
|
+
createReplayableRandom,
|
|
418
|
+
createSpawnUsageAccumulator,
|
|
419
|
+
declareHostOperation,
|
|
420
|
+
deepCopyFromSandbox2 as deepCopyFromSandbox,
|
|
421
|
+
deepCopyToSandbox,
|
|
422
|
+
dump,
|
|
423
|
+
extractBlock,
|
|
424
|
+
findExportedConstInitializer,
|
|
425
|
+
formatInterpreterError,
|
|
426
|
+
inspectSnapshotMigration,
|
|
427
|
+
lint,
|
|
428
|
+
makeAgentModule,
|
|
429
|
+
makeEnvModule,
|
|
430
|
+
makeFailModule,
|
|
431
|
+
makeFsModule,
|
|
432
|
+
makeHarnessModule,
|
|
433
|
+
makeLogModule,
|
|
434
|
+
makeMcpModule,
|
|
435
|
+
makeMetricModule,
|
|
436
|
+
makeTimeModule,
|
|
437
|
+
migrateSnapshot,
|
|
438
|
+
migrateSnapshotFile,
|
|
439
|
+
noopOtelSink,
|
|
440
|
+
parse2 as parse,
|
|
441
|
+
parseEnvConfig,
|
|
442
|
+
parseFsConfig,
|
|
443
|
+
parseMcpConfig,
|
|
444
|
+
parseModule2 as parseModule,
|
|
445
|
+
registerPendingHostCallPolicy,
|
|
446
|
+
resolveFsConfig,
|
|
447
|
+
restore2 as restore,
|
|
448
|
+
run,
|
|
449
|
+
runHarness,
|
|
450
|
+
runHarnessPair,
|
|
451
|
+
runWithSpawnUsageAccumulator,
|
|
452
|
+
splitFrontmatter
|
|
453
|
+
};
|
|
454
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/parse.ts", "../src/runner/run-harness.ts", "../src/loader/find-exported.ts", "../src/modules/time.ts", "../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { parse as parseInternal, type ParseResult as ParsedNode } from \"./parse/parser.js\";\n\nexport { DisallowedSyntaxError } from \"./parse/parser.js\";\nexport const parse: (source: string, filename?: string) => ParsedNode = parseInternal;\nexport type {\n ArrayPattern,\n ArrayExpression,\n ArrowFunctionExpression,\n AssignmentExpression,\n AssignmentPattern,\n AssignmentProperty,\n AwaitExpression,\n BinaryExpression,\n BlockStatement,\n BooleanLiteral,\n BreakStatement,\n CallExpression,\n CatchClause,\n ConditionalExpression,\n ContinueStatement,\n DoWhileStatement,\n EmptyStatement,\n Expression,\n ExpressionStatement,\n ExportDefaultDeclaration,\n ExportNamedDeclaration,\n ImportDeclaration,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ImportSpecifier,\n ForInStatement,\n ForOfStatement,\n ForStatement,\n FunctionDeclaration,\n FunctionExpression,\n Identifier,\n IfStatement,\n LogicalExpression,\n MemberExpression,\n MetaProperty,\n NewExpression,\n NullLiteral,\n NumericLiteral,\n ObjectExpression,\n ObjectPattern,\n ParseResult,\n PatternTarget,\n Property,\n RegexLiteral,\n RestElement,\n ReturnStatement,\n SequenceExpression,\n SourceSpan,\n SpreadElement,\n Statement,\n StringLiteral,\n SwitchCase,\n SwitchStatement,\n TaggedTemplateExpression,\n TemplateElement,\n TemplateLiteral,\n ThisExpression,\n ThrowStatement,\n TryStatement,\n UnaryExpression,\n UndefinedLiteral,\n UpdateExpression,\n UpdateTarget,\n VariableDeclaration,\n VariableDeclarationKind,\n VariableDeclarator,\n WhileStatement\n} from \"./parse/parser.js\";\n", "import { readFile, stat } from \"node:fs/promises\";\nimport { extname } from \"node:path\";\n\nimport { supportsSpawnMode } from \"@poe-code/agent-spawn/configs\";\nimport { SPAWN_MODES, type SpawnMode } from \"@poe-code/agent-spawn/types\";\nimport { hasOwnErrorCode } from \"../error-codes.js\";\nimport { countLineBreaks, extractBlock, maskSource } from \"../loader/extract-block.js\";\nimport { splitFrontmatter } from \"../loader/frontmatter.js\";\nimport { lint, type Diagnostic } from \"../lint.js\";\nimport { createLintModulesFromRuntimeRegistry } from \"../lint/runtime-modules.js\";\nimport type { ModuleExports, ModuleRegistry } from \"../modules/registry.js\";\nimport type { OtelSink } from \"../observability/otel.js\";\nimport { parseModule } from \"../parse/parser.js\";\nimport { run, type RunOptions, type RunResult } from \"../run.js\";\nimport type { SnapshotBackend } from \"../snapshot/backend.js\";\n\ntype HarnessMeta = {\n filepath: string;\n kind: unknown;\n version: unknown;\n};\n\nexport type RunHarnessOptions = {\n budget?: RunOptions[\"budget\"];\n modulesFor: (frontmatter: Record<string, unknown>, meta: HarnessMeta) => ModuleRegistry;\n otelSink?: OtelSink;\n signal?: AbortSignal;\n snapshotBackend?: SnapshotBackend;\n snapshotIntervalMs?: number;\n snapshotPath?: string;\n};\n\nexport type RunHarnessExecutionErrorResult = {\n aborted?: true;\n error: unknown;\n ok: false;\n};\n\nexport type RunHarnessResult = RunResult | RunHarnessExecutionErrorResult;\n\nfunction getOwnEntry(record: Record<string, unknown>, key: string): unknown {\n return Object.prototype.hasOwnProperty.call(record, key) ? record[key] : undefined;\n}\n\nfunction createHarnessMeta(filepath: string, frontmatter: Record<string, unknown>): HarnessMeta {\n return {\n filepath,\n kind: getOwnEntry(frontmatter, \"kind\"),\n version: getOwnEntry(frontmatter, \"version\")\n };\n}\n\nfunction assertFrontmatterAgentModes(frontmatter: Record<string, unknown>): void {\n const agents = getOwnEntry(frontmatter, \"agents\");\n if (typeof agents !== \"object\" || agents === null || Array.isArray(agents)) {\n return;\n }\n\n for (const [name, definition] of Object.entries(agents)) {\n if (typeof definition !== \"object\" || definition === null || Array.isArray(definition)) {\n continue;\n }\n\n const record = definition as Record<string, unknown>;\n const agent = getOwnEntry(record, \"agent\");\n const mode = getOwnEntry(record, \"mode\");\n if (typeof agent !== \"string\" || typeof mode !== \"string\") {\n continue;\n }\n\n // Malformed mode strings are reported by the agent module's own validation.\n if (!SPAWN_MODES.includes(mode as SpawnMode)) {\n continue;\n }\n\n if (!supportsSpawnMode(agent, mode as SpawnMode)) {\n throw new Error(`Harness agent \"${name}\": agent \"${agent}\" does not support mode \"${mode}\".`);\n }\n }\n}\n\nexport class LintError extends Error {\n readonly diagnostics: readonly Diagnostic[];\n\n constructor(diagnostics: readonly Diagnostic[]) {\n super(formatLintErrorMessage(diagnostics));\n this.name = \"LintError\";\n this.diagnostics = diagnostics;\n }\n}\n\nexport async function runHarness(\n filepath: string,\n options: RunHarnessOptions\n): Promise<RunHarnessResult> {\n const rawSource = await readHarnessFile(filepath);\n const { executableSource, frontmatter, isRawScript } = loadExecutableSource(filepath, rawSource);\n assertFrontmatterAgentModes(frontmatter);\n const meta = createHarnessMeta(filepath, frontmatter);\n const modules = excludeHarnessModule(options.modulesFor(frontmatter, meta), isRawScript);\n const diagnostics = lint(executableSource, {\n filename: filepath,\n modules: createLintModulesFromRuntimeRegistry(modules)\n });\n const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n\n if (lintErrors.length > 0) {\n throw new LintError(lintErrors);\n }\n\n return runHarnessSource(executableSource, {\n budget: options.budget,\n entryPointArgs: hasDefaultExport(executableSource, filepath) ? [] : undefined,\n filename: filepath,\n modules,\n otelSink: options.otelSink,\n signal: options.signal,\n snapshotBackend: options.snapshotBackend,\n snapshotIntervalMs: options.snapshotIntervalMs,\n snapshotPath: options.snapshotPath\n });\n}\n\nexport async function runHarnessPair(\n filepath: string,\n options: RunHarnessOptions\n): Promise<RunHarnessResult> {\n const pair = resolveHarnessPair(filepath);\n const [rawMarkdown, rawScript] = await Promise.all([\n readHarnessFile(pair.markdownPath),\n readHarnessFile(pair.scriptPath)\n ]);\n const { frontmatter, body } = splitFrontmatter(stripByteOrderMark(rawMarkdown));\n assertFrontmatterAgentModes(frontmatter);\n const executableSource = stripByteOrderMark(rawScript);\n const meta = createHarnessMeta(pair.markdownPath, frontmatter);\n const modules = options.modulesFor(frontmatter, meta);\n const diagnostics = lint(executableSource, {\n allowedExportNames: [\"schema\"],\n defaultExport: {\n parameters: [\"frontmatter\"],\n required: true\n },\n filename: pair.scriptPath,\n frontmatterFields: Object.keys(frontmatter),\n modules: createLintModulesFromRuntimeRegistry(modules)\n });\n const lintErrors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n\n if (lintErrors.length > 0) {\n throw new LintError(lintErrors);\n }\n\n return runHarnessSource(executableSource, {\n budget: options.budget,\n entryPointArgs: [frontmatter],\n filename: pair.scriptPath,\n importMeta: {\n body,\n filepath: pair.markdownPath,\n kind: meta.kind,\n version: meta.version\n },\n modules,\n otelSink: options.otelSink,\n signal: options.signal,\n snapshotBackend: options.snapshotBackend,\n snapshotIntervalMs: options.snapshotIntervalMs,\n snapshotPath: options.snapshotPath\n });\n}\n\nasync function readHarnessFile(filepath: string): Promise<string> {\n try {\n const stats = await stat(filepath);\n if (!stats.isFile()) {\n throw new Error(`Harness path must point to a file: ${filepath}`);\n }\n\n return await readFile(filepath, \"utf8\");\n } catch (error) {\n if (hasOwnErrorCode(error, \"ENOENT\") || hasOwnErrorCode(error, \"ENOTDIR\")) {\n throw new Error(`Harness file not found: ${filepath}`);\n }\n\n throw error;\n }\n}\n\nfunction loadExecutableSource(\n filepath: string,\n source: string\n): {\n executableSource: string;\n frontmatter: Record<string, unknown>;\n isRawScript: boolean;\n} {\n if (isRawScriptPath(filepath)) {\n const executableSource = stripByteOrderMark(source);\n if (executableSource.length === 0) {\n throw new Error(`No code block found in empty harness file: ${filepath}`);\n }\n\n return {\n executableSource,\n frontmatter: {},\n isRawScript: true\n };\n }\n\n const { frontmatter, body } = splitFrontmatter(source);\n if (source.length === 0 || body.trim().length === 0) {\n throw new Error(`No code block found in empty harness file: ${filepath}`);\n }\n\n const bodyStartOffset = source.length - body.length;\n const { source: executableBlock, startOffset } = extractBlock(\n body,\n countLineBreaks(source, 0, bodyStartOffset) + 1\n );\n return {\n executableSource:\n maskSource(source.slice(0, bodyStartOffset + startOffset)) + stripHashbang(executableBlock),\n frontmatter,\n isRawScript: false\n };\n}\n\nfunction resolveHarnessPair(filepath: string): { markdownPath: string; scriptPath: string } {\n const extension = extname(filepath);\n const basename = extension.length === 0 ? filepath : filepath.slice(0, -extension.length);\n\n if (isRawScriptExtension(extension)) {\n return {\n markdownPath: `${basename}.md`,\n scriptPath: filepath\n };\n }\n\n return {\n markdownPath: filepath,\n scriptPath: `${basename}.ajs`\n };\n}\n\nfunction isRawScriptPath(filepath: string): boolean {\n return isRawScriptExtension(extname(filepath));\n}\n\nfunction isRawScriptExtension(extension: string): boolean {\n return extension === \".safejs\" || extension === \".ajs\";\n}\n\nasync function runHarnessSource(\n executableSource: string,\n options: Parameters<typeof run>[1]\n): Promise<RunHarnessResult> {\n try {\n return await run(executableSource, options);\n } catch (error) {\n if (isSetupError(error)) {\n throw error;\n }\n\n return {\n ...(isAbortError(error) ? { aborted: true as const } : {}),\n error,\n ok: false\n };\n }\n}\n\nfunction isSetupError(error: unknown): boolean {\n return error instanceof Error && error.name === \"ParseError\";\n}\n\nfunction isAbortError(error: unknown): boolean {\n if (error instanceof Error) {\n return error.name === \"AbortError\";\n }\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n Object.prototype.hasOwnProperty.call(error, \"name\") &&\n (error as { name?: unknown }).name === \"AbortError\"\n );\n}\n\nfunction hasDefaultExport(source: string, filename: string): boolean {\n return parseModule(source, filename).body.some(\n (statement) => statement.type === \"ExportDefaultDeclaration\"\n );\n}\n\nfunction excludeHarnessModule(modules: ModuleRegistry, isRawScript: boolean): ModuleRegistry {\n if (!isRawScript) {\n return modules;\n }\n\n if (modules instanceof Map) {\n const rawModules = new Map(modules);\n rawModules.delete(\"harness\");\n return rawModules;\n }\n\n const rawModules: Record<string, ModuleExports> = {};\n\n for (const [moduleName, moduleExports] of Object.entries(modules)) {\n if (moduleName !== \"harness\") {\n rawModules[moduleName] = moduleExports;\n }\n }\n\n return rawModules;\n}\n\nfunction stripByteOrderMark(source: string): string {\n return source.startsWith(\"\\uFEFF\") ? source.slice(1) : source;\n}\n\nfunction stripHashbang(source: string): string {\n if (!source.startsWith(\"#!\")) {\n return source;\n }\n\n let end = 2;\n while (end < source.length && source[end] !== \"\\n\" && source[end] !== \"\\r\") end += 1;\n return `${\" \".repeat(end)}${source.slice(end)}`;\n}\n\nfunction formatLintErrorMessage(diagnostics: readonly Diagnostic[]): string {\n if (diagnostics.length === 0) {\n return \"Script lint failed.\";\n }\n\n return diagnostics\n .map(\n (diagnostic) =>\n `${diagnostic.filename}:${diagnostic.line}:${diagnostic.column} ${diagnostic.code} ${diagnostic.message}`\n )\n .join(\"\\n\");\n}\n", "import type { Expression, Module } from \"../parse/parser.js\";\n\nexport function findExportedConstInitializer(module: Module, name: string): Expression | undefined {\n for (const statement of module.body) {\n if (statement.type === \"ExportDefaultDeclaration\") {\n if (name === \"default\") {\n return statement.declaration;\n }\n\n continue;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = statement.declaration;\n if (declaration.kind !== \"const\") {\n throw new Error(`Exported '${name}' must be declared with const.`);\n }\n\n if (declaration.declarations.length !== 1) {\n throw new Error(\"Exported const declarations must contain exactly one declarator.\");\n }\n\n const declarator = declaration.declarations[0]!;\n if (declarator.id.type !== \"Identifier\") {\n throw new Error(\"Destructured exported const bindings are not supported.\");\n }\n\n if (declarator.id.name !== name) {\n continue;\n }\n\n if (declarator.init === undefined) {\n throw new Error(`Exported const '${name}' must have an initializer.`);\n }\n\n return declarator.init;\n }\n\n return undefined;\n}\n", "import { webcrypto as crypto } from \"node:crypto\";\n\nimport { createSeededRandom } from \"../interp/globals/math.js\";\n\nexport type TimeModuleOptions = {\n now?: () => number;\n random?: () => number;\n seed?: number;\n signal?: AbortSignal;\n};\n\nexport function makeTimeModule(options: TimeModuleOptions = {}): {\n random: () => number;\n now: () => number;\n sleep: (ms: number) => Promise<void>;\n uuid: () => string;\n} {\n const hasDeterministicRandom = options.random !== undefined || options.seed !== undefined;\n const random =\n options.random ??\n (options.seed === undefined ? () => Math.random() : createSeededRandom(options.seed).next);\n const now = options.now ?? (() => Date.now());\n const signal = options.signal;\n\n async function sleep(ms: number): Promise<void> {\n assertSleepDelay(ms);\n\n return await new Promise<void>((resolve, reject) => {\n if (signal?.aborted === true) {\n reject(createSleepAbortError());\n return;\n }\n\n const start = performance.now();\n let timeout = setTimeout(resolveSleep, ms);\n\n function cleanup(): void {\n clearTimeout(timeout);\n signal?.removeEventListener(\"abort\", rejectSleep);\n }\n\n function resolveSleep(): void {\n const remainingMs = ms - (performance.now() - start);\n if (remainingMs > 0) {\n timeout = setTimeout(resolveSleep, remainingMs);\n return;\n }\n\n cleanup();\n resolve();\n }\n\n function rejectSleep(): void {\n cleanup();\n reject(createSleepAbortError());\n }\n\n signal?.addEventListener(\"abort\", rejectSleep, { once: true });\n });\n }\n\n return {\n random,\n now,\n sleep,\n uuid: hasDeterministicRandom ? () => createRandomUuid(random) : () => crypto.randomUUID()\n };\n}\n\nfunction createRandomUuid(random: () => number): string {\n const bytes = Array.from({ length: 16 }, () => Math.floor(readRandomUnit(random()) * 256));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = bytes.map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20)\n ].join(\"-\");\n}\n\nfunction readRandomUnit(value: number): number {\n if (Number.isFinite(value) && value >= 0 && value < 1) {\n return value;\n }\n\n throw new RangeError(\"time.uuid() random source must return a number in [0, 1).\");\n}\n\nfunction assertSleepDelay(ms: number): void {\n if (Number.isFinite(ms) && ms >= 0) {\n return;\n }\n\n throw new RangeError(\"time.sleep(ms) requires a non-negative finite millisecond delay.\");\n}\n\nfunction createSleepAbortError(): Error {\n return new Error(\"time.sleep aborted.\");\n}\n", "import { parseModule as parseModuleInternal, type Module } from \"./parse/parser.js\";\nimport { restore as restoreInternal, type SafeJSSnapshot, type RestoreOptions } from \"./restore.js\";\nimport {\n deepCopyFromSandbox as copyFromSandboxInternal,\n type SandboxPromise,\n type SandboxValue\n} from \"./interp/values.js\";\n\nexport { parse } from \"./parse.js\";\nexport const parseModule: (source: string, filename?: string) => Module = parseModuleInternal;\nexport const restore: <TSnapshot extends SafeJSSnapshot>(\n snapshot: TSnapshot,\n options: RestoreOptions\n) => TSnapshot = restoreInternal;\ntype PublicCopyOptions = Omit<\n NonNullable<Parameters<typeof copyFromSandboxInternal>[1]>,\n \"compilation\"\n>;\nexport const deepCopyFromSandbox: {\n (value: SandboxPromise, options?: PublicCopyOptions): Promise<unknown>;\n (value: SandboxValue, options?: PublicCopyOptions): unknown;\n} = copyFromSandboxInternal;\nexport { lint, type Diagnostic, type Fix, type LintFixResult, type LintOptions } from \"./lint.js\";\nexport { run } from \"./run.js\";\nexport { createReplayableRandom, type ReplayableRandom } from \"./random.js\";\nexport type { RunClock, RunClockSnapshot, RunRandom } from \"./run.js\";\nexport { noopOtelSink } from \"./observability/otel.js\";\nexport type { OtelSink, OtelSpan } from \"./observability/otel.js\";\nexport { FileSnapshotBackend } from \"./snapshot/backend.js\";\nexport type { Snapshot, SnapshotBackend } from \"./snapshot/backend.js\";\nexport { declareHostOperation } from \"./interp/host-bridge.js\";\nexport { HostCallResumabilityError } from \"./interp/host-call.js\";\nexport type {\n HostCallLifecycle,\n HostCallOutcome,\n HostCallRecord,\n HostCallResumeContext,\n HostCallResumeProof,\n HostCallResumeProvider,\n HostCallResumeRequest\n} from \"./interp/host-call.js\";\nexport {\n HostOperationResumePolicyError,\n registerPendingHostCallPolicy\n} from \"./snapshot/policy.js\";\nexport type {\n PendingHostCallPolicyMode,\n PendingHostCallPolicyRegistration\n} from \"./snapshot/policy.js\";\nexport { dump, type DumpOptions } from \"./dump.js\";\nexport { inspectSnapshotMigration, migrateSnapshot } from \"./migrate.js\";\nexport { migrateSnapshotFile, type SnapshotMigrationFileOptions } from \"./migration-file.js\";\nexport type {\n SnapshotMigration,\n SnapshotMigrationOptions,\n SnapshotMigrationReconciliation,\n SnapshotMigrationResolution\n} from \"./migrate.js\";\nexport { SnapshotValidationError } from \"./snapshot/validation.js\";\nexport type { SnapshotValidationCode } from \"./snapshot/validation.js\";\nexport { Budget, SandboxError } from \"./interp/budget.js\";\nexport type { BudgetName, BudgetOptions } from \"./interp/budget.js\";\nexport { formatInterpreterError, type InterpreterDiagnostic } from \"./error/format.js\";\nexport { deepCopyToSandbox } from \"./interp/values.js\";\nexport { runHarness, runHarnessPair } from \"./runner/run-harness.js\";\nexport { extractBlock } from \"./loader/extract-block.js\";\nexport { findExportedConstInitializer } from \"./loader/find-exported.js\";\nexport { splitFrontmatter } from \"./loader/frontmatter.js\";\nexport type { ExportDefaultDeclaration, ExportNamedDeclaration, MetaProperty } from \"./parse.js\";\nexport {\n AgentSpawnError,\n createSpawnUsageAccumulator,\n makeAgentModule,\n runWithSpawnUsageAccumulator\n} from \"./modules/agent.js\";\nexport type {\n AgentModuleDefinition,\n AgentModuleOptions,\n AgentModuleParallelCall,\n AgentModuleRetryOptions,\n AgentModuleSpawnOptions,\n AgentSpawnEvent,\n SpawnAgent,\n SpawnAgentInput,\n SpawnAgentResult,\n SpawnUsageAccumulator,\n SpawnUsageTotal\n} from \"./modules/agent.js\";\nexport { EnvAccessError, makeEnvModule, parseEnvConfig } from \"./modules/env.js\";\nexport type { EnvModule, EnvModuleOptions } from \"./modules/env.js\";\nexport { makeFailModule } from \"./modules/fail.js\";\nexport { makeFsModule } from \"./modules/fs.js\";\nexport { parseFsConfig, resolveFsConfig } from \"./modules/fs-config.js\";\nexport type { FsConfig, ResolveFsConfigOptions } from \"./modules/fs-config.js\";\nexport type {\n FsImplementation,\n FsModule,\n FsModuleOptions,\n SandboxDirent,\n SandboxStats\n} from \"./modules/fs.js\";\nexport { makeHarnessModule } from \"./modules/harness.js\";\nexport { makeLogModule } from \"./modules/log.js\";\nexport { makeMetricModule } from \"./modules/metric.js\";\nexport { makeMcpModule } from \"./modules/mcp.js\";\nexport { parseMcpConfig } from \"./modules/mcp-transport.js\";\nexport type { McpModuleOptions, McpServerConfig } from \"./modules/mcp-transport.js\";\nexport type { ManagedMcpClient, ManagedMcpModule, McpNamedServerHandle } from \"./modules/mcp.js\";\nexport { makeTimeModule } from \"./modules/time.js\";\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["parse", "rawModules", "parseModule", "restore", "deepCopyFromSandbox"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SandboxObject, SandboxValue } from "./values.js";
|
|
2
|
+
declare const sandboxArgumentsBrand: unique symbol;
|
|
3
|
+
export type SandboxArguments = SandboxObject & {
|
|
4
|
+
readonly [sandboxArgumentsBrand]: true;
|
|
5
|
+
};
|
|
6
|
+
export declare function createSandboxArguments(values: readonly SandboxValue[]): SandboxArguments;
|
|
7
|
+
export declare function isSandboxArguments(value: unknown): value is SandboxArguments;
|
|
8
|
+
export declare function getSandboxArgumentEntries(value: SandboxObject): Array<[string, SandboxValue]>;
|
|
9
|
+
export declare function copySandboxArgumentProperties(source: SandboxObject, target: object, copyValue: (value: SandboxValue, key: string) => unknown): void;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { ArrowFunctionExpression, AwaitExpression, BlockStatement, FunctionDeclaration, FunctionExpression, ParseResult, SourceSpan } from "../parse.js";
|
|
2
|
+
import { type GeneratorCompletion } from "./generator.js";
|
|
3
|
+
import { type OtelSpan } from "../observability/otel.js";
|
|
4
|
+
import type { Budget } from "./budget.js";
|
|
5
|
+
import type { EvaluationResult } from "./exceptions.js";
|
|
6
|
+
import type { InterpreterError, InterpreterSnapshot, LoopIterationSnapshot } from "./interpreter.js";
|
|
7
|
+
import { CompileScope } from "./regex/compile-guard.js";
|
|
8
|
+
import type { Scope } from "./scope.js";
|
|
9
|
+
import { type SandboxValue } from "./values.js";
|
|
10
|
+
export type InterpreterYieldPoint = {
|
|
11
|
+
kind: "await" | "generator-yield" | "loop-iteration";
|
|
12
|
+
nodeId?: number;
|
|
13
|
+
otelSpan?: OtelSpan;
|
|
14
|
+
replayState?: unknown;
|
|
15
|
+
snapshot: () => InterpreterSnapshot;
|
|
16
|
+
span: SourceSpan;
|
|
17
|
+
};
|
|
18
|
+
type ResumeBreakpoint = Omit<InterpreterYieldPoint, "snapshot">;
|
|
19
|
+
export type AsyncInterpreterError = InterpreterError;
|
|
20
|
+
export type AsyncEvaluationResult = EvaluationResult<AsyncInterpreterError>;
|
|
21
|
+
export type AsyncEvaluationContext = {
|
|
22
|
+
compilation?: CompileScope;
|
|
23
|
+
activeLoopIterations: Map<number, LoopIterationSnapshot>;
|
|
24
|
+
budget: Budget;
|
|
25
|
+
callStack: string[];
|
|
26
|
+
onYield?: (yieldPoint: InterpreterYieldPoint) => void;
|
|
27
|
+
onSuspend?: () => void;
|
|
28
|
+
captureReplayState?: () => unknown;
|
|
29
|
+
rootNode?: ParseResult;
|
|
30
|
+
functionBody?: BlockStatement;
|
|
31
|
+
restoredLoopIterations: Map<number, LoopIterationSnapshot>;
|
|
32
|
+
resumeTarget?: {
|
|
33
|
+
nodeId?: number;
|
|
34
|
+
};
|
|
35
|
+
scope: Scope;
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
snapshot?: (scope: Scope) => InterpreterSnapshot;
|
|
38
|
+
stats: {
|
|
39
|
+
currentDataSize: number;
|
|
40
|
+
nodeVisits: number;
|
|
41
|
+
peakDataSize: number;
|
|
42
|
+
};
|
|
43
|
+
generatorYield?: (value?: SandboxValue, yieldNodeId?: number) => Promise<GeneratorCompletion>;
|
|
44
|
+
generatorResume?: {
|
|
45
|
+
sent: GeneratorCompletion[];
|
|
46
|
+
yieldNodeId: number;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export type EvaluateAsyncNode = (node: ParseResult, context: AsyncEvaluationContext) => Promise<AsyncEvaluationResult>;
|
|
50
|
+
export declare function emitResumeBreakpoint(context: AsyncEvaluationContext, breakpoint: ResumeBreakpoint): void;
|
|
51
|
+
export declare function evaluateArrowFunctionExpression(node: ArrowFunctionExpression, context: AsyncEvaluationContext, evaluateNode: EvaluateAsyncNode): Promise<AsyncEvaluationResult>;
|
|
52
|
+
export declare function evaluateFunctionExpression(node: FunctionExpression, context: AsyncEvaluationContext, evaluateNode: EvaluateAsyncNode): Promise<AsyncEvaluationResult>;
|
|
53
|
+
export declare function createInterpretedClosure(node: ArrowFunctionExpression | FunctionDeclaration | FunctionExpression, context: AsyncEvaluationContext, evaluateNode: EvaluateAsyncNode): import("./values.js").SandboxClosure;
|
|
54
|
+
export declare function evaluateAwaitExpression(node: AwaitExpression, context: AsyncEvaluationContext, evaluateNode: EvaluateAsyncNode): Promise<AsyncEvaluationResult>;
|
|
55
|
+
export declare function normalizeClosureResult(result: SandboxValue | Promise<SandboxValue> | PromiseLike<SandboxValue>, budget?: Budget): SandboxValue;
|
|
56
|
+
export {};
|