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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// The
|
|
1
|
+
// The provisioned-getHost plane: the harness provisions one subject sandbox (clone or local-tree,
|
|
2
2
|
// install/build, seed, serve on 0.0.0.0), exposes it through getHost, probes its state on a
|
|
3
|
-
// cadence, and runs every
|
|
4
|
-
// id in the plane's finally, never through Sandbox.list.
|
|
3
|
+
// cadence, and runs every participant against that one shared plane. All sandboxes are torn down by
|
|
4
|
+
// exact id in the plane's finally, never through Sandbox.list.
|
|
5
5
|
import { buildOriginMap } from "../../comms/capture-surface.js";
|
|
6
6
|
import { deployCommsCatch, refreshInboxSurface, writeInboxSurface, } from "../../comms/sandbox-catch.js";
|
|
7
7
|
import { redactText, toErrorMessage } from "../../evidence/redaction.js";
|
|
@@ -10,6 +10,7 @@ import { mapWithConcurrency } from "../../run/concurrency.js";
|
|
|
10
10
|
import { provisionCloneSubject } from "../../subject/clone.js";
|
|
11
11
|
import { provisionLocalTreeSubject } from "../../subject/local-tree.js";
|
|
12
12
|
import { defaultSharedWorldPhaseSink } from "../../subject/steps.js";
|
|
13
|
+
import { phaseEvent } from "../../lab/run-lab-events.js";
|
|
13
14
|
import { loadE2BDesktopModule } from "../../substrates/e2b/sdk.js";
|
|
14
15
|
import { observeDesktopResources, } from "../../substrates/e2b/desktop-resources.js";
|
|
15
16
|
import { acquireE2BDesktopSandbox, readE2BRelease } from "../../substrates/e2b/sandbox.js";
|
|
@@ -19,14 +20,14 @@ import { inboxRecipientFor, participantHasInboxRecipient, } from "../computer-us
|
|
|
19
20
|
import { resolveSubjectState } from "../computer-use/subject-projection.js";
|
|
20
21
|
import { withInboxMission } from "../computer-use/participant-prompt.js";
|
|
21
22
|
import { planeStateOf } from "./plan.js";
|
|
22
|
-
import { runCuaParticipant } from "../computer-use/
|
|
23
|
+
import { runCuaParticipant } from "../computer-use/participant-execution.js";
|
|
23
24
|
import { buildConcurrentSharedWorldBundle, judgeSharedWorldRun } from "./bundle.js";
|
|
24
25
|
import { runCheckpointSnapshot } from "./checkpoints.js";
|
|
25
26
|
import { drainSubjectComms } from "./comms.js";
|
|
26
27
|
import { buildSubjectProvenance, hostOriginDigest, isTokenlessHost, servePort, } from "./provenance.js";
|
|
27
28
|
import { SANDBOX_TIMEOUT_BUFFER_MS, SUBJECT_PROVISION_BUDGET_MS, } from "../../substrates/e2b/lifetime.js";
|
|
28
29
|
import { DEFAULT_STATE_STEP_TIMEOUT_MS } from "../../subject/state.js";
|
|
29
|
-
import { resolveActorEntryUrl, participantRunDeps, startParticipantFlush } from "./
|
|
30
|
+
import { resolveActorEntryUrl, participantRunDeps, startParticipantFlush, } from "./participant-specs.js";
|
|
30
31
|
import { CONCURRENT_SHARED_WORLD_PROVIDER_METADATA, } from "./types.js";
|
|
31
32
|
import { addressedRecipients } from "../../lab/parse/comms.js";
|
|
32
33
|
/**
|
|
@@ -41,12 +42,13 @@ class ObserverGateError extends Error {
|
|
|
41
42
|
this.name = "ObserverGateError";
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
|
-
/** The
|
|
45
|
+
/** The one subject sandbox and the loops that run against it until teardown. */
|
|
45
46
|
class SubjectPlane {
|
|
46
47
|
commsInboxUrl;
|
|
47
48
|
subjectCommit;
|
|
48
49
|
subjectSandboxId;
|
|
49
50
|
subjectKilled = false;
|
|
51
|
+
subjectReleaseWarning;
|
|
50
52
|
getHostUrl;
|
|
51
53
|
// The subject desktop's host-side span and size, priced in the run's cost estimate.
|
|
52
54
|
subjectCreatedAtMs;
|
|
@@ -57,17 +59,17 @@ class SubjectPlane {
|
|
|
57
59
|
subjectAllocation;
|
|
58
60
|
subjectDesktop;
|
|
59
61
|
subjectShell;
|
|
60
|
-
// The in-sandbox email catch on the
|
|
62
|
+
// The in-sandbox email catch on the one subject sandbox; drained at teardown. Undefined
|
|
61
63
|
// unless a comms lab declared it.
|
|
62
64
|
deployedComms;
|
|
63
|
-
// Background prober dispose signal
|
|
65
|
+
// Background prober dispose signal, cleared in teardown.
|
|
64
66
|
proberDisposed = false;
|
|
65
67
|
releaseDispose = () => { };
|
|
66
68
|
disposeSignal;
|
|
67
69
|
proberLoop;
|
|
68
70
|
snapshotIndex = 0;
|
|
69
|
-
// Persona inbox
|
|
70
|
-
// (
|
|
71
|
+
// Persona inbox surface: the serve->getHost origin-rewrite map
|
|
72
|
+
// (required here so the app's loopback verify links resolve to a reachable host), and the
|
|
71
73
|
// dedicated surface render loop.
|
|
72
74
|
commsOriginMap = [];
|
|
73
75
|
surfaceRenderedCount = 0;
|
|
@@ -98,12 +100,12 @@ class SubjectPlane {
|
|
|
98
100
|
this.setup.stateSnapshots.push({ timestamp, digest: snapshot.digest });
|
|
99
101
|
}
|
|
100
102
|
async acquire() {
|
|
101
|
-
const { plan,
|
|
103
|
+
const { plan, deps, env, requestTimeoutMs, timeoutMs } = this.ctx;
|
|
102
104
|
const { subjectEnvNames, commsEnv } = this.setup;
|
|
103
|
-
const subjectModule = await (
|
|
104
|
-
// The
|
|
105
|
-
//
|
|
106
|
-
// honored on
|
|
105
|
+
const subjectModule = await (deps.desktopModule ?? loadE2BDesktopModule)();
|
|
106
|
+
// The one subject sandbox: headless service host (no GUI participant). The subject env is
|
|
107
|
+
// provisioned here; the actor sandboxes get none of it. A custom desktop template (image) is
|
|
108
|
+
// honored on both the subject sandbox (here) and every actor sandbox (via runCuaParticipant, which
|
|
107
109
|
// reads the same config); absent keeps the byte-stable Sandbox.create(opts) default. The
|
|
108
110
|
// receipt is on disk before any work, so `humanish reclaim` can kill it by exact id.
|
|
109
111
|
const subject = await acquireE2BDesktopSandbox({
|
|
@@ -120,8 +122,8 @@ class SubjectPlane {
|
|
|
120
122
|
labId: plan.labId,
|
|
121
123
|
topology: "shared-world",
|
|
122
124
|
topologyMode: "concurrent",
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
kind: "subject",
|
|
126
|
+
participantCount: String(plan.plane.participants.length),
|
|
125
127
|
},
|
|
126
128
|
...(subjectEnvNames.length > 0 || Object.keys(commsEnv).length > 0
|
|
127
129
|
? {
|
|
@@ -143,18 +145,16 @@ class SubjectPlane {
|
|
|
143
145
|
this.subjectSandboxId = subject.allocation.resourceId;
|
|
144
146
|
this.subjectCreatedAtMs = this.ctx.now();
|
|
145
147
|
this.subjectResources = await observeDesktopResources(this.subjectDesktop);
|
|
146
|
-
|
|
147
|
-
await hooks.prepareDesktop(this.subjectDesktop);
|
|
148
|
-
}
|
|
148
|
+
await this.ctx.input.prepareDesktop?.(this.subjectDesktop, { kind: "subject" });
|
|
149
149
|
}
|
|
150
|
-
// Start the in-sandbox email catch
|
|
150
|
+
// Start the in-sandbox email catch before the subject serve, so the app's send-API base URL
|
|
151
151
|
// (injected into its env at create) resolves the moment it boots. Fail closed if the catch can't
|
|
152
152
|
// stand up rather than let a comms-declared app silently send real mail to the internet.
|
|
153
153
|
async deployCatch() {
|
|
154
154
|
const { commsEmail, commsPort } = this.setup;
|
|
155
155
|
if (commsEmail && commsPort !== undefined) {
|
|
156
|
-
// A
|
|
157
|
-
//
|
|
156
|
+
// A second (0.0.0.0) read-only inbox listener on commsPort+1 so the persona, which lives in
|
|
157
|
+
// another sandbox here, can reach the inbox surface via getHost; capture stays loopback.
|
|
158
158
|
this.deployedComms = await deployCommsCatch(this.subjectShell, {
|
|
159
159
|
port: commsPort,
|
|
160
160
|
inboxPort: commsPort + 1,
|
|
@@ -166,15 +166,19 @@ class SubjectPlane {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
|
-
// Provision the
|
|
170
|
-
// (clone route), or upload/extract the once-per-run packed archive + the
|
|
169
|
+
// Provision the one shared plane: clone + install/build + seed + serve on 0.0.0.0 + probe
|
|
170
|
+
// (clone route), or upload/extract the once-per-run packed archive + the same shared serve
|
|
171
171
|
// pipeline (local-tree route).
|
|
172
172
|
async provision() {
|
|
173
|
-
const { plan,
|
|
173
|
+
const { plan, requestTimeoutMs, scrubKnownValues } = this.ctx;
|
|
174
174
|
const { serve, timers, stateStepRecords } = this.setup;
|
|
175
175
|
const state = planeStateOf(plan);
|
|
176
176
|
const subjectShell = this.subjectShell;
|
|
177
|
-
const
|
|
177
|
+
const sink = this.ctx.input.deps?.subjectPhaseSink ?? defaultSharedWorldPhaseSink;
|
|
178
|
+
const onSubjectPhase = (event) => {
|
|
179
|
+
sink(event);
|
|
180
|
+
this.ctx.input.emit?.(phaseEvent(event, { kind: "subject" }));
|
|
181
|
+
};
|
|
178
182
|
if (this.setup.localTreeRoute) {
|
|
179
183
|
await provisionLocalTreeSubject(subjectShell, {
|
|
180
184
|
archiveBuffer: this.setup.localTreeArchiveBuffer,
|
|
@@ -209,13 +213,13 @@ class SubjectPlane {
|
|
|
209
213
|
});
|
|
210
214
|
}
|
|
211
215
|
}
|
|
212
|
-
// Expose the served port via getHost
|
|
216
|
+
// Expose the served port via getHost. Fail closed if the SDK lacks it.
|
|
213
217
|
exposeHost() {
|
|
214
218
|
const subjectDesktop = this.subjectDesktop;
|
|
215
219
|
if (typeof subjectDesktop.getHost !== "function") {
|
|
216
220
|
throw new Error("the installed @e2b/desktop SDK does not expose getHost(port); the concurrent shared-world route requires it to reach the subject plane");
|
|
217
221
|
}
|
|
218
|
-
// getHost returns a
|
|
222
|
+
// getHost returns a bare host (e.g. "3000-<sandboxId>.e2b.app", no scheme); e2b exposes the
|
|
219
223
|
// port over https. Normalize to a full URL before the tokenless check + before persisting.
|
|
220
224
|
const rawHost = subjectDesktop.getHost(servePort(this.setup.serve.url));
|
|
221
225
|
const hostUrl = /^https?:\/\//i.test(rawHost) ? rawHost : `https://${rawHost}`;
|
|
@@ -224,12 +228,12 @@ class SubjectPlane {
|
|
|
224
228
|
}
|
|
225
229
|
this.getHostUrl = hostUrl;
|
|
226
230
|
}
|
|
227
|
-
// Persona inbox
|
|
228
|
-
// a persona in
|
|
231
|
+
// Persona inbox surface: getHost-expose the read-only inbox listener so
|
|
232
|
+
// a persona in another sandbox can open it; build the serve->getHost origin map (required here:
|
|
229
233
|
// the app's loopback verify links must be rewritten to a reachable host); provision the surface
|
|
230
|
-
// channel; write the
|
|
234
|
+
// channel; write the empty inbox up front (so /inbox never 404s); and start a render loop that drains
|
|
231
235
|
// + re-renders on a cadence. The loop shares the prober's dispose signal (disposed together, before
|
|
232
|
-
// the teardown evidence drain), and uses a
|
|
236
|
+
// the teardown evidence drain), and uses a dedicated FakeInbox + cursor (independent of that drain).
|
|
233
237
|
async startInboxSurface() {
|
|
234
238
|
const { commsEmail } = this.setup;
|
|
235
239
|
const { requestTimeoutMs } = this.ctx;
|
|
@@ -259,7 +263,7 @@ class SubjectPlane {
|
|
|
259
263
|
const surfaceCadenceMs = 2500;
|
|
260
264
|
this.surfaceLoop = (async () => {
|
|
261
265
|
// Full, idempotent rebuild each tick; surfaceRenderedCount advances only on a successful render,
|
|
262
|
-
// so a transient failure retries cleanly. Real timer (dispose-interruptible + cleared)
|
|
266
|
+
// so a transient failure retries cleanly. Real timer (dispose-interruptible + cleared): an
|
|
263
267
|
// unbounded loop must not busy-spin on the injected instant clock.
|
|
264
268
|
for (;;) {
|
|
265
269
|
try {
|
|
@@ -303,7 +307,7 @@ class SubjectPlane {
|
|
|
303
307
|
this.disposeSignal,
|
|
304
308
|
]);
|
|
305
309
|
if (timer)
|
|
306
|
-
clearTimeout(timer); //
|
|
310
|
+
clearTimeout(timer); // No dangling prober timer.
|
|
307
311
|
if (this.proberDisposed)
|
|
308
312
|
break;
|
|
309
313
|
await this.snapshot().catch(() => undefined);
|
|
@@ -311,8 +315,8 @@ class SubjectPlane {
|
|
|
311
315
|
})();
|
|
312
316
|
}
|
|
313
317
|
/**
|
|
314
|
-
*
|
|
315
|
-
* down the
|
|
318
|
+
* Stop the prober, take a final snapshot while the subject is still alive, then tear
|
|
319
|
+
* down the one subject sandbox by id (the actor sandboxes are torn down inside runCuaParticipant).
|
|
316
320
|
* Returns the comms thread's path when the drain wrote one.
|
|
317
321
|
*/
|
|
318
322
|
async teardown() {
|
|
@@ -323,7 +327,7 @@ class SubjectPlane {
|
|
|
323
327
|
await this.proberLoop.catch(() => undefined);
|
|
324
328
|
}
|
|
325
329
|
// Stop the inbox-surface render loop too (shares the prober's dispose signal), before the teardown
|
|
326
|
-
// evidence drain below
|
|
330
|
+
// evidence drain below, so the two in-sandbox reads never overlap and the surface state is final.
|
|
327
331
|
if (this.surfaceLoop) {
|
|
328
332
|
await this.surfaceLoop.catch(() => undefined);
|
|
329
333
|
}
|
|
@@ -345,6 +349,8 @@ class SubjectPlane {
|
|
|
345
349
|
this.subjectKilled = reading.released;
|
|
346
350
|
if (reading.warning)
|
|
347
351
|
warnings.push(reading.warning);
|
|
352
|
+
if (!reading.released)
|
|
353
|
+
this.subjectReleaseWarning = reading.warning ?? "Subject sandbox release is unconfirmed.";
|
|
348
354
|
// Without a kill method, or in E2B debug mode, no kill reached E2B, so there is no teardown
|
|
349
355
|
// time to record.
|
|
350
356
|
if (released.status !== "unconfirmed" || released.reason !== "release_unavailable")
|
|
@@ -364,7 +370,8 @@ class SubjectPlane {
|
|
|
364
370
|
};
|
|
365
371
|
}
|
|
366
372
|
}
|
|
367
|
-
/** Writes the in-progress bundle, runs the caller's Observer gate and starts the
|
|
373
|
+
/** Writes the in-progress bundle, runs the caller's Observer gate and starts the participants'
|
|
374
|
+
* flush. */
|
|
368
375
|
async function publishInProgress(plane, ctx, live, setup) {
|
|
369
376
|
const { plan, input } = ctx;
|
|
370
377
|
const { localTreeRoute, localTreeArchive } = setup;
|
|
@@ -385,11 +392,10 @@ async function publishInProgress(plane, ctx, live, setup) {
|
|
|
385
392
|
});
|
|
386
393
|
const snapshotArgs = {
|
|
387
394
|
plan,
|
|
395
|
+
run: ctx.run,
|
|
388
396
|
descriptor: ctx.descriptor,
|
|
389
|
-
createdAt: ctx.createdAt,
|
|
390
397
|
dryRun: false,
|
|
391
398
|
inProgress: true,
|
|
392
|
-
runId: ctx.runId,
|
|
393
399
|
source: ctx.source,
|
|
394
400
|
actorSpecs: ctx.actorSpecs,
|
|
395
401
|
actorResults: [],
|
|
@@ -417,9 +423,9 @@ async function publishInProgress(plane, ctx, live, setup) {
|
|
|
417
423
|
}
|
|
418
424
|
startParticipantFlush(ctx, live, inProgressBundle);
|
|
419
425
|
}
|
|
420
|
-
// Launch N actor sandboxes
|
|
421
|
-
//
|
|
422
|
-
// orchestrator clock
|
|
426
|
+
// Launch N actor sandboxes concurrently and independently (runCuaParticipant + mapWithConcurrency;
|
|
427
|
+
// runCuaParticipants would add a pipeline gate and fail-fast). Each actor's window is measured on the
|
|
428
|
+
// one orchestrator clock.
|
|
423
429
|
function runParticipants(plane, ctx, live, setup) {
|
|
424
430
|
const { now } = ctx;
|
|
425
431
|
const participants = ctx.plan.plane.participants;
|
|
@@ -427,10 +433,10 @@ function runParticipants(plane, ctx, live, setup) {
|
|
|
427
433
|
const baseActorDeps = participantRunDeps(ctx, live, ctx.scrubKnownValues);
|
|
428
434
|
return mapWithConcurrency(ctx.actorSpecs, Math.max(1, ctx.concurrency), async (spec, i) => {
|
|
429
435
|
const route = resolveActorEntryUrl(plane.getHostUrl, participants[i]?.entry);
|
|
430
|
-
// Tell this persona its (getHost-reachable) inbox URL
|
|
436
|
+
// Tell this persona its (getHost-reachable) inbox URL, but only when comms is live and this participant
|
|
431
437
|
// has a declared recipient it can actually receive mail into (else it would stall on an empty
|
|
432
438
|
// inbox). Only the in-sandbox catch exists on this plane; the adopter-hosted catch is the
|
|
433
|
-
// external-public plane's
|
|
439
|
+
// external-public plane's.
|
|
434
440
|
const actorSpec = commsEmail && plane.commsInboxUrl && participantHasInboxRecipient(commsEmail, spec.planned.id)
|
|
435
441
|
? withInboxMission(spec, plane.commsInboxUrl, inboxRecipientFor(commsEmail, spec.planned.id)?.address)
|
|
436
442
|
: spec;
|
|
@@ -472,6 +478,7 @@ export async function runProvisionedPlane(ctx, live, setup) {
|
|
|
472
478
|
subjectCommit: plane.subjectCommit,
|
|
473
479
|
subjectSandboxId: plane.subjectSandboxId,
|
|
474
480
|
subjectKilled: plane.subjectKilled,
|
|
481
|
+
subjectReleaseWarning: plane.subjectReleaseWarning,
|
|
475
482
|
subjectDesktop: plane.desktopUsage(),
|
|
476
483
|
getHostUrl: plane.getHostUrl,
|
|
477
484
|
commsArtifactPath,
|
|
@@ -481,8 +488,8 @@ export async function runProvisionedPlane(ctx, live, setup) {
|
|
|
481
488
|
* Packs the working tree once per run, on the host, for a local-tree subject. Returns the archive,
|
|
482
489
|
* or the message the run fails with.
|
|
483
490
|
*/
|
|
484
|
-
export async function packSubjectTree(cwd, config,
|
|
485
|
-
const packLocalTree =
|
|
491
|
+
export async function packSubjectTree(cwd, config, deps, scrubKnownValues) {
|
|
492
|
+
const packLocalTree = deps.packLocalTree ?? defaultPackLocalTree;
|
|
486
493
|
try {
|
|
487
494
|
const packed = await packLocalTree({
|
|
488
495
|
root: cwd,
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
// Finishing a concurrent shared-world run: publishing its bundle, rendering the Observer, and the
|
|
2
2
|
// lab result with each role's outcome and the one error a run that did not pass reports.
|
|
3
3
|
import { redactText } from "../../evidence/redaction.js";
|
|
4
|
-
import { adapterScoreFailureMessage,
|
|
4
|
+
import { adapterScoreFailureMessage, applyBrowserScorer } from "../../lab/adapter-extension.js";
|
|
5
5
|
import { attachObserverRuntimeStreamUrls } from "../../observer/render.js";
|
|
6
|
-
import { foldScorerFailures, judgeExecution, OUTCOME_POLICIES, participantHarnessFailed, resultOk, sharedWorldShortfall, } from "../../run/judge.js";
|
|
7
|
-
import { participantFactsOf } from "../computer-use/participant-facts.js";
|
|
6
|
+
import { foldScorerFailures, judgeExecution, sandboxCleanupFailure, OUTCOME_POLICIES, participantHarnessFailed, resultOk, sharedWorldShortfall, } from "../../run/judge.js";
|
|
7
|
+
import { participantFactsOf, unreleasedSandboxFailures, } from "../computer-use/participant-facts.js";
|
|
8
8
|
import { resolveSubjectState } from "../computer-use/subject-projection.js";
|
|
9
9
|
import { actorRunPassed, buildConcurrentSharedWorldBundle, judgeSharedWorldRun, maxSimultaneousWindows, } from "./bundle.js";
|
|
10
10
|
import { planeStateOf } from "./plan.js";
|
|
11
11
|
import { buildSubjectProvenance, hostOriginDigest } from "./provenance.js";
|
|
12
|
-
import {
|
|
12
|
+
import {} from "./types.js";
|
|
13
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
13
14
|
/** The results of a run whose plane did not run (a dry run) or has not reported yet. */
|
|
14
15
|
export function emptyPlaneResults() {
|
|
15
16
|
return {
|
|
@@ -18,6 +19,7 @@ export function emptyPlaneResults() {
|
|
|
18
19
|
subjectCommit: undefined,
|
|
19
20
|
subjectSandboxId: undefined,
|
|
20
21
|
subjectKilled: false,
|
|
22
|
+
subjectReleaseWarning: undefined,
|
|
21
23
|
subjectDesktop: undefined,
|
|
22
24
|
getHostUrl: undefined,
|
|
23
25
|
publicOriginDigest: undefined,
|
|
@@ -64,7 +66,7 @@ function concurrentParticipantResults(actorSpecs, actorResults, dryRun) {
|
|
|
64
66
|
? {}
|
|
65
67
|
: {
|
|
66
68
|
error: {
|
|
67
|
-
code: "
|
|
69
|
+
code: "HUMANISH_SHARED_WORLD_FAILED",
|
|
68
70
|
message: result.outcome.sessionError ??
|
|
69
71
|
(result.outcome.noEngagement
|
|
70
72
|
? "Actor took no actions and produced no message (likely a blank/still-loading screen); not a credible goal_satisfied."
|
|
@@ -85,18 +87,18 @@ function concurrentLabError(args) {
|
|
|
85
87
|
if (ok)
|
|
86
88
|
return undefined;
|
|
87
89
|
if (handoffTimedOut) {
|
|
88
|
-
// Checked
|
|
89
|
-
// deadline (followers failed closed without opening), which is the
|
|
90
|
-
// itself make the Observer unable to render a coherent run. Report the distinct
|
|
90
|
+
// Checked before the observer failure: the host never yielded a /lobby/CODE within the
|
|
91
|
+
// deadline (followers failed closed without opening), which is the root cause, and it can
|
|
92
|
+
// itself make the Observer unable to render a coherent run. Report the distinct
|
|
91
93
|
// handoff-timeout code rather than a generic observer/run failure.
|
|
92
94
|
return {
|
|
93
|
-
code: "
|
|
95
|
+
code: "HUMANISH_SHARED_WORLD_HANDOFF_TIMEOUT",
|
|
94
96
|
message: runError ??
|
|
95
97
|
"The host participant never produced a /lobby/CODE URL within the handoff deadline.",
|
|
96
98
|
};
|
|
97
99
|
}
|
|
98
100
|
if (hostHandoffFailure !== undefined) {
|
|
99
|
-
return { code: "
|
|
101
|
+
return { code: "HUMANISH_SHARED_WORLD_FAILED", message: hostHandoffFailure };
|
|
100
102
|
}
|
|
101
103
|
// The run's own failure before the Observer's: a run that stopped early (a desktop module that
|
|
102
104
|
// failed to load, a plane that failed to start) leaves a bundle verify then refuses, and naming
|
|
@@ -104,34 +106,34 @@ function concurrentLabError(args) {
|
|
|
104
106
|
// evidence).
|
|
105
107
|
if (runError) {
|
|
106
108
|
return {
|
|
107
|
-
code: "
|
|
109
|
+
code: "HUMANISH_SHARED_WORLD_FAILED",
|
|
108
110
|
message: observer.ok ? runError : `${runError} The run bundle it left failed verification.`,
|
|
109
111
|
};
|
|
110
112
|
}
|
|
111
113
|
if (!observer.ok) {
|
|
112
114
|
return {
|
|
113
|
-
code: "
|
|
115
|
+
code: "HUMANISH_SHARED_WORLD_FAILED",
|
|
114
116
|
message: observer.error?.message ?? "Observer failed for the concurrent shared-world run.",
|
|
115
117
|
};
|
|
116
118
|
}
|
|
117
119
|
if (adapterFailure !== undefined) {
|
|
118
|
-
return { code: "
|
|
120
|
+
return { code: "HUMANISH_SHARED_WORLD_FAILED", message: adapterFailure };
|
|
119
121
|
}
|
|
120
122
|
const passed = participantResults.filter((result) => result.ok).length;
|
|
121
123
|
if (passed === participantCount && args.shortfall !== undefined) {
|
|
122
124
|
return {
|
|
123
|
-
code: "
|
|
125
|
+
code: "HUMANISH_SHARED_WORLD_FAILED",
|
|
124
126
|
message: `Concurrent shared-world run did not run coherently. ${args.shortfall}`,
|
|
125
127
|
};
|
|
126
128
|
}
|
|
127
129
|
if (passed === participantCount && args.executionFailure !== undefined) {
|
|
128
130
|
return {
|
|
129
|
-
code: "
|
|
131
|
+
code: "HUMANISH_SHARED_WORLD_FAILED",
|
|
130
132
|
message: `Concurrent shared-world run failed as an execution. ${args.executionFailure}`,
|
|
131
133
|
};
|
|
132
134
|
}
|
|
133
135
|
return {
|
|
134
|
-
code: "
|
|
136
|
+
code: "HUMANISH_SHARED_WORLD_FAILED",
|
|
135
137
|
message: `Concurrent shared-world run did not run coherently: ${passed}/${participantCount} actor(s) reached a terminal, engaged passed session.`,
|
|
136
138
|
};
|
|
137
139
|
}
|
|
@@ -141,10 +143,9 @@ function concurrentLabError(args) {
|
|
|
141
143
|
*/
|
|
142
144
|
export function concurrentLabFailure(envelope) {
|
|
143
145
|
return (code, message, actorLabel) => ({
|
|
144
|
-
|
|
146
|
+
...studyResultIdentity("shared-world", envelope.labId),
|
|
145
147
|
ok: false,
|
|
146
148
|
cwd: envelope.cwd,
|
|
147
|
-
labId: envelope.labId,
|
|
148
149
|
actor: actorLabel ?? envelope.actor,
|
|
149
150
|
topology: "shared-world",
|
|
150
151
|
topologyMode: "concurrent",
|
|
@@ -158,11 +159,13 @@ export function concurrentLabFailure(envelope) {
|
|
|
158
159
|
});
|
|
159
160
|
}
|
|
160
161
|
/**
|
|
161
|
-
* The run's execution failures: a run error (the handoff, the plane), each
|
|
162
|
-
* failed in the harness,
|
|
162
|
+
* The run's execution failures: a run error (the handoff, the plane), each participant whose
|
|
163
|
+
* session failed in the harness, each provider whose cleanup is unconfirmed or that reported a
|
|
164
|
+
* disallowed item after its last request, each sandbox whose release is unconfirmed, and an
|
|
165
|
+
* Observer that failed.
|
|
163
166
|
*/
|
|
164
167
|
function sharedWorldExecutionFailures(args) {
|
|
165
|
-
const { runError, actorResults, observer } = args;
|
|
168
|
+
const { runId, runError, actorResults, subject, observer } = args;
|
|
166
169
|
return [
|
|
167
170
|
...(runError === undefined ? [] : [{ kind: "run", message: runError }]),
|
|
168
171
|
...actorResults
|
|
@@ -179,6 +182,18 @@ function sharedWorldExecutionFailures(args) {
|
|
|
179
182
|
message: `${result.spec.planned.id}: ${result.outcome.providerCleanupError}`,
|
|
180
183
|
},
|
|
181
184
|
]),
|
|
185
|
+
...actorResults.flatMap((result) => result.outcome.providerPolicyError === undefined
|
|
186
|
+
? []
|
|
187
|
+
: [
|
|
188
|
+
{
|
|
189
|
+
kind: "provider-policy",
|
|
190
|
+
message: `${result.spec.planned.id}: ${result.outcome.providerPolicyError}`,
|
|
191
|
+
},
|
|
192
|
+
]),
|
|
193
|
+
...unreleasedSandboxFailures(actorResults.map((result) => result.outcome), runId),
|
|
194
|
+
...(subject.subjectSandboxId === undefined || subject.subjectKilled
|
|
195
|
+
? []
|
|
196
|
+
: [sandboxCleanupFailure("subject", subject.subjectReleaseWarning, runId)]),
|
|
182
197
|
...(observer.ok
|
|
183
198
|
? []
|
|
184
199
|
: [
|
|
@@ -191,7 +206,7 @@ function sharedWorldExecutionFailures(args) {
|
|
|
191
206
|
}
|
|
192
207
|
/** Builds and publishes the bundle, renders the Observer and returns the lab result. */
|
|
193
208
|
export async function finishConcurrentRun(ctx, live, results, plane) {
|
|
194
|
-
const { plan, input, descriptor,
|
|
209
|
+
const { plan, input, descriptor, actorSpecs, run, runId } = ctx;
|
|
195
210
|
const participantCount = plan.plane.participants.length;
|
|
196
211
|
const { cwd, concurrency, source, seedDigest, receiving, warnings, scrubKnownValues } = ctx;
|
|
197
212
|
const { dryRun } = plan;
|
|
@@ -218,17 +233,15 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
|
|
|
218
233
|
}),
|
|
219
234
|
});
|
|
220
235
|
const planeCommit = localTreeRoute ? localTreeArchive?.git?.commit : subjectCommit;
|
|
221
|
-
// Collect per-actor warnings (each
|
|
236
|
+
// Collect per-actor warnings (each participant's own teardown/raw-screenshot notes).
|
|
222
237
|
for (const result of actorResults) {
|
|
223
238
|
warnings.push(...result.outcome.warnings);
|
|
224
239
|
}
|
|
225
240
|
const bundleArgs = {
|
|
226
|
-
|
|
241
|
+
run,
|
|
227
242
|
plan,
|
|
228
243
|
descriptor,
|
|
229
|
-
createdAt,
|
|
230
244
|
dryRun,
|
|
231
|
-
runId,
|
|
232
245
|
source,
|
|
233
246
|
actorSpecs,
|
|
234
247
|
actorResults,
|
|
@@ -249,8 +262,8 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
|
|
|
249
262
|
const judgment = judgeSharedWorldRun(bundleArgs);
|
|
250
263
|
const bundle = buildConcurrentSharedWorldBundle({ ...bundleArgs, judgment });
|
|
251
264
|
const adapterWarnings = [];
|
|
252
|
-
const scorerResult = await
|
|
253
|
-
|
|
265
|
+
const scorerResult = await applyBrowserScorer({
|
|
266
|
+
scorer: input.scorer,
|
|
254
267
|
bundle,
|
|
255
268
|
context: {
|
|
256
269
|
bundle,
|
|
@@ -258,13 +271,12 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
|
|
|
258
271
|
labId: plan.labId,
|
|
259
272
|
runId,
|
|
260
273
|
actor: descriptor.id,
|
|
261
|
-
|
|
274
|
+
route: "shared-world",
|
|
262
275
|
dryRun,
|
|
263
|
-
|
|
276
|
+
participantCount,
|
|
264
277
|
},
|
|
265
278
|
sanitize: (text) => redactText(scrubKnownValues(text)),
|
|
266
279
|
warnings: adapterWarnings,
|
|
267
|
-
hookLabel: "sharedWorldHooks",
|
|
268
280
|
...(input.scorerProvenance === undefined ? {} : { scorerProvenance: input.scorerProvenance }),
|
|
269
281
|
});
|
|
270
282
|
// The one final verdict fold: scoring can only make the judged verdict stricter.
|
|
@@ -276,13 +288,13 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
|
|
|
276
288
|
if (observer.ok && live.observer) {
|
|
277
289
|
attachObserverRuntimeStreamUrls(observer, live.streamUrls);
|
|
278
290
|
}
|
|
279
|
-
// Concurrent "ok": every actor must produce a terminal, engaged
|
|
280
|
-
// must show the concurrency verify requires of a pass (judgeSharedWorld). This is a
|
|
291
|
+
// Concurrent "ok": every actor must produce a terminal, engaged, passed session, and the
|
|
292
|
+
// participants must show the concurrency verify requires of a pass (judgeSharedWorld). This is a
|
|
281
293
|
// harness/session-credibility gate, not mission-completion proof; a failed actor trace cannot
|
|
282
294
|
// make the route green just because the harness got a terminal.
|
|
283
295
|
const adapterFailure = adapterScoreFailureMessage(bundle);
|
|
284
296
|
const policy = OUTCOME_POLICIES["shared-world"];
|
|
285
|
-
const execution = judgeExecution(sharedWorldExecutionFailures({ runError, actorResults, observer }), policy);
|
|
297
|
+
const execution = judgeExecution(sharedWorldExecutionFailures({ runId, runError, actorResults, subject: results, observer }), policy);
|
|
286
298
|
const ok = resultOk({ judgment, execution, scorerFailures: scorerResult.failures, policy });
|
|
287
299
|
const overlapProven = !dryRun && judgment.world.overlap;
|
|
288
300
|
const participantResults = concurrentParticipantResults(actorSpecs, actorResults, dryRun);
|
|
@@ -299,10 +311,9 @@ export async function finishConcurrentRun(ctx, live, results, plane) {
|
|
|
299
311
|
executionFailure: execution.failures[0]?.message,
|
|
300
312
|
});
|
|
301
313
|
const result = {
|
|
302
|
-
|
|
314
|
+
...studyResultIdentity("shared-world", plan.labId),
|
|
303
315
|
ok,
|
|
304
316
|
cwd,
|
|
305
|
-
labId: plan.labId,
|
|
306
317
|
actor: descriptor.id,
|
|
307
318
|
topology: "shared-world",
|
|
308
319
|
topologyMode: "concurrent",
|