humanish 0.108.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 +58 -59
- package/CHANGELOG.md +13 -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/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 +3 -5
- 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/feedback/draft.js +2 -2
- 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/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 +24 -24
- 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 +1 -1
- 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} +3 -3
- 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} +13 -12
- 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 +1 -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 +1 -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,6 +1,6 @@
|
|
|
1
1
|
// Screen and browser-window geometry on a hosted E2B desktop, measured in the sandbox rather than
|
|
2
2
|
// taken from the request.
|
|
3
|
-
import {} from "../../
|
|
3
|
+
import {} from "../../study/device-presets.js";
|
|
4
4
|
import { failureTail, redactText, toErrorMessage } from "../../evidence/redaction.js";
|
|
5
5
|
import {} from "../../run/streams.js";
|
|
6
6
|
import { chromeCdpProbeCommand, parseChromeCdpProbeOutput, } from "./cdp-probe.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { startDesktopMedia } from "../../guest/desktop-media.js";
|
|
2
2
|
import type { E2BDesktopSandbox } from "./sdk.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { StudyDesktopMedia } from "../../study/types.js";
|
|
4
4
|
/** The same worker and conversation contract, transported by the hosted SDK's stdin/stdout. */
|
|
5
5
|
export declare function startE2BDesktopMedia(options: {
|
|
6
6
|
desktop: E2BDesktopSandbox;
|
|
7
|
-
media:
|
|
7
|
+
media: StudyDesktopMedia;
|
|
8
8
|
signal: AbortSignal;
|
|
9
9
|
onTerminal(): void;
|
|
10
10
|
requestTimeoutMs: number;
|
|
@@ -26,4 +26,4 @@ export interface DesktopMediaEvidence {
|
|
|
26
26
|
* unreadable host file) is named before the browser launches, because a participant told it has
|
|
27
27
|
* a camera and finds none reports the instrument's gap as the product's.
|
|
28
28
|
*/
|
|
29
|
-
export declare function prepareDesktopMedia(desktop: E2BDesktopSandbox, media:
|
|
29
|
+
export declare function prepareDesktopMedia(desktop: E2BDesktopSandbox, media: StudyDesktopMedia, permission: "prompt" | "granted", cwd: string, requestTimeoutMs: number, readHostFile?: (absolutePath: string) => Promise<Buffer>): Promise<DesktopMediaEvidence>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// How long an E2B sandbox may live, and the budgets the desktop routes add to a participant's own
|
|
2
2
|
// deadline when they set a sandbox's server-side timeout. A dead host process can never orphan a
|
|
3
3
|
// sandbox past that timeout, so every route derives it from these values.
|
|
4
|
-
import { readPositiveInt } from "../../
|
|
4
|
+
import { readPositiveInt } from "../../study/parse/values.js";
|
|
5
5
|
/**
|
|
6
6
|
* E2B refuses a sandbox lifetime over one hour ("400: Timeout cannot be greater than 1 hours").
|
|
7
7
|
* A derived deadline has to stay under it, and saying so at plan time beats discovering it from a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PreparedOutputRoot } from "../../run/contained-output.js";
|
|
2
2
|
import { type DesktopReleaseResult, type OwnedDesktopAllocation } from "../desktop-session.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
4
4
|
import { type E2BDesktopCreateOptions, type E2BDesktopModule, type E2BDesktopSandbox } from "./sdk.js";
|
|
5
5
|
/** Where an allocation's receipt goes: the run's prepared root, under a public-safe participant
|
|
6
6
|
* label. The receipt line saves it as `laneId`. */
|
|
@@ -66,9 +66,9 @@ export declare function destroyE2BSandbox(module: E2BDesktopModule, sandboxId: s
|
|
|
66
66
|
}): Promise<E2BSandboxDestroyOutcome>;
|
|
67
67
|
/** Versioned public template built by runtime/browser-media/e2b-template.mjs. */
|
|
68
68
|
export declare const E2B_SPEECH_TEMPLATE = "7409n13kr83f7g7abx5g";
|
|
69
|
-
/** The desktop template a
|
|
69
|
+
/** The desktop template a study asks for; undefined selects the SDK default. */
|
|
70
70
|
export declare function e2bDesktopTemplate(config: {
|
|
71
|
-
readonly execution?: Pick<NonNullable<
|
|
71
|
+
readonly execution?: Pick<NonNullable<StudyConfig["execution"]>, "target" | "desktop">;
|
|
72
72
|
}): string | undefined;
|
|
73
73
|
/** How a caller hears about the one retry; `sleep` is injectable so tests never wait. */
|
|
74
74
|
export interface TransientRetryHooks {
|
|
@@ -158,7 +158,7 @@ export async function destroyE2BSandbox(module, sandboxId, options) {
|
|
|
158
158
|
}
|
|
159
159
|
/** Versioned public template built by runtime/browser-media/e2b-template.mjs. */
|
|
160
160
|
export const E2B_SPEECH_TEMPLATE = "7409n13kr83f7g7abx5g";
|
|
161
|
-
/** The desktop template a
|
|
161
|
+
/** The desktop template a study asks for; undefined selects the SDK default. */
|
|
162
162
|
export function e2bDesktopTemplate(config) {
|
|
163
163
|
if (config.execution?.target === "local")
|
|
164
164
|
return undefined;
|
|
@@ -4,7 +4,7 @@ export interface E2BDesktopModule {
|
|
|
4
4
|
create(options: E2BDesktopCreateOptions): Promise<E2BDesktopSandbox>;
|
|
5
5
|
/**
|
|
6
6
|
* Launch on a custom E2B desktop template (image) by name or ID: the SDK's
|
|
7
|
-
* `Sandbox.create(template, opts)` overload. Lets a
|
|
7
|
+
* `Sandbox.create(template, opts)` overload. Lets a study run on an adopter-maintained image
|
|
8
8
|
* with extra runtimes baked in (e.g. node/bun/a local Postgres the stock `desktop` template
|
|
9
9
|
* lacks), instead of the stock template. The base @e2b/desktop SDK implements this; the
|
|
10
10
|
* wrapper just exposes it. Threaded from `execution.desktop.template`.
|
|
@@ -20,7 +20,7 @@ export async function loadE2BDesktopModule() {
|
|
|
20
20
|
: "Live E2B desktop launch requires the optional peer @e2b/desktop, and humanish is running from an " +
|
|
21
21
|
"npx cache. Node resolves the peer relative to humanish itself, so a copy installed in this project " +
|
|
22
22
|
"is not found. Install both into the project and run it from there: " +
|
|
23
|
-
"`npm i -D humanish @e2b/desktop` then `npx humanish run <
|
|
23
|
+
"`npm i -D humanish @e2b/desktop` then `npx humanish run <study>`.");
|
|
24
24
|
}
|
|
25
25
|
throw error;
|
|
26
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { StudyConfig } from "../../study/types.js";
|
|
2
2
|
export declare const LOCAL_BROWSER_LIFETIME_MS: number;
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function isLocalBrowserStudy(config: StudyConfig): boolean;
|
|
4
4
|
/** Defaults for the explicitly selected local substrate; hosted configurations are untouched. */
|
|
5
|
-
export declare function localBrowserDefaults(config:
|
|
6
|
-
export declare function localBrowserUnsupportedReason(config:
|
|
5
|
+
export declare function localBrowserDefaults(config: StudyConfig): StudyConfig;
|
|
6
|
+
export declare function localBrowserUnsupportedReason(config: StudyConfig): string | undefined;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { rosterOf } from "../../
|
|
1
|
+
import { rosterOf } from "../../study/parse/actors.js";
|
|
2
2
|
// The runtime image enforces a 30-minute lifetime; reserve setup/teardown room.
|
|
3
3
|
export const LOCAL_BROWSER_LIFETIME_MS = 30 * 60_000;
|
|
4
4
|
const MAX_SESSION_MS = 20 * 60_000;
|
|
5
|
-
export function
|
|
5
|
+
export function isLocalBrowserStudy(config) {
|
|
6
6
|
return (config.subject.source === "app-url" &&
|
|
7
7
|
config.execution?.target === "local" &&
|
|
8
8
|
["local-agent", "openai-computer-use"].includes(config.actors[0]?.type ?? ""));
|
|
9
9
|
}
|
|
10
10
|
/** Defaults for the explicitly selected local substrate; hosted configurations are untouched. */
|
|
11
11
|
export function localBrowserDefaults(config) {
|
|
12
|
-
if (!
|
|
12
|
+
if (!isLocalBrowserStudy(config))
|
|
13
13
|
return config;
|
|
14
14
|
return {
|
|
15
15
|
...config,
|
|
@@ -40,7 +40,7 @@ export function localBrowserUnsupportedReason(config) {
|
|
|
40
40
|
if (config.actors.length !== 1 ||
|
|
41
41
|
!actor ||
|
|
42
42
|
(actor.type === "local-agent" && actor.localAgent !== undefined && actor.localAgent !== "codex")) {
|
|
43
|
-
return "Local browser
|
|
43
|
+
return "Local browser studies support only Codex local-agent or openai-computer-use participants.";
|
|
44
44
|
}
|
|
45
45
|
if (desktop?.resolution?.[0] !== 960 ||
|
|
46
46
|
desktop.resolution[1] !== 720 ||
|
package/dist/tui/contract.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { StudyListResult } from "../study/discover.js";
|
|
2
|
+
import type { StudySummary, ReadStudySummaryOptions } from "../study/summary.js";
|
|
3
3
|
import type { RunDetail } from "../run/detail.js";
|
|
4
4
|
import type { ReclaimResult } from "../run/reclaim.js";
|
|
5
5
|
import type { TuiActionResult } from "./actions.js";
|
|
@@ -25,11 +25,11 @@ export interface TuiCapabilities {
|
|
|
25
25
|
read(): Promise<CommsSetupStatus>;
|
|
26
26
|
save(): Promise<CommsSetupResult>;
|
|
27
27
|
check?(): Promise<CommsCheckResult>;
|
|
28
|
-
|
|
28
|
+
studies?(): Promise<{
|
|
29
29
|
title: string;
|
|
30
30
|
path: string;
|
|
31
31
|
}[]>;
|
|
32
|
-
configure?(
|
|
32
|
+
configure?(study: string, apply: boolean, planToken?: string): Promise<CommsConfigureResult>;
|
|
33
33
|
recovery?(): Promise<CommsRecoveryEntry[]>;
|
|
34
34
|
recover?(runId: string, connectionName: string): Promise<{
|
|
35
35
|
ok: boolean;
|
|
@@ -43,7 +43,7 @@ export interface TuiCapabilities {
|
|
|
43
43
|
* the whole truth: a fresh project has manifests and no runs, and a long-lived one has runs from
|
|
44
44
|
* manifests since renamed or deleted.
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
listStudies(cwd: string): Promise<StudyListResult>;
|
|
47
47
|
/**
|
|
48
48
|
* Start a run and return once it is running. The run is detached: it outlives this surface, so
|
|
49
49
|
* quitting the TUI (or losing the connection it runs over) does not kill a study that costs
|
|
@@ -59,11 +59,11 @@ export interface TuiCapabilities {
|
|
|
59
59
|
*/
|
|
60
60
|
readRunDetail(cwd: string, runId: string): Promise<RunDetail | null>;
|
|
61
61
|
/**
|
|
62
|
-
* What a
|
|
63
|
-
* resolve right now. Read for the
|
|
62
|
+
* What a study is: subject, participants, model, spend caps, and whether the keys a live run needs
|
|
63
|
+
* resolve right now. Read for the study being looked at, because it is what someone reads before
|
|
64
64
|
* deciding to spend money.
|
|
65
65
|
*/
|
|
66
|
-
|
|
66
|
+
readStudySummary(cwd: string, study: string, options?: ReadStudySummaryOptions): Promise<StudySummary | null>;
|
|
67
67
|
/** Whether this directory is a humanish project: an empty project and a wrong directory are
|
|
68
68
|
* different problems and must not share a screen. */
|
|
69
69
|
readProjectState(cwd: string): TuiProjectState;
|
package/dist/tui/contract.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// by the CLI, which imports it from the same modules every other command uses.
|
|
6
6
|
//
|
|
7
7
|
// The reason for the seam: a terminal UI that reads the filesystem itself would become a second
|
|
8
|
-
// implementation of "what is a run, which
|
|
8
|
+
// implementation of "what is a run, which study does it belong to, is it alive", one that ships
|
|
9
9
|
// minified, is invisible to the root test suite, and drifts from `humanish runs` the first time
|
|
10
10
|
// either side changes. Injection keeps exactly one implementation, already unit-tested, and leaves
|
|
11
11
|
// the bundle a view layer that can be reasoned about as one.
|
|
@@ -47,6 +47,6 @@ export function terminalSurfaceMessage(state) {
|
|
|
47
47
|
return "`humanish tui` is not built in this checkout; run `pnpm build` (installed packages ship it prebuilt)";
|
|
48
48
|
}
|
|
49
49
|
return state.interactive
|
|
50
|
-
? "`humanish tui` opens the interactive surface for browsing
|
|
50
|
+
? "`humanish tui` opens the interactive surface for browsing studies and runs"
|
|
51
51
|
: "`humanish tui` is the interactive screen a person uses to watch and start runs here. This shell is not a terminal, so pass it on to a person at one";
|
|
52
52
|
}
|
package/dist/tui/launch.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function isSafeStudyHandle(value: string): boolean;
|
|
3
3
|
export interface LaunchRunOptions {
|
|
4
4
|
cwd: string;
|
|
5
5
|
/** The manifest handle (filename stem), as `humanish run` takes it. */
|
|
6
|
-
|
|
7
|
-
/** Exact selected manifest, avoiding a same-name committed
|
|
6
|
+
study: string;
|
|
7
|
+
/** Exact selected manifest, avoiding a same-name committed study shadowing a local copy. */
|
|
8
8
|
manifestPath?: string;
|
|
9
9
|
mode: "dry-run" | "live";
|
|
10
10
|
/** Injected in tests; defaults to the real spawn. */
|
package/dist/tui/launch.js
CHANGED
|
@@ -15,21 +15,21 @@ import { constants as fsConstants } from "node:fs";
|
|
|
15
15
|
import { open } from "node:fs/promises";
|
|
16
16
|
import path from "node:path";
|
|
17
17
|
import { fileURLToPath } from "node:url";
|
|
18
|
-
import {
|
|
18
|
+
import { resolveStudyManifest } from "../study/discover.js";
|
|
19
19
|
import { prepareManagedHumanishOutputDirectory } from "../run/contained-output.js";
|
|
20
20
|
/**
|
|
21
|
-
* A
|
|
21
|
+
* A study handle is the manifest filename, which is what `humanish run` resolves. Restricted to
|
|
22
22
|
* characters a manifest name can actually contain, and (the part that matters) never allowed to
|
|
23
|
-
* begin with `-`, because argv is positional: a
|
|
23
|
+
* begin with `-`, because argv is positional: a study called `--json` would otherwise be handed to
|
|
24
24
|
* the CLI as a flag. There is no shell involved, so this is the whole injection surface.
|
|
25
25
|
*
|
|
26
26
|
* A leading underscore is allowed: `_wip.yaml` is an ordinary way to name a work-in-progress
|
|
27
27
|
* manifest, `humanish run _wip` resolves it, and refusing it here would leave the surface
|
|
28
|
-
* listing a
|
|
28
|
+
* listing a study it will not start. A leading dot stays out: that names a hidden file, not a study.
|
|
29
29
|
*/
|
|
30
|
-
const
|
|
31
|
-
export function
|
|
32
|
-
return
|
|
30
|
+
const SAFE_STUDY_HANDLE = /^[A-Za-z0-9_][A-Za-z0-9._:-]*$/;
|
|
31
|
+
export function isSafeStudyHandle(value) {
|
|
32
|
+
return SAFE_STUDY_HANDLE.test(value) && value.length <= 128;
|
|
33
33
|
}
|
|
34
34
|
/** Where the CLI lives, relative to this compiled module. */
|
|
35
35
|
function defaultCliPath() {
|
|
@@ -40,28 +40,34 @@ function defaultCliPath() {
|
|
|
40
40
|
* result the surface can render, not an exception that would tear down the screen.
|
|
41
41
|
*/
|
|
42
42
|
export async function launchRun(options) {
|
|
43
|
-
if (!
|
|
43
|
+
if (!isSafeStudyHandle(options.study)) {
|
|
44
44
|
return {
|
|
45
45
|
ok: false,
|
|
46
46
|
error: {
|
|
47
47
|
code: "HUMANISH_LAUNCH_INVALID_STUDY",
|
|
48
|
-
message: `"${options.
|
|
48
|
+
message: `"${options.study}" is not a usable study handle. Run it by path with \`humanish run <path>\` instead.`,
|
|
49
49
|
},
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
const cwd = path.resolve(options.cwd);
|
|
53
|
-
let
|
|
53
|
+
let selectedStudy = options.study;
|
|
54
54
|
if (options.manifestPath !== undefined) {
|
|
55
|
-
const resolved = await
|
|
56
|
-
if (!resolved.ok)
|
|
55
|
+
const resolved = await resolveStudyManifest(cwd, options.manifestPath);
|
|
56
|
+
if (!resolved.ok) {
|
|
57
|
+
// A file humanish no longer reads gets discovery's message, which names the fix.
|
|
58
|
+
const named = resolved.error.code === "HUMANISH_STUDY_V2_UNSUPPORTED" ||
|
|
59
|
+
resolved.error.code === "HUMANISH_STUDY_RETIRED_DIRECTORY";
|
|
57
60
|
return {
|
|
58
61
|
ok: false,
|
|
59
62
|
error: {
|
|
60
63
|
code: "HUMANISH_LAUNCH_INVALID_STUDY",
|
|
61
|
-
message:
|
|
64
|
+
message: named
|
|
65
|
+
? resolved.error.message
|
|
66
|
+
: "The selected study path could not be read safely. Refresh the study list.",
|
|
62
67
|
},
|
|
63
68
|
};
|
|
64
|
-
|
|
69
|
+
}
|
|
70
|
+
selectedStudy = path.relative(cwd, path.resolve(cwd, resolved.path)).replace(/\\/g, "/");
|
|
65
71
|
}
|
|
66
72
|
const now = options.now ?? (() => new Date());
|
|
67
73
|
const spawnFn = options.spawn ?? spawn;
|
|
@@ -73,7 +79,7 @@ export async function launchRun(options) {
|
|
|
73
79
|
// symlinked directory cannot redirect the log somewhere outside the project.
|
|
74
80
|
const logDir = await prepareManagedHumanishOutputDirectory(cwd, "launches");
|
|
75
81
|
const stamp = launchedAt.replace(/[:.]/g, "-");
|
|
76
|
-
logPath = path.join(logDir.physicalPath, `${stamp}-${options.
|
|
82
|
+
logPath = path.join(logDir.physicalPath, `${stamp}-${options.study}.log`);
|
|
77
83
|
// O_NOFOLLOW so a symlink planted at this path cannot redirect a run's output (which may carry
|
|
78
84
|
// provider error text) outside the project, and cannot defeat the 0600 mode by pointing at a
|
|
79
85
|
// file that already exists with looser permissions. O_CREAT|O_APPEND keeps ordinary reuse
|
|
@@ -101,7 +107,7 @@ export async function launchRun(options) {
|
|
|
101
107
|
...(options.mode === "dry-run" ? ["--dry-run"] : []),
|
|
102
108
|
// `--` ends option parsing, so the handle can only ever be read as the positional argument.
|
|
103
109
|
"--",
|
|
104
|
-
|
|
110
|
+
selectedStudy,
|
|
105
111
|
];
|
|
106
112
|
const spawnOptions = {
|
|
107
113
|
cwd,
|