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
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import { formatCuaDiagnostics, formatCuaStopCause } from "../../routes/computer-use/diagnostics.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
/** A run's first lines: the command that ran, whether it was a dry run, how it ended, and its route. */
|
|
3
|
+
function runHeader(result, route) {
|
|
4
|
+
const kind = result.dryRun === true ? "dry run" : result.dryRun === false ? "live run" : "run";
|
|
5
|
+
return [
|
|
6
|
+
`humanish run ${result.studyId}: ${kind} ${result.ok ? "finished" : "failed"}`,
|
|
7
|
+
`route: ${route}`,
|
|
8
|
+
];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A run's human output: its lines on stdout and, when it failed with an error, that error on
|
|
12
|
+
* stderr through formatCliError.
|
|
13
|
+
*/
|
|
14
|
+
function withError(error, lines) {
|
|
15
|
+
const stdout = `${lines.join("\n")}\n`;
|
|
16
|
+
return error === undefined ? stdout : { stdout, error };
|
|
17
|
+
}
|
|
18
|
+
/** A participant's status in words: a dry run's placeholder status says that nothing ran live. */
|
|
19
|
+
function participantStatus(status) {
|
|
20
|
+
return status === "contract_proof_only" ? "dry run, nothing ran live" : status;
|
|
21
|
+
}
|
|
22
|
+
export function formatConcurrentSharedWorldStudyHuman(result) {
|
|
23
|
+
return withError(result.error, [
|
|
24
|
+
...runHeader(result, "shared-world"),
|
|
6
25
|
`run: ${result.runId}`,
|
|
7
|
-
`lab: ${result.labId}`,
|
|
8
26
|
`actor: ${result.actor}`,
|
|
9
27
|
`topology: ${result.topology}/${result.topologyMode} (${result.roleCount} persona${result.roleCount === 1 ? "" : "s"}, concurrency ${result.concurrency})`,
|
|
10
28
|
...(result.host ? [`host: ${result.host}`] : []),
|
|
@@ -16,7 +34,7 @@ export function formatConcurrentSharedWorldLabHuman(result) {
|
|
|
16
34
|
: [
|
|
17
35
|
`overlap: ${result.overlapProven ? "proven" : "not observed"} (this run only; no scale or adoption claim)`,
|
|
18
36
|
]),
|
|
19
|
-
...result.roles.map((participant) => `persona ${participant.id} (${participant.persona}): ${participant.status}${participant.session ? ` (${participant.session.completionReason})` : ""}
|
|
37
|
+
...result.roles.map((participant) => `persona ${participant.id} (${participant.persona}): ${participantStatus(participant.status)}${participant.session ? ` (${participant.session.completionReason})` : ""}${participant.ok ? "" : ", not ok"}`),
|
|
20
38
|
...(result.subjectSandbox
|
|
21
39
|
? [
|
|
22
40
|
`subject sandbox: ${result.subjectSandbox.sandboxId} killed=${result.subjectSandbox.killed ? "yes" : "no"}`,
|
|
@@ -27,14 +45,12 @@ export function formatConcurrentSharedWorldLabHuman(result) {
|
|
|
27
45
|
? []
|
|
28
46
|
: [`opened: ${result.observer.opened ? "yes" : "no"}`]),
|
|
29
47
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
30
|
-
]
|
|
48
|
+
]);
|
|
31
49
|
}
|
|
32
|
-
export function
|
|
33
|
-
return ([
|
|
34
|
-
|
|
35
|
-
...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
|
|
50
|
+
export function formatTerminalStudyHuman(result) {
|
|
51
|
+
return withError(result.error, [
|
|
52
|
+
...runHeader(result, "terminal"),
|
|
36
53
|
`run: ${result.runId}`,
|
|
37
|
-
`lab: ${result.labId}`,
|
|
38
54
|
`actor: ${result.actor}`,
|
|
39
55
|
`product: ${result.product}`,
|
|
40
56
|
...(result.observer?.observerPath ? [`observer: ${result.observer.observerPath}`] : []),
|
|
@@ -42,14 +58,12 @@ export function formatTerminalLabHuman(result) {
|
|
|
42
58
|
? []
|
|
43
59
|
: [`opened: ${result.observer.opened ? "yes" : "no"}`]),
|
|
44
60
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
45
|
-
]
|
|
61
|
+
]);
|
|
46
62
|
}
|
|
47
|
-
export function
|
|
48
|
-
return ([
|
|
49
|
-
|
|
50
|
-
...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
|
|
63
|
+
export function formatScriptedStudyHuman(result) {
|
|
64
|
+
return withError(result.error, [
|
|
65
|
+
...runHeader(result, "scripted"),
|
|
51
66
|
`run: ${result.runId}`,
|
|
52
|
-
`lab: ${result.labId}`,
|
|
53
67
|
`actor: ${result.actor}`,
|
|
54
68
|
`subject: ${result.appUrl}`,
|
|
55
69
|
...(result.scenario
|
|
@@ -63,14 +77,12 @@ export function formatScriptedLabHuman(result) {
|
|
|
63
77
|
? []
|
|
64
78
|
: [`opened: ${result.observer.opened ? "yes" : "no"}`]),
|
|
65
79
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
66
|
-
]
|
|
80
|
+
]);
|
|
67
81
|
}
|
|
68
|
-
export function
|
|
69
|
-
return ([
|
|
70
|
-
|
|
71
|
-
...(result.error ? [`${result.error.code}: ${result.error.message}`] : []),
|
|
82
|
+
export function formatCuaStudyHuman(result) {
|
|
83
|
+
return withError(result.error, [
|
|
84
|
+
...runHeader(result, "computer-use"),
|
|
72
85
|
`run: ${result.runId}`,
|
|
73
|
-
`lab: ${result.labId}`,
|
|
74
86
|
`actor: ${result.actor}`,
|
|
75
87
|
`subject: ${result.appUrl}`,
|
|
76
88
|
...(result.subject?.source === "clone"
|
|
@@ -83,11 +95,11 @@ export function formatCuaLabHuman(result) {
|
|
|
83
95
|
: []),
|
|
84
96
|
...(result.diagnostics ? [`diagnostic: ${formatCuaDiagnostics(result.diagnostics)}`] : []),
|
|
85
97
|
...((result.lanes?.length ?? 0) > 1
|
|
86
|
-
? result.lanes.map((participant) => `participant ${participant.id}: ${participant.status}${participant.session ? ` (${participant.session.completionReason})` : ""}${participant.diagnostics ? ` · ${formatCuaDiagnostics(participant.diagnostics)}` : ""}${participant.session ? ` · ${participant.session.reason}` : ""}`)
|
|
98
|
+
? result.lanes.map((participant) => `participant ${participant.id}: ${participantStatus(participant.status)}${participant.session ? ` (${participant.session.completionReason})` : ""}${participant.diagnostics ? ` · ${formatCuaDiagnostics(participant.diagnostics)}` : ""}${participant.session ? ` · ${participant.session.reason}` : ""}`)
|
|
87
99
|
: []),
|
|
88
100
|
...(result.session && (result.lanes?.length ?? 0) <= 1
|
|
89
101
|
? [
|
|
90
|
-
`session: ${result.session.status} (${result.session.completionReason})${result.session.stopCause ? ` · ${formatCuaStopCause(result.session.stopCause)}` : ""} · ${result.session.reason}`,
|
|
102
|
+
`session: ${participantStatus(result.session.status)} (${result.session.completionReason})${result.session.stopCause ? ` · ${formatCuaStopCause(result.session.stopCause)}` : ""} · ${result.session.reason}`,
|
|
91
103
|
`screenshots: ${result.session.screenshots}`,
|
|
92
104
|
]
|
|
93
105
|
: []),
|
|
@@ -101,5 +113,5 @@ export function formatCuaLabHuman(result) {
|
|
|
101
113
|
? []
|
|
102
114
|
: [`opened: ${result.observer.opened ? "yes" : "no"}`]),
|
|
103
115
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
104
|
-
]
|
|
116
|
+
]);
|
|
105
117
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type {
|
|
3
|
-
import { type CliIo, type
|
|
4
|
-
import type { RouteRun } from "./
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import { type CliIo, type StudyCommandOptions } from "../io.js";
|
|
4
|
+
import type { RouteRun } from "./study-route-run.js";
|
|
5
5
|
interface ComputerUseRouteArgs {
|
|
6
6
|
command: Command;
|
|
7
7
|
io: CliIo;
|
|
8
|
-
config:
|
|
8
|
+
config: StudyConfig;
|
|
9
9
|
mode: "run" | "watch";
|
|
10
|
-
options:
|
|
10
|
+
options: StudyCommandOptions;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* The computer-use route's CLI setup: its settings, the watch and exposure plan, the
|
|
13
|
+
* The computer-use route's CLI setup: its settings, the watch and exposure plan, the runStudyWith options
|
|
14
14
|
* with the live Observer hook, and how it presents the outcome or a run error. Undefined when
|
|
15
15
|
* setup has already written its own result.
|
|
16
16
|
*/
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { automaticAnalysisSucceeded } from "../../analysis/automatic-completion.js";
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
-
import {} from "../../run-
|
|
4
|
-
import {
|
|
5
|
-
import { CUA_ACTOR_LAB_SCHEMA } from "../../routes/computer-use/types.js";
|
|
3
|
+
import {} from "../../run-study.js";
|
|
4
|
+
import { resolveStudyDryRun } from "../../study/plan.js";
|
|
6
5
|
import { serveObserver } from "../../observer/render.js";
|
|
7
6
|
import { startExposedObserver, validateExposure } from "../../observer/exposure.js";
|
|
8
7
|
import { ServeTunnelError } from "../../observer/tunnel.js";
|
|
9
8
|
import { cliAnalysisOptions } from "./analysis-signals.js";
|
|
10
9
|
import { onRunShutdown } from "./run-signals.js";
|
|
11
|
-
import {
|
|
10
|
+
import { parseStudyCount, parseParticipantIds, parseObserverPort, wantsJson, writeResult, } from "../io.js";
|
|
12
11
|
import { exposureRequestFromOptions, followObserver, planObserver, showObserver, staticObserverOpen, withObserverServer, } from "../observer-follow.js";
|
|
13
|
-
import {
|
|
14
|
-
import { resolveRouteShouldOpen } from "./
|
|
12
|
+
import { formatCuaStudyHuman } from "./study-format.js";
|
|
13
|
+
import { resolveRouteShouldOpen } from "./study-route-open.js";
|
|
14
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
15
15
|
/**
|
|
16
|
-
* The computer-use route's CLI setup: its settings, the watch and exposure plan, the
|
|
16
|
+
* The computer-use route's CLI setup: its settings, the watch and exposure plan, the runStudyWith options
|
|
17
17
|
* with the live Observer hook, and how it presents the outcome or a run error. Undefined when
|
|
18
18
|
* setup has already written its own result.
|
|
19
19
|
*/
|
|
@@ -50,10 +50,9 @@ export function computerUseRouteRun(args) {
|
|
|
50
50
|
}
|
|
51
51
|
function refuseCua(args, dryRun, code, message) {
|
|
52
52
|
const result = {
|
|
53
|
-
|
|
53
|
+
...studyResultIdentity("computer-use", args.config.id),
|
|
54
54
|
ok: false,
|
|
55
55
|
cwd: args.options.cwd,
|
|
56
|
-
labId: args.config.id,
|
|
57
56
|
actor: args.config.actors[0]?.type ?? "",
|
|
58
57
|
appUrl: "",
|
|
59
58
|
dryRun,
|
|
@@ -61,7 +60,7 @@ function refuseCua(args, dryRun, code, message) {
|
|
|
61
60
|
warnings: [],
|
|
62
61
|
error: { code, message },
|
|
63
62
|
};
|
|
64
|
-
writeResult(args.command, args.io, result,
|
|
63
|
+
writeResult(args.command, args.io, result, formatCuaStudyHuman);
|
|
65
64
|
args.io.setExitCode(2);
|
|
66
65
|
}
|
|
67
66
|
/** Parses the options, or writes the refusal and returns undefined. */
|
|
@@ -79,13 +78,13 @@ function resolveCuaSettings(args) {
|
|
|
79
78
|
args.io.setExitCode(2);
|
|
80
79
|
return undefined;
|
|
81
80
|
}
|
|
82
|
-
const count =
|
|
81
|
+
const count = parseStudyCount(args.options.count, args.config.actors[0]?.count ?? 1);
|
|
83
82
|
if (count === null) {
|
|
84
83
|
args.io.writeErr("error: --count must be a positive integer.\n");
|
|
85
84
|
args.io.setExitCode(2);
|
|
86
85
|
return undefined;
|
|
87
86
|
}
|
|
88
|
-
const dryRun =
|
|
87
|
+
const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
|
|
89
88
|
const port = parseObserverPort(args.options.port ?? "0");
|
|
90
89
|
const wantsFollow = args.mode === "watch" && !wantsMachine && args.options.detach !== true && dryRun !== true;
|
|
91
90
|
if (port === null) {
|
|
@@ -97,7 +96,7 @@ function resolveCuaSettings(args) {
|
|
|
97
96
|
/** Validates exposure and plans the finished-run Observer, or returns undefined after refusing. */
|
|
98
97
|
function prepareCuaWatch(args, settings) {
|
|
99
98
|
// Validate exposure up front (fail-closed matrix), before any run/spend. A live CUA watch is the
|
|
100
|
-
// one surface that serves runtime E2B stream URLs, so it
|
|
99
|
+
// one surface that serves runtime E2B stream URLs, so it must sit behind edge auth.
|
|
101
100
|
const exposeValidation = validateExposure("watch", exposureRequestFromOptions(args.options), {
|
|
102
101
|
dryRun: settings.dryRun,
|
|
103
102
|
detach: args.options.detach === true,
|
|
@@ -123,7 +122,7 @@ function prepareCuaWatch(args, settings) {
|
|
|
123
122
|
return undefined;
|
|
124
123
|
return { exposure: exposeValidation.plan, finishedPlan };
|
|
125
124
|
}
|
|
126
|
-
/** The
|
|
125
|
+
/** The runStudyWith options for this invocation, with the live Observer hook for a followed watch. */
|
|
127
126
|
function cuaRunOptions(args, settings, prepared, live) {
|
|
128
127
|
const { finishedPlan } = prepared;
|
|
129
128
|
return {
|
|
@@ -141,7 +140,7 @@ function cuaRunOptions(args, settings, prepared, live) {
|
|
|
141
140
|
dryRun: settings.dryRun,
|
|
142
141
|
...(settings.wantsFollow
|
|
143
142
|
? {
|
|
144
|
-
// Fires
|
|
143
|
+
// Fires inside runStudyWith, before the actor loop and before sandbox creation, so a
|
|
145
144
|
// tunnel-auth failure aborts before any spend and leaves no orphaned sandbox.
|
|
146
145
|
onObserverReady: (observer) => attachLiveObserver(args.io, settings, prepared.exposure, live, observer),
|
|
147
146
|
}
|
|
@@ -214,7 +213,7 @@ async function attachLiveObserver(io, settings, exposure, live, observer) {
|
|
|
214
213
|
async function reportCuaRun(args, prepared, result, live) {
|
|
215
214
|
const { server, observer: attachedObserver } = live;
|
|
216
215
|
const exposeRequested = prepared.exposure.exposed;
|
|
217
|
-
// Serving is
|
|
216
|
+
// Serving is not gated on result.ok: a timed_out, incomplete or failed run still comes up so the
|
|
218
217
|
// operator can inspect its evidence live (and, under --expose, from a phone).
|
|
219
218
|
let output = result;
|
|
220
219
|
if (server && attachedObserver) {
|
|
@@ -224,7 +223,7 @@ async function reportCuaRun(args, prepared, result, live) {
|
|
|
224
223
|
observer: withObserverServer(attachedResult, server),
|
|
225
224
|
warnings: [
|
|
226
225
|
...result.warnings,
|
|
227
|
-
"
|
|
226
|
+
"The live computer-use server polls observer-data.json with no-store caching.",
|
|
228
227
|
...(exposeRequested
|
|
229
228
|
? [
|
|
230
229
|
`Exposed live desktop stream URLs to an edge-authenticated remote viewer${live.tunnel ? ` via ${live.tunnel.url.replace(/\/$/, "")}` : ""}.`,
|
|
@@ -236,7 +235,7 @@ async function reportCuaRun(args, prepared, result, live) {
|
|
|
236
235
|
],
|
|
237
236
|
};
|
|
238
237
|
}
|
|
239
|
-
writeResult(args.command, args.io, output,
|
|
238
|
+
writeResult(args.command, args.io, output, formatCuaStudyHuman);
|
|
240
239
|
args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
|
|
241
240
|
if (server && (result.observer?.ok || attachedObserver)) {
|
|
242
241
|
const followResult = output.observer?.ok
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type { CliIo,
|
|
2
|
+
import type { CliIo, StudyCommandOptions } from "../io.js";
|
|
3
3
|
import { type ObserverPlan } from "../observer-follow.js";
|
|
4
4
|
/**
|
|
5
|
-
* Default browser-open policy for a
|
|
5
|
+
* Default browser-open policy for a study route's run. Mirrors the observe/watch gate:
|
|
6
6
|
* an explicit --open/--no-open wins; --json (machine mode) never auto-opens; otherwise a
|
|
7
|
-
*
|
|
7
|
+
* study-file `defaults.open` wins, and the final fallback opens only for an interactive
|
|
8
8
|
* `watch` on a real TTY. Extracted so every route's CLI setup shares one gate (and one test).
|
|
9
9
|
*/
|
|
10
10
|
export declare function resolveRouteShouldOpen(args: {
|
|
@@ -21,7 +21,7 @@ export declare function watchFinishedPlan(args: {
|
|
|
21
21
|
command: Command;
|
|
22
22
|
io: CliIo;
|
|
23
23
|
mode: "run" | "watch";
|
|
24
|
-
options:
|
|
24
|
+
options: StudyCommandOptions;
|
|
25
25
|
}, wantsMachine: boolean, shouldOpen: boolean): ObserverPlan | null | undefined;
|
|
26
26
|
/** The route's static render opens only when nothing else will open the Observer. */
|
|
27
27
|
export declare function observerOpen(mode: "run" | "watch", finishedPlan: ObserverPlan | undefined, shouldOpen: boolean): boolean;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { planObserver, staticObserverOpen } from "../observer-follow.js";
|
|
3
3
|
/**
|
|
4
|
-
* Default browser-open policy for a
|
|
4
|
+
* Default browser-open policy for a study route's run. Mirrors the observe/watch gate:
|
|
5
5
|
* an explicit --open/--no-open wins; --json (machine mode) never auto-opens; otherwise a
|
|
6
|
-
*
|
|
6
|
+
* study-file `defaults.open` wins, and the final fallback opens only for an interactive
|
|
7
7
|
* `watch` on a real TTY. Extracted so every route's CLI setup shares one gate (and one test).
|
|
8
8
|
*/
|
|
9
9
|
export function resolveRouteShouldOpen(args) {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type {
|
|
3
|
-
import { type CliIo, type
|
|
4
|
-
import type { RouteRun } from "./
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import { type CliIo, type StudyCommandOptions } from "../io.js";
|
|
4
|
+
import type { RouteRun } from "./study-route-run.js";
|
|
5
5
|
interface PreviewRouteArgs {
|
|
6
6
|
command: Command;
|
|
7
7
|
io: CliIo;
|
|
8
|
-
|
|
9
|
-
config:
|
|
8
|
+
study: string;
|
|
9
|
+
config: StudyConfig;
|
|
10
10
|
mode: "run" | "watch";
|
|
11
|
-
options:
|
|
11
|
+
options: StudyCommandOptions;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* The preview route's CLI setup: the participant count and Observer plan, its
|
|
14
|
+
* The preview route's CLI setup: the participant count and Observer plan, its runStudyWith options, and how it
|
|
15
15
|
* presents the outcome. Undefined when setup has already written its own result.
|
|
16
16
|
*/
|
|
17
17
|
export declare function previewRouteRun(args: PreviewRouteArgs): RouteRun | undefined;
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
2
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
3
|
+
import { formatRunHuman, parseStudyCount, writeResult, } from "../io.js";
|
|
3
4
|
import { planObserver, showObserver, staticObserverOpen } from "../observer-follow.js";
|
|
4
5
|
/**
|
|
5
|
-
* The preview route's CLI setup: the participant count and Observer plan, its
|
|
6
|
+
* The preview route's CLI setup: the participant count and Observer plan, its runStudyWith options, and how it
|
|
6
7
|
* presents the outcome. Undefined when setup has already written its own result.
|
|
7
8
|
*/
|
|
8
9
|
export function previewRouteRun(args) {
|
|
9
|
-
const participantCount =
|
|
10
|
+
const participantCount = parseStudyCount(args.options.count, args.config.actors[0]?.count ?? 4);
|
|
10
11
|
if (participantCount === null) {
|
|
11
12
|
const result = {
|
|
12
|
-
|
|
13
|
+
...studyResultIdentity("preview", args.config.id),
|
|
13
14
|
ok: false,
|
|
14
15
|
cwd: args.options.cwd,
|
|
15
16
|
warnings: [],
|
|
16
17
|
error: {
|
|
17
|
-
code: "
|
|
18
|
+
code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
|
|
18
19
|
message: "--count must be a positive integer.",
|
|
19
20
|
},
|
|
20
21
|
};
|
|
@@ -23,7 +24,7 @@ export function previewRouteRun(args) {
|
|
|
23
24
|
return undefined;
|
|
24
25
|
}
|
|
25
26
|
// `run` renders the Observer too, so `run` and `watch` write the same bundle and the first
|
|
26
|
-
// `export` of a run bundle finds observer/index.html
|
|
27
|
+
// `export` of a run bundle finds observer/index.html. A render failure is a warning on the
|
|
27
28
|
// result, never a failed run. The preview renders through its finished run, so the page shown is
|
|
28
29
|
// the run just written, never a directory swapped in under its id.
|
|
29
30
|
const openOverride = args.options.open ?? args.config.defaults?.open;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type InternalRunStudyOptions, type StudyOutcome } from "../../run-study.js";
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import type { LoadedAdapterScorer } from "./study-scorer.js";
|
|
4
|
+
export interface RouteRun {
|
|
5
|
+
readonly options: InternalRunStudyOptions;
|
|
6
|
+
present(outcome: StudyOutcome): Promise<void>;
|
|
7
|
+
/** Handles an error runStudyWith threw, and rethrows any it does not handle. */
|
|
8
|
+
onRunError?(error: unknown): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Plans the study with a route's options, then presents the refusal or the run. `beforeRun` runs
|
|
12
|
+
* only for a plan that will run: it loads the scorer, or writes its own refusal and returns
|
|
13
|
+
* undefined, so a refused study never imports the scorer's host code. `afterRun` runs once runStudyWith
|
|
14
|
+
* has returned or thrown, before presentation, which may hold its own signal handlers (watch's
|
|
15
|
+
* Observer and tunnel).
|
|
16
|
+
*/
|
|
17
|
+
export declare function runRoute(config: StudyConfig, run: RouteRun, beforeRun?: () => Promise<{
|
|
18
|
+
scorer?: LoadedAdapterScorer;
|
|
19
|
+
} | undefined>, afterRun?: () => void): Promise<void>;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
// What a route's CLI setup hands the
|
|
2
|
-
// the outcome. runRoute plans the
|
|
3
|
-
import {
|
|
1
|
+
// What a route's CLI setup hands the run command: the runStudyWith options it chose and how it presents
|
|
2
|
+
// the outcome. runRoute plans the study once and runs it between the two.
|
|
3
|
+
import { prepareStudy } from "../../run-study.js";
|
|
4
4
|
/**
|
|
5
|
-
* Plans the
|
|
5
|
+
* Plans the study with a route's options, then presents the refusal or the run. `beforeRun` runs
|
|
6
6
|
* only for a plan that will run: it loads the scorer, or writes its own refusal and returns
|
|
7
|
-
* undefined, so a refused
|
|
7
|
+
* undefined, so a refused study never imports the scorer's host code. `afterRun` runs once runStudyWith
|
|
8
8
|
* has returned or thrown, before presentation, which may hold its own signal handlers (watch's
|
|
9
9
|
* Observer and tunnel).
|
|
10
10
|
*/
|
|
11
11
|
export async function runRoute(config, run, beforeRun = () => Promise.resolve({}), afterRun = () => undefined) {
|
|
12
12
|
let outcome;
|
|
13
13
|
try {
|
|
14
|
-
const prepared = await
|
|
14
|
+
const prepared = await prepareStudy(config, run.options);
|
|
15
15
|
if (prepared.ok) {
|
|
16
16
|
const ready = await beforeRun();
|
|
17
17
|
if (ready === undefined)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import { type CliIo, type StudyCommandOptions } from "../io.js";
|
|
4
|
+
import type { RouteRun } from "./study-route-run.js";
|
|
5
|
+
interface ScriptedRouteArgs {
|
|
6
|
+
command: Command;
|
|
7
|
+
io: CliIo;
|
|
8
|
+
config: StudyConfig;
|
|
9
|
+
mode: "run" | "watch";
|
|
10
|
+
options: StudyCommandOptions;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The scripted route's CLI setup: its open semantics and runStudyWith options, and how it presents the
|
|
14
|
+
* outcome. Undefined when watch-mode setup has already written its own result.
|
|
15
|
+
*/
|
|
16
|
+
export declare function scriptedRouteRun(args: ScriptedRouteArgs): RouteRun | undefined;
|
|
17
|
+
export {};
|
|
@@ -3,10 +3,10 @@ import { Command } from "commander";
|
|
|
3
3
|
import { cliAnalysisOptions } from "./analysis-signals.js";
|
|
4
4
|
import { wantsJson, writeResult } from "../io.js";
|
|
5
5
|
import { showObserver } from "../observer-follow.js";
|
|
6
|
-
import {
|
|
7
|
-
import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./
|
|
6
|
+
import { formatScriptedStudyHuman } from "./study-format.js";
|
|
7
|
+
import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./study-route-open.js";
|
|
8
8
|
/**
|
|
9
|
-
* The scripted route's CLI setup: its open semantics and
|
|
9
|
+
* The scripted route's CLI setup: its open semantics and runStudyWith options, and how it presents the
|
|
10
10
|
* outcome. Undefined when watch-mode setup has already written its own result.
|
|
11
11
|
*/
|
|
12
12
|
export function scriptedRouteRun(args) {
|
|
@@ -33,7 +33,7 @@ export function scriptedRouteRun(args) {
|
|
|
33
33
|
throw new Error(`Expected the scripted route, got ${outcome.route}.`);
|
|
34
34
|
}
|
|
35
35
|
const result = outcome.result;
|
|
36
|
-
writeResult(args.command, args.io, result,
|
|
36
|
+
writeResult(args.command, args.io, result, formatScriptedStudyHuman);
|
|
37
37
|
args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
|
|
38
38
|
// Watch mode serves the Observer the route rendered through its finished run.
|
|
39
39
|
if (finishedPlan !== undefined && result.ok && result.observer !== undefined) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type {
|
|
3
|
-
import { type CliIo, type
|
|
4
|
-
import type { RouteRun } from "./
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import { type CliIo, type StudyCommandOptions } from "../io.js";
|
|
4
|
+
import type { RouteRun } from "./study-route-run.js";
|
|
5
5
|
interface SharedWorldRouteArgs {
|
|
6
6
|
command: Command;
|
|
7
7
|
io: CliIo;
|
|
8
|
-
config:
|
|
8
|
+
config: StudyConfig;
|
|
9
9
|
mode: "run" | "watch";
|
|
10
|
-
options:
|
|
10
|
+
options: StudyCommandOptions;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { automaticAnalysisSucceeded } from "../../analysis/automatic-completion.js";
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveStudyDryRun } from "../../study/plan.js";
|
|
4
4
|
import { serveObserver } from "../../observer/render.js";
|
|
5
5
|
import { redactText } from "../../evidence/redaction.js";
|
|
6
6
|
import { cliAnalysisOptions } from "./analysis-signals.js";
|
|
7
7
|
import { parseObserverPort, wantsJson, writeResult, } from "../io.js";
|
|
8
8
|
import { followObserver, showObserver, staticObserverOpen, withObserverServer, } from "../observer-follow.js";
|
|
9
|
-
import {
|
|
10
|
-
import { resolveRouteShouldOpen, watchFinishedPlan } from "./
|
|
11
|
-
import { rosterOf } from "../../
|
|
9
|
+
import { formatConcurrentSharedWorldStudyHuman } from "./study-format.js";
|
|
10
|
+
import { resolveRouteShouldOpen, watchFinishedPlan } from "./study-route-open.js";
|
|
11
|
+
import { rosterOf } from "../../study/parse/actors.js";
|
|
12
|
+
import { studyResultIdentity } from "../../run/study-result.js";
|
|
12
13
|
/**
|
|
13
14
|
* The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
|
|
14
15
|
* the run attaches, and how it presents the outcome. Undefined when setup has already written its
|
|
@@ -16,7 +17,7 @@ import { rosterOf } from "../../lab/parse/actors.js";
|
|
|
16
17
|
*/
|
|
17
18
|
export function sharedWorldRouteRun(args) {
|
|
18
19
|
const wantsMachine = wantsJson(args.command);
|
|
19
|
-
const dryRun =
|
|
20
|
+
const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
|
|
20
21
|
const shouldOpen = resolveRouteShouldOpen({
|
|
21
22
|
optionOpen: args.options.open,
|
|
22
23
|
defaultsOpen: args.config.defaults?.open,
|
|
@@ -27,10 +28,9 @@ export function sharedWorldRouteRun(args) {
|
|
|
27
28
|
const port = parseObserverPort(args.options.port ?? "0");
|
|
28
29
|
const failConcurrent = (message, runId) => {
|
|
29
30
|
const result = {
|
|
30
|
-
|
|
31
|
+
...studyResultIdentity("shared-world", args.config.id),
|
|
31
32
|
ok: false,
|
|
32
33
|
cwd: args.options.cwd,
|
|
33
|
-
labId: args.config.id,
|
|
34
34
|
actor: args.config.actors[0]?.type ?? "",
|
|
35
35
|
topology: "shared-world",
|
|
36
36
|
topologyMode: "concurrent",
|
|
@@ -40,9 +40,9 @@ export function sharedWorldRouteRun(args) {
|
|
|
40
40
|
runId: runId ?? args.options.runId ?? "not-created",
|
|
41
41
|
roles: [],
|
|
42
42
|
warnings: [],
|
|
43
|
-
error: { code: "
|
|
43
|
+
error: { code: "HUMANISH_SHARED_WORLD_FAILED", message },
|
|
44
44
|
};
|
|
45
|
-
writeResult(args.command, args.io, result,
|
|
45
|
+
writeResult(args.command, args.io, result, formatConcurrentSharedWorldStudyHuman);
|
|
46
46
|
args.io.setExitCode(2);
|
|
47
47
|
};
|
|
48
48
|
if (wantsFollow && port === null) {
|
|
@@ -116,7 +116,7 @@ export function sharedWorldRouteRun(args) {
|
|
|
116
116
|
],
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
|
-
writeResult(args.command, args.io, output,
|
|
119
|
+
writeResult(args.command, args.io, output, formatConcurrentSharedWorldStudyHuman);
|
|
120
120
|
args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
|
|
121
121
|
if (server && output.observer?.ok) {
|
|
122
122
|
await followObserver(args.io, output.observer, server);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
3
|
+
import { type CliIo, type StudyCommandOptions } from "../io.js";
|
|
4
|
+
import type { RouteRun } from "./study-route-run.js";
|
|
5
|
+
interface TerminalRouteArgs {
|
|
6
|
+
command: Command;
|
|
7
|
+
io: CliIo;
|
|
8
|
+
config: StudyConfig;
|
|
9
|
+
mode: "run" | "watch";
|
|
10
|
+
options: StudyCommandOptions;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The terminal route's CLI setup: its open semantics and runStudyWith options, and how it presents the
|
|
14
|
+
* outcome. Undefined when watch-mode setup has already written its own result.
|
|
15
|
+
*/
|
|
16
|
+
export declare function terminalRouteRun(args: TerminalRouteArgs): RouteRun | undefined;
|
|
17
|
+
export {};
|
|
@@ -3,10 +3,10 @@ import { Command } from "commander";
|
|
|
3
3
|
import { cliAnalysisOptions } from "./analysis-signals.js";
|
|
4
4
|
import { wantsJson, writeResult } from "../io.js";
|
|
5
5
|
import { showObserver } from "../observer-follow.js";
|
|
6
|
-
import {
|
|
7
|
-
import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./
|
|
6
|
+
import { formatTerminalStudyHuman } from "./study-format.js";
|
|
7
|
+
import { observerOpen, resolveRouteShouldOpen, watchFinishedPlan } from "./study-route-open.js";
|
|
8
8
|
/**
|
|
9
|
-
* The terminal route's CLI setup: its open semantics and
|
|
9
|
+
* The terminal route's CLI setup: its open semantics and runStudyWith options, and how it presents the
|
|
10
10
|
* outcome. Undefined when watch-mode setup has already written its own result.
|
|
11
11
|
*/
|
|
12
12
|
export function terminalRouteRun(args) {
|
|
@@ -33,7 +33,7 @@ export function terminalRouteRun(args) {
|
|
|
33
33
|
throw new Error(`Expected the terminal route, got ${outcome.route}.`);
|
|
34
34
|
}
|
|
35
35
|
const result = outcome.result;
|
|
36
|
-
writeResult(args.command, args.io, result,
|
|
36
|
+
writeResult(args.command, args.io, result, formatTerminalStudyHuman);
|
|
37
37
|
args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
|
|
38
38
|
if (finishedPlan !== undefined && result.ok && result.observer !== undefined) {
|
|
39
39
|
await showObserver({
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type CliIo, type StudyCommandOptions } from "../io.js";
|
|
3
|
+
export declare function runStudyCommand(args: {
|
|
4
|
+
command: Command;
|
|
5
|
+
io: CliIo;
|
|
6
|
+
study: string;
|
|
7
|
+
mode: "run" | "watch";
|
|
8
|
+
options: StudyCommandOptions;
|
|
9
|
+
}): Promise<void>;
|