@probelabs/visor 0.1.152-ee → 0.1.153-ee

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/docs/ai-configuration.md +4 -4
  3. package/dist/docs/sandbox-engines.md +53 -5
  4. package/dist/examples/ai-with-bash.yaml +2 -2
  5. package/dist/examples/sandbox-bind-paths.yaml +31 -0
  6. package/dist/examples/sandbox-host-workdir.yaml +27 -0
  7. package/dist/examples/workflow-sandbox.yaml +43 -0
  8. package/dist/generated/config-schema.d.ts +38 -8
  9. package/dist/generated/config-schema.d.ts.map +1 -1
  10. package/dist/generated/config-schema.json +40 -8
  11. package/dist/index.js +148 -36
  12. package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -1
  13. package/dist/sandbox/check-runner.d.ts.map +1 -1
  14. package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -1
  15. package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -1
  16. package/dist/sandbox/types.d.ts +13 -0
  17. package/dist/sandbox/types.d.ts.map +1 -1
  18. package/dist/scheduler/schedule-tool.d.ts +2 -0
  19. package/dist/scheduler/schedule-tool.d.ts.map +1 -1
  20. package/dist/sdk/{check-provider-registry-HR6YM5MI.mjs → check-provider-registry-XZE5PRSE.mjs} +3 -3
  21. package/dist/sdk/{check-provider-registry-QBURXJ6B.mjs → check-provider-registry-ZOGNKTC3.mjs} +3 -3
  22. package/dist/sdk/{chunk-FYK2DJK6.mjs → chunk-CPYQDJ27.mjs} +86 -26
  23. package/dist/sdk/chunk-CPYQDJ27.mjs.map +1 -0
  24. package/dist/sdk/{chunk-JRDGCUEG.mjs → chunk-DXNWUIAN.mjs} +130 -91
  25. package/dist/sdk/chunk-DXNWUIAN.mjs.map +1 -0
  26. package/dist/sdk/{chunk-QRR6OJQN.mjs → chunk-EYQWEVZF.mjs} +130 -91
  27. package/dist/sdk/chunk-EYQWEVZF.mjs.map +1 -0
  28. package/dist/sdk/{config-MTEIGCOQ.mjs → config-SW3VO4DQ.mjs} +2 -2
  29. package/dist/sdk/{schedule-tool-62XTFB6K.mjs → schedule-tool-74VMD77T.mjs} +3 -3
  30. package/dist/sdk/{schedule-tool-6NALFGQR.mjs → schedule-tool-WSZKJUNQ.mjs} +3 -3
  31. package/dist/sdk/{schedule-tool-handler-5K275UT6.mjs → schedule-tool-handler-EOQBRZSD.mjs} +3 -3
  32. package/dist/sdk/{schedule-tool-handler-RLAKPPPX.mjs → schedule-tool-handler-Q7E5NBHS.mjs} +3 -3
  33. package/dist/sdk/sdk.d.mts +15 -2
  34. package/dist/sdk/sdk.d.ts +15 -2
  35. package/dist/sdk/sdk.js +209 -110
  36. package/dist/sdk/sdk.js.map +1 -1
  37. package/dist/sdk/sdk.mjs +2 -2
  38. package/dist/sdk/{workflow-check-provider-6TEZHBZJ.mjs → workflow-check-provider-GIW4WECT.mjs} +3 -3
  39. package/dist/sdk/{workflow-check-provider-KG6IFH6W.mjs → workflow-check-provider-JHHACJHF.mjs} +3 -3
  40. package/dist/state-machine/workflow-projection.d.ts.map +1 -1
  41. package/dist/types/config.d.ts +2 -2
  42. package/dist/types/config.d.ts.map +1 -1
  43. package/dist/types/workflow.d.ts +8 -0
  44. package/dist/types/workflow.d.ts.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/sdk/chunk-FYK2DJK6.mjs.map +0 -1
  47. package/dist/sdk/chunk-JRDGCUEG.mjs.map +0 -1
  48. package/dist/sdk/chunk-QRR6OJQN.mjs.map +0 -1
  49. /package/dist/sdk/{check-provider-registry-HR6YM5MI.mjs.map → check-provider-registry-XZE5PRSE.mjs.map} +0 -0
  50. /package/dist/sdk/{check-provider-registry-QBURXJ6B.mjs.map → check-provider-registry-ZOGNKTC3.mjs.map} +0 -0
  51. /package/dist/sdk/{config-MTEIGCOQ.mjs.map → config-SW3VO4DQ.mjs.map} +0 -0
  52. /package/dist/sdk/{schedule-tool-62XTFB6K.mjs.map → schedule-tool-74VMD77T.mjs.map} +0 -0
  53. /package/dist/sdk/{schedule-tool-6NALFGQR.mjs.map → schedule-tool-WSZKJUNQ.mjs.map} +0 -0
  54. /package/dist/sdk/{schedule-tool-handler-5K275UT6.mjs.map → schedule-tool-handler-EOQBRZSD.mjs.map} +0 -0
  55. /package/dist/sdk/{schedule-tool-handler-RLAKPPPX.mjs.map → schedule-tool-handler-Q7E5NBHS.mjs.map} +0 -0
  56. /package/dist/sdk/{workflow-check-provider-6TEZHBZJ.mjs.map → workflow-check-provider-GIW4WECT.mjs.map} +0 -0
  57. /package/dist/sdk/{workflow-check-provider-KG6IFH6W.mjs.map → workflow-check-provider-JHHACJHF.mjs.map} +0 -0
@@ -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;IAsJ7B;;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"}
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
- noDefaultAllow: true # Disable default safe command list
493
- noDefaultDeny: false # Keep default dangerous command blocklist
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
- - **`noDefaultAllow`** (boolean): Disable default safe command list (~235 commands). Default: `false`
503
- - **`noDefaultDeny`** (boolean): Disable default dangerous command blocklist (~191 patterns). Default: `false`
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** | Inaccessible |
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** | "Operation not permitted" |
237
- | `~/.gitconfig`, `~/.zsh_history` | **Denied** | "Operation not permitted" |
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
- noDefaultAllow: true # Disable default safe commands
100
- noDefaultDeny: false # Keep dangerous command blocklist
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-13509-28103-src_types_config.ts-0-55255%3E%3E";
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-13509-28103-src_types_config.ts-0-55255%3E%3E";
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 noDefaultAllow: {
1286
+ readonly disableDefaultAllow: {
1287
1287
  readonly type: "boolean";
1288
1288
  readonly description: "Disable default safe command list (use with caution)";
1289
1289
  };
1290
- readonly noDefaultDeny: {
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-13509-28103-src_types_config.ts-0-55255%3E%3E";
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-13509-28103-src_types_config.ts-0-55255>>': {
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-13509-28103-src_types_config.ts-0-55255%3E";
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-13509-28103-src_types_config.ts-0-55255>': {
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAy+Ff,CAAC;AACX,eAAe,YAAY,CAAC"}
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-13509-28103-src_types_config.ts-0-55255%3E%3E",
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-13509-28103-src_types_config.ts-0-55255%3E%3E",
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
- "noDefaultAllow": {
1429
+ "disableDefaultAllow": {
1430
1430
  "type": "boolean",
1431
1431
  "description": "Disable default safe command list (use with caution)"
1432
1432
  },
1433
- "noDefaultDeny": {
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-13509-28103-src_types_config.ts-0-55255%3E%3E",
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-13509-28103-src_types_config.ts-0-55255>>": {
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-13509-28103-src_types_config.ts-0-55255%3E"
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-13509-28103-src_types_config.ts-0-55255>": {
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": {