humanish 0.106.1 → 0.107.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/AGENTS.md +4 -4
- package/ARCHITECTURE.md +17 -16
- package/CHANGELOG.md +14 -0
- package/CONTEXT.md +42 -39
- package/CONTRIBUTING.md +8 -8
- package/README.md +8 -3
- 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.js +2 -1
- 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/qualified-versions.d.ts +30 -3
- package/dist/actors/codex/qualified-versions.js +50 -5
- package/dist/actors/codex/restricted-executable.d.ts +24 -0
- package/dist/actors/codex/restricted-executable.js +97 -22
- package/dist/actors/codex/restricted-launch.d.ts +7 -1
- package/dist/actors/codex/restricted-launch.js +42 -3
- 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 +60 -2
- package/dist/actors/codex/restricted-policy.d.ts +9 -1
- package/dist/actors/codex/restricted-session.d.ts +14 -1
- package/dist/actors/codex/restricted-session.js +50 -17
- 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 +1 -1
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/loop/backstop.js +1 -1
- package/dist/actors/computer-use/loop/ending.d.ts +2 -2
- package/dist/actors/computer-use/loop/ending.js +2 -2
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +3 -3
- package/dist/actors/computer-use/loop/trace.js +2 -2
- package/dist/actors/computer-use/loop/types.d.ts +14 -5
- package/dist/actors/computer-use/loop.js +4 -4
- package/dist/actors/computer-use/openai-provider.d.ts +1 -1
- package/dist/actors/computer-use/openai-provider.js +2 -2
- package/dist/actors/contract.d.ts +9 -7
- package/dist/actors/local-agent/cli.js +1 -1
- package/dist/actors/scripted-browser/actor.d.ts +2 -2
- package/dist/actors/scripted-browser/journey.js +15 -4
- package/dist/actors/scripted-browser/steps.js +18 -0
- package/dist/actors/scripted-browser/types.d.ts +11 -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/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 +31 -12
- 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 +4 -2
- package/dist/cli/commands/comms.js +8 -1
- package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
- package/dist/cli/commands/lab-route-computer-use.js +26 -14
- package/dist/cli/commands/lab-route-preview.d.ts +1 -3
- package/dist/cli/commands/lab-route-preview.js +3 -4
- 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 +0 -1
- 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 +76 -45
- package/dist/cli/commands/lab-scorer.d.ts +0 -2
- package/dist/cli/commands/lab.js +12 -6
- package/dist/cli/commands/observe.js +22 -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 +10 -8
- package/dist/cli/commands/watch.js +12 -10
- package/dist/cli/doctor.d.ts +3 -0
- package/dist/cli/doctor.js +10 -2
- package/dist/cli/io.d.ts +5 -4
- package/dist/cli/io.js +12 -8
- package/dist/cli/program.js +3 -3
- package/dist/cli/renamed-options.d.ts +11 -0
- package/dist/cli/renamed-options.js +18 -0
- package/dist/cli/telemetry.d.ts +2 -2
- package/dist/cli/telemetry.js +1 -1
- package/dist/comms/capture-surface.d.ts +1 -1
- package/dist/comms/catch-host.d.ts +1 -1
- package/dist/comms/connections.js +4 -4
- package/dist/comms/external-evidence.d.ts +27 -0
- package/dist/comms/external-evidence.js +93 -0
- package/dist/comms/lease-store.js +7 -7
- package/dist/comms/types.js +1 -1
- package/dist/evidence/browser-hygiene.d.ts +1 -1
- package/dist/evidence/browser-hygiene.js +1 -1
- package/dist/evidence/redaction.js +1 -1
- package/dist/evidence/secret-scrub.d.ts +9 -0
- package/dist/evidence/secret-scrub.js +96 -0
- package/dist/feedback/draft.js +7 -9
- package/dist/feedback/export-bundle.js +4 -4
- package/dist/feedback/export.js +9 -9
- package/dist/feedback/feedback.d.ts +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +3 -6
- package/dist/keys/key-resolution.d.ts +3 -1
- package/dist/keys/key-resolution.js +18 -16
- package/dist/lab/adapter-extension.d.ts +28 -6
- package/dist/lab/adapter-extension.js +65 -126
- package/dist/lab/adapter-scorer-loader.d.ts +25 -5
- package/dist/lab/adapter-scorer-loader.js +24 -0
- package/dist/lab/composition-rules.js +20 -20
- package/dist/lab/config.js +28 -26
- package/dist/lab/device-presets.d.ts +2 -2
- package/dist/lab/discover.js +1 -3
- package/dist/lab/doctor.d.ts +44 -9
- package/dist/lab/doctor.js +149 -41
- package/dist/lab/init-plan.js +1 -3
- package/dist/lab/keys.js +1 -1
- package/dist/lab/lab-deps.d.ts +85 -0
- package/dist/lab/lab-deps.js +4 -0
- package/dist/lab/parse/actors.js +8 -7
- package/dist/lab/parse/comms.js +3 -2
- package/dist/lab/parse/execution.js +3 -2
- package/dist/lab/parse/subject-state.js +2 -1
- package/dist/lab/parse/subject.js +2 -1
- package/dist/lab/parse/values.d.ts +0 -1
- package/dist/lab/parse/values.js +0 -3
- package/dist/lab/persona-resolve.d.ts +3 -3
- package/dist/lab/persona-resolve.js +4 -4
- 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 +5 -5
- package/dist/lab/plan-participants.js +2 -2
- package/dist/lab/plan-types.d.ts +22 -4
- package/dist/lab/plan.d.ts +3 -11
- package/dist/lab/plan.js +18 -42
- package/dist/lab/preflight-result.js +0 -2
- package/dist/lab/preflight.d.ts +0 -3
- package/dist/lab/preflight.js +1 -1
- 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 +19 -24
- package/dist/lab/routing.js +14 -47
- package/dist/lab/run-lab-events.d.ts +6 -11
- package/dist/lab/run-lab-events.js +3 -11
- package/dist/lab/run-lab-homes.d.ts +64 -0
- package/dist/lab/run-lab-homes.js +3 -0
- package/dist/lab/run-lab-options.d.ts +12 -66
- package/dist/lab/run-lab-options.js +45 -275
- package/dist/lab/summary.d.ts +9 -4
- package/dist/lab/summary.js +15 -8
- package/dist/lab/types.d.ts +132 -132
- package/dist/lab/validation.d.ts +15 -15
- package/dist/lab/validation.js +28 -28
- package/dist/lab/warnings.js +20 -19
- package/dist/observer/artifact.d.ts +1 -1
- package/dist/observer/artifact.js +3 -3
- package/dist/observer/data.js +2 -2
- package/dist/observer/render.js +2 -2
- package/dist/observer/run-routes.d.ts +1 -1
- package/dist/observer/run-routes.js +5 -5
- package/dist/observer/serve.d.ts +17 -0
- package/dist/observer/serve.js +34 -3
- package/dist/routes/computer-use/bundle-parts.d.ts +1 -1
- package/dist/routes/computer-use/bundle-parts.js +10 -3
- package/dist/routes/computer-use/bundle.d.ts +4 -11
- package/dist/routes/computer-use/bundle.js +9 -15
- 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 +10 -10
- package/dist/routes/computer-use/e2b-desktop/comms.js +11 -14
- package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -7
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +13 -13
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -11
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
- package/dist/routes/computer-use/e2b-desktop/prepare.js +33 -36
- package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/start.js +24 -23
- 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 +29 -17
- 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 +25 -29
- package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +25 -19
- 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 +19 -27
- package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +12 -11
- 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 +39 -66
- 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} +10 -10
- package/dist/routes/computer-use/{lanes.js → participant-execution.js} +35 -22
- 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 +19 -11
- package/dist/routes/computer-use/participant-model.js +49 -25
- package/dist/routes/computer-use/participant-prompt.d.ts +3 -3
- package/dist/routes/computer-use/participant-prompt.js +4 -4
- package/dist/routes/computer-use/participant-runs.d.ts +6 -6
- package/dist/routes/computer-use/participant-runs.js +8 -8
- package/dist/routes/computer-use/plan.d.ts +21 -29
- package/dist/routes/computer-use/plan.js +52 -60
- package/dist/routes/computer-use/preflight.d.ts +3 -5
- package/dist/routes/computer-use/preflight.js +20 -16
- package/dist/routes/computer-use/rerun-selection.js +10 -6
- package/dist/routes/computer-use/result.d.ts +1 -1
- package/dist/routes/computer-use/result.js +40 -30
- package/dist/routes/computer-use/route.d.ts +3 -4
- package/dist/routes/computer-use/route.js +21 -19
- package/dist/routes/computer-use/self-report.d.ts +2 -2
- package/dist/routes/computer-use/self-report.js +4 -4
- package/dist/routes/computer-use/setup.d.ts +8 -14
- package/dist/routes/computer-use/setup.js +96 -72
- package/dist/routes/computer-use/single-bundle.d.ts +8 -11
- package/dist/routes/computer-use/single-bundle.js +20 -25
- package/dist/routes/computer-use/subject-projection.d.ts +5 -7
- package/dist/routes/computer-use/subject-projection.js +20 -19
- package/dist/routes/computer-use/types.d.ts +169 -210
- package/dist/routes/computer-use/types.js +13 -5
- package/dist/routes/preview.js +0 -1
- package/dist/routes/scripted/bundle.d.ts +3 -6
- package/dist/routes/scripted/bundle.js +11 -16
- package/dist/routes/scripted/plan.d.ts +5 -7
- package/dist/routes/scripted/plan.js +6 -4
- package/dist/routes/scripted/result.d.ts +4 -1
- package/dist/routes/scripted/result.js +10 -6
- package/dist/routes/scripted/route.js +10 -11
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +1 -1
- package/dist/routes/scripted/setup.d.ts +3 -2
- package/dist/routes/scripted/setup.js +22 -21
- package/dist/routes/scripted/subject.d.ts +8 -3
- package/dist/routes/scripted/subject.js +9 -5
- package/dist/routes/scripted/surface-records.js +1 -1
- 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 +19 -36
- package/dist/routes/scripted/types.js +1 -2
- package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +8 -8
- package/dist/routes/shared-world/bundle.d.ts +2 -2
- package/dist/routes/shared-world/bundle.js +22 -26
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +4 -4
- package/dist/routes/shared-world/comms.d.ts +5 -4
- package/dist/routes/shared-world/comms.js +28 -41
- package/dist/routes/shared-world/external-public.d.ts +5 -5
- package/dist/routes/shared-world/external-public.js +19 -20
- package/dist/routes/shared-world/handoff.d.ts +4 -4
- package/dist/routes/shared-world/handoff.js +50 -50
- package/dist/routes/shared-world/lobby-code.d.ts +5 -5
- package/dist/routes/shared-world/lobby-code.js +13 -13
- package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +8 -6
- package/dist/routes/shared-world/{seats.js → participant-specs.js} +43 -48
- package/dist/routes/shared-world/plan.d.ts +2 -6
- package/dist/routes/shared-world/plan.js +1 -2
- 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 +46 -40
- package/dist/routes/shared-world/result.js +31 -19
- package/dist/routes/shared-world/route.js +37 -41
- package/dist/routes/shared-world/setup.d.ts +5 -4
- package/dist/routes/shared-world/setup.js +12 -14
- package/dist/routes/shared-world/types.d.ts +53 -126
- package/dist/routes/shared-world/types.js +2 -2
- package/dist/routes/terminal/adapter.d.ts +8 -8
- package/dist/routes/terminal/adapter.js +28 -125
- package/dist/routes/terminal/bundle.d.ts +7 -12
- package/dist/routes/terminal/bundle.js +24 -34
- package/dist/routes/terminal/credentials.d.ts +2 -2
- package/dist/routes/terminal/credentials.js +16 -16
- package/dist/routes/terminal/dry-run.d.ts +1 -1
- package/dist/routes/terminal/dry-run.js +9 -11
- package/dist/routes/terminal/encoding.d.ts +1 -1
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +6 -6
- package/dist/routes/terminal/ledger.js +9 -9
- package/dist/routes/terminal/live-finish.d.ts +1 -2
- package/dist/routes/terminal/live-finish.js +21 -20
- package/dist/routes/terminal/live-sandbox.d.ts +3 -2
- package/dist/routes/terminal/live-sandbox.js +20 -20
- package/dist/routes/terminal/participant-text.d.ts +23 -0
- package/dist/routes/terminal/participant-text.js +165 -0
- package/dist/routes/terminal/plan.d.ts +2 -6
- package/dist/routes/terminal/plan.js +13 -9
- package/dist/routes/terminal/recorder.d.ts +6 -1
- package/dist/routes/terminal/recorder.js +12 -4
- package/dist/routes/terminal/result.js +4 -4
- package/dist/routes/terminal/route.js +26 -26
- package/dist/routes/terminal/runtime.d.ts +3 -2
- package/dist/routes/terminal/runtime.js +3 -3
- package/dist/routes/terminal/sandbox.d.ts +3 -3
- package/dist/routes/terminal/sandbox.js +9 -9
- package/dist/routes/terminal/session.js +16 -14
- package/dist/routes/terminal/token-usage.js +5 -5
- package/dist/routes/terminal/trace.d.ts +5 -8
- package/dist/routes/terminal/trace.js +9 -64
- package/dist/routes/terminal/types.d.ts +85 -93
- package/dist/routes/terminal/types.js +9 -4
- 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 +4 -4
- package/dist/run/bundle.d.ts +63 -56
- package/dist/run/bundle.js +9 -8
- package/dist/run/cost-summary.js +3 -2
- package/dist/run/costs.d.ts +6 -6
- package/dist/run/costs.js +10 -10
- package/dist/run/detail.d.ts +5 -5
- package/dist/run/detail.js +6 -6
- package/dist/run/dry-run.js +5 -12
- 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 +16 -4
- package/dist/run/judge.js +24 -7
- 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.js +1 -1
- package/dist/run/pricing.d.ts +19 -9
- package/dist/run/pricing.js +30 -18
- package/dist/run/projection.d.ts +13 -13
- package/dist/run/projection.js +8 -8
- package/dist/run/reclaim.d.ts +6 -0
- package/dist/run/reclaim.js +13 -3
- package/dist/run/results.d.ts +1 -1
- package/dist/run/run-index.d.ts +1 -1
- package/dist/run/run-index.js +11 -11
- package/dist/run/run.d.ts +4 -2
- package/dist/run/run.js +9 -5
- package/dist/run/sandbox-receipts.d.ts +4 -4
- package/dist/run/sandbox-receipts.js +4 -4
- package/dist/run/shared-world-evidence.d.ts +47 -47
- package/dist/run/shared-world-shape.d.ts +3 -3
- package/dist/run/shared-world-shape.js +11 -11
- package/dist/run/stats.d.ts +5 -5
- package/dist/run/stats.js +8 -8
- package/dist/run/status.d.ts +16 -6
- package/dist/run/status.js +31 -8
- package/dist/run/streams.d.ts +26 -19
- package/dist/run/terminal-contract.d.ts +5 -5
- package/dist/run/terminal-contract.js +4 -4
- 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 +36 -34
- package/dist/run-lab.js +41 -37
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +1 -1
- package/dist/subject/local-tree-archive.d.ts +1 -1
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +2 -2
- 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 +5 -5
- package/dist/subject/serve.js +1 -1
- package/dist/subject/steps.d.ts +4 -4
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/e2b/cdp-probe.d.ts +2 -2
- package/dist/substrates/e2b/cdp-probe.js +1 -1
- package/dist/substrates/e2b/desktop-browser.d.ts +3 -3
- package/dist/substrates/e2b/desktop-browser.js +4 -4
- package/dist/substrates/e2b/desktop-cdp.d.ts +7 -7
- package/dist/substrates/e2b/desktop-cdp.js +4 -4
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +3 -3
- package/dist/substrates/e2b/desktop-media.js +2 -2
- package/dist/substrates/e2b/sandbox.js +1 -1
- package/dist/substrates/e2b/sdk.js +2 -2
- 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 +7 -5
- package/dist/tui/actions.js +18 -9
- package/dist/tui-app.js +42 -42
- package/dist/verify/actor.d.ts +10 -10
- package/dist/verify/actor.js +15 -15
- package/dist/verify/artifacts.d.ts +1 -1
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/costs.d.ts +2 -2
- package/dist/verify/costs.js +2 -2
- 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.js +2 -2
- package/dist/verify/verify.js +6 -6
- package/docs/README.md +1 -1
- package/docs/architecture/actor-contract.md +60 -22
- package/docs/architecture/desktop-sessions.md +9 -9
- package/docs/architecture/external-public-shared-world.md +5 -0
- package/docs/architecture/observer.md +4 -4
- package/docs/architecture/restricted-codex-analysis.md +36 -2
- package/docs/architecture/state-driven-executor.md +4 -5
- package/docs/architecture/task-protocol-support.md +3 -5
- package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +24 -16
- package/docs/contracts/run-bundle.md +10 -8
- package/docs/contracts/schemas.md +109 -53
- package/docs/contracts/study-analysis.md +24 -0
- package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
- package/docs/product/automatic-analysis.md +1 -0
- package/docs/ramp/README.md +2 -1
- package/package.json +4 -4
- package/skills/humanish/SKILL.md +3 -2
- package/skills/humanish/agents/openai.yaml +1 -1
- 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/routes/computer-use/legacy-lane-spec.d.ts +0 -62
- package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
- /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
- /package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +0 -0
- /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
package/dist/lab/route-inputs.js
CHANGED
|
@@ -1,95 +1,92 @@
|
|
|
1
|
-
// What each route's run takes from runLab's options: the shared run settings, the
|
|
2
|
-
//
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export function computerUseInput(options) {
|
|
1
|
+
// What each route's run takes from runLab's options: the shared run settings, the typed options
|
|
2
|
+
// the route reads, the event emitter, the test seams and the declared scorer's provenance.
|
|
3
|
+
import { browserRouteScorer, terminalRouteScorer, } from "./adapter-scorer-loader.js";
|
|
4
|
+
export function computerUseInput(options, deps, emit) {
|
|
6
5
|
return {
|
|
7
6
|
...analysisOf(options),
|
|
8
7
|
cwd: options.cwd,
|
|
9
|
-
// CLI --count overrides the homogeneous fan-out
|
|
8
|
+
// CLI --count overrides the homogeneous fan-out participant count (a declared roster's length wins).
|
|
10
9
|
...(options.count === undefined ? {} : { countOverride: options.count }),
|
|
11
10
|
...(options.open === undefined ? {} : { open: options.open }),
|
|
12
11
|
...(options.onObserverReady === undefined ? {} : { onObserverReady: options.onObserverReady }),
|
|
13
12
|
...(options.runId === undefined ? {} : { runId: options.runId }),
|
|
14
13
|
...(options.rerun === undefined ? {} : { rerun: options.rerun }),
|
|
15
|
-
...(options.
|
|
16
|
-
...
|
|
14
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
15
|
+
...(options.prepareDesktop === undefined ? {} : { prepareDesktop: options.prepareDesktop }),
|
|
16
|
+
...(options.createProvider === undefined ? {} : { createProvider: options.createProvider }),
|
|
17
|
+
...(options.inProcess === undefined ? {} : { inProcess: options.inProcess }),
|
|
18
|
+
...(options.localVm === undefined ? {} : { localVm: options.localVm }),
|
|
19
|
+
...observersOf(options, emit),
|
|
20
|
+
deps,
|
|
21
|
+
...scorerOf(options, browserRouteScorer),
|
|
17
22
|
};
|
|
18
23
|
}
|
|
19
|
-
export function scriptedInput(options) {
|
|
24
|
+
export function scriptedInput(options, deps, emit) {
|
|
20
25
|
return {
|
|
21
26
|
...analysisOf(options),
|
|
27
|
+
...(emit === undefined ? {} : { emit }),
|
|
22
28
|
cwd: options.cwd,
|
|
23
29
|
...(options.open === undefined ? {} : { open: options.open }),
|
|
24
30
|
...(options.runId === undefined ? {} : { runId: options.runId }),
|
|
25
|
-
...(options.
|
|
31
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
32
|
+
...(options.prepareDesktop === undefined ? {} : { prepareDesktop: options.prepareDesktop }),
|
|
33
|
+
deps,
|
|
26
34
|
};
|
|
27
35
|
}
|
|
28
|
-
export function terminalInput(options) {
|
|
36
|
+
export function terminalInput(options, deps, emit) {
|
|
29
37
|
return {
|
|
30
38
|
...analysisOf(options),
|
|
39
|
+
...(emit === undefined ? {} : { emit }),
|
|
31
40
|
cwd: options.cwd,
|
|
32
41
|
...(options.open === undefined ? {} : { open: options.open }),
|
|
33
42
|
...(options.runId === undefined ? {} : { runId: options.runId }),
|
|
34
|
-
...(options.
|
|
35
|
-
|
|
43
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
44
|
+
deps,
|
|
45
|
+
...scorerOf(options, terminalRouteScorer),
|
|
36
46
|
};
|
|
37
47
|
}
|
|
38
|
-
export function sharedWorldInput(options) {
|
|
48
|
+
export function sharedWorldInput(options, deps, emit) {
|
|
39
49
|
return {
|
|
40
50
|
...analysisOf(options),
|
|
41
51
|
cwd: options.cwd,
|
|
42
52
|
...(options.open === undefined ? {} : { open: options.open }),
|
|
43
53
|
...(options.onObserverReady === undefined ? {} : { onObserverReady: options.onObserverReady }),
|
|
44
54
|
...(options.runId === undefined ? {} : { runId: options.runId }),
|
|
45
|
-
...(options.
|
|
46
|
-
...
|
|
55
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
56
|
+
...(options.prepareDesktop === undefined ? {} : { prepareDesktop: options.prepareDesktop }),
|
|
57
|
+
...observersOf(options, emit),
|
|
58
|
+
deps,
|
|
59
|
+
...scorerOf(options, browserRouteScorer),
|
|
47
60
|
};
|
|
48
61
|
}
|
|
49
|
-
/** The computer-use input with a scorer loaded after admission (see withLateScorer). */
|
|
50
|
-
export function computerUseInputWithScorer(input, late) {
|
|
51
|
-
const hooks = late?.scorer === undefined ? undefined : scorerHooks(late.scorer);
|
|
52
|
-
return withLateScorer(input, HOOK_MEMBERS.cua, hooks, late);
|
|
53
|
-
}
|
|
54
|
-
/** The shared-world input with a scorer loaded after admission (see withLateScorer). */
|
|
55
|
-
export function sharedWorldInputWithScorer(input, late) {
|
|
56
|
-
const hooks = late?.scorer === undefined ? undefined : scorerHooks(late.scorer);
|
|
57
|
-
return withLateScorer(input, HOOK_MEMBERS.sharedWorld, hooks, late);
|
|
58
|
-
}
|
|
59
|
-
/** The terminal input with a scorer loaded after admission. Terminal runs take no deriveArtifacts. */
|
|
60
|
-
export function terminalInputWithScorer(input, late) {
|
|
61
|
-
const scorer = late?.scorer;
|
|
62
|
-
const hooks = scorer === undefined
|
|
63
|
-
? undefined
|
|
64
|
-
: {
|
|
65
|
-
...(scorer.score === undefined ? {} : { score: scorer.score }),
|
|
66
|
-
...(scorer.deriveFeedback === undefined ? {} : { deriveFeedback: scorer.deriveFeedback }),
|
|
67
|
-
};
|
|
68
|
-
return withLateScorer(input, HOOK_MEMBERS.terminal, hooks, late);
|
|
69
|
-
}
|
|
70
62
|
/**
|
|
71
|
-
*
|
|
72
|
-
* caller
|
|
73
|
-
* members the route's checks already read stay the same objects.
|
|
63
|
+
* A route's input with a scorer loaded after admission, and the scorer's provenance, as if the
|
|
64
|
+
* caller had passed them up front. The rest of the input is the one the route's checks admitted.
|
|
74
65
|
*/
|
|
75
|
-
function withLateScorer(input,
|
|
66
|
+
export function withLateScorer(input, late, narrow) {
|
|
76
67
|
if (late === undefined)
|
|
77
68
|
return input;
|
|
78
69
|
return {
|
|
79
70
|
...input,
|
|
80
|
-
...(
|
|
81
|
-
? {}
|
|
82
|
-
: { hooks: withHookOverrides(input.hooks, declared, hooks) }),
|
|
71
|
+
...(late.scorer === undefined ? {} : { scorer: narrow(late.scorer) }),
|
|
83
72
|
...(late.scorerProvenance === undefined ? {} : { scorerProvenance: late.scorerProvenance }),
|
|
84
73
|
};
|
|
85
74
|
}
|
|
75
|
+
/** The caller's stream callback and the run's event emitter, for the routes that report them. */
|
|
76
|
+
function observersOf(options, emit) {
|
|
77
|
+
return {
|
|
78
|
+
...(options.onStream === undefined ? {} : { onStream: options.onStream }),
|
|
79
|
+
...(emit === undefined ? {} : { emit }),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
86
82
|
function analysisOf(options) {
|
|
87
|
-
return options.
|
|
88
|
-
? {}
|
|
89
|
-
: { automaticAnalysis: options.automaticAnalysis };
|
|
83
|
+
return options.analysisSignal === undefined ? {} : { analysisSignal: options.analysisSignal };
|
|
90
84
|
}
|
|
91
|
-
function scorerOf(options) {
|
|
92
|
-
return
|
|
93
|
-
? {}
|
|
94
|
-
|
|
85
|
+
function scorerOf(options, narrow) {
|
|
86
|
+
return {
|
|
87
|
+
...(options.scorer === undefined ? {} : { scorer: narrow(options.scorer) }),
|
|
88
|
+
...(options.scorerProvenance === undefined
|
|
89
|
+
? {}
|
|
90
|
+
: { scorerProvenance: options.scorerProvenance }),
|
|
91
|
+
};
|
|
95
92
|
}
|
package/dist/lab/routing.d.ts
CHANGED
|
@@ -9,13 +9,13 @@ export declare function registeredScriptedBrowserActors(): string[];
|
|
|
9
9
|
export declare function actorResolvesToTerminal(type: string | undefined): boolean;
|
|
10
10
|
export declare function registeredTerminalActors(): string[];
|
|
11
11
|
/**
|
|
12
|
-
* The declared fan-out
|
|
12
|
+
* The declared fan-out participant count on the computer-use route: a `lanes[]` roster's length, else
|
|
13
13
|
* a homogeneous `count`, else 1. The single source of truth shared by the parser, the engine,
|
|
14
|
-
* and the pre-flight plan so the
|
|
14
|
+
* and the pre-flight plan so the participant count is computed the same way everywhere.
|
|
15
15
|
*/
|
|
16
16
|
export declare function cuaLaneCount(config: LabConfig): number;
|
|
17
17
|
/**
|
|
18
|
-
* A participant's id: its declared roster id, else `lane-NN` (independent
|
|
18
|
+
* A participant's id: its declared roster id, else `lane-NN` (independent participants) or `role-NN`
|
|
19
19
|
* (shared-world seats) from its 0-based position. The parser's filled email recipients and the
|
|
20
20
|
* routes that name participants both call this, so a filled recipient names a participant that
|
|
21
21
|
* runs.
|
|
@@ -26,21 +26,33 @@ export declare function participantIdAt(index: number, declared: string | undefi
|
|
|
26
26
|
* actor resolves to a registered computer-use actor, or a clone subject on a hosted desktop
|
|
27
27
|
* whose first actor does. Single source of truth — routeOf and the warning logic
|
|
28
28
|
* both use it. (The app-url branch used to be unconditionally true; it narrowed when the
|
|
29
|
-
* scripted-browser
|
|
29
|
+
* scripted-browser route arrived. Behavior-preserving for every parse-valid config —
|
|
30
30
|
* routeOf keeps a bare app-url fallback to the cua backend so library-API configs
|
|
31
31
|
* with unknown actors still hit its fail-closed ACTOR_UNSUPPORTED.)
|
|
32
32
|
*/
|
|
33
33
|
export declare function isComputerUseComposition(config: LabConfig): boolean;
|
|
34
34
|
/**
|
|
35
35
|
* True when this config routes to the SHARED-WORLD backend (#164): a clone or local-tree subject
|
|
36
|
-
* on a hosted desktop whose first actor resolves to a computer-use actor
|
|
36
|
+
* on a hosted desktop whose first actor resolves to a computer-use actor and that declares the
|
|
37
37
|
* `shared-world` topology. Mirror of isComputerUseComposition; the single source of truth shared by
|
|
38
|
-
* routeOf (which checks it
|
|
38
|
+
* routeOf (which checks it before the cua route) and the warning logic. Every
|
|
39
39
|
* shared-world study runs its participants at once (`execution.concurrency` >= 2). The same
|
|
40
|
-
* clone/local-tree × e2b-desktop × computer-use composition
|
|
40
|
+
* clone/local-tree × e2b-desktop × computer-use composition without `topology: shared-world` stays per-lane-worlds
|
|
41
41
|
* (the cua route) — the topology declaration is the override switch.
|
|
42
42
|
*/
|
|
43
43
|
export declare function isSharedWorldComposition(config: LabConfig): boolean;
|
|
44
|
+
/** The getHost provisioned-subject shared-world shape (clone/local-tree served + exposed in-sandbox). */
|
|
45
|
+
export declare function isProvisionedSharedWorldComposition(config: LabConfig): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* The external-public shared-world shape (#164 phase 2): a real public deployment used directly as
|
|
48
|
+
* the shared plane — `source: app-url` + `topology: shared-world` + a computer-use actor on
|
|
49
|
+
* e2b-desktop + `policies.allowPublicTargets: true`. No getHost, no clone, no subject sandbox, no
|
|
50
|
+
* seed. The operator-ownership attestation `subject.publicTarget` is required (validated in
|
|
51
|
+
* externalPublicSharedWorldValidationReason, not here — this predicate is the router only, so a
|
|
52
|
+
* half-declared external-public config still routes here to get its precise fail-closed reason
|
|
53
|
+
* rather than silently downgrading to the per-participant cua route).
|
|
54
|
+
*/
|
|
55
|
+
export declare function isExternalPublicSharedWorldComposition(config: LabConfig): boolean;
|
|
44
56
|
/**
|
|
45
57
|
* Resolve a shared-world seat's entry URL from `serve.url` + a role's `entry` (relative path or
|
|
46
58
|
* same-origin absolute URL). Returns null when the combination is not a same-origin loopback URL
|
|
@@ -62,20 +74,3 @@ export declare function isProvisionedScriptedBrowserComposition(config: LabConfi
|
|
|
62
74
|
* the single source of truth for routeOf and the warning logic.
|
|
63
75
|
*/
|
|
64
76
|
export declare function isTerminalProductComposition(config: LabConfig): boolean;
|
|
65
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
66
|
-
export declare function routesToComputerUse(config: LabConfig): boolean;
|
|
67
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
68
|
-
export declare function routesToSharedWorld(config: LabConfig): boolean;
|
|
69
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
70
|
-
export declare function routesToProvisionedSharedWorld(config: LabConfig): boolean;
|
|
71
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
72
|
-
export declare function routesToExternalPublicSharedWorld(config: LabConfig): boolean;
|
|
73
|
-
/**
|
|
74
|
-
* @deprecated Every shared-world study runs its participants at once since the sequential
|
|
75
|
-
* shared-world route was removed. Use `routeOf`; this alias goes in the next minor.
|
|
76
|
-
*/
|
|
77
|
-
export declare function routesToConcurrentSharedWorld(config: LabConfig): boolean;
|
|
78
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
79
|
-
export declare function routesToScriptedBrowser(config: LabConfig): boolean;
|
|
80
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
81
|
-
export declare function routesToTerminalProduct(config: LabConfig): boolean;
|
package/dist/lab/routing.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { actorRegistry } from "../actors/registry.js";
|
|
2
2
|
import { isLoopbackUrl } from "./parse/subject.js";
|
|
3
|
-
// Hard cap on fan-out
|
|
3
|
+
// Hard cap on fan-out participants (per the ratified design). No HUMANISH_MAX_LANES escape above this
|
|
4
4
|
// until a reference panel demands it — N concurrent paid desktops is real money.
|
|
5
5
|
export const MAX_CUA_LANES = 16;
|
|
6
6
|
// Run kinds whose evidence is the participant's screenshots. An actor that declares it produces none
|
|
@@ -45,9 +45,9 @@ export function registeredTerminalActors() {
|
|
|
45
45
|
return registeredActorsOn("terminal");
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
-
* The declared fan-out
|
|
48
|
+
* The declared fan-out participant count on the computer-use route: a `lanes[]` roster's length, else
|
|
49
49
|
* a homogeneous `count`, else 1. The single source of truth shared by the parser, the engine,
|
|
50
|
-
* and the pre-flight plan so the
|
|
50
|
+
* and the pre-flight plan so the participant count is computed the same way everywhere.
|
|
51
51
|
*/
|
|
52
52
|
export function cuaLaneCount(config) {
|
|
53
53
|
const actor = config.actors[0];
|
|
@@ -57,7 +57,7 @@ export function cuaLaneCount(config) {
|
|
|
57
57
|
return actor?.count ?? 1;
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
* A participant's id: its declared roster id, else `lane-NN` (independent
|
|
60
|
+
* A participant's id: its declared roster id, else `lane-NN` (independent participants) or `role-NN`
|
|
61
61
|
* (shared-world seats) from its 0-based position. The parser's filled email recipients and the
|
|
62
62
|
* routes that name participants both call this, so a filled recipient names a participant that
|
|
63
63
|
* runs.
|
|
@@ -70,7 +70,7 @@ export function participantIdAt(index, declared, kind) {
|
|
|
70
70
|
* actor resolves to a registered computer-use actor, or a clone subject on a hosted desktop
|
|
71
71
|
* whose first actor does. Single source of truth — routeOf and the warning logic
|
|
72
72
|
* both use it. (The app-url branch used to be unconditionally true; it narrowed when the
|
|
73
|
-
* scripted-browser
|
|
73
|
+
* scripted-browser route arrived. Behavior-preserving for every parse-valid config —
|
|
74
74
|
* routeOf keeps a bare app-url fallback to the cua backend so library-API configs
|
|
75
75
|
* with unknown actors still hit its fail-closed ACTOR_UNSUPPORTED.)
|
|
76
76
|
*/
|
|
@@ -81,7 +81,7 @@ export function isComputerUseComposition(config) {
|
|
|
81
81
|
return actorResolvesToComputerUse(config.actors[0]?.type);
|
|
82
82
|
}
|
|
83
83
|
// desktop-cli hands the participant a terminal instead of a served page (#495), but it is the
|
|
84
|
-
// same
|
|
84
|
+
// same route: same desktop, same actor, same prompt fields. Leaving it out of this predicate told
|
|
85
85
|
// adopters their mission and persona were inert on the one route whose whole point is that a
|
|
86
86
|
// person reads a screen.
|
|
87
87
|
if (config.subject.source === "desktop-cli") {
|
|
@@ -96,33 +96,33 @@ export function isComputerUseComposition(config) {
|
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
98
|
* True when this config routes to the SHARED-WORLD backend (#164): a clone or local-tree subject
|
|
99
|
-
* on a hosted desktop whose first actor resolves to a computer-use actor
|
|
99
|
+
* on a hosted desktop whose first actor resolves to a computer-use actor and that declares the
|
|
100
100
|
* `shared-world` topology. Mirror of isComputerUseComposition; the single source of truth shared by
|
|
101
|
-
* routeOf (which checks it
|
|
101
|
+
* routeOf (which checks it before the cua route) and the warning logic. Every
|
|
102
102
|
* shared-world study runs its participants at once (`execution.concurrency` >= 2). The same
|
|
103
|
-
* clone/local-tree × e2b-desktop × computer-use composition
|
|
103
|
+
* clone/local-tree × e2b-desktop × computer-use composition without `topology: shared-world` stays per-lane-worlds
|
|
104
104
|
* (the cua route) — the topology declaration is the override switch.
|
|
105
105
|
*/
|
|
106
106
|
export function isSharedWorldComposition(config) {
|
|
107
107
|
return (isProvisionedSharedWorldComposition(config) || isExternalPublicSharedWorldComposition(config));
|
|
108
108
|
}
|
|
109
109
|
/** The getHost provisioned-subject shared-world shape (clone/local-tree served + exposed in-sandbox). */
|
|
110
|
-
function isProvisionedSharedWorldComposition(config) {
|
|
110
|
+
export function isProvisionedSharedWorldComposition(config) {
|
|
111
111
|
return ((config.subject.source === "clone" || config.subject.source === "local-tree") &&
|
|
112
112
|
config.subject.topology === "shared-world" &&
|
|
113
113
|
config.execution?.target === "e2b-desktop" &&
|
|
114
114
|
actorResolvesToComputerUse(config.actors[0]?.type));
|
|
115
115
|
}
|
|
116
116
|
/**
|
|
117
|
-
* The
|
|
117
|
+
* The external-public shared-world shape (#164 phase 2): a real public deployment used directly as
|
|
118
118
|
* the shared plane — `source: app-url` + `topology: shared-world` + a computer-use actor on
|
|
119
|
-
* e2b-desktop + `policies.allowPublicTargets: true`.
|
|
119
|
+
* e2b-desktop + `policies.allowPublicTargets: true`. No getHost, no clone, no subject sandbox, no
|
|
120
120
|
* seed. The operator-ownership attestation `subject.publicTarget` is required (validated in
|
|
121
121
|
* externalPublicSharedWorldValidationReason, not here — this predicate is the router only, so a
|
|
122
122
|
* half-declared external-public config still routes here to get its precise fail-closed reason
|
|
123
|
-
* rather than silently downgrading to the per-
|
|
123
|
+
* rather than silently downgrading to the per-participant cua route).
|
|
124
124
|
*/
|
|
125
|
-
function isExternalPublicSharedWorldComposition(config) {
|
|
125
|
+
export function isExternalPublicSharedWorldComposition(config) {
|
|
126
126
|
return (config.subject.source === "app-url" &&
|
|
127
127
|
config.subject.topology === "shared-world" &&
|
|
128
128
|
config.execution?.target === "e2b-desktop" &&
|
|
@@ -179,36 +179,3 @@ export function isProvisionedScriptedBrowserComposition(config) {
|
|
|
179
179
|
export function isTerminalProductComposition(config) {
|
|
180
180
|
return (config.subject.source === "terminal-product" && actorResolvesToTerminal(config.actors[0]?.type));
|
|
181
181
|
}
|
|
182
|
-
// The package's older names for these predicates. routeOf is the route decision; each of these
|
|
183
|
-
// says whether a config composes that route with a registered actor of its kind.
|
|
184
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
185
|
-
export function routesToComputerUse(config) {
|
|
186
|
-
return isComputerUseComposition(config);
|
|
187
|
-
}
|
|
188
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
189
|
-
export function routesToSharedWorld(config) {
|
|
190
|
-
return isSharedWorldComposition(config);
|
|
191
|
-
}
|
|
192
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
193
|
-
export function routesToProvisionedSharedWorld(config) {
|
|
194
|
-
return isProvisionedSharedWorldComposition(config);
|
|
195
|
-
}
|
|
196
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
197
|
-
export function routesToExternalPublicSharedWorld(config) {
|
|
198
|
-
return isExternalPublicSharedWorldComposition(config);
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* @deprecated Every shared-world study runs its participants at once since the sequential
|
|
202
|
-
* shared-world route was removed. Use `routeOf`; this alias goes in the next minor.
|
|
203
|
-
*/
|
|
204
|
-
export function routesToConcurrentSharedWorld(config) {
|
|
205
|
-
return isSharedWorldComposition(config);
|
|
206
|
-
}
|
|
207
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
208
|
-
export function routesToScriptedBrowser(config) {
|
|
209
|
-
return isScriptedBrowserComposition(config);
|
|
210
|
-
}
|
|
211
|
-
/** @deprecated Use `routeOf`. This goes in the next minor. */
|
|
212
|
-
export function routesToTerminalProduct(config) {
|
|
213
|
-
return isTerminalProductComposition(config);
|
|
214
|
-
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CuaParticipantPlan } from "../routes/computer-use/types.js";
|
|
2
|
+
import type { PhaseParticipant } from "./lab-deps.js";
|
|
2
3
|
import type { SubjectPhaseEvent } from "../subject/steps.js";
|
|
3
|
-
import type {
|
|
4
|
+
import type { InternalRunLabOptions } from "../run-lab.js";
|
|
4
5
|
import type { LabRoute } from "./plan.js";
|
|
5
6
|
import type { LabConfig } from "./types.js";
|
|
6
7
|
/** One participant, as the options' callbacks see it. */
|
|
@@ -46,11 +47,11 @@ export type LabEvent = {
|
|
|
46
47
|
};
|
|
47
48
|
/**
|
|
48
49
|
* The literal values to scrub from an onEvent warning: the provider keys and the declared subject
|
|
49
|
-
* env from every env the run could read (the `env` option
|
|
50
|
+
* env from every env the run could read (the `env` option and process.env), and the
|
|
50
51
|
* analysis API key. A callback can hold any of them, and its warning is appended after the route
|
|
51
52
|
* sanitized its own.
|
|
52
53
|
*/
|
|
53
|
-
export declare function knownSecretValues(config: LabConfig, options:
|
|
54
|
+
export declare function knownSecretValues(config: LabConfig, options: InternalRunLabOptions, forwardedEnv: Readonly<Record<string, string | undefined>> | undefined): string[];
|
|
54
55
|
/**
|
|
55
56
|
* The emitter the route hook bags call, or undefined without onEvent. It calls onEvent and never
|
|
56
57
|
* waits for it: a throw or a rejected promise becomes a run warning, scrubbed of `secretValues`.
|
|
@@ -58,12 +59,6 @@ export declare function knownSecretValues(config: LabConfig, options: RunLabOpti
|
|
|
58
59
|
export declare function labEventEmitter(onEvent: ((event: LabEvent) => void | Promise<void>) | undefined, warnings: string[], secretValues: () => string[]): ((event: LabEvent) => void) | undefined;
|
|
59
60
|
/** The computer-use participant plan as a `plan` event: ids, personas, devices and digests. */
|
|
60
61
|
export declare function planEvent(plan: CuaParticipantPlan): LabEvent;
|
|
61
|
-
/** A participant as the route
|
|
62
|
-
|
|
63
|
-
laneId: string;
|
|
64
|
-
laneIndex: number;
|
|
65
|
-
laneCount: number;
|
|
66
|
-
};
|
|
67
|
-
export declare const participantOf: (participant: HookParticipant) => ParticipantRef;
|
|
62
|
+
/** A participant as the route reports a phase for it, renamed to the event's field names. */
|
|
63
|
+
export declare const participantOf: (participant: PhaseParticipant) => ParticipantRef;
|
|
68
64
|
export declare function phaseEvent(event: SubjectPhaseEvent, target: SetupTarget): LabEvent;
|
|
69
|
-
export {};
|
|
@@ -4,20 +4,12 @@
|
|
|
4
4
|
import { redactText, scrubLiterals, toErrorMessage } from "../evidence/redaction.js";
|
|
5
5
|
/**
|
|
6
6
|
* The literal values to scrub from an onEvent warning: the provider keys and the declared subject
|
|
7
|
-
* env from every env the run could read (the `env` option
|
|
7
|
+
* env from every env the run could read (the `env` option and process.env), and the
|
|
8
8
|
* analysis API key. A callback can hold any of them, and its warning is appended after the route
|
|
9
9
|
* sanitized its own.
|
|
10
10
|
*/
|
|
11
11
|
export function knownSecretValues(config, options, forwardedEnv) {
|
|
12
|
-
const sources = [
|
|
13
|
-
forwardedEnv,
|
|
14
|
-
options.env,
|
|
15
|
-
options.cuaHooks?.env,
|
|
16
|
-
options.scriptedHooks?.env,
|
|
17
|
-
options.terminalHooks?.env,
|
|
18
|
-
options.sharedWorldHooks?.env,
|
|
19
|
-
process.env,
|
|
20
|
-
];
|
|
12
|
+
const sources = [forwardedEnv, options.env, process.env];
|
|
21
13
|
const names = ["OPENAI_API_KEY", "E2B_API_KEY", "CODEX_API_KEY", ...(config.subject.env ?? [])];
|
|
22
14
|
const values = new Set();
|
|
23
15
|
const add = (value) => {
|
|
@@ -28,7 +20,6 @@ export function knownSecretValues(config, options, forwardedEnv) {
|
|
|
28
20
|
for (const env of sources)
|
|
29
21
|
for (const name of names)
|
|
30
22
|
add(env?.[name]);
|
|
31
|
-
add(options.automaticAnalysis?.deps?.apiKey);
|
|
32
23
|
return [...values];
|
|
33
24
|
}
|
|
34
25
|
/**
|
|
@@ -77,6 +68,7 @@ export function planEvent(plan) {
|
|
|
77
68
|
})),
|
|
78
69
|
};
|
|
79
70
|
}
|
|
71
|
+
/** A participant as the route reports a phase for it, renamed to the event's field names. */
|
|
80
72
|
export const participantOf = (participant) => ({
|
|
81
73
|
id: participant.laneId,
|
|
82
74
|
index: participant.laneIndex,
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { CuaExecutor, CuaProvider } from "../actors/computer-use/loop.js";
|
|
2
|
+
import type { E2BDesktopSandbox } from "../substrates/e2b/sdk.js";
|
|
3
|
+
import type { AdapterScorerModule } from "./adapter-scorer-loader.js";
|
|
4
|
+
import type { LabEvent, ParticipantRef, SetupTarget } from "./run-lab-events.js";
|
|
5
|
+
import type { LabConfig } from "./types.js";
|
|
6
|
+
/** What `createProvider` receives for each participant. */
|
|
7
|
+
export interface ProviderContext {
|
|
8
|
+
readonly config: LabConfig;
|
|
9
|
+
readonly participant: ParticipantRef;
|
|
10
|
+
readonly executor: CuaExecutor;
|
|
11
|
+
}
|
|
12
|
+
export type ProviderFactory = (ctx: ProviderContext) => Promise<CuaProvider>;
|
|
13
|
+
/** The caller's executor for an in-process run, built once for the run's single participant. */
|
|
14
|
+
export interface InProcessDriver {
|
|
15
|
+
executor: (ctx: {
|
|
16
|
+
config: LabConfig;
|
|
17
|
+
appUrl: string;
|
|
18
|
+
}) => Promise<CuaExecutor>;
|
|
19
|
+
}
|
|
20
|
+
export type StreamEvent =
|
|
21
|
+
/** Runtime only: `url` carries an auth key and must never be persisted. */
|
|
22
|
+
{
|
|
23
|
+
type: "ready";
|
|
24
|
+
participantId: string;
|
|
25
|
+
sandboxId: string;
|
|
26
|
+
simId: string;
|
|
27
|
+
streamId: string;
|
|
28
|
+
url: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: "ended";
|
|
31
|
+
participantId: string;
|
|
32
|
+
simId: string;
|
|
33
|
+
streamId: string;
|
|
34
|
+
};
|
|
35
|
+
/** The options with a typed home, common to every route. */
|
|
36
|
+
export interface RunLabHomes {
|
|
37
|
+
/** Keys and subject env for the run. Defaults to process.env. */
|
|
38
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
39
|
+
/**
|
|
40
|
+
* Scores the assembled evidence: computer use, shared world and terminal. A scorer written for
|
|
41
|
+
* one context passes through `browserScorer` or `terminalScorer`; one that narrows `ctx` at
|
|
42
|
+
* runtime passes as it is.
|
|
43
|
+
*/
|
|
44
|
+
scorer?: AdapterScorerModule;
|
|
45
|
+
/** E2B only. Runs after the sandbox exists and before provisioning, once per target. */
|
|
46
|
+
prepareDesktop?: (desktop: E2BDesktopSandbox, target: SetupTarget) => Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Passive. Never awaited; a throw or a rejected promise becomes a run warning. It observes and
|
|
49
|
+
* changes no output: subject phases still go to stderr.
|
|
50
|
+
*/
|
|
51
|
+
onEvent?: (event: LabEvent) => void | Promise<void>;
|
|
52
|
+
/** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
|
|
53
|
+
onStream?: (event: StreamEvent) => Promise<void> | void;
|
|
54
|
+
/** Cancels post-run analysis only. */
|
|
55
|
+
analysisSignal?: AbortSignal;
|
|
56
|
+
}
|
|
57
|
+
/** Brain and in-process driving. An in-process executor needs a provider: it returns no frame. */
|
|
58
|
+
export type RunLabDriving = {
|
|
59
|
+
inProcess?: undefined;
|
|
60
|
+
createProvider?: ProviderFactory;
|
|
61
|
+
} | {
|
|
62
|
+
inProcess: InProcessDriver;
|
|
63
|
+
createProvider: ProviderFactory;
|
|
64
|
+
};
|
|
@@ -1,82 +1,28 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type CuaActorLabHooks } from "../routes/computer-use/types.js";
|
|
3
|
-
import type { E2BDesktopSandbox } from "../substrates/e2b/sdk.js";
|
|
4
|
-
import type { AdapterScorerModule } from "./adapter-scorer-loader.js";
|
|
5
|
-
import type { LabOutcome, RunLabOptions } from "../run-lab.js";
|
|
1
|
+
import type { InternalRunLabOptions, LabOutcome, RunLabOptions } from "../run-lab.js";
|
|
6
2
|
import { type LabRoute } from "./plan.js";
|
|
7
3
|
import type { LabConfig } from "./types.js";
|
|
8
|
-
import { type LabEvent
|
|
9
|
-
/** What `createProvider` receives for each participant. */
|
|
10
|
-
export interface ProviderContext {
|
|
11
|
-
readonly config: LabConfig;
|
|
12
|
-
readonly participant: ParticipantRef;
|
|
13
|
-
readonly executor: CuaExecutor;
|
|
14
|
-
}
|
|
15
|
-
type ProviderFactory = (ctx: ProviderContext) => Promise<CuaProvider>;
|
|
16
|
-
type StreamEvent =
|
|
17
|
-
/** Runtime only: `url` carries an auth key and must never be persisted. */
|
|
18
|
-
{
|
|
19
|
-
type: "ready";
|
|
20
|
-
participantId: string;
|
|
21
|
-
sandboxId: string;
|
|
22
|
-
simId: string;
|
|
23
|
-
streamId: string;
|
|
24
|
-
url: string;
|
|
25
|
-
} | {
|
|
26
|
-
type: "ended";
|
|
27
|
-
participantId: string;
|
|
28
|
-
simId: string;
|
|
29
|
-
streamId: string;
|
|
30
|
-
};
|
|
31
|
-
/** The options with a typed home, common to every route. */
|
|
32
|
-
export interface RunLabHomes {
|
|
33
|
-
/** Keys and subject env for the run. Defaults to process.env. */
|
|
34
|
-
env?: Readonly<Record<string, string | undefined>>;
|
|
35
|
-
/** Scores the assembled evidence: computer use, shared world and terminal. */
|
|
36
|
-
scorer?: AdapterScorerModule;
|
|
37
|
-
/** E2B only. Runs after the sandbox exists and before provisioning, once per target. */
|
|
38
|
-
prepareDesktop?: (desktop: E2BDesktopSandbox, target: SetupTarget) => Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Passive. Never awaited; a throw or a rejected promise becomes a run warning. It observes and
|
|
41
|
-
* changes no output: subject phases still go to stderr.
|
|
42
|
-
*/
|
|
43
|
-
onEvent?: (event: LabEvent) => void | Promise<void>;
|
|
44
|
-
/** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
|
|
45
|
-
onStream?: (event: StreamEvent) => Promise<void> | void;
|
|
46
|
-
/** Cancels post-run analysis only. */
|
|
47
|
-
analysisSignal?: AbortSignal;
|
|
48
|
-
}
|
|
49
|
-
/** Brain and in-process driving. An in-process executor needs a provider: it returns no frame. */
|
|
50
|
-
export type RunLabDriving = {
|
|
51
|
-
inProcess?: undefined;
|
|
52
|
-
createProvider?: ProviderFactory;
|
|
53
|
-
} | {
|
|
54
|
-
inProcess: {
|
|
55
|
-
executor: (ctx: {
|
|
56
|
-
config: LabConfig;
|
|
57
|
-
appUrl: string;
|
|
58
|
-
}) => Promise<CuaExecutor>;
|
|
59
|
-
};
|
|
60
|
-
createProvider: ProviderFactory;
|
|
61
|
-
};
|
|
4
|
+
import { type LabEvent } from "./run-lab-events.js";
|
|
62
5
|
type Refusal = {
|
|
63
6
|
ok: false;
|
|
64
|
-
code: "
|
|
7
|
+
code: "HUMANISH_LAB_OPTION_UNSUPPORTED";
|
|
65
8
|
message: string;
|
|
66
9
|
};
|
|
67
10
|
type Normalized = {
|
|
68
11
|
ok: true;
|
|
69
|
-
/** The options
|
|
70
|
-
options:
|
|
12
|
+
/** The options the route reads: onEvent removed, env copied. */
|
|
13
|
+
options: InternalRunLabOptions;
|
|
71
14
|
/** Filled by onEvent failures while the run runs; runLab appends them to the result. */
|
|
72
15
|
warnings: string[];
|
|
16
|
+
/** Calls onEvent and never waits for it, or undefined without onEvent. The routes report through it. */
|
|
17
|
+
emit: ((event: LabEvent) => void) | undefined;
|
|
73
18
|
};
|
|
19
|
+
/** The refusal for a field a JavaScript caller passed that RunLabOptions no longer has. */
|
|
20
|
+
export declare function removedOptionRefusal(options: RunLabOptions): Refusal | undefined;
|
|
74
21
|
/**
|
|
75
|
-
* Refuse what the route cannot honor,
|
|
76
|
-
* touches the filesystem, so a refusal leaves no run directory, receipt or sandbox.
|
|
22
|
+
* Refuse what the route cannot honor, copy env, and build the emitter onEvent receives through.
|
|
23
|
+
* Nothing here touches the filesystem, so a refusal leaves no run directory, receipt or sandbox.
|
|
77
24
|
*/
|
|
78
|
-
export declare function normalizeRunLabOptions(config: LabConfig, route: LabRoute, options:
|
|
79
|
-
export declare function scorerHooks(scorer: AdapterScorerModule): Pick<CuaActorLabHooks, "score" | "deriveFeedback" | "deriveArtifacts">;
|
|
25
|
+
export declare function normalizeRunLabOptions(config: LabConfig, route: LabRoute, options: InternalRunLabOptions): Normalized | Refusal;
|
|
80
26
|
/** A refusal in the route's own result envelope, before any run exists. */
|
|
81
27
|
export declare function optionRefusalOutcome(config: LabConfig, route: LabRoute, options: RunLabOptions, refusal: Refusal): LabOutcome;
|
|
82
28
|
export {};
|