humanish 0.107.0 → 0.109.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +73 -69
- package/CHANGELOG.md +27 -0
- package/CONTEXT.md +51 -44
- package/README.md +148 -175
- package/SECURITY.md +16 -26
- package/TELEMETRY.md +8 -6
- package/dist/actors/affordance.d.ts +4 -4
- package/dist/actors/affordance.js +12 -12
- package/dist/actors/agent-session.d.ts +2 -2
- package/dist/actors/agent-session.js +7 -7
- package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
- package/dist/actors/codex/app-server-actor-trace.js +1 -1
- package/dist/actors/codex/app-server-trace.js +2 -1
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/restricted-executable.d.ts +4 -4
- package/dist/actors/codex/restricted-executable.js +8 -8
- package/dist/actors/codex/restricted-launch.d.ts +2 -1
- package/dist/actors/codex/restricted-launch.js +1 -1
- package/dist/actors/codex/restricted-participant.js +20 -18
- package/dist/actors/codex/restricted-policy.d.ts +2 -2
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +3 -3
- package/dist/actors/codex/restricted-session.js +10 -5
- package/dist/actors/computer-use/actor.d.ts +18 -18
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/admission-limit.d.ts +3 -3
- package/dist/actors/computer-use/admission-limit.js +4 -4
- package/dist/actors/computer-use/executor-error.d.ts +2 -2
- package/dist/actors/computer-use/executor-error.js +3 -3
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +15 -15
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +14 -12
- package/dist/actors/computer-use/loop/debrief.js +2 -2
- package/dist/actors/computer-use/loop/ending.d.ts +6 -6
- package/dist/actors/computer-use/loop/ending.js +18 -17
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +15 -14
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +12 -12
- package/dist/actors/computer-use/loop/session.d.ts +4 -4
- package/dist/actors/computer-use/loop/session.js +4 -4
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +1 -1
- package/dist/actors/computer-use/loop/trace.js +11 -9
- package/dist/actors/computer-use/loop/types.d.ts +47 -45
- package/dist/actors/computer-use/loop/usage.d.ts +2 -2
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.d.ts +6 -1
- package/dist/actors/computer-use/loop.js +26 -4
- package/dist/actors/computer-use/openai-context.d.ts +37 -0
- package/dist/actors/computer-use/openai-context.js +214 -0
- package/dist/actors/computer-use/openai-provider.d.ts +13 -10
- package/dist/actors/computer-use/openai-provider.js +52 -41
- package/dist/actors/computer-use/openai-requests.d.ts +36 -10
- package/dist/actors/computer-use/openai-requests.js +82 -15
- package/dist/actors/computer-use/openai-wire.d.ts +19 -7
- package/dist/actors/computer-use/openai-wire.js +36 -34
- package/dist/actors/computer-use/provider-error.d.ts +4 -4
- package/dist/actors/computer-use/provider-error.js +6 -6
- package/dist/actors/contract.d.ts +82 -47
- package/dist/actors/contract.js +30 -24
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +13 -12
- package/dist/actors/local-agent/cli.d.ts +9 -7
- package/dist/actors/local-agent/cli.js +24 -28
- package/dist/actors/local-agent/readiness.d.ts +2 -2
- package/dist/actors/local-agent/readiness.js +4 -4
- package/dist/actors/reasoning-effort.js +8 -8
- package/dist/actors/registry.d.ts +12 -12
- package/dist/actors/registry.js +21 -20
- package/dist/actors/scripted-browser/actor.d.ts +10 -10
- package/dist/actors/scripted-browser/actor.js +17 -17
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/steps.js +1 -1
- package/dist/actors/scripted-browser/types.d.ts +1 -1
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/analysis/automatic-completion.d.ts +7 -7
- package/dist/analysis/automatic-completion.js +1 -1
- package/dist/analysis/automatic-config.d.ts +6 -6
- package/dist/analysis/automatic-config.js +1 -1
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/execute.d.ts +1 -1
- package/dist/analysis/execute.js +1 -1
- package/dist/analysis/service.js +5 -5
- package/dist/analysis/types.d.ts +6 -0
- package/dist/browser-control/client.js +16 -16
- package/dist/browser-control/dispatcher.js +4 -4
- package/dist/browser-control/protocol.js +14 -14
- package/dist/browser-control/recording-transfer.js +4 -4
- package/dist/browser-control/transport.js +7 -7
- package/dist/cli/commands/analysis-signals.d.ts +2 -2
- package/dist/cli/commands/analyze.js +19 -16
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +48 -35
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.d.ts +0 -1
- package/dist/cli/commands/observe.js +136 -112
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/runs.js +136 -139
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +27 -24
- package/dist/cli/commands/study-format.d.ts +9 -0
- package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
- package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
- package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
- package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
- package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
- package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
- package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
- package/dist/cli/commands/study-route-run.d.ts +19 -0
- package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
- package/dist/cli/commands/study-route-scripted.d.ts +17 -0
- package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
- package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
- package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
- package/dist/cli/commands/study-route-terminal.d.ts +17 -0
- package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
- package/dist/cli/commands/study-run.d.ts +9 -0
- package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
- package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
- package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +146 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +31 -31
- package/dist/cli/commands/watch.js +71 -121
- package/dist/cli/deprecations.d.ts +6 -0
- package/dist/cli/deprecations.js +18 -0
- package/dist/cli/doctor.d.ts +18 -8
- package/dist/cli/doctor.js +114 -59
- package/dist/cli/first-run-path.d.ts +15 -13
- package/dist/cli/first-run-path.js +35 -33
- package/dist/cli/io.d.ts +44 -9
- package/dist/cli/io.js +98 -23
- package/dist/cli/observer-follow.d.ts +3 -3
- package/dist/cli/observer-follow.js +6 -7
- package/dist/cli/orientation.d.ts +10 -7
- package/dist/cli/orientation.js +89 -47
- package/dist/cli/product-sentence.d.ts +6 -0
- package/dist/cli/product-sentence.js +6 -0
- package/dist/cli/program.d.ts +6 -1
- package/dist/cli/program.js +111 -43
- package/dist/cli/telemetry.d.ts +16 -16
- package/dist/cli/telemetry.js +46 -44
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +13 -12
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +7 -7
- package/dist/comms/catch-host.js +17 -17
- package/dist/comms/connections.d.ts +1 -1
- package/dist/comms/connections.js +2 -2
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +5 -5
- package/dist/comms/external-evidence.js +5 -4
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +3 -3
- package/dist/comms/fake-inbox.js +3 -3
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/receiving-runtime.d.ts +4 -4
- package/dist/comms/sandbox-catch-script.d.ts +6 -6
- package/dist/comms/sandbox-catch-script.js +6 -6
- package/dist/comms/sandbox-catch.d.ts +38 -39
- package/dist/comms/sandbox-catch.js +36 -37
- package/dist/comms/setup.d.ts +2 -2
- package/dist/comms/setup.js +56 -25
- package/dist/comms/thread-evidence.d.ts +1 -1
- package/dist/comms/thread-evidence.js +6 -6
- package/dist/comms/types.d.ts +6 -6
- package/dist/comms/types.js +3 -3
- package/dist/evidence/frame-signature.d.ts +1 -1
- package/dist/evidence/frame-signature.js +4 -4
- package/dist/evidence/redaction.d.ts +3 -3
- package/dist/evidence/redaction.js +4 -4
- package/dist/feedback/draft.js +38 -80
- package/dist/feedback/export-bundle.js +1 -1
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +10 -10
- package/dist/feedback/feedback.d.ts +2 -2
- package/dist/feedback/feedback.js +21 -3
- package/dist/feedback/proof.d.ts +1 -1
- package/dist/feedback/proof.js +2 -2
- package/dist/guest/bootstrap.js +6 -6
- package/dist/guest/browser-tools.js +8 -8
- package/dist/guest/chromium-text.js +19 -19
- package/dist/guest/desktop-executor.d.ts +2 -2
- package/dist/guest/desktop-executor.js +20 -20
- package/dist/guest/desktop-keys.js +4 -4
- package/dist/guest/desktop-media.d.ts +2 -2
- package/dist/guest/desktop-media.js +16 -16
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/desktop-native.js +10 -10
- package/dist/guest/runtime-desktop.js +2 -2
- package/dist/guest/runtime-processes.d.ts +2 -2
- package/dist/guest/runtime-processes.js +2 -2
- package/dist/guest/runtime.js +6 -6
- package/dist/index.d.ts +14 -14
- package/dist/index.js +8 -8
- package/dist/keys/key-resolution.d.ts +5 -5
- package/dist/keys/key-resolution.js +23 -23
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +7 -7
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +5 -4
- package/dist/observer/exposure.d.ts +1 -1
- package/dist/observer/exposure.js +11 -11
- package/dist/observer/http.js +1 -1
- package/dist/observer/library.d.ts +3 -1
- package/dist/observer/library.js +8 -3
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +17 -6
- package/dist/observer/run-routes.d.ts +4 -3
- package/dist/observer/run-routes.js +38 -13
- package/dist/observer/serve.d.ts +1 -1
- package/dist/observer/serve.js +7 -3
- package/dist/observer/tunnel.js +1 -1
- package/dist/observer-app.html +4 -4
- package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
- package/dist/routes/computer-use/bundle-parts.js +18 -17
- package/dist/routes/computer-use/bundle.d.ts +2 -2
- package/dist/routes/computer-use/bundle.js +10 -9
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
- package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
- package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +1 -1
- package/dist/routes/computer-use/fanout-bundle.js +27 -26
- package/dist/routes/computer-use/fanout-records.js +12 -13
- package/dist/routes/computer-use/live-flush.d.ts +4 -4
- package/dist/routes/computer-use/live-flush.js +6 -6
- package/dist/routes/computer-use/live-phase.d.ts +5 -4
- package/dist/routes/computer-use/live-phase.js +8 -8
- package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
- package/dist/routes/computer-use/local-tree-pack.js +1 -1
- package/dist/routes/computer-use/local-vm.d.ts +8 -8
- package/dist/routes/computer-use/local-vm.js +3 -3
- package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
- package/dist/routes/computer-use/participant-desktop.js +5 -5
- package/dist/routes/computer-use/participant-execution.d.ts +4 -4
- package/dist/routes/computer-use/participant-execution.js +10 -10
- package/dist/routes/computer-use/participant-model.d.ts +6 -0
- package/dist/routes/computer-use/participant-model.js +33 -15
- package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
- package/dist/routes/computer-use/participant-prompt.js +9 -9
- package/dist/routes/computer-use/participant-runs.d.ts +16 -16
- package/dist/routes/computer-use/participant-runs.js +26 -25
- package/dist/routes/computer-use/plan.d.ts +12 -12
- package/dist/routes/computer-use/plan.js +42 -42
- package/dist/routes/computer-use/preflight.d.ts +5 -5
- package/dist/routes/computer-use/preflight.js +25 -25
- package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
- package/dist/routes/computer-use/rerun-selection.js +4 -3
- package/dist/routes/computer-use/result.d.ts +4 -4
- package/dist/routes/computer-use/result.js +22 -21
- package/dist/routes/computer-use/route.d.ts +12 -11
- package/dist/routes/computer-use/route.js +31 -30
- package/dist/routes/computer-use/self-report.d.ts +7 -7
- package/dist/routes/computer-use/self-report.js +32 -32
- package/dist/routes/computer-use/setup.d.ts +23 -23
- package/dist/routes/computer-use/setup.js +28 -29
- package/dist/routes/computer-use/single-bundle.d.ts +11 -11
- package/dist/routes/computer-use/single-bundle.js +40 -41
- package/dist/routes/computer-use/subject-projection.d.ts +4 -4
- package/dist/routes/computer-use/subject-projection.js +6 -6
- package/dist/routes/computer-use/types.d.ts +71 -73
- package/dist/routes/computer-use/types.js +12 -12
- package/dist/routes/preview.d.ts +13 -7
- package/dist/routes/preview.js +11 -7
- package/dist/routes/scripted/bundle.d.ts +7 -7
- package/dist/routes/scripted/bundle.js +20 -18
- package/dist/routes/scripted/plan.d.ts +8 -8
- package/dist/routes/scripted/plan.js +13 -13
- package/dist/routes/scripted/result.d.ts +3 -3
- package/dist/routes/scripted/result.js +13 -13
- package/dist/routes/scripted/route.d.ts +9 -9
- package/dist/routes/scripted/route.js +15 -16
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +5 -5
- package/dist/routes/scripted/setup.d.ts +6 -6
- package/dist/routes/scripted/setup.js +8 -8
- package/dist/routes/scripted/subject.d.ts +5 -5
- package/dist/routes/scripted/subject.js +4 -4
- package/dist/routes/scripted/surface-records.d.ts +1 -1
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +3 -3
- package/dist/routes/scripted/types.d.ts +18 -20
- package/dist/routes/scripted/types.js +2 -2
- package/dist/routes/shared-world/bundle-records.js +11 -10
- package/dist/routes/shared-world/bundle.d.ts +5 -5
- package/dist/routes/shared-world/bundle.js +46 -43
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +2 -2
- package/dist/routes/shared-world/comms.d.ts +14 -14
- package/dist/routes/shared-world/comms.js +19 -18
- package/dist/routes/shared-world/external-public.d.ts +4 -3
- package/dist/routes/shared-world/external-public.js +16 -12
- package/dist/routes/shared-world/handoff.d.ts +7 -6
- package/dist/routes/shared-world/handoff.js +65 -57
- package/dist/routes/shared-world/lobby-code.d.ts +2 -2
- package/dist/routes/shared-world/lobby-code.js +9 -9
- package/dist/routes/shared-world/participant-specs.d.ts +10 -9
- package/dist/routes/shared-world/participant-specs.js +38 -31
- package/dist/routes/shared-world/plan.d.ts +9 -9
- package/dist/routes/shared-world/plan.js +16 -16
- package/dist/routes/shared-world/provenance.d.ts +2 -2
- package/dist/routes/shared-world/provenance.js +2 -2
- package/dist/routes/shared-world/provisioned.d.ts +8 -8
- package/dist/routes/shared-world/provisioned.js +18 -17
- package/dist/routes/shared-world/result.d.ts +6 -6
- package/dist/routes/shared-world/result.js +29 -29
- package/dist/routes/shared-world/route.d.ts +11 -11
- package/dist/routes/shared-world/route.js +40 -39
- package/dist/routes/shared-world/setup.d.ts +16 -16
- package/dist/routes/shared-world/setup.js +23 -23
- package/dist/routes/shared-world/types.d.ts +55 -53
- package/dist/routes/shared-world/types.js +4 -4
- package/dist/routes/terminal/adapter.d.ts +5 -5
- package/dist/routes/terminal/adapter.js +9 -9
- package/dist/routes/terminal/bundle.d.ts +13 -13
- package/dist/routes/terminal/bundle.js +28 -27
- package/dist/routes/terminal/credentials.d.ts +8 -8
- package/dist/routes/terminal/credentials.js +12 -12
- package/dist/routes/terminal/dry-run.d.ts +4 -4
- package/dist/routes/terminal/dry-run.js +12 -12
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +5 -5
- package/dist/routes/terminal/ledger.js +14 -14
- package/dist/routes/terminal/lifetime.d.ts +1 -1
- package/dist/routes/terminal/lifetime.js +1 -1
- package/dist/routes/terminal/live-finish.d.ts +2 -2
- package/dist/routes/terminal/live-finish.js +10 -10
- package/dist/routes/terminal/live-sandbox.d.ts +2 -2
- package/dist/routes/terminal/live-sandbox.js +15 -15
- package/dist/routes/terminal/participant-text.js +2 -1
- package/dist/routes/terminal/persona.d.ts +2 -2
- package/dist/routes/terminal/persona.js +3 -3
- package/dist/routes/terminal/plan.d.ts +7 -7
- package/dist/routes/terminal/plan.js +15 -15
- package/dist/routes/terminal/recorder.js +2 -2
- package/dist/routes/terminal/result.d.ts +5 -5
- package/dist/routes/terminal/result.js +14 -14
- package/dist/routes/terminal/route.d.ts +9 -9
- package/dist/routes/terminal/route.js +19 -20
- package/dist/routes/terminal/sandbox.d.ts +1 -1
- package/dist/routes/terminal/sandbox.js +1 -1
- package/dist/routes/terminal/session.d.ts +5 -5
- package/dist/routes/terminal/session.js +14 -13
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +7 -8
- package/dist/routes/terminal/trace.d.ts +4 -4
- package/dist/routes/terminal/trace.js +2 -2
- package/dist/routes/terminal/types.d.ts +48 -50
- package/dist/routes/terminal/types.js +5 -5
- package/dist/run/bundle-shape.js +3 -3
- package/dist/run/bundle.d.ts +49 -49
- package/dist/run/bundle.js +3 -2
- package/dist/run/cost-summary.js +3 -3
- package/dist/run/costs.d.ts +23 -0
- package/dist/run/costs.js +79 -44
- package/dist/run/detail.d.ts +6 -6
- package/dist/run/detail.js +4 -4
- package/dist/run/dry-run-inputs.d.ts +1 -1
- package/dist/run/dry-run-inputs.js +2 -2
- package/dist/run/dry-run.js +20 -20
- package/dist/run/judge.d.ts +19 -13
- package/dist/run/judge.js +18 -8
- package/dist/run/outcomes.d.ts +1 -1
- package/dist/run/participant.d.ts +1 -1
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +1 -1
- package/dist/run/preflight-receipts.js +1 -1
- package/dist/run/pricing.d.ts +11 -6
- package/dist/run/pricing.js +22 -15
- package/dist/run/projection.d.ts +46 -46
- package/dist/run/projection.js +57 -57
- package/dist/run/reclaim.d.ts +1 -1
- package/dist/run/reclaim.js +3 -3
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-cost.d.ts +53 -0
- package/dist/run/run-cost.js +105 -0
- package/dist/run/run-index-analysis.d.ts +15 -0
- package/dist/run/run-index-analysis.js +77 -0
- package/dist/run/run-index.d.ts +19 -7
- package/dist/run/run-index.js +77 -64
- package/dist/run/run-not-found.d.ts +5 -0
- package/dist/run/run-not-found.js +15 -0
- package/dist/run/run.d.ts +6 -5
- package/dist/run/run.js +3 -3
- package/dist/run/sandbox-receipts.d.ts +2 -2
- package/dist/run/sandbox-receipts.js +3 -3
- package/dist/run/shared-world-evidence.d.ts +37 -36
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +1 -1
- package/dist/run/shared-world-shape.js +7 -7
- package/dist/run/stats.d.ts +14 -8
- package/dist/run/stats.js +121 -63
- package/dist/run/status.d.ts +16 -29
- package/dist/run/status.js +10 -29
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +7 -7
- package/dist/run/study-provenance.d.ts +49 -0
- package/dist/run/study-provenance.js +66 -0
- package/dist/run/study-result.d.ts +11 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run-study.d.ts +112 -0
- package/dist/{run-lab.js → run-study.js} +52 -47
- package/dist/{lab → study}/adapter-extension.d.ts +15 -27
- package/dist/{lab → study}/adapter-extension.js +10 -45
- package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
- package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
- package/dist/study/composition-rules.d.ts +7 -0
- package/dist/{lab → study}/composition-rules.js +53 -53
- package/dist/study/config.d.ts +15 -0
- package/dist/{lab → study}/config.js +98 -41
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/{lab → study}/device-presets.d.ts +10 -10
- package/dist/{lab → study}/device-presets.js +11 -11
- package/dist/study/discover.d.ts +75 -0
- package/dist/{lab → study}/discover.js +134 -95
- package/dist/{lab → study}/doctor.d.ts +19 -12
- package/dist/{lab → study}/doctor.js +58 -20
- package/dist/study/field-paths.d.ts +12 -0
- package/dist/study/field-paths.js +126 -0
- package/dist/study/files.d.ts +26 -0
- package/dist/study/files.js +44 -0
- package/dist/{lab → study}/init-templates.d.ts +2 -2
- package/dist/study/init-templates.js +421 -0
- package/dist/{lab → study}/init.d.ts +2 -2
- package/dist/{lab → study}/init.js +46 -11
- package/dist/study/keys.d.ts +4 -0
- package/dist/{lab → study}/keys.js +46 -12
- package/dist/study/migrate.d.ts +48 -0
- package/dist/study/migrate.js +408 -0
- package/dist/study/owned-files.d.ts +38 -0
- package/dist/study/owned-files.js +182 -0
- package/dist/{lab → study}/parse/actors.d.ts +5 -5
- package/dist/{lab → study}/parse/actors.js +14 -14
- package/dist/study/parse/comms.d.ts +12 -0
- package/dist/{lab → study}/parse/comms.js +5 -5
- package/dist/study/parse/execution.d.ts +19 -0
- package/dist/{lab → study}/parse/execution.js +13 -13
- package/dist/study/parse/study-v3.d.ts +21 -0
- package/dist/study/parse/study-v3.js +259 -0
- package/dist/study/parse/subject-state.d.ts +30 -0
- package/dist/{lab → study}/parse/subject-state.js +19 -19
- package/dist/{lab → study}/parse/subject.d.ts +3 -3
- package/dist/{lab → study}/parse/subject.js +34 -34
- package/dist/{lab → study}/parse/values.d.ts +3 -3
- package/dist/{lab → study}/parse/values.js +3 -3
- package/dist/{lab → study}/persona-resolve.d.ts +8 -8
- package/dist/{lab → study}/persona-resolve.js +6 -6
- package/dist/{lab → study}/plan-base.d.ts +7 -7
- package/dist/{lab → study}/plan-base.js +1 -1
- package/dist/{lab → study}/plan-participants.d.ts +12 -12
- package/dist/{lab → study}/plan-participants.js +4 -4
- package/dist/{lab → study}/plan-types.d.ts +31 -31
- package/dist/{lab → study}/plan-types.js +2 -2
- package/dist/study/plan.d.ts +13 -0
- package/dist/study/plan.js +101 -0
- package/dist/study/preflight-probes.d.ts +3 -0
- package/dist/{lab → study}/preflight-probes.js +20 -19
- package/dist/study/preflight-result.d.ts +8 -0
- package/dist/{lab → study}/preflight-result.js +5 -4
- package/dist/study/preflight.d.ts +94 -0
- package/dist/{lab → study}/preflight.js +12 -12
- package/dist/{lab → study}/requirements.d.ts +3 -3
- package/dist/{lab → study}/requirements.js +1 -1
- package/dist/study/route-inputs.d.ts +28 -0
- package/dist/{lab → study}/route-inputs.js +1 -1
- package/dist/{lab → study}/routing.d.ts +39 -33
- package/dist/{lab → study}/routing.js +60 -29
- package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
- package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
- package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
- package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
- package/dist/study/run-study-options.d.ts +28 -0
- package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
- package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
- package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
- package/dist/{lab → study}/summary.d.ts +16 -15
- package/dist/{lab → study}/summary.js +21 -21
- package/dist/{lab → study}/tasks.d.ts +18 -18
- package/dist/{lab → study}/tasks.js +14 -14
- package/dist/{lab → study}/types.d.ts +202 -196
- package/dist/{lab → study}/types.js +3 -1
- package/dist/{lab → study}/validation.d.ts +27 -27
- package/dist/{lab → study}/validation.js +53 -51
- package/dist/study/warnings.d.ts +12 -0
- package/dist/{lab → study}/warnings.js +62 -34
- package/dist/subject/clone.d.ts +7 -7
- package/dist/subject/clone.js +2 -2
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +2 -2
- package/dist/subject/local-tree-archive.d.ts +2 -2
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +4 -4
- package/dist/subject/node-bootstrap.js +1 -1
- package/dist/subject/runtime.js +9 -10
- package/dist/subject/serve.d.ts +5 -5
- package/dist/subject/serve.js +3 -3
- package/dist/subject/state.d.ts +4 -4
- package/dist/subject/state.js +1 -1
- package/dist/subject/steps.d.ts +6 -6
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/desktop-session.js +2 -2
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
- package/dist/substrates/e2b/cdp-probe.js +14 -17
- package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
- package/dist/substrates/e2b/desktop-browser.js +9 -9
- package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
- package/dist/substrates/e2b/desktop-cdp.js +9 -9
- package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
- package/dist/substrates/e2b/desktop-executor.js +13 -13
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +8 -8
- package/dist/substrates/e2b/desktop-media.d.ts +4 -4
- package/dist/substrates/e2b/desktop-media.js +1 -1
- package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
- package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
- package/dist/substrates/e2b/lifetime.js +1 -1
- package/dist/substrates/e2b/sandbox.d.ts +4 -4
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +12 -12
- package/dist/substrates/e2b/sdk.js +7 -7
- package/dist/substrates/local/runtime-config.d.ts +4 -4
- package/dist/substrates/local/runtime-config.js +4 -4
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +13 -13
- package/dist/tui/contract.d.ts +23 -23
- package/dist/tui/contract.js +11 -11
- package/dist/tui/launch.d.ts +7 -7
- package/dist/tui/launch.js +36 -31
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +139 -139
- package/dist/verify/actor.d.ts +8 -8
- package/dist/verify/actor.js +36 -36
- package/dist/verify/artifacts.d.ts +2 -2
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +6 -6
- package/dist/verify/costs.js +8 -8
- package/dist/verify/shared-world-concurrent.d.ts +2 -2
- package/dist/verify/shared-world-concurrent.js +79 -76
- package/dist/verify/shared-world.d.ts +2 -2
- package/dist/verify/shared-world.js +16 -16
- package/dist/verify/subject.d.ts +5 -5
- package/dist/verify/subject.js +19 -19
- package/dist/verify/verify.js +94 -44
- package/docs/README.md +25 -32
- package/docs/architecture/actor-contract.md +60 -91
- package/docs/architecture/browser-control.md +1 -1
- package/docs/architecture/desktop-sessions.md +7 -7
- package/docs/architecture/external-public-shared-world.md +68 -65
- package/docs/architecture/github-feedback-loop.md +2 -5
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +34 -34
- package/docs/architecture/restricted-codex-analysis.md +34 -28
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -58
- package/docs/architecture/task-protocol-support.md +6 -6
- package/docs/architecture/terminal-product-route.md +70 -110
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +4 -7
- package/docs/contracts/core.md +1 -3
- package/docs/contracts/errors.md +62 -0
- package/docs/contracts/feedback.md +8 -9
- package/docs/contracts/policy.md +7 -12
- package/docs/contracts/run-bundle.md +42 -44
- package/docs/contracts/schemas.md +446 -368
- package/docs/contracts/study-analysis.md +7 -4
- package/docs/contracts/study-costs.md +28 -9
- package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
- package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
- package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
- package/docs/principles/actor-fidelity.md +4 -4
- package/docs/principles/engineering.md +3 -3
- package/docs/principles/invariants-and-defaults.md +38 -38
- package/docs/principles/self-driving-harness.md +1 -5
- package/docs/principles/three-roles.md +1 -1
- package/docs/product/automatic-analysis.md +7 -7
- package/examples/README.md +1 -1
- package/examples/participant/README.md +5 -5
- package/examples/participant/run.mjs +11 -10
- package/examples/scorer/README.md +3 -3
- package/examples/scorer/run.mjs +11 -12
- package/examples/scorer/scorer.mjs +3 -3
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +64 -60
- package/skills/humanish/agents/openai.yaml +1 -1
- package/AGENTS.md +0 -99
- package/CONTRIBUTING.md +0 -148
- package/dist/actors/codex/qualified-versions.d.ts +0 -72
- package/dist/actors/codex/qualified-versions.js +0 -132
- package/dist/cli/commands/lab-format.d.ts +0 -8
- package/dist/cli/commands/lab-route-run.d.ts +0 -19
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
- package/dist/cli/commands/lab-run.d.ts +0 -9
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -199
- package/dist/cli/renamed-options.d.ts +0 -11
- package/dist/cli/renamed-options.js +0 -18
- package/dist/lab/composition-rules.d.ts +0 -7
- package/dist/lab/config.d.ts +0 -7
- package/dist/lab/discover.d.ts +0 -65
- package/dist/lab/init-templates.js +0 -416
- package/dist/lab/keys.d.ts +0 -2
- package/dist/lab/parse/comms.d.ts +0 -12
- package/dist/lab/parse/execution.d.ts +0 -19
- package/dist/lab/parse/subject-state.d.ts +0 -30
- package/dist/lab/plan.d.ts +0 -19
- package/dist/lab/plan.js +0 -132
- package/dist/lab/preflight-probes.d.ts +0 -3
- package/dist/lab/preflight-result.d.ts +0 -7
- package/dist/lab/preflight.d.ts +0 -92
- package/dist/lab/route-inputs.d.ts +0 -28
- package/dist/lab/run-lab-options.d.ts +0 -28
- package/dist/lab/warnings.d.ts +0 -2
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/run-lab.d.ts +0 -112
- package/docs/architecture/comms-inbox.md +0 -122
- package/docs/architecture/desktop-recording.md +0 -80
- package/docs/architecture/local-browser-runtime.md +0 -178
- package/docs/architecture/observer-review.md +0 -144
- package/docs/architecture/participant-media.md +0 -90
- package/docs/architecture/project-layout.md +0 -62
- package/docs/architecture/real-email-receiving.md +0 -136
- package/docs/assets/humanish-drawdb-hero.png +0 -0
- package/docs/assets/humanish-observer-hero.png +0 -0
- package/docs/goals/current.md +0 -207
- package/docs/product/lobby-trivia-3player-external-public.md +0 -77
- package/docs/product/open-source-install-experience.md +0 -240
- package/docs/ramp/README.md +0 -295
- package/docs/release/open-source-readiness.md +0 -222
- package/docs/release/public-readiness-standard.md +0 -210
- package/docs/roadmap/world-class-open-source-v0.md +0 -311
- /package/dist/{lab → study}/init-paths.d.ts +0 -0
- /package/dist/{lab → study}/init-paths.js +0 -0
- /package/dist/{lab → study}/init-plan.d.ts +0 -0
- /package/dist/{lab → study}/init-plan.js +0 -0
- /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
- /package/dist/{lab → study}/participant-assignment.js +0 -0
- /package/dist/{lab → study}/persona.d.ts +0 -0
- /package/dist/{lab → study}/persona.js +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {} from "../analysis/automatic-config.js";
|
|
2
2
|
import {} from "../actors/reasoning-effort.js";
|
|
3
|
-
export const
|
|
3
|
+
export const V2_SCHEMA = "humanish.lab.v2";
|
|
4
|
+
/** The study format: it declares its route, one actor, its participants and one caps block. */
|
|
5
|
+
export const STUDY_SCHEMA = "humanish.study.v3";
|
|
4
6
|
// Must start alphanumeric so an id never collides with the path-vs-id resolver heuristic
|
|
5
7
|
// (a leading "." or "/" is read as a file path; a leading "-" collides with CLI flags).
|
|
6
8
|
export const ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.-]*$/;
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { StudyConfig } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Cross-validate the computer-use fan-out declaration (`per-lane-worlds`). Returns the failure
|
|
4
|
-
* message, or null when valid.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* message, or null when valid. The parser enforces it, and runStudyWith checks it again for a config
|
|
5
|
+
* that skipped the parser. It runs rosterStructuralValidationReason (id and device
|
|
6
|
+
* validity, unique ids) first, then the route-scoped XOR, cap and policy checks.
|
|
7
7
|
*/
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function computerUseValidationReason(config: StudyConfig): string | null;
|
|
9
9
|
/**
|
|
10
|
-
* Cross-validate a `topology: shared-world` declaration
|
|
10
|
+
* Cross-validate a `topology: shared-world` declaration. Returns the failure message, or
|
|
11
11
|
* null when the one shared-world route can run it: the external-public checks for an app-url
|
|
12
12
|
* subject, the provisioned checks otherwise. Enforced at parse and again by the route, since
|
|
13
|
-
*
|
|
13
|
+
* runStudyWith takes a config that skipped the parser.
|
|
14
14
|
*/
|
|
15
|
-
export declare function sharedWorldValidationReason(config:
|
|
15
|
+
export declare function sharedWorldValidationReason(config: StudyConfig): string | null;
|
|
16
16
|
/**
|
|
17
17
|
* Declared capture devices must be implemented by the selected execution route.
|
|
18
18
|
* Unsupported backends pass false when called directly, where the declared
|
|
19
19
|
* topology may not identify the backend that is actually executing.
|
|
20
20
|
*/
|
|
21
|
-
export declare function desktopMediaValidationReason(config:
|
|
21
|
+
export declare function desktopMediaValidationReason(config: StudyConfig, supportsMedia?: boolean): string | undefined;
|
|
22
22
|
/** Reused by direct library runners so unsupported receiving never becomes inert configuration. */
|
|
23
|
-
export declare function receivingEmailValidationReason(config:
|
|
24
|
-
/** Refuse task declarations that the selected execution path would discard
|
|
23
|
+
export declare function receivingEmailValidationReason(config: StudyConfig): string | undefined;
|
|
24
|
+
/** Refuse task declarations that the selected execution path would discard.
|
|
25
25
|
* Direct runners pass their actual support rather than trusting the config's dispatch shape. */
|
|
26
|
-
export declare function taskProtocolValidationReason(config:
|
|
26
|
+
export declare function taskProtocolValidationReason(config: StudyConfig, supportsTasks?: boolean): string | null;
|
|
27
27
|
/**
|
|
28
28
|
* Refuse a clone subject whose target is not an explicit e2b-desktop. Every clone route clones and
|
|
29
|
-
* serves the repo inside a hosted desktop sandbox, and routeOf sends every clone
|
|
29
|
+
* serves the repo inside a hosted desktop sandbox, and routeOf sends every clone study to
|
|
30
30
|
* one, so any other target, or none, would still run on an E2B desktop. Requiring it explicitly
|
|
31
31
|
* also means the parser's clone checks, which run only on e2b-desktop, cannot be skipped. Enforced
|
|
32
32
|
* at parse and again on the computer-use and scripted-browser routes for library callers.
|
|
33
33
|
*/
|
|
34
|
-
export declare function cloneTargetValidationReason(config:
|
|
34
|
+
export declare function cloneTargetValidationReason(config: StudyConfig): string | null;
|
|
35
35
|
/**
|
|
36
|
-
* Refuse a positive `scenario.caps.maxUsd` or `maxTotalUsd` on a computer-use
|
|
36
|
+
* Refuse a positive `scenario.caps.maxUsd` or `maxTotalUsd` on a computer-use study.
|
|
37
37
|
* `scenario.caps` belongs to the terminal route; the computer-use route stops on `execution.caps`,
|
|
38
|
-
* so a dollar figure here would read as a cap while the
|
|
38
|
+
* so a dollar figure here would read as a cap while the study ran uncapped. Zero spends nothing
|
|
39
39
|
* either way and stays a warning. Enforced at parse and again on the computer-use routes for
|
|
40
40
|
* library callers.
|
|
41
41
|
*/
|
|
42
|
-
export declare function scenarioCapsValidationReason(config:
|
|
42
|
+
export declare function scenarioCapsValidationReason(config: StudyConfig): string | null;
|
|
43
43
|
/** Refuse a claimed output bound when the route cannot pass it to the first-party provider. */
|
|
44
|
-
export declare function outputTokenLimitValidationReason(config:
|
|
44
|
+
export declare function outputTokenLimitValidationReason(config: StudyConfig): string | null;
|
|
45
45
|
/**
|
|
46
|
-
* Cross-validate a concurrent shared-world declaration
|
|
46
|
+
* Cross-validate a concurrent shared-world declaration. Returns the failure message,
|
|
47
47
|
* or null when valid. Includes the base shared-world checks plus the concurrent extras: a synthetic
|
|
48
48
|
* subject attestation, a 0.0.0.0 serve bind (getHost only routes to a port bound on
|
|
49
49
|
* all interfaces), and no `subject.clone.keep`/`subject.localTree.keep` (either would
|
|
50
|
-
* orphan actor sandboxes). Enforced at parse and re-enforced in the engine (
|
|
51
|
-
*
|
|
50
|
+
* orphan actor sandboxes). Enforced at parse and re-enforced in the engine (runStudyWith
|
|
51
|
+
* takes a config that skipped the parser).
|
|
52
52
|
*/
|
|
53
|
-
export declare function concurrentSharedWorldValidationReason(config:
|
|
53
|
+
export declare function concurrentSharedWorldValidationReason(config: StudyConfig): string | null;
|
|
54
54
|
/**
|
|
55
|
-
* Cross-validate the external-public shared-world declaration
|
|
55
|
+
* Cross-validate the external-public shared-world declaration: a real public
|
|
56
56
|
* deployment used directly as the shared plane (no getHost, no clone, no subject sandbox, no seed).
|
|
57
57
|
* The counterpart of concurrentSharedWorldValidationReason for a plane the harness does not own:
|
|
58
58
|
* it rejects every provisioned-subject field (serve/state.seed/state.checkpoint/exposure/clone/repos
|
|
59
|
-
* are inert with no sandbox, so they fail closed
|
|
59
|
+
* are inert with no sandbox, so they fail closed), and requires a
|
|
60
60
|
* non-loopback appUrl + allowPublicTargets + the operator-ownership attestation subject.publicTarget +
|
|
61
61
|
* concurrency >= 2 + an actors[0].lanes roster of ≥2 with exactly one host participant. The getHost synthetic
|
|
62
62
|
* gate is deliberately unreachable here (there is no internet-reachable harness-owned URL to attest).
|
|
63
|
-
* Enforced at parse and re-enforced in the engine (
|
|
63
|
+
* Enforced at parse and re-enforced in the engine (runStudyWith takes a config that skipped the parser).
|
|
64
64
|
*/
|
|
65
|
-
export declare function externalPublicSharedWorldValidationReason(config:
|
|
65
|
+
export declare function externalPublicSharedWorldValidationReason(config: StudyConfig): string | null;
|
|
66
66
|
/** Analysis requires a live recording producer, including supported dry-run previews. */
|
|
67
|
-
export declare function automaticAnalysisRouteReason(config:
|
|
67
|
+
export declare function automaticAnalysisRouteReason(config: StudyConfig): string | undefined;
|
|
@@ -2,28 +2,29 @@ import { isMaxOutputTokens } from "../actors/output-token-limit.js";
|
|
|
2
2
|
import { PARTICIPANT_ID_MAX_CHARS, PARTICIPANT_ID_PATTERN, focusOf, rosterOf, } from "./parse/actors.js";
|
|
3
3
|
import { isHttpUrl, isLoopbackUrl } from "./parse/subject.js";
|
|
4
4
|
import { declaredTargets } from "./plan-participants.js";
|
|
5
|
-
import { actorResolvesToComputerUse,
|
|
5
|
+
import { actorResolvesToComputerUse, computerUseParticipantCount, MAX_COMPUTER_USE_PARTICIPANTS, registeredComputerUseActors, resolveEntryUrl, isComputerUseComposition, isScriptedBrowserComposition, isSharedWorldComposition, isTerminalProductComposition, } from "./routing.js";
|
|
6
6
|
/**
|
|
7
7
|
* Cross-validate the computer-use fan-out declaration (`per-lane-worlds`). Returns the failure
|
|
8
|
-
* message, or null when valid.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* message, or null when valid. The parser enforces it, and runStudyWith checks it again for a config
|
|
9
|
+
* that skipped the parser. It runs rosterStructuralValidationReason (id and device
|
|
10
|
+
* validity, unique ids) first, then the route-scoped XOR, cap and policy checks.
|
|
11
11
|
*/
|
|
12
|
-
export function
|
|
12
|
+
export function computerUseValidationReason(config) {
|
|
13
13
|
const actor = config.actors[0];
|
|
14
14
|
const roster = rosterOf(actor);
|
|
15
15
|
const structuralReason = rosterStructuralValidationReason(config);
|
|
16
16
|
if (structuralReason) {
|
|
17
17
|
return structuralReason;
|
|
18
18
|
}
|
|
19
|
-
// clone.fanout is a declared behavior change: rejected on the
|
|
20
|
-
// Fan-out is declared via `actors[0].count` or `actors[0].lanes`;
|
|
19
|
+
// clone.fanout is a declared behavior change: rejected on the computer-use route (was
|
|
20
|
+
// inert-warned). Fan-out is declared via `actors[0].count` or `actors[0].lanes`;
|
|
21
|
+
// subject.clone.fanout never applied here.
|
|
21
22
|
if (config.subject.clone?.fanout !== undefined) {
|
|
22
23
|
return "`subject.clone.fanout` is not used on the computer-use route: declare fan-out with actors[0].count (homogeneous) or actors[0].lanes (a roster of participants). (No current route reads clone.fanout.)";
|
|
23
24
|
}
|
|
24
25
|
if (roster !== undefined) {
|
|
25
26
|
if (actor?.count !== undefined) {
|
|
26
|
-
return "
|
|
27
|
+
return "Set either `actors[0].count` (identical participants) or `actors[0].lanes` (a roster of distinct participants), not both.";
|
|
27
28
|
}
|
|
28
29
|
if (focusOf(actor) !== undefined) {
|
|
29
30
|
return "actors[0].laneFocus and actors[0].lanes are mutually exclusive: each roster entry's `instruction` is the fan-out steer; laneFocus is the steer for a single participant.";
|
|
@@ -35,7 +36,7 @@ export function cuaLaneValidationReason(config) {
|
|
|
35
36
|
const targeted = roster.filter((entry) => entry.target !== undefined);
|
|
36
37
|
if (targeted.length > 0) {
|
|
37
38
|
if (config.subject.source !== "app-url") {
|
|
38
|
-
return "actors[0].lanes[].target
|
|
39
|
+
return "`actors[0].lanes[].target` works only on app-url computer-use studies. Clone, shared-world and local-app studies set each participant's entry URL themselves; remove `target`.";
|
|
39
40
|
}
|
|
40
41
|
if (roster.some((entry) => entry.entry !== undefined)) {
|
|
41
42
|
return "actors[0].lanes[].target and actors[0].lanes[].entry are mutually exclusive: target is an app-url fan-out browser URL; entry is a shared-world same-origin participant path.";
|
|
@@ -45,27 +46,27 @@ export function cuaLaneValidationReason(config) {
|
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
const participantCount =
|
|
49
|
-
if (participantCount >
|
|
50
|
-
return `
|
|
49
|
+
const participantCount = computerUseParticipantCount(config);
|
|
50
|
+
if (participantCount > MAX_COMPUTER_USE_PARTICIPANTS) {
|
|
51
|
+
return `A computer-use study runs at most ${MAX_COMPUTER_USE_PARTICIPANTS} participants, and this one declares ${participantCount}. Each participant is a paid desktop and they all run at once, so no setting raises the cap; split the roster across studies.`;
|
|
51
52
|
}
|
|
52
53
|
// Public targets fan out into N independent worlds driving the same public app, which is an
|
|
53
54
|
// ambiguous shared-world-ish shape, not a per-participant target swarm. Permit N>1 public runs only
|
|
54
55
|
// when every roster entry declares its own target, making the adapter-owned topology explicit. But when
|
|
55
56
|
// `subject.topology: shared-world` is also declared, N participants against one public target is the
|
|
56
|
-
// external-public shared-world topology
|
|
57
|
+
// external-public shared-world topology, so route it there (a real public deployment
|
|
57
58
|
// as the shared plane) instead of refusing; externalPublicSharedWorldValidationReason then applies.
|
|
58
59
|
if (participantCount > 1 &&
|
|
59
60
|
config.policies?.allowPublicTargets === true &&
|
|
60
61
|
declaredTargets(config).length === 0 &&
|
|
61
62
|
config.subject.topology !== "shared-world") {
|
|
62
|
-
return "policies.allowPublicTargets
|
|
63
|
+
return "`policies.allowPublicTargets` with more than one participant sends them all to one public app, which is a shared world. Set `subject.topology: shared-world` to run them together there, give each `actors[0].lanes[]` entry its own `target`, or run one participant.";
|
|
63
64
|
}
|
|
64
65
|
return null;
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
68
|
* Engine-level path-token validation for configs supplied directly through the
|
|
68
|
-
* public TypeScript/JavaScript API instead of
|
|
69
|
+
* public TypeScript/JavaScript API instead of parseStudy.
|
|
69
70
|
*/
|
|
70
71
|
function rosterStructuralValidationReason(config) {
|
|
71
72
|
const roster = rosterOf(config.actors[0]);
|
|
@@ -96,10 +97,10 @@ function rosterStructuralValidationReason(config) {
|
|
|
96
97
|
return null;
|
|
97
98
|
}
|
|
98
99
|
/**
|
|
99
|
-
* Cross-validate a `topology: shared-world` declaration
|
|
100
|
+
* Cross-validate a `topology: shared-world` declaration. Returns the failure message, or
|
|
100
101
|
* null when the one shared-world route can run it: the external-public checks for an app-url
|
|
101
102
|
* subject, the provisioned checks otherwise. Enforced at parse and again by the route, since
|
|
102
|
-
*
|
|
103
|
+
* runStudyWith takes a config that skipped the parser.
|
|
103
104
|
*/
|
|
104
105
|
export function sharedWorldValidationReason(config) {
|
|
105
106
|
return config.subject.source === "app-url"
|
|
@@ -119,7 +120,7 @@ function provisionedSharedWorldStructureReason(config) {
|
|
|
119
120
|
return structuralReason;
|
|
120
121
|
}
|
|
121
122
|
if (config.subject.source !== "clone" && config.subject.source !== "local-tree") {
|
|
122
|
-
return "`subject.topology: shared-world`
|
|
123
|
+
return "`subject.topology: shared-world` needs `subject.source: clone` or `local-tree`, which humanish serves as one seeded app every participant uses, or `app-url` for a public deployment you own.";
|
|
123
124
|
}
|
|
124
125
|
if (config.execution?.target !== "e2b-desktop") {
|
|
125
126
|
return "`subject.topology: shared-world` requires `execution.target: e2b-desktop`: the role participants drive hosted desktop browsers against one in-sandbox app.";
|
|
@@ -129,17 +130,17 @@ function provisionedSharedWorldStructureReason(config) {
|
|
|
129
130
|
}
|
|
130
131
|
const serve = config.subject.serve;
|
|
131
132
|
if (!serve) {
|
|
132
|
-
return "`subject.topology: shared-world`
|
|
133
|
+
return "`subject.topology: shared-world` needs `subject.serve` (start and url): humanish starts one copy of the app in the sandbox, and every participant uses it.";
|
|
133
134
|
}
|
|
134
135
|
const roster = rosterOf(config.actors[0]);
|
|
135
136
|
if (!roster || roster.length < 2) {
|
|
136
|
-
return "`subject.topology: shared-world`
|
|
137
|
+
return "`subject.topology: shared-world` needs an `actors[0].lanes` roster of at least 2 participants: with one participant there is nobody to interact with.";
|
|
137
138
|
}
|
|
138
139
|
if (!config.subject.state?.checkpoint || config.subject.state.checkpoint.length === 0) {
|
|
139
|
-
return "`subject.topology: shared-world`
|
|
140
|
+
return "`subject.topology: shared-world` needs at least one read-only `subject.state.checkpoint` probe: the checkpoints are how the run shows that participants changed the shared app.";
|
|
140
141
|
}
|
|
141
142
|
for (const entry of roster) {
|
|
142
|
-
if (entry.entry !== undefined &&
|
|
143
|
+
if (entry.entry !== undefined && resolveEntryUrl(serve.url, entry.entry) === null) {
|
|
143
144
|
return `actors[0].lanes role "${entry.id ?? "(unnamed)"}".entry must resolve same-origin (loopback) with subject.serve.url (${serve.url}); got "${entry.entry}".`;
|
|
144
145
|
}
|
|
145
146
|
}
|
|
@@ -191,14 +192,14 @@ export function receivingEmailValidationReason(config) {
|
|
|
191
192
|
return undefined;
|
|
192
193
|
if (!isComputerUseComposition(config) ||
|
|
193
194
|
!["app-url", "clone", "local-tree"].includes(config.subject.source)) {
|
|
194
|
-
return "Real email receiving requires a hosted computer-use browser
|
|
195
|
+
return "Real email receiving requires a hosted computer-use browser study with an app-url, clone, or local-tree subject. Scripted, terminal, desktop-cli and local-app routes are unsupported.";
|
|
195
196
|
}
|
|
196
197
|
if (config.actors.some((actor) => actor.type === "local-agent")) {
|
|
197
198
|
return "Real email receiving is unavailable for local-agent: its host process does not isolate the inbox management credential. Use a hosted first-party computer-use actor.";
|
|
198
199
|
}
|
|
199
200
|
return undefined;
|
|
200
201
|
}
|
|
201
|
-
/** Refuse task declarations that the selected execution path would discard
|
|
202
|
+
/** Refuse task declarations that the selected execution path would discard.
|
|
202
203
|
* Direct runners pass their actual support rather than trusting the config's dispatch shape. */
|
|
203
204
|
export function taskProtocolValidationReason(config, supportsTasks = isComputerUseComposition(config) && !isSharedWorldComposition(config)) {
|
|
204
205
|
for (const [index, actor] of config.actors.entries()) {
|
|
@@ -215,7 +216,7 @@ export function taskProtocolValidationReason(config, supportsTasks = isComputerU
|
|
|
215
216
|
}
|
|
216
217
|
/**
|
|
217
218
|
* Refuse a clone subject whose target is not an explicit e2b-desktop. Every clone route clones and
|
|
218
|
-
* serves the repo inside a hosted desktop sandbox, and routeOf sends every clone
|
|
219
|
+
* serves the repo inside a hosted desktop sandbox, and routeOf sends every clone study to
|
|
219
220
|
* one, so any other target, or none, would still run on an E2B desktop. Requiring it explicitly
|
|
220
221
|
* also means the parser's clone checks, which run only on e2b-desktop, cannot be skipped. Enforced
|
|
221
222
|
* at parse and again on the computer-use and scripted-browser routes for library callers.
|
|
@@ -225,12 +226,12 @@ export function cloneTargetValidationReason(config) {
|
|
|
225
226
|
if (config.subject.source !== "clone" || target === "e2b-desktop")
|
|
226
227
|
return null;
|
|
227
228
|
const got = target === undefined ? "it is absent" : `got "${target}"`;
|
|
228
|
-
return `clone subjects require \`execution.target: e2b-desktop\` (${got}):
|
|
229
|
+
return `clone subjects require \`execution.target: e2b-desktop\` (${got}): humanish clones and serves the repo inside a hosted desktop sandbox. \`execution.target: local\` applies to app-url and local-app subjects.`;
|
|
229
230
|
}
|
|
230
231
|
/**
|
|
231
|
-
* Refuse a positive `scenario.caps.maxUsd` or `maxTotalUsd` on a computer-use
|
|
232
|
+
* Refuse a positive `scenario.caps.maxUsd` or `maxTotalUsd` on a computer-use study.
|
|
232
233
|
* `scenario.caps` belongs to the terminal route; the computer-use route stops on `execution.caps`,
|
|
233
|
-
* so a dollar figure here would read as a cap while the
|
|
234
|
+
* so a dollar figure here would read as a cap while the study ran uncapped. Zero spends nothing
|
|
234
235
|
* either way and stays a warning. Enforced at parse and again on the computer-use routes for
|
|
235
236
|
* library callers.
|
|
236
237
|
*/
|
|
@@ -241,7 +242,7 @@ export function scenarioCapsValidationReason(config) {
|
|
|
241
242
|
const value = config.scenario?.caps?.[key];
|
|
242
243
|
if (value === undefined || value <= 0)
|
|
243
244
|
continue;
|
|
244
|
-
return `scenario.caps.${key} (${value}) does not cap a computer-use
|
|
245
|
+
return `scenario.caps.${key} (${value}) does not cap a computer-use study: this route stops on execution.caps.${key}. Move the value to execution.caps.${key}; scenario.caps applies only to terminal-product studies.`;
|
|
245
246
|
}
|
|
246
247
|
return null;
|
|
247
248
|
}
|
|
@@ -263,7 +264,8 @@ export function outputTokenLimitValidationReason(config) {
|
|
|
263
264
|
* Shared-world participants share one live app, so at least two must be live at once. The
|
|
264
265
|
* sequential shared-world route (`execution.concurrency: 1`) was removed in 0.106.0; the parser
|
|
265
266
|
* fills an omitted concurrency with the participant count. Both callers check it after their
|
|
266
|
-
* two-participant roster floor, so a one-
|
|
267
|
+
* two-participant roster floor, so a one-participant roster gets the roster refusal, never this
|
|
268
|
+
* one.
|
|
267
269
|
*/
|
|
268
270
|
function sharedWorldConcurrencyReason(config) {
|
|
269
271
|
// Direct library callers skip the parser, so an omitted value defaults here exactly as the
|
|
@@ -272,15 +274,15 @@ function sharedWorldConcurrencyReason(config) {
|
|
|
272
274
|
const concurrency = config.execution?.concurrency ?? participants;
|
|
273
275
|
if (concurrency >= 2)
|
|
274
276
|
return null;
|
|
275
|
-
return `shared-world
|
|
277
|
+
return `shared-world studies need \`execution.concurrency\` of at least 2 (got ${concurrency}). Sequential shared-world turns (concurrency 1) were removed in 0.106.0: omit execution.concurrency to run every participant at once, or set it to 2 or more. A provisioned subject also needs \`subject.exposure: synthetic\` and a \`serve.start\` that binds 0.0.0.0.`;
|
|
276
278
|
}
|
|
277
279
|
/**
|
|
278
|
-
* Cross-validate a concurrent shared-world declaration
|
|
280
|
+
* Cross-validate a concurrent shared-world declaration. Returns the failure message,
|
|
279
281
|
* or null when valid. Includes the base shared-world checks plus the concurrent extras: a synthetic
|
|
280
282
|
* subject attestation, a 0.0.0.0 serve bind (getHost only routes to a port bound on
|
|
281
283
|
* all interfaces), and no `subject.clone.keep`/`subject.localTree.keep` (either would
|
|
282
|
-
* orphan actor sandboxes). Enforced at parse and re-enforced in the engine (
|
|
283
|
-
*
|
|
284
|
+
* orphan actor sandboxes). Enforced at parse and re-enforced in the engine (runStudyWith
|
|
285
|
+
* takes a config that skipped the parser).
|
|
284
286
|
*/
|
|
285
287
|
export function concurrentSharedWorldValidationReason(config) {
|
|
286
288
|
const base = provisionedSharedWorldStructureReason(config);
|
|
@@ -291,11 +293,11 @@ export function concurrentSharedWorldValidationReason(config) {
|
|
|
291
293
|
if (sharedWorldConcurrency)
|
|
292
294
|
return sharedWorldConcurrency;
|
|
293
295
|
if (config.subject.exposure !== "synthetic") {
|
|
294
|
-
return "
|
|
296
|
+
return "A shared-world study needs `subject.exposure: synthetic`. The subject is reachable from the internet at a public sandbox URL during the run, so the study must declare that its data is synthetic and seeded.";
|
|
295
297
|
}
|
|
296
298
|
const serve = config.subject.serve;
|
|
297
299
|
if (!serve || !serve.start.includes("0.0.0.0")) {
|
|
298
|
-
return "
|
|
300
|
+
return "A shared-world study needs `subject.serve.start` to listen on all interfaces (for example `-H 0.0.0.0`, `--host 0.0.0.0` or `HOST=0.0.0.0`): the public sandbox URL reaches only a port bound to 0.0.0.0, and a loopback-only server answers 502. The readiness probe still uses loopback.";
|
|
299
301
|
}
|
|
300
302
|
if (config.subject.clone?.keep === true || config.subject.localTree?.keep === true) {
|
|
301
303
|
const keepField = config.subject.clone?.keep === true ? "subject.clone.keep" : "subject.localTree.keep";
|
|
@@ -304,15 +306,15 @@ export function concurrentSharedWorldValidationReason(config) {
|
|
|
304
306
|
return null;
|
|
305
307
|
}
|
|
306
308
|
/**
|
|
307
|
-
* Cross-validate the external-public shared-world declaration
|
|
309
|
+
* Cross-validate the external-public shared-world declaration: a real public
|
|
308
310
|
* deployment used directly as the shared plane (no getHost, no clone, no subject sandbox, no seed).
|
|
309
311
|
* The counterpart of concurrentSharedWorldValidationReason for a plane the harness does not own:
|
|
310
312
|
* it rejects every provisioned-subject field (serve/state.seed/state.checkpoint/exposure/clone/repos
|
|
311
|
-
* are inert with no sandbox, so they fail closed
|
|
313
|
+
* are inert with no sandbox, so they fail closed), and requires a
|
|
312
314
|
* non-loopback appUrl + allowPublicTargets + the operator-ownership attestation subject.publicTarget +
|
|
313
315
|
* concurrency >= 2 + an actors[0].lanes roster of ≥2 with exactly one host participant. The getHost synthetic
|
|
314
316
|
* gate is deliberately unreachable here (there is no internet-reachable harness-owned URL to attest).
|
|
315
|
-
* Enforced at parse and re-enforced in the engine (
|
|
317
|
+
* Enforced at parse and re-enforced in the engine (runStudyWith takes a config that skipped the parser).
|
|
316
318
|
*/
|
|
317
319
|
export function externalPublicSharedWorldValidationReason(config) {
|
|
318
320
|
const structuralReason = rosterStructuralValidationReason(config);
|
|
@@ -320,7 +322,7 @@ export function externalPublicSharedWorldValidationReason(config) {
|
|
|
320
322
|
return structuralReason;
|
|
321
323
|
}
|
|
322
324
|
if (config.subject.source !== "app-url") {
|
|
323
|
-
return "
|
|
325
|
+
return "An external-public shared-world study needs `subject.source: app-url`: the participants share a public deployment you already run, so there is nothing to clone or serve.";
|
|
324
326
|
}
|
|
325
327
|
if (config.execution?.target !== "e2b-desktop") {
|
|
326
328
|
return "the external-public shared-world route requires `execution.target: e2b-desktop`: the role participants drive hosted desktop browsers against the one public deployment.";
|
|
@@ -336,40 +338,40 @@ export function externalPublicSharedWorldValidationReason(config) {
|
|
|
336
338
|
if (sharedWorldConcurrency)
|
|
337
339
|
return sharedWorldConcurrency;
|
|
338
340
|
if (config.policies?.allowPublicTargets !== true) {
|
|
339
|
-
return "
|
|
341
|
+
return "An external-public shared-world study needs `policies.allowPublicTargets: true`, because the participants drive a public deployment.";
|
|
340
342
|
}
|
|
341
343
|
const appUrl = config.subject.appUrl ?? "";
|
|
342
344
|
if (!isHttpUrl(appUrl) || isLoopbackUrl(appUrl)) {
|
|
343
|
-
return "
|
|
345
|
+
return "An external-public shared-world study needs a public http(s) `subject.appUrl`, not a loopback URL. For an app you run locally, use a clone or local-tree subject, which humanish serves itself.";
|
|
344
346
|
}
|
|
345
|
-
// The operator-ownership attestation (the
|
|
347
|
+
// The operator-ownership attestation (the counterpart of exposure: synthetic; you cannot claim
|
|
346
348
|
// synthetic on a real site, but you must attest you own/operate it). Author-trust; unverifiable.
|
|
347
349
|
if (config.subject.publicTarget?.authorized !== true) {
|
|
348
|
-
return "
|
|
350
|
+
return "An external-public shared-world study needs `subject.publicTarget: { owner, authorized: true }` to declare that you own or operate the public deployment. humanish cannot check ownership, so the study states it.";
|
|
349
351
|
}
|
|
350
352
|
// No provisioned-subject field is allowed: with no sandbox they cannot act, so they are rejected
|
|
351
|
-
// with a precise reason, never silently ignored
|
|
353
|
+
// with a precise reason, never silently ignored. exposure: synthetic in particular
|
|
352
354
|
// would be a false claim on a real site (the harness neither provisioned nor exposed it).
|
|
353
355
|
if (config.subject.exposure !== undefined) {
|
|
354
|
-
return "`subject.exposure: synthetic`
|
|
356
|
+
return "`subject.exposure: synthetic` does not apply to an external-public shared-world study: a real public deployment is not seeded synthetic data. Declare ownership with `subject.publicTarget` instead.";
|
|
355
357
|
}
|
|
356
358
|
if (config.subject.serve !== undefined) {
|
|
357
|
-
return "`subject.serve`
|
|
359
|
+
return "`subject.serve` does not apply to an external-public shared-world study: the app is already deployed, so humanish serves nothing. Remove `subject.serve`.";
|
|
358
360
|
}
|
|
359
361
|
if (config.subject.state?.seed !== undefined ||
|
|
360
362
|
config.subject.state?.checkpoint !== undefined ||
|
|
361
363
|
config.subject.state !== undefined) {
|
|
362
|
-
return "`subject.state` (seed
|
|
364
|
+
return "`subject.state` (seed, checkpoint or external) does not apply to an external-public shared-world study: humanish cannot seed or read a deployment it does not run. Remove `subject.state`.";
|
|
363
365
|
}
|
|
364
366
|
if (config.subject.clone !== undefined || config.subject.repos !== undefined) {
|
|
365
|
-
return "`subject.clone
|
|
367
|
+
return "`subject.clone` and `subject.repos` do not apply to an external-public shared-world study: the participants use the public deployment, so nothing is cloned. Remove them.";
|
|
366
368
|
}
|
|
367
369
|
if (roster.some((entry) => entry.entry !== undefined)) {
|
|
368
370
|
return "`actors[0].lanes[].entry` (the loopback same-origin participant path) is forbidden on the external-public shared-world route: there is no harness-served serve.url to resolve it against; participants open the public appUrl and reach the shared session through the real UI.";
|
|
369
371
|
}
|
|
370
372
|
const hostEntries = roster.filter((entry) => entry.host === true);
|
|
371
373
|
if (hostEntries.length !== 1) {
|
|
372
|
-
return `
|
|
374
|
+
return `An external-public shared-world study needs exactly one \`host: true\` participant, the one who creates the shared session, and this study has ${hostEntries.length}. Every other participant joins that session.`;
|
|
373
375
|
}
|
|
374
376
|
return null;
|
|
375
377
|
}
|
|
@@ -383,5 +385,5 @@ export function automaticAnalysisRouteReason(config) {
|
|
|
383
385
|
isSharedWorldComposition(config) ||
|
|
384
386
|
["app-url", "local-app", "local-tree", "desktop-cli", "terminal-product"].includes(config.subject.source))
|
|
385
387
|
return undefined;
|
|
386
|
-
return "review.analysis requires a computer-use, scripted-browser, terminal-product or shared-world
|
|
388
|
+
return "review.analysis requires a computer-use, scripted-browser, terminal-product or shared-world study; this study's route does not produce an eligible live recording.";
|
|
387
389
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StudyConfig } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The fields a config sets that its route does not read, each as `field` or `field (reason)`. A v2
|
|
4
|
+
* file gets them as one warning; a v3 study is refused for any of them.
|
|
5
|
+
*/
|
|
6
|
+
export declare function inertFieldLabels(config: StudyConfig): string[];
|
|
7
|
+
/**
|
|
8
|
+
* The same fields as `inertFieldLabels`, as paths without their reasons, such as
|
|
9
|
+
* `actors[0].lanes[].entry` or `execution.timeoutMs`. `humanish migrate` drops each one.
|
|
10
|
+
*/
|
|
11
|
+
export declare function inertFieldPaths(config: StudyConfig): string[];
|
|
12
|
+
export declare function forwardDeclaredWarnings(config: StudyConfig): string[];
|