@probelabs/visor 0.1.144 → 0.1.145
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/architecture.md +28 -0
- package/dist/docs/configuration.md +2 -0
- package/dist/docs/sandbox-engines.md +357 -0
- package/dist/docs/security.md +40 -0
- package/dist/generated/config-schema.d.ts +5 -0
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +9 -0
- package/dist/index.js +670 -162
- package/dist/output/traces/{run-2026-02-25T17-29-59-894Z.ndjson → run-2026-02-26T07-47-34-788Z.ndjson} +84 -84
- package/dist/{traces/run-2026-02-25T17-30-47-149Z.ndjson → output/traces/run-2026-02-26T07-48-25-935Z.ndjson} +1118 -1118
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/sandbox/bubblewrap-sandbox.d.ts +30 -0
- package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -0
- package/dist/sandbox/index.d.ts +3 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/sandbox-manager.d.ts +3 -2
- package/dist/sandbox/sandbox-manager.d.ts.map +1 -1
- package/dist/sandbox/seatbelt-sandbox.d.ts +36 -0
- package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -0
- package/dist/sandbox/types.d.ts +3 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sdk/{check-provider-registry-VTNNTMWC.mjs → check-provider-registry-HFPKHYTG.mjs} +3 -3
- package/dist/sdk/{check-provider-registry-WBEOZCGW.mjs → check-provider-registry-HK6M4PDQ.mjs} +6 -6
- package/dist/sdk/{check-provider-registry-GKLK3I2X.mjs → check-provider-registry-TG5G2TF3.mjs} +6 -6
- package/dist/sdk/{chunk-D3UC5KUJ.mjs → chunk-5FXGIBJQ.mjs} +467 -100
- package/dist/sdk/chunk-5FXGIBJQ.mjs.map +1 -0
- package/dist/sdk/{chunk-FG6THKK7.mjs → chunk-6XPTQBXL.mjs} +3 -3
- package/dist/sdk/{chunk-FG6THKK7.mjs.map → chunk-6XPTQBXL.mjs.map} +1 -1
- package/dist/sdk/{chunk-N7LW3Q5B.mjs → chunk-E6SMU2Z4.mjs} +467 -100
- package/dist/sdk/chunk-E6SMU2Z4.mjs.map +1 -0
- package/dist/sdk/{chunk-PXWWPPNF.mjs → chunk-GZMQPC6D.mjs} +459 -92
- package/dist/sdk/chunk-GZMQPC6D.mjs.map +1 -0
- package/dist/sdk/{chunk-CLQTOZKH.mjs → chunk-I42ZCVA5.mjs} +3 -3
- package/dist/sdk/chunk-K3M5YVEU.mjs +1502 -0
- package/dist/sdk/chunk-K3M5YVEU.mjs.map +1 -0
- package/dist/sdk/{chunk-PQWAAGUP.mjs → chunk-L3XPYQ6I.mjs} +2 -2
- package/dist/sdk/chunk-L6ABOJVL.mjs +739 -0
- package/dist/sdk/chunk-L6ABOJVL.mjs.map +1 -0
- package/dist/sdk/chunk-OM3WYVFI.mjs +443 -0
- package/dist/sdk/chunk-OM3WYVFI.mjs.map +1 -0
- package/dist/sdk/{chunk-AKCHIYWU.mjs → chunk-YOKAA4IU.mjs} +96 -63
- package/dist/sdk/chunk-YOKAA4IU.mjs.map +1 -0
- package/dist/sdk/{config-KOKJ3PYE.mjs → config-AAB2FL22.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-LWH3NQ2S.mjs → failure-condition-evaluator-O464EJMD.mjs} +3 -3
- package/dist/sdk/failure-condition-evaluator-V3EJGD55.mjs +17 -0
- package/dist/sdk/{github-frontend-UUASYGNV.mjs → github-frontend-MSX6Q2WL.mjs} +3 -3
- package/dist/sdk/github-frontend-PSGUGYHT.mjs +1356 -0
- package/dist/sdk/github-frontend-PSGUGYHT.mjs.map +1 -0
- package/dist/sdk/{host-LAF3NFPZ.mjs → host-5BJ25CUZ.mjs} +2 -2
- package/dist/sdk/host-BYIV4QJ3.mjs +63 -0
- package/dist/sdk/host-BYIV4QJ3.mjs.map +1 -0
- package/dist/sdk/{routing-LEUV6A4K.mjs → routing-AJNUTCH7.mjs} +4 -4
- package/dist/sdk/routing-RIHVCEIU.mjs +25 -0
- package/dist/sdk/{schedule-tool-handler-EYDCUGOB.mjs → schedule-tool-handler-4O2VKNG2.mjs} +6 -6
- package/dist/sdk/{schedule-tool-handler-W7IB4MK3.mjs → schedule-tool-handler-BTLEDYAI.mjs} +3 -3
- package/dist/sdk/{schedule-tool-handler-7RGTKO24.mjs → schedule-tool-handler-R7PNPWWK.mjs} +6 -6
- package/dist/sdk/sdk.d.mts +3 -1
- package/dist/sdk/sdk.d.ts +3 -1
- package/dist/sdk/sdk.js +568 -168
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +5 -5
- package/dist/sdk/{trace-helpers-NNBQNFWZ.mjs → trace-helpers-OZTZBK6T.mjs} +2 -2
- package/dist/sdk/trace-helpers-QQSTZGDT.mjs +25 -0
- package/dist/sdk/{workflow-check-provider-WW5U6R2P.mjs → workflow-check-provider-3IIKJFM4.mjs} +3 -3
- package/dist/sdk/workflow-check-provider-3IIKJFM4.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-FLBIJQ4Z.mjs → workflow-check-provider-OM62QYHF.mjs} +6 -6
- package/dist/sdk/workflow-check-provider-OM62QYHF.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-2G2CEXFR.mjs → workflow-check-provider-RARO4N5E.mjs} +6 -6
- package/dist/sdk/workflow-check-provider-RARO4N5E.mjs.map +1 -0
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/traces/{run-2026-02-25T17-29-59-894Z.ndjson → run-2026-02-26T07-47-34-788Z.ndjson} +84 -84
- package/dist/{output/traces/run-2026-02-25T17-30-47-149Z.ndjson → traces/run-2026-02-26T07-48-25-935Z.ndjson} +1118 -1118
- package/dist/utils/workspace-manager.d.ts +9 -0
- package/dist/utils/workspace-manager.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/sdk/chunk-AKCHIYWU.mjs.map +0 -1
- package/dist/sdk/chunk-D3UC5KUJ.mjs.map +0 -1
- package/dist/sdk/chunk-N7LW3Q5B.mjs.map +0 -1
- package/dist/sdk/chunk-PXWWPPNF.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-GKLK3I2X.mjs.map → check-provider-registry-HFPKHYTG.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-VTNNTMWC.mjs.map → check-provider-registry-HK6M4PDQ.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-WBEOZCGW.mjs.map → check-provider-registry-TG5G2TF3.mjs.map} +0 -0
- /package/dist/sdk/{chunk-CLQTOZKH.mjs.map → chunk-I42ZCVA5.mjs.map} +0 -0
- /package/dist/sdk/{chunk-PQWAAGUP.mjs.map → chunk-L3XPYQ6I.mjs.map} +0 -0
- /package/dist/sdk/{config-KOKJ3PYE.mjs.map → config-AAB2FL22.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-LWH3NQ2S.mjs.map → failure-condition-evaluator-O464EJMD.mjs.map} +0 -0
- /package/dist/sdk/{routing-LEUV6A4K.mjs.map → failure-condition-evaluator-V3EJGD55.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-UUASYGNV.mjs.map → github-frontend-MSX6Q2WL.mjs.map} +0 -0
- /package/dist/sdk/{host-LAF3NFPZ.mjs.map → host-5BJ25CUZ.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-7RGTKO24.mjs.map → routing-AJNUTCH7.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-EYDCUGOB.mjs.map → routing-RIHVCEIU.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-W7IB4MK3.mjs.map → schedule-tool-handler-4O2VKNG2.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-NNBQNFWZ.mjs.map → schedule-tool-handler-BTLEDYAI.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-2G2CEXFR.mjs.map → schedule-tool-handler-R7PNPWWK.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-FLBIJQ4Z.mjs.map → trace-helpers-OZTZBK6T.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-WW5U6R2P.mjs.map → trace-helpers-QQSTZGDT.mjs.map} +0 -0
|
@@ -2728,6 +2728,11 @@ var init_config_schema = __esm({
|
|
|
2728
2728
|
SandboxConfig: {
|
|
2729
2729
|
type: "object",
|
|
2730
2730
|
properties: {
|
|
2731
|
+
engine: {
|
|
2732
|
+
type: "string",
|
|
2733
|
+
enum: ["docker", "bubblewrap", "seatbelt"],
|
|
2734
|
+
description: "Sandbox engine type: 'docker' (default), 'bubblewrap' (Linux namespaces), or 'seatbelt' (macOS sandbox-exec)"
|
|
2735
|
+
},
|
|
2731
2736
|
image: {
|
|
2732
2737
|
type: "string",
|
|
2733
2738
|
description: 'Docker image to use (e.g., "node:20-alpine")'
|
|
@@ -4104,92 +4109,120 @@ ${errors}`);
|
|
|
4104
4109
|
message: `Sandbox name '${name}' contains invalid characters. Only letters, numbers, dots, hyphens, underscores allowed.`
|
|
4105
4110
|
});
|
|
4106
4111
|
}
|
|
4107
|
-
|
|
4108
|
-
config.image ? "image" : null,
|
|
4109
|
-
config.dockerfile || config.dockerfile_inline ? "dockerfile" : null,
|
|
4110
|
-
config.compose ? "compose" : null
|
|
4111
|
-
].filter(Boolean);
|
|
4112
|
-
if (modes.length === 0) {
|
|
4113
|
-
errors.push({
|
|
4114
|
-
field: `sandboxes.${name}`,
|
|
4115
|
-
message: `Sandbox '${name}' must specify one of: image, dockerfile, dockerfile_inline, or compose`
|
|
4116
|
-
});
|
|
4117
|
-
} else if (modes.length > 1) {
|
|
4118
|
-
errors.push({
|
|
4119
|
-
field: `sandboxes.${name}`,
|
|
4120
|
-
message: `Sandbox '${name}' has multiple modes (${modes.join(", ")}). Specify exactly one.`
|
|
4121
|
-
});
|
|
4122
|
-
}
|
|
4123
|
-
if (config.compose && !config.service) {
|
|
4112
|
+
if (config.engine && !["docker", "bubblewrap", "seatbelt"].includes(config.engine)) {
|
|
4124
4113
|
errors.push({
|
|
4125
|
-
field: `sandboxes.${name}.
|
|
4126
|
-
message: `Sandbox '${name}'
|
|
4114
|
+
field: `sandboxes.${name}.engine`,
|
|
4115
|
+
message: `Sandbox '${name}' has invalid engine '${config.engine}'. Must be 'docker', 'bubblewrap', or 'seatbelt'.`
|
|
4127
4116
|
});
|
|
4128
4117
|
}
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
|
-
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4118
|
+
const isNativeEngine = config.engine === "bubblewrap" || config.engine === "seatbelt";
|
|
4119
|
+
if (isNativeEngine) {
|
|
4120
|
+
const dockerOnlyFields = [
|
|
4121
|
+
["image", config.image],
|
|
4122
|
+
["dockerfile", config.dockerfile],
|
|
4123
|
+
["dockerfile_inline", config.dockerfile_inline],
|
|
4124
|
+
["compose", config.compose],
|
|
4125
|
+
["service", config.service],
|
|
4126
|
+
["cache", config.cache],
|
|
4127
|
+
["visor_path", config.visor_path],
|
|
4128
|
+
["resources", config.resources]
|
|
4129
|
+
];
|
|
4130
|
+
for (const [field, value] of dockerOnlyFields) {
|
|
4131
|
+
if (value !== void 0) {
|
|
4132
|
+
errors.push({
|
|
4133
|
+
field: `sandboxes.${name}.${field}`,
|
|
4134
|
+
message: `Sandbox '${name}' uses ${config.engine} engine but has Docker-only field '${field}'. Remove it or switch to engine: docker.`
|
|
4135
|
+
});
|
|
4136
|
+
}
|
|
4137
|
+
}
|
|
4138
|
+
} else {
|
|
4139
|
+
const modes = [
|
|
4140
|
+
config.image ? "image" : null,
|
|
4141
|
+
config.dockerfile || config.dockerfile_inline ? "dockerfile" : null,
|
|
4142
|
+
config.compose ? "compose" : null
|
|
4143
|
+
].filter(Boolean);
|
|
4144
|
+
if (modes.length === 0) {
|
|
4143
4145
|
errors.push({
|
|
4144
|
-
field: `sandboxes.${name}
|
|
4145
|
-
message: `
|
|
4146
|
+
field: `sandboxes.${name}`,
|
|
4147
|
+
message: `Sandbox '${name}' must specify one of: image, dockerfile, dockerfile_inline, or compose`
|
|
4148
|
+
});
|
|
4149
|
+
} else if (modes.length > 1) {
|
|
4150
|
+
errors.push({
|
|
4151
|
+
field: `sandboxes.${name}`,
|
|
4152
|
+
message: `Sandbox '${name}' has multiple modes (${modes.join(", ")}). Specify exactly one.`
|
|
4146
4153
|
});
|
|
4147
4154
|
}
|
|
4148
|
-
if (
|
|
4155
|
+
if (config.compose && !config.service) {
|
|
4149
4156
|
errors.push({
|
|
4150
|
-
field: `sandboxes.${name}.
|
|
4151
|
-
message: `
|
|
4157
|
+
field: `sandboxes.${name}.service`,
|
|
4158
|
+
message: `Sandbox '${name}' uses compose mode but is missing required 'service' field`
|
|
4152
4159
|
});
|
|
4153
4160
|
}
|
|
4154
|
-
|
|
4155
|
-
if (config.visor_path) {
|
|
4156
|
-
if (!config.visor_path.startsWith("/")) {
|
|
4161
|
+
if (config.dockerfile && /\.\./.test(config.dockerfile)) {
|
|
4157
4162
|
errors.push({
|
|
4158
|
-
field: `sandboxes.${name}.
|
|
4159
|
-
message: `
|
|
4163
|
+
field: `sandboxes.${name}.dockerfile`,
|
|
4164
|
+
message: `Dockerfile path '${config.dockerfile}' in sandbox '${name}' must not contain '..' path traversal`
|
|
4160
4165
|
});
|
|
4161
4166
|
}
|
|
4162
|
-
if (/\.\./.test(config.
|
|
4167
|
+
if (config.compose && /\.\./.test(config.compose)) {
|
|
4163
4168
|
errors.push({
|
|
4164
|
-
field: `sandboxes.${name}.
|
|
4165
|
-
message: `
|
|
4169
|
+
field: `sandboxes.${name}.compose`,
|
|
4170
|
+
message: `Compose file path '${config.compose}' in sandbox '${name}' must not contain '..' path traversal`
|
|
4166
4171
|
});
|
|
4167
4172
|
}
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
for (const p of config.cache.paths) {
|
|
4171
|
-
if (!p.startsWith("/")) {
|
|
4173
|
+
if (config.visor_path) {
|
|
4174
|
+
if (!config.visor_path.startsWith("/")) {
|
|
4172
4175
|
errors.push({
|
|
4173
|
-
field: `sandboxes.${name}.
|
|
4174
|
-
message: `
|
|
4175
|
-
value: p
|
|
4176
|
+
field: `sandboxes.${name}.visor_path`,
|
|
4177
|
+
message: `visor_path '${config.visor_path}' in sandbox '${name}' must be an absolute path (start with /)`
|
|
4176
4178
|
});
|
|
4177
4179
|
}
|
|
4178
|
-
if (/\.\./.test(
|
|
4180
|
+
if (/\.\./.test(config.visor_path)) {
|
|
4179
4181
|
errors.push({
|
|
4180
|
-
field: `sandboxes.${name}.
|
|
4181
|
-
message: `
|
|
4182
|
-
|
|
4182
|
+
field: `sandboxes.${name}.visor_path`,
|
|
4183
|
+
message: `visor_path '${config.visor_path}' in sandbox '${name}' must not contain '..' path traversal`
|
|
4184
|
+
});
|
|
4185
|
+
}
|
|
4186
|
+
}
|
|
4187
|
+
if (config.cache?.paths) {
|
|
4188
|
+
for (const p of config.cache.paths) {
|
|
4189
|
+
if (!p.startsWith("/")) {
|
|
4190
|
+
errors.push({
|
|
4191
|
+
field: `sandboxes.${name}.cache.paths`,
|
|
4192
|
+
message: `Cache path '${p}' in sandbox '${name}' must be absolute (start with /)`,
|
|
4193
|
+
value: p
|
|
4194
|
+
});
|
|
4195
|
+
}
|
|
4196
|
+
if (/\.\./.test(p)) {
|
|
4197
|
+
errors.push({
|
|
4198
|
+
field: `sandboxes.${name}.cache.paths`,
|
|
4199
|
+
message: `Cache path '${p}' in sandbox '${name}' must not contain '..' path traversal`,
|
|
4200
|
+
value: p
|
|
4201
|
+
});
|
|
4202
|
+
}
|
|
4203
|
+
}
|
|
4204
|
+
}
|
|
4205
|
+
if (config.resources?.cpu !== void 0) {
|
|
4206
|
+
if (typeof config.resources.cpu !== "number" || config.resources.cpu <= 0) {
|
|
4207
|
+
errors.push({
|
|
4208
|
+
field: `sandboxes.${name}.resources.cpu`,
|
|
4209
|
+
message: `CPU limit in sandbox '${name}' must be a positive number`,
|
|
4210
|
+
value: config.resources.cpu
|
|
4183
4211
|
});
|
|
4184
4212
|
}
|
|
4185
4213
|
}
|
|
4186
4214
|
}
|
|
4187
|
-
if (config.
|
|
4188
|
-
if (
|
|
4215
|
+
if (config.workdir) {
|
|
4216
|
+
if (!config.workdir.startsWith("/")) {
|
|
4189
4217
|
errors.push({
|
|
4190
|
-
field: `sandboxes.${name}.
|
|
4191
|
-
message: `
|
|
4192
|
-
|
|
4218
|
+
field: `sandboxes.${name}.workdir`,
|
|
4219
|
+
message: `Workdir '${config.workdir}' in sandbox '${name}' must be an absolute path (start with /)`
|
|
4220
|
+
});
|
|
4221
|
+
}
|
|
4222
|
+
if (/\.\./.test(config.workdir)) {
|
|
4223
|
+
errors.push({
|
|
4224
|
+
field: `sandboxes.${name}.workdir`,
|
|
4225
|
+
message: `Workdir '${config.workdir}' in sandbox '${name}' must not contain '..' path traversal`
|
|
4193
4226
|
});
|
|
4194
4227
|
}
|
|
4195
4228
|
}
|
|
@@ -4933,4 +4966,4 @@ export {
|
|
|
4933
4966
|
config_exports,
|
|
4934
4967
|
init_config
|
|
4935
4968
|
};
|
|
4936
|
-
//# sourceMappingURL=chunk-
|
|
4969
|
+
//# sourceMappingURL=chunk-YOKAA4IU.mjs.map
|