humanish 0.108.0 → 0.109.1
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 +58 -59
- package/CHANGELOG.md +22 -0
- package/CONTEXT.md +44 -44
- package/README.md +3 -3
- package/TELEMETRY.md +2 -2
- package/dist/actors/codex/app-server-trace.js +2 -1
- package/dist/actors/codex/restricted-participant.js +12 -12
- package/dist/actors/codex/restricted-session.d.ts +2 -2
- package/dist/actors/computer-use/actor.d.ts +6 -6
- package/dist/actors/computer-use/actor.js +2 -2
- package/dist/actors/computer-use/admission-limit.d.ts +2 -2
- package/dist/actors/computer-use/admission-limit.js +3 -3
- 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.js +5 -5
- package/dist/actors/computer-use/loop/debrief.js +2 -2
- package/dist/actors/computer-use/loop/ending.d.ts +1 -1
- package/dist/actors/computer-use/loop/ending.js +12 -11
- package/dist/actors/computer-use/loop/observation.js +6 -5
- package/dist/actors/computer-use/loop/provider-call.js +11 -11
- package/dist/actors/computer-use/loop/session.d.ts +4 -4
- package/dist/actors/computer-use/loop/session.js +2 -2
- package/dist/actors/computer-use/loop/trace.js +3 -2
- package/dist/actors/computer-use/loop/types.d.ts +24 -24
- package/dist/actors/computer-use/loop/usage.d.ts +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-provider.d.ts +2 -2
- package/dist/actors/computer-use/openai-provider.js +8 -8
- 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 +4 -4
- package/dist/actors/contract.js +1 -1
- package/dist/actors/local-agent/claude-session.js +3 -3
- package/dist/actors/local-agent/cli.d.ts +1 -1
- package/dist/actors/local-agent/cli.js +1 -1
- package/dist/actors/reasoning-effort.js +3 -3
- package/dist/actors/registry.d.ts +2 -2
- package/dist/actors/registry.js +3 -3
- package/dist/actors/scripted-browser/actor.d.ts +2 -2
- package/dist/actors/scripted-browser/actor.js +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/execute.d.ts +1 -1
- package/dist/analysis/execute.js +1 -1
- 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/comms.js +14 -22
- package/dist/cli/commands/migrate.js +15 -4
- package/dist/cli/commands/observe.d.ts +0 -1
- package/dist/cli/commands/observe.js +0 -15
- package/dist/cli/commands/run-command.d.ts +2 -2
- package/dist/cli/commands/run-command.js +3 -3
- package/dist/cli/commands/runs.js +9 -7
- package/dist/cli/commands/setup.js +5 -7
- package/dist/cli/commands/study-format.d.ts +9 -0
- package/dist/cli/commands/{lab-format.js → study-format.js} +5 -5
- 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} +12 -12
- 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} +3 -3
- 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} +7 -7
- 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} +34 -34
- package/dist/cli/commands/{lab-scorer.d.ts → study-scorer.d.ts} +5 -5
- package/dist/cli/commands/{lab-scorer.js → study-scorer.js} +1 -1
- package/dist/cli/commands/study.js +13 -49
- package/dist/cli/commands/tui.js +12 -12
- package/dist/cli/commands/watch.js +30 -65
- package/dist/cli/deprecations.d.ts +1 -13
- package/dist/cli/deprecations.js +0 -30
- package/dist/cli/doctor.d.ts +3 -3
- package/dist/cli/doctor.js +16 -16
- package/dist/cli/first-run-path.d.ts +4 -4
- package/dist/cli/first-run-path.js +7 -7
- package/dist/cli/io.d.ts +3 -3
- package/dist/cli/io.js +2 -2
- package/dist/cli/observer-follow.d.ts +2 -2
- package/dist/cli/observer-follow.js +2 -2
- package/dist/cli/orientation.d.ts +4 -4
- package/dist/cli/orientation.js +58 -20
- package/dist/cli/program.js +3 -4
- package/dist/cli/telemetry.d.ts +1 -1
- package/dist/cli/telemetry.js +14 -20
- package/dist/comms/catch-host.d.ts +1 -1
- package/dist/comms/catch-host.js +3 -3
- package/dist/comms/connections.d.ts +1 -1
- package/dist/comms/connections.js +2 -2
- package/dist/comms/external-evidence.d.ts +5 -5
- package/dist/comms/external-evidence.js +4 -3
- package/dist/comms/fake-inbox.d.ts +2 -2
- package/dist/comms/fake-inbox.js +2 -2
- package/dist/comms/receiving-runtime.d.ts +4 -4
- package/dist/comms/sandbox-catch.d.ts +2 -2
- package/dist/comms/sandbox-catch.js +2 -2
- package/dist/comms/setup.d.ts +2 -2
- package/dist/comms/setup.js +29 -32
- package/dist/evidence/redaction.d.ts +11 -0
- package/dist/evidence/redaction.js +43 -0
- package/dist/feedback/draft.js +2 -2
- package/dist/feedback/export-bundle.js +5 -4
- package/dist/feedback/export.js +3 -2
- 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 +17 -17
- 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.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 +5 -5
- package/dist/index.d.ts +13 -15
- package/dist/index.js +6 -8
- package/dist/observer/artifact.d.ts +1 -1
- package/dist/observer/artifact.js +1 -1
- package/dist/observer/data.d.ts +1 -1
- package/dist/observer/library.d.ts +2 -0
- package/dist/observer/library.js +4 -1
- package/dist/observer/render.js +7 -1
- package/dist/observer/run-routes.d.ts +1 -0
- package/dist/observer/run-routes.js +37 -12
- package/dist/observer/serve.d.ts +1 -1
- package/dist/observer-app.html +1 -1
- package/dist/routes/computer-use/bundle-parts.js +3 -2
- package/dist/routes/computer-use/bundle.d.ts +2 -2
- package/dist/routes/computer-use/bundle.js +7 -6
- package/dist/routes/computer-use/e2b-desktop/comms.d.ts +5 -5
- package/dist/routes/computer-use/e2b-desktop/comms.js +5 -4
- package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +1 -1
- package/dist/routes/computer-use/e2b-desktop/prepare.js +3 -3
- package/dist/routes/computer-use/e2b-desktop/start.js +3 -4
- package/dist/routes/computer-use/e2b-desktop/state.d.ts +2 -2
- package/dist/routes/computer-use/e2b-desktop/teardown.js +2 -3
- package/dist/routes/computer-use/external-comms.d.ts +3 -3
- package/dist/routes/computer-use/fanout-bundle.js +11 -10
- package/dist/routes/computer-use/fanout-records.js +2 -2
- package/dist/routes/computer-use/in-process-desktop.js +1 -1
- package/dist/routes/computer-use/live-flush.d.ts +3 -3
- package/dist/routes/computer-use/live-phase.d.ts +2 -3
- package/dist/routes/computer-use/live-phase.js +3 -3
- 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 +2 -2
- package/dist/routes/computer-use/participant-desktop.d.ts +3 -3
- package/dist/routes/computer-use/participant-desktop.js +1 -1
- package/dist/routes/computer-use/participant-execution.js +1 -1
- package/dist/routes/computer-use/participant-model.js +3 -3
- package/dist/routes/computer-use/participant-prompt.d.ts +5 -5
- package/dist/routes/computer-use/participant-prompt.js +3 -3
- package/dist/routes/computer-use/participant-runs.d.ts +10 -10
- package/dist/routes/computer-use/participant-runs.js +14 -13
- package/dist/routes/computer-use/plan.d.ts +12 -12
- package/dist/routes/computer-use/plan.js +27 -27
- package/dist/routes/computer-use/preflight.d.ts +5 -5
- package/dist/routes/computer-use/preflight.js +5 -5
- package/dist/routes/computer-use/rerun-selection.d.ts +1 -1
- package/dist/routes/computer-use/rerun-selection.js +3 -2
- package/dist/routes/computer-use/result.d.ts +4 -4
- package/dist/routes/computer-use/result.js +13 -12
- package/dist/routes/computer-use/route.d.ts +12 -12
- package/dist/routes/computer-use/route.js +19 -19
- package/dist/routes/computer-use/self-report.js +1 -1
- package/dist/routes/computer-use/setup.d.ts +22 -22
- package/dist/routes/computer-use/setup.js +15 -15
- package/dist/routes/computer-use/single-bundle.d.ts +4 -4
- package/dist/routes/computer-use/single-bundle.js +14 -13
- package/dist/routes/computer-use/subject-projection.d.ts +3 -3
- package/dist/routes/computer-use/types.d.ts +34 -34
- package/dist/routes/computer-use/types.js +3 -3
- package/dist/routes/preview.d.ts +6 -6
- package/dist/routes/preview.js +5 -5
- package/dist/routes/scripted/bundle.d.ts +6 -6
- package/dist/routes/scripted/bundle.js +10 -9
- package/dist/routes/scripted/plan.d.ts +7 -7
- package/dist/routes/scripted/plan.js +6 -6
- package/dist/routes/scripted/result.d.ts +3 -3
- package/dist/routes/scripted/result.js +9 -9
- package/dist/routes/scripted/route.d.ts +9 -9
- package/dist/routes/scripted/route.js +11 -11
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +3 -3
- package/dist/routes/scripted/setup.d.ts +6 -6
- package/dist/routes/scripted/setup.js +4 -4
- package/dist/routes/scripted/subject.d.ts +5 -5
- package/dist/routes/scripted/subject.js +3 -3
- package/dist/routes/scripted/surface-records.d.ts +1 -1
- package/dist/routes/scripted/surface-records.js +2 -2
- package/dist/routes/scripted/surface-sessions.d.ts +3 -3
- package/dist/routes/scripted/types.d.ts +17 -17
- package/dist/routes/scripted/types.js +1 -1
- package/dist/routes/shared-world/bundle-records.js +3 -3
- package/dist/routes/shared-world/bundle.js +15 -14
- package/dist/routes/shared-world/checkpoints.d.ts +3 -3
- package/dist/routes/shared-world/checkpoints.js +1 -1
- package/dist/routes/shared-world/comms.d.ts +9 -9
- package/dist/routes/shared-world/comms.js +6 -5
- package/dist/routes/shared-world/participant-specs.d.ts +3 -3
- package/dist/routes/shared-world/participant-specs.js +7 -7
- package/dist/routes/shared-world/plan.d.ts +9 -9
- package/dist/routes/shared-world/plan.js +9 -9
- package/dist/routes/shared-world/provisioned.d.ts +8 -8
- package/dist/routes/shared-world/provisioned.js +4 -4
- package/dist/routes/shared-world/result.d.ts +6 -6
- package/dist/routes/shared-world/result.js +11 -10
- package/dist/routes/shared-world/route.d.ts +11 -11
- package/dist/routes/shared-world/route.js +19 -19
- package/dist/routes/shared-world/setup.d.ts +13 -13
- package/dist/routes/shared-world/setup.js +19 -19
- package/dist/routes/shared-world/types.d.ts +27 -27
- package/dist/routes/terminal/adapter.d.ts +2 -2
- package/dist/routes/terminal/adapter.js +4 -4
- package/dist/routes/terminal/bundle.d.ts +11 -11
- package/dist/routes/terminal/bundle.js +12 -12
- package/dist/routes/terminal/credentials.d.ts +4 -4
- package/dist/routes/terminal/credentials.js +5 -5
- package/dist/routes/terminal/dry-run.d.ts +4 -4
- package/dist/routes/terminal/dry-run.js +9 -9
- package/dist/routes/terminal/ledger.d.ts +2 -2
- 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 +7 -7
- package/dist/routes/terminal/live-sandbox.d.ts +2 -2
- package/dist/routes/terminal/live-sandbox.js +3 -2
- package/dist/routes/terminal/participant-text.js +2 -1
- package/dist/routes/terminal/persona.d.ts +2 -2
- package/dist/routes/terminal/persona.js +2 -2
- package/dist/routes/terminal/plan.d.ts +7 -7
- package/dist/routes/terminal/plan.js +5 -5
- package/dist/routes/terminal/result.d.ts +5 -5
- package/dist/routes/terminal/result.js +7 -7
- package/dist/routes/terminal/route.d.ts +9 -9
- package/dist/routes/terminal/route.js +14 -14
- package/dist/routes/terminal/session.d.ts +5 -5
- package/dist/routes/terminal/session.js +7 -7
- package/dist/routes/terminal/trace.d.ts +2 -2
- package/dist/routes/terminal/types.d.ts +24 -24
- package/dist/routes/terminal/types.js +2 -2
- package/dist/run/bundle.d.ts +7 -7
- package/dist/run/bundle.js +2 -2
- package/dist/run/costs.d.ts +23 -0
- package/dist/run/costs.js +72 -43
- package/dist/run/dry-run-inputs.d.ts +1 -1
- package/dist/run/dry-run-inputs.js +1 -1
- package/dist/run/dry-run.js +2 -2
- package/dist/run/outcomes.d.ts +1 -1
- package/dist/run/participant.d.ts +1 -1
- package/dist/run/preflight-receipts.js +1 -1
- package/dist/run/pricing.js +2 -2
- package/dist/run/projection.d.ts +32 -32
- package/dist/run/projection.js +44 -44
- package/dist/run/reclaim.d.ts +1 -1
- package/dist/run/reclaim.js +1 -1
- package/dist/run/results.d.ts +2 -2
- 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 +11 -1
- package/dist/run/run-index.js +63 -49
- package/dist/run/run.d.ts +3 -3
- package/dist/run/run.js +2 -2
- package/dist/run/shared-world-evidence.d.ts +1 -1
- package/dist/run/shared-world-shape.js +1 -1
- package/dist/run/stats.d.ts +3 -3
- package/dist/run/stats.js +14 -14
- package/dist/run/status.d.ts +10 -2
- package/dist/run/status.js +6 -3
- package/dist/run/streams.d.ts +2 -2
- package/dist/run/study-provenance.d.ts +4 -2
- package/dist/run/study-provenance.js +7 -4
- package/dist/run/study-result.d.ts +0 -5
- package/dist/run/study-result.js +1 -1
- package/dist/run-study.d.ts +112 -0
- package/dist/{run-lab.js → run-study.js} +52 -45
- package/dist/{lab → study}/adapter-extension.d.ts +8 -20
- package/dist/{lab → study}/adapter-extension.js +2 -14
- package/dist/{lab → study}/adapter-scorer-loader.d.ts +10 -10
- package/dist/{lab → study}/adapter-scorer-loader.js +3 -3
- package/dist/study/composition-rules.d.ts +7 -0
- package/dist/{lab → study}/composition-rules.js +12 -12
- package/dist/study/config.d.ts +15 -0
- package/dist/{lab → study}/config.js +37 -20
- package/dist/study/convert.d.ts +1 -1
- package/dist/study/convert.js +15 -15
- package/dist/{lab → study}/device-presets.d.ts +2 -2
- package/dist/{lab → study}/discover.d.ts +29 -23
- package/dist/{lab → study}/discover.js +97 -118
- package/dist/{lab → study}/doctor.d.ts +11 -11
- package/dist/{lab → study}/doctor.js +18 -18
- package/dist/study/files.d.ts +2 -2
- package/dist/study/files.js +6 -5
- package/dist/{lab → study}/init-templates.d.ts +2 -2
- package/dist/{lab → study}/init-templates.js +16 -11
- package/dist/{lab → study}/init.d.ts +1 -1
- package/dist/{lab → study}/init.js +7 -4
- package/dist/{lab → study}/keys.d.ts +2 -2
- package/dist/{lab → study}/keys.js +10 -10
- package/dist/study/migrate.d.ts +8 -3
- package/dist/study/migrate.js +60 -4
- package/dist/{lab → study}/parse/actors.d.ts +5 -5
- package/dist/{lab → study}/parse/actors.js +5 -5
- package/dist/study/parse/comms.d.ts +12 -0
- package/dist/study/parse/execution.d.ts +19 -0
- package/dist/{lab → study}/parse/study-v3.d.ts +3 -5
- package/dist/{lab → study}/parse/study-v3.js +3 -3
- package/dist/{lab → study}/parse/subject-state.d.ts +8 -8
- package/dist/{lab → study}/parse/subject-state.js +4 -4
- package/dist/{lab → study}/parse/subject.d.ts +3 -3
- package/dist/{lab → study}/parse/subject.js +8 -8
- package/dist/{lab → study}/parse/values.d.ts +2 -2
- package/dist/{lab → study}/persona-resolve.d.ts +4 -4
- package/dist/{lab → study}/persona-resolve.js +2 -2
- 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 +10 -10
- package/dist/{lab → study}/plan-participants.js +4 -4
- package/dist/{lab → study}/plan-types.d.ts +28 -28
- package/dist/{lab → study}/plan-types.js +2 -2
- package/dist/study/plan.d.ts +13 -0
- package/dist/{lab → study}/plan.js +20 -20
- package/dist/study/preflight-probes.d.ts +3 -0
- package/dist/{lab → study}/preflight-probes.js +9 -8
- package/dist/study/preflight-result.d.ts +8 -0
- package/dist/{lab → study}/preflight-result.js +3 -3
- package/dist/{lab → study}/preflight.d.ts +31 -31
- package/dist/{lab → study}/preflight.js +8 -8
- 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 +12 -12
- package/dist/{lab/run-lab-events.d.ts → study/run-study-events.d.ts} +10 -10
- package/dist/{lab/run-lab-events.js → study/run-study-events.js} +4 -4
- package/dist/{lab/run-lab-homes.d.ts → study/run-study-homes.d.ts} +8 -17
- package/dist/study/run-study-homes.js +3 -0
- package/dist/study/run-study-options.d.ts +28 -0
- package/dist/{lab/run-lab-options.js → study/run-study-options.js} +16 -15
- package/dist/{lab/lab-deps.d.ts → study/study-deps.d.ts} +2 -2
- package/dist/{lab/lab-deps.js → study/study-deps.js} +2 -2
- package/dist/{lab → study}/summary.d.ts +10 -10
- package/dist/{lab → study}/summary.js +15 -15
- package/dist/{lab → study}/tasks.d.ts +3 -3
- package/dist/{lab → study}/tasks.js +1 -1
- package/dist/{lab → study}/types.d.ts +104 -104
- package/dist/{lab → study}/types.js +1 -1
- package/dist/{lab → study}/validation.d.ts +19 -19
- package/dist/{lab → study}/validation.js +13 -13
- package/dist/{lab → study}/warnings.d.ts +4 -4
- package/dist/{lab → study}/warnings.js +1 -1
- package/dist/subject/clone.d.ts +6 -6
- package/dist/subject/clone.js +2 -2
- package/dist/subject/local-tree-archive.d.ts +2 -2
- package/dist/subject/local-tree-archive.js +3 -3
- package/dist/subject/local-tree.d.ts +3 -3
- package/dist/subject/runtime.js +2 -2
- package/dist/subject/serve.d.ts +4 -4
- package/dist/subject/state.d.ts +3 -3
- package/dist/subject/state.js +1 -1
- package/dist/subject/steps.d.ts +1 -1
- package/dist/subject/steps.js +1 -1
- package/dist/substrates/desktop-session.js +2 -2
- package/dist/substrates/detached.d.ts +1 -1
- package/dist/substrates/e2b/desktop-browser.d.ts +4 -4
- package/dist/substrates/e2b/desktop-browser.js +1 -1
- package/dist/substrates/e2b/desktop-cdp.d.ts +1 -1
- package/dist/substrates/e2b/desktop-cdp.js +1 -1
- package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
- package/dist/substrates/e2b/desktop-executor.js +12 -12
- package/dist/substrates/e2b/desktop-geometry.d.ts +1 -1
- package/dist/substrates/e2b/desktop-geometry.js +1 -1
- package/dist/substrates/e2b/desktop-media.d.ts +3 -3
- package/dist/substrates/e2b/lifetime.js +1 -1
- package/dist/substrates/e2b/sandbox.d.ts +3 -3
- package/dist/substrates/e2b/sandbox.js +1 -1
- package/dist/substrates/e2b/sdk.d.ts +1 -1
- package/dist/substrates/e2b/sdk.js +1 -1
- package/dist/substrates/local/runtime-config.d.ts +4 -4
- package/dist/substrates/local/runtime-config.js +4 -4
- package/dist/tui/contract.d.ts +8 -8
- package/dist/tui/contract.js +2 -2
- package/dist/tui/launch.d.ts +3 -3
- package/dist/tui/launch.js +22 -16
- package/dist/tui-app.js +139 -139
- package/dist/verify/subject.d.ts +1 -1
- package/dist/verify/subject.js +1 -1
- package/dist/verify/verify.js +2 -1
- package/docs/architecture/actor-contract.md +5 -5
- package/docs/architecture/browser-control.md +1 -1
- package/docs/architecture/external-public-shared-world.md +8 -7
- package/docs/architecture/github-feedback-loop.md +1 -1
- package/docs/architecture/task-protocol-support.md +1 -1
- package/docs/architecture/terminal-product-route.md +18 -18
- package/docs/contracts/adapter-fixtures.md +2 -2
- package/docs/contracts/errors.md +8 -8
- package/docs/contracts/run-bundle.md +6 -4
- package/docs/contracts/schemas.md +61 -42
- package/docs/contracts/study-analysis.md +4 -1
- package/docs/contracts/study-costs.md +17 -2
- package/examples/README.md +1 -1
- package/examples/scorer/scorer.mjs +3 -3
- package/package.json +2 -1
- package/skills/humanish/SKILL.md +8 -6
- package/skills/humanish/agents/openai.yaml +1 -1
- package/dist/cli/commands/lab-format.d.ts +0 -9
- 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/lab/composition-rules.d.ts +0 -7
- package/dist/lab/config.d.ts +0 -7
- package/dist/lab/deprecated-fields.d.ts +0 -10
- package/dist/lab/deprecated-fields.js +0 -24
- package/dist/lab/parse/comms.d.ts +0 -12
- package/dist/lab/parse/execution.d.ts +0 -19
- package/dist/lab/plan.d.ts +0 -13
- package/dist/lab/preflight-probes.d.ts +0 -3
- package/dist/lab/preflight-result.d.ts +0 -8
- package/dist/lab/route-inputs.d.ts +0 -28
- package/dist/lab/run-lab-homes.js +0 -7
- package/dist/lab/run-lab-options.d.ts +0 -28
- package/dist/library-aliases.d.ts +0 -56
- package/dist/library-aliases.js +0 -22
- package/dist/run-lab.d.ts +0 -112
- /package/dist/{lab → study}/device-presets.js +0 -0
- /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}/parse/comms.js +0 -0
- /package/dist/{lab → study}/parse/execution.js +0 -0
- /package/dist/{lab → study}/parse/values.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
- /package/dist/{lab → study}/routing.js +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { listUserKeys, resolveKeyName, setUserKey, unsetUserKey, userKeyStorePath, } from "../../keys/key-resolution.js";
|
|
3
3
|
import { promptSecret } from "../secret-prompt.js";
|
|
4
|
-
import { runInit } from "../../
|
|
4
|
+
import { runInit } from "../../study/init.js";
|
|
5
5
|
import { buildPayload, disabledByEnvironment, readTelemetryState, telemetryStatePath, writeTelemetryState, } from "../telemetry.js";
|
|
6
6
|
import { doctor } from "../doctor.js";
|
|
7
|
-
import { oldStudyOption, studyOptionValue } from "../deprecations.js";
|
|
8
7
|
import { applyEnvFileOption, CLI_VERSION, CWD_OPTION_DESCRIPTION, ENV_FILE_OPTION_DESCRIPTION, JSON_OPTION_DESCRIPTION, markInvocationEnvelopeWritten, wantsJson, writeResult, formatCliError, } from "../io.js";
|
|
8
|
+
import { plural } from "../../run/text.js";
|
|
9
9
|
export function registerInitCommand(parent, io) {
|
|
10
10
|
parent
|
|
11
11
|
.command("init")
|
|
@@ -51,15 +51,13 @@ export function registerDoctorCommand(parent, io) {
|
|
|
51
51
|
.summary("Check what this project and machine need for a run.")
|
|
52
52
|
.option("--cwd <path>", CWD_OPTION_DESCRIPTION, ".")
|
|
53
53
|
.option("--study <study>", "Check the study's desktop, participant authentication and separate analysis requirements; no provider calls.")
|
|
54
|
-
.addOption(oldStudyOption("study"))
|
|
55
54
|
.option("--env-file <path>", ENV_FILE_OPTION_DESCRIPTION)
|
|
56
55
|
.option("--json", JSON_OPTION_DESCRIPTION)
|
|
57
56
|
.action(async (options, command) => {
|
|
58
|
-
const study = studyOptionValue(command, io, options);
|
|
59
57
|
if (options.envFile &&
|
|
60
58
|
!(await applyEnvFileOption({ command, cwd: options.cwd, envFile: options.envFile, io })))
|
|
61
59
|
return;
|
|
62
|
-
const result = await doctor(options.cwd, study ? {
|
|
60
|
+
const result = await doctor(options.cwd, options.study ? { study: options.study } : {});
|
|
63
61
|
writeResult(command, io, result, formatDoctorHuman);
|
|
64
62
|
// Behavioral change: was exit 1, every other structured command uses 2.
|
|
65
63
|
io.setExitCode(result.ok ? 0 : 2);
|
|
@@ -116,7 +114,7 @@ export function registerTelemetryCommand(parent, io) {
|
|
|
116
114
|
"every field that is sent, with example values:",
|
|
117
115
|
JSON.stringify(sample, null, 2),
|
|
118
116
|
"",
|
|
119
|
-
"never sent:
|
|
117
|
+
"never sent: studies you wrote, subjects, personas, missions, paths, run evidence, key names or values.",
|
|
120
118
|
"",
|
|
121
119
|
"humanish telemetry disable turns it off",
|
|
122
120
|
].join("\n") + "\n");
|
|
@@ -272,7 +270,7 @@ export function registerKeysCommand(parent, io) {
|
|
|
272
270
|
names,
|
|
273
271
|
message: names.length === 0
|
|
274
272
|
? "The store is empty. Add a key with `humanish keys set <vendor>`."
|
|
275
|
-
: `${names.length
|
|
273
|
+
: `${plural(names.length, "key name")} stored. Values are never printed.`,
|
|
276
274
|
};
|
|
277
275
|
writeResult(command, io, result, formatKeysHuman);
|
|
278
276
|
io.setExitCode(0);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HumanOutput } from "../io.js";
|
|
2
|
+
import type { CuaActorStudyResult } from "../../routes/computer-use/types.js";
|
|
3
|
+
import type { ScriptedBrowserStudyResult } from "../../routes/scripted/types.js";
|
|
4
|
+
import type { TerminalProductStudyResult } from "../../routes/terminal/types.js";
|
|
5
|
+
import type { ConcurrentSharedWorldStudyResult } from "../../routes/shared-world/types.js";
|
|
6
|
+
export declare function formatConcurrentSharedWorldStudyHuman(result: ConcurrentSharedWorldStudyResult): HumanOutput;
|
|
7
|
+
export declare function formatTerminalStudyHuman(result: TerminalProductStudyResult): HumanOutput;
|
|
8
|
+
export declare function formatScriptedStudyHuman(result: ScriptedBrowserStudyResult): HumanOutput;
|
|
9
|
+
export declare function formatCuaStudyHuman(result: CuaActorStudyResult): HumanOutput;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { formatCuaDiagnostics, formatCuaStopCause } from "../../routes/computer-use/diagnostics.js";
|
|
2
|
-
/** A
|
|
2
|
+
/** A run's first lines: the command that ran, whether it was a dry run, how it ended, and its route. */
|
|
3
3
|
function runHeader(result, route) {
|
|
4
4
|
const kind = result.dryRun === true ? "dry run" : result.dryRun === false ? "live run" : "run";
|
|
5
5
|
return [
|
|
@@ -19,7 +19,7 @@ function withError(error, lines) {
|
|
|
19
19
|
function participantStatus(status) {
|
|
20
20
|
return status === "contract_proof_only" ? "dry run, nothing ran live" : status;
|
|
21
21
|
}
|
|
22
|
-
export function
|
|
22
|
+
export function formatConcurrentSharedWorldStudyHuman(result) {
|
|
23
23
|
return withError(result.error, [
|
|
24
24
|
...runHeader(result, "shared-world"),
|
|
25
25
|
`run: ${result.runId}`,
|
|
@@ -47,7 +47,7 @@ export function formatConcurrentSharedWorldLabHuman(result) {
|
|
|
47
47
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
48
48
|
]);
|
|
49
49
|
}
|
|
50
|
-
export function
|
|
50
|
+
export function formatTerminalStudyHuman(result) {
|
|
51
51
|
return withError(result.error, [
|
|
52
52
|
...runHeader(result, "terminal"),
|
|
53
53
|
`run: ${result.runId}`,
|
|
@@ -60,7 +60,7 @@ export function formatTerminalLabHuman(result) {
|
|
|
60
60
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
61
61
|
]);
|
|
62
62
|
}
|
|
63
|
-
export function
|
|
63
|
+
export function formatScriptedStudyHuman(result) {
|
|
64
64
|
return withError(result.error, [
|
|
65
65
|
...runHeader(result, "scripted"),
|
|
66
66
|
`run: ${result.runId}`,
|
|
@@ -79,7 +79,7 @@ export function formatScriptedLabHuman(result) {
|
|
|
79
79
|
...result.warnings.map((warning) => `warning: ${warning}`),
|
|
80
80
|
]);
|
|
81
81
|
}
|
|
82
|
-
export function
|
|
82
|
+
export function formatCuaStudyHuman(result) {
|
|
83
83
|
return withError(result.error, [
|
|
84
84
|
...runHeader(result, "computer-use"),
|
|
85
85
|
`run: ${result.runId}`,
|
|
@@ -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 {
|
|
3
|
+
import {} from "../../run-study.js";
|
|
4
|
+
import { resolveStudyDryRun } from "../../study/plan.js";
|
|
5
5
|
import { serveObserver } from "../../observer/render.js";
|
|
6
6
|
import { startExposedObserver, validateExposure } from "../../observer/exposure.js";
|
|
7
7
|
import { ServeTunnelError } from "../../observer/tunnel.js";
|
|
8
8
|
import { cliAnalysisOptions } from "./analysis-signals.js";
|
|
9
9
|
import { onRunShutdown } from "./run-signals.js";
|
|
10
|
-
import {
|
|
10
|
+
import { parseStudyCount, parseParticipantIds, parseObserverPort, wantsJson, writeResult, } from "../io.js";
|
|
11
11
|
import { exposureRequestFromOptions, followObserver, planObserver, showObserver, staticObserverOpen, withObserverServer, } from "../observer-follow.js";
|
|
12
|
-
import {
|
|
13
|
-
import { resolveRouteShouldOpen } from "./
|
|
12
|
+
import { formatCuaStudyHuman } from "./study-format.js";
|
|
13
|
+
import { resolveRouteShouldOpen } from "./study-route-open.js";
|
|
14
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
|
*/
|
|
@@ -60,7 +60,7 @@ function refuseCua(args, dryRun, code, message) {
|
|
|
60
60
|
warnings: [],
|
|
61
61
|
error: { code, message },
|
|
62
62
|
};
|
|
63
|
-
writeResult(args.command, args.io, result,
|
|
63
|
+
writeResult(args.command, args.io, result, formatCuaStudyHuman);
|
|
64
64
|
args.io.setExitCode(2);
|
|
65
65
|
}
|
|
66
66
|
/** Parses the options, or writes the refusal and returns undefined. */
|
|
@@ -78,13 +78,13 @@ function resolveCuaSettings(args) {
|
|
|
78
78
|
args.io.setExitCode(2);
|
|
79
79
|
return undefined;
|
|
80
80
|
}
|
|
81
|
-
const count =
|
|
81
|
+
const count = parseStudyCount(args.options.count, args.config.actors[0]?.count ?? 1);
|
|
82
82
|
if (count === null) {
|
|
83
83
|
args.io.writeErr("error: --count must be a positive integer.\n");
|
|
84
84
|
args.io.setExitCode(2);
|
|
85
85
|
return undefined;
|
|
86
86
|
}
|
|
87
|
-
const dryRun =
|
|
87
|
+
const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
|
|
88
88
|
const port = parseObserverPort(args.options.port ?? "0");
|
|
89
89
|
const wantsFollow = args.mode === "watch" && !wantsMachine && args.options.detach !== true && dryRun !== true;
|
|
90
90
|
if (port === null) {
|
|
@@ -122,7 +122,7 @@ function prepareCuaWatch(args, settings) {
|
|
|
122
122
|
return undefined;
|
|
123
123
|
return { exposure: exposeValidation.plan, finishedPlan };
|
|
124
124
|
}
|
|
125
|
-
/** The
|
|
125
|
+
/** The runStudyWith options for this invocation, with the live Observer hook for a followed watch. */
|
|
126
126
|
function cuaRunOptions(args, settings, prepared, live) {
|
|
127
127
|
const { finishedPlan } = prepared;
|
|
128
128
|
return {
|
|
@@ -140,7 +140,7 @@ function cuaRunOptions(args, settings, prepared, live) {
|
|
|
140
140
|
dryRun: settings.dryRun,
|
|
141
141
|
...(settings.wantsFollow
|
|
142
142
|
? {
|
|
143
|
-
// Fires inside
|
|
143
|
+
// Fires inside runStudyWith, before the actor loop and before sandbox creation, so a
|
|
144
144
|
// tunnel-auth failure aborts before any spend and leaves no orphaned sandbox.
|
|
145
145
|
onObserverReady: (observer) => attachLiveObserver(args.io, settings, prepared.exposure, live, observer),
|
|
146
146
|
}
|
|
@@ -235,7 +235,7 @@ async function reportCuaRun(args, prepared, result, live) {
|
|
|
235
235
|
],
|
|
236
236
|
};
|
|
237
237
|
}
|
|
238
|
-
writeResult(args.command, args.io, output,
|
|
238
|
+
writeResult(args.command, args.io, output, formatCuaStudyHuman);
|
|
239
239
|
args.io.setExitCode(result.ok && automaticAnalysisSucceeded(result) ? 0 : 2);
|
|
240
240
|
if (server && (result.observer?.ok || attachedObserver)) {
|
|
241
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,13 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { studyResultIdentity } from "../../run/study-result.js";
|
|
3
|
-
import { formatRunHuman,
|
|
3
|
+
import { formatRunHuman, parseStudyCount, writeResult, } from "../io.js";
|
|
4
4
|
import { planObserver, showObserver, staticObserverOpen } from "../observer-follow.js";
|
|
5
5
|
/**
|
|
6
|
-
* 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
|
|
7
7
|
* presents the outcome. Undefined when setup has already written its own result.
|
|
8
8
|
*/
|
|
9
9
|
export function previewRouteRun(args) {
|
|
10
|
-
const participantCount =
|
|
10
|
+
const participantCount = parseStudyCount(args.options.count, args.config.actors[0]?.count ?? 4);
|
|
11
11
|
if (participantCount === null) {
|
|
12
12
|
const result = {
|
|
13
13
|
...studyResultIdentity("preview", args.config.id),
|
|
@@ -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,14 @@
|
|
|
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
12
|
import { studyResultIdentity } from "../../run/study-result.js";
|
|
13
13
|
/**
|
|
14
14
|
* The shared-world route's CLI setup: dry run, open and follow semantics, the live Observer server
|
|
@@ -17,7 +17,7 @@ import { studyResultIdentity } from "../../run/study-result.js";
|
|
|
17
17
|
*/
|
|
18
18
|
export function sharedWorldRouteRun(args) {
|
|
19
19
|
const wantsMachine = wantsJson(args.command);
|
|
20
|
-
const dryRun =
|
|
20
|
+
const dryRun = resolveStudyDryRun(args.config, args.options.dryRun, true) ?? true;
|
|
21
21
|
const shouldOpen = resolveRouteShouldOpen({
|
|
22
22
|
optionOpen: args.options.open,
|
|
23
23
|
defaultsOpen: args.config.defaults?.open,
|
|
@@ -42,7 +42,7 @@ export function sharedWorldRouteRun(args) {
|
|
|
42
42
|
warnings: [],
|
|
43
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>;
|