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,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
1
|
+
import type { StudyDeps } from "../../study/study-deps.js";
|
|
2
|
+
import type { StudyEvent } from "../../study/run-study-events.js";
|
|
3
|
+
import type { RunStudyHomes } from "../../study/run-study-homes.js";
|
|
4
4
|
import type { SharedWorldJudgment } from "../../run/judge.js";
|
|
5
|
-
import type { BrowserScorer } from "../../
|
|
5
|
+
import type { BrowserScorer } from "../../study/adapter-extension.js";
|
|
6
6
|
import type { AutomaticAnalysisResult } from "../../analysis/automatic-completion.js";
|
|
7
7
|
import type { CuaActorDescriptor } from "../../actors/registry.js";
|
|
8
8
|
import type { CommsReceivingRun } from "../../comms/receiving.js";
|
|
9
|
-
import type {
|
|
9
|
+
import type { StudyCommsEmail, StudyCommsExternal, StudyConfig } from "../../study/types.js";
|
|
10
10
|
import type { DesktopResourceObservation } from "../../substrates/e2b/desktop-resources.js";
|
|
11
11
|
import type { ObserverResult } from "../../observer/render.js";
|
|
12
12
|
import type { ObserverRuntimeStreamUrl } from "../../observer/run-routes.js";
|
|
@@ -17,18 +17,18 @@ import type { LocalTreeArchive } from "../../subject/local-tree-archive.js";
|
|
|
17
17
|
import type { LiveTraceFlush } from "../computer-use/live-flush.js";
|
|
18
18
|
import type { CuaParticipantDeps, DesktopParticipantRun, CuaRunBudget, ParticipantRunOutcome } from "../computer-use/types.js";
|
|
19
19
|
import type { ProvisionedPlaneSetup } from "./provisioned.js";
|
|
20
|
-
import type { SharedWorldPlan } from "../../
|
|
20
|
+
import type { SharedWorldPlan } from "../../study/plan-types.js";
|
|
21
21
|
import { type StudyResultIdentity } from "../../run/study-result.js";
|
|
22
22
|
export declare const CONCURRENT_SHARED_WORLD_PROVIDER_METADATA: {
|
|
23
23
|
readonly mode: "concurrent-shared-world-lab";
|
|
24
24
|
readonly tool: "humanish";
|
|
25
25
|
};
|
|
26
26
|
export declare const CONCURRENT_ATTRIBUTION_LIMITS: readonly ["concurrent", "best-effort-causal-attribution", "non-deterministic-shared-state", "window-and-snapshot-granularity", "contention-observed-not-proven-safe", "state-change-not-isolated-to-actors"];
|
|
27
|
-
export interface
|
|
27
|
+
export interface RunConcurrentSharedWorldStudyOptions {
|
|
28
28
|
/** Cancels post-run analysis only. */
|
|
29
29
|
analysisSignal?: AbortSignal;
|
|
30
30
|
cwd: string;
|
|
31
|
-
config:
|
|
31
|
+
config: StudyConfig;
|
|
32
32
|
/** Resolved upstream (scenario.mode + CLI override); defaults safe (dry-run). */
|
|
33
33
|
dryRun: boolean;
|
|
34
34
|
open?: boolean;
|
|
@@ -43,22 +43,22 @@ export interface RunConcurrentSharedWorldLabOptions {
|
|
|
43
43
|
* subject sandbox, then each participant's desktop. The external-public plane has participants
|
|
44
44
|
* only.
|
|
45
45
|
*/
|
|
46
|
-
prepareDesktop?: NonNullable<
|
|
46
|
+
prepareDesktop?: NonNullable<RunStudyHomes["prepareDesktop"]>;
|
|
47
47
|
/** Awaited after a participant's live stream starts, and again after its sandbox is gone. */
|
|
48
|
-
onStream?: NonNullable<
|
|
49
|
-
/** Reports subject phases to onEvent; built by
|
|
50
|
-
emit?: (event:
|
|
48
|
+
onStream?: NonNullable<RunStudyHomes["onStream"]>;
|
|
49
|
+
/** Reports subject phases to onEvent; built by normalizeRunStudyOptions. */
|
|
50
|
+
emit?: (event: StudyEvent) => void;
|
|
51
51
|
/** Test seams. */
|
|
52
|
-
deps?:
|
|
53
|
-
/** Scores the assembled evidence: `
|
|
52
|
+
deps?: StudyDeps;
|
|
53
|
+
/** Scores the assembled evidence: `RunStudyOptions.scorer`, or the scorer the CLI loads. */
|
|
54
54
|
scorer?: BrowserScorer;
|
|
55
55
|
/** Present only when the scorer was config-declared and loaded by the CLI;
|
|
56
56
|
* core-stamped onto the bundle as evidence. Absent for library callers. */
|
|
57
57
|
scorerProvenance?: RunScorerProvenance;
|
|
58
58
|
}
|
|
59
|
-
/** What a shared-world run takes besides its plan. The plan carries the config, dry run and
|
|
60
|
-
export type SharedWorldRunInput = Omit<
|
|
61
|
-
export type
|
|
59
|
+
/** What a shared-world run takes besides its plan. The plan carries the config, dry run and study. */
|
|
60
|
+
export type SharedWorldRunInput = Omit<RunConcurrentSharedWorldStudyOptions, "config" | "dryRun">;
|
|
61
|
+
export type ConcurrentSharedWorldStudyErrorCode = "HUMANISH_STUDY_ANALYSIS_INVALID" | "HUMANISH_STUDY_TASKS_UNSUPPORTED" | "HUMANISH_STUDY_OPTION_UNSUPPORTED" | "HUMANISH_STUDY_V2_UNSUPPORTED" | "HUMANISH_SHARED_WORLD_FAILED" | "HUMANISH_SHARED_WORLD_ACTOR_UNSUPPORTED" | "HUMANISH_SHARED_WORLD_INVALID" | "HUMANISH_SHARED_WORLD_KEYS_MISSING"
|
|
62
62
|
/** A local-agent brain's CLI is not on `PATH`. */
|
|
63
63
|
| "HUMANISH_SHARED_WORLD_AGENT_MISSING"
|
|
64
64
|
/** A local-agent brain's CLI is signed out, or could not report its sign-in status. */
|
|
@@ -98,11 +98,11 @@ export interface ConcurrentSharedWorldParticipantResult {
|
|
|
98
98
|
killed: boolean;
|
|
99
99
|
};
|
|
100
100
|
error?: {
|
|
101
|
-
code:
|
|
101
|
+
code: ConcurrentSharedWorldStudyErrorCode;
|
|
102
102
|
message: string;
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
|
-
export interface
|
|
105
|
+
export interface ConcurrentSharedWorldStudyResult extends AutomaticAnalysisResult, StudyResultIdentity<"shared-world"> {
|
|
106
106
|
ok: boolean;
|
|
107
107
|
cwd: string;
|
|
108
108
|
actor: string;
|
|
@@ -132,7 +132,7 @@ export interface ConcurrentSharedWorldLabResult extends AutomaticAnalysisResult,
|
|
|
132
132
|
observer?: ObserverResult;
|
|
133
133
|
warnings: string[];
|
|
134
134
|
error?: {
|
|
135
|
-
code:
|
|
135
|
+
code: ConcurrentSharedWorldStudyErrorCode;
|
|
136
136
|
message: string;
|
|
137
137
|
};
|
|
138
138
|
}
|
|
@@ -159,10 +159,10 @@ export interface PlaneContext {
|
|
|
159
159
|
input: SharedWorldRunInput;
|
|
160
160
|
/** Read for the subject's serve URL, which each participant's subject names. Participants, their
|
|
161
161
|
* count and their host and entry come from the plan's participants. */
|
|
162
|
-
config:
|
|
162
|
+
config: StudyConfig;
|
|
163
163
|
descriptor: CuaActorDescriptor;
|
|
164
164
|
/** The run's test seams; empty outside tests. */
|
|
165
|
-
deps:
|
|
165
|
+
deps: StudyDeps;
|
|
166
166
|
env: Record<string, string | undefined>;
|
|
167
167
|
concurrency: number;
|
|
168
168
|
runBudget: CuaRunBudget | undefined;
|
|
@@ -204,15 +204,15 @@ export interface LiveParticipants {
|
|
|
204
204
|
}
|
|
205
205
|
/** An adopter-hosted comms catch and the inbox its personas open. */
|
|
206
206
|
export interface ExternalCommsWiring {
|
|
207
|
-
external:
|
|
208
|
-
email:
|
|
207
|
+
external: StudyCommsExternal;
|
|
208
|
+
email: StudyCommsEmail;
|
|
209
209
|
inboxUrl: string;
|
|
210
210
|
}
|
|
211
211
|
/** What buildConcurrentSharedWorldBundle projects into a run bundle. */
|
|
212
212
|
export interface ConcurrentBundleArgs {
|
|
213
213
|
/** The run's judgment (judgeSharedWorldRun over the other fields). */
|
|
214
214
|
judgment: SharedWorldJudgment;
|
|
215
|
-
/** The run this bundle belongs to; the bundle head reads its id, mode, start and
|
|
215
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
|
|
216
216
|
run: BundleRun;
|
|
217
217
|
plan: SharedWorldPlan;
|
|
218
218
|
descriptor: CuaActorDescriptor;
|
|
@@ -226,7 +226,7 @@ export interface ConcurrentBundleArgs {
|
|
|
226
226
|
seedDigest: string;
|
|
227
227
|
subjectCommit?: string;
|
|
228
228
|
hostDigest?: string;
|
|
229
|
-
/** Run-level digest-only comms-thread evidence path (humanish.comms-thread.v1), when a comms
|
|
229
|
+
/** Run-level digest-only comms-thread evidence path (humanish.comms-thread.v1), when a comms study
|
|
230
230
|
* captured mail into the subject sandbox's catch. Registered on the first persona stream (it is a
|
|
231
231
|
* property of the one shared app, and belongs to no single persona). */
|
|
232
232
|
commsArtifactPath?: string;
|
|
@@ -265,7 +265,7 @@ export interface PlaneResults {
|
|
|
265
265
|
/** Which plane runs, and the setup it needs beyond the plane context. */
|
|
266
266
|
export interface PlaneSelection {
|
|
267
267
|
planeClass: ConcurrentSharedWorldPlaneClass;
|
|
268
|
-
/** Undefined when the
|
|
268
|
+
/** Undefined when the study declares no `subject.serve`. */
|
|
269
269
|
provisioned: ProvisionedPlaneSetup | undefined;
|
|
270
270
|
externalWiring: ExternalCommsWiring | undefined;
|
|
271
271
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ActorTrace } from "../../actors/contract.js";
|
|
2
2
|
import { type RunBundle, type RunScorerProvenance } from "../../run/bundle.js";
|
|
3
|
-
import { type ScorerOutcome } from "../../
|
|
3
|
+
import { type ScorerOutcome } from "../../study/adapter-extension.js";
|
|
4
4
|
import type { TerminalLedgers, TerminalScorer } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* Run the product-adapter extension seam over the assembled
|
|
@@ -27,7 +27,7 @@ export declare function applyAdapterExtensionSeam(args: {
|
|
|
27
27
|
ledgers: TerminalLedgers;
|
|
28
28
|
transcript: string;
|
|
29
29
|
product: string;
|
|
30
|
-
|
|
30
|
+
studyId: string;
|
|
31
31
|
runId: string;
|
|
32
32
|
sanitize: (text: string) => string;
|
|
33
33
|
warnings: string[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {} from "../../run/bundle.js";
|
|
2
2
|
import { isRunAdapterScore } from "../../run/bundle-shape.js";
|
|
3
|
-
import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFORMED, frozenBundleView, isAdapterFeedbackCandidate, } from "../../
|
|
3
|
+
import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFORMED, frozenBundleView, isAdapterFeedbackCandidate, } from "../../study/adapter-extension.js";
|
|
4
4
|
/**
|
|
5
5
|
* Run the product-adapter extension seam over the assembled
|
|
6
6
|
* evidence and attach its results to the bundle in place, without core knowing any product noun.
|
|
@@ -20,7 +20,7 @@ import { adapterScoreFailureMessage, declaredScorerThrew, DECLARED_SCORER_MALFOR
|
|
|
20
20
|
* re-checks the surviving shapes downstream, so the seam stays fail-closed end to end.
|
|
21
21
|
*/
|
|
22
22
|
export async function applyAdapterExtensionSeam(args) {
|
|
23
|
-
const { scorer, bundle, trace, ledgers, transcript, product,
|
|
23
|
+
const { scorer, bundle, trace, ledgers, transcript, product, studyId, runId, sanitize, warnings, scorerProvenance, } = args;
|
|
24
24
|
if (!scorer?.score && !scorer?.deriveFeedback)
|
|
25
25
|
return { failures: [] };
|
|
26
26
|
const declared = scorerProvenance !== undefined;
|
|
@@ -38,7 +38,7 @@ export async function applyAdapterExtensionSeam(args) {
|
|
|
38
38
|
ledgers,
|
|
39
39
|
transcript,
|
|
40
40
|
product,
|
|
41
|
-
|
|
41
|
+
studyId,
|
|
42
42
|
runId,
|
|
43
43
|
};
|
|
44
44
|
// Best-effort re-scrub of the adapter payload: round-trip the whole JSON through the run's denylist
|
|
@@ -46,7 +46,7 @@ export async function applyAdapterExtensionSeam(args) {
|
|
|
46
46
|
// local paths, and misses encoded/split/custom secrets, DB passwords, PII, or abs paths outside
|
|
47
47
|
// the denylist. A
|
|
48
48
|
// payload from config-declared code is acceptable only because the trust boundary (the party who
|
|
49
|
-
// declares the scorer runs the
|
|
49
|
+
// declares the scorer runs the study) already permits direct exfiltration; the re-scrub is
|
|
50
50
|
// defense-in-depth, not a wall.
|
|
51
51
|
const scrubValue = (value) => JSON.parse(sanitize(JSON.stringify(value)));
|
|
52
52
|
// Set for a declared scorer that fails to render a pass verdict (status:"fail", malformed, or throw).
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import type { ActorPersonaRef, ActorTrace } from "../../actors/contract.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { StudyScenarioCaps, StudyRuntimeAuth } from "../../study/types.js";
|
|
3
3
|
import { type RunBundle, type RunCostSummary, type BundleRun } from "../../run/bundle.js";
|
|
4
4
|
import { type Verdict } from "../../run/judge.js";
|
|
5
5
|
import type { TerminalLedgers } from "./types.js";
|
|
6
6
|
/**
|
|
7
|
-
* Project the terminal-product
|
|
7
|
+
* Project the terminal-product run into a humanish.run-bundle.v1 (no schema change: a new
|
|
8
8
|
* producer only). Dry run: a contract bundle. The terminal stream is a contract placeholder
|
|
9
9
|
* (stdin disabled, no captured tail, because nothing ran), the subject is declared unpinned, and
|
|
10
10
|
* the caps/policies/runtime-auth declarations are recorded without pretending that live ledgers
|
|
11
11
|
* exist. The shipped live builder fills the same evidence contract. Exported for tests.
|
|
12
12
|
*/
|
|
13
13
|
export declare function buildTerminalProductBundle(args: {
|
|
14
|
-
/** The run this bundle belongs to; the bundle head reads its id, mode, start and
|
|
14
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
|
|
15
15
|
run: BundleRun;
|
|
16
16
|
actorId: string;
|
|
17
17
|
dryRun: boolean;
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
studyId: string;
|
|
19
|
+
studyTitle?: string;
|
|
20
20
|
mission: string;
|
|
21
21
|
persona: ActorPersonaRef;
|
|
22
22
|
productName: string;
|
|
23
23
|
publicSurfaces: string[];
|
|
24
|
-
caps?:
|
|
24
|
+
caps?: StudyScenarioCaps;
|
|
25
25
|
runtimeAuth?: string;
|
|
26
26
|
stdin: "disabled" | "planned" | "sent";
|
|
27
27
|
policies: {
|
|
@@ -42,18 +42,18 @@ export declare function buildTerminalProductBundle(args: {
|
|
|
42
42
|
* mode==="live") enforces the ledgers + proven cleanup + interventions-present over this bundle.
|
|
43
43
|
*/
|
|
44
44
|
export declare function buildLiveTerminalProductBundle(args: {
|
|
45
|
-
/** The run this bundle belongs to; the bundle head reads its id, mode, start and
|
|
45
|
+
/** The run this bundle belongs to; the bundle head reads its id, mode, start and study. */
|
|
46
46
|
run: BundleRun;
|
|
47
47
|
actorId: string;
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
studyId: string;
|
|
49
|
+
studyTitle?: string;
|
|
50
50
|
mission: string;
|
|
51
51
|
persona: ActorPersonaRef;
|
|
52
52
|
productName: string;
|
|
53
53
|
publicSurfaces: string[];
|
|
54
|
-
caps?:
|
|
54
|
+
caps?: StudyScenarioCaps;
|
|
55
55
|
runtimeAuthKeyName: string;
|
|
56
|
-
runtimeAuth?:
|
|
56
|
+
runtimeAuth?: StudyRuntimeAuth;
|
|
57
57
|
policies: {
|
|
58
58
|
allowPrivateRepoAccess: boolean;
|
|
59
59
|
allowProviderCredentials: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { redactText } from "../../evidence/redaction.js";
|
|
2
|
-
import { participantAssignment } from "../../
|
|
2
|
+
import { participantAssignment } from "../../study/participant-assignment.js";
|
|
3
3
|
import { REVIEW_SCHEMA, bundleArtifacts, bundleHead, } from "../../run/bundle.js";
|
|
4
4
|
import { verdictText } from "../../run/judge.js";
|
|
5
5
|
import {} from "../../run/streams.js";
|
|
@@ -7,7 +7,7 @@ import { participantEvent, participantIds, participantRecord, participantStream,
|
|
|
7
7
|
import { TERMINAL_EVENTS_ARTIFACT, TERMINAL_LEDGERS_ARTIFACT, TERMINAL_TRANSCRIPT_ARTIFACT, } from "../../run/terminal-contract.js";
|
|
8
8
|
import { describeMeasuredSpend, noSpendLineMeasured, noSpendNotEstablished } from "./ledger.js";
|
|
9
9
|
/**
|
|
10
|
-
* Project the terminal-product
|
|
10
|
+
* Project the terminal-product run into a humanish.run-bundle.v1 (no schema change: a new
|
|
11
11
|
* producer only). Dry run: a contract bundle. The terminal stream is a contract placeholder
|
|
12
12
|
* (stdin disabled, no captured tail, because nothing ran), the subject is declared unpinned, and
|
|
13
13
|
* the caps/policies/runtime-auth declarations are recorded without pretending that live ledgers
|
|
@@ -39,7 +39,7 @@ export function buildTerminalProductBundle(args) {
|
|
|
39
39
|
at: args.run.createdAt,
|
|
40
40
|
level: "info",
|
|
41
41
|
type: "terminal-lab.run.created",
|
|
42
|
-
message: `Created terminal-product
|
|
42
|
+
message: `Created a terminal-product run for ${args.studyId} (actor ${args.actorId}, product ${args.productName}).`,
|
|
43
43
|
},
|
|
44
44
|
participantEvent(TERMINAL_IDS, {
|
|
45
45
|
id: "event-001-subject",
|
|
@@ -89,13 +89,13 @@ export function buildTerminalProductBundle(args) {
|
|
|
89
89
|
{
|
|
90
90
|
at: args.run.createdAt,
|
|
91
91
|
event: "terminal-lab.run.created",
|
|
92
|
-
message: `Created terminal-product
|
|
92
|
+
message: `Created a terminal-product run with one in-sandbox agent participant (actor ${args.actorId}, product ${args.productName}).`,
|
|
93
93
|
},
|
|
94
94
|
],
|
|
95
95
|
simulation,
|
|
96
96
|
stream,
|
|
97
97
|
events,
|
|
98
|
-
redactionNotes: "Dry-run bundle: no sandbox ran, no key was injected, no exec output was captured. The author mission is public-safe committed
|
|
98
|
+
redactionNotes: "Dry-run bundle: no sandbox ran, no key was injected, no exec output was captured. The author mission is public-safe committed study text (redacted defensively); the composed prompt is bound by digest. The shipped live path applies scrubKnownValues then redactText at the capture source before persistence.",
|
|
99
99
|
review,
|
|
100
100
|
});
|
|
101
101
|
}
|
|
@@ -197,7 +197,7 @@ const TERMINAL_IDS = participantIds(0);
|
|
|
197
197
|
function terminalParticipant(args, session) {
|
|
198
198
|
const simulation = participantRecord(TERMINAL_IDS, 1, {
|
|
199
199
|
personaId: args.persona.id,
|
|
200
|
-
scenarioId: `terminal-${args.
|
|
200
|
+
scenarioId: `terminal-${args.studyId}`,
|
|
201
201
|
status: session.status,
|
|
202
202
|
streamKind: "terminal",
|
|
203
203
|
mode: "cli-sim",
|
|
@@ -210,7 +210,7 @@ function terminalParticipant(args, session) {
|
|
|
210
210
|
const stream = participantStream(TERMINAL_IDS, {
|
|
211
211
|
assignment: participantAssignment({ mission: args.mission }),
|
|
212
212
|
kind: "terminal",
|
|
213
|
-
label: `Terminal agent · ${args.
|
|
213
|
+
label: `Terminal agent · ${args.studyId}`,
|
|
214
214
|
status: session.status,
|
|
215
215
|
transport: "snapshot",
|
|
216
216
|
updatedAt: session.updatedAt,
|
|
@@ -237,17 +237,17 @@ function terminalRunBundle(args, parts) {
|
|
|
237
237
|
persona: {
|
|
238
238
|
id: args.persona.id,
|
|
239
239
|
name: `Autonomous terminal agent (${args.persona.id})`,
|
|
240
|
-
source: `study:${args.
|
|
240
|
+
source: `study:${args.studyId}`,
|
|
241
241
|
sourceDigest: args.persona.promptDigest,
|
|
242
242
|
},
|
|
243
243
|
scenario: {
|
|
244
|
-
id: `terminal-${args.
|
|
245
|
-
title: args.
|
|
246
|
-
// The author mission is public-safe committed
|
|
244
|
+
id: `terminal-${args.studyId}`,
|
|
245
|
+
title: args.studyTitle ?? `Terminal-product run: ${args.studyId}`,
|
|
246
|
+
// The author mission is public-safe committed study text. It is recorded plaintext as the goal,
|
|
247
247
|
// redacted defensively before persisting (it never carries a secret, but the harness never
|
|
248
248
|
// trusts that). The full composed prompt is bound by digest, not text.
|
|
249
249
|
goal: redactText(args.mission),
|
|
250
|
-
source: `study:${args.
|
|
250
|
+
source: `study:${args.studyId}`,
|
|
251
251
|
sourceDigest: args.persona.promptDigest,
|
|
252
252
|
},
|
|
253
253
|
lifecycle: parts.lifecycle,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { StudyRuntimeAuth } from "../../study/types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Resolve the runtime key on the host. Legacy openai-env passes it command-scoped; openai-egress
|
|
4
4
|
* returns an inert command env while retaining the actual value for the external transform and
|
|
@@ -7,12 +7,12 @@ import type { LabRuntimeAuth } from "../../lab/types.js";
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function buildRuntimeAuth(args: {
|
|
9
9
|
/** Undefined retains the historical openai-env default. */
|
|
10
|
-
runtimeAuth:
|
|
10
|
+
runtimeAuth: StudyRuntimeAuth | undefined;
|
|
11
11
|
/** The operator environment the key value is read from (process.env or a test fake). */
|
|
12
12
|
env: Record<string, string | undefined>;
|
|
13
13
|
}): {
|
|
14
14
|
ok: true;
|
|
15
|
-
mode:
|
|
15
|
+
mode: StudyRuntimeAuth;
|
|
16
16
|
envs: Record<string, string>;
|
|
17
17
|
keyName: string;
|
|
18
18
|
keyValue: string;
|
|
@@ -28,7 +28,7 @@ export declare function buildRuntimeAuth(args: {
|
|
|
28
28
|
* prompt/token/secret shapes; this builder makes that true by construction.
|
|
29
29
|
*/
|
|
30
30
|
export declare function buildSandboxMetadata(allowlist: {
|
|
31
|
-
|
|
31
|
+
studyId: string;
|
|
32
32
|
recordId: string;
|
|
33
33
|
runId: string;
|
|
34
34
|
}): Record<string, string>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E2B_SYSTEM_CA_BUNDLE, OPENAI_EGRESS_PLACEHOLDER } from "./runtime-auth.js";
|
|
2
|
-
import {
|
|
2
|
+
import { TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Resolve the runtime key on the host. Legacy openai-env passes it command-scoped; openai-egress
|
|
5
5
|
* returns an inert command env while retaining the actual value for the external transform and
|
|
@@ -38,7 +38,7 @@ export function buildRuntimeAuth(args) {
|
|
|
38
38
|
return {
|
|
39
39
|
ok: false,
|
|
40
40
|
code: "HUMANISH_TERMINAL_RUNTIME_AUTH_MISSING",
|
|
41
|
-
message: `Live terminal-product
|
|
41
|
+
message: `Live terminal-product studies declare runtimeAuth "${String(args.runtimeAuth)}" and need ${ALLOWED_RUNTIME_KEY_NAMES.join(" or ")} in the environment (pass via --env-file; the selected auth mode places the value in command-scoped env or an external E2B header transform; the value is never persisted).`,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
const keyValue = args.env[keyName];
|
|
@@ -91,10 +91,10 @@ function isNonRuntimeCredentialName(name) {
|
|
|
91
91
|
*/
|
|
92
92
|
export function buildSandboxMetadata(allowlist) {
|
|
93
93
|
return {
|
|
94
|
-
mode:
|
|
95
|
-
tool:
|
|
94
|
+
mode: TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA.mode,
|
|
95
|
+
tool: TERMINAL_PRODUCT_STUDY_PROVIDER_METADATA.tool,
|
|
96
96
|
provider: "codex",
|
|
97
|
-
labId: allowlist.
|
|
97
|
+
labId: allowlist.studyId,
|
|
98
98
|
recordId: allowlist.recordId,
|
|
99
99
|
// The run id is a harness-minted token (terminal-<ts>-<hex>), not user data.
|
|
100
100
|
runId: allowlist.runId,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { TerminalPlan } from "../../
|
|
1
|
+
import type { TerminalPlan } from "../../study/plan-types.js";
|
|
2
2
|
import type { RunScope } from "../../run/run.js";
|
|
3
|
-
import { type RunLiveTerminalSessionArgs, type
|
|
3
|
+
import { type RunLiveTerminalSessionArgs, type TerminalProductStudyResult, type TerminalRunInput } from "./types.js";
|
|
4
4
|
/**
|
|
5
5
|
* The dry-run path: a contract bundle with the persona and prompt digest bound, published through
|
|
6
6
|
* the run scope with no sandbox, key or spend.
|
|
7
7
|
*/
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function runDryTerminalStudy(args: {
|
|
9
9
|
plan: Extract<TerminalPlan, {
|
|
10
10
|
readonly dryRun: true;
|
|
11
11
|
}>;
|
|
@@ -14,7 +14,7 @@ export declare function runDryTerminalLab(args: {
|
|
|
14
14
|
warnings: string[];
|
|
15
15
|
failed: RunLiveTerminalSessionArgs["failed"];
|
|
16
16
|
scope: RunScope;
|
|
17
|
-
}): Promise<
|
|
17
|
+
}): Promise<TerminalProductStudyResult>;
|
|
18
18
|
/** Compose the full prompt the agent would run. Bound to evidence by digest only. */
|
|
19
19
|
export declare function composePrompt(args: {
|
|
20
20
|
mission: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The terminal route's dry run: a contract-only bundle with the persona and prompt digest bound,
|
|
2
2
|
// published through the run scope with no sandbox, key or spend. session.ts holds the live path.
|
|
3
3
|
import { digestText, redactText, scrubLiterals } from "../../evidence/redaction.js";
|
|
4
|
-
import { participantAssignment } from "../../
|
|
4
|
+
import { participantAssignment } from "../../study/participant-assignment.js";
|
|
5
5
|
import { buildRunSource } from "../../run/bundle.js";
|
|
6
6
|
import { judgeExecution, judgeTerminal, OUTCOME_POLICIES, resultOk } from "../../run/judge.js";
|
|
7
7
|
import { validatePreparedRunArtifactPaths } from "../../run/paths.js";
|
|
@@ -15,7 +15,7 @@ import { studyResultIdentity } from "../../run/study-result.js";
|
|
|
15
15
|
* The dry-run path: a contract bundle with the persona and prompt digest bound, published through
|
|
16
16
|
* the run scope with no sandbox, key or spend.
|
|
17
17
|
*/
|
|
18
|
-
export async function
|
|
18
|
+
export async function runDryTerminalStudy(args) {
|
|
19
19
|
const { plan, input, cwd, warnings, failed, scope } = args;
|
|
20
20
|
const { product } = plan;
|
|
21
21
|
const { evidenceMission, physicalCwd, persona } = await prepareDryPersona({
|
|
@@ -29,7 +29,7 @@ export async function runDryTerminalLab(args) {
|
|
|
29
29
|
runId: input.runId,
|
|
30
30
|
mintRunId: makeTerminalRunId,
|
|
31
31
|
mode: "dry-run",
|
|
32
|
-
|
|
32
|
+
study: plan.study,
|
|
33
33
|
renderReview: renderTerminalReviewMarkdown,
|
|
34
34
|
observer: { open: input.open === true, render: input.deps?.renderObserver },
|
|
35
35
|
});
|
|
@@ -49,8 +49,8 @@ export async function runDryTerminalLab(args) {
|
|
|
49
49
|
run,
|
|
50
50
|
actorId: plan.actor,
|
|
51
51
|
dryRun: true,
|
|
52
|
-
|
|
53
|
-
...(plan.title ? {
|
|
52
|
+
studyId: plan.studyId,
|
|
53
|
+
...(plan.title ? { studyTitle: plan.title } : {}),
|
|
54
54
|
mission: evidenceMission,
|
|
55
55
|
persona,
|
|
56
56
|
productName: product.name,
|
|
@@ -77,13 +77,13 @@ export async function runDryTerminalLab(args) {
|
|
|
77
77
|
: [
|
|
78
78
|
{
|
|
79
79
|
kind: "evidence",
|
|
80
|
-
message: observer.error?.message ?? "Observer failed for the terminal-product
|
|
80
|
+
message: observer.error?.message ?? "Observer failed for the terminal-product run.",
|
|
81
81
|
},
|
|
82
82
|
], policy);
|
|
83
83
|
const ok = resultOk({ judgment, execution, scorerFailures: [], policy });
|
|
84
84
|
await finished.recordOutcome({ ok, execution });
|
|
85
85
|
return {
|
|
86
|
-
...studyResultIdentity("terminal", plan.
|
|
86
|
+
...studyResultIdentity("terminal", plan.studyId),
|
|
87
87
|
ok,
|
|
88
88
|
cwd,
|
|
89
89
|
actor: plan.actor,
|
|
@@ -97,7 +97,7 @@ export async function runDryTerminalLab(args) {
|
|
|
97
97
|
: {
|
|
98
98
|
error: {
|
|
99
99
|
code: "HUMANISH_TERMINAL_FAILED",
|
|
100
|
-
message: observer.error?.message ?? "Observer failed for the terminal-product
|
|
100
|
+
message: observer.error?.message ?? "Observer failed for the terminal-product run.",
|
|
101
101
|
},
|
|
102
102
|
}),
|
|
103
103
|
};
|
|
@@ -116,7 +116,7 @@ async function prepareDryPersona(args) {
|
|
|
116
116
|
const evidenceMission = participantAssignment({ mission }, scrubLiterals(knownSecretValues)).mission;
|
|
117
117
|
const terminalPersona = await resolveTerminalPersona({ plan, cwd, warnings });
|
|
118
118
|
// The composed prompt = mission + persona + public-surface manifest. Only the author mission
|
|
119
|
-
// goes plaintext into evidence (it is public-safe committed
|
|
119
|
+
// goes plaintext into evidence (it is public-safe committed study text); the full composed prompt
|
|
120
120
|
// is recorded as a digest (the safety contract's mission ruling).
|
|
121
121
|
const composedPrompt = composePrompt({
|
|
122
122
|
mission,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ActorTokenUsage } from "../../actors/contract.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { StudyScenarioCaps } from "../../study/types.js";
|
|
3
3
|
import { type CostCategory } from "../../run/terminal-contract.js";
|
|
4
4
|
import type { CostLine, NoSpendProof, TerminalCostLedger } from "./types.js";
|
|
5
5
|
/**
|
|
@@ -41,7 +41,7 @@ export declare function buildNoSpendProof(ledger: TerminalCostLedger, maxUsd: nu
|
|
|
41
41
|
* grant a green pass: the no-spend proof reports them as unmeasured. maxMinutes is wall-clock and is
|
|
42
42
|
* enforced separately (runWithWallClock); it is not a ledger-derived cap.
|
|
43
43
|
*/
|
|
44
|
-
export declare function evaluateCapsAgainstLedger(ledger: TerminalCostLedger, caps:
|
|
44
|
+
export declare function evaluateCapsAgainstLedger(ledger: TerminalCostLedger, caps: StudyScenarioCaps): {
|
|
45
45
|
ok: true;
|
|
46
46
|
} | {
|
|
47
47
|
ok: false;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The most the sandbox runs before the codex command starts: the Node bootstrap, the runtime
|
|
3
|
-
* version check and, when the
|
|
3
|
+
* version check and, when the study declares `subject.product.install`, the product setup.
|
|
4
4
|
*/
|
|
5
5
|
export declare function terminalPreExecBudgetMs(productInstall: boolean): number;
|
|
6
6
|
/** The terminal sandbox's server-side timeout for a codex command bounded at `maxMinutes`. */
|
|
@@ -7,7 +7,7 @@ import { TERMINAL_RUNTIME_VERSION_TIMEOUT_MS } from "./runtime.js";
|
|
|
7
7
|
import { PRODUCT_SETUP_TIMEOUT_MS, TERMINAL_SANDBOX_TIMEOUT_BUFFER_MS } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* The most the sandbox runs before the codex command starts: the Node bootstrap, the runtime
|
|
10
|
-
* version check and, when the
|
|
10
|
+
* version check and, when the study declares `subject.product.install`, the product setup.
|
|
11
11
|
*/
|
|
12
12
|
export function terminalPreExecBudgetMs(productInstall) {
|
|
13
13
|
return (NODE_BOOTSTRAP_TIMEOUT_MS +
|
|
@@ -2,7 +2,7 @@ import type { ActorPersonaRef } from "../../actors/contract.js";
|
|
|
2
2
|
import type { RunBundle } from "../../run/bundle.js";
|
|
3
3
|
import type { RunScope } from "../../run/run.js";
|
|
4
4
|
import type { LiveSandboxInputs, LiveTerminalSandbox } from "./live-sandbox.js";
|
|
5
|
-
import type { RunLiveTerminalSessionArgs,
|
|
5
|
+
import type { RunLiveTerminalSessionArgs, TerminalProductStudyResult } from "./types.js";
|
|
6
6
|
type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
|
|
7
7
|
ok: true;
|
|
8
8
|
}>["run"];
|
|
@@ -26,5 +26,5 @@ export interface LiveFinishInputs {
|
|
|
26
26
|
/** The session's outcome; a blown cap overrides it. */
|
|
27
27
|
session: LiveTerminalSandbox;
|
|
28
28
|
}
|
|
29
|
-
export declare function finishLiveTerminalSession(inputs: LiveFinishInputs): Promise<
|
|
29
|
+
export declare function finishLiveTerminalSession(inputs: LiveFinishInputs): Promise<TerminalProductStudyResult>;
|
|
30
30
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Finishing a live terminal session: the actor trace from the captured stream, the spend ledger
|
|
2
|
-
// and its caps check, the evidence files, the bundle, and the
|
|
2
|
+
// and its caps check, the evidence files, the bundle, and the study result.
|
|
3
3
|
import { buildRunCostSummary } from "../../run/cost-summary.js";
|
|
4
4
|
import { writeContainedOutputFile } from "../../run/contained-output.js";
|
|
5
5
|
import { validatePreparedRunArtifactPaths, } from "../../run/paths.js";
|
|
@@ -9,7 +9,7 @@ import { applyAdapterExtensionSeam } from "./adapter.js";
|
|
|
9
9
|
import { buildLiveTerminalProductBundle } from "./bundle.js";
|
|
10
10
|
import { buildCostLedger, buildNoSpendProof, describeMeasuredSpend, evaluateCapsAgainstLedger, noSpendLineMeasured, noSpendNotEstablished, } from "./ledger.js";
|
|
11
11
|
import { foldScorerFailures, judgeExecution, judgeTerminal, OUTCOME_POLICIES, } from "../../run/judge.js";
|
|
12
|
-
import { terminalExecutionFailures,
|
|
12
|
+
import { terminalExecutionFailures, terminalStudyResult, terminalParticipantFacts, } from "./result.js";
|
|
13
13
|
import { parseTerminalTokenUsage } from "./token-usage.js";
|
|
14
14
|
import { buildTerminalActorTrace, scrubSplitKnownValues, tailOf } from "./trace.js";
|
|
15
15
|
function buildLiveTrace(inputs) {
|
|
@@ -125,8 +125,8 @@ export async function finishLiveTerminalSession(inputs) {
|
|
|
125
125
|
const bundle = buildLiveTerminalProductBundle({
|
|
126
126
|
run,
|
|
127
127
|
actorId: plan.actor,
|
|
128
|
-
|
|
129
|
-
...(plan.title ? {
|
|
128
|
+
studyId: plan.studyId,
|
|
129
|
+
...(plan.title ? { studyTitle: plan.title } : {}),
|
|
130
130
|
mission: sanitize(mission),
|
|
131
131
|
persona,
|
|
132
132
|
productName: product.name,
|
|
@@ -161,7 +161,7 @@ export async function finishLiveTerminalSession(inputs) {
|
|
|
161
161
|
ledgers,
|
|
162
162
|
transcript: normalizedTranscript,
|
|
163
163
|
product: product.name,
|
|
164
|
-
|
|
164
|
+
studyId: plan.studyId,
|
|
165
165
|
runId,
|
|
166
166
|
sanitize,
|
|
167
167
|
warnings,
|
|
@@ -182,9 +182,9 @@ export async function finishLiveTerminalSession(inputs) {
|
|
|
182
182
|
cleanup: session.cleanup,
|
|
183
183
|
observer,
|
|
184
184
|
}), OUTCOME_POLICIES.terminal);
|
|
185
|
-
const result =
|
|
185
|
+
const result = terminalStudyResult({
|
|
186
186
|
cwd,
|
|
187
|
-
|
|
187
|
+
studyId: plan.studyId,
|
|
188
188
|
actorId: plan.actor,
|
|
189
189
|
productName: product.name,
|
|
190
190
|
runId,
|
|
@@ -5,7 +5,7 @@ import type { buildRuntimeAuth, buildSandboxMetadata } from "./credentials.js";
|
|
|
5
5
|
import type { createTerminalRecorder } from "./recorder.js";
|
|
6
6
|
import { type declaredRuntimeProvenance } from "./runtime.js";
|
|
7
7
|
import { type LiveTerminalPlan, type TerminalLedgers } from "./types.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { StudyDeps } from "../../study/study-deps.js";
|
|
9
9
|
type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
|
|
10
10
|
ok: true;
|
|
11
11
|
}>["run"];
|
|
@@ -13,7 +13,7 @@ type StartedRun = Extract<Awaited<ReturnType<RunScope["startRun"]>>, {
|
|
|
13
13
|
export interface LiveSandboxInputs {
|
|
14
14
|
plan: LiveTerminalPlan;
|
|
15
15
|
cwd: string;
|
|
16
|
-
deps:
|
|
16
|
+
deps: StudyDeps;
|
|
17
17
|
now: () => number;
|
|
18
18
|
nowIso: () => string;
|
|
19
19
|
sanitize: (text: string) => string;
|