@probelabs/visor 0.1.152 → 0.1.153
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/dist/config.d.ts.map +1 -1
- package/dist/docs/ai-configuration.md +4 -4
- package/dist/docs/sandbox-engines.md +53 -5
- package/dist/examples/ai-with-bash.yaml +2 -2
- package/dist/examples/sandbox-bind-paths.yaml +31 -0
- package/dist/examples/sandbox-host-workdir.yaml +27 -0
- package/dist/examples/workflow-sandbox.yaml +43 -0
- package/dist/generated/config-schema.d.ts +38 -8
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +40 -8
- package/dist/index.js +149 -37
- package/dist/output/traces/{run-2026-03-04T06-46-24-105Z.ndjson → run-2026-03-04T13-24-27-240Z.ndjson} +84 -84
- package/dist/{traces/run-2026-03-04T06-47-08-884Z.ndjson → output/traces/run-2026-03-04T13-25-12-321Z.ndjson} +1802 -1802
- package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -1
- package/dist/sandbox/check-runner.d.ts.map +1 -1
- package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -1
- package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -1
- package/dist/sandbox/types.d.ts +13 -0
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/scheduler/schedule-tool.d.ts +2 -0
- package/dist/scheduler/schedule-tool.d.ts.map +1 -1
- package/dist/sdk/{check-provider-registry-QBURXJ6B.mjs → check-provider-registry-CSIZGIKC.mjs} +3 -3
- package/dist/sdk/{check-provider-registry-VY5ZZAEU.mjs → check-provider-registry-OEPUY5P6.mjs} +6 -6
- package/dist/sdk/{check-provider-registry-DCZR46KQ.mjs → check-provider-registry-ZOGNKTC3.mjs} +3 -3
- package/dist/sdk/{chunk-FYK2DJK6.mjs → chunk-CPYQDJ27.mjs} +86 -26
- package/dist/sdk/chunk-CPYQDJ27.mjs.map +1 -0
- package/dist/sdk/{chunk-QRR6OJQN.mjs → chunk-EYQWEVZF.mjs} +130 -91
- package/dist/sdk/chunk-EYQWEVZF.mjs.map +1 -0
- package/dist/sdk/{chunk-FP3RZSLW.mjs → chunk-KBX4OIXL.mjs} +2 -2
- package/dist/sdk/{chunk-XJZKNTKZ.mjs → chunk-NYK7WDGH.mjs} +130 -91
- package/dist/sdk/chunk-NYK7WDGH.mjs.map +1 -0
- package/dist/sdk/{chunk-6VQ73GYD.mjs → chunk-SMR5N5MG.mjs} +2 -2
- package/dist/sdk/{chunk-6VQ73GYD.mjs.map → chunk-SMR5N5MG.mjs.map} +1 -1
- package/dist/sdk/{chunk-PCI4FXAO.mjs → chunk-U7KB66AN.mjs} +138 -99
- package/dist/sdk/chunk-U7KB66AN.mjs.map +1 -0
- package/dist/sdk/{chunk-LLVVHYIP.mjs → chunk-VBN45DBR.mjs} +3 -3
- package/dist/sdk/{config-MTEIGCOQ.mjs → config-SW3VO4DQ.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-TV227HAG.mjs → failure-condition-evaluator-Y32S6DB2.mjs} +3 -3
- package/dist/sdk/{github-frontend-YLSS5NQ7.mjs → github-frontend-6SIR7QWX.mjs} +3 -3
- package/dist/sdk/{host-WNCX3MPT.mjs → host-YBJOWFT4.mjs} +2 -2
- package/dist/sdk/{routing-FKWK5BHS.mjs → routing-U63OJMZQ.mjs} +4 -4
- package/dist/sdk/{schedule-tool-IJC2TSKU.mjs → schedule-tool-74VMD77T.mjs} +3 -3
- package/dist/sdk/{schedule-tool-62XTFB6K.mjs → schedule-tool-NMCFABHK.mjs} +3 -3
- package/dist/sdk/{schedule-tool-VOZ536P4.mjs → schedule-tool-NYRLSV4F.mjs} +6 -6
- package/dist/sdk/{schedule-tool-handler-WBIZSBGJ.mjs → schedule-tool-handler-2TFSBZ2O.mjs} +6 -6
- package/dist/sdk/{schedule-tool-handler-5K275UT6.mjs → schedule-tool-handler-DRVRLVGD.mjs} +3 -3
- package/dist/sdk/{schedule-tool-handler-T4L2ECBA.mjs → schedule-tool-handler-EOQBRZSD.mjs} +3 -3
- package/dist/sdk/sdk.d.mts +15 -2
- package/dist/sdk/sdk.d.ts +15 -2
- package/dist/sdk/sdk.js +210 -111
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +5 -5
- package/dist/sdk/{trace-helpers-W33WMBL7.mjs → trace-helpers-2BIVADUK.mjs} +2 -2
- package/dist/sdk/{workflow-check-provider-6TEZHBZJ.mjs → workflow-check-provider-4NHVFLMQ.mjs} +3 -3
- package/dist/sdk/{workflow-check-provider-FONJYRMR.mjs → workflow-check-provider-GIW4WECT.mjs} +3 -3
- package/dist/sdk/{workflow-check-provider-LREOGGTH.mjs → workflow-check-provider-UQMMFLSK.mjs} +6 -6
- package/dist/state-machine/workflow-projection.d.ts.map +1 -1
- package/dist/traces/{run-2026-03-04T06-46-24-105Z.ndjson → run-2026-03-04T13-24-27-240Z.ndjson} +84 -84
- package/dist/{output/traces/run-2026-03-04T06-47-08-884Z.ndjson → traces/run-2026-03-04T13-25-12-321Z.ndjson} +1802 -1802
- package/dist/types/config.d.ts +2 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +8 -0
- package/dist/types/workflow.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/sdk/chunk-FYK2DJK6.mjs.map +0 -1
- package/dist/sdk/chunk-PCI4FXAO.mjs.map +0 -1
- package/dist/sdk/chunk-QRR6OJQN.mjs.map +0 -1
- package/dist/sdk/chunk-XJZKNTKZ.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-DCZR46KQ.mjs.map → check-provider-registry-CSIZGIKC.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-QBURXJ6B.mjs.map → check-provider-registry-OEPUY5P6.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-VY5ZZAEU.mjs.map → check-provider-registry-ZOGNKTC3.mjs.map} +0 -0
- /package/dist/sdk/{chunk-FP3RZSLW.mjs.map → chunk-KBX4OIXL.mjs.map} +0 -0
- /package/dist/sdk/{chunk-LLVVHYIP.mjs.map → chunk-VBN45DBR.mjs.map} +0 -0
- /package/dist/sdk/{config-MTEIGCOQ.mjs.map → config-SW3VO4DQ.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-TV227HAG.mjs.map → failure-condition-evaluator-Y32S6DB2.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-YLSS5NQ7.mjs.map → github-frontend-6SIR7QWX.mjs.map} +0 -0
- /package/dist/sdk/{host-WNCX3MPT.mjs.map → host-YBJOWFT4.mjs.map} +0 -0
- /package/dist/sdk/{routing-FKWK5BHS.mjs.map → routing-U63OJMZQ.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-62XTFB6K.mjs.map → schedule-tool-74VMD77T.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-IJC2TSKU.mjs.map → schedule-tool-NMCFABHK.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-VOZ536P4.mjs.map → schedule-tool-NYRLSV4F.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-5K275UT6.mjs.map → schedule-tool-handler-2TFSBZ2O.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-T4L2ECBA.mjs.map → schedule-tool-handler-DRVRLVGD.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-WBIZSBGJ.mjs.map → schedule-tool-handler-EOQBRZSD.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-W33WMBL7.mjs.map → trace-helpers-2BIVADUK.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-6TEZHBZJ.mjs.map → workflow-check-provider-4NHVFLMQ.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-FONJYRMR.mjs.map → workflow-check-provider-GIW4WECT.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-LREOGGTH.mjs.map → workflow-check-provider-UQMMFLSK.mjs.map} +0 -0
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAU9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAiGrC;;OAEG;YACW,aAAa;IAuB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAU9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAiGrC;;OAEG;YACW,aAAa;IAuB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuL7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmM5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAqG7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
|
|
@@ -489,8 +489,8 @@ steps:
|
|
|
489
489
|
provider: anthropic
|
|
490
490
|
allowBash: true
|
|
491
491
|
bashConfig:
|
|
492
|
-
|
|
493
|
-
|
|
492
|
+
disableDefaultAllow: true # Disable default safe command list
|
|
493
|
+
disableDefaultDeny: false # Keep default dangerous command blocklist
|
|
494
494
|
allow: ['specific-command-1', 'specific-command-2']
|
|
495
495
|
```
|
|
496
496
|
|
|
@@ -499,8 +499,8 @@ steps:
|
|
|
499
499
|
- **`allowBash`** (boolean): Simple toggle to enable bash command execution. Default: `false`
|
|
500
500
|
- **`allow`** (string[]): Additional permitted command patterns (e.g., `['ls', 'git status']`)
|
|
501
501
|
- **`deny`** (string[]): Additional blocked command patterns (e.g., `['rm -rf', 'sudo']`)
|
|
502
|
-
- **`
|
|
503
|
-
- **`
|
|
502
|
+
- **`disableDefaultAllow`** (boolean): Disable default safe command list (~235 commands). Default: `false`
|
|
503
|
+
- **`disableDefaultDeny`** (boolean): Disable default dangerous command blocklist (~191 patterns). Default: `false`
|
|
504
504
|
- **`timeout`** (number): Execution timeout in milliseconds. Default: varies by ProbeAgent
|
|
505
505
|
- **`workingDirectory`** (string): Base directory for command execution
|
|
506
506
|
|
|
@@ -56,8 +56,10 @@ These options apply to all engine types:
|
|
|
56
56
|
| `engine` | `'docker' \| 'bubblewrap' \| 'seatbelt'` | `'docker'` | Sandbox engine backend |
|
|
57
57
|
| `network` | `boolean` | `true` | Enable/disable network access |
|
|
58
58
|
| `read_only` | `boolean` | `false` | Mount repository as read-only |
|
|
59
|
-
| `workdir` | `string` | `'/workspace'` | Working directory inside sandbox (Docker/Bubblewrap only) |
|
|
59
|
+
| `workdir` | `string` | `'/workspace'` | Working directory inside sandbox. Use `"host"` to keep the real repo path. (Docker/Bubblewrap only) |
|
|
60
60
|
| `env_passthrough` | `string[]` | — | Glob patterns for host env vars to forward |
|
|
61
|
+
| `bind_paths` | `SandboxBindPath[]` | — | Additional host paths to mount into sandbox |
|
|
62
|
+
| `visor_path` | `string` | `'/opt/visor'` | Where visor is mounted inside the sandbox |
|
|
61
63
|
|
|
62
64
|
### Docker-Only Options
|
|
63
65
|
|
|
@@ -72,10 +74,56 @@ These fields are only valid when `engine` is `'docker'` (or omitted):
|
|
|
72
74
|
| `service` | `string` | Service name within compose file |
|
|
73
75
|
| `resources` | `object` | Memory/CPU limits (`memory: '512m'`, `cpu: 1.0`) |
|
|
74
76
|
| `cache` | `object` | Cache volume configuration |
|
|
75
|
-
| `visor_path` | `string` | Where visor is mounted inside container |
|
|
76
77
|
|
|
77
78
|
Using Docker-only fields with `engine: bubblewrap` or `engine: seatbelt` produces a validation error.
|
|
78
79
|
|
|
80
|
+
### Bind Paths
|
|
81
|
+
|
|
82
|
+
The `bind_paths` option mounts additional host directories into the sandbox. This works with all three engines.
|
|
83
|
+
|
|
84
|
+
Each entry is a `SandboxBindPath` object:
|
|
85
|
+
|
|
86
|
+
| Field | Type | Required | Default | Description |
|
|
87
|
+
|-------|------|----------|---------|-------------|
|
|
88
|
+
| `host` | `string` | Yes | — | Host path to mount (supports `~` for home directory) |
|
|
89
|
+
| `container` | `string` | No | Resolved `host` path | Mount destination inside the sandbox |
|
|
90
|
+
| `read_only` | `boolean` | No | `true` | Mount as read-only |
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
sandboxes:
|
|
94
|
+
dev:
|
|
95
|
+
engine: bubblewrap
|
|
96
|
+
bind_paths:
|
|
97
|
+
- host: ~/.gitconfig # read-only by default
|
|
98
|
+
- host: ~/.ssh # read-only by default
|
|
99
|
+
- host: /opt/custom-tools # read-only, same path inside sandbox
|
|
100
|
+
container: /opt/custom-tools
|
|
101
|
+
- host: ~/shared-cache # writable mount
|
|
102
|
+
container: /cache
|
|
103
|
+
read_only: false
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Security note:** Host paths are validated — `..` path traversal is rejected, and container paths must be absolute.
|
|
107
|
+
|
|
108
|
+
### Host Workdir Mode
|
|
109
|
+
|
|
110
|
+
By default, the repository is mounted at `/workspace` inside Docker and Bubblewrap sandboxes. Setting `workdir: "host"` keeps the real repository path instead.
|
|
111
|
+
|
|
112
|
+
This is useful when AI agents or tools reference files by their absolute host paths — the paths remain valid inside the sandbox.
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
sandboxes:
|
|
116
|
+
agent-sandbox:
|
|
117
|
+
engine: bubblewrap
|
|
118
|
+
workdir: "host"
|
|
119
|
+
bind_paths:
|
|
120
|
+
- host: ~/.gitconfig
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
With `workdir: "host"`, if your repo is at `/home/user/projects/myapp`, commands inside the sandbox run from `/home/user/projects/myapp` rather than `/workspace`.
|
|
124
|
+
|
|
125
|
+
> **Note:** Seatbelt always uses the real repo path regardless of the `workdir` setting.
|
|
126
|
+
|
|
79
127
|
---
|
|
80
128
|
|
|
81
129
|
## Bubblewrap Engine
|
|
@@ -132,7 +180,7 @@ sandboxes:
|
|
|
132
180
|
| `/etc/resolv.conf`, `/etc/ssl` | Read-only | DNS and TLS certificates |
|
|
133
181
|
| `/tmp` | Read-write | Fresh tmpfs per execution |
|
|
134
182
|
| `/dev`, `/proc` | Minimal | Virtual filesystems |
|
|
135
|
-
| `~/.ssh`, `~/.aws`, `~/.config` | **Not mounted** |
|
|
183
|
+
| `~/.ssh`, `~/.aws`, `~/.config` | **Not mounted** | Not mounted by default (use `bind_paths`) |
|
|
136
184
|
|
|
137
185
|
### Security Properties
|
|
138
186
|
|
|
@@ -233,8 +281,8 @@ The generated profile follows a deny-by-default model:
|
|
|
233
281
|
| `/private`, `/var`, `/etc` | Read-only | System config (symlink-resolved) |
|
|
234
282
|
| `/tmp` | Read-write | Temporary files |
|
|
235
283
|
| `~/Documents`, `~/Desktop` | **Denied** | "Operation not permitted" |
|
|
236
|
-
| `~/.ssh`, `~/.aws`, `~/.claude` | **Denied** |
|
|
237
|
-
| `~/.gitconfig`, `~/.zsh_history` | **Denied** |
|
|
284
|
+
| `~/.ssh`, `~/.aws`, `~/.claude` | **Denied** | Denied by default (use `bind_paths`) |
|
|
285
|
+
| `~/.gitconfig`, `~/.zsh_history` | **Denied** | Denied by default (use `bind_paths`) |
|
|
238
286
|
|
|
239
287
|
### Security Properties
|
|
240
288
|
|
|
@@ -96,8 +96,8 @@ steps:
|
|
|
96
96
|
provider: anthropic
|
|
97
97
|
allowBash: true
|
|
98
98
|
bashConfig:
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
disableDefaultAllow: true # Disable default safe commands
|
|
100
|
+
disableDefaultDeny: false # Keep dangerous command blocklist
|
|
101
101
|
allow:
|
|
102
102
|
- 'custom-tool analyze'
|
|
103
103
|
- 'custom-tool report'
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
version: "2.0"
|
|
2
|
+
|
|
3
|
+
# Mounting additional host paths into sandboxes with bind_paths
|
|
4
|
+
sandboxes:
|
|
5
|
+
dev:
|
|
6
|
+
engine: bubblewrap
|
|
7
|
+
network: true
|
|
8
|
+
bind_paths:
|
|
9
|
+
# Git config — read-only (default)
|
|
10
|
+
- host: ~/.gitconfig
|
|
11
|
+
# SSH keys — read-only (default)
|
|
12
|
+
- host: ~/.ssh
|
|
13
|
+
# Writable shared cache directory
|
|
14
|
+
- host: ~/shared-cache
|
|
15
|
+
container: /cache
|
|
16
|
+
read_only: false
|
|
17
|
+
|
|
18
|
+
sandbox: dev
|
|
19
|
+
|
|
20
|
+
checks:
|
|
21
|
+
verify-git-config:
|
|
22
|
+
type: command
|
|
23
|
+
exec: "git config user.name && git config user.email"
|
|
24
|
+
|
|
25
|
+
verify-ssh:
|
|
26
|
+
type: command
|
|
27
|
+
exec: "ls ~/.ssh/id_* 2>/dev/null && echo 'SSH keys accessible' || echo 'No SSH keys found'"
|
|
28
|
+
|
|
29
|
+
verify-cache-writable:
|
|
30
|
+
type: command
|
|
31
|
+
exec: "touch /cache/test-file && echo 'Cache is writable' && rm /cache/test-file"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
version: "2.0"
|
|
2
|
+
|
|
3
|
+
# Host workdir mode: keep the real repository path inside the sandbox.
|
|
4
|
+
# Useful when AI agents or tools reference files by absolute host paths.
|
|
5
|
+
sandboxes:
|
|
6
|
+
agent:
|
|
7
|
+
engine: bubblewrap
|
|
8
|
+
workdir: "host"
|
|
9
|
+
bind_paths:
|
|
10
|
+
- host: ~/.gitconfig
|
|
11
|
+
|
|
12
|
+
sandbox: agent
|
|
13
|
+
|
|
14
|
+
checks:
|
|
15
|
+
verify-real-path:
|
|
16
|
+
type: command
|
|
17
|
+
# pwd returns the real repo path (e.g. /home/user/projects/myapp)
|
|
18
|
+
# instead of the default /workspace
|
|
19
|
+
exec: |
|
|
20
|
+
echo "Working directory: $(pwd)"
|
|
21
|
+
echo "Repo files:"
|
|
22
|
+
ls -1 | head -5
|
|
23
|
+
|
|
24
|
+
verify-git:
|
|
25
|
+
type: command
|
|
26
|
+
depends_on: [verify-real-path]
|
|
27
|
+
exec: "git rev-parse --show-toplevel"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
version: "2.0"
|
|
2
|
+
|
|
3
|
+
# Workflow with sandbox isolation
|
|
4
|
+
# Defines sandboxes at the top level and assigns them to steps
|
|
5
|
+
|
|
6
|
+
sandboxes:
|
|
7
|
+
secure:
|
|
8
|
+
engine: bubblewrap
|
|
9
|
+
network: false
|
|
10
|
+
read_only: true
|
|
11
|
+
|
|
12
|
+
dev:
|
|
13
|
+
engine: bubblewrap
|
|
14
|
+
network: true
|
|
15
|
+
bind_paths:
|
|
16
|
+
- host: ~/.gitconfig
|
|
17
|
+
- host: ~/.ssh
|
|
18
|
+
|
|
19
|
+
# Default sandbox for all steps
|
|
20
|
+
sandbox: secure
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
read-source:
|
|
24
|
+
type: command
|
|
25
|
+
exec: "cat package.json | head -10"
|
|
26
|
+
|
|
27
|
+
git-info:
|
|
28
|
+
type: command
|
|
29
|
+
# Override: use dev sandbox for git operations that need SSH and config
|
|
30
|
+
sandbox: dev
|
|
31
|
+
exec: "git log --oneline -5"
|
|
32
|
+
|
|
33
|
+
lint:
|
|
34
|
+
type: command
|
|
35
|
+
depends_on: [read-source]
|
|
36
|
+
exec: "echo 'Lint passed'"
|
|
37
|
+
|
|
38
|
+
summary:
|
|
39
|
+
type: logger
|
|
40
|
+
depends_on: [git-info, lint]
|
|
41
|
+
message: |
|
|
42
|
+
Source read: {{ outputs["read-source"] | json }}
|
|
43
|
+
Git info: {{ outputs["git-info"] | json }}
|
|
@@ -875,7 +875,7 @@ export declare const configSchema: {
|
|
|
875
875
|
readonly description: "Arguments/inputs for the workflow";
|
|
876
876
|
};
|
|
877
877
|
readonly overrides: {
|
|
878
|
-
readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
878
|
+
readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E%3E";
|
|
879
879
|
readonly description: "Override specific step configurations in the workflow";
|
|
880
880
|
};
|
|
881
881
|
readonly output_mapping: {
|
|
@@ -891,7 +891,7 @@ export declare const configSchema: {
|
|
|
891
891
|
readonly description: "Config file path - alternative to workflow ID (loads a Visor config file as workflow)";
|
|
892
892
|
};
|
|
893
893
|
readonly workflow_overrides: {
|
|
894
|
-
readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
894
|
+
readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E%3E";
|
|
895
895
|
readonly description: "Alias for overrides - workflow step overrides (backward compatibility)";
|
|
896
896
|
};
|
|
897
897
|
readonly ref: {
|
|
@@ -1283,11 +1283,11 @@ export declare const configSchema: {
|
|
|
1283
1283
|
};
|
|
1284
1284
|
readonly description: "Array of blocked command patterns (e.g., ['rm -rf', 'sudo'])";
|
|
1285
1285
|
};
|
|
1286
|
-
readonly
|
|
1286
|
+
readonly disableDefaultAllow: {
|
|
1287
1287
|
readonly type: "boolean";
|
|
1288
1288
|
readonly description: "Disable default safe command list (use with caution)";
|
|
1289
1289
|
};
|
|
1290
|
-
readonly
|
|
1290
|
+
readonly disableDefaultDeny: {
|
|
1291
1291
|
readonly type: "boolean";
|
|
1292
1292
|
readonly description: "Disable default dangerous command blocklist (use with extreme caution)";
|
|
1293
1293
|
};
|
|
@@ -1543,7 +1543,7 @@ export declare const configSchema: {
|
|
|
1543
1543
|
readonly description: "Custom output name (defaults to workflow name)";
|
|
1544
1544
|
};
|
|
1545
1545
|
readonly overrides: {
|
|
1546
|
-
readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
1546
|
+
readonly $ref: "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E%3E";
|
|
1547
1547
|
readonly description: "Step overrides";
|
|
1548
1548
|
};
|
|
1549
1549
|
readonly output_mapping: {
|
|
@@ -1558,13 +1558,13 @@ export declare const configSchema: {
|
|
|
1558
1558
|
readonly '^x-': {};
|
|
1559
1559
|
};
|
|
1560
1560
|
};
|
|
1561
|
-
readonly 'Record<string,Partial<interface-src_types_config.ts-
|
|
1561
|
+
readonly 'Record<string,Partial<interface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265>>': {
|
|
1562
1562
|
readonly type: "object";
|
|
1563
1563
|
readonly additionalProperties: {
|
|
1564
|
-
readonly $ref: "#/definitions/Partial%3Cinterface-src_types_config.ts-
|
|
1564
|
+
readonly $ref: "#/definitions/Partial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E";
|
|
1565
1565
|
};
|
|
1566
1566
|
};
|
|
1567
|
-
readonly 'Partial<interface-src_types_config.ts-
|
|
1567
|
+
readonly 'Partial<interface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265>': {
|
|
1568
1568
|
readonly type: "object";
|
|
1569
1569
|
readonly additionalProperties: false;
|
|
1570
1570
|
};
|
|
@@ -2258,6 +2258,13 @@ export declare const configSchema: {
|
|
|
2258
2258
|
readonly $ref: "#/definitions/SandboxCacheConfig";
|
|
2259
2259
|
readonly description: "Cache volume configuration";
|
|
2260
2260
|
};
|
|
2261
|
+
readonly bind_paths: {
|
|
2262
|
+
readonly type: "array";
|
|
2263
|
+
readonly items: {
|
|
2264
|
+
readonly $ref: "#/definitions/SandboxBindPath";
|
|
2265
|
+
};
|
|
2266
|
+
readonly description: "Additional host paths to bind-mount into the sandbox";
|
|
2267
|
+
};
|
|
2261
2268
|
};
|
|
2262
2269
|
readonly additionalProperties: false;
|
|
2263
2270
|
readonly description: "Configuration for a single sandbox environment";
|
|
@@ -2317,6 +2324,29 @@ export declare const configSchema: {
|
|
|
2317
2324
|
readonly '^x-': {};
|
|
2318
2325
|
};
|
|
2319
2326
|
};
|
|
2327
|
+
readonly SandboxBindPath: {
|
|
2328
|
+
readonly type: "object";
|
|
2329
|
+
readonly properties: {
|
|
2330
|
+
readonly host: {
|
|
2331
|
+
readonly type: "string";
|
|
2332
|
+
readonly description: "Host path (supports ~ prefix for home directory)";
|
|
2333
|
+
};
|
|
2334
|
+
readonly container: {
|
|
2335
|
+
readonly type: "string";
|
|
2336
|
+
readonly description: "Container path (defaults to resolved host path)";
|
|
2337
|
+
};
|
|
2338
|
+
readonly read_only: {
|
|
2339
|
+
readonly type: "boolean";
|
|
2340
|
+
readonly description: "Mount as read-only (default: true)";
|
|
2341
|
+
};
|
|
2342
|
+
};
|
|
2343
|
+
readonly required: readonly ["host"];
|
|
2344
|
+
readonly additionalProperties: false;
|
|
2345
|
+
readonly description: "Additional host path to bind-mount into the sandbox";
|
|
2346
|
+
readonly patternProperties: {
|
|
2347
|
+
readonly '^x-': {};
|
|
2348
|
+
};
|
|
2349
|
+
};
|
|
2320
2350
|
readonly SandboxDefaults: {
|
|
2321
2351
|
readonly type: "object";
|
|
2322
2352
|
readonly properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/generated/config-schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/generated/config-schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAugGf,CAAC;AACX,eAAe,YAAY,CAAC"}
|
|
@@ -966,7 +966,7 @@
|
|
|
966
966
|
"description": "Arguments/inputs for the workflow"
|
|
967
967
|
},
|
|
968
968
|
"overrides": {
|
|
969
|
-
"$ref": "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
969
|
+
"$ref": "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E%3E",
|
|
970
970
|
"description": "Override specific step configurations in the workflow"
|
|
971
971
|
},
|
|
972
972
|
"output_mapping": {
|
|
@@ -982,7 +982,7 @@
|
|
|
982
982
|
"description": "Config file path - alternative to workflow ID (loads a Visor config file as workflow)"
|
|
983
983
|
},
|
|
984
984
|
"workflow_overrides": {
|
|
985
|
-
"$ref": "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
985
|
+
"$ref": "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E%3E",
|
|
986
986
|
"description": "Alias for overrides - workflow step overrides (backward compatibility)"
|
|
987
987
|
},
|
|
988
988
|
"ref": {
|
|
@@ -1426,11 +1426,11 @@
|
|
|
1426
1426
|
},
|
|
1427
1427
|
"description": "Array of blocked command patterns (e.g., ['rm -rf', 'sudo'])"
|
|
1428
1428
|
},
|
|
1429
|
-
"
|
|
1429
|
+
"disableDefaultAllow": {
|
|
1430
1430
|
"type": "boolean",
|
|
1431
1431
|
"description": "Disable default safe command list (use with caution)"
|
|
1432
1432
|
},
|
|
1433
|
-
"
|
|
1433
|
+
"disableDefaultDeny": {
|
|
1434
1434
|
"type": "boolean",
|
|
1435
1435
|
"description": "Disable default dangerous command blocklist (use with extreme caution)"
|
|
1436
1436
|
},
|
|
@@ -1708,7 +1708,7 @@
|
|
|
1708
1708
|
"description": "Custom output name (defaults to workflow name)"
|
|
1709
1709
|
},
|
|
1710
1710
|
"overrides": {
|
|
1711
|
-
"$ref": "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-
|
|
1711
|
+
"$ref": "#/definitions/Record%3Cstring%2CPartial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E%3E",
|
|
1712
1712
|
"description": "Step overrides"
|
|
1713
1713
|
},
|
|
1714
1714
|
"output_mapping": {
|
|
@@ -1725,13 +1725,13 @@
|
|
|
1725
1725
|
"^x-": {}
|
|
1726
1726
|
}
|
|
1727
1727
|
},
|
|
1728
|
-
"Record<string,Partial<interface-src_types_config.ts-
|
|
1728
|
+
"Record<string,Partial<interface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265>>": {
|
|
1729
1729
|
"type": "object",
|
|
1730
1730
|
"additionalProperties": {
|
|
1731
|
-
"$ref": "#/definitions/Partial%3Cinterface-src_types_config.ts-
|
|
1731
|
+
"$ref": "#/definitions/Partial%3Cinterface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265%3E"
|
|
1732
1732
|
}
|
|
1733
1733
|
},
|
|
1734
|
-
"Partial<interface-src_types_config.ts-
|
|
1734
|
+
"Partial<interface-src_types_config.ts-13519-28113-src_types_config.ts-0-55265>": {
|
|
1735
1735
|
"type": "object",
|
|
1736
1736
|
"additionalProperties": false
|
|
1737
1737
|
},
|
|
@@ -2491,6 +2491,13 @@
|
|
|
2491
2491
|
"cache": {
|
|
2492
2492
|
"$ref": "#/definitions/SandboxCacheConfig",
|
|
2493
2493
|
"description": "Cache volume configuration"
|
|
2494
|
+
},
|
|
2495
|
+
"bind_paths": {
|
|
2496
|
+
"type": "array",
|
|
2497
|
+
"items": {
|
|
2498
|
+
"$ref": "#/definitions/SandboxBindPath"
|
|
2499
|
+
},
|
|
2500
|
+
"description": "Additional host paths to bind-mount into the sandbox"
|
|
2494
2501
|
}
|
|
2495
2502
|
},
|
|
2496
2503
|
"additionalProperties": false,
|
|
@@ -2553,6 +2560,31 @@
|
|
|
2553
2560
|
"^x-": {}
|
|
2554
2561
|
}
|
|
2555
2562
|
},
|
|
2563
|
+
"SandboxBindPath": {
|
|
2564
|
+
"type": "object",
|
|
2565
|
+
"properties": {
|
|
2566
|
+
"host": {
|
|
2567
|
+
"type": "string",
|
|
2568
|
+
"description": "Host path (supports ~ prefix for home directory)"
|
|
2569
|
+
},
|
|
2570
|
+
"container": {
|
|
2571
|
+
"type": "string",
|
|
2572
|
+
"description": "Container path (defaults to resolved host path)"
|
|
2573
|
+
},
|
|
2574
|
+
"read_only": {
|
|
2575
|
+
"type": "boolean",
|
|
2576
|
+
"description": "Mount as read-only (default: true)"
|
|
2577
|
+
}
|
|
2578
|
+
},
|
|
2579
|
+
"required": [
|
|
2580
|
+
"host"
|
|
2581
|
+
],
|
|
2582
|
+
"additionalProperties": false,
|
|
2583
|
+
"description": "Additional host path to bind-mount into the sandbox",
|
|
2584
|
+
"patternProperties": {
|
|
2585
|
+
"^x-": {}
|
|
2586
|
+
}
|
|
2587
|
+
},
|
|
2556
2588
|
"SandboxDefaults": {
|
|
2557
2589
|
"type": "object",
|
|
2558
2590
|
"properties": {
|