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,5 +1,6 @@
|
|
|
1
1
|
// Builds each participant's actor spec and mission, resolves its entry URL, derives the session
|
|
2
2
|
// and sandbox time budgets, and records a follower that never received the host's lobby code.
|
|
3
|
+
import { defaultSubjectPhaseSink } from "../../subject/steps.js";
|
|
3
4
|
import { pricedModel } from "../../lab/plan-base.js";
|
|
4
5
|
import { scrubPersonaBrief } from "../../lab/persona.js";
|
|
5
6
|
import { resolveParticipant } from "../../run/participant.js";
|
|
@@ -11,13 +12,14 @@ import { participantAssignment } from "../../lab/participant-assignment.js";
|
|
|
11
12
|
import { redactText } from "../../evidence/redaction.js";
|
|
12
13
|
import { MAX_SANDBOX_MS, SANDBOX_TIMEOUT_BUFFER_MS, SUBJECT_PROVISION_BUDGET_MS, } from "../../substrates/e2b/lifetime.js";
|
|
13
14
|
import { DEFAULT_STATE_STEP_TIMEOUT_MS } from "../../subject/state.js";
|
|
14
|
-
// The
|
|
15
|
-
// constraint is the
|
|
16
|
-
// seeding + teardown buffer, and E2B refuses a sandbox over one hour), so the
|
|
17
|
-
// each
|
|
18
|
-
// seed-heavy
|
|
19
|
-
// and default to 30 minutes (
|
|
20
|
-
// explicit execution.timeoutMs is never adjusted. The handoff
|
|
15
|
+
// The default per-participant session budget is derived from the route. On a provisioned route the
|
|
16
|
+
// binding constraint is the subject sandbox (it must outlive every participant: timeoutMs +
|
|
17
|
+
// provisioning + seeding + teardown buffer, and E2B refuses a sandbox over one hour), so the
|
|
18
|
+
// derivation hands each participant the most that cap allows, capped at 15 minutes, floored at the
|
|
19
|
+
// historical 300s so a seed-heavy study never gets less room than it always had. App-url
|
|
20
|
+
// participants have no subject sandbox and default to 30 minutes (participant sandbox: 30m + 10m
|
|
21
|
+
// buffer stays well under the hour). An explicit execution.timeoutMs is never adjusted. The handoff
|
|
22
|
+
// latch scales off this (40%).
|
|
21
23
|
const MAX_DERIVED_SESSION_MS = 15 * 60_000;
|
|
22
24
|
const MIN_DERIVED_SESSION_MS = 300_000;
|
|
23
25
|
const DEFAULT_APP_URL_SESSION_MS = 30 * 60_000;
|
|
@@ -28,9 +30,10 @@ export function defaultSessionTimeoutMs(plan) {
|
|
|
28
30
|
const room = MAX_SANDBOX_MS - SUBJECT_PROVISION_BUDGET_MS - stateBudgetMs - SANDBOX_TIMEOUT_BUFFER_MS;
|
|
29
31
|
return Math.max(MIN_DERIVED_SESSION_MS, Math.min(MAX_DERIVED_SESSION_MS, room));
|
|
30
32
|
}
|
|
33
|
+
// prose-check: model prompt (the participant model reads this, not a person)
|
|
31
34
|
const DEFAULT_MISSION = "You are one of MANY users hitting a shared web application at the same time. The browser is already open at the app. Accomplish your role's task, then stop.";
|
|
32
|
-
/** Resolve an actor's
|
|
33
|
-
* relative path, validated at parse against serve.url). */
|
|
35
|
+
/** Resolve an actor's participant URL against the harness-minted getHost base (entry is a
|
|
36
|
+
* same-origin relative path, validated at parse against serve.url). */
|
|
34
37
|
export function resolveActorEntryUrl(baseUrl, entry) {
|
|
35
38
|
if (!entry)
|
|
36
39
|
return baseUrl;
|
|
@@ -74,11 +77,12 @@ function buildActorSpec(participant, personas) {
|
|
|
74
77
|
traceArtifactPath: `actors/${run.streamId}.json`,
|
|
75
78
|
};
|
|
76
79
|
}
|
|
77
|
-
/** Thread the host-yielded lobby
|
|
78
|
-
* The
|
|
79
|
-
* the model reads (never a raw bundle field), and the lab scrubs the
|
|
80
|
+
/** Thread the host-yielded lobby code into a follower's mission at runtime (external-public route).
|
|
81
|
+
* The code flows into the follower's join instruction; it is persisted only as the composed prompt
|
|
82
|
+
* the model reads (never a raw bundle field), and the lab scrubs the code from all narration. The
|
|
80
83
|
* follower joins through the real UI (a direct /lobby/CODE visit does not auto-join a non-member). */
|
|
81
84
|
export function withLobbyCodeMission(spec, code) {
|
|
85
|
+
// prose-check: model prompt (the participant model reads this, not a person)
|
|
82
86
|
return {
|
|
83
87
|
...spec,
|
|
84
88
|
instructions: `${spec.instructions}\n\nThe multiplayer lobby code is ${code}. On the home screen choose Join, enter this lobby code, enter your name, and submit to join the shared game (do not open a lobby URL directly — go through the Join flow).`,
|
|
@@ -89,7 +93,7 @@ export function withLobbyCodeMission(spec, code) {
|
|
|
89
93
|
export function makeBlockedFollowerOutcome(spec, reason, timedOut) {
|
|
90
94
|
return {
|
|
91
95
|
spec,
|
|
92
|
-
sessionError: `handoff barrier: ${reason}; this follower
|
|
96
|
+
sessionError: `handoff barrier: ${reason}; this follower stopped before opening the app, so no turns were spent.`,
|
|
93
97
|
killed: false,
|
|
94
98
|
streamUrlPresent: false,
|
|
95
99
|
screenshots: [],
|
|
@@ -103,9 +107,10 @@ export function makeBlockedFollowerOutcome(spec, reason, timedOut) {
|
|
|
103
107
|
};
|
|
104
108
|
}
|
|
105
109
|
/**
|
|
106
|
-
* A live run publishes an in-progress bundle before its
|
|
107
|
-
* is attached, and the
|
|
108
|
-
* run killed mid-way leaves that evidence on disk. The flush starts with the
|
|
110
|
+
* A live run publishes an in-progress bundle before its participants start, whether or not an
|
|
111
|
+
* Observer is attached, and the participants' live traces rewrite it as they go, as on the
|
|
112
|
+
* computer-use route. A run killed mid-way leaves that evidence on disk. The flush starts with the
|
|
113
|
+
* first snapshot.
|
|
109
114
|
*/
|
|
110
115
|
export function startParticipantFlush(ctx, live, bundle) {
|
|
111
116
|
live.flush = startLiveTraceFlush({
|
|
@@ -116,53 +121,41 @@ export function startParticipantFlush(ctx, live, bundle) {
|
|
|
116
121
|
});
|
|
117
122
|
}
|
|
118
123
|
/**
|
|
119
|
-
* The
|
|
120
|
-
*
|
|
124
|
+
* The runtime stream URLs each participant reports to the live Observer. The Observer learns of a
|
|
125
|
+
* stream before the caller's onStream runs.
|
|
121
126
|
*/
|
|
122
|
-
function
|
|
123
|
-
return {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
: {}),
|
|
132
|
-
onRuntimeStreamReady: (stream) => {
|
|
133
|
-
live.streamUrls.push({ streamId: stream.streamId, url: stream.url });
|
|
134
|
-
if (live.observer) {
|
|
135
|
-
attachObserverRuntimeStreamUrls(live.observer, live.streamUrls);
|
|
136
|
-
}
|
|
137
|
-
return hooks.onRuntimeStreamReady?.(stream);
|
|
138
|
-
},
|
|
139
|
-
onRuntimeStreamEnded: (stream) => {
|
|
140
|
-
// Mark, never remove (#357): the tile falls back to recorded evidence and says why.
|
|
141
|
-
for (const entry of live.streamUrls) {
|
|
142
|
-
if (entry.streamId === stream.streamId)
|
|
127
|
+
function participantStreams(onStream, live) {
|
|
128
|
+
return (event) => {
|
|
129
|
+
if (event.type === "ready")
|
|
130
|
+
live.streamUrls.push({ streamId: event.streamId, url: event.url });
|
|
131
|
+
// Mark, never remove: the tile falls back to recorded evidence and says why.
|
|
132
|
+
else
|
|
133
|
+
for (const entry of live.streamUrls)
|
|
134
|
+
if (entry.streamId === event.streamId)
|
|
143
135
|
entry.ended = true;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
return hooks.onRuntimeStreamEnded?.(stream);
|
|
149
|
-
},
|
|
136
|
+
if (live.observer)
|
|
137
|
+
attachObserverRuntimeStreamUrls(live.observer, live.streamUrls);
|
|
138
|
+
return onStream?.(event);
|
|
150
139
|
};
|
|
151
140
|
}
|
|
152
141
|
/**
|
|
153
|
-
* The runner deps both planes give every participant.
|
|
154
|
-
*
|
|
155
|
-
*
|
|
142
|
+
* The runner deps both planes give every participant. The `shared-app` subject keeps three things
|
|
143
|
+
* out of every actor sandbox: the subject env names' values, the GitHub token, and clone
|
|
144
|
+
* or local-tree provisioning. The committed subject.envValues still reach it, non-secret by parse.
|
|
145
|
+
* `scrubKnownValues` is the plane's scrub: the external-public plane also scrubs the latched lobby
|
|
146
|
+
* code.
|
|
156
147
|
*/
|
|
157
148
|
export function participantRunDeps(ctx, live, scrubKnownValues) {
|
|
158
|
-
const { config,
|
|
149
|
+
const { config, env, receiving, runBudget } = ctx;
|
|
159
150
|
return {
|
|
160
151
|
onTrace: (participantId, items, usage, metadata) => live.flush?.flush(participantId, items, usage, metadata),
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
152
|
+
residual: ctx.plan.residual,
|
|
153
|
+
labId: ctx.plan.labId,
|
|
154
|
+
caps: ctx.plan.caps,
|
|
155
|
+
subject: {
|
|
156
|
+
kind: "shared-app",
|
|
157
|
+
...(config.subject.serve?.url === undefined ? {} : { serveUrl: config.subject.serve.url }),
|
|
158
|
+
},
|
|
166
159
|
env,
|
|
167
160
|
openaiApiKey: ctx.openaiApiKey,
|
|
168
161
|
e2bApiKey: ctx.e2bApiKey,
|
|
@@ -175,27 +168,36 @@ export function participantRunDeps(ctx, live, scrubKnownValues) {
|
|
|
175
168
|
redactScreenshots: ctx.redactScreenshots,
|
|
176
169
|
scrubKnownValues,
|
|
177
170
|
runSession: ctx.runSession,
|
|
178
|
-
// A local-agent brain runs each
|
|
171
|
+
// A local-agent brain runs each participant on the operator's signed-in agent, as on computer
|
|
172
|
+
// use.
|
|
179
173
|
brain: ctx.plan.brain,
|
|
180
174
|
...(receiving ? { receiving } : {}),
|
|
181
175
|
now: ctx.now,
|
|
182
|
-
|
|
176
|
+
// The participant's desktop seams, and the caller's prepareDesktop with the participant as its
|
|
177
|
+
// target.
|
|
178
|
+
...(ctx.deps.desktopModule === undefined ? {} : { desktopModule: ctx.deps.desktopModule }),
|
|
179
|
+
...(ctx.deps.detachedTimers === undefined ? {} : { detachedTimers: ctx.deps.detachedTimers }),
|
|
180
|
+
...(ctx.input.prepareDesktop === undefined ? {} : { prepareDesktop: ctx.input.prepareDesktop }),
|
|
181
|
+
onStream: participantStreams(ctx.input.onStream, live),
|
|
182
|
+
// A participant visits the shared app and provisions no subject, so it reports no phase of its
|
|
183
|
+
// own.
|
|
184
|
+
reportSubjectPhase: defaultSubjectPhaseSink,
|
|
183
185
|
...(runBudget === undefined ? {} : { runBudget }),
|
|
184
|
-
// Concurrent
|
|
185
|
-
// mismatch is recorded as separate facts + a warning instead of failing the
|
|
186
|
-
// device claim closed, so one
|
|
187
|
-
// live multi-actor world (the single-
|
|
186
|
+
// Concurrent participants are independent evidence: a requested-vs-verified screen
|
|
187
|
+
// mismatch is recorded as separate facts + a warning instead of failing the participant's
|
|
188
|
+
// device claim closed, so one participant's window-manager drift cannot abort the whole
|
|
189
|
+
// live multi-actor world (the single-participant/fan-out routes keep fail-closed).
|
|
188
190
|
screenMismatchPolicy: "record-evidence",
|
|
189
191
|
};
|
|
190
192
|
}
|
|
191
193
|
/**
|
|
192
194
|
* Each participant's actor spec, with committed personas compiled in so each prompt carries real
|
|
193
|
-
* behavioral directives
|
|
195
|
+
* behavioral directives. Evidence copies of the assignment, instructions and persona are
|
|
194
196
|
* scrubbed of the run's known secret values.
|
|
195
197
|
*/
|
|
196
198
|
export async function buildParticipantSpecs(participants, cwd, scrubKnownValues) {
|
|
197
|
-
// Only the personas the participants use: an actors[0].persona that every
|
|
198
|
-
// never applied, so it is not read.
|
|
199
|
+
// Only the personas the participants use: an actors[0].persona that every participant overrides
|
|
200
|
+
// is never applied, so it is not read.
|
|
199
201
|
const personaResolution = await resolveCommittedPersonasForCwd(cwd, participants.map((participant) => participant.personaId));
|
|
200
202
|
const actorSpecs = participants.map((participant) => buildActorSpec(participant, personaResolution.personas));
|
|
201
203
|
for (const spec of actorSpecs) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type CuaActorDescriptor } from "../../actors/registry.js";
|
|
2
2
|
import type { RoutePlanResult, RouteRefusal, SharedWorldPlan } from "../../lab/plan-types.js";
|
|
3
3
|
import type { LabConfig, LabSubjectState } from "../../lab/types.js";
|
|
4
|
-
import type { RunLabProvenance } from "../../run/status.js";
|
|
5
4
|
import type { ConcurrentSharedWorldLabErrorCode } from "./types.js";
|
|
6
5
|
/** The error a shared-world lab returns before a run starts. */
|
|
7
6
|
export interface SharedWorldRefusal extends RouteRefusal<"shared-world", ConcurrentSharedWorldLabErrorCode> {
|
|
@@ -17,11 +16,8 @@ export declare function sharedWorldDescriptorOf(actorType: string): CuaActorDesc
|
|
|
17
16
|
*/
|
|
18
17
|
export declare function planSharedWorldLab(config: LabConfig, input: {
|
|
19
18
|
readonly dryRun: boolean;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
readonly hooks?: {
|
|
23
|
-
readonly runSession?: unknown;
|
|
24
|
-
};
|
|
19
|
+
/** Whether deps.runSession is set: a caller's session runner cannot enforce maxOutputTokens. */
|
|
20
|
+
readonly hasRunSession?: boolean;
|
|
25
21
|
}): SharedWorldPlanResult;
|
|
26
22
|
/** The provisioned plane's declared subject state. The external-public plane declares none. */
|
|
27
23
|
export declare function planeStateOf(plan: SharedWorldPlan): LabSubjectState | undefined;
|
|
@@ -10,7 +10,7 @@ import { sharedWorldParticipants } from "../../lab/plan-participants.js";
|
|
|
10
10
|
import { PUBLIC_TARGET_OWNER_PATTERN } from "../../lab/parse/subject.js";
|
|
11
11
|
import { REPO_SLUG_PATTERN } from "../../lab/parse/values.js";
|
|
12
12
|
import { concurrentSharedWorldValidationReason, desktopMediaValidationReason, externalPublicSharedWorldValidationReason, outputTokenLimitValidationReason, receivingEmailValidationReason, scenarioCapsValidationReason, taskProtocolValidationReason, } from "../../lab/validation.js";
|
|
13
|
-
import { MODEL_RATES } from "../../run/pricing.js";
|
|
13
|
+
import { MODEL_RATES, unpricedCapMessage } from "../../run/pricing.js";
|
|
14
14
|
/** The registered descriptor for a planned actor; planSharedWorldLab checked the registry. */
|
|
15
15
|
export function sharedWorldDescriptorOf(actorType) {
|
|
16
16
|
const descriptor = actorRegistry[actorType];
|
|
@@ -27,20 +27,20 @@ export function planSharedWorldLab(config, input) {
|
|
|
27
27
|
ok: false,
|
|
28
28
|
refusal: { route: "shared-world", code, message, ...(actor === undefined ? {} : { actor }) },
|
|
29
29
|
});
|
|
30
|
-
const invalid = "
|
|
30
|
+
const invalid = "HUMANISH_SHARED_WORLD_INVALID";
|
|
31
31
|
const mediaReason = desktopMediaValidationReason(config, false);
|
|
32
32
|
if (mediaReason)
|
|
33
33
|
return refuse(invalid, mediaReason);
|
|
34
34
|
const analysis = resolveAutomaticAnalysis(config.review?.analysis);
|
|
35
35
|
if (!analysis.ok)
|
|
36
|
-
return refuse("
|
|
36
|
+
return refuse("HUMANISH_STUDY_ANALYSIS_INVALID", analysis.message);
|
|
37
37
|
const tasksReason = taskProtocolValidationReason(config, false);
|
|
38
38
|
if (tasksReason)
|
|
39
|
-
return refuse("
|
|
39
|
+
return refuse("HUMANISH_STUDY_TASKS_UNSUPPORTED", tasksReason);
|
|
40
40
|
const actorType = config.actors[0]?.type ?? "";
|
|
41
41
|
const descriptor = actorRegistry[actorType];
|
|
42
42
|
if (!descriptor || !isCuaActorDescriptor(descriptor))
|
|
43
|
-
return refuse("
|
|
43
|
+
return refuse("HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED", `actors[0].type "${actorType}" is not a registered computer-use actor.`);
|
|
44
44
|
const actor = descriptor.id;
|
|
45
45
|
// An app-url subject is the external-public plane (a real operator-owned deployment used
|
|
46
46
|
// directly, with no getHost, clone, subject sandbox or seed); every other subject is the
|
|
@@ -55,13 +55,13 @@ export function planSharedWorldLab(config, input) {
|
|
|
55
55
|
: concurrentSharedWorldValidationReason(config));
|
|
56
56
|
if (invalidReason)
|
|
57
57
|
return refuse(invalid, invalidReason, actor);
|
|
58
|
-
if (config.actors[0]?.maxOutputTokens !== undefined && input.
|
|
58
|
+
if (config.actors[0]?.maxOutputTokens !== undefined && input.hasRunSession === true)
|
|
59
59
|
return refuse(invalid, "maxOutputTokens cannot be enforced by a custom runSession.", actor);
|
|
60
60
|
const caps = config.execution?.caps;
|
|
61
61
|
if (!input.dryRun && (caps?.maxUsd !== undefined || caps?.maxTotalUsd !== undefined)) {
|
|
62
62
|
const model = (config.actors[0]?.model ?? DEFAULT_OPENAI_CU_MODEL).trim().toLowerCase();
|
|
63
63
|
if (!MODEL_RATES[model])
|
|
64
|
-
return refuse("
|
|
64
|
+
return refuse("HUMANISH_SHARED_WORLD_UNPRICED_CAP", unpricedCapMessage(model), actor);
|
|
65
65
|
}
|
|
66
66
|
const receivingReason = receivingEmailValidationReason(config);
|
|
67
67
|
if (receivingReason)
|
|
@@ -88,7 +88,6 @@ export function planSharedWorldLab(config, input) {
|
|
|
88
88
|
throw new Error("a shared-world participant has no caller brain");
|
|
89
89
|
const base = planBase(config, {
|
|
90
90
|
dryRun: input.dryRun,
|
|
91
|
-
...(input.lab === undefined ? {} : { lab: input.lab }),
|
|
92
91
|
analysis,
|
|
93
92
|
});
|
|
94
93
|
return {
|
|
@@ -114,7 +113,7 @@ export function planSharedWorldLab(config, input) {
|
|
|
114
113
|
externalCatch: plane.kind === "external-public",
|
|
115
114
|
}),
|
|
116
115
|
// The external-public plane reads the host's lobby code with the OpenAI API, whatever
|
|
117
|
-
// brain drives the
|
|
116
|
+
// brain drives the participants.
|
|
118
117
|
...(plane.kind === "external-public" && brain.kind !== "openai"
|
|
119
118
|
? [{ kind: "key", name: "OPENAI_API_KEY" }]
|
|
120
119
|
: []),
|
|
@@ -2,18 +2,18 @@ import type { RunSubjectProvenance } from "../../run/bundle.js";
|
|
|
2
2
|
import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
|
|
3
3
|
/** Extract the in-sandbox port from the (loopback) serve.url so getHost can expose it. */
|
|
4
4
|
export declare function servePort(serveUrl: string): number;
|
|
5
|
-
/** A getHost URL must be
|
|
5
|
+
/** A getHost URL must be tokenless (no userinfo and no query, so no authKey reaches evidence). */
|
|
6
6
|
export declare function isTokenlessHost(value: string): boolean;
|
|
7
|
-
/** sha256-16 of a URL's
|
|
7
|
+
/** sha256-16 of a URL's origin: the publish-safe host identity persisted in the bundle (the raw
|
|
8
8
|
* getHost URL embeds the live sandbox id + matches the e2b-URL redaction, so it never lands raw). */
|
|
9
9
|
export declare function hostOriginDigest(url: string): string;
|
|
10
10
|
/** A public-safe, human-readable route label for the bundle (host redacted to a placeholder; the
|
|
11
11
|
* entry path kept). Never contains the raw getHost URL. */
|
|
12
12
|
export declare function publicSafeRouteLabel(entry: string | undefined): string;
|
|
13
13
|
/**
|
|
14
|
-
* Build the
|
|
14
|
+
* Build the one subject sandbox's provenance: clone (repo + optional commit) or
|
|
15
15
|
* local-tree (archiveSha256 + optional commit/dirty from the once-per-run host-packed archive -
|
|
16
|
-
* archiveSha256
|
|
16
|
+
* archiveSha256 is the pin; there is only one archive, so no per-participant unanimity math applies,
|
|
17
17
|
* unlike the cua fan-out route). Used for both the in-progress and final bundle: the archive
|
|
18
18
|
* never changes mid-run (packed before any sandbox exists).
|
|
19
19
|
*/
|
|
@@ -8,7 +8,7 @@ export function servePort(serveUrl) {
|
|
|
8
8
|
return Number(url.port);
|
|
9
9
|
return url.protocol === "https:" ? 443 : 80;
|
|
10
10
|
}
|
|
11
|
-
/** A getHost URL must be
|
|
11
|
+
/** A getHost URL must be tokenless (no userinfo and no query, so no authKey reaches evidence). */
|
|
12
12
|
export function isTokenlessHost(value) {
|
|
13
13
|
try {
|
|
14
14
|
const url = new URL(value);
|
|
@@ -18,7 +18,7 @@ export function isTokenlessHost(value) {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
/** sha256-16 of a URL's
|
|
21
|
+
/** sha256-16 of a URL's origin: the publish-safe host identity persisted in the bundle (the raw
|
|
22
22
|
* getHost URL embeds the live sandbox id + matches the e2b-URL redaction, so it never lands raw). */
|
|
23
23
|
export function hostOriginDigest(url) {
|
|
24
24
|
try {
|
|
@@ -34,9 +34,9 @@ export function publicSafeRouteLabel(entry) {
|
|
|
34
34
|
return `[provisioned-subject]${entry ?? "/"}`;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Build the
|
|
37
|
+
* Build the one subject sandbox's provenance: clone (repo + optional commit) or
|
|
38
38
|
* local-tree (archiveSha256 + optional commit/dirty from the once-per-run host-packed archive -
|
|
39
|
-
* archiveSha256
|
|
39
|
+
* archiveSha256 is the pin; there is only one archive, so no per-participant unanimity math applies,
|
|
40
40
|
* unlike the cua fan-out route). Used for both the in-progress and final bundle: the archive
|
|
41
41
|
* never changes mid-run (packed before any sandbox exists).
|
|
42
42
|
*/
|
|
@@ -3,7 +3,7 @@ import type { RunSubjectStateStepRecord } from "../../run/bundle.js";
|
|
|
3
3
|
import type { SharedWorldStateSnapshot } from "../../run/shared-world-evidence.js";
|
|
4
4
|
import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
|
|
5
5
|
import type { DetachedTimers } from "../../substrates/detached.js";
|
|
6
|
-
import type {
|
|
6
|
+
import type { LabDeps } from "../../lab/lab-deps.js";
|
|
7
7
|
import { type ActorRunResult, type SubjectDesktopUsage, type LiveParticipants, type PlaneContext } from "./types.js";
|
|
8
8
|
/** What the provisioned plane needs besides the shared plane context. */
|
|
9
9
|
export interface ProvisionedPlaneSetup {
|
|
@@ -35,6 +35,7 @@ export interface ProvisionedPlaneOutcome {
|
|
|
35
35
|
subjectCommit: string | undefined;
|
|
36
36
|
subjectSandboxId: string | undefined;
|
|
37
37
|
subjectKilled: boolean;
|
|
38
|
+
subjectReleaseWarning: string | undefined;
|
|
38
39
|
subjectDesktop: SubjectDesktopUsage | undefined;
|
|
39
40
|
getHostUrl: string | undefined;
|
|
40
41
|
/** Set when the teardown drain wrote a comms thread. */
|
|
@@ -47,7 +48,7 @@ export declare function runProvisionedPlane(ctx: PlaneContext, live: LivePartici
|
|
|
47
48
|
*/
|
|
48
49
|
export declare function packSubjectTree(cwd: string, config: {
|
|
49
50
|
readonly subject: Pick<LabConfig["subject"], "localTree">;
|
|
50
|
-
},
|
|
51
|
+
}, deps: LabDeps, scrubKnownValues: (text: string) => string): Promise<{
|
|
51
52
|
ok: true;
|
|
52
53
|
archive: LocalTreeArchive;
|
|
53
54
|
buffer: ArrayBuffer;
|