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
|
@@ -2,181 +2,95 @@ import type { Verdict } from "../../run/judge.js";
|
|
|
2
2
|
import type { RunDesktopRecording } from "../../evidence/desktop-recording-types.js";
|
|
3
3
|
import type { CuaExecutor, CuaLiveMetadata, CuaLoopResult, CuaProvider } from "../../actors/computer-use/loop.js";
|
|
4
4
|
import type { CommsReceivingRun } from "../../comms/receiving.js";
|
|
5
|
-
import { type ParticipantDesktop } from "./participant-desktop.js";
|
|
5
|
+
import { type ParticipantDesktop, type ParticipantDesktopFactory } from "./participant-desktop.js";
|
|
6
6
|
import type { SubjectPhaseEvent } from "../../subject/steps.js";
|
|
7
7
|
import type { DesktopBrowserEvidence } from "../../substrates/e2b/desktop-browser.js";
|
|
8
|
-
import { type
|
|
8
|
+
import { type AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
9
|
+
import type { AutomaticAnalysisRefusal } from "../../analysis/job.js";
|
|
9
10
|
import { type CuaDiagnostics } from "./diagnostics.js";
|
|
10
11
|
import type { ActorCompletionReason, ActorStatus, ActorStopCause, ActorTokenUsage, ActorTraceItem } from "../../actors/contract.js";
|
|
11
12
|
import { type CuaActorDescriptor } from "../../actors/registry.js";
|
|
12
|
-
import {
|
|
13
|
+
import type { LabDeps } from "../../lab/lab-deps.js";
|
|
14
|
+
import type { LabEvent, ParticipantRef } from "../../lab/run-lab-events.js";
|
|
15
|
+
import type { InProcessDriver, ProviderFactory, RunLabHomes } from "../../lab/run-lab-homes.js";
|
|
16
|
+
import { type BrowserScorer } from "../../lab/adapter-extension.js";
|
|
13
17
|
import type { CuaActorSessionOptions } from "../../actors/computer-use/actor.js";
|
|
14
|
-
import { type E2BDesktopModule
|
|
18
|
+
import { type E2BDesktopModule } from "../../substrates/e2b/sdk.js";
|
|
15
19
|
import { type DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
|
|
16
20
|
import { type DetachedTimers } from "../../substrates/detached.js";
|
|
17
|
-
import type { Brain, ComputerUsePlan } from "../../lab/plan-types.js";
|
|
18
|
-
import { type LabCommsEmail, type LabConfig
|
|
19
|
-
import {
|
|
20
|
-
import { type
|
|
21
|
-
import { type RunBundle, type RunRerunLineage, type RunScorerProvenance, type RunSubjectProvenance, type RunSubjectStateStepRecord } from "../../run/bundle.js";
|
|
21
|
+
import type { Brain, ComputerUsePlan, ComputerUseRunner, ResidualConfig } from "../../lab/plan-types.js";
|
|
22
|
+
import { type LabCommsEmail, type LabConfig } from "../../lab/types.js";
|
|
23
|
+
import { type ObserverResult } from "../../observer/render.js";
|
|
24
|
+
import { type BundleRun, type RunBundle, type RunRerunLineage, type RunScorerProvenance, type RunSubjectProvenance, type RunSubjectStateStepRecord } from "../../run/bundle.js";
|
|
22
25
|
import { type RunDesktopGeometry } from "../../run/streams.js";
|
|
23
26
|
import { type PreparedOutputRoot } from "../../run/contained-output.js";
|
|
24
|
-
import { type LocalTreeArchive } from "../../subject/local-tree-archive.js";
|
|
25
27
|
import type { ComputerUseParticipant, SharedWorldParticipant } from "../../lab/plan-participants.js";
|
|
26
28
|
import type { ResolvedParticipant } from "../../run/participant.js";
|
|
27
|
-
import type
|
|
28
|
-
export declare const CUA_ACTOR_LAB_SCHEMA = "humanish.cua-lab-result.v2";
|
|
29
|
+
import { type StudyResultIdentity } from "../../run/study-result.js";
|
|
29
30
|
export declare const CUA_FANOUT_STRATEGY: "per-lane-worlds";
|
|
30
31
|
export declare const CUA_MAX_CONCURRENCY_ENV = "HUMANISH_CUA_MAX_CONCURRENCY";
|
|
31
32
|
export declare const DEFAULT_APP_URL_SESSION_TIMEOUT_MS: number;
|
|
32
33
|
export declare const MIN_DERIVED_SESSION_TIMEOUT_MS: number;
|
|
33
|
-
/**
|
|
34
|
-
* Library-level hooks. `prepareDesktop` runs after sandbox creation and before subject
|
|
35
|
-
* provisioning / browser launch — library callers use it for extra in-sandbox setup beyond
|
|
36
|
-
* what `subject.serve` declares (or to provision an app-url subject entirely). The rest are
|
|
37
|
-
* DI seams so CI drives the full path with fakes at zero network/zero spend.
|
|
38
|
-
*/
|
|
39
|
-
export interface CuaActorLabHooks extends BrowserLabAdapterHooks {
|
|
40
|
-
/**
|
|
41
|
-
* Runs after sandbox creation and before subject provisioning / browser launch. Widened
|
|
42
|
-
* back-compatibly with per-lane context so a library caller can provision the right app-url
|
|
43
|
-
* subject per lane (a one-arg `(desktop) => …` still satisfies the type). Called once per lane.
|
|
44
|
-
*/
|
|
45
|
-
prepareDesktop?: (desktop: E2BDesktopSandbox, lane: {
|
|
46
|
-
laneId: string;
|
|
47
|
-
laneIndex: number;
|
|
48
|
-
laneCount: number;
|
|
49
|
-
}) => Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* Pre-flight hook: receives the resolved lane plan BEFORE any sandbox or provider call (dry-run
|
|
52
|
-
* AND live). The engine also prints the plan to stderr; this seam lets tests assert it without
|
|
53
|
-
* scraping stderr. Identical plan in dry-run, marked $0.
|
|
54
|
-
*/
|
|
55
|
-
onPreflight?: (plan: CuaParticipantPlan) => void;
|
|
56
|
-
/**
|
|
57
|
-
* Live subject-provisioning phase sink: one call per started/completed boundary (clone,
|
|
58
|
-
* upload/extract, install, build, serve start, ready, and each subject.state seed-step
|
|
59
|
-
* group). Defaults to one stderr line per event, prefixed with the lane id when laneCount > 1
|
|
60
|
-
* (single-lane emission is unconditional: single-lane silence for the whole boot is the bug
|
|
61
|
-
* this event stream closes). Override in tests to capture instead of writing to real stderr.
|
|
62
|
-
*/
|
|
63
|
-
onPhase?: (event: SubjectPhaseEvent, ctx: {
|
|
64
|
-
laneId: string;
|
|
65
|
-
laneIndex: number;
|
|
66
|
-
laneCount: number;
|
|
67
|
-
}) => void;
|
|
68
|
-
/**
|
|
69
|
-
* Runtime-only live desktop stream callback. The URL carries an auth key and must never be
|
|
70
|
-
* persisted into run artifacts; callers use it to hydrate an attached Observer server.
|
|
71
|
-
*/
|
|
72
|
-
onRuntimeStreamReady?: (stream: {
|
|
73
|
-
laneId: string;
|
|
74
|
-
sandboxId: string;
|
|
75
|
-
simId: string;
|
|
76
|
-
streamId: string;
|
|
77
|
-
url: string;
|
|
78
|
-
}) => Promise<void> | void;
|
|
79
|
-
/** Fired when a lane's sandbox is gone (finished or torn down): the live stream URL is now a
|
|
80
|
-
* dead noVNC page, so the watch overlay must stop serving it and let the tile fall back to
|
|
81
|
-
* recorded evidence (#357). Fired only for lanes whose onRuntimeStreamReady fired. */
|
|
82
|
-
onRuntimeStreamEnded?: (stream: {
|
|
83
|
-
laneId: string;
|
|
84
|
-
simId: string;
|
|
85
|
-
streamId: string;
|
|
86
|
-
}) => Promise<void> | void;
|
|
87
|
-
loadDesktopModule?: () => Promise<E2BDesktopModule>;
|
|
88
|
-
runSession?: (options: CuaActorSessionOptions) => Promise<CuaLoopResult>;
|
|
89
|
-
/**
|
|
90
|
-
* Supply a custom executor (e.g. a window.* JS-contract bridge over an already-running local
|
|
91
|
-
* dev server). When present (with `buildProvider`), `runCuaActorLab` takes the IN-PROCESS
|
|
92
|
-
* branch: it NEVER loads the E2B module, creates a sandbox, runs prepareDesktop, provisions a
|
|
93
|
-
* clone, opens a browser, or starts a stream — so `result.sandbox` is omitted, the verifiable
|
|
94
|
-
* "no E2B SDK call" proof. The whole bundle/Observer/redaction composition below the session
|
|
95
|
-
* call is desktop-agnostic and runs unchanged. Receives the resolved config, the
|
|
96
|
-
* registry-resolved descriptor, and the entry appUrl.
|
|
97
|
-
*/
|
|
98
|
-
buildExecutor?: (ctx: {
|
|
99
|
-
config: LabConfig;
|
|
100
|
-
actor: CuaActorDescriptor;
|
|
101
|
-
appUrl: string;
|
|
102
|
-
}) => Promise<CuaExecutor>;
|
|
103
|
-
/**
|
|
104
|
-
* Supply a custom provider (a "brain" reasoning over app STATE). REQUIRED alongside
|
|
105
|
-
* `buildExecutor` — the default OpenAI provider is vision-based (requiresFrame) and would fail
|
|
106
|
-
* closed against a state-only executor that returns no screenshot. (`buildProvider` ALONE is
|
|
107
|
-
* allowed — that is just a model swap on the normal E2B route.)
|
|
108
|
-
*/
|
|
109
|
-
buildProvider?: (ctx: {
|
|
110
|
-
config: LabConfig;
|
|
111
|
-
actor: CuaActorDescriptor;
|
|
112
|
-
lane: CuaLaneSpec;
|
|
113
|
-
/** How many participants the run has. */
|
|
114
|
-
laneCount: number;
|
|
115
|
-
executor: CuaExecutor;
|
|
116
|
-
}) => Promise<CuaProvider>;
|
|
117
|
-
/**
|
|
118
|
-
* Substitute desktop ownership while retaining the shared participant and evidence loop.
|
|
119
|
-
* @deprecated No replacement: a run's desktop is E2B, the local VM or in process. This goes in
|
|
120
|
-
* the next minor.
|
|
121
|
-
*/
|
|
122
|
-
createDesktopLane?: (spec: CuaLaneSpec, warnings: string[], artifactRoot: PreparedOutputRoot) => ParticipantDesktop;
|
|
123
|
-
env?: Record<string, string | undefined>;
|
|
124
|
-
renderObserverFn?: typeof renderObserver;
|
|
125
|
-
/** Injected clock (ms) for the host-side E2B desktop create->teardown span measurement that
|
|
126
|
-
* feeds the desktop-minute cost estimate. Defaults to Date.now; tests inject a frozen/stepped
|
|
127
|
-
* clock so the desktop-minute line is deterministic. */
|
|
128
|
-
now?: () => number;
|
|
129
|
-
/** Injected clock/sleep for the detached-step polling (tests only). */
|
|
130
|
-
detachedTimers?: DetachedTimers;
|
|
131
|
-
/**
|
|
132
|
-
* Local-tree packing DI seam (tests only, no npm dependency needed to exercise the route):
|
|
133
|
-
* defaults to createLocalTreeArchive(root, opts) plus a host-side read of the produced
|
|
134
|
-
* archive file into an ArrayBuffer. Called ONCE per run, before lane fan-out, on the live
|
|
135
|
-
* local-tree route; the result (archive metadata + bytes) is shared byte-identically across
|
|
136
|
-
* every fan-out lane, so one archiveSha256 describes every lane's packed content.
|
|
137
|
-
*/
|
|
138
|
-
packLocalTree?: (args: {
|
|
139
|
-
root: string;
|
|
140
|
-
extraExclude?: string[];
|
|
141
|
-
maxArchiveBytes?: number;
|
|
142
|
-
}) => Promise<{
|
|
143
|
-
archive: LocalTreeArchive;
|
|
144
|
-
buffer: ArrayBuffer;
|
|
145
|
-
}>;
|
|
146
|
-
}
|
|
147
34
|
/**
|
|
148
35
|
* What a computer-use run takes besides its plan and config. The count override and rerun go to
|
|
149
36
|
* participant building with the config.
|
|
150
37
|
*/
|
|
151
38
|
export type ComputerUseRunInput = Omit<RunCuaActorLabOptions, "config" | "dryRun" | "lab">;
|
|
39
|
+
/**
|
|
40
|
+
* What runLab's local VM study gives a computer-use run: the desktop each participant runs on, the
|
|
41
|
+
* reason automatic analysis must not run (the study's cleanup is unconfirmed), and the signal its
|
|
42
|
+
* sessions abort on.
|
|
43
|
+
*/
|
|
44
|
+
export interface LocalVmInput {
|
|
45
|
+
readonly desktop: ParticipantDesktopFactory;
|
|
46
|
+
/** The skip reason automatic analysis records instead of running, or undefined to run it. */
|
|
47
|
+
readonly analysisRefusal: () => AutomaticAnalysisRefusal | undefined;
|
|
48
|
+
readonly signal?: AbortSignal;
|
|
49
|
+
}
|
|
152
50
|
export interface RunCuaActorLabOptions {
|
|
153
|
-
|
|
51
|
+
/** Cancels post-run analysis only. */
|
|
52
|
+
analysisSignal?: AbortSignal;
|
|
154
53
|
cwd: string;
|
|
155
54
|
config: LabConfig;
|
|
156
|
-
/** Which manifest produced this run (#455); threaded into the run's status record + bundle. */
|
|
157
|
-
lab?: RunLabProvenance;
|
|
158
55
|
/** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
|
|
159
56
|
dryRun: boolean;
|
|
160
57
|
open?: boolean;
|
|
161
58
|
runId?: string;
|
|
162
|
-
/** CLI `--count` override for the homogeneous fan-out
|
|
163
|
-
* roster is declared
|
|
59
|
+
/** CLI `--count` override for the homogeneous fan-out participant count (ignored when a `lanes`
|
|
60
|
+
* roster is declared; a roster's length is authoritative). */
|
|
164
61
|
countOverride?: number;
|
|
165
|
-
/** Explicitly create a new run containing failed or selected
|
|
62
|
+
/** Explicitly create a new run containing failed or selected participants from a prior fan-out run. */
|
|
166
63
|
rerun?: {
|
|
167
64
|
sourceRunId: string;
|
|
168
|
-
|
|
65
|
+
participantIds?: string[];
|
|
169
66
|
};
|
|
170
|
-
|
|
67
|
+
/** Keys and subject env for the run. Defaults to process.env. */
|
|
68
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
69
|
+
/** E2B only. Runs on each participant's desktop after it exists and before provisioning. */
|
|
70
|
+
prepareDesktop?: NonNullable<RunLabHomes["prepareDesktop"]>;
|
|
71
|
+
/** runLab's local VM study, for an app-url lab on the local target. */
|
|
72
|
+
localVm?: LocalVmInput;
|
|
171
73
|
onObserverReady?: (observer: ObserverResult & {
|
|
172
74
|
ok: true;
|
|
173
75
|
}) => Promise<void> | void;
|
|
174
|
-
/**
|
|
175
|
-
|
|
76
|
+
/** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
|
|
77
|
+
onStream?: NonNullable<RunLabHomes["onStream"]>;
|
|
78
|
+
/** The caller's brain for each participant, in place of the lab's own. */
|
|
79
|
+
createProvider?: ProviderFactory;
|
|
80
|
+
/** Drives an app-url or local-app subject in this process, with no desktop. Needs createProvider. */
|
|
81
|
+
inProcess?: InProcessDriver;
|
|
82
|
+
/** Reports the plan and subject phases to onEvent; built by normalizeRunLabOptions. */
|
|
83
|
+
emit?: (event: LabEvent) => void;
|
|
84
|
+
/** Test seams. */
|
|
85
|
+
deps?: LabDeps;
|
|
86
|
+
/** Scores the assembled evidence: `RunLabOptions.scorer`, or the scorer the CLI loads. */
|
|
87
|
+
scorer?: BrowserScorer;
|
|
88
|
+
/** Present only when the scorer was config-declared and loaded by the CLI;
|
|
89
|
+
* core-stamped onto the bundle as evidence. Absent for library callers. */
|
|
176
90
|
scorerProvenance?: RunScorerProvenance;
|
|
177
91
|
}
|
|
178
|
-
/** A
|
|
179
|
-
* text never leaks
|
|
92
|
+
/** A participant's row in the pre-flight plan: identity + the device/persona it will drive. The prompt
|
|
93
|
+
* text never leaks: only a sha256-16 digest of the composed instructions. */
|
|
180
94
|
export interface CuaParticipantPlanEntry {
|
|
181
95
|
id: string;
|
|
182
96
|
actorType?: string;
|
|
@@ -189,36 +103,36 @@ export interface CuaParticipantPlanEntry {
|
|
|
189
103
|
/** Requested E2B/X screen resolution. This is not the measured browser CSS viewport. */
|
|
190
104
|
resolution: [number, number];
|
|
191
105
|
instructionDigest: string;
|
|
192
|
-
/** The declared reasoning effort for this
|
|
193
|
-
* you read
|
|
106
|
+
/** The declared reasoning effort for this participant, when the lab declared one. The plan line is what
|
|
107
|
+
* you read before spending money, so a declared per-participant difference has to be visible there. */
|
|
194
108
|
reasoningEffort?: string;
|
|
195
109
|
maxOutputTokens?: number;
|
|
196
|
-
/** Present only when a
|
|
110
|
+
/** Present only when a participant overrides subject.appUrl; digest avoids leaking preview hosts in plan logs. */
|
|
197
111
|
targetDigest?: string;
|
|
198
112
|
}
|
|
199
|
-
/** The pre-flight spend
|
|
113
|
+
/** The pre-flight spend and participant plan (pure; printed to stderr + recorded as a bundle event before
|
|
200
114
|
* any sandbox or provider call; identical in dry-run, marked $0). */
|
|
201
115
|
export interface CuaParticipantPlan {
|
|
202
116
|
strategy: typeof CUA_FANOUT_STRATEGY;
|
|
203
117
|
laneCount: number;
|
|
204
|
-
/** Effective in-flight bound (defaults to laneCount
|
|
205
|
-
* execution.concurrency is a cap; the env override may only
|
|
118
|
+
/** Effective in-flight bound (defaults to laneCount, all participants live; a declared
|
|
119
|
+
* execution.concurrency is a cap; the env override may only lower it). */
|
|
206
120
|
concurrency: number;
|
|
207
|
-
/** Present when the env override lowered the bound below the config's value
|
|
121
|
+
/** Present when the env override lowered the bound below the config's value, recorded so the
|
|
208
122
|
* plan never silently disagrees with the manifest. */
|
|
209
123
|
envLoweredConcurrencyFrom?: number;
|
|
210
124
|
/** ceil(laneCount / concurrency). */
|
|
211
125
|
waves: number;
|
|
212
|
-
/** Per-
|
|
126
|
+
/** Per-participant session wall-clock budget (execution.timeoutMs); there is no run-level wall clock. */
|
|
213
127
|
perLaneSessionBudgetMs: number;
|
|
214
|
-
/** Worst-case
|
|
128
|
+
/** Worst-case total sandbox-minutes across all participants (each one's full sandbox deadline). */
|
|
215
129
|
worstCaseSandboxMinutes: number;
|
|
216
130
|
/** True for a dry-run plan (no spend); the same table appears live. */
|
|
217
131
|
dryRun: boolean;
|
|
218
132
|
lanes: CuaParticipantPlanEntry[];
|
|
219
133
|
}
|
|
220
|
-
/** One
|
|
221
|
-
* N=1). A `blocked`
|
|
134
|
+
/** One participant's outcome in the result projection. Always present in `result.lanes` (length
|
|
135
|
+
* 1 at N=1). A `blocked` participant is one the pipeline-gate / fail-fast skipped before it ran. */
|
|
222
136
|
export interface CuaParticipantResult {
|
|
223
137
|
id: string;
|
|
224
138
|
actorType?: string;
|
|
@@ -229,7 +143,7 @@ export interface CuaParticipantResult {
|
|
|
229
143
|
device: string;
|
|
230
144
|
/** Requested E2B/X screen resolution. See the run stream's desktopGeometry for measurements. */
|
|
231
145
|
resolution: [number, number];
|
|
232
|
-
/** Terminal
|
|
146
|
+
/** Terminal participant status; "blocked" = skipped (gate/fail-fast); "contract_proof_only" = dry-run. */
|
|
233
147
|
status: ActorStatus | "blocked" | "contract_proof_only";
|
|
234
148
|
ok: boolean;
|
|
235
149
|
session?: {
|
|
@@ -247,30 +161,30 @@ export interface CuaParticipantResult {
|
|
|
247
161
|
};
|
|
248
162
|
subject: CuaSubjectProjection;
|
|
249
163
|
diagnostics?: CuaDiagnostics;
|
|
250
|
-
/** Set when the
|
|
164
|
+
/** Set when the participant was skipped (pinned reason string). */
|
|
251
165
|
skippedReason?: string;
|
|
252
166
|
error?: {
|
|
253
167
|
code: CuaActorLabErrorCode;
|
|
254
168
|
message: string;
|
|
255
169
|
};
|
|
256
170
|
}
|
|
257
|
-
/** Aggregate counts across
|
|
171
|
+
/** Aggregate counts across participants. */
|
|
258
172
|
export interface CuaParticipantSummary {
|
|
259
173
|
strategy: typeof CUA_FANOUT_STRATEGY;
|
|
260
174
|
total: number;
|
|
261
|
-
/**
|
|
175
|
+
/** Participants whose own verdict is ok (terminal, engaged, no harness error). */
|
|
262
176
|
passed: number;
|
|
263
|
-
/**
|
|
177
|
+
/** Participants skipped by the pipeline gate / fail-fast. */
|
|
264
178
|
skipped: number;
|
|
265
|
-
/**
|
|
179
|
+
/** Participants that ended in a harness error. */
|
|
266
180
|
harnessErrors: number;
|
|
267
|
-
/**
|
|
181
|
+
/** Participants that returned goal_satisfied with zero engagement (hollow). */
|
|
268
182
|
hollow: number;
|
|
269
183
|
concurrency: number;
|
|
270
184
|
waves: number;
|
|
271
185
|
}
|
|
272
|
-
export type CuaActorLabErrorCode = "
|
|
273
|
-
/** Subject provenance projection
|
|
186
|
+
export type CuaActorLabErrorCode = "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_COMPUTER_USE_FAILED" | "HUMANISH_COMPUTER_USE_KEYS_MISSING" | "HUMANISH_COMPUTER_USE_AGENT_MISSING" | "HUMANISH_COMPUTER_USE_AGENT_SIGNIN_REQUIRED" | "HUMANISH_COMPUTER_USE_SUBJECT_ENV_MISSING" | "HUMANISH_COMPUTER_USE_ACTOR_UNSUPPORTED" | "HUMANISH_COMPUTER_USE_SUBJECT_INVALID" | "HUMANISH_COMPUTER_USE_SUBJECT_UNSAFE" | "HUMANISH_COMPUTER_USE_EXECUTOR_NO_PROVIDER" | "HUMANISH_COMPUTER_USE_LOCAL_APP_NO_EXECUTOR" | "HUMANISH_COMPUTER_USE_LOCAL_DESKTOP_MISSING" | "HUMANISH_COMPUTER_USE_FANOUT_INVALID" | "HUMANISH_COMPUTER_USE_RERUN_INVALID" | "HUMANISH_COMPUTER_USE_DEVICE_GEOMETRY" | "HUMANISH_RUN_ID_IN_USE" | "HUMANISH_COMPUTER_USE_UNPRICED_CAP" | "HUMANISH_COMPUTER_USE_COMMS_CATCH_UNREACHABLE" | "HUMANISH_COMPUTER_USE_COMMS_TOKEN_INVALID" | "HUMANISH_WATCH_ALLOW_REQUIRES_OAUTH" | "HUMANISH_WATCH_OAUTH_REQUIRES_TUNNEL" | "HUMANISH_WATCH_OPTION_CONFLICT" | "HUMANISH_WATCH_TUNNEL_REQUIRES_EXPOSE" | "HUMANISH_WATCH_EXPOSE_REQUIRES_EDGE_AUTH" | "HUMANISH_WATCH_EXPOSE_REQUIRES_LIVE_FOLLOW" | "HUMANISH_WATCH_SAFE_NOT_APPLICABLE" | "HUMANISH_SERVE_TUNNEL_NOT_FOUND" | "HUMANISH_SERVE_TUNNEL_START_FAILED";
|
|
187
|
+
/** Subject provenance projection: what the actor actually drove. */
|
|
274
188
|
export interface CuaSubjectProjection {
|
|
275
189
|
source: "app-url" | "clone" | "local-tree";
|
|
276
190
|
/** Clone-route only: the (possibly redacted) owner/repo slug. */
|
|
@@ -284,9 +198,9 @@ export interface CuaSubjectProjection {
|
|
|
284
198
|
/** Local-tree-route only: host-side porcelain status at pack time (true when the working
|
|
285
199
|
* tree had uncommitted changes). Absent when the packed root was not a git work tree. */
|
|
286
200
|
dirty?: boolean;
|
|
287
|
-
/** Declared env
|
|
201
|
+
/** Declared env names provisioned for the subject (values never surface anywhere). */
|
|
288
202
|
envNames?: string[];
|
|
289
|
-
/** The subject's state story (seeded digests /
|
|
203
|
+
/** The subject's state story (seeded digests / unpinned external / declared-not-run /
|
|
290
204
|
* undeclared): the same block the run bundle records. */
|
|
291
205
|
state: RunSubjectProvenance["state"];
|
|
292
206
|
}
|
|
@@ -307,13 +221,11 @@ export type CuaSubjectProvenanceArg = {
|
|
|
307
221
|
envNames: string[];
|
|
308
222
|
state: RunSubjectProvenance["state"];
|
|
309
223
|
};
|
|
310
|
-
export interface CuaActorLabResult extends AutomaticAnalysisResult {
|
|
311
|
-
|
|
312
|
-
/** True when the Observer verified the bundle, all live lanes passed credibility checks
|
|
224
|
+
export interface CuaActorLabResult extends AutomaticAnalysisResult, StudyResultIdentity<"computer-use"> {
|
|
225
|
+
/** True when the Observer verified the bundle, all live participants passed credibility checks
|
|
313
226
|
* (or this is a dry-run), and no declared adapter/scorer verdict failed. */
|
|
314
227
|
ok: boolean;
|
|
315
228
|
cwd: string;
|
|
316
|
-
labId: string;
|
|
317
229
|
/** The registry-resolved actor id that ran (or would run) the session. */
|
|
318
230
|
actor: string;
|
|
319
231
|
appUrl: string;
|
|
@@ -330,20 +242,20 @@ export interface CuaActorLabResult extends AutomaticAnalysisResult {
|
|
|
330
242
|
sandbox?: {
|
|
331
243
|
sandboxId: string;
|
|
332
244
|
killed: boolean;
|
|
333
|
-
/** The stream URL itself (carries an auth key) is runtime-only and is deliberately
|
|
334
|
-
* surfaced on the result
|
|
245
|
+
/** The stream URL itself (carries an auth key) is runtime-only and is deliberately not
|
|
246
|
+
* surfaced on the result; the sandbox is already dead by the time the result exists. */
|
|
335
247
|
streamUrlPresent: boolean;
|
|
336
248
|
};
|
|
337
|
-
/** Subject provenance
|
|
338
|
-
* unanimity-gated aggregate (top-level `commit` only when every
|
|
249
|
+
/** Subject provenance: what the actor actually drove. At N>1 this is the
|
|
250
|
+
* unanimity-gated aggregate (top-level `commit` only when every participant resolved the same one). */
|
|
339
251
|
subject?: CuaSubjectProjection;
|
|
340
|
-
/** The pre-flight
|
|
252
|
+
/** The pre-flight participant plan (present once participants resolve; absent on early validation errors). */
|
|
341
253
|
plan?: CuaParticipantPlan;
|
|
342
|
-
/** Per-
|
|
254
|
+
/** Per-participant results, always present once participants resolve (length 1 at N=1). */
|
|
343
255
|
lanes?: CuaParticipantResult[];
|
|
344
|
-
/** Aggregate
|
|
256
|
+
/** Aggregate participant counts. */
|
|
345
257
|
laneSummary?: CuaParticipantSummary;
|
|
346
|
-
/** Present when this run explicitly re-executes selected
|
|
258
|
+
/** Present when this run explicitly re-executes selected participants from a prior CUA fan-out run. */
|
|
347
259
|
rerun?: RunRerunLineage;
|
|
348
260
|
observer?: ObserverResult;
|
|
349
261
|
diagnostics?: CuaDiagnostics;
|
|
@@ -354,7 +266,7 @@ export interface CuaActorLabResult extends AutomaticAnalysisResult {
|
|
|
354
266
|
};
|
|
355
267
|
}
|
|
356
268
|
/**
|
|
357
|
-
* What a computer-use
|
|
269
|
+
* What a computer-use or shared-world participant runs: the resolved participant, plus where its
|
|
358
270
|
* evidence goes and any backstop override its route sets. The public projections are
|
|
359
271
|
* CuaParticipantPlanEntry and CuaParticipantResult.
|
|
360
272
|
*/
|
|
@@ -379,95 +291,139 @@ export interface ParticipantRunsAndPlan {
|
|
|
379
291
|
participantPlan: CuaParticipantPlan;
|
|
380
292
|
}
|
|
381
293
|
/**
|
|
382
|
-
* The
|
|
383
|
-
* latest running
|
|
384
|
-
* back the run total; the loop stops the
|
|
294
|
+
* The study's shared spend ledger: one counter across every participant. Each one notes its
|
|
295
|
+
* own latest running model-spend estimate (monotone per participant: an estimate can only grow)
|
|
296
|
+
* and reads back the run total; the loop stops the participant the moment the total crosses the study budget.
|
|
385
297
|
* Estimated model spend only: desktop-minutes ride the cost summary, not this ledger.
|
|
386
298
|
*/
|
|
387
299
|
export interface CuaRunBudget {
|
|
388
300
|
maxTotalUsd: number;
|
|
389
|
-
/** Record this
|
|
390
|
-
* run's current total across all
|
|
301
|
+
/** Record this participant's latest running estimate (null = unpriceable, ignored) and return
|
|
302
|
+
* the run's current total across all participants. */
|
|
391
303
|
note(participantId: string, estimateUsd: number | null): number;
|
|
392
304
|
}
|
|
393
|
-
/**
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
305
|
+
/**
|
|
306
|
+
* The subject as a participant's desktop meets it. A computer-use participant gets the plan's
|
|
307
|
+
* subject: a clone or local tree is provisioned in its own sandbox with the declared env, a
|
|
308
|
+
* desktop-cli product is set up there, and an app-url or local-app subject is only opened. A
|
|
309
|
+
* shared-world participant gets `shared-app`: it opens the one app the plane serves, with no
|
|
310
|
+
* subject env names forwarded, no GitHub token and no provisioning in its sandbox.
|
|
311
|
+
*/
|
|
312
|
+
export type ParticipantSubject = ComputerUseRunner["subject"] | {
|
|
313
|
+
readonly kind: "shared-app";
|
|
314
|
+
/** The shared app's in-sandbox serve URL, which the receiving inbox maps links back to. */
|
|
315
|
+
readonly serveUrl?: string;
|
|
316
|
+
};
|
|
317
|
+
/** The subject env names forwarded into a participant's sandbox: a provisioned subject's only. */
|
|
318
|
+
export declare function participantSubjectEnv(subject: ParticipantSubject): readonly string[];
|
|
319
|
+
/** The serve URL a participant's inbox maps links back to: the served app's, when there is one. */
|
|
320
|
+
export declare function participantServeUrl(subject: ParticipantSubject): string | undefined;
|
|
321
|
+
/** What the E2B desktop (e2b-desktop/*) reads from a participant's deps. */
|
|
322
|
+
export interface E2BDesktopDeps {
|
|
323
|
+
/** The plan's residual config: comms, policies, the desktop and target, and subject leftovers. */
|
|
324
|
+
residual: Readonly<ResidualConfig>;
|
|
325
|
+
labId: string;
|
|
399
326
|
appUrl: string;
|
|
400
|
-
/**
|
|
401
|
-
|
|
402
|
-
cloneRoute: boolean;
|
|
403
|
-
/** desktop-cli (#495): a CLI studied at a desktop. Nothing is cloned and no browser is opened. */
|
|
404
|
-
desktopCliRoute?: boolean;
|
|
405
|
-
/** Optional so out-of-scope callers building CuaParticipantDeps directly (other engines reusing
|
|
406
|
-
* runCuaParticipant) do not need to know about the local-tree route; undefined behaves as false. */
|
|
407
|
-
localTreeRoute?: boolean;
|
|
408
|
-
serve?: LabSubjectServe;
|
|
409
|
-
subjectRepo?: string;
|
|
410
|
-
subjectEnvNames: string[];
|
|
411
|
-
hasGithubToken: boolean;
|
|
327
|
+
/** What the participant's desktop does with the subject before the participant starts. */
|
|
328
|
+
subject: ParticipantSubject;
|
|
412
329
|
/** Local-tree route only: the once-per-run packed archive bytes, shared byte-identically
|
|
413
|
-
* across every fan-out
|
|
330
|
+
* across every fan-out participant's upload step. Absent on dry-run and every other route. */
|
|
414
331
|
localTreeArchiveBuffer?: ArrayBuffer;
|
|
415
332
|
env: Record<string, string | undefined>;
|
|
416
|
-
openaiApiKey: string;
|
|
417
333
|
e2bApiKey: string;
|
|
418
334
|
requestTimeoutMs: number;
|
|
419
335
|
sandboxMs: number;
|
|
420
|
-
timeoutMs: number;
|
|
421
336
|
participantCount: number;
|
|
422
337
|
artifactRoot: PreparedOutputRoot;
|
|
423
338
|
/** The lab's resolution directory: relative paths in the config (a camera .y4m) resolve here. */
|
|
424
339
|
labCwd: string;
|
|
425
|
-
redactScreenshots: boolean;
|
|
426
340
|
scrubKnownValues: (text: string) => string;
|
|
427
341
|
receiving?: CommsReceivingRun;
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
*
|
|
431
|
-
runBudget?: CuaRunBudget;
|
|
432
|
-
/** Adopter-hosted comms plane (#380): present on the app-url route when comms.email.external is
|
|
433
|
-
* declared. Carries the parsed comms block (recipients drive the per-lane inbox instruction)
|
|
434
|
-
* and the inbox URL the persona opens. The drain runs once at run level, not per lane. */
|
|
342
|
+
/** Adopter-hosted comms plane: present on the app-url route when comms.email.external is
|
|
343
|
+
* declared. Carries the parsed comms block (recipients drive the per-participant inbox instruction)
|
|
344
|
+
* and the inbox URL the persona opens. The drain runs once at run level, not per participant. */
|
|
435
345
|
externalComms?: {
|
|
436
346
|
email: LabCommsEmail;
|
|
437
347
|
inboxUrl: string;
|
|
438
348
|
};
|
|
439
|
-
/** Injected clock (ms).
|
|
349
|
+
/** Injected clock (ms). It measures the host-side E2B desktop create->teardown span so the
|
|
440
350
|
* desktop-minute cost estimate is deterministic in tests. Defaults to Date.now. */
|
|
441
351
|
now: () => number;
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
352
|
+
/** Loads the E2B SDK for the participant's desktop. Defaults to loadE2BDesktopModule. */
|
|
353
|
+
desktopModule?: () => Promise<E2BDesktopModule>;
|
|
354
|
+
/** The caller's prepareDesktop, called with the participant as its target. */
|
|
355
|
+
prepareDesktop?: NonNullable<RunLabHomes["prepareDesktop"]>;
|
|
356
|
+
/** Clock and sleep for detached provisioning steps. */
|
|
357
|
+
detachedTimers?: DetachedTimers;
|
|
358
|
+
/** Receives each live stream's ready and ended: the Observer's tracker, then the caller's onStream. */
|
|
359
|
+
onStream: NonNullable<RunLabHomes["onStream"]>;
|
|
360
|
+
/** Reports a subject phase to the phase sink (stderr by default) and to onEvent. */
|
|
361
|
+
reportSubjectPhase: (event: SubjectPhaseEvent, participant: ParticipantRef) => void;
|
|
445
362
|
/**
|
|
446
|
-
* How a
|
|
447
|
-
* the
|
|
448
|
-
* single-
|
|
363
|
+
* How a parseable requested-vs-verified screen mismatch is treated. Default ("fail-closed"):
|
|
364
|
+
* the participant's device claim is falsified, so it fails with DEVICE_GEOMETRY (the
|
|
365
|
+
* single-participant/fan-out contract). "record-evidence" (the concurrent shared-world route):
|
|
449
366
|
* requested and verified stay recorded as separate facts plus an explicit warning, and the
|
|
450
|
-
*
|
|
367
|
+
* participant keeps running, so one participant's screen drift cannot abort a live multi-actor world.
|
|
451
368
|
*/
|
|
452
369
|
screenMismatchPolicy?: "fail-closed" | "record-evidence";
|
|
370
|
+
}
|
|
371
|
+
/** What a participant's model and session (participant-model.ts) read from its deps. */
|
|
372
|
+
export interface ParticipantModelDeps {
|
|
373
|
+
/** The caller's createProvider with the run's config bound. Absent, the plan's brain drives. */
|
|
374
|
+
createProvider?: (participant: ParticipantRef, executor: CuaExecutor) => Promise<CuaProvider>;
|
|
375
|
+
/** The plan's spend caps; maxUsd is each participant's own. */
|
|
376
|
+
caps: ComputerUsePlan["caps"];
|
|
377
|
+
/** The plan's brain: the model and, for a local agent, which signed-in CLI drives the participant. */
|
|
378
|
+
brain: Brain;
|
|
379
|
+
env: Record<string, string | undefined>;
|
|
380
|
+
openaiApiKey: string;
|
|
381
|
+
timeoutMs: number;
|
|
382
|
+
participantCount: number;
|
|
383
|
+
artifactRoot: PreparedOutputRoot;
|
|
384
|
+
redactScreenshots: boolean;
|
|
385
|
+
scrubKnownValues: (text: string) => string;
|
|
386
|
+
/** The study's shared spend ledger, present exactly when execution.caps.maxTotalUsd is set on a
|
|
387
|
+
* live run. Preflight already refused the cap on an unpriced model. */
|
|
388
|
+
runBudget?: CuaRunBudget;
|
|
453
389
|
/**
|
|
454
|
-
*
|
|
455
|
-
* orchestrator watches this
|
|
456
|
-
* CuaLoopOptions.onObservedUrl). The concurrent shared-world barrier passes a host
|
|
390
|
+
* runtime-only observed-URL callback (the shared-world handoff): threaded into the participant's session so the
|
|
391
|
+
* orchestrator watches this participant's live location.href mid-run. Never persisted (see
|
|
392
|
+
* CuaLoopOptions.onObservedUrl). The concurrent shared-world barrier passes a host latch here
|
|
457
393
|
* to extract a /lobby/CODE; on ordinary routes it is undefined (no-op).
|
|
458
394
|
*/
|
|
459
395
|
onObservedUrl?: (url: string | undefined) => void;
|
|
460
|
-
/**
|
|
461
|
-
* shared-world barrier passes a host
|
|
396
|
+
/** runtime-only per-turn narration callback; see CuaLoopOptions.onMessage. The concurrent
|
|
397
|
+
* shared-world barrier passes a host message scanner here to latch the lobby code. */
|
|
462
398
|
onMessage?: (text: string) => void;
|
|
463
|
-
/**
|
|
464
|
-
* shared-world barrier passes a host
|
|
399
|
+
/** runtime-only per-turn raw-frame callback; see CuaLoopOptions.onScreenshot. The concurrent
|
|
400
|
+
* shared-world barrier passes a host vision reader here to latch the lobby code off-screen. */
|
|
465
401
|
onScreenshot?: (frame: Buffer) => void;
|
|
466
|
-
/** Per-turn trace snapshot from a participant's loop
|
|
402
|
+
/** Per-turn trace snapshot from a participant's loop, keyed by participant. The live path
|
|
467
403
|
* wires the incremental in-progress flush here so the attached Observer's timeline grows mid-run. */
|
|
468
404
|
onTrace?: (participantId: string, items: readonly ActorTraceItem[], usage?: ActorTokenUsage, metadata?: CuaLiveMetadata) => void;
|
|
469
405
|
}
|
|
470
|
-
/**
|
|
406
|
+
/**
|
|
407
|
+
* One participant's deps: the E2B desktop's and the model's, and what runCuaParticipant reads to
|
|
408
|
+
* choose the desktop and run the session. setup.ts and shared-world participant-specs.ts build it.
|
|
409
|
+
*/
|
|
410
|
+
export type CuaParticipantDeps = E2BDesktopDeps & ParticipantModelDeps & {
|
|
411
|
+
/** Internal ready-desktop seam. The factory must not allocate; prepare owns that work. */
|
|
412
|
+
createDesktop?: (spec: DesktopParticipantRun, warnings: string[], artifactRoot: PreparedOutputRoot) => ParticipantDesktop;
|
|
413
|
+
/** The caller's inProcess executor with the run's config bound. Read by the in-process desktop. */
|
|
414
|
+
inProcessExecutor?: (appUrl: string) => Promise<CuaExecutor>;
|
|
415
|
+
runSession: (options: CuaActorSessionOptions) => Promise<CuaLoopResult>;
|
|
416
|
+
/** Lane-0 only: signal the pipeline gate after provisioning succeeds (true) or fails (false). */
|
|
417
|
+
signalProvisioned?: (ok: boolean) => void;
|
|
418
|
+
};
|
|
419
|
+
/** Why a sandbox was not confirmed released. */
|
|
420
|
+
export interface SandboxReleaseFact {
|
|
421
|
+
state: "retained" | "unconfirmed";
|
|
422
|
+
warning: string;
|
|
423
|
+
/** How to release it by hand, when `humanish reclaim` cannot: a local VM has no receipt. */
|
|
424
|
+
recovery?: string;
|
|
425
|
+
}
|
|
426
|
+
/** One participant's end-to-end run outcome (internal; projected into CuaParticipantResult + the bundle). */
|
|
471
427
|
export interface ParticipantRunOutcome {
|
|
472
428
|
spec: DesktopParticipantRun;
|
|
473
429
|
session?: CuaLoopResult;
|
|
@@ -476,13 +432,19 @@ export interface ParticipantRunOutcome {
|
|
|
476
432
|
/** The model provider's cleanup is unconfirmed after the session. An execution failure only:
|
|
477
433
|
* it does not change how the participant's session ended. */
|
|
478
434
|
providerCleanupError?: string;
|
|
435
|
+
/** The model provider reported a disallowed operation after the session's last request, which
|
|
436
|
+
* the session's evidence does not show. An execution failure, scrubbed, like the cleanup one. */
|
|
437
|
+
providerPolicyError?: string;
|
|
479
438
|
sandboxId?: string;
|
|
480
|
-
/** Host-side E2B desktop create->teardown span (ms). An
|
|
481
|
-
* billed lifetime (server-side kill-on-timeout can extend it)
|
|
439
|
+
/** Host-side E2B desktop create->teardown span (ms). An approximation of E2B's server-side
|
|
440
|
+
* billed lifetime (server-side kill-on-timeout can extend it), so the derived dollar figure is
|
|
482
441
|
* doubly an estimate. Absent on the in-process route (no sandbox) and on dry-run. */
|
|
483
442
|
desktopDurationMs?: number;
|
|
484
443
|
desktopResources?: DesktopResourceObservation;
|
|
485
444
|
killed: boolean;
|
|
445
|
+
/** Set when the sandbox was not confirmed released: kept for debugging, or a release the
|
|
446
|
+
* provider did not confirm. `warning` is the scrubbed release warning. */
|
|
447
|
+
sandboxRelease?: SandboxReleaseFact;
|
|
486
448
|
streamUrlPresent: boolean;
|
|
487
449
|
screenshots: string[];
|
|
488
450
|
subjectCommit?: string;
|
|
@@ -495,44 +457,39 @@ export interface ParticipantRunOutcome {
|
|
|
495
457
|
* folded into bundle.events at build time. Empty on the in-process route (no provisioning). */
|
|
496
458
|
phaseRecords: SubjectPhaseEvent[];
|
|
497
459
|
warnings: string[];
|
|
498
|
-
/** Set when the
|
|
460
|
+
/** Set when the participant was skipped by the pipeline gate / fail-fast (a pinned reason). */
|
|
499
461
|
skippedReason?: string;
|
|
500
462
|
noEngagement: boolean;
|
|
501
463
|
selfReportedBlocker: boolean;
|
|
502
|
-
/** The inclusive friction read
|
|
503
|
-
* Feeds the participants tally and feedback candidates; never the
|
|
464
|
+
/** The inclusive friction read: blocker-shaped narration incl. self-resolved arcs.
|
|
465
|
+
* Feeds the participants tally and feedback candidates; never the participant verdict. Optional so
|
|
504
466
|
* external outcome constructors (shared-world, test fakes) stay valid; absent counts as false. */
|
|
505
467
|
reportedFriction?: boolean;
|
|
506
468
|
harnessError: boolean;
|
|
507
469
|
failureCode?: CuaActorLabErrorCode;
|
|
508
|
-
/** Relative run-dir path of the digest-only comms-thread evidence artifact this
|
|
470
|
+
/** Relative run-dir path of the digest-only comms-thread evidence artifact this participant wrote
|
|
509
471
|
* (humanish.comms-thread.v1), when a comms lab captured mail into its in-sandbox catch. Registered
|
|
510
|
-
* in the
|
|
472
|
+
* in the participant's stream artifacts. Absent when no comms lab ran or nothing was captured. */
|
|
511
473
|
commsArtifactPath?: string;
|
|
512
474
|
}
|
|
513
475
|
/** What buildCuaFanoutBundle projects into a fan-out run bundle. */
|
|
514
476
|
export interface CuaFanoutBundleArgs {
|
|
515
477
|
/** The run's verdict, from the judge. */
|
|
516
478
|
verdict: Verdict;
|
|
517
|
-
/**
|
|
518
|
-
|
|
479
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and lab. */
|
|
480
|
+
run: BundleRun;
|
|
519
481
|
specs: DesktopParticipantRun[];
|
|
520
482
|
outcomes?: ParticipantRunOutcome[];
|
|
521
483
|
subjects: CuaSubjectProjection[];
|
|
522
484
|
aggregateSubject: CuaSubjectProjection;
|
|
523
485
|
descriptor: CuaActorDescriptor;
|
|
524
486
|
appUrl: string;
|
|
525
|
-
createdAt: string;
|
|
526
487
|
dryRun: boolean;
|
|
527
488
|
plan: ComputerUsePlan;
|
|
528
|
-
runId: string;
|
|
529
489
|
source: RunBundle["source"];
|
|
530
490
|
participantPlan: CuaParticipantPlan;
|
|
531
491
|
rerun?: RunRerunLineage;
|
|
532
492
|
failFastReason?: string;
|
|
533
|
-
cloneRoute: boolean;
|
|
534
|
-
localTreeRoute?: boolean;
|
|
535
493
|
publicRepo?: string;
|
|
536
|
-
subjectEnvNames: string[];
|
|
537
494
|
inProgress?: boolean;
|
|
538
495
|
}
|