@bo-agent/sandbox 0.0.1
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 +29 -0
- package/lib/.tsbuildinfo +1 -0
- package/lib/escalation.d.ts +135 -0
- package/lib/escalation.d.ts.map +1 -0
- package/lib/escalation.js +127 -0
- package/lib/escalation.js.map +1 -0
- package/lib/index.d.ts +144 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +47 -0
- package/lib/index.js.map +1 -0
- package/lib/invariant.d.ts +15 -0
- package/lib/invariant.d.ts.map +1 -0
- package/lib/invariant.js +17 -0
- package/lib/invariant.js.map +1 -0
- package/lib/roots.d.ts +37 -0
- package/lib/roots.d.ts.map +1 -0
- package/lib/roots.js +54 -0
- package/lib/roots.js.map +1 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# @bo-agent/sandbox
|
|
2
|
+
|
|
3
|
+
Abstract process-sandbox service definition. Owns the `SandboxProvider` contract, the confinement vocabulary, and the fail-closed `SANDBOX_UNAVAILABLE` error. Has no backend dependency — only `cordis` plus the harness error base.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
`confine(argv, policy)` returns the argv to spawn INSTEAD of your own — wrapped so the process (and everything it spawns) runs confined — plus the selected backend's enforcement completeness, denial dialect (`denialSignatures`), and structured runner-failure evidence (`runnerFailureRules`); when no backend is usable it throws rather than passing the argv through unconfined.
|
|
8
|
+
|
|
9
|
+
## Types
|
|
10
|
+
|
|
11
|
+
| Export | Purpose |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `SandboxProvider` | The service contract (`confine`) |
|
|
14
|
+
| `SandboxMode` | `'read-only' \| 'workspace-write' \| 'danger-full-access'` |
|
|
15
|
+
| `ConfinedSandboxMode` | Modes that actually confine (`'read-only' \| 'workspace-write'`) |
|
|
16
|
+
| `SandboxEnforcement` | `'full' \| 'partial'` (per kernel ABI) |
|
|
17
|
+
| `SandboxPolicy` | `{ mode: ConfinedSandboxMode, workspaceRoot: string, sessionId?: SessionId }` |
|
|
18
|
+
| `SandboxExecutionPolicy` | The full per-call policy (including `danger-full-access`) |
|
|
19
|
+
| `ConfinedArgv` | `{ argv, enforcement, denialSignatures, runnerFailureRules }` |
|
|
20
|
+
| `SandboxUnavailableError` | Thrown when no backend can confine (fail-closed) |
|
|
21
|
+
| `SessionId` | Per-session identifier carried by workspace-write grants |
|
|
22
|
+
|
|
23
|
+
## Fail-closed semantics
|
|
24
|
+
|
|
25
|
+
`confine` throws `SandboxUnavailableError` (`.name === 'SANDBOX_UNAVAILABLE'`) instead of passing the argv through unconfined. Consumers should catch this and surface a model-facing message — never silently fall through.
|
|
26
|
+
|
|
27
|
+
## Implementations
|
|
28
|
+
|
|
29
|
+
[`@bo-agent/sandbox-local`](../sandbox-local/) — Linux: `bwrap`, else the per-platform Landlock launcher; macOS: `sandbox-exec`/Seatbelt; Windows: ACL restricted-token runner.
|
package/lib/.tsbuildinfo
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.full.d.ts","../../inline/lib/harness-error.d.ts","../../inline/lib/assert-never.d.ts","../../inline/lib/session-id.d.ts","../../inline/lib/index.d.ts","../../../node_modules/.pnpm/cosmokit@1.8.1/node_modules/cosmokit/lib/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/utils.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/registry.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/reflect.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/fiber.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/events.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/logger.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/context.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/service.d.ts","../../../node_modules/.pnpm/cordis@4.0.0-rc.10/node_modules/cordis/lib/index.d.ts","../src/roots.ts","../src/index.ts","../src/escalation.ts","../src/invariant.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/index.d.ts"],"fileIdsList":[[100,149,166,167],[100,146,147,149,166,167],[100,148,149,166,167],[149,166,167],[100,149,154,166,167,184],[100,149,150,155,160,166,167,169,181,192],[100,149,150,151,160,166,167,169],[95,96,97,100,149,166,167],[100,149,152,166,167,193],[100,149,153,154,161,166,167,170],[100,149,154,166,167,181,189],[100,149,155,157,160,166,167,169],[100,148,149,156,166,167],[100,149,157,158,166,167],[100,149,159,160,166,167],[100,148,149,160,166,167],[100,149,160,161,162,166,167,181,192],[100,149,160,161,162,166,167,176,181,184],[100,141,149,157,160,163,166,167,169,181,192],[100,149,160,161,163,164,166,167,169,181,189,192],[100,149,163,165,166,167,181,189,192],[98,99,100,101,102,103,104,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[100,149,160,166,167],[100,149,166,167,168,192],[100,149,157,160,166,167,169,181],[100,149,166,167,170],[100,149,166,167,171],[100,148,149,166,167,172],[100,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[100,149,166,167,174],[100,149,166,167,175],[100,149,160,166,167,176,177],[100,149,166,167,176,178,193,195],[100,149,161,166,167],[100,149,160,166,167,181,182,184],[100,149,166,167,183,184],[100,149,166,167,181,182],[100,149,166,167,184],[100,149,166,167,185],[100,146,149,166,167,181,186,192],[100,149,160,166,167,187,188],[100,149,166,167,187,188],[100,149,154,166,167,169,181,189],[100,149,166,167,190],[100,149,166,167,169,191],[100,149,163,166,167,175,192],[100,149,154,166,167,193],[100,149,166,167,181,194],[100,149,166,167,168,195],[100,149,166,167,196],[100,141,149,166,167],[100,141,149,160,162,166,167,172,181,184,192,194,195,197],[100,149,166,167,181,198],[80,82,83,84,85,86,87,100,149,166,167],[80,83,84,85,86,87,88,100,149,166,167],[80,81,82,83,84,85,86,87,88,100,149,166,167],[82,83,84,85,86,87,88,89,100,149,166,167],[82,83,84,85,86,87,88,100,149,166,167],[90,92,100,149,166,167],[100,113,117,149,166,167,192],[100,113,149,166,167,181,192],[100,108,149,166,167],[100,110,113,149,166,167,189,192],[100,149,166,167,169,189],[100,149,166,167,199],[100,108,149,166,167,199],[100,110,113,149,166,167,169,192],[100,105,106,109,112,149,160,166,167,181,192],[100,113,120,149,166,167],[100,105,111,149,166,167],[100,113,134,135,149,166,167],[100,109,113,149,166,167,184,192,199],[100,134,149,166,167,199],[100,107,108,149,166,167,199],[100,113,149,166,167],[100,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,149,166,167],[100,113,128,149,166,167],[100,113,120,121,149,166,167],[100,111,113,121,122,149,166,167],[100,112,149,166,167],[100,105,108,113,149,166,167],[100,113,117,121,122,149,166,167],[100,117,149,166,167],[100,111,113,116,149,166,167,192],[100,105,110,113,120,149,166,167],[100,149,166,167,181],[100,108,113,134,149,166,167,197,199],[76,77,78,100,149,166,167],[79,92,100,149,166,167],[79,90,91,92,93,100,149,166,167],[92,100,149,161,166,167,170]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3e9cef4eed59f8a2249ed834ba4aabe9d0d4e9037d4679487fa17dad99004a3","impliedFormat":1},"3207040072c5856d33d3f2f039436dc39a81b1dea1577702ff9b7d705bf2ceb5","8176d2ff27e0d895260bb1f1b3e094ab521819e7536c79bad057f6c475f00ee6","70b6cdce0800a89493f582f239c4cc49f4dba7e5b0e674f651d039476333fca0","e0ecc9ceeb052adc8590f8e527e58d572ae564f7b90a407295e4846b9bdb7b8a",{"version":"0e7086243656ce24ba7dfe15a8d8e3cd4310afa6cbddb97dd06d5dc399794676","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"1f9b9bc4eb18864e8c1628ecd0630442eb857e7b77322559a9a00004f1e39d80","impliedFormat":99},{"version":"598ee676b4645a043e7c4198d53221dd8c44bc628b12776efd8bc6fabd804ced","impliedFormat":99},{"version":"3de8c258acd8647678a8c96db4cee1151a16bc18626028a9c7b33b6bdd037db9","impliedFormat":99},{"version":"b7f6288c956d50a63f4d14610f39df7f7b1e9d481413a0e95c82c37179448ddc","impliedFormat":99},{"version":"18930b7045a527847a039cf29af8927c8079414527707396672ed3cd706fc399","impliedFormat":99},{"version":"7395b909d9b5c754cf8af3937a7ac783bd82eeea31c42a35a02bbcfb5db945a4","impliedFormat":99},{"version":"3a0bf69f6275288de8b20cc353c1e0e6c6d61644789ddec51b526d0d5166acc1","impliedFormat":99},{"version":"6adf2288c91294fe0c68828187e96820b0620fe5d78f79ccbff06d230d9b0c8e","impliedFormat":99},{"version":"8cc48b522565f226e5bdb0f6a4d4b1bcdc8f82ac72c32fd869831a96f583b3cc","impliedFormat":99},{"version":"3cf059ec4c39a8b7e64516a2c0131f4479e83b923d43a6587a17ba4b0aaa7e34","signature":"eb85ac6e1d061fa97b89e2cf810253e688a0f008a71bfd3a720f05788966d932"},{"version":"a3f92b80ffd5d7a73e3a871ed2f4c3436a4b942920dd042c31edea09e2765399","signature":"10f45007344ec6e7bd7384ab49b8b72feafcdc9df3d20d040ac058b0514f5a1b"},{"version":"3b6b5b7acfed8c7b4a4c796ed3323b4ad9246e285583c07ebd47d53ed120c7fe","signature":"eab4d0f1a497f676581d205a6019850414d7aac01f9ae05e8320d250d7409cf3"},{"version":"14fcd4e4c6d3df167366475e8af0338351b1a842b4ed421e5fd6f0ded13c82a4","signature":"287f1511ea365951a6ad78bb08758cb173cd94b17306d9229582635b70027d69"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1}],"root":[[91,94]],"options":{"allowImportingTsExtensions":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","rewriteRelativeImportExtensions":true,"rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":11,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":false},"referencedMap":[[81,1],[146,2],[147,2],[148,3],[100,4],[149,5],[150,6],[151,7],[95,1],[98,8],[96,1],[97,1],[152,9],[153,10],[154,11],[155,12],[156,13],[157,14],[158,14],[159,15],[160,16],[161,17],[162,18],[101,1],[99,1],[163,19],[164,20],[165,21],[199,22],[166,23],[167,1],[168,24],[169,25],[170,26],[171,27],[172,28],[173,29],[174,30],[175,31],[176,32],[177,32],[178,33],[179,1],[180,34],[181,35],[183,36],[182,37],[184,38],[185,39],[186,40],[187,41],[188,42],[189,43],[190,44],[191,45],[192,46],[193,47],[194,48],[195,49],[196,50],[102,1],[103,1],[104,1],[142,51],[143,1],[144,1],[145,38],[197,52],[198,53],[88,54],[86,55],[85,56],[90,57],[87,58],[84,55],[83,56],[89,58],[82,59],[80,1],[73,1],[74,1],[14,1],[12,1],[13,1],[18,1],[17,1],[2,1],[19,1],[20,1],[21,1],[22,1],[23,1],[24,1],[25,1],[26,1],[3,1],[27,1],[28,1],[4,1],[29,1],[33,1],[30,1],[31,1],[32,1],[34,1],[35,1],[36,1],[5,1],[37,1],[38,1],[39,1],[40,1],[6,1],[44,1],[41,1],[42,1],[43,1],[45,1],[7,1],[46,1],[51,1],[52,1],[47,1],[48,1],[49,1],[50,1],[8,1],[56,1],[53,1],[54,1],[55,1],[57,1],[9,1],[58,1],[59,1],[60,1],[62,1],[61,1],[63,1],[64,1],[10,1],[65,1],[66,1],[67,1],[11,1],[75,1],[68,1],[69,1],[70,1],[71,1],[72,1],[1,1],[16,1],[15,1],[120,60],[130,61],[119,60],[140,62],[111,63],[110,64],[139,65],[133,66],[138,67],[113,68],[127,69],[112,70],[136,71],[108,72],[107,65],[137,73],[109,74],[114,75],[115,1],[118,75],[105,1],[141,76],[131,77],[122,78],[123,79],[125,80],[121,81],[124,82],[134,65],[116,83],[117,84],[126,85],[106,86],[129,77],[128,75],[132,1],[135,87],[77,1],[76,1],[79,88],[78,1],[93,89],[92,90],[94,1],[91,91]],"latestChangedDtsFile":"./invariant.d.ts","version":"5.9.3"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The escalation vocabulary and choreography shared by every sandbox-enforcing
|
|
3
|
+
* tool family: the
|
|
4
|
+
* strictly-wider ladder, the argument-pairing validation, the model-facing
|
|
5
|
+
* denial/hint markers, and {@link approveEscalation} — the ordered fail-closed
|
|
6
|
+
* sequence that resolves a `sandbox_permissions` request through a
|
|
7
|
+
* user-approval channel BEFORE anything executes. One home keeps the two
|
|
8
|
+
* families' approval ordering and verbatim error texts from drifting apart.
|
|
9
|
+
*
|
|
10
|
+
* The channel is a minimal STRUCTURAL function shape ({@link EscalationAsk}),
|
|
11
|
+
* not the approval service type: the tool layer — which owns the agent, the
|
|
12
|
+
* call id, and the tool name — closes over `ctx.approval.request(...)` and
|
|
13
|
+
* hands the closure down, so this package never depends on the approval or
|
|
14
|
+
* agent packages.
|
|
15
|
+
*
|
|
16
|
+
* @module @bo-agent/sandbox/escalation
|
|
17
|
+
*/
|
|
18
|
+
import type { SandboxMode } from './index.ts';
|
|
19
|
+
/**
|
|
20
|
+
* The strictly-wider table: what a call whose effective mode is the key may
|
|
21
|
+
* escalate TO. Checked at EXECUTION, never baked into a tool schema — the
|
|
22
|
+
* schema's enum is {@link ESCALATION_TARGETS}, because schemas are
|
|
23
|
+
* registry-global while the effective mode is per-call truth.
|
|
24
|
+
*/
|
|
25
|
+
export declare const WIDER_MODES: Record<string, readonly SandboxMode[]>;
|
|
26
|
+
/**
|
|
27
|
+
* The closed escalation-target vocabulary — every mode a call could ever
|
|
28
|
+
* escalate TO (`read-only` is the floor; nothing escalates to it). Advertised
|
|
29
|
+
* whenever the mounted capability confines: cutting the enum down to the modes
|
|
30
|
+
* wider than the composition's DEFAULT would strand a session whose effective
|
|
31
|
+
* mode sits below it (a `danger-full-access` default would advertise nothing
|
|
32
|
+
* while a narrower-switched session stays confined with no lever).
|
|
33
|
+
*/
|
|
34
|
+
export declare const ESCALATION_TARGETS: readonly SandboxMode[];
|
|
35
|
+
/**
|
|
36
|
+
* Validate the escalation argument pairing a tool schema cannot express:
|
|
37
|
+
* `sandbox_permissions` and `justification` travel together — an approval
|
|
38
|
+
* prompt without a reason, or a reason driving nothing, is a malformed ask —
|
|
39
|
+
* and the justification must be a non-empty sentence.
|
|
40
|
+
* @param sandboxPermissions - the raw `sandbox_permissions` argument, if given.
|
|
41
|
+
* @param justification - the raw `justification` argument, if given.
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateEscalationArgs(sandboxPermissions: string | undefined, justification: string | undefined): void;
|
|
44
|
+
/**
|
|
45
|
+
* The model-facing denial marker — the one vocabulary both enforcing families
|
|
46
|
+
* teach and report, so the model recognizes a policy denial identically
|
|
47
|
+
* whether the kernel refused a bash file effect or the filesystem provider's
|
|
48
|
+
* fence refused a mutation.
|
|
49
|
+
* @param mode - the mode the denied call ran under.
|
|
50
|
+
* @returns the marker line, exactly as the model sees it.
|
|
51
|
+
*/
|
|
52
|
+
export declare function sandboxDenialMarker(mode: SandboxMode): string;
|
|
53
|
+
/**
|
|
54
|
+
* The same-turn escalation hint that rides a denial when the composition
|
|
55
|
+
* advertises the escalation fields — the nudge lives at the decision point so
|
|
56
|
+
* the sanctioned retry does not depend on the model recalling the tool
|
|
57
|
+
* description.
|
|
58
|
+
* @param subject - the family's noun for the denied action (`command` for
|
|
59
|
+
* bash, `operation` for a filesystem mutation).
|
|
60
|
+
* @returns the hint line, exactly as the model sees it.
|
|
61
|
+
*/
|
|
62
|
+
export declare function escalationHintMarker(subject: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* The closed outcome vocabulary of one escalation ask — structurally identical
|
|
65
|
+
* to the approval seam's `ApprovalOutcome` so an `ApprovalService.request`
|
|
66
|
+
* return is assignable without this package importing it.
|
|
67
|
+
*/
|
|
68
|
+
export type EscalationOutcome = 'allowed-once' | 'rejected' | 'cancelled' | 'unavailable';
|
|
69
|
+
/**
|
|
70
|
+
* The minimal approval-request shape {@link approveEscalation} needs —
|
|
71
|
+
* structurally the approval seam's `ApprovalService`, generic over the agent
|
|
72
|
+
* type `A` and call-id type `C` so this package resolves escalations through
|
|
73
|
+
* `ctx.approval` without importing the approval or agent packages (the tool
|
|
74
|
+
* layer infers `A`/`C` as its own `Agent`/`CallId`).
|
|
75
|
+
*/
|
|
76
|
+
export interface EscalationApprover<A = object, C = string> {
|
|
77
|
+
/**
|
|
78
|
+
* Ask the human to approve one action, resolving to a closed outcome.
|
|
79
|
+
* @param req - the audit-self-contained request (agent, tool, call id, reason, optional signal).
|
|
80
|
+
* @returns the human's decision as a closed {@link EscalationOutcome}.
|
|
81
|
+
*/
|
|
82
|
+
request(req: {
|
|
83
|
+
agent: A;
|
|
84
|
+
toolName: string;
|
|
85
|
+
callId: C;
|
|
86
|
+
reason: string;
|
|
87
|
+
signal?: AbortSignal;
|
|
88
|
+
}): Promise<EscalationOutcome>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The approval ingredients an escalating tool hands {@link approveEscalation}:
|
|
92
|
+
* the approval requester (`ctx.approval`, or `undefined` when none is
|
|
93
|
+
* composed), the calling agent (or `undefined` for an agent-less execution),
|
|
94
|
+
* and the call's identity. The tool layer holds all of these; this package
|
|
95
|
+
* only judges them.
|
|
96
|
+
*/
|
|
97
|
+
export interface EscalationApproval<A = object, C = string> {
|
|
98
|
+
/** The approval requester (`ctx.approval`), or `undefined` when none is composed. */
|
|
99
|
+
approver: EscalationApprover<A, C> | undefined;
|
|
100
|
+
/** The calling agent, or `undefined` for an agent-less execution (fails closed). */
|
|
101
|
+
agent: A | undefined;
|
|
102
|
+
/** The tool-call id the approval prompt attaches to. */
|
|
103
|
+
callId: C;
|
|
104
|
+
/** The tool name recorded on the approval request. */
|
|
105
|
+
toolName: string;
|
|
106
|
+
/** The tool-execution abort signal the approval request rides, when present. */
|
|
107
|
+
signal?: AbortSignal;
|
|
108
|
+
}
|
|
109
|
+
/** One escalation request, as {@link approveEscalation} judges it. */
|
|
110
|
+
export interface EscalationRequest {
|
|
111
|
+
/** The requested target mode (schema-pinned to {@link ESCALATION_TARGETS} when advertised). */
|
|
112
|
+
requestedMode: string;
|
|
113
|
+
/** The model's one-sentence reason, shown verbatim to the user inside the audit reason. */
|
|
114
|
+
justification: string;
|
|
115
|
+
/** The call's effective mode (session override ?? composition default) the request must strictly widen. */
|
|
116
|
+
effectiveMode: SandboxMode;
|
|
117
|
+
/** The family's noun for the escalated action in user-facing texts (`command` for bash, `operation` for fs). */
|
|
118
|
+
subject: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Resolve a sandbox-escalation request BEFORE anything executes: check strict
|
|
122
|
+
* widening against the call's effective mode, then resolve the approval
|
|
123
|
+
* channel, then map every outcome — the ordered fail-closed sequence both
|
|
124
|
+
* enforcing families share. Returns the granted mode to stamp onto exactly
|
|
125
|
+
* this call; throws the distinct verbatim text for every other path (a
|
|
126
|
+
* non-widening request, a missing approval service, an agent-less execution,
|
|
127
|
+
* a rejection, a cancellation, an unanswerable ask) — the tool registry turns
|
|
128
|
+
* the throw into the call's isError result, and nothing has run. A
|
|
129
|
+
* non-widening request never prompts a human.
|
|
130
|
+
* @param request - the escalation to judge (see {@link EscalationRequest}).
|
|
131
|
+
* @param approval - the approval ingredients the tool holds (see {@link EscalationApproval}).
|
|
132
|
+
* @returns the granted mode, consumed by the one call that asked.
|
|
133
|
+
*/
|
|
134
|
+
export declare function approveEscalation<A, C>(request: EscalationRequest, approval: EscalationApproval<A, C>): Promise<SandboxMode>;
|
|
135
|
+
//# sourceMappingURL=escalation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation.d.ts","sourceRoot":"","sources":["../src/escalation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAG9D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,WAAW,EAA8C,CAAA;AAEnG;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUtH;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAA;AAEzF;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM;IACxD;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAC1H;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM;IACxD,qFAAqF;IACrF,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAC9C,oFAAoF;IACpF,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;IACpB,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAA;IACT,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAA;IACrB,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAA;IACrB,2GAA2G;IAC3G,aAAa,EAAE,WAAW,CAAA;IAC1B,gHAAgH;IAChH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAgClI"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The escalation vocabulary and choreography shared by every sandbox-enforcing
|
|
3
|
+
* tool family: the
|
|
4
|
+
* strictly-wider ladder, the argument-pairing validation, the model-facing
|
|
5
|
+
* denial/hint markers, and {@link approveEscalation} — the ordered fail-closed
|
|
6
|
+
* sequence that resolves a `sandbox_permissions` request through a
|
|
7
|
+
* user-approval channel BEFORE anything executes. One home keeps the two
|
|
8
|
+
* families' approval ordering and verbatim error texts from drifting apart.
|
|
9
|
+
*
|
|
10
|
+
* The channel is a minimal STRUCTURAL function shape ({@link EscalationAsk}),
|
|
11
|
+
* not the approval service type: the tool layer — which owns the agent, the
|
|
12
|
+
* call id, and the tool name — closes over `ctx.approval.request(...)` and
|
|
13
|
+
* hands the closure down, so this package never depends on the approval or
|
|
14
|
+
* agent packages.
|
|
15
|
+
*
|
|
16
|
+
* @module @bo-agent/sandbox/escalation
|
|
17
|
+
*/
|
|
18
|
+
import { assertNever } from '@bo-agent/inline';
|
|
19
|
+
/**
|
|
20
|
+
* The strictly-wider table: what a call whose effective mode is the key may
|
|
21
|
+
* escalate TO. Checked at EXECUTION, never baked into a tool schema — the
|
|
22
|
+
* schema's enum is {@link ESCALATION_TARGETS}, because schemas are
|
|
23
|
+
* registry-global while the effective mode is per-call truth.
|
|
24
|
+
*/
|
|
25
|
+
export const WIDER_MODES = {
|
|
26
|
+
'read-only': ['workspace-write', 'danger-full-access'],
|
|
27
|
+
'workspace-write': ['danger-full-access'],
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The closed escalation-target vocabulary — every mode a call could ever
|
|
31
|
+
* escalate TO (`read-only` is the floor; nothing escalates to it). Advertised
|
|
32
|
+
* whenever the mounted capability confines: cutting the enum down to the modes
|
|
33
|
+
* wider than the composition's DEFAULT would strand a session whose effective
|
|
34
|
+
* mode sits below it (a `danger-full-access` default would advertise nothing
|
|
35
|
+
* while a narrower-switched session stays confined with no lever).
|
|
36
|
+
*/
|
|
37
|
+
export const ESCALATION_TARGETS = ['workspace-write', 'danger-full-access'];
|
|
38
|
+
/**
|
|
39
|
+
* Validate the escalation argument pairing a tool schema cannot express:
|
|
40
|
+
* `sandbox_permissions` and `justification` travel together — an approval
|
|
41
|
+
* prompt without a reason, or a reason driving nothing, is a malformed ask —
|
|
42
|
+
* and the justification must be a non-empty sentence.
|
|
43
|
+
* @param sandboxPermissions - the raw `sandbox_permissions` argument, if given.
|
|
44
|
+
* @param justification - the raw `justification` argument, if given.
|
|
45
|
+
*/
|
|
46
|
+
export function validateEscalationArgs(sandboxPermissions, justification) {
|
|
47
|
+
if (sandboxPermissions !== undefined && justification === undefined) {
|
|
48
|
+
throw new Error('invalid escalation: sandbox_permissions requires a justification');
|
|
49
|
+
}
|
|
50
|
+
if (justification !== undefined && sandboxPermissions === undefined) {
|
|
51
|
+
throw new Error('invalid escalation: justification is only valid together with sandbox_permissions');
|
|
52
|
+
}
|
|
53
|
+
if (justification !== undefined && justification.trim().length === 0) {
|
|
54
|
+
throw new Error('invalid justification: expected a non-empty sentence');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The model-facing denial marker — the one vocabulary both enforcing families
|
|
59
|
+
* teach and report, so the model recognizes a policy denial identically
|
|
60
|
+
* whether the kernel refused a bash file effect or the filesystem provider's
|
|
61
|
+
* fence refused a mutation.
|
|
62
|
+
* @param mode - the mode the denied call ran under.
|
|
63
|
+
* @returns the marker line, exactly as the model sees it.
|
|
64
|
+
*/
|
|
65
|
+
export function sandboxDenialMarker(mode) {
|
|
66
|
+
return `[sandbox: file access denied under ${mode} mode]`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The same-turn escalation hint that rides a denial when the composition
|
|
70
|
+
* advertises the escalation fields — the nudge lives at the decision point so
|
|
71
|
+
* the sanctioned retry does not depend on the model recalling the tool
|
|
72
|
+
* description.
|
|
73
|
+
* @param subject - the family's noun for the denied action (`command` for
|
|
74
|
+
* bash, `operation` for a filesystem mutation).
|
|
75
|
+
* @returns the hint line, exactly as the model sees it.
|
|
76
|
+
*/
|
|
77
|
+
export function escalationHintMarker(subject) {
|
|
78
|
+
return `[sandbox: escalation available — retry this exact ${subject} once with sandbox_permissions (the narrowest wider mode that suffices) + justification; the approval prompt asks the user]`;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve a sandbox-escalation request BEFORE anything executes: check strict
|
|
82
|
+
* widening against the call's effective mode, then resolve the approval
|
|
83
|
+
* channel, then map every outcome — the ordered fail-closed sequence both
|
|
84
|
+
* enforcing families share. Returns the granted mode to stamp onto exactly
|
|
85
|
+
* this call; throws the distinct verbatim text for every other path (a
|
|
86
|
+
* non-widening request, a missing approval service, an agent-less execution,
|
|
87
|
+
* a rejection, a cancellation, an unanswerable ask) — the tool registry turns
|
|
88
|
+
* the throw into the call's isError result, and nothing has run. A
|
|
89
|
+
* non-widening request never prompts a human.
|
|
90
|
+
* @param request - the escalation to judge (see {@link EscalationRequest}).
|
|
91
|
+
* @param approval - the approval ingredients the tool holds (see {@link EscalationApproval}).
|
|
92
|
+
* @returns the granted mode, consumed by the one call that asked.
|
|
93
|
+
*/
|
|
94
|
+
export async function approveEscalation(request, approval) {
|
|
95
|
+
const { requestedMode: mode, effectiveMode, justification, subject } = request;
|
|
96
|
+
// Strict widening is an EXECUTION check against the call's effective mode —
|
|
97
|
+
// deliberately not a schema constraint (the enum is the closed target
|
|
98
|
+
// vocabulary; the effective mode is per-call truth).
|
|
99
|
+
if (!(WIDER_MODES[effectiveMode] ?? []).includes(mode)) {
|
|
100
|
+
throw new Error(`sandbox escalation to "${mode}" is not strictly wider than this call's current "${effectiveMode}" mode`);
|
|
101
|
+
}
|
|
102
|
+
if (approval.approver === undefined) {
|
|
103
|
+
throw new Error(`sandbox escalation to "${mode}" requires approval, but no approval service is composed`);
|
|
104
|
+
}
|
|
105
|
+
if (approval.agent === undefined) {
|
|
106
|
+
throw new Error(`sandbox escalation to "${mode}" requires approval, but the call has no agent to route it through`);
|
|
107
|
+
}
|
|
108
|
+
// Self-contained for the audit trail: approval/asked stores this reason,
|
|
109
|
+
// and the target mode is part of the grant's identity.
|
|
110
|
+
const outcome = await approval.approver.request({
|
|
111
|
+
agent: approval.agent,
|
|
112
|
+
toolName: approval.toolName,
|
|
113
|
+
callId: approval.callId,
|
|
114
|
+
reason: `escalate sandbox to ${mode}: ${justification}`,
|
|
115
|
+
...approval.signal ? { signal: approval.signal } : {},
|
|
116
|
+
});
|
|
117
|
+
switch (outcome) {
|
|
118
|
+
// The schema enum already pinned `mode` to the closed target vocabulary;
|
|
119
|
+
// the check above proved it is strictly wider.
|
|
120
|
+
case 'allowed-once': return mode;
|
|
121
|
+
case 'rejected': throw new Error(`the user rejected escalating this ${subject} to "${mode}"`);
|
|
122
|
+
case 'cancelled': throw new Error(`approval for escalating to "${mode}" was cancelled`);
|
|
123
|
+
case 'unavailable': throw new Error(`sandbox escalation to "${mode}" requires approval, but no approval channel is available`);
|
|
124
|
+
default: return assertNever(outcome, 'EscalationOutcome');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=escalation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation.js","sourceRoot":"","sources":["../src/escalation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2C;IACjE,WAAW,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;IACtD,iBAAiB,EAAE,CAAC,oBAAoB,CAAC;CAC1C,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA2B,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAA;AAEnG;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,kBAAsC,EAAE,aAAiC;IAC9G,IAAI,kBAAkB,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;IACrF,CAAC;IACD,IAAI,aAAa,KAAK,SAAS,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAA;IACtG,CAAC;IACD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,OAAO,sCAAsC,IAAI,QAAQ,CAAA;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,qDAAqD,OAAO,6HAA6H,CAAA;AAClM,CAAC;AAyDD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAO,OAA0B,EAAE,QAAkC;IAC1G,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAC9E,4EAA4E;IAC5E,sEAAsE;IACtE,qDAAqD;IACrD,IAAI,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAmB,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,qDAAqD,aAAa,QAAQ,CAAC,CAAA;IAC3H,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,0DAA0D,CAAC,CAAA;IAC3G,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,oEAAoE,CAAC,CAAA;IACrH,CAAC;IACD,yEAAyE;IACzE,uDAAuD;IACvD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,uBAAuB,IAAI,KAAK,aAAa,EAAE;QACvD,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;KACtD,CAAC,CAAA;IACF,QAAQ,OAAO,EAAE,CAAC;QAChB,yEAAyE;QACzE,+CAA+C;QAC/C,KAAK,cAAc,CAAC,CAAC,OAAO,IAAmB,CAAA;QAC/C,KAAK,UAAU,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,QAAQ,IAAI,GAAG,CAAC,CAAA;QAC7F,KAAK,WAAW,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,iBAAiB,CAAC,CAAA;QACvF,KAAK,aAAa,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,2DAA2D,CAAC,CAAA;QAC9H,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Definition for the same-world process-confinement capability seam: wrap exact subprocess argv under a
|
|
3
|
+
* host-path file policy. Containers, microVMs, and remote execution replace the
|
|
4
|
+
* surrounding capability seam instead; this service shares the host kernel and filesystem.
|
|
5
|
+
* @module @bo-agent/sandbox
|
|
6
|
+
*/
|
|
7
|
+
import { Context, Service } from 'cordis';
|
|
8
|
+
import { HarnessError } from '@bo-agent/inline';
|
|
9
|
+
import type { SessionId } from '@bo-agent/inline';
|
|
10
|
+
export type { SessionId };
|
|
11
|
+
export { ESCALATION_TARGETS, WIDER_MODES, approveEscalation, escalationHintMarker, sandboxDenialMarker, validateEscalationArgs, } from './escalation.ts';
|
|
12
|
+
export type { EscalationApproval, EscalationApprover, EscalationOutcome, EscalationRequest } from './escalation.ts';
|
|
13
|
+
export { canonicalPath, writableRoots } from './roots.ts';
|
|
14
|
+
/**
|
|
15
|
+
* File-effect policy for confined processes. `read-only` permits only required
|
|
16
|
+
* sinks such as `/dev/null`; `workspace-write` also permits the workspace and a
|
|
17
|
+
* backend-defined temp area; `danger-full-access` bypasses confinement. Network
|
|
18
|
+
* and process visibility are outside this vocabulary.
|
|
19
|
+
*/
|
|
20
|
+
export type SandboxMode = 'read-only' | 'workspace-write' | 'danger-full-access';
|
|
21
|
+
/** A confining (non-`danger-full-access`) mode — the modes a {@link SandboxPolicy} can carry. */
|
|
22
|
+
export type ConfinedSandboxMode = Exclude<SandboxMode, 'danger-full-access'>;
|
|
23
|
+
/**
|
|
24
|
+
* The complete file-effect policy resolved for one capability call. The root
|
|
25
|
+
* is carried even under modes that do not consume it so callers can resolve
|
|
26
|
+
* policy once before choosing the enforcement path.
|
|
27
|
+
*/
|
|
28
|
+
export interface SandboxExecutionPolicy {
|
|
29
|
+
/** The file-effect mode this execution runs under. */
|
|
30
|
+
mode: SandboxMode;
|
|
31
|
+
/** Absolute root directory `workspace-write` may write under. */
|
|
32
|
+
workspaceRoot: string;
|
|
33
|
+
/**
|
|
34
|
+
* Opaque identity of the calling session (the branded `dsh-session`
|
|
35
|
+
* SessionId). Backends key per-session state off it (e.g. windows-acl gives
|
|
36
|
+
* each live session/workspace pair a random private temp directory and SID,
|
|
37
|
+
* while the workspace SID and standing grant remain per-workspace); absent
|
|
38
|
+
* for agentless calls, which fall back to per-call backend state.
|
|
39
|
+
*/
|
|
40
|
+
sessionId?: SessionId;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Enforcement completeness for this host. `partial` means an active backend or
|
|
44
|
+
* older kernel ABI cannot govern every promised file effect; callers requiring
|
|
45
|
+
* an absolute boundary must not treat it as `full`.
|
|
46
|
+
*/
|
|
47
|
+
export type SandboxEnforcement = 'full' | 'partial';
|
|
48
|
+
/**
|
|
49
|
+
* What one confined execution is allowed to touch — carried PER CALL, not
|
|
50
|
+
* fixed on the provider: two consumers may confine under different policies
|
|
51
|
+
* at the same instant (bash under `read-only` while a confined child agent
|
|
52
|
+
* needs its state directory writable), and an approved escalated retry is a
|
|
53
|
+
* new call with a wider policy. Defaulting/resolution is an explicit step at
|
|
54
|
+
* the consumer boundary; the provider treats the policy as fully specified.
|
|
55
|
+
*/
|
|
56
|
+
export interface SandboxPolicy extends SandboxExecutionPolicy {
|
|
57
|
+
/** The file-effect mode this execution runs under. */
|
|
58
|
+
mode: ConfinedSandboxMode;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Evidence that identifies a sandbox runner failing before it executes the
|
|
62
|
+
* wrapped command. A consumer first applies {@link allowedExitCodes} when
|
|
63
|
+
* present, removes {@link informationalLines} by case-insensitive exact line
|
|
64
|
+
* equality, then matches {@link fatalSignatures} case-insensitively within
|
|
65
|
+
* each remaining stderr line. Exit status alone never proves runner failure.
|
|
66
|
+
*/
|
|
67
|
+
export interface RunnerFailureRule {
|
|
68
|
+
/** Nonzero process exit codes on which this rule may match; omitted permits any nonzero exit. */
|
|
69
|
+
allowedExitCodes?: readonly number[];
|
|
70
|
+
/** Non-empty substrings identifying a fatal runner diagnostic on one stderr line. */
|
|
71
|
+
fatalSignatures: readonly string[];
|
|
72
|
+
/** Benign stderr lines excluded by exact full-line equality before fatal matching. */
|
|
73
|
+
informationalLines?: readonly string[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A {@link SandboxProvider.confine} result: the argv to spawn in place of
|
|
77
|
+
* the caller's own, plus the enforcement completeness the selected backend
|
|
78
|
+
* achieves for it.
|
|
79
|
+
*/
|
|
80
|
+
export interface ConfinedArgv {
|
|
81
|
+
/** The wrapped argv (runner, profile, separator, then the caller's argv). */
|
|
82
|
+
argv: string[];
|
|
83
|
+
/** How completely the selected backend enforces the policy's file effects. */
|
|
84
|
+
enforcement: SandboxEnforcement;
|
|
85
|
+
/**
|
|
86
|
+
* The selected backend's denial DIALECT: the case-insensitive stderr
|
|
87
|
+
* substrings a file effect denied by THIS backend produces (EROFS text
|
|
88
|
+
* under bwrap's read-only binds, EACCES under Landlock, EPERM under
|
|
89
|
+
* Seatbelt). A consumer that infers denials from a failed run's stderr
|
|
90
|
+
* matches against exactly these rather than a cross-backend union — the
|
|
91
|
+
* union claims denials a given backend never produces.
|
|
92
|
+
*/
|
|
93
|
+
denialSignatures: readonly string[];
|
|
94
|
+
/**
|
|
95
|
+
* Structured runner-failure evidence rules. Consumers require a matching
|
|
96
|
+
* fatal stderr line (after informational exclusions) and any rule-specific
|
|
97
|
+
* exit-code gate before checking denial signatures: runner failure means the
|
|
98
|
+
* command never ran, while denial means confinement worked and blocked it.
|
|
99
|
+
*/
|
|
100
|
+
runnerFailureRules: readonly RunnerFailureRule[];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Error code for a requested confined mode when no backend is usable. The
|
|
104
|
+
* provider fails closed, and `HarnessError` carries the code through
|
|
105
|
+
* `tool/result` so callers can distinguish missing confinement from command
|
|
106
|
+
* failure.
|
|
107
|
+
*/
|
|
108
|
+
export declare const SANDBOX_UNAVAILABLE = "SANDBOX_UNAVAILABLE";
|
|
109
|
+
/**
|
|
110
|
+
* Thrown when {@link SandboxProvider.confine} cannot enforce the requested
|
|
111
|
+
* mode. Carries {@link SANDBOX_UNAVAILABLE} through the structured error
|
|
112
|
+
* channel.
|
|
113
|
+
*/
|
|
114
|
+
export declare class SandboxUnavailableError extends HarnessError {
|
|
115
|
+
constructor(mode: ConfinedSandboxMode, detail?: string);
|
|
116
|
+
}
|
|
117
|
+
declare module 'cordis' {
|
|
118
|
+
interface Context {
|
|
119
|
+
sandbox: SandboxProvider;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Abstract process-sandbox service. {@link confine} must return enforcing argv
|
|
124
|
+
* or fail closed at wrap or runner-execution time; silent unconfined passthrough
|
|
125
|
+
* is forbidden. Functional probes arbitrate multi-runner chains and may be
|
|
126
|
+
* skipped for a sole candidate, whose own refusal remains the fail-closed end.
|
|
127
|
+
*/
|
|
128
|
+
export declare abstract class SandboxProvider extends Service {
|
|
129
|
+
constructor(ctx: Context);
|
|
130
|
+
/**
|
|
131
|
+
* Wrap `argv` so it executes confined under `policy` on this host; the
|
|
132
|
+
* caller spawns the returned argv in place of its own.
|
|
133
|
+
* @param argv - the exact argv the caller is about to spawn (program plus
|
|
134
|
+
* arguments), NOT a shell string — a shell-shaped consumer passes
|
|
135
|
+
* `['bash', '-c', command]`.
|
|
136
|
+
* @param policy - the file-effect policy this execution runs under,
|
|
137
|
+
* carried per call (see {@link SandboxPolicy}).
|
|
138
|
+
* @returns the argv to spawn instead, plus the enforcement completeness
|
|
139
|
+
* the selected backend achieves for it.
|
|
140
|
+
*/
|
|
141
|
+
abstract confine(argv: readonly string[], policy: SandboxPolicy): ConfinedArgv;
|
|
142
|
+
}
|
|
143
|
+
export default SandboxProvider;
|
|
144
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,YAAY,EAAE,SAAS,EAAE,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,iBAAiB,GAAG,oBAAoB,CAAA;AAEhF,iGAAiG;AACjG,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAA;AAE5E;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,IAAI,EAAE,WAAW,CAAA;IACjB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAc,SAAQ,sBAAsB;IAC3D,sDAAsD;IACtD,IAAI,EAAE,mBAAmB,CAAA;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,qFAAqF;IACrF,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,8EAA8E;IAC9E,WAAW,EAAE,kBAAkB,CAAA;IAC/B;;;;;;;OAOG;IACH,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC;;;;;OAKG;IACH,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACjD;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,wBAAwB,CAAA;AAExD;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;gBAC3C,IAAI,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM;CAYvD;AAED,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,OAAO;QACf,OAAO,EAAE,eAAe,CAAA;KACzB;CACF;AAED;;;;;GAKG;AACH,8BAAsB,eAAgB,SAAQ,OAAO;gBAEvC,GAAG,EAAE,OAAO;IAIxB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,YAAY;CAC/E;AAED,eAAe,eAAe,CAAA"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Definition for the same-world process-confinement capability seam: wrap exact subprocess argv under a
|
|
3
|
+
* host-path file policy. Containers, microVMs, and remote execution replace the
|
|
4
|
+
* surrounding capability seam instead; this service shares the host kernel and filesystem.
|
|
5
|
+
* @module @bo-agent/sandbox
|
|
6
|
+
*/
|
|
7
|
+
import { Service } from 'cordis';
|
|
8
|
+
import { HarnessError } from '@bo-agent/inline';
|
|
9
|
+
export { ESCALATION_TARGETS, WIDER_MODES, approveEscalation, escalationHintMarker, sandboxDenialMarker, validateEscalationArgs, } from "./escalation.js";
|
|
10
|
+
export { canonicalPath, writableRoots } from "./roots.js";
|
|
11
|
+
/**
|
|
12
|
+
* Error code for a requested confined mode when no backend is usable. The
|
|
13
|
+
* provider fails closed, and `HarnessError` carries the code through
|
|
14
|
+
* `tool/result` so callers can distinguish missing confinement from command
|
|
15
|
+
* failure.
|
|
16
|
+
*/
|
|
17
|
+
export const SANDBOX_UNAVAILABLE = 'SANDBOX_UNAVAILABLE';
|
|
18
|
+
/**
|
|
19
|
+
* Thrown when {@link SandboxProvider.confine} cannot enforce the requested
|
|
20
|
+
* mode. Carries {@link SANDBOX_UNAVAILABLE} through the structured error
|
|
21
|
+
* channel.
|
|
22
|
+
*/
|
|
23
|
+
export class SandboxUnavailableError extends HarnessError {
|
|
24
|
+
constructor(mode, detail) {
|
|
25
|
+
super(`sandbox mode "${mode}" is requested but no sandbox backend is usable on this host; `
|
|
26
|
+
+ 'refusing to run the command unconfined. Install bubblewrap or run a Landlock-enforcing '
|
|
27
|
+
+ 'kernel (Linux), ensure sandbox-exec is usable (macOS), or ensure the ACL '
|
|
28
|
+
+ 'restricted-token runner can start (Windows) — otherwise switch the consumer to '
|
|
29
|
+
+ 'danger-full-access.'
|
|
30
|
+
+ (detail === undefined ? '' : ` Runner failure: ${detail}`), SANDBOX_UNAVAILABLE);
|
|
31
|
+
this.name = 'SandboxUnavailableError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Abstract process-sandbox service. {@link confine} must return enforcing argv
|
|
36
|
+
* or fail closed at wrap or runner-execution time; silent unconfined passthrough
|
|
37
|
+
* is forbidden. Functional probes arbitrate multi-runner chains and may be
|
|
38
|
+
* skipped for a sole candidate, whose own refusal remains the fail-closed end.
|
|
39
|
+
*/
|
|
40
|
+
export class SandboxProvider extends Service {
|
|
41
|
+
/* v8 ignore next -- abstract service construction is covered through concrete provider packages. */
|
|
42
|
+
constructor(ctx) {
|
|
43
|
+
super(ctx, 'sandbox');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export default SandboxProvider;
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,OAAO,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAI/C,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAiGzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAA;AAExD;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IACvD,YAAY,IAAyB,EAAE,MAAe;QACpD,KAAK,CACH,iBAAiB,IAAI,gEAAgE;cACnF,yFAAyF;cACzF,2EAA2E;cAC3E,iFAAiF;cACjF,qBAAqB;cACrB,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,MAAM,EAAE,CAAC,EAC5D,mBAAmB,CACpB,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;IACvC,CAAC;CACF;AAQD;;;;;GAKG;AACH,MAAM,OAAgB,eAAgB,SAAQ,OAAO;IACnD,oGAAoG;IACpG,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IACvB,CAAC;CAcF;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion stub.
|
|
3
|
+
*
|
|
4
|
+
* This product does not enforce runtime invariants; the public contract
|
|
5
|
+
* exposed here is a structural declaration (`name`, `inject`, `apply`)
|
|
6
|
+
* rather than runtime behavior. The companion slots into a Cordis context
|
|
7
|
+
* without doing anything, so consumers that wire it up see the same surface
|
|
8
|
+
* shape regardless of whether invariants are turned on.
|
|
9
|
+
*
|
|
10
|
+
* @module @bo-agent/sandbox/invariant
|
|
11
|
+
*/
|
|
12
|
+
export declare const name = "sandbox-invariant";
|
|
13
|
+
export declare const inject: string[];
|
|
14
|
+
export declare const apply: () => Promise<() => void>;
|
|
15
|
+
//# sourceMappingURL=invariant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../src/invariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,eAAO,MAAM,IAAI,sBAAsB,CAAA;AACvC,eAAO,MAAM,MAAM,EAAE,MAAM,EAAO,CAAA;AAClC,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,MAAM,IAAI,CAAa,CAAA"}
|
package/lib/invariant.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion stub.
|
|
3
|
+
*
|
|
4
|
+
* This product does not enforce runtime invariants; the public contract
|
|
5
|
+
* exposed here is a structural declaration (`name`, `inject`, `apply`)
|
|
6
|
+
* rather than runtime behavior. The companion slots into a Cordis context
|
|
7
|
+
* without doing anything, so consumers that wire it up see the same surface
|
|
8
|
+
* shape regardless of whether invariants are turned on.
|
|
9
|
+
*
|
|
10
|
+
* @module @bo-agent/sandbox/invariant
|
|
11
|
+
*/
|
|
12
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
13
|
+
export const name = 'sandbox-invariant';
|
|
14
|
+
export const inject = [];
|
|
15
|
+
export const apply = async () => () => { };
|
|
16
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
17
|
+
//# sourceMappingURL=invariant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant.js","sourceRoot":"","sources":["../src/invariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAA;AACvC,MAAM,CAAC,MAAM,MAAM,GAAa,EAAE,CAAA;AAClC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,IAAyB,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AAC9D,qDAAqD"}
|
package/lib/roots.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The writable-root derivation shared by every enforcement dialect that
|
|
3
|
+
* expresses a mode as a canonical allow-list: `workspace-write` means "the
|
|
4
|
+
* workspace root plus the platform temp areas", and this module is that
|
|
5
|
+
* meaning's one home. The Seatbelt profile
|
|
6
|
+
* (`@bo-agent/sandbox-local`) and any in-process filesystem fence both
|
|
7
|
+
* derive their allow-list here, so "the
|
|
8
|
+
* write tool cannot write /tmp but bash can" asymmetries cannot arise between
|
|
9
|
+
* them. The bwrap and Landlock dialects keep their own grant spellings (an
|
|
10
|
+
* ephemeral `/tmp` mount, launcher-owned flags) — the honest per-runner
|
|
11
|
+
* differences recorded in the sandbox RFC — with parity pinned by test.
|
|
12
|
+
*
|
|
13
|
+
* @module @bo-agent/sandbox/roots
|
|
14
|
+
*/
|
|
15
|
+
import type { SandboxExecutionPolicy } from './index.ts';
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a granted root to the path the enforcement layer actually compares:
|
|
18
|
+
* canonical (symlinks resolved), because both Seatbelt filters and the fs
|
|
19
|
+
* fence's containment check match resolved paths — `/tmp` IS `/private/tmp`
|
|
20
|
+
* on darwin, and an as-spelled grant would match nothing.
|
|
21
|
+
* @param path - the root as configured or platform-reported.
|
|
22
|
+
* @returns the canonical path, or the spelling as-is when resolution fails
|
|
23
|
+
* (a missing root matches nothing until it exists — the conservative
|
|
24
|
+
* outcome; inventing a fallback would grant a path the caller never named).
|
|
25
|
+
*/
|
|
26
|
+
export declare function canonicalPath(path: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* The roots one confined execution may WRITE under — the mode's meaning as a
|
|
29
|
+
* canonical, deduplicated allow-list. `read-only` allows nothing;
|
|
30
|
+
* `workspace-write` allows the policy's workspace root, the host `/tmp`, and
|
|
31
|
+
* the per-user platform temp dir (`os.tmpdir()` — the real temp area for
|
|
32
|
+
* mkstemp-family tools; omitting it would deny what the mode promises).
|
|
33
|
+
* @param policy - the file-effect policy to derive the allow-list from.
|
|
34
|
+
* @returns the canonical writable roots; empty exactly under `read-only`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function writableRoots(policy: SandboxExecutionPolicy): string[];
|
|
37
|
+
//# sourceMappingURL=roots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roots.d.ts","sourceRoot":"","sources":["../src/roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAExD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAGtE"}
|
package/lib/roots.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The writable-root derivation shared by every enforcement dialect that
|
|
3
|
+
* expresses a mode as a canonical allow-list: `workspace-write` means "the
|
|
4
|
+
* workspace root plus the platform temp areas", and this module is that
|
|
5
|
+
* meaning's one home. The Seatbelt profile
|
|
6
|
+
* (`@bo-agent/sandbox-local`) and any in-process filesystem fence both
|
|
7
|
+
* derive their allow-list here, so "the
|
|
8
|
+
* write tool cannot write /tmp but bash can" asymmetries cannot arise between
|
|
9
|
+
* them. The bwrap and Landlock dialects keep their own grant spellings (an
|
|
10
|
+
* ephemeral `/tmp` mount, launcher-owned flags) — the honest per-runner
|
|
11
|
+
* differences recorded in the sandbox RFC — with parity pinned by test.
|
|
12
|
+
*
|
|
13
|
+
* @module @bo-agent/sandbox/roots
|
|
14
|
+
*/
|
|
15
|
+
import { realpathSync } from 'node:fs';
|
|
16
|
+
import { tmpdir } from 'node:os';
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a granted root to the path the enforcement layer actually compares:
|
|
19
|
+
* canonical (symlinks resolved), because both Seatbelt filters and the fs
|
|
20
|
+
* fence's containment check match resolved paths — `/tmp` IS `/private/tmp`
|
|
21
|
+
* on darwin, and an as-spelled grant would match nothing.
|
|
22
|
+
* @param path - the root as configured or platform-reported.
|
|
23
|
+
* @returns the canonical path, or the spelling as-is when resolution fails
|
|
24
|
+
* (a missing root matches nothing until it exists — the conservative
|
|
25
|
+
* outcome; inventing a fallback would grant a path the caller never named).
|
|
26
|
+
*/
|
|
27
|
+
export function canonicalPath(path) {
|
|
28
|
+
try {
|
|
29
|
+
// Node's JavaScript realpath implementation lexically collapses `..`
|
|
30
|
+
// before resolving a preceding symlink on some platforms. The native
|
|
31
|
+
// implementation follows the filesystem's component-by-component lookup,
|
|
32
|
+
// matching chdir/spawn and the enforcement layers this identity feeds.
|
|
33
|
+
return realpathSync.native(path);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// realpathSync.native failed: the path (or a prefix) is missing or unreadable.
|
|
37
|
+
return path;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The roots one confined execution may WRITE under — the mode's meaning as a
|
|
42
|
+
* canonical, deduplicated allow-list. `read-only` allows nothing;
|
|
43
|
+
* `workspace-write` allows the policy's workspace root, the host `/tmp`, and
|
|
44
|
+
* the per-user platform temp dir (`os.tmpdir()` — the real temp area for
|
|
45
|
+
* mkstemp-family tools; omitting it would deny what the mode promises).
|
|
46
|
+
* @param policy - the file-effect policy to derive the allow-list from.
|
|
47
|
+
* @returns the canonical writable roots; empty exactly under `read-only`.
|
|
48
|
+
*/
|
|
49
|
+
export function writableRoots(policy) {
|
|
50
|
+
if (policy.mode !== 'workspace-write')
|
|
51
|
+
return [];
|
|
52
|
+
return [...new Set([policy.workspaceRoot, '/tmp', tmpdir()].map(canonicalPath))];
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=roots.js.map
|
package/lib/roots.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roots.js","sourceRoot":"","sources":["../src/roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGhC;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,qEAAqE;QACrE,qEAAqE;QACrE,yEAAyE;QACzE,uEAAuE;QACvE,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,+EAA+E;QAC/E,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,MAA8B;IAC1D,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,EAAE,CAAA;IAChD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;AAClF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bo-agent/sandbox",
|
|
3
|
+
"description": "Abstract process-sandbox Service Definition: same-world confinement vocabulary and the SandboxProvider contract (standalone product, forked from the DeepSeek Harness)",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "lib/index.js",
|
|
7
|
+
"types": "lib/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/index.d.ts",
|
|
11
|
+
"default": "./lib/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"lib/"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"cordis": "^4.0.0-rc.10",
|
|
24
|
+
"@bo-agent/inline": "0.0.1"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"cordis": "^4.0.0-rc.10",
|
|
28
|
+
"@bo-agent/inline": "0.0.1"
|
|
29
|
+
}
|
|
30
|
+
}
|