humanish 0.107.0 → 0.109.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 +73 -69
- package/CHANGELOG.md +27 -0
- package/CONTEXT.md +51 -44
- package/README.md +148 -175
- 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-trace.js +2 -1
- package/dist/actors/codex/app-server-ui.js +1 -1
- package/dist/actors/codex/codex-admission.d.ts +91 -0
- package/dist/actors/codex/codex-admission.js +150 -0
- package/dist/actors/codex/restricted-executable.d.ts +4 -4
- package/dist/actors/codex/restricted-executable.js +8 -8
- package/dist/actors/codex/restricted-launch.d.ts +2 -1
- package/dist/actors/codex/restricted-launch.js +1 -1
- package/dist/actors/codex/restricted-participant.js +20 -18
- package/dist/actors/codex/restricted-policy.d.ts +2 -2
- package/dist/actors/codex/restricted-policy.js +2 -2
- package/dist/actors/codex/restricted-session.d.ts +3 -3
- package/dist/actors/codex/restricted-session.js +10 -5
- package/dist/actors/computer-use/actor.d.ts +18 -18
- package/dist/actors/computer-use/actor.js +4 -4
- package/dist/actors/computer-use/admission-limit.d.ts +3 -3
- package/dist/actors/computer-use/admission-limit.js +4 -4
- package/dist/actors/computer-use/executor-error.d.ts +2 -2
- package/dist/actors/computer-use/executor-error.js +3 -3
- package/dist/actors/computer-use/loop/actions.d.ts +3 -3
- package/dist/actors/computer-use/loop/actions.js +15 -15
- package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
- package/dist/actors/computer-use/loop/backstop.js +14 -12
- package/dist/actors/computer-use/loop/debrief.js +2 -2
- package/dist/actors/computer-use/loop/ending.d.ts +6 -6
- package/dist/actors/computer-use/loop/ending.js +18 -17
- package/dist/actors/computer-use/loop/observation.d.ts +2 -2
- package/dist/actors/computer-use/loop/observation.js +15 -14
- package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
- package/dist/actors/computer-use/loop/provider-call.js +12 -12
- package/dist/actors/computer-use/loop/session.d.ts +4 -4
- package/dist/actors/computer-use/loop/session.js +4 -4
- package/dist/actors/computer-use/loop/spend.d.ts +1 -1
- package/dist/actors/computer-use/loop/spend.js +1 -1
- package/dist/actors/computer-use/loop/trace.js +11 -9
- package/dist/actors/computer-use/loop/types.d.ts +47 -45
- package/dist/actors/computer-use/loop/usage.d.ts +2 -2
- package/dist/actors/computer-use/loop/usage.js +2 -2
- package/dist/actors/computer-use/loop.d.ts +6 -1
- package/dist/actors/computer-use/loop.js +26 -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 +13 -10
- package/dist/actors/computer-use/openai-provider.js +52 -41
- 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/computer-use/provider-error.d.ts +4 -4
- package/dist/actors/computer-use/provider-error.js +6 -6
- package/dist/actors/contract.d.ts +82 -47
- package/dist/actors/contract.js +30 -24
- package/dist/actors/local-agent/claude-session.d.ts +1 -1
- package/dist/actors/local-agent/claude-session.js +13 -12
- package/dist/actors/local-agent/cli.d.ts +9 -7
- 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 +8 -8
- package/dist/actors/registry.d.ts +12 -12
- package/dist/actors/registry.js +21 -20
- package/dist/actors/scripted-browser/actor.d.ts +10 -10
- package/dist/actors/scripted-browser/actor.js +17 -17
- package/dist/actors/scripted-browser/browser-command.js +1 -1
- package/dist/actors/scripted-browser/steps.js +1 -1
- package/dist/actors/scripted-browser/types.d.ts +1 -1
- package/dist/actors/stop-conditions.d.ts +1 -1
- package/dist/analysis/automatic-completion.d.ts +7 -7
- package/dist/analysis/automatic-completion.js +1 -1
- package/dist/analysis/automatic-config.d.ts +6 -6
- package/dist/analysis/automatic-config.js +1 -1
- package/dist/analysis/codex-config.d.ts +6 -2
- package/dist/analysis/codex-config.js +22 -14
- package/dist/analysis/execute.d.ts +1 -1
- package/dist/analysis/execute.js +1 -1
- package/dist/analysis/service.js +5 -5
- package/dist/analysis/types.d.ts +6 -0
- package/dist/browser-control/client.js +16 -16
- package/dist/browser-control/dispatcher.js +4 -4
- package/dist/browser-control/protocol.js +14 -14
- package/dist/browser-control/recording-transfer.js +4 -4
- package/dist/browser-control/transport.js +7 -7
- package/dist/cli/commands/analysis-signals.d.ts +2 -2
- package/dist/cli/commands/analyze.js +19 -16
- package/dist/cli/commands/codex.js +9 -9
- package/dist/cli/commands/comms.js +48 -35
- package/dist/cli/commands/feedback.js +20 -21
- package/dist/cli/commands/migrate.d.ts +4 -0
- package/dist/cli/commands/migrate.js +65 -0
- package/dist/cli/commands/observe.d.ts +0 -1
- package/dist/cli/commands/observe.js +136 -112
- package/dist/cli/commands/run-command.d.ts +10 -0
- package/dist/cli/commands/run-command.js +85 -0
- package/dist/cli/commands/runs.js +136 -139
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/commands/setup.js +27 -24
- package/dist/cli/commands/study-format.d.ts +9 -0
- package/dist/cli/commands/{lab-format.js → study-format.js} +39 -27
- package/dist/cli/commands/{lab-route-computer-use.d.ts → study-route-computer-use.d.ts} +6 -6
- package/dist/cli/commands/{lab-route-computer-use.js → study-route-computer-use.js} +17 -18
- package/dist/cli/commands/{lab-route-open.d.ts → study-route-open.d.ts} +4 -4
- package/dist/cli/commands/{lab-route-open.js → study-route-open.js} +2 -2
- package/dist/cli/commands/{lab-route-preview.d.ts → study-route-preview.d.ts} +7 -7
- package/dist/cli/commands/{lab-route-preview.js → study-route-preview.js} +7 -6
- package/dist/cli/commands/study-route-run.d.ts +19 -0
- package/dist/cli/commands/{lab-route-run.js → study-route-run.js} +6 -6
- package/dist/cli/commands/study-route-scripted.d.ts +17 -0
- package/dist/cli/commands/{lab-route-scripted.js → study-route-scripted.js} +4 -4
- package/dist/cli/commands/{lab-route-shared-world.d.ts → study-route-shared-world.d.ts} +5 -5
- package/dist/cli/commands/{lab-route-shared-world.js → study-route-shared-world.js} +10 -10
- package/dist/cli/commands/study-route-terminal.d.ts +17 -0
- package/dist/cli/commands/{lab-route-terminal.js → study-route-terminal.js} +4 -4
- package/dist/cli/commands/study-run.d.ts +9 -0
- package/dist/cli/commands/{lab-run.js → study-run.js} +44 -45
- package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +7 -7
- package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +2 -2
- package/dist/cli/commands/study.d.ts +3 -0
- package/dist/cli/commands/study.js +146 -0
- package/dist/cli/commands/tui.d.ts +4 -4
- package/dist/cli/commands/tui.js +31 -31
- package/dist/cli/commands/watch.js +71 -121
- package/dist/cli/deprecations.d.ts +6 -0
- package/dist/cli/deprecations.js +18 -0
- package/dist/cli/doctor.d.ts +18 -8
- package/dist/cli/doctor.js +114 -59
- package/dist/cli/first-run-path.d.ts +15 -13
- package/dist/cli/first-run-path.js +35 -33
- package/dist/cli/io.d.ts +44 -9
- package/dist/cli/io.js +98 -23
- package/dist/cli/observer-follow.d.ts +3 -3
- package/dist/cli/observer-follow.js +6 -7
- package/dist/cli/orientation.d.ts +10 -7
- package/dist/cli/orientation.js +89 -47
- 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 +111 -43
- package/dist/cli/telemetry.d.ts +16 -16
- package/dist/cli/telemetry.js +46 -44
- package/dist/cli.js +1 -1
- package/dist/comms/capture-surface.d.ts +13 -12
- package/dist/comms/capture-surface.js +23 -22
- package/dist/comms/catch-host.d.ts +7 -7
- package/dist/comms/catch-host.js +17 -17
- package/dist/comms/connections.d.ts +1 -1
- package/dist/comms/connections.js +2 -2
- package/dist/comms/email-catch.d.ts +3 -3
- package/dist/comms/email-catch.js +8 -8
- package/dist/comms/external-evidence.d.ts +5 -5
- package/dist/comms/external-evidence.js +5 -4
- package/dist/comms/extract.js +2 -2
- package/dist/comms/fake-inbox.d.ts +3 -3
- package/dist/comms/fake-inbox.js +3 -3
- package/dist/comms/receiving-render.d.ts +1 -1
- package/dist/comms/receiving-render.js +2 -2
- package/dist/comms/receiving-runtime.d.ts +4 -4
- 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 +38 -39
- package/dist/comms/sandbox-catch.js +36 -37
- package/dist/comms/setup.d.ts +2 -2
- package/dist/comms/setup.js +56 -25
- 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 +3 -3
- 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 +4 -4
- package/dist/feedback/draft.js +38 -80
- package/dist/feedback/export-bundle.js +1 -1
- package/dist/feedback/export.d.ts +5 -1
- package/dist/feedback/export.js +10 -10
- package/dist/feedback/feedback.d.ts +2 -2
- package/dist/feedback/feedback.js +21 -3
- package/dist/feedback/proof.d.ts +1 -1
- package/dist/feedback/proof.js +2 -2
- package/dist/guest/bootstrap.js +6 -6
- package/dist/guest/browser-tools.js +8 -8
- package/dist/guest/chromium-text.js +19 -19
- package/dist/guest/desktop-executor.d.ts +2 -2
- package/dist/guest/desktop-executor.js +20 -20
- package/dist/guest/desktop-keys.js +4 -4
- package/dist/guest/desktop-media.d.ts +2 -2
- package/dist/guest/desktop-media.js +16 -16
- package/dist/guest/desktop-native.d.ts +1 -1
- package/dist/guest/desktop-native.js +10 -10
- package/dist/guest/runtime-desktop.js +2 -2
- package/dist/guest/runtime-processes.d.ts +2 -2
- package/dist/guest/runtime-processes.js +2 -2
- package/dist/guest/runtime.js +6 -6
- package/dist/index.d.ts +14 -14
- package/dist/index.js +8 -8
- package/dist/keys/key-resolution.d.ts +5 -5
- package/dist/keys/key-resolution.js +23 -23
- package/dist/observer/artifact.d.ts +2 -2
- package/dist/observer/artifact.js +7 -7
- package/dist/observer/data.d.ts +6 -6
- package/dist/observer/data.js +5 -4
- 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 +3 -1
- package/dist/observer/library.js +8 -3
- package/dist/observer/listen.js +5 -4
- package/dist/observer/render.d.ts +1 -1
- package/dist/observer/render.js +17 -6
- package/dist/observer/run-routes.d.ts +4 -3
- package/dist/observer/run-routes.js +38 -13
- package/dist/observer/serve.d.ts +1 -1
- package/dist/observer/serve.js +7 -3
- 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 +18 -17
- package/dist/routes/computer-use/bundle.d.ts +2 -2
- package/dist/routes/computer-use/bundle.js +10 -9
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +6 -6
- package/dist/routes/computer-use/e2b-desktop/comms.js +18 -17
- package/dist/routes/computer-use/e2b-desktop/desktop.js +4 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +5 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.js +11 -10
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.js +10 -10
- package/dist/routes/computer-use/e2b-desktop/start.js +7 -7
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -2
- package/dist/routes/computer-use/external-comms.d.ts +4 -4
- package/dist/routes/computer-use/external-comms.js +1 -1
- package/dist/routes/computer-use/fanout-bundle.js +27 -26
- package/dist/routes/computer-use/fanout-records.js +12 -13
- package/dist/routes/computer-use/live-flush.d.ts +4 -4
- package/dist/routes/computer-use/live-flush.js +6 -6
- package/dist/routes/computer-use/live-phase.d.ts +5 -4
- package/dist/routes/computer-use/live-phase.js +8 -8
- package/dist/routes/computer-use/local-tree-pack.d.ts +5 -5
- package/dist/routes/computer-use/local-tree-pack.js +1 -1
- package/dist/routes/computer-use/local-vm.d.ts +8 -8
- package/dist/routes/computer-use/local-vm.js +3 -3
- package/dist/routes/computer-use/participant-desktop.d.ts +7 -7
- package/dist/routes/computer-use/participant-desktop.js +5 -5
- package/dist/routes/computer-use/participant-execution.d.ts +4 -4
- package/dist/routes/computer-use/participant-execution.js +10 -10
- package/dist/routes/computer-use/participant-model.d.ts +6 -0
- package/dist/routes/computer-use/participant-model.js +33 -15
- package/dist/routes/computer-use/participant-prompt.d.ts +15 -15
- package/dist/routes/computer-use/participant-prompt.js +9 -9
- package/dist/routes/computer-use/participant-runs.d.ts +16 -16
- package/dist/routes/computer-use/participant-runs.js +26 -25
- package/dist/routes/computer-use/plan.d.ts +12 -12
- package/dist/routes/computer-use/plan.js +42 -42
- package/dist/routes/computer-use/preflight.d.ts +5 -5
- package/dist/routes/computer-use/preflight.js +25 -25
- package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
- package/dist/routes/computer-use/rerun-selection.js +4 -3
- package/dist/routes/computer-use/result.d.ts +4 -4
- package/dist/routes/computer-use/result.js +22 -21
- package/dist/routes/computer-use/route.d.ts +12 -11
- package/dist/routes/computer-use/route.js +31 -30
- package/dist/routes/computer-use/self-report.d.ts +7 -7
- package/dist/routes/computer-use/self-report.js +32 -32
- package/dist/routes/computer-use/setup.d.ts +23 -23
- package/dist/routes/computer-use/setup.js +28 -29
- package/dist/routes/computer-use/single-bundle.d.ts +11 -11
- package/dist/routes/computer-use/single-bundle.js +40 -41
- package/dist/routes/computer-use/subject-projection.d.ts +4 -4
- package/dist/routes/computer-use/subject-projection.js +6 -6
- package/dist/routes/computer-use/types.d.ts +71 -73
- package/dist/routes/computer-use/types.js +12 -12
- package/dist/routes/preview.d.ts +13 -7
- package/dist/routes/preview.js +11 -7
- package/dist/routes/scripted/bundle.d.ts +7 -7
- package/dist/routes/scripted/bundle.js +20 -18
- package/dist/routes/scripted/plan.d.ts +8 -8
- package/dist/routes/scripted/plan.js +13 -13
- package/dist/routes/scripted/result.d.ts +3 -3
- package/dist/routes/scripted/result.js +13 -13
- package/dist/routes/scripted/route.d.ts +9 -9
- package/dist/routes/scripted/route.js +15 -16
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +5 -5
- package/dist/routes/scripted/setup.d.ts +6 -6
- package/dist/routes/scripted/setup.js +8 -8
- package/dist/routes/scripted/subject.d.ts +5 -5
- package/dist/routes/scripted/subject.js +4 -4
- package/dist/routes/scripted/surface-records.d.ts +1 -1
- package/dist/routes/scripted/surface-records.js +4 -4
- package/dist/routes/scripted/surface-sessions.d.ts +3 -3
- package/dist/routes/scripted/types.d.ts +18 -20
- package/dist/routes/scripted/types.js +2 -2
- package/dist/routes/shared-world/bundle-records.js +11 -10
- package/dist/routes/shared-world/bundle.d.ts +5 -5
- package/dist/routes/shared-world/bundle.js +46 -43
- package/dist/routes/shared-world/checkpoints.d.ts +4 -4
- package/dist/routes/shared-world/checkpoints.js +2 -2
- package/dist/routes/shared-world/comms.d.ts +14 -14
- package/dist/routes/shared-world/comms.js +19 -18
- package/dist/routes/shared-world/external-public.d.ts +4 -3
- package/dist/routes/shared-world/external-public.js +16 -12
- package/dist/routes/shared-world/handoff.d.ts +7 -6
- package/dist/routes/shared-world/handoff.js +65 -57
- package/dist/routes/shared-world/lobby-code.d.ts +2 -2
- package/dist/routes/shared-world/lobby-code.js +9 -9
- package/dist/routes/shared-world/participant-specs.d.ts +10 -9
- package/dist/routes/shared-world/participant-specs.js +38 -31
- package/dist/routes/shared-world/plan.d.ts +9 -9
- package/dist/routes/shared-world/plan.js +16 -16
- package/dist/routes/shared-world/provenance.d.ts +2 -2
- package/dist/routes/shared-world/provenance.js +2 -2
- package/dist/routes/shared-world/provisioned.d.ts +8 -8
- package/dist/routes/shared-world/provisioned.js +18 -17
- package/dist/routes/shared-world/result.d.ts +6 -6
- package/dist/routes/shared-world/result.js +29 -29
- package/dist/routes/shared-world/route.d.ts +11 -11
- package/dist/routes/shared-world/route.js +40 -39
- package/dist/routes/shared-world/setup.d.ts +16 -16
- package/dist/routes/shared-world/setup.js +23 -23
- package/dist/routes/shared-world/types.d.ts +55 -53
- package/dist/routes/shared-world/types.js +4 -4
- package/dist/routes/terminal/adapter.d.ts +5 -5
- package/dist/routes/terminal/adapter.js +9 -9
- package/dist/routes/terminal/bundle.d.ts +13 -13
- package/dist/routes/terminal/bundle.js +28 -27
- package/dist/routes/terminal/credentials.d.ts +8 -8
- package/dist/routes/terminal/credentials.js +12 -12
- package/dist/routes/terminal/dry-run.d.ts +4 -4
- package/dist/routes/terminal/dry-run.js +12 -12
- package/dist/routes/terminal/encoding.js +2 -2
- package/dist/routes/terminal/ledger.d.ts +5 -5
- package/dist/routes/terminal/ledger.js +14 -14
- package/dist/routes/terminal/lifetime.d.ts +1 -1
- package/dist/routes/terminal/lifetime.js +1 -1
- package/dist/routes/terminal/live-finish.d.ts +2 -2
- package/dist/routes/terminal/live-finish.js +10 -10
- package/dist/routes/terminal/live-sandbox.d.ts +2 -2
- package/dist/routes/terminal/live-sandbox.js +15 -15
- package/dist/routes/terminal/participant-text.js +2 -1
- package/dist/routes/terminal/persona.d.ts +2 -2
- package/dist/routes/terminal/persona.js +3 -3
- package/dist/routes/terminal/plan.d.ts +7 -7
- package/dist/routes/terminal/plan.js +15 -15
- package/dist/routes/terminal/recorder.js +2 -2
- package/dist/routes/terminal/result.d.ts +5 -5
- package/dist/routes/terminal/result.js +14 -14
- package/dist/routes/terminal/route.d.ts +9 -9
- package/dist/routes/terminal/route.js +19 -20
- package/dist/routes/terminal/sandbox.d.ts +1 -1
- package/dist/routes/terminal/sandbox.js +1 -1
- package/dist/routes/terminal/session.d.ts +5 -5
- package/dist/routes/terminal/session.js +14 -13
- package/dist/routes/terminal/token-usage.d.ts +1 -1
- package/dist/routes/terminal/token-usage.js +7 -8
- package/dist/routes/terminal/trace.d.ts +4 -4
- package/dist/routes/terminal/trace.js +2 -2
- package/dist/routes/terminal/types.d.ts +48 -50
- package/dist/routes/terminal/types.js +5 -5
- package/dist/run/bundle-shape.js +3 -3
- package/dist/run/bundle.d.ts +49 -49
- package/dist/run/bundle.js +3 -2
- package/dist/run/cost-summary.js +3 -3
- package/dist/run/costs.d.ts +23 -0
- package/dist/run/costs.js +79 -44
- package/dist/run/detail.d.ts +6 -6
- package/dist/run/detail.js +4 -4
- package/dist/run/dry-run-inputs.d.ts +1 -1
- package/dist/run/dry-run-inputs.js +2 -2
- package/dist/run/dry-run.js +20 -20
- package/dist/run/judge.d.ts +19 -13
- package/dist/run/judge.js +18 -8
- package/dist/run/outcomes.d.ts +1 -1
- package/dist/run/participant.d.ts +1 -1
- package/dist/run/paths.d.ts +1 -1
- package/dist/run/paths.js +1 -1
- package/dist/run/preflight-receipts.js +1 -1
- package/dist/run/pricing.d.ts +11 -6
- package/dist/run/pricing.js +22 -15
- package/dist/run/projection.d.ts +46 -46
- package/dist/run/projection.js +57 -57
- package/dist/run/reclaim.d.ts +1 -1
- package/dist/run/reclaim.js +3 -3
- package/dist/run/results.d.ts +5 -5
- package/dist/run/run-cost.d.ts +53 -0
- package/dist/run/run-cost.js +105 -0
- package/dist/run/run-index-analysis.d.ts +15 -0
- package/dist/run/run-index-analysis.js +77 -0
- package/dist/run/run-index.d.ts +19 -7
- package/dist/run/run-index.js +77 -64
- 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 +6 -5
- package/dist/run/run.js +3 -3
- package/dist/run/sandbox-receipts.d.ts +2 -2
- package/dist/run/sandbox-receipts.js +3 -3
- package/dist/run/shared-world-evidence.d.ts +37 -36
- package/dist/run/shared-world-evidence.js +4 -4
- package/dist/run/shared-world-shape.d.ts +1 -1
- package/dist/run/shared-world-shape.js +7 -7
- package/dist/run/stats.d.ts +14 -8
- package/dist/run/stats.js +121 -63
- package/dist/run/status.d.ts +16 -29
- package/dist/run/status.js +10 -29
- package/dist/run/stored-runs.js +2 -1
- package/dist/run/stream-shape.js +1 -1
- package/dist/run/streams.d.ts +7 -7
- package/dist/run/study-provenance.d.ts +49 -0
- package/dist/run/study-provenance.js +66 -0
- package/dist/run/study-result.d.ts +11 -0
- package/dist/run/study-result.js +9 -0
- package/dist/run/text.d.ts +2 -0
- package/dist/run/text.js +4 -0
- package/dist/run-study.d.ts +112 -0
- package/dist/{run-lab.js → run-study.js} +52 -47
- package/dist/{lab → study}/adapter-extension.d.ts +15 -27
- package/dist/{lab → study}/adapter-extension.js +10 -45
- package/dist/{lab → study}/adapter-scorer-loader.d.ts +17 -17
- package/dist/{lab → study}/adapter-scorer-loader.js +34 -34
- package/dist/study/composition-rules.d.ts +7 -0
- package/dist/{lab → study}/composition-rules.js +53 -53
- package/dist/study/config.d.ts +15 -0
- package/dist/{lab → study}/config.js +98 -41
- package/dist/study/convert.d.ts +33 -0
- package/dist/study/convert.js +432 -0
- package/dist/{lab → study}/device-presets.d.ts +10 -10
- package/dist/{lab → study}/device-presets.js +11 -11
- package/dist/study/discover.d.ts +75 -0
- package/dist/{lab → study}/discover.js +134 -95
- package/dist/{lab → study}/doctor.d.ts +19 -12
- package/dist/{lab → study}/doctor.js +58 -20
- 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 +44 -0
- package/dist/{lab → study}/init-templates.d.ts +2 -2
- package/dist/study/init-templates.js +421 -0
- package/dist/{lab → study}/init.d.ts +2 -2
- package/dist/{lab → study}/init.js +46 -11
- package/dist/study/keys.d.ts +4 -0
- package/dist/{lab → study}/keys.js +46 -12
- 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/{lab → study}/parse/actors.d.ts +5 -5
- package/dist/{lab → study}/parse/actors.js +14 -14
- package/dist/study/parse/comms.d.ts +12 -0
- package/dist/{lab → study}/parse/comms.js +5 -5
- package/dist/study/parse/execution.d.ts +19 -0
- package/dist/{lab → study}/parse/execution.js +13 -13
- package/dist/study/parse/study-v3.d.ts +21 -0
- package/dist/study/parse/study-v3.js +259 -0
- package/dist/study/parse/subject-state.d.ts +30 -0
- package/dist/{lab → study}/parse/subject-state.js +19 -19
- package/dist/{lab → study}/parse/subject.d.ts +3 -3
- package/dist/{lab → study}/parse/subject.js +34 -34
- package/dist/{lab → study}/parse/values.d.ts +3 -3
- package/dist/{lab → study}/parse/values.js +3 -3
- package/dist/{lab → study}/persona-resolve.d.ts +8 -8
- package/dist/{lab → study}/persona-resolve.js +6 -6
- package/dist/{lab → study}/plan-base.d.ts +7 -7
- package/dist/{lab → study}/plan-base.js +1 -1
- package/dist/{lab → study}/plan-participants.d.ts +12 -12
- package/dist/{lab → study}/plan-participants.js +4 -4
- package/dist/{lab → study}/plan-types.d.ts +31 -31
- package/dist/{lab → study}/plan-types.js +2 -2
- package/dist/study/plan.d.ts +13 -0
- package/dist/study/plan.js +101 -0
- package/dist/study/preflight-probes.d.ts +3 -0
- package/dist/{lab → study}/preflight-probes.js +20 -19
- package/dist/study/preflight-result.d.ts +8 -0
- package/dist/{lab → study}/preflight-result.js +5 -4
- package/dist/study/preflight.d.ts +94 -0
- package/dist/{lab → study}/preflight.js +12 -12
- package/dist/{lab → study}/requirements.d.ts +3 -3
- package/dist/{lab → study}/requirements.js +1 -1
- package/dist/study/route-inputs.d.ts +28 -0
- package/dist/{lab → study}/route-inputs.js +1 -1
- package/dist/{lab → study}/routing.d.ts +39 -33
- package/dist/{lab → study}/routing.js +60 -29
- package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -13
- package/dist/{lab/run-lab-events.js → study/run-study-events.js} +3 -9
- package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +21 -18
- package/dist/{lab/run-lab-homes.js → study/run-study-homes.js} +1 -1
- package/dist/study/run-study-options.d.ts +28 -0
- package/dist/{lab/run-lab-options.js → study/run-study-options.js} +29 -25
- package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +8 -13
- package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
- package/dist/{lab → study}/summary.d.ts +16 -15
- package/dist/{lab → study}/summary.js +21 -21
- package/dist/{lab → study}/tasks.d.ts +18 -18
- package/dist/{lab → study}/tasks.js +14 -14
- package/dist/{lab → study}/types.d.ts +202 -196
- package/dist/{lab → study}/types.js +3 -1
- package/dist/{lab → study}/validation.d.ts +27 -27
- package/dist/{lab → study}/validation.js +53 -51
- package/dist/study/warnings.d.ts +12 -0
- package/dist/{lab → study}/warnings.js +62 -34
- package/dist/subject/clone.d.ts +7 -7
- package/dist/subject/clone.js +2 -2
- package/dist/subject/desktop-cli.d.ts +1 -1
- package/dist/subject/desktop-cli.js +2 -2
- package/dist/subject/local-tree-archive.d.ts +2 -2
- package/dist/subject/local-tree-archive.js +4 -4
- package/dist/subject/local-tree.d.ts +4 -4
- package/dist/subject/node-bootstrap.js +1 -1
- package/dist/subject/runtime.js +9 -10
- package/dist/subject/serve.d.ts +5 -5
- package/dist/subject/serve.js +3 -3
- package/dist/subject/state.d.ts +4 -4
- package/dist/subject/state.js +1 -1
- package/dist/subject/steps.d.ts +6 -6
- package/dist/subject/steps.js +5 -5
- package/dist/substrates/command-failure.d.ts +3 -3
- package/dist/substrates/command-failure.js +3 -3
- package/dist/substrates/desktop-session.js +2 -2
- package/dist/substrates/detached.d.ts +6 -6
- package/dist/substrates/detached.js +7 -7
- package/dist/substrates/e2b/cdp-probe.d.ts +9 -9
- package/dist/substrates/e2b/cdp-probe.js +14 -17
- package/dist/substrates/e2b/desktop-browser.d.ts +6 -6
- package/dist/substrates/e2b/desktop-browser.js +9 -9
- package/dist/substrates/e2b/desktop-cdp.d.ts +10 -10
- package/dist/substrates/e2b/desktop-cdp.js +9 -9
- package/dist/substrates/e2b/desktop-executor.d.ts +2 -2
- package/dist/substrates/e2b/desktop-executor.js +13 -13
- package/dist/substrates/e2b/desktop-geometry.d.ts +4 -4
- package/dist/substrates/e2b/desktop-geometry.js +8 -8
- package/dist/substrates/e2b/desktop-media.d.ts +4 -4
- package/dist/substrates/e2b/desktop-media.js +1 -1
- 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/lifetime.js +1 -1
- package/dist/substrates/e2b/sandbox.d.ts +4 -4
- package/dist/substrates/e2b/sandbox.js +2 -2
- package/dist/substrates/e2b/sdk.d.ts +12 -12
- package/dist/substrates/e2b/sdk.js +7 -7
- package/dist/substrates/local/runtime-config.d.ts +4 -4
- package/dist/substrates/local/runtime-config.js +4 -4
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +13 -13
- package/dist/tui/contract.d.ts +23 -23
- package/dist/tui/contract.js +11 -11
- package/dist/tui/launch.d.ts +7 -7
- package/dist/tui/launch.js +36 -31
- package/dist/tui/project.js +5 -5
- package/dist/tui-app.js +139 -139
- package/dist/verify/actor.d.ts +8 -8
- package/dist/verify/actor.js +36 -36
- package/dist/verify/artifacts.d.ts +2 -2
- package/dist/verify/artifacts.js +3 -3
- package/dist/verify/context-growth.d.ts +9 -0
- package/dist/verify/context-growth.js +62 -0
- package/dist/verify/costs.d.ts +6 -6
- package/dist/verify/costs.js +8 -8
- 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 +16 -16
- package/dist/verify/subject.d.ts +5 -5
- package/dist/verify/subject.js +19 -19
- package/dist/verify/verify.js +94 -44
- package/docs/README.md +25 -32
- package/docs/architecture/actor-contract.md +60 -91
- package/docs/architecture/browser-control.md +1 -1
- package/docs/architecture/desktop-sessions.md +7 -7
- package/docs/architecture/external-public-shared-world.md +68 -65
- package/docs/architecture/github-feedback-loop.md +2 -5
- package/docs/architecture/guest-desktop.md +2 -2
- package/docs/architecture/observer.md +34 -34
- package/docs/architecture/restricted-codex-analysis.md +34 -28
- package/docs/architecture/serve.md +34 -37
- package/docs/architecture/state-driven-executor.md +55 -58
- package/docs/architecture/task-protocol-support.md +6 -6
- package/docs/architecture/terminal-product-route.md +70 -110
- package/docs/contracts/README.md +24 -0
- package/docs/contracts/adapter-admission.md +3 -3
- package/docs/contracts/adapter-fixtures.md +4 -7
- 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 +42 -44
- package/docs/contracts/schemas.md +446 -368
- package/docs/contracts/study-analysis.md +7 -4
- package/docs/contracts/study-costs.md +28 -9
- 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/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 +7 -7
- package/examples/README.md +1 -1
- 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/examples/scorer/scorer.mjs +3 -3
- package/package.json +16 -17
- package/skills/humanish/SKILL.md +64 -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 -72
- package/dist/actors/codex/qualified-versions.js +0 -132
- package/dist/cli/commands/lab-format.d.ts +0 -8
- package/dist/cli/commands/lab-route-run.d.ts +0 -19
- package/dist/cli/commands/lab-route-scripted.d.ts +0 -17
- package/dist/cli/commands/lab-route-terminal.d.ts +0 -17
- package/dist/cli/commands/lab-run.d.ts +0 -9
- package/dist/cli/commands/lab.d.ts +0 -3
- package/dist/cli/commands/lab.js +0 -199
- package/dist/cli/renamed-options.d.ts +0 -11
- package/dist/cli/renamed-options.js +0 -18
- package/dist/lab/composition-rules.d.ts +0 -7
- package/dist/lab/config.d.ts +0 -7
- package/dist/lab/discover.d.ts +0 -65
- package/dist/lab/init-templates.js +0 -416
- package/dist/lab/keys.d.ts +0 -2
- package/dist/lab/parse/comms.d.ts +0 -12
- package/dist/lab/parse/execution.d.ts +0 -19
- package/dist/lab/parse/subject-state.d.ts +0 -30
- package/dist/lab/plan.d.ts +0 -19
- package/dist/lab/plan.js +0 -132
- package/dist/lab/preflight-probes.d.ts +0 -3
- package/dist/lab/preflight-result.d.ts +0 -7
- package/dist/lab/preflight.d.ts +0 -92
- package/dist/lab/route-inputs.d.ts +0 -28
- package/dist/lab/run-lab-options.d.ts +0 -28
- package/dist/lab/warnings.d.ts +0 -2
- package/dist/observer/static.d.ts +0 -39
- package/dist/observer/static.js +0 -369
- package/dist/run-lab.d.ts +0 -112
- 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 -295
- 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/{lab → study}/init-paths.d.ts +0 -0
- /package/dist/{lab → study}/init-paths.js +0 -0
- /package/dist/{lab → study}/init-plan.d.ts +0 -0
- /package/dist/{lab → study}/init-plan.js +0 -0
- /package/dist/{lab → study}/participant-assignment.d.ts +0 -0
- /package/dist/{lab → study}/participant-assignment.js +0 -0
- /package/dist/{lab → study}/persona.d.ts +0 -0
- /package/dist/{lab → study}/persona.js +0 -0
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
// the E2B key and subject env of a live clone, a browser to launch) and the values the run reads
|
|
3
3
|
// (the evidence URL policy, the scrubber for clone values, the persona and the session budget).
|
|
4
4
|
import { realpath } from "node:fs/promises";
|
|
5
|
-
import { missingKeys, missingSubjectEnv } from "../../
|
|
5
|
+
import { missingKeys, missingSubjectEnv } from "../../study/requirements.js";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
import { resolveBrowserCommand } from "../../actors/scripted-browser/browser-command.js";
|
|
8
8
|
import { describeMissingKeys } from "../../keys/key-resolution.js";
|
|
9
9
|
import { prepareSelectedOutputDirectory } from "../../run/contained-output.js";
|
|
10
10
|
import { evidenceAppUrlOf } from "./plan.js";
|
|
11
11
|
import { resolveScriptedScenario } from "./scenario.js";
|
|
12
|
-
import {
|
|
12
|
+
import {} from "./types.js";
|
|
13
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
13
14
|
// Journey wall-clock budget per surface: 5 minutes. A scripted surface has zero model cost and
|
|
14
15
|
// sandbox-seconds are pennies; a short default only truncated slow-loading subjects.
|
|
15
16
|
const DEFAULT_SESSION_TIMEOUT_MS = 300_000;
|
|
@@ -27,10 +28,9 @@ export async function prepareScriptedRun(plan, input) {
|
|
|
27
28
|
const clone = plan.subject.kind === "clone" ? plan.subject : undefined;
|
|
28
29
|
const evidenceAppUrl = evidenceAppUrlOf(plan.subject);
|
|
29
30
|
const failed = (code, message) => ({
|
|
30
|
-
|
|
31
|
+
...studyResultIdentity("scripted", plan.studyId),
|
|
31
32
|
ok: false,
|
|
32
33
|
cwd,
|
|
33
|
-
labId: plan.labId,
|
|
34
34
|
actor: plan.actor,
|
|
35
35
|
appUrl: evidenceAppUrl,
|
|
36
36
|
dryRun,
|
|
@@ -58,7 +58,7 @@ export async function prepareScriptedRun(plan, input) {
|
|
|
58
58
|
if (!scenario.ok) {
|
|
59
59
|
return {
|
|
60
60
|
ok: false,
|
|
61
|
-
result: failed("
|
|
61
|
+
result: failed("HUMANISH_SCRIPTED_SCENARIO_INVALID", scenario.message),
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
const journey = scenario.journey;
|
|
@@ -67,14 +67,14 @@ export async function prepareScriptedRun(plan, input) {
|
|
|
67
67
|
if (missing.length > 0) {
|
|
68
68
|
return {
|
|
69
69
|
ok: false,
|
|
70
|
-
result: failed("
|
|
70
|
+
result: failed("HUMANISH_SCRIPTED_KEYS_MISSING", `Live clone scripted-browser studies require ${missing.join(" and ")} (dry-run remains $0 and does not provision a subject). ${describeMissingKeys(missing, env)}`),
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
const unsetSubjectEnv = missingSubjectEnv(plan.requirements, env);
|
|
74
74
|
if (unsetSubjectEnv.length > 0) {
|
|
75
75
|
return {
|
|
76
76
|
ok: false,
|
|
77
|
-
result: failed("
|
|
77
|
+
result: failed("HUMANISH_SCRIPTED_SUBJECT_ENV_MISSING", `Subject env values missing for a live clone scripted-browser study: ${unsetSubjectEnv.join(", ")}.`),
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
const surfaces = plan.surfaces;
|
|
@@ -93,7 +93,7 @@ export async function prepareScriptedRun(plan, input) {
|
|
|
93
93
|
if (!resolved) {
|
|
94
94
|
return {
|
|
95
95
|
ok: false,
|
|
96
|
-
result: failed("
|
|
96
|
+
result: failed("HUMANISH_SCRIPTED_BROWSER_MISSING", "No Chrome/Chromium browser command was found for the scripted-browser actor. Set HUMANISH_BROWSER_COMMAND to a browser binary playwright-core can launch."),
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
99
|
browserCommand = resolved;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { ScriptedPlan } from "../../
|
|
1
|
+
import type { ScriptedPlan } from "../../study/plan-types.js";
|
|
2
2
|
import { type PreparedRunArtifactPaths } from "../../run/paths.js";
|
|
3
3
|
import type { RunSubjectStateStepRecord } from "../../run/bundle.js";
|
|
4
4
|
import { type DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
5
|
+
import type { StudyDeps } from "../../study/study-deps.js";
|
|
6
|
+
import type { RunStudyHomes } from "../../study/run-study-homes.js";
|
|
7
7
|
type ScriptedCloneSubject = Extract<ScriptedPlan["subject"], {
|
|
8
8
|
readonly kind: "clone";
|
|
9
9
|
}>;
|
|
@@ -11,9 +11,9 @@ type ScriptedCloneSubject = Extract<ScriptedPlan["subject"], {
|
|
|
11
11
|
export interface ScriptedSubjectInputs {
|
|
12
12
|
plan: ScriptedPlan;
|
|
13
13
|
clone: ScriptedCloneSubject;
|
|
14
|
-
deps:
|
|
14
|
+
deps: StudyDeps;
|
|
15
15
|
/** Runs after the subject sandbox exists and before provisioning. */
|
|
16
|
-
prepareDesktop?: NonNullable<
|
|
16
|
+
prepareDesktop?: NonNullable<RunStudyHomes["prepareDesktop"]>;
|
|
17
17
|
env: Readonly<Record<string, string | undefined>>;
|
|
18
18
|
e2bApiKey: string;
|
|
19
19
|
runPaths: PreparedRunArtifactPaths;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The provisioned subject of a live clone scripted-browser
|
|
1
|
+
// The provisioned subject of a live clone scripted-browser study: one E2B desktop that clones,
|
|
2
2
|
// seeds and serves the app, exposed through a tokenless getHost URL and killed by exact id at
|
|
3
3
|
// teardown.
|
|
4
4
|
import { commandDigestOf } from "../../subject/state.js";
|
|
@@ -74,8 +74,8 @@ export class ScriptedSubject {
|
|
|
74
74
|
metadata: {
|
|
75
75
|
mode: "scripted-browser-lab",
|
|
76
76
|
tool: "humanish",
|
|
77
|
-
labId: plan.
|
|
78
|
-
|
|
77
|
+
labId: plan.studyId,
|
|
78
|
+
kind: "subject",
|
|
79
79
|
actor: plan.actor,
|
|
80
80
|
},
|
|
81
81
|
...(subjectEnvNames.length > 0
|
|
@@ -115,7 +115,7 @@ export class ScriptedSubject {
|
|
|
115
115
|
...timers,
|
|
116
116
|
});
|
|
117
117
|
if (typeof subjectDesktop.getHost !== "function") {
|
|
118
|
-
throw new Error("the installed @e2b/desktop SDK does not expose getHost(port); clone scripted-browser
|
|
118
|
+
throw new Error("the installed @e2b/desktop SDK does not expose getHost(port); clone scripted-browser studies require it to reach the provisioned subject");
|
|
119
119
|
}
|
|
120
120
|
const rawHost = subjectDesktop.getHost(servePort(clone.serve.url));
|
|
121
121
|
const hostUrl = /^https?:\/\//i.test(rawHost) ? rawHost : `https://${rawHost}`;
|
|
@@ -18,7 +18,7 @@ export function scriptedSurfaceRecords(context, surface, index, result, screensh
|
|
|
18
18
|
: "contract_proof_only";
|
|
19
19
|
const reason = result?.reason ??
|
|
20
20
|
context.sessionError ??
|
|
21
|
-
"
|
|
21
|
+
"Dry run: the scenario was pinned without launching a browser or touching the subject app.";
|
|
22
22
|
const simulation = participantRecord(ids, index + 1, {
|
|
23
23
|
personaId: context.persona.id,
|
|
24
24
|
scenarioId: context.journey.scenarioId,
|
|
@@ -30,14 +30,14 @@ export function scriptedSurfaceRecords(context, surface, index, result, screensh
|
|
|
30
30
|
summary: result
|
|
31
31
|
? `Scripted-browser actor (${context.actorId}) replayed ${context.journey.scenarioId} on the ${surface.id} surface; ${result.completionReason}.`
|
|
32
32
|
: context.sessionError !== undefined
|
|
33
|
-
? `
|
|
34
|
-
: `
|
|
33
|
+
? `The scripted run failed before a terminal session verdict: ${context.sessionError}`
|
|
34
|
+
: `Scripted-browser actor (${context.actorId}) against ${context.appUrl}; no session ran.`,
|
|
35
35
|
startedAt: context.createdAt,
|
|
36
36
|
updatedAt: result?.capture.capturedAt ?? context.createdAt,
|
|
37
37
|
});
|
|
38
38
|
const stream = participantStream(ids, {
|
|
39
39
|
kind: "browser",
|
|
40
|
-
label: `${surface.label}
|
|
40
|
+
label: `${surface.label} · ${context.studyId}`,
|
|
41
41
|
status,
|
|
42
42
|
transport: "snapshot",
|
|
43
43
|
updatedAt: result?.capture.capturedAt ?? context.createdAt,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type ScriptedBrowserSessionOptions, type ScriptedBrowserSessionResult } from "../../actors/scripted-browser/actor.js";
|
|
2
|
-
import type { ScriptedPlan } from "../../
|
|
2
|
+
import type { ScriptedPlan } from "../../study/plan-types.js";
|
|
3
3
|
import { type PreparedRunArtifactPaths } from "../../run/paths.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { StudyDeps } from "../../study/study-deps.js";
|
|
5
5
|
/** One session per surface, in parallel. */
|
|
6
6
|
export declare function runScriptedSessions(session: Required<Pick<ScriptedBrowserSessionOptions, "appUrl" | "evidenceAppUrl" | "urlPolicy" | "journey" | "persona" | "timeoutMs" | "artifactRoot">>, run: {
|
|
7
7
|
surfaces: ScriptedPlan["surfaces"];
|
|
8
|
-
deps:
|
|
8
|
+
deps: StudyDeps;
|
|
9
9
|
browserCommand: string | undefined;
|
|
10
10
|
runPaths: PreparedRunArtifactPaths;
|
|
11
11
|
}): Promise<ScriptedBrowserSessionResult[]>;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import type { ActorCompletionReason, ActorStatus } from "../../actors/contract.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { StudyEvent } from "../../study/run-study-events.js";
|
|
3
3
|
import type { AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
5
5
|
import type { ObserverResult } from "../../observer/render.js";
|
|
6
6
|
import type { RunSubjectProvenance } from "../../run/bundle.js";
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
9
|
-
|
|
10
|
-
/** What a scripted run takes besides its plan. The plan carries the config, dry run and
|
|
11
|
-
export type ScriptedRunInput = Omit<
|
|
12
|
-
export interface
|
|
7
|
+
import type { StudyDeps } from "../../study/study-deps.js";
|
|
8
|
+
import type { RunStudyHomes } from "../../study/run-study-homes.js";
|
|
9
|
+
import { type StudyResultIdentity } from "../../run/study-result.js";
|
|
10
|
+
/** What a scripted run takes besides its plan. The plan carries the config, dry run and study. */
|
|
11
|
+
export type ScriptedRunInput = Omit<RunScriptedBrowserStudyOptions, "config" | "dryRun">;
|
|
12
|
+
export interface RunScriptedBrowserStudyOptions {
|
|
13
13
|
/** Cancels post-run analysis only. */
|
|
14
14
|
analysisSignal?: AbortSignal;
|
|
15
|
-
/** Reports the analysis window to onEvent; built by
|
|
16
|
-
emit?: (event:
|
|
15
|
+
/** Reports the analysis window to onEvent; built by normalizeRunStudyOptions. */
|
|
16
|
+
emit?: (event: StudyEvent) => void;
|
|
17
17
|
cwd: string;
|
|
18
|
-
config:
|
|
18
|
+
config: StudyConfig;
|
|
19
19
|
/** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
|
|
20
20
|
dryRun: boolean;
|
|
21
21
|
open?: boolean;
|
|
@@ -23,25 +23,23 @@ export interface RunScriptedBrowserLabOptions {
|
|
|
23
23
|
/** Keys and subject env for the run. Defaults to process.env. Values are scrubbed; names persist. */
|
|
24
24
|
env?: Readonly<Record<string, string | undefined>>;
|
|
25
25
|
/** Runs after a clone subject's sandbox exists and before provisioning. */
|
|
26
|
-
prepareDesktop?: NonNullable<
|
|
26
|
+
prepareDesktop?: NonNullable<RunStudyHomes["prepareDesktop"]>;
|
|
27
27
|
/** Test seams: the browser, the session, the E2B module, timers, the renderer and the clock. */
|
|
28
|
-
deps?:
|
|
28
|
+
deps?: StudyDeps;
|
|
29
29
|
}
|
|
30
|
-
interface
|
|
30
|
+
interface ScriptedBrowserStudySession {
|
|
31
31
|
surface: string;
|
|
32
32
|
status: ActorStatus;
|
|
33
33
|
completionReason: ActorCompletionReason;
|
|
34
34
|
reason: string;
|
|
35
35
|
screenshots: number;
|
|
36
36
|
}
|
|
37
|
-
export interface
|
|
38
|
-
schema: typeof SCRIPTED_BROWSER_LAB_SCHEMA;
|
|
37
|
+
export interface ScriptedBrowserStudyResult extends AutomaticAnalysisResult, StudyResultIdentity<"scripted"> {
|
|
39
38
|
/** True when the bundle verified and (dry-run, or every session reached a terminal verdict
|
|
40
|
-
* without a harness error). The subject failing the script is successful evidence, and the
|
|
39
|
+
* without a harness error). The subject failing the script is successful evidence, and the run
|
|
41
40
|
* does not fail for it. */
|
|
42
41
|
ok: boolean;
|
|
43
42
|
cwd: string;
|
|
44
|
-
labId: string;
|
|
45
43
|
/** The registry-resolved actor id that ran (or would run) the sessions. */
|
|
46
44
|
actor: string;
|
|
47
45
|
appUrl: string;
|
|
@@ -60,11 +58,11 @@ export interface ScriptedBrowserLabResult extends AutomaticAnalysisResult {
|
|
|
60
58
|
sourceDigest: string;
|
|
61
59
|
steps: number;
|
|
62
60
|
};
|
|
63
|
-
sessions:
|
|
61
|
+
sessions: ScriptedBrowserStudySession[];
|
|
64
62
|
observer?: ObserverResult;
|
|
65
63
|
warnings: string[];
|
|
66
64
|
error?: {
|
|
67
|
-
code: "
|
|
65
|
+
code: "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_STUDY_V2_UNSUPPORTED" | "HUMANISH_SCRIPTED_FAILED" | "HUMANISH_SCRIPTED_ACTOR_UNSUPPORTED" | "HUMANISH_SCRIPTED_SCENARIO_INVALID" | "HUMANISH_SCRIPTED_SUBJECT_UNSAFE" | "HUMANISH_SCRIPTED_BROWSER_MISSING" | "HUMANISH_SCRIPTED_KEYS_MISSING" | "HUMANISH_SCRIPTED_SUBJECT_ENV_MISSING" | "HUMANISH_SCRIPTED_GETHOST_UNAVAILABLE" | "HUMANISH_RUN_ID_IN_USE";
|
|
68
66
|
message: string;
|
|
69
67
|
};
|
|
70
68
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// The scripted-browser
|
|
2
|
-
|
|
1
|
+
// The scripted-browser study's schema constant, options and result types.
|
|
2
|
+
import {} from "../../run/study-result.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Each participant's records in a concurrent shared-world bundle: its simulation, its stream and
|
|
2
2
|
// its events, projected from the actor's run result (or from the declaration on a dry run or while
|
|
3
3
|
// running).
|
|
4
|
-
import { participantAssignment } from "../../
|
|
4
|
+
import { participantAssignment } from "../../study/participant-assignment.js";
|
|
5
5
|
import { participantEvent, participantRecord, participantStream, } from "../../run/participant-records.js";
|
|
6
6
|
import { declaredScreenForRender } from "../../substrates/e2b/desktop-geometry.js";
|
|
7
7
|
import { publicSafeRouteLabel } from "./provenance.js";
|
|
@@ -14,7 +14,8 @@ function participantView(ctx, spec, index) {
|
|
|
14
14
|
const session = outcome?.session;
|
|
15
15
|
const screenshots = outcome?.screenshots ?? [];
|
|
16
16
|
const lastScreenshot = screenshots[screenshots.length - 1];
|
|
17
|
-
// public-safe (origin redacted): external-public
|
|
17
|
+
// public-safe (origin redacted): external-public participants open the public plane; getHost
|
|
18
|
+
// participants open their own path.
|
|
18
19
|
const route = external
|
|
19
20
|
? "[external-public-plane]"
|
|
20
21
|
: publicSafeRouteLabel(args.plan.plane.participants[index]?.entry);
|
|
@@ -29,7 +30,7 @@ function participantView(ctx, spec, index) {
|
|
|
29
30
|
outcome?.sessionError ??
|
|
30
31
|
(inProgress
|
|
31
32
|
? "Actor desktop is running; the attached Observer hydrates the runtime stream URL without persisting it."
|
|
32
|
-
: "
|
|
33
|
+
: "Dry run: the evidence shape was written without launching a desktop or spending provider tokens.");
|
|
33
34
|
const traceScreenshotMode = session?.trace.redaction.screenshots;
|
|
34
35
|
// Include `declared` on the no-outcome fallback too (dry-run, skipped participant): otherwise an
|
|
35
36
|
// absent `declared` means either "the preset rendered faithfully" or "there was no live
|
|
@@ -67,7 +68,7 @@ function sharedWorldSimulation(ctx, spec, index, view) {
|
|
|
67
68
|
const { taxonomy, outcome, session } = view;
|
|
68
69
|
return participantRecord(spec, index + 1, {
|
|
69
70
|
personaId: spec.persona.id,
|
|
70
|
-
scenarioId: `concurrent-shared-world-${args.plan.
|
|
71
|
+
scenarioId: `concurrent-shared-world-${args.plan.studyId}`,
|
|
71
72
|
status: view.status,
|
|
72
73
|
streamKind: "browser",
|
|
73
74
|
mode: "browser-sim",
|
|
@@ -79,7 +80,7 @@ function sharedWorldSimulation(ctx, spec, index, view) {
|
|
|
79
80
|
? `Persona ${spec.planned.id}${taxonomy} failed before a terminal session verdict: ${outcome.sessionError}`
|
|
80
81
|
: inProgress
|
|
81
82
|
? `Persona ${spec.planned.id}${taxonomy} (${spec.persona.id}) is running against the shared plane.`
|
|
82
|
-
: `
|
|
83
|
+
: `Persona ${spec.planned.id}${taxonomy} (${spec.persona.id}) for ${args.descriptor.id} against the shared plane at ${ctx.appUrl}; no session ran.`,
|
|
83
84
|
startedAt: args.run.createdAt,
|
|
84
85
|
updatedAt: args.run.createdAt,
|
|
85
86
|
});
|
|
@@ -92,7 +93,7 @@ function sharedWorldStream(ctx, spec, index, view) {
|
|
|
92
93
|
? {}
|
|
93
94
|
: { assignment: participantAssignment(spec.evidenceAssignment) }),
|
|
94
95
|
kind: "browser",
|
|
95
|
-
label: `Concurrent persona ${spec.planned.id}${taxonomy}
|
|
96
|
+
label: `Concurrent persona ${spec.planned.id}${taxonomy} · ${args.plan.studyId}`,
|
|
96
97
|
status: view.status,
|
|
97
98
|
transport: "snapshot",
|
|
98
99
|
updatedAt: args.run.createdAt,
|
|
@@ -116,7 +117,7 @@ function sharedWorldStream(ctx, spec, index, view) {
|
|
|
116
117
|
desktopGeometry,
|
|
117
118
|
ui: {
|
|
118
119
|
route: view.route,
|
|
119
|
-
intent: `Watch persona ${spec.planned.id}${taxonomy} (${spec.persona.id})
|
|
120
|
+
intent: `Watch persona ${spec.planned.id}${taxonomy} (${spec.persona.id}) use the shared app at the same time as the other personas.`,
|
|
120
121
|
state: view.reason,
|
|
121
122
|
...(session ? { actorStatus: session.status } : {}),
|
|
122
123
|
...(lastScreenshot ? { screenshotUrl: lastScreenshot } : {}),
|
|
@@ -137,7 +138,7 @@ function sharedWorldStream(ctx, spec, index, view) {
|
|
|
137
138
|
: []),
|
|
138
139
|
// Run-level comms evidence belongs to the one shared app, and to no persona: register it once, on
|
|
139
140
|
// the first stream, so the bundle's existence-verify + public-safety scan cover it without
|
|
140
|
-
// double-counting across
|
|
141
|
+
// double-counting across participants.
|
|
141
142
|
...(index === 0 && args.commsArtifactPath
|
|
142
143
|
? [{ label: "comms thread", path: args.commsArtifactPath, kind: "log" }]
|
|
143
144
|
: []),
|
|
@@ -170,7 +171,7 @@ function sharedWorldEvents(ctx, spec, view) {
|
|
|
170
171
|
at: createdAt,
|
|
171
172
|
level: session.status === "passed" ? "info" : "warn",
|
|
172
173
|
type: `concurrent-shared-world.session.${session.completionReason}`,
|
|
173
|
-
message: `Persona ${spec.planned.id}: ${session.status}
|
|
174
|
+
message: `Persona ${spec.planned.id}: ${session.status} (${session.reason})`,
|
|
174
175
|
});
|
|
175
176
|
}
|
|
176
177
|
else if (outcome?.sessionError !== undefined) {
|
|
@@ -197,7 +198,7 @@ function sharedWorldEvents(ctx, spec, view) {
|
|
|
197
198
|
at: createdAt,
|
|
198
199
|
level: "info",
|
|
199
200
|
type: "concurrent-shared-world.contract.ready",
|
|
200
|
-
message: `Persona ${spec.planned.id}: dry-run
|
|
201
|
+
message: `Persona ${spec.planned.id}: dry-run actor ready; switch scenario.mode to live for a real concurrent session.`,
|
|
201
202
|
});
|
|
202
203
|
}
|
|
203
204
|
return events;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { type RunBundle } from "../../run/bundle.js";
|
|
2
2
|
import { type SharedWorldJudgment } from "../../run/judge.js";
|
|
3
3
|
import { type ActorRunResult, type ConcurrentBundleArgs } from "./types.js";
|
|
4
|
-
/** Max windows live at the same instant (sweep over start/end points). The
|
|
4
|
+
/** Max windows live at the same instant (sweep over start/end points). The simultaneity
|
|
5
5
|
* count: the participant count says how many existed; this says how many ever ran at once. */
|
|
6
6
|
export declare function maxSimultaneousWindows(windows: Array<{
|
|
7
7
|
startedAt: number;
|
|
8
8
|
endedAt: number;
|
|
9
9
|
}>): number;
|
|
10
10
|
/**
|
|
11
|
-
* The judgment for a shared-world bundle's inputs: how each
|
|
12
|
-
* about its world: overlap, a state change under overlap on the provisioned plane, and
|
|
13
|
-
* convergence on the external-public plane. The bundle's verdict and the
|
|
14
|
-
* it.
|
|
11
|
+
* The judgment for a shared-world bundle's inputs: how each participant ended, plus what the run
|
|
12
|
+
* observed about its world: overlap, a state change under overlap on the provisioned plane, and
|
|
13
|
+
* lobby convergence on the external-public plane. The bundle's verdict and the study result's ok
|
|
14
|
+
* both read it.
|
|
15
15
|
*/
|
|
16
16
|
export declare function judgeSharedWorldRun(args: Omit<ConcurrentBundleArgs, "judgment">): SharedWorldJudgment;
|
|
17
17
|
export declare function actorRunPassed(result: ActorRunResult | undefined): boolean;
|