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,38 +1,39 @@
|
|
|
1
|
-
// The
|
|
2
|
-
// mutable service plane
|
|
1
|
+
// The concurrent shared-world lab route: N persona participants drive one shared,
|
|
2
|
+
// mutable service plane at the same time. A recomposition of shipped
|
|
3
3
|
// pieces + the getHost wrapper:
|
|
4
4
|
//
|
|
5
|
-
// -
|
|
5
|
+
// - One subject sandbox: provisionCloneSubject once (clone+install+build+seed) + serve on
|
|
6
6
|
// 0.0.0.0, exposed via getHost(port) → a tokenless reachable URL (the headless service host;
|
|
7
|
-
// no GUI
|
|
8
|
-
// - N
|
|
9
|
-
// teardown) bounded by execution.concurrency, each browser pointed at the getHost URL
|
|
10
|
-
// driving the shared service
|
|
11
|
-
// fail-fast
|
|
7
|
+
// no GUI participant).
|
|
8
|
+
// - N actor desktop sandboxes: fan-out's runCuaParticipant machinery (per-participant device/persona, by-id
|
|
9
|
+
// teardown) bounded by execution.concurrency, each browser pointed at the getHost URL and
|
|
10
|
+
// driving the shared service at the same time. Independent: no pipeline gate, no
|
|
11
|
+
// fail-fast: one actor's failure must not block the swarm or corrupt the "M of N" outcomes.
|
|
12
12
|
// - A background prober snapshots the subject DB checkpoint digests on a cadence → a stateSeries
|
|
13
13
|
// of the shared world evolving under load.
|
|
14
|
-
// -
|
|
14
|
+
// - All N+1 sandboxes torn down by exact id in a finally, never through Sandbox.list.
|
|
15
15
|
//
|
|
16
|
-
//
|
|
17
|
-
// attributionClass: shared-world + a
|
|
18
|
-
// "concurrent"; laneWindows + stateSeries + outcomes;
|
|
16
|
+
// Attribution (enforced by verify): the bundle declares
|
|
17
|
+
// attributionClass: shared-world + a concurrent humanish.shared-world.v1 block (topologyMode
|
|
18
|
+
// "concurrent"; laneWindows + stateSeries + outcomes; no timeline) whose attributionLimits drop
|
|
19
19
|
// `sequential-only`/`no-concurrent-races` and add `concurrent`,
|
|
20
20
|
// `best-effort-causal-attribution`, `non-deterministic-shared-state`,
|
|
21
21
|
// `window-and-snapshot-granularity`, `contention-observed-not-proven-safe`,
|
|
22
|
-
// `state-change-not-isolated-to-actors`. laneWindows + stateSeries are
|
|
23
|
-
// per-delta→actor field
|
|
22
|
+
// `state-change-not-isolated-to-actors`. laneWindows + stateSeries are independent series with no
|
|
23
|
+
// per-delta→actor field, so causation under concurrency is structurally inexpressible.
|
|
24
24
|
//
|
|
25
|
-
//
|
|
26
|
-
// contract
|
|
27
|
-
// latch in the fake session forces two
|
|
25
|
+
// Capability and proof: the deterministic $0 gate proves the plumbing + the claims-match-mechanism
|
|
26
|
+
// contract: the real mapWithConcurrency produces genuinely overlapping laneWindows (a rendezvous
|
|
27
|
+
// latch in the fake session forces two participant fns in-flight while the real orchestrator clock
|
|
28
28
|
// measures the windows). Every generated bundle describes only its own observations; no one run
|
|
29
29
|
// establishes scale, repeatability, or adopter-harness replacement.
|
|
30
30
|
//
|
|
31
|
-
// Synthetic
|
|
32
|
-
// synthetic
|
|
31
|
+
// Synthetic subject: a getHost URL is internet-reachable for the run, so this route is for
|
|
32
|
+
// synthetic seeded subjects only. Verify fail-closes on subject.state.provenance != "seeded" and
|
|
33
33
|
// requires the author attestation subject.exposure: synthetic. This is author-trust + a provenance
|
|
34
|
-
// gate
|
|
34
|
+
// gate; humanish cannot tell synthetic from real data, so it makes no claim about real data.
|
|
35
35
|
import path from "node:path";
|
|
36
|
+
import { missingKeys, missingSubjectEnv } from "../../lab/requirements.js";
|
|
36
37
|
import { completeAutomaticAnalysis } from "../../analysis/automatic-completion.js";
|
|
37
38
|
import { resolveAutomaticAnalysis } from "../../analysis/automatic-config.js";
|
|
38
39
|
import { scrubLiterals } from "../../evidence/redaction.js";
|
|
@@ -46,15 +47,16 @@ import { localAgentRefusal } from "../../actors/local-agent/readiness.js";
|
|
|
46
47
|
import { runProvisionedPlane } from "./provisioned.js";
|
|
47
48
|
import { concurrentLabFailure, finishConcurrentRun } from "./result.js";
|
|
48
49
|
import { prepareConcurrentRun } from "./setup.js";
|
|
49
|
-
import {
|
|
50
|
+
import { browserRouteScorer } from "../../lab/adapter-scorer-loader.js";
|
|
51
|
+
import { withLateScorer } from "../../lab/route-inputs.js";
|
|
50
52
|
import {} from "./types.js";
|
|
51
53
|
import { rosterOf } from "../../lab/parse/actors.js";
|
|
52
54
|
/** The shared-world code for each local-agent refusal, kind for kind with computer-use. */
|
|
53
55
|
const LOCAL_AGENT_REFUSAL_CODES = {
|
|
54
|
-
"agent-missing": "
|
|
55
|
-
"signin-required": "
|
|
56
|
-
unsupported: "
|
|
57
|
-
"unpriced-cap": "
|
|
56
|
+
"agent-missing": "HUMANISH_SHARED_WORLD_AGENT_MISSING",
|
|
57
|
+
"signin-required": "HUMANISH_SHARED_WORLD_AGENT_SIGNIN_REQUIRED",
|
|
58
|
+
unsupported: "HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED",
|
|
59
|
+
"unpriced-cap": "HUMANISH_SHARED_WORLD_UNPRICED_CAP",
|
|
58
60
|
};
|
|
59
61
|
/**
|
|
60
62
|
* The library entry for a shared-world lab. It plans the config with planSharedWorldLab and runs
|
|
@@ -62,12 +64,11 @@ const LOCAL_AGENT_REFUSAL_CODES = {
|
|
|
62
64
|
* run and its analysis.
|
|
63
65
|
*/
|
|
64
66
|
export async function runConcurrentSharedWorld(options) {
|
|
65
|
-
const { config, dryRun,
|
|
67
|
+
const { config, dryRun, ...input } = options;
|
|
66
68
|
// planSharedWorldLab makes every configuration refusal, in the order this route always has.
|
|
67
69
|
const planned = planSharedWorldLab(config, {
|
|
68
70
|
dryRun,
|
|
69
|
-
|
|
70
|
-
hooks: input.hooks ?? {},
|
|
71
|
+
hasRunSession: input.deps?.runSession !== undefined,
|
|
71
72
|
});
|
|
72
73
|
if (planned.ok)
|
|
73
74
|
return runSharedWorldPlan(planned.plan, input, config);
|
|
@@ -82,15 +83,15 @@ export function sharedWorldLabRefusal(options, refusal) {
|
|
|
82
83
|
labId: config.id,
|
|
83
84
|
actor: config.actors[0]?.type ?? "",
|
|
84
85
|
participantCount: declared.length,
|
|
85
|
-
// The parser fills concurrency for multi-
|
|
86
|
-
// callers: every declared
|
|
86
|
+
// The parser fills concurrency for multi-participant studies, so this fallback serves only
|
|
87
|
+
// library callers: every declared participant runs at once unless the author declared a cap.
|
|
87
88
|
concurrency: config.execution?.concurrency ?? Math.max(1, declared.length),
|
|
88
89
|
dryRun,
|
|
89
90
|
runId: options.runId,
|
|
90
91
|
});
|
|
91
92
|
// A refusal starts no run, so a declared or default analysis is recorded as skipped.
|
|
92
93
|
const analysis = resolveAutomaticAnalysis(config.review?.analysis);
|
|
93
|
-
return completeAutomaticAnalysis(fail(refusal.code, refusal.message, refusal.actor), undefined, analysis.ok ? analysis.config : undefined, options
|
|
94
|
+
return completeAutomaticAnalysis(fail(refusal.code, refusal.message, refusal.actor), undefined, analysis.ok ? analysis.config : undefined, options, { trigger: config.review?.analysis === undefined ? "default" : "explicit" });
|
|
94
95
|
}
|
|
95
96
|
/**
|
|
96
97
|
* runLab's step for a shared-world plan. It runs a live plan's local checks (the keys, a local
|
|
@@ -103,11 +104,11 @@ export async function admitSharedWorldPlan(plan, input, config) {
|
|
|
103
104
|
return { ok: false, outcome: sharedWorldOutcome(refused) };
|
|
104
105
|
return {
|
|
105
106
|
ok: true,
|
|
106
|
-
run: async (scorer) => sharedWorldOutcome(await runAdmittedSharedWorldRun(plan,
|
|
107
|
+
run: async (scorer) => sharedWorldOutcome(await runAdmittedSharedWorldRun(plan, withLateScorer(input, scorer, browserRouteScorer), config)),
|
|
107
108
|
};
|
|
108
109
|
}
|
|
109
110
|
function sharedWorldOutcome(result) {
|
|
110
|
-
return { route: "shared-world",
|
|
111
|
+
return { route: "shared-world", result };
|
|
111
112
|
}
|
|
112
113
|
/** Run a shared-world plan: its local checks, then the run. */
|
|
113
114
|
export async function runSharedWorldPlan(plan, input, config) {
|
|
@@ -122,29 +123,25 @@ export async function runSharedWorldPlan(plan, input, config) {
|
|
|
122
123
|
async function admitSharedWorldRun(plan, input) {
|
|
123
124
|
if (plan.dryRun)
|
|
124
125
|
return undefined;
|
|
125
|
-
const env = input.
|
|
126
|
-
const subjectEnvNames = plan.plane.kind === "provisioned" ? plan.plane.subject.env : [];
|
|
126
|
+
const env = input.env ?? process.env;
|
|
127
127
|
const fail = (code, message) => completeSharedWorldAnalysis(plan, input, sharedWorldFailure(plan, input)(code, message, sharedWorldDescriptorOf(plan.actor).id), undefined);
|
|
128
|
-
// OPENAI_API_KEY
|
|
129
|
-
// reader; a local-agent brain's
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
];
|
|
135
|
-
if (missingKeys.length > 0) {
|
|
136
|
-
return fail("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_KEYS_MISSING", `Live concurrent shared-world labs need ${missingKeys.join(" and ")} in the environment (values are never persisted). ${describeMissingKeys(missingKeys, env)}`);
|
|
128
|
+
// The plan lists OPENAI_API_KEY for an openai brain's participants and the external-public
|
|
129
|
+
// plane's lobby-code reader; a local-agent brain's participants run on the operator's signed-in
|
|
130
|
+
// agent instead.
|
|
131
|
+
const missing = missingKeys(plan.requirements, env);
|
|
132
|
+
if (missing.length > 0) {
|
|
133
|
+
return fail("HUMANISH_SHARED_WORLD_KEYS_MISSING", `Live concurrent shared-world labs need ${missing.join(" and ")} in the environment (values are never persisted). ${describeMissingKeys(missing, env)}`);
|
|
137
134
|
}
|
|
138
135
|
if (plan.brain.kind === "local-agent") {
|
|
139
|
-
// A missing or signed-out agent found after the
|
|
136
|
+
// A missing or signed-out agent found after the participants' desktops are paid for is the same
|
|
140
137
|
// news at the worst moment.
|
|
141
138
|
const refusal = await localAgentRefusal({ agent: plan.brain.agent, env, caps: plan.caps });
|
|
142
139
|
if (refusal)
|
|
143
140
|
return fail(LOCAL_AGENT_REFUSAL_CODES[refusal.kind], refusal.message);
|
|
144
141
|
}
|
|
145
|
-
const
|
|
146
|
-
if (
|
|
147
|
-
return fail("
|
|
142
|
+
const unsetSubjectEnv = missingSubjectEnv(plan.requirements, env);
|
|
143
|
+
if (unsetSubjectEnv.length > 0) {
|
|
144
|
+
return fail("HUMANISH_SHARED_WORLD_SUBJECT_ENV_MISSING", `subject.env declares ${unsetSubjectEnv.join(", ")} but the environment does not provide ${unsetSubjectEnv.length === 1 ? "it" : "them"} (pass via --env-file; values are never persisted).`);
|
|
148
145
|
}
|
|
149
146
|
return undefined;
|
|
150
147
|
}
|
|
@@ -160,7 +157,7 @@ function runAdmittedSharedWorldRun(plan, input, config) {
|
|
|
160
157
|
});
|
|
161
158
|
}
|
|
162
159
|
function completeSharedWorldAnalysis(plan, input, result, finished) {
|
|
163
|
-
return completeAutomaticAnalysis(result, finished, plan.analysis?.config, input
|
|
160
|
+
return completeAutomaticAnalysis(result, finished, plan.analysis?.config, input, {
|
|
164
161
|
...(plan.analysis === undefined ? {} : { trigger: plan.analysis.trigger }),
|
|
165
162
|
preferLargerOutput: plan.analysis?.preferLargerOutput === true,
|
|
166
163
|
});
|
|
@@ -180,8 +177,8 @@ function sharedWorldFailure(plan, input) {
|
|
|
180
177
|
async function runPlanInScope(plan, input, config, scope) {
|
|
181
178
|
const { dryRun } = plan;
|
|
182
179
|
const requestedCwd = path.resolve(input.cwd);
|
|
183
|
-
const
|
|
184
|
-
const env =
|
|
180
|
+
const deps = input.deps ?? {};
|
|
181
|
+
const env = input.env ?? process.env;
|
|
185
182
|
const fail = sharedWorldFailure(plan, input);
|
|
186
183
|
const descriptor = sharedWorldDescriptorOf(plan.actor);
|
|
187
184
|
const planeClass = plan.plane.kind === "external-public" ? "external-public" : "provisioned-getHost";
|
|
@@ -194,7 +191,7 @@ async function runPlanInScope(plan, input, config, scope) {
|
|
|
194
191
|
const subjectRepo = plan.residual.subject.repos?.[0] ?? "";
|
|
195
192
|
const subjectEnvNames = [...(subject?.env ?? [])];
|
|
196
193
|
const checkpoints = [...(subject?.state.checkpoint ?? [])];
|
|
197
|
-
const runSession =
|
|
194
|
+
const runSession = deps.runSession ?? descriptor.runSession;
|
|
198
195
|
const openaiApiKey = env.OPENAI_API_KEY?.trim() ?? "";
|
|
199
196
|
const e2bApiKey = env.E2B_API_KEY?.trim() ?? "";
|
|
200
197
|
const knownSecretValues = [
|
|
@@ -212,7 +209,7 @@ async function runPlanInScope(plan, input, config, scope) {
|
|
|
212
209
|
input,
|
|
213
210
|
config,
|
|
214
211
|
requestedCwd,
|
|
215
|
-
|
|
212
|
+
deps,
|
|
216
213
|
env,
|
|
217
214
|
descriptor,
|
|
218
215
|
planeClass,
|
|
@@ -236,13 +233,13 @@ async function runPlanInScope(plan, input, config, scope) {
|
|
|
236
233
|
const { ctx, live, results } = prepared;
|
|
237
234
|
const planeRan = await runPlane(ctx, live, results, prepared.plane);
|
|
238
235
|
if (!planeRan) {
|
|
239
|
-
return fail("
|
|
236
|
+
return fail("HUMANISH_SHARED_WORLD_INVALID", "the provisioned-getHost concurrent shared-world route requires `subject.serve`.", descriptor.id);
|
|
240
237
|
}
|
|
241
238
|
return finishConcurrentRun(ctx, live, results, prepared.finish);
|
|
242
239
|
}
|
|
243
240
|
/**
|
|
244
|
-
* Runs the plane the
|
|
245
|
-
* every exit. Returns false when a provisioned
|
|
241
|
+
* Runs the plane the study declares, then finalizes email receiving and stops the participants'
|
|
242
|
+
* flush on every exit. Returns false when a provisioned study reaches it without `subject.serve`.
|
|
246
243
|
*/
|
|
247
244
|
async function runPlane(ctx, live, results, plane) {
|
|
248
245
|
const { dryRun } = ctx.plan;
|
|
@@ -270,7 +267,7 @@ async function runPlane(ctx, live, results, plane) {
|
|
|
270
267
|
catch {
|
|
271
268
|
ctx.warnings.push("Email finalization could not complete. Inspect humanish comms recover; provider cleanup remains unresolved.");
|
|
272
269
|
}
|
|
273
|
-
// Stop the
|
|
270
|
+
// Stop the participants' flush timer on every exit, before the final write.
|
|
274
271
|
await live.flush?.stop();
|
|
275
272
|
}
|
|
276
273
|
return true;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import type { CuaActorDescriptor } from "../../actors/registry.js";
|
|
2
2
|
import type { LabConfig, LabSubjectServe, LabSubjectStateCheckpoint } from "../../lab/types.js";
|
|
3
3
|
import type { RunScope } from "../../run/run.js";
|
|
4
|
-
import type { ConcurrentSharedWorldLabErrorCode, ConcurrentSharedWorldLabResult, ConcurrentSharedWorldPlaneClass, FinishFacts, LiveParticipants, PlaneContext, PlaneResults, PlaneSelection,
|
|
4
|
+
import type { ConcurrentSharedWorldLabErrorCode, ConcurrentSharedWorldLabResult, ConcurrentSharedWorldPlaneClass, FinishFacts, LiveParticipants, PlaneContext, PlaneResults, PlaneSelection, SharedWorldRunInput } from "./types.js";
|
|
5
|
+
import type { LabDeps } from "../../lab/lab-deps.js";
|
|
5
6
|
import type { SharedWorldPlan } from "../../lab/plan-types.js";
|
|
6
7
|
/** What validation derived from the lab, which setup reads. */
|
|
7
8
|
interface AdmittedLab {
|
|
8
9
|
plan: SharedWorldPlan;
|
|
9
10
|
input: SharedWorldRunInput;
|
|
10
|
-
/** Read
|
|
11
|
-
*
|
|
11
|
+
/** Read for the subject's serve URL, which each participant's subject names. Participants, their
|
|
12
|
+
* count and their host and entry come from the plan's participants. */
|
|
12
13
|
config: LabConfig;
|
|
13
14
|
requestedCwd: string;
|
|
14
|
-
|
|
15
|
+
deps: LabDeps;
|
|
15
16
|
env: Record<string, string | undefined>;
|
|
16
17
|
descriptor: CuaActorDescriptor;
|
|
17
18
|
planeClass: ConcurrentSharedWorldPlaneClass;
|
|
@@ -31,7 +32,7 @@ interface AdmittedLab {
|
|
|
31
32
|
fail: (code: ConcurrentSharedWorldLabErrorCode, message: string, actorLabel?: string) => ConcurrentSharedWorldLabResult;
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
|
-
* Starts the run and prepares what the planes read: the physical project, the run, the
|
|
35
|
+
* Starts the run and prepares what the planes read: the physical project, the run, the participant
|
|
35
36
|
* specs, comms, the packed tree and email receiving. Returns the refusal when one of them fails.
|
|
36
37
|
*/
|
|
37
38
|
export declare function prepareConcurrentRun(lab: AdmittedLab, scope: RunScope): Promise<{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Starts a concurrent shared-world run and prepares what its plane reads: the physical project,
|
|
2
|
-
// the run, the
|
|
2
|
+
// the run, the participant specs, comms, the packed tree and email receiving.
|
|
3
3
|
import { randomBytes } from "node:crypto";
|
|
4
4
|
import { realpath } from "node:fs/promises";
|
|
5
5
|
import { buildRunSource } from "../../run/bundle.js";
|
|
@@ -10,7 +10,7 @@ import { prepareEmailReceiving, prepareExternalComms, receivingSourceOf, subject
|
|
|
10
10
|
import { declaredOriginDigestOf } from "./external-public.js";
|
|
11
11
|
import { packSubjectTree } from "./provisioned.js";
|
|
12
12
|
import { emptyPlaneResults } from "./result.js";
|
|
13
|
-
import { buildParticipantSpecs, defaultSessionTimeoutMs } from "./
|
|
13
|
+
import { buildParticipantSpecs, defaultSessionTimeoutMs } from "./participant-specs.js";
|
|
14
14
|
import { planeStateOf } from "./plan.js";
|
|
15
15
|
import path from "node:path";
|
|
16
16
|
import { e2bRequestTimeoutMs } from "../../substrates/e2b/lifetime.js";
|
|
@@ -49,7 +49,7 @@ async function bindPhysicalProject(requestedCwd) {
|
|
|
49
49
|
.physicalPath;
|
|
50
50
|
}
|
|
51
51
|
function startConcurrentRun(lab, cwd, scope) {
|
|
52
|
-
const { plan, input,
|
|
52
|
+
const { plan, input, deps } = lab;
|
|
53
53
|
return scope.startRun({
|
|
54
54
|
cwd,
|
|
55
55
|
runId: input.runId,
|
|
@@ -57,15 +57,15 @@ function startConcurrentRun(lab, cwd, scope) {
|
|
|
57
57
|
mode: plan.dryRun ? "dry-run" : "live",
|
|
58
58
|
lab: plan.lab,
|
|
59
59
|
renderReview: renderConcurrentReviewMarkdown,
|
|
60
|
-
observer: { open: input.open === true, render:
|
|
60
|
+
observer: { open: input.open === true, render: deps.renderObserver },
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* Starts the run and prepares what the planes read: the physical project, the run, the
|
|
64
|
+
* Starts the run and prepares what the planes read: the physical project, the run, the participant
|
|
65
65
|
* specs, comms, the packed tree and email receiving. Returns the refusal when one of them fails.
|
|
66
66
|
*/
|
|
67
67
|
export async function prepareConcurrentRun(lab, scope) {
|
|
68
|
-
const { plan, input, config, requestedCwd,
|
|
68
|
+
const { plan, input, config, requestedCwd, deps, env, descriptor, planeClass, fail } = lab;
|
|
69
69
|
const { runBudget, runSession, localTreeRoute, subjectEnvNames, publicRepo } = lab;
|
|
70
70
|
const { openaiApiKey, e2bApiKey, knownSecretValues, scrubKnownValues } = lab;
|
|
71
71
|
const { dryRun, concurrency } = plan;
|
|
@@ -73,22 +73,19 @@ export async function prepareConcurrentRun(lab, scope) {
|
|
|
73
73
|
const warnings = [];
|
|
74
74
|
// The comms catch and the packed tree are checked before the run starts, so a refusal leaves
|
|
75
75
|
// no run directory. Neither spends: the probe is one request and packing runs on the host.
|
|
76
|
-
const externalComms = await prepareExternalComms(plan.residual, planeClass, dryRun, warnings);
|
|
76
|
+
const externalComms = await prepareExternalComms(plan.residual, planeClass, dryRun, warnings, env);
|
|
77
77
|
if (!externalComms.ok) {
|
|
78
|
-
return {
|
|
79
|
-
ok: false,
|
|
80
|
-
result: fail("HUMANISH_CONCURRENT_SHARED_WORLD_LAB_COMMS_CATCH_UNREACHABLE", externalComms.message),
|
|
81
|
-
};
|
|
78
|
+
return { ok: false, result: fail(externalComms.code, externalComms.message) };
|
|
82
79
|
}
|
|
83
80
|
// Pack the working tree once per run, on the host, before any sandbox exists: a packing
|
|
84
81
|
// failure fails the run closed without sandbox cost. Dry-run packs nothing.
|
|
85
82
|
const packed = localTreeRoute && !dryRun
|
|
86
|
-
? await packSubjectTree(cwd, plan.residual,
|
|
83
|
+
? await packSubjectTree(cwd, plan.residual, deps, scrubKnownValues)
|
|
87
84
|
: { ok: true, archive: undefined, buffer: undefined };
|
|
88
85
|
if (!packed.ok) {
|
|
89
86
|
return {
|
|
90
87
|
ok: false,
|
|
91
|
-
result: fail("
|
|
88
|
+
result: fail("HUMANISH_SHARED_WORLD_FAILED", packed.message, descriptor.id),
|
|
92
89
|
};
|
|
93
90
|
}
|
|
94
91
|
const localTreeArchive = packed.archive;
|
|
@@ -102,9 +99,9 @@ export async function prepareConcurrentRun(lab, scope) {
|
|
|
102
99
|
const timeoutMs = plan.sessionTimeoutMs ?? defaultSessionTimeoutMs(plan);
|
|
103
100
|
const requestTimeoutMs = e2bRequestTimeoutMs(env);
|
|
104
101
|
const redactScreenshots = plan.residual.policies?.redactScreenshots === true;
|
|
105
|
-
const timers =
|
|
106
|
-
const now =
|
|
107
|
-
const proberCadenceMs =
|
|
102
|
+
const timers = deps.detachedTimers ?? {};
|
|
103
|
+
const now = deps.now ?? Date.now;
|
|
104
|
+
const proberCadenceMs = deps.proberCadenceMs ?? DEFAULT_PROBER_CADENCE_MS;
|
|
108
105
|
const seedDigest = seedRecipeDigest(planeStateOf(plan));
|
|
109
106
|
const source = await buildRunSource({
|
|
110
107
|
capturedAt: createdAt,
|
|
@@ -134,7 +131,7 @@ export async function prepareConcurrentRun(lab, scope) {
|
|
|
134
131
|
return {
|
|
135
132
|
ok: false,
|
|
136
133
|
result: {
|
|
137
|
-
...fail("
|
|
134
|
+
...fail("HUMANISH_SHARED_WORLD_INVALID", email.message, descriptor.id),
|
|
138
135
|
runId,
|
|
139
136
|
},
|
|
140
137
|
};
|
|
@@ -147,7 +144,7 @@ export async function prepareConcurrentRun(lab, scope) {
|
|
|
147
144
|
input,
|
|
148
145
|
config,
|
|
149
146
|
descriptor,
|
|
150
|
-
|
|
147
|
+
deps,
|
|
151
148
|
env,
|
|
152
149
|
concurrency,
|
|
153
150
|
runBudget,
|
|
@@ -155,6 +152,7 @@ export async function prepareConcurrentRun(lab, scope) {
|
|
|
155
152
|
openaiApiKey,
|
|
156
153
|
e2bApiKey,
|
|
157
154
|
scrubKnownValues,
|
|
155
|
+
knownSecretValues,
|
|
158
156
|
cwd,
|
|
159
157
|
run,
|
|
160
158
|
runId,
|