humanish 0.106.1 → 0.108.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 +38 -32
- package/CHANGELOG.md +28 -0
- package/CONTEXT.md +51 -41
- package/README.md +152 -174
- 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-client.js +2 -1
- package/dist/actors/codex/app-server-trace.d.ts +0 -1
- package/dist/actors/codex/app-server-trace.js +1 -3
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/app-server.js +2 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/protocol-compat.d.ts +27 -0
- package/dist/actors/codex/protocol-compat.js +357 -0
- package/dist/actors/codex/protocol-contract.d.ts +61 -0
- package/dist/actors/codex/protocol-contract.js +471 -0
- package/dist/actors/codex/restricted-executable.d.ts +28 -4
- package/dist/actors/codex/restricted-executable.js +104 -29
- package/dist/actors/codex/restricted-launch.d.ts +9 -2
- package/dist/actors/codex/restricted-launch.js +43 -4
- package/dist/actors/codex/restricted-notifications.d.ts +101 -0
- package/dist/actors/codex/restricted-notifications.js +277 -0
- package/dist/actors/codex/restricted-participant.d.ts +30 -0
- package/dist/actors/codex/restricted-participant.js +66 -6
- package/dist/actors/codex/restricted-policy.d.ts +11 -3
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +16 -3
- package/dist/actors/codex/restricted-session.js +60 -22
- package/dist/actors/codex/restricted-transport.d.ts +29 -0
- package/dist/actors/codex/restricted-transport.js +139 -27
- package/dist/actors/codex/restricted-turn.d.ts +19 -4
- package/dist/actors/codex/restricted-turn.js +43 -30
- package/dist/actors/computer-use/actor.d.ts +17 -17
- package/dist/actors/computer-use/actor.js +6 -6
- package/dist/actors/computer-use/admission-limit.d.ts +1 -1
- package/dist/actors/computer-use/admission-limit.js +1 -1
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +10 -10
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +15 -13
- package/dist/actors/computer-use/loop/ending.d.ts +7 -7
- package/dist/actors/computer-use/loop/ending.js +9 -9
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +9 -9
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +1 -1
- package/dist/actors/computer-use/loop/session.js +3 -3
- package/dist/actors/computer-use/loop/spend.d.ts +2 -2
- package/dist/actors/computer-use/loop/spend.js +4 -4
- package/dist/actors/computer-use/loop/trace.js +11 -10
- package/dist/actors/computer-use/loop/types.d.ts +37 -26
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.js +4 -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 +12 -9
- package/dist/actors/computer-use/openai-provider.js +47 -36
- 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/contract.d.ts +86 -49
- package/dist/actors/contract.js +29 -23
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +10 -9
- package/dist/actors/local-agent/cli.d.ts +8 -6
- 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 +6 -6
- package/dist/actors/registry.d.ts +10 -10
- package/dist/actors/registry.js +18 -17
- package/dist/actors/scripted-browser/actor.d.ts +8 -8
- package/dist/actors/scripted-browser/actor.js +16 -16
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/journey.js +15 -4
- package/dist/actors/scripted-browser/steps.js +19 -1
- package/dist/actors/scripted-browser/types.d.ts +12 -2
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/actors/stop-conditions.js +1 -3
- package/dist/analysis/automatic-completion.d.ts +13 -8
- package/dist/analysis/automatic-completion.js +14 -8
- package/dist/analysis/automatic-config.d.ts +1 -1
- package/dist/analysis/automatic-config.js +2 -2
- package/dist/analysis/automatic.d.ts +10 -4
- package/dist/analysis/automatic.js +17 -13
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/diagnostics.d.ts +23 -0
- package/dist/analysis/diagnostics.js +112 -0
- package/dist/analysis/evidence-sources.js +2 -2
- package/dist/analysis/evidence.js +6 -6
- package/dist/analysis/execute.d.ts +7 -1
- package/dist/analysis/execute.js +39 -12
- package/dist/analysis/job.d.ts +8 -5
- package/dist/analysis/job.js +15 -14
- package/dist/analysis/load.d.ts +1 -1
- package/dist/analysis/load.js +5 -5
- package/dist/analysis/provider.d.ts +9 -1
- package/dist/analysis/restricted-codex.d.ts +2 -0
- package/dist/analysis/restricted-codex.js +10 -1
- package/dist/analysis/service.d.ts +2 -0
- package/dist/analysis/service.js +35 -16
- package/dist/analysis/sharing.d.ts +2 -2
- package/dist/analysis/sharing.js +5 -5
- package/dist/analysis/store-executions.d.ts +5 -5
- package/dist/analysis/store-executions.js +12 -12
- package/dist/analysis/store.d.ts +4 -4
- package/dist/analysis/store.js +13 -13
- package/dist/cli/commands/analysis-signals.d.ts +2 -1
- package/dist/cli/commands/analysis-signals.js +4 -1
- package/dist/cli/commands/analyze.js +23 -18
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +62 -34
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/lab-format.d.ts +5 -4
- package/dist/cli/commands/lab-format.js +35 -23
- package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
- package/dist/cli/commands/lab-route-computer-use.js +32 -21
- package/dist/cli/commands/lab-route-preview.d.ts +1 -3
- package/dist/cli/commands/lab-route-preview.js +7 -7
- package/dist/cli/commands/lab-route-run.d.ts +6 -4
- package/dist/cli/commands/lab-route-run.js +6 -2
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
- package/dist/cli/commands/lab-route-scripted.js +0 -1
- package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
- package/dist/cli/commands/lab-route-shared-world.js +3 -4
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
- package/dist/cli/commands/lab-route-terminal.js +0 -1
- package/dist/cli/commands/lab-run.js +84 -54
- package/dist/cli/commands/lab-scorer.d.ts +2 -4
- package/dist/cli/commands/lab-scorer.js +1 -1
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.js +168 -107
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/run-signals.d.ts +30 -0
- package/dist/cli/commands/run-signals.js +146 -0
- package/dist/cli/commands/runs.js +137 -136
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +26 -21
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +182 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +21 -21
- package/dist/cli/commands/watch.js +64 -77
- package/dist/cli/deprecations.d.ts +18 -0
- package/dist/cli/deprecations.js +48 -0
- package/dist/cli/doctor.d.ts +18 -5
- package/dist/cli/doctor.js +111 -48
- package/dist/cli/first-run-path.d.ts +12 -10
- package/dist/cli/first-run-path.js +30 -28
- package/dist/cli/io.d.ts +46 -10
- package/dist/cli/io.js +109 -30
- package/dist/cli/observer-follow.d.ts +2 -2
- package/dist/cli/observer-follow.js +5 -6
- package/dist/cli/orientation.d.ts +6 -3
- package/dist/cli/orientation.js +43 -39
- 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 +112 -43
- package/dist/cli/telemetry.d.ts +17 -17
- package/dist/cli/telemetry.js +49 -41
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +14 -13
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +8 -8
- package/dist/comms/catch-host.js +14 -14
- package/dist/comms/connections.js +4 -4
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +27 -0
- package/dist/comms/external-evidence.js +93 -0
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +2 -2
- package/dist/comms/fake-inbox.js +2 -2
- package/dist/comms/lease-store.js +7 -7
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- 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 +36 -37
- package/dist/comms/sandbox-catch.js +34 -35
- package/dist/comms/setup.js +42 -8
- 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 +4 -4
- package/dist/evidence/browser-hygiene.d.ts +1 -1
- package/dist/evidence/browser-hygiene.js +1 -1
- 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 +5 -5
- package/dist/evidence/secret-scrub.d.ts +9 -0
- package/dist/evidence/secret-scrub.js +96 -0
- package/dist/feedback/draft.js +41 -85
- package/dist/feedback/export-bundle.js +5 -5
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +16 -17
- package/dist/feedback/feedback.d.ts +3 -3
- package/dist/feedback/feedback.js +21 -3
- package/dist/guest/chromium-text.js +2 -2
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/runtime.js +1 -1
- package/dist/index.d.ts +14 -15
- package/dist/index.js +10 -11
- package/dist/keys/key-resolution.d.ts +7 -5
- package/dist/keys/key-resolution.js +40 -38
- package/dist/lab/adapter-extension.d.ts +35 -13
- package/dist/lab/adapter-extension.js +50 -134
- package/dist/lab/adapter-scorer-loader.d.ts +32 -12
- package/dist/lab/adapter-scorer-loader.js +56 -32
- package/dist/lab/composition-rules.js +58 -58
- package/dist/lab/config.js +85 -43
- package/dist/lab/deprecated-fields.d.ts +10 -0
- package/dist/lab/deprecated-fields.js +24 -0
- package/dist/lab/device-presets.d.ts +10 -10
- package/dist/lab/device-presets.js +11 -11
- package/dist/lab/discover.d.ts +13 -9
- package/dist/lab/discover.js +118 -60
- package/dist/lab/doctor.d.ts +53 -11
- package/dist/lab/doctor.js +193 -47
- package/dist/lab/init-plan.js +1 -3
- package/dist/lab/init-templates.js +147 -147
- package/dist/lab/init.d.ts +1 -1
- package/dist/lab/init.js +41 -9
- package/dist/lab/keys.d.ts +2 -0
- package/dist/lab/keys.js +43 -9
- package/dist/lab/lab-deps.d.ts +80 -0
- package/dist/lab/lab-deps.js +4 -0
- package/dist/lab/parse/actors.js +17 -16
- package/dist/lab/parse/comms.js +8 -7
- package/dist/lab/parse/execution.js +15 -14
- package/dist/lab/parse/study-v3.d.ts +23 -0
- package/dist/lab/parse/study-v3.js +259 -0
- package/dist/lab/parse/subject-state.d.ts +7 -7
- package/dist/lab/parse/subject-state.js +18 -17
- package/dist/lab/parse/subject.js +30 -29
- package/dist/lab/parse/values.d.ts +1 -2
- package/dist/lab/parse/values.js +3 -6
- package/dist/lab/persona-resolve.d.ts +7 -7
- package/dist/lab/persona-resolve.js +8 -8
- package/dist/lab/persona.js +1 -3
- package/dist/lab/plan-base.d.ts +0 -2
- package/dist/lab/plan-base.js +6 -4
- package/dist/lab/plan-participants.d.ts +7 -7
- package/dist/lab/plan-participants.js +2 -2
- package/dist/lab/plan-types.d.ts +26 -8
- package/dist/lab/plan.d.ts +4 -18
- package/dist/lab/plan.js +24 -79
- package/dist/lab/preflight-probes.js +11 -11
- package/dist/lab/preflight-result.d.ts +2 -1
- package/dist/lab/preflight-result.js +5 -6
- package/dist/lab/preflight.d.ts +7 -8
- package/dist/lab/preflight.js +6 -6
- package/dist/lab/requirements.d.ts +20 -0
- package/dist/lab/requirements.js +54 -0
- package/dist/lab/route-inputs.d.ts +23 -12
- package/dist/lab/route-inputs.js +48 -51
- package/dist/lab/routing.d.ts +42 -41
- package/dist/lab/routing.js +66 -68
- package/dist/lab/run-lab-events.d.ts +3 -11
- package/dist/lab/run-lab-events.js +2 -16
- package/dist/lab/run-lab-homes.d.ts +76 -0
- package/dist/lab/run-lab-homes.js +7 -0
- package/dist/lab/run-lab-options.d.ts +12 -66
- package/dist/lab/run-lab-options.js +58 -285
- package/dist/lab/summary.d.ts +15 -9
- package/dist/lab/summary.js +24 -17
- package/dist/lab/tasks.d.ts +15 -15
- package/dist/lab/tasks.js +14 -14
- package/dist/lab/types.d.ts +201 -195
- package/dist/lab/types.js +2 -0
- package/dist/lab/validation.d.ts +21 -21
- package/dist/lab/validation.js +61 -59
- package/dist/lab/warnings.d.ts +10 -0
- package/dist/lab/warnings.js +70 -41
- package/dist/library-aliases.d.ts +56 -0
- package/dist/library-aliases.js +22 -0
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +9 -9
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +7 -6
- 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 +1 -1
- package/dist/observer/library.js +4 -2
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +12 -7
- package/dist/observer/run-routes.d.ts +4 -4
- package/dist/observer/run-routes.js +6 -6
- package/dist/observer/serve.d.ts +17 -0
- package/dist/observer/serve.js +41 -6
- 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 +24 -17
- package/dist/routes/computer-use/bundle.d.ts +4 -11
- package/dist/routes/computer-use/bundle.js +12 -18
- package/dist/routes/computer-use/diagnostics.d.ts +1 -1
- package/dist/routes/computer-use/diagnostics.js +1 -1
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
- package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
- package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
- package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
- package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
- package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +19 -43
- package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
- package/dist/routes/computer-use/fanout-bundle.js +38 -42
- package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
- package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
- package/dist/routes/computer-use/in-process-desktop.js +3 -9
- package/dist/routes/computer-use/live-flush.d.ts +7 -5
- package/dist/routes/computer-use/live-flush.js +20 -28
- package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
- package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
- package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
- package/dist/routes/computer-use/local-tree-pack.js +4 -5
- package/dist/routes/computer-use/local-vm.d.ts +11 -8
- package/dist/routes/computer-use/local-vm.js +40 -67
- package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
- package/dist/routes/computer-use/participant-desktop.js +5 -25
- package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
- package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
- package/dist/routes/computer-use/participant-facts.d.ts +7 -1
- package/dist/routes/computer-use/participant-facts.js +12 -1
- package/dist/routes/computer-use/participant-model.d.ts +25 -11
- package/dist/routes/computer-use/participant-model.js +76 -34
- package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
- package/dist/routes/computer-use/participant-prompt.js +8 -8
- package/dist/routes/computer-use/participant-runs.d.ts +11 -11
- package/dist/routes/computer-use/participant-runs.js +18 -18
- package/dist/routes/computer-use/plan.d.ts +21 -29
- package/dist/routes/computer-use/plan.js +70 -78
- package/dist/routes/computer-use/preflight.d.ts +3 -5
- package/dist/routes/computer-use/preflight.js +40 -36
- package/dist/routes/computer-use/rerun-selection.js +11 -7
- package/dist/routes/computer-use/result.d.ts +1 -1
- package/dist/routes/computer-use/result.js +48 -38
- package/dist/routes/computer-use/route.d.ts +5 -5
- package/dist/routes/computer-use/route.js +36 -33
- package/dist/routes/computer-use/self-report.d.ts +8 -8
- package/dist/routes/computer-use/self-report.js +33 -33
- package/dist/routes/computer-use/setup.d.ts +9 -15
- package/dist/routes/computer-use/setup.js +106 -83
- package/dist/routes/computer-use/single-bundle.d.ts +13 -16
- package/dist/routes/computer-use/single-bundle.js +46 -53
- package/dist/routes/computer-use/subject-projection.d.ts +6 -8
- package/dist/routes/computer-use/subject-projection.js +24 -23
- package/dist/routes/computer-use/types.d.ts +195 -238
- package/dist/routes/computer-use/types.js +21 -13
- package/dist/routes/preview.d.ts +8 -2
- package/dist/routes/preview.js +8 -5
- package/dist/routes/scripted/bundle.d.ts +5 -8
- package/dist/routes/scripted/bundle.js +23 -27
- package/dist/routes/scripted/plan.d.ts +6 -8
- package/dist/routes/scripted/plan.js +15 -13
- package/dist/routes/scripted/result.d.ts +4 -1
- package/dist/routes/scripted/result.js +15 -11
- package/dist/routes/scripted/route.js +15 -17
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +3 -3
- package/dist/routes/scripted/setup.d.ts +3 -2
- package/dist/routes/scripted/setup.js +27 -26
- package/dist/routes/scripted/subject.d.ts +8 -3
- package/dist/routes/scripted/subject.js +10 -6
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +2 -2
- package/dist/routes/scripted/surface-sessions.js +4 -4
- package/dist/routes/scripted/types.d.ts +21 -40
- package/dist/routes/scripted/types.js +2 -3
- package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
- package/dist/routes/shared-world/bundle.d.ts +7 -7
- package/dist/routes/shared-world/bundle.js +60 -62
- package/dist/routes/shared-world/checkpoints.d.ts +5 -5
- package/dist/routes/shared-world/checkpoints.js +5 -5
- package/dist/routes/shared-world/comms.d.ts +8 -7
- package/dist/routes/shared-world/comms.js +38 -51
- package/dist/routes/shared-world/external-public.d.ts +6 -5
- package/dist/routes/shared-world/external-public.js +28 -25
- package/dist/routes/shared-world/handoff.d.ts +10 -9
- package/dist/routes/shared-world/handoff.js +89 -81
- package/dist/routes/shared-world/lobby-code.d.ts +7 -7
- package/dist/routes/shared-world/lobby-code.js +22 -22
- package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
- package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
- package/dist/routes/shared-world/plan.d.ts +2 -6
- package/dist/routes/shared-world/plan.js +8 -9
- package/dist/routes/shared-world/provenance.d.ts +4 -4
- package/dist/routes/shared-world/provenance.js +4 -4
- package/dist/routes/shared-world/provisioned.d.ts +3 -2
- package/dist/routes/shared-world/provisioned.js +55 -48
- package/dist/routes/shared-world/result.js +47 -36
- package/dist/routes/shared-world/route.js +54 -57
- package/dist/routes/shared-world/setup.d.ts +6 -5
- package/dist/routes/shared-world/setup.js +16 -18
- package/dist/routes/shared-world/types.d.ts +70 -141
- package/dist/routes/shared-world/types.js +5 -5
- package/dist/routes/terminal/adapter.d.ts +10 -10
- package/dist/routes/terminal/adapter.js +32 -129
- package/dist/routes/terminal/bundle.d.ts +10 -15
- package/dist/routes/terminal/bundle.js +43 -52
- package/dist/routes/terminal/credentials.d.ts +4 -4
- package/dist/routes/terminal/credentials.js +20 -20
- package/dist/routes/terminal/dry-run.d.ts +1 -1
- package/dist/routes/terminal/dry-run.js +13 -15
- package/dist/routes/terminal/encoding.d.ts +1 -1
- package/dist/routes/terminal/encoding.js +4 -4
- package/dist/routes/terminal/ledger.d.ts +8 -8
- package/dist/routes/terminal/ledger.js +22 -22
- package/dist/routes/terminal/live-finish.d.ts +1 -2
- package/dist/routes/terminal/live-finish.js +24 -23
- package/dist/routes/terminal/live-sandbox.d.ts +3 -2
- package/dist/routes/terminal/live-sandbox.js +31 -32
- package/dist/routes/terminal/participant-text.d.ts +23 -0
- package/dist/routes/terminal/participant-text.js +165 -0
- package/dist/routes/terminal/persona.js +1 -1
- package/dist/routes/terminal/plan.d.ts +2 -6
- package/dist/routes/terminal/plan.js +23 -19
- package/dist/routes/terminal/recorder.d.ts +6 -1
- package/dist/routes/terminal/recorder.js +12 -4
- package/dist/routes/terminal/result.js +12 -12
- package/dist/routes/terminal/route.js +30 -31
- package/dist/routes/terminal/runtime.d.ts +3 -2
- package/dist/routes/terminal/runtime.js +3 -3
- package/dist/routes/terminal/sandbox.d.ts +4 -4
- package/dist/routes/terminal/sandbox.js +10 -10
- package/dist/routes/terminal/session.js +22 -19
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +10 -11
- package/dist/routes/terminal/trace.d.ts +7 -10
- package/dist/routes/terminal/trace.js +11 -66
- package/dist/routes/terminal/types.d.ts +104 -114
- package/dist/routes/terminal/types.js +12 -7
- package/dist/run/active-runs.d.ts +13 -0
- package/dist/run/active-runs.js +12 -0
- package/dist/run/bundle-shape.d.ts +2 -1
- package/dist/run/bundle-shape.js +7 -7
- package/dist/run/bundle.d.ts +99 -92
- package/dist/run/bundle.js +10 -8
- package/dist/run/cost-summary.js +6 -5
- package/dist/run/costs.d.ts +6 -6
- package/dist/run/costs.js +17 -11
- package/dist/run/detail.d.ts +9 -9
- package/dist/run/detail.js +10 -10
- package/dist/run/dry-run-inputs.js +1 -1
- package/dist/run/dry-run.js +23 -30
- package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
- package/dist/run/{study-files.js → evidence-files.js} +5 -5
- package/dist/run/feedback-shape.js +1 -1
- package/dist/run/judge.d.ts +34 -16
- package/dist/run/judge.js +41 -14
- package/dist/run/locate.d.ts +2 -0
- package/dist/run/locate.js +3 -1
- package/dist/run/outcomes.d.ts +3 -3
- package/dist/run/outcomes.js +3 -3
- package/dist/run/participant-records.d.ts +2 -2
- package/dist/run/participant-records.js +2 -2
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +2 -2
- package/dist/run/pricing.d.ts +30 -15
- package/dist/run/pricing.js +49 -30
- package/dist/run/projection.d.ts +27 -27
- package/dist/run/projection.js +23 -23
- package/dist/run/reclaim.d.ts +6 -0
- package/dist/run/reclaim.js +15 -5
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-index.d.ts +9 -7
- package/dist/run/run-index.js +24 -25
- 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 +7 -4
- package/dist/run/run.js +10 -6
- package/dist/run/sandbox-receipts.d.ts +5 -5
- package/dist/run/sandbox-receipts.js +6 -6
- package/dist/run/shared-world-evidence.d.ts +67 -66
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +3 -3
- package/dist/run/shared-world-shape.js +16 -16
- package/dist/run/stats.d.ts +17 -11
- package/dist/run/stats.js +124 -66
- package/dist/run/status.d.ts +21 -32
- package/dist/run/status.js +34 -33
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +29 -22
- package/dist/run/study-provenance.d.ts +47 -0
- package/dist/run/study-provenance.js +63 -0
- package/dist/run/study-result.d.ts +16 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/terminal-contract.d.ts +5 -5
- package/dist/run/terminal-contract.js +4 -4
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run/transient-comms-secrets.d.ts +5 -0
- package/dist/run/transient-comms-secrets.js +12 -0
- package/dist/run-lab.d.ts +40 -38
- package/dist/run-lab.js +42 -40
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- 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 +43 -0
- 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/subject/clone.d.ts +1 -1
- package/dist/subject/desktop-cli.d.ts +2 -2
- package/dist/subject/desktop-cli.js +3 -3
- package/dist/subject/local-tree-archive.d.ts +1 -1
- package/dist/subject/local-tree-archive.js +5 -5
- package/dist/subject/local-tree.d.ts +3 -3
- package/dist/subject/local-tree.js +1 -1
- package/dist/subject/node-bootstrap.d.ts +1 -1
- package/dist/subject/node-bootstrap.js +4 -4
- package/dist/subject/runtime.js +10 -11
- package/dist/subject/serve.d.ts +1 -1
- package/dist/subject/serve.js +4 -4
- package/dist/subject/state.d.ts +1 -1
- package/dist/subject/steps.d.ts +8 -8
- package/dist/subject/steps.js +7 -7
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
- package/dist/substrates/e2b/cdp-probe.js +15 -18
- package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
- package/dist/substrates/e2b/desktop-browser.js +12 -12
- package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
- package/dist/substrates/e2b/desktop-cdp.js +11 -11
- package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
- package/dist/substrates/e2b/desktop-executor.js +1 -1
- package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
- package/dist/substrates/e2b/desktop-geometry.js +9 -9
- package/dist/substrates/e2b/desktop-media.d.ts +1 -1
- package/dist/substrates/e2b/desktop-media.js +3 -3
- 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/sandbox.d.ts +1 -1
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +11 -11
- package/dist/substrates/e2b/sdk.js +8 -8
- package/dist/substrates/local/runtime-host.d.ts +2 -0
- package/dist/substrates/local/runtime-host.js +6 -0
- package/dist/tui/actions.d.ts +8 -6
- package/dist/tui/actions.js +31 -22
- package/dist/tui/contract.d.ts +16 -16
- package/dist/tui/contract.js +10 -10
- package/dist/tui/launch.d.ts +4 -4
- package/dist/tui/launch.js +18 -19
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +83 -83
- package/dist/verify/actor.d.ts +14 -14
- package/dist/verify/actor.js +45 -45
- package/dist/verify/artifacts.d.ts +3 -3
- package/dist/verify/artifacts.js +6 -6
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +7 -7
- package/dist/verify/costs.js +9 -9
- package/dist/verify/liveness.d.ts +1 -1
- package/dist/verify/liveness.js +4 -1
- package/dist/verify/rerun.d.ts +1 -1
- package/dist/verify/rerun.js +1 -1
- 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 +18 -18
- package/dist/verify/subject.d.ts +4 -4
- package/dist/verify/subject.js +18 -18
- package/dist/verify/verify.js +98 -49
- package/docs/README.md +26 -33
- package/docs/architecture/actor-contract.md +105 -98
- package/docs/architecture/desktop-sessions.md +14 -14
- package/docs/architecture/external-public-shared-world.md +66 -59
- package/docs/architecture/github-feedback-loop.md +1 -4
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +37 -37
- package/docs/architecture/restricted-codex-analysis.md +70 -30
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -59
- package/docs/architecture/task-protocol-support.md +7 -9
- package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +2 -5
- 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 +54 -51
- package/docs/contracts/schemas.md +505 -390
- package/docs/contracts/study-analysis.md +26 -2
- package/docs/contracts/study-costs.md +11 -7
- 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/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
- 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 +8 -7
- 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/package.json +16 -17
- package/skills/humanish/SKILL.md +63 -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 -45
- package/dist/actors/codex/qualified-versions.js +0 -87
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -193
- package/dist/deprecated.d.ts +0 -90
- package/dist/deprecated.js +0 -106
- package/dist/lab/bag-overrides.d.ts +0 -18
- package/dist/lab/bag-overrides.js +0 -121
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
- package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
- 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 -294
- 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/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
- /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
package/dist/lab/types.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {} from "../analysis/automatic-config.js";
|
|
2
2
|
import {} from "../actors/reasoning-effort.js";
|
|
3
3
|
export const LAB_CONFIG_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_.-]*$/;
|
package/dist/lab/validation.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { LabConfig } from "./types.js";
|
|
2
2
|
/**
|
|
3
|
-
* Cross-validate the computer-use fan-out declaration (per-lane
|
|
4
|
-
* message, or null when valid.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Cross-validate the computer-use fan-out declaration (`per-lane-worlds`). Returns the failure
|
|
4
|
+
* message, or null when valid. The parser enforces it, and runLab 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: LabConfig): 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
|
+
* runLab takes a config that skipped the parser.
|
|
14
14
|
*/
|
|
15
15
|
export declare function sharedWorldValidationReason(config: LabConfig): string | null;
|
|
16
16
|
/**
|
|
@@ -21,7 +21,7 @@ export declare function sharedWorldValidationReason(config: LabConfig): string |
|
|
|
21
21
|
export declare function desktopMediaValidationReason(config: LabConfig, supportsMedia?: boolean): string | undefined;
|
|
22
22
|
/** Reused by direct library runners so unsupported receiving never becomes inert configuration. */
|
|
23
23
|
export declare function receivingEmailValidationReason(config: LabConfig): string | undefined;
|
|
24
|
-
/** Refuse task declarations that the selected execution path would discard
|
|
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
26
|
export declare function taskProtocolValidationReason(config: LabConfig, supportsTasks?: boolean): string | null;
|
|
27
27
|
/**
|
|
@@ -43,24 +43,24 @@ export declare function scenarioCapsValidationReason(config: LabConfig): string
|
|
|
43
43
|
/** Refuse a claimed output bound when the route cannot pass it to the first-party provider. */
|
|
44
44
|
export declare function outputTokenLimitValidationReason(config: LabConfig): string | null;
|
|
45
45
|
/**
|
|
46
|
-
* Cross-validate a
|
|
47
|
-
* or null when valid. Includes the base shared-world checks
|
|
48
|
-
* subject attestation
|
|
49
|
-
* all interfaces), and no `subject.clone.keep`/`subject.localTree.keep` (
|
|
50
|
-
* orphan actor sandboxes). Enforced at parse
|
|
51
|
-
*
|
|
46
|
+
* Cross-validate a concurrent shared-world declaration. Returns the failure message,
|
|
47
|
+
* or null when valid. Includes the base shared-world checks plus the concurrent extras: a synthetic
|
|
48
|
+
* subject attestation, a 0.0.0.0 serve bind (getHost only routes to a port bound on
|
|
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 (runLab
|
|
51
|
+
* takes a config that skipped the parser).
|
|
52
52
|
*/
|
|
53
53
|
export declare function concurrentSharedWorldValidationReason(config: LabConfig): string | null;
|
|
54
54
|
/**
|
|
55
|
-
* Cross-validate the
|
|
56
|
-
* deployment used
|
|
57
|
-
* The
|
|
58
|
-
* it
|
|
59
|
-
* are inert with no sandbox
|
|
55
|
+
* Cross-validate the external-public shared-world declaration: a real public
|
|
56
|
+
* deployment used directly as the shared plane (no getHost, no clone, no subject sandbox, no seed).
|
|
57
|
+
* The counterpart of concurrentSharedWorldValidationReason for a plane the harness does not own:
|
|
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), and requires a
|
|
60
60
|
* non-loopback appUrl + allowPublicTargets + the operator-ownership attestation subject.publicTarget +
|
|
61
|
-
* concurrency >= 2 + an actors[0].lanes roster of ≥2 with
|
|
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
|
|
63
|
+
* Enforced at parse and re-enforced in the engine (runLab takes a config that skipped the parser).
|
|
64
64
|
*/
|
|
65
65
|
export declare function externalPublicSharedWorldValidationReason(config: LabConfig): string | null;
|
|
66
66
|
/** Analysis requires a live recording producer, including supported dry-run previews. */
|
package/dist/lab/validation.js
CHANGED
|
@@ -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
|
-
* Cross-validate the computer-use fan-out declaration (per-lane
|
|
8
|
-
* message, or null when valid.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Cross-validate the computer-use fan-out declaration (`per-lane-worlds`). Returns the failure
|
|
8
|
+
* message, or null when valid. The parser enforces it, and runLab 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
|
|
20
|
-
// Fan-out is declared via actors[0].count
|
|
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,21 +46,21 @@ 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
|
-
// Public targets fan out into N independent worlds driving the
|
|
53
|
-
// ambiguous shared-world-ish shape, not a per-
|
|
54
|
-
// every roster
|
|
55
|
-
// `subject.topology: shared-world` is
|
|
56
|
-
//
|
|
53
|
+
// Public targets fan out into N independent worlds driving the same public app, which is an
|
|
54
|
+
// ambiguous shared-world-ish shape, not a per-participant target swarm. Permit N>1 public runs only
|
|
55
|
+
// when every roster entry declares its own target, making the adapter-owned topology explicit. But when
|
|
56
|
+
// `subject.topology: shared-world` is also declared, N participants against one public target is the
|
|
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
|
}
|
|
@@ -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
|
+
* runLab takes a config that skipped the parser.
|
|
103
104
|
*/
|
|
104
105
|
export function sharedWorldValidationReason(config) {
|
|
105
106
|
return config.subject.source === "app-url"
|
|
@@ -107,9 +108,9 @@ export function sharedWorldValidationReason(config) {
|
|
|
107
108
|
: concurrentSharedWorldValidationReason(config);
|
|
108
109
|
}
|
|
109
110
|
/**
|
|
110
|
-
* The structural checks every provisioned shared world shares. It
|
|
111
|
+
* The structural checks every provisioned shared world shares. It requires: a clone or local-tree source + e2b-desktop
|
|
111
112
|
* target + a computer-use actor + a `subject.serve` block + an `actors[0].lanes` roster of ≥2 roles (the
|
|
112
|
-
* roster
|
|
113
|
+
* roster is the role roster; there is no separate roles[] field), and every role `entry` must resolve
|
|
113
114
|
* same-origin (loopback) with serve.url. Fail-closed: a half-declared shared-world is rejected,
|
|
114
115
|
* never silently downgraded.
|
|
115
116
|
*/
|
|
@@ -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
|
}
|
|
@@ -198,7 +199,7 @@ export function receivingEmailValidationReason(config) {
|
|
|
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()) {
|
|
@@ -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-
|
|
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
|
|
@@ -275,12 +277,12 @@ function sharedWorldConcurrencyReason(config) {
|
|
|
275
277
|
return `shared-world labs 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
|
|
279
|
-
* or null when valid. Includes the base shared-world checks
|
|
280
|
-
* subject attestation
|
|
281
|
-
* all interfaces), and no `subject.clone.keep`/`subject.localTree.keep` (
|
|
282
|
-
* orphan actor sandboxes). Enforced at parse
|
|
283
|
-
*
|
|
280
|
+
* Cross-validate a concurrent shared-world declaration. Returns the failure message,
|
|
281
|
+
* or null when valid. Includes the base shared-world checks plus the concurrent extras: a synthetic
|
|
282
|
+
* subject attestation, a 0.0.0.0 serve bind (getHost only routes to a port bound on
|
|
283
|
+
* all interfaces), and no `subject.clone.keep`/`subject.localTree.keep` (either would
|
|
284
|
+
* orphan actor sandboxes). Enforced at parse and re-enforced in the engine (runLab
|
|
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
|
|
308
|
-
* deployment used
|
|
309
|
-
* The
|
|
310
|
-
* it
|
|
311
|
-
* are inert with no sandbox
|
|
309
|
+
* Cross-validate the external-public shared-world declaration: a real public
|
|
310
|
+
* deployment used directly as the shared plane (no getHost, no clone, no subject sandbox, no seed).
|
|
311
|
+
* The counterpart of concurrentSharedWorldValidationReason for a plane the harness does not own:
|
|
312
|
+
* it rejects every provisioned-subject field (serve/state.seed/state.checkpoint/exposure/clone/repos
|
|
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
|
-
* concurrency >= 2 + an actors[0].lanes roster of ≥2 with
|
|
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
|
|
317
|
+
* Enforced at parse and re-enforced in the engine (runLab 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
|
|
346
|
-
// synthetic on a real site, but you
|
|
347
|
+
// The operator-ownership attestation (the counterpart of exposure: synthetic; you cannot claim
|
|
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
|
-
//
|
|
351
|
-
// with a precise reason, never silently ignored
|
|
352
|
-
// would be a
|
|
352
|
+
// No provisioned-subject field is allowed: with no sandbox they cannot act, so they are rejected
|
|
353
|
+
// with a precise reason, never silently ignored. exposure: synthetic in particular
|
|
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
|
}
|
package/dist/lab/warnings.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
1
|
import type { LabConfig } 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: LabConfig): 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: LabConfig): string[];
|
|
2
12
|
export declare function forwardDeclaredWarnings(config: LabConfig): string[];
|