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,39 +1,40 @@
|
|
|
1
|
-
// The external-public plane's host-first handoff. The host
|
|
1
|
+
// The external-public plane's host-first handoff. The host opens a lobby; each follower waits
|
|
2
2
|
// for the host's lobby code, read from the host's URL, narration or screen, and then joins with it.
|
|
3
3
|
// A follower fails closed without opening if the host never yields a code within the deadline.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// It is to be augmented/replaced by the actor message bus (fake SMS/email invite)
|
|
8
|
-
// human-realistic version is the
|
|
5
|
+
// Temporary shim: this CDP URL-relay handoff reads the host's /lobby/CODE off its
|
|
6
|
+
// own browser and threads it into the follower missions.
|
|
7
|
+
// It is to be augmented/replaced by the actor message bus (fake SMS/email invite): the
|
|
8
|
+
// human-realistic version is the host sending the invite link and followers receiving and tapping
|
|
9
9
|
// it, rather than the orchestrator relaying the code out-of-band.
|
|
10
10
|
import { commandDigestOf } from "../../subject/state.js";
|
|
11
11
|
import { toErrorMessage } from "../../evidence/redaction.js";
|
|
12
12
|
import { inboxRecipientFor, participantHasInboxRecipient, } from "../computer-use/participant-desktop.js";
|
|
13
13
|
import { withInboxMission } from "../computer-use/participant-prompt.js";
|
|
14
|
-
import { runCuaParticipant } from "../computer-use/
|
|
14
|
+
import { runCuaParticipant } from "../computer-use/participant-execution.js";
|
|
15
15
|
import { extractLobbyCode, extractLobbyCodeFromNarration } from "./lobby-code.js";
|
|
16
16
|
import { hostOriginDigest } from "./provenance.js";
|
|
17
|
-
import { makeBlockedFollowerOutcome, withLobbyCodeMission, } from "./
|
|
18
|
-
// The
|
|
17
|
+
import { makeBlockedFollowerOutcome, withLobbyCodeMission, } from "./participant-specs.js";
|
|
18
|
+
// The floor for the host-first handoff barrier deadline (ms). The host must surface a
|
|
19
19
|
// shared-session (/lobby/CODE) URL within the deadline or the run fails closed and no follower
|
|
20
|
-
// opens. The effective deadline
|
|
21
|
-
// 2 min is too tight for a real create-a-lobby flow on a mobile-layout
|
|
22
|
-
//
|
|
23
|
-
// gave up. So use max(
|
|
24
|
-
// instant the host actually reaches /lobby, so a generous ceiling only affects the
|
|
20
|
+
// opens. The effective deadline scales with the per-participant run budget (execution.timeoutMs): a
|
|
21
|
+
// fixed 2 min is too tight for a real create-a-lobby flow on a mobile-layout participant once you
|
|
22
|
+
// subtract the participant's own desktop provisioning: the host reaches /lobby/CODE, but after the
|
|
23
|
+
// followers already gave up. So use max(floor, 40% of the budget), capped at the budget. The latch
|
|
24
|
+
// resolves the instant the host actually reaches /lobby, so a generous ceiling only affects the
|
|
25
|
+
// fail-closed case.
|
|
25
26
|
const DEFAULT_HANDOFF_DEADLINE_MS = 120_000;
|
|
26
27
|
const HANDOFF_DEADLINE_BUDGET_FRACTION = 0.4;
|
|
27
|
-
// Per-
|
|
28
|
-
// handoff code, and by each follower to independently
|
|
29
|
-
// at most this many single-frame reads before the
|
|
30
|
-
// reader stops the instant it has what it needs, so in practice only
|
|
31
|
-
// /lobby within a few turns). NOTE: these reads are
|
|
32
|
-
// only) and are
|
|
33
|
-
//
|
|
34
|
-
// budget, fold the estimate in.
|
|
28
|
+
// Per-participant runaway backstop for the vision-off-frame lobby-code read (used by the host to
|
|
29
|
+
// latch the handoff code, and by each follower to independently observe its own code for the
|
|
30
|
+
// convergence proof): at most this many single-frame reads before the participant is assumed to be
|
|
31
|
+
// somewhere without a code. Each reader stops the instant it has what it needs, so in practice only
|
|
32
|
+
// a handful fire (a participant reaches its /lobby within a few turns). NOTE: these reads are
|
|
33
|
+
// out-of-band OpenAI calls (external-public route only) and are left out of execution.caps.maxUsd,
|
|
34
|
+
// so this hard cap is what bounds their spend (each read is one cheap single-frame OCR call). If
|
|
35
|
+
// this route ever runs under a strict budget, fold the estimate in.
|
|
35
36
|
const MAX_LOBBY_CODE_VISION_READS = 30;
|
|
36
|
-
// Idle/no-progress backstop for the
|
|
37
|
+
// Idle/no-progress backstop for the host participant specifically (default is 6/8). The host legitimately sits
|
|
37
38
|
// on an unchanging waiting-room screen while followers provision and join; it must not give up first.
|
|
38
39
|
const HOST_WAIT_IDLE_STEPS = 80;
|
|
39
40
|
const FOLLOWER_WAIT_IDLE_STEPS = 40;
|
|
@@ -66,21 +67,23 @@ class HandoffTimeoutError extends Error {
|
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
/**
|
|
69
|
-
* The handoff latch, its deadline and what each
|
|
70
|
-
* are runtime-only and land in persisted
|
|
71
|
-
* is a shareable game code, not a secret, and it still renders in the host's screenshots,
|
|
72
|
-
* full-fidelity unless redactScreenshots is set
|
|
70
|
+
* The handoff latch, its deadline and what each participant observed. The latched code and observed
|
|
71
|
+
* URLs are runtime-only and land in persisted metadata only as digests (origin + convergence). (The
|
|
72
|
+
* code is a shareable game code, not a secret, and it still renders in the host's screenshots,
|
|
73
|
+
* which are full-fidelity unless redactScreenshots is set. The digesting is about narration/URL
|
|
74
|
+
* metadata.)
|
|
73
75
|
*/
|
|
74
76
|
export class LobbyHandoff {
|
|
75
|
-
// Per-
|
|
76
|
-
// observed /lobby/CODE per
|
|
77
|
-
// routeHostDigest (no code leaks); the codes drive the cross-
|
|
77
|
+
// Per-participant runtime-only observed state (never persisted raw): the last observed URL and the last
|
|
78
|
+
// observed /lobby/CODE per participant, fed by onObservedUrl. The URL is digested to its origin
|
|
79
|
+
// for each participant's routeHostDigest (no code leaks); the codes drive the cross-participant
|
|
80
|
+
// lobby-convergence digest.
|
|
78
81
|
observedFinalUrls;
|
|
79
82
|
observedLobbyCodes;
|
|
80
83
|
latchedLobbyCode;
|
|
81
84
|
/** A follower gave up because the deadline passed. */
|
|
82
85
|
timedOut = false;
|
|
83
|
-
/** Why the host
|
|
86
|
+
/** Why the host ended without producing a lobby code. */
|
|
84
87
|
hostFailure;
|
|
85
88
|
deadlineMs;
|
|
86
89
|
lobbyCodeLatch = deferred();
|
|
@@ -100,7 +103,7 @@ export class LobbyHandoff {
|
|
|
100
103
|
this.openaiApiKey = options.openaiApiKey;
|
|
101
104
|
}
|
|
102
105
|
/**
|
|
103
|
-
* Scrubs the latched lobby
|
|
106
|
+
* Scrubs the latched lobby code from any persisted narration once the host resolves it (the
|
|
104
107
|
* 6-char code has no detectable secret shape, so shape-only redaction cannot catch it).
|
|
105
108
|
*/
|
|
106
109
|
scrub = (text) => {
|
|
@@ -122,7 +125,7 @@ export class LobbyHandoff {
|
|
|
122
125
|
this.deadlineTimer = undefined;
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
|
-
// Resolve the host->follower handoff latch from
|
|
128
|
+
// Resolve the host->follower handoff latch from whichever path sees the code first (CDP url-read,
|
|
126
129
|
// host narration, or vision-off-frame). Idempotent: only the first code wins, and it is also stashed
|
|
127
130
|
// as latchedLobbyCode so it gets scrubbed from any later narration.
|
|
128
131
|
latchLobbyCode(code, participantIndex) {
|
|
@@ -133,11 +136,12 @@ export class LobbyHandoff {
|
|
|
133
136
|
this.stopDeadline();
|
|
134
137
|
this.lobbyCodeLatch.resolve(code);
|
|
135
138
|
}
|
|
136
|
-
// Build an onScreenshot handler that vision-reads the lobby code off
|
|
137
|
-
// CDP-independent observation). `done()` short-circuits once this
|
|
138
|
-
// once latched; a follower once it has recorded its own observed code), `onCode`
|
|
139
|
-
// result. One read in flight at a time, bounded by
|
|
140
|
-
// reaches a lobby can't rack up unbounded
|
|
139
|
+
// Build an onScreenshot handler that vision-reads the lobby code off this participant's own frame
|
|
140
|
+
// (the CDP-independent observation). `done()` short-circuits once this participant has what it
|
|
141
|
+
// needs (the host once latched; a follower once it has recorded its own observed code), `onCode`
|
|
142
|
+
// records/latches the result. One read in flight at a time, bounded by
|
|
143
|
+
// MAX_LOBBY_CODE_VISION_READS so a participant that never reaches a lobby can't rack up unbounded
|
|
144
|
+
// calls (fire-and-forget; the loop never awaits it).
|
|
141
145
|
makeLobbyCodeVisionReader(done, onCode) {
|
|
142
146
|
let inFlight = false;
|
|
143
147
|
let reads = 0;
|
|
@@ -184,32 +188,34 @@ export class LobbyHandoff {
|
|
|
184
188
|
this.lobbyCodeLatch.reject(new Error(this.hostFailure));
|
|
185
189
|
}
|
|
186
190
|
}
|
|
187
|
-
/** The digest-only convergence proofs over what the
|
|
191
|
+
/** The digest-only convergence proofs over what the participants observed. */
|
|
188
192
|
convergence(declaredOriginDigest) {
|
|
189
|
-
// Observed-origin convergence proof
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
// cross-origin redirect (declared apex -> observed www) is therefore tolerated: the
|
|
193
|
-
// converge on
|
|
194
|
-
// not converge on a single observed origin (or none observed one).
|
|
193
|
+
// Observed-origin convergence proof: the convergence claim is about what the participants
|
|
194
|
+
// observed. Digest each observing participant's origin and require one shared origin; that
|
|
195
|
+
// agreement is the convergence proof and becomes plane.publicOriginDigest. A normal
|
|
196
|
+
// cross-origin redirect (declared apex -> observed www) is therefore tolerated: the
|
|
197
|
+
// participants still converge on one observed origin. Leave it undefined (verify fails closed)
|
|
198
|
+
// only if the participants did not converge on a single observed origin (or none observed one).
|
|
195
199
|
const observedOriginDigests = this.observedFinalUrls
|
|
196
200
|
.filter((url) => typeof url === "string" && url.length > 0)
|
|
197
201
|
.map((url) => hostOriginDigest(url));
|
|
198
202
|
const distinctObservedOrigins = new Set(observedOriginDigests);
|
|
199
203
|
const publicOriginDigest = distinctObservedOrigins.size === 1
|
|
200
204
|
? [...distinctObservedOrigins][0]
|
|
201
|
-
: //
|
|
202
|
-
//
|
|
203
|
-
// digests to the declared origin too). The run still fails
|
|
204
|
-
//
|
|
205
|
-
//
|
|
205
|
+
: // Nothing observed (e.g. a handoff-timeout run where no participant ever navigated): fall
|
|
206
|
+
// back to the declared origin so a failed run's bundle stays structurally valid (every
|
|
207
|
+
// participant's route then digests to the declared origin too). The run still fails
|
|
208
|
+
// closed for its own reason (`HANDOFF_TIMEOUT`, no lobby convergence, no
|
|
209
|
+
// overlap-on-pass). Real divergence (≥2 distinct observed origins) leaves it undefined so
|
|
210
|
+
// verify fails closed on the non-convergence.
|
|
206
211
|
distinctObservedOrigins.size === 0
|
|
207
212
|
? declaredOriginDigest
|
|
208
213
|
: undefined;
|
|
209
|
-
// Lobby-convergence proof: a digest of the shared /lobby/CODE path iff
|
|
210
|
-
//
|
|
211
|
-
// observedLobbyCodes may be a
|
|
212
|
-
// Array.prototype.every
|
|
214
|
+
// Lobby-convergence proof: a digest of the shared /lobby/CODE path iff every participant
|
|
215
|
+
// converged on the same code (a follower stuck on "/" yields no code, so no false convergence).
|
|
216
|
+
// Digest-only. observedLobbyCodes may be a sparse array (a participant that never observed a
|
|
217
|
+
// code leaves a hole), and Array.prototype.every skips holes, so count the defined codes
|
|
218
|
+
// explicitly instead of every().
|
|
213
219
|
const definedCodes = this.observedLobbyCodes.filter((code) => code !== undefined);
|
|
214
220
|
const distinctCodes = new Set(definedCodes);
|
|
215
221
|
const lobbyConvergenceDigest = distinctCodes.size === 1 && definedCodes.length === this.observedLobbyCodes.length
|
|
@@ -218,30 +224,30 @@ export class LobbyHandoff {
|
|
|
218
224
|
return { publicOriginDigest, lobbyConvergenceDigest };
|
|
219
225
|
}
|
|
220
226
|
}
|
|
221
|
-
// Adopter-hosted inbox
|
|
227
|
+
// Adopter-hosted inbox: the persona is told its address and inbox URL on this plane.
|
|
222
228
|
function withParticipantInbox(spec, inbox) {
|
|
223
229
|
return inbox && participantHasInboxRecipient(inbox.email, spec.planned.id)
|
|
224
230
|
? withInboxMission(spec, inbox.inboxUrl, inboxRecipientFor(inbox.email, spec.planned.id)?.address)
|
|
225
231
|
: spec;
|
|
226
232
|
}
|
|
227
|
-
// The
|
|
228
|
-
// slot, and the
|
|
229
|
-
// followers block on the host's code while holding a worker slot, so if the host
|
|
230
|
-
// scheduled
|
|
231
|
-
// `concurrency` workers) and the run would die with a spurious HANDOFF_TIMEOUT (e.g.
|
|
232
|
-
// [p2,p3,host] with concurrency 2). Giving the host its own slot, started
|
|
233
|
-
// the follower pool,
|
|
234
|
-
//
|
|
233
|
+
// The host participant (which yields the /lobby/CODE the followers wait on) runs on its own dedicated
|
|
234
|
+
// slot, and the followers run through a bounded pool of size concurrency-1 (blockers 1 & 4):
|
|
235
|
+
// followers block on the host's code while holding a worker slot, so if the host participant were
|
|
236
|
+
// scheduled inside the same bounded pool it could be starved (never scheduled among the first
|
|
237
|
+
// `concurrency` workers) and the run would die with a spurious HANDOFF_TIMEOUT (e.g. participants
|
|
238
|
+
// [p2,p3,host] with concurrency 2). Giving the host its own slot, started immediately and outside
|
|
239
|
+
// the follower pool, keeps it schedulable regardless of its roster position or of concurrency vs
|
|
240
|
+
// participant count, while total in-flight paid desktops stay ≤ the declared concurrency
|
|
235
241
|
// (host + up to concurrency-1 followers), preserving the spend cap.
|
|
236
242
|
export async function runHost(handoff, deps, spec, participantIndex) {
|
|
237
243
|
const onObservedUrl = handoff.makeObservedUrl(participantIndex, true);
|
|
238
|
-
// CDP-
|
|
239
|
-
// unreliable in practice). Two backups, both resolving the
|
|
244
|
+
// CDP-independent handoff paths (the E2B-desktop CDP url-read the onObservedUrl path relies on is
|
|
245
|
+
// unreliable in practice). Two backups, both resolving the same latch; whichever sees the code first
|
|
240
246
|
// wins, all digest-only:
|
|
241
|
-
// (1) onMessage
|
|
242
|
-
// (2) onScreenshot
|
|
243
|
-
// robust one: the code is rendered on screen even when CDP fails
|
|
244
|
-
// narrates it, and
|
|
247
|
+
// (1) onMessage: scan the host's own narration if it happens to state the lobby URL; and
|
|
248
|
+
// (2) onScreenshot: vision-read the code straight off the host's waiting-room frame. This is the
|
|
249
|
+
// robust one: the code is rendered on screen even when CDP fails and when the host never
|
|
250
|
+
// narrates it, and the host is never asked to announce anything, so it keeps
|
|
245
251
|
// running (create -> wait for players -> Start -> play) instead of ending on a stray message.
|
|
246
252
|
const onMessage = (text) => {
|
|
247
253
|
if (handoff.latchedLobbyCode !== undefined)
|
|
@@ -250,13 +256,14 @@ export async function runHost(handoff, deps, spec, participantIndex) {
|
|
|
250
256
|
if (code !== undefined)
|
|
251
257
|
handoff.latchLobbyCode(code, participantIndex);
|
|
252
258
|
};
|
|
253
|
-
// Vision-read the host's waiting-room frame and
|
|
259
|
+
// Vision-read the host's waiting-room frame and latch the code for the followers (stops once latched).
|
|
254
260
|
const onScreenshot = handoff.makeLobbyCodeVisionReader(() => handoff.latchedLobbyCode !== undefined, (code) => handoff.latchLobbyCode(code, participantIndex));
|
|
255
|
-
// The host's job includes a long
|
|
261
|
+
// The host's job includes a long, legitimate idle wait: sitting in the waiting room while the
|
|
256
262
|
// followers provision their own desktops and walk the Join flow (easily 15-30 turns of an
|
|
257
263
|
// unchanging "waiting for players" screen). At the default idle backstop (6) the host would give up
|
|
258
264
|
// before anyone arrives, orphaning the lobby (exactly the earlier failure). Raise the host's idle /
|
|
259
|
-
// no-progress tolerance so it waits patiently; the per-
|
|
265
|
+
// no-progress tolerance so it waits patiently; the per-participant timeout still bounds a truly
|
|
266
|
+
// stuck host.
|
|
260
267
|
const hostSpec = {
|
|
261
268
|
...withParticipantInbox(spec, deps.inbox),
|
|
262
269
|
backstop: {
|
|
@@ -291,7 +298,7 @@ export async function runHost(handoff, deps, spec, participantIndex) {
|
|
|
291
298
|
}
|
|
292
299
|
export async function runFollower(handoff, deps, spec, participantIndex) {
|
|
293
300
|
const onObservedUrl = handoff.makeObservedUrl(participantIndex, false);
|
|
294
|
-
//
|
|
301
|
+
// Follower: compose no mission and open no target until the host yields a lobby code.
|
|
295
302
|
let code;
|
|
296
303
|
try {
|
|
297
304
|
code = await handoff.waitForHostCode();
|
|
@@ -310,9 +317,10 @@ export async function runFollower(handoff, deps, spec, participantIndex) {
|
|
|
310
317
|
route: deps.publicAppUrl,
|
|
311
318
|
};
|
|
312
319
|
}
|
|
313
|
-
// Followers also idle-wait
|
|
320
|
+
// Followers also idle-wait: in the waiting room until the host starts, and between rounds. Raise
|
|
314
321
|
// their idle backstop too (less than the host's: they wait less), so a follower that joins ahead of
|
|
315
|
-
// the other does not give up before the game begins. Per-
|
|
322
|
+
// the other does not give up before the game begins. Per-participant timeout still bounds a stuck
|
|
323
|
+
// follower.
|
|
316
324
|
const followerSpec = {
|
|
317
325
|
...withLobbyCodeMission(withParticipantInbox(spec, deps.inbox), code),
|
|
318
326
|
backstop: {
|
|
@@ -320,13 +328,13 @@ export async function runFollower(handoff, deps, spec, participantIndex) {
|
|
|
320
328
|
noProgressSteps: spec.backstop?.noProgressSteps ?? FOLLOWER_WAIT_IDLE_STEPS,
|
|
321
329
|
},
|
|
322
330
|
};
|
|
323
|
-
// Independently
|
|
324
|
-
// and record it for the cross-
|
|
325
|
-
// on the
|
|
326
|
-
// reliable signal instead of the flaky CDP url-read, so lobbyConvergenceDigest can prove all
|
|
327
|
-
// reached the
|
|
328
|
-
// code and convergence correctly fails (no false proof); if it never reads one, the
|
|
329
|
-
// hole and convergence is
|
|
331
|
+
// Independently observe this follower's own lobby code by vision-reading its waiting-room frame,
|
|
332
|
+
// and record it for the cross-participant convergence proof. This latches nothing (followers gate
|
|
333
|
+
// on the host's code). It fills this participant's observedLobbyCodes slot from a
|
|
334
|
+
// reliable signal instead of the flaky CDP url-read, so lobbyConvergenceDigest can prove all
|
|
335
|
+
// participants reached the same /lobby/CODE. If a follower somehow joined another lobby, it reads
|
|
336
|
+
// a different code and convergence correctly fails (no false proof); if it never reads one, the
|
|
337
|
+
// participant stays a hole and convergence is recorded as "not observed" for that participant.
|
|
330
338
|
const onScreenshot = handoff.makeLobbyCodeVisionReader(() => handoff.observedLobbyCodes[participantIndex] !== undefined, (observed) => {
|
|
331
339
|
handoff.observedLobbyCodes[participantIndex] = observed;
|
|
332
340
|
});
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/** Extract the shared-session
|
|
2
|
-
* handoff regex table test
|
|
1
|
+
/** Extract the shared-session code from a (runtime-only) observed URL, or undefined. Exported for the
|
|
2
|
+
* handoff regex table test. Pure, no side effects, never persists its input. */
|
|
3
3
|
export declare function extractLobbyCode(url: string | undefined): string | undefined;
|
|
4
4
|
export declare function extractLobbyCodeFromNarration(text: string | undefined): string | undefined;
|
|
5
5
|
/** Pull the assistant's plain text out of an OpenAI Responses API body (`output_text` convenience
|
|
6
6
|
* field, else the concatenated `output[].content[].text`). Tolerant of shape drift; pure. */
|
|
7
7
|
export declare function extractResponsesOutputText(parsed: unknown): string | undefined;
|
|
8
|
-
/** Parse a vision reply into a lobby
|
|
9
|
-
* six-character code, or when it echoes an explicit /lobby/CODE
|
|
10
|
-
* prose (e.g. "I see a home SCREEN"), because a wrong latch fails the entire run, whereas a miss just
|
|
11
|
-
* retries on the next frame while the host keeps waiting. NONE (the instructed "no code" reply) is
|
|
8
|
+
/** Parse a vision reply into a lobby code. Precision-first: accept only when the whole reply is the
|
|
9
|
+
* six-character code, or when it echoes an explicit /lobby/CODE; never a bare 6-letter token buried in
|
|
10
|
+
* prose (e.g. "I see a home `SCREEN`"), because a wrong latch fails the entire run, whereas a miss just
|
|
11
|
+
* retries on the next frame while the host keeps waiting. `NONE` (the instructed "no code" reply) is
|
|
12
12
|
* rejected. Pure. */
|
|
13
13
|
export declare function parseLobbyCodeReply(reply: string | undefined): string | undefined;
|
|
14
14
|
export interface ReadLobbyCodeOptions {
|
|
@@ -18,7 +18,7 @@ export interface ReadLobbyCodeOptions {
|
|
|
18
18
|
signal?: AbortSignal;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Vision-read a lobby
|
|
21
|
+
* Vision-read a lobby code straight off a host waiting-room frame (the robust, CDP-independent handoff
|
|
22
22
|
* relay). Fail-soft: any network/HTTP/parse problem returns undefined so the caller simply retries on
|
|
23
23
|
* the next frame. The frame is runtime-only; only the extracted code is used (as a digest downstream).
|
|
24
24
|
*/
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
// Reads a lobby code (the /lobby/CODE path segment) from a URL, from a
|
|
2
|
-
// a vision model call, from a
|
|
3
|
-
// host's lobby to the followers.
|
|
1
|
+
// Reads a lobby code (the /lobby/CODE path segment) from a URL, from a participant's narration or,
|
|
2
|
+
// through a vision model call, from a participant's screenshot. The external-public plane uses it
|
|
3
|
+
// to hand the host's lobby to the followers.
|
|
4
4
|
import { OPENAI_RESPONSES_URL } from "../../actors/openai-endpoint.js";
|
|
5
5
|
/**
|
|
6
6
|
* The lobby-trivia (and general "/lobby/CODE") shared-session URL matcher. A code is exactly 6 chars of
|
|
7
|
-
* the [A-Z2-9] class; a locale prefix (/en/lobby/…) and a query/hash suffix are tolerated.
|
|
8
|
-
* input (a live location.href); only the extracted
|
|
7
|
+
* the [A-Z2-9] class; a locale prefix (/en/lobby/…) and a query/hash suffix are tolerated. Runtime-only
|
|
8
|
+
* input (a live location.href); only the extracted code is used, and it lands only as a digest.
|
|
9
9
|
*/
|
|
10
10
|
const LOBBY_CODE_PATTERN = /\/lobby\/([A-Z2-9]{6})(?:$|[/?#])/;
|
|
11
|
-
/** Extract the shared-session
|
|
12
|
-
* handoff regex table test
|
|
11
|
+
/** Extract the shared-session code from a (runtime-only) observed URL, or undefined. Exported for the
|
|
12
|
+
* handoff regex table test. Pure, no side effects, never persists its input. */
|
|
13
13
|
export function extractLobbyCode(url) {
|
|
14
14
|
if (typeof url !== "string")
|
|
15
15
|
return undefined;
|
|
@@ -17,10 +17,10 @@ export function extractLobbyCode(url) {
|
|
|
17
17
|
return match ? match[1] : undefined;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Extract a lobby
|
|
20
|
+
* Extract a lobby code from free-form actor narration (the host's reasoning/message where it states
|
|
21
21
|
* the lobby URL it sees), where the /lobby/CODE is followed by arbitrary prose (a space, backtick,
|
|
22
|
-
* newline) rather than end-of-string or
|
|
23
|
-
* negative-lookahead boundary (exactly 6 code chars). This is the CDP-
|
|
22
|
+
* newline) rather than end-of-string or /?#, so the strict LOBBY_CODE_PATTERN would miss it. Uses a
|
|
23
|
+
* negative-lookahead boundary (exactly 6 code chars). This is the CDP-independent handoff path: the
|
|
24
24
|
* host reads the code on screen and states it, and this reads it from the model's own text. Pure;
|
|
25
25
|
* input is runtime-only; only the code is used (as a digest).
|
|
26
26
|
*/
|
|
@@ -32,10 +32,10 @@ export function extractLobbyCodeFromNarration(text) {
|
|
|
32
32
|
if (inUrl)
|
|
33
33
|
return inUrl[1];
|
|
34
34
|
// Fallback: an explicitly-labeled bare code (e.g. "LOBBY_CODE=ABC123"), which the host may state
|
|
35
|
-
// if it copied the code rather than the URL. The label is matched case-insensitively, but the
|
|
36
|
-
// itself must be
|
|
35
|
+
// if it copied the code rather than the URL. The label is matched case-insensitively, but the code
|
|
36
|
+
// itself must be uppercase [A-Z2-9]: a real lobby code always renders uppercase, whereas an /i match
|
|
37
37
|
// on the code class would also grab an ordinary lowercase word after "lobby code " (e.g. "the lobby
|
|
38
|
-
// code screen") and latch a
|
|
38
|
+
// code screen") and latch a wrong code. Precision-first, matching parseLobbyCodeReply's rationale.
|
|
39
39
|
const labeled = text.match(/lobby[ _-]?code[=:\s]+([A-Z2-9]{6})(?![A-Za-z2-9])/i);
|
|
40
40
|
return labeled && labeled[1] && /^[A-Z2-9]{6}$/.test(labeled[1]) ? labeled[1] : undefined;
|
|
41
41
|
}
|
|
@@ -67,10 +67,10 @@ export function extractResponsesOutputText(parsed) {
|
|
|
67
67
|
}
|
|
68
68
|
return parts.length > 0 ? parts.join("\n") : undefined;
|
|
69
69
|
}
|
|
70
|
-
/** Parse a vision reply into a lobby
|
|
71
|
-
* six-character code, or when it echoes an explicit /lobby/CODE
|
|
72
|
-
* prose (e.g. "I see a home SCREEN"), because a wrong latch fails the entire run, whereas a miss just
|
|
73
|
-
* retries on the next frame while the host keeps waiting. NONE (the instructed "no code" reply) is
|
|
70
|
+
/** Parse a vision reply into a lobby code. Precision-first: accept only when the whole reply is the
|
|
71
|
+
* six-character code, or when it echoes an explicit /lobby/CODE; never a bare 6-letter token buried in
|
|
72
|
+
* prose (e.g. "I see a home `SCREEN`"), because a wrong latch fails the entire run, whereas a miss just
|
|
73
|
+
* retries on the next frame while the host keeps waiting. `NONE` (the instructed "no code" reply) is
|
|
74
74
|
* rejected. Pure. */
|
|
75
75
|
export function parseLobbyCodeReply(reply) {
|
|
76
76
|
if (typeof reply !== "string")
|
|
@@ -88,11 +88,11 @@ const LOBBY_CODE_VISION_PROMPT = "This is a screenshot of a the example multipla
|
|
|
88
88
|
"code'/'room code' label or inside an invite link of the form /lobby/CODE. Your entire reply MUST be " +
|
|
89
89
|
"exactly those 6 characters in uppercase and NOTHING else (no words, no punctuation). If no lobby " +
|
|
90
90
|
"code is visible on this screen (e.g. it is the home screen or a game round), reply exactly NONE.";
|
|
91
|
-
// A single-frame OCR-style read. gpt-5.5 (the
|
|
92
|
-
// 6-char code off a dense
|
|
93
|
-
// tried and could
|
|
91
|
+
// A single-frame OCR-style read. gpt-5.5 (the computer-use default) is used deliberately: it reliably reads the
|
|
92
|
+
// 6-char code off a dense mobile-viewport waiting room. A smaller/cheaper model (gpt-4.1-mini) was
|
|
93
|
+
// tried and could not read it. reasoning.effort stays "low" (minimal) and the output budget is small
|
|
94
94
|
// but comfortably clear of the "incomplete on reasoning overflow" edge. Kept on the same account/key
|
|
95
|
-
// as the actor; the same full-fidelity frame is already sent to this API by the
|
|
95
|
+
// as the actor; the same full-fidelity frame is already sent to this API by the computer-use provider, so this
|
|
96
96
|
// adds no new data-exposure surface. See onScreenshot in runHost.
|
|
97
97
|
const LOBBY_CODE_VISION_MODEL = "gpt-5.5";
|
|
98
98
|
// Output-token budget for the read. The answer is 6 chars, but leave clear margin over any low-effort
|
|
@@ -102,7 +102,7 @@ const LOBBY_CODE_VISION_MAX_OUTPUT_TOKENS = 64;
|
|
|
102
102
|
// visionInFlight pinned true and silently kill the relay for the rest of the host run.
|
|
103
103
|
const LOBBY_CODE_VISION_TIMEOUT_MS = 15_000;
|
|
104
104
|
/**
|
|
105
|
-
* Vision-read a lobby
|
|
105
|
+
* Vision-read a lobby code straight off a host waiting-room frame (the robust, CDP-independent handoff
|
|
106
106
|
* relay). Fail-soft: any network/HTTP/parse problem returns undefined so the caller simply retries on
|
|
107
107
|
* the next frame. The frame is runtime-only; only the extracted code is used (as a digest downstream).
|
|
108
108
|
*/
|
|
@@ -4,13 +4,13 @@ import type { RunBundle } from "../../run/bundle.js";
|
|
|
4
4
|
import type { CuaParticipantDeps, DesktopParticipantRun, ParticipantRunOutcome } from "../computer-use/types.js";
|
|
5
5
|
import type { LiveParticipants, PlaneContext } from "./types.js";
|
|
6
6
|
export declare function defaultSessionTimeoutMs(plan: SharedWorldPlan): number;
|
|
7
|
-
/** Resolve an actor's
|
|
8
|
-
* relative path, validated at parse against serve.url). */
|
|
7
|
+
/** Resolve an actor's participant URL against the harness-minted getHost base (entry is a
|
|
8
|
+
* same-origin relative path, validated at parse against serve.url). */
|
|
9
9
|
export declare function resolveActorEntryUrl(baseUrl: string, entry: string | undefined): string;
|
|
10
10
|
export declare function participantTaxonomyLabel(labels: Participant["labels"]): string;
|
|
11
|
-
/** Thread the host-yielded lobby
|
|
12
|
-
* The
|
|
13
|
-
* the model reads (never a raw bundle field), and the lab scrubs the
|
|
11
|
+
/** Thread the host-yielded lobby code into a follower's mission at runtime (external-public route).
|
|
12
|
+
* The code flows into the follower's join instruction; it is persisted only as the composed prompt
|
|
13
|
+
* the model reads (never a raw bundle field), and the lab scrubs the code from all narration. The
|
|
14
14
|
* follower joins through the real UI (a direct /lobby/CODE visit does not auto-join a non-member). */
|
|
15
15
|
export declare function withLobbyCodeMission(spec: DesktopParticipantRun, code: string): DesktopParticipantRun;
|
|
16
16
|
/** A follower blocked by an expired deadline or an ended host. It never opened a browser;
|
|
@@ -19,20 +19,23 @@ export declare function makeBlockedFollowerOutcome(spec: DesktopParticipantRun,
|
|
|
19
19
|
/** The computer-use runner deps every participant shares, on either plane. */
|
|
20
20
|
export type ParticipantRunDeps = Omit<CuaParticipantDeps, "signalProvisioned" | "appUrl" | "onObservedUrl">;
|
|
21
21
|
/**
|
|
22
|
-
* A live run publishes an in-progress bundle before its
|
|
23
|
-
* is attached, and the
|
|
24
|
-
* run killed mid-way leaves that evidence on disk. The flush starts with the
|
|
22
|
+
* A live run publishes an in-progress bundle before its participants start, whether or not an
|
|
23
|
+
* Observer is attached, and the participants' live traces rewrite it as they go, as on the
|
|
24
|
+
* computer-use route. A run killed mid-way leaves that evidence on disk. The flush starts with the
|
|
25
|
+
* first snapshot.
|
|
25
26
|
*/
|
|
26
27
|
export declare function startParticipantFlush(ctx: PlaneContext, live: LiveParticipants, bundle: RunBundle): void;
|
|
27
28
|
/**
|
|
28
|
-
* The runner deps both planes give every participant.
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* The runner deps both planes give every participant. The `shared-app` subject keeps three things
|
|
30
|
+
* out of every actor sandbox: the subject env names' values, the GitHub token, and clone
|
|
31
|
+
* or local-tree provisioning. The committed subject.envValues still reach it, non-secret by parse.
|
|
32
|
+
* `scrubKnownValues` is the plane's scrub: the external-public plane also scrubs the latched lobby
|
|
33
|
+
* code.
|
|
31
34
|
*/
|
|
32
35
|
export declare function participantRunDeps(ctx: PlaneContext, live: LiveParticipants, scrubKnownValues: (text: string) => string): ParticipantRunDeps;
|
|
33
36
|
/**
|
|
34
37
|
* Each participant's actor spec, with committed personas compiled in so each prompt carries real
|
|
35
|
-
* behavioral directives
|
|
38
|
+
* behavioral directives. Evidence copies of the assignment, instructions and persona are
|
|
36
39
|
* scrubbed of the run's known secret values.
|
|
37
40
|
*/
|
|
38
41
|
export declare function buildParticipantSpecs(participants: readonly SharedWorldParticipant[], cwd: string, scrubKnownValues: (text: string) => string): Promise<DesktopParticipantRun[]>;
|